From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 4030 invoked by alias); 10 Apr 2003 01:56:04 -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 4003 invoked by uid 71); 10 Apr 2003 01:56:01 -0000 Resent-Date: 10 Apr 2003 01:56:01 -0000 Resent-Message-ID: <20030410015601.4002.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, Artur Kedzierski Received: (qmail 4574 invoked by uid 48); 10 Apr 2003 01:49:41 -0000 Message-Id: <20030410014941.4573.qmail@sources.redhat.com> Date: Thu, 10 Apr 2003 01:56:00 -0000 From: Artur Kedzierski Reply-To: Artur Kedzierski To: gcc-gnats@gcc.gnu.org X-Send-Pr-Version: gnatsweb-2.9.3 (1.1.1.1.2.31) Subject: c++/10367: Internal Compiler Error X-SW-Source: 2003-04/txt/msg00410.txt.bz2 List-Id: >Number: 10367 >Category: c++ >Synopsis: Internal Compiler Error >Confidential: no >Severity: non-critical >Priority: low >Responsible: unassigned >State: open >Class: sw-bug >Submitter-Id: net >Arrival-Date: Thu Apr 10 01:56:01 UTC 2003 >Closed-Date: >Last-Modified: >Originator: Artur Kedzierski >Release: 3.2.2 / 3.2 20020903 (Red Hat Linux 8.0 3.2-7) / 3.2.3 20030331 (Debian prerelease) >Organization: >Environment: Debian Sid and Slackware 9.0 and RedHat 8.0 >Description: The attached following code causes an internal compiler error: #include #include int main() { switch (0) { case 0: std::vector url_list; break; default: } } I know that there are brackets missing in the code. However, that shouldn't cause the internal compiler error. This is the error message: test.cc: In function `int main()': test.cc:10: jump to case label test.cc:8: crosses initialization of `std::vector > url_list' test.cc:11: parse error before `}' token Internal compiler error: Error reporting routines re-entered. The minimum command line used: g++ SegFault.cc >How-To-Repeat: Compile the code given in description. It caused the same error on Slackware, Debian, and RedHat. >Fix: Unknown >Release-Note: >Audit-Trail: >Unformatted: ----gnatsweb-attachment---- Content-Type: application/octet-stream; name="SegFault.ii" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="SegFault.ii" IyAxICJTZWdGYXVsdC5jYyIKIyAxICI8YnVpbHQtaW4+IgojIDEgIjxjb21tYW5kIGxpbmU+Igoj IDEgIlNlZ0ZhdWx0LmNjIgojIDEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2lvc3RyZWFtIiAxIDMK IyA0MyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvaW9zdHJlYW0iIDMKCiMgMSAiL3Vzci9pbmNsdWRl L2MrKy8zLjIvaTM4Ni1saW51eC9iaXRzL2MrK2NvbmZpZy5oIiAxIDMKIyAzNCAiL3Vzci9pbmNs dWRlL2MrKy8zLjIvaTM4Ni1saW51eC9iaXRzL2MrK2NvbmZpZy5oIiAzCiMgMSAiL3Vzci9pbmNs dWRlL2MrKy8zLjIvaTM4Ni1saW51eC9iaXRzL29zX2RlZmluZXMuaCIgMSAzCiMgMzkgIi91c3Iv aW5jbHVkZS9jKysvMy4yL2kzODYtbGludXgvYml0cy9vc19kZWZpbmVzLmgiIDMKIyAxICIvdXNy L2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMjkxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIg MwojIDEgIi91c3IvaW5jbHVkZS9zeXMvY2RlZnMuaCIgMSAzCiMgMjkyICIvdXNyL2luY2x1ZGUv ZmVhdHVyZXMuaCIgMiAzCiMgMzE0ICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMwojIDEgIi91 c3IvaW5jbHVkZS9nbnUvc3R1YnMuaCIgMSAzCiMgMzE1ICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMu aCIgMiAzCiMgNDAgIi91c3IvaW5jbHVkZS9jKysvMy4yL2kzODYtbGludXgvYml0cy9vc19kZWZp bmVzLmgiIDIgMwojIDM1ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9pMzg2LWxpbnV4L2JpdHMvYysr Y29uZmlnLmgiIDIgMwojIDQ1ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9pb3N0cmVhbSIgMiAzCiMg MSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvb3N0cmVhbSIgMSAzCiMgNDQgIi91c3IvaW5jbHVkZS9j KysvMy4yL29zdHJlYW0iIDMKCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvaW9zIiAxIDMKIyA0 MyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvaW9zIiAzCgojIDEgIi91c3IvaW5jbHVkZS9jKysvMy4y L2lvc2Z3ZCIgMSAzCiMgNDMgIi91c3IvaW5jbHVkZS9jKysvMy4yL2lvc2Z3ZCIgMwoKCiMgMSAi L3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdHJpbmdmd2QuaCIgMSAzCiMgNDMgIi91c3IvaW5j bHVkZS9jKysvMy4yL2JpdHMvc3RyaW5nZndkLmgiIDMKCgoKbmFtZXNwYWNlIHN0ZAp7CiAgdGVt cGxhdGU8dHlwZW5hbWUgX0FsbG9jPgogICAgY2xhc3MgYWxsb2NhdG9yOwoKICB0ZW1wbGF0ZTxj bGFzcyBfQ2hhclQ+CiAgICBzdHJ1Y3QgY2hhcl90cmFpdHM7CgogIHRlbXBsYXRlPHR5cGVuYW1l IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4sCiAgICAgICAg ICAgdHlwZW5hbWUgX0FsbG9jID0gYWxsb2NhdG9yPF9DaGFyVD4gPgogICAgY2xhc3MgYmFzaWNf c3RyaW5nOwoKICB0ZW1wbGF0ZTw+IHN0cnVjdCBjaGFyX3RyYWl0czxjaGFyPjsKCiAgdHlwZWRl ZiBiYXNpY19zdHJpbmc8Y2hhcj4gc3RyaW5nOwoKCiAgdGVtcGxhdGU8PiBzdHJ1Y3QgY2hhcl90 cmFpdHM8d2NoYXJfdD47CgogIHR5cGVkZWYgYmFzaWNfc3RyaW5nPHdjaGFyX3Q+IHdzdHJpbmc7 Cgp9CiMgNDYgIi91c3IvaW5jbHVkZS9jKysvMy4yL2lvc2Z3ZCIgMiAzCiMgMSAiL3Vzci9pbmNs dWRlL2MrKy8zLjIvYml0cy9mcG9zLmgiIDEgMwojIDQzICIvdXNyL2luY2x1ZGUvYysrLzMuMi9i aXRzL2Zwb3MuaCIgMwoKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9pMzg2LWxpbnV4L2JpdHMv YysraW8uaCIgMSAzCiMgMzUgIi91c3IvaW5jbHVkZS9jKysvMy4yL2kzODYtbGludXgvYml0cy9j Kytpby5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvY3N0ZGlvIiAxIDMKIyA0OCAiL3Vz ci9pbmNsdWRlL2MrKy8zLjIvY3N0ZGlvIiAzCgoKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9j c3RkZGVmIiAxIDMKIyA0NyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvY3N0ZGRlZiIgMwoKIyAxICIv dXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMy4yLjMvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMg MTUxICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMy4yLjMvaW5jbHVkZS9zdGRkZWYuaCIg Mwp0eXBlZGVmIGludCBwdHJkaWZmX3Q7CiMgMjEzICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGlu dXgvMy4yLjMvaW5jbHVkZS9zdGRkZWYuaCIgMwp0eXBlZGVmIHVuc2lnbmVkIGludCBzaXplX3Q7 CiMgNDkgIi91c3IvaW5jbHVkZS9jKysvMy4yL2NzdGRkZWYiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7 CiAgdXNpbmcgOjpwdHJkaWZmX3Q7CiAgdXNpbmcgOjpzaXplX3Q7Cn0KIyA1MSAiL3Vzci9pbmNs dWRlL2MrKy8zLjIvY3N0ZGlvIiAyIDMKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4 LzMuMi4zL2luY2x1ZGUvc3RkaW8uaCIgMSAzCiMgMzkgIi91c3IvbGliL2djYy1saWIvaTM4Ni1s aW51eC8zLjIuMy9pbmNsdWRlL3N0ZGlvLmgiIDMKZXh0ZXJuICJDIiB7CgoKCiMgMSAiL3Vzci9s aWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzMuMi4zL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDQ0ICIv dXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMy4yLjMvaW5jbHVkZS9zdGRpby5oIiAyIDMKCiMg MSAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMSAzCiMgMjggIi91c3IvaW5jbHVkZS9iaXRz L3R5cGVzLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy93b3Jkc2l6ZS5oIiAxIDMKIyAyOSAi L3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMiAzCgoKIyAxICIvdXNyL2xpYi9nY2MtbGliL2kz ODYtbGludXgvMy4yLjMvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMzIgIi91c3IvaW5jbHVkZS9i aXRzL3R5cGVzLmgiIDIgMwoKCnR5cGVkZWYgdW5zaWduZWQgY2hhciBfX3VfY2hhcjsKdHlwZWRl ZiB1bnNpZ25lZCBzaG9ydCBpbnQgX191X3Nob3J0Owp0eXBlZGVmIHVuc2lnbmVkIGludCBfX3Vf aW50Owp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50IF9fdV9sb25nOwoKCnR5cGVkZWYgc2lnbmVk IGNoYXIgX19pbnQ4X3Q7CnR5cGVkZWYgdW5zaWduZWQgY2hhciBfX3VpbnQ4X3Q7CnR5cGVkZWYg c2lnbmVkIHNob3J0IGludCBfX2ludDE2X3Q7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IF9f dWludDE2X3Q7CnR5cGVkZWYgc2lnbmVkIGludCBfX2ludDMyX3Q7CnR5cGVkZWYgdW5zaWduZWQg aW50IF9fdWludDMyX3Q7CgoKCgpfX2V4dGVuc2lvbl9fIHR5cGVkZWYgc2lnbmVkIGxvbmcgbG9u ZyBpbnQgX19pbnQ2NF90OwpfX2V4dGVuc2lvbl9fIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25n IGludCBfX3VpbnQ2NF90OwoKCgoKCl9fZXh0ZW5zaW9uX18gdHlwZWRlZiBsb25nIGxvbmcgaW50 IF9fcXVhZF90OwpfX2V4dGVuc2lvbl9fIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIGludCBf X3VfcXVhZF90OwojIDEyOCAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMwojIDEgIi91c3Iv aW5jbHVkZS9iaXRzL3R5cGVzaXplcy5oIiAxIDMKIyAxMjkgIi91c3IvaW5jbHVkZS9iaXRzL3R5 cGVzLmgiIDIgMwoKCnR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIGludCBfX2Rldl90Owp0eXBl ZGVmIHVuc2lnbmVkIGludCBfX3VpZF90Owp0eXBlZGVmIHVuc2lnbmVkIGludCBfX2dpZF90Owp0 eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50IF9faW5vX3Q7CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBs b25nIGludCBfX2lubzY0X3Q7CnR5cGVkZWYgdW5zaWduZWQgaW50IF9fbW9kZV90Owp0eXBlZGVm IHVuc2lnbmVkIGludCBfX25saW5rX3Q7CnR5cGVkZWYgbG9uZyBpbnQgX19vZmZfdDsKdHlwZWRl ZiBsb25nIGxvbmcgaW50IF9fb2ZmNjRfdDsKdHlwZWRlZiBpbnQgX19waWRfdDsKdHlwZWRlZiBz dHJ1Y3QgeyBpbnQgX192YWxbMl07IH0gX19mc2lkX3Q7CnR5cGVkZWYgbG9uZyBpbnQgX19jbG9j a190Owp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50IF9fcmxpbV90Owp0eXBlZGVmIHVuc2lnbmVk IGxvbmcgbG9uZyBpbnQgX19ybGltNjRfdDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX19pZF90Owp0 eXBlZGVmIGxvbmcgaW50IF9fdGltZV90Owp0eXBlZGVmIHVuc2lnbmVkIGludCBfX3VzZWNvbmRz X3Q7CnR5cGVkZWYgbG9uZyBpbnQgX19zdXNlY29uZHNfdDsKCnR5cGVkZWYgaW50IF9fZGFkZHJf dDsKdHlwZWRlZiBsb25nIGludCBfX3N3YmxrX3Q7CnR5cGVkZWYgaW50IF9fa2V5X3Q7CgoKdHlw ZWRlZiBpbnQgX19jbG9ja2lkX3Q7CgoKdHlwZWRlZiBpbnQgX190aW1lcl90OwoKCnR5cGVkZWYg bG9uZyBpbnQgX19ibGtzaXplX3Q7CgoKCgp0eXBlZGVmIGxvbmcgaW50IF9fYmxrY250X3Q7CnR5 cGVkZWYgbG9uZyBsb25nIGludCBfX2Jsa2NudDY0X3Q7CgoKdHlwZWRlZiB1bnNpZ25lZCBsb25n IGludCBfX2ZzYmxrY250X3Q7CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIGludCBfX2ZzYmxr Y250NjRfdDsKCgp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50IF9fZnNmaWxjbnRfdDsKdHlwZWRl ZiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IF9fZnNmaWxjbnQ2NF90OwoKCgoKdHlwZWRlZiBpbnQg X19zc2l6ZV90Owp0eXBlZGVmIF9fb2ZmNjRfdCBfX2xvZmZfdDsKdHlwZWRlZiBfX3F1YWRfdCAq X19xYWRkcl90Owp0eXBlZGVmIGNoYXIgKl9fY2FkZHJfdDsKCgp0eXBlZGVmIGludCBfX2ludHB0 cl90OwoKCnR5cGVkZWYgdW5zaWduZWQgaW50IF9fc29ja2xlbl90OwojIDQ2ICIvdXNyL2xpYi9n Y2MtbGliL2kzODYtbGludXgvMy4yLjMvaW5jbHVkZS9zdGRpby5oIiAyIDMKCgoKCgoKCgoKdHlw ZWRlZiBzdHJ1Y3QgX0lPX0ZJTEUgRklMRTsKCgoKCgojIDcxICIvdXNyL2xpYi9nY2MtbGliL2kz ODYtbGludXgvMy4yLjMvaW5jbHVkZS9zdGRpby5oIiAzCnR5cGVkZWYgc3RydWN0IF9JT19GSUxF IF9fRklMRTsKIyA4MSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzMuMi4zL2luY2x1ZGUv c3RkaW8uaCIgMwojIDEgIi91c3IvaW5jbHVkZS9saWJpby5oIiAxIDMKIyAzMiAiL3Vzci9pbmNs dWRlL2xpYmlvLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvX0dfY29uZmlnLmgiIDEgMwojIDE0ICIv dXNyL2luY2x1ZGUvX0dfY29uZmlnLmgiIDMKIyAxICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGlu dXgvMy4yLjMvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMzU0ICIvdXNyL2xpYi9nY2MtbGliL2kz ODYtbGludXgvMy4yLjMvaW5jbHVkZS9zdGRkZWYuaCIgMwp0eXBlZGVmIHVuc2lnbmVkIGludCB3 aW50X3Q7CiMgMTUgIi91c3IvaW5jbHVkZS9fR19jb25maWcuaCIgMiAzCiMgMjQgIi91c3IvaW5j bHVkZS9fR19jb25maWcuaCIgMwojIDEgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAxIDMKIyA0OCAi L3Vzci9pbmNsdWRlL3djaGFyLmgiIDMKIyAxICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgv My4yLjMvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgNDkgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAy IDMKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvd2NoYXIuaCIgMSAzCiMgNTEgIi91c3IvaW5jbHVk ZS93Y2hhci5oIiAyIDMKIyA2MyAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDMKCgoKCgoKCgp0eXBl ZGVmIHN0cnVjdAp7CiAgaW50IF9fY291bnQ7CiAgdW5pb24KICB7CiAgICB3aW50X3QgX193Y2g7 CiAgICBjaGFyIF9fd2NoYls0XTsKICB9IF9fdmFsdWU7Cn0gX19tYnN0YXRlX3Q7CiMgMjUgIi91 c3IvaW5jbHVkZS9fR19jb25maWcuaCIgMiAzCgp0eXBlZGVmIHN0cnVjdAp7CiAgX19vZmZfdCBf X3BvczsKICBfX21ic3RhdGVfdCBfX3N0YXRlOwp9IF9HX2Zwb3NfdDsKdHlwZWRlZiBzdHJ1Y3QK ewogIF9fb2ZmNjRfdCBfX3BvczsKICBfX21ic3RhdGVfdCBfX3N0YXRlOwp9IF9HX2Zwb3M2NF90 OwojIDQ0ICIvdXNyL2luY2x1ZGUvX0dfY29uZmlnLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZ2Nv bnYuaCIgMSAzCiMgMjggIi91c3IvaW5jbHVkZS9nY29udi5oIiAzCiMgMSAiL3Vzci9pbmNsdWRl L3djaGFyLmgiIDEgMwojIDQ4ICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMwojIDEgIi91c3IvbGli L2djYy1saWIvaTM4Ni1saW51eC8zLjIuMy9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyA0OSAiL3Vz ci9pbmNsdWRlL3djaGFyLmgiIDIgMwojIDYzICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMwoKIyAy OSAiL3Vzci9pbmNsdWRlL2djb252LmgiIDIgMwoKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2 LWxpbnV4LzMuMi4zL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDMyICIvdXNyL2luY2x1ZGUvZ2Nv bnYuaCIgMiAzCgoKCgoKZW51bQp7CiAgX19HQ09OVl9PSyA9IDAsCiAgX19HQ09OVl9OT0NPTlYs CiAgX19HQ09OVl9OT0RCLAogIF9fR0NPTlZfTk9NRU0sCgogIF9fR0NPTlZfRU1QVFlfSU5QVVQs CiAgX19HQ09OVl9GVUxMX09VVFBVVCwKICBfX0dDT05WX0lMTEVHQUxfSU5QVVQsCiAgX19HQ09O Vl9JTkNPTVBMRVRFX0lOUFVULAoKICBfX0dDT05WX0lMTEVHQUxfREVTQ1JJUFRPUiwKICBfX0dD T05WX0lOVEVSTkFMX0VSUk9SCn07CgoKCmVudW0KewogIF9fR0NPTlZfSVNfTEFTVCA9IDB4MDAw MSwKICBfX0dDT05WX0lHTk9SRV9FUlJPUlMgPSAweDAwMDIKfTsKCgoKc3RydWN0IF9fZ2NvbnZf c3RlcDsKc3RydWN0IF9fZ2NvbnZfc3RlcF9kYXRhOwpzdHJ1Y3QgX19nY29udl9sb2FkZWRfb2Jq ZWN0OwpzdHJ1Y3QgX19nY29udl90cmFuc19kYXRhOwoKCgp0eXBlZGVmIGludCAoKl9fZ2NvbnZf ZmN0KSAoc3RydWN0IF9fZ2NvbnZfc3RlcCAqLCBzdHJ1Y3QgX19nY29udl9zdGVwX2RhdGEgKiwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgdW5zaWduZWQgY2hhciAqKiwgX19j b25zdCB1bnNpZ25lZCBjaGFyICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25l ZCBjaGFyICoqLCBzaXplX3QgKiwgaW50LCBpbnQpOwoKCnR5cGVkZWYgd2ludF90ICgqX19nY29u dl9idG93Y19mY3QpIChzdHJ1Y3QgX19nY29udl9zdGVwICosIHVuc2lnbmVkIGNoYXIpOwoKCnR5 cGVkZWYgaW50ICgqX19nY29udl9pbml0X2ZjdCkgKHN0cnVjdCBfX2djb252X3N0ZXAgKik7CnR5 cGVkZWYgdm9pZCAoKl9fZ2NvbnZfZW5kX2ZjdCkgKHN0cnVjdCBfX2djb252X3N0ZXAgKik7CgoK CnR5cGVkZWYgaW50ICgqX19nY29udl90cmFuc19mY3QpIChzdHJ1Y3QgX19nY29udl9zdGVwICos CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgX19nY29udl9zdGVwX2Rh dGEgKiwgdm9pZCAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB1 bnNpZ25lZCBjaGFyICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0 IHVuc2lnbmVkIGNoYXIgKiosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2Nv bnN0IHVuc2lnbmVkIGNoYXIgKiwgdW5zaWduZWQgY2hhciAqKiwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHNpemVfdCAqKTsKCgp0eXBlZGVmIGludCAoKl9fZ2NvbnZfdHJhbnNf Y29udGV4dF9mY3QpICh2b2lkICosIF9fY29uc3QgdW5zaWduZWQgY2hhciAqLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKiwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAq LCB1bnNpZ25lZCBjaGFyICopOwoKCnR5cGVkZWYgaW50ICgqX19nY29udl90cmFuc19xdWVyeV9m Y3QpIChfX2NvbnN0IGNoYXIgKiwgX19jb25zdCBjaGFyICoqKiwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqKTsKCgp0eXBlZGVmIGludCAoKl9fZ2NvbnZf dHJhbnNfaW5pdF9mY3QpICh2b2lkICoqLCBjb25zdCBjaGFyICopOwp0eXBlZGVmIHZvaWQgKCpf X2djb252X3RyYW5zX2VuZF9mY3QpICh2b2lkICopOwoKc3RydWN0IF9fZ2NvbnZfdHJhbnNfZGF0 YQp7CgogIF9fZ2NvbnZfdHJhbnNfZmN0IF9fdHJhbnNfZmN0OwogIF9fZ2NvbnZfdHJhbnNfY29u dGV4dF9mY3QgX190cmFuc19jb250ZXh0X2ZjdDsKICBfX2djb252X3RyYW5zX2VuZF9mY3QgX190 cmFuc19lbmRfZmN0OwogIHZvaWQgKl9fZGF0YTsKICBzdHJ1Y3QgX19nY29udl90cmFuc19kYXRh ICpfX25leHQ7Cn07CgoKCnN0cnVjdCBfX2djb252X3N0ZXAKewogIHN0cnVjdCBfX2djb252X2xv YWRlZF9vYmplY3QgKl9fc2hsaWJfaGFuZGxlOwogIF9fY29uc3QgY2hhciAqX19tb2RuYW1lOwoK ICBpbnQgX19jb3VudGVyOwoKICBjaGFyICpfX2Zyb21fbmFtZTsKICBjaGFyICpfX3RvX25hbWU7 CgogIF9fZ2NvbnZfZmN0IF9fZmN0OwogIF9fZ2NvbnZfYnRvd2NfZmN0IF9fYnRvd2NfZmN0Owog IF9fZ2NvbnZfaW5pdF9mY3QgX19pbml0X2ZjdDsKICBfX2djb252X2VuZF9mY3QgX19lbmRfZmN0 OwoKCgogIGludCBfX21pbl9uZWVkZWRfZnJvbTsKICBpbnQgX19tYXhfbmVlZGVkX2Zyb207CiAg aW50IF9fbWluX25lZWRlZF90bzsKICBpbnQgX19tYXhfbmVlZGVkX3RvOwoKCiAgaW50IF9fc3Rh dGVmdWw7CgogIHZvaWQgKl9fZGF0YTsKfTsKCgoKc3RydWN0IF9fZ2NvbnZfc3RlcF9kYXRhCnsK ICB1bnNpZ25lZCBjaGFyICpfX291dGJ1ZjsKICB1bnNpZ25lZCBjaGFyICpfX291dGJ1ZmVuZDsK CgoKICBpbnQgX19mbGFnczsKCgoKICBpbnQgX19pbnZvY2F0aW9uX2NvdW50ZXI7CgoKCiAgaW50 IF9faW50ZXJuYWxfdXNlOwoKICBfX21ic3RhdGVfdCAqX19zdGF0ZXA7CiAgX19tYnN0YXRlX3Qg X19zdGF0ZTsKCgoKICBzdHJ1Y3QgX19nY29udl90cmFuc19kYXRhICpfX3RyYW5zOwp9OwoKCgp0 eXBlZGVmIHN0cnVjdCBfX2djb252X2luZm8KewogIHNpemVfdCBfX25zdGVwczsKICBzdHJ1Y3Qg X19nY29udl9zdGVwICpfX3N0ZXBzOwogIF9fZXh0ZW5zaW9uX18gc3RydWN0IF9fZ2NvbnZfc3Rl cF9kYXRhIF9fZGF0YSBbXTsKfSAqX19nY29udl90OwojIDQ1ICIvdXNyL2luY2x1ZGUvX0dfY29u ZmlnLmgiIDIgMwp0eXBlZGVmIHVuaW9uCnsKICBzdHJ1Y3QgX19nY29udl9pbmZvIF9fY2Q7CiAg c3RydWN0CiAgewogICAgc3RydWN0IF9fZ2NvbnZfaW5mbyBfX2NkOwogICAgc3RydWN0IF9fZ2Nv bnZfc3RlcF9kYXRhIF9fZGF0YTsKICB9IF9fY29tYmluZWQ7Cn0gX0dfaWNvbnZfdDsKCnR5cGVk ZWYgaW50IF9HX2ludDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX0hJX18pKSk7CnR5 cGVkZWYgaW50IF9HX2ludDMyX3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX1NJX18pKSk7 CnR5cGVkZWYgdW5zaWduZWQgaW50IF9HX3VpbnQxNl90IF9fYXR0cmlidXRlX18gKChfX21vZGVf XyAoX19ISV9fKSkpOwp0eXBlZGVmIHVuc2lnbmVkIGludCBfR191aW50MzJfdCBfX2F0dHJpYnV0 ZV9fICgoX19tb2RlX18gKF9fU0lfXykpKTsKIyAzMyAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDIg MwojIDUzICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwojIDEgIi91c3IvbGliL2djYy1saWIvaTM4 Ni1saW51eC8zLjIuMy9pbmNsdWRlL3N0ZGFyZy5oIiAxIDMKIyA0MyAiL3Vzci9saWIvZ2NjLWxp Yi9pMzg2LWxpbnV4LzMuMi4zL2luY2x1ZGUvc3RkYXJnLmgiIDMKdHlwZWRlZiBfX2J1aWx0aW5f dmFfbGlzdCBfX2dudWNfdmFfbGlzdDsKIyA1NCAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDIgMwoj IDE2MiAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKc3RydWN0IF9JT19qdW1wX3Q7IHN0cnVjdCBf SU9fRklMRTsKIyAxNzIgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCnR5cGVkZWYgdm9pZCBfSU9f bG9ja190OwoKCgoKCnN0cnVjdCBfSU9fbWFya2VyIHsKICBzdHJ1Y3QgX0lPX21hcmtlciAqX25l eHQ7CiAgc3RydWN0IF9JT19GSUxFICpfc2J1ZjsKCgoKICBpbnQgX3BvczsKIyAxOTUgIi91c3Iv aW5jbHVkZS9saWJpby5oIiAzCn07CgoKZW51bSBfX2NvZGVjdnRfcmVzdWx0CnsKICBfX2NvZGVj dnRfb2ssCiAgX19jb2RlY3Z0X3BhcnRpYWwsCiAgX19jb2RlY3Z0X2Vycm9yLAogIF9fY29kZWN2 dF9ub2NvbnYKfTsKCgoKCnN0cnVjdCBfSU9fY29kZWN2dAp7CiAgdm9pZCAoKl9fY29kZWN2dF9k ZXN0cikgKHN0cnVjdCBfSU9fY29kZWN2dCAqKTsKICBlbnVtIF9fY29kZWN2dF9yZXN1bHQgKCpf X2NvZGVjdnRfZG9fb3V0KSAoc3RydWN0IF9JT19jb2RlY3Z0ICosCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbWJzdGF0ZV90ICosCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHdjaGFyX3QgKiwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgd2NoYXJfdCAqLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB3Y2hhcl90ICoq LCBjaGFyICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNo YXIgKiwgY2hhciAqKik7CiAgZW51bSBfX2NvZGVjdnRfcmVzdWx0ICgqX19jb2RlY3Z0X2RvX3Vu c2hpZnQpIChzdHJ1Y3QgX0lPX2NvZGVjdnQgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIF9fbWJzdGF0ZV90ICosIGNoYXIgKiwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKiwgY2hhciAqKik7CiAg ZW51bSBfX2NvZGVjdnRfcmVzdWx0ICgqX19jb2RlY3Z0X2RvX2luKSAoc3RydWN0IF9JT19jb2Rl Y3Z0ICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19tYnN0 YXRlX3QgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z dCBjaGFyICosIGNvbnN0IGNoYXIgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjb25zdCBjaGFyICoqLCB3Y2hhcl90ICosCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqLCB3Y2hhcl90ICoqKTsKICBpbnQgKCpf X2NvZGVjdnRfZG9fZW5jb2RpbmcpIChzdHJ1Y3QgX0lPX2NvZGVjdnQgKik7CiAgaW50ICgqX19j b2RlY3Z0X2RvX2Fsd2F5c19ub2NvbnYpIChzdHJ1Y3QgX0lPX2NvZGVjdnQgKik7CiAgaW50ICgq X19jb2RlY3Z0X2RvX2xlbmd0aCkgKHN0cnVjdCBfSU9fY29kZWN2dCAqLCBfX21ic3RhdGVfdCAq LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIg Kiwgc2l6ZV90KTsKICBpbnQgKCpfX2NvZGVjdnRfZG9fbWF4X2xlbmd0aCkgKHN0cnVjdCBfSU9f Y29kZWN2dCAqKTsKCiAgX0dfaWNvbnZfdCBfX2NkX2luOwogIF9HX2ljb252X3QgX19jZF9vdXQ7 Cn07CgoKc3RydWN0IF9JT193aWRlX2RhdGEKewogIHdjaGFyX3QgKl9JT19yZWFkX3B0cjsKICB3 Y2hhcl90ICpfSU9fcmVhZF9lbmQ7CiAgd2NoYXJfdCAqX0lPX3JlYWRfYmFzZTsKICB3Y2hhcl90 ICpfSU9fd3JpdGVfYmFzZTsKICB3Y2hhcl90ICpfSU9fd3JpdGVfcHRyOwogIHdjaGFyX3QgKl9J T193cml0ZV9lbmQ7CiAgd2NoYXJfdCAqX0lPX2J1Zl9iYXNlOwogIHdjaGFyX3QgKl9JT19idWZf ZW5kOwoKICB3Y2hhcl90ICpfSU9fc2F2ZV9iYXNlOwogIHdjaGFyX3QgKl9JT19iYWNrdXBfYmFz ZTsKCiAgd2NoYXJfdCAqX0lPX3NhdmVfZW5kOwoKICBfX21ic3RhdGVfdCBfSU9fc3RhdGU7CiAg X19tYnN0YXRlX3QgX0lPX2xhc3Rfc3RhdGU7CiAgc3RydWN0IF9JT19jb2RlY3Z0IF9jb2RlY3Z0 OwoKICB3Y2hhcl90IF9zaG9ydGJ1ZlsxXTsKCiAgc3RydWN0IF9JT19qdW1wX3QgKl93aWRlX3Z0 YWJsZTsKfTsKCgpzdHJ1Y3QgX0lPX0ZJTEUgewogIGludCBfZmxhZ3M7CgoKCgogIGNoYXIqIF9J T19yZWFkX3B0cjsKICBjaGFyKiBfSU9fcmVhZF9lbmQ7CiAgY2hhciogX0lPX3JlYWRfYmFzZTsK ICBjaGFyKiBfSU9fd3JpdGVfYmFzZTsKICBjaGFyKiBfSU9fd3JpdGVfcHRyOwogIGNoYXIqIF9J T193cml0ZV9lbmQ7CiAgY2hhciogX0lPX2J1Zl9iYXNlOwogIGNoYXIqIF9JT19idWZfZW5kOwoK ICBjaGFyICpfSU9fc2F2ZV9iYXNlOwogIGNoYXIgKl9JT19iYWNrdXBfYmFzZTsKICBjaGFyICpf SU9fc2F2ZV9lbmQ7CgogIHN0cnVjdCBfSU9fbWFya2VyICpfbWFya2VyczsKCiAgc3RydWN0IF9J T19GSUxFICpfY2hhaW47CgogIGludCBfZmlsZW5vOwoKCgogIGludCBfZmxhZ3MyOwoKICBfX29m Zl90IF9vbGRfb2Zmc2V0OwoKCgogIHVuc2lnbmVkIHNob3J0IF9jdXJfY29sdW1uOwogIHNpZ25l ZCBjaGFyIF92dGFibGVfb2Zmc2V0OwogIGNoYXIgX3Nob3J0YnVmWzFdOwoKCgogIF9JT19sb2Nr X3QgKl9sb2NrOwojIDMxMSAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKICBfX29mZjY0X3QgX29m ZnNldDsKCgogIHN0cnVjdCBfSU9fY29kZWN2dCAqX2NvZGVjdnQ7CiAgc3RydWN0IF9JT193aWRl X2RhdGEgKl93aWRlX2RhdGE7CgoKCgogIGludCBfbW9kZTsKCiAgY2hhciBfdW51c2VkMlsxNSAq IHNpemVvZiAoaW50KSAtIDIgKiBzaXplb2YgKHZvaWQgKildOwoKfTsKCgoKCgpzdHJ1Y3QgX0lP X0ZJTEVfcGx1czsKCmV4dGVybiBzdHJ1Y3QgX0lPX0ZJTEVfcGx1cyBfSU9fMl8xX3N0ZGluXzsK ZXh0ZXJuIHN0cnVjdCBfSU9fRklMRV9wbHVzIF9JT18yXzFfc3Rkb3V0XzsKZXh0ZXJuIHN0cnVj dCBfSU9fRklMRV9wbHVzIF9JT18yXzFfc3RkZXJyXzsKIyAzNTAgIi91c3IvaW5jbHVkZS9saWJp by5oIiAzCnR5cGVkZWYgX19zc2l6ZV90IF9faW9fcmVhZF9mbiAodm9pZCAqX19jb29raWUsIGNo YXIgKl9fYnVmLCBzaXplX3QgX19uYnl0ZXMpOwoKCgoKCgoKdHlwZWRlZiBfX3NzaXplX3QgX19p b193cml0ZV9mbiAodm9pZCAqX19jb29raWUsIF9fY29uc3QgY2hhciAqX19idWYsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX24pOwoKCgoKCgoKdHlwZWRlZiBpbnQg X19pb19zZWVrX2ZuICh2b2lkICpfX2Nvb2tpZSwgX19vZmY2NF90ICpfX3BvcywgaW50IF9fdyk7 CgoKdHlwZWRlZiBpbnQgX19pb19jbG9zZV9mbiAodm9pZCAqX19jb29raWUpOwoKCgoKdHlwZWRl ZiBfX2lvX3JlYWRfZm4gY29va2llX3JlYWRfZnVuY3Rpb25fdDsKdHlwZWRlZiBfX2lvX3dyaXRl X2ZuIGNvb2tpZV93cml0ZV9mdW5jdGlvbl90Owp0eXBlZGVmIF9faW9fc2Vla19mbiBjb29raWVf c2Vla19mdW5jdGlvbl90Owp0eXBlZGVmIF9faW9fY2xvc2VfZm4gY29va2llX2Nsb3NlX2Z1bmN0 aW9uX3Q7CgoKdHlwZWRlZiBzdHJ1Y3QKewogIF9faW9fcmVhZF9mbiAqcmVhZDsKICBfX2lvX3dy aXRlX2ZuICp3cml0ZTsKICBfX2lvX3NlZWtfZm4gKnNlZWs7CiAgX19pb19jbG9zZV9mbiAqY2xv c2U7Cn0gX0lPX2Nvb2tpZV9pb19mdW5jdGlvbnNfdDsKdHlwZWRlZiBfSU9fY29va2llX2lvX2Z1 bmN0aW9uc190IGNvb2tpZV9pb19mdW5jdGlvbnNfdDsKCnN0cnVjdCBfSU9fY29va2llX2ZpbGU7 CgoKZXh0ZXJuIHZvaWQgX0lPX2Nvb2tpZV9pbml0IChzdHJ1Y3QgX0lPX2Nvb2tpZV9maWxlICpf X2NmaWxlLCBpbnQgX19yZWFkX3dyaXRlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZv aWQgKl9fY29va2llLCBfSU9fY29va2llX2lvX2Z1bmN0aW9uc190IF9fZm5zKTsKCgoKCmV4dGVy biAiQyIgewoKCmV4dGVybiBpbnQgX191bmRlcmZsb3cgKF9JT19GSUxFICopIHRocm93ICgpOwpl eHRlcm4gaW50IF9fdWZsb3cgKF9JT19GSUxFICopIHRocm93ICgpOwpleHRlcm4gaW50IF9fb3Zl cmZsb3cgKF9JT19GSUxFICosIGludCkgdGhyb3cgKCk7CmV4dGVybiB3aW50X3QgX193dW5kZXJm bG93IChfSU9fRklMRSAqKSB0aHJvdyAoKTsKZXh0ZXJuIHdpbnRfdCBfX3d1ZmxvdyAoX0lPX0ZJ TEUgKikgdGhyb3cgKCk7CmV4dGVybiB3aW50X3QgX193b3ZlcmZsb3cgKF9JT19GSUxFICosIHdp bnRfdCkgdGhyb3cgKCk7CiMgNDMyICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwpleHRlcm4gaW50 IF9JT19nZXRjIChfSU9fRklMRSAqX19mcCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX0lPX3B1dGMg KGludCBfX2MsIF9JT19GSUxFICpfX2ZwKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfSU9fZmVvZiAo X0lPX0ZJTEUgKl9fZnApIHRocm93ICgpOwpleHRlcm4gaW50IF9JT19mZXJyb3IgKF9JT19GSUxF ICpfX2ZwKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgX0lPX3BlZWtjX2xvY2tlZCAoX0lPX0ZJTEUg Kl9fZnApIHRocm93ICgpOwoKCgoKCmV4dGVybiB2b2lkIF9JT19mbG9ja2ZpbGUgKF9JT19GSUxF ICopIHRocm93ICgpOwpleHRlcm4gdm9pZCBfSU9fZnVubG9ja2ZpbGUgKF9JT19GSUxFICopIHRo cm93ICgpOwpleHRlcm4gaW50IF9JT19mdHJ5bG9ja2ZpbGUgKF9JT19GSUxFICopIHRocm93ICgp OwojIDQ2MiAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKZXh0ZXJuIGludCBfSU9fdmZzY2FuZiAo X0lPX0ZJTEUgKiBfX3Jlc3RyaWN0LCBjb25zdCBjaGFyICogX19yZXN0cmljdCwKICAgICAgICAg ICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3QsIGludCAqX19yZXN0cmljdCkgdGhyb3cgKCk7 CmV4dGVybiBpbnQgX0lPX3ZmcHJpbnRmIChfSU9fRklMRSAqX19yZXN0cmljdCwgY29uc3QgY2hh ciAqX19yZXN0cmljdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0KSB0 aHJvdyAoKTsKZXh0ZXJuIF9fc3NpemVfdCBfSU9fcGFkbiAoX0lPX0ZJTEUgKiwgaW50LCBfX3Nz aXplX3QpIHRocm93ICgpOwpleHRlcm4gc2l6ZV90IF9JT19zZ2V0biAoX0lPX0ZJTEUgKiwgdm9p ZCAqLCBzaXplX3QpIHRocm93ICgpOwoKZXh0ZXJuIF9fb2ZmNjRfdCBfSU9fc2Vla29mZiAoX0lP X0ZJTEUgKiwgX19vZmY2NF90LCBpbnQsIGludCkgdGhyb3cgKCk7CmV4dGVybiBfX29mZjY0X3Qg X0lPX3NlZWtwb3MgKF9JT19GSUxFICosIF9fb2ZmNjRfdCwgaW50KSB0aHJvdyAoKTsKCmV4dGVy biB2b2lkIF9JT19mcmVlX2JhY2t1cF9hcmVhIChfSU9fRklMRSAqKSB0aHJvdyAoKTsKCgpleHRl cm4gd2ludF90IF9JT19nZXR3YyAoX0lPX0ZJTEUgKl9fZnApIHRocm93ICgpOwpleHRlcm4gd2lu dF90IF9JT19wdXR3YyAod2NoYXJfdCBfX3djLCBfSU9fRklMRSAqX19mcCkgdGhyb3cgKCk7CmV4 dGVybiBpbnQgX0lPX2Z3aWRlIChfSU9fRklMRSAqX19mcCwgaW50IF9fbW9kZSkgdGhyb3cgKCk7 CiMgNTExICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwpleHRlcm4gaW50IF9JT192ZndzY2FuZiAo X0lPX0ZJTEUgKiBfX3Jlc3RyaWN0LCBjb25zdCB3Y2hhcl90ICogX19yZXN0cmljdCwKICAgICAg ICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0LCBpbnQgKl9fcmVzdHJpY3QpIHRocm93 ICgpOwpleHRlcm4gaW50IF9JT192ZndwcmludGYgKF9JT19GSUxFICpfX3Jlc3RyaWN0LCBjb25z dCB3Y2hhcl90ICpfX3Jlc3RyaWN0LAogICAgICAgICAgICAgICAgICAgICAgICAgIF9fZ251Y192 YV9saXN0KSB0aHJvdyAoKTsKZXh0ZXJuIF9fc3NpemVfdCBfSU9fd3BhZG4gKF9JT19GSUxFICos IHdpbnRfdCwgX19zc2l6ZV90KSB0aHJvdyAoKTsKZXh0ZXJuIHZvaWQgX0lPX2ZyZWVfd2JhY2t1 cF9hcmVhIChfSU9fRklMRSAqKSB0aHJvdyAoKTsKCgoKfQojIDgyICIvdXNyL2xpYi9nY2MtbGli L2kzODYtbGludXgvMy4yLjMvaW5jbHVkZS9zdGRpby5oIiAyIDMKCgoKCnR5cGVkZWYgX19nbnVj X3ZhX2xpc3QgX19ub3RfdmFfbGlzdF9fOwojIDk1ICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGlu dXgvMy4yLjMvaW5jbHVkZS9zdGRpby5oIiAzCgoKdHlwZWRlZiBfR19mcG9zX3QgZnBvc190OwoK CgoKCnR5cGVkZWYgX0dfZnBvczY0X3QgZnBvczY0X3Q7CiMgMTQ3ICIvdXNyL2xpYi9nY2MtbGli L2kzODYtbGludXgvMy4yLjMvaW5jbHVkZS9zdGRpby5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2Jp dHMvc3RkaW9fbGltLmgiIDEgMwojIDE0OCAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzMu Mi4zL2luY2x1ZGUvc3RkaW8uaCIgMiAzCgoKCmV4dGVybiBzdHJ1Y3QgX0lPX0ZJTEUgKnN0ZGlu OwpleHRlcm4gc3RydWN0IF9JT19GSUxFICpzdGRvdXQ7CmV4dGVybiBzdHJ1Y3QgX0lPX0ZJTEUg KnN0ZGVycjsKCgoKCgoKCmV4dGVybiBpbnQgcmVtb3ZlIChfX2NvbnN0IGNoYXIgKl9fZmlsZW5h bWUpIHRocm93ICgpOwoKZXh0ZXJuIGludCByZW5hbWUgKF9fY29uc3QgY2hhciAqX19vbGQsIF9f Y29uc3QgY2hhciAqX19uZXcpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gRklMRSAqdG1wZmlsZSAo dm9pZCkgdGhyb3cgKCk7CiMgMTgwICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMy4yLjMv aW5jbHVkZS9zdGRpby5oIiAzCmV4dGVybiBjaGFyICp0bXBuYW0gKGNoYXIgKl9fcykgdGhyb3cg KCk7CgoKCmV4dGVybiBGSUxFICp0bXBmaWxlNjQgKHZvaWQpIHRocm93ICgpOwoKCgoKCmV4dGVy biBjaGFyICp0bXBuYW1fciAoY2hhciAqX19zKSB0aHJvdyAoKTsKIyAyMDIgIi91c3IvbGliL2dj Yy1saWIvaTM4Ni1saW51eC8zLjIuMy9pbmNsdWRlL3N0ZGlvLmgiIDMKZXh0ZXJuIGNoYXIgKnRl bXBuYW0gKF9fY29uc3QgY2hhciAqX19kaXIsIF9fY29uc3QgY2hhciAqX19wZngpCiAgICAgdGhy b3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKCgoKCgpleHRlcm4gaW50IGZjbG9z ZSAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKZXh0ZXJuIGludCBmZmx1c2ggKEZJTEUgKl9f c3RyZWFtKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgZmZsdXNoX3VubG9ja2VkIChGSUxFICpf X3N0cmVhbSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGZjbG9zZWFsbCAodm9pZCkgdGhyb3cg KCk7CgoKCgoKCmV4dGVybiBGSUxFICpmb3BlbiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9f ZmlsZW5hbWUsCiAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9f bW9kZXMpIHRocm93ICgpOwoKZXh0ZXJuIEZJTEUgKmZyZW9wZW4gKF9fY29uc3QgY2hhciAqX19y ZXN0cmljdCBfX2ZpbGVuYW1lLAogICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpf X3Jlc3RyaWN0IF9fbW9kZXMsCiAgICAgICAgICAgICAgICAgICAgICBGSUxFICpfX3Jlc3RyaWN0 IF9fc3RyZWFtKSB0aHJvdyAoKTsKIyAyNDggIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8z LjIuMy9pbmNsdWRlL3N0ZGlvLmgiIDMKCgpleHRlcm4gRklMRSAqZm9wZW42NCAoX19jb25zdCBj aGFyICpfX3Jlc3RyaWN0IF9fZmlsZW5hbWUsCiAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0 IGNoYXIgKl9fcmVzdHJpY3QgX19tb2RlcykgdGhyb3cgKCk7CmV4dGVybiBGSUxFICpmcmVvcGVu NjQgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZpbGVuYW1lLAogICAgICAgICAgICAgICAg ICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19tb2RlcywKICAgICAgICAgICAgICAg ICAgICAgICAgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgpleHRlcm4g RklMRSAqZmRvcGVuIChpbnQgX19mZCwgX19jb25zdCBjaGFyICpfX21vZGVzKSB0aHJvdyAoKTsK CgoKCgpleHRlcm4gRklMRSAqZm9wZW5jb29raWUgKHZvaWQgKl9fcmVzdHJpY3QgX19tYWdpY19j b29raWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0 IF9fbW9kZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX0lPX2Nvb2tpZV9pb19mdW5jdGlv bnNfdCBfX2lvX2Z1bmNzKSB0aHJvdyAoKTsKCgpleHRlcm4gRklMRSAqZm1lbW9wZW4gKHZvaWQg Kl9fcywgc2l6ZV90IF9fbGVuLCBfX2NvbnN0IGNoYXIgKl9fbW9kZXMpIHRocm93ICgpOwoKCgoK ZXh0ZXJuIEZJTEUgKm9wZW5fbWVtc3RyZWFtIChjaGFyICoqX19yZXN0cmljdCBfX2J1ZmxvYywK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKl9fcmVzdHJpY3QgX19zaXplbG9j KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIHZvaWQgc2V0YnVmIChGSUxFICpfX3Jlc3RyaWN0IF9f c3RyZWFtLCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBz ZXR2YnVmIChGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVm LAogICAgICAgICAgICAgICAgICAgIGludCBfX21vZGVzLCBzaXplX3QgX19uKSB0aHJvdyAoKTsK CgoKCgpleHRlcm4gdm9pZCBzZXRidWZmZXIgKEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sIGNo YXIgKl9fcmVzdHJpY3QgX19idWYsCiAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fc2l6 ZSkgdGhyb3cgKCk7CgoKZXh0ZXJuIHZvaWQgc2V0bGluZWJ1ZiAoRklMRSAqX19zdHJlYW0pIHRo cm93ICgpOwoKCgoKCmV4dGVybiBpbnQgZnByaW50ZiAoRklMRSAqX19yZXN0cmljdCBfX3N0cmVh bSwKICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQs IC4uLikgdGhyb3cgKCk7CgpleHRlcm4gaW50IHByaW50ZiAoX19jb25zdCBjaGFyICpfX3Jlc3Ry aWN0IF9fZm9ybWF0LCAuLi4pIHRocm93ICgpOwoKZXh0ZXJuIGludCBzcHJpbnRmIChjaGFyICpf X3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJp Y3QgX19mb3JtYXQsIC4uLikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCB2ZnByaW50ZiAoRklMRSAq X19yZXN0cmljdCBfX3MsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwKICAgICAg ICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3QgX19hcmcpIHRocm93ICgpOwoKZXh0ZXJuIGlu dCB2cHJpbnRmIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIF9fZ251Y192YV9s aXN0IF9fYXJnKQogICAgIHRocm93ICgpOwoKZXh0ZXJuIGludCB2c3ByaW50ZiAoY2hhciAqX19y ZXN0cmljdCBfX3MsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwKICAgICAgICAg ICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3QgX19hcmcpIHRocm93ICgpOwoKCgoKCmV4dGVybiBp bnQgc25wcmludGYgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19tYXhsZW4sCiAgICAg ICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKQog ICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAzLCA0 KSkpOwoKZXh0ZXJuIGludCB2c25wcmludGYgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBzaXplX3Qg X19tYXhsZW4sCiAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3Qg X19mb3JtYXQsIF9fZ251Y192YV9saXN0IF9fYXJnKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRl X18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAzLCAwKSkpOwoKCgoKCgpleHRlcm4gaW50IHZh c3ByaW50ZiAoY2hhciAqKl9fcmVzdHJpY3QgX19wdHIsIF9fY29uc3QgY2hhciAqX19yZXN0cmlj dCBfX2YsCiAgICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICB0 aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMiwgMCkpKTsK ZXh0ZXJuIGludCBfX2FzcHJpbnRmIChjaGFyICoqX19yZXN0cmljdCBfX3B0ciwKICAgICAgICAg ICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mbXQsIC4uLikKICAgICB0 aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMiwgMykpKTsK ZXh0ZXJuIGludCBhc3ByaW50ZiAoY2hhciAqKl9fcmVzdHJpY3QgX19wdHIsCiAgICAgICAgICAg ICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZtdCwgLi4uKQogICAgIHRocm93 ICgpIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAyLCAzKSkpOwoKCmV4 dGVybiBpbnQgdmRwcmludGYgKGludCBfX2ZkLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19m bXQsCiAgICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0IF9fYXJnKQogICAgIHRocm93 ICgpIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAyLCAwKSkpOwpleHRl cm4gaW50IGRwcmludGYgKGludCBfX2ZkLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mbXQs IC4uLikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZf XywgMiwgMykpKTsKCgoKCgpleHRlcm4gaW50IGZzY2FuZiAoRklMRSAqX19yZXN0cmljdCBfX3N0 cmVhbSwKICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1h dCwgLi4uKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgc2NhbmYgKF9fY29uc3QgY2hhciAqX19yZXN0 cmljdCBfX2Zvcm1hdCwgLi4uKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgc3NjYW5mIChfX2NvbnN0 IGNoYXIgKl9fcmVzdHJpY3QgX19zLAogICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpf X3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgdmZzY2Fu ZiAoRklMRSAqX19yZXN0cmljdCBfX3MsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1h dCwKICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICB0aHJvdyAo KSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19zY2FuZl9fLCAyLCAwKSkpOwoKCmV4dGVy biBpbnQgdnNjYW5mIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIF9fZ251Y192 YV9saXN0IF9fYXJnKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChf X3NjYW5mX18sIDEsIDApKSk7CgoKZXh0ZXJuIGludCB2c3NjYW5mIChfX2NvbnN0IGNoYXIgKl9f cmVzdHJpY3QgX19zLAogICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmlj dCBfX2Zvcm1hdCwgX19nbnVjX3ZhX2xpc3QgX19hcmcpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1 dGVfXyAoKF9fZm9ybWF0X18gKF9fc2NhbmZfXywgMiwgMCkpKTsKCgoKCgoKZXh0ZXJuIGludCBm Z2V0YyAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwpleHRlcm4gaW50IGdldGMgKEZJTEUgKl9f c3RyZWFtKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IGdldGNoYXIgKHZvaWQpIHRocm93ICgpOwoK CgoKCgoKCmV4dGVybiBpbnQgZ2V0Y191bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pIHRocm93ICgp OwpleHRlcm4gaW50IGdldGNoYXJfdW5sb2NrZWQgKHZvaWQpIHRocm93ICgpOwoKCgoKZXh0ZXJu IGludCBmZ2V0Y191bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgoKCmV4dGVy biBpbnQgZnB1dGMgKGludCBfX2MsIEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKZXh0ZXJuIGlu dCBwdXRjIChpbnQgX19jLCBGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBw dXRjaGFyIChpbnQgX19jKSB0aHJvdyAoKTsKCgoKCgoKCgpleHRlcm4gaW50IGZwdXRjX3VubG9j a2VkIChpbnQgX19jLCBGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IHB1 dGNfdW5sb2NrZWQgKGludCBfX2MsIEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKZXh0ZXJuIGlu dCBwdXRjaGFyX3VubG9ja2VkIChpbnQgX19jKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IGdl dHcgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB1dHcgKGludCBfX3cs IEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gY2hhciAqZmdldHMgKGNoYXIg Kl9fcmVzdHJpY3QgX19zLCBpbnQgX19uLCBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKQogICAg IHRocm93ICgpOwoKCgpleHRlcm4gY2hhciAqZ2V0cyAoY2hhciAqX19zKSB0aHJvdyAoKTsKCgoK CmV4dGVybiBjaGFyICpmZ2V0c191bmxvY2tlZCAoY2hhciAqX19yZXN0cmljdCBfX3MsIGludCBf X24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRklMRSAqX19yZXN0cmljdCBfX3N0cmVh bSkgdGhyb3cgKCk7CiMgNDcwICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMy4yLjMvaW5j bHVkZS9zdGRpby5oIiAzCmV4dGVybiBfX3NzaXplX3QgX19nZXRkZWxpbSAoY2hhciAqKl9fcmVz dHJpY3QgX19saW5lcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICpf X3Jlc3RyaWN0IF9fbiwgaW50IF9fZGVsaW1pdGVyLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVybiBfX3NzaXpl X3QgZ2V0ZGVsaW0gKGNoYXIgKipfX3Jlc3RyaWN0IF9fbGluZXB0ciwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBzaXplX3QgKl9fcmVzdHJpY3QgX19uLCBpbnQgX19kZWxpbWl0ZXIsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhy b3cgKCk7CgoKZXh0ZXJuIF9fc3NpemVfdCBnZXRsaW5lIChjaGFyICoqX19yZXN0cmljdCBfX2xp bmVwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKl9fcmVzdHJpY3QgX19u LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkg dGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBmcHV0cyAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0 IF9fcywgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkKICAgICB0aHJvdyAoKTsKCgpleHRlcm4g aW50IHB1dHMgKF9fY29uc3QgY2hhciAqX19zKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCB1bmdl dGMgKGludCBfX2MsIEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHNpemVfdCBm cmVhZCAodm9pZCAqX19yZXN0cmljdCBfX3B0ciwgc2l6ZV90IF9fc2l6ZSwKICAgICAgICAgICAg ICAgICAgICAgc2l6ZV90IF9fbiwgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7 CgpleHRlcm4gc2l6ZV90IGZ3cml0ZSAoX19jb25zdCB2b2lkICpfX3Jlc3RyaWN0IF9fcHRyLCBz aXplX3QgX19zaXplLAogICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbiwgRklMRSAqX19y ZXN0cmljdCBfX3MpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBmcHV0c191bmxvY2tlZCAoX19j b25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgRklM RSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gc2l6ZV90IGZyZWFk X3VubG9ja2VkICh2b2lkICpfX3Jlc3RyaWN0IF9fcHRyLCBzaXplX3QgX19zaXplLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19uLCBGSUxFICpfX3Jlc3RyaWN0IF9fc3Ry ZWFtKSB0aHJvdyAoKTsKZXh0ZXJuIHNpemVfdCBmd3JpdGVfdW5sb2NrZWQgKF9fY29uc3Qgdm9p ZCAqX19yZXN0cmljdCBfX3B0ciwgc2l6ZV90IF9fc2l6ZSwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHNpemVfdCBfX24sIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgp OwoKCgoKCmV4dGVybiBpbnQgZnNlZWsgKEZJTEUgKl9fc3RyZWFtLCBsb25nIGludCBfX29mZiwg aW50IF9fd2hlbmNlKSB0aHJvdyAoKTsKCmV4dGVybiBsb25nIGludCBmdGVsbCAoRklMRSAqX19z dHJlYW0pIHRocm93ICgpOwoKZXh0ZXJuIHZvaWQgcmV3aW5kIChGSUxFICpfX3N0cmVhbSkgdGhy b3cgKCk7CgojIDUzNyAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzMuMi4zL2luY2x1ZGUv c3RkaW8uaCIgMwpleHRlcm4gaW50IGZzZWVrbyAoRklMRSAqX19zdHJlYW0sIF9fb2ZmX3QgX19v ZmYsIGludCBfX3doZW5jZSkgdGhyb3cgKCk7CgpleHRlcm4gX19vZmZfdCBmdGVsbG8gKEZJTEUg Kl9fc3RyZWFtKSB0aHJvdyAoKTsKIyA1NTMgIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8z LjIuMy9pbmNsdWRlL3N0ZGlvLmgiIDMKCgoKZXh0ZXJuIGludCBmZ2V0cG9zIChGSUxFICpfX3Jl c3RyaWN0IF9fc3RyZWFtLCBmcG9zX3QgKl9fcmVzdHJpY3QgX19wb3MpCiAgICAgdGhyb3cgKCk7 CgpleHRlcm4gaW50IGZzZXRwb3MgKEZJTEUgKl9fc3RyZWFtLCBfX2NvbnN0IGZwb3NfdCAqX19w b3MpIHRocm93ICgpOwojIDU3MiAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzMuMi4zL2lu Y2x1ZGUvc3RkaW8uaCIgMwoKCgpleHRlcm4gaW50IGZzZWVrbzY0IChGSUxFICpfX3N0cmVhbSwg X19vZmY2NF90IF9fb2ZmLCBpbnQgX193aGVuY2UpIHRocm93ICgpOwpleHRlcm4gX19vZmY2NF90 IGZ0ZWxsbzY0IChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVybiBpbnQgZmdldHBvczY0 IChGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLCBmcG9zNjRfdCAqX19yZXN0cmljdCBfX3BvcykK ICAgICB0aHJvdyAoKTsKZXh0ZXJuIGludCBmc2V0cG9zNjQgKEZJTEUgKl9fc3RyZWFtLCBfX2Nv bnN0IGZwb3M2NF90ICpfX3BvcykgdGhyb3cgKCk7CgoKCgpleHRlcm4gdm9pZCBjbGVhcmVyciAo RklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKZXh0ZXJuIGludCBmZW9mIChGSUxFICpfX3N0cmVh bSkgdGhyb3cgKCk7CgpleHRlcm4gaW50IGZlcnJvciAoRklMRSAqX19zdHJlYW0pIHRocm93ICgp OwoKCgoKZXh0ZXJuIHZvaWQgY2xlYXJlcnJfdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKSB0aHJv dyAoKTsKZXh0ZXJuIGludCBmZW9mX3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7 CmV4dGVybiBpbnQgZmVycm9yX3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoK CgoKZXh0ZXJuIHZvaWQgcGVycm9yIChfX2NvbnN0IGNoYXIgKl9fcykgdGhyb3cgKCk7CgoKCgoK CiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc3lzX2Vycmxpc3QuaCIgMSAzCiMgMjcgIi91c3IvaW5j bHVkZS9iaXRzL3N5c19lcnJsaXN0LmgiIDMKZXh0ZXJuIGludCBzeXNfbmVycjsKZXh0ZXJuIF9f Y29uc3QgY2hhciAqX19jb25zdCBzeXNfZXJybGlzdFtdOwoKCmV4dGVybiBpbnQgX3N5c19uZXJy OwpleHRlcm4gX19jb25zdCBjaGFyICpfX2NvbnN0IF9zeXNfZXJybGlzdFtdOwojIDYwOSAiL3Vz ci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzMuMi4zL2luY2x1ZGUvc3RkaW8uaCIgMiAzCgoKCgpl eHRlcm4gaW50IGZpbGVubyAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGlu dCBmaWxlbm9fdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJu IEZJTEUgKnBvcGVuIChfX2NvbnN0IGNoYXIgKl9fY29tbWFuZCwgX19jb25zdCBjaGFyICpfX21v ZGVzKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHBjbG9zZSAoRklMRSAqX19zdHJlYW0pIHRocm93 ICgpOwoKCgoKCmV4dGVybiBjaGFyICpjdGVybWlkIChjaGFyICpfX3MpIHRocm93ICgpOwoKCgoK CmV4dGVybiBjaGFyICpjdXNlcmlkIChjaGFyICpfX3MpIHRocm93ICgpOwoKCgoKc3RydWN0IG9i c3RhY2s7CgoKZXh0ZXJuIGludCBvYnN0YWNrX3ByaW50ZiAoc3RydWN0IG9ic3RhY2sgKl9fcmVz dHJpY3QgX19vYnN0YWNrLAogICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIg Kl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo X19mb3JtYXRfXyAoX19wcmludGZfXywgMiwgMykpKTsKZXh0ZXJuIGludCBvYnN0YWNrX3Zwcmlu dGYgKHN0cnVjdCBvYnN0YWNrICpfX3Jlc3RyaWN0IF9fb2JzdGFjaywKICAgICAgICAgICAgICAg ICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0IF9fYXJncykKICAgICB0aHJvdyAoKSBf X2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMiwgMCkpKTsKCgoKCgoKCmV4 dGVybiB2b2lkIGZsb2NrZmlsZSAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgpleHRlcm4g aW50IGZ0cnlsb2NrZmlsZSAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCmV4dGVybiB2b2lk IGZ1bmxvY2tmaWxlIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CiMgNjg2ICIvdXNyL2xpYi9n Y2MtbGliL2kzODYtbGludXgvMy4yLjMvaW5jbHVkZS9zdGRpby5oIiAzCn0KIyA1MyAiL3Vzci9p bmNsdWRlL2MrKy8zLjIvY3N0ZGlvIiAyIDMKIyA5NyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvY3N0 ZGlvIiAzCm5hbWVzcGFjZSBzdGQKewogIHVzaW5nIDo6RklMRTsKICB1c2luZyA6OmZwb3NfdDsK CiAgdXNpbmcgOjpjbGVhcmVycjsKICB1c2luZyA6OmZjbG9zZTsKICB1c2luZyA6OmZlb2Y7CiAg dXNpbmcgOjpmZXJyb3I7CiAgdXNpbmcgOjpmZmx1c2g7CiAgdXNpbmcgOjpmZ2V0YzsKICB1c2lu ZyA6OmZnZXRwb3M7CiAgdXNpbmcgOjpmZ2V0czsKICB1c2luZyA6OmZvcGVuOwogIHVzaW5nIDo6 ZnByaW50ZjsKICB1c2luZyA6OmZwdXRjOwogIHVzaW5nIDo6ZnB1dHM7CiAgdXNpbmcgOjpmcmVh ZDsKICB1c2luZyA6OmZyZW9wZW47CiAgdXNpbmcgOjpmc2NhbmY7CiAgdXNpbmcgOjpmc2VlazsK ICB1c2luZyA6OmZzZXRwb3M7CiAgdXNpbmcgOjpmdGVsbDsKICB1c2luZyA6OmZ3cml0ZTsKICB1 c2luZyA6OmdldGM7CiAgdXNpbmcgOjpnZXRjaGFyOwogIHVzaW5nIDo6Z2V0czsKICB1c2luZyA6 OnBlcnJvcjsKICB1c2luZyA6OnByaW50ZjsKICB1c2luZyA6OnB1dGM7CiAgdXNpbmcgOjpwdXRj aGFyOwogIHVzaW5nIDo6cHV0czsKICB1c2luZyA6OnJlbW92ZTsKICB1c2luZyA6OnJlbmFtZTsK ICB1c2luZyA6OnJld2luZDsKICB1c2luZyA6OnNjYW5mOwogIHVzaW5nIDo6c2V0YnVmOwogIHVz aW5nIDo6c2V0dmJ1ZjsKICB1c2luZyA6OnNwcmludGY7CiAgdXNpbmcgOjpzc2NhbmY7CiAgdXNp bmcgOjp0bXBmaWxlOwogIHVzaW5nIDo6dG1wbmFtOwogIHVzaW5nIDo6dW5nZXRjOwogIHVzaW5n IDo6dmZwcmludGY7CiAgdXNpbmcgOjp2cHJpbnRmOwogIHVzaW5nIDo6dnNwcmludGY7Cn0KIyAx NTMgIi91c3IvaW5jbHVkZS9jKysvMy4yL2NzdGRpbyIgMwpuYW1lc3BhY2UgX19nbnVfY3h4CnsK ICB1c2luZyA6OnNucHJpbnRmOwogIHVzaW5nIDo6dmZzY2FuZjsKICB1c2luZyA6OnZzY2FuZjsK ICB1c2luZyA6OnZzbnByaW50ZjsKICB1c2luZyA6OnZzc2NhbmY7Cn0KCm5hbWVzcGFjZSBzdGQK ewogIHVzaW5nIF9fZ251X2N4eDo6c25wcmludGY7CiAgdXNpbmcgX19nbnVfY3h4Ojp2ZnNjYW5m OwogIHVzaW5nIF9fZ251X2N4eDo6dnNjYW5mOwogIHVzaW5nIF9fZ251X2N4eDo6dnNucHJpbnRm OwogIHVzaW5nIF9fZ251X2N4eDo6dnNzY2FuZjsKfQojIDM2ICIvdXNyL2luY2x1ZGUvYysrLzMu Mi9pMzg2LWxpbnV4L2JpdHMvYysraW8uaCIgMiAzCgojIDEgIi91c3IvaW5jbHVkZS9jKysvMy4y L2kzODYtbGludXgvYml0cy9ndGhyLmgiIDEgMwojIDk4ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9p Mzg2LWxpbnV4L2JpdHMvZ3Roci5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvaTM4Ni1s aW51eC9iaXRzL2d0aHItZGVmYXVsdC5oIiAxIDMKIyAzNyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIv aTM4Ni1saW51eC9iaXRzL2d0aHItZGVmYXVsdC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL3B0aHJl YWQuaCIgMSAzCiMgMjAgIi91c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDMKIyAxICIvdXNyL2luY2x1 ZGUvc2NoZWQuaCIgMSAzCiMgMjkgIi91c3IvaW5jbHVkZS9zY2hlZC5oIiAzCiMgMSAiL3Vzci9p bmNsdWRlL3RpbWUuaCIgMSAzCiMgMTE2ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCnN0cnVjdCB0 aW1lc3BlYwogIHsKICAgIF9fdGltZV90IHR2X3NlYzsKICAgIGxvbmcgaW50IHR2X25zZWM7CiAg fTsKIyAzMCAiL3Vzci9pbmNsdWRlL3NjaGVkLmgiIDIgMwoKCiMgMSAiL3Vzci9pbmNsdWRlL2Jp dHMvc2NoZWQuaCIgMSAzCiMgNjIgIi91c3IvaW5jbHVkZS9iaXRzL3NjaGVkLmgiIDMKc3RydWN0 IHNjaGVkX3BhcmFtCiAgewogICAgaW50IF9fc2NoZWRfcHJpb3JpdHk7CiAgfTsKCmV4dGVybiAi QyIgewoKCgpleHRlcm4gaW50IGNsb25lIChpbnQgKCpfX2ZuKSAodm9pZCAqX19hcmcpLCB2b2lk ICpfX2NoaWxkX3N0YWNrLAogICAgICAgICAgICAgICAgICBpbnQgX19mbGFncywgdm9pZCAqX19h cmcpIHRocm93ICgpOwoKCn0KCgoKCgoKCnN0cnVjdCBfX3NjaGVkX3BhcmFtCiAgewogICAgaW50 IF9fc2NoZWRfcHJpb3JpdHk7CiAgfTsKIyAzMyAiL3Vzci9pbmNsdWRlL3NjaGVkLmgiIDIgMwoK CgoKZXh0ZXJuICJDIiB7CgoKZXh0ZXJuIGludCBzY2hlZF9zZXRwYXJhbSAoX19waWRfdCBfX3Bp ZCwgX19jb25zdCBzdHJ1Y3Qgc2NoZWRfcGFyYW0gKl9fcGFyYW0pCiAgICAgdGhyb3cgKCk7CgoK ZXh0ZXJuIGludCBzY2hlZF9nZXRwYXJhbSAoX19waWRfdCBfX3BpZCwgc3RydWN0IHNjaGVkX3Bh cmFtICpfX3BhcmFtKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHNjaGVkX3NldHNjaGVkdWxlciAo X19waWRfdCBfX3BpZCwgaW50IF9fcG9saWN5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgX19jb25zdCBzdHJ1Y3Qgc2NoZWRfcGFyYW0gKl9fcGFyYW0pIHRocm93ICgpOwoKCmV4dGVy biBpbnQgc2NoZWRfZ2V0c2NoZWR1bGVyIChfX3BpZF90IF9fcGlkKSB0aHJvdyAoKTsKCgpleHRl cm4gaW50IHNjaGVkX3lpZWxkICh2b2lkKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHNjaGVkX2dl dF9wcmlvcml0eV9tYXggKGludCBfX2FsZ29yaXRobSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBz Y2hlZF9nZXRfcHJpb3JpdHlfbWluIChpbnQgX19hbGdvcml0aG0pIHRocm93ICgpOwoKCmV4dGVy biBpbnQgc2NoZWRfcnJfZ2V0X2ludGVydmFsIChfX3BpZF90IF9fcGlkLCBzdHJ1Y3QgdGltZXNw ZWMgKl9fdCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IHNjaGVkX3NldGFmZmluaXR5IChfX3Bp ZF90IF9fcGlkLCB1bnNpZ25lZCBsb25nIGludCBfX2xlbiwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgdW5zaWduZWQgbG9uZyBpbnQgKl9fbWFzaykgdGhyb3cgKCk7CgoKZXh0ZXJuIGlu dCBzY2hlZF9nZXRhZmZpbml0eSAoX19waWRfdCBfX3BpZCwgdW5zaWduZWQgbG9uZyBpbnQgX19s ZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgaW50ICpfX21h c2spIHRocm93ICgpOwoKCn0KIyAyMSAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMiAzCiMgMSAi L3Vzci9pbmNsdWRlL3RpbWUuaCIgMSAzCiMgMzAgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMKZXh0 ZXJuICJDIiB7CgoKCgoKCgojIDEgIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8zLjIuMy9p bmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAzOSAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMiAzCgoKCiMg MSAiL3Vzci9pbmNsdWRlL2JpdHMvdGltZS5oIiAxIDMKIyA0MyAiL3Vzci9pbmNsdWRlL3RpbWUu aCIgMiAzCiMgNTggIi91c3IvaW5jbHVkZS90aW1lLmgiIDMKCgp0eXBlZGVmIF9fY2xvY2tfdCBj bG9ja190OwoKCgojIDc0ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCgoKdHlwZWRlZiBfX3RpbWVf dCB0aW1lX3Q7CgoKCiMgOTIgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMKdHlwZWRlZiBfX2Nsb2Nr aWRfdCBjbG9ja2lkX3Q7CiMgMTA0ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCnR5cGVkZWYgX190 aW1lcl90IHRpbWVyX3Q7CiMgMTI3ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCgoKc3RydWN0IHRt CnsKICBpbnQgdG1fc2VjOwogIGludCB0bV9taW47CiAgaW50IHRtX2hvdXI7CiAgaW50IHRtX21k YXk7CiAgaW50IHRtX21vbjsKICBpbnQgdG1feWVhcjsKICBpbnQgdG1fd2RheTsKICBpbnQgdG1f eWRheTsKICBpbnQgdG1faXNkc3Q7CgoKICBsb25nIGludCB0bV9nbXRvZmY7CiAgX19jb25zdCBj aGFyICp0bV96b25lOwoKCgoKfTsKCgoKCgoKCgpzdHJ1Y3QgaXRpbWVyc3BlYwogIHsKICAgIHN0 cnVjdCB0aW1lc3BlYyBpdF9pbnRlcnZhbDsKICAgIHN0cnVjdCB0aW1lc3BlYyBpdF92YWx1ZTsK ICB9OwoKCnN0cnVjdCBzaWdldmVudDsKCgoKCgp0eXBlZGVmIF9fcGlkX3QgcGlkX3Q7CgoKCgoK CgoKZXh0ZXJuIGNsb2NrX3QgY2xvY2sgKHZvaWQpIHRocm93ICgpOwoKCmV4dGVybiB0aW1lX3Qg dGltZSAodGltZV90ICpfX3RpbWVyKSB0aHJvdyAoKTsKCgpleHRlcm4gZG91YmxlIGRpZmZ0aW1l ICh0aW1lX3QgX190aW1lMSwgdGltZV90IF9fdGltZTApCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1 dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiB0aW1lX3QgbWt0aW1lIChzdHJ1Y3QgdG0gKl9f dHApIHRocm93ICgpOwoKCgoKCmV4dGVybiBzaXplX3Qgc3RyZnRpbWUgKGNoYXIgKl9fcmVzdHJp Y3QgX19zLCBzaXplX3QgX19tYXhzaXplLAogICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0 IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fY29u c3Qgc3RydWN0IHRtICpfX3Jlc3RyaWN0IF9fdHApIHRocm93ICgpOwoKCgoKCmV4dGVybiBjaGFy ICpzdHJwdGltZSAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAgICAg ICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mbXQsIHN0cnVjdCB0bSAqX190cCkK ICAgICB0aHJvdyAoKTsKCgoKCgojIDEgIi91c3IvaW5jbHVkZS94bG9jYWxlLmgiIDEgMwojIDI4 ICIvdXNyL2luY2x1ZGUveGxvY2FsZS5oIiAzCnR5cGVkZWYgc3RydWN0IF9fbG9jYWxlX3N0cnVj dAp7CgogIHN0cnVjdCBsb2NhbGVfZGF0YSAqX19sb2NhbGVzWzEzXTsKCgogIGNvbnN0IHVuc2ln bmVkIHNob3J0IGludCAqX19jdHlwZV9iOwogIGNvbnN0IGludCAqX19jdHlwZV90b2xvd2VyOwog IGNvbnN0IGludCAqX19jdHlwZV90b3VwcGVyOwoKCiAgY29uc3QgY2hhciAqX19uYW1lc1sxM107 Cn0gKl9fbG9jYWxlX3Q7CiMgMjEyICIvdXNyL2luY2x1ZGUvdGltZS5oIiAyIDMKCmV4dGVybiBz aXplX3Qgc3RyZnRpbWVfbCAoY2hhciAqX19yZXN0cmljdCBfX3MsIHNpemVfdCBfX21heHNpemUs CiAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9y bWF0LAogICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgc3RydWN0IHRtICpfX3Jlc3Ry aWN0IF9fdHAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX19sb2NhbGVfdCBfX2xvYykgdGhy b3cgKCk7CgpleHRlcm4gY2hhciAqc3RycHRpbWVfbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0 IF9fcywKICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBf X2ZtdCwgc3RydWN0IHRtICpfX3RwLAogICAgICAgICAgICAgICAgICAgICAgICAgX19sb2NhbGVf dCBfX2xvYykgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBzdHJ1Y3QgdG0gKmdtdGltZSAoX19jb25z dCB0aW1lX3QgKl9fdGltZXIpIHRocm93ICgpOwoKCgpleHRlcm4gc3RydWN0IHRtICpsb2NhbHRp bWUgKF9fY29uc3QgdGltZV90ICpfX3RpbWVyKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gc3RydWN0 IHRtICpnbXRpbWVfciAoX19jb25zdCB0aW1lX3QgKl9fcmVzdHJpY3QgX190aW1lciwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB0bSAqX19yZXN0cmljdCBfX3RwKSB0aHJvdyAo KTsKCgoKZXh0ZXJuIHN0cnVjdCB0bSAqbG9jYWx0aW1lX3IgKF9fY29uc3QgdGltZV90ICpfX3Jl c3RyaWN0IF9fdGltZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdG0g Kl9fcmVzdHJpY3QgX190cCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGNoYXIgKmFzY3RpbWUgKF9f Y29uc3Qgc3RydWN0IHRtICpfX3RwKSB0aHJvdyAoKTsKCgpleHRlcm4gY2hhciAqY3RpbWUgKF9f Y29uc3QgdGltZV90ICpfX3RpbWVyKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBjaGFyICphc2N0 aW1lX3IgKF9fY29uc3Qgc3RydWN0IHRtICpfX3Jlc3RyaWN0IF9fdHAsCiAgICAgICAgICAgICAg ICAgICAgICAgIGNoYXIgKl9fcmVzdHJpY3QgX19idWYpIHRocm93ICgpOwoKCmV4dGVybiBjaGFy ICpjdGltZV9yIChfX2NvbnN0IHRpbWVfdCAqX19yZXN0cmljdCBfX3RpbWVyLAogICAgICAgICAg ICAgICAgICAgICAgY2hhciAqX19yZXN0cmljdCBfX2J1ZikgdGhyb3cgKCk7CgoKCgpleHRlcm4g Y2hhciAqX190em5hbWVbMl07CmV4dGVybiBpbnQgX19kYXlsaWdodDsKZXh0ZXJuIGxvbmcgaW50 IF9fdGltZXpvbmU7CgoKCgpleHRlcm4gY2hhciAqdHpuYW1lWzJdOwoKCgpleHRlcm4gdm9pZCB0 enNldCAodm9pZCkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgZGF5bGlnaHQ7CmV4dGVybiBsb25n IGludCB0aW1lem9uZTsKCgoKCgpleHRlcm4gaW50IHN0aW1lIChfX2NvbnN0IHRpbWVfdCAqX193 aGVuKSB0aHJvdyAoKTsKIyAzMDcgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMKZXh0ZXJuIHRpbWVf dCB0aW1lZ20gKHN0cnVjdCB0bSAqX190cCkgdGhyb3cgKCk7CgoKZXh0ZXJuIHRpbWVfdCB0aW1l bG9jYWwgKHN0cnVjdCB0bSAqX190cCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBkeXNpemUgKGlu dCBfX3llYXIpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCgpleHRl cm4gaW50IG5hbm9zbGVlcCAoX19jb25zdCBzdHJ1Y3QgdGltZXNwZWMgKl9fcmVxdWVzdGVkX3Rp bWUsCiAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdGltZXNwZWMgKl9fcmVtYWluaW5nKSB0 aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBjbG9ja19nZXRyZXMgKGNsb2NraWRfdCBfX2Nsb2NrX2lk LCBzdHJ1Y3QgdGltZXNwZWMgKl9fcmVzKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IGNsb2NrX2dl dHRpbWUgKGNsb2NraWRfdCBfX2Nsb2NrX2lkLCBzdHJ1Y3QgdGltZXNwZWMgKl9fdHApIHRocm93 ICgpOwoKCmV4dGVybiBpbnQgY2xvY2tfc2V0dGltZSAoY2xvY2tpZF90IF9fY2xvY2tfaWQsIF9f Y29uc3Qgc3RydWN0IHRpbWVzcGVjICpfX3RwKQogICAgIHRocm93ICgpOwoKCgpleHRlcm4gaW50 IGNsb2NrX25hbm9zbGVlcCAoY2xvY2tpZF90IF9fY2xvY2tfaWQsIGludCBfX2ZsYWdzLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBzdHJ1Y3QgdGltZXNwZWMgKl9fcmVxLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHRpbWVzcGVjICpfX3JlbSkgdGhyb3cg KCk7CgoKZXh0ZXJuIGludCBjbG9ja19nZXRjcHVjbG9ja2lkIChwaWRfdCBfX3BpZCwgY2xvY2tp ZF90ICpfX2Nsb2NrX2lkKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgdGltZXJfY3JlYXRlIChj bG9ja2lkX3QgX19jbG9ja19pZCwKICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzaWdl dmVudCAqX19yZXN0cmljdCBfX2V2cCwKICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVyX3Qg Kl9fcmVzdHJpY3QgX190aW1lcmlkKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHRpbWVyX2RlbGV0 ZSAodGltZXJfdCBfX3RpbWVyaWQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgdGltZXJfc2V0dGlt ZSAodGltZXJfdCBfX3RpbWVyaWQsIGludCBfX2ZsYWdzLAogICAgICAgICAgICAgICAgICAgICAg ICAgIF9fY29uc3Qgc3RydWN0IGl0aW1lcnNwZWMgKl9fcmVzdHJpY3QgX192YWx1ZSwKICAgICAg ICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaXRpbWVyc3BlYyAqX19yZXN0cmljdCBfX292YWx1 ZSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCB0aW1lcl9nZXR0aW1lICh0aW1lcl90IF9fdGltZXJp ZCwgc3RydWN0IGl0aW1lcnNwZWMgKl9fdmFsdWUpCiAgICAgdGhyb3cgKCk7CgoKZXh0ZXJuIGlu dCB0aW1lcl9nZXRvdmVycnVuICh0aW1lcl90IF9fdGltZXJpZCkgdGhyb3cgKCk7CiMgMzc4ICIv dXNyL2luY2x1ZGUvdGltZS5oIiAzCmV4dGVybiBpbnQgZ2V0ZGF0ZV9lcnI7CgoKCgoKZXh0ZXJu IHN0cnVjdCB0bSAqZ2V0ZGF0ZSAoX19jb25zdCBjaGFyICpfX3N0cmluZykgdGhyb3cgKCk7CiMg MzkzICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCmV4dGVybiBpbnQgZ2V0ZGF0ZV9yIChfX2NvbnN0 IGNoYXIgKl9fcmVzdHJpY3QgX19zdHJpbmcsCiAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qg dG0gKl9fcmVzdHJpY3QgX19yZXNidWZwKSB0aHJvdyAoKTsKCgp9CiMgMjIgIi91c3IvaW5jbHVk ZS9wdGhyZWFkLmgiIDIgMwoKCiMgMSAiL3Vzci9pbmNsdWRlL3NpZ25hbC5oIiAxIDMKIyAzMSAi L3Vzci9pbmNsdWRlL3NpZ25hbC5oIiAzCmV4dGVybiAiQyIgewoKIyAxICIvdXNyL2luY2x1ZGUv Yml0cy9zaWdzZXQuaCIgMSAzCiMgMjMgIi91c3IvaW5jbHVkZS9iaXRzL3NpZ3NldC5oIiAzCnR5 cGVkZWYgaW50IF9fc2lnX2F0b21pY190OwoKCgoKdHlwZWRlZiBzdHJ1Y3QKICB7CiAgICB1bnNp Z25lZCBsb25nIGludCBfX3ZhbFsoMTAyNCAvICg4ICogc2l6ZW9mICh1bnNpZ25lZCBsb25nIGlu dCkpKV07CiAgfSBfX3NpZ3NldF90OwojIDM0ICIvdXNyL2luY2x1ZGUvc2lnbmFsLmgiIDIgMwoj IDUwICIvdXNyL2luY2x1ZGUvc2lnbmFsLmgiIDMKdHlwZWRlZiBfX3NpZ3NldF90IHNpZ3NldF90 OwojIDM3OCAiL3Vzci9pbmNsdWRlL3NpZ25hbC5oIiAzCn0KIyAyNSAiL3Vzci9pbmNsdWRlL3B0 aHJlYWQuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvcHRocmVhZHR5cGVzLmgiIDEgMwoj IDIzICIvdXNyL2luY2x1ZGUvYml0cy9wdGhyZWFkdHlwZXMuaCIgMwojIDEgIi91c3IvaW5jbHVk ZS9iaXRzL3NjaGVkLmgiIDEgMwojIDI0ICIvdXNyL2luY2x1ZGUvYml0cy9wdGhyZWFkdHlwZXMu aCIgMiAzCgp0eXBlZGVmIGludCBfX2F0b21pY19sb2NrX3Q7CgoKc3RydWN0IF9wdGhyZWFkX2Zh c3Rsb2NrCnsKICBsb25nIGludCBfX3N0YXR1czsKICBfX2F0b21pY19sb2NrX3QgX19zcGlubG9j azsKCn07CgoKCnR5cGVkZWYgc3RydWN0IF9wdGhyZWFkX2Rlc2NyX3N0cnVjdCAqX3B0aHJlYWRf ZGVzY3I7CgoKCgoKdHlwZWRlZiBzdHJ1Y3QgX19wdGhyZWFkX2F0dHJfcwp7CiAgaW50IF9fZGV0 YWNoc3RhdGU7CiAgaW50IF9fc2NoZWRwb2xpY3k7CiAgc3RydWN0IF9fc2NoZWRfcGFyYW0gX19z Y2hlZHBhcmFtOwogIGludCBfX2luaGVyaXRzY2hlZDsKICBpbnQgX19zY29wZTsKICBzaXplX3Qg X19ndWFyZHNpemU7CiAgaW50IF9fc3RhY2thZGRyX3NldDsKICB2b2lkICpfX3N0YWNrYWRkcjsK ICBzaXplX3QgX19zdGFja3NpemU7Cn0gcHRocmVhZF9hdHRyX3Q7CgoKCnR5cGVkZWYgc3RydWN0 CnsKICBzdHJ1Y3QgX3B0aHJlYWRfZmFzdGxvY2sgX19jX2xvY2s7CiAgX3B0aHJlYWRfZGVzY3Ig X19jX3dhaXRpbmc7Cn0gcHRocmVhZF9jb25kX3Q7CgoKCnR5cGVkZWYgc3RydWN0CnsKICBpbnQg X19kdW1teTsKfSBwdGhyZWFkX2NvbmRhdHRyX3Q7CgoKdHlwZWRlZiB1bnNpZ25lZCBpbnQgcHRo cmVhZF9rZXlfdDsKCgoKCgp0eXBlZGVmIHN0cnVjdAp7CiAgaW50IF9fbV9yZXNlcnZlZDsKICBp bnQgX19tX2NvdW50OwogIF9wdGhyZWFkX2Rlc2NyIF9fbV9vd25lcjsKICBpbnQgX19tX2tpbmQ7 CiAgc3RydWN0IF9wdGhyZWFkX2Zhc3Rsb2NrIF9fbV9sb2NrOwp9IHB0aHJlYWRfbXV0ZXhfdDsK CgoKdHlwZWRlZiBzdHJ1Y3QKewogIGludCBfX211dGV4a2luZDsKfSBwdGhyZWFkX211dGV4YXR0 cl90OwoKCgp0eXBlZGVmIGludCBwdGhyZWFkX29uY2VfdDsKCgoKCnR5cGVkZWYgc3RydWN0IF9w dGhyZWFkX3J3bG9ja190CnsKICBzdHJ1Y3QgX3B0aHJlYWRfZmFzdGxvY2sgX19yd19sb2NrOwog IGludCBfX3J3X3JlYWRlcnM7CiAgX3B0aHJlYWRfZGVzY3IgX19yd193cml0ZXI7CiAgX3B0aHJl YWRfZGVzY3IgX19yd19yZWFkX3dhaXRpbmc7CiAgX3B0aHJlYWRfZGVzY3IgX19yd193cml0ZV93 YWl0aW5nOwogIGludCBfX3J3X2tpbmQ7CiAgaW50IF9fcndfcHNoYXJlZDsKfSBwdGhyZWFkX3J3 bG9ja190OwoKCgp0eXBlZGVmIHN0cnVjdAp7CiAgaW50IF9fbG9ja2tpbmQ7CiAgaW50IF9fcHNo YXJlZDsKfSBwdGhyZWFkX3J3bG9ja2F0dHJfdDsKCgoKCnR5cGVkZWYgdm9sYXRpbGUgaW50IHB0 aHJlYWRfc3BpbmxvY2tfdDsKCgp0eXBlZGVmIHN0cnVjdCB7CiAgc3RydWN0IF9wdGhyZWFkX2Zh c3Rsb2NrIF9fYmFfbG9jazsKICBpbnQgX19iYV9yZXF1aXJlZDsKICBpbnQgX19iYV9wcmVzZW50 OwogIF9wdGhyZWFkX2Rlc2NyIF9fYmFfd2FpdGluZzsKfSBwdGhyZWFkX2JhcnJpZXJfdDsKCgp0 eXBlZGVmIHN0cnVjdCB7CiAgaW50IF9fcHNoYXJlZDsKfSBwdGhyZWFkX2JhcnJpZXJhdHRyX3Q7 CgoKCgoKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCBwdGhyZWFkX3Q7CiMgMjYgIi91c3IvaW5j bHVkZS9wdGhyZWFkLmgiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL2luaXRzcGluLmgiIDEg MwojIDI3ICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAyIDMKCgpleHRlcm4gIkMiIHsKIyA1OSAi L3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMwplbnVtCnsKICBQVEhSRUFEX0NSRUFURV9KT0lOQUJM RSwKCiAgUFRIUkVBRF9DUkVBVEVfREVUQUNIRUQKCn07CgplbnVtCnsKICBQVEhSRUFEX0lOSEVS SVRfU0NIRUQsCgogIFBUSFJFQURfRVhQTElDSVRfU0NIRUQKCn07CgplbnVtCnsKICBQVEhSRUFE X1NDT1BFX1NZU1RFTSwKCiAgUFRIUkVBRF9TQ09QRV9QUk9DRVNTCgp9OwoKZW51bQp7CiAgUFRI UkVBRF9NVVRFWF9USU1FRF9OUCwKICBQVEhSRUFEX01VVEVYX1JFQ1VSU0lWRV9OUCwKICBQVEhS RUFEX01VVEVYX0VSUk9SQ0hFQ0tfTlAsCiAgUFRIUkVBRF9NVVRFWF9BREFQVElWRV9OUAoKICAs CiAgUFRIUkVBRF9NVVRFWF9OT1JNQUwgPSBQVEhSRUFEX01VVEVYX1RJTUVEX05QLAogIFBUSFJF QURfTVVURVhfUkVDVVJTSVZFID0gUFRIUkVBRF9NVVRFWF9SRUNVUlNJVkVfTlAsCiAgUFRIUkVB RF9NVVRFWF9FUlJPUkNIRUNLID0gUFRIUkVBRF9NVVRFWF9FUlJPUkNIRUNLX05QLAogIFBUSFJF QURfTVVURVhfREVGQVVMVCA9IFBUSFJFQURfTVVURVhfTk9STUFMCgoKCiAgLCBQVEhSRUFEX01V VEVYX0ZBU1RfTlAgPSBQVEhSRUFEX01VVEVYX0FEQVBUSVZFX05QCgp9OwoKZW51bQp7CiAgUFRI UkVBRF9QUk9DRVNTX1BSSVZBVEUsCgogIFBUSFJFQURfUFJPQ0VTU19TSEFSRUQKCn07CgoKZW51 bQp7CiAgUFRIUkVBRF9SV0xPQ0tfUFJFRkVSX1JFQURFUl9OUCwKICBQVEhSRUFEX1JXTE9DS19Q UkVGRVJfV1JJVEVSX05QLAogIFBUSFJFQURfUldMT0NLX1BSRUZFUl9XUklURVJfTk9OUkVDVVJT SVZFX05QLAogIFBUSFJFQURfUldMT0NLX0RFRkFVTFRfTlAgPSBQVEhSRUFEX1JXTE9DS19QUkVG RVJfV1JJVEVSX05QCn07CiMgMTMxICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAzCnN0cnVjdCBf cHRocmVhZF9jbGVhbnVwX2J1ZmZlcgp7CiAgdm9pZCAoKl9fcm91dGluZSkgKHZvaWQgKik7CiAg dm9pZCAqX19hcmc7CiAgaW50IF9fY2FuY2VsdHlwZTsKICBzdHJ1Y3QgX3B0aHJlYWRfY2xlYW51 cF9idWZmZXIgKl9fcHJldjsKfTsKCgoKZW51bQp7CiAgUFRIUkVBRF9DQU5DRUxfRU5BQkxFLAoK ICBQVEhSRUFEX0NBTkNFTF9ESVNBQkxFCgp9OwplbnVtCnsKICBQVEhSRUFEX0NBTkNFTF9ERUZF UlJFRCwKCiAgUFRIUkVBRF9DQU5DRUxfQVNZTkNIUk9OT1VTCgp9OwojIDE2MyAiL3Vzci9pbmNs dWRlL3B0aHJlYWQuaCIgMwpleHRlcm4gaW50IHB0aHJlYWRfY3JlYXRlIChwdGhyZWFkX3QgKl9f cmVzdHJpY3QgX190aHJlYWRwLAogICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHB0 aHJlYWRfYXR0cl90ICpfX3Jlc3RyaWN0IF9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgdm9pZCAqKCpfX3N0YXJ0X3JvdXRpbmUpICh2b2lkICopLAogICAgICAgICAgICAgICAgICAg ICAgICAgICB2b2lkICpfX3Jlc3RyaWN0IF9fYXJnKSB0aHJvdyAoKTsKCgpleHRlcm4gcHRocmVh ZF90IHB0aHJlYWRfc2VsZiAodm9pZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2Vx dWFsIChwdGhyZWFkX3QgX190aHJlYWQxLCBwdGhyZWFkX3QgX190aHJlYWQyKSB0aHJvdyAoKTsK CgpleHRlcm4gdm9pZCBwdGhyZWFkX2V4aXQgKHZvaWQgKl9fcmV0dmFsKQogICAgIHRocm93ICgp IF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9q b2luIChwdGhyZWFkX3QgX190aCwgdm9pZCAqKl9fdGhyZWFkX3JldHVybikgdGhyb3cgKCk7CgoK CgoKZXh0ZXJuIGludCBwdGhyZWFkX2RldGFjaCAocHRocmVhZF90IF9fdGgpIHRocm93ICgpOwoK CgoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfaW5pdCAocHRocmVhZF9hdHRyX3QgKl9fYXR0 cikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfZGVzdHJveSAocHRocmVhZF9h dHRyX3QgKl9fYXR0cikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfc2V0ZGV0 YWNoc3RhdGUgKHB0aHJlYWRfYXR0cl90ICpfX2F0dHIsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBpbnQgX19kZXRhY2hzdGF0ZSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGlu dCBwdGhyZWFkX2F0dHJfZ2V0ZGV0YWNoc3RhdGUgKF9fY29uc3QgcHRocmVhZF9hdHRyX3QgKl9f YXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqX19kZXRh Y2hzdGF0ZSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfc2V0c2NoZWRwYXJh bSAocHRocmVhZF9hdHRyX3QgKl9fcmVzdHJpY3QgX19hdHRyLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHN0cnVjdCBzY2hlZF9wYXJhbSAqX19yZXN0cmlj dAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3BhcmFtKSB0aHJvdyAo KTsKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9nZXRzY2hlZHBhcmFtIChfX2NvbnN0IHB0aHJl YWRfYXR0cl90ICpfX3Jlc3RyaWN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIF9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0 IHNjaGVkX3BhcmFtICpfX3Jlc3RyaWN0IF9fcGFyYW0pCiAgICAgdGhyb3cgKCk7CgoKZXh0ZXJu IGludCBwdGhyZWFkX2F0dHJfc2V0c2NoZWRwb2xpY3kgKHB0aHJlYWRfYXR0cl90ICpfX2F0dHIs IGludCBfX3BvbGljeSkKICAgICB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9n ZXRzY2hlZHBvbGljeSAoX19jb25zdCBwdGhyZWFkX2F0dHJfdCAqX19yZXN0cmljdAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19hdHRyLCBpbnQgKl9fcmVzdHJpY3Qg X19wb2xpY3kpCiAgICAgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfc2V0aW5o ZXJpdHNjaGVkIChwdGhyZWFkX2F0dHJfdCAqX19hdHRyLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGludCBfX2luaGVyaXQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQg cHRocmVhZF9hdHRyX2dldGluaGVyaXRzY2hlZCAoX19jb25zdCBwdGhyZWFkX2F0dHJfdCAqX19y ZXN0cmljdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYXR0ciwg aW50ICpfX3Jlc3RyaWN0IF9faW5oZXJpdCkKICAgICB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0 aHJlYWRfYXR0cl9zZXRzY29wZSAocHRocmVhZF9hdHRyX3QgKl9fYXR0ciwgaW50IF9fc2NvcGUp CiAgICAgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfZ2V0c2NvcGUgKF9fY29u c3QgcHRocmVhZF9hdHRyX3QgKl9fcmVzdHJpY3QgX19hdHRyLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fc2NvcGUpIHRocm93ICgpOwoKCgpleHRl cm4gaW50IHB0aHJlYWRfYXR0cl9zZXRndWFyZHNpemUgKHB0aHJlYWRfYXR0cl90ICpfX2F0dHIs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fZ3VhcmRzaXpl KSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9nZXRndWFyZHNpemUgKF9fY29u c3QgcHRocmVhZF9hdHRyX3QgKl9fcmVzdHJpY3QKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBfX2F0dHIsIHNpemVfdCAqX19yZXN0cmljdCBfX2d1YXJkc2l6ZSkKICAgICB0 aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfc2V0c3RhY2thZGRyIChwdGhy ZWFkX2F0dHJfdCAqX19hdHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHZvaWQgKl9fc3RhY2thZGRyKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9n ZXRzdGFja2FkZHIgKF9fY29uc3QgcHRocmVhZF9hdHRyX3QgKl9fcmVzdHJpY3QKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2F0dHIsIHZvaWQgKipfX3Jlc3RyaWN0IF9f c3RhY2thZGRyKQogICAgIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX3Nl dHN0YWNrIChwdGhyZWFkX2F0dHJfdCAqX19hdHRyLCB2b2lkICpfX3N0YWNrYWRkciwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX3N0YWNrc2l6ZSkgdGhyb3cgKCk7 CgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfZ2V0c3RhY2sgKF9fY29uc3QgcHRocmVhZF9hdHRy X3QgKl9fcmVzdHJpY3QgX19hdHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg dm9pZCAqKl9fcmVzdHJpY3QgX19zdGFja2FkZHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBzaXplX3QgKl9fcmVzdHJpY3QgX19zdGFja3NpemUpIHRocm93ICgpOwoKCgoKCmV4 dGVybiBpbnQgcHRocmVhZF9hdHRyX3NldHN0YWNrc2l6ZSAocHRocmVhZF9hdHRyX3QgKl9fYXR0 ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19zdGFja3Np emUpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2dldHN0YWNrc2l6ZSAoX19j b25zdCBwdGhyZWFkX2F0dHJfdCAqX19yZXN0cmljdAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIF9fYXR0ciwgc2l6ZV90ICpfX3Jlc3RyaWN0IF9fc3RhY2tzaXplKQogICAg IHRocm93ICgpOwoKCgpleHRlcm4gaW50IHB0aHJlYWRfZ2V0YXR0cl9ucCAocHRocmVhZF90IF9f dGgsIHB0aHJlYWRfYXR0cl90ICpfX2F0dHIpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50IHB0 aHJlYWRfc2V0c2NoZWRwYXJhbSAocHRocmVhZF90IF9fdGFyZ2V0X3RocmVhZCwgaW50IF9fcG9s aWN5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBzdHJ1Y3Qgc2No ZWRfcGFyYW0gKl9fcGFyYW0pCiAgICAgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2dl dHNjaGVkcGFyYW0gKHB0aHJlYWRfdCBfX3RhcmdldF90aHJlYWQsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19wb2xpY3ksCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2NoZWRfcGFyYW0gKl9fcmVzdHJpY3QgX19wYXJh bSkKICAgICB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2dldGNvbmN1cnJlbmN5ICh2 b2lkKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfc2V0Y29uY3VycmVuY3kgKGludCBf X2xldmVsKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF95aWVsZCAodm9pZCkg dGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9tdXRleF9pbml0IChwdGhyZWFkX211 dGV4X3QgKl9fcmVzdHJpY3QgX19tdXRleCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IF9fY29uc3QgcHRocmVhZF9tdXRleGF0dHJfdCAqX19yZXN0cmljdAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgX19tdXRleF9hdHRyKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJl YWRfbXV0ZXhfZGVzdHJveSAocHRocmVhZF9tdXRleF90ICpfX211dGV4KSB0aHJvdyAoKTsKCgpl eHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhfdHJ5bG9jayAocHRocmVhZF9tdXRleF90ICpfX211dGV4 KSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhfbG9jayAocHRocmVhZF9tdXRl eF90ICpfX211dGV4KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBwdGhyZWFkX211dGV4X3RpbWVk bG9jayAocHRocmVhZF9tdXRleF90ICpfX3Jlc3RyaWN0IF9fbXV0ZXgsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgc3RydWN0IHRpbWVzcGVjICpfX3Jlc3RyaWN0 CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYWJzdGltZSkgdGhyb3cgKCk7 CgoKCmV4dGVybiBpbnQgcHRocmVhZF9tdXRleF91bmxvY2sgKHB0aHJlYWRfbXV0ZXhfdCAqX19t dXRleCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9tdXRleGF0dHJfaW5pdCAo cHRocmVhZF9tdXRleGF0dHJfdCAqX19hdHRyKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJl YWRfbXV0ZXhhdHRyX2Rlc3Ryb3kgKHB0aHJlYWRfbXV0ZXhhdHRyX3QgKl9fYXR0cikgdGhyb3cg KCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX211dGV4YXR0cl9nZXRwc2hhcmVkIChfX2NvbnN0IHB0 aHJlYWRfbXV0ZXhhdHRyX3QgKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIF9fcmVzdHJpY3QgX19hdHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGludCAqX19yZXN0cmljdCBfX3BzaGFyZWQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQg cHRocmVhZF9tdXRleGF0dHJfc2V0cHNoYXJlZCAocHRocmVhZF9tdXRleGF0dHJfdCAqX19hdHRy LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX3BzaGFyZWQp IHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9tdXRleGF0dHJfc2V0dHlwZSAocHRo cmVhZF9tdXRleGF0dHJfdCAqX19hdHRyLCBpbnQgX19raW5kKQogICAgIHRocm93ICgpOwoKCmV4 dGVybiBpbnQgcHRocmVhZF9tdXRleGF0dHJfZ2V0dHlwZSAoX19jb25zdCBwdGhyZWFkX211dGV4 YXR0cl90ICpfX3Jlc3RyaWN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg X19hdHRyLCBpbnQgKl9fcmVzdHJpY3QgX19raW5kKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBp bnQgcHRocmVhZF9jb25kX2luaXQgKHB0aHJlYWRfY29uZF90ICpfX3Jlc3RyaWN0IF9fY29uZCwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBwdGhyZWFkX2NvbmRhdHRyX3Qg Kl9fcmVzdHJpY3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25kX2F0dHIpIHRo cm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9jb25kX2Rlc3Ryb3kgKHB0aHJlYWRfY29uZF90 ICpfX2NvbmQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9jb25kX3NpZ25hbCAocHRo cmVhZF9jb25kX3QgKl9fY29uZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2NvbmRf YnJvYWRjYXN0IChwdGhyZWFkX2NvbmRfdCAqX19jb25kKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGlu dCBwdGhyZWFkX2NvbmRfd2FpdCAocHRocmVhZF9jb25kX3QgKl9fcmVzdHJpY3QgX19jb25kLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdGhyZWFkX211dGV4X3QgKl9fcmVzdHJpY3Qg X19tdXRleCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2NvbmRfdGltZWR3YWl0 IChwdGhyZWFkX2NvbmRfdCAqX19yZXN0cmljdCBfX2NvbmQsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgcHRocmVhZF9tdXRleF90ICpfX3Jlc3RyaWN0IF9fbXV0ZXgsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBzdHJ1Y3QgdGltZXNwZWMgKl9f cmVzdHJpY3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2Fic3RpbWUpIHRo cm93ICgpOwoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2NvbmRhdHRyX2luaXQgKHB0aHJlYWRfY29u ZGF0dHJfdCAqX19hdHRyKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfY29uZGF0dHJf ZGVzdHJveSAocHRocmVhZF9jb25kYXR0cl90ICpfX2F0dHIpIHRocm93ICgpOwoKCmV4dGVybiBp bnQgcHRocmVhZF9jb25kYXR0cl9nZXRwc2hhcmVkIChfX2NvbnN0IHB0aHJlYWRfY29uZGF0dHJf dCAqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Jlc3RyaWN0IF9f YXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0 cmljdCBfX3BzaGFyZWQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9jb25kYXR0cl9z ZXRwc2hhcmVkIChwdGhyZWFkX2NvbmRhdHRyX3QgKl9fYXR0ciwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGludCBfX3BzaGFyZWQpIHRocm93ICgpOwoKCgoKCgoKZXh0 ZXJuIGludCBwdGhyZWFkX3J3bG9ja19pbml0IChwdGhyZWFkX3J3bG9ja190ICpfX3Jlc3RyaWN0 IF9fcndsb2NrLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgcHRocmVh ZF9yd2xvY2thdHRyX3QgKl9fcmVzdHJpY3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBfX2F0dHIpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2tfZGVzdHJveSAo cHRocmVhZF9yd2xvY2tfdCAqX19yd2xvY2spIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVh ZF9yd2xvY2tfcmRsb2NrIChwdGhyZWFkX3J3bG9ja190ICpfX3J3bG9jaykgdGhyb3cgKCk7CgoK ZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja190cnlyZGxvY2sgKHB0aHJlYWRfcndsb2NrX3QgKl9f cndsb2NrKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja190aW1lZHJkbG9j ayAocHRocmVhZF9yd2xvY2tfdCAqX19yZXN0cmljdCBfX3J3bG9jaywKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBzdHJ1Y3QgdGltZXNwZWMgKl9fcmVzdHJp Y3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19hYnN0aW1lKSB0aHJv dyAoKTsKCgoKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja193cmxvY2sgKHB0aHJlYWRfcndsb2Nr X3QgKl9fcndsb2NrKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfcndsb2NrX3RyeXdy bG9jayAocHRocmVhZF9yd2xvY2tfdCAqX19yd2xvY2spIHRocm93ICgpOwoKCgpleHRlcm4gaW50 IHB0aHJlYWRfcndsb2NrX3RpbWVkd3Jsb2NrIChwdGhyZWFkX3J3bG9ja190ICpfX3Jlc3RyaWN0 IF9fcndsb2NrLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0 IHN0cnVjdCB0aW1lc3BlYyAqX19yZXN0cmljdAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBfX2Fic3RpbWUpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHB0aHJlYWRfcnds b2NrX3VubG9jayAocHRocmVhZF9yd2xvY2tfdCAqX19yd2xvY2spIHRocm93ICgpOwoKCgoKCmV4 dGVybiBpbnQgcHRocmVhZF9yd2xvY2thdHRyX2luaXQgKHB0aHJlYWRfcndsb2NrYXR0cl90ICpf X2F0dHIpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2thdHRyX2Rlc3Ryb3kg KHB0aHJlYWRfcndsb2NrYXR0cl90ICpfX2F0dHIpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRo cmVhZF9yd2xvY2thdHRyX2dldHBzaGFyZWQgKF9fY29uc3QgcHRocmVhZF9yd2xvY2thdHRyX3Qg KgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Jlc3RyaWN0IF9f YXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpfX3Jl c3RyaWN0IF9fcHNoYXJlZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja2F0 dHJfc2V0cHNoYXJlZCAocHRocmVhZF9yd2xvY2thdHRyX3QgKl9fYXR0ciwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fcHNoYXJlZCkgdGhyb3cgKCk7CgoK ZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja2F0dHJfZ2V0a2luZF9ucCAoX19jb25zdCBwdGhyZWFk X3J3bG9ja2F0dHJfdCAqX19hdHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBpbnQgKl9fcHJlZikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9j a2F0dHJfc2V0a2luZF9ucCAocHRocmVhZF9yd2xvY2thdHRyX3QgKl9fYXR0ciwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fcHJlZikgdGhyb3cgKCk7CiMg NTA5ICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAzCmV4dGVybiBpbnQgcHRocmVhZF9zcGluX2lu aXQgKHB0aHJlYWRfc3BpbmxvY2tfdCAqX19sb2NrLCBpbnQgX19wc2hhcmVkKQogICAgIHRocm93 ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9zcGluX2Rlc3Ryb3kgKHB0aHJlYWRfc3BpbmxvY2tf dCAqX19sb2NrKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfc3Bpbl9sb2NrIChwdGhy ZWFkX3NwaW5sb2NrX3QgKl9fbG9jaykgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX3Nw aW5fdHJ5bG9jayAocHRocmVhZF9zcGlubG9ja190ICpfX2xvY2spIHRocm93ICgpOwoKCmV4dGVy biBpbnQgcHRocmVhZF9zcGluX3VubG9jayAocHRocmVhZF9zcGlubG9ja190ICpfX2xvY2spIHRo cm93ICgpOwoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2JhcnJpZXJfaW5pdCAocHRocmVhZF9iYXJy aWVyX3QgKl9fcmVzdHJpY3QgX19iYXJyaWVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBfX2NvbnN0IHB0aHJlYWRfYmFycmllcmF0dHJfdCAqX19yZXN0cmljdAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBfX2F0dHIsIHVuc2lnbmVkIGludCBfX2NvdW50KSB0aHJv dyAoKTsKCmV4dGVybiBpbnQgcHRocmVhZF9iYXJyaWVyX2Rlc3Ryb3kgKHB0aHJlYWRfYmFycmll cl90ICpfX2JhcnJpZXIpIHRocm93ICgpOwoKZXh0ZXJuIGludCBwdGhyZWFkX2JhcnJpZXJhdHRy X2luaXQgKHB0aHJlYWRfYmFycmllcmF0dHJfdCAqX19hdHRyKSB0aHJvdyAoKTsKCmV4dGVybiBp bnQgcHRocmVhZF9iYXJyaWVyYXR0cl9kZXN0cm95IChwdGhyZWFkX2JhcnJpZXJhdHRyX3QgKl9f YXR0cikgdGhyb3cgKCk7CgpleHRlcm4gaW50IHB0aHJlYWRfYmFycmllcmF0dHJfZ2V0cHNoYXJl ZCAoX19jb25zdCBwdGhyZWFkX2JhcnJpZXJhdHRyX3QgKgogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgX19yZXN0cmljdCBfX2F0dHIsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19wc2hhcmVkKSB0aHJv dyAoKTsKCmV4dGVybiBpbnQgcHRocmVhZF9iYXJyaWVyYXR0cl9zZXRwc2hhcmVkIChwdGhyZWFk X2JhcnJpZXJhdHRyX3QgKl9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGludCBfX3BzaGFyZWQpIHRocm93ICgpOwoKZXh0ZXJuIGludCBwdGhyZWFkX2Jh cnJpZXJfd2FpdCAocHRocmVhZF9iYXJyaWVyX3QgKl9fYmFycmllcikgdGhyb3cgKCk7CiMgNTU2 ICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAzCmV4dGVybiBpbnQgcHRocmVhZF9rZXlfY3JlYXRl IChwdGhyZWFkX2tleV90ICpfX2tleSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZv aWQgKCpfX2Rlc3RyX2Z1bmN0aW9uKSAodm9pZCAqKSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBw dGhyZWFkX2tleV9kZWxldGUgKHB0aHJlYWRfa2V5X3QgX19rZXkpIHRocm93ICgpOwoKCmV4dGVy biBpbnQgcHRocmVhZF9zZXRzcGVjaWZpYyAocHRocmVhZF9rZXlfdCBfX2tleSwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHZvaWQgKl9fcG9pbnRlcikgdGhyb3cgKCk7 CgoKZXh0ZXJuIHZvaWQgKnB0aHJlYWRfZ2V0c3BlY2lmaWMgKHB0aHJlYWRfa2V5X3QgX19rZXkp IHRocm93ICgpOwojIDU3NiAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMwpleHRlcm4gaW50IHB0 aHJlYWRfb25jZSAocHRocmVhZF9vbmNlX3QgKl9fb25jZV9jb250cm9sLAogICAgICAgICAgICAg ICAgICAgICAgICAgdm9pZCAoKl9faW5pdF9yb3V0aW5lKSAodm9pZCkpIHRocm93ICgpOwoKCgoK CgpleHRlcm4gaW50IHB0aHJlYWRfc2V0Y2FuY2Vsc3RhdGUgKGludCBfX3N0YXRlLCBpbnQgKl9f b2xkc3RhdGUpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHB0aHJlYWRfc2V0Y2FuY2VsdHlwZSAo aW50IF9fdHlwZSwgaW50ICpfX29sZHR5cGUpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVh ZF9jYW5jZWwgKHB0aHJlYWRfdCBfX2NhbmNlbHRocmVhZCkgdGhyb3cgKCk7CgoKCgpleHRlcm4g dm9pZCBwdGhyZWFkX3Rlc3RjYW5jZWwgKHZvaWQpIHRocm93ICgpOwojIDYxMCAiL3Vzci9pbmNs dWRlL3B0aHJlYWQuaCIgMwpleHRlcm4gdm9pZCBfcHRocmVhZF9jbGVhbnVwX3B1c2ggKHN0cnVj dCBfcHRocmVhZF9jbGVhbnVwX2J1ZmZlciAqX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgdm9pZCAoKl9fcm91dGluZSkgKHZvaWQgKiksCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgdm9pZCAqX19hcmcpIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJu IHZvaWQgX3B0aHJlYWRfY2xlYW51cF9wb3AgKHN0cnVjdCBfcHRocmVhZF9jbGVhbnVwX2J1ZmZl ciAqX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19leGVj dXRlKSB0aHJvdyAoKTsKIyA2MzEgIi91c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDMKZXh0ZXJuIHZv aWQgX3B0aHJlYWRfY2xlYW51cF9wdXNoX2RlZmVyIChzdHJ1Y3QgX3B0aHJlYWRfY2xlYW51cF9i dWZmZXIgKl9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHZvaWQgKCpfX3JvdXRpbmUpICh2b2lkICopLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHZvaWQgKl9fYXJnKSB0aHJvdyAoKTsKIyA2NDIgIi91c3IvaW5jbHVkZS9w dGhyZWFkLmgiIDMKZXh0ZXJuIHZvaWQgX3B0aHJlYWRfY2xlYW51cF9wb3BfcmVzdG9yZSAoc3Ry dWN0IF9wdGhyZWFkX2NsZWFudXBfYnVmZmVyICpfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fZXhlY3V0ZSkgdGhyb3cgKCk7CgoKCgoKZXh0 ZXJuIGludCBwdGhyZWFkX2dldGNwdWNsb2NraWQgKHB0aHJlYWRfdCBfX3RocmVhZF9pZCwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb2NraWRfdCAqX19jbG9ja19pZCkgdGhy b3cgKCk7CgoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3NpZ3RocmVhZC5oIiAxIDMKIyAzMSAi L3Vzci9pbmNsdWRlL2JpdHMvc2lndGhyZWFkLmgiIDMKZXh0ZXJuIGludCBwdGhyZWFkX3NpZ21h c2sgKGludCBfX2hvdywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgX19zaWdz ZXRfdCAqX19yZXN0cmljdCBfX25ld21hc2ssCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBf X3NpZ3NldF90ICpfX3Jlc3RyaWN0IF9fb2xkbWFzayl0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0 aHJlYWRfa2lsbCAocHRocmVhZF90IF9fdGhyZWFkaWQsIGludCBfX3NpZ25vKSB0aHJvdyAoKTsK IyA2NTYgIi91c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDIgMwojIDY3MSAiL3Vzci9pbmNsdWRlL3B0 aHJlYWQuaCIgMwpleHRlcm4gaW50IHB0aHJlYWRfYXRmb3JrICh2b2lkICgqX19wcmVwYXJlKSAo dm9pZCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCpfX3BhcmVudCkgKHZvaWQp LAogICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICgqX19jaGlsZCkgKHZvaWQpKSB0aHJv dyAoKTsKCgoKCmV4dGVybiB2b2lkIHB0aHJlYWRfa2lsbF9vdGhlcl90aHJlYWRzX25wICh2b2lk KSB0aHJvdyAoKTsKCn0KIyAzOCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvaTM4Ni1saW51eC9iaXRz L2d0aHItZGVmYXVsdC5oIiAyIDMKCnR5cGVkZWYgcHRocmVhZF9rZXlfdCBfX2d0aHJlYWRfa2V5 X3Q7CnR5cGVkZWYgcHRocmVhZF9vbmNlX3QgX19ndGhyZWFkX29uY2VfdDsKdHlwZWRlZiBwdGhy ZWFkX211dGV4X3QgX19ndGhyZWFkX211dGV4X3Q7CgoKCgoKCiNwcmFnbWEgd2VhayBwdGhyZWFk X29uY2UKI3ByYWdtYSB3ZWFrIHB0aHJlYWRfa2V5X2NyZWF0ZQojcHJhZ21hIHdlYWsgcHRocmVh ZF9rZXlfZGVsZXRlCiNwcmFnbWEgd2VhayBwdGhyZWFkX2dldHNwZWNpZmljCiNwcmFnbWEgd2Vh ayBwdGhyZWFkX3NldHNwZWNpZmljCiNwcmFnbWEgd2VhayBwdGhyZWFkX2NyZWF0ZQoKI3ByYWdt YSB3ZWFrIHB0aHJlYWRfbXV0ZXhfbG9jayAKI3ByYWdtYSB3ZWFrIHB0aHJlYWRfbXV0ZXhfdHJ5 bG9jayAKI3ByYWdtYSB3ZWFrIHB0aHJlYWRfbXV0ZXhfdW5sb2NrIAojIDgwICIvdXNyL2luY2x1 ZGUvYysrLzMuMi9pMzg2LWxpbnV4L2JpdHMvZ3Roci1kZWZhdWx0LmgiIDMKc3RhdGljIGlubGlu ZSBpbnQKX19ndGhyZWFkX2FjdGl2ZV9wICh2b2lkKQp7CiAgc3RhdGljIHZvaWQgKmNvbnN0IF9f Z3RocmVhZF9hY3RpdmVfcHRyID0gKHZvaWQgKikgJnB0aHJlYWRfY3JlYXRlOwogIHJldHVybiBf X2d0aHJlYWRfYWN0aXZlX3B0ciAhPSAwOwp9CiMgNDM3ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9p Mzg2LWxpbnV4L2JpdHMvZ3Roci1kZWZhdWx0LmgiIDMKc3RhdGljIGlubGluZSBpbnQKX19ndGhy ZWFkX29uY2UgKF9fZ3RocmVhZF9vbmNlX3QgKm9uY2UsIHZvaWQgKCpmdW5jKSAodm9pZCkpCnsK ICBpZiAoX19ndGhyZWFkX2FjdGl2ZV9wICgpKQogICAgcmV0dXJuIHB0aHJlYWRfb25jZSAob25j ZSwgZnVuYyk7CiAgZWxzZQogICAgcmV0dXJuIC0xOwp9CgpzdGF0aWMgaW5saW5lIGludApfX2d0 aHJlYWRfa2V5X2NyZWF0ZSAoX19ndGhyZWFkX2tleV90ICprZXksIHZvaWQgKCpkdG9yKSAodm9p ZCAqKSkKewogIHJldHVybiBwdGhyZWFkX2tleV9jcmVhdGUgKGtleSwgZHRvcik7Cn0KCnN0YXRp YyBpbmxpbmUgaW50Cl9fZ3RocmVhZF9rZXlfZHRvciAoX19ndGhyZWFkX2tleV90IGtleSwgdm9p ZCAqcHRyKQp7CgogIGlmIChwdHIpCiAgICByZXR1cm4gcHRocmVhZF9zZXRzcGVjaWZpYyAoa2V5 LCAwKTsKICBlbHNlCiAgICByZXR1cm4gMDsKfQoKc3RhdGljIGlubGluZSBpbnQKX19ndGhyZWFk X2tleV9kZWxldGUgKF9fZ3RocmVhZF9rZXlfdCBrZXkpCnsKICByZXR1cm4gcHRocmVhZF9rZXlf ZGVsZXRlIChrZXkpOwp9CgpzdGF0aWMgaW5saW5lIHZvaWQgKgpfX2d0aHJlYWRfZ2V0c3BlY2lm aWMgKF9fZ3RocmVhZF9rZXlfdCBrZXkpCnsKICByZXR1cm4gcHRocmVhZF9nZXRzcGVjaWZpYyAo a2V5KTsKfQoKc3RhdGljIGlubGluZSBpbnQKX19ndGhyZWFkX3NldHNwZWNpZmljIChfX2d0aHJl YWRfa2V5X3Qga2V5LCBjb25zdCB2b2lkICpwdHIpCnsKICByZXR1cm4gcHRocmVhZF9zZXRzcGVj aWZpYyAoa2V5LCBwdHIpOwp9CgpzdGF0aWMgaW5saW5lIGludApfX2d0aHJlYWRfbXV0ZXhfbG9j ayAoX19ndGhyZWFkX211dGV4X3QgKm11dGV4KQp7CiAgaWYgKF9fZ3RocmVhZF9hY3RpdmVfcCAo KSkKICAgIHJldHVybiBwdGhyZWFkX211dGV4X2xvY2sgKG11dGV4KTsKICBlbHNlCiAgICByZXR1 cm4gMDsKfQoKc3RhdGljIGlubGluZSBpbnQKX19ndGhyZWFkX211dGV4X3RyeWxvY2sgKF9fZ3Ro cmVhZF9tdXRleF90ICptdXRleCkKewogIGlmIChfX2d0aHJlYWRfYWN0aXZlX3AgKCkpCiAgICBy ZXR1cm4gcHRocmVhZF9tdXRleF90cnlsb2NrIChtdXRleCk7CiAgZWxzZQogICAgcmV0dXJuIDA7 Cn0KCnN0YXRpYyBpbmxpbmUgaW50Cl9fZ3RocmVhZF9tdXRleF91bmxvY2sgKF9fZ3RocmVhZF9t dXRleF90ICptdXRleCkKewogIGlmIChfX2d0aHJlYWRfYWN0aXZlX3AgKCkpCiAgICByZXR1cm4g cHRocmVhZF9tdXRleF91bmxvY2sgKG11dGV4KTsKICBlbHNlCiAgICByZXR1cm4gMDsKfQojIDk5 ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9pMzg2LWxpbnV4L2JpdHMvZ3Roci5oIiAyIDMKIyAzOCAi L3Vzci9pbmNsdWRlL2MrKy8zLjIvaTM4Ni1saW51eC9iaXRzL2MrK2lvLmgiIDIgMwoKbmFtZXNw YWNlIHN0ZAp7CgogIHR5cGVkZWYgbG9uZyBzdHJlYW1vZmY7CiAgdHlwZWRlZiBwdHJkaWZmX3Qg c3RyZWFtc2l6ZTsKCiAgdHlwZWRlZiBwdHJkaWZmX3Qgd3N0cmVhbXNpemU7CgogIHR5cGVkZWYg ZnBvc190IF9fY19zdHJlYW1wb3M7CgogIHR5cGVkZWYgX19ndGhyZWFkX211dGV4X3QgX19jX2xv Y2s7CgoKICB0eXBlZGVmIEZJTEUgX19jX2ZpbGU7CgoKICBzdHJ1Y3QgX19pb3NfZmxhZ3MKICB7 CiAgICB0eXBlZGVmIHNob3J0IF9faW50X3R5cGU7CgogICAgc3RhdGljIGNvbnN0IF9faW50X3R5 cGUgX1NfYm9vbGFscGhhID0gMHgwMDAxOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1Nf ZGVjID0gMHgwMDAyOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfZml4ZWQgPSAweDAw MDQ7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19oZXggPSAweDAwMDg7CiAgICBzdGF0 aWMgY29uc3QgX19pbnRfdHlwZSBfU19pbnRlcm5hbCA9IDB4MDAxMDsKICAgIHN0YXRpYyBjb25z dCBfX2ludF90eXBlIF9TX2xlZnQgPSAweDAwMjA7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlw ZSBfU19vY3QgPSAweDAwNDA7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19yaWdodCA9 IDB4MDA4MDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX3NjaWVudGlmaWMgPSAweDAx MDA7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19zaG93YmFzZSA9IDB4MDIwMDsKICAg IHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX3Nob3dwb2ludCA9IDB4MDQwMDsKICAgIHN0YXRp YyBjb25zdCBfX2ludF90eXBlIF9TX3Nob3dwb3MgPSAweDA4MDA7CiAgICBzdGF0aWMgY29uc3Qg X19pbnRfdHlwZSBfU19za2lwd3MgPSAweDEwMDA7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlw ZSBfU191bml0YnVmID0gMHgyMDAwOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfdXBw ZXJjYXNlID0gMHg0MDAwOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfYWRqdXN0Zmll bGQgPSAweDAwMjAgfCAweDAwODAgfCAweDAwMTA7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlw ZSBfU19iYXNlZmllbGQgPSAweDAwMDIgfCAweDAwNDAgfCAweDAwMDg7CiAgICBzdGF0aWMgY29u c3QgX19pbnRfdHlwZSBfU19mbG9hdGZpZWxkID0gMHgwMTAwIHwgMHgwMDA0OwoKCiAgICBzdGF0 aWMgY29uc3QgX19pbnRfdHlwZSBfU19iYWRiaXQgPSAweDAxOwogICAgc3RhdGljIGNvbnN0IF9f aW50X3R5cGUgX1NfZW9mYml0ID0gMHgwMjsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9T X2ZhaWxiaXQgPSAweDA0OwoKCiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19hcHAgPSAw eDAxOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfYXRlID0gMHgwMjsKICAgIHN0YXRp YyBjb25zdCBfX2ludF90eXBlIF9TX2JpbiA9IDB4MDQ7CiAgICBzdGF0aWMgY29uc3QgX19pbnRf dHlwZSBfU19pbiA9IDB4MDg7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19vdXQgPSAw eDEwOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfdHJ1bmMgPSAweDIwOwogIH07Cn0K IyA0NSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9mcG9zLmgiIDIgMwojIDEgIi91c3IvaW5j bHVkZS9jKysvMy4yL2N3Y2hhciIgMSAzCiMgNDggIi91c3IvaW5jbHVkZS9jKysvMy4yL2N3Y2hh ciIgMwoKCgojIDEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2N0aW1lIiAxIDMKIyA0OCAiL3Vzci9p bmNsdWRlL2MrKy8zLjIvY3RpbWUiIDMKIyA2NCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvY3RpbWUi IDMKbmFtZXNwYWNlIHN0ZAp7CiAgdXNpbmcgOjpjbG9ja190OwogIHVzaW5nIDo6dGltZV90Owog IHVzaW5nIDo6dG07CgogIHVzaW5nIDo6Y2xvY2s7CiAgdXNpbmcgOjpkaWZmdGltZTsKICB1c2lu ZyA6Om1rdGltZTsKICB1c2luZyA6OnRpbWU7CiAgdXNpbmcgOjphc2N0aW1lOwogIHVzaW5nIDo6 Y3RpbWU7CiAgdXNpbmcgOjpnbXRpbWU7CiAgdXNpbmcgOjpsb2NhbHRpbWU7CiAgdXNpbmcgOjpz dHJmdGltZTsKfQojIDUyICIvdXNyL2luY2x1ZGUvYysrLzMuMi9jd2NoYXIiIDIgMwoKCiMgMSAi L3Vzci9pbmNsdWRlL3djaGFyLmgiIDEgMwojIDQwICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMwoj IDEgIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8zLjIuMy9pbmNsdWRlL3N0ZGFyZy5oIiAx IDMKIyA0MSAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDIgMwoKCgoKCgoKIyAxICIvdXNyL2xpYi9n Y2MtbGliL2kzODYtbGludXgvMy4yLjMvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgNDkgIi91c3Iv aW5jbHVkZS93Y2hhci5oIiAyIDMKIyA2MyAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDMKCiMgODgg Ii91c3IvaW5jbHVkZS93Y2hhci5oIiAzCgoKdHlwZWRlZiBfX21ic3RhdGVfdCBtYnN0YXRlX3Q7 CgoKCiMgMTEzICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMwpleHRlcm4gIkMiIHsKCgoKCnN0cnVj dCB0bTsKCgoKCgoKCgoKZXh0ZXJuIHdjaGFyX3QgKndjc2NweSAod2NoYXJfdCAqX19yZXN0cmlj dCBfX2Rlc3QsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0 cmljdCBfX3NyYykgdGhyb3cgKCk7CgpleHRlcm4gd2NoYXJfdCAqd2NzbmNweSAod2NoYXJfdCAq X19yZXN0cmljdCBfX2Rlc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFy X3QgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24pCiAgICAgdGhyb3cgKCk7CgoKZXh0ZXJu IHdjaGFyX3QgKndjc2NhdCAod2NoYXJfdCAqX19yZXN0cmljdCBfX2Rlc3QsCiAgICAgICAgICAg ICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3NyYykgdGhyb3cgKCk7 CgpleHRlcm4gd2NoYXJfdCAqd2NzbmNhdCAod2NoYXJfdCAqX19yZXN0cmljdCBfX2Rlc3QsCiAg ICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zcmMs IHNpemVfdCBfX24pCiAgICAgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCB3Y3NjbXAgKF9fY29uc3Qg d2NoYXJfdCAqX19zMSwgX19jb25zdCB3Y2hhcl90ICpfX3MyKQogICAgIHRocm93ICgpIF9fYXR0 cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIGludCB3Y3NuY21wIChfX2NvbnN0IHdjaGFy X3QgKl9fczEsIF9fY29uc3Qgd2NoYXJfdCAqX19zMiwgc2l6ZV90IF9fbikKICAgICB0aHJvdyAo KSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKCmV4dGVybiBpbnQgd2NzY2FzZWNtcCAo X19jb25zdCB3Y2hhcl90ICpfX3MxLCBfX2NvbnN0IHdjaGFyX3QgKl9fczIpIHRocm93ICgpOwoK CmV4dGVybiBpbnQgd2NzbmNhc2VjbXAgKF9fY29uc3Qgd2NoYXJfdCAqX19zMSwgX19jb25zdCB3 Y2hhcl90ICpfX3MyLAogICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19uKSB0aHJvdyAo KTsKCgoKCgpleHRlcm4gaW50IHdjc2Nhc2VjbXBfbCAoX19jb25zdCB3Y2hhcl90ICpfX3MxLCBf X2NvbnN0IHdjaGFyX3QgKl9fczIsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2xvY2FsZV90 IF9fbG9jKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgd2NzbmNhc2VjbXBfbCAoX19jb25zdCB3Y2hh cl90ICpfX3MxLCBfX2NvbnN0IHdjaGFyX3QgKl9fczIsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgc2l6ZV90IF9fbiwgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGlu dCB3Y3Njb2xsIChfX2NvbnN0IHdjaGFyX3QgKl9fczEsIF9fY29uc3Qgd2NoYXJfdCAqX19zMikg dGhyb3cgKCk7CgoKCmV4dGVybiBzaXplX3Qgd2NzeGZybSAod2NoYXJfdCAqX19yZXN0cmljdCBf X3MxLAogICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBf X3MyLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgoKCgoKCgpleHRlcm4gaW50IHdjc2NvbGxfbCAo X19jb25zdCB3Y2hhcl90ICpfX3MxLCBfX2NvbnN0IHdjaGFyX3QgKl9fczIsCiAgICAgICAgICAg ICAgICAgICAgICBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBzaXplX3Qg d2NzeGZybV9sICh3Y2hhcl90ICpfX3MxLCBfX2NvbnN0IHdjaGFyX3QgKl9fczIsCiAgICAgICAg ICAgICAgICAgICAgICAgICBzaXplX3QgX19uLCBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKTsK CgpleHRlcm4gd2NoYXJfdCAqd2NzZHVwIChfX2NvbnN0IHdjaGFyX3QgKl9fcykgdGhyb3cgKCkg X19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKCgoKCmV4dGVybiB3Y2hhcl90ICp3Y3NjaHIg KF9fY29uc3Qgd2NoYXJfdCAqX193Y3MsIHdjaGFyX3QgX193YykKICAgICB0aHJvdyAoKSBfX2F0 dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiB3Y2hhcl90ICp3Y3NyY2hyIChfX2NvbnN0 IHdjaGFyX3QgKl9fd2NzLCB3Y2hhcl90IF9fd2MpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVf XyAoKF9fcHVyZV9fKSk7CgoKCgoKZXh0ZXJuIHdjaGFyX3QgKndjc2Nocm51bCAoX19jb25zdCB3 Y2hhcl90ICpfX3MsIHdjaGFyX3QgX193YykKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo X19wdXJlX18pKTsKCgoKCgpleHRlcm4gc2l6ZV90IHdjc2NzcG4gKF9fY29uc3Qgd2NoYXJfdCAq X193Y3MsIF9fY29uc3Qgd2NoYXJfdCAqX19yZWplY3QpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1 dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIHNpemVfdCB3Y3NzcG4gKF9fY29uc3Qgd2NoYXJf dCAqX193Y3MsIF9fY29uc3Qgd2NoYXJfdCAqX19hY2NlcHQpCiAgICAgdGhyb3cgKCkgX19hdHRy aWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gd2NoYXJfdCAqd2NzcGJyayAoX19jb25zdCB3 Y2hhcl90ICpfX3djcywgX19jb25zdCB3Y2hhcl90ICpfX2FjY2VwdCkKICAgICB0aHJvdyAoKSBf X2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiB3Y2hhcl90ICp3Y3NzdHIgKF9fY29u c3Qgd2NoYXJfdCAqX19oYXlzdGFjaywgX19jb25zdCB3Y2hhcl90ICpfX25lZWRsZSkKICAgICB0 aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgpleHRlcm4gd2NoYXJfdCAqd2Nz dG9rICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAgICAgICAgICAgICAgX19j b25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZGVsaW0sCiAgICAgICAgICAgICAgICAgICAgICAg IHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fcHRyKSB0aHJvdyAoKTsKCgpleHRlcm4gc2l6ZV90IHdj c2xlbiAoX19jb25zdCB3Y2hhcl90ICpfX3MpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1 cmVfXykpOwoKCgoKZXh0ZXJuIHdjaGFyX3QgKndjc3djcyAoX19jb25zdCB3Y2hhcl90ICpfX2hh eXN0YWNrLCBfX2NvbnN0IHdjaGFyX3QgKl9fbmVlZGxlKQogICAgIHRocm93ICgpIF9fYXR0cmli dXRlX18gKChfX3B1cmVfXykpOwoKCgoKZXh0ZXJuIHNpemVfdCB3Y3NubGVuIChfX2NvbnN0IHdj aGFyX3QgKl9fcywgc2l6ZV90IF9fbWF4bGVuKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18g KChfX3B1cmVfXykpOwoKCgoKCmV4dGVybiB3Y2hhcl90ICp3bWVtY2hyIChfX2NvbnN0IHdjaGFy X3QgKl9fcywgd2NoYXJfdCBfX2MsIHNpemVfdCBfX24pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1 dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIGludCB3bWVtY21wIChfX2NvbnN0IHdjaGFyX3Qg Kl9fcmVzdHJpY3QgX19zMSwKICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9f cmVzdHJpY3QgX19zMiwgc2l6ZV90IF9fbikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo X19wdXJlX18pKTsKCgpleHRlcm4gd2NoYXJfdCAqd21lbWNweSAod2NoYXJfdCAqX19yZXN0cmlj dCBfX3MxLAogICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3Ry aWN0IF9fczIsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCgpleHRlcm4gd2NoYXJfdCAqd21lbW1v dmUgKHdjaGFyX3QgKl9fczEsIF9fY29uc3Qgd2NoYXJfdCAqX19zMiwgc2l6ZV90IF9fbikKICAg ICB0aHJvdyAoKTsKCgpleHRlcm4gd2NoYXJfdCAqd21lbXNldCAod2NoYXJfdCAqX19zLCB3Y2hh cl90IF9fYywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIHdjaGFyX3QgKndtZW1w Y3B5ICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fczEsCiAgICAgICAgICAgICAgICAgICAgICAgICAg X19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fczIsIHNpemVfdCBfX24pCiAgICAgdGhyb3cg KCk7CgoKCgoKCmV4dGVybiB3aW50X3QgYnRvd2MgKGludCBfX2MpIHRocm93ICgpOwoKCgpleHRl cm4gaW50IHdjdG9iICh3aW50X3QgX19jKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBtYnNpbml0 IChfX2NvbnN0IG1ic3RhdGVfdCAqX19wcykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVy ZV9fKSk7CgoKCmV4dGVybiBzaXplX3QgbWJydG93YyAod2NoYXJfdCAqX19yZXN0cmljdCBfX3B3 YywKICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zLCBz aXplX3QgX19uLAogICAgICAgICAgICAgICAgICAgICAgIG1ic3RhdGVfdCAqX19wKSB0aHJvdyAo KTsKCgpleHRlcm4gc2l6ZV90IHdjcnRvbWIgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCB3Y2hhcl90 IF9fd2MsCiAgICAgICAgICAgICAgICAgICAgICAgbWJzdGF0ZV90ICpfX3Jlc3RyaWN0IF9fcHMp IHRocm93ICgpOwoKCmV4dGVybiBzaXplX3QgX19tYnJsZW4gKF9fY29uc3QgY2hhciAqX19yZXN0 cmljdCBfX3MsIHNpemVfdCBfX24sCiAgICAgICAgICAgICAgICAgICAgICAgIG1ic3RhdGVfdCAq X19yZXN0cmljdCBfX3BzKSB0aHJvdyAoKTsKZXh0ZXJuIHNpemVfdCBtYnJsZW4gKF9fY29uc3Qg Y2hhciAqX19yZXN0cmljdCBfX3MsIHNpemVfdCBfX24sCiAgICAgICAgICAgICAgICAgICAgICBt YnN0YXRlX3QgKl9fcmVzdHJpY3QgX19wcykgdGhyb3cgKCk7CgojIDMyNCAiL3Vzci9pbmNsdWRl L3djaGFyLmgiIDMKCgoKZXh0ZXJuIHNpemVfdCBtYnNydG93Y3MgKHdjaGFyX3QgKl9fcmVzdHJp Y3QgX19kc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKipfX3Jlc3Ry aWN0IF9fc3JjLCBzaXplX3QgX19sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICBtYnN0YXRl X3QgKl9fcmVzdHJpY3QgX19wcykgdGhyb3cgKCk7CgoKCmV4dGVybiBzaXplX3Qgd2NzcnRvbWJz IChjaGFyICpfX3Jlc3RyaWN0IF9fZHN0LAogICAgICAgICAgICAgICAgICAgICAgICAgX19jb25z dCB3Y2hhcl90ICoqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbGVuLAogICAgICAgICAgICAg ICAgICAgICAgICAgbWJzdGF0ZV90ICpfX3Jlc3RyaWN0IF9fcHMpIHRocm93ICgpOwoKCgoKCgpl eHRlcm4gc2l6ZV90IG1ic25ydG93Y3MgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19kc3QsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICoqX19yZXN0cmljdCBfX3NyYywgc2l6 ZV90IF9fbm1jLAogICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX2xlbiwgbWJzdGF0 ZV90ICpfX3Jlc3RyaWN0IF9fcHMpIHRocm93ICgpOwoKCgpleHRlcm4gc2l6ZV90IHdjc25ydG9t YnMgKGNoYXIgKl9fcmVzdHJpY3QgX19kc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX19j b25zdCB3Y2hhcl90ICoqX19yZXN0cmljdCBfX3NyYywKICAgICAgICAgICAgICAgICAgICAgICAg ICBzaXplX3QgX19ud2MsIHNpemVfdCBfX2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICBt YnN0YXRlX3QgKl9fcmVzdHJpY3QgX19wcykgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgd2N3 aWR0aCAod2NoYXJfdCBfX2MpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHdjc3dpZHRoIChfX2Nv bnN0IHdjaGFyX3QgKl9fcywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBkb3Vi bGUgd2NzdG9kIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAg ICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIpIHRocm93ICgpOwoKCgpl eHRlcm4gZmxvYXQgd2NzdG9mIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAog ICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0cikgdGhyb3cg KCk7CmV4dGVybiBsb25nIGRvdWJsZSB3Y3N0b2xkIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJp Y3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJp Y3QgX19lbmRwdHIpIHRocm93ICgpOwoKCgoKCmV4dGVybiBsb25nIGludCB3Y3N0b2wgKF9fY29u c3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgIHdj aGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKSB0aHJvdyAoKTsKCgoKZXh0 ZXJuIHVuc2lnbmVkIGxvbmcgaW50IHdjc3RvdWwgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmlj dCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19y ZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkKICAgICB0aHJvdyAoKTsKCgoKCl9fZXh0ZW5z aW9uX18KZXh0ZXJuIGxvbmcgbG9uZyBpbnQgd2NzdG9sbCAoX19jb25zdCB3Y2hhcl90ICpfX3Jl c3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9f cmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpCiAgICAgdGhyb3cgKCk7CgoKCl9fZXh0ZW5z aW9uX18KZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgd2NzdG91bGwgKF9fY29uc3Qgd2No YXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGludCBfX2Jhc2UpIHRocm93ICgpOwoKCgoKCgpfX2V4dGVu c2lvbl9fCmV4dGVybiBsb25nIGxvbmcgaW50IHdjc3RvcSAoX19jb25zdCB3Y2hhcl90ICpfX3Jl c3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19y ZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkKICAgICB0aHJvdyAoKTsKCgoKX19leHRlbnNp b25fXwpleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGludCB3Y3N0b3VxIChfX2NvbnN0IHdjaGFy X3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgaW50IF9fYmFzZSkgdGhyb3cgKCk7CiMgNDQzICIvdXNyL2luY2x1 ZGUvd2NoYXIuaCIgMwpleHRlcm4gbG9uZyBpbnQgd2NzdG9sX2wgKF9fY29uc3Qgd2NoYXJfdCAq X19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9f cmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAg X19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7CgpleHRlcm4gdW5zaWduZWQgbG9uZyBpbnQgd2Nz dG91bF9sIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYmFzZSwgX19sb2NhbGVfdCBf X2xvYykgdGhyb3cgKCk7CgpfX2V4dGVuc2lvbl9fCmV4dGVybiBsb25nIGxvbmcgaW50IHdjc3Rv bGxfbCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNlLCBfX2xvY2FsZV90IF9fbG9jKSB0aHJv dyAoKTsKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgd2NzdG91 bGxfbCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2Jhc2UsIF9f bG9jYWxlX3QgX19sb2MpCiAgICAgdGhyb3cgKCk7CgpleHRlcm4gZG91YmxlIHdjc3RvZF9sIChf X2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAg ICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwgX19sb2NhbGVfdCBfX2xvYykKICAgICB0 aHJvdyAoKTsKCmV4dGVybiBmbG9hdCB3Y3N0b2ZfbCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3Ry aWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBf X2VuZHB0ciwgX19sb2NhbGVfdCBfX2xvYykKICAgICB0aHJvdyAoKTsKCmV4dGVybiBsb25nIGRv dWJsZSB3Y3N0b2xkX2wgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKTsK CgoKCgpleHRlcm4gZG91YmxlIF9fd2NzdG9kX2ludGVybmFsIChfX2NvbnN0IHdjaGFyX3QgKl9f cmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90 ICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fZ3JvdXApCiAgICAgdGhyb3cgKCk7CmV4dGVy biBmbG9hdCBfX3djc3RvZl9pbnRlcm5hbCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9f bnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmlj dCBfX2VuZHB0ciwgaW50IF9fZ3JvdXApCiAgICAgdGhyb3cgKCk7CmV4dGVybiBsb25nIGRvdWJs ZSBfX3djc3RvbGRfaW50ZXJuYWwgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3Ry aWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg X19ncm91cCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcgaW50IF9fd2NzdG9sX2ludGVybmFsIChf X2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGludCBfX2Jhc2UsIGludCBfX2dyb3VwKSB0aHJvdyAoKTsK CgoKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW50IF9fd2NzdG91bF9pbnRlcm5hbCAoX19jb25zdCB3 Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYmFzZSwgaW50IF9fZ3JvdXAp IHRocm93ICgpOwoKCgpfX2V4dGVuc2lvbl9fCmV4dGVybiBsb25nIGxvbmcgaW50IF9fd2NzdG9s bF9pbnRlcm5hbCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2Vu ZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNl LCBpbnQgX19ncm91cCkgdGhyb3cgKCk7CgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIHVuc2lnbmVk IGxvbmcgbG9uZyBpbnQgX193Y3N0b3VsbF9pbnRlcm5hbCAoX19jb25zdCB3Y2hhcl90ICoKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19yZXN0cmlj dCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHdjaGFyX3QgKioKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYmFzZSwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fZ3JvdXApIHRocm93ICgpOwojIDU2 MyAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDMKZXh0ZXJuIHdjaGFyX3QgKndjcGNweSAod2NoYXJf dCAqX19kZXN0LCBfX2NvbnN0IHdjaGFyX3QgKl9fc3JjKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHdj aGFyX3QgKndjcG5jcHkgKHdjaGFyX3QgKl9fZGVzdCwgX19jb25zdCB3Y2hhcl90ICpfX3NyYywg c2l6ZV90IF9fbikKICAgICB0aHJvdyAoKTsKCgoKCgoKCgpleHRlcm4gaW50IGZ3aWRlIChfX0ZJ TEUgKl9fZnAsIGludCBfX21vZGUpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IGZ3cHJpbnRmIChf X0ZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sCiAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qg d2NoYXJfdCAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKQogICAgIHRocm93ICgpIDsKCmV4dGVy biBpbnQgd3ByaW50ZiAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4p CiAgICAgdGhyb3cgKCkgOwoKZXh0ZXJuIGludCBzd3ByaW50ZiAod2NoYXJfdCAqX19yZXN0cmlj dCBfX3MsIHNpemVfdCBfX24sCiAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAq X19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKQogICAgIHRocm93ICgpIDsKCgpleHRlcm4gaW50IHZm d3ByaW50ZiAoX19GSUxFICpfX3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAgICAgICAgICAgIF9f Y29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX2Zvcm1hdCwKICAgICAgICAgICAgICAgICAgICAg IF9fZ251Y192YV9saXN0IF9fYXJnKQogICAgIHRocm93ICgpIDsKCmV4dGVybiBpbnQgdndwcmlu dGYgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX2Zvcm1hdCwKICAgICAgICAgICAgICAg ICAgICAgX19nbnVjX3ZhX2xpc3QgX19hcmcpCiAgICAgdGhyb3cgKCkgOwoKCmV4dGVybiBpbnQg dnN3cHJpbnRmICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbiwKICAgICAgICAg ICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX2Zvcm1hdCwKICAgICAg ICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0IF9fYXJnKQogICAgIHRocm93ICgpIDsKCgoK ZXh0ZXJuIGludCBmd3NjYW5mIChfX0ZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sCiAgICAgICAg ICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pCiAg ICAgdGhyb3cgKCkgOwoKZXh0ZXJuIGludCB3c2NhbmYgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0 cmljdCBfX2Zvcm1hdCwgLi4uKQogICAgIHRocm93ICgpIDsKCmV4dGVybiBpbnQgc3dzY2FuZiAo X19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAgICAgICAgICBfX2Nv bnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikKICAgICB0aHJvdyAoKSA7CgoK CgoKCgoKZXh0ZXJuIGludCB2ZndzY2FuZiAoX19GSUxFICpfX3Jlc3RyaWN0IF9fcywKICAgICAg ICAgICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZm9ybWF0LAogICAg ICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICB0aHJvdyAoKSA7Cgpl eHRlcm4gaW50IHZ3c2NhbmYgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX2Zvcm1hdCwK ICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICB0aHJvdyAoKSA7 CgpleHRlcm4gaW50IHZzd3NjYW5mIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zLAog ICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19mb3JtYXQs CiAgICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0IF9fYXJnKQogICAgIHRocm93ICgp IDsKCgoKCgoKCmV4dGVybiB3aW50X3QgZmdldHdjIChfX0ZJTEUgKl9fc3RyZWFtKSB0aHJvdyAo KTsKZXh0ZXJuIHdpbnRfdCBnZXR3YyAoX19GSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKZXh0 ZXJuIHdpbnRfdCBnZXR3Y2hhciAodm9pZCkgdGhyb3cgKCk7CgoKCmV4dGVybiB3aW50X3QgZnB1 dHdjICh3Y2hhcl90IF9fd2MsIF9fRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwpleHRlcm4gd2lu dF90IHB1dHdjICh3Y2hhcl90IF9fd2MsIF9fRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCmV4 dGVybiB3aW50X3QgcHV0d2NoYXIgKHdjaGFyX3QgX193YykgdGhyb3cgKCk7CgoKCgpleHRlcm4g d2NoYXJfdCAqZmdldHdzICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fd3MsIGludCBfX24sCiAgICAg ICAgICAgICAgICAgICAgICAgIF9fRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7 CgoKZXh0ZXJuIGludCBmcHV0d3MgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3dzLAog ICAgICAgICAgICAgICAgICAgX19GSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0aHJvdyAoKTsK CgoKZXh0ZXJuIHdpbnRfdCB1bmdldHdjICh3aW50X3QgX193YywgX19GSUxFICpfX3N0cmVhbSkg dGhyb3cgKCk7CgoKCgoKCmV4dGVybiB3aW50X3QgZ2V0d2NfdW5sb2NrZWQgKF9fRklMRSAqX19z dHJlYW0pIHRocm93ICgpOwpleHRlcm4gd2ludF90IGdldHdjaGFyX3VubG9ja2VkICh2b2lkKSB0 aHJvdyAoKTsKCgpleHRlcm4gd2ludF90IGZnZXR3Y191bmxvY2tlZCAoX19GSUxFICpfX3N0cmVh bSkgdGhyb3cgKCk7CgoKZXh0ZXJuIHdpbnRfdCBmcHV0d2NfdW5sb2NrZWQgKHdjaGFyX3QgX193 YywgX19GSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCmV4dGVybiB3aW50X3QgcHV0d2NfdW5s b2NrZWQgKHdjaGFyX3QgX193YywgX19GSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVybiB3 aW50X3QgcHV0d2NoYXJfdW5sb2NrZWQgKHdjaGFyX3QgX193YykgdGhyb3cgKCk7CgoKCmV4dGVy biB3Y2hhcl90ICpmZ2V0d3NfdW5sb2NrZWQgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX193cywgaW50 IF9fbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19GSUxFICpfX3Jlc3RyaWN0 IF9fc3RyZWFtKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IGZwdXR3c191bmxvY2tlZCAoX19jb25z dCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fd3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBf X0ZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIHNpemVf dCB3Y3NmdGltZSAod2NoYXJfdCAqX19yZXN0cmljdCBfX3MsIHNpemVfdCBfX21heHNpemUsCiAg ICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX2Zvcm1h dCwKICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBzdHJ1Y3QgdG0gKl9fcmVzdHJpY3Qg X190cCkgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gc2l6ZV90IHdjc2Z0aW1lX2wgKHdjaGFyX3Qg Kl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19tYXhzaXplLAogICAgICAgICAgICAgICAgICAgICAg ICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX2Zvcm1hdCwKICAgICAgICAgICAgICAg ICAgICAgICAgICBfX2NvbnN0IHN0cnVjdCB0bSAqX19yZXN0cmljdCBfX3RwLAogICAgICAgICAg ICAgICAgICAgICAgICAgIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwojIDczNyAiL3Vzci9p bmNsdWRlL3djaGFyLmgiIDMKfQojIDU1ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9jd2NoYXIiIDIg MwojIDY5ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9jd2NoYXIiIDMKbmFtZXNwYWNlIHN0ZAp7CiAg dXNpbmcgOjptYnN0YXRlX3Q7Cn0KIyAxMzMgIi91c3IvaW5jbHVkZS9jKysvMy4yL2N3Y2hhciIg MwpuYW1lc3BhY2Ugc3RkCnsKICB1c2luZyA6OndpbnRfdDsKCiAgdXNpbmcgOjpidG93YzsKICB1 c2luZyA6OmZnZXR3YzsKICB1c2luZyA6OmZnZXR3czsKICB1c2luZyA6OmZwdXR3YzsKICB1c2lu ZyA6OmZwdXR3czsKICB1c2luZyA6OmZ3aWRlOwogIHVzaW5nIDo6ZndwcmludGY7CiAgdXNpbmcg Ojpmd3NjYW5mOwogIHVzaW5nIDo6Z2V0d2M7CiAgdXNpbmcgOjpnZXR3Y2hhcjsKICB1c2luZyA6 Om1icmxlbjsKICB1c2luZyA6Om1icnRvd2M7CiAgdXNpbmcgOjptYnNpbml0OwogIHVzaW5nIDo6 bWJzcnRvd2NzOwogIHVzaW5nIDo6cHV0d2M7CiAgdXNpbmcgOjpwdXR3Y2hhcjsKICB1c2luZyA6 OnN3cHJpbnRmOwogIHVzaW5nIDo6c3dzY2FuZjsKICB1c2luZyA6OnVuZ2V0d2M7CiAgdXNpbmcg Ojp2ZndwcmludGY7CiAgdXNpbmcgOjp2ZndzY2FuZjsKICB1c2luZyA6OnZzd3ByaW50ZjsKICB1 c2luZyA6OnZzd3NjYW5mOwogIHVzaW5nIDo6dndwcmludGY7CiAgdXNpbmcgOjp2d3NjYW5mOwog IHVzaW5nIDo6d2NydG9tYjsKICB1c2luZyA6Ondjc2NhdDsKICB1c2luZyA6Ondjc2NtcDsKICB1 c2luZyA6Ondjc2NvbGw7CiAgdXNpbmcgOjp3Y3NjcHk7CiAgdXNpbmcgOjp3Y3Njc3BuOwogIHVz aW5nIDo6d2NzZnRpbWU7CiAgdXNpbmcgOjp3Y3NsZW47CiAgdXNpbmcgOjp3Y3NuY2F0OwogIHVz aW5nIDo6d2NzbmNtcDsKICB1c2luZyA6Ondjc25jcHk7CiAgdXNpbmcgOjp3Y3NydG9tYnM7CiAg dXNpbmcgOjp3Y3NzcG47CiAgdXNpbmcgOjp3Y3N0b2Q7CiAgdXNpbmcgOjp3Y3N0b2Y7CiAgdXNp bmcgOjp3Y3N0b2s7CiAgdXNpbmcgOjp3Y3N0b2w7CiAgdXNpbmcgOjp3Y3N0b3VsOwogIHVzaW5n IDo6d2NzeGZybTsKICB1c2luZyA6OndjdG9iOwogIHVzaW5nIDo6d21lbWNtcDsKICB1c2luZyA6 OndtZW1jcHk7CiAgdXNpbmcgOjp3bWVtbW92ZTsKICB1c2luZyA6OndtZW1zZXQ7CiAgdXNpbmcg Ojp3cHJpbnRmOwogIHVzaW5nIDo6d3NjYW5mOwoKICB1c2luZyA6Ondjc2NocjsKCiAgaW5saW5l IHdjaGFyX3QqCiAgd2NzY2hyKHdjaGFyX3QqIF9fcCwgd2NoYXJfdCBfX2MpCiAgeyByZXR1cm4g d2NzY2hyKGNvbnN0X2Nhc3Q8Y29uc3Qgd2NoYXJfdCo+KF9fcCksIF9fYyk7IH0KCiAgdXNpbmcg Ojp3Y3NwYnJrOwoKICBpbmxpbmUgd2NoYXJfdCoKICB3Y3NwYnJrKHdjaGFyX3QqIF9fczEsIHdj aGFyX3QqIF9fczIpCiAgeyByZXR1cm4gd2NzcGJyayhjb25zdF9jYXN0PGNvbnN0IHdjaGFyX3Qq PihfX3MxKSwgX19zMik7IH0KCiAgdXNpbmcgOjp3Y3NyY2hyOwoKICBpbmxpbmUgd2NoYXJfdCoK ICB3Y3NyY2hyKHdjaGFyX3QqIF9fcCwgd2NoYXJfdCBfX2MpCiAgeyByZXR1cm4gd2NzcmNocihj b25zdF9jYXN0PGNvbnN0IHdjaGFyX3QqPihfX3ApLCBfX2MpOyB9CgogIHVzaW5nIDo6d2Nzc3Ry OwoKICBpbmxpbmUgd2NoYXJfdCoKICB3Y3NzdHIod2NoYXJfdCogX19zMSwgd2NoYXJfdCogX19z MikKICB7IHJldHVybiB3Y3NzdHIoY29uc3RfY2FzdDxjb25zdCB3Y2hhcl90Kj4oX19zMSksIF9f czIpOyB9CgogIHVzaW5nIDo6d21lbWNocjsKCiAgaW5saW5lIHdjaGFyX3QqCiAgd21lbWNocih3 Y2hhcl90KiBfX3AsIHdjaGFyX3QgX19jLCBzaXplX3QgX19uKQogIHsgcmV0dXJuIHdtZW1jaHIo Y29uc3RfY2FzdDxjb25zdCB3Y2hhcl90Kj4oX19wKSwgX19jLCBfX24pOyB9Cn0KCgoKCgoKCm5h bWVzcGFjZSBfX2dudV9jeHgKewogIHVzaW5nIDo6d2NzdG9sZDsKICB1c2luZyA6Ondjc3RvbGw7 CiAgdXNpbmcgOjp3Y3N0b3VsbDsKfQoKbmFtZXNwYWNlIHN0ZAp7CiAgdXNpbmcgX19nbnVfY3h4 Ojp3Y3N0b2xkOwogIHVzaW5nIF9fZ251X2N4eDo6d2NzdG9sbDsKICB1c2luZyBfX2dudV9jeHg6 Ondjc3RvdWxsOwp9CiMgNDYgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvZnBvcy5oIiAyIDMK Cm5hbWVzcGFjZSBzdGQKewoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9TdGF0ZVQ+CiAgICBjbGFz cyBmcG9zCiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9TdGF0ZVQgX19zdGF0ZV90 eXBlOwoKICAgIHByaXZhdGU6CiAgICAgIHN0cmVhbW9mZiBfTV9vZmY7CiAgICAgIF9fc3RhdGVf dHlwZSBfTV9zdDsKCiAgICBwdWJsaWM6CiAgICAgIF9fc3RhdGVfdHlwZQogICAgICBzdGF0ZSgp IGNvbnN0IHsgcmV0dXJuIF9NX3N0OyB9CgogICAgICB2b2lkCiAgICAgIHN0YXRlKF9fc3RhdGVf dHlwZSBfX3N0KSB7IF9NX3N0ID0gX19zdDsgfQoKCgogICAgICBmcG9zKCk6IF9NX29mZihzdHJl YW1vZmYoKSksIF9NX3N0KF9fc3RhdGVfdHlwZSgpKSB7IH0KCiAgICAgIGZwb3Moc3RyZWFtb2Zm IF9fb2ZmLCBfX3N0YXRlX3R5cGUgX19zdCA9IF9fc3RhdGVfdHlwZSgpKQogICAgICA6IF9NX29m ZihfX29mZiksIF9NX3N0KF9fc3QpIHsgfQoKICAgICAgb3BlcmF0b3Igc3RyZWFtb2ZmKCkgY29u c3QgeyByZXR1cm4gX01fb2ZmOyB9CgogICAgICBmcG9zJgogICAgICBvcGVyYXRvcis9KHN0cmVh bW9mZiBfX29mZikgeyBfTV9vZmYgKz0gX19vZmY7IHJldHVybiAqdGhpczsgfQoKICAgICAgZnBv cyYKICAgICAgb3BlcmF0b3ItPShzdHJlYW1vZmYgX19vZmYpIHsgX01fb2ZmIC09IF9fb2ZmOyBy ZXR1cm4gKnRoaXM7IH0KCiAgICAgIGZwb3MKICAgICAgb3BlcmF0b3IrKHN0cmVhbW9mZiBfX29m ZikKICAgICAgewogICAgICAgIGZwb3MgX190KCp0aGlzKTsKICAgICAgICBfX3QgKz0gX19vZmY7 CiAgICAgICAgcmV0dXJuIF9fdDsKICAgICAgfQoKICAgICAgZnBvcwogICAgICBvcGVyYXRvci0o c3RyZWFtb2ZmIF9fb2ZmKQogICAgICB7CiAgICAgICAgZnBvcyBfX3QoKnRoaXMpOwogICAgICAg IF9fdCAtPSBfX29mZjsKICAgICAgICByZXR1cm4gX190OwogICAgICB9CgogICAgICBib29sCiAg ICAgIG9wZXJhdG9yPT0oY29uc3QgZnBvcyYgX19wb3MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9N X29mZiA9PSBfX3Bvcy5fTV9vZmY7IH0KCiAgICAgIGJvb2wKICAgICAgb3BlcmF0b3IhPShjb25z dCBmcG9zJiBfX3BvcykgY29uc3QKICAgICAgeyByZXR1cm4gX01fb2ZmICE9IF9fcG9zLl9NX29m ZjsgfQoKICAgICAgc3RyZWFtb2ZmCiAgICAgIF9NX3Bvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4g X01fb2ZmOyB9CgogICAgICB2b2lkCiAgICAgIF9NX3Bvc2l0aW9uKHN0cmVhbW9mZiBfX29mZikg eyBfTV9vZmYgPSBfX29mZjsgfQogICAgfTsKCgogIHR5cGVkZWYgZnBvczxtYnN0YXRlX3Q+IHN0 cmVhbXBvczsKCiAgdHlwZWRlZiBmcG9zPG1ic3RhdGVfdD4gd3N0cmVhbXBvczsKCn0KIyA0NyAi L3Vzci9pbmNsdWRlL2MrKy8zLjIvaW9zZndkIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMu Mi9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDEgMwojIDM0ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRz L2Z1bmN0ZXhjZXB0LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9leGNlcHRpb25fZGVm aW5lcy5oIiAxIDMKIyAzNSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9mdW5jdGV4Y2VwdC5o IiAyIDMKCm5hbWVzcGFjZSBzdGQKewoKICB2b2lkCiAgX190aHJvd19iYWRfZXhjZXB0aW9uKHZv aWQpOwoKCiAgdm9pZAogIF9fdGhyb3dfYmFkX2FsbG9jKHZvaWQpOwoKCiAgdm9pZAogIF9fdGhy b3dfYmFkX2Nhc3Qodm9pZCk7CgogIHZvaWQKICBfX3Rocm93X2JhZF90eXBlaWQodm9pZCk7CgoK ICB2b2lkCiAgX190aHJvd19sb2dpY19lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAg X190aHJvd19kb21haW5fZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3df aW52YWxpZF9hcmd1bWVudChjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19sZW5n dGhfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfb3V0X29mX3Jhbmdl KGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X3J1bnRpbWVfZXJyb3IoY29uc3Qg Y2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfcmFuZ2VfZXJyb3IoY29uc3QgY2hhciogX19z KTsKCiAgdm9pZAogIF9fdGhyb3dfb3ZlcmZsb3dfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAg dm9pZAogIF9fdGhyb3dfdW5kZXJmbG93X2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgoKICB2b2lk CiAgX190aHJvd19pb3NfZmFpbHVyZShjb25zdCBjaGFyKiBfX3MpOwp9CiMgNDggIi91c3IvaW5j bHVkZS9jKysvMy4yL2lvc2Z3ZCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KICAg IGNsYXNzIGJhc2ljX2lvczsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf VHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19zdHJlYW1idWY7 CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJh aXRzPF9DaGFyVD4gPgogICAgY2xhc3MgYmFzaWNfaXN0cmVhbTsKCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+CiAgICBj bGFzcyBiYXNpY19vc3RyZWFtOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l IF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX2lvc3RyZWFt OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3Ry YWl0czxfQ2hhclQ+LAogICAgICAgICAgICB0eXBlbmFtZSBfQWxsb2MgPSBhbGxvY2F0b3I8X0No YXJUPiA+CiAgICBjbGFzcyBiYXNpY19zdHJpbmdidWY7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D aGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4sCiAgICAgICAgICAg dHlwZW5hbWUgX0FsbG9jID0gYWxsb2NhdG9yPF9DaGFyVD4gPgogICAgY2xhc3MgYmFzaWNfaXN0 cmluZ3N0cmVhbTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz ID0gY2hhcl90cmFpdHM8X0NoYXJUPiwKICAgICAgICAgICB0eXBlbmFtZSBfQWxsb2MgPSBhbGxv Y2F0b3I8X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19vc3RyaW5nc3RyZWFtOwoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ LAogICAgICAgICAgIHR5cGVuYW1lIF9BbGxvYyA9IGFsbG9jYXRvcjxfQ2hhclQ+ID4KICAgIGNs YXNzIGJhc2ljX3N0cmluZ3N0cmVhbTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl bmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19maWxl YnVmOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFy X3RyYWl0czxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX2lmc3RyZWFtOwoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4K ICAgIGNsYXNzIGJhc2ljX29mc3RyZWFtOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5 cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX2Zz dHJlYW07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNo YXJfdHJhaXRzPF9DaGFyVD4gPgogICAgY2xhc3MgaXN0cmVhbWJ1Zl9pdGVyYXRvcjsKCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0No YXJUPiA+CiAgICBjbGFzcyBvc3RyZWFtYnVmX2l0ZXJhdG9yOwoKCgogIGNsYXNzIGlvc19iYXNl OwoKCiAgdHlwZWRlZiBiYXNpY19pb3M8Y2hhcj4gaW9zOwogIHR5cGVkZWYgYmFzaWNfc3RyZWFt YnVmPGNoYXI+IHN0cmVhbWJ1ZjsKICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08Y2hhcj4gaXN0cmVh bTsKICB0eXBlZGVmIGJhc2ljX29zdHJlYW08Y2hhcj4gb3N0cmVhbTsKICB0eXBlZGVmIGJhc2lj X2lvc3RyZWFtPGNoYXI+IGlvc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfc3RyaW5nYnVmPGNoYXI+ IHN0cmluZ2J1ZjsKICB0eXBlZGVmIGJhc2ljX2lzdHJpbmdzdHJlYW08Y2hhcj4gaXN0cmluZ3N0 cmVhbTsKICB0eXBlZGVmIGJhc2ljX29zdHJpbmdzdHJlYW08Y2hhcj4gb3N0cmluZ3N0cmVhbTsK ICB0eXBlZGVmIGJhc2ljX3N0cmluZ3N0cmVhbTxjaGFyPiBzdHJpbmdzdHJlYW07CiAgdHlwZWRl ZiBiYXNpY19maWxlYnVmPGNoYXI+IGZpbGVidWY7CiAgdHlwZWRlZiBiYXNpY19pZnN0cmVhbTxj aGFyPiBpZnN0cmVhbTsKICB0eXBlZGVmIGJhc2ljX29mc3RyZWFtPGNoYXI+IG9mc3RyZWFtOwog IHR5cGVkZWYgYmFzaWNfZnN0cmVhbTxjaGFyPiBmc3RyZWFtOwoKCiAgdHlwZWRlZiBiYXNpY19p b3M8d2NoYXJfdD4gd2lvczsKICB0eXBlZGVmIGJhc2ljX3N0cmVhbWJ1Zjx3Y2hhcl90PiB3c3Ry ZWFtYnVmOwogIHR5cGVkZWYgYmFzaWNfaXN0cmVhbTx3Y2hhcl90PiB3aXN0cmVhbTsKICB0eXBl ZGVmIGJhc2ljX29zdHJlYW08d2NoYXJfdD4gd29zdHJlYW07CiAgdHlwZWRlZiBiYXNpY19pb3N0 cmVhbTx3Y2hhcl90PiB3aW9zdHJlYW07CiAgdHlwZWRlZiBiYXNpY19zdHJpbmdidWY8d2NoYXJf dD4gd3N0cmluZ2J1ZjsKICB0eXBlZGVmIGJhc2ljX2lzdHJpbmdzdHJlYW08d2NoYXJfdD4gd2lz dHJpbmdzdHJlYW07CiAgdHlwZWRlZiBiYXNpY19vc3RyaW5nc3RyZWFtPHdjaGFyX3Q+IHdvc3Ry aW5nc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfc3RyaW5nc3RyZWFtPHdjaGFyX3Q+IHdzdHJpbmdz dHJlYW07CiAgdHlwZWRlZiBiYXNpY19maWxlYnVmPHdjaGFyX3Q+IHdmaWxlYnVmOwogIHR5cGVk ZWYgYmFzaWNfaWZzdHJlYW08d2NoYXJfdD4gd2lmc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfb2Zz dHJlYW08d2NoYXJfdD4gd29mc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfZnN0cmVhbTx3Y2hhcl90 PiB3ZnN0cmVhbTsKCn0KIyA0NSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvaW9zIiAyIDMKIyAxICIv dXNyL2luY2x1ZGUvYysrLzMuMi9leGNlcHRpb24iIDEgMwojIDQwICIvdXNyL2luY2x1ZGUvYysr LzMuMi9leGNlcHRpb24iIDMKZXh0ZXJuICJDKysiIHsKCm5hbWVzcGFjZSBzdGQKewoKCgoKCgog IGNsYXNzIGV4Y2VwdGlvbgogIHsKICBwdWJsaWM6CiAgICBleGNlcHRpb24oKSB0aHJvdygpIHsg fQogICAgdmlydHVhbCB+ZXhjZXB0aW9uKCkgdGhyb3coKTsKCgogICAgdmlydHVhbCBjb25zdCBj aGFyKiB3aGF0KCkgY29uc3QgdGhyb3coKTsKICB9OwoKCgogIGNsYXNzIGJhZF9leGNlcHRpb24g OiBwdWJsaWMgZXhjZXB0aW9uCiAgewogIHB1YmxpYzoKICAgIGJhZF9leGNlcHRpb24oKSB0aHJv dygpIHsgfQoKCiAgICB2aXJ0dWFsIH5iYWRfZXhjZXB0aW9uKCkgdGhyb3coKTsKICB9OwoKCiAg dHlwZWRlZiB2b2lkICgqdGVybWluYXRlX2hhbmRsZXIpICgpOwoKICB0eXBlZGVmIHZvaWQgKCp1 bmV4cGVjdGVkX2hhbmRsZXIpICgpOwoKCiAgdGVybWluYXRlX2hhbmRsZXIgc2V0X3Rlcm1pbmF0 ZSh0ZXJtaW5hdGVfaGFuZGxlcikgdGhyb3coKTsKCgogIHZvaWQgdGVybWluYXRlKCkgX19hdHRy aWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKCiAgdW5leHBlY3RlZF9oYW5kbGVyIHNldF91bmV4 cGVjdGVkKHVuZXhwZWN0ZWRfaGFuZGxlcikgdGhyb3coKTsKCgogIHZvaWQgdW5leHBlY3RlZCgp IF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKIyA5OCAiL3Vzci9pbmNsdWRlL2MrKy8z LjIvZXhjZXB0aW9uIiAzCiAgYm9vbCB1bmNhdWdodF9leGNlcHRpb24oKSB0aHJvdygpOwp9Cgpu YW1lc3BhY2UgX19nbnVfY3h4CnsKIyAxMTEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2V4Y2VwdGlv biIgMwogIHZvaWQgX192ZXJib3NlX3Rlcm1pbmF0ZV9oYW5kbGVyICgpOwp9Cgp9CiMgNDYgIi91 c3IvaW5jbHVkZS9jKysvMy4yL2lvcyIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0 cy9jaGFyX3RyYWl0cy5oIiAxIDMKIyA0NCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9jaGFy X3RyYWl0cy5oIiAzCgojIDEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2NzdHJpbmciIDEgMwojIDQ4 ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9jc3RyaW5nIiAzCgoKCiMgMSAiL3Vzci9pbmNsdWRlL3N0 cmluZy5oIiAxIDMKIyAyOCAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAzCmV4dGVybiAiQyIgewoK CgoKIyAxICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMy4yLjMvaW5jbHVkZS9zdGRkZWYu aCIgMSAzCiMgMzQgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMiAzCgoKCgpleHRlcm4gdm9pZCAq bWVtY3B5ICh2b2lkICpfX3Jlc3RyaWN0IF9fZGVzdCwKICAgICAgICAgICAgICAgICAgICAgX19j b25zdCB2b2lkICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgpleHRl cm4gdm9pZCAqbWVtbW92ZSAodm9pZCAqX19kZXN0LCBfX2NvbnN0IHZvaWQgKl9fc3JjLCBzaXpl X3QgX19uKQogICAgIHRocm93ICgpOwoKCgoKCgpleHRlcm4gdm9pZCAqbWVtY2NweSAodm9pZCAq X19yZXN0cmljdCBfX2Rlc3QsIF9fY29uc3Qgdm9pZCAqX19yZXN0cmljdCBfX3NyYywKICAgICAg ICAgICAgICAgICAgICAgIGludCBfX2MsIHNpemVfdCBfX24pCiAgICAgdGhyb3cgKCk7CgoKCgoK ZXh0ZXJuIHZvaWQgKm1lbXNldCAodm9pZCAqX19zLCBpbnQgX19jLCBzaXplX3QgX19uKSB0aHJv dyAoKTsKCgpleHRlcm4gaW50IG1lbWNtcCAoX19jb25zdCB2b2lkICpfX3MxLCBfX2NvbnN0IHZv aWQgKl9fczIsIHNpemVfdCBfX24pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVy ZV9fKSk7CgoKZXh0ZXJuIHZvaWQgKm1lbWNociAoX19jb25zdCB2b2lkICpfX3MsIGludCBfX2Ms IHNpemVfdCBfX24pCiAgICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoK CgoKCmV4dGVybiB2b2lkICpyYXdtZW1jaHIgKF9fY29uc3Qgdm9pZCAqX19zLCBpbnQgX19jKSB0 aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgpleHRlcm4gdm9pZCAqbWVtcmNo ciAoX19jb25zdCB2b2lkICpfX3MsIGludCBfX2MsIHNpemVfdCBfX24pCiAgICAgIHRocm93ICgp IF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoKCmV4dGVybiBjaGFyICpzdHJjcHkgKGNo YXIgKl9fcmVzdHJpY3QgX19kZXN0LCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMpCiAg ICAgdGhyb3cgKCk7CgpleHRlcm4gY2hhciAqc3RybmNweSAoY2hhciAqX19yZXN0cmljdCBfX2Rl c3QsCiAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMs IHNpemVfdCBfX24pIHRocm93ICgpOwoKCmV4dGVybiBjaGFyICpzdHJjYXQgKGNoYXIgKl9fcmVz dHJpY3QgX19kZXN0LCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMpCiAgICAgdGhyb3cg KCk7CgpleHRlcm4gY2hhciAqc3RybmNhdCAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsIF9fY29u c3QgY2hhciAqX19yZXN0cmljdCBfX3NyYywKICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBf X24pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgc3RyY21wIChfX2NvbnN0IGNoYXIgKl9fczEsIF9f Y29uc3QgY2hhciAqX19zMikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18p KTsKCmV4dGVybiBpbnQgc3RybmNtcCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIg Kl9fczIsIHNpemVfdCBfX24pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9f KSk7CgoKZXh0ZXJuIGludCBzdHJjb2xsIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hh ciAqX19zMikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVy biBzaXplX3Qgc3RyeGZybSAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsCiAgICAgICAgICAgICAg ICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSB0aHJv dyAoKTsKCiMgMTE3ICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDMKZXh0ZXJuIGludCBzdHJjb2xs X2wgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyLCBfX2xvY2FsZV90IF9f bCkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBzaXpl X3Qgc3RyeGZybV9sIChjaGFyICpfX2Rlc3QsIF9fY29uc3QgY2hhciAqX19zcmMsIHNpemVfdCBf X24sCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2xvY2FsZV90IF9fbCkgdGhyb3cgKCk7CgoK CgpleHRlcm4gY2hhciAqc3RyZHVwIChfX2NvbnN0IGNoYXIgKl9fcykgdGhyb3cgKCkgX19hdHRy aWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKCgoKCgoKZXh0ZXJuIGNoYXIgKnN0cm5kdXAgKF9fY29u c3QgY2hhciAqX19zdHJpbmcsIHNpemVfdCBfX24pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVf XyAoKF9fbWFsbG9jX18pKTsKIyAxNjAgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMwoKCmV4dGVy biBjaGFyICpzdHJjaHIgKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19jKSB0aHJvdyAoKSBfX2F0 dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBjaGFyICpzdHJyY2hyIChfX2NvbnN0IGNo YXIgKl9fcywgaW50IF9fYykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoK CgoKZXh0ZXJuIGNoYXIgKnN0cmNocm51bCAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX2MpIHRo cm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoKCmV4dGVybiBzaXplX3Qgc3Ry Y3NwbiAoX19jb25zdCBjaGFyICpfX3MsIF9fY29uc3QgY2hhciAqX19yZWplY3QpCiAgICAgdGhy b3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIHNpemVfdCBzdHJzcG4g KF9fY29uc3QgY2hhciAqX19zLCBfX2NvbnN0IGNoYXIgKl9fYWNjZXB0KQogICAgIHRocm93ICgp IF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIGNoYXIgKnN0cnBicmsgKF9fY29u c3QgY2hhciAqX19zLCBfX2NvbnN0IGNoYXIgKl9fYWNjZXB0KQogICAgIHRocm93ICgpIF9fYXR0 cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIGNoYXIgKnN0cnN0ciAoX19jb25zdCBjaGFy ICpfX2hheXN0YWNrLCBfX2NvbnN0IGNoYXIgKl9fbmVlZGxlKQogICAgIHRocm93ICgpIF9fYXR0 cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgpleHRlcm4gY2hhciAqc3RydG9rIChjaGFyICpfX3Jl c3RyaWN0IF9fcywgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZGVsaW0pCiAgICAgdGhyb3cg KCk7CgoKCgpleHRlcm4gY2hhciAqX19zdHJ0b2tfciAoY2hhciAqX19yZXN0cmljdCBfX3MsCiAg ICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19kZWxpbSwK ICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fc2F2ZV9wdHIpIHRo cm93ICgpOwoKZXh0ZXJuIGNoYXIgKnN0cnRva19yIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgX19j b25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZGVsaW0sCiAgICAgICAgICAgICAgICAgICAgICAgY2hh ciAqKl9fcmVzdHJpY3QgX19zYXZlX3B0cikgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hhciAqc3Ry Y2FzZXN0ciAoX19jb25zdCBjaGFyICpfX2hheXN0YWNrLCBfX2NvbnN0IGNoYXIgKl9fbmVlZGxl KQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoKCgpleHRlcm4g dm9pZCAqbWVtbWVtIChfX2NvbnN0IHZvaWQgKl9faGF5c3RhY2ssIHNpemVfdCBfX2hheXN0YWNr bGVuLAogICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHZvaWQgKl9fbmVlZGxlLCBzaXplX3Qg X19uZWVkbGVsZW4pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoK CmV4dGVybiB2b2lkICpfX21lbXBjcHkgKHZvaWQgKl9fcmVzdHJpY3QgX19kZXN0LAogICAgICAg ICAgICAgICAgICAgICAgICBfX2NvbnN0IHZvaWQgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBf X24pIHRocm93ICgpOwpleHRlcm4gdm9pZCAqbWVtcGNweSAodm9pZCAqX19yZXN0cmljdCBfX2Rl c3QsCiAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHZvaWQgKl9fcmVzdHJpY3QgX19zcmMs IHNpemVfdCBfX24pIHRocm93ICgpOwoKCgoKCmV4dGVybiBzaXplX3Qgc3RybGVuIChfX2NvbnN0 IGNoYXIgKl9fcykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgoKZXh0 ZXJuIHNpemVfdCBzdHJubGVuIChfX2NvbnN0IGNoYXIgKl9fc3RyaW5nLCBzaXplX3QgX19tYXhs ZW4pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgoKZXh0ZXJu IGNoYXIgKnN0cmVycm9yIChpbnQgX19lcnJudW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGNoYXIg KnN0cmVycm9yX3IgKGludCBfX2Vycm51bSwgY2hhciAqX19idWYsIHNpemVfdCBfX2J1Zmxlbikg dGhyb3cgKCk7CgoKCgpleHRlcm4gdm9pZCBfX2J6ZXJvICh2b2lkICpfX3MsIHNpemVfdCBfX24p IHRocm93ICgpOwoKCgpleHRlcm4gdm9pZCBiY29weSAoX19jb25zdCB2b2lkICpfX3NyYywgdm9p ZCAqX19kZXN0LCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgpleHRlcm4gdm9pZCBiemVybyAodm9p ZCAqX19zLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IGJjbXAgKF9fY29uc3Qg dm9pZCAqX19zMSwgX19jb25zdCB2b2lkICpfX3MyLCBzaXplX3QgX19uKQogICAgIHRocm93ICgp IF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVybiBjaGFyICppbmRleCAoX19jb25z dCBjaGFyICpfX3MsIGludCBfX2MpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykp OwoKCmV4dGVybiBjaGFyICpyaW5kZXggKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19jKSB0aHJv dyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKZXh0ZXJuIGludCBmZnMgKGludCBf X2kpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCmV4dGVybiBpbnQg ZmZzbCAobG9uZyBpbnQgX19sKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7 CgpfX2V4dGVuc2lvbl9fIGV4dGVybiBpbnQgZmZzbGwgKGxvbmcgbG9uZyBpbnQgX19sbCkKICAg ICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgpleHRlcm4gaW50IHN0 cmNhc2VjbXAgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyKQogICAgIHRo cm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVybiBpbnQgc3RybmNhc2Vj bXAgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyLCBzaXplX3QgX19uKQog ICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoKCmV4dGVybiBpbnQg c3RyY2FzZWNtcF9sIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMiwKICAg ICAgICAgICAgICAgICAgICAgICAgIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpIF9fYXR0cmli dXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIGludCBzdHJuY2FzZWNtcF9sIChfX2NvbnN0IGNo YXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMiwKICAgICAgICAgICAgICAgICAgICAgICAgICBz aXplX3QgX19uLCBfX2xvY2FsZV90IF9fbG9jKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18g KChfX3B1cmVfXykpOwoKCgoKCmV4dGVybiBjaGFyICpzdHJzZXAgKGNoYXIgKipfX3Jlc3RyaWN0 IF9fc3RyaW5ncCwKICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0 IF9fZGVsaW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBzdHJ2ZXJzY21wIChfX2NvbnN0IGNo YXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9f ICgoX19wdXJlX18pKTsKCgpleHRlcm4gY2hhciAqc3Ryc2lnbmFsIChpbnQgX19zaWcpIHRocm93 ICgpOwoKCmV4dGVybiBjaGFyICpfX3N0cGNweSAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsIF9f Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYykKICAgICB0aHJvdyAoKTsKZXh0ZXJuIGNoYXIg KnN0cGNweSAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsIF9fY29uc3QgY2hhciAqX19yZXN0cmlj dCBfX3NyYykKICAgICB0aHJvdyAoKTsKCgoKZXh0ZXJuIGNoYXIgKl9fc3RwbmNweSAoY2hhciAq X19yZXN0cmljdCBfX2Rlc3QsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAq X19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CmV4dGVybiBjaGFyICpzdHBu Y3B5IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwKICAgICAgICAgICAgICAgICAgICAgIF9fY29u c3QgY2hhciAqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKZXh0ZXJu IGNoYXIgKnN0cmZyeSAoY2hhciAqX19zdHJpbmcpIHRocm93ICgpOwoKCmV4dGVybiB2b2lkICpt ZW1mcm9iICh2b2lkICpfX3MsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCgoKCgpleHRlcm4gY2hh ciAqYmFzZW5hbWUgKF9fY29uc3QgY2hhciAqX19maWxlbmFtZSkgdGhyb3cgKCk7CiMgMzc5ICIv dXNyL2luY2x1ZGUvc3RyaW5nLmgiIDMKfQojIDUyICIvdXNyL2luY2x1ZGUvYysrLzMuMi9jc3Ry aW5nIiAyIDMKIyA3NyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvY3N0cmluZyIgMwpuYW1lc3BhY2Ug c3RkCnsKICB1c2luZyA6Om1lbWNweTsKICB1c2luZyA6Om1lbW1vdmU7CiAgdXNpbmcgOjpzdHJj cHk7CiAgdXNpbmcgOjpzdHJuY3B5OwogIHVzaW5nIDo6c3RyY2F0OwogIHVzaW5nIDo6c3RybmNh dDsKICB1c2luZyA6Om1lbWNtcDsKICB1c2luZyA6OnN0cmNtcDsKICB1c2luZyA6OnN0cmNvbGw7 CiAgdXNpbmcgOjpzdHJuY21wOwogIHVzaW5nIDo6c3RyeGZybTsKICB1c2luZyA6OnN0cmNzcG47 CiAgdXNpbmcgOjpzdHJzcG47CiAgdXNpbmcgOjpzdHJ0b2s7CiAgdXNpbmcgOjptZW1zZXQ7CiAg dXNpbmcgOjpzdHJlcnJvcjsKICB1c2luZyA6OnN0cmxlbjsKCiAgdXNpbmcgOjptZW1jaHI7Cgog IGlubGluZSB2b2lkKgogIG1lbWNocih2b2lkKiBfX3AsIGludCBfX2MsIHNpemVfdCBfX24pCiAg eyByZXR1cm4gbWVtY2hyKGNvbnN0X2Nhc3Q8Y29uc3Qgdm9pZCo+KF9fcCksIF9fYywgX19uKTsg fQoKICB1c2luZyA6OnN0cmNocjsKCiAgaW5saW5lIGNoYXIqCiAgc3RyY2hyKGNoYXIqIF9fczEs IGludCBfX24pCiAgeyByZXR1cm4gX19idWlsdGluX3N0cmNocihjb25zdF9jYXN0PGNvbnN0IGNo YXIqPihfX3MxKSwgX19uKTsgfQoKICB1c2luZyA6OnN0cnBicms7CgogIGlubGluZSBjaGFyKgog IHN0cnBicmsoY2hhciogX19zMSwgY29uc3QgY2hhciogX19zMikKICB7IHJldHVybiBfX2J1aWx0 aW5fc3RycGJyayhjb25zdF9jYXN0PGNvbnN0IGNoYXIqPihfX3MxKSwgX19zMik7IH0KCiAgdXNp bmcgOjpzdHJyY2hyOwoKICBpbmxpbmUgY2hhcioKICBzdHJyY2hyKGNoYXIqIF9fczEsIGludCBf X24pCiAgeyByZXR1cm4gX19idWlsdGluX3N0cnJjaHIoY29uc3RfY2FzdDxjb25zdCBjaGFyKj4o X19zMSksIF9fbik7IH0KCiAgdXNpbmcgOjpzdHJzdHI7CgogIGlubGluZSBjaGFyKgogIHN0cnN0 cihjaGFyKiBfX3MxLCBjb25zdCBjaGFyKiBfX3MyKQogIHsgcmV0dXJuIF9fYnVpbHRpbl9zdHJz dHIoY29uc3RfY2FzdDxjb25zdCBjaGFyKj4oX19zMSksIF9fczIpOyB9Cn0KIyA0NiAiL3Vzci9p bmNsdWRlL2MrKy8zLjIvYml0cy9jaGFyX3RyYWl0cy5oIiAyIDMKCgpuYW1lc3BhY2Ugc3RkCnsK CgoKICB0ZW1wbGF0ZTxjbGFzcyBfQ2hhclQ+CiAgICBzdHJ1Y3QgY2hhcl90cmFpdHMKICAgIHsK ICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwoKICAgICAgdHlwZWRlZiB1bnNpZ25lZCBs b25nIGludF90eXBlOwogICAgICB0eXBlZGVmIHN0cmVhbXBvcyBwb3NfdHlwZTsKICAgICAgdHlw ZWRlZiBzdHJlYW1vZmYgb2ZmX3R5cGU7CiAgICAgIHR5cGVkZWYgbWJzdGF0ZV90IHN0YXRlX3R5 cGU7CgogICAgICBzdGF0aWMgdm9pZAogICAgICBhc3NpZ24oY2hhcl90eXBlJiBfX2MxLCBjb25z dCBjaGFyX3R5cGUmIF9fYzIpOwoKICAgICAgc3RhdGljIGJvb2wKICAgICAgZXEoY29uc3QgY2hh cl90eXBlJiBfX2MxLCBjb25zdCBjaGFyX3R5cGUmIF9fYzIpOwoKICAgICAgc3RhdGljIGJvb2wK ICAgICAgbHQoY29uc3QgY2hhcl90eXBlJiBfX2MxLCBjb25zdCBjaGFyX3R5cGUmIF9fYzIpOwoK ICAgICAgc3RhdGljIGludAogICAgICBjb21wYXJlKGNvbnN0IGNoYXJfdHlwZSogX19zMSwgY29u c3QgY2hhcl90eXBlKiBfX3MyLCBzaXplX3QgX19uKTsKCiAgICAgIHN0YXRpYyBzaXplX3QKICAg ICAgbGVuZ3RoKGNvbnN0IGNoYXJfdHlwZSogX19zKTsKCiAgICAgIHN0YXRpYyBjb25zdCBjaGFy X3R5cGUqCiAgICAgIGZpbmQoY29uc3QgY2hhcl90eXBlKiBfX3MsIHNpemVfdCBfX24sIGNvbnN0 IGNoYXJfdHlwZSYgX19hKTsKCiAgICAgIHN0YXRpYyBjaGFyX3R5cGUqCiAgICAgIG1vdmUoY2hh cl90eXBlKiBfX3MxLCBjb25zdCBjaGFyX3R5cGUqIF9fczIsIHNpemVfdCBfX24pOwoKICAgICAg c3RhdGljIGNoYXJfdHlwZSoKICAgICAgY29weShjaGFyX3R5cGUqIF9fczEsIGNvbnN0IGNoYXJf dHlwZSogX19zMiwgc2l6ZV90IF9fbik7CgogICAgICBzdGF0aWMgY2hhcl90eXBlKgogICAgICBh c3NpZ24oY2hhcl90eXBlKiBfX3MsIHNpemVfdCBfX24sIGNoYXJfdHlwZSBfX2EpOwoKICAgICAg c3RhdGljIGNoYXJfdHlwZQogICAgICB0b19jaGFyX3R5cGUoY29uc3QgaW50X3R5cGUmIF9fYyk7 CgogICAgICBzdGF0aWMgaW50X3R5cGUKICAgICAgdG9faW50X3R5cGUoY29uc3QgY2hhcl90eXBl JiBfX2MpOwoKICAgICAgc3RhdGljIGJvb2wKICAgICAgZXFfaW50X3R5cGUoY29uc3QgaW50X3R5 cGUmIF9fYzEsIGNvbnN0IGludF90eXBlJiBfX2MyKTsKCiAgICAgIHN0YXRpYyBpbnRfdHlwZQog ICAgICBlb2YoKTsKCiAgICAgIHN0YXRpYyBpbnRfdHlwZQogICAgICBub3RfZW9mKGNvbnN0IGlu dF90eXBlJiBfX2MpOwogICAgfTsKCgoKICB0ZW1wbGF0ZTw+CiAgICBzdHJ1Y3QgY2hhcl90cmFp dHM8Y2hhcj4KICAgIHsKICAgICAgdHlwZWRlZiBjaGFyIGNoYXJfdHlwZTsKICAgICAgdHlwZWRl ZiBpbnQgaW50X3R5cGU7CiAgICAgIHR5cGVkZWYgc3RyZWFtcG9zIHBvc190eXBlOwogICAgICB0 eXBlZGVmIHN0cmVhbW9mZiBvZmZfdHlwZTsKICAgICAgdHlwZWRlZiBtYnN0YXRlX3Qgc3RhdGVf dHlwZTsKCiAgICAgIHN0YXRpYyB2b2lkCiAgICAgIGFzc2lnbihjaGFyX3R5cGUmIF9fYzEsIGNv bnN0IGNoYXJfdHlwZSYgX19jMikKICAgICAgeyBfX2MxID0gX19jMjsgfQoKICAgICAgc3RhdGlj IGJvb2wKICAgICAgZXEoY29uc3QgY2hhcl90eXBlJiBfX2MxLCBjb25zdCBjaGFyX3R5cGUmIF9f YzIpCiAgICAgIHsgcmV0dXJuIF9fYzEgPT0gX19jMjsgfQoKICAgICAgc3RhdGljIGJvb2wKICAg ICAgbHQoY29uc3QgY2hhcl90eXBlJiBfX2MxLCBjb25zdCBjaGFyX3R5cGUmIF9fYzIpCiAgICAg IHsgcmV0dXJuIF9fYzEgPCBfX2MyOyB9CgogICAgICBzdGF0aWMgaW50CiAgICAgIGNvbXBhcmUo Y29uc3QgY2hhcl90eXBlKiBfX3MxLCBjb25zdCBjaGFyX3R5cGUqIF9fczIsIHNpemVfdCBfX24p CiAgICAgIHsgcmV0dXJuIG1lbWNtcChfX3MxLCBfX3MyLCBfX24pOyB9CgogICAgICBzdGF0aWMg c2l6ZV90CiAgICAgIGxlbmd0aChjb25zdCBjaGFyX3R5cGUqIF9fcykKICAgICAgeyByZXR1cm4g c3RybGVuKF9fcyk7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGZpbmQo Y29uc3QgY2hhcl90eXBlKiBfX3MsIHNpemVfdCBfX24sIGNvbnN0IGNoYXJfdHlwZSYgX19hKQog ICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBjaGFyX3R5cGUqPihtZW1jaHIoX19zLCBf X2EsIF9fbikpOyB9CgogICAgICBzdGF0aWMgY2hhcl90eXBlKgogICAgICBtb3ZlKGNoYXJfdHlw ZSogX19zMSwgY29uc3QgY2hhcl90eXBlKiBfX3MyLCBzaXplX3QgX19uKQogICAgICB7IHJldHVy biBzdGF0aWNfY2FzdDxjaGFyX3R5cGUqPihtZW1tb3ZlKF9fczEsIF9fczIsIF9fbikpOyB9Cgog ICAgICBzdGF0aWMgY2hhcl90eXBlKgogICAgICBjb3B5KGNoYXJfdHlwZSogX19zMSwgY29uc3Qg Y2hhcl90eXBlKiBfX3MyLCBzaXplX3QgX19uKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxj aGFyX3R5cGUqPihtZW1jcHkoX19zMSwgX19zMiwgX19uKSk7IH0KCiAgICAgIHN0YXRpYyBjaGFy X3R5cGUqCiAgICAgIGFzc2lnbihjaGFyX3R5cGUqIF9fcywgc2l6ZV90IF9fbiwgY2hhcl90eXBl IF9fYSkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Y2hhcl90eXBlKj4obWVtc2V0KF9fcywg X19hLCBfX24pKTsgfQoKICAgICAgc3RhdGljIGNoYXJfdHlwZQogICAgICB0b19jaGFyX3R5cGUo Y29uc3QgaW50X3R5cGUmIF9fYykKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Y2hhcl90eXBl PihfX2MpOyB9CgoKCiAgICAgIHN0YXRpYyBpbnRfdHlwZQogICAgICB0b19pbnRfdHlwZShjb25z dCBjaGFyX3R5cGUmIF9fYykKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8aW50X3R5cGU+KHN0 YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KF9fYykpOyB9CgogICAgICBzdGF0aWMgYm9vbAogICAg ICBlcV9pbnRfdHlwZShjb25zdCBpbnRfdHlwZSYgX19jMSwgY29uc3QgaW50X3R5cGUmIF9fYzIp CiAgICAgIHsgcmV0dXJuIF9fYzEgPT0gX19jMjsgfQoKICAgICAgc3RhdGljIGludF90eXBlCiAg ICAgIGVvZigpIHsgcmV0dXJuIHN0YXRpY19jYXN0PGludF90eXBlPigoLTEpKTsgfQoKICAgICAg c3RhdGljIGludF90eXBlCiAgICAgIG5vdF9lb2YoY29uc3QgaW50X3R5cGUmIF9fYykKICAgICAg eyByZXR1cm4gKF9fYyA9PSBlb2YoKSkgPyAwIDogX19jOyB9CiAgfTsKCgoKICB0ZW1wbGF0ZTw+ CiAgICBzdHJ1Y3QgY2hhcl90cmFpdHM8d2NoYXJfdD4KICAgIHsKICAgICAgdHlwZWRlZiB3Y2hh cl90IGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiB3aW50X3QgaW50X3R5cGU7CiAgICAgIHR5cGVk ZWYgc3RyZWFtb2ZmIG9mZl90eXBlOwogICAgICB0eXBlZGVmIHdzdHJlYW1wb3MgcG9zX3R5cGU7 CiAgICAgIHR5cGVkZWYgbWJzdGF0ZV90IHN0YXRlX3R5cGU7CgogICAgICBzdGF0aWMgdm9pZAog ICAgICBhc3NpZ24oY2hhcl90eXBlJiBfX2MxLCBjb25zdCBjaGFyX3R5cGUmIF9fYzIpCiAgICAg IHsgX19jMSA9IF9fYzI7IH0KCiAgICAgIHN0YXRpYyBib29sCiAgICAgIGVxKGNvbnN0IGNoYXJf dHlwZSYgX19jMSwgY29uc3QgY2hhcl90eXBlJiBfX2MyKQogICAgICB7IHJldHVybiBfX2MxID09 IF9fYzI7IH0KCiAgICAgIHN0YXRpYyBib29sCiAgICAgIGx0KGNvbnN0IGNoYXJfdHlwZSYgX19j MSwgY29uc3QgY2hhcl90eXBlJiBfX2MyKQogICAgICB7IHJldHVybiBfX2MxIDwgX19jMjsgfQoK ICAgICAgc3RhdGljIGludAogICAgICBjb21wYXJlKGNvbnN0IGNoYXJfdHlwZSogX19zMSwgY29u c3QgY2hhcl90eXBlKiBfX3MyLCBzaXplX3QgX19uKQogICAgICB7IHJldHVybiB3bWVtY21wKF9f czEsIF9fczIsIF9fbik7IH0KCiAgICAgIHN0YXRpYyBzaXplX3QKICAgICAgbGVuZ3RoKGNvbnN0 IGNoYXJfdHlwZSogX19zKQogICAgICB7IHJldHVybiB3Y3NsZW4oX19zKTsgfQoKICAgICAgc3Rh dGljIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZmluZChjb25zdCBjaGFyX3R5cGUqIF9fcywgc2l6 ZV90IF9fbiwgY29uc3QgY2hhcl90eXBlJiBfX2EpCiAgICAgIHsgcmV0dXJuIHdtZW1jaHIoX19z LCBfX2EsIF9fbik7IH0KCiAgICAgIHN0YXRpYyBjaGFyX3R5cGUqCiAgICAgIG1vdmUoY2hhcl90 eXBlKiBfX3MxLCBjb25zdCBjaGFyX3R5cGUqIF9fczIsIGludF90eXBlIF9fbikKICAgICAgeyBy ZXR1cm4gd21lbW1vdmUoX19zMSwgX19zMiwgX19uKTsgfQoKICAgICAgc3RhdGljIGNoYXJfdHlw ZSoKICAgICAgY29weShjaGFyX3R5cGUqIF9fczEsIGNvbnN0IGNoYXJfdHlwZSogX19zMiwgc2l6 ZV90IF9fbikKICAgICAgeyByZXR1cm4gd21lbWNweShfX3MxLCBfX3MyLCBfX24pOyB9CgogICAg ICBzdGF0aWMgY2hhcl90eXBlKgogICAgICBhc3NpZ24oY2hhcl90eXBlKiBfX3MsIHNpemVfdCBf X24sIGNoYXJfdHlwZSBfX2EpCiAgICAgIHsgcmV0dXJuIHdtZW1zZXQoX19zLCBfX2EsIF9fbik7 IH0KCiAgICAgIHN0YXRpYyBjaGFyX3R5cGUKICAgICAgdG9fY2hhcl90eXBlKGNvbnN0IGludF90 eXBlJiBfX2MpIHsgcmV0dXJuIGNoYXJfdHlwZShfX2MpOyB9CgogICAgICBzdGF0aWMgaW50X3R5 cGUKICAgICAgdG9faW50X3R5cGUoY29uc3QgY2hhcl90eXBlJiBfX2MpIHsgcmV0dXJuIGludF90 eXBlKF9fYyk7IH0KCiAgICAgIHN0YXRpYyBib29sCiAgICAgIGVxX2ludF90eXBlKGNvbnN0IGlu dF90eXBlJiBfX2MxLCBjb25zdCBpbnRfdHlwZSYgX19jMikKICAgICAgeyByZXR1cm4gX19jMSA9 PSBfX2MyOyB9CgogICAgICBzdGF0aWMgaW50X3R5cGUKICAgICAgZW9mKCkgeyByZXR1cm4gc3Rh dGljX2Nhc3Q8aW50X3R5cGU+KCgweGZmZmZmZmZmdSkpOyB9CgogICAgICBzdGF0aWMgaW50X3R5 cGUKICAgICAgbm90X2VvZihjb25zdCBpbnRfdHlwZSYgX19jKQogICAgICB7IHJldHVybiBlcV9p bnRfdHlwZShfX2MsIGVvZigpKSA/IDAgOiBfX2M7IH0KICB9OwoKCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgc3RydWN0IF9DaGFyX3RyYWl0c19tYXRj aAogICAgewogICAgICBfQ2hhclQgX01fYzsKICAgICAgX0NoYXJfdHJhaXRzX21hdGNoKF9DaGFy VCBjb25zdCYgX19jKSA6IF9NX2MoX19jKSB7IH0KCiAgICAgIGJvb2wKICAgICAgb3BlcmF0b3Io KShfQ2hhclQgY29uc3QmIF9fYSkgeyByZXR1cm4gX1RyYWl0czo6ZXEoX01fYywgX19hKTsgfQog ICAgfTsKfQojIDQ3ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9pb3MiIDIgMwoKIyAxICIvdXNyL2lu Y2x1ZGUvYysrLzMuMi9iaXRzL2xvY2FsZWZ3ZC5oIiAxIDMKIyA0NCAiL3Vzci9pbmNsdWRlL2Mr Ky8zLjIvYml0cy9sb2NhbGVmd2QuaCIgMwoKCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvaTM4 Ni1saW51eC9iaXRzL2MrK2xvY2FsZS5oIiAxIDMKIyAzNiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIv aTM4Ni1saW51eC9iaXRzL2MrK2xvY2FsZS5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIv Y2xvY2FsZSIgMSAzCiMgNDggIi91c3IvaW5jbHVkZS9jKysvMy4yL2Nsb2NhbGUiIDMKCiMgMSAi L3Vzci9pbmNsdWRlL2xvY2FsZS5oIiAxIDMKIyAyOSAiL3Vzci9pbmNsdWRlL2xvY2FsZS5oIiAz CiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzMuMi4zL2luY2x1ZGUvc3RkZGVmLmgi IDEgMwojIDMwICIvdXNyL2luY2x1ZGUvbG9jYWxlLmgiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9i aXRzL2xvY2FsZS5oIiAxIDMKIyAyNyAiL3Vzci9pbmNsdWRlL2JpdHMvbG9jYWxlLmgiIDMKZW51 bQp7CiAgX19MQ19DVFlQRSA9IDAsCiAgX19MQ19OVU1FUklDID0gMSwKICBfX0xDX1RJTUUgPSAy LAogIF9fTENfQ09MTEFURSA9IDMsCiAgX19MQ19NT05FVEFSWSA9IDQsCiAgX19MQ19NRVNTQUdF UyA9IDUsCiAgX19MQ19BTEwgPSA2LAogIF9fTENfUEFQRVIgPSA3LAogIF9fTENfTkFNRSA9IDgs CiAgX19MQ19BRERSRVNTID0gOSwKICBfX0xDX1RFTEVQSE9ORSA9IDEwLAogIF9fTENfTUVBU1VS RU1FTlQgPSAxMSwKICBfX0xDX0lERU5USUZJQ0FUSU9OID0gMTIKfTsKIyAzMSAiL3Vzci9pbmNs dWRlL2xvY2FsZS5oIiAyIDMKCmV4dGVybiAiQyIgewojIDUyICIvdXNyL2luY2x1ZGUvbG9jYWxl LmgiIDMKc3RydWN0IGxjb252CnsKCgogIGNoYXIgKmRlY2ltYWxfcG9pbnQ7CiAgY2hhciAqdGhv dXNhbmRzX3NlcDsKCgoKCgogIGNoYXIgKmdyb3VwaW5nOwoKCgoKCiAgY2hhciAqaW50X2N1cnJf c3ltYm9sOwogIGNoYXIgKmN1cnJlbmN5X3N5bWJvbDsKICBjaGFyICptb25fZGVjaW1hbF9wb2lu dDsKICBjaGFyICptb25fdGhvdXNhbmRzX3NlcDsKICBjaGFyICptb25fZ3JvdXBpbmc7CiAgY2hh ciAqcG9zaXRpdmVfc2lnbjsKICBjaGFyICpuZWdhdGl2ZV9zaWduOwogIGNoYXIgaW50X2ZyYWNf ZGlnaXRzOwogIGNoYXIgZnJhY19kaWdpdHM7CgogIGNoYXIgcF9jc19wcmVjZWRlczsKCiAgY2hh ciBwX3NlcF9ieV9zcGFjZTsKCiAgY2hhciBuX2NzX3ByZWNlZGVzOwoKICBjaGFyIG5fc2VwX2J5 X3NwYWNlOwoKCgoKCgogIGNoYXIgcF9zaWduX3Bvc247CiAgY2hhciBuX3NpZ25fcG9zbjsKCgog IGNoYXIgaW50X3BfY3NfcHJlY2VkZXM7CgogIGNoYXIgaW50X3Bfc2VwX2J5X3NwYWNlOwoKICBj aGFyIGludF9uX2NzX3ByZWNlZGVzOwoKICBjaGFyIGludF9uX3NlcF9ieV9zcGFjZTsKCgoKCgoK ICBjaGFyIGludF9wX3NpZ25fcG9zbjsKICBjaGFyIGludF9uX3NpZ25fcG9zbjsKIyAxMTkgIi91 c3IvaW5jbHVkZS9sb2NhbGUuaCIgMwp9OwoKCgoKCmV4dGVybiBjaGFyICpzZXRsb2NhbGUgKGlu dCBfX2NhdGVnb3J5LCBfX2NvbnN0IGNoYXIgKl9fbG9jYWxlKSB0aHJvdyAoKTsKCgpleHRlcm4g c3RydWN0IGxjb252ICpsb2NhbGVjb252ICh2b2lkKSB0aHJvdyAoKTsKCgojIDE0OCAiL3Vzci9p bmNsdWRlL2xvY2FsZS5oIiAzCnR5cGVkZWYgX19sb2NhbGVfdCBsb2NhbGVfdDsKCgoKCgpleHRl cm4gX19sb2NhbGVfdCBuZXdsb2NhbGUgKGludCBfX2NhdGVnb3J5X21hc2ssIF9fY29uc3QgY2hh ciAqX19sb2NhbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19sb2NhbGVfdCBfX2Jh c2UpIHRocm93ICgpOwojIDE4OSAiL3Vzci9pbmNsdWRlL2xvY2FsZS5oIiAzCmV4dGVybiBfX2xv Y2FsZV90IGR1cGxvY2FsZSAoX19sb2NhbGVfdCBfX2RhdGFzZXQpIHRocm93ICgpOwoKCgpleHRl cm4gdm9pZCBmcmVlbG9jYWxlIChfX2xvY2FsZV90IF9fZGF0YXNldCkgdGhyb3cgKCk7CgoKCgoK CmV4dGVybiBfX2xvY2FsZV90IHVzZWxvY2FsZSAoX19sb2NhbGVfdCBfX2RhdGFzZXQpIHRocm93 ICgpOwoKCgoKCgoKfQojIDUwICIvdXNyL2luY2x1ZGUvYysrLzMuMi9jbG9jYWxlIiAyIDMKCgoK CgpuYW1lc3BhY2Ugc3RkCnsKICB1c2luZyA6Omxjb252OwogIHVzaW5nIDo6c2V0bG9jYWxlOwog IHVzaW5nIDo6bG9jYWxlY29udjsKfQojIDM3ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9pMzg2LWxp bnV4L2JpdHMvYysrbG9jYWxlLmgiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9sYW5naW5mby5oIiAx IDMKIyAyNCAiL3Vzci9pbmNsdWRlL2xhbmdpbmZvLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvbmxf dHlwZXMuaCIgMSAzCiMgMzEgIi91c3IvaW5jbHVkZS9ubF90eXBlcy5oIiAzCmV4dGVybiAiQyIg ewoKCnR5cGVkZWYgdm9pZCAqbmxfY2F0ZDsKCgp0eXBlZGVmIGludCBubF9pdGVtOwoKCmV4dGVy biBubF9jYXRkIGNhdG9wZW4gKF9fY29uc3QgY2hhciAqX19jYXRfbmFtZSwgaW50IF9fZmxhZykg dGhyb3cgKCk7CgoKCmV4dGVybiBjaGFyICpjYXRnZXRzIChubF9jYXRkIF9fY2F0YWxvZywgaW50 IF9fc2V0LCBpbnQgX19udW1iZXIsCiAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIg Kl9fc3RyaW5nKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IGNhdGNsb3NlIChubF9jYXRkIF9fY2F0 YWxvZykgdGhyb3cgKCk7Cgp9CiMgMjUgIi91c3IvaW5jbHVkZS9sYW5naW5mby5oIiAyIDMKCiMg MSAiL3Vzci9pbmNsdWRlL2JpdHMvbG9jYWxlLmgiIDEgMwojIDI3ICIvdXNyL2luY2x1ZGUvbGFu Z2luZm8uaCIgMiAzCgoKZXh0ZXJuICJDIiB7CiMgNDMgIi91c3IvaW5jbHVkZS9sYW5naW5mby5o IiAzCmVudW0KewoKCgogIEFCREFZXzEgPSAoKChfX0xDX1RJTUUpIDw8IDE2KSB8ICgwKSksCgog IEFCREFZXzIsCgogIEFCREFZXzMsCgogIEFCREFZXzQsCgogIEFCREFZXzUsCgogIEFCREFZXzYs CgogIEFCREFZXzcsCgoKCiAgREFZXzEsCgogIERBWV8yLAoKICBEQVlfMywKCiAgREFZXzQsCgog IERBWV81LAoKICBEQVlfNiwKCiAgREFZXzcsCgoKCiAgQUJNT05fMSwKCiAgQUJNT05fMiwKCiAg QUJNT05fMywKCiAgQUJNT05fNCwKCiAgQUJNT05fNSwKCiAgQUJNT05fNiwKCiAgQUJNT05fNywK CiAgQUJNT05fOCwKCiAgQUJNT05fOSwKCiAgQUJNT05fMTAsCgogIEFCTU9OXzExLAoKICBBQk1P Tl8xMiwKCgoKICBNT05fMSwKCiAgTU9OXzIsCgogIE1PTl8zLAoKICBNT05fNCwKCiAgTU9OXzUs CgogIE1PTl82LAoKICBNT05fNywKCiAgTU9OXzgsCgogIE1PTl85LAoKICBNT05fMTAsCgogIE1P Tl8xMSwKCiAgTU9OXzEyLAoKCiAgQU1fU1RSLAoKICBQTV9TVFIsCgoKICBEX1RfRk1ULAoKICBE X0ZNVCwKCiAgVF9GTVQsCgogIFRfRk1UX0FNUE0sCgoKICBFUkEsCgogIF9fRVJBX1lFQVIsCgoK CiAgRVJBX0RfRk1ULAoKICBBTFRfRElHSVRTLAoKICBFUkFfRF9UX0ZNVCwKCiAgRVJBX1RfRk1U LAoKCiAgX05MX1RJTUVfRVJBX05VTV9FTlRSSUVTLAogIF9OTF9USU1FX0VSQV9FTlRSSUVTLAoK ICBfTkxfV0FCREFZXzEsCiAgX05MX1dBQkRBWV8yLAogIF9OTF9XQUJEQVlfMywKICBfTkxfV0FC REFZXzQsCiAgX05MX1dBQkRBWV81LAogIF9OTF9XQUJEQVlfNiwKICBfTkxfV0FCREFZXzcsCgoK ICBfTkxfV0RBWV8xLAogIF9OTF9XREFZXzIsCiAgX05MX1dEQVlfMywKICBfTkxfV0RBWV80LAog IF9OTF9XREFZXzUsCiAgX05MX1dEQVlfNiwKICBfTkxfV0RBWV83LAoKCiAgX05MX1dBQk1PTl8x LAogIF9OTF9XQUJNT05fMiwKICBfTkxfV0FCTU9OXzMsCiAgX05MX1dBQk1PTl80LAogIF9OTF9X QUJNT05fNSwKICBfTkxfV0FCTU9OXzYsCiAgX05MX1dBQk1PTl83LAogIF9OTF9XQUJNT05fOCwK ICBfTkxfV0FCTU9OXzksCiAgX05MX1dBQk1PTl8xMCwKICBfTkxfV0FCTU9OXzExLAogIF9OTF9X QUJNT05fMTIsCgoKICBfTkxfV01PTl8xLAogIF9OTF9XTU9OXzIsCiAgX05MX1dNT05fMywKICBf TkxfV01PTl80LAogIF9OTF9XTU9OXzUsCiAgX05MX1dNT05fNiwKICBfTkxfV01PTl83LAogIF9O TF9XTU9OXzgsCiAgX05MX1dNT05fOSwKICBfTkxfV01PTl8xMCwKICBfTkxfV01PTl8xMSwKICBf TkxfV01PTl8xMiwKCiAgX05MX1dBTV9TVFIsCiAgX05MX1dQTV9TVFIsCgogIF9OTF9XRF9UX0ZN VCwKICBfTkxfV0RfRk1ULAogIF9OTF9XVF9GTVQsCiAgX05MX1dUX0ZNVF9BTVBNLAoKICBfTkxf V0VSQV9ZRUFSLAogIF9OTF9XRVJBX0RfRk1ULAogIF9OTF9XQUxUX0RJR0lUUywKICBfTkxfV0VS QV9EX1RfRk1ULAogIF9OTF9XRVJBX1RfRk1ULAoKICBfTkxfVElNRV9XRUVLX05EQVlTLAogIF9O TF9USU1FX1dFRUtfMVNUREFZLAogIF9OTF9USU1FX1dFRUtfMVNUV0VFSywKICBfTkxfVElNRV9G SVJTVF9XRUVLREFZLAogIF9OTF9USU1FX0ZJUlNUX1dPUktEQVksCiAgX05MX1RJTUVfQ0FMX0RJ UkVDVElPTiwKICBfTkxfVElNRV9USU1FWk9ORSwKCiAgX0RBVEVfRk1ULAoKICBfTkxfV19EQVRF X0ZNVCwKCiAgX05MX1RJTUVfQ09ERVNFVCwKCiAgX05MX05VTV9MQ19USU1FLAoKCgoKICBfTkxf Q09MTEFURV9OUlVMRVMgPSAoKChfX0xDX0NPTExBVEUpIDw8IDE2KSB8ICgwKSksCiAgX05MX0NP TExBVEVfUlVMRVNFVFMsCiAgX05MX0NPTExBVEVfVEFCTEVNQiwKICBfTkxfQ09MTEFURV9XRUlH SFRNQiwKICBfTkxfQ09MTEFURV9FWFRSQU1CLAogIF9OTF9DT0xMQVRFX0lORElSRUNUTUIsCiAg X05MX0NPTExBVEVfR0FQMSwKICBfTkxfQ09MTEFURV9HQVAyLAogIF9OTF9DT0xMQVRFX0dBUDMs CiAgX05MX0NPTExBVEVfVEFCTEVXQywKICBfTkxfQ09MTEFURV9XRUlHSFRXQywKICBfTkxfQ09M TEFURV9FWFRSQVdDLAogIF9OTF9DT0xMQVRFX0lORElSRUNUV0MsCiAgX05MX0NPTExBVEVfU1lN Ql9IQVNIX1NJWkVNQiwKICBfTkxfQ09MTEFURV9TWU1CX1RBQkxFTUIsCiAgX05MX0NPTExBVEVf U1lNQl9FWFRSQU1CLAogIF9OTF9DT0xMQVRFX0NPTExTRVFNQiwKICBfTkxfQ09MTEFURV9DT0xM U0VRV0MsCiAgX05MX0NPTExBVEVfQ09ERVNFVCwKICBfTkxfTlVNX0xDX0NPTExBVEUsCgoKCgog IF9OTF9DVFlQRV9DTEFTUyA9ICgoKF9fTENfQ1RZUEUpIDw8IDE2KSB8ICgwKSksCiAgX05MX0NU WVBFX1RPVVBQRVIsCiAgX05MX0NUWVBFX0dBUDEsCiAgX05MX0NUWVBFX1RPTE9XRVIsCiAgX05M X0NUWVBFX0dBUDIsCiAgX05MX0NUWVBFX0NMQVNTMzIsCiAgX05MX0NUWVBFX0dBUDMsCiAgX05M X0NUWVBFX0dBUDQsCiAgX05MX0NUWVBFX0dBUDUsCiAgX05MX0NUWVBFX0dBUDYsCiAgX05MX0NU WVBFX0NMQVNTX05BTUVTLAogIF9OTF9DVFlQRV9NQVBfTkFNRVMsCiAgX05MX0NUWVBFX1dJRFRI LAogIF9OTF9DVFlQRV9NQl9DVVJfTUFYLAogIF9OTF9DVFlQRV9DT0RFU0VUX05BTUUsCiAgQ09E RVNFVCA9IF9OTF9DVFlQRV9DT0RFU0VUX05BTUUsCgogIF9OTF9DVFlQRV9UT1VQUEVSMzIsCiAg X05MX0NUWVBFX1RPTE9XRVIzMiwKICBfTkxfQ1RZUEVfQ0xBU1NfT0ZGU0VULAogIF9OTF9DVFlQ RV9NQVBfT0ZGU0VULAogIF9OTF9DVFlQRV9JTkRJR0lUU19NQl9MRU4sCiAgX05MX0NUWVBFX0lO RElHSVRTMF9NQiwKICBfTkxfQ1RZUEVfSU5ESUdJVFMxX01CLAogIF9OTF9DVFlQRV9JTkRJR0lU UzJfTUIsCiAgX05MX0NUWVBFX0lORElHSVRTM19NQiwKICBfTkxfQ1RZUEVfSU5ESUdJVFM0X01C LAogIF9OTF9DVFlQRV9JTkRJR0lUUzVfTUIsCiAgX05MX0NUWVBFX0lORElHSVRTNl9NQiwKICBf TkxfQ1RZUEVfSU5ESUdJVFM3X01CLAogIF9OTF9DVFlQRV9JTkRJR0lUUzhfTUIsCiAgX05MX0NU WVBFX0lORElHSVRTOV9NQiwKICBfTkxfQ1RZUEVfSU5ESUdJVFNfV0NfTEVOLAogIF9OTF9DVFlQ RV9JTkRJR0lUUzBfV0MsCiAgX05MX0NUWVBFX0lORElHSVRTMV9XQywKICBfTkxfQ1RZUEVfSU5E SUdJVFMyX1dDLAogIF9OTF9DVFlQRV9JTkRJR0lUUzNfV0MsCiAgX05MX0NUWVBFX0lORElHSVRT NF9XQywKICBfTkxfQ1RZUEVfSU5ESUdJVFM1X1dDLAogIF9OTF9DVFlQRV9JTkRJR0lUUzZfV0Ms CiAgX05MX0NUWVBFX0lORElHSVRTN19XQywKICBfTkxfQ1RZUEVfSU5ESUdJVFM4X1dDLAogIF9O TF9DVFlQRV9JTkRJR0lUUzlfV0MsCiAgX05MX0NUWVBFX09VVERJR0lUMF9NQiwKICBfTkxfQ1RZ UEVfT1VURElHSVQxX01CLAogIF9OTF9DVFlQRV9PVVRESUdJVDJfTUIsCiAgX05MX0NUWVBFX09V VERJR0lUM19NQiwKICBfTkxfQ1RZUEVfT1VURElHSVQ0X01CLAogIF9OTF9DVFlQRV9PVVRESUdJ VDVfTUIsCiAgX05MX0NUWVBFX09VVERJR0lUNl9NQiwKICBfTkxfQ1RZUEVfT1VURElHSVQ3X01C LAogIF9OTF9DVFlQRV9PVVRESUdJVDhfTUIsCiAgX05MX0NUWVBFX09VVERJR0lUOV9NQiwKICBf TkxfQ1RZUEVfT1VURElHSVQwX1dDLAogIF9OTF9DVFlQRV9PVVRESUdJVDFfV0MsCiAgX05MX0NU WVBFX09VVERJR0lUMl9XQywKICBfTkxfQ1RZUEVfT1VURElHSVQzX1dDLAogIF9OTF9DVFlQRV9P VVRESUdJVDRfV0MsCiAgX05MX0NUWVBFX09VVERJR0lUNV9XQywKICBfTkxfQ1RZUEVfT1VURElH SVQ2X1dDLAogIF9OTF9DVFlQRV9PVVRESUdJVDdfV0MsCiAgX05MX0NUWVBFX09VVERJR0lUOF9X QywKICBfTkxfQ1RZUEVfT1VURElHSVQ5X1dDLAogIF9OTF9DVFlQRV9UUkFOU0xJVF9UQUJfU0la RSwKICBfTkxfQ1RZUEVfVFJBTlNMSVRfRlJPTV9JRFgsCiAgX05MX0NUWVBFX1RSQU5TTElUX0ZS T01fVEJMLAogIF9OTF9DVFlQRV9UUkFOU0xJVF9UT19JRFgsCiAgX05MX0NUWVBFX1RSQU5TTElU X1RPX1RCTCwKICBfTkxfQ1RZUEVfVFJBTlNMSVRfREVGQVVMVF9NSVNTSU5HX0xFTiwKICBfTkxf Q1RZUEVfVFJBTlNMSVRfREVGQVVMVF9NSVNTSU5HLAogIF9OTF9DVFlQRV9UUkFOU0xJVF9JR05P UkVfTEVOLAogIF9OTF9DVFlQRV9UUkFOU0xJVF9JR05PUkUsCiAgX05MX0NUWVBFX0VYVFJBX01B UF8xLAogIF9OTF9DVFlQRV9FWFRSQV9NQVBfMiwKICBfTkxfQ1RZUEVfRVhUUkFfTUFQXzMsCiAg X05MX0NUWVBFX0VYVFJBX01BUF80LAogIF9OTF9DVFlQRV9FWFRSQV9NQVBfNSwKICBfTkxfQ1RZ UEVfRVhUUkFfTUFQXzYsCiAgX05MX0NUWVBFX0VYVFJBX01BUF83LAogIF9OTF9DVFlQRV9FWFRS QV9NQVBfOCwKICBfTkxfQ1RZUEVfRVhUUkFfTUFQXzksCiAgX05MX0NUWVBFX0VYVFJBX01BUF8x MCwKICBfTkxfQ1RZUEVfRVhUUkFfTUFQXzExLAogIF9OTF9DVFlQRV9FWFRSQV9NQVBfMTIsCiAg X05MX0NUWVBFX0VYVFJBX01BUF8xMywKICBfTkxfQ1RZUEVfRVhUUkFfTUFQXzE0LAogIF9OTF9O VU1fTENfQ1RZUEUsCgoKCgogIF9fSU5UX0NVUlJfU1lNQk9MID0gKCgoX19MQ19NT05FVEFSWSkg PDwgMTYpIHwgKDApKSwKCgoKICBfX0NVUlJFTkNZX1NZTUJPTCwKCgoKICBfX01PTl9ERUNJTUFM X1BPSU5ULAoKCgogIF9fTU9OX1RIT1VTQU5EU19TRVAsCgoKCiAgX19NT05fR1JPVVBJTkcsCgoK CiAgX19QT1NJVElWRV9TSUdOLAoKCgogIF9fTkVHQVRJVkVfU0lHTiwKCgoKICBfX0lOVF9GUkFD X0RJR0lUUywKCgoKICBfX0ZSQUNfRElHSVRTLAoKCgogIF9fUF9DU19QUkVDRURFUywKCgoKICBf X1BfU0VQX0JZX1NQQUNFLAoKCgogIF9fTl9DU19QUkVDRURFUywKCgoKICBfX05fU0VQX0JZX1NQ QUNFLAoKCgogIF9fUF9TSUdOX1BPU04sCgoKCiAgX19OX1NJR05fUE9TTiwKCgoKICBfTkxfTU9O RVRBUllfQ1JOQ1lTVFIsCgogIF9fSU5UX1BfQ1NfUFJFQ0VERVMsCgoKCiAgX19JTlRfUF9TRVBf QllfU1BBQ0UsCgoKCiAgX19JTlRfTl9DU19QUkVDRURFUywKCgoKICBfX0lOVF9OX1NFUF9CWV9T UEFDRSwKCgoKICBfX0lOVF9QX1NJR05fUE9TTiwKCgoKICBfX0lOVF9OX1NJR05fUE9TTiwKCgoK ICBfTkxfTU9ORVRBUllfRFVPX0lOVF9DVVJSX1NZTUJPTCwKICBfTkxfTU9ORVRBUllfRFVPX0NV UlJFTkNZX1NZTUJPTCwKICBfTkxfTU9ORVRBUllfRFVPX0lOVF9GUkFDX0RJR0lUUywKICBfTkxf TU9ORVRBUllfRFVPX0ZSQUNfRElHSVRTLAogIF9OTF9NT05FVEFSWV9EVU9fUF9DU19QUkVDRURF UywKICBfTkxfTU9ORVRBUllfRFVPX1BfU0VQX0JZX1NQQUNFLAogIF9OTF9NT05FVEFSWV9EVU9f Tl9DU19QUkVDRURFUywKICBfTkxfTU9ORVRBUllfRFVPX05fU0VQX0JZX1NQQUNFLAogIF9OTF9N T05FVEFSWV9EVU9fSU5UX1BfQ1NfUFJFQ0VERVMsCiAgX05MX01PTkVUQVJZX0RVT19JTlRfUF9T RVBfQllfU1BBQ0UsCiAgX05MX01PTkVUQVJZX0RVT19JTlRfTl9DU19QUkVDRURFUywKICBfTkxf TU9ORVRBUllfRFVPX0lOVF9OX1NFUF9CWV9TUEFDRSwKICBfTkxfTU9ORVRBUllfRFVPX1BfU0lH Tl9QT1NOLAogIF9OTF9NT05FVEFSWV9EVU9fTl9TSUdOX1BPU04sCiAgX05MX01PTkVUQVJZX0RV T19JTlRfUF9TSUdOX1BPU04sCiAgX05MX01PTkVUQVJZX0RVT19JTlRfTl9TSUdOX1BPU04sCiAg X05MX01PTkVUQVJZX1VOT19WQUxJRF9GUk9NLAogIF9OTF9NT05FVEFSWV9VTk9fVkFMSURfVE8s CiAgX05MX01PTkVUQVJZX0RVT19WQUxJRF9GUk9NLAogIF9OTF9NT05FVEFSWV9EVU9fVkFMSURf VE8sCiAgX05MX01PTkVUQVJZX0NPTlZFUlNJT05fUkFURSwKICBfTkxfTU9ORVRBUllfREVDSU1B TF9QT0lOVF9XQywKICBfTkxfTU9ORVRBUllfVEhPVVNBTkRTX1NFUF9XQywKICBfTkxfTU9ORVRB UllfQ09ERVNFVCwKICBfTkxfTlVNX0xDX01PTkVUQVJZLAoKCgogIF9fREVDSU1BTF9QT0lOVCA9 ICgoKF9fTENfTlVNRVJJQykgPDwgMTYpIHwgKDApKSwKCgoKICBSQURJWENIQVIgPSBfX0RFQ0lN QUxfUE9JTlQsCgogIF9fVEhPVVNBTkRTX1NFUCwKCgoKICBUSE9VU0VQID0gX19USE9VU0FORFNf U0VQLAoKICBfX0dST1VQSU5HLAoKCgogIF9OTF9OVU1FUklDX0RFQ0lNQUxfUE9JTlRfV0MsCiAg X05MX05VTUVSSUNfVEhPVVNBTkRTX1NFUF9XQywKICBfTkxfTlVNRVJJQ19DT0RFU0VULAogIF9O TF9OVU1fTENfTlVNRVJJQywKCiAgX19ZRVNFWFBSID0gKCgoX19MQ19NRVNTQUdFUykgPDwgMTYp IHwgKDApKSwKCiAgX19OT0VYUFIsCgogIF9fWUVTU1RSLAoKCgogIF9fTk9TVFIsCgoKCiAgX05M X01FU1NBR0VTX0NPREVTRVQsCiAgX05MX05VTV9MQ19NRVNTQUdFUywKCiAgX05MX1BBUEVSX0hF SUdIVCA9ICgoKF9fTENfUEFQRVIpIDw8IDE2KSB8ICgwKSksCiAgX05MX1BBUEVSX1dJRFRILAog IF9OTF9QQVBFUl9DT0RFU0VULAogIF9OTF9OVU1fTENfUEFQRVIsCgogIF9OTF9OQU1FX05BTUVf Rk1UID0gKCgoX19MQ19OQU1FKSA8PCAxNikgfCAoMCkpLAogIF9OTF9OQU1FX05BTUVfR0VOLAog IF9OTF9OQU1FX05BTUVfTVIsCiAgX05MX05BTUVfTkFNRV9NUlMsCiAgX05MX05BTUVfTkFNRV9N SVNTLAogIF9OTF9OQU1FX05BTUVfTVMsCiAgX05MX05BTUVfQ09ERVNFVCwKICBfTkxfTlVNX0xD X05BTUUsCgogIF9OTF9BRERSRVNTX1BPU1RBTF9GTVQgPSAoKChfX0xDX0FERFJFU1MpIDw8IDE2 KSB8ICgwKSksCiAgX05MX0FERFJFU1NfQ09VTlRSWV9OQU1FLAogIF9OTF9BRERSRVNTX0NPVU5U UllfUE9TVCwKICBfTkxfQUREUkVTU19DT1VOVFJZX0FCMiwKICBfTkxfQUREUkVTU19DT1VOVFJZ X0FCMywKICBfTkxfQUREUkVTU19DT1VOVFJZX0NBUiwKICBfTkxfQUREUkVTU19DT1VOVFJZX05V TSwKICBfTkxfQUREUkVTU19DT1VOVFJZX0lTQk4sCiAgX05MX0FERFJFU1NfTEFOR19OQU1FLAog IF9OTF9BRERSRVNTX0xBTkdfQUIsCiAgX05MX0FERFJFU1NfTEFOR19URVJNLAogIF9OTF9BRERS RVNTX0xBTkdfTElCLAogIF9OTF9BRERSRVNTX0NPREVTRVQsCiAgX05MX05VTV9MQ19BRERSRVNT LAoKICBfTkxfVEVMRVBIT05FX1RFTF9JTlRfRk1UID0gKCgoX19MQ19URUxFUEhPTkUpIDw8IDE2 KSB8ICgwKSksCiAgX05MX1RFTEVQSE9ORV9URUxfRE9NX0ZNVCwKICBfTkxfVEVMRVBIT05FX0lO VF9TRUxFQ1QsCiAgX05MX1RFTEVQSE9ORV9JTlRfUFJFRklYLAogIF9OTF9URUxFUEhPTkVfQ09E RVNFVCwKICBfTkxfTlVNX0xDX1RFTEVQSE9ORSwKCiAgX05MX01FQVNVUkVNRU5UX01FQVNVUkVN RU5UID0gKCgoX19MQ19NRUFTVVJFTUVOVCkgPDwgMTYpIHwgKDApKSwKICBfTkxfTUVBU1VSRU1F TlRfQ09ERVNFVCwKICBfTkxfTlVNX0xDX01FQVNVUkVNRU5ULAoKICBfTkxfSURFTlRJRklDQVRJ T05fVElUTEUgPSAoKChfX0xDX0lERU5USUZJQ0FUSU9OKSA8PCAxNikgfCAoMCkpLAogIF9OTF9J REVOVElGSUNBVElPTl9TT1VSQ0UsCiAgX05MX0lERU5USUZJQ0FUSU9OX0FERFJFU1MsCiAgX05M X0lERU5USUZJQ0FUSU9OX0NPTlRBQ1QsCiAgX05MX0lERU5USUZJQ0FUSU9OX0VNQUlMLAogIF9O TF9JREVOVElGSUNBVElPTl9URUwsCiAgX05MX0lERU5USUZJQ0FUSU9OX0ZBWCwKICBfTkxfSURF TlRJRklDQVRJT05fTEFOR1VBR0UsCiAgX05MX0lERU5USUZJQ0FUSU9OX1RFUlJJVE9SWSwKICBf TkxfSURFTlRJRklDQVRJT05fQVVESUVOQ0UsCiAgX05MX0lERU5USUZJQ0FUSU9OX0FQUExJQ0FU SU9OLAogIF9OTF9JREVOVElGSUNBVElPTl9BQkJSRVZJQVRJT04sCiAgX05MX0lERU5USUZJQ0FU SU9OX1JFVklTSU9OLAogIF9OTF9JREVOVElGSUNBVElPTl9EQVRFLAogIF9OTF9JREVOVElGSUNB VElPTl9DQVRFR09SWSwKICBfTkxfSURFTlRJRklDQVRJT05fQ09ERVNFVCwKICBfTkxfTlVNX0xD X0lERU5USUZJQ0FUSU9OLAoKCiAgX05MX05VTQp9OwojIDU3NSAiL3Vzci9pbmNsdWRlL2xhbmdp bmZvLmgiIDMKZXh0ZXJuIGNoYXIgKm5sX2xhbmdpbmZvIChubF9pdGVtIF9faXRlbSkgdGhyb3cg KCk7CiMgNTg2ICIvdXNyL2luY2x1ZGUvbGFuZ2luZm8uaCIgMwpleHRlcm4gY2hhciAqbmxfbGFu Z2luZm9fbCAobmxfaXRlbSBfX2l0ZW0sIF9fbG9jYWxlX3QgbCk7CgoKfQojIDM4ICIvdXNyL2lu Y2x1ZGUvYysrLzMuMi9pMzg2LWxpbnV4L2JpdHMvYysrbG9jYWxlLmgiIDIgMwojIDEgIi91c3Iv aW5jbHVkZS9pY29udi5oIiAxIDMKIyAyNCAiL3Vzci9pbmNsdWRlL2ljb252LmgiIDMKIyAxICIv dXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMy4yLjMvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMg MjUgIi91c3IvaW5jbHVkZS9pY29udi5oIiAyIDMKCgpleHRlcm4gIkMiIHsKCgp0eXBlZGVmIHZv aWQgKmljb252X3Q7CgoKCgpleHRlcm4gaWNvbnZfdCBpY29udl9vcGVuIChfX2NvbnN0IGNoYXIg Kl9fdG9jb2RlLCBfX2NvbnN0IGNoYXIgKl9fZnJvbWNvZGUpCiAgICAgdGhyb3cgKCk7CgoKCgpl eHRlcm4gc2l6ZV90IGljb252IChpY29udl90IF9fY2QsIGNoYXIgKipfX3Jlc3RyaWN0IF9faW5i dWYsCiAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqX19yZXN0cmljdCBfX2luYnl0ZXNsZWZ0 LAogICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX291dGJ1ZiwKICAgICAg ICAgICAgICAgICAgICAgc2l6ZV90ICpfX3Jlc3RyaWN0IF9fb3V0Ynl0ZXNsZWZ0KTsKCgpleHRl cm4gaW50IGljb252X2Nsb3NlIChpY29udl90IF9fY2QpIHRocm93ICgpOwoKfQojIDM5ICIvdXNy L2luY2x1ZGUvYysrLzMuMi9pMzg2LWxpbnV4L2JpdHMvYysrbG9jYWxlLmgiIDIgMwojIDEgIi91 c3IvaW5jbHVkZS9saWJpbnRsLmgiIDEgMwojIDM1ICIvdXNyL2luY2x1ZGUvbGliaW50bC5oIiAz CmV4dGVybiAiQyIgewoKCgoKZXh0ZXJuIGNoYXIgKmdldHRleHQgKF9fY29uc3QgY2hhciAqX19t c2dpZCkgdGhyb3cgKCk7CgoKCmV4dGVybiBjaGFyICpkZ2V0dGV4dCAoX19jb25zdCBjaGFyICpf X2RvbWFpbm5hbWUsIF9fY29uc3QgY2hhciAqX19tc2dpZCkKICAgICB0aHJvdyAoKTsKZXh0ZXJu IGNoYXIgKl9fZGdldHRleHQgKF9fY29uc3QgY2hhciAqX19kb21haW5uYW1lLCBfX2NvbnN0IGNo YXIgKl9fbXNnaWQpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X2FyZ19f ICgyKSkpOwoKCgpleHRlcm4gY2hhciAqZGNnZXR0ZXh0IChfX2NvbnN0IGNoYXIgKl9fZG9tYWlu bmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX21zZ2lkLCBpbnQg X19jYXRlZ29yeSkgdGhyb3cgKCk7CmV4dGVybiBjaGFyICpfX2RjZ2V0dGV4dCAoX19jb25zdCBj aGFyICpfX2RvbWFpbm5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFy ICpfX21zZ2lkLCBpbnQgX19jYXRlZ29yeSkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo X19mb3JtYXRfYXJnX18gKDIpKSk7CgoKCgpleHRlcm4gY2hhciAqbmdldHRleHQgKF9fY29uc3Qg Y2hhciAqX19tc2dpZDEsIF9fY29uc3QgY2hhciAqX19tc2dpZDIsCiAgICAgICAgICAgICAgICAg ICAgICAgdW5zaWduZWQgbG9uZyBpbnQgX19uKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18g KChfX2Zvcm1hdF9hcmdfXyAoMSkpKSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfYXJnX18gKDIp KSk7CgoKCmV4dGVybiBjaGFyICpkbmdldHRleHQgKF9fY29uc3QgY2hhciAqX19kb21haW5uYW1l LCBfX2NvbnN0IGNoYXIgKl9fbXNnaWQxLAogICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0 IGNoYXIgKl9fbXNnaWQyLCB1bnNpZ25lZCBsb25nIGludCBfX24pCiAgICAgdGhyb3cgKCkgX19h dHRyaWJ1dGVfXyAoKF9fZm9ybWF0X2FyZ19fICgyKSkpIF9fYXR0cmlidXRlX18gKChfX2Zvcm1h dF9hcmdfXyAoMykpKTsKCgoKZXh0ZXJuIGNoYXIgKmRjbmdldHRleHQgKF9fY29uc3QgY2hhciAq X19kb21haW5uYW1lLCBfX2NvbnN0IGNoYXIgKl9fbXNnaWQxLAogICAgICAgICAgICAgICAgICAg ICAgICAgX19jb25zdCBjaGFyICpfX21zZ2lkMiwgdW5zaWduZWQgbG9uZyBpbnQgX19uLAogICAg ICAgICAgICAgICAgICAgICAgICAgaW50IF9fY2F0ZWdvcnkpCiAgICAgdGhyb3cgKCkgX19hdHRy aWJ1dGVfXyAoKF9fZm9ybWF0X2FyZ19fICgyKSkpIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9h cmdfXyAoMykpKTsKCgoKCgpleHRlcm4gY2hhciAqdGV4dGRvbWFpbiAoX19jb25zdCBjaGFyICpf X2RvbWFpbm5hbWUpIHRocm93ICgpOwoKCgpleHRlcm4gY2hhciAqYmluZHRleHRkb21haW4gKF9f Y29uc3QgY2hhciAqX19kb21haW5uYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9f Y29uc3QgY2hhciAqX19kaXJuYW1lKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGNoYXIgKmJpbmRfdGV4 dGRvbWFpbl9jb2Rlc2V0IChfX2NvbnN0IGNoYXIgKl9fZG9tYWlubmFtZSwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fY29kZXNldCkgdGhyb3cg KCk7CiMgMTIwICIvdXNyL2luY2x1ZGUvbGliaW50bC5oIiAzCn0KIyA0MCAiL3Vzci9pbmNsdWRl L2MrKy8zLjIvaTM4Ni1saW51eC9iaXRzL2MrK2xvY2FsZS5oIiAyIDMKCgoKCgoKbmFtZXNwYWNl IF9fZ251X2N4eAp7CiAgZXh0ZXJuICJDIiBfX3R5cGVvZih1c2Vsb2NhbGUpIF9fdXNlbG9jYWxl Owp9CgoKbmFtZXNwYWNlIHN0ZAp7CiAgdHlwZWRlZiBfX2xvY2FsZV90IF9fY19sb2NhbGU7Cgog IHRlbXBsYXRlPHR5cGVuYW1lIF9Udj4KICAgIGludAogICAgX19jb252ZXJ0X2Zyb21fdihjaGFy KiBfX291dCwgY29uc3QgaW50IF9fc2l6ZSwgY29uc3QgY2hhciogX19mbXQsCgogICAgICAgICAg ICAgICAgICAgICBfVHYgX192LCBjb25zdCBfX2NfbG9jYWxlJiBfX2Nsb2MsIGludCBfX3ByZWMg PSAtMSkKICAgIHsKICAgICAgX19jX2xvY2FsZSBfX29sZCA9IF9fZ251X2N4eDo6X191c2Vsb2Nh bGUoX19jbG9jKTsKIyA3MyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvaTM4Ni1saW51eC9iaXRzL2Mr K2xvY2FsZS5oIiAzCiAgICAgIGludCBfX3JldDsKCiAgICAgIGlmIChfX3ByZWMgPj0gMCkKICAg ICAgICBfX3JldCA9IHNucHJpbnRmKF9fb3V0LCBfX3NpemUsIF9fZm10LCBfX3ByZWMsIF9fdik7 CiAgICAgIGVsc2UKICAgICAgICBfX3JldCA9IHNucHJpbnRmKF9fb3V0LCBfX3NpemUsIF9fZm10 LCBfX3YpOwojIDg3ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9pMzg2LWxpbnV4L2JpdHMvYysrbG9j YWxlLmgiIDMKICAgICAgX19nbnVfY3h4OjpfX3VzZWxvY2FsZShfX29sZCk7CgoKCgogICAgICBy ZXR1cm4gX19yZXQ7CiAgICB9Cn0KIyA0NyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9sb2Nh bGVmd2QuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvY2xpbWl0cyIgMSAzCiMgNDgg Ii91c3IvaW5jbHVkZS9jKysvMy4yL2NsaW1pdHMiIDMKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9p Mzg2LWxpbnV4LzMuMi4zL2luY2x1ZGUvbGltaXRzLmgiIDEgMwojIDExICIvdXNyL2xpYi9nY2Mt bGliL2kzODYtbGludXgvMy4yLjMvaW5jbHVkZS9saW1pdHMuaCIgMwojIDEgIi91c3IvbGliL2dj Yy1saWIvaTM4Ni1saW51eC8zLjIuMy9pbmNsdWRlL3N5c2xpbWl0cy5oIiAxIDMKCgoKCgoKIyAx ICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMy4yLjMvaW5jbHVkZS9saW1pdHMuaCIgMSAz CiMgMTMyICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMy4yLjMvaW5jbHVkZS9saW1pdHMu aCIgMwojIDEgIi91c3IvaW5jbHVkZS9saW1pdHMuaCIgMSAzCiMgMTQ0ICIvdXNyL2luY2x1ZGUv bGltaXRzLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9wb3NpeDFfbGltLmgiIDEgMwojIDEy NiAiL3Vzci9pbmNsdWRlL2JpdHMvcG9zaXgxX2xpbS5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2Jp dHMvbG9jYWxfbGltLmgiIDEgMwojIDM2ICIvdXNyL2luY2x1ZGUvYml0cy9sb2NhbF9saW0uaCIg MwojIDEgIi91c3IvaW5jbHVkZS9saW51eC9saW1pdHMuaCIgMSAzCiMgMzcgIi91c3IvaW5jbHVk ZS9iaXRzL2xvY2FsX2xpbS5oIiAyIDMKIyAxMjcgIi91c3IvaW5jbHVkZS9iaXRzL3Bvc2l4MV9s aW0uaCIgMiAzCiMgMTQ1ICIvdXNyL2luY2x1ZGUvbGltaXRzLmgiIDIgMwoKCgojIDEgIi91c3Iv aW5jbHVkZS9iaXRzL3Bvc2l4Ml9saW0uaCIgMSAzCiMgMTQ5ICIvdXNyL2luY2x1ZGUvbGltaXRz LmgiIDIgMwoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3hvcGVuX2xpbS5oIiAxIDMKIyAzNCAi L3Vzci9pbmNsdWRlL2JpdHMveG9wZW5fbGltLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9z dGRpb19saW0uaCIgMSAzCiMgMzUgIi91c3IvaW5jbHVkZS9iaXRzL3hvcGVuX2xpbS5oIiAyIDMK IyAxMzYgIi91c3IvaW5jbHVkZS9iaXRzL3hvcGVuX2xpbS5oIiAzCiMgMSAiL3Vzci9pbmNsdWRl L2JpdHMvd29yZHNpemUuaCIgMSAzCiMgMTM3ICIvdXNyL2luY2x1ZGUvYml0cy94b3Blbl9saW0u aCIgMiAzCiMgMTUzICIvdXNyL2luY2x1ZGUvbGltaXRzLmgiIDIgMwojIDEzMyAiL3Vzci9saWIv Z2NjLWxpYi9pMzg2LWxpbnV4LzMuMi4zL2luY2x1ZGUvbGltaXRzLmgiIDIgMwojIDggIi91c3Iv bGliL2djYy1saWIvaTM4Ni1saW51eC8zLjIuMy9pbmNsdWRlL3N5c2xpbWl0cy5oIiAyIDMKIyAx MiAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzMuMi4zL2luY2x1ZGUvbGltaXRzLmgiIDIg MwojIDUwICIvdXNyL2luY2x1ZGUvYysrLzMuMi9jbGltaXRzIiAyIDMKIyA0OCAiL3Vzci9pbmNs dWRlL2MrKy8zLjIvYml0cy9sb2NhbGVmd2QuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8z LjIvY2N0eXBlIiAxIDMKIyA0NyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvY2N0eXBlIiAzCgoKIyAx ICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIgMSAzCiMgMzAgIi91c3IvaW5jbHVkZS9jdHlwZS5oIiAz CmV4dGVybiAiQyIgewojIDQxICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIgMwojIDEgIi91c3IvaW5j bHVkZS9lbmRpYW4uaCIgMSAzCiMgMzcgIi91c3IvaW5jbHVkZS9lbmRpYW4uaCIgMwojIDEgIi91 c3IvaW5jbHVkZS9iaXRzL2VuZGlhbi5oIiAxIDMKIyAzOCAiL3Vzci9pbmNsdWRlL2VuZGlhbi5o IiAyIDMKIyA0MiAiL3Vzci9pbmNsdWRlL2N0eXBlLmgiIDIgMwoKCgoKCgplbnVtCnsKICBfSVN1 cHBlciA9ICgoMCkgPCA4ID8gKCgxIDw8ICgwKSkgPDwgOCkgOiAoKDEgPDwgKDApKSA+PiA4KSks CiAgX0lTbG93ZXIgPSAoKDEpIDwgOCA/ICgoMSA8PCAoMSkpIDw8IDgpIDogKCgxIDw8ICgxKSkg Pj4gOCkpLAogIF9JU2FscGhhID0gKCgyKSA8IDggPyAoKDEgPDwgKDIpKSA8PCA4KSA6ICgoMSA8 PCAoMikpID4+IDgpKSwKICBfSVNkaWdpdCA9ICgoMykgPCA4ID8gKCgxIDw8ICgzKSkgPDwgOCkg OiAoKDEgPDwgKDMpKSA+PiA4KSksCiAgX0lTeGRpZ2l0ID0gKCg0KSA8IDggPyAoKDEgPDwgKDQp KSA8PCA4KSA6ICgoMSA8PCAoNCkpID4+IDgpKSwKICBfSVNzcGFjZSA9ICgoNSkgPCA4ID8gKCgx IDw8ICg1KSkgPDwgOCkgOiAoKDEgPDwgKDUpKSA+PiA4KSksCiAgX0lTcHJpbnQgPSAoKDYpIDwg OCA/ICgoMSA8PCAoNikpIDw8IDgpIDogKCgxIDw8ICg2KSkgPj4gOCkpLAogIF9JU2dyYXBoID0g KCg3KSA8IDggPyAoKDEgPDwgKDcpKSA8PCA4KSA6ICgoMSA8PCAoNykpID4+IDgpKSwKICBfSVNi bGFuayA9ICgoOCkgPCA4ID8gKCgxIDw8ICg4KSkgPDwgOCkgOiAoKDEgPDwgKDgpKSA+PiA4KSks CiAgX0lTY250cmwgPSAoKDkpIDwgOCA/ICgoMSA8PCAoOSkpIDw8IDgpIDogKCgxIDw8ICg5KSkg Pj4gOCkpLAogIF9JU3B1bmN0ID0gKCgxMCkgPCA4ID8gKCgxIDw8ICgxMCkpIDw8IDgpIDogKCgx IDw8ICgxMCkpID4+IDgpKSwKICBfSVNhbG51bSA9ICgoMTEpIDwgOCA/ICgoMSA8PCAoMTEpKSA8 PCA4KSA6ICgoMSA8PCAoMTEpKSA+PiA4KSkKfTsKIyA4MSAiL3Vzci9pbmNsdWRlL2N0eXBlLmgi IDMKZXh0ZXJuIF9fY29uc3QgdW5zaWduZWQgc2hvcnQgaW50ICoqX19jdHlwZV9iX2xvYyAodm9p ZCkKICAgICBfX2F0dHJpYnV0ZV9fICgoX19jb25zdCkpOwpleHRlcm4gX19jb25zdCBfX2ludDMy X3QgKipfX2N0eXBlX3RvbG93ZXJfbG9jICh2b2lkKQogICAgIF9fYXR0cmlidXRlX18gKChfX2Nv bnN0KSk7CmV4dGVybiBfX2NvbnN0IF9faW50MzJfdCAqKl9fY3R5cGVfdG91cHBlcl9sb2MgKHZv aWQpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3QpKTsKIyA5NiAiL3Vzci9pbmNsdWRlL2N0 eXBlLmgiIDMKCgoKCgoKZXh0ZXJuIGludCBpc2FsbnVtIChpbnQpIHRocm93ICgpOwpleHRlcm4g aW50IGlzYWxwaGEgKGludCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgaXNjbnRybCAoaW50KSB0aHJv dyAoKTsKZXh0ZXJuIGludCBpc2RpZ2l0IChpbnQpIHRocm93ICgpOwpleHRlcm4gaW50IGlzbG93 ZXIgKGludCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgaXNncmFwaCAoaW50KSB0aHJvdyAoKTsKZXh0 ZXJuIGludCBpc3ByaW50IChpbnQpIHRocm93ICgpOwpleHRlcm4gaW50IGlzcHVuY3QgKGludCkg dGhyb3cgKCk7CmV4dGVybiBpbnQgaXNzcGFjZSAoaW50KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBp c3VwcGVyIChpbnQpIHRocm93ICgpOwpleHRlcm4gaW50IGlzeGRpZ2l0IChpbnQpIHRocm93ICgp OwoKCgpleHRlcm4gaW50IHRvbG93ZXIgKGludCBfX2MpIHRocm93ICgpOwoKCmV4dGVybiBpbnQg dG91cHBlciAoaW50IF9fYykgdGhyb3cgKCk7CgoKCgoKCgoKZXh0ZXJuIGludCBpc2JsYW5rIChp bnQpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50IGlzY3R5cGUgKGludCBfX2MsIGludCBfX21h c2spIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50IGlzYXNjaWkgKGludCBfX2MpIHRocm93ICgp OwoKCgpleHRlcm4gaW50IHRvYXNjaWkgKGludCBfX2MpIHRocm93ICgpOwoKCgpleHRlcm4gaW50 IF90b3VwcGVyIChpbnQpIHRocm93ICgpOwpleHRlcm4gaW50IF90b2xvd2VyIChpbnQpIHRocm93 ICgpOwojIDI0NyAiL3Vzci9pbmNsdWRlL2N0eXBlLmgiIDMKZXh0ZXJuIGludCBpc2FsbnVtX2wg KGludCwgX19sb2NhbGVfdCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgaXNhbHBoYV9sIChpbnQsIF9f bG9jYWxlX3QpIHRocm93ICgpOwpleHRlcm4gaW50IGlzY250cmxfbCAoaW50LCBfX2xvY2FsZV90 KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBpc2RpZ2l0X2wgKGludCwgX19sb2NhbGVfdCkgdGhyb3cg KCk7CmV4dGVybiBpbnQgaXNsb3dlcl9sIChpbnQsIF9fbG9jYWxlX3QpIHRocm93ICgpOwpleHRl cm4gaW50IGlzZ3JhcGhfbCAoaW50LCBfX2xvY2FsZV90KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBp c3ByaW50X2wgKGludCwgX19sb2NhbGVfdCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgaXNwdW5jdF9s IChpbnQsIF9fbG9jYWxlX3QpIHRocm93ICgpOwpleHRlcm4gaW50IGlzc3BhY2VfbCAoaW50LCBf X2xvY2FsZV90KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBpc3VwcGVyX2wgKGludCwgX19sb2NhbGVf dCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgaXN4ZGlnaXRfbCAoaW50LCBfX2xvY2FsZV90KSB0aHJv dyAoKTsKCmV4dGVybiBpbnQgaXNibGFua19sIChpbnQsIF9fbG9jYWxlX3QpIHRocm93ICgpOwoK CgpleHRlcm4gaW50IF9fdG9sb3dlcl9sIChpbnQgX19jLCBfX2xvY2FsZV90IF9fbCkgdGhyb3cg KCk7CmV4dGVybiBpbnQgdG9sb3dlcl9sIChpbnQgX19jLCBfX2xvY2FsZV90IF9fbCkgdGhyb3cg KCk7CgoKZXh0ZXJuIGludCBfX3RvdXBwZXJfbCAoaW50IF9fYywgX19sb2NhbGVfdCBfX2wpIHRo cm93ICgpOwpleHRlcm4gaW50IHRvdXBwZXJfbCAoaW50IF9fYywgX19sb2NhbGVfdCBfX2wpIHRo cm93ICgpOwojIDMyMyAiL3Vzci9pbmNsdWRlL2N0eXBlLmgiIDMKfQojIDUwICIvdXNyL2luY2x1 ZGUvYysrLzMuMi9jY3R5cGUiIDIgMwojIDY2ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9jY3R5cGUi IDMKbmFtZXNwYWNlIHN0ZAp7CiAgdXNpbmcgOjppc2FsbnVtOwogIHVzaW5nIDo6aXNhbHBoYTsK ICB1c2luZyA6OmlzY250cmw7CiAgdXNpbmcgOjppc2RpZ2l0OwogIHVzaW5nIDo6aXNncmFwaDsK ICB1c2luZyA6OmlzbG93ZXI7CiAgdXNpbmcgOjppc3ByaW50OwogIHVzaW5nIDo6aXNwdW5jdDsK ICB1c2luZyA6Omlzc3BhY2U7CiAgdXNpbmcgOjppc3VwcGVyOwogIHVzaW5nIDo6aXN4ZGlnaXQ7 CiAgdXNpbmcgOjp0b2xvd2VyOwogIHVzaW5nIDo6dG91cHBlcjsKfQojIDQ5ICIvdXNyL2luY2x1 ZGUvYysrLzMuMi9iaXRzL2xvY2FsZWZ3ZC5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMu Mi9zdHJpbmciIDEgMwojIDQ0ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9zdHJpbmciIDMKCgoKCiMg MSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvbWVtb3J5IiAxIDMKIyA1MyAiL3Vzci9pbmNsdWRlL2Mr Ky8zLjIvbWVtb3J5IiAzCgojIDEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ29i YXNlLmgiIDEgMwojIDY3ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvYmFzZS5o IiAzCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvY3N0ZGxpYiIgMSAzCiMgNDggIi91c3IvaW5j bHVkZS9jKysvMy4yL2NzdGRsaWIiIDMKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAx IDMKIyAzMyAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9p Mzg2LWxpbnV4LzMuMi4zL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDM0ICIvdXNyL2luY2x1ZGUv c3RkbGliLmgiIDIgMwoKZXh0ZXJuICJDIiB7CgoKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMv d2FpdGZsYWdzLmgiIDEgMwojIDQzICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDIgMwojIDEgIi91 c3IvaW5jbHVkZS9iaXRzL3dhaXRzdGF0dXMuaCIgMSAzCiMgNjUgIi91c3IvaW5jbHVkZS9iaXRz L3dhaXRzdGF0dXMuaCIgMwp1bmlvbiB3YWl0CiAgewogICAgaW50IHdfc3RhdHVzOwogICAgc3Ry dWN0CiAgICAgIHsKCiAgICAgICAgdW5zaWduZWQgaW50IF9fd190ZXJtc2lnOjc7CiAgICAgICAg dW5zaWduZWQgaW50IF9fd19jb3JlZHVtcDoxOwogICAgICAgIHVuc2lnbmVkIGludCBfX3dfcmV0 Y29kZTo4OwogICAgICAgIHVuc2lnbmVkIGludDoxNjsKCgoKCgoKCiAgICAgIH0gX193YWl0X3Rl cm1pbmF0ZWQ7CiAgICBzdHJ1Y3QKICAgICAgewoKICAgICAgICB1bnNpZ25lZCBpbnQgX193X3N0 b3B2YWw6ODsKICAgICAgICB1bnNpZ25lZCBpbnQgX193X3N0b3BzaWc6ODsKICAgICAgICB1bnNp Z25lZCBpbnQ6MTY7CgoKCgoKCiAgICAgIH0gX193YWl0X3N0b3BwZWQ7CiAgfTsKIyA0NCAiL3Vz ci9pbmNsdWRlL3N0ZGxpYi5oIiAyIDMKIyA5MyAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCgoK dHlwZWRlZiBzdHJ1Y3QKICB7CiAgICBpbnQgcXVvdDsKICAgIGludCByZW07CiAgfSBkaXZfdDsK CgoKdHlwZWRlZiBzdHJ1Y3QKICB7CiAgICBsb25nIGludCBxdW90OwogICAgbG9uZyBpbnQgcmVt OwogIH0gbGRpdl90OwoKCgoKCgoKX19leHRlbnNpb25fXyB0eXBlZGVmIHN0cnVjdAogIHsKICAg IGxvbmcgbG9uZyBpbnQgcXVvdDsKICAgIGxvbmcgbG9uZyBpbnQgcmVtOwogIH0gbGxkaXZfdDsK CgojIDEzNyAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBzaXplX3QgX19jdHlwZV9n ZXRfbWJfY3VyX21heCAodm9pZCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gZG91YmxlIGF0b2YgKF9f Y29uc3QgY2hhciAqX19ucHRyKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsK CmV4dGVybiBpbnQgYXRvaSAoX19jb25zdCBjaGFyICpfX25wdHIpIHRocm93ICgpIF9fYXR0cmli dXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIGxvbmcgaW50IGF0b2wgKF9fY29uc3QgY2hhciAq X19ucHRyKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKCgpfX2V4dGVu c2lvbl9fIGV4dGVybiBsb25nIGxvbmcgaW50IGF0b2xsIChfX2NvbnN0IGNoYXIgKl9fbnB0cikK ICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKCgpleHRlcm4gZG91 YmxlIHN0cnRvZCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAg ICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyKSB0aHJvdyAoKTsKCgoKCgpleHRl cm4gZmxvYXQgc3RydG9mIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAg ICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0cikgdGhyb3cgKCk7CgpleHRl cm4gbG9uZyBkb3VibGUgc3RydG9sZCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyKSB0 aHJvdyAoKTsKCgoKCgpleHRlcm4gbG9uZyBpbnQgc3RydG9sIChfX2NvbnN0IGNoYXIgKl9fcmVz dHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBf X2VuZHB0ciwgaW50IF9fYmFzZSkgdGhyb3cgKCk7CgpleHRlcm4gdW5zaWduZWQgbG9uZyBpbnQg c3RydG91bCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNl KQogICAgIHRocm93ICgpOwoKCgoKX19leHRlbnNpb25fXwpleHRlcm4gbG9uZyBsb25nIGludCBz dHJ0b3EgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpIHRocm93 ICgpOwoKX19leHRlbnNpb25fXwpleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGludCBzdHJ0b3Vx IChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkK ICAgICB0aHJvdyAoKTsKCgoKCgpfX2V4dGVuc2lvbl9fCmV4dGVybiBsb25nIGxvbmcgaW50IHN0 cnRvbGwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKSB0aHJv dyAoKTsKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgc3RydG91 bGwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFz ZSkKICAgICB0aHJvdyAoKTsKCiMgMjI5ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJu IGxvbmcgaW50IHN0cnRvbF9sIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAg ICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19i YXNlLAogICAgICAgICAgICAgICAgICAgICAgICAgIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgp OwoKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW50IHN0cnRvdWxfbCAoX19jb25zdCBjaGFyICpfX3Jl c3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAq Kl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGludCBfX2Jhc2UsIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoKX19leHRlbnNpb25fXwpl eHRlcm4gbG9uZyBsb25nIGludCBzdHJ0b2xsX2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBf X25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3Qg X19lbmRwdHIsIGludCBfX2Jhc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19s b2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7CgpfX2V4dGVuc2lvbl9fCmV4dGVybiB1bnNpZ25lZCBs b25nIGxvbmcgaW50IHN0cnRvdWxsX2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3Ry aWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp bnQgX19iYXNlLCBfX2xvY2FsZV90IF9fbG9jKQogICAgIHRocm93ICgpOwoKZXh0ZXJuIGRvdWJs ZSBzdHJ0b2RfbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAg ICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIF9fbG9jYWxlX3QgX19sb2Mp CiAgICAgdGhyb3cgKCk7CgpleHRlcm4gZmxvYXQgc3RydG9mX2wgKF9fY29uc3QgY2hhciAqX19y ZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3Qg X19lbmRwdHIsIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoKZXh0ZXJuIGxvbmcgZG91Ymxl IHN0cnRvbGRfbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoKCgoKCgpleHRl cm4gZG91YmxlIF9fc3RydG9kX2ludGVybmFsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19u cHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBf X2VuZHB0ciwgaW50IF9fZ3JvdXApCiAgICAgdGhyb3cgKCk7CmV4dGVybiBmbG9hdCBfX3N0cnRv Zl9pbnRlcm5hbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fZ3Jv dXApCiAgICAgdGhyb3cgKCk7CmV4dGVybiBsb25nIGRvdWJsZSBfX3N0cnRvbGRfaW50ZXJuYWwg KF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19ncm91cCkgdGhyb3cgKCk7CgpleHRlcm4g bG9uZyBpbnQgX19zdHJ0b2xfaW50ZXJuYWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25w dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3Qg X19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYmFzZSwg aW50IF9fZ3JvdXApIHRocm93ICgpOwoKCgpleHRlcm4gdW5zaWduZWQgbG9uZyBpbnQgX19zdHJ0 b3VsX2ludGVybmFsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2Vu ZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9f YmFzZSwgaW50IF9fZ3JvdXApIHRocm93ICgpOwoKCgoKX19leHRlbnNpb25fXwpleHRlcm4gbG9u ZyBsb25nIGludCBfX3N0cnRvbGxfaW50ZXJuYWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBf X25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9f cmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgaW50IF9fYmFzZSwgaW50IF9fZ3JvdXApIHRocm93ICgpOwoKCgpfX2V4dGVuc2lvbl9fCmV4 dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IF9fc3RydG91bGxfaW50ZXJuYWwgKF9fY29uc3Qg Y2hhciAqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IF9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYmFzZSwgaW50IF9fZ3Jv dXApCiAgICAgdGhyb3cgKCk7CiMgNDA4ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJu IGNoYXIgKmw2NGEgKGxvbmcgaW50IF9fbikgdGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcgaW50IGE2 NGwgKF9fY29uc3QgY2hhciAqX19zKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18p KTsKCgojIDEgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMSAzCiMgMjkgIi91c3IvaW5jbHVk ZS9zeXMvdHlwZXMuaCIgMwpleHRlcm4gIkMiIHsKCgoKCgp0eXBlZGVmIF9fdV9jaGFyIHVfY2hh cjsKdHlwZWRlZiBfX3Vfc2hvcnQgdV9zaG9ydDsKdHlwZWRlZiBfX3VfaW50IHVfaW50Owp0eXBl ZGVmIF9fdV9sb25nIHVfbG9uZzsKdHlwZWRlZiBfX3F1YWRfdCBxdWFkX3Q7CnR5cGVkZWYgX191 X3F1YWRfdCB1X3F1YWRfdDsKdHlwZWRlZiBfX2ZzaWRfdCBmc2lkX3Q7CgoKCgp0eXBlZGVmIF9f bG9mZl90IGxvZmZfdDsKCgoKdHlwZWRlZiBfX2lub190IGlub190OwoKCgoKCgp0eXBlZGVmIF9f aW5vNjRfdCBpbm82NF90OwoKCgoKdHlwZWRlZiBfX2Rldl90IGRldl90OwoKCgoKdHlwZWRlZiBf X2dpZF90IGdpZF90OwoKCgoKdHlwZWRlZiBfX21vZGVfdCBtb2RlX3Q7CgoKCgp0eXBlZGVmIF9f bmxpbmtfdCBubGlua190OwoKCgoKdHlwZWRlZiBfX3VpZF90IHVpZF90OwoKCgoKCnR5cGVkZWYg X19vZmZfdCBvZmZfdDsKCgoKCgoKdHlwZWRlZiBfX29mZjY0X3Qgb2ZmNjRfdDsKIyAxMDUgIi91 c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMwp0eXBlZGVmIF9faWRfdCBpZF90OwoKCgoKdHlwZWRl ZiBfX3NzaXplX3Qgc3NpemVfdDsKCgoKCgp0eXBlZGVmIF9fZGFkZHJfdCBkYWRkcl90Owp0eXBl ZGVmIF9fY2FkZHJfdCBjYWRkcl90OwoKCgoKCnR5cGVkZWYgX19rZXlfdCBrZXlfdDsKIyAxMzcg Ii91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMwp0eXBlZGVmIF9fdXNlY29uZHNfdCB1c2Vjb25k c190OwoKCgp0eXBlZGVmIF9fc3VzZWNvbmRzX3Qgc3VzZWNvbmRzX3Q7CgoKCgoKIyAxICIvdXNy L2xpYi9nY2MtbGliL2kzODYtbGludXgvMy4yLjMvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMTQ4 ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMwoKCgp0eXBlZGVmIHVuc2lnbmVkIGxvbmcg aW50IHVsb25nOwp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IGludCB1c2hvcnQ7CnR5cGVkZWYgdW5z aWduZWQgaW50IHVpbnQ7CiMgMTkxICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMKdHlwZWRl ZiBpbnQgaW50OF90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19RSV9fKSkpOwp0eXBlZGVm IGludCBpbnQxNl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19ISV9fKSkpOwp0eXBlZGVm IGludCBpbnQzMl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19TSV9fKSkpOwp0eXBlZGVm IGludCBpbnQ2NF90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19ESV9fKSkpOwoKCnR5cGVk ZWYgdW5zaWduZWQgaW50IHVfaW50OF90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19RSV9f KSkpOwp0eXBlZGVmIHVuc2lnbmVkIGludCB1X2ludDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9k ZV9fIChfX0hJX18pKSk7CnR5cGVkZWYgdW5zaWduZWQgaW50IHVfaW50MzJfdCBfX2F0dHJpYnV0 ZV9fICgoX19tb2RlX18gKF9fU0lfXykpKTsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdV9pbnQ2NF90 IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19ESV9fKSkpOwoKdHlwZWRlZiBpbnQgcmVnaXN0 ZXJfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fd29yZF9fKSkpOwojIDIxNiAiL3Vzci9p bmNsdWRlL3N5cy90eXBlcy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMSAz CiMgMzEgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0 cy9zZWxlY3QuaCIgMSAzCiMgMzIgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDIgMwoKCiMg MSAiL3Vzci9pbmNsdWRlL2JpdHMvc2lnc2V0LmgiIDEgMwojIDM1ICIvdXNyL2luY2x1ZGUvc3lz L3NlbGVjdC5oIiAyIDMKIyA0NiAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMwojIDEgIi91 c3IvaW5jbHVkZS9iaXRzL3RpbWUuaCIgMSAzCiMgNjcgIi91c3IvaW5jbHVkZS9iaXRzL3RpbWUu aCIgMwpzdHJ1Y3QgdGltZXZhbAogIHsKICAgIF9fdGltZV90IHR2X3NlYzsKICAgIF9fc3VzZWNv bmRzX3QgdHZfdXNlYzsKICB9OwojIDQ3ICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAyIDMK IyA1NSAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMwp0eXBlZGVmIGxvbmcgaW50IF9fZmRf bWFzazsKIyA2NyAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMwp0eXBlZGVmIHN0cnVjdAog IHsKCgoKICAgIF9fZmRfbWFzayBmZHNfYml0c1sxMDI0IC8gKDggKiBzaXplb2YgKF9fZmRfbWFz aykpXTsKCgoKCgogIH0gZmRfc2V0OwoKCgoKCgp0eXBlZGVmIF9fZmRfbWFzayBmZF9tYXNrOwoj IDk5ICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAzCmV4dGVybiAiQyIgewoKCgoKCgpleHRl cm4gaW50IHNlbGVjdCAoaW50IF9fbmZkcywgZmRfc2V0ICpfX3Jlc3RyaWN0IF9fcmVhZGZkcywK ICAgICAgICAgICAgICAgICAgIGZkX3NldCAqX19yZXN0cmljdCBfX3dyaXRlZmRzLAogICAgICAg ICAgICAgICAgICAgZmRfc2V0ICpfX3Jlc3RyaWN0IF9fZXhjZXB0ZmRzLAogICAgICAgICAgICAg ICAgICAgc3RydWN0IHRpbWV2YWwgKl9fcmVzdHJpY3QgX190aW1lb3V0KSB0aHJvdyAoKTsKCgoK CgpleHRlcm4gaW50IHBzZWxlY3QgKGludCBfX25mZHMsIGZkX3NldCAqX19yZXN0cmljdCBfX3Jl YWRmZHMsCiAgICAgICAgICAgICAgICAgICAgZmRfc2V0ICpfX3Jlc3RyaWN0IF9fd3JpdGVmZHMs CiAgICAgICAgICAgICAgICAgICAgZmRfc2V0ICpfX3Jlc3RyaWN0IF9fZXhjZXB0ZmRzLAogICAg ICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCB0aW1lc3BlYyAqX19yZXN0cmljdCBfX3RpbWVv dXQsCiAgICAgICAgICAgICAgICAgICAgY29uc3QgX19zaWdzZXRfdCAqX19yZXN0cmljdCBfX3Np Z21hc2spIHRocm93ICgpOwoKCn0KIyAyMTcgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMiAz CgoKIyAxICIvdXNyL2luY2x1ZGUvc3lzL3N5c21hY3Jvcy5oIiAxIDMKIyAyMjAgIi91c3IvaW5j bHVkZS9zeXMvdHlwZXMuaCIgMiAzCgoKCgp0eXBlZGVmIF9fYmxrc2l6ZV90IGJsa3NpemVfdDsK CgoKCgoKdHlwZWRlZiBfX2Jsa2NudF90IGJsa2NudF90OwoKCgp0eXBlZGVmIF9fZnNibGtjbnRf dCBmc2Jsa2NudF90OwoKCgp0eXBlZGVmIF9fZnNmaWxjbnRfdCBmc2ZpbGNudF90OwojIDI1OCAi L3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAzCnR5cGVkZWYgX19ibGtjbnQ2NF90IGJsa2NudDY0 X3Q7CnR5cGVkZWYgX19mc2Jsa2NudDY0X3QgZnNibGtjbnQ2NF90Owp0eXBlZGVmIF9fZnNmaWxj bnQ2NF90IGZzZmlsY250NjRfdDsKCgoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3B0aHJlYWR0 eXBlcy5oIiAxIDMKIyAyNjcgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMiAzCgoKfQojIDQx NSAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAyIDMKCgoKCgoKZXh0ZXJuIGxvbmcgaW50IHJhbmRv bSAodm9pZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIHZvaWQgc3JhbmRvbSAodW5zaWduZWQgaW50IF9f c2VlZCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGNoYXIgKmluaXRzdGF0ZSAodW5zaWduZWQgaW50 IF9fc2VlZCwgY2hhciAqX19zdGF0ZWJ1ZiwKICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90 IF9fc3RhdGVsZW4pIHRocm93ICgpOwoKCgpleHRlcm4gY2hhciAqc2V0c3RhdGUgKGNoYXIgKl9f c3RhdGVidWYpIHRocm93ICgpOwoKCgoKCgoKc3RydWN0IHJhbmRvbV9kYXRhCiAgewogICAgaW50 MzJfdCAqZnB0cjsKICAgIGludDMyX3QgKnJwdHI7CiAgICBpbnQzMl90ICpzdGF0ZTsKICAgIGlu dCByYW5kX3R5cGU7CiAgICBpbnQgcmFuZF9kZWc7CiAgICBpbnQgcmFuZF9zZXA7CiAgICBpbnQz Ml90ICplbmRfcHRyOwogIH07CgpleHRlcm4gaW50IHJhbmRvbV9yIChzdHJ1Y3QgcmFuZG9tX2Rh dGEgKl9fcmVzdHJpY3QgX19idWYsCiAgICAgICAgICAgICAgICAgICAgIGludDMyX3QgKl9fcmVz dHJpY3QgX19yZXN1bHQpIHRocm93ICgpOwoKZXh0ZXJuIGludCBzcmFuZG9tX3IgKHVuc2lnbmVk IGludCBfX3NlZWQsIHN0cnVjdCByYW5kb21fZGF0YSAqX19idWYpIHRocm93ICgpOwoKZXh0ZXJu IGludCBpbml0c3RhdGVfciAodW5zaWduZWQgaW50IF9fc2VlZCwgY2hhciAqX19yZXN0cmljdCBf X3N0YXRlYnVmLAogICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19zdGF0ZWxlbiwKICAg ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHJhbmRvbV9kYXRhICpfX3Jlc3RyaWN0IF9fYnVm KSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgc2V0c3RhdGVfciAoY2hhciAqX19yZXN0cmljdCBfX3N0 YXRlYnVmLAogICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCByYW5kb21fZGF0YSAqX19yZXN0 cmljdCBfX2J1ZikgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgcmFuZCAodm9pZCkgdGhyb3cg KCk7CgpleHRlcm4gdm9pZCBzcmFuZCAodW5zaWduZWQgaW50IF9fc2VlZCkgdGhyb3cgKCk7CgoK CgpleHRlcm4gaW50IHJhbmRfciAodW5zaWduZWQgaW50ICpfX3NlZWQpIHRocm93ICgpOwoKCgoK CgoKZXh0ZXJuIGRvdWJsZSBkcmFuZDQ4ICh2b2lkKSB0aHJvdyAoKTsKZXh0ZXJuIGRvdWJsZSBl cmFuZDQ4ICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVszXSkgdGhyb3cgKCk7CgoKZXh0ZXJu IGxvbmcgaW50IGxyYW5kNDggKHZvaWQpIHRocm93ICgpOwpleHRlcm4gbG9uZyBpbnQgbnJhbmQ0 OCAodW5zaWduZWQgc2hvcnQgaW50IF9feHN1YmlbM10pIHRocm93ICgpOwoKCmV4dGVybiBsb25n IGludCBtcmFuZDQ4ICh2b2lkKSB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcgaW50IGpyYW5kNDggKHVu c2lnbmVkIHNob3J0IGludCBfX3hzdWJpWzNdKSB0aHJvdyAoKTsKCgpleHRlcm4gdm9pZCBzcmFu ZDQ4IChsb25nIGludCBfX3NlZWR2YWwpIHRocm93ICgpOwpleHRlcm4gdW5zaWduZWQgc2hvcnQg aW50ICpzZWVkNDggKHVuc2lnbmVkIHNob3J0IGludCBfX3NlZWQxNnZbM10pIHRocm93ICgpOwpl eHRlcm4gdm9pZCBsY29uZzQ4ICh1bnNpZ25lZCBzaG9ydCBpbnQgX19wYXJhbVs3XSkgdGhyb3cg KCk7CgoKCgoKc3RydWN0IGRyYW5kNDhfZGF0YQogIHsKICAgIHVuc2lnbmVkIHNob3J0IGludCBf X3hbM107CiAgICB1bnNpZ25lZCBzaG9ydCBpbnQgX19vbGRfeFszXTsKICAgIHVuc2lnbmVkIHNo b3J0IGludCBfX2M7CiAgICB1bnNpZ25lZCBzaG9ydCBpbnQgX19pbml0OwogICAgdW5zaWduZWQg bG9uZyBsb25nIGludCBfX2E7CiAgfTsKCgpleHRlcm4gaW50IGRyYW5kNDhfciAoc3RydWN0IGRy YW5kNDhfZGF0YSAqX19yZXN0cmljdCBfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgIGRv dWJsZSAqX19yZXN0cmljdCBfX3Jlc3VsdCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgZXJhbmQ0OF9y ICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVszXSwKICAgICAgICAgICAgICAgICAgICAgIHN0 cnVjdCBkcmFuZDQ4X2RhdGEgKl9fcmVzdHJpY3QgX19idWZmZXIsCiAgICAgICAgICAgICAgICAg ICAgICBkb3VibGUgKl9fcmVzdHJpY3QgX19yZXN1bHQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQg bHJhbmQ0OF9yIChzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmZmVyLAogICAg ICAgICAgICAgICAgICAgICAgbG9uZyBpbnQgKl9fcmVzdHJpY3QgX19yZXN1bHQpIHRocm93ICgp OwpleHRlcm4gaW50IG5yYW5kNDhfciAodW5zaWduZWQgc2hvcnQgaW50IF9feHN1YmlbM10sCiAg ICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX3Jlc3RyaWN0IF9fYnVm ZmVyLAogICAgICAgICAgICAgICAgICAgICAgbG9uZyBpbnQgKl9fcmVzdHJpY3QgX19yZXN1bHQp IHRocm93ICgpOwoKCmV4dGVybiBpbnQgbXJhbmQ0OF9yIChzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpf X3Jlc3RyaWN0IF9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgbG9uZyBpbnQgKl9fcmVz dHJpY3QgX19yZXN1bHQpIHRocm93ICgpOwpleHRlcm4gaW50IGpyYW5kNDhfciAodW5zaWduZWQg c2hvcnQgaW50IF9feHN1YmlbM10sCiAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZHJhbmQ0 OF9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgbG9uZyBp bnQgKl9fcmVzdHJpY3QgX19yZXN1bHQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgc3JhbmQ0OF9y IChsb25nIGludCBfX3NlZWR2YWwsIHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fYnVmZmVyKQogICAg IHRocm93ICgpOwoKZXh0ZXJuIGludCBzZWVkNDhfciAodW5zaWduZWQgc2hvcnQgaW50IF9fc2Vl ZDE2dlszXSwKICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19idWZm ZXIpIHRocm93ICgpOwoKZXh0ZXJuIGludCBsY29uZzQ4X3IgKHVuc2lnbmVkIHNob3J0IGludCBf X3BhcmFtWzddLAogICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19i dWZmZXIpIHRocm93ICgpOwoKCgoKCgoKCgpleHRlcm4gdm9pZCAqbWFsbG9jIChzaXplX3QgX19z aXplKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwoKZXh0ZXJuIHZvaWQg KmNhbGxvYyAoc2l6ZV90IF9fbm1lbWIsIHNpemVfdCBfX3NpemUpCiAgICAgdGhyb3cgKCkgX19h dHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKCgoKCgoKCmV4dGVybiB2b2lkICpyZWFsbG9jICh2 b2lkICpfX3B0ciwgc2l6ZV90IF9fc2l6ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbWFs bG9jX18pKTsKCmV4dGVybiB2b2lkIGZyZWUgKHZvaWQgKl9fcHRyKSB0aHJvdyAoKTsKCgoKCmV4 dGVybiB2b2lkIGNmcmVlICh2b2lkICpfX3B0cikgdGhyb3cgKCk7CgoKCiMgMSAiL3Vzci9pbmNs dWRlL2FsbG9jYS5oIiAxIDMKIyAyNSAiL3Vzci9pbmNsdWRlL2FsbG9jYS5oIiAzCiMgMSAiL3Vz ci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzMuMi4zL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDI2 ICIvdXNyL2luY2x1ZGUvYWxsb2NhLmgiIDIgMwoKZXh0ZXJuICJDIiB7CgoKCgoKZXh0ZXJuIHZv aWQgKmFsbG9jYSAoc2l6ZV90IF9fc2l6ZSkgdGhyb3cgKCk7CgoKCgoKfQojIDU3NyAiL3Vzci9p bmNsdWRlL3N0ZGxpYi5oIiAyIDMKCgoKCmV4dGVybiB2b2lkICp2YWxsb2MgKHNpemVfdCBfX3Np emUpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7CgoKCgpleHRlcm4gaW50 IHBvc2l4X21lbWFsaWduICh2b2lkICoqX19tZW1wdHIsIHNpemVfdCBfX2FsaWdubWVudCwgc2l6 ZV90IF9fc2l6ZSkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwoK CgoKZXh0ZXJuIHZvaWQgYWJvcnQgKHZvaWQpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX25v cmV0dXJuX18pKTsKCgoKZXh0ZXJuIGludCBhdGV4aXQgKHZvaWQgKCpfX2Z1bmMpICh2b2lkKSkg dGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBvbl9leGl0ICh2b2lkICgqX19mdW5jKSAoaW50IF9f c3RhdHVzLCB2b2lkICpfX2FyZyksIHZvaWQgKl9fYXJnKQogICAgIHRocm93ICgpOwoKCgoKCgpl eHRlcm4gdm9pZCBleGl0IChpbnQgX19zdGF0dXMpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChf X25vcmV0dXJuX18pKTsKCgoKCgoKZXh0ZXJuIHZvaWQgX0V4aXQgKGludCBfX3N0YXR1cykgdGhy b3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKCgoKCgpleHRlcm4gY2hhciAq Z2V0ZW52IChfX2NvbnN0IGNoYXIgKl9fbmFtZSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hhciAq X19zZWN1cmVfZ2V0ZW52IChfX2NvbnN0IGNoYXIgKl9fbmFtZSkgdGhyb3cgKCk7CgoKCgoKZXh0 ZXJuIGludCBwdXRlbnYgKGNoYXIgKl9fc3RyaW5nKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50 IHNldGVudiAoX19jb25zdCBjaGFyICpfX25hbWUsIF9fY29uc3QgY2hhciAqX192YWx1ZSwgaW50 IF9fcmVwbGFjZSkKICAgICB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHVuc2V0ZW52IChfX2NvbnN0 IGNoYXIgKl9fbmFtZSkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgY2xlYXJlbnYgKHZvaWQp IHRocm93ICgpOwojIDY2MSAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBjaGFyICpt a3RlbXAgKGNoYXIgKl9fdGVtcGxhdGUpIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIGludCBta3N0 ZW1wIChjaGFyICpfX3RlbXBsYXRlKSB0aHJvdyAoKTsKIyA2NzggIi91c3IvaW5jbHVkZS9zdGRs aWIuaCIgMwpleHRlcm4gaW50IG1rc3RlbXA2NCAoY2hhciAqX190ZW1wbGF0ZSkgdGhyb3cgKCk7 CiMgNjg4ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIGNoYXIgKm1rZHRlbXAgKGNo YXIgKl9fdGVtcGxhdGUpIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgc3lzdGVtIChfX2NvbnN0 IGNoYXIgKl9fY29tbWFuZCkgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gY2hhciAqY2Fub25pY2Fs aXplX2ZpbGVfbmFtZSAoX19jb25zdCBjaGFyICpfX25hbWUpIHRocm93ICgpOwojIDcxMiAiL3Vz ci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBjaGFyICpyZWFscGF0aCAoX19jb25zdCBjaGFy ICpfX3Jlc3RyaWN0IF9fbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpfX3Jlc3Ry aWN0IF9fcmVzb2x2ZWQpIHRocm93ICgpOwoKCgoKCgp0eXBlZGVmIGludCAoKl9fY29tcGFyX2Zu X3QpIChfX2NvbnN0IHZvaWQgKiwgX19jb25zdCB2b2lkICopOwoKCnR5cGVkZWYgX19jb21wYXJf Zm5fdCBjb21wYXJpc29uX2ZuX3Q7CgoKCgoKCmV4dGVybiB2b2lkICpic2VhcmNoIChfX2NvbnN0 IHZvaWQgKl9fa2V5LCBfX2NvbnN0IHZvaWQgKl9fYmFzZSwKICAgICAgICAgICAgICAgICAgICAg IHNpemVfdCBfX25tZW1iLCBzaXplX3QgX19zaXplLCBfX2NvbXBhcl9mbl90IF9fY29tcGFyKTsK CgoKZXh0ZXJuIHZvaWQgcXNvcnQgKHZvaWQgKl9fYmFzZSwgc2l6ZV90IF9fbm1lbWIsIHNpemVf dCBfX3NpemUsCiAgICAgICAgICAgICAgICAgICBfX2NvbXBhcl9mbl90IF9fY29tcGFyKTsKCgoK ZXh0ZXJuIGludCBhYnMgKGludCBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0 X18pKTsKZXh0ZXJuIGxvbmcgaW50IGxhYnMgKGxvbmcgaW50IF9feCkgdGhyb3cgKCkgX19hdHRy aWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgpfX2V4dGVuc2lvbl9fIGV4dGVybiBsb25nIGxvbmcg aW50IGxsYWJzIChsb25nIGxvbmcgaW50IF9feCkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9f ICgoX19jb25zdF9fKSk7CgoKCgoKCgpleHRlcm4gZGl2X3QgZGl2IChpbnQgX19udW1lciwgaW50 IF9fZGVub20pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwpleHRl cm4gbGRpdl90IGxkaXYgKGxvbmcgaW50IF9fbnVtZXIsIGxvbmcgaW50IF9fZGVub20pCiAgICAg dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKX19leHRlbnNpb25fXyBl eHRlcm4gbGxkaXZfdCBsbGRpdiAobG9uZyBsb25nIGludCBfX251bWVyLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBsb25nIGxvbmcgaW50IF9fZGVub20pCiAgICAgdGhyb3cg KCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKIyA3NzYgIi91c3IvaW5jbHVkZS9zdGRs aWIuaCIgMwpleHRlcm4gY2hhciAqZWN2dCAoZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwg aW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsCiAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJp Y3QgX19zaWduKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBjaGFyICpmY3Z0IChkb3VibGUgX192YWx1 ZSwgaW50IF9fbmRpZ2l0LCBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwKICAgICAgICAgICAgICAg ICAgIGludCAqX19yZXN0cmljdCBfX3NpZ24pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGNoYXIgKmdj dnQgKGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsIGNoYXIgKl9fYnVmKSB0aHJvdyAoKTsK CgoKCmV4dGVybiBjaGFyICpxZWN2dCAobG9uZyBkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0 LAogICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0cmljdCBfX2RlY3B0LCBpbnQgKl9fcmVz dHJpY3QgX19zaWduKSB0aHJvdyAoKTsKZXh0ZXJuIGNoYXIgKnFmY3Z0IChsb25nIGRvdWJsZSBf X3ZhbHVlLCBpbnQgX19uZGlnaXQsCiAgICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0 IF9fZGVjcHQsIGludCAqX19yZXN0cmljdCBfX3NpZ24pIHRocm93ICgpOwpleHRlcm4gY2hhciAq cWdjdnQgKGxvbmcgZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwgY2hhciAqX19idWYpIHRo cm93ICgpOwoKCgoKZXh0ZXJuIGludCBlY3Z0X3IgKGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGln aXQsIGludCAqX19yZXN0cmljdCBfX2RlY3B0LAogICAgICAgICAgICAgICAgICAgaW50ICpfX3Jl c3RyaWN0IF9fc2lnbiwgY2hhciAqX19yZXN0cmljdCBfX2J1ZiwKICAgICAgICAgICAgICAgICAg IHNpemVfdCBfX2xlbikgdGhyb3cgKCk7CmV4dGVybiBpbnQgZmN2dF9yIChkb3VibGUgX192YWx1 ZSwgaW50IF9fbmRpZ2l0LCBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwKICAgICAgICAgICAgICAg ICAgIGludCAqX19yZXN0cmljdCBfX3NpZ24sIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsCiAgICAg ICAgICAgICAgICAgICBzaXplX3QgX19sZW4pIHRocm93ICgpOwoKZXh0ZXJuIGludCBxZWN2dF9y IChsb25nIGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsCiAgICAgICAgICAgICAgICAgICAg aW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsIGludCAqX19yZXN0cmljdCBfX3NpZ24sCiAgICAgICAg ICAgICAgICAgICAgY2hhciAqX19yZXN0cmljdCBfX2J1Ziwgc2l6ZV90IF9fbGVuKSB0aHJvdyAo KTsKZXh0ZXJuIGludCBxZmN2dF9yIChsb25nIGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQs CiAgICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsIGludCAqX19yZXN0 cmljdCBfX3NpZ24sCiAgICAgICAgICAgICAgICAgICAgY2hhciAqX19yZXN0cmljdCBfX2J1Ziwg c2l6ZV90IF9fbGVuKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBpbnQgbWJsZW4gKF9fY29uc3Qg Y2hhciAqX19zLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IG1idG93YyAod2No YXJfdCAqX19yZXN0cmljdCBfX3B3YywKICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAq X19yZXN0cmljdCBfX3MsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgd2N0b21i IChjaGFyICpfX3MsIHdjaGFyX3QgX193Y2hhcikgdGhyb3cgKCk7CgoKCmV4dGVybiBzaXplX3Qg bWJzdG93Y3MgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19wd2NzLAogICAgICAgICAgICAgICAgICAg ICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19uKSB0aHJvdyAoKTsK CmV4dGVybiBzaXplX3Qgd2NzdG9tYnMgKGNoYXIgKl9fcmVzdHJpY3QgX19zLAogICAgICAgICAg ICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19wd2NzLCBzaXplX3Qg X19uKQogICAgIHRocm93ICgpOwoKCgoKCgoKCmV4dGVybiBpbnQgcnBtYXRjaCAoX19jb25zdCBj aGFyICpfX3Jlc3BvbnNlKSB0aHJvdyAoKTsKIyA4NTggIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIg MwpleHRlcm4gaW50IGdldHN1Ym9wdCAoY2hhciAqKl9fcmVzdHJpY3QgX19vcHRpb25wLAogICAg ICAgICAgICAgICAgICAgICAgY2hhciAqX19jb25zdCAqX19yZXN0cmljdCBfX3Rva2VucywKICAg ICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fdmFsdWVwKSB0aHJvdyAoKTsK CgoKCgpleHRlcm4gdm9pZCBzZXRrZXkgKF9fY29uc3QgY2hhciAqX19rZXkpIHRocm93ICgpOwoK CgoKCgoKZXh0ZXJuIGludCBwb3NpeF9vcGVucHQgKGludCBfX29mbGFnKSB0aHJvdyAoKTsKCgoK CgoKCmV4dGVybiBpbnQgZ3JhbnRwdCAoaW50IF9fZmQpIHRocm93ICgpOwoKCgpleHRlcm4gaW50 IHVubG9ja3B0IChpbnQgX19mZCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hhciAqcHRzbmFtZSAo aW50IF9fZmQpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50IHB0c25hbWVfciAoaW50IF9fZmQs IGNoYXIgKl9fYnVmLCBzaXplX3QgX19idWZsZW4pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgZ2V0 cHQgKHZvaWQpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50IGdldGxvYWRhdmcgKGRvdWJsZSBf X2xvYWRhdmdbXSwgaW50IF9fbmVsZW0pIHRocm93ICgpOwoKCgoKCn0KIyA1MyAiL3Vzci9pbmNs dWRlL2MrKy8zLjIvY3N0ZGxpYiIgMiAzCiMgODQgIi91c3IvaW5jbHVkZS9jKysvMy4yL2NzdGRs aWIiIDMKbmFtZXNwYWNlIHN0ZAp7CiAgdXNpbmcgOjpkaXZfdDsKICB1c2luZyA6OmxkaXZfdDsK CiAgdXNpbmcgOjphYm9ydDsKICB1c2luZyA6OmFiczsKICB1c2luZyA6OmF0ZXhpdDsKICB1c2lu ZyA6OmF0b2Y7CiAgdXNpbmcgOjphdG9pOwogIHVzaW5nIDo6YXRvbDsKICB1c2luZyA6OmJzZWFy Y2g7CiAgdXNpbmcgOjpjYWxsb2M7CiAgdXNpbmcgOjpkaXY7CiAgdXNpbmcgOjpleGl0OwogIHVz aW5nIDo6ZnJlZTsKICB1c2luZyA6OmdldGVudjsKICB1c2luZyA6OmxhYnM7CiAgdXNpbmcgOjps ZGl2OwogIHVzaW5nIDo6bWFsbG9jOwogIHVzaW5nIDo6bWJsZW47CiAgdXNpbmcgOjptYnN0b3dj czsKICB1c2luZyA6Om1idG93YzsKICB1c2luZyA6OnFzb3J0OwogIHVzaW5nIDo6cmFuZDsKICB1 c2luZyA6OnJlYWxsb2M7CiAgdXNpbmcgOjpzcmFuZDsKICB1c2luZyA6OnN0cnRvZDsKICB1c2lu ZyA6OnN0cnRvbDsKICB1c2luZyA6OnN0cnRvdWw7CiAgdXNpbmcgOjpzeXN0ZW07CiAgdXNpbmcg Ojp3Y3N0b21iczsKICB1c2luZyA6OndjdG9tYjsKCiAgaW5saW5lIGxvbmcKICBhYnMobG9uZyBf X2kpIHsgcmV0dXJuIGxhYnMoX19pKTsgfQoKICBpbmxpbmUgbGRpdl90CiAgZGl2KGxvbmcgX19p LCBsb25nIF9faikgeyByZXR1cm4gbGRpdihfX2ksIF9faik7IH0KfQojIDEzNiAiL3Vzci9pbmNs dWRlL2MrKy8zLjIvY3N0ZGxpYiIgMwpuYW1lc3BhY2UgX19nbnVfY3h4CnsKICB1c2luZyA6Omxs ZGl2X3Q7CiAgdXNpbmcgOjpfRXhpdDsKCiAgaW5saW5lIGxvbmcgbG9uZwogIGFicyhsb25nIGxv bmcgX194KSB7IHJldHVybiBfX3ggPj0gMCA/IF9feCA6IC1fX3g7IH0KCiAgaW5saW5lIGxvbmcg bG9uZwogIGxsYWJzKGxvbmcgbG9uZyBfX3gpIHsgcmV0dXJuIF9feCA+PSAwID8gX194IDogLV9f eDsgfQoKICBpbmxpbmUgbGxkaXZfdAogIGRpdihsb25nIGxvbmcgX19uLCBsb25nIGxvbmcgX19k KQogIHsgbGxkaXZfdCBfX3E7IF9fcS5xdW90ID0gX19uIC8gX19kOyBfX3EucmVtID0gX19uICUg X19kOyByZXR1cm4gX19xOyB9CgogIGlubGluZSBsbGRpdl90CiAgbGxkaXYobG9uZyBsb25nIF9f biwgbG9uZyBsb25nIF9fZCkKICB7IGxsZGl2X3QgX19xOyBfX3EucXVvdCA9IF9fbiAvIF9fZDsg X19xLnJlbSA9IF9fbiAlIF9fZDsgcmV0dXJuIF9fcTsgfQoKICB1c2luZyA6OmF0b2xsOwogIHVz aW5nIDo6c3RydG9mOwogIHVzaW5nIDo6c3RydG9sbDsKICB1c2luZyA6OnN0cnRvdWxsOwogIHVz aW5nIDo6c3RydG9sZDsKfQoKbmFtZXNwYWNlIHN0ZAp7CiAgdXNpbmcgX19nbnVfY3h4OjpsbGRp dl90OwogIHVzaW5nIF9fZ251X2N4eDo6X0V4aXQ7CiAgdXNpbmcgX19nbnVfY3h4OjphYnM7CiAg dXNpbmcgX19nbnVfY3h4OjpsbGFiczsKICB1c2luZyBfX2dudV9jeHg6OmRpdjsKICB1c2luZyBf X2dudV9jeHg6OmxsZGl2OwogIHVzaW5nIF9fZ251X2N4eDo6YXRvbGw7CiAgdXNpbmcgX19nbnVf Y3h4OjpzdHJ0b2Y7CiAgdXNpbmcgX19nbnVfY3h4OjpzdHJ0b2xsOwogIHVzaW5nIF9fZ251X2N4 eDo6c3RydG91bGw7CiAgdXNpbmcgX19nbnVfY3h4OjpzdHJ0b2xkOwp9CiMgNjggIi91c3IvaW5j bHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDIgMwoKIyAxICIvdXNyL2luY2x1ZGUv YysrLzMuMi9uZXciIDEgMwojIDQ0ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9uZXciIDMKZXh0ZXJu ICJDKysiIHsKCm5hbWVzcGFjZSBzdGQKewoKCiAgY2xhc3MgYmFkX2FsbG9jIDogcHVibGljIGV4 Y2VwdGlvbgogIHsKICBwdWJsaWM6CiAgICBiYWRfYWxsb2MoKSB0aHJvdygpIHsgfQoKCiAgICB2 aXJ0dWFsIH5iYWRfYWxsb2MoKSB0aHJvdygpOwogIH07CgogIHN0cnVjdCBub3Rocm93X3QgeyB9 OwogIGV4dGVybiBjb25zdCBub3Rocm93X3Qgbm90aHJvdzsKCgogIHR5cGVkZWYgdm9pZCAoKm5l d19oYW5kbGVyKSgpOwoKICBuZXdfaGFuZGxlciBzZXRfbmV3X2hhbmRsZXIobmV3X2hhbmRsZXIp IHRocm93KCk7Cn0KIyA3OSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvbmV3IiAzCnZvaWQqIG9wZXJh dG9yIG5ldyhzdGQ6OnNpemVfdCkgdGhyb3cgKHN0ZDo6YmFkX2FsbG9jKTsKdm9pZCogb3BlcmF0 b3IgbmV3W10oc3RkOjpzaXplX3QpIHRocm93IChzdGQ6OmJhZF9hbGxvYyk7CnZvaWQgb3BlcmF0 b3IgZGVsZXRlKHZvaWQqKSB0aHJvdygpOwp2b2lkIG9wZXJhdG9yIGRlbGV0ZVtdKHZvaWQqKSB0 aHJvdygpOwp2b2lkKiBvcGVyYXRvciBuZXcoc3RkOjpzaXplX3QsIGNvbnN0IHN0ZDo6bm90aHJv d190JikgdGhyb3coKTsKdm9pZCogb3BlcmF0b3IgbmV3W10oc3RkOjpzaXplX3QsIGNvbnN0IHN0 ZDo6bm90aHJvd190JikgdGhyb3coKTsKdm9pZCBvcGVyYXRvciBkZWxldGUodm9pZCosIGNvbnN0 IHN0ZDo6bm90aHJvd190JikgdGhyb3coKTsKdm9pZCBvcGVyYXRvciBkZWxldGVbXSh2b2lkKiwg Y29uc3Qgc3RkOjpub3Rocm93X3QmKSB0aHJvdygpOwoKCmlubGluZSB2b2lkKiBvcGVyYXRvciBu ZXcoc3RkOjpzaXplX3QsIHZvaWQqIF9fcCkgdGhyb3coKSB7IHJldHVybiBfX3A7IH0KaW5saW5l IHZvaWQqIG9wZXJhdG9yIG5ld1tdKHN0ZDo6c2l6ZV90LCB2b2lkKiBfX3ApIHRocm93KCkgeyBy ZXR1cm4gX19wOyB9CgoKaW5saW5lIHZvaWQgb3BlcmF0b3IgZGVsZXRlICh2b2lkKiwgdm9pZCop IHRocm93KCkgeyB9OwppbmxpbmUgdm9pZCBvcGVyYXRvciBkZWxldGVbXSh2b2lkKiwgdm9pZCop IHRocm93KCkgeyB9OwoKfQojIDcwICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdv YmFzZS5oIiAyIDMKCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfcGFpci5oIiAx IDMKIyA2NCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfcGFpci5oIiAzCm5hbWVzcGFj ZSBzdGQKewoKCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4Kc3RydWN0IHBhaXIgewog IHR5cGVkZWYgX1QxIGZpcnN0X3R5cGU7CiAgdHlwZWRlZiBfVDIgc2Vjb25kX3R5cGU7CgogIF9U MSBmaXJzdDsKICBfVDIgc2Vjb25kOwoKCgoKICBwYWlyKCkgOiBmaXJzdCgpLCBzZWNvbmQoKSB7 fQoKCgoKICBwYWlyKGNvbnN0IF9UMSYgX19hLCBjb25zdCBfVDImIF9fYikgOiBmaXJzdChfX2Ep LCBzZWNvbmQoX19iKSB7fQoKCiAgdGVtcGxhdGUgPGNsYXNzIF9VMSwgY2xhc3MgX1UyPgogIHBh aXIoY29uc3QgcGFpcjxfVTEsIF9VMj4mIF9fcCkgOiBmaXJzdChfX3AuZmlyc3QpLCBzZWNvbmQo X19wLnNlY29uZCkge30KfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CmlubGlu ZSBib29sIG9wZXJhdG9yPT0oY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feCwgY29uc3QgcGFpcjxf VDEsIF9UMj4mIF9feSkKewogIHJldHVybiBfX3guZmlyc3QgPT0gX195LmZpcnN0ICYmIF9feC5z ZWNvbmQgPT0gX195LnNlY29uZDsKfQoKCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4K aW5saW5lIGJvb2wgb3BlcmF0b3I8KGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3gsIGNvbnN0IHBh aXI8X1QxLCBfVDI+JiBfX3kpCnsKICByZXR1cm4gX194LmZpcnN0IDwgX195LmZpcnN0IHx8CiAg ICAgICAgICghKF9feS5maXJzdCA8IF9feC5maXJzdCkgJiYgX194LnNlY29uZCA8IF9feS5zZWNv bmQpOwp9CgoKdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgppbmxpbmUgYm9vbCBvcGVy YXRvciE9KGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3gsIGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBf X3kpIHsKICByZXR1cm4gIShfX3ggPT0gX195KTsKfQoKCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNs YXNzIF9UMj4KaW5saW5lIGJvb2wgb3BlcmF0b3I+KGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3gs IGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3kpIHsKICByZXR1cm4gX195IDwgX194Owp9CgoKdGVt cGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgppbmxpbmUgYm9vbCBvcGVyYXRvcjw9KGNvbnN0 IHBhaXI8X1QxLCBfVDI+JiBfX3gsIGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3kpIHsKICByZXR1 cm4gIShfX3kgPCBfX3gpOwp9CgoKdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgppbmxp bmUgYm9vbCBvcGVyYXRvcj49KGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3gsIGNvbnN0IHBhaXI8 X1QxLCBfVDI+JiBfX3kpIHsKICByZXR1cm4gIShfX3ggPCBfX3kpOwp9CiMgMTQwICIvdXNyL2lu Y2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9wYWlyLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xh c3MgX1QyPgoKCmlubGluZSBwYWlyPF9UMSwgX1QyPiBtYWtlX3BhaXIoX1QxIF9feCwgX1QyIF9f eSkKCgoKewogIHJldHVybiBwYWlyPF9UMSwgX1QyPihfX3gsIF9feSk7Cn0KCn0KIyA3MiAiL3Vz ci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMiAzCiMgMSAiL3Vzci9pbmNs dWRlL2MrKy8zLjIvYml0cy90eXBlX3RyYWl0cy5oIiAxIDMKIyA1MyAiL3Vzci9pbmNsdWRlL2Mr Ky8zLjIvYml0cy90eXBlX3RyYWl0cy5oIiAzCiMgOTAgIi91c3IvaW5jbHVkZS9jKysvMy4yL2Jp dHMvdHlwZV90cmFpdHMuaCIgMwpzdHJ1Y3QgX190cnVlX3R5cGUge307CnN0cnVjdCBfX2ZhbHNl X3R5cGUge307Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgX190eXBlX3RyYWl0cyB7CiAg IHR5cGVkZWYgX190cnVlX3R5cGUgdGhpc19kdW1teV9tZW1iZXJfbXVzdF9iZV9maXJzdDsKIyAx MTMgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvdHlwZV90cmFpdHMuaCIgMwogICB0eXBlZGVm IF9fZmFsc2VfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVm IF9fZmFsc2VfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9f ZmFsc2VfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9f ZmFsc2VfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fZmFsc2VfdHlw ZSBpc19QT0RfdHlwZTsKfTsKCgoKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8Ym9v bD4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0 b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsK ICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwog ICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYg X190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJh aXRzPGNoYXI+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2Nv bnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3Ry dWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVy YXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0 eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190 eXBlX3RyYWl0czxzaWduZWQgY2hhcj4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2 aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZp YWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9h c3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rl c3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0 ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPHVuc2lnbmVkIGNoYXI+IHsKICAgdHlwZWRlZiBfX3Ry dWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1 ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5 cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlw ZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90 eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czx3Y2hhcl90PiB7CiAgIHR5 cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlw ZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVm IF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYg X190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlw ZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8c2hvcnQ+ IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9y OwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAg IHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAg dHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9f dHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0 czx1bnNpZ25lZCBzaG9ydD4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rl ZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29w eV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25t ZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0 b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0 cnVjdCBfX3R5cGVfdHJhaXRzPGludD4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2 aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZp YWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9h c3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rl c3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0 ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPHVuc2lnbmVkIGludD4gewogICB0eXBlZGVmIF9fdHJ1 ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVl X3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlw ZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBl IGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5 cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPGxvbmc+IHsKICAgdHlwZWRl ZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVm IF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190 cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3Ry dWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlz X1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czx1bnNpZ25lZCBs b25nPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1 Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9y OwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7 CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRl ZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90 cmFpdHM8bG9uZyBsb25nPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVm YXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5 X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1l bnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3Rv cjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gc3Ry dWN0IF9fdHlwZV90cmFpdHM8dW5zaWduZWQgbG9uZyBsb25nPiB7CiAgIHR5cGVkZWYgX190cnVl X3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVf dHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBl IGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUg aGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlw ZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8ZmxvYXQ+IHsKICAgdHlwZWRl ZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVm IF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190 cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3Ry dWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlz X1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czxkb3VibGU+IHsK ICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwog ICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5 cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlw ZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1 ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czxs b25nIGRvdWJsZT4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRf Y29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25z dHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29w ZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAg IHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1Rw PgpzdHJ1Y3QgX190eXBlX3RyYWl0czxfVHAqPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFz X3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNf dHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2 aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZp YWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCgoK Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPiBzdHJ1Y3QgX0lzX2ludGVnZXIgewogIHR5cGVkZWYgX19m YWxzZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9Jc19pbnRlZ2VyPGJv b2w+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4gc3Ry dWN0IF9Jc19pbnRlZ2VyPGNoYXI+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsK fTsKCnRlbXBsYXRlPD4gc3RydWN0IF9Jc19pbnRlZ2VyPHNpZ25lZCBjaGFyPiB7CiAgdHlwZWRl ZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdl cjx1bnNpZ25lZCBjaGFyPiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0 ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjx3Y2hhcl90PiB7CiAgdHlwZWRlZiBfX3RydWVf dHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjxzaG9ydD4g ewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3Qg X0lzX2ludGVnZXI8dW5zaWduZWQgc2hvcnQ+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRl Z3JhbDsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9Jc19pbnRlZ2VyPGludD4gewogIHR5cGVkZWYg X190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8 dW5zaWduZWQgaW50PiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1w bGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjxsb25nPiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBf SW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjx1bnNpZ25lZCBsb25n PiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVj dCBfSXNfaW50ZWdlcjxsb25nIGxvbmc+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3Jh bDsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9Jc19pbnRlZ2VyPHVuc2lnbmVkIGxvbmcgbG9uZz4g ewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8dHlwZW5hbWUg X1RwPiBzdHJ1Y3QgX0lzX25vcm1hbF9pdGVyYXRvciB7CiAgIHR5cGVkZWYgX19mYWxzZV90eXBl IF9Ob3JtYWw7Cn07CgoKbmFtZXNwYWNlIF9fZ251X2N4eAp7CiAgdGVtcGxhdGU8dHlwZW5hbWUg X0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29udGFpbmVyPiBjbGFzcyBfX25vcm1hbF9pdGVyYXRvcjsK fQoKdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29udGFpbmVyPgpzdHJ1 Y3QgX0lzX25vcm1hbF9pdGVyYXRvcjwgX19nbnVfY3h4OjpfX25vcm1hbF9pdGVyYXRvcjxfSXRl cmF0b3IsIF9Db250YWluZXI+ID4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9Ob3JtYWw7Cn07 CiMgNzMgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDIgMwojIDEg Ii91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2l0ZXJhdG9yX2Jhc2VfdHlwZXMuaCIgMSAz CiMgNjggIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2l0ZXJhdG9yX2Jhc2VfdHlwZXMu aCIgMwoKbmFtZXNwYWNlIHN0ZAp7CiMgODAgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3Rs X2l0ZXJhdG9yX2Jhc2VfdHlwZXMuaCIgMwogIHN0cnVjdCBpbnB1dF9pdGVyYXRvcl90YWcge307 CgogIHN0cnVjdCBvdXRwdXRfaXRlcmF0b3JfdGFnIHt9OwoKICBzdHJ1Y3QgZm9yd2FyZF9pdGVy YXRvcl90YWcgOiBwdWJsaWMgaW5wdXRfaXRlcmF0b3JfdGFnIHt9OwoKICBzdHJ1Y3QgYmlkaXJl Y3Rpb25hbF9pdGVyYXRvcl90YWcgOiBwdWJsaWMgZm9yd2FyZF9pdGVyYXRvcl90YWcge307Cgog IHN0cnVjdCByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZyA6IHB1YmxpYyBiaWRpcmVjdGlvbmFs X2l0ZXJhdG9yX3RhZyB7fTsKIyAxMDAgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2l0 ZXJhdG9yX2Jhc2VfdHlwZXMuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DYXRlZ29yeSwgdHlw ZW5hbWUgX1RwLCB0eXBlbmFtZSBfRGlzdGFuY2UgPSBwdHJkaWZmX3QsCiAgICAgICAgICAgdHlw ZW5hbWUgX1BvaW50ZXIgPSBfVHAqLCB0eXBlbmFtZSBfUmVmZXJlbmNlID0gX1RwJj4KICAgIHN0 cnVjdCBpdGVyYXRvciB7CgogICAgICB0eXBlZGVmIF9DYXRlZ29yeSBpdGVyYXRvcl9jYXRlZ29y eTsKCiAgICAgIHR5cGVkZWYgX1RwIHZhbHVlX3R5cGU7CgogICAgICB0eXBlZGVmIF9EaXN0YW5j ZSBkaWZmZXJlbmNlX3R5cGU7CgogICAgICB0eXBlZGVmIF9Qb2ludGVyIHBvaW50ZXI7CgogICAg ICB0eXBlZGVmIF9SZWZlcmVuY2UgcmVmZXJlbmNlOwogICAgfTsKCgoKCgoKCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0l0ZXJhdG9yPgogICAgc3RydWN0IGl0ZXJhdG9yX3RyYWl0cyB7CiAgICAgIHR5 cGVkZWYgdHlwZW5hbWUgX0l0ZXJhdG9yOjppdGVyYXRvcl9jYXRlZ29yeSBpdGVyYXRvcl9jYXRl Z29yeTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSXRlcmF0b3I6OnZhbHVlX3R5cGUgdmFsdWVf dHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSXRlcmF0b3I6OmRpZmZlcmVuY2VfdHlwZSBk aWZmZXJlbmNlX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0l0ZXJhdG9yOjpwb2ludGVy IHBvaW50ZXI7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0l0ZXJhdG9yOjpyZWZlcmVuY2UgcmVm ZXJlbmNlOwogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgc3RydWN0IGl0ZXJh dG9yX3RyYWl0czxfVHAqPiB7CiAgICAgIHR5cGVkZWYgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90 YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgICAgIHR5cGVkZWYgX1RwIHZhbHVlX3R5cGU7CiAgICAg IHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsKICAgICAgdHlwZWRlZiBfVHAqIHBv aW50ZXI7CiAgICAgIHR5cGVkZWYgX1RwJiByZWZlcmVuY2U7CiAgICB9OwoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfVHA+CiAgICBzdHJ1Y3QgaXRlcmF0b3JfdHJhaXRzPGNvbnN0IF9UcCo+IHsKICAg ICAgdHlwZWRlZiByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsK ICAgICAgdHlwZWRlZiBfVHAgdmFsdWVfdHlwZTsKICAgICAgdHlwZWRlZiBwdHJkaWZmX3QgZGlm ZmVyZW5jZV90eXBlOwogICAgICB0eXBlZGVmIGNvbnN0IF9UcCogcG9pbnRlcjsKICAgICAgdHlw ZWRlZiBjb25zdCBfVHAmIHJlZmVyZW5jZTsKICAgIH07CgoKCgoKCgogIHRlbXBsYXRlPHR5cGVu YW1lIF9JdGVyPgogICAgaW5saW5lIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcj46Oml0 ZXJhdG9yX2NhdGVnb3J5CiAgICBfX2l0ZXJhdG9yX2NhdGVnb3J5KGNvbnN0IF9JdGVyJikKICAg IHsgcmV0dXJuIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcj46Oml0ZXJhdG9yX2NhdGVn b3J5KCk7IH0KCn0KIyA3NCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnb2Jhc2Uu aCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfaXRlcmF0b3JfYmFzZV9m dW5jcy5oIiAxIDMKIyA2OCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfaXRlcmF0b3Jf YmFzZV9mdW5jcy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9jb25jZXB0X2No ZWNrLmgiIDEgMwojIDM5ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL2NvbmNlcHRfY2hlY2su aCIgMwojIDY5ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9pdGVyYXRvcl9iYXNlX2Z1 bmNzLmgiIDIgMwoKCgoKbmFtZXNwYWNlIHN0ZAp7CnRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0 ZXJhdG9yPgogIGlubGluZSB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcmF0b3I+ OjpkaWZmZXJlbmNlX3R5cGUKICBfX2Rpc3RhbmNlKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9J bnB1dEl0ZXJhdG9yIF9fbGFzdCwgaW5wdXRfaXRlcmF0b3JfdGFnKQogIHsKCiAgIAoKICAgIHR5 cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZSBf X24gPSAwOwogICAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KSB7CiAgICAgICsrX19maXJzdDsg KytfX247CiAgICB9CiAgICByZXR1cm4gX19uOwogIH0KCnRlbXBsYXRlPHR5cGVuYW1lIF9SYW5k b21BY2Nlc3NJdGVyYXRvcj4KICBpbmxpbmUgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5k b21BY2Nlc3NJdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQogIF9fZGlzdGFuY2UoX1JhbmRvbUFj Y2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsCiAgICAg ICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykKICB7CgogICAKICAgIHJldHVybiBf X2xhc3QgLSBfX2ZpcnN0OwogIH0KIyAxMTEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3Rs X2l0ZXJhdG9yX2Jhc2VfZnVuY3MuaCIgMwp0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRv cj4KICBpbmxpbmUgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXJhdG9yPjo6ZGlm ZmVyZW5jZV90eXBlCiAgZGlzdGFuY2UoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRl cmF0b3IgX19sYXN0KQogIHsKCiAgICByZXR1cm4gX19kaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3Qs IF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdCkpOwogIH0KCnRlbXBsYXRlPHR5cGVuYW1lIF9J bnB1dEl0ZXIsIHR5cGVuYW1lIF9EaXN0YW5jZT4KICBpbmxpbmUgdm9pZAogIF9fYWR2YW5jZShf SW5wdXRJdGVyJiBfX2ksIF9EaXN0YW5jZSBfX24sIGlucHV0X2l0ZXJhdG9yX3RhZykKICB7Cgog ICAKICAgIHdoaWxlIChfX24tLSkgKytfX2k7CiAgfQoKdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGly ZWN0aW9uYWxJdGVyYXRvciwgdHlwZW5hbWUgX0Rpc3RhbmNlPgogIGlubGluZSB2b2lkCiAgX19h ZHZhbmNlKF9CaWRpcmVjdGlvbmFsSXRlcmF0b3ImIF9faSwgX0Rpc3RhbmNlIF9fbiwKICAgICAg ICAgICAgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcpCiAgewoKICAgCgogICAgaWYgKF9fbiA+ IDApCiAgICAgIHdoaWxlIChfX24tLSkgKytfX2k7CiAgICBlbHNlCiAgICAgIHdoaWxlIChfX24r KykgLS1fX2k7CiAgfQoKdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCB0 eXBlbmFtZSBfRGlzdGFuY2U+CiAgaW5saW5lIHZvaWQKICBfX2FkdmFuY2UoX1JhbmRvbUFjY2Vz c0l0ZXJhdG9yJiBfX2ksIF9EaXN0YW5jZSBfX24sCiAgICAgICAgICAgIHJhbmRvbV9hY2Nlc3Nf aXRlcmF0b3JfdGFnKQogIHsKCiAgIAogICAgX19pICs9IF9fbjsKICB9CiMgMTY0ICIvdXNyL2lu Y2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9pdGVyYXRvcl9iYXNlX2Z1bmNzLmgiIDMKdGVtcGxhdGU8 dHlwZW5hbWUgX0lucHV0SXRlcmF0b3IsIHR5cGVuYW1lIF9EaXN0YW5jZT4KICBpbmxpbmUgdm9p ZAogIGFkdmFuY2UoX0lucHV0SXRlcmF0b3ImIF9faSwgX0Rpc3RhbmNlIF9fbikKICB7CgogICAg X19hZHZhbmNlKF9faSwgX19uLCBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9faSkpOwogIH0KCn0KIyA3 NSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMiAzCiMgMSAiL3Vz ci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfaXRlcmF0b3IuaCIgMSAzCiMgNjggIi91c3IvaW5j bHVkZS9jKysvMy4yL2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDMKbmFtZXNwYWNlIHN0ZAp7CiMgODkg Ii91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDMKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfSXRlcmF0b3I+CiAgICBjbGFzcyByZXZlcnNlX2l0ZXJhdG9yCiAgICA6IHB1Ymxp YyBpdGVyYXRvcjx0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6aXRlcmF0b3Jf Y2F0ZWdvcnksCiAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8 X0l0ZXJhdG9yPjo6dmFsdWVfdHlwZSwKICAgICAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIGl0 ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUsCiAgICAgICAgICAgICAg ICAgICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6cG9pbnRlciwKICAg ICAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+Ojpy ZWZlcmVuY2U+CiAgICB7CiAgICBwcm90ZWN0ZWQ6CiAgICAgIF9JdGVyYXRvciBjdXJyZW50OwoK ICAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiBfSXRlcmF0b3IgaXRlcmF0b3JfdHlwZTsKICAgICAg dHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90 eXBlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGRpZmZlcmVuY2VfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRv cl90cmFpdHM8X0l0ZXJhdG9yPjo6cmVmZXJlbmNlIHJlZmVyZW5jZTsKICAgICAgdHlwZWRlZiB0 eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6cG9pbnRlciBwb2ludGVyOwoKICAg IHB1YmxpYzoKCgoKICAgICAgcmV2ZXJzZV9pdGVyYXRvcigpIHsgfQoKCgoKICAgICAgZXhwbGlj aXQKICAgICAgcmV2ZXJzZV9pdGVyYXRvcihpdGVyYXRvcl90eXBlIF9feCkgOiBjdXJyZW50KF9f eCkgeyB9CgoKCgogICAgICByZXZlcnNlX2l0ZXJhdG9yKGNvbnN0IHJldmVyc2VfaXRlcmF0b3Im IF9feCkKICAgICAgOiBjdXJyZW50KF9feC5jdXJyZW50KSB7IH0KCgoKCgogICAgICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfSXRlcj4KICAgICAgICByZXZlcnNlX2l0ZXJhdG9yKGNvbnN0IHJldmVyc2Vf aXRlcmF0b3I8X0l0ZXI+JiBfX3gpCiAgICAgICAgOiBjdXJyZW50KF9feC5iYXNlKCkpIHsgfQoK CgoKICAgICAgaXRlcmF0b3JfdHlwZQogICAgICBiYXNlKCkgY29uc3QgeyByZXR1cm4gY3VycmVu dDsgfQoKCgoKCgogICAgICByZWZlcmVuY2UKICAgICAgb3BlcmF0b3IqKCkgY29uc3QKICAgICAg ewogICAgICAgIF9JdGVyYXRvciBfX3RtcCA9IGN1cnJlbnQ7CiAgICAgICAgcmV0dXJuICotLV9f dG1wOwogICAgICB9CgoKCgoKCiAgICAgIHBvaW50ZXIKICAgICAgb3BlcmF0b3ItPigpIGNvbnN0 IHsgcmV0dXJuICYob3BlcmF0b3IqKCkpOyB9CgoKCgoKCiAgICAgIHJldmVyc2VfaXRlcmF0b3Im CiAgICAgIG9wZXJhdG9yKysoKQogICAgICB7CiAgICAgICAgLS1jdXJyZW50OwogICAgICAgIHJl dHVybiAqdGhpczsKICAgICAgfQoKCgoKCgogICAgICByZXZlcnNlX2l0ZXJhdG9yCiAgICAgIG9w ZXJhdG9yKysoaW50KQogICAgICB7CiAgICAgICAgcmV2ZXJzZV9pdGVyYXRvciBfX3RtcCA9ICp0 aGlzOwogICAgICAgIC0tY3VycmVudDsKICAgICAgICByZXR1cm4gX190bXA7CiAgICAgIH0KCgoK CgoKICAgICAgcmV2ZXJzZV9pdGVyYXRvciYKICAgICAgb3BlcmF0b3ItLSgpCiAgICAgIHsKICAg ICAgICArK2N1cnJlbnQ7CiAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICB9CgoKCgoKCiAgICAg IHJldmVyc2VfaXRlcmF0b3Igb3BlcmF0b3ItLShpbnQpCiAgICAgIHsKICAgICAgICByZXZlcnNl X2l0ZXJhdG9yIF9fdG1wID0gKnRoaXM7CiAgICAgICAgKytjdXJyZW50OwogICAgICAgIHJldHVy biBfX3RtcDsKICAgICAgfQoKCgoKCgogICAgICByZXZlcnNlX2l0ZXJhdG9yCiAgICAgIG9wZXJh dG9yKyhkaWZmZXJlbmNlX3R5cGUgX19uKSBjb25zdAogICAgICB7IHJldHVybiByZXZlcnNlX2l0 ZXJhdG9yKGN1cnJlbnQgLSBfX24pOyB9CgoKCgoKCiAgICAgIHJldmVyc2VfaXRlcmF0b3ImCiAg ICAgIG9wZXJhdG9yKz0oZGlmZmVyZW5jZV90eXBlIF9fbikKICAgICAgewogICAgICAgIGN1cnJl bnQgLT0gX19uOwogICAgICAgIHJldHVybiAqdGhpczsKICAgICAgfQoKCgoKCgogICAgICByZXZl cnNlX2l0ZXJhdG9yCiAgICAgIG9wZXJhdG9yLShkaWZmZXJlbmNlX3R5cGUgX19uKSBjb25zdAog ICAgICB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKGN1cnJlbnQgKyBfX24pOyB9CgoKCgoKCiAg ICAgIHJldmVyc2VfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yLT0oZGlmZmVyZW5jZV90eXBlIF9f bikKICAgICAgewogICAgICAgIGN1cnJlbnQgKz0gX19uOwogICAgICAgIHJldHVybiAqdGhpczsK ICAgICAgfQoKCgoKCgogICAgICByZWZlcmVuY2UKICAgICAgb3BlcmF0b3JbXShkaWZmZXJlbmNl X3R5cGUgX19uKSBjb25zdCB7IHJldHVybiAqKCp0aGlzICsgX19uKTsgfQogICAgfTsKIyAyNjkg Ii91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDMKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfSXRlcmF0b3I+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I9PShjb25zdCBy ZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feCwKICAgICAgICAgICAgICAgY29uc3QgcmV2 ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3kpCiAgICB7IHJldHVybiBfX3guYmFzZSgpID09 IF9feS5iYXNlKCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yPgogICAgaW5saW5l IGJvb2wKICAgIG9wZXJhdG9yPChjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9f eCwKICAgICAgICAgICAgICBjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feSkK ICAgIHsgcmV0dXJuIF9feS5iYXNlKCkgPCBfX3guYmFzZSgpOyB9CgogIHRlbXBsYXRlPHR5cGVu YW1lIF9JdGVyYXRvcj4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvciE9KGNvbnN0IHJldmVy c2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX194LAogICAgICAgICAgICAgICBjb25zdCByZXZlcnNl X2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feSkKICAgIHsgcmV0dXJuICEoX194ID09IF9feSk7IH0K CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJh dG9yPihjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feCwKICAgICAgICAgICAg ICBjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feSkKICAgIHsgcmV0dXJuIF9f eSA8IF9feDsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3I+CiAgICBpbmxpbmUgYm9v bAogICAgb3BlcmF0b3I8PShjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feCwK ICAgICAgICAgICAgICAgIGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX195KQog ICAgeyByZXR1cm4gIShfX3kgPCBfX3gpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRv cj4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj49KGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8 X0l0ZXJhdG9yPiYgX194LAogICAgICAgICAgICAgICBjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9J dGVyYXRvcj4mIF9feSkKICAgIHsgcmV0dXJuICEoX194IDwgX195KTsgfQoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfSXRlcmF0b3I+CiAgICBpbmxpbmUgdHlwZW5hbWUgcmV2ZXJzZV9pdGVyYXRvcjxf SXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUKICAgIG9wZXJhdG9yLShjb25zdCByZXZlcnNlX2l0 ZXJhdG9yPF9JdGVyYXRvcj4mIF9feCwKICAgICAgICAgICAgICBjb25zdCByZXZlcnNlX2l0ZXJh dG9yPF9JdGVyYXRvcj4mIF9feSkKICAgIHsgcmV0dXJuIF9feS5iYXNlKCkgLSBfX3guYmFzZSgp OyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvcj4KICAgIGlubGluZSByZXZlcnNlX2l0 ZXJhdG9yPF9JdGVyYXRvcj4KICAgIG9wZXJhdG9yKyh0eXBlbmFtZSByZXZlcnNlX2l0ZXJhdG9y PF9JdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZSBfX24sCiAgICAgICAgICAgICAgY29uc3QgcmV2 ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3gpCiAgICB7IHJldHVybiByZXZlcnNlX2l0ZXJh dG9yPF9JdGVyYXRvcj4oX194LmJhc2UoKSAtIF9fbik7IH0KIyAzMjcgIi91c3IvaW5jbHVkZS9j KysvMy4yL2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ29udGFp bmVyPgogICAgY2xhc3MgYmFja19pbnNlcnRfaXRlcmF0b3IKICAgIDogcHVibGljIGl0ZXJhdG9y PG91dHB1dF9pdGVyYXRvcl90YWcsIHZvaWQsIHZvaWQsIHZvaWQsIHZvaWQ+CiAgICB7CiAgICBw cm90ZWN0ZWQ6CiAgICAgIF9Db250YWluZXIqIGNvbnRhaW5lcjsKCiAgICBwdWJsaWM6CgogICAg ICB0eXBlZGVmIF9Db250YWluZXIgY29udGFpbmVyX3R5cGU7CgoKICAgICAgZXhwbGljaXQKICAg ICAgYmFja19pbnNlcnRfaXRlcmF0b3IoX0NvbnRhaW5lciYgX194KSA6IGNvbnRhaW5lcigmX194 KSB7IH0KIyAzNTMgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDMK ICAgICAgYmFja19pbnNlcnRfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yPSh0eXBlbmFtZSBfQ29u dGFpbmVyOjpjb25zdF9yZWZlcmVuY2UgX192YWx1ZSkKICAgICAgewogICAgICAgIGNvbnRhaW5l ci0+cHVzaF9iYWNrKF9fdmFsdWUpOwogICAgICAgIHJldHVybiAqdGhpczsKICAgICAgfQoKCiAg ICAgIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yJgogICAgICBvcGVyYXRvciooKSB7IHJldHVybiAqdGhp czsgfQoKCiAgICAgIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yJgogICAgICBvcGVyYXRvcisrKCkgeyBy ZXR1cm4gKnRoaXM7IH0KCgogICAgICBiYWNrX2luc2VydF9pdGVyYXRvcgogICAgICBvcGVyYXRv cisrKGludCkgeyByZXR1cm4gKnRoaXM7IH0KICAgIH07CiMgMzg0ICIvdXNyL2luY2x1ZGUvYysr LzMuMi9iaXRzL3N0bF9pdGVyYXRvci5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NvbnRhaW5l cj4KICAgIGlubGluZSBiYWNrX2luc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPgogICAgYmFja19p bnNlcnRlcihfQ29udGFpbmVyJiBfX3gpCiAgICB7IHJldHVybiBiYWNrX2luc2VydF9pdGVyYXRv cjxfQ29udGFpbmVyPihfX3gpOyB9CiMgMzk3ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0 bF9pdGVyYXRvci5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NvbnRhaW5lcj4KICAgIGNsYXNz IGZyb250X2luc2VydF9pdGVyYXRvcgogICAgOiBwdWJsaWMgaXRlcmF0b3I8b3V0cHV0X2l0ZXJh dG9yX3RhZywgdm9pZCwgdm9pZCwgdm9pZCwgdm9pZD4KICAgIHsKICAgIHByb3RlY3RlZDoKICAg ICAgX0NvbnRhaW5lciogY29udGFpbmVyOwoKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0Nv bnRhaW5lciBjb250YWluZXJfdHlwZTsKCgogICAgICBleHBsaWNpdCBmcm9udF9pbnNlcnRfaXRl cmF0b3IoX0NvbnRhaW5lciYgX194KSA6IGNvbnRhaW5lcigmX194KSB7IH0KIyA0MjIgIi91c3Iv aW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDMKICAgICAgZnJvbnRfaW5zZXJ0 X2l0ZXJhdG9yJgogICAgICBvcGVyYXRvcj0odHlwZW5hbWUgX0NvbnRhaW5lcjo6Y29uc3RfcmVm ZXJlbmNlIF9fdmFsdWUpCiAgICAgIHsKICAgICAgICBjb250YWluZXItPnB1c2hfZnJvbnQoX192 YWx1ZSk7CiAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICB9CgoKICAgICAgZnJvbnRfaW5zZXJ0 X2l0ZXJhdG9yJgogICAgICBvcGVyYXRvciooKSB7IHJldHVybiAqdGhpczsgfQoKCiAgICAgIGZy b250X2luc2VydF9pdGVyYXRvciYKICAgICAgb3BlcmF0b3IrKygpIHsgcmV0dXJuICp0aGlzOyB9 CgoKICAgICAgZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yCiAgICAgIG9wZXJhdG9yKysoaW50KSB7IHJl dHVybiAqdGhpczsgfQogICAgfTsKIyA0NTMgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3Rs X2l0ZXJhdG9yLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ29udGFpbmVyPgogICAgaW5saW5l IGZyb250X2luc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPgogICAgZnJvbnRfaW5zZXJ0ZXIoX0Nv bnRhaW5lciYgX194KQogICAgeyByZXR1cm4gZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWlu ZXI+KF9feCk7IH0KIyA0NzAgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2l0ZXJhdG9y LmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ29udGFpbmVyPgogICAgY2xhc3MgaW5zZXJ0X2l0 ZXJhdG9yCiAgICA6IHB1YmxpYyBpdGVyYXRvcjxvdXRwdXRfaXRlcmF0b3JfdGFnLCB2b2lkLCB2 b2lkLCB2b2lkLCB2b2lkPgogICAgewogICAgcHJvdGVjdGVkOgogICAgICBfQ29udGFpbmVyKiBj b250YWluZXI7CiAgICAgIHR5cGVuYW1lIF9Db250YWluZXI6Oml0ZXJhdG9yIGl0ZXI7CgogICAg cHVibGljOgoKICAgICAgdHlwZWRlZiBfQ29udGFpbmVyIGNvbnRhaW5lcl90eXBlOwoKCgoKCiAg ICAgIGluc2VydF9pdGVyYXRvcihfQ29udGFpbmVyJiBfX3gsIHR5cGVuYW1lIF9Db250YWluZXI6 Oml0ZXJhdG9yIF9faSkKICAgICAgOiBjb250YWluZXIoJl9feCksIGl0ZXIoX19pKSB7fQojIDUx MiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfaXRlcmF0b3IuaCIgMwogICAgICBpbnNl cnRfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yPShjb25zdCB0eXBlbmFtZSBfQ29udGFpbmVyOjpj b25zdF9yZWZlcmVuY2UgX192YWx1ZSkKICAgICAgewogICAgICAgIGl0ZXIgPSBjb250YWluZXIt Pmluc2VydChpdGVyLCBfX3ZhbHVlKTsKICAgICAgICArK2l0ZXI7CiAgICAgICAgcmV0dXJuICp0 aGlzOwogICAgICB9CgoKICAgICAgaW5zZXJ0X2l0ZXJhdG9yJgogICAgICBvcGVyYXRvciooKSB7 IHJldHVybiAqdGhpczsgfQoKCiAgICAgIGluc2VydF9pdGVyYXRvciYKICAgICAgb3BlcmF0b3Ir KygpIHsgcmV0dXJuICp0aGlzOyB9CgoKICAgICAgaW5zZXJ0X2l0ZXJhdG9yJgogICAgICBvcGVy YXRvcisrKGludCkgeyByZXR1cm4gKnRoaXM7IH0KICAgIH07CiMgNTQ0ICIvdXNyL2luY2x1ZGUv YysrLzMuMi9iaXRzL3N0bF9pdGVyYXRvci5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NvbnRh aW5lciwgdHlwZW5hbWUgX0l0ZXJhdG9yPgogICAgaW5saW5lIGluc2VydF9pdGVyYXRvcjxfQ29u dGFpbmVyPgogICAgaW5zZXJ0ZXIoX0NvbnRhaW5lciYgX194LCBfSXRlcmF0b3IgX19pKQogICAg ewogICAgICByZXR1cm4gaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+KF9feCwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBfQ29udGFpbmVyOjppdGVy YXRvcihfX2kpKTsKICAgIH0KfQoKbmFtZXNwYWNlIF9fZ251X2N4eAp7CgoKCgoKCgogIHVzaW5n IHN0ZDo6aXRlcmF0b3JfdHJhaXRzOwogIHVzaW5nIHN0ZDo6aXRlcmF0b3I7CiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29udGFpbmVyPgogICAgY2xhc3MgX19ub3Jt YWxfaXRlcmF0b3IKICAgICAgOiBwdWJsaWMgaXRlcmF0b3I8dHlwZW5hbWUgaXRlcmF0b3JfdHJh aXRzPF9JdGVyYXRvcj46Oml0ZXJhdG9yX2NhdGVnb3J5LAogICAgICAgICAgICAgICAgICAgICAg ICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6dmFsdWVfdHlwZSwKICAgICAg ICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OmRp ZmZlcmVuY2VfdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgaXRlcmF0b3Jf dHJhaXRzPF9JdGVyYXRvcj46OnBvaW50ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVu YW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+OjpyZWZlcmVuY2U+CiAgICB7CiAgICBwcm90 ZWN0ZWQ6CiAgICAgIF9JdGVyYXRvciBfTV9jdXJyZW50OwoKICAgIHB1YmxpYzoKICAgICAgdHlw ZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBl CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGRpZmZlcmVuY2VfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90 cmFpdHM8X0l0ZXJhdG9yPjo6cmVmZXJlbmNlIHJlZmVyZW5jZTsKICAgICAgdHlwZWRlZiB0eXBl bmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6cG9pbnRlciBwb2ludGVyOwoKICAgICAg X19ub3JtYWxfaXRlcmF0b3IoKSA6IF9NX2N1cnJlbnQoX0l0ZXJhdG9yKCkpIHsgfQoKICAgICAg ZXhwbGljaXQKICAgICAgX19ub3JtYWxfaXRlcmF0b3IoY29uc3QgX0l0ZXJhdG9yJiBfX2kpIDog X01fY3VycmVudChfX2kpIHsgfQoKCiAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyPgogICAg ICBpbmxpbmUgX19ub3JtYWxfaXRlcmF0b3IoY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXIs IF9Db250YWluZXI+JiBfX2kpCiAgICAgICAgOiBfTV9jdXJyZW50KF9faS5iYXNlKCkpIHsgfQoK CiAgICAgIHJlZmVyZW5jZQogICAgICBvcGVyYXRvciooKSBjb25zdCB7IHJldHVybiAqX01fY3Vy cmVudDsgfQoKICAgICAgcG9pbnRlcgogICAgICBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4g X01fY3VycmVudDsgfQoKICAgICAgX19ub3JtYWxfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yKyso KSB7ICsrX01fY3VycmVudDsgcmV0dXJuICp0aGlzOyB9CgogICAgICBfX25vcm1hbF9pdGVyYXRv cgogICAgICBvcGVyYXRvcisrKGludCkgeyByZXR1cm4gX19ub3JtYWxfaXRlcmF0b3IoX01fY3Vy cmVudCsrKTsgfQoKCiAgICAgIF9fbm9ybWFsX2l0ZXJhdG9yJgogICAgICBvcGVyYXRvci0tKCkg eyAtLV9NX2N1cnJlbnQ7IHJldHVybiAqdGhpczsgfQoKICAgICAgX19ub3JtYWxfaXRlcmF0b3IK ICAgICAgb3BlcmF0b3ItLShpbnQpIHsgcmV0dXJuIF9fbm9ybWFsX2l0ZXJhdG9yKF9NX2N1cnJl bnQtLSk7IH0KCgogICAgICByZWZlcmVuY2UKICAgICAgb3BlcmF0b3JbXShjb25zdCBkaWZmZXJl bmNlX3R5cGUmIF9fbikgY29uc3QKICAgICAgeyByZXR1cm4gX01fY3VycmVudFtfX25dOyB9Cgog ICAgICBfX25vcm1hbF9pdGVyYXRvciYKICAgICAgb3BlcmF0b3IrPShjb25zdCBkaWZmZXJlbmNl X3R5cGUmIF9fbikKICAgICAgeyBfTV9jdXJyZW50ICs9IF9fbjsgcmV0dXJuICp0aGlzOyB9Cgog ICAgICBfX25vcm1hbF9pdGVyYXRvcgogICAgICBvcGVyYXRvcisoY29uc3QgZGlmZmVyZW5jZV90 eXBlJiBfX24pIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9fbm9ybWFsX2l0ZXJhdG9yKF9NX2N1cnJl bnQgKyBfX24pOyB9CgogICAgICBfX25vcm1hbF9pdGVyYXRvciYKICAgICAgb3BlcmF0b3ItPShj b25zdCBkaWZmZXJlbmNlX3R5cGUmIF9fbikKICAgICAgeyBfTV9jdXJyZW50IC09IF9fbjsgcmV0 dXJuICp0aGlzOyB9CgogICAgICBfX25vcm1hbF9pdGVyYXRvcgogICAgICBvcGVyYXRvci0oY29u c3QgZGlmZmVyZW5jZV90eXBlJiBfX24pIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9fbm9ybWFsX2l0 ZXJhdG9yKF9NX2N1cnJlbnQgLSBfX24pOyB9CgogICAgICBjb25zdCBfSXRlcmF0b3ImCiAgICAg IGJhc2UoKSBjb25zdCB7IHJldHVybiBfTV9jdXJyZW50OyB9CiAgICB9OwojIDY0NSAiL3Vzci9p bmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfaXRlcmF0b3IuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1l IF9JdGVyYXRvckwsIHR5cGVuYW1lIF9JdGVyYXRvclIsIHR5cGVuYW1lIF9Db250YWluZXI+CiAg aW5saW5lIGJvb2wKICBvcGVyYXRvcj09KGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRv ckwsIF9Db250YWluZXI+JiBfX2xocywKICAgICAgICAgICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJh dG9yPF9JdGVyYXRvclIsIF9Db250YWluZXI+JiBfX3JocykKICB7IHJldHVybiBfX2xocy5iYXNl KCkgPT0gX19yaHMuYmFzZSgpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvciwgdHlw ZW5hbWUgX0NvbnRhaW5lcj4KICBpbmxpbmUgYm9vbAogIG9wZXJhdG9yPT0oY29uc3QgX19ub3Jt YWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPiYgX19saHMsCiAgICAgICAgICAgICBj b25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWluZXI+JiBfX3JocykKICB7 IHJldHVybiBfX2xocy5iYXNlKCkgPT0gX19yaHMuYmFzZSgpOyB9CgogIHRlbXBsYXRlPHR5cGVu YW1lIF9JdGVyYXRvckwsIHR5cGVuYW1lIF9JdGVyYXRvclIsIHR5cGVuYW1lIF9Db250YWluZXI+ CiAgaW5saW5lIGJvb2wKICBvcGVyYXRvciE9KGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVy YXRvckwsIF9Db250YWluZXI+JiBfX2xocywKICAgICAgICAgICAgIGNvbnN0IF9fbm9ybWFsX2l0 ZXJhdG9yPF9JdGVyYXRvclIsIF9Db250YWluZXI+JiBfX3JocykKICB7IHJldHVybiBfX2xocy5i YXNlKCkgIT0gX19yaHMuYmFzZSgpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvciwg dHlwZW5hbWUgX0NvbnRhaW5lcj4KICBpbmxpbmUgYm9vbAogIG9wZXJhdG9yIT0oY29uc3QgX19u b3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPiYgX19saHMsCiAgICAgICAgICAg ICBjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWluZXI+JiBfX3JocykK ICB7IHJldHVybiBfX2xocy5iYXNlKCkgIT0gX19yaHMuYmFzZSgpOyB9CgoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfSXRlcmF0b3JMLCB0eXBlbmFtZSBfSXRlcmF0b3JSLCB0eXBlbmFtZSBfQ29udGFp bmVyPgogIGlubGluZSBib29sCiAgb3BlcmF0b3I8KGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9J dGVyYXRvckwsIF9Db250YWluZXI+JiBfX2xocywKICAgICAgICAgICAgY29uc3QgX19ub3JtYWxf aXRlcmF0b3I8X0l0ZXJhdG9yUiwgX0NvbnRhaW5lcj4mIF9fcmhzKQogIHsgcmV0dXJuIF9fbGhz LmJhc2UoKSA8IF9fcmhzLmJhc2UoKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3Is IHR5cGVuYW1lIF9Db250YWluZXI+CiAgaW5saW5lIGJvb2wKICBvcGVyYXRvcjwoY29uc3QgX19u b3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPiYgX19saHMsCiAgICAgICAgICAg ICBjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWluZXI+JiBfX3JocykK ICB7IHJldHVybiBfX2xocy5iYXNlKCkgPCBfX3Jocy5iYXNlKCk7IH0KCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0l0ZXJhdG9yTCwgdHlwZW5hbWUgX0l0ZXJhdG9yUiwgdHlwZW5hbWUgX0NvbnRhaW5l cj4KICBpbmxpbmUgYm9vbAogIG9wZXJhdG9yPihjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRl cmF0b3JMLCBfQ29udGFpbmVyPiYgX19saHMsCiAgICAgICAgICAgIGNvbnN0IF9fbm9ybWFsX2l0 ZXJhdG9yPF9JdGVyYXRvclIsIF9Db250YWluZXI+JiBfX3JocykKICB7IHJldHVybiBfX2xocy5i YXNlKCkgPiBfX3Jocy5iYXNlKCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yLCB0 eXBlbmFtZSBfQ29udGFpbmVyPgogIGlubGluZSBib29sCiAgb3BlcmF0b3I+KGNvbnN0IF9fbm9y bWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwgX0NvbnRhaW5lcj4mIF9fbGhzLAogICAgICAgICAgICBj b25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWluZXI+JiBfX3JocykKICB7 IHJldHVybiBfX2xocy5iYXNlKCkgPiBfX3Jocy5iYXNlKCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0l0ZXJhdG9yTCwgdHlwZW5hbWUgX0l0ZXJhdG9yUiwgdHlwZW5hbWUgX0NvbnRhaW5lcj4K ICBpbmxpbmUgYm9vbAogIG9wZXJhdG9yPD0oY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJh dG9yTCwgX0NvbnRhaW5lcj4mIF9fbGhzLAogICAgICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRl cmF0b3I8X0l0ZXJhdG9yUiwgX0NvbnRhaW5lcj4mIF9fcmhzKQogIHsgcmV0dXJuIF9fbGhzLmJh c2UoKSA8PSBfX3Jocy5iYXNlKCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yLCB0 eXBlbmFtZSBfQ29udGFpbmVyPgogIGlubGluZSBib29sCiAgb3BlcmF0b3I8PShjb25zdCBfX25v cm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWluZXI+JiBfX2xocywKICAgICAgICAgICAg IGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwgX0NvbnRhaW5lcj4mIF9fcmhzKQog IHsgcmV0dXJuIF9fbGhzLmJhc2UoKSA8PSBfX3Jocy5iYXNlKCk7IH0KCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0l0ZXJhdG9yTCwgdHlwZW5hbWUgX0l0ZXJhdG9yUiwgdHlwZW5hbWUgX0NvbnRhaW5l cj4KICBpbmxpbmUgYm9vbAogIG9wZXJhdG9yPj0oY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0 ZXJhdG9yTCwgX0NvbnRhaW5lcj4mIF9fbGhzLAogICAgICAgICAgICAgY29uc3QgX19ub3JtYWxf aXRlcmF0b3I8X0l0ZXJhdG9yUiwgX0NvbnRhaW5lcj4mIF9fcmhzKQogIHsgcmV0dXJuIF9fbGhz LmJhc2UoKSA+PSBfX3Jocy5iYXNlKCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9y LCB0eXBlbmFtZSBfQ29udGFpbmVyPgogIGlubGluZSBib29sCiAgb3BlcmF0b3I+PShjb25zdCBf X25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWluZXI+JiBfX2xocywKICAgICAgICAg ICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwgX0NvbnRhaW5lcj4mIF9fcmhz KQogIHsgcmV0dXJuIF9fbGhzLmJhc2UoKSA+PSBfX3Jocy5iYXNlKCk7IH0KCgoKCgogIHRlbXBs YXRlPHR5cGVuYW1lIF9JdGVyYXRvckwsIHR5cGVuYW1lIF9JdGVyYXRvclIsIHR5cGVuYW1lIF9D b250YWluZXI+CiAgaW5saW5lIHR5cGVuYW1lIF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvckws IF9Db250YWluZXI+OjpkaWZmZXJlbmNlX3R5cGUKICBvcGVyYXRvci0oY29uc3QgX19ub3JtYWxf aXRlcmF0b3I8X0l0ZXJhdG9yTCwgX0NvbnRhaW5lcj4mIF9fbGhzLAogICAgICAgICAgICAgY29u c3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yUiwgX0NvbnRhaW5lcj4mIF9fcmhzKQogIHsg cmV0dXJuIF9fbGhzLmJhc2UoKSAtIF9fcmhzLmJhc2UoKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfSXRlcmF0b3IsIHR5cGVuYW1lIF9Db250YWluZXI+CiAgaW5saW5lIF9fbm9ybWFsX2l0ZXJh dG9yPF9JdGVyYXRvciwgX0NvbnRhaW5lcj4KICBvcGVyYXRvcisodHlwZW5hbWUgX19ub3JtYWxf aXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPjo6ZGlmZmVyZW5jZV90eXBlIF9fbiwKICAg ICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPiYg X19pKQogIHsgcmV0dXJuIF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwgX0NvbnRhaW5lcj4o X19pLmJhc2UoKSArIF9fbik7IH0KfQojIDc2ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0 bF9hbGdvYmFzZS5oIiAyIDMKCgpuYW1lc3BhY2Ugc3RkCnsKIyA5MSAiL3Vzci9pbmNsdWRlL2Mr Ky8zLjIvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJk SXRlcjEsIHR5cGVuYW1lIF9Gb3J3YXJkSXRlcjI+CiAgICBpbmxpbmUgdm9pZAogICAgaXRlcl9z d2FwKF9Gb3J3YXJkSXRlcjEgX19hLCBfRm9yd2FyZEl0ZXIyIF9fYikKICAgIHsKICAgICAgdHlw ZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyMT46OnZhbHVlX3R5cGUg X1ZhbHVlVHlwZTE7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3 YXJkSXRlcjI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGUyOwoKCiAgICAgCiAgICAgCiAgICAgCiAg ICAgCgogICAgICBfVmFsdWVUeXBlMSBfX3RtcCA9ICpfX2E7CiAgICAgICpfX2EgPSAqX19iOwog ICAgICAqX19iID0gX190bXA7CiAgICB9CiMgMTE4ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRz L3N0bF9hbGdvYmFzZS5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW5saW5lIHZv aWQKICAgIHN3YXAoX1RwJiBfX2EsIF9UcCYgX19iKQogICAgewoKICAgICAKCiAgICAgIF9UcCBf X3RtcCA9IF9fYTsKICAgICAgX19hID0gX19iOwogICAgICBfX2IgPSBfX3RtcDsKICAgIH0KIyAx NDYgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUgY29uc3QgX1RwJgogICAgbWluKGNvbnN0IF9UcCYg X19hLCBjb25zdCBfVHAmIF9fYikKICAgIHsKCiAgICAgCgogICAgICBpZiAoX19iIDwgX19hKSBy ZXR1cm4gX19iOyByZXR1cm4gX19hOwogICAgfQojIDE2NiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIv Yml0cy9zdGxfYWxnb2Jhc2UuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGlubGlu ZSBjb25zdCBfVHAmCiAgICBtYXgoY29uc3QgX1RwJiBfX2EsIGNvbnN0IF9UcCYgX19iKQogICAg ewoKICAgICAKCiAgICAgIGlmIChfX2EgPCBfX2IpIHJldHVybiBfX2I7IHJldHVybiBfX2E7CiAg ICB9CiMgMTg2ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvYmFzZS5oIiAzCiAg dGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIGlubGluZSBjb25z dCBfVHAmCiAgICBtaW4oY29uc3QgX1RwJiBfX2EsIGNvbnN0IF9UcCYgX19iLCBfQ29tcGFyZSBf X2NvbXApCiAgICB7CgogICAgICBpZiAoX19jb21wKF9fYiwgX19hKSkgcmV0dXJuIF9fYjsgcmV0 dXJuIF9fYTsKICAgIH0KIyAyMDQgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ29i YXNlLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9Db21wYXJlPgogICAg aW5saW5lIGNvbnN0IF9UcCYKICAgIG1heChjb25zdCBfVHAmIF9fYSwgY29uc3QgX1RwJiBfX2Is IF9Db21wYXJlIF9fY29tcCkKICAgIHsKCiAgICAgIGlmIChfX2NvbXAoX19hLCBfX2IpKSByZXR1 cm4gX19iOyByZXR1cm4gX19hOwogICAgfQojIDIyMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0 cy9zdGxfYWxnb2Jhc2UuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVu YW1lIF9PdXRwdXRJdGVyPgogICAgaW5saW5lIF9PdXRwdXRJdGVyCiAgICBfX2NvcHkoX0lucHV0 SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICBfT3V0cHV0SXRlciBf X3Jlc3VsdCwKICAgICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcpCiAgICB7CiAgICAgIGZvciAo IDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19yZXN1bHQsICsrX19maXJzdCkKICAgICAgICAqX19y ZXN1bHQgPSAqX19maXJzdDsKICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAgfQoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXI+CiAgICBp bmxpbmUgX091dHB1dEl0ZXIKICAgIF9fY29weShfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBf UmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQs CiAgICAgICAgICAgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpCiAgICB7CiAgICAgIHR5cGVk ZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6ZGlmZmVyZW5j ZV90eXBlCiAgICAgICAgICBfRGlzdGFuY2U7CiAgICAgIGZvciAoX0Rpc3RhbmNlIF9fbiA9IF9f bGFzdCAtIF9fZmlyc3Q7IF9fbiA+IDA7IC0tX19uKSB7CiAgICAgICAgKl9fcmVzdWx0ID0gKl9f Zmlyc3Q7CiAgICAgICAgKytfX2ZpcnN0OwogICAgICAgICsrX19yZXN1bHQ7CiAgICAgIH0KICAg ICAgcmV0dXJuIF9fcmVzdWx0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBp bmxpbmUgX1RwKgogICAgX19jb3B5X3RyaXZpYWwoY29uc3QgX1RwKiBfX2ZpcnN0LCBjb25zdCBf VHAqIF9fbGFzdCwgX1RwKiBfX3Jlc3VsdCkKICAgIHsKICAgICAgbWVtbW92ZShfX3Jlc3VsdCwg X19maXJzdCwgc2l6ZW9mKF9UcCkgKiAoX19sYXN0IC0gX19maXJzdCkpOwogICAgICByZXR1cm4g X19yZXN1bHQgKyAoX19sYXN0IC0gX19maXJzdCk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1l IF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyPgogICAgaW5saW5lIF9PdXRwdXRJdGVy CiAgICBfX2NvcHlfYXV4MihfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAog ICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9fZmFsc2VfdHlwZSkKICAgIHsg cmV0dXJuIF9fY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LCBfX2l0ZXJhdG9yX2NhdGVn b3J5KF9fZmlyc3QpKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFt ZSBfT3V0cHV0SXRlcj4KICAgIGlubGluZSBfT3V0cHV0SXRlcgogICAgX19jb3B5X2F1eDIoX0lu cHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgIF9PdXRw dXRJdGVyIF9fcmVzdWx0LCBfX3RydWVfdHlwZSkKICAgIHsgcmV0dXJuIF9fY29weShfX2ZpcnN0 LCBfX2xhc3QsIF9fcmVzdWx0LCBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsgfQoKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUgX1RwKgogICAgX19jb3B5X2F1eDIoX1Rw KiBfX2ZpcnN0LCBfVHAqIF9fbGFzdCwKICAgICAgICAgICAgICAgIF9UcCogX19yZXN1bHQsIF9f dHJ1ZV90eXBlKQogICAgeyByZXR1cm4gX19jb3B5X3RyaXZpYWwoX19maXJzdCwgX19sYXN0LCBf X3Jlc3VsdCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW5saW5lIF9UcCoKICAg IF9fY29weV9hdXgyKGNvbnN0IF9UcCogX19maXJzdCwgY29uc3QgX1RwKiBfX2xhc3QsCiAgICAg ICAgICAgICAgICBfVHAqIF9fcmVzdWx0LCBfX3RydWVfdHlwZSkKICAgIHsgcmV0dXJuIF9fY29w eV90cml2aWFsKF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQpOyB9CgogIHRlbXBsYXRlPHR5cGVu YW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyPgogICAgaW5saW5lIF9PdXRwdXRJ dGVyCiAgICBfX2NvcHlfbmkyKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3Qs CiAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBfX3RydWVfdHlwZSkKICAgIHsK ICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcj46OnZhbHVl X3R5cGUKICAgICAgICAgIF9WYWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX190eXBl X3RyYWl0czxfVmFsdWVUeXBlPjo6aGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcgogICAg ICAgICAgX1RyaXZpYWw7CiAgICAgIHJldHVybiBfT3V0cHV0SXRlcihfX2NvcHlfYXV4MihfX2Zp cnN0LCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Jlc3Vs dC5iYXNlKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfVHJpdmlhbCgp KSk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRw dXRJdGVyPgogICAgaW5saW5lIF9PdXRwdXRJdGVyCiAgICBfX2NvcHlfbmkyKF9JbnB1dEl0ZXIg X19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9f cmVzdWx0LCBfX2ZhbHNlX3R5cGUpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0 b3JfdHJhaXRzPF9JbnB1dEl0ZXI+Ojp2YWx1ZV90eXBlCiAgICAgICAgICBfVmFsdWVUeXBlOwog ICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fdHlwZV90cmFpdHM8X1ZhbHVlVHlwZT46Omhhc190cml2 aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3IKICAgICAgICAgIF9Ucml2aWFsOwogICAgICByZXR1cm4g X19jb3B5X2F1eDIoX19maXJzdCwgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgX19y ZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICBfVHJpdmlhbCgpKTsKICAgIH0KCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXI+CiAgICBpbmxp bmUgX091dHB1dEl0ZXIKICAgIF9fY29weV9uaTEoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJ dGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9fdHJ1ZV90 eXBlKQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19ub3JtYWxfaXRlcmF0b3I8X091 dHB1dEl0ZXI+OjpfTm9ybWFsIF9fTm9ybWFsOwogICAgICByZXR1cm4gX19jb3B5X25pMihfX2Zp cnN0LmJhc2UoKSwgX19sYXN0LmJhc2UoKSwgX19yZXN1bHQsIF9fTm9ybWFsKCkpOwogICAgfQoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4KICAg IGlubGluZSBfT3V0cHV0SXRlcgogICAgX19jb3B5X25pMShfSW5wdXRJdGVyIF9fZmlyc3QsIF9J bnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX19m YWxzZV90eXBlKQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19ub3JtYWxfaXRlcmF0 b3I8X091dHB1dEl0ZXI+OjpfTm9ybWFsIF9fTm9ybWFsOwogICAgICByZXR1cm4gX19jb3B5X25p MihfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LCBfX05vcm1hbCgpKTsKICAgIH0KIyAzMzkgIi91 c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4KICAgIGlubGluZSBfT3V0cHV0 SXRlcgogICAgY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LCBfT3V0 cHV0SXRlciBfX3Jlc3VsdCkKICAgIHsKCiAgICAgCiAgICAgCgoKICAgICAgIHR5cGVkZWYgdHlw ZW5hbWUgX0lzX25vcm1hbF9pdGVyYXRvcjxfSW5wdXRJdGVyPjo6X05vcm1hbCBfX05vcm1hbDsK ICAgICAgIHJldHVybiBfX2NvcHlfbmkxKF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQsIF9fTm9y bWFsKCkpOwogICAgfQoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIx LCB0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIyPgogICAgaW5saW5lIF9CaWRpcmVjdGlvbmFs SXRlcjIKICAgIF9fY29weV9iYWNrd2FyZChfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fZmlyc3QsIF9C aWRpcmVjdGlvbmFsSXRlcjEgX19sYXN0LAogICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlv bmFsSXRlcjIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgYmlkaXJlY3Rpb25hbF9pdGVy YXRvcl90YWcpCiAgICB7CiAgICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkKICAgICAgICAq LS1fX3Jlc3VsdCA9ICotLV9fbGFzdDsKICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAgfQoKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX0JpZGlyZWN0aW9u YWxJdGVyPgogICAgaW5saW5lIF9CaWRpcmVjdGlvbmFsSXRlcgogICAgX19jb3B5X2JhY2t3YXJk KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAg ICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAg ICAgICAgICAgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpCiAgICB7CiAgICAgIHR5cGVuYW1l IGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OmRpZmZlcmVuY2VfdHlwZSBfX247 CiAgICAgIGZvciAoX19uID0gX19sYXN0IC0gX19maXJzdDsgX19uID4gMDsgLS1fX24pCiAgICAg ICAgKi0tX19yZXN1bHQgPSAqLS1fX2xhc3Q7CiAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgIH0K CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyMSwgdHlwZW5hbWUg X0JpZGlyZWN0aW9uYWxJdGVyMiwKICAgICAgICAgICB0eXBlbmFtZSBfQm9vbFR5cGU+CiAgICBz dHJ1Y3QgX19jb3B5X2JhY2t3YXJkX2Rpc3BhdGNoCiAgICB7CiAgICAgIHN0YXRpYyBfQmlkaXJl Y3Rpb25hbEl0ZXIyCiAgICAgIGNvcHkoX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2ZpcnN0LCBfQmlk aXJlY3Rpb25hbEl0ZXIxIF9fbGFzdCwKICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9f cmVzdWx0KQogICAgICB7CiAgICAgICAgcmV0dXJuIF9fY29weV9iYWNrd2FyZChfX2ZpcnN0LCBf X2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Jlc3VsdCwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdCkpOwogICAg ICB9CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBzdHJ1Y3QgX19jb3B5X2Jh Y2t3YXJkX2Rpc3BhdGNoPF9UcCosIF9UcCosIF9fdHJ1ZV90eXBlPgogICAgewogICAgICBzdGF0 aWMgX1RwKgogICAgICBjb3B5KGNvbnN0IF9UcCogX19maXJzdCwgY29uc3QgX1RwKiBfX2xhc3Qs IF9UcCogX19yZXN1bHQpCiAgICAgIHsKICAgICAgICBjb25zdCBwdHJkaWZmX3QgX051bSA9IF9f bGFzdCAtIF9fZmlyc3Q7CiAgICAgICAgbWVtbW92ZShfX3Jlc3VsdCAtIF9OdW0sIF9fZmlyc3Qs IHNpemVvZihfVHApICogX051bSk7CiAgICAgICAgcmV0dXJuIF9fcmVzdWx0IC0gX051bTsKICAg ICAgfQogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgc3RydWN0IF9fY29weV9i YWNrd2FyZF9kaXNwYXRjaDxjb25zdCBfVHAqLCBfVHAqLCBfX3RydWVfdHlwZT4KICAgIHsKICAg ICAgc3RhdGljIF9UcCoKICAgICAgY29weShjb25zdCBfVHAqIF9fZmlyc3QsIGNvbnN0IF9UcCog X19sYXN0LCBfVHAqIF9fcmVzdWx0KQogICAgICB7CiAgICAgICAgcmV0dXJuIF9fY29weV9iYWNr d2FyZF9kaXNwYXRjaDxfVHAqLCBfVHAqLCBfX3RydWVfdHlwZT4KICAgICAgICAgIDo6Y29weShf X2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KTsKICAgICAgfQogICAgfTsKCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0JJMSwgdHlwZW5hbWUgX0JJMj4KICAgIGlubGluZSBfQkkyCiAgICBfX2NvcHlfYmFj a3dhcmRfYXV4KF9CSTEgX19maXJzdCwgX0JJMSBfX2xhc3QsIF9CSTIgX19yZXN1bHQpCiAgICB7 CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX190eXBlX3RyYWl0czx0eXBlbmFtZSBpdGVyYXRvcl90 cmFpdHM8X0JJMj46OnZhbHVlX3R5cGU+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6Omhh c190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3IgX1RyaXZpYWw7CiAgICAgIHJldHVybiBfX2Nv cHlfYmFja3dhcmRfZGlzcGF0Y2g8X0JJMSwgX0JJMiwgX1RyaXZpYWw+CiAgICAgICAgICAgICAg ICAgIDo6Y29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KTsKICAgIH0KCiAgdGVtcGxhdGUg PHR5cGVuYW1lIF9CSTEsIHR5cGVuYW1lIF9CSTI+CiAgICBpbmxpbmUgX0JJMgogICAgX19jb3B5 X2JhY2t3YXJkX291dHB1dF9ub3JtYWxfaXRlcmF0b3IoX0JJMSBfX2ZpcnN0LCBfQkkxIF9fbGFz dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CSTIgX19yZXN1 bHQsIF9fdHJ1ZV90eXBlKQogICAgeyByZXR1cm4gX0JJMihfX2NvcHlfYmFja3dhcmRfYXV4KF9f Zmlyc3QsIF9fbGFzdCwgX19yZXN1bHQuYmFzZSgpKSk7IH0KCiAgdGVtcGxhdGUgPHR5cGVuYW1l IF9CSTEsIHR5cGVuYW1lIF9CSTI+CiAgICBpbmxpbmUgX0JJMgogICAgX19jb3B5X2JhY2t3YXJk X291dHB1dF9ub3JtYWxfaXRlcmF0b3IoX0JJMSBfX2ZpcnN0LCBfQkkxIF9fbGFzdCwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CSTIgX19yZXN1bHQsIF9fZmFs c2VfdHlwZSkKICAgIHsgcmV0dXJuIF9fY29weV9iYWNrd2FyZF9hdXgoX19maXJzdCwgX19sYXN0 LCBfX3Jlc3VsdCk7IH0KCiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9CSTEsIHR5cGVuYW1lIF9CSTI+ CiAgICBpbmxpbmUgX0JJMgogICAgX19jb3B5X2JhY2t3YXJkX2lucHV0X25vcm1hbF9pdGVyYXRv cihfQkkxIF9fZmlyc3QsIF9CSTEgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBfQkkyIF9fcmVzdWx0LCBfX3RydWVfdHlwZSkKICAgIHsKICAgICAgdHlw ZWRlZiB0eXBlbmFtZSBfSXNfbm9ybWFsX2l0ZXJhdG9yPF9CSTI+OjpfTm9ybWFsIF9fTm9ybWFs OwogICAgICByZXR1cm4gX19jb3B5X2JhY2t3YXJkX291dHB1dF9ub3JtYWxfaXRlcmF0b3IoX19m aXJzdC5iYXNlKCksIF9fbGFzdC5iYXNlKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBfX3Jlc3VsdCwgX19Ob3JtYWwoKSk7CiAgICB9CgogIHRl bXBsYXRlIDx0eXBlbmFtZSBfQkkxLCB0eXBlbmFtZSBfQkkyPgogICAgaW5saW5lIF9CSTIKICAg IF9fY29weV9iYWNrd2FyZF9pbnB1dF9ub3JtYWxfaXRlcmF0b3IoX0JJMSBfX2ZpcnN0LCBfQkkx IF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JJMiBf X3Jlc3VsdCwgX19mYWxzZV90eXBlKQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19u b3JtYWxfaXRlcmF0b3I8X0JJMj46Ol9Ob3JtYWwgX19Ob3JtYWw7CiAgICAgIHJldHVybiBfX2Nv cHlfYmFja3dhcmRfb3V0cHV0X25vcm1hbF9pdGVyYXRvcihfX2ZpcnN0LCBfX2xhc3QsIF9fcmVz dWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg X19Ob3JtYWwoKSk7CiAgICB9CiMgNDc3ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9h bGdvYmFzZS5oIiAzCiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9CSTEsIHR5cGVuYW1lIF9CSTI+CiAg ICBpbmxpbmUgX0JJMgogICAgY29weV9iYWNrd2FyZChfQkkxIF9fZmlyc3QsIF9CSTEgX19sYXN0 LCBfQkkyIF9fcmVzdWx0KQogICAgewoKICAgICAKICAgICAKICAgICAKCgoKICAgICAgdHlwZWRl ZiB0eXBlbmFtZSBfSXNfbm9ybWFsX2l0ZXJhdG9yPF9CSTE+OjpfTm9ybWFsIF9fTm9ybWFsOwog ICAgICByZXR1cm4gX19jb3B5X2JhY2t3YXJkX2lucHV0X25vcm1hbF9pdGVyYXRvcihfX2ZpcnN0 LCBfX2xhc3QsIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBfX05vcm1hbCgpKTsKICAgIH0KIyA1MDkgIi91c3IvaW5jbHVkZS9jKysv My4yL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0 ZXIsIHR5cGVuYW1lIF9UcD4KICAgIHZvaWQKICAgIGZpbGwoX0ZvcndhcmRJdGVyIF9fZmlyc3Qs IF9Gb3J3YXJkSXRlciBfX2xhc3QsIGNvbnN0IF9UcCYgX192YWx1ZSkKICAgIHsKCiAgICAgCgog ICAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAgICAgICAgKl9fZmly c3QgPSBfX3ZhbHVlOwogICAgfQojIDUzMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxf YWxnb2Jhc2UuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9PdXRwdXRJdGVyLCB0eXBlbmFtZSBf U2l6ZSwgdHlwZW5hbWUgX1RwPgogICAgX091dHB1dEl0ZXIKICAgIGZpbGxfbihfT3V0cHV0SXRl ciBfX2ZpcnN0LCBfU2l6ZSBfX24sIGNvbnN0IF9UcCYgX192YWx1ZSkKICAgIHsKCiAgICAgCgog ICAgICBmb3IgKCA7IF9fbiA+IDA7IC0tX19uLCArK19fZmlyc3QpCiAgICAgICAgKl9fZmlyc3Qg PSBfX3ZhbHVlOwogICAgICByZXR1cm4gX19maXJzdDsKICAgIH0KCgoKICBpbmxpbmUgdm9pZAog IGZpbGwodW5zaWduZWQgY2hhciogX19maXJzdCwgdW5zaWduZWQgY2hhciogX19sYXN0LCBjb25z dCB1bnNpZ25lZCBjaGFyJiBfX2MpCiAgewogICAgdW5zaWduZWQgY2hhciBfX3RtcCA9IF9fYzsK ICAgIG1lbXNldChfX2ZpcnN0LCBfX3RtcCwgX19sYXN0IC0gX19maXJzdCk7CiAgfQoKICBpbmxp bmUgdm9pZAogIGZpbGwoc2lnbmVkIGNoYXIqIF9fZmlyc3QsIHNpZ25lZCBjaGFyKiBfX2xhc3Qs IGNvbnN0IHNpZ25lZCBjaGFyJiBfX2MpCiAgewogICAgc2lnbmVkIGNoYXIgX190bXAgPSBfX2M7 CiAgICBtZW1zZXQoX19maXJzdCwgc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oX190bXApLCBf X2xhc3QgLSBfX2ZpcnN0KTsKICB9CgogIGlubGluZSB2b2lkCiAgZmlsbChjaGFyKiBfX2ZpcnN0 LCBjaGFyKiBfX2xhc3QsIGNvbnN0IGNoYXImIF9fYykKICB7CiAgICBjaGFyIF9fdG1wID0gX19j OwogICAgbWVtc2V0KF9fZmlyc3QsIHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KF9fdG1wKSwg X19sYXN0IC0gX19maXJzdCk7CiAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfU2l6ZT4KICAgIGlu bGluZSB1bnNpZ25lZCBjaGFyKgogICAgZmlsbF9uKHVuc2lnbmVkIGNoYXIqIF9fZmlyc3QsIF9T aXplIF9fbiwgY29uc3QgdW5zaWduZWQgY2hhciYgX19jKQogICAgewogICAgICBmaWxsKF9fZmly c3QsIF9fZmlyc3QgKyBfX24sIF9fYyk7CiAgICAgIHJldHVybiBfX2ZpcnN0ICsgX19uOwogICAg fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfU2l6ZT4KICAgIGlubGluZSBzaWduZWQgY2hhcioKICAg IGZpbGxfbihjaGFyKiBfX2ZpcnN0LCBfU2l6ZSBfX24sIGNvbnN0IHNpZ25lZCBjaGFyJiBfX2Mp CiAgICB7CiAgICAgIGZpbGwoX19maXJzdCwgX19maXJzdCArIF9fbiwgX19jKTsKICAgICAgcmV0 dXJuIF9fZmlyc3QgKyBfX247CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9TaXplPgogICAg aW5saW5lIGNoYXIqCiAgICBmaWxsX24oY2hhciogX19maXJzdCwgX1NpemUgX19uLCBjb25zdCBj aGFyJiBfX2MpCiAgICB7CiAgICAgIGZpbGwoX19maXJzdCwgX19maXJzdCArIF9fbiwgX19jKTsK ICAgICAgcmV0dXJuIF9fZmlyc3QgKyBfX247CiAgICB9CiMgNjA2ICIvdXNyL2luY2x1ZGUvYysr LzMuMi9iaXRzL3N0bF9hbGdvYmFzZS5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRl cjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXIyPgogICAgcGFpcjxfSW5wdXRJdGVyMSwgX0lucHV0SXRl cjI+CiAgICBtaXNtYXRjaChfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0 MSwKICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyKQogICAgewoKICAgICAKICAgICAK ICAgICAKCiAgICAgCgoKICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgKl9fZmly c3QxID09ICpfX2ZpcnN0MikgewogICAgICAgICsrX19maXJzdDE7CiAgICAgICAgKytfX2ZpcnN0 MjsKICAgICAgfQogICAgICByZXR1cm4gcGFpcjxfSW5wdXRJdGVyMSwgX0lucHV0SXRlcjI+KF9f Zmlyc3QxLCBfX2ZpcnN0Mik7CiAgICB9CiMgNjQwICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRz L3N0bF9hbGdvYmFzZS5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcjEsIHR5cGVu YW1lIF9JbnB1dEl0ZXIyLCB0eXBlbmFtZSBfQmluYXJ5UHJlZGljYXRlPgogICAgcGFpcjxfSW5w dXRJdGVyMSwgX0lucHV0SXRlcjI+CiAgICBtaXNtYXRjaChfSW5wdXRJdGVyMSBfX2ZpcnN0MSwg X0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLAog ICAgICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2JpbmFyeV9wcmVkKQogICAgewoKICAgICAK ICAgICAKCiAgICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fYmluYXJ5X3ByZWQo Kl9fZmlyc3QxLCAqX19maXJzdDIpKSB7CiAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgICArK19f Zmlyc3QyOwogICAgICB9CiAgICAgIHJldHVybiBwYWlyPF9JbnB1dEl0ZXIxLCBfSW5wdXRJdGVy Mj4oX19maXJzdDEsIF9fZmlyc3QyKTsKICAgIH0KIyA2NjggIi91c3IvaW5jbHVkZS9jKysvMy4y L2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwg dHlwZW5hbWUgX0lucHV0SXRlcjI+CiAgICBpbmxpbmUgYm9vbAogICAgZXF1YWwoX0lucHV0SXRl cjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICBfSW5wdXRJdGVyMiBf X2ZpcnN0MikKICAgIHsKCiAgICAgCiAgICAgCiAgICAgCgoKCiAgICAgIGZvciAoIDsgX19maXJz dDEgIT0gX19sYXN0MTsgKytfX2ZpcnN0MSwgKytfX2ZpcnN0MikKICAgICAgICBpZiAoISgqX19m aXJzdDEgPT0gKl9fZmlyc3QyKSkKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgcmV0dXJu IHRydWU7CiAgICB9CiMgNjk5ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvYmFz ZS5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcjEsIHR5cGVuYW1lIF9JbnB1dEl0 ZXIyLCB0eXBlbmFtZSBfQmluYXJ5UHJlZGljYXRlPgogICAgaW5saW5lIGJvb2wKICAgIGVxdWFs KF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgX0lu cHV0SXRlcjIgX19maXJzdDIsCiAgICAgICAgICBfQmluYXJ5UHJlZGljYXRlIF9fYmluYXJ5X3By ZWQpCiAgICB7CgogICAgIAogICAgIAoKICAgICAgZm9yICggOyBfX2ZpcnN0MSAhPSBfX2xhc3Qx OyArK19fZmlyc3QxLCArK19fZmlyc3QyKQogICAgICAgIGlmICghX19iaW5hcnlfcHJlZCgqX19m aXJzdDEsICpfX2ZpcnN0MikpCiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIHJldHVybiB0 cnVlOwogICAgfQojIDczMiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnb2Jhc2Uu aCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJdGVy Mj4KICAgIGJvb2wKICAgIGxleGljb2dyYXBoaWNhbF9jb21wYXJlKF9JbnB1dEl0ZXIxIF9fZmly c3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lu cHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIpCiAgICB7CgogICAgIAogICAg IAogICAgIAoKICAgICAKCgogICAgICBmb3IgKCA7IF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19m aXJzdDIgIT0gX19sYXN0MgogICAgICAgICAgICA7ICsrX19maXJzdDEsICsrX19maXJzdDIpIHsK ICAgICAgICBpZiAoKl9fZmlyc3QxIDwgKl9fZmlyc3QyKQogICAgICAgICAgcmV0dXJuIHRydWU7 CiAgICAgICAgaWYgKCpfX2ZpcnN0MiA8ICpfX2ZpcnN0MSkKICAgICAgICAgIHJldHVybiBmYWxz ZTsKICAgICAgfQogICAgICByZXR1cm4gX19maXJzdDEgPT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAh PSBfX2xhc3QyOwogICAgfQojIDc2NyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxn b2Jhc2UuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5w dXRJdGVyMiwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBib29sCiAgICBsZXhpY29ncmFwaGljYWxf Y29tcGFyZShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBf X2xhc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQogICAg ewoKICAgICAKICAgICAKCiAgICAgIGZvciAoIDsgX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2Zp cnN0MiAhPSBfX2xhc3QyCiAgICAgICAgICAgIDsgKytfX2ZpcnN0MSwgKytfX2ZpcnN0Mikgewog ICAgICAgIGlmIChfX2NvbXAoKl9fZmlyc3QxLCAqX19maXJzdDIpKQogICAgICAgICAgcmV0dXJu IHRydWU7CiAgICAgICAgaWYgKF9fY29tcCgqX19maXJzdDIsICpfX2ZpcnN0MSkpCiAgICAgICAg ICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgICAgcmV0dXJuIF9fZmlyc3QxID09IF9fbGFzdDEg JiYgX19maXJzdDIgIT0gX19sYXN0MjsKICAgIH0KCiAgaW5saW5lIGJvb2wKICBsZXhpY29ncmFw aGljYWxfY29tcGFyZShjb25zdCB1bnNpZ25lZCBjaGFyKiBfX2ZpcnN0MSwgY29uc3QgdW5zaWdu ZWQgY2hhciogX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25l ZCBjaGFyKiBfX2ZpcnN0MiwgY29uc3QgdW5zaWduZWQgY2hhciogX19sYXN0MikKICB7CiAgICBj b25zdCBzaXplX3QgX19sZW4xID0gX19sYXN0MSAtIF9fZmlyc3QxOwogICAgY29uc3Qgc2l6ZV90 IF9fbGVuMiA9IF9fbGFzdDIgLSBfX2ZpcnN0MjsKICAgIGNvbnN0IGludCBfX3Jlc3VsdCA9IG1l bWNtcChfX2ZpcnN0MSwgX19maXJzdDIsIG1pbihfX2xlbjEsIF9fbGVuMikpOwogICAgcmV0dXJu IF9fcmVzdWx0ICE9IDAgPyBfX3Jlc3VsdCA8IDAgOiBfX2xlbjEgPCBfX2xlbjI7CiAgfQoKICBp bmxpbmUgYm9vbAogIGxleGljb2dyYXBoaWNhbF9jb21wYXJlKGNvbnN0IGNoYXIqIF9fZmlyc3Qx LCBjb25zdCBjaGFyKiBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNo YXIqIF9fZmlyc3QyLCBjb25zdCBjaGFyKiBfX2xhc3QyKQogIHsKCiAgICByZXR1cm4gbGV4aWNv Z3JhcGhpY2FsX2NvbXBhcmUoKGNvbnN0IHNpZ25lZCBjaGFyKikgX19maXJzdDEsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHNpZ25lZCBjaGFyKikgX19sYXN0MSwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3Qgc2lnbmVkIGNoYXIqKSBf X2ZpcnN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3Qgc2lnbmVk IGNoYXIqKSBfX2xhc3QyKTsKCgoKCgoKICB9Cgp9CiMgNTUgIi91c3IvaW5jbHVkZS9jKysvMy4y L21lbW9yeSIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxsb2MuaCIg MSAzCiMgODggIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsbG9jLmgiIDMKIyAxICIv dXNyL2luY2x1ZGUvYysrLzMuMi9jYXNzZXJ0IiAxIDMKIyA0NyAiL3Vzci9pbmNsdWRlL2MrKy8z LjIvY2Fzc2VydCIgMwoKIyAxICIvdXNyL2luY2x1ZGUvYXNzZXJ0LmgiIDEgMwojIDY3ICIvdXNy L2luY2x1ZGUvYXNzZXJ0LmgiIDMKZXh0ZXJuICJDIiB7CgoKZXh0ZXJuIHZvaWQgX19hc3NlcnRf ZmFpbCAoX19jb25zdCBjaGFyICpfX2Fzc2VydGlvbiwgX19jb25zdCBjaGFyICpfX2ZpbGUsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBfX2xpbmUsIF9fY29uc3QgY2hh ciAqX19mdW5jdGlvbikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9f KSk7CgoKZXh0ZXJuIHZvaWQgX19hc3NlcnRfcGVycm9yX2ZhaWwgKGludCBfX2Vycm51bSwgX19j b25zdCBjaGFyICpfX2ZpbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNp Z25lZCBpbnQgX19saW5lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25z dCBjaGFyICpfX2Z1bmN0aW9uKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX25vcmV0 dXJuX18pKTsKCgoKCmV4dGVybiB2b2lkIF9fYXNzZXJ0IChjb25zdCBjaGFyICpfX2Fzc2VydGlv biwgY29uc3QgY2hhciAqX19maWxlLCBpbnQgX19saW5lKQogICAgIHRocm93ICgpIF9fYXR0cmli dXRlX18gKChfX25vcmV0dXJuX18pKTsKCgp9CiMgNDkgIi91c3IvaW5jbHVkZS9jKysvMy4yL2Nh c3NlcnQiIDIgMwojIDg5ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGxvYy5oIiAy IDMKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDEgMwojIDM0 ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDMKIyAxICIvdXNyL2lu Y2x1ZGUvYysrLzMuMi9leGNlcHRpb25fZGVmaW5lcy5oIiAxIDMKIyAzNSAiL3Vzci9pbmNsdWRl L2MrKy8zLjIvYml0cy9mdW5jdGV4Y2VwdC5oIiAyIDMKCm5hbWVzcGFjZSBzdGQKewoKICB2b2lk CiAgX190aHJvd19iYWRfZXhjZXB0aW9uKHZvaWQpOwoKCiAgdm9pZAogIF9fdGhyb3dfYmFkX2Fs bG9jKHZvaWQpOwoKCiAgdm9pZAogIF9fdGhyb3dfYmFkX2Nhc3Qodm9pZCk7CgogIHZvaWQKICBf X3Rocm93X2JhZF90eXBlaWQodm9pZCk7CgoKICB2b2lkCiAgX190aHJvd19sb2dpY19lcnJvcihj b25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19kb21haW5fZXJyb3IoY29uc3QgY2hh ciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfaW52YWxpZF9hcmd1bWVudChjb25zdCBjaGFyKiBf X3MpOwoKICB2b2lkCiAgX190aHJvd19sZW5ndGhfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAg dm9pZAogIF9fdGhyb3dfb3V0X29mX3JhbmdlKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBf X3Rocm93X3J1bnRpbWVfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3df cmFuZ2VfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfb3ZlcmZsb3df ZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfdW5kZXJmbG93X2Vycm9y KGNvbnN0IGNoYXIqIF9fcyk7CgoKICB2b2lkCiAgX190aHJvd19pb3NfZmFpbHVyZShjb25zdCBj aGFyKiBfX3MpOwp9CiMgOTAgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsbG9jLmgi IDIgMwojIDEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX3RocmVhZHMuaCIgMSAzCiMg NTQgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX3RocmVhZHMuaCIgMwpuYW1lc3BhY2Ug c3RkCnsKCgoKCiAgc3RydWN0IF9SZWZjb3VudF9CYXNlCiAgewoKICAgIHR5cGVkZWYgc2l6ZV90 IF9SQ190OwoKCiAgICB2b2xhdGlsZSBfUkNfdCBfTV9yZWZfY291bnQ7CgoKICAgIF9fZ3RocmVh ZF9tdXRleF90IF9NX3JlZl9jb3VudF9sb2NrOwoKICAgIF9SZWZjb3VudF9CYXNlKF9SQ190IF9f bikgOiBfTV9yZWZfY291bnQoX19uKQogICAgewoKICAgICAgX19ndGhyZWFkX211dGV4X3QgX190 bXAgPSB7MCwgMCwgMCwgUFRIUkVBRF9NVVRFWF9USU1FRF9OUCwgeyAwLCAwIH19OwogICAgICBf TV9yZWZfY291bnRfbG9jayA9IF9fdG1wOwoKCgoKCiAgICB9CgogICAgdm9pZAogICAgX01faW5j cigpCiAgICB7CiAgICAgIF9fZ3RocmVhZF9tdXRleF9sb2NrKCZfTV9yZWZfY291bnRfbG9jayk7 CiAgICAgICsrX01fcmVmX2NvdW50OwogICAgICBfX2d0aHJlYWRfbXV0ZXhfdW5sb2NrKCZfTV9y ZWZfY291bnRfbG9jayk7CiAgICB9CgogICAgX1JDX3QKICAgIF9NX2RlY3IoKQogICAgewogICAg ICBfX2d0aHJlYWRfbXV0ZXhfbG9jaygmX01fcmVmX2NvdW50X2xvY2spOwogICAgICB2b2xhdGls ZSBfUkNfdCBfX3RtcCA9IC0tX01fcmVmX2NvdW50OwogICAgICBfX2d0aHJlYWRfbXV0ZXhfdW5s b2NrKCZfTV9yZWZfY291bnRfbG9jayk7CiAgICAgIHJldHVybiBfX3RtcDsKICAgIH0KICB9Owoj IDEwOSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfdGhyZWFkcy5oIiAzCiAgdGVtcGxh dGU8aW50IF9fZHVtbXk+CiAgICBzdHJ1Y3QgX1N3YXBfbG9ja19zdHJ1Y3QKICAgIHsgc3RhdGlj IF9fZ3RocmVhZF9tdXRleF90IF9TX3N3YXBfbG9jazsgfTsKCiAgdGVtcGxhdGU8aW50IF9fZHVt bXk+CiAgICBfX2d0aHJlYWRfbXV0ZXhfdAogICAgX1N3YXBfbG9ja19zdHJ1Y3Q8X19kdW1teT46 Ol9TX3N3YXBfbG9jayA9IHswLCAwLCAwLCBQVEhSRUFEX01VVEVYX1RJTUVEX05QLCB7IDAsIDAg fX07CgoKCiAgaW5saW5lIHVuc2lnbmVkIGxvbmcKICBfQXRvbWljX3N3YXAodW5zaWduZWQgbG9u ZyAqIF9fcCwgdW5zaWduZWQgbG9uZyBfX3EpCiAgewogICAgX19ndGhyZWFkX211dGV4X2xvY2so Jl9Td2FwX2xvY2tfc3RydWN0PDA+OjpfU19zd2FwX2xvY2spOwogICAgdW5zaWduZWQgbG9uZyBf X3Jlc3VsdCA9ICpfX3A7CiAgICAqX19wID0gX19xOwogICAgX19ndGhyZWFkX211dGV4X3VubG9j aygmX1N3YXBfbG9ja19zdHJ1Y3Q8MD46Ol9TX3N3YXBfbG9jayk7CiAgICByZXR1cm4gX19yZXN1 bHQ7CiAgfQojIDE1MSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfdGhyZWFkcy5oIiAz CiAgc3RydWN0IF9TVExfbXV0ZXhfbG9jawogIHsKCgoKCgogICAgX19ndGhyZWFkX211dGV4X3Qg X01fbG9jazsKCiAgICB2b2lkCiAgICBfTV9pbml0aWFsaXplKCkKICAgIHsKIyAxODQgIi91c3Iv aW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX3RocmVhZHMuaCIgMwogICAgfQoKICAgIHZvaWQKICAg IF9NX2FjcXVpcmVfbG9jaygpCiAgICB7CgoKCiAgICAgIF9fZ3RocmVhZF9tdXRleF9sb2NrKCZf TV9sb2NrKTsKICAgIH0KCiAgICB2b2lkCiAgICBfTV9yZWxlYXNlX2xvY2soKQogICAgewoKCgog ICAgICBfX2d0aHJlYWRfbXV0ZXhfdW5sb2NrKCZfTV9sb2NrKTsKICAgIH0KICB9OwojIDIyMCAi L3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfdGhyZWFkcy5oIiAzCiAgc3RydWN0IF9TVExf YXV0b19sb2NrCiAgewogICAgX1NUTF9tdXRleF9sb2NrJiBfTV9sb2NrOwoKICAgIF9TVExfYXV0 b19sb2NrKF9TVExfbXV0ZXhfbG9jayYgX19sb2NrKSA6IF9NX2xvY2soX19sb2NrKQogICAgeyBf TV9sb2NrLl9NX2FjcXVpcmVfbG9jaygpOyB9CgogICAgfl9TVExfYXV0b19sb2NrKCkgeyBfTV9s b2NrLl9NX3JlbGVhc2VfbG9jaygpOyB9CgogIHByaXZhdGU6CiAgICB2b2lkIG9wZXJhdG9yPShj b25zdCBfU1RMX2F1dG9fbG9jayYpOwogICAgX1NUTF9hdXRvX2xvY2soY29uc3QgX1NUTF9hdXRv X2xvY2smKTsKICB9OwoKfQojIDkxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGxv Yy5oIiAyIDMKCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvaTM4Ni1saW51eC9iaXRzL2F0b21p Y2l0eS5oIiAxIDMKIyAzMyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvaTM4Ni1saW51eC9iaXRzL2F0 b21pY2l0eS5oIiAzCnR5cGVkZWYgaW50IF9BdG9taWNfd29yZDsKCnN0YXRpYyBpbmxpbmUgX0F0 b21pY193b3JkCl9fYXR0cmlidXRlX18gKChfX3VudXNlZF9fKSkKX19leGNoYW5nZV9hbmRfYWRk ICh2b2xhdGlsZSBfQXRvbWljX3dvcmQgKl9fbWVtLCBpbnQgX192YWwpCnsKICByZWdpc3RlciBf QXRvbWljX3dvcmQgX19yZXN1bHQ7CiAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJsb2NrOyB4YWRk bCAlMCwlMiIKICAgICAgICAgICAgICAgICAgICAgICAgOiAiPXIiIChfX3Jlc3VsdCkKICAgICAg ICAgICAgICAgICAgICAgICAgOiAiMCIgKF9fdmFsKSwgIm0iICgqX19tZW0pCiAgICAgICAgICAg ICAgICAgICAgICAgIDogIm1lbW9yeSIpOwogIHJldHVybiBfX3Jlc3VsdDsKfQoKc3RhdGljIGlu bGluZSB2b2lkCl9fYXR0cmlidXRlX18gKChfX3VudXNlZF9fKSkKX19hdG9taWNfYWRkICh2b2xh dGlsZSBfQXRvbWljX3dvcmQqIF9fbWVtLCBpbnQgX192YWwpCnsKICBfX2FzbV9fIF9fdm9sYXRp bGVfXyAoImxvY2s7IGFkZGwgJTAsJTEiCiAgICAgICAgICAgICAgICAgICAgICAgIDogOiAiaXIi IChfX3ZhbCksICJtIiAoKl9fbWVtKSA6ICJtZW1vcnkiKTsKfQojIDkzICIvdXNyL2luY2x1ZGUv YysrLzMuMi9iaXRzL3N0bF9hbGxvYy5oIiAyIDMKCm5hbWVzcGFjZSBzdGQKewojIDEwNCAiL3Vz ci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxsb2MuaCIgMwogIGNsYXNzIF9fbmV3X2FsbG9j CiAgewogIHB1YmxpYzoKICAgIHN0YXRpYyB2b2lkKgogICAgYWxsb2NhdGUoc2l6ZV90IF9fbikK ICAgIHsgcmV0dXJuIDo6b3BlcmF0b3IgbmV3KF9fbik7IH0KCiAgICBzdGF0aWMgdm9pZAogICAg ZGVhbGxvY2F0ZSh2b2lkKiBfX3AsIHNpemVfdCkKICAgIHsgOjpvcGVyYXRvciBkZWxldGUoX19w KTsgfQogIH07CiMgMTI3ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGxvYy5oIiAz CiAgdGVtcGxhdGU8aW50IF9faW5zdD4KICAgIGNsYXNzIF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRl CiAgICB7CiAgICBwcml2YXRlOgogICAgICBzdGF0aWMgdm9pZCogX1Nfb29tX21hbGxvYyhzaXpl X3QpOwoKCiAgICAgIHN0YXRpYyB2b2lkKiBfU19vb21fcmVhbGxvYyh2b2lkKiwgc2l6ZV90KTsK CiAgICAgIHN0YXRpYyB2b2lkICgqIF9fbWFsbG9jX2FsbG9jX29vbV9oYW5kbGVyKSgpOwoKICAg IHB1YmxpYzoKICAgICAgc3RhdGljIHZvaWQqCiAgICAgIGFsbG9jYXRlKHNpemVfdCBfX24pCiAg ICAgIHsKICAgICAgICB2b2lkKiBfX3Jlc3VsdCA9IG1hbGxvYyhfX24pOwogICAgICAgIGlmIChf X2J1aWx0aW5fZXhwZWN0KF9fcmVzdWx0ID09IDAsIDApKQogICAgICAgICAgX19yZXN1bHQgPSBf U19vb21fbWFsbG9jKF9fbik7CiAgICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAgICB9CgogICAg ICBzdGF0aWMgdm9pZAogICAgICBkZWFsbG9jYXRlKHZvaWQqIF9fcCwgc2l6ZV90ICkKICAgICAg eyBmcmVlKF9fcCk7IH0KCgogICAgICBzdGF0aWMgdm9pZCoKICAgICAgcmVhbGxvY2F0ZSh2b2lk KiBfX3AsIHNpemVfdCAsIHNpemVfdCBfX25ld19zeikKICAgICAgewogICAgICAgIHZvaWQqIF9f cmVzdWx0ID0gcmVhbGxvYyhfX3AsIF9fbmV3X3N6KTsKICAgICAgICBpZiAoX19idWlsdGluX2V4 cGVjdChfX3Jlc3VsdCA9PSAwLCAwKSkKICAgICAgICAgIF9fcmVzdWx0ID0gX1Nfb29tX3JlYWxs b2MoX19wLCBfX25ld19zeik7CiAgICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAgICB9CgogICAg ICBzdGF0aWMgdm9pZCAoKiBfX3NldF9tYWxsb2NfaGFuZGxlcih2b2lkICgqX19mKSgpKSkoKQog ICAgICB7CiAgICAgICAgdm9pZCAoKiBfX29sZCkoKSA9IF9fbWFsbG9jX2FsbG9jX29vbV9oYW5k bGVyOwogICAgICAgIF9fbWFsbG9jX2FsbG9jX29vbV9oYW5kbGVyID0gX19mOwogICAgICAgIHJl dHVybiBfX29sZDsKICAgICAgfQogICAgfTsKCgogIHRlbXBsYXRlPGludCBfX2luc3Q+CiAgICB2 b2lkICgqIF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9faW5zdD46Ol9fbWFsbG9jX2FsbG9jX29v bV9oYW5kbGVyKSgpID0gMDsKCiAgdGVtcGxhdGU8aW50IF9faW5zdD4KICAgIHZvaWQqCiAgICBf X21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+OjoKICAgIF9TX29vbV9tYWxsb2Moc2l6ZV90 IF9fbikKICAgIHsKICAgICAgdm9pZCAoKiBfX215X21hbGxvY19oYW5kbGVyKSgpOwogICAgICB2 b2lkKiBfX3Jlc3VsdDsKCiAgICAgIGZvciAoOzspCiAgICAgICAgewogICAgICAgICAgX19teV9t YWxsb2NfaGFuZGxlciA9IF9fbWFsbG9jX2FsbG9jX29vbV9oYW5kbGVyOwogICAgICAgICAgaWYg KF9fYnVpbHRpbl9leHBlY3QoX19teV9tYWxsb2NfaGFuZGxlciA9PSAwLCAwKSkKICAgICAgICAg ICAgX190aHJvd19iYWRfYWxsb2MoKTsKICAgICAgICAgICgqX19teV9tYWxsb2NfaGFuZGxlciko KTsKICAgICAgICAgIF9fcmVzdWx0ID0gbWFsbG9jKF9fbik7CiAgICAgICAgICBpZiAoX19yZXN1 bHQpCiAgICAgICAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgICAgICB9CiAgICB9CgoKICB0ZW1w bGF0ZTxpbnQgX19pbnN0PgogICAgdm9pZCoKICAgIF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9f aW5zdD46OgogICAgX1Nfb29tX3JlYWxsb2Modm9pZCogX19wLCBzaXplX3QgX19uKQogICAgewog ICAgICB2b2lkICgqIF9fbXlfbWFsbG9jX2hhbmRsZXIpKCk7CiAgICAgIHZvaWQqIF9fcmVzdWx0 OwoKICAgICAgZm9yICg7OykKICAgICAgICB7CiAgICAgICAgICBfX215X21hbGxvY19oYW5kbGVy ID0gX19tYWxsb2NfYWxsb2Nfb29tX2hhbmRsZXI7CiAgICAgICAgICBpZiAoX19idWlsdGluX2V4 cGVjdChfX215X21hbGxvY19oYW5kbGVyID09IDAsIDApKQogICAgICAgICAgICBfX3Rocm93X2Jh ZF9hbGxvYygpOwogICAgICAgICAgKCpfX215X21hbGxvY19oYW5kbGVyKSgpOwogICAgICAgICAg X19yZXN1bHQgPSByZWFsbG9jKF9fcCwgX19uKTsKICAgICAgICAgIGlmIChfX3Jlc3VsdCkKICAg ICAgICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAgICAgIH0KICAgIH0KCgogIHR5cGVkZWYgX19u ZXdfYWxsb2MgX19tZW1faW50ZXJmYWNlOwojIDIyOSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0 cy9zdGxfYWxsb2MuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9j PgogICAgY2xhc3MgX19zaW1wbGVfYWxsb2MKICAgIHsKICAgIHB1YmxpYzoKICAgICAgc3RhdGlj IF9UcCoKICAgICAgYWxsb2NhdGUoc2l6ZV90IF9fbikKICAgICAgewogICAgICAgIF9UcCogX19y ZXQgPSAwOwogICAgICAgIGlmIChfX24pCiAgICAgICAgICBfX3JldCA9IHN0YXRpY19jYXN0PF9U cCo+KF9BbGxvYzo6YWxsb2NhdGUoX19uICogc2l6ZW9mKF9UcCkpKTsKICAgICAgICByZXR1cm4g X19yZXQ7CiAgICAgIH0KCiAgICAgIHN0YXRpYyBfVHAqCiAgICAgIGFsbG9jYXRlKCkKICAgICAg eyByZXR1cm4gKF9UcCopIF9BbGxvYzo6YWxsb2NhdGUoc2l6ZW9mIChfVHApKTsgfQoKICAgICAg c3RhdGljIHZvaWQKICAgICAgZGVhbGxvY2F0ZShfVHAqIF9fcCwgc2l6ZV90IF9fbikKICAgICAg eyBpZiAoMCAhPSBfX24pIF9BbGxvYzo6ZGVhbGxvY2F0ZShfX3AsIF9fbiAqIHNpemVvZiAoX1Rw KSk7IH0KCiAgICAgIHN0YXRpYyB2b2lkCiAgICAgIGRlYWxsb2NhdGUoX1RwKiBfX3ApCiAgICAg IHsgX0FsbG9jOjpkZWFsbG9jYXRlKF9fcCwgc2l6ZW9mIChfVHApKTsgfQogICAgfTsKIyAyNzAg Ii91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsbG9jLmgiIDMKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfQWxsb2M+CiAgICBjbGFzcyBfX2RlYnVnX2FsbG9jCiAgICB7CiAgICBwcml2YXRlOgoK CiAgICAgIGVudW0ge19TX2V4dHJhID0gOH07CgogICAgcHVibGljOgogICAgICBzdGF0aWMgdm9p ZCoKICAgICAgYWxsb2NhdGUoc2l6ZV90IF9fbikKICAgICAgewogICAgICAgIGNoYXIqIF9fcmVz dWx0ID0gKGNoYXIqKV9BbGxvYzo6YWxsb2NhdGUoX19uICsgKGludCkgX1NfZXh0cmEpOwogICAg ICAgICooc2l6ZV90KilfX3Jlc3VsdCA9IF9fbjsKICAgICAgICByZXR1cm4gX19yZXN1bHQgKyAo aW50KSBfU19leHRyYTsKICAgICAgfQoKICAgICAgc3RhdGljIHZvaWQKICAgICAgZGVhbGxvY2F0 ZSh2b2lkKiBfX3AsIHNpemVfdCBfX24pCiAgICAgIHsKICAgICAgICBjaGFyKiBfX3JlYWxfcCA9 IChjaGFyKilfX3AgLSAoaW50KSBfU19leHRyYTsKICAgICAgICAoc3RhdGljX2Nhc3Q8dm9pZD4g KCgqKHNpemVfdCopX19yZWFsX3AgPT0gX19uKSA/IDAgOiAoX19hc3NlcnRfZmFpbCAoIiooc2l6 ZV90KilfX3JlYWxfcCA9PSBfX24iLCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxs b2MuaCIsIDI5MSwgX19QUkVUVFlfRlVOQ1RJT05fXyksIDApKSk7CiAgICAgICAgX0FsbG9jOjpk ZWFsbG9jYXRlKF9fcmVhbF9wLCBfX24gKyAoaW50KSBfU19leHRyYSk7CiAgICAgIH0KCgogICAg ICBzdGF0aWMgdm9pZCoKICAgICAgcmVhbGxvY2F0ZSh2b2lkKiBfX3AsIHNpemVfdCBfX29sZF9z eiwgc2l6ZV90IF9fbmV3X3N6KQogICAgICB7CiAgICAgICAgY2hhciogX19yZWFsX3AgPSAoY2hh ciopX19wIC0gKGludCkgX1NfZXh0cmE7CiAgICAgICAgKHN0YXRpY19jYXN0PHZvaWQ+ICgoKihz aXplX3QqKV9fcmVhbF9wID09IF9fb2xkX3N6KSA/IDAgOiAoX19hc3NlcnRfZmFpbCAoIiooc2l6 ZV90KilfX3JlYWxfcCA9PSBfX29sZF9zeiIsICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0 bF9hbGxvYy5oIiwgMzAwLCBfX1BSRVRUWV9GVU5DVElPTl9fKSwgMCkpKTsKICAgICAgICBjaGFy KiBfX3Jlc3VsdCA9IChjaGFyKikgX0FsbG9jOjpyZWFsbG9jYXRlKF9fcmVhbF9wLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19vbGRfc3ogKyAo aW50KSBfU19leHRyYSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIF9fbmV3X3N6ICsgKGludCkgX1NfZXh0cmEpOwogICAgICAgICooc2l6ZV90Kilf X3Jlc3VsdCA9IF9fbmV3X3N6OwogICAgICAgIHJldHVybiBfX3Jlc3VsdCArIChpbnQpIF9TX2V4 dHJhOwogICAgICB9CiAgICB9OwojIDM0MCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxf YWxsb2MuaCIgMwogIHRlbXBsYXRlPGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0PgogICAgY2xh c3MgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlCiAgICB7CiAgICBwcml2YXRlOgogICAgICBlbnVt IHtfQUxJR04gPSA4fTsKICAgICAgZW51bSB7X01BWF9CWVRFUyA9IDEyOH07CiAgICAgIGVudW0g e19ORlJFRUxJU1RTID0gX01BWF9CWVRFUyAvIF9BTElHTn07CgogICAgICB1bmlvbiBfT2JqCiAg ICAgIHsKICAgICAgICB1bmlvbiBfT2JqKiBfTV9mcmVlX2xpc3RfbGluazsKICAgICAgICBjaGFy IF9NX2NsaWVudF9kYXRhWzFdOwogICAgICB9OwoKICAgICAgc3RhdGljIF9PYmoqIHZvbGF0aWxl IF9TX2ZyZWVfbGlzdFtfTkZSRUVMSVNUU107CgoKICAgICAgc3RhdGljIGNoYXIqIF9TX3N0YXJ0 X2ZyZWU7CiAgICAgIHN0YXRpYyBjaGFyKiBfU19lbmRfZnJlZTsKICAgICAgc3RhdGljIHNpemVf dCBfU19oZWFwX3NpemU7CgogICAgICBzdGF0aWMgX1NUTF9tdXRleF9sb2NrIF9TX25vZGVfYWxs b2NhdG9yX2xvY2s7CgogICAgICBzdGF0aWMgc2l6ZV90CiAgICAgIF9TX3JvdW5kX3VwKHNpemVf dCBfX2J5dGVzKQogICAgICB7IHJldHVybiAoKChfX2J5dGVzKSArIChzaXplX3QpIF9BTElHTi0x KSAmIH4oKHNpemVfdCkgX0FMSUdOIC0gMSkpOyB9CgogICAgICBzdGF0aWMgc2l6ZV90CiAgICAg IF9TX2ZyZWVsaXN0X2luZGV4KHNpemVfdCBfX2J5dGVzKQogICAgICB7IHJldHVybiAoKChfX2J5 dGVzKSArIChzaXplX3QpX0FMSUdOIC0gMSkvKHNpemVfdClfQUxJR04gLSAxKTsgfQoKCgogICAg ICBzdGF0aWMgdm9pZCoKICAgICAgX1NfcmVmaWxsKHNpemVfdCBfX24pOwoKCgogICAgICBzdGF0 aWMgY2hhcioKICAgICAgX1NfY2h1bmtfYWxsb2Moc2l6ZV90IF9fc2l6ZSwgaW50JiBfX25vYmpz KTsKCgoKICAgICAgc3RydWN0IF9Mb2NrCiAgICAgIHsKICAgICAgICBfTG9jaygpIHsgaWYgKF9f dGhyZWFkcykgX1Nfbm9kZV9hbGxvY2F0b3JfbG9jay5fTV9hY3F1aXJlX2xvY2soKTsgfQogICAg ICAgIH5fTG9jaygpIHsgaWYgKF9fdGhyZWFkcykgX1Nfbm9kZV9hbGxvY2F0b3JfbG9jay5fTV9y ZWxlYXNlX2xvY2soKTsgfQogICAgICB9IF9fYXR0cmlidXRlX18gKChfX3VudXNlZF9fKSk7CiAg ICAgIGZyaWVuZCBzdHJ1Y3QgX0xvY2s7CgogICAgICBzdGF0aWMgX0F0b21pY193b3JkIF9TX2Zv cmNlX25ldzsKCiAgICBwdWJsaWM6CgogICAgICBzdGF0aWMgdm9pZCoKICAgICAgYWxsb2NhdGUo c2l6ZV90IF9fbikKICAgICAgewogICAgICAgIHZvaWQqIF9fcmV0ID0gMDsKCgoKCiAgICAgICAg aWYgKF9TX2ZvcmNlX25ldyA9PSAwKQogICAgICAgICAgewogICAgICAgICAgICBpZiAoZ2V0ZW52 KCJHTElCQ1BQX0ZPUkNFX05FVyIpKQogICAgICAgICAgICAgIF9fYXRvbWljX2FkZCgmX1NfZm9y Y2VfbmV3LCAxKTsKICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgIF9fYXRvbWljX2FkZCgm X1NfZm9yY2VfbmV3LCAtMSk7CgogICAgICAgICAgICAoc3RhdGljX2Nhc3Q8dm9pZD4gKChfU19m b3JjZV9uZXcgIT0gMCkgPyAwIDogKF9fYXNzZXJ0X2ZhaWwgKCJfU19mb3JjZV9uZXcgIT0gMCIs ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGxvYy5oIiwgNDA5LCBfX1BSRVRUWV9G VU5DVElPTl9fKSwgMCkpKTsKICAgICAgICAgIH0KCiAgICAgICAgaWYgKChfX24gPiAoc2l6ZV90 KSBfTUFYX0JZVEVTKSB8fCAoX1NfZm9yY2VfbmV3ID4gMCkpCiAgICAgICAgICBfX3JldCA9IF9f bmV3X2FsbG9jOjphbGxvY2F0ZShfX24pOwogICAgICAgIGVsc2UKICAgICAgICAgIHsKICAgICAg ICAgICAgX09iaiogdm9sYXRpbGUqIF9fbXlfZnJlZV9saXN0ID0gX1NfZnJlZV9saXN0CiAgICAg ICAgICAgICAgKyBfU19mcmVlbGlzdF9pbmRleChfX24pOwoKCgogICAgICAgICAgICBfTG9jayBf X2xvY2tfaW5zdGFuY2U7CiAgICAgICAgICAgIF9PYmoqIF9fcmVzdHJpY3RfXyBfX3Jlc3VsdCA9 ICpfX215X2ZyZWVfbGlzdDsKICAgICAgICAgICAgaWYgKF9fYnVpbHRpbl9leHBlY3QoX19yZXN1 bHQgPT0gMCwgMCkpCiAgICAgICAgICAgICAgX19yZXQgPSBfU19yZWZpbGwoX1Nfcm91bmRfdXAo X19uKSk7CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAq X19teV9mcmVlX2xpc3QgPSBfX3Jlc3VsdCAtPiBfTV9mcmVlX2xpc3RfbGluazsKICAgICAgICAg ICAgICAgIF9fcmV0ID0gX19yZXN1bHQ7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAo X19idWlsdGluX2V4cGVjdChfX3JldCA9PSAwLCAwKSkKICAgICAgICAgICAgICBfX3Rocm93X2Jh ZF9hbGxvYygpOwogICAgICAgICAgfQogICAgICAgIHJldHVybiBfX3JldDsKICAgICAgfQoKCiAg ICAgIHN0YXRpYyB2b2lkCiAgICAgIGRlYWxsb2NhdGUodm9pZCogX19wLCBzaXplX3QgX19uKQog ICAgICB7CiAgICAgICAgaWYgKChfX24gPiAoc2l6ZV90KSBfTUFYX0JZVEVTKSB8fCAoX1NfZm9y Y2VfbmV3ID4gMCkpCiAgICAgICAgICBfX25ld19hbGxvYzo6ZGVhbGxvY2F0ZShfX3AsIF9fbik7 CiAgICAgICAgZWxzZQogICAgICAgICAgewogICAgICAgICAgICBfT2JqKiB2b2xhdGlsZSogX19t eV9mcmVlX2xpc3QgPSBfU19mcmVlX2xpc3QKICAgICAgICAgICAgICArIF9TX2ZyZWVsaXN0X2lu ZGV4KF9fbik7CiAgICAgICAgICAgIF9PYmoqIF9fcSA9IChfT2JqKilfX3A7CgoKCgogICAgICAg ICAgICBfTG9jayBfX2xvY2tfaW5zdGFuY2U7CiAgICAgICAgICAgIF9fcSAtPiBfTV9mcmVlX2xp c3RfbGluayA9ICpfX215X2ZyZWVfbGlzdDsKICAgICAgICAgICAgKl9fbXlfZnJlZV9saXN0ID0g X19xOwogICAgICAgICAgfQogICAgICB9CgoKICAgICAgc3RhdGljIHZvaWQqCiAgICAgIHJlYWxs b2NhdGUodm9pZCogX19wLCBzaXplX3QgX19vbGRfc3osIHNpemVfdCBfX25ld19zeik7CiAgICB9 OwoKICB0ZW1wbGF0ZTxib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4gX0F0b21pY193b3JkCiAg X19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0Pjo6X1NfZm9yY2VfbmV3 ID0gMDsKCiAgdGVtcGxhdGU8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+CiAgICBpbmxpbmUg Ym9vbAogICAgb3BlcmF0b3I9PShjb25zdCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJl YWRzLF9faW5zdD4mLAogICAgICAgICAgICAgICBjb25zdCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxh dGU8X190aHJlYWRzLF9faW5zdD4mKQogICAgeyByZXR1cm4gdHJ1ZTsgfQoKICB0ZW1wbGF0ZTxi b29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvciE9 KGNvbnN0IF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsX19pbnN0PiYsCiAgICAg ICAgICAgICAgIGNvbnN0IF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsX19pbnN0 PiYpCiAgICB7IHJldHVybiBmYWxzZTsgfQoKCgoKCiAgdGVtcGxhdGU8Ym9vbCBfX3RocmVhZHMs IGludCBfX2luc3Q+CiAgICBjaGFyKgogICAgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhy ZWFkcywgX19pbnN0Pjo6CiAgICBfU19jaHVua19hbGxvYyhzaXplX3QgX19zaXplLCBpbnQmIF9f bm9ianMpCiAgICB7CiAgICAgIGNoYXIqIF9fcmVzdWx0OwogICAgICBzaXplX3QgX190b3RhbF9i eXRlcyA9IF9fc2l6ZSAqIF9fbm9ianM7CiAgICAgIHNpemVfdCBfX2J5dGVzX2xlZnQgPSBfU19l bmRfZnJlZSAtIF9TX3N0YXJ0X2ZyZWU7CgogICAgICBpZiAoX19ieXRlc19sZWZ0ID49IF9fdG90 YWxfYnl0ZXMpCiAgICAgICAgewogICAgICAgICAgX19yZXN1bHQgPSBfU19zdGFydF9mcmVlOwog ICAgICAgICAgX1Nfc3RhcnRfZnJlZSArPSBfX3RvdGFsX2J5dGVzOwogICAgICAgICAgcmV0dXJu IF9fcmVzdWx0IDsKICAgICAgICB9CiAgICAgIGVsc2UgaWYgKF9fYnl0ZXNfbGVmdCA+PSBfX3Np emUpCiAgICAgICAgewogICAgICAgICAgX19ub2JqcyA9IChpbnQpKF9fYnl0ZXNfbGVmdC9fX3Np emUpOwogICAgICAgICAgX190b3RhbF9ieXRlcyA9IF9fc2l6ZSAqIF9fbm9ianM7CiAgICAgICAg ICBfX3Jlc3VsdCA9IF9TX3N0YXJ0X2ZyZWU7CiAgICAgICAgICBfU19zdGFydF9mcmVlICs9IF9f dG90YWxfYnl0ZXM7CiAgICAgICAgICByZXR1cm4gX19yZXN1bHQ7CiAgICAgICAgfQogICAgICBl bHNlCiAgICAgICAgewogICAgICAgICAgc2l6ZV90IF9fYnl0ZXNfdG9fZ2V0ID0KICAgICAgICAg ICAgMiAqIF9fdG90YWxfYnl0ZXMgKyBfU19yb3VuZF91cChfU19oZWFwX3NpemUgPj4gNCk7Cgog ICAgICAgICAgaWYgKF9fYnl0ZXNfbGVmdCA+IDApCiAgICAgICAgICAgIHsKICAgICAgICAgICAg ICBfT2JqKiB2b2xhdGlsZSogX19teV9mcmVlX2xpc3QgPQogICAgICAgICAgICAgICAgX1NfZnJl ZV9saXN0ICsgX1NfZnJlZWxpc3RfaW5kZXgoX19ieXRlc19sZWZ0KTsKCiAgICAgICAgICAgICAg KChfT2JqKilfU19zdGFydF9mcmVlKSAtPiBfTV9mcmVlX2xpc3RfbGluayA9ICpfX215X2ZyZWVf bGlzdDsKICAgICAgICAgICAgICAqX19teV9mcmVlX2xpc3QgPSAoX09iaiopX1Nfc3RhcnRfZnJl ZTsKICAgICAgICAgICAgfQogICAgICAgICAgX1Nfc3RhcnRfZnJlZSA9IChjaGFyKikgX19uZXdf YWxsb2M6OmFsbG9jYXRlKF9fYnl0ZXNfdG9fZ2V0KTsKICAgICAgICAgIGlmIChfU19zdGFydF9m cmVlID09IDApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBzaXplX3QgX19pOwogICAgICAg ICAgICAgIF9PYmoqIHZvbGF0aWxlKiBfX215X2ZyZWVfbGlzdDsKICAgICAgICAgICAgICBfT2Jq KiBfX3A7CgoKCiAgICAgICAgICAgICAgX19pID0gX19zaXplOwogICAgICAgICAgICAgIGZvciAo OyBfX2kgPD0gKHNpemVfdCkgX01BWF9CWVRFUzsgX19pICs9IChzaXplX3QpIF9BTElHTikKICAg ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgX19teV9mcmVlX2xpc3QgPSBfU19mcmVl X2xpc3QgKyBfU19mcmVlbGlzdF9pbmRleChfX2kpOwogICAgICAgICAgICAgICAgICBfX3AgPSAq X19teV9mcmVlX2xpc3Q7CiAgICAgICAgICAgICAgICAgIGlmIChfX3AgIT0gMCkKICAgICAgICAg ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAqX19teV9mcmVlX2xpc3QgPSBfX3Ag LT4gX01fZnJlZV9saXN0X2xpbms7CiAgICAgICAgICAgICAgICAgICAgICBfU19zdGFydF9mcmVl ID0gKGNoYXIqKV9fcDsKICAgICAgICAgICAgICAgICAgICAgIF9TX2VuZF9mcmVlID0gX1Nfc3Rh cnRfZnJlZSArIF9faTsKICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfU19jaHVua19hbGxv YyhfX3NpemUsIF9fbm9ianMpOwoKCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg ICAgfQogICAgICAgICAgICAgIF9TX2VuZF9mcmVlID0gMDsKICAgICAgICAgICAgICBfU19zdGFy dF9mcmVlID0gKGNoYXIqKV9fbmV3X2FsbG9jOjphbGxvY2F0ZShfX2J5dGVzX3RvX2dldCk7CgoK ICAgICAgICAgICAgfQogICAgICAgICAgX1NfaGVhcF9zaXplICs9IF9fYnl0ZXNfdG9fZ2V0Owog ICAgICAgICAgX1NfZW5kX2ZyZWUgPSBfU19zdGFydF9mcmVlICsgX19ieXRlc190b19nZXQ7CiAg ICAgICAgICByZXR1cm4gX1NfY2h1bmtfYWxsb2MoX19zaXplLCBfX25vYmpzKTsKICAgICAgICB9 CiAgICB9CgoKCgoKICB0ZW1wbGF0ZTxib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4KICAgIHZv aWQqCiAgICBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+OjpfU19y ZWZpbGwoc2l6ZV90IF9fbikKICAgIHsKICAgICAgaW50IF9fbm9ianMgPSAyMDsKICAgICAgY2hh ciogX19jaHVuayA9IF9TX2NodW5rX2FsbG9jKF9fbiwgX19ub2Jqcyk7CiAgICAgIF9PYmoqIHZv bGF0aWxlKiBfX215X2ZyZWVfbGlzdDsKICAgICAgX09iaiogX19yZXN1bHQ7CiAgICAgIF9PYmoq IF9fY3VycmVudF9vYmo7CiAgICAgIF9PYmoqIF9fbmV4dF9vYmo7CiAgICAgIGludCBfX2k7Cgog ICAgICBpZiAoMSA9PSBfX25vYmpzKQogICAgICAgIHJldHVybiBfX2NodW5rOwogICAgICBfX215 X2ZyZWVfbGlzdCA9IF9TX2ZyZWVfbGlzdCArIF9TX2ZyZWVsaXN0X2luZGV4KF9fbik7CgoKICAg ICAgX19yZXN1bHQgPSAoX09iaiopX19jaHVuazsKICAgICAgKl9fbXlfZnJlZV9saXN0ID0gX19u ZXh0X29iaiA9IChfT2JqKikoX19jaHVuayArIF9fbik7CiAgICAgIGZvciAoX19pID0gMTsgOyBf X2krKykKICAgICAgICB7CiAgICAgICAgICBfX2N1cnJlbnRfb2JqID0gX19uZXh0X29iajsKICAg ICAgICAgIF9fbmV4dF9vYmogPSAoX09iaiopKChjaGFyKilfX25leHRfb2JqICsgX19uKTsKICAg ICAgICAgIGlmIChfX25vYmpzIC0gMSA9PSBfX2kpCiAgICAgICAgICAgIHsKICAgICAgICAgICAg ICBfX2N1cnJlbnRfb2JqIC0+IF9NX2ZyZWVfbGlzdF9saW5rID0gMDsKICAgICAgICAgICAgICBi cmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgZWxzZQogICAgICAgICAgICBfX2N1cnJlbnRf b2JqIC0+IF9NX2ZyZWVfbGlzdF9saW5rID0gX19uZXh0X29iajsKICAgICAgICB9CiAgICAgIHJl dHVybiBfX3Jlc3VsdDsKICAgIH0KCgoKICB0ZW1wbGF0ZTxib29sIHRocmVhZHMsIGludCBpbnN0 PgogICAgdm9pZCoKICAgIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTx0aHJlYWRzLCBpbnN0Pjo6 CiAgICByZWFsbG9jYXRlKHZvaWQqIF9fcCwgc2l6ZV90IF9fb2xkX3N6LCBzaXplX3QgX19uZXdf c3opCiAgICB7CiAgICAgIHZvaWQqIF9fcmVzdWx0OwogICAgICBzaXplX3QgX19jb3B5X3N6OwoK ICAgICAgaWYgKF9fb2xkX3N6ID4gKHNpemVfdCkgX01BWF9CWVRFUyAmJiBfX25ld19zeiA+IChz aXplX3QpIF9NQVhfQllURVMpCiAgICAgICAgcmV0dXJuKHJlYWxsb2MoX19wLCBfX25ld19zeikp OwogICAgICBpZiAoX1Nfcm91bmRfdXAoX19vbGRfc3opID09IF9TX3JvdW5kX3VwKF9fbmV3X3N6 KSkKICAgICAgICByZXR1cm4oX19wKTsKICAgICAgX19yZXN1bHQgPSBhbGxvY2F0ZShfX25ld19z eik7CiAgICAgIF9fY29weV9zeiA9IF9fbmV3X3N6ID4gX19vbGRfc3o/IF9fb2xkX3N6IDogX19u ZXdfc3o7CiAgICAgIG1lbWNweShfX3Jlc3VsdCwgX19wLCBfX2NvcHlfc3opOwogICAgICBkZWFs bG9jYXRlKF9fcCwgX19vbGRfc3opOwogICAgICByZXR1cm4gX19yZXN1bHQ7CiAgICB9CgogIHRl bXBsYXRlPGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0PgogICAgX1NUTF9tdXRleF9sb2NrCiAg ICBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLF9faW5zdD46Ol9TX25vZGVfYWxs b2NhdG9yX2xvY2sKICAgID0geyB7MCwgMCwgMCwgUFRIUkVBRF9NVVRFWF9USU1FRF9OUCwgeyAw LCAwIH19IH07CgogIHRlbXBsYXRlPGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0PgogICAgY2hh ciogX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcyxfX2luc3Q+OjpfU19zdGFydF9m cmVlID0gMDsKCiAgdGVtcGxhdGU8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+CiAgICBjaGFy KiBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLF9faW5zdD46Ol9TX2VuZF9mcmVl ID0gMDsKCiAgdGVtcGxhdGU8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+CiAgICBzaXplX3Qg X19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcyxfX2luc3Q+OjpfU19oZWFwX3NpemUg PSAwOwoKICB0ZW1wbGF0ZTxib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4KICAgIHR5cGVuYW1l IF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsX19pbnN0Pjo6X09iaiogdm9sYXRp bGUKICAgIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsX19pbnN0Pjo6X1NfZnJl ZV9saXN0W19ORlJFRUxJU1RTXTsKCiAgdHlwZWRlZiBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8 dHJ1ZSwwPiBfX2FsbG9jOwogIHR5cGVkZWYgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPGZhbHNl LDA+IF9fc2luZ2xlX2NsaWVudF9hbGxvYzsKIyA2NDcgIi91c3IvaW5jbHVkZS9jKysvMy4yL2Jp dHMvc3RsX2FsbG9jLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBjbGFzcyBhbGxv Y2F0b3IKICAgIHsKICAgICAgdHlwZWRlZiBfX2FsbG9jIF9BbGxvYzsKICAgIHB1YmxpYzoKICAg ICAgdHlwZWRlZiBzaXplX3Qgc2l6ZV90eXBlOwogICAgICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZm ZXJlbmNlX3R5cGU7CiAgICAgIHR5cGVkZWYgX1RwKiBwb2ludGVyOwogICAgICB0eXBlZGVmIGNv bnN0IF9UcCogY29uc3RfcG9pbnRlcjsKICAgICAgdHlwZWRlZiBfVHAmIHJlZmVyZW5jZTsKICAg ICAgdHlwZWRlZiBjb25zdCBfVHAmIGNvbnN0X3JlZmVyZW5jZTsKICAgICAgdHlwZWRlZiBfVHAg dmFsdWVfdHlwZTsKCiAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcDE+CiAgICAgICAgc3RydWN0 IHJlYmluZAogICAgICAgIHsgdHlwZWRlZiBhbGxvY2F0b3I8X1RwMT4gb3RoZXI7IH07CgogICAg ICBhbGxvY2F0b3IoKSB0aHJvdygpIHt9CiAgICAgIGFsbG9jYXRvcihjb25zdCBhbGxvY2F0b3Im KSB0aHJvdygpIHt9CiAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcDE+CiAgICAgICAgYWxsb2Nh dG9yKGNvbnN0IGFsbG9jYXRvcjxfVHAxPiYpIHRocm93KCkge30KICAgICAgfmFsbG9jYXRvcigp IHRocm93KCkge30KCiAgICAgIHBvaW50ZXIKICAgICAgYWRkcmVzcyhyZWZlcmVuY2UgX194KSBj b25zdCB7IHJldHVybiAmX194OyB9CgogICAgICBjb25zdF9wb2ludGVyCiAgICAgIGFkZHJlc3Mo Y29uc3RfcmVmZXJlbmNlIF9feCkgY29uc3QgeyByZXR1cm4gJl9feDsgfQoKCgogICAgICBfVHAq CiAgICAgIGFsbG9jYXRlKHNpemVfdHlwZSBfX24sIGNvbnN0IHZvaWQqID0gMCkKICAgICAgewog ICAgICAgIF9UcCogX19yZXQgPSAwOwogICAgICAgIGlmIChfX24pCiAgICAgICAgICB7CiAgICAg ICAgICAgIGlmIChfX24gPD0gdGhpcy0+bWF4X3NpemUoKSkKICAgICAgICAgICAgICBfX3JldCA9 IHN0YXRpY19jYXN0PF9UcCo+KF9BbGxvYzo6YWxsb2NhdGUoX19uICogc2l6ZW9mKF9UcCkpKTsK ICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgIF9fdGhyb3dfYmFkX2FsbG9jKCk7CiAgICAg ICAgICB9CiAgICAgICAgcmV0dXJuIF9fcmV0OwogICAgICB9CgoKICAgICAgdm9pZAogICAgICBk ZWFsbG9jYXRlKHBvaW50ZXIgX19wLCBzaXplX3R5cGUgX19uKQogICAgICB7IF9BbGxvYzo6ZGVh bGxvY2F0ZShfX3AsIF9fbiAqIHNpemVvZihfVHApKTsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAg IG1heF9zaXplKCkgY29uc3QgdGhyb3coKSB7IHJldHVybiBzaXplX3QoLTEpIC8gc2l6ZW9mKF9U cCk7IH0KCiAgICAgIHZvaWQgY29uc3RydWN0KHBvaW50ZXIgX19wLCBjb25zdCBfVHAmIF9fdmFs KSB7IG5ldyhfX3ApIF9UcChfX3ZhbCk7IH0KICAgICAgdm9pZCBkZXN0cm95KHBvaW50ZXIgX19w KSB7IF9fcC0+fl9UcCgpOyB9CiAgICB9OwoKICB0ZW1wbGF0ZTw+CiAgICBjbGFzcyBhbGxvY2F0 b3I8dm9pZD4KICAgIHsKICAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiBzaXplX3Qgc2l6ZV90eXBl OwogICAgICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CiAgICAgIHR5cGVkZWYg dm9pZCogcG9pbnRlcjsKICAgICAgdHlwZWRlZiBjb25zdCB2b2lkKiBjb25zdF9wb2ludGVyOwog ICAgICB0eXBlZGVmIHZvaWQgdmFsdWVfdHlwZTsKCiAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9U cDE+CiAgICAgICAgc3RydWN0IHJlYmluZAogICAgICAgIHsgdHlwZWRlZiBhbGxvY2F0b3I8X1Rw MT4gb3RoZXI7IH07CiAgICB9OwoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1QxLCB0eXBlbmFtZSBf VDI+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I9PShjb25zdCBhbGxvY2F0b3I8X1QxPiYs IGNvbnN0IGFsbG9jYXRvcjxfVDI+JikKICAgIHsgcmV0dXJuIHRydWU7IH0KCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX1QxLCB0eXBlbmFtZSBfVDI+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3Ih PShjb25zdCBhbGxvY2F0b3I8X1QxPiYsIGNvbnN0IGFsbG9jYXRvcjxfVDI+JikKICAgIHsgcmV0 dXJuIGZhbHNlOyB9CiMgNzQzICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGxvYy5o IiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBzdHJ1Y3Qg X19hbGxvY2F0b3IKICAgIHsKICAgICAgX0FsbG9jIF9fdW5kZXJseWluZ19hbGxvYzsKCiAgICAg IHR5cGVkZWYgc2l6ZV90IHNpemVfdHlwZTsKICAgICAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVy ZW5jZV90eXBlOwogICAgICB0eXBlZGVmIF9UcCogcG9pbnRlcjsKICAgICAgdHlwZWRlZiBjb25z dCBfVHAqIGNvbnN0X3BvaW50ZXI7CiAgICAgIHR5cGVkZWYgX1RwJiByZWZlcmVuY2U7CiAgICAg IHR5cGVkZWYgY29uc3QgX1RwJiBjb25zdF9yZWZlcmVuY2U7CiAgICAgIHR5cGVkZWYgX1RwIHZh bHVlX3R5cGU7CgogICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAxPgogICAgICAgIHN0cnVjdCBy ZWJpbmQKICAgICAgICB7IHR5cGVkZWYgX19hbGxvY2F0b3I8X1RwMSwgX0FsbG9jPiBvdGhlcjsg fTsKCiAgICAgIF9fYWxsb2NhdG9yKCkgdGhyb3coKSB7fQogICAgICBfX2FsbG9jYXRvcihjb25z dCBfX2FsbG9jYXRvciYgX19hKSB0aHJvdygpCiAgICAgIDogX191bmRlcmx5aW5nX2FsbG9jKF9f YS5fX3VuZGVybHlpbmdfYWxsb2MpIHt9CgogICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAxPgog ICAgICAgIF9fYWxsb2NhdG9yKGNvbnN0IF9fYWxsb2NhdG9yPF9UcDEsIF9BbGxvYz4mIF9fYSkg dGhyb3coKQogICAgICAgIDogX191bmRlcmx5aW5nX2FsbG9jKF9fYS5fX3VuZGVybHlpbmdfYWxs b2MpIHt9CgogICAgICB+X19hbGxvY2F0b3IoKSB0aHJvdygpIHt9CgogICAgICBwb2ludGVyCiAg ICAgIGFkZHJlc3MocmVmZXJlbmNlIF9feCkgY29uc3QgeyByZXR1cm4gJl9feDsgfQoKICAgICAg Y29uc3RfcG9pbnRlcgogICAgICBhZGRyZXNzKGNvbnN0X3JlZmVyZW5jZSBfX3gpIGNvbnN0IHsg cmV0dXJuICZfX3g7IH0KCgoKICAgICAgX1RwKgogICAgICBhbGxvY2F0ZShzaXplX3R5cGUgX19u LCBjb25zdCB2b2lkKiA9IDApCiAgICAgIHsKICAgICAgICBfVHAqIF9fcmV0ID0gMDsKICAgICAg ICBpZiAoX19uKQogICAgICAgICAgX19yZXQgPSBzdGF0aWNfY2FzdDxfVHAqPihfQWxsb2M6OmFs bG9jYXRlKF9fbiAqIHNpemVvZihfVHApKSk7CiAgICAgICAgcmV0dXJuIF9fcmV0OwogICAgICB9 CgoKICAgICAgdm9pZAogICAgICBkZWFsbG9jYXRlKHBvaW50ZXIgX19wLCBzaXplX3R5cGUgX19u KQogICAgICB7IF9fdW5kZXJseWluZ19hbGxvYy5kZWFsbG9jYXRlKF9fcCwgX19uICogc2l6ZW9m KF9UcCkpOyB9CgogICAgICBzaXplX3R5cGUKICAgICAgbWF4X3NpemUoKSBjb25zdCB0aHJvdygp IHsgcmV0dXJuIHNpemVfdCgtMSkgLyBzaXplb2YoX1RwKTsgfQoKICAgICAgdm9pZAogICAgICBj b25zdHJ1Y3QocG9pbnRlciBfX3AsIGNvbnN0IF9UcCYgX192YWwpIHsgbmV3KF9fcCkgX1RwKF9f dmFsKTsgfQoKICAgICAgdm9pZAogICAgICBkZXN0cm95KHBvaW50ZXIgX19wKSB7IF9fcC0+fl9U cCgpOyB9CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQWxsb2M+CiAgICBzdHJ1Y3QgX19h bGxvY2F0b3I8dm9pZCwgX0FsbG9jPgogICAgewogICAgICB0eXBlZGVmIHNpemVfdCBzaXplX3R5 cGU7CiAgICAgIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsKICAgICAgdHlwZWRl ZiB2b2lkKiBwb2ludGVyOwogICAgICB0eXBlZGVmIGNvbnN0IHZvaWQqIGNvbnN0X3BvaW50ZXI7 CiAgICAgIHR5cGVkZWYgdm9pZCB2YWx1ZV90eXBlOwoKICAgICAgdGVtcGxhdGU8dHlwZW5hbWUg X1RwMT4KICAgICAgICBzdHJ1Y3QgcmViaW5kCiAgICAgICAgeyB0eXBlZGVmIF9fYWxsb2NhdG9y PF9UcDEsIF9BbGxvYz4gb3RoZXI7IH07CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAs IHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj09KGNvbnN0IF9f YWxsb2NhdG9yPF9UcCxfQWxsb2M+JiBfX2ExLAogICAgICAgICAgICAgICBjb25zdCBfX2FsbG9j YXRvcjxfVHAsX0FsbG9jPiYgX19hMikKICAgIHsgcmV0dXJuIF9fYTEuX191bmRlcmx5aW5nX2Fs bG9jID09IF9fYTIuX191bmRlcmx5aW5nX2FsbG9jOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9U cCwgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yIT0oY29uc3Qg X19hbGxvY2F0b3I8X1RwLCBfQWxsb2M+JiBfX2ExLAogICAgICAgICAgICAgICBjb25zdCBfX2Fs bG9jYXRvcjxfVHAsIF9BbGxvYz4mIF9fYTIpCiAgICB7IHJldHVybiBfX2ExLl9fdW5kZXJseWlu Z19hbGxvYyAhPSBfX2EyLl9fdW5kZXJseWluZ19hbGxvYzsgfQoKCgoKCgoKICB0ZW1wbGF0ZTxp bnQgaW5zdD4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj09KGNvbnN0IF9fbWFsbG9jX2Fs bG9jX3RlbXBsYXRlPGluc3Q+JiwKICAgICAgICAgICAgICAgY29uc3QgX19tYWxsb2NfYWxsb2Nf dGVtcGxhdGU8aW5zdD4mKQogICAgeyByZXR1cm4gdHJ1ZTsgfQoKICB0ZW1wbGF0ZTxpbnQgX19p bnN0PgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yIT0oY29uc3QgX19tYWxsb2NfYWxsb2Nf dGVtcGxhdGU8X19pbnN0PiYsCiAgICAgICAgICAgICAgIGNvbnN0IF9fbWFsbG9jX2FsbG9jX3Rl bXBsYXRlPF9faW5zdD4mKQogICAgeyByZXR1cm4gZmFsc2U7IH0KCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPT0oY29uc3QgX19kZWJ1Z19h bGxvYzxfQWxsb2M+JiwgY29uc3QgX19kZWJ1Z19hbGxvYzxfQWxsb2M+JikKICAgIHsgcmV0dXJu IHRydWU7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAg IG9wZXJhdG9yIT0oY29uc3QgX19kZWJ1Z19hbGxvYzxfQWxsb2M+JiwgY29uc3QgX19kZWJ1Z19h bGxvYzxfQWxsb2M+JikKICAgIHsgcmV0dXJuIGZhbHNlOyB9CiMgODk2ICIvdXNyL2luY2x1ZGUv YysrLzMuMi9iaXRzL3N0bF9hbGxvYy5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBl bmFtZSBfQWxsb2NhdG9yPgogICAgc3RydWN0IF9BbGxvY190cmFpdHMKICAgIHsKICAgICAgc3Rh dGljIGNvbnN0IGJvb2wgX1NfaW5zdGFuY2VsZXNzID0gZmFsc2U7CiAgICAgIHR5cGVkZWYgdHlw ZW5hbWUgX0FsbG9jYXRvcjo6dGVtcGxhdGUgcmViaW5kPF9UcD46Om90aGVyIGFsbG9jYXRvcl90 eXBlOwogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2NhdG9y PgogICAgY29uc3QgYm9vbCBfQWxsb2NfdHJhaXRzPF9UcCwgX0FsbG9jYXRvcj46Ol9TX2luc3Rh bmNlbGVzczsKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX1RwMT4KICAgIHN0 cnVjdCBfQWxsb2NfdHJhaXRzPF9UcCwgYWxsb2NhdG9yPF9UcDE+ID4KICAgIHsKICAgICAgc3Rh dGljIGNvbnN0IGJvb2wgX1NfaW5zdGFuY2VsZXNzID0gdHJ1ZTsKICAgICAgdHlwZWRlZiBfX3Np bXBsZV9hbGxvYzxfVHAsIF9fYWxsb2M+IF9BbGxvY190eXBlOwogICAgICB0eXBlZGVmIGFsbG9j YXRvcjxfVHA+IGFsbG9jYXRvcl90eXBlOwogICAgfTsKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUg X1RwLCBpbnQgX19pbnN0PgogICAgc3RydWN0IF9BbGxvY190cmFpdHM8X1RwLCBfX21hbGxvY19h bGxvY190ZW1wbGF0ZTxfX2luc3Q+ID4KICAgIHsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgX1Nf aW5zdGFuY2VsZXNzID0gdHJ1ZTsKICAgICAgdHlwZWRlZiBfX3NpbXBsZV9hbGxvYzxfVHAsIF9f bWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9faW5zdD4gPiBfQWxsb2NfdHlwZTsKICAgICAgdHlwZWRl ZiBfX2FsbG9jYXRvcjxfVHAsIF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9faW5zdD4gPiBhbGxv Y2F0b3JfdHlwZTsKICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgYm9vbCBfX3RocmVh ZHMsIGludCBfX2luc3Q+CiAgICBzdHJ1Y3QgX0FsbG9jX3RyYWl0czxfVHAsIF9fZGVmYXVsdF9h bGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD4gPgogICAgewogICAgICBzdGF0aWMgY29u c3QgYm9vbCBfU19pbnN0YW5jZWxlc3MgPSB0cnVlOwogICAgICB0eXBlZGVmIF9fc2ltcGxlX2Fs bG9jPF9UcCwgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0PiA+CiAg ICAgIF9BbGxvY190eXBlOwogICAgICB0eXBlZGVmIF9fYWxsb2NhdG9yPF9UcCwgX19kZWZhdWx0 X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0PiA+CiAgICAgIGFsbG9jYXRvcl90eXBl OwogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBz dHJ1Y3QgX0FsbG9jX3RyYWl0czxfVHAsIF9fZGVidWdfYWxsb2M8X0FsbG9jPiA+CiAgICB7CiAg ICAgIHN0YXRpYyBjb25zdCBib29sIF9TX2luc3RhbmNlbGVzcyA9IHRydWU7CiAgICAgIHR5cGVk ZWYgX19zaW1wbGVfYWxsb2M8X1RwLCBfX2RlYnVnX2FsbG9jPF9BbGxvYz4gPiBfQWxsb2NfdHlw ZTsKICAgICAgdHlwZWRlZiBfX2FsbG9jYXRvcjxfVHAsIF9fZGVidWdfYWxsb2M8X0FsbG9jPiA+ IGFsbG9jYXRvcl90eXBlOwogICAgfTsKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlw ZW5hbWUgX1RwMSwgaW50IF9faW5zdD4KICAgIHN0cnVjdCBfQWxsb2NfdHJhaXRzPF9UcCwKICAg ICAgICAgICAgICAgICAgICAgICAgIF9fYWxsb2NhdG9yPF9UcDEsIF9fbWFsbG9jX2FsbG9jX3Rl bXBsYXRlPF9faW5zdD4gPiA+CiAgICB7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIF9TX2luc3Rh bmNlbGVzcyA9IHRydWU7CiAgICAgIHR5cGVkZWYgX19zaW1wbGVfYWxsb2M8X1RwLCBfX21hbGxv Y19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+ID4gX0FsbG9jX3R5cGU7CiAgICAgIHR5cGVkZWYgX19h bGxvY2F0b3I8X1RwLCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+ID4gYWxsb2NhdG9y X3R5cGU7CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9UcDEsIGJv b2wgX190aHIsIGludCBfX2luc3Q+CiAgICBzdHJ1Y3QgX0FsbG9jX3RyYWl0czxfVHAsIF9fYWxs b2NhdG9yPF9UcDEsIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RociwgX19pbnN0PiA+ID4K ICAgIHsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5zdGFuY2VsZXNzID0gdHJ1ZTsKICAg ICAgdHlwZWRlZiBfX3NpbXBsZV9hbGxvYzxfVHAsIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxf X3RocixfX2luc3Q+ID4KICAgICAgX0FsbG9jX3R5cGU7CiAgICAgIHR5cGVkZWYgX19hbGxvY2F0 b3I8X1RwLCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHIsX19pbnN0PiA+CiAgICAgIGFs bG9jYXRvcl90eXBlOwogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBf VHAxLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBzdHJ1Y3QgX0FsbG9jX3RyYWl0czxfVHAsIF9fYWxs b2NhdG9yPF9UcDEsIF9fZGVidWdfYWxsb2M8X0FsbG9jPiA+ID4KICAgIHsKICAgICAgc3RhdGlj IGNvbnN0IGJvb2wgX1NfaW5zdGFuY2VsZXNzID0gdHJ1ZTsKICAgICAgdHlwZWRlZiBfX3NpbXBs ZV9hbGxvYzxfVHAsIF9fZGVidWdfYWxsb2M8X0FsbG9jPiA+IF9BbGxvY190eXBlOwogICAgICB0 eXBlZGVmIF9fYWxsb2NhdG9yPF9UcCwgX19kZWJ1Z19hbGxvYzxfQWxsb2M+ID4gYWxsb2NhdG9y X3R5cGU7CiAgICB9OwoKCgoKCiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIGFsbG9jYXRvcjxjaGFy PjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgYWxsb2NhdG9yPHdjaGFyX3Q+OwogIGV4dGVybiB0 ZW1wbGF0ZSBjbGFzcyBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8dHJ1ZSwwPjsKfQojIDU2ICIv dXNyL2luY2x1ZGUvYysrLzMuMi9tZW1vcnkiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9jKysvMy4y L2JpdHMvc3RsX2NvbnN0cnVjdC5oIiAxIDMKIyA2NyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0 cy9zdGxfY29uc3RydWN0LmgiIDMKbmFtZXNwYWNlIHN0ZAp7CgoKCgoKCiAgdGVtcGxhdGUgPGNs YXNzIF9UMSwgY2xhc3MgX1QyPgogICAgaW5saW5lIHZvaWQKICAgIF9Db25zdHJ1Y3QoX1QxKiBf X3AsIGNvbnN0IF9UMiYgX192YWx1ZSkKICAgIHsgbmV3IChzdGF0aWNfY2FzdDx2b2lkKj4oX19w KSkgX1QxKF9fdmFsdWUpOyB9CgoKCgoKCgogIHRlbXBsYXRlIDxjbGFzcyBfVDE+CiAgICBpbmxp bmUgdm9pZAogICAgX0NvbnN0cnVjdChfVDEqIF9fcCkKICAgIHsgbmV3IChzdGF0aWNfY2FzdDx2 b2lkKj4oX19wKSkgX1QxKCk7IH0KIyA5OCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxf Y29uc3RydWN0LmgiIDMKICB0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4KICAgIGlu bGluZSB2b2lkCiAgICBfX2Rlc3Ryb3lfYXV4KF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0Zv cndhcmRJdGVyYXRvciBfX2xhc3QsIF9fZmFsc2VfdHlwZSkKICAgIHsgZm9yICggOyBfX2ZpcnN0 ICE9IF9fbGFzdDsgKytfX2ZpcnN0KSBfRGVzdHJveSgmKl9fZmlyc3QpOyB9CiMgMTEyICIvdXNy L2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9jb25zdHJ1Y3QuaCIgMwogIHRlbXBsYXRlIDxjbGFz cyBfRm9yd2FyZEl0ZXJhdG9yPgogICAgaW5saW5lIHZvaWQKICAgIF9fZGVzdHJveV9hdXgoX0Zv cndhcmRJdGVyYXRvciwgX0ZvcndhcmRJdGVyYXRvciwgX190cnVlX3R5cGUpCiAgICB7IH0KCgoK CgoKICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgogICAgaW5saW5lIHZvaWQKICAgIF9EZXN0cm95KF9U cCogX19wb2ludGVyKQogICAgeyBfX3BvaW50ZXItPn5fVHAoKTsgfQojIDEzNCAiL3Vzci9pbmNs dWRlL2MrKy8zLjIvYml0cy9zdGxfY29uc3RydWN0LmgiIDMKICB0ZW1wbGF0ZSA8Y2xhc3MgX0Zv cndhcmRJdGVyYXRvcj4KICAgIGlubGluZSB2b2lkCiAgICBfRGVzdHJveShfRm9yd2FyZEl0ZXJh dG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0KQogICAgewogICAgICB0eXBlZGVm IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXJhdG9yPjo6dmFsdWVfdHlwZQog ICAgICAgICAgICAgICAgICAgICAgIF9WYWx1ZV90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1l IF9fdHlwZV90cmFpdHM8X1ZhbHVlX3R5cGU+OjpoYXNfdHJpdmlhbF9kZXN0cnVjdG9yCiAgICAg ICAgICAgICAgICAgICAgICAgX0hhc190cml2aWFsX2Rlc3RydWN0b3I7CgogICAgICBfX2Rlc3Ry b3lfYXV4KF9fZmlyc3QsIF9fbGFzdCwgX0hhc190cml2aWFsX2Rlc3RydWN0b3IoKSk7CiAgICB9 Cn0KIyA1NyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvbWVtb3J5IiAyIDMKCiMgMSAiL3Vzci9pbmNs dWRlL2MrKy8zLjIvYml0cy9zdGxfdW5pbml0aWFsaXplZC5oIiAxIDMKIyA2NiAiL3Vzci9pbmNs dWRlL2MrKy8zLjIvYml0cy9zdGxfdW5pbml0aWFsaXplZC5oIiAzCm5hbWVzcGFjZSBzdGQKewoK CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9Gb3J3YXJkSXRlcj4K ICAgIGlubGluZSBfRm9yd2FyZEl0ZXIKICAgIF9fdW5pbml0aWFsaXplZF9jb3B5X2F1eChfSW5w dXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBfX3RydWVfdHlwZSkKICAgIHsgcmV0dXJuIGNvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3Vs dCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX0ZvcndhcmRJ dGVyPgogICAgX0ZvcndhcmRJdGVyCiAgICBfX3VuaW5pdGlhbGl6ZWRfY29weV9hdXgoX0lucHV0 SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg X19mYWxzZV90eXBlKQogICAgewogICAgICBfRm9yd2FyZEl0ZXIgX19jdXIgPSBfX3Jlc3VsdDsK ICAgICAgdHJ5IHsKICAgICAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3Qs ICsrX19jdXIpCiAgICAgICAgICBfQ29uc3RydWN0KCYqX19jdXIsICpfX2ZpcnN0KTsKICAgICAg ICByZXR1cm4gX19jdXI7CiAgICAgIH0KICAgICAgY2F0Y2goLi4uKQogICAgICAgIHsKICAgICAg ICAgIF9EZXN0cm95KF9fcmVzdWx0LCBfX2N1cik7CiAgICAgICAgICB0aHJvdzsKICAgICAgICB9 CiAgICB9CiMgMTA2ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF91bmluaXRpYWxpemVk LmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfRm9yd2FyZEl0 ZXI+CiAgICBpbmxpbmUgX0ZvcndhcmRJdGVyCiAgICB1bmluaXRpYWxpemVkX2NvcHkoX0lucHV0 SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwgX0ZvcndhcmRJdGVyIF9fcmVzdWx0KQog ICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+ Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX190eXBlX3Ry YWl0czxfVmFsdWVUeXBlPjo6aXNfUE9EX3R5cGUgX0lzX1BPRDsKICAgICAgcmV0dXJuIF9fdW5p bml0aWFsaXplZF9jb3B5X2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LCBfSXNfUE9EKCkp OwogICAgfQoKICBpbmxpbmUgY2hhcioKICB1bmluaXRpYWxpemVkX2NvcHkoY29uc3QgY2hhciog X19maXJzdCwgY29uc3QgY2hhciogX19sYXN0LCBjaGFyKiBfX3Jlc3VsdCkKICB7CiAgICBtZW1t b3ZlKF9fcmVzdWx0LCBfX2ZpcnN0LCBfX2xhc3QgLSBfX2ZpcnN0KTsKICAgIHJldHVybiBfX3Jl c3VsdCArIChfX2xhc3QgLSBfX2ZpcnN0KTsKICB9CgogIGlubGluZSB3Y2hhcl90KgogIHVuaW5p dGlhbGl6ZWRfY29weShjb25zdCB3Y2hhcl90KiBfX2ZpcnN0LCBjb25zdCB3Y2hhcl90KiBfX2xh c3QsCiAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QqIF9fcmVzdWx0KQogIHsKICAgIG1lbW1v dmUoX19yZXN1bHQsIF9fZmlyc3QsIHNpemVvZih3Y2hhcl90KSAqIChfX2xhc3QgLSBfX2ZpcnN0 KSk7CiAgICByZXR1cm4gX19yZXN1bHQgKyAoX19sYXN0IC0gX19maXJzdCk7CiAgfQoKCgogIHRl bXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1RwPgogICAgaW5saW5lIHZv aWQKICAgIF9fdW5pbml0aWFsaXplZF9maWxsX2F1eChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0Zv cndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAm IF9feCwgX190cnVlX3R5cGUpCiAgICB7IGZpbGwoX19maXJzdCwgX19sYXN0LCBfX3gpOyB9Cgog IHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1RwPgogICAgdm9pZAog ICAgX191bmluaXRpYWxpemVkX2ZpbGxfYXV4KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2Fy ZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX194 LCBfX2ZhbHNlX3R5cGUpCiAgICB7CiAgICAgIF9Gb3J3YXJkSXRlciBfX2N1ciA9IF9fZmlyc3Q7 CiAgICAgIHRyeSB7CiAgICAgICAgZm9yICggOyBfX2N1ciAhPSBfX2xhc3Q7ICsrX19jdXIpCiAg ICAgICAgICBfQ29uc3RydWN0KCYqX19jdXIsIF9feCk7CiAgICAgIH0KICAgICAgY2F0Y2goLi4u KQogICAgICAgIHsKICAgICAgICAgIF9EZXN0cm95KF9fZmlyc3QsIF9fY3VyKTsKICAgICAgICAg IHRocm93OwogICAgICAgIH0KICAgIH0KIyAxNjQgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMv c3RsX3VuaW5pdGlhbGl6ZWQuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwg dHlwZW5hbWUgX1RwPgogICAgaW5saW5lIHZvaWQKICAgIHVuaW5pdGlhbGl6ZWRfZmlsbChfRm9y d2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwgY29uc3QgX1RwJiBfX3gpCiAg ICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46 OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5cGVfdHJh aXRzPF9WYWx1ZVR5cGU+Ojppc19QT0RfdHlwZSBfSXNfUE9EOwogICAgICBfX3VuaW5pdGlhbGl6 ZWRfZmlsbF9hdXgoX19maXJzdCwgX19sYXN0LCBfX3gsIF9Jc19QT0QoKSk7CiAgICB9CgoKCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfU2l6ZSwgdHlwZW5hbWUg X1RwPgogICAgaW5saW5lIF9Gb3J3YXJkSXRlcgogICAgX191bmluaXRpYWxpemVkX2ZpbGxfbl9h dXgoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9TaXplIF9fbiwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNvbnN0IF9UcCYgX194LCBfX3RydWVfdHlwZSkKICAgIHsKICAgICAgcmV0dXJu IGZpbGxfbihfX2ZpcnN0LCBfX24sIF9feCk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9G b3J3YXJkSXRlciwgdHlwZW5hbWUgX1NpemUsIHR5cGVuYW1lIF9UcD4KICAgIF9Gb3J3YXJkSXRl cgogICAgX191bmluaXRpYWxpemVkX2ZpbGxfbl9hdXgoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9T aXplIF9fbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX194LCBf X2ZhbHNlX3R5cGUpCiAgICB7CiAgICAgIF9Gb3J3YXJkSXRlciBfX2N1ciA9IF9fZmlyc3Q7CiAg ICAgIHRyeSB7CiAgICAgICAgZm9yICggOyBfX24gPiAwOyAtLV9fbiwgKytfX2N1cikKICAgICAg ICAgIF9Db25zdHJ1Y3QoJipfX2N1ciwgX194KTsKICAgICAgICByZXR1cm4gX19jdXI7CiAgICAg IH0KICAgICAgY2F0Y2goLi4uKQogICAgICAgIHsKICAgICAgICAgIF9EZXN0cm95KF9fZmlyc3Qs IF9fY3VyKTsKICAgICAgICAgIHRocm93OwogICAgICAgIH0KICAgIH0KIyAyMTAgIi91c3IvaW5j bHVkZS9jKysvMy4yL2JpdHMvc3RsX3VuaW5pdGlhbGl6ZWQuaCIgMwogIHRlbXBsYXRlPHR5cGVu YW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1NpemUsIHR5cGVuYW1lIF9UcD4KICAgIGlubGlu ZSBfRm9yd2FyZEl0ZXIKICAgIHVuaW5pdGlhbGl6ZWRfZmlsbF9uKF9Gb3J3YXJkSXRlciBfX2Zp cnN0LCBfU2l6ZSBfX24sIGNvbnN0IF9UcCYgX194KQogICAgewogICAgICB0eXBlZGVmIHR5cGVu YW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7 CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX190eXBlX3RyYWl0czxfVmFsdWVUeXBlPjo6aXNfUE9E X3R5cGUgX0lzX1BPRDsKICAgICAgcmV0dXJuIF9fdW5pbml0aWFsaXplZF9maWxsX25fYXV4KF9f Zmlyc3QsIF9fbiwgX194LCBfSXNfUE9EKCkpOwogICAgfQojIDIyNyAiL3Vzci9pbmNsdWRlL2Mr Ky8zLjIvYml0cy9zdGxfdW5pbml0aWFsaXplZC5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lu cHV0SXRlcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXIyLCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXI+CiAg ICBpbmxpbmUgX0ZvcndhcmRJdGVyCiAgICBfX3VuaW5pdGlhbGl6ZWRfY29weV9jb3B5KF9JbnB1 dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0KQogICAgewog ICAgICBfRm9yd2FyZEl0ZXIgX19taWQgPSB1bmluaXRpYWxpemVkX2NvcHkoX19maXJzdDEsIF9f bGFzdDEsIF9fcmVzdWx0KTsKICAgICAgdHJ5IHsKICAgICAgICByZXR1cm4gdW5pbml0aWFsaXpl ZF9jb3B5KF9fZmlyc3QyLCBfX2xhc3QyLCBfX21pZCk7CiAgICAgIH0KICAgICAgY2F0Y2goLi4u KQogICAgICAgIHsKICAgICAgICAgIF9EZXN0cm95KF9fcmVzdWx0LCBfX21pZCk7CiAgICAgICAg ICB0aHJvdzsKICAgICAgICB9CiAgICB9CgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJk SXRlciwgdHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfSW5wdXRJdGVyPgogICAgaW5saW5lIF9Gb3J3 YXJkSXRlcgogICAgX191bmluaXRpYWxpemVkX2ZpbGxfY29weShfRm9yd2FyZEl0ZXIgX19yZXN1 bHQsIF9Gb3J3YXJkSXRlciBfX21pZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u c3QgX1RwJiBfX3gsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIgX19m aXJzdCwgX0lucHV0SXRlciBfX2xhc3QpCiAgICB7CiAgICAgIHVuaW5pdGlhbGl6ZWRfZmlsbChf X3Jlc3VsdCwgX19taWQsIF9feCk7CiAgICAgIHRyeSB7CiAgICAgICAgcmV0dXJuIHVuaW5pdGlh bGl6ZWRfY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fbWlkKTsKICAgICAgfQogICAgICBjYXRjaCgu Li4pCiAgICAgICAgewogICAgICAgICAgX0Rlc3Ryb3koX19yZXN1bHQsIF9fbWlkKTsKICAgICAg ICAgIHRocm93OwogICAgICAgIH0KICAgIH0KCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0 SXRlciwgdHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUgdm9p ZAogICAgX191bmluaXRpYWxpemVkX2NvcHlfZmlsbChfSW5wdXRJdGVyIF9fZmlyc3QxLCBfSW5w dXRJdGVyIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRl ciBfX2ZpcnN0MiwgX0ZvcndhcmRJdGVyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGNvbnN0IF9UcCYgX194KQogICAgewogICAgICBfRm9yd2FyZEl0ZXIgX19taWQyID0g dW5pbml0aWFsaXplZF9jb3B5KF9fZmlyc3QxLCBfX2xhc3QxLCBfX2ZpcnN0Mik7CiAgICAgIHRy eSB7CiAgICAgICAgdW5pbml0aWFsaXplZF9maWxsKF9fbWlkMiwgX19sYXN0MiwgX194KTsKICAg ICAgfQogICAgICBjYXRjaCguLi4pCiAgICAgICAgewogICAgICAgICAgX0Rlc3Ryb3koX19maXJz dDIsIF9fbWlkMik7CiAgICAgICAgICB0aHJvdzsKICAgICAgICB9CiAgICB9Cgp9CiMgNTkgIi91 c3IvaW5jbHVkZS9jKysvMy4yL21lbW9yeSIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIv Yml0cy9zdGxfcmF3X3N0b3JhZ2VfaXRlci5oIiAxIDMKIyA2NCAiL3Vzci9pbmNsdWRlL2MrKy8z LjIvYml0cy9zdGxfcmF3X3N0b3JhZ2VfaXRlci5oIiAzCm5hbWVzcGFjZSBzdGQKewoKCgoKICB0 ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvciwgY2xhc3MgX1RwPgogIGNsYXNzIHJhd19z dG9yYWdlX2l0ZXJhdG9yCiAgICA6IHB1YmxpYyBpdGVyYXRvcjxvdXRwdXRfaXRlcmF0b3JfdGFn LCB2b2lkLCB2b2lkLCB2b2lkLCB2b2lkPgogICAgewogICAgcHJvdGVjdGVkOgogICAgICBfRm9y d2FyZEl0ZXJhdG9yIF9NX2l0ZXI7CgogICAgcHVibGljOgogICAgICBleHBsaWNpdAogICAgICBy YXdfc3RvcmFnZV9pdGVyYXRvcihfRm9yd2FyZEl0ZXJhdG9yIF9feCkgOiBfTV9pdGVyKF9feCkg e30KCiAgICAgIHJhd19zdG9yYWdlX2l0ZXJhdG9yJgogICAgICBvcGVyYXRvciooKSB7IHJldHVy biAqdGhpczsgfQoKICAgICAgcmF3X3N0b3JhZ2VfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yPShj b25zdCBfVHAmIF9fZWxlbWVudCkKICAgICAgewogICAgICAgIF9Db25zdHJ1Y3QoJipfTV9pdGVy LCBfX2VsZW1lbnQpOwogICAgICAgIHJldHVybiAqdGhpczsKICAgICAgfQoKICAgICAgcmF3X3N0 b3JhZ2VfaXRlcmF0b3I8X0ZvcndhcmRJdGVyYXRvciwgX1RwPiYKICAgICAgb3BlcmF0b3IrKygp CiAgICAgIHsKICAgICAgICArK19NX2l0ZXI7CiAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICB9 CgogICAgICByYXdfc3RvcmFnZV9pdGVyYXRvcjxfRm9yd2FyZEl0ZXJhdG9yLCBfVHA+CiAgICAg IG9wZXJhdG9yKysoaW50KQogICAgICB7CiAgICAgICAgcmF3X3N0b3JhZ2VfaXRlcmF0b3I8X0Zv cndhcmRJdGVyYXRvciwgX1RwPiBfX3RtcCA9ICp0aGlzOwogICAgICAgICsrX01faXRlcjsKICAg ICAgICByZXR1cm4gX190bXA7CiAgICAgIH0KICAgIH07Cn0KIyA2MCAiL3Vzci9pbmNsdWRlL2Mr Ky8zLjIvbWVtb3J5IiAyIDMKCgoKCm5hbWVzcGFjZSBzdGQKewojIDc0ICIvdXNyL2luY2x1ZGUv YysrLzMuMi9tZW1vcnkiIDMKdGVtcGxhdGUgPHR5cGVuYW1lIF9UcD4KcGFpcjxfVHAqLCBwdHJk aWZmX3Q+Cl9fZ2V0X3RlbXBvcmFyeV9idWZmZXIocHRyZGlmZl90IF9fbGVuLCBfVHAqKQp7CiAg aWYgKF9fbGVuID4gcHRyZGlmZl90KDIxNDc0ODM2NDcgLyBzaXplb2YoX1RwKSkpCiAgICBfX2xl biA9IDIxNDc0ODM2NDcgLyBzaXplb2YoX1RwKTsKCiAgd2hpbGUgKF9fbGVuID4gMCkgewogICAg X1RwKiBfX3RtcCA9IChfVHAqKSBzdGQ6Om1hbGxvYygoc3RkOjpzaXplX3QpX19sZW4gKiBzaXpl b2YoX1RwKSk7CiAgICBpZiAoX190bXAgIT0gMCkKICAgICAgcmV0dXJuIHBhaXI8X1RwKiwgcHRy ZGlmZl90PihfX3RtcCwgX19sZW4pOwogICAgX19sZW4gLz0gMjsKICB9CgogIHJldHVybiBwYWly PF9UcCosIHB0cmRpZmZfdD4oKF9UcCopMCwgMCk7Cn0KIyAxMDYgIi91c3IvaW5jbHVkZS9jKysv My4yL21lbW9yeSIgMwp0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgaW5saW5lIHBhaXI8X1RwKixw dHJkaWZmX3Q+CiAgZ2V0X3RlbXBvcmFyeV9idWZmZXIocHRyZGlmZl90IF9fbGVuKQogIHsKICAg IHJldHVybiBfX2dldF90ZW1wb3JhcnlfYnVmZmVyKF9fbGVuLCAoX1RwKikgMCk7CiAgfQojIDEy MCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvbWVtb3J5IiAzCnRlbXBsYXRlPHR5cGVuYW1lIF9UcD4K ICB2b2lkCiAgcmV0dXJuX3RlbXBvcmFyeV9idWZmZXIoX1RwKiBfX3ApCiAgewogICAgc3RkOjpm cmVlKF9fcCk7CiAgfQojIDEzNSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvbWVtb3J5IiAzCnRlbXBs YXRlPHR5cGVuYW1lIF9UcDE+CiAgc3RydWN0IGF1dG9fcHRyX3JlZgp7CiAgIF9UcDEqIF9NX3B0 cjsKCiAgIGV4cGxpY2l0CiAgIGF1dG9fcHRyX3JlZihfVHAxKiBfX3ApCiAgIDogX01fcHRyKF9f cCkge30KfTsKIyAxNzUgIi91c3IvaW5jbHVkZS9jKysvMy4yL21lbW9yeSIgMwp0ZW1wbGF0ZTx0 eXBlbmFtZSBfVHA+CiAgY2xhc3MgYXV0b19wdHIKewpwcml2YXRlOgogIF9UcCogX01fcHRyOwoK cHVibGljOgoKICB0eXBlZGVmIF9UcCBlbGVtZW50X3R5cGU7CgoKCgoKCgogIGV4cGxpY2l0CiAg YXV0b19wdHIoZWxlbWVudF90eXBlKiBfX3AgPSAwKSB0aHJvdygpCiAgOiBfTV9wdHIoX19wKSB7 IH0KIyAyMDIgIi91c3IvaW5jbHVkZS9jKysvMy4yL21lbW9yeSIgMwogIGF1dG9fcHRyKGF1dG9f cHRyJiBfX2EpIHRocm93KCkKICA6IF9NX3B0cihfX2EucmVsZWFzZSgpKSB7IH0KIyAyMTQgIi91 c3IvaW5jbHVkZS9jKysvMy4yL21lbW9yeSIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcDE+CiAg ICBhdXRvX3B0cihhdXRvX3B0cjxfVHAxPiYgX19hKSB0aHJvdygpCiAgICA6IF9NX3B0cihfX2Eu cmVsZWFzZSgpKSB7IH0KIyAyMjYgIi91c3IvaW5jbHVkZS9jKysvMy4yL21lbW9yeSIgMwogIGF1 dG9fcHRyJgogIG9wZXJhdG9yPShhdXRvX3B0ciYgX19hKSB0aHJvdygpCiAgICB7CiAgICAgIHJl c2V0KF9fYS5yZWxlYXNlKCkpOwogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CiMgMjQzICIvdXNy L2luY2x1ZGUvYysrLzMuMi9tZW1vcnkiIDMKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX1RwMT4KICAg IGF1dG9fcHRyJgogICAgb3BlcmF0b3I9KGF1dG9fcHRyPF9UcDE+JiBfX2EpIHRocm93KCkKICAg IHsKICAgICAgcmVzZXQoX19hLnJlbGVhc2UoKSk7CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0K IyAyNjMgIi91c3IvaW5jbHVkZS9jKysvMy4yL21lbW9yeSIgMwogIH5hdXRvX3B0cigpIHsgZGVs ZXRlIF9NX3B0cjsgfQojIDI3MyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvbWVtb3J5IiAzCiAgZWxl bWVudF90eXBlJgogIG9wZXJhdG9yKigpIGNvbnN0IHRocm93KCkgeyByZXR1cm4gKl9NX3B0cjsg fQoKCgoKCgoKICBlbGVtZW50X3R5cGUqCiAgb3BlcmF0b3ItPigpIGNvbnN0IHRocm93KCkgeyBy ZXR1cm4gX01fcHRyOyB9CiMgMjk1ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9tZW1vcnkiIDMKICBl bGVtZW50X3R5cGUqCiAgZ2V0KCkgY29uc3QgdGhyb3coKSB7IHJldHVybiBfTV9wdHI7IH0KIyAz MDkgIi91c3IvaW5jbHVkZS9jKysvMy4yL21lbW9yeSIgMwogIGVsZW1lbnRfdHlwZSoKICByZWxl YXNlKCkgdGhyb3coKQogICAgewogICAgICBlbGVtZW50X3R5cGUqIF9fdG1wID0gX01fcHRyOwog ICAgICBfTV9wdHIgPSAwOwogICAgICByZXR1cm4gX190bXA7CiAgICB9CiMgMzI0ICIvdXNyL2lu Y2x1ZGUvYysrLzMuMi9tZW1vcnkiIDMKICB2b2lkCiAgcmVzZXQoZWxlbWVudF90eXBlKiBfX3Ag PSAwKSB0aHJvdygpCiAgICB7CiAgICAgIGlmIChfX3AgIT0gX01fcHRyKQogICAgICAgIHsKICAg ICAgICAgIGRlbGV0ZSBfTV9wdHI7CiAgICAgICAgICBfTV9wdHIgPSBfX3A7CiAgICAgICAgfQog ICAgfQojIDM0NSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvbWVtb3J5IiAzCiAgYXV0b19wdHIoYXV0 b19wdHJfcmVmPGVsZW1lbnRfdHlwZT4gX19yZWYpIHRocm93KCkKICAgIDogX01fcHRyKF9fcmVm Ll9NX3B0cikge30KCiAgYXV0b19wdHImCiAgb3BlcmF0b3I9KGF1dG9fcHRyX3JlZjxlbGVtZW50 X3R5cGU+IF9fcmVmKSB0aHJvdygpCiAgICB7CiAgICAgIGlmIChfX3JlZi5fTV9wdHIgIT0gdGhp cy0+Z2V0KCkpCiAgICAgICAgewogICAgICAgICAgZGVsZXRlIF9NX3B0cjsKICAgICAgICAgIF9N X3B0ciA9IF9fcmVmLl9NX3B0cjsKICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0K CiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwMT4KICAgIG9wZXJhdG9yIGF1dG9fcHRyX3JlZjxfVHAx PigpIHRocm93KCkKICAgICAgeyByZXR1cm4gYXV0b19wdHJfcmVmPF9UcDE+KHRoaXMtPnJlbGVh c2UoKSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwMT4KICAgIG9wZXJhdG9yIGF1dG9fcHRy PF9UcDE+KCkgdGhyb3coKQogICAgICB7IHJldHVybiBhdXRvX3B0cjxfVHAxPih0aGlzLT5yZWxl YXNlKCkpOyB9Cgp9OwoKfQojIDQ5ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9zdHJpbmciIDIgMwoK CgojIDEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2Z1bmN0aW9uLmgiIDEgMwojIDY0 ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9mdW5jdGlvbi5oIiAzCm5hbWVzcGFjZSBz dGQKewojIDEwMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfZnVuY3Rpb24uaCIgMwp0 ZW1wbGF0ZSA8Y2xhc3MgX0FyZywgY2xhc3MgX1Jlc3VsdD4Kc3RydWN0IHVuYXJ5X2Z1bmN0aW9u IHsKICB0eXBlZGVmIF9BcmcgYXJndW1lbnRfdHlwZTsKICB0eXBlZGVmIF9SZXN1bHQgcmVzdWx0 X3R5cGU7Cn07CgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0FyZzEsIGNsYXNzIF9BcmcyLCBjbGFzcyBf UmVzdWx0PgpzdHJ1Y3QgYmluYXJ5X2Z1bmN0aW9uIHsKICB0eXBlZGVmIF9BcmcxIGZpcnN0X2Fy Z3VtZW50X3R5cGU7CiAgdHlwZWRlZiBfQXJnMiBzZWNvbmRfYXJndW1lbnRfdHlwZTsKICB0eXBl ZGVmIF9SZXN1bHQgcmVzdWx0X3R5cGU7Cn07CiMgMTI3ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9i aXRzL3N0bF9mdW5jdGlvbi5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBwbHVzIDog cHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLF9UcD4gewogIF9UcCBvcGVyYXRvcigpKGNv bnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194ICsgX195OyB9 Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IG1pbnVzIDogcHVibGljIGJpbmFyeV9m dW5jdGlvbjxfVHAsX1RwLF9UcD4gewogIF9UcCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBj b25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194IC0gX195OyB9Cn07CgoKdGVtcGxhdGUg PGNsYXNzIF9UcD4Kc3RydWN0IG11bHRpcGxpZXMgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9U cCxfVHAsX1RwPiB7CiAgX1RwIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYg X195KSBjb25zdCB7IHJldHVybiBfX3ggKiBfX3k7IH0KfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1Rw PgpzdHJ1Y3QgZGl2aWRlcyA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxfVHA+IHsK ICBfVHAgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsg cmV0dXJuIF9feCAvIF9feTsgfQp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBtb2R1 bHVzIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLF9UcD4KewogIF9UcCBvcGVyYXRv cigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194ICUg X195OyB9Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IG5lZ2F0ZSA6IHB1YmxpYyB1 bmFyeV9mdW5jdGlvbjxfVHAsX1RwPgp7CiAgX1RwIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gp IGNvbnN0IHsgcmV0dXJuIC1fX3g7IH0KfTsKIyAxNzMgIi91c3IvaW5jbHVkZS9jKysvMy4yL2Jp dHMvc3RsX2Z1bmN0aW9uLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IGVxdWFsX3Rv IDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLGJvb2w+CnsKICBib29sIG9wZXJhdG9y KCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggPT0g X195OyB9Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IG5vdF9lcXVhbF90byA6IHB1 YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxib29sPgp7CiAgYm9vbCBvcGVyYXRvcigpKGNv bnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194ICE9IF9feTsg fQp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBncmVhdGVyIDogcHVibGljIGJpbmFy eV9mdW5jdGlvbjxfVHAsX1RwLGJvb2w+CnsKICBib29sIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBf X3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggPiBfX3k7IH0KfTsKCgp0ZW1w bGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgbGVzcyA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1Rw LF9UcCxib29sPgp7CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAm IF9feSkgY29uc3QgeyByZXR1cm4gX194IDwgX195OyB9Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9U cD4Kc3RydWN0IGdyZWF0ZXJfZXF1YWwgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAs Ym9vbD4KewogIGJvb2wgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kp IGNvbnN0IHsgcmV0dXJuIF9feCA+PSBfX3k7IH0KfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpz dHJ1Y3QgbGVzc19lcXVhbCA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxib29sPgp7 CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3Qg eyByZXR1cm4gX194IDw9IF9feTsgfQp9OwojIDIyMiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0 cy9zdGxfZnVuY3Rpb24uaCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgbG9naWNhbF9h bmQgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsYm9vbD4KewogIGJvb2wgb3BlcmF0 b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCAm JiBfX3k7IH0KfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgbG9naWNhbF9vciA6IHB1 YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxib29sPgp7CiAgYm9vbCBvcGVyYXRvcigpKGNv bnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194IHx8IF9feTsg fQp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBsb2dpY2FsX25vdCA6IHB1YmxpYyB1 bmFyeV9mdW5jdGlvbjxfVHAsYm9vbD4KewogIGJvb2wgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9f eCkgY29uc3QgeyByZXR1cm4gIV9feDsgfQp9OwojIDI3MSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIv Yml0cy9zdGxfZnVuY3Rpb24uaCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX1ByZWRpY2F0ZT4KY2xhc3Mg dW5hcnlfbmVnYXRlCiAgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248dHlwZW5hbWUgX1ByZWRpY2F0 ZTo6YXJndW1lbnRfdHlwZSwgYm9vbD4gewpwcm90ZWN0ZWQ6CiAgX1ByZWRpY2F0ZSBfTV9wcmVk OwpwdWJsaWM6CiAgZXhwbGljaXQgdW5hcnlfbmVnYXRlKGNvbnN0IF9QcmVkaWNhdGUmIF9feCkg OiBfTV9wcmVkKF9feCkge30KICBib29sIG9wZXJhdG9yKCkoY29uc3QgdHlwZW5hbWUgX1ByZWRp Y2F0ZTo6YXJndW1lbnRfdHlwZSYgX194KSBjb25zdCB7CiAgICByZXR1cm4gIV9NX3ByZWQoX194 KTsKICB9Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9QcmVkaWNhdGU+CmlubGluZSB1bmFyeV9uZWdh dGU8X1ByZWRpY2F0ZT4Kbm90MShjb25zdCBfUHJlZGljYXRlJiBfX3ByZWQpCnsKICByZXR1cm4g dW5hcnlfbmVnYXRlPF9QcmVkaWNhdGU+KF9fcHJlZCk7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX1By ZWRpY2F0ZT4KY2xhc3MgYmluYXJ5X25lZ2F0ZQogIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjx0 eXBlbmFtZSBfUHJlZGljYXRlOjpmaXJzdF9hcmd1bWVudF90eXBlLAogICAgICAgICAgICAgICAg ICAgICAgICAgICB0eXBlbmFtZSBfUHJlZGljYXRlOjpzZWNvbmRfYXJndW1lbnRfdHlwZSwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgYm9vbD4gewpwcm90ZWN0ZWQ6CiAgX1ByZWRpY2F0ZSBf TV9wcmVkOwpwdWJsaWM6CiAgZXhwbGljaXQgYmluYXJ5X25lZ2F0ZShjb25zdCBfUHJlZGljYXRl JiBfX3gpIDogX01fcHJlZChfX3gpIHt9CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IHR5cGVuYW1l IF9QcmVkaWNhdGU6OmZpcnN0X2FyZ3VtZW50X3R5cGUmIF9feCwKICAgICAgICAgICAgICAgICAg Y29uc3QgdHlwZW5hbWUgX1ByZWRpY2F0ZTo6c2Vjb25kX2FyZ3VtZW50X3R5cGUmIF9feSkgY29u c3QKICB7CiAgICByZXR1cm4gIV9NX3ByZWQoX194LCBfX3kpOwogIH0KfTsKCgp0ZW1wbGF0ZSA8 Y2xhc3MgX1ByZWRpY2F0ZT4KaW5saW5lIGJpbmFyeV9uZWdhdGU8X1ByZWRpY2F0ZT4Kbm90Mihj b25zdCBfUHJlZGljYXRlJiBfX3ByZWQpCnsKICByZXR1cm4gYmluYXJ5X25lZ2F0ZTxfUHJlZGlj YXRlPihfX3ByZWQpOwp9CiMgMzQ5ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9mdW5j dGlvbi5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfT3BlcmF0aW9uPgpjbGFzcyBiaW5kZXIxc3QKICA6 IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjx0eXBlbmFtZSBfT3BlcmF0aW9uOjpzZWNvbmRfYXJndW1l bnRfdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBfT3BlcmF0aW9uOjpy ZXN1bHRfdHlwZT4gewpwcm90ZWN0ZWQ6CiAgX09wZXJhdGlvbiBvcDsKICB0eXBlbmFtZSBfT3Bl cmF0aW9uOjpmaXJzdF9hcmd1bWVudF90eXBlIHZhbHVlOwpwdWJsaWM6CiAgYmluZGVyMXN0KGNv bnN0IF9PcGVyYXRpb24mIF9feCwKICAgICAgICAgICAgY29uc3QgdHlwZW5hbWUgX09wZXJhdGlv bjo6Zmlyc3RfYXJndW1lbnRfdHlwZSYgX195KQogICAgICA6IG9wKF9feCksIHZhbHVlKF9feSkg e30KICB0eXBlbmFtZSBfT3BlcmF0aW9uOjpyZXN1bHRfdHlwZQogIG9wZXJhdG9yKCkoY29uc3Qg dHlwZW5hbWUgX09wZXJhdGlvbjo6c2Vjb25kX2FyZ3VtZW50X3R5cGUmIF9feCkgY29uc3Qgewog ICAgcmV0dXJuIG9wKHZhbHVlLCBfX3gpOwogIH0KCgogIHR5cGVuYW1lIF9PcGVyYXRpb246OnJl c3VsdF90eXBlCiAgb3BlcmF0b3IoKSh0eXBlbmFtZSBfT3BlcmF0aW9uOjpzZWNvbmRfYXJndW1l bnRfdHlwZSYgX194KSBjb25zdCB7CiAgICByZXR1cm4gb3AodmFsdWUsIF9feCk7CiAgfQoKfTsK Cgp0ZW1wbGF0ZSA8Y2xhc3MgX09wZXJhdGlvbiwgY2xhc3MgX1RwPgppbmxpbmUgYmluZGVyMXN0 PF9PcGVyYXRpb24+CmJpbmQxc3QoY29uc3QgX09wZXJhdGlvbiYgX19mbiwgY29uc3QgX1RwJiBf X3gpCnsKICB0eXBlZGVmIHR5cGVuYW1lIF9PcGVyYXRpb246OmZpcnN0X2FyZ3VtZW50X3R5cGUg X0FyZzFfdHlwZTsKICByZXR1cm4gYmluZGVyMXN0PF9PcGVyYXRpb24+KF9fZm4sIF9BcmcxX3R5 cGUoX194KSk7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX09wZXJhdGlvbj4KY2xhc3MgYmluZGVyMm5k CiAgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248dHlwZW5hbWUgX09wZXJhdGlvbjo6Zmlyc3RfYXJn dW1lbnRfdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBfT3BlcmF0aW9u OjpyZXN1bHRfdHlwZT4gewpwcm90ZWN0ZWQ6CiAgX09wZXJhdGlvbiBvcDsKICB0eXBlbmFtZSBf T3BlcmF0aW9uOjpzZWNvbmRfYXJndW1lbnRfdHlwZSB2YWx1ZTsKcHVibGljOgogIGJpbmRlcjJu ZChjb25zdCBfT3BlcmF0aW9uJiBfX3gsCiAgICAgICAgICAgIGNvbnN0IHR5cGVuYW1lIF9PcGVy YXRpb246OnNlY29uZF9hcmd1bWVudF90eXBlJiBfX3kpCiAgICAgIDogb3AoX194KSwgdmFsdWUo X195KSB7fQogIHR5cGVuYW1lIF9PcGVyYXRpb246OnJlc3VsdF90eXBlCiAgb3BlcmF0b3IoKShj b25zdCB0eXBlbmFtZSBfT3BlcmF0aW9uOjpmaXJzdF9hcmd1bWVudF90eXBlJiBfX3gpIGNvbnN0 IHsKICAgIHJldHVybiBvcChfX3gsIHZhbHVlKTsKICB9CgoKICB0eXBlbmFtZSBfT3BlcmF0aW9u OjpyZXN1bHRfdHlwZQogIG9wZXJhdG9yKCkodHlwZW5hbWUgX09wZXJhdGlvbjo6Zmlyc3RfYXJn dW1lbnRfdHlwZSYgX194KSBjb25zdCB7CiAgICByZXR1cm4gb3AoX194LCB2YWx1ZSk7CiAgfQoK fTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX09wZXJhdGlvbiwgY2xhc3MgX1RwPgppbmxpbmUgYmluZGVy Mm5kPF9PcGVyYXRpb24+CmJpbmQybmQoY29uc3QgX09wZXJhdGlvbiYgX19mbiwgY29uc3QgX1Rw JiBfX3gpCnsKICB0eXBlZGVmIHR5cGVuYW1lIF9PcGVyYXRpb246OnNlY29uZF9hcmd1bWVudF90 eXBlIF9BcmcyX3R5cGU7CiAgcmV0dXJuIGJpbmRlcjJuZDxfT3BlcmF0aW9uPihfX2ZuLCBfQXJn Ml90eXBlKF9feCkpOwp9CiMgNDM4ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9mdW5j dGlvbi5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfQXJnLCBjbGFzcyBfUmVzdWx0PgpjbGFzcyBwb2lu dGVyX3RvX3VuYXJ5X2Z1bmN0aW9uIDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9BcmcsIF9SZXN1 bHQ+IHsKcHJvdGVjdGVkOgogIF9SZXN1bHQgKCpfTV9wdHIpKF9BcmcpOwpwdWJsaWM6CiAgcG9p bnRlcl90b191bmFyeV9mdW5jdGlvbigpIHt9CiAgZXhwbGljaXQgcG9pbnRlcl90b191bmFyeV9m dW5jdGlvbihfUmVzdWx0ICgqX194KShfQXJnKSkgOiBfTV9wdHIoX194KSB7fQogIF9SZXN1bHQg b3BlcmF0b3IoKShfQXJnIF9feCkgY29uc3QgeyByZXR1cm4gX01fcHRyKF9feCk7IH0KfTsKCgp0 ZW1wbGF0ZSA8Y2xhc3MgX0FyZywgY2xhc3MgX1Jlc3VsdD4KaW5saW5lIHBvaW50ZXJfdG9fdW5h cnlfZnVuY3Rpb248X0FyZywgX1Jlc3VsdD4gcHRyX2Z1bihfUmVzdWx0ICgqX194KShfQXJnKSkK ewogIHJldHVybiBwb2ludGVyX3RvX3VuYXJ5X2Z1bmN0aW9uPF9BcmcsIF9SZXN1bHQ+KF9feCk7 Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX0FyZzEsIGNsYXNzIF9BcmcyLCBjbGFzcyBfUmVzdWx0Pgpj bGFzcyBwb2ludGVyX3RvX2JpbmFyeV9mdW5jdGlvbiA6CiAgcHVibGljIGJpbmFyeV9mdW5jdGlv bjxfQXJnMSxfQXJnMixfUmVzdWx0PiB7CnByb3RlY3RlZDoKICAgIF9SZXN1bHQgKCpfTV9wdHIp KF9BcmcxLCBfQXJnMik7CnB1YmxpYzoKICAgIHBvaW50ZXJfdG9fYmluYXJ5X2Z1bmN0aW9uKCkg e30KICAgIGV4cGxpY2l0IHBvaW50ZXJfdG9fYmluYXJ5X2Z1bmN0aW9uKF9SZXN1bHQgKCpfX3gp KF9BcmcxLCBfQXJnMikpCiAgICAgIDogX01fcHRyKF9feCkge30KICAgIF9SZXN1bHQgb3BlcmF0 b3IoKShfQXJnMSBfX3gsIF9BcmcyIF9feSkgY29uc3QgewogICAgICByZXR1cm4gX01fcHRyKF9f eCwgX195KTsKICAgIH0KfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0FyZzEsIGNsYXNzIF9BcmcyLCBj bGFzcyBfUmVzdWx0PgppbmxpbmUgcG9pbnRlcl90b19iaW5hcnlfZnVuY3Rpb248X0FyZzEsX0Fy ZzIsX1Jlc3VsdD4KcHRyX2Z1bihfUmVzdWx0ICgqX194KShfQXJnMSwgX0FyZzIpKSB7CiAgcmV0 dXJuIHBvaW50ZXJfdG9fYmluYXJ5X2Z1bmN0aW9uPF9BcmcxLF9BcmcyLF9SZXN1bHQ+KF9feCk7 Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgX0lkZW50aXR5IDogcHVibGljIHVuYXJ5 X2Z1bmN0aW9uPF9UcCxfVHA+IHsKICBfVHAmIG9wZXJhdG9yKCkoX1RwJiBfX3gpIGNvbnN0IHsg cmV0dXJuIF9feDsgfQogIGNvbnN0IF9UcCYgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCkgY29u c3QgeyByZXR1cm4gX194OyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1BhaXI+CnN0cnVjdCBfU2Vs ZWN0MXN0IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9QYWlyLCB0eXBlbmFtZSBfUGFpcjo6Zmly c3RfdHlwZT4gewogIHR5cGVuYW1lIF9QYWlyOjpmaXJzdF90eXBlJiBvcGVyYXRvcigpKF9QYWly JiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBfX3guZmlyc3Q7CiAgfQogIGNvbnN0IHR5cGVuYW1l IF9QYWlyOjpmaXJzdF90eXBlJiBvcGVyYXRvcigpKGNvbnN0IF9QYWlyJiBfX3gpIGNvbnN0IHsK ICAgIHJldHVybiBfX3guZmlyc3Q7CiAgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9QYWlyPgpzdHJ1 Y3QgX1NlbGVjdDJuZCA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfUGFpciwgdHlwZW5hbWUgX1Bh aXI6OnNlY29uZF90eXBlPgp7CiAgdHlwZW5hbWUgX1BhaXI6OnNlY29uZF90eXBlJiBvcGVyYXRv cigpKF9QYWlyJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBfX3guc2Vjb25kOwogIH0KICBjb25z dCB0eXBlbmFtZSBfUGFpcjo6c2Vjb25kX3R5cGUmIG9wZXJhdG9yKCkoY29uc3QgX1BhaXImIF9f eCkgY29uc3QgewogICAgcmV0dXJuIF9feC5zZWNvbmQ7CiAgfQp9OwojIDUyOCAiL3Vzci9pbmNs dWRlL2MrKy8zLjIvYml0cy9zdGxfZnVuY3Rpb24uaCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwg Y2xhc3MgX1RwPgpjbGFzcyBtZW1fZnVuX3QgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X1RwKixf UmV0PiB7CnB1YmxpYzoKICBleHBsaWNpdCBtZW1fZnVuX3QoX1JldCAoX1RwOjoqX19wZikoKSkg OiBfTV9mKF9fcGYpIHt9CiAgX1JldCBvcGVyYXRvcigpKF9UcCogX19wKSBjb25zdCB7IHJldHVy biAoX19wLT4qX01fZikoKTsgfQpwcml2YXRlOgogIF9SZXQgKF9UcDo6Kl9NX2YpKCk7Cn07CgoK dGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcD4KY2xhc3MgY29uc3RfbWVtX2Z1bl90IDog cHVibGljIHVuYXJ5X2Z1bmN0aW9uPGNvbnN0IF9UcCosX1JldD4gewpwdWJsaWM6CiAgZXhwbGlj aXQgY29uc3RfbWVtX2Z1bl90KF9SZXQgKF9UcDo6Kl9fcGYpKCkgY29uc3QpIDogX01fZihfX3Bm KSB7fQogIF9SZXQgb3BlcmF0b3IoKShjb25zdCBfVHAqIF9fcCkgY29uc3QgeyByZXR1cm4gKF9f cC0+Kl9NX2YpKCk7IH0KcHJpdmF0ZToKICBfUmV0IChfVHA6OipfTV9mKSgpIGNvbnN0Owp9OwoK CnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHA+CmNsYXNzIG1lbV9mdW5fcmVmX3QgOiBw dWJsaWMgdW5hcnlfZnVuY3Rpb248X1RwLF9SZXQ+IHsKcHVibGljOgogIGV4cGxpY2l0IG1lbV9m dW5fcmVmX3QoX1JldCAoX1RwOjoqX19wZikoKSkgOiBfTV9mKF9fcGYpIHt9CiAgX1JldCBvcGVy YXRvcigpKF9UcCYgX19yKSBjb25zdCB7IHJldHVybiAoX19yLipfTV9mKSgpOyB9CnByaXZhdGU6 CiAgX1JldCAoX1RwOjoqX01fZikoKTsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3Mg X1RwPgpjbGFzcyBjb25zdF9tZW1fZnVuX3JlZl90IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9U cCxfUmV0PiB7CnB1YmxpYzoKICBleHBsaWNpdCBjb25zdF9tZW1fZnVuX3JlZl90KF9SZXQgKF9U cDo6Kl9fcGYpKCkgY29uc3QpIDogX01fZihfX3BmKSB7fQogIF9SZXQgb3BlcmF0b3IoKShjb25z dCBfVHAmIF9fcikgY29uc3QgeyByZXR1cm4gKF9fci4qX01fZikoKTsgfQpwcml2YXRlOgogIF9S ZXQgKF9UcDo6Kl9NX2YpKCkgY29uc3Q7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNz IF9UcCwgY2xhc3MgX0FyZz4KY2xhc3MgbWVtX2Z1bjFfdCA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rp b248X1RwKixfQXJnLF9SZXQ+IHsKcHVibGljOgogIGV4cGxpY2l0IG1lbV9mdW4xX3QoX1JldCAo X1RwOjoqX19wZikoX0FyZykpIDogX01fZihfX3BmKSB7fQogIF9SZXQgb3BlcmF0b3IoKShfVHAq IF9fcCwgX0FyZyBfX3gpIGNvbnN0IHsgcmV0dXJuIChfX3AtPipfTV9mKShfX3gpOyB9CnByaXZh dGU6CiAgX1JldCAoX1RwOjoqX01fZikoX0FyZyk7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9SZXQs IGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4KY2xhc3MgY29uc3RfbWVtX2Z1bjFfdCA6IHB1YmxpYyBi aW5hcnlfZnVuY3Rpb248Y29uc3QgX1RwKixfQXJnLF9SZXQ+IHsKcHVibGljOgogIGV4cGxpY2l0 IGNvbnN0X21lbV9mdW4xX3QoX1JldCAoX1RwOjoqX19wZikoX0FyZykgY29uc3QpIDogX01fZihf X3BmKSB7fQogIF9SZXQgb3BlcmF0b3IoKShjb25zdCBfVHAqIF9fcCwgX0FyZyBfX3gpIGNvbnN0 CiAgICB7IHJldHVybiAoX19wLT4qX01fZikoX194KTsgfQpwcml2YXRlOgogIF9SZXQgKF9UcDo6 Kl9NX2YpKF9BcmcpIGNvbnN0Owp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAs IGNsYXNzIF9Bcmc+CmNsYXNzIG1lbV9mdW4xX3JlZl90IDogcHVibGljIGJpbmFyeV9mdW5jdGlv bjxfVHAsX0FyZyxfUmV0PiB7CnB1YmxpYzoKICBleHBsaWNpdCBtZW1fZnVuMV9yZWZfdChfUmV0 IChfVHA6OipfX3BmKShfQXJnKSkgOiBfTV9mKF9fcGYpIHt9CiAgX1JldCBvcGVyYXRvcigpKF9U cCYgX19yLCBfQXJnIF9feCkgY29uc3QgeyByZXR1cm4gKF9fci4qX01fZikoX194KTsgfQpwcml2 YXRlOgogIF9SZXQgKF9UcDo6Kl9NX2YpKF9BcmcpOwp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfUmV0 LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmNsYXNzIGNvbnN0X21lbV9mdW4xX3JlZl90IDogcHVi bGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX0FyZyxfUmV0PiB7CnB1YmxpYzoKICBleHBsaWNpdCBj b25zdF9tZW1fZnVuMV9yZWZfdChfUmV0IChfVHA6OipfX3BmKShfQXJnKSBjb25zdCkgOiBfTV9m KF9fcGYpIHt9CiAgX1JldCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX19yLCBfQXJnIF9feCkgY29u c3QgeyByZXR1cm4gKF9fci4qX01fZikoX194KTsgfQpwcml2YXRlOgogIF9SZXQgKF9UcDo6Kl9N X2YpKF9BcmcpIGNvbnN0Owp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CmNsYXNzIG1lbV9mdW5f dDx2b2lkLCBfVHA+IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9UcCosdm9pZD4gewpwdWJsaWM6 CiAgZXhwbGljaXQgbWVtX2Z1bl90KHZvaWQgKF9UcDo6Kl9fcGYpKCkpIDogX01fZihfX3BmKSB7 fQogIHZvaWQgb3BlcmF0b3IoKShfVHAqIF9fcCkgY29uc3QgeyAoX19wLT4qX01fZikoKTsgfQpw cml2YXRlOgogIHZvaWQgKF9UcDo6Kl9NX2YpKCk7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4K Y2xhc3MgY29uc3RfbWVtX2Z1bl90PHZvaWQsIF9UcD4gOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248 Y29uc3QgX1RwKix2b2lkPiB7CnB1YmxpYzoKICBleHBsaWNpdCBjb25zdF9tZW1fZnVuX3Qodm9p ZCAoX1RwOjoqX19wZikoKSBjb25zdCkgOiBfTV9mKF9fcGYpIHt9CiAgdm9pZCBvcGVyYXRvcigp KGNvbnN0IF9UcCogX19wKSBjb25zdCB7IChfX3AtPipfTV9mKSgpOyB9CnByaXZhdGU6CiAgdm9p ZCAoX1RwOjoqX01fZikoKSBjb25zdDsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpjbGFzcyBt ZW1fZnVuX3JlZl90PHZvaWQsIF9UcD4gOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X1RwLHZvaWQ+ IHsKcHVibGljOgogIGV4cGxpY2l0IG1lbV9mdW5fcmVmX3Qodm9pZCAoX1RwOjoqX19wZikoKSkg OiBfTV9mKF9fcGYpIHt9CiAgdm9pZCBvcGVyYXRvcigpKF9UcCYgX19yKSBjb25zdCB7IChfX3Iu Kl9NX2YpKCk7IH0KcHJpdmF0ZToKICB2b2lkIChfVHA6OipfTV9mKSgpOwp9OwoKCnRlbXBsYXRl IDxjbGFzcyBfVHA+CmNsYXNzIGNvbnN0X21lbV9mdW5fcmVmX3Q8dm9pZCwgX1RwPiA6IHB1Ymxp YyB1bmFyeV9mdW5jdGlvbjxfVHAsdm9pZD4gewpwdWJsaWM6CiAgZXhwbGljaXQgY29uc3RfbWVt X2Z1bl9yZWZfdCh2b2lkIChfVHA6OipfX3BmKSgpIGNvbnN0KSA6IF9NX2YoX19wZikge30KICB2 b2lkIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3IpIGNvbnN0IHsgKF9fci4qX01fZikoKTsgfQpw cml2YXRlOgogIHZvaWQgKF9UcDo6Kl9NX2YpKCkgY29uc3Q7Cn07CgoKdGVtcGxhdGUgPGNsYXNz IF9UcCwgY2xhc3MgX0FyZz4KY2xhc3MgbWVtX2Z1bjFfdDx2b2lkLCBfVHAsIF9Bcmc+IDogcHVi bGljIGJpbmFyeV9mdW5jdGlvbjxfVHAqLF9Bcmcsdm9pZD4gewpwdWJsaWM6CiAgZXhwbGljaXQg bWVtX2Z1bjFfdCh2b2lkIChfVHA6OipfX3BmKShfQXJnKSkgOiBfTV9mKF9fcGYpIHt9CiAgdm9p ZCBvcGVyYXRvcigpKF9UcCogX19wLCBfQXJnIF9feCkgY29uc3QgeyAoX19wLT4qX01fZikoX194 KTsgfQpwcml2YXRlOgogIHZvaWQgKF9UcDo6Kl9NX2YpKF9BcmcpOwp9OwoKCnRlbXBsYXRlIDxj bGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmNsYXNzIGNvbnN0X21lbV9mdW4xX3Q8dm9pZCwgX1RwLCBf QXJnPgogIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxjb25zdCBfVHAqLF9Bcmcsdm9pZD4gewpw dWJsaWM6CiAgZXhwbGljaXQgY29uc3RfbWVtX2Z1bjFfdCh2b2lkIChfVHA6OipfX3BmKShfQXJn KSBjb25zdCkgOiBfTV9mKF9fcGYpIHt9CiAgdm9pZCBvcGVyYXRvcigpKGNvbnN0IF9UcCogX19w LCBfQXJnIF9feCkgY29uc3QgeyAoX19wLT4qX01fZikoX194KTsgfQpwcml2YXRlOgogIHZvaWQg KF9UcDo6Kl9NX2YpKF9BcmcpIGNvbnN0Owp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNz IF9Bcmc+CmNsYXNzIG1lbV9mdW4xX3JlZl90PHZvaWQsIF9UcCwgX0FyZz4KICA6IHB1YmxpYyBi aW5hcnlfZnVuY3Rpb248X1RwLF9Bcmcsdm9pZD4gewpwdWJsaWM6CiAgZXhwbGljaXQgbWVtX2Z1 bjFfcmVmX3Qodm9pZCAoX1RwOjoqX19wZikoX0FyZykpIDogX01fZihfX3BmKSB7fQogIHZvaWQg b3BlcmF0b3IoKShfVHAmIF9fciwgX0FyZyBfX3gpIGNvbnN0IHsgKF9fci4qX01fZikoX194KTsg fQpwcml2YXRlOgogIHZvaWQgKF9UcDo6Kl9NX2YpKF9BcmcpOwp9OwoKCnRlbXBsYXRlIDxjbGFz cyBfVHAsIGNsYXNzIF9Bcmc+CmNsYXNzIGNvbnN0X21lbV9mdW4xX3JlZl90PHZvaWQsIF9UcCwg X0FyZz4KICA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9Bcmcsdm9pZD4gewpwdWJsaWM6 CiAgZXhwbGljaXQgY29uc3RfbWVtX2Z1bjFfcmVmX3Qodm9pZCAoX1RwOjoqX19wZikoX0FyZykg Y29uc3QpIDogX01fZihfX3BmKSB7fQogIHZvaWQgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9fciwg X0FyZyBfX3gpIGNvbnN0IHsgKF9fci4qX01fZikoX194KTsgfQpwcml2YXRlOgogIHZvaWQgKF9U cDo6Kl9NX2YpKF9BcmcpIGNvbnN0Owp9OwoKCgoKCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFz cyBfVHA+CmlubGluZSBtZW1fZnVuX3Q8X1JldCxfVHA+IG1lbV9mdW4oX1JldCAoX1RwOjoqX19m KSgpKQogIHsgcmV0dXJuIG1lbV9mdW5fdDxfUmV0LF9UcD4oX19mKTsgfQoKdGVtcGxhdGUgPGNs YXNzIF9SZXQsIGNsYXNzIF9UcD4KaW5saW5lIGNvbnN0X21lbV9mdW5fdDxfUmV0LF9UcD4gbWVt X2Z1bihfUmV0IChfVHA6OipfX2YpKCkgY29uc3QpCiAgeyByZXR1cm4gY29uc3RfbWVtX2Z1bl90 PF9SZXQsX1RwPihfX2YpOyB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwPgppbmxp bmUgbWVtX2Z1bl9yZWZfdDxfUmV0LF9UcD4gbWVtX2Z1bl9yZWYoX1JldCAoX1RwOjoqX19mKSgp KQogIHsgcmV0dXJuIG1lbV9mdW5fcmVmX3Q8X1JldCxfVHA+KF9fZik7IH0KCnRlbXBsYXRlIDxj bGFzcyBfUmV0LCBjbGFzcyBfVHA+CmlubGluZSBjb25zdF9tZW1fZnVuX3JlZl90PF9SZXQsX1Rw PiBtZW1fZnVuX3JlZihfUmV0IChfVHA6OipfX2YpKCkgY29uc3QpCiAgeyByZXR1cm4gY29uc3Rf bWVtX2Z1bl9yZWZfdDxfUmV0LF9UcD4oX19mKTsgfQoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNs YXNzIF9UcCwgY2xhc3MgX0FyZz4KaW5saW5lIG1lbV9mdW4xX3Q8X1JldCxfVHAsX0FyZz4gbWVt X2Z1bihfUmV0IChfVHA6OipfX2YpKF9BcmcpKQogIHsgcmV0dXJuIG1lbV9mdW4xX3Q8X1JldCxf VHAsX0FyZz4oX19mKTsgfQoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcCwgY2xhc3Mg X0FyZz4KaW5saW5lIGNvbnN0X21lbV9mdW4xX3Q8X1JldCxfVHAsX0FyZz4gbWVtX2Z1bihfUmV0 IChfVHA6OipfX2YpKF9BcmcpIGNvbnN0KQogIHsgcmV0dXJuIGNvbnN0X21lbV9mdW4xX3Q8X1Jl dCxfVHAsX0FyZz4oX19mKTsgfQoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcCwgY2xh c3MgX0FyZz4KaW5saW5lIG1lbV9mdW4xX3JlZl90PF9SZXQsX1RwLF9Bcmc+IG1lbV9mdW5fcmVm KF9SZXQgKF9UcDo6Kl9fZikoX0FyZykpCiAgeyByZXR1cm4gbWVtX2Z1bjFfcmVmX3Q8X1JldCxf VHAsX0FyZz4oX19mKTsgfQoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcCwgY2xhc3Mg X0FyZz4KaW5saW5lIGNvbnN0X21lbV9mdW4xX3JlZl90PF9SZXQsX1RwLF9Bcmc+Cm1lbV9mdW5f cmVmKF9SZXQgKF9UcDo6Kl9fZikoX0FyZykgY29uc3QpCiAgeyByZXR1cm4gY29uc3RfbWVtX2Z1 bjFfcmVmX3Q8X1JldCxfVHAsX0FyZz4oX19mKTsgfQoKCgp9CiMgNTMgIi91c3IvaW5jbHVkZS9j KysvMy4yL3N0cmluZyIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9iYXNpY19z dHJpbmcuaCIgMSAzCiMgNDQgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvYmFzaWNfc3RyaW5n LmgiIDMKCgoKbmFtZXNwYWNlIHN0ZAp7CiMgODggIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMv YmFzaWNfc3RyaW5nLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U cmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGNsYXNzIGJhc2ljX3N0cmluZwogICAgewoKICAg IHB1YmxpYzoKICAgICAgdHlwZWRlZiBfVHJhaXRzIHRyYWl0c190eXBlOwogICAgICB0eXBlZGVm IHR5cGVuYW1lIF9UcmFpdHM6OmNoYXJfdHlwZSB2YWx1ZV90eXBlOwogICAgICB0eXBlZGVmIF9B bGxvYyBhbGxvY2F0b3JfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2M6OnNpemVf dHlwZSBzaXplX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjpkaWZmZXJlbmNl X3R5cGUgZGlmZmVyZW5jZV90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6cmVm ZXJlbmNlIHJlZmVyZW5jZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2M6OmNvbnN0X3Jl ZmVyZW5jZSBjb25zdF9yZWZlcmVuY2U7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjpw b2ludGVyIHBvaW50ZXI7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjpjb25zdF9wb2lu dGVyIGNvbnN0X3BvaW50ZXI7CiAgICAgIHR5cGVkZWYgX19nbnVfY3h4OjpfX25vcm1hbF9pdGVy YXRvcjxwb2ludGVyLCBiYXNpY19zdHJpbmc+IGl0ZXJhdG9yOwogICAgICB0eXBlZGVmIF9fZ251 X2N4eDo6X19ub3JtYWxfaXRlcmF0b3I8Y29uc3RfcG9pbnRlciwgYmFzaWNfc3RyaW5nPgogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj b25zdF9pdGVyYXRvcjsKICAgICAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9yPGNvbnN0X2l0ZXJh dG9yPiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yOwogICAgICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0 b3I8aXRlcmF0b3I+IHJldmVyc2VfaXRlcmF0b3I7CgogICAgcHJpdmF0ZToKIyAxMjMgIi91c3Iv aW5jbHVkZS9jKysvMy4yL2JpdHMvYmFzaWNfc3RyaW5nLmgiIDMKICAgICAgc3RydWN0IF9SZXAK ICAgICAgewoKICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6dGVtcGxhdGUgcmViaW5k PGNoYXI+OjpvdGhlciBfUmF3X2J5dGVzX2FsbG9jOwojIDE0MSAiL3Vzci9pbmNsdWRlL2MrKy8z LjIvYml0cy9iYXNpY19zdHJpbmcuaCIgMwogICAgICAgIHN0YXRpYyBjb25zdCBzaXplX3R5cGUg X1NfbWF4X3NpemU7CiAgICAgICAgc3RhdGljIGNvbnN0IF9DaGFyVCBfU190ZXJtaW5hbDsKCiAg ICAgICAgc2l6ZV90eXBlIF9NX2xlbmd0aDsKICAgICAgICBzaXplX3R5cGUgX01fY2FwYWNpdHk7 CiAgICAgICAgX0F0b21pY193b3JkIF9NX3JlZmVyZW5jZXM7CgogICAgICAgIGJvb2wKICAgICAg ICBfTV9pc19sZWFrZWQoKSBjb25zdAogICAgICAgIHsgcmV0dXJuIF9NX3JlZmVyZW5jZXMgPCAw OyB9CgogICAgICAgIGJvb2wKICAgICAgICBfTV9pc19zaGFyZWQoKSBjb25zdAogICAgICAgIHsg cmV0dXJuIF9NX3JlZmVyZW5jZXMgPiAwOyB9CgogICAgICAgIHZvaWQKICAgICAgICBfTV9zZXRf bGVha2VkKCkKICAgICAgICB7IF9NX3JlZmVyZW5jZXMgPSAtMTsgfQoKICAgICAgICB2b2lkCiAg ICAgICAgX01fc2V0X3NoYXJhYmxlKCkKICAgICAgICB7IF9NX3JlZmVyZW5jZXMgPSAwOyB9Cgog ICAgICAgIF9DaGFyVCoKICAgICAgICBfTV9yZWZkYXRhKCkgdGhyb3coKQogICAgICAgIHsgcmV0 dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8X0NoYXJUKj4odGhpcyArIDEpOyB9CgogICAgICAgIF9DaGFy VCYKICAgICAgICBvcGVyYXRvcltdKHNpemVfdCBfX3MpIHRocm93KCkKICAgICAgICB7IHJldHVy biBfTV9yZWZkYXRhKCkgW19fc107IH0KCiAgICAgICAgX0NoYXJUKgogICAgICAgIF9NX2dyYWIo Y29uc3QgX0FsbG9jJiBfX2FsbG9jMSwgY29uc3QgX0FsbG9jJiBfX2FsbG9jMikKICAgICAgICB7 CiAgICAgICAgICByZXR1cm4gKCFfTV9pc19sZWFrZWQoKSAmJiBfX2FsbG9jMSA9PSBfX2FsbG9j MikKICAgICAgICAgICAgICAgICAgPyBfTV9yZWZjb3B5KCkgOiBfTV9jbG9uZShfX2FsbG9jMSk7 CiAgICAgICAgfQoKCiAgICAgICAgc3RhdGljIF9SZXAqCiAgICAgICAgX1NfY3JlYXRlKHNpemVf dCwgY29uc3QgX0FsbG9jJik7CgogICAgICAgIHZvaWQKICAgICAgICBfTV9kaXNwb3NlKGNvbnN0 IF9BbGxvYyYgX19hKQogICAgICAgIHsKICAgICAgICAgIGlmIChfX2V4Y2hhbmdlX2FuZF9hZGQo Jl9NX3JlZmVyZW5jZXMsIC0xKSA8PSAwKQogICAgICAgICAgICBfTV9kZXN0cm95KF9fYSk7CiAg ICAgICAgfQoKICAgICAgICB2b2lkCiAgICAgICAgX01fZGVzdHJveShjb25zdCBfQWxsb2MmKSB0 aHJvdygpOwoKICAgICAgICBfQ2hhclQqCiAgICAgICAgX01fcmVmY29weSgpIHRocm93KCkKICAg ICAgICB7CiAgICAgICAgICBfX2F0b21pY19hZGQoJl9NX3JlZmVyZW5jZXMsIDEpOwogICAgICAg ICAgcmV0dXJuIF9NX3JlZmRhdGEoKTsKICAgICAgICB9CgogICAgICAgIF9DaGFyVCoKICAgICAg ICBfTV9jbG9uZShjb25zdCBfQWxsb2MmLCBzaXplX3R5cGUgX19yZXMgPSAwKTsKICAgICAgfTsK CgogICAgICBzdHJ1Y3QgX0FsbG9jX2hpZGVyIDogX0FsbG9jCiAgICAgIHsKICAgICAgICBfQWxs b2NfaGlkZXIoX0NoYXJUKiBfX2RhdCwgY29uc3QgX0FsbG9jJiBfX2EpCiAgICAgICAgOiBfQWxs b2MoX19hKSwgX01fcChfX2RhdCkgeyB9CgogICAgICAgIF9DaGFyVCogX01fcDsKICAgICAgfTsK CiAgICBwdWJsaWM6CgoKCiAgICAgIHN0YXRpYyBjb25zdCBzaXplX3R5cGUgbnBvcyA9IHN0YXRp Y19jYXN0PHNpemVfdHlwZT4oLTEpOwoKICAgIHByaXZhdGU6CgogICAgICBtdXRhYmxlIF9BbGxv Y19oaWRlciBfTV9kYXRhcGx1czsKCgoKICAgICAgc3RhdGljIHNpemVfdHlwZSBfU19lbXB0eV9y ZXBfc3RvcmFnZVsoc2l6ZW9mKF9SZXApICsgc2l6ZW9mKF9DaGFyVCkgKyBzaXplb2Yoc2l6ZV90 eXBlKSAtIDEpL3NpemVvZihzaXplX3R5cGUpXTsKCiAgICAgIF9DaGFyVCoKICAgICAgX01fZGF0 YSgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX2RhdGFwbHVzLl9NX3A7IH0KCiAgICAgIF9DaGFy VCoKICAgICAgX01fZGF0YShfQ2hhclQqIF9fcCkKICAgICAgeyByZXR1cm4gKF9NX2RhdGFwbHVz Ll9NX3AgPSBfX3ApOyB9CgogICAgICBfUmVwKgogICAgICBfTV9yZXAoKSBjb25zdAogICAgICB7 IHJldHVybiAmKChyZWludGVycHJldF9jYXN0PF9SZXAqPiAoX01fZGF0YSgpKSlbLTFdKTsgfQoK CgogICAgICBpdGVyYXRvcgogICAgICBfTV9pYmVnaW4oKSBjb25zdCB7IHJldHVybiBpdGVyYXRv cihfTV9kYXRhKCkpOyB9CgogICAgICBpdGVyYXRvcgogICAgICBfTV9pZW5kKCkgY29uc3QgeyBy ZXR1cm4gaXRlcmF0b3IoX01fZGF0YSgpICsgdGhpcy0+c2l6ZSgpKTsgfQoKICAgICAgdm9pZAog ICAgICBfTV9sZWFrKCkKICAgICAgewogICAgICAgIGlmICghX01fcmVwKCktPl9NX2lzX2xlYWtl ZCgpKQogICAgICAgICAgX01fbGVha19oYXJkKCk7CiAgICAgIH0KCiAgICAgIGl0ZXJhdG9yCiAg ICAgIF9NX2NoZWNrKHNpemVfdHlwZSBfX3BvcykgY29uc3QKICAgICAgewogICAgICAgIGlmIChf X3BvcyA+IHRoaXMtPnNpemUoKSkKICAgICAgICAgIF9fdGhyb3dfb3V0X29mX3JhbmdlKCJiYXNp Y19zdHJpbmc6Ol9NX2NoZWNrIik7CiAgICAgICAgcmV0dXJuIF9NX2liZWdpbigpICsgX19wb3M7 CiAgICAgIH0KCgogICAgICBpdGVyYXRvcgogICAgICBfTV9mb2xkKHNpemVfdHlwZSBfX3Bvcywg c2l6ZV90eXBlIF9fb2ZmKSBjb25zdAogICAgICB7CiAgICAgICAgYm9vbCBfX3Rlc3RvZmYgPSBf X29mZiA8IHRoaXMtPnNpemUoKSAtIF9fcG9zOwogICAgICAgIHNpemVfdHlwZSBfX25ld29mZiA9 IF9fdGVzdG9mZiA/IF9fb2ZmIDogdGhpcy0+c2l6ZSgpIC0gX19wb3M7CiAgICAgICAgcmV0dXJu IChfTV9pYmVnaW4oKSArIF9fcG9zICsgX19uZXdvZmYpOwogICAgICB9CgoKCiAgICAgIHRlbXBs YXRlPGNsYXNzIF9JdGVyYXRvcj4KICAgICAgICBzdGF0aWMgdm9pZAogICAgICAgIF9TX2NvcHlf Y2hhcnMoX0NoYXJUKiBfX3AsIF9JdGVyYXRvciBfX2sxLCBfSXRlcmF0b3IgX19rMikKICAgICAg ICB7CiAgICAgICAgICBmb3IgKDsgX19rMSAhPSBfX2syOyArK19fazEsICsrX19wKQogICAgICAg ICAgICB0cmFpdHNfdHlwZTo6YXNzaWduKCpfX3AsICpfX2sxKTsKICAgICAgICB9CgogICAgICBz dGF0aWMgdm9pZAogICAgICBfU19jb3B5X2NoYXJzKF9DaGFyVCogX19wLCBpdGVyYXRvciBfX2sx LCBpdGVyYXRvciBfX2syKQogICAgICB7IF9TX2NvcHlfY2hhcnMoX19wLCBfX2sxLmJhc2UoKSwg X19rMi5iYXNlKCkpOyB9CgogICAgICBzdGF0aWMgdm9pZAogICAgICBfU19jb3B5X2NoYXJzKF9D aGFyVCogX19wLCBjb25zdF9pdGVyYXRvciBfX2sxLCBjb25zdF9pdGVyYXRvciBfX2syKQogICAg ICB7IF9TX2NvcHlfY2hhcnMoX19wLCBfX2sxLmJhc2UoKSwgX19rMi5iYXNlKCkpOyB9CgogICAg ICBzdGF0aWMgdm9pZAogICAgICBfU19jb3B5X2NoYXJzKF9DaGFyVCogX19wLCBfQ2hhclQqIF9f azEsIF9DaGFyVCogX19rMikKICAgICAgeyB0cmFpdHNfdHlwZTo6Y29weShfX3AsIF9fazEsIF9f azIgLSBfX2sxKTsgfQoKICAgICAgc3RhdGljIHZvaWQKICAgICAgX1NfY29weV9jaGFycyhfQ2hh clQqIF9fcCwgY29uc3QgX0NoYXJUKiBfX2sxLCBjb25zdCBfQ2hhclQqIF9fazIpCiAgICAgIHsg dHJhaXRzX3R5cGU6OmNvcHkoX19wLCBfX2sxLCBfX2syIC0gX19rMSk7IH0KCiAgICAgIHZvaWQK ICAgICAgX01fbXV0YXRlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbGVuMSwgc2l6ZV90 eXBlIF9fbGVuMik7CgogICAgICB2b2lkCiAgICAgIF9NX2xlYWtfaGFyZCgpOwoKICAgICAgc3Rh dGljIF9SZXAmCiAgICAgIF9TX2VtcHR5X3JlcCgpCiAgICAgIHsgcmV0dXJuICpyZWludGVycHJl dF9jYXN0PF9SZXAqPigmX1NfZW1wdHlfcmVwX3N0b3JhZ2UpOyB9CgogICAgcHVibGljOgoKCgoK ICAgICAgaW5saW5lCiAgICAgIGJhc2ljX3N0cmluZygpOwoKICAgICAgZXhwbGljaXQKICAgICAg YmFzaWNfc3RyaW5nKGNvbnN0IF9BbGxvYyYgX19hKTsKCgogICAgICBiYXNpY19zdHJpbmcoY29u c3QgYmFzaWNfc3RyaW5nJiBfX3N0cik7CiAgICAgIGJhc2ljX3N0cmluZyhjb25zdCBiYXNpY19z dHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3MsCiAgICAgICAgICAgICAgICAgICBzaXplX3R5 cGUgX19uID0gbnBvcyk7CiAgICAgIGJhc2ljX3N0cmluZyhjb25zdCBiYXNpY19zdHJpbmcmIF9f c3RyLCBzaXplX3R5cGUgX19wb3MsCiAgICAgICAgICAgICAgICAgICBzaXplX3R5cGUgX19uLCBj b25zdCBfQWxsb2MmIF9fYSk7CgogICAgICBiYXNpY19zdHJpbmcoY29uc3QgX0NoYXJUKiBfX3Ms IHNpemVfdHlwZSBfX24sCiAgICAgICAgICAgICAgICAgICBjb25zdCBfQWxsb2MmIF9fYSA9IF9B bGxvYygpKTsKICAgICAgYmFzaWNfc3RyaW5nKGNvbnN0IF9DaGFyVCogX19zLCBjb25zdCBfQWxs b2MmIF9fYSA9IF9BbGxvYygpKTsKICAgICAgYmFzaWNfc3RyaW5nKHNpemVfdHlwZSBfX24sIF9D aGFyVCBfX2MsIGNvbnN0IF9BbGxvYyYgX19hID0gX0FsbG9jKCkpOwoKICAgICAgdGVtcGxhdGU8 Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgICAgICAgYmFzaWNfc3RyaW5nKF9JbnB1dEl0ZXJhdG9y IF9fYmVnLCBfSW5wdXRJdGVyYXRvciBfX2VuZCwKICAgICAgICAgICAgICAgICAgICAgY29uc3Qg X0FsbG9jJiBfX2EgPSBfQWxsb2MoKSk7CgogICAgICB+YmFzaWNfc3RyaW5nKCkKICAgICAgeyBf TV9yZXAoKS0+X01fZGlzcG9zZSh0aGlzLT5nZXRfYWxsb2NhdG9yKCkpOyB9CgogICAgICBiYXNp Y19zdHJpbmcmCiAgICAgIG9wZXJhdG9yPShjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyKSB7IHJl dHVybiB0aGlzLT5hc3NpZ24oX19zdHIpOyB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIG9w ZXJhdG9yPShjb25zdCBfQ2hhclQqIF9fcykgeyByZXR1cm4gdGhpcy0+YXNzaWduKF9fcyk7IH0K CiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgb3BlcmF0b3I9KF9DaGFyVCBfX2MpIHsgcmV0dXJu IHRoaXMtPmFzc2lnbigxLCBfX2MpOyB9CgoKICAgICAgaXRlcmF0b3IKICAgICAgYmVnaW4oKQog ICAgICB7CiAgICAgICAgX01fbGVhaygpOwogICAgICAgIHJldHVybiBpdGVyYXRvcihfTV9kYXRh KCkpOwogICAgICB9CgogICAgICBjb25zdF9pdGVyYXRvcgogICAgICBiZWdpbigpIGNvbnN0CiAg ICAgIHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKF9NX2RhdGEoKSk7IH0KCiAgICAgIGl0ZXJhdG9y CiAgICAgIGVuZCgpCiAgICAgIHsKICAgICAgICAgX01fbGVhaygpOwogICAgICAgICByZXR1cm4g aXRlcmF0b3IoX01fZGF0YSgpICsgdGhpcy0+c2l6ZSgpKTsKICAgICAgfQoKICAgICAgY29uc3Rf aXRlcmF0b3IKICAgICAgZW5kKCkgY29uc3QKICAgICAgeyByZXR1cm4gY29uc3RfaXRlcmF0b3Io X01fZGF0YSgpICsgdGhpcy0+c2l6ZSgpKTsgfQoKICAgICAgcmV2ZXJzZV9pdGVyYXRvcgogICAg ICByYmVnaW4oKQogICAgICB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKHRoaXMtPmVuZCgpKTsg fQoKICAgICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcgogICAgICByYmVnaW4oKSBjb25zdAogICAg ICB7IHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKHRoaXMtPmVuZCgpKTsgfQoKICAgICAg cmV2ZXJzZV9pdGVyYXRvcgogICAgICByZW5kKCkKICAgICAgeyByZXR1cm4gcmV2ZXJzZV9pdGVy YXRvcih0aGlzLT5iZWdpbigpKTsgfQoKICAgICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcgogICAg ICByZW5kKCkgY29uc3QKICAgICAgeyByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcih0aGlz LT5iZWdpbigpKTsgfQoKICAgIHB1YmxpYzoKCiAgICAgIHNpemVfdHlwZQogICAgICBzaXplKCkg Y29uc3QgeyByZXR1cm4gX01fcmVwKCktPl9NX2xlbmd0aDsgfQoKICAgICAgc2l6ZV90eXBlCiAg ICAgIGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIF9NX3JlcCgpLT5fTV9sZW5ndGg7IH0KCiAgICAg IHNpemVfdHlwZQogICAgICBtYXhfc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIF9SZXA6Ol9TX21heF9z aXplOyB9CgogICAgICB2b2lkCiAgICAgIHJlc2l6ZShzaXplX3R5cGUgX19uLCBfQ2hhclQgX19j KTsKCiAgICAgIHZvaWQKICAgICAgcmVzaXplKHNpemVfdHlwZSBfX24pIHsgdGhpcy0+cmVzaXpl KF9fbiwgX0NoYXJUKCkpOyB9CgogICAgICBzaXplX3R5cGUKICAgICAgY2FwYWNpdHkoKSBjb25z dCB7IHJldHVybiBfTV9yZXAoKS0+X01fY2FwYWNpdHk7IH0KCiAgICAgIHZvaWQKICAgICAgcmVz ZXJ2ZShzaXplX3R5cGUgX19yZXNfYXJnID0gMCk7CgogICAgICB2b2lkCiAgICAgIGNsZWFyKCkg eyBfTV9tdXRhdGUoMCwgdGhpcy0+c2l6ZSgpLCAwKTsgfQoKICAgICAgYm9vbAogICAgICBlbXB0 eSgpIGNvbnN0IHsgcmV0dXJuIHRoaXMtPnNpemUoKSA9PSAwOyB9CgoKICAgICAgY29uc3RfcmVm ZXJlbmNlCiAgICAgIG9wZXJhdG9yW10gKHNpemVfdHlwZSBfX3BvcykgY29uc3QKICAgICAgeyBy ZXR1cm4gX01fZGF0YSgpW19fcG9zXTsgfQoKICAgICAgcmVmZXJlbmNlCiAgICAgIG9wZXJhdG9y W10oc2l6ZV90eXBlIF9fcG9zKQogICAgICB7CiAgICAgICAgX01fbGVhaygpOwogICAgICAgIHJl dHVybiBfTV9kYXRhKClbX19wb3NdOwogICAgICB9CgogICAgICBjb25zdF9yZWZlcmVuY2UKICAg ICAgYXQoc2l6ZV90eXBlIF9fbikgY29uc3QKICAgICAgewogICAgICAgIGlmIChfX24gPj0gdGhp cy0+c2l6ZSgpKQogICAgICAgICAgX190aHJvd19vdXRfb2ZfcmFuZ2UoImJhc2ljX3N0cmluZzo6 YXQiKTsKICAgICAgICByZXR1cm4gX01fZGF0YSgpW19fbl07CiAgICAgIH0KCiAgICAgIHJlZmVy ZW5jZQogICAgICBhdChzaXplX3R5cGUgX19uKQogICAgICB7CiAgICAgICAgaWYgKF9fbiA+PSBz aXplKCkpCiAgICAgICAgICBfX3Rocm93X291dF9vZl9yYW5nZSgiYmFzaWNfc3RyaW5nOjphdCIp OwogICAgICAgIF9NX2xlYWsoKTsKICAgICAgICByZXR1cm4gX01fZGF0YSgpW19fbl07CiAgICAg IH0KCgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIG9wZXJhdG9yKz0oY29uc3QgYmFzaWNfc3Ry aW5nJiBfX3N0cikgeyByZXR1cm4gdGhpcy0+YXBwZW5kKF9fc3RyKTsgfQoKICAgICAgYmFzaWNf c3RyaW5nJgogICAgICBvcGVyYXRvcis9KGNvbnN0IF9DaGFyVCogX19zKSB7IHJldHVybiB0aGlz LT5hcHBlbmQoX19zKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBvcGVyYXRvcis9KF9D aGFyVCBfX2MpIHsgcmV0dXJuIHRoaXMtPmFwcGVuZChzaXplX3R5cGUoMSksIF9fYyk7IH0KCiAg ICAgIGJhc2ljX3N0cmluZyYKICAgICAgYXBwZW5kKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIp OwoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBhcHBlbmQoY29uc3QgYmFzaWNfc3RyaW5nJiBf X3N0ciwgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKTsKCiAgICAgIGJhc2ljX3N0cmlu ZyYKICAgICAgYXBwZW5kKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19uKTsKCiAgICAg IGJhc2ljX3N0cmluZyYKICAgICAgYXBwZW5kKGNvbnN0IF9DaGFyVCogX19zKQogICAgICB7IHJl dHVybiB0aGlzLT5hcHBlbmQoX19zLCB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcykpOyB9CgogICAg ICBiYXNpY19zdHJpbmcmCiAgICAgIGFwcGVuZChzaXplX3R5cGUgX19uLCBfQ2hhclQgX19jKTsK CiAgICAgIHRlbXBsYXRlPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogICAgICAgIGJhc2ljX3N0cmlu ZyYKICAgICAgICBhcHBlbmQoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3Ig X19sYXN0KQogICAgICAgIHsgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX01faWVuZCgpLCBfTV9pZW5k KCksIF9fZmlyc3QsIF9fbGFzdCk7IH0KCiAgICAgIHZvaWQKICAgICAgcHVzaF9iYWNrKF9DaGFy VCBfX2MpCiAgICAgIHsgdGhpcy0+cmVwbGFjZShfTV9pZW5kKCksIF9NX2llbmQoKSwgMSwgX19j KTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBhc3NpZ24oY29uc3QgYmFzaWNfc3RyaW5n JiBfX3N0cik7CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIGFzc2lnbihjb25zdCBiYXNpY19z dHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24pCiAgICAgIHsKICAg ICAgICBjb25zdCBzaXplX3R5cGUgX19zdHJzaXplID0gX19zdHIuc2l6ZSgpOwogICAgICAgIGlm IChfX3BvcyA+IF9fc3Ryc2l6ZSkKICAgICAgICAgIF9fdGhyb3dfb3V0X29mX3JhbmdlKCJiYXNp Y19zdHJpbmc6OmFzc2lnbiIpOwogICAgICAgIGNvbnN0IGJvb2wgX190ZXN0biA9IF9fbiA8IF9f c3Ryc2l6ZSAtIF9fcG9zOwogICAgICAgIGNvbnN0IHNpemVfdHlwZSBfX25ld3NpemUgPSBfX3Rl c3RuID8gX19uIDogX19zdHJzaXplIC0gX19wb3M7CiAgICAgICAgcmV0dXJuIHRoaXMtPmFzc2ln bihfX3N0ci5fTV9kYXRhKCkgKyBfX3BvcywgX19uZXdzaXplKTsKICAgICAgfQoKICAgICAgYmFz aWNfc3RyaW5nJgogICAgICBhc3NpZ24oY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX24p CiAgICAgIHsKICAgICAgICBpZiAoX19uID4gdGhpcy0+bWF4X3NpemUoKSkKICAgICAgICAgIF9f dGhyb3dfbGVuZ3RoX2Vycm9yKCJiYXNpY19zdHJpbmc6OmFzc2lnbiIpOwogICAgICAgIGlmIChf TV9yZXAoKS0+X01faXNfc2hhcmVkKCkgfHwgbGVzczxjb25zdCBfQ2hhclQqPigpKF9fcywgX01f ZGF0YSgpKQogICAgICAgICAgICB8fCBsZXNzPGNvbnN0IF9DaGFyVCo+KCkoX01fZGF0YSgpICsg dGhpcy0+c2l6ZSgpLCBfX3MpKQogICAgICAgICAgcmV0dXJuIF9NX3JlcGxhY2Vfc2FmZShfTV9p YmVnaW4oKSwgX01faWVuZCgpLCBfX3MsIF9fcyArIF9fbik7CiAgICAgICAgZWxzZQogICAgICAg ICAgewoKICAgICAgICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fcG9zID0gX19zIC0gX01fZGF0YSgp OwogICAgICAgICAgICBpZiAoX19wb3MgPj0gX19uKQogICAgICAgICAgICAgIHRyYWl0c190eXBl Ojpjb3B5KF9NX2RhdGEoKSwgX19zLCBfX24pOwogICAgICAgICAgICBlbHNlIGlmIChfX3BvcykK ICAgICAgICAgICAgICB0cmFpdHNfdHlwZTo6bW92ZShfTV9kYXRhKCksIF9fcywgX19uKTsKICAg ICAgICAgICAgX01fcmVwKCktPl9NX2xlbmd0aCA9IF9fbjsKICAgICAgICAgICAgX01fZGF0YSgp W19fbl0gPSBfUmVwOjpfU190ZXJtaW5hbDsKICAgICAgICAgICAgcmV0dXJuICp0aGlzOwogICAg ICAgICAgfQogICAgICB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIGFzc2lnbihjb25zdCBf Q2hhclQqIF9fcykKICAgICAgeyByZXR1cm4gdGhpcy0+YXNzaWduKF9fcywgdHJhaXRzX3R5cGU6 Omxlbmd0aChfX3MpKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBhc3NpZ24oc2l6ZV90 eXBlIF9fbiwgX0NoYXJUIF9fYykKICAgICAgeyByZXR1cm4gdGhpcy0+cmVwbGFjZShfTV9pYmVn aW4oKSwgX01faWVuZCgpLCBfX24sIF9fYyk7IH0KCiAgICAgIHRlbXBsYXRlPGNsYXNzIF9JbnB1 dEl0ZXJhdG9yPgogICAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgICBhc3NpZ24oX0lucHV0SXRl cmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KQogICAgICAgIHsgcmV0dXJuIHRo aXMtPnJlcGxhY2UoX01faWJlZ2luKCksIF9NX2llbmQoKSwgX19maXJzdCwgX19sYXN0KTsgfQoK ICAgICAgdm9pZAogICAgICBpbnNlcnQoaXRlcmF0b3IgX19wLCBzaXplX3R5cGUgX19uLCBfQ2hh clQgX19jKQogICAgICB7IHRoaXMtPnJlcGxhY2UoX19wLCBfX3AsIF9fbiwgX19jKTsgfQoKICAg ICAgdGVtcGxhdGU8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgICAgICAgdm9pZCBpbnNlcnQoaXRl cmF0b3IgX19wLCBfSW5wdXRJdGVyYXRvciBfX2JlZywgX0lucHV0SXRlcmF0b3IgX19lbmQpCiAg ICAgICAgeyB0aGlzLT5yZXBsYWNlKF9fcCwgX19wLCBfX2JlZywgX19lbmQpOyB9CgogICAgICBi YXNpY19zdHJpbmcmCiAgICAgIGluc2VydChzaXplX3R5cGUgX19wb3MxLCBjb25zdCBiYXNpY19z dHJpbmcmIF9fc3RyKQogICAgICB7IHJldHVybiB0aGlzLT5pbnNlcnQoX19wb3MxLCBfX3N0ciwg MCwgX19zdHIuc2l6ZSgpKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBpbnNlcnQoc2l6 ZV90eXBlIF9fcG9zMSwgY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwKICAgICAgICAgICAgIHNp emVfdHlwZSBfX3BvczIsIHNpemVfdHlwZSBfX24pCiAgICAgIHsKICAgICAgICBjb25zdCBzaXpl X3R5cGUgX19zdHJzaXplID0gX19zdHIuc2l6ZSgpOwogICAgICAgIGlmIChfX3BvczIgPiBfX3N0 cnNpemUpCiAgICAgICAgICBfX3Rocm93X291dF9vZl9yYW5nZSgiYmFzaWNfc3RyaW5nOjppbnNl cnQiKTsKICAgICAgICBjb25zdCBib29sIF9fdGVzdG4gPSBfX24gPCBfX3N0cnNpemUgLSBfX3Bv czI7CiAgICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fbmV3c2l6ZSA9IF9fdGVzdG4gPyBfX24gOiBf X3N0cnNpemUgLSBfX3BvczI7CiAgICAgICAgcmV0dXJuIHRoaXMtPmluc2VydChfX3BvczEsIF9f c3RyLl9NX2RhdGEoKSArIF9fcG9zMiwgX19uZXdzaXplKTsKICAgICAgfQoKICAgICAgYmFzaWNf c3RyaW5nJgogICAgICBpbnNlcnQoc2l6ZV90eXBlIF9fcG9zLCBjb25zdCBfQ2hhclQqIF9fcywg c2l6ZV90eXBlIF9fbikKICAgICAgewogICAgICAgIGNvbnN0IHNpemVfdHlwZSBfX3NpemUgPSB0 aGlzLT5zaXplKCk7CiAgICAgICAgaWYgKF9fcG9zID4gX19zaXplKQogICAgICAgICAgX190aHJv d19vdXRfb2ZfcmFuZ2UoImJhc2ljX3N0cmluZzo6aW5zZXJ0Iik7CiAgICAgICAgaWYgKF9fc2l6 ZSA+IHRoaXMtPm1heF9zaXplKCkgLSBfX24pCiAgICAgICAgICBfX3Rocm93X2xlbmd0aF9lcnJv cigiYmFzaWNfc3RyaW5nOjppbnNlcnQiKTsKICAgICAgICBpZiAoX01fcmVwKCktPl9NX2lzX3No YXJlZCgpIHx8IGxlc3M8Y29uc3QgX0NoYXJUKj4oKShfX3MsIF9NX2RhdGEoKSkKICAgICAgICAg ICAgfHwgbGVzczxjb25zdCBfQ2hhclQqPigpKF9NX2RhdGEoKSArIF9fc2l6ZSwgX19zKSkKICAg ICAgICAgIHJldHVybiBfTV9yZXBsYWNlX3NhZmUoX01faWJlZ2luKCkgKyBfX3BvcywgX01faWJl Z2luKCkgKyBfX3BvcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zLCBfX3Mg KyBfX24pOwogICAgICAgIGVsc2UKICAgICAgICAgIHsKCgoKICAgICAgICAgICAgY29uc3Qgc2l6 ZV90eXBlIF9fb2ZmID0gX19zIC0gX01fZGF0YSgpOwogICAgICAgICAgICBfTV9tdXRhdGUoX19w b3MsIDAsIF9fbik7CiAgICAgICAgICAgIF9fcyA9IF9NX2RhdGEoKSArIF9fb2ZmOwogICAgICAg ICAgICBfQ2hhclQqIF9fcCA9IF9NX2RhdGEoKSArIF9fcG9zOwogICAgICAgICAgICBpZiAoX19z ICsgX19uIDw9IF9fcCkKICAgICAgICAgICAgICB0cmFpdHNfdHlwZTo6Y29weShfX3AsIF9fcywg X19uKTsKICAgICAgICAgICAgZWxzZSBpZiAoX19zID49IF9fcCkKICAgICAgICAgICAgICB0cmFp dHNfdHlwZTo6Y29weShfX3AsIF9fcyArIF9fbiwgX19uKTsKICAgICAgICAgICAgZWxzZQogICAg ICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRyYWl0c190eXBlOjpjb3B5KF9fcCwgX19zLCBf X3AgLSBfX3MpOwogICAgICAgICAgICAgICAgdHJhaXRzX3R5cGU6OmNvcHkoX19wICsgKF9fcCAt IF9fcyksIF9fcCArIF9fbiwgX19uIC0gKF9fcCAtIF9fcykpOwogICAgICAgICAgICAgIH0KICAg ICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICAgICAgfQogICAgICAgfQoKICAgICAgYmFzaWNf c3RyaW5nJgogICAgICBpbnNlcnQoc2l6ZV90eXBlIF9fcG9zLCBjb25zdCBfQ2hhclQqIF9fcykK ICAgICAgeyByZXR1cm4gdGhpcy0+aW5zZXJ0KF9fcG9zLCBfX3MsIHRyYWl0c190eXBlOjpsZW5n dGgoX19zKSk7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgaW5zZXJ0KHNpemVfdHlwZSBf X3Bvcywgc2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9fYykKICAgICAgewogICAgICAgIHRoaXMtPmlu c2VydChfTV9jaGVjayhfX3BvcyksIF9fbiwgX19jKTsKICAgICAgICByZXR1cm4gKnRoaXM7CiAg ICAgIH0KCiAgICAgIGl0ZXJhdG9yCiAgICAgIGluc2VydChpdGVyYXRvciBfX3AsIF9DaGFyVCBf X2MgPSBfQ2hhclQoKSkKICAgICAgewogICAgICAgIHNpemVfdHlwZSBfX3BvcyA9IF9fcCAtIF9N X2liZWdpbigpOwogICAgICAgIHRoaXMtPmluc2VydChfTV9jaGVjayhfX3BvcyksIHNpemVfdHlw ZSgxKSwgX19jKTsKICAgICAgICBfTV9yZXAoKS0+X01fc2V0X2xlYWtlZCgpOwogICAgICAgIHJl dHVybiB0aGlzLT5fTV9pYmVnaW4oKSArIF9fcG9zOwogICAgICB9CgogICAgICBiYXNpY19zdHJp bmcmCiAgICAgIGVyYXNlKHNpemVfdHlwZSBfX3BvcyA9IDAsIHNpemVfdHlwZSBfX24gPSBucG9z KQogICAgICB7CiAgICAgICAgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX01fY2hlY2soX19wb3MpLCBf TV9mb2xkKF9fcG9zLCBfX24pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NX2RhdGEo KSwgX01fZGF0YSgpKTsKICAgICAgfQoKICAgICAgaXRlcmF0b3IKICAgICAgZXJhc2UoaXRlcmF0 b3IgX19wb3NpdGlvbikKICAgICAgewogICAgICAgIHNpemVfdHlwZSBfX2kgPSBfX3Bvc2l0aW9u IC0gX01faWJlZ2luKCk7CiAgICAgICAgdGhpcy0+cmVwbGFjZShfX3Bvc2l0aW9uLCBfX3Bvc2l0 aW9uICsgMSwgX01fZGF0YSgpLCBfTV9kYXRhKCkpOwogICAgICAgIF9NX3JlcCgpLT5fTV9zZXRf bGVha2VkKCk7CiAgICAgICAgcmV0dXJuIF9NX2liZWdpbigpICsgX19pOwogICAgICB9CgogICAg ICBpdGVyYXRvcgogICAgICBlcmFzZShpdGVyYXRvciBfX2ZpcnN0LCBpdGVyYXRvciBfX2xhc3Qp CiAgICAgIHsKICAgICAgICBzaXplX3R5cGUgX19pID0gX19maXJzdCAtIF9NX2liZWdpbigpOwog ICAgICAgIHRoaXMtPnJlcGxhY2UoX19maXJzdCwgX19sYXN0LCBfTV9kYXRhKCksIF9NX2RhdGEo KSk7CiAgICAgICAgX01fcmVwKCktPl9NX3NldF9sZWFrZWQoKTsKICAgICAgIHJldHVybiBfTV9p YmVnaW4oKSArIF9faTsKICAgICAgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICByZXBsYWNl KHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbiwgY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0 cikKICAgICAgeyByZXR1cm4gdGhpcy0+cmVwbGFjZShfX3BvcywgX19uLCBfX3N0ci5fTV9kYXRh KCksIF9fc3RyLnNpemUoKSk7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgcmVwbGFjZShz aXplX3R5cGUgX19wb3MxLCBzaXplX3R5cGUgX19uMSwgY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0 ciwKICAgICAgICAgICAgICBzaXplX3R5cGUgX19wb3MyLCBzaXplX3R5cGUgX19uMik7CgogICAg ICBiYXNpY19zdHJpbmcmCiAgICAgIHJlcGxhY2Uoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUg X19uMSwgY29uc3QgX0NoYXJUKiBfX3MsCiAgICAgICAgICAgICAgc2l6ZV90eXBlIF9fbjIpCiAg ICAgIHsKICAgICAgICBjb25zdCBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOwogICAg ICAgIGlmIChfX3BvcyA+IF9fc2l6ZSkKICAgICAgICAgIF9fdGhyb3dfb3V0X29mX3JhbmdlKCJi YXNpY19zdHJpbmc6OnJlcGxhY2UiKTsKICAgICAgICBjb25zdCBib29sIF9fdGVzdG4xID0gX19u MSA8IF9fc2l6ZSAtIF9fcG9zOwogICAgICAgIGNvbnN0IHNpemVfdHlwZSBfX2ZvbGRuMSA9IF9f dGVzdG4xID8gX19uMSA6IF9fc2l6ZSAtIF9fcG9zOwogICAgICAgIGlmIChfX3NpemUgLSBfX2Zv bGRuMSA+IHRoaXMtPm1heF9zaXplKCkgLSBfX24yKQogICAgICAgICAgX190aHJvd19sZW5ndGhf ZXJyb3IoImJhc2ljX3N0cmluZzo6cmVwbGFjZSIpOwogICAgICAgIGlmIChfTV9yZXAoKS0+X01f aXNfc2hhcmVkKCkgfHwgbGVzczxjb25zdCBfQ2hhclQqPigpKF9fcywgX01fZGF0YSgpKQogICAg ICAgICAgICB8fCBsZXNzPGNvbnN0IF9DaGFyVCo+KCkoX01fZGF0YSgpICsgX19zaXplLCBfX3Mp KQogICAgICAgICAgcmV0dXJuIF9NX3JlcGxhY2Vfc2FmZShfTV9pYmVnaW4oKSArIF9fcG9zLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTV9pYmVnaW4oKSArIF9fcG9zICsgX19m b2xkbjEsIF9fcywgX19zICsgX19uMik7CgogICAgICAgIGVsc2UgcmV0dXJuCiAgICAgICAgICAg ICAgIF9NX3JlcGxhY2UoX01faWJlZ2luKCkgKyBfX3BvcywgX01faWJlZ2luKCkgKyBfX3BvcyAr IF9fZm9sZG4xLAogICAgICAgICAgICAgICAgICAgICAgICAgIF9fcywgX19zICsgX19uMiwKICAg ICAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8Y29uc3QgX0No YXJUKj46Oml0ZXJhdG9yX2NhdGVnb3J5KCkpOwogICAgICB9CgogICAgICBiYXNpY19zdHJpbmcm CiAgICAgIHJlcGxhY2Uoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uMSwgY29uc3QgX0No YXJUKiBfX3MpCiAgICAgIHsgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX19wb3MsIF9fbjEsIF9fcywg dHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBy ZXBsYWNlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbjEsIHNpemVfdHlwZSBfX24yLCBf Q2hhclQgX19jKQogICAgICB7IHJldHVybiB0aGlzLT5yZXBsYWNlKF9NX2NoZWNrKF9fcG9zKSwg X01fZm9sZChfX3BvcywgX19uMSksIF9fbjIsIF9fYyk7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYK ICAgICAgcmVwbGFjZShpdGVyYXRvciBfX2kxLCBpdGVyYXRvciBfX2kyLCBjb25zdCBiYXNpY19z dHJpbmcmIF9fc3RyKQogICAgICB7IHJldHVybiB0aGlzLT5yZXBsYWNlKF9faTEsIF9faTIsIF9f c3RyLl9NX2RhdGEoKSwgX19zdHIuc2l6ZSgpKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAg ICByZXBsYWNlKGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9yIF9faTIsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19uKQogICAgICB7IHJldHVy biB0aGlzLT5yZXBsYWNlKF9faTEgLSBfTV9pYmVnaW4oKSwgX19pMiAtIF9faTEsIF9fcywgX19u KTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICByZXBsYWNlKGl0ZXJhdG9yIF9faTEsIGl0 ZXJhdG9yIF9faTIsIGNvbnN0IF9DaGFyVCogX19zKQogICAgICB7IHJldHVybiB0aGlzLT5yZXBs YWNlKF9faTEsIF9faTIsIF9fcywgdHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpKTsgfQoKICAgICAg YmFzaWNfc3RyaW5nJgogICAgICByZXBsYWNlKGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9yIF9faTIs IHNpemVfdHlwZSBfX24sIF9DaGFyVCBfX2MpOwoKICAgICAgdGVtcGxhdGU8Y2xhc3MgX0lucHV0 SXRlcmF0b3I+CiAgICAgICAgYmFzaWNfc3RyaW5nJgogICAgICAgIHJlcGxhY2UoaXRlcmF0b3Ig X19pMSwgaXRlcmF0b3IgX19pMiwKICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXJhdG9yIF9fazEs IF9JbnB1dEl0ZXJhdG9yIF9fazIpCiAgICAgICAgeyByZXR1cm4gX01fcmVwbGFjZShfX2kxLCBf X2kyLCBfX2sxLCBfX2syLAogICAgICAgICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9J bnB1dEl0ZXJhdG9yPjo6aXRlcmF0b3JfY2F0ZWdvcnkoKSk7IH0KCgoKICAgICAgYmFzaWNfc3Ry aW5nJgogICAgICByZXBsYWNlKGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9yIF9faTIsIF9DaGFyVCog X19rMSwgX0NoYXJUKiBfX2syKQogICAgICAgIHsgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX19pMSAt IF9NX2liZWdpbigpLCBfX2kyIC0gX19pMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IF9fazEsIF9fazIgLSBfX2sxKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICByZXBsYWNl KGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9yIF9faTIsIGNvbnN0IF9DaGFyVCogX19rMSwgY29uc3Qg X0NoYXJUKiBfX2syKQogICAgICAgIHsgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX19pMSAtIF9NX2li ZWdpbigpLCBfX2kyIC0gX19pMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fazEs IF9fazIgLSBfX2sxKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICByZXBsYWNlKGl0ZXJh dG9yIF9faTEsIGl0ZXJhdG9yIF9faTIsIGl0ZXJhdG9yIF9fazEsIGl0ZXJhdG9yIF9fazIpCiAg ICAgICAgeyByZXR1cm4gdGhpcy0+cmVwbGFjZShfX2kxIC0gX01faWJlZ2luKCksIF9faTIgLSBf X2kxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19rMS5iYXNlKCksIF9fazIgLSBf X2sxKTsKICAgICAgICB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIHJlcGxhY2UoaXRlcmF0 b3IgX19pMSwgaXRlcmF0b3IgX19pMiwgY29uc3RfaXRlcmF0b3IgX19rMSwgY29uc3RfaXRlcmF0 b3IgX19rMikKICAgICAgICB7IHJldHVybiB0aGlzLT5yZXBsYWNlKF9faTEgLSBfTV9pYmVnaW4o KSwgX19pMiAtIF9faTEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2sxLmJhc2Uo KSwgX19rMiAtIF9fazEpOwogICAgICAgIH0KCiAgICBwcml2YXRlOgogICAgICB0ZW1wbGF0ZTxj bGFzcyBfSW5wdXRJdGVyYXRvcj4KICAgICAgICBiYXNpY19zdHJpbmcmCiAgICAgICAgX01fcmVw bGFjZShpdGVyYXRvciBfX2kxLCBpdGVyYXRvciBfX2kyLCBfSW5wdXRJdGVyYXRvciBfX2sxLAog ICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcmF0b3IgX19rMiwgaW5wdXRfaXRlcmF0b3JfdGFn KTsKCiAgICAgIHRlbXBsYXRlPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CiAgICAgICAgYmFzaWNf c3RyaW5nJgogICAgICAgIF9NX3JlcGxhY2Vfc2FmZShpdGVyYXRvciBfX2kxLCBpdGVyYXRvciBf X2kyLCBfRm9yd2FyZEl0ZXJhdG9yIF9fazEsCiAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0 ZXJhdG9yIF9fazIpOwoKCgogICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW5JdGVyPgogICAgICAgIHN0 YXRpYyBfQ2hhclQqCiAgICAgICAgX1NfY29uc3RydWN0X2F1eChfSW5JdGVyIF9fYmVnLCBfSW5J dGVyIF9fZW5kLCBjb25zdCBfQWxsb2MmIF9fYSwKICAgICAgICAgICAgICAgICAgICAgICAgIF9f ZmFsc2VfdHlwZSkKICAgICAgICB7CiAgICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9y X3RyYWl0czxfSW5JdGVyPjo6aXRlcmF0b3JfY2F0ZWdvcnkgX1RhZzsKICAgICAgICAgIHJldHVy biBfU19jb25zdHJ1Y3QoX19iZWcsIF9fZW5kLCBfX2EsIF9UYWcoKSk7CiAgICAgICAgfQoKICAg ICAgdGVtcGxhdGU8Y2xhc3MgX0luSXRlcj4KICAgICAgICBzdGF0aWMgX0NoYXJUKgogICAgICAg IF9TX2NvbnN0cnVjdF9hdXgoX0luSXRlciBfX2JlZywgX0luSXRlciBfX2VuZCwgY29uc3QgX0Fs bG9jJiBfX2EsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX3RydWVfdHlwZSkKICAgICAgICB7 CiAgICAgICAgICByZXR1cm4gX1NfY29uc3RydWN0KHN0YXRpY19jYXN0PHNpemVfdHlwZT4oX19i ZWcpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDx2YWx1ZV90eXBl PihfX2VuZCksIF9fYSk7CiAgICAgICAgfQoKICAgICAgdGVtcGxhdGU8Y2xhc3MgX0luSXRlcj4K ICAgICAgICBzdGF0aWMgX0NoYXJUKgogICAgICAgIF9TX2NvbnN0cnVjdChfSW5JdGVyIF9fYmVn LCBfSW5JdGVyIF9fZW5kLCBjb25zdCBfQWxsb2MmIF9fYSkKICAgICAgICB7CiAgICAgICAgICB0 eXBlZGVmIHR5cGVuYW1lIF9Jc19pbnRlZ2VyPF9Jbkl0ZXI+OjpfSW50ZWdyYWwgX0ludGVncmFs OwogICAgICAgICAgcmV0dXJuIF9TX2NvbnN0cnVjdF9hdXgoX19iZWcsIF9fZW5kLCBfX2EsIF9J bnRlZ3JhbCgpKTsKICAgICAgICB9CgoKICAgICAgdGVtcGxhdGU8Y2xhc3MgX0luSXRlcj4KICAg ICAgICBzdGF0aWMgX0NoYXJUKgogICAgICAgICBfU19jb25zdHJ1Y3QoX0luSXRlciBfX2JlZywg X0luSXRlciBfX2VuZCwgY29uc3QgX0FsbG9jJiBfX2EsCiAgICAgICAgICAgICAgICAgICAgICBp bnB1dF9pdGVyYXRvcl90YWcpOwoKCgogICAgICB0ZW1wbGF0ZTxjbGFzcyBfRndkSXRlcj4KICAg ICAgICBzdGF0aWMgX0NoYXJUKgogICAgICAgIF9TX2NvbnN0cnVjdChfRndkSXRlciBfX2JlZywg X0Z3ZEl0ZXIgX19lbmQsIGNvbnN0IF9BbGxvYyYgX19hLAogICAgICAgICAgICAgICAgICAgICBm b3J3YXJkX2l0ZXJhdG9yX3RhZyk7CgogICAgICBzdGF0aWMgX0NoYXJUKgogICAgICBfU19jb25z dHJ1Y3Qoc2l6ZV90eXBlIF9fcmVxLCBfQ2hhclQgX19jLCBjb25zdCBfQWxsb2MmIF9fYSk7Cgog ICAgcHVibGljOgoKICAgICAgc2l6ZV90eXBlCiAgICAgIGNvcHkoX0NoYXJUKiBfX3MsIHNpemVf dHlwZSBfX24sIHNpemVfdHlwZSBfX3BvcyA9IDApIGNvbnN0OwoKICAgICAgdm9pZAogICAgICBz d2FwKGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcyk7CgoKICAgICAg Y29uc3QgX0NoYXJUKgogICAgICBjX3N0cigpIGNvbnN0CiAgICAgIHsKCiAgICAgICAgc2l6ZV90 eXBlIF9fbiA9IHRoaXMtPnNpemUoKTsKICAgICAgICB0cmFpdHNfdHlwZTo6YXNzaWduKF9NX2Rh dGEoKVtfX25dLCBfUmVwOjpfU190ZXJtaW5hbCk7CiAgICAgICAgcmV0dXJuIF9NX2RhdGEoKTsK ICAgICAgfQoKICAgICAgY29uc3QgX0NoYXJUKgogICAgICBkYXRhKCkgY29uc3QgeyByZXR1cm4g X01fZGF0YSgpOyB9CgogICAgICBhbGxvY2F0b3JfdHlwZQogICAgICBnZXRfYWxsb2NhdG9yKCkg Y29uc3QgeyByZXR1cm4gX01fZGF0YXBsdXM7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBmaW5k KGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24pIGNvbnN0 OwoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmQoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwg c2l6ZV90eXBlIF9fcG9zID0gMCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZmluZChfX3N0 ci5kYXRhKCksIF9fcG9zLCBfX3N0ci5zaXplKCkpOyB9CgogICAgICBzaXplX3R5cGUKICAgICAg ZmluZChjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zID0gMCkgY29uc3QKICAgICAg eyByZXR1cm4gdGhpcy0+ZmluZChfX3MsIF9fcG9zLCB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcykp OyB9CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZChfQ2hhclQgX19jLCBzaXplX3R5cGUgX19w b3MgPSAwKSBjb25zdDsKCiAgICAgIHNpemVfdHlwZQogICAgICByZmluZChjb25zdCBiYXNpY19z dHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3MgPSBucG9zKSBjb25zdAogICAgICB7IHJldHVy biB0aGlzLT5yZmluZChfX3N0ci5kYXRhKCksIF9fcG9zLCBfX3N0ci5zaXplKCkpOyB9CgogICAg ICBzaXplX3R5cGUKICAgICAgcmZpbmQoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3Bv cywgc2l6ZV90eXBlIF9fbikgY29uc3Q7CgogICAgICBzaXplX3R5cGUKICAgICAgcmZpbmQoY29u c3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3BvcyA9IG5wb3MpIGNvbnN0CiAgICAgIHsgcmV0 dXJuIHRoaXMtPnJmaW5kKF9fcywgX19wb3MsIHRyYWl0c190eXBlOjpsZW5ndGgoX19zKSk7IH0K CiAgICAgIHNpemVfdHlwZQogICAgICByZmluZChfQ2hhclQgX19jLCBzaXplX3R5cGUgX19wb3Mg PSBucG9zKSBjb25zdDsKCiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kX2ZpcnN0X29mKGNvbnN0 IGJhc2ljX3N0cmluZyYgX19zdHIsIHNpemVfdHlwZSBfX3BvcyA9IDApIGNvbnN0CiAgICAgIHsg cmV0dXJuIHRoaXMtPmZpbmRfZmlyc3Rfb2YoX19zdHIuZGF0YSgpLCBfX3BvcywgX19zdHIuc2l6 ZSgpKTsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmRfZmlyc3Rfb2YoY29uc3QgX0NoYXJU KiBfX3MsIHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikgY29uc3Q7CgogICAgICBzaXpl X3R5cGUKICAgICAgZmluZF9maXJzdF9vZihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9f cG9zID0gMCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZmluZF9maXJzdF9vZihfX3MsIF9f cG9zLCB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcykpOyB9CgogICAgICBzaXplX3R5cGUKICAgICAg ZmluZF9maXJzdF9vZihfQ2hhclQgX19jLCBzaXplX3R5cGUgX19wb3MgPSAwKSBjb25zdAogICAg ICB7IHJldHVybiB0aGlzLT5maW5kKF9fYywgX19wb3MpOyB9CgogICAgICBzaXplX3R5cGUKICAg ICAgZmluZF9sYXN0X29mKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsIHNpemVfdHlwZSBfX3Bv cyA9IG5wb3MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmZpbmRfbGFzdF9vZihfX3N0ci5k YXRhKCksIF9fcG9zLCBfX3N0ci5zaXplKCkpOyB9CgogICAgICBzaXplX3R5cGUKICAgICAgZmlu ZF9sYXN0X29mKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBf X24pIGNvbnN0OwoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmRfbGFzdF9vZihjb25zdCBfQ2hh clQqIF9fcywgc2l6ZV90eXBlIF9fcG9zID0gbnBvcykgY29uc3QKICAgICAgeyByZXR1cm4gdGhp cy0+ZmluZF9sYXN0X29mKF9fcywgX19wb3MsIHRyYWl0c190eXBlOjpsZW5ndGgoX19zKSk7IH0K CiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kX2xhc3Rfb2YoX0NoYXJUIF9fYywgc2l6ZV90eXBl IF9fcG9zID0gbnBvcykgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+cmZpbmQoX19jLCBfX3Bv cyk7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kX2ZpcnN0X25vdF9vZihjb25zdCBiYXNp Y19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3MgPSAwKSBjb25zdAogICAgICB7IHJldHVy biB0aGlzLT5maW5kX2ZpcnN0X25vdF9vZihfX3N0ci5kYXRhKCksIF9fcG9zLCBfX3N0ci5zaXpl KCkpOyB9CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZF9maXJzdF9ub3Rfb2YoY29uc3QgX0No YXJUKiBfX3MsIHNpemVfdHlwZSBfX3BvcywKICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90 eXBlIF9fbikgY29uc3Q7CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZF9maXJzdF9ub3Rfb2Yo Y29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3BvcyA9IDApIGNvbnN0CiAgICAgIHsgcmV0 dXJuIHRoaXMtPmZpbmRfZmlyc3Rfbm90X29mKF9fcywgX19wb3MsIHRyYWl0c190eXBlOjpsZW5n dGgoX19zKSk7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kX2ZpcnN0X25vdF9vZihfQ2hh clQgX19jLCBzaXplX3R5cGUgX19wb3MgPSAwKSBjb25zdDsKCiAgICAgIHNpemVfdHlwZQogICAg ICBmaW5kX2xhc3Rfbm90X29mKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsIHNpemVfdHlwZSBf X3BvcyA9IG5wb3MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmZpbmRfbGFzdF9ub3Rfb2Yo X19zdHIuZGF0YSgpLCBfX3BvcywgX19zdHIuc2l6ZSgpKTsgfQoKICAgICAgc2l6ZV90eXBlCiAg ICAgIGZpbmRfbGFzdF9ub3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3BvcywK ICAgICAgICAgICAgICAgICAgICAgICBzaXplX3R5cGUgX19uKSBjb25zdDsKICAgICAgc2l6ZV90 eXBlCiAgICAgIGZpbmRfbGFzdF9ub3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBf X3BvcyA9IG5wb3MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmZpbmRfbGFzdF9ub3Rfb2Yo X19zLCBfX3BvcywgdHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpKTsgfQoKICAgICAgc2l6ZV90eXBl CiAgICAgIGZpbmRfbGFzdF9ub3Rfb2YoX0NoYXJUIF9fYywgc2l6ZV90eXBlIF9fcG9zID0gbnBv cykgY29uc3Q7CgogICAgICBiYXNpY19zdHJpbmcKICAgICAgc3Vic3RyKHNpemVfdHlwZSBfX3Bv cyA9IDAsIHNpemVfdHlwZSBfX24gPSBucG9zKSBjb25zdAogICAgICB7CiAgICAgICAgaWYgKF9f cG9zID4gdGhpcy0+c2l6ZSgpKQogICAgICAgICAgX190aHJvd19vdXRfb2ZfcmFuZ2UoImJhc2lj X3N0cmluZzo6c3Vic3RyIik7CiAgICAgICAgcmV0dXJuIGJhc2ljX3N0cmluZygqdGhpcywgX19w b3MsIF9fbik7CiAgICAgIH0KCiAgICAgIGludAogICAgICBjb21wYXJlKGNvbnN0IGJhc2ljX3N0 cmluZyYgX19zdHIpIGNvbnN0CiAgICAgIHsKICAgICAgICBzaXplX3R5cGUgX19zaXplID0gdGhp cy0+c2l6ZSgpOwogICAgICAgIHNpemVfdHlwZSBfX29zaXplID0gX19zdHIuc2l6ZSgpOwogICAg ICAgIHNpemVfdHlwZSBfX2xlbiA9IG1pbihfX3NpemUsIF9fb3NpemUpOwoKICAgICAgICBpbnQg X19yID0gdHJhaXRzX3R5cGU6OmNvbXBhcmUoX01fZGF0YSgpLCBfX3N0ci5kYXRhKCksIF9fbGVu KTsKICAgICAgICBpZiAoIV9fcikKICAgICAgICAgIF9fciA9IF9fc2l6ZSAtIF9fb3NpemU7CiAg ICAgICAgcmV0dXJuIF9fcjsKICAgICAgfQoKICAgICAgaW50CiAgICAgIGNvbXBhcmUoc2l6ZV90 eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uLCBjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyKSBjb25z dDsKCiAgICAgIGludAogICAgICBjb21wYXJlKHNpemVfdHlwZSBfX3BvczEsIHNpemVfdHlwZSBf X24xLCBjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLAogICAgICAgICAgICAgIHNpemVfdHlwZSBf X3BvczIsIHNpemVfdHlwZSBfX24yKSBjb25zdDsKCiAgICAgIGludAogICAgICBjb21wYXJlKGNv bnN0IF9DaGFyVCogX19zKSBjb25zdDsKCgoKICAgICAgaW50CiAgICAgIGNvbXBhcmUoc2l6ZV90 eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uMSwgY29uc3QgX0NoYXJUKiBfX3MpIGNvbnN0OwoKICAg ICAgaW50CiAgICAgIGNvbXBhcmUoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uMSwgY29u c3QgX0NoYXJUKiBfX3MsCiAgICAgICAgICAgICAgc2l6ZV90eXBlIF9fbjIpIGNvbnN0OwogIH07 CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1l IF9BbGxvYz4KICAgIGlubGluZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+ OjoKICAgIGJhc2ljX3N0cmluZygpCiAgICA6IF9NX2RhdGFwbHVzKF9TX2VtcHR5X3JlcCgpLl9N X3JlZmNvcHkoKSwgX0FsbG9jKCkpIHsgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0 eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJU LCBfVHJhaXRzLCBfQWxsb2M+CiAgICBvcGVyYXRvcisoY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFy VCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsCiAgICAgICAgICAgICAgY29uc3QgYmFzaWNfc3Ry aW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAgICB7CiAgICAgIGJhc2ljX3N0 cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4gX19zdHIoX19saHMpOwogICAgICBfX3N0ci5h cHBlbmQoX19yaHMpOwogICAgICByZXR1cm4gX19zdHI7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVu YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNf c3RyaW5nPF9DaGFyVCxfVHJhaXRzLF9BbGxvYz4KICAgIG9wZXJhdG9yKyhjb25zdCBfQ2hhclQq IF9fbGhzLAogICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsX1RyYWl0cyxf QWxsb2M+JiBfX3Jocyk7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry YWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRzLF9B bGxvYz4KICAgIG9wZXJhdG9yKyhfQ2hhclQgX19saHMsIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hh clQsX1RyYWl0cyxfQWxsb2M+JiBfX3Jocyk7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg dHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJhc2ljX3N0cmlu ZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4KICAgIG9wZXJhdG9yKyhjb25zdCBiYXNpY19zdHJp bmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywKICAgICAgICAgICAgIGNvbnN0IF9D aGFyVCogX19yaHMpCiAgICB7CiAgICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9B bGxvYz4gX19zdHIoX19saHMpOwogICAgICBfX3N0ci5hcHBlbmQoX19yaHMpOwogICAgICByZXR1 cm4gX19zdHI7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry YWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9U cmFpdHMsIF9BbGxvYz4KICAgIG9wZXJhdG9yKyhjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBf VHJhaXRzLCBfQWxsb2M+JiBfX2xocywgX0NoYXJUIF9fcmhzKQogICAgewogICAgICB0eXBlZGVm IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4gX19zdHJpbmdfdHlwZTsKICAg ICAgdHlwZWRlZiB0eXBlbmFtZSBfX3N0cmluZ190eXBlOjpzaXplX3R5cGUgX19zaXplX3R5cGU7 CiAgICAgIF9fc3RyaW5nX3R5cGUgX19zdHIoX19saHMpOwogICAgICBfX3N0ci5hcHBlbmQoX19z aXplX3R5cGUoMSksIF9fcmhzKTsKICAgICAgcmV0dXJuIF9fc3RyOwogICAgfQoKCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAg ICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I9PShjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBf VHJhaXRzLCBfQWxsb2M+JiBfX2xocywKICAgICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5n PF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAgICB7IHJldHVybiBfX2xocy5jb21w YXJlKF9fcmhzKSA9PSAwOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg X1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPT0o Y29uc3QgX0NoYXJUKiBfX2xocywKICAgICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9D aGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAgICB7IHJldHVybiBfX3Jocy5jb21wYXJl KF9fbGhzKSA9PSAwOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry YWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPT0oY29u c3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsCiAgICAgICAg ICAgICAgIGNvbnN0IF9DaGFyVCogX19yaHMpCiAgICB7IHJldHVybiBfX2xocy5jb21wYXJlKF9f cmhzKSA9PSAwOyB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp dHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvciE9KGNvbnN0 IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhzLAogICAgICAgICAg ICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3JocykK ICAgIHsgcmV0dXJuIF9fcmhzLmNvbXBhcmUoX19saHMpICE9IDA7IH0KCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxp bmUgYm9vbAogICAgb3BlcmF0b3IhPShjb25zdCBfQ2hhclQqIF9fbGhzLAogICAgICAgICAgICAg ICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3JocykKICAg IHsgcmV0dXJuIF9fcmhzLmNvbXBhcmUoX19saHMpICE9IDA7IH0KCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUg Ym9vbAogICAgb3BlcmF0b3IhPShjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBf QWxsb2M+JiBfX2xocywKICAgICAgICAgICAgICAgY29uc3QgX0NoYXJUKiBfX3JocykKICAgIHsg cmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpICE9IDA7IH0KCgogIHRlbXBsYXRlPHR5cGVuYW1l IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJv b2wKICAgIG9wZXJhdG9yPChjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxs b2M+JiBfX2xocywKICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJh aXRzLCBfQWxsb2M+JiBfX3JocykKICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpIDwg MDsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVu YW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcjwoY29uc3QgYmFzaWNfc3Ry aW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsCiAgICAgICAgICAgICAgY29uc3Qg X0NoYXJUKiBfX3JocykKICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpIDwgMDsgfQoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9B bGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcjwoY29uc3QgX0NoYXJUKiBfX2xocywK ICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+ JiBfX3JocykKICAgIHsgcmV0dXJuIF9fcmhzLmNvbXBhcmUoX19saHMpID4gMDsgfQoKCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+ CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I+KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQs IF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhzLAogICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmlu ZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcmhzKQogICAgeyByZXR1cm4gX19saHMuY29t cGFyZShfX3JocykgPiAwOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg X1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPihj b25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywKICAgICAg ICAgICAgICBjb25zdCBfQ2hhclQqIF9fcmhzKQogICAgeyByZXR1cm4gX19saHMuY29tcGFyZShf X3JocykgPiAwOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0 cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPihjb25zdCBf Q2hhclQqIF9fbGhzLAogICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9U cmFpdHMsIF9BbGxvYz4mIF9fcmhzKQogICAgeyByZXR1cm4gX19yaHMuY29tcGFyZShfX2xocykg PCAwOyB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5 cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcjw9KGNvbnN0IGJhc2lj X3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhzLAogICAgICAgICAgICAgICBj b25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3JocykKICAgIHsg cmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpIDw9IDA7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9v bAogICAgb3BlcmF0b3I8PShjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxs b2M+JiBfX2xocywKICAgICAgICAgICAgICAgY29uc3QgX0NoYXJUKiBfX3JocykKICAgIHsgcmV0 dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpIDw9IDA7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No YXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAog ICAgb3BlcmF0b3I8PShjb25zdCBfQ2hhclQqIF9fbGhzLAogICAgICAgICAgICAgICBjb25zdCBi YXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3JocykKICB7IHJldHVybiBf X3Jocy5jb21wYXJlKF9fbGhzKSA+PSAwOyB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs IHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBv cGVyYXRvcj49KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9f bGhzLAogICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBf QWxsb2M+JiBfX3JocykKICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpID49IDA7IH0K CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBf QWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I+PShjb25zdCBiYXNpY19zdHJpbmc8 X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywKICAgICAgICAgICAgICAgY29uc3QgX0No YXJUKiBfX3JocykKICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpID49IDA7IH0KCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxs b2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I+PShjb25zdCBfQ2hhclQqIF9fbGhzLAog ICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYg X19yaHMpCiAgICB7IHJldHVybiBfX3Jocy5jb21wYXJlKF9fbGhzKSA8PSAwOyB9CgoKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4K ICAgIGlubGluZSB2b2lkCiAgICBzd2FwKGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9B bGxvYz4mIF9fbGhzLAogICAgICAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxs b2M+JiBfX3JocykKICAgIHsgX19saHMuc3dhcChfX3Jocyk7IH0KCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19p c3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08X0No YXJULCBfVHJhaXRzPiYgX19pcywKICAgICAgICAgICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwg X1RyYWl0cywgX0FsbG9jPiYgX19zdHIpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5 cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJU LCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+ JiBfX29zLAogICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRz LCBfQWxsb2M+JiBfX3N0cik7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg X1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsX1RyYWl0 cz4mCiAgICBnZXRsaW5lKGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pcywKICAg ICAgICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19zdHIsIF9D aGFyVCBfX2RlbGltKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh aXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYmFzaWNfaXN0cmVhbTxfQ2hhclQsX1Ry YWl0cz4mCiAgICBnZXRsaW5lKGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pcywK ICAgICAgICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19zdHIp Owp9CiMgNTQgIi91c3IvaW5jbHVkZS9jKysvMy4yL3N0cmluZyIgMiAzCgoKIyAxICIvdXNyL2lu Y2x1ZGUvYysrLzMuMi9hbGdvcml0aG0iIDEgMwojIDY1ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9h bGdvcml0aG0iIDMKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5o IiAxIDMKIyA2NCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAzCiMgMSAi L3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfaGVhcC5oIiAxIDMKIyA2MyAiL3Vzci9pbmNs dWRlL2MrKy8zLjIvYml0cy9zdGxfaGVhcC5oIiAzCm5hbWVzcGFjZSBzdGQKewoKCgogIHRlbXBs YXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgdHlwZW5hbWUgX0Rpc3RhbmNlLCB0 eXBlbmFtZSBfVHA+CiAgICB2b2lkCiAgICBfX3B1c2hfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0 b3IgX19maXJzdCwKICAgICAgICAgICAgICAgIF9EaXN0YW5jZSBfX2hvbGVJbmRleCwgX0Rpc3Rh bmNlIF9fdG9wSW5kZXgsIF9UcCBfX3ZhbHVlKQogICAgewogICAgICBfRGlzdGFuY2UgX19wYXJl bnQgPSAoX19ob2xlSW5kZXggLSAxKSAvIDI7CiAgICAgIHdoaWxlIChfX2hvbGVJbmRleCA+IF9f dG9wSW5kZXggJiYgKihfX2ZpcnN0ICsgX19wYXJlbnQpIDwgX192YWx1ZSkgewogICAgICAgICoo X19maXJzdCArIF9faG9sZUluZGV4KSA9ICooX19maXJzdCArIF9fcGFyZW50KTsKICAgICAgICBf X2hvbGVJbmRleCA9IF9fcGFyZW50OwogICAgICAgIF9fcGFyZW50ID0gKF9faG9sZUluZGV4IC0g MSkgLyAyOwogICAgICB9CiAgICAgICooX19maXJzdCArIF9faG9sZUluZGV4KSA9IF9fdmFsdWU7 CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvcj4KICAgIGlu bGluZSB2b2lkCiAgICBwdXNoX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9S YW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUg aXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyYXRvcj46OnZhbHVlX3R5cGUKICAgICAg ICAgIF9WYWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9S YW5kb21BY2Nlc3NJdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQogICAgICAgICAgX0Rpc3RhbmNl VHlwZTsKCgogICAgIAoKICAgICAKCiAgICAgIF9fcHVzaF9oZWFwKF9fZmlyc3QsIF9EaXN0YW5j ZVR5cGUoKF9fbGFzdCAtIF9fZmlyc3QpIC0gMSksIF9EaXN0YW5jZVR5cGUoMCksCiAgICAgICAg ICAgICAgICAgIF9WYWx1ZVR5cGUoKihfX2xhc3QgLSAxKSkpOwogICAgfQoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIHR5cGVuYW1lIF9EaXN0YW5jZSwgdHlwZW5h bWUgX1RwLAogICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIHZvaWQKICAgIF9fcHVz aF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfRGlzdGFuY2UgX19ob2xlSW5k ZXgsCiAgICAgICAgICAgICAgICBfRGlzdGFuY2UgX190b3BJbmRleCwgX1RwIF9fdmFsdWUsIF9D b21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgX0Rpc3RhbmNlIF9fcGFyZW50ID0gKF9faG9sZUlu ZGV4IC0gMSkgLyAyOwogICAgICB3aGlsZSAoX19ob2xlSW5kZXggPiBfX3RvcEluZGV4ICYmIF9f Y29tcCgqKF9fZmlyc3QgKyBfX3BhcmVudCksIF9fdmFsdWUpKSB7CiAgICAgICAgKihfX2ZpcnN0 ICsgX19ob2xlSW5kZXgpID0gKihfX2ZpcnN0ICsgX19wYXJlbnQpOwogICAgICAgIF9faG9sZUlu ZGV4ID0gX19wYXJlbnQ7CiAgICAgICAgX19wYXJlbnQgPSAoX19ob2xlSW5kZXggLSAxKSAvIDI7 CiAgICAgIH0KICAgICAgKihfX2ZpcnN0ICsgX19ob2xlSW5kZXgpID0gX192YWx1ZTsKICAgIH0K CiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29t cGFyZT4KICAgIGlubGluZSB2b2lkCiAgICBwdXNoX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9y IF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgX0Nv bXBhcmUgX19jb21wKQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0 czxfUmFuZG9tQWNjZXNzSXRlcmF0b3I+Ojp2YWx1ZV90eXBlCiAgICAgICAgICBfVmFsdWVUeXBl OwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRl cmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUKICAgICAgICAgIF9EaXN0YW5jZVR5cGU7CgoKICAgICAK CgogICAgICBfX3B1c2hfaGVhcChfX2ZpcnN0LCBfRGlzdGFuY2VUeXBlKChfX2xhc3QgLSBfX2Zp cnN0KSAtIDEpLCBfRGlzdGFuY2VUeXBlKDApLAogICAgICAgICAgICAgICAgICBfVmFsdWVUeXBl KCooX19sYXN0IC0gMSkpLCBfX2NvbXApOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFu ZG9tQWNjZXNzSXRlcmF0b3IsIHR5cGVuYW1lIF9EaXN0YW5jZSwgdHlwZW5hbWUgX1RwPgogICAg dm9pZAogICAgX19hZGp1c3RfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX0Rp c3RhbmNlIF9faG9sZUluZGV4LAogICAgICAgICAgICAgICAgICBfRGlzdGFuY2UgX19sZW4sIF9U cCBfX3ZhbHVlKQogICAgewogICAgICBfRGlzdGFuY2UgX190b3BJbmRleCA9IF9faG9sZUluZGV4 OwogICAgICBfRGlzdGFuY2UgX19zZWNvbmRDaGlsZCA9IDIgKiBfX2hvbGVJbmRleCArIDI7CiAg ICAgIHdoaWxlIChfX3NlY29uZENoaWxkIDwgX19sZW4pIHsKICAgICAgICBpZiAoKihfX2ZpcnN0 ICsgX19zZWNvbmRDaGlsZCkgPCAqKF9fZmlyc3QgKyAoX19zZWNvbmRDaGlsZCAtIDEpKSkKICAg ICAgICAgIF9fc2Vjb25kQ2hpbGQtLTsKICAgICAgICAqKF9fZmlyc3QgKyBfX2hvbGVJbmRleCkg PSAqKF9fZmlyc3QgKyBfX3NlY29uZENoaWxkKTsKICAgICAgICBfX2hvbGVJbmRleCA9IF9fc2Vj b25kQ2hpbGQ7CiAgICAgICAgX19zZWNvbmRDaGlsZCA9IDIgKiAoX19zZWNvbmRDaGlsZCArIDEp OwogICAgICB9CiAgICAgIGlmIChfX3NlY29uZENoaWxkID09IF9fbGVuKSB7CiAgICAgICAgKihf X2ZpcnN0ICsgX19ob2xlSW5kZXgpID0gKihfX2ZpcnN0ICsgKF9fc2Vjb25kQ2hpbGQgLSAxKSk7 CiAgICAgICAgX19ob2xlSW5kZXggPSBfX3NlY29uZENoaWxkIC0gMTsKICAgICAgfQogICAgICBf X3B1c2hfaGVhcChfX2ZpcnN0LCBfX2hvbGVJbmRleCwgX190b3BJbmRleCwgX192YWx1ZSk7CiAg ICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgdHlwZW5hbWUg X1RwPgogICAgaW5saW5lIHZvaWQKICAgIF9fcG9wX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9y IF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgIF9S YW5kb21BY2Nlc3NJdGVyYXRvciBfX3Jlc3VsdCwgX1RwIF9fdmFsdWUpCiAgICB7CiAgICAgIHR5 cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyYXRvcj46OmRp ZmZlcmVuY2VfdHlwZSBfRGlzdGFuY2U7CiAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0OwogICAg ICBfX2FkanVzdF9oZWFwKF9fZmlyc3QsIF9EaXN0YW5jZSgwKSwgX0Rpc3RhbmNlKF9fbGFzdCAt IF9fZmlyc3QpLCBfX3ZhbHVlKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFj Y2Vzc0l0ZXJhdG9yPgogICAgaW5saW5lIHZvaWQKICAgIHBvcF9oZWFwKF9SYW5kb21BY2Nlc3NJ dGVyYXRvciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0KQogICAgewogICAg ICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0b3I+ Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CgoKICAgICAKCiAgICAgCgogICAgICBfX3BvcF9oZWFw KF9fZmlyc3QsIF9fbGFzdCAtIDEsIF9fbGFzdCAtIDEsIF9WYWx1ZVR5cGUoKihfX2xhc3QgLSAx KSkpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIHR5 cGVuYW1lIF9EaXN0YW5jZSwKICAgICAgICAgICB0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9Db21w YXJlPgogICAgdm9pZAogICAgX19hZGp1c3RfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19m aXJzdCwgX0Rpc3RhbmNlIF9faG9sZUluZGV4LAogICAgICAgICAgICAgICAgICBfRGlzdGFuY2Ug X19sZW4sIF9UcCBfX3ZhbHVlLCBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAgIF9EaXN0YW5j ZSBfX3RvcEluZGV4ID0gX19ob2xlSW5kZXg7CiAgICAgIF9EaXN0YW5jZSBfX3NlY29uZENoaWxk ID0gMiAqIF9faG9sZUluZGV4ICsgMjsKICAgICAgd2hpbGUgKF9fc2Vjb25kQ2hpbGQgPCBfX2xl bikgewogICAgICAgIGlmIChfX2NvbXAoKihfX2ZpcnN0ICsgX19zZWNvbmRDaGlsZCksICooX19m aXJzdCArIChfX3NlY29uZENoaWxkIC0gMSkpKSkKICAgICAgICAgIF9fc2Vjb25kQ2hpbGQtLTsK ICAgICAgICAqKF9fZmlyc3QgKyBfX2hvbGVJbmRleCkgPSAqKF9fZmlyc3QgKyBfX3NlY29uZENo aWxkKTsKICAgICAgICBfX2hvbGVJbmRleCA9IF9fc2Vjb25kQ2hpbGQ7CiAgICAgICAgX19zZWNv bmRDaGlsZCA9IDIgKiAoX19zZWNvbmRDaGlsZCArIDEpOwogICAgICB9CiAgICAgIGlmIChfX3Nl Y29uZENoaWxkID09IF9fbGVuKSB7CiAgICAgICAgKihfX2ZpcnN0ICsgX19ob2xlSW5kZXgpID0g KihfX2ZpcnN0ICsgKF9fc2Vjb25kQ2hpbGQgLSAxKSk7CiAgICAgICAgX19ob2xlSW5kZXggPSBf X3NlY29uZENoaWxkIC0gMTsKICAgICAgfQogICAgICBfX3B1c2hfaGVhcChfX2ZpcnN0LCBfX2hv bGVJbmRleCwgX190b3BJbmRleCwgX192YWx1ZSwgX19jb21wKTsKICAgIH0KCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCB0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9D b21wYXJlPgogICAgaW5saW5lIHZvaWQKICAgIF9fcG9wX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJh dG9yIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAg IF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX3Jlc3VsdCwgX1RwIF9fdmFsdWUsIF9Db21wYXJlIF9f Y29tcCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRv bUFjY2Vzc0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlIF9EaXN0YW5jZTsKICAgICAgKl9fcmVz dWx0ID0gKl9fZmlyc3Q7CiAgICAgIF9fYWRqdXN0X2hlYXAoX19maXJzdCwgX0Rpc3RhbmNlKDAp LCBfRGlzdGFuY2UoX19sYXN0IC0gX19maXJzdCksCiAgICAgICAgICAgICAgICAgICAgX192YWx1 ZSwgX19jb21wKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJh dG9yLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIGlubGluZSB2b2lkCiAgICBwb3BfaGVhcChfUmFu ZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwKICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVy YXRvciBfX2xhc3QsIF9Db21wYXJlIF9fY29tcCkKICAgIHsKCiAgICAgCgoKICAgICAgdHlwZWRl ZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6dmFsdWVf dHlwZSBfVmFsdWVUeXBlOwogICAgICBfX3BvcF9oZWFwKF9fZmlyc3QsIF9fbGFzdCAtIDEsIF9f bGFzdCAtIDEsIF9WYWx1ZVR5cGUoKihfX2xhc3QgLSAxKSksIF9fY29tcCk7CiAgICB9CgogIHRl bXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvcj4KICAgIHZvaWQKICAgIG1ha2Vf aGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9y IF9fbGFzdCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1Jh bmRvbUFjY2Vzc0l0ZXJhdG9yPjo6dmFsdWVfdHlwZQogICAgICAgICAgX1ZhbHVlVHlwZTsKICAg ICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9y Pjo6ZGlmZmVyZW5jZV90eXBlCiAgICAgICAgICBfRGlzdGFuY2VUeXBlOwoKCiAgICAgCgogICAg IAoKICAgICAgaWYgKF9fbGFzdCAtIF9fZmlyc3QgPCAyKSByZXR1cm47CiAgICAgIF9EaXN0YW5j ZVR5cGUgX19sZW4gPSBfX2xhc3QgLSBfX2ZpcnN0OwogICAgICBfRGlzdGFuY2VUeXBlIF9fcGFy ZW50ID0gKF9fbGVuIC0gMikvMjsKCiAgICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgX19hZGp1 c3RfaGVhcChfX2ZpcnN0LCBfX3BhcmVudCwgX19sZW4sIF9WYWx1ZVR5cGUoKihfX2ZpcnN0ICsg X19wYXJlbnQpKSk7CiAgICAgICAgaWYgKF9fcGFyZW50ID09IDApIHJldHVybjsKICAgICAgICBf X3BhcmVudC0tOwogICAgICB9CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nl c3NJdGVyYXRvciwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBpbmxpbmUgdm9pZAogICAgbWFrZV9o ZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcmF0b3Ig X19sYXN0LAogICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgdHlwZWRl ZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6dmFsdWVf dHlwZQogICAgICAgICAgX1ZhbHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRv cl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlCiAgICAgICAg ICBfRGlzdGFuY2VUeXBlOwoKCiAgICAgCgoKICAgICAgaWYgKF9fbGFzdCAtIF9fZmlyc3QgPCAy KSByZXR1cm47CiAgICAgIF9EaXN0YW5jZVR5cGUgX19sZW4gPSBfX2xhc3QgLSBfX2ZpcnN0Owog ICAgICBfRGlzdGFuY2VUeXBlIF9fcGFyZW50ID0gKF9fbGVuIC0gMikvMjsKCiAgICAgIHdoaWxl ICh0cnVlKSB7CiAgICAgICAgX19hZGp1c3RfaGVhcChfX2ZpcnN0LCBfX3BhcmVudCwgX19sZW4s CiAgICAgICAgICAgICAgICAgICAgICBfVmFsdWVUeXBlKCooX19maXJzdCArIF9fcGFyZW50KSks IF9fY29tcCk7CiAgICAgICAgaWYgKF9fcGFyZW50ID09IDApIHJldHVybjsKICAgICAgICBfX3Bh cmVudC0tOwogICAgICB9CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJ dGVyYXRvcj4KICAgIHZvaWQKICAgIHNvcnRfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19m aXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCkKICAgIHsKCiAgICAgCgogICAgIAoK CiAgICAgIHdoaWxlIChfX2xhc3QgLSBfX2ZpcnN0ID4gMSkKICAgICAgICBwb3BfaGVhcChfX2Zp cnN0LCBfX2xhc3QtLSk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJ dGVyYXRvciwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICB2b2lkCiAgICBzb3J0X2hlYXAoX1JhbmRv bUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsCiAg ICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQogICAgewoKICAgICAKCgogICAgICB3aGlsZSAo X19sYXN0IC0gX19maXJzdCA+IDEpCiAgICAgICAgcG9wX2hlYXAoX19maXJzdCwgX19sYXN0LS0s IF9fY29tcCk7CiAgICB9Cgp9CiMgNjUgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2Fs Z28uaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfdGVtcGJ1Zi5oIiAx IDMKIyA2NCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfdGVtcGJ1Zi5oIiAzCm5hbWVz cGFjZSBzdGQKewojIDc0ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF90ZW1wYnVmLmgi IDMKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3IsIGNsYXNzIF9UcD4KICBjbGFzcyBf VGVtcG9yYXJ5X2J1ZmZlcgp7CgogCgogIHB0cmRpZmZfdCBfTV9vcmlnaW5hbF9sZW47CiAgcHRy ZGlmZl90IF9NX2xlbjsKICBfVHAqIF9NX2J1ZmZlcjsKCgogIHZvaWQgX01fYWxsb2NhdGVfYnVm ZmVyKCkgewogICAgX01fb3JpZ2luYWxfbGVuID0gX01fbGVuOwogICAgX01fYnVmZmVyID0gMDsK CiAgICBpZiAoX01fbGVuID4gKHB0cmRpZmZfdCkoMjE0NzQ4MzY0NyAvIHNpemVvZihfVHApKSkK ICAgICAgX01fbGVuID0gMjE0NzQ4MzY0NyAvIHNpemVvZihfVHApOwoKICAgIHdoaWxlIChfTV9s ZW4gPiAwKSB7CiAgICAgIF9NX2J1ZmZlciA9IChfVHAqKSBtYWxsb2MoX01fbGVuICogc2l6ZW9m KF9UcCkpOwogICAgICBpZiAoX01fYnVmZmVyKQogICAgICAgIGJyZWFrOwogICAgICBfTV9sZW4g Lz0gMjsKICAgIH0KICB9CgogIHZvaWQgX01faW5pdGlhbGl6ZV9idWZmZXIoY29uc3QgX1RwJiwg X190cnVlX3R5cGUpIHt9CiAgdm9pZCBfTV9pbml0aWFsaXplX2J1ZmZlcihjb25zdCBfVHAmIHZh bCwgX19mYWxzZV90eXBlKSB7CiAgICB1bmluaXRpYWxpemVkX2ZpbGxfbihfTV9idWZmZXIsIF9N X2xlbiwgdmFsKTsKICB9CgpwdWJsaWM6CgogIHB0cmRpZmZfdCBzaXplKCkgY29uc3QgeyByZXR1 cm4gX01fbGVuOyB9CgogIHB0cmRpZmZfdCByZXF1ZXN0ZWRfc2l6ZSgpIGNvbnN0IHsgcmV0dXJu IF9NX29yaWdpbmFsX2xlbjsgfQoKICBfVHAqIGJlZ2luKCkgeyByZXR1cm4gX01fYnVmZmVyOyB9 CgogIF9UcCogZW5kKCkgeyByZXR1cm4gX01fYnVmZmVyICsgX01fbGVuOyB9CgogIF9UZW1wb3Jh cnlfYnVmZmVyKF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xh c3QpIHsKCiAgICB0eXBlZGVmIHR5cGVuYW1lIF9fdHlwZV90cmFpdHM8X1RwPjo6aGFzX3RyaXZp YWxfZGVmYXVsdF9jb25zdHJ1Y3RvcgogICAgICAgICAgICBfVHJpdmlhbDsKCiAgICB0cnkgewog ICAgICBfTV9sZW4gPSBkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QpOwogICAgICBfTV9hbGxvY2F0 ZV9idWZmZXIoKTsKICAgICAgaWYgKF9NX2xlbiA+IDApCiAgICAgICAgX01faW5pdGlhbGl6ZV9i dWZmZXIoKl9fZmlyc3QsIF9Ucml2aWFsKCkpOwogICAgfQogICAgY2F0Y2goLi4uKQogICAgICB7 CiAgICAgICAgZnJlZShfTV9idWZmZXIpOwogICAgICAgIF9NX2J1ZmZlciA9IDA7CiAgICAgICAg X01fbGVuID0gMDsKICAgICAgICB0aHJvdzsKICAgICAgfQogIH0KCiAgfl9UZW1wb3JhcnlfYnVm ZmVyKCkgewogICAgX0Rlc3Ryb3koX01fYnVmZmVyLCBfTV9idWZmZXIgKyBfTV9sZW4pOwogICAg ZnJlZShfTV9idWZmZXIpOwogIH0KCnByaXZhdGU6CgogIF9UZW1wb3JhcnlfYnVmZmVyKGNvbnN0 IF9UZW1wb3JhcnlfYnVmZmVyJikge30KICB2b2lkIG9wZXJhdG9yPShjb25zdCBfVGVtcG9yYXJ5 X2J1ZmZlciYpIHt9Cn07Cgp9CiMgNjYgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2Fs Z28uaCIgMiAzCgoKCm5hbWVzcGFjZSBzdGQKewojIDg0ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9i aXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgaW5saW5lIGNvbnN0 IF9UcCYKICAgIF9fbWVkaWFuKGNvbnN0IF9UcCYgX19hLCBjb25zdCBfVHAmIF9fYiwgY29uc3Qg X1RwJiBfX2MpCiAgICB7CgogICAgIAogICAgICBpZiAoX19hIDwgX19iKQogICAgICAgIGlmIChf X2IgPCBfX2MpCiAgICAgICAgICByZXR1cm4gX19iOwogICAgICAgIGVsc2UgaWYgKF9fYSA8IF9f YykKICAgICAgICAgIHJldHVybiBfX2M7CiAgICAgICAgZWxzZQogICAgICAgICAgcmV0dXJuIF9f YTsKICAgICAgZWxzZSBpZiAoX19hIDwgX19jKQogICAgICAgIHJldHVybiBfX2E7CiAgICAgIGVs c2UgaWYgKF9fYiA8IF9fYykKICAgICAgICByZXR1cm4gX19jOwogICAgICBlbHNlCiAgICAgICAg cmV0dXJuIF9fYjsKICAgIH0KIyAxMTggIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2Fs Z28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBp bmxpbmUgY29uc3QgX1RwJgogICAgX19tZWRpYW4oY29uc3QgX1RwJiBfX2EsIGNvbnN0IF9UcCYg X19iLCBjb25zdCBfVHAmIF9fYywgX0NvbXBhcmUgX19jb21wKQogICAgewoKICAgICAKICAgICAg aWYgKF9fY29tcChfX2EsIF9fYikpCiAgICAgICAgaWYgKF9fY29tcChfX2IsIF9fYykpCiAgICAg ICAgICByZXR1cm4gX19iOwogICAgICAgIGVsc2UgaWYgKF9fY29tcChfX2EsIF9fYykpCiAgICAg ICAgICByZXR1cm4gX19jOwogICAgICAgIGVsc2UKICAgICAgICAgIHJldHVybiBfX2E7CiAgICAg IGVsc2UgaWYgKF9fY29tcChfX2EsIF9fYykpCiAgICAgICAgcmV0dXJuIF9fYTsKICAgICAgZWxz ZSBpZiAoX19jb21wKF9fYiwgX19jKSkKICAgICAgICByZXR1cm4gX19jOwogICAgICBlbHNlCiAg ICAgICAgcmV0dXJuIF9fYjsKICAgIH0KIyAxNTAgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMv c3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9G dW5jdGlvbj4KICAgIF9GdW5jdGlvbgogICAgZm9yX2VhY2goX0lucHV0SXRlciBfX2ZpcnN0LCBf SW5wdXRJdGVyIF9fbGFzdCwgX0Z1bmN0aW9uIF9fZikKICAgIHsKCiAgICAgCiAgICAgIGZvciAo IDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKICAgICAgICBfX2YoKl9fZmlyc3QpOwog ICAgICByZXR1cm4gX19mOwogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0 ZXIsIHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSBfSW5wdXRJdGVyCiAgICBmaW5kKF9JbnB1dEl0 ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgIGNvbnN0IF9UcCYgX192YWws CiAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZykKICAgIHsKICAgICAgd2hpbGUgKF9fZmlyc3Qg IT0gX19sYXN0ICYmICEoKl9fZmlyc3QgPT0gX192YWwpKQogICAgICAgICsrX19maXJzdDsKICAg ICAgcmV0dXJuIF9fZmlyc3Q7CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0 SXRlciwgdHlwZW5hbWUgX1ByZWRpY2F0ZT4KICAgIGlubGluZSBfSW5wdXRJdGVyCiAgICBmaW5k X2lmKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgIF9Q cmVkaWNhdGUgX19wcmVkLAogICAgICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcpCiAgICB7CiAg ICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCAmJiAhX19wcmVkKCpfX2ZpcnN0KSkKICAgICAg ICArK19fZmlyc3Q7CiAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgfQoKCgoKCgogIHRlbXBsYXRl PHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfVHA+CiAgICBfUmFuZG9tQWNj ZXNzSXRlcgogICAgZmluZChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNz SXRlciBfX2xhc3QsCiAgICAgICAgIGNvbnN0IF9UcCYgX192YWwsCiAgICAgICAgIHJhbmRvbV9h Y2Nlc3NfaXRlcmF0b3JfdGFnKQogICAgewogICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8 X1JhbmRvbUFjY2Vzc0l0ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX190cmlwX2NvdW50CiAgICAgICAg PSAoX19sYXN0IC0gX19maXJzdCkgPj4gMjsKCiAgICAgIGZvciAoIDsgX190cmlwX2NvdW50ID4g MCA7IC0tX190cmlwX2NvdW50KSB7CiAgICAgICAgaWYgKCpfX2ZpcnN0ID09IF9fdmFsKSByZXR1 cm4gX19maXJzdDsKICAgICAgICArK19fZmlyc3Q7CgogICAgICAgIGlmICgqX19maXJzdCA9PSBf X3ZhbCkgcmV0dXJuIF9fZmlyc3Q7CiAgICAgICAgKytfX2ZpcnN0OwoKICAgICAgICBpZiAoKl9f Zmlyc3QgPT0gX192YWwpIHJldHVybiBfX2ZpcnN0OwogICAgICAgICsrX19maXJzdDsKCiAgICAg ICAgaWYgKCpfX2ZpcnN0ID09IF9fdmFsKSByZXR1cm4gX19maXJzdDsKICAgICAgICArK19fZmly c3Q7CiAgICAgIH0KCiAgICAgIHN3aXRjaChfX2xhc3QgLSBfX2ZpcnN0KSB7CiAgICAgIGNhc2Ug MzoKICAgICAgICBpZiAoKl9fZmlyc3QgPT0gX192YWwpIHJldHVybiBfX2ZpcnN0OwogICAgICAg ICsrX19maXJzdDsKICAgICAgY2FzZSAyOgogICAgICAgIGlmICgqX19maXJzdCA9PSBfX3ZhbCkg cmV0dXJuIF9fZmlyc3Q7CiAgICAgICAgKytfX2ZpcnN0OwogICAgICBjYXNlIDE6CiAgICAgICAg aWYgKCpfX2ZpcnN0ID09IF9fdmFsKSByZXR1cm4gX19maXJzdDsKICAgICAgICArK19fZmlyc3Q7 CiAgICAgIGNhc2UgMDoKICAgICAgZGVmYXVsdDoKICAgICAgICByZXR1cm4gX19sYXN0OwogICAg ICB9CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5 cGVuYW1lIF9QcmVkaWNhdGU+CiAgICBfUmFuZG9tQWNjZXNzSXRlcgogICAgZmluZF9pZihfUmFu ZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAg ICAgIF9QcmVkaWNhdGUgX19wcmVkLAogICAgICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9y X3RhZykKICAgIHsKICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJ dGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9fdHJpcF9jb3VudAogICAgICAgID0gKF9fbGFzdCAtIF9f Zmlyc3QpID4+IDI7CgogICAgICBmb3IgKCA7IF9fdHJpcF9jb3VudCA+IDAgOyAtLV9fdHJpcF9j b3VudCkgewogICAgICAgIGlmIChfX3ByZWQoKl9fZmlyc3QpKSByZXR1cm4gX19maXJzdDsKICAg ICAgICArK19fZmlyc3Q7CgogICAgICAgIGlmIChfX3ByZWQoKl9fZmlyc3QpKSByZXR1cm4gX19m aXJzdDsKICAgICAgICArK19fZmlyc3Q7CgogICAgICAgIGlmIChfX3ByZWQoKl9fZmlyc3QpKSBy ZXR1cm4gX19maXJzdDsKICAgICAgICArK19fZmlyc3Q7CgogICAgICAgIGlmIChfX3ByZWQoKl9f Zmlyc3QpKSByZXR1cm4gX19maXJzdDsKICAgICAgICArK19fZmlyc3Q7CiAgICAgIH0KCiAgICAg IHN3aXRjaChfX2xhc3QgLSBfX2ZpcnN0KSB7CiAgICAgIGNhc2UgMzoKICAgICAgICBpZiAoX19w cmVkKCpfX2ZpcnN0KSkgcmV0dXJuIF9fZmlyc3Q7CiAgICAgICAgKytfX2ZpcnN0OwogICAgICBj YXNlIDI6CiAgICAgICAgaWYgKF9fcHJlZCgqX19maXJzdCkpIHJldHVybiBfX2ZpcnN0OwogICAg ICAgICsrX19maXJzdDsKICAgICAgY2FzZSAxOgogICAgICAgIGlmIChfX3ByZWQoKl9fZmlyc3Qp KSByZXR1cm4gX19maXJzdDsKICAgICAgICArK19fZmlyc3Q7CiAgICAgIGNhc2UgMDoKICAgICAg ZGVmYXVsdDoKICAgICAgICByZXR1cm4gX19sYXN0OwogICAgICB9CiAgICB9CiMgMjg5ICIvdXNy L2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf SW5wdXRJdGVyLCB0eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUgX0lucHV0SXRlcgogICAgZmluZChf SW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICBjb25zdCBfVHAm IF9fdmFsKQogICAgewoKICAgICAKICAgICAKCiAgICAgIHJldHVybiBmaW5kKF9fZmlyc3QsIF9f bGFzdCwgX192YWwsIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdCkpOwogICAgfQojIDMwOSAi L3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX1ByZWRpY2F0ZT4KICAgIGlubGluZSBfSW5wdXRJdGVy CiAgICBmaW5kX2lmKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAg ICAgICAgIF9QcmVkaWNhdGUgX19wcmVkKQogICAgewoKICAgICAKICAgICAKCiAgICAgIHJldHVy biBmaW5kX2lmKF9fZmlyc3QsIF9fbGFzdCwgX19wcmVkLCBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9f Zmlyc3QpKTsKICAgIH0KIyAzMjkgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28u aCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcj4KICAgIF9Gb3J3YXJkSXRlcgog ICAgYWRqYWNlbnRfZmluZChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFz dCkKICAgIHsKCiAgICAgCiAgICAgCgogICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpCiAgICAg ICAgcmV0dXJuIF9fbGFzdDsKICAgICAgX0ZvcndhcmRJdGVyIF9fbmV4dCA9IF9fZmlyc3Q7CiAg ICAgIHdoaWxlKCsrX19uZXh0ICE9IF9fbGFzdCkgewogICAgICAgIGlmICgqX19maXJzdCA9PSAq X19uZXh0KQogICAgICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICAgICAgX19maXJzdCA9IF9fbmV4 dDsKICAgICAgfQogICAgICByZXR1cm4gX19sYXN0OwogICAgfQojIDM1OCAiL3Vzci9pbmNsdWRl L2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJ dGVyLCB0eXBlbmFtZSBfQmluYXJ5UHJlZGljYXRlPgogICAgX0ZvcndhcmRJdGVyCiAgICBhZGph Y2VudF9maW5kKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAg ICAgICAgICAgICAgICBfQmluYXJ5UHJlZGljYXRlIF9fYmluYXJ5X3ByZWQpCiAgICB7CgogICAg IAogICAgIAoKCiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkKICAgICAgICByZXR1cm4gX19s YXN0OwogICAgICBfRm9yd2FyZEl0ZXIgX19uZXh0ID0gX19maXJzdDsKICAgICAgd2hpbGUoKytf X25leHQgIT0gX19sYXN0KSB7CiAgICAgICAgaWYgKF9fYmluYXJ5X3ByZWQoKl9fZmlyc3QsICpf X25leHQpKQogICAgICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICAgICAgX19maXJzdCA9IF9fbmV4 dDsKICAgICAgfQogICAgICByZXR1cm4gX19sYXN0OwogICAgfQojIDM4NyAiL3Vzci9pbmNsdWRl L2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRl ciwgdHlwZW5hbWUgX1RwPgogICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+ OjpkaWZmZXJlbmNlX3R5cGUKICAgIGNvdW50KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRl ciBfX2xhc3QsIGNvbnN0IF9UcCYgX192YWx1ZSkKICAgIHsKCiAgICAgCiAgICAgCgogICAgIAog ICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcj46OmRpZmZlcmVuY2VfdHlw ZSBfX24gPSAwOwogICAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAg ICAgICAgaWYgKCpfX2ZpcnN0ID09IF9fdmFsdWUpCiAgICAgICAgICArK19fbjsKICAgICAgcmV0 dXJuIF9fbjsKICAgIH0KIyA0MTEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28u aCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9QcmVkaWNhdGU+ CiAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcj46OmRpZmZlcmVuY2VfdHlw ZQogICAgY291bnRfaWYoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwgX1By ZWRpY2F0ZSBfX3ByZWQpCiAgICB7CgogICAgIAogICAgIAoKICAgICAgdHlwZW5hbWUgaXRlcmF0 b3JfdHJhaXRzPF9JbnB1dEl0ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX19uID0gMDsKICAgICAgZm9y ICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgICAgIGlmIChfX3ByZWQoKl9f Zmlyc3QpKQogICAgICAgICAgKytfX247CiAgICAgIHJldHVybiBfX247CiAgICB9CiMgNDUwICIv dXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfRm9yd2FyZEl0ZXIxLCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXIyPgogICAgX0ZvcndhcmRJdGVy MQogICAgc2VhcmNoKF9Gb3J3YXJkSXRlcjEgX19maXJzdDEsIF9Gb3J3YXJkSXRlcjEgX19sYXN0 MSwKICAgICAgICAgICBfRm9yd2FyZEl0ZXIyIF9fZmlyc3QyLCBfRm9yd2FyZEl0ZXIyIF9fbGFz dDIpCiAgICB7CgogICAgIAogICAgIAogICAgIAoKCgoKICAgICAgaWYgKF9fZmlyc3QxID09IF9f bGFzdDEgfHwgX19maXJzdDIgPT0gX19sYXN0MikKICAgICAgICByZXR1cm4gX19maXJzdDE7CgoK ICAgICAgX0ZvcndhcmRJdGVyMiBfX3RtcChfX2ZpcnN0Mik7CiAgICAgICsrX190bXA7CiAgICAg IGlmIChfX3RtcCA9PSBfX2xhc3QyKQogICAgICAgIHJldHVybiBmaW5kKF9fZmlyc3QxLCBfX2xh c3QxLCAqX19maXJzdDIpOwoKCgogICAgICBfRm9yd2FyZEl0ZXIyIF9fcDEsIF9fcDsKCiAgICAg IF9fcDEgPSBfX2ZpcnN0MjsgKytfX3AxOwoKICAgICAgX0ZvcndhcmRJdGVyMSBfX2N1cnJlbnQg PSBfX2ZpcnN0MTsKCiAgICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxKSB7CiAgICAgICAg X19maXJzdDEgPSBmaW5kKF9fZmlyc3QxLCBfX2xhc3QxLCAqX19maXJzdDIpOwogICAgICAgIGlm IChfX2ZpcnN0MSA9PSBfX2xhc3QxKQogICAgICAgICAgcmV0dXJuIF9fbGFzdDE7CgogICAgICAg IF9fcCA9IF9fcDE7CiAgICAgICAgX19jdXJyZW50ID0gX19maXJzdDE7CiAgICAgICAgaWYgKCsr X19jdXJyZW50ID09IF9fbGFzdDEpCiAgICAgICAgICByZXR1cm4gX19sYXN0MTsKCiAgICAgICAg d2hpbGUgKCpfX2N1cnJlbnQgPT0gKl9fcCkgewogICAgICAgICAgaWYgKCsrX19wID09IF9fbGFz dDIpCiAgICAgICAgICAgIHJldHVybiBfX2ZpcnN0MTsKICAgICAgICAgIGlmICgrK19fY3VycmVu dCA9PSBfX2xhc3QxKQogICAgICAgICAgICByZXR1cm4gX19sYXN0MTsKICAgICAgICB9CgogICAg ICAgICsrX19maXJzdDE7CiAgICAgIH0KICAgICAgcmV0dXJuIF9fZmlyc3QxOwogICAgfQojIDUy MiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0ZvcndhcmRJdGVyMSwgdHlwZW5hbWUgX0ZvcndhcmRJdGVyMiwgdHlwZW5hbWUgX0Jp bmFyeVByZWQ+CiAgICBfRm9yd2FyZEl0ZXIxCiAgICBzZWFyY2goX0ZvcndhcmRJdGVyMSBfX2Zp cnN0MSwgX0ZvcndhcmRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgIF9Gb3J3YXJkSXRlcjIgX19m aXJzdDIsIF9Gb3J3YXJkSXRlcjIgX19sYXN0MiwKICAgICAgICAgICBfQmluYXJ5UHJlZCBfX3By ZWRpY2F0ZSkKICAgIHsKCiAgICAgCiAgICAgCiAgICAgCgoKCgogICAgICBpZiAoX19maXJzdDEg PT0gX19sYXN0MSB8fCBfX2ZpcnN0MiA9PSBfX2xhc3QyKQogICAgICAgIHJldHVybiBfX2ZpcnN0 MTsKCgogICAgICBfRm9yd2FyZEl0ZXIyIF9fdG1wKF9fZmlyc3QyKTsKICAgICAgKytfX3RtcDsK ICAgICAgaWYgKF9fdG1wID09IF9fbGFzdDIpIHsKICAgICAgICB3aGlsZSAoX19maXJzdDEgIT0g X19sYXN0MSAmJiAhX19wcmVkaWNhdGUoKl9fZmlyc3QxLCAqX19maXJzdDIpKQogICAgICAgICAg KytfX2ZpcnN0MTsKICAgICAgICByZXR1cm4gX19maXJzdDE7CiAgICAgIH0KCgoKICAgICAgX0Zv cndhcmRJdGVyMiBfX3AxLCBfX3A7CgogICAgICBfX3AxID0gX19maXJzdDI7ICsrX19wMTsKCiAg ICAgIF9Gb3J3YXJkSXRlcjEgX19jdXJyZW50ID0gX19maXJzdDE7CgogICAgICB3aGlsZSAoX19m aXJzdDEgIT0gX19sYXN0MSkgewogICAgICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxKSB7 CiAgICAgICAgICBpZiAoX19wcmVkaWNhdGUoKl9fZmlyc3QxLCAqX19maXJzdDIpKQogICAgICAg ICAgICBicmVhazsKICAgICAgICAgICsrX19maXJzdDE7CiAgICAgICAgfQogICAgICAgIHdoaWxl IChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmICFfX3ByZWRpY2F0ZSgqX19maXJzdDEsICpfX2ZpcnN0 MikpCiAgICAgICAgICArK19fZmlyc3QxOwogICAgICAgIGlmIChfX2ZpcnN0MSA9PSBfX2xhc3Qx KQogICAgICAgICAgcmV0dXJuIF9fbGFzdDE7CgogICAgICAgIF9fcCA9IF9fcDE7CiAgICAgICAg X19jdXJyZW50ID0gX19maXJzdDE7CiAgICAgICAgaWYgKCsrX19jdXJyZW50ID09IF9fbGFzdDEp IHJldHVybiBfX2xhc3QxOwoKICAgICAgICB3aGlsZSAoX19wcmVkaWNhdGUoKl9fY3VycmVudCwg Kl9fcCkpIHsKICAgICAgICAgIGlmICgrK19fcCA9PSBfX2xhc3QyKQogICAgICAgICAgICByZXR1 cm4gX19maXJzdDE7CiAgICAgICAgICBpZiAoKytfX2N1cnJlbnQgPT0gX19sYXN0MSkKICAgICAg ICAgICAgcmV0dXJuIF9fbGFzdDE7CiAgICAgICAgfQoKICAgICAgICArK19fZmlyc3QxOwogICAg ICB9CiAgICAgIHJldHVybiBfX2ZpcnN0MTsKICAgIH0KIyA1OTYgIi91c3IvaW5jbHVkZS9jKysv My4yL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwg dHlwZW5hbWUgX0ludGVnZXIsIHR5cGVuYW1lIF9UcD4KICAgIF9Gb3J3YXJkSXRlcgogICAgc2Vh cmNoX24oX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAg ICAgICBfSW50ZWdlciBfX2NvdW50LCBjb25zdCBfVHAmIF9fdmFsKQogICAgewoKICAgICAKICAg ICAKCiAgICAgCgogICAgICBpZiAoX19jb3VudCA8PSAwKQogICAgICAgIHJldHVybiBfX2ZpcnN0 OwogICAgICBlbHNlIHsKICAgICAgICBfX2ZpcnN0ID0gZmluZChfX2ZpcnN0LCBfX2xhc3QsIF9f dmFsKTsKICAgICAgICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAgICAgICAgIF9JbnRl Z2VyIF9fbiA9IF9fY291bnQgLSAxOwogICAgICAgICAgX0ZvcndhcmRJdGVyIF9faSA9IF9fZmly c3Q7CiAgICAgICAgICArK19faTsKICAgICAgICAgIHdoaWxlIChfX2kgIT0gX19sYXN0ICYmIF9f biAhPSAwICYmICpfX2kgPT0gX192YWwpIHsKICAgICAgICAgICAgKytfX2k7CiAgICAgICAgICAg IC0tX19uOwogICAgICAgICAgfQogICAgICAgICAgaWYgKF9fbiA9PSAwKQogICAgICAgICAgICBy ZXR1cm4gX19maXJzdDsKICAgICAgICAgIGVsc2UKICAgICAgICAgICAgX19maXJzdCA9IGZpbmQo X19pLCBfX2xhc3QsIF9fdmFsKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIF9fbGFzdDsKICAg ICAgfQogICAgfQojIDY0MyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAz CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfSW50ZWdlciwgdHlw ZW5hbWUgX1RwLAogICAgICAgICAgIHR5cGVuYW1lIF9CaW5hcnlQcmVkPgogICAgX0ZvcndhcmRJ dGVyCiAgICBzZWFyY2hfbihfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFz dCwKICAgICAgICAgICAgIF9JbnRlZ2VyIF9fY291bnQsIGNvbnN0IF9UcCYgX192YWwsCiAgICAg ICAgICAgICBfQmluYXJ5UHJlZCBfX2JpbmFyeV9wcmVkKQogICAgewoKICAgICAKICAgICAKCgog ICAgICBpZiAoX19jb3VudCA8PSAwKQogICAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgICBlbHNl IHsKICAgICAgICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAgICAgICAgIGlmIChfX2Jp bmFyeV9wcmVkKCpfX2ZpcnN0LCBfX3ZhbCkpCiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg KytfX2ZpcnN0OwogICAgICAgIH0KICAgICAgICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpIHsK ICAgICAgICAgIF9JbnRlZ2VyIF9fbiA9IF9fY291bnQgLSAxOwogICAgICAgICAgX0ZvcndhcmRJ dGVyIF9faSA9IF9fZmlyc3Q7CiAgICAgICAgICArK19faTsKICAgICAgICAgIHdoaWxlIChfX2kg IT0gX19sYXN0ICYmIF9fbiAhPSAwICYmIF9fYmluYXJ5X3ByZWQoKl9faSwgX192YWwpKSB7CiAg ICAgICAgICAgICsrX19pOwogICAgICAgICAgICAtLV9fbjsKICAgICAgICAgIH0KICAgICAgICAg IGlmIChfX24gPT0gMCkKICAgICAgICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICAgICAgICBlbHNl IHsKICAgICAgICAgICAgd2hpbGUgKF9faSAhPSBfX2xhc3QpIHsKICAgICAgICAgICAgICBpZiAo X19iaW5hcnlfcHJlZCgqX19pLCBfX3ZhbCkpCiAgICAgICAgICAgICAgICBicmVhazsKICAgICAg ICAgICAgICArK19faTsKICAgICAgICAgICAgfQogICAgICAgICAgICBfX2ZpcnN0ID0gX19pOwog ICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gX19sYXN0OwogICAgICB9CiAgICB9 CiMgNjk3ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIxLCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXIyPgogICAgX0Zv cndhcmRJdGVyMgogICAgc3dhcF9yYW5nZXMoX0ZvcndhcmRJdGVyMSBfX2ZpcnN0MSwgX0Zvcndh cmRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyMiBfX2ZpcnN0MikK ICAgIHsKCiAgICAgCiAgICAgCiAgICAgCgoKICAgICAKCgoKICAgICAgZm9yICggOyBfX2ZpcnN0 MSAhPSBfX2xhc3QxOyArK19fZmlyc3QxLCArK19fZmlyc3QyKQogICAgICAgIGl0ZXJfc3dhcChf X2ZpcnN0MSwgX19maXJzdDIpOwogICAgICByZXR1cm4gX19maXJzdDI7CiAgICB9CiMgNzMyICIv dXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlciwgdHlwZW5hbWUgX1VuYXJ5T3BlcmF0 aW9uPgogICAgX091dHB1dEl0ZXIKICAgIHRyYW5zZm9ybShfSW5wdXRJdGVyIF9fZmlyc3QsIF9J bnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBfVW5h cnlPcGVyYXRpb24gX191bmFyeV9vcCkKICAgIHsKCiAgICAgCiAgICAgCgoKCiAgICAgIGZvciAo IDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCwgKytfX3Jlc3VsdCkKICAgICAgICAqX19y ZXN1bHQgPSBfX3VuYXJ5X29wKCpfX2ZpcnN0KTsKICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAg fQojIDc2NSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0lucHV0SXRlcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXIyLCB0eXBlbmFtZSBf T3V0cHV0SXRlciwKICAgICAgICAgICB0eXBlbmFtZSBfQmluYXJ5T3BlcmF0aW9uPgogICAgX091 dHB1dEl0ZXIKICAgIHRyYW5zZm9ybShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEg X19sYXN0MSwKICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX091dHB1dEl0ZXIg X19yZXN1bHQsCiAgICAgICAgICAgICAgX0JpbmFyeU9wZXJhdGlvbiBfX2JpbmFyeV9vcCkKICAg IHsKCiAgICAgCiAgICAgCiAgICAgCgoKCiAgICAgIGZvciAoIDsgX19maXJzdDEgIT0gX19sYXN0 MTsgKytfX2ZpcnN0MSwgKytfX2ZpcnN0MiwgKytfX3Jlc3VsdCkKICAgICAgICAqX19yZXN1bHQg PSBfX2JpbmFyeV9vcCgqX19maXJzdDEsICpfX2ZpcnN0Mik7CiAgICAgIHJldHVybiBfX3Jlc3Vs dDsKICAgIH0KIyA3OTYgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMwog IHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1RwPgogICAgdm9pZAog ICAgcmVwbGFjZShfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAg ICAgICAgICAgY29uc3QgX1RwJiBfX29sZF92YWx1ZSwgY29uc3QgX1RwJiBfX25ld192YWx1ZSkK ICAgIHsKCiAgICAgCiAgICAgCgogICAgIAoKCiAgICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xh c3Q7ICsrX19maXJzdCkKICAgICAgICBpZiAoKl9fZmlyc3QgPT0gX19vbGRfdmFsdWUpCiAgICAg ICAgICAqX19maXJzdCA9IF9fbmV3X3ZhbHVlOwogICAgfQojIDgyNSAiL3Vzci9pbmNsdWRlL2Mr Ky8zLjIvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVy LCB0eXBlbmFtZSBfUHJlZGljYXRlLCB0eXBlbmFtZSBfVHA+CiAgICB2b2lkCiAgICByZXBsYWNl X2lmKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAg ICAgICBfUHJlZGljYXRlIF9fcHJlZCwgY29uc3QgX1RwJiBfX25ld192YWx1ZSkKICAgIHsKCiAg ICAgCiAgICAgCgogICAgIAoKCiAgICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19m aXJzdCkKICAgICAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkKICAgICAgICAgICpfX2ZpcnN0ID0g X19uZXdfdmFsdWU7CiAgICB9CiMgODU2ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9h bGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0 SXRlciwgdHlwZW5hbWUgX1RwPgogICAgX091dHB1dEl0ZXIKICAgIHJlcGxhY2VfY29weShfSW5w dXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgIF9PdXRw dXRJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX19vbGRfdmFsdWUs IGNvbnN0IF9UcCYgX19uZXdfdmFsdWUpCiAgICB7CgogICAgIAogICAgIAoKICAgICAKCgogICAg ICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QsICsrX19yZXN1bHQpCiAgICAg ICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QgPT0gX19vbGRfdmFsdWUgPyBfX25ld192YWx1ZSA6ICpf X2ZpcnN0OwogICAgICByZXR1cm4gX19yZXN1bHQ7CiAgICB9CiMgODg4ICIvdXNyL2luY2x1ZGUv YysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVy LCB0eXBlbmFtZSBfT3V0cHV0SXRlciwgdHlwZW5hbWUgX1ByZWRpY2F0ZSwKICAgICAgICAgICB0 eXBlbmFtZSBfVHA+CiAgICBfT3V0cHV0SXRlcgogICAgcmVwbGFjZV9jb3B5X2lmKF9JbnB1dEl0 ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgX091dHB1 dEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQsIGNv bnN0IF9UcCYgX19uZXdfdmFsdWUpCiAgICB7CgogICAgIAogICAgIAoKICAgICAKCgogICAgICBm b3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QsICsrX19yZXN1bHQpCiAgICAgICAg Kl9fcmVzdWx0ID0gX19wcmVkKCpfX2ZpcnN0KSA/IF9fbmV3X3ZhbHVlIDogKl9fZmlyc3Q7CiAg ICAgIHJldHVybiBfX3Jlc3VsdDsKICAgIH0KIyA5MTggIi91c3IvaW5jbHVkZS9jKysvMy4yL2Jp dHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5h bWUgX0dlbmVyYXRvcj4KICAgIHZvaWQKICAgIGdlbmVyYXRlKF9Gb3J3YXJkSXRlciBfX2ZpcnN0 LCBfRm9yd2FyZEl0ZXIgX19sYXN0LCBfR2VuZXJhdG9yIF9fZ2VuKQogICAgewoKICAgICAKICAg ICAKCgogICAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAgICAgICAg Kl9fZmlyc3QgPSBfX2dlbigpOwogICAgfQojIDk0MiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0 cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX091dHB1dEl0ZXIsIHR5cGVuYW1l IF9TaXplLCB0eXBlbmFtZSBfR2VuZXJhdG9yPgogICAgX091dHB1dEl0ZXIKICAgIGdlbmVyYXRl X24oX091dHB1dEl0ZXIgX19maXJzdCwgX1NpemUgX19uLCBfR2VuZXJhdG9yIF9fZ2VuKQogICAg ewoKICAgICAKCgoKICAgICAgZm9yICggOyBfX24gPiAwOyAtLV9fbiwgKytfX2ZpcnN0KQogICAg ICAgICpfX2ZpcnN0ID0gX19nZW4oKTsKICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICB9CiMgOTY5 ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlciwgdHlwZW5hbWUgX1RwPgogICAg X091dHB1dEl0ZXIKICAgIHJlbW92ZV9jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRl ciBfX2xhc3QsCiAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgY29uc3QgX1Rw JiBfX3ZhbHVlKQogICAgewoKICAgICAKICAgICAKCiAgICAgCgoKICAgICAgZm9yICggOyBfX2Zp cnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgICAgIGlmICghKCpfX2ZpcnN0ID09IF9fdmFs dWUpKSB7CiAgICAgICAgICAqX19yZXN1bHQgPSAqX19maXJzdDsKICAgICAgICAgICsrX19yZXN1 bHQ7CiAgICAgICAgfQogICAgICByZXR1cm4gX19yZXN1bHQ7CiAgICB9CiMgMTAwMyAiL3Vzci9p bmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lu cHV0SXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXIsIHR5cGVuYW1lIF9QcmVkaWNhdGU+CiAgICBf T3V0cHV0SXRlcgogICAgcmVtb3ZlX2NvcHlfaWYoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJ dGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBfUHJl ZGljYXRlIF9fcHJlZCkKICAgIHsKCiAgICAgCiAgICAgCgogICAgIAoKCiAgICAgIGZvciAoIDsg X19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKICAgICAgICBpZiAoIV9fcHJlZCgqX19maXJz dCkpIHsKICAgICAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0OwogICAgICAgICAgKytfX3Jlc3Vs dDsKICAgICAgICB9CiAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgIH0KIyAxMDM5ICIvdXNyL2lu Y2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9y d2FyZEl0ZXIsIHR5cGVuYW1lIF9UcD4KICAgIF9Gb3J3YXJkSXRlcgogICAgcmVtb3ZlKF9Gb3J3 YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgIGNvbnN0IF9U cCYgX192YWx1ZSkKICAgIHsKCiAgICAgCiAgICAgCgogICAgIAoKCiAgICAgIF9fZmlyc3QgPSBm aW5kKF9fZmlyc3QsIF9fbGFzdCwgX192YWx1ZSk7CiAgICAgIF9Gb3J3YXJkSXRlciBfX2kgPSBf X2ZpcnN0OwogICAgICByZXR1cm4gX19maXJzdCA9PSBfX2xhc3QgPyBfX2ZpcnN0CiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICA6IHJlbW92ZV9jb3B5KCsrX19pLCBfX2xhc3QsIF9fZmly c3QsIF9fdmFsdWUpOwogICAgfQojIDEwNzMgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3Rs X2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1By ZWRpY2F0ZT4KICAgIF9Gb3J3YXJkSXRlcgogICAgcmVtb3ZlX2lmKF9Gb3J3YXJkSXRlciBfX2Zp cnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVk KQogICAgewoKICAgICAKICAgICAKCgogICAgICBfX2ZpcnN0ID0gZmluZF9pZihfX2ZpcnN0LCBf X2xhc3QsIF9fcHJlZCk7CiAgICAgIF9Gb3J3YXJkSXRlciBfX2kgPSBfX2ZpcnN0OwogICAgICBy ZXR1cm4gX19maXJzdCA9PSBfX2xhc3QgPyBfX2ZpcnN0CiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICA6IHJlbW92ZV9jb3B5X2lmKCsrX19pLCBfX2xhc3QsIF9fZmlyc3QsIF9fcHJlZCk7 CiAgICB9CgoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9P dXRwdXRJdGVyPgogICAgX091dHB1dEl0ZXIKICAgIF9fdW5pcXVlX2NvcHkoX0lucHV0SXRlciBf X2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIg X19yZXN1bHQsCiAgICAgICAgICAgICAgICAgIG91dHB1dF9pdGVyYXRvcl90YWcpCiAgICB7Cgog ICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcj46OnZhbHVlX3R5cGUgX192 YWx1ZSA9ICpfX2ZpcnN0OwogICAgICAqX19yZXN1bHQgPSBfX3ZhbHVlOwogICAgICB3aGlsZSAo KytfX2ZpcnN0ICE9IF9fbGFzdCkKICAgICAgICBpZiAoIShfX3ZhbHVlID09ICpfX2ZpcnN0KSkg ewogICAgICAgICAgX192YWx1ZSA9ICpfX2ZpcnN0OwogICAgICAgICAgKisrX19yZXN1bHQgPSBf X3ZhbHVlOwogICAgICAgIH0KICAgICAgcmV0dXJuICsrX19yZXN1bHQ7CiAgICB9CgoKCgoKCgog IHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9Gb3J3YXJkSXRlcj4KICAg IF9Gb3J3YXJkSXRlcgogICAgX191bmlxdWVfY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1 dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQsCiAg ICAgICAgICAgICAgICAgIGZvcndhcmRfaXRlcmF0b3JfdGFnKQogICAgewoKICAgICAgKl9fcmVz dWx0ID0gKl9fZmlyc3Q7CiAgICAgIHdoaWxlICgrK19fZmlyc3QgIT0gX19sYXN0KQogICAgICAg IGlmICghKCpfX3Jlc3VsdCA9PSAqX19maXJzdCkpCiAgICAgICAgICAqKytfX3Jlc3VsdCA9ICpf X2ZpcnN0OwogICAgICByZXR1cm4gKytfX3Jlc3VsdDsKICAgIH0KIyAxMTQ1ICIvdXNyL2luY2x1 ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJ dGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4KICAgIGlubGluZSBfT3V0cHV0SXRlcgogICAgdW5p cXVlX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAg ICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0KQogICAgewoKICAgICAKICAgICAKCiAgICAgCgoK ICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X091dHB1dEl0ZXI+OjppdGVy YXRvcl9jYXRlZ29yeSBfSXRlclR5cGU7CgogICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpIHJl dHVybiBfX3Jlc3VsdDsKICAgICAgcmV0dXJuIF9fdW5pcXVlX2NvcHkoX19maXJzdCwgX19sYXN0 LCBfX3Jlc3VsdCwgX0l0ZXJUeXBlKCkpOwogICAgfQojIDExNzAgIi91c3IvaW5jbHVkZS9jKysv My4yL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5 cGVuYW1lIF9PdXRwdXRJdGVyLCB0eXBlbmFtZSBfQmluYXJ5UHJlZGljYXRlPgogICAgX091dHB1 dEl0ZXIKICAgIF9fdW5pcXVlX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9f bGFzdCwKICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAg ICAgICAgIF9CaW5hcnlQcmVkaWNhdGUgX19iaW5hcnlfcHJlZCwKICAgICAgICAgICAgICAgICAg b3V0cHV0X2l0ZXJhdG9yX3RhZykKICAgIHsKCiAgICAgCgoKCiAgICAgIHR5cGVuYW1lIGl0ZXJh dG9yX3RyYWl0czxfSW5wdXRJdGVyPjo6dmFsdWVfdHlwZSBfX3ZhbHVlID0gKl9fZmlyc3Q7CiAg ICAgICpfX3Jlc3VsdCA9IF9fdmFsdWU7CiAgICAgIHdoaWxlICgrK19fZmlyc3QgIT0gX19sYXN0 KQogICAgICAgIGlmICghX19iaW5hcnlfcHJlZChfX3ZhbHVlLCAqX19maXJzdCkpIHsKICAgICAg ICAgIF9fdmFsdWUgPSAqX19maXJzdDsKICAgICAgICAgICorK19fcmVzdWx0ID0gX192YWx1ZTsK ICAgICAgICB9CiAgICAgIHJldHVybiArK19fcmVzdWx0OwogICAgfQojIDExOTkgIi91c3IvaW5j bHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1 dEl0ZXIsIHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX0JpbmFyeVByZWRpY2F0ZT4K ICAgIF9Gb3J3YXJkSXRlcgogICAgX191bmlxdWVfY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9J bnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQs CiAgICAgICAgICAgICAgICAgIF9CaW5hcnlQcmVkaWNhdGUgX19iaW5hcnlfcHJlZCwKICAgICAg ICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRvcl90YWcpCiAgICB7CgogICAgIAoKCgogICAgICAq X19yZXN1bHQgPSAqX19maXJzdDsKICAgICAgd2hpbGUgKCsrX19maXJzdCAhPSBfX2xhc3QpCiAg ICAgICAgaWYgKCFfX2JpbmFyeV9wcmVkKCpfX3Jlc3VsdCwgKl9fZmlyc3QpKSAqKytfX3Jlc3Vs dCA9ICpfX2ZpcnN0OwogICAgICByZXR1cm4gKytfX3Jlc3VsdDsKICAgIH0KIyAxMjMyICIvdXNy L2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf SW5wdXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlciwgdHlwZW5hbWUgX0JpbmFyeVByZWRpY2F0 ZT4KICAgIGlubGluZSBfT3V0cHV0SXRlcgogICAgdW5pcXVlX2NvcHkoX0lucHV0SXRlciBfX2Zp cnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVz dWx0LAogICAgICAgICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2JpbmFyeV9wcmVkKQogICAg ewoKICAgICAKICAgICAKCgogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxf T3V0cHV0SXRlcj46Oml0ZXJhdG9yX2NhdGVnb3J5IF9JdGVyVHlwZTsKCiAgICAgIGlmIChfX2Zp cnN0ID09IF9fbGFzdCkgcmV0dXJuIF9fcmVzdWx0OwogICAgICByZXR1cm4gX191bmlxdWVfY29w eShfX2ZpcnN0LCBfX2xhc3QsCl9fcmVzdWx0LCBfX2JpbmFyeV9wcmVkLCBfSXRlclR5cGUoKSk7 CiAgICB9CiMgMTI2MyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAzCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyPgogICAgX0ZvcndhcmRJdGVyCiAgICB1bmlx dWUoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QpCiAgICB7CgogICAg ICAgICAKICAgICAgICAgCgoKICAgICAgICAgIF9fZmlyc3QgPSBhZGphY2VudF9maW5kKF9fZmly c3QsIF9fbGFzdCk7CiAgICAgICAgICByZXR1cm4gdW5pcXVlX2NvcHkoX19maXJzdCwgX19sYXN0 LCBfX2ZpcnN0KTsKICAgIH0KIyAxMjkwICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9h bGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9CaW5h cnlQcmVkaWNhdGU+CiAgICBfRm9yd2FyZEl0ZXIKICAgIHVuaXF1ZShfRm9yd2FyZEl0ZXIgX19m aXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICBfQmluYXJ5UHJlZGljYXRlIF9f YmluYXJ5X3ByZWQpCiAgICB7CgogICAgIAogICAgIAoKCgogICAgICBfX2ZpcnN0ID0gYWRqYWNl bnRfZmluZChfX2ZpcnN0LCBfX2xhc3QsIF9fYmluYXJ5X3ByZWQpOwogICAgICByZXR1cm4gdW5p cXVlX2NvcHkoX19maXJzdCwgX19sYXN0LCBfX2ZpcnN0LCBfX2JpbmFyeV9wcmVkKTsKICAgIH0K CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyPgogICAgdm9pZAog ICAgX19yZXZlcnNlKF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LCBfQmlkaXJlY3Rpb25hbEl0 ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgIGJpZGlyZWN0aW9uYWxfaXRlcmF0 b3JfdGFnKQogICAgewogICAgICAgICAgd2hpbGUgKHRydWUpCiAgICAgICAgICAgIGlmIChfX2Zp cnN0ID09IF9fbGFzdCB8fCBfX2ZpcnN0ID09IC0tX19sYXN0KQogICAgICAgICAgICAgICAgICBy ZXR1cm47CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgaXRlcl9zd2FwKF9fZmly c3QrKywgX19sYXN0KTsKICAgIH0KCgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFj Y2Vzc0l0ZXI+CiAgICB2b2lkCiAgICBfX3JldmVyc2UoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJz dCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgIHJh bmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKQogICAgewogICAgICAgICAgd2hpbGUgKF9fZmlyc3Qg PCBfX2xhc3QpCiAgICAgICAgICAgIGl0ZXJfc3dhcChfX2ZpcnN0KyssIC0tX19sYXN0KTsKICAg IH0KIyAxMzQ5ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXI+CiAgICBpbmxpbmUgdm9pZAogICAgcmV2 ZXJzZShfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFz dCkKICAgIHsKCiAgICAgICAgIAoKICAgICAgICAgIF9fcmV2ZXJzZShfX2ZpcnN0LCBfX2xhc3Qs IF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdCkpOwogICAgfQojIDEzNzQgIi91c3IvaW5jbHVk ZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVj dGlvbmFsSXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXI+CiAgICBfT3V0cHV0SXRlcgogICAgcmV2 ZXJzZV9jb3B5KF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LCBfQmlkaXJlY3Rpb25hbEl0ZXIg X19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0 KQogICAgewoKICAgICAKICAgICAKCgogICAgICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpIHsK ICAgICAgICAtLV9fbGFzdDsKICAgICAgICAqX19yZXN1bHQgPSAqX19sYXN0OwogICAgICAgICsr X19yZXN1bHQ7CiAgICAgIH0KICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAgfQojIDEzOTkgIi91 c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1l IF9FdWNsaWRlYW5SaW5nRWxlbWVudD4KICAgIF9FdWNsaWRlYW5SaW5nRWxlbWVudAogICAgX19n Y2QoX0V1Y2xpZGVhblJpbmdFbGVtZW50IF9fbSwgX0V1Y2xpZGVhblJpbmdFbGVtZW50IF9fbikK ICAgIHsKICAgICAgd2hpbGUgKF9fbiAhPSAwKSB7CiAgICAgICAgX0V1Y2xpZGVhblJpbmdFbGVt ZW50IF9fdCA9IF9fbSAlIF9fbjsKICAgICAgICBfX20gPSBfX247CiAgICAgICAgX19uID0gX190 OwogICAgICB9CiAgICAgIHJldHVybiBfX207CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0ZvcndhcmRJdGVyPgogICAgdm9pZAogICAgX19yb3RhdGUoX0ZvcndhcmRJdGVyIF9fZmly c3QsCiAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19taWRkbGUsCiAgICAgICAgICAgICBfRm9y d2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgIGZvcndhcmRfaXRlcmF0b3JfdGFnKQogICAg ewogICAgICBpZiAoKF9fZmlyc3QgPT0gX19taWRkbGUpIHx8IChfX2xhc3QgPT0gX19taWRkbGUp KQogICAgICAgIHJldHVybjsKCiAgICAgIF9Gb3J3YXJkSXRlciBfX2ZpcnN0MiA9IF9fbWlkZGxl OwogICAgICBkbyB7CiAgICAgICAgc3dhcCgqX19maXJzdCsrLCAqX19maXJzdDIrKyk7CiAgICAg ICAgaWYgKF9fZmlyc3QgPT0gX19taWRkbGUpCiAgICAgICAgICBfX21pZGRsZSA9IF9fZmlyc3Qy OwogICAgICB9IHdoaWxlIChfX2ZpcnN0MiAhPSBfX2xhc3QpOwoKICAgICAgX19maXJzdDIgPSBf X21pZGRsZTsKCiAgICAgIHdoaWxlIChfX2ZpcnN0MiAhPSBfX2xhc3QpIHsKICAgICAgICBzd2Fw KCpfX2ZpcnN0KyssICpfX2ZpcnN0MisrKTsKICAgICAgICBpZiAoX19maXJzdCA9PSBfX21pZGRs ZSkKICAgICAgICAgIF9fbWlkZGxlID0gX19maXJzdDI7CiAgICAgICAgZWxzZSBpZiAoX19maXJz dDIgPT0gX19sYXN0KQogICAgICAgICAgX19maXJzdDIgPSBfX21pZGRsZTsKICAgICAgfQogICAg fQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcj4KICAgIHZvaWQK ICAgIF9fcm90YXRlKF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgX0Jp ZGlyZWN0aW9uYWxJdGVyIF9fbWlkZGxlLAogICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVy IF9fbGFzdCwKICAgICAgICAgICAgICBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZykKICAgIHsK CiAgICAgCgoKICAgICAgaWYgKChfX2ZpcnN0ID09IF9fbWlkZGxlKSB8fCAoX19sYXN0ID09IF9f bWlkZGxlKSkKICAgICAgICByZXR1cm47CgogICAgICBfX3JldmVyc2UoX19maXJzdCwgX19taWRk bGUsIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnKCkpOwogICAgICBfX3JldmVyc2UoX19taWRk bGUsIF9fbGFzdCwgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcoKSk7CgogICAgICB3aGlsZSAo X19maXJzdCAhPSBfX21pZGRsZSAmJiBfX21pZGRsZSAhPSBfX2xhc3QpCiAgICAgICAgc3dhcCAo Kl9fZmlyc3QrKywgKi0tX19sYXN0KTsKCiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbWlkZGxlKSB7 CiAgICAgICAgX19yZXZlcnNlKF9fbWlkZGxlLCBfX2xhc3QsIGJpZGlyZWN0aW9uYWxfaXRlcmF0 b3JfdGFnKCkpOwogICAgICB9CiAgICAgIGVsc2UgewogICAgICAgIF9fcmV2ZXJzZShfX2ZpcnN0 LCBfX21pZGRsZSwgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcoKSk7CiAgICAgIH0KICAgIH0K CgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcj4KICAgIHZvaWQKICAg IF9fcm90YXRlKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICBfUmFuZG9t QWNjZXNzSXRlciBfX21pZGRsZSwKICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFz dCwKICAgICAgICAgICAgIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKQogICAgewoKICAgICAK CgogICAgICBpZiAoKF9fZmlyc3QgPT0gX19taWRkbGUpIHx8IChfX2xhc3QgPT0gX19taWRkbGUp KQogICAgICAgIHJldHVybjsKCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRz PF9SYW5kb21BY2Nlc3NJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9EaXN0YW5jZTsKICAgICAgdHlw ZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90 eXBlIF9WYWx1ZVR5cGU7CgogICAgICBfRGlzdGFuY2UgX19uID0gX19sYXN0IC0gX19maXJzdDsK ICAgICAgX0Rpc3RhbmNlIF9fayA9IF9fbWlkZGxlIC0gX19maXJzdDsKICAgICAgX0Rpc3RhbmNl IF9fbCA9IF9fbiAtIF9fazsKCiAgICAgIGlmIChfX2sgPT0gX19sKSB7CiAgICAgICAgc3dhcF9y YW5nZXMoX19maXJzdCwgX19taWRkbGUsIF9fbWlkZGxlKTsKICAgICAgICByZXR1cm47CiAgICAg IH0KCiAgICAgIF9EaXN0YW5jZSBfX2QgPSBfX2djZChfX24sIF9fayk7CgogICAgICBmb3IgKF9E aXN0YW5jZSBfX2kgPSAwOyBfX2kgPCBfX2Q7IF9faSsrKSB7CiAgICAgICAgX1ZhbHVlVHlwZSBf X3RtcCA9ICpfX2ZpcnN0OwogICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fcCA9IF9fZmlyc3Q7 CgogICAgICAgIGlmIChfX2sgPCBfX2wpIHsKICAgICAgICAgIGZvciAoX0Rpc3RhbmNlIF9faiA9 IDA7IF9faiA8IF9fbC9fX2Q7IF9faisrKSB7CiAgICAgICAgICAgIGlmIChfX3AgPiBfX2ZpcnN0 ICsgX19sKSB7CiAgICAgICAgICAgICAgKl9fcCA9ICooX19wIC0gX19sKTsKICAgICAgICAgICAg ICBfX3AgLT0gX19sOwogICAgICAgICAgICB9CgogICAgICAgICAgICAqX19wID0gKihfX3AgKyBf X2spOwogICAgICAgICAgICBfX3AgKz0gX19rOwogICAgICAgICAgfQogICAgICAgIH0KCiAgICAg ICAgZWxzZSB7CiAgICAgICAgICBmb3IgKF9EaXN0YW5jZSBfX2ogPSAwOyBfX2ogPCBfX2svX19k IC0gMTsgX19qICsrKSB7CiAgICAgICAgICAgIGlmIChfX3AgPCBfX2xhc3QgLSBfX2spIHsKICAg ICAgICAgICAgICAqX19wID0gKihfX3AgKyBfX2spOwogICAgICAgICAgICAgIF9fcCArPSBfX2s7 CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICpfX3AgPSAqIChfX3AgLSBfX2wpOwogICAgICAg ICAgICBfX3AgLT0gX19sOwogICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgKl9fcCA9IF9f dG1wOwogICAgICAgICsrX19maXJzdDsKICAgICAgfQogICAgfQojIDE1NjEgIi91c3IvaW5jbHVk ZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJk SXRlcj4KICAgIGlubGluZSB2b2lkCiAgICByb3RhdGUoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9G b3J3YXJkSXRlciBfX21pZGRsZSwgX0ZvcndhcmRJdGVyIF9fbGFzdCkKICAgIHsKCiAgICAgCgog ICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+OjppdGVy YXRvcl9jYXRlZ29yeSBfSXRlclR5cGU7CiAgICAgIF9fcm90YXRlKF9fZmlyc3QsIF9fbWlkZGxl LCBfX2xhc3QsIF9JdGVyVHlwZSgpKTsKICAgIH0KIyAxNTg5ICIvdXNyL2luY2x1ZGUvYysrLzMu Mi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5 cGVuYW1lIF9PdXRwdXRJdGVyPgogICAgX091dHB1dEl0ZXIKICAgIHJvdGF0ZV9jb3B5KF9Gb3J3 YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19taWRkbGUsCiAgICAgICAgICAgICAgICBf Rm9yd2FyZEl0ZXIgX19sYXN0LCBfT3V0cHV0SXRlciBfX3Jlc3VsdCkKICAgIHsKCiAgICAgCiAg ICAgCgoKICAgICAgcmV0dXJuIGNvcHkoX19maXJzdCwgX19taWRkbGUsIGNvcHkoX19taWRkbGUs IF9fbGFzdCwgX19yZXN1bHQpKTsKICAgIH0KIyAxNjEyICIvdXNyL2luY2x1ZGUvYysrLzMuMi9i aXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRGlzdGFuY2U+CiAgICBpbmxp bmUgX0Rpc3RhbmNlCiAgICBfX3JhbmRvbV9udW1iZXIoX0Rpc3RhbmNlIF9fbikKICAgIHsKCiAg ICAgIHJldHVybiBscmFuZDQ4KCkgJSBfX247CgoKCiAgICB9CiMgMTYzNCAiL3Vzci9pbmNsdWRl L2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFj Y2Vzc0l0ZXI+CiAgICBpbmxpbmUgdm9pZAogICAgcmFuZG9tX3NodWZmbGUoX1JhbmRvbUFjY2Vz c0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0KQogICAgewoKICAgICAKCgog ICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpIHJldHVybjsKICAgICAgZm9yIChfUmFuZG9tQWNj ZXNzSXRlciBfX2kgPSBfX2ZpcnN0ICsgMTsgX19pICE9IF9fbGFzdDsgKytfX2kpCiAgICAgICAg aXRlcl9zd2FwKF9faSwgX19maXJzdCArIF9fcmFuZG9tX251bWJlcigoX19pIC0gX19maXJzdCkg KyAxKSk7CiAgICB9CiMgMTY2MCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5o IiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9SYW5k b21OdW1iZXJHZW5lcmF0b3I+CiAgICB2b2lkCiAgICByYW5kb21fc2h1ZmZsZShfUmFuZG9tQWNj ZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAg ICAgICBfUmFuZG9tTnVtYmVyR2VuZXJhdG9yJiBfX3JhbmQpCiAgICB7CgogICAgIAoKCiAgICAg IGlmIChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuOwogICAgICBmb3IgKF9SYW5kb21BY2Nlc3NJ dGVyIF9faSA9IF9fZmlyc3QgKyAxOyBfX2kgIT0gX19sYXN0OyArK19faSkKICAgICAgICBpdGVy X3N3YXAoX19pLCBfX2ZpcnN0ICsgX19yYW5kKChfX2kgLSBfX2ZpcnN0KSArIDEpKTsKICAgIH0K CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfUHJlZGlj YXRlPgogICAgX0ZvcndhcmRJdGVyCiAgICBfX3BhcnRpdGlvbihfRm9yd2FyZEl0ZXIgX19maXJz dCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVk LAogICAgICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRvcl90YWcpCiAgICB7CiAgICAgIGlmIChf X2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuIF9fZmlyc3Q7CgogICAgICB3aGlsZSAoX19wcmVkKCpf X2ZpcnN0KSkKICAgICAgICBpZiAoKytfX2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuIF9fZmlyc3Q7 CgogICAgICBfRm9yd2FyZEl0ZXIgX19uZXh0ID0gX19maXJzdDsKCiAgICAgIHdoaWxlICgrK19f bmV4dCAhPSBfX2xhc3QpCiAgICAgICAgaWYgKF9fcHJlZCgqX19uZXh0KSkgewogICAgICAgICAg c3dhcCgqX19maXJzdCwgKl9fbmV4dCk7CiAgICAgICAgICArK19fZmlyc3Q7CiAgICAgICAgfQoK ICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0Jp ZGlyZWN0aW9uYWxJdGVyLCB0eXBlbmFtZSBfUHJlZGljYXRlPgogICAgX0JpZGlyZWN0aW9uYWxJ dGVyCiAgICBfX3BhcnRpdGlvbihfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwgX0JpZGlyZWN0 aW9uYWxJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVkLAogICAg ICAgICAgICAgICAgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcpCiAgICB7CiAgICAgIHdoaWxl ICh0cnVlKSB7CiAgICAgICAgd2hpbGUgKHRydWUpCiAgICAgICAgICBpZiAoX19maXJzdCA9PSBf X2xhc3QpCiAgICAgICAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgICAgICAgZWxzZSBpZiAoX19w cmVkKCpfX2ZpcnN0KSkKICAgICAgICAgICAgKytfX2ZpcnN0OwogICAgICAgICAgZWxzZQogICAg ICAgICAgICBicmVhazsKICAgICAgICAtLV9fbGFzdDsKICAgICAgICB3aGlsZSAodHJ1ZSkKICAg ICAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkKICAgICAgICAgICAgcmV0dXJuIF9fZmlyc3Q7 CiAgICAgICAgICBlbHNlIGlmICghX19wcmVkKCpfX2xhc3QpKQogICAgICAgICAgICAtLV9fbGFz dDsKICAgICAgICAgIGVsc2UKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgaXRlcl9zd2FwKF9f Zmlyc3QsIF9fbGFzdCk7CiAgICAgICAgKytfX2ZpcnN0OwogICAgICB9CiAgICB9CiMgMTc0OCAi L3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfUHJlZGljYXRlPgogICAgaW5saW5lIF9Gb3J3YXJk SXRlcgogICAgcGFydGl0aW9uKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19s YXN0LAogICAgICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVkKQogICAgewoKICAgICAKICAgICAK CgogICAgICByZXR1cm4gX19wYXJ0aXRpb24oX19maXJzdCwgX19sYXN0LCBfX3ByZWQsIF9faXRl cmF0b3JfY2F0ZWdvcnkoX19maXJzdCkpOwogICAgfQoKCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9QcmVkaWNhdGUsIHR5cGVuYW1lIF9EaXN0YW5jZT4K ICAgIF9Gb3J3YXJkSXRlcgogICAgX19pbnBsYWNlX3N0YWJsZV9wYXJ0aXRpb24oX0ZvcndhcmRJ dGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCwgX0Rpc3RhbmNlIF9fbGVuKQogICAgewogICAgICBp ZiAoX19sZW4gPT0gMSkKICAgICAgICByZXR1cm4gX19wcmVkKCpfX2ZpcnN0KSA/IF9fbGFzdCA6 IF9fZmlyc3Q7CiAgICAgIF9Gb3J3YXJkSXRlciBfX21pZGRsZSA9IF9fZmlyc3Q7CiAgICAgIGFk dmFuY2UoX19taWRkbGUsIF9fbGVuIC8gMik7CiAgICAgIF9Gb3J3YXJkSXRlciBfX2JlZ2luID0g X19pbnBsYWNlX3N0YWJsZV9wYXJ0aXRpb24oX19maXJzdCwgX19taWRkbGUsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19wcmVkLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGVu IC8gMik7CiAgICAgIF9Gb3J3YXJkSXRlciBfX2VuZCA9IF9faW5wbGFjZV9zdGFibGVfcGFydGl0 aW9uKF9fbWlkZGxlLCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIF9fcHJlZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgX19sZW4gLSBfX2xlbiAvIDIpOwogICAgICByb3RhdGUo X19iZWdpbiwgX19taWRkbGUsIF9fZW5kKTsKICAgICAgYWR2YW5jZShfX2JlZ2luLCBkaXN0YW5j ZShfX21pZGRsZSwgX19lbmQpKTsKICAgICAgcmV0dXJuIF9fYmVnaW47CiAgICB9CgoKCgoKCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfUG9pbnRlciwgdHlwZW5h bWUgX1ByZWRpY2F0ZSwKICAgICAgICAgICB0eXBlbmFtZSBfRGlzdGFuY2U+CiAgICBfRm9yd2Fy ZEl0ZXIKICAgIF9fc3RhYmxlX3BhcnRpdGlvbl9hZGFwdGl2ZShfRm9yd2FyZEl0ZXIgX19maXJz dCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf UHJlZGljYXRlIF9fcHJlZCwgX0Rpc3RhbmNlIF9fbGVuLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIF9Qb2ludGVyIF9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIF9EaXN0YW5jZSBfX2J1ZmZlcl9zaXplKQogICAgewogICAgICBpZiAoX19sZW4gPD0gX19i dWZmZXJfc2l6ZSkgewogICAgICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdDEgPSBfX2ZpcnN0Owog ICAgICAgIF9Qb2ludGVyIF9fcmVzdWx0MiA9IF9fYnVmZmVyOwogICAgICAgIGZvciAoIDsgX19m aXJzdCAhPSBfX2xhc3QgOyArK19fZmlyc3QpCiAgICAgICAgICBpZiAoX19wcmVkKCpfX2ZpcnN0 KSkgewogICAgICAgICAgICAqX19yZXN1bHQxID0gKl9fZmlyc3Q7CiAgICAgICAgICAgICsrX19y ZXN1bHQxOwogICAgICAgICAgfQogICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICpfX3Jlc3Vs dDIgPSAqX19maXJzdDsKICAgICAgICAgICAgKytfX3Jlc3VsdDI7CiAgICAgICAgICB9CiAgICAg ICAgY29weShfX2J1ZmZlciwgX19yZXN1bHQyLCBfX3Jlc3VsdDEpOwogICAgICAgIHJldHVybiBf X3Jlc3VsdDE7CiAgICAgIH0KICAgICAgZWxzZSB7CiAgICAgICAgX0ZvcndhcmRJdGVyIF9fbWlk ZGxlID0gX19maXJzdDsKICAgICAgICBhZHZhbmNlKF9fbWlkZGxlLCBfX2xlbiAvIDIpOwogICAg ICAgIF9Gb3J3YXJkSXRlciBfX2JlZ2luID0gX19zdGFibGVfcGFydGl0aW9uX2FkYXB0aXZlKF9f Zmlyc3QsIF9fbWlkZGxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIF9fcHJlZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xlbiAvIDIsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19idWZmZXIsIF9fYnVm ZmVyX3NpemUpOwogICAgICAgIF9Gb3J3YXJkSXRlciBfX2VuZCA9IF9fc3RhYmxlX3BhcnRpdGlv bl9hZGFwdGl2ZSggX19taWRkbGUsIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcHJlZCwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGVuIC0gX19sZW4gLyAy LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgX19idWZmZXIsIF9fYnVmZmVyX3NpemUpOwogICAgICAgIHJvdGF0ZShfX2JlZ2luLCBfX21p ZGRsZSwgX19lbmQpOwogICAgICAgIGFkdmFuY2UoX19iZWdpbiwgZGlzdGFuY2UoX19taWRkbGUs IF9fZW5kKSk7CiAgICAgICAgcmV0dXJuIF9fYmVnaW47CiAgICAgIH0KICAgIH0KIyAxODQ4ICIv dXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9QcmVkaWNhdGU+CiAgICBfRm9yd2FyZEl0ZXIKICAg IHN0YWJsZV9wYXJ0aXRpb24oX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xh c3QsCiAgICAgICAgICAgICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVkKQogICAgewoKICAgICAK ICAgICAKCgogICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpCiAgICAgICAgcmV0dXJuIF9fZmly c3Q7CiAgICAgIGVsc2UKICAgICAgewogICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3Jf dHJhaXRzPF9Gb3J3YXJkSXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKICAgICAgICB0eXBl ZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+OjpkaWZmZXJlbmNlX3R5 cGUgX0Rpc3RhbmNlVHlwZTsKCiAgICAgICAgX1RlbXBvcmFyeV9idWZmZXI8X0ZvcndhcmRJdGVy LCBfVmFsdWVUeXBlPiBfX2J1ZihfX2ZpcnN0LCBfX2xhc3QpOwogICAgICAgIGlmIChfX2J1Zi5z aXplKCkgPiAwKQogICAgICAgICAgcmV0dXJuIF9fc3RhYmxlX3BhcnRpdGlvbl9hZGFwdGl2ZShf X2ZpcnN0LCBfX2xhc3QsIF9fcHJlZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgX0Rpc3RhbmNlVHlwZShfX2J1Zi5yZXF1ZXN0ZWRfc2l6ZSgpKSwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19idWYuYmVnaW4oKSwgX19i dWYuc2l6ZSgpKTsKICAgICAgICBlbHNlCiAgICAgICAgICByZXR1cm4gX19pbnBsYWNlX3N0YWJs ZV9wYXJ0aXRpb24oX19maXJzdCwgX19sYXN0LCBfX3ByZWQsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlVHlwZShfX2J1Zi5yZXF1ZXN0ZWRfc2l6 ZSgpKSk7CiAgICAgIH0KICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNj ZXNzSXRlciwgdHlwZW5hbWUgX1RwPgogICAgX1JhbmRvbUFjY2Vzc0l0ZXIKICAgIF9fdW5ndWFy ZGVkX3BhcnRpdGlvbihfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRl ciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX1RwIF9fcGl2b3QpCiAgICB7CiAg ICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgd2hpbGUgKCpfX2ZpcnN0IDwgX19waXZvdCkKICAg ICAgICAgICsrX19maXJzdDsKICAgICAgICAtLV9fbGFzdDsKICAgICAgICB3aGlsZSAoX19waXZv dCA8ICpfX2xhc3QpCiAgICAgICAgICAtLV9fbGFzdDsKICAgICAgICBpZiAoIShfX2ZpcnN0IDwg X19sYXN0KSkKICAgICAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgICAgIGl0ZXJfc3dhcChfX2Zp cnN0LCBfX2xhc3QpOwogICAgICAgICsrX19maXJzdDsKICAgICAgfQogICAgfQoKCgoKCgogIHRl bXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfVHAsIHR5cGVuYW1l IF9Db21wYXJlPgogICAgX1JhbmRvbUFjY2Vzc0l0ZXIKICAgIF9fdW5ndWFyZGVkX3BhcnRpdGlv bihfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgX1RwIF9fcGl2b3QsIF9Db21wYXJlIF9fY29tcCkKICAg IHsKICAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICB3aGlsZSAoX19jb21wKCpfX2ZpcnN0LCBf X3Bpdm90KSkKICAgICAgICAgICsrX19maXJzdDsKICAgICAgICAtLV9fbGFzdDsKICAgICAgICB3 aGlsZSAoX19jb21wKF9fcGl2b3QsICpfX2xhc3QpKQogICAgICAgICAgLS1fX2xhc3Q7CiAgICAg ICAgaWYgKCEoX19maXJzdCA8IF9fbGFzdCkpCiAgICAgICAgICByZXR1cm4gX19maXJzdDsKICAg ICAgICBpdGVyX3N3YXAoX19maXJzdCwgX19sYXN0KTsKICAgICAgICArK19fZmlyc3Q7CiAgICAg IH0KICAgIH0KIyAxOTI5ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMK ICBlbnVtIHsgX01fdGhyZXNob2xkID0gMTYgfTsKCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf UmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX1RwPgogICAgdm9pZAogICAgX191bmd1YXJkZWRf bGluZWFyX2luc2VydChfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9UcCBfX3ZhbCkKICAgIHsK ICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19uZXh0ID0gX19sYXN0OwogICAgICAtLV9fbmV4dDsK ICAgICAgd2hpbGUgKF9fdmFsIDwgKl9fbmV4dCkgewogICAgICAgICpfX2xhc3QgPSAqX19uZXh0 OwogICAgICAgIF9fbGFzdCA9IF9fbmV4dDsKICAgICAgICAtLV9fbmV4dDsKICAgICAgfQogICAg ICAqX19sYXN0ID0gX192YWw7CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRv bUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICB2b2lkCiAg ICBfX3VuZ3VhcmRlZF9saW5lYXJfaW5zZXJ0KF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgX1Rw IF9fdmFsLCBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9f bmV4dCA9IF9fbGFzdDsKICAgICAgLS1fX25leHQ7CiAgICAgIHdoaWxlIChfX2NvbXAoX192YWws ICpfX25leHQpKSB7CiAgICAgICAgKl9fbGFzdCA9ICpfX25leHQ7CiAgICAgICAgX19sYXN0ID0g X19uZXh0OwogICAgICAgIC0tX19uZXh0OwogICAgICB9CiAgICAgICpfX2xhc3QgPSBfX3ZhbDsK ICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcj4KICAgIHZv aWQKICAgIF9faW5zZXJ0aW9uX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRv bUFjY2Vzc0l0ZXIgX19sYXN0KQogICAgewogICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpIHJl dHVybjsKCiAgICAgIGZvciAoX1JhbmRvbUFjY2Vzc0l0ZXIgX19pID0gX19maXJzdCArIDE7IF9f aSAhPSBfX2xhc3Q7ICsrX19pKQogICAgICB7CiAgICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJh aXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6dmFsdWVfdHlwZSBfX3ZhbCA9ICpfX2k7CiAgICAgICAg aWYgKF9fdmFsIDwgKl9fZmlyc3QpIHsKICAgICAgICAgIGNvcHlfYmFja3dhcmQoX19maXJzdCwg X19pLCBfX2kgKyAxKTsKICAgICAgICAgICpfX2ZpcnN0ID0gX192YWw7CiAgICAgICAgfQogICAg ICAgIGVsc2UKICAgICAgICAgIF9fdW5ndWFyZGVkX2xpbmVhcl9pbnNlcnQoX19pLCBfX3ZhbCk7 CiAgICAgIH0KICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRl ciwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICB2b2lkCiAgICBfX2luc2VydGlvbl9zb3J0KF9SYW5k b21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAg ICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQogICAgewogICAgICBpZiAoX19maXJzdCA9PSBf X2xhc3QpIHJldHVybjsKCiAgICAgIGZvciAoX1JhbmRvbUFjY2Vzc0l0ZXIgX19pID0gX19maXJz dCArIDE7IF9faSAhPSBfX2xhc3Q7ICsrX19pKQogICAgICB7CiAgICAgICAgdHlwZW5hbWUgaXRl cmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6dmFsdWVfdHlwZSBfX3ZhbCA9ICpfX2k7 CiAgICAgICAgaWYgKF9fY29tcChfX3ZhbCwgKl9fZmlyc3QpKSB7CiAgICAgICAgICBjb3B5X2Jh Y2t3YXJkKF9fZmlyc3QsIF9faSwgX19pICsgMSk7CiAgICAgICAgICAqX19maXJzdCA9IF9fdmFs OwogICAgICAgIH0KICAgICAgICBlbHNlCiAgICAgICAgICBfX3VuZ3VhcmRlZF9saW5lYXJfaW5z ZXJ0KF9faSwgX192YWwsIF9fY29tcCk7CiAgICAgIH0KICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcj4KICAgIGlubGluZSB2b2lkCiAgICBfX3VuZ3VhcmRl ZF9pbnNlcnRpb25fc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNz SXRlciBfX2xhc3QpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRz PF9SYW5kb21BY2Nlc3NJdGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOwoKICAgICAgZm9yIChf UmFuZG9tQWNjZXNzSXRlciBfX2kgPSBfX2ZpcnN0OyBfX2kgIT0gX19sYXN0OyArK19faSkKICAg ICAgICBfX3VuZ3VhcmRlZF9saW5lYXJfaW5zZXJ0KF9faSwgX1ZhbHVlVHlwZSgqX19pKSk7CiAg ICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1l IF9Db21wYXJlPgogICAgaW5saW5lIHZvaWQKICAgIF9fdW5ndWFyZGVkX2luc2VydGlvbl9zb3J0 KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAg dHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1 ZV90eXBlIF9WYWx1ZVR5cGU7CgogICAgICBmb3IgKF9SYW5kb21BY2Nlc3NJdGVyIF9faSA9IF9f Zmlyc3Q7IF9faSAhPSBfX2xhc3Q7ICsrX19pKQogICAgICAgIF9fdW5ndWFyZGVkX2xpbmVhcl9p bnNlcnQoX19pLCBfVmFsdWVUeXBlKCpfX2kpLCBfX2NvbXApOwogICAgfQoKCgoKCgogIHRlbXBs YXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyPgogICAgdm9pZAogICAgX19maW5hbF9pbnNl cnRpb25fc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBf X2xhc3QpCiAgICB7CiAgICAgIGlmIChfX2xhc3QgLSBfX2ZpcnN0ID4gX01fdGhyZXNob2xkKSB7 CiAgICAgICAgX19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2ZpcnN0ICsgX01fdGhyZXNob2xk KTsKICAgICAgICBfX3VuZ3VhcmRlZF9pbnNlcnRpb25fc29ydChfX2ZpcnN0ICsgX01fdGhyZXNo b2xkLCBfX2xhc3QpOwogICAgICB9CiAgICAgIGVsc2UKICAgICAgICBfX2luc2VydGlvbl9zb3J0 KF9fZmlyc3QsIF9fbGFzdCk7CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRv bUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgdm9pZAogICAgX19maW5hbF9pbnNl cnRpb25fc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBf X2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKICAgIHsK ICAgICAgaWYgKF9fbGFzdCAtIF9fZmlyc3QgPiBfTV90aHJlc2hvbGQpIHsKICAgICAgICBfX2lu c2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fZmlyc3QgKyBfTV90aHJlc2hvbGQsIF9fY29tcCk7CiAg ICAgICAgX191bmd1YXJkZWRfaW5zZXJ0aW9uX3NvcnQoX19maXJzdCArIF9NX3RocmVzaG9sZCwg X19sYXN0LCBfX2NvbXApOwogICAgICB9CiAgICAgIGVsc2UKICAgICAgICBfX2luc2VydGlvbl9z b3J0KF9fZmlyc3QsIF9fbGFzdCwgX19jb21wKTsKICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfU2l6ZT4KICAgIGlubGluZSBfU2l6ZQogICAgX19sZyhfU2l6ZSBfX24pCiAgICB7CiAg ICAgIF9TaXplIF9fazsKICAgICAgZm9yIChfX2sgPSAwOyBfX24gIT0gMTsgX19uID4+PSAxKSAr K19fazsKICAgICAgcmV0dXJuIF9fazsKICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf UmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX1NpemU+CiAgICB2b2lkCiAgICBfX2ludHJvc29y dF9sb29wKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFz dCwKICAgICAgICAgICAgICAgICAgICAgX1NpemUgX19kZXB0aF9saW1pdCkKICAgIHsKICAgICAg dHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1 ZV90eXBlIF9WYWx1ZVR5cGU7CgogICAgICB3aGlsZSAoX19sYXN0IC0gX19maXJzdCA+IF9NX3Ro cmVzaG9sZCkgewogICAgICAgIGlmIChfX2RlcHRoX2xpbWl0ID09IDApIHsKICAgICAgICAgIHBh cnRpYWxfc29ydChfX2ZpcnN0LCBfX2xhc3QsIF9fbGFzdCk7CiAgICAgICAgICByZXR1cm47CiAg ICAgICAgfQogICAgICAgIC0tX19kZXB0aF9saW1pdDsKICAgICAgICBfUmFuZG9tQWNjZXNzSXRl ciBfX2N1dCA9CiAgICAgICAgICBfX3VuZ3VhcmRlZF9wYXJ0aXRpb24oX19maXJzdCwgX19sYXN0 LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9WYWx1ZVR5cGUoX19tZWRpYW4oKl9f Zmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAqKF9fZmlyc3QgKyAoX19sYXN0IC0gX19maXJzdCkvMiksCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKF9fbGFzdCAtIDEpKSkpOwogICAgICAg IF9faW50cm9zb3J0X2xvb3AoX19jdXQsIF9fbGFzdCwgX19kZXB0aF9saW1pdCk7CiAgICAgICAg X19sYXN0ID0gX19jdXQ7CiAgICAgIH0KICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf UmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX1NpemUsIHR5cGVuYW1lIF9Db21wYXJlPgogICAg dm9pZAogICAgX19pbnRyb3NvcnRfbG9vcChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFu ZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgIF9TaXplIF9fZGVwdGhf bGltaXQsIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVy YXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7Cgog ICAgICB3aGlsZSAoX19sYXN0IC0gX19maXJzdCA+IF9NX3RocmVzaG9sZCkgewogICAgICAgIGlm IChfX2RlcHRoX2xpbWl0ID09IDApIHsKICAgICAgICAgIHBhcnRpYWxfc29ydChfX2ZpcnN0LCBf X2xhc3QsIF9fbGFzdCwgX19jb21wKTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAg ICAgLS1fX2RlcHRoX2xpbWl0OwogICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fY3V0ID0KICAg ICAgICAgIF9fdW5ndWFyZGVkX3BhcnRpdGlvbihfX2ZpcnN0LCBfX2xhc3QsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgX1ZhbHVlVHlwZShfX21lZGlhbigqX19maXJzdCwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICooX19maXJzdCAr IChfX2xhc3QgLSBfX2ZpcnN0KS8yKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICooX19sYXN0IC0gMSksIF9fY29tcCkpLAogICAgICAgICAgIF9f Y29tcCk7CiAgICAgICAgX19pbnRyb3NvcnRfbG9vcChfX2N1dCwgX19sYXN0LCBfX2RlcHRoX2xp bWl0LCBfX2NvbXApOwogICAgICAgIF9fbGFzdCA9IF9fY3V0OwogICAgICB9CiAgICB9CiMgMjE2 NiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXI+CiAgICBpbmxpbmUgdm9pZAogICAgc29ydChfUmFuZG9t QWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QpCiAgICB7CiAgICAg IHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6dmFs dWVfdHlwZSBfVmFsdWVUeXBlOwoKCiAgICAgCgogICAgIAoKICAgICAgaWYgKF9fZmlyc3QgIT0g X19sYXN0KSB7CiAgICAgICAgX19pbnRyb3NvcnRfbG9vcChfX2ZpcnN0LCBfX2xhc3QsIF9fbGco X19sYXN0IC0gX19maXJzdCkgKiAyKTsKICAgICAgICBfX2ZpbmFsX2luc2VydGlvbl9zb3J0KF9f Zmlyc3QsIF9fbGFzdCk7CiAgICAgIH0KICAgIH0KIyAyMTk3ICIvdXNyL2luY2x1ZGUvYysrLzMu Mi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRl ciwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBpbmxpbmUgdm9pZAogICAgc29ydChfUmFuZG9tQWNj ZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9Db21wYXJlIF9fY29t cCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFj Y2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CgoKICAgICAKCiAgICAgCgogICAgICBp ZiAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAgICAgICBfX2ludHJvc29ydF9sb29wKF9fZmlyc3Qs IF9fbGFzdCwgX19sZyhfX2xhc3QgLSBfX2ZpcnN0KSAqIDIsIF9fY29tcCk7CiAgICAgICAgX19m aW5hbF9pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xhc3QsIF9fY29tcCk7CiAgICAgIH0KICAg IH0KCgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXI+CiAgICB2b2lk CiAgICBfX2lucGxhY2Vfc3RhYmxlX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1Jh bmRvbUFjY2Vzc0l0ZXIgX19sYXN0KQogICAgewogICAgICBpZiAoX19sYXN0IC0gX19maXJzdCA8 IDE1KSB7CiAgICAgICAgX19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xhc3QpOwogICAgICAg IHJldHVybjsKICAgICAgfQogICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX21pZGRsZSA9IF9fZmly c3QgKyAoX19sYXN0IC0gX19maXJzdCkgLyAyOwogICAgICBfX2lucGxhY2Vfc3RhYmxlX3NvcnQo X19maXJzdCwgX19taWRkbGUpOwogICAgICBfX2lucGxhY2Vfc3RhYmxlX3NvcnQoX19taWRkbGUs IF9fbGFzdCk7CiAgICAgIF9fbWVyZ2Vfd2l0aG91dF9idWZmZXIoX19maXJzdCwgX19taWRkbGUs IF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX21pZGRsZSAtIF9fZmlyc3Qs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19sYXN0IC0gX19taWRkbGUpOwogICAgfQoK CgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfQ29t cGFyZT4KICAgIHZvaWQKICAgIF9faW5wbGFjZV9zdGFibGVfc29ydChfUmFuZG9tQWNjZXNzSXRl ciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgX0NvbXBhcmUgX19jb21wKQogICAgewogICAgICBpZiAoX19sYXN0IC0gX19maXJzdCA8 IDE1KSB7CiAgICAgICAgX19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xhc3QsIF9fY29tcCk7 CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbWlkZGxl ID0gX19maXJzdCArIChfX2xhc3QgLSBfX2ZpcnN0KSAvIDI7CiAgICAgIF9faW5wbGFjZV9zdGFi bGVfc29ydChfX2ZpcnN0LCBfX21pZGRsZSwgX19jb21wKTsKICAgICAgX19pbnBsYWNlX3N0YWJs ZV9zb3J0KF9fbWlkZGxlLCBfX2xhc3QsIF9fY29tcCk7CiAgICAgIF9fbWVyZ2Vfd2l0aG91dF9i dWZmZXIoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBfX21pZGRsZSAtIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19s YXN0IC0gX19taWRkbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb21wKTsKICAg IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIxLCB0eXBlbmFtZSBfUmFu ZG9tQWNjZXNzSXRlcjIsCiAgICAgICAgICAgdHlwZW5hbWUgX0Rpc3RhbmNlPgogICAgdm9pZAog ICAgX19tZXJnZV9zb3J0X2xvb3AoX1JhbmRvbUFjY2Vzc0l0ZXIxIF9fZmlyc3QsIF9SYW5kb21B Y2Nlc3NJdGVyMSBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRl cjIgX19yZXN1bHQsIF9EaXN0YW5jZSBfX3N0ZXBfc2l6ZSkKICAgIHsKICAgICAgX0Rpc3RhbmNl IF9fdHdvX3N0ZXAgPSAyICogX19zdGVwX3NpemU7CgogICAgICB3aGlsZSAoX19sYXN0IC0gX19m aXJzdCA+PSBfX3R3b19zdGVwKSB7CiAgICAgICAgX19yZXN1bHQgPSBtZXJnZShfX2ZpcnN0LCBf X2ZpcnN0ICsgX19zdGVwX3NpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2ZpcnN0ICsg X19zdGVwX3NpemUsIF9fZmlyc3QgKyBfX3R3b19zdGVwLAogICAgICAgICAgICAgICAgICAgICAg ICAgX19yZXN1bHQpOwogICAgICAgIF9fZmlyc3QgKz0gX190d29fc3RlcDsKICAgICAgfQoKICAg ICAgX19zdGVwX3NpemUgPSBtaW4oX0Rpc3RhbmNlKF9fbGFzdCAtIF9fZmlyc3QpLCBfX3N0ZXBf c2l6ZSk7CiAgICAgIG1lcmdlKF9fZmlyc3QsIF9fZmlyc3QgKyBfX3N0ZXBfc2l6ZSwgX19maXJz dCArIF9fc3RlcF9zaXplLCBfX2xhc3QsCiAgICAgICAgICAgIF9fcmVzdWx0KTsKICAgIH0KCiAg dGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIxLCB0eXBlbmFtZSBfUmFuZG9tQWNj ZXNzSXRlcjIsCiAgICAgICAgICAgdHlwZW5hbWUgX0Rpc3RhbmNlLCB0eXBlbmFtZSBfQ29tcGFy ZT4KICAgIHZvaWQKICAgIF9fbWVyZ2Vfc29ydF9sb29wKF9SYW5kb21BY2Nlc3NJdGVyMSBfX2Zp cnN0LCBfUmFuZG9tQWNjZXNzSXRlcjEgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgX1Jh bmRvbUFjY2Vzc0l0ZXIyIF9fcmVzdWx0LCBfRGlzdGFuY2UgX19zdGVwX3NpemUsCiAgICAgICAg ICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAgIF9EaXN0YW5jZSBfX3R3 b19zdGVwID0gMiAqIF9fc3RlcF9zaXplOwoKICAgICAgd2hpbGUgKF9fbGFzdCAtIF9fZmlyc3Qg Pj0gX190d29fc3RlcCkgewogICAgICAgIF9fcmVzdWx0ID0gbWVyZ2UoX19maXJzdCwgX19maXJz dCArIF9fc3RlcF9zaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgX19maXJzdCArIF9fc3Rl cF9zaXplLCBfX2ZpcnN0ICsgX190d29fc3RlcCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9f cmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgX19jb21wKTsKICAgICAgICBfX2ZpcnN0 ICs9IF9fdHdvX3N0ZXA7CiAgICAgIH0KICAgICAgX19zdGVwX3NpemUgPSBtaW4oX0Rpc3RhbmNl KF9fbGFzdCAtIF9fZmlyc3QpLCBfX3N0ZXBfc2l6ZSk7CgogICAgICBtZXJnZShfX2ZpcnN0LCBf X2ZpcnN0ICsgX19zdGVwX3NpemUsCiAgICAgICAgICAgIF9fZmlyc3QgKyBfX3N0ZXBfc2l6ZSwg X19sYXN0LAogICAgICAgICAgICBfX3Jlc3VsdCwKICAgICAgICAgICAgX19jb21wKTsKICAgIH0K CiAgZW51bSB7IF9NX2NodW5rX3NpemUgPSA3IH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5k b21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfRGlzdGFuY2U+CiAgICB2b2lkCiAgICBfX2NodW5rX2lu c2VydGlvbl9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVy IF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlIF9fY2h1bmtfc2l6 ZSkKICAgIHsKICAgICAgd2hpbGUgKF9fbGFzdCAtIF9fZmlyc3QgPj0gX19jaHVua19zaXplKSB7 CiAgICAgICAgX19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2ZpcnN0ICsgX19jaHVua19zaXpl KTsKICAgICAgICBfX2ZpcnN0ICs9IF9fY2h1bmtfc2l6ZTsKICAgICAgfQogICAgICBfX2luc2Vy dGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFzdCk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9S YW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfRGlzdGFuY2UsIHR5cGVuYW1lIF9Db21wYXJlPgog ICAgdm9pZAogICAgX19jaHVua19pbnNlcnRpb25fc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2Zp cnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAg IF9EaXN0YW5jZSBfX2NodW5rX3NpemUsIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgd2hp bGUgKF9fbGFzdCAtIF9fZmlyc3QgPj0gX19jaHVua19zaXplKSB7CiAgICAgICAgX19pbnNlcnRp b25fc29ydChfX2ZpcnN0LCBfX2ZpcnN0ICsgX19jaHVua19zaXplLCBfX2NvbXApOwogICAgICAg IF9fZmlyc3QgKz0gX19jaHVua19zaXplOwogICAgICB9CiAgICAgIF9faW5zZXJ0aW9uX3NvcnQo X19maXJzdCwgX19sYXN0LCBfX2NvbXApOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFu ZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX1BvaW50ZXI+CiAgICB2b2lkCiAgICBfX21lcmdlX3Nv cnRfd2l0aF9idWZmZXIoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0 ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Qb2ludGVyIF9fYnVmZmVy KQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNj ZXNzSXRlcj46OmRpZmZlcmVuY2VfdHlwZSBfRGlzdGFuY2U7CgogICAgICBfRGlzdGFuY2UgX19s ZW4gPSBfX2xhc3QgLSBfX2ZpcnN0OwogICAgICBfUG9pbnRlciBfX2J1ZmZlcl9sYXN0ID0gX19i dWZmZXIgKyBfX2xlbjsKCiAgICAgIF9EaXN0YW5jZSBfX3N0ZXBfc2l6ZSA9IF9NX2NodW5rX3Np emU7CiAgICAgIF9fY2h1bmtfaW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0LCBfX3N0ZXBf c2l6ZSk7CgogICAgICB3aGlsZSAoX19zdGVwX3NpemUgPCBfX2xlbikgewogICAgICAgIF9fbWVy Z2Vfc29ydF9sb29wKF9fZmlyc3QsIF9fbGFzdCwgX19idWZmZXIsIF9fc3RlcF9zaXplKTsKICAg ICAgICBfX3N0ZXBfc2l6ZSAqPSAyOwogICAgICAgIF9fbWVyZ2Vfc29ydF9sb29wKF9fYnVmZmVy LCBfX2J1ZmZlcl9sYXN0LCBfX2ZpcnN0LCBfX3N0ZXBfc2l6ZSk7CiAgICAgICAgX19zdGVwX3Np emUgKj0gMjsKICAgICAgfQogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNz SXRlciwgdHlwZW5hbWUgX1BvaW50ZXIsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgdm9pZAogICAg X19tZXJnZV9zb3J0X3dpdGhfYnVmZmVyKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5k b21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUG9pbnRl ciBfX2J1ZmZlciwgX0NvbXBhcmUgX19jb21wKQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1l IGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OmRpZmZlcmVuY2VfdHlwZSBfRGlz dGFuY2U7CgogICAgICBfRGlzdGFuY2UgX19sZW4gPSBfX2xhc3QgLSBfX2ZpcnN0OwogICAgICBf UG9pbnRlciBfX2J1ZmZlcl9sYXN0ID0gX19idWZmZXIgKyBfX2xlbjsKCiAgICAgIF9EaXN0YW5j ZSBfX3N0ZXBfc2l6ZSA9IF9NX2NodW5rX3NpemU7CiAgICAgIF9fY2h1bmtfaW5zZXJ0aW9uX3Nv cnQoX19maXJzdCwgX19sYXN0LCBfX3N0ZXBfc2l6ZSwgX19jb21wKTsKCiAgICAgIHdoaWxlIChf X3N0ZXBfc2l6ZSA8IF9fbGVuKSB7CiAgICAgICAgX19tZXJnZV9zb3J0X2xvb3AoX19maXJzdCwg X19sYXN0LCBfX2J1ZmZlciwgX19zdGVwX3NpemUsIF9fY29tcCk7CiAgICAgICAgX19zdGVwX3Np emUgKj0gMjsKICAgICAgICBfX21lcmdlX3NvcnRfbG9vcChfX2J1ZmZlciwgX19idWZmZXJfbGFz dCwgX19maXJzdCwgX19zdGVwX3NpemUsIF9fY29tcCk7CiAgICAgICAgX19zdGVwX3NpemUgKj0g MjsKICAgICAgfQogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwg dHlwZW5hbWUgX1BvaW50ZXIsIHR5cGVuYW1lIF9EaXN0YW5jZT4KICAgIHZvaWQKICAgIF9fc3Rh YmxlX3NvcnRfYWRhcHRpdmUoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vz c0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICBfUG9pbnRlciBfX2J1ZmZl ciwgX0Rpc3RhbmNlIF9fYnVmZmVyX3NpemUpCiAgICB7CiAgICAgIF9EaXN0YW5jZSBfX2xlbiA9 IChfX2xhc3QgLSBfX2ZpcnN0ICsgMSkgLyAyOwogICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX21p ZGRsZSA9IF9fZmlyc3QgKyBfX2xlbjsKICAgICAgaWYgKF9fbGVuID4gX19idWZmZXJfc2l6ZSkg ewogICAgICAgIF9fc3RhYmxlX3NvcnRfYWRhcHRpdmUoX19maXJzdCwgX19taWRkbGUsIF9fYnVm ZmVyLCBfX2J1ZmZlcl9zaXplKTsKICAgICAgICBfX3N0YWJsZV9zb3J0X2FkYXB0aXZlKF9fbWlk ZGxlLCBfX2xhc3QsIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplKTsKICAgICAgfQogICAgICBlbHNl IHsKICAgICAgICBfX21lcmdlX3NvcnRfd2l0aF9idWZmZXIoX19maXJzdCwgX19taWRkbGUsIF9f YnVmZmVyKTsKICAgICAgICBfX21lcmdlX3NvcnRfd2l0aF9idWZmZXIoX19taWRkbGUsIF9fbGFz dCwgX19idWZmZXIpOwogICAgICB9CiAgICAgIF9fbWVyZ2VfYWRhcHRpdmUoX19maXJzdCwgX19t aWRkbGUsIF9fbGFzdCwgX0Rpc3RhbmNlKF9fbWlkZGxlIC0gX19maXJzdCksCiAgICAgICAgICAg ICAgICAgICAgICAgX0Rpc3RhbmNlKF9fbGFzdCAtIF9fbWlkZGxlKSwgX19idWZmZXIsIF9fYnVm ZmVyX3NpemUpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwg dHlwZW5hbWUgX1BvaW50ZXIsIHR5cGVuYW1lIF9EaXN0YW5jZSwKICAgICAgICAgICB0eXBlbmFt ZSBfQ29tcGFyZT4KICAgIHZvaWQKICAgIF9fc3RhYmxlX3NvcnRfYWRhcHRpdmUoX1JhbmRvbUFj Y2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAg ICAgICAgICAgICAgICBfUG9pbnRlciBfX2J1ZmZlciwgX0Rpc3RhbmNlIF9fYnVmZmVyX3NpemUs CiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAg X0Rpc3RhbmNlIF9fbGVuID0gKF9fbGFzdCAtIF9fZmlyc3QgKyAxKSAvIDI7CiAgICAgIF9SYW5k b21BY2Nlc3NJdGVyIF9fbWlkZGxlID0gX19maXJzdCArIF9fbGVuOwogICAgICBpZiAoX19sZW4g PiBfX2J1ZmZlcl9zaXplKSB7CiAgICAgICAgX19zdGFibGVfc29ydF9hZGFwdGl2ZShfX2ZpcnN0 LCBfX21pZGRsZSwgX19idWZmZXIsIF9fYnVmZmVyX3NpemUsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBfX2NvbXApOwogICAgICAgIF9fc3RhYmxlX3NvcnRfYWRhcHRpdmUoX19taWRk bGUsIF9fbGFzdCwgX19idWZmZXIsIF9fYnVmZmVyX3NpemUsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBfX2NvbXApOwogICAgICB9CiAgICAgIGVsc2UgewogICAgICAgIF9fbWVyZ2Vf c29ydF93aXRoX2J1ZmZlcihfX2ZpcnN0LCBfX21pZGRsZSwgX19idWZmZXIsIF9fY29tcCk7CiAg ICAgICAgX19tZXJnZV9zb3J0X3dpdGhfYnVmZmVyKF9fbWlkZGxlLCBfX2xhc3QsIF9fYnVmZmVy LCBfX2NvbXApOwogICAgICB9CiAgICAgIF9fbWVyZ2VfYWRhcHRpdmUoX19maXJzdCwgX19taWRk bGUsIF9fbGFzdCwgX0Rpc3RhbmNlKF9fbWlkZGxlIC0gX19maXJzdCksCiAgICAgICAgICAgICAg ICAgICAgICAgX0Rpc3RhbmNlKF9fbGFzdCAtIF9fbWlkZGxlKSwgX19idWZmZXIsIF9fYnVmZmVy X3NpemUsCiAgICAgICAgICAgICAgICAgICAgICAgX19jb21wKTsKICAgIH0KIyAyNDMwICIvdXNy L2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf UmFuZG9tQWNjZXNzSXRlcj4KICAgIGlubGluZSB2b2lkCiAgICBzdGFibGVfc29ydChfUmFuZG9t QWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QpCiAgICB7CiAgICAg IHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6dmFs dWVfdHlwZSBfVmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0 czxfUmFuZG9tQWNjZXNzSXRlcj46OmRpZmZlcmVuY2VfdHlwZSBfRGlzdGFuY2VUeXBlOwoKCiAg ICAgCgogICAgIAoKICAgICAgX1RlbXBvcmFyeV9idWZmZXI8X1JhbmRvbUFjY2Vzc0l0ZXIsIF9W YWx1ZVR5cGU+IGJ1ZihfX2ZpcnN0LCBfX2xhc3QpOwogICAgICBpZiAoYnVmLmJlZ2luKCkgPT0g MCkKICAgICAgICBfX2lucGxhY2Vfc3RhYmxlX3NvcnQoX19maXJzdCwgX19sYXN0KTsKICAgICAg ZWxzZQogICAgICAgIF9fc3RhYmxlX3NvcnRfYWRhcHRpdmUoX19maXJzdCwgX19sYXN0LCBidWYu YmVnaW4oKSwgX0Rpc3RhbmNlVHlwZShidWYuc2l6ZSgpKSk7CiAgICB9CiMgMjQ2NiAiL3Vzci9p bmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1Jh bmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgaW5saW5lIHZvaWQKICAgIHN0 YWJsZV9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9f bGFzdCwgX0NvbXBhcmUgX19jb21wKQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJh dG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKICAg ICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojpk aWZmZXJlbmNlX3R5cGUgX0Rpc3RhbmNlVHlwZTsKCgogICAgIAoKICAgICAKCgogICAgICBfVGVt cG9yYXJ5X2J1ZmZlcjxfUmFuZG9tQWNjZXNzSXRlciwgX1ZhbHVlVHlwZT4gYnVmKF9fZmlyc3Qs IF9fbGFzdCk7CiAgICAgIGlmIChidWYuYmVnaW4oKSA9PSAwKQogICAgICAgIF9faW5wbGFjZV9z dGFibGVfc29ydChfX2ZpcnN0LCBfX2xhc3QsIF9fY29tcCk7CiAgICAgIGVsc2UKICAgICAgICBf X3N0YWJsZV9zb3J0X2FkYXB0aXZlKF9fZmlyc3QsIF9fbGFzdCwgYnVmLmJlZ2luKCksIF9EaXN0 YW5jZVR5cGUoYnVmLnNpemUoKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2Nv bXApOwogICAgfQojIDI1MDIgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIg MwogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyPgogICAgdm9pZAogICAgcGFy dGlhbF9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgX1Jh bmRvbUFjY2Vzc0l0ZXIgX19taWRkbGUsCiAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0 ZXIgX19sYXN0KQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxf UmFuZG9tQWNjZXNzSXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKCgogICAgIAoKICAgICAK CiAgICAgIG1ha2VfaGVhcChfX2ZpcnN0LCBfX21pZGRsZSk7CiAgICAgIGZvciAoX1JhbmRvbUFj Y2Vzc0l0ZXIgX19pID0gX19taWRkbGU7IF9faSA8IF9fbGFzdDsgKytfX2kpCiAgICAgICAgaWYg KCpfX2kgPCAqX19maXJzdCkKICAgICAgICAgIF9fcG9wX2hlYXAoX19maXJzdCwgX19taWRkbGUs IF9faSwgX1ZhbHVlVHlwZSgqX19pKSk7CiAgICAgIHNvcnRfaGVhcChfX2ZpcnN0LCBfX21pZGRs ZSk7CiAgICB9CiMgMjU0MCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAz CiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9Db21wYXJl PgogICAgdm9pZAogICAgcGFydGlhbF9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsCiAg ICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19taWRkbGUsCiAgICAgICAgICAgICAg ICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgIF9Db21wYXJlIF9f Y29tcCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRv bUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CgoKICAgICAKCiAgICAgCgoKICAg ICAgbWFrZV9oZWFwKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2NvbXApOwogICAgICBmb3IgKF9SYW5k b21BY2Nlc3NJdGVyIF9faSA9IF9fbWlkZGxlOyBfX2kgPCBfX2xhc3Q7ICsrX19pKQogICAgICAg IGlmIChfX2NvbXAoKl9faSwgKl9fZmlyc3QpKQogICAgICAgICAgX19wb3BfaGVhcChfX2ZpcnN0 LCBfX21pZGRsZSwgX19pLCBfVmFsdWVUeXBlKCpfX2kpLCBfX2NvbXApOwogICAgICBzb3J0X2hl YXAoX19maXJzdCwgX19taWRkbGUsIF9fY29tcCk7CiAgICB9CiMgMjU3OSAiL3Vzci9pbmNsdWRl L2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRl ciwgdHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXI+CiAgICBfUmFuZG9tQWNjZXNzSXRlcgogICAg cGFydGlhbF9zb3J0X2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwK ICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fcmVzdWx0X2ZpcnN0LAog ICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19yZXN1bHRfbGFzdCkKICAg IHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcj46OnZh bHVlX3R5cGUgX0lucHV0VmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9y X3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OnZhbHVlX3R5cGUgX091dHB1dFZhbHVlVHlwZTsK ICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+ OjpkaWZmZXJlbmNlX3R5cGUgX0Rpc3RhbmNlVHlwZTsKCgogICAgIAogICAgIAogICAgIAogICAg IAoKICAgICAgaWYgKF9fcmVzdWx0X2ZpcnN0ID09IF9fcmVzdWx0X2xhc3QpIHJldHVybiBfX3Jl c3VsdF9sYXN0OwogICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX3Jlc3VsdF9yZWFsX2xhc3QgPSBf X3Jlc3VsdF9maXJzdDsKICAgICAgd2hpbGUoX19maXJzdCAhPSBfX2xhc3QgJiYgX19yZXN1bHRf cmVhbF9sYXN0ICE9IF9fcmVzdWx0X2xhc3QpIHsKICAgICAgICAqX19yZXN1bHRfcmVhbF9sYXN0 ID0gKl9fZmlyc3Q7CiAgICAgICAgKytfX3Jlc3VsdF9yZWFsX2xhc3Q7CiAgICAgICAgKytfX2Zp cnN0OwogICAgICB9CiAgICAgIG1ha2VfaGVhcChfX3Jlc3VsdF9maXJzdCwgX19yZXN1bHRfcmVh bF9sYXN0KTsKICAgICAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KSB7CiAgICAgICAgaWYgKCpf X2ZpcnN0IDwgKl9fcmVzdWx0X2ZpcnN0KQogICAgICAgICAgX19hZGp1c3RfaGVhcChfX3Jlc3Vs dF9maXJzdCwgX0Rpc3RhbmNlVHlwZSgwKSwKICAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3Rh bmNlVHlwZShfX3Jlc3VsdF9yZWFsX2xhc3QgLSBfX3Jlc3VsdF9maXJzdCksCiAgICAgICAgICAg ICAgICAgICAgICAgIF9JbnB1dFZhbHVlVHlwZSgqX19maXJzdCkpOwogICAgICAgICsrX19maXJz dDsKICAgICAgfQogICAgICBzb3J0X2hlYXAoX19yZXN1bHRfZmlyc3QsIF9fcmVzdWx0X3JlYWxf bGFzdCk7CiAgICAgIHJldHVybiBfX3Jlc3VsdF9yZWFsX2xhc3Q7CiAgICB9CiMgMjYzMyAiL3Vz ci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUg X0lucHV0SXRlciwgdHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9Db21wYXJl PgogICAgX1JhbmRvbUFjY2Vzc0l0ZXIKICAgIHBhcnRpYWxfc29ydF9jb3B5KF9JbnB1dEl0ZXIg X19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9t QWNjZXNzSXRlciBfX3Jlc3VsdF9maXJzdCwKICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21B Y2Nlc3NJdGVyIF9fcmVzdWx0X2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBf X2NvbXApCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1 dEl0ZXI+Ojp2YWx1ZV90eXBlIF9JbnB1dFZhbHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFt ZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlIF9PdXRwdXRW YWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21B Y2Nlc3NJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9EaXN0YW5jZVR5cGU7CgoKICAgICAKICAgICAK ICAgICAKICAgICAKCgogICAgICBpZiAoX19yZXN1bHRfZmlyc3QgPT0gX19yZXN1bHRfbGFzdCkg cmV0dXJuIF9fcmVzdWx0X2xhc3Q7CiAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fcmVzdWx0X3Jl YWxfbGFzdCA9IF9fcmVzdWx0X2ZpcnN0OwogICAgICB3aGlsZShfX2ZpcnN0ICE9IF9fbGFzdCAm JiBfX3Jlc3VsdF9yZWFsX2xhc3QgIT0gX19yZXN1bHRfbGFzdCkgewogICAgICAgICpfX3Jlc3Vs dF9yZWFsX2xhc3QgPSAqX19maXJzdDsKICAgICAgICArK19fcmVzdWx0X3JlYWxfbGFzdDsKICAg ICAgICArK19fZmlyc3Q7CiAgICAgIH0KICAgICAgbWFrZV9oZWFwKF9fcmVzdWx0X2ZpcnN0LCBf X3Jlc3VsdF9yZWFsX2xhc3QsIF9fY29tcCk7CiAgICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFz dCkgewogICAgICAgIGlmIChfX2NvbXAoKl9fZmlyc3QsICpfX3Jlc3VsdF9maXJzdCkpCiAgICAg ICAgICBfX2FkanVzdF9oZWFwKF9fcmVzdWx0X2ZpcnN0LCBfRGlzdGFuY2VUeXBlKDApLAogICAg ICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2VUeXBlKF9fcmVzdWx0X3JlYWxfbGFzdCAtIF9f cmVzdWx0X2ZpcnN0KSwKICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0VmFsdWVUeXBlKCpf X2ZpcnN0KSwKICAgICAgICAgICAgICAgICAgICAgICAgX19jb21wKTsKICAgICAgICArK19fZmly c3Q7CiAgICAgIH0KICAgICAgc29ydF9oZWFwKF9fcmVzdWx0X2ZpcnN0LCBfX3Jlc3VsdF9yZWFs X2xhc3QsIF9fY29tcCk7CiAgICAgIHJldHVybiBfX3Jlc3VsdF9yZWFsX2xhc3Q7CiAgICB9CiMg MjY4NiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXI+CiAgICB2b2lkCiAgICBudGhfZWxlbWVudChfUmFu ZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIg X19udGgsCiAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QpCiAgICB7CiAg ICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6 dmFsdWVfdHlwZSBfVmFsdWVUeXBlOwoKCiAgICAgCiAgICAgCgogICAgICB3aGlsZSAoX19sYXN0 IC0gX19maXJzdCA+IDMpIHsKICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2N1dCA9CiAgICAg ICAgICBfX3VuZ3VhcmRlZF9wYXJ0aXRpb24oX19maXJzdCwgX19sYXN0LAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIF9WYWx1ZVR5cGUoX19tZWRpYW4oKl9fZmlyc3QsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKF9fZmlyc3QgKyAo X19sYXN0IC0gX19maXJzdCkvMiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAqKF9fbGFzdCAtIDEpKSkpOwogICAgICAgIGlmIChfX2N1dCA8PSBf X250aCkKICAgICAgICAgIF9fZmlyc3QgPSBfX2N1dDsKICAgICAgICBlbHNlCiAgICAgICAgICBf X2xhc3QgPSBfX2N1dDsKICAgICAgfQogICAgICBfX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9f bGFzdCk7CiAgICB9CiMgMjcyOCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5o IiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9Db21w YXJlPgogICAgdm9pZAogICAgbnRoX2VsZW1lbnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwK ICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbnRoLAogICAgICAgICAgICAgICAg X1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Nv bXBhcmUgX19jb21wKQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0 czxfUmFuZG9tQWNjZXNzSXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKCgogICAgIAogICAg IAoKCiAgICAgIHdoaWxlIChfX2xhc3QgLSBfX2ZpcnN0ID4gMykgewogICAgICAgIF9SYW5kb21B Y2Nlc3NJdGVyIF9fY3V0ID0KICAgICAgICAgIF9fdW5ndWFyZGVkX3BhcnRpdGlvbihfX2ZpcnN0 LCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1ZhbHVlVHlwZShfX21l ZGlhbigqX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICooX19maXJzdCArIChfX2xhc3QgLSBfX2ZpcnN0KS8yKSwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICooX19sYXN0IC0gMSksCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbXAp KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbXApOwogICAgICAgIGlmIChf X2N1dCA8PSBfX250aCkKICAgICAgICAgIF9fZmlyc3QgPSBfX2N1dDsKICAgICAgICBlbHNlCiAg ICAgICAgICBfX2xhc3QgPSBfX2N1dDsKICAgICAgfQogICAgICBfX2luc2VydGlvbl9zb3J0KF9f Zmlyc3QsIF9fbGFzdCwgX19jb21wKTsKICAgIH0KIyAyNzY4ICIvdXNyL2luY2x1ZGUvYysrLzMu Mi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5 cGVuYW1lIF9UcD4KICAgIF9Gb3J3YXJkSXRlcgogICAgbG93ZXJfYm91bmQoX0ZvcndhcmRJdGVy IF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsIGNvbnN0IF9UcCYgX192YWwpCiAgICB7CiAg ICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OnZhbHVl X3R5cGUgX1ZhbHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8 X0ZvcndhcmRJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9EaXN0YW5jZVR5cGU7CgoKCgoKCiAgICAg CiAgICAgCiAgICAgCgogICAgICBfRGlzdGFuY2VUeXBlIF9fbGVuID0gZGlzdGFuY2UoX19maXJz dCwgX19sYXN0KTsKICAgICAgX0Rpc3RhbmNlVHlwZSBfX2hhbGY7CiAgICAgIF9Gb3J3YXJkSXRl ciBfX21pZGRsZTsKCiAgICAgIHdoaWxlIChfX2xlbiA+IDApIHsKICAgICAgICBfX2hhbGYgPSBf X2xlbiA+PiAxOwogICAgICAgIF9fbWlkZGxlID0gX19maXJzdDsKICAgICAgICBhZHZhbmNlKF9f bWlkZGxlLCBfX2hhbGYpOwogICAgICAgIGlmICgqX19taWRkbGUgPCBfX3ZhbCkgewogICAgICAg ICAgX19maXJzdCA9IF9fbWlkZGxlOwogICAgICAgICAgKytfX2ZpcnN0OwogICAgICAgICAgX19s ZW4gPSBfX2xlbiAtIF9faGFsZiAtIDE7CiAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICAg IF9fbGVuID0gX19oYWxmOwogICAgICB9CiAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgfQojIDI4 MTYgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5 cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAg IF9Gb3J3YXJkSXRlcgogICAgbG93ZXJfYm91bmQoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3 YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9fdmFsLCBfQ29tcGFy ZSBfX2NvbXApCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9G b3J3YXJkSXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFt ZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9EaXN0YW5j ZVR5cGU7CgoKICAgICAKICAgICAKCiAgICAgIF9EaXN0YW5jZVR5cGUgX19sZW4gPSBkaXN0YW5j ZShfX2ZpcnN0LCBfX2xhc3QpOwogICAgICBfRGlzdGFuY2VUeXBlIF9faGFsZjsKICAgICAgX0Zv cndhcmRJdGVyIF9fbWlkZGxlOwoKICAgICAgd2hpbGUgKF9fbGVuID4gMCkgewogICAgICAgIF9f aGFsZiA9IF9fbGVuID4+IDE7CiAgICAgICAgX19taWRkbGUgPSBfX2ZpcnN0OwogICAgICAgIGFk dmFuY2UoX19taWRkbGUsIF9faGFsZik7CiAgICAgICAgaWYgKF9fY29tcCgqX19taWRkbGUsIF9f dmFsKSkgewogICAgICAgICAgX19maXJzdCA9IF9fbWlkZGxlOwogICAgICAgICAgKytfX2ZpcnN0 OwogICAgICAgICAgX19sZW4gPSBfX2xlbiAtIF9faGFsZiAtIDE7CiAgICAgICAgfQogICAgICAg IGVsc2UKICAgICAgICAgIF9fbGVuID0gX19oYWxmOwogICAgICB9CiAgICAgIHJldHVybiBfX2Zp cnN0OwogICAgfQojIDI4NTYgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIg MwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1RwPgogICAgX0Zv cndhcmRJdGVyCiAgICB1cHBlcl9ib3VuZChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJ dGVyIF9fbGFzdCwgY29uc3QgX1RwJiBfX3ZhbCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFt ZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOwog ICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+OjpkaWZm ZXJlbmNlX3R5cGUgX0Rpc3RhbmNlVHlwZTsKCgoKICAgICAKICAgICAKICAgICAKCiAgICAgIF9E aXN0YW5jZVR5cGUgX19sZW4gPSBkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QpOwogICAgICBfRGlz dGFuY2VUeXBlIF9faGFsZjsKICAgICAgX0ZvcndhcmRJdGVyIF9fbWlkZGxlOwoKICAgICAgd2hp bGUgKF9fbGVuID4gMCkgewogICAgICAgIF9faGFsZiA9IF9fbGVuID4+IDE7CiAgICAgICAgX19t aWRkbGUgPSBfX2ZpcnN0OwogICAgICAgIGFkdmFuY2UoX19taWRkbGUsIF9faGFsZik7CiAgICAg ICAgaWYgKF9fdmFsIDwgKl9fbWlkZGxlKQogICAgICAgICAgX19sZW4gPSBfX2hhbGY7CiAgICAg ICAgZWxzZSB7CiAgICAgICAgICBfX2ZpcnN0ID0gX19taWRkbGU7CiAgICAgICAgICArK19fZmly c3Q7CiAgICAgICAgICBfX2xlbiA9IF9fbGVuIC0gX19oYWxmIC0gMTsKICAgICAgICB9CiAgICAg IH0KICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICB9CiMgMjkwMSAiL3Vzci9pbmNsdWRlL2MrKy8z LjIvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0 eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgX0ZvcndhcmRJdGVyCiAgICB1cHBl cl9ib3VuZChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAg ICAgICAgICAgIGNvbnN0IF9UcCYgX192YWwsIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAg dHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6dmFsdWVfdHlw ZSBfVmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9y d2FyZEl0ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX0Rpc3RhbmNlVHlwZTsKCgogICAgIAogICAgIAoK ICAgICAgX0Rpc3RhbmNlVHlwZSBfX2xlbiA9IGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCk7CiAg ICAgIF9EaXN0YW5jZVR5cGUgX19oYWxmOwogICAgICBfRm9yd2FyZEl0ZXIgX19taWRkbGU7Cgog ICAgICB3aGlsZSAoX19sZW4gPiAwKSB7CiAgICAgICAgX19oYWxmID0gX19sZW4gPj4gMTsKICAg ICAgICBfX21pZGRsZSA9IF9fZmlyc3Q7CiAgICAgICAgYWR2YW5jZShfX21pZGRsZSwgX19oYWxm KTsKICAgICAgICBpZiAoX19jb21wKF9fdmFsLCAqX19taWRkbGUpKQogICAgICAgICAgX19sZW4g PSBfX2hhbGY7CiAgICAgICAgZWxzZSB7CiAgICAgICAgICBfX2ZpcnN0ID0gX19taWRkbGU7CiAg ICAgICAgICArK19fZmlyc3Q7CiAgICAgICAgICBfX2xlbiA9IF9fbGVuIC0gX19oYWxmIC0gMTsK ICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICB9CiMgMjk0OCAiL3Vz ci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUg X0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfVHA+CiAgICBwYWlyPF9Gb3J3YXJkSXRlciwgX0Zvcndh cmRJdGVyPgogICAgZXF1YWxfcmFuZ2UoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRl ciBfX2xhc3QsIGNvbnN0IF9UcCYgX192YWwpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUg aXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKICAg ICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6ZGlmZmVy ZW5jZV90eXBlIF9EaXN0YW5jZVR5cGU7CgoKCiAgICAgCiAgICAgCiAgICAgCgogICAgICBfRGlz dGFuY2VUeXBlIF9fbGVuID0gZGlzdGFuY2UoX19maXJzdCwgX19sYXN0KTsKICAgICAgX0Rpc3Rh bmNlVHlwZSBfX2hhbGY7CiAgICAgIF9Gb3J3YXJkSXRlciBfX21pZGRsZSwgX19sZWZ0LCBfX3Jp Z2h0OwoKICAgICAgd2hpbGUgKF9fbGVuID4gMCkgewogICAgICAgIF9faGFsZiA9IF9fbGVuID4+ IDE7CiAgICAgICAgX19taWRkbGUgPSBfX2ZpcnN0OwogICAgICAgIGFkdmFuY2UoX19taWRkbGUs IF9faGFsZik7CiAgICAgICAgaWYgKCpfX21pZGRsZSA8IF9fdmFsKSB7CiAgICAgICAgICBfX2Zp cnN0ID0gX19taWRkbGU7CiAgICAgICAgICArK19fZmlyc3Q7CiAgICAgICAgICBfX2xlbiA9IF9f bGVuIC0gX19oYWxmIC0gMTsKICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAoX192YWwgPCAqX19t aWRkbGUpCiAgICAgICAgICBfX2xlbiA9IF9faGFsZjsKICAgICAgICBlbHNlIHsKICAgICAgICAg IF9fbGVmdCA9IGxvd2VyX2JvdW5kKF9fZmlyc3QsIF9fbWlkZGxlLCBfX3ZhbCk7CiAgICAgICAg ICBhZHZhbmNlKF9fZmlyc3QsIF9fbGVuKTsKICAgICAgICAgIF9fcmlnaHQgPSB1cHBlcl9ib3Vu ZCgrK19fbWlkZGxlLCBfX2ZpcnN0LCBfX3ZhbCk7CiAgICAgICAgICByZXR1cm4gcGFpcjxfRm9y d2FyZEl0ZXIsIF9Gb3J3YXJkSXRlcj4oX19sZWZ0LCBfX3JpZ2h0KTsKICAgICAgICB9CiAgICAg IH0KICAgICAgcmV0dXJuIHBhaXI8X0ZvcndhcmRJdGVyLCBfRm9yd2FyZEl0ZXI+KF9fZmlyc3Qs IF9fZmlyc3QpOwogICAgfQojIDMwMDMgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2Fs Z28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1RwLCB0 eXBlbmFtZSBfQ29tcGFyZT4KICAgIHBhaXI8X0ZvcndhcmRJdGVyLCBfRm9yd2FyZEl0ZXI+CiAg ICBlcXVhbF9yYW5nZShfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwg Y29uc3QgX1RwJiBfX3ZhbCwKICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKICAgIHsK ICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6dmFs dWVfdHlwZSBfVmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0 czxfRm9yd2FyZEl0ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX0Rpc3RhbmNlVHlwZTsKCgogICAgIAog ICAgIAogICAgIAoKICAgICAgX0Rpc3RhbmNlVHlwZSBfX2xlbiA9IGRpc3RhbmNlKF9fZmlyc3Qs IF9fbGFzdCk7CiAgICAgIF9EaXN0YW5jZVR5cGUgX19oYWxmOwogICAgICBfRm9yd2FyZEl0ZXIg X19taWRkbGUsIF9fbGVmdCwgX19yaWdodDsKCiAgICAgIHdoaWxlIChfX2xlbiA+IDApIHsKICAg ICAgICBfX2hhbGYgPSBfX2xlbiA+PiAxOwogICAgICAgIF9fbWlkZGxlID0gX19maXJzdDsKICAg ICAgICBhZHZhbmNlKF9fbWlkZGxlLCBfX2hhbGYpOwogICAgICAgIGlmIChfX2NvbXAoKl9fbWlk ZGxlLCBfX3ZhbCkpIHsKICAgICAgICAgIF9fZmlyc3QgPSBfX21pZGRsZTsKICAgICAgICAgICsr X19maXJzdDsKICAgICAgICAgIF9fbGVuID0gX19sZW4gLSBfX2hhbGYgLSAxOwogICAgICAgIH0K ICAgICAgICBlbHNlIGlmIChfX2NvbXAoX192YWwsICpfX21pZGRsZSkpCiAgICAgICAgICBfX2xl biA9IF9faGFsZjsKICAgICAgICBlbHNlIHsKICAgICAgICAgIF9fbGVmdCA9IGxvd2VyX2JvdW5k KF9fZmlyc3QsIF9fbWlkZGxlLCBfX3ZhbCwgX19jb21wKTsKICAgICAgICAgIGFkdmFuY2UoX19m aXJzdCwgX19sZW4pOwogICAgICAgICAgX19yaWdodCA9IHVwcGVyX2JvdW5kKCsrX19taWRkbGUs IF9fZmlyc3QsIF9fdmFsLCBfX2NvbXApOwogICAgICAgICAgcmV0dXJuIHBhaXI8X0ZvcndhcmRJ dGVyLCBfRm9yd2FyZEl0ZXI+KF9fbGVmdCwgX19yaWdodCk7CiAgICAgICAgfQogICAgICB9CiAg ICAgIHJldHVybiBwYWlyPF9Gb3J3YXJkSXRlciwgX0ZvcndhcmRJdGVyPihfX2ZpcnN0LCBfX2Zp cnN0KTsKICAgIH0KIyAzMDUyICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgi IDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9UcD4KICAgIGJv b2wKICAgIGJpbmFyeV9zZWFyY2goX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBf X2xhc3QsCiAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX192YWwpCiAgICB7CgoKICAgICAK ICAgICAKCiAgICAgCgogICAgICBfRm9yd2FyZEl0ZXIgX19pID0gbG93ZXJfYm91bmQoX19maXJz dCwgX19sYXN0LCBfX3ZhbCk7CiAgICAgIHJldHVybiBfX2kgIT0gX19sYXN0ICYmICEoX192YWwg PCAqX19pKTsKICAgIH0KIyAzMDgzICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdv LmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9UcCwgdHlw ZW5hbWUgX0NvbXBhcmU+CiAgICBib29sCiAgICBiaW5hcnlfc2VhcmNoKF9Gb3J3YXJkSXRlciBf X2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICBjb25zdCBfVHAm IF9fdmFsLCBfQ29tcGFyZSBfX2NvbXApCiAgICB7CgogICAgIAogICAgIAoKICAgICAKCgogICAg ICBfRm9yd2FyZEl0ZXIgX19pID0gbG93ZXJfYm91bmQoX19maXJzdCwgX19sYXN0LCBfX3ZhbCwg X19jb21wKTsKICAgICAgcmV0dXJuIF9faSAhPSBfX2xhc3QgJiYgIV9fY29tcChfX3ZhbCwgKl9f aSk7CiAgICB9CiMgMzExNSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAz CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXIyLCB0 eXBlbmFtZSBfT3V0cHV0SXRlcj4KICAgIF9PdXRwdXRJdGVyCiAgICBtZXJnZShfSW5wdXRJdGVy MSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgIF9JbnB1dEl0ZXIyIF9f Zmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1 bHQpCiAgICB7CgogICAgIAogICAgIAogICAgIAoKICAgICAKCgogICAgIAoKCiAgICAgIHdoaWxl IChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpIHsKICAgICAgICBp ZiAoKl9fZmlyc3QyIDwgKl9fZmlyc3QxKSB7CiAgICAgICAgICAqX19yZXN1bHQgPSAqX19maXJz dDI7CiAgICAgICAgICArK19fZmlyc3QyOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAg ICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsKICAgICAgICAgICsrX19maXJzdDE7CiAgICAgICAg fQogICAgICAgICsrX19yZXN1bHQ7CiAgICAgIH0KICAgICAgcmV0dXJuIGNvcHkoX19maXJzdDIs IF9fbGFzdDIsIGNvcHkoX19maXJzdDEsIF9fbGFzdDEsIF9fcmVzdWx0KSk7CiAgICB9CiMgMzE2 NiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0lucHV0SXRlcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXIyLCB0eXBlbmFtZSBfT3V0cHV0 SXRlciwKICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIF9PdXRwdXRJdGVyCiAgICBt ZXJnZShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAg IF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgX091 dHB1dEl0ZXIgX19yZXN1bHQsIF9Db21wYXJlIF9fY29tcCkKICAgIHsKCiAgICAgCiAgICAgCiAg ICAgCgoKICAgICAKCiAgICAgCgoKCiAgICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYm IF9fZmlyc3QyICE9IF9fbGFzdDIpIHsKICAgICAgICBpZiAoX19jb21wKCpfX2ZpcnN0MiwgKl9f Zmlyc3QxKSkgewogICAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QyOwogICAgICAgICAgKytf X2ZpcnN0MjsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAqX19yZXN1bHQgPSAq X19maXJzdDE7CiAgICAgICAgICArK19fZmlyc3QxOwogICAgICAgIH0KICAgICAgICArK19fcmVz dWx0OwogICAgICB9CiAgICAgIHJldHVybiBjb3B5KF9fZmlyc3QyLCBfX2xhc3QyLCBjb3B5KF9f Zmlyc3QxLCBfX2xhc3QxLCBfX3Jlc3VsdCkpOwogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVu YW1lIF9CaWRpcmVjdGlvbmFsSXRlciwgdHlwZW5hbWUgX0Rpc3RhbmNlPgogICAgdm9pZAogICAg X19tZXJnZV93aXRob3V0X2J1ZmZlcihfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbWlkZGxlLAogICAgICAg ICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0LAogICAgICAgICAg ICAgICAgICAgICAgICAgICBfRGlzdGFuY2UgX19sZW4xLCBfRGlzdGFuY2UgX19sZW4yKQogICAg ewogICAgICBpZiAoX19sZW4xID09IDAgfHwgX19sZW4yID09IDApCiAgICAgICAgcmV0dXJuOwog ICAgICBpZiAoX19sZW4xICsgX19sZW4yID09IDIpIHsKICAgICAgICBpZiAoKl9fbWlkZGxlIDwg Kl9fZmlyc3QpCiAgICAgICAgICAgICAgaXRlcl9zd2FwKF9fZmlyc3QsIF9fbWlkZGxlKTsKICAg ICAgICByZXR1cm47CiAgICAgIH0KICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3RfY3V0 ID0gX19maXJzdDsKICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fc2Vjb25kX2N1dCA9IF9fbWlk ZGxlOwogICAgICBfRGlzdGFuY2UgX19sZW4xMSA9IDA7CiAgICAgIF9EaXN0YW5jZSBfX2xlbjIy ID0gMDsKICAgICAgaWYgKF9fbGVuMSA+IF9fbGVuMikgewogICAgICAgIF9fbGVuMTEgPSBfX2xl bjEgLyAyOwogICAgICAgIGFkdmFuY2UoX19maXJzdF9jdXQsIF9fbGVuMTEpOwogICAgICAgIF9f c2Vjb25kX2N1dCA9IGxvd2VyX2JvdW5kKF9fbWlkZGxlLCBfX2xhc3QsICpfX2ZpcnN0X2N1dCk7 CiAgICAgICAgX19sZW4yMiA9IGRpc3RhbmNlKF9fbWlkZGxlLCBfX3NlY29uZF9jdXQpOwogICAg ICB9CiAgICAgIGVsc2UgewogICAgICAgIF9fbGVuMjIgPSBfX2xlbjIgLyAyOwogICAgICAgIGFk dmFuY2UoX19zZWNvbmRfY3V0LCBfX2xlbjIyKTsKICAgICAgICBfX2ZpcnN0X2N1dCA9IHVwcGVy X2JvdW5kKF9fZmlyc3QsIF9fbWlkZGxlLCAqX19zZWNvbmRfY3V0KTsKICAgICAgICBfX2xlbjEx ID0gZGlzdGFuY2UoX19maXJzdCwgX19maXJzdF9jdXQpOwogICAgICB9CiAgICAgIHJvdGF0ZShf X2ZpcnN0X2N1dCwgX19taWRkbGUsIF9fc2Vjb25kX2N1dCk7CiAgICAgIF9CaWRpcmVjdGlvbmFs SXRlciBfX25ld19taWRkbGUgPSBfX2ZpcnN0X2N1dDsKICAgICAgYWR2YW5jZShfX25ld19taWRk bGUsIGRpc3RhbmNlKF9fbWlkZGxlLCBfX3NlY29uZF9jdXQpKTsKICAgICAgX19tZXJnZV93aXRo b3V0X2J1ZmZlcihfX2ZpcnN0LCBfX2ZpcnN0X2N1dCwgX19uZXdfbWlkZGxlLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgIF9fbGVuMTEsIF9fbGVuMjIpOwogICAgICBfX21lcmdlX3dpdGhv dXRfYnVmZmVyKF9fbmV3X21pZGRsZSwgX19zZWNvbmRfY3V0LCBfX2xhc3QsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgX19sZW4xIC0gX19sZW4xMSwgX19sZW4yIC0gX19sZW4yMik7CiAg ICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyLCB0eXBlbmFt ZSBfRGlzdGFuY2UsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgdm9pZAogICAgX19tZXJnZV93aXRo b3V0X2J1ZmZlcihfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbWlkZGxlLAogICAgICAgICAgICAgICAgICAg ICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAg ICAgICBfRGlzdGFuY2UgX19sZW4xLCBfRGlzdGFuY2UgX19sZW4yLAogICAgICAgICAgICAgICAg ICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAgIGlmIChfX2xlbjEgPT0gMCB8 fCBfX2xlbjIgPT0gMCkKICAgICAgICByZXR1cm47CiAgICAgIGlmIChfX2xlbjEgKyBfX2xlbjIg PT0gMikgewogICAgICAgIGlmIChfX2NvbXAoKl9fbWlkZGxlLCAqX19maXJzdCkpCiAgICAgICAg ICAgICAgaXRlcl9zd2FwKF9fZmlyc3QsIF9fbWlkZGxlKTsKICAgICAgICByZXR1cm47CiAgICAg IH0KICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3RfY3V0ID0gX19maXJzdDsKICAgICAg X0JpZGlyZWN0aW9uYWxJdGVyIF9fc2Vjb25kX2N1dCA9IF9fbWlkZGxlOwogICAgICBfRGlzdGFu Y2UgX19sZW4xMSA9IDA7CiAgICAgIF9EaXN0YW5jZSBfX2xlbjIyID0gMDsKICAgICAgaWYgKF9f bGVuMSA+IF9fbGVuMikgewogICAgICAgIF9fbGVuMTEgPSBfX2xlbjEgLyAyOwogICAgICAgIGFk dmFuY2UoX19maXJzdF9jdXQsIF9fbGVuMTEpOwogICAgICAgIF9fc2Vjb25kX2N1dCA9IGxvd2Vy X2JvdW5kKF9fbWlkZGxlLCBfX2xhc3QsICpfX2ZpcnN0X2N1dCwgX19jb21wKTsKICAgICAgICBf X2xlbjIyID0gZGlzdGFuY2UoX19taWRkbGUsIF9fc2Vjb25kX2N1dCk7CiAgICAgIH0KICAgICAg ZWxzZSB7CiAgICAgICAgX19sZW4yMiA9IF9fbGVuMiAvIDI7CiAgICAgICAgYWR2YW5jZShfX3Nl Y29uZF9jdXQsIF9fbGVuMjIpOwogICAgICAgIF9fZmlyc3RfY3V0ID0gdXBwZXJfYm91bmQoX19m aXJzdCwgX19taWRkbGUsICpfX3NlY29uZF9jdXQsIF9fY29tcCk7CiAgICAgICAgX19sZW4xMSA9 IGRpc3RhbmNlKF9fZmlyc3QsIF9fZmlyc3RfY3V0KTsKICAgICAgfQogICAgICByb3RhdGUoX19m aXJzdF9jdXQsIF9fbWlkZGxlLCBfX3NlY29uZF9jdXQpOwogICAgICBfQmlkaXJlY3Rpb25hbEl0 ZXIgX19uZXdfbWlkZGxlID0gX19maXJzdF9jdXQ7CiAgICAgIGFkdmFuY2UoX19uZXdfbWlkZGxl LCBkaXN0YW5jZShfX21pZGRsZSwgX19zZWNvbmRfY3V0KSk7CiAgICAgIF9fbWVyZ2Vfd2l0aG91 dF9idWZmZXIoX19maXJzdCwgX19maXJzdF9jdXQsIF9fbmV3X21pZGRsZSwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBfX2xlbjExLCBfX2xlbjIyLCBfX2NvbXApOwogICAgICBfX21lcmdl X3dpdGhvdXRfYnVmZmVyKF9fbmV3X21pZGRsZSwgX19zZWNvbmRfY3V0LCBfX2xhc3QsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgX19sZW4xIC0gX19sZW4xMSwgX19sZW4yIC0gX19sZW4y MiwgX19jb21wKTsKICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25h bEl0ZXIxLCB0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIyLAogICAgICAgICAgIHR5cGVuYW1l IF9EaXN0YW5jZT4KICAgIF9CaWRpcmVjdGlvbmFsSXRlcjEKICAgIF9fcm90YXRlX2FkYXB0aXZl KF9CaWRpcmVjdGlvbmFsSXRlcjEgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgIF9CaWRp cmVjdGlvbmFsSXRlcjEgX19taWRkbGUsCiAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rp b25hbEl0ZXIxIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSBfX2xlbjEs IF9EaXN0YW5jZSBfX2xlbjIsCiAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0 ZXIyIF9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlIF9fYnVmZmVyX3Np emUpCiAgICB7CiAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19idWZmZXJfZW5kOwogICAgICBp ZiAoX19sZW4xID4gX19sZW4yICYmIF9fbGVuMiA8PSBfX2J1ZmZlcl9zaXplKSB7CiAgICAgICAg X19idWZmZXJfZW5kID0gY29weShfX21pZGRsZSwgX19sYXN0LCBfX2J1ZmZlcik7CiAgICAgICAg Y29weV9iYWNrd2FyZChfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0KTsKICAgICAgICByZXR1cm4g Y29weShfX2J1ZmZlciwgX19idWZmZXJfZW5kLCBfX2ZpcnN0KTsKICAgICAgfQogICAgICBlbHNl IGlmIChfX2xlbjEgPD0gX19idWZmZXJfc2l6ZSkgewogICAgICAgIF9fYnVmZmVyX2VuZCA9IGNv cHkoX19maXJzdCwgX19taWRkbGUsIF9fYnVmZmVyKTsKICAgICAgICBjb3B5KF9fbWlkZGxlLCBf X2xhc3QsIF9fZmlyc3QpOwogICAgICAgIHJldHVybiBjb3B5X2JhY2t3YXJkKF9fYnVmZmVyLCBf X2J1ZmZlcl9lbmQsIF9fbGFzdCk7CiAgICAgIH0KICAgICAgZWxzZSB7CiAgICAgICAgcm90YXRl KF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QpOwogICAgICAgIGFkdmFuY2UoX19maXJzdCwgZGlz dGFuY2UoX19taWRkbGUsIF9fbGFzdCkpOwogICAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgICB9 CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyMSwgdHlw ZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyMiwKICAgICAgICAgICB0eXBlbmFtZSBfQmlkaXJlY3Rp b25hbEl0ZXIzPgogICAgX0JpZGlyZWN0aW9uYWxJdGVyMwogICAgX19tZXJnZV9iYWNrd2FyZChf QmlkaXJlY3Rpb25hbEl0ZXIxIF9fZmlyc3QxLCBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fbGFzdDEs CiAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19maXJzdDIsIF9CaWRp cmVjdGlvbmFsSXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9u YWxJdGVyMyBfX3Jlc3VsdCkKICAgIHsKICAgICAgaWYgKF9fZmlyc3QxID09IF9fbGFzdDEpCiAg ICAgICAgcmV0dXJuIGNvcHlfYmFja3dhcmQoX19maXJzdDIsIF9fbGFzdDIsIF9fcmVzdWx0KTsK ICAgICAgaWYgKF9fZmlyc3QyID09IF9fbGFzdDIpCiAgICAgICAgcmV0dXJuIGNvcHlfYmFja3dh cmQoX19maXJzdDEsIF9fbGFzdDEsIF9fcmVzdWx0KTsKICAgICAgLS1fX2xhc3QxOwogICAgICAt LV9fbGFzdDI7CiAgICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgaWYgKCpfX2xhc3QyIDwgKl9f bGFzdDEpIHsKICAgICAgICAgICotLV9fcmVzdWx0ID0gKl9fbGFzdDE7CiAgICAgICAgICBpZiAo X19maXJzdDEgPT0gX19sYXN0MSkKICAgICAgICAgICAgcmV0dXJuIGNvcHlfYmFja3dhcmQoX19m aXJzdDIsICsrX19sYXN0MiwgX19yZXN1bHQpOwogICAgICAgICAgLS1fX2xhc3QxOwogICAgICAg IH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICotLV9fcmVzdWx0ID0gKl9fbGFzdDI7CiAgICAg ICAgICBpZiAoX19maXJzdDIgPT0gX19sYXN0MikKICAgICAgICAgICAgcmV0dXJuIGNvcHlfYmFj a3dhcmQoX19maXJzdDEsICsrX19sYXN0MSwgX19yZXN1bHQpOwogICAgICAgICAgLS1fX2xhc3Qy OwogICAgICAgIH0KICAgICAgfQogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRp cmVjdGlvbmFsSXRlcjEsIHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcjIsCiAgICAgICAgICAg dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyMywgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBfQmlk aXJlY3Rpb25hbEl0ZXIzCiAgICBfX21lcmdlX2JhY2t3YXJkKF9CaWRpcmVjdGlvbmFsSXRlcjEg X19maXJzdDEsIF9CaWRpcmVjdGlvbmFsSXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAg ICAgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX2ZpcnN0MiwgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX2xh c3QyLAogICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIzIF9fcmVzdWx0LAog ICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAgIGlmIChfX2Zp cnN0MSA9PSBfX2xhc3QxKQogICAgICAgIHJldHVybiBjb3B5X2JhY2t3YXJkKF9fZmlyc3QyLCBf X2xhc3QyLCBfX3Jlc3VsdCk7CiAgICAgIGlmIChfX2ZpcnN0MiA9PSBfX2xhc3QyKQogICAgICAg IHJldHVybiBjb3B5X2JhY2t3YXJkKF9fZmlyc3QxLCBfX2xhc3QxLCBfX3Jlc3VsdCk7CiAgICAg IC0tX19sYXN0MTsKICAgICAgLS1fX2xhc3QyOwogICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAg IGlmIChfX2NvbXAoKl9fbGFzdDIsICpfX2xhc3QxKSkgewogICAgICAgICAgKi0tX19yZXN1bHQg PSAqX19sYXN0MTsKICAgICAgICAgIGlmIChfX2ZpcnN0MSA9PSBfX2xhc3QxKQogICAgICAgICAg ICByZXR1cm4gY29weV9iYWNrd2FyZChfX2ZpcnN0MiwgKytfX2xhc3QyLCBfX3Jlc3VsdCk7CiAg ICAgICAgICAtLV9fbGFzdDE7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgKi0t X19yZXN1bHQgPSAqX19sYXN0MjsKICAgICAgICAgIGlmIChfX2ZpcnN0MiA9PSBfX2xhc3QyKQog ICAgICAgICAgICByZXR1cm4gY29weV9iYWNrd2FyZChfX2ZpcnN0MSwgKytfX2xhc3QxLCBfX3Jl c3VsdCk7CiAgICAgICAgICAtLV9fbGFzdDI7CiAgICAgICAgfQogICAgICB9CiAgICB9CgoKCgoK CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyLCB0eXBlbmFtZSBfRGlzdGFu Y2UsIHR5cGVuYW1lIF9Qb2ludGVyPgogICAgdm9pZAogICAgX19tZXJnZV9hZGFwdGl2ZShfQmlk aXJlY3Rpb25hbEl0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9u YWxJdGVyIF9fbWlkZGxlLAogICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIg X19sYXN0LAogICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UgX19sZW4xLCBfRGlzdGFuY2Ug X19sZW4yLAogICAgICAgICAgICAgICAgICAgICBfUG9pbnRlciBfX2J1ZmZlciwgX0Rpc3RhbmNl IF9fYnVmZmVyX3NpemUpCiAgICB7CiAgICAgICAgICBpZiAoX19sZW4xIDw9IF9fbGVuMiAmJiBf X2xlbjEgPD0gX19idWZmZXJfc2l6ZSkgewogICAgICAgICAgICBfUG9pbnRlciBfX2J1ZmZlcl9l bmQgPSBjb3B5KF9fZmlyc3QsIF9fbWlkZGxlLCBfX2J1ZmZlcik7CiAgICAgICAgICAgIG1lcmdl KF9fYnVmZmVyLCBfX2J1ZmZlcl9lbmQsIF9fbWlkZGxlLCBfX2xhc3QsIF9fZmlyc3QpOwogICAg ICAgICAgfQogICAgICAgICAgZWxzZSBpZiAoX19sZW4yIDw9IF9fYnVmZmVyX3NpemUpIHsKICAg ICAgICAgICAgX1BvaW50ZXIgX19idWZmZXJfZW5kID0gY29weShfX21pZGRsZSwgX19sYXN0LCBf X2J1ZmZlcik7CiAgICAgICAgICAgIF9fbWVyZ2VfYmFja3dhcmQoX19maXJzdCwgX19taWRkbGUs IF9fYnVmZmVyLCBfX2J1ZmZlcl9lbmQsIF9fbGFzdCk7CiAgICAgICAgICB9CiAgICAgICAgICBl bHNlIHsKICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3RfY3V0ID0gX19maXJz dDsKICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fc2Vjb25kX2N1dCA9IF9fbWlkZGxl OwogICAgICAgICAgICBfRGlzdGFuY2UgX19sZW4xMSA9IDA7CiAgICAgICAgICAgIF9EaXN0YW5j ZSBfX2xlbjIyID0gMDsKICAgICAgICAgICAgaWYgKF9fbGVuMSA+IF9fbGVuMikgewogICAgICAg ICAgICAgICAgICBfX2xlbjExID0gX19sZW4xIC8gMjsKICAgICAgICAgICAgICAgICAgYWR2YW5j ZShfX2ZpcnN0X2N1dCwgX19sZW4xMSk7CiAgICAgICAgICAgICAgICAgIF9fc2Vjb25kX2N1dCA9 IGxvd2VyX2JvdW5kKF9fbWlkZGxlLCBfX2xhc3QsICpfX2ZpcnN0X2N1dCk7CiAgICAgICAgICAg ICAgICAgIF9fbGVuMjIgPSBkaXN0YW5jZShfX21pZGRsZSwgX19zZWNvbmRfY3V0KTsKICAgICAg ICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgX19sZW4yMiA9IF9f bGVuMiAvIDI7CiAgICAgICAgICAgICAgICAgIGFkdmFuY2UoX19zZWNvbmRfY3V0LCBfX2xlbjIy KTsKICAgICAgICAgICAgICAgICAgX19maXJzdF9jdXQgPSB1cHBlcl9ib3VuZChfX2ZpcnN0LCBf X21pZGRsZSwgKl9fc2Vjb25kX2N1dCk7CiAgICAgICAgICAgICAgICAgIF9fbGVuMTEgPSBkaXN0 YW5jZShfX2ZpcnN0LCBfX2ZpcnN0X2N1dCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgX0Jp ZGlyZWN0aW9uYWxJdGVyIF9fbmV3X21pZGRsZSA9CiAgICAgICAgICAgICAgICAgIF9fcm90YXRl X2FkYXB0aXZlKF9fZmlyc3RfY3V0LCBfX21pZGRsZSwgX19zZWNvbmRfY3V0LAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xlbjEgLSBfX2xlbjExLCBfX2xlbjIyLCBfX2J1 ZmZlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19idWZmZXJfc2l6ZSk7 CiAgICAgICAgICAgIF9fbWVyZ2VfYWRhcHRpdmUoX19maXJzdCwgX19maXJzdF9jdXQsIF9fbmV3 X21pZGRsZSwgX19sZW4xMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xlbjIyLCBf X2J1ZmZlciwgX19idWZmZXJfc2l6ZSk7CiAgICAgICAgICAgIF9fbWVyZ2VfYWRhcHRpdmUoX19u ZXdfbWlkZGxlLCBfX3NlY29uZF9jdXQsIF9fbGFzdCwgX19sZW4xIC0gX19sZW4xMSwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBfX2xlbjIgLSBfX2xlbjIyLCBfX2J1ZmZlciwgX19idWZm ZXJfc2l6ZSk7CiAgICAgICAgICB9CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0Jp ZGlyZWN0aW9uYWxJdGVyLCB0eXBlbmFtZSBfRGlzdGFuY2UsIHR5cGVuYW1lIF9Qb2ludGVyLAog ICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlPgogICAgdm9pZAogICAgX19tZXJnZV9hZGFwdGl2 ZShfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgX0JpZGly ZWN0aW9uYWxJdGVyIF9fbWlkZGxlLAogICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25h bEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UgX19sZW4xLCBfRGlz dGFuY2UgX19sZW4yLAogICAgICAgICAgICAgICAgICAgICBfUG9pbnRlciBfX2J1ZmZlciwgX0Rp c3RhbmNlIF9fYnVmZmVyX3NpemUsCiAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29t cCkKICAgIHsKICAgICAgICAgIGlmIChfX2xlbjEgPD0gX19sZW4yICYmIF9fbGVuMSA8PSBfX2J1 ZmZlcl9zaXplKSB7CiAgICAgICAgICAgIF9Qb2ludGVyIF9fYnVmZmVyX2VuZCA9IGNvcHkoX19m aXJzdCwgX19taWRkbGUsIF9fYnVmZmVyKTsKICAgICAgICAgICAgbWVyZ2UoX19idWZmZXIsIF9f YnVmZmVyX2VuZCwgX19taWRkbGUsIF9fbGFzdCwgX19maXJzdCwgX19jb21wKTsKICAgICAgICAg IH0KICAgICAgICAgIGVsc2UgaWYgKF9fbGVuMiA8PSBfX2J1ZmZlcl9zaXplKSB7CiAgICAgICAg ICAgIF9Qb2ludGVyIF9fYnVmZmVyX2VuZCA9IGNvcHkoX19taWRkbGUsIF9fbGFzdCwgX19idWZm ZXIpOwogICAgICAgICAgICBfX21lcmdlX2JhY2t3YXJkKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2J1 ZmZlciwgX19idWZmZXJfZW5kLCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIF9fY29tcCk7CiAgICAgICAgICB9CiAgICAgICAgICBlbHNlIHsKICAg ICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3RfY3V0ID0gX19maXJzdDsKICAgICAg ICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fc2Vjb25kX2N1dCA9IF9fbWlkZGxlOwogICAgICAg ICAgICBfRGlzdGFuY2UgX19sZW4xMSA9IDA7CiAgICAgICAgICAgIF9EaXN0YW5jZSBfX2xlbjIy ID0gMDsKICAgICAgICAgICAgaWYgKF9fbGVuMSA+IF9fbGVuMikgewogICAgICAgICAgICAgICAg ICBfX2xlbjExID0gX19sZW4xIC8gMjsKICAgICAgICAgICAgICAgICAgYWR2YW5jZShfX2ZpcnN0 X2N1dCwgX19sZW4xMSk7CiAgICAgICAgICAgICAgICAgIF9fc2Vjb25kX2N1dCA9IGxvd2VyX2Jv dW5kKF9fbWlkZGxlLCBfX2xhc3QsICpfX2ZpcnN0X2N1dCwgX19jb21wKTsKICAgICAgICAgICAg ICAgICAgX19sZW4yMiA9IGRpc3RhbmNlKF9fbWlkZGxlLCBfX3NlY29uZF9jdXQpOwogICAgICAg ICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICBfX2xlbjIyID0gX19s ZW4yIC8gMjsKICAgICAgICAgICAgICAgICAgYWR2YW5jZShfX3NlY29uZF9jdXQsIF9fbGVuMjIp OwogICAgICAgICAgICAgICAgICBfX2ZpcnN0X2N1dCA9IHVwcGVyX2JvdW5kKF9fZmlyc3QsIF9f bWlkZGxlLCAqX19zZWNvbmRfY3V0LCBfX2NvbXApOwogICAgICAgICAgICAgICAgICBfX2xlbjEx ID0gZGlzdGFuY2UoX19maXJzdCwgX19maXJzdF9jdXQpOwogICAgICAgICAgICB9CiAgICAgICAg ICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX25ld19taWRkbGUgPQogICAgICAgICAgICAgICAgICBf X3JvdGF0ZV9hZGFwdGl2ZShfX2ZpcnN0X2N1dCwgX19taWRkbGUsIF9fc2Vjb25kX2N1dCwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19sZW4xIC0gX19sZW4xMSwgX19sZW4y MiwgX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYnVmZmVy X3NpemUpOwogICAgICAgICAgICBfX21lcmdlX2FkYXB0aXZlKF9fZmlyc3QsIF9fZmlyc3RfY3V0 LCBfX25ld19taWRkbGUsIF9fbGVuMTEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19s ZW4yMiwgX19idWZmZXIsIF9fYnVmZmVyX3NpemUsIF9fY29tcCk7CiAgICAgICAgICAgIF9fbWVy Z2VfYWRhcHRpdmUoX19uZXdfbWlkZGxlLCBfX3NlY29uZF9jdXQsIF9fbGFzdCwgX19sZW4xIC0g X19sZW4xMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xlbjIgLSBfX2xlbjIyLCBf X2J1ZmZlciwgX19idWZmZXJfc2l6ZSwgX19jb21wKTsKICAgICAgICAgIH0KICAgIH0KIyAzNTA4 ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXI+CiAgICB2b2lkCiAgICBpbnBsYWNlX21lcmdlKF9CaWRp cmVjdGlvbmFsSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0 ZXIgX19taWRkbGUsCiAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3Qp CiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9CaWRpcmVjdGlv bmFsSXRlcj46OnZhbHVlX3R5cGUKICAgICAgICAgIF9WYWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYg dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9CaWRpcmVjdGlvbmFsSXRlcj46OmRpZmZlcmVuY2Vf dHlwZQogICAgICAgICAgX0Rpc3RhbmNlVHlwZTsKCgogICAgIAoKICAgICAKCiAgICAgIGlmIChf X2ZpcnN0ID09IF9fbWlkZGxlIHx8IF9fbWlkZGxlID09IF9fbGFzdCkKICAgICAgICByZXR1cm47 CgogICAgICBfRGlzdGFuY2VUeXBlIF9fbGVuMSA9IGRpc3RhbmNlKF9fZmlyc3QsIF9fbWlkZGxl KTsKICAgICAgX0Rpc3RhbmNlVHlwZSBfX2xlbjIgPSBkaXN0YW5jZShfX21pZGRsZSwgX19sYXN0 KTsKCiAgICAgIF9UZW1wb3JhcnlfYnVmZmVyPF9CaWRpcmVjdGlvbmFsSXRlciwgX1ZhbHVlVHlw ZT4gX19idWYoX19maXJzdCwgX19sYXN0KTsKICAgICAgaWYgKF9fYnVmLmJlZ2luKCkgPT0gMCkK ICAgICAgICBfX21lcmdlX3dpdGhvdXRfYnVmZmVyKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3Qs IF9fbGVuMSwgX19sZW4yKTsKICAgICAgZWxzZQogICAgICAgIF9fbWVyZ2VfYWRhcHRpdmUoX19m aXJzdCwgX19taWRkbGUsIF9fbGFzdCwgX19sZW4xLCBfX2xlbjIsCiAgICAgICAgICAgICAgICAg ICAgICAgICBfX2J1Zi5iZWdpbigpLCBfRGlzdGFuY2VUeXBlKF9fYnVmLnNpemUoKSkpOwogICAg fQojIDM1NTkgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBs YXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlciwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICB2 b2lkCiAgICBpbnBsYWNlX21lcmdlKF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LAogICAgICAg ICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19taWRkbGUsCiAgICAgICAgICAgICAgICAg IF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9f Y29tcCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0JpZGly ZWN0aW9uYWxJdGVyPjo6dmFsdWVfdHlwZQogICAgICAgICAgX1ZhbHVlVHlwZTsKICAgICAgdHlw ZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0JpZGlyZWN0aW9uYWxJdGVyPjo6ZGlmZmVy ZW5jZV90eXBlCiAgICAgICAgICBfRGlzdGFuY2VUeXBlOwoKCiAgICAgCgogICAgIAoKCiAgICAg IGlmIChfX2ZpcnN0ID09IF9fbWlkZGxlIHx8IF9fbWlkZGxlID09IF9fbGFzdCkKICAgICAgICBy ZXR1cm47CgogICAgICBfRGlzdGFuY2VUeXBlIF9fbGVuMSA9IGRpc3RhbmNlKF9fZmlyc3QsIF9f bWlkZGxlKTsKICAgICAgX0Rpc3RhbmNlVHlwZSBfX2xlbjIgPSBkaXN0YW5jZShfX21pZGRsZSwg X19sYXN0KTsKCiAgICAgIF9UZW1wb3JhcnlfYnVmZmVyPF9CaWRpcmVjdGlvbmFsSXRlciwgX1Zh bHVlVHlwZT4gX19idWYoX19maXJzdCwgX19sYXN0KTsKICAgICAgaWYgKF9fYnVmLmJlZ2luKCkg PT0gMCkKICAgICAgICBfX21lcmdlX3dpdGhvdXRfYnVmZmVyKF9fZmlyc3QsIF9fbWlkZGxlLCBf X2xhc3QsIF9fbGVuMSwgX19sZW4yLCBfX2NvbXApOwogICAgICBlbHNlCiAgICAgICAgX19tZXJn ZV9hZGFwdGl2ZShfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0LCBfX2xlbjEsIF9fbGVuMiwKICAg ICAgICAgICAgICAgICAgICAgICAgIF9fYnVmLmJlZ2luKCksIF9EaXN0YW5jZVR5cGUoX19idWYu c2l6ZSgpKSwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7CiAgICB9CgoKCgoKCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXIyPgogICAg Ym9vbAogICAgaW5jbHVkZXMoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFz dDEsCiAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0 MikKICAgIHsKCiAgICAgCiAgICAgCiAgICAgCgoKICAgICAKCgogICAgICB3aGlsZSAoX19maXJz dDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKQogICAgICAgIGlmICgqX19maXJz dDIgPCAqX19maXJzdDEpCiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgZWxzZSBpZigq X19maXJzdDEgPCAqX19maXJzdDIpCiAgICAgICAgICArK19fZmlyc3QxOwogICAgICAgIGVsc2UK ICAgICAgICAgICsrX19maXJzdDEsICsrX19maXJzdDI7CgogICAgICByZXR1cm4gX19maXJzdDIg PT0gX19sYXN0MjsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcjEsIHR5cGVu YW1lIF9JbnB1dEl0ZXIyLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIGJvb2wKICAgIGluY2x1ZGVz KF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAg X0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsIF9Db21wYXJlIF9fY29t cCkKICAgIHsKCiAgICAgCiAgICAgCiAgICAgCgoKICAgICAKCgoKICAgICAgd2hpbGUgKF9fZmly c3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikKICAgICAgICBpZiAoX19jb21w KCpfX2ZpcnN0MiwgKl9fZmlyc3QxKSkKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICBl bHNlIGlmKF9fY29tcCgqX19maXJzdDEsICpfX2ZpcnN0MikpCiAgICAgICAgICArK19fZmlyc3Qx OwogICAgICAgIGVsc2UKICAgICAgICAgICsrX19maXJzdDEsICsrX19maXJzdDI7CgogICAgICBy ZXR1cm4gX19maXJzdDIgPT0gX19sYXN0MjsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lu cHV0SXRlcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXIyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4KICAg IF9PdXRwdXRJdGVyCiAgICBzZXRfdW5pb24oX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0 ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0 ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQpCiAgICB7Cgog ICAgIAogICAgIAogICAgIAoKICAgICAKCgogICAgIAoKCiAgICAgIHdoaWxlIChfX2ZpcnN0MSAh PSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpIHsKICAgICAgICBpZiAoKl9fZmlyc3Qx IDwgKl9fZmlyc3QyKSB7CiAgICAgICAgICAqX19yZXN1bHQgPSAqX19maXJzdDE7CiAgICAgICAg ICArK19fZmlyc3QxOwogICAgICAgIH0KICAgICAgICBlbHNlIGlmICgqX19maXJzdDIgPCAqX19m aXJzdDEpIHsKICAgICAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MjsKICAgICAgICAgICsrX19m aXJzdDI7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgKl9fcmVzdWx0ID0gKl9f Zmlyc3QxOwogICAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgICAgICsrX19maXJzdDI7CiAgICAg ICAgfQogICAgICAgICsrX19yZXN1bHQ7CiAgICAgIH0KICAgICAgcmV0dXJuIGNvcHkoX19maXJz dDIsIF9fbGFzdDIsIGNvcHkoX19maXJzdDEsIF9fbGFzdDEsIF9fcmVzdWx0KSk7CiAgICB9Cgog IHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJdGVyMiwgdHlw ZW5hbWUgX091dHB1dEl0ZXIsCiAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBfT3V0 cHV0SXRlcgogICAgc2V0X3VuaW9uKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBf X2xhc3QxLAogICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBf X2xhc3QyLAogICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBfQ29tcGFyZSBfX2Nv bXApCiAgICB7CgogICAgIAogICAgIAogICAgIAoKCiAgICAgCgogICAgIAoKCgogICAgICB3aGls ZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKSB7CiAgICAgICAg aWYgKF9fY29tcCgqX19maXJzdDEsICpfX2ZpcnN0MikpIHsKICAgICAgICAgICpfX3Jlc3VsdCA9 ICpfX2ZpcnN0MTsKICAgICAgICAgICsrX19maXJzdDE7CiAgICAgICAgfQogICAgICAgIGVsc2Ug aWYgKF9fY29tcCgqX19maXJzdDIsICpfX2ZpcnN0MSkpIHsKICAgICAgICAgICpfX3Jlc3VsdCA9 ICpfX2ZpcnN0MjsKICAgICAgICAgICsrX19maXJzdDI7CiAgICAgICAgfQogICAgICAgIGVsc2Ug ewogICAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOwogICAgICAgICAgKytfX2ZpcnN0MTsK ICAgICAgICAgICsrX19maXJzdDI7CiAgICAgICAgfQogICAgICAgICsrX19yZXN1bHQ7CiAgICAg IH0KICAgICAgcmV0dXJuIGNvcHkoX19maXJzdDIsIF9fbGFzdDIsIGNvcHkoX19maXJzdDEsIF9f bGFzdDEsIF9fcmVzdWx0KSk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIx LCB0eXBlbmFtZSBfSW5wdXRJdGVyMiwgdHlwZW5hbWUgX091dHB1dEl0ZXI+CiAgICBfT3V0cHV0 SXRlcgogICAgc2V0X2ludGVyc2VjdGlvbihfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRl cjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9J bnB1dEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVz dWx0KQogICAgewoKICAgICAKICAgICAKICAgICAKCiAgICAgCgoKICAgICAKCgogICAgICB3aGls ZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKQogICAgICAgIGlm ICgqX19maXJzdDEgPCAqX19maXJzdDIpCiAgICAgICAgICArK19fZmlyc3QxOwogICAgICAgIGVs c2UgaWYgKCpfX2ZpcnN0MiA8ICpfX2ZpcnN0MSkKICAgICAgICAgICsrX19maXJzdDI7CiAgICAg ICAgZWxzZSB7CiAgICAgICAgICAqX19yZXN1bHQgPSAqX19maXJzdDE7CiAgICAgICAgICArK19f Zmlyc3QxOwogICAgICAgICAgKytfX2ZpcnN0MjsKICAgICAgICAgICsrX19yZXN1bHQ7CiAgICAg ICAgfQogICAgICByZXR1cm4gX19yZXN1bHQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9J bnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJdGVyMiwgdHlwZW5hbWUgX091dHB1dEl0ZXIsCiAg ICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBfT3V0cHV0SXRlcgogICAgc2V0X2ludGVy c2VjdGlvbihfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAg ICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIs CiAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBfQ29tcGFyZSBfX2Nv bXApCiAgICB7CgogICAgIAogICAgIAogICAgIAoKCiAgICAgCgogICAgIAoKCgogICAgICB3aGls ZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKQogICAgICAgIGlm IChfX2NvbXAoKl9fZmlyc3QxLCAqX19maXJzdDIpKQogICAgICAgICAgKytfX2ZpcnN0MTsKICAg ICAgICBlbHNlIGlmIChfX2NvbXAoKl9fZmlyc3QyLCAqX19maXJzdDEpKQogICAgICAgICAgKytf X2ZpcnN0MjsKICAgICAgICBlbHNlIHsKICAgICAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsK ICAgICAgICAgICsrX19maXJzdDE7CiAgICAgICAgICArK19fZmlyc3QyOwogICAgICAgICAgKytf X3Jlc3VsdDsKICAgICAgICB9CiAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgIH0KCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0lucHV0SXRlcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXIyLCB0eXBlbmFtZSBf T3V0cHV0SXRlcj4KICAgIF9PdXRwdXRJdGVyCiAgICBzZXRfZGlmZmVyZW5jZShfSW5wdXRJdGVy MSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgIF9JbnB1 dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAg X091dHB1dEl0ZXIgX19yZXN1bHQpCiAgICB7CgogICAgIAogICAgIAogICAgIAoKICAgICAKCgog ICAgIAoKCiAgICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9f bGFzdDIpCiAgICAgICAgaWYgKCpfX2ZpcnN0MSA8ICpfX2ZpcnN0MikgewogICAgICAgICAgKl9f cmVzdWx0ID0gKl9fZmlyc3QxOwogICAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgICAgICsrX19y ZXN1bHQ7CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYgKCpfX2ZpcnN0MiA8ICpfX2ZpcnN0MSkK ICAgICAgICAgICsrX19maXJzdDI7CiAgICAgICAgZWxzZSB7CiAgICAgICAgICArK19fZmlyc3Qx OwogICAgICAgICAgKytfX2ZpcnN0MjsKICAgICAgICB9CiAgICAgIHJldHVybiBjb3B5KF9fZmly c3QxLCBfX2xhc3QxLCBfX3Jlc3VsdCk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1 dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJdGVyMiwgdHlwZW5hbWUgX091dHB1dEl0ZXIsCiAgICAg ICAgICAgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBfT3V0cHV0SXRlcgogICAgc2V0X2RpZmZlcmVu Y2UoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAg ICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAg ICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBfQ29tcGFyZSBfX2NvbXApCiAgICB7 CgogICAgIAogICAgIAogICAgIAoKCiAgICAgCgogICAgIAoKCgogICAgICB3aGlsZSAoX19maXJz dDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKQogICAgICAgIGlmIChfX2NvbXAo Kl9fZmlyc3QxLCAqX19maXJzdDIpKSB7CiAgICAgICAgICAqX19yZXN1bHQgPSAqX19maXJzdDE7 CiAgICAgICAgICArK19fZmlyc3QxOwogICAgICAgICAgKytfX3Jlc3VsdDsKICAgICAgICB9CiAg ICAgICAgZWxzZSBpZiAoX19jb21wKCpfX2ZpcnN0MiwgKl9fZmlyc3QxKSkKICAgICAgICAgICsr X19maXJzdDI7CiAgICAgICAgZWxzZSB7CiAgICAgICAgICArK19fZmlyc3QxOwogICAgICAgICAg KytfX2ZpcnN0MjsKICAgICAgICB9CiAgICAgIHJldHVybiBjb3B5KF9fZmlyc3QxLCBfX2xhc3Qx LCBfX3Jlc3VsdCk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBl bmFtZSBfSW5wdXRJdGVyMiwgdHlwZW5hbWUgX091dHB1dEl0ZXI+CiAgICBfT3V0cHV0SXRlcgog ICAgc2V0X3N5bW1ldHJpY19kaWZmZXJlbmNlKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJ dGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9f Zmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg IF9PdXRwdXRJdGVyIF9fcmVzdWx0KQogICAgewoKICAgICAKICAgICAKICAgICAKCiAgICAgCgoK ICAgICAKCgogICAgICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBf X2xhc3QyKQogICAgICAgIGlmICgqX19maXJzdDEgPCAqX19maXJzdDIpIHsKICAgICAgICAgICpf X3Jlc3VsdCA9ICpfX2ZpcnN0MTsKICAgICAgICAgICsrX19maXJzdDE7CiAgICAgICAgICArK19f cmVzdWx0OwogICAgICAgIH0KICAgICAgICBlbHNlIGlmICgqX19maXJzdDIgPCAqX19maXJzdDEp IHsKICAgICAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MjsKICAgICAgICAgICsrX19maXJzdDI7 CiAgICAgICAgICArK19fcmVzdWx0OwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAg ICsrX19maXJzdDE7CiAgICAgICAgICArK19fZmlyc3QyOwogICAgICAgIH0KICAgICAgcmV0dXJu IGNvcHkoX19maXJzdDIsIF9fbGFzdDIsIGNvcHkoX19maXJzdDEsIF9fbGFzdDEsIF9fcmVzdWx0 KSk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5w dXRJdGVyMiwgdHlwZW5hbWUgX091dHB1dEl0ZXIsCiAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBh cmU+CiAgICBfT3V0cHV0SXRlcgogICAgc2V0X3N5bW1ldHJpY19kaWZmZXJlbmNlKF9JbnB1dEl0 ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKICAgIHsKCiAgICAgCiAgICAgCiAgICAg CgoKICAgICAKCiAgICAgCgoKCiAgICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9f Zmlyc3QyICE9IF9fbGFzdDIpCiAgICAgICAgaWYgKF9fY29tcCgqX19maXJzdDEsICpfX2ZpcnN0 MikpIHsKICAgICAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsKICAgICAgICAgICsrX19maXJz dDE7CiAgICAgICAgICArK19fcmVzdWx0OwogICAgICAgIH0KICAgICAgICBlbHNlIGlmIChfX2Nv bXAoKl9fZmlyc3QyLCAqX19maXJzdDEpKSB7CiAgICAgICAgICAqX19yZXN1bHQgPSAqX19maXJz dDI7CiAgICAgICAgICArK19fZmlyc3QyOwogICAgICAgICAgKytfX3Jlc3VsdDsKICAgICAgICB9 CiAgICAgICAgZWxzZSB7CiAgICAgICAgICArK19fZmlyc3QxOwogICAgICAgICAgKytfX2ZpcnN0 MjsKICAgICAgICB9CiAgICAgIHJldHVybiBjb3B5KF9fZmlyc3QyLCBfX2xhc3QyLCBjb3B5KF9f Zmlyc3QxLCBfX2xhc3QxLCBfX3Jlc3VsdCkpOwogICAgfQoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfRm9yd2FyZEl0ZXI+CiAgICBfRm9yd2FyZEl0ZXIKICAgIG1heF9lbGVtZW50KF9Gb3J3YXJk SXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0KQogICAgewoKICAgICAKICAgICAKCgog ICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpIHJldHVybiBfX2ZpcnN0OwogICAgICBfRm9yd2Fy ZEl0ZXIgX19yZXN1bHQgPSBfX2ZpcnN0OwogICAgICB3aGlsZSAoKytfX2ZpcnN0ICE9IF9fbGFz dCkKICAgICAgICBpZiAoKl9fcmVzdWx0IDwgKl9fZmlyc3QpCiAgICAgICAgICBfX3Jlc3VsdCA9 IF9fZmlyc3Q7CiAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIF9Gb3J3YXJkSXRlcgogICAg bWF4X2VsZW1lbnQoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAg ICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCiAgICB7CgogICAgIAogICAgIAoKCgogICAg ICBpZiAoX19maXJzdCA9PSBfX2xhc3QpIHJldHVybiBfX2ZpcnN0OwogICAgICBfRm9yd2FyZEl0 ZXIgX19yZXN1bHQgPSBfX2ZpcnN0OwogICAgICB3aGlsZSAoKytfX2ZpcnN0ICE9IF9fbGFzdCkK ICAgICAgICBpZiAoX19jb21wKCpfX3Jlc3VsdCwgKl9fZmlyc3QpKSBfX3Jlc3VsdCA9IF9fZmly c3Q7CiAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0Zv cndhcmRJdGVyPgogICAgX0ZvcndhcmRJdGVyCiAgICBtaW5fZWxlbWVudChfRm9yd2FyZEl0ZXIg X19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCkKICAgIHsKCiAgICAgCiAgICAgCgoKICAgICAg aWYgKF9fZmlyc3QgPT0gX19sYXN0KSByZXR1cm4gX19maXJzdDsKICAgICAgX0ZvcndhcmRJdGVy IF9fcmVzdWx0ID0gX19maXJzdDsKICAgICAgd2hpbGUgKCsrX19maXJzdCAhPSBfX2xhc3QpCiAg ICAgICAgaWYgKCpfX2ZpcnN0IDwgKl9fcmVzdWx0KQogICAgICAgICAgX19yZXN1bHQgPSBfX2Zp cnN0OwogICAgICByZXR1cm4gX19yZXN1bHQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9G b3J3YXJkSXRlciwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBfRm9yd2FyZEl0ZXIKICAgIG1pbl9l bGVtZW50KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAg ICAgICAgICAgX0NvbXBhcmUgX19jb21wKQogICAgewoKICAgICAKICAgICAKCgoKICAgICAgaWYg KF9fZmlyc3QgPT0gX19sYXN0KSByZXR1cm4gX19maXJzdDsKICAgICAgX0ZvcndhcmRJdGVyIF9f cmVzdWx0ID0gX19maXJzdDsKICAgICAgd2hpbGUgKCsrX19maXJzdCAhPSBfX2xhc3QpCiAgICAg ICAgaWYgKF9fY29tcCgqX19maXJzdCwgKl9fcmVzdWx0KSkKICAgICAgICAgIF9fcmVzdWx0ID0g X19maXJzdDsKICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAgfQoKCgoKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXI+CiAgICBib29sCiAgICBuZXh0X3Blcm11dGF0aW9uKF9C aWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LCBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0KQogICAg ewoKICAgICAKICAgICAKCgogICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpCiAgICAgICAgcmV0 dXJuIGZhbHNlOwogICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19pID0gX19maXJzdDsKICAgICAg KytfX2k7CiAgICAgIGlmIChfX2kgPT0gX19sYXN0KQogICAgICAgIHJldHVybiBmYWxzZTsKICAg ICAgX19pID0gX19sYXN0OwogICAgICAtLV9faTsKCiAgICAgIGZvcig7OykgewogICAgICAgIF9C aWRpcmVjdGlvbmFsSXRlciBfX2lpID0gX19pOwogICAgICAgIC0tX19pOwogICAgICAgIGlmICgq X19pIDwgKl9faWkpIHsKICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2ogPSBfX2xhc3Q7 CiAgICAgICAgICB3aGlsZSAoISgqX19pIDwgKi0tX19qKSkKICAgICAgICAgICAge30KICAgICAg ICAgIGl0ZXJfc3dhcChfX2ksIF9faik7CiAgICAgICAgICByZXZlcnNlKF9faWksIF9fbGFzdCk7 CiAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CiAgICAgICAgaWYgKF9faSA9PSBfX2Zp cnN0KSB7CiAgICAgICAgICByZXZlcnNlKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgICAgICByZXR1 cm4gZmFsc2U7CiAgICAgICAgfQogICAgICB9CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9C aWRpcmVjdGlvbmFsSXRlciwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBib29sCiAgICBuZXh0X3Bl cm11dGF0aW9uKF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LCBfQmlkaXJlY3Rpb25hbEl0ZXIg X19sYXN0LAogICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCiAgICB7CgogICAg IAogICAgIAoKCgogICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpCiAgICAgICAgcmV0dXJuIGZh bHNlOwogICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19pID0gX19maXJzdDsKICAgICAgKytfX2k7 CiAgICAgIGlmIChfX2kgPT0gX19sYXN0KQogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgX19p ID0gX19sYXN0OwogICAgICAtLV9faTsKCiAgICAgIGZvcig7OykgewogICAgICAgIF9CaWRpcmVj dGlvbmFsSXRlciBfX2lpID0gX19pOwogICAgICAgIC0tX19pOwogICAgICAgIGlmIChfX2NvbXAo Kl9faSwgKl9faWkpKSB7CiAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19qID0gX19sYXN0 OwogICAgICAgICAgd2hpbGUgKCFfX2NvbXAoKl9faSwgKi0tX19qKSkKICAgICAgICAgICAge30K ICAgICAgICAgIGl0ZXJfc3dhcChfX2ksIF9faik7CiAgICAgICAgICByZXZlcnNlKF9faWksIF9f bGFzdCk7CiAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CiAgICAgICAgaWYgKF9faSA9 PSBfX2ZpcnN0KSB7CiAgICAgICAgICByZXZlcnNlKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgICAg ICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICB9CiAgICB9CgogIHRlbXBsYXRlPHR5cGVu YW1lIF9CaWRpcmVjdGlvbmFsSXRlcj4KICAgIGJvb2wKICAgIHByZXZfcGVybXV0YXRpb24oX0Jp ZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QpCiAgICB7 CgogICAgIAogICAgIAoKCiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkKICAgICAgICByZXR1 cm4gZmFsc2U7CiAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2kgPSBfX2ZpcnN0OwogICAgICAr K19faTsKICAgICAgaWYgKF9faSA9PSBfX2xhc3QpCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg ICBfX2kgPSBfX2xhc3Q7CiAgICAgIC0tX19pOwoKICAgICAgZm9yKDs7KSB7CiAgICAgICAgX0Jp ZGlyZWN0aW9uYWxJdGVyIF9faWkgPSBfX2k7CiAgICAgICAgLS1fX2k7CiAgICAgICAgaWYgKCpf X2lpIDwgKl9faSkgewogICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9faiA9IF9fbGFzdDsK ICAgICAgICAgIHdoaWxlICghKCotLV9faiA8ICpfX2kpKQogICAgICAgICAgICB7fQogICAgICAg ICAgaXRlcl9zd2FwKF9faSwgX19qKTsKICAgICAgICAgIHJldmVyc2UoX19paSwgX19sYXN0KTsK ICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KICAgICAgICBpZiAoX19pID09IF9fZmly c3QpIHsKICAgICAgICAgIHJldmVyc2UoX19maXJzdCwgX19sYXN0KTsKICAgICAgICAgIHJldHVy biBmYWxzZTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0Jp ZGlyZWN0aW9uYWxJdGVyLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIGJvb2wKICAgIHByZXZfcGVy bXV0YXRpb24oX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsIF9CaWRpcmVjdGlvbmFsSXRlciBf X2xhc3QsCiAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKICAgIHsKCiAgICAg CiAgICAgCgoKCiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkKICAgICAgICByZXR1cm4gZmFs c2U7CiAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2kgPSBfX2ZpcnN0OwogICAgICArK19faTsK ICAgICAgaWYgKF9faSA9PSBfX2xhc3QpCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICBfX2kg PSBfX2xhc3Q7CiAgICAgIC0tX19pOwoKICAgICAgZm9yKDs7KSB7CiAgICAgICAgX0JpZGlyZWN0 aW9uYWxJdGVyIF9faWkgPSBfX2k7CiAgICAgICAgLS1fX2k7CiAgICAgICAgaWYgKF9fY29tcCgq X19paSwgKl9faSkpIHsKICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2ogPSBfX2xhc3Q7 CiAgICAgICAgICB3aGlsZSAoIV9fY29tcCgqLS1fX2osICpfX2kpKQogICAgICAgICAgICB7fQog ICAgICAgICAgaXRlcl9zd2FwKF9faSwgX19qKTsKICAgICAgICAgIHJldmVyc2UoX19paSwgX19s YXN0KTsKICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KICAgICAgICBpZiAoX19pID09 IF9fZmlyc3QpIHsKICAgICAgICAgIHJldmVyc2UoX19maXJzdCwgX19sYXN0KTsKICAgICAgICAg IHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KCgoKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXI+CiAgICBfSW5wdXRJdGVyCiAg ICBmaW5kX2ZpcnN0X29mKF9JbnB1dEl0ZXIgX19maXJzdDEsIF9JbnB1dEl0ZXIgX19sYXN0MSwK ICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fZmlyc3QyLCBfRm9yd2FyZEl0ZXIgX19s YXN0MikKICAgIHsKCiAgICAgCiAgICAgCiAgICAgCgoKCiAgICAgIGZvciAoIDsgX19maXJzdDEg IT0gX19sYXN0MTsgKytfX2ZpcnN0MSkKICAgICAgICBmb3IgKF9Gb3J3YXJkSXRlciBfX2l0ZXIg PSBfX2ZpcnN0MjsgX19pdGVyICE9IF9fbGFzdDI7ICsrX19pdGVyKQogICAgICAgICAgaWYgKCpf X2ZpcnN0MSA9PSAqX19pdGVyKQogICAgICAgICAgICByZXR1cm4gX19maXJzdDE7CiAgICAgIHJl dHVybiBfX2xhc3QxOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBl bmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9CaW5hcnlQcmVkaWNhdGU+CiAgICBfSW5wdXRJ dGVyCiAgICBmaW5kX2ZpcnN0X29mKF9JbnB1dEl0ZXIgX19maXJzdDEsIF9JbnB1dEl0ZXIgX19s YXN0MSwKICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fZmlyc3QyLCBfRm9yd2FyZEl0 ZXIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2NvbXApCiAg ICB7CgogICAgIAogICAgIAogICAgIAoKCiAgICAgCgoKCiAgICAgIGZvciAoIDsgX19maXJzdDEg IT0gX19sYXN0MTsgKytfX2ZpcnN0MSkKICAgICAgICBmb3IgKF9Gb3J3YXJkSXRlciBfX2l0ZXIg PSBfX2ZpcnN0MjsgX19pdGVyICE9IF9fbGFzdDI7ICsrX19pdGVyKQogICAgICAgICAgaWYgKF9f Y29tcCgqX19maXJzdDEsICpfX2l0ZXIpKQogICAgICAgICAgICByZXR1cm4gX19maXJzdDE7CiAg ICAgIHJldHVybiBfX2xhc3QxOwogICAgfQojIDQyMDEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2Jp dHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcjEsIHR5cGVu YW1lIF9Gb3J3YXJkSXRlcjI+CiAgICBfRm9yd2FyZEl0ZXIxCiAgICBfX2ZpbmRfZW5kKF9Gb3J3 YXJkSXRlcjEgX19maXJzdDEsIF9Gb3J3YXJkSXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAg X0ZvcndhcmRJdGVyMiBfX2ZpcnN0MiwgX0ZvcndhcmRJdGVyMiBfX2xhc3QyLAogICAgICAgICAg ICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZywgZm9yd2FyZF9pdGVyYXRvcl90YWcpCiAgICB7CiAg ICAgIGlmIChfX2ZpcnN0MiA9PSBfX2xhc3QyKQogICAgICAgIHJldHVybiBfX2xhc3QxOwogICAg ICBlbHNlIHsKICAgICAgICBfRm9yd2FyZEl0ZXIxIF9fcmVzdWx0ID0gX19sYXN0MTsKICAgICAg ICB3aGlsZSAoMSkgewogICAgICAgICAgX0ZvcndhcmRJdGVyMSBfX25ld19yZXN1bHQKICAgICAg ICAgICAgPSBzZWFyY2goX19maXJzdDEsIF9fbGFzdDEsIF9fZmlyc3QyLCBfX2xhc3QyKTsKICAg ICAgICAgIGlmIChfX25ld19yZXN1bHQgPT0gX19sYXN0MSkKICAgICAgICAgICAgcmV0dXJuIF9f cmVzdWx0OwogICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIF9fcmVzdWx0ID0gX19uZXdfcmVz dWx0OwogICAgICAgICAgICBfX2ZpcnN0MSA9IF9fbmV3X3Jlc3VsdDsKICAgICAgICAgICAgKytf X2ZpcnN0MTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0KCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0ZvcndhcmRJdGVyMSwgdHlwZW5hbWUgX0ZvcndhcmRJdGVyMiwKICAgICAgICAg ICB0eXBlbmFtZSBfQmluYXJ5UHJlZGljYXRlPgogICAgX0ZvcndhcmRJdGVyMQogICAgX19maW5k X2VuZChfRm9yd2FyZEl0ZXIxIF9fZmlyc3QxLCBfRm9yd2FyZEl0ZXIxIF9fbGFzdDEsCiAgICAg ICAgICAgICAgIF9Gb3J3YXJkSXRlcjIgX19maXJzdDIsIF9Gb3J3YXJkSXRlcjIgX19sYXN0MiwK ICAgICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRvcl90YWcsIGZvcndhcmRfaXRlcmF0b3JfdGFn LAogICAgICAgICAgICAgICBfQmluYXJ5UHJlZGljYXRlIF9fY29tcCkKICAgIHsKICAgICAgaWYg KF9fZmlyc3QyID09IF9fbGFzdDIpCiAgICAgICAgcmV0dXJuIF9fbGFzdDE7CiAgICAgIGVsc2Ug ewogICAgICAgIF9Gb3J3YXJkSXRlcjEgX19yZXN1bHQgPSBfX2xhc3QxOwogICAgICAgIHdoaWxl ICgxKSB7CiAgICAgICAgICBfRm9yd2FyZEl0ZXIxIF9fbmV3X3Jlc3VsdAogICAgICAgICAgICA9 IHNlYXJjaChfX2ZpcnN0MSwgX19sYXN0MSwgX19maXJzdDIsIF9fbGFzdDIsIF9fY29tcCk7CiAg ICAgICAgICBpZiAoX19uZXdfcmVzdWx0ID09IF9fbGFzdDEpCiAgICAgICAgICAgIHJldHVybiBf X3Jlc3VsdDsKICAgICAgICAgIGVsc2UgewogICAgICAgICAgICBfX3Jlc3VsdCA9IF9fbmV3X3Jl c3VsdDsKICAgICAgICAgICAgX19maXJzdDEgPSBfX25ld19yZXN1bHQ7CiAgICAgICAgICAgICsr X19maXJzdDE7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9CgoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIxLCB0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0 ZXIyPgogICAgX0JpZGlyZWN0aW9uYWxJdGVyMQogICAgX19maW5kX2VuZChfQmlkaXJlY3Rpb25h bEl0ZXIxIF9fZmlyc3QxLCBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAg ICAgIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19maXJzdDIsIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19s YXN0MiwKICAgICAgICAgICAgICAgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcsIGJpZGlyZWN0 aW9uYWxfaXRlcmF0b3JfdGFnKQogICAgewoKICAgICAKICAgICAKCiAgICAgIHR5cGVkZWYgcmV2 ZXJzZV9pdGVyYXRvcjxfQmlkaXJlY3Rpb25hbEl0ZXIxPiBfUmV2SXRlcjE7CiAgICAgIHR5cGVk ZWYgcmV2ZXJzZV9pdGVyYXRvcjxfQmlkaXJlY3Rpb25hbEl0ZXIyPiBfUmV2SXRlcjI7CgogICAg ICBfUmV2SXRlcjEgX19ybGFzdDEoX19maXJzdDEpOwogICAgICBfUmV2SXRlcjIgX19ybGFzdDIo X19maXJzdDIpOwogICAgICBfUmV2SXRlcjEgX19ycmVzdWx0ID0gc2VhcmNoKF9SZXZJdGVyMShf X2xhc3QxKSwgX19ybGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1Jl dkl0ZXIyKF9fbGFzdDIpLCBfX3JsYXN0Mik7CgogICAgICBpZiAoX19ycmVzdWx0ID09IF9fcmxh c3QxKQogICAgICAgIHJldHVybiBfX2xhc3QxOwogICAgICBlbHNlIHsKICAgICAgICBfQmlkaXJl Y3Rpb25hbEl0ZXIxIF9fcmVzdWx0ID0gX19ycmVzdWx0LmJhc2UoKTsKICAgICAgICBhZHZhbmNl KF9fcmVzdWx0LCAtZGlzdGFuY2UoX19maXJzdDIsIF9fbGFzdDIpKTsKICAgICAgICByZXR1cm4g X19yZXN1bHQ7CiAgICAgIH0KICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9u YWxJdGVyMSwgdHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyMiwKICAgICAgICAgICB0eXBlbmFt ZSBfQmluYXJ5UHJlZGljYXRlPgogICAgX0JpZGlyZWN0aW9uYWxJdGVyMQogICAgX19maW5kX2Vu ZChfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fZmlyc3QxLCBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fbGFz dDEsCiAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19maXJzdDIsIF9CaWRpcmVj dGlvbmFsSXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAgYmlkaXJlY3Rpb25hbF9pdGVyYXRv cl90YWcsIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnLAogICAgICAgICAgICAgICBfQmluYXJ5 UHJlZGljYXRlIF9fY29tcCkKICAgIHsKCiAgICAgCiAgICAgCgogICAgICB0eXBlZGVmIHJldmVy c2VfaXRlcmF0b3I8X0JpZGlyZWN0aW9uYWxJdGVyMT4gX1Jldkl0ZXIxOwogICAgICB0eXBlZGVm IHJldmVyc2VfaXRlcmF0b3I8X0JpZGlyZWN0aW9uYWxJdGVyMj4gX1Jldkl0ZXIyOwoKICAgICAg X1Jldkl0ZXIxIF9fcmxhc3QxKF9fZmlyc3QxKTsKICAgICAgX1Jldkl0ZXIyIF9fcmxhc3QyKF9f Zmlyc3QyKTsKICAgICAgX1Jldkl0ZXIxIF9fcnJlc3VsdCA9IHNlYXJjaChfUmV2SXRlcjEoX19s YXN0MSksIF9fcmxhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SZXZJ dGVyMihfX2xhc3QyKSwgX19ybGFzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgX19jb21wKTsKCiAgICAgIGlmIChfX3JyZXN1bHQgPT0gX19ybGFzdDEpCiAgICAgICAgcmV0 dXJuIF9fbGFzdDE7CiAgICAgIGVsc2UgewogICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjEgX19y ZXN1bHQgPSBfX3JyZXN1bHQuYmFzZSgpOwogICAgICAgIGFkdmFuY2UoX19yZXN1bHQsIC1kaXN0 YW5jZShfX2ZpcnN0MiwgX19sYXN0MikpOwogICAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgICAg fQogICAgfQoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcjEsIHR5cGVuYW1lIF9G b3J3YXJkSXRlcjI+CiAgICBpbmxpbmUgX0ZvcndhcmRJdGVyMQogICAgZmluZF9lbmQoX0Zvcndh cmRJdGVyMSBfX2ZpcnN0MSwgX0ZvcndhcmRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgX0Zv cndhcmRJdGVyMiBfX2ZpcnN0MiwgX0ZvcndhcmRJdGVyMiBfX2xhc3QyKQogICAgewoKICAgICAK ICAgICAKICAgICAKCgoKICAgICAgcmV0dXJuIF9fZmluZF9lbmQoX19maXJzdDEsIF9fbGFzdDEs IF9fZmlyc3QyLCBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAgICAgICBfX2l0ZXJhdG9yX2Nh dGVnb3J5KF9fZmlyc3QxKSwKICAgICAgICAgICAgICAgICAgICAgICAgX19pdGVyYXRvcl9jYXRl Z29yeShfX2ZpcnN0MikpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIx LCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXIyLAogICAgICAgICAgIHR5cGVuYW1lIF9CaW5hcnlQcmVk aWNhdGU+CiAgICBpbmxpbmUgX0ZvcndhcmRJdGVyMQogICAgZmluZF9lbmQoX0ZvcndhcmRJdGVy MSBfX2ZpcnN0MSwgX0ZvcndhcmRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgX0ZvcndhcmRJ dGVyMiBfX2ZpcnN0MiwgX0ZvcndhcmRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgX0JpbmFy eVByZWRpY2F0ZSBfX2NvbXApCiAgICB7CgogICAgIAogICAgIAogICAgIAoKCgogICAgICByZXR1 cm4gX19maW5kX2VuZChfX2ZpcnN0MSwgX19sYXN0MSwgX19maXJzdDIsIF9fbGFzdDIsCiAgICAg ICAgICAgICAgICAgICAgICAgIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdDEpLAogICAgICAg ICAgICAgICAgICAgICAgICBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QyKSwKICAgICAgICAg ICAgICAgICAgICAgICAgX19jb21wKTsKICAgIH0KCn0KIyA3MCAiL3Vzci9pbmNsdWRlL2MrKy8z LjIvYWxnb3JpdGhtIiAyIDMKIyA1NyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvc3RyaW5nIiAyIDMK IyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL2Jhc2ljX3N0cmluZy50Y2MiIDEgMwojIDQ1 ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL2Jhc2ljX3N0cmluZy50Y2MiIDMKCm5hbWVzcGFj ZSBzdGQKewogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlw ZW5hbWUgX0FsbG9jPgogICAgY29uc3QgdHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1Ry YWl0cywgX0FsbG9jPjo6c2l6ZV90eXBlCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRz LCBfQWxsb2M+OjoKICAgIF9SZXA6Ol9TX21heF9zaXplID0gKCgobnBvcyAtIHNpemVvZihfUmVw KSkvc2l6ZW9mKF9DaGFyVCkpIC0gMSkgLyA0OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs IHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGNvbnN0IF9DaGFyVAogICAg YmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBfUmVwOjpfU190ZXJt aW5hbCA9IF9DaGFyVCgpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U cmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGNvbnN0IHR5cGVuYW1lIGJhc2ljX3N0cmluZzxf Q2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQogICAgYmFzaWNfc3RyaW5nPF9DaGFy VCwgX1RyYWl0cywgX0FsbG9jPjo6bnBvczsKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs IHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVuYW1lIGJhc2ljX3N0 cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQogICAgYmFzaWNfc3RyaW5n PF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6X1NfZW1wdHlfcmVwX3N0b3JhZ2VbCiAgICAoc2l6 ZW9mKF9SZXApICsgc2l6ZW9mKF9DaGFyVCkgKyBzaXplb2Yoc2l6ZV90eXBlKSAtIDEpL3NpemVv ZihzaXplX3R5cGUpXTsKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg X1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdGVtcGxhdGU8dHlwZW5hbWUgX0luSXRlcj4K ICAgICAgX0NoYXJUKgogICAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+ OjoKICAgICAgX1NfY29uc3RydWN0KF9Jbkl0ZXIgX19iZWcsIF9Jbkl0ZXIgX19lbmQsIGNvbnN0 IF9BbGxvYyYgX19hLAogICAgICAgICAgICAgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFnKQogICAg ICB7CiAgICAgICAgaWYgKF9fYmVnID09IF9fZW5kICYmIF9fYSA9PSBfQWxsb2MoKSkKICAgICAg ICAgIHJldHVybiBfU19lbXB0eV9yZXAoKS5fTV9yZWZjb3B5KCk7CgogICAgICAgIF9DaGFyVCBf X2J1ZlsxMDBdOwogICAgICAgIHNpemVfdHlwZSBfX2kgPSAwOwogICAgICAgIHdoaWxlIChfX2Jl ZyAhPSBfX2VuZCAmJiBfX2kgPCBzaXplb2YoX19idWYpIC8gc2l6ZW9mKF9DaGFyVCkpCiAgICAg ICAgICB7CiAgICAgICAgICAgIF9fYnVmW19faSsrXSA9ICpfX2JlZzsKICAgICAgICAgICAgKytf X2JlZzsKICAgICAgICAgIH0KICAgICAgICBfUmVwKiBfX3IgPSBfUmVwOjpfU19jcmVhdGUoX19p LCBfX2EpOwogICAgICAgIHRyYWl0c190eXBlOjpjb3B5KF9fci0+X01fcmVmZGF0YSgpLCBfX2J1 ZiwgX19pKTsKICAgICAgICBfX3ItPl9NX2xlbmd0aCA9IF9faTsKICAgICAgICB0cnkKICAgICAg ICAgIHsKCgoKICAgICAgICAgICAgZm9yICg7OykKICAgICAgICAgICAgICB7CiAgICAgICAgICAg ICAgICBfQ2hhclQqIF9fcCA9IF9fci0+X01fcmVmZGF0YSgpICsgX19yLT5fTV9sZW5ndGg7CiAg ICAgICAgICAgICAgICBfQ2hhclQqIF9fbGFzdCA9IF9fci0+X01fcmVmZGF0YSgpICsgX19yLT5f TV9jYXBhY2l0eTsKICAgICAgICAgICAgICAgIGZvciAoOzspCiAgICAgICAgICAgICAgICAgIHsK ICAgICAgICAgICAgICAgICAgICBpZiAoX19iZWcgPT0gX19lbmQpCiAgICAgICAgICAgICAgICAg ICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIF9fci0+X01fbGVuZ3RoID0gX19wIC0gX19y LT5fTV9yZWZkYXRhKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICpfX3AgPSBfUmVwOjpfU190 ZXJtaW5hbDsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9fci0+X01fcmVmZGF0YSgp OwogICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGlmIChfX3AgPT0g X19sYXN0KQogICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAg Kl9fcCsrID0gKl9fYmVnOwogICAgICAgICAgICAgICAgICAgICsrX19iZWc7CiAgICAgICAgICAg ICAgICAgIH0KCiAgICAgICAgICAgICAgICBzaXplX3R5cGUgX19sZW4gPSBfX3AgLSBfX3ItPl9N X3JlZmRhdGEoKTsKICAgICAgICAgICAgICAgIF9SZXAqIF9fYW5vdGhlciA9IF9SZXA6Ol9TX2Ny ZWF0ZShfX2xlbiArIDEsIF9fYSk7CiAgICAgICAgICAgICAgICB0cmFpdHNfdHlwZTo6Y29weShf X2Fub3RoZXItPl9NX3JlZmRhdGEoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IF9fci0+X01fcmVmZGF0YSgpLCBfX2xlbik7CiAgICAgICAgICAgICAgICBfX3ItPl9NX2Rlc3Ry b3koX19hKTsKICAgICAgICAgICAgICAgIF9fciA9IF9fYW5vdGhlcjsKICAgICAgICAgICAgICAg IF9fci0+X01fbGVuZ3RoID0gX19sZW47CiAgICAgICAgICAgICAgfQogICAgICAgICAgfQogICAg ICAgIGNhdGNoKC4uLikKICAgICAgICAgIHsKICAgICAgICAgICAgX19yLT5fTV9kZXN0cm95KF9f YSk7CiAgICAgICAgICAgIHRocm93OwogICAgICAgICAgfQogICAgICAgIHJldHVybiAwOwogICAg ICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5h bWUgX0FsbG9jPgogICAgdGVtcGxhdGUgPGNsYXNzIF9Jbkl0ZXI+CiAgICAgIF9DaGFyVCoKICAg ICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICAgIF9TX2NvbnN0 cnVjdChfSW5JdGVyIF9fYmVnLCBfSW5JdGVyIF9fZW5kLCBjb25zdCBfQWxsb2MmIF9fYSwKICAg ICAgICAgICAgICAgICAgIGZvcndhcmRfaXRlcmF0b3JfdGFnKQogICAgICB7CiAgICAgICAgc2l6 ZV90eXBlIF9fZG5ldyA9IHN0YXRpY19jYXN0PHNpemVfdHlwZT4oZGlzdGFuY2UoX19iZWcsIF9f ZW5kKSk7CgogICAgICAgIGlmIChfX2JlZyA9PSBfX2VuZCAmJiBfX2EgPT0gX0FsbG9jKCkpCiAg ICAgICAgICByZXR1cm4gX1NfZW1wdHlfcmVwKCkuX01fcmVmY29weSgpOwoKCiAgICAgICAgaWYg KF9fYnVpbHRpbl9leHBlY3QoX19iZWcgPT0gX0luSXRlcigpLCAwKSkKICAgICAgICAgIF9fdGhy b3dfbG9naWNfZXJyb3IoImF0dGVtcHQgdG8gY3JlYXRlIHN0cmluZyB3aXRoIG51bGwgcG9pbnRl ciIpOwoKCiAgICAgICAgX1JlcCogX19yID0gX1JlcDo6X1NfY3JlYXRlKF9fZG5ldywgX19hKTsK ICAgICAgICB0cnkKICAgICAgICAgIHsgX1NfY29weV9jaGFycyhfX3ItPl9NX3JlZmRhdGEoKSwg X19iZWcsIF9fZW5kKTsgfQogICAgICAgIGNhdGNoKC4uLikKICAgICAgICAgIHsKICAgICAgICAg ICAgX19yLT5fTV9kZXN0cm95KF9fYSk7CiAgICAgICAgICAgIHRocm93OwogICAgICAgICAgfQog ICAgICAgIF9fci0+X01fbGVuZ3RoID0gX19kbmV3OwoKICAgICAgICBfX3ItPl9NX3JlZmRhdGEo KVtfX2RuZXddID0gX1JlcDo6X1NfdGVybWluYWw7CiAgICAgICAgcmV0dXJuIF9fci0+X01fcmVm ZGF0YSgpOwogICAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry YWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgX0NoYXJUKgogICAgYmFzaWNfc3RyaW5nPF9DaGFy VCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBfU19jb25zdHJ1Y3Qoc2l6ZV90eXBlIF9fbiwgX0No YXJUIF9fYywgY29uc3QgX0FsbG9jJiBfX2EpCiAgICB7CiAgICAgIGlmIChfX24gPT0gMCAmJiBf X2EgPT0gX0FsbG9jKCkpCiAgICAgICAgcmV0dXJuIF9TX2VtcHR5X3JlcCgpLl9NX3JlZmNvcHko KTsKCgogICAgICBfUmVwKiBfX3IgPSBfUmVwOjpfU19jcmVhdGUoX19uLCBfX2EpOwogICAgICB0 cnkKICAgICAgICB7CiAgICAgICAgICBpZiAoX19uKQogICAgICAgICAgICB0cmFpdHNfdHlwZTo6 YXNzaWduKF9fci0+X01fcmVmZGF0YSgpLCBfX24sIF9fYyk7CiAgICAgICAgfQogICAgICBjYXRj aCguLi4pCiAgICAgICAgewogICAgICAgICAgX19yLT5fTV9kZXN0cm95KF9fYSk7CiAgICAgICAg ICB0aHJvdzsKICAgICAgICB9CiAgICAgIF9fci0+X01fbGVuZ3RoID0gX19uOwogICAgICBfX3It Pl9NX3JlZmRhdGEoKVtfX25dID0gX1JlcDo6X1NfdGVybWluYWw7CiAgICAgIHJldHVybiBfX3It Pl9NX3JlZmRhdGEoKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt ZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJh aXRzLCBfQWxsb2M+OjoKICAgIGJhc2ljX3N0cmluZyhjb25zdCBiYXNpY19zdHJpbmcmIF9fc3Ry KQogICAgOiBfTV9kYXRhcGx1cyhfX3N0ci5fTV9yZXAoKS0+X01fZ3JhYihfQWxsb2MoKSwgX19z dHIuZ2V0X2FsbG9jYXRvcigpKSwKICAgICAgICAgICAgICAgICBfX3N0ci5nZXRfYWxsb2NhdG9y KCkpCiAgICB7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz LCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxs b2M+OjoKICAgIGJhc2ljX3N0cmluZyhjb25zdCBfQWxsb2MmIF9fYSkKICAgIDogX01fZGF0YXBs dXMoX1NfY29uc3RydWN0KHNpemVfdHlwZSgpLCBfQ2hhclQoKSwgX19hKSwgX19hKQogICAgeyB9 CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUg X0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBi YXNpY19zdHJpbmcoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwgc2l6ZV90eXBlIF9fcG9zLCBz aXplX3R5cGUgX19uKQogICAgOiBfTV9kYXRhcGx1cyhfU19jb25zdHJ1Y3QoX19zdHIuX01fY2hl Y2soX19wb3MpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zdHIuX01fZm9sZChf X3BvcywgX19uKSwgX0FsbG9jKCkpLCBfQWxsb2MoKSkKICAgIHsgfQoKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2lj X3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgYmFzaWNfc3RyaW5nKGNvbnN0 IGJhc2ljX3N0cmluZyYgX19zdHIsIHNpemVfdHlwZSBfX3BvcywKICAgICAgICAgICAgICAgICBz aXplX3R5cGUgX19uLCBjb25zdCBfQWxsb2MmIF9fYSkKICAgIDogX01fZGF0YXBsdXMoX1NfY29u c3RydWN0KF9fc3RyLl9NX2NoZWNrKF9fcG9zKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIF9fc3RyLl9NX2ZvbGQoX19wb3MsIF9fbiksIF9fYSksIF9fYSkKICAgIHsgfQoKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4K ICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgYmFzaWNfc3Ry aW5nKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19uLCBjb25zdCBfQWxsb2MmIF9fYSkK ICAgIDogX01fZGF0YXBsdXMoX1NfY29uc3RydWN0KF9fcywgX19zICsgX19uLCBfX2EpLCBfX2Ep CiAgICB7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0 eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+ OjoKICAgIGJhc2ljX3N0cmluZyhjb25zdCBfQ2hhclQqIF9fcywgY29uc3QgX0FsbG9jJiBfX2Ep CiAgICA6IF9NX2RhdGFwbHVzKF9TX2NvbnN0cnVjdChfX3MsIF9fcyA/IF9fcyArIHRyYWl0c190 eXBlOjpsZW5ndGgoX19zKSA6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3MgKyBu cG9zLCBfX2EpLCBfX2EpCiAgICB7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl bmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBf VHJhaXRzLCBfQWxsb2M+OjoKICAgIGJhc2ljX3N0cmluZyhzaXplX3R5cGUgX19uLCBfQ2hhclQg X19jLCBjb25zdCBfQWxsb2MmIF9fYSkKICAgIDogX01fZGF0YXBsdXMoX1NfY29uc3RydWN0KF9f biwgX19jLCBfX2EpLCBfX2EpCiAgICB7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0 eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBf SW5wdXRJdGVyPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAg ICBiYXNpY19zdHJpbmcoX0lucHV0SXRlciBfX2JlZywgX0lucHV0SXRlciBfX2VuZCwgY29uc3Qg X0FsbG9jJiBfX2EpCiAgICA6IF9NX2RhdGFwbHVzKF9TX2NvbnN0cnVjdChfX2JlZywgX19lbmQs IF9fYSksIF9fYSkKICAgIHsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l IF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFp dHMsIF9BbGxvYz4mCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+Ojph c3NpZ24oY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cikKICAgIHsKICAgICAgaWYgKF9NX3JlcCgp ICE9IF9fc3RyLl9NX3JlcCgpKQogICAgICAgIHsKCiAgICAgICAgICBhbGxvY2F0b3JfdHlwZSBf X2EgPSB0aGlzLT5nZXRfYWxsb2NhdG9yKCk7CiAgICAgICAgICBfQ2hhclQqIF9fdG1wID0gX19z dHIuX01fcmVwKCktPl9NX2dyYWIoX19hLCBfX3N0ci5nZXRfYWxsb2NhdG9yKCkpOwogICAgICAg ICAgX01fcmVwKCktPl9NX2Rpc3Bvc2UoX19hKTsKICAgICAgICAgIF9NX2RhdGEoX190bXApOwog ICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHZvaWQKICAgIGJh c2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Ol9SZXA6OgogICAgX01fZGVzdHJv eShjb25zdCBfQWxsb2MmIF9fYSkgdGhyb3cgKCkKICAgIHsKICAgICAgc2l6ZV90eXBlIF9fc2l6 ZSA9IHNpemVvZihfUmVwKSArIChfTV9jYXBhY2l0eSArIDEpICogc2l6ZW9mKF9DaGFyVCk7CiAg ICAgIF9SYXdfYnl0ZXNfYWxsb2MoX19hKS5kZWFsbG9jYXRlKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hh cio+KHRoaXMpLCBfX3NpemUpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5 cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHZvaWQKICAgIGJhc2ljX3N0cmlu ZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Ol9NX2xlYWtfaGFyZCgpCiAgICB7CiAgICAgIGlm IChfTV9yZXAoKS0+X01faXNfc2hhcmVkKCkpCiAgICAgICAgX01fbXV0YXRlKDAsIDAsIDApOwog ICAgICBfTV9yZXAoKS0+X01fc2V0X2xlYWtlZCgpOwogICAgfQoKCgoKCgoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHZv aWQKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgX01fbXV0 YXRlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbGVuMSwgc2l6ZV90eXBlIF9fbGVuMikK ICAgIHsKICAgICAgc2l6ZV90eXBlIF9fb2xkX3NpemUgPSB0aGlzLT5zaXplKCk7CiAgICAgIGNv bnN0IHNpemVfdHlwZSBfX25ld19zaXplID0gX19vbGRfc2l6ZSArIF9fbGVuMiAtIF9fbGVuMTsK ICAgICAgY29uc3QgX0NoYXJUKiBfX3NyYyA9IF9NX2RhdGEoKSArIF9fcG9zICsgX19sZW4xOwog ICAgICBjb25zdCBzaXplX3R5cGUgX19ob3dfbXVjaCA9IF9fb2xkX3NpemUgLSBfX3BvcyAtIF9f bGVuMTsKCiAgICAgIGlmIChfTV9yZXAoKS0+X01faXNfc2hhcmVkKCkgfHwgX19uZXdfc2l6ZSA+ IGNhcGFjaXR5KCkpCiAgICAgICAgewoKICAgICAgICAgIGFsbG9jYXRvcl90eXBlIF9fYSA9IGdl dF9hbGxvY2F0b3IoKTsKCgogICAgICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fcGFnZXNpemUgPSA0 MDk2OwogICAgICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fbWFsbG9jX2hlYWRlcl9zaXplID0gNCAq IHNpemVvZiAodm9pZCopOwoKICAgICAgICAgIGNvbnN0IHNpemVfdHlwZSBfX3BhZ2VfY2FwYWNp dHkgPSAoX19wYWdlc2l6ZSAtIF9fbWFsbG9jX2hlYWRlcl9zaXplCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gc2l6ZW9mKF9SZXApIC0gc2l6ZW9mKF9DaGFy VCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gc2l6ZW9m KF9DaGFyVCk7CiAgICAgICAgICBfUmVwKiBfX3I7CiAgICAgICAgICBpZiAoX19uZXdfc2l6ZSA+ IGNhcGFjaXR5KCkgJiYgX19uZXdfc2l6ZSA+IF9fcGFnZV9jYXBhY2l0eSkKCiAgICAgICAgICAg IF9fciA9IF9SZXA6Ol9TX2NyZWF0ZShfX25ld19zaXplID4gMipjYXBhY2l0eSgpID8KICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbmV3X3NpemUgOiAyKmNhcGFjaXR5KCksIF9f YSk7CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIF9fciA9IF9SZXA6Ol9TX2NyZWF0ZShfX25l d19zaXplLCBfX2EpOwogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBp ZiAoX19wb3MpCiAgICAgICAgICAgICAgICB0cmFpdHNfdHlwZTo6Y29weShfX3ItPl9NX3JlZmRh dGEoKSwgX01fZGF0YSgpLCBfX3Bvcyk7CiAgICAgICAgICAgICAgaWYgKF9faG93X211Y2gpCiAg ICAgICAgICAgICAgICB0cmFpdHNfdHlwZTo6Y29weShfX3ItPl9NX3JlZmRhdGEoKSArIF9fcG9z ICsgX19sZW4yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zcmMsIF9faG93 X211Y2gpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaCguLi4pCiAgICAgICAgICAgIHsK ICAgICAgICAgICAgICBfX3ItPl9NX2Rpc3Bvc2UoZ2V0X2FsbG9jYXRvcigpKTsKICAgICAgICAg ICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgICAgX01fcmVwKCktPl9NX2Rpc3Bvc2Uo X19hKTsKICAgICAgICAgIF9NX2RhdGEoX19yLT5fTV9yZWZkYXRhKCkpOwogICAgICB9CiAgICAg IGVsc2UgaWYgKF9faG93X211Y2ggJiYgX19sZW4xICE9IF9fbGVuMikKICAgICAgICB7CgogICAg ICAgICAgdHJhaXRzX3R5cGU6Om1vdmUoX01fZGF0YSgpICsgX19wb3MgKyBfX2xlbjIsIF9fc3Jj LCBfX2hvd19tdWNoKTsKICAgICAgICB9CiAgICAgIF9NX3JlcCgpLT5fTV9zZXRfc2hhcmFibGUo KTsKICAgICAgX01fcmVwKCktPl9NX2xlbmd0aCA9IF9fbmV3X3NpemU7CiAgICAgIF9NX2RhdGEo KVtfX25ld19zaXplXSA9IF9SZXA6Ol9TX3Rlcm1pbmFsOwoKICAgIH0KCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB2b2lk CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpyZXNlcnZlKHNpemVf dHlwZSBfX3JlcykKICAgIHsKICAgICAgaWYgKF9fcmVzID4gdGhpcy0+Y2FwYWNpdHkoKSB8fCBf TV9yZXAoKS0+X01faXNfc2hhcmVkKCkpCiAgICAgICAgewogICAgICAgICAgaWYgKF9fcmVzID4g dGhpcy0+bWF4X3NpemUoKSkKICAgICAgICAgICAgX190aHJvd19sZW5ndGhfZXJyb3IoImJhc2lj X3N0cmluZzo6cmVzZXJ2ZSIpOwoKICAgICAgICAgIGlmIChfX3JlcyA8IHRoaXMtPnNpemUoKSkK ICAgICAgICAgICAgX19yZXMgPSB0aGlzLT5zaXplKCk7CiAgICAgICAgICBhbGxvY2F0b3JfdHlw ZSBfX2EgPSBnZXRfYWxsb2NhdG9yKCk7CiAgICAgICAgICBfQ2hhclQqIF9fdG1wID0gX01fcmVw KCktPl9NX2Nsb25lKF9fYSwgX19yZXMgLSB0aGlzLT5zaXplKCkpOwogICAgICAgICAgX01fcmVw KCktPl9NX2Rpc3Bvc2UoX19hKTsKICAgICAgICAgIF9NX2RhdGEoX190bXApOwogICAgICAgIH0K ICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBl bmFtZSBfQWxsb2M+CiAgICB2b2lkIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxv Yz46OnN3YXAoYmFzaWNfc3RyaW5nJiBfX3MpCiAgICB7CiAgICAgIGlmIChfTV9yZXAoKS0+X01f aXNfbGVha2VkKCkpCiAgICAgICAgX01fcmVwKCktPl9NX3NldF9zaGFyYWJsZSgpOwogICAgICBp ZiAoX19zLl9NX3JlcCgpLT5fTV9pc19sZWFrZWQoKSkKICAgICAgICBfX3MuX01fcmVwKCktPl9N X3NldF9zaGFyYWJsZSgpOwogICAgICBpZiAodGhpcy0+Z2V0X2FsbG9jYXRvcigpID09IF9fcy5n ZXRfYWxsb2NhdG9yKCkpCiAgICAgICAgewogICAgICAgICAgX0NoYXJUKiBfX3RtcCA9IF9NX2Rh dGEoKTsKICAgICAgICAgIF9NX2RhdGEoX19zLl9NX2RhdGEoKSk7CiAgICAgICAgICBfX3MuX01f ZGF0YShfX3RtcCk7CiAgICAgICAgfQoKICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgIGJh c2ljX3N0cmluZyBfX3RtcDEoX01faWJlZ2luKCksIF9NX2llbmQoKSwgX19zLmdldF9hbGxvY2F0 b3IoKSk7CiAgICAgICAgICBiYXNpY19zdHJpbmcgX190bXAyKF9fcy5fTV9pYmVnaW4oKSwgX19z Ll9NX2llbmQoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+Z2V0X2FsbG9j YXRvcigpKTsKICAgICAgICAgICp0aGlzID0gX190bXAyOwogICAgICAgICAgX19zID0gX190bXAx OwogICAgICAgIH0KICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf VHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0eXBlbmFtZSBiYXNpY19zdHJpbmc8X0NoYXJU LCBfVHJhaXRzLCBfQWxsb2M+OjpfUmVwKgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0 cywgX0FsbG9jPjo6X1JlcDo6CiAgICBfU19jcmVhdGUoc2l6ZV90IF9fY2FwYWNpdHksIGNvbnN0 IF9BbGxvYyYgX19hbGxvYykKICAgIHsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJU LCBfVHJhaXRzLCBfQWxsb2M+IF9fc3RyaW5nX3R5cGU7CgoKICAgICAgaWYgKF9fY2FwYWNpdHkg PiBfU19tYXhfc2l6ZSkKCgoKICAgICAgICBfX3Rocm93X2xlbmd0aF9lcnJvcigiYmFzaWNfc3Ry aW5nOjpfU19jcmVhdGUiKTsKCgoKCiAgICAgIHNpemVfdCBfX3NpemUgPSAoX19jYXBhY2l0eSAr IDEpICogc2l6ZW9mKF9DaGFyVCkgKyBzaXplb2YoX1JlcCk7CiMgNDIxICIvdXNyL2luY2x1ZGUv YysrLzMuMi9iaXRzL2Jhc2ljX3N0cmluZy50Y2MiIDMKICAgICAgY29uc3Qgc2l6ZV90IF9fcGFn ZXNpemUgPSA0MDk2OwogICAgICBjb25zdCBzaXplX3QgX19zdWJwYWdlc2l6ZSA9IDEyODsKICAg ICAgY29uc3Qgc2l6ZV90IF9fbWFsbG9jX2hlYWRlcl9zaXplID0gNCAqIHNpemVvZiAodm9pZCop OwogICAgICBpZiAoKF9fc2l6ZSArIF9fbWFsbG9jX2hlYWRlcl9zaXplKSA+IF9fcGFnZXNpemUp CiAgICAgICAgewogICAgICAgICAgc2l6ZV90IF9fZXh0cmEgPQogICAgICAgICAgICAoX19wYWdl c2l6ZSAtICgoX19zaXplICsgX19tYWxsb2NfaGVhZGVyX3NpemUpICUgX19wYWdlc2l6ZSkpCiAg ICAgICAgICAgICUgX19wYWdlc2l6ZTsKICAgICAgICAgIF9fY2FwYWNpdHkgKz0gX19leHRyYSAv IHNpemVvZihfQ2hhclQpOwogICAgICAgICAgX19zaXplID0gKF9fY2FwYWNpdHkgKyAxKSAqIHNp emVvZihfQ2hhclQpICsgc2l6ZW9mKF9SZXApOwogICAgICAgIH0KICAgICAgZWxzZSBpZiAoX19z aXplID4gX19zdWJwYWdlc2l6ZSkKICAgICAgICB7CiAgICAgICAgICBzaXplX3QgX19leHRyYSA9 CiAgICAgICAgICAgIChfX3N1YnBhZ2VzaXplIC0gKChfX3NpemUgKyBfX21hbGxvY19oZWFkZXJf c2l6ZSkgJSBfX3N1YnBhZ2VzaXplKSkKICAgICAgICAgICAgJSBfX3N1YnBhZ2VzaXplOwogICAg ICAgICAgX19jYXBhY2l0eSArPSBfX2V4dHJhIC8gc2l6ZW9mKF9DaGFyVCk7CiAgICAgICAgICBf X3NpemUgPSAoX19jYXBhY2l0eSArIDEpICogc2l6ZW9mKF9DaGFyVCkgKyBzaXplb2YoX1JlcCk7 CiAgICAgICAgfQoKCgogICAgICB2b2lkKiBfX3BsYWNlID0gX1Jhd19ieXRlc19hbGxvYyhfX2Fs bG9jKS5hbGxvY2F0ZShfX3NpemUpOwogICAgICBfUmVwICpfX3AgPSBuZXcgKF9fcGxhY2UpIF9S ZXA7CiAgICAgIF9fcC0+X01fY2FwYWNpdHkgPSBfX2NhcGFjaXR5OwogICAgICBfX3AtPl9NX3Nl dF9zaGFyYWJsZSgpOwogICAgICBfX3AtPl9NX2xlbmd0aCA9IDA7CiAgICAgIHJldHVybiBfX3A7 CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlw ZW5hbWUgX0FsbG9jPgogICAgX0NoYXJUKgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0 cywgX0FsbG9jPjo6X1JlcDo6CiAgICBfTV9jbG9uZShjb25zdCBfQWxsb2MmIF9fYWxsb2MsIHNp emVfdHlwZSBfX3JlcykKICAgIHsKCiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX3JlcXVlc3RlZF9j YXAgPSBfTV9sZW5ndGggKyBfX3JlczsKCiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX3BhZ2VzaXpl ID0gNDA5NjsKICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fbWFsbG9jX2hlYWRlcl9zaXplID0gNCAq IHNpemVvZiAodm9pZCopOwoKICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fcGFnZV9jYXBhY2l0eSA9 CiAgICAgICAgKF9fcGFnZXNpemUgLSBfX21hbGxvY19oZWFkZXJfc2l6ZSAtIHNpemVvZihfUmVw KSAtIHNpemVvZihfQ2hhclQpKQogICAgICAgIC8gc2l6ZW9mKF9DaGFyVCk7CiAgICAgIF9SZXAq IF9fcjsKICAgICAgaWYgKF9fcmVxdWVzdGVkX2NhcCA+IF9NX2NhcGFjaXR5ICYmIF9fcmVxdWVz dGVkX2NhcCA+IF9fcGFnZV9jYXBhY2l0eSkKCiAgICAgICAgX19yID0gX1JlcDo6X1NfY3JlYXRl KF9fcmVxdWVzdGVkX2NhcCA+IDIqX01fY2FwYWNpdHkgPwogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBfX3JlcXVlc3RlZF9jYXAgOiAyKl9NX2NhcGFjaXR5LCBfX2FsbG9jKTsKICAgICAg ZWxzZQogICAgICAgIF9fciA9IF9SZXA6Ol9TX2NyZWF0ZShfX3JlcXVlc3RlZF9jYXAsIF9fYWxs b2MpOwoKICAgICAgaWYgKF9NX2xlbmd0aCkKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAg ICAgICAgeyB0cmFpdHNfdHlwZTo6Y29weShfX3ItPl9NX3JlZmRhdGEoKSwgX01fcmVmZGF0YSgp LCBfTV9sZW5ndGgpOyB9CiAgICAgICAgICBjYXRjaCguLi4pCiAgICAgICAgICAgIHsKICAgICAg ICAgICAgICBfX3ItPl9NX2Rlc3Ryb3koX19hbGxvYyk7CiAgICAgICAgICAgICAgdGhyb3c7CiAg ICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIF9fci0+X01fbGVuZ3RoID0gX01fbGVuZ3RoOwog ICAgICByZXR1cm4gX19yLT5fTV9yZWZkYXRhKCk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1l IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdm9pZAogICAg YmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6cmVzaXplKHNpemVfdHlwZSBf X24sIF9DaGFyVCBfX2MpCiAgICB7CiAgICAgIGlmIChfX24gPiBtYXhfc2l6ZSgpKQogICAgICAg IF9fdGhyb3dfbGVuZ3RoX2Vycm9yKCJiYXNpY19zdHJpbmc6OnJlc2l6ZSIpOwogICAgICBzaXpl X3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOwogICAgICBpZiAoX19zaXplIDwgX19uKQogICAg ICAgIHRoaXMtPmFwcGVuZChfX24gLSBfX3NpemUsIF9fYyk7CiAgICAgIGVsc2UgaWYgKF9fbiA8 IF9fc2l6ZSkKICAgICAgICB0aGlzLT5lcmFzZShfX24pOwoKICAgIH0KCgoKCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyPgogICAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBf VHJhaXRzLCBfQWxsb2M+JgogICAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxs b2M+OjoKICAgICAgX01fcmVwbGFjZShpdGVyYXRvciBfX2kxLCBpdGVyYXRvciBfX2kyLCBfSW5w dXRJdGVyIF9fazEsCiAgICAgICAgICAgICAgICAgX0lucHV0SXRlciBfX2syLCBpbnB1dF9pdGVy YXRvcl90YWcpCiAgICAgIHsKCiAgICAgICAgYmFzaWNfc3RyaW5nIF9fcyhfX2sxLCBfX2syKTsK ICAgICAgICByZXR1cm4gX01fcmVwbGFjZV9zYWZlKF9faTEsIF9faTIsIF9fcy5fTV9pYmVnaW4o KSwgX19zLl9NX2llbmQoKSk7CiAgICAgIH0KCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU LCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfRm9yd2FyZEl0ZXI+CiAgICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxv Yz4mCiAgICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgICBf TV9yZXBsYWNlX3NhZmUoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwgX0ZvcndhcmRJdGVy IF9fazEsCiAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19rMikKICAgICAgewog ICAgICAgIHNpemVfdHlwZSBfX2RuZXcgPSBzdGF0aWNfY2FzdDxzaXplX3R5cGU+KGRpc3RhbmNl KF9fazEsIF9fazIpKTsKICAgICAgICBzaXplX3R5cGUgX19kb2xkID0gX19pMiAtIF9faTE7CiAg ICAgICAgc2l6ZV90eXBlIF9fZG1heCA9IHRoaXMtPm1heF9zaXplKCk7CgogICAgICAgIGlmIChf X2RtYXggPD0gX19kbmV3KQogICAgICAgICAgX190aHJvd19sZW5ndGhfZXJyb3IoImJhc2ljX3N0 cmluZzo6X01fcmVwbGFjZSIpOwogICAgICAgIHNpemVfdHlwZSBfX29mZiA9IF9faTEgLSBfTV9p YmVnaW4oKTsKICAgICAgICBfTV9tdXRhdGUoX19vZmYsIF9fZG9sZCwgX19kbmV3KTsKCgogICAg ICAgIGlmIChfX2RuZXcpCiAgICAgICAgICBfU19jb3B5X2NoYXJzKF9NX2RhdGEoKSArIF9fb2Zm LCBfX2sxLCBfX2syKTsKCiAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICB9CgogIHRlbXBsYXRl PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAg YmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYKICAgIGJhc2ljX3N0cmluZzxf Q2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgcmVwbGFjZShzaXplX3R5cGUgX19wb3MxLCBz aXplX3R5cGUgX19uMSwgY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwKICAgICAgICAgICAgc2l6 ZV90eXBlIF9fcG9zMiwgc2l6ZV90eXBlIF9fbjIpCiAgICB7CiAgICAgIGNvbnN0IHNpemVfdHlw ZSBfX3N0cnNpemUgPSBfX3N0ci5zaXplKCk7CiAgICAgIGlmIChfX3BvczIgPiBfX3N0cnNpemUp CiAgICAgICAgX190aHJvd19vdXRfb2ZfcmFuZ2UoImJhc2ljX3N0cmluZzo6cmVwbGFjZSIpOwog ICAgICBjb25zdCBib29sIF9fdGVzdG4yID0gX19uMiA8IF9fc3Ryc2l6ZSAtIF9fcG9zMjsKICAg ICAgY29uc3Qgc2l6ZV90eXBlIF9fZm9sZG4yID0gX190ZXN0bjIgPyBfX24yIDogX19zdHJzaXpl IC0gX19wb3MyOwogICAgICByZXR1cm4gdGhpcy0+cmVwbGFjZShfX3BvczEsIF9fbjEsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgIF9fc3RyLl9NX2RhdGEoKSArIF9fcG9zMiwgX19mb2xkbjIp OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5 cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4m CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGFwcGVuZChj b25zdCBiYXNpY19zdHJpbmcmIF9fc3RyKQogICAgewoKCgogICAgICBzaXplX3R5cGUgX19zaXpl ID0gX19zdHIuc2l6ZSgpOwogICAgICBzaXplX3R5cGUgX19sZW4gPSBfX3NpemUgKyB0aGlzLT5z aXplKCk7CiAgICAgIGlmIChfX2xlbiA+IHRoaXMtPmNhcGFjaXR5KCkpCiAgICAgICAgdGhpcy0+ cmVzZXJ2ZShfX2xlbik7CiAgICAgIHJldHVybiBfTV9yZXBsYWNlX3NhZmUoX01faWVuZCgpLCBf TV9pZW5kKCksIF9fc3RyLl9NX2liZWdpbigpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg IF9fc3RyLl9NX2llbmQoKSk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw ZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwg X1RyYWl0cywgX0FsbG9jPiYKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxv Yz46OgogICAgYXBwZW5kKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsIHNpemVfdHlwZSBfX3Bv cywgc2l6ZV90eXBlIF9fbikKICAgIHsKCgoKICAgICAgc2l6ZV90eXBlIF9fbGVuID0gbWluKF9f c3RyLnNpemUoKSAtIF9fcG9zLCBfX24pICsgdGhpcy0+c2l6ZSgpOwogICAgICBpZiAoX19sZW4g PiB0aGlzLT5jYXBhY2l0eSgpKQogICAgICAgIHRoaXMtPnJlc2VydmUoX19sZW4pOwogICAgICBy ZXR1cm4gX01fcmVwbGFjZV9zYWZlKF9NX2llbmQoKSwgX01faWVuZCgpLCBfX3N0ci5fTV9jaGVj ayhfX3BvcyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zdHIuX01fZm9sZChfX3Bv cywgX19uKSk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry YWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywg X0FsbG9jPiYKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAg YXBwZW5kKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19uKQogICAgewogICAgICBzaXpl X3R5cGUgX19sZW4gPSBfX24gKyB0aGlzLT5zaXplKCk7CiAgICAgIGlmIChfX2xlbiA+IHRoaXMt PmNhcGFjaXR5KCkpCiAgICAgICAgdGhpcy0+cmVzZXJ2ZShfX2xlbik7CiAgICAgIHJldHVybiBf TV9yZXBsYWNlX3NhZmUoX01faWVuZCgpLCBfTV9pZW5kKCksIF9fcywgX19zICsgX19uKTsKICAg IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFt ZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JgogICAg YmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBhcHBlbmQoc2l6ZV90 eXBlIF9fbiwgX0NoYXJUIF9fYykKICAgIHsKICAgICAgc2l6ZV90eXBlIF9fbGVuID0gX19uICsg dGhpcy0+c2l6ZSgpOwogICAgICBpZiAoX19sZW4gPiB0aGlzLT5jYXBhY2l0eSgpKQogICAgICAg IHRoaXMtPnJlc2VydmUoX19sZW4pOwogICAgICAgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX01faWVu ZCgpLCBfTV9pZW5kKCksIF9fbiwgX19jKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No YXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8 X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+CiAgICBvcGVyYXRvcisoY29uc3QgX0NoYXJUKiBfX2xo cywKICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxs b2M+JiBfX3JocykKICAgIHsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJh aXRzLCBfQWxsb2M+IF9fc3RyaW5nX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19zdHJp bmdfdHlwZTo6c2l6ZV90eXBlIF9fc2l6ZV90eXBlOwogICAgICBfX3NpemVfdHlwZSBfX2xlbiA9 IF9UcmFpdHM6Omxlbmd0aChfX2xocyk7CiAgICAgIF9fc3RyaW5nX3R5cGUgX19zdHI7CiAgICAg IF9fc3RyLnJlc2VydmUoX19sZW4gKyBfX3Jocy5zaXplKCkpOwogICAgICBfX3N0ci5hcHBlbmQo X19saHMsIF9fbGhzICsgX19sZW4pOwogICAgICBfX3N0ci5hcHBlbmQoX19yaHMpOwogICAgICBy ZXR1cm4gX19zdHI7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg X1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0 cywgX0FsbG9jPgogICAgb3BlcmF0b3IrKF9DaGFyVCBfX2xocywgY29uc3QgYmFzaWNfc3RyaW5n PF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAgICB7CiAgICAgIHR5cGVkZWYgYmFz aWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiBfX3N0cmluZ190eXBlOwogICAgICB0 eXBlZGVmIHR5cGVuYW1lIF9fc3RyaW5nX3R5cGU6OnNpemVfdHlwZSBfX3NpemVfdHlwZTsKICAg ICAgX19zdHJpbmdfdHlwZSBfX3N0cjsKICAgICAgX19zaXplX3R5cGUgX19sZW4gPSBfX3Jocy5z aXplKCk7CiAgICAgIF9fc3RyLnJlc2VydmUoX19sZW4gKyAxKTsKICAgICAgX19zdHIuYXBwZW5k KF9fc2l6ZV90eXBlKDEpLCBfX2xocyk7CiAgICAgIF9fc3RyLmFwcGVuZChfX3Jocyk7CiAgICAg IHJldHVybiBfX3N0cjsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt ZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJh aXRzLCBfQWxsb2M+JgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6 CiAgICByZXBsYWNlKGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9yIF9faTIsIHNpemVfdHlwZSBfX24y LCBfQ2hhclQgX19jKQogICAgewogICAgICBzaXplX3R5cGUgX19uMSA9IF9faTIgLSBfX2kxOwog ICAgICBzaXplX3R5cGUgX19vZmYxID0gX19pMSAtIF9NX2liZWdpbigpOwogICAgICBpZiAobWF4 X3NpemUoKSAtICh0aGlzLT5zaXplKCkgLSBfX24xKSA8PSBfX24yKQogICAgICAgIF9fdGhyb3df bGVuZ3RoX2Vycm9yKCJiYXNpY19zdHJpbmc6OnJlcGxhY2UiKTsKICAgICAgX01fbXV0YXRlIChf X29mZjEsIF9fbjEsIF9fbjIpOwoKICAgICAgaWYgKF9fbjIpCiAgICAgICAgdHJhaXRzX3R5cGU6 OmFzc2lnbihfTV9kYXRhKCkgKyBfX29mZjEsIF9fbjIsIF9fYyk7CiAgICAgIHJldHVybiAqdGhp czsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0 eXBlbmFtZSBfQWxsb2M+CiAgICB0eXBlbmFtZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRz LCBfQWxsb2M+OjpzaXplX3R5cGUKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9B bGxvYz46OgogICAgY29weShfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fbiwgc2l6ZV90eXBlIF9f cG9zKSBjb25zdAogICAgewogICAgICBpZiAoX19wb3MgPiB0aGlzLT5zaXplKCkpCiAgICAgICAg X190aHJvd19vdXRfb2ZfcmFuZ2UoImJhc2ljX3N0cmluZzo6Y29weSIpOwoKICAgICAgaWYgKF9f biA+IHRoaXMtPnNpemUoKSAtIF9fcG9zKQogICAgICAgIF9fbiA9IHRoaXMtPnNpemUoKSAtIF9f cG9zOwoKICAgICAgdHJhaXRzX3R5cGU6OmNvcHkoX19zLCBfTV9kYXRhKCkgKyBfX3BvcywgX19u KTsKCiAgICAgIHJldHVybiBfX247CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg dHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdHlwZW5hbWUgYmFzaWNfc3Ry aW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90eXBlCiAgICBiYXNpY19zdHJpbmc8 X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGZpbmQoY29uc3QgX0NoYXJUKiBfX3MsIHNp emVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikgY29uc3QKICAgIHsKICAgICAgc2l6ZV90eXBl IF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsKICAgICAgc2l6ZV90IF9feHBvcyA9IF9fcG9zOwogICAg ICBjb25zdCBfQ2hhclQqIF9fZGF0YSA9IF9NX2RhdGEoKTsKICAgICAgZm9yICg7IF9feHBvcyAr IF9fbiA8PSBfX3NpemU7ICsrX194cG9zKQogICAgICAgIGlmICh0cmFpdHNfdHlwZTo6Y29tcGFy ZShfX2RhdGEgKyBfX3hwb3MsIF9fcywgX19uKSA9PSAwKQogICAgICAgICAgcmV0dXJuIF9feHBv czsKICAgICAgcmV0dXJuIG5wb3M7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg dHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdHlwZW5hbWUgYmFzaWNfc3Ry aW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90eXBlCiAgICBiYXNpY19zdHJpbmc8 X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGZpbmQoX0NoYXJUIF9fYywgc2l6ZV90eXBl IF9fcG9zKSBjb25zdAogICAgewogICAgICBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgp OwogICAgICBzaXplX3R5cGUgX19yZXQgPSBucG9zOwogICAgICBpZiAoX19wb3MgPCBfX3NpemUp CiAgICAgICAgewogICAgICAgICAgY29uc3QgX0NoYXJUKiBfX2RhdGEgPSBfTV9kYXRhKCk7CiAg ICAgICAgICBzaXplX3R5cGUgX19uID0gX19zaXplIC0gX19wb3M7CiAgICAgICAgICBjb25zdCBf Q2hhclQqIF9fcCA9IHRyYWl0c190eXBlOjpmaW5kKF9fZGF0YSArIF9fcG9zLCBfX24sIF9fYyk7 CiAgICAgICAgICBpZiAoX19wKQogICAgICAgICAgICBfX3JldCA9IF9fcCAtIF9fZGF0YTsKICAg ICAgICB9CiAgICAgIHJldHVybiBfX3JldDsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D aGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdHlwZW5hbWUgYmFz aWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90eXBlCiAgICBiYXNpY19z dHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIHJmaW5kKGNvbnN0IF9DaGFyVCog X19zLCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24pIGNvbnN0CiAgICB7CiAgICAgIHNp emVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CiAgICAgIGlmIChfX24gPD0gX19zaXplKQog ICAgICAgIHsKICAgICAgICAgIF9fcG9zID0gc3RkOjptaW4oX19zaXplIC0gX19uLCBfX3Bvcyk7 CiAgICAgICAgICBjb25zdCBfQ2hhclQqIF9fZGF0YSA9IF9NX2RhdGEoKTsKICAgICAgICAgIGRv CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpZiAodHJhaXRzX3R5cGU6OmNvbXBhcmUoX19k YXRhICsgX19wb3MsIF9fcywgX19uKSA9PSAwKQogICAgICAgICAgICAgICAgcmV0dXJuIF9fcG9z OwogICAgICAgICAgICB9CiAgICAgICAgICB3aGlsZSAoX19wb3MtLSA+IDApOwogICAgICAgIH0K ICAgICAgcmV0dXJuIG5wb3M7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw ZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdHlwZW5hbWUgYmFzaWNfc3RyaW5n PF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90eXBlCiAgICBiYXNpY19zdHJpbmc8X0No YXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIHJmaW5kKF9DaGFyVCBfX2MsIHNpemVfdHlwZSBf X3BvcykgY29uc3QKICAgIHsKICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsK ICAgICAgaWYgKF9fc2l6ZSkKICAgICAgICB7CiAgICAgICAgICBzaXplX3QgX194cG9zID0gX19z aXplIC0gMTsKICAgICAgICAgIGlmIChfX3hwb3MgPiBfX3BvcykKICAgICAgICAgICAgX194cG9z ID0gX19wb3M7CgogICAgICAgICAgZm9yICgrK19feHBvczsgX194cG9zLS0gPiAwOyApCiAgICAg ICAgICAgIGlmICh0cmFpdHNfdHlwZTo6ZXEoX01fZGF0YSgpW19feHBvc10sIF9fYykpCiAgICAg ICAgICAgICAgcmV0dXJuIF9feHBvczsKICAgICAgICB9CiAgICAgIHJldHVybiBucG9zOwogICAg fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1l IF9BbGxvYz4KICAgIHR5cGVuYW1lIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxv Yz46OnNpemVfdHlwZQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6 CiAgICBmaW5kX2ZpcnN0X29mKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MsIHNp emVfdHlwZSBfX24pIGNvbnN0CiAgICB7CiAgICAgIGZvciAoOyBfX24gJiYgX19wb3MgPCB0aGlz LT5zaXplKCk7ICsrX19wb3MpCiAgICAgICAgewogICAgICAgICAgY29uc3QgX0NoYXJUKiBfX3Ag PSB0cmFpdHNfdHlwZTo6ZmluZChfX3MsIF9fbiwgX01fZGF0YSgpW19fcG9zXSk7CiAgICAgICAg ICBpZiAoX19wKQogICAgICAgICAgICByZXR1cm4gX19wb3M7CiAgICAgICAgfQogICAgICByZXR1 cm4gbnBvczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh aXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0eXBlbmFtZSBiYXNpY19zdHJpbmc8X0NoYXJULCBf VHJhaXRzLCBfQWxsb2M+OjpzaXplX3R5cGUKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFp dHMsIF9BbGxvYz46OgogICAgZmluZF9sYXN0X29mKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5 cGUgX19wb3MsIHNpemVfdHlwZSBfX24pIGNvbnN0CiAgICB7CiAgICAgIHNpemVfdHlwZSBfX3Np emUgPSB0aGlzLT5zaXplKCk7CiAgICAgIGlmIChfX3NpemUgJiYgX19uKQogICAgICAgIHsKICAg ICAgICAgIGlmICgtLV9fc2l6ZSA+IF9fcG9zKQogICAgICAgICAgICBfX3NpemUgPSBfX3BvczsK ICAgICAgICAgIGRvCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpZiAodHJhaXRzX3R5cGU6 OmZpbmQoX19zLCBfX24sIF9NX2RhdGEoKVtfX3NpemVdKSkKICAgICAgICAgICAgICAgIHJldHVy biBfX3NpemU7CiAgICAgICAgICAgIH0KICAgICAgICAgIHdoaWxlIChfX3NpemUtLSAhPSAwKTsK ICAgICAgICB9CiAgICAgIHJldHVybiBucG9zOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVuYW1lIGJh c2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQogICAgYmFzaWNf c3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBmaW5kX2ZpcnN0X25vdF9vZihj b25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKSBjb25zdAog ICAgewogICAgICBzaXplX3QgX194cG9zID0gX19wb3M7CiAgICAgIGZvciAoOyBfX3hwb3MgPCB0 aGlzLT5zaXplKCk7ICsrX194cG9zKQogICAgICAgIGlmICghdHJhaXRzX3R5cGU6OmZpbmQoX19z LCBfX24sIF9NX2RhdGEoKVtfX3hwb3NdKSkKICAgICAgICAgIHJldHVybiBfX3hwb3M7CiAgICAg IHJldHVybiBucG9zOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l IF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVuYW1lIGJhc2ljX3N0cmluZzxfQ2hh clQsIF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwg X1RyYWl0cywgX0FsbG9jPjo6CiAgICBmaW5kX2ZpcnN0X25vdF9vZihfQ2hhclQgX19jLCBzaXpl X3R5cGUgX19wb3MpIGNvbnN0CiAgICB7CiAgICAgIHNpemVfdCBfX3hwb3MgPSBfX3BvczsKICAg ICAgZm9yICg7IF9feHBvcyA8IHRoaXMtPnNpemUoKTsgKytfX3hwb3MpCiAgICAgICAgaWYgKCF0 cmFpdHNfdHlwZTo6ZXEoX01fZGF0YSgpW19feHBvc10sIF9fYykpCiAgICAgICAgICByZXR1cm4g X194cG9zOwogICAgICByZXR1cm4gbnBvczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No YXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0eXBlbmFtZSBiYXNp Y19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpzaXplX3R5cGUKICAgIGJhc2ljX3N0 cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgZmluZF9sYXN0X25vdF9vZihjb25z dCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKSBjb25zdAogICAg ewogICAgICBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOwogICAgICBpZiAoX19zaXpl KQogICAgICAgIHsKICAgICAgICAgIGlmICgtLV9fc2l6ZSA+IF9fcG9zKQogICAgICAgICAgICBf X3NpemUgPSBfX3BvczsKICAgICAgICAgIGRvCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBp ZiAoIXRyYWl0c190eXBlOjpmaW5kKF9fcywgX19uLCBfTV9kYXRhKClbX19zaXplXSkpCiAgICAg ICAgICAgICAgICByZXR1cm4gX19zaXplOwogICAgICAgICAgICB9CiAgICAgICAgICB3aGlsZSAo X19zaXplLS0pOwogICAgICAgIH0KICAgICAgcmV0dXJuIG5wb3M7CiAgICB9CgogIHRlbXBsYXRl PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAg dHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90eXBl CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGZpbmRfbGFz dF9ub3Rfb2YoX0NoYXJUIF9fYywgc2l6ZV90eXBlIF9fcG9zKSBjb25zdAogICAgewogICAgICBz aXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOwogICAgICBpZiAoX19zaXplKQogICAgICAg IHsKICAgICAgICAgIGlmICgtLV9fc2l6ZSA+IF9fcG9zKQogICAgICAgICAgICBfX3NpemUgPSBf X3BvczsKICAgICAgICAgIGRvCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpZiAoIXRyYWl0 c190eXBlOjplcShfTV9kYXRhKClbX19zaXplXSwgX19jKSkKICAgICAgICAgICAgICAgIHJldHVy biBfX3NpemU7CiAgICAgICAgICAgIH0KICAgICAgICAgIHdoaWxlIChfX3NpemUtLSk7CiAgICAg ICAgfQogICAgICByZXR1cm4gbnBvczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU LCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbnQKICAgIGJhc2ljX3N0 cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgY29tcGFyZShzaXplX3R5cGUgX19w b3MsIHNpemVfdHlwZSBfX24sIGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIpIGNvbnN0CiAgICB7 CiAgICAgIHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CiAgICAgIHNpemVfdHlwZSBf X29zaXplID0gX19zdHIuc2l6ZSgpOwogICAgICBpZiAoX19wb3MgPiBfX3NpemUpCiAgICAgICAg X190aHJvd19vdXRfb2ZfcmFuZ2UoImJhc2ljX3N0cmluZzo6Y29tcGFyZSIpOwoKICAgICAgc2l6 ZV90eXBlIF9fcnNpemU9IG1pbihfX3NpemUgLSBfX3BvcywgX19uKTsKICAgICAgc2l6ZV90eXBl IF9fbGVuID0gbWluKF9fcnNpemUsIF9fb3NpemUpOwogICAgICBpbnQgX19yID0gdHJhaXRzX3R5 cGU6OmNvbXBhcmUoX01fZGF0YSgpICsgX19wb3MsIF9fc3RyLmRhdGEoKSwgX19sZW4pOwogICAg ICBpZiAoIV9fcikKICAgICAgICBfX3IgPSBfX3JzaXplIC0gX19vc2l6ZTsKICAgICAgcmV0dXJu IF9fcjsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz LCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbnQKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFp dHMsIF9BbGxvYz46OgogICAgY29tcGFyZShzaXplX3R5cGUgX19wb3MxLCBzaXplX3R5cGUgX19u MSwgY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwKICAgICAgICAgICAgc2l6ZV90eXBlIF9fcG9z Miwgc2l6ZV90eXBlIF9fbjIpIGNvbnN0CiAgICB7CiAgICAgIHNpemVfdHlwZSBfX3NpemUgPSB0 aGlzLT5zaXplKCk7CiAgICAgIHNpemVfdHlwZSBfX29zaXplID0gX19zdHIuc2l6ZSgpOwogICAg ICBpZiAoX19wb3MxID4gX19zaXplIHx8IF9fcG9zMiA+IF9fb3NpemUpCiAgICAgICAgX190aHJv d19vdXRfb2ZfcmFuZ2UoImJhc2ljX3N0cmluZzo6Y29tcGFyZSIpOwoKICAgICAgc2l6ZV90eXBl IF9fcnNpemUgPSBtaW4oX19zaXplIC0gX19wb3MxLCBfX24xKTsKICAgICAgc2l6ZV90eXBlIF9f cm9zaXplID0gbWluKF9fb3NpemUgLSBfX3BvczIsIF9fbjIpOwogICAgICBzaXplX3R5cGUgX19s ZW4gPSBtaW4oX19yc2l6ZSwgX19yb3NpemUpOwogICAgICBpbnQgX19yID0gdHJhaXRzX3R5cGU6 OmNvbXBhcmUoX01fZGF0YSgpICsgX19wb3MxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgX19zdHIuZGF0YSgpICsgX19wb3MyLCBfX2xlbik7CiAgICAgIGlmICghX19yKQog ICAgICAgIF9fciA9IF9fcnNpemUgLSBfX3Jvc2l6ZTsKICAgICAgcmV0dXJuIF9fcjsKICAgIH0K CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUg X0FsbG9jPgogICAgaW50CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+ OjoKICAgIGNvbXBhcmUoY29uc3QgX0NoYXJUKiBfX3MpIGNvbnN0CiAgICB7CiAgICAgIHNpemVf dHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CiAgICAgIHNpemVfdHlwZSBfX29zaXplID0gdHJh aXRzX3R5cGU6Omxlbmd0aChfX3MpOwogICAgICBzaXplX3R5cGUgX19sZW4gPSBtaW4oX19zaXpl LCBfX29zaXplKTsKICAgICAgaW50IF9fciA9IHRyYWl0c190eXBlOjpjb21wYXJlKF9NX2RhdGEo KSwgX19zLCBfX2xlbik7CiAgICAgIGlmICghX19yKQogICAgICAgIF9fciA9IF9fc2l6ZSAtIF9f b3NpemU7CiAgICAgIHJldHVybiBfX3I7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh clQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGludAogICAgYmFzaWNf c3RyaW5nIDxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgY29tcGFyZShzaXplX3R5cGUg X19wb3MsIHNpemVfdHlwZSBfX24xLCBjb25zdCBfQ2hhclQqIF9fcykgY29uc3QKICAgIHsKICAg ICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsKICAgICAgaWYgKF9fcG9zID4gX19z aXplKQogICAgICAgIF9fdGhyb3dfb3V0X29mX3JhbmdlKCJiYXNpY19zdHJpbmc6OmNvbXBhcmUi KTsKCiAgICAgIHNpemVfdHlwZSBfX29zaXplID0gdHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpOwog ICAgICBzaXplX3R5cGUgX19yc2l6ZSA9IG1pbihfX3NpemUgLSBfX3BvcywgX19uMSk7CiAgICAg IHNpemVfdHlwZSBfX2xlbiA9IG1pbihfX3JzaXplLCBfX29zaXplKTsKICAgICAgaW50IF9fciA9 IHRyYWl0c190eXBlOjpjb21wYXJlKF9NX2RhdGEoKSArIF9fcG9zLCBfX3MsIF9fbGVuKTsKICAg ICAgaWYgKCFfX3IpCiAgICAgICAgX19yID0gX19yc2l6ZSAtIF9fb3NpemU7CiAgICAgIHJldHVy biBfX3I7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0 cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW50CiAgICBiYXNpY19zdHJpbmcgPF9DaGFyVCwgX1Ry YWl0cywgX0FsbG9jPjo6CiAgICBjb21wYXJlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9f bjEsIGNvbnN0IF9DaGFyVCogX19zLAogICAgICAgICAgICBzaXplX3R5cGUgX19uMikgY29uc3QK ICAgIHsKICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsKICAgICAgaWYgKF9f cG9zID4gX19zaXplKQogICAgICAgIF9fdGhyb3dfb3V0X29mX3JhbmdlKCJiYXNpY19zdHJpbmc6 OmNvbXBhcmUiKTsKCiAgICAgIHNpemVfdHlwZSBfX29zaXplID0gbWluKHRyYWl0c190eXBlOjps ZW5ndGgoX19zKSwgX19uMik7CiAgICAgIHNpemVfdHlwZSBfX3JzaXplID0gbWluKF9fc2l6ZSAt IF9fcG9zLCBfX24xKTsKICAgICAgc2l6ZV90eXBlIF9fbGVuID0gbWluKF9fcnNpemUsIF9fb3Np emUpOwogICAgICBpbnQgX19yID0gdHJhaXRzX3R5cGU6OmNvbXBhcmUoX01fZGF0YSgpICsgX19w b3MsIF9fcywgX19sZW4pOwogICAgICBpZiAoIV9fcikKICAgICAgICBfX3IgPSBfX3JzaXplIC0g X19vc2l6ZTsKICAgICAgcmV0dXJuIF9fcjsKICAgIH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9DaGFy VCwgY2xhc3MgX1RyYWl0cywgY2xhc3MgX0FsbG9jPgogICAgdm9pZAogICAgX1Nfc3RyaW5nX2Nv cHkoY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19zdHIsCiAg ICAgICAgICAgICAgICAgICBfQ2hhclQqIF9fYnVmLCB0eXBlbmFtZSBfQWxsb2M6OnNpemVfdHlw ZSBfX2J1ZnNpeikKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2M6OnNpemVfdHlw ZSBzaXplX3R5cGU7CiAgICAgIHNpemVfdHlwZSBfX3N0cnNpemUgPSBfX3N0ci5zaXplKCk7CiAg ICAgIHNpemVfdHlwZSBfX2J5dGVzID0gbWluKF9fc3Ryc2l6ZSwgX19idWZzaXogLSAxKTsKICAg ICAgX1RyYWl0czo6Y29weShfX2J1ZiwgX19zdHIuZGF0YSgpLCBfX2J5dGVzKTsKICAgICAgX19i dWZbX19ieXRlc10gPSBfQ2hhclQoKTsKICAgIH0KCgoKCiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNz IGJhc2ljX3N0cmluZzxjaGFyPjsKICBleHRlcm4gdGVtcGxhdGUKICAgIGJhc2ljX2lzdHJlYW08 Y2hhcj4mCiAgICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08Y2hhcj4mLCBzdHJpbmcmKTsKICBl eHRlcm4gdGVtcGxhdGUKICAgIGJhc2ljX29zdHJlYW08Y2hhcj4mCiAgICBvcGVyYXRvcjw8KGJh c2ljX29zdHJlYW08Y2hhcj4mLCBjb25zdCBzdHJpbmcmKTsKICBleHRlcm4gdGVtcGxhdGUKICAg IGJhc2ljX2lzdHJlYW08Y2hhcj4mCiAgICBnZXRsaW5lKGJhc2ljX2lzdHJlYW08Y2hhcj4mLCBz dHJpbmcmLCBjaGFyKTsKICBleHRlcm4gdGVtcGxhdGUKICAgIGJhc2ljX2lzdHJlYW08Y2hhcj4m CiAgICBnZXRsaW5lKGJhc2ljX2lzdHJlYW08Y2hhcj4mLCBzdHJpbmcmKTsKCgogIGV4dGVybiB0 ZW1wbGF0ZSBjbGFzcyBiYXNpY19zdHJpbmc8d2NoYXJfdD47CiAgZXh0ZXJuIHRlbXBsYXRlCiAg ICBiYXNpY19pc3RyZWFtPHdjaGFyX3Q+JgogICAgb3BlcmF0b3I+PihiYXNpY19pc3RyZWFtPHdj aGFyX3Q+Jiwgd3N0cmluZyYpOwogIGV4dGVybiB0ZW1wbGF0ZQogICAgYmFzaWNfb3N0cmVhbTx3 Y2hhcl90PiYKICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTx3Y2hhcl90PiYsIGNvbnN0IHdz dHJpbmcmKTsKICBleHRlcm4gdGVtcGxhdGUKICAgIGJhc2ljX2lzdHJlYW08d2NoYXJfdD4mCiAg ICBnZXRsaW5lKGJhc2ljX2lzdHJlYW08d2NoYXJfdD4mLCB3c3RyaW5nJiwgd2NoYXJfdCk7CiAg ZXh0ZXJuIHRlbXBsYXRlCiAgICBiYXNpY19pc3RyZWFtPHdjaGFyX3Q+JgogICAgZ2V0bGluZShi YXNpY19pc3RyZWFtPHdjaGFyX3Q+Jiwgd3N0cmluZyYpOwoKfQojIDU4ICIvdXNyL2luY2x1ZGUv YysrLzMuMi9zdHJpbmciIDIgMwojIDUwICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL2xvY2Fs ZWZ3ZC5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL2Z1bmN0ZXhjZXB0Lmgi IDEgMwojIDM0ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDMKIyAx ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9leGNlcHRpb25fZGVmaW5lcy5oIiAxIDMKIyAzNSAiL3Vz ci9pbmNsdWRlL2MrKy8zLjIvYml0cy9mdW5jdGV4Y2VwdC5oIiAyIDMKCm5hbWVzcGFjZSBzdGQK ewoKICB2b2lkCiAgX190aHJvd19iYWRfZXhjZXB0aW9uKHZvaWQpOwoKCiAgdm9pZAogIF9fdGhy b3dfYmFkX2FsbG9jKHZvaWQpOwoKCiAgdm9pZAogIF9fdGhyb3dfYmFkX2Nhc3Qodm9pZCk7Cgog IHZvaWQKICBfX3Rocm93X2JhZF90eXBlaWQodm9pZCk7CgoKICB2b2lkCiAgX190aHJvd19sb2dp Y19lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19kb21haW5fZXJyb3Io Y29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfaW52YWxpZF9hcmd1bWVudChjb25z dCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19sZW5ndGhfZXJyb3IoY29uc3QgY2hhciog X19zKTsKCiAgdm9pZAogIF9fdGhyb3dfb3V0X29mX3JhbmdlKGNvbnN0IGNoYXIqIF9fcyk7Cgog IHZvaWQKICBfX3Rocm93X3J1bnRpbWVfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAog IF9fdGhyb3dfcmFuZ2VfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3df b3ZlcmZsb3dfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfdW5kZXJm bG93X2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgoKICB2b2lkCiAgX190aHJvd19pb3NfZmFpbHVy ZShjb25zdCBjaGFyKiBfX3MpOwp9CiMgNTEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvbG9j YWxlZndkLmgiIDIgMwoKCm5hbWVzcGFjZSBzdGQKewoKICBjbGFzcyBsb2NhbGU7CgoKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXNzcGFjZShfQ2hhclQs IGNvbnN0IGxvY2FsZSYpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUg Ym9vbAogICAgaXNwcmludChfQ2hhclQsIGNvbnN0IGxvY2FsZSYpOwoKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXNjbnRybChfQ2hhclQsIGNvbnN0IGxv Y2FsZSYpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAg aXN1cHBlcihfQ2hhclQsIGNvbnN0IGxvY2FsZSYpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh clQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXNsb3dlcihfQ2hhclQsIGNvbnN0IGxvY2FsZSYpOwoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXNhbHBoYShf Q2hhclQsIGNvbnN0IGxvY2FsZSYpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBp bmxpbmUgYm9vbAogICAgaXNkaWdpdChfQ2hhclQsIGNvbnN0IGxvY2FsZSYpOwoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXNwdW5jdChfQ2hhclQsIGNv bnN0IGxvY2FsZSYpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9v bAogICAgaXN4ZGlnaXQoX0NoYXJULCBjb25zdCBsb2NhbGUmKTsKCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlzYWxudW0oX0NoYXJULCBjb25zdCBsb2Nh bGUmKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlz Z3JhcGgoX0NoYXJULCBjb25zdCBsb2NhbGUmKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU PgogICAgaW5saW5lIF9DaGFyVAogICAgdG91cHBlcihfQ2hhclQsIGNvbnN0IGxvY2FsZSYpOwoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgX0NoYXJUCiAgICB0b2xvd2Vy KF9DaGFyVCwgY29uc3QgbG9jYWxlJik7CgoKCiAgY2xhc3MgY3R5cGVfYmFzZTsKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBjbGFzcyBjdHlwZTsKICB0ZW1wbGF0ZTw+IGNsYXNzIGN0 eXBlPGNoYXI+OwoKICB0ZW1wbGF0ZTw+IGNsYXNzIGN0eXBlPHdjaGFyX3Q+OwoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBjbGFzcyBjdHlwZV9ieW5hbWU7CgoKICBjbGFzcyBjb2Rl Y3Z0X2Jhc2U7CiAgY2xhc3MgX19lbmNfdHJhaXRzOwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRl cm5ULCB0eXBlbmFtZSBfRXh0ZXJuVCwgdHlwZW5hbWUgX1N0YXRlVD4KICAgIGNsYXNzIGNvZGVj dnQ7CiAgdGVtcGxhdGU8PiBjbGFzcyBjb2RlY3Z0PGNoYXIsIGNoYXIsIG1ic3RhdGVfdD47Cgog IHRlbXBsYXRlPD4gY2xhc3MgY29kZWN2dDx3Y2hhcl90LCBjaGFyLCBtYnN0YXRlX3Q+OwoKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZXJuVCwgdHlwZW5hbWUgX0V4dGVyblQsIHR5cGVuYW1lIF9T dGF0ZVQ+CiAgICBjbGFzcyBjb2RlY3Z0X2J5bmFtZTsKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D aGFyVCwgdHlwZW5hbWUgX0luSXRlciA9IGlzdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJUPiA+CiAg ICBjbGFzcyBudW1fZ2V0OwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091 dEl0ZXIgPSBvc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVD4gPgogICAgY2xhc3MgbnVtX3B1dDsK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+IGNsYXNzIG51bXB1bmN0OwogIHRlbXBsYXRlPHR5 cGVuYW1lIF9DaGFyVD4gY2xhc3MgbnVtcHVuY3RfYnluYW1lOwoKCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0NoYXJUPgogICAgY2xhc3MgY29sbGF0ZTsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+ IGNsYXNzCiAgICBjb2xsYXRlX2J5bmFtZTsKCgogIGNsYXNzIHRpbWVfYmFzZTsKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXIgPSBpc3RyZWFtYnVmX2l0ZXJhdG9y PF9DaGFyVD4gPgogICAgY2xhc3MgdGltZV9nZXQ7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU LCB0eXBlbmFtZSBfSW5JdGVyID0gaXN0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQ+ID4KICAgIGNs YXNzIHRpbWVfZ2V0X2J5bmFtZTsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l IF9PdXRJdGVyID0gb3N0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQ+ID4KICAgIGNsYXNzIHRpbWVf cHV0OwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXIgPSBvc3Ry ZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVD4gPgogICAgY2xhc3MgdGltZV9wdXRfYnluYW1lOwoKCiAg Y2xhc3MgbW9uZXlfYmFzZTsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9J bkl0ZXIgPSBpc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVD4gPgogICAgY2xhc3MgbW9uZXlfZ2V0 OwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXIgPSBvc3RyZWFt YnVmX2l0ZXJhdG9yPF9DaGFyVD4gPgogICAgY2xhc3MgbW9uZXlfcHV0OwogIHRlbXBsYXRlPHR5 cGVuYW1lIF9DaGFyVCwgYm9vbCBfSW50bCA9IGZhbHNlPgogICAgY2xhc3MgbW9uZXlwdW5jdDsK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIGJvb2wgX0ludGwgPSBmYWxzZT4KICAgIGNsYXNz IG1vbmV5cHVuY3RfYnluYW1lOwoKCiAgY2xhc3MgbWVzc2FnZXNfYmFzZTsKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfQ2hhclQ+CiAgICBjbGFzcyBtZXNzYWdlczsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf Q2hhclQ+CiAgICBjbGFzcyBtZXNzYWdlc19ieW5hbWU7CgoKICBjbGFzcyBsb2NhbGUKICB7CiAg cHVibGljOgoKICAgIHR5cGVkZWYgdW5zaWduZWQgaW50IGNhdGVnb3J5OwoKCiAgICBjbGFzcyBm YWNldDsKICAgIGNsYXNzIGlkOwogICAgY2xhc3MgX0ltcGw7CgogICAgZnJpZW5kIGNsYXNzIGZh Y2V0OwogICAgZnJpZW5kIGNsYXNzIF9JbXBsOwoKICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9GYWNl dD4KICAgICAgZnJpZW5kIGNvbnN0IF9GYWNldCYKICAgICAgdXNlX2ZhY2V0KGNvbnN0IGxvY2Fs ZSYpOwoKICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9GYWNldD4KICAgICAgZnJpZW5kIGJvb2wKICAg ICAgaGFzX2ZhY2V0KGNvbnN0IGxvY2FsZSYpIHRocm93KCk7CgoKCiAgICBzdGF0aWMgY29uc3Qg Y2F0ZWdvcnkgbm9uZSA9IDA7CiAgICBzdGF0aWMgY29uc3QgY2F0ZWdvcnkgY3R5cGUgPSAxTCA8 PCAwOwogICAgc3RhdGljIGNvbnN0IGNhdGVnb3J5IG51bWVyaWMgPSAxTCA8PCAxOwogICAgc3Rh dGljIGNvbnN0IGNhdGVnb3J5IGNvbGxhdGUgPSAxTCA8PCAyOwogICAgc3RhdGljIGNvbnN0IGNh dGVnb3J5IHRpbWUgPSAxTCA8PCAzOwogICAgc3RhdGljIGNvbnN0IGNhdGVnb3J5IG1vbmV0YXJ5 ID0gMUwgPDwgNDsKICAgIHN0YXRpYyBjb25zdCBjYXRlZ29yeSBtZXNzYWdlcyA9IDFMIDw8IDU7 CiAgICBzdGF0aWMgY29uc3QgY2F0ZWdvcnkgYWxsID0gKGN0eXBlIHwgbnVtZXJpYyB8IGNvbGxh dGUgfAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZSB8IG1v bmV0YXJ5IHwgbWVzc2FnZXMpOwoKCiAgICBsb2NhbGUoKSB0aHJvdygpOwoKICAgIGxvY2FsZShj b25zdCBsb2NhbGUmIF9fb3RoZXIpIHRocm93KCk7CgogICAgZXhwbGljaXQKICAgIGxvY2FsZShj b25zdCBjaGFyKiBfX3MpOwoKICAgIGxvY2FsZShjb25zdCBsb2NhbGUmIF9fYmFzZSwgY29uc3Qg Y2hhciogX19zLCBjYXRlZ29yeSBfX2NhdCk7CgogICAgbG9jYWxlKGNvbnN0IGxvY2FsZSYgX19i YXNlLCBjb25zdCBsb2NhbGUmIF9fYWRkLCBjYXRlZ29yeSBfX2NhdCk7CgogICAgdGVtcGxhdGU8 dHlwZW5hbWUgX0ZhY2V0PgogICAgICBsb2NhbGUoY29uc3QgbG9jYWxlJiBfX290aGVyLCBfRmFj ZXQqIF9fZik7CgogICAgfmxvY2FsZSgpIHRocm93KCk7CgogICAgY29uc3QgbG9jYWxlJgogICAg b3BlcmF0b3I9KGNvbnN0IGxvY2FsZSYgX19vdGhlcikgdGhyb3coKTsKCiAgICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfRmFjZXQ+CiAgICAgIGxvY2FsZQogICAgICBjb21iaW5lKGNvbnN0IGxvY2FsZSYg X19vdGhlcikgY29uc3Q7CgoKICAgIHN0cmluZwogICAgbmFtZSgpIGNvbnN0OwoKICAgIGJvb2wK ICAgIG9wZXJhdG9yPT0oY29uc3QgbG9jYWxlJiBfX290aGVyKSBjb25zdCB0aHJvdyAoKTsKCiAg ICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3IhPShjb25zdCBsb2NhbGUmIF9fb3RoZXIpIGNvbnN0 IHRocm93ICgpCiAgICB7IHJldHVybiAhKHRoaXMtPm9wZXJhdG9yPT0oX19vdGhlcikpOyB9Cgog ICAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXIsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9B bGxvYz4KICAgICAgYm9vbAogICAgICBvcGVyYXRvcigpKGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hh ciwgX1RyYWl0cywgX0FsbG9jPiYgX19zMSwKICAgICAgICAgICAgICAgICBjb25zdCBiYXNpY19z dHJpbmc8X0NoYXIsIF9UcmFpdHMsIF9BbGxvYz4mIF9fczIpIGNvbnN0OwoKCiAgICBzdGF0aWMg bG9jYWxlCiAgICBnbG9iYWwoY29uc3QgbG9jYWxlJik7CgogICAgc3RhdGljIGNvbnN0IGxvY2Fs ZSYKICAgIGNsYXNzaWMoKTsKCiAgcHJpdmF0ZToKCiAgICBfSW1wbCogX01faW1wbDsKCgogICAg c3RhdGljIF9JbXBsKiBfU19jbGFzc2ljOwoKCiAgICBzdGF0aWMgX0ltcGwqIF9TX2dsb2JhbDsK CgoKCgoKICAgIHN0YXRpYyBjb25zdCBzaXplX3QgX1NfY2F0ZWdvcmllc19zaXplID0gNjsKCgoK CgoKICAgIHN0YXRpYyBjb25zdCBzaXplX3QgX1NfZXh0cmFfY2F0ZWdvcmllc19zaXplID0gNjsK CgoKCgogICAgc3RhdGljIGNvbnN0IGNoYXIqIF9TX2NhdGVnb3JpZXNbX1NfY2F0ZWdvcmllc19z aXplCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBfU19leHRyYV9jYXRl Z29yaWVzX3NpemVdOwoKICAgIGV4cGxpY2l0CiAgICBsb2NhbGUoX0ltcGwqKSB0aHJvdygpOwoK ICAgIHN0YXRpYyBpbmxpbmUgdm9pZAogICAgX1NfaW5pdGlhbGl6ZSgpCiAgICB7CiAgICAgIGlm ICghX1NfY2xhc3NpYykKICAgICAgICBjbGFzc2ljKCk7CiAgICB9CgogICAgc3RhdGljIGNhdGVn b3J5CiAgICBfU19ub3JtYWxpemVfY2F0ZWdvcnkoY2F0ZWdvcnkpOwoKICAgIHZvaWQKICAgIF9N X2NvYWxlc2NlKGNvbnN0IGxvY2FsZSYgX19iYXNlLCBjb25zdCBsb2NhbGUmIF9fYWRkLCBjYXRl Z29yeSBfX2NhdCk7CiAgfTsKCgoKICBjbGFzcyBsb2NhbGU6Ol9JbXBsCiAgewogIHB1YmxpYzoK CiAgICBmcmllbmQgY2xhc3MgbG9jYWxlOwogICAgZnJpZW5kIGNsYXNzIGxvY2FsZTo6ZmFjZXQ7 CgogICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZhY2V0PgogICAgICBmcmllbmQgY29uc3QgX0ZhY2V0 JgogICAgICB1c2VfZmFjZXQoY29uc3QgbG9jYWxlJik7CgogICAgdGVtcGxhdGU8dHlwZW5hbWUg X0ZhY2V0PgogICAgICBmcmllbmQgYm9vbAogICAgICBoYXNfZmFjZXQoY29uc3QgbG9jYWxlJikg dGhyb3coKTsKCiAgcHJpdmF0ZToKCiAgICBfQXRvbWljX3dvcmQgX01fcmVmZXJlbmNlczsKICAg IGZhY2V0KiogX01fZmFjZXRzOwogICAgc2l6ZV90IF9NX2ZhY2V0c19zaXplOwoKICAgIGNoYXIq IF9NX25hbWVzW19TX2NhdGVnb3JpZXNfc2l6ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKyBfU19leHRyYV9jYXRlZ29yaWVzX3NpemVdOwogICAgc3Rh dGljIGNvbnN0IGxvY2FsZTo6aWQqIGNvbnN0IF9TX2lkX2N0eXBlW107CiAgICBzdGF0aWMgY29u c3QgbG9jYWxlOjppZCogY29uc3QgX1NfaWRfbnVtZXJpY1tdOwogICAgc3RhdGljIGNvbnN0IGxv Y2FsZTo6aWQqIGNvbnN0IF9TX2lkX2NvbGxhdGVbXTsKICAgIHN0YXRpYyBjb25zdCBsb2NhbGU6 OmlkKiBjb25zdCBfU19pZF90aW1lW107CiAgICBzdGF0aWMgY29uc3QgbG9jYWxlOjppZCogY29u c3QgX1NfaWRfbW9uZXRhcnlbXTsKICAgIHN0YXRpYyBjb25zdCBsb2NhbGU6OmlkKiBjb25zdCBf U19pZF9tZXNzYWdlc1tdOwogICAgc3RhdGljIGNvbnN0IGxvY2FsZTo6aWQqIGNvbnN0KiBjb25z dCBfU19mYWNldF9jYXRlZ29yaWVzW107CgogICAgaW5saW5lIHZvaWQKICAgIF9NX2FkZF9yZWZl cmVuY2UoKSB0aHJvdygpCiAgICB7IF9fYXRvbWljX2FkZCgmX01fcmVmZXJlbmNlcywgMSk7IH0K CiAgICBpbmxpbmUgdm9pZAogICAgX01fcmVtb3ZlX3JlZmVyZW5jZSgpIHRocm93KCkKICAgIHsK ICAgICAgaWYgKF9fZXhjaGFuZ2VfYW5kX2FkZCgmX01fcmVmZXJlbmNlcywgLTEpID09IDEpCiAg ICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsgZGVsZXRlIHRoaXM7IH0KICAgICAg ICAgIGNhdGNoKC4uLikKICAgICAgICAgICAgeyB9CiAgICAgICAgfQogICAgfQoKICAgIF9JbXBs KGNvbnN0IF9JbXBsJiwgc2l6ZV90KTsKICAgIF9JbXBsKGNvbnN0IGNoYXIqLCBzaXplX3QpOwog ICAgX0ltcGwoZmFjZXQqKiwgc2l6ZV90LCBib29sKTsKCiAgIH5fSW1wbCgpIHRocm93KCk7Cgog ICAgX0ltcGwoY29uc3QgX0ltcGwmKTsKCiAgICB2b2lkCiAgICBvcGVyYXRvcj0oY29uc3QgX0lt cGwmKTsKCiAgICBpbmxpbmUgYm9vbAogICAgX01fY2hlY2tfc2FtZV9uYW1lKCkKICAgIHsKICAg ICAgYm9vbCBfX3JldCA9IHRydWU7CiAgICAgIGZvciAoc2l6ZV90IF9faSA9IDA7CiAgICAgICAg ICAgX19yZXQgJiYgX19pIDwgX1NfY2F0ZWdvcmllc19zaXplICsgX1NfZXh0cmFfY2F0ZWdvcmll c19zaXplIC0gMTsKICAgICAgICAgICArK19faSkKICAgICAgICBfX3JldCAmPSAoc3RyY21wKF9N X25hbWVzW19faV0sIF9NX25hbWVzW19faSArIDFdKSA9PSAwKTsKICAgICAgcmV0dXJuIF9fcmV0 OwogICAgfQoKICAgIHZvaWQKICAgIF9NX3JlcGxhY2VfY2F0ZWdvcmllcyhjb25zdCBfSW1wbCos IGNhdGVnb3J5KTsKCiAgICB2b2lkCiAgICBfTV9yZXBsYWNlX2NhdGVnb3J5KGNvbnN0IF9JbXBs KiwgY29uc3QgbG9jYWxlOjppZCogY29uc3QqKTsKCiAgICB2b2lkCiAgICBfTV9yZXBsYWNlX2Zh Y2V0KGNvbnN0IF9JbXBsKiwgY29uc3QgbG9jYWxlOjppZCopOwoKICAgIHZvaWQKICAgIF9NX2lu c3RhbGxfZmFjZXQoY29uc3QgbG9jYWxlOjppZCosIGZhY2V0Kik7CgogICAgdGVtcGxhdGU8dHlw ZW5hbWUgX0ZhY2V0PgogICAgICBpbmxpbmUgdm9pZAogICAgICBfTV9pbml0X2ZhY2V0KF9GYWNl dCogX19mYWNldCkKICAgICAgeyBfTV9pbnN0YWxsX2ZhY2V0KCZfRmFjZXQ6OmlkLCBfX2ZhY2V0 KTsgfQogIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9GYWNldD4KICAgIGxvY2FsZTo6bG9jYWxl KGNvbnN0IGxvY2FsZSYgX19vdGhlciwgX0ZhY2V0KiBfX2YpCiAgICB7CiAgICAgIF9NX2ltcGwg PSBuZXcgX0ltcGwoKl9fb3RoZXIuX01faW1wbCwgMSk7CiAgICAgIF9NX2ltcGwtPl9NX2luc3Rh bGxfZmFjZXQoJl9GYWNldDo6aWQsIF9fZik7CiAgICAgIGZvciAoc2l6ZV90IF9faSA9IDA7CiAg ICAgICAgICAgX19pIDwgX1NfY2F0ZWdvcmllc19zaXplICsgX1NfZXh0cmFfY2F0ZWdvcmllc19z aXplOyArK19faSkKICAgICAgICB7CiAgICAgICAgICBkZWxldGUgW10gX01faW1wbC0+X01fbmFt ZXNbX19pXTsKICAgICAgICAgIGNoYXIqIF9fbmV3ID0gbmV3IGNoYXJbMl07CiAgICAgICAgICBz dHJjcHkoX19uZXcsICIqIik7CiAgICAgICAgICBfTV9pbXBsLT5fTV9uYW1lc1tfX2ldID0gX19u ZXc7CiAgICAgICAgfQogICAgfQoKCiAgY2xhc3MgbG9jYWxlOjpmYWNldAogIHsKICBwcml2YXRl OgogICAgZnJpZW5kIGNsYXNzIGxvY2FsZTsKICAgIGZyaWVuZCBjbGFzcyBsb2NhbGU6Ol9JbXBs OwoKICAgIF9BdG9taWNfd29yZCBfTV9yZWZlcmVuY2VzOwoKICBwcm90ZWN0ZWQ6CgoKICAgIHN0 YXRpYyBfX2NfbG9jYWxlIF9TX2NfbG9jYWxlOwoKCiAgICBzdGF0aWMgY2hhciBfU19jX25hbWVb Ml07CgogICAgZXhwbGljaXQKICAgIGZhY2V0KHNpemVfdCBfX3JlZnMgPSAwKSB0aHJvdygpOwoK ICAgIHZpcnR1YWwKICAgIH5mYWNldCgpOwoKICAgIHN0YXRpYyB2b2lkCiAgICBfU19jcmVhdGVf Y19sb2NhbGUoX19jX2xvY2FsZSYgX19jbG9jLCBjb25zdCBjaGFyKiBfX3MsCiAgICAgICAgICAg ICAgICAgICAgICAgX19jX2xvY2FsZSBfX29sZCA9IDApOwoKICAgIHN0YXRpYyBfX2NfbG9jYWxl CiAgICBfU19jbG9uZV9jX2xvY2FsZShfX2NfbG9jYWxlJiBfX2Nsb2MpOwoKICAgIHN0YXRpYyB2 b2lkCiAgICBfU19kZXN0cm95X2NfbG9jYWxlKF9fY19sb2NhbGUmIF9fY2xvYyk7CgogIHByaXZh dGU6CiAgICB2b2lkCiAgICBfTV9hZGRfcmVmZXJlbmNlKCkgdGhyb3coKTsKCiAgICB2b2lkCiAg ICBfTV9yZW1vdmVfcmVmZXJlbmNlKCkgdGhyb3coKTsKCiAgICBmYWNldChjb25zdCBmYWNldCYp OwoKICAgIHZvaWQKICAgIG9wZXJhdG9yPShjb25zdCBmYWNldCYpOwogIH07CgoKCiAgY2xhc3Mg bG9jYWxlOjppZAogIHsKICBwcml2YXRlOgogICAgZnJpZW5kIGNsYXNzIGxvY2FsZTsKICAgIGZy aWVuZCBjbGFzcyBsb2NhbGU6Ol9JbXBsOwogICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZhY2V0Pgog ICAgICBmcmllbmQgY29uc3QgX0ZhY2V0JgogICAgICB1c2VfZmFjZXQoY29uc3QgbG9jYWxlJik7 CiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFjZXQ+CiAgICAgIGZyaWVuZCBib29sCiAgICAgIGhh c19mYWNldChjb25zdCBsb2NhbGUmKSB0aHJvdyAoKTsKCgoKCiAgICBtdXRhYmxlIHNpemVfdCBf TV9pbmRleDsKCgogICAgc3RhdGljIF9BdG9taWNfd29yZCBfU19oaWdod2F0ZXI7CgogICAgdm9p ZAogICAgb3BlcmF0b3I9KGNvbnN0IGlkJik7CgogICAgaWQoY29uc3QgaWQmKTsKCiAgcHVibGlj OgoKCiAgICBpZCgpOwoKICAgIGlubGluZSBzaXplX3QKICAgIF9NX2lkKCkgY29uc3QKICAgIHsK ICAgICAgaWYgKCFfTV9pbmRleCkKICAgICAgICBfTV9pbmRleCA9IDEgKyBfX2V4Y2hhbmdlX2Fu ZF9hZGQoJl9TX2hpZ2h3YXRlciwgMSk7CiAgICAgIHJldHVybiBfTV9pbmRleCAtIDE7CiAgICB9 CiAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZhY2V0PgogICAgY29uc3QgX0ZhY2V0JgogICAg dXNlX2ZhY2V0KGNvbnN0IGxvY2FsZSYgX19sb2MpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFj ZXQ+CiAgICBib29sCiAgICBoYXNfZmFjZXQoY29uc3QgbG9jYWxlJiBfX2xvYykgdGhyb3coKTsK fQojIDQ5ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9pb3MiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9j KysvMy4yL2JpdHMvaW9zX2Jhc2UuaCIgMSAzCiMgNDQgIi91c3IvaW5jbHVkZS9jKysvMy4yL2Jp dHMvaW9zX2Jhc2UuaCIgMwoKCgpuYW1lc3BhY2Ugc3RkCnsKCgoKCiAgZW51bSBfSW9zX0ZtdGZs YWdzIHsgX01faW9zX2ZtdGZsYWdzX2VuZCA9IDFMIDw8IDE2IH07CgogIGlubGluZSBfSW9zX0Zt dGZsYWdzCiAgb3BlcmF0b3ImKF9Jb3NfRm10ZmxhZ3MgX19hLCBfSW9zX0ZtdGZsYWdzIF9fYikK ICB7IHJldHVybiBfSW9zX0ZtdGZsYWdzKHN0YXRpY19jYXN0PGludD4oX19hKSAmIHN0YXRpY19j YXN0PGludD4oX19iKSk7IH0KCiAgaW5saW5lIF9Jb3NfRm10ZmxhZ3MKICBvcGVyYXRvcnwoX0lv c19GbXRmbGFncyBfX2EsIF9Jb3NfRm10ZmxhZ3MgX19iKQogIHsgcmV0dXJuIF9Jb3NfRm10Zmxh Z3Moc3RhdGljX2Nhc3Q8aW50PihfX2EpIHwgc3RhdGljX2Nhc3Q8aW50PihfX2IpKTsgfQoKICBp bmxpbmUgX0lvc19GbXRmbGFncwogIG9wZXJhdG9yXihfSW9zX0ZtdGZsYWdzIF9fYSwgX0lvc19G bXRmbGFncyBfX2IpCiAgeyByZXR1cm4gX0lvc19GbXRmbGFncyhzdGF0aWNfY2FzdDxpbnQ+KF9f YSkgXiBzdGF0aWNfY2FzdDxpbnQ+KF9fYikpOyB9CgogIGlubGluZSBfSW9zX0ZtdGZsYWdzCiAg b3BlcmF0b3J8PShfSW9zX0ZtdGZsYWdzJiBfX2EsIF9Jb3NfRm10ZmxhZ3MgX19iKQogIHsgcmV0 dXJuIF9fYSA9IF9fYSB8IF9fYjsgfQoKICBpbmxpbmUgX0lvc19GbXRmbGFncwogIG9wZXJhdG9y Jj0oX0lvc19GbXRmbGFncyYgX19hLCBfSW9zX0ZtdGZsYWdzIF9fYikKICB7IHJldHVybiBfX2Eg PSBfX2EgJiBfX2I7IH0KCiAgaW5saW5lIF9Jb3NfRm10ZmxhZ3MKICBvcGVyYXRvcl49KF9Jb3Nf Rm10ZmxhZ3MmIF9fYSwgX0lvc19GbXRmbGFncyBfX2IpCiAgeyByZXR1cm4gX19hID0gX19hIF4g X19iOyB9CgogIGlubGluZSBfSW9zX0ZtdGZsYWdzCiAgb3BlcmF0b3J+KF9Jb3NfRm10ZmxhZ3Mg X19hKQogIHsgcmV0dXJuIF9Jb3NfRm10ZmxhZ3MofnN0YXRpY19jYXN0PGludD4oX19hKSk7IH0K CgogIGVudW0gX0lvc19PcGVubW9kZSB7IF9NX2lvc19vcGVubW9kZV9lbmQgPSAxTCA8PCAxNiB9 OwoKICBpbmxpbmUgX0lvc19PcGVubW9kZQogIG9wZXJhdG9yJihfSW9zX09wZW5tb2RlIF9fYSwg X0lvc19PcGVubW9kZSBfX2IpCiAgeyByZXR1cm4gX0lvc19PcGVubW9kZShzdGF0aWNfY2FzdDxp bnQ+KF9fYSkgJiBzdGF0aWNfY2FzdDxpbnQ+KF9fYikpOyB9CgogIGlubGluZSBfSW9zX09wZW5t b2RlCiAgb3BlcmF0b3J8KF9Jb3NfT3Blbm1vZGUgX19hLCBfSW9zX09wZW5tb2RlIF9fYikKICB7 IHJldHVybiBfSW9zX09wZW5tb2RlKHN0YXRpY19jYXN0PGludD4oX19hKSB8IHN0YXRpY19jYXN0 PGludD4oX19iKSk7IH0KCiAgaW5saW5lIF9Jb3NfT3Blbm1vZGUKICBvcGVyYXRvcl4oX0lvc19P cGVubW9kZSBfX2EsIF9Jb3NfT3Blbm1vZGUgX19iKQogIHsgcmV0dXJuIF9Jb3NfT3Blbm1vZGUo c3RhdGljX2Nhc3Q8aW50PihfX2EpIF4gc3RhdGljX2Nhc3Q8aW50PihfX2IpKTsgfQoKICBpbmxp bmUgX0lvc19PcGVubW9kZQogIG9wZXJhdG9yfD0oX0lvc19PcGVubW9kZSYgX19hLCBfSW9zX09w ZW5tb2RlIF9fYikKICB7IHJldHVybiBfX2EgPSBfX2EgfCBfX2I7IH0KCiAgaW5saW5lIF9Jb3Nf T3Blbm1vZGUKICBvcGVyYXRvciY9KF9Jb3NfT3Blbm1vZGUmIF9fYSwgX0lvc19PcGVubW9kZSBf X2IpCiAgeyByZXR1cm4gX19hID0gX19hICYgX19iOyB9CgogIGlubGluZSBfSW9zX09wZW5tb2Rl CiAgb3BlcmF0b3JePShfSW9zX09wZW5tb2RlJiBfX2EsIF9Jb3NfT3Blbm1vZGUgX19iKQogIHsg cmV0dXJuIF9fYSA9IF9fYSBeIF9fYjsgfQoKICBpbmxpbmUgX0lvc19PcGVubW9kZQogIG9wZXJh dG9yfihfSW9zX09wZW5tb2RlIF9fYSkKICB7IHJldHVybiBfSW9zX09wZW5tb2RlKH5zdGF0aWNf Y2FzdDxpbnQ+KF9fYSkpOyB9CgoKICBlbnVtIF9Jb3NfSW9zdGF0ZSB7IF9NX2lvc19pb3N0YXRl X2VuZCA9IDFMIDw8IDE2IH07CgogIGlubGluZSBfSW9zX0lvc3RhdGUKICBvcGVyYXRvciYoX0lv c19Jb3N0YXRlIF9fYSwgX0lvc19Jb3N0YXRlIF9fYikKICB7IHJldHVybiBfSW9zX0lvc3RhdGUo c3RhdGljX2Nhc3Q8aW50PihfX2EpICYgc3RhdGljX2Nhc3Q8aW50PihfX2IpKTsgfQoKICBpbmxp bmUgX0lvc19Jb3N0YXRlCiAgb3BlcmF0b3J8KF9Jb3NfSW9zdGF0ZSBfX2EsIF9Jb3NfSW9zdGF0 ZSBfX2IpCiAgeyByZXR1cm4gX0lvc19Jb3N0YXRlKHN0YXRpY19jYXN0PGludD4oX19hKSB8IHN0 YXRpY19jYXN0PGludD4oX19iKSk7IH0KCiAgaW5saW5lIF9Jb3NfSW9zdGF0ZQogIG9wZXJhdG9y XihfSW9zX0lvc3RhdGUgX19hLCBfSW9zX0lvc3RhdGUgX19iKQogIHsgcmV0dXJuIF9Jb3NfSW9z dGF0ZShzdGF0aWNfY2FzdDxpbnQ+KF9fYSkgXiBzdGF0aWNfY2FzdDxpbnQ+KF9fYikpOyB9Cgog IGlubGluZSBfSW9zX0lvc3RhdGUKICBvcGVyYXRvcnw9KF9Jb3NfSW9zdGF0ZSYgX19hLCBfSW9z X0lvc3RhdGUgX19iKQogIHsgcmV0dXJuIF9fYSA9IF9fYSB8IF9fYjsgfQoKICBpbmxpbmUgX0lv c19Jb3N0YXRlCiAgb3BlcmF0b3ImPShfSW9zX0lvc3RhdGUmIF9fYSwgX0lvc19Jb3N0YXRlIF9f YikKICB7IHJldHVybiBfX2EgPSBfX2EgJiBfX2I7IH0KCiAgaW5saW5lIF9Jb3NfSW9zdGF0ZQog IG9wZXJhdG9yXj0oX0lvc19Jb3N0YXRlJiBfX2EsIF9Jb3NfSW9zdGF0ZSBfX2IpCiAgeyByZXR1 cm4gX19hID0gX19hIF4gX19iOyB9CgogIGlubGluZSBfSW9zX0lvc3RhdGUKICBvcGVyYXRvcn4o X0lvc19Jb3N0YXRlIF9fYSkKICB7IHJldHVybiBfSW9zX0lvc3RhdGUofnN0YXRpY19jYXN0PGlu dD4oX19hKSk7IH0KCiAgZW51bSBfSW9zX1NlZWtkaXIgeyBfTV9pb3Nfc2Vla2Rpcl9lbmQgPSAx TCA8PCAxNiB9OwoKCiAgY2xhc3MgaW9zX2Jhc2UKICB7CiAgcHVibGljOgoKCiAgICBjbGFzcyBm YWlsdXJlIDogcHVibGljIGV4Y2VwdGlvbgogICAgewogICAgcHVibGljOgoKCiAgICAgIGV4cGxp Y2l0CiAgICAgIGZhaWx1cmUoY29uc3Qgc3RyaW5nJiBfX3N0cikgdGhyb3coKTsKCgoKICAgICAg dmlydHVhbAogICAgICB+ZmFpbHVyZSgpIHRocm93KCk7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNo YXIqCiAgICAgIHdoYXQoKSBjb25zdCB0aHJvdygpOwoKICAgIHByaXZhdGU6CiAgICAgIGVudW0g eyBfTV9idWZzaXplID0gMjU2IH07CiAgICAgIGNoYXIgX01fbmFtZVtfTV9idWZzaXplXTsKCiAg ICB9OwoKCiAgICB0eXBlZGVmIF9Jb3NfRm10ZmxhZ3MgZm10ZmxhZ3M7CgogICAgc3RhdGljIGNv bnN0IGZtdGZsYWdzIGJvb2xhbHBoYSA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU19ib29sYWxw aGEpOwogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIGRlYyA9IGZtdGZsYWdzKF9faW9zX2ZsYWdz OjpfU19kZWMpOwogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIGZpeGVkID0gZm10ZmxhZ3MoX19p b3NfZmxhZ3M6Ol9TX2ZpeGVkKTsKICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBoZXggPSBmbXRm bGFncyhfX2lvc19mbGFnczo6X1NfaGV4KTsKICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBpbnRl cm5hbCA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU19pbnRlcm5hbCk7CiAgICBzdGF0aWMgY29u c3QgZm10ZmxhZ3MgbGVmdCA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU19sZWZ0KTsKICAgIHN0 YXRpYyBjb25zdCBmbXRmbGFncyBvY3QgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1Nfb2N0KTsK ICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyByaWdodCA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpf U19yaWdodCk7CiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3Mgc2NpZW50aWZpYyA9IGZtdGZsYWdz KF9faW9zX2ZsYWdzOjpfU19zY2llbnRpZmljKTsKICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBz aG93YmFzZSA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU19zaG93YmFzZSk7CiAgICBzdGF0aWMg Y29uc3QgZm10ZmxhZ3Mgc2hvd3BvaW50ID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX3Nob3dw b2ludCk7CiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3Mgc2hvd3BvcyA9IGZtdGZsYWdzKF9faW9z X2ZsYWdzOjpfU19zaG93cG9zKTsKICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBza2lwd3MgPSBm bXRmbGFncyhfX2lvc19mbGFnczo6X1Nfc2tpcHdzKTsKICAgIHN0YXRpYyBjb25zdCBmbXRmbGFn cyB1bml0YnVmID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX3VuaXRidWYpOwogICAgc3RhdGlj IGNvbnN0IGZtdGZsYWdzIHVwcGVyY2FzZSA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU191cHBl cmNhc2UpOwogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIGFkanVzdGZpZWxkID0gZm10ZmxhZ3Mo X19pb3NfZmxhZ3M6Ol9TX2FkanVzdGZpZWxkKTsKICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBi YXNlZmllbGQgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1NfYmFzZWZpZWxkKTsKICAgIHN0YXRp YyBjb25zdCBmbXRmbGFncyBmbG9hdGZpZWxkID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX2Zs b2F0ZmllbGQpOwoKCiAgICB0eXBlZGVmIF9Jb3NfSW9zdGF0ZSBpb3N0YXRlOwogICAgc3RhdGlj IGNvbnN0IGlvc3RhdGUgYmFkYml0ID0gaW9zdGF0ZShfX2lvc19mbGFnczo6X1NfYmFkYml0KTsK ICAgIHN0YXRpYyBjb25zdCBpb3N0YXRlIGVvZmJpdCA9IGlvc3RhdGUoX19pb3NfZmxhZ3M6Ol9T X2VvZmJpdCk7CiAgICBzdGF0aWMgY29uc3QgaW9zdGF0ZSBmYWlsYml0ID0gaW9zdGF0ZShfX2lv c19mbGFnczo6X1NfZmFpbGJpdCk7CiAgICBzdGF0aWMgY29uc3QgaW9zdGF0ZSBnb29kYml0ID0g aW9zdGF0ZSgwKTsKCgogICAgdHlwZWRlZiBfSW9zX09wZW5tb2RlIG9wZW5tb2RlOwogICAgc3Rh dGljIGNvbnN0IG9wZW5tb2RlIGFwcCA9IG9wZW5tb2RlKF9faW9zX2ZsYWdzOjpfU19hcHApOwog ICAgc3RhdGljIGNvbnN0IG9wZW5tb2RlIGF0ZSA9IG9wZW5tb2RlKF9faW9zX2ZsYWdzOjpfU19h dGUpOwogICAgc3RhdGljIGNvbnN0IG9wZW5tb2RlIGJpbmFyeSA9IG9wZW5tb2RlKF9faW9zX2Zs YWdzOjpfU19iaW4pOwogICAgc3RhdGljIGNvbnN0IG9wZW5tb2RlIGluID0gb3Blbm1vZGUoX19p b3NfZmxhZ3M6Ol9TX2luKTsKICAgIHN0YXRpYyBjb25zdCBvcGVubW9kZSBvdXQgPSBvcGVubW9k ZShfX2lvc19mbGFnczo6X1Nfb3V0KTsKICAgIHN0YXRpYyBjb25zdCBvcGVubW9kZSB0cnVuYyA9 IG9wZW5tb2RlKF9faW9zX2ZsYWdzOjpfU190cnVuYyk7CgoKICAgIHR5cGVkZWYgX0lvc19TZWVr ZGlyIHNlZWtkaXI7CiAgICBzdGF0aWMgY29uc3Qgc2Vla2RpciBiZWcgPSBzZWVrZGlyKDApOwog ICAgc3RhdGljIGNvbnN0IHNlZWtkaXIgY3VyID0gc2Vla2RpcigxKTsKICAgIHN0YXRpYyBjb25z dCBzZWVrZGlyIGVuZCA9IHNlZWtkaXIoMik7CiMgMjI5ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9i aXRzL2lvc19iYXNlLmgiIDMKICAgIGVudW0gZXZlbnQKICAgIHsKICAgICAgZXJhc2VfZXZlbnQs CiAgICAgIGltYnVlX2V2ZW50LAogICAgICBjb3B5Zm10X2V2ZW50CiAgICB9OwoKICAgIHR5cGVk ZWYgdm9pZCAoKmV2ZW50X2NhbGxiYWNrKSAoZXZlbnQsIGlvc19iYXNlJiwgaW50KTsKCiAgICB2 b2lkCiAgICByZWdpc3Rlcl9jYWxsYmFjayhldmVudF9jYWxsYmFjayBfX2ZuLCBpbnQgX19pbmRl eCk7CgogIHByb3RlY3RlZDoKCiAgICBzdHJlYW1zaXplIF9NX3ByZWNpc2lvbjsKICAgIHN0cmVh bXNpemUgX01fd2lkdGg7CiAgICBmbXRmbGFncyBfTV9mbGFnczsKICAgIGlvc3RhdGUgX01fZXhj ZXB0aW9uOwogICAgaW9zdGF0ZSBfTV9zdHJlYW1idWZfc3RhdGU7CgoKCiAgICBzdHJ1Y3QgX0Nh bGxiYWNrX2xpc3QKICAgIHsKCiAgICAgIF9DYWxsYmFja19saXN0KiBfTV9uZXh0OwogICAgICBp b3NfYmFzZTo6ZXZlbnRfY2FsbGJhY2sgX01fZm47CiAgICAgIGludCBfTV9pbmRleDsKICAgICAg X0F0b21pY193b3JkIF9NX3JlZmNvdW50OwoKICAgICAgX0NhbGxiYWNrX2xpc3QoaW9zX2Jhc2U6 OmV2ZW50X2NhbGxiYWNrIF9fZm4sIGludCBfX2luZGV4LAogICAgICAgICAgICAgICAgICAgICBf Q2FsbGJhY2tfbGlzdCogX19jYikKICAgICAgOiBfTV9uZXh0KF9fY2IpLCBfTV9mbihfX2ZuKSwg X01faW5kZXgoX19pbmRleCksIF9NX3JlZmNvdW50KDApIHsgfQoKICAgICAgdm9pZAogICAgICBf TV9hZGRfcmVmZXJlbmNlKCkgeyBfX2F0b21pY19hZGQoJl9NX3JlZmNvdW50LCAxKTsgfQoKCiAg ICAgIGludAogICAgICBfTV9yZW1vdmVfcmVmZXJlbmNlKCkgeyByZXR1cm4gX19leGNoYW5nZV9h bmRfYWRkKCZfTV9yZWZjb3VudCwgLTEpOyB9CiAgICB9OwoKICAgICBfQ2FsbGJhY2tfbGlzdCog X01fY2FsbGJhY2tzOwoKICAgIHZvaWQKICAgIF9NX2NhbGxfY2FsbGJhY2tzKGV2ZW50IF9fZXYp IHRocm93KCk7CgogICAgdm9pZAogICAgX01fZGlzcG9zZV9jYWxsYmFja3Modm9pZCk7CgoKICAg IHN0cnVjdCBfV29yZHMKICAgIHsKICAgICAgdm9pZCogX01fcHdvcmQ7CiAgICAgIGxvbmcgX01f aXdvcmQ7CiAgICAgIF9Xb3JkcygpIDogX01fcHdvcmQoMCksIF9NX2l3b3JkKDApIHsgfQogICAg fTsKCgogICAgX1dvcmRzIF9NX3dvcmRfemVybzsKCgogICAgc3RhdGljIGNvbnN0IGludCBfU19s b2NhbF93b3JkX3NpemUgPSA4OwogICAgX1dvcmRzIF9NX2xvY2FsX3dvcmRbX1NfbG9jYWxfd29y ZF9zaXplXTsKCgogICAgaW50IF9NX3dvcmRfc2l6ZTsKICAgIF9Xb3JkcyogX01fd29yZDsKCiAg ICBfV29yZHMmCiAgICBfTV9ncm93X3dvcmRzKGludCBfX2luZGV4KTsKCgogICAgbG9jYWxlIF9N X2lvc19sb2NhbGU7CgogICAgdm9pZAogICAgX01faW5pdCgpOwoKICBwdWJsaWM6CgoKCgoKICAg IGNsYXNzIEluaXQKICAgIHsKICAgICAgZnJpZW5kIGNsYXNzIGlvc19iYXNlOwogICAgcHVibGlj OgogICAgICBJbml0KCk7CiAgICAgIH5Jbml0KCk7CgogICAgICBzdGF0aWMgdm9pZAogICAgICBf U19pb3NfY3JlYXRlKGJvb2wgX19zeW5jKTsKCiAgICAgIHN0YXRpYyB2b2lkCiAgICAgIF9TX2lv c19kZXN0cm95KCk7CgogICAgcHJpdmF0ZToKICAgICAgc3RhdGljIGludCBfU19pb3NfYmFzZV9p bml0OwogICAgICBzdGF0aWMgYm9vbCBfU19zeW5jZWRfd2l0aF9zdGRpbzsKICAgIH07CgoKICAg IGlubGluZSBmbXRmbGFncwogICAgZmxhZ3MoKSBjb25zdCB7IHJldHVybiBfTV9mbGFnczsgfQoK ICAgIGlubGluZSBmbXRmbGFncwogICAgZmxhZ3MoZm10ZmxhZ3MgX19mbXRmbCkKICAgIHsKICAg ICAgZm10ZmxhZ3MgX19vbGQgPSBfTV9mbGFnczsKICAgICAgX01fZmxhZ3MgPSBfX2ZtdGZsOwog ICAgICByZXR1cm4gX19vbGQ7CiAgICB9CgogICAgaW5saW5lIGZtdGZsYWdzCiAgICBzZXRmKGZt dGZsYWdzIF9fZm10ZmwpCiAgICB7CiAgICAgIGZtdGZsYWdzIF9fb2xkID0gX01fZmxhZ3M7CiAg ICAgIF9NX2ZsYWdzIHw9IF9fZm10Zmw7CiAgICAgIHJldHVybiBfX29sZDsKICAgIH0KCiAgICBp bmxpbmUgZm10ZmxhZ3MKICAgIHNldGYoZm10ZmxhZ3MgX19mbXRmbCwgZm10ZmxhZ3MgX19tYXNr KQogICAgewogICAgICBmbXRmbGFncyBfX29sZCA9IF9NX2ZsYWdzOwogICAgICBfTV9mbGFncyAm PSB+X19tYXNrOwogICAgICBfTV9mbGFncyB8PSAoX19mbXRmbCAmIF9fbWFzayk7CiAgICAgIHJl dHVybiBfX29sZDsKICAgIH0KCiAgICBpbmxpbmUgdm9pZAogICAgdW5zZXRmKGZtdGZsYWdzIF9f bWFzaykgeyBfTV9mbGFncyAmPSB+X19tYXNrOyB9CgogICAgaW5saW5lIHN0cmVhbXNpemUKICAg IHByZWNpc2lvbigpIGNvbnN0IHsgcmV0dXJuIF9NX3ByZWNpc2lvbjsgfQoKICAgIGlubGluZSBz dHJlYW1zaXplCiAgICBwcmVjaXNpb24oc3RyZWFtc2l6ZSBfX3ByZWMpCiAgICB7CiAgICAgIHN0 cmVhbXNpemUgX19vbGQgPSBfTV9wcmVjaXNpb247CiAgICAgIF9NX3ByZWNpc2lvbiA9IF9fcHJl YzsKICAgICAgcmV0dXJuIF9fb2xkOwogICAgfQoKICAgIGlubGluZSBzdHJlYW1zaXplCiAgICB3 aWR0aCgpIGNvbnN0IHsgcmV0dXJuIF9NX3dpZHRoOyB9CgogICAgaW5saW5lIHN0cmVhbXNpemUK ICAgIHdpZHRoKHN0cmVhbXNpemUgX193aWRlKQogICAgewogICAgICBzdHJlYW1zaXplIF9fb2xk ID0gX01fd2lkdGg7CiAgICAgIF9NX3dpZHRoID0gX193aWRlOwogICAgICByZXR1cm4gX19vbGQ7 CiAgICB9CgogICAgc3RhdGljIGJvb2wKICAgIHN5bmNfd2l0aF9zdGRpbyhib29sIF9fc3luYyA9 IHRydWUpOwoKCiAgICBsb2NhbGUKICAgIGltYnVlKGNvbnN0IGxvY2FsZSYgX19sb2MpOwoKICAg IGlubGluZSBsb2NhbGUKICAgIGdldGxvYygpIGNvbnN0IHsgcmV0dXJuIF9NX2lvc19sb2NhbGU7 IH0KCgogICAgc3RhdGljIGludAogICAgeGFsbG9jKCkgdGhyb3coKTsKCiAgICBpbmxpbmUgbG9u ZyYKICAgIGl3b3JkKGludCBfX2l4KQogICAgewogICAgICBfV29yZHMmIF9fd29yZCA9IChfX2l4 IDwgX01fd29yZF9zaXplKQogICAgICAgICAgICAgICAgICAgICAgICA/IF9NX3dvcmRbX19peF0g OiBfTV9ncm93X3dvcmRzKF9faXgpOwogICAgICByZXR1cm4gX193b3JkLl9NX2l3b3JkOwogICAg fQoKICAgIGlubGluZSB2b2lkKiYKICAgIHB3b3JkKGludCBfX2l4KQogICAgewogICAgICBfV29y ZHMmIF9fd29yZCA9IChfX2l4IDwgX01fd29yZF9zaXplKQogICAgICAgICAgICAgICAgICAgICAg ICA/IF9NX3dvcmRbX19peF0gOiBfTV9ncm93X3dvcmRzKF9faXgpOwogICAgICByZXR1cm4gX193 b3JkLl9NX3B3b3JkOwogICAgfQoKCiAgICB+aW9zX2Jhc2UoKTsKCiAgcHJvdGVjdGVkOgogICAg aW9zX2Jhc2UoKTsKCgoKICBwcml2YXRlOgogICAgaW9zX2Jhc2UoY29uc3QgaW9zX2Jhc2UmKTsK CiAgICBpb3NfYmFzZSYKICAgIG9wZXJhdG9yPShjb25zdCBpb3NfYmFzZSYpOwoKICB9OwoKCiAg aW5saW5lIGlvc19iYXNlJgogIGJvb2xhbHBoYShpb3NfYmFzZSYgX19iYXNlKQogIHsKICAgIF9f YmFzZS5zZXRmKGlvc19iYXNlOjpib29sYWxwaGEpOwogICAgcmV0dXJuIF9fYmFzZTsKICB9Cgog IGlubGluZSBpb3NfYmFzZSYKICBub2Jvb2xhbHBoYShpb3NfYmFzZSYgX19iYXNlKQogIHsKICAg IF9fYmFzZS51bnNldGYoaW9zX2Jhc2U6OmJvb2xhbHBoYSk7CiAgICByZXR1cm4gX19iYXNlOwog IH0KCiAgaW5saW5lIGlvc19iYXNlJgogIHNob3diYXNlKGlvc19iYXNlJiBfX2Jhc2UpCiAgewog ICAgX19iYXNlLnNldGYoaW9zX2Jhc2U6OnNob3diYXNlKTsKICAgIHJldHVybiBfX2Jhc2U7CiAg fQoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgbm9zaG93YmFzZShpb3NfYmFzZSYgX19iYXNlKQogIHsK ICAgIF9fYmFzZS51bnNldGYoaW9zX2Jhc2U6OnNob3diYXNlKTsKICAgIHJldHVybiBfX2Jhc2U7 CiAgfQoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgc2hvd3BvaW50KGlvc19iYXNlJiBfX2Jhc2UpCiAg ewogICAgX19iYXNlLnNldGYoaW9zX2Jhc2U6OnNob3dwb2ludCk7CiAgICByZXR1cm4gX19iYXNl OwogIH0KCiAgaW5saW5lIGlvc19iYXNlJgogIG5vc2hvd3BvaW50KGlvc19iYXNlJiBfX2Jhc2Up CiAgewogICAgX19iYXNlLnVuc2V0Zihpb3NfYmFzZTo6c2hvd3BvaW50KTsKICAgIHJldHVybiBf X2Jhc2U7CiAgfQoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgc2hvd3Bvcyhpb3NfYmFzZSYgX19iYXNl KQogIHsKICAgIF9fYmFzZS5zZXRmKGlvc19iYXNlOjpzaG93cG9zKTsKICAgIHJldHVybiBfX2Jh c2U7CiAgfQoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgbm9zaG93cG9zKGlvc19iYXNlJiBfX2Jhc2Up CiAgewogICAgX19iYXNlLnVuc2V0Zihpb3NfYmFzZTo6c2hvd3Bvcyk7CiAgICByZXR1cm4gX19i YXNlOwogIH0KCiAgaW5saW5lIGlvc19iYXNlJgogIHNraXB3cyhpb3NfYmFzZSYgX19iYXNlKQog IHsKICAgIF9fYmFzZS5zZXRmKGlvc19iYXNlOjpza2lwd3MpOwogICAgcmV0dXJuIF9fYmFzZTsK ICB9CgogIGlubGluZSBpb3NfYmFzZSYKICBub3NraXB3cyhpb3NfYmFzZSYgX19iYXNlKQogIHsK ICAgIF9fYmFzZS51bnNldGYoaW9zX2Jhc2U6OnNraXB3cyk7CiAgICByZXR1cm4gX19iYXNlOwog IH0KCiAgaW5saW5lIGlvc19iYXNlJgogIHVwcGVyY2FzZShpb3NfYmFzZSYgX19iYXNlKQogIHsK ICAgIF9fYmFzZS5zZXRmKGlvc19iYXNlOjp1cHBlcmNhc2UpOwogICAgcmV0dXJuIF9fYmFzZTsK ICB9CgogIGlubGluZSBpb3NfYmFzZSYKICBub3VwcGVyY2FzZShpb3NfYmFzZSYgX19iYXNlKQog IHsKICAgIF9fYmFzZS51bnNldGYoaW9zX2Jhc2U6OnVwcGVyY2FzZSk7CiAgICByZXR1cm4gX19i YXNlOwogIH0KCiAgaW5saW5lIGlvc19iYXNlJgogIHVuaXRidWYoaW9zX2Jhc2UmIF9fYmFzZSkK ICB7CiAgICAgX19iYXNlLnNldGYoaW9zX2Jhc2U6OnVuaXRidWYpOwogICAgIHJldHVybiBfX2Jh c2U7CiAgfQoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgbm91bml0YnVmKGlvc19iYXNlJiBfX2Jhc2Up CiAgewogICAgIF9fYmFzZS51bnNldGYoaW9zX2Jhc2U6OnVuaXRidWYpOwogICAgIHJldHVybiBf X2Jhc2U7CiAgfQoKCiAgaW5saW5lIGlvc19iYXNlJgogIGludGVybmFsKGlvc19iYXNlJiBfX2Jh c2UpCiAgewogICAgIF9fYmFzZS5zZXRmKGlvc19iYXNlOjppbnRlcm5hbCwgaW9zX2Jhc2U6OmFk anVzdGZpZWxkKTsKICAgICByZXR1cm4gX19iYXNlOwogIH0KCiAgaW5saW5lIGlvc19iYXNlJgog IGxlZnQoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICBfX2Jhc2Uuc2V0Zihpb3NfYmFzZTo6bGVm dCwgaW9zX2Jhc2U6OmFkanVzdGZpZWxkKTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKICBpbmxp bmUgaW9zX2Jhc2UmCiAgcmlnaHQoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICBfX2Jhc2Uuc2V0 Zihpb3NfYmFzZTo6cmlnaHQsIGlvc19iYXNlOjphZGp1c3RmaWVsZCk7CiAgICByZXR1cm4gX19i YXNlOwogIH0KCgogIGlubGluZSBpb3NfYmFzZSYKICBkZWMoaW9zX2Jhc2UmIF9fYmFzZSkKICB7 CiAgICBfX2Jhc2Uuc2V0Zihpb3NfYmFzZTo6ZGVjLCBpb3NfYmFzZTo6YmFzZWZpZWxkKTsKICAg IHJldHVybiBfX2Jhc2U7CiAgfQoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgaGV4KGlvc19iYXNlJiBf X2Jhc2UpCiAgewogICAgX19iYXNlLnNldGYoaW9zX2Jhc2U6OmhleCwgaW9zX2Jhc2U6OmJhc2Vm aWVsZCk7CiAgICByZXR1cm4gX19iYXNlOwogIH0KCiAgaW5saW5lIGlvc19iYXNlJgogIG9jdChp b3NfYmFzZSYgX19iYXNlKQogIHsKICAgIF9fYmFzZS5zZXRmKGlvc19iYXNlOjpvY3QsIGlvc19i YXNlOjpiYXNlZmllbGQpOwogICAgcmV0dXJuIF9fYmFzZTsKICB9CgoKICBpbmxpbmUgaW9zX2Jh c2UmCiAgZml4ZWQoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICBfX2Jhc2Uuc2V0Zihpb3NfYmFz ZTo6Zml4ZWQsIGlvc19iYXNlOjpmbG9hdGZpZWxkKTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoK ICBpbmxpbmUgaW9zX2Jhc2UmCiAgc2NpZW50aWZpYyhpb3NfYmFzZSYgX19iYXNlKQogIHsKICAg IF9fYmFzZS5zZXRmKGlvc19iYXNlOjpzY2llbnRpZmljLCBpb3NfYmFzZTo6ZmxvYXRmaWVsZCk7 CiAgICByZXR1cm4gX19iYXNlOwogIH0KCn0KIyA1MCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvaW9z IiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9zdHJlYW1idWYiIDEgMwojIDQ0ICIvdXNy L2luY2x1ZGUvYysrLzMuMi9zdHJlYW1idWYiIDMKCgoKCgoKCm5hbWVzcGFjZSBzdGQKewogIHRl bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIHN0cmVhbXNpemUK ICAgIF9fY29weV9zdHJlYW1idWZzKGJhc2ljX2lvczxfQ2hhclQsIF9UcmFpdHM+JiBfaW9zLAog ICAgICAgICAgICAgICAgICAgICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4qIF9f c2JpbiwKICAgICAgICAgICAgICAgICAgICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFp dHM+KiBfX3Nib3V0KTsKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry YWl0cz4KICAgIGNsYXNzIGJhc2ljX3N0cmVhbWJ1ZgogICAgewogICAgcHVibGljOgoKICAgICAg dHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIF9UcmFpdHMgdHJhaXRzX3R5 cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX3R5cGU6OmludF90eXBlIGludF90eXBl OwogICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c190eXBlOjpwb3NfdHlwZSBwb3NfdHlwZTsK ICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfdHlwZTo6b2ZmX3R5cGUgb2ZmX3R5cGU7CgoK ICAgICAgdHlwZWRlZiBjdHlwZTxjaGFyX3R5cGU+IF9fY3R5cGVfdHlwZTsKICAgICAgdHlwZWRl ZiBiYXNpY19zdHJlYW1idWY8Y2hhcl90eXBlLCB0cmFpdHNfdHlwZT4gX19zdHJlYW1idWZfdHlw ZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfdHlwZTo6c3RhdGVfdHlwZSBfX3N0YXRl X3R5cGU7CgogICAgICBmcmllbmQgY2xhc3MgYmFzaWNfaW9zPGNoYXJfdHlwZSwgdHJhaXRzX3R5 cGU+OwogICAgICBmcmllbmQgY2xhc3MgYmFzaWNfaXN0cmVhbTxjaGFyX3R5cGUsIHRyYWl0c190 eXBlPjsKICAgICAgZnJpZW5kIGNsYXNzIGJhc2ljX29zdHJlYW08Y2hhcl90eXBlLCB0cmFpdHNf dHlwZT47CiAgICAgIGZyaWVuZCBjbGFzcyBpc3RyZWFtYnVmX2l0ZXJhdG9yPGNoYXJfdHlwZSwg dHJhaXRzX3R5cGU+OwogICAgICBmcmllbmQgY2xhc3Mgb3N0cmVhbWJ1Zl9pdGVyYXRvcjxjaGFy X3R5cGUsIHRyYWl0c190eXBlPjsKCiAgICAgIGZyaWVuZCBzdHJlYW1zaXplCiAgICAgIF9fY29w eV9zdHJlYW1idWZzPD4oYmFzaWNfaW9zPGNoYXJfdHlwZSwgdHJhaXRzX3R5cGU+JiBfX2lvcywK ICAgICAgICAgICAgICAgICAgICAgICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiaW4sX19zdHJl YW1idWZfdHlwZSogX19zYm91dCk7CgogICAgcHJvdGVjdGVkOgoKCgoKCiAgICAgIGNoYXJfdHlw ZSogX01fYnVmOwoKCiAgICAgIHNpemVfdCBfTV9idWZfc2l6ZTsKCgogICAgICBzaXplX3QgX01f YnVmX3NpemVfb3B0OwoKCgogICAgICBib29sIF9NX2J1Zl91bmlmaWVkOwoKCgoKCgogICAgICBj aGFyX3R5cGUqIF9NX2luX2JlZzsKICAgICAgY2hhcl90eXBlKiBfTV9pbl9jdXI7CiAgICAgIGNo YXJfdHlwZSogX01faW5fZW5kOwogICAgICBjaGFyX3R5cGUqIF9NX291dF9iZWc7CiAgICAgIGNo YXJfdHlwZSogX01fb3V0X2N1cjsKICAgICAgY2hhcl90eXBlKiBfTV9vdXRfZW5kOwoKCiAgICAg IGlvc19iYXNlOjpvcGVubW9kZSBfTV9tb2RlOwoKCiAgICAgIGxvY2FsZSBfTV9idWZfbG9jYWxl OwoKCiAgICAgIGJvb2wgX01fYnVmX2xvY2FsZV9pbml0OwoKCgoKCgogICAgICBzdGF0aWMgY29u c3Qgc2l6ZV90IF9TX3BiYWNrX3NpemUgPSAxOwogICAgICBjaGFyX3R5cGUgX01fcGJhY2tbX1Nf cGJhY2tfc2l6ZV07CiAgICAgIGNoYXJfdHlwZSogX01fcGJhY2tfY3VyX3NhdmU7CiAgICAgIGNo YXJfdHlwZSogX01fcGJhY2tfZW5kX3NhdmU7CiAgICAgIGJvb2wgX01fcGJhY2tfaW5pdDsKCgog ICAgICBmcG9zPF9fc3RhdGVfdHlwZT4gX01fcG9zOwoKCgoKICAgICAgdm9pZAogICAgICBfTV9w YmFja19jcmVhdGUoKQogICAgICB7CiAgICAgICAgaWYgKCFfTV9wYmFja19pbml0KQogICAgICAg ICAgewogICAgICAgICAgICBzaXplX3QgX19kaXN0ID0gX01faW5fZW5kIC0gX01faW5fY3VyOwog ICAgICAgICAgICBzaXplX3QgX19sZW4gPSBtaW4oX1NfcGJhY2tfc2l6ZSwgX19kaXN0KTsKICAg ICAgICAgICAgdHJhaXRzX3R5cGU6OmNvcHkoX01fcGJhY2ssIF9NX2luX2N1ciwgX19sZW4pOwog ICAgICAgICAgICBfTV9wYmFja19jdXJfc2F2ZSA9IF9NX2luX2N1cjsKICAgICAgICAgICAgX01f cGJhY2tfZW5kX3NhdmUgPSBfTV9pbl9lbmQ7CiAgICAgICAgICAgIHRoaXMtPnNldGcoX01fcGJh Y2ssIF9NX3BiYWNrLCBfTV9wYmFjayArIF9fbGVuKTsKICAgICAgICAgICAgX01fcGJhY2tfaW5p dCA9IHRydWU7CiAgICAgICAgICB9CiAgICAgIH0KCgoKCiAgICAgIHZvaWQKICAgICAgX01fcGJh Y2tfZGVzdHJveSgpCiAgICAgIHsKICAgICAgICBpZiAoX01fcGJhY2tfaW5pdCkKICAgICAgICAg IHsKCiAgICAgICAgICAgIHNpemVfdCBfX29mZl9jdXIgPSBfTV9pbl9jdXIgLSBfTV9wYmFjazsK CgogICAgICAgICAgICBzaXplX3QgX19vZmZfZW5kID0gMDsKICAgICAgICAgICAgc2l6ZV90IF9f cGJhY2tfbGVuID0gX01faW5fZW5kIC0gX01fcGJhY2s7CiAgICAgICAgICAgIHNpemVfdCBfX3Nh dmVfbGVuID0gX01fcGJhY2tfZW5kX3NhdmUgLSBfTV9idWY7CiAgICAgICAgICAgIGlmIChfX3Bi YWNrX2xlbiA+IF9fc2F2ZV9sZW4pCiAgICAgICAgICAgICAgX19vZmZfZW5kID0gX19wYmFja19s ZW4gLSBfX3NhdmVfbGVuOwoKICAgICAgICAgICAgdGhpcy0+c2V0ZyhfTV9idWYsIF9NX3BiYWNr X2N1cl9zYXZlICsgX19vZmZfY3VyLAogICAgICAgICAgICAgICAgICAgICAgIF9NX3BiYWNrX2Vu ZF9zYXZlICsgX19vZmZfZW5kKTsKICAgICAgICAgICAgX01fcGJhY2tfY3VyX3NhdmUgPSBfX251 bGw7CiAgICAgICAgICAgIF9NX3BiYWNrX2VuZF9zYXZlID0gX19udWxsOwogICAgICAgICAgICBf TV9wYmFja19pbml0ID0gZmFsc2U7CiAgICAgICAgICB9CiAgICAgIH0KCgoKICAgICAgdm9pZAog ICAgICBfTV9pbl9jdXJfbW92ZShvZmZfdHlwZSBfX24pCiAgICAgIHsKICAgICAgICBib29sIF9f dGVzdG91dCA9IF9NX291dF9jdXI7CiAgICAgICAgX01faW5fY3VyICs9IF9fbjsKICAgICAgICBp ZiAoX190ZXN0b3V0ICYmIF9NX2J1Zl91bmlmaWVkKQogICAgICAgICAgX01fb3V0X2N1ciArPSBf X247CiAgICAgIH0KIyAyMDIgIi91c3IvaW5jbHVkZS9jKysvMy4yL3N0cmVhbWJ1ZiIgMwogICAg ICB2b2lkCiAgICAgIF9NX291dF9jdXJfbW92ZShvZmZfdHlwZSBfX24pCiAgICAgIHsKICAgICAg ICBib29sIF9fdGVzdGluID0gX01faW5fY3VyOwoKICAgICAgICBfTV9vdXRfY3VyICs9IF9fbjsK ICAgICAgICBpZiAoX190ZXN0aW4gJiYgX01fYnVmX3VuaWZpZWQpCiAgICAgICAgICBfTV9pbl9j dXIgKz0gX19uOwogICAgICAgIGlmIChfTV9vdXRfY3VyID4gX01fb3V0X2VuZCkKICAgICAgICAg IHsKICAgICAgICAgICAgX01fb3V0X2VuZCA9IF9NX291dF9jdXI7CgogICAgICAgICAgICBpZiAo X190ZXN0aW4pCiAgICAgICAgICAgICAgX01faW5fZW5kICs9IF9fbjsKICAgICAgICAgIH0KICAg ICAgfQoKCgoKICAgICAgb2ZmX3R5cGUKICAgICAgX01fb3V0X2J1Zl9zaXplKCkKICAgICAgewog ICAgICAgIG9mZl90eXBlIF9fcmV0ID0gMDsKICAgICAgICBpZiAoX01fb3V0X2N1cikKICAgICAg ICAgIHsKCiAgICAgICAgICAgIGlmIChfTV9vdXRfYmVnID09IF9NX2J1ZikKICAgICAgICAgICAg ICBfX3JldCA9IF9NX291dF9iZWcgKyBfTV9idWZfc2l6ZSAtIF9NX291dF9jdXI7CgogICAgICAg ICAgICBlbHNlCiAgICAgICAgICAgICAgX19yZXQgPSBfTV9vdXRfZW5kIC0gX01fb3V0X2N1cjsK ICAgICAgICAgIH0KICAgICAgICByZXR1cm4gX19yZXQ7CiAgICAgIH0KCiAgcHVibGljOgogICAg ICB2aXJ0dWFsCiAgICAgIH5iYXNpY19zdHJlYW1idWYoKQogICAgICB7CiAgICAgICAgX01fYnVm X3VuaWZpZWQgPSBmYWxzZTsKICAgICAgICBfTV9idWZfc2l6ZSA9IDA7CiAgICAgICAgX01fYnVm X3NpemVfb3B0ID0gMDsKICAgICAgICBfTV9tb2RlID0gaW9zX2Jhc2U6Om9wZW5tb2RlKDApOwog ICAgICB9CgoKICAgICAgbG9jYWxlCiAgICAgIHB1YmltYnVlKGNvbnN0IGxvY2FsZSAmX19sb2Mp CiAgICAgIHsKICAgICAgICBsb2NhbGUgX190bXAodGhpcy0+Z2V0bG9jKCkpOwogICAgICAgIHRo aXMtPmltYnVlKF9fbG9jKTsKICAgICAgICByZXR1cm4gX190bXA7CiAgICAgIH0KCiAgICAgIGxv Y2FsZQogICAgICBnZXRsb2MoKSBjb25zdAogICAgICB7IHJldHVybiBfTV9idWZfbG9jYWxlOyB9 CgoKICAgICAgX19zdHJlYW1idWZfdHlwZSoKICAgICAgcHVic2V0YnVmKGNoYXJfdHlwZSogX19z LCBzdHJlYW1zaXplIF9fbikKICAgICAgeyByZXR1cm4gdGhpcy0+c2V0YnVmKF9fcywgX19uKTsg fQoKICAgICAgcG9zX3R5cGUKICAgICAgcHVic2Vla29mZihvZmZfdHlwZSBfX29mZiwgaW9zX2Jh c2U6OnNlZWtkaXIgX193YXksCiAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6Om9wZW5tb2RlIF9f bW9kZSA9IGlvc19iYXNlOjppbiB8IGlvc19iYXNlOjpvdXQpCiAgICAgIHsgcmV0dXJuIHRoaXMt PnNlZWtvZmYoX19vZmYsIF9fd2F5LCBfX21vZGUpOyB9CgogICAgICBwb3NfdHlwZQogICAgICBw dWJzZWVrcG9zKHBvc190eXBlIF9fc3AsCiAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6Om9wZW5t b2RlIF9fbW9kZSA9IGlvc19iYXNlOjppbiB8IGlvc19iYXNlOjpvdXQpCiAgICAgIHsgcmV0dXJu IHRoaXMtPnNlZWtwb3MoX19zcCwgX19tb2RlKTsgfQoKICAgICAgaW50CiAgICAgIHB1YnN5bmMo KSB7IHJldHVybiB0aGlzLT5zeW5jKCk7IH0KCgoKICAgICAgc3RyZWFtc2l6ZQogICAgICBpbl9h dmFpbCgpCiAgICAgIHsKICAgICAgICBzdHJlYW1zaXplIF9fcmV0OwogICAgICAgIGlmIChfTV9p bl9jdXIgJiYgX01faW5fY3VyIDwgX01faW5fZW5kKQogICAgICAgICAgewogICAgICAgICAgICBp ZiAoX01fcGJhY2tfaW5pdCkKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBzaXplX3Qg X19zYXZlX2xlbiA9IF9NX3BiYWNrX2VuZF9zYXZlIC0gX01fcGJhY2tfY3VyX3NhdmU7CiAgICAg ICAgICAgICAgICBzaXplX3QgX19wYmFja19sZW4gPSBfTV9pbl9jdXIgLSBfTV9wYmFjazsKICAg ICAgICAgICAgICAgIF9fcmV0ID0gX19zYXZlX2xlbiAtIF9fcGJhY2tfbGVuOwogICAgICAgICAg ICAgIH0KICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgIF9fcmV0ID0gdGhpcy0+ZWdwdHIo KSAtIHRoaXMtPmdwdHIoKTsKICAgICAgICAgIH0KICAgICAgICBlbHNlCiAgICAgICAgICBfX3Jl dCA9IHRoaXMtPnNob3dtYW55YygpOwogICAgICAgIHJldHVybiBfX3JldDsKICAgICAgfQoKICAg ICAgaW50X3R5cGUKICAgICAgc25leHRjKCkKICAgICAgewogICAgICAgIGludF90eXBlIF9fZW9m ID0gdHJhaXRzX3R5cGU6OmVvZigpOwogICAgICAgIHJldHVybiAodHJhaXRzX3R5cGU6OmVxX2lu dF90eXBlKHRoaXMtPnNidW1wYygpLCBfX2VvZikKICAgICAgICAgICAgICAgID8gX19lb2YgOiB0 aGlzLT5zZ2V0YygpKTsKICAgICAgfQoKICAgICAgaW50X3R5cGUKICAgICAgc2J1bXBjKCk7Cgog ICAgICBpbnRfdHlwZQogICAgICBzZ2V0YygpCiAgICAgIHsKICAgICAgICBpbnRfdHlwZSBfX3Jl dDsKICAgICAgICBpZiAoX01faW5fY3VyICYmIF9NX2luX2N1ciA8IF9NX2luX2VuZCkKICAgICAg ICAgIF9fcmV0ID0gdHJhaXRzX3R5cGU6OnRvX2ludF90eXBlKCoodGhpcy0+Z3B0cigpKSk7CiAg ICAgICAgZWxzZQogICAgICAgICAgX19yZXQgPSB0aGlzLT51bmRlcmZsb3coKTsKICAgICAgICBy ZXR1cm4gX19yZXQ7CiAgICAgIH0KCiAgICAgIHN0cmVhbXNpemUKICAgICAgc2dldG4oY2hhcl90 eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKQogICAgICB7IHJldHVybiB0aGlzLT54c2dldG4oX19z LCBfX24pOyB9CgoKICAgICAgaW50X3R5cGUKICAgICAgc3B1dGJhY2tjKGNoYXJfdHlwZSBfX2Mp OwoKICAgICAgaW50X3R5cGUKICAgICAgc3VuZ2V0YygpOwoKCiAgICAgIGludF90eXBlCiAgICAg IHNwdXRjKGNoYXJfdHlwZSBfX2MpOwoKICAgICAgc3RyZWFtc2l6ZQogICAgICBzcHV0bihjb25z dCBjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pCiAgICAgIHsgcmV0dXJuIHRoaXMtPnhz cHV0bihfX3MsIF9fbik7IH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIGJhc2ljX3N0cmVhbWJ1Zigp CiAgICAgIDogX01fYnVmKF9fbnVsbCksIF9NX2J1Zl9zaXplKDApLCBfTV9idWZfc2l6ZV9vcHQo ODE5MiksCiAgICAgIF9NX2J1Zl91bmlmaWVkKGZhbHNlKSwgX01faW5fYmVnKDApLCBfTV9pbl9j dXIoMCksIF9NX2luX2VuZCgwKSwKICAgICAgX01fb3V0X2JlZygwKSwgX01fb3V0X2N1cigwKSwg X01fb3V0X2VuZCgwKSwKICAgICAgX01fbW9kZShpb3NfYmFzZTo6b3Blbm1vZGUoMCkpLCBfTV9i dWZfbG9jYWxlKGxvY2FsZSgpKSwKICAgICAgX01fcGJhY2tfY3VyX3NhdmUoMCksIF9NX3BiYWNr X2VuZF9zYXZlKDApLAogICAgICBfTV9wYmFja19pbml0KGZhbHNlKQogICAgICB7IH0KCgogICAg ICBjaGFyX3R5cGUqCiAgICAgIGViYWNrKCkgY29uc3QgeyByZXR1cm4gX01faW5fYmVnOyB9Cgog ICAgICBjaGFyX3R5cGUqCiAgICAgIGdwdHIoKSBjb25zdCB7IHJldHVybiBfTV9pbl9jdXI7IH0K CiAgICAgIGNoYXJfdHlwZSoKICAgICAgZWdwdHIoKSBjb25zdCB7IHJldHVybiBfTV9pbl9lbmQ7 IH0KCiAgICAgIHZvaWQKICAgICAgZ2J1bXAoaW50IF9fbikgeyBfTV9pbl9jdXIgKz0gX19uOyB9 CgogICAgICB2b2lkCiAgICAgIHNldGcoY2hhcl90eXBlKiBfX2diZWcsIGNoYXJfdHlwZSogX19n bmV4dCwgY2hhcl90eXBlKiBfX2dlbmQpCiAgICAgIHsKICAgICAgICBfTV9pbl9iZWcgPSBfX2di ZWc7CiAgICAgICAgX01faW5fY3VyID0gX19nbmV4dDsKICAgICAgICBfTV9pbl9lbmQgPSBfX2dl bmQ7CiAgICAgICAgaWYgKCEoX01fbW9kZSAmIGlvc19iYXNlOjppbikgJiYgX19nYmVnICYmIF9f Z25leHQgJiYgX19nZW5kKQogICAgICAgICAgX01fbW9kZSA9IF9NX21vZGUgfCBpb3NfYmFzZTo6 aW47CiAgICAgIH0KCgogICAgICBjaGFyX3R5cGUqCiAgICAgIHBiYXNlKCkgY29uc3QgeyByZXR1 cm4gX01fb3V0X2JlZzsgfQoKICAgICAgY2hhcl90eXBlKgogICAgICBwcHRyKCkgY29uc3QgeyBy ZXR1cm4gX01fb3V0X2N1cjsgfQoKICAgICAgY2hhcl90eXBlKgogICAgICBlcHB0cigpIGNvbnN0 IHsgcmV0dXJuIF9NX291dF9lbmQ7IH0KCiAgICAgIHZvaWQKICAgICAgcGJ1bXAoaW50IF9fbikg eyBfTV9vdXRfY3VyICs9IF9fbjsgfQoKICAgICAgdm9pZAogICAgICBzZXRwKGNoYXJfdHlwZSog X19wYmVnLCBjaGFyX3R5cGUqIF9fcGVuZCkKICAgICAgewogICAgICAgIF9NX291dF9iZWcgPSBf TV9vdXRfY3VyID0gX19wYmVnOwogICAgICAgIF9NX291dF9lbmQgPSBfX3BlbmQ7CiAgICAgICAg aWYgKCEoX01fbW9kZSAmIGlvc19iYXNlOjpvdXQpICYmIF9fcGJlZyAmJiBfX3BlbmQpCiAgICAg ICAgICBfTV9tb2RlID0gX01fbW9kZSB8IGlvc19iYXNlOjpvdXQ7CiAgICAgIH0KCgoKICAgICAg dmlydHVhbCB2b2lkCiAgICAgIGltYnVlKGNvbnN0IGxvY2FsZSYgX19sb2MpCiAgICAgIHsKICAg ICAgICBpZiAoX01fYnVmX2xvY2FsZSAhPSBfX2xvYykKICAgICAgICAgIF9NX2J1Zl9sb2NhbGUg PSBfX2xvYzsKICAgICAgfQoKCiAgICAgIHZpcnR1YWwgYmFzaWNfc3RyZWFtYnVmPGNoYXJfdHlw ZSxfVHJhaXRzPioKICAgICAgc2V0YnVmKGNoYXJfdHlwZSosIHN0cmVhbXNpemUpCiAgICAgIHsg cmV0dXJuIHRoaXM7IH0KCiAgICAgIHZpcnR1YWwgcG9zX3R5cGUKICAgICAgc2Vla29mZihvZmZf dHlwZSwgaW9zX2Jhc2U6OnNlZWtkaXIsCiAgICAgICAgICAgICAgaW9zX2Jhc2U6Om9wZW5tb2Rl ID0gaW9zX2Jhc2U6OmluIHwgaW9zX2Jhc2U6Om91dCkKICAgICAgeyByZXR1cm4gcG9zX3R5cGUo b2ZmX3R5cGUoLTEpKTsgfQoKICAgICAgdmlydHVhbCBwb3NfdHlwZQogICAgICBzZWVrcG9zKHBv c190eXBlLAogICAgICAgICAgICAgIGlvc19iYXNlOjpvcGVubW9kZSA9IGlvc19iYXNlOjppbiB8 IGlvc19iYXNlOjpvdXQpCiAgICAgIHsgcmV0dXJuIHBvc190eXBlKG9mZl90eXBlKC0xKSk7IH0K CiAgICAgIHZpcnR1YWwgaW50CiAgICAgIHN5bmMoKSB7IHJldHVybiAwOyB9CgoKICAgICAgdmly dHVhbCBzdHJlYW1zaXplCiAgICAgIHNob3dtYW55YygpIHsgcmV0dXJuIDA7IH0KCiAgICAgIHZp cnR1YWwgc3RyZWFtc2l6ZQogICAgICB4c2dldG4oY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUg X19uKTsKCiAgICAgIHZpcnR1YWwgaW50X3R5cGUKICAgICAgdW5kZXJmbG93KCkKICAgICAgeyBy ZXR1cm4gdHJhaXRzX3R5cGU6OmVvZigpOyB9CgogICAgICB2aXJ0dWFsIGludF90eXBlCiAgICAg IHVmbG93KCkKICAgICAgewogICAgICAgIGludF90eXBlIF9fcmV0ID0gdHJhaXRzX3R5cGU6OmVv ZigpOwogICAgICAgIGJvb2wgX190ZXN0ZW9mID0gdHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKHRo aXMtPnVuZGVyZmxvdygpLCBfX3JldCk7CiAgICAgICAgYm9vbCBfX3Rlc3RwZW5kaW5nID0gX01f aW5fY3VyICYmIF9NX2luX2N1ciA8IF9NX2luX2VuZDsKICAgICAgICBpZiAoIV9fdGVzdGVvZiAm JiBfX3Rlc3RwZW5kaW5nKQogICAgICAgICAgewogICAgICAgICAgICBfX3JldCA9IHRyYWl0c190 eXBlOjp0b19pbnRfdHlwZSgqX01faW5fY3VyKTsKICAgICAgICAgICAgKytfTV9pbl9jdXI7CiAg ICAgICAgICAgIGlmIChfTV9idWZfdW5pZmllZCAmJiBfTV9tb2RlICYgaW9zX2Jhc2U6Om91dCkK ICAgICAgICAgICAgICArK19NX291dF9jdXI7CiAgICAgICAgICB9CiAgICAgICAgcmV0dXJuIF9f cmV0OwogICAgICB9CgoKICAgICAgdmlydHVhbCBpbnRfdHlwZQogICAgICBwYmFja2ZhaWwoaW50 X3R5cGUgPSB0cmFpdHNfdHlwZTo6ZW9mKCkpCiAgICAgIHsgcmV0dXJuIHRyYWl0c190eXBlOjpl b2YoKTsgfQoKCiAgICAgIHZpcnR1YWwgc3RyZWFtc2l6ZQogICAgICB4c3B1dG4oY29uc3QgY2hh cl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKTsKCiAgICAgIHZpcnR1YWwgaW50X3R5cGUKICAg ICAgb3ZlcmZsb3coaW50X3R5cGUgPSB0cmFpdHNfdHlwZTo6ZW9mKCkpCiAgICAgIHsgcmV0dXJu IHRyYWl0c190eXBlOjplb2YoKTsgfQojIDQ3OCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvc3RyZWFt YnVmIiAzCiAgICBwcml2YXRlOgogICAgICBiYXNpY19zdHJlYW1idWYoY29uc3QgX19zdHJlYW1i dWZfdHlwZSYpIHsgfTsKCiAgICAgIF9fc3RyZWFtYnVmX3R5cGUmCiAgICAgIG9wZXJhdG9yPShj b25zdCBfX3N0cmVhbWJ1Zl90eXBlJikgeyByZXR1cm4gKnRoaXM7IH07CgogICAgfTsKfQoKCgoK CiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdHJlYW1idWYudGNjIiAxIDMKIyAzOSAi L3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdHJlYW1idWYudGNjIiAzCgpuYW1lc3BhY2Ugc3Rk CnsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBjb25z dCBzaXplX3QKICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjpfU19wYmFja19z aXplOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICB0 eXBlbmFtZSBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPjo6aW50X3R5cGUKICAgIGJh c2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIHNidW1wYygpCiAgICB7CiAgICAg IGludF90eXBlIF9fcmV0OwogICAgICBpZiAoX01faW5fY3VyICYmIF9NX2luX2N1ciA8IF9NX2lu X2VuZCkKICAgICAgICB7CiAgICAgICAgICBjaGFyX3R5cGUgX19jID0gKih0aGlzLT5ncHRyKCkp OwogICAgICAgICAgX01faW5fY3VyX21vdmUoMSk7CiAgICAgICAgICBfX3JldCA9IHRyYWl0c190 eXBlOjp0b19pbnRfdHlwZShfX2MpOwogICAgICAgIH0KICAgICAgZWxzZQogICAgICAgIF9fcmV0 ID0gdGhpcy0+dWZsb3coKTsKICAgICAgcmV0dXJuIF9fcmV0OwogICAgfQoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICB0eXBlbmFtZSBiYXNpY19zdHJl YW1idWY8X0NoYXJULCBfVHJhaXRzPjo6aW50X3R5cGUKICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hh clQsIF9UcmFpdHM+OjoKICAgIHNwdXRiYWNrYyhjaGFyX3R5cGUgX19jKQogICAgewogICAgICBp bnRfdHlwZSBfX3JldDsKICAgICAgYm9vbCBfX3Rlc3Rwb3MgPSBfTV9pbl9jdXIgJiYgX01faW5f YmVnIDwgX01faW5fY3VyOwogICAgICBpZiAoIV9fdGVzdHBvcyB8fCAhdHJhaXRzX3R5cGU6OmVx KF9fYywgdGhpcy0+Z3B0cigpWy0xXSkpCiAgICAgICAgX19yZXQgPSB0aGlzLT5wYmFja2ZhaWwo dHJhaXRzX3R5cGU6OnRvX2ludF90eXBlKF9fYykpOwogICAgICBlbHNlCiAgICAgICAgewogICAg ICAgICAgX01faW5fY3VyX21vdmUoLTEpOwogICAgICAgICAgX19yZXQgPSB0cmFpdHNfdHlwZTo6 dG9faW50X3R5cGUoKnRoaXMtPmdwdHIoKSk7CiAgICAgICAgfQogICAgICByZXR1cm4gX19yZXQ7 CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAg IHR5cGVuYW1lIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjppbnRfdHlwZQogICAg YmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz46OgogICAgc3VuZ2V0YygpCiAgICB7CiAg ICAgIGludF90eXBlIF9fcmV0OwogICAgICBpZiAoX01faW5fY3VyICYmIF9NX2luX2JlZyA8IF9N X2luX2N1cikKICAgICAgICB7CiAgICAgICAgICBfTV9pbl9jdXJfbW92ZSgtMSk7CiAgICAgICAg ICBfX3JldCA9IHRyYWl0c190eXBlOjp0b19pbnRfdHlwZSgqX01faW5fY3VyKTsKICAgICAgICB9 CiAgICAgIGVsc2UKICAgICAgICBfX3JldCA9IHRoaXMtPnBiYWNrZmFpbCgpOwogICAgICByZXR1 cm4gX19yZXQ7CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt ZSBfVHJhaXRzPgogICAgdHlwZW5hbWUgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz46 OmludF90eXBlCiAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPjo6CiAgICBzcHV0 YyhjaGFyX3R5cGUgX19jKQogICAgewogICAgICBpbnRfdHlwZSBfX3JldDsKICAgICAgaWYgKF9N X291dF9idWZfc2l6ZSgpKQogICAgICAgIHsKICAgICAgICAgICpfTV9vdXRfY3VyID0gX19jOwog ICAgICAgICAgX01fb3V0X2N1cl9tb3ZlKDEpOwogICAgICAgICAgX19yZXQgPSB0cmFpdHNfdHlw ZTo6dG9faW50X3R5cGUoX19jKTsKICAgICAgICB9CiAgICAgIGVsc2UKICAgICAgICBfX3JldCA9 IHRoaXMtPm92ZXJmbG93KHRyYWl0c190eXBlOjp0b19pbnRfdHlwZShfX2MpKTsKICAgICAgcmV0 dXJuIF9fcmV0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U cmFpdHM+CiAgICBzdHJlYW1zaXplCiAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRz Pjo6CiAgICB4c2dldG4oY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKQogICAgewogICAg ICBzdHJlYW1zaXplIF9fcmV0ID0gMDsKICAgICAgd2hpbGUgKF9fcmV0IDwgX19uKQogICAgICAg IHsKICAgICAgICAgIHNpemVfdCBfX2J1Zl9sZW4gPSBfTV9pbl9lbmQgLSBfTV9pbl9jdXI7CiAg ICAgICAgICBpZiAoX19idWZfbGVuID4gMCkKICAgICAgICAgICAgewogICAgICAgICAgICAgIHNp emVfdCBfX3JlbWFpbmluZyA9IF9fbiAtIF9fcmV0OwogICAgICAgICAgICAgIHNpemVfdCBfX2xl biA9IG1pbihfX2J1Zl9sZW4sIF9fcmVtYWluaW5nKTsKICAgICAgICAgICAgICB0cmFpdHNfdHlw ZTo6Y29weShfX3MsIF9NX2luX2N1ciwgX19sZW4pOwogICAgICAgICAgICAgIF9fcmV0ICs9IF9f bGVuOwogICAgICAgICAgICAgIF9fcyArPSBfX2xlbjsKICAgICAgICAgICAgICBfTV9pbl9jdXJf bW92ZShfX2xlbik7CiAgICAgICAgICAgIH0KCiAgICAgICAgICBpZiAoX19yZXQgPCBfX24pCiAg ICAgICAgICAgIHsKICAgICAgICAgICAgICBpbnRfdHlwZSBfX2MgPSB0aGlzLT51ZmxvdygpOwog ICAgICAgICAgICAgIGlmICghdHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKF9fYywgdHJhaXRzX3R5 cGU6OmVvZigpKSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgdHJhaXRzX3R5 cGU6OmFzc2lnbigqX19zKyssIHRyYWl0c190eXBlOjp0b19jaGFyX3R5cGUoX19jKSk7CiAgICAg ICAgICAgICAgICAgICsrX19yZXQ7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgZWxz ZQogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJl dHVybiBfX3JldDsKICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu YW1lIF9UcmFpdHM+CiAgICBzdHJlYW1zaXplCiAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBf VHJhaXRzPjo6CiAgICB4c3B1dG4oY29uc3QgY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19u KQogICAgewogICAgICBzdHJlYW1zaXplIF9fcmV0ID0gMDsKICAgICAgd2hpbGUgKF9fcmV0IDwg X19uKQogICAgICAgIHsKICAgICAgICAgIG9mZl90eXBlIF9fYnVmX2xlbiA9IF9NX291dF9idWZf c2l6ZSgpOwogICAgICAgICAgaWYgKF9fYnVmX2xlbiA+IDApCiAgICAgICAgICAgIHsKICAgICAg ICAgICAgICBvZmZfdHlwZSBfX3JlbWFpbmluZyA9IF9fbiAtIF9fcmV0OwogICAgICAgICAgICAg IG9mZl90eXBlIF9fbGVuID0gbWluKF9fYnVmX2xlbiwgX19yZW1haW5pbmcpOwogICAgICAgICAg ICAgIHRyYWl0c190eXBlOjpjb3B5KF9NX291dF9jdXIsIF9fcywgX19sZW4pOwogICAgICAgICAg ICAgIF9fcmV0ICs9IF9fbGVuOwogICAgICAgICAgICAgIF9fcyArPSBfX2xlbjsKICAgICAgICAg ICAgICBfTV9vdXRfY3VyX21vdmUoX19sZW4pOwogICAgICAgICAgICB9CgogICAgICAgICAgaWYg KF9fcmV0IDwgX19uKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaW50X3R5cGUgX19jID0g dGhpcy0+b3ZlcmZsb3codHJhaXRzX3R5cGU6OnRvX2ludF90eXBlKCpfX3MpKTsKICAgICAgICAg ICAgICBpZiAoIXRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfX2MsIHRyYWl0c190eXBlOjplb2Yo KSkpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICsrX19yZXQ7CiAgICAgICAg ICAgICAgICAgICsrX19zOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGVsc2UKICAg ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4g X19yZXQ7CiAgICB9CgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U cmFpdHM+CiAgICBzdHJlYW1zaXplCiAgICBfX2NvcHlfc3RyZWFtYnVmcyhiYXNpY19pb3M8X0No YXJULCBfVHJhaXRzPiYgX19pb3MsCiAgICAgICAgICAgICAgICAgICAgICBiYXNpY19zdHJlYW1i dWY8X0NoYXJULCBfVHJhaXRzPiogX19zYmluLAogICAgICAgICAgICAgICAgICAgICAgYmFzaWNf c3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4qIF9fc2JvdXQpCiAgewogICAgICB0eXBlZGVmIHR5 cGVuYW1lIF9UcmFpdHM6OmludF90eXBlIGludF90eXBlOwoKICAgICAgc3RyZWFtc2l6ZSBfX3Jl dCA9IDA7CiAgICAgIHN0cmVhbXNpemUgX19idWZzaXplID0gX19zYmluLT5pbl9hdmFpbCgpOwog ICAgICBzdHJlYW1zaXplIF9feHRyY3Q7CiAgICAgIGJvb2wgX190ZXN0cHV0ID0gX19zYm91dC0+ X01fbW9kZSAmIGlvc19iYXNlOjpvdXQ7CiAgICAgIHRyeQogICAgICAgIHsKICAgICAgICAgIHdo aWxlIChfX3Rlc3RwdXQgJiYgX19idWZzaXplICE9IC0xKQogICAgICAgICAgICB7CiAgICAgICAg ICAgICAgaWYgKF9fYnVmc2l6ZSAhPSAwICYmIF9fc2Jpbi0+Z3B0cigpICE9IF9fbnVsbAogICAg ICAgICAgICAgICAgICAmJiBfX3NiaW4tPmdwdHIoKSArIF9fYnVmc2l6ZSA8PSBfX3NiaW4tPmVn cHRyKCkpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIF9feHRyY3QgPSBfX3Ni b3V0LT5zcHV0bihfX3NiaW4tPmdwdHIoKSwgX19idWZzaXplKTsKICAgICAgICAgICAgICAgICAg X19yZXQgKz0gX194dHJjdDsKICAgICAgICAgICAgICAgICAgX19zYmluLT5fTV9pbl9jdXJfbW92 ZShfX3h0cmN0KTsKICAgICAgICAgICAgICAgICAgaWYgKF9feHRyY3QgIT0gX19idWZzaXplKQog ICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg IGVsc2UKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fc2l6ZSA9 CiAgICAgICAgICAgICAgICAgICAgX19zYmluLT5fTV9idWZfc2l6ZV9vcHQgPiAwID8gX19zYmlu LT5fTV9idWZfc2l6ZV9vcHQgOiAxOwogICAgICAgICAgICAgICAgICBfQ2hhclQqIF9fYnVmID0K ICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxfQ2hhclQqPihfX2J1aWx0aW5fYWxsb2Nh KHNpemVvZihfQ2hhclQpICogX19zaXplKSk7CiAgICAgICAgICAgICAgICAgIHN0cmVhbXNpemUg X19jaGFyc3JlYWQgPSBfX3NiaW4tPnNnZXRuKF9fYnVmLCBfX3NpemUpOwogICAgICAgICAgICAg ICAgICBfX3h0cmN0ID0gX19zYm91dC0+c3B1dG4oX19idWYsIF9fY2hhcnNyZWFkKTsKICAgICAg ICAgICAgICAgICAgX19yZXQgKz0gX194dHJjdDsKICAgICAgICAgICAgICAgICAgaWYgKF9feHRy Y3QgIT0gX19jaGFyc3JlYWQpCiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg ICAgICB9CiAgICAgICAgICAgICAgaWYgKF9UcmFpdHM6OmVxX2ludF90eXBlKF9fc2Jpbi0+c2dl dGMoKSwgX1RyYWl0czo6ZW9mKCkpKQogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg ICAgX19idWZzaXplID0gX19zYmluLT5pbl9hdmFpbCgpOwogICAgICAgICAgICB9CiAgICAgICAg fQogICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICB7CiAgICAgICAgICBfX2lv cy5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAgICAgICBpZiAoKF9faW9zLmV4Y2Vw dGlvbnMoKSAmIGlvc19iYXNlOjpmYWlsYml0KSAhPSAwKQogICAgICAgICAgICB0aHJvdzsKICAg ICAgICB9CiAgICAgIHJldHVybiBfX3JldDsKICAgIH0KCgoKCiAgZXh0ZXJuIHRlbXBsYXRlIGNs YXNzIGJhc2ljX3N0cmVhbWJ1ZjxjaGFyPjsKICBleHRlcm4gdGVtcGxhdGUKICAgIHN0cmVhbXNp emUKICAgIF9fY29weV9zdHJlYW1idWZzKGJhc2ljX2lvczxjaGFyPiYsIGJhc2ljX3N0cmVhbWJ1 ZjxjaGFyPiosCiAgICAgICAgICAgICAgICAgICAgICBiYXNpY19zdHJlYW1idWY8Y2hhcj4qKTsK CgogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBiYXNpY19zdHJlYW1idWY8d2NoYXJfdD47CiAgZXh0 ZXJuIHRlbXBsYXRlCiAgICBzdHJlYW1zaXplCiAgICBfX2NvcHlfc3RyZWFtYnVmcyhiYXNpY19p b3M8d2NoYXJfdD4mLCBiYXNpY19zdHJlYW1idWY8d2NoYXJfdD4qLAogICAgICAgICAgICAgICAg ICAgICAgYmFzaWNfc3RyZWFtYnVmPHdjaGFyX3Q+Kik7Cgp9CiMgNDkyICIvdXNyL2luY2x1ZGUv YysrLzMuMi9zdHJlYW1idWYiIDIgMwojIDUxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9pb3MiIDIg MwojIDEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvYmFzaWNfaW9zLmgiIDEgMwojIDM5ICIv dXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL2Jhc2ljX2lvcy5oIiAzCgojIDEgIi91c3IvaW5jbHVk ZS9jKysvMy4yL2JpdHMvc3RyZWFtYnVmX2l0ZXJhdG9yLmgiIDEgMwojIDQyICIvdXNyL2luY2x1 ZGUvYysrLzMuMi9iaXRzL3N0cmVhbWJ1Zl9pdGVyYXRvci5oIiAzCgpuYW1lc3BhY2Ugc3RkCnsK CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgY2xhc3Mg aXN0cmVhbWJ1Zl9pdGVyYXRvcgogICAgOiBwdWJsaWMgaXRlcmF0b3I8aW5wdXRfaXRlcmF0b3Jf dGFnLCBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM6Om9mZl90eXBlLAogICAgICAgICAgICAgICAg ICAgICAgX0NoYXJUKiwgX0NoYXJUJj4KICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYg X0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBfVHJhaXRzIHRyYWl0c190eXBlOwogICAg ICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6OmludF90eXBlIGludF90eXBlOwogICAgICB0eXBl ZGVmIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+IHN0cmVhbWJ1Zl90eXBlOwogICAg ICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiBpc3RyZWFtX3R5cGU7Cgog ICAgcHJpdmF0ZToKCgoKCgoKCiAgICAgIG11dGFibGUgc3RyZWFtYnVmX3R5cGUqIF9NX3NidWY7 CiAgICAgIGludF90eXBlIF9NX2M7CgogICAgcHVibGljOgogICAgICBpc3RyZWFtYnVmX2l0ZXJh dG9yKCkgdGhyb3coKQogICAgICA6IF9NX3NidWYoMCksIF9NX2ModHJhaXRzX3R5cGU6OmVvZigp KSB7IH0KCiAgICAgIGlzdHJlYW1idWZfaXRlcmF0b3IoaXN0cmVhbV90eXBlJiBfX3MpIHRocm93 KCkKICAgICAgOiBfTV9zYnVmKF9fcy5yZGJ1ZigpKSwgX01fYyh0cmFpdHNfdHlwZTo6ZW9mKCkp IHsgfQoKICAgICAgaXN0cmVhbWJ1Zl9pdGVyYXRvcihzdHJlYW1idWZfdHlwZSogX19zKSB0aHJv dygpCiAgICAgIDogX01fc2J1ZihfX3MpLCBfTV9jKHRyYWl0c190eXBlOjplb2YoKSkgeyB9CgoK ICAgICAgY2hhcl90eXBlCiAgICAgIG9wZXJhdG9yKigpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRy YWl0c190eXBlOjp0b19jaGFyX3R5cGUoX01fZ2V0KCkpOyB9CgogICAgICBpc3RyZWFtYnVmX2l0 ZXJhdG9yJgogICAgICBvcGVyYXRvcisrKCkKICAgICAgewogICAgICAgIGNvbnN0IGludF90eXBl IF9fZW9mID0gdHJhaXRzX3R5cGU6OmVvZigpOwogICAgICAgIGlmIChfTV9zYnVmICYmIHRyYWl0 c190eXBlOjplcV9pbnRfdHlwZShfTV9zYnVmLT5zYnVtcGMoKSwgX19lb2YpKQogICAgICAgICAg X01fc2J1ZiA9IDA7CiAgICAgICAgZWxzZQogICAgICAgICAgX01fYyA9IF9fZW9mOwogICAgICAg IHJldHVybiAqdGhpczsKICAgICAgfQoKICAgICAgaXN0cmVhbWJ1Zl9pdGVyYXRvcgogICAgICBv cGVyYXRvcisrKGludCkKICAgICAgewogICAgICAgIGNvbnN0IGludF90eXBlIF9fZW9mID0gdHJh aXRzX3R5cGU6OmVvZigpOwogICAgICAgIGlzdHJlYW1idWZfaXRlcmF0b3IgX19vbGQgPSAqdGhp czsKICAgICAgICBpZiAoX01fc2J1ZgogICAgICAgICAgICAmJiB0cmFpdHNfdHlwZTo6ZXFfaW50 X3R5cGUoKF9fb2xkLl9NX2MgPSBfTV9zYnVmLT5zYnVtcGMoKSksCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBfX2VvZikpCiAgICAgICAgICBfTV9zYnVmID0gMDsKICAg ICAgICBlbHNlCiAgICAgICAgICBfTV9jID0gX19lb2Y7CiAgICAgICAgcmV0dXJuIF9fb2xkOwog ICAgICB9CgoKCgogICAgICBib29sCiAgICAgIGVxdWFsKGNvbnN0IGlzdHJlYW1idWZfaXRlcmF0 b3ImIF9fYikgY29uc3QKICAgICAgewogICAgICAgIGNvbnN0IGludF90eXBlIF9fZW9mID0gdHJh aXRzX3R5cGU6OmVvZigpOwogICAgICAgIGJvb2wgX190aGlzZW9mID0gdHJhaXRzX3R5cGU6OmVx X2ludF90eXBlKF9NX2dldCgpLCBfX2VvZik7CiAgICAgICAgYm9vbCBfX2Jlb2YgPSB0cmFpdHNf dHlwZTo6ZXFfaW50X3R5cGUoX19iLl9NX2dldCgpLCBfX2VvZik7CiAgICAgICAgcmV0dXJuIChf X3RoaXNlb2YgJiYgX19iZW9mIHx8ICghX190aGlzZW9mICYmICFfX2Jlb2YpKTsKICAgICAgfQoK CiAgICBwcml2YXRlOgogICAgICBpbnRfdHlwZQogICAgICBfTV9nZXQoKSBjb25zdAogICAgICB7 CiAgICAgICAgY29uc3QgaW50X3R5cGUgX19lb2YgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7CiAgICAg ICAgaW50X3R5cGUgX19yZXQgPSBfX2VvZjsKICAgICAgICBpZiAoX01fc2J1ZikKICAgICAgICAg IHsKICAgICAgICAgICAgaWYgKCF0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX01fYywgX19lb2Yp KQogICAgICAgICAgICAgIF9fcmV0ID0gX01fYzsKICAgICAgICAgICAgZWxzZQogICAgICAgICAg ICAgIGlmICh0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoKF9fcmV0ID0gX01fc2J1Zi0+c2dldGMo KSksIF9fZW9mKSkKICAgICAgICAgICAgICAgIF9NX3NidWYgPSAwOwogICAgICAgICAgfQogICAg ICAgIHJldHVybiBfX3JldDsKICAgICAgfQogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No YXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPT0oY29u c3QgaXN0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQsIF9UcmFpdHM+JiBfX2EsCiAgICAgICAgICAg ICAgIGNvbnN0IGlzdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJULCBfVHJhaXRzPiYgX19iKQogICAg eyByZXR1cm4gX19hLmVxdWFsKF9fYik7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0 eXBlbmFtZSBfVHJhaXRzPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yIT0oY29uc3QgaXN0 cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQsIF9UcmFpdHM+JiBfX2EsCiAgICAgICAgICAgICAgIGNv bnN0IGlzdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJULCBfVHJhaXRzPiYgX19iKQogICAgeyByZXR1 cm4gIV9fYS5lcXVhbChfX2IpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h bWUgX1RyYWl0cz4KICAgIGNsYXNzIG9zdHJlYW1idWZfaXRlcmF0b3IKICAgIDogcHVibGljIGl0 ZXJhdG9yPG91dHB1dF9pdGVyYXRvcl90YWcsIHZvaWQsIHZvaWQsIHZvaWQsIHZvaWQ+CiAgICB7 CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVk ZWYgX1RyYWl0cyB0cmFpdHNfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJlYW1idWY8X0No YXJULCBfVHJhaXRzPiBzdHJlYW1idWZfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19vc3RyZWFt PF9DaGFyVCwgX1RyYWl0cz4gb3N0cmVhbV90eXBlOwoKICAgIHByaXZhdGU6CiAgICAgIHN0cmVh bWJ1Zl90eXBlKiBfTV9zYnVmOwogICAgICBib29sIF9NX2ZhaWxlZDsKCiAgICBwdWJsaWM6CiAg ICAgIGlubGluZQogICAgICBvc3RyZWFtYnVmX2l0ZXJhdG9yKG9zdHJlYW1fdHlwZSYgX19zKSB0 aHJvdyAoKQogICAgICA6IF9NX3NidWYoX19zLnJkYnVmKCkpLCBfTV9mYWlsZWQoIV9NX3NidWYp IHsgfQoKICAgICAgb3N0cmVhbWJ1Zl9pdGVyYXRvcihzdHJlYW1idWZfdHlwZSogX19zKSB0aHJv dyAoKQogICAgICA6IF9NX3NidWYoX19zKSwgX01fZmFpbGVkKCFfTV9zYnVmKSB7IH0KCiAgICAg IG9zdHJlYW1idWZfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yPShfQ2hhclQgX19jKTsKCiAgICAg IG9zdHJlYW1idWZfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yKigpIHRocm93KCkKICAgICAgeyBy ZXR1cm4gKnRoaXM7IH0KCiAgICAgIG9zdHJlYW1idWZfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9y KysoaW50KSB0aHJvdygpCiAgICAgIHsgcmV0dXJuICp0aGlzOyB9CgogICAgICBvc3RyZWFtYnVm X2l0ZXJhdG9yJgogICAgICBvcGVyYXRvcisrKCkgdGhyb3coKQogICAgICB7IHJldHVybiAqdGhp czsgfQoKICAgICAgYm9vbAogICAgICBmYWlsZWQoKSBjb25zdCB0aHJvdygpCiAgICAgIHsgcmV0 dXJuIF9NX2ZhaWxlZDsgfQogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl bmFtZSBfVHJhaXRzPgogICAgaW5saW5lIG9zdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJULCBfVHJh aXRzPiYKICAgIG9zdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJULCBfVHJhaXRzPjo6b3BlcmF0b3I9 KF9DaGFyVCBfX2MpCiAgICB7CiAgICAgIGlmICghX01fZmFpbGVkICYmCiAgICAgICAgICBfVHJh aXRzOjplcV9pbnRfdHlwZShfTV9zYnVmLT5zcHV0YyhfX2MpLCBfVHJhaXRzOjplb2YoKSkpCiAg ICAgICAgX01fZmFpbGVkID0gdHJ1ZTsKICAgICAgcmV0dXJuICp0aGlzOwogICAgfQp9CiMgNDEg Ii91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvYmFzaWNfaW9zLmgiIDIgMwojIDEgIi91c3IvaW5j bHVkZS9jKysvMy4yL2JpdHMvbG9jYWxlX2ZhY2V0cy5oIiAxIDMKIyA0NCAiL3Vzci9pbmNsdWRl L2MrKy8zLjIvYml0cy9sb2NhbGVfZmFjZXRzLmgiIDMKCgojIDEgIi91c3IvaW5jbHVkZS9jKysv My4yL2N3Y3R5cGUiIDEgMwojIDQ4ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9jd2N0eXBlIiAzCgoK CgojIDEgIi91c3IvaW5jbHVkZS93Y3R5cGUuaCIgMSAzCiMgMzUgIi91c3IvaW5jbHVkZS93Y3R5 cGUuaCIgMwojIDEgIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8zLjIuMy9pbmNsdWRlL3N0 ZGRlZi5oIiAxIDMKIyAzNiAiL3Vzci9pbmNsdWRlL3djdHlwZS5oIiAyIDMKIyA0NSAiL3Vzci9p bmNsdWRlL3djdHlwZS5oIiAzCgoKCiMgNjQgIi91c3IvaW5jbHVkZS93Y3R5cGUuaCIgMwoKCgp0 eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50IHdjdHlwZV90OwoKIyA4NiAiL3Vzci9pbmNsdWRlL3dj dHlwZS5oIiAzCmVudW0KewogIF9fSVN3dXBwZXIgPSAwLAogIF9fSVN3bG93ZXIgPSAxLAogIF9f SVN3YWxwaGEgPSAyLAogIF9fSVN3ZGlnaXQgPSAzLAogIF9fSVN3eGRpZ2l0ID0gNCwKICBfX0lT d3NwYWNlID0gNSwKICBfX0lTd3ByaW50ID0gNiwKICBfX0lTd2dyYXBoID0gNywKICBfX0lTd2Js YW5rID0gOCwKICBfX0lTd2NudHJsID0gOSwKICBfX0lTd3B1bmN0ID0gMTAsCiAgX19JU3dhbG51 bSA9IDExLAoKICBfSVN3dXBwZXIgPSAoKF9fSVN3dXBwZXIpIDwgOCA/IChpbnQpICgoMVVMIDw8 IChfX0lTd3VwcGVyKSkgPDwgMjQpIDogKChfX0lTd3VwcGVyKSA8IDE2ID8gKGludCkgKCgxVUwg PDwgKF9fSVN3dXBwZXIpKSA8PCA4KSA6ICgoX19JU3d1cHBlcikgPCAyNCA/IChpbnQpICgoMVVM IDw8IChfX0lTd3VwcGVyKSkgPj4gOCkgOiAoaW50KSAoKDFVTCA8PCAoX19JU3d1cHBlcikpID4+ IDI0KSkpKSwKICBfSVN3bG93ZXIgPSAoKF9fSVN3bG93ZXIpIDwgOCA/IChpbnQpICgoMVVMIDw8 IChfX0lTd2xvd2VyKSkgPDwgMjQpIDogKChfX0lTd2xvd2VyKSA8IDE2ID8gKGludCkgKCgxVUwg PDwgKF9fSVN3bG93ZXIpKSA8PCA4KSA6ICgoX19JU3dsb3dlcikgPCAyNCA/IChpbnQpICgoMVVM IDw8IChfX0lTd2xvd2VyKSkgPj4gOCkgOiAoaW50KSAoKDFVTCA8PCAoX19JU3dsb3dlcikpID4+ IDI0KSkpKSwKICBfSVN3YWxwaGEgPSAoKF9fSVN3YWxwaGEpIDwgOCA/IChpbnQpICgoMVVMIDw8 IChfX0lTd2FscGhhKSkgPDwgMjQpIDogKChfX0lTd2FscGhhKSA8IDE2ID8gKGludCkgKCgxVUwg PDwgKF9fSVN3YWxwaGEpKSA8PCA4KSA6ICgoX19JU3dhbHBoYSkgPCAyNCA/IChpbnQpICgoMVVM IDw8IChfX0lTd2FscGhhKSkgPj4gOCkgOiAoaW50KSAoKDFVTCA8PCAoX19JU3dhbHBoYSkpID4+ IDI0KSkpKSwKICBfSVN3ZGlnaXQgPSAoKF9fSVN3ZGlnaXQpIDwgOCA/IChpbnQpICgoMVVMIDw8 IChfX0lTd2RpZ2l0KSkgPDwgMjQpIDogKChfX0lTd2RpZ2l0KSA8IDE2ID8gKGludCkgKCgxVUwg PDwgKF9fSVN3ZGlnaXQpKSA8PCA4KSA6ICgoX19JU3dkaWdpdCkgPCAyNCA/IChpbnQpICgoMVVM IDw8IChfX0lTd2RpZ2l0KSkgPj4gOCkgOiAoaW50KSAoKDFVTCA8PCAoX19JU3dkaWdpdCkpID4+ IDI0KSkpKSwKICBfSVN3eGRpZ2l0ID0gKChfX0lTd3hkaWdpdCkgPCA4ID8gKGludCkgKCgxVUwg PDwgKF9fSVN3eGRpZ2l0KSkgPDwgMjQpIDogKChfX0lTd3hkaWdpdCkgPCAxNiA/IChpbnQpICgo MVVMIDw8IChfX0lTd3hkaWdpdCkpIDw8IDgpIDogKChfX0lTd3hkaWdpdCkgPCAyNCA/IChpbnQp ICgoMVVMIDw8IChfX0lTd3hkaWdpdCkpID4+IDgpIDogKGludCkgKCgxVUwgPDwgKF9fSVN3eGRp Z2l0KSkgPj4gMjQpKSkpLAogIF9JU3dzcGFjZSA9ICgoX19JU3dzcGFjZSkgPCA4ID8gKGludCkg KCgxVUwgPDwgKF9fSVN3c3BhY2UpKSA8PCAyNCkgOiAoKF9fSVN3c3BhY2UpIDwgMTYgPyAoaW50 KSAoKDFVTCA8PCAoX19JU3dzcGFjZSkpIDw8IDgpIDogKChfX0lTd3NwYWNlKSA8IDI0ID8gKGlu dCkgKCgxVUwgPDwgKF9fSVN3c3BhY2UpKSA+PiA4KSA6IChpbnQpICgoMVVMIDw8IChfX0lTd3Nw YWNlKSkgPj4gMjQpKSkpLAogIF9JU3dwcmludCA9ICgoX19JU3dwcmludCkgPCA4ID8gKGludCkg KCgxVUwgPDwgKF9fSVN3cHJpbnQpKSA8PCAyNCkgOiAoKF9fSVN3cHJpbnQpIDwgMTYgPyAoaW50 KSAoKDFVTCA8PCAoX19JU3dwcmludCkpIDw8IDgpIDogKChfX0lTd3ByaW50KSA8IDI0ID8gKGlu dCkgKCgxVUwgPDwgKF9fSVN3cHJpbnQpKSA+PiA4KSA6IChpbnQpICgoMVVMIDw8IChfX0lTd3By aW50KSkgPj4gMjQpKSkpLAogIF9JU3dncmFwaCA9ICgoX19JU3dncmFwaCkgPCA4ID8gKGludCkg KCgxVUwgPDwgKF9fSVN3Z3JhcGgpKSA8PCAyNCkgOiAoKF9fSVN3Z3JhcGgpIDwgMTYgPyAoaW50 KSAoKDFVTCA8PCAoX19JU3dncmFwaCkpIDw8IDgpIDogKChfX0lTd2dyYXBoKSA8IDI0ID8gKGlu dCkgKCgxVUwgPDwgKF9fSVN3Z3JhcGgpKSA+PiA4KSA6IChpbnQpICgoMVVMIDw8IChfX0lTd2dy YXBoKSkgPj4gMjQpKSkpLAogIF9JU3dibGFuayA9ICgoX19JU3dibGFuaykgPCA4ID8gKGludCkg KCgxVUwgPDwgKF9fSVN3YmxhbmspKSA8PCAyNCkgOiAoKF9fSVN3YmxhbmspIDwgMTYgPyAoaW50 KSAoKDFVTCA8PCAoX19JU3dibGFuaykpIDw8IDgpIDogKChfX0lTd2JsYW5rKSA8IDI0ID8gKGlu dCkgKCgxVUwgPDwgKF9fSVN3YmxhbmspKSA+PiA4KSA6IChpbnQpICgoMVVMIDw8IChfX0lTd2Js YW5rKSkgPj4gMjQpKSkpLAogIF9JU3djbnRybCA9ICgoX19JU3djbnRybCkgPCA4ID8gKGludCkg KCgxVUwgPDwgKF9fSVN3Y250cmwpKSA8PCAyNCkgOiAoKF9fSVN3Y250cmwpIDwgMTYgPyAoaW50 KSAoKDFVTCA8PCAoX19JU3djbnRybCkpIDw8IDgpIDogKChfX0lTd2NudHJsKSA8IDI0ID8gKGlu dCkgKCgxVUwgPDwgKF9fSVN3Y250cmwpKSA+PiA4KSA6IChpbnQpICgoMVVMIDw8IChfX0lTd2Nu dHJsKSkgPj4gMjQpKSkpLAogIF9JU3dwdW5jdCA9ICgoX19JU3dwdW5jdCkgPCA4ID8gKGludCkg KCgxVUwgPDwgKF9fSVN3cHVuY3QpKSA8PCAyNCkgOiAoKF9fSVN3cHVuY3QpIDwgMTYgPyAoaW50 KSAoKDFVTCA8PCAoX19JU3dwdW5jdCkpIDw8IDgpIDogKChfX0lTd3B1bmN0KSA8IDI0ID8gKGlu dCkgKCgxVUwgPDwgKF9fSVN3cHVuY3QpKSA+PiA4KSA6IChpbnQpICgoMVVMIDw8IChfX0lTd3B1 bmN0KSkgPj4gMjQpKSkpLAogIF9JU3dhbG51bSA9ICgoX19JU3dhbG51bSkgPCA4ID8gKGludCkg KCgxVUwgPDwgKF9fSVN3YWxudW0pKSA8PCAyNCkgOiAoKF9fSVN3YWxudW0pIDwgMTYgPyAoaW50 KSAoKDFVTCA8PCAoX19JU3dhbG51bSkpIDw8IDgpIDogKChfX0lTd2FsbnVtKSA8IDI0ID8gKGlu dCkgKCgxVUwgPDwgKF9fSVN3YWxudW0pKSA+PiA4KSA6IChpbnQpICgoMVVMIDw8IChfX0lTd2Fs bnVtKSkgPj4gMjQpKSkpCn07CgoKCmV4dGVybiAiQyIgewoKCgoKCgoKCmV4dGVybiBpbnQgaXN3 YWxudW0gKHdpbnRfdCBfX3djKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IGlzd2FscGhhICh3 aW50X3QgX193YykgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBpc3djbnRybCAod2ludF90IF9fd2Mp IHRocm93ICgpOwoKCgpleHRlcm4gaW50IGlzd2RpZ2l0ICh3aW50X3QgX193YykgdGhyb3cgKCk7 CgoKCmV4dGVybiBpbnQgaXN3Z3JhcGggKHdpbnRfdCBfX3djKSB0aHJvdyAoKTsKCgoKCmV4dGVy biBpbnQgaXN3bG93ZXIgKHdpbnRfdCBfX3djKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IGlzd3By aW50ICh3aW50X3QgX193YykgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGlzd3B1bmN0ICh3aW50 X3QgX193YykgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGlzd3NwYWNlICh3aW50X3QgX193Yykg dGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGlzd3VwcGVyICh3aW50X3QgX193YykgdGhyb3cgKCk7 CgoKCgpleHRlcm4gaW50IGlzd3hkaWdpdCAod2ludF90IF9fd2MpIHRocm93ICgpOwoKCgoKCmV4 dGVybiBpbnQgaXN3YmxhbmsgKHdpbnRfdCBfX3djKSB0aHJvdyAoKTsKIyAxODYgIi91c3IvaW5j bHVkZS93Y3R5cGUuaCIgMwpleHRlcm4gd2N0eXBlX3Qgd2N0eXBlIChfX2NvbnN0IGNoYXIgKl9f cHJvcGVydHkpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IGlzd2N0eXBlICh3aW50X3QgX193Yywg d2N0eXBlX3QgX19kZXNjKSB0aHJvdyAoKTsKCgoKCgoKCgoKCnR5cGVkZWYgX19jb25zdCBfX2lu dDMyX3QgKndjdHJhbnNfdDsKCgoKCgoKCmV4dGVybiB3aW50X3QgdG93bG93ZXIgKHdpbnRfdCBf X3djKSB0aHJvdyAoKTsKCgpleHRlcm4gd2ludF90IHRvd3VwcGVyICh3aW50X3QgX193YykgdGhy b3cgKCk7CgoKfQojIDIyOCAiL3Vzci9pbmNsdWRlL3djdHlwZS5oIiAzCmV4dGVybiAiQyIgewoK CgoKZXh0ZXJuIHdjdHJhbnNfdCB3Y3RyYW5zIChfX2NvbnN0IGNoYXIgKl9fcHJvcGVydHkpIHRo cm93ICgpOwoKCmV4dGVybiB3aW50X3QgdG93Y3RyYW5zICh3aW50X3QgX193Yywgd2N0cmFuc190 IF9fZGVzYykgdGhyb3cgKCk7CgoKCgoKCgoKZXh0ZXJuIGludCBpc3dhbG51bV9sICh3aW50X3Qg X193YywgX19sb2NhbGVfdCBfX2xvY2FsZSkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBpc3dh bHBoYV9sICh3aW50X3QgX193YywgX19sb2NhbGVfdCBfX2xvY2FsZSkgdGhyb3cgKCk7CgoKZXh0 ZXJuIGludCBpc3djbnRybF9sICh3aW50X3QgX193YywgX19sb2NhbGVfdCBfX2xvY2FsZSkgdGhy b3cgKCk7CgoKCmV4dGVybiBpbnQgaXN3ZGlnaXRfbCAod2ludF90IF9fd2MsIF9fbG9jYWxlX3Qg X19sb2NhbGUpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IGlzd2dyYXBoX2wgKHdpbnRfdCBfX3dj LCBfX2xvY2FsZV90IF9fbG9jYWxlKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgaXN3bG93ZXJf bCAod2ludF90IF9fd2MsIF9fbG9jYWxlX3QgX19sb2NhbGUpIHRocm93ICgpOwoKCmV4dGVybiBp bnQgaXN3cHJpbnRfbCAod2ludF90IF9fd2MsIF9fbG9jYWxlX3QgX19sb2NhbGUpIHRocm93ICgp OwoKCgoKZXh0ZXJuIGludCBpc3dwdW5jdF9sICh3aW50X3QgX193YywgX19sb2NhbGVfdCBfX2xv Y2FsZSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGlzd3NwYWNlX2wgKHdpbnRfdCBfX3djLCBf X2xvY2FsZV90IF9fbG9jYWxlKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgaXN3dXBwZXJfbCAo d2ludF90IF9fd2MsIF9fbG9jYWxlX3QgX19sb2NhbGUpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGlu dCBpc3d4ZGlnaXRfbCAod2ludF90IF9fd2MsIF9fbG9jYWxlX3QgX19sb2NhbGUpIHRocm93ICgp OwoKCgoKZXh0ZXJuIGludCBpc3dibGFua19sICh3aW50X3QgX193YywgX19sb2NhbGVfdCBfX2xv Y2FsZSkgdGhyb3cgKCk7CgoKCmV4dGVybiB3Y3R5cGVfdCB3Y3R5cGVfbCAoX19jb25zdCBjaGFy ICpfX3Byb3BlcnR5LCBfX2xvY2FsZV90IF9fbG9jYWxlKQogICAgIHRocm93ICgpOwoKCgpleHRl cm4gaW50IGlzd2N0eXBlX2wgKHdpbnRfdCBfX3djLCB3Y3R5cGVfdCBfX2Rlc2MsIF9fbG9jYWxl X3QgX19sb2NhbGUpCiAgICAgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gd2ludF90IHRvd2xvd2Vy X2wgKHdpbnRfdCBfX3djLCBfX2xvY2FsZV90IF9fbG9jYWxlKSB0aHJvdyAoKTsKCgpleHRlcm4g d2ludF90IHRvd3VwcGVyX2wgKHdpbnRfdCBfX3djLCBfX2xvY2FsZV90IF9fbG9jYWxlKSB0aHJv dyAoKTsKCgoKZXh0ZXJuIHdjdHJhbnNfdCB3Y3RyYW5zX2wgKF9fY29uc3QgY2hhciAqX19wcm9w ZXJ0eSwgX19sb2NhbGVfdCBfX2xvY2FsZSkKICAgICB0aHJvdyAoKTsKCgpleHRlcm4gd2ludF90 IHRvd2N0cmFuc19sICh3aW50X3QgX193Yywgd2N0cmFuc190IF9fZGVzYywKICAgICAgICAgICAg ICAgICAgICAgICAgICAgX19sb2NhbGVfdCBfX2xvY2FsZSkgdGhyb3cgKCk7CgoKCn0KIyA1MyAi L3Vzci9pbmNsdWRlL2MrKy8zLjIvY3djdHlwZSIgMiAzCiMgNzcgIi91c3IvaW5jbHVkZS9jKysv My4yL2N3Y3R5cGUiIDMKbmFtZXNwYWNlIHN0ZAp7CiAgdXNpbmcgOjp3aW50X3Q7CgogIHVzaW5n IDo6d2N0eXBlX3Q7CiAgdXNpbmcgOjp3Y3RyYW5zX3Q7CgogIHVzaW5nIDo6aXN3YWxudW07CiAg dXNpbmcgOjppc3dhbHBoYTsKICB1c2luZyA6Omlzd2JsYW5rOwogIHVzaW5nIDo6aXN3Y250cmw7 CiAgdXNpbmcgOjppc3dkaWdpdDsKICB1c2luZyA6Omlzd2dyYXBoOwogIHVzaW5nIDo6aXN3bG93 ZXI7CiAgdXNpbmcgOjppc3dwcmludDsKICB1c2luZyA6Omlzd3ByaW50OwogIHVzaW5nIDo6aXN3 cHVuY3Q7CiAgdXNpbmcgOjppc3dzcGFjZTsKICB1c2luZyA6Omlzd3VwcGVyOwogIHVzaW5nIDo6 aXN3eGRpZ2l0OwogIHVzaW5nIDo6aXN3Y3R5cGU7CiAgdXNpbmcgOjp0b3dsb3dlcjsKICB1c2lu ZyA6OnRvd3VwcGVyOwogIHVzaW5nIDo6dG93Y3RyYW5zOwogIHVzaW5nIDo6d2N0cmFuczsKICB1 c2luZyA6OndjdHlwZTsKfQojIDQ3ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL2xvY2FsZV9m YWNldHMuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvaW9zIiAxIDMKIyA0OCAiL3Vz ci9pbmNsdWRlL2MrKy8zLjIvYml0cy9sb2NhbGVfZmFjZXRzLmgiIDIgMwoKbmFtZXNwYWNlIHN0 ZAp7CgoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4K ICAgIHN0cnVjdCBfX3BhZDsKCgoKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9pMzg2LWxpbnV4 L2JpdHMvY3R5cGVfYmFzZS5oIiAxIDMKIyAzNiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvaTM4Ni1s aW51eC9iaXRzL2N0eXBlX2Jhc2UuaCIgMwogIHN0cnVjdCBjdHlwZV9iYXNlCiAgewoKICAgIHR5 cGVkZWYgY29uc3QgaW50KiBfX3RvX3R5cGU7CgoKCiAgICB0eXBlZGVmIHVuc2lnbmVkIHNob3J0 IG1hc2s7CiAgICBzdGF0aWMgY29uc3QgbWFzayB1cHBlciA9IF9JU3VwcGVyOwogICAgc3RhdGlj IGNvbnN0IG1hc2sgbG93ZXIgPSBfSVNsb3dlcjsKICAgIHN0YXRpYyBjb25zdCBtYXNrIGFscGhh ID0gX0lTYWxwaGE7CiAgICBzdGF0aWMgY29uc3QgbWFzayBkaWdpdCA9IF9JU2RpZ2l0OwogICAg c3RhdGljIGNvbnN0IG1hc2sgeGRpZ2l0ID0gX0lTeGRpZ2l0OwogICAgc3RhdGljIGNvbnN0IG1h c2sgc3BhY2UgPSBfSVNzcGFjZTsKICAgIHN0YXRpYyBjb25zdCBtYXNrIHByaW50ID0gX0lTcHJp bnQ7CiAgICBzdGF0aWMgY29uc3QgbWFzayBncmFwaCA9IF9JU2dyYXBoOwogICAgc3RhdGljIGNv bnN0IG1hc2sgY250cmwgPSBfSVNjbnRybDsKICAgIHN0YXRpYyBjb25zdCBtYXNrIHB1bmN0ID0g X0lTcHVuY3Q7CiAgICBzdGF0aWMgY29uc3QgbWFzayBhbG51bSA9IF9JU2FsbnVtOwogIH07CiMg NjQgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvbG9jYWxlX2ZhY2V0cy5oIiAyIDMKCgogIHRl bXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGNsYXNzIF9fY3R5cGVfYWJzdHJhY3RfYmFzZSA6 IHB1YmxpYyBsb2NhbGU6OmZhY2V0LCBwdWJsaWMgY3R5cGVfYmFzZQogICAgewogICAgcHVibGlj OgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwoKICAgICAgYm9vbAogICAgICBpcyht YXNrIF9fbSwgY2hhcl90eXBlIF9fYykgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9faXMo X19tLCBfX2MpOyB9CgogICAgICBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGlzKGNvbnN0IGNoYXJf dHlwZSAqX19sbywgY29uc3QgY2hhcl90eXBlICpfX2hpLCBtYXNrICpfX3ZlYykgY29uc3QKICAg ICAgeyByZXR1cm4gdGhpcy0+ZG9faXMoX19sbywgX19oaSwgX192ZWMpOyB9CgogICAgICBjb25z dCBjaGFyX3R5cGUqCiAgICAgIHNjYW5faXMobWFzayBfX20sIGNvbnN0IGNoYXJfdHlwZSogX19s bywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19z Y2FuX2lzKF9fbSwgX19sbywgX19oaSk7IH0KCiAgICAgIGNvbnN0IGNoYXJfdHlwZSoKICAgICAg c2Nhbl9ub3QobWFzayBfX20sIGNvbnN0IGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBl KiBfX2hpKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19zY2FuX25vdChfX20sIF9fbG8s IF9faGkpOyB9CgogICAgICBjaGFyX3R5cGUKICAgICAgdG91cHBlcihjaGFyX3R5cGUgX19jKSBj b25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb190b3VwcGVyKF9fYyk7IH0KCiAgICAgIGNvbnN0 IGNoYXJfdHlwZSoKICAgICAgdG91cHBlcihjaGFyX3R5cGUgKl9fbG8sIGNvbnN0IGNoYXJfdHlw ZSogX19oaSkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fdG91cHBlcihfX2xvLCBfX2hp KTsgfQoKICAgICAgY2hhcl90eXBlCiAgICAgIHRvbG93ZXIoY2hhcl90eXBlIF9fYykgY29uc3QK ICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fdG9sb3dlcihfX2MpOyB9CgogICAgICBjb25zdCBjaGFy X3R5cGUqCiAgICAgIHRvbG93ZXIoY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9f aGkpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3RvbG93ZXIoX19sbywgX19oaSk7IH0K CiAgICAgIGNoYXJfdHlwZQogICAgICB3aWRlbihjaGFyIF9fYykgY29uc3QKICAgICAgeyByZXR1 cm4gdGhpcy0+ZG9fd2lkZW4oX19jKTsgfQoKICAgICAgY29uc3QgY2hhcioKICAgICAgd2lkZW4o Y29uc3QgY2hhciogX19sbywgY29uc3QgY2hhciogX19oaSwgY2hhcl90eXBlKiBfX3RvKSBjb25z dAogICAgICB7IHJldHVybiB0aGlzLT5kb193aWRlbihfX2xvLCBfX2hpLCBfX3RvKTsgfQoKICAg ICAgY2hhcgogICAgICBuYXJyb3coY2hhcl90eXBlIF9fYywgY2hhciBfX2RmYXVsdCkgY29uc3QK ICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fbmFycm93KF9fYywgX19kZmF1bHQpOyB9CgogICAgICBj b25zdCBjaGFyX3R5cGUqCiAgICAgIG5hcnJvdyhjb25zdCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0 IGNoYXJfdHlwZSogX19oaSwKICAgICAgICAgICAgICBjaGFyIF9fZGZhdWx0LCBjaGFyICpfX3Rv KSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19uYXJyb3coX19sbywgX19oaSwgX19kZmF1 bHQsIF9fdG8pOyB9CgogICAgcHJvdGVjdGVkOgogICAgICBleHBsaWNpdAogICAgICBfX2N0eXBl X2Fic3RyYWN0X2Jhc2Uoc2l6ZV90IF9fcmVmcyA9IDApOiBsb2NhbGU6OmZhY2V0KF9fcmVmcykg eyB9CgogICAgICB2aXJ0dWFsCiAgICAgIH5fX2N0eXBlX2Fic3RyYWN0X2Jhc2UoKSB7IH0KCiAg ICAgIHZpcnR1YWwgYm9vbAogICAgICBkb19pcyhtYXNrIF9fbSwgY2hhcl90eXBlIF9fYykgY29u c3QgPSAwOwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRvX2lzKGNvbnN0 IGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpLAogICAgICAgICAgICBtYXNr KiBfX3ZlYykgY29uc3QgPSAwOwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCiAgICAg IGRvX3NjYW5faXMobWFzayBfX20sIGNvbnN0IGNoYXJfdHlwZSogX19sbywKICAgICAgICAgICAg ICAgICBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0ID0gMDsKCiAgICAgIHZpcnR1YWwgY29u c3QgY2hhcl90eXBlKgogICAgICBkb19zY2FuX25vdChtYXNrIF9fbSwgY29uc3QgY2hhcl90eXBl KiBfX2xvLAogICAgICAgICAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0ID0g MDsKCiAgICAgIHZpcnR1YWwgY2hhcl90eXBlCiAgICAgIGRvX3RvdXBwZXIoY2hhcl90eXBlKSBj b25zdCA9IDA7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZG9fdG91cHBl cihjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3QgPSAwOwoKICAg ICAgdmlydHVhbCBjaGFyX3R5cGUKICAgICAgZG9fdG9sb3dlcihjaGFyX3R5cGUpIGNvbnN0ID0g MDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb190b2xvd2VyKGNoYXJf dHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdCA9IDA7CgogICAgICB2aXJ0 dWFsIGNoYXJfdHlwZQogICAgICBkb193aWRlbihjaGFyKSBjb25zdCA9IDA7CgogICAgICB2aXJ0 dWFsIGNvbnN0IGNoYXIqCiAgICAgIGRvX3dpZGVuKGNvbnN0IGNoYXIqIF9fbG8sIGNvbnN0IGNo YXIqIF9faGksCiAgICAgICAgICAgICAgIGNoYXJfdHlwZSogX19kZXN0KSBjb25zdCA9IDA7Cgog ICAgICB2aXJ0dWFsIGNoYXIKICAgICAgZG9fbmFycm93KGNoYXJfdHlwZSwgY2hhciBfX2RmYXVs dCkgY29uc3QgPSAwOwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRvX25h cnJvdyhjb25zdCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSwKICAgICAg ICAgICAgICAgICBjaGFyIF9fZGZhdWx0LCBjaGFyKiBfX2Rlc3QpIGNvbnN0ID0gMDsKICAgIH07 CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBjbGFzcyBjdHlwZSA6IHB1YmxpYyBf X2N0eXBlX2Fic3RyYWN0X2Jhc2U8X0NoYXJUPgogICAgewogICAgcHVibGljOgoKICAgICAgdHlw ZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGN0eXBlOjptYXNr IG1hc2s7CgogICAgICBzdGF0aWMgbG9jYWxlOjppZCBpZDsKCiAgICAgIGV4cGxpY2l0CiAgICAg IGN0eXBlKHNpemVfdCBfX3JlZnMgPSAwKSA6IF9fY3R5cGVfYWJzdHJhY3RfYmFzZTxfQ2hhclQ+ KF9fcmVmcykgeyB9CgogICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfmN0eXBlKCk7 CgogICAgICB2aXJ0dWFsIGJvb2wKICAgICAgZG9faXMobWFzayBfX20sIGNoYXJfdHlwZSBfX2Mp IGNvbnN0OwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRvX2lzKGNvbnN0 IGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpLCBtYXNrKiBfX3ZlYykgY29u c3Q7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZG9fc2Nhbl9pcyhtYXNr IF9fbSwgY29uc3QgY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0 OwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRvX3NjYW5fbm90KG1hc2sg X19tLCBjb25zdCBjaGFyX3R5cGUqIF9fbG8sCiAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXJf dHlwZSogX19oaSkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNoYXJfdHlwZQogICAgICBkb190b3Vw cGVyKGNoYXJfdHlwZSBfX2MpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUq CiAgICAgIGRvX3RvdXBwZXIoY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGkp IGNvbnN0OwoKICAgICAgdmlydHVhbCBjaGFyX3R5cGUKICAgICAgZG9fdG9sb3dlcihjaGFyX3R5 cGUgX19jKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb190 b2xvd2VyKGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdDsKCiAg ICAgIHZpcnR1YWwgY2hhcl90eXBlCiAgICAgIGRvX3dpZGVuKGNoYXIgX19jKSBjb25zdDsKCiAg ICAgIHZpcnR1YWwgY29uc3QgY2hhcioKICAgICAgZG9fd2lkZW4oY29uc3QgY2hhciogX19sbywg Y29uc3QgY2hhciogX19oaSwgY2hhcl90eXBlKiBfX2Rlc3QpIGNvbnN0OwoKICAgICAgdmlydHVh bCBjaGFyCiAgICAgIGRvX25hcnJvdyhjaGFyX3R5cGUsIGNoYXIgX19kZmF1bHQpIGNvbnN0OwoK ICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRvX25hcnJvdyhjb25zdCBjaGFy X3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSwKICAgICAgICAgICAgICAgIGNoYXIg X19kZmF1bHQsIGNoYXIqIF9fZGVzdCkgY29uc3Q7CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQ2hhclQ+CiAgICBsb2NhbGU6OmlkIGN0eXBlPF9DaGFyVD46OmlkOwoKCiAgdGVtcGxhdGU8 PgogICAgY2xhc3MgY3R5cGU8Y2hhcj4gOiBwdWJsaWMgX19jdHlwZV9hYnN0cmFjdF9iYXNlPGNo YXI+CiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIGNoYXIgY2hhcl90eXBlOwoKICAg IHByb3RlY3RlZDoKCiAgICAgIF9fY19sb2NhbGUgX01fY19sb2NhbGVfY3R5cGU7CiAgICAgIGJv b2wgX01fZGVsOwogICAgICBfX3RvX3R5cGUgX01fdG91cHBlcjsKICAgICAgX190b190eXBlIF9N X3RvbG93ZXI7CiAgICAgIGNvbnN0IG1hc2sqIF9NX3RhYmxlOwoKICAgIHB1YmxpYzoKICAgICAg c3RhdGljIGxvY2FsZTo6aWQgaWQ7CiAgICAgIHN0YXRpYyBjb25zdCBzaXplX3QgdGFibGVfc2l6 ZSA9IDEgKyBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPigtMSk7CgogICAgICBleHBsaWNpdAog ICAgICBjdHlwZShjb25zdCBtYXNrKiBfX3RhYmxlID0gMCwgYm9vbCBfX2RlbCA9IGZhbHNlLCBz aXplX3QgX19yZWZzID0gMCk7CgogICAgICBleHBsaWNpdAogICAgICBjdHlwZShfX2NfbG9jYWxl IF9fY2xvYywgY29uc3QgbWFzayogX190YWJsZSA9IDAsIGJvb2wgX19kZWwgPSBmYWxzZSwKICAg ICAgICAgICAgc2l6ZV90IF9fcmVmcyA9IDApOwoKICAgICAgaW5saW5lIGJvb2wKICAgICAgaXMo bWFzayBfX20sIGNoYXIgX19jKSBjb25zdDsKCiAgICAgIGlubGluZSBjb25zdCBjaGFyKgogICAg ICBpcyhjb25zdCBjaGFyKiBfX2xvLCBjb25zdCBjaGFyKiBfX2hpLCBtYXNrKiBfX3ZlYykgY29u c3Q7CgogICAgICBpbmxpbmUgY29uc3QgY2hhcioKICAgICAgc2Nhbl9pcyhtYXNrIF9fbSwgY29u c3QgY2hhciogX19sbywgY29uc3QgY2hhciogX19oaSkgY29uc3Q7CgogICAgICBpbmxpbmUgY29u c3QgY2hhcioKICAgICAgc2Nhbl9ub3QobWFzayBfX20sIGNvbnN0IGNoYXIqIF9fbG8sIGNvbnN0 IGNoYXIqIF9faGkpIGNvbnN0OwoKICAgIHByb3RlY3RlZDoKICAgICAgY29uc3QgbWFzayoKICAg ICAgdGFibGUoKSBjb25zdCB0aHJvdygpCiAgICAgIHsgcmV0dXJuIF9NX3RhYmxlOyB9CgogICAg ICBzdGF0aWMgY29uc3QgbWFzayoKICAgICAgY2xhc3NpY190YWJsZSgpIHRocm93KCk7CgogICAg ICB2aXJ0dWFsCiAgICAgIH5jdHlwZSgpOwoKICAgICAgdmlydHVhbCBib29sCiAgICAgIGRvX2lz KG1hc2sgX19tLCBjaGFyX3R5cGUgX19jKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hh cl90eXBlKgogICAgICBkb19pcyhjb25zdCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlw ZSogX19oaSwgbWFzayogX192ZWMpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5 cGUqCiAgICAgIGRvX3NjYW5faXMobWFzayBfX20sIGNvbnN0IGNoYXJfdHlwZSogX19sbywgY29u c3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBl KgogICAgICBkb19zY2FuX25vdChtYXNrIF9fbSwgY29uc3QgY2hhcl90eXBlKiBfX2xvLAogICAg ICAgICAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0OwoKICAgICAgdmlydHVh bCBjaGFyX3R5cGUKICAgICAgZG9fdG91cHBlcihjaGFyX3R5cGUpIGNvbnN0OwoKICAgICAgdmly dHVhbCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRvX3RvdXBwZXIoY2hhcl90eXBlKiBfX2xvLCBj b25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjaGFyX3R5cGUKICAg ICAgZG9fdG9sb3dlcihjaGFyX3R5cGUpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFy X3R5cGUqCiAgICAgIGRvX3RvbG93ZXIoY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUq IF9faGkpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjaGFyX3R5cGUKICAgICAgZG9fd2lkZW4oY2hh cikgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqCiAgICAgIGRvX3dpZGVuKGNvbnN0 IGNoYXIqIF9fbG8sIGNvbnN0IGNoYXIqIF9faGksIGNoYXJfdHlwZSogX19kZXN0KSBjb25zdDsK CiAgICAgIHZpcnR1YWwgY2hhcgogICAgICBkb19uYXJyb3coY2hhcl90eXBlLCBjaGFyIF9fZGZh dWx0KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb19uYXJy b3coY29uc3QgY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGksCiAgICAgICAg ICAgICAgICBjaGFyIF9fZGZhdWx0LCBjaGFyKiBfX2Rlc3QpIGNvbnN0OwogICAgfTsKCiAgdGVt cGxhdGU8PgogICAgY29uc3QgY3R5cGU8Y2hhcj4mCiAgICB1c2VfZmFjZXQ8Y3R5cGU8Y2hhcj4g Pihjb25zdCBsb2NhbGUmIF9fbG9jKTsKCgoKICB0ZW1wbGF0ZTw+CiAgICBjbGFzcyBjdHlwZTx3 Y2hhcl90PiA6IHB1YmxpYyBfX2N0eXBlX2Fic3RyYWN0X2Jhc2U8d2NoYXJfdD4KICAgIHsKICAg IHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgd2NoYXJfdCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYg d2N0eXBlX3QgX193bWFza190eXBlOwoKICAgIHByb3RlY3RlZDoKICAgICAgX19jX2xvY2FsZSBf TV9jX2xvY2FsZV9jdHlwZTsKCiAgICBwdWJsaWM6CgogICAgICBzdGF0aWMgbG9jYWxlOjppZCBp ZDsKCiAgICAgIGV4cGxpY2l0CiAgICAgIGN0eXBlKHNpemVfdCBfX3JlZnMgPSAwKTsKCiAgICAg IGV4cGxpY2l0CiAgICAgIGN0eXBlKF9fY19sb2NhbGUgX19jbG9jLCBzaXplX3QgX19yZWZzID0g MCk7CgogICAgcHJvdGVjdGVkOgogICAgICBfX3dtYXNrX3R5cGUKICAgICAgX01fY29udmVydF90 b193bWFzayhjb25zdCBtYXNrIF9fbSkgY29uc3Q7CgogICAgICB2aXJ0dWFsCiAgICAgIH5jdHlw ZSgpOwoKICAgICAgdmlydHVhbCBib29sCiAgICAgIGRvX2lzKG1hc2sgX19tLCBjaGFyX3R5cGUg X19jKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb19pcyhj b25zdCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSwgbWFzayogX192ZWMp IGNvbnN0OwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRvX3NjYW5faXMo bWFzayBfX20sIGNvbnN0IGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBj b25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb19zY2FuX25vdCht YXNrIF9fbSwgY29uc3QgY2hhcl90eXBlKiBfX2xvLAogICAgICAgICAgICAgICAgICBjb25zdCBj aGFyX3R5cGUqIF9faGkpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjaGFyX3R5cGUKICAgICAgZG9f dG91cHBlcihjaGFyX3R5cGUpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUq CiAgICAgIGRvX3RvdXBwZXIoY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGkp IGNvbnN0OwoKICAgICAgdmlydHVhbCBjaGFyX3R5cGUKICAgICAgZG9fdG9sb3dlcihjaGFyX3R5 cGUpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRvX3RvbG93 ZXIoY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0OwoKICAgICAg dmlydHVhbCBjaGFyX3R5cGUKICAgICAgZG9fd2lkZW4oY2hhcikgY29uc3Q7CgogICAgICB2aXJ0 dWFsIGNvbnN0IGNoYXIqCiAgICAgIGRvX3dpZGVuKGNvbnN0IGNoYXIqIF9fbG8sIGNvbnN0IGNo YXIqIF9faGksIGNoYXJfdHlwZSogX19kZXN0KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY2hhcgog ICAgICBkb19uYXJyb3coY2hhcl90eXBlLCBjaGFyIF9fZGZhdWx0KSBjb25zdDsKCiAgICAgIHZp cnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb19uYXJyb3coY29uc3QgY2hhcl90eXBlKiBf X2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGksCiAgICAgICAgICAgICAgICBjaGFyIF9fZGZhdWx0 LCBjaGFyKiBfX2Rlc3QpIGNvbnN0OwoKICAgIH07CgogIHRlbXBsYXRlPD4KICAgIGNvbnN0IGN0 eXBlPHdjaGFyX3Q+JgogICAgdXNlX2ZhY2V0PGN0eXBlPHdjaGFyX3Q+ID4oY29uc3QgbG9jYWxl JiBfX2xvYyk7CgoKCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvaTM4Ni1saW51eC9iaXRzL2N0 eXBlX2lubGluZS5oIiAxIDMKIyAzNyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvaTM4Ni1saW51eC9i aXRzL2N0eXBlX2lubGluZS5oIiAzCiAgYm9vbAogIGN0eXBlPGNoYXI+OjoKICBpcyhtYXNrIF9f bSwgY2hhciBfX2MpIGNvbnN0CiAgeyByZXR1cm4gX01fdGFibGVbc3RhdGljX2Nhc3Q8dW5zaWdu ZWQgY2hhcj4oX19jKV0gJiBfX207IH0KCiAgY29uc3QgY2hhcioKICBjdHlwZTxjaGFyPjo6CiAg aXMoY29uc3QgY2hhciogX19sb3csIGNvbnN0IGNoYXIqIF9faGlnaCwgbWFzayogX192ZWMpIGNv bnN0CiAgewogICAgd2hpbGUgKF9fbG93IDwgX19oaWdoKQogICAgICAqX192ZWMrKyA9IF9NX3Rh YmxlW3N0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KCpfX2xvdysrKV07CiAgICByZXR1cm4gX19o aWdoOwogIH0KCiAgY29uc3QgY2hhcioKICBjdHlwZTxjaGFyPjo6CiAgc2Nhbl9pcyhtYXNrIF9f bSwgY29uc3QgY2hhciogX19sb3csIGNvbnN0IGNoYXIqIF9faGlnaCkgY29uc3QKICB7CiAgICB3 aGlsZSAoX19sb3cgPCBfX2hpZ2gKICAgICAgICAgICAmJiAhKF9NX3RhYmxlW3N0YXRpY19jYXN0 PHVuc2lnbmVkIGNoYXI+KCpfX2xvdyldICYgX19tKSkKICAgICAgKytfX2xvdzsKICAgIHJldHVy biBfX2xvdzsKICB9CgogIGNvbnN0IGNoYXIqCiAgY3R5cGU8Y2hhcj46OgogIHNjYW5fbm90KG1h c2sgX19tLCBjb25zdCBjaGFyKiBfX2xvdywgY29uc3QgY2hhciogX19oaWdoKSBjb25zdAogIHsK ICAgIHdoaWxlIChfX2xvdyA8IF9faGlnaAogICAgICAgICAgICYmIChfTV90YWJsZVtzdGF0aWNf Y2FzdDx1bnNpZ25lZCBjaGFyPigqX19sb3cpXSAmIF9fbSkgIT0gMCkKICAgICAgKytfX2xvdzsK ICAgIHJldHVybiBfX2xvdzsKICB9CiMgNDAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL2xv Y2FsZV9mYWNldHMuaCIgMiAzCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBjbGFz cyBjdHlwZV9ieW5hbWUgOiBwdWJsaWMgY3R5cGU8X0NoYXJUPgogICAgewogICAgcHVibGljOgog ICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CgogICAgICBleHBsaWNpdAogICAgICBjdHlw ZV9ieW5hbWUoY29uc3QgY2hhciogX19zLCBzaXplX3QgX19yZWZzID0gMCk7CgogICAgcHJvdGVj dGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH5jdHlwZV9ieW5hbWUoKSB7IH07CiAgICB9OwoKCiAg dGVtcGxhdGU8PgogICAgY3R5cGVfYnluYW1lPGNoYXI+OjpjdHlwZV9ieW5hbWUoY29uc3QgY2hh ciosIHNpemVfdCByZWZzKTsKCiAgdGVtcGxhdGU8PgogICAgY3R5cGVfYnluYW1lPHdjaGFyX3Q+ OjpjdHlwZV9ieW5hbWUoY29uc3QgY2hhciosIHNpemVfdCByZWZzKTsKCgojIDEgIi91c3IvaW5j bHVkZS9jKysvMy4yL2JpdHMvY29kZWN2dC5oIiAxIDMKIyA0NSAiL3Vzci9pbmNsdWRlL2MrKy8z LjIvYml0cy9jb2RlY3Z0LmgiIDMKCgogIGNsYXNzIGNvZGVjdnRfYmFzZQogIHsKICBwdWJsaWM6 CiAgICBlbnVtIHJlc3VsdAogICAgewogICAgICBvaywKICAgICAgcGFydGlhbCwKICAgICAgZXJy b3IsCiAgICAgIG5vY29udgogICAgfTsKICB9OwoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lu dGVyblQsIHR5cGVuYW1lIF9FeHRlcm5ULCB0eXBlbmFtZSBfU3RhdGVUPgogICAgY2xhc3MgX19j b2RlY3Z0X2Fic3RyYWN0X2Jhc2UKICAgIDogcHVibGljIGxvY2FsZTo6ZmFjZXQsIHB1YmxpYyBj b2RlY3Z0X2Jhc2UKICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgY29kZWN2dF9iYXNl OjpyZXN1bHQgcmVzdWx0OwogICAgICB0eXBlZGVmIF9JbnRlcm5UIGludGVybl90eXBlOwogICAg ICB0eXBlZGVmIF9FeHRlcm5UIGV4dGVybl90eXBlOwogICAgICB0eXBlZGVmIF9TdGF0ZVQgc3Rh dGVfdHlwZTsKCgogICAgICByZXN1bHQKICAgICAgb3V0KHN0YXRlX3R5cGUmIF9fc3RhdGUsIGNv bnN0IGludGVybl90eXBlKiBfX2Zyb20sCiAgICAgICAgICBjb25zdCBpbnRlcm5fdHlwZSogX19m cm9tX2VuZCwgY29uc3QgaW50ZXJuX3R5cGUqJiBfX2Zyb21fbmV4dCwKICAgICAgICAgIGV4dGVy bl90eXBlKiBfX3RvLCBleHRlcm5fdHlwZSogX190b19lbmQsCiAgICAgICAgICBleHRlcm5fdHlw ZSomIF9fdG9fbmV4dCkgY29uc3QKICAgICAgewogICAgICAgIHJldHVybiB0aGlzLT5kb19vdXQo X19zdGF0ZSwgX19mcm9tLCBfX2Zyb21fZW5kLCBfX2Zyb21fbmV4dCwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgIF9fdG8sIF9fdG9fZW5kLCBfX3RvX25leHQpOwogICAgICB9CgogICAgICBy ZXN1bHQKICAgICAgdW5zaGlmdChzdGF0ZV90eXBlJiBfX3N0YXRlLCBleHRlcm5fdHlwZSogX190 bywgZXh0ZXJuX3R5cGUqIF9fdG9fZW5kLAogICAgICAgICAgICAgIGV4dGVybl90eXBlKiYgX190 b19uZXh0KSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb191bnNoaWZ0KF9fc3RhdGUsIF9f dG8sX190b19lbmQsX190b19uZXh0KTsgfQoKICAgICAgcmVzdWx0CiAgICAgIGluKHN0YXRlX3R5 cGUmIF9fc3RhdGUsIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb20sCiAgICAgICAgIGNvbnN0IGV4 dGVybl90eXBlKiBfX2Zyb21fZW5kLCBjb25zdCBleHRlcm5fdHlwZSomIF9fZnJvbV9uZXh0LAog ICAgICAgICBpbnRlcm5fdHlwZSogX190bywgaW50ZXJuX3R5cGUqIF9fdG9fZW5kLAogICAgICAg ICBpbnRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3QKICAgICAgewogICAgICAgIHJldHVybiB0 aGlzLT5kb19pbihfX3N0YXRlLCBfX2Zyb20sIF9fZnJvbV9lbmQsIF9fZnJvbV9uZXh0LAogICAg ICAgICAgICAgICAgICAgICAgICAgICBfX3RvLCBfX3RvX2VuZCwgX190b19uZXh0KTsKICAgICAg fQoKICAgICAgaW50CiAgICAgIGVuY29kaW5nKCkgY29uc3QgdGhyb3coKQogICAgICB7IHJldHVy biB0aGlzLT5kb19lbmNvZGluZygpOyB9CgogICAgICBib29sCiAgICAgIGFsd2F5c19ub2NvbnYo KSBjb25zdCB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2Fsd2F5c19ub2NvbnYoKTsg fQoKICAgICAgaW50CiAgICAgIGxlbmd0aChjb25zdCBzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25z dCBleHRlcm5fdHlwZSogX19mcm9tLAogICAgICAgICAgICAgY29uc3QgZXh0ZXJuX3R5cGUqIF9f ZW5kLCBzaXplX3QgX19tYXgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2xlbmd0aChf X3N0YXRlLCBfX2Zyb20sIF9fZW5kLCBfX21heCk7IH0KCiAgICAgIGludAogICAgICBtYXhfbGVu Z3RoKCkgY29uc3QgdGhyb3coKQogICAgICB7IHJldHVybiB0aGlzLT5kb19tYXhfbGVuZ3RoKCk7 IH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIGV4cGxpY2l0CiAgICAgIF9fY29kZWN2dF9hYnN0cmFj dF9iYXNlKHNpemVfdCBfX3JlZnMgPSAwKSA6IGxvY2FsZTo6ZmFjZXQoX19yZWZzKSB7IH0KCiAg ICAgIHZpcnR1YWwKICAgICAgfl9fY29kZWN2dF9hYnN0cmFjdF9iYXNlKCkgeyB9CgogICAgICB2 aXJ0dWFsIHJlc3VsdAogICAgICBkb19vdXQoc3RhdGVfdHlwZSYgX19zdGF0ZSwgY29uc3QgaW50 ZXJuX3R5cGUqIF9fZnJvbSwKICAgICAgICAgICAgIGNvbnN0IGludGVybl90eXBlKiBfX2Zyb21f ZW5kLCBjb25zdCBpbnRlcm5fdHlwZSomIF9fZnJvbV9uZXh0LAogICAgICAgICAgICAgZXh0ZXJu X3R5cGUqIF9fdG8sIGV4dGVybl90eXBlKiBfX3RvX2VuZCwKICAgICAgICAgICAgIGV4dGVybl90 eXBlKiYgX190b19uZXh0KSBjb25zdCA9IDA7CgogICAgICB2aXJ0dWFsIHJlc3VsdAogICAgICBk b191bnNoaWZ0KHN0YXRlX3R5cGUmIF9fc3RhdGUsIGV4dGVybl90eXBlKiBfX3RvLAogICAgICAg ICAgICAgICAgIGV4dGVybl90eXBlKiBfX3RvX2VuZCwgZXh0ZXJuX3R5cGUqJiBfX3RvX25leHQp IGNvbnN0ID0gMDsKCiAgICAgIHZpcnR1YWwgcmVzdWx0CiAgICAgIGRvX2luKHN0YXRlX3R5cGUm IF9fc3RhdGUsIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb20sCiAgICAgICAgICAgIGNvbnN0IGV4 dGVybl90eXBlKiBfX2Zyb21fZW5kLCBjb25zdCBleHRlcm5fdHlwZSomIF9fZnJvbV9uZXh0LAog ICAgICAgICAgICBpbnRlcm5fdHlwZSogX190bywgaW50ZXJuX3R5cGUqIF9fdG9fZW5kLAogICAg ICAgICAgICBpbnRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3QgPSAwOwoKICAgICAgdmlydHVh bCBpbnQKICAgICAgZG9fZW5jb2RpbmcoKSBjb25zdCB0aHJvdygpID0gMDsKCiAgICAgIHZpcnR1 YWwgYm9vbAogICAgICBkb19hbHdheXNfbm9jb252KCkgY29uc3QgdGhyb3coKSA9IDA7CgogICAg ICB2aXJ0dWFsIGludAogICAgICBkb19sZW5ndGgoY29uc3Qgc3RhdGVfdHlwZSYsIGNvbnN0IGV4 dGVybl90eXBlKiBfX2Zyb20sCiAgICAgICAgICAgICAgICBjb25zdCBleHRlcm5fdHlwZSogX19l bmQsIHNpemVfdCBfX21heCkgY29uc3QgPSAwOwoKICAgICAgdmlydHVhbCBpbnQKICAgICAgZG9f bWF4X2xlbmd0aCgpIGNvbnN0IHRocm93KCkgPSAwOwogICAgfTsKCgoKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfSW50ZXJuVCwgdHlwZW5hbWUgX0V4dGVyblQsIHR5cGVuYW1lIF9TdGF0ZVQ+CiAgICBj bGFzcyBjb2RlY3Z0CiAgICA6IHB1YmxpYyBfX2NvZGVjdnRfYWJzdHJhY3RfYmFzZTxfSW50ZXJu VCwgX0V4dGVyblQsIF9TdGF0ZVQ+CiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIGNv ZGVjdnRfYmFzZTo6cmVzdWx0IHJlc3VsdDsKICAgICAgdHlwZWRlZiBfSW50ZXJuVCBpbnRlcm5f dHlwZTsKICAgICAgdHlwZWRlZiBfRXh0ZXJuVCBleHRlcm5fdHlwZTsKICAgICAgdHlwZWRlZiBf U3RhdGVUIHN0YXRlX3R5cGU7CgogICAgcHVibGljOgogICAgICBzdGF0aWMgbG9jYWxlOjppZCBp ZDsKCiAgICAgIGV4cGxpY2l0CiAgICAgIGNvZGVjdnQoc2l6ZV90IF9fcmVmcyA9IDApCiAgICAg IDogX19jb2RlY3Z0X2Fic3RyYWN0X2Jhc2U8X0ludGVyblQsIF9FeHRlcm5ULCBfU3RhdGVUPiAo X19yZWZzKSB7IH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfmNvZGVjdnQo KSB7IH0KCiAgICAgIHZpcnR1YWwgcmVzdWx0CiAgICAgIGRvX291dChzdGF0ZV90eXBlJiBfX3N0 YXRlLCBjb25zdCBpbnRlcm5fdHlwZSogX19mcm9tLAogICAgICAgICAgICAgY29uc3QgaW50ZXJu X3R5cGUqIF9fZnJvbV9lbmQsIGNvbnN0IGludGVybl90eXBlKiYgX19mcm9tX25leHQsCiAgICAg ICAgICAgICBleHRlcm5fdHlwZSogX190bywgZXh0ZXJuX3R5cGUqIF9fdG9fZW5kLAogICAgICAg ICAgICAgZXh0ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0OwoKICAgICAgdmlydHVhbCByZXN1 bHQKICAgICAgZG9fdW5zaGlmdChzdGF0ZV90eXBlJiBfX3N0YXRlLCBleHRlcm5fdHlwZSogX190 bywKICAgICAgICAgICAgICAgICBleHRlcm5fdHlwZSogX190b19lbmQsIGV4dGVybl90eXBlKiYg X190b19uZXh0KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgcmVzdWx0CiAgICAgIGRvX2luKHN0YXRl X3R5cGUmIF9fc3RhdGUsIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb20sCiAgICAgICAgICAgIGNv bnN0IGV4dGVybl90eXBlKiBfX2Zyb21fZW5kLCBjb25zdCBleHRlcm5fdHlwZSomIF9fZnJvbV9u ZXh0LAogICAgICAgICAgICBpbnRlcm5fdHlwZSogX190bywgaW50ZXJuX3R5cGUqIF9fdG9fZW5k LAogICAgICAgICAgICBpbnRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3Q7CgogICAgICB2aXJ0 dWFsIGludAogICAgICBkb19lbmNvZGluZygpIGNvbnN0IHRocm93KCk7CgogICAgICB2aXJ0dWFs IGJvb2wKICAgICAgZG9fYWx3YXlzX25vY29udigpIGNvbnN0IHRocm93KCk7CgogICAgICB2aXJ0 dWFsIGludAogICAgICBkb19sZW5ndGgoY29uc3Qgc3RhdGVfdHlwZSYsIGNvbnN0IGV4dGVybl90 eXBlKiBfX2Zyb20sCiAgICAgICAgICAgICAgICBjb25zdCBleHRlcm5fdHlwZSogX19lbmQsIHNp emVfdCBfX21heCkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGludAogICAgICBkb19tYXhfbGVuZ3Ro KCkgY29uc3QgdGhyb3coKTsKICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRlcm5ULCB0 eXBlbmFtZSBfRXh0ZXJuVCwgdHlwZW5hbWUgX1N0YXRlVD4KICAgIGxvY2FsZTo6aWQgY29kZWN2 dDxfSW50ZXJuVCwgX0V4dGVyblQsIF9TdGF0ZVQ+OjppZDsKCgogIHRlbXBsYXRlPD4KICAgIGNs YXNzIGNvZGVjdnQ8Y2hhciwgY2hhciwgbWJzdGF0ZV90PgogICAgOiBwdWJsaWMgX19jb2RlY3Z0 X2Fic3RyYWN0X2Jhc2U8Y2hhciwgY2hhciwgbWJzdGF0ZV90PgogICAgewogICAgcHVibGljOgoK ICAgICAgdHlwZWRlZiBjaGFyIGludGVybl90eXBlOwogICAgICB0eXBlZGVmIGNoYXIgZXh0ZXJu X3R5cGU7CiAgICAgIHR5cGVkZWYgbWJzdGF0ZV90IHN0YXRlX3R5cGU7CgogICAgcHVibGljOgog ICAgICBzdGF0aWMgbG9jYWxlOjppZCBpZDsKCiAgICAgIGV4cGxpY2l0CiAgICAgIGNvZGVjdnQo c2l6ZV90IF9fcmVmcyA9IDApOwoKICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbAogICAgICB+ Y29kZWN2dCgpOwoKICAgICAgdmlydHVhbCByZXN1bHQKICAgICAgZG9fb3V0KHN0YXRlX3R5cGUm IF9fc3RhdGUsIGNvbnN0IGludGVybl90eXBlKiBfX2Zyb20sCiAgICAgICAgICAgICBjb25zdCBp bnRlcm5fdHlwZSogX19mcm9tX2VuZCwgY29uc3QgaW50ZXJuX3R5cGUqJiBfX2Zyb21fbmV4dCwK ICAgICAgICAgICAgIGV4dGVybl90eXBlKiBfX3RvLCBleHRlcm5fdHlwZSogX190b19lbmQsCiAg ICAgICAgICAgICBleHRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3Q7CgogICAgICB2aXJ0dWFs IHJlc3VsdAogICAgICBkb191bnNoaWZ0KHN0YXRlX3R5cGUmIF9fc3RhdGUsIGV4dGVybl90eXBl KiBfX3RvLAogICAgICAgICAgICAgICAgIGV4dGVybl90eXBlKiBfX3RvX2VuZCwgZXh0ZXJuX3R5 cGUqJiBfX3RvX25leHQpIGNvbnN0OwoKICAgICAgdmlydHVhbCByZXN1bHQKICAgICAgZG9faW4o c3RhdGVfdHlwZSYgX19zdGF0ZSwgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbSwKICAgICAgICAg ICAgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbV9lbmQsIGNvbnN0IGV4dGVybl90eXBlKiYgX19m cm9tX25leHQsCiAgICAgICAgICAgIGludGVybl90eXBlKiBfX3RvLCBpbnRlcm5fdHlwZSogX190 b19lbmQsCiAgICAgICAgICAgIGludGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdDsKCiAgICAg IHZpcnR1YWwgaW50CiAgICAgIGRvX2VuY29kaW5nKCkgY29uc3QgdGhyb3coKTsKCiAgICAgIHZp cnR1YWwgYm9vbAogICAgICBkb19hbHdheXNfbm9jb252KCkgY29uc3QgdGhyb3coKTsKCiAgICAg IHZpcnR1YWwgaW50CiAgICAgIGRvX2xlbmd0aChjb25zdCBzdGF0ZV90eXBlJiwgY29uc3QgZXh0 ZXJuX3R5cGUqIF9fZnJvbSwKICAgICAgICAgICAgICAgIGNvbnN0IGV4dGVybl90eXBlKiBfX2Vu ZCwgc2l6ZV90IF9fbWF4KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgaW50CiAgICAgIGRvX21heF9s ZW5ndGgoKSBjb25zdCB0aHJvdygpOwogIH07CgoKCiAgdGVtcGxhdGU8PgogICAgY2xhc3MgY29k ZWN2dDx3Y2hhcl90LCBjaGFyLCBtYnN0YXRlX3Q+CiAgICA6IHB1YmxpYyBfX2NvZGVjdnRfYWJz dHJhY3RfYmFzZTx3Y2hhcl90LCBjaGFyLCBtYnN0YXRlX3Q+CiAgICB7CiAgICBwdWJsaWM6Cgog ICAgICB0eXBlZGVmIHdjaGFyX3QgaW50ZXJuX3R5cGU7CiAgICAgIHR5cGVkZWYgY2hhciBleHRl cm5fdHlwZTsKICAgICAgdHlwZWRlZiBtYnN0YXRlX3Qgc3RhdGVfdHlwZTsKCiAgICBwdWJsaWM6 CiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOwoKICAgICAgZXhwbGljaXQKICAgICAgY29kZWN2 dChzaXplX3QgX19yZWZzID0gMCk7CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAg IH5jb2RlY3Z0KCk7CgogICAgICB2aXJ0dWFsIHJlc3VsdAogICAgICBkb19vdXQoc3RhdGVfdHlw ZSYgX19zdGF0ZSwgY29uc3QgaW50ZXJuX3R5cGUqIF9fZnJvbSwKICAgICAgICAgICAgIGNvbnN0 IGludGVybl90eXBlKiBfX2Zyb21fZW5kLCBjb25zdCBpbnRlcm5fdHlwZSomIF9fZnJvbV9uZXh0 LAogICAgICAgICAgICAgZXh0ZXJuX3R5cGUqIF9fdG8sIGV4dGVybl90eXBlKiBfX3RvX2VuZCwK ICAgICAgICAgICAgIGV4dGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdDsKCiAgICAgIHZpcnR1 YWwgcmVzdWx0CiAgICAgIGRvX3Vuc2hpZnQoc3RhdGVfdHlwZSYgX19zdGF0ZSwKICAgICAgICAg ICAgICAgICBleHRlcm5fdHlwZSogX190bywgZXh0ZXJuX3R5cGUqIF9fdG9fZW5kLAogICAgICAg ICAgICAgICAgIGV4dGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdDsKCiAgICAgIHZpcnR1YWwg cmVzdWx0CiAgICAgIGRvX2luKHN0YXRlX3R5cGUmIF9fc3RhdGUsCiAgICAgICAgICAgICBjb25z dCBleHRlcm5fdHlwZSogX19mcm9tLCBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tX2VuZCwKICAg ICAgICAgICAgIGNvbnN0IGV4dGVybl90eXBlKiYgX19mcm9tX25leHQsCiAgICAgICAgICAgICBp bnRlcm5fdHlwZSogX190bywgaW50ZXJuX3R5cGUqIF9fdG9fZW5kLAogICAgICAgICAgICAgaW50 ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0OwoKICAgICAgdmlydHVhbAogICAgICBpbnQgZG9f ZW5jb2RpbmcoKSBjb25zdCB0aHJvdygpOwoKICAgICAgdmlydHVhbAogICAgICBib29sIGRvX2Fs d2F5c19ub2NvbnYoKSBjb25zdCB0aHJvdygpOwoKICAgICAgdmlydHVhbAogICAgICBpbnQgZG9f bGVuZ3RoKGNvbnN0IHN0YXRlX3R5cGUmLCBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tLAogICAg ICAgICAgICAgICAgICAgIGNvbnN0IGV4dGVybl90eXBlKiBfX2VuZCwgc2l6ZV90IF9fbWF4KSBj b25zdDsKCiAgICAgIHZpcnR1YWwgaW50CiAgICAgIGRvX21heF9sZW5ndGgoKSBjb25zdCB0aHJv dygpOwogICAgfTsKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZXJuVCwgdHlwZW5hbWUgX0V4 dGVyblQsIHR5cGVuYW1lIF9TdGF0ZVQ+CiAgICBjbGFzcyBjb2RlY3Z0X2J5bmFtZSA6IHB1Ymxp YyBjb2RlY3Z0PF9JbnRlcm5ULCBfRXh0ZXJuVCwgX1N0YXRlVD4KICAgIHsKICAgIHB1YmxpYzoK ICAgICAgZXhwbGljaXQKICAgICAgY29kZWN2dF9ieW5hbWUoY29uc3QgY2hhciosIHNpemVfdCBf X3JlZnMgPSAwKQogICAgICA6IGNvZGVjdnQ8X0ludGVyblQsIF9FeHRlcm5ULCBfU3RhdGVUPihf X3JlZnMpIHsgfQoKICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbAogICAgICB+Y29kZWN2dF9i eW5hbWUoKSB7IH0KICAgIH07CgoKCgojIDEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2kzODYtbGlu dXgvYml0cy9jb2RlY3Z0X3NwZWNpYWxpemF0aW9ucy5oIiAxIDMKIyA0NiAiL3Vzci9pbmNsdWRl L2MrKy8zLjIvaTM4Ni1saW51eC9iaXRzL2NvZGVjdnRfc3BlY2lhbGl6YXRpb25zLmgiIDMKICBj bGFzcyBfX2VuY190cmFpdHMKICB7CiAgcHVibGljOgoKCgogICAgdHlwZWRlZiBpY29udl90IF9f ZGVzY190eXBlOwoKICBwcm90ZWN0ZWQ6CgoKICAgIHN0YXRpYyBjb25zdCBpbnQgX1NfbWF4X3Np emUgPSAzMjsKCiAgICBjaGFyIF9NX2ludF9lbmNbX1NfbWF4X3NpemVdOwoKICAgIGNoYXIgX01f ZXh0X2VuY1tfU19tYXhfc2l6ZV07CgoKICAgIF9fZGVzY190eXBlIF9NX2luX2Rlc2M7CgogICAg X19kZXNjX3R5cGUgX01fb3V0X2Rlc2M7CgoKICAgIGludCBfTV9leHRfYm9tOwoKCiAgICBpbnQg X01faW50X2JvbTsKCiAgcHVibGljOgogICAgZXhwbGljaXQgX19lbmNfdHJhaXRzKCkKICAgIDog X01faW5fZGVzYygwKSwgX01fb3V0X2Rlc2MoMCksIF9NX2V4dF9ib20oMCksIF9NX2ludF9ib20o MCkKICAgIHsKICAgICAgbWVtc2V0KF9NX2ludF9lbmMsIDAsIF9TX21heF9zaXplKTsKICAgICAg bWVtc2V0KF9NX2V4dF9lbmMsIDAsIF9TX21heF9zaXplKTsKICAgIH0KCiAgICBleHBsaWNpdCBf X2VuY190cmFpdHMoY29uc3QgY2hhciogX19pbnQsIGNvbnN0IGNoYXIqIF9fZXh0LAogICAgICAg ICAgICAgICAgICAgICAgICAgIGludCBfX2lib20gPSAwLCBpbnQgX19lYm9tID0gMCkKICAgIDog X01faW5fZGVzYygwKSwgX01fb3V0X2Rlc2MoMCksIF9NX2V4dF9ib20oMCksIF9NX2ludF9ib20o MCkKICAgIHsKICAgICAgc3RybmNweShfTV9pbnRfZW5jLCBfX2ludCwgX1NfbWF4X3NpemUpOwog ICAgICBzdHJuY3B5KF9NX2V4dF9lbmMsIF9fZXh0LCBfU19tYXhfc2l6ZSk7CiAgICB9CgoKCgoK CiAgICBfX2VuY190cmFpdHMoY29uc3QgX19lbmNfdHJhaXRzJiBfX29iaik6IF9NX2luX2Rlc2Mo MCksIF9NX291dF9kZXNjKDApCiAgICB7CiAgICAgIHN0cm5jcHkoX01faW50X2VuYywgX19vYmou X01faW50X2VuYywgX1NfbWF4X3NpemUpOwogICAgICBzdHJuY3B5KF9NX2V4dF9lbmMsIF9fb2Jq Ll9NX2V4dF9lbmMsIF9TX21heF9zaXplKTsKICAgICAgX01fZXh0X2JvbSA9IF9fb2JqLl9NX2V4 dF9ib207CiAgICAgIF9NX2ludF9ib20gPSBfX29iai5fTV9pbnRfYm9tOwogICAgfQoKCiAgICBf X2VuY190cmFpdHMmCiAgICBvcGVyYXRvcj0oY29uc3QgX19lbmNfdHJhaXRzJiBfX29iaikKICAg IHsKICAgICAgc3RybmNweShfTV9pbnRfZW5jLCBfX29iai5fTV9pbnRfZW5jLCBfU19tYXhfc2l6 ZSk7CiAgICAgIHN0cm5jcHkoX01fZXh0X2VuYywgX19vYmouX01fZXh0X2VuYywgX1NfbWF4X3Np emUpOwogICAgICBfTV9pbl9kZXNjID0gMDsKICAgICAgX01fb3V0X2Rlc2MgPSAwOwogICAgICBf TV9leHRfYm9tID0gX19vYmouX01fZXh0X2JvbTsKICAgICAgX01faW50X2JvbSA9IF9fb2JqLl9N X2ludF9ib207CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgICB+X19lbmNfdHJhaXRzKCkK ICAgIHsKICAgICAgX19kZXNjX3R5cGUgX19lcnIgPSByZWludGVycHJldF9jYXN0PGljb252X3Q+ KC0xKTsKICAgICAgaWYgKF9NX2luX2Rlc2MgJiYgX01faW5fZGVzYyAhPSBfX2VycikKICAgICAg ICBpY29udl9jbG9zZShfTV9pbl9kZXNjKTsKICAgICAgaWYgKF9NX291dF9kZXNjICYmIF9NX291 dF9kZXNjICE9IF9fZXJyKQogICAgICAgIGljb252X2Nsb3NlKF9NX291dF9kZXNjKTsKICAgIH0K CiAgICB2b2lkCiAgICBfTV9pbml0KCkKICAgIHsKICAgICAgY29uc3QgX19kZXNjX3R5cGUgX19l cnIgPSByZWludGVycHJldF9jYXN0PGljb252X3Q+KC0xKTsKICAgICAgaWYgKCFfTV9pbl9kZXNj KQogICAgICAgIHsKICAgICAgICAgIF9NX2luX2Rlc2MgPSBpY29udl9vcGVuKF9NX2ludF9lbmMs IF9NX2V4dF9lbmMpOwogICAgICAgICAgaWYgKF9NX2luX2Rlc2MgPT0gX19lcnIpCiAgICAgICAg ICAgIF9fdGhyb3dfcnVudGltZV9lcnJvcigiY3JlYXRpbmcgaWNvbnYgaW5wdXQgZGVzY3JpcHRv ciBmYWlsZWQuIik7CiAgICAgICAgfQogICAgICBpZiAoIV9NX291dF9kZXNjKQogICAgICAgIHsK ICAgICAgICAgIF9NX291dF9kZXNjID0gaWNvbnZfb3BlbihfTV9leHRfZW5jLCBfTV9pbnRfZW5j KTsKICAgICAgICAgIGlmIChfTV9vdXRfZGVzYyA9PSBfX2VycikKICAgICAgICAgICAgX190aHJv d19ydW50aW1lX2Vycm9yKCJjcmVhdGluZyBpY29udiBvdXRwdXQgZGVzY3JpcHRvciBmYWlsZWQu Iik7CiAgICAgICAgfQogICAgfQoKICAgIGJvb2wKICAgIF9NX2dvb2QoKQogICAgewogICAgICBj b25zdCBfX2Rlc2NfdHlwZSBfX2VyciA9IHJlaW50ZXJwcmV0X2Nhc3Q8aWNvbnZfdD4oLTEpOwog ICAgICBib29sIF9fdGVzdCA9IF9NX2luX2Rlc2MgJiYgX01faW5fZGVzYyAhPSBfX2VycjsKICAg ICAgX190ZXN0ICY9IF9NX291dF9kZXNjICYmIF9NX291dF9kZXNjICE9IF9fZXJyOwogICAgICBy ZXR1cm4gX190ZXN0OwogICAgfQoKICAgIGNvbnN0IF9fZGVzY190eXBlKgogICAgX01fZ2V0X2lu X2Rlc2NyaXB0b3IoKQogICAgeyByZXR1cm4gJl9NX2luX2Rlc2M7IH0KCiAgICBjb25zdCBfX2Rl c2NfdHlwZSoKICAgIF9NX2dldF9vdXRfZGVzY3JpcHRvcigpCiAgICB7IHJldHVybiAmX01fb3V0 X2Rlc2M7IH0KCiAgICBpbnQKICAgIF9NX2dldF9leHRlcm5hbF9ib20oKQogICAgeyByZXR1cm4g X01fZXh0X2JvbTsgfQoKICAgIGludAogICAgX01fZ2V0X2ludGVybmFsX2JvbSgpCiAgICB7IHJl dHVybiBfTV9pbnRfYm9tOyB9CgogICAgY29uc3QgY2hhcioKICAgIF9NX2dldF9pbnRlcm5hbF9l bmMoKQogICAgeyByZXR1cm4gX01faW50X2VuYzsgfQoKICAgIGNvbnN0IGNoYXIqCiAgICBfTV9n ZXRfZXh0ZXJuYWxfZW5jKCkKICAgIHsgcmV0dXJuIF9NX2V4dF9lbmM7IH0KICB9OwoKCgoKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZXJuVCwgdHlwZW5hbWUgX0V4dGVyblQ+CiAgICBjbGFzcyBj b2RlY3Z0PF9JbnRlcm5ULCBfRXh0ZXJuVCwgX19lbmNfdHJhaXRzPgogICAgOiBwdWJsaWMgX19j b2RlY3Z0X2Fic3RyYWN0X2Jhc2U8X0ludGVyblQsIF9FeHRlcm5ULCBfX2VuY190cmFpdHM+CiAg ICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIGNvZGVjdnRfYmFzZTo6cmVzdWx0IHJlc3Vs dDsKICAgICAgdHlwZWRlZiBfSW50ZXJuVCBpbnRlcm5fdHlwZTsKICAgICAgdHlwZWRlZiBfRXh0 ZXJuVCBleHRlcm5fdHlwZTsKICAgICAgdHlwZWRlZiBfX2VuY190cmFpdHMgc3RhdGVfdHlwZTsK ICAgICAgdHlwZWRlZiBfX2VuY190cmFpdHM6Ol9fZGVzY190eXBlIF9fZGVzY190eXBlOwogICAg ICB0eXBlZGVmIF9fZW5jX3RyYWl0cyBfX2VuY190eXBlOwoKCiAgICAgIHN0YXRpYyBsb2NhbGU6 OmlkIGlkOwoKICAgICAgZXhwbGljaXQKICAgICAgY29kZWN2dChzaXplX3QgX19yZWZzID0gMCkK ICAgICAgOiBfX2NvZGVjdnRfYWJzdHJhY3RfYmFzZTxpbnRlcm5fdHlwZSwgZXh0ZXJuX3R5cGUs IHN0YXRlX3R5cGU+KF9fcmVmcykKICAgICAgeyB9CgogICAgICBleHBsaWNpdAogICAgICBjb2Rl Y3Z0KF9fZW5jX3R5cGUqIF9fZW5jLCBzaXplX3QgX19yZWZzID0gMCkKICAgICAgOiBfX2NvZGVj dnRfYWJzdHJhY3RfYmFzZTxpbnRlcm5fdHlwZSwgZXh0ZXJuX3R5cGUsIHN0YXRlX3R5cGU+KF9f cmVmcykKICAgICAgeyB9CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH5jb2Rl Y3Z0KCkgeyB9CgogICAgICB2aXJ0dWFsIHJlc3VsdAogICAgICBkb19vdXQoc3RhdGVfdHlwZSYg X19zdGF0ZSwgY29uc3QgaW50ZXJuX3R5cGUqIF9fZnJvbSwKICAgICAgICAgICAgIGNvbnN0IGlu dGVybl90eXBlKiBfX2Zyb21fZW5kLCBjb25zdCBpbnRlcm5fdHlwZSomIF9fZnJvbV9uZXh0LAog ICAgICAgICAgICAgZXh0ZXJuX3R5cGUqIF9fdG8sIGV4dGVybl90eXBlKiBfX3RvX2VuZCwKICAg ICAgICAgICAgIGV4dGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdDsKCiAgICAgIHZpcnR1YWwg cmVzdWx0CiAgICAgIGRvX3Vuc2hpZnQoc3RhdGVfdHlwZSYgX19zdGF0ZSwgZXh0ZXJuX3R5cGUq IF9fdG8sCiAgICAgICAgICAgICAgICAgZXh0ZXJuX3R5cGUqIF9fdG9fZW5kLCBleHRlcm5fdHlw ZSomIF9fdG9fbmV4dCkgY29uc3Q7CgogICAgICB2aXJ0dWFsIHJlc3VsdAogICAgICBkb19pbihz dGF0ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tLAogICAgICAgICAg ICBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tX2VuZCwgY29uc3QgZXh0ZXJuX3R5cGUqJiBfX2Zy b21fbmV4dCwKICAgICAgICAgICAgaW50ZXJuX3R5cGUqIF9fdG8sIGludGVybl90eXBlKiBfX3Rv X2VuZCwKICAgICAgICAgICAgaW50ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0OwoKICAgICAg dmlydHVhbCBpbnQKICAgICAgZG9fZW5jb2RpbmcoKSBjb25zdCB0aHJvdygpOwoKICAgICAgdmly dHVhbCBib29sCiAgICAgIGRvX2Fsd2F5c19ub2NvbnYoKSBjb25zdCB0aHJvdygpOwoKICAgICAg dmlydHVhbCBpbnQKICAgICAgZG9fbGVuZ3RoKGNvbnN0IHN0YXRlX3R5cGUmLCBjb25zdCBleHRl cm5fdHlwZSogX19mcm9tLAogICAgICAgICAgICAgICAgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZW5k LCBzaXplX3QgX19tYXgpIGNvbnN0OwoKICAgICAgdmlydHVhbCBpbnQKICAgICAgZG9fbWF4X2xl bmd0aCgpIGNvbnN0IHRocm93KCk7CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZXJu VCwgdHlwZW5hbWUgX0V4dGVyblQ+CiAgICBsb2NhbGU6OmlkCiAgICBjb2RlY3Z0PF9JbnRlcm5U LCBfRXh0ZXJuVCwgX19lbmNfdHJhaXRzPjo6aWQ7CgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf VD4KICAgIGlubGluZSBzaXplX3QKICAgIF9faWNvbnZfYWRhcHRvcihzaXplX3QoKl9fZnVuYyko aWNvbnZfdCwgX1QsIHNpemVfdCosIGNoYXIqKiwgc2l6ZV90KiksCiAgICAgICAgICAgICAgICAg ICAgaWNvbnZfdCBfX2NkLCBjaGFyKiogX19pbmJ1Ziwgc2l6ZV90KiBfX2luYnl0ZXMsCiAgICAg ICAgICAgICAgICAgICAgY2hhcioqIF9fb3V0YnVmLCBzaXplX3QqIF9fb3V0Ynl0ZXMpCiAgICB7 IHJldHVybiBfX2Z1bmMoX19jZCwgKF9UKV9faW5idWYsIF9faW5ieXRlcywgX19vdXRidWYsIF9f b3V0Ynl0ZXMpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRlcm5ULCB0eXBlbmFtZSBfRXh0 ZXJuVD4KICAgIGNvZGVjdnRfYmFzZTo6cmVzdWx0CiAgICBjb2RlY3Z0PF9JbnRlcm5ULCBfRXh0 ZXJuVCwgX19lbmNfdHJhaXRzPjo6CiAgICBkb19vdXQoc3RhdGVfdHlwZSYgX19zdGF0ZSwgY29u c3QgaW50ZXJuX3R5cGUqIF9fZnJvbSwKICAgICAgICAgICBjb25zdCBpbnRlcm5fdHlwZSogX19m cm9tX2VuZCwgY29uc3QgaW50ZXJuX3R5cGUqJiBfX2Zyb21fbmV4dCwKICAgICAgICAgICBleHRl cm5fdHlwZSogX190bywgZXh0ZXJuX3R5cGUqIF9fdG9fZW5kLAogICAgICAgICAgIGV4dGVybl90 eXBlKiYgX190b19uZXh0KSBjb25zdAogICAgewogICAgICByZXN1bHQgX19yZXQgPSBjb2RlY3Z0 X2Jhc2U6OmVycm9yOwogICAgICBpZiAoX19zdGF0ZS5fTV9nb29kKCkpCiAgICAgICAgewogICAg ICAgICAgdHlwZWRlZiBzdGF0ZV90eXBlOjpfX2Rlc2NfdHlwZSBfX2Rlc2NfdHlwZTsKICAgICAg ICAgIGNvbnN0IF9fZGVzY190eXBlKiBfX2Rlc2MgPSBfX3N0YXRlLl9NX2dldF9vdXRfZGVzY3Jp cHRvcigpOwogICAgICAgICAgY29uc3Qgc2l6ZV90IF9fZm11bHRpcGxlID0gc2l6ZW9mKGludGVy bl90eXBlKTsKICAgICAgICAgIHNpemVfdCBfX2ZieXRlcyA9IF9fZm11bHRpcGxlICogKF9fZnJv bV9lbmQgLSBfX2Zyb20pOwogICAgICAgICAgY29uc3Qgc2l6ZV90IF9fdG11bHRpcGxlID0gc2l6 ZW9mKGV4dGVybl90eXBlKTsKICAgICAgICAgIHNpemVfdCBfX3RieXRlcyA9IF9fdG11bHRpcGxl ICogKF9fdG9fZW5kIC0gX190byk7CgoKCiAgICAgICAgICBjaGFyKiBfX2N0byA9IHJlaW50ZXJw cmV0X2Nhc3Q8Y2hhcio+KF9fdG8pOwogICAgICAgICAgY2hhciogX19jZnJvbTsKICAgICAgICAg IHNpemVfdCBfX2NvbnY7CgoKCgoKCiAgICAgICAgICBpbnQgX19pbnRfYm9tID0gX19zdGF0ZS5f TV9nZXRfaW50ZXJuYWxfYm9tKCk7CiAgICAgICAgICBpZiAoX19pbnRfYm9tKQogICAgICAgICAg ICB7CiAgICAgICAgICAgICAgc2l6ZV90IF9fc2l6ZSA9IF9fZnJvbV9lbmQgLSBfX2Zyb207CiAg ICAgICAgICAgICAgaW50ZXJuX3R5cGUqIF9fY2ZpeGVkID0gc3RhdGljX2Nhc3Q8aW50ZXJuX3R5 cGUqPihfX2J1aWx0aW5fYWxsb2NhKHNpemVvZihpbnRlcm5fdHlwZSkgKiAoX19zaXplICsgMSkp KTsKICAgICAgICAgICAgICBfX2NmaXhlZFswXSA9IHN0YXRpY19jYXN0PGludGVybl90eXBlPihf X2ludF9ib20pOwogICAgICAgICAgICAgIGNoYXJfdHJhaXRzPGludGVybl90eXBlPjo6Y29weShf X2NmaXhlZCArIDEsIF9fZnJvbSwgX19zaXplKTsKICAgICAgICAgICAgICBfX2Nmcm9tID0gcmVp bnRlcnByZXRfY2FzdDxjaGFyKj4oX19jZml4ZWQpOwogICAgICAgICAgICAgIF9fY29udiA9IF9f aWNvbnZfYWRhcHRvcihpY29udiwgKl9fZGVzYywgJl9fY2Zyb20sCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAmX19mYnl0ZXMsICZfX2N0bywgJl9fdGJ5dGVzKTsKICAg ICAgICAgICAgfQogICAgICAgICAgZWxzZQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaW50 ZXJuX3R5cGUqIF9fY2ZpeGVkID0gY29uc3RfY2FzdDxpbnRlcm5fdHlwZSo+KF9fZnJvbSk7CiAg ICAgICAgICAgICAgX19jZnJvbSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KF9fY2ZpeGVkKTsK ICAgICAgICAgICAgICBfX2NvbnYgPSBfX2ljb252X2FkYXB0b3IoaWNvbnYsICpfX2Rlc2MsICZf X2Nmcm9tLCAmX19mYnl0ZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICZfX2N0bywgJl9fdGJ5dGVzKTsKICAgICAgICAgICAgfQoKICAgICAgICAgIGlmIChfX2NvbnYg IT0gc2l6ZV90KC0xKSkKICAgICAgICAgICAgewogICAgICAgICAgICAgIF9fZnJvbV9uZXh0ID0g cmVpbnRlcnByZXRfY2FzdDxjb25zdCBpbnRlcm5fdHlwZSo+KF9fY2Zyb20pOwogICAgICAgICAg ICAgIF9fdG9fbmV4dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8ZXh0ZXJuX3R5cGUqPihfX2N0byk7CiAg ICAgICAgICAgICAgX19yZXQgPSBjb2RlY3Z0X2Jhc2U6Om9rOwogICAgICAgICAgICB9CiAgICAg ICAgICBlbHNlCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpZiAoX19mYnl0ZXMgPCBfX2Zt dWx0aXBsZSAqIChfX2Zyb21fZW5kIC0gX19mcm9tKSkKICAgICAgICAgICAgICAgIHsKICAgICAg ICAgICAgICAgICAgX19mcm9tX25leHQgPSByZWludGVycHJldF9jYXN0PGNvbnN0IGludGVybl90 eXBlKj4oX19jZnJvbSk7CiAgICAgICAgICAgICAgICAgIF9fdG9fbmV4dCA9IHJlaW50ZXJwcmV0 X2Nhc3Q8ZXh0ZXJuX3R5cGUqPihfX2N0byk7CiAgICAgICAgICAgICAgICAgIF9fcmV0ID0gY29k ZWN2dF9iYXNlOjpwYXJ0aWFsOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGVsc2UK ICAgICAgICAgICAgICAgIF9fcmV0ID0gY29kZWN2dF9iYXNlOjplcnJvcjsKICAgICAgICAgICAg fQogICAgICAgIH0KICAgICAgcmV0dXJuIF9fcmV0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfSW50ZXJuVCwgdHlwZW5hbWUgX0V4dGVyblQ+CiAgICBjb2RlY3Z0X2Jhc2U6OnJlc3VsdAog ICAgY29kZWN2dDxfSW50ZXJuVCwgX0V4dGVyblQsIF9fZW5jX3RyYWl0cz46OgogICAgZG9fdW5z aGlmdChzdGF0ZV90eXBlJiBfX3N0YXRlLCBleHRlcm5fdHlwZSogX190bywKICAgICAgICAgICAg ICAgZXh0ZXJuX3R5cGUqIF9fdG9fZW5kLCBleHRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3QK ICAgIHsKICAgICAgcmVzdWx0IF9fcmV0ID0gY29kZWN2dF9iYXNlOjplcnJvcjsKICAgICAgaWYg KF9fc3RhdGUuX01fZ29vZCgpKQogICAgICAgIHsKICAgICAgICAgIHR5cGVkZWYgc3RhdGVfdHlw ZTo6X19kZXNjX3R5cGUgX19kZXNjX3R5cGU7CiAgICAgICAgICBjb25zdCBfX2Rlc2NfdHlwZSog X19kZXNjID0gX19zdGF0ZS5fTV9nZXRfaW5fZGVzY3JpcHRvcigpOwogICAgICAgICAgY29uc3Qg c2l6ZV90IF9fdG11bHRpcGxlID0gc2l6ZW9mKGludGVybl90eXBlKTsKICAgICAgICAgIHNpemVf dCBfX3RsZW4gPSBfX3RtdWx0aXBsZSAqIChfX3RvX2VuZCAtIF9fdG8pOwoKCgogICAgICAgICAg Y2hhciogX19jdG8gPSByZWludGVycHJldF9jYXN0PGNoYXIqPihfX3RvKTsKICAgICAgICAgIHNp emVfdCBfX2NvbnYgPSBfX2ljb252X2FkYXB0b3IoaWNvbnYsKl9fZGVzYywgX19udWxsLCBfX251 bGwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZfX2N0bywgJl9f dGxlbik7CgogICAgICAgICAgaWYgKF9fY29udiAhPSBzaXplX3QoLTEpKQogICAgICAgICAgICB7 CiAgICAgICAgICAgICAgX190b19uZXh0ID0gcmVpbnRlcnByZXRfY2FzdDxleHRlcm5fdHlwZSo+ KF9fY3RvKTsKICAgICAgICAgICAgICBpZiAoX190bGVuID09IF9fdG11bHRpcGxlICogKF9fdG9f ZW5kIC0gX190bykpCiAgICAgICAgICAgICAgICBfX3JldCA9IGNvZGVjdnRfYmFzZTo6bm9jb252 OwogICAgICAgICAgICAgIGVsc2UgaWYgKF9fdGxlbiA9PSAwKQogICAgICAgICAgICAgICAgX19y ZXQgPSBjb2RlY3Z0X2Jhc2U6Om9rOwogICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAg IF9fcmV0ID0gY29kZWN2dF9iYXNlOjpwYXJ0aWFsOwogICAgICAgICAgICB9CiAgICAgICAgICBl bHNlCiAgICAgICAgICAgIF9fcmV0ID0gY29kZWN2dF9iYXNlOjplcnJvcjsKICAgICAgICB9CiAg ICAgIHJldHVybiBfX3JldDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludGVyblQsIHR5 cGVuYW1lIF9FeHRlcm5UPgogICAgY29kZWN2dF9iYXNlOjpyZXN1bHQKICAgIGNvZGVjdnQ8X0lu dGVyblQsIF9FeHRlcm5ULCBfX2VuY190cmFpdHM+OjoKICAgIGRvX2luKHN0YXRlX3R5cGUmIF9f c3RhdGUsIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb20sCiAgICAgICAgICBjb25zdCBleHRlcm5f dHlwZSogX19mcm9tX2VuZCwgY29uc3QgZXh0ZXJuX3R5cGUqJiBfX2Zyb21fbmV4dCwKICAgICAg ICAgIGludGVybl90eXBlKiBfX3RvLCBpbnRlcm5fdHlwZSogX190b19lbmQsCiAgICAgICAgICBp bnRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3QKICAgIHsKICAgICAgcmVzdWx0IF9fcmV0ID0g Y29kZWN2dF9iYXNlOjplcnJvcjsKICAgICAgaWYgKF9fc3RhdGUuX01fZ29vZCgpKQogICAgICAg IHsKICAgICAgICAgIHR5cGVkZWYgc3RhdGVfdHlwZTo6X19kZXNjX3R5cGUgX19kZXNjX3R5cGU7 CiAgICAgICAgICBjb25zdCBfX2Rlc2NfdHlwZSogX19kZXNjID0gX19zdGF0ZS5fTV9nZXRfaW5f ZGVzY3JpcHRvcigpOwogICAgICAgICAgY29uc3Qgc2l6ZV90IF9fZm11bHRpcGxlID0gc2l6ZW9m KGV4dGVybl90eXBlKTsKICAgICAgICAgIHNpemVfdCBfX2ZsZW4gPSBfX2ZtdWx0aXBsZSAqIChf X2Zyb21fZW5kIC0gX19mcm9tKTsKICAgICAgICAgIGNvbnN0IHNpemVfdCBfX3RtdWx0aXBsZSA9 IHNpemVvZihpbnRlcm5fdHlwZSk7CiAgICAgICAgICBzaXplX3QgX190bGVuID0gX190bXVsdGlw bGUgKiAoX190b19lbmQgLSBfX3RvKTsKCgoKICAgICAgICAgIGNoYXIqIF9fY3RvID0gcmVpbnRl cnByZXRfY2FzdDxjaGFyKj4oX190byk7CiAgICAgICAgICBjaGFyKiBfX2Nmcm9tOwogICAgICAg ICAgc2l6ZV90IF9fY29udjsKCgoKCgoKICAgICAgICAgIGludCBfX2V4dF9ib20gPSBfX3N0YXRl Ll9NX2dldF9leHRlcm5hbF9ib20oKTsKICAgICAgICAgIGlmIChfX2V4dF9ib20pCiAgICAgICAg ICAgIHsKICAgICAgICAgICAgICBzaXplX3QgX19zaXplID0gX19mcm9tX2VuZCAtIF9fZnJvbTsK ICAgICAgICAgICAgICBleHRlcm5fdHlwZSogX19jZml4ZWQgPSBzdGF0aWNfY2FzdDxleHRlcm5f dHlwZSo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKGV4dGVybl90eXBlKSAqIChfX3NpemUgKyAx KSkpOwogICAgICAgICAgICAgIF9fY2ZpeGVkWzBdID0gc3RhdGljX2Nhc3Q8ZXh0ZXJuX3R5cGU+ KF9fZXh0X2JvbSk7CiAgICAgICAgICAgICAgY2hhcl90cmFpdHM8ZXh0ZXJuX3R5cGU+Ojpjb3B5 KF9fY2ZpeGVkICsgMSwgX19mcm9tLCBfX3NpemUpOwogICAgICAgICAgICAgIF9fY2Zyb20gPSBy ZWludGVycHJldF9jYXN0PGNoYXIqPihfX2NmaXhlZCk7CiAgICAgICAgICAgICAgX19jb252ID0g X19pY29udl9hZGFwdG9yKGljb252LCAqX19kZXNjLCAmX19jZnJvbSwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgJl9fZmxlbiwgJl9fY3RvLCAmX190bGVuKTsKICAgICAg ICAgICAgfQogICAgICAgICAgZWxzZQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgZXh0ZXJu X3R5cGUqIF9fY2ZpeGVkID0gY29uc3RfY2FzdDxleHRlcm5fdHlwZSo+KF9fZnJvbSk7CiAgICAg ICAgICAgICAgX19jZnJvbSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KF9fY2ZpeGVkKTsKICAg ICAgICAgICAgICBfX2NvbnYgPSBfX2ljb252X2FkYXB0b3IoaWNvbnYsICpfX2Rlc2MsICZfX2Nm cm9tLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmX19mbGVuLCAmX19j dG8sICZfX3RsZW4pOwogICAgICAgICAgICB9CgoKICAgICAgICAgIGlmIChfX2NvbnYgIT0gc2l6 ZV90KC0xKSkKICAgICAgICAgICAgewogICAgICAgICAgICAgIF9fZnJvbV9uZXh0ID0gcmVpbnRl cnByZXRfY2FzdDxjb25zdCBleHRlcm5fdHlwZSo+KF9fY2Zyb20pOwogICAgICAgICAgICAgIF9f dG9fbmV4dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8aW50ZXJuX3R5cGUqPihfX2N0byk7CiAgICAgICAg ICAgICAgX19yZXQgPSBjb2RlY3Z0X2Jhc2U6Om9rOwogICAgICAgICAgICB9CiAgICAgICAgICBl bHNlCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpZiAoX19mbGVuIDwgc3RhdGljX2Nhc3Q8 c2l6ZV90PihfX2Zyb21fZW5kIC0gX19mcm9tKSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAg ICAgICAgICAgX19mcm9tX25leHQgPSByZWludGVycHJldF9jYXN0PGNvbnN0IGV4dGVybl90eXBl Kj4oX19jZnJvbSk7CiAgICAgICAgICAgICAgICAgIF9fdG9fbmV4dCA9IHJlaW50ZXJwcmV0X2Nh c3Q8aW50ZXJuX3R5cGUqPihfX2N0byk7CiAgICAgICAgICAgICAgICAgIF9fcmV0ID0gY29kZWN2 dF9iYXNlOjpwYXJ0aWFsOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGVsc2UKICAg ICAgICAgICAgICAgIF9fcmV0ID0gY29kZWN2dF9iYXNlOjplcnJvcjsKICAgICAgICAgICAgfQog ICAgICAgIH0KICAgICAgcmV0dXJuIF9fcmV0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf SW50ZXJuVCwgdHlwZW5hbWUgX0V4dGVyblQ+CiAgICBpbnQKICAgIGNvZGVjdnQ8X0ludGVyblQs IF9FeHRlcm5ULCBfX2VuY190cmFpdHM+OjoKICAgIGRvX2VuY29kaW5nKCkgY29uc3QgdGhyb3co KQogICAgewogICAgICBpbnQgX19yZXQgPSAwOwogICAgICBpZiAoc2l6ZW9mKF9FeHRlcm5UKSA8 PSBzaXplb2YoX0ludGVyblQpKQogICAgICAgIF9fcmV0ID0gc2l6ZW9mKF9JbnRlcm5UKS9zaXpl b2YoX0V4dGVyblQpOwogICAgICByZXR1cm4gX19yZXQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVu YW1lIF9JbnRlcm5ULCB0eXBlbmFtZSBfRXh0ZXJuVD4KICAgIGJvb2wKICAgIGNvZGVjdnQ8X0lu dGVyblQsIF9FeHRlcm5ULCBfX2VuY190cmFpdHM+OjoKICAgIGRvX2Fsd2F5c19ub2NvbnYoKSBj b25zdCB0aHJvdygpCiAgICB7IHJldHVybiBmYWxzZTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf SW50ZXJuVCwgdHlwZW5hbWUgX0V4dGVyblQ+CiAgICBpbnQKICAgIGNvZGVjdnQ8X0ludGVyblQs IF9FeHRlcm5ULCBfX2VuY190cmFpdHM+OjoKICAgIGRvX2xlbmd0aChjb25zdCBzdGF0ZV90eXBl JiwgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbSwKICAgICAgICAgICAgICBjb25zdCBleHRlcm5f dHlwZSogX19lbmQsIHNpemVfdCBfX21heCkgY29uc3QKICAgIHsgcmV0dXJuIG1pbihfX21heCwg c3RhdGljX2Nhc3Q8c2l6ZV90PihfX2VuZCAtIF9fZnJvbSkpOyB9CgoKCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0ludGVyblQsIHR5cGVuYW1lIF9FeHRlcm5UPgogICAgaW50CiAgICBjb2RlY3Z0PF9J bnRlcm5ULCBfRXh0ZXJuVCwgX19lbmNfdHJhaXRzPjo6CiAgICBkb19tYXhfbGVuZ3RoKCkgY29u c3QgdGhyb3coKQogICAgeyByZXR1cm4gMTsgfQojIDMzNSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIv Yml0cy9jb2RlY3Z0LmgiIDIgMwojIDQyNiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9sb2Nh bGVfZmFjZXRzLmgiIDIgMwoKCgogIGNsYXNzIF9fbnVtX2Jhc2UKICB7CiAgcHJvdGVjdGVkOgoK CiAgICBzdGF0aWMgY29uc3QgY2hhciBfU19hdG9tc1tdOwoKICAgIGVudW0KICAgIHsKICAgICAg X01femVybywKICAgICAgX01fZSA9IF9NX3plcm8gKyAxMCwKICAgICAgX01fRSA9IF9NX3plcm8g KyAxMSwKICAgICAgX01fc2l6ZSA9IDIxICsgMQogICAgfTsKCgoKICAgIHN0YXRpYyBib29sCiAg ICBfU19mb3JtYXRfZmxvYXQoY29uc3QgaW9zX2Jhc2UmIF9faW8sIGNoYXIqIF9fZnB0ciwgY2hh ciBfX21vZCwKICAgICAgICAgICAgICAgICAgICBzdHJlYW1zaXplIF9fcHJlYyk7CgoKICAgIHN0 YXRpYyB2b2lkCiAgICBfU19mb3JtYXRfaW50KGNvbnN0IGlvc19iYXNlJiBfX2lvLCBjaGFyKiBf X2ZwdHIsIGNoYXIgX19tb2QsIGNoYXIgX19tb2RsKTsKICB9OwoKCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0NoYXJUPgogICAgY2xhc3MgbnVtcHVuY3QgOiBwdWJsaWMgbG9jYWxlOjpmYWNldAogICAg ewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBl ZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQ+IHN0cmluZ190eXBlOwoKICAgICAgc3RhdGljIGxvY2Fs ZTo6aWQgaWQ7CgogICAgcHJpdmF0ZToKICAgICAgY2hhcl90eXBlIF9NX2RlY2ltYWxfcG9pbnQ7 CiAgICAgIGNoYXJfdHlwZSBfTV90aG91c2FuZHNfc2VwOwogICAgICBjb25zdCBjaGFyKiBfTV9n cm91cGluZzsKICAgICAgY29uc3QgY2hhcl90eXBlKiBfTV90cnVlbmFtZTsKICAgICAgY29uc3Qg Y2hhcl90eXBlKiBfTV9mYWxzZW5hbWU7CgogICAgcHVibGljOgogICAgICBleHBsaWNpdAogICAg ICBudW1wdW5jdChzaXplX3QgX19yZWZzID0gMCkgOiBsb2NhbGU6OmZhY2V0KF9fcmVmcykKICAg ICAgeyBfTV9pbml0aWFsaXplX251bXB1bmN0KCk7IH0KCiAgICAgIGV4cGxpY2l0CiAgICAgIG51 bXB1bmN0KF9fY19sb2NhbGUgX19jbG9jLCBzaXplX3QgX19yZWZzID0gMCkgOiBsb2NhbGU6OmZh Y2V0KF9fcmVmcykKICAgICAgeyBfTV9pbml0aWFsaXplX251bXB1bmN0KF9fY2xvYyk7IH0KCiAg ICAgIGNoYXJfdHlwZQogICAgICBkZWNpbWFsX3BvaW50KCkgY29uc3QKICAgICAgeyByZXR1cm4g dGhpcy0+ZG9fZGVjaW1hbF9wb2ludCgpOyB9CgogICAgICBjaGFyX3R5cGUKICAgICAgdGhvdXNh bmRzX3NlcCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3Rob3VzYW5kc19zZXAoKTsg fQoKICAgICAgc3RyaW5nCiAgICAgIGdyb3VwaW5nKCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhp cy0+ZG9fZ3JvdXBpbmcoKTsgfQoKICAgICAgc3RyaW5nX3R5cGUKICAgICAgdHJ1ZW5hbWUoKSBj b25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb190cnVlbmFtZSgpOyB9CgogICAgICBzdHJpbmdf dHlwZQogICAgICBmYWxzZW5hbWUoKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19mYWxz ZW5hbWUoKTsgfQoKICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbAogICAgICB+bnVtcHVuY3Qo KTsKCiAgICAgIHZpcnR1YWwgY2hhcl90eXBlCiAgICAgIGRvX2RlY2ltYWxfcG9pbnQoKSBjb25z dAogICAgICB7IHJldHVybiBfTV9kZWNpbWFsX3BvaW50OyB9CgogICAgICB2aXJ0dWFsIGNoYXJf dHlwZQogICAgICBkb190aG91c2FuZHNfc2VwKCkgY29uc3QKICAgICAgeyByZXR1cm4gX01fdGhv dXNhbmRzX3NlcDsgfQoKICAgICAgdmlydHVhbCBzdHJpbmcKICAgICAgZG9fZ3JvdXBpbmcoKSBj b25zdAogICAgICB7IHJldHVybiBfTV9ncm91cGluZzsgfQoKICAgICAgdmlydHVhbCBzdHJpbmdf dHlwZQogICAgICBkb190cnVlbmFtZSgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX3RydWVuYW1l OyB9CgogICAgICB2aXJ0dWFsIHN0cmluZ190eXBlCiAgICAgIGRvX2ZhbHNlbmFtZSgpIGNvbnN0 CiAgICAgIHsgcmV0dXJuIF9NX2ZhbHNlbmFtZTsgfQoKCiAgICAgIHZvaWQKICAgICAgX01faW5p dGlhbGl6ZV9udW1wdW5jdChfX2NfbG9jYWxlIF9fY2xvYyA9IF9fbnVsbCk7CiAgICB9OwoKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBsb2NhbGU6OmlkIG51bXB1bmN0PF9DaGFyVD46 OmlkOwoKICB0ZW1wbGF0ZTw+CiAgICBudW1wdW5jdDxjaGFyPjo6fm51bXB1bmN0KCk7CgogIHRl bXBsYXRlPD4KICAgIHZvaWQKICAgIG51bXB1bmN0PGNoYXI+OjpfTV9pbml0aWFsaXplX251bXB1 bmN0KF9fY19sb2NhbGUgX19jbG9jKTsKCgogIHRlbXBsYXRlPD4KICAgIG51bXB1bmN0PHdjaGFy X3Q+Ojp+bnVtcHVuY3QoKTsKCiAgdGVtcGxhdGU8PgogICAgdm9pZAogICAgbnVtcHVuY3Q8d2No YXJfdD46Ol9NX2luaXRpYWxpemVfbnVtcHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MpOwoKCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgY2xhc3MgbnVtcHVuY3RfYnluYW1lIDogcHVibGlj IG51bXB1bmN0PF9DaGFyVD4KICAgIHsKCiAgICAgIF9fY19sb2NhbGUgX01fY19sb2NhbGVfbnVt cHVuY3Q7CgogICAgcHVibGljOgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAg IHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVD4gc3RyaW5nX3R5cGU7CgogICAgICBleHBsaWNp dAogICAgICBudW1wdW5jdF9ieW5hbWUoY29uc3QgY2hhciogX19zLCBzaXplX3QgX19yZWZzID0g MCkKICAgICAgOiBudW1wdW5jdDxfQ2hhclQ+KF9fcmVmcykKICAgICAgewogICAgICAgIF9TX2Ny ZWF0ZV9jX2xvY2FsZShfTV9jX2xvY2FsZV9udW1wdW5jdCwgX19zKTsKICAgICAgICBfTV9pbml0 aWFsaXplX251bXB1bmN0KF9NX2NfbG9jYWxlX251bXB1bmN0KTsKICAgICAgfQoKICAgIHByb3Rl Y3RlZDoKICAgICAgdmlydHVhbAogICAgICB+bnVtcHVuY3RfYnluYW1lKCkKICAgICAgeyBfU19k ZXN0cm95X2NfbG9jYWxlKF9NX2NfbG9jYWxlX251bXB1bmN0KTsgfQogICAgfTsKCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgY2xhc3MgbnVtX2dldCA6 IHB1YmxpYyBsb2NhbGU6OmZhY2V0LCBwdWJsaWMgX19udW1fYmFzZQogICAgewogICAgcHVibGlj OgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIF9Jbkl0ZXIg aXRlcl90eXBlOwoKICAgICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7CgogICAgICBleHBsaWNpdAog ICAgICBudW1fZ2V0KHNpemVfdCBfX3JlZnMgPSAwKSA6IGxvY2FsZTo6ZmFjZXQoX19yZWZzKSB7 IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBnZXQoaXRlcl90eXBlIF9faW4sIGl0ZXJfdHlwZSBf X2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIs IGJvb2wmIF9fdikgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZ2V0KF9faW4sIF9fZW5k LCBfX2lvLCBfX2VyciwgX192KTsgfQoKICAgICAgaXRlcl90eXBlCiAgICAgIGdldChpdGVyX3R5 cGUgX19pbiwgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgIGlvc19i YXNlOjppb3N0YXRlJiBfX2VyciwgbG9uZyYgX192KSBjb25zdAogICAgICB7IHJldHVybiB0aGlz LT5kb19nZXQoX19pbiwgX19lbmQsIF9faW8sIF9fZXJyLCBfX3YpOyB9CgogICAgICBpdGVyX3R5 cGUKICAgICAgZ2V0KGl0ZXJfdHlwZSBfX2luLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBf X2lvLAogICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB1bnNpZ25lZCBzaG9ydCYg X192KSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19nZXQoX19pbiwgX19lbmQsIF9faW8s IF9fZXJyLCBfX3YpOyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgZ2V0KGl0ZXJfdHlwZSBfX2lu LCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgaW9zX2Jhc2U6Omlv c3RhdGUmIF9fZXJyLCB1bnNpZ25lZCBpbnQmIF9fdikgY29uc3QKICAgICAgeyByZXR1cm4gdGhp cy0+ZG9fZ2V0KF9faW4sIF9fZW5kLCBfX2lvLCBfX2VyciwgX192KTsgfQoKICAgICAgaXRlcl90 eXBlCiAgICAgIGdldChpdGVyX3R5cGUgX19pbiwgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYg X19pbywKICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdW5zaWduZWQgbG9uZyYg X192KSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19nZXQoX19pbiwgX19lbmQsIF9faW8s IF9fZXJyLCBfX3YpOyB9CgoKICAgICAgaXRlcl90eXBlCiAgICAgIGdldChpdGVyX3R5cGUgX19p biwgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgIGlvc19iYXNlOjpp b3N0YXRlJiBfX2VyciwgbG9uZyBsb25nJiBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMt PmRvX2dldChfX2luLCBfX2VuZCwgX19pbywgX19lcnIsIF9fdik7IH0KCiAgICAgIGl0ZXJfdHlw ZQogICAgICBnZXQoaXRlcl90eXBlIF9faW4sIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9f aW8sCiAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHVuc2lnbmVkIGxvbmcgbG9u ZyYgX192KSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19nZXQoX19pbiwgX19lbmQsIF9f aW8sIF9fZXJyLCBfX3YpOyB9CgoKICAgICAgaXRlcl90eXBlCiAgICAgIGdldChpdGVyX3R5cGUg X19pbiwgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgIGlvc19iYXNl Ojppb3N0YXRlJiBfX2VyciwgZmxvYXQmIF9fdikgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ ZG9fZ2V0KF9faW4sIF9fZW5kLCBfX2lvLCBfX2VyciwgX192KTsgfQoKICAgICAgaXRlcl90eXBl CiAgICAgIGdldChpdGVyX3R5cGUgX19pbiwgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19p bywKICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgZG91YmxlJiBfX3YpIGNvbnN0 CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dldChfX2luLCBfX2VuZCwgX19pbywgX19lcnIsIF9f dik7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBnZXQoaXRlcl90eXBlIF9faW4sIGl0ZXJfdHlw ZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19l cnIsIGxvbmcgZG91YmxlJiBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dldChf X2luLCBfX2VuZCwgX19pbywgX19lcnIsIF9fdik7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBn ZXQoaXRlcl90eXBlIF9faW4sIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAg ICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHZvaWQqJiBfX3YpIGNvbnN0CiAgICAgIHsg cmV0dXJuIHRoaXMtPmRvX2dldChfX2luLCBfX2VuZCwgX19pbywgX19lcnIsIF9fdik7IH0KCiAg ICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwgfm51bV9nZXQoKSB7IH0KCiAgICAgIGl0ZXJfdHlw ZQogICAgICBfTV9leHRyYWN0X2Zsb2F0KGl0ZXJfdHlwZSwgaXRlcl90eXBlLCBpb3NfYmFzZSYs IGlvc19iYXNlOjppb3N0YXRlJiwKICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmcmIF9feHRy YykgY29uc3Q7CgogICAgICBpdGVyX3R5cGUKICAgICAgX01fZXh0cmFjdF9pbnQoaXRlcl90eXBl LCBpdGVyX3R5cGUsIGlvc19iYXNlJiwgaW9zX2Jhc2U6Omlvc3RhdGUmLAogICAgICAgICAgICAg ICAgICAgICBzdHJpbmcmIF9feHRyYywgaW50JiBfX2Jhc2UpIGNvbnN0OwoKICAgICAgdmlydHVh bCBpdGVyX3R5cGUKICAgICAgZG9fZ2V0KGl0ZXJfdHlwZSwgaXRlcl90eXBlLCBpb3NfYmFzZSYs IGlvc19iYXNlOjppb3N0YXRlJiwgYm9vbCYpIGNvbnN0OwoKCiAgICAgIHZpcnR1YWwgaXRlcl90 eXBlCiAgICAgIGRvX2dldChpdGVyX3R5cGUsIGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBpb3NfYmFz ZTo6aW9zdGF0ZSYsIGxvbmcmKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAg IGRvX2dldChpdGVyX3R5cGUsIGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBpb3NfYmFzZTo6aW9zdGF0 ZSYgX19lcnIsCiAgICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQmKSBjb25zdDsKCiAgICAgIHZp cnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX2dldChpdGVyX3R5cGUsIGl0ZXJfdHlwZSwgaW9zX2Jh c2UmLCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsCiAgICAgICAgICAgICB1bnNpZ25lZCBpbnQm KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX2dldChpdGVyX3R5cGUs IGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsCiAgICAgICAg ICAgICB1bnNpZ25lZCBsb25nJikgY29uc3Q7CgoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAg ICAgZG9fZ2V0KGl0ZXJfdHlwZSwgaXRlcl90eXBlLCBpb3NfYmFzZSYsIGlvc19iYXNlOjppb3N0 YXRlJiBfX2VyciwKICAgICAgICAgICAgIGxvbmcgbG9uZyYpIGNvbnN0OwoKICAgICAgdmlydHVh bCBpdGVyX3R5cGUKICAgICAgZG9fZ2V0KGl0ZXJfdHlwZSwgaXRlcl90eXBlLCBpb3NfYmFzZSYs IGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwKICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgbG9u ZyYpIGNvbnN0OwoKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX2dldChpdGVyX3R5 cGUsIGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsCiAgICAg ICAgICAgICBmbG9hdCYpIGNvbnN0OwoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9f Z2V0KGl0ZXJfdHlwZSwgaXRlcl90eXBlLCBpb3NfYmFzZSYsIGlvc19iYXNlOjppb3N0YXRlJiBf X2VyciwKICAgICAgICAgICAgIGRvdWJsZSYpIGNvbnN0OwoKICAgICAgdmlydHVhbCBpdGVyX3R5 cGUKICAgICAgZG9fZ2V0KGl0ZXJfdHlwZSwgaXRlcl90eXBlLCBpb3NfYmFzZSYsIGlvc19iYXNl Ojppb3N0YXRlJiBfX2VyciwKICAgICAgICAgICAgIGxvbmcgZG91YmxlJikgY29uc3Q7CgogICAg ICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXQoaXRlcl90eXBlLCBpdGVyX3R5cGUsIGlv c19iYXNlJiwgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLAogICAgICAgICAgICAgdm9pZComKSBj b25zdDsKICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRl cj4KICAgIGxvY2FsZTo6aWQgbnVtX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjppZDsKIyA3MjEgIi91 c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvbG9jYWxlX2ZhY2V0cy5oIiAzCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIGNsYXNzIG51bV9wdXQgOiBwdWJs aWMgbG9jYWxlOjpmYWNldCwgcHVibGljIF9fbnVtX2Jhc2UKICAgIHsKICAgIHB1YmxpYzoKCiAg ICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBfT3V0SXRlciBpdGVy X3R5cGU7CgogICAgICBzdGF0aWMgbG9jYWxlOjppZCBpZDsKCiAgICAgIGV4cGxpY2l0CiAgICAg IG51bV9wdXQoc2l6ZV90IF9fcmVmcyA9IDApIDogbG9jYWxlOjpmYWNldChfX3JlZnMpIHsgfQoK ICAgICAgaXRlcl90eXBlCiAgICAgIHB1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19mLCBj aGFyX3R5cGUgX19maWxsLCBib29sIF9fdikgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9f cHV0KF9fcywgX19mLCBfX2ZpbGwsIF9fdik7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBwdXQo aXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9fZiwgY2hhcl90eXBlIF9fZmlsbCwgbG9uZyBfX3Yp IGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3B1dChfX3MsIF9fZiwgX19maWxsLCBfX3Yp OyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBf X2YsIGNoYXJfdHlwZSBfX2ZpbGwsCiAgICAgICAgICB1bnNpZ25lZCBsb25nIF9fdikgY29uc3QK ICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fcHV0KF9fcywgX19mLCBfX2ZpbGwsIF9fdik7IH0KCgog ICAgICBpdGVyX3R5cGUKICAgICAgcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2YsIGNo YXJfdHlwZSBfX2ZpbGwsIGxvbmcgbG9uZyBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMt PmRvX3B1dChfX3MsIF9fZiwgX19maWxsLCBfX3YpOyB9CgogICAgICBpdGVyX3R5cGUKICAgICAg cHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2YsIGNoYXJfdHlwZSBfX2ZpbGwsCiAgICAg ICAgICB1bnNpZ25lZCBsb25nIGxvbmcgX192KSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5k b19wdXQoX19zLCBfX2YsIF9fZmlsbCwgX192KTsgfQoKCiAgICAgIGl0ZXJfdHlwZQogICAgICBw dXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9fZiwgY2hhcl90eXBlIF9fZmlsbCwgZG91Ymxl IF9fdikgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fcHV0KF9fcywgX19mLCBfX2ZpbGws IF9fdik7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBwdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jh c2UmIF9fZiwgY2hhcl90eXBlIF9fZmlsbCwKICAgICAgICAgIGxvbmcgZG91YmxlIF9fdikgY29u c3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fcHV0KF9fcywgX19mLCBfX2ZpbGwsIF9fdik7IH0K CiAgICAgIGl0ZXJfdHlwZQogICAgICBwdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9fZiwg Y2hhcl90eXBlIF9fZmlsbCwKICAgICAgICAgIGNvbnN0IHZvaWQqIF9fdikgY29uc3QKICAgICAg eyByZXR1cm4gdGhpcy0+ZG9fcHV0KF9fcywgX19mLCBfX2ZpbGwsIF9fdik7IH0KCiAgICBwcm90 ZWN0ZWQ6CiAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9WYWx1ZVQ+CiAgICAgICAgaXRlcl90eXBl CiAgICAgICAgX01fY29udmVydF9mbG9hdChpdGVyX3R5cGUsIGlvc19iYXNlJiBfX2lvLCBjaGFy X3R5cGUgX19maWxsLAogICAgICAgICAgICAgICAgICAgICAgICAgY2hhciBfX21vZCwgX1ZhbHVl VCBfX3YpIGNvbnN0OwoKICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1ZhbHVlVD4KICAgICAgICBp dGVyX3R5cGUKICAgICAgICBfTV9jb252ZXJ0X2ludChpdGVyX3R5cGUsIGlvc19iYXNlJiBfX2lv LCBjaGFyX3R5cGUgX19maWxsLAogICAgICAgICAgICAgICAgICAgICAgIGNoYXIgX19tb2QsIGNo YXIgX19tb2RsLCBfVmFsdWVUIF9fdikgY29uc3Q7CgogICAgICBpdGVyX3R5cGUKICAgICAgX01f d2lkZW5fZmxvYXQoaXRlcl90eXBlLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwg Y2hhciogX19jcywKICAgICAgICAgICAgICAgICAgICAgaW50IF9fbGVuKSBjb25zdDsKCiAgICAg IGl0ZXJfdHlwZQogICAgICBfTV93aWRlbl9pbnQoaXRlcl90eXBlLCBpb3NfYmFzZSYgX19pbywg Y2hhcl90eXBlIF9fZmlsbCwgY2hhciogX19jcywKICAgICAgICAgICAgICAgICAgIGludCBfX2xl bikgY29uc3Q7CgogICAgICBpdGVyX3R5cGUKICAgICAgX01faW5zZXJ0KGl0ZXJfdHlwZSwgaW9z X2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsCiAgICAgICAgICAgICAgICBjb25zdCBjaGFy X3R5cGUqIF9fd3MsIGludCBfX2xlbikgY29uc3Q7CgogICAgICB2aXJ0dWFsCiAgICAgIH5udW1f cHV0KCkgeyB9OwoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fcHV0KGl0ZXJfdHlw ZSwgaW9zX2Jhc2UmLCBjaGFyX3R5cGUgX19maWxsLCBib29sIF9fdikgY29uc3Q7CgogICAgICB2 aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19wdXQoaXRlcl90eXBlLCBpb3NfYmFzZSYsIGNoYXJf dHlwZSBfX2ZpbGwsIGxvbmcgX192KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAg ICAgIGRvX3B1dChpdGVyX3R5cGUsIGlvc19iYXNlJiwgY2hhcl90eXBlIF9fZmlsbCwgdW5zaWdu ZWQgbG9uZykgY29uc3Q7CgoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fcHV0KGl0 ZXJfdHlwZSwgaW9zX2Jhc2UmLCBjaGFyX3R5cGUgX19maWxsLCBsb25nIGxvbmcgX192KSBjb25z dDsKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX3B1dChpdGVyX3R5cGUsIGlvc19i YXNlJiwgY2hhcl90eXBlIF9fZmlsbCwgdW5zaWduZWQgbG9uZyBsb25nKSBjb25zdDsKCgogICAg ICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19wdXQoaXRlcl90eXBlLCBpb3NfYmFzZSYsIGNo YXJfdHlwZSBfX2ZpbGwsIGRvdWJsZSBfX3YpIGNvbnN0OwoKICAgICAgdmlydHVhbCBpdGVyX3R5 cGUKICAgICAgZG9fcHV0KGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBjaGFyX3R5cGUgX19maWxsLCBs b25nIGRvdWJsZSBfX3YpIGNvbnN0OwoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9f cHV0KGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBjaGFyX3R5cGUgX19maWxsLCBjb25zdCB2b2lkKiBf X3YpIGNvbnN0OwogICAgfTsKCiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg X091dEl0ZXI+CiAgICBsb2NhbGU6OmlkIG51bV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OmlkOwoK CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgY2xhc3MgY29sbGF0ZSA6IHB1YmxpYyBs b2NhbGU6OmZhY2V0CiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFy X3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVD4gc3RyaW5nX3R5cGU7Cgog ICAgcHJvdGVjdGVkOgoKCiAgICAgIF9fY19sb2NhbGUgX01fY19sb2NhbGVfY29sbGF0ZTsKCiAg ICBwdWJsaWM6CiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOwoKICAgICAgZXhwbGljaXQKICAg ICAgY29sbGF0ZShzaXplX3QgX19yZWZzID0gMCkKICAgICAgOiBsb2NhbGU6OmZhY2V0KF9fcmVm cykKICAgICAgeyBfTV9jX2xvY2FsZV9jb2xsYXRlID0gX1NfY19sb2NhbGU7IH0KCiAgICAgIGV4 cGxpY2l0CiAgICAgIGNvbGxhdGUoX19jX2xvY2FsZSBfX2Nsb2MsIHNpemVfdCBfX3JlZnMgPSAw KQogICAgICA6IGxvY2FsZTo6ZmFjZXQoX19yZWZzKQogICAgICB7IF9NX2NfbG9jYWxlX2NvbGxh dGUgPSBfU19jbG9uZV9jX2xvY2FsZShfX2Nsb2MpOyB9CgogICAgICBpbnQKICAgICAgY29tcGFy ZShjb25zdCBfQ2hhclQqIF9fbG8xLCBjb25zdCBfQ2hhclQqIF9faGkxLAogICAgICAgICAgICAg IGNvbnN0IF9DaGFyVCogX19sbzIsIGNvbnN0IF9DaGFyVCogX19oaTIpIGNvbnN0CiAgICAgIHsg cmV0dXJuIHRoaXMtPmRvX2NvbXBhcmUoX19sbzEsIF9faGkxLCBfX2xvMiwgX19oaTIpOyB9Cgog ICAgICBzdHJpbmdfdHlwZQogICAgICB0cmFuc2Zvcm0oY29uc3QgX0NoYXJUKiBfX2xvLCBjb25z dCBfQ2hhclQqIF9faGkpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3RyYW5zZm9ybShf X2xvLCBfX2hpKTsgfQoKICAgICAgbG9uZwogICAgICBoYXNoKGNvbnN0IF9DaGFyVCogX19sbywg Y29uc3QgX0NoYXJUKiBfX2hpKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19oYXNoKF9f bG8sIF9faGkpOyB9CgoKICAgICAgaW50CiAgICAgIF9NX2NvbXBhcmUoY29uc3QgX0NoYXJUKiwg Y29uc3QgX0NoYXJUKikgY29uc3Q7CgogICAgICBzaXplX3QKICAgICAgX01fdHJhbnNmb3JtKF9D aGFyVCosIGNvbnN0IF9DaGFyVCosIHNpemVfdCkgY29uc3Q7CgogIHByb3RlY3RlZDoKICAgICAg dmlydHVhbAogICAgICB+Y29sbGF0ZSgpCiAgICAgIHsgX1NfZGVzdHJveV9jX2xvY2FsZShfTV9j X2xvY2FsZV9jb2xsYXRlKTsgfQoKICAgICAgdmlydHVhbCBpbnQKICAgICAgZG9fY29tcGFyZShj b25zdCBfQ2hhclQqIF9fbG8xLCBjb25zdCBfQ2hhclQqIF9faGkxLAogICAgICAgICAgICAgICAg IGNvbnN0IF9DaGFyVCogX19sbzIsIGNvbnN0IF9DaGFyVCogX19oaTIpIGNvbnN0OwoKICAgICAg dmlydHVhbCBzdHJpbmdfdHlwZQogICAgICBkb190cmFuc2Zvcm0oY29uc3QgX0NoYXJUKiBfX2xv LCBjb25zdCBfQ2hhclQqIF9faGkpIGNvbnN0OwoKICAgICAgdmlydHVhbCBsb25nCiAgICAgIGRv X2hhc2goY29uc3QgX0NoYXJUKiBfX2xvLCBjb25zdCBfQ2hhclQqIF9faGkpIGNvbnN0OwogICAg fTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgbG9jYWxlOjppZCBjb2xsYXRlPF9D aGFyVD46OmlkOwoKCiAgdGVtcGxhdGU8PgogICAgaW50CiAgICBjb2xsYXRlPGNoYXI+OjpfTV9j b21wYXJlKGNvbnN0IGNoYXIqLCBjb25zdCBjaGFyKikgY29uc3Q7CgogIHRlbXBsYXRlPD4KICAg IHNpemVfdAogICAgY29sbGF0ZTxjaGFyPjo6X01fdHJhbnNmb3JtKGNoYXIqLCBjb25zdCBjaGFy Kiwgc2l6ZV90KSBjb25zdDsKCgogIHRlbXBsYXRlPD4KICAgIGludAogICAgY29sbGF0ZTx3Y2hh cl90Pjo6X01fY29tcGFyZShjb25zdCB3Y2hhcl90KiwgY29uc3Qgd2NoYXJfdCopIGNvbnN0OwoK ICB0ZW1wbGF0ZTw+CiAgICBzaXplX3QKICAgIGNvbGxhdGU8d2NoYXJfdD46Ol9NX3RyYW5zZm9y bSh3Y2hhcl90KiwgY29uc3Qgd2NoYXJfdCosIHNpemVfdCkgY29uc3Q7CgoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfQ2hhclQ+CiAgICBjbGFzcyBjb2xsYXRlX2J5bmFtZSA6IHB1YmxpYyBjb2xsYXRl PF9DaGFyVD4KICAgIHsKICAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBl OwogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQ+IHN0cmluZ190eXBlOwoKICAgICAg ZXhwbGljaXQKICAgICAgY29sbGF0ZV9ieW5hbWUoY29uc3QgY2hhciogX19zLCBzaXplX3QgX19y ZWZzID0gMCkKICAgICAgOiBjb2xsYXRlPF9DaGFyVD4oX19yZWZzKQogICAgICB7CiAgICAgICAg X1NfZGVzdHJveV9jX2xvY2FsZShfTV9jX2xvY2FsZV9jb2xsYXRlKTsKICAgICAgICBfU19jcmVh dGVfY19sb2NhbGUoX01fY19sb2NhbGVfY29sbGF0ZSwgX19zKTsKICAgICAgfQoKICAgIHByb3Rl Y3RlZDoKICAgICAgdmlydHVhbAogICAgICB+Y29sbGF0ZV9ieW5hbWUoKSB7IH0KICAgIH07CgoK ICBjbGFzcyB0aW1lX2Jhc2UKICB7CiAgcHVibGljOgogICAgZW51bSBkYXRlb3JkZXIgeyBub19v cmRlciwgZG15LCBtZHksIHltZCwgeWRtIH07CiAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No YXJUPgogICAgY2xhc3MgX190aW1lcHVuY3QgOiBwdWJsaWMgbG9jYWxlOjpmYWNldAogICAgewog ICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfQ2hhclQgX19jaGFyX3R5cGU7CiAgICAgIHR5cGVk ZWYgYmFzaWNfc3RyaW5nPF9DaGFyVD4gX19zdHJpbmdfdHlwZTsKCiAgICAgIHN0YXRpYyBsb2Nh bGU6OmlkIGlkOwoKCiAgICAgIHN0YXRpYyBjb25zdCBfQ2hhclQqIF9TX3RpbWV6b25lc1sxNF07 CgogICAgcHJvdGVjdGVkOgogICAgICBfX2NfbG9jYWxlIF9NX2NfbG9jYWxlX3RpbWVwdW5jdDsK ICAgICAgY2hhciogX01fbmFtZV90aW1lcHVuY3Q7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fZGF0 ZV9mb3JtYXQ7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fZGF0ZV9lcmFfZm9ybWF0OwogICAgICBj b25zdCBfQ2hhclQqIF9NX3RpbWVfZm9ybWF0OwogICAgICBjb25zdCBfQ2hhclQqIF9NX3RpbWVf ZXJhX2Zvcm1hdDsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9kYXRlX3RpbWVfZm9ybWF0OwogICAg ICBjb25zdCBfQ2hhclQqIF9NX2RhdGVfdGltZV9lcmFfZm9ybWF0OwogICAgICBjb25zdCBfQ2hh clQqIF9NX2FtOwogICAgICBjb25zdCBfQ2hhclQqIF9NX3BtOwogICAgICBjb25zdCBfQ2hhclQq IF9NX2FtX3BtX2Zvcm1hdDsKCgogICAgICBjb25zdCBfQ2hhclQqIF9NX2RheTE7CiAgICAgIGNv bnN0IF9DaGFyVCogX01fZGF5MjsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9kYXkzOwogICAgICBj b25zdCBfQ2hhclQqIF9NX2RheTQ7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fZGF5NTsKICAgICAg Y29uc3QgX0NoYXJUKiBfTV9kYXk2OwogICAgICBjb25zdCBfQ2hhclQqIF9NX2RheTc7CgoKICAg ICAgY29uc3QgX0NoYXJUKiBfTV9kYXlfYTE7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fZGF5X2Ey OwogICAgICBjb25zdCBfQ2hhclQqIF9NX2RheV9hMzsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9k YXlfYTQ7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fZGF5X2E1OwogICAgICBjb25zdCBfQ2hhclQq IF9NX2RheV9hNjsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9kYXlfYTc7CgoKICAgICAgY29uc3Qg X0NoYXJUKiBfTV9tb250aDAxOwogICAgICBjb25zdCBfQ2hhclQqIF9NX21vbnRoMDI7CiAgICAg IGNvbnN0IF9DaGFyVCogX01fbW9udGgwMzsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9tb250aDA0 OwogICAgICBjb25zdCBfQ2hhclQqIF9NX21vbnRoMDU7CiAgICAgIGNvbnN0IF9DaGFyVCogX01f bW9udGgwNjsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9tb250aDA3OwogICAgICBjb25zdCBfQ2hh clQqIF9NX21vbnRoMDg7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fbW9udGgwOTsKICAgICAgY29u c3QgX0NoYXJUKiBfTV9tb250aDEwOwogICAgICBjb25zdCBfQ2hhclQqIF9NX21vbnRoMTE7CiAg ICAgIGNvbnN0IF9DaGFyVCogX01fbW9udGgxMjsKCgogICAgICBjb25zdCBfQ2hhclQqIF9NX21v bnRoX2EwMTsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9tb250aF9hMDI7CiAgICAgIGNvbnN0IF9D aGFyVCogX01fbW9udGhfYTAzOwogICAgICBjb25zdCBfQ2hhclQqIF9NX21vbnRoX2EwNDsKICAg ICAgY29uc3QgX0NoYXJUKiBfTV9tb250aF9hMDU7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fbW9u dGhfYTA2OwogICAgICBjb25zdCBfQ2hhclQqIF9NX21vbnRoX2EwNzsKICAgICAgY29uc3QgX0No YXJUKiBfTV9tb250aF9hMDg7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fbW9udGhfYTA5OwogICAg ICBjb25zdCBfQ2hhclQqIF9NX21vbnRoX2ExMDsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9tb250 aF9hMTE7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fbW9udGhfYTEyOwoKICAgIHB1YmxpYzoKICAg ICAgZXhwbGljaXQKICAgICAgX190aW1lcHVuY3Qoc2l6ZV90IF9fcmVmcyA9IDApOwoKICAgICAg ZXhwbGljaXQKICAgICAgX190aW1lcHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MsIGNvbnN0IGNoYXIq IF9fcywgc2l6ZV90IF9fcmVmcyA9IDApOwoKICAgICAgdm9pZAogICAgICBfTV9wdXQoX0NoYXJU KiBfX3MsIHNpemVfdCBfX21heGxlbiwgY29uc3QgX0NoYXJUKiBfX2Zvcm1hdCwKICAgICAgICAg ICAgIGNvbnN0IHRtKiBfX3RtKSBjb25zdDsKCiAgICAgIHZvaWQKICAgICAgX01fZGF0ZV9mb3Jt YXRzKGNvbnN0IF9DaGFyVCoqIF9fZGF0ZSkgY29uc3QKICAgICAgewoKICAgICAgICBfX2RhdGVb MF0gPSBfTV9kYXRlX2Zvcm1hdDsKICAgICAgICBfX2RhdGVbMV0gPSBfTV9kYXRlX2VyYV9mb3Jt YXQ7CiAgICAgIH0KCiAgICAgIHZvaWQKICAgICAgX01fdGltZV9mb3JtYXRzKGNvbnN0IF9DaGFy VCoqIF9fdGltZSkgY29uc3QKICAgICAgewoKICAgICAgICBfX3RpbWVbMF0gPSBfTV90aW1lX2Zv cm1hdDsKICAgICAgICBfX3RpbWVbMV0gPSBfTV90aW1lX2VyYV9mb3JtYXQ7CiAgICAgIH0KCiAg ICAgIHZvaWQKICAgICAgX01fYW1wbShjb25zdCBfQ2hhclQqKiBfX2FtcG0pIGNvbnN0CiAgICAg IHsKICAgICAgICBfX2FtcG1bMF0gPSBfTV9hbTsKICAgICAgICBfX2FtcG1bMV0gPSBfTV9wbTsK ICAgICAgfQoKICAgICAgdm9pZAogICAgICBfTV9kYXRlX3RpbWVfZm9ybWF0cyhjb25zdCBfQ2hh clQqKiBfX2R0KSBjb25zdAogICAgICB7CgogICAgICAgIF9fZHRbMF0gPSBfTV9kYXRlX3RpbWVf Zm9ybWF0OwogICAgICAgIF9fZHRbMV0gPSBfTV9kYXRlX3RpbWVfZXJhX2Zvcm1hdDsKICAgICAg fQoKICAgICAgdm9pZAogICAgICBfTV9kYXlzKGNvbnN0IF9DaGFyVCoqIF9fZGF5cykgY29uc3QK ICAgICAgewogICAgICAgIF9fZGF5c1swXSA9IF9NX2RheTE7CiAgICAgICAgX19kYXlzWzFdID0g X01fZGF5MjsKICAgICAgICBfX2RheXNbMl0gPSBfTV9kYXkzOwogICAgICAgIF9fZGF5c1szXSA9 IF9NX2RheTQ7CiAgICAgICAgX19kYXlzWzRdID0gX01fZGF5NTsKICAgICAgICBfX2RheXNbNV0g PSBfTV9kYXk2OwogICAgICAgIF9fZGF5c1s2XSA9IF9NX2RheTc7CiAgICAgIH0KCiAgICAgIHZv aWQKICAgICAgX01fZGF5c19hYmJyZXZpYXRlZChjb25zdCBfQ2hhclQqKiBfX2RheXMpIGNvbnN0 CiAgICAgIHsKICAgICAgICBfX2RheXNbMF0gPSBfTV9kYXlfYTE7CiAgICAgICAgX19kYXlzWzFd ID0gX01fZGF5X2EyOwogICAgICAgIF9fZGF5c1syXSA9IF9NX2RheV9hMzsKICAgICAgICBfX2Rh eXNbM10gPSBfTV9kYXlfYTQ7CiAgICAgICAgX19kYXlzWzRdID0gX01fZGF5X2E1OwogICAgICAg IF9fZGF5c1s1XSA9IF9NX2RheV9hNjsKICAgICAgICBfX2RheXNbNl0gPSBfTV9kYXlfYTc7CiAg ICAgIH0KCiAgICAgIHZvaWQKICAgICAgX01fbW9udGhzKGNvbnN0IF9DaGFyVCoqIF9fbW9udGhz KSBjb25zdAogICAgICB7CiAgICAgICAgX19tb250aHNbMF0gPSBfTV9tb250aDAxOwogICAgICAg IF9fbW9udGhzWzFdID0gX01fbW9udGgwMjsKICAgICAgICBfX21vbnRoc1syXSA9IF9NX21vbnRo MDM7CiAgICAgICAgX19tb250aHNbM10gPSBfTV9tb250aDA0OwogICAgICAgIF9fbW9udGhzWzRd ID0gX01fbW9udGgwNTsKICAgICAgICBfX21vbnRoc1s1XSA9IF9NX21vbnRoMDY7CiAgICAgICAg X19tb250aHNbNl0gPSBfTV9tb250aDA3OwogICAgICAgIF9fbW9udGhzWzddID0gX01fbW9udGgw ODsKICAgICAgICBfX21vbnRoc1s4XSA9IF9NX21vbnRoMDk7CiAgICAgICAgX19tb250aHNbOV0g PSBfTV9tb250aDEwOwogICAgICAgIF9fbW9udGhzWzEwXSA9IF9NX21vbnRoMTE7CiAgICAgICAg X19tb250aHNbMTFdID0gX01fbW9udGgxMjsKICAgICAgfQoKICAgICAgdm9pZAogICAgICBfTV9t b250aHNfYWJicmV2aWF0ZWQoY29uc3QgX0NoYXJUKiogX19tb250aHMpIGNvbnN0CiAgICAgIHsK ICAgICAgICBfX21vbnRoc1swXSA9IF9NX21vbnRoX2EwMTsKICAgICAgICBfX21vbnRoc1sxXSA9 IF9NX21vbnRoX2EwMjsKICAgICAgICBfX21vbnRoc1syXSA9IF9NX21vbnRoX2EwMzsKICAgICAg ICBfX21vbnRoc1szXSA9IF9NX21vbnRoX2EwNDsKICAgICAgICBfX21vbnRoc1s0XSA9IF9NX21v bnRoX2EwNTsKICAgICAgICBfX21vbnRoc1s1XSA9IF9NX21vbnRoX2EwNjsKICAgICAgICBfX21v bnRoc1s2XSA9IF9NX21vbnRoX2EwNzsKICAgICAgICBfX21vbnRoc1s3XSA9IF9NX21vbnRoX2Ew ODsKICAgICAgICBfX21vbnRoc1s4XSA9IF9NX21vbnRoX2EwOTsKICAgICAgICBfX21vbnRoc1s5 XSA9IF9NX21vbnRoX2ExMDsKICAgICAgICBfX21vbnRoc1sxMF0gPSBfTV9tb250aF9hMTE7CiAg ICAgICAgX19tb250aHNbMTFdID0gX01fbW9udGhfYTEyOwogICAgICB9CgogICAgcHJvdGVjdGVk OgogICAgICB2aXJ0dWFsCiAgICAgIH5fX3RpbWVwdW5jdCgpOwoKCiAgICAgIHZvaWQKICAgICAg X01faW5pdGlhbGl6ZV90aW1lcHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MgPSBfX251bGwpOwogICAg fTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgbG9jYWxlOjppZCBfX3RpbWVwdW5j dDxfQ2hhclQ+OjppZDsKCgogIHRlbXBsYXRlPD4KICAgIGNvbnN0IGNoYXIqCiAgICBfX3RpbWVw dW5jdDxjaGFyPjo6X1NfdGltZXpvbmVzWzE0XTsKCiAgdGVtcGxhdGU8PgogICAgdm9pZAogICAg X190aW1lcHVuY3Q8Y2hhcj46Ol9NX2luaXRpYWxpemVfdGltZXB1bmN0KF9fY19sb2NhbGUgX19j bG9jKTsKCiAgdGVtcGxhdGU8PgogICAgdm9pZAogICAgX190aW1lcHVuY3Q8Y2hhcj46Ol9NX3B1 dChjaGFyKiwgc2l6ZV90LCBjb25zdCBjaGFyKiwgY29uc3QgdG0qKSBjb25zdDsKCgogIHRlbXBs YXRlPD4KICAgIGNvbnN0IHdjaGFyX3QqCiAgICBfX3RpbWVwdW5jdDx3Y2hhcl90Pjo6X1NfdGlt ZXpvbmVzWzE0XTsKCiAgdGVtcGxhdGU8PgogICAgdm9pZAogICAgX190aW1lcHVuY3Q8d2NoYXJf dD46Ol9NX2luaXRpYWxpemVfdGltZXB1bmN0KF9fY19sb2NhbGUgX19jbG9jKTsKCiAgdGVtcGxh dGU8PgogICAgdm9pZAogICAgX190aW1lcHVuY3Q8d2NoYXJfdD46Ol9NX3B1dCh3Y2hhcl90Kiwg c2l6ZV90LCBjb25zdCB3Y2hhcl90KiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Y29uc3QgdG0qKSBjb25zdDsKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBjb25z dCBfQ2hhclQqIF9fdGltZXB1bmN0PF9DaGFyVD46Ol9TX3RpbWV6b25lc1sxNF07CgoKIyAxICIv dXNyL2luY2x1ZGUvYysrLzMuMi9pMzg2LWxpbnV4L2JpdHMvdGltZV9tZW1iZXJzLmgiIDEgMwoj IDM3ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9pMzg2LWxpbnV4L2JpdHMvdGltZV9tZW1iZXJzLmgi IDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBfX3RpbWVwdW5jdDxfQ2hhclQ+Ojpf X3RpbWVwdW5jdChzaXplX3QgX19yZWZzKQogICAgOiBsb2NhbGU6OmZhY2V0KF9fcmVmcykKICAg IHsKCgoKICAgICAgX01faW5pdGlhbGl6ZV90aW1lcHVuY3QoKTsKICAgIH0KCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0NoYXJUPgogICAgX190aW1lcHVuY3Q8X0NoYXJUPjo6X190aW1lcHVuY3QoX19j X2xvY2FsZSBfX2Nsb2MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z dCBjaGFyKiBfX3MsIHNpemVfdCBfX3JlZnMpCiAgICA6IGxvY2FsZTo6ZmFjZXQoX19yZWZzKQog ICAgewoKCgoKICAgICAgX01faW5pdGlhbGl6ZV90aW1lcHVuY3QoX19jbG9jKTsKICAgIH0KCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgX190aW1lcHVuY3Q8X0NoYXJUPjo6fl9fdGlt ZXB1bmN0KCkKICAgIHsKCgoKCiAgICAgIF9TX2Rlc3Ryb3lfY19sb2NhbGUoX01fY19sb2NhbGVf dGltZXB1bmN0KTsKICAgIH0KIyAxMTU4ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL2xvY2Fs ZV9mYWNldHMuaCIgMiAzCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0lu SXRlcj4KICAgIGNsYXNzIHRpbWVfZ2V0IDogcHVibGljIGxvY2FsZTo6ZmFjZXQsIHB1YmxpYyB0 aW1lX2Jhc2UKICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlw ZTsKICAgICAgdHlwZWRlZiBfSW5JdGVyIGl0ZXJfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19z dHJpbmc8X0NoYXJUPiBfX3N0cmluZ190eXBlOwoKICAgICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7 CgogICAgICBleHBsaWNpdAogICAgICB0aW1lX2dldChzaXplX3QgX19yZWZzID0gMCkKICAgICAg OiBsb2NhbGU6OmZhY2V0IChfX3JlZnMpIHsgfQoKICAgICAgZGF0ZW9yZGVyCiAgICAgIGRhdGVf b3JkZXIoKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19kYXRlX29yZGVyKCk7IH0KCiAg ICAgIGl0ZXJfdHlwZQogICAgICBnZXRfdGltZShpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBf X2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBf X2VyciwgdG0qIF9fdG0pIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dldF90aW1lKF9f YmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9fdG0pOyB9CgogICAgICBpdGVyX3R5cGUKICAgICAg Z2V0X2RhdGUoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lv LAogICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3RtKSBjb25z dAogICAgICB7IHJldHVybiB0aGlzLT5kb19nZXRfZGF0ZShfX2JlZywgX19lbmQsIF9faW8sIF9f ZXJyLCBfX3RtKTsgfQoKICAgICAgaXRlcl90eXBlCiAgICAgIGdldF93ZWVrZGF5KGl0ZXJfdHlw ZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICAgICAg ICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB0bSogX190bSkgY29uc3QKICAgICAgeyByZXR1 cm4gdGhpcy0+ZG9fZ2V0X3dlZWtkYXkoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX190bSk7 IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBnZXRfbW9udGhuYW1lKGl0ZXJfdHlwZSBfX2JlZywg aXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICAgICAgICAgICBpb3Nf YmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3RtKSBjb25zdAogICAgICB7IHJldHVybiB0aGlz LT5kb19nZXRfbW9udGhuYW1lKF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9fdG0pOyB9Cgog ICAgICBpdGVyX3R5cGUKICAgICAgZ2V0X3llYXIoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUg X19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYg X19lcnIsIHRtKiBfX3RtKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19nZXRfeWVhcihf X2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3RtKTsgfQoKICAgIHByb3RlY3RlZDoKICAgICAg dmlydHVhbAogICAgICB+dGltZV9nZXQoKSB7IH0KCiAgICAgIHZpcnR1YWwgZGF0ZW9yZGVyCiAg ICAgIGRvX2RhdGVfb3JkZXIoKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAg IGRvX2dldF90aW1lKGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYg X19pbywKICAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB0bSogX190 bSkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXRfZGF0ZShpdGVy X3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAg ICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdG0qIF9fdG0pIGNvbnN0OwoKICAgICAg dmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fZ2V0X3dlZWtkYXkoaXRlcl90eXBlIF9fYmVnLCBp dGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiwKICAgICAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6 Omlvc3RhdGUmIF9fZXJyLCB0bSogX190bSkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlw ZQogICAgICBkb19nZXRfbW9udGhuYW1lKGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5k LCBpb3NfYmFzZSYsCiAgICAgICAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9f ZXJyLCB0bSogX190bSkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19n ZXRfeWVhcihpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8s CiAgICAgICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdG0qIF9fdG0pIGNv bnN0OwoKCiAgICAgIHZvaWQKICAgICAgX01fZXh0cmFjdF9udW0oaXRlcl90eXBlJiBfX2JlZywg aXRlcl90eXBlJiBfX2VuZCwgaW50JiBfX21lbWJlciwKICAgICAgICAgICAgICAgICAgICAgaW50 IF9fbWluLCBpbnQgX19tYXgsIHNpemVfdCBfX2xlbiwKICAgICAgICAgICAgICAgICAgICAgY29u c3QgY3R5cGU8X0NoYXJUPiYgX19jdHlwZSwKICAgICAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6 Omlvc3RhdGUmIF9fZXJyKSBjb25zdDsKCgoKICAgICAgdm9pZAogICAgICBfTV9leHRyYWN0X25h bWUoaXRlcl90eXBlJiBfX2JlZywgaXRlcl90eXBlJiBfX2VuZCwgaW50JiBfX21lbWJlciwKICAg ICAgICAgICAgICAgICAgICAgIGNvbnN0IF9DaGFyVCoqIF9fbmFtZXMsIHNpemVfdCBfX2luZGV4 bGVuLAogICAgICAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyKSBjb25z dDsKCgogICAgICB2b2lkCiAgICAgIF9NX2V4dHJhY3RfdmlhX2Zvcm1hdChpdGVyX3R5cGUmIF9f YmVnLCBpdGVyX3R5cGUmIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdG0qIF9fdG0sCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICBjb25zdCBfQ2hhclQqIF9fZm9ybWF0KSBjb25zdDsKICAgIH07Cgog IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIGxvY2FsZTo6 aWQgdGltZV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6aWQ7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D aGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIGNsYXNzIHRpbWVfZ2V0X2J5bmFtZSA6IHB1Ymxp YyB0aW1lX2dldDxfQ2hhclQsIF9Jbkl0ZXI+CiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBl ZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgX0luSXRlciBpdGVyX3R5cGU7Cgog ICAgICBleHBsaWNpdAogICAgICB0aW1lX2dldF9ieW5hbWUoY29uc3QgY2hhciosIHNpemVfdCBf X3JlZnMgPSAwKQogICAgICA6IHRpbWVfZ2V0PF9DaGFyVCwgX0luSXRlcj4oX19yZWZzKSB7IH0K CiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfnRpbWVfZ2V0X2J5bmFtZSgpIHsg fQogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4K ICAgIGNsYXNzIHRpbWVfcHV0IDogcHVibGljIGxvY2FsZTo6ZmFjZXQsIHB1YmxpYyB0aW1lX2Jh c2UKICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAg ICAgdHlwZWRlZiBfT3V0SXRlciBpdGVyX3R5cGU7CgogICAgICBzdGF0aWMgbG9jYWxlOjppZCBp ZDsKCiAgICAgIGV4cGxpY2l0CiAgICAgIHRpbWVfcHV0KHNpemVfdCBfX3JlZnMgPSAwKQogICAg ICA6IGxvY2FsZTo6ZmFjZXQoX19yZWZzKSB7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBwdXQo aXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsIGNvbnN0IHRt KiBfX3RtLAogICAgICAgICAgY29uc3QgX0NoYXJUKiBfX2JlZywgY29uc3QgX0NoYXJUKiBfX2Vu ZCkgY29uc3Q7CgogICAgICBpdGVyX3R5cGUKICAgICAgcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19i YXNlJiBfX2lvLCBjaGFyX3R5cGUgX19maWxsLAogICAgICAgICAgY29uc3QgdG0qIF9fdG0sIGNo YXIgX19mb3JtYXQsIGNoYXIgX19tb2QgPSAwKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5k b19wdXQoX19zLCBfX2lvLCBfX2ZpbGwsIF9fdG0sIF9fZm9ybWF0LCBfX21vZCk7IH0KCiAgICBw cm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfnRpbWVfcHV0KCkKICAgICAgeyB9CgogICAg ICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19wdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2Um IF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsIGNvbnN0IHRtKiBfX3RtLAogICAgICAgICAgICAgY2hh ciBfX2Zvcm1hdCwgY2hhciBfX21vZCkgY29uc3Q7CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgbG9jYWxlOjppZCB0aW1lX3B1dDxfQ2hh clQsIF9PdXRJdGVyPjo6aWQ7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg X091dEl0ZXI+CiAgICBjbGFzcyB0aW1lX3B1dF9ieW5hbWUgOiBwdWJsaWMgdGltZV9wdXQ8X0No YXJULCBfT3V0SXRlcj4KICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNo YXJfdHlwZTsKICAgICAgdHlwZWRlZiBfT3V0SXRlciBpdGVyX3R5cGU7CgogICAgICBleHBsaWNp dAogICAgICB0aW1lX3B1dF9ieW5hbWUoY29uc3QgY2hhciogLCBzaXplX3QgX19yZWZzID0gMCkK ICAgICAgOiB0aW1lX3B1dDxfQ2hhclQsIF9PdXRJdGVyPihfX3JlZnMpCiAgICAgIHsgfTsKCiAg ICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfnRpbWVfcHV0X2J5bmFtZSgpIHsgfQog ICAgfTsKCgogIGNsYXNzIG1vbmV5X2Jhc2UKICB7CiAgcHVibGljOgogICAgZW51bSBwYXJ0IHsg bm9uZSwgc3BhY2UsIHN5bWJvbCwgc2lnbiwgdmFsdWUgfTsKICAgIHN0cnVjdCBwYXR0ZXJuIHsg Y2hhciBmaWVsZFs0XTsgfTsKCiAgICBzdGF0aWMgY29uc3QgcGF0dGVybiBfU19kZWZhdWx0X3Bh dHRlcm47CgoKCiAgICBzdGF0aWMgcGF0dGVybgogICAgX1NfY29uc3RydWN0X3BhdHRlcm4oY2hh ciBfX3ByZWNlZGVzLCBjaGFyIF9fc3BhY2UsIGNoYXIgX19wb3NuKTsKICB9OwoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfQ2hhclQsIGJvb2wgX0ludGw+CiAgICBjbGFzcyBtb25leXB1bmN0IDogcHVi bGljIGxvY2FsZTo6ZmFjZXQsIHB1YmxpYyBtb25leV9iYXNlCiAgICB7CiAgICBwdWJsaWM6Cgog ICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5n PF9DaGFyVD4gc3RyaW5nX3R5cGU7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpbnRsID0gX0lu dGw7CiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOwoKICAgIHByaXZhdGU6CiAgICAgIGNvbnN0 IGNoYXIqIF9NX2dyb3VwaW5nOwogICAgICBjaGFyX3R5cGUgX01fZGVjaW1hbF9wb2ludDsKICAg ICAgY2hhcl90eXBlIF9NX3Rob3VzYW5kc19zZXA7CiAgICAgIGNvbnN0IGNoYXJfdHlwZSogX01f Y3Vycl9zeW1ib2w7CiAgICAgIGNvbnN0IGNoYXJfdHlwZSogX01fcG9zaXRpdmVfc2lnbjsKICAg ICAgY29uc3QgY2hhcl90eXBlKiBfTV9uZWdhdGl2ZV9zaWduOwogICAgICBpbnQgX01fZnJhY19k aWdpdHM7CiAgICAgIHBhdHRlcm4gX01fcG9zX2Zvcm1hdDsKICAgICAgcGF0dGVybiBfTV9uZWdf Zm9ybWF0OwoKICAgIHB1YmxpYzoKICAgICAgZXhwbGljaXQKICAgICAgbW9uZXlwdW5jdChzaXpl X3QgX19yZWZzID0gMCkgOiBsb2NhbGU6OmZhY2V0KF9fcmVmcykKICAgICAgeyBfTV9pbml0aWFs aXplX21vbmV5cHVuY3QoKTsgfQoKICAgICAgZXhwbGljaXQKICAgICAgbW9uZXlwdW5jdChfX2Nf bG9jYWxlIF9fY2xvYywgY29uc3QgY2hhciogX19zLCBzaXplX3QgX19yZWZzID0gMCkKICAgICAg OiBsb2NhbGU6OmZhY2V0KF9fcmVmcykKICAgICAgeyBfTV9pbml0aWFsaXplX21vbmV5cHVuY3Qo X19jbG9jLCBfX3MpOyB9CgogICAgICBjaGFyX3R5cGUKICAgICAgZGVjaW1hbF9wb2ludCgpIGNv bnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2RlY2ltYWxfcG9pbnQoKTsgfQoKICAgICAgY2hh cl90eXBlCiAgICAgIHRob3VzYW5kc19zZXAoKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5k b190aG91c2FuZHNfc2VwKCk7IH0KCiAgICAgIHN0cmluZwogICAgICBncm91cGluZygpIGNvbnN0 CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dyb3VwaW5nKCk7IH0KCiAgICAgIHN0cmluZ190eXBl CiAgICAgIGN1cnJfc3ltYm9sKCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fY3Vycl9z eW1ib2woKTsgfQoKICAgICAgc3RyaW5nX3R5cGUKICAgICAgcG9zaXRpdmVfc2lnbigpIGNvbnN0 CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3Bvc2l0aXZlX3NpZ24oKTsgfQoKICAgICAgc3RyaW5n X3R5cGUKICAgICAgbmVnYXRpdmVfc2lnbigpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRv X25lZ2F0aXZlX3NpZ24oKTsgfQoKICAgICAgaW50CiAgICAgIGZyYWNfZGlnaXRzKCkgY29uc3QK ICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZnJhY19kaWdpdHMoKTsgfQoKICAgICAgcGF0dGVybgog ICAgICBwb3NfZm9ybWF0KCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fcG9zX2Zvcm1h dCgpOyB9CgogICAgICBwYXR0ZXJuCiAgICAgIG5lZ19mb3JtYXQoKSBjb25zdAogICAgICB7IHJl dHVybiB0aGlzLT5kb19uZWdfZm9ybWF0KCk7IH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1 YWwKICAgICAgfm1vbmV5cHVuY3QoKTsKCiAgICAgIHZpcnR1YWwgY2hhcl90eXBlCiAgICAgIGRv X2RlY2ltYWxfcG9pbnQoKSBjb25zdAogICAgICB7IHJldHVybiBfTV9kZWNpbWFsX3BvaW50OyB9 CgogICAgICB2aXJ0dWFsIGNoYXJfdHlwZQogICAgICBkb190aG91c2FuZHNfc2VwKCkgY29uc3QK ICAgICAgeyByZXR1cm4gX01fdGhvdXNhbmRzX3NlcDsgfQoKICAgICAgdmlydHVhbCBzdHJpbmcK ICAgICAgZG9fZ3JvdXBpbmcoKSBjb25zdAogICAgICB7IHJldHVybiBfTV9ncm91cGluZzsgfQoK ICAgICAgdmlydHVhbCBzdHJpbmdfdHlwZQogICAgICBkb19jdXJyX3N5bWJvbCgpIGNvbnN0CiAg ICAgIHsgcmV0dXJuIF9NX2N1cnJfc3ltYm9sOyB9CgogICAgICB2aXJ0dWFsIHN0cmluZ190eXBl CiAgICAgIGRvX3Bvc2l0aXZlX3NpZ24oKSBjb25zdAogICAgICB7IHJldHVybiBfTV9wb3NpdGl2 ZV9zaWduOyB9CgogICAgICB2aXJ0dWFsIHN0cmluZ190eXBlCiAgICAgIGRvX25lZ2F0aXZlX3Np Z24oKSBjb25zdAogICAgICB7IHJldHVybiBfTV9uZWdhdGl2ZV9zaWduOyB9CgogICAgICB2aXJ0 dWFsIGludAogICAgICBkb19mcmFjX2RpZ2l0cygpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX2Zy YWNfZGlnaXRzOyB9CgogICAgICB2aXJ0dWFsIHBhdHRlcm4KICAgICAgZG9fcG9zX2Zvcm1hdCgp IGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX3Bvc19mb3JtYXQ7IH0KCiAgICAgIHZpcnR1YWwgcGF0 dGVybgogICAgICBkb19uZWdfZm9ybWF0KCkgY29uc3QKICAgICAgeyByZXR1cm4gX01fbmVnX2Zv cm1hdDsgfQoKCiAgICAgICB2b2lkCiAgICAgICBfTV9pbml0aWFsaXplX21vbmV5cHVuY3QoX19j X2xvY2FsZSBfX2Nsb2MgPSBfX251bGwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Y29uc3QgY2hhciogX19uYW1lID0gX19udWxsKTsKICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1l IF9DaGFyVCwgYm9vbCBfSW50bD4KICAgIGxvY2FsZTo6aWQgbW9uZXlwdW5jdDxfQ2hhclQsIF9J bnRsPjo6aWQ7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgYm9vbCBfSW50bD4KICAgIGNv bnN0IGJvb2wgbW9uZXlwdW5jdDxfQ2hhclQsIF9JbnRsPjo6aW50bDsKCiAgdGVtcGxhdGU8Pgog ICAgbW9uZXlwdW5jdDxjaGFyLCB0cnVlPjo6fm1vbmV5cHVuY3QoKTsKCiAgdGVtcGxhdGU8Pgog ICAgbW9uZXlwdW5jdDxjaGFyLCBmYWxzZT46On5tb25leXB1bmN0KCk7CgogIHRlbXBsYXRlPD4K ICAgIHZvaWQKICAgIG1vbmV5cHVuY3Q8Y2hhciwgdHJ1ZT46Ol9NX2luaXRpYWxpemVfbW9uZXlw dW5jdChfX2NfbG9jYWxlLCBjb25zdCBjaGFyKik7CgogIHRlbXBsYXRlPD4KICAgIHZvaWQKICAg IG1vbmV5cHVuY3Q8Y2hhciwgZmFsc2U+OjpfTV9pbml0aWFsaXplX21vbmV5cHVuY3QoX19jX2xv Y2FsZSwgY29uc3QgY2hhciopOwoKCiAgdGVtcGxhdGU8PgogICAgbW9uZXlwdW5jdDx3Y2hhcl90 LCB0cnVlPjo6fm1vbmV5cHVuY3QoKTsKCiAgdGVtcGxhdGU8PgogICAgbW9uZXlwdW5jdDx3Y2hh cl90LCBmYWxzZT46On5tb25leXB1bmN0KCk7CgogIHRlbXBsYXRlPD4KICAgIHZvaWQKICAgIG1v bmV5cHVuY3Q8d2NoYXJfdCwgdHJ1ZT46Ol9NX2luaXRpYWxpemVfbW9uZXlwdW5jdChfX2NfbG9j YWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGNvbnN0IGNoYXIqKTsKCiAgdGVtcGxhdGU8PgogICAgdm9pZAogICAgbW9uZXlwdW5jdDx3 Y2hhcl90LCBmYWxzZT46Ol9NX2luaXRpYWxpemVfbW9uZXlwdW5jdChfX2NfbG9jYWxlLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z dCBjaGFyKik7CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIGJvb2wgX0ludGw+CiAgICBj bGFzcyBtb25leXB1bmN0X2J5bmFtZSA6IHB1YmxpYyBtb25leXB1bmN0PF9DaGFyVCwgX0ludGw+ CiAgICB7CiAgICAgIF9fY19sb2NhbGUgX01fY19sb2NhbGVfbW9uZXlwdW5jdDsKCiAgICBwdWJs aWM6CiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19z dHJpbmc8X0NoYXJUPiBzdHJpbmdfdHlwZTsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGludGwg PSBfSW50bDsKCiAgICAgIGV4cGxpY2l0CiAgICAgIG1vbmV5cHVuY3RfYnluYW1lKGNvbnN0IGNo YXIqIF9fcywgc2l6ZV90IF9fcmVmcyA9IDApCiAgICAgIDogbW9uZXlwdW5jdDxfQ2hhclQsIF9J bnRsPihfX3JlZnMpCiAgICAgIHsKICAgICAgICBfU19jcmVhdGVfY19sb2NhbGUoX01fY19sb2Nh bGVfbW9uZXlwdW5jdCwgX19zKTsKICAgICAgICBfTV9pbml0aWFsaXplX21vbmV5cHVuY3QoX01f Y19sb2NhbGVfbW9uZXlwdW5jdCk7CiAgICAgIH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1 YWwKICAgICAgfm1vbmV5cHVuY3RfYnluYW1lKCkKICAgICAgeyBfU19kZXN0cm95X2NfbG9jYWxl KF9NX2NfbG9jYWxlX21vbmV5cHVuY3QpOyB9CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf Q2hhclQsIGJvb2wgX0ludGw+CiAgICBjb25zdCBib29sIG1vbmV5cHVuY3RfYnluYW1lPF9DaGFy VCwgX0ludGw+OjppbnRsOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9J bkl0ZXI+CiAgICBjbGFzcyBtb25leV9nZXQgOiBwdWJsaWMgbG9jYWxlOjpmYWNldAogICAgewog ICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVm IF9Jbkl0ZXIgaXRlcl90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQ+IHN0 cmluZ190eXBlOwoKICAgICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7CgogICAgICBleHBsaWNpdAog ICAgICBtb25leV9nZXQoc2l6ZV90IF9fcmVmcyA9IDApIDogbG9jYWxlOjpmYWNldChfX3JlZnMp IHsgfQoKICAgICAgaXRlcl90eXBlCiAgICAgIGdldChpdGVyX3R5cGUgX19zLCBpdGVyX3R5cGUg X19lbmQsIGJvb2wgX19pbnRsLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgIGlvc19iYXNlOjpp b3N0YXRlJiBfX2VyciwgbG9uZyBkb3VibGUmIF9fdW5pdHMpIGNvbnN0CiAgICAgIHsgcmV0dXJu IHRoaXMtPmRvX2dldChfX3MsIF9fZW5kLCBfX2ludGwsIF9faW8sIF9fZXJyLCBfX3VuaXRzKTsg fQoKICAgICAgaXRlcl90eXBlCiAgICAgIGdldChpdGVyX3R5cGUgX19zLCBpdGVyX3R5cGUgX19l bmQsIGJvb2wgX19pbnRsLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgIGlvc19iYXNlOjppb3N0 YXRlJiBfX2Vyciwgc3RyaW5nX3R5cGUmIF9fZGlnaXRzKSBjb25zdAogICAgICB7IHJldHVybiB0 aGlzLT5kb19nZXQoX19zLCBfX2VuZCwgX19pbnRsLCBfX2lvLCBfX2VyciwgX19kaWdpdHMpOyB9 CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH5tb25leV9nZXQoKSB7IH0KCiAg ICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX2dldChpdGVyX3R5cGUgX19zLCBpdGVyX3R5 cGUgX19lbmQsIGJvb2wgX19pbnRsLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICAgIGlvc19i YXNlOjppb3N0YXRlJiBfX2VyciwgbG9uZyBkb3VibGUmIF9fdW5pdHMpIGNvbnN0OwoKICAgICAg dmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fZ2V0KGl0ZXJfdHlwZSBfX3MsIGl0ZXJfdHlwZSBf X2VuZCwgYm9vbCBfX2ludGwsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgICAgaW9zX2Jhc2U6 Omlvc3RhdGUmIF9fZXJyLCBzdHJpbmdfdHlwZSYgX19kaWdpdHMpIGNvbnN0OwogICAgfTsKCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgbG9jYWxlOjpp ZCBtb25leV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6aWQ7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D aGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBjbGFzcyBtb25leV9wdXQgOiBwdWJsaWMgbG9j YWxlOjpmYWNldAogICAgewogICAgcHVibGljOgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5 cGU7CiAgICAgIHR5cGVkZWYgX091dEl0ZXIgaXRlcl90eXBlOwogICAgICB0eXBlZGVmIGJhc2lj X3N0cmluZzxfQ2hhclQ+IHN0cmluZ190eXBlOwoKICAgICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7 CgogICAgICBleHBsaWNpdAogICAgICBtb25leV9wdXQoc2l6ZV90IF9fcmVmcyA9IDApIDogbG9j YWxlOjpmYWNldChfX3JlZnMpIHsgfQoKICAgICAgaXRlcl90eXBlCiAgICAgIHB1dChpdGVyX3R5 cGUgX19zLCBib29sIF9faW50bCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICBjaGFyX3R5cGUg X19maWxsLCBsb25nIGRvdWJsZSBfX3VuaXRzKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5k b19wdXQoX19zLCBfX2ludGwsIF9faW8sIF9fZmlsbCwgX191bml0cyk7IH0KCiAgICAgIGl0ZXJf dHlwZQogICAgICBwdXQoaXRlcl90eXBlIF9fcywgYm9vbCBfX2ludGwsIGlvc19iYXNlJiBfX2lv LAogICAgICAgICAgY2hhcl90eXBlIF9fZmlsbCwgY29uc3Qgc3RyaW5nX3R5cGUmIF9fZGlnaXRz KSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19wdXQoX19zLCBfX2ludGwsIF9faW8sIF9f ZmlsbCwgX19kaWdpdHMpOyB9CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH5t b25leV9wdXQoKSB7IH0KCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX3B1dChpdGVy X3R5cGUgX19zLCBib29sIF9faW50bCwgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGws CiAgICAgICAgICAgICBsb25nIGRvdWJsZSBfX3VuaXRzKSBjb25zdDsKCiAgICAgIHZpcnR1YWwg aXRlcl90eXBlCiAgICAgIGRvX3B1dChpdGVyX3R5cGUgX19zLCBib29sIF9faW50bCwgaW9zX2Jh c2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsCiAgICAgICAgICAgICBjb25zdCBzdHJpbmdfdHlw ZSYgX19kaWdpdHMpIGNvbnN0OwogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0 eXBlbmFtZSBfT3V0SXRlcj4KICAgIGxvY2FsZTo6aWQgbW9uZXlfcHV0PF9DaGFyVCwgX091dEl0 ZXI+OjppZDsKCgogIHN0cnVjdCBtZXNzYWdlc19iYXNlCiAgewogICAgdHlwZWRlZiBpbnQgY2F0 YWxvZzsKICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBjbGFzcyBtZXNzYWdl cyA6IHB1YmxpYyBsb2NhbGU6OmZhY2V0LCBwdWJsaWMgbWVzc2FnZXNfYmFzZQogICAgewogICAg cHVibGljOgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIGJh c2ljX3N0cmluZzxfQ2hhclQ+IHN0cmluZ190eXBlOwoKICAgIHByb3RlY3RlZDoKCgogICAgICBf X2NfbG9jYWxlIF9NX2NfbG9jYWxlX21lc3NhZ2VzOwogICAgICBjaGFyKiBfTV9uYW1lX21lc3Nh Z2VzOwoKICAgIHB1YmxpYzoKICAgICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7CgogICAgICBleHBs aWNpdAogICAgICBtZXNzYWdlcyhzaXplX3QgX19yZWZzID0gMCk7CgoKICAgICAgZXhwbGljaXQK ICAgICAgbWVzc2FnZXMoX19jX2xvY2FsZSBfX2Nsb2MsIGNvbnN0IGNoYXIqIF9fcywgc2l6ZV90 IF9fcmVmcyA9IDApOwoKICAgICAgY2F0YWxvZwogICAgICBvcGVuKGNvbnN0IGJhc2ljX3N0cmlu ZzxjaGFyPiYgX19zLCBjb25zdCBsb2NhbGUmIF9fbG9jKSBjb25zdAogICAgICB7IHJldHVybiB0 aGlzLT5kb19vcGVuKF9fcywgX19sb2MpOyB9CgoKICAgICAgY2F0YWxvZwogICAgICBvcGVuKGNv bnN0IGJhc2ljX3N0cmluZzxjaGFyPiYsIGNvbnN0IGxvY2FsZSYsIGNvbnN0IGNoYXIqKSBjb25z dDsKCiAgICAgIHN0cmluZ190eXBlCiAgICAgIGdldChjYXRhbG9nIF9fYywgaW50IF9fc2V0LCBp bnQgX19tc2dpZCwgY29uc3Qgc3RyaW5nX3R5cGUmIF9fcykgY29uc3QKICAgICAgeyByZXR1cm4g dGhpcy0+ZG9fZ2V0KF9fYywgX19zZXQsIF9fbXNnaWQsIF9fcyk7IH0KCiAgICAgIHZvaWQKICAg ICAgY2xvc2UoY2F0YWxvZyBfX2MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2Nsb3Nl KF9fYyk7IH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfm1lc3NhZ2VzKCk7 CgogICAgICB2aXJ0dWFsIGNhdGFsb2cKICAgICAgZG9fb3Blbihjb25zdCBiYXNpY19zdHJpbmc8 Y2hhcj4mLCBjb25zdCBsb2NhbGUmKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgc3RyaW5nX3R5cGUK ICAgICAgZG9fZ2V0KGNhdGFsb2csIGludCwgaW50LCBjb25zdCBzdHJpbmdfdHlwZSYgX19kZmF1 bHQpIGNvbnN0OwoKICAgICAgdmlydHVhbCB2b2lkCiAgICAgIGRvX2Nsb3NlKGNhdGFsb2cpIGNv bnN0OwoKCiAgICAgIGNoYXIqCiAgICAgIF9NX2NvbnZlcnRfdG9fY2hhcihjb25zdCBzdHJpbmdf dHlwZSYgX19tc2cpIGNvbnN0CiAgICAgIHsKCiAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nh c3Q8Y2hhcio+KGNvbnN0X2Nhc3Q8X0NoYXJUKj4oX19tc2cuY19zdHIoKSkpOwogICAgICB9CgoK ICAgICAgc3RyaW5nX3R5cGUKICAgICAgX01fY29udmVydF9mcm9tX2NoYXIoY2hhciogX19tc2cp IGNvbnN0CiAgICAgIHsKCiAgICAgICAgc2l6ZV90IF9fbGVuID0gY2hhcl90cmFpdHM8Y2hhcj46 Omxlbmd0aChfX21zZykgLSAxOwojIDE3MDMgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvbG9j YWxlX2ZhY2V0cy5oIiAzCiAgICAgICAgcmV0dXJuIHN0cmluZ190eXBlKCk7CiAgICAgIH0KICAg ICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBsb2NhbGU6OmlkIG1lc3NhZ2Vz PF9DaGFyVD46OmlkOwoKCiAgdGVtcGxhdGU8PgogICAgc3RyaW5nCiAgICBtZXNzYWdlczxjaGFy Pjo6ZG9fZ2V0KGNhdGFsb2csIGludCwgaW50LCBjb25zdCBzdHJpbmcmKSBjb25zdDsKCgogIHRl bXBsYXRlPD4KICAgIHdzdHJpbmcKICAgIG1lc3NhZ2VzPHdjaGFyX3Q+Ojpkb19nZXQoY2F0YWxv ZywgaW50LCBpbnQsIGNvbnN0IHdzdHJpbmcmKSBjb25zdDsKCgogIHRlbXBsYXRlPHR5cGVuYW1l IF9DaGFyVD4KICAgIGNsYXNzIG1lc3NhZ2VzX2J5bmFtZSA6IHB1YmxpYyBtZXNzYWdlczxfQ2hh clQ+CiAgICB7CiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAg ICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJUPiBzdHJpbmdfdHlwZTsKCiAgICAgIGV4cGxp Y2l0CiAgICAgIG1lc3NhZ2VzX2J5bmFtZShjb25zdCBjaGFyKiBfX3MsIHNpemVfdCBfX3JlZnMg PSAwKTsKCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfm1lc3NhZ2VzX2J5bmFt ZSgpCiAgICAgIHsgfQogICAgfTsKCgojIDEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2kzODYtbGlu dXgvYml0cy9tZXNzYWdlc19tZW1iZXJzLmgiIDEgMwojIDM3ICIvdXNyL2luY2x1ZGUvYysrLzMu Mi9pMzg2LWxpbnV4L2JpdHMvbWVzc2FnZXNfbWVtYmVycy5oIiAzCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0NoYXJUPgogICAgIG1lc3NhZ2VzPF9DaGFyVD46Om1lc3NhZ2VzKHNpemVfdCBfX3JlZnMp CiAgICAgOiBsb2NhbGU6OmZhY2V0KF9fcmVmcykKICAgICB7CgoKCiAgICAgICBfTV9jX2xvY2Fs ZV9tZXNzYWdlcyA9IF9TX2NfbG9jYWxlOwogICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No YXJUPgogICAgIG1lc3NhZ2VzPF9DaGFyVD46Om1lc3NhZ2VzKF9fY19sb2NhbGUgX19jbG9jLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIF9fcywgc2l6ZV90IF9f cmVmcykKICAgICA6IGxvY2FsZTo6ZmFjZXQoX19yZWZzKQogICAgIHsKCgoKCiAgICAgICBfTV9j X2xvY2FsZV9tZXNzYWdlcyA9IF9TX2Nsb25lX2NfbG9jYWxlKF9fY2xvYyk7CiAgICAgfQoKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICB0eXBlbmFtZSBtZXNzYWdlczxfQ2hhclQ+Ojpj YXRhbG9nCiAgICBtZXNzYWdlczxfQ2hhclQ+OjpvcGVuKGNvbnN0IGJhc2ljX3N0cmluZzxjaGFy PiYgX19zLCBjb25zdCBsb2NhbGUmIF9fbG9jLAogICAgICAgICAgICAgICAgICAgICAgICAgICBj b25zdCBjaGFyKiBfX2RpcikgY29uc3QKICAgIHsKICAgICAgYmluZHRleHRkb21haW4oX19zLmNf c3RyKCksIF9fZGlyKTsKICAgICAgcmV0dXJuIHRoaXMtPmRvX29wZW4oX19zLCBfX2xvYyk7CiAg ICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBtZXNzYWdlczxfQ2hhclQ+Ojp+ bWVzc2FnZXMoKQogICAgewoKCgoKICAgICAgX1NfZGVzdHJveV9jX2xvY2FsZShfTV9jX2xvY2Fs ZV9tZXNzYWdlcyk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIHR5cGVu YW1lIG1lc3NhZ2VzPF9DaGFyVD46OmNhdGFsb2cKICAgIG1lc3NhZ2VzPF9DaGFyVD46OmRvX29w ZW4oY29uc3QgYmFzaWNfc3RyaW5nPGNoYXI+JiBfX3MsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGNvbnN0IGxvY2FsZSYpIGNvbnN0CiAgICB7CgoKICAgICAgdGV4dGRvbWFpbihfX3Mu Y19zdHIoKSk7CiAgICAgIHJldHVybiAwOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh clQ+CiAgICB2b2lkCiAgICBtZXNzYWdlczxfQ2hhclQ+Ojpkb19jbG9zZShjYXRhbG9nKSBjb25z dAogICAgeyB9CgoKICAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgIG1lc3NhZ2VzX2J5 bmFtZTxfQ2hhclQ+OjptZXNzYWdlc19ieW5hbWUoY29uc3QgY2hhciogX19zLCBzaXplX3QgX19y ZWZzKQogICAgIDogbWVzc2FnZXM8X0NoYXJUPihfX3JlZnMpCiAgICAgewoKCgoKCgogICAgICAg X1NfZGVzdHJveV9jX2xvY2FsZShfTV9jX2xvY2FsZV9tZXNzYWdlcyk7CiAgICAgICBfU19jcmVh dGVfY19sb2NhbGUoX01fY19sb2NhbGVfbWVzc2FnZXMsIF9fcyk7CiAgICAgfQojIDE3MzkgIi91 c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvbG9jYWxlX2ZhY2V0cy5oIiAyIDMKCgoKCgoKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXNzcGFjZShfQ2hhclQg X19jLCBjb25zdCBsb2NhbGUmIF9fbG9jKQogICAgeyByZXR1cm4gdXNlX2ZhY2V0PGN0eXBlPF9D aGFyVD4gPihfX2xvYykuaXMoY3R5cGVfYmFzZTo6c3BhY2UsIF9fYyk7IH0KCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlzcHJpbnQoX0NoYXJUIF9fYywg Y29uc3QgbG9jYWxlJiBfX2xvYykKICAgIHsgcmV0dXJuIHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ ID4oX19sb2MpLmlzKGN0eXBlX2Jhc2U6OnByaW50LCBfX2MpOyB9CgogIHRlbXBsYXRlPHR5cGVu YW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAgICBpc2NudHJsKF9DaGFyVCBfX2MsIGNvbnN0 IGxvY2FsZSYgX19sb2MpCiAgICB7IHJldHVybiB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9f bG9jKS5pcyhjdHlwZV9iYXNlOjpjbnRybCwgX19jKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf Q2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXN1cHBlcihfQ2hhclQgX19jLCBjb25zdCBsb2Nh bGUmIF9fbG9jKQogICAgeyByZXR1cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYyku aXMoY3R5cGVfYmFzZTo6dXBwZXIsIF9fYyk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU PgogICAgaW5saW5lIGJvb2wgaXNsb3dlcihfQ2hhclQgX19jLCBjb25zdCBsb2NhbGUmIF9fbG9j KQogICAgeyByZXR1cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYykuaXMoY3R5cGVf YmFzZTo6bG93ZXIsIF9fYyk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5s aW5lIGJvb2wKICAgIGlzYWxwaGEoX0NoYXJUIF9fYywgY29uc3QgbG9jYWxlJiBfX2xvYykKICAg IHsgcmV0dXJuIHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpLmlzKGN0eXBlX2Jhc2U6 OmFscGhhLCBfX2MpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBi b29sCiAgICBpc2RpZ2l0KF9DaGFyVCBfX2MsIGNvbnN0IGxvY2FsZSYgX19sb2MpCiAgICB7IHJl dHVybiB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKS5pcyhjdHlwZV9iYXNlOjpkaWdp dCwgX19jKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAog ICAgaXNwdW5jdChfQ2hhclQgX19jLCBjb25zdCBsb2NhbGUmIF9fbG9jKQogICAgeyByZXR1cm4g dXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYykuaXMoY3R5cGVfYmFzZTo6cHVuY3QsIF9f Yyk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlz eGRpZ2l0KF9DaGFyVCBfX2MsIGNvbnN0IGxvY2FsZSYgX19sb2MpCiAgICB7IHJldHVybiB1c2Vf ZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKS5pcyhjdHlwZV9iYXNlOjp4ZGlnaXQsIF9fYyk7 IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlzYWxu dW0oX0NoYXJUIF9fYywgY29uc3QgbG9jYWxlJiBfX2xvYykKICAgIHsgcmV0dXJuIHVzZV9mYWNl dDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpLmlzKGN0eXBlX2Jhc2U6OmFsbnVtLCBfX2MpOyB9Cgog IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAgICBpc2dyYXBoKF9D aGFyVCBfX2MsIGNvbnN0IGxvY2FsZSYgX19sb2MpCiAgICB7IHJldHVybiB1c2VfZmFjZXQ8Y3R5 cGU8X0NoYXJUPiA+KF9fbG9jKS5pcyhjdHlwZV9iYXNlOjpncmFwaCwgX19jKTsgfQoKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgX0NoYXJUCiAgICB0b3VwcGVyKF9DaGFy VCBfX2MsIGNvbnN0IGxvY2FsZSYgX19sb2MpCiAgICB7IHJldHVybiB1c2VfZmFjZXQ8Y3R5cGU8 X0NoYXJUPiA+KF9fbG9jKS50b3VwcGVyKF9fYyk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No YXJUPgogICAgaW5saW5lIF9DaGFyVAogICAgdG9sb3dlcihfQ2hhclQgX19jLCBjb25zdCBsb2Nh bGUmIF9fbG9jKQogICAgeyByZXR1cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYyku dG9sb3dlcihfX2MpOyB9Cn0KIyA0MiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9iYXNpY19p b3MuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0 eXBlbmFtZSBfVHJhaXRzPgogICAgY2xhc3MgYmFzaWNfaW9zIDogcHVibGljIGlvc19iYXNlCiAg ICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5 cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6aW50X3R5cGUgaW50X3R5cGU7CiAgICAgIHR5cGVkZWYg dHlwZW5hbWUgX1RyYWl0czo6cG9zX3R5cGUgcG9zX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5h bWUgX1RyYWl0czo6b2ZmX3R5cGUgb2ZmX3R5cGU7CiAgICAgIHR5cGVkZWYgX1RyYWl0cyB0cmFp dHNfdHlwZTsKCgogICAgICB0eXBlZGVmIGN0eXBlPF9DaGFyVD4gX19jdHlwZV90eXBlOwogICAg ICB0eXBlZGVmIG9zdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJULCBfVHJhaXRzPiBfX29zdHJlYW1i dWZfaXRlcjsKICAgICAgdHlwZWRlZiBudW1fcHV0PF9DaGFyVCwgX19vc3RyZWFtYnVmX2l0ZXI+ IF9fbnVtcHV0X3R5cGU7CiAgICAgIHR5cGVkZWYgaXN0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQs IF9UcmFpdHM+IF9faXN0cmVhbWJ1Zl9pdGVyOwogICAgICB0eXBlZGVmIG51bV9nZXQ8X0NoYXJU LCBfX2lzdHJlYW1idWZfaXRlcj4gX19udW1nZXRfdHlwZTsKCgogICAgcHJvdGVjdGVkOgogICAg ICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4qIF9NX3RpZTsKICAgICAgbXV0YWJsZSBj aGFyX3R5cGUgX01fZmlsbDsKICAgICAgbXV0YWJsZSBib29sIF9NX2ZpbGxfaW5pdDsKICAgICAg YmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4qIF9NX3N0cmVhbWJ1ZjsKCgogICAgICBj b25zdCBfX2N0eXBlX3R5cGUqIF9NX2ZjdHlwZTsKCiAgICAgIGNvbnN0IF9fbnVtcHV0X3R5cGUq IF9NX2ZudW1wdXQ7CgogICAgICBjb25zdCBfX251bWdldF90eXBlKiBfTV9mbnVtZ2V0OwoKICAg IHB1YmxpYzoKICAgICAgb3BlcmF0b3Igdm9pZCooKSBjb25zdAogICAgICB7IHJldHVybiB0aGlz LT5mYWlsKCkgPyAwIDogY29uc3RfY2FzdDxiYXNpY19pb3MqPih0aGlzKTsgfQoKICAgICAgYm9v bAogICAgICBvcGVyYXRvciEoKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5mYWlsKCk7IH0K CiAgICAgIGlvc3RhdGUKICAgICAgcmRzdGF0ZSgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX3N0 cmVhbWJ1Zl9zdGF0ZTsgfQoKICAgICAgdm9pZAogICAgICBjbGVhcihpb3N0YXRlIF9fc3RhdGUg PSBnb29kYml0KTsKCiAgICAgIHZvaWQKICAgICAgc2V0c3RhdGUoaW9zdGF0ZSBfX3N0YXRlKQog ICAgICB7IHRoaXMtPmNsZWFyKHRoaXMtPnJkc3RhdGUoKSB8IF9fc3RhdGUpOyB9CgogICAgICBi b29sCiAgICAgIGdvb2QoKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5yZHN0YXRlKCkgPT0g MDsgfQoKICAgICAgYm9vbAogICAgICBlb2YoKSBjb25zdAogICAgICB7IHJldHVybiAodGhpcy0+ cmRzdGF0ZSgpICYgZW9mYml0KSAhPSAwOyB9CgogICAgICBib29sCiAgICAgIGZhaWwoKSBjb25z dAogICAgICB7IHJldHVybiAodGhpcy0+cmRzdGF0ZSgpICYgKGJhZGJpdCB8IGZhaWxiaXQpKSAh PSAwOyB9CgogICAgICBib29sCiAgICAgIGJhZCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuICh0aGlz LT5yZHN0YXRlKCkgJiBiYWRiaXQpICE9IDA7IH0KCiAgICAgIGlvc3RhdGUKICAgICAgZXhjZXB0 aW9ucygpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX2V4Y2VwdGlvbjsgfQoKICAgICAgdm9pZAog ICAgICBleGNlcHRpb25zKGlvc3RhdGUgX19leGNlcHQpCiAgICAgIHsKICAgICAgICBfTV9leGNl cHRpb24gPSBfX2V4Y2VwdDsKICAgICAgICB0aGlzLT5jbGVhcihfTV9zdHJlYW1idWZfc3RhdGUp OwogICAgICB9CgoKICAgICAgZXhwbGljaXQKICAgICAgYmFzaWNfaW9zKGJhc2ljX3N0cmVhbWJ1 ZjxfQ2hhclQsIF9UcmFpdHM+KiBfX3NiKSA6IGlvc19iYXNlKCkKICAgICAgeyB0aGlzLT5pbml0 KF9fc2IpOyB9CgogICAgICB2aXJ0dWFsCiAgICAgIH5iYXNpY19pb3MoKSB7IH0KCgogICAgICBi YXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4qCiAgICAgIHRpZSgpIGNvbnN0CiAgICAgIHsg cmV0dXJuIF9NX3RpZTsgfQoKICAgICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Kgog ICAgICB0aWUoYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+KiBfX3RpZXN0cikKICAgICAg ewogICAgICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiogX19vbGQgPSBfTV90aWU7 CiAgICAgICAgX01fdGllID0gX190aWVzdHI7CiAgICAgICAgcmV0dXJuIF9fb2xkOwogICAgICB9 CgogICAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPioKICAgICAgcmRidWYoKSBj b25zdAogICAgICB7IHJldHVybiBfTV9zdHJlYW1idWY7IH0KCiAgICAgIGJhc2ljX3N0cmVhbWJ1 ZjxfQ2hhclQsIF9UcmFpdHM+KgogICAgICByZGJ1ZihiYXNpY19zdHJlYW1idWY8X0NoYXJULCBf VHJhaXRzPiogX19zYik7CgogICAgICBiYXNpY19pb3MmCiAgICAgIGNvcHlmbXQoY29uc3QgYmFz aWNfaW9zJiBfX3Jocyk7CgogICAgICBjaGFyX3R5cGUKICAgICAgZmlsbCgpIGNvbnN0CiAgICAg IHsKICAgICAgICBpZiAoIV9NX2ZpbGxfaW5pdCkKICAgICAgICAgIHsKICAgICAgICAgICAgX01f ZmlsbCA9IHRoaXMtPndpZGVuKCcgJyk7CiAgICAgICAgICAgIF9NX2ZpbGxfaW5pdCA9IHRydWU7 CiAgICAgICAgICB9CiAgICAgICAgcmV0dXJuIF9NX2ZpbGw7CiAgICAgIH0KCiAgICAgIGNoYXJf dHlwZQogICAgICBmaWxsKGNoYXJfdHlwZSBfX2NoKQogICAgICB7CiAgICAgICAgY2hhcl90eXBl IF9fb2xkID0gdGhpcy0+ZmlsbCgpOwogICAgICAgIF9NX2ZpbGwgPSBfX2NoOwogICAgICAgIHJl dHVybiBfX29sZDsKICAgICAgfQoKCiAgICAgIGxvY2FsZQogICAgICBpbWJ1ZShjb25zdCBsb2Nh bGUmIF9fbG9jKTsKCiAgICAgIGNoYXIKICAgICAgbmFycm93KGNoYXJfdHlwZSBfX2MsIGNoYXIg X19kZmF1bHQpIGNvbnN0OwoKICAgICAgY2hhcl90eXBlCiAgICAgIHdpZGVuKGNoYXIgX19jKSBj b25zdDsKCiAgICBwcm90ZWN0ZWQ6CgogICAgICBiYXNpY19pb3MoKSA6IGlvc19iYXNlKCkKICAg ICAgeyB9CgogICAgICB2b2lkCiAgICAgIGluaXQoYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1Ry YWl0cz4qIF9fc2IpOwoKICAgICAgYm9vbAogICAgICBfTV9jaGVja19mYWNldChjb25zdCBsb2Nh bGU6OmZhY2V0KiBfX2YpIGNvbnN0CiAgICAgIHsKICAgICAgICBpZiAoIV9fZikKICAgICAgICAg IF9fdGhyb3dfYmFkX2Nhc3QoKTsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQoKICAgICAg dm9pZAogICAgICBfTV9jYWNoZV9mYWNldHMoY29uc3QgbG9jYWxlJiBfX2xvYyk7CiAgICB9Owp9 CgoKCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9iYXNpY19pb3MudGNjIiAxIDMKIyAz NCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9iYXNpY19pb3MudGNjIiAzCgpuYW1lc3BhY2Ug c3RkCnsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICB2 b2lkCiAgICBiYXNpY19pb3M8X0NoYXJULCBfVHJhaXRzPjo6Y2xlYXIoaW9zdGF0ZSBfX3N0YXRl KQogICAgewogICAgICBpZiAodGhpcy0+cmRidWYoKSkKICAgICAgICBfTV9zdHJlYW1idWZfc3Rh dGUgPSBfX3N0YXRlOwogICAgICBlbHNlCiAgICAgICAgICBfTV9zdHJlYW1idWZfc3RhdGUgPSBf X3N0YXRlIHwgYmFkYml0OwogICAgICBpZiAoKHRoaXMtPnJkc3RhdGUoKSAmIHRoaXMtPmV4Y2Vw dGlvbnMoKSkpCiAgICAgICAgX190aHJvd19pb3NfZmFpbHVyZSgiYmFzaWNfaW9zOjpjbGVhcihp b3N0YXRlKSBjYXVzZWQgZXhjZXB0aW9uIik7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D aGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFp dHM+KgogICAgYmFzaWNfaW9zPF9DaGFyVCwgX1RyYWl0cz46OnJkYnVmKGJhc2ljX3N0cmVhbWJ1 ZjxfQ2hhclQsIF9UcmFpdHM+KiBfX3NiKQogICAgewogICAgICBiYXNpY19zdHJlYW1idWY8X0No YXJULCBfVHJhaXRzPiogX19vbGQgPSBfTV9zdHJlYW1idWY7CiAgICAgIF9NX3N0cmVhbWJ1ZiA9 IF9fc2I7CiAgICAgIHRoaXMtPmNsZWFyKCk7CiAgICAgIHJldHVybiBfX29sZDsKICAgIH0KCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaW9z PF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pb3M8X0NoYXJULCBfVHJhaXRzPjo6Y29weWZt dChjb25zdCBiYXNpY19pb3MmIF9fcmhzKQogICAgewoKCgoKICAgICAgX1dvcmRzKiBfX3dvcmRz ID0gKF9fcmhzLl9NX3dvcmRfc2l6ZSA8PSBfU19sb2NhbF93b3JkX3NpemUpID8KICAgICAgICBf TV9sb2NhbF93b3JkIDogbmV3IF9Xb3Jkc1tfX3Jocy5fTV93b3JkX3NpemVdOwoKCiAgICAgIF9D YWxsYmFja19saXN0KiBfX2NiID0gX19yaHMuX01fY2FsbGJhY2tzOwogICAgICBpZiAoX19jYikK ICAgICAgICBfX2NiLT5fTV9hZGRfcmVmZXJlbmNlKCk7CiAgICAgIF9NX2NhbGxfY2FsbGJhY2tz KGVyYXNlX2V2ZW50KTsKICAgICAgaWYgKF9NX3dvcmQgIT0gX01fbG9jYWxfd29yZCkKICAgICAg ICB7CiAgICAgICAgICBkZWxldGUgW10gX01fd29yZDsKICAgICAgICAgIF9NX3dvcmQgPSAwOwog ICAgICAgIH0KICAgICAgX01fZGlzcG9zZV9jYWxsYmFja3MoKTsKCiAgICAgIF9NX2NhbGxiYWNr cyA9IF9fY2I7CiAgICAgIGZvciAoaW50IF9faSA9IDA7IF9faSA8IF9fcmhzLl9NX3dvcmRfc2l6 ZTsgKytfX2kpCiAgICAgICAgX193b3Jkc1tfX2ldID0gX19yaHMuX01fd29yZFtfX2ldOwogICAg ICBpZiAoX01fd29yZCAhPSBfTV9sb2NhbF93b3JkKQogICAgICAgIHsKICAgICAgICAgIGRlbGV0 ZSBbXSBfTV93b3JkOwogICAgICAgICAgX01fd29yZCA9IDA7CiAgICAgICAgfQogICAgICBfTV93 b3JkID0gX193b3JkczsKICAgICAgX01fd29yZF9zaXplID0gX19yaHMuX01fd29yZF9zaXplOwoK ICAgICAgdGhpcy0+ZmxhZ3MoX19yaHMuZmxhZ3MoKSk7CiAgICAgIHRoaXMtPndpZHRoKF9fcmhz LndpZHRoKCkpOwogICAgICB0aGlzLT5wcmVjaXNpb24oX19yaHMucHJlY2lzaW9uKCkpOwogICAg ICB0aGlzLT50aWUoX19yaHMudGllKCkpOwogICAgICB0aGlzLT5maWxsKF9fcmhzLmZpbGwoKSk7 CgogICAgICB0aGlzLT5leGNlcHRpb25zKF9fcmhzLmV4Y2VwdGlvbnMoKSk7CgogICAgICBfTV9j YWxsX2NhbGxiYWNrcyhjb3B5Zm10X2V2ZW50KTsKICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBjaGFyCiAg ICBiYXNpY19pb3M8X0NoYXJULCBfVHJhaXRzPjo6bmFycm93KGNoYXJfdHlwZSBfX2MsIGNoYXIg X19kZmF1bHQpIGNvbnN0CiAgICB7CiAgICAgIGNoYXIgX19yZXQgPSBfX2RmYXVsdDsKICAgICAg aWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZjdHlwZSkpCiAgICAgICAgX19yZXQgPSBfTV9mY3R5cGUt Pm5hcnJvdyhfX2MsIF9fZGZhdWx0KTsKICAgICAgcmV0dXJuIF9fcmV0OwogICAgfQoKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBfQ2hhclQKICAgIGJh c2ljX2lvczxfQ2hhclQsIF9UcmFpdHM+Ojp3aWRlbihjaGFyIF9fYykgY29uc3QKICAgIHsKICAg ICAgY2hhcl90eXBlIF9fcmV0ID0gY2hhcl90eXBlKCk7CiAgICAgIGlmIChfTV9jaGVja19mYWNl dChfTV9mY3R5cGUpKQogICAgICAgIF9fcmV0ID0gX01fZmN0eXBlLT53aWRlbihfX2MpOwogICAg ICByZXR1cm4gX19yZXQ7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu YW1lIF9UcmFpdHM+CiAgICBsb2NhbGUKICAgIGJhc2ljX2lvczxfQ2hhclQsIF9UcmFpdHM+Ojpp bWJ1ZShjb25zdCBsb2NhbGUmIF9fbG9jKQogICAgewogICAgICBsb2NhbGUgX19vbGQodGhpcy0+ Z2V0bG9jKCkpOwogICAgICBpb3NfYmFzZTo6aW1idWUoX19sb2MpOwogICAgICBfTV9jYWNoZV9m YWNldHMoX19sb2MpOwogICAgICBpZiAodGhpcy0+cmRidWYoKSAhPSAwKQogICAgICAgIHRoaXMt PnJkYnVmKCktPnB1YmltYnVlKF9fbG9jKTsKICAgICAgcmV0dXJuIF9fb2xkOwogICAgfQoKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICB2b2lkCiAgICBi YXNpY19pb3M8X0NoYXJULCBfVHJhaXRzPjo6aW5pdChiYXNpY19zdHJlYW1idWY8X0NoYXJULCBf VHJhaXRzPiogX19zYikKICAgIHsKCiAgICAgIGlvc19iYXNlOjpfTV9pbml0KCk7CiAgICAgIF9N X2NhY2hlX2ZhY2V0cyhfTV9pb3NfbG9jYWxlKTsKICAgICAgX01fdGllID0gMDsKIyAxNTkgIi91 c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvYmFzaWNfaW9zLnRjYyIgMwogICAgICBfTV9maWxsID0g X0NoYXJUKCk7CiAgICAgIF9NX2ZpbGxfaW5pdCA9IGZhbHNlOwoKICAgICAgX01fZXhjZXB0aW9u ID0gZ29vZGJpdDsKICAgICAgX01fc3RyZWFtYnVmID0gX19zYjsKICAgICAgX01fc3RyZWFtYnVm X3N0YXRlID0gX19zYiA/IGdvb2RiaXQgOiBiYWRiaXQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVu YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIHZvaWQKICAgIGJhc2ljX2lvczxfQ2hh clQsIF9UcmFpdHM+OjpfTV9jYWNoZV9mYWNldHMoY29uc3QgbG9jYWxlJiBfX2xvYykKICAgIHsK ICAgICAgaWYgKGhhc19mYWNldDxfX2N0eXBlX3R5cGU+KF9fbG9jKSkKICAgICAgICBfTV9mY3R5 cGUgPSAmdXNlX2ZhY2V0PF9fY3R5cGVfdHlwZT4oX19sb2MpOwogICAgICBlbHNlCiAgICAgICAg X01fZmN0eXBlID0gMDsKCiAgICAgIGlmIChoYXNfZmFjZXQ8X19udW1wdXRfdHlwZT4oX19sb2Mp KQogICAgICAgIF9NX2ZudW1wdXQgPSAmdXNlX2ZhY2V0PF9fbnVtcHV0X3R5cGU+KF9fbG9jKTsK ICAgICAgZWxzZQogICAgICAgIF9NX2ZudW1wdXQgPSAwOwogICAgICBpZiAoaGFzX2ZhY2V0PF9f bnVtZ2V0X3R5cGU+KF9fbG9jKSkKICAgICAgICBfTV9mbnVtZ2V0ID0gJnVzZV9mYWNldDxfX251 bWdldF90eXBlPihfX2xvYyk7CiAgICAgIGVsc2UKICAgICAgICBfTV9mbnVtZ2V0ID0gMDsKICAg IH0KCgoKCiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIGJhc2ljX2lvczxjaGFyPjsKCgogIGV4dGVy biB0ZW1wbGF0ZSBjbGFzcyBiYXNpY19pb3M8d2NoYXJfdD47Cgp9CiMgMjA4ICIvdXNyL2luY2x1 ZGUvYysrLzMuMi9iaXRzL2Jhc2ljX2lvcy5oIiAyIDMKIyA1MiAiL3Vzci9pbmNsdWRlL2MrKy8z LjIvaW9zIiAyIDMKIyA0NiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvb3N0cmVhbSIgMiAzCgpuYW1l c3BhY2Ugc3RkCnsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz PgogICAgY2xhc3MgYmFzaWNfb3N0cmVhbSA6IHZpcnR1YWwgcHVibGljIGJhc2ljX2lvczxfQ2hh clQsIF9UcmFpdHM+CiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFy X3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6aW50X3R5cGUgaW50X3R5cGU7 CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6cG9zX3R5cGUgcG9zX3R5cGU7CiAgICAg IHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6b2ZmX3R5cGUgb2ZmX3R5cGU7CiAgICAgIHR5cGVk ZWYgX1RyYWl0cyB0cmFpdHNfdHlwZTsKCgogICAgICB0eXBlZGVmIGJhc2ljX3N0cmVhbWJ1Zjxf Q2hhclQsIF9UcmFpdHM+IF9fc3RyZWFtYnVmX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfaW9z PF9DaGFyVCwgX1RyYWl0cz4gX19pb3NfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19vc3RyZWFt PF9DaGFyVCwgX1RyYWl0cz4gX19vc3RyZWFtX3R5cGU7CiAgICAgIHR5cGVkZWYgb3N0cmVhbWJ1 Zl9pdGVyYXRvcjxfQ2hhclQsIF9UcmFpdHM+IF9fb3N0cmVhbWJ1Zl9pdGVyOwogICAgICB0eXBl ZGVmIG51bV9wdXQ8X0NoYXJULCBfX29zdHJlYW1idWZfaXRlcj4gX19udW1wdXRfdHlwZTsKICAg ICAgdHlwZWRlZiBjdHlwZTxfQ2hhclQ+IF9fY3R5cGVfdHlwZTsKCgogICAgICBleHBsaWNpdAog ICAgICBiYXNpY19vc3RyZWFtKF9fc3RyZWFtYnVmX3R5cGUqIF9fc2IpCiAgICAgIHsgdGhpcy0+ aW5pdChfX3NiKTsgfQoKICAgICAgdmlydHVhbAogICAgICB+YmFzaWNfb3N0cmVhbSgpIHsgfQoK CiAgICAgIGNsYXNzIHNlbnRyeTsKICAgICAgZnJpZW5kIGNsYXNzIHNlbnRyeTsKCgoKICAgICAg X19vc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPDwoX19vc3RyZWFtX3R5cGUmICgqX19wZiko X19vc3RyZWFtX3R5cGUmKSk7CgogICAgICBfX29zdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I8 PChfX2lvc190eXBlJiAoKl9fcGYpKF9faW9zX3R5cGUmKSk7CgogICAgICBfX29zdHJlYW1fdHlw ZSYKICAgICAgb3BlcmF0b3I8PChpb3NfYmFzZSYgKCpfX3BmKSAoaW9zX2Jhc2UmKSk7CgoKICAg ICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPDwobG9uZyBfX24pOwoKICAgICAgX19v c3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPDwodW5zaWduZWQgbG9uZyBfX24pOwoKICAgICAg X19vc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPDwoYm9vbCBfX24pOwoKICAgICAgX19vc3Ry ZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPDwoc2hvcnQgX19uKQogICAgICB7CiAgICAgICAgaW9z X2Jhc2U6OmZtdGZsYWdzIF9fZm10ID0gdGhpcy0+ZmxhZ3MoKSAmIGlvc19iYXNlOjpiYXNlZmll bGQ7CiAgICAgICAgaWYgKF9fZm10ICYgaW9zX2Jhc2U6Om9jdCB8fCBfX2ZtdCAmIGlvc19iYXNl OjpoZXgpCiAgICAgICAgICByZXR1cm4gdGhpcy0+b3BlcmF0b3I8PChzdGF0aWNfY2FzdDx1bnNp Z25lZCBsb25nPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0YXRpY19jYXN0 PHVuc2lnbmVkIHNob3J0PihfX24pKSk7CiAgICAgICAgZWxzZQogICAgICAgICAgcmV0dXJuIHRo aXMtPm9wZXJhdG9yPDwoc3RhdGljX2Nhc3Q8bG9uZz4oX19uKSk7CiAgICAgIH0KCiAgICAgIF9f b3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8KHVuc2lnbmVkIHNob3J0IF9fbikKICAgICAg eyByZXR1cm4gdGhpcy0+b3BlcmF0b3I8PChzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPihfX24p KTsgfQoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPDwoaW50IF9fbikKICAg ICAgewogICAgICAgIGlvc19iYXNlOjpmbXRmbGFncyBfX2ZtdCA9IHRoaXMtPmZsYWdzKCkgJiBp b3NfYmFzZTo6YmFzZWZpZWxkOwogICAgICAgIGlmIChfX2ZtdCAmIGlvc19iYXNlOjpvY3QgfHwg X19mbXQgJiBpb3NfYmFzZTo6aGV4KQogICAgICAgICAgcmV0dXJuIHRoaXMtPm9wZXJhdG9yPDwo c3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIChzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KF9fbikpKTsKICAgICAgICBlbHNlCiAgICAg ICAgICByZXR1cm4gdGhpcy0+b3BlcmF0b3I8PChzdGF0aWNfY2FzdDxsb25nPihfX24pKTsKICAg ICAgfQoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPDwodW5zaWduZWQgaW50 IF9fbikKICAgICAgeyByZXR1cm4gdGhpcy0+b3BlcmF0b3I8PChzdGF0aWNfY2FzdDx1bnNpZ25l ZCBsb25nPihfX24pKTsgfQoKCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8 KGxvbmcgbG9uZyBfX24pOwoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPDwo dW5zaWduZWQgbG9uZyBsb25nIF9fbik7CgoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIG9w ZXJhdG9yPDwoZG91YmxlIF9fZik7CgogICAgICBfX29zdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0 b3I8PChmbG9hdCBfX2YpCiAgICAgIHsgcmV0dXJuIHRoaXMtPm9wZXJhdG9yPDwoc3RhdGljX2Nh c3Q8ZG91YmxlPihfX2YpKTsgfQoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9y PDwobG9uZyBkb3VibGUgX19mKTsKCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRv cjw8KGNvbnN0IHZvaWQqIF9fcCk7CgogICAgICBfX29zdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0 b3I8PChfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiKTsKCgogICAgICBfX29zdHJlYW1fdHlwZSYKICAg ICAgcHV0KGNoYXJfdHlwZSBfX2MpOwoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIHdyaXRl KGNvbnN0IGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbik7CgogICAgICBfX29zdHJlYW1f dHlwZSYKICAgICAgZmx1c2goKTsKCgogICAgICBwb3NfdHlwZQogICAgICB0ZWxscCgpOwoKICAg ICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIHNlZWtwKHBvc190eXBlKTsKCiAgICAgIF9fb3N0cmVh bV90eXBlJgogICAgICBzZWVrcChvZmZfdHlwZSwgaW9zX2Jhc2U6OnNlZWtkaXIpOwogICAgfTsK CgogIHRlbXBsYXRlIDx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBjbGFz cyBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OnNlbnRyeQogICAgewoKICAgICAgYm9v bCBfTV9vazsKICAgICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsX1RyYWl0cz4mIF9NX29zOwoKICAg IHB1YmxpYzoKICAgICAgZXhwbGljaXQKICAgICAgc2VudHJ5KGJhc2ljX29zdHJlYW08X0NoYXJU LF9UcmFpdHM+JiBfX29zKTsKCiAgICAgIH5zZW50cnkoKQogICAgICB7CgogICAgICAgIGlmIChf TV9vcy5mbGFncygpICYgaW9zX2Jhc2U6OnVuaXRidWYgJiYgIXVuY2F1Z2h0X2V4Y2VwdGlvbigp KQogICAgICAgICAgewoKICAgICAgICAgICAgaWYgKF9NX29zLnJkYnVmKCkgJiYgX01fb3MucmRi dWYoKS0+cHVic3luYygpID09IC0xKQogICAgICAgICAgICAgIF9NX29zLnNldHN0YXRlKGlvc19i YXNlOjpiYWRiaXQpOwogICAgICAgICAgfQogICAgICB9CgogICAgICBvcGVyYXRvciBib29sKCkK ICAgICAgeyByZXR1cm4gX01fb2s7IH0KICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy VCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYK ICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX291dCwgX0No YXJUIF9fYyk7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4K ICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPDwoYmFzaWNf b3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX291dCwgY2hhciBfX2MpCiAgICB7IHJldHVybiAo X19vdXQgPDwgX19vdXQud2lkZW4oX19jKSk7IH0KCgogIHRlbXBsYXRlIDxjbGFzcyBfVHJhaXRz PgogICAgYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPDwoYmFzaWNf b3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYgX19vdXQsIGNoYXIgX19jKTsKCgogIHRlbXBsYXRlPGNs YXNzIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+JgogICAgb3BlcmF0 b3I8PChiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+JiBfX291dCwgc2lnbmVkIGNoYXIgX19j KQogICAgeyByZXR1cm4gKF9fb3V0IDw8IHN0YXRpY19jYXN0PGNoYXI+KF9fYykpOyB9CgogIHRl bXBsYXRlPGNsYXNzIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+Jgog ICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+JiBfX291dCwgdW5zaWdu ZWQgY2hhciBfX2MpCiAgICB7IHJldHVybiAoX19vdXQgPDwgc3RhdGljX2Nhc3Q8Y2hhcj4oX19j KSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAg YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I8PChiYXNpY19vc3Ry ZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3V0LCBjb25zdCBfQ2hhclQqIF9fcyk7CgogIHRlbXBs YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08 X0NoYXJULCBfVHJhaXRzPiAmCiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08X0NoYXJULCBf VHJhaXRzPiYgX19vdXQsIGNvbnN0IGNoYXIqIF9fcyk7CgoKICB0ZW1wbGF0ZTxjbGFzcyBfVHJh aXRzPgogICAgYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPDwoYmFz aWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYgX19vdXQsIGNvbnN0IGNoYXIqIF9fcyk7CgoKICB0 ZW1wbGF0ZTxjbGFzcyBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYK ICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYgX19vdXQsIGNvbnN0 IHNpZ25lZCBjaGFyKiBfX3MpCiAgICB7IHJldHVybiAoX19vdXQgPDwgcmVpbnRlcnByZXRfY2Fz dDxjb25zdCBjaGFyKj4oX19zKSk7IH0KCiAgdGVtcGxhdGU8Y2xhc3MgX1RyYWl0cz4KICAgIGJh c2ljX29zdHJlYW08Y2hhciwgX1RyYWl0cz4gJgogICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFt PGNoYXIsIF9UcmFpdHM+JiBfX291dCwgY29uc3QgdW5zaWduZWQgY2hhciogX19zKQogICAgeyBy ZXR1cm4gKF9fb3V0IDw8IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KF9fcykpOyB9CgoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19v c3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBlbmRsKGJhc2ljX29zdHJlYW08X0NoYXJULCBf VHJhaXRzPiYgX19vcykKICAgIHsgcmV0dXJuIGZsdXNoKF9fb3MucHV0KF9fb3Mud2lkZW4oJ1xu JykpKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAg ICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBlbmRzKGJhc2ljX29zdHJlYW08 X0NoYXJULCBfVHJhaXRzPiYgX19vcykKICAgIHsgcmV0dXJuIF9fb3MucHV0KF9DaGFyVCgpKTsg fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNp Y19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBmbHVzaChiYXNpY19vc3RyZWFtPF9DaGFy VCwgX1RyYWl0cz4mIF9fb3MpCiAgICB7IHJldHVybiBfX29zLmZsdXNoKCk7IH0KCn0KCgoKCgoj IDEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvb3N0cmVhbS50Y2MiIDEgMwojIDM2ICIvdXNy L2luY2x1ZGUvYysrLzMuMi9iaXRzL29zdHJlYW0udGNjIiAzCgojIDEgIi91c3IvaW5jbHVkZS9j KysvMy4yL2xvY2FsZSIgMSAzCiMgNDMgIi91c3IvaW5jbHVkZS9jKysvMy4yL2xvY2FsZSIgMwoK CgojIDEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvbG9jYWxlX2ZhY2V0cy50Y2MiIDEgMwoj IDM3ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL2xvY2FsZV9mYWNldHMudGNjIiAzCgojIDEg Ii91c3IvaW5jbHVkZS9jKysvMy4yL2NlcnJubyIgMSAzCiMgNDcgIi91c3IvaW5jbHVkZS9jKysv My4yL2NlcnJubyIgMwoKIyAxICIvdXNyL2luY2x1ZGUvZXJybm8uaCIgMSAzCiMgMzIgIi91c3Iv aW5jbHVkZS9lcnJuby5oIiAzCmV4dGVybiAiQyIgewoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRz L2Vycm5vLmgiIDEgMwojIDI1ICIvdXNyL2luY2x1ZGUvYml0cy9lcnJuby5oIiAzCiMgMSAiL3Vz ci9pbmNsdWRlL2xpbnV4L2Vycm5vLmgiIDEgMwoKCgojIDEgIi91c3IvaW5jbHVkZS9hc20vZXJy bm8uaCIgMSAzCiMgNSAiL3Vzci9pbmNsdWRlL2xpbnV4L2Vycm5vLmgiIDIgMwojIDI2ICIvdXNy L2luY2x1ZGUvYml0cy9lcnJuby5oIiAyIDMKIyAzOCAiL3Vzci9pbmNsdWRlL2JpdHMvZXJybm8u aCIgMwpleHRlcm4gaW50ICpfX2Vycm5vX2xvY2F0aW9uICh2b2lkKSB0aHJvdyAoKSBfX2F0dHJp YnV0ZV9fICgoX19jb25zdF9fKSk7CiMgMzcgIi91c3IvaW5jbHVkZS9lcnJuby5oIiAyIDMKIyA1 NSAiL3Vzci9pbmNsdWRlL2Vycm5vLmgiIDMKZXh0ZXJuIGNoYXIgKnByb2dyYW1faW52b2NhdGlv bl9uYW1lLCAqcHJvZ3JhbV9pbnZvY2F0aW9uX3Nob3J0X25hbWU7CgoKCn0KIyA2OSAiL3Vzci9p bmNsdWRlL2Vycm5vLmgiIDMKdHlwZWRlZiBpbnQgZXJyb3JfdDsKIyA0OSAiL3Vzci9pbmNsdWRl L2MrKy8zLjIvY2Vycm5vIiAyIDMKIyAzOSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9sb2Nh bGVfZmFjZXRzLnRjYyIgMiAzCgoKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9jbWF0aCIgMSAz CiMgNDggIi91c3IvaW5jbHVkZS9jKysvMy4yL2NtYXRoIiAzCgoKCiMgMSAiL3Vzci9pbmNsdWRl L21hdGguaCIgMSAzCiMgMjkgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDMKZXh0ZXJuICJDIiB7CgoK CiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvaHVnZV92YWwuaCIgMSAzCiMgMzQgIi91c3IvaW5jbHVk ZS9tYXRoLmgiIDIgMwoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL25hbi5oIiAxIDMKIyAzOCAi L3Vzci9pbmNsdWRlL21hdGguaCIgMiAzCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoZGVm LmgiIDEgMwojIDI5ICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoZGVmLmgiIDMKdHlwZWRlZiBsb25n IGRvdWJsZSBmbG9hdF90OwoKdHlwZWRlZiBsb25nIGRvdWJsZSBkb3VibGVfdDsKIyA0MSAiL3Vz ci9pbmNsdWRlL21hdGguaCIgMiAzCiMgNjUgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDMKIyAxICIv dXNyL2luY2x1ZGUvYml0cy9tYXRoY2FsbHMuaCIgMSAzCiMgNTMgIi91c3IvaW5jbHVkZS9iaXRz L21hdGhjYWxscy5oIiAzCgoKZXh0ZXJuIGRvdWJsZSBhY29zIChkb3VibGUgX194KSB0aHJvdyAo KTsgZXh0ZXJuIGRvdWJsZSBfX2Fjb3MgKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGRv dWJsZSBhc2luIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2FzaW4gKGRv dWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGRvdWJsZSBhdGFuIChkb3VibGUgX194KSB0aHJv dyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2F0YW4gKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJu IGRvdWJsZSBhdGFuMiAoZG91YmxlIF9feSwgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBk b3VibGUgX19hdGFuMiAoZG91YmxlIF9feSwgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJu IGRvdWJsZSBjb3MgKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fY29zIChk b3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVybiBkb3VibGUgc2luIChkb3VibGUgX194KSB0aHJv dyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3NpbiAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgpleHRlcm4g ZG91YmxlIHRhbiAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX190YW4gKGRv dWJsZSBfX3gpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGRvdWJsZSBjb3NoIChkb3VibGUgX194KSB0 aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2Nvc2ggKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0 ZXJuIGRvdWJsZSBzaW5oIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3Np bmggKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGRvdWJsZSB0YW5oIChkb3VibGUgX194 KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3RhbmggKGRvdWJsZSBfX3gpIHRocm93ICgpOwoK CgoKZXh0ZXJuIHZvaWQgc2luY29zIChkb3VibGUgX194LCBkb3VibGUgKl9fc2lueCwgZG91Ymxl ICpfX2Nvc3gpIHRocm93ICgpOyBleHRlcm4gdm9pZCBfX3NpbmNvcyAoZG91YmxlIF9feCwgZG91 YmxlICpfX3NpbngsIGRvdWJsZSAqX19jb3N4KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGRvdWJs ZSBhY29zaCAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19hY29zaCAoZG91 YmxlIF9feCkgdGhyb3cgKCk7CgpleHRlcm4gZG91YmxlIGFzaW5oIChkb3VibGUgX194KSB0aHJv dyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2FzaW5oIChkb3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVy biBkb3VibGUgYXRhbmggKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fYXRh bmggKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIGRvdWJsZSBleHAgKGRvdWJs ZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fZXhwIChkb3VibGUgX194KSB0aHJvdyAo KTsKCgpleHRlcm4gZG91YmxlIGZyZXhwIChkb3VibGUgX194LCBpbnQgKl9fZXhwb25lbnQpIHRo cm93ICgpOyBleHRlcm4gZG91YmxlIF9fZnJleHAgKGRvdWJsZSBfX3gsIGludCAqX19leHBvbmVu dCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGRvdWJsZSBsZGV4cCAoZG91YmxlIF9feCwgaW50IF9fZXhw b25lbnQpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fbGRleHAgKGRvdWJsZSBfX3gsIGludCBf X2V4cG9uZW50KSB0aHJvdyAoKTsKCgpleHRlcm4gZG91YmxlIGxvZyAoZG91YmxlIF9feCkgdGhy b3cgKCk7IGV4dGVybiBkb3VibGUgX19sb2cgKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCmV4dGVy biBkb3VibGUgbG9nMTAgKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fbG9n MTAgKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBkb3VibGUgbW9kZiAoZG91YmxlIF9f eCwgZG91YmxlICpfX2lwdHIpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fbW9kZiAoZG91Ymxl IF9feCwgZG91YmxlICpfX2lwdHIpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGRvdWJsZSBleHAxMCAo ZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19leHAxMCAoZG91YmxlIF9feCkg dGhyb3cgKCk7CgpleHRlcm4gZG91YmxlIHBvdzEwIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0 ZXJuIGRvdWJsZSBfX3BvdzEwIChkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gZG91 YmxlIGV4cG0xIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2V4cG0xIChk b3VibGUgX194KSB0aHJvdyAoKTsKCgpleHRlcm4gZG91YmxlIGxvZzFwIChkb3VibGUgX194KSB0 aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2xvZzFwIChkb3VibGUgX194KSB0aHJvdyAoKTsKCgpl eHRlcm4gZG91YmxlIGxvZ2IgKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9f bG9nYiAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBkb3VibGUgZXhwMiAoZG91 YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19leHAyIChkb3VibGUgX194KSB0aHJv dyAoKTsKCgpleHRlcm4gZG91YmxlIGxvZzIgKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4g ZG91YmxlIF9fbG9nMiAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCgoKCgoKZXh0ZXJuIGRvdWJs ZSBwb3cgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9f cG93IChkb3VibGUgX194LCBkb3VibGUgX195KSB0aHJvdyAoKTsKCgpleHRlcm4gZG91YmxlIHNx cnQgKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fc3FydCAoZG91YmxlIF9f eCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGRvdWJsZSBoeXBvdCAoZG91YmxlIF9feCwgZG91Ymxl IF9feSkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19oeXBvdCAoZG91YmxlIF9feCwgZG91Ymxl IF9feSkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBkb3VibGUgY2JydCAoZG91YmxlIF9feCkgdGhy b3cgKCk7IGV4dGVybiBkb3VibGUgX19jYnJ0IChkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKCgoK CgpleHRlcm4gZG91YmxlIGNlaWwgKGRvdWJsZSBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18g KChfX2NvbnN0X18pKTsgZXh0ZXJuIGRvdWJsZSBfX2NlaWwgKGRvdWJsZSBfX3gpIHRocm93ICgp IF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gZG91YmxlIGZhYnMgKGRvdWJs ZSBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGRvdWJs ZSBfX2ZhYnMgKGRvdWJsZSBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18p KTsKCgpleHRlcm4gZG91YmxlIGZsb29yIChkb3VibGUgX194KSB0aHJvdyAoKSBfX2F0dHJpYnV0 ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBkb3VibGUgX19mbG9vciAoZG91YmxlIF9feCkgdGhy b3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBkb3VibGUgZm1vZCAo ZG91YmxlIF9feCwgZG91YmxlIF9feSkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19mbW9kIChk b3VibGUgX194LCBkb3VibGUgX195KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgX19pc2luZiAo ZG91YmxlIF9fdmFsdWUpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpl eHRlcm4gaW50IF9fZmluaXRlIChkb3VibGUgX192YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVf XyAoKF9fY29uc3RfXykpOwoKCgoKCmV4dGVybiBpbnQgaXNpbmYgKGRvdWJsZSBfX3ZhbHVlKSB0 aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGludCBmaW5pdGUg KGRvdWJsZSBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoK ZXh0ZXJuIGRvdWJsZSBkcmVtIChkb3VibGUgX194LCBkb3VibGUgX195KSB0aHJvdyAoKTsgZXh0 ZXJuIGRvdWJsZSBfX2RyZW0gKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93ICgpOwoKCgpl eHRlcm4gZG91YmxlIHNpZ25pZmljYW5kIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRv dWJsZSBfX3NpZ25pZmljYW5kIChkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gZG91 YmxlIGNvcHlzaWduIChkb3VibGUgX194LCBkb3VibGUgX195KSB0aHJvdyAoKSBfX2F0dHJpYnV0 ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBkb3VibGUgX19jb3B5c2lnbiAoZG91YmxlIF9feCwg ZG91YmxlIF9feSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKCgpl eHRlcm4gZG91YmxlIG5hbiAoX19jb25zdCBjaGFyICpfX3RhZ2IpIHRocm93ICgpIF9fYXR0cmli dXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGRvdWJsZSBfX25hbiAoX19jb25zdCBjaGFyICpf X3RhZ2IpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCgpleHRlcm4g aW50IF9faXNuYW4gKGRvdWJsZSBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19j b25zdF9fKSk7CgoKCmV4dGVybiBpbnQgaXNuYW4gKGRvdWJsZSBfX3ZhbHVlKSB0aHJvdyAoKSBf X2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGRvdWJsZSBqMCAoZG91YmxlKSB0 aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2owIChkb3VibGUpIHRocm93ICgpOwpleHRlcm4gZG91 YmxlIGoxIChkb3VibGUpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fajEgKGRvdWJsZSkgdGhy b3cgKCk7CmV4dGVybiBkb3VibGUgam4gKGludCwgZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGRv dWJsZSBfX2puIChpbnQsIGRvdWJsZSkgdGhyb3cgKCk7CmV4dGVybiBkb3VibGUgeTAgKGRvdWJs ZSkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX195MCAoZG91YmxlKSB0aHJvdyAoKTsKZXh0ZXJu IGRvdWJsZSB5MSAoZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3kxIChkb3VibGUp IHRocm93ICgpOwpleHRlcm4gZG91YmxlIHluIChpbnQsIGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVy biBkb3VibGUgX195biAoaW50LCBkb3VibGUpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gZG91Ymxl IGVyZiAoZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2VyZiAoZG91YmxlKSB0aHJv dyAoKTsKZXh0ZXJuIGRvdWJsZSBlcmZjIChkb3VibGUpIHRocm93ICgpOyBleHRlcm4gZG91Ymxl IF9fZXJmYyAoZG91YmxlKSB0aHJvdyAoKTsKZXh0ZXJuIGRvdWJsZSBsZ2FtbWEgKGRvdWJsZSkg dGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19sZ2FtbWEgKGRvdWJsZSkgdGhyb3cgKCk7CgoKCgoK CmV4dGVybiBkb3VibGUgdGdhbW1hIChkb3VibGUpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9f dGdhbW1hIChkb3VibGUpIHRocm93ICgpOwoKCgoKCmV4dGVybiBkb3VibGUgZ2FtbWEgKGRvdWJs ZSkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19nYW1tYSAoZG91YmxlKSB0aHJvdyAoKTsKCgoK CgoKZXh0ZXJuIGRvdWJsZSBsZ2FtbWFfciAoZG91YmxlLCBpbnQgKl9fc2lnbmdhbXApIHRocm93 ICgpOyBleHRlcm4gZG91YmxlIF9fbGdhbW1hX3IgKGRvdWJsZSwgaW50ICpfX3NpZ25nYW1wKSB0 aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBkb3VibGUgcmludCAoZG91YmxlIF9feCkgdGhyb3cgKCk7 IGV4dGVybiBkb3VibGUgX19yaW50IChkb3VibGUgX194KSB0aHJvdyAoKTsKCgpleHRlcm4gZG91 YmxlIG5leHRhZnRlciAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgdGhyb3cgKCkgX19hdHRyaWJ1 dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gZG91YmxlIF9fbmV4dGFmdGVyIChkb3VibGUgX194 LCBkb3VibGUgX195KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgpleHRl cm4gZG91YmxlIG5leHR0b3dhcmQgKGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cg KCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gZG91YmxlIF9fbmV4dHRvd2Fy ZCAoZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo X19jb25zdF9fKSk7CgoKCmV4dGVybiBkb3VibGUgcmVtYWluZGVyIChkb3VibGUgX194LCBkb3Vi bGUgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3JlbWFpbmRlciAoZG91YmxlIF9feCwg ZG91YmxlIF9feSkgdGhyb3cgKCk7CgoKCmV4dGVybiBkb3VibGUgc2NhbGJuIChkb3VibGUgX194 LCBpbnQgX19uKSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3NjYWxibiAoZG91YmxlIF9feCwg aW50IF9fbikgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgaWxvZ2IgKGRvdWJsZSBfX3gpIHRocm93 ICgpOyBleHRlcm4gaW50IF9faWxvZ2IgKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgoKZXh0ZXJu IGRvdWJsZSBzY2FsYmxuIChkb3VibGUgX194LCBsb25nIGludCBfX24pIHRocm93ICgpOyBleHRl cm4gZG91YmxlIF9fc2NhbGJsbiAoZG91YmxlIF9feCwgbG9uZyBpbnQgX19uKSB0aHJvdyAoKTsK CgoKZXh0ZXJuIGRvdWJsZSBuZWFyYnlpbnQgKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4g ZG91YmxlIF9fbmVhcmJ5aW50IChkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGRvdWJs ZSByb3VuZCAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19yb3VuZCAoZG91 YmxlIF9feCkgdGhyb3cgKCk7CgoKCmV4dGVybiBkb3VibGUgdHJ1bmMgKGRvdWJsZSBfX3gpIHRo cm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGRvdWJsZSBfX3RydW5j IChkb3VibGUgX194KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgpl eHRlcm4gZG91YmxlIHJlbXF1byAoZG91YmxlIF9feCwgZG91YmxlIF9feSwgaW50ICpfX3F1bykg dGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19yZW1xdW8gKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3ks IGludCAqX19xdW8pIHRocm93ICgpOwoKCgoKCgpleHRlcm4gbG9uZyBpbnQgbHJpbnQgKGRvdWJs ZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBpbnQgX19scmludCAoZG91YmxlIF9feCkgdGhy b3cgKCk7CmV4dGVybiBsb25nIGxvbmcgaW50IGxscmludCAoZG91YmxlIF9feCkgdGhyb3cgKCk7 IGV4dGVybiBsb25nIGxvbmcgaW50IF9fbGxyaW50IChkb3VibGUgX194KSB0aHJvdyAoKTsKCgoK ZXh0ZXJuIGxvbmcgaW50IGxyb3VuZCAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25n IGludCBfX2xyb3VuZCAoZG91YmxlIF9feCkgdGhyb3cgKCk7CmV4dGVybiBsb25nIGxvbmcgaW50 IGxscm91bmQgKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBsb25nIGludCBfX2xs cm91bmQgKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4gZG91YmxlIGZkaW0gKGRvdWJs ZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fZmRpbSAoZG91Ymxl IF9feCwgZG91YmxlIF9feSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGRvdWJsZSBmbWF4IChkb3VibGUg X194LCBkb3VibGUgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2ZtYXggKGRvdWJsZSBf X3gsIGRvdWJsZSBfX3kpIHRocm93ICgpOwoKCmV4dGVybiBkb3VibGUgZm1pbiAoZG91YmxlIF9f eCwgZG91YmxlIF9feSkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19mbWluIChkb3VibGUgX194 LCBkb3VibGUgX195KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBfX2ZwY2xhc3NpZnkgKGRvdWJs ZSBfX3ZhbHVlKSB0aHJvdyAoKQogICAgIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpl eHRlcm4gaW50IF9fc2lnbmJpdCAoZG91YmxlIF9fdmFsdWUpIHRocm93ICgpCiAgICAgX19hdHRy aWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgpleHRlcm4gZG91YmxlIGZtYSAoZG91YmxlIF9feCwg ZG91YmxlIF9feSwgZG91YmxlIF9feikgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19mbWEgKGRv dWJsZSBfX3gsIGRvdWJsZSBfX3ksIGRvdWJsZSBfX3opIHRocm93ICgpOwoKCgoKZXh0ZXJuIGRv dWJsZSBzY2FsYiAoZG91YmxlIF9feCwgZG91YmxlIF9fbikgdGhyb3cgKCk7IGV4dGVybiBkb3Vi bGUgX19zY2FsYiAoZG91YmxlIF9feCwgZG91YmxlIF9fbikgdGhyb3cgKCk7CiMgNjYgIi91c3Iv aW5jbHVkZS9tYXRoLmgiIDIgMwojIDg4ICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAzCiMgMSAiL3Vz ci9pbmNsdWRlL2JpdHMvbWF0aGNhbGxzLmgiIDEgMwojIDUzICIvdXNyL2luY2x1ZGUvYml0cy9t YXRoY2FsbHMuaCIgMwoKCmV4dGVybiBmbG9hdCBhY29zZiAoZmxvYXQgX194KSB0aHJvdyAoKTsg ZXh0ZXJuIGZsb2F0IF9fYWNvc2YgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgpleHRlcm4gZmxvYXQg YXNpbmYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2FzaW5mIChmbG9hdCBf X3gpIHRocm93ICgpOwoKZXh0ZXJuIGZsb2F0IGF0YW5mIChmbG9hdCBfX3gpIHRocm93ICgpOyBl eHRlcm4gZmxvYXQgX19hdGFuZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCmV4dGVybiBmbG9hdCBh dGFuMmYgKGZsb2F0IF9feSwgZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fYXRh bjJmIChmbG9hdCBfX3ksIGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGZsb2F0IGNvc2Yg KGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2Nvc2YgKGZsb2F0IF9feCkgdGhy b3cgKCk7CgpleHRlcm4gZmxvYXQgc2luZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZs b2F0IF9fc2luZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCmV4dGVybiBmbG9hdCB0YW5mIChmbG9h dCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX190YW5mIChmbG9hdCBfX3gpIHRocm93ICgp OwoKCgoKZXh0ZXJuIGZsb2F0IGNvc2hmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxv YXQgX19jb3NoZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCmV4dGVybiBmbG9hdCBzaW5oZiAoZmxv YXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fc2luaGYgKGZsb2F0IF9feCkgdGhyb3cg KCk7CgpleHRlcm4gZmxvYXQgdGFuaGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9h dCBfX3RhbmhmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKCgoKZXh0ZXJuIHZvaWQgc2luY29zZiAo ZmxvYXQgX194LCBmbG9hdCAqX19zaW54LCBmbG9hdCAqX19jb3N4KSB0aHJvdyAoKTsgZXh0ZXJu IHZvaWQgX19zaW5jb3NmIChmbG9hdCBfX3gsIGZsb2F0ICpfX3NpbngsIGZsb2F0ICpfX2Nvc3gp IHRocm93ICgpOwoKCgoKCgpleHRlcm4gZmxvYXQgYWNvc2hmIChmbG9hdCBfX3gpIHRocm93ICgp OyBleHRlcm4gZmxvYXQgX19hY29zaGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgpleHRlcm4gZmxv YXQgYXNpbmhmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19hc2luaGYgKGZs b2F0IF9feCkgdGhyb3cgKCk7CgpleHRlcm4gZmxvYXQgYXRhbmhmIChmbG9hdCBfX3gpIHRocm93 ICgpOyBleHRlcm4gZmxvYXQgX19hdGFuaGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKCgoKCgpl eHRlcm4gZmxvYXQgZXhwZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fZXhw ZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCgpleHRlcm4gZmxvYXQgZnJleHBmIChmbG9hdCBfX3gs IGludCAqX19leHBvbmVudCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2ZyZXhwZiAoZmxvYXQg X194LCBpbnQgKl9fZXhwb25lbnQpIHRocm93ICgpOwoKCmV4dGVybiBmbG9hdCBsZGV4cGYgKGZs b2F0IF9feCwgaW50IF9fZXhwb25lbnQpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19sZGV4cGYg KGZsb2F0IF9feCwgaW50IF9fZXhwb25lbnQpIHRocm93ICgpOwoKCmV4dGVybiBmbG9hdCBsb2dm IChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19sb2dmIChmbG9hdCBfX3gpIHRo cm93ICgpOwoKCmV4dGVybiBmbG9hdCBsb2cxMGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVy biBmbG9hdCBfX2xvZzEwZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCgpleHRlcm4gZmxvYXQgbW9k ZmYgKGZsb2F0IF9feCwgZmxvYXQgKl9faXB0cikgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX21v ZGZmIChmbG9hdCBfX3gsIGZsb2F0ICpfX2lwdHIpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGZsb2F0 IGV4cDEwZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fZXhwMTBmIChmbG9h dCBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGZsb2F0IHBvdzEwZiAoZmxvYXQgX194KSB0aHJvdyAo KTsgZXh0ZXJuIGZsb2F0IF9fcG93MTBmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKCgoKCmV4dGVy biBmbG9hdCBleHBtMWYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2V4cG0x ZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCgpleHRlcm4gZmxvYXQgbG9nMXBmIChmbG9hdCBfX3gp IHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19sb2cxcGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoK ZXh0ZXJuIGZsb2F0IGxvZ2JmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19s b2diZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGZsb2F0IGV4cDJmIChmbG9h dCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19leHAyZiAoZmxvYXQgX194KSB0aHJvdyAo KTsKCgpleHRlcm4gZmxvYXQgbG9nMmYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9h dCBfX2xvZzJmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKCgoKCgoKCmV4dGVybiBmbG9hdCBwb3dm IChmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX3Bvd2YgKGZs b2F0IF9feCwgZmxvYXQgX195KSB0aHJvdyAoKTsKCgpleHRlcm4gZmxvYXQgc3FydGYgKGZsb2F0 IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX3NxcnRmIChmbG9hdCBfX3gpIHRocm93ICgp OwoKCgoKCmV4dGVybiBmbG9hdCBoeXBvdGYgKGZsb2F0IF9feCwgZmxvYXQgX195KSB0aHJvdyAo KTsgZXh0ZXJuIGZsb2F0IF9faHlwb3RmIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cgKCk7 CgoKCgoKCmV4dGVybiBmbG9hdCBjYnJ0ZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZs b2F0IF9fY2JydGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKCgoKCgoKZXh0ZXJuIGZsb2F0IGNl aWxmIChmbG9hdCBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0 ZXJuIGZsb2F0IF9fY2VpbGYgKGZsb2F0IF9feCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9f Y29uc3RfXykpOwoKCmV4dGVybiBmbG9hdCBmYWJzZiAoZmxvYXQgX194KSB0aHJvdyAoKSBfX2F0 dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBmbG9hdCBfX2ZhYnNmIChmbG9hdCBfX3gp IHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gZmxvYXQgZmxv b3JmIChmbG9hdCBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0 ZXJuIGZsb2F0IF9fZmxvb3JmIChmbG9hdCBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChf X2NvbnN0X18pKTsKCgpleHRlcm4gZmxvYXQgZm1vZGYgKGZsb2F0IF9feCwgZmxvYXQgX195KSB0 aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fZm1vZGYgKGZsb2F0IF9feCwgZmxvYXQgX195KSB0aHJv dyAoKTsKCgoKCmV4dGVybiBpbnQgX19pc2luZmYgKGZsb2F0IF9fdmFsdWUpIHRocm93ICgpIF9f YXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gaW50IF9fZmluaXRlZiAoZmxvYXQg X192YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKCmV4dGVy biBpbnQgaXNpbmZmIChmbG9hdCBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19j b25zdF9fKSk7CgoKZXh0ZXJuIGludCBmaW5pdGVmIChmbG9hdCBfX3ZhbHVlKSB0aHJvdyAoKSBf X2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGZsb2F0IGRyZW1mIChmbG9hdCBf X3gsIGZsb2F0IF9feSkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2RyZW1mIChmbG9hdCBfX3gs IGZsb2F0IF9feSkgdGhyb3cgKCk7CgoKCmV4dGVybiBmbG9hdCBzaWduaWZpY2FuZGYgKGZsb2F0 IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX3NpZ25pZmljYW5kZiAoZmxvYXQgX194KSB0 aHJvdyAoKTsKCgoKCgpleHRlcm4gZmxvYXQgY29weXNpZ25mIChmbG9hdCBfX3gsIGZsb2F0IF9f eSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gZmxvYXQgX19j b3B5c2lnbmYgKGZsb2F0IF9feCwgZmxvYXQgX195KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo X19jb25zdF9fKSk7CgoKCgoKCmV4dGVybiBmbG9hdCBuYW5mIChfX2NvbnN0IGNoYXIgKl9fdGFn YikgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gZmxvYXQgX19u YW5mIChfX2NvbnN0IGNoYXIgKl9fdGFnYikgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29u c3RfXykpOwoKCgoKCmV4dGVybiBpbnQgX19pc25hbmYgKGZsb2F0IF9fdmFsdWUpIHRocm93ICgp IF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKZXh0ZXJuIGludCBpc25hbmYgKGZsb2F0 IF9fdmFsdWUpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4g ZmxvYXQgajBmIChmbG9hdCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2owZiAoZmxvYXQpIHRo cm93ICgpOwpleHRlcm4gZmxvYXQgajFmIChmbG9hdCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBf X2oxZiAoZmxvYXQpIHRocm93ICgpOwpleHRlcm4gZmxvYXQgam5mIChpbnQsIGZsb2F0KSB0aHJv dyAoKTsgZXh0ZXJuIGZsb2F0IF9fam5mIChpbnQsIGZsb2F0KSB0aHJvdyAoKTsKZXh0ZXJuIGZs b2F0IHkwZiAoZmxvYXQpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX195MGYgKGZsb2F0KSB0aHJv dyAoKTsKZXh0ZXJuIGZsb2F0IHkxZiAoZmxvYXQpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX195 MWYgKGZsb2F0KSB0aHJvdyAoKTsKZXh0ZXJuIGZsb2F0IHluZiAoaW50LCBmbG9hdCkgdGhyb3cg KCk7IGV4dGVybiBmbG9hdCBfX3luZiAoaW50LCBmbG9hdCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVy biBmbG9hdCBlcmZmIChmbG9hdCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2VyZmYgKGZsb2F0 KSB0aHJvdyAoKTsKZXh0ZXJuIGZsb2F0IGVyZmNmIChmbG9hdCkgdGhyb3cgKCk7IGV4dGVybiBm bG9hdCBfX2VyZmNmIChmbG9hdCkgdGhyb3cgKCk7CmV4dGVybiBmbG9hdCBsZ2FtbWFmIChmbG9h dCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2xnYW1tYWYgKGZsb2F0KSB0aHJvdyAoKTsKCgoK CgoKZXh0ZXJuIGZsb2F0IHRnYW1tYWYgKGZsb2F0KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9f dGdhbW1hZiAoZmxvYXQpIHRocm93ICgpOwoKCgoKCmV4dGVybiBmbG9hdCBnYW1tYWYgKGZsb2F0 KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fZ2FtbWFmIChmbG9hdCkgdGhyb3cgKCk7CgoKCgoK CmV4dGVybiBmbG9hdCBsZ2FtbWFmX3IgKGZsb2F0LCBpbnQgKl9fc2lnbmdhbXApIHRocm93ICgp OyBleHRlcm4gZmxvYXQgX19sZ2FtbWFmX3IgKGZsb2F0LCBpbnQgKl9fc2lnbmdhbXApIHRocm93 ICgpOwoKCgoKCgoKZXh0ZXJuIGZsb2F0IHJpbnRmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRl cm4gZmxvYXQgX19yaW50ZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCgpleHRlcm4gZmxvYXQgbmV4 dGFmdGVyZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChf X2NvbnN0X18pKTsgZXh0ZXJuIGZsb2F0IF9fbmV4dGFmdGVyZiAoZmxvYXQgX194LCBmbG9hdCBf X3kpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCmV4dGVybiBmbG9hdCBu ZXh0dG93YXJkZiAoZmxvYXQgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpIF9fYXR0cmli dXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGZsb2F0IF9fbmV4dHRvd2FyZGYgKGZsb2F0IF9f eCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7 CgoKCmV4dGVybiBmbG9hdCByZW1haW5kZXJmIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cg KCk7IGV4dGVybiBmbG9hdCBfX3JlbWFpbmRlcmYgKGZsb2F0IF9feCwgZmxvYXQgX195KSB0aHJv dyAoKTsKCgoKZXh0ZXJuIGZsb2F0IHNjYWxibmYgKGZsb2F0IF9feCwgaW50IF9fbikgdGhyb3cg KCk7IGV4dGVybiBmbG9hdCBfX3NjYWxibmYgKGZsb2F0IF9feCwgaW50IF9fbikgdGhyb3cgKCk7 CgoKCmV4dGVybiBpbnQgaWxvZ2JmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gaW50IF9f aWxvZ2JmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGZsb2F0IHNjYWxibG5mIChm bG9hdCBfX3gsIGxvbmcgaW50IF9fbikgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX3NjYWxibG5m IChmbG9hdCBfX3gsIGxvbmcgaW50IF9fbikgdGhyb3cgKCk7CgoKCmV4dGVybiBmbG9hdCBuZWFy YnlpbnRmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19uZWFyYnlpbnRmIChm bG9hdCBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4gZmxvYXQgcm91bmRmIChmbG9hdCBfX3gpIHRo cm93ICgpOyBleHRlcm4gZmxvYXQgX19yb3VuZGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKCmV4 dGVybiBmbG9hdCB0cnVuY2YgKGZsb2F0IF9feCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9f Y29uc3RfXykpOyBleHRlcm4gZmxvYXQgX190cnVuY2YgKGZsb2F0IF9feCkgdGhyb3cgKCkgX19h dHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKZXh0ZXJuIGZsb2F0IHJlbXF1b2YgKGZsb2F0 IF9feCwgZmxvYXQgX195LCBpbnQgKl9fcXVvKSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fcmVt cXVvZiAoZmxvYXQgX194LCBmbG9hdCBfX3ksIGludCAqX19xdW8pIHRocm93ICgpOwoKCgoKCgpl eHRlcm4gbG9uZyBpbnQgbHJpbnRmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBp bnQgX19scmludGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CmV4dGVybiBsb25nIGxvbmcgaW50IGxs cmludGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGxvbmcgaW50IF9fbGxyaW50 ZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGxvbmcgaW50IGxyb3VuZGYgKGZsb2F0 IF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGludCBfX2xyb3VuZGYgKGZsb2F0IF9feCkgdGhy b3cgKCk7CmV4dGVybiBsb25nIGxvbmcgaW50IGxscm91bmRmIChmbG9hdCBfX3gpIHRocm93ICgp OyBleHRlcm4gbG9uZyBsb25nIGludCBfX2xscm91bmRmIChmbG9hdCBfX3gpIHRocm93ICgpOwoK CgpleHRlcm4gZmxvYXQgZmRpbWYgKGZsb2F0IF9feCwgZmxvYXQgX195KSB0aHJvdyAoKTsgZXh0 ZXJuIGZsb2F0IF9fZmRpbWYgKGZsb2F0IF9feCwgZmxvYXQgX195KSB0aHJvdyAoKTsKCgpleHRl cm4gZmxvYXQgZm1heGYgKGZsb2F0IF9feCwgZmxvYXQgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGZs b2F0IF9fZm1heGYgKGZsb2F0IF9feCwgZmxvYXQgX195KSB0aHJvdyAoKTsKCgpleHRlcm4gZmxv YXQgZm1pbmYgKGZsb2F0IF9feCwgZmxvYXQgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9f Zm1pbmYgKGZsb2F0IF9feCwgZmxvYXQgX195KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBfX2Zw Y2xhc3NpZnlmIChmbG9hdCBfX3ZhbHVlKSB0aHJvdyAoKQogICAgIF9fYXR0cmlidXRlX18gKChf X2NvbnN0X18pKTsKCgpleHRlcm4gaW50IF9fc2lnbmJpdGYgKGZsb2F0IF9fdmFsdWUpIHRocm93 ICgpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgpleHRlcm4gZmxvYXQgZm1h ZiAoZmxvYXQgX194LCBmbG9hdCBfX3ksIGZsb2F0IF9feikgdGhyb3cgKCk7IGV4dGVybiBmbG9h dCBfX2ZtYWYgKGZsb2F0IF9feCwgZmxvYXQgX195LCBmbG9hdCBfX3opIHRocm93ICgpOwoKCgoK ZXh0ZXJuIGZsb2F0IHNjYWxiZiAoZmxvYXQgX194LCBmbG9hdCBfX24pIHRocm93ICgpOyBleHRl cm4gZmxvYXQgX19zY2FsYmYgKGZsb2F0IF9feCwgZmxvYXQgX19uKSB0aHJvdyAoKTsKIyA4OSAi L3Vzci9pbmNsdWRlL21hdGguaCIgMiAzCiMgMTA5ICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAzCiMg MSAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGNhbGxzLmgiIDEgMwojIDUzICIvdXNyL2luY2x1ZGUv Yml0cy9tYXRoY2FsbHMuaCIgMwoKCmV4dGVybiBsb25nIGRvdWJsZSBhY29zbCAobG9uZyBkb3Vi bGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fYWNvc2wgKGxvbmcgZG91Ymxl IF9feCkgdGhyb3cgKCk7CgpleHRlcm4gbG9uZyBkb3VibGUgYXNpbmwgKGxvbmcgZG91YmxlIF9f eCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2FzaW5sIChsb25nIGRvdWJsZSBfX3gp IHRocm93ICgpOwoKZXh0ZXJuIGxvbmcgZG91YmxlIGF0YW5sIChsb25nIGRvdWJsZSBfX3gpIHRo cm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19hdGFubCAobG9uZyBkb3VibGUgX194KSB0aHJv dyAoKTsKCmV4dGVybiBsb25nIGRvdWJsZSBhdGFuMmwgKGxvbmcgZG91YmxlIF9feSwgbG9uZyBk b3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fYXRhbjJsIChsb25nIGRv dWJsZSBfX3ksIGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcgZG91Ymxl IGNvc2wgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2Nv c2wgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgpleHRlcm4gbG9uZyBkb3VibGUgc2lubCAo bG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fc2lubCAobG9u ZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVybiBsb25nIGRvdWJsZSB0YW5sIChsb25nIGRv dWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX190YW5sIChsb25nIGRvdWJs ZSBfX3gpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIGNvc2hsIChsb25nIGRvdWJs ZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19jb3NobCAobG9uZyBkb3VibGUg X194KSB0aHJvdyAoKTsKCmV4dGVybiBsb25nIGRvdWJsZSBzaW5obCAobG9uZyBkb3VibGUgX194 KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fc2luaGwgKGxvbmcgZG91YmxlIF9feCkg dGhyb3cgKCk7CgpleHRlcm4gbG9uZyBkb3VibGUgdGFuaGwgKGxvbmcgZG91YmxlIF9feCkgdGhy b3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3RhbmhsIChsb25nIGRvdWJsZSBfX3gpIHRocm93 ICgpOwoKCgoKZXh0ZXJuIHZvaWQgc2luY29zbCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJs ZSAqX19zaW54LCBsb25nIGRvdWJsZSAqX19jb3N4KSB0aHJvdyAoKTsgZXh0ZXJuIHZvaWQgX19z aW5jb3NsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlICpfX3NpbngsIGxvbmcgZG91Ymxl ICpfX2Nvc3gpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gbG9uZyBkb3VibGUgYWNvc2hsIChsb25n IGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19hY29zaGwgKGxvbmcg ZG91YmxlIF9feCkgdGhyb3cgKCk7CgpleHRlcm4gbG9uZyBkb3VibGUgYXNpbmhsIChsb25nIGRv dWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19hc2luaGwgKGxvbmcgZG91 YmxlIF9feCkgdGhyb3cgKCk7CgpleHRlcm4gbG9uZyBkb3VibGUgYXRhbmhsIChsb25nIGRvdWJs ZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19hdGFuaGwgKGxvbmcgZG91Ymxl IF9feCkgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gbG9uZyBkb3VibGUgZXhwbCAobG9uZyBkb3Vi bGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZXhwbCAobG9uZyBkb3VibGUg X194KSB0aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBkb3VibGUgZnJleHBsIChsb25nIGRvdWJsZSBf X3gsIGludCAqX19leHBvbmVudCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2ZyZXhw bCAobG9uZyBkb3VibGUgX194LCBpbnQgKl9fZXhwb25lbnQpIHRocm93ICgpOwoKCmV4dGVybiBs b25nIGRvdWJsZSBsZGV4cGwgKGxvbmcgZG91YmxlIF9feCwgaW50IF9fZXhwb25lbnQpIHRocm93 ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19sZGV4cGwgKGxvbmcgZG91YmxlIF9feCwgaW50IF9f ZXhwb25lbnQpIHRocm93ICgpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBsb2dsIChsb25nIGRvdWJs ZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19sb2dsIChsb25nIGRvdWJsZSBf X3gpIHRocm93ICgpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBsb2cxMGwgKGxvbmcgZG91YmxlIF9f eCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2xvZzEwbCAobG9uZyBkb3VibGUgX194 KSB0aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBkb3VibGUgbW9kZmwgKGxvbmcgZG91YmxlIF9feCwg bG9uZyBkb3VibGUgKl9faXB0cikgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX21vZGZs IChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlICpfX2lwdHIpIHRocm93ICgpOwoKCgoKZXh0 ZXJuIGxvbmcgZG91YmxlIGV4cDEwbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJu IGxvbmcgZG91YmxlIF9fZXhwMTBsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJu IGxvbmcgZG91YmxlIHBvdzEwbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxv bmcgZG91YmxlIF9fcG93MTBsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgoKCmV4dGVy biBsb25nIGRvdWJsZSBleHBtMWwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBs b25nIGRvdWJsZSBfX2V4cG0xbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgpleHRlcm4g bG9uZyBkb3VibGUgbG9nMXBsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9u ZyBkb3VibGUgX19sb2cxcGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGxv bmcgZG91YmxlIGxvZ2JsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBk b3VibGUgX19sb2dibCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGxv bmcgZG91YmxlIGV4cDJsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBk b3VibGUgX19leHAybCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBk b3VibGUgbG9nMmwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJs ZSBfX2xvZzJsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgoKCgoKCmV4dGVybiBsb25n IGRvdWJsZSBwb3dsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCk7 IGV4dGVybiBsb25nIGRvdWJsZSBfX3Bvd2wgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUg X195KSB0aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBkb3VibGUgc3FydGwgKGxvbmcgZG91YmxlIF9f eCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3NxcnRsIChsb25nIGRvdWJsZSBfX3gp IHRocm93ICgpOwoKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBoeXBvdGwgKGxvbmcgZG91YmxlIF9f eCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9faHlwb3Rs IChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCk7CgoKCgoKCmV4dGVy biBsb25nIGRvdWJsZSBjYnJ0bCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxv bmcgZG91YmxlIF9fY2JydGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCgoKCgoKZXh0 ZXJuIGxvbmcgZG91YmxlIGNlaWxsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpIF9fYXR0cmli dXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fY2VpbGwgKGxvbmcgZG91 YmxlIF9feCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBs b25nIGRvdWJsZSBmYWJzbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9f ICgoX19jb25zdF9fKSk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2ZhYnNsIChsb25nIGRvdWJsZSBf X3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gbG9uZyBk b3VibGUgZmxvb3JsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChf X2NvbnN0X18pKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZmxvb3JsIChsb25nIGRvdWJsZSBfX3gp IHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gbG9uZyBkb3Vi bGUgZm1vZGwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKTsgZXh0 ZXJuIGxvbmcgZG91YmxlIF9fZm1vZGwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195 KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgX19pc2luZmwgKGxvbmcgZG91YmxlIF9fdmFsdWUp IHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gaW50IF9fZmlu aXRlbCAobG9uZyBkb3VibGUgX192YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29u c3RfXykpOwoKCgoKCmV4dGVybiBpbnQgaXNpbmZsIChsb25nIGRvdWJsZSBfX3ZhbHVlKSB0aHJv dyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGludCBmaW5pdGVsIChs b25nIGRvdWJsZSBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7 CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGRyZW1sIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91Ymxl IF9feSkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2RyZW1sIChsb25nIGRvdWJsZSBf X3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCk7CgoKCmV4dGVybiBsb25nIGRvdWJsZSBzaWdu aWZpY2FuZGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBf X3NpZ25pZmljYW5kbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gbG9u ZyBkb3VibGUgY29weXNpZ25sIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhy b3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gbG9uZyBkb3VibGUgX19j b3B5c2lnbmwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKSBfX2F0 dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBuYW5sIChf X2NvbnN0IGNoYXIgKl9fdGFnYikgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykp OyBleHRlcm4gbG9uZyBkb3VibGUgX19uYW5sIChfX2NvbnN0IGNoYXIgKl9fdGFnYikgdGhyb3cg KCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKCmV4dGVybiBpbnQgX19pc25hbmwg KGxvbmcgZG91YmxlIF9fdmFsdWUpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18p KTsKCgoKZXh0ZXJuIGludCBpc25hbmwgKGxvbmcgZG91YmxlIF9fdmFsdWUpIHRocm93ICgpIF9f YXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gbG9uZyBkb3VibGUgajBsIChsb25n IGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2owbCAobG9uZyBkb3VibGUp IHRocm93ICgpOwpleHRlcm4gbG9uZyBkb3VibGUgajFsIChsb25nIGRvdWJsZSkgdGhyb3cgKCk7 IGV4dGVybiBsb25nIGRvdWJsZSBfX2oxbCAobG9uZyBkb3VibGUpIHRocm93ICgpOwpleHRlcm4g bG9uZyBkb3VibGUgam5sIChpbnQsIGxvbmcgZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcg ZG91YmxlIF9fam5sIChpbnQsIGxvbmcgZG91YmxlKSB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcgZG91 YmxlIHkwbCAobG9uZyBkb3VibGUpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX195MGwg KGxvbmcgZG91YmxlKSB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcgZG91YmxlIHkxbCAobG9uZyBkb3Vi bGUpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX195MWwgKGxvbmcgZG91YmxlKSB0aHJv dyAoKTsKZXh0ZXJuIGxvbmcgZG91YmxlIHlubCAoaW50LCBsb25nIGRvdWJsZSkgdGhyb3cgKCk7 IGV4dGVybiBsb25nIGRvdWJsZSBfX3lubCAoaW50LCBsb25nIGRvdWJsZSkgdGhyb3cgKCk7CgoK CgoKCmV4dGVybiBsb25nIGRvdWJsZSBlcmZsIChsb25nIGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVy biBsb25nIGRvdWJsZSBfX2VyZmwgKGxvbmcgZG91YmxlKSB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcg ZG91YmxlIGVyZmNsIChsb25nIGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBf X2VyZmNsIChsb25nIGRvdWJsZSkgdGhyb3cgKCk7CmV4dGVybiBsb25nIGRvdWJsZSBsZ2FtbWFs IChsb25nIGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2xnYW1tYWwgKGxv bmcgZG91YmxlKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIHRnYW1tYWwgKGxv bmcgZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fdGdhbW1hbCAobG9uZyBk b3VibGUpIHRocm93ICgpOwoKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBnYW1tYWwgKGxvbmcgZG91 YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZ2FtbWFsIChsb25nIGRvdWJsZSkg dGhyb3cgKCk7CgoKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBsZ2FtbWFsX3IgKGxvbmcgZG91Ymxl LCBpbnQgKl9fc2lnbmdhbXApIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19sZ2FtbWFs X3IgKGxvbmcgZG91YmxlLCBpbnQgKl9fc2lnbmdhbXApIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJu IGxvbmcgZG91YmxlIHJpbnRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9u ZyBkb3VibGUgX19yaW50bCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgpleHRlcm4gbG9u ZyBkb3VibGUgbmV4dGFmdGVybCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRo cm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9f bmV4dGFmdGVybCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpIF9f YXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCmV4dGVybiBsb25nIGRvdWJsZSBuZXh0dG93YXJk bCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpIF9fYXR0cmlidXRl X18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fbmV4dHRvd2FyZGwgKGxvbmcg ZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19j b25zdF9fKSk7CgoKCmV4dGVybiBsb25nIGRvdWJsZSByZW1haW5kZXJsIChsb25nIGRvdWJsZSBf X3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3JlbWFp bmRlcmwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKTsKCgoKZXh0 ZXJuIGxvbmcgZG91YmxlIHNjYWxibmwgKGxvbmcgZG91YmxlIF9feCwgaW50IF9fbikgdGhyb3cg KCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3NjYWxibmwgKGxvbmcgZG91YmxlIF9feCwgaW50IF9f bikgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgaWxvZ2JsIChsb25nIGRvdWJsZSBfX3gpIHRocm93 ICgpOyBleHRlcm4gaW50IF9faWxvZ2JsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgoK ZXh0ZXJuIGxvbmcgZG91YmxlIHNjYWxibG5sIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgaW50IF9f bikgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3NjYWxibG5sIChsb25nIGRvdWJsZSBf X3gsIGxvbmcgaW50IF9fbikgdGhyb3cgKCk7CgoKCmV4dGVybiBsb25nIGRvdWJsZSBuZWFyYnlp bnRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19uZWFy YnlpbnRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4gbG9uZyBkb3VibGUg cm91bmRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19y b3VuZGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCmV4dGVybiBsb25nIGRvdWJsZSB0 cnVuY2wgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3Rf XykpOyBleHRlcm4gbG9uZyBkb3VibGUgX190cnVuY2wgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cg KCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIHJl bXF1b2wgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195LCBpbnQgKl9fcXVvKSB0aHJv dyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fcmVtcXVvbCAobG9uZyBkb3VibGUgX194LCBsb25n IGRvdWJsZSBfX3ksIGludCAqX19xdW8pIHRocm93ICgpOwoKCgoKCgpleHRlcm4gbG9uZyBpbnQg bHJpbnRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBpbnQgX19scmlu dGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CmV4dGVybiBsb25nIGxvbmcgaW50IGxscmlu dGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGxvbmcgaW50IF9fbGxy aW50bCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGxvbmcgaW50IGxyb3Vu ZGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGludCBfX2xyb3VuZGwg KGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CmV4dGVybiBsb25nIGxvbmcgaW50IGxscm91bmRs IChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBsb25nIGludCBfX2xscm91 bmRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4gbG9uZyBkb3VibGUgZmRp bWwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGxv bmcgZG91YmxlIF9fZmRpbWwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJv dyAoKTsKCgpleHRlcm4gbG9uZyBkb3VibGUgZm1heGwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBk b3VibGUgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZm1heGwgKGxvbmcgZG91 YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBkb3VibGUg Zm1pbmwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKTsgZXh0ZXJu IGxvbmcgZG91YmxlIF9fZm1pbmwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0 aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBfX2ZwY2xhc3NpZnlsIChsb25nIGRvdWJsZSBfX3ZhbHVl KSB0aHJvdyAoKQogICAgIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gaW50 IF9fc2lnbmJpdGwgKGxvbmcgZG91YmxlIF9fdmFsdWUpIHRocm93ICgpCiAgICAgX19hdHRyaWJ1 dGVfXyAoKF9fY29uc3RfXykpOwoKCgpleHRlcm4gbG9uZyBkb3VibGUgZm1hbCAobG9uZyBkb3Vi bGUgX194LCBsb25nIGRvdWJsZSBfX3ksIGxvbmcgZG91YmxlIF9feikgdGhyb3cgKCk7IGV4dGVy biBsb25nIGRvdWJsZSBfX2ZtYWwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195LCBs b25nIGRvdWJsZSBfX3opIHRocm93ICgpOwoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIHNjYWxibCAo bG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX24pIHRocm93ICgpOyBleHRlcm4gbG9uZyBk b3VibGUgX19zY2FsYmwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX19uKSB0aHJvdyAo KTsKIyAxMTAgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDIgMwojIDEyNSAiL3Vzci9pbmNsdWRlL21h dGguaCIgMwpleHRlcm4gaW50IHNpZ25nYW07CiMgMTY2ICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAz CmVudW0KICB7CiAgICBGUF9OQU4sCgogICAgRlBfSU5GSU5JVEUsCgogICAgRlBfWkVSTywKCiAg ICBGUF9TVUJOT1JNQUwsCgogICAgRlBfTk9STUFMCgogIH07CiMgMjUyICIvdXNyL2luY2x1ZGUv bWF0aC5oIiAzCnR5cGVkZWYgZW51bQp7CiAgX0lFRUVfID0gLTEsCiAgX1NWSURfLAogIF9YT1BF Tl8sCiAgX1BPU0lYXywKICBfSVNPQ18KfSBfTElCX1ZFUlNJT05fVFlQRTsKCgoKCmV4dGVybiBf TElCX1ZFUlNJT05fVFlQRSBfTElCX1ZFUlNJT047CiMgMjc1ICIvdXNyL2luY2x1ZGUvbWF0aC5o IiAzCnN0cnVjdCBfX2V4Y2VwdGlvbgoKCgogIHsKICAgIGludCB0eXBlOwogICAgY2hhciAqbmFt ZTsKICAgIGRvdWJsZSBhcmcxOwogICAgZG91YmxlIGFyZzI7CiAgICBkb3VibGUgcmV0dmFsOwog IH07CgoKZXh0ZXJuIGludCBtYXRoZXJyIChzdHJ1Y3QgX19leGNlcHRpb24gKl9fZXhjKSB0aHJv dyAoKTsKIyA0MjMgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDMKfQojIDUyICIvdXNyL2luY2x1ZGUv YysrLzMuMi9jbWF0aCIgMiAzCiMgNzkgIi91c3IvaW5jbHVkZS9jKysvMy4yL2NtYXRoIiAzCm5h bWVzcGFjZSBzdGQKewoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBfVHAgX19jbWF0aF9wb3dl cihfVHAsIHVuc2lnbmVkIGludCk7CgogIGlubGluZSBkb3VibGUKICBhYnMoZG91YmxlIF9feCkK ICB7IHJldHVybiBfX2J1aWx0aW5fZmFicyhfX3gpOyB9CgogIGlubGluZSBmbG9hdAogIGFicyhm bG9hdCBfX3gpCiAgeyByZXR1cm4gX19idWlsdGluX2ZhYnNmKF9feCk7IH0KCiAgaW5saW5lIGxv bmcgZG91YmxlCiAgYWJzKGxvbmcgZG91YmxlIF9feCkKICB7IHJldHVybiBfX2J1aWx0aW5fZmFi c2woX194KTsgfQoKCiAgaW5saW5lIGZsb2F0CiAgYWNvcyhmbG9hdCBfX3gpIHsgcmV0dXJuIDo6 YWNvc2YoX194KTsgfQoKCgoKCiAgdXNpbmcgOjphY29zOwoKCiAgaW5saW5lIGxvbmcgZG91Ymxl CiAgYWNvcyhsb25nIGRvdWJsZSBfX3gpIHsgcmV0dXJuIDo6YWNvc2woX194KTsgfQoKCgoKCiAg dXNpbmcgOjphc2luOwoKCiAgaW5saW5lIGZsb2F0CiAgYXNpbihmbG9hdCBfX3gpIHsgcmV0dXJu IDo6YXNpbmYoX194KTsgfQoKCgoKCgogIGlubGluZSBsb25nIGRvdWJsZQogIGFzaW4obG9uZyBk b3VibGUgX194KSB7IHJldHVybiA6OmFzaW5sKF9feCk7IH0KCgoKCgogIHVzaW5nIDo6YXRhbjsK CgogIGlubGluZSBmbG9hdAogIGF0YW4oZmxvYXQgX194KSB7IHJldHVybiA6OmF0YW5mKF9feCk7 IH0KCgoKCgoKICBpbmxpbmUgbG9uZyBkb3VibGUKICBhdGFuKGxvbmcgZG91YmxlIF9feCkgeyBy ZXR1cm4gOjphdGFubChfX3gpOyB9CgoKCgoKICB1c2luZyA6OmF0YW4yOwoKCiAgaW5saW5lIGZs b2F0CiAgYXRhbjIoZmxvYXQgX195LCBmbG9hdCBfX3gpIHsgcmV0dXJuIDo6YXRhbjJmKF9feSwg X194KTsgfQoKCgoKCgoKICBpbmxpbmUgbG9uZyBkb3VibGUKICBhdGFuMihsb25nIGRvdWJsZSBf X3ksIGxvbmcgZG91YmxlIF9feCkgeyByZXR1cm4gOjphdGFuMmwoX195LCBfX3gpOyB9CgoKCgoK CiAgdXNpbmcgOjpjZWlsOwoKCiAgaW5saW5lIGZsb2F0CiAgY2VpbChmbG9hdCBfX3gpIHsgcmV0 dXJuIDo6Y2VpbGYoX194KTsgfQoKCgoKCgogIGlubGluZSBsb25nIGRvdWJsZQogIGNlaWwobG9u ZyBkb3VibGUgX194KSB7IHJldHVybiA6OmNlaWxsKF9feCk7IH0KCgoKCgogIHVzaW5nIDo6Y29z OwoKICBpbmxpbmUgZmxvYXQKICBjb3MoZmxvYXQgX194KQogIHsgcmV0dXJuIF9fYnVpbHRpbl9j b3NmKF9feCk7IH0KCiAgaW5saW5lIGxvbmcgZG91YmxlCiAgY29zKGxvbmcgZG91YmxlIF9feCkK ICB7IHJldHVybiBfX2J1aWx0aW5fY29zbChfX3gpOyB9CgogIHVzaW5nIDo6Y29zaDsKCgogIGlu bGluZSBmbG9hdAogIGNvc2goZmxvYXQgX194KSB7IHJldHVybiA6OmNvc2hmKF9feCk7IH0KCgoK CgoKICBpbmxpbmUgbG9uZyBkb3VibGUKICBjb3NoKGxvbmcgZG91YmxlIF9feCkgeyByZXR1cm4g Ojpjb3NobChfX3gpOyB9CgoKCgoKICB1c2luZyA6OmV4cDsKCgogIGlubGluZSBmbG9hdAogIGV4 cChmbG9hdCBfX3gpIHsgcmV0dXJuIDo6ZXhwZihfX3gpOyB9CgoKCgoKCiAgaW5saW5lIGxvbmcg ZG91YmxlCiAgZXhwKGxvbmcgZG91YmxlIF9feCkgeyByZXR1cm4gOjpleHBsKF9feCk7IH0KCgoK CgogIHVzaW5nIDo6ZmFiczsKCiAgaW5saW5lIGZsb2F0CiAgZmFicyhmbG9hdCBfX3gpCiAgeyBy ZXR1cm4gX19idWlsdGluX2ZhYnNmKF9feCk7IH0KCiAgaW5saW5lIGxvbmcgZG91YmxlCiAgZmFi cyhsb25nIGRvdWJsZSBfX3gpCiAgeyByZXR1cm4gX19idWlsdGluX2ZhYnNsKF9feCk7IH0KCiAg dXNpbmcgOjpmbG9vcjsKCgogIGlubGluZSBmbG9hdAogIGZsb29yKGZsb2F0IF9feCkgeyByZXR1 cm4gOjpmbG9vcmYoX194KTsgfQoKCgoKCgogIGlubGluZSBsb25nIGRvdWJsZQogIGZsb29yKGxv bmcgZG91YmxlIF9feCkgeyByZXR1cm4gOjpmbG9vcmwoX194KTsgfQoKCgoKCiAgdXNpbmcgOjpm bW9kOwoKCiAgaW5saW5lIGZsb2F0CiAgZm1vZChmbG9hdCBfX3gsIGZsb2F0IF9feSkgeyByZXR1 cm4gOjpmbW9kZihfX3gsIF9feSk7IH0KCgoKCgoKCiAgaW5saW5lIGxvbmcgZG91YmxlCiAgZm1v ZChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgeyByZXR1cm4gOjpmbW9kbChfX3gs IF9feSk7IH0KCgoKCgoKICB1c2luZyA6OmZyZXhwOwoKCiAgaW5saW5lIGZsb2F0CiAgZnJleHAo ZmxvYXQgX194LCBpbnQqIF9fZXhwKSB7IHJldHVybiA6OmZyZXhwZihfX3gsIF9fZXhwKTsgfQoK CgoKCgogIGlubGluZSBsb25nIGRvdWJsZQogIGZyZXhwKGxvbmcgZG91YmxlIF9feCwgaW50KiBf X2V4cCkgeyByZXR1cm4gOjpmcmV4cGwoX194LCBfX2V4cCk7IH0KCgoKCgoKICB1c2luZyA6Omxk ZXhwOwoKCiAgaW5saW5lIGZsb2F0CiAgbGRleHAoZmxvYXQgX194LCBpbnQgX19leHApIHsgcmV0 dXJuIDo6bGRleHBmKF9feCwgX19leHApOyB9CgoKCgoKCgogIGlubGluZSBsb25nIGRvdWJsZQog IGxkZXhwKGxvbmcgZG91YmxlIF9feCwgaW50IF9fZXhwKSB7IHJldHVybiA6OmxkZXhwbChfX3gs IF9fZXhwKTsgfQoKCgoKCgogIHVzaW5nIDo6bG9nOwoKCiAgaW5saW5lIGZsb2F0CiAgbG9nKGZs b2F0IF9feCkgeyByZXR1cm4gOjpsb2dmKF9feCk7IH0KCgoKCgoKICBpbmxpbmUgbG9uZyBkb3Vi bGUKICBsb2cobG9uZyBkb3VibGUgX194KSB7IHJldHVybiA6OmxvZ2woX194KTsgfQoKCgoKCiAg dXNpbmcgOjpsb2cxMDsKCgogIGlubGluZSBmbG9hdAogIGxvZzEwKGZsb2F0IF9feCkgeyByZXR1 cm4gOjpsb2cxMGYoX194KTsgfQoKCgoKCgogIGlubGluZSBsb25nIGRvdWJsZQogIGxvZzEwKGxv bmcgZG91YmxlIF9feCkgeyByZXR1cm4gOjpsb2cxMGwoX194KTsgfQoKCgoKCiAgdXNpbmcgOjpt b2RmOwoKCiAgaW5saW5lIGZsb2F0CiAgbW9kZihmbG9hdCBfX3gsIGZsb2F0KiBfX2lwdHIpIHsg cmV0dXJuIDo6bW9kZmYoX194LCBfX2lwdHIpOyB9CiMgMzc1ICIvdXNyL2luY2x1ZGUvYysrLzMu Mi9jbWF0aCIgMwogIGlubGluZSBsb25nIGRvdWJsZQogIG1vZGYobG9uZyBkb3VibGUgX194LCBs b25nIGRvdWJsZSogX19pcHRyKSB7IHJldHVybiA6Om1vZGZsKF9feCwgX19pcHRyKTsgfQojIDM4 OCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvY21hdGgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+ CiAgICBpbmxpbmUgX1RwCiAgICBfX3Bvd19oZWxwZXIoX1RwIF9feCwgaW50IF9fbikKICAgIHsK ICAgICAgcmV0dXJuIF9fbiA8IDAKICAgICAgICA/IF9UcCgxKS9fX2NtYXRoX3Bvd2VyKF9feCwg LV9fbikKICAgICAgICA6IF9fY21hdGhfcG93ZXIoX194LCBfX24pOwogICAgfQoKICB1c2luZyA6 OnBvdzsKCgogIGlubGluZSBmbG9hdAogIHBvdyhmbG9hdCBfX3gsIGZsb2F0IF9feSkgeyByZXR1 cm4gOjpwb3dmKF9feCwgX195KTsgfQoKCgoKCgoKICBpbmxpbmUgbG9uZyBkb3VibGUKICBwb3co bG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHsgcmV0dXJuIDo6cG93bChfX3gsIF9f eSk7IH0KCgoKCgoKICBpbmxpbmUgZG91YmxlCiAgcG93KGRvdWJsZSBfX3gsIGludCBfX2kpCiAg eyByZXR1cm4gX19wb3dfaGVscGVyKF9feCwgX19pKTsgfQoKICBpbmxpbmUgZmxvYXQKICBwb3co ZmxvYXQgX194LCBpbnQgX19uKQogIHsgcmV0dXJuIF9fcG93X2hlbHBlcihfX3gsIF9fbik7IH0K CiAgaW5saW5lIGxvbmcgZG91YmxlCiAgcG93KGxvbmcgZG91YmxlIF9feCwgaW50IF9fbikKICB7 IHJldHVybiBfX3Bvd19oZWxwZXIoX194LCBfX24pOyB9CgogIHVzaW5nIDo6c2luOwoKICBpbmxp bmUgZmxvYXQKICBzaW4oZmxvYXQgX194KQogIHsgcmV0dXJuIF9fYnVpbHRpbl9zaW5mKF9feCk7 IH0KCiAgaW5saW5lIGxvbmcgZG91YmxlCiAgc2luKGxvbmcgZG91YmxlIF9feCkKICB7IHJldHVy biBfX2J1aWx0aW5fc2lubChfX3gpOyB9CgogIHVzaW5nIDo6c2luaDsKCgogIGlubGluZSBmbG9h dAogIHNpbmgoZmxvYXQgX194KSB7IHJldHVybiA6OnNpbmhmKF9feCk7IH0KCgoKCgoKICBpbmxp bmUgbG9uZyBkb3VibGUKICBzaW5oKGxvbmcgZG91YmxlIF9feCkgeyByZXR1cm4gOjpzaW5obChf X3gpOyB9CgoKCgoKICB1c2luZyA6OnNxcnQ7CgogIGlubGluZSBmbG9hdAogIHNxcnQoZmxvYXQg X194KQogIHsgcmV0dXJuIF9fYnVpbHRpbl9zcXJ0ZihfX3gpOyB9CgogIGlubGluZSBsb25nIGRv dWJsZQogIHNxcnQobG9uZyBkb3VibGUgX194KQogIHsgcmV0dXJuIF9fYnVpbHRpbl9zcXJ0bChf X3gpOyB9CgogIHVzaW5nIDo6dGFuOwoKCiAgaW5saW5lIGZsb2F0CiAgdGFuKGZsb2F0IF9feCkg eyByZXR1cm4gOjp0YW5mKF9feCk7IH0KCgoKCgoKICBpbmxpbmUgbG9uZyBkb3VibGUKICB0YW4o bG9uZyBkb3VibGUgX194KSB7IHJldHVybiA6OnRhbmwoX194KTsgfQoKCgoKCiAgdXNpbmcgOjp0 YW5oOwoKCiAgaW5saW5lIGZsb2F0CiAgdGFuaChmbG9hdCBfX3gpIHsgcmV0dXJuIDo6dGFuaGYo X194KTsgfQoKCgoKCgogIGlubGluZSBsb25nIGRvdWJsZQogIHRhbmgobG9uZyBkb3VibGUgX194 KSB7IHJldHVybiA6OnRhbmhsKF9feCk7IH0KCgoKCn0KCgoKCgoKbmFtZXNwYWNlIF9fZ251X2N4 eAp7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW50CiAgICBfX2NhcHR1cmVfZnBjbGFz c2lmeShfVHAgX19mKSB7IHJldHVybiAoc2l6ZW9mIChfX2YpID09IHNpemVvZiAoZmxvYXQpID8g X19mcGNsYXNzaWZ5ZiAoX19mKSA6IHNpemVvZiAoX19mKSA9PSBzaXplb2YgKGRvdWJsZSkgPyBf X2ZwY2xhc3NpZnkgKF9fZikgOiBfX2ZwY2xhc3NpZnlsIChfX2YpKTsgfQoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfVHA+CiAgICBpbnQKICAgIF9fY2FwdHVyZV9pc2Zpbml0ZShfVHAgX19mKSB7IHJl dHVybiAoc2l6ZW9mIChfX2YpID09IHNpemVvZiAoZmxvYXQpID8gX19maW5pdGVmIChfX2YpIDog c2l6ZW9mIChfX2YpID09IHNpemVvZiAoZG91YmxlKSA/IF9fZmluaXRlIChfX2YpIDogX19maW5p dGVsIChfX2YpKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbnQKICAgIF9fY2Fw dHVyZV9pc2luZihfVHAgX19mKSB7IHJldHVybiAoc2l6ZW9mIChfX2YpID09IHNpemVvZiAoZmxv YXQpID8gX19pc2luZmYgKF9fZikgOiBzaXplb2YgKF9fZikgPT0gc2l6ZW9mIChkb3VibGUpID8g X19pc2luZiAoX19mKSA6IF9faXNpbmZsIChfX2YpKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf VHA+CiAgICBpbnQKICAgIF9fY2FwdHVyZV9pc25hbihfVHAgX19mKSB7IHJldHVybiAoc2l6ZW9m IChfX2YpID09IHNpemVvZiAoZmxvYXQpID8gX19pc25hbmYgKF9fZikgOiBzaXplb2YgKF9fZikg PT0gc2l6ZW9mIChkb3VibGUpID8gX19pc25hbiAoX19mKSA6IF9faXNuYW5sIChfX2YpKTsgfQoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbnQKICAgIF9fY2FwdHVyZV9pc25vcm1hbChf VHAgX19mKSB7IHJldHVybiAoKHNpemVvZiAoX19mKSA9PSBzaXplb2YgKGZsb2F0KSA/IF9fZnBj bGFzc2lmeWYgKF9fZikgOiBzaXplb2YgKF9fZikgPT0gc2l6ZW9mIChkb3VibGUpID8gX19mcGNs YXNzaWZ5IChfX2YpIDogX19mcGNsYXNzaWZ5bCAoX19mKSkgPT0gRlBfTk9STUFMKTsgfQoKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbnQKICAgIF9fY2FwdHVyZV9zaWduYml0KF9UcCBf X2YpIHsgcmV0dXJuIChzaXplb2YgKF9fZikgPT0gc2l6ZW9mIChmbG9hdCkgPyBfX3NpZ25iaXRm IChfX2YpIDogc2l6ZW9mIChfX2YpID09IHNpemVvZiAoZG91YmxlKSA/IF9fc2lnbmJpdCAoX19m KSA6IF9fc2lnbmJpdGwgKF9fZikpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGlu dAogICAgX19jYXB0dXJlX2lzZ3JlYXRlcihfVHAgX19mMSwgX1RwIF9fZjIpCiAgICB7IHJldHVy biAoX19leHRlbnNpb25fXyAoeyBfX3R5cGVvZl9fKF9fZjEpIF9feCA9IChfX2YxKTsgX190eXBl b2ZfXyhfX2YyKSBfX3kgPSAoX19mMik7ICEoX19leHRlbnNpb25fXyAoeyBfX3R5cGVvZl9fKF9f eCkgX191ID0gKF9feCk7IF9fdHlwZW9mX18oX195KSBfX3YgPSAoX195KTsgKHNpemVvZiAoX191 KSA9PSBzaXplb2YgKGZsb2F0KSA/IF9fZnBjbGFzc2lmeWYgKF9fdSkgOiBzaXplb2YgKF9fdSkg PT0gc2l6ZW9mIChkb3VibGUpID8gX19mcGNsYXNzaWZ5IChfX3UpIDogX19mcGNsYXNzaWZ5bCAo X191KSkgPT0gRlBfTkFOIHx8IChzaXplb2YgKF9fdikgPT0gc2l6ZW9mIChmbG9hdCkgPyBfX2Zw Y2xhc3NpZnlmIChfX3YpIDogc2l6ZW9mIChfX3YpID09IHNpemVvZiAoZG91YmxlKSA/IF9fZnBj bGFzc2lmeSAoX192KSA6IF9fZnBjbGFzc2lmeWwgKF9fdikpID09IEZQX05BTjsgfSkpICYmIF9f eCA+IF9feTsgfSkpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgICBpbnQKICAgICBf X2NhcHR1cmVfaXNncmVhdGVyZXF1YWwoX1RwIF9fZjEsIF9UcCBfX2YyKQogICAgIHsgcmV0dXJu IChfX2V4dGVuc2lvbl9fICh7IF9fdHlwZW9mX18oX19mMSkgX194ID0gKF9fZjEpOyBfX3R5cGVv Zl9fKF9fZjIpIF9feSA9IChfX2YyKTsgIShfX2V4dGVuc2lvbl9fICh7IF9fdHlwZW9mX18oX194 KSBfX3UgPSAoX194KTsgX190eXBlb2ZfXyhfX3kpIF9fdiA9IChfX3kpOyAoc2l6ZW9mIChfX3Up ID09IHNpemVvZiAoZmxvYXQpID8gX19mcGNsYXNzaWZ5ZiAoX191KSA6IHNpemVvZiAoX191KSA9 PSBzaXplb2YgKGRvdWJsZSkgPyBfX2ZwY2xhc3NpZnkgKF9fdSkgOiBfX2ZwY2xhc3NpZnlsIChf X3UpKSA9PSBGUF9OQU4gfHwgKHNpemVvZiAoX192KSA9PSBzaXplb2YgKGZsb2F0KSA/IF9fZnBj bGFzc2lmeWYgKF9fdikgOiBzaXplb2YgKF9fdikgPT0gc2l6ZW9mIChkb3VibGUpID8gX19mcGNs YXNzaWZ5IChfX3YpIDogX19mcGNsYXNzaWZ5bCAoX192KSkgPT0gRlBfTkFOOyB9KSkgJiYgX194 ID49IF9feTsgfSkpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgICBpbnQKICAgICBf X2NhcHR1cmVfaXNsZXNzKF9UcCBfX2YxLCBfVHAgX19mMikgeyByZXR1cm4gKF9fZXh0ZW5zaW9u X18gKHsgX190eXBlb2ZfXyhfX2YxKSBfX3ggPSAoX19mMSk7IF9fdHlwZW9mX18oX19mMikgX195 ID0gKF9fZjIpOyAhKF9fZXh0ZW5zaW9uX18gKHsgX190eXBlb2ZfXyhfX3gpIF9fdSA9IChfX3gp OyBfX3R5cGVvZl9fKF9feSkgX192ID0gKF9feSk7IChzaXplb2YgKF9fdSkgPT0gc2l6ZW9mIChm bG9hdCkgPyBfX2ZwY2xhc3NpZnlmIChfX3UpIDogc2l6ZW9mIChfX3UpID09IHNpemVvZiAoZG91 YmxlKSA/IF9fZnBjbGFzc2lmeSAoX191KSA6IF9fZnBjbGFzc2lmeWwgKF9fdSkpID09IEZQX05B TiB8fCAoc2l6ZW9mIChfX3YpID09IHNpemVvZiAoZmxvYXQpID8gX19mcGNsYXNzaWZ5ZiAoX192 KSA6IHNpemVvZiAoX192KSA9PSBzaXplb2YgKGRvdWJsZSkgPyBfX2ZwY2xhc3NpZnkgKF9fdikg OiBfX2ZwY2xhc3NpZnlsIChfX3YpKSA9PSBGUF9OQU47IH0pKSAmJiBfX3ggPCBfX3k7IH0pKTsg fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICAgaW50CiAgICAgX19jYXB0dXJlX2lzbGVz c2VxdWFsKF9UcCBfX2YxLCBfVHAgX19mMikKICAgICB7IHJldHVybiAoX19leHRlbnNpb25fXyAo eyBfX3R5cGVvZl9fKF9fZjEpIF9feCA9IChfX2YxKTsgX190eXBlb2ZfXyhfX2YyKSBfX3kgPSAo X19mMik7ICEoX19leHRlbnNpb25fXyAoeyBfX3R5cGVvZl9fKF9feCkgX191ID0gKF9feCk7IF9f dHlwZW9mX18oX195KSBfX3YgPSAoX195KTsgKHNpemVvZiAoX191KSA9PSBzaXplb2YgKGZsb2F0 KSA/IF9fZnBjbGFzc2lmeWYgKF9fdSkgOiBzaXplb2YgKF9fdSkgPT0gc2l6ZW9mIChkb3VibGUp ID8gX19mcGNsYXNzaWZ5IChfX3UpIDogX19mcGNsYXNzaWZ5bCAoX191KSkgPT0gRlBfTkFOIHx8 IChzaXplb2YgKF9fdikgPT0gc2l6ZW9mIChmbG9hdCkgPyBfX2ZwY2xhc3NpZnlmIChfX3YpIDog c2l6ZW9mIChfX3YpID09IHNpemVvZiAoZG91YmxlKSA/IF9fZnBjbGFzc2lmeSAoX192KSA6IF9f ZnBjbGFzc2lmeWwgKF9fdikpID09IEZQX05BTjsgfSkpICYmIF9feCA8PSBfX3k7IH0pKTsgfQoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICAgaW50CiAgICAgX19jYXB0dXJlX2lzbGVzc2dy ZWF0ZXIoX1RwIF9fZjEsIF9UcCBfX2YyKQogICAgIHsgcmV0dXJuIChfX2V4dGVuc2lvbl9fICh7 IF9fdHlwZW9mX18oX19mMSkgX194ID0gKF9fZjEpOyBfX3R5cGVvZl9fKF9fZjIpIF9feSA9IChf X2YyKTsgIShfX2V4dGVuc2lvbl9fICh7IF9fdHlwZW9mX18oX194KSBfX3UgPSAoX194KTsgX190 eXBlb2ZfXyhfX3kpIF9fdiA9IChfX3kpOyAoc2l6ZW9mIChfX3UpID09IHNpemVvZiAoZmxvYXQp ID8gX19mcGNsYXNzaWZ5ZiAoX191KSA6IHNpemVvZiAoX191KSA9PSBzaXplb2YgKGRvdWJsZSkg PyBfX2ZwY2xhc3NpZnkgKF9fdSkgOiBfX2ZwY2xhc3NpZnlsIChfX3UpKSA9PSBGUF9OQU4gfHwg KHNpemVvZiAoX192KSA9PSBzaXplb2YgKGZsb2F0KSA/IF9fZnBjbGFzc2lmeWYgKF9fdikgOiBz aXplb2YgKF9fdikgPT0gc2l6ZW9mIChkb3VibGUpID8gX19mcGNsYXNzaWZ5IChfX3YpIDogX19m cGNsYXNzaWZ5bCAoX192KSkgPT0gRlBfTkFOOyB9KSkgJiYgKF9feCA8IF9feSB8fCBfX3kgPCBf X3gpOyB9KSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgIGludAogICAgIF9fY2Fw dHVyZV9pc3Vub3JkZXJlZChfVHAgX19mMSwgX1RwIF9fZjIpCiAgICAgeyByZXR1cm4gKF9fZXh0 ZW5zaW9uX18gKHsgX190eXBlb2ZfXyhfX2YxKSBfX3UgPSAoX19mMSk7IF9fdHlwZW9mX18oX19m MikgX192ID0gKF9fZjIpOyAoc2l6ZW9mIChfX3UpID09IHNpemVvZiAoZmxvYXQpID8gX19mcGNs YXNzaWZ5ZiAoX191KSA6IHNpemVvZiAoX191KSA9PSBzaXplb2YgKGRvdWJsZSkgPyBfX2ZwY2xh c3NpZnkgKF9fdSkgOiBfX2ZwY2xhc3NpZnlsIChfX3UpKSA9PSBGUF9OQU4gfHwgKHNpemVvZiAo X192KSA9PSBzaXplb2YgKGZsb2F0KSA/IF9fZnBjbGFzc2lmeWYgKF9fdikgOiBzaXplb2YgKF9f dikgPT0gc2l6ZW9mIChkb3VibGUpID8gX19mcGNsYXNzaWZ5IChfX3YpIDogX19mcGNsYXNzaWZ5 bCAoX192KSkgPT0gRlBfTkFOOyB9KSk7IH0KfQojIDU4MCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIv Y21hdGgiIDMKbmFtZXNwYWNlIF9fZ251X2N4eAp7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgog ICAgaW50CiAgICBmcGNsYXNzaWZ5KF9UcCBfX2YpIHsgcmV0dXJuIF9fY2FwdHVyZV9mcGNsYXNz aWZ5KF9fZik7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW50CiAgICBpc2Zpbml0 ZShfVHAgX19mKSB7IHJldHVybiBfX2NhcHR1cmVfaXNmaW5pdGUoX19mKTsgfQoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfVHA+CiAgICBpbnQKICAgIGlzaW5mKF9UcCBfX2YpIHsgcmV0dXJuIF9fY2Fw dHVyZV9pc2luZihfX2YpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGludAogICAg aXNuYW4oX1RwIF9fZikgeyByZXR1cm4gX19jYXB0dXJlX2lzbmFuKF9fZik7IH0KCiAgdGVtcGxh dGU8dHlwZW5hbWUgX1RwPgogICAgaW50CiAgICBpc25vcm1hbChfVHAgX19mKSB7IHJldHVybiBf X2NhcHR1cmVfaXNub3JtYWwoX19mKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBp bnQKICAgIHNpZ25iaXQoX1RwIF9fZikgeyByZXR1cm4gX19jYXB0dXJlX3NpZ25iaXQoX19mKTsg fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbnQKICAgIGlzZ3JlYXRlcihfVHAgX19m MSwgX1RwIF9fZjIpIHsgcmV0dXJuIF9fY2FwdHVyZV9pc2dyZWF0ZXIoX19mMSwgX19mMik7IH0K CiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW50CiAgICBpc2dyZWF0ZXJlcXVhbChfVHAg X19mMSwgX1RwIF9fZjIpCiAgICB7IHJldHVybiBfX2NhcHR1cmVfaXNncmVhdGVyZXF1YWwoX19m MSwgX19mMik7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW50CiAgICBpc2xlc3Mo X1RwIF9fZjEsIF9UcCBfX2YyKSB7IHJldHVybiBfX2NhcHR1cmVfaXNsZXNzKF9fZjEsIF9fZjIp OyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGludAogICAgaXNsZXNzZXF1YWwoX1Rw IF9fZjEsIF9UcCBfX2YyKQogICAgeyByZXR1cm4gX19jYXB0dXJlX2lzbGVzc2VxdWFsKF9fZjEs IF9fZjIpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGludAogICAgaXNsZXNzZ3Jl YXRlcihfVHAgX19mMSwgX1RwIF9fZjIpCiAgICB7IHJldHVybiBfX2NhcHR1cmVfaXNsZXNzZ3Jl YXRlcihfX2YxLCBfX2YyKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbnQKICAg IGlzdW5vcmRlcmVkKF9UcCBfX2YxLCBfVHAgX19mMikKICAgIHsgcmV0dXJuIF9fY2FwdHVyZV9p c3Vub3JkZXJlZChfX2YxLCBfX2YyKTsgfQp9CgpuYW1lc3BhY2Ugc3RkCnsKICB1c2luZyBfX2du dV9jeHg6OmZwY2xhc3NpZnk7CiAgdXNpbmcgX19nbnVfY3h4Ojppc2Zpbml0ZTsKICB1c2luZyBf X2dudV9jeHg6OmlzaW5mOwogIHVzaW5nIF9fZ251X2N4eDo6aXNuYW47CiAgdXNpbmcgX19nbnVf Y3h4Ojppc25vcm1hbDsKICB1c2luZyBfX2dudV9jeHg6OnNpZ25iaXQ7CiAgdXNpbmcgX19nbnVf Y3h4Ojppc2dyZWF0ZXI7CiAgdXNpbmcgX19nbnVfY3h4Ojppc2dyZWF0ZXJlcXVhbDsKICB1c2lu ZyBfX2dudV9jeHg6OmlzbGVzczsKICB1c2luZyBfX2dudV9jeHg6OmlzbGVzc2VxdWFsOwogIHVz aW5nIF9fZ251X2N4eDo6aXNsZXNzZ3JlYXRlcjsKICB1c2luZyBfX2dudV9jeHg6OmlzdW5vcmRl cmVkOwp9CgoKCgojIDEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvY21hdGgudGNjIiAxIDMK IyAzNSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9jbWF0aC50Y2MiIDMKbmFtZXNwYWNlIHN0 ZAp7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgX1RwCiAgICBfX2NtYXRoX3Bvd2VyKF9U cCBfX3gsIHVuc2lnbmVkIGludCBfX24pCiAgICB7CiAgICAgIF9UcCBfX3kgPSBfX24gJSAyID8g X194IDogMTsKCiAgICAgIHdoaWxlIChfX24gPj49IDEpCiAgICAgICAgewogICAgICAgICAgX194 ID0gX194ICogX194OwogICAgICAgICAgaWYgKF9fbiAlIDIpCiAgICAgICAgICAgIF9feSA9IF9f eSAqIF9feDsKICAgICAgICB9CgogICAgICByZXR1cm4gX195OwogICAgfQp9CiMgNjU1ICIvdXNy L2luY2x1ZGUvYysrLzMuMi9jbWF0aCIgMiAzCiMgNDIgIi91c3IvaW5jbHVkZS9jKysvMy4yL2Jp dHMvbG9jYWxlX2ZhY2V0cy50Y2MiIDIgMwoKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9saW1p dHMiIDEgMwojIDQ3ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9saW1pdHMiIDMKCiMgMSAiL3Vzci9p bmNsdWRlL2MrKy8zLjIvaTM4Ni1saW51eC9iaXRzL2NwdV9saW1pdHMuaCIgMSAzCiMgNDkgIi91 c3IvaW5jbHVkZS9jKysvMy4yL2xpbWl0cyIgMiAzCiMgODg3ICIvdXNyL2luY2x1ZGUvYysrLzMu Mi9saW1pdHMiIDMKbmFtZXNwYWNlIHN0ZAp7CiAgZW51bSBmbG9hdF9yb3VuZF9zdHlsZQogIHsK ICAgIHJvdW5kX2luZGV0ZXJtaW5hdGUgPSAtMSwKICAgIHJvdW5kX3Rvd2FyZF96ZXJvID0gMCwK ICAgIHJvdW5kX3RvX25lYXJlc3QgPSAxLAogICAgcm91bmRfdG93YXJkX2luZmluaXR5ID0gMiwK ICAgIHJvdW5kX3Rvd2FyZF9uZWdfaW5maW5pdHkgPSAzCiAgfTsKCiAgZW51bSBmbG9hdF9kZW5v cm1fc3R5bGUKICB7CiAgICBkZW5vcm1faW5kZXRlcm1pbmF0ZSA9IC0xLAogICAgZGVub3JtX2Fi c2VudCA9IDAsCiAgICBkZW5vcm1fcHJlc2VudCA9IDEKICB9OwoKCgoKICBzdHJ1Y3QgX19udW1l cmljX2xpbWl0c19iYXNlCiAgewogICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQg PSBmYWxzZTsKCiAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IDA7CiAgICBzdGF0aWMgY29u c3QgaW50IGRpZ2l0czEwID0gMDsKICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IGZh bHNlOwogICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IGZhbHNlOwogICAgc3RhdGlj IGNvbnN0IGJvb2wgaXNfZXhhY3QgPSBmYWxzZTsKICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXgg PSAwOwoKICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50ID0gMDsKICAgIHN0YXRpYyBj b25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAwOwogICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhw b25lbnQgPSAwOwogICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDA7CgogICAg c3RhdGljIGNvbnN0IGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7CiAgICBzdGF0aWMgY29uc3Qg Ym9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7CiAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2ln bmFsaW5nX05hTiA9IGZhbHNlOwogICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBo YXNfZGVub3JtID0gZGVub3JtX2Fic2VudDsKICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5v cm1fbG9zcyA9IGZhbHNlOwoKICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IGZhbHNl OwogICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IGZhbHNlOwogICAgc3RhdGljIGNv bnN0IGJvb2wgaXNfbW9kdWxvID0gZmFsc2U7CgogICAgc3RhdGljIGNvbnN0IGJvb2wgdHJhcHMg PSBmYWxzZTsKICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOwog ICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxlID0gcm91bmRfdG93 YXJkX3plcm87CiAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgc3RydWN0IG51bWVy aWNfbGltaXRzIDogcHVibGljIF9fbnVtZXJpY19saW1pdHNfYmFzZQogICAgewogICAgICBzdGF0 aWMgX1RwIG1pbigpIHRocm93KCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8X1RwPigwKTsgfQogICAg ICBzdGF0aWMgX1RwIG1heCgpIHRocm93KCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8X1RwPigwKTsg fQogICAgICBzdGF0aWMgX1RwIGVwc2lsb24oKSB0aHJvdygpIHsgcmV0dXJuIHN0YXRpY19jYXN0 PF9UcD4oMCk7IH0KICAgICAgc3RhdGljIF9UcCByb3VuZF9lcnJvcigpIHRocm93KCkgeyByZXR1 cm4gc3RhdGljX2Nhc3Q8X1RwPigwKTsgfQogICAgICBzdGF0aWMgX1RwIGluZmluaXR5KCkgdGhy b3coKSB7IHJldHVybiBzdGF0aWNfY2FzdDxfVHA+KDApOyB9CiAgICAgIHN0YXRpYyBfVHAgcXVp ZXRfTmFOKCkgdGhyb3coKSB7IHJldHVybiBzdGF0aWNfY2FzdDxfVHA+KDApOyB9CiAgICAgIHN0 YXRpYyBfVHAgc2lnbmFsaW5nX05hTigpIHRocm93KCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8X1Rw PigwKTsgfQogICAgICBzdGF0aWMgX1RwIGRlbm9ybV9taW4oKSB0aHJvdygpIHsgcmV0dXJuIHN0 YXRpY19jYXN0PF9UcD4oMCk7IH0KICAgIH07CgoKCiAgdGVtcGxhdGU8PgogICAgc3RydWN0IG51 bWVyaWNfbGltaXRzPGJvb2w+CiAgICB7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NwZWNp YWxpemVkID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyBib29sIG1pbigpIHRocm93KCkKICAgICAgeyBy ZXR1cm4gZmFsc2U7IH0KCiAgICAgIHN0YXRpYyBib29sIG1heCgpIHRocm93KCkKICAgICAgeyBy ZXR1cm4gdHJ1ZTsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMgPSAxOwogICAgICBz dGF0aWMgY29uc3QgaW50IGRpZ2l0czEwID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNf c2lnbmVkID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIgPSB0cnVl OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IHRydWU7CiAgICAgIHN0YXRpYyBj b25zdCBpbnQgcmFkaXggPSAyOwogICAgICBzdGF0aWMgYm9vbCBlcHNpbG9uKCkgdGhyb3coKQog ICAgICB7IHJldHVybiBmYWxzZTsgfQogICAgICBzdGF0aWMgYm9vbCByb3VuZF9lcnJvcigpIHRo cm93KCkKICAgICAgeyByZXR1cm4gZmFsc2U7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWlu X2V4cG9uZW50ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9IDA7 CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMDsKICAgICAgc3RhdGljIGNv bnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDA7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNf aW5maW5pdHkgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9 IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGZhbHNl OwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPSBkZW5v cm1fYWJzZW50OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3MgPSBmYWxz ZTsKCiAgICAgIHN0YXRpYyBib29sIGluZmluaXR5KCkgdGhyb3coKQogICAgICB7IHJldHVybiBm YWxzZTsgfQogICAgICBzdGF0aWMgYm9vbCBxdWlldF9OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0 dXJuIGZhbHNlOyB9CiAgICAgIHN0YXRpYyBib29sIHNpZ25hbGluZ19OYU4oKSB0aHJvdygpCiAg ICAgIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgIHN0YXRpYyBib29sIGRlbm9ybV9taW4oKSB0aHJv dygpCiAgICAgIHsgcmV0dXJuIGZhbHNlOyB9CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19p ZWM1NTkgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7 CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX21vZHVsbyA9IGZhbHNlOwoKCgoKICAgICAgc3Rh dGljIGNvbnN0IGJvb2wgdHJhcHMgPSB0cnVlCiAgICAgICAgICAgICAgIHx8IHRydWU7CiAgICAg IHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOwogICAgICBzdGF0aWMg Y29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSByb3VuZF90b3dhcmRfemVybzsK ICAgIH07CgoKCiAgdGVtcGxhdGU8PgogICAgc3RydWN0IG51bWVyaWNfbGltaXRzPGNoYXI+CiAg ICB7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsKCiAgICAg IHN0YXRpYyBjaGFyIG1pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gKGNoYXIpKC0xMjcgLSAx KTsgfQogICAgICBzdGF0aWMgY2hhciBtYXgoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIChjaGFy KTEyNzsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMgPSA3OwogICAgICBzdGF0aWMg Y29uc3QgaW50IGRpZ2l0czEwID0gMjsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVk ID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IHRydWU7CiAgICAg IHN0YXRpYyBjb25zdCBib29sIGlzX2V4YWN0ID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGlu dCByYWRpeCA9IDI7CiAgICAgIHN0YXRpYyBjaGFyIGVwc2lsb24oKSB0aHJvdygpCiAgICAgIHsg cmV0dXJuIGNoYXIoKTsgfQogICAgICBzdGF0aWMgY2hhciByb3VuZF9lcnJvcigpIHRocm93KCkK ICAgICAgeyByZXR1cm4gY2hhcigpOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBv bmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAwOwogICAg ICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBp bnQgbWF4X2V4cG9uZW50MTAgPSAwOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2luZmlu aXR5ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9OYU4gPSBmYWxz ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPSBmYWxzZTsKICAg ICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtID0gZGVub3JtX2Fi c2VudDsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7Cgog ICAgICBzdGF0aWMgY2hhciBpbmZpbml0eSgpIHRocm93KCkKICAgICAgeyByZXR1cm4gY2hhcigp OyB9CiAgICAgIHN0YXRpYyBjaGFyIHF1aWV0X05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4g Y2hhcigpOyB9CiAgICAgIHN0YXRpYyBjaGFyIHNpZ25hbGluZ19OYU4oKSB0aHJvdygpCiAgICAg IHsgcmV0dXJuIGNoYXIoKTsgfQogICAgICBzdGF0aWMgY2hhciBkZW5vcm1fbWluKCkgdGhyb3co KQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxjaGFyPigwKTsgfQoKICAgICAgc3RhdGljIGNv bnN0IGJvb2wgaXNfaWVjNTU5ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2Jv dW5kZWQgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSB0cnVlOwoK ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdHJhcHMgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3Qg Ym9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X3Jv dW5kX3N0eWxlIHJvdW5kX3N0eWxlID0gcm91bmRfdG93YXJkX3plcm87CiAgICB9OwojIDEwNzEg Ii91c3IvaW5jbHVkZS9jKysvMy4yL2xpbWl0cyIgMwogIHRlbXBsYXRlPD4KICAgIHN0cnVjdCBu dW1lcmljX2xpbWl0czxzaWduZWQgY2hhcj4KICAgIHsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wg aXNfc3BlY2lhbGl6ZWQgPSB0cnVlOwoKICAgICAgc3RhdGljIHNpZ25lZCBjaGFyIG1pbigpIHRo cm93KCkKICAgICAgeyByZXR1cm4gKC0xMjcgLSAxKTsgfQogICAgICBzdGF0aWMgc2lnbmVkIGNo YXIgbWF4KCkgdGhyb3coKQogICAgICB7IHJldHVybiAxMjc7IH0KCiAgICAgIHN0YXRpYyBjb25z dCBpbnQgZGlnaXRzID0gNzsKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9IDI7CiAg ICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25z dCBib29sIGlzX2ludGVnZXIgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFj dCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAyOwogICAgICBzdGF0aWMg c2lnbmVkIGNoYXIgZXBzaWxvbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQogICAgICBz dGF0aWMgc2lnbmVkIGNoYXIgcm91bmRfZXJyb3IoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7 IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50ID0gMDsKICAgICAgc3RhdGlj IGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4 X2V4cG9uZW50ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDA7 CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxzZTsKICAgICAgc3Rh dGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3Qg Ym9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRf ZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1fYWJzZW50OwogICAgICBzdGF0aWMgY29u c3QgYm9vbCBoYXNfZGVub3JtX2xvc3MgPSBmYWxzZTsKCiAgICAgIHN0YXRpYyBzaWduZWQgY2hh ciBpbmZpbml0eSgpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8c2lnbmVkIGNo YXI+KDApOyB9CiAgICAgIHN0YXRpYyBzaWduZWQgY2hhciBxdWlldF9OYU4oKSB0aHJvdygpCiAg ICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHNpZ25lZCBjaGFyPigwKTsgfQogICAgICBzdGF0aWMg c2lnbmVkIGNoYXIgc2lnbmFsaW5nX05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGlj X2Nhc3Q8c2lnbmVkIGNoYXI+KDApOyB9CiAgICAgIHN0YXRpYyBzaWduZWQgY2hhciBkZW5vcm1f bWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxzaWduZWQgY2hhcj4oMCk7 IH0KCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IGZhbHNlOwogICAgICBzdGF0 aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wg aXNfbW9kdWxvID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gdHJ1ZTsK ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7CiAgICAgIHN0 YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96 ZXJvOwogICAgfTsKIyAxMTI4ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9saW1pdHMiIDMKICB0ZW1w bGF0ZTw+CiAgICBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8dW5zaWduZWQgY2hhcj4KICAgIHsKICAg ICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOwoKICAgICAgc3RhdGlj IHVuc2lnbmVkIGNoYXIgbWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwOyB9CiAgICAgIHN0 YXRpYyB1bnNpZ25lZCBjaGFyIG1heCgpIHRocm93KCkKICAgICAgeyByZXR1cm4gKDEyNyAqIDIg KyAxKTsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMgPSA4OwogICAgICBzdGF0aWMg Y29uc3QgaW50IGRpZ2l0czEwID0gMjsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVk ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIgPSB0cnVlOwogICAg ICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBp bnQgcmFkaXggPSAyOwogICAgICBzdGF0aWMgdW5zaWduZWQgY2hhciBlcHNpbG9uKCkgdGhyb3co KQogICAgICB7IHJldHVybiAwOyB9CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBjaGFyIHJvdW5kX2Vy cm9yKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50 IG1pbl9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAg PSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRp YyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wg aGFzX2luZmluaXR5ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9O YU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPSBm YWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtID0g ZGVub3JtX2Fic2VudDsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0g ZmFsc2U7CgogICAgICBzdGF0aWMgdW5zaWduZWQgY2hhciBpbmZpbml0eSgpIHRocm93KCkKICAg ICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oMCk7IH0KICAgICAgc3RhdGlj IHVuc2lnbmVkIGNoYXIgcXVpZXRfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNf Y2FzdDx1bnNpZ25lZCBjaGFyPigwKTsgfQogICAgICBzdGF0aWMgdW5zaWduZWQgY2hhciBzaWdu YWxpbmdfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBj aGFyPigwKTsgfQogICAgICBzdGF0aWMgdW5zaWduZWQgY2hhciBkZW5vcm1fbWluKCkgdGhyb3co KQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPigwKTsgfQoKICAgICAg c3RhdGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBi b29sIGlzX2JvdW5kZWQgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8g PSB0cnVlOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdHJhcHMgPSB0cnVlOwogICAgICBzdGF0 aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0 IGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxlID0gcm91bmRfdG93YXJkX3plcm87CiAgICB9 OwoKCgoKCgogIHRlbXBsYXRlPD4KICAgIHN0cnVjdCBudW1lcmljX2xpbWl0czx3Y2hhcl90Pgog ICAgewogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRydWU7CgogICAg ICBzdGF0aWMgd2NoYXJfdCBtaW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuICh3Y2hhcl90KSgt MjE0NzQ4MzY0N0wgLSAxKTsgfQogICAgICBzdGF0aWMgd2NoYXJfdCBtYXgoKSB0aHJvdygpCiAg ICAgIHsgcmV0dXJuICh3Y2hhcl90KTIxNDc0ODM2NDdMOyB9CgogICAgICBzdGF0aWMgY29uc3Qg aW50IGRpZ2l0cyA9IDMxOwogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0czEwID0gOTsKICAg ICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0 IGJvb2wgaXNfaW50ZWdlciA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2V4YWN0 ID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9IDI7CiAgICAgIHN0YXRpYyB3 Y2hhcl90IGVwc2lsb24oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7IH0KICAgICAgc3RhdGlj IHdjaGFyX3Qgcm91bmRfZXJyb3IoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7IH0KCiAgICAg IHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGlu dCBtaW5fZXhwb25lbnQxMCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50 ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDA7CgogICAgICBz dGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0 IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNf c2lnbmFsaW5nX05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0 eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1fYWJzZW50OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBo YXNfZGVub3JtX2xvc3MgPSBmYWxzZTsKCiAgICAgIHN0YXRpYyB3Y2hhcl90IGluZmluaXR5KCkg dGhyb3coKQogICAgICB7IHJldHVybiB3Y2hhcl90KCk7IH0KICAgICAgc3RhdGljIHdjaGFyX3Qg cXVpZXRfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiB3Y2hhcl90KCk7IH0KICAgICAgc3Rh dGljIHdjaGFyX3Qgc2lnbmFsaW5nX05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gd2NoYXJf dCgpOyB9CiAgICAgIHN0YXRpYyB3Y2hhcl90IGRlbm9ybV9taW4oKSB0aHJvdygpCiAgICAgIHsg cmV0dXJuIHdjaGFyX3QoKTsgfQoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5ID0g ZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2JvdW5kZWQgPSB0cnVlOwogICAgICBz dGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSB0cnVlOwoKICAgICAgc3RhdGljIGNvbnN0IGJv b2wgdHJhcHMgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUg PSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxl ID0gcm91bmRfdG93YXJkX3plcm87CiAgICB9OwojIDEyNDEgIi91c3IvaW5jbHVkZS9jKysvMy4y L2xpbWl0cyIgMwogIHRlbXBsYXRlPD4KICAgIHN0cnVjdCBudW1lcmljX2xpbWl0czxzaG9ydD4K ICAgIHsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOwoKICAg ICAgc3RhdGljIHNob3J0IG1pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gKC0zMjc2NyAtIDEp OyB9CiAgICAgIHN0YXRpYyBzaG9ydCBtYXgoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDMyNzY3 OyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IDE1OwogICAgICBzdGF0aWMgY29u c3QgaW50IGRpZ2l0czEwID0gNDsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0g dHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IHRydWU7CiAgICAgIHN0 YXRpYyBjb25zdCBib29sIGlzX2V4YWN0ID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGludCBy YWRpeCA9IDI7CiAgICAgIHN0YXRpYyBzaG9ydCBlcHNpbG9uKCkgdGhyb3coKQogICAgICB7IHJl dHVybiAwOyB9CiAgICAgIHN0YXRpYyBzaG9ydCByb3VuZF9lcnJvcigpIHRocm93KCkKICAgICAg eyByZXR1cm4gMDsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAwOwog ICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gMDsKICAgICAgc3RhdGljIGNv bnN0IGludCBtYXhfZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBv bmVudDEwID0gMDsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNl OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7CiAgICAgIHN0 YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBj b25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7CiAgICAg IHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOwoKICAgICAgc3RhdGlj IHNob3J0IGluZmluaXR5KCkgdGhyb3coKQogICAgICB7IHJldHVybiBzaG9ydCgpOyB9CiAgICAg IHN0YXRpYyBzaG9ydCBxdWlldF9OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHNob3J0KCk7 IH0KICAgICAgc3RhdGljIHNob3J0IHNpZ25hbGluZ19OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0 dXJuIHNob3J0KCk7IH0KICAgICAgc3RhdGljIHNob3J0IGRlbm9ybV9taW4oKSB0aHJvdygpCiAg ICAgIHsgcmV0dXJuIHNob3J0KCk7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1 OSA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2JvdW5kZWQgPSB0cnVlOwogICAg ICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSB0cnVlOwoKICAgICAgc3RhdGljIGNvbnN0 IGJvb2wgdHJhcHMgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZv cmUgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0 eWxlID0gcm91bmRfdG93YXJkX3plcm87CiAgICB9OwojIDEyOTggIi91c3IvaW5jbHVkZS9jKysv My4yL2xpbWl0cyIgMwogIHRlbXBsYXRlPD4KICAgIHN0cnVjdCBudW1lcmljX2xpbWl0czx1bnNp Z25lZCBzaG9ydD4KICAgIHsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQg PSB0cnVlOwoKICAgICAgc3RhdGljIHVuc2lnbmVkIHNob3J0IG1pbigpIHRocm93KCkKICAgICAg eyByZXR1cm4gMDsgfQogICAgICBzdGF0aWMgdW5zaWduZWQgc2hvcnQgbWF4KCkgdGhyb3coKQog ICAgICB7IHJldHVybiAoMzI3NjcgKiAyICsgMSk7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQg ZGlnaXRzID0gMTY7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSA0OwogICAgICBz dGF0aWMgY29uc3QgYm9vbCBpc19zaWduZWQgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJv b2wgaXNfaW50ZWdlciA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2V4YWN0ID0g dHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9IDI7CiAgICAgIHN0YXRpYyB1bnNp Z25lZCBzaG9ydCBlcHNpbG9uKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwOyB9CiAgICAgIHN0 YXRpYyB1bnNpZ25lZCBzaG9ydCByb3VuZF9lcnJvcigpIHRocm93KCkKICAgICAgeyByZXR1cm4g MDsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAwOwogICAgICBzdGF0 aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBt YXhfZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudDEwID0g MDsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNlOwogICAgICBz dGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25z dCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9h dF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7CiAgICAgIHN0YXRpYyBj b25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOwoKICAgICAgc3RhdGljIHVuc2lnbmVk IHNob3J0IGluZmluaXR5KCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNp Z25lZCBzaG9ydD4oMCk7IH0KICAgICAgc3RhdGljIHVuc2lnbmVkIHNob3J0IHF1aWV0X05hTigp IHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQ+KDApOyB9 CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCBzaWduYWxpbmdfTmFOKCkgdGhyb3coKQogICAg ICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9ydD4oMCk7IH0KICAgICAgc3RhdGlj IHVuc2lnbmVkIHNob3J0IGRlbm9ybV9taW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRp Y19jYXN0PHVuc2lnbmVkIHNob3J0PigwKTsgfQoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNf aWVjNTU5ID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7 CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX21vZHVsbyA9IHRydWU7CgogICAgICBzdGF0aWMg Y29uc3QgYm9vbCB0cmFwcyA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNz X2JlZm9yZSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91 bmRfc3R5bGUgPSByb3VuZF90b3dhcmRfemVybzsKICAgIH07CgoKCgoKCiAgdGVtcGxhdGU8Pgog ICAgc3RydWN0IG51bWVyaWNfbGltaXRzPGludD4KICAgIHsKICAgICAgc3RhdGljIGNvbnN0IGJv b2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOwoKICAgICAgc3RhdGljIGludCBtaW4oKSB0aHJvdygp CiAgICAgIHsgcmV0dXJuIChpbnQpKC0yMTQ3NDgzNjQ3TCAtIDEpOyB9CiAgICAgIHN0YXRpYyBp bnQgbWF4KCkgdGhyb3coKQogICAgICB7IHJldHVybiAoaW50KTIxNDc0ODM2NDdMOyB9CgogICAg ICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IDMxOwogICAgICBzdGF0aWMgY29uc3QgaW50IGRp Z2l0czEwID0gOTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gdHJ1ZTsKICAg ICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25z dCBib29sIGlzX2V4YWN0ID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9IDI7 CiAgICAgIHN0YXRpYyBpbnQgZXBzaWxvbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQog ICAgICBzdGF0aWMgaW50IHJvdW5kX2Vycm9yKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwOyB9 CgogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBj b25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9l eHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOwoK ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7CiAgICAgIHN0YXRp YyBjb25zdCBib29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJv b2wgaGFzX3NpZ25hbGluZ19OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rl bm9ybV9zdHlsZSBoYXNfZGVub3JtID0gZGVub3JtX2Fic2VudDsKICAgICAgc3RhdGljIGNvbnN0 IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7CgogICAgICBzdGF0aWMgaW50IGluZmluaXR5 KCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KDApOyB9CiAgICAgIHN0 YXRpYyBpbnQgcXVpZXRfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxp bnQ+KDApOyB9CiAgICAgIHN0YXRpYyBpbnQgc2lnbmFsaW5nX05hTigpIHRocm93KCkKICAgICAg eyByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PigwKTsgfQogICAgICBzdGF0aWMgaW50IGRlbm9ybV9t aW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGludD4oMCk7IH0KCiAgICAg IHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBi b29sIGlzX2JvdW5kZWQgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8g PSB0cnVlOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdHJhcHMgPSB0cnVlOwogICAgICBzdGF0 aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0 IGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxlID0gcm91bmRfdG93YXJkX3plcm87CiAgICB9 OwojIDE0MTAgIi91c3IvaW5jbHVkZS9jKysvMy4yL2xpbWl0cyIgMwogIHRlbXBsYXRlPD4KICAg IHN0cnVjdCBudW1lcmljX2xpbWl0czx1bnNpZ25lZCBpbnQ+CiAgICB7CiAgICAgIHN0YXRpYyBj b25zdCBib29sIGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyB1bnNpZ25lZCBp bnQgbWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwOyB9CiAgICAgICAgICBzdGF0aWMgdW5z aWduZWQgaW50IG1heCgpIHRocm93KCkKICAgICAgeyByZXR1cm4gKHVuc2lnbmVkKSgyMTQ3NDgz NjQ3TCAqIDJVICsgMSk7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0gMzI7CiAg ICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSA5OwogICAgICBzdGF0aWMgY29uc3QgYm9v bCBpc19zaWduZWQgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9 IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2V4YWN0ID0gdHJ1ZTsKICAgICAgc3Rh dGljIGNvbnN0IGludCByYWRpeCA9IDI7CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBpbnQgZXBzaWxv bigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQogICAgICBzdGF0aWMgdW5zaWduZWQgaW50 IHJvdW5kX2Vycm9yKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwOyB9CgogICAgICBzdGF0aWMg Y29uc3QgaW50IG1pbl9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4 cG9uZW50MTAgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDA7CiAg ICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOwoKICAgICAgc3RhdGljIGNv bnN0IGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhh c19xdWlldF9OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGlu Z19OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNf ZGVub3JtID0gZGVub3JtX2Fic2VudDsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9y bV9sb3NzID0gZmFsc2U7CgogICAgICBzdGF0aWMgdW5zaWduZWQgaW50IGluZmluaXR5KCkgdGhy b3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KDApOyB9CiAgICAg IHN0YXRpYyB1bnNpZ25lZCBpbnQgcXVpZXRfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiBz dGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KDApOyB9CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBpbnQg c2lnbmFsaW5nX05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWdu ZWQgaW50PigwKTsgfQogICAgICBzdGF0aWMgdW5zaWduZWQgaW50IGRlbm9ybV9taW4oKSB0aHJv dygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4oMCk7IH0KCiAgICAg IHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBi b29sIGlzX2JvdW5kZWQgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8g PSB0cnVlOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdHJhcHMgPSB0cnVlOwogICAgICBzdGF0 aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0 IGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxlID0gcm91bmRfdG93YXJkX3plcm87CiAgICB9 OwoKCgoKCgogIHRlbXBsYXRlPD4KICAgIHN0cnVjdCBudW1lcmljX2xpbWl0czxsb25nPgogICAg ewogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRydWU7CgogICAgICBz dGF0aWMgbG9uZyBtaW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuICgtMjE0NzQ4MzY0N0wgLSAx KTsgfQogICAgICBzdGF0aWMgbG9uZyBtYXgoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDIxNDc0 ODM2NDdMOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IDMxOwogICAgICBzdGF0 aWMgY29uc3QgaW50IGRpZ2l0czEwID0gOTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2ln bmVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IHRydWU7CiAg ICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2V4YWN0ID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0 IGludCByYWRpeCA9IDI7CiAgICAgIHN0YXRpYyBsb25nIGVwc2lsb24oKSB0aHJvdygpCiAgICAg IHsgcmV0dXJuIDA7IH0KICAgICAgc3RhdGljIGxvbmcgcm91bmRfZXJyb3IoKSB0aHJvdygpCiAg ICAgIHsgcmV0dXJuIDA7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50ID0g MDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9IDA7CiAgICAgIHN0YXRp YyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhf ZXhwb25lbnQxMCA9IDA7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkgPSBm YWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNlOwogICAg ICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGZhbHNlOwogICAgICBzdGF0 aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1fYWJzZW50Owog ICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3MgPSBmYWxzZTsKCiAgICAgIHN0 YXRpYyBsb25nIGluZmluaXR5KCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxs b25nPigwKTsgfQogICAgICBzdGF0aWMgbG9uZyBxdWlldF9OYU4oKSB0aHJvdygpCiAgICAgIHsg cmV0dXJuIHN0YXRpY19jYXN0PGxvbmc+KDApOyB9CiAgICAgIHN0YXRpYyBsb25nIHNpZ25hbGlu Z19OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGxvbmc+KDApOyB9CiAg ICAgIHN0YXRpYyBsb25nIGRlbm9ybV9taW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRp Y19jYXN0PGxvbmc+KDApOyB9CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSB0 cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsKICAgICAgc3Rh dGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyBjb25zdCBib29s IHRyYXBzID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0g ZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9 IHJvdW5kX3Rvd2FyZF96ZXJvOwogICAgfTsKIyAxNTIyICIvdXNyL2luY2x1ZGUvYysrLzMuMi9s aW1pdHMiIDMKICB0ZW1wbGF0ZTw+CiAgICBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8dW5zaWduZWQg bG9uZz4KICAgIHsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVl OwoKICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgbWluKCkgdGhyb3coKQogICAgICB7IHJldHVy biAwOyB9CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIG1heCgpIHRocm93KCkKICAgICAgeyBy ZXR1cm4gKDIxNDc0ODM2NDdMICogMlUgKyAxKTsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBk aWdpdHMgPSAzMjsKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9IDk7CiAgICAgIHN0 YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9v bCBpc19pbnRlZ2VyID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSB0 cnVlOwogICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMjsKICAgICAgc3RhdGljIHVuc2ln bmVkIGxvbmcgZXBzaWxvbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQogICAgICBzdGF0 aWMgdW5zaWduZWQgbG9uZyByb3VuZF9lcnJvcigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsg fQoKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMg Y29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhf ZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudDEwID0gMDsK CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNlOwogICAgICBzdGF0 aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBi b29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9k ZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7CiAgICAgIHN0YXRpYyBjb25z dCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOwoKICAgICAgc3RhdGljIHVuc2lnbmVkIGxv bmcgaW5maW5pdHkoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVk IGxvbmc+KDApOyB9CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIHF1aWV0X05hTigpIHRocm93 KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4oMCk7IH0KICAgICAg c3RhdGljIHVuc2lnbmVkIGxvbmcgc2lnbmFsaW5nX05hTigpIHRocm93KCkKICAgICAgeyByZXR1 cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4oMCk7IH0KICAgICAgc3RhdGljIHVuc2lnbmVk IGxvbmcgZGVub3JtX21pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5z aWduZWQgbG9uZz4oMCk7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IHRy dWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2JvdW5kZWQgPSB0cnVlOwogICAgICBzdGF0 aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSB0cnVlOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wg dHJhcHMgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBm YWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxlID0g cm91bmRfdG93YXJkX3plcm87CiAgICB9OwoKCgoKCgogIHRlbXBsYXRlPD4KICAgIHN0cnVjdCBu dW1lcmljX2xpbWl0czxsb25nIGxvbmc+CiAgICB7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlz X3NwZWNpYWxpemVkID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyBsb25nIGxvbmcgbWluKCkgdGhyb3co KQogICAgICB7IHJldHVybiAoLTkyMjMzNzIwMzY4NTQ3NzU4MDdMTCAtIDEpOyB9CiAgICAgIHN0 YXRpYyBsb25nIGxvbmcgbWF4KCkgdGhyb3coKQogICAgICB7IHJldHVybiA5MjIzMzcyMDM2ODU0 Nzc1ODA3TEw7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0gNjM7CiAgICAgIHN0 YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSAxODsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNf c2lnbmVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IHRydWU7 CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2V4YWN0ID0gdHJ1ZTsKICAgICAgc3RhdGljIGNv bnN0IGludCByYWRpeCA9IDI7CiAgICAgIHN0YXRpYyBsb25nIGxvbmcgZXBzaWxvbigpIHRocm93 KCkKICAgICAgeyByZXR1cm4gMDsgfQogICAgICBzdGF0aWMgbG9uZyBsb25nIHJvdW5kX2Vycm9y KCkgdGhyb3coKQogICAgICB7IHJldHVybiAwOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IG1p bl9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAw OwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBj b25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFz X2luZmluaXR5ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9OYU4g PSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPSBmYWxz ZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtID0gZGVu b3JtX2Fic2VudDsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFs c2U7CgogICAgICBzdGF0aWMgbG9uZyBsb25nIGluZmluaXR5KCkgdGhyb3coKQogICAgICB7IHJl dHVybiBzdGF0aWNfY2FzdDxsb25nIGxvbmc+KDApOyB9CiAgICAgIHN0YXRpYyBsb25nIGxvbmcg cXVpZXRfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxsb25nIGxvbmc+ KDApOyB9CiAgICAgIHN0YXRpYyBsb25nIGxvbmcgc2lnbmFsaW5nX05hTigpIHRocm93KCkKICAg ICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8bG9uZyBsb25nPigwKTsgfQogICAgICBzdGF0aWMgbG9u ZyBsb25nIGRlbm9ybV9taW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGxv bmcgbG9uZz4oMCk7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IHRydWU7 CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2JvdW5kZWQgPSB0cnVlOwogICAgICBzdGF0aWMg Y29uc3QgYm9vbCBpc19tb2R1bG8gPSB0cnVlOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdHJh cHMgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxz ZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxlID0gcm91 bmRfdG93YXJkX3plcm87CiAgICB9OwojIDE2MzQgIi91c3IvaW5jbHVkZS9jKysvMy4yL2xpbWl0 cyIgMwogIHRlbXBsYXRlPD4KICAgIHN0cnVjdCBudW1lcmljX2xpbWl0czx1bnNpZ25lZCBsb25n IGxvbmc+CiAgICB7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NwZWNpYWxpemVkID0gdHJ1 ZTsKCiAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgbWluKCkgdGhyb3coKQogICAgICB7 IHJldHVybiAwOyB9CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgbWF4KCkgdGhyb3co KQogICAgICB7IHJldHVybiAoOTIyMzM3MjAzNjg1NDc3NTgwN0xMICogMlVMTCArIDEpOyB9Cgog ICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IDY0OwogICAgICBzdGF0aWMgY29uc3QgaW50 IGRpZ2l0czEwID0gMTk7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IGZhbHNl OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0gdHJ1ZTsKICAgICAgc3RhdGlj IGNvbnN0IGJvb2wgaXNfZXhhY3QgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4 ID0gMjsKICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyBlcHNpbG9uKCkgdGhyb3coKQog ICAgICB7IHJldHVybiAwOyB9CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgcm91bmRf ZXJyb3IoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBp bnQgbWluX2V4cG9uZW50ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQx MCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMDsKICAgICAgc3Rh dGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDA7CgogICAgICBzdGF0aWMgY29uc3QgYm9v bCBoYXNfaW5maW5pdHkgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0 X05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9 IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0g PSBkZW5vcm1fYWJzZW50OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3Mg PSBmYWxzZTsKCiAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgaW5maW5pdHkoKSB0aHJv dygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4oMCk7IH0K ICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyBxdWlldF9OYU4oKSB0aHJvdygpCiAgICAg IHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4oMCk7IH0KICAgICAgc3Rh dGljIHVuc2lnbmVkIGxvbmcgbG9uZyBzaWduYWxpbmdfTmFOKCkgdGhyb3coKQogICAgICB7IHJl dHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+KDApOyB9CiAgICAgIHN0YXRpYyB1 bnNpZ25lZCBsb25nIGxvbmcgZGVub3JtX21pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3Rh dGljX2Nhc3Q8dW5zaWduZWQgbG9uZyBsb25nPigwKTsgfQoKICAgICAgc3RhdGljIGNvbnN0IGJv b2wgaXNfaWVjNTU5ID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9 IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX21vZHVsbyA9IHRydWU7CgogICAgICBz dGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRp bnluZXNzX2JlZm9yZSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5 bGUgcm91bmRfc3R5bGUgPSByb3VuZF90b3dhcmRfemVybzsKICAgIH07CgoKCgoKCiAgdGVtcGxh dGU8PgogICAgc3RydWN0IG51bWVyaWNfbGltaXRzPGZsb2F0PgogICAgewogICAgICBzdGF0aWMg Y29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRydWU7CgogICAgICBzdGF0aWMgZmxvYXQgbWlu KCkgdGhyb3coKQogICAgICB7IHJldHVybiAxLjE3NTQ5NDM1ZS0zOEY7IH0KICAgICAgc3RhdGlj IGZsb2F0IG1heCgpIHRocm93KCkKICAgICAgeyByZXR1cm4gMy40MDI4MjM0N2UrMzhGOyB9Cgog ICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IDI0OwogICAgICBzdGF0aWMgY29uc3QgaW50 IGRpZ2l0czEwID0gNjsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gdHJ1ZTsK ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IGZhbHNlOwogICAgICBzdGF0aWMg Y29uc3QgYm9vbCBpc19leGFjdCA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4 ID0gMjsKICAgICAgc3RhdGljIGZsb2F0IGVwc2lsb24oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJu IDEuMTkyMDkyOTBlLTA3RjsgfQogICAgICBzdGF0aWMgZmxvYXQgcm91bmRfZXJyb3IoKSB0aHJv dygpCiAgICAgIHsgcmV0dXJuIDEuMEY7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4 cG9uZW50ID0gLTEyNTsKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9IC0z NzsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSAxMjg7CiAgICAgIHN0YXRp YyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAzODsKCiAgICAgIHN0YXRpYyBjb25zdCBib29s IGhhc19pbmZpbml0eSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRf TmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0g ZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9 IGRlbm9ybV9hYnNlbnQ7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9 IGZhbHNlOwoKICAgICAgc3RhdGljIGZsb2F0IGluZmluaXR5KCkgdGhyb3coKQogICAgICB7IHJl dHVybiAwLjBGOyB9CiAgICAgIHN0YXRpYyBmbG9hdCBxdWlldF9OYU4oKSB0aHJvdygpCiAgICAg IHsgcmV0dXJuIDAuMEY7IH0KICAgICAgc3RhdGljIGZsb2F0IHNpZ25hbGluZ19OYU4oKSB0aHJv dygpCiAgICAgIHsgcmV0dXJuIDAuMEY7IH0KICAgICAgc3RhdGljIGZsb2F0IGRlbm9ybV9taW4o KSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDAuMEY7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBib29s IGlzX2llYzU1OSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0g dHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gZmFsc2U7CgogICAgICBz dGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0 aW55bmVzc19iZWZvcmUgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0 eWxlIHJvdW5kX3N0eWxlID0gcm91bmRfdG93YXJkX3plcm87CiAgICB9OwojIDE3NjUgIi91c3Iv aW5jbHVkZS9jKysvMy4yL2xpbWl0cyIgMwogIHRlbXBsYXRlPD4KICAgIHN0cnVjdCBudW1lcmlj X2xpbWl0czxkb3VibGU+CiAgICB7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NwZWNpYWxp emVkID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyBkb3VibGUgbWluKCkgdGhyb3coKQogICAgICB7IHJl dHVybiAyLjIyNTA3Mzg1ODUwNzIwMTRlLTMwODsgfQogICAgICBzdGF0aWMgZG91YmxlIG1heCgp IHRocm93KCkKICAgICAgeyByZXR1cm4gMS43OTc2OTMxMzQ4NjIzMTU3ZSszMDg7IH0KCiAgICAg IHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0gNTM7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGln aXRzMTAgPSAxNTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gdHJ1ZTsKICAg ICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IGZhbHNlOwogICAgICBzdGF0aWMgY29u c3QgYm9vbCBpc19leGFjdCA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0g MjsKICAgICAgc3RhdGljIGRvdWJsZSBlcHNpbG9uKCkgdGhyb3coKQogICAgICB7IHJldHVybiAy LjIyMDQ0NjA0OTI1MDMxMzFlLTE2OyB9CiAgICAgIHN0YXRpYyBkb3VibGUgcm91bmRfZXJyb3Io KSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDEuMDsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBt aW5fZXhwb25lbnQgPSAtMTAyMTsKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQx MCA9IC0zMDc7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMTAyNDsKICAg ICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDMwODsKCiAgICAgIHN0YXRpYyBj b25zdCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBo YXNfcXVpZXRfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxp bmdfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFz X2Rlbm9ybSA9CiAgICAgICAgICAgICAgZGVub3JtX2Fic2VudDsKICAgICAgc3RhdGljIGNvbnN0 IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7CgogICAgICBzdGF0aWMgZG91YmxlIGluZmlu aXR5KCkgdGhyb3coKQogICAgICB7IHJldHVybiAwLjA7IH0KICAgICAgc3RhdGljIGRvdWJsZSBx dWlldF9OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDAuMDsgfQogICAgICBzdGF0aWMgZG91 YmxlIHNpZ25hbGluZ19OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDAuMDsgfQogICAgICBz dGF0aWMgZG91YmxlIGRlbm9ybV9taW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDAuMDsgfQoK ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBj b25zdCBib29sIGlzX2JvdW5kZWQgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19t b2R1bG8gPSBmYWxzZTsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gZmFsc2U7CiAg ICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOwogICAgICBzdGF0 aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPQogICAgICAgICAgICAgIHJv dW5kX3Rvd2FyZF96ZXJvOwogICAgfTsKIyAxODQ0ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9saW1p dHMiIDMKICB0ZW1wbGF0ZTw+CiAgICBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8bG9uZyBkb3VibGU+ CiAgICB7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsKCiAg ICAgIHN0YXRpYyBsb25nIGRvdWJsZSBtaW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDMuMzYy MTAzMTQzMTEyMDkzNTA2MjZlLTQ5MzJMOyB9CiAgICAgIHN0YXRpYyBsb25nIGRvdWJsZSBtYXgo KSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDEuMTg5NzMxNDk1MzU3MjMxNzY1MDJlKzQ5MzJMOyB9 CgogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IDY0OwogICAgICBzdGF0aWMgY29uc3Qg aW50IGRpZ2l0czEwID0gMTg7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IHRy dWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIgPSBmYWxzZTsKICAgICAgc3Rh dGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGludCBy YWRpeCA9IDI7CiAgICAgIHN0YXRpYyBsb25nIGRvdWJsZSBlcHNpbG9uKCkgdGhyb3coKQogICAg ICB7IHJldHVybiAxLjA4NDIwMjE3MjQ4NTUwNDQzNDAxZS0xOUw7IH0KICAgICAgc3RhdGljIGxv bmcgZG91YmxlIHJvdW5kX2Vycm9yKCkgdGhyb3coKQogICAgICB7IHJldHVybiAxLjBMOyB9Cgog ICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9IC0xNjM4MTsKICAgICAgc3RhdGlj IGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9IC00OTMxOwogICAgICBzdGF0aWMgY29uc3QgaW50 IG1heF9leHBvbmVudCA9IDE2Mzg0OwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVu dDEwID0gNDkzMjsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNl OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7CiAgICAgIHN0 YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0KICAgICAgICAgICAgICAgIGZhbHNl OwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPQogICAg ICAgICAgICAgICAgZGVub3JtX2Fic2VudDsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rl bm9ybV9sb3NzID0KICAgICAgICAgICAgICAgIGZhbHNlOwoKICAgICAgc3RhdGljIGxvbmcgZG91 YmxlIGluZmluaXR5KCkgdGhyb3coKQogICAgICB7IHJldHVybiAwLjBMOyB9CiAgICAgIHN0YXRp YyBsb25nIGRvdWJsZSBxdWlldF9OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDAuMEw7IH0K ICAgICAgc3RhdGljIGxvbmcgZG91YmxlIHNpZ25hbGluZ19OYU4oKSB0aHJvdygpCiAgICAgIHsg cmV0dXJuIDAuMEw7IH0KICAgICAgc3RhdGljIGxvbmcgZG91YmxlIGRlbm9ybV9taW4oKSB0aHJv dygpCiAgICAgIHsgcmV0dXJuIDAuMEw7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2ll YzU1OSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsK ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gZmFsc2U7CgogICAgICBzdGF0aWMg Y29uc3QgYm9vbCB0cmFwcyA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVz c19iZWZvcmUgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJv dW5kX3N0eWxlID0KICAgICAgICByb3VuZF90b3dhcmRfemVybzsKICAgIH07CiMgMTkyNCAiL3Vz ci9pbmNsdWRlL2MrKy8zLjIvbGltaXRzIiAzCn0KIyA0NCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIv Yml0cy9sb2NhbGVfZmFjZXRzLnRjYyIgMiAzCgojIDEgIi91c3IvaW5jbHVkZS9jKysvMy4yL3R5 cGVpbmZvIiAxIDMKIyA0MCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvdHlwZWluZm8iIDMKZXh0ZXJu ICJDKysiIHsKCm5hbWVzcGFjZSBfX2N4eGFiaXYxCnsKICBjbGFzcyBfX2NsYXNzX3R5cGVfaW5m bzsKfQojIDU1ICIvdXNyL2luY2x1ZGUvYysrLzMuMi90eXBlaW5mbyIgMwpuYW1lc3BhY2Ugc3Rk CnsKCgoKICBjbGFzcyB0eXBlX2luZm8KICB7CiAgcHVibGljOgoKCgoKICAgIHZpcnR1YWwgfnR5 cGVfaW5mbygpOwoKICBwcml2YXRlOgoKICAgIHR5cGVfaW5mbyYgb3BlcmF0b3I9KGNvbnN0IHR5 cGVfaW5mbyYpOwogICAgdHlwZV9pbmZvKGNvbnN0IHR5cGVfaW5mbyYpOwoKICBwcm90ZWN0ZWQ6 CiAgICBjb25zdCBjaGFyICpfX25hbWU7CgogIHByb3RlY3RlZDoKICAgIGV4cGxpY2l0IHR5cGVf aW5mbyhjb25zdCBjaGFyICpfX24pOiBfX25hbWUoX19uKSB7IH0KCiAgcHVibGljOgoKCgogICAg Y29uc3QgY2hhciogbmFtZSgpIGNvbnN0CiAgICB7IHJldHVybiBfX25hbWU7IH0KIyA5OCAiL3Vz ci9pbmNsdWRlL2MrKy8zLjIvdHlwZWluZm8iIDMKICAgIGJvb2wgYmVmb3JlKGNvbnN0IHR5cGVf aW5mbyYgX19hcmcpIGNvbnN0CiAgICB7IHJldHVybiBfX25hbWUgPCBfX2FyZy5fX25hbWU7IH0K ICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCB0eXBlX2luZm8mIF9fYXJnKSBjb25zdAogICAgeyBy ZXR1cm4gX19uYW1lID09IF9fYXJnLl9fbmFtZTsgfQoKICAgIGJvb2wgb3BlcmF0b3IhPShjb25z dCB0eXBlX2luZm8mIF9fYXJnKSBjb25zdAogICAgeyByZXR1cm4gIW9wZXJhdG9yPT0oX19hcmcp OyB9CgoKICBwdWJsaWM6CgogICAgdmlydHVhbCBib29sIF9faXNfcG9pbnRlcl9wKCkgY29uc3Q7 CgogICAgdmlydHVhbCBib29sIF9faXNfZnVuY3Rpb25fcCgpIGNvbnN0OwoKCgoKCgoKICAgIHZp cnR1YWwgYm9vbCBfX2RvX2NhdGNoKGNvbnN0IHR5cGVfaW5mbyAqX190aHJfdHlwZSwgdm9pZCAq Kl9fdGhyX29iaiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIF9fb3V0ZXIp IGNvbnN0OwoKCiAgICB2aXJ0dWFsIGJvb2wgX19kb191cGNhc3QoY29uc3QgX19jeHhhYml2MTo6 X19jbGFzc190eXBlX2luZm8gKl9fdGFyZ2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg IHZvaWQgKipfX29ial9wdHIpIGNvbnN0OwogIH07CgoKCiAgY2xhc3MgYmFkX2Nhc3QgOiBwdWJs aWMgZXhjZXB0aW9uCiAgewogIHB1YmxpYzoKICAgIGJhZF9jYXN0KCkgdGhyb3coKSB7IH0KCgog ICAgdmlydHVhbCB+YmFkX2Nhc3QoKSB0aHJvdygpOwogIH07CgoKICBjbGFzcyBiYWRfdHlwZWlk IDogcHVibGljIGV4Y2VwdGlvbgogIHsKICBwdWJsaWM6CiAgICBiYWRfdHlwZWlkICgpIHRocm93 KCkgeyB9CgoKICAgIHZpcnR1YWwgfmJhZF90eXBlaWQoKSB0aHJvdygpOwogIH07Cn0KCn0KIyA0 NiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9sb2NhbGVfZmFjZXRzLnRjYyIgMiAzCgpuYW1l c3BhY2Ugc3RkCnsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFjZXQ+CiAgICBsb2NhbGUKICAgIGxv Y2FsZTo6Y29tYmluZShjb25zdCBsb2NhbGUmIF9fb3RoZXIpIGNvbnN0CiAgICB7CiAgICAgIF9J bXBsKiBfX3RtcCA9IG5ldyBfSW1wbCgqX01faW1wbCwgMSk7CiAgICAgIF9fdG1wLT5fTV9yZXBs YWNlX2ZhY2V0KF9fb3RoZXIuX01faW1wbCwgJl9GYWNldDo6aWQpOwogICAgICByZXR1cm4gbG9j YWxlKF9fdG1wKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf VHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBib29sCiAgICBsb2NhbGU6Om9wZXJhdG9yKCko Y29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19zMSwKICAgICAg ICAgICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxs b2M+JiBfX3MyKSBjb25zdAogICAgewogICAgICB0eXBlZGVmIHN0ZDo6Y29sbGF0ZTxfQ2hhclQ+ IF9fY29sbGF0ZV90eXBlOwogICAgICBjb25zdCBfX2NvbGxhdGVfdHlwZSYgX19jb2xsYXRlID0g dXNlX2ZhY2V0PF9fY29sbGF0ZV90eXBlPigqdGhpcyk7CiAgICAgIHJldHVybiAoX19jb2xsYXRl LmNvbXBhcmUoX19zMS5kYXRhKCksIF9fczEuZGF0YSgpICsgX19zMS5sZW5ndGgoKSwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBfX3MyLmRhdGEoKSwgX19zMi5kYXRhKCkgKyBfX3My Lmxlbmd0aCgpKSA8IDApOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFjZXQ+CiAgICBj b25zdCBfRmFjZXQmCiAgICB1c2VfZmFjZXQoY29uc3QgbG9jYWxlJiBfX2xvYykKICAgIHsKICAg ICAgc2l6ZV90IF9faSA9IF9GYWNldDo6aWQuX01faWQoKTsKICAgICAgbG9jYWxlOjpmYWNldCoq IF9fZmFjZXRzID0gX19sb2MuX01faW1wbC0+X01fZmFjZXRzOwogICAgICBpZiAoIShfX2kgPCBf X2xvYy5fTV9pbXBsLT5fTV9mYWNldHNfc2l6ZSAmJiBfX2ZhY2V0c1tfX2ldKSkKICAgICAgICBf X3Rocm93X2JhZF9jYXN0KCk7CiAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBfRmFjZXQm PigqX19mYWNldHNbX19pXSk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9GYWNldD4KICAg IGJvb2wKICAgIGhhc19mYWNldChjb25zdCBsb2NhbGUmIF9fbG9jKSB0aHJvdygpCiAgICB7CiAg ICAgIHNpemVfdCBfX2kgPSBfRmFjZXQ6OmlkLl9NX2lkKCk7CiAgICAgIGxvY2FsZTo6ZmFjZXQq KiBfX2ZhY2V0cyA9IF9fbG9jLl9NX2ltcGwtPl9NX2ZhY2V0czsKICAgICAgcmV0dXJuIChfX2kg PCBfX2xvYy5fTV9pbXBsLT5fTV9mYWNldHNfc2l6ZSAmJiBfX2ZhY2V0c1tfX2ldKTsKICAgIH0K CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBfSW5J dGVyCiAgICBudW1fZ2V0PF9DaGFyVCwgX0luSXRlcj46OgogICAgX01fZXh0cmFjdF9mbG9hdChf SW5JdGVyIF9fYmVnLCBfSW5JdGVyIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICAg ICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBzdHJpbmcmIF9feHRyYykgY29uc3QK ICAgIHsKICAgICAgdHlwZWRlZiBjaGFyX3RyYWl0czxfQ2hhclQ+IF9fdHJhaXRzX3R5cGU7CiAg ICAgIGNvbnN0IGxvY2FsZSBfX2xvYyA9IF9faW8uZ2V0bG9jKCk7CiAgICAgIGNvbnN0IGN0eXBl PF9DaGFyVD4mIF9fY3R5cGUgPSB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKTsKICAg ICAgY29uc3QgbnVtcHVuY3Q8X0NoYXJUPiYgX19ucCA9IHVzZV9mYWNldDxudW1wdW5jdDxfQ2hh clQ+ID4oX19sb2MpOwoKCiAgICAgIGNvbnN0IGNoYXJfdHlwZSBfX3BsdXMgPSBfX2N0eXBlLndp ZGVuKCcrJyk7CiAgICAgIGNvbnN0IGNoYXJfdHlwZSBfX21pbnVzID0gX19jdHlwZS53aWRlbign LScpOwogICAgICBpbnQgX19wb3MgPSAwOwogICAgICBjaGFyX3R5cGUgX19jID0gKl9fYmVnOwog ICAgICBpZiAoKF9fdHJhaXRzX3R5cGU6OmVxKF9fYywgX19wbHVzKSB8fCBfX3RyYWl0c190eXBl OjplcShfX2MsIF9fbWludXMpKQogICAgICAgICAgJiYgX19iZWcgIT0gX19lbmQpCiAgICAgICAg ewogICAgICAgICAgX194dHJjICs9IF9fY3R5cGUubmFycm93KF9fYywgY2hhcigpKTsKICAgICAg ICAgICsrX19wb3M7CiAgICAgICAgICBfX2MgPSAqKCsrX19iZWcpOwogICAgICAgIH0KCgogICAg ICBjb25zdCBjaGFyX3R5cGUgX196ZXJvID0gX19jdHlwZS53aWRlbihfU19hdG9tc1tfTV96ZXJv XSk7CiAgICAgIGJvb2wgX19mb3VuZF96ZXJvID0gZmFsc2U7CiAgICAgIHdoaWxlIChfX3RyYWl0 c190eXBlOjplcShfX2MsIF9femVybykgJiYgX19iZWcgIT0gX19lbmQpCiAgICAgICAgewogICAg ICAgICAgX19jID0gKigrK19fYmVnKTsKICAgICAgICAgIF9fZm91bmRfemVybyA9IHRydWU7CiAg ICAgICAgfQogICAgICBpZiAoX19mb3VuZF96ZXJvKQogICAgICAgIHsKICAgICAgICAgIF9feHRy YyArPSBfU19hdG9tc1tfTV96ZXJvXTsKICAgICAgICAgICsrX19wb3M7CiAgICAgICAgfQoKCiAg ICAgIGNvbnN0IHNpemVfdCBfX2xlbiA9IF9NX0UgLSBfTV96ZXJvICsgMTsKICAgICAgY2hhcl90 eXBlIF9fd2F0b21zW19fbGVuXTsKICAgICAgX19jdHlwZS53aWRlbihfU19hdG9tcywgX1NfYXRv bXMgKyBfX2xlbiwgX193YXRvbXMpOwogICAgICBib29sIF9fZm91bmRfZGVjID0gZmFsc2U7CiAg ICAgIGJvb2wgX19mb3VuZF9zY2kgPSBmYWxzZTsKICAgICAgY29uc3QgY2hhcl90eXBlIF9fZGVj ID0gX19ucC5kZWNpbWFsX3BvaW50KCk7CgogICAgICBzdHJpbmcgX19mb3VuZF9ncm91cGluZzsK ICAgICAgY29uc3Qgc3RyaW5nIF9fZ3JvdXBpbmcgPSBfX25wLmdyb3VwaW5nKCk7CiAgICAgIGJv b2wgX19jaGVja19ncm91cGluZyA9IF9fZ3JvdXBpbmcuc2l6ZSgpOwogICAgICBpbnQgX19zZXBf cG9zID0gMDsKICAgICAgY29uc3QgY2hhcl90eXBlIF9fc2VwID0gX19ucC50aG91c2FuZHNfc2Vw KCk7CgogICAgICB3aGlsZSAoX19iZWcgIT0gX19lbmQpCiAgICAgICAgewoKICAgICAgICAgIGNv bnN0IGNoYXJfdHlwZSogX19wID0gX190cmFpdHNfdHlwZTo6ZmluZChfX3dhdG9tcywgMTAsIF9f Yyk7CgoKICAgICAgICAgIGlmIChfX3AgJiYgIV9fdHJhaXRzX3R5cGU6OmVxKF9fYywgY2hhcl90 eXBlKCkpKQogICAgICAgICAgICB7CgogICAgICAgICAgICAgICsrX19wb3M7CiAgICAgICAgICAg ICAgX194dHJjICs9IF9TX2F0b21zW19fcCAtIF9fd2F0b21zXTsKICAgICAgICAgICAgICArK19f c2VwX3BvczsKICAgICAgICAgICAgICBfX2MgPSAqKCsrX19iZWcpOwogICAgICAgICAgICB9CiAg ICAgICAgICBlbHNlIGlmIChfX3RyYWl0c190eXBlOjplcShfX2MsIF9fc2VwKQogICAgICAgICAg ICAgICAgICAgJiYgX19jaGVja19ncm91cGluZyAmJiAhX19mb3VuZF9kZWMpCiAgICAgICAgICAg IHsKCgogICAgICAgICAgICAgIGlmIChfX3NlcF9wb3MpCiAgICAgICAgICAgICAgICB7CiAgICAg ICAgICAgICAgICAgIF9fZm91bmRfZ3JvdXBpbmcgKz0gc3RhdGljX2Nhc3Q8Y2hhcj4oX19zZXBf cG9zKTsKICAgICAgICAgICAgICAgICAgX19zZXBfcG9zID0gMDsKICAgICAgICAgICAgICAgICAg X19jID0gKigrK19fYmVnKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBlbHNlCiAg ICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWls Yml0OwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAg ICAgfQogICAgICAgICAgZWxzZSBpZiAoX190cmFpdHNfdHlwZTo6ZXEoX19jLCBfX2RlYykgJiYg IV9fZm91bmRfZGVjKQogICAgICAgICAgICB7CgoKCiAgICAgICAgICAgICAgaWYgKF9fZm91bmRf Z3JvdXBpbmcuc2l6ZSgpKQogICAgICAgICAgICAgICAgX19mb3VuZF9ncm91cGluZyArPSBzdGF0 aWNfY2FzdDxjaGFyPihfX3NlcF9wb3MpOwogICAgICAgICAgICAgICsrX19wb3M7CiAgICAgICAg ICAgICAgX194dHJjICs9ICcuJzsKICAgICAgICAgICAgICBfX2MgPSAqKCsrX19iZWcpOwogICAg ICAgICAgICAgIF9fZm91bmRfZGVjID0gdHJ1ZTsKICAgICAgICAgICAgfQogICAgICAgICAgZWxz ZSBpZiAoKF9fdHJhaXRzX3R5cGU6OmVxKF9fYywgX193YXRvbXNbX01fZV0pCiAgICAgICAgICAg ICAgICAgICAgfHwgX190cmFpdHNfdHlwZTo6ZXEoX19jLCBfX3dhdG9tc1tfTV9FXSkpCiAgICAg ICAgICAgICAgICAgICAmJiAhX19mb3VuZF9zY2kgJiYgX19wb3MpCiAgICAgICAgICAgIHsKCiAg ICAgICAgICAgICAgKytfX3BvczsKICAgICAgICAgICAgICBfX3h0cmMgKz0gX19jdHlwZS5uYXJy b3coX19jLCBjaGFyKCkpOwogICAgICAgICAgICAgIF9fYyA9ICooKytfX2JlZyk7CgoKICAgICAg ICAgICAgICBpZiAoX190cmFpdHNfdHlwZTo6ZXEoX19jLCBfX3BsdXMpCiAgICAgICAgICAgICAg ICAgIHx8IF9fdHJhaXRzX3R5cGU6OmVxKF9fYywgX19taW51cykpCiAgICAgICAgICAgICAgICB7 CiAgICAgICAgICAgICAgICAgICsrX19wb3M7CiAgICAgICAgICAgICAgICAgIF9feHRyYyArPSBf X2N0eXBlLm5hcnJvdyhfX2MsIGNoYXIoKSk7CiAgICAgICAgICAgICAgICAgIF9fYyA9ICooKytf X2JlZyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgX19mb3VuZF9zY2kgPSB0cnVl OwogICAgICAgICAgICB9CiAgICAgICAgICBlbHNlCgogICAgICAgICAgICBicmVhazsKICAgICAg ICB9CgoKCiAgICAgIGlmIChfX2NoZWNrX2dyb3VwaW5nICYmIF9fZm91bmRfZ3JvdXBpbmcuc2l6 ZSgpKQogICAgICAgIHsKCiAgICAgICAgICBpZiAoIV9fZm91bmRfZGVjKQogICAgICAgICAgICBf X2ZvdW5kX2dyb3VwaW5nICs9IHN0YXRpY19jYXN0PGNoYXI+KF9fc2VwX3Bvcyk7CiAgICAgICAg ICBpZiAoIV9fdmVyaWZ5X2dyb3VwaW5nKF9fZ3JvdXBpbmcsIF9fZm91bmRfZ3JvdXBpbmcpKQog ICAgICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKICAgICAgICB9CgoKICAgICAg X194dHJjICs9IGNoYXIoKTsKICAgICAgaWYgKF9fYmVnID09IF9fZW5kKQogICAgICAgIF9fZXJy IHw9IGlvc19iYXNlOjplb2ZiaXQ7CiAgICAgIHJldHVybiBfX2JlZzsKICAgIH0KCgogIHRlbXBs YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIKICAgIG51 bV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBfTV9leHRyYWN0X2ludChfSW5JdGVyIF9fYmVn LCBfSW5JdGVyIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICAgICAgICAgIGlvc19i YXNlOjppb3N0YXRlJiBfX2Vyciwgc3RyaW5nJiBfX3h0cmMsIGludCYgX19iYXNlKSBjb25zdAog ICAgewogICAgICB0eXBlZGVmIGNoYXJfdHJhaXRzPF9DaGFyVD4gX190cmFpdHNfdHlwZTsKICAg ICAgY29uc3QgbG9jYWxlIF9fbG9jID0gX19pby5nZXRsb2MoKTsKICAgICAgY29uc3QgY3R5cGU8 X0NoYXJUPiYgX19jdHlwZSA9IHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpOwogICAg ICBjb25zdCBudW1wdW5jdDxfQ2hhclQ+JiBfX25wID0gdXNlX2ZhY2V0PG51bXB1bmN0PF9DaGFy VD4gPihfX2xvYyk7CgoKICAgICAgaW9zX2Jhc2U6OmZtdGZsYWdzIF9fYmFzZWZpZWxkID0gX19p by5mbGFncygpICYgaW9zX2Jhc2U6OmJhc2VmaWVsZDsKICAgICAgaWYgKF9fYmFzZWZpZWxkID09 IGlvc19iYXNlOjpvY3QpCiAgICAgICAgX19iYXNlID0gODsKICAgICAgZWxzZSBpZiAoX19iYXNl ZmllbGQgPT0gaW9zX2Jhc2U6OmhleCkKICAgICAgICBfX2Jhc2UgPSAxNjsKICAgICAgZWxzZQog ICAgICAgIF9fYmFzZSA9IDEwOwoKCiAgICAgIGludCBfX3BvcyA9IDA7CiAgICAgIGNoYXJfdHlw ZSBfX2MgPSAqX19iZWc7CiAgICAgIGNvbnN0IGNoYXJfdHlwZSBfX3BsdXMgPSBfX2N0eXBlLndp ZGVuKCcrJyk7CiAgICAgIGNvbnN0IGNoYXJfdHlwZSBfX21pbnVzID0gX19jdHlwZS53aWRlbign LScpOwoKICAgICAgaWYgKChfX3RyYWl0c190eXBlOjplcShfX2MsIF9fcGx1cykgfHwgX190cmFp dHNfdHlwZTo6ZXEoX19jLCBfX21pbnVzKSkKICAgICAgICAgICYmIF9fYmVnICE9IF9fZW5kKQog ICAgICAgIHsKICAgICAgICAgIF9feHRyYyArPSBfX2N0eXBlLm5hcnJvdyhfX2MsIGNoYXIoKSk7 CiAgICAgICAgICArK19fcG9zOwogICAgICAgICAgX19jID0gKigrK19fYmVnKTsKICAgICAgICB9 CgoKICAgICAgY29uc3QgY2hhcl90eXBlIF9femVybyA9IF9fY3R5cGUud2lkZW4oX1NfYXRvbXNb X01femVyb10pOwogICAgICBjb25zdCBjaGFyX3R5cGUgX194ID0gX19jdHlwZS53aWRlbigneCcp OwogICAgICBjb25zdCBjaGFyX3R5cGUgX19YID0gX19jdHlwZS53aWRlbignWCcpOwogICAgICBp ZiAoX19iYXNlID09IDEwKQogICAgICAgIHsKICAgICAgICAgIGJvb2wgX19mb3VuZF96ZXJvID0g ZmFsc2U7CiAgICAgICAgICB3aGlsZSAoX190cmFpdHNfdHlwZTo6ZXEoX19jLCBfX3plcm8pICYm IF9fYmVnICE9IF9fZW5kKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX19jID0gKigrK19f YmVnKTsKICAgICAgICAgICAgICBfX2ZvdW5kX3plcm8gPSB0cnVlOwogICAgICAgICAgICB9CiAg ICAgICAgICBpZiAoX19mb3VuZF96ZXJvKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX194 dHJjICs9IF9TX2F0b21zW19NX3plcm9dOwogICAgICAgICAgICAgICsrX19wb3M7CiAgICAgICAg ICAgICAgaWYgKF9fYmFzZWZpZWxkID09IDApCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAg ICAgICAgIGlmICgoX190cmFpdHNfdHlwZTo6ZXEoX19jLCBfX3gpCiAgICAgICAgICAgICAgICAg ICAgICAgfHwgX190cmFpdHNfdHlwZTo6ZXEoX19jLCBfX1gpKQogICAgICAgICAgICAgICAgICAg ICAgJiYgX19iZWcgIT0gX19lbmQpCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAg ICAgICAgICAgX194dHJjICs9IF9fY3R5cGUubmFycm93KF9fYywgY2hhcigpKTsKICAgICAgICAg ICAgICAgICAgICAgICsrX19wb3M7CiAgICAgICAgICAgICAgICAgICAgICBfX2MgPSAqKCsrX19i ZWcpOwogICAgICAgICAgICAgICAgICAgICAgX19iYXNlID0gMTY7CiAgICAgICAgICAgICAgICAg ICAgfQogICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgX19iYXNlID0g ODsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgZWxzZSBp ZiAoX19iYXNlID09IDE2KQogICAgICAgIHsKICAgICAgICAgIGlmIChfX3RyYWl0c190eXBlOjpl cShfX2MsIF9femVybykgJiYgX19iZWcgIT0gX19lbmQpCiAgICAgICAgICAgIHsKICAgICAgICAg ICAgICBfX3h0cmMgKz0gX1NfYXRvbXNbX01femVyb107CiAgICAgICAgICAgICAgKytfX3BvczsK ICAgICAgICAgICAgICBfX2MgPSAqKCsrX19iZWcpOwogICAgICAgICAgICAgIGlmICgoX190cmFp dHNfdHlwZTo6ZXEoX19jLCBfX3gpIHx8IF9fdHJhaXRzX3R5cGU6OmVxKF9fYywgX19YKSkKICAg ICAgICAgICAgICAgICAgJiYgX19iZWcgIT0gX19lbmQpCiAgICAgICAgICAgICAgICB7CiAgICAg ICAgICAgICAgICAgIF9feHRyYyArPSBfX2N0eXBlLm5hcnJvdyhfX2MsIGNoYXIoKSk7CiAgICAg ICAgICAgICAgICAgICsrX19wb3M7CiAgICAgICAgICAgICAgICAgIF9fYyA9ICooKytfX2JlZyk7 CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgoKCiAgICAgIHNpemVf dCBfX2xlbjsKICAgICAgaWYgKF9fYmFzZSA9PSAxNikKICAgICAgICBfX2xlbiA9IF9NX3NpemU7 CiAgICAgIGVsc2UKICAgICAgICBfX2xlbiA9IF9fYmFzZTsKCgogICAgICBjaGFyX3R5cGUgX193 YXRvbXNbX01fc2l6ZV07CiAgICAgIF9fY3R5cGUud2lkZW4oX1NfYXRvbXMsIF9TX2F0b21zICsg X19sZW4sIF9fd2F0b21zKTsKICAgICAgc3RyaW5nIF9fZm91bmRfZ3JvdXBpbmc7CiAgICAgIGNv bnN0IHN0cmluZyBfX2dyb3VwaW5nID0gX19ucC5ncm91cGluZygpOwogICAgICBib29sIF9fY2hl Y2tfZ3JvdXBpbmcgPSBfX2dyb3VwaW5nLnNpemUoKTsKICAgICAgaW50IF9fc2VwX3BvcyA9IDA7 CiAgICAgIGNvbnN0IGNoYXJfdHlwZSBfX3NlcCA9IF9fbnAudGhvdXNhbmRzX3NlcCgpOwogICAg ICB3aGlsZSAoX19iZWcgIT0gX19lbmQpCiAgICAgICAgewogICAgICAgICAgY29uc3QgY2hhcl90 eXBlKiBfX3AgPSBfX3RyYWl0c190eXBlOjpmaW5kKF9fd2F0b21zLCBfX2xlbiwgX19jKTsKCgog ICAgICAgICAgaWYgKF9fcCAmJiAhX190cmFpdHNfdHlwZTo6ZXEoX19jLCBjaGFyX3R5cGUoKSkp CiAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgX194dHJjICs9IF9TX2F0b21zW19fcCAtIF9f d2F0b21zXTsKICAgICAgICAgICAgICArK19fcG9zOwogICAgICAgICAgICAgICsrX19zZXBfcG9z OwogICAgICAgICAgICAgIF9fYyA9ICooKytfX2JlZyk7CiAgICAgICAgICAgIH0KICAgICAgICAg IGVsc2UgaWYgKF9fdHJhaXRzX3R5cGU6OmVxKF9fYywgX19zZXApICYmIF9fY2hlY2tfZ3JvdXBp bmcpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIGlmIChfX3NlcF9wb3MpCiAgICAgICAg ICAgICAgICB7CiAgICAgICAgICAgICAgICAgIF9fZm91bmRfZ3JvdXBpbmcgKz0gc3RhdGljX2Nh c3Q8Y2hhcj4oX19zZXBfcG9zKTsKICAgICAgICAgICAgICAgICAgX19zZXBfcG9zID0gMDsKICAg ICAgICAgICAgICAgICAgX19jID0gKigrK19fYmVnKTsKICAgICAgICAgICAgICAgIH0KICAgICAg ICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIF9fZXJyIHw9 IGlvc19iYXNlOjpmYWlsYml0OwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg ICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgZWxzZQoKICAgICAgICAgICAgYnJlYWs7CiAg ICAgICAgfQoKCgogICAgICBpZiAoX19jaGVja19ncm91cGluZyAmJiBfX2ZvdW5kX2dyb3VwaW5n LnNpemUoKSkKICAgICAgICB7CgogICAgICAgICAgX19mb3VuZF9ncm91cGluZyArPSBzdGF0aWNf Y2FzdDxjaGFyPihfX3NlcF9wb3MpOwogICAgICAgICAgaWYgKCFfX3ZlcmlmeV9ncm91cGluZyhf X2dyb3VwaW5nLCBfX2ZvdW5kX2dyb3VwaW5nKSkKICAgICAgICAgICAgX19lcnIgfD0gaW9zX2Jh c2U6OmZhaWxiaXQ7CiAgICAgICAgfQoKCiAgICAgIF9feHRyYyArPSBjaGFyKCk7CiAgICAgIGlm IChfX2JlZyA9PSBfX2VuZCkKICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZW9mYml0OwogICAg ICByZXR1cm4gX19iZWc7CiAgICB9CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl bmFtZSBfSW5JdGVyPgogICAgX0luSXRlcgogICAgbnVtX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoK ICAgIGRvX2dldChpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9f aW8sCiAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBib29sJiBfX3YpIGNvbnN0 CiAgICB7CgogICAgICBpZiAoIShfX2lvLmZsYWdzKCkgJiBpb3NfYmFzZTo6Ym9vbGFscGhhKSkK ICAgICAgICB7CgoKICAgICAgICAgIHN0cmluZyBfX3h0cmM7CiAgICAgICAgICBpbnQgX19iYXNl OwogICAgICAgICAgX19iZWcgPSBfTV9leHRyYWN0X2ludChfX2JlZywgX19lbmQsIF9faW8sIF9f ZXJyLCBfX3h0cmMsIF9fYmFzZSk7CgogICAgICAgICAgdW5zaWduZWQgbG9uZyBfX3VsOwogICAg ICAgICAgX19jb252ZXJ0X3RvX3YoX194dHJjLmNfc3RyKCksIF9fdWwsIF9fZXJyLCBfU19jX2xv Y2FsZSwgX19iYXNlKTsKICAgICAgICAgIGlmICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQp ICYmIF9fdWwgPD0gMSkKICAgICAgICAgICAgX192ID0gX191bDsKICAgICAgICAgIGVsc2UKICAg ICAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CiAgICAgICAgfQoKCiAgICAgIGVs c2UKICAgICAgICB7CiAgICAgICAgICB0eXBlZGVmIGNoYXJfdHJhaXRzPF9DaGFyVD4gX190cmFp dHNfdHlwZTsKICAgICAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVD4gX19zdHJpbmdf dHlwZTsKCiAgICAgICAgICBsb2NhbGUgX19sb2MgPSBfX2lvLmdldGxvYygpOwogICAgICAgICAg Y29uc3QgbnVtcHVuY3Q8X0NoYXJUPiYgX19ucCA9IHVzZV9mYWNldDxudW1wdW5jdDxfQ2hhclQ+ ID4oX19sb2MpOwogICAgICAgICAgY29uc3QgX19zdHJpbmdfdHlwZSBfX3RydWUgPSBfX25wLnRy dWVuYW1lKCk7CiAgICAgICAgICBjb25zdCBfX3N0cmluZ190eXBlIF9fZmFsc2UgPSBfX25wLmZh bHNlbmFtZSgpOwogICAgICAgICAgY29uc3QgY2hhcl90eXBlKiBfX3RydWVzID0gX190cnVlLmNf c3RyKCk7CiAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9fZmFsc2VzID0gX19mYWxzZS5jX3N0 cigpOwogICAgICAgICAgY29uc3Qgc2l6ZV90IF9fdHJ1ZW4gPSBfX3RydWUuc2l6ZSgpIC0gMTsK ICAgICAgICAgIGNvbnN0IHNpemVfdCBfX2ZhbHNlbiA9IF9fZmFsc2Uuc2l6ZSgpIC0gMTsKCiAg ICAgICAgICBmb3IgKHNpemVfdCBfX24gPSAwOyBfX2JlZyAhPSBfX2VuZDsgKytfX24pCiAgICAg ICAgICAgIHsKICAgICAgICAgICAgICBjaGFyX3R5cGUgX19jID0gKl9fYmVnKys7CiAgICAgICAg ICAgICAgYm9vbCBfX3Rlc3RmID0gX19uIDw9IF9fZmFsc2VuCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgPyBfX3RyYWl0c190eXBlOjplcShfX2MsIF9fZmFsc2VzW19fbl0pIDogZmFsc2U7 CiAgICAgICAgICAgICAgYm9vbCBfX3Rlc3R0ID0gX19uIDw9IF9fdHJ1ZW4KICAgICAgICAgICAg ICAgICAgICAgICAgICAgICA/IF9fdHJhaXRzX3R5cGU6OmVxKF9fYywgX190cnVlc1tfX25dKSA6 IGZhbHNlOwogICAgICAgICAgICAgIGlmICghKF9fdGVzdGYgfHwgX190ZXN0dCkpCiAgICAgICAg ICAgICAgICB7CiAgICAgICAgICAgICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0Owog ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBl bHNlIGlmIChfX3Rlc3RmICYmIF9fbiA9PSBfX2ZhbHNlbikKICAgICAgICAgICAgICAgIHsKICAg ICAgICAgICAgICAgICAgX192ID0gMDsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg ICAgICAgICB9CiAgICAgICAgICAgICAgZWxzZSBpZiAoX190ZXN0dCAmJiBfX24gPT0gX190cnVl bikKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgX192ID0gMTsKICAgICAgICAg ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAg IGlmIChfX2JlZyA9PSBfX2VuZCkKICAgICAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmVvZmJp dDsKICAgICAgICB9CiAgICAgIHJldHVybiBfX2JlZzsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVu YW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIKICAgIG51bV9nZXQ8X0No YXJULCBfSW5JdGVyPjo6CiAgICBkb19nZXQoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19l bmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2Vyciwg bG9uZyYgX192KSBjb25zdAogICAgewogICAgICBzdHJpbmcgX194dHJjOwogICAgICBpbnQgX19i YXNlOwogICAgICBfX2JlZyA9IF9NX2V4dHJhY3RfaW50KF9fYmVnLCBfX2VuZCwgX19pbywgX19l cnIsIF9feHRyYywgX19iYXNlKTsKICAgICAgX19jb252ZXJ0X3RvX3YoX194dHJjLmNfc3RyKCks IF9fdiwgX19lcnIsIF9TX2NfbG9jYWxlLCBfX2Jhc2UpOwogICAgICByZXR1cm4gX19iZWc7CiAg ICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIF9J bkl0ZXIKICAgIG51bV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBkb19nZXQoaXRlcl90eXBl IF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgIGlvc19i YXNlOjppb3N0YXRlJiBfX2VyciwgdW5zaWduZWQgc2hvcnQmIF9fdikgY29uc3QKICAgIHsKICAg ICAgc3RyaW5nIF9feHRyYzsKICAgICAgaW50IF9fYmFzZTsKICAgICAgX19iZWcgPSBfTV9leHRy YWN0X2ludChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3h0cmMsIF9fYmFzZSk7CiAgICAg IHVuc2lnbmVkIGxvbmcgX191bDsKICAgICAgX19jb252ZXJ0X3RvX3YoX194dHJjLmNfc3RyKCks IF9fdWwsIF9fZXJyLCBfU19jX2xvY2FsZSwgX19iYXNlKTsKICAgICAgaWYgKCEoX19lcnIgJiBp b3NfYmFzZTo6ZmFpbGJpdCkKICAgICAgICAgICYmIF9fdWwgPD0gbnVtZXJpY19saW1pdHM8dW5z aWduZWQgc2hvcnQ+OjptYXgoKSkKICAgICAgICBfX3YgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBz aG9ydD4oX191bCk7CiAgICAgIGVsc2UKICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJp dDsKICAgICAgcmV0dXJuIF9fYmVnOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs IHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBfSW5JdGVyCiAgICBudW1fZ2V0PF9DaGFyVCwgX0luSXRl cj46OgogICAgZG9fZ2V0KGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFz ZSYgX19pbywKICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHVuc2lnbmVkIGlu dCYgX192KSBjb25zdAogICAgewogICAgICBzdHJpbmcgX194dHJjOwogICAgICBpbnQgX19iYXNl OwogICAgICBfX2JlZyA9IF9NX2V4dHJhY3RfaW50KF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIs IF9feHRyYywgX19iYXNlKTsKICAgICAgdW5zaWduZWQgbG9uZyBfX3VsOwogICAgICBfX2NvbnZl cnRfdG9fdihfX3h0cmMuY19zdHIoKSwgX191bCwgX19lcnIsIF9TX2NfbG9jYWxlLCBfX2Jhc2Up OwogICAgICBpZiAoIShfX2VyciAmIGlvc19iYXNlOjpmYWlsYml0KQogICAgICAgICAgJiYgX191 bCA8PSBudW1lcmljX2xpbWl0czx1bnNpZ25lZCBpbnQ+OjptYXgoKSkKICAgICAgICBfX3YgPSBz dGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KF9fdWwpOwogICAgICBlbHNlCiAgICAgICAgX19lcnIg fD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CiAgICAgIHJldHVybiBfX2JlZzsKICAgIH0KCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgX0luSXRlcgogICAgbnVt X2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAgIGRvX2dldChpdGVyX3R5cGUgX19iZWcsIGl0ZXJf dHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUm IF9fZXJyLCB1bnNpZ25lZCBsb25nJiBfX3YpIGNvbnN0CiAgICB7CiAgICAgIHN0cmluZyBfX3h0 cmM7CiAgICAgIGludCBfX2Jhc2U7CiAgICAgIF9fYmVnID0gX01fZXh0cmFjdF9pbnQoX19iZWcs IF9fZW5kLCBfX2lvLCBfX2VyciwgX194dHJjLCBfX2Jhc2UpOwogICAgICBfX2NvbnZlcnRfdG9f dihfX3h0cmMuY19zdHIoKSwgX192LCBfX2VyciwgX1NfY19sb2NhbGUsIF9fYmFzZSk7CiAgICAg IHJldHVybiBfX2JlZzsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h bWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIKICAgIG51bV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAg ICBkb19nZXQoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lv LAogICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgbG9uZyBsb25nJiBfX3YpIGNv bnN0CiAgICB7CiAgICAgIHN0cmluZyBfX3h0cmM7CiAgICAgIGludCBfX2Jhc2U7CiAgICAgIF9f YmVnID0gX01fZXh0cmFjdF9pbnQoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX194dHJjLCBf X2Jhc2UpOwogICAgICBfX2NvbnZlcnRfdG9fdihfX3h0cmMuY19zdHIoKSwgX192LCBfX2Vyciwg X1NfY19sb2NhbGUsIF9fYmFzZSk7CiAgICAgIHJldHVybiBfX2JlZzsKICAgIH0KCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgX0luSXRlcgogICAgbnVt X2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAgIGRvX2dldChpdGVyX3R5cGUgX19iZWcsIGl0ZXJf dHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUm IF9fZXJyLCB1bnNpZ25lZCBsb25nIGxvbmcmIF9fdikgY29uc3QKICAgIHsKICAgICAgc3RyaW5n IF9feHRyYzsKICAgICAgaW50IF9fYmFzZTsKICAgICAgX19iZWcgPSBfTV9leHRyYWN0X2ludChf X2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3h0cmMsIF9fYmFzZSk7CiAgICAgIF9fY29udmVy dF90b192KF9feHRyYy5jX3N0cigpLCBfX3YsIF9fZXJyLCBfU19jX2xvY2FsZSwgX19iYXNlKTsK ICAgICAgcmV0dXJuIF9fYmVnOwogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0 eXBlbmFtZSBfSW5JdGVyPgogICAgX0luSXRlcgogICAgbnVtX2dldDxfQ2hhclQsIF9Jbkl0ZXI+ OjoKICAgIGRvX2dldChpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2Um IF9faW8sCiAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBmbG9hdCYgX192KSBj b25zdAogICAgewogICAgICBzdHJpbmcgX194dHJjOwogICAgICBfX3h0cmMucmVzZXJ2ZSgzMik7 CiAgICAgIF9fYmVnID0gX01fZXh0cmFjdF9mbG9hdChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJy LCBfX3h0cmMpOwogICAgICBfX2NvbnZlcnRfdG9fdihfX3h0cmMuY19zdHIoKSwgX192LCBfX2Vy ciwgX1NfY19sb2NhbGUpOwogICAgICByZXR1cm4gX19iZWc7CiAgICB9CgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIKICAgIG51bV9nZXQ8 X0NoYXJULCBfSW5JdGVyPjo6CiAgICBkb19nZXQoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUg X19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2Vy ciwgZG91YmxlJiBfX3YpIGNvbnN0CiAgICB7CiAgICAgIHN0cmluZyBfX3h0cmM7CiAgICAgIF9f eHRyYy5yZXNlcnZlKDMyKTsKICAgICAgX19iZWcgPSBfTV9leHRyYWN0X2Zsb2F0KF9fYmVnLCBf X2VuZCwgX19pbywgX19lcnIsIF9feHRyYyk7CiAgICAgIF9fY29udmVydF90b192KF9feHRyYy5j X3N0cigpLCBfX3YsIF9fZXJyLCBfU19jX2xvY2FsZSk7CiAgICAgIHJldHVybiBfX2JlZzsKICAg IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgX0lu SXRlcgogICAgbnVtX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAgIGRvX2dldChpdGVyX3R5cGUg X19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgaW9zX2Jh c2U6Omlvc3RhdGUmIF9fZXJyLCBsb25nIGRvdWJsZSYgX192KSBjb25zdAogICAgewogICAgICBz dHJpbmcgX194dHJjOwogICAgICBfX3h0cmMucmVzZXJ2ZSgzMik7CiAgICAgIF9fYmVnID0gX01f ZXh0cmFjdF9mbG9hdChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3h0cmMpOwogICAgICBf X2NvbnZlcnRfdG9fdihfX3h0cmMuY19zdHIoKSwgX192LCBfX2VyciwgX1NfY19sb2NhbGUpOwog ICAgICByZXR1cm4gX19iZWc7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw ZW5hbWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIKICAgIG51bV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6 CiAgICBkb19nZXQoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBf X2lvLAogICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2Vyciwgdm9pZComIF9fdikgY29u c3QKICAgIHsKCiAgICAgIHR5cGVkZWYgaW9zX2Jhc2U6OmZtdGZsYWdzIGZtdGZsYWdzOwogICAg ICBmbXRmbGFncyBfX2ZtdCA9IF9faW8uZmxhZ3MoKTsKICAgICAgZm10ZmxhZ3MgX19mbXRtYXNr ID0gfihpb3NfYmFzZTo6c2hvd3BvcyB8IGlvc19iYXNlOjpiYXNlZmllbGQKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB8IGlvc19iYXNlOjp1cHBlcmNhc2UgfCBpb3NfYmFzZTo6aW50ZXJu YWwpOwogICAgICBfX2lvLmZsYWdzKF9fZm10ICYgX19mbXRtYXNrIHwgKGlvc19iYXNlOjpoZXgg fCBpb3NfYmFzZTo6c2hvd2Jhc2UpKTsKCiAgICAgIHN0cmluZyBfX3h0cmM7CiAgICAgIGludCBf X2Jhc2U7CiAgICAgIF9fYmVnID0gX01fZXh0cmFjdF9pbnQoX19iZWcsIF9fZW5kLCBfX2lvLCBf X2VyciwgX194dHJjLCBfX2Jhc2UpOwoKCiAgICAgIF9faW8uZmxhZ3MoX19mbXQpOwoKICAgICAg dW5zaWduZWQgbG9uZyBfX3VsOwogICAgICBfX2NvbnZlcnRfdG9fdihfX3h0cmMuY19zdHIoKSwg X191bCwgX19lcnIsIF9TX2NfbG9jYWxlLCBfX2Jhc2UpOwogICAgICBpZiAoIShfX2VyciAmIGlv c19iYXNlOjpmYWlsYml0KSkKICAgICAgICBfX3YgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihf X3VsKTsKICAgICAgZWxzZQogICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwogICAg ICByZXR1cm4gX19iZWc7CiAgICB9CiMgNjE4ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL2xv Y2FsZV9mYWNldHMudGNjIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf T3V0SXRlcj4KICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9WYWx1ZVQ+CiAgICAgIF9PdXRJdGVyCiAg ICAgIG51bV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OgogICAgICBfTV9jb252ZXJ0X2Zsb2F0KF9P dXRJdGVyIF9fcywgaW9zX2Jhc2UmIF9faW8sIF9DaGFyVCBfX2ZpbGwsIGNoYXIgX19tb2QsCiAg ICAgICAgICAgICAgICAgICAgICAgX1ZhbHVlVCBfX3YpIGNvbnN0CiAgICAgIHsKCgoKCgoKCiAg ICAgICAgY29uc3QgaW50IF9fbWF4X2RpZ2l0cyA9IG51bWVyaWNfbGltaXRzPF9WYWx1ZVQ+Ojpk aWdpdHMxMCArIDI7CiAgICAgICAgc3RyZWFtc2l6ZSBfX3ByZWMgPSBfX2lvLnByZWNpc2lvbigp OwoKICAgICAgICBpZiAoX19wcmVjID4gc3RhdGljX2Nhc3Q8c3RyZWFtc2l6ZT4oX19tYXhfZGln aXRzKSkKICAgICAgICAgIF9fcHJlYyA9IHN0YXRpY19jYXN0PHN0cmVhbXNpemU+KF9fbWF4X2Rp Z2l0cyk7CgoKICAgICAgICBjaGFyIF9fZmJ1ZlsxNl07CgoKICAgICAgICBpbnQgX19sZW47CgoK CiAgICAgICAgaW50IF9fY3Nfc2l6ZSA9IF9fbWF4X2RpZ2l0cyAqIDM7CiAgICAgICAgY2hhciog X19jcyA9IHN0YXRpY19jYXN0PGNoYXIqPihfX2J1aWx0aW5fYWxsb2NhKF9fY3Nfc2l6ZSkpOwoK ICAgICAgICBjb25zdCBib29sIF9fZnAgPSBfU19mb3JtYXRfZmxvYXQoX19pbywgX19mYnVmLCBf X21vZCwgX19wcmVjKTsKICAgICAgICBpZiAoX19mcCkKICAgICAgICAgIF9fbGVuID0gX19jb252 ZXJ0X2Zyb21fdihfX2NzLCBfX2NzX3NpemUsIF9fZmJ1ZiwgX192LAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIF9TX2NfbG9jYWxlLCBfX3ByZWMpOwogICAgICAgIGVsc2UKICAg ICAgICAgIF9fbGVuID0gX19jb252ZXJ0X2Zyb21fdihfX2NzLCBfX2NzX3NpemUsIF9fZmJ1Ziwg X192LCBfU19jX2xvY2FsZSk7CgoKICAgICAgICBpZiAoX19sZW4gPj0gX19jc19zaXplKQogICAg ICAgICAgewogICAgICAgICAgICBfX2NzX3NpemUgPSBfX2xlbiArIDE7CiAgICAgICAgICAgIF9f Y3MgPSBzdGF0aWNfY2FzdDxjaGFyKj4oX19idWlsdGluX2FsbG9jYShfX2NzX3NpemUpKTsKICAg ICAgICAgICAgaWYgKF9fZnApCiAgICAgICAgICAgICAgX19sZW4gPSBfX2NvbnZlcnRfZnJvbV92 KF9fY3MsIF9fY3Nfc2l6ZSwgX19mYnVmLCBfX3YsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIF9TX2NfbG9jYWxlLCBfX3ByZWMpOwogICAgICAgICAgICBlbHNlCiAgICAg ICAgICAgICAgX19sZW4gPSBfX2NvbnZlcnRfZnJvbV92KF9fY3MsIF9fY3Nfc2l6ZSwgX19mYnVm LCBfX3YsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9TX2NfbG9jYWxl KTsKICAgICAgICAgIH0KIyA2ODYgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvbG9jYWxlX2Zh Y2V0cy50Y2MiIDMKICAgICAgICByZXR1cm4gX01fd2lkZW5fZmxvYXQoX19zLCBfX2lvLCBfX2Zp bGwsIF9fY3MsIF9fbGVuKTsKICAgICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5 cGVuYW1lIF9PdXRJdGVyPgogICAgdGVtcGxhdGU8dHlwZW5hbWUgX1ZhbHVlVD4KICAgICAgX091 dEl0ZXIKICAgICAgbnVtX3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6CiAgICAgIF9NX2NvbnZlcnRf aW50KF9PdXRJdGVyIF9fcywgaW9zX2Jhc2UmIF9faW8sIF9DaGFyVCBfX2ZpbGwsIGNoYXIgX19t b2QsCiAgICAgICAgICAgICAgICAgICAgIGNoYXIgX19tb2RsLCBfVmFsdWVUIF9fdikgY29uc3QK ICAgICAgewoKCgogICAgICAgIGNoYXIgX19mYnVmWzE2XTsKICAgICAgICBfU19mb3JtYXRfaW50 KF9faW8sIF9fZmJ1ZiwgX19tb2QsIF9fbW9kbCk7CgoKICAgICAgICBpbnQgX19jc19zaXplID0g NjQ7CiAgICAgICAgY2hhciogX19jcyA9IHN0YXRpY19jYXN0PGNoYXIqPihfX2J1aWx0aW5fYWxs b2NhKF9fY3Nfc2l6ZSkpOwogICAgICAgIGludCBfX2xlbiA9IF9fY29udmVydF9mcm9tX3YoX19j cywgX19jc19zaXplLCBfX2ZidWYsIF9fdiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIF9TX2NfbG9jYWxlKTsKCiAgICAgICAgaWYgKF9fbGVuID49IF9fY3Nfc2l6ZSkKICAg ICAgICAgIHsKICAgICAgICAgICAgX19jc19zaXplID0gX19sZW4gKyAxOwogICAgICAgICAgICBf X2NzID0gc3RhdGljX2Nhc3Q8Y2hhcio+KF9fYnVpbHRpbl9hbGxvY2EoX19jc19zaXplKSk7CiAg ICAgICAgICAgIF9fbGVuID0gX19jb252ZXJ0X2Zyb21fdihfX2NzLCBfX2NzX3NpemUsIF9fZmJ1 ZiwgX192LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1NfY19sb2NhbGUp OwogICAgICAgICAgfQoKCgoKCgogICAgICAgIHJldHVybiBfTV93aWRlbl9pbnQoX19zLCBfX2lv LCBfX2ZpbGwsIF9fY3MsIF9fbGVuKTsKICAgICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh clQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgX091dEl0ZXIKICAgIG51bV9wdXQ8X0NoYXJULCBf T3V0SXRlcj46OgogICAgX01fd2lkZW5fZmxvYXQoX091dEl0ZXIgX19zLCBpb3NfYmFzZSYgX19p bywgX0NoYXJUIF9fZmlsbCwgY2hhciogX19jcywKICAgICAgICAgICAgICAgICAgIGludCBfX2xl bikgY29uc3QKICAgIHsKICAgICAgdHlwZWRlZiBjaGFyX3RyYWl0czxfQ2hhclQ+IF9fdHJhaXRz X3R5cGU7CgoKICAgICAgY29uc3QgbG9jYWxlIF9fbG9jID0gX19pby5nZXRsb2MoKTsKICAgICAg Y29uc3QgY3R5cGU8X0NoYXJUPiYgX19jdHlwZSA9IHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4o X19sb2MpOwogICAgICBfQ2hhclQqIF9fd3MgPSBzdGF0aWNfY2FzdDxfQ2hhclQqPihfX2J1aWx0 aW5fYWxsb2NhKHNpemVvZihfQ2hhclQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBfX2xlbikpOwoKCiAgICAgIF9DaGFyVCogX193 czIgPSBzdGF0aWNfY2FzdDxfQ2hhclQqPihfX2J1aWx0aW5fYWxsb2NhKHNpemVvZihfQ2hhclQp CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICogX19sZW4gKiAyKSk7CiAgICAgIF9fY3R5cGUud2lkZW4oX19jcywgX19jcyArIF9fbGVu LCBfX3dzKTsKCgogICAgICBjb25zdCBfQ2hhclQqIF9fcDsKICAgICAgY29uc3QgbnVtcHVuY3Q8 X0NoYXJUPiYgX19ucCA9IHVzZV9mYWNldDxudW1wdW5jdDxfQ2hhclQ+ID4oX19sb2MpOwogICAg ICBpZiAoX19wID0gX190cmFpdHNfdHlwZTo6ZmluZChfX3dzLCBfX2xlbiwgX19jdHlwZS53aWRl bignLicpKSkKICAgICAgICBfX3dzW19fcCAtIF9fd3NdID0gX19ucC5kZWNpbWFsX3BvaW50KCk7 CgoKCgogICAgICBjb25zdCBzdHJpbmcgX19ncm91cGluZyA9IF9fbnAuZ3JvdXBpbmcoKTsKICAg ICAgaW9zX2Jhc2U6OmZtdGZsYWdzIF9fYmFzZWZpZWxkID0gX19pby5mbGFncygpICYgaW9zX2Jh c2U6OmJhc2VmaWVsZDsKICAgICAgaWYgKF9fZ3JvdXBpbmcuc2l6ZSgpKQogICAgICAgIHsKICAg ICAgICAgIF9DaGFyVCogX19wMjsKICAgICAgICAgIGludCBfX2RlY2xlbiA9IF9fcCA/IF9fcCAt IF9fd3MgOiBfX2xlbjsKICAgICAgICAgIF9fcDIgPSBfX2FkZF9ncm91cGluZyhfX3dzMiwgX19u cC50aG91c2FuZHNfc2VwKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19ncm91 cGluZy5jX3N0cigpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZ3JvdXBpbmcu Y19zdHIoKSArIF9fZ3JvdXBpbmcuc2l6ZSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIF9fd3MsIF9fd3MgKyBfX2RlY2xlbik7CiAgICAgICAgICBpbnQgX19uZXdsZW4gPSBfX3Ay IC0gX193czI7CgoKICAgICAgICAgIGlmIChfX3ApCiAgICAgICAgICAgIHsKICAgICAgICAgICAg ICBfX3RyYWl0c190eXBlOjpjb3B5KF9fcDIsIF9fcCwgX19sZW4gLSBfX2RlY2xlbik7CiAgICAg ICAgICAgICAgX19uZXdsZW4gKz0gX19sZW4gLSBfX2RlY2xlbjsKICAgICAgICAgICAgfQoKCiAg ICAgICAgICBfX3dzID0gX193czI7CiAgICAgICAgICBfX2xlbiA9IF9fbmV3bGVuOwogICAgICAg IH0KCiAgICAgIHJldHVybiBfTV9pbnNlcnQoX19zLCBfX2lvLCBfX2ZpbGwsIF9fd3MsIF9fbGVu KTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4K ICAgIF9PdXRJdGVyCiAgICBudW1fcHV0PF9DaGFyVCwgX091dEl0ZXI+OjoKICAgIF9NX3dpZGVu X2ludChfT3V0SXRlciBfX3MsIGlvc19iYXNlJiBfX2lvLCBfQ2hhclQgX19maWxsLCBjaGFyKiBf X2NzLAogICAgICAgICAgICAgICAgIGludCBfX2xlbikgY29uc3QKICAgIHsKCgogICAgICBjb25z dCBsb2NhbGUgX19sb2MgPSBfX2lvLmdldGxvYygpOwogICAgICBjb25zdCBjdHlwZTxfQ2hhclQ+ JiBfX2N0eXBlID0gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYyk7CiAgICAgIF9DaGFy VCogX193cyA9IHN0YXRpY19jYXN0PF9DaGFyVCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKF9D aGFyVCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAqIF9fbGVuKSk7CgoKICAgICAgX0NoYXJUKiBfX3dzMiA9IHN0YXRpY19jYXN0PF9D aGFyVCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKF9DaGFyVCkKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBfX2xlbiAqIDIpKTsK ICAgICAgX19jdHlwZS53aWRlbihfX2NzLCBfX2NzICsgX19sZW4sIF9fd3MpOwoKCiAgICAgIGNv bnN0IG51bXB1bmN0PF9DaGFyVD4mIF9fbnAgPSB1c2VfZmFjZXQ8bnVtcHVuY3Q8X0NoYXJUPiA+ KF9fbG9jKTsKICAgICAgY29uc3Qgc3RyaW5nIF9fZ3JvdXBpbmcgPSBfX25wLmdyb3VwaW5nKCk7 CiAgICAgIGNvbnN0IGlvc19iYXNlOjpmbXRmbGFncyBfX2Jhc2VmaWVsZCA9IF9faW8uZmxhZ3Mo KSAmIGlvc19iYXNlOjpiYXNlZmllbGQ7CiAgICAgIGlmIChfX2dyb3VwaW5nLnNpemUoKSkKICAg ICAgICB7CgoKCgoKICAgICAgICAgIHN0cmVhbXNpemUgX19vZmYgPSAwOwogICAgICAgICAgaWYg KChfX2lvLmZsYWdzKCkgJiBpb3NfYmFzZTo6c2hvd2Jhc2UpICYmIF9fbGVuID4gMSkKICAgICAg ICAgICAgaWYgKF9fYmFzZWZpZWxkID09IGlvc19iYXNlOjpvY3QpCiAgICAgICAgICAgICAgewog ICAgICAgICAgICAgICAgX19vZmYgPSAxOwogICAgICAgICAgICAgICAgKl9fd3MyID0gKl9fd3M7 CiAgICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIGlmIChfX2Jhc2VmaWVsZCA9PSBpb3Nf YmFzZTo6aGV4KQogICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIF9fb2ZmID0gMjsKICAg ICAgICAgICAgICAgICpfX3dzMiA9ICpfX3dzOwogICAgICAgICAgICAgICAgKihfX3dzMiArIDEp ID0gKihfX3dzICsgMSk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgX0NoYXJUKiBfX3A7CiAg ICAgICAgICBfX3AgPSBfX2FkZF9ncm91cGluZyhfX3dzMiArIF9fb2ZmLCBfX25wLnRob3VzYW5k c19zZXAoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZ3JvdXBpbmcuY19zdHIo KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZ3JvdXBpbmcuY19zdHIoKSArIF9f Z3JvdXBpbmcuc2l6ZSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX193cyArIF9f b2ZmLCBfX3dzICsgX19sZW4pOwogICAgICAgICAgX19sZW4gPSBfX3AgLSBfX3dzMjsKCiAgICAg ICAgICBfX3dzID0gX193czI7CiAgICAgICAgfQogICAgICByZXR1cm4gX01faW5zZXJ0KF9fcywg X19pbywgX19maWxsLCBfX3dzLCBfX2xlbik7CiAgICB9CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUg X0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIF9PdXRJdGVyCiAgICBudW1fcHV0PF9DaGFy VCwgX091dEl0ZXI+OjoKICAgIF9NX2luc2VydChfT3V0SXRlciBfX3MsIGlvc19iYXNlJiBfX2lv LCBfQ2hhclQgX19maWxsLCBjb25zdCBfQ2hhclQqIF9fd3MsCiAgICAgICAgICAgICAgaW50IF9f bGVuKSBjb25zdAogICAgewogICAgICB0eXBlZGVmIGNoYXJfdHJhaXRzPF9DaGFyVD4gX190cmFp dHNfdHlwZTsKCiAgICAgIHN0cmVhbXNpemUgX193ID0gX19pby53aWR0aCgpOwogICAgICBfQ2hh clQqIF9fd3MyID0gc3RhdGljX2Nhc3Q8X0NoYXJUKj4oX19idWlsdGluX2FsbG9jYShzaXplb2Yo X0NoYXJUKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAqIF9fdykpOwogICAgICBpZiAoX193ID4gc3RhdGljX2Nhc3Q8c3RyZWFtc2l6 ZT4oX19sZW4pKQogICAgICAgIHsKICAgICAgICAgIF9fcGFkPF9DaGFyVCwgX190cmFpdHNfdHlw ZT46Ol9TX3BhZChfX2lvLCBfX2ZpbGwsIF9fd3MyLCBfX3dzLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdywgX19sZW4sIHRydWUpOwogICAgICAgICAg X19sZW4gPSBzdGF0aWNfY2FzdDxpbnQ+KF9fdyk7CgogICAgICAgICAgX193cyA9IF9fd3MyOwog ICAgICAgIH0KICAgICAgX19pby53aWR0aCgwKTsKCgoKICAgICAgZm9yIChpbnQgX19qID0gMDsg X19qIDwgX19sZW47ICsrX19qLCArK19fcykKICAgICAgICAqX19zID0gX193c1tfX2pdOwogICAg ICByZXR1cm4gX19zOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l IF9PdXRJdGVyPgogICAgX091dEl0ZXIKICAgIG51bV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46Ogog ICAgZG9fcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUgX19maWxs LCBib29sIF9fdikgY29uc3QKICAgIHsKICAgICAgaW9zX2Jhc2U6OmZtdGZsYWdzIF9fZmxhZ3Mg PSBfX2lvLmZsYWdzKCk7CiAgICAgIGlmICgoX19mbGFncyAmIGlvc19iYXNlOjpib29sYWxwaGEp ID09IDApCiAgICAgICAgewogICAgICAgICAgdW5zaWduZWQgbG9uZyBfX3V2ID0gX192OwogICAg ICAgICAgX19zID0gX01fY29udmVydF9pbnQoX19zLCBfX2lvLCBfX2ZpbGwsICd1JywgY2hhcigp LCBfX3V2KTsKICAgICAgICB9CiAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICB0eXBlZGVm IGJhc2ljX3N0cmluZzxfQ2hhclQ+IF9fc3RyaW5nX3R5cGU7CiAgICAgICAgICBsb2NhbGUgX19s b2MgPSBfX2lvLmdldGxvYygpOwogICAgICAgICAgY29uc3QgbnVtcHVuY3Q8X0NoYXJUPiYgX19u cCA9IHVzZV9mYWNldDxudW1wdW5jdDxfQ2hhclQ+ID4oX19sb2MpOwogICAgICAgICAgX19zdHJp bmdfdHlwZSBfX25hbWU7CiAgICAgICAgICBpZiAoX192KQogICAgICAgICAgICBfX25hbWUgPSBf X25wLnRydWVuYW1lKCk7CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIF9fbmFtZSA9IF9fbnAu ZmFsc2VuYW1lKCk7CiAgICAgICAgICBfX3MgPSBfTV9pbnNlcnQoX19zLCBfX2lvLCBfX2ZpbGws IF9fbmFtZS5jX3N0cigpLCBfX25hbWUuc2l6ZSgpKTsKICAgICAgICB9CiAgICAgIHJldHVybiBf X3M7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+ CiAgICBfT3V0SXRlcgogICAgbnVtX3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6CiAgICBkb19wdXQo aXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsIGxvbmcgX192 KSBjb25zdAogICAgeyByZXR1cm4gX01fY29udmVydF9pbnQoX19zLCBfX2lvLCBfX2ZpbGwsICdk JywgY2hhcigpLCBfX3YpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg X091dEl0ZXI+CiAgICBfT3V0SXRlcgogICAgbnVtX3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6CiAg ICBkb19wdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGws CiAgICAgICAgICAgdW5zaWduZWQgbG9uZyBfX3YpIGNvbnN0CiAgICB7IHJldHVybiBfTV9jb252 ZXJ0X2ludChfX3MsIF9faW8sIF9fZmlsbCwgJ3UnLCBjaGFyKCksIF9fdik7IH0KCgogIHRlbXBs YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBfT3V0SXRlcgogICAg bnVtX3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6CiAgICBkb19wdXQoaXRlcl90eXBlIF9fcywgaW9z X2Jhc2UmIF9fYiwgY2hhcl90eXBlIF9fZmlsbCwgbG9uZyBsb25nIF9fdikgY29uc3QKICAgIHsg cmV0dXJuIF9NX2NvbnZlcnRfaW50KF9fcywgX19iLCBfX2ZpbGwsICdkJywgJ2wnLCBfX3YpOyB9 CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBfT3V0 SXRlcgogICAgbnVtX3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6CiAgICBkb19wdXQoaXRlcl90eXBl IF9fcywgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsCiAgICAgICAgICAgdW5zaWdu ZWQgbG9uZyBsb25nIF9fdikgY29uc3QKICAgIHsgcmV0dXJuIF9NX2NvbnZlcnRfaW50KF9fcywg X19pbywgX19maWxsLCAndScsICdsJywgX192KTsgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No YXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIF9PdXRJdGVyCiAgICBudW1fcHV0PF9DaGFyVCwg X091dEl0ZXI+OjoKICAgIGRvX3B1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19pbywgY2hh cl90eXBlIF9fZmlsbCwgZG91YmxlIF9fdikgY29uc3QKICAgIHsgcmV0dXJuIF9NX2NvbnZlcnRf ZmxvYXQoX19zLCBfX2lvLCBfX2ZpbGwsIGNoYXIoKSwgX192KTsgfQoKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgX091dEl0ZXIKICAgIG51bV9wdXQ8 X0NoYXJULCBfT3V0SXRlcj46OgogICAgZG9fcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBf X2lvLCBjaGFyX3R5cGUgX19maWxsLAogICAgICAgICAgIGxvbmcgZG91YmxlIF9fdikgY29uc3QK ICAgIHsgcmV0dXJuIF9NX2NvbnZlcnRfZmxvYXQoX19zLCBfX2lvLCBfX2ZpbGwsICdMJywgX192 KTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAg X091dEl0ZXIKICAgIG51bV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OgogICAgZG9fcHV0KGl0ZXJf dHlwZSBfX3MsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUgX19maWxsLAogICAgICAgICAgIGNv bnN0IHZvaWQqIF9fdikgY29uc3QKICAgIHsKICAgICAgaW9zX2Jhc2U6OmZtdGZsYWdzIF9fZmxh Z3MgPSBfX2lvLmZsYWdzKCk7CiAgICAgIGlvc19iYXNlOjpmbXRmbGFncyBfX2ZtdCA9IH4oaW9z X2Jhc2U6OnNob3dwb3MgfCBpb3NfYmFzZTo6YmFzZWZpZWxkCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgfCBpb3NfYmFzZTo6dXBwZXJjYXNlIHwgaW9zX2Jhc2U6OmludGVybmFs KTsKICAgICAgX19pby5mbGFncyhfX2ZsYWdzICYgX19mbXQgfCAoaW9zX2Jhc2U6OmhleCB8IGlv c19iYXNlOjpzaG93YmFzZSkpOwogICAgICB0cnkKICAgICAgICB7CiAgICAgICAgICBfX3MgPSBf TV9jb252ZXJ0X2ludChfX3MsIF9faW8sIF9fZmlsbCwgJ3UnLCBjaGFyKCksCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGxvbmc+KF9fdikp OwogICAgICAgICAgX19pby5mbGFncyhfX2ZsYWdzKTsKICAgICAgICB9CiAgICAgIGNhdGNoICgu Li4pCiAgICAgICAgewogICAgICAgICAgX19pby5mbGFncyhfX2ZsYWdzKTsKICAgICAgICAgIHRo cm93OwogICAgICAgIH0KICAgICAgcmV0dXJuIF9fczsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVu YW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIKICAgIG1vbmV5X2dldDxf Q2hhclQsIF9Jbkl0ZXI+OjoKICAgIGRvX2dldChpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBf X2VuZCwgYm9vbCBfX2ludGwsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgIGlvc19iYXNlOjpp b3N0YXRlJiBfX2VyciwgbG9uZyBkb3VibGUmIF9fdW5pdHMpIGNvbnN0CiAgICB7CiAgICAgIHN0 cmluZ190eXBlIF9fc3RyOwogICAgICBfX2JlZyA9IHRoaXMtPmRvX2dldChfX2JlZywgX19lbmQs IF9faW50bCwgX19pbywgX19lcnIsIF9fc3RyKTsKCiAgICAgIGNvbnN0IGludCBfX24gPSBudW1l cmljX2xpbWl0czxsb25nIGRvdWJsZT46OmRpZ2l0czEwOwogICAgICBjaGFyKiBfX2NzID0gc3Rh dGljX2Nhc3Q8Y2hhcio+KF9fYnVpbHRpbl9hbGxvY2EoX19uKSk7CiAgICAgIGNvbnN0IGxvY2Fs ZSBfX2xvYyA9IF9faW8uZ2V0bG9jKCk7CiAgICAgIGNvbnN0IGN0eXBlPF9DaGFyVD4mIF9fY3R5 cGUgPSB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKTsKICAgICAgY29uc3QgX0NoYXJU KiBfX3djcyA9IF9fc3RyLmNfc3RyKCk7CiAgICAgIF9fY3R5cGUubmFycm93KF9fd2NzLCBfX3dj cyArIF9fc3RyLnNpemUoKSArIDEsIGNoYXIoKSwgX19jcyk7CiAgICAgIF9fY29udmVydF90b192 KF9fY3MsIF9fdW5pdHMsIF9fZXJyLCBfU19jX2xvY2FsZSk7CiAgICAgIHJldHVybiBfX2JlZzsK ICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAg X0luSXRlcgogICAgbW9uZXlfZ2V0PF9DaGFyVCwgX0luSXRlcj46OgogICAgZG9fZ2V0KGl0ZXJf dHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBib29sIF9faW50bCwgaW9zX2Jhc2UmIF9faW8s CiAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBzdHJpbmdfdHlwZSYgX191bml0 cykgY29uc3QKICAgIHsKCiAgICAgIHR5cGVkZWYgbW9uZXlwdW5jdDxfQ2hhclQsIHRydWU+IF9f bW9uZXlfdHJ1ZTsKICAgICAgdHlwZWRlZiBtb25leXB1bmN0PF9DaGFyVCwgZmFsc2U+IF9fbW9u ZXlfZmFsc2U7CiAgICAgIHR5cGVkZWYgbW9uZXlfYmFzZTo6cGFydCBwYXJ0OwogICAgICB0eXBl ZGVmIHR5cGVuYW1lIHN0cmluZ190eXBlOjpzaXplX3R5cGUgc2l6ZV90eXBlOwoKICAgICAgY29u c3QgbG9jYWxlIF9fbG9jID0gX19pby5nZXRsb2MoKTsKICAgICAgY29uc3QgX19tb25leV90cnVl JiBfX21wdCA9IHVzZV9mYWNldDxfX21vbmV5X3RydWU+KF9fbG9jKTsKICAgICAgY29uc3QgX19t b25leV9mYWxzZSYgX19tcGYgPSB1c2VfZmFjZXQ8X19tb25leV9mYWxzZT4oX19sb2MpOwogICAg ICBjb25zdCBjdHlwZTxfQ2hhclQ+JiBfX2N0eXBlID0gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4g PihfX2xvYyk7CgogICAgICBjb25zdCBtb25leV9iYXNlOjpwYXR0ZXJuIF9fcCA9IF9faW50bCA/ IF9fbXB0Lm5lZ19mb3JtYXQoKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICA6IF9fbXBmLm5lZ19mb3JtYXQoKTsKCiAgICAgIGNvbnN0IHN0cmluZ190eXBlIF9f cG9zX3NpZ24gPV9faW50bCA/IF9fbXB0LnBvc2l0aXZlX3NpZ24oKQogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBfX21wZi5wb3NpdGl2ZV9zaWduKCk7CiAgICAg IGNvbnN0IHN0cmluZ190eXBlIF9fbmVnX3NpZ24gPV9faW50bCA/IF9fbXB0Lm5lZ2F0aXZlX3Np Z24oKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBfX21wZi5u ZWdhdGl2ZV9zaWduKCk7CiAgICAgIGNvbnN0IGNoYXJfdHlwZSBfX2QgPSBfX2ludGwgPyBfX21w dC5kZWNpbWFsX3BvaW50KCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IF9f bXBmLmRlY2ltYWxfcG9pbnQoKTsKICAgICAgY29uc3QgY2hhcl90eXBlIF9fc2VwID0gX19pbnRs ID8gX19tcHQudGhvdXNhbmRzX3NlcCgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICA6IF9fbXBmLnRob3VzYW5kc19zZXAoKTsKCiAgICAgIGNvbnN0IHN0cmluZyBfX2dyb3Vw aW5nID0gX19pbnRsID8gX19tcHQuZ3JvdXBpbmcoKSA6IF9fbXBmLmdyb3VwaW5nKCk7CgoKICAg ICAgc3RyaW5nX3R5cGUgX19zaWduOwoKICAgICAgc3RyaW5nIF9fZ3JvdXBpbmdfdG1wOwoKICAg ICAgaW50IF9fc2VwX3BvcyA9IDA7CgogICAgICBib29sIF9fdGVzdHZhbGlkID0gdHJ1ZTsKCiAg ICAgIGJvb2wgX190ZXN0ZGVjZm91bmQgPSBmYWxzZTsKCgogICAgICBzdHJpbmdfdHlwZSBfX3Rl bXBfdW5pdHM7CgogICAgICBjaGFyX3R5cGUgX19jID0gKl9fYmVnOwogICAgICBjaGFyX3R5cGUg X19lb2YgPSBzdGF0aWNfY2FzdDxjaGFyX3R5cGU+KGNoYXJfdHJhaXRzPGNoYXJfdHlwZT46OmVv ZigpKTsKICAgICAgZm9yIChpbnQgX19pID0gMDsgX19iZWcgIT0gX19lbmQgJiYgX19pIDwgNCAm JiBfX3Rlc3R2YWxpZDsgKytfX2kpCiAgICAgICAgewogICAgICAgICAgcGFydCBfX3doaWNoID0g c3RhdGljX2Nhc3Q8cGFydD4oX19wLmZpZWxkW19faV0pOwogICAgICAgICAgc3dpdGNoIChfX3do aWNoKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgY2FzZSBtb25leV9iYXNlOjpz eW1ib2w6CiAgICAgICAgICAgICAgICAgIGlmIChfX2lvLmZsYWdzKCkgJiBpb3NfYmFzZTo6c2hv d2Jhc2UKICAgICAgICAgICAgICAgICAgICAgIHx8IF9faSA8IDIgfHwgX19zaWduLnNpemUoKSA+ IDEKICAgICAgICAgICAgICAgICAgICAgIHx8ICgoc3RhdGljX2Nhc3Q8cGFydD4oX19wLmZpZWxk WzNdKSAhPSBtb25leV9iYXNlOjpub25lKQogICAgICAgICAgICAgICAgICAgICAgICAgICYmIF9f aSA9PSAyKSkKICAgICAgICAgICAgICAgICAgICB7CgoKCgoKICAgICAgICAgICAgICAgICAgICAg IGNvbnN0IHN0cmluZ190eXBlIF9fc3ltYm9sID0gX19pbnRsID8gX19tcHQuY3Vycl9zeW1ib2wo KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICA6IF9fbXBmLmN1cnJfc3ltYm9sKCk7CiAgICAgICAgICAgICAgICAgICAgICBzaXplX3R5cGUg X19sZW4gPSBfX3N5bWJvbC5zaXplKCk7CiAgICAgICAgICAgICAgICAgICAgICBzaXplX3R5cGUg X19qID0gMDsKICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChfX2JlZyAhPSBfX2VuZAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICYmIF9faiA8IF9fbGVuICYmIF9fc3ltYm9sW19fal0g PT0gX19jKQogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAg ICAgX19jID0gKigrK19fYmVnKTsKICAgICAgICAgICAgICAgICAgICAgICAgICArK19fajsKICAg ICAgICAgICAgICAgICAgICAgICAgfQoKCiAgICAgICAgICAgICAgICAgICAgICBpZiAoX19qICE9 IF9fbGVuICYmIChfX2lvLmZsYWdzKCkgJiBpb3NfYmFzZTo6c2hvd2Jhc2UpKQogICAgICAgICAg ICAgICAgICAgICAgICBfX3Rlc3R2YWxpZCA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgIH0K ICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlIG1vbmV5X2Jhc2U6 OnNpZ246CgogICAgICAgICAgICAgICAgICBpZiAoX19wb3Nfc2lnbi5zaXplKCkgJiYgX19uZWdf c2lnbi5zaXplKCkpCiAgICAgICAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgICAgICAgaWYg KF9fYyA9PSBfX3Bvc19zaWduWzBdKQogICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAg ICAgICAgICAgICAgICBfX3NpZ24gPSBfX3Bvc19zaWduOwogICAgICAgICAgICAgICAgICAgICAg ICBfX2MgPSAqKCsrX19iZWcpOwogICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg ICAgICAgIGVsc2UgaWYgKF9fYyA9PSBfX25lZ19zaWduWzBdKQogICAgICAgICAgICAgICAgICAg ICAgewogICAgICAgICAgICAgICAgICAgICAgICBfX3NpZ24gPSBfX25lZ19zaWduOwogICAgICAg ICAgICAgICAgICAgICAgICBfX2MgPSAqKCsrX19iZWcpOwogICAgICAgICAgICAgICAgICAgICAg fQogICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgIF9fdGVzdHZh bGlkID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgZWxzZSBp ZiAoX19wb3Nfc2lnbi5zaXplKCkgJiYgX19jID09IF9fcG9zX3NpZ25bMF0pCiAgICAgICAgICAg ICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgX19zaWduID0gX19wb3Nfc2lnbjsKICAg ICAgICAgICAgICAgICAgICAgIF9fYyA9ICooKytfX2JlZyk7CiAgICAgICAgICAgICAgICAgICAg fQogICAgICAgICAgICAgICAgICBlbHNlIGlmIChfX25lZ19zaWduLnNpemUoKSAmJiBfX2MgPT0g X19uZWdfc2lnblswXSkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAg ICBfX3NpZ24gPSBfX25lZ19zaWduOwogICAgICAgICAgICAgICAgICAgICAgX19jID0gKigrK19f YmVnKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAg ICAgICAgICAgICAgY2FzZSBtb25leV9iYXNlOjp2YWx1ZToKCgogICAgICAgICAgICAgICAgICB3 aGlsZSAoX19iZWcgIT0gX19lbmQKICAgICAgICAgICAgICAgICAgICAgICAgICYmIChfX2N0eXBl LmlzKGN0eXBlX2Jhc2U6OmRpZ2l0LCBfX2MpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg fHwgKF9fYyA9PSBfX2QgJiYgIV9fdGVzdGRlY2ZvdW5kKQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHx8IF9fYyA9PSBfX3NlcCkpCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAg ICAgICAgICAgICAgaWYgKF9fYyA9PSBfX2QpCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAg ICAgICAgICAgICAgICAgICAgICAgICBfX2dyb3VwaW5nX3RtcCArPSBzdGF0aWNfY2FzdDxjaGFy PihfX3NlcF9wb3MpOwogICAgICAgICAgICAgICAgICAgICAgICAgIF9fc2VwX3BvcyA9IDA7CiAg ICAgICAgICAgICAgICAgICAgICAgICAgX190ZXN0ZGVjZm91bmQgPSB0cnVlOwogICAgICAgICAg ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChfX2MgPT0gX19z ZXApCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICBp ZiAoX19ncm91cGluZy5zaXplKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CgogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBfX2dyb3VwaW5nX3RtcCArPSBzdGF0aWNfY2FzdDxj aGFyPihfX3NlcF9wb3MpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3NlcF9wb3Mg PSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAg ICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgX190ZXN0dmFsaWQgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAg ICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgIF9fdGVtcF91bml0cyArPSBfX2M7CiAg ICAgICAgICAgICAgICAgICAgICAgICAgKytfX3NlcF9wb3M7CiAgICAgICAgICAgICAgICAgICAg ICAgIH0KICAgICAgICAgICAgICAgICAgICAgIF9fYyA9ICooKytfX2JlZyk7CiAgICAgICAgICAg ICAgICAgICAgfQogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2Ug bW9uZXlfYmFzZTo6c3BhY2U6CiAgICAgICAgICAgICAgICBjYXNlIG1vbmV5X2Jhc2U6Om5vbmU6 CgogICAgICAgICAgICAgICAgICBpZiAoX19pICE9IDMpCiAgICAgICAgICAgICAgICAgICAgd2hp bGUgKF9fYmVnICE9IF9fZW5kCiAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIF9fY3R5cGUu aXMoY3R5cGVfYmFzZTo6c3BhY2UsIF9fYykpCiAgICAgICAgICAgICAgICAgICAgICBfX2MgPSAq KCsrX19iZWcpOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAg ICAgICB9CgoKICAgICAgaWYgKF9fc2lnbi5zaXplKCkgPiAxKQogICAgICAgIHsKICAgICAgICAg IHNpemVfdHlwZSBfX2xlbiA9IF9fc2lnbi5zaXplKCk7CiAgICAgICAgICBzaXplX3R5cGUgX19p ID0gMTsKICAgICAgICAgIGZvciAoOyBfX2MgIT0gX19lb2YgJiYgX19pIDwgX19sZW47ICsrX19p KQogICAgICAgICAgICB3aGlsZSAoX19iZWcgIT0gX19lbmQgJiYgX19jICE9IF9fc2lnbltfX2ld KQogICAgICAgICAgICAgIF9fYyA9ICooKytfX2JlZyk7CgogICAgICAgICAgaWYgKF9faSAhPSBf X2xlbikKICAgICAgICAgICAgX190ZXN0dmFsaWQgPSBmYWxzZTsKICAgICAgICB9CgoKICAgICAg d2hpbGUgKF9fdGVtcF91bml0c1swXSA9PSBfX2N0eXBlLndpZGVuKCcwJykpCiAgICAgICAgX190 ZW1wX3VuaXRzLmVyYXNlKF9fdGVtcF91bml0cy5iZWdpbigpKTsKCiAgICAgIGlmIChfX3NpZ24u c2l6ZSgpICYmIF9fc2lnbiA9PSBfX25lZ19zaWduKQogICAgICAgIF9fdGVtcF91bml0cy5pbnNl cnQoX190ZW1wX3VuaXRzLmJlZ2luKCksIF9fY3R5cGUud2lkZW4oJy0nKSk7CgoKICAgICAgaWYg KF9fZ3JvdXBpbmcuc2l6ZSgpICYmIF9fZ3JvdXBpbmdfdG1wLnNpemUoKSkKICAgICAgICB7CiAg ICAgICAgICBpZiAoIV9fdmVyaWZ5X2dyb3VwaW5nKF9fZ3JvdXBpbmcsIF9fZ3JvdXBpbmdfdG1w KSkKICAgICAgICAgICAgX190ZXN0dmFsaWQgPSBmYWxzZTsKICAgICAgICB9CgoKICAgICAgaWYg KF9fYyA9PSBfX2VvZikKICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZW9mYml0OwoKCiAgICAg IGlmICghX190ZXN0dmFsaWQgfHwgIV9fdGVtcF91bml0cy5zaXplKCkpCiAgICAgICAgX19lcnIg fD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CiAgICAgIGVsc2UKCiAgICAgICAgX190ZW1wX3VuaXRzLnN3 YXAoX191bml0cyk7CgogICAgICByZXR1cm4gX19iZWc7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVu YW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBfT3V0SXRlcgogICAgbW9uZXlfcHV0 PF9DaGFyVCwgX091dEl0ZXI+OjoKICAgIGRvX3B1dChpdGVyX3R5cGUgX19zLCBib29sIF9faW50 bCwgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsCiAgICAgICAgICAgbG9uZyBkb3Vi bGUgX191bml0cykgY29uc3QKICAgIHsKICAgICAgY29uc3QgbG9jYWxlIF9fbG9jID0gX19pby5n ZXRsb2MoKTsKICAgICAgY29uc3QgY3R5cGU8X0NoYXJUPiYgX19jdHlwZSA9IHVzZV9mYWNldDxj dHlwZTxfQ2hhclQ+ID4oX19sb2MpOwoKCiAgICAgIGludCBfX2NzX3NpemUgPSA2NDsKICAgICAg Y2hhciogX19jcyA9IHN0YXRpY19jYXN0PGNoYXIqPihfX2J1aWx0aW5fYWxsb2NhKF9fY3Nfc2l6 ZSkpOwogICAgICBpbnQgX19sZW4gPSBfX2NvbnZlcnRfZnJvbV92KF9fY3MsIF9fY3Nfc2l6ZSwg IiUuMDFMZiIsIF9fdW5pdHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1Nf Y19sb2NhbGUpOwoKICAgICAgaWYgKF9fbGVuID49IF9fY3Nfc2l6ZSkKICAgICAgICB7CiAgICAg ICAgICBfX2NzX3NpemUgPSBfX2xlbiArIDE7CiAgICAgICAgICBfX2NzID0gc3RhdGljX2Nhc3Q8 Y2hhcio+KF9fYnVpbHRpbl9hbGxvY2EoX19jc19zaXplKSk7CiAgICAgICAgICBfX2xlbiA9IF9f Y29udmVydF9mcm9tX3YoX19jcywgX19jc19zaXplLCAiJS4wMUxmIiwgX191bml0cywKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfU19jX2xvY2FsZSk7CiAgICAgICAgfQoKCgoK CgoKICAgICAgX0NoYXJUKiBfX3dzID0gc3RhdGljX2Nhc3Q8X0NoYXJUKj4oX19idWlsdGluX2Fs bG9jYShzaXplb2YoX0NoYXJUKSAqIF9fY3Nfc2l6ZSkpOwogICAgICBfX2N0eXBlLndpZGVuKF9f Y3MsIF9fY3MgKyBfX2xlbiwgX193cyk7CiAgICAgIHN0cmluZ190eXBlIF9fZGlnaXRzKF9fd3Mp OwogICAgICByZXR1cm4gdGhpcy0+ZG9fcHV0KF9fcywgX19pbnRsLCBfX2lvLCBfX2ZpbGwsIF9f ZGlnaXRzKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0 SXRlcj4KICAgIF9PdXRJdGVyCiAgICBtb25leV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OgogICAg ZG9fcHV0KGl0ZXJfdHlwZSBfX3MsIGJvb2wgX19pbnRsLCBpb3NfYmFzZSYgX19pbywgY2hhcl90 eXBlIF9fZmlsbCwKICAgICAgICAgICBjb25zdCBzdHJpbmdfdHlwZSYgX19kaWdpdHMpIGNvbnN0 CiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgc3RyaW5nX3R5cGU6OnNpemVfdHlwZSBzaXpl X3R5cGU7CiAgICAgIHR5cGVkZWYgbW9uZXlfYmFzZTo6cGFydCBwYXJ0OwoKICAgICAgY29uc3Qg bG9jYWxlIF9fbG9jID0gX19pby5nZXRsb2MoKTsKICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fd2lk dGggPSBzdGF0aWNfY2FzdDxzaXplX3R5cGU+KF9faW8ud2lkdGgoKSk7CgoKICAgICAgdHlwZWRl ZiBtb25leXB1bmN0PF9DaGFyVCwgdHJ1ZT4gX19tb25leV90cnVlOwogICAgICB0eXBlZGVmIG1v bmV5cHVuY3Q8X0NoYXJULCBmYWxzZT4gX19tb25leV9mYWxzZTsKICAgICAgY29uc3QgX19tb25l eV90cnVlJiBfX21wdCA9IHVzZV9mYWNldDxfX21vbmV5X3RydWU+KF9fbG9jKTsKICAgICAgY29u c3QgX19tb25leV9mYWxzZSYgX19tcGYgPSB1c2VfZmFjZXQ8X19tb25leV9mYWxzZT4oX19sb2Mp OwogICAgICBjb25zdCBjdHlwZTxfQ2hhclQ+JiBfX2N0eXBlID0gdXNlX2ZhY2V0PGN0eXBlPF9D aGFyVD4gPihfX2xvYyk7CgoKCiAgICAgIGNvbnN0IGNoYXJfdHlwZSogX19iZWcgPSBfX2RpZ2l0 cy5kYXRhKCk7CiAgICAgIGNvbnN0IGNoYXJfdHlwZSogX19lbmQgPSBfX2JlZyArIF9fZGlnaXRz LnNpemUoKTsKICAgICAgbW9uZXlfYmFzZTo6cGF0dGVybiBfX3A7CiAgICAgIHN0cmluZ190eXBl IF9fc2lnbjsKICAgICAgaWYgKCpfX2JlZyAhPSBfX2N0eXBlLndpZGVuKCctJykpCiAgICAgICAg ewogICAgICAgICAgX19wID0gX19pbnRsID8gX19tcHQucG9zX2Zvcm1hdCgpIDogX19tcGYucG9z X2Zvcm1hdCgpOwogICAgICAgICAgX19zaWduID1fX2ludGwgPyBfX21wdC5wb3NpdGl2ZV9zaWdu KCkgOiBfX21wZi5wb3NpdGl2ZV9zaWduKCk7CiAgICAgICAgfQogICAgICBlbHNlCiAgICAgICAg ewogICAgICAgICAgX19wID0gX19pbnRsID8gX19tcHQubmVnX2Zvcm1hdCgpIDogX19tcGYubmVn X2Zvcm1hdCgpOwogICAgICAgICAgX19zaWduID1fX2ludGwgPyBfX21wdC5uZWdhdGl2ZV9zaWdu KCkgOiBfX21wZi5uZWdhdGl2ZV9zaWduKCk7CiAgICAgICAgICArK19fYmVnOwogICAgICAgIH0K CgogICAgICBfX2VuZCA9IF9fY3R5cGUuc2Nhbl9ub3QoY3R5cGVfYmFzZTo6ZGlnaXQsIF9fYmVn LCBfX2VuZCk7CiAgICAgIGlmIChfX2JlZyAhPSBfX2VuZCkKICAgICAgICB7CgoKCiAgICAgICAg ICBzdHJpbmdfdHlwZSBfX3JlczsKICAgICAgICAgIHN0cmluZ190eXBlIF9fdmFsdWU7CiAgICAg ICAgICBjb25zdCBzdHJpbmdfdHlwZSBfX3N5bWJvbCA9IF9faW50bCA/IF9fbXB0LmN1cnJfc3lt Ym9sKCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogX19t cGYuY3Vycl9zeW1ib2woKTsKCgogICAgICAgICAgY29uc3QgaW50IF9fZnJhYyA9IF9faW50bCA/ IF9fbXB0LmZyYWNfZGlnaXRzKCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg OiBfX21wZi5mcmFjX2RpZ2l0cygpOwogICAgICAgICAgaWYgKF9fZnJhYyA+IDApCiAgICAgICAg ICAgIHsKICAgICAgICAgICAgICBjb25zdCBjaGFyX3R5cGUgX19kID0gX19pbnRsID8gX19tcHQu ZGVjaW1hbF9wb2ludCgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICA6IF9fbXBmLmRlY2ltYWxfcG9pbnQoKTsKICAgICAgICAgICAgICBpZiAoX19lbmQgLSBfX2Jl ZyA+PSBfX2ZyYWMpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIF9fdmFsdWUg PSBzdHJpbmdfdHlwZShfX2VuZCAtIF9fZnJhYywgX19lbmQpOwogICAgICAgICAgICAgICAgICBf X3ZhbHVlLmluc2VydChfX3ZhbHVlLmJlZ2luKCksIF9fZCk7CiAgICAgICAgICAgICAgICAgIF9f ZW5kIC09IF9fZnJhYzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBlbHNlCiAgICAg ICAgICAgICAgICB7CgogICAgICAgICAgICAgICAgICBfX3ZhbHVlID0gc3RyaW5nX3R5cGUoX19i ZWcsIF9fZW5kKTsKICAgICAgICAgICAgICAgICAgaW50IF9fcGFkZGVjID0gX19mcmFjIC0gKF9f ZW5kIC0gX19iZWcpOwogICAgICAgICAgICAgICAgICBjaGFyX3R5cGUgX196ZXJvID0gX19jdHlw ZS53aWRlbignMCcpOwogICAgICAgICAgICAgICAgICBfX3ZhbHVlLmluc2VydChfX3ZhbHVlLmJl Z2luKCksIF9fcGFkZGVjLCBfX3plcm8pOwogICAgICAgICAgICAgICAgICBfX3ZhbHVlLmluc2Vy dChfX3ZhbHVlLmJlZ2luKCksIF9fZCk7CiAgICAgICAgICAgICAgICAgIF9fYmVnID0gX19lbmQ7 CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCgoKICAgICAgICAgIGlmIChfX2JlZyAh PSBfX2VuZCkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGNvbnN0IHN0cmluZyBfX2dyb3Vw aW5nID0gX19pbnRsID8gX19tcHQuZ3JvdXBpbmcoKQogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIDogX19tcGYuZ3JvdXBpbmcoKTsKICAgICAgICAgICAgICBp ZiAoX19ncm91cGluZy5zaXplKCkpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAg IGNvbnN0IGNoYXJfdHlwZSBfX3NlcCA9IF9faW50bCA/IF9fbXB0LnRob3VzYW5kc19zZXAoKQog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBfX21wZi50 aG91c2FuZHNfc2VwKCk7CiAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIF9fZ2JlZyA9IF9f Z3JvdXBpbmcuY19zdHIoKTsKICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogX19nZW5kID0g X19nYmVnICsgX19ncm91cGluZy5zaXplKCk7CiAgICAgICAgICAgICAgICAgIGNvbnN0IGludCBf X24gPSAoX19lbmQgLSBfX2JlZykgKiAyOwogICAgICAgICAgICAgICAgICBfQ2hhclQqIF9fd3My ID0KICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxfQ2hhclQqPihfX2J1aWx0aW5fYWxs b2NhKHNpemVvZihfQ2hhclQpICogX19uKSk7CiAgICAgICAgICAgICAgICAgIF9DaGFyVCogX193 c19lbmQgPSBfX2FkZF9ncm91cGluZyhfX3dzMiwgX19zZXAsIF9fZ2JlZywKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZ2VuZCwgX19iZWcsIF9f ZW5kKTsKICAgICAgICAgICAgICAgICAgX192YWx1ZS5pbnNlcnQoMCwgX193czIsIF9fd3NfZW5k IC0gX193czIpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGVsc2UKICAgICAgICAg ICAgICAgIF9fdmFsdWUuaW5zZXJ0KDAsIHN0cmluZ190eXBlKF9fYmVnLCBfX2VuZCkpOwogICAg ICAgICAgICB9CgoKICAgICAgICAgIGlvc19iYXNlOjpmbXRmbGFncyBfX2YgPSBfX2lvLmZsYWdz KCkgJiBpb3NfYmFzZTo6YWRqdXN0ZmllbGQ7CiAgICAgICAgICBzaXplX3R5cGUgX19sZW4gPSBf X3ZhbHVlLnNpemUoKSArIF9fc2lnbi5zaXplKCk7CiAgICAgICAgICBfX2xlbiArPSAoX19pby5m bGFncygpICYgaW9zX2Jhc2U6OnNob3diYXNlKSA/IF9fc3ltYm9sLnNpemUoKSA6IDA7CiAgICAg ICAgICBib29sIF9fdGVzdGlwYWQgPSBfX2YgPT0gaW9zX2Jhc2U6OmludGVybmFsICYmIF9fbGVu IDwgX193aWR0aDsKCgogICAgICAgICAgZm9yIChpbnQgX19pID0gMDsgX19pIDwgNDsgKytfX2kp CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBwYXJ0IF9fd2hpY2ggPSBzdGF0aWNfY2FzdDxw YXJ0PihfX3AuZmllbGRbX19pXSk7CiAgICAgICAgICAgICAgc3dpdGNoIChfX3doaWNoKQogICAg ICAgICAgICAgICAgewogICAgICAgICAgICAgICAgY2FzZSBtb25leV9iYXNlOjpzeW1ib2w6CiAg ICAgICAgICAgICAgICAgIGlmIChfX2lvLmZsYWdzKCkgJiBpb3NfYmFzZTo6c2hvd2Jhc2UpCiAg ICAgICAgICAgICAgICAgICAgX19yZXMgKz0gX19zeW1ib2w7CiAgICAgICAgICAgICAgICAgIGJy ZWFrOwogICAgICAgICAgICAgICAgY2FzZSBtb25leV9iYXNlOjpzaWduOgoKCgogICAgICAgICAg ICAgICAgICBpZiAoX19zaWduLnNpemUoKSkKICAgICAgICAgICAgICAgICAgICBfX3JlcyArPSBf X3NpZ25bMF07CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSBt b25leV9iYXNlOjp2YWx1ZToKICAgICAgICAgICAgICAgICAgX19yZXMgKz0gX192YWx1ZTsKICAg ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlIG1vbmV5X2Jhc2U6OnNw YWNlOgoKCgogICAgICAgICAgICAgICAgICBpZiAoX190ZXN0aXBhZCkKICAgICAgICAgICAgICAg ICAgICBfX3JlcyArPSBzdHJpbmdfdHlwZShfX3dpZHRoIC0gX19sZW4sIF9fZmlsbCk7CiAgICAg ICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICBfX3JlcyArPSBfX2N0eXBlLndp ZGVuKF9fZmlsbCk7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2Fz ZSBtb25leV9iYXNlOjpub25lOgogICAgICAgICAgICAgICAgICBpZiAoX190ZXN0aXBhZCkKICAg ICAgICAgICAgICAgICAgICBfX3JlcyArPSBzdHJpbmdfdHlwZShfX3dpZHRoIC0gX19sZW4sIF9f ZmlsbCk7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAg ICAgICB9CgoKICAgICAgICAgIGlmIChfX3NpZ24uc2l6ZSgpID4gMSkKICAgICAgICAgICAgX19y ZXMgKz0gc3RyaW5nX3R5cGUoX19zaWduLmJlZ2luKCkgKyAxLCBfX3NpZ24uZW5kKCkpOwoKCiAg ICAgICAgICBfX2xlbiA9IF9fcmVzLnNpemUoKTsKICAgICAgICAgIGlmIChfX3dpZHRoID4gX19s ZW4pCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpZiAoX19mID09IGlvc19iYXNlOjpsZWZ0 KQoKICAgICAgICAgICAgICAgIF9fcmVzLmFwcGVuZChfX3dpZHRoIC0gX19sZW4sIF9fZmlsbCk7 CiAgICAgICAgICAgICAgZWxzZQoKICAgICAgICAgICAgICAgIF9fcmVzLmluc2VydCgwLCBzdHJp bmdfdHlwZShfX3dpZHRoIC0gX19sZW4sIF9fZmlsbCkpOwogICAgICAgICAgICAgIF9fbGVuID0g X193aWR0aDsKICAgICAgICAgICAgfQoKCiAgICAgICAgICBmb3IgKHNpemVfdHlwZSBfX2ogPSAw OyBfX2ogPCBfX2xlbjsgKytfX2osICsrX19zKQogICAgICAgICAgICAqX19zID0gX19yZXNbX19q XTsKICAgICAgICB9CiAgICAgIF9faW8ud2lkdGgoMCk7CiAgICAgIHJldHVybiBfX3M7CiAgICB9 CgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICB0 aW1lX2Jhc2U6OmRhdGVvcmRlcgogICAgdGltZV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6ZG9fZGF0 ZV9vcmRlcigpIGNvbnN0CiAgICB7IHJldHVybiB0aW1lX2Jhc2U6Om5vX29yZGVyOyB9CgogIHRl bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIHZvaWQKICAgIHRp bWVfZ2V0PF9DaGFyVCwgX0luSXRlcj46OgogICAgX01fZXh0cmFjdF92aWFfZm9ybWF0KGl0ZXJf dHlwZSYgX19iZWcsIGl0ZXJfdHlwZSYgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAg ICAgICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdG0qIF9fdG0sCiAgICAg ICAgICAgICAgICAgICAgICAgICAgY29uc3QgX0NoYXJUKiBfX2Zvcm1hdCkgY29uc3QKICAgIHsK ICAgICAgbG9jYWxlIF9fbG9jID0gX19pby5nZXRsb2MoKTsKICAgICAgX190aW1lcHVuY3Q8X0No YXJUPiBjb25zdCYgX190cCA9IHVzZV9mYWNldDxfX3RpbWVwdW5jdDxfQ2hhclQ+ID4oX19sb2Mp OwogICAgICBjb25zdCBjdHlwZTxfQ2hhclQ+JiBfX2N0eXBlID0gdXNlX2ZhY2V0PGN0eXBlPF9D aGFyVD4gPihfX2xvYyk7CiAgICAgIHNpemVfdCBfX2xlbiA9IGNoYXJfdHJhaXRzPF9DaGFyVD46 Omxlbmd0aChfX2Zvcm1hdCk7CgogICAgICBmb3IgKHNpemVfdCBfX2kgPSAwOyBfX2JlZyAhPSBf X2VuZCAmJiBfX2kgPCBfX2xlbiAmJiAhX19lcnI7ICsrX19pKQogICAgICAgIHsKICAgICAgICAg IGNoYXIgX19jID0gX19mb3JtYXRbX19pXTsKICAgICAgICAgIGlmIChfX2MgPT0gJyUnKQogICAg ICAgICAgICB7CgogICAgICAgICAgICAgIF9fYyA9IF9fZm9ybWF0WysrX19pXTsKICAgICAgICAg ICAgICBjaGFyIF9fbW9kID0gMDsKICAgICAgICAgICAgICBpbnQgX19tZW0gPSAwOwogICAgICAg ICAgICAgIGlmIChfX2MgPT0gJ0UnIHx8IF9fYyA9PSAnTycpCiAgICAgICAgICAgICAgICB7CiAg ICAgICAgICAgICAgICAgIF9fbW9kID0gX19jOwogICAgICAgICAgICAgICAgICBfX2MgPSBfX2Zv cm1hdFsrK19faV07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgc3dpdGNoIChfX2Mp CiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIF9fY3M7CiAg ICAgICAgICAgICAgICAgIF9DaGFyVCBfX3djc1sxMF07CiAgICAgICAgICAgICAgICBjYXNlICdh JzoKCiAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXJfdHlwZSogX19kYXlzMVs3XTsKICAgICAg ICAgICAgICAgICAgX190cC5fTV9kYXlzX2FiYnJldmlhdGVkKF9fZGF5czEpOwogICAgICAgICAg ICAgICAgICBfTV9leHRyYWN0X25hbWUoX19iZWcsIF9fZW5kLCBfX3RtLT50bV93ZGF5LCBfX2Rh eXMxLCA3LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19lcnIpOwogICAgICAg ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ0EnOgoKICAgICAgICAgICAg ICAgICAgY29uc3QgY2hhcl90eXBlKiBfX2RheXMyWzddOwogICAgICAgICAgICAgICAgICBfX3Rw Ll9NX2RheXMoX19kYXlzMik7CiAgICAgICAgICAgICAgICAgIF9NX2V4dHJhY3RfbmFtZShfX2Jl ZywgX19lbmQsIF9fdG0tPnRtX3dkYXksIF9fZGF5czIsIDcsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBfX2Vycik7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg ICAgICAgY2FzZSAnaCc6CiAgICAgICAgICAgICAgICBjYXNlICdiJzoKCiAgICAgICAgICAgICAg ICAgIGNvbnN0IGNoYXJfdHlwZSogX19tb250aHMxWzEyXTsKICAgICAgICAgICAgICAgICAgX190 cC5fTV9tb250aHNfYWJicmV2aWF0ZWQoX19tb250aHMxKTsKICAgICAgICAgICAgICAgICAgX01f ZXh0cmFjdF9uYW1lKF9fYmVnLCBfX2VuZCwgX190bS0+dG1fbW9uLCBfX21vbnRoczEsIDEyLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19lcnIpOwogICAgICAgICAgICAgICAg ICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ0InOgoKICAgICAgICAgICAgICAgICAgY29u c3QgY2hhcl90eXBlKiBfX21vbnRoczJbMTJdOwogICAgICAgICAgICAgICAgICBfX3RwLl9NX21v bnRocyhfX21vbnRoczIpOwogICAgICAgICAgICAgICAgICBfTV9leHRyYWN0X25hbWUoX19iZWcs IF9fZW5kLCBfX3RtLT50bV9tb24sIF9fbW9udGhzMiwgMTIsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBfX2Vycik7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg ICAgICAgY2FzZSAnYyc6CgogICAgICAgICAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9fZHRb Ml07CiAgICAgICAgICAgICAgICAgIF9fdHAuX01fZGF0ZV90aW1lX2Zvcm1hdHMoX19kdCk7CiAg ICAgICAgICAgICAgICAgIF9NX2V4dHJhY3RfdmlhX2Zvcm1hdChfX2JlZywgX19lbmQsIF9faW8s IF9fZXJyLCBfX3RtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19k dFswXSk7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAnZCc6 CgogICAgICAgICAgICAgICAgICBfTV9leHRyYWN0X251bShfX2JlZywgX19lbmQsIF9fdG0tPnRt X21kYXksIDEsIDMxLCAyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2N0eXBl LCBfX2Vycik7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAn RCc6CgogICAgICAgICAgICAgICAgICBfX2NzID0gIiVtLyVkLyV5IjsKICAgICAgICAgICAgICAg ICAgX19jdHlwZS53aWRlbihfX2NzLCBfX2NzICsgOSwgX193Y3MpOwogICAgICAgICAgICAgICAg ICBfTV9leHRyYWN0X3ZpYV9mb3JtYXQoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX190bSwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fd2NzKTsKICAgICAgICAg ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICdIJzoKCiAgICAgICAgICAgICAg ICAgIF9NX2V4dHJhY3RfbnVtKF9fYmVnLCBfX2VuZCwgX190bS0+dG1faG91ciwgMCwgMjMsIDIs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY3R5cGUsIF9fZXJyKTsKICAgICAg ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICdJJzoKCiAgICAgICAgICAg ICAgICAgIF9NX2V4dHJhY3RfbnVtKF9fYmVnLCBfX2VuZCwgX190bS0+dG1faG91ciwgMSwgMTIs IDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY3R5cGUsIF9fZXJyKTsKICAg ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICdtJzoKCiAgICAgICAg ICAgICAgICAgIF9NX2V4dHJhY3RfbnVtKF9fYmVnLCBfX2VuZCwgX19tZW0sIDEsIDEyLCAyLCBf X2N0eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2Vycik7CiAgICAgICAg ICAgICAgICAgIGlmICghX19lcnIpCiAgICAgICAgICAgICAgICAgICAgX190bS0+dG1fbW9uID0g X19tZW0gLSAxOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2Ug J00nOgoKICAgICAgICAgICAgICAgICAgX01fZXh0cmFjdF9udW0oX19iZWcsIF9fZW5kLCBfX3Rt LT50bV9taW4sIDAsIDU5LCAyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2N0 eXBlLCBfX2Vycik7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2Fz ZSAnbic6CiAgICAgICAgICAgICAgICAgIGlmIChfX2N0eXBlLm5hcnJvdygqX19iZWcsIDApID09 ICdcbicpCiAgICAgICAgICAgICAgICAgICAgKytfX2JlZzsKICAgICAgICAgICAgICAgICAgZWxz ZQogICAgICAgICAgICAgICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwogICAgICAg ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ1InOgoKICAgICAgICAgICAg ICAgICAgX19jcyA9ICIlSDolTSI7CiAgICAgICAgICAgICAgICAgIF9fY3R5cGUud2lkZW4oX19j cywgX19jcyArIDYsIF9fd2NzKTsKICAgICAgICAgICAgICAgICAgX01fZXh0cmFjdF92aWFfZm9y bWF0KF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9fdG0sCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBfX3djcyk7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAg ICAgICAgICAgICAgY2FzZSAnUyc6CgogICAgICAgICAgICAgICAgICBfTV9leHRyYWN0X251bShf X2JlZywgX19lbmQsIF9fdG0tPnRtX3NlYywgMCwgNTksIDIsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIF9fY3R5cGUsIF9fZXJyKTsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAg ICAgICAgICAgICAgICBjYXNlICd0JzoKICAgICAgICAgICAgICAgICAgaWYgKF9fY3R5cGUubmFy cm93KCpfX2JlZywgMCkgPT0gJ1x0JykKICAgICAgICAgICAgICAgICAgICArK19fYmVnOwogICAg ICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFp bGJpdDsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICdUJzoK CiAgICAgICAgICAgICAgICAgIF9fY3MgPSAiJUg6JU06JVMiOwogICAgICAgICAgICAgICAgICBf X2N0eXBlLndpZGVuKF9fY3MsIF9fY3MgKyA5LCBfX3djcyk7CiAgICAgICAgICAgICAgICAgIF9N X2V4dHJhY3RfdmlhX2Zvcm1hdChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3RtLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX193Y3MpOwogICAgICAgICAgICAg ICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ3gnOgoKICAgICAgICAgICAgICAgICAg Y29uc3QgY2hhcl90eXBlKiBfX2RhdGVzWzJdOwogICAgICAgICAgICAgICAgICBfX3RwLl9NX2Rh dGVfZm9ybWF0cyhfX2RhdGVzKTsKICAgICAgICAgICAgICAgICAgX01fZXh0cmFjdF92aWFfZm9y bWF0KF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9fdG0sCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBfX2RhdGVzWzBdKTsKICAgICAgICAgICAgICAgICAgYnJlYWs7 CiAgICAgICAgICAgICAgICBjYXNlICdYJzoKCiAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXJf dHlwZSogX190aW1lc1syXTsKICAgICAgICAgICAgICAgICAgX190cC5fTV90aW1lX2Zvcm1hdHMo X190aW1lcyk7CiAgICAgICAgICAgICAgICAgIF9NX2V4dHJhY3RfdmlhX2Zvcm1hdChfX2JlZywg X19lbmQsIF9faW8sIF9fZXJyLCBfX3RtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgX190aW1lc1swXSk7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg ICAgICAgY2FzZSAneSc6CgogICAgICAgICAgICAgICAgICBfTV9leHRyYWN0X251bShfX2JlZywg X19lbmQsIF9fdG0tPnRtX3llYXIsIDAsIDk5LCAyLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBfX2N0eXBlLCBfX2Vycik7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg ICAgICAgICAgY2FzZSAnWSc6CgogICAgICAgICAgICAgICAgICBfTV9leHRyYWN0X251bShfX2Jl ZywgX19lbmQsIF9fbWVtLCAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1l cmljX2xpbWl0czxpbnQ+OjptYXgoKSwgNCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgX19jdHlwZSwgX19lcnIpOwogICAgICAgICAgICAgICAgICBpZiAoIV9fZXJyKQogICAgICAg ICAgICAgICAgICAgIF9fdG0tPnRtX3llYXIgPSBfX21lbSAtIDE5MDA7CiAgICAgICAgICAgICAg ICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAnWic6CgogICAgICAgICAgICAgICAgICBp ZiAoX19jdHlwZS5pcyhjdHlwZV9iYXNlOjp1cHBlciwgKl9fYmVnKSkKICAgICAgICAgICAgICAg ICAgICB7CiAgICAgICAgICAgICAgICAgICAgICBpbnQgX190bXA7CiAgICAgICAgICAgICAgICAg ICAgICBfTV9leHRyYWN0X25hbWUoX19iZWcsIF9fZW5kLCBfX3RtcCwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBfX3RpbWVwdW5jdDxfQ2hhclQ+OjpfU190aW1lem9uZXMs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQsIF9fZXJyKTsKCgogICAg ICAgICAgICAgICAgICAgICAgY2hhcl90eXBlIF9fYyA9ICpfX2JlZzsKICAgICAgICAgICAgICAg ICAgICAgIGlmICghX19lcnIgJiYgX190bXAgPT0gMAogICAgICAgICAgICAgICAgICAgICAgICAg ICYmIChfX2MgPT0gX19jdHlwZS53aWRlbignLScpCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHx8IF9fYyA9PSBfX2N0eXBlLndpZGVuKCcrJykpKQogICAgICAgICAgICAgICAgICAgICAg ICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgX01fZXh0cmFjdF9udW0oX19iZWcsIF9fZW5k LCBfX3RtcCwgMCwgMjMsIDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIF9fY3R5cGUsIF9fZXJyKTsKICAgICAgICAgICAgICAgICAgICAgICAgICBfTV9leHRyYWN0 X251bShfX2JlZywgX19lbmQsIF9fdG1wLCAwLCA1OSwgMiwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgX19jdHlwZSwgX19lcnIpOwogICAgICAgICAgICAgICAgICAg ICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAg ZWxzZQogICAgICAgICAgICAgICAgICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsK ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6 CgogICAgICAgICAgICAgICAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CiAgICAg ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGVsc2UKICAg ICAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgICAgIGlmIChfX2MgPT0gX19jdHlwZS5uYXJy b3coKl9fYmVnLCAwKSkKICAgICAgICAgICAgICAgICAgICArK19fYmVnOwogICAgICAgICAgICAg ICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7 CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf Q2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICB2b2lkCiAgICB0aW1lX2dldDxfQ2hhclQsIF9J bkl0ZXI+OjoKICAgIF9NX2V4dHJhY3RfbnVtKGl0ZXJfdHlwZSYgX19iZWcsIGl0ZXJfdHlwZSYg X19lbmQsIGludCYgX19tZW1iZXIsCiAgICAgICAgICAgICAgICAgICBpbnQgX19taW4sIGludCBf X21heCwgc2l6ZV90IF9fbGVuLAogICAgICAgICAgICAgICAgICAgY29uc3QgY3R5cGU8X0NoYXJU PiYgX19jdHlwZSwKICAgICAgICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2Vycikg Y29uc3QKICAgIHsKICAgICAgc2l6ZV90IF9faSA9IDA7CiAgICAgIHN0cmluZyBfX2RpZ2l0czsK ICAgICAgYm9vbCBfX3Rlc3R2YWxpZCA9IHRydWU7CiAgICAgIGNoYXJfdHlwZSBfX2MgPSAqX19i ZWc7CiAgICAgIHdoaWxlIChfX2JlZyAhPSBfX2VuZCAmJiBfX2kgPCBfX2xlbgogICAgICAgICAg ICAgJiYgX19jdHlwZS5pcyhjdHlwZV9iYXNlOjpkaWdpdCwgX19jKSkKICAgICAgICB7CiAgICAg ICAgICBfX2RpZ2l0cyArPSBfX2N0eXBlLm5hcnJvdyhfX2MsIDApOwogICAgICAgICAgX19jID0g KigrK19fYmVnKTsKICAgICAgICAgICsrX19pOwogICAgICAgIH0KICAgICAgaWYgKF9faSA9PSBf X2xlbikKICAgICAgICB7CiAgICAgICAgICBpbnQgX192YWx1ZSA9IGF0b2koX19kaWdpdHMuY19z dHIoKSk7CiAgICAgICAgICBpZiAoX19taW4gPD0gX192YWx1ZSAmJiBfX3ZhbHVlIDw9IF9fbWF4 KQogICAgICAgICAgICBfX21lbWJlciA9IF9fdmFsdWU7CiAgICAgICAgICBlbHNlCiAgICAgICAg ICAgIF9fdGVzdHZhbGlkID0gZmFsc2U7CiAgICAgICAgfQogICAgICBlbHNlCiAgICAgICAgX190 ZXN0dmFsaWQgPSBmYWxzZTsKICAgICAgaWYgKCFfX3Rlc3R2YWxpZCkKICAgICAgICBfX2VyciB8 PSBpb3NfYmFzZTo6ZmFpbGJpdDsKICAgIH0KCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs IHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICB2b2lkCiAgICB0aW1lX2dldDxfQ2hhclQsIF9Jbkl0ZXI+ OjoKICAgIF9NX2V4dHJhY3RfbmFtZShpdGVyX3R5cGUmIF9fYmVnLCBpdGVyX3R5cGUmIF9fZW5k LCBpbnQmIF9fbWVtYmVyLAogICAgICAgICAgICAgICAgICAgIGNvbnN0IF9DaGFyVCoqIF9fbmFt ZXMsIHNpemVfdCBfX2luZGV4bGVuLAogICAgICAgICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0 YXRlJiBfX2VycikgY29uc3QKICAgIHsKICAgICAgdHlwZWRlZiBjaGFyX3RyYWl0czxfQ2hhclQ+ IF9fdHJhaXRzX3R5cGU7CiAgICAgIGludCogX19tYXRjaGVzID0gc3RhdGljX2Nhc3Q8aW50Kj4o X19idWlsdGluX2FsbG9jYShzaXplb2YoaW50KSAqIF9faW5kZXhsZW4pKTsKICAgICAgc2l6ZV90 IF9fbm1hdGNoZXMgPSAwOwogICAgICBzaXplX3QgX19wb3MgPSAwOwogICAgICBib29sIF9fdGVz dHZhbGlkID0gdHJ1ZTsKICAgICAgY29uc3QgY2hhcl90eXBlKiBfX25hbWU7CgogICAgICBjaGFy X3R5cGUgX19jID0gKl9fYmVnOwoKICAgICAgZm9yIChzaXplX3QgX19pMSA9IDA7IF9faTEgPCBf X2luZGV4bGVuOyArK19faTEpCiAgICAgICAgaWYgKF9fYyA9PSBfX25hbWVzW19faTFdWzBdKQog ICAgICAgICAgX19tYXRjaGVzW19fbm1hdGNoZXMrK10gPSBfX2kxOwoKICAgICAgd2hpbGUoX19u bWF0Y2hlcyA+IDEpCiAgICAgICAgewoKICAgICAgICAgIHNpemVfdCBfX21pbmxlbiA9IDEwOwog ICAgICAgICAgZm9yIChzaXplX3QgX19pMiA9IDA7IF9faTIgPCBfX25tYXRjaGVzOyArK19faTIp CiAgICAgICAgICAgIF9fbWlubGVuID0gbWluKF9fbWlubGVuLAogICAgICAgICAgICAgICAgICAg ICAgICAgICBfX3RyYWl0c190eXBlOjpsZW5ndGgoX19uYW1lc1tfX21hdGNoZXNbX19pMl1dKSk7 CgogICAgICAgICAgaWYgKF9fcG9zIDwgX19taW5sZW4gJiYgX19iZWcgIT0gX19lbmQpCiAgICAg ICAgICAgIHsKICAgICAgICAgICAgICArK19fcG9zOwogICAgICAgICAgICAgIF9fYyA9ICooKytf X2JlZyk7CiAgICAgICAgICAgICAgZm9yIChzaXplX3QgX19pMyA9IDA7IF9faTMgPCBfX25tYXRj aGVzOyArK19faTMpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIF9fbmFtZSA9 IF9fbmFtZXNbX19tYXRjaGVzW19faTNdXTsKICAgICAgICAgICAgICAgICAgaWYgKF9fbmFtZVtf X3Bvc10gIT0gX19jKQogICAgICAgICAgICAgICAgICAgIF9fbWF0Y2hlc1tfX2kzXSA9IF9fbWF0 Y2hlc1stLV9fbm1hdGNoZXNdOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAg ICAgICBlbHNlCiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KCiAgICAgIGlmIChfX25tYXRj aGVzID09IDEpCiAgICAgICAgewoKICAgICAgICAgIF9fbmFtZSA9IF9fbmFtZXNbX19tYXRjaGVz WzBdXTsKICAgICAgICAgIGNvbnN0IHNpemVfdCBfX2xlbiA9IF9fdHJhaXRzX3R5cGU6Omxlbmd0 aChfX25hbWUpOwogICAgICAgICAgd2hpbGUgKF9fcG9zIDwgX19sZW4gJiYgX19iZWcgIT0gX19l bmQgJiYgX19uYW1lW19fcG9zXSA9PSAqX19iZWcpCiAgICAgICAgICAgICsrX19iZWcsICsrX19w b3M7CgogICAgICAgICAgaWYgKF9fbGVuID09IF9fcG9zKQogICAgICAgICAgICBfX21lbWJlciA9 IF9fbWF0Y2hlc1swXTsKICAgICAgICAgIGVsc2UKICAgICAgICAgICAgX190ZXN0dmFsaWQgPSBm YWxzZTsKICAgICAgICB9CiAgICAgIGVsc2UKICAgICAgICBfX3Rlc3R2YWxpZCA9IGZhbHNlOwog ICAgICBpZiAoIV9fdGVzdHZhbGlkKQogICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0 OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAg ICBfSW5JdGVyCiAgICB0aW1lX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAgIGRvX2dldF90aW1l KGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAg ICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdG0qIF9fdG0pIGNvbnN0CiAgICB7 CiAgICAgIF9DaGFyVCBfX3djc1szXTsKICAgICAgY29uc3QgY2hhciogX19jcyA9ICIlWCI7CiAg ICAgIGxvY2FsZSBfX2xvYyA9IF9faW8uZ2V0bG9jKCk7CiAgICAgIGN0eXBlPF9DaGFyVD4gY29u c3QmIF9fY3R5cGUgPSB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKTsKICAgICAgX19j dHlwZS53aWRlbihfX2NzLCBfX2NzICsgMywgX193Y3MpOwogICAgICBfTV9leHRyYWN0X3ZpYV9m b3JtYXQoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX190bSwgX193Y3MpOwogICAgICBpZiAo X19iZWcgPT0gX19lbmQpCiAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmVvZmJpdDsKICAgICAg cmV0dXJuIF9fYmVnOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l IF9Jbkl0ZXI+CiAgICBfSW5JdGVyCiAgICB0aW1lX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAg IGRvX2dldF9kYXRlKGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYg X19pbywKICAgICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdG0qIF9fdG0p IGNvbnN0CiAgICB7CiAgICAgIF9DaGFyVCBfX3djc1szXTsKICAgICAgY29uc3QgY2hhciogX19j cyA9ICIleCI7CiAgICAgIGxvY2FsZSBfX2xvYyA9IF9faW8uZ2V0bG9jKCk7CiAgICAgIGN0eXBl PF9DaGFyVD4gY29uc3QmIF9fY3R5cGUgPSB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9j KTsKICAgICAgX19jdHlwZS53aWRlbihfX2NzLCBfX2NzICsgMywgX193Y3MpOwogICAgICBfTV9l eHRyYWN0X3ZpYV9mb3JtYXQoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX190bSwgX193Y3Mp OwogICAgICBpZiAoX19iZWcgPT0gX19lbmQpCiAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmVv ZmJpdDsKICAgICAgcmV0dXJuIF9fYmVnOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh clQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBfSW5JdGVyCiAgICB0aW1lX2dldDxfQ2hhclQsIF9J bkl0ZXI+OjoKICAgIGRvX2dldF93ZWVrZGF5KGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9f ZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRl JiBfX2VyciwgdG0qIF9fdG0pIGNvbnN0CiAgICB7CiAgICAgIHR5cGVkZWYgY2hhcl90cmFpdHM8 X0NoYXJUPiBfX3RyYWl0c190eXBlOwogICAgICBsb2NhbGUgX19sb2MgPSBfX2lvLmdldGxvYygp OwogICAgICBfX3RpbWVwdW5jdDxfQ2hhclQ+IGNvbnN0JiBfX3RwID0gdXNlX2ZhY2V0PF9fdGlt ZXB1bmN0PF9DaGFyVD4gPihfX2xvYyk7CiAgICAgIGNvbnN0IGNoYXJfdHlwZSogX19kYXlzWzdd OwogICAgICBfX3RwLl9NX2RheXNfYWJicmV2aWF0ZWQoX19kYXlzKTsKICAgICAgaW50IF9fdG1w d2RheTsKICAgICAgX01fZXh0cmFjdF9uYW1lKF9fYmVnLCBfX2VuZCwgX190bXB3ZGF5LCBfX2Rh eXMsIDcsIF9fZXJyKTsKCgoKCgoKCiAgICAgIGlmICghX19lcnIpCiAgICAgICAgewogICAgICAg ICAgc2l6ZV90IF9fcG9zID0gX190cmFpdHNfdHlwZTo6bGVuZ3RoKF9fZGF5c1tfX3RtcHdkYXld KTsKICAgICAgICAgIF9fdHAuX01fZGF5cyhfX2RheXMpOwogICAgICAgICAgY29uc3QgY2hhcl90 eXBlKiBfX25hbWUgPSBfX2RheXNbX190bXB3ZGF5XTsKICAgICAgICAgIGlmIChfX25hbWVbX19w b3NdID09ICpfX2JlZykKICAgICAgICAgICAgewoKICAgICAgICAgICAgICBjb25zdCBzaXplX3Qg X19sZW4gPSBfX3RyYWl0c190eXBlOjpsZW5ndGgoX19uYW1lKTsKICAgICAgICAgICAgICB3aGls ZSAoX19wb3MgPCBfX2xlbiAmJiBfX2JlZyAhPSBfX2VuZAogICAgICAgICAgICAgICAgICAgICAm JiBfX25hbWVbX19wb3NdID09ICpfX2JlZykKICAgICAgICAgICAgICAgICsrX19iZWcsICsrX19w b3M7CiAgICAgICAgICAgICAgaWYgKF9fbGVuICE9IF9fcG9zKQogICAgICAgICAgICAgICAgX19l cnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CiAgICAgICAgICAgIH0KICAgICAgICAgIGlmICghX19l cnIpCiAgICAgICAgICAgIF9fdG0tPnRtX3dkYXkgPSBfX3RtcHdkYXk7CiAgICAgICAgfQogICAg ICBpZiAoX19iZWcgPT0gX19lbmQpCiAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmVvZmJpdDsK ICAgICAgcmV0dXJuIF9fYmVnOwogICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0 eXBlbmFtZSBfSW5JdGVyPgogICAgX0luSXRlcgogICAgdGltZV9nZXQ8X0NoYXJULCBfSW5JdGVy Pjo6CiAgICBkb19nZXRfbW9udGhuYW1lKGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5k LAogICAgICAgICAgICAgICAgICAgICBpb3NfYmFzZSYgX19pbywgaW9zX2Jhc2U6Omlvc3RhdGUm IF9fZXJyLCB0bSogX190bSkgY29uc3QKICAgIHsKICAgICAgdHlwZWRlZiBjaGFyX3RyYWl0czxf Q2hhclQ+IF9fdHJhaXRzX3R5cGU7CiAgICAgIGxvY2FsZSBfX2xvYyA9IF9faW8uZ2V0bG9jKCk7 CiAgICAgIF9fdGltZXB1bmN0PF9DaGFyVD4gY29uc3QmIF9fdHAgPSB1c2VfZmFjZXQ8X190aW1l cHVuY3Q8X0NoYXJUPiA+KF9fbG9jKTsKICAgICAgY29uc3QgY2hhcl90eXBlKiBfX21vbnRoc1sx Ml07CiAgICAgIF9fdHAuX01fbW9udGhzX2FiYnJldmlhdGVkKF9fbW9udGhzKTsKICAgICAgaW50 IF9fdG1wbW9uOwogICAgICBfTV9leHRyYWN0X25hbWUoX19iZWcsIF9fZW5kLCBfX3RtcG1vbiwg X19tb250aHMsIDEyLCBfX2Vycik7CgoKCgoKCgogICAgICBpZiAoIV9fZXJyKQogICAgICAgIHsK ICAgICAgICAgIHNpemVfdCBfX3BvcyA9IF9fdHJhaXRzX3R5cGU6Omxlbmd0aChfX21vbnRoc1tf X3RtcG1vbl0pOwogICAgICAgICAgX190cC5fTV9tb250aHMoX19tb250aHMpOwogICAgICAgICAg Y29uc3QgY2hhcl90eXBlKiBfX25hbWUgPSBfX21vbnRoc1tfX3RtcG1vbl07CiAgICAgICAgICBp ZiAoX19uYW1lW19fcG9zXSA9PSAqX19iZWcpCiAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAg Y29uc3Qgc2l6ZV90IF9fbGVuID0gX190cmFpdHNfdHlwZTo6bGVuZ3RoKF9fbmFtZSk7CiAgICAg ICAgICAgICAgd2hpbGUgKF9fcG9zIDwgX19sZW4gJiYgX19iZWcgIT0gX19lbmQKICAgICAgICAg ICAgICAgICAgICAgJiYgX19uYW1lW19fcG9zXSA9PSAqX19iZWcpCiAgICAgICAgICAgICAgICAr K19fYmVnLCArK19fcG9zOwogICAgICAgICAgICAgIGlmIChfX2xlbiAhPSBfX3BvcykKICAgICAg ICAgICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwogICAgICAgICAgICB9CiAgICAg ICAgICBpZiAoIV9fZXJyKQogICAgICAgICAgICBfX3RtLT50bV9tb24gPSBfX3RtcG1vbjsKICAg ICAgICB9CgogICAgICBpZiAoX19iZWcgPT0gX19lbmQpCiAgICAgICAgX19lcnIgfD0gaW9zX2Jh c2U6OmVvZmJpdDsKICAgICAgcmV0dXJuIF9fYmVnOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBfSW5JdGVyCiAgICB0aW1lX2dldDxfQ2hh clQsIF9Jbkl0ZXI+OjoKICAgIGRvX2dldF95ZWFyKGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBl IF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRl JiBfX2VyciwgdG0qIF9fdG0pIGNvbnN0CiAgICB7CiAgICAgIGxvY2FsZSBfX2xvYyA9IF9faW8u Z2V0bG9jKCk7CiAgICAgIGNvbnN0IGN0eXBlPF9DaGFyVD4mIF9fY3R5cGUgPSB1c2VfZmFjZXQ8 Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKTsKCiAgICAgIGNoYXJfdHlwZSBfX2MgPSAqX19iZWc7CiAg ICAgIHNpemVfdCBfX2kgPSAwOwogICAgICBzdHJpbmcgX19kaWdpdHM7CiAgICAgIHdoaWxlIChf X2kgPCA0ICYmIF9fYmVnICE9IF9fZW5kICYmIF9fY3R5cGUuaXMoY3R5cGVfYmFzZTo6ZGlnaXQs IF9fYykpCiAgICAgICAgewogICAgICAgICAgX19kaWdpdHMgKz0gX19jdHlwZS5uYXJyb3coX19j LCAwKTsKICAgICAgICAgIF9fYyA9ICooKytfX2JlZyk7CiAgICAgICAgICArK19faTsKICAgICAg ICB9CiAgICAgIGlmIChfX2kgPT0gMiB8fCBfX2kgPT0gNCkKICAgICAgICB7CiAgICAgICAgICBs b25nIF9fbDsKICAgICAgICAgIF9fY29udmVydF90b192KF9fZGlnaXRzLmNfc3RyKCksIF9fbCwg X19lcnIsIF9TX2NfbG9jYWxlKTsKICAgICAgICAgIGlmICghKF9fZXJyICYgaW9zX2Jhc2U6OmZh aWxiaXQpICYmIF9fbCA8PSAyMTQ3NDgzNjQ3KQogICAgICAgICAgICB7CiAgICAgICAgICAgICAg X19sID0gX19pID09IDIgPyBfX2wgOiBfX2wgLSAxOTAwOwogICAgICAgICAgICAgIF9fdG0tPnRt X3llYXIgPSBzdGF0aWNfY2FzdDxpbnQ+KF9fbCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAg ICAgIGVsc2UKICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKICAgICAgaWYgKF9f YmVnID09IF9fZW5kKQogICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjplb2ZiaXQ7CiAgICAgIHJl dHVybiBfX2JlZzsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf T3V0SXRlcj4KICAgIF9PdXRJdGVyCiAgICB0aW1lX3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6CiAg ICBwdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSwgY29uc3QgdG0q IF9fdG0sCiAgICAgICAgY29uc3QgX0NoYXJUKiBfX2JlZywgY29uc3QgX0NoYXJUKiBfX2VuZCkg Y29uc3QKICAgIHsKICAgICAgbG9jYWxlIF9fbG9jID0gX19pby5nZXRsb2MoKTsKICAgICAgY3R5 cGU8X0NoYXJUPiBjb25zdCYgX19jdHlwZSA9IHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19s b2MpOwogICAgICB3aGlsZSAoX19iZWcgIT0gX19lbmQpCiAgICAgICAgewogICAgICAgICAgY2hh ciBfX2MgPSBfX2N0eXBlLm5hcnJvdygqX19iZWcsIDApOwogICAgICAgICAgKytfX2JlZzsKICAg ICAgICAgIGlmIChfX2MgPT0gJyUnKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgY2hhciBf X2Zvcm1hdDsKICAgICAgICAgICAgICBjaGFyIF9fbW9kID0gMDsKICAgICAgICAgICAgICBzaXpl X3QgX19sZW4gPSAxOwogICAgICAgICAgICAgIF9fYyA9IF9fY3R5cGUubmFycm93KCpfX2JlZywg MCk7CiAgICAgICAgICAgICAgKytfX2JlZzsKICAgICAgICAgICAgICBpZiAoX19jID09ICdFJyB8 fCBfX2MgPT0gJ08nKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBfX21vZCA9 IF9fYzsKICAgICAgICAgICAgICAgICAgX19mb3JtYXQgPSBfX2N0eXBlLm5hcnJvdygqX19iZWcs IDApOwogICAgICAgICAgICAgICAgICArK19fYmVnOwogICAgICAgICAgICAgICAgfQogICAgICAg ICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIF9fZm9ybWF0ID0gX19jOwogICAgICAgICAgICAg IF9fcyA9IHRoaXMtPmRvX3B1dChfX3MsIF9faW8sIGNoYXJfdHlwZSgpLCBfX3RtLCBfX2Zvcm1h dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19tb2QpOwogICAgICAgICAgICB9 CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAqX19zID0gX19jOwog ICAgICAgICAgICAgICsrX19zOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4g X19zOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVy PgogICAgX091dEl0ZXIKICAgIHRpbWVfcHV0PF9DaGFyVCwgX091dEl0ZXI+OjoKICAgIGRvX3B1 dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlLCBjb25zdCB0bSogX190 bSwKICAgICAgICAgICBjaGFyIF9fZm9ybWF0LCBjaGFyIF9fbW9kKSBjb25zdAogICAgewogICAg ICBsb2NhbGUgX19sb2MgPSBfX2lvLmdldGxvYygpOwogICAgICBjdHlwZTxfQ2hhclQ+IGNvbnN0 JiBfX2N0eXBlID0gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYyk7CiAgICAgIF9fdGlt ZXB1bmN0PF9DaGFyVD4gY29uc3QmIF9fdHAgPSB1c2VfZmFjZXQ8X190aW1lcHVuY3Q8X0NoYXJU PiA+KF9fbG9jKTsKCgoKICAgICAgY29uc3Qgc2l6ZV90IF9fbWF4bGVuID0gNjQ7CiAgICAgIGNo YXJfdHlwZSogX19yZXMgPQogICAgICAgIHN0YXRpY19jYXN0PGNoYXJfdHlwZSo+KF9fYnVpbHRp bl9hbGxvY2Eoc2l6ZW9mKGNoYXJfdHlwZSkgKiBfX21heGxlbikpOwoKCgoKCgogICAgICBjaGFy X3R5cGUgX19mbXRbNF07CiAgICAgIF9fZm10WzBdID0gX19jdHlwZS53aWRlbignJScpOwogICAg ICBpZiAoIV9fbW9kKQogICAgICAgIHsKICAgICAgICAgIF9fZm10WzFdID0gX19mb3JtYXQ7CiAg ICAgICAgICBfX2ZtdFsyXSA9IGNoYXJfdHlwZSgpOwogICAgICAgIH0KICAgICAgZWxzZQogICAg ICAgIHsKICAgICAgICAgIF9fZm10WzFdID0gX19tb2Q7CiAgICAgICAgICBfX2ZtdFsyXSA9IF9f Zm9ybWF0OwogICAgICAgICAgX19mbXRbM10gPSBjaGFyX3R5cGUoKTsKICAgICAgICB9CgogICAg ICBfX3RwLl9NX3B1dChfX3JlcywgX19tYXhsZW4sIF9fZm10LCBfX3RtKTsKCgogICAgICBzaXpl X3QgX19sZW4gPSBjaGFyX3RyYWl0czxjaGFyX3R5cGU+OjpsZW5ndGgoX19yZXMpOwogICAgICBm b3IgKHNpemVfdCBfX2kgPSAwOyBfX2kgPCBfX2xlbjsgKytfX2ksICsrX19zKQogICAgICAgICpf X3MgPSBfX3Jlc1tfX2ldOwogICAgICByZXR1cm4gX19zOwogICAgfQoKCgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9DaGFyVD4KICAgIGludAogICAgY29sbGF0ZTxfQ2hhclQ+OjpfTV9jb21wYXJlKGNv bnN0IF9DaGFyVCosIGNvbnN0IF9DaGFyVCopIGNvbnN0CiAgICB7IHJldHVybiAwOyB9CgoKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBzaXplX3QKICAgIGNvbGxhdGU8X0NoYXJUPjo6 X01fdHJhbnNmb3JtKF9DaGFyVCosIGNvbnN0IF9DaGFyVCosIHNpemVfdCkgY29uc3QKICAgIHsg cmV0dXJuIDA7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW50CiAgICBjb2xs YXRlPF9DaGFyVD46OgogICAgZG9fY29tcGFyZShjb25zdCBfQ2hhclQqIF9fbG8xLCBjb25zdCBf Q2hhclQqIF9faGkxLAogICAgICAgICAgICAgICBjb25zdCBfQ2hhclQqIF9fbG8yLCBjb25zdCBf Q2hhclQqIF9faGkyKSBjb25zdAogICAgewogICAgICBjb25zdCBzdHJpbmdfdHlwZSBfX29uZShf X2xvMSwgX19oaTEpOwogICAgICBjb25zdCBzdHJpbmdfdHlwZSBfX3R3byhfX2xvMiwgX19oaTIp OwogICAgICByZXR1cm4gX01fY29tcGFyZShfX29uZS5jX3N0cigpLCBfX3R3by5jX3N0cigpKTsK ICAgIH0KCiB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICB0eXBlbmFtZSBjb2xsYXRlPF9D aGFyVD46OnN0cmluZ190eXBlCiAgICBjb2xsYXRlPF9DaGFyVD46OgogICAgZG9fdHJhbnNmb3Jt KGNvbnN0IF9DaGFyVCogX19sbywgY29uc3QgX0NoYXJUKiBfX2hpKSBjb25zdAogICAgewogICAg ICBzaXplX3QgX19sZW4gPSAoX19oaSAtIF9fbG8pICogMjsKCiAgICAgIF9DaGFyVCogX19jID0K ICAgICAgICBzdGF0aWNfY2FzdDxfQ2hhclQqPihfX2J1aWx0aW5fYWxsb2NhKHNpemVvZihfQ2hh clQpICogX19sZW4pKTsKICAgICAgc2l6ZV90IF9fcmVzID0gX01fdHJhbnNmb3JtKF9fYywgX19s bywgX19sZW4pOwoKICAgICAgaWYgKF9fcmVzID49IF9fbGVuKQogICAgICAgIHsKICAgICAgICAg IF9fYyA9CiAgICAgICAgICAgIHN0YXRpY19jYXN0PF9DaGFyVCo+KF9fYnVpbHRpbl9hbGxvY2Eo c2l6ZW9mKF9DaGFyVCkgKiAoX19yZXMgKyAxKSkpOwogICAgICAgICAgX01fdHJhbnNmb3JtKF9f YywgX19sbywgX19yZXMgKyAxKTsKICAgICAgICB9CiAgICAgIHJldHVybiBzdHJpbmdfdHlwZShf X2MpOwogICAgfQoKIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGxvbmcKICAgIGNvbGxh dGU8X0NoYXJUPjo6CiAgICBkb19oYXNoKGNvbnN0IF9DaGFyVCogX19sbywgY29uc3QgX0NoYXJU KiBfX2hpKSBjb25zdAogICAgewogICAgICB1bnNpZ25lZCBsb25nIF9fdmFsID0gMDsKICAgICAg Zm9yICg7IF9fbG8gPCBfX2hpOyArK19fbG8pCiAgICAgICAgX192YWwgPSAqX19sbyArICgoX192 YWwgPDwgNykgfAogICAgICAgICAgICAgICAgICAgICAgIChfX3ZhbCA+PiAobnVtZXJpY19saW1p dHM8dW5zaWduZWQgbG9uZz46OmRpZ2l0cyAtIDcpKSk7CiAgICAgIHJldHVybiBzdGF0aWNfY2Fz dDxsb25nPihfX3ZhbCk7CiAgICB9CgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9Udj4KICAgIHZv aWQKICAgIF9fY29udmVydF90b192KGNvbnN0IGNoYXIqIF9faW4sIF9UdiYgX19vdXQsIGlvc19i YXNlOjppb3N0YXRlJiBfX2VyciwKICAgICAgICAgICAgICAgICAgIGNvbnN0IF9fY19sb2NhbGUm IF9fY2xvYywgaW50IF9fYmFzZSA9IDEwKTsKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1R2Pgog ICAgaW50CiAgICBfX2NvbnZlcnRfZnJvbV92KGNoYXIqIF9fb3V0LCBjb25zdCBpbnQgX19zaXpl LCBjb25zdCBjaGFyKiBfX2ZtdCwKICAgICAgICAgICAgICAgICAgICAgX1R2IF9fdiwgY29uc3Qg X19jX2xvY2FsZSYsIGludCBfX3ByZWMgPSAtMSk7CiMgMTk5NSAiL3Vzci9pbmNsdWRlL2MrKy8z LjIvYml0cy9sb2NhbGVfZmFjZXRzLnRjYyIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg dHlwZW5hbWUgX1RyYWl0cz4KICAgIHN0cnVjdCBfX3BhZAogICAgewogICAgICBzdGF0aWMgdm9p ZAogICAgICBfU19wYWQoaW9zX2Jhc2UmIF9faW8sIF9DaGFyVCBfX2ZpbGwsIF9DaGFyVCogX19u ZXdzLAogICAgICAgICAgICAgY29uc3QgX0NoYXJUKiBfX29sZHMsIGNvbnN0IHN0cmVhbXNpemUg X19uZXdsZW4sCiAgICAgICAgICAgICBjb25zdCBzdHJlYW1zaXplIF9fb2xkbGVuLCBjb25zdCBi b29sIF9fbnVtKTsKICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg X1RyYWl0cz4KICAgIHZvaWQKICAgIF9fcGFkPF9DaGFyVCwgX1RyYWl0cz46Ol9TX3BhZChpb3Nf YmFzZSYgX19pbywgX0NoYXJUIF9fZmlsbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBfQ2hhclQqIF9fbmV3cywgY29uc3QgX0NoYXJUKiBfX29sZHMsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RyZWFtc2l6ZSBfX25ld2xlbiwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJlYW1zaXplIF9fb2xkbGVuLCBjb25z dCBib29sIF9fbnVtKQogICAgewogICAgICBzaXplX3QgX19wbGVuID0gc3RhdGljX2Nhc3Q8c2l6 ZV90PihfX25ld2xlbiAtIF9fb2xkbGVuKTsKICAgICAgX0NoYXJUKiBfX3BhZHMgPSBzdGF0aWNf Y2FzdDxfQ2hhclQqPihfX2J1aWx0aW5fYWxsb2NhKHNpemVvZihfQ2hhclQpICogX19wbGVuKSk7 CiAgICAgIF9UcmFpdHM6OmFzc2lnbihfX3BhZHMsIF9fcGxlbiwgX19maWxsKTsKCiAgICAgIF9D aGFyVCogX19iZWc7CiAgICAgIF9DaGFyVCogX19lbmQ7CiAgICAgIHNpemVfdCBfX21vZCA9IDA7 CiAgICAgIHNpemVfdCBfX2JlZ2xlbjsKICAgICAgaW9zX2Jhc2U6OmZtdGZsYWdzIF9fYWRqdXN0 ID0gX19pby5mbGFncygpICYgaW9zX2Jhc2U6OmFkanVzdGZpZWxkOwoKICAgICAgaWYgKF9fYWRq dXN0ID09IGlvc19iYXNlOjpsZWZ0KQogICAgICAgIHsKCiAgICAgICAgICBfX2JlZyA9IGNvbnN0 X2Nhc3Q8X0NoYXJUKj4oX19vbGRzKTsKICAgICAgICAgIF9fYmVnbGVuID0gX19vbGRsZW47CiAg ICAgICAgICBfX2VuZCA9IF9fcGFkczsKICAgICAgICB9CiAgICAgIGVsc2UgaWYgKF9fYWRqdXN0 ID09IGlvc19iYXNlOjppbnRlcm5hbCAmJiBfX251bSkKICAgICAgICB7CgoKCiAgICAgICAgICBs b2NhbGUgX19sb2MgPSBfX2lvLmdldGxvYygpOwogICAgICAgICAgY29uc3QgY3R5cGU8X0NoYXJU PiYgX19jdHlwZSA9IHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpOwogICAgICAgICAg Y29uc3QgX0NoYXJUIF9fbWludXMgPSBfX2N0eXBlLndpZGVuKCctJyk7CiAgICAgICAgICBjb25z dCBfQ2hhclQgX19wbHVzID0gX19jdHlwZS53aWRlbignKycpOwogICAgICAgICAgYm9vbCBfX3Rl c3RzaWduID0gX1RyYWl0czo6ZXEoX19vbGRzWzBdLCBfX21pbnVzKQogICAgICAgICAgICAgICAg ICAgICAgICAgICAgfHwgX1RyYWl0czo6ZXEoX19vbGRzWzBdLCBfX3BsdXMpOwoKICAgICAgICAg IGJvb2wgX190ZXN0aGV4ID0gX1RyYWl0czo6ZXEoX19jdHlwZS53aWRlbignMCcpLCBfX29sZHNb MF0pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIChfVHJhaXRzOjplcShfX2N0eXBlLndp ZGVuKCd4JyksIF9fb2xkc1sxXSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IF9U cmFpdHM6OmVxKF9fY3R5cGUud2lkZW4oJ1gnKSwgX19vbGRzWzFdKSk7CiAgICAgICAgICBpZiAo X190ZXN0aGV4KQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX19uZXdzWzBdID0gX19vbGRz WzBdOwogICAgICAgICAgICAgIF9fbmV3c1sxXSA9IF9fb2xkc1sxXTsKICAgICAgICAgICAgICBf X21vZCArPSAyOwogICAgICAgICAgICAgIF9fbmV3cyArPSAyOwogICAgICAgICAgICAgIF9fYmVn ID0gX19wYWRzOwogICAgICAgICAgICAgIF9fYmVnbGVuID0gX19wbGVuOwogICAgICAgICAgICAg IF9fZW5kID0gY29uc3RfY2FzdDxfQ2hhclQqPihfX29sZHMgKyBfX21vZCk7CiAgICAgICAgICAg IH0KICAgICAgICAgIGVsc2UgaWYgKF9fdGVzdHNpZ24pCiAgICAgICAgICAgIHsKICAgICAgICAg ICAgICBfVHJhaXRzOjplcSgoX19uZXdzWzBdID0gX19vbGRzWzBdKSwgX19wbHVzKSA/IF9fcGx1 cyA6IF9fbWludXM7CiAgICAgICAgICAgICAgKytfX21vZDsKICAgICAgICAgICAgICArK19fbmV3 czsKICAgICAgICAgICAgICBfX2JlZyA9IF9fcGFkczsKICAgICAgICAgICAgICBfX2JlZ2xlbiA9 IF9fcGxlbjsKICAgICAgICAgICAgICBfX2VuZCA9IGNvbnN0X2Nhc3Q8X0NoYXJUKj4oX19vbGRz ICsgX19tb2QpOwogICAgICAgICAgICB9CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIHsKCiAg ICAgICAgICAgICAgX19iZWcgPSBfX3BhZHM7CiAgICAgICAgICAgICAgX19iZWdsZW4gPSBfX3Bs ZW47CiAgICAgICAgICAgICAgX19lbmQgPSBjb25zdF9jYXN0PF9DaGFyVCo+KF9fb2xkcyk7CiAg ICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIGVsc2UKICAgICAgICB7CgogICAgICAgICAgX19i ZWcgPSBfX3BhZHM7CiAgICAgICAgICBfX2JlZ2xlbiA9IF9fcGxlbjsKICAgICAgICAgIF9fZW5k ID0gY29uc3RfY2FzdDxfQ2hhclQqPihfX29sZHMpOwogICAgICAgIH0KICAgICAgX1RyYWl0czo6 Y29weShfX25ld3MsIF9fYmVnLCBfX2JlZ2xlbik7CiAgICAgIF9UcmFpdHM6OmNvcHkoX19uZXdz ICsgX19iZWdsZW4sIF9fZW5kLAogICAgICAgICAgICAgICAgICAgICAgICAgIF9fbmV3bGVuIC0g X19iZWdsZW4gLSBfX21vZCk7CiAgICB9CiMgMjA5MCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0 cy9sb2NhbGVfZmFjZXRzLnRjYyIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGJv b2wKICAgIF9fdmVyaWZ5X2dyb3VwaW5nKGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQ+JiBfX2dy b3VwaW5nLAogICAgICAgICAgICAgICAgICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVD4mIF9fZ3Jv dXBpbmdfdG1wKQogICAgewogICAgICBpbnQgX19pID0gMDsKICAgICAgaW50IF9faiA9IDA7CiAg ICAgIGNvbnN0IGludCBfX2xlbiA9IF9fZ3JvdXBpbmcuc2l6ZSgpOwogICAgICBjb25zdCBpbnQg X19uID0gX19ncm91cGluZ190bXAuc2l6ZSgpOwogICAgICBib29sIF9fdGVzdCA9IHRydWU7CgoK CgogICAgICB3aGlsZSAoX190ZXN0ICYmIF9faSA8IF9fbiAtIDEpCiAgICAgICAgZm9yIChfX2og PSAwOyBfX3Rlc3QgJiYgX19qIDwgX19sZW4gJiYgX19pIDwgX19uIC0gMTsgKytfX2osKytfX2kp CiAgICAgICAgICBfX3Rlc3QgJj0gX19ncm91cGluZ1tfX2pdID09IF9fZ3JvdXBpbmdfdG1wW19f biAtIF9faSAtIDFdOwoKCiAgICAgIF9faiA9PSBfX2xlbiA/IF9faiA9IDAgOiBfX2o7CiAgICAg IF9fdGVzdCAmPSBfX2dyb3VwaW5nW19fal0gPj0gX19ncm91cGluZ190bXBbX19uIC0gX19pIC0g MV07CiAgICAgIHJldHVybiBfX3Rlc3Q7CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUg X0NoYXJUPgogICAgX0NoYXJUKgogICAgX19hZGRfZ3JvdXBpbmcoX0NoYXJUKiBfX3MsIF9DaGFy VCBfX3NlcCwKICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIF9fZ2JlZywgY29uc3QgY2hh ciogX19nZW5kLAogICAgICAgICAgICAgICAgICAgY29uc3QgX0NoYXJUKiBfX2ZpcnN0LCBjb25z dCBfQ2hhclQqIF9fbGFzdCkKICAgIHsKICAgICAgaWYgKF9fbGFzdCAtIF9fZmlyc3QgPiAqX19n YmVnKQogICAgICAgIHsKICAgICAgICAgIF9fcyA9IF9fYWRkX2dyb3VwaW5nKF9fcywgX19zZXAs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19nYmVnICsgMSA9PSBfX2dlbmQgPyBf X2diZWcgOiBfX2diZWcgKyAxKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZ2Vu ZCwgX19maXJzdCwgX19sYXN0IC0gKl9fZ2JlZyk7CiAgICAgICAgICBfX2ZpcnN0ID0gX19sYXN0 IC0gKl9fZ2JlZzsKICAgICAgICAgICpfX3MrKyA9IF9fc2VwOwogICAgICAgIH0KICAgICAgZG8K ICAgICAgICAqX19zKysgPSAqX19maXJzdCsrOwogICAgICB3aGlsZSAoX19maXJzdCAhPSBfX2xh c3QpOwogICAgICByZXR1cm4gX19zOwogICAgfQoKCgoKICBleHRlcm4gdGVtcGxhdGUgY2xhc3Mg bW9uZXlwdW5jdDxjaGFyLCBmYWxzZT47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIG1vbmV5cHVu Y3Q8Y2hhciwgdHJ1ZT47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIG1vbmV5cHVuY3RfYnluYW1l PGNoYXIsIGZhbHNlPjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgbW9uZXlwdW5jdF9ieW5hbWU8 Y2hhciwgdHJ1ZT47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIG1vbmV5X2dldDxjaGFyPjsKICBl eHRlcm4gdGVtcGxhdGUgY2xhc3MgbW9uZXlfcHV0PGNoYXI+OwogIGV4dGVybiB0ZW1wbGF0ZSBj bGFzcyBudW1wdW5jdDxjaGFyPjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgbnVtcHVuY3RfYnlu YW1lPGNoYXI+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBudW1fZ2V0PGNoYXI+OwogIGV4dGVy biB0ZW1wbGF0ZSBjbGFzcyBudW1fcHV0PGNoYXI+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBf X3RpbWVwdW5jdDxjaGFyPjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgdGltZV9wdXQ8Y2hhcj47 CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIHRpbWVfcHV0X2J5bmFtZTxjaGFyPjsKICBleHRlcm4g dGVtcGxhdGUgY2xhc3MgdGltZV9nZXQ8Y2hhcj47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIHRp bWVfZ2V0X2J5bmFtZTxjaGFyPjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgbWVzc2FnZXM8Y2hh cj47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIG1lc3NhZ2VzX2J5bmFtZTxjaGFyPjsKICBleHRl cm4gdGVtcGxhdGUgY2xhc3MgY3R5cGVfYnluYW1lPGNoYXI+OwogIGV4dGVybiB0ZW1wbGF0ZSBj bGFzcyBjb2RlY3Z0X2J5bmFtZTxjaGFyLCBjaGFyLCBtYnN0YXRlX3Q+OwogIGV4dGVybiB0ZW1w bGF0ZSBjbGFzcyBjb2xsYXRlPGNoYXI+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBjb2xsYXRl X2J5bmFtZTxjaGFyPjsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBjb25zdCBjb2RlY3Z0PGNoYXIs IGNoYXIsIG1ic3RhdGVfdD4mCiAgICB1c2VfZmFjZXQ8Y29kZWN2dDxjaGFyLCBjaGFyLCBtYnN0 YXRlX3Q+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgY29uc3QgY29s bGF0ZTxjaGFyPiYKICAgIHVzZV9mYWNldDxjb2xsYXRlPGNoYXI+ID4oY29uc3QgbG9jYWxlJik7 CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgY29uc3QgbnVtcHVuY3Q8Y2hhcj4mCiAgICB1c2VfZmFj ZXQ8bnVtcHVuY3Q8Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAg ICBjb25zdCBudW1fcHV0PGNoYXI+JgogICAgdXNlX2ZhY2V0PG51bV9wdXQ8Y2hhcj4gPihjb25z dCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBjb25zdCBudW1fZ2V0PGNoYXI+Jgog ICAgdXNlX2ZhY2V0PG51bV9nZXQ8Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRl bXBsYXRlCiAgICBjb25zdCBtb25leXB1bmN0PGNoYXIsIHRydWU+JgogICAgdXNlX2ZhY2V0PG1v bmV5cHVuY3Q8Y2hhciwgdHJ1ZT4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRl CiAgICBjb25zdCBtb25leXB1bmN0PGNoYXIsIGZhbHNlPiYKICAgIHVzZV9mYWNldDxtb25leXB1 bmN0PGNoYXIsIGZhbHNlPiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAg IGNvbnN0IG1vbmV5X3B1dDxjaGFyPiYKICAgIHVzZV9mYWNldDxtb25leV9wdXQ8Y2hhcj4gPihj b25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBjb25zdCBtb25leV9nZXQ8Y2hh cj4mCiAgICB1c2VfZmFjZXQ8bW9uZXlfZ2V0PGNoYXI+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4 dGVybiB0ZW1wbGF0ZQogICAgY29uc3QgX190aW1lcHVuY3Q8Y2hhcj4mCiAgICB1c2VfZmFjZXQ8 X190aW1lcHVuY3Q8Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAg ICBjb25zdCB0aW1lX3B1dDxjaGFyPiYKICAgIHVzZV9mYWNldDx0aW1lX3B1dDxjaGFyPiA+KGNv bnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGNvbnN0IHRpbWVfZ2V0PGNoYXI+ JgogICAgdXNlX2ZhY2V0PHRpbWVfZ2V0PGNoYXI+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVy biB0ZW1wbGF0ZQogICAgY29uc3QgbWVzc2FnZXM8Y2hhcj4mCiAgICB1c2VfZmFjZXQ8bWVzc2Fn ZXM8Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBib29sCiAg ICBoYXNfZmFjZXQ8Y3R5cGU8Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBs YXRlCiAgICBib29sCiAgICBoYXNfZmFjZXQ8Y29kZWN2dDxjaGFyLCBjaGFyLCBtYnN0YXRlX3Q+ ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgYm9vbAogICAgaGFzX2Zh Y2V0PGNvbGxhdGU8Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAg ICBib29sCiAgICBoYXNfZmFjZXQ8bnVtcHVuY3Q8Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsKCiAg ZXh0ZXJuIHRlbXBsYXRlCiAgICBib29sCiAgICBoYXNfZmFjZXQ8bnVtX3B1dDxjaGFyPiA+KGNv bnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGJvb2wKICAgIGhhc19mYWNldDxu dW1fZ2V0PGNoYXI+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgYm9v bAogICAgaGFzX2ZhY2V0PG1vbmV5cHVuY3Q8Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0 ZXJuIHRlbXBsYXRlCiAgICBib29sCiAgICBoYXNfZmFjZXQ8bW9uZXlfcHV0PGNoYXI+ID4oY29u c3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgYm9vbAogICAgaGFzX2ZhY2V0PG1v bmV5X2dldDxjaGFyPiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGJv b2wKICAgIGhhc19mYWNldDxfX3RpbWVwdW5jdDxjaGFyPiA+KGNvbnN0IGxvY2FsZSYpOwoKICBl eHRlcm4gdGVtcGxhdGUKICAgIGJvb2wKICAgIGhhc19mYWNldDx0aW1lX3B1dDxjaGFyPiA+KGNv bnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGJvb2wKICAgIGhhc19mYWNldDx0 aW1lX2dldDxjaGFyPiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGJv b2wKICAgIGhhc19mYWNldDxtZXNzYWdlczxjaGFyPiA+KGNvbnN0IGxvY2FsZSYpOwoKCiAgZXh0 ZXJuIHRlbXBsYXRlIGNsYXNzIG1vbmV5cHVuY3Q8d2NoYXJfdCwgZmFsc2U+OwogIGV4dGVybiB0 ZW1wbGF0ZSBjbGFzcyBtb25leXB1bmN0PHdjaGFyX3QsIHRydWU+OwogIGV4dGVybiB0ZW1wbGF0 ZSBjbGFzcyBtb25leXB1bmN0X2J5bmFtZTx3Y2hhcl90LCBmYWxzZT47CiAgZXh0ZXJuIHRlbXBs YXRlIGNsYXNzIG1vbmV5cHVuY3RfYnluYW1lPHdjaGFyX3QsIHRydWU+OwogIGV4dGVybiB0ZW1w bGF0ZSBjbGFzcyBtb25leV9nZXQ8d2NoYXJfdD47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIG1v bmV5X3B1dDx3Y2hhcl90PjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgbnVtcHVuY3Q8d2NoYXJf dD47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIG51bXB1bmN0X2J5bmFtZTx3Y2hhcl90PjsKICBl eHRlcm4gdGVtcGxhdGUgY2xhc3MgbnVtX2dldDx3Y2hhcl90PjsKICBleHRlcm4gdGVtcGxhdGUg Y2xhc3MgbnVtX3B1dDx3Y2hhcl90PjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgX190aW1lcHVu Y3Q8d2NoYXJfdD47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIHRpbWVfcHV0PHdjaGFyX3Q+Owog IGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyB0aW1lX3B1dF9ieW5hbWU8d2NoYXJfdD47CiAgZXh0ZXJu IHRlbXBsYXRlIGNsYXNzIHRpbWVfZ2V0PHdjaGFyX3Q+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFz cyB0aW1lX2dldF9ieW5hbWU8d2NoYXJfdD47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIG1lc3Nh Z2VzPHdjaGFyX3Q+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBtZXNzYWdlc19ieW5hbWU8d2No YXJfdD47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIGN0eXBlX2J5bmFtZTx3Y2hhcl90PjsKICBl eHRlcm4gdGVtcGxhdGUgY2xhc3MgY29kZWN2dF9ieW5hbWU8d2NoYXJfdCwgY2hhciwgbWJzdGF0 ZV90PjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgY29sbGF0ZTx3Y2hhcl90PjsKICBleHRlcm4g dGVtcGxhdGUgY2xhc3MgY29sbGF0ZV9ieW5hbWU8d2NoYXJfdD47CgogIGV4dGVybiB0ZW1wbGF0 ZQogICAgY29uc3QgY29kZWN2dDx3Y2hhcl90LCBjaGFyLCBtYnN0YXRlX3Q+JgogICAgdXNlX2Zh Y2V0PGNvZGVjdnQ8d2NoYXJfdCwgY2hhciwgbWJzdGF0ZV90PiA+KGxvY2FsZSBjb25zdCYpOwoK ICBleHRlcm4gdGVtcGxhdGUKICAgIGNvbnN0IGNvbGxhdGU8d2NoYXJfdD4mCiAgICB1c2VfZmFj ZXQ8Y29sbGF0ZTx3Y2hhcl90PiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUK ICAgIGNvbnN0IG51bXB1bmN0PHdjaGFyX3Q+JgogICAgdXNlX2ZhY2V0PG51bXB1bmN0PHdjaGFy X3Q+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgY29uc3QgbnVtX3B1 dDx3Y2hhcl90PiYKICAgIHVzZV9mYWNldDxudW1fcHV0PHdjaGFyX3Q+ID4oY29uc3QgbG9jYWxl Jik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgY29uc3QgbnVtX2dldDx3Y2hhcl90PiYKICAgIHVz ZV9mYWNldDxudW1fZ2V0PHdjaGFyX3Q+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1w bGF0ZQogICAgY29uc3QgbW9uZXlwdW5jdDx3Y2hhcl90LCB0cnVlPiYKICAgIHVzZV9mYWNldDxt b25leXB1bmN0PHdjaGFyX3QsIHRydWU+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1w bGF0ZQogICAgY29uc3QgbW9uZXlwdW5jdDx3Y2hhcl90LCBmYWxzZT4mCiAgICB1c2VfZmFjZXQ8 bW9uZXlwdW5jdDx3Y2hhcl90LCBmYWxzZT4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRl bXBsYXRlCiAgICBjb25zdCBtb25leV9wdXQ8d2NoYXJfdD4mCiAgICB1c2VfZmFjZXQ8bW9uZXlf cHV0PHdjaGFyX3Q+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgY29u c3QgbW9uZXlfZ2V0PHdjaGFyX3Q+JgogICAgdXNlX2ZhY2V0PG1vbmV5X2dldDx3Y2hhcl90PiA+ KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGNvbnN0IF9fdGltZXB1bmN0 PHdjaGFyX3Q+JgogICAgdXNlX2ZhY2V0PF9fdGltZXB1bmN0PHdjaGFyX3Q+ID4oY29uc3QgbG9j YWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgY29uc3QgdGltZV9wdXQ8d2NoYXJfdD4mCiAg ICB1c2VfZmFjZXQ8dGltZV9wdXQ8d2NoYXJfdD4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJu IHRlbXBsYXRlCiAgICBjb25zdCB0aW1lX2dldDx3Y2hhcl90PiYKICAgIHVzZV9mYWNldDx0aW1l X2dldDx3Y2hhcl90PiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGNv bnN0IG1lc3NhZ2VzPHdjaGFyX3Q+JgogICAgdXNlX2ZhY2V0PG1lc3NhZ2VzPHdjaGFyX3Q+ID4o Y29uc3QgbG9jYWxlJik7CgogZXh0ZXJuIHRlbXBsYXRlCiAgICBib29sCiAgICBoYXNfZmFjZXQ8 Y3R5cGU8d2NoYXJfdD4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBi b29sCiAgICBoYXNfZmFjZXQ8Y29kZWN2dDx3Y2hhcl90LCBjaGFyLCBtYnN0YXRlX3Q+ID4oY29u c3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgYm9vbAogICAgaGFzX2ZhY2V0PGNv bGxhdGU8d2NoYXJfdD4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBi b29sCiAgICBoYXNfZmFjZXQ8bnVtcHVuY3Q8d2NoYXJfdD4gPihjb25zdCBsb2NhbGUmKTsKCiAg ZXh0ZXJuIHRlbXBsYXRlCiAgICBib29sCiAgICBoYXNfZmFjZXQ8bnVtX3B1dDx3Y2hhcl90PiA+ KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGJvb2wKICAgIGhhc19mYWNl dDxudW1fZ2V0PHdjaGFyX3Q+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQog ICAgYm9vbAogICAgaGFzX2ZhY2V0PG1vbmV5cHVuY3Q8d2NoYXJfdD4gPihjb25zdCBsb2NhbGUm KTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBib29sCiAgICBoYXNfZmFjZXQ8bW9uZXlfcHV0PHdj aGFyX3Q+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgYm9vbAogICAg aGFzX2ZhY2V0PG1vbmV5X2dldDx3Y2hhcl90PiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4g dGVtcGxhdGUKICAgIGJvb2wKICAgIGhhc19mYWNldDxfX3RpbWVwdW5jdDx3Y2hhcl90PiA+KGNv bnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGJvb2wKICAgIGhhc19mYWNldDx0 aW1lX3B1dDx3Y2hhcl90PiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAg IGJvb2wKICAgIGhhc19mYWNldDx0aW1lX2dldDx3Y2hhcl90PiA+KGNvbnN0IGxvY2FsZSYpOwoK ICBleHRlcm4gdGVtcGxhdGUKICAgIGJvb2wKICAgIGhhc19mYWNldDxtZXNzYWdlczx3Y2hhcl90 PiA+KGNvbnN0IGxvY2FsZSYpOwoKfQojIDQ3ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9sb2NhbGUi IDIgMwojIDM4ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL29zdHJlYW0udGNjIiAyIDMKCm5h bWVzcGFjZSBzdGQKewogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0 cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6c2VudHJ5OjoKICAgIHNlbnRy eShiYXNpY19vc3RyZWFtPF9DaGFyVCxfVHJhaXRzPiYgX19vcykKICAgIDogX01fb2soX19vcy5n b29kKCkpLCBfTV9vcyhfX29zKQogICAgewoKICAgICAgaWYgKF9NX29rICYmIF9fb3MudGllKCkp CiAgICAgICAgX19vcy50aWUoKS0+Zmx1c2goKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFp dHM+JgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIG9wZXJhdG9yPDwo X19vc3RyZWFtX3R5cGUmICgqX19wZikoX19vc3RyZWFtX3R5cGUmKSkKICAgIHsKICAgICAgc2Vu dHJ5IF9fY2VyYigqdGhpcyk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAg dHJ5CiAgICAgICAgICAgIHsgX19wZigqdGhpcyk7IH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlv biYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShp b3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAm IGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAg ICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwg X1RyYWl0cz4mCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3BlcmF0 b3I8PChfX2lvc190eXBlJiAoKl9fcGYpKF9faW9zX3R5cGUmKSkKICAgIHsKICAgICAgc2VudHJ5 IF9fY2VyYigqdGhpcyk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5 CiAgICAgICAgICAgIHsgX19wZigqdGhpcyk7IH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYg X19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3Nf YmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlv c19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAg fQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1Ry YWl0cz4mCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3BlcmF0b3I8 PChpb3NfYmFzZSYgKCpfX3BmKShpb3NfYmFzZSYpKQogICAgewogICAgICBzZW50cnkgX19jZXJi KCp0aGlzKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAg ICAgICAgeyBfX3BmKCp0aGlzKTsgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwp CiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpi YWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6 OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAg ICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy VCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYK ICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6b3BlcmF0b3I8PChfX3N0cmVhbWJ1 Zl90eXBlKiBfX3NiaW4pCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMpOwogICAgICBp ZiAoX19jZXJiICYmIF9fc2JpbikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAg ewogICAgICAgICAgICAgIGlmICghX19jb3B5X3N0cmVhbWJ1ZnMoKnRoaXMsIF9fc2JpbiwgdGhp cy0+cmRidWYoKSkpCiAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFp bGJpdCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQog ICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFk Yml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpi YWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAg IH0KICAgICAgZWxzZSBpZiAoIV9fc2JpbikKICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFz ZTo6YmFkYml0KTsKICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1Ry YWl0cz4mCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46Om9wZXJhdG9yPDwoYm9v bCBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMpOwogICAgICBpZiAoX19jZXJi KQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaWYg KF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1wdXQpKQogICAgICAgICAgICAgICAgaWYgKF9NX2ZudW1w dXQtPnB1dCgqdGhpcywgKnRoaXMsIHRoaXMtPmZpbGwoKSwgX19uKS5mYWlsZWQoKSkKICAgICAg ICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAg IH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAg ICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAg ICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAg ICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0 aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+ CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19vc3RyZWFtPF9D aGFyVCwgX1RyYWl0cz46Om9wZXJhdG9yPDwobG9uZyBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBf X2NlcmIoKnRoaXMpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQog ICAgICAgICAgICB7CiAgICAgICAgICAgICAgY2hhcl90eXBlIF9fYyA9IHRoaXMtPmZpbGwoKTsK ICAgICAgICAgICAgICBpb3NfYmFzZTo6Zm10ZmxhZ3MgX19mbXQgPSB0aGlzLT5mbGFncygpICYg aW9zX2Jhc2U6OmJhc2VmaWVsZDsKICAgICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01f Zm51bXB1dCkpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIGJvb2wgX19iID0g ZmFsc2U7CiAgICAgICAgICAgICAgICAgIGlmICgoX19mbXQgJiBpb3NfYmFzZTo6b2N0KSB8fCAo X19mbXQgJiBpb3NfYmFzZTo6aGV4KSkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAg ICAgICAgICAgICB1bnNpZ25lZCBsb25nIF9fbCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+ KF9fbik7CiAgICAgICAgICAgICAgICAgICAgICBfX2IgPSBfTV9mbnVtcHV0LT5wdXQoKnRoaXMs ICp0aGlzLCBfX2MsIF9fbCkuZmFpbGVkKCk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAg ICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgX19iID0gX01fZm51bXB1dC0+cHV0 KCp0aGlzLCAqdGhpcywgX19jLCBfX24pLmZhaWxlZCgpOwogICAgICAgICAgICAgICAgICBpZiAo X19iKQogICAgICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQp OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRp b24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUo aW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkg JiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAg ICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQs IF9UcmFpdHM+JgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjpvcGVyYXRvcjw8 KHVuc2lnbmVkIGxvbmcgX19uKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzKTsKICAg ICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAg ICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtcHV0KSkKICAgICAgICAgICAgICAg IGlmIChfTV9mbnVtcHV0LT5wdXQoKnRoaXMsICp0aGlzLCB0aGlzLT5maWxsKCksIF9fbikuZmFp bGVkKCkpCiAgICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQp OwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAg ICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7 CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0 KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAg ICAgIHJldHVybiAqdGhpczsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw ZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJh c2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6b3BlcmF0b3I8PChsb25nIGxvbmcgX19uKQog ICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAg ICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGNoYXJfdHlwZSBf X2MgPSB0aGlzLT5maWxsKCk7CiAgICAgICAgICAgICAgaW9zX2Jhc2U6OmZtdGZsYWdzIF9fZm10 ID0gdGhpcy0+ZmxhZ3MoKSAmIGlvc19iYXNlOjpiYXNlZmllbGQ7CiAgICAgICAgICAgICAgaWYg KF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1wdXQpKQogICAgICAgICAgICAgICAgewogICAgICAgICAg ICAgICAgICBib29sIF9fYiA9IGZhbHNlOwogICAgICAgICAgICAgICAgICBpZiAoKF9fZm10ICYg aW9zX2Jhc2U6Om9jdCkgfHwgKF9fZm10ICYgaW9zX2Jhc2U6OmhleCkpCiAgICAgICAgICAgICAg ICAgICAgewogICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBsb25nIF9fbDsKICAg ICAgICAgICAgICAgICAgICAgIF9fbCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4o X19uKTsKICAgICAgICAgICAgICAgICAgICAgIF9fYiA9IF9NX2ZudW1wdXQtPnB1dCgqdGhpcywg KnRoaXMsIF9fYywgX19sKS5mYWlsZWQoKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg ICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICBfX2IgPSBfTV9mbnVtcHV0LT5wdXQo KnRoaXMsICp0aGlzLCBfX2MsIF9fbikuZmFpbGVkKCk7CiAgICAgICAgICAgICAgICAgIGlmIChf X2IpCiAgICAgICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7 CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlv biYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShp b3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAm IGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAg ICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwg X1RyYWl0cz4mCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46Om9wZXJhdG9yPDwo dW5zaWduZWQgbG9uZyBsb25nIF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcyk7 CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsK ICAgICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bXB1dCkpCiAgICAgICAgICAg ICAgICBpZiAoX01fZm51bXB1dC0+cHV0KCp0aGlzLCAqdGhpcywgdGhpcy0+ZmlsbCgpLCBfX24p LmZhaWxlZCgpKQogICAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFk Yml0KTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAg ICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRi aXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJh ZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAg fQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs IHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAg ICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46Om9wZXJhdG9yPDwoZG91YmxlIF9fbikK ICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcyk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAg ICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpZiAoX01fY2hl Y2tfZmFjZXQoX01fZm51bXB1dCkpCiAgICAgICAgICAgICAgICBpZiAoX01fZm51bXB1dC0+cHV0 KCp0aGlzLCAqdGhpcywgdGhpcy0+ZmlsbCgpLCBfX24pLmZhaWxlZCgpKQogICAgICAgICAgICAg ICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgfQogICAg ICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAg ICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgo dGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAg ICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAg ICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJh c2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBf VHJhaXRzPjo6b3BlcmF0b3I8PChsb25nIGRvdWJsZSBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBf X2NlcmIoKnRoaXMpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQog ICAgICAgICAgICB7CiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1wdXQp KQogICAgICAgICAgICAgICAgaWYgKF9NX2ZudW1wdXQtPnB1dCgqdGhpcywgKnRoaXMsIHRoaXMt PmZpbGwoKSwgX19uKS5mYWlsZWQoKSkKICAgICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUo aW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlv biYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShp b3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAm IGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAg ICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwg X1RyYWl0cz4mCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46Om9wZXJhdG9yPDwo Y29uc3Qgdm9pZCogX19uKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzKTsKICAgICAg aWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAg ICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtcHV0KSkKICAgICAgICAgICAgICAgIGlm IChfTV9mbnVtcHV0LT5wdXQoKnRoaXMsICp0aGlzLCB0aGlzLT5maWxsKCksIF9fbikuZmFpbGVk KCkpCiAgICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwog ICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAg ICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAg ICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAh PSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAg IHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt ZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNf b3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjpwdXQoY2hhcl90eXBlIF9fYykKICAgIHsKICAgICAg c2VudHJ5IF9fY2VyYigqdGhpcyk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAg ICAgaW50X3R5cGUgX19wdXQgPSByZGJ1ZigpLT5zcHV0YyhfX2MpOwogICAgICAgICAgaWYgKHRy YWl0c190eXBlOjplcV9pbnRfdHlwZShfX3B1dCwgdHJhaXRzX3R5cGU6OmVvZigpKSkKICAgICAg ICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgfQogICAgICBy ZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg X1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX29z dHJlYW08X0NoYXJULCBfVHJhaXRzPjo6d3JpdGUoY29uc3QgX0NoYXJUKiBfX3MsIHN0cmVhbXNp emUgX19uKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzKTsKICAgICAgaWYgKF9fY2Vy YikKICAgICAgICB7CiAgICAgICAgICBzdHJlYW1zaXplIF9fcHV0ID0gdGhpcy0+cmRidWYoKS0+ c3B1dG4oX19zLCBfX24pOwogICAgICAgICAgaWYgKCBfX3B1dCAhPSBfX24pCiAgICAgICAgICAg IHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgIH0KICAgICAgcmV0dXJu ICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp dHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19vc3RyZWFt PF9DaGFyVCwgX1RyYWl0cz46OmZsdXNoKCkKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhp cyk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgaWYgKHRoaXMtPnJkYnVm KCkgJiYgdGhpcy0+cmRidWYoKS0+cHVic3luYygpID09IC0xKQogICAgICAgICAgICB0aGlzLT5z ZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsK ICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAg dHlwZW5hbWUgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Ojpwb3NfdHlwZQogICAgYmFz aWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Ojp0ZWxscCgpCiAgICB7CiAgICAgIHBvc190eXBl IF9fcmV0ID0gcG9zX3R5cGUoLTEpOwogICAgICBpZiAoIXRoaXMtPmZhaWwoKSkKICAgICAgICBf X3JldCA9IHRoaXMtPnJkYnVmKCktPnB1YnNlZWtvZmYoMCwgaW9zX2Jhc2U6OmN1ciwgaW9zX2Jh c2U6Om91dCk7CiAgICAgIHJldHVybiBfX3JldDsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1l IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJh aXRzPiYKICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6c2Vla3AocG9zX3R5cGUg X19wb3MpCiAgICB7CiAgICAgIGlmICghdGhpcy0+ZmFpbCgpKQogICAgICAgIHsKCgogICAgICAg ICAgcG9zX3R5cGUgX19lcnIgPSB0aGlzLT5yZGJ1ZigpLT5wdWJzZWVrcG9zKF9fcG9zLCBpb3Nf YmFzZTo6b3V0KTsKCgogICAgICAgICAgaWYgKF9fZXJyID09IHBvc190eXBlKG9mZl90eXBlKC0x KSkpCiAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKCiAgICAg ICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy VCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYK ICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBzZWVrcChvZmZfdHlwZSBf X29mZiwgaW9zX2Jhc2U6OnNlZWtkaXIgX19kKQogICAgewogICAgICBpZiAoIXRoaXMtPmZhaWwo KSkKICAgICAgICB7CgoKICAgICAgICAgIHBvc190eXBlIF9fZXJyID0gdGhpcy0+cmRidWYoKS0+ cHVic2Vla29mZihfX29mZiwgX19kLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGlvc19iYXNlOjpvdXQpOwoKCiAgICAgICAgICBpZiAoX19lcnIg PT0gcG9zX3R5cGUob2ZmX3R5cGUoLTEpKSkKICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9z X2Jhc2U6OmZhaWxiaXQpOwoKICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCgog IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29z dHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxfQ2hh clQsIF9UcmFpdHM+JiBfX291dCwgX0NoYXJUIF9fYykKICAgIHsKICAgICAgdHlwZWRlZiBiYXNp Y19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gX19vc3RyZWFtX3R5cGU7CiAgICAgIHR5cGVuYW1l IF9fb3N0cmVhbV90eXBlOjpzZW50cnkgX19jZXJiKF9fb3V0KTsKICAgICAgaWYgKF9fY2VyYikK ICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIHN0cmVh bXNpemUgX193ID0gX19vdXQud2lkdGgoKTsKICAgICAgICAgICAgICBfQ2hhclQqIF9fcGFkcyA9 IHN0YXRpY19jYXN0PF9DaGFyVCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKF9DaGFyVCkgKiAo X193ICsgMSkpKTsKICAgICAgICAgICAgICBfX3BhZHNbMF0gPSBfX2M7CiAgICAgICAgICAgICAg c3RyZWFtc2l6ZSBfX2xlbiA9IDE7CiAgICAgICAgICAgICAgaWYgKF9fdyA+IF9fbGVuKQogICAg ICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBfX3BhZDxfQ2hhclQsIF9UcmFpdHM+Ojpf U19wYWQoX19vdXQsIF9fb3V0LmZpbGwoKSwgX19wYWRzLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgJl9fYywgX193LCBfX2xlbiwgZmFsc2UpOwogICAg ICAgICAgICAgICAgICBfX2xlbiA9IF9fdzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg ICBfX291dC53cml0ZShfX3BhZHMsIF9fbGVuKTsKICAgICAgICAgICAgICBfX291dC53aWR0aCgw KTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAg ICAgICAgIHsKCgogICAgICAgICAgICAgIF9fb3V0LnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQp OwogICAgICAgICAgICAgIGlmICgoX19vdXQuZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJp dCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQog ICAgICByZXR1cm4gX19vdXQ7CiAgICB9CgoKICB0ZW1wbGF0ZSA8Y2xhc3MgX1RyYWl0cz4KICAg IGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJl YW08Y2hhciwgX1RyYWl0cz4mIF9fb3V0LCBjaGFyIF9fYykKICAgIHsKICAgICAgdHlwZWRlZiBi YXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+IF9fb3N0cmVhbV90eXBlOwogICAgICB0eXBlbmFt ZSBfX29zdHJlYW1fdHlwZTo6c2VudHJ5IF9fY2VyYihfX291dCk7CiAgICAgIGlmIChfX2NlcmIp CiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBzdHJl YW1zaXplIF9fdyA9IF9fb3V0LndpZHRoKCk7CiAgICAgICAgICAgICAgY2hhciogX19wYWRzID0g c3RhdGljX2Nhc3Q8Y2hhcio+KF9fYnVpbHRpbl9hbGxvY2EoX193ICsgMSkpOwogICAgICAgICAg ICAgIF9fcGFkc1swXSA9IF9fYzsKICAgICAgICAgICAgICBzdHJlYW1zaXplIF9fbGVuID0gMTsK ICAgICAgICAgICAgICBpZiAoX193ID4gX19sZW4pCiAgICAgICAgICAgICAgICB7CiAgICAgICAg ICAgICAgICAgIF9fcGFkPGNoYXIsIF9UcmFpdHM+OjpfU19wYWQoX19vdXQsIF9fb3V0LmZpbGwo KSwgX19wYWRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICZfX2MsIF9fdywgX19sZW4sIGZhbHNlKTsKICAgICAgICAgICAgICAgICAgX19sZW4gPSBfX3c7 CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgX19vdXQud3JpdGUoX19wYWRzLCBfX2xl bik7CiAgICAgICAgICAgICAgX19vdXQud2lkdGgoMCk7CiAgICAgICAgICAgIH0KICAgICAgICAg IGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICBf X291dC5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKF9fb3V0 LmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0 aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuIF9fb3V0OwogICAgIH0K CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNf b3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPF9D aGFyVCwgX1RyYWl0cz4mIF9fb3V0LCBjb25zdCBfQ2hhclQqIF9fcykKICAgIHsKICAgICAgdHlw ZWRlZiBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gX19vc3RyZWFtX3R5cGU7CiAgICAg IHR5cGVuYW1lIF9fb3N0cmVhbV90eXBlOjpzZW50cnkgX19jZXJiKF9fb3V0KTsKICAgICAgaWYg KF9fY2VyYiAmJiBfX3MpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAg ICAgICAgICAgICBzdHJlYW1zaXplIF9fdyA9IF9fb3V0LndpZHRoKCk7CiAgICAgICAgICAgICAg X0NoYXJUKiBfX3BhZHMgPSBzdGF0aWNfY2FzdDxfQ2hhclQqPihfX2J1aWx0aW5fYWxsb2NhKHNp emVvZihfQ2hhclQpICogX193KSk7CiAgICAgICAgICAgICAgc3RyZWFtc2l6ZSBfX2xlbiA9IHN0 YXRpY19jYXN0PHN0cmVhbXNpemU+KF9UcmFpdHM6Omxlbmd0aChfX3MpKTsKICAgICAgICAgICAg ICBpZiAoX193ID4gX19sZW4pCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIF9f cGFkPF9DaGFyVCwgX1RyYWl0cz46Ol9TX3BhZChfX291dCwgX19vdXQuZmlsbCgpLCBfX3BhZHMs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3MsIF9f dywgX19sZW4sIGZhbHNlKTsKICAgICAgICAgICAgICAgICAgX19zID0gX19wYWRzOwogICAgICAg ICAgICAgICAgICBfX2xlbiA9IF9fdzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBf X291dC53cml0ZShfX3MsIF9fbGVuKTsKICAgICAgICAgICAgICBfX291dC53aWR0aCgwKTsKICAg ICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAg IHsKCgogICAgICAgICAgICAgIF9fb3V0LnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAg ICAgICAgICAgIGlmICgoX19vdXQuZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0g MCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICBl bHNlIGlmICghX19zKQogICAgICAgIF9fb3V0LnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwog ICAgICByZXR1cm4gX19vdXQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw ZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIG9w ZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX291dCwgY29uc3QgY2hh ciogX19zKQogICAgewogICAgICB0eXBlZGVmIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRz PiBfX29zdHJlYW1fdHlwZTsKCgoKICAgICAgdHlwZWRlZiBjaGFyX3RyYWl0czxjaGFyPiBfX3Ry YWl0c190eXBlOwoKICAgICAgdHlwZW5hbWUgX19vc3RyZWFtX3R5cGU6OnNlbnRyeSBfX2NlcmIo X19vdXQpOwogICAgICBpZiAoX19jZXJiICYmIF9fcykKICAgICAgICB7CiAgICAgICAgICBzaXpl X3QgX19jbGVuID0gX190cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcyk7CiAgICAgICAgICBfQ2hhclQq IF9fd3MgPSBzdGF0aWNfY2FzdDxfQ2hhclQqPihfX2J1aWx0aW5fYWxsb2NhKHNpemVvZihfQ2hh clQpICogKF9fY2xlbiArIDEpKSk7CiAgICAgICAgICBmb3IgKHNpemVfdCBfX2kgPSAwOyBfX2kg PCBfX2NsZW47ICsrX19pKQogICAgICAgICAgICBfX3dzW19faV0gPSBfX291dC53aWRlbihfX3Nb X19pXSk7CiAgICAgICAgICBfQ2hhclQqIF9fc3RyID0gX193czsKCiAgICAgICAgICB0cnkKICAg ICAgICAgICAgewogICAgICAgICAgICAgIHN0cmVhbXNpemUgX19sZW4gPSBzdGF0aWNfY2FzdDxz dHJlYW1zaXplPihfX2NsZW4pOwogICAgICAgICAgICAgIHN0cmVhbXNpemUgX193ID0gX19vdXQu d2lkdGgoKTsKICAgICAgICAgICAgICBfQ2hhclQqIF9fcGFkcyA9IHN0YXRpY19jYXN0PF9DaGFy VCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKF9DaGFyVCkgKiBfX3cpKTsKCiAgICAgICAgICAg ICAgaWYgKF9fdyA+IF9fbGVuKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBf X3BhZDxfQ2hhclQsIF9UcmFpdHM+OjpfU19wYWQoX19vdXQsIF9fb3V0LmZpbGwoKSwgX19wYWRz LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX193cywg X193LCBfX2xlbiwgZmFsc2UpOwogICAgICAgICAgICAgICAgICBfX3N0ciA9IF9fcGFkczsKICAg ICAgICAgICAgICAgICAgX19sZW4gPSBfX3c7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg ICAgX19vdXQud3JpdGUoX19zdHIsIF9fbGVuKTsKICAgICAgICAgICAgICBfX291dC53aWR0aCgw KTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAg ICAgICAgIHsKCgogICAgICAgICAgICAgIF9fb3V0LnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQp OwogICAgICAgICAgICAgIGlmICgoX19vdXQuZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJp dCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQog ICAgICBlbHNlIGlmICghX19zKQogICAgICAgIF9fb3V0LnNldHN0YXRlKGlvc19iYXNlOjpiYWRi aXQpOwogICAgICByZXR1cm4gX19vdXQ7CiAgICB9CgoKICB0ZW1wbGF0ZTxjbGFzcyBfVHJhaXRz PgogICAgYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPDwoYmFzaWNf b3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYgX19vdXQsIGNvbnN0IGNoYXIqIF9fcykKICAgIHsKICAg ICAgdHlwZWRlZiBiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+IF9fb3N0cmVhbV90eXBlOwog ICAgICB0eXBlbmFtZSBfX29zdHJlYW1fdHlwZTo6c2VudHJ5IF9fY2VyYihfX291dCk7CiAgICAg IGlmIChfX2NlcmIgJiYgX19zKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7 CiAgICAgICAgICAgICAgc3RyZWFtc2l6ZSBfX3cgPSBfX291dC53aWR0aCgpOwogICAgICAgICAg ICAgIGNoYXIqIF9fcGFkcyA9IHN0YXRpY19jYXN0PGNoYXIqPihfX2J1aWx0aW5fYWxsb2NhKF9f dykpOwogICAgICAgICAgICAgIHN0cmVhbXNpemUgX19sZW4gPSBzdGF0aWNfY2FzdDxzdHJlYW1z aXplPihfVHJhaXRzOjpsZW5ndGgoX19zKSk7CgogICAgICAgICAgICAgIGlmIChfX3cgPiBfX2xl bikKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgX19wYWQ8Y2hhciwgX1RyYWl0 cz46Ol9TX3BhZChfX291dCwgX19vdXQuZmlsbCgpLCBfX3BhZHMsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3MsIF9fdywgX19sZW4sIGZhbHNlKTsK ICAgICAgICAgICAgICAgICAgX19zID0gX19wYWRzOwogICAgICAgICAgICAgICAgICBfX2xlbiA9 IF9fdzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBfX291dC53cml0ZShfX3MsIF9f bGVuKTsKICAgICAgICAgICAgICBfX291dC53aWR0aCgwKTsKICAgICAgICAgICAgfQogICAgICAg ICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAg IF9fb3V0LnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgoX19v dXQuZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAg IHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICBlbHNlIGlmICghX19zKQogICAg ICAgIF9fb3V0LnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICByZXR1cm4gX19vdXQ7 CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5 cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIG9w ZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX291dCwKICAgICAgICAg ICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19zdHIp CiAgICB7CiAgICAgIHR5cGVkZWYgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IF9fb3N0 cmVhbV90eXBlOwogICAgICB0eXBlbmFtZSBfX29zdHJlYW1fdHlwZTo6c2VudHJ5IF9fY2VyYihf X291dCk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgY29uc3QgX0NoYXJU KiBfX3MgPSBfX3N0ci5kYXRhKCk7CiAgICAgICAgICBzdHJlYW1zaXplIF9fdyA9IF9fb3V0Lndp ZHRoKCk7CiAgICAgICAgICBfQ2hhclQqIF9fcGFkcyA9IHN0YXRpY19jYXN0PF9DaGFyVCo+KF9f YnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKF9DaGFyVCkgKiBfX3cpKTsKICAgICAgICAgIHN0cmVhbXNp emUgX19sZW4gPSBzdGF0aWNfY2FzdDxzdHJlYW1zaXplPihfX3N0ci5zaXplKCkpOwoKCgogICAg ICAgICAgaWYgKF9fdyA+IF9fbGVuKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX19wYWQ8 X0NoYXJULCBfVHJhaXRzPjo6X1NfcGFkKF9fb3V0LCBfX291dC5maWxsKCksIF9fcGFkcywgX19z LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3csIF9fbGVu LCBmYWxzZSk7CiAgICAgICAgICAgICAgX19zID0gX19wYWRzOwogICAgICAgICAgICAgIF9fbGVu ID0gX193OwogICAgICAgICAgICB9CiAgICAgICAgICBzdHJlYW1zaXplIF9fcmVzID0gX19vdXQu cmRidWYoKS0+c3B1dG4oX19zLCBfX2xlbik7CiAgICAgICAgICBfX291dC53aWR0aCgwKTsKICAg ICAgICAgIGlmIChfX3JlcyAhPSBfX2xlbikKICAgICAgICAgICAgX19vdXQuc2V0c3RhdGUoaW9z X2Jhc2U6OmZhaWxiaXQpOwogICAgICAgIH0KICAgICAgcmV0dXJuIF9fb3V0OwogICAgfQoKCgoK ICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgYmFzaWNfb3N0cmVhbTxjaGFyPjsKICBleHRlcm4gdGVt cGxhdGUgb3N0cmVhbSYgZW5kbChvc3RyZWFtJik7CiAgZXh0ZXJuIHRlbXBsYXRlIG9zdHJlYW0m IGVuZHMob3N0cmVhbSYpOwogIGV4dGVybiB0ZW1wbGF0ZSBvc3RyZWFtJiBmbHVzaChvc3RyZWFt Jik7CiAgZXh0ZXJuIHRlbXBsYXRlIG9zdHJlYW0mIG9wZXJhdG9yPDwob3N0cmVhbSYsIGNoYXIp OwogIGV4dGVybiB0ZW1wbGF0ZSBvc3RyZWFtJiBvcGVyYXRvcjw8KG9zdHJlYW0mLCB1bnNpZ25l ZCBjaGFyKTsKICBleHRlcm4gdGVtcGxhdGUgb3N0cmVhbSYgb3BlcmF0b3I8PChvc3RyZWFtJiwg c2lnbmVkIGNoYXIpOwogIGV4dGVybiB0ZW1wbGF0ZSBvc3RyZWFtJiBvcGVyYXRvcjw8KG9zdHJl YW0mLCBjb25zdCBjaGFyKik7CiAgZXh0ZXJuIHRlbXBsYXRlIG9zdHJlYW0mIG9wZXJhdG9yPDwo b3N0cmVhbSYsIGNvbnN0IHVuc2lnbmVkIGNoYXIqKTsKICBleHRlcm4gdGVtcGxhdGUgb3N0cmVh bSYgb3BlcmF0b3I8PChvc3RyZWFtJiwgY29uc3Qgc2lnbmVkIGNoYXIqKTsKCgogIGV4dGVybiB0 ZW1wbGF0ZSBjbGFzcyBiYXNpY19vc3RyZWFtPHdjaGFyX3Q+OwogIGV4dGVybiB0ZW1wbGF0ZSB3 b3N0cmVhbSYgZW5kbCh3b3N0cmVhbSYpOwogIGV4dGVybiB0ZW1wbGF0ZSB3b3N0cmVhbSYgZW5k cyh3b3N0cmVhbSYpOwogIGV4dGVybiB0ZW1wbGF0ZSB3b3N0cmVhbSYgZmx1c2god29zdHJlYW0m KTsKICBleHRlcm4gdGVtcGxhdGUgd29zdHJlYW0mIG9wZXJhdG9yPDwod29zdHJlYW0mLCB3Y2hh cl90KTsKICBleHRlcm4gdGVtcGxhdGUgd29zdHJlYW0mIG9wZXJhdG9yPDwod29zdHJlYW0mLCBj aGFyKTsKICBleHRlcm4gdGVtcGxhdGUgd29zdHJlYW0mIG9wZXJhdG9yPDwod29zdHJlYW0mLCBj b25zdCB3Y2hhcl90Kik7CiAgZXh0ZXJuIHRlbXBsYXRlIHdvc3RyZWFtJiBvcGVyYXRvcjw8KHdv c3RyZWFtJiwgY29uc3QgY2hhciopOwoKfQojIDI3NiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvb3N0 cmVhbSIgMiAzCiMgNDYgIi91c3IvaW5jbHVkZS9jKysvMy4yL2lvc3RyZWFtIiAyIDMKIyAxICIv dXNyL2luY2x1ZGUvYysrLzMuMi9pc3RyZWFtIiAxIDMKIyA0MyAiL3Vzci9pbmNsdWRlL2MrKy8z LjIvaXN0cmVhbSIgMwoKCgoKbmFtZXNwYWNlIHN0ZAp7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D aGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGNsYXNzIGJhc2ljX2lzdHJlYW0gOiB2aXJ0dWFs IHB1YmxpYyBiYXNpY19pb3M8X0NoYXJULCBfVHJhaXRzPgogICAgewogICAgcHVibGljOgoKICAg ICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFp dHM6OmludF90eXBlIGludF90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6OnBv c190eXBlIHBvc190eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6Om9mZl90eXBl IG9mZl90eXBlOwogICAgICB0eXBlZGVmIF9UcmFpdHMgdHJhaXRzX3R5cGU7CgoKICAgICAgdHlw ZWRlZiBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiBfX3N0cmVhbWJ1Zl90eXBlOwog ICAgICB0eXBlZGVmIGJhc2ljX2lvczxfQ2hhclQsIF9UcmFpdHM+IF9faW9zX3R5cGU7CiAgICAg IHR5cGVkZWYgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IF9faXN0cmVhbV90eXBlOwog ICAgICB0eXBlZGVmIGlzdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJULCBfVHJhaXRzPiBfX2lzdHJl YW1idWZfaXRlcjsKICAgICAgdHlwZWRlZiBudW1fZ2V0PF9DaGFyVCwgX19pc3RyZWFtYnVmX2l0 ZXI+IF9fbnVtZ2V0X3R5cGU7CiAgICAgIHR5cGVkZWYgY3R5cGU8X0NoYXJUPiBfX2N0eXBlX3R5 cGU7CgogICAgcHJvdGVjdGVkOgoKICAgICAgc3RyZWFtc2l6ZSBfTV9nY291bnQ7CgogICAgcHVi bGljOgoKICAgICAgZXhwbGljaXQKICAgICAgYmFzaWNfaXN0cmVhbShfX3N0cmVhbWJ1Zl90eXBl KiBfX3NiKQogICAgICB7CiAgICAgICAgdGhpcy0+aW5pdChfX3NiKTsKICAgICAgICBfTV9nY291 bnQgPSBzdHJlYW1zaXplKDApOwogICAgICB9CgogICAgICB2aXJ0dWFsCiAgICAgIH5iYXNpY19p c3RyZWFtKCkKICAgICAgeyBfTV9nY291bnQgPSBzdHJlYW1zaXplKDApOyB9CgoKICAgICAgY2xh c3Mgc2VudHJ5OwogICAgICBmcmllbmQgY2xhc3Mgc2VudHJ5OwoKCgogICAgICBfX2lzdHJlYW1f dHlwZSYKICAgICAgb3BlcmF0b3I+PihfX2lzdHJlYW1fdHlwZSYgKCpfX3BmKShfX2lzdHJlYW1f dHlwZSYpKTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj4+KF9faW9zX3R5 cGUmICgqX19wZikoX19pb3NfdHlwZSYpKTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBv cGVyYXRvcj4+KGlvc19iYXNlJiAoKl9fcGYpKGlvc19iYXNlJikpOwoKCiAgICAgIF9faXN0cmVh bV90eXBlJgogICAgICBvcGVyYXRvcj4+KGJvb2wmIF9fbik7CgogICAgICBfX2lzdHJlYW1fdHlw ZSYKICAgICAgb3BlcmF0b3I+PihzaG9ydCYgX19uKTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgog ICAgICBvcGVyYXRvcj4+KHVuc2lnbmVkIHNob3J0JiBfX24pOwoKICAgICAgX19pc3RyZWFtX3R5 cGUmCiAgICAgIG9wZXJhdG9yPj4oaW50JiBfX24pOwoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAg ICAgIG9wZXJhdG9yPj4odW5zaWduZWQgaW50JiBfX24pOwoKICAgICAgX19pc3RyZWFtX3R5cGUm CiAgICAgIG9wZXJhdG9yPj4obG9uZyYgX19uKTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAg ICBvcGVyYXRvcj4+KHVuc2lnbmVkIGxvbmcmIF9fbik7CgoKICAgICAgX19pc3RyZWFtX3R5cGUm CiAgICAgIG9wZXJhdG9yPj4obG9uZyBsb25nJiBfX24pOwoKICAgICAgX19pc3RyZWFtX3R5cGUm CiAgICAgIG9wZXJhdG9yPj4odW5zaWduZWQgbG9uZyBsb25nJiBfX24pOwoKCiAgICAgIF9faXN0 cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj4+KGZsb2F0JiBfX2YpOwoKICAgICAgX19pc3RyZWFt X3R5cGUmCiAgICAgIG9wZXJhdG9yPj4oZG91YmxlJiBfX2YpOwoKICAgICAgX19pc3RyZWFtX3R5 cGUmCiAgICAgIG9wZXJhdG9yPj4obG9uZyBkb3VibGUmIF9fZik7CgogICAgICBfX2lzdHJlYW1f dHlwZSYKICAgICAgb3BlcmF0b3I+Pih2b2lkKiYgX19wKTsKCiAgICAgIF9faXN0cmVhbV90eXBl JgogICAgICBvcGVyYXRvcj4+KF9fc3RyZWFtYnVmX3R5cGUqIF9fc2IpOwoKCiAgICAgIGlubGlu ZSBzdHJlYW1zaXplCiAgICAgIGdjb3VudCh2b2lkKSBjb25zdAogICAgICB7IHJldHVybiBfTV9n Y291bnQ7IH0KCiAgICAgIGludF90eXBlCiAgICAgIGdldCh2b2lkKTsKCiAgICAgIF9faXN0cmVh bV90eXBlJgogICAgICBnZXQoY2hhcl90eXBlJiBfX2MpOwoKICAgICAgX19pc3RyZWFtX3R5cGUm CiAgICAgIGdldChjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24sIGNoYXJfdHlwZSBfX2Rl bGltKTsKCiAgICAgIGlubGluZSBfX2lzdHJlYW1fdHlwZSYKICAgICAgZ2V0KGNoYXJfdHlwZSog X19zLCBzdHJlYW1zaXplIF9fbikKICAgICAgeyByZXR1cm4gdGhpcy0+Z2V0KF9fcywgX19uLCB0 aGlzLT53aWRlbignXG4nKSk7IH0KCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBnZXQoX19z dHJlYW1idWZfdHlwZSYgX19zYiwgY2hhcl90eXBlIF9fZGVsaW0pOwoKICAgICAgaW5saW5lIF9f aXN0cmVhbV90eXBlJgogICAgICBnZXQoX19zdHJlYW1idWZfdHlwZSYgX19zYikKICAgICAgeyBy ZXR1cm4gdGhpcy0+Z2V0KF9fc2IsIHRoaXMtPndpZGVuKCdcbicpKTsgfQoKICAgICAgX19pc3Ry ZWFtX3R5cGUmCiAgICAgIGdldGxpbmUoY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uLCBj aGFyX3R5cGUgX19kZWxpbSk7CgogICAgICBpbmxpbmUgX19pc3RyZWFtX3R5cGUmCiAgICAgIGdl dGxpbmUoY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKQogICAgICB7IHJldHVybiB0aGlz LT5nZXRsaW5lKF9fcywgX19uLCB0aGlzLT53aWRlbignXG4nKSk7IH0KCiAgICAgIF9faXN0cmVh bV90eXBlJgogICAgICBpZ25vcmUoc3RyZWFtc2l6ZSBfX24gPSAxLCBpbnRfdHlwZSBfX2RlbGlt ID0gdHJhaXRzX3R5cGU6OmVvZigpKTsKCiAgICAgIGludF90eXBlCiAgICAgIHBlZWsodm9pZCk7 CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgcmVhZChjaGFyX3R5cGUqIF9fcywgc3RyZWFt c2l6ZSBfX24pOwoKICAgICAgc3RyZWFtc2l6ZQogICAgICByZWFkc29tZShjaGFyX3R5cGUqIF9f cywgc3RyZWFtc2l6ZSBfX24pOwoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIHB1dGJhY2so Y2hhcl90eXBlIF9fYyk7CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgdW5nZXQodm9pZCk7 CgogICAgICBpbnQKICAgICAgc3luYyh2b2lkKTsKCiAgICAgIHBvc190eXBlCiAgICAgIHRlbGxn KHZvaWQpOwoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIHNlZWtnKHBvc190eXBlKTsKCiAg ICAgIF9faXN0cmVhbV90eXBlJgogICAgICBzZWVrZyhvZmZfdHlwZSwgaW9zX2Jhc2U6OnNlZWtk aXIpOwogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz PgogICAgY2xhc3MgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjpzZW50cnkKICAgIHsK ICAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiBfVHJhaXRzIHRyYWl0c190eXBlOwogICAgICB0eXBl ZGVmIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+IF9fc3RyZWFtYnVmX3R5cGU7CiAg ICAgIHR5cGVkZWYgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IF9faXN0cmVhbV90eXBl OwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjpfX2N0eXBlX3R5cGUgX19j dHlwZV90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6OmludF90eXBlIF9faW50 X3R5cGU7CgogICAgICBleHBsaWNpdAogICAgICBzZW50cnkoYmFzaWNfaXN0cmVhbTxfQ2hhclQs IF9UcmFpdHM+JiBfX2lzLCBib29sIF9fbm9za2lwd3MgPSBmYWxzZSk7CgogICAgICBvcGVyYXRv ciBib29sKCkgeyByZXR1cm4gX01fb2s7IH0KCiAgICBwcml2YXRlOgogICAgICBib29sIF9NX29r OwogICAgfTsKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4K ICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPj4oYmFzaWNf aXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2luLCBfQ2hhclQmIF9fYyk7CgogIHRlbXBsYXRl PGNsYXNzIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPGNoYXIsIF9UcmFpdHM+JgogICAgb3Bl cmF0b3I+PihiYXNpY19pc3RyZWFtPGNoYXIsIF9UcmFpdHM+JiBfX2luLCB1bnNpZ25lZCBjaGFy JiBfX2MpCiAgICB7IHJldHVybiAoX19pbiA+PiByZWludGVycHJldF9jYXN0PGNoYXImPihfX2Mp KTsgfQoKICB0ZW1wbGF0ZTxjbGFzcyBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxjaGFyLCBf VHJhaXRzPiYKICAgIG9wZXJhdG9yPj4oYmFzaWNfaXN0cmVhbTxjaGFyLCBfVHJhaXRzPiYgX19p biwgc2lnbmVkIGNoYXImIF9fYykKICAgIHsgcmV0dXJuIChfX2luID4+IHJlaW50ZXJwcmV0X2Nh c3Q8Y2hhciY+KF9fYykpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg X1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIG9wZXJhdG9y Pj4oYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2luLCBfQ2hhclQqIF9fcyk7Cgog IHRlbXBsYXRlPGNsYXNzIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPGNoYXIsX1RyYWl0cz4m CiAgICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08Y2hhcixfVHJhaXRzPiYgX19pbiwgdW5zaWdu ZWQgY2hhciogX19zKQogICAgeyByZXR1cm4gKF9faW4gPj4gcmVpbnRlcnByZXRfY2FzdDxjaGFy Kj4oX19zKSk7IH0KCiAgdGVtcGxhdGU8Y2xhc3MgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08 Y2hhcixfVHJhaXRzPiYKICAgIG9wZXJhdG9yPj4oYmFzaWNfaXN0cmVhbTxjaGFyLF9UcmFpdHM+ JiBfX2luLCBzaWduZWQgY2hhciogX19zKQogICAgeyByZXR1cm4gKF9faW4gPj4gcmVpbnRlcnBy ZXRfY2FzdDxjaGFyKj4oX19zKSk7IH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw ZW5hbWUgX1RyYWl0cz4KICAgIGNsYXNzIGJhc2ljX2lvc3RyZWFtCiAgICA6IHB1YmxpYyBiYXNp Y19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4sCiAgICAgIHB1YmxpYyBiYXNpY19vc3RyZWFtPF9D aGFyVCwgX1RyYWl0cz4KICAgIHsKICAgIHB1YmxpYzoKCgoKICAgICAgdHlwZWRlZiBfQ2hhclQg Y2hhcl90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6OmludF90eXBlIGludF90 eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6OnBvc190eXBlIHBvc190eXBlOwog ICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6Om9mZl90eXBlIG9mZl90eXBlOwogICAgICB0 eXBlZGVmIF9UcmFpdHMgdHJhaXRzX3R5cGU7CgoKCiAgICAgIHR5cGVkZWYgYmFzaWNfaXN0cmVh bTxfQ2hhclQsIF9UcmFpdHM+IF9faXN0cmVhbV90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX29z dHJlYW08X0NoYXJULCBfVHJhaXRzPiBfX29zdHJlYW1fdHlwZTsKCiAgICAgIGV4cGxpY2l0CiAg ICAgIGJhc2ljX2lvc3RyZWFtKGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+KiBfX3Ni KQogICAgICA6IF9faXN0cmVhbV90eXBlKF9fc2IpLCBfX29zdHJlYW1fdHlwZShfX3NiKQogICAg ICB7IH0KCiAgICAgIHZpcnR1YWwKICAgICAgfmJhc2ljX2lvc3RyZWFtKCkgeyB9CiAgICB9OwoK CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNf aXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgd3MoYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9U cmFpdHM+JiBfX2lzKTsKfQoKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9pc3Ry ZWFtLnRjYyIgMSAzCiMgMzYgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvaXN0cmVhbS50Y2Mi IDMKCgoKCm5hbWVzcGFjZSBzdGQKewogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h bWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6c2VudHJ5OjoK ICAgIHNlbnRyeShiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faW4sIGJvb2wgX19u b3NraXB3cykKICAgIHsKICAgICAgaWYgKF9faW4uZ29vZCgpKQogICAgICAgIHsKICAgICAgICAg IGlmIChfX2luLnRpZSgpKQogICAgICAgICAgICBfX2luLnRpZSgpLT5mbHVzaCgpOwogICAgICAg ICAgaWYgKCFfX25vc2tpcHdzICYmIChfX2luLmZsYWdzKCkgJiBpb3NfYmFzZTo6c2tpcHdzKSkK ICAgICAgICAgICAgewogICAgICAgICAgICAgIGNvbnN0IF9faW50X3R5cGUgX19lb2YgPSB0cmFp dHNfdHlwZTo6ZW9mKCk7CiAgICAgICAgICAgICAgX19zdHJlYW1idWZfdHlwZSogX19zYiA9IF9f aW4ucmRidWYoKTsKICAgICAgICAgICAgICBfX2ludF90eXBlIF9fYyA9IF9fc2ItPnNnZXRjKCk7 CgogICAgICAgICAgICAgIGlmIChfX2luLl9NX2NoZWNrX2ZhY2V0KF9faW4uX01fZmN0eXBlKSkK ICAgICAgICAgICAgICAgIHdoaWxlICghdHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKF9fYywgX19l b2YpCiAgICAgICAgICAgICAgICAgICAgICAgJiYgX19pbi5fTV9mY3R5cGUtPmlzKGN0eXBlX2Jh c2U6OnNwYWNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0 cmFpdHNfdHlwZTo6dG9fY2hhcl90eXBlKF9fYykpKQogICAgICAgICAgICAgICAgICBfX2MgPSBf X3NiLT5zbmV4dGMoKTsKCgoKICAgICAgICAgICAgICBpZiAodHJhaXRzX3R5cGU6OmVxX2ludF90 eXBlKF9fYywgX19lb2YpKQogICAgICAgICAgICAgICAgX19pbi5zZXRzdGF0ZShpb3NfYmFzZTo6 ZW9mYml0KTsKCiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICBpZiAoX19pbi5nb29kKCkp CiAgICAgICAgX01fb2sgPSB0cnVlOwogICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgX01f b2sgPSBmYWxzZTsKICAgICAgICAgIF9faW4uc2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwog ICAgICAgIH0KICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh aXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVh bTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIG9wZXJhdG9yPj4oX19pc3RyZWFtX3R5cGUmICgqX19w ZikoX19pc3RyZWFtX3R5cGUmKSkKICAgIHsKICAgICAgX19wZigqdGhpcyk7CiAgICAgIHJldHVy biAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh aXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVh bTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIG9wZXJhdG9yPj4oX19pb3NfdHlwZSYgKCpfX3BmKShf X2lvc190eXBlJikpCiAgICB7CiAgICAgIF9fcGYoKnRoaXMpOwogICAgICByZXR1cm4gKnRoaXM7 CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAg IGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJU LCBfVHJhaXRzPjo6CiAgICBvcGVyYXRvcj4+KGlvc19iYXNlJiAoKl9fcGYpKGlvc19iYXNlJikp CiAgICB7CiAgICAgIF9fcGYoKnRoaXMpOwogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRl bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJl YW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6 CiAgICBvcGVyYXRvcj4+KGJvb2wmIF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhp cywgZmFsc2UpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAg ICAgICAgICB7CiAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUgX19lcnIgPSBpb3NfYmFz ZTo6aW9zdGF0ZShpb3NfYmFzZTo6Z29vZGJpdCk7CiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNr X2ZhY2V0KF9NX2ZudW1nZXQpKQogICAgICAgICAgICAgICAgX01fZm51bWdldC0+Z2V0KCp0aGlz LCAwLCAqdGhpcywgX19lcnIsIF9fbik7CiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoX19l cnIpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAg ICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJp dCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFk Yml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9 CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0 eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAg YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIG9wZXJhdG9yPj4oc2hvcnQmIF9f bikKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgZmFsc2UpOwogICAgICBpZiAoX19j ZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAg aW9zX2Jhc2U6Omlvc3RhdGUgX19lcnIgPSBpb3NfYmFzZTo6aW9zdGF0ZShpb3NfYmFzZTo6Z29v ZGJpdCk7CiAgICAgICAgICAgICAgbG9uZyBfX2w7CiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNr X2ZhY2V0KF9NX2ZudW1nZXQpKQogICAgICAgICAgICAgICAgX01fZm51bWdldC0+Z2V0KCp0aGlz LCAwLCAqdGhpcywgX19lcnIsIF9fbCk7CgoKICAgICAgICAgICAgICBpZiAoIShfX2VyciAmIGlv c19iYXNlOjpmYWlsYml0KQogICAgICAgICAgICAgICAgICAmJiAobnVtZXJpY19saW1pdHM8c2hv cnQ+OjptaW4oKSA8PSBfX2wKICAgICAgICAgICAgICAgICAgICAgICYmIF9fbCA8PSBudW1lcmlj X2xpbWl0czxzaG9ydD46Om1heCgpKSkKICAgICAgICAgICAgICAgIF9fbiA9IF9fbDsKICAgICAg ICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsK CiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoX19lcnIpOwogICAgICAgICAgICB9CiAgICAg ICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAg ICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0 aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAg ICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAg IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFz aWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9U cmFpdHM+OjoKICAgIG9wZXJhdG9yPj4odW5zaWduZWQgc2hvcnQmIF9fbikKICAgIHsKICAgICAg c2VudHJ5IF9fY2VyYigqdGhpcywgZmFsc2UpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsK ICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3Rh dGUgX19lcnIgPSBpb3NfYmFzZTo6aW9zdGF0ZShpb3NfYmFzZTo6Z29vZGJpdCk7CiAgICAgICAg ICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1nZXQpKQogICAgICAgICAgICAgICAgX01f Zm51bWdldC0+Z2V0KCp0aGlzLCAwLCAqdGhpcywgX19lcnIsIF9fbik7CiAgICAgICAgICAgICAg dGhpcy0+c2V0c3RhdGUoX19lcnIpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNl cHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3Rh dGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25z KCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAg ICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hh clQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIG9w ZXJhdG9yPj4oaW50JiBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIGZhbHNl KTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAg ewogICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlIF9fZXJyID0gaW9zX2Jhc2U6Omlvc3Rh dGUoaW9zX2Jhc2U6Omdvb2RiaXQpOwogICAgICAgICAgICAgIGxvbmcgX19sOwogICAgICAgICAg ICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtZ2V0KSkKICAgICAgICAgICAgICAgIF9NX2Zu dW1nZXQtPmdldCgqdGhpcywgMCwgKnRoaXMsIF9fZXJyLCBfX2wpOwoKCiAgICAgICAgICAgICAg aWYgKCEoX19lcnIgJiBpb3NfYmFzZTo6ZmFpbGJpdCkKICAgICAgICAgICAgICAgICAgJiYgKG51 bWVyaWNfbGltaXRzPGludD46Om1pbigpIDw9IF9fbAogICAgICAgICAgICAgICAgICAgICAgJiYg X19sIDw9IG51bWVyaWNfbGltaXRzPGludD46Om1heCgpKSkKICAgICAgICAgICAgICAgIF9fbiA9 IF9fbDsKICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICBfX2VyciB8PSBpb3NfYmFz ZTo6ZmFpbGJpdDsKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoX19lcnIpOwogICAgICAg ICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoK CiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAg ICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQog ICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVy biAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh aXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVh bTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIG9wZXJhdG9yPj4odW5zaWduZWQgaW50JiBfX24pCiAg ICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIGZhbHNlKTsKICAgICAgaWYgKF9fY2VyYikK ICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlvc19i YXNlOjppb3N0YXRlIF9fZXJyID0gaW9zX2Jhc2U6Omlvc3RhdGUoaW9zX2Jhc2U6Omdvb2RiaXQp OwogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtZ2V0KSkKICAgICAgICAg ICAgICAgIF9NX2ZudW1nZXQtPmdldCgqdGhpcywgMCwgKnRoaXMsIF9fZXJyLCBfX24pOwogICAg ICAgICAgICAgIHRoaXMtPnNldHN0YXRlKF9fZXJyKTsKICAgICAgICAgICAgfQogICAgICAgICAg Y2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRo aXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRo cm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9Cgog IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lz dHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRz Pjo6CiAgICBvcGVyYXRvcj4+KGxvbmcmIF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigq dGhpcywgZmFsc2UpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQog ICAgICAgICAgICB7CiAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUgX19lcnIgPSBpb3Nf YmFzZTo6aW9zdGF0ZShpb3NfYmFzZTo6Z29vZGJpdCk7CiAgICAgICAgICAgICAgaWYgKF9NX2No ZWNrX2ZhY2V0KF9NX2ZudW1nZXQpKQogICAgICAgICAgICAgICAgX01fZm51bWdldC0+Z2V0KCp0 aGlzLCAwLCAqdGhpcywgX19lcnIsIF9fbik7CiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUo X19lcnIpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkK ICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJh ZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6 YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAg ICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU LCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Jgog ICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIG9wZXJhdG9yPj4odW5zaWdu ZWQgbG9uZyYgX19uKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCBmYWxzZSk7CiAg ICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAg ICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNlOjppb3N0YXRlKGlv c19iYXNlOjpnb29kYml0KTsKICAgICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51 bWdldCkpCiAgICAgICAgICAgICAgICBfTV9mbnVtZ2V0LT5nZXQoKnRoaXMsIDAsICp0aGlzLCBf X2VyciwgX19uKTsKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShfX2Vycik7CiAgICAgICAg ICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoK ICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAg ICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAg ICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJu ICp0aGlzOwogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh aXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVh bTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIG9wZXJhdG9yPj4obG9uZyBsb25nJiBfX24pCiAgICB7 CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIGZhbHNlKTsKICAgICAgaWYgKF9fY2VyYikKICAg ICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlvc19iYXNl Ojppb3N0YXRlIF9fZXJyID0gaW9zX2Jhc2U6Omlvc3RhdGUoaW9zX2Jhc2U6Omdvb2RiaXQpOwog ICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtZ2V0KSkKICAgICAgICAgICAg ICAgIF9NX2ZudW1nZXQtPmdldCgqdGhpcywgMCwgKnRoaXMsIF9fZXJyLCBfX24pOwogICAgICAg ICAgICAgIHRoaXMtPnNldHN0YXRlKF9fZXJyKTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0 Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMt PnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhj ZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICB0aHJvdzsK ICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFt PF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46Ogog ICAgb3BlcmF0b3I+Pih1bnNpZ25lZCBsb25nIGxvbmcmIF9fbikKICAgIHsKICAgICAgc2VudHJ5 IF9fY2VyYigqdGhpcywgZmFsc2UpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAg ICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUgX19l cnIgPSBpb3NfYmFzZTo6aW9zdGF0ZShpb3NfYmFzZTo6Z29vZGJpdCk7CiAgICAgICAgICAgICAg aWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1nZXQpKQogICAgICAgICAgICAgICAgX01fZm51bWdl dC0+Z2V0KCp0aGlzLCAwLCAqdGhpcywgX19lcnIsIF9fbik7CiAgICAgICAgICAgICAgdGhpcy0+ c2V0c3RhdGUoX19lcnIpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24m IF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9z X2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBp b3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAg IH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVu YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBf VHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBvcGVyYXRv cj4+KGZsb2F0JiBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIGZhbHNlKTsK ICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewog ICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlIF9fZXJyID0gaW9zX2Jhc2U6Omlvc3RhdGUo aW9zX2Jhc2U6Omdvb2RiaXQpOwogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9m bnVtZ2V0KSkKICAgICAgICAgICAgICAgIF9NX2ZudW1nZXQtPmdldCgqdGhpcywgMCwgKnRoaXMs IF9fZXJyLCBfX24pOwogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKF9fZXJyKTsKICAgICAg ICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsK CgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAg ICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkK ICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1 cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry YWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJl YW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBvcGVyYXRvcj4+KGRvdWJsZSYgX19uKQogICAgewog ICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCBmYWxzZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAg ICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpb3NfYmFzZTo6 aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNlOjppb3N0YXRlKGlvc19iYXNlOjpnb29kYml0KTsKICAg ICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bWdldCkpCiAgICAgICAgICAgICAg ICBfTV9mbnVtZ2V0LT5nZXQoKnRoaXMsIDAsICp0aGlzLCBfX2VyciwgX19uKTsKICAgICAgICAg ICAgICB0aGlzLT5zZXRzdGF0ZShfX2Vycik7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNo KGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5z ZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2Vw dGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsK ICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFt PF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46Ogog ICAgb3BlcmF0b3I+Pihsb25nIGRvdWJsZSYgX19uKQogICAgewogICAgICBzZW50cnkgX19jZXJi KCp0aGlzLCBmYWxzZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5 CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSBfX2VyciA9IGlv c19iYXNlOjppb3N0YXRlKGlvc19iYXNlOjpnb29kYml0KTsKICAgICAgICAgICAgICBpZiAoX01f Y2hlY2tfZmFjZXQoX01fZm51bWdldCkpCiAgICAgICAgICAgICAgICBfTV9mbnVtZ2V0LT5nZXQo KnRoaXMsIDAsICp0aGlzLCBfX2VyciwgX19uKTsKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0 ZShfX2Vycik7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWls KQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6 YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNl OjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAg ICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh clQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4m CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3BlcmF0b3I+Pih2b2lk KiYgX19uKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCBmYWxzZSk7CiAgICAgIGlm IChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAg ICAgICBpb3NfYmFzZTo6aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNlOjppb3N0YXRlKGlvc19iYXNl Ojpnb29kYml0KTsKICAgICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bWdldCkp CiAgICAgICAgICAgICAgICBfTV9mbnVtZ2V0LT5nZXQoKnRoaXMsIDAsICp0aGlzLCBfX2Vyciwg X19uKTsKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShfX2Vycik7CiAgICAgICAgICAgIH0K ICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAg ICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBp ZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAg ICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlz OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAg ICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFy VCwgX1RyYWl0cz46OgogICAgb3BlcmF0b3I+PihfX3N0cmVhbWJ1Zl90eXBlKiBfX3Nib3V0KQog ICAgewogICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgZmFsc2UpOwogICAgICAgaWYgKF9fY2Vy YikKICAgICAgICAgewogICAgICAgICAgIHRyeQogICAgICAgICAgICAgewogICAgICAgICAgICAg ICBzdHJlYW1zaXplIF9feHRyY3QgPSAwOwogICAgICAgICAgICAgICBpZiAoX19zYm91dCkKICAg ICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3Ni aW4gPSB0aGlzLT5yZGJ1ZigpOwogICAgICAgICAgICAgICAgICAgX194dHJjdCA9IF9fY29weV9z dHJlYW1idWZzKCp0aGlzLCBfX3NiaW4sIF9fc2JvdXQpOwogICAgICAgICAgICAgICAgIH0KICAg ICAgICAgICAgICAgaWYgKCFfX3Nib3V0IHx8ICFfX3h0cmN0KQogICAgICAgICAgICAgICAgIHRo aXMtPnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAgICAgICAgIH0KICAgICAgICAg ICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgIHsKCgogICAgICAgICAgICAg ICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICAgaWYgKCh0 aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAg ICAgIHRocm93OwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICByZXR1cm4gKnRoaXM7 CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAg IHR5cGVuYW1lIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6aW50X3R5cGUKICAgIGJh c2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBnZXQodm9pZCkKICAgIHsKICAgICAg Y29uc3QgaW50X3R5cGUgX19lb2YgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7CiAgICAgIGludF90eXBl IF9fYyA9IF9fZW9mOwogICAgICBfTV9nY291bnQgPSAwOwogICAgICBzZW50cnkgX19jZXJiKCp0 aGlzLCB0cnVlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAg ICAgICAgICAgewogICAgICAgICAgICAgIF9fYyA9IHRoaXMtPnJkYnVmKCktPnNidW1wYygpOwoK ICAgICAgICAgICAgICBpZiAoIXRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfX2MsIF9fZW9mKSkK ICAgICAgICAgICAgICAgIF9NX2djb3VudCA9IDE7CiAgICAgICAgICAgICAgZWxzZQogICAgICAg ICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmVvZmJpdCB8IGlvc19iYXNlOjpmYWls Yml0KTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAg ICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRi aXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJh ZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAg fQogICAgICByZXR1cm4gX19jOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5 cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBi YXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgZ2V0KGNoYXJfdHlwZSYgX19jKQog ICAgewogICAgICBfTV9nY291bnQgPSAwOwogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCB0cnVl KTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAg ewogICAgICAgICAgICAgIGNvbnN0IGludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6OmVvZigp OwogICAgICAgICAgICAgIGludF90eXBlIF9fYnVmdmFsID0gdGhpcy0+cmRidWYoKS0+c2J1bXBj KCk7CgogICAgICAgICAgICAgIGlmICghdHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKF9fYnVmdmFs LCBfX2VvZikpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIF9NX2djb3VudCA9 IDE7CiAgICAgICAgICAgICAgICAgIF9fYyA9IHRyYWl0c190eXBlOjp0b19jaGFyX3R5cGUoX19i dWZ2YWwpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAg ICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjplb2ZiaXQgfCBpb3NfYmFzZTo6ZmFpbGJpdCk7 CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAg ICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsK ICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQp ICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAg ICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu YW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNp Y19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgZ2V0KGNoYXJfdHlwZSogX19zLCBzdHJl YW1zaXplIF9fbiwgY2hhcl90eXBlIF9fZGVsaW0pCiAgICB7CiAgICAgIF9NX2djb3VudCA9IDA7 CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIHRydWUpOwogICAgICBpZiAoX19jZXJiKQogICAg ICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgY29uc3QgaW50 X3R5cGUgX19pZGVsaW0gPSB0cmFpdHNfdHlwZTo6dG9faW50X3R5cGUoX19kZWxpbSk7CiAgICAg ICAgICAgICAgY29uc3QgaW50X3R5cGUgX19lb2YgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7CiAgICAg ICAgICAgICAgX19zdHJlYW1idWZfdHlwZSogX19zYiA9IHRoaXMtPnJkYnVmKCk7CiAgICAgICAg ICAgICAgaW50X3R5cGUgX19jID0gX19zYi0+c2dldGMoKTsKCiAgICAgICAgICAgICAgd2hpbGUg KF9NX2djb3VudCArIDEgPCBfX24KICAgICAgICAgICAgICAgICAgICAgJiYgIXRyYWl0c190eXBl OjplcV9pbnRfdHlwZShfX2MsIF9fZW9mKQogICAgICAgICAgICAgICAgICAgICAmJiAhdHJhaXRz X3R5cGU6OmVxX2ludF90eXBlKF9fYywgX19pZGVsaW0pKQogICAgICAgICAgICAgICAgewogICAg ICAgICAgICAgICAgICAqX19zKysgPSB0cmFpdHNfdHlwZTo6dG9fY2hhcl90eXBlKF9fYyk7CiAg ICAgICAgICAgICAgICAgIF9fYyA9IF9fc2ItPnNuZXh0YygpOwogICAgICAgICAgICAgICAgICAr K19NX2djb3VudDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBpZiAodHJhaXRzX3R5 cGU6OmVxX2ludF90eXBlKF9fYywgX19lb2YpKQogICAgICAgICAgICAgICAgdGhpcy0+c2V0c3Rh dGUoaW9zX2Jhc2U6OmVvZmJpdCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2Vw dGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0 ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMo KSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAg ICAgICAgfQogICAgICAgIH0KICAgICAgKl9fcyA9IGNoYXJfdHlwZSgpOwogICAgICBpZiAoIV9N X2djb3VudCkKICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAg IHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt ZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNf aXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIGdldChfX3N0cmVhbWJ1Zl90eXBlJiBfX3Ni LCBjaGFyX3R5cGUgX19kZWxpbSkKICAgIHsKICAgICAgX01fZ2NvdW50ID0gMDsKICAgICAgc2Vu dHJ5IF9fY2VyYigqdGhpcywgdHJ1ZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAg ICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBjb25zdCBpbnRfdHlwZSBfX2lk ZWxpbSA9IHRyYWl0c190eXBlOjp0b19pbnRfdHlwZShfX2RlbGltKTsKICAgICAgICAgICAgICBj b25zdCBpbnRfdHlwZSBfX2VvZiA9IHRyYWl0c190eXBlOjplb2YoKTsKICAgICAgICAgICAgICBf X3N0cmVhbWJ1Zl90eXBlKiBfX3RoaXNfc2IgPSB0aGlzLT5yZGJ1ZigpOwogICAgICAgICAgICAg IGludF90eXBlIF9fYyA9IF9fdGhpc19zYi0+c2dldGMoKTsKICAgICAgICAgICAgICBjaGFyX3R5 cGUgX19jMiA9IHRyYWl0c190eXBlOjp0b19jaGFyX3R5cGUoX19jKTsKCiAgICAgICAgICAgICAg d2hpbGUgKCF0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX19jLCBfX2VvZikKICAgICAgICAgICAg ICAgICAgICAgJiYgIXRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfX2MsIF9faWRlbGltKQogICAg ICAgICAgICAgICAgICAgICAmJiAhdHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKF9fc2Iuc3B1dGMo X19jMiksIF9fZW9mKSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgKytfTV9n Y291bnQ7CiAgICAgICAgICAgICAgICAgIF9fYyA9IF9fdGhpc19zYi0+c25leHRjKCk7CiAgICAg ICAgICAgICAgICAgIF9fYzIgPSB0cmFpdHNfdHlwZTo6dG9fY2hhcl90eXBlKF9fYyk7CiAgICAg ICAgICAgICAgICB9CiAgICAgICAgICAgICAgaWYgKHRyYWl0c190eXBlOjplcV9pbnRfdHlwZShf X2MsIF9fZW9mKSkKICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjplb2Zi aXQpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAg ICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJp dCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFk Yml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9 CiAgICAgIGlmICghX01fZ2NvdW50KQogICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpm YWlsYml0KTsKICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0 cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgZ2V0bGluZShjaGFy X3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24sIGNoYXJfdHlwZSBfX2RlbGltKQogICAgewogICAg ICBfTV9nY291bnQgPSAwOwogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCB0cnVlKTsKICAgICAg aWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAg ICAgICAgIGNvbnN0IGludF90eXBlIF9faWRlbGltID0gdHJhaXRzX3R5cGU6OnRvX2ludF90eXBl KF9fZGVsaW0pOwogICAgICAgICAgICAgIGNvbnN0IGludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5 cGU6OmVvZigpOwogICAgICAgICAgICAgIF9fc3RyZWFtYnVmX3R5cGUqIF9fc2IgPSB0aGlzLT5y ZGJ1ZigpOwogICAgICAgICAgICAgIGludF90eXBlIF9fYyA9IF9fc2ItPnNnZXRjKCk7CgogICAg ICAgICAgICAgIHdoaWxlIChfTV9nY291bnQgKyAxIDwgX19uCiAgICAgICAgICAgICAgICAgICAg ICYmICF0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX19jLCBfX2VvZikKICAgICAgICAgICAgICAg ICAgICAgJiYgIXRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfX2MsIF9faWRlbGltKSkKICAgICAg ICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgKl9fcysrID0gdHJhaXRzX3R5cGU6OnRvX2No YXJfdHlwZShfX2MpOwogICAgICAgICAgICAgICAgICBfX2MgPSBfX3NiLT5zbmV4dGMoKTsKICAg ICAgICAgICAgICAgICAgKytfTV9nY291bnQ7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg ICAgaWYgKHRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfX2MsIF9fZW9mKSkKICAgICAgICAgICAg ICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjplb2ZiaXQpOwogICAgICAgICAgICAgIGVsc2UK ICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgaWYgKHRyYWl0c190eXBlOjplcV9p bnRfdHlwZShfX2MsIF9faWRlbGltKSkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAg ICAgICAgICAgICBfX3NiLT5zYnVtcGMoKTsKICAgICAgICAgICAgICAgICAgICAgICsrX01fZ2Nv dW50OwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAg ICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAgICAg ICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwp CiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpi YWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6 OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAg ICAgfQogICAgICAqX19zID0gY2hhcl90eXBlKCk7CiAgICAgIGlmICghX01fZ2NvdW50KQogICAg ICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAgcmV0dXJuICp0aGlz OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAg ICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFy VCwgX1RyYWl0cz46OgogICAgaWdub3JlKHN0cmVhbXNpemUgX19uLCBpbnRfdHlwZSBfX2RlbGlt KQogICAgewogICAgICBfTV9nY291bnQgPSAwOwogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCB0 cnVlKTsKICAgICAgaWYgKF9fY2VyYiAmJiBfX24gPiAwKQogICAgICAgIHsKICAgICAgICAgIHRy eQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgY29uc3QgaW50X3R5cGUgX19lb2YgPSB0cmFp dHNfdHlwZTo6ZW9mKCk7CiAgICAgICAgICAgICAgX19zdHJlYW1idWZfdHlwZSogX19zYiA9IHRo aXMtPnJkYnVmKCk7CiAgICAgICAgICAgICAgaW50X3R5cGUgX19jOwoKICAgICAgICAgICAgICBf X24gPSBtaW4oX19uLCBudW1lcmljX2xpbWl0czxzdHJlYW1zaXplPjo6bWF4KCkpOwogICAgICAg ICAgICAgIHdoaWxlIChfTV9nY291bnQgPCBfX24KICAgICAgICAgICAgICAgICAgICAgJiYgIXRy YWl0c190eXBlOjplcV9pbnRfdHlwZShfX2MgPSBfX3NiLT5zYnVtcGMoKSwgX19lb2YpKQogICAg ICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICArK19NX2djb3VudDsKICAgICAgICAgICAg ICAgICAgaWYgKHRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfX2MsIF9fZGVsaW0pKQogICAgICAg ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGlmICh0 cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX19jLCBfX2VvZikpCiAgICAgICAgICAgICAgICB0aGlz LT5zZXRzdGF0ZShpb3NfYmFzZTo6ZW9mYml0KTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0 Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMt PnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhj ZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93 OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRl bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIHR5cGVuYW1lIGJh c2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6aW50X3R5cGUKICAgIGJhc2ljX2lzdHJlYW08 X0NoYXJULCBfVHJhaXRzPjo6CiAgICBwZWVrKHZvaWQpCiAgICB7CiAgICAgIGludF90eXBlIF9f YyA9IHRyYWl0c190eXBlOjplb2YoKTsKICAgICAgX01fZ2NvdW50ID0gMDsKICAgICAgc2VudHJ5 IF9fY2VyYigqdGhpcywgdHJ1ZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAg ICAgdHJ5CiAgICAgICAgICAgIHsgX19jID0gdGhpcy0+cmRidWYoKS0+c2dldGMoKTsgfQogICAg ICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAg ICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgo dGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAg ICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gX19jOwogICAg fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNp Y19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1Ry YWl0cz46OgogICAgcmVhZChjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pCiAgICB7CiAg ICAgIF9NX2djb3VudCA9IDA7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIHRydWUpOwogICAg ICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAg ICAgICAgICAgX01fZ2NvdW50ID0gdGhpcy0+cmRidWYoKS0+c2dldG4oX19zLCBfX24pOwogICAg ICAgICAgICAgIGlmIChfTV9nY291bnQgIT0gX19uKQogICAgICAgICAgICAgICAgdGhpcy0+c2V0 c3RhdGUoaW9zX2Jhc2U6OmVvZmJpdCB8IGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAgICAgICAg fQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAg ICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAg IGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAg ICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICBlbHNlCiAgICAg ICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwogICAgICByZXR1cm4gKnRoaXM7 CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAg IHN0cmVhbXNpemUKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICByZWFk c29tZShjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pCiAgICB7CiAgICAgIF9NX2djb3Vu dCA9IDA7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIHRydWUpOwogICAgICBpZiAoX19jZXJi KQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CgogICAgICAgICAgICAgIHN0 cmVhbXNpemUgX19udW0gPSB0aGlzLT5yZGJ1ZigpLT5pbl9hdmFpbCgpOwogICAgICAgICAgICAg IGlmIChfX251bSA+PSAwKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBfX251 bSA9IG1pbihfX251bSwgX19uKTsKICAgICAgICAgICAgICAgICAgaWYgKF9fbnVtKQogICAgICAg ICAgICAgICAgICAgIF9NX2djb3VudCA9IHRoaXMtPnJkYnVmKCktPnNnZXRuKF9fcywgX19udW0p OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIHRo aXMtPnNldHN0YXRlKGlvc19iYXNlOjplb2ZiaXQpOwogICAgICAgICAgICB9CiAgICAgICAgICBj YXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhp cy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5l eGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhy b3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIGVsc2UKICAgICAgICB0aGlzLT5zZXRz dGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAgIHJldHVybiBfTV9nY291bnQ7CiAgICB9Cgog IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lz dHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRz Pjo6CiAgICBwdXRiYWNrKGNoYXJfdHlwZSBfX2MpCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIo KnRoaXMsIHRydWUpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQog ICAgICAgICAgICB7CiAgICAgICAgICAgICAgY29uc3QgaW50X3R5cGUgX19lb2YgPSB0cmFpdHNf dHlwZTo6ZW9mKCk7CiAgICAgICAgICAgICAgX19zdHJlYW1idWZfdHlwZSogX19zYiA9IHRoaXMt PnJkYnVmKCk7CiAgICAgICAgICAgICAgaWYgKCFfX3NiCiAgICAgICAgICAgICAgICAgIHx8IHRy YWl0c190eXBlOjplcV9pbnRfdHlwZShfX3NiLT5zcHV0YmFja2MoX19jKSwgX19lb2YpKQogICAg ICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAg IH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAg ICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAg ICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAg ICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgZWxzZQogICAg ICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAgcmV0dXJuICp0aGlz OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAg ICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFy VCwgX1RyYWl0cz46OgogICAgdW5nZXQodm9pZCkKICAgIHsKICAgICAgX01fZ2NvdW50ID0gMDsK ICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgdHJ1ZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAg ICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBjb25zdCBpbnRf dHlwZSBfX2VvZiA9IHRyYWl0c190eXBlOjplb2YoKTsKICAgICAgICAgICAgICBfX3N0cmVhbWJ1 Zl90eXBlKiBfX3NiID0gdGhpcy0+cmRidWYoKTsKICAgICAgICAgICAgICBpZiAoIV9fc2IKICAg ICAgICAgICAgICAgICAgfHwgdHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKF9fc2ItPnN1bmdldGMo KSwgX19lb2YpKQogICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJp dCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAg ICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0 KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRi aXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0K ICAgICAgZWxzZQogICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKICAg ICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu YW1lIF9UcmFpdHM+CiAgICBpbnQKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6 CiAgICBzeW5jKHZvaWQpCiAgICB7CiAgICAgIGludCBfX3JldCA9IC0xOwogICAgICBfTV9nY291 bnQgPSAwOwogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCB0cnVlKTsKICAgICAgaWYgKF9fY2Vy YikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIF9f c3RyZWFtYnVmX3R5cGUqIF9fc2IgPSB0aGlzLT5yZGJ1ZigpOwogICAgICAgICAgICAgIGlmIChf X3NiKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBpZiAoX19zYi0+cHVic3lu YygpID09IC0xKQogICAgICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpi YWRiaXQpOwogICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgX19yZXQg PSAwOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNl cHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3Rh dGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25z KCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAg ICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiBfX3JldDsKICAgIH0KCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgdHlwZW5hbWUgYmFzaWNfaXN0 cmVhbTxfQ2hhclQsIF9UcmFpdHM+Ojpwb3NfdHlwZQogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQs IF9UcmFpdHM+OjoKICAgIHRlbGxnKHZvaWQpCiAgICB7CiAgICAgIHBvc190eXBlIF9fcmV0ID0g cG9zX3R5cGUoLTEpOwogICAgICBpZiAoIXRoaXMtPmZhaWwoKSkKICAgICAgICBfX3JldCA9IHRo aXMtPnJkYnVmKCktPnB1YnNlZWtvZmYoMCwgaW9zX2Jhc2U6OmN1ciwgaW9zX2Jhc2U6OmluKTsK ICAgICAgcmV0dXJuIF9fcmV0OwogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0 eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAg YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIHNlZWtnKHBvc190eXBlIF9fcG9z KQogICAgewogICAgICBfTV9nY291bnQgPSAwOwogICAgICBpZiAoIXRoaXMtPmZhaWwoKSkKICAg ICAgICB7CgoKICAgICAgICAgIHBvc190eXBlIF9fZXJyID0gdGhpcy0+cmRidWYoKS0+cHVic2Vl a3BvcyhfX3BvcywgaW9zX2Jhc2U6OmluKTsKCgogICAgICAgICAgaWYgKF9fZXJyID09IHBvc190 eXBlKG9mZl90eXBlKC0xKSkpCiAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpm YWlsYml0KTsKCiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRl PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0No YXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBz ZWVrZyhvZmZfdHlwZSBfX29mZiwgaW9zX2Jhc2U6OnNlZWtkaXIgX19kaXIpCiAgICB7CiAgICAg IF9NX2djb3VudCA9IDA7CiAgICAgIGlmICghdGhpcy0+ZmFpbCgpKQogICAgICAgIHsKCgogICAg ICAgICAgcG9zX3R5cGUgX19lcnIgPSB0aGlzLT5yZGJ1ZigpLT5wdWJzZWVrb2ZmKF9fb2ZmLCBf X2RpciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBpb3NfYmFzZTo6aW4pOwoKCiAgICAgICAgICBpZiAoX19lcnIgPT0gcG9zX3R5cGUob2ZmX3R5 cGUoLTEpKSkKICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwoK ICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1l IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJh aXRzPiYKICAgIG9wZXJhdG9yPj4oYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2lu LCBfQ2hhclQmIF9fYykKICAgIHsKICAgICAgdHlwZWRlZiBiYXNpY19pc3RyZWFtPF9DaGFyVCwg X1RyYWl0cz4gX19pc3RyZWFtX3R5cGU7CiAgICAgIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjpz ZW50cnkgX19jZXJiKF9faW4sIGZhbHNlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAg ICAgICAgICB0cnkKICAgICAgICAgICAgeyBfX2luLmdldChfX2MpOyB9CiAgICAgICAgICBjYXRj aChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgX19pbi5z ZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKF9faW4uZXhjZXB0 aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93Owog ICAgICAgICAgICB9CiAgICAgICAgfQogICAgICBlbHNlCiAgICAgICAgX19pbi5zZXRzdGF0ZShp b3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAgIHJldHVybiBfX2luOwogICAgfQoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFy VCwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRz PiYgX19pbiwgX0NoYXJUKiBfX3MpCiAgICB7CiAgICAgIHR5cGVkZWYgYmFzaWNfaXN0cmVhbTxf Q2hhclQsIF9UcmFpdHM+IF9faXN0cmVhbV90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9f aXN0cmVhbV90eXBlOjpfX3N0cmVhbWJ1Zl90eXBlIF9fc3RyZWFtYnVmX3R5cGU7CiAgICAgIHR5 cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6aW50X3R5cGUgaW50X3R5cGU7CiAgICAgIHR5cGVkZWYg X0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBjdHlwZTxfQ2hhclQ+IF9fY3R5cGVfdHlw ZTsKICAgICAgc3RyZWFtc2l6ZSBfX2V4dHJhY3RlZCA9IDA7CgogICAgICB0eXBlbmFtZSBfX2lz dHJlYW1fdHlwZTo6c2VudHJ5IF9fY2VyYihfX2luLCBmYWxzZSk7CiAgICAgIGlmIChfX2NlcmIp CiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgc3Ry ZWFtc2l6ZSBfX251bSA9IF9faW4ud2lkdGgoKTsKICAgICAgICAgICAgICBpZiAoX19udW0gPT0g MCkKICAgICAgICAgICAgICAgIF9fbnVtID0gbnVtZXJpY19saW1pdHM8c3RyZWFtc2l6ZT46Om1h eCgpOwoKICAgICAgICAgICAgICBjb25zdCBfX2N0eXBlX3R5cGUmIF9fY3R5cGUgPSB1c2VfZmFj ZXQ8X19jdHlwZV90eXBlPihfX2luLmdldGxvYygpKTsKICAgICAgICAgICAgICBjb25zdCBpbnRf dHlwZSBfX2VvZiA9IF9UcmFpdHM6OmVvZigpOwogICAgICAgICAgICAgIF9fc3RyZWFtYnVmX3R5 cGUqIF9fc2IgPSBfX2luLnJkYnVmKCk7CiAgICAgICAgICAgICAgaW50X3R5cGUgX19jID0gX19z Yi0+c2dldGMoKTsKCiAgICAgICAgICAgICAgd2hpbGUgKF9fZXh0cmFjdGVkIDwgX19udW0gLSAx CiAgICAgICAgICAgICAgICAgICAgICYmICFfVHJhaXRzOjplcV9pbnRfdHlwZShfX2MsIF9fZW9m KQogICAgICAgICAgICAgICAgICAgICAmJiAhX19jdHlwZS5pcyhjdHlwZV9iYXNlOjpzcGFjZSwg X19jKSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgKl9fcysrID0gX19jOwog ICAgICAgICAgICAgICAgICArK19fZXh0cmFjdGVkOwogICAgICAgICAgICAgICAgICBfX2MgPSBf X3NiLT5zbmV4dGMoKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBpZiAoX1RyYWl0 czo6ZXFfaW50X3R5cGUoX19jLCBfX2VvZikpCiAgICAgICAgICAgICAgICBfX2luLnNldHN0YXRl KGlvc19iYXNlOjplb2ZiaXQpOwoKCgogICAgICAgICAgICAgICpfX3MgPSBjaGFyX3R5cGUoKTsK CiAgICAgICAgICAgICAgX19pbi53aWR0aCgwKTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0 Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIF9faW4u c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKChfX2luLmV4Y2Vw dGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsK ICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgaWYgKCFfX2V4dHJhY3RlZCkKICAgICAgICBf X2luLnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAgcmV0dXJuIF9faW47CiAgICB9 CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNp Y19pc3RyZWFtPF9DaGFyVCxfVHJhaXRzPiYKICAgIHdzKGJhc2ljX2lzdHJlYW08X0NoYXJULF9U cmFpdHM+JiBfX2luKQogICAgewogICAgICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08X0NoYXJULCBf VHJhaXRzPiBfX2lzdHJlYW1fdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lzdHJlYW1f dHlwZTo6X19zdHJlYW1idWZfdHlwZSBfX3N0cmVhbWJ1Zl90eXBlOwogICAgICB0eXBlZGVmIHR5 cGVuYW1lIF9faXN0cmVhbV90eXBlOjpfX2N0eXBlX3R5cGUgX19jdHlwZV90eXBlOwogICAgICB0 eXBlZGVmIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjppbnRfdHlwZSBfX2ludF90eXBlOwoKICAg ICAgY29uc3QgX19jdHlwZV90eXBlJiBfX2N0eXBlID0gdXNlX2ZhY2V0PF9fY3R5cGVfdHlwZT4o X19pbi5nZXRsb2MoKSk7CiAgICAgIGNvbnN0IF9faW50X3R5cGUgX19lb2YgPSBfVHJhaXRzOjpl b2YoKTsKICAgICAgX19zdHJlYW1idWZfdHlwZSogX19zYiA9IF9faW4ucmRidWYoKTsKICAgICAg X19pbnRfdHlwZSBfX2MgPSBfX3NiLT5zZ2V0YygpOwoKICAgICAgd2hpbGUgKCFfVHJhaXRzOjpl cV9pbnRfdHlwZShfX2MsIF9fZW9mKQogICAgICAgICAgICAgJiYgX19jdHlwZS5pcyhjdHlwZV9i YXNlOjpzcGFjZSwgX19jKSkKICAgICAgICBfX2MgPSBfX3NiLT5zbmV4dGMoKTsKCiAgICAgICBp ZiAoX1RyYWl0czo6ZXFfaW50X3R5cGUoX19jLCBfX2VvZikpCiAgICAgICAgX19pbi5zZXRzdGF0 ZShpb3NfYmFzZTo6ZW9mYml0KTsKCiAgICAgIHJldHVybiBfX2luOwogICAgfQoKCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAg ICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcj4+KGJhc2ljX2lz dHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pbiwKICAgICAgICAgICAgICAgYmFzaWNfc3RyaW5n PF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19zdHIpCiAgICB7CiAgICAgIHR5cGVkZWYgYmFz aWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IF9faXN0cmVhbV90eXBlOwogICAgICB0eXBlZGVm IHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjppbnRfdHlwZSBfX2ludF90eXBlOwogICAgICB0eXBl ZGVmIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjpfX3N0cmVhbWJ1Zl90eXBlIF9fc3RyZWFtYnVm X3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6Ol9fY3R5cGVfdHlw ZSBfX2N0eXBlX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0 cywgX0FsbG9jPiBfX3N0cmluZ190eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fc3RyaW5n X3R5cGU6OnNpemVfdHlwZSBfX3NpemVfdHlwZTsKICAgICAgX19zaXplX3R5cGUgX19leHRyYWN0 ZWQgPSAwOwoKICAgICAgdHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6OnNlbnRyeSBfX2NlcmIoX19p biwgZmFsc2UpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIF9fc3RyLmVy YXNlKCk7CiAgICAgICAgICBzdHJlYW1zaXplIF9fdyA9IF9faW4ud2lkdGgoKTsKICAgICAgICAg IF9fc2l6ZV90eXBlIF9fbjsKICAgICAgICAgIF9fbiA9IF9fdyA+IDAgPyBzdGF0aWNfY2FzdDxf X3NpemVfdHlwZT4oX193KSA6IF9fc3RyLm1heF9zaXplKCk7CgogICAgICAgICAgY29uc3QgX19j dHlwZV90eXBlJiBfX2N0eXBlID0gdXNlX2ZhY2V0PF9fY3R5cGVfdHlwZT4oX19pbi5nZXRsb2Mo KSk7CiAgICAgICAgICBjb25zdCBfX2ludF90eXBlIF9fZW9mID0gX1RyYWl0czo6ZW9mKCk7CiAg ICAgICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiID0gX19pbi5yZGJ1ZigpOwogICAgICAgICAg X19pbnRfdHlwZSBfX2MgPSBfX3NiLT5zZ2V0YygpOwoKICAgICAgICAgIHdoaWxlIChfX2V4dHJh Y3RlZCA8IF9fbgogICAgICAgICAgICAgICAgICYmICFfVHJhaXRzOjplcV9pbnRfdHlwZShfX2Ms IF9fZW9mKQogICAgICAgICAgICAgICAgICYmICFfX2N0eXBlLmlzKGN0eXBlX2Jhc2U6OnNwYWNl LCBfX2MpKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX19zdHIgKz0gX1RyYWl0czo6dG9f Y2hhcl90eXBlKF9fYyk7CiAgICAgICAgICAgICAgKytfX2V4dHJhY3RlZDsKICAgICAgICAgICAg ICBfX2MgPSBfX3NiLT5zbmV4dGMoKTsKICAgICAgICAgICAgfQogICAgICAgICAgaWYgKF9UcmFp dHM6OmVxX2ludF90eXBlKF9fYywgX19lb2YpKQogICAgICAgICAgICBfX2luLnNldHN0YXRlKGlv c19iYXNlOjplb2ZiaXQpOwogICAgICAgICAgX19pbi53aWR0aCgwKTsKICAgICAgICB9CgoKICAg ICAgaWYgKCFfX2V4dHJhY3RlZCkKICAgICAgICBfX2luLnNldHN0YXRlIChpb3NfYmFzZTo6ZmFp bGJpdCk7CgogICAgICByZXR1cm4gX19pbjsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No YXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19pc3RyZWFt PF9DaGFyVCwgX1RyYWl0cz4mCiAgICBnZXRsaW5lKGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJh aXRzPiYgX19pbiwKICAgICAgICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0Fs bG9jPiYgX19zdHIsIF9DaGFyVCBfX2RlbGltKQogICAgewogICAgICB0eXBlZGVmIGJhc2ljX2lz dHJlYW08X0NoYXJULCBfVHJhaXRzPiBfX2lzdHJlYW1fdHlwZTsKICAgICAgdHlwZWRlZiB0eXBl bmFtZSBfX2lzdHJlYW1fdHlwZTo6aW50X3R5cGUgX19pbnRfdHlwZTsKICAgICAgdHlwZWRlZiB0 eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6X19zdHJlYW1idWZfdHlwZSBfX3N0cmVhbWJ1Zl90eXBl OwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjpfX2N0eXBlX3R5cGUgX19j dHlwZV90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9B bGxvYz4gX19zdHJpbmdfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX3N0cmluZ190eXBl OjpzaXplX3R5cGUgX19zaXplX3R5cGU7CgogICAgICBfX3NpemVfdHlwZSBfX2V4dHJhY3RlZCA9 IDA7CiAgICAgIGJvb2wgX190ZXN0ZGVsaW0gPSBmYWxzZTsKICAgICAgdHlwZW5hbWUgX19pc3Ry ZWFtX3R5cGU6OnNlbnRyeSBfX2NlcmIoX19pbiwgdHJ1ZSk7CiAgICAgIGlmIChfX2NlcmIpCiAg ICAgICAgewogICAgICAgICAgX19zdHIuZXJhc2UoKTsKICAgICAgICAgIF9fc2l6ZV90eXBlIF9f biA9IF9fc3RyLm1heF9zaXplKCk7CgogICAgICAgICAgX19pbnRfdHlwZSBfX2lkZWxpbSA9IF9U cmFpdHM6OnRvX2ludF90eXBlKF9fZGVsaW0pOwogICAgICAgICAgX19zdHJlYW1idWZfdHlwZSog X19zYiA9IF9faW4ucmRidWYoKTsKICAgICAgICAgIF9faW50X3R5cGUgX19jID0gX19zYi0+c2J1 bXBjKCk7CiAgICAgICAgICBjb25zdCBfX2ludF90eXBlIF9fZW9mID0gX1RyYWl0czo6ZW9mKCk7 CiAgICAgICAgICBfX3Rlc3RkZWxpbSA9IF9UcmFpdHM6OmVxX2ludF90eXBlKF9fYywgX19pZGVs aW0pOwoKICAgICAgICAgIHdoaWxlIChfX2V4dHJhY3RlZCA8PSBfX24KICAgICAgICAgICAgICAg ICAmJiAhX1RyYWl0czo6ZXFfaW50X3R5cGUoX19jLCBfX2VvZikKICAgICAgICAgICAgICAgICAm JiAhX190ZXN0ZGVsaW0pCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfX3N0ciArPSBfVHJh aXRzOjp0b19jaGFyX3R5cGUoX19jKTsKICAgICAgICAgICAgICArK19fZXh0cmFjdGVkOwogICAg ICAgICAgICAgIF9fYyA9IF9fc2ItPnNidW1wYygpOwogICAgICAgICAgICAgIF9fdGVzdGRlbGlt ID0gX1RyYWl0czo6ZXFfaW50X3R5cGUoX19jLCBfX2lkZWxpbSk7CiAgICAgICAgICAgIH0KICAg ICAgICAgIGlmIChfVHJhaXRzOjplcV9pbnRfdHlwZShfX2MsIF9fZW9mKSkKICAgICAgICAgICAg X19pbi5zZXRzdGF0ZShpb3NfYmFzZTo6ZW9mYml0KTsKICAgICAgICB9CiAgICAgIGlmICghX19l eHRyYWN0ZWQgJiYgIV9fdGVzdGRlbGltKQogICAgICAgIF9faW4uc2V0c3RhdGUoaW9zX2Jhc2U6 OmZhaWxiaXQpOwogICAgICByZXR1cm4gX19pbjsKICAgIH0KCiAgdGVtcGxhdGU8Y2xhc3MgX0No YXJULCBjbGFzcyBfVHJhaXRzLCBjbGFzcyBfQWxsb2M+CiAgICBpbmxpbmUgYmFzaWNfaXN0cmVh bTxfQ2hhclQsX1RyYWl0cz4mCiAgICBnZXRsaW5lKGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJh aXRzPiYgX19pbiwKICAgICAgICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRzLF9BbGxv Yz4mIF9fc3RyKQogICAgeyByZXR1cm4gZ2V0bGluZShfX2luLCBfX3N0ciwgX19pbi53aWRlbign XG4nKSk7IH0KCgoKCiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIGJhc2ljX2lzdHJlYW08Y2hhcj47 CiAgZXh0ZXJuIHRlbXBsYXRlIGlzdHJlYW0mIHdzKGlzdHJlYW0mKTsKICBleHRlcm4gdGVtcGxh dGUgaXN0cmVhbSYgb3BlcmF0b3I+Pihpc3RyZWFtJiwgY2hhciYpOwogIGV4dGVybiB0ZW1wbGF0 ZSBpc3RyZWFtJiBvcGVyYXRvcj4+KGlzdHJlYW0mLCBjaGFyKik7CiAgZXh0ZXJuIHRlbXBsYXRl IGlzdHJlYW0mIG9wZXJhdG9yPj4oaXN0cmVhbSYsIHVuc2lnbmVkIGNoYXImKTsKICBleHRlcm4g dGVtcGxhdGUgaXN0cmVhbSYgb3BlcmF0b3I+Pihpc3RyZWFtJiwgc2lnbmVkIGNoYXImKTsKICBl eHRlcm4gdGVtcGxhdGUgaXN0cmVhbSYgb3BlcmF0b3I+Pihpc3RyZWFtJiwgdW5zaWduZWQgY2hh ciopOwogIGV4dGVybiB0ZW1wbGF0ZSBpc3RyZWFtJiBvcGVyYXRvcj4+KGlzdHJlYW0mLCBzaWdu ZWQgY2hhciopOwoKCiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIGJhc2ljX2lzdHJlYW08d2NoYXJf dD47CiAgZXh0ZXJuIHRlbXBsYXRlIHdpc3RyZWFtJiB3cyh3aXN0cmVhbSYpOwogIGV4dGVybiB0 ZW1wbGF0ZSB3aXN0cmVhbSYgb3BlcmF0b3I+Pih3aXN0cmVhbSYsIHdjaGFyX3QmKTsKICBleHRl cm4gdGVtcGxhdGUgd2lzdHJlYW0mIG9wZXJhdG9yPj4od2lzdHJlYW0mLCB3Y2hhcl90Kik7Cgp9 CiMgMjk4ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9pc3RyZWFtIiAyIDMKIyA0NyAiL3Vzci9pbmNs dWRlL2MrKy8zLjIvaW9zdHJlYW0iIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CiAgZXh0ZXJuIGlzdHJl YW0gY2luOwogIGV4dGVybiBvc3RyZWFtIGNvdXQ7CiAgZXh0ZXJuIG9zdHJlYW0gY2VycjsKICBl eHRlcm4gb3N0cmVhbSBjbG9nOwoKCiAgZXh0ZXJuIHdpc3RyZWFtIHdjaW47CiAgZXh0ZXJuIHdv c3RyZWFtIHdjb3V0OwogIGV4dGVybiB3b3N0cmVhbSB3Y2VycjsKICBleHRlcm4gd29zdHJlYW0g d2Nsb2c7CgoKCiAgc3RhdGljIGlvc19iYXNlOjpJbml0IF9faW9pbml0Owp9CiMgMiAiU2VnRmF1 bHQuY2MiIDIKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi92ZWN0b3IiIDEgMwojIDY1ICIvdXNy L2luY2x1ZGUvYysrLzMuMi92ZWN0b3IiIDMKCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0 cy9mdW5jdGV4Y2VwdC5oIiAxIDMKIyAzNCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9mdW5j dGV4Y2VwdC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvZXhjZXB0aW9uX2RlZmluZXMu aCIgMSAzCiMgMzUgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvZnVuY3RleGNlcHQuaCIgMiAz CgpuYW1lc3BhY2Ugc3RkCnsKCiAgdm9pZAogIF9fdGhyb3dfYmFkX2V4Y2VwdGlvbih2b2lkKTsK CgogIHZvaWQKICBfX3Rocm93X2JhZF9hbGxvYyh2b2lkKTsKCgogIHZvaWQKICBfX3Rocm93X2Jh ZF9jYXN0KHZvaWQpOwoKICB2b2lkCiAgX190aHJvd19iYWRfdHlwZWlkKHZvaWQpOwoKCiAgdm9p ZAogIF9fdGhyb3dfbG9naWNfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhy b3dfZG9tYWluX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X2ludmFs aWRfYXJndW1lbnQoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfbGVuZ3RoX2Vy cm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X291dF9vZl9yYW5nZShjb25z dCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19ydW50aW1lX2Vycm9yKGNvbnN0IGNoYXIq IF9fcyk7CgogIHZvaWQKICBfX3Rocm93X3JhbmdlX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7Cgog IHZvaWQKICBfX3Rocm93X292ZXJmbG93X2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQK ICBfX3Rocm93X3VuZGVyZmxvd19lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKCiAgdm9pZAogIF9f dGhyb3dfaW9zX2ZhaWx1cmUoY29uc3QgY2hhciogX19zKTsKfQojIDY3ICIvdXNyL2luY2x1ZGUv YysrLzMuMi92ZWN0b3IiIDIgMwoKCgoKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0 bF92ZWN0b3IuaCIgMSAzCiMgNjUgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX3ZlY3Rv ci5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9mdW5jdGV4Y2VwdC5oIiAxIDMK IyAzNCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9mdW5jdGV4Y2VwdC5oIiAzCiMgMSAiL3Vz ci9pbmNsdWRlL2MrKy8zLjIvZXhjZXB0aW9uX2RlZmluZXMuaCIgMSAzCiMgMzUgIi91c3IvaW5j bHVkZS9jKysvMy4yL2JpdHMvZnVuY3RleGNlcHQuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKCiAg dm9pZAogIF9fdGhyb3dfYmFkX2V4Y2VwdGlvbih2b2lkKTsKCgogIHZvaWQKICBfX3Rocm93X2Jh ZF9hbGxvYyh2b2lkKTsKCgogIHZvaWQKICBfX3Rocm93X2JhZF9jYXN0KHZvaWQpOwoKICB2b2lk CiAgX190aHJvd19iYWRfdHlwZWlkKHZvaWQpOwoKCiAgdm9pZAogIF9fdGhyb3dfbG9naWNfZXJy b3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfZG9tYWluX2Vycm9yKGNvbnN0 IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X2ludmFsaWRfYXJndW1lbnQoY29uc3QgY2hh ciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfbGVuZ3RoX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7 CgogIHZvaWQKICBfX3Rocm93X291dF9vZl9yYW5nZShjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lk CiAgX190aHJvd19ydW50aW1lX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Ro cm93X3JhbmdlX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X292ZXJm bG93X2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X3VuZGVyZmxvd19l cnJvcihjb25zdCBjaGFyKiBfX3MpOwoKCiAgdm9pZAogIF9fdGhyb3dfaW9zX2ZhaWx1cmUoY29u c3QgY2hhciogX19zKTsKfQojIDY2ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF92ZWN0 b3IuaCIgMiAzCgoKbmFtZXNwYWNlIHN0ZAp7CiMgNzggIi91c3IvaW5jbHVkZS9jKysvMy4yL2Jp dHMvc3RsX3ZlY3Rvci5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvY2F0b3Is IGJvb2wgX0lzU3RhdGljPgpjbGFzcyBfVmVjdG9yX2FsbG9jX2Jhc2UgewpwdWJsaWM6CiAgdHlw ZWRlZiB0eXBlbmFtZSBfQWxsb2NfdHJhaXRzPF9UcCwgX0FsbG9jYXRvcj46OmFsbG9jYXRvcl90 eXBlCiAgICAgICAgICBhbGxvY2F0b3JfdHlwZTsKICBhbGxvY2F0b3JfdHlwZSBnZXRfYWxsb2Nh dG9yKCkgY29uc3QgeyByZXR1cm4gX01fZGF0YV9hbGxvY2F0b3I7IH0KCiAgX1ZlY3Rvcl9hbGxv Y19iYXNlKGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EpCiAgICA6IF9NX2RhdGFfYWxsb2NhdG9y KF9fYSksIF9NX3N0YXJ0KDApLCBfTV9maW5pc2goMCksIF9NX2VuZF9vZl9zdG9yYWdlKDApCiAg e30KCnByb3RlY3RlZDoKICBhbGxvY2F0b3JfdHlwZSBfTV9kYXRhX2FsbG9jYXRvcjsKICBfVHAq IF9NX3N0YXJ0OwogIF9UcCogX01fZmluaXNoOwogIF9UcCogX01fZW5kX29mX3N0b3JhZ2U7Cgog IF9UcCogX01fYWxsb2NhdGUoc2l6ZV90IF9fbikKICAgIHsgcmV0dXJuIF9NX2RhdGFfYWxsb2Nh dG9yLmFsbG9jYXRlKF9fbik7IH0KICB2b2lkIF9NX2RlYWxsb2NhdGUoX1RwKiBfX3AsIHNpemVf dCBfX24pCiAgICB7IGlmIChfX3ApIF9NX2RhdGFfYWxsb2NhdG9yLmRlYWxsb2NhdGUoX19wLCBf X24pOyB9Cn07CgoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvY2F0b3I+CmNsYXNz IF9WZWN0b3JfYWxsb2NfYmFzZTxfVHAsIF9BbGxvY2F0b3IsIHRydWU+IHsKcHVibGljOgogIHR5 cGVkZWYgdHlwZW5hbWUgX0FsbG9jX3RyYWl0czxfVHAsIF9BbGxvY2F0b3I+OjphbGxvY2F0b3Jf dHlwZQogICAgICAgICAgYWxsb2NhdG9yX3R5cGU7CiAgYWxsb2NhdG9yX3R5cGUgZ2V0X2FsbG9j YXRvcigpIGNvbnN0IHsgcmV0dXJuIGFsbG9jYXRvcl90eXBlKCk7IH0KCiAgX1ZlY3Rvcl9hbGxv Y19iYXNlKGNvbnN0IGFsbG9jYXRvcl90eXBlJikKICAgIDogX01fc3RhcnQoMCksIF9NX2Zpbmlz aCgwKSwgX01fZW5kX29mX3N0b3JhZ2UoMCkKICB7fQoKcHJvdGVjdGVkOgogIF9UcCogX01fc3Rh cnQ7CiAgX1RwKiBfTV9maW5pc2g7CiAgX1RwKiBfTV9lbmRfb2Zfc3RvcmFnZTsKCiAgdHlwZWRl ZiB0eXBlbmFtZSBfQWxsb2NfdHJhaXRzPF9UcCwgX0FsbG9jYXRvcj46Ol9BbGxvY190eXBlIF9B bGxvY190eXBlOwogIF9UcCogX01fYWxsb2NhdGUoc2l6ZV90IF9fbikKICAgIHsgcmV0dXJuIF9B bGxvY190eXBlOjphbGxvY2F0ZShfX24pOyB9CiAgdm9pZCBfTV9kZWFsbG9jYXRlKF9UcCogX19w LCBzaXplX3QgX19uKQogICAgeyBfQWxsb2NfdHlwZTo6ZGVhbGxvY2F0ZShfX3AsIF9fbik7fQp9 OwoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgpzdHJ1Y3QgX1ZlY3Rvcl9iYXNl CiAgOiBwdWJsaWMgX1ZlY3Rvcl9hbGxvY19iYXNlPF9UcCwgX0FsbG9jLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBfQWxsb2NfdHJhaXRzPF9UcCwgX0FsbG9jPjo6X1NfaW5zdGFuY2Vs ZXNzPgp7CiAgdHlwZWRlZiBfVmVjdG9yX2FsbG9jX2Jhc2U8X1RwLCBfQWxsb2MsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgX0FsbG9jX3RyYWl0czxfVHAsIF9BbGxvYz46Ol9TX2luc3Rh bmNlbGVzcz4KICAgICAgICAgIF9CYXNlOwogIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmFsbG9j YXRvcl90eXBlIGFsbG9jYXRvcl90eXBlOwoKICBfVmVjdG9yX2Jhc2UoY29uc3QgYWxsb2NhdG9y X3R5cGUmIF9fYSkgOiBfQmFzZShfX2EpIHt9CiAgX1ZlY3Rvcl9iYXNlKHNpemVfdCBfX24sIGNv bnN0IGFsbG9jYXRvcl90eXBlJiBfX2EpIDogX0Jhc2UoX19hKSB7CiAgICBfTV9zdGFydCA9IF9N X2FsbG9jYXRlKF9fbik7CiAgICBfTV9maW5pc2ggPSBfTV9zdGFydDsKICAgIF9NX2VuZF9vZl9z dG9yYWdlID0gX01fc3RhcnQgKyBfX247CiAgfQoKICB+X1ZlY3Rvcl9iYXNlKCkgeyBfTV9kZWFs bG9jYXRlKF9NX3N0YXJ0LCBfTV9lbmRfb2Zfc3RvcmFnZSAtIF9NX3N0YXJ0KTsgfQp9OwojIDE2 NSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfdmVjdG9yLmgiIDMKdGVtcGxhdGUgPGNs YXNzIF9UcCwgY2xhc3MgX0FsbG9jID0gYWxsb2NhdG9yPF9UcD4gPgpjbGFzcyB2ZWN0b3IgOiBw cm90ZWN0ZWQgX1ZlY3Rvcl9iYXNlPF9UcCwgX0FsbG9jPgp7CgogCgpwcml2YXRlOgogIHR5cGVk ZWYgX1ZlY3Rvcl9iYXNlPF9UcCwgX0FsbG9jPiBfQmFzZTsKICB0eXBlZGVmIHZlY3RvcjxfVHAs IF9BbGxvYz4gdmVjdG9yX3R5cGU7CnB1YmxpYzoKICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBlOwog IHR5cGVkZWYgdmFsdWVfdHlwZSogcG9pbnRlcjsKICB0eXBlZGVmIGNvbnN0IHZhbHVlX3R5cGUq IGNvbnN0X3BvaW50ZXI7CiAgdHlwZWRlZiBfX2dudV9jeHg6Ol9fbm9ybWFsX2l0ZXJhdG9yPHBv aW50ZXIsIHZlY3Rvcl90eXBlPiBpdGVyYXRvcjsKICB0eXBlZGVmIF9fZ251X2N4eDo6X19ub3Jt YWxfaXRlcmF0b3I8Y29uc3RfcG9pbnRlciwgdmVjdG9yX3R5cGU+CiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3RfaXRlcmF0b3I7CiAg dHlwZWRlZiB2YWx1ZV90eXBlJiByZWZlcmVuY2U7CiAgdHlwZWRlZiBjb25zdCB2YWx1ZV90eXBl JiBjb25zdF9yZWZlcmVuY2U7CiAgdHlwZWRlZiBzaXplX3Qgc2l6ZV90eXBlOwogIHR5cGVkZWYg cHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsKCiAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6YWxs b2NhdG9yX3R5cGUgYWxsb2NhdG9yX3R5cGU7CiAgYWxsb2NhdG9yX3R5cGUgZ2V0X2FsbG9jYXRv cigpIGNvbnN0IHsgcmV0dXJuIF9CYXNlOjpnZXRfYWxsb2NhdG9yKCk7IH0KCiAgdHlwZWRlZiBy ZXZlcnNlX2l0ZXJhdG9yPGNvbnN0X2l0ZXJhdG9yPiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yOwog IHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxpdGVyYXRvcj4gcmV2ZXJzZV9pdGVyYXRvcjsKCnBy b3RlY3RlZDoKICB1c2luZyBfQmFzZTo6X01fYWxsb2NhdGU7CiAgdXNpbmcgX0Jhc2U6Ol9NX2Rl YWxsb2NhdGU7CiAgdXNpbmcgX0Jhc2U6Ol9NX3N0YXJ0OwogIHVzaW5nIF9CYXNlOjpfTV9maW5p c2g7CiAgdXNpbmcgX0Jhc2U6Ol9NX2VuZF9vZl9zdG9yYWdlOwoKcHJvdGVjdGVkOgogIHZvaWQg X01faW5zZXJ0X2F1eChpdGVyYXRvciBfX3Bvc2l0aW9uLCBjb25zdCBfVHAmIF9feCk7CiAgdm9p ZCBfTV9pbnNlcnRfYXV4KGl0ZXJhdG9yIF9fcG9zaXRpb24pOwoKcHVibGljOgoKCgoKICBpdGVy YXRvciBiZWdpbigpIHsgcmV0dXJuIGl0ZXJhdG9yIChfTV9zdGFydCk7IH0KCgoKCgogIGNvbnN0 X2l0ZXJhdG9yIGJlZ2luKCkgY29uc3QKICAgIHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yIChfTV9z dGFydCk7IH0KCgoKCgogIGl0ZXJhdG9yIGVuZCgpIHsgcmV0dXJuIGl0ZXJhdG9yIChfTV9maW5p c2gpOyB9CgoKCgoKICBjb25zdF9pdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBjb25zdF9p dGVyYXRvciAoX01fZmluaXNoKTsgfQoKCgoKCiAgcmV2ZXJzZV9pdGVyYXRvciByYmVnaW4oKQog ICAgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihlbmQoKSk7IH0KCgoKCgogIGNvbnN0X3JldmVy c2VfaXRlcmF0b3IgcmJlZ2luKCkgY29uc3QKICAgIHsgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRl cmF0b3IoZW5kKCkpOyB9CgoKCgoKCiAgcmV2ZXJzZV9pdGVyYXRvciByZW5kKCkKICAgIHsgcmV0 dXJuIHJldmVyc2VfaXRlcmF0b3IoYmVnaW4oKSk7IH0KCgoKCgoKICBjb25zdF9yZXZlcnNlX2l0 ZXJhdG9yIHJlbmQoKSBjb25zdAogICAgeyByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcihi ZWdpbigpKTsgfQoKCiAgc2l6ZV90eXBlIHNpemUoKSBjb25zdAogICAgeyByZXR1cm4gc2l6ZV90 eXBlKGVuZCgpIC0gYmVnaW4oKSk7IH0KCgogIHNpemVfdHlwZSBtYXhfc2l6ZSgpIGNvbnN0CiAg ICB7IHJldHVybiBzaXplX3R5cGUoLTEpIC8gc2l6ZW9mKF9UcCk7IH0KCgoKCgogIHNpemVfdHlw ZSBjYXBhY2l0eSgpIGNvbnN0CiAgICB7IHJldHVybiBzaXplX3R5cGUoY29uc3RfaXRlcmF0b3Io X01fZW5kX29mX3N0b3JhZ2UpIC0gYmVnaW4oKSk7IH0KCgoKCiAgYm9vbCBlbXB0eSgpIGNvbnN0 CiAgICB7IHJldHVybiBiZWdpbigpID09IGVuZCgpOyB9CiMgMjg5ICIvdXNyL2luY2x1ZGUvYysr LzMuMi9iaXRzL3N0bF92ZWN0b3IuaCIgMwogIHJlZmVyZW5jZSBvcGVyYXRvcltdKHNpemVfdHlw ZSBfX24pIHsgcmV0dXJuICooYmVnaW4oKSArIF9fbik7IH0KIyAzMDAgIi91c3IvaW5jbHVkZS9j KysvMy4yL2JpdHMvc3RsX3ZlY3Rvci5oIiAzCiAgY29uc3RfcmVmZXJlbmNlIG9wZXJhdG9yW10o c2l6ZV90eXBlIF9fbikgY29uc3QgeyByZXR1cm4gKihiZWdpbigpICsgX19uKTsgfQoKICB2b2lk IF9NX3JhbmdlX2NoZWNrKHNpemVfdHlwZSBfX24pIGNvbnN0IHsKICAgIGlmIChfX24gPj0gdGhp cy0+c2l6ZSgpKQogICAgICBfX3Rocm93X291dF9vZl9yYW5nZSgidmVjdG9yIik7CiAgfQojIDMx NiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfdmVjdG9yLmgiIDMKICByZWZlcmVuY2Ug YXQoc2l6ZV90eXBlIF9fbikKICAgIHsgX01fcmFuZ2VfY2hlY2soX19uKTsgcmV0dXJuICgqdGhp cylbX19uXTsgfQojIDMyOCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfdmVjdG9yLmgi IDMKICBjb25zdF9yZWZlcmVuY2UgYXQoc2l6ZV90eXBlIF9fbikgY29uc3QKICAgIHsgX01fcmFu Z2VfY2hlY2soX19uKTsgcmV0dXJuICgqdGhpcylbX19uXTsgfQoKCiAgZXhwbGljaXQgdmVjdG9y KGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQogICAgOiBfQmFz ZShfX2EpIHt9CgogIHZlY3RvcihzaXplX3R5cGUgX19uLCBjb25zdCBfVHAmIF9fdmFsdWUsCiAg ICAgICAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQogICAg OiBfQmFzZShfX24sIF9fYSkKICAgIHsgX01fZmluaXNoID0gdW5pbml0aWFsaXplZF9maWxsX24o X01fc3RhcnQsIF9fbiwgX192YWx1ZSk7IH0KCiAgZXhwbGljaXQgdmVjdG9yKHNpemVfdHlwZSBf X24pCiAgICA6IF9CYXNlKF9fbiwgYWxsb2NhdG9yX3R5cGUoKSkKICAgIHsgX01fZmluaXNoID0g dW5pbml0aWFsaXplZF9maWxsX24oX01fc3RhcnQsIF9fbiwgX1RwKCkpOyB9CgogIHZlY3Rvcihj b25zdCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3gpCiAgICA6IF9CYXNlKF9feC5zaXplKCksIF9f eC5nZXRfYWxsb2NhdG9yKCkpCiAgICB7IF9NX2ZpbmlzaCA9IHVuaW5pdGlhbGl6ZWRfY29weShf X3guYmVnaW4oKSwgX194LmVuZCgpLCBfTV9zdGFydCk7IH0KCgogIHRlbXBsYXRlIDxjbGFzcyBf SW5wdXRJdGVyYXRvcj4KICAgIHZlY3RvcihfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJ dGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFs bG9jYXRvcl90eXBlKCkpCiAgICAgICAgOiBfQmFzZShfX2EpCiAgICAgICAgewogICAgICB0eXBl ZGVmIHR5cGVuYW1lIF9Jc19pbnRlZ2VyPF9JbnB1dEl0ZXJhdG9yPjo6X0ludGVncmFsIF9JbnRl Z3JhbDsKICAgICAgX01faW5pdGlhbGl6ZV9hdXgoX19maXJzdCwgX19sYXN0LCBfSW50ZWdyYWwo KSk7CiAgICB9CgogIHRlbXBsYXRlIDxjbGFzcyBfSW50ZWdlcj4KICAgIHZvaWQgX01faW5pdGlh bGl6ZV9hdXgoX0ludGVnZXIgX19uLCBfSW50ZWdlciBfX3ZhbHVlLCBfX3RydWVfdHlwZSkKICAg ICAgICB7CiAgICAgIF9NX3N0YXJ0ID0gX01fYWxsb2NhdGUoX19uKTsKICAgICAgX01fZW5kX29m X3N0b3JhZ2UgPSBfTV9zdGFydCArIF9fbjsKICAgICAgX01fZmluaXNoID0gdW5pbml0aWFsaXpl ZF9maWxsX24oX01fc3RhcnQsIF9fbiwgX192YWx1ZSk7CiAgICB9CgogIHRlbXBsYXRlPGNsYXNz IF9JbnB1dEl0ZXJhdG9yPgogICAgdm9pZAogICAgICAgIF9NX2luaXRpYWxpemVfYXV4KF9JbnB1 dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwgX19mYWxzZV90eXBlKQog ICAgICAgIHsKICAgICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1 dEl0ZXJhdG9yPjo6aXRlcmF0b3JfY2F0ZWdvcnkgX0l0ZXJDYXRlZ29yeTsKICAgICAgICAgIF9N X3JhbmdlX2luaXRpYWxpemUoX19maXJzdCwgX19sYXN0LCBfSXRlckNhdGVnb3J5KCkpOwogICAg ICAgIH0KCiAgfnZlY3RvcigpCiAgeyBfRGVzdHJveShfTV9zdGFydCwgX01fZmluaXNoKTsgfQoK ICB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBvcGVyYXRvcj0oY29uc3QgdmVjdG9yPF9UcCwgX0FsbG9j PiYgX194KTsKIyAzOTMgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX3ZlY3Rvci5oIiAz CiAgdm9pZCByZXNlcnZlKHNpemVfdHlwZSBfX24pIHsKICAgIGlmIChfX24gPiB0aGlzLT5tYXhf c2l6ZSgpKQogICAgICBfX3Rocm93X2xlbmd0aF9lcnJvcigidmVjdG9yOjpyZXNlcnZlIik7CiAg ICBpZiAodGhpcy0+Y2FwYWNpdHkoKSA8IF9fbikgewogICAgICBjb25zdCBzaXplX3R5cGUgX19v bGRfc2l6ZSA9IHNpemUoKTsKICAgICAgcG9pbnRlciBfX3RtcCA9IF9NX2FsbG9jYXRlX2FuZF9j b3B5KF9fbiwgX01fc3RhcnQsIF9NX2ZpbmlzaCk7CiAgICAgIF9EZXN0cm95KF9NX3N0YXJ0LCBf TV9maW5pc2gpOwogICAgICBfTV9kZWFsbG9jYXRlKF9NX3N0YXJ0LCBfTV9lbmRfb2Zfc3RvcmFn ZSAtIF9NX3N0YXJ0KTsKICAgICAgX01fc3RhcnQgPSBfX3RtcDsKICAgICAgX01fZmluaXNoID0g X190bXAgKyBfX29sZF9zaXplOwogICAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9NX3N0YXJ0ICsg X19uOwogICAgfQogIH0KIyA0MjMgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX3ZlY3Rv ci5oIiAzCiAgdm9pZCBhc3NpZ24oc2l6ZV90eXBlIF9fbiwgY29uc3QgX1RwJiBfX3ZhbCkgeyBf TV9maWxsX2Fzc2lnbihfX24sIF9fdmFsKTsgfQogIHZvaWQgX01fZmlsbF9hc3NpZ24oc2l6ZV90 eXBlIF9fbiwgY29uc3QgX1RwJiBfX3ZhbCk7CgogIHRlbXBsYXRlPGNsYXNzIF9JbnB1dEl0ZXJh dG9yPgogICAgdm9pZAogICAgYXNzaWduKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0 ZXJhdG9yIF9fbGFzdCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfaW50ZWdlcjxf SW5wdXRJdGVyYXRvcj46Ol9JbnRlZ3JhbCBfSW50ZWdyYWw7CiAgICAgIF9NX2Fzc2lnbl9kaXNw YXRjaChfX2ZpcnN0LCBfX2xhc3QsIF9JbnRlZ3JhbCgpKTsKICAgIH0KCiAgdGVtcGxhdGU8Y2xh c3MgX0ludGVnZXI+CiAgICB2b2lkCiAgICAgX01fYXNzaWduX2Rpc3BhdGNoKF9JbnRlZ2VyIF9f biwgX0ludGVnZXIgX192YWwsIF9fdHJ1ZV90eXBlKQogICAgIHsgX01fZmlsbF9hc3NpZ24oKHNp emVfdHlwZSkgX19uLCAoX1RwKSBfX3ZhbCk7IH0KCiAgdGVtcGxhdGU8Y2xhc3MgX0lucHV0SXRl cj4KICAgIHZvaWQKICAgIF9NX2Fzc2lnbl9kaXNwYXRjaChfSW5wdXRJdGVyIF9fZmlyc3QsIF9J bnB1dEl0ZXIgX19sYXN0LCBfX2ZhbHNlX3R5cGUpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5h bWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+OjppdGVyYXRvcl9jYXRlZ29yeSBfSXRlckNh dGVnb3J5OwogICAgICBfTV9hc3NpZ25fYXV4KF9fZmlyc3QsIF9fbGFzdCwgX0l0ZXJDYXRlZ29y eSgpKTsKICAgIH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogICAgdm9pZAog ICAgX01fYXNzaWduX2F1eChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBf X2xhc3QsCiAgICAgICAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZyk7CgogIHRlbXBsYXRl IDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgogICAgdm9pZAogICAgX01fYXNzaWduX2F1eChfRm9y d2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LAogICAgICAgICAg ICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZyk7CgoKCgoKICByZWZlcmVuY2UgZnJvbnQoKSB7 IHJldHVybiAqYmVnaW4oKTsgfQoKCgoKCiAgY29uc3RfcmVmZXJlbmNlIGZyb250KCkgY29uc3Qg eyByZXR1cm4gKmJlZ2luKCk7IH0KCgoKCgogIHJlZmVyZW5jZSBiYWNrKCkgeyByZXR1cm4gKihl bmQoKSAtIDEpOyB9CgoKCgoKICBjb25zdF9yZWZlcmVuY2UgYmFjaygpIGNvbnN0IHsgcmV0dXJu ICooZW5kKCkgLSAxKTsgfQojIDQ5MCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfdmVj dG9yLmgiIDMKICB2b2lkCiAgcHVzaF9iYWNrKGNvbnN0IF9UcCYgX194KQogIHsKICAgIGlmIChf TV9maW5pc2ggIT0gX01fZW5kX29mX3N0b3JhZ2UpIHsKICAgICAgX0NvbnN0cnVjdChfTV9maW5p c2gsIF9feCk7CiAgICAgICsrX01fZmluaXNoOwogICAgfQogICAgZWxzZQogICAgICBfTV9pbnNl cnRfYXV4KGVuZCgpLCBfX3gpOwogIH0KIyA1MjEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMv c3RsX3ZlY3Rvci5oIiAzCiAgdm9pZAogIHN3YXAodmVjdG9yPF9UcCwgX0FsbG9jPiYgX194KQog IHsKICAgIHN0ZDo6c3dhcChfTV9zdGFydCwgX194Ll9NX3N0YXJ0KTsKICAgIHN0ZDo6c3dhcChf TV9maW5pc2gsIF9feC5fTV9maW5pc2gpOwogICAgc3RkOjpzd2FwKF9NX2VuZF9vZl9zdG9yYWdl LCBfX3guX01fZW5kX29mX3N0b3JhZ2UpOwogIH0KIyA1NDAgIi91c3IvaW5jbHVkZS9jKysvMy4y L2JpdHMvc3RsX3ZlY3Rvci5oIiAzCiAgaXRlcmF0b3IKICBpbnNlcnQoaXRlcmF0b3IgX19wb3Np dGlvbiwgY29uc3QgX1RwJiBfX3gpCiAgewogICAgc2l6ZV90eXBlIF9fbiA9IF9fcG9zaXRpb24g LSBiZWdpbigpOwogICAgaWYgKF9NX2ZpbmlzaCAhPSBfTV9lbmRfb2Zfc3RvcmFnZSAmJiBfX3Bv c2l0aW9uID09IGVuZCgpKSB7CiAgICAgIF9Db25zdHJ1Y3QoX01fZmluaXNoLCBfX3gpOwogICAg ICArK19NX2ZpbmlzaDsKICAgIH0KICAgIGVsc2UKICAgICAgX01faW5zZXJ0X2F1eChpdGVyYXRv cihfX3Bvc2l0aW9uKSwgX194KTsKICAgIHJldHVybiBiZWdpbigpICsgX19uOwogIH0KIyA1NjQg Ii91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX3ZlY3Rvci5oIiAzCiAgaXRlcmF0b3IKICBp bnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvbikKICB7CiAgICBzaXplX3R5cGUgX19uID0gX19wb3Np dGlvbiAtIGJlZ2luKCk7CiAgICBpZiAoX01fZmluaXNoICE9IF9NX2VuZF9vZl9zdG9yYWdlICYm IF9fcG9zaXRpb24gPT0gZW5kKCkpIHsKICAgICAgX0NvbnN0cnVjdChfTV9maW5pc2gpOwogICAg ICArK19NX2ZpbmlzaDsKICAgIH0KICAgIGVsc2UKICAgICAgX01faW5zZXJ0X2F1eChpdGVyYXRv cihfX3Bvc2l0aW9uKSk7CiAgICByZXR1cm4gYmVnaW4oKSArIF9fbjsKICB9CgoKICB0ZW1wbGF0 ZTxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICAgIHZvaWQKICAgICAgICBpbnNlcnQoaXRlcmF0b3Ig X19wb3MsIF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkKICAg ICAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0lzX2ludGVnZXI8X0lucHV0SXRlcmF0b3I+ OjpfSW50ZWdyYWwgX0ludGVncmFsOwogICAgICBfTV9pbnNlcnRfZGlzcGF0Y2goX19wb3MsIF9f Zmlyc3QsIF9fbGFzdCwgX0ludGVncmFsKCkpOwogICAgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lu dGVnZXI+CiAgICB2b2lkCiAgICAgICAgX01faW5zZXJ0X2Rpc3BhdGNoKGl0ZXJhdG9yIF9fcG9z LCBfSW50ZWdlciBfX24sIF9JbnRlZ2VyIF9fdmFsLCBfX3RydWVfdHlwZSkKICAgIHsgX01fZmls bF9pbnNlcnQoX19wb3MsIHN0YXRpY19jYXN0PHNpemVfdHlwZT4oX19uKSwgc3RhdGljX2Nhc3Q8 X1RwPihfX3ZhbCkpOyB9CgogIHRlbXBsYXRlPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogICAgdm9p ZAogICAgICAgIF9NX2luc2VydF9kaXNwYXRjaChpdGVyYXRvciBfX3BvcywKICAgICAgICAgICAg ICAgICAgICAgICBfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3Qs CiAgICAgICAgICAgICAgICAgICAgICAgX19mYWxzZV90eXBlKQogICAgICAgIHsKICAgICAgICAg IHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXJhdG9yPjo6aXRlcmF0 b3JfY2F0ZWdvcnkgX0l0ZXJDYXRlZ29yeTsKICAgICAgX01fcmFuZ2VfaW5zZXJ0KF9fcG9zLCBf X2ZpcnN0LCBfX2xhc3QsIF9JdGVyQ2F0ZWdvcnkoKSk7CiAgICB9CiMgNjE0ICIvdXNyL2luY2x1 ZGUvYysrLzMuMi9iaXRzL3N0bF92ZWN0b3IuaCIgMwogIHZvaWQgaW5zZXJ0IChpdGVyYXRvciBf X3Bvcywgc2l6ZV90eXBlIF9fbiwgY29uc3QgX1RwJiBfX3gpCiAgICB7IF9NX2ZpbGxfaW5zZXJ0 KF9fcG9zLCBfX24sIF9feCk7IH0KCiAgdm9pZCBfTV9maWxsX2luc2VydCAoaXRlcmF0b3IgX19w b3MsIHNpemVfdHlwZSBfX24sIGNvbnN0IF9UcCYgX194KTsKIyA2MjggIi91c3IvaW5jbHVkZS9j KysvMy4yL2JpdHMvc3RsX3ZlY3Rvci5oIiAzCiAgdm9pZCBwb3BfYmFjaygpIHsKICAgIC0tX01f ZmluaXNoOwogICAgX0Rlc3Ryb3koX01fZmluaXNoKTsKICB9CiMgNjQ3ICIvdXNyL2luY2x1ZGUv YysrLzMuMi9iaXRzL3N0bF92ZWN0b3IuaCIgMwogIGl0ZXJhdG9yIGVyYXNlKGl0ZXJhdG9yIF9f cG9zaXRpb24pIHsKICAgIGlmIChfX3Bvc2l0aW9uICsgMSAhPSBlbmQoKSkKICAgICAgY29weShf X3Bvc2l0aW9uICsgMSwgZW5kKCksIF9fcG9zaXRpb24pOwogICAgLS1fTV9maW5pc2g7CiAgICBf RGVzdHJveShfTV9maW5pc2gpOwogICAgcmV0dXJuIF9fcG9zaXRpb247CiAgfQojIDY3MCAiL3Vz ci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfdmVjdG9yLmgiIDMKICBpdGVyYXRvciBlcmFzZShp dGVyYXRvciBfX2ZpcnN0LCBpdGVyYXRvciBfX2xhc3QpIHsKICAgIGl0ZXJhdG9yIF9faShjb3B5 KF9fbGFzdCwgZW5kKCksIF9fZmlyc3QpKTsKICAgIF9EZXN0cm95KF9faSwgZW5kKCkpOwogICAg X01fZmluaXNoID0gX01fZmluaXNoIC0gKF9fbGFzdCAtIF9fZmlyc3QpOwogICAgcmV0dXJuIF9f Zmlyc3Q7CiAgfQojIDY4NyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfdmVjdG9yLmgi IDMKICB2b2lkIHJlc2l6ZShzaXplX3R5cGUgX19uZXdfc2l6ZSwgY29uc3QgX1RwJiBfX3gpIHsK ICAgIGlmIChfX25ld19zaXplIDwgc2l6ZSgpKQogICAgICBlcmFzZShiZWdpbigpICsgX19uZXdf c2l6ZSwgZW5kKCkpOwogICAgZWxzZQogICAgICBpbnNlcnQoZW5kKCksIF9fbmV3X3NpemUgLSBz aXplKCksIF9feCk7CiAgfQojIDcwMyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfdmVj dG9yLmgiIDMKICB2b2lkIHJlc2l6ZShzaXplX3R5cGUgX19uZXdfc2l6ZSkgeyByZXNpemUoX19u ZXdfc2l6ZSwgX1RwKCkpOyB9CgoKCgoKCgogIHZvaWQgY2xlYXIoKSB7IGVyYXNlKGJlZ2luKCks IGVuZCgpKTsgfQoKcHJvdGVjdGVkOgoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRv cj4KICBwb2ludGVyIF9NX2FsbG9jYXRlX2FuZF9jb3B5KHNpemVfdHlwZSBfX24sIF9Gb3J3YXJk SXRlcmF0b3IgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCkKICB7CiAgICBwb2ludGVyIF9fcmVzdWx0 ID0gX01fYWxsb2NhdGUoX19uKTsKICAgIHRyeSB7CiAgICAgIHVuaW5pdGlhbGl6ZWRfY29weShf X2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KTsKICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAgfQog ICAgY2F0Y2goLi4uKQogICAgICB7CiAgICAgICAgX01fZGVhbGxvY2F0ZShfX3Jlc3VsdCwgX19u KTsKICAgICAgICB0aHJvdzsKICAgICAgfQogIH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0 ZXJhdG9yPgogIHZvaWQgX01fcmFuZ2VfaW5pdGlhbGl6ZShfSW5wdXRJdGVyYXRvciBfX2ZpcnN0 LAogICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyYXRvciBfX2xhc3QsIGlucHV0 X2l0ZXJhdG9yX3RhZykKICB7CiAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmly c3QpCiAgICAgIHB1c2hfYmFjaygqX19maXJzdCk7CiAgfQoKCiAgdGVtcGxhdGUgPGNsYXNzIF9G b3J3YXJkSXRlcmF0b3I+CiAgdm9pZCBfTV9yYW5nZV9pbml0aWFsaXplKF9Gb3J3YXJkSXRlcmF0 b3IgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyYXRvciBf X2xhc3QsIGZvcndhcmRfaXRlcmF0b3JfdGFnKQogIHsKICAgIHNpemVfdHlwZSBfX24gPSBkaXN0 YW5jZShfX2ZpcnN0LCBfX2xhc3QpOwogICAgX01fc3RhcnQgPSBfTV9hbGxvY2F0ZShfX24pOwog ICAgX01fZW5kX29mX3N0b3JhZ2UgPSBfTV9zdGFydCArIF9fbjsKICAgIF9NX2ZpbmlzaCA9IHVu aW5pdGlhbGl6ZWRfY29weShfX2ZpcnN0LCBfX2xhc3QsIF9NX3N0YXJ0KTsKICB9CgogIHRlbXBs YXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICB2b2lkIF9NX3JhbmdlX2luc2VydChpdGVyYXRv ciBfX3BvcywKICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBf SW5wdXRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRfaXRlcmF0 b3JfdGFnKTsKCiAgdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CiAgdm9pZCBfTV9y YW5nZV9pbnNlcnQoaXRlcmF0b3IgX19wb3MsCiAgICAgICAgICAgICAgICAgICAgICAgX0Zvcndh cmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAg ICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZyk7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1Rw LCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sCm9wZXJhdG9yPT0oY29uc3QgdmVjdG9yPF9UcCwg X0FsbG9jPiYgX194LCBjb25zdCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3kpCnsKICByZXR1cm4g X194LnNpemUoKSA9PSBfX3kuc2l6ZSgpICYmCiAgICAgICAgIGVxdWFsKF9feC5iZWdpbigpLCBf X3guZW5kKCksIF9feS5iZWdpbigpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0Fs bG9jPgppbmxpbmUgYm9vbApvcGVyYXRvcjwoY29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX194 LCBjb25zdCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3kpCnsKICByZXR1cm4gbGV4aWNvZ3JhcGhp Y2FsX2NvbXBhcmUoX194LmJlZ2luKCksIF9feC5lbmQoKSwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgX195LmJlZ2luKCksIF9feS5lbmQoKSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBf VHAsIGNsYXNzIF9BbGxvYz4KaW5saW5lIHZvaWQgc3dhcCh2ZWN0b3I8X1RwLCBfQWxsb2M+JiBf X3gsIHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9feSkKewogIF9feC5zd2FwKF9feSk7Cn0KCnRlbXBs YXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wKb3BlcmF0b3IhPShjb25z dCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3gsIGNvbnN0IHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9f eSkgewogIHJldHVybiAhKF9feCA9PSBfX3kpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFz cyBfQWxsb2M+CmlubGluZSBib29sCm9wZXJhdG9yPihjb25zdCB2ZWN0b3I8X1RwLCBfQWxsb2M+ JiBfX3gsIGNvbnN0IHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9feSkgewogIHJldHVybiBfX3kgPCBf X3g7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wKb3Bl cmF0b3I8PShjb25zdCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3gsIGNvbnN0IHZlY3RvcjxfVHAs IF9BbGxvYz4mIF9feSkgewogIHJldHVybiAhKF9feSA8IF9feCk7Cn0KCnRlbXBsYXRlIDxjbGFz cyBfVHAsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wKb3BlcmF0b3I+PShjb25zdCB2ZWN0b3I8 X1RwLCBfQWxsb2M+JiBfX3gsIGNvbnN0IHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9feSkgewogIHJl dHVybiAhKF9feCA8IF9feSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4K dmVjdG9yPF9UcCxfQWxsb2M+Jgp2ZWN0b3I8X1RwLF9BbGxvYz46Om9wZXJhdG9yPShjb25zdCB2 ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3gpCnsKICBpZiAoJl9feCAhPSB0aGlzKSB7CiAgICBjb25z dCBzaXplX3R5cGUgX194bGVuID0gX194LnNpemUoKTsKICAgIGlmIChfX3hsZW4gPiBjYXBhY2l0 eSgpKSB7CiAgICAgIHBvaW50ZXIgX190bXAgPSBfTV9hbGxvY2F0ZV9hbmRfY29weShfX3hsZW4s IF9feC5iZWdpbigpLCBfX3guZW5kKCkpOwogICAgICBfRGVzdHJveShfTV9zdGFydCwgX01fZmlu aXNoKTsKICAgICAgX01fZGVhbGxvY2F0ZShfTV9zdGFydCwgX01fZW5kX29mX3N0b3JhZ2UgLSBf TV9zdGFydCk7CiAgICAgIF9NX3N0YXJ0ID0gX190bXA7CiAgICAgIF9NX2VuZF9vZl9zdG9yYWdl ID0gX01fc3RhcnQgKyBfX3hsZW47CiAgICB9CiAgICBlbHNlIGlmIChzaXplKCkgPj0gX194bGVu KSB7CiAgICAgIGl0ZXJhdG9yIF9faShjb3B5KF9feC5iZWdpbigpLCBfX3guZW5kKCksIGJlZ2lu KCkpKTsKICAgICAgX0Rlc3Ryb3koX19pLCBlbmQoKSk7CiAgICB9CiAgICBlbHNlIHsKICAgICAg Y29weShfX3guYmVnaW4oKSwgX194LmJlZ2luKCkgKyBzaXplKCksIF9NX3N0YXJ0KTsKICAgICAg dW5pbml0aWFsaXplZF9jb3B5KF9feC5iZWdpbigpICsgc2l6ZSgpLCBfX3guZW5kKCksIF9NX2Zp bmlzaCk7CiAgICB9CiAgICBfTV9maW5pc2ggPSBfTV9zdGFydCArIF9feGxlbjsKICB9CiAgcmV0 dXJuICp0aGlzOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CnZvaWQgdmVj dG9yPF9UcCwgX0FsbG9jPjo6X01fZmlsbF9hc3NpZ24oc2l6ZV90IF9fbiwgY29uc3QgdmFsdWVf dHlwZSYgX192YWwpCnsKICBpZiAoX19uID4gY2FwYWNpdHkoKSkgewogICAgdmVjdG9yPF9UcCwg X0FsbG9jPiBfX3RtcChfX24sIF9fdmFsLCBnZXRfYWxsb2NhdG9yKCkpOwogICAgX190bXAuc3dh cCgqdGhpcyk7CiAgfQogIGVsc2UgaWYgKF9fbiA+IHNpemUoKSkgewogICAgZmlsbChiZWdpbigp LCBlbmQoKSwgX192YWwpOwogICAgX01fZmluaXNoID0gdW5pbml0aWFsaXplZF9maWxsX24oX01f ZmluaXNoLCBfX24gLSBzaXplKCksIF9fdmFsKTsKICB9CiAgZWxzZQogICAgZXJhc2UoZmlsbF9u KGJlZ2luKCksIF9fbiwgX192YWwpLCBlbmQoKSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNs YXNzIF9BbGxvYz4gdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXI+CnZvaWQgdmVjdG9yPF9UcCwg X0FsbG9jPjo6X01fYXNzaWduX2F1eChfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19s YXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRfaXRlcmF0 b3JfdGFnKSB7CiAgaXRlcmF0b3IgX19jdXIoYmVnaW4oKSk7CiAgZm9yICggOyBfX2ZpcnN0ICE9 IF9fbGFzdCAmJiBfX2N1ciAhPSBlbmQoKTsgKytfX2N1ciwgKytfX2ZpcnN0KQogICAgKl9fY3Vy ID0gKl9fZmlyc3Q7CiAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQogICAgZXJhc2UoX19jdXIsIGVu ZCgpKTsKICBlbHNlCiAgICBpbnNlcnQoZW5kKCksIF9fZmlyc3QsIF9fbGFzdCk7Cn0KCnRlbXBs YXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4gdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRl cj4Kdm9pZAp2ZWN0b3I8X1RwLCBfQWxsb2M+OjpfTV9hc3NpZ25fYXV4KF9Gb3J3YXJkSXRlciBf X2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGZvcndhcmRfaXRlcmF0b3JfdGFnKSB7CiAgc2l6ZV90eXBlIF9fbGVuID0gZGlzdGFu Y2UoX19maXJzdCwgX19sYXN0KTsKCiAgaWYgKF9fbGVuID4gY2FwYWNpdHkoKSkgewogICAgcG9p bnRlciBfX3RtcChfTV9hbGxvY2F0ZV9hbmRfY29weShfX2xlbiwgX19maXJzdCwgX19sYXN0KSk7 CiAgICBfRGVzdHJveShfTV9zdGFydCwgX01fZmluaXNoKTsKICAgIF9NX2RlYWxsb2NhdGUoX01f c3RhcnQsIF9NX2VuZF9vZl9zdG9yYWdlIC0gX01fc3RhcnQpOwogICAgX01fc3RhcnQgPSBfX3Rt cDsKICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gX01fZmluaXNoID0gX01fc3RhcnQgKyBfX2xlbjsK ICB9CiAgZWxzZSBpZiAoc2l6ZSgpID49IF9fbGVuKSB7CiAgICBpdGVyYXRvciBfX25ld19maW5p c2goY29weShfX2ZpcnN0LCBfX2xhc3QsIF9NX3N0YXJ0KSk7CiAgICBfRGVzdHJveShfX25ld19m aW5pc2gsIGVuZCgpKTsKICAgIF9NX2ZpbmlzaCA9IF9fbmV3X2ZpbmlzaC5iYXNlKCk7CiAgfQog IGVsc2UgewogICAgX0ZvcndhcmRJdGVyIF9fbWlkID0gX19maXJzdDsKICAgIGFkdmFuY2UoX19t aWQsIHNpemUoKSk7CiAgICBjb3B5KF9fZmlyc3QsIF9fbWlkLCBfTV9zdGFydCk7CiAgICBfTV9m aW5pc2ggPSB1bmluaXRpYWxpemVkX2NvcHkoX19taWQsIF9fbGFzdCwgX01fZmluaXNoKTsKICB9 Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4Kdm9pZAp2ZWN0b3I8X1RwLCBf QWxsb2M+OjpfTV9pbnNlcnRfYXV4KGl0ZXJhdG9yIF9fcG9zaXRpb24sIGNvbnN0IF9UcCYgX194 KQp7CiAgaWYgKF9NX2ZpbmlzaCAhPSBfTV9lbmRfb2Zfc3RvcmFnZSkgewogICAgX0NvbnN0cnVj dChfTV9maW5pc2gsICooX01fZmluaXNoIC0gMSkpOwogICAgKytfTV9maW5pc2g7CiAgICBfVHAg X194X2NvcHkgPSBfX3g7CiAgICBjb3B5X2JhY2t3YXJkKF9fcG9zaXRpb24sIGl0ZXJhdG9yKF9N X2ZpbmlzaCAtIDIpLCBpdGVyYXRvcihfTV9maW5pc2gtIDEpKTsKICAgICpfX3Bvc2l0aW9uID0g X194X2NvcHk7CiAgfQogIGVsc2UgewogICAgY29uc3Qgc2l6ZV90eXBlIF9fb2xkX3NpemUgPSBz aXplKCk7CiAgICBjb25zdCBzaXplX3R5cGUgX19sZW4gPSBfX29sZF9zaXplICE9IDAgPyAyICog X19vbGRfc2l6ZSA6IDE7CiAgICBpdGVyYXRvciBfX25ld19zdGFydChfTV9hbGxvY2F0ZShfX2xl bikpOwogICAgaXRlcmF0b3IgX19uZXdfZmluaXNoKF9fbmV3X3N0YXJ0KTsKICAgIHRyeSB7CiAg ICAgIF9fbmV3X2ZpbmlzaCA9IHVuaW5pdGlhbGl6ZWRfY29weShpdGVyYXRvcihfTV9zdGFydCks IF9fcG9zaXRpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX25l d19zdGFydCk7CiAgICAgIF9Db25zdHJ1Y3QoX19uZXdfZmluaXNoLmJhc2UoKSwgX194KTsKICAg ICAgKytfX25ld19maW5pc2g7CiAgICAgIF9fbmV3X2ZpbmlzaCA9IHVuaW5pdGlhbGl6ZWRfY29w eShfX3Bvc2l0aW9uLCBpdGVyYXRvcihfTV9maW5pc2gpLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgX19uZXdfZmluaXNoKTsKICAgIH0KICAgIGNhdGNoKC4uLikKICAg ICAgewogICAgICAgIF9EZXN0cm95KF9fbmV3X3N0YXJ0LF9fbmV3X2ZpbmlzaCk7CiAgICAgICAg X01fZGVhbGxvY2F0ZShfX25ld19zdGFydC5iYXNlKCksX19sZW4pOwogICAgICAgIHRocm93Owog ICAgICB9CiAgICBfRGVzdHJveShiZWdpbigpLCBlbmQoKSk7CiAgICBfTV9kZWFsbG9jYXRlKF9N X3N0YXJ0LCBfTV9lbmRfb2Zfc3RvcmFnZSAtIF9NX3N0YXJ0KTsKICAgIF9NX3N0YXJ0ID0gX19u ZXdfc3RhcnQuYmFzZSgpOwogICAgX01fZmluaXNoID0gX19uZXdfZmluaXNoLmJhc2UoKTsKICAg IF9NX2VuZF9vZl9zdG9yYWdlID0gX19uZXdfc3RhcnQuYmFzZSgpICsgX19sZW47CiAgfQp9Cgp0 ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CnZvaWQKdmVjdG9yPF9UcCwgX0FsbG9j Pjo6X01faW5zZXJ0X2F1eChpdGVyYXRvciBfX3Bvc2l0aW9uKQp7CiAgaWYgKF9NX2ZpbmlzaCAh PSBfTV9lbmRfb2Zfc3RvcmFnZSkgewogICAgX0NvbnN0cnVjdChfTV9maW5pc2gsICooX01fZmlu aXNoIC0gMSkpOwogICAgKytfTV9maW5pc2g7CiAgICBjb3B5X2JhY2t3YXJkKF9fcG9zaXRpb24s IGl0ZXJhdG9yKF9NX2ZpbmlzaCAtIDIpLAogICAgICAgICAgICAgICAgICBpdGVyYXRvcihfTV9m aW5pc2ggLSAxKSk7CiAgICAqX19wb3NpdGlvbiA9IF9UcCgpOwogIH0KICBlbHNlIHsKICAgIGNv bnN0IHNpemVfdHlwZSBfX29sZF9zaXplID0gc2l6ZSgpOwogICAgY29uc3Qgc2l6ZV90eXBlIF9f bGVuID0gX19vbGRfc2l6ZSAhPSAwID8gMiAqIF9fb2xkX3NpemUgOiAxOwogICAgcG9pbnRlciBf X25ld19zdGFydCA9IF9NX2FsbG9jYXRlKF9fbGVuKTsKICAgIHBvaW50ZXIgX19uZXdfZmluaXNo ID0gX19uZXdfc3RhcnQ7CiAgICB0cnkgewogICAgICBfX25ld19maW5pc2ggPSB1bmluaXRpYWxp emVkX2NvcHkoaXRlcmF0b3IoX01fc3RhcnQpLCBfX3Bvc2l0aW9uLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgX19uZXdfc3RhcnQpOwogICAgICBfQ29uc3RydWN0KF9f bmV3X2ZpbmlzaCk7CiAgICAgICsrX19uZXdfZmluaXNoOwogICAgICBfX25ld19maW5pc2ggPSB1 bmluaXRpYWxpemVkX2NvcHkoX19wb3NpdGlvbiwgaXRlcmF0b3IoX01fZmluaXNoKSwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbmV3X2ZpbmlzaCk7CiAgICB9CiAg ICBjYXRjaCguLi4pCiAgICAgIHsKICAgICAgICBfRGVzdHJveShfX25ld19zdGFydCxfX25ld19m aW5pc2gpOwogICAgICAgIF9NX2RlYWxsb2NhdGUoX19uZXdfc3RhcnQsX19sZW4pOwogICAgICAg IHRocm93OwogICAgICB9CiAgICBfRGVzdHJveShiZWdpbigpLCBlbmQoKSk7CiAgICBfTV9kZWFs bG9jYXRlKF9NX3N0YXJ0LCBfTV9lbmRfb2Zfc3RvcmFnZSAtIF9NX3N0YXJ0KTsKICAgIF9NX3N0 YXJ0ID0gX19uZXdfc3RhcnQ7CiAgICBfTV9maW5pc2ggPSBfX25ld19maW5pc2g7CiAgICBfTV9l bmRfb2Zfc3RvcmFnZSA9IF9fbmV3X3N0YXJ0ICsgX19sZW47CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xh c3MgX1RwLCBjbGFzcyBfQWxsb2M+CnZvaWQgdmVjdG9yPF9UcCwgX0FsbG9jPjo6X01fZmlsbF9p bnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvbiwgc2l6ZV90eXBlIF9fbiwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9feCkKewogIGlmIChfX24gIT0g MCkgewogICAgaWYgKHNpemVfdHlwZShfTV9lbmRfb2Zfc3RvcmFnZSAtIF9NX2ZpbmlzaCkgPj0g X19uKSB7CiAgICAgIF9UcCBfX3hfY29weSA9IF9feDsKICAgICAgY29uc3Qgc2l6ZV90eXBlIF9f ZWxlbXNfYWZ0ZXIgPSBlbmQoKSAtIF9fcG9zaXRpb247CiAgICAgIGl0ZXJhdG9yIF9fb2xkX2Zp bmlzaChfTV9maW5pc2gpOwogICAgICBpZiAoX19lbGVtc19hZnRlciA+IF9fbikgewogICAgICAg IHVuaW5pdGlhbGl6ZWRfY29weShfTV9maW5pc2ggLSBfX24sIF9NX2ZpbmlzaCwgX01fZmluaXNo KTsKICAgICAgICBfTV9maW5pc2ggKz0gX19uOwogICAgICAgIGNvcHlfYmFja3dhcmQoX19wb3Np dGlvbiwgX19vbGRfZmluaXNoIC0gX19uLCBfX29sZF9maW5pc2gpOwogICAgICAgIGZpbGwoX19w b3NpdGlvbiwgX19wb3NpdGlvbiArIF9fbiwgX194X2NvcHkpOwogICAgICB9CiAgICAgIGVsc2Ug ewogICAgICAgIHVuaW5pdGlhbGl6ZWRfZmlsbF9uKF9NX2ZpbmlzaCwgX19uIC0gX19lbGVtc19h ZnRlciwgX194X2NvcHkpOwogICAgICAgIF9NX2ZpbmlzaCArPSBfX24gLSBfX2VsZW1zX2FmdGVy OwogICAgICAgIHVuaW5pdGlhbGl6ZWRfY29weShfX3Bvc2l0aW9uLCBfX29sZF9maW5pc2gsIF9N X2ZpbmlzaCk7CiAgICAgICAgX01fZmluaXNoICs9IF9fZWxlbXNfYWZ0ZXI7CiAgICAgICAgZmls bChfX3Bvc2l0aW9uLCBfX29sZF9maW5pc2gsIF9feF9jb3B5KTsKICAgICAgfQogICAgfQogICAg ZWxzZSB7CiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX29sZF9zaXplID0gc2l6ZSgpOwogICAgICBj b25zdCBzaXplX3R5cGUgX19sZW4gPSBfX29sZF9zaXplICsgbWF4KF9fb2xkX3NpemUsIF9fbik7 CiAgICAgIGl0ZXJhdG9yIF9fbmV3X3N0YXJ0KF9NX2FsbG9jYXRlKF9fbGVuKSk7CiAgICAgIGl0 ZXJhdG9yIF9fbmV3X2ZpbmlzaChfX25ld19zdGFydCk7CiAgICAgIHRyeSB7CiAgICAgICAgX19u ZXdfZmluaXNoID0gdW5pbml0aWFsaXplZF9jb3B5KGJlZ2luKCksIF9fcG9zaXRpb24sIF9fbmV3 X3N0YXJ0KTsKICAgICAgICBfX25ld19maW5pc2ggPSB1bmluaXRpYWxpemVkX2ZpbGxfbihfX25l d19maW5pc2gsIF9fbiwgX194KTsKICAgICAgICBfX25ld19maW5pc2gKICAgICAgICAgID0gdW5p bml0aWFsaXplZF9jb3B5KF9fcG9zaXRpb24sIGVuZCgpLCBfX25ld19maW5pc2gpOwogICAgICB9 CiAgICAgIGNhdGNoKC4uLikKICAgICAgICB7CiAgICAgICAgICBfRGVzdHJveShfX25ld19zdGFy dCxfX25ld19maW5pc2gpOwogICAgICAgICAgX01fZGVhbGxvY2F0ZShfX25ld19zdGFydC5iYXNl KCksX19sZW4pOwogICAgICAgICAgdGhyb3c7CiAgICAgICAgfQogICAgICBfRGVzdHJveShfTV9z dGFydCwgX01fZmluaXNoKTsKICAgICAgX01fZGVhbGxvY2F0ZShfTV9zdGFydCwgX01fZW5kX29m X3N0b3JhZ2UgLSBfTV9zdGFydCk7CiAgICAgIF9NX3N0YXJ0ID0gX19uZXdfc3RhcnQuYmFzZSgp OwogICAgICBfTV9maW5pc2ggPSBfX25ld19maW5pc2guYmFzZSgpOwogICAgICBfTV9lbmRfb2Zf c3RvcmFnZSA9IF9fbmV3X3N0YXJ0LmJhc2UoKSArIF9fbGVuOwogICAgfQogIH0KfQoKdGVtcGxh dGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPiB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0 b3I+CnZvaWQKdmVjdG9yPF9UcCwgX0FsbG9jPjo6X01fcmFuZ2VfaW5zZXJ0KGl0ZXJhdG9yIF9f cG9zLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcmF0b3Ig X19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXJh dG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0X2l0 ZXJhdG9yX3RhZykKewogIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkgewog ICAgX19wb3MgPSBpbnNlcnQoX19wb3MsICpfX2ZpcnN0KTsKICAgICsrX19wb3M7CiAgfQp9Cgp0 ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+IHRlbXBsYXRlIDxjbGFzcyBfRm9yd2Fy ZEl0ZXJhdG9yPgp2b2lkCnZlY3RvcjxfVHAsIF9BbGxvYz46Ol9NX3JhbmdlX2luc2VydChpdGVy YXRvciBfX3Bvc2l0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Zv cndhcmRJdGVyYXRvciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZykKewogIGlmIChfX2ZpcnN0ICE9IF9fbGFzdCkg ewogICAgc2l6ZV90eXBlIF9fbiA9IGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCk7CiAgICBpZiAo c2l6ZV90eXBlKF9NX2VuZF9vZl9zdG9yYWdlIC0gX01fZmluaXNoKSA+PSBfX24pIHsKICAgICAg Y29uc3Qgc2l6ZV90eXBlIF9fZWxlbXNfYWZ0ZXIgPSBlbmQoKSAtIF9fcG9zaXRpb247CiAgICAg IGl0ZXJhdG9yIF9fb2xkX2ZpbmlzaChfTV9maW5pc2gpOwogICAgICBpZiAoX19lbGVtc19hZnRl ciA+IF9fbikgewogICAgICAgIHVuaW5pdGlhbGl6ZWRfY29weShfTV9maW5pc2ggLSBfX24sIF9N X2ZpbmlzaCwgX01fZmluaXNoKTsKICAgICAgICBfTV9maW5pc2ggKz0gX19uOwogICAgICAgIGNv cHlfYmFja3dhcmQoX19wb3NpdGlvbiwgX19vbGRfZmluaXNoIC0gX19uLCBfX29sZF9maW5pc2gp OwogICAgICAgIGNvcHkoX19maXJzdCwgX19sYXN0LCBfX3Bvc2l0aW9uKTsKICAgICAgfQogICAg ICBlbHNlIHsKICAgICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9fbWlkID0gX19maXJzdDsKICAgICAg ICBhZHZhbmNlKF9fbWlkLCBfX2VsZW1zX2FmdGVyKTsKICAgICAgICB1bmluaXRpYWxpemVkX2Nv cHkoX19taWQsIF9fbGFzdCwgX01fZmluaXNoKTsKICAgICAgICBfTV9maW5pc2ggKz0gX19uIC0g X19lbGVtc19hZnRlcjsKICAgICAgICB1bmluaXRpYWxpemVkX2NvcHkoX19wb3NpdGlvbiwgX19v bGRfZmluaXNoLCBfTV9maW5pc2gpOwogICAgICAgIF9NX2ZpbmlzaCArPSBfX2VsZW1zX2FmdGVy OwogICAgICAgIGNvcHkoX19maXJzdCwgX19taWQsIF9fcG9zaXRpb24pOwogICAgICB9CiAgICB9 CiAgICBlbHNlIHsKICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fb2xkX3NpemUgPSBzaXplKCk7CiAg ICAgIGNvbnN0IHNpemVfdHlwZSBfX2xlbiA9IF9fb2xkX3NpemUgKyBtYXgoX19vbGRfc2l6ZSwg X19uKTsKICAgICAgaXRlcmF0b3IgX19uZXdfc3RhcnQoX01fYWxsb2NhdGUoX19sZW4pKTsKICAg ICAgaXRlcmF0b3IgX19uZXdfZmluaXNoKF9fbmV3X3N0YXJ0KTsKICAgICAgdHJ5IHsKICAgICAg ICBfX25ld19maW5pc2ggPSB1bmluaXRpYWxpemVkX2NvcHkoaXRlcmF0b3IoX01fc3RhcnQpLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Bvc2l0aW9uLCBfX25l d19zdGFydCk7CiAgICAgICAgX19uZXdfZmluaXNoID0gdW5pbml0aWFsaXplZF9jb3B5KF9fZmly c3QsIF9fbGFzdCwgX19uZXdfZmluaXNoKTsKICAgICAgICBfX25ld19maW5pc2gKICAgICAgICAg ID0gdW5pbml0aWFsaXplZF9jb3B5KF9fcG9zaXRpb24sIGl0ZXJhdG9yKF9NX2ZpbmlzaCksIF9f bmV3X2ZpbmlzaCk7CiAgICAgIH0KICAgICAgY2F0Y2goLi4uKQogICAgICAgIHsKICAgICAgICAg IF9EZXN0cm95KF9fbmV3X3N0YXJ0LF9fbmV3X2ZpbmlzaCk7CiAgICAgICAgICBfTV9kZWFsbG9j YXRlKF9fbmV3X3N0YXJ0LmJhc2UoKSwgX19sZW4pOwogICAgICAgICAgdGhyb3c7CiAgICAgICAg fQogICAgICBfRGVzdHJveShfTV9zdGFydCwgX01fZmluaXNoKTsKICAgICAgX01fZGVhbGxvY2F0 ZShfTV9zdGFydCwgX01fZW5kX29mX3N0b3JhZ2UgLSBfTV9zdGFydCk7CiAgICAgIF9NX3N0YXJ0 ID0gX19uZXdfc3RhcnQuYmFzZSgpOwogICAgICBfTV9maW5pc2ggPSBfX25ld19maW5pc2guYmFz ZSgpOwogICAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9fbmV3X3N0YXJ0LmJhc2UoKSArIF9fbGVu OwogICAgfQogIH0KfQoKfQojIDcyICIvdXNyL2luY2x1ZGUvYysrLzMuMi92ZWN0b3IiIDIgMwoj IDEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2J2ZWN0b3IuaCIgMSAzCiMgNjQgIi91 c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2J2ZWN0b3IuaCIgMwpuYW1lc3BhY2Ugc3RkCnsK ICB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgX0JpdF90eXBlOwogIGVudW0geyBfTV93b3JkX2JpdCA9 IGludCg4ICogc2l6ZW9mKF9CaXRfdHlwZSkpIH07CgpzdHJ1Y3QgX0JpdF9yZWZlcmVuY2UgewoK ICBfQml0X3R5cGUgKiBfTV9wOwogIF9CaXRfdHlwZSBfTV9tYXNrOwogIF9CaXRfcmVmZXJlbmNl KF9CaXRfdHlwZSAqIF9feCwgX0JpdF90eXBlIF9feSkKICAgIDogX01fcChfX3gpLCBfTV9tYXNr KF9feSkge30KCnB1YmxpYzoKICBfQml0X3JlZmVyZW5jZSgpIDogX01fcCgwKSwgX01fbWFzaygw KSB7fQogIG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiAhISgqX01fcCAmIF9NX21hc2sp OyB9CiAgX0JpdF9yZWZlcmVuY2UmIG9wZXJhdG9yPShib29sIF9feCkKICB7CiAgICBpZiAoX194 KSAqX01fcCB8PSBfTV9tYXNrOwogICAgZWxzZSAqX01fcCAmPSB+X01fbWFzazsKICAgIHJldHVy biAqdGhpczsKICB9CiAgX0JpdF9yZWZlcmVuY2UmIG9wZXJhdG9yPShjb25zdCBfQml0X3JlZmVy ZW5jZSYgX194KQogICAgeyByZXR1cm4gKnRoaXMgPSBib29sKF9feCk7IH0KICBib29sIG9wZXJh dG9yPT0oY29uc3QgX0JpdF9yZWZlcmVuY2UmIF9feCkgY29uc3QKICAgIHsgcmV0dXJuIGJvb2wo KnRoaXMpID09IGJvb2woX194KTsgfQogIGJvb2wgb3BlcmF0b3I8KGNvbnN0IF9CaXRfcmVmZXJl bmNlJiBfX3gpIGNvbnN0CiAgICB7IHJldHVybiAhYm9vbCgqdGhpcykgJiYgYm9vbChfX3gpOyB9 CiAgdm9pZCBmbGlwKCkgeyAqX01fcCBePSBfTV9tYXNrOyB9Cn07CgppbmxpbmUgdm9pZCBzd2Fw KF9CaXRfcmVmZXJlbmNlIF9feCwgX0JpdF9yZWZlcmVuY2UgX195KQp7CiAgYm9vbCBfX3RtcCA9 IF9feDsKICBfX3ggPSBfX3k7CiAgX195ID0gX190bXA7Cn0KCnN0cnVjdCBfQml0X2l0ZXJhdG9y X2Jhc2UgOiBwdWJsaWMgaXRlcmF0b3I8cmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcsIGJvb2w+ CnsKICBfQml0X3R5cGUgKiBfTV9wOwogIHVuc2lnbmVkIGludCBfTV9vZmZzZXQ7CgogIF9CaXRf aXRlcmF0b3JfYmFzZShfQml0X3R5cGUgKiBfX3gsIHVuc2lnbmVkIGludCBfX3kpCiAgICA6IF9N X3AoX194KSwgX01fb2Zmc2V0KF9feSkge30KCiAgdm9pZCBfTV9idW1wX3VwKCkgewogICAgaWYg KF9NX29mZnNldCsrID09IF9NX3dvcmRfYml0IC0gMSkgewogICAgICBfTV9vZmZzZXQgPSAwOwog ICAgICArK19NX3A7CiAgICB9CiAgfQogIHZvaWQgX01fYnVtcF9kb3duKCkgewogICAgaWYgKF9N X29mZnNldC0tID09IDApIHsKICAgICAgX01fb2Zmc2V0ID0gX01fd29yZF9iaXQgLSAxOwogICAg ICAtLV9NX3A7CiAgICB9CiAgfQoKICB2b2lkIF9NX2luY3IocHRyZGlmZl90IF9faSkgewogICAg ZGlmZmVyZW5jZV90eXBlIF9fbiA9IF9faSArIF9NX29mZnNldDsKICAgIF9NX3AgKz0gX19uIC8g X01fd29yZF9iaXQ7CiAgICBfX24gPSBfX24gJSBfTV93b3JkX2JpdDsKICAgIGlmIChfX24gPCAw KSB7CiAgICAgIF9NX29mZnNldCA9ICh1bnNpZ25lZCBpbnQpIF9fbiArIF9NX3dvcmRfYml0Owog ICAgICAtLV9NX3A7CiAgICB9IGVsc2UKICAgICAgX01fb2Zmc2V0ID0gKHVuc2lnbmVkIGludCkg X19uOwogIH0KCiAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IF9CaXRfaXRlcmF0b3JfYmFzZSYgX19p KSBjb25zdCB7CiAgICByZXR1cm4gX01fcCA9PSBfX2kuX01fcCAmJiBfTV9vZmZzZXQgPT0gX19p Ll9NX29mZnNldDsKICB9CiAgYm9vbCBvcGVyYXRvcjwoY29uc3QgX0JpdF9pdGVyYXRvcl9iYXNl JiBfX2kpIGNvbnN0IHsKICAgIHJldHVybiBfTV9wIDwgX19pLl9NX3AgfHwgKF9NX3AgPT0gX19p Ll9NX3AgJiYgX01fb2Zmc2V0IDwgX19pLl9NX29mZnNldCk7CiAgfQogIGJvb2wgb3BlcmF0b3Ih PShjb25zdCBfQml0X2l0ZXJhdG9yX2Jhc2UmIF9faSkgY29uc3QgewogICAgcmV0dXJuICEoKnRo aXMgPT0gX19pKTsKICB9CiAgYm9vbCBvcGVyYXRvcj4oY29uc3QgX0JpdF9pdGVyYXRvcl9iYXNl JiBfX2kpIGNvbnN0IHsKICAgIHJldHVybiBfX2kgPCAqdGhpczsKICB9CiAgYm9vbCBvcGVyYXRv cjw9KGNvbnN0IF9CaXRfaXRlcmF0b3JfYmFzZSYgX19pKSBjb25zdCB7CiAgICByZXR1cm4gIShf X2kgPCAqdGhpcyk7CiAgfQogIGJvb2wgb3BlcmF0b3I+PShjb25zdCBfQml0X2l0ZXJhdG9yX2Jh c2UmIF9faSkgY29uc3QgewogICAgcmV0dXJuICEoKnRoaXMgPCBfX2kpOwogIH0KfTsKCmlubGlu ZSBwdHJkaWZmX3QKb3BlcmF0b3ItKGNvbnN0IF9CaXRfaXRlcmF0b3JfYmFzZSYgX194LCBjb25z dCBfQml0X2l0ZXJhdG9yX2Jhc2UmIF9feSkgewogIHJldHVybiBfTV93b3JkX2JpdCAqIChfX3gu X01fcCAtIF9feS5fTV9wKSArIF9feC5fTV9vZmZzZXQgLSBfX3kuX01fb2Zmc2V0Owp9CgoKc3Ry dWN0IF9CaXRfaXRlcmF0b3IgOiBwdWJsaWMgX0JpdF9pdGVyYXRvcl9iYXNlCnsKICB0eXBlZGVm IF9CaXRfcmVmZXJlbmNlIHJlZmVyZW5jZTsKICB0eXBlZGVmIF9CaXRfcmVmZXJlbmNlKiBwb2lu dGVyOwogIHR5cGVkZWYgX0JpdF9pdGVyYXRvciBpdGVyYXRvcjsKCiAgX0JpdF9pdGVyYXRvcigp IDogX0JpdF9pdGVyYXRvcl9iYXNlKDAsIDApIHt9CiAgX0JpdF9pdGVyYXRvcihfQml0X3R5cGUg KiBfX3gsIHVuc2lnbmVkIGludCBfX3kpCiAgICA6IF9CaXRfaXRlcmF0b3JfYmFzZShfX3gsIF9f eSkge30KCiAgcmVmZXJlbmNlIG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJuIHJlZmVyZW5jZShf TV9wLCAxVUwgPDwgX01fb2Zmc2V0KTsgfQogIGl0ZXJhdG9yJiBvcGVyYXRvcisrKCkgewogICAg X01fYnVtcF91cCgpOwogICAgcmV0dXJuICp0aGlzOwogIH0KICBpdGVyYXRvciBvcGVyYXRvcisr KGludCkgewogICAgaXRlcmF0b3IgX190bXAgPSAqdGhpczsKICAgIF9NX2J1bXBfdXAoKTsKICAg IHJldHVybiBfX3RtcDsKICB9CiAgaXRlcmF0b3ImIG9wZXJhdG9yLS0oKSB7CiAgICBfTV9idW1w X2Rvd24oKTsKICAgIHJldHVybiAqdGhpczsKICB9CiAgaXRlcmF0b3Igb3BlcmF0b3ItLShpbnQp IHsKICAgIGl0ZXJhdG9yIF9fdG1wID0gKnRoaXM7CiAgICBfTV9idW1wX2Rvd24oKTsKICAgIHJl dHVybiBfX3RtcDsKICB9CiAgaXRlcmF0b3ImIG9wZXJhdG9yKz0oZGlmZmVyZW5jZV90eXBlIF9f aSkgewogICAgX01faW5jcihfX2kpOwogICAgcmV0dXJuICp0aGlzOwogIH0KICBpdGVyYXRvciYg b3BlcmF0b3ItPShkaWZmZXJlbmNlX3R5cGUgX19pKSB7CiAgICAqdGhpcyArPSAtX19pOwogICAg cmV0dXJuICp0aGlzOwogIH0KICBpdGVyYXRvciBvcGVyYXRvcisoZGlmZmVyZW5jZV90eXBlIF9f aSkgY29uc3QgewogICAgaXRlcmF0b3IgX190bXAgPSAqdGhpczsKICAgIHJldHVybiBfX3RtcCAr PSBfX2k7CiAgfQogIGl0ZXJhdG9yIG9wZXJhdG9yLShkaWZmZXJlbmNlX3R5cGUgX19pKSBjb25z dCB7CiAgICBpdGVyYXRvciBfX3RtcCA9ICp0aGlzOwogICAgcmV0dXJuIF9fdG1wIC09IF9faTsK ICB9CgogIHJlZmVyZW5jZSBvcGVyYXRvcltdKGRpZmZlcmVuY2VfdHlwZSBfX2kpIHsgcmV0dXJu ICooKnRoaXMgKyBfX2kpOyB9Cn07CgppbmxpbmUgX0JpdF9pdGVyYXRvcgpvcGVyYXRvcisocHRy ZGlmZl90IF9fbiwgY29uc3QgX0JpdF9pdGVyYXRvciYgX194KSB7IHJldHVybiBfX3ggKyBfX247 IH0KCgpzdHJ1Y3QgX0JpdF9jb25zdF9pdGVyYXRvciA6IHB1YmxpYyBfQml0X2l0ZXJhdG9yX2Jh c2UKewogIHR5cGVkZWYgYm9vbCByZWZlcmVuY2U7CiAgdHlwZWRlZiBib29sIGNvbnN0X3JlZmVy ZW5jZTsKICB0eXBlZGVmIGNvbnN0IGJvb2wqIHBvaW50ZXI7CiAgdHlwZWRlZiBfQml0X2NvbnN0 X2l0ZXJhdG9yIGNvbnN0X2l0ZXJhdG9yOwoKICBfQml0X2NvbnN0X2l0ZXJhdG9yKCkgOiBfQml0 X2l0ZXJhdG9yX2Jhc2UoMCwgMCkge30KICBfQml0X2NvbnN0X2l0ZXJhdG9yKF9CaXRfdHlwZSAq IF9feCwgdW5zaWduZWQgaW50IF9feSkKICAgIDogX0JpdF9pdGVyYXRvcl9iYXNlKF9feCwgX195 KSB7fQogIF9CaXRfY29uc3RfaXRlcmF0b3IoY29uc3QgX0JpdF9pdGVyYXRvciYgX194KQogICAg OiBfQml0X2l0ZXJhdG9yX2Jhc2UoX194Ll9NX3AsIF9feC5fTV9vZmZzZXQpIHt9CgogIGNvbnN0 X3JlZmVyZW5jZSBvcGVyYXRvciooKSBjb25zdCB7CiAgICByZXR1cm4gX0JpdF9yZWZlcmVuY2Uo X01fcCwgMVVMIDw8IF9NX29mZnNldCk7CiAgfQogIGNvbnN0X2l0ZXJhdG9yJiBvcGVyYXRvcisr KCkgewogICAgX01fYnVtcF91cCgpOwogICAgcmV0dXJuICp0aGlzOwogIH0KICBjb25zdF9pdGVy YXRvciBvcGVyYXRvcisrKGludCkgewogICAgY29uc3RfaXRlcmF0b3IgX190bXAgPSAqdGhpczsK ICAgIF9NX2J1bXBfdXAoKTsKICAgIHJldHVybiBfX3RtcDsKICB9CiAgY29uc3RfaXRlcmF0b3Im IG9wZXJhdG9yLS0oKSB7CiAgICBfTV9idW1wX2Rvd24oKTsKICAgIHJldHVybiAqdGhpczsKICB9 CiAgY29uc3RfaXRlcmF0b3Igb3BlcmF0b3ItLShpbnQpIHsKICAgIGNvbnN0X2l0ZXJhdG9yIF9f dG1wID0gKnRoaXM7CiAgICBfTV9idW1wX2Rvd24oKTsKICAgIHJldHVybiBfX3RtcDsKICB9CiAg Y29uc3RfaXRlcmF0b3ImIG9wZXJhdG9yKz0oZGlmZmVyZW5jZV90eXBlIF9faSkgewogICAgX01f aW5jcihfX2kpOwogICAgcmV0dXJuICp0aGlzOwogIH0KICBjb25zdF9pdGVyYXRvciYgb3BlcmF0 b3ItPShkaWZmZXJlbmNlX3R5cGUgX19pKSB7CiAgICAqdGhpcyArPSAtX19pOwogICAgcmV0dXJu ICp0aGlzOwogIH0KICBjb25zdF9pdGVyYXRvciBvcGVyYXRvcisoZGlmZmVyZW5jZV90eXBlIF9f aSkgY29uc3QgewogICAgY29uc3RfaXRlcmF0b3IgX190bXAgPSAqdGhpczsKICAgIHJldHVybiBf X3RtcCArPSBfX2k7CiAgfQogIGNvbnN0X2l0ZXJhdG9yIG9wZXJhdG9yLShkaWZmZXJlbmNlX3R5 cGUgX19pKSBjb25zdCB7CiAgICBjb25zdF9pdGVyYXRvciBfX3RtcCA9ICp0aGlzOwogICAgcmV0 dXJuIF9fdG1wIC09IF9faTsKICB9CiAgY29uc3RfcmVmZXJlbmNlIG9wZXJhdG9yW10oZGlmZmVy ZW5jZV90eXBlIF9faSkgewogICAgcmV0dXJuICooKnRoaXMgKyBfX2kpOwogIH0KfTsKCmlubGlu ZSBfQml0X2NvbnN0X2l0ZXJhdG9yCm9wZXJhdG9yKyhwdHJkaWZmX3QgX19uLCBjb25zdCBfQml0 X2NvbnN0X2l0ZXJhdG9yJiBfX3gpIHsgcmV0dXJuIF9feCArIF9fbjsgfQoKCgoKCgp0ZW1wbGF0 ZSA8Y2xhc3MgX0FsbG9jYXRvciwgYm9vbCBfX2lzX3N0YXRpYz4KY2xhc3MgX0J2ZWN0b3JfYWxs b2NfYmFzZSB7CnB1YmxpYzoKICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvY190cmFpdHM8Ym9vbCwg X0FsbG9jYXRvcj46OmFsbG9jYXRvcl90eXBlCiAgICAgICAgICBhbGxvY2F0b3JfdHlwZTsKICBh bGxvY2F0b3JfdHlwZSBnZXRfYWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4gX01fZGF0YV9hbGxv Y2F0b3I7IH0KCiAgX0J2ZWN0b3JfYWxsb2NfYmFzZShjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19h KQogICAgOiBfTV9kYXRhX2FsbG9jYXRvcihfX2EpLCBfTV9zdGFydCgpLCBfTV9maW5pc2goKSwg X01fZW5kX29mX3N0b3JhZ2UoMCkge30KCnByb3RlY3RlZDoKICBfQml0X3R5cGUgKiBfTV9iaXRf YWxsb2Moc2l6ZV90IF9fbikKICAgIHsgcmV0dXJuIF9NX2RhdGFfYWxsb2NhdG9yLmFsbG9jYXRl KChfX24gKyBfTV93b3JkX2JpdCAtIDEpL19NX3dvcmRfYml0KTsgfQogIHZvaWQgX01fZGVhbGxv Y2F0ZSgpIHsKICAgIGlmIChfTV9zdGFydC5fTV9wKQogICAgICBfTV9kYXRhX2FsbG9jYXRvci5k ZWFsbG9jYXRlKF9NX3N0YXJ0Ll9NX3AsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgX01fZW5kX29mX3N0b3JhZ2UgLSBfTV9zdGFydC5fTV9wKTsKICB9CgogIHR5cGVuYW1lIF9B bGxvY190cmFpdHM8X0JpdF90eXBlLCBfQWxsb2NhdG9yPjo6YWxsb2NhdG9yX3R5cGUKICAgICAg ICAgIF9NX2RhdGFfYWxsb2NhdG9yOwogIF9CaXRfaXRlcmF0b3IgX01fc3RhcnQ7CiAgX0JpdF9p dGVyYXRvciBfTV9maW5pc2g7CiAgX0JpdF90eXBlICogX01fZW5kX29mX3N0b3JhZ2U7Cn07CgoK dGVtcGxhdGUgPGNsYXNzIF9BbGxvY2F0b3I+CmNsYXNzIF9CdmVjdG9yX2FsbG9jX2Jhc2U8X0Fs bG9jYXRvciwgdHJ1ZT4gewpwdWJsaWM6CiAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2NfdHJhaXRz PGJvb2wsIF9BbGxvY2F0b3I+OjphbGxvY2F0b3JfdHlwZQogICAgICAgICAgYWxsb2NhdG9yX3R5 cGU7CiAgYWxsb2NhdG9yX3R5cGUgZ2V0X2FsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJuIGFsbG9j YXRvcl90eXBlKCk7IH0KCiAgX0J2ZWN0b3JfYWxsb2NfYmFzZShjb25zdCBhbGxvY2F0b3JfdHlw ZSYpCiAgICA6IF9NX3N0YXJ0KCksIF9NX2ZpbmlzaCgpLCBfTV9lbmRfb2Zfc3RvcmFnZSgwKSB7 fQoKcHJvdGVjdGVkOgogIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jX3RyYWl0czxfQml0X3R5cGUs IF9BbGxvY2F0b3I+OjpfQWxsb2NfdHlwZQogICAgICAgICAgX0FsbG9jX3R5cGU7CgogIF9CaXRf dHlwZSAqIF9NX2JpdF9hbGxvYyhzaXplX3QgX19uKQogICAgeyByZXR1cm4gX0FsbG9jX3R5cGU6 OmFsbG9jYXRlKChfX24gKyBfTV93b3JkX2JpdCAtIDEpL19NX3dvcmRfYml0KTsgfQogIHZvaWQg X01fZGVhbGxvY2F0ZSgpIHsKICAgIGlmIChfTV9zdGFydC5fTV9wKQogICAgICBfQWxsb2NfdHlw ZTo6ZGVhbGxvY2F0ZShfTV9zdGFydC5fTV9wLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBfTV9lbmRfb2Zfc3RvcmFnZSAtIF9NX3N0YXJ0Ll9NX3ApOwogIH0KCiAgX0JpdF9pdGVyYXRv ciBfTV9zdGFydDsKICBfQml0X2l0ZXJhdG9yIF9NX2ZpbmlzaDsKICBfQml0X3R5cGUgKiBfTV9l bmRfb2Zfc3RvcmFnZTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfQWxsb2M+CmNsYXNzIF9CdmVjdG9y X2Jhc2UKICA6IHB1YmxpYyBfQnZlY3Rvcl9hbGxvY19iYXNlPF9BbGxvYywKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIF9BbGxvY190cmFpdHM8Ym9vbCwgX0FsbG9jPjo6X1NfaW5zdGFu Y2VsZXNzPgp7CiAgdHlwZWRlZiBfQnZlY3Rvcl9hbGxvY19iYXNlPF9BbGxvYywKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgX0FsbG9jX3RyYWl0czxib29sLCBfQWxsb2M+OjpfU19pbnN0 YW5jZWxlc3M+CiAgICAgICAgICBfQmFzZTsKcHVibGljOgogIHR5cGVkZWYgdHlwZW5hbWUgX0Jh c2U6OmFsbG9jYXRvcl90eXBlIGFsbG9jYXRvcl90eXBlOwoKICBfQnZlY3Rvcl9iYXNlKGNvbnN0 IGFsbG9jYXRvcl90eXBlJiBfX2EpIDogX0Jhc2UoX19hKSB7fQogIH5fQnZlY3Rvcl9iYXNlKCkg eyBfQmFzZTo6X01fZGVhbGxvY2F0ZSgpOyB9Cn07Cgp9CgoKCm5hbWVzcGFjZSBzdGQKewoKdGVt cGxhdGUgPHR5cGVuYW1lIF9BbGxvYz4KICBjbGFzcyB2ZWN0b3I8Ym9vbCwgX0FsbG9jPiA6IHB1 YmxpYyBfQnZlY3Rvcl9iYXNlPF9BbGxvYz4KICB7CiAgcHVibGljOgogICAgdHlwZWRlZiBib29s IHZhbHVlX3R5cGU7CiAgICB0eXBlZGVmIHNpemVfdCBzaXplX3R5cGU7CiAgICB0eXBlZGVmIHB0 cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CiAgICB0eXBlZGVmIF9CaXRfcmVmZXJlbmNlIHJlZmVy ZW5jZTsKICAgIHR5cGVkZWYgYm9vbCBjb25zdF9yZWZlcmVuY2U7CiAgICB0eXBlZGVmIF9CaXRf cmVmZXJlbmNlKiBwb2ludGVyOwogICAgdHlwZWRlZiBjb25zdCBib29sKiBjb25zdF9wb2ludGVy OwoKICAgIHR5cGVkZWYgX0JpdF9pdGVyYXRvciBpdGVyYXRvcjsKICAgIHR5cGVkZWYgX0JpdF9j b25zdF9pdGVyYXRvciBjb25zdF9pdGVyYXRvcjsKCiAgICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0 b3I8Y29uc3RfaXRlcmF0b3I+IGNvbnN0X3JldmVyc2VfaXRlcmF0b3I7CiAgICB0eXBlZGVmIHJl dmVyc2VfaXRlcmF0b3I8aXRlcmF0b3I+IHJldmVyc2VfaXRlcmF0b3I7CgogICAgdHlwZWRlZiB0 eXBlbmFtZSBfQnZlY3Rvcl9iYXNlPF9BbGxvYz46OmFsbG9jYXRvcl90eXBlIGFsbG9jYXRvcl90 eXBlOwogICAgYWxsb2NhdG9yX3R5cGUgZ2V0X2FsbG9jYXRvcigpIGNvbnN0IHsKICAgICAgcmV0 dXJuIF9CdmVjdG9yX2Jhc2U8X0FsbG9jPjo6Z2V0X2FsbG9jYXRvcigpOwogICAgfQoKICBwcm90 ZWN0ZWQ6CiAgICB1c2luZyBfQnZlY3Rvcl9iYXNlPF9BbGxvYz46Ol9NX2JpdF9hbGxvYzsKICAg IHVzaW5nIF9CdmVjdG9yX2Jhc2U8X0FsbG9jPjo6X01fZGVhbGxvY2F0ZTsKICAgIHVzaW5nIF9C dmVjdG9yX2Jhc2U8X0FsbG9jPjo6X01fc3RhcnQ7CiAgICB1c2luZyBfQnZlY3Rvcl9iYXNlPF9B bGxvYz46Ol9NX2ZpbmlzaDsKICAgIHVzaW5nIF9CdmVjdG9yX2Jhc2U8X0FsbG9jPjo6X01fZW5k X29mX3N0b3JhZ2U7CgogIHByb3RlY3RlZDoKICAgIHZvaWQgX01faW5pdGlhbGl6ZShzaXplX3R5 cGUgX19uKSB7CiAgICAgIF9CaXRfdHlwZSAqIF9fcSA9IF9NX2JpdF9hbGxvYyhfX24pOwogICAg ICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9fcSArIChfX24gKyBfTV93b3JkX2JpdCAtIDEpL19NX3dv cmRfYml0OwogICAgICBfTV9zdGFydCA9IGl0ZXJhdG9yKF9fcSwgMCk7CiAgICAgIF9NX2Zpbmlz aCA9IF9NX3N0YXJ0ICsgZGlmZmVyZW5jZV90eXBlKF9fbik7CiAgICB9CiAgICB2b2lkIF9NX2lu c2VydF9hdXgoaXRlcmF0b3IgX19wb3NpdGlvbiwgYm9vbCBfX3gpIHsKICAgICAgaWYgKF9NX2Zp bmlzaC5fTV9wICE9IF9NX2VuZF9vZl9zdG9yYWdlKSB7CiAgICAgICAgY29weV9iYWNrd2FyZChf X3Bvc2l0aW9uLCBfTV9maW5pc2gsIF9NX2ZpbmlzaCArIDEpOwogICAgICAgICpfX3Bvc2l0aW9u ID0gX194OwogICAgICAgICsrX01fZmluaXNoOwogICAgICB9CiAgICAgIGVsc2UgewogICAgICAg IHNpemVfdHlwZSBfX2xlbiA9IHNpemUoKQogICAgICAgICAgICAgICAgICAgICAgICAgID8gMiAq IHNpemUoKSA6IHN0YXRpY19jYXN0PHNpemVfdHlwZT4oX01fd29yZF9iaXQpOwogICAgICAgIF9C aXRfdHlwZSAqIF9fcSA9IF9NX2JpdF9hbGxvYyhfX2xlbik7CiAgICAgICAgaXRlcmF0b3IgX19p ID0gY29weShiZWdpbigpLCBfX3Bvc2l0aW9uLCBpdGVyYXRvcihfX3EsIDApKTsKICAgICAgICAq X19pKysgPSBfX3g7CiAgICAgICAgX01fZmluaXNoID0gY29weShfX3Bvc2l0aW9uLCBlbmQoKSwg X19pKTsKICAgICAgICBfTV9kZWFsbG9jYXRlKCk7CiAgICAgICAgX01fZW5kX29mX3N0b3JhZ2Ug PSBfX3EgKyAoX19sZW4gKyBfTV93b3JkX2JpdCAtIDEpL19NX3dvcmRfYml0OwogICAgICAgIF9N X3N0YXJ0ID0gaXRlcmF0b3IoX19xLCAwKTsKICAgICAgfQogICAgfQoKICAgIHRlbXBsYXRlIDxj bGFzcyBfSW5wdXRJdGVyYXRvcj4KICAgIHZvaWQgX01faW5pdGlhbGl6ZV9yYW5nZShfSW5wdXRJ dGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFnKSB7CiAgICAgIF9NX3N0YXJ0ID0gaXRlcmF0 b3IoKTsKICAgICAgX01fZmluaXNoID0gaXRlcmF0b3IoKTsKICAgICAgX01fZW5kX29mX3N0b3Jh Z2UgPSAwOwogICAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAgICAg ICAgcHVzaF9iYWNrKCpfX2ZpcnN0KTsKICAgIH0KCiAgICB0ZW1wbGF0ZSA8Y2xhc3MgX0Zvcndh cmRJdGVyYXRvcj4KICAgIHZvaWQgX01faW5pdGlhbGl6ZV9yYW5nZShfRm9yd2FyZEl0ZXJhdG9y IF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGZvcndhcmRfaXRlcmF0b3JfdGFnKSB7CiAgICAgIHNpemVfdHlwZSBfX24gPSBkaXN0 YW5jZShfX2ZpcnN0LCBfX2xhc3QpOwogICAgICBfTV9pbml0aWFsaXplKF9fbik7CiAgICAgIGNv cHkoX19maXJzdCwgX19sYXN0LCBfTV9zdGFydCk7CiAgICB9CgogICAgdGVtcGxhdGUgPGNsYXNz IF9JbnB1dEl0ZXJhdG9yPgogICAgdm9pZCBfTV9pbnNlcnRfcmFuZ2UoaXRlcmF0b3IgX19wb3Ms CiAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJ dGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9pdGVyYXRvcl90 YWcpIHsKICAgICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KSB7CiAgICAg ICAgX19wb3MgPSBpbnNlcnQoX19wb3MsICpfX2ZpcnN0KTsKICAgICAgICArK19fcG9zOwogICAg ICB9CiAgICB9CgogICAgdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CiAgICB2b2lk IF9NX2luc2VydF9yYW5nZShpdGVyYXRvciBfX3Bvc2l0aW9uLAogICAgICAgICAgICAgICAgICAg ICAgICAgX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwK ICAgICAgICAgICAgICAgICAgICAgICAgIGZvcndhcmRfaXRlcmF0b3JfdGFnKSB7CiAgICAgIGlm IChfX2ZpcnN0ICE9IF9fbGFzdCkgewogICAgICAgIHNpemVfdHlwZSBfX24gPSBkaXN0YW5jZShf X2ZpcnN0LCBfX2xhc3QpOwogICAgICAgIGlmIChjYXBhY2l0eSgpIC0gc2l6ZSgpID49IF9fbikg ewogICAgICAgICAgY29weV9iYWNrd2FyZChfX3Bvc2l0aW9uLCBlbmQoKSwgX01fZmluaXNoICsg ZGlmZmVyZW5jZV90eXBlKF9fbikpOwogICAgICAgICAgY29weShfX2ZpcnN0LCBfX2xhc3QsIF9f cG9zaXRpb24pOwogICAgICAgICAgX01fZmluaXNoICs9IGRpZmZlcmVuY2VfdHlwZShfX24pOwog ICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgIHNpemVfdHlwZSBfX2xlbiA9IHNpemUo KSArIG1heChzaXplKCksIF9fbik7CiAgICAgICAgICBfQml0X3R5cGUgKiBfX3EgPSBfTV9iaXRf YWxsb2MoX19sZW4pOwogICAgICAgICAgaXRlcmF0b3IgX19pID0gY29weShiZWdpbigpLCBfX3Bv c2l0aW9uLCBpdGVyYXRvcihfX3EsIDApKTsKICAgICAgICAgIF9faSA9IGNvcHkoX19maXJzdCwg X19sYXN0LCBfX2kpOwogICAgICAgICAgX01fZmluaXNoID0gY29weShfX3Bvc2l0aW9uLCBlbmQo KSwgX19pKTsKICAgICAgICAgIF9NX2RlYWxsb2NhdGUoKTsKICAgICAgICAgIF9NX2VuZF9vZl9z dG9yYWdlID0gX19xICsgKF9fbGVuICsgX01fd29yZF9iaXQgLSAxKS9fTV93b3JkX2JpdDsKICAg ICAgICAgIF9NX3N0YXJ0ID0gaXRlcmF0b3IoX19xLCAwKTsKICAgICAgICB9CiAgICAgIH0KICAg IH0KCiAgcHVibGljOgogICAgaXRlcmF0b3IgYmVnaW4oKSB7IHJldHVybiBfTV9zdGFydDsgfQog ICAgY29uc3RfaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBfTV9zdGFydDsgfQogICAg aXRlcmF0b3IgZW5kKCkgeyByZXR1cm4gX01fZmluaXNoOyB9CiAgICBjb25zdF9pdGVyYXRvciBl bmQoKSBjb25zdCB7IHJldHVybiBfTV9maW5pc2g7IH0KCiAgICByZXZlcnNlX2l0ZXJhdG9yIHJi ZWdpbigpIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IoZW5kKCkpOyB9CiAgICBjb25zdF9yZXZl cnNlX2l0ZXJhdG9yIHJiZWdpbigpIGNvbnN0IHsKICAgICAgcmV0dXJuIGNvbnN0X3JldmVyc2Vf aXRlcmF0b3IoZW5kKCkpOwogICAgfQogICAgcmV2ZXJzZV9pdGVyYXRvciByZW5kKCkgeyByZXR1 cm4gcmV2ZXJzZV9pdGVyYXRvcihiZWdpbigpKTsgfQogICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRv ciByZW5kKCkgY29uc3QgewogICAgICByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcihiZWdp bigpKTsKICAgIH0KCiAgICBzaXplX3R5cGUgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIHNpemVfdHlw ZShlbmQoKSAtIGJlZ2luKCkpOyB9CiAgICBzaXplX3R5cGUgbWF4X3NpemUoKSBjb25zdCB7IHJl dHVybiBzaXplX3R5cGUoLTEpOyB9CiAgICBzaXplX3R5cGUgY2FwYWNpdHkoKSBjb25zdCB7CiAg ICAgIHJldHVybiBzaXplX3R5cGUoY29uc3RfaXRlcmF0b3IoX01fZW5kX29mX3N0b3JhZ2UsIDAp IC0gYmVnaW4oKSk7CiAgICB9CiAgICBib29sIGVtcHR5KCkgY29uc3QgeyByZXR1cm4gYmVnaW4o KSA9PSBlbmQoKTsgfQoKICAgIHJlZmVyZW5jZSBvcGVyYXRvcltdKHNpemVfdHlwZSBfX24pCiAg ICAgIHsgcmV0dXJuICooYmVnaW4oKSArIGRpZmZlcmVuY2VfdHlwZShfX24pKTsgfQogICAgY29u c3RfcmVmZXJlbmNlIG9wZXJhdG9yW10oc2l6ZV90eXBlIF9fbikgY29uc3QKICAgICAgeyByZXR1 cm4gKihiZWdpbigpICsgZGlmZmVyZW5jZV90eXBlKF9fbikpOyB9CgogICAgdm9pZCBfTV9yYW5n ZV9jaGVjayhzaXplX3R5cGUgX19uKSBjb25zdCB7CiAgICAgIGlmIChfX24gPj0gdGhpcy0+c2l6 ZSgpKQogICAgICAgIF9fdGhyb3dfb3V0X29mX3JhbmdlKCJ2ZWN0b3I8Ym9vbD4iKTsKICAgIH0K CiAgICByZWZlcmVuY2UgYXQoc2l6ZV90eXBlIF9fbikKICAgICAgeyBfTV9yYW5nZV9jaGVjayhf X24pOyByZXR1cm4gKCp0aGlzKVtfX25dOyB9CiAgICBjb25zdF9yZWZlcmVuY2UgYXQoc2l6ZV90 eXBlIF9fbikgY29uc3QKICAgICAgeyBfTV9yYW5nZV9jaGVjayhfX24pOyByZXR1cm4gKCp0aGlz KVtfX25dOyB9CgogICAgZXhwbGljaXQgdmVjdG9yKGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2Eg PSBhbGxvY2F0b3JfdHlwZSgpKQogICAgICA6IF9CdmVjdG9yX2Jhc2U8X0FsbG9jPihfX2EpIHt9 CgogICAgdmVjdG9yKHNpemVfdHlwZSBfX24sIGJvb2wgX192YWx1ZSwKICAgICAgICAgICAgICBj b25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKICAgICAgOiBfQnZl Y3Rvcl9iYXNlPF9BbGxvYz4oX19hKQogICAgewogICAgICBfTV9pbml0aWFsaXplKF9fbik7CiAg ICAgIGZpbGwoX01fc3RhcnQuX01fcCwgX01fZW5kX29mX3N0b3JhZ2UsIF9fdmFsdWUgPyB+MCA6 IDApOwogICAgfQoKICAgIGV4cGxpY2l0IHZlY3RvcihzaXplX3R5cGUgX19uKQogICAgICA6IF9C dmVjdG9yX2Jhc2U8X0FsbG9jPihhbGxvY2F0b3JfdHlwZSgpKQogICAgewogICAgICBfTV9pbml0 aWFsaXplKF9fbik7CiAgICAgIGZpbGwoX01fc3RhcnQuX01fcCwgX01fZW5kX29mX3N0b3JhZ2Us IDApOwogICAgfQoKICAgIHZlY3Rvcihjb25zdCB2ZWN0b3ImIF9feCkgOiBfQnZlY3Rvcl9iYXNl PF9BbGxvYz4oX194LmdldF9hbGxvY2F0b3IoKSkgewogICAgICBfTV9pbml0aWFsaXplKF9feC5z aXplKCkpOwogICAgICBjb3B5KF9feC5iZWdpbigpLCBfX3guZW5kKCksIF9NX3N0YXJ0KTsKICAg IH0KCgoKICAgIHRlbXBsYXRlIDxjbGFzcyBfSW50ZWdlcj4KICAgIHZvaWQgX01faW5pdGlhbGl6 ZV9kaXNwYXRjaChfSW50ZWdlciBfX24sIF9JbnRlZ2VyIF9feCwgX190cnVlX3R5cGUpIHsKICAg ICAgX01faW5pdGlhbGl6ZShfX24pOwogICAgICBmaWxsKF9NX3N0YXJ0Ll9NX3AsIF9NX2VuZF9v Zl9zdG9yYWdlLCBfX3ggPyB+MCA6IDApOwogICAgfQoKICAgIHRlbXBsYXRlIDxjbGFzcyBfSW5w dXRJdGVyYXRvcj4KICAgIHZvaWQgX01faW5pdGlhbGl6ZV9kaXNwYXRjaChfSW5wdXRJdGVyYXRv ciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgX19mYWxzZV90eXBlKSB7CiAgICAgIF9NX2luaXRpYWxpemVfcmFuZ2UoX19maXJz dCwgX19sYXN0LCBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsKICAgIH0KCiAgICB0ZW1w bGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgICB2ZWN0b3IoX0lucHV0SXRlcmF0b3IgX19m aXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgY29uc3QgYWxsb2NhdG9y X3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCiAgICAgIDogX0J2ZWN0b3JfYmFzZTxfQWxs b2M+KF9fYSkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfaW50ZWdlcjxfSW5wdXRJ dGVyYXRvcj46Ol9JbnRlZ3JhbCBfSW50ZWdyYWw7CiAgICAgIF9NX2luaXRpYWxpemVfZGlzcGF0 Y2goX19maXJzdCwgX19sYXN0LCBfSW50ZWdyYWwoKSk7CiAgICB9CgogICAgfnZlY3RvcigpIHsg fQoKICAgIHZlY3RvciYgb3BlcmF0b3I9KGNvbnN0IHZlY3RvciYgX194KSB7CiAgICAgIGlmICgm X194ID09IHRoaXMpIHJldHVybiAqdGhpczsKICAgICAgaWYgKF9feC5zaXplKCkgPiBjYXBhY2l0 eSgpKSB7CiAgICAgICAgX01fZGVhbGxvY2F0ZSgpOwogICAgICAgIF9NX2luaXRpYWxpemUoX194 LnNpemUoKSk7CiAgICAgIH0KICAgICAgY29weShfX3guYmVnaW4oKSwgX194LmVuZCgpLCBiZWdp bigpKTsKICAgICAgX01fZmluaXNoID0gYmVnaW4oKSArIGRpZmZlcmVuY2VfdHlwZShfX3guc2l6 ZSgpKTsKICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKCgoKCgogICAgdm9pZCBfTV9maWxsX2Fz c2lnbihzaXplX3QgX19uLCBib29sIF9feCkgewogICAgICBpZiAoX19uID4gc2l6ZSgpKSB7CiAg ICAgICAgZmlsbChfTV9zdGFydC5fTV9wLCBfTV9lbmRfb2Zfc3RvcmFnZSwgX194ID8gfjAgOiAw KTsKICAgICAgICBpbnNlcnQoZW5kKCksIF9fbiAtIHNpemUoKSwgX194KTsKICAgICAgfQogICAg ICBlbHNlIHsKICAgICAgICBlcmFzZShiZWdpbigpICsgX19uLCBlbmQoKSk7CiAgICAgICAgZmls bChfTV9zdGFydC5fTV9wLCBfTV9lbmRfb2Zfc3RvcmFnZSwgX194ID8gfjAgOiAwKTsKICAgICAg fQogICAgfQoKICAgIHZvaWQgYXNzaWduKHNpemVfdCBfX24sIGJvb2wgX194KSB7IF9NX2ZpbGxf YXNzaWduKF9fbiwgX194KTsgfQoKICAgIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4K ICAgIHZvaWQgYXNzaWduKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9f bGFzdCkgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19pbnRlZ2VyPF9JbnB1dEl0ZXJhdG9y Pjo6X0ludGVncmFsIF9JbnRlZ3JhbDsKICAgICAgX01fYXNzaWduX2Rpc3BhdGNoKF9fZmlyc3Qs IF9fbGFzdCwgX0ludGVncmFsKCkpOwogICAgfQoKICAgIHRlbXBsYXRlIDxjbGFzcyBfSW50ZWdl cj4KICAgIHZvaWQgX01fYXNzaWduX2Rpc3BhdGNoKF9JbnRlZ2VyIF9fbiwgX0ludGVnZXIgX192 YWwsIF9fdHJ1ZV90eXBlKQogICAgICB7IF9NX2ZpbGxfYXNzaWduKChzaXplX3QpIF9fbiwgKGJv b2wpIF9fdmFsKTsgfQoKICAgIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyPgogICAgdm9pZCBf TV9hc3NpZ25fZGlzcGF0Y2goX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwg X19mYWxzZV90eXBlKQogICAgICB7IF9NX2Fzc2lnbl9hdXgoX19maXJzdCwgX19sYXN0LCBfX2l0 ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsgfQoKICAgIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJ dGVyYXRvcj4KICAgIHZvaWQgX01fYXNzaWduX2F1eChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBf SW5wdXRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRfaXRlcmF0 b3JfdGFnKSB7CiAgICAgIGl0ZXJhdG9yIF9fY3VyID0gYmVnaW4oKTsKICAgICAgZm9yICggOyBf X2ZpcnN0ICE9IF9fbGFzdCAmJiBfX2N1ciAhPSBlbmQoKTsgKytfX2N1ciwgKytfX2ZpcnN0KQog ICAgICAgICpfX2N1ciA9ICpfX2ZpcnN0OwogICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpCiAg ICAgICAgZXJhc2UoX19jdXIsIGVuZCgpKTsKICAgICAgZWxzZQogICAgICAgIGluc2VydChlbmQo KSwgX19maXJzdCwgX19sYXN0KTsKICAgIH0KCiAgICB0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJ dGVyYXRvcj4KICAgIHZvaWQgX01fYXNzaWduX2F1eChfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3Qs IF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgIGZvcndhcmRf aXRlcmF0b3JfdGFnKSB7CiAgICAgIHNpemVfdHlwZSBfX2xlbiA9IGRpc3RhbmNlKF9fZmlyc3Qs IF9fbGFzdCk7CiAgICAgIGlmIChfX2xlbiA8IHNpemUoKSkKICAgICAgICBlcmFzZShjb3B5KF9f Zmlyc3QsIF9fbGFzdCwgYmVnaW4oKSksIGVuZCgpKTsKICAgICAgZWxzZSB7CiAgICAgICAgX0Zv cndhcmRJdGVyYXRvciBfX21pZCA9IF9fZmlyc3Q7CiAgICAgICAgYWR2YW5jZShfX21pZCwgc2l6 ZSgpKTsKICAgICAgICBjb3B5KF9fZmlyc3QsIF9fbWlkLCBiZWdpbigpKTsKICAgICAgICBpbnNl cnQoZW5kKCksIF9fbWlkLCBfX2xhc3QpOwogICAgICB9CiAgICB9CgogICAgdm9pZCByZXNlcnZl KHNpemVfdHlwZSBfX24pIHsKICAgICAgaWYgKF9fbiA+IHRoaXMtPm1heF9zaXplKCkpCiAgICAg ICAgX190aHJvd19sZW5ndGhfZXJyb3IoInZlY3Rvcjo6cmVzZXJ2ZSIpOwogICAgICBpZiAodGhp cy0+Y2FwYWNpdHkoKSA8IF9fbikgewogICAgICAgIF9CaXRfdHlwZSAqIF9fcSA9IF9NX2JpdF9h bGxvYyhfX24pOwogICAgICAgIF9NX2ZpbmlzaCA9IGNvcHkoYmVnaW4oKSwgZW5kKCksIGl0ZXJh dG9yKF9fcSwgMCkpOwogICAgICAgIF9NX2RlYWxsb2NhdGUoKTsKICAgICAgICBfTV9zdGFydCA9 IGl0ZXJhdG9yKF9fcSwgMCk7CiAgICAgICAgX01fZW5kX29mX3N0b3JhZ2UgPSBfX3EgKyAoX19u ICsgX01fd29yZF9iaXQgLSAxKS9fTV93b3JkX2JpdDsKICAgICAgfQogICAgfQoKICAgIHJlZmVy ZW5jZSBmcm9udCgpIHsgcmV0dXJuICpiZWdpbigpOyB9CiAgICBjb25zdF9yZWZlcmVuY2UgZnJv bnQoKSBjb25zdCB7IHJldHVybiAqYmVnaW4oKTsgfQogICAgcmVmZXJlbmNlIGJhY2soKSB7IHJl dHVybiAqKGVuZCgpIC0gMSk7IH0KICAgIGNvbnN0X3JlZmVyZW5jZSBiYWNrKCkgY29uc3QgeyBy ZXR1cm4gKihlbmQoKSAtIDEpOyB9CiAgICB2b2lkIHB1c2hfYmFjayhib29sIF9feCkgewogICAg ICBpZiAoX01fZmluaXNoLl9NX3AgIT0gX01fZW5kX29mX3N0b3JhZ2UpCiAgICAgICAgKl9NX2Zp bmlzaCsrID0gX194OwogICAgICBlbHNlCiAgICAgICAgX01faW5zZXJ0X2F1eChlbmQoKSwgX194 KTsKICAgIH0KICAgIHZvaWQgc3dhcCh2ZWN0b3I8Ym9vbCwgX0FsbG9jPiYgX194KSB7CiAgICAg IHN0ZDo6c3dhcChfTV9zdGFydCwgX194Ll9NX3N0YXJ0KTsKICAgICAgc3RkOjpzd2FwKF9NX2Zp bmlzaCwgX194Ll9NX2ZpbmlzaCk7CiAgICAgIHN0ZDo6c3dhcChfTV9lbmRfb2Zfc3RvcmFnZSwg X194Ll9NX2VuZF9vZl9zdG9yYWdlKTsKICAgIH0KICAgIGl0ZXJhdG9yIGluc2VydChpdGVyYXRv ciBfX3Bvc2l0aW9uLCBib29sIF9feCA9IGJvb2woKSkgewogICAgICBkaWZmZXJlbmNlX3R5cGUg X19uID0gX19wb3NpdGlvbiAtIGJlZ2luKCk7CiAgICAgIGlmIChfTV9maW5pc2guX01fcCAhPSBf TV9lbmRfb2Zfc3RvcmFnZSAmJiBfX3Bvc2l0aW9uID09IGVuZCgpKQogICAgICAgICpfTV9maW5p c2grKyA9IF9feDsKICAgICAgZWxzZQogICAgICAgIF9NX2luc2VydF9hdXgoX19wb3NpdGlvbiwg X194KTsKICAgICAgcmV0dXJuIGJlZ2luKCkgKyBfX247CiAgICB9CgoKCiAgICB0ZW1wbGF0ZSA8 Y2xhc3MgX0ludGVnZXI+CiAgICB2b2lkIF9NX2luc2VydF9kaXNwYXRjaChpdGVyYXRvciBfX3Bv cywgX0ludGVnZXIgX19uLCBfSW50ZWdlciBfX3gsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICBfX3RydWVfdHlwZSkgewogICAgICBfTV9maWxsX2luc2VydChfX3BvcywgX19uLCBfX3gpOwog ICAgfQoKICAgIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICAgIHZvaWQgX01faW5z ZXJ0X2Rpc3BhdGNoKGl0ZXJhdG9yIF9fcG9zLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg X0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgX19mYWxzZV90eXBlKSB7CiAgICAgIF9NX2luc2VydF9yYW5nZShf X3BvcywgX19maXJzdCwgX19sYXN0LCBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsKICAg IH0KCiAgICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgICB2b2lkIGluc2VydChp dGVyYXRvciBfX3Bvc2l0aW9uLAogICAgICAgICAgICAgICAgX0lucHV0SXRlcmF0b3IgX19maXJz dCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KSB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0lzX2lu dGVnZXI8X0lucHV0SXRlcmF0b3I+OjpfSW50ZWdyYWwgX0ludGVncmFsOwogICAgICBfTV9pbnNl cnRfZGlzcGF0Y2goX19wb3NpdGlvbiwgX19maXJzdCwgX19sYXN0LCBfSW50ZWdyYWwoKSk7CiAg ICB9CgogICAgdm9pZCBfTV9maWxsX2luc2VydChpdGVyYXRvciBfX3Bvc2l0aW9uLCBzaXplX3R5 cGUgX19uLCBib29sIF9feCkgewogICAgICBpZiAoX19uID09IDApIHJldHVybjsKICAgICAgaWYg KGNhcGFjaXR5KCkgLSBzaXplKCkgPj0gX19uKSB7CiAgICAgICAgY29weV9iYWNrd2FyZChfX3Bv c2l0aW9uLCBlbmQoKSwgX01fZmluaXNoICsgZGlmZmVyZW5jZV90eXBlKF9fbikpOwogICAgICAg IGZpbGwoX19wb3NpdGlvbiwgX19wb3NpdGlvbiArIGRpZmZlcmVuY2VfdHlwZShfX24pLCBfX3gp OwogICAgICAgIF9NX2ZpbmlzaCArPSBkaWZmZXJlbmNlX3R5cGUoX19uKTsKICAgICAgfQogICAg ICBlbHNlIHsKICAgICAgICBzaXplX3R5cGUgX19sZW4gPSBzaXplKCkgKyBtYXgoc2l6ZSgpLCBf X24pOwogICAgICAgIF9CaXRfdHlwZSAqIF9fcSA9IF9NX2JpdF9hbGxvYyhfX2xlbik7CiAgICAg ICAgaXRlcmF0b3IgX19pID0gY29weShiZWdpbigpLCBfX3Bvc2l0aW9uLCBpdGVyYXRvcihfX3Es IDApKTsKICAgICAgICBmaWxsX24oX19pLCBfX24sIF9feCk7CiAgICAgICAgX01fZmluaXNoID0g Y29weShfX3Bvc2l0aW9uLCBlbmQoKSwgX19pICsgZGlmZmVyZW5jZV90eXBlKF9fbikpOwogICAg ICAgIF9NX2RlYWxsb2NhdGUoKTsKICAgICAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9fcSArIChf X2xlbiArIF9NX3dvcmRfYml0IC0gMSkvX01fd29yZF9iaXQ7CiAgICAgICAgX01fc3RhcnQgPSBp dGVyYXRvcihfX3EsIDApOwogICAgICB9CiAgICB9CgogICAgdm9pZCBpbnNlcnQoaXRlcmF0b3Ig X19wb3NpdGlvbiwgc2l6ZV90eXBlIF9fbiwgYm9vbCBfX3gpIHsKICAgICAgX01fZmlsbF9pbnNl cnQoX19wb3NpdGlvbiwgX19uLCBfX3gpOwogICAgfQoKICAgIHZvaWQgcG9wX2JhY2soKSB7IC0t X01fZmluaXNoOyB9CiAgICBpdGVyYXRvciBlcmFzZShpdGVyYXRvciBfX3Bvc2l0aW9uKSB7CiAg ICAgIGlmIChfX3Bvc2l0aW9uICsgMSAhPSBlbmQoKSkKICAgICAgICBjb3B5KF9fcG9zaXRpb24g KyAxLCBlbmQoKSwgX19wb3NpdGlvbik7CiAgICAgICAgLS1fTV9maW5pc2g7CiAgICAgIHJldHVy biBfX3Bvc2l0aW9uOwogICAgfQogICAgaXRlcmF0b3IgZXJhc2UoaXRlcmF0b3IgX19maXJzdCwg aXRlcmF0b3IgX19sYXN0KSB7CiAgICAgIF9NX2ZpbmlzaCA9IGNvcHkoX19sYXN0LCBlbmQoKSwg X19maXJzdCk7CiAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgfQogICAgdm9pZCByZXNpemUoc2l6 ZV90eXBlIF9fbmV3X3NpemUsIGJvb2wgX194ID0gYm9vbCgpKSB7CiAgICAgIGlmIChfX25ld19z aXplIDwgc2l6ZSgpKQogICAgICAgIGVyYXNlKGJlZ2luKCkgKyBkaWZmZXJlbmNlX3R5cGUoX19u ZXdfc2l6ZSksIGVuZCgpKTsKICAgICAgZWxzZQogICAgICAgIGluc2VydChlbmQoKSwgX19uZXdf c2l6ZSAtIHNpemUoKSwgX194KTsKICAgIH0KICAgIHZvaWQgZmxpcCgpIHsKICAgICAgZm9yIChf Qml0X3R5cGUgKiBfX3AgPSBfTV9zdGFydC5fTV9wOyBfX3AgIT0gX01fZW5kX29mX3N0b3JhZ2U7 ICsrX19wKQogICAgICAgICpfX3AgPSB+Kl9fcDsKICAgIH0KCiAgICB2b2lkIGNsZWFyKCkgeyBl cmFzZShiZWdpbigpLCBlbmQoKSk7IH0KICB9OwoKCnR5cGVkZWYgdmVjdG9yPGJvb2wsIF9fYWxs b2M+IGJpdF92ZWN0b3I7Cgp9CiMgNzMgIi91c3IvaW5jbHVkZS9jKysvMy4yL3ZlY3RvciIgMiAz CiMgMyAiU2VnRmF1bHQuY2MiIDIKCmludCBtYWluKCkKewogICAgICAgIHN3aXRjaCAoMCkgewog ICAgICAgIGNhc2UgMDoKICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiB1 cmxfbGlzdDsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGRlZmF1bHQ6CiAgICAgICAg fQp9Cg==