This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.
| Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
|---|---|---|
| Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
>Number: 2503 >Category: c++ >Synopsis: Fatal signal comiling map template using -g on AIX >Confidential: no >Severity: non-critical >Priority: low >Responsible: unassigned >State: open >Class: ice-on-legal-code >Submitter-Id: net >Arrival-Date: Fri Apr 06 11:06:01 PDT 2001 >Closed-Date: >Last-Modified: >Originator: Mark Glemboski >Release: powerpc-ibm-aix3.2.5/2.95.3 gcc version 2.95.3 20010315 (release) >Organization: >Environment: OS: AIX 2 3 000040754900 Hardware: powerpc-ibm-aix3.2.5 >Description: Compiling a map template that has a string as a key with the -g option causes the error: g++: Internal compiler error: program as got fatal signal 11 >How-To-Repeat: Compile this source file 'tm.C': #include <string> #include <map> map <string, int> badMap; Using the command: g++ -g -c tm.C -o tm.o >Fix: Work arounds: Compile without using '-g'. -or- Use const char * instead of string >Release-Note: >Audit-Trail: >Unformatted: ----gnatsweb-attachment---- Content-Type: application/octet-stream; name="tm.i" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="tm.i" IyAxICJ0bS5DIgojIDEgIi9hb2xuZXQvcGtnL2djYy0yLjk1LjMvbGliL2djYy1saWIvcG93ZXJw Yy1pYm0tYWl4My4yLjUvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RyaW5nIiAx IDMKIyAxICIvYW9sbmV0L3BrZy9nY2MtMi45NS4zL2xpYi9nY2MtbGliL3Bvd2VycGMtaWJtLWFp eDMuMi41LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0ZC9iYXN0cmluZy5oIiAx IDMKI3ByYWdtYSBpbnRlcmZhY2UKIyAxICIvYW9sbmV0L3BrZy9nY2MtMi45NS4zL2xpYi9nY2Mt bGliL3Bvd2VycGMtaWJtLWFpeDMuMi41LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0z L2NzdGRkZWYiIDEgMwojIDEgIi9hb2xuZXQvcGtnL2djYy0yLjk1LjMvbGliL2djYy1saWIvcG93 ZXJwYy1pYm0tYWl4My4yLjUvMi45NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDEgMyA0CiMgNjEgIi9h b2xuZXQvcGtnL2djYy0yLjk1LjMvbGliL2djYy1saWIvcG93ZXJwYy1pYm0tYWl4My4yLjUvMi45 NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDMgNAp0eXBlZGVmIGludCBwdHJkaWZmX3Q7CnR5cGVkZWYg bG9uZyB1bnNpZ25lZCBpbnQgc2l6ZV90Owp0eXBlZGVmIHVuc2lnbmVkIGludCAgd2ludF90Owoj IDMxNyAiL2FvbG5ldC9wa2cvZ2NjLTIuOTUuMy9saWIvZ2NjLWxpYi9wb3dlcnBjLWlibS1haXgz LjIuNS8yLjk1LjMvaW5jbHVkZS9zdGRkZWYuaCIgMyA0CiMgNiAiL2FvbG5ldC9wa2cvZ2NjLTIu OTUuMy9saWIvZ2NjLWxpYi9wb3dlcnBjLWlibS1haXgzLjIuNS8yLjk1LjMvLi4vLi4vLi4vLi4v aW5jbHVkZS9nKystMy9jc3RkZGVmIiAyIDMKIyAzNSAiL2FvbG5ldC9wa2cvZ2NjLTIuOTUuMy9s aWIvZ2NjLWxpYi9wb3dlcnBjLWlibS1haXgzLjIuNS8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVk ZS9nKystMy9zdGQvYmFzdHJpbmcuaCIgMiAzCiMgMSAiL2FvbG5ldC9wa2cvZ2NjLTIuOTUuMy9s aWIvZ2NjLWxpYi9wb3dlcnBjLWlibS1haXgzLjIuNS8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVk ZS9nKystMy9zdGQvc3RyYWl0cy5oIiAxIDMKI3ByYWdtYSBpbnRlcmZhY2UgInN0ZC9zdHJhaXRz LmgiCmV4dGVybiAiQysrIiB7CnRlbXBsYXRlIDxjbGFzcyBjaGFyVD4Kc3RydWN0IHN0cmluZ19j aGFyX3RyYWl0cyB7CiAgdHlwZWRlZiBjaGFyVCBjaGFyX3R5cGU7ICAKICAgCiAgc3RhdGljIHZv aWQgYXNzaWduIChjaGFyX3R5cGUmIGMxLCBjb25zdCBjaGFyX3R5cGUmIGMyKQogICAgeyBjMSA9 IGMyOyB9CiAgc3RhdGljIGJvb2wgZXEgKGNvbnN0IGNoYXJfdHlwZSYgYzEsIGNvbnN0IGNoYXJf dHlwZSYgYzIpCiAgICB7IHJldHVybiAoYzEgPT0gYzIpOyB9CiAgc3RhdGljIGJvb2wgbmUgKGNv bnN0IGNoYXJfdHlwZSYgYzEsIGNvbnN0IGNoYXJfdHlwZSYgYzIpCiAgICB7IHJldHVybiAhKGMx ID09IGMyKTsgfQogIHN0YXRpYyBib29sIGx0IChjb25zdCBjaGFyX3R5cGUmIGMxLCBjb25zdCBj aGFyX3R5cGUmIGMyKQogICAgeyByZXR1cm4gKGMxIDwgYzIpOyB9CiAgc3RhdGljIGNoYXJfdHlw ZSBlb3MgKCkgeyByZXR1cm4gY2hhcl90eXBlKCk7IH0gIAogIHN0YXRpYyBib29sIGlzX2RlbChj aGFyX3R5cGUgYSkgeyByZXR1cm4gMDsgfQogICAKICAKICAgCiAgc3RhdGljIGludCBjb21wYXJl IChjb25zdCBjaGFyX3R5cGUqIHMxLCBjb25zdCBjaGFyX3R5cGUqIHMyLCBzaXplX3QgbikKICAg IHsKICAgICAgc2l6ZV90IGk7CiAgICAgIGZvciAoaSA9IDA7IGkgPCBuOyArK2kpCglpZiAobmUg KHMxW2ldLCBzMltpXSkpCgkgIHJldHVybiBsdCAoczFbaV0sIHMyW2ldKSA/IC0xIDogMTsKICAg ICAgcmV0dXJuIDA7CiAgICB9CiAgICAKICBzdGF0aWMgc2l6ZV90IGxlbmd0aCAoY29uc3QgY2hh cl90eXBlKiBzKQogICAgewogICAgICBzaXplX3QgbCA9IDA7CiAgICAgIHdoaWxlIChuZSAoKnMr KywgZW9zICgpKSkKCSsrbDsKICAgICAgcmV0dXJuIGw7CiAgICB9CiAgc3RhdGljIGNoYXJfdHlw ZSogY29weSAoY2hhcl90eXBlKiBzMSwgY29uc3QgY2hhcl90eXBlKiBzMiwgc2l6ZV90IG4pCiAg ICB7CiAgICAgIGZvciAoOyBuLS07ICkKCWFzc2lnbiAoczFbbl0sIHMyW25dKTsKICAgICAgcmV0 dXJuIHMxOwogICAgfQogIHN0YXRpYyBjaGFyX3R5cGUqIG1vdmUgKGNoYXJfdHlwZSogczEsIGNv bnN0IGNoYXJfdHlwZSogczIsIHNpemVfdCBuKQogICAgewogICAgICBjaGFyX3R5cGUgYVtuXTsK ICAgICAgc2l6ZV90IGk7CiAgICAgIGZvciAoaSA9IDA7IGkgPCBuOyArK2kpCglhc3NpZ24gKGFb aV0sIHMyW2ldKTsKICAgICAgZm9yIChpID0gMDsgaSA8IG47ICsraSkKCWFzc2lnbiAoczFbaV0s IGFbaV0pOwogICAgICByZXR1cm4gczE7CiAgICB9CiAgc3RhdGljIGNoYXJfdHlwZSogc2V0IChj aGFyX3R5cGUqIHMxLCBjb25zdCBjaGFyX3R5cGUmIGMsIHNpemVfdCBuKQogICAgewogICAgICBm b3IgKDsgbi0tOyApCglhc3NpZ24gKHMxW25dLCBjKTsKICAgICAgcmV0dXJuIHMxOwogICAgfQp9 OwpjbGFzcyBpc3RyZWFtOwpjbGFzcyBvc3RyZWFtOwojIDEgIi9hb2xuZXQvcGtnL2djYy0yLjk1 LjMvbGliL2djYy1saWIvcG93ZXJwYy1pYm0tYWl4My4yLjUvMi45NS4zLy4uLy4uLy4uLy4uL2lu Y2x1ZGUvZysrLTMvY2N0eXBlIiAxIDMKIyAxICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIgMSAzIDQK IyAxICIvdXNyL2luY2x1ZGUvc3RhbmRhcmRzLmgiIDEgMyA0CiMgNDkgIi91c3IvaW5jbHVkZS9z dGFuZGFyZHMuaCIgMyA0CiMgMjEgIi91c3IvaW5jbHVkZS9jdHlwZS5oIiAyIDMgNAojIDEgIi91 c3IvaW5jbHVkZS9zeXMvbG9jYWxlZGVmLmgiIDEgMyA0CiMgMSAiL2FvbG5ldC9wa2cvZ2NjLTIu OTUuMy9saWIvZ2NjLWxpYi9wb3dlcnBjLWlibS1haXgzLjIuNS8yLjk1LjMvaW5jbHVkZS9zeXMv bGltaXRzLmgiIDEgMyA0CiMgMSAiL3Vzci9pbmNsdWRlL2Zsb2F0LmgiIDEgMyA0CiMgMSAiL2Fv bG5ldC9wa2cvZ2NjLTIuOTUuMy9saWIvZ2NjLWxpYi9wb3dlcnBjLWlibS1haXgzLjIuNS8yLjk1 LjMvaW5jbHVkZS9zeXMvbGltaXRzLmgiIDEgMyA0CiMgMjI3ICIvYW9sbmV0L3BrZy9nY2MtMi45 NS4zL2xpYi9nY2MtbGliL3Bvd2VycGMtaWJtLWFpeDMuMi41LzIuOTUuMy9pbmNsdWRlL3N5cy9s aW1pdHMuaCIgMyA0CiMgMTYwICIvdXNyL2luY2x1ZGUvZmxvYXQuaCIgMiAzIDQKCWV4dGVybiAg dW5zaWduZWQgICBpbnQgU0lORklOSVRZOwoJZXh0ZXJuICB1bnNpZ25lZCAgIGludCBfREJMSU5G WzJdOwoJZXh0ZXJuICB1bnNpZ25lZCAgIGludCBTUU5BTjsKCWV4dGVybiAgdW5zaWduZWQgICBp bnQgRFFOQU5bMl07CglleHRlcm4gIHVuc2lnbmVkICAgaW50IFNTTkFOOwoJZXh0ZXJuICB1bnNp Z25lZCAgIGludCBEU05BTlsyXTsKdHlwZWRlZgl1bnNpZ25lZCBzaG9ydCBmcHJuZF90OwpmcHJu ZF90IGZwX3JlYWRfcm5kKHZvaWQpOwpmcHJuZF90IGZwX3N3YXBfcm5kKGZwcm5kX3Qgcm5kKTsK IyAxNjggIi9hb2xuZXQvcGtnL2djYy0yLjk1LjMvbGliL2djYy1saWIvcG93ZXJwYy1pYm0tYWl4 My4yLjUvMi45NS4zL2luY2x1ZGUvc3lzL2xpbWl0cy5oIiAyIDMgNAoJCQkgCiMgMjAgIi91c3Iv aW5jbHVkZS9zeXMvbG9jYWxlZGVmLmgiIDIgMyA0CiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9sY19j b3JlLmgiIDEgMyA0CiMgMSAiL2FvbG5ldC9wa2cvZ2NjLTIuOTUuMy9saWIvZ2NjLWxpYi9wb3dl cnBjLWlibS1haXgzLjIuNS8yLjk1LjMvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMSAzIDQKdHlwZWRl ZiBjaGFyICoJCXZhX2xpc3Q7CiMgNzQgIi9hb2xuZXQvcGtnL2djYy0yLjk1LjMvbGliL2djYy1s aWIvcG93ZXJwYy1pYm0tYWl4My4yLjUvMi45NS4zL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMgNAp0 eXBlZGVmIHVuc2lnbmVkIGludCB3Y3R5cGVfdDsKdHlwZWRlZiBsb25nCQlmcG9zX3Q7CnR5cGVk ZWYJbG9uZwkJdGltZV90Owp0eXBlZGVmIGludAkJY2xvY2tfdDsKIyAxMDUgIi9hb2xuZXQvcGtn L2djYy0yLjk1LjMvbGliL2djYy1saWIvcG93ZXJwYy1pYm0tYWl4My4yLjUvMi45NS4zL2luY2x1 ZGUvc3lzL3R5cGVzLmgiIDMgNAp0eXBlZGVmCXVuc2lnbmVkIGNoYXIJdWNoYXJfdDsKdHlwZWRl Zgl1bnNpZ25lZCBzaG9ydAl1c2hvcnRfdDsKdHlwZWRlZgl1bnNpZ25lZCBpbnQJdWludF90Owp0 eXBlZGVmIHVuc2lnbmVkIGxvbmcJdWxvbmdfdDsKdHlwZWRlZiBzaWduZWQgaW50CXNzaXplX3Q7 CnR5cGVkZWYJc3RydWN0IHsgaW50IHJbMV07IH0gKglwaHlzYWRyX3Q7CnR5cGVkZWYgbG9uZwkJ bGV2ZWxfdDsKdHlwZWRlZglsb25nCQlkYWRkcl90OwkgCnR5cGVkZWYJY2hhciAqCQljYWRkcl90 OwkgCnR5cGVkZWYJdWxvbmdfdAkJaW5vX3Q7CQkgCnR5cGVkZWYgc2hvcnQJCWNudF90Owp0eXBl ZGVmIHVsb25nX3QJCWRldl90OwkJIAp0eXBlZGVmCWxvbmcJCWNoYW5fdDsJCSAKdHlwZWRlZgls b25nCQlvZmZfdDsJCSAKdHlwZWRlZglsb25nCQlwYWRkcl90Owp0eXBlZGVmCWxvbmcJCWtleV90 Owp0eXBlZGVmIGxvbmcJCXRpbWVyX3Q7CSAKdHlwZWRlZglzaG9ydAkJbmxpbmtfdDsKdHlwZWRl Zgl1bG9uZ190CQltb2RlX3Q7CQkgCnR5cGVkZWYgdWxvbmdfdAkJdWlkX3Q7CQkgCnR5cGVkZWYg dWxvbmdfdAkJZ2lkX3Q7CQkgCnR5cGVkZWYJdm9pZCAqCQltaWRfdDsJCSAKdHlwZWRlZglpbnQJ CXBpZF90OwkJIAp0eXBlZGVmIGNoYXIJCXNsYWJfdFsxMl07CSAKdHlwZWRlZiBsb25nICAgICAg ICAgICAgbXR5cF90OwkJIAojIDEgIi91c3IvaW5jbHVkZS9zeXMvbV90eXBlcy5oIiAxIDMgNAp0 eXBlZGVmIHN0cnVjdCBsYWJlbF90IHsJCSAKCXN0cnVjdCBsYWJlbF90ICpwcmV2OwkJIAoJdWxv bmdfdCAgICAgICAgICAgaWFyOwkJIAoJdWxvbmdfdCAgICAgICAgICAgc3RhY2s7CQkgCgl1bG9u Z190ICAgICAgICAgICB0b2M7CQkgCgl1bG9uZ190ICAgICAgICAgICBjcjsgICAgICAgICAgICAg IAoJdWxvbmdfdCAgICAgICAgICAgaW50cHJpOwkJIAoJdWxvbmdfdCAgICAgICAgICAgcmVnWzE5 XTsJIAp9IGxhYmVsX3Q7CnR5cGVkZWYgbG9uZwkJdm1pZF90OwkJIAp0eXBlZGVmIHVsb25nX3QJ CXZtaGFuZGxlX3Q7CSAKdHlwZWRlZiBzdHJ1Y3Qgdm1hZGRyX3QgewkJIAoJdm1oYW5kbGVfdAlz cnZhbDsJCSAKCWNhZGRyX3QJCW9mZnNldDsJCSAKfSB2bWFkZHJfdDsKdHlwZWRlZiBzdHJ1Y3Qg YWRzcGFjZV90ewkJIAoJdWxvbmdfdAkJYWxsb2M7CQkgCgl2bWhhbmRsZV90CXNydmFsWzE2XTsJ IAp9IGFkc3BhY2VfdDsKIyAxNTIgIi9hb2xuZXQvcGtnL2djYy0yLjk1LjMvbGliL2djYy1saWIv cG93ZXJwYy1pYm0tYWl4My4yLjUvMi45NS4zL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMyA0CnR5 cGVkZWYgc3RydWN0IHNpZ3NldF90CXsKCXVuc2lnbmVkIGxvbmcgbG9zaWdzOwoJdW5zaWduZWQg bG9uZyBoaXNpZ3M7Cn0gc2lnc2V0X3Q7CnR5cGVkZWYgaW50IHNpZ25hbF90Owp0eXBlZGVmCXVj aGFyX3QJCXVjaGFyOwp0eXBlZGVmCXVzaG9ydF90CXVzaG9ydDsKdHlwZWRlZgl1aW50X3QJCXVp bnQ7CnR5cGVkZWYgdWxvbmdfdAkJdWxvbmc7CnR5cGVkZWYJcGh5c2Fkcl90CXBoeXNhZHI7CnR5 cGVkZWYJdW5zaWduZWQgY2hhcgl1X2NoYXI7CnR5cGVkZWYJdW5zaWduZWQgc2hvcnQJdV9zaG9y dDsKdHlwZWRlZgl1bnNpZ25lZCBpbnQJdV9pbnQ7CnR5cGVkZWYJdW5zaWduZWQgbG9uZwl1X2xv bmc7CnR5cGVkZWYJc3RydWN0CV9xdWFkIHsgbG9uZyB2YWxbMl07IH0gcXVhZDsKdHlwZWRlZgls b25nCXN3YmxrX3Q7CnN0cnVjdCBzaWdzZXQJewoJdW5zaWduZWQgbG9uZyBsb3NpZ3M7Cgl1bnNp Z25lZCBsb25nIGhpc2lnczsKfTsKc3RydWN0IGZzaWQgewoJbG9uZwl2YWxbMl07Cn07CnR5cGVk ZWYgc3RydWN0IGZzaWQgZnNpZF90OwpzdHJ1Y3QgZmlkIHsKCXVpbnRfdAlmaWRfbGVuOwoJY2hh cglmaWRfZGF0YVsoMzIgIC0gc2l6ZW9mKGZzaWRfdCkgLSBzaXplb2YodWludF90KSkgXTsKfTsK dHlwZWRlZiBzdHJ1Y3QgZmlkIGZpZF90OwpzdHJ1Y3QgZmlsZWlkIHsJCQkgCgl1aW50X3QJZmlk X2xlbjsKCWlub190CWZpZF9pbm87Cgl1aW50X3QJZmlkX2dlbjsKCWNoYXIJZmlkX3hbKDMyICAt IHNpemVvZihmc2lkX3QpIC0gc2l6ZW9mKHVpbnRfdCkpICAtIChzaXplb2YoaW5vX3QpICsgMikg LSBzaXplb2YodWludF90KV07Cn07CnN0cnVjdCBmaGFuZGxlIHsKCWNoYXIgeFszMiBdOwkJIAp9 OwpzdHJ1Y3QgZmlsZWhhbmRsZSB7CQkJIAoJZnNpZF90CQlmaF9mc2lkOwkJIAoJc3RydWN0IGZp bGVpZAlmaF9maWQ7CQkJIAp9Owp0eXBlZGVmIHN0cnVjdCBmaGFuZGxlIGZoYW5kbGVfdDsKc3Ry dWN0IHVuaXF1ZV9pZCB7CiAgICAgICB1bnNpZ25lZCBsb25nIHdvcmQxOwogICAgICAgdW5zaWdu ZWQgbG9uZyB3b3JkMjsKICAgICAgIHVuc2lnbmVkIGxvbmcgd29yZDM7CiAgICAgICB1bnNpZ25l ZCBsb25nIHdvcmQ0Owp9Owp0eXBlZGVmIHN0cnVjdCB1bmlxdWVfaWQgdW5pcXVlX2lkX3Q7CiMg MjgxICIvYW9sbmV0L3BrZy9nY2MtMi45NS4zL2xpYi9nY2MtbGliL3Bvd2VycGMtaWJtLWFpeDMu Mi41LzIuOTUuMy9pbmNsdWRlL3N5cy90eXBlcy5oIiAzIDQKIyAxOCAiL3Vzci9pbmNsdWRlL3N5 cy9sY19jb3JlLmgiIDIgMyA0CnR5cGVkZWYgc3RydWN0IHsKICAgIHVuc2lnbmVkIHNob3J0Cgl0 eXBlX2lkLAoJbWFnaWM7CiAgICB1bnNpZ25lZCBsb25nCgl2ZXJzaW9uOwogICAgCiAgICBzaXpl X3QgIHNpemU7Cn0gX0xDX29iamVjdF90Owp0eXBlZGVmIHN0cnVjdCB7CiAgCiAgICBfTENfb2Jq ZWN0X3QgIGhkcjsKCQogICAgIAogICAgaW50ICAgY2F0Z2V0cyAgOwogICAgaW50ICAgICAgICAg ICAgICBjYXRjbG9zZSAgOwogICAgCiAgICAgCiAgICBpbnQgICBjb21wcmVzcyAgOwogICAgaW50 ICAgZGVjb21wcmVzcyAgOwogICAgaW50ICAgICAgc3RhcnRfY29tcHJlc3MgIDsKICAgIGludCAg ICAgIGVuZF9jb21wcmVzcyAgOwogICAgCiAgICAgCiAgICBpbnQgICAgICBpbml0ICA7CiAgICB2 b2lkICAgICpkYXRhOwp9IF9MQ19jb3JlX2Nhcl90Owp0eXBlZGVmIHN0cnVjdCB7CiAgICBfTENf b2JqZWN0X3QgIGhkcjsKICAgICAKICAgIGludCAgICBubF9sYW5naW5mbyAgOwogICAgCiAgICAg CiAgICBpbnQgICAgbWJ0b3djICA7CiAgICBpbnQgICAgbWJzdG93Y3MgIDsKICAgIGludCAgICAg ICB3Y3RvbWIgIDsKICAgIGludCAgICB3Y3N0b21icyAgOwogICAgCiAgICAgCiAgICBpbnQgICAg ICAgbWJsZW4gIDsKICAgIAogICAgIAogICAgaW50ICAgIHdjc3dpZHRoICA7CiAgICBpbnQgICAg d2N3aWR0aCAgOwogICAgCiAgICAgCiAgICBpbnQgICAgICAgX19tYnRvcGMgIDsKICAgIGludCAg ICAgICBfX21ic3RvcGNzICA7CiAgICBpbnQgICAgICAgX19wY3RvbWIgIDsKICAgIGludCAgICAg ICBfX3Bjc3RvbWJzICA7CiAgICAKICAgICAKICAgIGludCAgICBjc2lkICA7CiAgICBpbnQgICAg d2NzaWQgIDsKICAgIAogICAgIAogICAgaW50ICAgICAgIGluaXQgIDsKICAgIHZvaWQgICAgICpk YXRhOwp9IF9MQ19jb3JlX2NoYXJtYXBfdDsKdHlwZWRlZiBzdHJ1Y3QgewogICAgX0xDX29iamVj dF90ICBoZHI7IAogICAgCiAgICAgCiAgICBpbnQgICAgICB0b3d1cHBlciAgOwogICAgaW50ICAg ICAgdG93bG93ZXIgIDsKICAgIAogICAgIAogICAgaW50ICAgIGdldF93Y3R5cGUgIDsKICAgIGlu dCAgICAgICAgICAgICBpc193Y3R5cGUgIDsKICAgIAogICAgIAogICAgaW50ICAgICAgICAgIGlu aXQgIDsKICAgIHZvaWQgICAgICpkYXRhOwp9IF9MQ19jb3JlX2N0eXBlX3Q7CnR5cGVkZWYgc3Ry dWN0IHsKICAgIF9MQ19vYmplY3RfdCAgaGRyOwogICAgIAogICAgaW50ICAgICAgICBzdHJjb2xs ICA7CiAgICBpbnQgICAgIHN0cnhmcm0gIDsKICAgIAogICAgIAogICAgaW50ICAgICAgICB3Y3Nj b2xsICA7CiAgICBpbnQgICAgIHdjc3hmcm0gIDsKICAgIAogICAgIAogICAgaW50ICAgICAgICBm bm1hdGNoICA7CiAgICAKICAgICAKICAgIGludCAgICAgICAgcmVnY29tcCAgOwogICAgaW50ICAg ICByZWdlcnJvciAgOwogICAgaW50ICAgICAgICByZWdleGVjICA7CiAgICBpbnQgICAgICAgcmVn ZnJlZSAgOwogICAgCiAgICAgCiAgICBpbnQgICAgICAgIGluaXQgIDsKICAgIHZvaWQgICAgICpk YXRhOwp9IF9MQ19jb3JlX2NvbGxhdGVfdDsKdHlwZWRlZiBzdHJ1Y3QgewogICAgX0xDX29iamVj dF90ICBoZHI7CiAgICAKICAgICAKICAgIGludCAgICAgbmxfbGFuZ2luZm8gIDsKICAgIAogICAg IAogICAgaW50ICAgICBzdHJmdGltZSAgOwogICAgaW50ICAgICBzdHJwdGltZSAgOwogICAgCiAg ICAgCiAgICBpbnQgICAgIHdjc2Z0aW1lICA7CiAgICAKICAgICAKICAgIGludCAgICAgICAgaW5p dCAgOwogICAgdm9pZCAgICAgKmRhdGE7Cn0gX0xDX2NvcmVfdGltZV90Owp0eXBlZGVmIHN0cnVj dCB7CiAgICBfTENfb2JqZWN0X3QgIGhkcjsKICAgICAKICAgIGludCAgICAgbmxfbGFuZ2luZm8g IDsKICAgIAogICAgIAogICAgaW50ICAgICBzdHJmbW9uICA7CiAgICAKICAgICAKICAgIGludCAg ICAgICAgaW5pdCAgOwogICAgdm9pZCAgICAgKmRhdGE7Cn0gX0xDX2NvcmVfbW9uZXRhcnlfdDsK dHlwZWRlZiBzdHJ1Y3QgewogICAgX0xDX29iamVjdF90ICBoZHI7CiAgICAgCiAgICBpbnQgICAg IG5sX2xhbmdpbmZvICA7CiAgICAKICAgICAKICAgIGludCAgICAgICAgaW5pdCAgOwogICAgdm9p ZCAgICAgKmRhdGE7Cn0gX0xDX2NvcmVfbnVtZXJpY190Owp0eXBlZGVmIHN0cnVjdCB7CiAgICBf TENfb2JqZWN0X3QgIGhkcjsKICAgIAogICAgIAogICAgaW50ICAgIG5sX2xhbmdpbmZvICA7CiAg ICAKICAgICAKICAgIGludCAgICBycG1hdGNoICA7CiAgICAKICAgICAKICAgIGludCAgICAgICBp bml0ICA7CiAgICB2b2lkICAgICAgICAqZGF0YTsKfSBfTENfY29yZV9yZXNwX3Q7CnR5cGVkZWYg c3RydWN0IHsKICAgIF9MQ19vYmplY3RfdCBoZHI7CiAgICAgCiAgICBpbnQgICAgICAgICAgIG5s X2xhbmdpbmZvICA7CiAgICBpbnQgICBsb2NhbGVjb252ICA7CiAgICAKICAgICAKICAgIGludCAg ICAgaW5pdCAgOwogICAgdm9pZCAgICAgICAgICpkYXRhOwp9IF9MQ19jb3JlX2xvY2FsZV90Owoj IDIxICIvdXNyL2luY2x1ZGUvc3lzL2xvY2FsZWRlZi5oIiAyIDMgNAojIDEgIi9hb2xuZXQvcGtn L2djYy0yLjk1LjMvbGliL2djYy1saWIvcG93ZXJwYy1pYm0tYWl4My4yLjUvMi45NS4zL2luY2x1 ZGUvbG9jYWxlLmgiIDEgMyA0CnN0cnVjdCBsY29udiB7CiAgIGNoYXIgKmRlY2ltYWxfcG9pbnQ7 CQkgCiAgIGNoYXIgKnRob3VzYW5kc19zZXA7CQkgCiAgIGNoYXIgKmdyb3VwaW5nOwkJIAogICBj aGFyICppbnRfY3Vycl9zeW1ib2w7CSAKICAgY2hhciAqY3VycmVuY3lfc3ltYm9sOwkgCiAgIGNo YXIgKm1vbl9kZWNpbWFsX3BvaW50OwkgCiAgIGNoYXIgKm1vbl90aG91c2FuZHNfc2VwOwkgCiAg IGNoYXIgKm1vbl9ncm91cGluZzsJCSAKICAgY2hhciAqcG9zaXRpdmVfc2lnbjsJCSAKICAgY2hh ciAqbmVnYXRpdmVfc2lnbjsJCSAKICAgY2hhciBpbnRfZnJhY19kaWdpdHM7CSAKICAgY2hhciBm cmFjX2RpZ2l0czsJCSAKICAgY2hhciBwX2NzX3ByZWNlZGVzOwkJIAogICBjaGFyIHBfc2VwX2J5 X3NwYWNlOwkJIAogICBjaGFyIG5fY3NfcHJlY2VkZXM7CQkgCiAgIGNoYXIgbl9zZXBfYnlfc3Bh Y2U7CQkgCiAgIGNoYXIgcF9zaWduX3Bvc247CQkgCiAgIGNoYXIgbl9zaWduX3Bvc247CQkgCiAg IGNoYXIgKmxlZnRfcGFyZW50aGVzaXM7CSAKICAgY2hhciAqcmlnaHRfcGFyZW50aGVzaXM7CSAK fSA7CnN0cnVjdCBsY29udiAqbG9jYWxlY29udih2b2lkKTsKY2hhciAgICpzZXRsb2NhbGUoaW50 LCBjb25zdCBjaGFyICopOwp0eXBlZGVmIHN0cnVjdCBsY29udiBsY29udjsKIyAyMiAiL3Vzci9p bmNsdWRlL3N5cy9sb2NhbGVkZWYuaCIgMiAzIDQKIyAxICIvdXNyL2luY2x1ZGUvc3lzL2xvY2Fs ZWRlZjMxLmgiIDEgMyA0CnR5cGVkZWYgc3RydWN0ICBjb2xkZXNjICB7ICAgICAgICAgICAgICAg ICAgICAgIAoJc2hvcnQgICAgIGNkX3N0cm9mZjsgICAgICAgICAgICAgICAgICAgIAoJc2hvcnQJ ICBjZF9yZXBvZmY7CglzaG9ydCAgICAgY2RfY3ZhbDsKCXNob3J0CSAgY2RfY3VuaXE7Cn0gY29s ZGVzY190Owp0eXBlZGVmIHN0cnVjdCBjb2xsYXRpb25fdGFibGUgeyAgICAgICAgICAgICAgICAg CglzaG9ydCAgICBsY192ZXJzaW9uOyAgICAgICAgICAgICAgICAgICAgIAoJc2hvcnQJIGxjX2xl bmd0aDsJCQkgCgljaGFyICAgICAqbGNfbG9jYWxlX25hbWU7CQkgCglpbnQgICAgICBsZW5fY29s bGF0ZTsKCXNob3J0ICAgICpsY19jb2xsYXRlOyAgICAgICAgICAgICAgICAgICAgCglpbnQgICAg ICBsZW5fY29sdW5pcTsKCXNob3J0ICAgICpsY19jb2x1bmlxOyAgICAgICAgICAgICAgICAgICAg CglpbnQgICAgICBsZW5fY29sZGVzYzsKCWNvbGRlc2NfdCAqbGNfY29sZGVzYzsgICAgICAgICAg ICAgICAgICAgCglpbnQJIGxlbl9zdHJpbmdzOwkJCQoJd2NoYXJfdCAgKmxjX3N0cmluZ3M7CQkJ IAoJaW50CSBoaWdoX2N2YWx1ZTsJCQkgCn0gY29sX3Q7CnR5cGVkZWYgc3RydWN0IGNoYXJfY2xh c3NpZmljYXRpb25fdGFibGUgeyAgICAgICAKCXNob3J0ICAgICAgbGNfdmVyc2lvbjsgCQkgCglz aG9ydAkgICBsY19sZW5ndGg7ICAJCSAKCXNob3J0ICAgICAgbGNfY29kZV90eXBlOyAJIAoJc2hv cnQgICAgICBtYl9jdXJfbWF4OyAgIAkgCglzaG9ydCAgICAgIG1iX2N1cl9taW47ICAgCSAKCXNo b3J0ICAgICAgbGNfZHNwX3dpZHRoOyAgICAgICAgICAgICAgICAgIAoJY2hhciAgICAgICAqbGNf bG9jYWxlX25hbWU7IAkgCglpbnQgICAgICAgIGxlbl9jYXNlY29udjsgICAJIAoJd2NoYXJfdCAg ICAqbGNfY2FzZWNvbnY7ICAgCSAKCWludAkgICBsZW5fY3R5cGU7Cgl1bnNpZ25lZCBzaG9ydCAq bGNfY3R5cGU7CSAJCn0gY3R5cGVfdDsKdHlwZWRlZglzdHJ1Y3QgbGNfbW9uZXRhcnlfdGFibGUg ewoJc2hvcnQgIAlsY192ZXJzaW9uOwoJc2hvcnQgCWxjX2xlbmd0aDsJCSAKCWNoYXIgICAJKmxj X2xvY2FsZV9uYW1lOwkgCgljaGFyIAkqaW50X2N1cnJfc3ltYm9sOwkgCgljaGFyIAkqY3VycmVu Y3lfc3ltYm9sOwkgCgljaGFyIAkqbW9uX2RlY2ltYWxfcG9pbnQ7CSAKCWNoYXIgCSptb25fdGhv dXNhbmRzX3NlcDsJIAoJY2hhciAJKm1vbl9ncm91cGluZzsJCSAKCWNoYXIgCSpwb3NpdGl2ZV9z aWduOwkJIAoJY2hhciAJKm5lZ2F0aXZlX3NpZ247CQkgCgljaGFyIAlpbnRfZnJhY19kaWdpdHM7 CSAKCWNoYXIgCWZyYWNfZGlnaXRzOwkJIAoJY2hhciAJcF9jc19wcmVjZWRlczsJCSAKCWNoYXIg CXBfc2VwX2J5X3NwYWNlOwkJIAoJY2hhciAJbl9jc19wcmVjZWRlczsJCSAKCWNoYXIgCW5fc2Vw X2J5X3NwYWNlOwkJIAoJY2hhciAJcF9zaWduX3Bvc247CQkgCgljaGFyIAluX3NpZ25fcG9zbjsJ CSAKfSBtb25fdDsKdHlwZWRlZiBzdHJ1Y3QgbnVtZXJpY190YWJsZSB7ICAgICAgICAgICAgICAg ICAgIAoJc2hvcnQJbGNfdmVyc2lvbjsKCXNob3J0CWxjX2xlbmd0aDsJCSAKCWNoYXIgICAgKmxj X2xvY2FsZV9uYW1lOwkgCgljaGFyIAkqZGVjaW1hbF9wb2ludDsKCWNoYXIgCSp0aG91c2FuZHNf c2VwOwoJY2hhcgkqZ3JvdXBpbmc7Cn0gbnVtX3Q7CnR5cGVkZWYgc3RydWN0IGxjX21lc3NhZ2Vz X3RhYmxlIHsKCXNob3J0CWxjX3ZlcnNpb247CglzaG9ydAlsY19sZW5ndGg7CQkgCgljaGFyICAg ICpsY19sb2NhbGVfbmFtZTsJIAoJY2hhciAJKm1lc3NhZ2VzOwkJIAoJY2hhciAJKnllc19zdHJp bmc7CQkgCgljaGFyIAkqbm9fc3RyaW5nOwkJIAp9IG1zZ190Owp0eXBlZGVmIHN0cnVjdCBsY190 aW1lX3RhYmxlIHsKCXNob3J0ICAgbGNfdmVyc2lvbjsKCXNob3J0CWxjX2xlbmd0aDsJICAKCWNo YXIgICAgKmxjX2xvY2FsZV9uYW1lOyAgCgljaGFyICAgICp0X2ZtdDsgICAgICAgICAgCgljaGFy ICAgICpkX2ZtdDsgICAgICAgICAgCgljaGFyICAgICpubGxkYXRlOyAgICAgICAgCgljaGFyICAg ICpkX3RfZm10OyAgICAgICAgCgljaGFyICAgICphYmRheTsgICAgICAgICAgCgljaGFyICAgICpk YXk7ICAgICAgICAgICAgCgljaGFyICAgICphYm1vbjsgICAgICAgICAgCgljaGFyICAgICptb247 ICAgICAgICAgICAgCgljaGFyICAgICptaXNjOyAgICAgICAgICAgCgljaGFyICAgICp0c3Ryczsg ICAgICAgICAgCgljaGFyICAgICp0dW5pdHM7ICAgICAgICAgCgljaGFyCSp5ZWFyOwkJIAoJY2hh ciAgICAqYW1fcG07ICAgICAgICAgIAp9IHRpbV90Owp0eXBlZGVmIHN0cnVjdCB3Y2hhcl9tYXBw aW5nX3RhYmxlIHsgICAgICAgICAgICAgCglzaG9ydCAgICBsY192ZXJzaW9uOwoJc2hvcnQJIGxj X2xlbmd0aDsJCQkgCgljaGFyICAgICAqbGNfaWRlbnRpZmllcjsKfSBtYXBfdDsKdHlwZWRlZiBz dHJ1Y3QgbG9jYWxlaW5mb190YWJsZSB7ICAgICAgICAgICAKCWNoYXIgICAgIGxjX21hZzAsIGxj X21hZzE7ICAgICAgIAoJc2hvcnQgICAgbGNfdmVyc2lvbjsgICAgICAgICAgICAgCglzaG9ydCAg ICBsY19jb2RlX3R5cGU7ICAgICAgICAgICAgICAgICAKCXNob3J0CSBsY19sZW5ndGg7CQkgCglj b2xfdCAgICAqbGNfY29sdGJsOwkJIAoJY3R5cGVfdCAgKmxjX2NocnRibDsJCSAKCW1vbl90ICAg ICpsY19tb250Ymw7CQkgCgludW1fdCAgICAqbGNfbnVtdGJsOwkJIAoJdGltX3QgICAgKmxjX3Rp bXRibDsJCSAKCW1zZ190ICAgICpsY19tc2d0Ymw7CQkgCgltYXBfdCAgICAqbGNfbWFwdGJsOwkJ IAp9IGxvY190OwojIDI0ICIvdXNyL2luY2x1ZGUvc3lzL2xvY2FsZWRlZi5oIiAyIDMgNAp0eXBl ZGVmIHN0cnVjdCB7CiAgICBfTENfY29yZV9jaGFybWFwX3QgY29yZTsKICAgIAogICAgY2hhciAg ICAgKmNtX2NzbmFtZTsJIAogICAgCiAgICBzaXplX3QgICBjbV9tYl9jdXJfbWF4OyAgICAgIAog ICAgc2l6ZV90ICAgY21fbWJfY3VyX21pbjsJIAogICAgdW5zaWduZWQgY2hhcgoJICAgICBjbV9t YXhfZGlzcF93aWR0aDsgIAoJCQkJIAogICAgdW5zaWduZWQgCgljaGFyICpjbV9jc3RhYjsJCSAK ICAgIAp9IF9MQ19jaGFybWFwX3Q7CnR5cGVkZWYgc3RydWN0IF9MQ19jaGFybWFwX29iamhkbCBf TENfY2hhcm1hcF9vYmpoZGxfdDsKc3RydWN0IF9MQ19jaGFybWFwX29iamhkbCB7CglfTENfY2hh cm1hcF90ICpvYmo7Cgl2b2lkICooKiptZXRoKSgpOwp9Owp0eXBlZGVmCXN0cnVjdCB7CiAgICBf TENfY29yZV9tb25ldGFyeV90ICAgY29yZTsKICAgIAogICAgY2hhciAqaW50X2N1cnJfc3ltYm9s OwkgICAgCiAgICBjaGFyICpjdXJyZW5jeV9zeW1ib2w7CSAgICAKICAgIGNoYXIgKm1vbl9kZWNp bWFsX3BvaW50OwkgICAgCiAgICBjaGFyICptb25fdGhvdXNhbmRzX3NlcDsJICAgIAogICAgY2hh ciAqbW9uX2dyb3VwaW5nOwkJICAgIAogICAgY2hhciAqcG9zaXRpdmVfc2lnbjsJICAgIAogICAg Y2hhciAqbmVnYXRpdmVfc2lnbjsJICAgIAogICAgc2lnbmVkIGNoYXIgaW50X2ZyYWNfZGlnaXRz OyAgICAKICAgIHNpZ25lZCBjaGFyIGZyYWNfZGlnaXRzOwkgICAgCiAgICBzaWduZWQgY2hhciBw X2NzX3ByZWNlZGVzOwkgICAgCiAgICBzaWduZWQgY2hhciBwX3NlcF9ieV9zcGFjZTsJICAgIAog ICAgc2lnbmVkIGNoYXIgbl9jc19wcmVjZWRlczsJICAgIAogICAgc2lnbmVkIGNoYXIgbl9zZXBf Ynlfc3BhY2U7CSAgICAKICAgIHNpZ25lZCBjaGFyIHBfc2lnbl9wb3NuOwkgICAgCiAgICBzaWdu ZWQgY2hhciBuX3NpZ25fcG9zbjsJICAgIAogICAgY2hhciAqZGViaXRfc2lnbjsJCSAgICAKICAg IGNoYXIgKmNyZWRpdF9zaWduOwkJICAgIAogICAgY2hhciAqbGVmdF9wYXJlbnRoZXNpczsJICAg IAogICAgY2hhciAqcmlnaHRfcGFyZW50aGVzaXM7CSAgICAKICAgIAp9IF9MQ19tb25ldGFyeV90 Owp0eXBlZGVmIHN0cnVjdCBfTENfbW9uZXRhcnlfb2JqaGRsIF9MQ19tb25ldGFyeV9vYmpoZGxf dDsKc3RydWN0IF9MQ19tb25ldGFyeV9vYmpoZGwgewoJX0xDX21vbmV0YXJ5X3QgKm9iajsKCXZv aWQgKigqKm1ldGgpKCk7Cn07CnR5cGVkZWYgc3RydWN0IHsKICAgIF9MQ19jb3JlX251bWVyaWNf dCBjb3JlOwogICAgCiAgICBjaGFyICAgICAqZGVjaW1hbF9wb2ludDsKICAgIGNoYXIgICAgICp0 aG91c2FuZHNfc2VwOwogICAgdW5zaWduZWQKCWNoYXIgKmdyb3VwaW5nOwogICAgCn0gX0xDX251 bWVyaWNfdDsKdHlwZWRlZiBzdHJ1Y3QgX0xDX251bWVyaWNfb2JqaGRsIF9MQ19udW1lcmljX29i amhkbF90OwpzdHJ1Y3QgX0xDX251bWVyaWNfb2JqaGRsIHsKCV9MQ19udW1lcmljX3QgKm9iajsK CXZvaWQgKigqKm1ldGgpKCk7Cn07CnR5cGVkZWYgc3RydWN0ICB7CiAgICBfTENfY29yZV9yZXNw X3QgY29yZTsKICAgIGNoYXIgICAgKnllc2V4cHI7CSAgICAgIAogICAgY2hhciAgICAqbm9leHBy OwkgICAgICAKICAgIGNoYXIgICAgKnllc3N0cjsJICAgICAgCiAgICBjaGFyICAgICpub3N0cjsJ ICAgICAgCn0gX0xDX3Jlc3BfdDsKdHlwZWRlZiBzdHJ1Y3QgX0xDX3Jlc3Bfb2JqaGRsIF9MQ19y ZXNwX29iamhkbF90OwpzdHJ1Y3QgX0xDX3Jlc3Bfb2JqaGRsIHsKCV9MQ19yZXNwX3QgKm9iajsK CXZvaWQgKigqKm1ldGgpKCk7Cn07CnR5cGVkZWYgc3RydWN0IHsKICAgIF9MQ19jb3JlX3RpbWVf dCBjb3JlOwogICAgCiAgICBjaGFyICpkX2ZtdDsgIAogICAgY2hhciAqdF9mbXQ7ICAKICAgIGNo YXIgKmRfdF9mbXQ7CiAgICBjaGFyICp0X2ZtdF9hbXBtOwogICAgY2hhciAqYWJkYXlbN107ICAK ICAgIGNoYXIgKmRheVs3XTsgICAgCiAgICBjaGFyICphYm1vblsxMl07ICAKICAgIGNoYXIgKm1v blsxMl07ICAgIAogICAgY2hhciAqYW1fcG1bMl07CiAgICBjaGFyICplcmE7CiAgICBjaGFyICpl cmFfeWVhcjsKICAgIGNoYXIgKmVyYV9kX2ZtdDsKICAgIGNoYXIgKmFsdF9kaWdpdHM7CiAgICAK fSBfTENfdGltZV90Owp0eXBlZGVmIHN0cnVjdCBfTENfdGltZV9vYmpoZGwgX0xDX3RpbWVfb2Jq aGRsX3Q7CnN0cnVjdCBfTENfdGltZV9vYmpoZGwgewoJX0xDX3RpbWVfdCAqb2JqOwoJdm9pZCAq KCoqbWV0aCkoKTsKfTsKdHlwZWRlZiB1bmlvbiB7CiAgICB1bnNpZ25lZAkJICAgICAgICAKCXNo b3J0ICBuWzJdOwkgICAgICAgIAogICAgICAgICAgICAgCiAgICB1bnNpZ25lZAkJICAgICAgICAK CXNob3J0ICAqcDsJICAgICAgICAKfSBfTENfd2VpZ2h0X3Q7ICAgIAogIAp0eXBlZGVmIHN0cnVj dCB7CiAgICBjaGFyICAgICAgICAgKmNlX3N5bTsJIAogICAgX0xDX3dlaWdodF90IGNlX3dndDsJ IAoJCQkJIAp9IF9MQ19jb2xsZWxfdDsKdHlwZWRlZiBzdHJ1Y3QgewogICAgX0xDX3dlaWdodF90 ICAgY3Rfd2d0OyAgICAgCgkJCSAgICAgICAKICAgIF9MQ19jb2xsZWxfdCAgICpjdF9jb2xsZWw7 IAp9IF9MQ19jb2x0YmxfdDsKdHlwZWRlZiBzdHJ1Y3QgewogICAgX0xDX3dlaWdodF90IHNzX2Fj dDsJICAgICAgCgkJCQkgICAgICAKICAgIGNoYXIgKnNzX3NyYzsJCSAgICAgIAogICAgY2hhciAq c3NfdGd0OwkJICAgICAgCn0gX0xDX3N1YnNfdDsKdHlwZWRlZiBzdHJ1Y3QgewogICAgX0xDX2Nv cmVfY29sbGF0ZV90IGNvcmU7CiAgICAKICAgIHVuc2lnbmVkCQkJICAgICAgICAgICAgIAoJY2hh ciAgICBjb19ub3JkOwkgICAgICAgICAgICAgCiAgICAKICAgIF9MQ193ZWlnaHRfdCBjb19zb3J0 OwkgICAgICAgICAgICAgCgkJCQkJICAgICAKICAgIAogICAgd2NoYXJfdCAgICAgY29fd2NfbWlu OwkJICAgICAKICAgIHdjaGFyX3QgICAgIGNvX3djX21heDsJCSAgICAgCiAgICAKICAgIHdjaGFy X3QgICAgIGNvX2NvbF9taW47CQkgICAgIAogICAgd2NoYXJfdCAgICAgY29fY29sX21heDsJCSAg ICAgCiAgICAKICAgIF9MQ19jb2x0YmxfdCAqY29fY29sdGJsOwkJICAgICAKCQkJCSAgICAgICAg ICAgICAKICAgIHVuc2lnbmVkCgljaGFyICAgIGNvX25zdWJzOwkJICAgICAKICAgIF9MQ19zdWJz X3QgICpjb19zdWJzOwkJICAgICAKICAgIAp9IF9MQ19jb2xsYXRlX3Q7CnR5cGVkZWYgc3RydWN0 IF9MQ19jb2xsYXRlX29iamhkbCBfTENfY29sbGF0ZV9vYmpoZGxfdDsKc3RydWN0IF9MQ19jb2xs YXRlX29iamhkbCB7CglfTENfY29sbGF0ZV90ICpvYmo7Cgl2b2lkICooKiptZXRoKSgpOwp9Owog IAp0eXBlZGVmIHN0cnVjdCB7CiAgICBjaGFyICAgICpuYW1lOwogICAgdW5zaWduZWQKCWludCBt YXNrOwp9IF9MQ19jbGFzc25tX3Q7CnR5cGVkZWYgc3RydWN0IHsKICBfTENfY29yZV9jdHlwZV90 IGNvcmU7CiAgIAogIHdjaGFyX3QgICAgICBtaW5fd2M7CiAgd2NoYXJfdCAgICAgIG1heF93YzsK ICAgCiAgd2NoYXJfdCAgICAgICp1cHBlcjsKICB3Y2hhcl90ICAgICAgKmxvd2VyOwogIAogICAK ICB1bnNpZ25lZAogICAgICBpbnQgICAgICAqbWFzazsgICAgICAgICAKICB1bnNpZ25lZAogICAg ICBpbnQgICAgICAqcW1hc2s7CSAgICAgIAogIHVuc2lnbmVkCiAgICAgIGNoYXIgICAgICpxaWR4 OwkgICAgICAKICAgCiAgdW5zaWduZWQKICAgICAgY2hhciAgICAgbmNsYXNzZXM7CiBfTENfY2xh c3NubV90ICpjbGFzc25tczsKICAKfSBfTENfY3R5cGVfdDsKdHlwZWRlZiBzdHJ1Y3QgX0xDX2N0 eXBlX29iamhkbCBfTENfY3R5cGVfb2JqaGRsX3Q7CnN0cnVjdCBfTENfY3R5cGVfb2JqaGRsIHsK CV9MQ19jdHlwZV90ICpvYmo7Cgl2b2lkICooKiptZXRoKSgpOwp9Owp0eXBlZGVmIHN0cnVjdCB7 CiAgICBfTENfY29yZV9sb2NhbGVfdCBjb3JlOwogICAgCiAgICBjaGFyICAgICAgICAgICAqbmxf aW5mb1s1NSBdOwogICAgc3RydWN0IGxjb252ICAgKm5sX2xjb252OwogICAgCiAgICBfTENfY2hh cm1hcF9vYmpoZGxfdCAgbGNfY2hhcm1hcDsKICAgIF9MQ19jb2xsYXRlX29iamhkbF90ICBsY19j b2xsYXRlOwogICAgX0xDX2N0eXBlX29iamhkbF90ICAgIGxjX2N0eXBlOwogICAgX0xDX21vbmV0 YXJ5X29iamhkbF90IGxjX21vbmV0YXJ5OwogICAgX0xDX251bWVyaWNfb2JqaGRsX3QgIGxjX251 bWVyaWM7CiAgICBfTENfcmVzcF9vYmpoZGxfdCAgICAgbGNfcmVzcDsKICAgIF9MQ190aW1lX29i amhkbF90ICAgICBsY190aW1lOwogICAgCn0gX0xDX2xvY2FsZV90Owp0eXBlZGVmIHN0cnVjdCBf TENfbG9jYWxlX29iamhkbCBfTENfbG9jYWxlX29iamhkbF90OwpzdHJ1Y3QgX0xDX2xvY2FsZV9v YmpoZGwgewoJX0xDX2xvY2FsZV90ICpvYmo7Cgl2b2lkICooKiptZXRoKSgpOwp9Owp0eXBlZGVm IHN0cnVjdCBfTENfb2JqZWN0X2hhbmRsZSBfTENfb2JqZWN0X2hhbmRsZV90OwpzdHJ1Y3QgX0xD X29iamVjdF9oYW5kbGUgewogICAgdW5pb24gewoJX0xDX29iamVjdF90CSAgICAgIGxjX29iamVj dDsKCV9MQ19sb2NhbGVfb2JqaGRsX3QgICBsY19sb2NhbGU7CiAgICAgICAgX0xDX2NoYXJtYXBf b2JqaGRsX3QgIGxjX2NoYXJtYXA7CiAgICAgICAgX0xDX2NvbGxhdGVfb2JqaGRsX3QgIGxjX2Nv bGxhdGU7CiAgICAgICAgX0xDX2N0eXBlX29iamhkbF90ICAgIGxjX2N0eXBlOwogICAgICAgIF9M Q19tb25ldGFyeV9vYmpoZGxfdCBsY19tb25ldGFyeTsKICAgICAgICBfTENfbnVtZXJpY19vYmpo ZGxfdCAgbGNfbnVtZXJpYzsKICAgICAgICBfTENfcmVzcF9vYmpoZGxfdCAgICAgbGNfcmVzcDsK ICAgICAgICBfTENfdGltZV9vYmpoZGxfdCAgICAgbGNfdGltZTsKICAgIH0gb2JqOwogICAgdm9p ZCAgICAqKCoqbWV0aCkoKTsKfTsKdHlwZWRlZiBzdHJ1Y3QgewogICAgX0xDX29iamVjdF90CWhk cjsJCSAgIAogICAgX0xDX2xvY2FsZV9vYmpoZGxfdCBoYW5kbGU7CQkgICAKfSBfTENfbG9hZF9v YmplY3RfdDsKZXh0ZXJuIF9MQ19jaGFybWFwX29iamhkbF90ICBfX2xjX2NoYXJtYXA7CmV4dGVy biBfTENfY29sbGF0ZV9vYmpoZGxfdCAgX19sY19jb2xsYXRlOwpleHRlcm4gX0xDX2N0eXBlX29i amhkbF90ICAgIF9fbGNfY3R5cGU7CmV4dGVybiBfTENfbW9uZXRhcnlfb2JqaGRsX3QgX19sY19t b25ldGFyeTsKZXh0ZXJuIF9MQ19udW1lcmljX29iamhkbF90ICBfX2xjX251bWVyaWM7CmV4dGVy biBfTENfcmVzcF9vYmpoZGxfdCAgICAgX19sY19yZXNwOwpleHRlcm4gX0xDX3RpbWVfb2JqaGRs X3QgICAgIF9fbGNfdGltZTsKZXh0ZXJuIF9MQ19sb2NhbGVfb2JqaGRsX3QgICBfX2xjX2xvY2Fs ZTsKIyAyMyAiL3Vzci9pbmNsdWRlL2N0eXBlLmgiIDIgMyA0CiMgNTQgIi91c3IvaW5jbHVkZS9j dHlwZS5oIiAzIDQKCSAgICBleHRlcm4gaW50CWlzYWxwaGEoaW50KTsKCSAgICBleHRlcm4gaW50 CWlzYWxudW0oaW50KTsKCSAgICBleHRlcm4gaW50CWlzY250cmwoaW50KTsKCSAgICBleHRlcm4g aW50CWlzZGlnaXQoaW50KTsKCSAgICBleHRlcm4gaW50CWlzZ3JhcGgoaW50KTsKCSAgICBleHRl cm4gaW50CWlzbG93ZXIoaW50KTsKCSAgICBleHRlcm4gaW50CWlzcHJpbnQoaW50KTsKCSAgICBl eHRlcm4gaW50CWlzcHVuY3QoaW50KTsKCSAgICBleHRlcm4gaW50CWlzc3BhY2UoaW50KTsKCSAg ICBleHRlcm4gaW50CWlzdXBwZXIoaW50KTsKCSAgICBleHRlcm4gaW50CWlzeGRpZ2l0KGludCk7 CgkgICAgZXh0ZXJuIGludAl0b3VwcGVyKGludCk7CgkgICAgZXh0ZXJuIGludAl0b2xvd2VyKGlu dCk7CiMgMTA3ICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIgMyA0CgkgICAgZXh0ZXJuIGludAlpc2Fz Y2lpKGludCk7CgkgICAgZXh0ZXJuIGludAlpc3dhbHBoYSh3aW50X3QpOwoJICAgIGV4dGVybiBp bnQJaXN3YWxudW0od2ludF90KTsKCSAgICBleHRlcm4gaW50CWlzd2NudHJsKHdpbnRfdCk7Cgkg ICAgZXh0ZXJuIGludAlpc3dkaWdpdCh3aW50X3QpOwoJICAgIGV4dGVybiBpbnQJaXN3Z3JhcGgo d2ludF90KTsKCSAgICBleHRlcm4gaW50CWlzd2xvd2VyKHdpbnRfdCk7CgkgICAgZXh0ZXJuIGlu dAlpc3dwcmludCh3aW50X3QpOwoJICAgIGV4dGVybiBpbnQJaXN3cHVuY3Qod2ludF90KTsKCSAg ICBleHRlcm4gaW50CWlzd3NwYWNlKHdpbnRfdCk7CgkgICAgZXh0ZXJuIGludAlpc3d1cHBlcih3 aW50X3QpOwoJICAgIGV4dGVybiBpbnQJaXN3eGRpZ2l0KHdpbnRfdCk7CgkgICAgZXh0ZXJuIHdp bnRfdAl0b3d1cHBlcih3aW50X3QpOwoJICAgIGV4dGVybiB3aW50X3QJdG93bG93ZXIod2ludF90 KTsKCSAgICBleHRlcm4gaW50CWlzX3djdHlwZSh3aW50X3QsIHdjdHlwZV90KTsKCSAgICBleHRl cm4gaW50CWlzX2N0eXBlKGludCwgd2N0eXBlX3QpOwoJICAgIGV4dGVybiBpbnQJdG9hc2NpaShp bnQpOwoJICAgIGV4dGVybiB3Y3R5cGVfdAlnZXRfd2N0eXBlKGNoYXIgKik7CiMgMTc2ICIvdXNy L2luY2x1ZGUvY3R5cGUuaCIgMyA0CiMgNiAiL2FvbG5ldC9wa2cvZ2NjLTIuOTUuMy9saWIvZ2Nj LWxpYi9wb3dlcnBjLWlibS1haXgzLjIuNS8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKyst My9jY3R5cGUiIDIgMwojIDEwNSAiL2FvbG5ldC9wa2cvZ2NjLTIuOTUuMy9saWIvZ2NjLWxpYi9w b3dlcnBjLWlibS1haXgzLjIuNS8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGQv c3RyYWl0cy5oIiAyIDMKIyAxICIvYW9sbmV0L3BrZy9nY2MtMi45NS4zL2xpYi9nY2MtbGliL3Bv d2VycGMtaWJtLWFpeDMuMi41LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL2NzdHJp bmciIDEgMwojIDEgIi9hb2xuZXQvcGtnL2djYy0yLjk1LjMvbGliL2djYy1saWIvcG93ZXJwYy1p Ym0tYWl4My4yLjUvMi45NS4zL2luY2x1ZGUvc3RyaW5nLmgiIDEgMyA0CiMgMTkgIi9hb2xuZXQv cGtnL2djYy0yLjk1LjMvbGliL2djYy1saWIvcG93ZXJwYy1pYm0tYWl4My4yLjUvMi45NS4zL2lu Y2x1ZGUvc3RyaW5nLmgiIDMgNAojIDc2ICIvYW9sbmV0L3BrZy9nY2MtMi45NS4zL2xpYi9nY2Mt bGliL3Bvd2VycGMtaWJtLWFpeDMuMi41LzIuOTUuMy9pbmNsdWRlL3N0cmluZy5oIiAzIDQKICAg ICAgICBleHRlcm4gdm9pZCAgICAgKm1lbWNocihjb25zdCB2b2lkICosIGludCwgc2l6ZV90KTsK ICAgICAgICBleHRlcm4gdm9pZCAgICAgKm1lbWNweSh2b2lkICosIGNvbnN0IHZvaWQgKiwgc2l6 ZV90KTsKICAgICAgICBleHRlcm4gdm9pZCAgICAgKm1lbXNldCh2b2lkICosIGludCwgc2l6ZV90 KTsKICAgICAgICBleHRlcm4gc2l6ZV90ICAgc3RyY3Nwbihjb25zdCBjaGFyICosIGNvbnN0IGNo YXIgKik7CiAgICAgICAgZXh0ZXJuIHNpemVfdCAgIHN0cmxlbihjb25zdCBjaGFyICopOwogICAg ICAgIGV4dGVybiBzaXplX3QgICBzdHJzcG4oY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOwoj IDEwOCAiL2FvbG5ldC9wa2cvZ2NjLTIuOTUuMy9saWIvZ2NjLWxpYi9wb3dlcnBjLWlibS1haXgz LjIuNS8yLjk1LjMvaW5jbHVkZS9zdHJpbmcuaCIgMyA0CiAgICAgICAgZXh0ZXJuIHZvaWQgICAg ICptZW1tb3ZlKHZvaWQgKiwgY29uc3Qgdm9pZCAqLCBzaXplX3QpOwogICAgICAgIGV4dGVybiBj aGFyICAgICAqc3RyY3B5KGNoYXIgKiwgY29uc3QgY2hhciAqKTsKICAgICAgICBleHRlcm4gY2hh ciAgICAgKnN0cm5jcHkoY2hhciAqLCBjb25zdCBjaGFyICosIHNpemVfdCk7CiAgICAgICAgZXh0 ZXJuIGNoYXIgICAgICpzdHJjYXQoY2hhciAqLCBjb25zdCBjaGFyICopOwogICAgICAgIGV4dGVy biBjaGFyICAgICAqc3RybmNhdChjaGFyICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90KTsKICAgICAg ICBleHRlcm4gaW50ICAgICAgbWVtY21wKGNvbnN0IHZvaWQgKiwgY29uc3Qgdm9pZCAqLHNpemVf dCk7CiAgICAgICAgZXh0ZXJuIGludCAgICAgIHN0cmNtcChjb25zdCBjaGFyICosIGNvbnN0IGNo YXIgKik7CiAgICAgICAgZXh0ZXJuIGludCAgICAgIHN0cm5jbXAoY29uc3QgY2hhciAqLGNvbnN0 IGNoYXIgKixzaXplX3QpOwogICAgICAgIGV4dGVybiBpbnQgICAgICBzdHJuY29sbGVuKGNvbnN0 IGNoYXIgKiwgY29uc3QgaW50ICk7CiAgICAgICAgZXh0ZXJuIGNoYXIgICAgICpzdHJjaHIoY29u c3QgY2hhciAqLCBpbnQpOwogICAgICAgIGV4dGVybiBjaGFyICAgICAqc3RycGJyayhjb25zdCBj aGFyICosIGNvbnN0IGNoYXIgKik7CiAgICAgICAgZXh0ZXJuIGNoYXIgICAgICpzdHJyY2hyKGNv bnN0IGNoYXIgKiwgaW50KTsKICAgICAgICBleHRlcm4gY2hhciAgICAgKnN0cnN0cihjb25zdCBj aGFyICosIGNvbnN0IGNoYXIgKik7CiAgICAgICAgZXh0ZXJuIGNoYXIgICAgICpzdHJ0b2soY2hh ciAqLCBjb25zdCBjaGFyICopOwogICAgICAgIGV4dGVybiBjaGFyICAgICAqc3RyZXJyb3IoaW50 KTsKICAgICAgICBleHRlcm4gaW50ICAgICAgc3RyY29sbChjb25zdCBjaGFyICosIGNvbnN0IGNo YXIgKik7CiAgICAgICAgZXh0ZXJuIHNpemVfdCBzdHJ4ZnJtKGNoYXIgKiwgY29uc3QgY2hhciAq LCBzaXplX3QpOwogICAgICAgIGV4dGVybiB2b2lkICAgICAqbWVtY2NweSh2b2lkICosIGNvbnN0 IHZvaWQgKiwgaW50LCBzaXplX3QpOwojIDE3MyAiL2FvbG5ldC9wa2cvZ2NjLTIuOTUuMy9saWIv Z2NjLWxpYi9wb3dlcnBjLWlibS1haXgzLjIuNS8yLjk1LjMvaW5jbHVkZS9zdHJpbmcuaCIgMyA0 CiAgICAgICAgZXh0ZXJuIGNoYXIgICAgICppbmRleChjb25zdCBjaGFyICosIGludCk7CiAgICAg ICAgZXh0ZXJuIGNoYXIgICAgICpyaW5kZXgoY29uc3QgY2hhciAqLCBpbnQpOwogICAgICAgIGV4 dGVybiBjaGFyICAgICAqc3RyZHVwKGNoYXIgKik7CiAgICAgICAgZXh0ZXJuIHZvaWQgICAgIHN3 YWIoY29uc3Qgdm9pZCAqLCB2b2lkICosIHNzaXplX3QpOyAKICAgICAgICBleHRlcm4gd2NoYXJf dCAgKndjc2NhdCh3Y2hhcl90ICosIGNvbnN0IHdjaGFyX3QgKik7CiAgICAgICAgZXh0ZXJuIHdj aGFyX3QgICp3Y3NjaHIoY29uc3Qgd2NoYXJfdCAqLCB3Y2hhcl90KTsKICAgICAgICBleHRlcm4g aW50ICAgICAgd2NzY21wKGNvbnN0IHdjaGFyX3QgKiwgY29uc3Qgd2NoYXJfdCAqKTsKICAgICAg ICBleHRlcm4gd2NoYXJfdCAgKndjc2NweSh3Y2hhcl90ICosIGNvbnN0IHdjaGFyX3QgKik7CiAg ICAgICAgZXh0ZXJuIHNpemVfdCAgIHdjc2NzcG4oY29uc3Qgd2NoYXJfdCAqLCBjb25zdCB3Y2hh cl90ICopOwogICAgICAgIGV4dGVybiBzaXplX3QgICB3Y3NsZW4oY29uc3Qgd2NoYXJfdCAqKTsK ICAgICAgICBleHRlcm4gd2NoYXJfdCAgKndjc25jYXQod2NoYXJfdCAqLCBjb25zdCB3Y2hhcl90 ICosIHNpemVfdCk7CiAgICAgICAgZXh0ZXJuIGludCAgICAgIHdjc25jbXAoY29uc3Qgd2NoYXJf dCAqLCBjb25zdCB3Y2hhcl90ICosIHNpemVfdCk7CiAgICAgICAgZXh0ZXJuIHdjaGFyX3QgICp3 Y3NuY3B5KHdjaGFyX3QgKiwgY29uc3Qgd2NoYXJfdCAqLCBzaXplX3QpOwogICAgICAgIGV4dGVy biB3Y2hhcl90ICAqd2NzcGJyayhjb25zdCB3Y2hhcl90ICosIGNvbnN0IHdjaGFyX3QgKik7CiAg ICAgICAgZXh0ZXJuIHdjaGFyX3QgICp3Y3NyY2hyKGNvbnN0IHdjaGFyX3QgKiwgd2NoYXJfdCk7 CiAgICAgICAgZXh0ZXJuIHNpemVfdCAgIHdjc3Nwbihjb25zdCB3Y2hhcl90ICosIGNvbnN0IHdj aGFyX3QgKik7CiAgICAgICAgZXh0ZXJuIHdjaGFyX3QgICp3Y3N0b2sod2NoYXJfdCAqLCBjb25z dCB3Y2hhcl90ICopOwogICAgICAgIGV4dGVybiB3Y2hhcl90ICAqd2Nzd2NzKGNvbnN0IHdjaGFy X3QgKiwgY29uc3Qgd2NoYXJfdCAqKTsKICAgICAgICBleHRlcm4gaW50ICAgICAgd2Nzd2lkdGgo Y29uc3Qgd2NoYXJfdCAqLCBzaXplX3QpOwogICAgICAgIGV4dGVybiBpbnQgICAgICB3Y3dpZHRo KGNvbnN0IHdjaGFyX3QpOwogICAgICAgIGV4dGVybiBpbnQgICAgICB3Y3Njb2xsKGNvbnN0IHdj aGFyX3QgKiwgY29uc3Qgd2NoYXJfdCAqKTsKICAgICAgICBleHRlcm4gc2l6ZV90IHdjc3hmcm0o d2NoYXJfdCAqLCBjb25zdCB3Y2hhcl90ICosIHNpemVfdCk7CiMgMjQxICIvYW9sbmV0L3BrZy9n Y2MtMi45NS4zL2xpYi9nY2MtbGliL3Bvd2VycGMtaWJtLWFpeDMuMi41LzIuOTUuMy9pbmNsdWRl L3N0cmluZy5oIiAzIDQKIyA3ICIvYW9sbmV0L3BrZy9nY2MtMi45NS4zL2xpYi9nY2MtbGliL3Bv d2VycGMtaWJtLWFpeDMuMi41LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL2NzdHJp bmciIDIgMwojIDk0ICIvYW9sbmV0L3BrZy9nY2MtMi45NS4zL2xpYi9nY2MtbGliL3Bvd2VycGMt aWJtLWFpeDMuMi41LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL2NzdHJpbmciIDMK IyAxMDYgIi9hb2xuZXQvcGtnL2djYy0yLjk1LjMvbGliL2djYy1saWIvcG93ZXJwYy1pYm0tYWl4 My4yLjUvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RkL3N0cmFpdHMuaCIgMiAz CnN0cnVjdCBzdHJpbmdfY2hhcl90cmFpdHMgPGNoYXI+IHsKICB0eXBlZGVmIGNoYXIgY2hhcl90 eXBlOwogIHN0YXRpYyB2b2lkIGFzc2lnbiAoY2hhcl90eXBlJiBjMSwgY29uc3QgY2hhcl90eXBl JiBjMikKICAgIHsgYzEgPSBjMjsgfQogIHN0YXRpYyBib29sIGVxIChjb25zdCBjaGFyX3R5cGUg JiBjMSwgY29uc3QgY2hhcl90eXBlJiBjMikKICAgIHsgcmV0dXJuIChjMSA9PSBjMik7IH0KICBz dGF0aWMgYm9vbCBuZSAoY29uc3QgY2hhcl90eXBlJiBjMSwgY29uc3QgY2hhcl90eXBlJiBjMikK ICAgIHsgcmV0dXJuIChjMSAhPSBjMik7IH0KICBzdGF0aWMgYm9vbCBsdCAoY29uc3QgY2hhcl90 eXBlJiBjMSwgY29uc3QgY2hhcl90eXBlJiBjMikKICAgIHsgcmV0dXJuIChjMSA8IGMyKTsgfQog IHN0YXRpYyBjaGFyX3R5cGUgZW9zICgpIHsgcmV0dXJuIDA7IH0KICBzdGF0aWMgYm9vbCBpc19k ZWwoY2hhcl90eXBlIGEpIHsgcmV0dXJuIGlzc3BhY2UoYSk7IH0KICBzdGF0aWMgaW50IGNvbXBh cmUgKGNvbnN0IGNoYXJfdHlwZSogczEsIGNvbnN0IGNoYXJfdHlwZSogczIsIHNpemVfdCBuKQog ICAgeyByZXR1cm4gbWVtY21wIChzMSwgczIsIG4pOyB9CiAgc3RhdGljIHNpemVfdCBsZW5ndGgg KGNvbnN0IGNoYXJfdHlwZSogcykKICAgIHsgcmV0dXJuIHN0cmxlbiAocyk7IH0KICBzdGF0aWMg Y2hhcl90eXBlKiBjb3B5IChjaGFyX3R5cGUqIHMxLCBjb25zdCBjaGFyX3R5cGUqIHMyLCBzaXpl X3QgbikKICAgIHsgcmV0dXJuIChjaGFyX3R5cGUqKSBtZW1jcHkgKHMxLCBzMiwgbik7IH0KICBz dGF0aWMgY2hhcl90eXBlKiBtb3ZlIChjaGFyX3R5cGUqIHMxLCBjb25zdCBjaGFyX3R5cGUqIHMy LCBzaXplX3QgbikKICAgIHsgcmV0dXJuIChjaGFyX3R5cGUqKSBtZW1tb3ZlIChzMSwgczIsIG4p OyB9CiAgc3RhdGljIGNoYXJfdHlwZSogc2V0IChjaGFyX3R5cGUqIHMxLCBjb25zdCBjaGFyX3R5 cGUmIGMsIHNpemVfdCBuKQogICAgeyByZXR1cm4gKGNoYXJfdHlwZSopIG1lbXNldCAoczEsIGMs IG4pOyB9Cn07CiMgMTU5ICIvYW9sbmV0L3BrZy9nY2MtMi45NS4zL2xpYi9nY2MtbGliL3Bvd2Vy cGMtaWJtLWFpeDMuMi41LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0ZC9zdHJh aXRzLmgiIDMKfSAgCiMgMzYgIi9hb2xuZXQvcGtnL2djYy0yLjk1LjMvbGliL2djYy1saWIvcG93 ZXJwYy1pYm0tYWl4My4yLjUvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RkL2Jh c3RyaW5nLmgiIDIgMwojIDEgIi9hb2xuZXQvcGtnL2djYy0yLjk1LjMvbGliL2djYy1saWIvcG93 ZXJwYy1pYm0tYWl4My4yLjUvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvYWxsb2Mu aCIgMSAzCiMgMSAiL2FvbG5ldC9wa2cvZ2NjLTIuOTUuMy9saWIvZ2NjLWxpYi9wb3dlcnBjLWli bS1haXgzLjIuNS8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfY29uZmlnLmgi IDEgMwojIDE0OCAiL2FvbG5ldC9wa2cvZ2NjLTIuOTUuMy9saWIvZ2NjLWxpYi9wb3dlcnBjLWli bS1haXgzLjIuNS8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfY29uZmlnLmgi IDMKIyAxICIvYW9sbmV0L3BrZy9nY2MtMi45NS4zL2xpYi9nY2MtbGliL3Bvd2VycGMtaWJtLWFp eDMuMi41LzIuOTUuMy8uLi8uLi8uLi8uLi9wb3dlcnBjLWlibS1haXgzLjIuNS9pbmNsdWRlL19H X2NvbmZpZy5oIiAxIDMgNAogIAp0eXBlZGVmICAgICAgICAgIGludCAgIF9HX2ludDhfdCBfX2F0 dHJpYnV0ZV9fKChfX21vZGVfXyhfX1FJX18pKSk7CnR5cGVkZWYgdW5zaWduZWQgaW50ICBfR191 aW50OF90IF9fYXR0cmlidXRlX18oKF9fbW9kZV9fKF9fUUlfXykpKTsKdHlwZWRlZiAgICAgICAg ICBpbnQgIF9HX2ludDE2X3QgX19hdHRyaWJ1dGVfXygoX19tb2RlX18oX19ISV9fKSkpOwp0eXBl ZGVmIHVuc2lnbmVkIGludCBfR191aW50MTZfdCBfX2F0dHJpYnV0ZV9fKChfX21vZGVfXyhfX0hJ X18pKSk7CnR5cGVkZWYgICAgICAgICAgaW50ICBfR19pbnQzMl90IF9fYXR0cmlidXRlX18oKF9f bW9kZV9fKF9fU0lfXykpKTsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX0dfdWludDMyX3QgX19hdHRy aWJ1dGVfXygoX19tb2RlX18oX19TSV9fKSkpOwp0eXBlZGVmICAgICAgICAgIGludCAgX0dfaW50 NjRfdCBfX2F0dHJpYnV0ZV9fKChfX21vZGVfXyhfX0RJX18pKSk7CnR5cGVkZWYgdW5zaWduZWQg aW50IF9HX3VpbnQ2NF90IF9fYXR0cmlidXRlX18oKF9fbW9kZV9fKF9fRElfXykpKTsKX19leHRl bnNpb25fXyB0eXBlZGVmIGxvbmcgbG9uZyBfR19sbG9uZzsKX19leHRlbnNpb25fXyB0eXBlZGVm IHVuc2lnbmVkIGxvbmcgbG9uZyBfR191bGxvbmc7CnR5cGVkZWYgaW50IF9HX2Nsb2NrX3Q7CnR5 cGVkZWYgdW5zaWduZWQgbG9uZyBfR19kZXZfdDsKdHlwZWRlZiBsb25nIF9HX2Zwb3NfdDsKdHlw ZWRlZiB1bnNpZ25lZCBsb25nIF9HX2dpZF90Owp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgX0dfaW5v X3Q7CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBfR19tb2RlX3Q7CnR5cGVkZWYgc2hvcnQgX0dfbmxp bmtfdDsKdHlwZWRlZiBsb25nIF9HX29mZl90Owp0eXBlZGVmIGludCBfR19waWRfdDsKdHlwZWRl ZiBpbnQgX0dfcHRyZGlmZl90Owp0eXBlZGVmIGludCAgIF9HX3NpZ3NldF90Owp0eXBlZGVmIGxv bmcgdW5zaWduZWQgaW50IF9HX3NpemVfdDsKdHlwZWRlZiBsb25nIF9HX3RpbWVfdDsKdHlwZWRl ZiB1bnNpZ25lZCBsb25nIF9HX3VpZF90Owp0eXBlZGVmIHNob3J0IHVuc2lnbmVkIGludCBfR193 Y2hhcl90Owp0eXBlZGVmIHNpZ25lZCBpbnQgX0dfc3NpemVfdDsKdHlwZWRlZiBpbnQgX0dfd2lu dF90Owp0eXBlZGVmIGNoYXIgKiBfR192YV9saXN0OwojIDEgIi9hb2xuZXQvcGtnL2djYy0yLjk1 LjMvbGliL2djYy1saWIvcG93ZXJwYy1pYm0tYWl4My4yLjUvMi45NS4zL2luY2x1ZGUvc3RkZGVm LmgiIDEgMyA0CiMgMTkgIi9hb2xuZXQvcGtnL2djYy0yLjk1LjMvbGliL2djYy1saWIvcG93ZXJw Yy1pYm0tYWl4My4yLjUvMi45NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDMgNAojIDYxICIvYW9sbmV0 L3BrZy9nY2MtMi45NS4zL2xpYi9nY2MtbGliL3Bvd2VycGMtaWJtLWFpeDMuMi41LzIuOTUuMy9p bmNsdWRlL3N0ZGRlZi5oIiAzIDQKIyAxMjYgIi9hb2xuZXQvcGtnL2djYy0yLjk1LjMvbGliL2dj Yy1saWIvcG93ZXJwYy1pYm0tYWl4My4yLjUvMi45NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDMgNAoj IDE4OCAiL2FvbG5ldC9wa2cvZ2NjLTIuOTUuMy9saWIvZ2NjLWxpYi9wb3dlcnBjLWlibS1haXgz LjIuNS8yLjk1LjMvaW5jbHVkZS9zdGRkZWYuaCIgMyA0CiMgMjY5ICIvYW9sbmV0L3BrZy9nY2Mt Mi45NS4zL2xpYi9nY2MtbGliL3Bvd2VycGMtaWJtLWFpeDMuMi41LzIuOTUuMy9pbmNsdWRlL3N0 ZGRlZi5oIiAzIDQKIyAzMTcgIi9hb2xuZXQvcGtnL2djYy0yLjk1LjMvbGliL2djYy1saWIvcG93 ZXJwYy1pYm0tYWl4My4yLjUvMi45NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDMgNAojIDg2ICIvYW9s bmV0L3BrZy9nY2MtMi45NS4zL2xpYi9nY2MtbGliL3Bvd2VycGMtaWJtLWFpeDMuMi41LzIuOTUu My8uLi8uLi8uLi8uLi9wb3dlcnBjLWlibS1haXgzLjIuNS9pbmNsdWRlL19HX2NvbmZpZy5oIiAy IDMgNAojIDE1MSAiL2FvbG5ldC9wa2cvZ2NjLTIuOTUuMy9saWIvZ2NjLWxpYi9wb3dlcnBjLWli bS1haXgzLjIuNS8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfY29uZmlnLmgi IDIgMwojIDE3OCAiL2FvbG5ldC9wa2cvZ2NjLTIuOTUuMy9saWIvZ2NjLWxpYi9wb3dlcnBjLWli bS1haXgzLjIuNS8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfY29uZmlnLmgi IDMKIyAyMzQgIi9hb2xuZXQvcGtnL2djYy0yLjk1LjMvbGliL2djYy1saWIvcG93ZXJwYy1pYm0t YWl4My4yLjUvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX2NvbmZpZy5oIiAz CiMgMjQ4ICIvYW9sbmV0L3BrZy9nY2MtMi45NS4zL2xpYi9nY2MtbGliL3Bvd2VycGMtaWJtLWFp eDMuMi41LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9jb25maWcuaCIgMwoj IDMxNiAiL2FvbG5ldC9wa2cvZ2NjLTIuOTUuMy9saWIvZ2NjLWxpYi9wb3dlcnBjLWlibS1haXgz LjIuNS8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfY29uZmlnLmgiIDMKIyAx OCAiL2FvbG5ldC9wa2cvZ2NjLTIuOTUuMy9saWIvZ2NjLWxpYi9wb3dlcnBjLWlibS1haXgzLjIu NS8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9hbGxvYy5oIiAyIDMKIyAxICIvYW9s bmV0L3BrZy9nY2MtMi45NS4zL2xpYi9nY2MtbGliL3Bvd2VycGMtaWJtLWFpeDMuMi41LzIuOTUu My8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9hbGxvYy5oIiAxIDMKIyAxICIvYW9sbmV0 L3BrZy9nY2MtMi45NS4zL2xpYi9nY2MtbGliL3Bvd2VycGMtaWJtLWFpeDMuMi41LzIuOTUuMy8u Li8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL2lvc3RyZWFtLmgiIDEgMwojcHJhZ21hIGludGVyZmFj ZQojIDEgIi9hb2xuZXQvcGtnL2djYy0yLjk1LjMvbGliL2djYy1saWIvcG93ZXJwYy1pYm0tYWl4 My4yLjUvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RyZWFtYnVmLmgiIDEgMwoj cHJhZ21hIGludGVyZmFjZQogICAKZXh0ZXJuICJDIiB7CiMgMSAiL2FvbG5ldC9wa2cvZ2NjLTIu OTUuMy9saWIvZ2NjLWxpYi9wb3dlcnBjLWlibS1haXgzLjIuNS8yLjk1LjMvLi4vLi4vLi4vLi4v aW5jbHVkZS9nKystMy9saWJpby5oIiAxIDMKIyA1NSAiL2FvbG5ldC9wa2cvZ2NjLTIuOTUuMy9s aWIvZ2NjLWxpYi9wb3dlcnBjLWlibS1haXgzLjIuNS8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVk ZS9nKystMy9saWJpby5oIiAzCiMgMTA0ICIvYW9sbmV0L3BrZy9nY2MtMi45NS4zL2xpYi9nY2Mt bGliL3Bvd2VycGMtaWJtLWFpeDMuMi41LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0z L2xpYmlvLmgiIDMKc3RydWN0IF9JT19qdW1wX3Q7ICBzdHJ1Y3QgX0lPX0ZJTEU7CiMgMTc1ICIv YW9sbmV0L3BrZy9nY2MtMi45NS4zL2xpYi9nY2MtbGliL3Bvd2VycGMtaWJtLWFpeDMuMi41LzIu OTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL2xpYmlvLmgiIDMKICAgIHR5cGVkZWYgdm9p ZCBfSU9fbG9ja190OwpzdHJ1Y3QgX0lPX21hcmtlciB7CiAgc3RydWN0IF9JT19tYXJrZXIgKl9u ZXh0OwogIHN0cnVjdCBfSU9fRklMRSAqX3NidWY7CiAgIAogICAKICBpbnQgX3BvczsKIyAyMDgg Ii9hb2xuZXQvcGtnL2djYy0yLjk1LjMvbGliL2djYy1saWIvcG93ZXJwYy1pYm0tYWl4My4yLjUv Mi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvbGliaW8uaCIgMwp9OwpzdHJ1Y3QgX0lP X0ZJTEUgewogIGludCBfZmxhZ3M7CQkgCiAgIAogICAKICBjaGFyKiBfSU9fcmVhZF9wdHI7CSAK ICBjaGFyKiBfSU9fcmVhZF9lbmQ7CSAKICBjaGFyKiBfSU9fcmVhZF9iYXNlOwkgCiAgY2hhciog X0lPX3dyaXRlX2Jhc2U7CSAKICBjaGFyKiBfSU9fd3JpdGVfcHRyOwkgCiAgY2hhciogX0lPX3dy aXRlX2VuZDsJIAogIGNoYXIqIF9JT19idWZfYmFzZTsJIAogIGNoYXIqIF9JT19idWZfZW5kOwkg CiAgIAogIGNoYXIgKl9JT19zYXZlX2Jhc2U7ICAKICBjaGFyICpfSU9fYmFja3VwX2Jhc2U7ICAg CiAgY2hhciAqX0lPX3NhdmVfZW5kOyAgCiAgc3RydWN0IF9JT19tYXJrZXIgKl9tYXJrZXJzOwog IHN0cnVjdCBfSU9fRklMRSAqX2NoYWluOwogIGludCBfZmlsZW5vOwogIGludCBfYmxrc2l6ZTsK ICBfR19vZmZfdCAgX29mZnNldDsKICAgCiAgdW5zaWduZWQgc2hvcnQgX2N1cl9jb2x1bW47CiAg Y2hhciBfdW51c2VkOwogIGNoYXIgX3Nob3J0YnVmWzFdOwogICAKfTsKc3RydWN0IF9JT19GSUxF X3BsdXM7CmV4dGVybiBzdHJ1Y3QgX0lPX0ZJTEVfcGx1cyBfSU9fc3RkaW5fLCBfSU9fc3Rkb3V0 XywgX0lPX3N0ZGVycl87CnR5cGVkZWYgc3RydWN0CnsKICBfR19zc2l6ZV90ICAoKnJlYWQpICAo c3RydWN0IF9JT19GSUxFICosIHZvaWQgKiwgX0dfc3NpemVfdCApICA7CiAgX0dfc3NpemVfdCAg KCp3cml0ZSkgIChzdHJ1Y3QgX0lPX0ZJTEUgKiwgY29uc3Qgdm9pZCAqLCBfR19zc2l6ZV90ICkg IDsKICBfR19vZmZfdCAgKCpzZWVrKSAgKHN0cnVjdCBfSU9fRklMRSAqLCBfR19vZmZfdCAsIGlu dCkgIDsKICBpbnQgKCpjbG9zZSkgIChzdHJ1Y3QgX0lPX0ZJTEUgKikgIDsKfSBfSU9fY29va2ll X2lvX2Z1bmN0aW9uc190OwpzdHJ1Y3QgX0lPX2Nvb2tpZV9maWxlCnsKICBzdHJ1Y3QgX0lPX0ZJ TEUgZmlsZTsKICBjb25zdCB2b2lkICp2dGFibGU7CiAgdm9pZCAqY29va2llOwogIF9JT19jb29r aWVfaW9fZnVuY3Rpb25zX3QgaW9fZnVuY3Rpb25zOwp9OwpleHRlcm4gIkMiIHsKZXh0ZXJuIGlu dCBfX3VuZGVyZmxvdyAgKF9JT19GSUxFICopICA7CmV4dGVybiBpbnQgX191ZmxvdyAgKF9JT19G SUxFICopICA7CmV4dGVybiBpbnQgX19vdmVyZmxvdyAgKF9JT19GSUxFICosIGludCkgIDsKZXh0 ZXJuIGludCBfSU9fZ2V0YyAgKF9JT19GSUxFICpfX2ZwKSAgOwpleHRlcm4gaW50IF9JT19wdXRj ICAoaW50IF9fYywgX0lPX0ZJTEUgKl9fZnApICA7CmV4dGVybiBpbnQgX0lPX2Zlb2YgIChfSU9f RklMRSAqX19mcCkgIDsKZXh0ZXJuIGludCBfSU9fZmVycm9yICAoX0lPX0ZJTEUgKl9fZnApICA7 CmV4dGVybiBpbnQgX0lPX3BlZWtjX2xvY2tlZCAgKF9JT19GSUxFICpfX2ZwKSAgOwpleHRlcm4g dm9pZCBfSU9fZmxvY2tmaWxlICAoX0lPX0ZJTEUgKikgIDsKZXh0ZXJuIHZvaWQgX0lPX2Z1bmxv Y2tmaWxlICAoX0lPX0ZJTEUgKikgIDsKZXh0ZXJuIGludCBfSU9fZnRyeWxvY2tmaWxlICAoX0lP X0ZJTEUgKikgIDsKZXh0ZXJuIGludCBfSU9fdmZzY2FuZiAgKF9JT19GSUxFICosIGNvbnN0IGNo YXIgKiwgX0dfdmFfbGlzdCAsIGludCAqKSAgOwpleHRlcm4gaW50IF9JT192ZnByaW50ZiAgKF9J T19GSUxFICosIGNvbnN0IGNoYXIgKiwgX0dfdmFfbGlzdCApICA7CmV4dGVybiBfR19zc2l6ZV90 ICBfSU9fcGFkbiAgKF9JT19GSUxFICosIGludCwgX0dfc3NpemVfdCApICA7CmV4dGVybiBfR19z aXplX3QgIF9JT19zZ2V0biAgKF9JT19GSUxFICosIHZvaWQgKiwgX0dfc2l6ZV90ICkgIDsKZXh0 ZXJuIF9HX29mZl90ICBfSU9fc2Vla29mZiAgKF9JT19GSUxFICosIF9HX29mZl90ICwgaW50LCBp bnQpICA7CmV4dGVybiBfR19vZmZfdCAgX0lPX3NlZWtwb3MgIChfSU9fRklMRSAqLCBfR19vZmZf dCAsIGludCkgIDsKZXh0ZXJuIHZvaWQgX0lPX2ZyZWVfYmFja3VwX2FyZWEgIChfSU9fRklMRSAq KSAgOwp9CiMgMzYgIi9hb2xuZXQvcGtnL2djYy0yLjk1LjMvbGliL2djYy1saWIvcG93ZXJwYy1p Ym0tYWl4My4yLjUvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RyZWFtYnVmLmgi IDIgMwp9CmV4dGVybiAiQysrIiB7CmNsYXNzIGlzdHJlYW07ICAKY2xhc3Mgb3N0cmVhbTsgY2xh c3Mgc3RyZWFtYnVmOwp0eXBlZGVmIF9HX29mZl90ICBzdHJlYW1vZmY7CnR5cGVkZWYgX0dfb2Zm X3QgIHN0cmVhbXBvczsKdHlwZWRlZiBfR19zc2l6ZV90ICBzdHJlYW1zaXplOwp0eXBlZGVmIHVu c2lnbmVkIGxvbmcgX19mbXRmbGFnczsKdHlwZWRlZiB1bnNpZ25lZCBjaGFyIF9faW9zdGF0ZTsK c3RydWN0IF9pb3NfZmllbGRzCnsgIAogICAgc3RyZWFtYnVmICpfc3RyYnVmOwogICAgb3N0cmVh bSogX3RpZTsKICAgIGludCBfd2lkdGg7CiAgICBfX2ZtdGZsYWdzIF9mbGFnczsKICAgIHNob3J0 ICBfZmlsbDsKICAgIF9faW9zdGF0ZSBfc3RhdGU7CiAgICBfX2lvc3RhdGUgX2V4Y2VwdGlvbnM7 CiAgICBpbnQgX3ByZWNpc2lvbjsKICAgIHZvaWQgKl9hcnJheXM7ICAKfTsKIyAxMjQgIi9hb2xu ZXQvcGtnL2djYy0yLjk1LjMvbGliL2djYy1saWIvcG93ZXJwYy1pYm0tYWl4My4yLjUvMi45NS4z Ly4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RyZWFtYnVmLmgiIDMKY2xhc3MgaW9zIDogcHVi bGljIF9pb3NfZmllbGRzIHsKICBpb3MmIG9wZXJhdG9yPShpb3MmKTsgICAKICBpb3MgKGNvbnN0 IGlvcyYpOyAgCiAgcHVibGljOgogICAgdHlwZWRlZiBfX2ZtdGZsYWdzIGZtdGZsYWdzOwogICAg dHlwZWRlZiBpbnQgaW9zdGF0ZTsKICAgIHR5cGVkZWYgaW50IG9wZW5tb2RlOwogICAgdHlwZWRl ZiBfR19zc2l6ZV90ICBzdHJlYW1zaXplOwogICAgZW51bSBpb19zdGF0ZSB7Cglnb29kYml0ID0g MCAsCgllb2ZiaXQgPSAxICwKCWZhaWxiaXQgPSAyICwKCWJhZGJpdCA9IDQgIH07CiAgICBlbnVt IG9wZW5fbW9kZSB7CglpbiA9IDEgLAoJb3V0ID0gMiAsCglhdGUgPSA0ICwKCWFwcCA9IDggLAoJ dHJ1bmMgPSAxNiAsCglub2NyZWF0ZSA9IDMyICwKCW5vcmVwbGFjZSA9IDY0ICwKCWJpbiA9IDEy OCAsICAKCWJpbmFyeSA9IDEyOCAgfTsKICAgIGVudW0gc2Vla19kaXIgeyBiZWcsIGN1ciwgZW5k fTsKICAgIHR5cGVkZWYgZW51bSBzZWVrX2RpciBzZWVrZGlyOwogICAgIAogICAgZW51bSB7IHNr aXB3cz0gMDEgLAoJICAgbGVmdD0gMDIgLCByaWdodD0gMDQgLCBpbnRlcm5hbD0gMDEwICwKCSAg IGRlYz0gMDIwICwgb2N0PSAwNDAgLCBoZXg9IDAxMDAgLAoJICAgc2hvd2Jhc2U9IDAyMDAgLCBz aG93cG9pbnQ9IDA0MDAgLAoJICAgdXBwZXJjYXNlPSAwMTAwMCAsIHNob3dwb3M9IDAyMDAwICwK CSAgIHNjaWVudGlmaWM9IDA0MDAwICwgZml4ZWQ9IDAxMDAwMCAsCgkgICB1bml0YnVmPSAwMjAw MDAgLCBzdGRpbz0gMDQwMDAwIAoJICAgfTsKICAgIGVudW0geyAgCgliYXNlZmllbGQ9ZGVjK29j dCtoZXgsCglmbG9hdGZpZWxkID0gc2NpZW50aWZpYytmaXhlZCwKCWFkanVzdGZpZWxkID0gbGVm dCtyaWdodCtpbnRlcm5hbAogICAgfTsKIyAxNzcgIi9hb2xuZXQvcGtnL2djYy0yLjk1LjMvbGli L2djYy1saWIvcG93ZXJwYy1pYm0tYWl4My4yLjUvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUv ZysrLTMvc3RyZWFtYnVmLmgiIDMKICAgIG9zdHJlYW0qIHRpZSgpIGNvbnN0IHsgcmV0dXJuIF90 aWU7IH0KICAgIG9zdHJlYW0qIHRpZShvc3RyZWFtKiB2YWwpIHsgb3N0cmVhbSogc2F2ZT1fdGll OyBfdGllPXZhbDsgcmV0dXJuIHNhdmU7IH0KICAgICAKICAgIHNob3J0ICBmaWxsKCkgY29uc3Qg eyByZXR1cm4gX2ZpbGw7IH0KICAgIHNob3J0ICBmaWxsKHNob3J0ICBuZXdmKQoJe3Nob3J0ICBv bGRmID0gX2ZpbGw7IF9maWxsID0gbmV3ZjsgcmV0dXJuIG9sZGY7fQogICAgZm10ZmxhZ3MgZmxh Z3MoKSBjb25zdCB7IHJldHVybiBfZmxhZ3M7IH0KICAgIGZtdGZsYWdzIGZsYWdzKGZtdGZsYWdz IG5ld192YWwpIHsKCWZtdGZsYWdzIG9sZF92YWwgPSBfZmxhZ3M7IF9mbGFncyA9IG5ld192YWw7 IHJldHVybiBvbGRfdmFsOyB9CiAgICBpbnQgcHJlY2lzaW9uKCkgY29uc3QgeyByZXR1cm4gX3By ZWNpc2lvbjsgfQogICAgaW50IHByZWNpc2lvbihpbnQgbmV3cCkgewoJdW5zaWduZWQgc2hvcnQg b2xkcCA9IF9wcmVjaXNpb247IF9wcmVjaXNpb24gPSAodW5zaWduZWQgc2hvcnQpbmV3cDsKCXJl dHVybiBvbGRwOyB9CiAgICBmbXRmbGFncyBzZXRmKGZtdGZsYWdzIHZhbCkgewoJZm10ZmxhZ3Mg b2xkYml0cyA9IF9mbGFnczsKCV9mbGFncyB8PSB2YWw7IHJldHVybiBvbGRiaXRzOyB9CiAgICBm bXRmbGFncyBzZXRmKGZtdGZsYWdzIHZhbCwgZm10ZmxhZ3MgbWFzaykgewoJZm10ZmxhZ3Mgb2xk Yml0cyA9IF9mbGFnczsKCV9mbGFncyA9IChfZmxhZ3MgJiB+bWFzaykgfCAodmFsICYgbWFzayk7 IHJldHVybiBvbGRiaXRzOyB9CiAgICBmbXRmbGFncyB1bnNldGYoZm10ZmxhZ3MgbWFzaykgewoJ Zm10ZmxhZ3Mgb2xkYml0cyA9IF9mbGFnczsKCV9mbGFncyAmPSB+bWFzazsgcmV0dXJuIG9sZGJp dHM7IH0KICAgIGludCB3aWR0aCgpIGNvbnN0IHsgcmV0dXJuIF93aWR0aDsgfQogICAgaW50IHdp ZHRoKGludCB2YWwpIHsgaW50IHNhdmUgPSBfd2lkdGg7IF93aWR0aCA9IHZhbDsgcmV0dXJuIHNh dmU7IH0KICAgIHZvaWQgX3Rocm93X2ZhaWx1cmUoKSBjb25zdCB7IH0KICAgIHZvaWQgY2xlYXIo aW9zdGF0ZSBzdGF0ZSA9IDApIHsKCV9zdGF0ZSA9IF9zdHJidWYgPyBzdGF0ZSA6IHN0YXRlfGJh ZGJpdDsKCWlmIChfc3RhdGUgJiBfZXhjZXB0aW9ucykgX3Rocm93X2ZhaWx1cmUoKTsgfQogICAg dm9pZCBzZXQoaW9zdGF0ZSBmbGFnKSB7IF9zdGF0ZSB8PSBmbGFnOwoJaWYgKF9zdGF0ZSAmIF9l eGNlcHRpb25zKSBfdGhyb3dfZmFpbHVyZSgpOyB9CiAgICB2b2lkIHNldHN0YXRlKGlvc3RhdGUg ZmxhZykgeyBfc3RhdGUgfD0gZmxhZzsgIAoJaWYgKF9zdGF0ZSAmIF9leGNlcHRpb25zKSBfdGhy b3dfZmFpbHVyZSgpOyB9CiAgICBpbnQgZ29vZCgpIGNvbnN0IHsgcmV0dXJuIF9zdGF0ZSA9PSAw OyB9CiAgICBpbnQgZW9mKCkgY29uc3QgeyByZXR1cm4gX3N0YXRlICYgaW9zOjplb2ZiaXQ7IH0K ICAgIGludCBmYWlsKCkgY29uc3QgeyByZXR1cm4gX3N0YXRlICYgKGlvczo6YmFkYml0fGlvczo6 ZmFpbGJpdCk7IH0KICAgIGludCBiYWQoKSBjb25zdCB7IHJldHVybiBfc3RhdGUgJiBpb3M6OmJh ZGJpdDsgfQogICAgaW9zdGF0ZSByZHN0YXRlKCkgY29uc3QgeyByZXR1cm4gX3N0YXRlOyB9CiAg ICBvcGVyYXRvciB2b2lkKigpIGNvbnN0IHsgcmV0dXJuIGZhaWwoKSA/ICh2b2lkKikwIDogKHZv aWQqKSgtMSk7IH0KICAgIGludCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiBmYWlsKCk7IH0K ICAgIGlvc3RhdGUgZXhjZXB0aW9ucygpIGNvbnN0IHsgcmV0dXJuIF9leGNlcHRpb25zOyB9CiAg ICB2b2lkIGV4Y2VwdGlvbnMoaW9zdGF0ZSBlbmFibGUpIHsKCV9leGNlcHRpb25zID0gZW5hYmxl OwoJaWYgKF9zdGF0ZSAmIF9leGNlcHRpb25zKSBfdGhyb3dfZmFpbHVyZSgpOyB9CiAgICBzdHJl YW1idWYqIHJkYnVmKCkgY29uc3QgeyByZXR1cm4gX3N0cmJ1ZjsgfQogICAgc3RyZWFtYnVmKiBy ZGJ1ZihzdHJlYW1idWYgKl9zKSB7CiAgICAgIHN0cmVhbWJ1ZiAqX29sZCA9IF9zdHJidWY7IF9z dHJidWYgPSBfczsgY2xlYXIgKCk7IHJldHVybiBfb2xkOyB9CiAgICBzdGF0aWMgaW50IHN5bmNf d2l0aF9zdGRpbyhpbnQgb24pOwogICAgc3RhdGljIHZvaWQgc3luY193aXRoX3N0ZGlvKCkgeyBz eW5jX3dpdGhfc3RkaW8oMSk7IH0KICAgIHN0YXRpYyBmbXRmbGFncyBiaXRhbGxvYygpOwogICAg c3RhdGljIGludCB4YWxsb2MoKTsKICAgIHZvaWQqJiBwd29yZChpbnQpOwogICAgdm9pZCogcHdv cmQoaW50KSBjb25zdDsKICAgIGxvbmcmIGl3b3JkKGludCk7CiAgICBsb25nIGl3b3JkKGludCkg Y29uc3Q7CiAgICAgCiAgICBjbGFzcyBJbml0IHsKICAgIHB1YmxpYzoKICAgICAgSW5pdCAoKSB7 IH0KICAgIH07CiAgcHJvdGVjdGVkOgogICAgaW5saW5lIGlvcyhzdHJlYW1idWYqIHNiID0gMCwg b3N0cmVhbSogdGllX3RvID0gMCk7CiAgICBpbmxpbmUgdmlydHVhbCB+aW9zKCk7CiAgICBpbmxp bmUgdm9pZCBpbml0KHN0cmVhbWJ1Ziogc2IsIG9zdHJlYW0qIHRpZSA9IDApOwp9Owp0eXBlZGVm IGlvczo6c2Vla19kaXIgX3NlZWtfZGlyOwpjbGFzcyBzdHJlYW1tYXJrZXIgOiBwcml2YXRlIF9J T19tYXJrZXIgewogICAgZnJpZW5kIGNsYXNzIHN0cmVhbWJ1ZjsKICAgIHZvaWQgc2V0X29mZnNl dChpbnQgb2Zmc2V0KSB7IF9wb3MgPSBvZmZzZXQ7IH0KICBwdWJsaWM6CiAgICBzdHJlYW1tYXJr ZXIoc3RyZWFtYnVmICpzYik7CiAgICB+c3RyZWFtbWFya2VyKCk7CiAgICBpbnQgc2F2aW5nKCkg eyByZXR1cm4gIDE7IH0KICAgIGludCBkZWx0YShzdHJlYW1tYXJrZXImKTsKICAgIGludCBkZWx0 YSgpOwp9OwpzdHJ1Y3Qgc3RyZWFtYnVmIDogcHVibGljIF9JT19GSUxFIHsgIAogICAgZnJpZW5k IGNsYXNzIGlvczsKICAgIGZyaWVuZCBjbGFzcyBpc3RyZWFtOwogICAgZnJpZW5kIGNsYXNzIG9z dHJlYW07CiAgICBmcmllbmQgY2xhc3Mgc3RyZWFtbWFya2VyOwogICAgY29uc3Qgdm9pZCAqJl92 dGFibGUoKSB7IHJldHVybiAqKGNvbnN0IHZvaWQqKikoKF9JT19GSUxFKil0aGlzICsgMSk7IH0K ICBwcm90ZWN0ZWQ6CiAgICBzdGF0aWMgc3RyZWFtYnVmKiBfbGlzdF9hbGw7ICAKICAgIF9JT19G SUxFKiYgeGNoYWluKCkgeyByZXR1cm4gX2NoYWluOyB9CiAgICB2b2lkIF91bl9saW5rKCk7CiAg ICB2b2lkIF9saW5rX2luKCk7CiAgICBjaGFyKiBncHRyKCkgY29uc3QKICAgICAgeyByZXR1cm4g X2ZsYWdzICAmIDB4MTAwICA/IF9JT19zYXZlX2Jhc2UgOiBfSU9fcmVhZF9wdHI7IH0KICAgIGNo YXIqIHBwdHIoKSBjb25zdCB7IHJldHVybiBfSU9fd3JpdGVfcHRyOyB9CiAgICBjaGFyKiBlZ3B0 cigpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9mbGFncyAgJiAweDEwMCAgPyBfSU9fc2F2ZV9lbmQg OiBfSU9fcmVhZF9lbmQ7IH0KICAgIGNoYXIqIGVwcHRyKCkgY29uc3QgeyByZXR1cm4gX0lPX3dy aXRlX2VuZDsgfQogICAgY2hhciogcGJhc2UoKSBjb25zdCB7IHJldHVybiBfSU9fd3JpdGVfYmFz ZTsgfQogICAgY2hhciogZWJhY2soKSBjb25zdAogICAgICB7IHJldHVybiBfZmxhZ3MgICYgMHgx MDAgID8gX0lPX3NhdmVfYmFzZSA6IF9JT19yZWFkX2Jhc2U7fQogICAgY2hhciogYmFzZSgpIGNv bnN0IHsgcmV0dXJuIF9JT19idWZfYmFzZTsgfQogICAgY2hhciogZWJ1ZigpIGNvbnN0IHsgcmV0 dXJuIF9JT19idWZfZW5kOyB9CiAgICBpbnQgYmxlbigpIGNvbnN0IHsgcmV0dXJuIF9JT19idWZf ZW5kIC0gX0lPX2J1Zl9iYXNlOyB9CiAgICB2b2lkIHhwdXRfY2hhcihjaGFyIGMpIHsgKl9JT193 cml0ZV9wdHIrKyA9IGM7IH0KICAgIGludCB4ZmxhZ3MoKSB7IHJldHVybiBfZmxhZ3MgOyB9CiAg ICBpbnQgeGZsYWdzKGludCBmKSB7aW50IGZsID0gX2ZsYWdzIDsgX2ZsYWdzICA9IGY7IHJldHVy biBmbDt9CiAgICB2b2lkIHhzZXRmbGFncyhpbnQgZikgeyBfZmxhZ3MgIHw9IGY7IH0KICAgIHZv aWQgeHNldGZsYWdzKGludCBmLCBpbnQgbWFzaykKICAgICAgeyBfZmxhZ3MgID0gKF9mbGFncyAg JiB+bWFzaykgfCAoZiAmIG1hc2spOyB9CiAgICB2b2lkIGdidW1wKGludCBuKQogICAgICB7IF9m bGFncyAgJiAweDEwMCAgPyAoX0lPX3NhdmVfYmFzZSs9bik6KF9JT19yZWFkX3B0cis9bik7fQog ICAgdm9pZCBwYnVtcChpbnQgbikgeyBfSU9fd3JpdGVfcHRyICs9IG47IH0KICAgIHZvaWQgc2V0 YihjaGFyKiBiLCBjaGFyKiBlYiwgaW50IGE9MCk7CiAgICB2b2lkIHNldHAoY2hhciogcCwgY2hh ciogZXApCiAgICAgIHsgX0lPX3dyaXRlX2Jhc2U9X0lPX3dyaXRlX3B0cj1wOyBfSU9fd3JpdGVf ZW5kPWVwOyB9CiAgICB2b2lkIHNldGcoY2hhciogZWIsIGNoYXIqIGcsIGNoYXIgKmVnKSB7CiAg ICAgIGlmIChfZmxhZ3MgICYgMHgxMDAgKSBfSU9fZnJlZV9iYWNrdXBfYXJlYSh0aGlzKTsgCiAg ICAgIF9JT19yZWFkX2Jhc2UgPSBlYjsgX0lPX3JlYWRfcHRyID0gZzsgX0lPX3JlYWRfZW5kID0g ZWc7IH0KICAgIGNoYXIgKnNob3J0YnVmKCkgeyByZXR1cm4gX3Nob3J0YnVmOyB9CiAgICBpbnQg aW5fYmFja3VwKCkgeyByZXR1cm4gX2ZsYWdzICYgMHgxMDAgOyB9CiAgICAgCiAgICBjaGFyICpH YmFzZSgpIHsgcmV0dXJuIGluX2JhY2t1cCgpID8gX0lPX3NhdmVfYmFzZSA6IF9JT19yZWFkX2Jh c2U7IH0KICAgICAKICAgIGNoYXIgKmVHcHRyKCkgeyByZXR1cm4gaW5fYmFja3VwKCkgPyBfSU9f c2F2ZV9lbmQgOiBfSU9fcmVhZF9lbmQ7IH0KICAgICAKICAgIGNoYXIgKkJiYXNlKCkgeyByZXR1 cm4gaW5fYmFja3VwKCkgPyBfSU9fcmVhZF9iYXNlIDogX0lPX3NhdmVfYmFzZTsgfQogICAgY2hh ciAqQnB0cigpIHsgcmV0dXJuIF9JT19iYWNrdXBfYmFzZTsgfQogICAgIAogICAgY2hhciAqZUJw dHIoKSB7IHJldHVybiBpbl9iYWNrdXAoKSA/IF9JT19yZWFkX2VuZCA6IF9JT19zYXZlX2VuZDsg fQogICAgY2hhciAqTmJhc2UoKSB7IHJldHVybiBfSU9fc2F2ZV9iYXNlOyB9CiAgICBjaGFyICpl TnB0cigpIHsgcmV0dXJuIF9JT19zYXZlX2VuZDsgfQogICAgaW50IGhhdmVfYmFja3VwKCkgeyBy ZXR1cm4gX0lPX3NhdmVfYmFzZSAhPSBfX251bGwgOyB9CiAgICBpbnQgaGF2ZV9tYXJrZXJzKCkg eyByZXR1cm4gX21hcmtlcnMgIT0gX19udWxsIDsgfQogICAgdm9pZCBmcmVlX2JhY2t1cF9hcmVh KCk7CiAgICB2b2lkIHVuc2F2ZV9tYXJrZXJzKCk7ICAKICAgIGludCBwdXRfbW9kZSgpIHsgcmV0 dXJuIF9mbGFncyAmIDB4ODAwIDsgfQogICAgaW50IHN3aXRjaF90b19nZXRfbW9kZSgpOwogICAg CiAgICBzdHJlYW1idWYoaW50IGZsYWdzPTApOwogIHB1YmxpYzoKICAgIHN0YXRpYyBpbnQgZmx1 c2hfYWxsKCk7CiAgICBzdGF0aWMgdm9pZCBmbHVzaF9hbGxfbGluZWJ1ZmZlcmVkKCk7ICAKICAg IHZpcnR1YWwgfnN0cmVhbWJ1ZigpOwogICAgdmlydHVhbCBpbnQgb3ZlcmZsb3coaW50IGMgPSAo LTEpICk7ICAKICAgIHZpcnR1YWwgaW50IHVuZGVyZmxvdygpOyAgCiAgICB2aXJ0dWFsIGludCB1 ZmxvdygpOyAgCiAgICB2aXJ0dWFsIGludCBwYmFja2ZhaWwoaW50IGMpOwogICAgdmlydHVhbCBz dHJlYW1zaXplIHhzcHV0bihjb25zdCBjaGFyKiBzLCBzdHJlYW1zaXplIG4pOwogICAgdmlydHVh bCBzdHJlYW1zaXplIHhzZ2V0bihjaGFyKiBzLCBzdHJlYW1zaXplIG4pOwogICAgdmlydHVhbCBz dHJlYW1wb3Mgc2Vla29mZihzdHJlYW1vZmYsIF9zZWVrX2RpciwgaW50IG1vZGU9aW9zOjppbnxp b3M6Om91dCk7CiAgICB2aXJ0dWFsIHN0cmVhbXBvcyBzZWVrcG9zKHN0cmVhbXBvcyBwb3MsIGlu dCBtb2RlID0gaW9zOjppbnxpb3M6Om91dCk7CiAgICBzdHJlYW1wb3MgcHVic2Vla29mZihzdHJl YW1vZmYgbywgX3NlZWtfZGlyIGQsIGludCBtb2RlPWlvczo6aW58aW9zOjpvdXQpCiAgICAgIHsg cmV0dXJuIF9JT19zZWVrb2ZmICh0aGlzLCBvLCBkLCBtb2RlKTsgfQogICAgc3RyZWFtcG9zIHB1 YnNlZWtwb3Moc3RyZWFtcG9zIHBvcywgaW50IG1vZGUgPSBpb3M6OmlufGlvczo6b3V0KQogICAg ICB7IHJldHVybiBfSU9fc2Vla3BvcyAodGhpcywgcG9zLCBtb2RlKTsgfQogICAgc3RyZWFtcG9z IHNzZWVrb2ZmKHN0cmVhbW9mZiwgX3NlZWtfZGlyLCBpbnQgbW9kZT1pb3M6OmlufGlvczo6b3V0 KTsKICAgIHN0cmVhbXBvcyBzc2Vla3BvcyhzdHJlYW1wb3MgcG9zLCBpbnQgbW9kZSA9IGlvczo6 aW58aW9zOjpvdXQpOwogICAgdmlydHVhbCBzdHJlYW1idWYqIHNldGJ1ZihjaGFyKiBwLCBpbnQg bGVuKTsKICAgIHZpcnR1YWwgaW50IHN5bmMoKTsKICAgIHZpcnR1YWwgaW50IGRvYWxsb2NhdGUo KTsKICAgIGludCBzZWVrbWFyayhzdHJlYW1tYXJrZXImIG1hcmssIGludCBkZWx0YSA9IDApOwog ICAgaW50IHNwdXRiYWNrYyhjaGFyIGMpOwogICAgaW50IHN1bmdldGMoKTsKICAgIGludCB1bmJ1 ZmZlcmVkKCkgeyByZXR1cm4gX2ZsYWdzICYgMiAgPyAxIDogMDsgfQogICAgaW50IGxpbmVidWZm ZXJlZCgpIHsgcmV0dXJuIF9mbGFncyAmIDB4MjAwICA/IDEgOiAwOyB9CiAgICB2b2lkIHVuYnVm ZmVyZWQoaW50IGkpCgl7IGlmIChpKSBfZmxhZ3MgfD0gMiA7IGVsc2UgX2ZsYWdzICY9IH4yIDsg fQogICAgdm9pZCBsaW5lYnVmZmVyZWQoaW50IGkpCgl7IGlmIChpKSBfZmxhZ3MgfD0gMHgyMDAg OyBlbHNlIF9mbGFncyAmPSB+MHgyMDAgOyB9CiAgICBpbnQgYWxsb2NhdGUoKSB7ICAKCWlmIChi YXNlKCkgfHwgdW5idWZmZXJlZCgpKSByZXR1cm4gMDsKCWVsc2UgcmV0dXJuIGRvYWxsb2NhdGUo KTsgfQogICAgIAogICAgdm9pZCBhbGxvY2J1ZigpIHsgaWYgKGJhc2UoKSA9PSBfX251bGwgKSBk b2FsbG9jYnVmKCk7IH0KICAgIHZvaWQgZG9hbGxvY2J1ZigpOwogICAgaW50IGluX2F2YWlsKCkg eyByZXR1cm4gX0lPX3JlYWRfZW5kIC0gX0lPX3JlYWRfcHRyOyB9CiAgICBpbnQgb3V0X3dhaXRp bmcoKSB7IHJldHVybiBfSU9fd3JpdGVfcHRyIC0gX0lPX3dyaXRlX2Jhc2U7IH0KICAgIHN0cmVh bXNpemUgc3B1dG4oY29uc3QgY2hhciogcywgc3RyZWFtc2l6ZSBuKSB7IHJldHVybiB4c3B1dG4o cywgbik7IH0KICAgIHN0cmVhbXNpemUgcGFkbihjaGFyIHBhZCwgc3RyZWFtc2l6ZSBuKSB7IHJl dHVybiBfSU9fcGFkbih0aGlzLCBwYWQsIG4pOyB9CiAgICBzdHJlYW1zaXplIHNnZXRuKGNoYXIq IHMsIHN0cmVhbXNpemUgbikgeyByZXR1cm4gX0lPX3NnZXRuKHRoaXMsIHMsIG4pOyB9CiAgICBp bnQgaWdub3JlKGludCk7CiAgICBpbnQgZ2V0X2NvbHVtbigpOwogICAgaW50IHNldF9jb2x1bW4o aW50KTsKICAgIGxvbmcgc2dldGxpbmUoY2hhciogYnVmLCBfR19zaXplX3QgIG4sIGNoYXIgZGVs aW0sIGludCBwdXRiYWNrX2RlbGltKTsKICAgIGludCBzcHV0YyhpbnQgYykgeyByZXR1cm4gX0lP X3B1dGMoYywgdGhpcyk7IH0KICAgIGludCBzYnVtcGMoKSB7IHJldHVybiBfSU9fZ2V0Yyh0aGlz KTsgfQogICAgaW50IHNnZXRjKCkgeyByZXR1cm4gKCggIHRoaXMgICktPl9JT19yZWFkX3B0ciA+ PSAoICB0aGlzICApLT5fSU9fcmVhZF9lbmQgJiYgX191bmRlcmZsb3cgKCAgdGhpcyAgKSA9PSAo LTEpICA/ICgtMSkgIDogKih1bnNpZ25lZCBjaGFyICopICggIHRoaXMgICktPl9JT19yZWFkX3B0 cikgIDsgfQogICAgaW50IHNuZXh0YygpIHsKCWlmIChfSU9fcmVhZF9wdHIgPj0gX0lPX3JlYWRf ZW5kICYmIF9fdW5kZXJmbG93KHRoaXMpID09ICgtMSkgKQoJICByZXR1cm4gKC0xKSA7CgllbHNl IHJldHVybiBfSU9fcmVhZF9wdHIrKywgc2dldGMoKTsgfQogICAgdm9pZCBzdG9zc2MoKSB7IGlm IChfSU9fcmVhZF9wdHIgPCBfSU9fcmVhZF9lbmQpIF9JT19yZWFkX3B0cisrOyB9CiAgICBpbnQg dnNjYW4oY2hhciBjb25zdCAqZm10MCwgX0dfdmFfbGlzdCAgYXAsIGlvcyogc3RyZWFtID0gX19u dWxsICk7CiAgICBpbnQgc2NhbihjaGFyIGNvbnN0ICpmbXQwIC4uLik7CiAgICBpbnQgdmZvcm0o Y2hhciBjb25zdCAqZm10MCwgX0dfdmFfbGlzdCAgYXApOwogICAgaW50IGZvcm0oY2hhciBjb25z dCAqZm10MCAuLi4pOwogICAgdmlydHVhbCBzdHJlYW1zaXplIHN5c19yZWFkKGNoYXIqIGJ1Ziwg c3RyZWFtc2l6ZSBzaXplKTsKICAgIHZpcnR1YWwgc3RyZWFtc2l6ZSBzeXNfd3JpdGUoY29uc3Qg Y2hhciosIHN0cmVhbXNpemUpOwogICAgdmlydHVhbCBzdHJlYW1wb3Mgc3lzX3NlZWsoc3RyZWFt b2ZmLCBfc2Vla19kaXIpOwogICAgdmlydHVhbCBpbnQgc3lzX2Nsb3NlKCk7CiAgICB2aXJ0dWFs IGludCBzeXNfc3RhdCh2b2lkKik7ICAKfTsKY2xhc3MgZmlsZWJ1ZiA6IHB1YmxpYyBzdHJlYW1i dWYgewogIHByb3RlY3RlZDoKICAgIHZvaWQgaW5pdCgpOwogIHB1YmxpYzoKICAgIHN0YXRpYyBj b25zdCBpbnQgb3BlbnByb3Q7ICAKICAgIGZpbGVidWYoKTsKICAgIGZpbGVidWYoaW50IGZkKTsK ICAgIGZpbGVidWYoaW50IGZkLCBjaGFyKiBwLCBpbnQgbGVuKTsKICAgIH5maWxlYnVmKCk7CiAg ICBmaWxlYnVmKiBhdHRhY2goaW50IGZkKTsKICAgIGZpbGVidWYqIG9wZW4oY29uc3QgY2hhciAq ZmlsZW5hbWUsIGNvbnN0IGNoYXIgKm1vZGUpOwogICAgZmlsZWJ1Ziogb3Blbihjb25zdCBjaGFy ICpmaWxlbmFtZSwgaW9zOjpvcGVubW9kZSBtb2RlLCBpbnQgcHJvdCA9IDA2NjQpOwogICAgdmly dHVhbCBpbnQgdW5kZXJmbG93KCk7CiAgICB2aXJ0dWFsIGludCBvdmVyZmxvdyhpbnQgYyA9ICgt MSkgKTsKICAgIGludCBpc19vcGVuKCkgY29uc3QgeyByZXR1cm4gX2ZpbGVubyA+PSAwOyB9CiAg ICBpbnQgZmQoKSBjb25zdCB7IHJldHVybiBpc19vcGVuKCkgPyBfZmlsZW5vIDogKC0xKSA7IH0K ICAgIGZpbGVidWYqIGNsb3NlKCk7CiAgICB2aXJ0dWFsIGludCBkb2FsbG9jYXRlKCk7CiAgICB2 aXJ0dWFsIHN0cmVhbXBvcyBzZWVrb2ZmKHN0cmVhbW9mZiwgX3NlZWtfZGlyLCBpbnQgbW9kZT1p b3M6OmlufGlvczo6b3V0KTsKICAgIHZpcnR1YWwgc3RyZWFtYnVmKiBzZXRidWYoY2hhciogcCwg aW50IGxlbik7CiAgICBzdHJlYW1zaXplIHhzcHV0bihjb25zdCBjaGFyKiBzLCBzdHJlYW1zaXpl IG4pOwogICAgc3RyZWFtc2l6ZSB4c2dldG4oY2hhciogcywgc3RyZWFtc2l6ZSBuKTsKICAgIHZp cnR1YWwgaW50IHN5bmMoKTsKICBwcm90ZWN0ZWQ6ICAKICAgIGludCBpc19yZWFkaW5nKCkgeyBy ZXR1cm4gZWJhY2soKSAhPSBlZ3B0cigpOyB9CiAgICBjaGFyKiBjdXJfcHRyKCkgeyByZXR1cm4g aXNfcmVhZGluZygpID8gIGdwdHIoKSA6IHBwdHIoKTsgfQogICAgIAogICAgY2hhciogZmlsZV9w dHIoKSB7IHJldHVybiBlR3B0cigpOyB9CiAgICAgCiAgICB2aXJ0dWFsIHN0cmVhbXNpemUgc3lz X3JlYWQoY2hhciogYnVmLCBzdHJlYW1zaXplIHNpemUpOwogICAgdmlydHVhbCBzdHJlYW1wb3Mg c3lzX3NlZWsoc3RyZWFtb2ZmLCBfc2Vla19kaXIpOwogICAgdmlydHVhbCBzdHJlYW1zaXplIHN5 c193cml0ZShjb25zdCBjaGFyKiwgc3RyZWFtc2l6ZSk7CiAgICB2aXJ0dWFsIGludCBzeXNfc3Rh dCh2b2lkKik7ICAKICAgIHZpcnR1YWwgaW50IHN5c19jbG9zZSgpOwp9OwppbmxpbmUgdm9pZCBp b3M6OmluaXQoc3RyZWFtYnVmKiBzYiwgb3N0cmVhbSogdGllX3RvKSB7CgkJX3N0YXRlID0gc2Ig PyBpb3M6Omdvb2RiaXQgOiBpb3M6OmJhZGJpdDsgX2V4Y2VwdGlvbnM9MDsKCQlfc3RyYnVmPXNi OyBfdGllID0gdGllX3RvOyBfd2lkdGg9MDsgX2ZpbGw9JyAnOwoJCV9mbGFncz1pb3M6OnNraXB3 c3xpb3M6OmRlYzsKCQlfcHJlY2lzaW9uPTY7IF9hcnJheXMgPSAwOyB9CmlubGluZSBpb3M6Omlv cyhzdHJlYW1idWYqIHNiLCBvc3RyZWFtKiB0aWVfdG8pIHsgaW5pdChzYiwgdGllX3RvKTsgfQpp bmxpbmUgaW9zOjp+aW9zKCkgewogICAgIAogICAgIAogICAgb3BlcmF0b3IgZGVsZXRlW10gKF9h cnJheXMpOwp9Cn0gIAojIDMxICIvYW9sbmV0L3BrZy9nY2MtMi45NS4zL2xpYi9nY2MtbGliL3Bv d2VycGMtaWJtLWFpeDMuMi41LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL2lvc3Ry ZWFtLmgiIDIgMwpleHRlcm4gIkMrKyIgewpjbGFzcyBpc3RyZWFtOyBjbGFzcyBvc3RyZWFtOwp0 eXBlZGVmIGlvcyYgKCpfX21hbmlwKShpb3MmKTsKdHlwZWRlZiBpc3RyZWFtJiAoKl9faW1hbmlw KShpc3RyZWFtJik7CnR5cGVkZWYgb3N0cmVhbSYgKCpfX29tYW5pcCkob3N0cmVhbSYpOwpleHRl cm4gaXN0cmVhbSYgd3MoaXN0cmVhbSYgaW5zKTsKZXh0ZXJuIG9zdHJlYW0mIGZsdXNoKG9zdHJl YW0mIG91dHMpOwpleHRlcm4gb3N0cmVhbSYgZW5kbChvc3RyZWFtJiBvdXRzKTsKZXh0ZXJuIG9z dHJlYW0mIGVuZHMob3N0cmVhbSYgb3V0cyk7CmNsYXNzIG9zdHJlYW0gOiB2aXJ0dWFsIHB1Ymxp YyBpb3MKewogICAgIAogICAgdm9pZCBkb19vc2Z4KCk7CiAgcHVibGljOgogICAgb3N0cmVhbSgp IHsgfQogICAgb3N0cmVhbShzdHJlYW1idWYqIHNiLCBvc3RyZWFtKiB0aWVkPSBfX251bGwgKTsK ICAgIGludCBvcGZ4KCkgewoJaWYgKCFnb29kKCkpIHJldHVybiAwOwoJZWxzZSB7IGlmIChfdGll KSBfdGllLT5mbHVzaCgpOyAgOyByZXR1cm4gMTt9IH0KICAgIHZvaWQgb3NmeCgpIHsgIDsKCQkg IGlmIChmbGFncygpICYgKGlvczo6dW5pdGJ1Znxpb3M6OnN0ZGlvKSkKCQkgICAgICBkb19vc2Z4 KCk7IH0KICAgIG9zdHJlYW0mIGZsdXNoKCk7CiAgICBvc3RyZWFtJiBwdXQoY2hhciBjKSB7IF9z dHJidWYtPnNwdXRjKGMpOyByZXR1cm4gKnRoaXM7IH0KICAgIG9zdHJlYW0mIHdyaXRlKGNvbnN0 IGNoYXIgKnMsIHN0cmVhbXNpemUgbik7CiAgICBvc3RyZWFtJiB3cml0ZShjb25zdCB1bnNpZ25l ZCBjaGFyICpzLCBzdHJlYW1zaXplIG4pCiAgICAgIHsgcmV0dXJuIHdyaXRlKChjb25zdCBjaGFy KilzLCBuKTt9CiAgICBvc3RyZWFtJiB3cml0ZShjb25zdCBzaWduZWQgY2hhciAqcywgc3RyZWFt c2l6ZSBuKQogICAgICB7IHJldHVybiB3cml0ZSgoY29uc3QgY2hhciopcywgbik7fQogICAgb3N0 cmVhbSYgd3JpdGUoY29uc3Qgdm9pZCAqcywgc3RyZWFtc2l6ZSBuKQogICAgICB7IHJldHVybiB3 cml0ZSgoY29uc3QgY2hhciopcywgbik7fQogICAgb3N0cmVhbSYgc2Vla3Aoc3RyZWFtcG9zKTsK ICAgIG9zdHJlYW0mIHNlZWtwKHN0cmVhbW9mZiwgX3NlZWtfZGlyKTsKICAgIHN0cmVhbXBvcyB0 ZWxscCgpOwogICAgb3N0cmVhbSYgZm9ybShjb25zdCBjaGFyICpmb3JtYXQgLi4uKTsKICAgIG9z dHJlYW0mIHZmb3JtKGNvbnN0IGNoYXIgKmZvcm1hdCwgX0dfdmFfbGlzdCAgYXJncyk7CiAgICBv c3RyZWFtJiBvcGVyYXRvcjw8KGNoYXIgYyk7CiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KHVuc2ln bmVkIGNoYXIgYykgeyByZXR1cm4gKCp0aGlzKSA8PCAoY2hhciljOyB9CiAgICBvc3RyZWFtJiBv cGVyYXRvcjw8KHNpZ25lZCBjaGFyIGMpIHsgcmV0dXJuICgqdGhpcykgPDwgKGNoYXIpYzsgfQog ICAgb3N0cmVhbSYgb3BlcmF0b3I8PChjb25zdCBjaGFyICpzKTsKICAgIG9zdHJlYW0mIG9wZXJh dG9yPDwoY29uc3QgdW5zaWduZWQgY2hhciAqcykKCXsgcmV0dXJuICgqdGhpcykgPDwgKGNvbnN0 IGNoYXIqKXM7IH0KICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwoY29uc3Qgc2lnbmVkIGNoYXIgKnMp Cgl7IHJldHVybiAoKnRoaXMpIDw8IChjb25zdCBjaGFyKilzOyB9CiAgICBvc3RyZWFtJiBvcGVy YXRvcjw8KGNvbnN0IHZvaWQgKnApOwogICAgb3N0cmVhbSYgb3BlcmF0b3I8PChpbnQgbik7CiAg ICBvc3RyZWFtJiBvcGVyYXRvcjw8KHVuc2lnbmVkIGludCBuKTsKICAgIG9zdHJlYW0mIG9wZXJh dG9yPDwobG9uZyBuKTsKICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwodW5zaWduZWQgbG9uZyBuKTsK ICAgIF9fZXh0ZW5zaW9uX18gb3N0cmVhbSYgb3BlcmF0b3I8PChsb25nIGxvbmcgbik7CiAgICBf X2V4dGVuc2lvbl9fIG9zdHJlYW0mIG9wZXJhdG9yPDwodW5zaWduZWQgbG9uZyBsb25nIG4pOwog ICAgb3N0cmVhbSYgb3BlcmF0b3I8PChzaG9ydCBuKSB7cmV0dXJuIG9wZXJhdG9yPDwoKGludClu KTt9CiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KHVuc2lnbmVkIHNob3J0IG4pIHtyZXR1cm4gb3Bl cmF0b3I8PCgodW5zaWduZWQgaW50KW4pO30KICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwoYm9vbCBi KSB7IHJldHVybiBvcGVyYXRvcjw8KChpbnQpYik7IH0KICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwo ZG91YmxlIG4pOwogICAgb3N0cmVhbSYgb3BlcmF0b3I8PChmbG9hdCBuKSB7IHJldHVybiBvcGVy YXRvcjw8KChkb3VibGUpbik7IH0KICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwobG9uZyBkb3VibGUg bikgeyByZXR1cm4gb3BlcmF0b3I8PCgoZG91YmxlKW4pOyB9CiAgICBvc3RyZWFtJiBvcGVyYXRv cjw8KF9fb21hbmlwIGZ1bmMpIHsgcmV0dXJuICgqZnVuYykoKnRoaXMpOyB9CiAgICBvc3RyZWFt JiBvcGVyYXRvcjw8KF9fbWFuaXAgZnVuYykgeygqZnVuYykoKnRoaXMpOyByZXR1cm4gKnRoaXM7 fQogICAgb3N0cmVhbSYgb3BlcmF0b3I8PChzdHJlYW1idWYqKTsKfTsKY2xhc3MgaXN0cmVhbSA6 IHZpcnR1YWwgcHVibGljIGlvcwp7CiAgICAgCnByb3RlY3RlZDoKICAgIF9HX3NpemVfdCAgX2dj b3VudDsKICAgIGludCBfc2tpcF93cygpOwogIHB1YmxpYzoKICAgIGlzdHJlYW0oKTogX2djb3Vu dCAoMCkgeyB9CiAgICBpc3RyZWFtKHN0cmVhbWJ1Ziogc2IsIG9zdHJlYW0qdGllZD0gX19udWxs ICk7CiAgICBpc3RyZWFtJiBnZXQoY2hhciogcHRyLCBpbnQgbGVuLCBjaGFyIGRlbGltID0gJ1xu Jyk7CiAgICBpc3RyZWFtJiBnZXQodW5zaWduZWQgY2hhciogcHRyLCBpbnQgbGVuLCBjaGFyIGRl bGltID0gJ1xuJykKCXsgcmV0dXJuIGdldCgoY2hhciopcHRyLCBsZW4sIGRlbGltKTsgfQogICAg aXN0cmVhbSYgZ2V0KGNoYXImIGMpOwogICAgaXN0cmVhbSYgZ2V0KHVuc2lnbmVkIGNoYXImIGMp IHsgcmV0dXJuIGdldCgoY2hhciYpYyk7IH0KICAgIGlzdHJlYW0mIGdldGxpbmUoY2hhciogcHRy LCBpbnQgbGVuLCBjaGFyIGRlbGltID0gJ1xuJyk7CiAgICBpc3RyZWFtJiBnZXRsaW5lKHVuc2ln bmVkIGNoYXIqIHB0ciwgaW50IGxlbiwgY2hhciBkZWxpbSA9ICdcbicpCgl7IHJldHVybiBnZXRs aW5lKChjaGFyKilwdHIsIGxlbiwgZGVsaW0pOyB9CiAgICBpc3RyZWFtJiBnZXQoc2lnbmVkIGNo YXImIGMpICB7IHJldHVybiBnZXQoKGNoYXImKWMpOyB9CiAgICBpc3RyZWFtJiBnZXQoc2lnbmVk IGNoYXIqIHB0ciwgaW50IGxlbiwgY2hhciBkZWxpbSA9ICdcbicpCgl7IHJldHVybiBnZXQoKGNo YXIqKXB0ciwgbGVuLCBkZWxpbSk7IH0KICAgIGlzdHJlYW0mIGdldGxpbmUoc2lnbmVkIGNoYXIq IHB0ciwgaW50IGxlbiwgY2hhciBkZWxpbSA9ICdcbicpCgl7IHJldHVybiBnZXRsaW5lKChjaGFy KilwdHIsIGxlbiwgZGVsaW0pOyB9CiAgICBpc3RyZWFtJiByZWFkKGNoYXIgKnB0ciwgc3RyZWFt c2l6ZSBuKTsKICAgIGlzdHJlYW0mIHJlYWQodW5zaWduZWQgY2hhciAqcHRyLCBzdHJlYW1zaXpl IG4pCiAgICAgIHsgcmV0dXJuIHJlYWQoKGNoYXIqKXB0ciwgbik7IH0KICAgIGlzdHJlYW0mIHJl YWQoc2lnbmVkIGNoYXIgKnB0ciwgc3RyZWFtc2l6ZSBuKQogICAgICB7IHJldHVybiByZWFkKChj aGFyKilwdHIsIG4pOyB9CiAgICBpc3RyZWFtJiByZWFkKHZvaWQgKnB0ciwgc3RyZWFtc2l6ZSBu KQogICAgICB7IHJldHVybiByZWFkKChjaGFyKilwdHIsIG4pOyB9CiAgICBpc3RyZWFtJiBnZXQo c3RyZWFtYnVmJiBzYiwgY2hhciBkZWxpbSA9ICdcbicpOwogICAgaXN0cmVhbSYgZ2V0cyhjaGFy ICoqcywgY2hhciBkZWxpbSA9ICdcbicpOwogICAgaW50IGlwZngoaW50IG5lZWQgPSAwKSB7Cglp ZiAoIWdvb2QoKSkgeyBzZXQoaW9zOjpmYWlsYml0KTsgcmV0dXJuIDA7IH0KCWVsc2UgewoJICAg OwoJICBpZiAoX3RpZSAmJiAobmVlZCA9PSAwIHx8IHJkYnVmKCktPmluX2F2YWlsKCkgPCBuZWVk KSkgX3RpZS0+Zmx1c2goKTsKCSAgaWYgKCFuZWVkICYmIChmbGFncygpICYgaW9zOjpza2lwd3Mp KSByZXR1cm4gX3NraXBfd3MoKTsKCSAgZWxzZSByZXR1cm4gMTsKCX0KICAgIH0KICAgIGludCBp cGZ4MCgpIHsgIAoJaWYgKCFnb29kKCkpIHsgc2V0KGlvczo6ZmFpbGJpdCk7IHJldHVybiAwOyB9 CgllbHNlIHsKCSAgIDsKCSAgaWYgKF90aWUpIF90aWUtPmZsdXNoKCk7CgkgIGlmIChmbGFncygp ICYgaW9zOjpza2lwd3MpIHJldHVybiBfc2tpcF93cygpOwoJICBlbHNlIHJldHVybiAxOwoJfQog ICAgfQogICAgaW50IGlwZngxKCkgeyAgCglpZiAoIWdvb2QoKSkgeyBzZXQoaW9zOjpmYWlsYml0 KTsgcmV0dXJuIDA7IH0KCWVsc2UgewoJICAgOwoJICBpZiAoX3RpZSAmJiByZGJ1ZigpLT5pbl9h dmFpbCgpID09IDApIF90aWUtPmZsdXNoKCk7CgkgIHJldHVybiAxOwoJfQogICAgfQogICAgdm9p ZCBpc2Z4KCkgeyAgOyB9CiAgICBpbnQgZ2V0KCkgeyBpZiAoIWlwZngxKCkpIHJldHVybiAoLTEp IDsKCQllbHNlIHsgaW50IGNoID0gX3N0cmJ1Zi0+c2J1bXBjKCk7CgkJICAgICAgIGlmIChjaCA9 PSAoLTEpICkgc2V0KGlvczo6ZW9mYml0KTsKCQkgICAgICAgaXNmeCgpOwoJCSAgICAgICByZXR1 cm4gY2g7CgkJICAgICB9IH0KICAgIGludCBwZWVrKCk7CiAgICBfR19zaXplX3QgIGdjb3VudCgp IHsgcmV0dXJuIF9nY291bnQ7IH0KICAgIGlzdHJlYW0mIGlnbm9yZShpbnQgbj0xLCBpbnQgZGVs aW0gPSAoLTEpICk7CiAgICBpbnQgc3luYyAoKTsKICAgIGlzdHJlYW0mIHNlZWtnKHN0cmVhbXBv cyk7CiAgICBpc3RyZWFtJiBzZWVrZyhzdHJlYW1vZmYsIF9zZWVrX2Rpcik7CiAgICBzdHJlYW1w b3MgdGVsbGcoKTsKICAgIGlzdHJlYW0mIHB1dGJhY2soY2hhciBjaCkgewoJaWYgKGdvb2QoKSAm JiBfc3RyYnVmLT5zcHV0YmFja2MoY2gpID09ICgtMSkgKSBjbGVhcihpb3M6OmJhZGJpdCk7Cgly ZXR1cm4gKnRoaXM7fQogICAgaXN0cmVhbSYgdW5nZXQoKSB7CglpZiAoZ29vZCgpICYmIF9zdHJi dWYtPnN1bmdldGMoKSA9PSAoLTEpICkgY2xlYXIoaW9zOjpiYWRiaXQpOwoJcmV0dXJuICp0aGlz O30KICAgIGlzdHJlYW0mIHNjYW4oY29uc3QgY2hhciAqZm9ybWF0IC4uLik7CiAgICBpc3RyZWFt JiB2c2Nhbihjb25zdCBjaGFyICpmb3JtYXQsIF9HX3ZhX2xpc3QgIGFyZ3MpOwogICAgaXN0cmVh bSYgb3BlcmF0b3I+PihjaGFyKik7CiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+KHVuc2lnbmVkIGNo YXIqIHApIHsgcmV0dXJuIG9wZXJhdG9yPj4oKGNoYXIqKXApOyB9CiAgICBpc3RyZWFtJiBvcGVy YXRvcj4+KHNpZ25lZCBjaGFyKnApIHsgcmV0dXJuIG9wZXJhdG9yPj4oKGNoYXIqKXApOyB9CiAg ICBpc3RyZWFtJiBvcGVyYXRvcj4+KGNoYXImIGMpOwogICAgaXN0cmVhbSYgb3BlcmF0b3I+Pih1 bnNpZ25lZCBjaGFyJiBjKSB7cmV0dXJuIG9wZXJhdG9yPj4oKGNoYXImKWMpO30KICAgIGlzdHJl YW0mIG9wZXJhdG9yPj4oc2lnbmVkIGNoYXImIGMpIHtyZXR1cm4gb3BlcmF0b3I+PigoY2hhciYp Yyk7fQogICAgaXN0cmVhbSYgb3BlcmF0b3I+PihpbnQmKTsKICAgIGlzdHJlYW0mIG9wZXJhdG9y Pj4obG9uZyYpOwogICAgX19leHRlbnNpb25fXyBpc3RyZWFtJiBvcGVyYXRvcj4+KGxvbmcgbG9u ZyYpOwogICAgX19leHRlbnNpb25fXyBpc3RyZWFtJiBvcGVyYXRvcj4+KHVuc2lnbmVkIGxvbmcg bG9uZyYpOwogICAgaXN0cmVhbSYgb3BlcmF0b3I+PihzaG9ydCYpOwogICAgaXN0cmVhbSYgb3Bl cmF0b3I+Pih1bnNpZ25lZCBpbnQmKTsKICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4odW5zaWduZWQg bG9uZyYpOwogICAgaXN0cmVhbSYgb3BlcmF0b3I+Pih1bnNpZ25lZCBzaG9ydCYpOwogICAgaXN0 cmVhbSYgb3BlcmF0b3I+Pihib29sJik7CiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+KGZsb2F0Jik7 CiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+KGRvdWJsZSYpOwogICAgaXN0cmVhbSYgb3BlcmF0b3I+ Pihsb25nIGRvdWJsZSYpOwogICAgaXN0cmVhbSYgb3BlcmF0b3I+PiggX19tYW5pcCBmdW5jKSB7 KCpmdW5jKSgqdGhpcyk7IHJldHVybiAqdGhpczt9CiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+KF9f aW1hbmlwIGZ1bmMpIHsgcmV0dXJuICgqZnVuYykoKnRoaXMpOyB9CiAgICBpc3RyZWFtJiBvcGVy YXRvcj4+KHN0cmVhbWJ1ZiopOwp9OwpjbGFzcyBpb3N0cmVhbSA6IHB1YmxpYyBpc3RyZWFtLCBw dWJsaWMgb3N0cmVhbQp7CiAgcHVibGljOgogICAgaW9zdHJlYW0oKSB7IH0KICAgIGlvc3RyZWFt KHN0cmVhbWJ1Ziogc2IsIG9zdHJlYW0qdGllZD0gX19udWxsICk7Cn07CmNsYXNzIF9JT19pc3Ry ZWFtX3dpdGhhc3NpZ24gOiBwdWJsaWMgaXN0cmVhbSB7CnB1YmxpYzoKICBfSU9faXN0cmVhbV93 aXRoYXNzaWduJiBvcGVyYXRvcj0oaXN0cmVhbSYpOwogIF9JT19pc3RyZWFtX3dpdGhhc3NpZ24m IG9wZXJhdG9yPShfSU9faXN0cmVhbV93aXRoYXNzaWduJiByaHMpCiAgICB7IHJldHVybiBvcGVy YXRvcj0gKHN0YXRpY19jYXN0PGlzdHJlYW0mPiAocmhzKSk7IH0KfTsKY2xhc3MgX0lPX29zdHJl YW1fd2l0aGFzc2lnbiA6IHB1YmxpYyBvc3RyZWFtIHsKcHVibGljOgogIF9JT19vc3RyZWFtX3dp dGhhc3NpZ24mIG9wZXJhdG9yPShvc3RyZWFtJik7CiAgX0lPX29zdHJlYW1fd2l0aGFzc2lnbiYg b3BlcmF0b3I9KF9JT19vc3RyZWFtX3dpdGhhc3NpZ24mIHJocykKICAgIHsgcmV0dXJuIG9wZXJh dG9yPSAoc3RhdGljX2Nhc3Q8b3N0cmVhbSY+IChyaHMpKTsgfQp9OwpleHRlcm4gX0lPX2lzdHJl YW1fd2l0aGFzc2lnbiBjaW47CmV4dGVybiBfSU9fb3N0cmVhbV93aXRoYXNzaWduIGNvdXQsIGNl cnI7CmV4dGVybiBfSU9fb3N0cmVhbV93aXRoYXNzaWduIGNsb2cKOwpleHRlcm4gaXN0cmVhbSYg bG9jayhpc3RyZWFtJiBpbnMpOwpleHRlcm4gaXN0cmVhbSYgdW5sb2NrKGlzdHJlYW0mIGlucyk7 CmV4dGVybiBvc3RyZWFtJiBsb2NrKG9zdHJlYW0mIG91dHMpOwpleHRlcm4gb3N0cmVhbSYgdW5s b2NrKG9zdHJlYW0mIG91dHMpOwpzdHJ1Y3QgSW9zdHJlYW1faW5pdCB7IH0gOyAgIAppbmxpbmUg aW9zJiBkZWMoaW9zJiBpKQp7IGkuc2V0Zihpb3M6OmRlYywgaW9zOjpkZWN8aW9zOjpoZXh8aW9z OjpvY3QpOyByZXR1cm4gaTsgfQppbmxpbmUgaW9zJiBoZXgoaW9zJiBpKQp7IGkuc2V0Zihpb3M6 OmhleCwgaW9zOjpkZWN8aW9zOjpoZXh8aW9zOjpvY3QpOyByZXR1cm4gaTsgfQppbmxpbmUgaW9z JiBvY3QoaW9zJiBpKQp7IGkuc2V0Zihpb3M6Om9jdCwgaW9zOjpkZWN8aW9zOjpoZXh8aW9zOjpv Y3QpOyByZXR1cm4gaTsgfQp9ICAKIyA0NSAiL2FvbG5ldC9wa2cvZ2NjLTIuOTUuMy9saWIvZ2Nj LWxpYi9wb3dlcnBjLWlibS1haXgzLjIuNS8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKyst My9zdGxfYWxsb2MuaCIgMiAzCiMgMSAiL2FvbG5ldC9wa2cvZ2NjLTIuOTUuMy9saWIvZ2NjLWxp Yi9wb3dlcnBjLWlibS1haXgzLjIuNS8yLjk1LjMvaW5jbHVkZS9zdGRkZWYuaCIgMSAzIDQKIyAz NDIgIi9hb2xuZXQvcGtnL2djYy0yLjk1LjMvbGliL2djYy1saWIvcG93ZXJwYy1pYm0tYWl4My4y LjUvMi45NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDMgNAojIDUzICIvYW9sbmV0L3BrZy9nY2MtMi45 NS4zL2xpYi9nY2MtbGliL3Bvd2VycGMtaWJtLWFpeDMuMi41LzIuOTUuMy8uLi8uLi8uLi8uLi9p bmNsdWRlL2crKy0zL3N0bF9hbGxvYy5oIiAyIDMKIyAxICIvYW9sbmV0L3BrZy9nY2MtMi45NS4z L2xpYi9nY2MtbGliL3Bvd2VycGMtaWJtLWFpeDMuMi41LzIuOTUuMy9pbmNsdWRlL3N0ZGxpYi5o IiAxIDMgNAojIDI1ICIvYW9sbmV0L3BrZy9nY2MtMi45NS4zL2xpYi9nY2MtbGliL3Bvd2VycGMt aWJtLWFpeDMuMi41LzIuOTUuMy9pbmNsdWRlL3N0ZGxpYi5oIiAzIDQKICAgICAKIyA2MCAiL2Fv bG5ldC9wa2cvZ2NjLTIuOTUuMy9saWIvZ2NjLWxpYi9wb3dlcnBjLWlibS1haXgzLjIuNS8yLjk1 LjMvaW5jbHVkZS9zdGRsaWIuaCIgMyA0CiMgNzAgIi9hb2xuZXQvcGtnL2djYy0yLjk1LjMvbGli L2djYy1saWIvcG93ZXJwYy1pYm0tYWl4My4yLjUvMi45NS4zL2luY2x1ZGUvc3RkbGliLmgiIDMg NAogICAgIAogICAgdHlwZWRlZiBzdHJ1Y3QgZGl2X3QgIHsJIAoJaW50IHF1b3Q7CQkgCglpbnQg cmVtOwkJICAKICAgIH0gZGl2X3Q7CiAgICAgCiAgICB0eXBlZGVmIHN0cnVjdCBsZGl2X3QgIHsJ IAoJbG9uZyBpbnQgcXVvdDsJCSAKCWxvbmcgaW50IHJlbTsJCSAgCiAgICB9IGxkaXZfdDsKICAg ICAKICAgICAKICAgIGV4dGVybiBpbnQJIAltYmxlbihjb25zdCBjaGFyICosIHNpemVfdCk7CiAg ICBleHRlcm4gc2l6ZV90IAltYnN0b3djcyh3Y2hhcl90ICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90 KTsKICAgIGV4dGVybiBpbnQJCW1idG93Yyh3Y2hhcl90ICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90 KTsKICAgIGV4dGVybiBzaXplX3QJd2NzdG9tYnMoY2hhciAqLCBjb25zdCB3Y2hhcl90ICosIHNp emVfdCk7CiAgICBleHRlcm4gaW50CQl3Y3RvbWIoY2hhciAqLCBjb25zdCB3Y2hhcl90KTsKICAg ICAKIyAxNjggIi9hb2xuZXQvcGtnL2djYy0yLjk1LjMvbGliL2djYy1saWIvcG93ZXJwYy1pYm0t YWl4My4yLjUvMi45NS4zL2luY2x1ZGUvc3RkbGliLmgiIDMgNAoJIAoJZXh0ZXJuIGRvdWJsZSAJ YXRvZihjb25zdCBjaGFyICopOwoJZXh0ZXJuIGludCAJYXRvaShjb25zdCBjaGFyICopOwoJZXh0 ZXJuIGxvbmcgaW50IGF0b2woY29uc3QgY2hhciAqKTsKCWV4dGVybiBkb3VibGUgCXN0cnRvZChj b25zdCBjaGFyICosIGNoYXIgKiAqKTsKCWV4dGVybiBsb25nIGludCBzdHJ0b2woY29uc3QgY2hh ciAqLCBjaGFyICogKiwgaW50KTsKCWV4dGVybiB1bnNpZ25lZCBsb25nIGludCBzdHJ0b3VsKGNv bnN0IGNoYXIgKiwgY2hhciAqICosIGludCk7CglleHRlcm4gaW50IAlyYW5kKHZvaWQpOwoJZXh0 ZXJuIHZvaWQJc3JhbmQodW5zaWduZWQgaW50KTsKCWV4dGVybiB2b2lkIAkqY2FsbG9jKHNpemVf dCwgc2l6ZV90KTsKCWV4dGVybiB2b2lkCWZyZWUodm9pZCAqKTsKCWV4dGVybiB2b2lkCSptYWxs b2Moc2l6ZV90KTsKCWV4dGVybiB2b2lkIAkqcmVhbGxvYyh2b2lkICosIHNpemVfdCk7CglleHRl cm4gdm9pZAlhYm9ydCh2b2lkKTsKCWV4dGVybiBpbnQJYXRleGl0KHZvaWQgKCopKHZvaWQpKTsK CWV4dGVybiB2b2lkCWV4aXQoaW50KTsKCWV4dGVybiBjaGFyCSpnZXRlbnYoY29uc3QgY2hhciAq KTsKCWV4dGVybiBpbnQgCXN5c3RlbShjb25zdCBjaGFyICopOwoJZXh0ZXJuIHZvaWQgCSpic2Vh cmNoKGNvbnN0IHZvaWQgKiwgY29uc3Qgdm9pZCAqLCBzaXplX3QsIHNpemVfdCwgaW50KCopKGNv bnN0IHZvaWQgKixjb25zdCB2b2lkICopKTsKCWV4dGVybiB2b2lkIAlxc29ydCh2b2lkICosIHNp emVfdCwgc2l6ZV90LCBpbnQoKikoY29uc3Qgdm9pZCAqLGNvbnN0IHZvaWQgKikpOwoJIAoJCgll eHRlcm4gaW50IAlhYnMoaW50KTsKCWV4dGVybiBzdHJ1Y3QgZGl2X3QJZGl2KGludCwgaW50KTsK CWV4dGVybiBsb25nIGludAlsYWJzKGxvbmcgaW50KTsKCWV4dGVybiBzdHJ1Y3QgbGRpdl90IAls ZGl2KGxvbmcgaW50LCBsb25nIGludCk7CiMgMjI3ICIvYW9sbmV0L3BrZy9nY2MtMi45NS4zL2xp Yi9nY2MtbGliL3Bvd2VycGMtaWJtLWFpeDMuMi41LzIuOTUuMy9pbmNsdWRlL3N0ZGxpYi5oIiAz IDQKIyAyNTMgIi9hb2xuZXQvcGtnL2djYy0yLjk1LjMvbGliL2djYy1saWIvcG93ZXJwYy1pYm0t YWl4My4yLjUvMi45NS4zL2luY2x1ZGUvc3RkbGliLmgiIDMgNAoJZXh0ZXJuIGRvdWJsZSAJCWRy YW5kNDgodm9pZCk7CglleHRlcm4gZG91YmxlIAkJZXJhbmQ0OCh1bnNpZ25lZCBzaG9ydFtdKTsK CWV4dGVybiBsb25nIAkJanJhbmQ0OCh1bnNpZ25lZCBzaG9ydFtdKTsKCWV4dGVybiBsb25nIAkJ bXJhbmQ0OCh2b2lkKTsKCWV4dGVybiBsb25nIAkJbnJhbmQ0OCh1bnNpZ25lZCBzaG9ydFtdKTsK CWV4dGVybiB1bnNpZ25lZCBzaG9ydCAJKnNlZWQ0OCh1bnNpZ25lZCBzaG9ydFtdKTsKCWV4dGVy biB2b2lkIAkJc3JhbmQ0OChsb25nKTsKCWV4dGVybiBpbnQgCQlwdXRlbnYoIGNoYXIgKik7CiMg Mjc5ICIvYW9sbmV0L3BrZy9nY2MtMi45NS4zL2xpYi9nY2MtbGliL3Bvd2VycGMtaWJtLWFpeDMu Mi41LzIuOTUuMy9pbmNsdWRlL3N0ZGxpYi5oIiAzIDQKIyAzMzMgIi9hb2xuZXQvcGtnL2djYy0y Ljk1LjMvbGliL2djYy1saWIvcG93ZXJwYy1pYm0tYWl4My4yLjUvMi45NS4zL2luY2x1ZGUvc3Rk bGliLmgiIDMgNAogICAgIGV4dGVybiBjaGFyICpvcHRhcmc7CiAgICAgZXh0ZXJuIGludCBvcHRp bmQ7CiAgICAgZXh0ZXJuIGludCBvcHRlcnI7CiAgICAgZmxvYXQgICAgYXRvZmYoKTsKICAgICBj aGFyICAgICAqZWN2dCAgIChkb3VibGUsIGludCwgaW50ICosIGludCAqKSAgICA7CiAgICAgY2hh ciAgICAgKmZjdnQgICAoZG91YmxlLCBpbnQsIGludCAqLCBpbnQgKikgICAgOwogICAgIGNoYXIg ICAgICpnY3Z0ICAgKGRvdWJsZSwgaW50LCBjaGFyICopICAgIDsKICAgICBmbG9hdCAgICBzdHJ0 b2YoKTsKICAgICB2b2lkICAgICBpbXVsX2RibCgpOwogICAgIHZvaWQgICAgIHVtdWxfZGJsKCk7 CiAgICAgCiMgMzc0ICIvYW9sbmV0L3BrZy9nY2MtMi45NS4zL2xpYi9nY2MtbGliL3Bvd2VycGMt aWJtLWFpeDMuMi41LzIuOTUuMy9pbmNsdWRlL3N0ZGxpYi5oIiAzIDQKICAgIGV4dGVybiBkb3Vi bGUJIHdjc3RvZChjb25zdCB3Y2hhcl90ICosIHdjaGFyX3QgKiopOwogICAgZXh0ZXJuIGxvbmcg aW50CSB3Y3N0b2woY29uc3Qgd2NoYXJfdCAqLCB3Y2hhcl90ICoqLCBpbnQpOwogICAgZXh0ZXJu IHVuc2lnbmVkIGxvbmcgaW50IHdjc3RvdWwoY29uc3Qgd2NoYXJfdCAqLCB3Y2hhcl90ICoqLCBp bnQpOwogICAgZXh0ZXJuIGludAkJcnBtYXRjaChjb25zdCBjaGFyICopOwogICAgZXh0ZXJuIGlu dAkJY2xlYXJlbnYodm9pZCk7CiAgICBleHRlcm4gaW50CQlnZXRvcHQoaW50LCBjaGFyICpjb25z dFtdLCBjb25zdCBjaGFyICopOwogICAgZXh0ZXJuIGNoYXIJCSpnZXRwYXNzKGNvbnN0IGNoYXIg Kik7CiMgNTQgIi9hb2xuZXQvcGtnL2djYy0yLjk1LjMvbGliL2djYy1saWIvcG93ZXJwYy1pYm0t YWl4My4yLjUvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX2FsbG9jLmgiIDIg MwojIDEgIi9hb2xuZXQvcGtnL2djYy0yLjk1LjMvbGliL2djYy1saWIvcG93ZXJwYy1pYm0tYWl4 My4yLjUvMi45NS4zL2luY2x1ZGUvc3RyaW5nLmgiIDEgMyA0CiMgMTkgIi9hb2xuZXQvcGtnL2dj Yy0yLjk1LjMvbGliL2djYy1saWIvcG93ZXJwYy1pYm0tYWl4My4yLjUvMi45NS4zL2luY2x1ZGUv c3RyaW5nLmgiIDMgNAojIDI0MyAiL2FvbG5ldC9wa2cvZ2NjLTIuOTUuMy9saWIvZ2NjLWxpYi9w b3dlcnBjLWlibS1haXgzLjIuNS8yLjk1LjMvaW5jbHVkZS9zdHJpbmcuaCIgMyA0CiMgNTUgIi9h b2xuZXQvcGtnL2djYy0yLjk1LjMvbGliL2djYy1saWIvcG93ZXJwYy1pYm0tYWl4My4yLjUvMi45 NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX2FsbG9jLmgiIDIgMwojIDEgIi9hb2xu ZXQvcGtnL2djYy0yLjk1LjMvbGliL2djYy1saWIvcG93ZXJwYy1pYm0tYWl4My4yLjUvMi45NS4z Ly4uLy4uLy4uLy4uL3Bvd2VycGMtaWJtLWFpeDMuMi41L2luY2x1ZGUvYXNzZXJ0LmgiIDEgMyA0 CiMgMTkgIi9hb2xuZXQvcGtnL2djYy0yLjk1LjMvbGliL2djYy1saWIvcG93ZXJwYy1pYm0tYWl4 My4yLjUvMi45NS4zLy4uLy4uLy4uLy4uL3Bvd2VycGMtaWJtLWFpeDMuMi41L2luY2x1ZGUvYXNz ZXJ0LmgiIDMgNApleHRlcm4gIkMiIHsKZXh0ZXJuIHZvaWQgX19lcHJpbnRmIChjb25zdCBjaGFy ICosIGNvbnN0IGNoYXIgKiwgdW5zaWduZWQsIGNvbnN0IGNoYXIgKikKICAgIF9fYXR0cmlidXRl X18gKChub3JldHVybikpOwp9CiMgNTIgIi9hb2xuZXQvcGtnL2djYy0yLjk1LjMvbGliL2djYy1s aWIvcG93ZXJwYy1pYm0tYWl4My4yLjUvMi45NS4zLy4uLy4uLy4uLy4uL3Bvd2VycGMtaWJtLWFp eDMuMi41L2luY2x1ZGUvYXNzZXJ0LmgiIDMgNAojIDU2ICIvYW9sbmV0L3BrZy9nY2MtMi45NS4z L2xpYi9nY2MtbGliL3Bvd2VycGMtaWJtLWFpeDMuMi41LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNs dWRlL2crKy0zL3N0bF9hbGxvYy5oIiAyIDMKIyA3OCAiL2FvbG5ldC9wa2cvZ2NjLTIuOTUuMy9s aWIvZ2NjLWxpYi9wb3dlcnBjLWlibS1haXgzLjIuNS8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVk ZS9nKystMy9zdGxfYWxsb2MuaCIgMwojIDg3ICIvYW9sbmV0L3BrZy9nY2MtMi45NS4zL2xpYi9n Y2MtbGliL3Bvd2VycGMtaWJtLWFpeDMuMi41LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2cr Ky0zL3N0bF9hbGxvYy5oIiAzCiMgOTcgIi9hb2xuZXQvcGtnL2djYy0yLjk1LjMvbGliL2djYy1s aWIvcG93ZXJwYy1pYm0tYWl4My4yLjUvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMv c3RsX2FsbG9jLmgiIDMKIyAxMTUgIi9hb2xuZXQvcGtnL2djYy0yLjk1LjMvbGliL2djYy1saWIv cG93ZXJwYy1pYm0tYWl4My4yLjUvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3Rs X2FsbG9jLmgiIDMKdGVtcGxhdGUgPGludCBfX2luc3Q+CmNsYXNzIF9fbWFsbG9jX2FsbG9jX3Rl bXBsYXRlIHsKcHJpdmF0ZToKICBzdGF0aWMgdm9pZCogX1Nfb29tX21hbGxvYyhzaXplX3QpOwog IHN0YXRpYyB2b2lkKiBfU19vb21fcmVhbGxvYyh2b2lkKiwgc2l6ZV90KTsKICBzdGF0aWMgdm9p ZCAoKiBfX21hbGxvY19hbGxvY19vb21faGFuZGxlcikoKTsKcHVibGljOgogIHN0YXRpYyB2b2lk KiBhbGxvY2F0ZShzaXplX3QgX19uKQogIHsKICAgIHZvaWQqIF9fcmVzdWx0ID0gbWFsbG9jKF9f bik7CiAgICBpZiAoMCA9PSBfX3Jlc3VsdCkgX19yZXN1bHQgPSBfU19vb21fbWFsbG9jKF9fbik7 CiAgICByZXR1cm4gX19yZXN1bHQ7CiAgfQogIHN0YXRpYyB2b2lkIGRlYWxsb2NhdGUodm9pZCog X19wLCBzaXplX3QgICkKICB7CiAgICBmcmVlKF9fcCk7CiAgfQogIHN0YXRpYyB2b2lkKiByZWFs bG9jYXRlKHZvaWQqIF9fcCwgc2l6ZV90ICAsIHNpemVfdCBfX25ld19zeikKICB7CiAgICB2b2lk KiBfX3Jlc3VsdCA9IHJlYWxsb2MoX19wLCBfX25ld19zeik7CiAgICBpZiAoMCA9PSBfX3Jlc3Vs dCkgX19yZXN1bHQgPSBfU19vb21fcmVhbGxvYyhfX3AsIF9fbmV3X3N6KTsKICAgIHJldHVybiBf X3Jlc3VsdDsKICB9CiAgc3RhdGljIHZvaWQgKCogX19zZXRfbWFsbG9jX2hhbmRsZXIodm9pZCAo Kl9fZikoKSkpKCkKICB7CiAgICB2b2lkICgqIF9fb2xkKSgpID0gX19tYWxsb2NfYWxsb2Nfb29t X2hhbmRsZXI7CiAgICBfX21hbGxvY19hbGxvY19vb21faGFuZGxlciA9IF9fZjsKICAgIHJldHVy bihfX29sZCk7CiAgfQp9Owp0ZW1wbGF0ZSA8aW50IF9faW5zdD4Kdm9pZCAoKiBfX21hbGxvY19h bGxvY190ZW1wbGF0ZTxfX2luc3Q+OjpfX21hbGxvY19hbGxvY19vb21faGFuZGxlcikoKSA9IDA7 CnRlbXBsYXRlIDxpbnQgX19pbnN0Pgp2b2lkKgpfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2lu c3Q+OjpfU19vb21fbWFsbG9jKHNpemVfdCBfX24pCnsKICAgIHZvaWQgKCogX19teV9tYWxsb2Nf aGFuZGxlcikoKTsKICAgIHZvaWQqIF9fcmVzdWx0OwogICAgZm9yICg7OykgewogICAgICAgIF9f bXlfbWFsbG9jX2hhbmRsZXIgPSBfX21hbGxvY19hbGxvY19vb21faGFuZGxlcjsKICAgICAgICBp ZiAoMCA9PSBfX215X21hbGxvY19oYW5kbGVyKSB7IGNlcnIgPDwgIm91dCBvZiBtZW1vcnkiIDw8 IGVuZGw7IGV4aXQoMSkgOyB9CiAgICAgICAgKCpfX215X21hbGxvY19oYW5kbGVyKSgpOwogICAg ICAgIF9fcmVzdWx0ID0gbWFsbG9jKF9fbik7CiAgICAgICAgaWYgKF9fcmVzdWx0KSByZXR1cm4o X19yZXN1bHQpOwogICAgfQp9CnRlbXBsYXRlIDxpbnQgX19pbnN0Pgp2b2lkKiBfX21hbGxvY19h bGxvY190ZW1wbGF0ZTxfX2luc3Q+OjpfU19vb21fcmVhbGxvYyh2b2lkKiBfX3AsIHNpemVfdCBf X24pCnsKICAgIHZvaWQgKCogX19teV9tYWxsb2NfaGFuZGxlcikoKTsKICAgIHZvaWQqIF9fcmVz dWx0OwogICAgZm9yICg7OykgewogICAgICAgIF9fbXlfbWFsbG9jX2hhbmRsZXIgPSBfX21hbGxv Y19hbGxvY19vb21faGFuZGxlcjsKICAgICAgICBpZiAoMCA9PSBfX215X21hbGxvY19oYW5kbGVy KSB7IGNlcnIgPDwgIm91dCBvZiBtZW1vcnkiIDw8IGVuZGw7IGV4aXQoMSkgOyB9CiAgICAgICAg KCpfX215X21hbGxvY19oYW5kbGVyKSgpOwogICAgICAgIF9fcmVzdWx0ID0gcmVhbGxvYyhfX3As IF9fbik7CiAgICAgICAgaWYgKF9fcmVzdWx0KSByZXR1cm4oX19yZXN1bHQpOwogICAgfQp9CnR5 cGVkZWYgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8MD4gbWFsbG9jX2FsbG9jOwp0ZW1wbGF0ZTxj bGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4KY2xhc3Mgc2ltcGxlX2FsbG9jIHsKcHVibGljOgogICAg c3RhdGljIF9UcCogYWxsb2NhdGUoc2l6ZV90IF9fbikKICAgICAgeyByZXR1cm4gMCA9PSBfX24g PyAwIDogKF9UcCopIF9BbGxvYzo6YWxsb2NhdGUoX19uICogc2l6ZW9mIChfVHApKTsgfQogICAg c3RhdGljIF9UcCogYWxsb2NhdGUodm9pZCkKICAgICAgeyByZXR1cm4gKF9UcCopIF9BbGxvYzo6 YWxsb2NhdGUoc2l6ZW9mIChfVHApKTsgfQogICAgc3RhdGljIHZvaWQgZGVhbGxvY2F0ZShfVHAq IF9fcCwgc2l6ZV90IF9fbikKICAgICAgeyBpZiAoMCAhPSBfX24pIF9BbGxvYzo6ZGVhbGxvY2F0 ZShfX3AsIF9fbiAqIHNpemVvZiAoX1RwKSk7IH0KICAgIHN0YXRpYyB2b2lkIGRlYWxsb2NhdGUo X1RwKiBfX3ApCiAgICAgIHsgX0FsbG9jOjpkZWFsbG9jYXRlKF9fcCwgc2l6ZW9mIChfVHApKTsg fQp9Owp0ZW1wbGF0ZSA8Y2xhc3MgX0FsbG9jPgpjbGFzcyBkZWJ1Z19hbGxvYyB7CnByaXZhdGU6 CiAgZW51bSB7X1NfZXh0cmEgPSA4fTsgICAKICAgICAgICAgICAgICAgICAgICAgICAgIAogICAg ICAgICAgICAgICAgICAgICAgICAgCnB1YmxpYzoKICBzdGF0aWMgdm9pZCogYWxsb2NhdGUoc2l6 ZV90IF9fbikKICB7CiAgICBjaGFyKiBfX3Jlc3VsdCA9IChjaGFyKilfQWxsb2M6OmFsbG9jYXRl KF9fbiArIF9TX2V4dHJhKTsKICAgICooc2l6ZV90KilfX3Jlc3VsdCA9IF9fbjsKICAgIHJldHVy biBfX3Jlc3VsdCArIF9TX2V4dHJhOwogIH0KICBzdGF0aWMgdm9pZCBkZWFsbG9jYXRlKHZvaWQq IF9fcCwgc2l6ZV90IF9fbikKICB7CiAgICBjaGFyKiBfX3JlYWxfcCA9IChjaGFyKilfX3AgLSBf U19leHRyYTsKICAgICgodm9pZCkgKCggKihzaXplX3QqKV9fcmVhbF9wID09IF9fbiApID8gMCA6 IChfX2VwcmludGYgKCIlczoldTogZmFpbGVkIGFzc2VydGlvbiBgJXMnXG4iLAkgICIvYW9sbmV0 L3BrZy9nY2MtMi45NS4zL2xpYi9nY2MtbGliL3Bvd2VycGMtaWJtLWFpeDMuMi41LzIuOTUuMy8u Li8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9hbGxvYy5oIiAsICAgMjYzICwgICIqKHNpemVf dCopX19yZWFsX3AgPT0gX19uIiApLCAwKSApKSA7CiAgICBfQWxsb2M6OmRlYWxsb2NhdGUoX19y ZWFsX3AsIF9fbiArIF9TX2V4dHJhKTsKICB9CiAgc3RhdGljIHZvaWQqIHJlYWxsb2NhdGUodm9p ZCogX19wLCBzaXplX3QgX19vbGRfc3osIHNpemVfdCBfX25ld19zeikKICB7CiAgICBjaGFyKiBf X3JlYWxfcCA9IChjaGFyKilfX3AgLSBfU19leHRyYTsKICAgICgodm9pZCkgKCggKihzaXplX3Qq KV9fcmVhbF9wID09IF9fb2xkX3N6ICkgPyAwIDogKF9fZXByaW50ZiAoIiVzOiV1OiBmYWlsZWQg YXNzZXJ0aW9uIGAlcydcbiIsCSAgIi9hb2xuZXQvcGtnL2djYy0yLjk1LjMvbGliL2djYy1saWIv cG93ZXJwYy1pYm0tYWl4My4yLjUvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3Rs X2FsbG9jLmgiICwgICAyNzAgLCAgIiooc2l6ZV90KilfX3JlYWxfcCA9PSBfX29sZF9zeiIgKSwg MCkgKSkgOwogICAgY2hhciogX19yZXN1bHQgPSAoY2hhciopCiAgICAgIF9BbGxvYzo6cmVhbGxv Y2F0ZShfX3JlYWxfcCwgX19vbGRfc3ogKyBfU19leHRyYSwgX19uZXdfc3ogKyBfU19leHRyYSk7 CiAgICAqKHNpemVfdCopX19yZXN1bHQgPSBfX25ld19zejsKICAgIHJldHVybiBfX3Jlc3VsdCAr IF9TX2V4dHJhOwogIH0KfTsKdGVtcGxhdGUgPGJvb2wgdGhyZWFkcywgaW50IGluc3Q+CmNsYXNz IF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZSB7CnByaXZhdGU6CiAgIAogICAKICAgIGVudW0ge19B TElHTiA9IDh9OwogICAgZW51bSB7X01BWF9CWVRFUyA9IDEyOH07CiAgICBlbnVtIHtfTkZSRUVM SVNUUyA9IF9NQVhfQllURVMvX0FMSUdOfTsKICBzdGF0aWMgc2l6ZV90CiAgX1Nfcm91bmRfdXAo c2l6ZV90IF9fYnl0ZXMpCiAgICB7IHJldHVybiAoKChfX2J5dGVzKSArIF9BTElHTi0xKSAmIH4o X0FMSUdOIC0gMSkpOyB9CnByaXZhdGUgOgogIHVuaW9uIF9PYmogewogICAgICAgIHVuaW9uIF9P YmoqIF9NX2ZyZWVfbGlzdF9saW5rOwogICAgICAgIGNoYXIgX01fY2xpZW50X2RhdGFbMV07ICAg ICAKICB9Owpwcml2YXRlOgogICAgc3RhdGljIF9PYmoqICAgX1NfZnJlZV9saXN0W19ORlJFRUxJ U1RTXTsKICBzdGF0aWMgIHNpemVfdCBfU19mcmVlbGlzdF9pbmRleChzaXplX3QgX19ieXRlcykg ewogICAgICAgIHJldHVybiAoKChfX2J5dGVzKSArIF9BTElHTi0xKS9fQUxJR04gLSAxKTsKICB9 CiAgIAogIHN0YXRpYyB2b2lkKiBfU19yZWZpbGwoc2l6ZV90IF9fbik7CiAgIAogICAKICBzdGF0 aWMgY2hhciogX1NfY2h1bmtfYWxsb2Moc2l6ZV90IF9fc2l6ZSwgaW50JiBfX25vYmpzKTsKICAg CiAgc3RhdGljIGNoYXIqIF9TX3N0YXJ0X2ZyZWU7CiAgc3RhdGljIGNoYXIqIF9TX2VuZF9mcmVl OwogIHN0YXRpYyBzaXplX3QgX1NfaGVhcF9zaXplOwojIDM4OSAiL2FvbG5ldC9wa2cvZ2NjLTIu OTUuMy9saWIvZ2NjLWxpYi9wb3dlcnBjLWlibS1haXgzLjIuNS8yLjk1LjMvLi4vLi4vLi4vLi4v aW5jbHVkZS9nKystMy9zdGxfYWxsb2MuaCIgMwogICAgY2xhc3MgX0xvY2sgewogICAgICAgIHB1 YmxpYzoKICAgICAgICAgICAgX0xvY2soKSB7ICA7IH0KICAgICAgICAgICAgfl9Mb2NrKCkgeyAg OyB9CiAgICB9OwogICAgZnJpZW5kIGNsYXNzIF9Mb2NrOwpwdWJsaWM6CiAgIAogIHN0YXRpYyB2 b2lkKiBhbGxvY2F0ZShzaXplX3QgX19uKQogIHsKICAgIF9PYmoqICAqIF9fbXlfZnJlZV9saXN0 OwogICAgX09iaiogICBfX3Jlc3VsdDsKICAgIGlmIChfX24gPiAoc2l6ZV90KSBfTUFYX0JZVEVT KSB7CiAgICAgICAgcmV0dXJuKG1hbGxvY19hbGxvYzo6YWxsb2NhdGUoX19uKSk7CiAgICB9CiAg ICBfX215X2ZyZWVfbGlzdCA9IF9TX2ZyZWVfbGlzdCArIF9TX2ZyZWVsaXN0X2luZGV4KF9fbik7 CiAgICAgCiAgICAgCiAgICAgCiAgICBfX3Jlc3VsdCA9ICpfX215X2ZyZWVfbGlzdDsKICAgIGlm IChfX3Jlc3VsdCA9PSAwKSB7CiAgICAgICAgdm9pZCogX19yID0gX1NfcmVmaWxsKF9TX3JvdW5k X3VwKF9fbikpOwogICAgICAgIHJldHVybiBfX3I7CiAgICB9CiAgICAqX19teV9mcmVlX2xpc3Qg PSBfX3Jlc3VsdCAtPiBfTV9mcmVlX2xpc3RfbGluazsKICAgIHJldHVybiAoX19yZXN1bHQpOwog IH07CiAgIAogIHN0YXRpYyB2b2lkIGRlYWxsb2NhdGUodm9pZCogX19wLCBzaXplX3QgX19uKQog IHsKICAgIF9PYmoqIF9fcSA9IChfT2JqKilfX3A7CiAgICBfT2JqKiAgKiBfX215X2ZyZWVfbGlz dDsKICAgIGlmIChfX24gPiAoc2l6ZV90KSBfTUFYX0JZVEVTKSB7CiAgICAgICAgbWFsbG9jX2Fs bG9jOjpkZWFsbG9jYXRlKF9fcCwgX19uKTsKICAgICAgICByZXR1cm47CiAgICB9CiAgICBfX215 X2ZyZWVfbGlzdCA9IF9TX2ZyZWVfbGlzdCArIF9TX2ZyZWVsaXN0X2luZGV4KF9fbik7CiAgICAg CiAgICBfX3EgLT4gX01fZnJlZV9saXN0X2xpbmsgPSAqX19teV9mcmVlX2xpc3Q7CiAgICAqX19t eV9mcmVlX2xpc3QgPSBfX3E7CiAgICAgCiAgfQogIHN0YXRpYyB2b2lkKiByZWFsbG9jYXRlKHZv aWQqIF9fcCwgc2l6ZV90IF9fb2xkX3N6LCBzaXplX3QgX19uZXdfc3opOwp9IDsKdHlwZWRlZiBf X2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8IGZhbHNlICwgMD4gYWxsb2M7CnR5cGVkZWYgX19kZWZh dWx0X2FsbG9jX3RlbXBsYXRlPGZhbHNlLCAwPiBzaW5nbGVfY2xpZW50X2FsbG9jOwp0ZW1wbGF0 ZSA8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+CmNoYXIqCl9fZGVmYXVsdF9hbGxvY190ZW1w bGF0ZTxfX3RocmVhZHMsIF9faW5zdD46Ol9TX2NodW5rX2FsbG9jKHNpemVfdCBfX3NpemUsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGludCYgX19ub2JqcykKewogICAgY2hhciogX19yZXN1bHQ7CiAgICBzaXplX3QgX190b3RhbF9i eXRlcyA9IF9fc2l6ZSAqIF9fbm9ianM7CiAgICBzaXplX3QgX19ieXRlc19sZWZ0ID0gX1NfZW5k X2ZyZWUgLSBfU19zdGFydF9mcmVlOwogICAgaWYgKF9fYnl0ZXNfbGVmdCA+PSBfX3RvdGFsX2J5 dGVzKSB7CiAgICAgICAgX19yZXN1bHQgPSBfU19zdGFydF9mcmVlOwogICAgICAgIF9TX3N0YXJ0 X2ZyZWUgKz0gX190b3RhbF9ieXRlczsKICAgICAgICByZXR1cm4oX19yZXN1bHQpOwogICAgfSBl bHNlIGlmIChfX2J5dGVzX2xlZnQgPj0gX19zaXplKSB7CiAgICAgICAgX19ub2JqcyA9IChpbnQp KF9fYnl0ZXNfbGVmdC9fX3NpemUpOwogICAgICAgIF9fdG90YWxfYnl0ZXMgPSBfX3NpemUgKiBf X25vYmpzOwogICAgICAgIF9fcmVzdWx0ID0gX1Nfc3RhcnRfZnJlZTsKICAgICAgICBfU19zdGFy dF9mcmVlICs9IF9fdG90YWxfYnl0ZXM7CiAgICAgICAgcmV0dXJuKF9fcmVzdWx0KTsKICAgIH0g ZWxzZSB7CiAgICAgICAgc2l6ZV90IF9fYnl0ZXNfdG9fZ2V0ID0KCSAgMiAqIF9fdG90YWxfYnl0 ZXMgKyBfU19yb3VuZF91cChfU19oZWFwX3NpemUgPj4gNCk7CiAgICAgICAgIAogICAgICAgIGlm IChfX2J5dGVzX2xlZnQgPiAwKSB7CiAgICAgICAgICAgIF9PYmoqICAqIF9fbXlfZnJlZV9saXN0 ID0KICAgICAgICAgICAgICAgICAgICAgICAgX1NfZnJlZV9saXN0ICsgX1NfZnJlZWxpc3RfaW5k ZXgoX19ieXRlc19sZWZ0KTsKICAgICAgICAgICAgKChfT2JqKilfU19zdGFydF9mcmVlKSAtPiBf TV9mcmVlX2xpc3RfbGluayA9ICpfX215X2ZyZWVfbGlzdDsKICAgICAgICAgICAgKl9fbXlfZnJl ZV9saXN0ID0gKF9PYmoqKV9TX3N0YXJ0X2ZyZWU7CiAgICAgICAgfQogICAgICAgIF9TX3N0YXJ0 X2ZyZWUgPSAoY2hhciopbWFsbG9jKF9fYnl0ZXNfdG9fZ2V0KTsKICAgICAgICBpZiAoMCA9PSBf U19zdGFydF9mcmVlKSB7CiAgICAgICAgICAgIHNpemVfdCBfX2k7CiAgICAgICAgICAgIF9PYmoq ICAqIF9fbXlfZnJlZV9saXN0OwoJICAgIF9PYmoqIF9fcDsKICAgICAgICAgICAgIAogICAgICAg ICAgICAgCiAgICAgICAgICAgICAKICAgICAgICAgICAgZm9yIChfX2kgPSBfX3NpemU7IF9faSA8 PSBfTUFYX0JZVEVTOyBfX2kgKz0gX0FMSUdOKSB7CiAgICAgICAgICAgICAgICBfX215X2ZyZWVf bGlzdCA9IF9TX2ZyZWVfbGlzdCArIF9TX2ZyZWVsaXN0X2luZGV4KF9faSk7CiAgICAgICAgICAg ICAgICBfX3AgPSAqX19teV9mcmVlX2xpc3Q7CiAgICAgICAgICAgICAgICBpZiAoMCAhPSBfX3Ap IHsKICAgICAgICAgICAgICAgICAgICAqX19teV9mcmVlX2xpc3QgPSBfX3AgLT4gX01fZnJlZV9s aXN0X2xpbms7CiAgICAgICAgICAgICAgICAgICAgX1Nfc3RhcnRfZnJlZSA9IChjaGFyKilfX3A7 CiAgICAgICAgICAgICAgICAgICAgX1NfZW5kX2ZyZWUgPSBfU19zdGFydF9mcmVlICsgX19pOwog ICAgICAgICAgICAgICAgICAgIHJldHVybihfU19jaHVua19hbGxvYyhfX3NpemUsIF9fbm9ianMp KTsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAg ICAgICAgfQogICAgICAgICAgICB9CgkgICAgX1NfZW5kX2ZyZWUgPSAwOwkgCiAgICAgICAgICAg IF9TX3N0YXJ0X2ZyZWUgPSAoY2hhciopbWFsbG9jX2FsbG9jOjphbGxvY2F0ZShfX2J5dGVzX3Rv X2dldCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIAogICAgICAgICAgICAgCiAgICAgICAg fQogICAgICAgIF9TX2hlYXBfc2l6ZSArPSBfX2J5dGVzX3RvX2dldDsKICAgICAgICBfU19lbmRf ZnJlZSA9IF9TX3N0YXJ0X2ZyZWUgKyBfX2J5dGVzX3RvX2dldDsKICAgICAgICByZXR1cm4oX1Nf Y2h1bmtfYWxsb2MoX19zaXplLCBfX25vYmpzKSk7CiAgICB9Cn0KdGVtcGxhdGUgPGJvb2wgX190 aHJlYWRzLCBpbnQgX19pbnN0Pgp2b2lkKgpfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJl YWRzLCBfX2luc3Q+OjpfU19yZWZpbGwoc2l6ZV90IF9fbikKewogICAgaW50IF9fbm9ianMgPSAy MDsKICAgIGNoYXIqIF9fY2h1bmsgPSBfU19jaHVua19hbGxvYyhfX24sIF9fbm9ianMpOwogICAg X09iaiogICogX19teV9mcmVlX2xpc3Q7CiAgICBfT2JqKiBfX3Jlc3VsdDsKICAgIF9PYmoqIF9f Y3VycmVudF9vYmo7CiAgICBfT2JqKiBfX25leHRfb2JqOwogICAgaW50IF9faTsKICAgIGlmICgx ID09IF9fbm9ianMpIHJldHVybihfX2NodW5rKTsKICAgIF9fbXlfZnJlZV9saXN0ID0gX1NfZnJl ZV9saXN0ICsgX1NfZnJlZWxpc3RfaW5kZXgoX19uKTsKICAgICAKICAgICAgX19yZXN1bHQgPSAo X09iaiopX19jaHVuazsKICAgICAgKl9fbXlfZnJlZV9saXN0ID0gX19uZXh0X29iaiA9IChfT2Jq KikoX19jaHVuayArIF9fbik7CiAgICAgIGZvciAoX19pID0gMTsgOyBfX2krKykgewogICAgICAg IF9fY3VycmVudF9vYmogPSBfX25leHRfb2JqOwogICAgICAgIF9fbmV4dF9vYmogPSAoX09iaiop KChjaGFyKilfX25leHRfb2JqICsgX19uKTsKICAgICAgICBpZiAoX19ub2JqcyAtIDEgPT0gX19p KSB7CiAgICAgICAgICAgIF9fY3VycmVudF9vYmogLT4gX01fZnJlZV9saXN0X2xpbmsgPSAwOwog ICAgICAgICAgICBicmVhazsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBfX2N1cnJlbnRf b2JqIC0+IF9NX2ZyZWVfbGlzdF9saW5rID0gX19uZXh0X29iajsKICAgICAgICB9CiAgICAgIH0K ICAgIHJldHVybihfX3Jlc3VsdCk7Cn0KdGVtcGxhdGUgPGJvb2wgdGhyZWFkcywgaW50IGluc3Q+ CnZvaWQqCl9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTx0aHJlYWRzLCBpbnN0Pjo6cmVhbGxvY2F0 ZSh2b2lkKiBfX3AsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBzaXplX3QgX19vbGRfc3osCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19uZXdfc3opCnsKICAgIHZvaWQqIF9fcmVzdWx0 OwogICAgc2l6ZV90IF9fY29weV9zejsKICAgIGlmIChfX29sZF9zeiA+IChzaXplX3QpIF9NQVhf QllURVMgJiYgX19uZXdfc3ogPiAoc2l6ZV90KSBfTUFYX0JZVEVTKSB7CiAgICAgICAgcmV0dXJu KHJlYWxsb2MoX19wLCBfX25ld19zeikpOwogICAgfQogICAgaWYgKF9TX3JvdW5kX3VwKF9fb2xk X3N6KSA9PSBfU19yb3VuZF91cChfX25ld19zeikpIHJldHVybihfX3ApOwogICAgX19yZXN1bHQg PSBhbGxvY2F0ZShfX25ld19zeik7CiAgICBfX2NvcHlfc3ogPSBfX25ld19zeiA+IF9fb2xkX3N6 PyBfX29sZF9zeiA6IF9fbmV3X3N6OwogICAgbWVtY3B5KF9fcmVzdWx0LCBfX3AsIF9fY29weV9z eik7CiAgICBkZWFsbG9jYXRlKF9fcCwgX19vbGRfc3opOwogICAgcmV0dXJuKF9fcmVzdWx0KTsK fQojIDYwMiAiL2FvbG5ldC9wa2cvZ2NjLTIuOTUuMy9saWIvZ2NjLWxpYi9wb3dlcnBjLWlibS1h aXgzLjIuNS8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfYWxsb2MuaCIgMwoj IDY4OSAiL2FvbG5ldC9wa2cvZ2NjLTIuOTUuMy9saWIvZ2NjLWxpYi9wb3dlcnBjLWlibS1haXgz LjIuNS8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfYWxsb2MuaCIgMwp0ZW1w bGF0ZSA8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+CmNoYXIqIF9fZGVmYXVsdF9hbGxvY190 ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD46Ol9TX3N0YXJ0X2ZyZWUgPSAwOwp0ZW1wbGF0ZSA8 Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+CmNoYXIqIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0 ZTxfX3RocmVhZHMsIF9faW5zdD46Ol9TX2VuZF9mcmVlID0gMDsKdGVtcGxhdGUgPGJvb2wgX190 aHJlYWRzLCBpbnQgX19pbnN0PgpzaXplX3QgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhy ZWFkcywgX19pbnN0Pjo6X1NfaGVhcF9zaXplID0gMDsKdGVtcGxhdGUgPGJvb2wgX190aHJlYWRz LCBpbnQgX19pbnN0PgpfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+ OjpfT2JqKiAgCl9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD4gOjpf U19mcmVlX2xpc3RbCiAgICBfTkZSRUVMSVNUUwpdID0gezAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIH07CnRlbXBsYXRlIDxjbGFzcyBfVHA+CmNsYXNzIGFs bG9jYXRvciB7CiAgdHlwZWRlZiBhbGxvYyBfQWxsb2M7ICAgICAgICAgICAKcHVibGljOgogIHR5 cGVkZWYgc2l6ZV90ICAgICBzaXplX3R5cGU7CiAgdHlwZWRlZiBwdHJkaWZmX3QgIGRpZmZlcmVu Y2VfdHlwZTsKICB0eXBlZGVmIF9UcCogICAgICAgcG9pbnRlcjsKICB0eXBlZGVmIGNvbnN0IF9U cCogY29uc3RfcG9pbnRlcjsKICB0eXBlZGVmIF9UcCYgICAgICAgcmVmZXJlbmNlOwogIHR5cGVk ZWYgY29uc3QgX1RwJiBjb25zdF9yZWZlcmVuY2U7CiAgdHlwZWRlZiBfVHAgICAgICAgIHZhbHVl X3R5cGU7CiAgdGVtcGxhdGUgPGNsYXNzIF9UcDE+IHN0cnVjdCByZWJpbmQgewogICAgdHlwZWRl ZiBhbGxvY2F0b3I8X1RwMT4gb3RoZXI7CiAgfTsKICBhbGxvY2F0b3IoKSB0aHJvdygpICB7fQog IGFsbG9jYXRvcihjb25zdCBhbGxvY2F0b3ImKSB0aHJvdygpICB7fQogIHRlbXBsYXRlIDxjbGFz cyBfVHAxPiBhbGxvY2F0b3IoY29uc3QgYWxsb2NhdG9yPF9UcDE+JikgdGhyb3coKSAge30KICB+ YWxsb2NhdG9yKCkgdGhyb3coKSAge30KICBwb2ludGVyIGFkZHJlc3MocmVmZXJlbmNlIF9feCkg Y29uc3QgeyByZXR1cm4gJl9feDsgfQogIGNvbnN0X3BvaW50ZXIgYWRkcmVzcyhjb25zdF9yZWZl cmVuY2UgX194KSBjb25zdCB7IHJldHVybiAmX194OyB9CiAgIAogICAKICBfVHAqIGFsbG9jYXRl KHNpemVfdHlwZSBfX24sIGNvbnN0IHZvaWQqID0gMCkgewogICAgcmV0dXJuIF9fbiAhPSAwID8g c3RhdGljX2Nhc3Q8X1RwKj4oX0FsbG9jOjphbGxvY2F0ZShfX24gKiBzaXplb2YoX1RwKSkpCiAg ICAgICAgICAgICAgICAgICAgOiAwOwogIH0KICAgCiAgdm9pZCBkZWFsbG9jYXRlKHBvaW50ZXIg X19wLCBzaXplX3R5cGUgX19uKQogICAgeyBfQWxsb2M6OmRlYWxsb2NhdGUoX19wLCBfX24gKiBz aXplb2YoX1RwKSk7IH0KICBzaXplX3R5cGUgbWF4X3NpemUoKSBjb25zdCB0aHJvdygpIAogICAg eyByZXR1cm4gc2l6ZV90KC0xKSAvIHNpemVvZihfVHApOyB9CiAgdm9pZCBjb25zdHJ1Y3QocG9p bnRlciBfX3AsIGNvbnN0IF9UcCYgX192YWwpIHsgbmV3KF9fcCkgX1RwKF9fdmFsKTsgfQogIHZv aWQgZGVzdHJveShwb2ludGVyIF9fcCkgeyBfX3AtPn5fVHAoKTsgfQp9Owp0ZW1wbGF0ZTw+CmNs YXNzIGFsbG9jYXRvcjx2b2lkPiB7CiAgdHlwZWRlZiBzaXplX3QgICAgICBzaXplX3R5cGU7CiAg dHlwZWRlZiBwdHJkaWZmX3QgICBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiB2b2lkKiAgICAg ICBwb2ludGVyOwogIHR5cGVkZWYgY29uc3Qgdm9pZCogY29uc3RfcG9pbnRlcjsKICB0eXBlZGVm IHZvaWQgICAgICAgIHZhbHVlX3R5cGU7CiAgdGVtcGxhdGUgPGNsYXNzIF9UcDE+IHN0cnVjdCBy ZWJpbmQgewogICAgdHlwZWRlZiBhbGxvY2F0b3I8X1RwMT4gb3RoZXI7CiAgfTsKfTsKdGVtcGxh dGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgppbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGFs bG9jYXRvcjxfVDE+JiwgY29uc3QgYWxsb2NhdG9yPF9UMj4mKQp7CiAgcmV0dXJuIHRydWU7Cn0K dGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgppbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNv bnN0IGFsbG9jYXRvcjxfVDE+JiwgY29uc3QgYWxsb2NhdG9yPF9UMj4mKQp7CiAgcmV0dXJuIGZh bHNlOwp9CnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4Kc3RydWN0IF9fYWxsb2Nh dG9yIHsKICBfQWxsb2MgX191bmRlcmx5aW5nX2FsbG9jOwogIHR5cGVkZWYgc2l6ZV90ICAgIHNp emVfdHlwZTsKICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiBf VHAqICAgICAgIHBvaW50ZXI7CiAgdHlwZWRlZiBjb25zdCBfVHAqIGNvbnN0X3BvaW50ZXI7CiAg dHlwZWRlZiBfVHAmICAgICAgIHJlZmVyZW5jZTsKICB0eXBlZGVmIGNvbnN0IF9UcCYgY29uc3Rf cmVmZXJlbmNlOwogIHR5cGVkZWYgX1RwICAgICAgICB2YWx1ZV90eXBlOwogIHRlbXBsYXRlIDxj bGFzcyBfVHAxPiBzdHJ1Y3QgcmViaW5kIHsKICAgIHR5cGVkZWYgX19hbGxvY2F0b3I8X1RwMSwg X0FsbG9jPiBvdGhlcjsKICB9OwogIF9fYWxsb2NhdG9yKCkgdGhyb3coKSAge30KICBfX2FsbG9j YXRvcihjb25zdCBfX2FsbG9jYXRvciYgX19hKSB0aHJvdygpIAogICAgOiBfX3VuZGVybHlpbmdf YWxsb2MoX19hLl9fdW5kZXJseWluZ19hbGxvYykge30KICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwMT4K ICBfX2FsbG9jYXRvcihjb25zdCBfX2FsbG9jYXRvcjxfVHAxLCBfQWxsb2M+JiBfX2EpIHRocm93 KCkgCiAgICA6IF9fdW5kZXJseWluZ19hbGxvYyhfX2EuX191bmRlcmx5aW5nX2FsbG9jKSB7fQog IH5fX2FsbG9jYXRvcigpIHRocm93KCkgIHt9CiAgcG9pbnRlciBhZGRyZXNzKHJlZmVyZW5jZSBf X3gpIGNvbnN0IHsgcmV0dXJuICZfX3g7IH0KICBjb25zdF9wb2ludGVyIGFkZHJlc3MoY29uc3Rf cmVmZXJlbmNlIF9feCkgY29uc3QgeyByZXR1cm4gJl9feDsgfQogICAKICBfVHAqIGFsbG9jYXRl KHNpemVfdHlwZSBfX24sIGNvbnN0IHZvaWQqID0gMCkgewogICAgcmV0dXJuIF9fbiAhPSAwCiAg ICAgICAgPyBzdGF0aWNfY2FzdDxfVHAqPihfX3VuZGVybHlpbmdfYWxsb2MuYWxsb2NhdGUoX19u ICogc2l6ZW9mKF9UcCkpKQogICAgICAgIDogMDsKICB9CiAgIAogIHZvaWQgZGVhbGxvY2F0ZShw b2ludGVyIF9fcCwgc2l6ZV90eXBlIF9fbikKICAgIHsgX191bmRlcmx5aW5nX2FsbG9jLmRlYWxs b2NhdGUoX19wLCBfX24gKiBzaXplb2YoX1RwKSk7IH0KICBzaXplX3R5cGUgbWF4X3NpemUoKSBj b25zdCB0aHJvdygpIAogICAgeyByZXR1cm4gc2l6ZV90KC0xKSAvIHNpemVvZihfVHApOyB9CiAg dm9pZCBjb25zdHJ1Y3QocG9pbnRlciBfX3AsIGNvbnN0IF9UcCYgX192YWwpIHsgbmV3KF9fcCkg X1RwKF9fdmFsKTsgfQogIHZvaWQgZGVzdHJveShwb2ludGVyIF9fcCkgeyBfX3AtPn5fVHAoKTsg fQp9Owp0ZW1wbGF0ZSA8Y2xhc3MgX0FsbG9jPgpjbGFzcyBfX2FsbG9jYXRvcjx2b2lkLCBfQWxs b2M+IHsKICB0eXBlZGVmIHNpemVfdCAgICAgIHNpemVfdHlwZTsKICB0eXBlZGVmIHB0cmRpZmZf dCAgIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIHZvaWQqICAgICAgIHBvaW50ZXI7CiAgdHlw ZWRlZiBjb25zdCB2b2lkKiBjb25zdF9wb2ludGVyOwogIHR5cGVkZWYgdm9pZCAgICAgICAgdmFs dWVfdHlwZTsKICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwMT4gc3RydWN0IHJlYmluZCB7CiAgICB0eXBl ZGVmIF9fYWxsb2NhdG9yPF9UcDEsIF9BbGxvYz4gb3RoZXI7CiAgfTsKfTsKdGVtcGxhdGUgPGNs YXNzIF9UcCwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IF9fYWxs b2NhdG9yPF9UcCwgX0FsbG9jPiYgX19hMSwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBf X2FsbG9jYXRvcjxfVHAsIF9BbGxvYz4mIF9fYTIpCnsKICByZXR1cm4gX19hMS5fX3VuZGVybHlp bmdfYWxsb2MgPT0gX19hMi5fX3VuZGVybHlpbmdfYWxsb2M7Cn0KdGVtcGxhdGUgPGNsYXNzIF9U cCwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IF9fYWxsb2NhdG9y PF9UcCwgX0FsbG9jPiYgX19hMSwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfX2FsbG9j YXRvcjxfVHAsIF9BbGxvYz4mIF9fYTIpCnsKICByZXR1cm4gX19hMS5fX3VuZGVybHlpbmdfYWxs b2MgIT0gX19hMi5fX3VuZGVybHlpbmdfYWxsb2M7Cn0KdGVtcGxhdGUgPGludCBpbnN0Pgppbmxp bmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPGluc3Q+JiwK ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxpbnN0 PiYpCnsKICByZXR1cm4gdHJ1ZTsKfQp0ZW1wbGF0ZSA8aW50IF9faW5zdD4KaW5saW5lIGJvb2wg b3BlcmF0b3IhPShjb25zdCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+JiwKICAgICAg ICAgICAgICAgICAgICAgICBjb25zdCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+JikK ewogIHJldHVybiBmYWxzZTsKfQp0ZW1wbGF0ZSA8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+ CmlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9f dGhyZWFkcywgX19pbnN0PiYsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX19kZWZhdWx0 X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0PiYpCnsKICByZXR1cm4gdHJ1ZTsKfQp0 ZW1wbGF0ZSA8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+CmlubGluZSBib29sIG9wZXJhdG9y IT0oY29uc3QgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0PiYsCiAg ICAgICAgICAgICAgICAgICAgICAgY29uc3QgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhy ZWFkcywgX19pbnN0PiYpCnsKICByZXR1cm4gZmFsc2U7Cn0KdGVtcGxhdGUgPGNsYXNzIF9BbGxv Yz4KaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBkZWJ1Z19hbGxvYzxfQWxsb2M+JiwKICAg ICAgICAgICAgICAgICAgICAgICBjb25zdCBkZWJ1Z19hbGxvYzxfQWxsb2M+JikgewogIHJldHVy biB0cnVlOwp9CnRlbXBsYXRlIDxjbGFzcyBfQWxsb2M+CmlubGluZSBib29sIG9wZXJhdG9yIT0o Y29uc3QgZGVidWdfYWxsb2M8X0FsbG9jPiYsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg ZGVidWdfYWxsb2M8X0FsbG9jPiYpIHsKICByZXR1cm4gZmFsc2U7Cn0KdGVtcGxhdGUgPGNsYXNz IF9UcCwgY2xhc3MgX0FsbG9jYXRvcj4Kc3RydWN0IF9BbGxvY190cmFpdHMKewogIHN0YXRpYyBj b25zdCBib29sIF9TX2luc3RhbmNlbGVzcyA9IGZhbHNlOwogIHR5cGVkZWYgdHlwZW5hbWUgX0Fs bG9jYXRvcjo6ICAgcmViaW5kPF9UcD46Om90aGVyCiAgICAgICAgICBhbGxvY2F0b3JfdHlwZTsK fTsKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jYXRvcj4KY29uc3QgYm9vbCBfQWxs b2NfdHJhaXRzPF9UcCwgX0FsbG9jYXRvcj46Ol9TX2luc3RhbmNlbGVzczsKdGVtcGxhdGUgPGNs YXNzIF9UcCwgY2xhc3MgX1RwMT4Kc3RydWN0IF9BbGxvY190cmFpdHM8X1RwLCBhbGxvY2F0b3I8 X1RwMT4gPgp7CiAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5zdGFuY2VsZXNzID0gdHJ1ZTsKICB0 eXBlZGVmIHNpbXBsZV9hbGxvYzxfVHAsIGFsbG9jPiBfQWxsb2NfdHlwZTsKICB0eXBlZGVmIGFs bG9jYXRvcjxfVHA+IGFsbG9jYXRvcl90eXBlOwp9Owp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBpbnQg X19pbnN0PgpzdHJ1Y3QgX0FsbG9jX3RyYWl0czxfVHAsIF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRl PF9faW5zdD4gPgp7CiAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5zdGFuY2VsZXNzID0gdHJ1ZTsK ICB0eXBlZGVmIHNpbXBsZV9hbGxvYzxfVHAsIF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9faW5z dD4gPiBfQWxsb2NfdHlwZTsKICB0eXBlZGVmIF9fYWxsb2NhdG9yPF9UcCwgX19tYWxsb2NfYWxs b2NfdGVtcGxhdGU8X19pbnN0PiA+IGFsbG9jYXRvcl90eXBlOwp9Owp0ZW1wbGF0ZSA8Y2xhc3Mg X1RwLCBib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4Kc3RydWN0IF9BbGxvY190cmFpdHM8X1Rw LCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+ID4KewogIHN0YXRp YyBjb25zdCBib29sIF9TX2luc3RhbmNlbGVzcyA9IHRydWU7CiAgdHlwZWRlZiBzaW1wbGVfYWxs b2M8X1RwLCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+ID4KICAg ICAgICAgIF9BbGxvY190eXBlOwogIHR5cGVkZWYgX19hbGxvY2F0b3I8X1RwLCBfX2RlZmF1bHRf YWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+ID4KICAgICAgICAgIGFsbG9jYXRvcl90 eXBlOwp9Owp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CnN0cnVjdCBfQWxsb2Nf dHJhaXRzPF9UcCwgZGVidWdfYWxsb2M8X0FsbG9jPiA+CnsKICBzdGF0aWMgY29uc3QgYm9vbCBf U19pbnN0YW5jZWxlc3MgPSB0cnVlOwogIHR5cGVkZWYgc2ltcGxlX2FsbG9jPF9UcCwgZGVidWdf YWxsb2M8X0FsbG9jPiA+IF9BbGxvY190eXBlOwogIHR5cGVkZWYgX19hbGxvY2F0b3I8X1RwLCBk ZWJ1Z19hbGxvYzxfQWxsb2M+ID4gYWxsb2NhdG9yX3R5cGU7Cn07CnRlbXBsYXRlIDxjbGFzcyBf VHAsIGNsYXNzIF9UcDEsIGludCBfX2luc3Q+CnN0cnVjdCBfQWxsb2NfdHJhaXRzPF9UcCwKICAg ICAgICAgICAgICAgICAgICAgX19hbGxvY2F0b3I8X1RwMSwgX19tYWxsb2NfYWxsb2NfdGVtcGxh dGU8X19pbnN0PiA+ID4KewogIHN0YXRpYyBjb25zdCBib29sIF9TX2luc3RhbmNlbGVzcyA9IHRy dWU7CiAgdHlwZWRlZiBzaW1wbGVfYWxsb2M8X1RwLCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxf X2luc3Q+ID4gX0FsbG9jX3R5cGU7CiAgdHlwZWRlZiBfX2FsbG9jYXRvcjxfVHAsIF9fbWFsbG9j X2FsbG9jX3RlbXBsYXRlPF9faW5zdD4gPiBhbGxvY2F0b3JfdHlwZTsKfTsKdGVtcGxhdGUgPGNs YXNzIF9UcCwgY2xhc3MgX1RwMSwgYm9vbCBfX3RociwgaW50IF9faW5zdD4Kc3RydWN0IF9BbGxv Y190cmFpdHM8X1RwLAogICAgICAgICAgICAgICAgICAgICAgX19hbGxvY2F0b3I8X1RwMSwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxf X3RociwgX19pbnN0PiA+ID4KewogIHN0YXRpYyBjb25zdCBib29sIF9TX2luc3RhbmNlbGVzcyA9 IHRydWU7CiAgdHlwZWRlZiBzaW1wbGVfYWxsb2M8X1RwLCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxh dGU8X190aHIsX19pbnN0PiA+CiAgICAgICAgICBfQWxsb2NfdHlwZTsKICB0eXBlZGVmIF9fYWxs b2NhdG9yPF9UcCwgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyLF9faW5zdD4gPgogICAg ICAgICAgYWxsb2NhdG9yX3R5cGU7Cn07CnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9UcDEs IGNsYXNzIF9BbGxvYz4Kc3RydWN0IF9BbGxvY190cmFpdHM8X1RwLCBfX2FsbG9jYXRvcjxfVHAx LCBkZWJ1Z19hbGxvYzxfQWxsb2M+ID4gPgp7CiAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5zdGFu Y2VsZXNzID0gdHJ1ZTsKICB0eXBlZGVmIHNpbXBsZV9hbGxvYzxfVHAsIGRlYnVnX2FsbG9jPF9B bGxvYz4gPiBfQWxsb2NfdHlwZTsKICB0eXBlZGVmIF9fYWxsb2NhdG9yPF9UcCwgZGVidWdfYWxs b2M8X0FsbG9jPiA+IGFsbG9jYXRvcl90eXBlOwp9OwojIDIxICIvYW9sbmV0L3BrZy9nY2MtMi45 NS4zL2xpYi9nY2MtbGliL3Bvd2VycGMtaWJtLWFpeDMuMi41LzIuOTUuMy8uLi8uLi8uLi8uLi9p bmNsdWRlL2crKy0zL2FsbG9jLmgiIDIgMwojIDQwICIvYW9sbmV0L3BrZy9nY2MtMi45NS4zL2xp Yi9nY2MtbGliL3Bvd2VycGMtaWJtLWFpeDMuMi41LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRl L2crKy0zL2FsbG9jLmgiIDMKIyAzOSAiL2FvbG5ldC9wa2cvZ2NjLTIuOTUuMy9saWIvZ2NjLWxp Yi9wb3dlcnBjLWlibS1haXgzLjIuNS8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9z dGQvYmFzdHJpbmcuaCIgMiAzCmV4dGVybiAiQysrIiB7CmNsYXNzIGlzdHJlYW07IGNsYXNzIG9z dHJlYW07CiMgMSAiL2FvbG5ldC9wa2cvZ2NjLTIuOTUuMy9saWIvZ2NjLWxpYi9wb3dlcnBjLWli bS1haXgzLjIuNS8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9pdGVyYXRvciIgMSAz CiMgMSAiL2FvbG5ldC9wa2cvZ2NjLTIuOTUuMy9saWIvZ2NjLWxpYi9wb3dlcnBjLWlibS1haXgz LjIuNS8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfcmVsb3BzLmgiIDEgMwp0 ZW1wbGF0ZSA8Y2xhc3MgX1RwPgppbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IF9UcCYgX194 LCBjb25zdCBfVHAmIF9feSkgewogIHJldHVybiAhKF9feCA9PSBfX3kpOwp9CnRlbXBsYXRlIDxj bGFzcyBfVHA+CmlubGluZSBib29sIG9wZXJhdG9yPihjb25zdCBfVHAmIF9feCwgY29uc3QgX1Rw JiBfX3kpIHsKICByZXR1cm4gX195IDwgX194Owp9CnRlbXBsYXRlIDxjbGFzcyBfVHA+CmlubGlu ZSBib29sIG9wZXJhdG9yPD0oY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSB7CiAgcmV0 dXJuICEoX195IDwgX194KTsKfQp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgppbmxpbmUgYm9vbCBvcGVy YXRvcj49KGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgewogIHJldHVybiAhKF9feCA8 IF9feSk7Cn0KIyAzMSAiL2FvbG5ldC9wa2cvZ2NjLTIuOTUuMy9saWIvZ2NjLWxpYi9wb3dlcnBj LWlibS1haXgzLjIuNS8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9pdGVyYXRvciIg MiAzCiMgMSAiL2FvbG5ldC9wa2cvZ2NjLTIuOTUuMy9saWIvZ2NjLWxpYi9wb3dlcnBjLWlibS1h aXgzLjIuNS8yLjk1LjMvaW5jbHVkZS9zdGRkZWYuaCIgMSAzIDQKIyAzNDIgIi9hb2xuZXQvcGtn L2djYy0yLjk1LjMvbGliL2djYy1saWIvcG93ZXJwYy1pYm0tYWl4My4yLjUvMi45NS4zL2luY2x1 ZGUvc3RkZGVmLmgiIDMgNAojIDMyICIvYW9sbmV0L3BrZy9nY2MtMi45NS4zL2xpYi9nY2MtbGli L3Bvd2VycGMtaWJtLWFpeDMuMi41LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL2l0 ZXJhdG9yIiAyIDMKIyAxICIvYW9sbmV0L3BrZy9nY2MtMi45NS4zL2xpYi9nY2MtbGliL3Bvd2Vy cGMtaWJtLWFpeDMuMi41LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9pdGVy YXRvci5oIiAxIDMKc3RydWN0IGlucHV0X2l0ZXJhdG9yX3RhZyB7fTsKc3RydWN0IG91dHB1dF9p dGVyYXRvcl90YWcge307CnN0cnVjdCBmb3J3YXJkX2l0ZXJhdG9yX3RhZyA6IHB1YmxpYyBpbnB1 dF9pdGVyYXRvcl90YWcge307CnN0cnVjdCBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZyA6IHB1 YmxpYyBmb3J3YXJkX2l0ZXJhdG9yX3RhZyB7fTsKc3RydWN0IHJhbmRvbV9hY2Nlc3NfaXRlcmF0 b3JfdGFnIDogcHVibGljIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnIHt9Owp0ZW1wbGF0ZSA8 Y2xhc3MgX1RwLCBjbGFzcyBfRGlzdGFuY2U+IHN0cnVjdCBpbnB1dF9pdGVyYXRvciB7CiAgdHlw ZWRlZiBpbnB1dF9pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiBfVHAg ICAgICAgICAgICAgICAgdmFsdWVfdHlwZTsKICB0eXBlZGVmIF9EaXN0YW5jZSAgICAgICAgICBk aWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiBfVHAqICAgICAgICAgICAgICAgcG9pbnRlcjsKICB0 eXBlZGVmIF9UcCYgICAgICAgICAgICAgICByZWZlcmVuY2U7Cn07CnN0cnVjdCBvdXRwdXRfaXRl cmF0b3IgewogIHR5cGVkZWYgb3V0cHV0X2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsK ICB0eXBlZGVmIHZvaWQgICAgICAgICAgICAgICAgdmFsdWVfdHlwZTsKICB0eXBlZGVmIHZvaWQg ICAgICAgICAgICAgICAgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgdm9pZCAgICAgICAgICAg ICAgICBwb2ludGVyOwogIHR5cGVkZWYgdm9pZCAgICAgICAgICAgICAgICByZWZlcmVuY2U7Cn07 CnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9EaXN0YW5jZT4gc3RydWN0IGZvcndhcmRfaXRl cmF0b3IgewogIHR5cGVkZWYgZm9yd2FyZF9pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7 CiAgdHlwZWRlZiBfVHAgICAgICAgICAgICAgICAgICB2YWx1ZV90eXBlOwogIHR5cGVkZWYgX0Rp c3RhbmNlICAgICAgICAgICAgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgX1RwKiAgICAgICAg ICAgICAgICAgcG9pbnRlcjsKICB0eXBlZGVmIF9UcCYgICAgICAgICAgICAgICAgIHJlZmVyZW5j ZTsKfTsKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0Rpc3RhbmNlPiBzdHJ1Y3QgYmlkaXJl Y3Rpb25hbF9pdGVyYXRvciB7CiAgdHlwZWRlZiBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZyBp dGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIF9UcCAgICAgICAgICAgICAgICAgICAgICAgIHZh bHVlX3R5cGU7CiAgdHlwZWRlZiBfRGlzdGFuY2UgICAgICAgICAgICAgICAgICBkaWZmZXJlbmNl X3R5cGU7CiAgdHlwZWRlZiBfVHAqICAgICAgICAgICAgICAgICAgICAgICBwb2ludGVyOwogIHR5 cGVkZWYgX1RwJiAgICAgICAgICAgICAgICAgICAgICAgcmVmZXJlbmNlOwp9Owp0ZW1wbGF0ZSA8 Y2xhc3MgX1RwLCBjbGFzcyBfRGlzdGFuY2U+IHN0cnVjdCByYW5kb21fYWNjZXNzX2l0ZXJhdG9y IHsKICB0eXBlZGVmIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5 OwogIHR5cGVkZWYgX1RwICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVfdHlwZTsKICB0eXBl ZGVmIF9EaXN0YW5jZSAgICAgICAgICAgICAgICAgIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVm IF9UcCogICAgICAgICAgICAgICAgICAgICAgIHBvaW50ZXI7CiAgdHlwZWRlZiBfVHAmICAgICAg ICAgICAgICAgICAgICAgICByZWZlcmVuY2U7Cn07CiMgOTggIi9hb2xuZXQvcGtnL2djYy0yLjk1 LjMvbGliL2djYy1saWIvcG93ZXJwYy1pYm0tYWl4My4yLjUvMi45NS4zLy4uLy4uLy4uLy4uL2lu Y2x1ZGUvZysrLTMvc3RsX2l0ZXJhdG9yLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9JdGVyYXRvcj4K c3RydWN0IGl0ZXJhdG9yX3RyYWl0cyB7CiAgdHlwZWRlZiB0eXBlbmFtZSBfSXRlcmF0b3I6Oml0 ZXJhdG9yX2NhdGVnb3J5IGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVkZWYgdHlwZW5hbWUgX0l0 ZXJhdG9yOjp2YWx1ZV90eXBlICAgICAgICB2YWx1ZV90eXBlOwogIHR5cGVkZWYgdHlwZW5hbWUg X0l0ZXJhdG9yOjpkaWZmZXJlbmNlX3R5cGUgICBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiB0 eXBlbmFtZSBfSXRlcmF0b3I6OnBvaW50ZXIgICAgICAgICAgIHBvaW50ZXI7CiAgdHlwZWRlZiB0 eXBlbmFtZSBfSXRlcmF0b3I6OnJlZmVyZW5jZSAgICAgICAgIHJlZmVyZW5jZTsKfTsKdGVtcGxh dGUgPGNsYXNzIF9UcD4Kc3RydWN0IGl0ZXJhdG9yX3RyYWl0czxfVHAqPiB7CiAgdHlwZWRlZiBy YW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIF9U cCAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZV90eXBlOwogIHR5cGVkZWYgcHRyZGlmZl90 ICAgICAgICAgICAgICAgICAgIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIF9UcCogICAgICAg ICAgICAgICAgICAgICAgICBwb2ludGVyOwogIHR5cGVkZWYgX1RwJiAgICAgICAgICAgICAgICAg ICAgICAgIHJlZmVyZW5jZTsKfTsKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IGl0ZXJhdG9y X3RyYWl0czxjb25zdCBfVHAqPiB7CiAgdHlwZWRlZiByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3Rh ZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIF9UcCAgICAgICAgICAgICAgICAgICAgICAg ICB2YWx1ZV90eXBlOwogIHR5cGVkZWYgcHRyZGlmZl90ICAgICAgICAgICAgICAgICAgIGRpZmZl cmVuY2VfdHlwZTsKICB0eXBlZGVmIGNvbnN0IF9UcCogICAgICAgICAgICAgICAgICBwb2ludGVy OwogIHR5cGVkZWYgY29uc3QgX1RwJiAgICAgICAgICAgICAgICAgIHJlZmVyZW5jZTsKfTsKdGVt cGxhdGUgPGNsYXNzIF9JdGVyPgppbmxpbmUgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVy Pjo6aXRlcmF0b3JfY2F0ZWdvcnkKX19pdGVyYXRvcl9jYXRlZ29yeShjb25zdCBfSXRlciYpCnsK ICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcj46Oml0ZXJhdG9yX2NhdGVn b3J5IF9DYXRlZ29yeTsKICByZXR1cm4gX0NhdGVnb3J5KCk7Cn0KdGVtcGxhdGUgPGNsYXNzIF9J dGVyPgppbmxpbmUgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyPjo6ZGlmZmVyZW5jZV90 eXBlKgpfX2Rpc3RhbmNlX3R5cGUoY29uc3QgX0l0ZXImKQp7CiAgcmV0dXJuIHN0YXRpY19jYXN0 PHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcj46OmRpZmZlcmVuY2VfdHlwZSo+KDApOwp9 CnRlbXBsYXRlIDxjbGFzcyBfSXRlcj4KaW5saW5lIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxf SXRlcj46OnZhbHVlX3R5cGUqCl9fdmFsdWVfdHlwZShjb25zdCBfSXRlciYpCnsKICByZXR1cm4g c3RhdGljX2Nhc3Q8dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyPjo6dmFsdWVfdHlwZSo+ KDApOwp9CnRlbXBsYXRlIDxjbGFzcyBfSXRlcj4KaW5saW5lIHR5cGVuYW1lIGl0ZXJhdG9yX3Ry YWl0czxfSXRlcj46Oml0ZXJhdG9yX2NhdGVnb3J5Cml0ZXJhdG9yX2NhdGVnb3J5KGNvbnN0IF9J dGVyJiBfX2kpIHsgcmV0dXJuIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19pKTsgfQp0ZW1wbGF0ZSA8 Y2xhc3MgX0l0ZXI+CmlubGluZSB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXI+OjpkaWZm ZXJlbmNlX3R5cGUqCmRpc3RhbmNlX3R5cGUoY29uc3QgX0l0ZXImIF9faSkgeyByZXR1cm4gX19k aXN0YW5jZV90eXBlKF9faSk7IH0KdGVtcGxhdGUgPGNsYXNzIF9JdGVyPgppbmxpbmUgdHlwZW5h bWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyPjo6dmFsdWVfdHlwZSoKdmFsdWVfdHlwZShjb25zdCBf SXRlciYgX19pKSB7IHJldHVybiBfX3ZhbHVlX3R5cGUoX19pKTsgfQojIDI1OSAiL2FvbG5ldC9w a2cvZ2NjLTIuOTUuMy9saWIvZ2NjLWxpYi9wb3dlcnBjLWlibS1haXgzLjIuNS8yLjk1LjMvLi4v Li4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfaXRlcmF0b3IuaCIgMwp0ZW1wbGF0ZSA8Y2xhc3Mg X0lucHV0SXRlcmF0b3IsIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIHZvaWQgX19kaXN0YW5jZShf SW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAg ICAgICAgICAgICAgX0Rpc3RhbmNlJiBfX24sIGlucHV0X2l0ZXJhdG9yX3RhZykKewogIHdoaWxl IChfX2ZpcnN0ICE9IF9fbGFzdCkgeyArK19fZmlyc3Q7ICsrX19uOyB9Cn0KdGVtcGxhdGUgPGNs YXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgY2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUgdm9pZCBf X2Rpc3RhbmNlKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCAKICAgICAgICAgICAgICAg ICAgICAgICBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LCAKICAgICAgICAgICAgICAgICAg ICAgICBfRGlzdGFuY2UmIF9fbiwgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpCnsKICBfX24g Kz0gX19sYXN0IC0gX19maXJzdDsKfQp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3IsIGNs YXNzIF9EaXN0YW5jZT4KaW5saW5lIHZvaWQgZGlzdGFuY2UoX0lucHV0SXRlcmF0b3IgX19maXJz dCwgCiAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwgX0Rpc3RhbmNl JiBfX24pCnsKICBfX2Rpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCwgX19uLCBpdGVyYXRvcl9jYXRl Z29yeShfX2ZpcnN0KSk7Cn0KdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgppbmxpbmUg dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBl Cl9fZGlzdGFuY2UoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0 LCBpbnB1dF9pdGVyYXRvcl90YWcpCnsKICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0 SXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUgX19uID0gMDsKICB3aGlsZSAoX19maXJzdCAhPSBf X2xhc3QpIHsKICAgICsrX19maXJzdDsgKytfX247CiAgfQogIHJldHVybiBfX247Cn0KdGVtcGxh dGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvcj4KaW5saW5lIHR5cGVuYW1lIGl0ZXJhdG9y X3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUKX19kaXN0YW5j ZShfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9f bGFzdCwKICAgICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykgewogIHJldHVybiBf X2xhc3QgLSBfX2ZpcnN0Owp9CnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KaW5saW5l IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlw ZQpkaXN0YW5jZShfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3Qp IHsKICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyYXRvcj46Oml0 ZXJhdG9yX2NhdGVnb3J5IAogICAgX0NhdGVnb3J5OwogIHJldHVybiBfX2Rpc3RhbmNlKF9fZmly c3QsIF9fbGFzdCwgX0NhdGVnb3J5KCkpOwp9CnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBj bGFzcyBfRGlzdGFuY2U+CmlubGluZSB2b2lkIF9fYWR2YW5jZShfSW5wdXRJdGVyJiBfX2ksIF9E aXN0YW5jZSBfX24sIGlucHV0X2l0ZXJhdG9yX3RhZykgewogIHdoaWxlIChfX24tLSkgKytfX2k7 Cn0KdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IsIGNsYXNzIF9EaXN0YW5j ZT4KaW5saW5lIHZvaWQgX19hZHZhbmNlKF9CaWRpcmVjdGlvbmFsSXRlcmF0b3ImIF9faSwgX0Rp c3RhbmNlIF9fbiwgCiAgICAgICAgICAgICAgICAgICAgICBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9y X3RhZykgewogIGlmIChfX24gPj0gMCkKICAgIHdoaWxlIChfX24tLSkgKytfX2k7CiAgZWxzZQog ICAgd2hpbGUgKF9fbisrKSAtLV9faTsKfQp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0 ZXJhdG9yLCBjbGFzcyBfRGlzdGFuY2U+CmlubGluZSB2b2lkIF9fYWR2YW5jZShfUmFuZG9tQWNj ZXNzSXRlcmF0b3ImIF9faSwgX0Rpc3RhbmNlIF9fbiwgCiAgICAgICAgICAgICAgICAgICAgICBy YW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykgewogIF9faSArPSBfX247Cn0KdGVtcGxhdGUgPGNs YXNzIF9JbnB1dEl0ZXJhdG9yLCBjbGFzcyBfRGlzdGFuY2U+CmlubGluZSB2b2lkIGFkdmFuY2Uo X0lucHV0SXRlcmF0b3ImIF9faSwgX0Rpc3RhbmNlIF9fbikgewogIF9fYWR2YW5jZShfX2ksIF9f biwgaXRlcmF0b3JfY2F0ZWdvcnkoX19pKSk7Cn0KdGVtcGxhdGUgPGNsYXNzIF9Db250YWluZXI+ CmNsYXNzIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yIHsKcHJvdGVjdGVkOgogIF9Db250YWluZXIqIGNv bnRhaW5lcjsKcHVibGljOgogIHR5cGVkZWYgX0NvbnRhaW5lciAgICAgICAgICBjb250YWluZXJf dHlwZTsKICB0eXBlZGVmIG91dHB1dF9pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAg dHlwZWRlZiB2b2lkICAgICAgICAgICAgICAgIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiB2b2lkICAg ICAgICAgICAgICAgIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIHZvaWQgICAgICAgICAgICAg ICAgcG9pbnRlcjsKICB0eXBlZGVmIHZvaWQgICAgICAgICAgICAgICAgcmVmZXJlbmNlOwogIGV4 cGxpY2l0IGJhY2tfaW5zZXJ0X2l0ZXJhdG9yKF9Db250YWluZXImIF9feCkgOiBjb250YWluZXIo Jl9feCkge30KICBiYWNrX2luc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiYKICBvcGVyYXRvcj0o Y29uc3QgdHlwZW5hbWUgX0NvbnRhaW5lcjo6dmFsdWVfdHlwZSYgX192YWx1ZSkgeyAKICAgIGNv bnRhaW5lci0+cHVzaF9iYWNrKF9fdmFsdWUpOwogICAgcmV0dXJuICp0aGlzOwogIH0KICBiYWNr X2luc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiYgb3BlcmF0b3IqKCkgeyByZXR1cm4gKnRoaXM7 IH0KICBiYWNrX2luc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiYgb3BlcmF0b3IrKygpIHsgcmV0 dXJuICp0aGlzOyB9CiAgYmFja19pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4mIG9wZXJhdG9y KysoaW50KSB7IHJldHVybiAqdGhpczsgfQp9OwojIDM3OCAiL2FvbG5ldC9wa2cvZ2NjLTIuOTUu My9saWIvZ2NjLWxpYi9wb3dlcnBjLWlibS1haXgzLjIuNS8yLjk1LjMvLi4vLi4vLi4vLi4vaW5j bHVkZS9nKystMy9zdGxfaXRlcmF0b3IuaCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX0NvbnRhaW5lcj4K aW5saW5lIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+IGJhY2tfaW5zZXJ0ZXIoX0Nv bnRhaW5lciYgX194KSB7CiAgcmV0dXJuIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+ KF9feCk7Cn0KdGVtcGxhdGUgPGNsYXNzIF9Db250YWluZXI+CmNsYXNzIGZyb250X2luc2VydF9p dGVyYXRvciB7CnByb3RlY3RlZDoKICBfQ29udGFpbmVyKiBjb250YWluZXI7CnB1YmxpYzoKICB0 eXBlZGVmIF9Db250YWluZXIgICAgICAgICAgY29udGFpbmVyX3R5cGU7CiAgdHlwZWRlZiBvdXRw dXRfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVkZWYgdm9pZCAgICAgICAg ICAgICAgICB2YWx1ZV90eXBlOwogIHR5cGVkZWYgdm9pZCAgICAgICAgICAgICAgICBkaWZmZXJl bmNlX3R5cGU7CiAgdHlwZWRlZiB2b2lkICAgICAgICAgICAgICAgIHBvaW50ZXI7CiAgdHlwZWRl ZiB2b2lkICAgICAgICAgICAgICAgIHJlZmVyZW5jZTsKICBleHBsaWNpdCBmcm9udF9pbnNlcnRf aXRlcmF0b3IoX0NvbnRhaW5lciYgX194KSA6IGNvbnRhaW5lcigmX194KSB7fQogIGZyb250X2lu c2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiYKICBvcGVyYXRvcj0oY29uc3QgdHlwZW5hbWUgX0Nv bnRhaW5lcjo6dmFsdWVfdHlwZSYgX192YWx1ZSkgeyAKICAgIGNvbnRhaW5lci0+cHVzaF9mcm9u dChfX3ZhbHVlKTsKICAgIHJldHVybiAqdGhpczsKICB9CiAgZnJvbnRfaW5zZXJ0X2l0ZXJhdG9y PF9Db250YWluZXI+JiBvcGVyYXRvciooKSB7IHJldHVybiAqdGhpczsgfQogIGZyb250X2luc2Vy dF9pdGVyYXRvcjxfQ29udGFpbmVyPiYgb3BlcmF0b3IrKygpIHsgcmV0dXJuICp0aGlzOyB9CiAg ZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JiBvcGVyYXRvcisrKGludCkgeyByZXR1 cm4gKnRoaXM7IH0KfTsKIyA0MTcgIi9hb2xuZXQvcGtnL2djYy0yLjk1LjMvbGliL2djYy1saWIv cG93ZXJwYy1pYm0tYWl4My4yLjUvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3Rs X2l0ZXJhdG9yLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9Db250YWluZXI+CmlubGluZSBmcm9udF9p bnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4gZnJvbnRfaW5zZXJ0ZXIoX0NvbnRhaW5lciYgX194 KSB7CiAgcmV0dXJuIGZyb250X2luc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPihfX3gpOwp9CnRl bXBsYXRlIDxjbGFzcyBfQ29udGFpbmVyPgpjbGFzcyBpbnNlcnRfaXRlcmF0b3Igewpwcm90ZWN0 ZWQ6CiAgX0NvbnRhaW5lciogY29udGFpbmVyOwogIHR5cGVuYW1lIF9Db250YWluZXI6Oml0ZXJh dG9yIGl0ZXI7CnB1YmxpYzoKICB0eXBlZGVmIF9Db250YWluZXIgICAgICAgICAgY29udGFpbmVy X3R5cGU7CiAgdHlwZWRlZiBvdXRwdXRfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5Owog IHR5cGVkZWYgdm9pZCAgICAgICAgICAgICAgICB2YWx1ZV90eXBlOwogIHR5cGVkZWYgdm9pZCAg ICAgICAgICAgICAgICBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiB2b2lkICAgICAgICAgICAg ICAgIHBvaW50ZXI7CiAgdHlwZWRlZiB2b2lkICAgICAgICAgICAgICAgIHJlZmVyZW5jZTsKICBp bnNlcnRfaXRlcmF0b3IoX0NvbnRhaW5lciYgX194LCB0eXBlbmFtZSBfQ29udGFpbmVyOjppdGVy YXRvciBfX2kpIAogICAgOiBjb250YWluZXIoJl9feCksIGl0ZXIoX19pKSB7fQogIGluc2VydF9p dGVyYXRvcjxfQ29udGFpbmVyPiYKICBvcGVyYXRvcj0oY29uc3QgdHlwZW5hbWUgX0NvbnRhaW5l cjo6dmFsdWVfdHlwZSYgX192YWx1ZSkgeyAKICAgIGl0ZXIgPSBjb250YWluZXItPmluc2VydChp dGVyLCBfX3ZhbHVlKTsKICAgICsraXRlcjsKICAgIHJldHVybiAqdGhpczsKICB9CiAgaW5zZXJ0 X2l0ZXJhdG9yPF9Db250YWluZXI+JiBvcGVyYXRvciooKSB7IHJldHVybiAqdGhpczsgfQogIGlu c2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiYgb3BlcmF0b3IrKygpIHsgcmV0dXJuICp0aGlzOyB9 CiAgaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JiBvcGVyYXRvcisrKGludCkgeyByZXR1cm4g KnRoaXM7IH0KfTsKIyA0NTkgIi9hb2xuZXQvcGtnL2djYy0yLjk1LjMvbGliL2djYy1saWIvcG93 ZXJwYy1pYm0tYWl4My4yLjUvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX2l0 ZXJhdG9yLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9Db250YWluZXIsIGNsYXNzIF9JdGVyYXRvcj4K aW5saW5lIAppbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4gaW5zZXJ0ZXIoX0NvbnRhaW5lciYg X194LCBfSXRlcmF0b3IgX19pKQp7CiAgdHlwZWRlZiB0eXBlbmFtZSBfQ29udGFpbmVyOjppdGVy YXRvciBfX2l0ZXI7CiAgcmV0dXJuIGluc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPihfX3gsIF9f aXRlcihfX2kpKTsKfQp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyYXRvciwgY2xh c3MgX1RwLCBjbGFzcyBfUmVmZXJlbmNlID0gX1RwJiwgCiAgICAgICAgICBjbGFzcyBfRGlzdGFu Y2UgPSBwdHJkaWZmX3Q+IApjbGFzcyByZXZlcnNlX2JpZGlyZWN0aW9uYWxfaXRlcmF0b3Igewog IHR5cGVkZWYgcmV2ZXJzZV9iaWRpcmVjdGlvbmFsX2l0ZXJhdG9yPF9CaWRpcmVjdGlvbmFsSXRl cmF0b3IsIF9UcCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1Jl ZmVyZW5jZSwgX0Rpc3RhbmNlPiAgX1NlbGY7CnByb3RlY3RlZDoKICBfQmlkaXJlY3Rpb25hbEl0 ZXJhdG9yIGN1cnJlbnQ7CnB1YmxpYzoKICB0eXBlZGVmIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3Jf dGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVkZWYgX1RwICAgICAgICAgICAgICAgICAgICAg ICAgdmFsdWVfdHlwZTsKICB0eXBlZGVmIF9EaXN0YW5jZSAgICAgICAgICAgICAgICAgIGRpZmZl cmVuY2VfdHlwZTsKICB0eXBlZGVmIF9UcCogICAgICAgICAgICAgICAgICAgICAgIHBvaW50ZXI7 CiAgdHlwZWRlZiBfUmVmZXJlbmNlICAgICAgICAgICAgICAgICByZWZlcmVuY2U7CiAgcmV2ZXJz ZV9iaWRpcmVjdGlvbmFsX2l0ZXJhdG9yKCkge30KICBleHBsaWNpdCByZXZlcnNlX2JpZGlyZWN0 aW9uYWxfaXRlcmF0b3IoX0JpZGlyZWN0aW9uYWxJdGVyYXRvciBfX3gpCiAgICA6IGN1cnJlbnQo X194KSB7fQogIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IgYmFzZSgpIGNvbnN0IHsgcmV0dXJuIGN1 cnJlbnQ7IH0KICBfUmVmZXJlbmNlIG9wZXJhdG9yKigpIGNvbnN0IHsKICAgIF9CaWRpcmVjdGlv bmFsSXRlcmF0b3IgX190bXAgPSBjdXJyZW50OwogICAgcmV0dXJuICotLV9fdG1wOwogIH0KICBw b2ludGVyIG9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiAmKG9wZXJhdG9yKigpKTsgfQogIF9T ZWxmJiBvcGVyYXRvcisrKCkgewogICAgLS1jdXJyZW50OwogICAgcmV0dXJuICp0aGlzOwogIH0K ICBfU2VsZiBvcGVyYXRvcisrKGludCkgewogICAgX1NlbGYgX190bXAgPSAqdGhpczsKICAgIC0t Y3VycmVudDsKICAgIHJldHVybiBfX3RtcDsKICB9CiAgX1NlbGYmIG9wZXJhdG9yLS0oKSB7CiAg ICArK2N1cnJlbnQ7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIF9TZWxmIG9wZXJhdG9yLS0oaW50 KSB7CiAgICBfU2VsZiBfX3RtcCA9ICp0aGlzOwogICAgKytjdXJyZW50OwogICAgcmV0dXJuIF9f dG1wOwogIH0KfTsKIyA1NTAgIi9hb2xuZXQvcGtnL2djYy0yLjk1LjMvbGliL2djYy1saWIvcG93 ZXJwYy1pYm0tYWl4My4yLjUvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX2l0 ZXJhdG9yLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9CaUl0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX1Jl ZiwKICAgICAgICAgIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIGJvb2wgb3BlcmF0b3I9PSgKICAg IGNvbnN0IHJldmVyc2VfYmlkaXJlY3Rpb25hbF9pdGVyYXRvcjxfQmlJdGVyLCBfVHAsIF9SZWYs IF9EaXN0YW5jZT4mIF9feCwgCiAgICBjb25zdCByZXZlcnNlX2JpZGlyZWN0aW9uYWxfaXRlcmF0 b3I8X0JpSXRlciwgX1RwLCBfUmVmLCBfRGlzdGFuY2U+JiBfX3kpCnsKICByZXR1cm4gX194LmJh c2UoKSA9PSBfX3kuYmFzZSgpOwp9CnRlbXBsYXRlIDxjbGFzcyBfSXRlcmF0b3I+CmNsYXNzIHJl dmVyc2VfaXRlcmF0b3IgCnsKcHJvdGVjdGVkOgogIF9JdGVyYXRvciBjdXJyZW50OwpwdWJsaWM6 CiAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6aXRlcmF0b3Jf Y2F0ZWdvcnkKICAgICAgICAgIGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVkZWYgdHlwZW5hbWUg aXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OnZhbHVlX3R5cGUKICAgICAgICAgIHZhbHVlX3R5 cGU7CiAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6ZGlmZmVy ZW5jZV90eXBlCiAgICAgICAgICBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiB0eXBlbmFtZSBp dGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6cG9pbnRlcgogICAgICAgICAgcG9pbnRlcjsKICB0 eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+OjpyZWZlcmVuY2UKICAg ICAgICAgIHJlZmVyZW5jZTsKICB0eXBlZGVmIF9JdGVyYXRvciBpdGVyYXRvcl90eXBlOwogIHR5 cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+IF9TZWxmOwpwdWJsaWM6CiAgcmV2ZXJz ZV9pdGVyYXRvcigpIHt9CiAgZXhwbGljaXQgcmV2ZXJzZV9pdGVyYXRvcihpdGVyYXRvcl90eXBl IF9feCkgOiBjdXJyZW50KF9feCkge30KICByZXZlcnNlX2l0ZXJhdG9yKGNvbnN0IF9TZWxmJiBf X3gpIDogY3VycmVudChfX3guY3VycmVudCkge30KICB0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXI+CiAg cmV2ZXJzZV9pdGVyYXRvcihjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyPiYgX194KQogICAg OiBjdXJyZW50KF9feC5iYXNlKCkpIHt9CiAgICAKICBpdGVyYXRvcl90eXBlIGJhc2UoKSBjb25z dCB7IHJldHVybiBjdXJyZW50OyB9CiAgcmVmZXJlbmNlIG9wZXJhdG9yKigpIGNvbnN0IHsKICAg IF9JdGVyYXRvciBfX3RtcCA9IGN1cnJlbnQ7CiAgICByZXR1cm4gKi0tX190bXA7CiAgfQogIHBv aW50ZXIgb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuICYob3BlcmF0b3IqKCkpOyB9CiAgX1Nl bGYmIG9wZXJhdG9yKysoKSB7CiAgICAtLWN1cnJlbnQ7CiAgICByZXR1cm4gKnRoaXM7CiAgfQog IF9TZWxmIG9wZXJhdG9yKysoaW50KSB7CiAgICBfU2VsZiBfX3RtcCA9ICp0aGlzOwogICAgLS1j dXJyZW50OwogICAgcmV0dXJuIF9fdG1wOwogIH0KICBfU2VsZiYgb3BlcmF0b3ItLSgpIHsKICAg ICsrY3VycmVudDsKICAgIHJldHVybiAqdGhpczsKICB9CiAgX1NlbGYgb3BlcmF0b3ItLShpbnQp IHsKICAgIF9TZWxmIF9fdG1wID0gKnRoaXM7CiAgICArK2N1cnJlbnQ7CiAgICByZXR1cm4gX190 bXA7CiAgfQogIF9TZWxmIG9wZXJhdG9yKyhkaWZmZXJlbmNlX3R5cGUgX19uKSBjb25zdCB7CiAg ICByZXR1cm4gX1NlbGYoY3VycmVudCAtIF9fbik7CiAgfQogIF9TZWxmJiBvcGVyYXRvcis9KGRp ZmZlcmVuY2VfdHlwZSBfX24pIHsKICAgIGN1cnJlbnQgLT0gX19uOwogICAgcmV0dXJuICp0aGlz OwogIH0KICBfU2VsZiBvcGVyYXRvci0oZGlmZmVyZW5jZV90eXBlIF9fbikgY29uc3QgewogICAg cmV0dXJuIF9TZWxmKGN1cnJlbnQgKyBfX24pOwogIH0KICBfU2VsZiYgb3BlcmF0b3ItPShkaWZm ZXJlbmNlX3R5cGUgX19uKSB7CiAgICBjdXJyZW50ICs9IF9fbjsKICAgIHJldHVybiAqdGhpczsK ICB9CiAgcmVmZXJlbmNlIG9wZXJhdG9yW10oZGlmZmVyZW5jZV90eXBlIF9fbikgY29uc3QgeyBy ZXR1cm4gKigqdGhpcyArIF9fbik7IH0gIAp9OyAKdGVtcGxhdGUgPGNsYXNzIF9JdGVyYXRvcj4K aW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4m IF9feCwgCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRl cmF0b3I+JiBfX3kpIHsKICByZXR1cm4gX194LmJhc2UoKSA9PSBfX3kuYmFzZSgpOwp9CnRlbXBs YXRlIDxjbGFzcyBfSXRlcmF0b3I+CmlubGluZSBib29sIG9wZXJhdG9yPChjb25zdCByZXZlcnNl X2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feCwgCiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBy ZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feSkgewogIHJldHVybiBfX3kuYmFzZSgpIDwg X194LmJhc2UoKTsKfQp0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXJhdG9yPgppbmxpbmUgdHlwZW5hbWUg cmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUKb3BlcmF0b3ItKGNv bnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX194LCAKICAgICAgICAgIGNvbnN0IHJl dmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX195KSB7CiAgcmV0dXJuIF9feS5iYXNlKCkgLSBf X3guYmFzZSgpOwp9CnRlbXBsYXRlIDxjbGFzcyBfSXRlcmF0b3I+CmlubGluZSByZXZlcnNlX2l0 ZXJhdG9yPF9JdGVyYXRvcj4gCm9wZXJhdG9yKyh0eXBlbmFtZSByZXZlcnNlX2l0ZXJhdG9yPF9J dGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZSBfX24sCiAgICAgICAgICBjb25zdCByZXZlcnNlX2l0 ZXJhdG9yPF9JdGVyYXRvcj4mIF9feCkgewogIHJldHVybiByZXZlcnNlX2l0ZXJhdG9yPF9JdGVy YXRvcj4oX194LmJhc2UoKSAtIF9fbik7Cn0KIyA4MDUgIi9hb2xuZXQvcGtnL2djYy0yLjk1LjMv bGliL2djYy1saWIvcG93ZXJwYy1pYm0tYWl4My4yLjUvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1 ZGUvZysrLTMvc3RsX2l0ZXJhdG9yLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0Rp c3QgPSBwdHJkaWZmX3Q+IApjbGFzcyBpc3RyZWFtX2l0ZXJhdG9yIHsKICBmcmllbmQgYm9vbCBv cGVyYXRvcj09IDw+ICAoY29uc3QgaXN0cmVhbV9pdGVyYXRvciYsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaXN0cmVhbV9pdGVyYXRvciYpOwpw cm90ZWN0ZWQ6CiAgaXN0cmVhbSogX01fc3RyZWFtOwogIF9UcCBfTV92YWx1ZTsKICBib29sIF9N X2VuZF9tYXJrZXI7CiAgdm9pZCBfTV9yZWFkKCkgewogICAgX01fZW5kX21hcmtlciA9ICgqX01f c3RyZWFtKSA/IHRydWUgOiBmYWxzZTsKICAgIGlmIChfTV9lbmRfbWFya2VyKSAqX01fc3RyZWFt ID4+IF9NX3ZhbHVlOwogICAgX01fZW5kX21hcmtlciA9ICgqX01fc3RyZWFtKSA/IHRydWUgOiBm YWxzZTsKICB9CnB1YmxpYzoKICB0eXBlZGVmIGlucHV0X2l0ZXJhdG9yX3RhZyAgaXRlcmF0b3Jf Y2F0ZWdvcnk7CiAgdHlwZWRlZiBfVHAgICAgICAgICAgICAgICAgIHZhbHVlX3R5cGU7CiAgdHlw ZWRlZiBfRGlzdCAgICAgICAgICAgICAgIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIGNvbnN0 IF9UcCogICAgICAgICAgcG9pbnRlcjsKICB0eXBlZGVmIGNvbnN0IF9UcCYgICAgICAgICAgcmVm ZXJlbmNlOwogIGlzdHJlYW1faXRlcmF0b3IoKSA6IF9NX3N0cmVhbSgmY2luKSwgX01fZW5kX21h cmtlcihmYWxzZSkge30KICBpc3RyZWFtX2l0ZXJhdG9yKGlzdHJlYW0mIF9fcykgOiBfTV9zdHJl YW0oJl9fcykgeyBfTV9yZWFkKCk7IH0KICByZWZlcmVuY2Ugb3BlcmF0b3IqKCkgY29uc3QgeyBy ZXR1cm4gX01fdmFsdWU7IH0KICBwb2ludGVyIG9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiAm KG9wZXJhdG9yKigpKTsgfQogIGlzdHJlYW1faXRlcmF0b3I8X1RwLCBfRGlzdD4mIG9wZXJhdG9y KysoKSB7IAogICAgX01fcmVhZCgpOyAKICAgIHJldHVybiAqdGhpczsKICB9CiAgaXN0cmVhbV9p dGVyYXRvcjxfVHAsIF9EaXN0PiBvcGVyYXRvcisrKGludCkgIHsKICAgIGlzdHJlYW1faXRlcmF0 b3I8X1RwLCBfRGlzdD4gX190bXAgPSAqdGhpczsKICAgIF9NX3JlYWQoKTsKICAgIHJldHVybiBf X3RtcDsKICB9Cn07CiMgODY0ICIvYW9sbmV0L3BrZy9nY2MtMi45NS4zL2xpYi9nY2MtbGliL3Bv d2VycGMtaWJtLWFpeDMuMi41LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9p dGVyYXRvci5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5l IGJvb2wgb3BlcmF0b3I9PShjb25zdCBpc3RyZWFtX2l0ZXJhdG9yPF9UcCwgX0Rpc3RhbmNlPiYg X194LAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGlzdHJlYW1faXRlcmF0b3I8X1RwLCBf RGlzdGFuY2U+JiBfX3kpIHsKICByZXR1cm4gKF9feC5fTV9zdHJlYW0gPT0gX195Ll9NX3N0cmVh bSAmJgogICAgICAgICAgX194Ll9NX2VuZF9tYXJrZXIgPT0gX195Ll9NX2VuZF9tYXJrZXIpIHx8 CiAgICAgICAgIF9feC5fTV9lbmRfbWFya2VyID09IGZhbHNlICYmIF9feS5fTV9lbmRfbWFya2Vy ID09IGZhbHNlOwp9CnRlbXBsYXRlIDxjbGFzcyBfVHA+CmNsYXNzIG9zdHJlYW1faXRlcmF0b3Ig ewpwcm90ZWN0ZWQ6CiAgb3N0cmVhbSogX01fc3RyZWFtOwogIGNvbnN0IGNoYXIqIF9NX3N0cmlu ZzsKcHVibGljOgogIHR5cGVkZWYgb3V0cHV0X2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29y eTsKICB0eXBlZGVmIHZvaWQgICAgICAgICAgICAgICAgdmFsdWVfdHlwZTsKICB0eXBlZGVmIHZv aWQgICAgICAgICAgICAgICAgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgdm9pZCAgICAgICAg ICAgICAgICBwb2ludGVyOwogIHR5cGVkZWYgdm9pZCAgICAgICAgICAgICAgICByZWZlcmVuY2U7 CiAgb3N0cmVhbV9pdGVyYXRvcihvc3RyZWFtJiBfX3MpIDogX01fc3RyZWFtKCZfX3MpLCBfTV9z dHJpbmcoMCkge30KICBvc3RyZWFtX2l0ZXJhdG9yKG9zdHJlYW0mIF9fcywgY29uc3QgY2hhciog X19jKSAKICAgIDogX01fc3RyZWFtKCZfX3MpLCBfTV9zdHJpbmcoX19jKSAge30KICBvc3RyZWFt X2l0ZXJhdG9yPF9UcD4mIG9wZXJhdG9yPShjb25zdCBfVHAmIF9fdmFsdWUpIHsgCiAgICAqX01f c3RyZWFtIDw8IF9fdmFsdWU7CiAgICBpZiAoX01fc3RyaW5nKSAqX01fc3RyZWFtIDw8IF9NX3N0 cmluZzsKICAgIHJldHVybiAqdGhpczsKICB9CiAgb3N0cmVhbV9pdGVyYXRvcjxfVHA+JiBvcGVy YXRvciooKSB7IHJldHVybiAqdGhpczsgfQogIG9zdHJlYW1faXRlcmF0b3I8X1RwPiYgb3BlcmF0 b3IrKygpIHsgcmV0dXJuICp0aGlzOyB9IAogIG9zdHJlYW1faXRlcmF0b3I8X1RwPiYgb3BlcmF0 b3IrKyhpbnQpIHsgcmV0dXJuICp0aGlzOyB9IAp9OwojIDkwNyAiL2FvbG5ldC9wa2cvZ2NjLTIu OTUuMy9saWIvZ2NjLWxpYi9wb3dlcnBjLWlibS1haXgzLjIuNS8yLjk1LjMvLi4vLi4vLi4vLi4v aW5jbHVkZS9nKystMy9zdGxfaXRlcmF0b3IuaCIgMwojIDM4ICIvYW9sbmV0L3BrZy9nY2MtMi45 NS4zL2xpYi9nY2MtbGliL3Bvd2VycGMtaWJtLWFpeDMuMi41LzIuOTUuMy8uLi8uLi8uLi8uLi9p bmNsdWRlL2crKy0zL2l0ZXJhdG9yIiAyIDMKIyA0NCAiL2FvbG5ldC9wa2cvZ2NjLTIuOTUuMy9s aWIvZ2NjLWxpYi9wb3dlcnBjLWlibS1haXgzLjIuNS8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVk ZS9nKystMy9zdGQvYmFzdHJpbmcuaCIgMiAzCmV4dGVybiB2b2lkIF9fb3V0X29mX3JhbmdlIChj b25zdCBjaGFyICopOwpleHRlcm4gdm9pZCBfX2xlbmd0aF9lcnJvciAoY29uc3QgY2hhciAqKTsK dGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMgPSBzdHJpbmdfY2hhcl90cmFpdHM8 Y2hhclQ+LAoJICBjbGFzcyBBbGxvY2F0b3IgPSBhbGxvYyA+CmNsYXNzIGJhc2ljX3N0cmluZwp7 CnByaXZhdGU6CiAgc3RydWN0IFJlcCB7CiAgICBzaXplX3QgbGVuLCByZXMsIHJlZjsKICAgIGJv b2wgc2VsZmlzaDsKICAgIGNoYXJUKiBkYXRhICgpIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8 Y2hhclQgKj4odGhpcyArIDEpOyB9CiAgICBjaGFyVCYgb3BlcmF0b3JbXSAoc2l6ZV90IHMpIHsg cmV0dXJuIGRhdGEgKCkgW3NdOyB9CiAgICBjaGFyVCogZ3JhYiAoKSB7IGlmIChzZWxmaXNoKSBy ZXR1cm4gY2xvbmUgKCk7ICsrcmVmOyByZXR1cm4gZGF0YSAoKTsgfQojIDEwOCAiL2FvbG5ldC9w a2cvZ2NjLTIuOTUuMy9saWIvZ2NjLWxpYi9wb3dlcnBjLWlibS1haXgzLjIuNS8yLjk1LjMvLi4v Li4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGQvYmFzdHJpbmcuaCIgMwogICAgdm9pZCByZWxlYXNl ICgpIHsgaWYgKC0tcmVmID09IDApIGRlbGV0ZSB0aGlzOyB9CiAgICBpbmxpbmUgc3RhdGljIHZv aWQgKiBvcGVyYXRvciBuZXcgKHNpemVfdCwgc2l6ZV90KTsKICAgIGlubGluZSBzdGF0aWMgdm9p ZCBvcGVyYXRvciBkZWxldGUgKHZvaWQgKik7CiAgICBpbmxpbmUgc3RhdGljIFJlcCogY3JlYXRl IChzaXplX3QpOwogICAgY2hhclQqIGNsb25lICgpOwogICAgaW5saW5lIHZvaWQgY29weSAoc2l6 ZV90LCBjb25zdCBjaGFyVCAqLCBzaXplX3QpOwogICAgaW5saW5lIHZvaWQgbW92ZSAoc2l6ZV90 LCBjb25zdCBjaGFyVCAqLCBzaXplX3QpOwogICAgaW5saW5lIHZvaWQgc2V0ICAoc2l6ZV90LCBj b25zdCBjaGFyVCwgICBzaXplX3QpOwogICAgaW5saW5lIHN0YXRpYyBib29sIGV4Y2Vzc19zbG9w IChzaXplX3QsIHNpemVfdCk7CiAgICBpbmxpbmUgc3RhdGljIHNpemVfdCBmcm9iX3NpemUgKHNp emVfdCk7CiAgcHJpdmF0ZToKICAgIFJlcCAmb3BlcmF0b3I9IChjb25zdCBSZXAgJik7CiAgfTsK cHVibGljOgogIHR5cGVkZWYJICAgdHJhaXRzCQl0cmFpdHNfdHlwZTsKICB0eXBlZGVmIHR5cGVu YW1lIHRyYWl0czo6Y2hhcl90eXBlCXZhbHVlX3R5cGU7CiAgdHlwZWRlZgkgICBBbGxvY2F0b3IJ CWFsbG9jYXRvcl90eXBlOwogIHR5cGVkZWYgc2l6ZV90IHNpemVfdHlwZTsKICB0eXBlZGVmIHB0 cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiBjaGFyVCYgcmVmZXJlbmNlOwogIHR5 cGVkZWYgY29uc3QgY2hhclQmIGNvbnN0X3JlZmVyZW5jZTsKICB0eXBlZGVmIGNoYXJUKiBwb2lu dGVyOwogIHR5cGVkZWYgY29uc3QgY2hhclQqIGNvbnN0X3BvaW50ZXI7CiAgdHlwZWRlZiBwb2lu dGVyIGl0ZXJhdG9yOwogIHR5cGVkZWYgY29uc3RfcG9pbnRlciBjb25zdF9pdGVyYXRvcjsKICB0 eXBlZGVmIDo6cmV2ZXJzZV9pdGVyYXRvcjxpdGVyYXRvcj4gcmV2ZXJzZV9pdGVyYXRvcjsKICB0 eXBlZGVmIDo6cmV2ZXJzZV9pdGVyYXRvcjxjb25zdF9pdGVyYXRvcj4gY29uc3RfcmV2ZXJzZV9p dGVyYXRvcjsKICBzdGF0aWMgY29uc3Qgc2l6ZV90eXBlIG5wb3MgPSBzdGF0aWNfY2FzdDxzaXpl X3R5cGU+KC0xKTsKcHJpdmF0ZToKICBSZXAgKnJlcCAoKSBjb25zdCB7IHJldHVybiByZWludGVy cHJldF9jYXN0PFJlcCAqPihkYXQpIC0gMTsgfQogIHZvaWQgcmVwdXAgKFJlcCAqcCkgeyByZXAg KCktPnJlbGVhc2UgKCk7IGRhdCA9IHAtPmRhdGEgKCk7IH0KcHVibGljOgogIGNvbnN0IGNoYXJU KiBkYXRhICgpIGNvbnN0CiAgICB7IHJldHVybiByZXAgKCktPmRhdGEoKTsgfQogIHNpemVfdHlw ZSBsZW5ndGggKCkgY29uc3QKICAgIHsgcmV0dXJuIHJlcCAoKS0+bGVuOyB9CiAgc2l6ZV90eXBl IHNpemUgKCkgY29uc3QKICAgIHsgcmV0dXJuIHJlcCAoKS0+bGVuOyB9CiAgc2l6ZV90eXBlIGNh cGFjaXR5ICgpIGNvbnN0CiAgICB7IHJldHVybiByZXAgKCktPnJlczsgfQogIHNpemVfdHlwZSBt YXhfc2l6ZSAoKSBjb25zdAogICAgeyByZXR1cm4gKG5wb3MgLSAxKS9zaXplb2YgKGNoYXJUKTsg fQkJIAogIGJvb2wgZW1wdHkgKCkgY29uc3QKICAgIHsgcmV0dXJuIHNpemUgKCkgPT0gMDsgfQog IGJhc2ljX3N0cmluZyYgb3BlcmF0b3I9IChjb25zdCBiYXNpY19zdHJpbmcmIHN0cikKICAgIHsK ICAgICAgaWYgKCZzdHIgIT0gdGhpcykgeyByZXAgKCktPnJlbGVhc2UgKCk7IGRhdCA9IHN0ci5y ZXAgKCktPmdyYWIgKCk7IH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQogIGV4cGxpY2l0IGJh c2ljX3N0cmluZyAoKTogZGF0IChuaWxSZXAuZ3JhYiAoKSkgeyB9CiAgYmFzaWNfc3RyaW5nIChj b25zdCBiYXNpY19zdHJpbmcmIHN0cik6IGRhdCAoc3RyLnJlcCAoKS0+Z3JhYiAoKSkgeyB9CiAg YmFzaWNfc3RyaW5nIChjb25zdCBiYXNpY19zdHJpbmcmIHN0ciwgc2l6ZV90eXBlIHBvcywgc2l6 ZV90eXBlIG4gPSBucG9zKQogICAgOiBkYXQgKG5pbFJlcC5ncmFiICgpKSB7IGFzc2lnbiAoc3Ry LCBwb3MsIG4pOyB9CiAgYmFzaWNfc3RyaW5nIChjb25zdCBjaGFyVCogcywgc2l6ZV90eXBlIG4p CiAgICA6IGRhdCAobmlsUmVwLmdyYWIgKCkpIHsgYXNzaWduIChzLCBuKTsgfQogIGJhc2ljX3N0 cmluZyAoY29uc3QgY2hhclQqIHMpCiAgICA6IGRhdCAobmlsUmVwLmdyYWIgKCkpIHsgYXNzaWdu IChzKTsgfQogIGJhc2ljX3N0cmluZyAoc2l6ZV90eXBlIG4sIGNoYXJUIGMpCiAgICA6IGRhdCAo bmlsUmVwLmdyYWIgKCkpIHsgYXNzaWduIChuLCBjKTsgfQogIHRlbXBsYXRlPGNsYXNzIElucHV0 SXRlcmF0b3I+CiAgICBiYXNpY19zdHJpbmcoSW5wdXRJdGVyYXRvciBfX2JlZ2luLCBJbnB1dEl0 ZXJhdG9yIF9fZW5kKQogICAgOiBkYXQgKG5pbFJlcC5ncmFiICgpKSB7IGFzc2lnbiAoX19iZWdp biwgX19lbmQpOyB9CiAgfmJhc2ljX3N0cmluZyAoKQogICAgeyByZXAgKCktPnJlbGVhc2UgKCk7 IH0KICB2b2lkIHN3YXAgKGJhc2ljX3N0cmluZyAmcykgeyBjaGFyVCAqZCA9IGRhdDsgZGF0ID0g cy5kYXQ7IHMuZGF0ID0gZDsgfQogIGJhc2ljX3N0cmluZyYgYXBwZW5kIChjb25zdCBiYXNpY19z dHJpbmcmIHN0ciwgc2l6ZV90eXBlIHBvcyA9IDAsCgkJCXNpemVfdHlwZSBuID0gbnBvcykKICAg IHsgcmV0dXJuIHJlcGxhY2UgKGxlbmd0aCAoKSwgMCwgc3RyLCBwb3MsIG4pOyB9CiAgYmFzaWNf c3RyaW5nJiBhcHBlbmQgKGNvbnN0IGNoYXJUKiBzLCBzaXplX3R5cGUgbikKICAgIHsgcmV0dXJu IHJlcGxhY2UgKGxlbmd0aCAoKSwgMCwgcywgbik7IH0KICBiYXNpY19zdHJpbmcmIGFwcGVuZCAo Y29uc3QgY2hhclQqIHMpCiAgICB7IHJldHVybiBhcHBlbmQgKHMsIHRyYWl0czo6bGVuZ3RoIChz KSk7IH0KICBiYXNpY19zdHJpbmcmIGFwcGVuZCAoc2l6ZV90eXBlIG4sIGNoYXJUIGMpCiAgICB7 IHJldHVybiByZXBsYWNlIChsZW5ndGggKCksIDAsIG4sIGMpOyB9CiAgdGVtcGxhdGU8Y2xhc3Mg SW5wdXRJdGVyYXRvcj4KICAgIGJhc2ljX3N0cmluZyYgYXBwZW5kKElucHV0SXRlcmF0b3IgZmly c3QsIElucHV0SXRlcmF0b3IgbGFzdCkKICAgIHsgcmV0dXJuIHJlcGxhY2UgKGllbmQgKCksIGll bmQgKCksIGZpcnN0LCBsYXN0KTsgfQogIHZvaWQgcHVzaF9iYWNrKGNoYXJUIF9fYykKICB7IGFw cGVuZCgxLCBfX2MpOyB9CiAgCiAgYmFzaWNfc3RyaW5nJiBhc3NpZ24gKGNvbnN0IGJhc2ljX3N0 cmluZyYgc3RyLCBzaXplX3R5cGUgcG9zID0gMCwKCQkJc2l6ZV90eXBlIG4gPSBucG9zKQogICAg eyByZXR1cm4gcmVwbGFjZSAoMCwgbnBvcywgc3RyLCBwb3MsIG4pOyB9CiAgYmFzaWNfc3RyaW5n JiBhc3NpZ24gKGNvbnN0IGNoYXJUKiBzLCBzaXplX3R5cGUgbikKICAgIHsgcmV0dXJuIHJlcGxh Y2UgKDAsIG5wb3MsIHMsIG4pOyB9CiAgYmFzaWNfc3RyaW5nJiBhc3NpZ24gKGNvbnN0IGNoYXJU KiBzKQogICAgeyByZXR1cm4gYXNzaWduIChzLCB0cmFpdHM6Omxlbmd0aCAocykpOyB9CiAgYmFz aWNfc3RyaW5nJiBhc3NpZ24gKHNpemVfdHlwZSBuLCBjaGFyVCBjKQogICAgeyByZXR1cm4gcmVw bGFjZSAoMCwgbnBvcywgbiwgYyk7IH0KICB0ZW1wbGF0ZTxjbGFzcyBJbnB1dEl0ZXJhdG9yPgog ICAgYmFzaWNfc3RyaW5nJiBhc3NpZ24oSW5wdXRJdGVyYXRvciBmaXJzdCwgSW5wdXRJdG