From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 22648 invoked by alias); 14 Oct 2002 19:46:04 -0000 Mailing-List: contact gcc-prs-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-prs-owner@gcc.gnu.org Received: (qmail 22619 invoked by uid 71); 14 Oct 2002 19:46:02 -0000 Resent-Date: 14 Oct 2002 19:46:02 -0000 Resent-Message-ID: <20021014194602.22618.qmail@sources.redhat.com> Resent-From: gcc-gnats@gcc.gnu.org (GNATS Filer) Resent-Cc: gcc-prs@gcc.gnu.org, gcc-bugs@gcc.gnu.org Resent-Reply-To: gcc-gnats@gcc.gnu.org, kalbun@inwind.it Received: (qmail 14974 invoked by uid 61); 14 Oct 2002 19:37:40 -0000 Message-Id: <20021014193740.14973.qmail@sources.redhat.com> Date: Mon, 14 Oct 2002 12:46:00 -0000 From: kalbun@inwind.it Reply-To: kalbun@inwind.it To: gcc-gnats@gcc.gnu.org X-Send-Pr-Version: gnatsweb-2.9.3 (1.1.1.1.2.31) Subject: c++/8226: g++ unable to complete compilation X-SW-Source: 2002-10/txt/msg00549.txt.bz2 List-Id: >Number: 8226 >Category: c++ >Synopsis: g++ unable to complete compilation >Confidential: no >Severity: non-critical >Priority: medium >Responsible: unassigned >State: open >Class: sw-bug >Submitter-Id: net >Arrival-Date: Mon Oct 14 12:46:02 PDT 2002 >Closed-Date: >Last-Modified: >Originator: kalbun@inwind.it >Release: 2.96 >Organization: >Environment: Mandrake linux 8.2 >Description: Compilation of this file only succeeds with optimisation disabled. Using any level beyond zero results in the compilator never terminating the work and allocating an increasing amount of memory (I saw up to 300 Mb before stopping). The problem is systematic. >How-To-Repeat: g++ -DHAVE_CONFIG_H -I. -I/home/sauron/cemento/cemento -I.. -DNDEBUG -DNO_DEBUG -O2 -O0 -Wall -I/usr/include/SDL -I/usr/include/paragui -I/usr/include/freetype2 -fno_exceptions -fno-check-new -fexceptions .c resources.cpp >Fix: Compile with -O0 >Release-Note: >Audit-Trail: >Unformatted: ----gnatsweb-attachment---- Content-Type: application/octet-stream; name="resources.i" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="resources.i" IyA5ICJyZXNvdXJjZXMuY3BwIgojIDEgIi91c3IvaW5jbHVkZS9zdGRpby5oIiAxIDMKIyAyOCAi L3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAz CiMgMjgzICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9zeXMv Y2RlZnMuaCIgMSAzCiMgMjg0ICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMiAzCiMgMzEyICIv dXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9nbnUvc3R1YnMuaCIg MSAzCiMgMzEzICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMiAzCiMgMjkgIi91c3IvaW5jbHVk ZS9zdGRpby5oIiAyIDMKCmV4dGVybiAiQyIgewoKCgojIDEgIi91c3IvbGliL2djYy1saWIvaTU4 Ni1tYW5kcmFrZS1saW51eC1nbnUvMi45Ni9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAxOTkgIi91 c3IvbGliL2djYy1saWIvaTU4Ni1tYW5kcmFrZS1saW51eC1nbnUvMi45Ni9pbmNsdWRlL3N0ZGRl Zi5oIiAzCnR5cGVkZWYgdW5zaWduZWQgaW50IHNpemVfdDsKIyAzNSAiL3Vzci9pbmNsdWRlL3N0 ZGlvLmgiIDIgMwoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAxIDMKIyAyNiAiL3Vz ci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAx IDMKIyAyNyAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMiAzCgoKIyAxICIvdXNyL2xpYi9n Y2MtbGliL2k1ODYtbWFuZHJha2UtbGludXgtZ251LzIuOTYvaW5jbHVkZS9zdGRkZWYuaCIgMSAz CiMgMzAgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDIgMwoKCnR5cGVkZWYgdW5zaWduZWQg Y2hhciBfX3VfY2hhcjsKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBfX3Vfc2hvcnQ7CnR5cGVkZWYg dW5zaWduZWQgaW50IF9fdV9pbnQ7CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBfX3VfbG9uZzsKCgoK CnR5cGVkZWYgc3RydWN0CiAgewogICAgbG9uZyBpbnQgX192YWxbMl07CiAgfSBfX3F1YWRfdDsK dHlwZWRlZiBzdHJ1Y3QKICB7CiAgICBfX3VfbG9uZyBfX3ZhbFsyXTsKICB9IF9fdV9xdWFkX3Q7 Cgp0eXBlZGVmIHNpZ25lZCBjaGFyIF9faW50OF90Owp0eXBlZGVmIHVuc2lnbmVkIGNoYXIgX191 aW50OF90Owp0eXBlZGVmIHNpZ25lZCBzaG9ydCBpbnQgX19pbnQxNl90Owp0eXBlZGVmIHVuc2ln bmVkIHNob3J0IGludCBfX3VpbnQxNl90Owp0eXBlZGVmIHNpZ25lZCBpbnQgX19pbnQzMl90Owp0 eXBlZGVmIHVuc2lnbmVkIGludCBfX3VpbnQzMl90OwoKCgoKdHlwZWRlZiBfX3F1YWRfdCAqX19x YWRkcl90OwoKdHlwZWRlZiBfX3VfcXVhZF90IF9fZGV2X3Q7CnR5cGVkZWYgX191X2ludCBfX3Vp ZF90Owp0eXBlZGVmIF9fdV9pbnQgX19naWRfdDsKdHlwZWRlZiBfX3VfbG9uZyBfX2lub190Owp0 eXBlZGVmIF9fdV9pbnQgX19tb2RlX3Q7CnR5cGVkZWYgX191X2ludCBfX25saW5rX3Q7CnR5cGVk ZWYgbG9uZyBpbnQgX19vZmZfdDsKdHlwZWRlZiBfX3F1YWRfdCBfX2xvZmZfdDsKdHlwZWRlZiBp bnQgX19waWRfdDsKdHlwZWRlZiBpbnQgX19zc2l6ZV90Owp0eXBlZGVmIF9fdV9sb25nIF9fcmxp bV90Owp0eXBlZGVmIF9fdV9xdWFkX3QgX19ybGltNjRfdDsKdHlwZWRlZiBfX3VfaW50IF9faWRf dDsKCnR5cGVkZWYgc3RydWN0CiAgewogICAgaW50IF9fdmFsWzJdOwogIH0gX19mc2lkX3Q7CgoK dHlwZWRlZiBpbnQgX19kYWRkcl90Owp0eXBlZGVmIGNoYXIgKl9fY2FkZHJfdDsKdHlwZWRlZiBs b25nIGludCBfX3RpbWVfdDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX191c2Vjb25kc190Owp0eXBl ZGVmIGxvbmcgaW50IF9fc3VzZWNvbmRzX3Q7CnR5cGVkZWYgbG9uZyBpbnQgX19zd2Jsa190OwoK dHlwZWRlZiBsb25nIGludCBfX2Nsb2NrX3Q7CgoKdHlwZWRlZiBpbnQgX19jbG9ja2lkX3Q7CgoK dHlwZWRlZiBpbnQgX190aW1lcl90OwoKCgoKCgp0eXBlZGVmIGludCBfX2tleV90OwoKCnR5cGVk ZWYgdW5zaWduZWQgc2hvcnQgaW50IF9faXBjX3BpZF90OwoKCgp0eXBlZGVmIGxvbmcgaW50IF9f Ymxrc2l6ZV90OwoKCgoKdHlwZWRlZiBsb25nIGludCBfX2Jsa2NudF90Owp0eXBlZGVmIF9fcXVh ZF90IF9fYmxrY250NjRfdDsKCgp0eXBlZGVmIF9fdV9sb25nIF9fZnNibGtjbnRfdDsKdHlwZWRl ZiBfX3VfcXVhZF90IF9fZnNibGtjbnQ2NF90OwoKCnR5cGVkZWYgX191X2xvbmcgX19mc2ZpbGNu dF90Owp0eXBlZGVmIF9fdV9xdWFkX3QgX19mc2ZpbGNudDY0X3Q7CgoKdHlwZWRlZiBfX3VfcXVh ZF90IF9faW5vNjRfdDsKCgp0eXBlZGVmIF9fbG9mZl90IF9fb2ZmNjRfdDsKCgp0eXBlZGVmIGxv bmcgaW50IF9fdF9zY2FsYXJfdDsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCBfX3RfdXNjYWxh cl90OwoKCnR5cGVkZWYgaW50IF9faW50cHRyX3Q7CgoKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX19z b2NrbGVuX3Q7CgoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3B0aHJlYWR0eXBlcy5oIiAxIDMK IyAyMyAiL3Vzci9pbmNsdWRlL2JpdHMvcHRocmVhZHR5cGVzLmgiIDMKIyAxICIvdXNyL2luY2x1 ZGUvYml0cy9zY2hlZC5oIiAxIDMKIyA2OCAiL3Vzci9pbmNsdWRlL2JpdHMvc2NoZWQuaCIgMwpz dHJ1Y3QgX19zY2hlZF9wYXJhbQogIHsKICAgIGludCBfX3NjaGVkX3ByaW9yaXR5OwogIH07CiMg MjQgIi91c3IvaW5jbHVkZS9iaXRzL3B0aHJlYWR0eXBlcy5oIiAyIDMKCgpzdHJ1Y3QgX3B0aHJl YWRfZmFzdGxvY2sKewogIGxvbmcgaW50IF9fc3RhdHVzOwogIGludCBfX3NwaW5sb2NrOwoKfTsK CgoKdHlwZWRlZiBzdHJ1Y3QgX3B0aHJlYWRfZGVzY3Jfc3RydWN0ICpfcHRocmVhZF9kZXNjcjsK CgoKCgp0eXBlZGVmIHN0cnVjdCBfX3B0aHJlYWRfYXR0cl9zCnsKICBpbnQgX19kZXRhY2hzdGF0 ZTsKICBpbnQgX19zY2hlZHBvbGljeTsKICBzdHJ1Y3QgX19zY2hlZF9wYXJhbSBfX3NjaGVkcGFy YW07CiAgaW50IF9faW5oZXJpdHNjaGVkOwogIGludCBfX3Njb3BlOwogIHNpemVfdCBfX2d1YXJk c2l6ZTsKICBpbnQgX19zdGFja2FkZHJfc2V0OwogIHZvaWQgKl9fc3RhY2thZGRyOwogIHNpemVf dCBfX3N0YWNrc2l6ZTsKfSBwdGhyZWFkX2F0dHJfdDsKCgoKdHlwZWRlZiBzdHJ1Y3QKewogIHN0 cnVjdCBfcHRocmVhZF9mYXN0bG9jayBfX2NfbG9jazsKICBfcHRocmVhZF9kZXNjciBfX2Nfd2Fp dGluZzsKfSBwdGhyZWFkX2NvbmRfdDsKCgoKdHlwZWRlZiBzdHJ1Y3QKewogIGludCBfX2R1bW15 Owp9IHB0aHJlYWRfY29uZGF0dHJfdDsKCgp0eXBlZGVmIHVuc2lnbmVkIGludCBwdGhyZWFkX2tl eV90OwoKCgoKCnR5cGVkZWYgc3RydWN0CnsKICBpbnQgX19tX3Jlc2VydmVkOwogIGludCBfX21f Y291bnQ7CiAgX3B0aHJlYWRfZGVzY3IgX19tX293bmVyOwogIGludCBfX21fa2luZDsKICBzdHJ1 Y3QgX3B0aHJlYWRfZmFzdGxvY2sgX19tX2xvY2s7Cn0gcHRocmVhZF9tdXRleF90OwoKCgp0eXBl ZGVmIHN0cnVjdAp7CiAgaW50IF9fbXV0ZXhraW5kOwp9IHB0aHJlYWRfbXV0ZXhhdHRyX3Q7CgoK CnR5cGVkZWYgaW50IHB0aHJlYWRfb25jZV90OwojIDE0MCAiL3Vzci9pbmNsdWRlL2JpdHMvcHRo cmVhZHR5cGVzLmgiIDMKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCBwdGhyZWFkX3Q7CiMgMTQ0 ICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAyIDMKIyAzNyAiL3Vzci9pbmNsdWRlL3N0ZGlv LmgiIDIgMwojIDQ1ICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIgMwp0eXBlZGVmIHN0cnVjdCBfSU9f RklMRSBGSUxFOwojIDU1ICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIgMwp0eXBlZGVmIHN0cnVjdCBf SU9fRklMRSBfX0ZJTEU7CiMgNjUgIi91c3IvaW5jbHVkZS9zdGRpby5oIiAzCiMgMSAiL3Vzci9p bmNsdWRlL2xpYmlvLmgiIDEgMwojIDMyICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwojIDEgIi91 c3IvaW5jbHVkZS9fR19jb25maWcuaCIgMSAzCiMgOSAiL3Vzci9pbmNsdWRlL19HX2NvbmZpZy5o IiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMSAzCiMgMTAgIi91c3IvaW5jbHVk ZS9fR19jb25maWcuaCIgMiAzCgoKCgojIDEgIi91c3IvbGliL2djYy1saWIvaTU4Ni1tYW5kcmFr ZS1saW51eC1nbnUvMi45Ni9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAzMTIgIi91c3IvbGliL2dj Yy1saWIvaTU4Ni1tYW5kcmFrZS1saW51eC1nbnUvMi45Ni9pbmNsdWRlL3N0ZGRlZi5oIiAzCnR5 cGVkZWYgdW5zaWduZWQgaW50IHdpbnRfdDsKIyAxNSAiL3Vzci9pbmNsdWRlL19HX2NvbmZpZy5o IiAyIDMKIyAyNCAiL3Vzci9pbmNsdWRlL19HX2NvbmZpZy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRl L3djaGFyLmgiIDEgMwojIDQ4ICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMwojIDEgIi91c3IvbGli L2djYy1saWIvaTU4Ni1tYW5kcmFrZS1saW51eC1nbnUvMi45Ni9pbmNsdWRlL3N0ZGRlZi5oIiAx IDMKIyA0OSAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDIgMwoKIyAxICIvdXNyL2luY2x1ZGUvYml0 cy93Y2hhci5oIiAxIDMKIyA1MSAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDIgMwojIDY3ICIvdXNy L2luY2x1ZGUvd2NoYXIuaCIgMwp0eXBlZGVmIHN0cnVjdAp7CiAgaW50IF9fY291bnQ7CiAgdW5p b24KICB7CiAgICB3aW50X3QgX193Y2g7CiAgICBjaGFyIF9fd2NoYls0XTsKICB9IF9fdmFsdWU7 Cn0gX19tYnN0YXRlX3Q7CiMgMjUgIi91c3IvaW5jbHVkZS9fR19jb25maWcuaCIgMiAzCgp0eXBl ZGVmIHN0cnVjdAp7CiAgX19vZmZfdCBfX3BvczsKICBfX21ic3RhdGVfdCBfX3N0YXRlOwp9IF9H X2Zwb3NfdDsKdHlwZWRlZiBzdHJ1Y3QKewogIF9fb2ZmNjRfdCBfX3BvczsKICBfX21ic3RhdGVf dCBfX3N0YXRlOwp9IF9HX2Zwb3M2NF90OwojIDQ0ICIvdXNyL2luY2x1ZGUvX0dfY29uZmlnLmgi IDMKIyAxICIvdXNyL2luY2x1ZGUvZ2NvbnYuaCIgMSAzCiMgMjYgIi91c3IvaW5jbHVkZS9nY29u di5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDEgMwojIDI3ICIvdXNyL2luY2x1 ZGUvZ2NvbnYuaCIgMiAzCgojIDEgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAxIDMKIyA0OCAiL3Vz ci9pbmNsdWRlL3djaGFyLmgiIDMKIyAxICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtbWFuZHJha2Ut bGludXgtZ251LzIuOTYvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgNDkgIi91c3IvaW5jbHVkZS93 Y2hhci5oIiAyIDMKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvd2NoYXIuaCIgMSAzCiMgNTEgIi91 c3IvaW5jbHVkZS93Y2hhci5oIiAyIDMKIyAyOSAiL3Vzci9pbmNsdWRlL2djb252LmgiIDIgMwoK CiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxpbnV4LWdudS8yLjk2L2luY2x1 ZGUvc3RkZGVmLmgiIDEgMwojIDMyICIvdXNyL2luY2x1ZGUvZ2NvbnYuaCIgMiAzCgoKCgoKZW51 bQp7CiAgX19HQ09OVl9PSyA9IDAsCiAgX19HQ09OVl9OT0NPTlYsCiAgX19HQ09OVl9OT0RCLAog IF9fR0NPTlZfTk9NRU0sCgogIF9fR0NPTlZfRU1QVFlfSU5QVVQsCiAgX19HQ09OVl9GVUxMX09V VFBVVCwKICBfX0dDT05WX0lMTEVHQUxfSU5QVVQsCiAgX19HQ09OVl9JTkNPTVBMRVRFX0lOUFVU LAoKICBfX0dDT05WX0lMTEVHQUxfREVTQ1JJUFRPUiwKICBfX0dDT05WX0lOVEVSTkFMX0VSUk9S Cn07CgoKCmVudW0KewogIF9fR0NPTlZfSVNfTEFTVCA9IDB4MDAwMSwKICBfX0dDT05WX0lHTk9S RV9FUlJPUlMgPSAweDAwMDIKfTsKCgoKc3RydWN0IF9fZ2NvbnZfc3RlcDsKc3RydWN0IF9fZ2Nv bnZfc3RlcF9kYXRhOwpzdHJ1Y3QgX19nY29udl9sb2FkZWRfb2JqZWN0OwpzdHJ1Y3QgX19nY29u dl90cmFuc19kYXRhOwoKCgp0eXBlZGVmIGludCAoKl9fZ2NvbnZfZmN0KSAoc3RydWN0IF9fZ2Nv bnZfc3RlcCAqLCBzdHJ1Y3QgX19nY29udl9zdGVwX2RhdGEgKiwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKiosIGNvbnN0IHVuc2lnbmVkIGNoYXIgKiwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKiosIHNpemVfdCAqLCBp bnQsIGludCk7CgoKdHlwZWRlZiBpbnQgKCpfX2djb252X2luaXRfZmN0KSAoc3RydWN0IF9fZ2Nv bnZfc3RlcCAqKTsKdHlwZWRlZiB2b2lkICgqX19nY29udl9lbmRfZmN0KSAoc3RydWN0IF9fZ2Nv bnZfc3RlcCAqKTsKCgoKdHlwZWRlZiBpbnQgKCpfX2djb252X3RyYW5zX2ZjdCkgKHN0cnVjdCBf X2djb252X3N0ZXAgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBf X2djb252X3N0ZXBfZGF0YSAqLCB2b2lkICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICoqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqLCB1bnNpZ25lZCBjaGFyICoqLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICopOwoKCnR5cGVkZWYgaW50ICgqX19nY29u dl90cmFuc19jb250ZXh0X2ZjdCkgKHZvaWQgKiwgY29uc3QgdW5zaWduZWQgY2hhciAqLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFy ICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNo YXIgKiwgdW5zaWduZWQgY2hhciAqKTsKCgp0eXBlZGVmIGludCAoKl9fZ2NvbnZfdHJhbnNfcXVl cnlfZmN0KSAoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICoqKiwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqKTsKCgp0eXBlZGVmIGludCAoKl9fZ2NvbnZf dHJhbnNfaW5pdF9mY3QpICh2b2lkICoqLCBjb25zdCBjaGFyICopOwp0eXBlZGVmIHZvaWQgKCpf X2djb252X3RyYW5zX2VuZF9mY3QpICh2b2lkICopOwoKc3RydWN0IF9fZ2NvbnZfdHJhbnNfZGF0 YQp7CgogIF9fZ2NvbnZfdHJhbnNfZmN0IF9fdHJhbnNfZmN0OwogIF9fZ2NvbnZfdHJhbnNfY29u dGV4dF9mY3QgX190cmFuc19jb250ZXh0X2ZjdDsKICBfX2djb252X3RyYW5zX2VuZF9mY3QgX190 cmFuc19lbmRfZmN0OwogIHZvaWQgKl9fZGF0YTsKICBzdHJ1Y3QgX19nY29udl90cmFuc19kYXRh ICpfX25leHQ7Cn07CgoKCnN0cnVjdCBfX2djb252X3N0ZXAKewogIHN0cnVjdCBfX2djb252X2xv YWRlZF9vYmplY3QgKl9fc2hsaWJfaGFuZGxlOwogIGNvbnN0IGNoYXIgKl9fbW9kbmFtZTsKCiAg aW50IF9fY291bnRlcjsKCiAgY2hhciAqX19mcm9tX25hbWU7CiAgY2hhciAqX190b19uYW1lOwoK ICBfX2djb252X2ZjdCBfX2ZjdDsKICBfX2djb252X2luaXRfZmN0IF9faW5pdF9mY3Q7CiAgX19n Y29udl9lbmRfZmN0IF9fZW5kX2ZjdDsKCgoKICBpbnQgX19taW5fbmVlZGVkX2Zyb207CiAgaW50 IF9fbWF4X25lZWRlZF9mcm9tOwogIGludCBfX21pbl9uZWVkZWRfdG87CiAgaW50IF9fbWF4X25l ZWRlZF90bzsKCgogIGludCBfX3N0YXRlZnVsOwoKICB2b2lkICpfX2RhdGE7Cn07CgoKCnN0cnVj dCBfX2djb252X3N0ZXBfZGF0YQp7CiAgdW5zaWduZWQgY2hhciAqX19vdXRidWY7CiAgdW5zaWdu ZWQgY2hhciAqX19vdXRidWZlbmQ7CgoKCiAgaW50IF9fZmxhZ3M7CgoKCiAgaW50IF9faW52b2Nh dGlvbl9jb3VudGVyOwoKCgogIGludCBfX2ludGVybmFsX3VzZTsKCiAgX19tYnN0YXRlX3QgKl9f c3RhdGVwOwogIF9fbWJzdGF0ZV90IF9fc3RhdGU7CgoKCiAgc3RydWN0IF9fZ2NvbnZfdHJhbnNf ZGF0YSAqX190cmFuczsKfTsKCgoKdHlwZWRlZiBzdHJ1Y3QgX19nY29udl9pbmZvCnsKICBzaXpl X3QgX19uc3RlcHM7CiAgc3RydWN0IF9fZ2NvbnZfc3RlcCAqX19zdGVwczsKICAgICAgICAgICAg ICAgIHN0cnVjdCBfX2djb252X3N0ZXBfZGF0YSBfX2RhdGEgWzFdOwp9ICpfX2djb252X3Q7CiMg NDUgIi91c3IvaW5jbHVkZS9fR19jb25maWcuaCIgMiAzCnR5cGVkZWYgdW5pb24KewogIHN0cnVj dCBfX2djb252X2luZm8gX19jZDsKICBzdHJ1Y3QKICB7CiAgICBzdHJ1Y3QgX19nY29udl9pbmZv IF9fY2Q7CiAgICBzdHJ1Y3QgX19nY29udl9zdGVwX2RhdGEgX19kYXRhOwogIH0gX19jb21iaW5l ZDsKfSBfR19pY29udl90OwoKdHlwZWRlZiBpbnQgX0dfaW50MTZfdCA7CnR5cGVkZWYgaW50IF9H X2ludDMyX3QgOwp0eXBlZGVmIHVuc2lnbmVkIGludCBfR191aW50MTZfdCA7CnR5cGVkZWYgdW5z aWduZWQgaW50IF9HX3VpbnQzMl90IDsKIyAzMyAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDIgMwoj IDUzICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwojIDEgIi91c3IvbGliL2djYy1saWIvaTU4Ni1t YW5kcmFrZS1saW51eC1nbnUvMi45Ni9pbmNsdWRlL3N0ZGFyZy5oIiAxIDMKIyA0MyAiL3Vzci9s aWIvZ2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxpbnV4LWdudS8yLjk2L2luY2x1ZGUvc3RkYXJnLmgi IDMKdHlwZWRlZiBfX2J1aWx0aW5fdmFfbGlzdCBfX2dudWNfdmFfbGlzdDsKIyA1NCAiL3Vzci9p bmNsdWRlL2xpYmlvLmgiIDIgMwojIDE2MCAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKc3RydWN0 IF9JT19qdW1wX3Q7IHN0cnVjdCBfSU9fRklMRTsKIyAxNzAgIi91c3IvaW5jbHVkZS9saWJpby5o IiAzCnR5cGVkZWYgdm9pZCBfSU9fbG9ja190OwoKCgoKCnN0cnVjdCBfSU9fbWFya2VyIHsKICBz dHJ1Y3QgX0lPX21hcmtlciAqX25leHQ7CiAgc3RydWN0IF9JT19GSUxFICpfc2J1ZjsKCgoKICBp bnQgX3BvczsKIyAxOTMgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCn07CgoKZW51bSBfX2NvZGVj dnRfcmVzdWx0CnsKICBfX2NvZGVjdnRfb2ssCiAgX19jb2RlY3Z0X3BhcnRpYWwsCiAgX19jb2Rl Y3Z0X2Vycm9yLAogIF9fY29kZWN2dF9ub2NvbnYKfTsKIyAyNjEgIi91c3IvaW5jbHVkZS9saWJp by5oIiAzCnN0cnVjdCBfSU9fRklMRSB7CiAgaW50IF9mbGFnczsKCgoKCiAgY2hhciogX0lPX3Jl YWRfcHRyOwogIGNoYXIqIF9JT19yZWFkX2VuZDsKICBjaGFyKiBfSU9fcmVhZF9iYXNlOwogIGNo YXIqIF9JT193cml0ZV9iYXNlOwogIGNoYXIqIF9JT193cml0ZV9wdHI7CiAgY2hhciogX0lPX3dy aXRlX2VuZDsKICBjaGFyKiBfSU9fYnVmX2Jhc2U7CiAgY2hhciogX0lPX2J1Zl9lbmQ7CgogIGNo YXIgKl9JT19zYXZlX2Jhc2U7CiAgY2hhciAqX0lPX2JhY2t1cF9iYXNlOwogIGNoYXIgKl9JT19z YXZlX2VuZDsKCiAgc3RydWN0IF9JT19tYXJrZXIgKl9tYXJrZXJzOwoKICBzdHJ1Y3QgX0lPX0ZJ TEUgKl9jaGFpbjsKCiAgaW50IF9maWxlbm87CiAgaW50IF9ibGtzaXplOwogIF9fb2ZmX3QgX29s ZF9vZmZzZXQ7CgoKCiAgdW5zaWduZWQgc2hvcnQgX2N1cl9jb2x1bW47CiAgc2lnbmVkIGNoYXIg X3Z0YWJsZV9vZmZzZXQ7CiAgY2hhciBfc2hvcnRidWZbMV07CgoKCiAgX0lPX2xvY2tfdCAqX2xv Y2s7CiMgMzA1ICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwogIF9fb2ZmNjRfdCBfb2Zmc2V0OwoK CgoKCiAgdm9pZCAqX19wYWQxOwogIHZvaWQgKl9fcGFkMjsKCiAgaW50IF9tb2RlOwoKICBjaGFy IF91bnVzZWQyWzE1ICogc2l6ZW9mIChpbnQpIC0gMiAqIHNpemVvZiAodm9pZCAqKV07Cgp9OwoK CgoKCnN0cnVjdCBfSU9fRklMRV9wbHVzOwoKZXh0ZXJuIHN0cnVjdCBfSU9fRklMRV9wbHVzIF9J T18yXzFfc3RkaW5fOwpleHRlcm4gc3RydWN0IF9JT19GSUxFX3BsdXMgX0lPXzJfMV9zdGRvdXRf OwpleHRlcm4gc3RydWN0IF9JT19GSUxFX3BsdXMgX0lPXzJfMV9zdGRlcnJfOwojIDM0NCAiL3Vz ci9pbmNsdWRlL2xpYmlvLmgiIDMKdHlwZWRlZiBfX3NzaXplX3QgX19pb19yZWFkX2ZuICh2b2lk ICpfX2Nvb2tpZSwgY2hhciAqX19idWYsIHNpemVfdCBfX25ieXRlcyk7CgoKCgoKCgp0eXBlZGVm IF9fc3NpemVfdCBfX2lvX3dyaXRlX2ZuICh2b2lkICpfX2Nvb2tpZSwgY29uc3QgY2hhciAqX19i dWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX24pOwoKCgoKCgoK dHlwZWRlZiBpbnQgX19pb19zZWVrX2ZuICh2b2lkICpfX2Nvb2tpZSwgX19vZmY2NF90ICpfX3Bv cywgaW50IF9fdyk7CgoKdHlwZWRlZiBpbnQgX19pb19jbG9zZV9mbiAodm9pZCAqX19jb29raWUp OwojIDM5MyAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKZXh0ZXJuICJDIiB7CgoKZXh0ZXJuIGlu dCBfX3VuZGVyZmxvdyAoX0lPX0ZJTEUgKikgOwpleHRlcm4gaW50IF9fdWZsb3cgKF9JT19GSUxF ICopIDsKZXh0ZXJuIGludCBfX292ZXJmbG93IChfSU9fRklMRSAqLCBpbnQpIDsKZXh0ZXJuIHdp bnRfdCBfX3d1bmRlcmZsb3cgKF9JT19GSUxFICopIDsKZXh0ZXJuIHdpbnRfdCBfX3d1ZmxvdyAo X0lPX0ZJTEUgKikgOwpleHRlcm4gd2ludF90IF9fd292ZXJmbG93IChfSU9fRklMRSAqLCB3aW50 X3QpIDsKIyA0MjYgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCmV4dGVybiBpbnQgX0lPX2dldGMg KF9JT19GSUxFICpfX2ZwKSA7CmV4dGVybiBpbnQgX0lPX3B1dGMgKGludCBfX2MsIF9JT19GSUxF ICpfX2ZwKSA7CmV4dGVybiBpbnQgX0lPX2Zlb2YgKF9JT19GSUxFICpfX2ZwKSA7CmV4dGVybiBp bnQgX0lPX2ZlcnJvciAoX0lPX0ZJTEUgKl9fZnApIDsKCmV4dGVybiBpbnQgX0lPX3BlZWtjX2xv Y2tlZCAoX0lPX0ZJTEUgKl9fZnApIDsKCgoKCgpleHRlcm4gdm9pZCBfSU9fZmxvY2tmaWxlIChf SU9fRklMRSAqKSA7CmV4dGVybiB2b2lkIF9JT19mdW5sb2NrZmlsZSAoX0lPX0ZJTEUgKikgOwpl eHRlcm4gaW50IF9JT19mdHJ5bG9ja2ZpbGUgKF9JT19GSUxFICopIDsKIyA0NTYgIi91c3IvaW5j bHVkZS9saWJpby5oIiAzCmV4dGVybiBpbnQgX0lPX3Zmc2NhbmYgKF9JT19GSUxFICogLCBjb25z dCBjaGFyICogLAogICAgICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCwgaW50ICop IDsKZXh0ZXJuIGludCBfSU9fdmZwcmludGYgKF9JT19GSUxFICosIGNvbnN0IGNoYXIgKiwKICAg ICAgICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0KSA7CmV4dGVybiBfX3NzaXplX3Qg X0lPX3BhZG4gKF9JT19GSUxFICosIGludCwgX19zc2l6ZV90KSA7CmV4dGVybiBzaXplX3QgX0lP X3NnZXRuIChfSU9fRklMRSAqLCB2b2lkICosIHNpemVfdCkgOwoKZXh0ZXJuIF9fb2ZmNjRfdCBf SU9fc2Vla29mZiAoX0lPX0ZJTEUgKiwgX19vZmY2NF90LCBpbnQsIGludCkgOwpleHRlcm4gX19v ZmY2NF90IF9JT19zZWVrcG9zIChfSU9fRklMRSAqLCBfX29mZjY0X3QsIGludCkgOwoKZXh0ZXJu IHZvaWQgX0lPX2ZyZWVfYmFja3VwX2FyZWEgKF9JT19GSUxFICopIDsKIyA1MTQgIi91c3IvaW5j bHVkZS9saWJpby5oIiAzCn0KIyA2NiAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDIgMwojIDgwICIv dXNyL2luY2x1ZGUvc3RkaW8uaCIgMwp0eXBlZGVmIF9HX2Zwb3NfdCBmcG9zX3Q7CiMgMTI5ICIv dXNyL2luY2x1ZGUvc3RkaW8uaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3N0ZGlvX2xpbS5o IiAxIDMKIyAxMzAgIi91c3IvaW5jbHVkZS9zdGRpby5oIiAyIDMKCgoKZXh0ZXJuIEZJTEUgKnN0 ZGluOwpleHRlcm4gRklMRSAqc3Rkb3V0OwpleHRlcm4gRklMRSAqc3RkZXJyOwojIDE0NCAiL3Vz ci9pbmNsdWRlL3N0ZGlvLmgiIDMKZXh0ZXJuIGludCByZW1vdmUgKGNvbnN0IGNoYXIgKl9fZmls ZW5hbWUpIDsKCmV4dGVybiBpbnQgcmVuYW1lIChjb25zdCBjaGFyICpfX29sZCwgY29uc3QgY2hh ciAqX19uZXcpIDsKCgoKCmV4dGVybiBGSUxFICp0bXBmaWxlICh2b2lkKSA7CiMgMTYzICIvdXNy L2luY2x1ZGUvc3RkaW8uaCIgMwpleHRlcm4gY2hhciAqdG1wbmFtIChjaGFyICpfX3MpIDsKCgoK CmV4dGVybiBjaGFyICp0bXBuYW1fciAoY2hhciAqX19zKSA7CiMgMTgwICIvdXNyL2luY2x1ZGUv c3RkaW8uaCIgMwpleHRlcm4gY2hhciAqdGVtcG5hbSAoY29uc3QgY2hhciAqX19kaXIsIGNvbnN0 IGNoYXIgKl9fcGZ4KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKCgpleHRl cm4gaW50IGZjbG9zZSAoRklMRSAqX19zdHJlYW0pIDsKCmV4dGVybiBpbnQgZmZsdXNoIChGSUxF ICpfX3N0cmVhbSkgOwoKCgpleHRlcm4gaW50IGZmbHVzaF91bmxvY2tlZCAoRklMRSAqX19zdHJl YW0pIDsKIyAyMDMgIi91c3IvaW5jbHVkZS9zdGRpby5oIiAzCmV4dGVybiBGSUxFICpmb3BlbiAo Y29uc3QgY2hhciAqIF9fZmlsZW5hbWUsCiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAq IF9fbW9kZXMpIDsKCmV4dGVybiBGSUxFICpmcmVvcGVuIChjb25zdCBjaGFyICogX19maWxlbmFt ZSwKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKiBfX21vZGVzLAogICAgICAgICAg ICAgICAgICAgICAgRklMRSAqIF9fc3RyZWFtKSA7CiMgMjMzICIvdXNyL2luY2x1ZGUvc3RkaW8u aCIgMwpleHRlcm4gRklMRSAqZmRvcGVuIChpbnQgX19mZCwgY29uc3QgY2hhciAqX19tb2Rlcykg OwojIDI1NiAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDMKZXh0ZXJuIHZvaWQgc2V0YnVmIChGSUxF ICogX19zdHJlYW0sIGNoYXIgKiBfX2J1ZikgOwoKCgpleHRlcm4gaW50IHNldHZidWYgKEZJTEUg KiBfX3N0cmVhbSwgY2hhciAqIF9fYnVmLAogICAgICAgICAgICAgICAgICAgIGludCBfX21vZGVz LCBzaXplX3QgX19uKSA7CgoKCgpleHRlcm4gdm9pZCBzZXRidWZmZXIgKEZJTEUgKiBfX3N0cmVh bSwgY2hhciAqIF9fYnVmLAogICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX3NpemUpIDsK CgpleHRlcm4gdm9pZCBzZXRsaW5lYnVmIChGSUxFICpfX3N0cmVhbSkgOwoKCgoKZXh0ZXJuIGlu dCBmcHJpbnRmIChGSUxFICogX19zdHJlYW0sCiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hh ciAqIF9fZm9ybWF0LCAuLi4pIDsKCmV4dGVybiBpbnQgcHJpbnRmIChjb25zdCBjaGFyICogX19m b3JtYXQsIC4uLikgOwoKZXh0ZXJuIGludCBzcHJpbnRmIChjaGFyICogX19zLAogICAgICAgICAg ICAgICAgICAgIGNvbnN0IGNoYXIgKiBfX2Zvcm1hdCwgLi4uKSA7CgoKZXh0ZXJuIGludCB2ZnBy aW50ZiAoRklMRSAqIF9fcywgY29uc3QgY2hhciAqIF9fZm9ybWF0LAogICAgICAgICAgICAgICAg ICAgICBfX2dudWNfdmFfbGlzdCBfX2FyZykgOwoKZXh0ZXJuIGludCB2cHJpbnRmIChjb25zdCBj aGFyICogX19mb3JtYXQsIF9fZ251Y192YV9saXN0IF9fYXJnKQogICAgICAgICAgICA7CgpleHRl cm4gaW50IHZzcHJpbnRmIChjaGFyICogX19zLCBjb25zdCBjaGFyICogX19mb3JtYXQsCiAgICAg ICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0IF9fYXJnKSA7CgoKCmV4dGVybiBpbnQgc25w cmludGYgKGNoYXIgKiBfX3MsIHNpemVfdCBfX21heGxlbiwKICAgICAgICAgICAgICAgICAgICAg Y29uc3QgY2hhciAqIF9fZm9ybWF0LCAuLi4pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCmV4dGVybiBpbnQgdnNucHJpbnRmIChj aGFyICogX19zLCBzaXplX3QgX19tYXhsZW4sCiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBj aGFyICogX19mb3JtYXQsIF9fZ251Y192YV9saXN0IF9fYXJnKQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiMgMzI3ICIvdXNyL2lu Y2x1ZGUvc3RkaW8uaCIgMwpleHRlcm4gaW50IGZzY2FuZiAoRklMRSAqIF9fc3RyZWFtLAogICAg ICAgICAgICAgICAgICAgY29uc3QgY2hhciAqIF9fZm9ybWF0LCAuLi4pIDsKCmV4dGVybiBpbnQg c2NhbmYgKGNvbnN0IGNoYXIgKiBfX2Zvcm1hdCwgLi4uKSA7CgpleHRlcm4gaW50IHNzY2FuZiAo Y29uc3QgY2hhciAqIF9fcywKICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKiBfX2Zvcm1h dCwgLi4uKSA7CiMgMzUzICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIgMwpleHRlcm4gaW50IGZnZXRj IChGSUxFICpfX3N0cmVhbSkgOwpleHRlcm4gaW50IGdldGMgKEZJTEUgKl9fc3RyZWFtKSA7CgoK ZXh0ZXJuIGludCBnZXRjaGFyICh2b2lkKSA7CgoKCgoKCgpleHRlcm4gaW50IGdldGNfdW5sb2Nr ZWQgKEZJTEUgKl9fc3RyZWFtKSA7CmV4dGVybiBpbnQgZ2V0Y2hhcl91bmxvY2tlZCAodm9pZCkg OwoKCgoKZXh0ZXJuIGludCBmZ2V0Y191bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pIDsKCgoKCmV4 dGVybiBpbnQgZnB1dGMgKGludCBfX2MsIEZJTEUgKl9fc3RyZWFtKSA7CmV4dGVybiBpbnQgcHV0 YyAoaW50IF9fYywgRklMRSAqX19zdHJlYW0pIDsKCgpleHRlcm4gaW50IHB1dGNoYXIgKGludCBf X2MpIDsKCgoKCgoKCmV4dGVybiBpbnQgZnB1dGNfdW5sb2NrZWQgKGludCBfX2MsIEZJTEUgKl9f c3RyZWFtKSA7CgoKCgpleHRlcm4gaW50IHB1dGNfdW5sb2NrZWQgKGludCBfX2MsIEZJTEUgKl9f c3RyZWFtKSA7CmV4dGVybiBpbnQgcHV0Y2hhcl91bmxvY2tlZCAoaW50IF9fYykgOwoKCgoKCmV4 dGVybiBpbnQgZ2V0dyAoRklMRSAqX19zdHJlYW0pIDsKCgpleHRlcm4gaW50IHB1dHcgKGludCBf X3csIEZJTEUgKl9fc3RyZWFtKSA7CgoKCgpleHRlcm4gY2hhciAqZmdldHMgKGNoYXIgKiBfX3Ms IGludCBfX24sIEZJTEUgKiBfX3N0cmVhbSkKICAgICAgICAgICAgOwojIDQxOSAiL3Vzci9pbmNs dWRlL3N0ZGlvLmgiIDMKZXh0ZXJuIGNoYXIgKmdldHMgKGNoYXIgKl9fcykgOwojIDQ0MyAiL3Vz ci9pbmNsdWRlL3N0ZGlvLmgiIDMKZXh0ZXJuIGludCBmcHV0cyAoY29uc3QgY2hhciAqIF9fcywg RklMRSAqIF9fc3RyZWFtKQogICAgICAgICAgICA7CiMgNDUzICIvdXNyL2luY2x1ZGUvc3RkaW8u aCIgMwpleHRlcm4gaW50IHB1dHMgKGNvbnN0IGNoYXIgKl9fcykgOwoKCgpleHRlcm4gaW50IHVu Z2V0YyAoaW50IF9fYywgRklMRSAqX19zdHJlYW0pIDsKCgoKZXh0ZXJuIHNpemVfdCBmcmVhZCAo dm9pZCAqIF9fcHRyLCBzaXplX3QgX19zaXplLAogICAgICAgICAgICAgICAgICAgICBzaXplX3Qg X19uLCBGSUxFICogX19zdHJlYW0pIDsKCmV4dGVybiBzaXplX3QgZndyaXRlIChjb25zdCB2b2lk ICogX19wdHIsIHNpemVfdCBfX3NpemUsCiAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19u LCBGSUxFICogX19zKSA7CgoKCmV4dGVybiBzaXplX3QgZnJlYWRfdW5sb2NrZWQgKHZvaWQgKiBf X3B0ciwgc2l6ZV90IF9fc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90 IF9fbiwgRklMRSAqIF9fc3RyZWFtKSA7CmV4dGVybiBzaXplX3QgZndyaXRlX3VubG9ja2VkIChj b25zdCB2b2lkICogX19wdHIsIHNpemVfdCBfX3NpemUsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBzaXplX3QgX19uLCBGSUxFICogX19zdHJlYW0pIDsKCgoKCmV4dGVybiBpbnQgZnNl ZWsgKEZJTEUgKl9fc3RyZWFtLCBsb25nIGludCBfX29mZiwgaW50IF9fd2hlbmNlKSA7CgpleHRl cm4gbG9uZyBpbnQgZnRlbGwgKEZJTEUgKl9fc3RyZWFtKSA7CgpleHRlcm4gdm9pZCByZXdpbmQg KEZJTEUgKl9fc3RyZWFtKSA7CiMgNDk3ICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIgMwpleHRlcm4g aW50IGZnZXRwb3MgKEZJTEUgKiBfX3N0cmVhbSwgZnBvc190ICogX19wb3MpCiAgICAgICAgICAg IDsKCmV4dGVybiBpbnQgZnNldHBvcyAoRklMRSAqX19zdHJlYW0sIGNvbnN0IGZwb3NfdCAqX19w b3MpIDsKIyA1MzMgIi91c3IvaW5jbHVkZS9zdGRpby5oIiAzCmV4dGVybiB2b2lkIGNsZWFyZXJy IChGSUxFICpfX3N0cmVhbSkgOwoKZXh0ZXJuIGludCBmZW9mIChGSUxFICpfX3N0cmVhbSkgOwoK ZXh0ZXJuIGludCBmZXJyb3IgKEZJTEUgKl9fc3RyZWFtKSA7CgoKCmV4dGVybiB2b2lkIGNsZWFy ZXJyX3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkgOwpleHRlcm4gaW50IGZlb2ZfdW5sb2NrZWQg KEZJTEUgKl9fc3RyZWFtKSA7CmV4dGVybiBpbnQgZmVycm9yX3VubG9ja2VkIChGSUxFICpfX3N0 cmVhbSkgOwoKCgoKZXh0ZXJuIHZvaWQgcGVycm9yIChjb25zdCBjaGFyICpfX3MpIDsKCgoKCmV4 dGVybiBpbnQgc3lzX25lcnI7CmV4dGVybiBjb25zdCBjaGFyICpjb25zdCBzeXNfZXJybGlzdFtd OwojIDU2NCAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDMKZXh0ZXJuIGludCBmaWxlbm8gKEZJTEUg Kl9fc3RyZWFtKSA7CgoKCgpleHRlcm4gaW50IGZpbGVub191bmxvY2tlZCAoRklMRSAqX19zdHJl YW0pIDsKCgoKCgoKZXh0ZXJuIEZJTEUgKnBvcGVuIChjb25zdCBjaGFyICpfX2NvbW1hbmQsIGNv bnN0IGNoYXIgKl9fbW9kZXMpIDsKCgpleHRlcm4gaW50IHBjbG9zZSAoRklMRSAqX19zdHJlYW0p IDsKCgoKCgpleHRlcm4gY2hhciAqY3Rlcm1pZCAoY2hhciAqX19zKSA7CiMgNjExICIvdXNyL2lu Y2x1ZGUvc3RkaW8uaCIgMwpleHRlcm4gdm9pZCBmbG9ja2ZpbGUgKEZJTEUgKl9fc3RyZWFtKSA7 CgoKCmV4dGVybiBpbnQgZnRyeWxvY2tmaWxlIChGSUxFICpfX3N0cmVhbSkgOwoKCmV4dGVybiB2 b2lkIGZ1bmxvY2tmaWxlIChGSUxFICpfX3N0cmVhbSkgOwojIDYzNSAiL3Vzci9pbmNsdWRlL3N0 ZGlvLmgiIDMKfQojIDEwICJyZXNvdXJjZXMuY3BwIiAyCiMgMSAicmVzb3VyY2VzLmgiIDEKIyAx MiAicmVzb3VyY2VzLmgiCiMgMSAiL3Vzci9pbmNsdWRlL2crKy0zL3N0cmluZyIgMSAzCgoKCgoK IyAxICIvdXNyL2luY2x1ZGUvZysrLTMvc3RkL2Jhc3RyaW5nLmgiIDEgMwojIDM1ICIvdXNyL2lu Y2x1ZGUvZysrLTMvc3RkL2Jhc3RyaW5nLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZysrLTMvY3N0 ZGRlZiIgMSAzCgoKCgoKIyAxICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtbWFuZHJha2UtbGludXgt Z251LzIuOTYvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMTQ3ICIvdXNyL2xpYi9nY2MtbGliL2k1 ODYtbWFuZHJha2UtbGludXgtZ251LzIuOTYvaW5jbHVkZS9zdGRkZWYuaCIgMwp0eXBlZGVmIGlu dCBwdHJkaWZmX3Q7CiMgNyAiL3Vzci9pbmNsdWRlL2crKy0zL2NzdGRkZWYiIDIgMwojIDM2ICIv dXNyL2luY2x1ZGUvZysrLTMvc3RkL2Jhc3RyaW5nLmgiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9n KystMy9zdGQvc3RyYWl0cy5oIiAxIDMKIyAzNiAiL3Vzci9pbmNsdWRlL2crKy0zL3N0ZC9zdHJh aXRzLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZysrLTMvY3N0ZGRlZiIgMSAzCiMgMzcgIi91c3Iv aW5jbHVkZS9nKystMy9zdGQvc3RyYWl0cy5oIiAyIDMKCmV4dGVybiAiQysrIiB7CnRlbXBsYXRl IDxjbGFzcyBjaGFyVD4Kc3RydWN0IHN0cmluZ19jaGFyX3RyYWl0cyB7CiAgdHlwZWRlZiBjaGFy VCBjaGFyX3R5cGU7CgoKCiAgc3RhdGljIHZvaWQgYXNzaWduIChjaGFyX3R5cGUmIGMxLCBjb25z dCBjaGFyX3R5cGUmIGMyKQogICAgeyBjMSA9IGMyOyB9CiAgc3RhdGljIGJvb2wgZXEgKGNvbnN0 IGNoYXJfdHlwZSYgYzEsIGNvbnN0IGNoYXJfdHlwZSYgYzIpCiAgICB7IHJldHVybiAoYzEgPT0g YzIpOyB9CiAgc3RhdGljIGJvb2wgbmUgKGNvbnN0IGNoYXJfdHlwZSYgYzEsIGNvbnN0IGNoYXJf dHlwZSYgYzIpCiAgICB7IHJldHVybiAhKGMxID09IGMyKTsgfQogIHN0YXRpYyBib29sIGx0IChj b25zdCBjaGFyX3R5cGUmIGMxLCBjb25zdCBjaGFyX3R5cGUmIGMyKQogICAgeyByZXR1cm4gKGMx IDwgYzIpOyB9CiAgc3RhdGljIGNoYXJfdHlwZSBlb3MgKCkgeyByZXR1cm4gY2hhcl90eXBlKCk7 IH0KICBzdGF0aWMgYm9vbCBpc19kZWwoY2hhcl90eXBlIGEpIHsgcmV0dXJuIDA7IH0KCgoKCiAg c3RhdGljIGludCBjb21wYXJlIChjb25zdCBjaGFyX3R5cGUqIHMxLCBjb25zdCBjaGFyX3R5cGUq IHMyLCBzaXplX3QgbikKICAgIHsKICAgICAgc2l6ZV90IGk7CiAgICAgIGZvciAoaSA9IDA7IGkg PCBuOyArK2kpCiAgICAgICAgaWYgKG5lIChzMVtpXSwgczJbaV0pKQogICAgICAgICAgcmV0dXJu IGx0IChzMVtpXSwgczJbaV0pID8gLTEgOiAxOwoKICAgICAgcmV0dXJuIDA7CiAgICB9CgogIHN0 YXRpYyBzaXplX3QgbGVuZ3RoIChjb25zdCBjaGFyX3R5cGUqIHMpCiAgICB7CiAgICAgIHNpemVf dCBsID0gMDsKICAgICAgd2hpbGUgKG5lICgqcysrLCBlb3MgKCkpKQogICAgICAgICsrbDsKICAg ICAgcmV0dXJuIGw7CiAgICB9CgogIHN0YXRpYyBjaGFyX3R5cGUqIGNvcHkgKGNoYXJfdHlwZSog czEsIGNvbnN0IGNoYXJfdHlwZSogczIsIHNpemVfdCBuKQogICAgewogICAgICBmb3IgKDsgbi0t OyApCiAgICAgICAgYXNzaWduIChzMVtuXSwgczJbbl0pOwogICAgICByZXR1cm4gczE7CiAgICB9 CgogIHN0YXRpYyBjaGFyX3R5cGUqIG1vdmUgKGNoYXJfdHlwZSogczEsIGNvbnN0IGNoYXJfdHlw ZSogczIsIHNpemVfdCBuKQogICAgewogICAgICBjaGFyX3R5cGUgYVtuXTsKICAgICAgc2l6ZV90 IGk7CiAgICAgIGZvciAoaSA9IDA7IGkgPCBuOyArK2kpCiAgICAgICAgYXNzaWduIChhW2ldLCBz MltpXSk7CiAgICAgIGZvciAoaSA9IDA7IGkgPCBuOyArK2kpCiAgICAgICAgYXNzaWduIChzMVtp XSwgYVtpXSk7CiAgICAgIHJldHVybiBzMTsKICAgIH0KCiAgc3RhdGljIGNoYXJfdHlwZSogc2V0 IChjaGFyX3R5cGUqIHMxLCBjb25zdCBjaGFyX3R5cGUmIGMsIHNpemVfdCBuKQogICAgewogICAg ICBmb3IgKDsgbi0tOyApCiAgICAgICAgYXNzaWduIChzMVtuXSwgYyk7CiAgICAgIHJldHVybiBz MTsKICAgIH0KfTsKCmNsYXNzIGlzdHJlYW07CmNsYXNzIG9zdHJlYW07CiMgMSAiL3Vzci9pbmNs dWRlL2crKy0zL2NjdHlwZSIgMSAzCgoKCgoKIyAxICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIgMSAz CiMgMjYgIi91c3IvaW5jbHVkZS9jdHlwZS5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVz LmgiIDEgMwojIDI3ICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRl L2JpdHMvdHlwZXMuaCIgMSAzCiMgMjggIi91c3IvaW5jbHVkZS9jdHlwZS5oIiAyIDMKCmV4dGVy biAiQyIgewojIDQwICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9l bmRpYW4uaCIgMSAzCiMgMjIgIi91c3IvaW5jbHVkZS9lbmRpYW4uaCIgMwojIDEgIi91c3IvaW5j bHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAyMyAiL3Vzci9pbmNsdWRlL2VuZGlhbi5oIiAyIDMKIyAz NyAiL3Vzci9pbmNsdWRlL2VuZGlhbi5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvZW5kaWFu LmgiIDEgMwojIDM4ICIvdXNyL2luY2x1ZGUvZW5kaWFuLmgiIDIgMwojIDQxICIvdXNyL2luY2x1 ZGUvY3R5cGUuaCIgMiAzCgoKCgoKCmVudW0KewogIF9JU3VwcGVyID0gKCgwKSA8IDggPyAoKDEg PDwgKDApKSA8PCA4KSA6ICgoMSA8PCAoMCkpID4+IDgpKSwKICBfSVNsb3dlciA9ICgoMSkgPCA4 ID8gKCgxIDw8ICgxKSkgPDwgOCkgOiAoKDEgPDwgKDEpKSA+PiA4KSksCiAgX0lTYWxwaGEgPSAo KDIpIDwgOCA/ICgoMSA8PCAoMikpIDw8IDgpIDogKCgxIDw8ICgyKSkgPj4gOCkpLAogIF9JU2Rp Z2l0ID0gKCgzKSA8IDggPyAoKDEgPDwgKDMpKSA8PCA4KSA6ICgoMSA8PCAoMykpID4+IDgpKSwK ICBfSVN4ZGlnaXQgPSAoKDQpIDwgOCA/ICgoMSA8PCAoNCkpIDw8IDgpIDogKCgxIDw8ICg0KSkg Pj4gOCkpLAogIF9JU3NwYWNlID0gKCg1KSA8IDggPyAoKDEgPDwgKDUpKSA8PCA4KSA6ICgoMSA8 PCAoNSkpID4+IDgpKSwKICBfSVNwcmludCA9ICgoNikgPCA4ID8gKCgxIDw8ICg2KSkgPDwgOCkg OiAoKDEgPDwgKDYpKSA+PiA4KSksCiAgX0lTZ3JhcGggPSAoKDcpIDwgOCA/ICgoMSA8PCAoNykp IDw8IDgpIDogKCgxIDw8ICg3KSkgPj4gOCkpLAogIF9JU2JsYW5rID0gKCg4KSA8IDggPyAoKDEg PDwgKDgpKSA8PCA4KSA6ICgoMSA8PCAoOCkpID4+IDgpKSwKICBfSVNjbnRybCA9ICgoOSkgPCA4 ID8gKCgxIDw8ICg5KSkgPDwgOCkgOiAoKDEgPDwgKDkpKSA+PiA4KSksCiAgX0lTcHVuY3QgPSAo KDEwKSA8IDggPyAoKDEgPDwgKDEwKSkgPDwgOCkgOiAoKDEgPDwgKDEwKSkgPj4gOCkpLAogIF9J U2FsbnVtID0gKCgxMSkgPCA4ID8gKCgxIDw8ICgxMSkpIDw8IDgpIDogKCgxIDw8ICgxMSkpID4+ IDgpKQp9OwojIDc1ICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIgMwpleHRlcm4gY29uc3QgdW5zaWdu ZWQgc2hvcnQgaW50ICpfX2N0eXBlX2I7CmV4dGVybiBjb25zdCBfX2ludDMyX3QgKl9fY3R5cGVf dG9sb3dlcjsKZXh0ZXJuIGNvbnN0IF9faW50MzJfdCAqX19jdHlwZV90b3VwcGVyOwojIDkxICIv dXNyL2luY2x1ZGUvY3R5cGUuaCIgMwpleHRlcm4gaW50IGlzYWxudW0gKGludCkgOwpleHRlcm4g aW50IGlzYWxwaGEgKGludCkgOwpleHRlcm4gaW50IGlzY250cmwgKGludCkgOwpleHRlcm4gaW50 IGlzZGlnaXQgKGludCkgOwpleHRlcm4gaW50IGlzbG93ZXIgKGludCkgOwpleHRlcm4gaW50IGlz Z3JhcGggKGludCkgOwpleHRlcm4gaW50IGlzcHJpbnQgKGludCkgOwpleHRlcm4gaW50IGlzcHVu Y3QgKGludCkgOwpleHRlcm4gaW50IGlzc3BhY2UgKGludCkgOwpleHRlcm4gaW50IGlzdXBwZXIg KGludCkgOwpleHRlcm4gaW50IGlzeGRpZ2l0IChpbnQpIDsKCgoKCgoKCmV4dGVybiBpbnQgdG9s b3dlciAoaW50IF9fYykgOwoKCmV4dGVybiBpbnQgdG91cHBlciAoaW50IF9fYykgOwoKCgoKCgpl eHRlcm4gaW50IGlzYXNjaWkgKGludCBfX2MpIDsKCgoKZXh0ZXJuIGludCB0b2FzY2lpIChpbnQg X19jKSA7CgoKCmV4dGVybiBpbnQgX3RvdXBwZXIgKGludCkgOwpleHRlcm4gaW50IF90b2xvd2Vy IChpbnQpIDsKIyAyNzYgIi91c3IvaW5jbHVkZS9jdHlwZS5oIiAzCn0KIyA3ICIvdXNyL2luY2x1 ZGUvZysrLTMvY2N0eXBlIiAyIDMKIyAxMDYgIi91c3IvaW5jbHVkZS9nKystMy9zdGQvc3RyYWl0 cy5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvZysrLTMvY3N0cmluZyIgMSAzCgoKCgoKCiMgMSAi L3Vzci9pbmNsdWRlL3N0cmluZy5oIiAxIDMKIyAyNiAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAz CiMgMSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDEgMwojIDI3ICIvdXNyL2luY2x1ZGUvc3Ry aW5nLmgiIDIgMwoKZXh0ZXJuICJDIiB7CgoKCgojIDEgIi91c3IvbGliL2djYy1saWIvaTU4Ni1t YW5kcmFrZS1saW51eC1nbnUvMi45Ni9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAzNCAiL3Vzci9p bmNsdWRlL3N0cmluZy5oIiAyIDMKCgoKZXh0ZXJuIHZvaWQgKm1lbWNweSAodm9pZCAqIF9fZGVz dCwKICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqIF9fc3JjLCBzaXplX3QgX19uKSA7 CgoKZXh0ZXJuIHZvaWQgKm1lbW1vdmUgKHZvaWQgKl9fZGVzdCwgY29uc3Qgdm9pZCAqX19zcmMs IHNpemVfdCBfX24pCiAgICAgICAgICAgIDsKCgoKCgpleHRlcm4gdm9pZCAqbWVtY2NweSAodm9p ZCAqIF9fZGVzdCwgY29uc3Qgdm9pZCAqIF9fc3JjLAogICAgICAgICAgICAgICAgICAgICAgaW50 IF9fYywgc2l6ZV90IF9fbikKICAgICAgICAgICAgOwoKCgoKZXh0ZXJuIHZvaWQgKm1lbXNldCAo dm9pZCAqX19zLCBpbnQgX19jLCBzaXplX3QgX19uKSA7CgoKZXh0ZXJuIGludCBtZW1jbXAgKGNv bnN0IHZvaWQgKl9fczEsIGNvbnN0IHZvaWQgKl9fczIsIHNpemVfdCBfX24pCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICA7CgoKZXh0ZXJuIHZvaWQgKm1lbWNociAoY29uc3Qgdm9pZCAq X19zLCBpbnQgX19jLCBzaXplX3QgX19uKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IDsKIyA3NyAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAzCmV4dGVybiBjaGFyICpzdHJjcHkgKGNo YXIgKiBfX2Rlc3QsIGNvbnN0IGNoYXIgKiBfX3NyYykKICAgICAgICAgICAgOwoKZXh0ZXJuIGNo YXIgKnN0cm5jcHkgKGNoYXIgKiBfX2Rlc3QsCiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBj aGFyICogX19zcmMsIHNpemVfdCBfX24pIDsKCgpleHRlcm4gY2hhciAqc3RyY2F0IChjaGFyICog X19kZXN0LCBjb25zdCBjaGFyICogX19zcmMpCiAgICAgICAgICAgIDsKCmV4dGVybiBjaGFyICpz dHJuY2F0IChjaGFyICogX19kZXN0LCBjb25zdCBjaGFyICogX19zcmMsCiAgICAgICAgICAgICAg ICAgICAgICBzaXplX3QgX19uKSA7CgoKZXh0ZXJuIGludCBzdHJjbXAgKGNvbnN0IGNoYXIgKl9f czEsIGNvbnN0IGNoYXIgKl9fczIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7Cgpl eHRlcm4gaW50IHN0cm5jbXAgKGNvbnN0IGNoYXIgKl9fczEsIGNvbnN0IGNoYXIgKl9fczIsIHNp emVfdCBfX24pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKZXh0ZXJuIGludCBz dHJjb2xsIChjb25zdCBjaGFyICpfX3MxLCBjb25zdCBjaGFyICpfX3MyKQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgOwoKZXh0ZXJuIHNpemVfdCBzdHJ4ZnJtIChjaGFyICogX19kZXN0 LAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKiBfX3NyYywgc2l6ZV90IF9fbikg OwojIDEyMCAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAzCmV4dGVybiBjaGFyICpzdHJkdXAgKGNv bnN0IGNoYXIgKl9fcykgOwojIDE1NSAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAzCmV4dGVybiBj aGFyICpzdHJjaHIgKGNvbnN0IGNoYXIgKl9fcywgaW50IF9fYykgOwoKZXh0ZXJuIGNoYXIgKnN0 cnJjaHIgKGNvbnN0IGNoYXIgKl9fcywgaW50IF9fYykgOwojIDE2NyAiL3Vzci9pbmNsdWRlL3N0 cmluZy5oIiAzCmV4dGVybiBzaXplX3Qgc3RyY3NwbiAoY29uc3QgY2hhciAqX19zLCBjb25zdCBj aGFyICpfX3JlamVjdCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgpleHRlcm4g c2l6ZV90IHN0cnNwbiAoY29uc3QgY2hhciAqX19zLCBjb25zdCBjaGFyICpfX2FjY2VwdCkKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCmV4dGVybiBjaGFyICpzdHJwYnJrIChjb25z dCBjaGFyICpfX3MsIGNvbnN0IGNoYXIgKl9fYWNjZXB0KQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgOwoKZXh0ZXJuIGNoYXIgKnN0cnN0ciAoY29uc3QgY2hhciAqX19oYXlzdGFjaywg Y29uc3QgY2hhciAqX19uZWVkbGUpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiMg MTg3ICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDMKZXh0ZXJuIGNoYXIgKnN0cnRvayAoY2hhciAq IF9fcywgY29uc3QgY2hhciAqIF9fZGVsaW0pCiAgICAgICAgICAgIDsKCgoKZXh0ZXJuIGNoYXIg Kl9fc3RydG9rX3IgKGNoYXIgKiBfX3MsCiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBj aGFyICogX19kZWxpbSwKICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKiogX19zYXZlX3B0 cikgOwoKZXh0ZXJuIGNoYXIgKnN0cnRva19yIChjaGFyICogX19zLCBjb25zdCBjaGFyICogX19k ZWxpbSwKICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqIF9fc2F2ZV9wdHIpIDsKIyAyMTgg Ii91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMwpleHRlcm4gc2l6ZV90IHN0cmxlbiAoY29uc3QgY2hh ciAqX19zKSA7CiMgMjI5ICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDMKZXh0ZXJuIGNoYXIgKnN0 cmVycm9yIChpbnQgX19lcnJudW0pIDsKCgoKZXh0ZXJuIGNoYXIgKnN0cmVycm9yX3IgKGludCBf X2Vycm51bSwgY2hhciAqX19idWYsIHNpemVfdCBfX2J1ZmxlbikgOwoKCgoKZXh0ZXJuIHZvaWQg X19iemVybyAodm9pZCAqX19zLCBzaXplX3QgX19uKSA7CgoKCmV4dGVybiB2b2lkIGJjb3B5IChj b25zdCB2b2lkICpfX3NyYywgdm9pZCAqX19kZXN0LCBzaXplX3QgX19uKSA7CgoKZXh0ZXJuIHZv aWQgYnplcm8gKHZvaWQgKl9fcywgc2l6ZV90IF9fbikgOwoKCmV4dGVybiBpbnQgYmNtcCAoY29u c3Qgdm9pZCAqX19zMSwgY29uc3Qgdm9pZCAqX19zMiwgc2l6ZV90IF9fbikKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIDsKCgpleHRlcm4gY2hhciAqaW5kZXggKGNvbnN0IGNoYXIgKl9f cywgaW50IF9fYykgOwoKCmV4dGVybiBjaGFyICpyaW5kZXggKGNvbnN0IGNoYXIgKl9fcywgaW50 IF9fYykgOwoKCgpleHRlcm4gaW50IGZmcyAoaW50IF9faSkgOwojIDI3MiAiL3Vzci9pbmNsdWRl L3N0cmluZy5oIiAzCmV4dGVybiBpbnQgc3RyY2FzZWNtcCAoY29uc3QgY2hhciAqX19zMSwgY29u c3QgY2hhciAqX19zMikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgpleHRlcm4g aW50IHN0cm5jYXNlY21wIChjb25zdCBjaGFyICpfX3MxLCBjb25zdCBjaGFyICpfX3MyLCBzaXpl X3QgX19uKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwojIDI5NCAiL3Vzci9pbmNs dWRlL3N0cmluZy5oIiAzCmV4dGVybiBjaGFyICpzdHJzZXAgKGNoYXIgKiogX19zdHJpbmdwLAog ICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICogX19kZWxpbSkgOwojIDM2NCAiL3Vzci9p bmNsdWRlL3N0cmluZy5oIiAzCn0KIyA4ICIvdXNyL2luY2x1ZGUvZysrLTMvY3N0cmluZyIgMiAz CiMgMTA3ICIvdXNyL2luY2x1ZGUvZysrLTMvc3RkL3N0cmFpdHMuaCIgMiAzCgpzdHJ1Y3Qgc3Ry aW5nX2NoYXJfdHJhaXRzIDxjaGFyPiB7CiAgdHlwZWRlZiBjaGFyIGNoYXJfdHlwZTsKCiAgc3Rh dGljIHZvaWQgYXNzaWduIChjaGFyX3R5cGUmIGMxLCBjb25zdCBjaGFyX3R5cGUmIGMyKQogICAg eyBjMSA9IGMyOyB9CiAgc3RhdGljIGJvb2wgZXEgKGNvbnN0IGNoYXJfdHlwZSAmIGMxLCBjb25z dCBjaGFyX3R5cGUmIGMyKQogICAgeyByZXR1cm4gKGMxID09IGMyKTsgfQogIHN0YXRpYyBib29s IG5lIChjb25zdCBjaGFyX3R5cGUmIGMxLCBjb25zdCBjaGFyX3R5cGUmIGMyKQogICAgeyByZXR1 cm4gKGMxICE9IGMyKTsgfQogIHN0YXRpYyBib29sIGx0IChjb25zdCBjaGFyX3R5cGUmIGMxLCBj b25zdCBjaGFyX3R5cGUmIGMyKQogICAgeyByZXR1cm4gKGMxIDwgYzIpOyB9CiAgc3RhdGljIGNo YXJfdHlwZSBlb3MgKCkgeyByZXR1cm4gMDsgfQogIHN0YXRpYyBib29sIGlzX2RlbChjaGFyX3R5 cGUgYSkgeyByZXR1cm4gKF9fY3R5cGVfYlsoaW50KSAoKGEpKV0gJiAodW5zaWduZWQgc2hvcnQg aW50KSBfSVNzcGFjZSk7IH0KCiAgc3RhdGljIGludCBjb21wYXJlIChjb25zdCBjaGFyX3R5cGUq IHMxLCBjb25zdCBjaGFyX3R5cGUqIHMyLCBzaXplX3QgbikKICAgIHsgcmV0dXJuIG1lbWNtcCAo czEsIHMyLCBuKTsgfQogIHN0YXRpYyBzaXplX3QgbGVuZ3RoIChjb25zdCBjaGFyX3R5cGUqIHMp CiAgICB7IHJldHVybiBzdHJsZW4gKHMpOyB9CiAgc3RhdGljIGNoYXJfdHlwZSogY29weSAoY2hh cl90eXBlKiBzMSwgY29uc3QgY2hhcl90eXBlKiBzMiwgc2l6ZV90IG4pCiAgICB7IHJldHVybiAo Y2hhcl90eXBlKikgbWVtY3B5IChzMSwgczIsIG4pOyB9CiAgc3RhdGljIGNoYXJfdHlwZSogbW92 ZSAoY2hhcl90eXBlKiBzMSwgY29uc3QgY2hhcl90eXBlKiBzMiwgc2l6ZV90IG4pCiAgICB7IHJl dHVybiAoY2hhcl90eXBlKikgbWVtbW92ZSAoczEsIHMyLCBuKTsgfQogIHN0YXRpYyBjaGFyX3R5 cGUqIHNldCAoY2hhcl90eXBlKiBzMSwgY29uc3QgY2hhcl90eXBlJiBjLCBzaXplX3QgbikKICAg IHsgcmV0dXJuIChjaGFyX3R5cGUqKSBtZW1zZXQgKHMxLCBjLCBuKTsgfQp9OwojIDE2MCAiL3Vz ci9pbmNsdWRlL2crKy0zL3N0ZC9zdHJhaXRzLmgiIDMKfQojIDM3ICIvdXNyL2luY2x1ZGUvZysr LTMvc3RkL2Jhc3RyaW5nLmgiIDIgMwoKCiMgMSAiL3Vzci9pbmNsdWRlL2crKy0zL2FsbG9jLmgi IDEgMwojIDE4ICIvdXNyL2luY2x1ZGUvZysrLTMvYWxsb2MuaCIgMwojIDEgIi91c3IvaW5jbHVk ZS9nKystMy9zdGxfY29uZmlnLmgiIDEgMwojIDE5ICIvdXNyL2luY2x1ZGUvZysrLTMvYWxsb2Mu aCIgMiAzCgoKIyAxICIvdXNyL2luY2x1ZGUvZysrLTMvc3RsX2FsbG9jLmgiIDEgMwojIDQ1ICIv dXNyL2luY2x1ZGUvZysrLTMvc3RsX2FsbG9jLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZysrLTMv aW9zdHJlYW0uaCIgMSAzCiMgMzEgIi91c3IvaW5jbHVkZS9nKystMy9pb3N0cmVhbS5oIiAzCiMg MSAiL3Vzci9pbmNsdWRlL2crKy0zL3N0cmVhbWJ1Zi5oIiAxIDMKIyAzNSAiL3Vzci9pbmNsdWRl L2crKy0zL3N0cmVhbWJ1Zi5oIiAzCmV4dGVybiAiQyIgewojIDEgIi91c3IvaW5jbHVkZS9saWJp by5oIiAxIDMKIyAzNyAiL3Vzci9pbmNsdWRlL2crKy0zL3N0cmVhbWJ1Zi5oIiAyIDMKfQoKCiMg MSAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxpbnV4LWdudS8yLjk2L2luY2x1ZGUv c3RkYXJnLmgiIDEgMwojIDExMCAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxpbnV4 LWdudS8yLjk2L2luY2x1ZGUvc3RkYXJnLmgiIDMKdHlwZWRlZiBfX2dudWNfdmFfbGlzdCB2YV9s aXN0OwojIDQxICIvdXNyL2luY2x1ZGUvZysrLTMvc3RyZWFtYnVmLmgiIDIgMwojIDY1ICIvdXNy L2luY2x1ZGUvZysrLTMvc3RyZWFtYnVmLmgiIDMKZXh0ZXJuICJDKysiIHsKY2xhc3MgaXN0cmVh bTsKY2xhc3Mgb3N0cmVhbTsgY2xhc3Mgc3RyZWFtYnVmOwoKCgoKCgp0eXBlZGVmIF9fb2ZmNjRf dCBzdHJlYW1vZmY7CnR5cGVkZWYgX19vZmY2NF90IHN0cmVhbXBvczsKCgoKCnR5cGVkZWYgX19z c2l6ZV90IHN0cmVhbXNpemU7Cgp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgX19mbXRmbGFnczsKdHlw ZWRlZiB1bnNpZ25lZCBjaGFyIF9faW9zdGF0ZTsKCnN0cnVjdCBfaW9zX2ZpZWxkcwp7CiAgICBz dHJlYW1idWYgKl9zdHJidWY7CiAgICBvc3RyZWFtKiBfdGllOwogICAgaW50IF93aWR0aDsKICAg IF9fZm10ZmxhZ3MgX2ZsYWdzOwogICAgd2NoYXJfdCBfZmlsbDsKICAgIF9faW9zdGF0ZSBfc3Rh dGU7CiAgICBfX2lvc3RhdGUgX2V4Y2VwdGlvbnM7CiAgICBpbnQgX3ByZWNpc2lvbjsKCiAgICB2 b2lkICpfYXJyYXlzOwp9OwojIDEyNiAiL3Vzci9pbmNsdWRlL2crKy0zL3N0cmVhbWJ1Zi5oIiAz CmNsYXNzIGlvcyA6IHB1YmxpYyBfaW9zX2ZpZWxkcyB7CiAgaW9zJiBvcGVyYXRvcj0oaW9zJik7 CiAgaW9zIChjb25zdCBpb3MmKTsKICBwdWJsaWM6CiAgICB0eXBlZGVmIF9fZm10ZmxhZ3MgZm10 ZmxhZ3M7CiAgICB0eXBlZGVmIGludCBpb3N0YXRlOwogICAgdHlwZWRlZiBpbnQgb3Blbm1vZGU7 CiAgICB0eXBlZGVmIF9fc3NpemVfdCBzdHJlYW1zaXplOwogICAgZW51bSBpb19zdGF0ZSB7CiAg ICAgICAgZ29vZGJpdCA9IDAsCiAgICAgICAgZW9mYml0ID0gMSwKICAgICAgICBmYWlsYml0ID0g MiwKICAgICAgICBiYWRiaXQgPSA0IH07CiAgICBlbnVtIG9wZW5fbW9kZSB7CiAgICAgICAgaW4g PSAxLAogICAgICAgIG91dCA9IDIsCiAgICAgICAgYXRlID0gNCwKICAgICAgICBhcHAgPSA4LAog ICAgICAgIHRydW5jID0gMTYsCiAgICAgICAgbm9jcmVhdGUgPSAzMiwKICAgICAgICBub3JlcGxh Y2UgPSA2NCwKICAgICAgICBiaW4gPSAxMjgsCiAgICAgICAgYmluYXJ5ID0gMTI4IH07CiAgICBl bnVtIHNlZWtfZGlyIHsgYmVnLCBjdXIsIGVuZH07CiAgICB0eXBlZGVmIGVudW0gc2Vla19kaXIg c2Vla2RpcjsKCiAgICBlbnVtIHsgc2tpcHdzPTAxLAogICAgICAgICAgIGxlZnQ9MDIsIHJpZ2h0 PTA0LCBpbnRlcm5hbD0wMTAsCiAgICAgICAgICAgZGVjPTAyMCwgb2N0PTA0MCwgaGV4PTAxMDAs CiAgICAgICAgICAgc2hvd2Jhc2U9MDIwMCwgc2hvd3BvaW50PTA0MDAsCiAgICAgICAgICAgdXBw ZXJjYXNlPTAxMDAwLCBzaG93cG9zPTAyMDAwLAogICAgICAgICAgIHNjaWVudGlmaWM9MDQwMDAs IGZpeGVkPTAxMDAwMCwKICAgICAgICAgICB1bml0YnVmPTAyMDAwMCwgc3RkaW89MDQwMDAwCgoK CiAgICAgICAgICAgfTsKICAgIGVudW0gewogICAgICAgIGJhc2VmaWVsZD1kZWMrb2N0K2hleCwK ICAgICAgICBmbG9hdGZpZWxkID0gc2NpZW50aWZpYytmaXhlZCwKICAgICAgICBhZGp1c3RmaWVs ZCA9IGxlZnQrcmlnaHQraW50ZXJuYWwKICAgIH07CiMgMTc5ICIvdXNyL2luY2x1ZGUvZysrLTMv c3RyZWFtYnVmLmgiIDMKICAgIG9zdHJlYW0qIHRpZSgpIGNvbnN0IHsgcmV0dXJuIF90aWU7IH0K ICAgIG9zdHJlYW0qIHRpZShvc3RyZWFtKiB2YWwpIHsgb3N0cmVhbSogc2F2ZT1fdGllOyBfdGll PXZhbDsgcmV0dXJuIHNhdmU7IH0KCgogICAgd2NoYXJfdCBmaWxsKCkgY29uc3QgeyByZXR1cm4g X2ZpbGw7IH0KICAgIHdjaGFyX3QgZmlsbCh3Y2hhcl90IG5ld2YpCiAgICAgICAge3djaGFyX3Qg b2xkZiA9IF9maWxsOyBfZmlsbCA9IG5ld2Y7IHJldHVybiBvbGRmO30KICAgIGZtdGZsYWdzIGZs YWdzKCkgY29uc3QgeyByZXR1cm4gX2ZsYWdzOyB9CiAgICBmbXRmbGFncyBmbGFncyhmbXRmbGFn cyBuZXdfdmFsKSB7CiAgICAgICAgZm10ZmxhZ3Mgb2xkX3ZhbCA9IF9mbGFnczsgX2ZsYWdzID0g bmV3X3ZhbDsgcmV0dXJuIG9sZF92YWw7IH0KICAgIGludCBwcmVjaXNpb24oKSBjb25zdCB7IHJl dHVybiBfcHJlY2lzaW9uOyB9CiAgICBpbnQgcHJlY2lzaW9uKGludCBuZXdwKSB7CiAgICAgICAg dW5zaWduZWQgc2hvcnQgb2xkcCA9IF9wcmVjaXNpb247IF9wcmVjaXNpb24gPSAodW5zaWduZWQg c2hvcnQpbmV3cDsKICAgICAgICByZXR1cm4gb2xkcDsgfQogICAgZm10ZmxhZ3Mgc2V0ZihmbXRm bGFncyB2YWwpIHsKICAgICAgICBmbXRmbGFncyBvbGRiaXRzID0gX2ZsYWdzOwogICAgICAgIF9m bGFncyB8PSB2YWw7IHJldHVybiBvbGRiaXRzOyB9CiAgICBmbXRmbGFncyBzZXRmKGZtdGZsYWdz IHZhbCwgZm10ZmxhZ3MgbWFzaykgewogICAgICAgIGZtdGZsYWdzIG9sZGJpdHMgPSBfZmxhZ3M7 CiAgICAgICAgX2ZsYWdzID0gKF9mbGFncyAmIH5tYXNrKSB8ICh2YWwgJiBtYXNrKTsgcmV0dXJu IG9sZGJpdHM7IH0KICAgIGZtdGZsYWdzIHVuc2V0ZihmbXRmbGFncyBtYXNrKSB7CiAgICAgICAg Zm10ZmxhZ3Mgb2xkYml0cyA9IF9mbGFnczsKICAgICAgICBfZmxhZ3MgJj0gfm1hc2s7IHJldHVy biBvbGRiaXRzOyB9CiAgICBpbnQgd2lkdGgoKSBjb25zdCB7IHJldHVybiBfd2lkdGg7IH0KICAg IGludCB3aWR0aChpbnQgdmFsKSB7IGludCBzYXZlID0gX3dpZHRoOyBfd2lkdGggPSB2YWw7IHJl dHVybiBzYXZlOyB9CgoKCgogICAgdm9pZCBfdGhyb3dfZmFpbHVyZSgpIGNvbnN0IHsgfQoKICAg IHZvaWQgY2xlYXIoaW9zdGF0ZSBzdGF0ZSA9IDApIHsKICAgICAgICBfc3RhdGUgPSBfc3RyYnVm ID8gc3RhdGUgOiBzdGF0ZXxiYWRiaXQ7CiAgICAgICAgaWYgKF9zdGF0ZSAmIF9leGNlcHRpb25z KSBfdGhyb3dfZmFpbHVyZSgpOyB9CiAgICB2b2lkIHNldChpb3N0YXRlIGZsYWcpIHsgX3N0YXRl IHw9IGZsYWc7CiAgICAgICAgaWYgKF9zdGF0ZSAmIF9leGNlcHRpb25zKSBfdGhyb3dfZmFpbHVy ZSgpOyB9CiAgICB2b2lkIHNldHN0YXRlKGlvc3RhdGUgZmxhZykgeyBfc3RhdGUgfD0gZmxhZzsK ICAgICAgICBpZiAoX3N0YXRlICYgX2V4Y2VwdGlvbnMpIF90aHJvd19mYWlsdXJlKCk7IH0KICAg IGludCBnb29kKCkgY29uc3QgeyByZXR1cm4gX3N0YXRlID09IDA7IH0KICAgIGludCBlb2YoKSBj b25zdCB7IHJldHVybiBfc3RhdGUgJiBpb3M6OmVvZmJpdDsgfQogICAgaW50IGZhaWwoKSBjb25z dCB7IHJldHVybiBfc3RhdGUgJiAoaW9zOjpiYWRiaXR8aW9zOjpmYWlsYml0KTsgfQogICAgaW50 IGJhZCgpIGNvbnN0IHsgcmV0dXJuIF9zdGF0ZSAmIGlvczo6YmFkYml0OyB9CiAgICBpb3N0YXRl IHJkc3RhdGUoKSBjb25zdCB7IHJldHVybiBfc3RhdGU7IH0KICAgIG9wZXJhdG9yIHZvaWQqKCkg Y29uc3QgeyByZXR1cm4gZmFpbCgpID8gKHZvaWQqKTAgOiAodm9pZCopKC0xKTsgfQogICAgaW50 IG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuIGZhaWwoKTsgfQogICAgaW9zdGF0ZSBleGNlcHRp b25zKCkgY29uc3QgeyByZXR1cm4gX2V4Y2VwdGlvbnM7IH0KICAgIHZvaWQgZXhjZXB0aW9ucyhp b3N0YXRlIGVuYWJsZSkgewogICAgICAgIF9leGNlcHRpb25zID0gZW5hYmxlOwogICAgICAgIGlm IChfc3RhdGUgJiBfZXhjZXB0aW9ucykgX3Rocm93X2ZhaWx1cmUoKTsgfQoKICAgIHN0cmVhbWJ1 ZiogcmRidWYoKSBjb25zdCB7IHJldHVybiBfc3RyYnVmOyB9CiAgICBzdHJlYW1idWYqIHJkYnVm KHN0cmVhbWJ1ZiAqX3MpIHsKICAgICAgc3RyZWFtYnVmICpfb2xkID0gX3N0cmJ1ZjsgX3N0cmJ1 ZiA9IF9zOyBjbGVhciAoKTsgcmV0dXJuIF9vbGQ7IH0KCiAgICBzdGF0aWMgaW50IHN5bmNfd2l0 aF9zdGRpbyhpbnQgb24pOwogICAgc3RhdGljIHZvaWQgc3luY193aXRoX3N0ZGlvKCkgeyBzeW5j X3dpdGhfc3RkaW8oMSk7IH0KICAgIHN0YXRpYyBmbXRmbGFncyBiaXRhbGxvYygpOwogICAgc3Rh dGljIGludCB4YWxsb2MoKTsKICAgIHZvaWQqJiBwd29yZChpbnQpOwogICAgdm9pZCogcHdvcmQo aW50KSBjb25zdDsKICAgIGxvbmcmIGl3b3JkKGludCk7CiAgICBsb25nIGl3b3JkKGludCkgY29u c3Q7CiMgMjUxICIvdXNyL2luY2x1ZGUvZysrLTMvc3RyZWFtYnVmLmgiIDMKICAgIGNsYXNzIElu aXQgewogICAgcHVibGljOgogICAgICBJbml0ICgpIHsgfQogICAgfTsKCiAgcHJvdGVjdGVkOgog ICAgaW5saW5lIGlvcyhzdHJlYW1idWYqIHNiID0gMCwgb3N0cmVhbSogdGllX3RvID0gMCk7CiAg ICBpbmxpbmUgdmlydHVhbCB+aW9zKCk7CiAgICBpbmxpbmUgdm9pZCBpbml0KHN0cmVhbWJ1Ziog c2IsIG9zdHJlYW0qIHRpZSA9IDApOwp9OwoKCgoKdHlwZWRlZiBpb3M6OnNlZWtfZGlyIF9zZWVr X2RpcjsKIyAyNzYgIi91c3IvaW5jbHVkZS9nKystMy9zdHJlYW1idWYuaCIgMwpjbGFzcyBzdHJl YW1tYXJrZXIgOiBwcml2YXRlIF9JT19tYXJrZXIgewogICAgZnJpZW5kIGNsYXNzIHN0cmVhbWJ1 ZjsKICAgIHZvaWQgc2V0X29mZnNldChpbnQgb2Zmc2V0KSB7IF9wb3MgPSBvZmZzZXQ7IH0KICBw dWJsaWM6CiAgICBzdHJlYW1tYXJrZXIoc3RyZWFtYnVmICpzYik7CiAgICB+c3RyZWFtbWFya2Vy KCk7CiAgICBpbnQgc2F2aW5nKCkgeyByZXR1cm4gMTsgfQogICAgaW50IGRlbHRhKHN0cmVhbW1h cmtlciYpOwogICAgaW50IGRlbHRhKCk7Cn07CgpzdHJ1Y3Qgc3RyZWFtYnVmIDogcHVibGljIF9J T19GSUxFIHsKICAgIGZyaWVuZCBjbGFzcyBpb3M7CiAgICBmcmllbmQgY2xhc3MgaXN0cmVhbTsK ICAgIGZyaWVuZCBjbGFzcyBvc3RyZWFtOwogICAgZnJpZW5kIGNsYXNzIHN0cmVhbW1hcmtlcjsK ICAgIGNvbnN0IHZvaWQgKiZfdnRhYmxlKCkgeyByZXR1cm4gKihjb25zdCB2b2lkKiopKChfSU9f RklMRSopdGhpcyArIDEpOyB9CiAgcHJvdGVjdGVkOgogICAgc3RhdGljIHN0cmVhbWJ1ZiogX2xp c3RfYWxsOwogICAgX0lPX0ZJTEUqJiB4Y2hhaW4oKSB7IHJldHVybiBfY2hhaW47IH0KICAgIHZv aWQgX3VuX2xpbmsoKTsKICAgIHZvaWQgX2xpbmtfaW4oKTsKICAgIGNoYXIqIGdwdHIoKSBjb25z dAogICAgICB7IHJldHVybiBfZmxhZ3MgJiAweDEwMCA/IF9JT19zYXZlX2Jhc2UgOiBfSU9fcmVh ZF9wdHI7IH0KICAgIGNoYXIqIHBwdHIoKSBjb25zdCB7IHJldHVybiBfSU9fd3JpdGVfcHRyOyB9 CiAgICBjaGFyKiBlZ3B0cigpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9mbGFncyAmIDB4MTAwID8g X0lPX3NhdmVfZW5kIDogX0lPX3JlYWRfZW5kOyB9CiAgICBjaGFyKiBlcHB0cigpIGNvbnN0IHsg cmV0dXJuIF9JT193cml0ZV9lbmQ7IH0KICAgIGNoYXIqIHBiYXNlKCkgY29uc3QgeyByZXR1cm4g X0lPX3dyaXRlX2Jhc2U7IH0KICAgIGNoYXIqIGViYWNrKCkgY29uc3QKICAgICAgeyByZXR1cm4g X2ZsYWdzICYgMHgxMDAgPyBfSU9fc2F2ZV9iYXNlIDogX0lPX3JlYWRfYmFzZTt9CiAgICBjaGFy KiBiYXNlKCkgY29uc3QgeyByZXR1cm4gX0lPX2J1Zl9iYXNlOyB9CiAgICBjaGFyKiBlYnVmKCkg Y29uc3QgeyByZXR1cm4gX0lPX2J1Zl9lbmQ7IH0KICAgIGludCBibGVuKCkgY29uc3QgeyByZXR1 cm4gX0lPX2J1Zl9lbmQgLSBfSU9fYnVmX2Jhc2U7IH0KICAgIHZvaWQgeHB1dF9jaGFyKGNoYXIg YykgeyAqX0lPX3dyaXRlX3B0cisrID0gYzsgfQogICAgaW50IHhmbGFncygpIHsgcmV0dXJuIF9m bGFnczsgfQogICAgaW50IHhmbGFncyhpbnQgZikge2ludCBmbCA9IF9mbGFnczsgX2ZsYWdzID0g ZjsgcmV0dXJuIGZsO30KICAgIHZvaWQgeHNldGZsYWdzKGludCBmKSB7IF9mbGFncyB8PSBmOyB9 CiAgICB2b2lkIHhzZXRmbGFncyhpbnQgZiwgaW50IG1hc2spCiAgICAgIHsgX2ZsYWdzID0gKF9m bGFncyAmIH5tYXNrKSB8IChmICYgbWFzayk7IH0KICAgIHZvaWQgZ2J1bXAoaW50IG4pCiAgICAg IHsgX2ZsYWdzICYgMHgxMDAgPyAoX0lPX3NhdmVfYmFzZSs9bik6KF9JT19yZWFkX3B0cis9bik7 fQogICAgdm9pZCBwYnVtcChpbnQgbikgeyBfSU9fd3JpdGVfcHRyICs9IG47IH0KICAgIHZvaWQg c2V0YihjaGFyKiBiLCBjaGFyKiBlYiwgaW50IGE9MCk7CiAgICB2b2lkIHNldHAoY2hhciogcCwg Y2hhciogZXApCiAgICAgIHsgX0lPX3dyaXRlX2Jhc2U9X0lPX3dyaXRlX3B0cj1wOyBfSU9fd3Jp dGVfZW5kPWVwOyB9CiAgICB2b2lkIHNldGcoY2hhciogZWIsIGNoYXIqIGcsIGNoYXIgKmVnKSB7 CiAgICAgIGlmIChfZmxhZ3MgJiAweDEwMCkgX0lPX2ZyZWVfYmFja3VwX2FyZWEodGhpcyk7CiAg ICAgIF9JT19yZWFkX2Jhc2UgPSBlYjsgX0lPX3JlYWRfcHRyID0gZzsgX0lPX3JlYWRfZW5kID0g ZWc7IH0KICAgIGNoYXIgKnNob3J0YnVmKCkgeyByZXR1cm4gX3Nob3J0YnVmOyB9CgogICAgaW50 IGluX2JhY2t1cCgpIHsgcmV0dXJuIF9mbGFncyAmIDB4MTAwOyB9CgogICAgY2hhciAqR2Jhc2Uo KSB7IHJldHVybiBpbl9iYWNrdXAoKSA/IF9JT19zYXZlX2Jhc2UgOiBfSU9fcmVhZF9iYXNlOyB9 CgogICAgY2hhciAqZUdwdHIoKSB7IHJldHVybiBpbl9iYWNrdXAoKSA/IF9JT19zYXZlX2VuZCA6 IF9JT19yZWFkX2VuZDsgfQoKICAgIGNoYXIgKkJiYXNlKCkgeyByZXR1cm4gaW5fYmFja3VwKCkg PyBfSU9fcmVhZF9iYXNlIDogX0lPX3NhdmVfYmFzZTsgfQogICAgY2hhciAqQnB0cigpIHsgcmV0 dXJuIF9JT19iYWNrdXBfYmFzZTsgfQoKICAgIGNoYXIgKmVCcHRyKCkgeyByZXR1cm4gaW5fYmFj a3VwKCkgPyBfSU9fcmVhZF9lbmQgOiBfSU9fc2F2ZV9lbmQ7IH0KICAgIGNoYXIgKk5iYXNlKCkg eyByZXR1cm4gX0lPX3NhdmVfYmFzZTsgfQogICAgY2hhciAqZU5wdHIoKSB7IHJldHVybiBfSU9f c2F2ZV9lbmQ7IH0KICAgIGludCBoYXZlX2JhY2t1cCgpIHsgcmV0dXJuIF9JT19zYXZlX2Jhc2Ug IT0gMDsgfQogICAgaW50IGhhdmVfbWFya2VycygpIHsgcmV0dXJuIF9tYXJrZXJzICE9IDA7IH0K ICAgIHZvaWQgZnJlZV9iYWNrdXBfYXJlYSgpOwogICAgdm9pZCB1bnNhdmVfbWFya2VycygpOwog ICAgaW50IHB1dF9tb2RlKCkgeyByZXR1cm4gX2ZsYWdzICYgMHg4MDA7IH0KICAgIGludCBzd2l0 Y2hfdG9fZ2V0X21vZGUoKTsKCiAgICBzdHJlYW1idWYoaW50IGZsYWdzPTApOwogIHB1YmxpYzoK ICAgIHN0YXRpYyBpbnQgZmx1c2hfYWxsKCk7CiAgICBzdGF0aWMgdm9pZCBmbHVzaF9hbGxfbGlu ZWJ1ZmZlcmVkKCk7CiAgICB2aXJ0dWFsIH5zdHJlYW1idWYoKTsKICAgIHZpcnR1YWwgaW50IG92 ZXJmbG93KGludCBjID0gKC0xKSk7CiAgICB2aXJ0dWFsIGludCB1bmRlcmZsb3coKTsKICAgIHZp cnR1YWwgaW50IHVmbG93KCk7CiAgICB2aXJ0dWFsIGludCBwYmFja2ZhaWwoaW50IGMpOwoKICAg IHZpcnR1YWwgc3RyZWFtc2l6ZSB4c3B1dG4oY29uc3QgY2hhciogcywgc3RyZWFtc2l6ZSBuKTsK ICAgIHZpcnR1YWwgc3RyZWFtc2l6ZSB4c2dldG4oY2hhciogcywgc3RyZWFtc2l6ZSBuKTsKICAg IHZpcnR1YWwgc3RyZWFtcG9zIHNlZWtvZmYoc3RyZWFtb2ZmLCBfc2Vla19kaXIsIGludCBtb2Rl PWlvczo6aW58aW9zOjpvdXQpOwogICAgdmlydHVhbCBzdHJlYW1wb3Mgc2Vla3BvcyhzdHJlYW1w b3MgcG9zLCBpbnQgbW9kZSA9IGlvczo6aW58aW9zOjpvdXQpOwoKICAgIHN0cmVhbXBvcyBwdWJz ZWVrb2ZmKHN0cmVhbW9mZiBvLCBfc2Vla19kaXIgZCwgaW50IG1vZGU9aW9zOjppbnxpb3M6Om91 dCkKICAgICAgeyByZXR1cm4gX0lPX3NlZWtvZmYgKHRoaXMsIG8sIGQsIG1vZGUpOyB9CiAgICBz dHJlYW1wb3MgcHVic2Vla3BvcyhzdHJlYW1wb3MgcG9zLCBpbnQgbW9kZSA9IGlvczo6aW58aW9z OjpvdXQpCiAgICAgIHsgcmV0dXJuIF9JT19zZWVrcG9zICh0aGlzLCBwb3MsIG1vZGUpOyB9CiAg ICBzdHJlYW1wb3Mgc3NlZWtvZmYoc3RyZWFtb2ZmLCBfc2Vla19kaXIsIGludCBtb2RlPWlvczo6 aW58aW9zOjpvdXQpOwogICAgc3RyZWFtcG9zIHNzZWVrcG9zKHN0cmVhbXBvcyBwb3MsIGludCBt b2RlID0gaW9zOjppbnxpb3M6Om91dCk7CiAgICB2aXJ0dWFsIHN0cmVhbWJ1Ziogc2V0YnVmKGNo YXIqIHAsIGludCBsZW4pOwogICAgdmlydHVhbCBpbnQgc3luYygpOwogICAgdmlydHVhbCBpbnQg ZG9hbGxvY2F0ZSgpOwoKICAgIGludCBzZWVrbWFyayhzdHJlYW1tYXJrZXImIG1hcmssIGludCBk ZWx0YSA9IDApOwogICAgaW50IHNwdXRiYWNrYyhjaGFyIGMpOwogICAgaW50IHN1bmdldGMoKTsK ICAgIGludCB1bmJ1ZmZlcmVkKCkgeyByZXR1cm4gX2ZsYWdzICYgMiA/IDEgOiAwOyB9CiAgICBp bnQgbGluZWJ1ZmZlcmVkKCkgeyByZXR1cm4gX2ZsYWdzICYgMHgyMDAgPyAxIDogMDsgfQogICAg dm9pZCB1bmJ1ZmZlcmVkKGludCBpKQogICAgICAgIHsgaWYgKGkpIF9mbGFncyB8PSAyOyBlbHNl IF9mbGFncyAmPSB+MjsgfQogICAgdm9pZCBsaW5lYnVmZmVyZWQoaW50IGkpCiAgICAgICAgeyBp ZiAoaSkgX2ZsYWdzIHw9IDB4MjAwOyBlbHNlIF9mbGFncyAmPSB+MHgyMDA7IH0KICAgIGludCBh bGxvY2F0ZSgpIHsKICAgICAgICBpZiAoYmFzZSgpIHx8IHVuYnVmZmVyZWQoKSkgcmV0dXJuIDA7 CiAgICAgICAgZWxzZSByZXR1cm4gZG9hbGxvY2F0ZSgpOyB9CgogICAgdm9pZCBhbGxvY2J1Zigp IHsgaWYgKGJhc2UoKSA9PSAwKSBkb2FsbG9jYnVmKCk7IH0KICAgIHZvaWQgZG9hbGxvY2J1Zigp OwogICAgaW50IGluX2F2YWlsKCkgeyByZXR1cm4gX0lPX3JlYWRfZW5kIC0gX0lPX3JlYWRfcHRy OyB9CiAgICBpbnQgb3V0X3dhaXRpbmcoKSB7IHJldHVybiBfSU9fd3JpdGVfcHRyIC0gX0lPX3dy aXRlX2Jhc2U7IH0KICAgIHN0cmVhbXNpemUgc3B1dG4oY29uc3QgY2hhciogcywgc3RyZWFtc2l6 ZSBuKSB7IHJldHVybiB4c3B1dG4ocywgbik7IH0KICAgIHN0cmVhbXNpemUgcGFkbihjaGFyIHBh ZCwgc3RyZWFtc2l6ZSBuKSB7IHJldHVybiBfSU9fcGFkbih0aGlzLCBwYWQsIG4pOyB9CiAgICBz dHJlYW1zaXplIHNnZXRuKGNoYXIqIHMsIHN0cmVhbXNpemUgbikgeyByZXR1cm4gX0lPX3NnZXRu KHRoaXMsIHMsIG4pOyB9CiAgICBpbnQgaWdub3JlKGludCk7CiAgICBpbnQgZ2V0X2NvbHVtbigp OwogICAgaW50IHNldF9jb2x1bW4oaW50KTsKICAgIGxvbmcgc2dldGxpbmUoY2hhciogYnVmLCBz aXplX3QgbiwgY2hhciBkZWxpbSwgaW50IHB1dGJhY2tfZGVsaW0pOwogICAgaW50IHNwdXRjKGlu dCBjKSB7IHJldHVybiBfSU9fcHV0YyhjLCB0aGlzKTsgfQogICAgaW50IHNidW1wYygpIHsgcmV0 dXJuIF9JT19nZXRjKHRoaXMpOyB9CiAgICBpbnQgc2dldGMoKSB7IHJldHVybiAoKHRoaXMpLT5f SU9fcmVhZF9wdHIgPj0gKHRoaXMpLT5fSU9fcmVhZF9lbmQgJiYgX191bmRlcmZsb3cgKHRoaXMp ID09ICgtMSkgPyAoLTEpIDogKih1bnNpZ25lZCBjaGFyICopICh0aGlzKS0+X0lPX3JlYWRfcHRy KTsgfQogICAgaW50IHNuZXh0YygpIHsKICAgICAgICBpZiAoX0lPX3JlYWRfcHRyID49IF9JT19y ZWFkX2VuZCAmJiBfX3VuZGVyZmxvdyh0aGlzKSA9PSAoLTEpKQogICAgICAgICAgcmV0dXJuICgt MSk7CiAgICAgICAgZWxzZSByZXR1cm4gX0lPX3JlYWRfcHRyKyssIHNnZXRjKCk7IH0KICAgIHZv aWQgc3Rvc3NjKCkgeyBpZiAoX0lPX3JlYWRfcHRyIDwgX0lPX3JlYWRfZW5kKSBfSU9fcmVhZF9w dHIrKzsgfQogICAgaW50IHZzY2FuKGNoYXIgY29uc3QgKmZtdDAsIF9fZ251Y192YV9saXN0IGFw LCBpb3MqIHN0cmVhbSA9IDApOwogICAgaW50IHNjYW4oY2hhciBjb25zdCAqZm10MCAuLi4pOwog ICAgaW50IHZmb3JtKGNoYXIgY29uc3QgKmZtdDAsIF9fZ251Y192YV9saXN0IGFwKTsKICAgIGlu dCBmb3JtKGNoYXIgY29uc3QgKmZtdDAgLi4uKTsKCgoKCiAgICB2aXJ0dWFsIHN0cmVhbXNpemUg c3lzX3JlYWQoY2hhciogYnVmLCBzdHJlYW1zaXplIHNpemUpOwogICAgdmlydHVhbCBzdHJlYW1z aXplIHN5c193cml0ZShjb25zdCBjaGFyKiwgc3RyZWFtc2l6ZSk7CiAgICB2aXJ0dWFsIHN0cmVh bXBvcyBzeXNfc2VlayhzdHJlYW1vZmYsIF9zZWVrX2Rpcik7CiAgICB2aXJ0dWFsIGludCBzeXNf Y2xvc2UoKTsKICAgIHZpcnR1YWwgaW50IHN5c19zdGF0KHZvaWQqKTsKCiAgICB2aXJ0dWFsIGlu dCBzaG93bWFueWMoKTsKICAgIHZpcnR1YWwgdm9pZCBpbWJ1ZSh2b2lkICopOwoKfTsKCgoKCmNs YXNzIGZpbGVidWYgOiBwdWJsaWMgc3RyZWFtYnVmIHsKICBwcm90ZWN0ZWQ6CiAgICB2b2lkIGlu aXQoKTsKICBwdWJsaWM6CiAgICBzdGF0aWMgY29uc3QgaW50IG9wZW5wcm90OwogICAgZmlsZWJ1 ZigpOwogICAgZmlsZWJ1ZihpbnQgZmQpOwogICAgZmlsZWJ1ZihpbnQgZmQsIGNoYXIqIHAsIGlu dCBsZW4pOwoKCgogICAgfmZpbGVidWYoKTsKICAgIGZpbGVidWYqIGF0dGFjaChpbnQgZmQpOwog ICAgZmlsZWJ1Ziogb3Blbihjb25zdCBjaGFyICpmaWxlbmFtZSwgY29uc3QgY2hhciAqbW9kZSk7 CiAgICBmaWxlYnVmKiBvcGVuKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpb3M6Om9wZW5tb2RlIG1v ZGUsIGludCBwcm90ID0gMDY2NCk7CiAgICB2aXJ0dWFsIGludCB1bmRlcmZsb3coKTsKICAgIHZp cnR1YWwgaW50IG92ZXJmbG93KGludCBjID0gKC0xKSk7CiAgICBpbnQgaXNfb3BlbigpIGNvbnN0 IHsgcmV0dXJuIF9maWxlbm8gPj0gMDsgfQogICAgaW50IGZkKCkgY29uc3QgeyByZXR1cm4gaXNf b3BlbigpID8gX2ZpbGVubyA6ICgtMSk7IH0KICAgIGZpbGVidWYqIGNsb3NlKCk7CiAgICB2aXJ0 dWFsIGludCBkb2FsbG9jYXRlKCk7CiAgICB2aXJ0dWFsIHN0cmVhbXBvcyBzZWVrb2ZmKHN0cmVh bW9mZiwgX3NlZWtfZGlyLCBpbnQgbW9kZT1pb3M6OmlufGlvczo6b3V0KTsKICAgIHZpcnR1YWwg c3RyZWFtYnVmKiBzZXRidWYoY2hhciogcCwgaW50IGxlbik7CiAgICBzdHJlYW1zaXplIHhzcHV0 bihjb25zdCBjaGFyKiBzLCBzdHJlYW1zaXplIG4pOwogICAgc3RyZWFtc2l6ZSB4c2dldG4oY2hh ciogcywgc3RyZWFtc2l6ZSBuKTsKICAgIHZpcnR1YWwgaW50IHN5bmMoKTsKICBwcm90ZWN0ZWQ6 CgogICAgaW50IGlzX3JlYWRpbmcoKSB7IHJldHVybiBlYmFjaygpICE9IGVncHRyKCk7IH0KICAg IGNoYXIqIGN1cl9wdHIoKSB7IHJldHVybiBpc19yZWFkaW5nKCkgPyBncHRyKCkgOiBwcHRyKCk7 IH0KCiAgICBjaGFyKiBmaWxlX3B0cigpIHsgcmV0dXJuIGVHcHRyKCk7IH0KCiAgICB2aXJ0dWFs IHN0cmVhbXNpemUgc3lzX3JlYWQoY2hhciogYnVmLCBzdHJlYW1zaXplIHNpemUpOwogICAgdmly dHVhbCBzdHJlYW1wb3Mgc3lzX3NlZWsoc3RyZWFtb2ZmLCBfc2Vla19kaXIpOwogICAgdmlydHVh bCBzdHJlYW1zaXplIHN5c193cml0ZShjb25zdCBjaGFyKiwgc3RyZWFtc2l6ZSk7CiAgICB2aXJ0 dWFsIGludCBzeXNfc3RhdCh2b2lkKik7CiAgICB2aXJ0dWFsIGludCBzeXNfY2xvc2UoKTsKCgoK Cn07CgppbmxpbmUgdm9pZCBpb3M6OmluaXQoc3RyZWFtYnVmKiBzYiwgb3N0cmVhbSogdGllX3Rv KSB7CiAgICAgICAgICAgICAgICBfc3RhdGUgPSBzYiA/IGlvczo6Z29vZGJpdCA6IGlvczo6YmFk Yml0OyBfZXhjZXB0aW9ucz0wOwogICAgICAgICAgICAgICAgX3N0cmJ1Zj1zYjsgX3RpZSA9IHRp ZV90bzsgX3dpZHRoPTA7IF9maWxsPScgJzsKCiAgICAgICAgICAgICAgICBfZmxhZ3M9aW9zOjpz a2lwd3N8aW9zOjpkZWM7CgoKCiAgICAgICAgICAgICAgICBfcHJlY2lzaW9uPTY7IF9hcnJheXMg PSAwOyB9CgppbmxpbmUgaW9zOjppb3Moc3RyZWFtYnVmKiBzYiwgb3N0cmVhbSogdGllX3RvKSB7 IGluaXQoc2IsIHRpZV90byk7IH0KCmlubGluZSBpb3M6On5pb3MoKSB7CgoKCgoKICAgIG9wZXJh dG9yIGRlbGV0ZVtdIChfYXJyYXlzKTsKfQp9CiMgMzIgIi91c3IvaW5jbHVkZS9nKystMy9pb3N0 cmVhbS5oIiAyIDMKCmV4dGVybiAiQysrIiB7CmNsYXNzIGlzdHJlYW07IGNsYXNzIG9zdHJlYW07 CnR5cGVkZWYgaW9zJiAoKl9fbWFuaXApKGlvcyYpOwp0eXBlZGVmIGlzdHJlYW0mICgqX19pbWFu aXApKGlzdHJlYW0mKTsKdHlwZWRlZiBvc3RyZWFtJiAoKl9fb21hbmlwKShvc3RyZWFtJik7Cgpl eHRlcm4gaXN0cmVhbSYgd3MoaXN0cmVhbSYgaW5zKTsKZXh0ZXJuIG9zdHJlYW0mIGZsdXNoKG9z dHJlYW0mIG91dHMpOwpleHRlcm4gb3N0cmVhbSYgZW5kbChvc3RyZWFtJiBvdXRzKTsKZXh0ZXJu IG9zdHJlYW0mIGVuZHMob3N0cmVhbSYgb3V0cyk7CgpjbGFzcyBvc3RyZWFtIDogdmlydHVhbCBw dWJsaWMgaW9zCnsKCiAgICB2b2lkIGRvX29zZngoKTsKICBwdWJsaWM6CiAgICBvc3RyZWFtKCkg eyB9CiAgICBvc3RyZWFtKHN0cmVhbWJ1Ziogc2IsIG9zdHJlYW0qIHRpZWQ9MCk7CiAgICBpbnQg b3BmeCgpIHsKICAgICAgICBpZiAoIWdvb2QoKSkgcmV0dXJuIDA7CiAgICAgICAgZWxzZSB7IGlm IChfdGllKSBfdGllLT5mbHVzaCgpOyA7IHJldHVybiAxO30gfQogICAgdm9pZCBvc2Z4KCkgeyA7 CiAgICAgICAgICAgICAgICAgIGlmIChmbGFncygpICYgKGlvczo6dW5pdGJ1Znxpb3M6OnN0ZGlv KSkKICAgICAgICAgICAgICAgICAgICAgIGRvX29zZngoKTsgfQogICAgb3N0cmVhbSYgZmx1c2go KTsKICAgIG9zdHJlYW0mIHB1dChjaGFyIGMpIHsgX3N0cmJ1Zi0+c3B1dGMoYyk7IHJldHVybiAq dGhpczsgfQoKCgoKCiAgICBvc3RyZWFtJiB3cml0ZShjb25zdCBjaGFyICpzLCBzdHJlYW1zaXpl IG4pOwogICAgb3N0cmVhbSYgd3JpdGUoY29uc3QgdW5zaWduZWQgY2hhciAqcywgc3RyZWFtc2l6 ZSBuKQogICAgICB7IHJldHVybiB3cml0ZSgoY29uc3QgY2hhciopcywgbik7fQogICAgb3N0cmVh bSYgd3JpdGUoY29uc3Qgc2lnbmVkIGNoYXIgKnMsIHN0cmVhbXNpemUgbikKICAgICAgeyByZXR1 cm4gd3JpdGUoKGNvbnN0IGNoYXIqKXMsIG4pO30KICAgIG9zdHJlYW0mIHdyaXRlKGNvbnN0IHZv aWQgKnMsIHN0cmVhbXNpemUgbikKICAgICAgeyByZXR1cm4gd3JpdGUoKGNvbnN0IGNoYXIqKXMs IG4pO30KICAgIG9zdHJlYW0mIHNlZWtwKHN0cmVhbXBvcyk7CiAgICBvc3RyZWFtJiBzZWVrcChz dHJlYW1vZmYsIF9zZWVrX2Rpcik7CiAgICBzdHJlYW1wb3MgdGVsbHAoKTsKICAgIG9zdHJlYW0m IGZvcm0oY29uc3QgY2hhciAqZm9ybWF0IC4uLik7CiAgICBvc3RyZWFtJiB2Zm9ybShjb25zdCBj aGFyICpmb3JtYXQsIF9fZ251Y192YV9saXN0IGFyZ3MpOwoKICAgIG9zdHJlYW0mIG9wZXJhdG9y PDwoY2hhciBjKTsKICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwodW5zaWduZWQgY2hhciBjKSB7IHJl dHVybiAoKnRoaXMpIDw8IChjaGFyKWM7IH0KICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwoc2lnbmVk IGNoYXIgYykgeyByZXR1cm4gKCp0aGlzKSA8PCAoY2hhciljOyB9CiAgICBvc3RyZWFtJiBvcGVy YXRvcjw8KGNvbnN0IGNoYXIgKnMpOwogICAgb3N0cmVhbSYgb3BlcmF0b3I8PChjb25zdCB1bnNp Z25lZCBjaGFyICpzKQogICAgICAgIHsgcmV0dXJuICgqdGhpcykgPDwgKGNvbnN0IGNoYXIqKXM7 IH0KICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwoY29uc3Qgc2lnbmVkIGNoYXIgKnMpCiAgICAgICAg eyByZXR1cm4gKCp0aGlzKSA8PCAoY29uc3QgY2hhciopczsgfQogICAgb3N0cmVhbSYgb3BlcmF0 b3I8PChjb25zdCB2b2lkICpwKTsKICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwoaW50IG4pOwogICAg b3N0cmVhbSYgb3BlcmF0b3I8PCh1bnNpZ25lZCBpbnQgbik7CiAgICBvc3RyZWFtJiBvcGVyYXRv cjw8KGxvbmcgbik7CiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KHVuc2lnbmVkIGxvbmcgbik7CgoK CgogICAgb3N0cmVhbSYgb3BlcmF0b3I8PChzaG9ydCBuKSB7cmV0dXJuIG9wZXJhdG9yPDwoKGlu dCluKTt9CiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KHVuc2lnbmVkIHNob3J0IG4pIHtyZXR1cm4g b3BlcmF0b3I8PCgodW5zaWduZWQgaW50KW4pO30KCiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KGJv b2wgYikgeyByZXR1cm4gb3BlcmF0b3I8PCgoaW50KWIpOyB9CgogICAgb3N0cmVhbSYgb3BlcmF0 b3I8PChkb3VibGUgbik7CiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KGZsb2F0IG4pIHsgcmV0dXJu IG9wZXJhdG9yPDwoKGRvdWJsZSluKTsgfQoKICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwobG9uZyBk b3VibGUgbik7CgoKCiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KF9fb21hbmlwIGZ1bmMpIHsgcmV0 dXJuICgqZnVuYykoKnRoaXMpOyB9CiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KF9fbWFuaXAgZnVu YykgeygqZnVuYykoKnRoaXMpOyByZXR1cm4gKnRoaXM7fQogICAgb3N0cmVhbSYgb3BlcmF0b3I8 PChzdHJlYW1idWYqKTsKCgoKfTsKCmNsYXNzIGlzdHJlYW0gOiB2aXJ0dWFsIHB1YmxpYyBpb3MK ewoKcHJvdGVjdGVkOgogICAgc2l6ZV90IF9nY291bnQ7CgogICAgaW50IF9za2lwX3dzKCk7CiAg cHVibGljOgogICAgaXN0cmVhbSgpOiBfZ2NvdW50ICgwKSB7IH0KICAgIGlzdHJlYW0oc3RyZWFt YnVmKiBzYiwgb3N0cmVhbSp0aWVkPTApOwogICAgaXN0cmVhbSYgZ2V0KGNoYXIqIHB0ciwgaW50 IGxlbiwgY2hhciBkZWxpbSA9ICdcbicpOwogICAgaXN0cmVhbSYgZ2V0KHVuc2lnbmVkIGNoYXIq IHB0ciwgaW50IGxlbiwgY2hhciBkZWxpbSA9ICdcbicpCiAgICAgICAgeyByZXR1cm4gZ2V0KChj aGFyKilwdHIsIGxlbiwgZGVsaW0pOyB9CiAgICBpc3RyZWFtJiBnZXQoY2hhciYgYyk7CiAgICBp c3RyZWFtJiBnZXQodW5zaWduZWQgY2hhciYgYykgeyByZXR1cm4gZ2V0KChjaGFyJiljKTsgfQog ICAgaXN0cmVhbSYgZ2V0bGluZShjaGFyKiBwdHIsIGludCBsZW4sIGNoYXIgZGVsaW0gPSAnXG4n KTsKICAgIGlzdHJlYW0mIGdldGxpbmUodW5zaWduZWQgY2hhciogcHRyLCBpbnQgbGVuLCBjaGFy IGRlbGltID0gJ1xuJykKICAgICAgICB7IHJldHVybiBnZXRsaW5lKChjaGFyKilwdHIsIGxlbiwg ZGVsaW0pOyB9CiAgICBpc3RyZWFtJiBnZXQoc2lnbmVkIGNoYXImIGMpIHsgcmV0dXJuIGdldCgo Y2hhciYpYyk7IH0KICAgIGlzdHJlYW0mIGdldChzaWduZWQgY2hhciogcHRyLCBpbnQgbGVuLCBj aGFyIGRlbGltID0gJ1xuJykKICAgICAgICB7IHJldHVybiBnZXQoKGNoYXIqKXB0ciwgbGVuLCBk ZWxpbSk7IH0KICAgIGlzdHJlYW0mIGdldGxpbmUoc2lnbmVkIGNoYXIqIHB0ciwgaW50IGxlbiwg Y2hhciBkZWxpbSA9ICdcbicpCiAgICAgICAgeyByZXR1cm4gZ2V0bGluZSgoY2hhciopcHRyLCBs ZW4sIGRlbGltKTsgfQogICAgaXN0cmVhbSYgcmVhZChjaGFyICpwdHIsIHN0cmVhbXNpemUgbik7 CiAgICBpc3RyZWFtJiByZWFkKHVuc2lnbmVkIGNoYXIgKnB0ciwgc3RyZWFtc2l6ZSBuKQogICAg ICB7IHJldHVybiByZWFkKChjaGFyKilwdHIsIG4pOyB9CiAgICBpc3RyZWFtJiByZWFkKHNpZ25l ZCBjaGFyICpwdHIsIHN0cmVhbXNpemUgbikKICAgICAgeyByZXR1cm4gcmVhZCgoY2hhciopcHRy LCBuKTsgfQogICAgaXN0cmVhbSYgcmVhZCh2b2lkICpwdHIsIHN0cmVhbXNpemUgbikKICAgICAg eyByZXR1cm4gcmVhZCgoY2hhciopcHRyLCBuKTsgfQogICAgaXN0cmVhbSYgZ2V0KHN0cmVhbWJ1 ZiYgc2IsIGNoYXIgZGVsaW0gPSAnXG4nKTsKICAgIGlzdHJlYW0mIGdldHMoY2hhciAqKnMsIGNo YXIgZGVsaW0gPSAnXG4nKTsKICAgIGludCBpcGZ4KGludCBuZWVkID0gMCkgewogICAgICAgIGlm ICghZ29vZCgpKSB7IHNldChpb3M6OmZhaWxiaXQpOyByZXR1cm4gMDsgfQogICAgICAgIGVsc2Ug ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgIGlmIChfdGllICYm IChuZWVkID09IDAgfHwgcmRidWYoKS0+aW5fYXZhaWwoKSA8IG5lZWQpKSBfdGllLT5mbHVzaCgp OwogICAgICAgICAgaWYgKCFuZWVkICYmIChmbGFncygpICYgaW9zOjpza2lwd3MpKSByZXR1cm4g X3NraXBfd3MoKTsKICAgICAgICAgIGVsc2UgcmV0dXJuIDE7CiAgICAgICAgfQogICAgfQogICAg aW50IGlwZngwKCkgewogICAgICAgIGlmICghZ29vZCgpKSB7IHNldChpb3M6OmZhaWxiaXQpOyBy ZXR1cm4gMDsgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IDsKICAgICAgICAgIGlmIChfdGllKSBfdGllLT5mbHVzaCgpOwogICAgICAgICAgaWYgKGZsYWdz KCkgJiBpb3M6OnNraXB3cykgcmV0dXJuIF9za2lwX3dzKCk7CiAgICAgICAgICBlbHNlIHJldHVy biAxOwogICAgICAgIH0KICAgIH0KICAgIGludCBpcGZ4MSgpIHsKICAgICAgICBpZiAoIWdvb2Qo KSkgeyBzZXQoaW9zOjpmYWlsYml0KTsgcmV0dXJuIDA7IH0KICAgICAgICBlbHNlIHsKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICBpZiAoX3RpZSAmJiByZGJ1Zigp LT5pbl9hdmFpbCgpID09IDApIF90aWUtPmZsdXNoKCk7CiAgICAgICAgICByZXR1cm4gMTsKICAg ICAgICB9CiAgICB9CiAgICB2b2lkIGlzZngoKSB7IDsgfQogICAgaW50IGdldCgpIHsgaWYgKCFp cGZ4MSgpKSByZXR1cm4gKC0xKTsKICAgICAgICAgICAgICAgIGVsc2UgeyBpbnQgY2ggPSBfc3Ry YnVmLT5zYnVtcGMoKTsKICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2ggPT0gKC0xKSkgc2V0 KGlvczo6ZW9mYml0KTsKICAgICAgICAgICAgICAgICAgICAgICBpc2Z4KCk7CiAgICAgICAgICAg ICAgICAgICAgICAgcmV0dXJuIGNoOwogICAgICAgICAgICAgICAgICAgICB9IH0KICAgIGludCBw ZWVrKCk7CiAgICBzaXplX3QgZ2NvdW50KCkgeyByZXR1cm4gX2djb3VudDsgfQogICAgaXN0cmVh bSYgaWdub3JlKGludCBuPTEsIGludCBkZWxpbSA9ICgtMSkpOwogICAgaW50IHN5bmMgKCk7CiAg ICBpc3RyZWFtJiBzZWVrZyhzdHJlYW1wb3MpOwogICAgaXN0cmVhbSYgc2Vla2coc3RyZWFtb2Zm LCBfc2Vla19kaXIpOwogICAgc3RyZWFtcG9zIHRlbGxnKCk7CiAgICBpc3RyZWFtJiBwdXRiYWNr KGNoYXIgY2gpIHsKICAgICAgICBpZiAoZ29vZCgpICYmIF9zdHJidWYtPnNwdXRiYWNrYyhjaCkg PT0gKC0xKSkgY2xlYXIoaW9zOjpiYWRiaXQpOwogICAgICAgIHJldHVybiAqdGhpczt9CiAgICBp c3RyZWFtJiB1bmdldCgpIHsKICAgICAgICBpZiAoZ29vZCgpICYmIF9zdHJidWYtPnN1bmdldGMo KSA9PSAoLTEpKSBjbGVhcihpb3M6OmJhZGJpdCk7CiAgICAgICAgcmV0dXJuICp0aGlzO30KICAg IGlzdHJlYW0mIHNjYW4oY29uc3QgY2hhciAqZm9ybWF0IC4uLik7CiAgICBpc3RyZWFtJiB2c2Nh bihjb25zdCBjaGFyICpmb3JtYXQsIF9fZ251Y192YV9saXN0IGFyZ3MpOwoKCgoKCgogICAgaXN0 cmVhbSYgb3BlcmF0b3I+PihjaGFyKik7CiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+KHVuc2lnbmVk IGNoYXIqIHApIHsgcmV0dXJuIG9wZXJhdG9yPj4oKGNoYXIqKXApOyB9CiAgICBpc3RyZWFtJiBv cGVyYXRvcj4+KHNpZ25lZCBjaGFyKnApIHsgcmV0dXJuIG9wZXJhdG9yPj4oKGNoYXIqKXApOyB9 CiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+KGNoYXImIGMpOwogICAgaXN0cmVhbSYgb3BlcmF0b3I+ Pih1bnNpZ25lZCBjaGFyJiBjKSB7cmV0dXJuIG9wZXJhdG9yPj4oKGNoYXImKWMpO30KICAgIGlz dHJlYW0mIG9wZXJhdG9yPj4oc2lnbmVkIGNoYXImIGMpIHtyZXR1cm4gb3BlcmF0b3I+PigoY2hh ciYpYyk7fQogICAgaXN0cmVhbSYgb3BlcmF0b3I+PihpbnQmKTsKICAgIGlzdHJlYW0mIG9wZXJh dG9yPj4obG9uZyYpOwoKCgoKICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4oc2hvcnQmKTsKICAgIGlz dHJlYW0mIG9wZXJhdG9yPj4odW5zaWduZWQgaW50Jik7CiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+ KHVuc2lnbmVkIGxvbmcmKTsKICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4odW5zaWduZWQgc2hvcnQm KTsKCiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+KGJvb2wmKTsKCiAgICBpc3RyZWFtJiBvcGVyYXRv cj4+KGZsb2F0Jik7CiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+KGRvdWJsZSYpOwogICAgaXN0cmVh bSYgb3BlcmF0b3I+Pihsb25nIGRvdWJsZSYpOwogICAgaXN0cmVhbSYgb3BlcmF0b3I+PiggX19t YW5pcCBmdW5jKSB7KCpmdW5jKSgqdGhpcyk7IHJldHVybiAqdGhpczt9CiAgICBpc3RyZWFtJiBv cGVyYXRvcj4+KF9faW1hbmlwIGZ1bmMpIHsgcmV0dXJuICgqZnVuYykoKnRoaXMpOyB9CiAgICBp c3RyZWFtJiBvcGVyYXRvcj4+KHN0cmVhbWJ1ZiopOwp9OwoKY2xhc3MgaW9zdHJlYW0gOiBwdWJs aWMgaXN0cmVhbSwgcHVibGljIG9zdHJlYW0KewogIHB1YmxpYzoKICAgIGlvc3RyZWFtKCkgeyB9 CiAgICBpb3N0cmVhbShzdHJlYW1idWYqIHNiLCBvc3RyZWFtKnRpZWQ9MCk7Cn07CgpjbGFzcyBf SU9faXN0cmVhbV93aXRoYXNzaWduIDogcHVibGljIGlzdHJlYW0gewpwdWJsaWM6CiAgX0lPX2lz dHJlYW1fd2l0aGFzc2lnbiYgb3BlcmF0b3I9KGlzdHJlYW0mKTsKICBfSU9faXN0cmVhbV93aXRo YXNzaWduJiBvcGVyYXRvcj0oX0lPX2lzdHJlYW1fd2l0aGFzc2lnbiYgcmhzKQogICAgeyByZXR1 cm4gb3BlcmF0b3I9IChzdGF0aWNfY2FzdDxpc3RyZWFtJj4gKHJocykpOyB9Cn07CgpjbGFzcyBf SU9fb3N0cmVhbV93aXRoYXNzaWduIDogcHVibGljIG9zdHJlYW0gewpwdWJsaWM6CiAgX0lPX29z dHJlYW1fd2l0aGFzc2lnbiYgb3BlcmF0b3I9KG9zdHJlYW0mKTsKICBfSU9fb3N0cmVhbV93aXRo YXNzaWduJiBvcGVyYXRvcj0oX0lPX29zdHJlYW1fd2l0aGFzc2lnbiYgcmhzKQogICAgeyByZXR1 cm4gb3BlcmF0b3I9IChzdGF0aWNfY2FzdDxvc3RyZWFtJj4gKHJocykpOyB9Cn07CgpleHRlcm4g X0lPX2lzdHJlYW1fd2l0aGFzc2lnbiBjaW47CgpleHRlcm4gX0lPX29zdHJlYW1fd2l0aGFzc2ln biBjb3V0LCBjZXJyOwoKZXh0ZXJuIF9JT19vc3RyZWFtX3dpdGhhc3NpZ24gY2xvZwoKCgo7Cgpl eHRlcm4gaXN0cmVhbSYgbG9jayhpc3RyZWFtJiBpbnMpOwpleHRlcm4gaXN0cmVhbSYgdW5sb2Nr KGlzdHJlYW0mIGlucyk7CmV4dGVybiBvc3RyZWFtJiBsb2NrKG9zdHJlYW0mIG91dHMpOwpleHRl cm4gb3N0cmVhbSYgdW5sb2NrKG9zdHJlYW0mIG91dHMpOwoKc3RydWN0IElvc3RyZWFtX2luaXQg eyB9IDsKCmlubGluZSBpb3MmIGRlYyhpb3MmIGkpCnsgaS5zZXRmKGlvczo6ZGVjLCBpb3M6OmRl Y3xpb3M6OmhleHxpb3M6Om9jdCk7IHJldHVybiBpOyB9CmlubGluZSBpb3MmIGhleChpb3MmIGkp CnsgaS5zZXRmKGlvczo6aGV4LCBpb3M6OmRlY3xpb3M6OmhleHxpb3M6Om9jdCk7IHJldHVybiBp OyB9CmlubGluZSBpb3MmIG9jdChpb3MmIGkpCnsgaS5zZXRmKGlvczo6b2N0LCBpb3M6OmRlY3xp b3M6OmhleHxpb3M6Om9jdCk7IHJldHVybiBpOyB9Cn0KIyA0NiAiL3Vzci9pbmNsdWRlL2crKy0z L3N0bF9hbGxvYy5oIiAyIDMKCgoKCgoKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LW1hbmRy YWtlLWxpbnV4LWdudS8yLjk2L2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDU0ICIvdXNyL2luY2x1 ZGUvZysrLTMvc3RsX2FsbG9jLmgiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMSAz CiMgMjUgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9mZWF0dXJl cy5oIiAxIDMKIyAyNiAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAyIDMKCgoKCgoKCiMgMSAiL3Vz ci9saWIvZ2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxpbnV4LWdudS8yLjk2L2luY2x1ZGUvc3RkZGVm LmgiIDEgMwojIDM0ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDIgMwoKZXh0ZXJuICJDIiB7CiMg OTQgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwp0eXBlZGVmIHN0cnVjdAogIHsKICAgIGludCBx dW90OwogICAgaW50IHJlbTsKICB9IGRpdl90OwoKCgp0eXBlZGVmIHN0cnVjdAogIHsKICAgIGxv bmcgaW50IHF1b3Q7CiAgICBsb25nIGludCByZW07CiAgfSBsZGl2X3Q7CiMgMTMzICIvdXNyL2lu Y2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIHNpemVfdCBfX2N0eXBlX2dldF9tYl9jdXJfbWF4ICh2 b2lkKSA7CgoKCmV4dGVybiBkb3VibGUgYXRvZiAoY29uc3QgY2hhciAqX19ucHRyKSA7CgpleHRl cm4gaW50IGF0b2kgKGNvbnN0IGNoYXIgKl9fbnB0cikgOwoKZXh0ZXJuIGxvbmcgaW50IGF0b2wg KGNvbnN0IGNoYXIgKl9fbnB0cikgOwojIDE1MCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4 dGVybiBkb3VibGUgc3RydG9kIChjb25zdCBjaGFyICogX19ucHRyLAogICAgICAgICAgICAgICAg ICAgICAgY2hhciAqKiBfX2VuZHB0cikgOwojIDE2MyAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAz CmV4dGVybiBsb25nIGludCBzdHJ0b2wgKGNvbnN0IGNoYXIgKiBfX25wdHIsCiAgICAgICAgICAg ICAgICAgICAgICAgIGNoYXIgKiogX19lbmRwdHIsIGludCBfX2Jhc2UpIDsKCmV4dGVybiB1bnNp Z25lZCBsb25nIGludCBzdHJ0b3VsIChjb25zdCBjaGFyICogX19ucHRyLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgY2hhciAqKiBfX2VuZHB0ciwgaW50IF9fYmFzZSkKICAgICAg ICAgICAgOwojIDI1MCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBkb3VibGUgX19z dHJ0b2RfaW50ZXJuYWwgKGNvbnN0IGNoYXIgKiBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGNoYXIgKiogX19lbmRwdHIsIGludCBfX2dyb3VwKQogICAgICAgICAgICA7 CmV4dGVybiBmbG9hdCBfX3N0cnRvZl9pbnRlcm5hbCAoY29uc3QgY2hhciAqIF9fbnB0ciwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqIF9fZW5kcHRyLCBpbnQgX19ncm91 cCkKICAgICAgICAgICAgOwpleHRlcm4gbG9uZyBkb3VibGUgX19zdHJ0b2xkX2ludGVybmFsIChj b25zdCBjaGFyICogX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBjaGFyICoqIF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBpbnQgX19ncm91cCkgOwoKZXh0ZXJuIGxvbmcgaW50IF9fc3RydG9sX2ludGVybmFsIChjb25z dCBjaGFyICogX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIg KiogX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYmFz ZSwgaW50IF9fZ3JvdXApIDsKCgoKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW50IF9fc3RydG91bF9p bnRlcm5hbCAoY29uc3QgY2hhciAqIF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgY2hhciAqKiBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYmFzZSwgaW50IF9fZ3JvdXApIDsKIyAzODQg Ii91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gY2hhciAqbDY0YSAobG9uZyBpbnQgX19u KSA7CgoKZXh0ZXJuIGxvbmcgaW50IGE2NGwgKGNvbnN0IGNoYXIgKl9fcykgOwoKCiMgMSAiL3Vz ci9pbmNsdWRlL3N5cy90eXBlcy5oIiAxIDMKIyAyNiAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5o IiAzCiMgMSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDEgMwojIDI3ICIvdXNyL2luY2x1ZGUv c3lzL3R5cGVzLmgiIDIgMwoKZXh0ZXJuICJDIiB7CgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3R5 cGVzLmgiIDEgMwojIDMxICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMwoKCgp0eXBlZGVm IF9fdV9jaGFyIHVfY2hhcjsKdHlwZWRlZiBfX3Vfc2hvcnQgdV9zaG9ydDsKdHlwZWRlZiBfX3Vf aW50IHVfaW50Owp0eXBlZGVmIF9fdV9sb25nIHVfbG9uZzsKdHlwZWRlZiBfX3F1YWRfdCBxdWFk X3Q7CnR5cGVkZWYgX191X3F1YWRfdCB1X3F1YWRfdDsKdHlwZWRlZiBfX2ZzaWRfdCBmc2lkX3Q7 CgoKCgp0eXBlZGVmIF9fbG9mZl90IGxvZmZfdDsKCgoKdHlwZWRlZiBfX2lub190IGlub190Owoj IDYxICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMKdHlwZWRlZiBfX2Rldl90IGRldl90OwoK CgoKdHlwZWRlZiBfX2dpZF90IGdpZF90OwoKCgoKdHlwZWRlZiBfX21vZGVfdCBtb2RlX3Q7CgoK Cgp0eXBlZGVmIF9fbmxpbmtfdCBubGlua190OwoKCgoKdHlwZWRlZiBfX3VpZF90IHVpZF90OwoK CgoKCnR5cGVkZWYgX19vZmZfdCBvZmZfdDsKIyA5OSAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5o IiAzCnR5cGVkZWYgX19waWRfdCBwaWRfdDsKCgoKCnR5cGVkZWYgX19pZF90IGlkX3Q7CgoKCgp0 eXBlZGVmIF9fc3NpemVfdCBzc2l6ZV90OwoKCgoKCnR5cGVkZWYgX19kYWRkcl90IGRhZGRyX3Q7 CnR5cGVkZWYgX19jYWRkcl90IGNhZGRyX3Q7CgoKCgoKdHlwZWRlZiBfX2tleV90IGtleV90Owoj IDEzMiAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL3RpbWUu aCIgMSAzCiMgNjcgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0 cy90eXBlcy5oIiAxIDMKIyA2OCAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMiAzCgoKdHlwZWRlZiBf X3RpbWVfdCB0aW1lX3Q7CiMgNzkgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMKIyAxICIvdXNyL2lu Y2x1ZGUvYml0cy90eXBlcy5oIiAxIDMKIyA4MCAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMiAzCgoK dHlwZWRlZiBfX2Nsb2NraWRfdCBjbG9ja2lkX3Q7CiMgOTEgIi91c3IvaW5jbHVkZS90aW1lLmgi IDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAxIDMKIyA5MiAiL3Vzci9pbmNsdWRl L3RpbWUuaCIgMiAzCgoKdHlwZWRlZiBfX3RpbWVyX3QgdGltZXJfdDsKIyAxMzMgIi91c3IvaW5j bHVkZS9zeXMvdHlwZXMuaCIgMiAzCiMgMTQ2ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMK IyAxICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtbWFuZHJha2UtbGludXgtZ251LzIuOTYvaW5jbHVk ZS9zdGRkZWYuaCIgMSAzCiMgMTQ3ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMwoKCgp0 eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50IHVsb25nOwp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IGlu dCB1c2hvcnQ7CnR5cGVkZWYgdW5zaWduZWQgaW50IHVpbnQ7CiMgMTYyICIvdXNyL2luY2x1ZGUv c3lzL3R5cGVzLmgiIDMKdHlwZWRlZiBjaGFyIGludDhfdDsKdHlwZWRlZiBzaG9ydCBpbnQgaW50 MTZfdDsKdHlwZWRlZiBpbnQgaW50MzJfdDsKCgoKCgoKdHlwZWRlZiB1bnNpZ25lZCBjaGFyIHVf aW50OF90Owp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IGludCB1X2ludDE2X3Q7CnR5cGVkZWYgdW5z aWduZWQgaW50IHVfaW50MzJfdDsKCgoKCnR5cGVkZWYgaW50IHJlZ2lzdGVyX3Q7CiMgMjEyICIv dXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZW5kaWFuLmgiIDEg MwojIDIxMyAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAyIDMKCgojIDEgIi91c3IvaW5jbHVk ZS9zeXMvc2VsZWN0LmgiIDEgMwojIDI1ICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAzCiMg MSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDEgMwojIDI2ICIvdXNyL2luY2x1ZGUvc3lzL3Nl bGVjdC5oIiAyIDMKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDEgMwojIDI5ICIv dXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAyIDMKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3Nl bGVjdC5oIiAxIDMKIyAzMiAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMiAzCgoKIyAxICIv dXNyL2luY2x1ZGUvYml0cy9zaWdzZXQuaCIgMSAzCiMgMjMgIi91c3IvaW5jbHVkZS9iaXRzL3Np Z3NldC5oIiAzCnR5cGVkZWYgaW50IF9fc2lnX2F0b21pY190OwoKCgoKdHlwZWRlZiBzdHJ1Y3QK ICB7CiAgICB1bnNpZ25lZCBsb25nIGludCBfX3ZhbFsoMTAyNCAvICg4ICogc2l6ZW9mICh1bnNp Z25lZCBsb25nIGludCkpKV07CiAgfSBfX3NpZ3NldF90OwojIDM1ICIvdXNyL2luY2x1ZGUvc3lz L3NlbGVjdC5oIiAyIDMKCgoKdHlwZWRlZiBfX3NpZ3NldF90IHNpZ3NldF90OwoKCgoKCiMgMSAi L3Vzci9pbmNsdWRlL3RpbWUuaCIgMSAzCiMgMTA2ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCnN0 cnVjdCB0aW1lc3BlYwogIHsKICAgIF9fdGltZV90IHR2X3NlYzsKICAgIGxvbmcgaW50IHR2X25z ZWM7CiAgfTsKIyA0NSAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMiAzCgojIDEgIi91c3Iv aW5jbHVkZS9iaXRzL3RpbWUuaCIgMSAzCiMgNjMgIi91c3IvaW5jbHVkZS9iaXRzL3RpbWUuaCIg MwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDEgMwojIDY0ICIvdXNyL2luY2x1ZGUv Yml0cy90aW1lLmgiIDIgMwoKCgpzdHJ1Y3QgdGltZXZhbAogIHsKICAgIF9fdGltZV90IHR2X3Nl YzsKICAgIF9fc3VzZWNvbmRzX3QgdHZfdXNlYzsKICB9OwojIDQ3ICIvdXNyL2luY2x1ZGUvc3lz L3NlbGVjdC5oIiAyIDMKCgp0eXBlZGVmIF9fc3VzZWNvbmRzX3Qgc3VzZWNvbmRzX3Q7CgoKCgoK dHlwZWRlZiBsb25nIGludCBfX2ZkX21hc2s7CgoKCgoKCgp0eXBlZGVmIHN0cnVjdAogIHsKCgoK CgoKICAgIF9fZmRfbWFzayBfX2Zkc19iaXRzWzEwMjQgLyAoOCAqIHNpemVvZiAoX19mZF9tYXNr KSldOwoKCiAgfSBmZF9zZXQ7CgoKCgoKCnR5cGVkZWYgX19mZF9tYXNrIGZkX21hc2s7CiMgOTUg Ii91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDMKZXh0ZXJuICJDIiB7CgoKCgoKCmV4dGVybiBp bnQgc2VsZWN0IChpbnQgX19uZmRzLCBmZF9zZXQgKiBfX3JlYWRmZHMsCiAgICAgICAgICAgICAg ICAgICBmZF9zZXQgKiBfX3dyaXRlZmRzLAogICAgICAgICAgICAgICAgICAgZmRfc2V0ICogX19l eGNlcHRmZHMsCiAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdGltZXZhbCAqIF9fdGltZW91dCkg OwojIDExOCAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMwp9CiMgMjE2ICIvdXNyL2luY2x1 ZGUvc3lzL3R5cGVzLmgiIDIgMwoKCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9zeXNtYWNyb3MuaCIg MSAzCiMgMzUgIi91c3IvaW5jbHVkZS9zeXMvc3lzbWFjcm9zLmgiIDMKIyAxICIvdXNyL2luY2x1 ZGUvZW5kaWFuLmgiIDEgMwojIDM2ICIvdXNyL2luY2x1ZGUvc3lzL3N5c21hY3Jvcy5oIiAyIDMK IyAyMTkgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMiAzCiMgMjMwICIvdXNyL2luY2x1ZGUv c3lzL3R5cGVzLmgiIDMKdHlwZWRlZiBfX2Jsa2NudF90IGJsa2NudF90OwoKCgp0eXBlZGVmIF9f ZnNibGtjbnRfdCBmc2Jsa2NudF90OwoKCgp0eXBlZGVmIF9fZnNmaWxjbnRfdCBmc2ZpbGNudF90 OwojIDI2MiAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAzCn0KIyAzOTEgIi91c3IvaW5jbHVk ZS9zdGRsaWIuaCIgMiAzCgoKCgoKCmV4dGVybiBsb25nIGludCByYW5kb20gKHZvaWQpIDsKCgpl eHRlcm4gdm9pZCBzcmFuZG9tICh1bnNpZ25lZCBpbnQgX19zZWVkKSA7CgoKCgoKZXh0ZXJuIGNo YXIgKmluaXRzdGF0ZSAodW5zaWduZWQgaW50IF9fc2VlZCwgY2hhciAqX19zdGF0ZWJ1ZiwKICAg ICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fc3RhdGVsZW4pIDsKCgoKZXh0ZXJuIGNoYXIg KnNldHN0YXRlIChjaGFyICpfX3N0YXRlYnVmKSA7CgoKCgoKCgpzdHJ1Y3QgcmFuZG9tX2RhdGEK ICB7CiAgICBpbnQzMl90ICpmcHRyOwogICAgaW50MzJfdCAqcnB0cjsKICAgIGludDMyX3QgKnN0 YXRlOwogICAgaW50IHJhbmRfdHlwZTsKICAgIGludCByYW5kX2RlZzsKICAgIGludCByYW5kX3Nl cDsKICAgIGludDMyX3QgKmVuZF9wdHI7CiAgfTsKCmV4dGVybiBpbnQgcmFuZG9tX3IgKHN0cnVj dCByYW5kb21fZGF0YSAqIF9fYnVmLAogICAgICAgICAgICAgICAgICAgICBpbnQzMl90ICogX19y ZXN1bHQpIDsKCmV4dGVybiBpbnQgc3JhbmRvbV9yICh1bnNpZ25lZCBpbnQgX19zZWVkLCBzdHJ1 Y3QgcmFuZG9tX2RhdGEgKl9fYnVmKSA7CgpleHRlcm4gaW50IGluaXRzdGF0ZV9yICh1bnNpZ25l ZCBpbnQgX19zZWVkLCBjaGFyICogX19zdGF0ZWJ1ZiwKICAgICAgICAgICAgICAgICAgICAgICAg c2l6ZV90IF9fc3RhdGVsZW4sCiAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCByYW5kb21f ZGF0YSAqIF9fYnVmKSA7CgpleHRlcm4gaW50IHNldHN0YXRlX3IgKGNoYXIgKiBfX3N0YXRlYnVm LAogICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCByYW5kb21fZGF0YSAqIF9fYnVmKSA7CgoK CgoKZXh0ZXJuIGludCByYW5kICh2b2lkKSA7CgpleHRlcm4gdm9pZCBzcmFuZCAodW5zaWduZWQg aW50IF9fc2VlZCkgOwoKCgpleHRlcm4gaW50IHJhbmRfciAodW5zaWduZWQgaW50ICpfX3NlZWQp IDsKCgoKCgoKCmV4dGVybiBkb3VibGUgZHJhbmQ0OCAodm9pZCkgOwpleHRlcm4gZG91YmxlIGVy YW5kNDggKHVuc2lnbmVkIHNob3J0IGludCBfX3hzdWJpWzNdKSA7CgoKZXh0ZXJuIGxvbmcgaW50 IGxyYW5kNDggKHZvaWQpIDsKZXh0ZXJuIGxvbmcgaW50IG5yYW5kNDggKHVuc2lnbmVkIHNob3J0 IGludCBfX3hzdWJpWzNdKSA7CgoKZXh0ZXJuIGxvbmcgaW50IG1yYW5kNDggKHZvaWQpIDsKZXh0 ZXJuIGxvbmcgaW50IGpyYW5kNDggKHVuc2lnbmVkIHNob3J0IGludCBfX3hzdWJpWzNdKSA7CgoK ZXh0ZXJuIHZvaWQgc3JhbmQ0OCAobG9uZyBpbnQgX19zZWVkdmFsKSA7CmV4dGVybiB1bnNpZ25l ZCBzaG9ydCBpbnQgKnNlZWQ0OCAodW5zaWduZWQgc2hvcnQgaW50IF9fc2VlZDE2dlszXSkgOwpl eHRlcm4gdm9pZCBsY29uZzQ4ICh1bnNpZ25lZCBzaG9ydCBpbnQgX19wYXJhbVs3XSkgOwoKCgoK CnN0cnVjdCBkcmFuZDQ4X2RhdGEKICB7CiAgICB1bnNpZ25lZCBzaG9ydCBpbnQgX194WzNdOwog ICAgdW5zaWduZWQgc2hvcnQgaW50IF9fb2xkX3hbM107CiAgICB1bnNpZ25lZCBzaG9ydCBpbnQg X19jOwogICAgdW5zaWduZWQgc2hvcnQgaW50IF9faW5pdDsKICAgIHVuc2lnbmVkIGxvbmcgbG9u ZyBpbnQgX19hOwogIH07CgoKZXh0ZXJuIGludCBkcmFuZDQ4X3IgKHN0cnVjdCBkcmFuZDQ4X2Rh dGEgKiBfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSAqIF9fcmVzdWx0KSA7 CmV4dGVybiBpbnQgZXJhbmQ0OF9yICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVszXSwKICAg ICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkcmFuZDQ4X2RhdGEgKiBfX2J1ZmZlciwKICAgICAg ICAgICAgICAgICAgICAgIGRvdWJsZSAqIF9fcmVzdWx0KSA7CgoKZXh0ZXJuIGludCBscmFuZDQ4 X3IgKHN0cnVjdCBkcmFuZDQ4X2RhdGEgKiBfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAg IGxvbmcgaW50ICogX19yZXN1bHQpIDsKZXh0ZXJuIGludCBucmFuZDQ4X3IgKHVuc2lnbmVkIHNo b3J0IGludCBfX3hzdWJpWzNdLAogICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRyYW5kNDhf ZGF0YSAqIF9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgbG9uZyBpbnQgKiBfX3Jlc3Vs dCkgOwoKCmV4dGVybiBpbnQgbXJhbmQ0OF9yIChzdHJ1Y3QgZHJhbmQ0OF9kYXRhICogX19idWZm ZXIsCiAgICAgICAgICAgICAgICAgICAgICBsb25nIGludCAqIF9fcmVzdWx0KSA7CmV4dGVybiBp bnQganJhbmQ0OF9yICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVszXSwKICAgICAgICAgICAg ICAgICAgICAgIHN0cnVjdCBkcmFuZDQ4X2RhdGEgKiBfX2J1ZmZlciwKICAgICAgICAgICAgICAg ICAgICAgIGxvbmcgaW50ICogX19yZXN1bHQpIDsKCgpleHRlcm4gaW50IHNyYW5kNDhfciAobG9u ZyBpbnQgX19zZWVkdmFsLCBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX2J1ZmZlcikKICAgICAgICAg ICAgOwoKZXh0ZXJuIGludCBzZWVkNDhfciAodW5zaWduZWQgc2hvcnQgaW50IF9fc2VlZDE2dlsz XSwKICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19idWZmZXIpIDsK CmV4dGVybiBpbnQgbGNvbmc0OF9yICh1bnNpZ25lZCBzaG9ydCBpbnQgX19wYXJhbVs3XSwKICAg ICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fYnVmZmVyKSA7CiMgNTI3 ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIHZvaWQgKm1hbGxvYyAoc2l6ZV90IF9f c2l6ZSkgOwoKZXh0ZXJuIHZvaWQgKmNhbGxvYyAoc2l6ZV90IF9fbm1lbWIsIHNpemVfdCBfX3Np emUpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgoKCgpleHRlcm4gdm9pZCAq cmVhbGxvYyAodm9pZCAqX19wdHIsIHNpemVfdCBfX3NpemUpIDsKCmV4dGVybiB2b2lkIGZyZWUg KHZvaWQgKl9fcHRyKSA7CgoKCmV4dGVybiB2b2lkIGNmcmVlICh2b2lkICpfX3B0cikgOwoKCgoj IDEgIi91c3IvaW5jbHVkZS9hbGxvY2EuaCIgMSAzCiMgMjIgIi91c3IvaW5jbHVkZS9hbGxvY2Eu aCIgMwojIDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAyMyAiL3Vzci9pbmNsdWRl L2FsbG9jYS5oIiAyIDMKCgojIDEgIi91c3IvbGliL2djYy1saWIvaTU4Ni1tYW5kcmFrZS1saW51 eC1nbnUvMi45Ni9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAyNiAiL3Vzci9pbmNsdWRlL2FsbG9j YS5oIiAyIDMKCmV4dGVybiAiQyIgewoKCgoKCmV4dGVybiB2b2lkICphbGxvY2EgKHNpemVfdCBf X3NpemUpIDsKCgoKCgp9CiMgNTQ3ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDIgMwoKCgoKZXh0 ZXJuIHZvaWQgKnZhbGxvYyAoc2l6ZV90IF9fc2l6ZSkgOwojIDU2MSAiL3Vzci9pbmNsdWRlL3N0 ZGxpYi5oIiAzCmV4dGVybiB2b2lkIGFib3J0ICh2b2lkKSA7CgoKCmV4dGVybiBpbnQgYXRleGl0 ICh2b2lkICgqX19mdW5jKSAodm9pZCkpIDsKCgoKCmV4dGVybiBpbnQgb25fZXhpdCAodm9pZCAo Kl9fZnVuYykgKGludCBfX3N0YXR1cywgdm9pZCAqX19hcmcpLCB2b2lkICpfX2FyZykKICAgICAg ICAgICAgOwoKCgoKCmV4dGVybiB2b2lkIGV4aXQgKGludCBfX3N0YXR1cykgOwojIDU4NyAiL3Vz ci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBjaGFyICpnZXRlbnYgKGNvbnN0IGNoYXIgKl9f bmFtZSkgOwoKCgpleHRlcm4gY2hhciAqX19zZWN1cmVfZ2V0ZW52IChjb25zdCBjaGFyICpfX25h bWUpIDsKCgoKCgpleHRlcm4gaW50IHB1dGVudiAoY2hhciAqX19zdHJpbmcpIDsKCgoKCgpleHRl cm4gaW50IHNldGVudiAoY29uc3QgY2hhciAqX19uYW1lLCBjb25zdCBjaGFyICpfX3ZhbHVlLCBp bnQgX19yZXBsYWNlKQogICAgICAgICAgICA7CgoKZXh0ZXJuIGludCB1bnNldGVudiAoY29uc3Qg Y2hhciAqX19uYW1lKSA7CgoKCgoKCmV4dGVybiBpbnQgY2xlYXJlbnYgKHZvaWQpIDsKIyA2MjMg Ii91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gY2hhciAqbWt0ZW1wIChjaGFyICpfX3Rl bXBsYXRlKSA7CgoKCgoKCgpleHRlcm4gaW50IG1rc3RlbXAgKGNoYXIgKl9fdGVtcGxhdGUpIDsK IyA2NTAgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gY2hhciAqbWtkdGVtcCAoY2hh ciAqX190ZW1wbGF0ZSkgOwoKCgoKZXh0ZXJuIGludCBzeXN0ZW0gKGNvbnN0IGNoYXIgKl9fY29t bWFuZCkgOwojIDY3MiAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBjaGFyICpyZWFs cGF0aCAoY29uc3QgY2hhciAqIF9fbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICBjaGFyICog X19yZXNvbHZlZCkgOwoKCgoKCgp0eXBlZGVmIGludCAoKl9fY29tcGFyX2ZuX3QpIChjb25zdCB2 b2lkICosIGNvbnN0IHZvaWQgKik7CiMgNjg5ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0 ZXJuIHZvaWQgKmJzZWFyY2ggKGNvbnN0IHZvaWQgKl9fa2V5LCBjb25zdCB2b2lkICpfX2Jhc2Us CiAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19ubWVtYiwgc2l6ZV90IF9fc2l6ZSwgX19j b21wYXJfZm5fdCBfX2NvbXBhcik7CgoKCmV4dGVybiB2b2lkIHFzb3J0ICh2b2lkICpfX2Jhc2Us IHNpemVfdCBfX25tZW1iLCBzaXplX3QgX19zaXplLAogICAgICAgICAgICAgICAgICAgX19jb21w YXJfZm5fdCBfX2NvbXBhcik7CgoKCmV4dGVybiBpbnQgYWJzIChpbnQgX194KSA7CmV4dGVybiBs b25nIGludCBsYWJzIChsb25nIGludCBfX3gpIDsKIyA3MTAgIi91c3IvaW5jbHVkZS9zdGRsaWIu aCIgMwpleHRlcm4gZGl2X3QgZGl2IChpbnQgX19udW1lciwgaW50IF9fZGVub20pCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CmV4dGVybiBsZGl2X3QgbGRpdiAobG9u ZyBpbnQgX19udW1lciwgbG9uZyBpbnQgX19kZW5vbSkKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDsKIyA3MjggIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4g Y2hhciAqZWN2dCAoZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwgaW50ICogX19kZWNwdCwK ICAgICAgICAgICAgICAgICAgIGludCAqIF9fc2lnbikgOwoKCgoKZXh0ZXJuIGNoYXIgKmZjdnQg KGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsIGludCAqIF9fZGVjcHQsCiAgICAgICAgICAg ICAgICAgICBpbnQgKiBfX3NpZ24pIDsKCgoKCmV4dGVybiBjaGFyICpnY3Z0IChkb3VibGUgX192 YWx1ZSwgaW50IF9fbmRpZ2l0LCBjaGFyICpfX2J1ZikgOwoKCgoKZXh0ZXJuIGNoYXIgKnFlY3Z0 IChsb25nIGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsCiAgICAgICAgICAgICAgICAgICAg aW50ICogX19kZWNwdCwgaW50ICogX19zaWduKSA7CmV4dGVybiBjaGFyICpxZmN2dCAobG9uZyBk b3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LAogICAgICAgICAgICAgICAgICAgIGludCAqIF9f ZGVjcHQsIGludCAqIF9fc2lnbikgOwpleHRlcm4gY2hhciAqcWdjdnQgKGxvbmcgZG91YmxlIF9f dmFsdWUsIGludCBfX25kaWdpdCwgY2hhciAqX19idWYpIDsKCgoKCmV4dGVybiBpbnQgZWN2dF9y IChkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LCBpbnQgKiBfX2RlY3B0LAogICAgICAgICAg ICAgICAgICAgaW50ICogX19zaWduLCBjaGFyICogX19idWYsCiAgICAgICAgICAgICAgICAgICBz aXplX3QgX19sZW4pIDsKZXh0ZXJuIGludCBmY3Z0X3IgKGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19u ZGlnaXQsIGludCAqIF9fZGVjcHQsCiAgICAgICAgICAgICAgICAgICBpbnQgKiBfX3NpZ24sIGNo YXIgKiBfX2J1ZiwKICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX2xlbikgOwoKZXh0ZXJuIGlu dCBxZWN2dF9yIChsb25nIGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsCiAgICAgICAgICAg ICAgICAgICAgaW50ICogX19kZWNwdCwgaW50ICogX19zaWduLAogICAgICAgICAgICAgICAgICAg IGNoYXIgKiBfX2J1Ziwgc2l6ZV90IF9fbGVuKSA7CmV4dGVybiBpbnQgcWZjdnRfciAobG9uZyBk b3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LAogICAgICAgICAgICAgICAgICAgIGludCAqIF9f ZGVjcHQsIGludCAqIF9fc2lnbiwKICAgICAgICAgICAgICAgICAgICBjaGFyICogX19idWYsIHNp emVfdCBfX2xlbikgOwoKCgoKCgpleHRlcm4gaW50IG1ibGVuIChjb25zdCBjaGFyICpfX3MsIHNp emVfdCBfX24pIDsKCgpleHRlcm4gaW50IG1idG93YyAod2NoYXJfdCAqIF9fcHdjLAogICAgICAg ICAgICAgICAgICAgY29uc3QgY2hhciAqIF9fcywgc2l6ZV90IF9fbikgOwoKCmV4dGVybiBpbnQg d2N0b21iIChjaGFyICpfX3MsIHdjaGFyX3QgX193Y2hhcikgOwoKCgpleHRlcm4gc2l6ZV90IG1i c3Rvd2NzICh3Y2hhcl90ICogX19wd2NzLAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBj aGFyICogX19zLCBzaXplX3QgX19uKSA7CgpleHRlcm4gc2l6ZV90IHdjc3RvbWJzIChjaGFyICog X19zLAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB3Y2hhcl90ICogX19wd2NzLCBzaXpl X3QgX19uKQogICAgICAgICAgICA7CgoKCgoKCgpleHRlcm4gaW50IHJwbWF0Y2ggKGNvbnN0IGNo YXIgKl9fcmVzcG9uc2UpIDsKIyA4NTggIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4g aW50IGdldGxvYWRhdmcgKGRvdWJsZSBfX2xvYWRhdmdbXSwgaW50IF9fbmVsZW0pIDsKCgoKCgp9 CiMgNTUgIi91c3IvaW5jbHVkZS9nKystMy9zdGxfYWxsb2MuaCIgMiAzCiMgMSAiL3Vzci9pbmNs dWRlL3N0cmluZy5oIiAxIDMKIyA1NiAiL3Vzci9pbmNsdWRlL2crKy0zL3N0bF9hbGxvYy5oIiAy IDMKIyAxICIvdXNyL2luY2x1ZGUvYXNzZXJ0LmgiIDEgMwojIDM2ICIvdXNyL2luY2x1ZGUvYXNz ZXJ0LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMzcgIi91c3IvaW5j bHVkZS9hc3NlcnQuaCIgMiAzCiMgNjUgIi91c3IvaW5jbHVkZS9hc3NlcnQuaCIgMwpleHRlcm4g IkMiIHsKCgpleHRlcm4gdm9pZCBfX2Fzc2VydF9mYWlsIChjb25zdCBjaGFyICpfX2Fzc2VydGlv biwgY29uc3QgY2hhciAqX19maWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25l ZCBpbnQgX19saW5lLCBjb25zdCBjaGFyICpfX2Z1bmN0aW9uKQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgOwoKCmV4dGVybiB2b2lkIF9fYXNzZXJ0X3BlcnJvcl9m YWlsIChpbnQgX19lcnJudW0sIGNvbnN0IGNoYXIgKl9fZmlsZSwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBfX2xpbmUsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjb25zdCBjaGFyICpfX2Z1bmN0aW9uKQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgOwoKCgoKZXh0ZXJuIHZvaWQgX19hc3NlcnQgKGNvbnN0 IGNoYXIgKl9fYXNzZXJ0aW9uLCBjb25zdCBjaGFyICpfX2ZpbGUsIGludCBfX2xpbmUpCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKfQojIDU3ICIvdXNyL2lu Y2x1ZGUvZysrLTMvc3RsX2FsbG9jLmgiIDIgMwojIDE0MSAiL3Vzci9pbmNsdWRlL2crKy0zL3N0 bF9hbGxvYy5oIiAzCnRlbXBsYXRlIDxpbnQgX19pbnN0PgpjbGFzcyBfX21hbGxvY19hbGxvY190 ZW1wbGF0ZSB7Cgpwcml2YXRlOgoKICBzdGF0aWMgdm9pZCogX1Nfb29tX21hbGxvYyhzaXplX3Qp OwogIHN0YXRpYyB2b2lkKiBfU19vb21fcmVhbGxvYyh2b2lkKiwgc2l6ZV90KTsKCgogIHN0YXRp YyB2b2lkICgqIF9fbWFsbG9jX2FsbG9jX29vbV9oYW5kbGVyKSgpOwoKCnB1YmxpYzoKCiAgc3Rh dGljIHZvaWQqIGFsbG9jYXRlKHNpemVfdCBfX24pCiAgewogICAgdm9pZCogX19yZXN1bHQgPSBt YWxsb2MoX19uKTsKICAgIGlmICgwID09IF9fcmVzdWx0KSBfX3Jlc3VsdCA9IF9TX29vbV9tYWxs b2MoX19uKTsKICAgIHJldHVybiBfX3Jlc3VsdDsKICB9CgogIHN0YXRpYyB2b2lkIGRlYWxsb2Nh dGUodm9pZCogX19wLCBzaXplX3QgKQogIHsKICAgIGZyZWUoX19wKTsKICB9CgogIHN0YXRpYyB2 b2lkKiByZWFsbG9jYXRlKHZvaWQqIF9fcCwgc2l6ZV90ICwgc2l6ZV90IF9fbmV3X3N6KQogIHsK ICAgIHZvaWQqIF9fcmVzdWx0ID0gcmVhbGxvYyhfX3AsIF9fbmV3X3N6KTsKICAgIGlmICgwID09 IF9fcmVzdWx0KSBfX3Jlc3VsdCA9IF9TX29vbV9yZWFsbG9jKF9fcCwgX19uZXdfc3opOwogICAg cmV0dXJuIF9fcmVzdWx0OwogIH0KCiAgc3RhdGljIHZvaWQgKCogX19zZXRfbWFsbG9jX2hhbmRs ZXIodm9pZCAoKl9fZikoKSkpKCkKICB7CiAgICB2b2lkICgqIF9fb2xkKSgpID0gX19tYWxsb2Nf YWxsb2Nfb29tX2hhbmRsZXI7CiAgICBfX21hbGxvY19hbGxvY19vb21faGFuZGxlciA9IF9fZjsK ICAgIHJldHVybihfX29sZCk7CiAgfQoKfTsKCgoKCnRlbXBsYXRlIDxpbnQgX19pbnN0Pgp2b2lk ICgqIF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9faW5zdD46Ol9fbWFsbG9jX2FsbG9jX29vbV9o YW5kbGVyKSgpID0gMDsKCgp0ZW1wbGF0ZSA8aW50IF9faW5zdD4Kdm9pZCoKX19tYWxsb2NfYWxs b2NfdGVtcGxhdGU8X19pbnN0Pjo6X1Nfb29tX21hbGxvYyhzaXplX3QgX19uKQp7CiAgICB2b2lk ICgqIF9fbXlfbWFsbG9jX2hhbmRsZXIpKCk7CiAgICB2b2lkKiBfX3Jlc3VsdDsKCiAgICBmb3Ig KDs7KSB7CiAgICAgICAgX19teV9tYWxsb2NfaGFuZGxlciA9IF9fbWFsbG9jX2FsbG9jX29vbV9o YW5kbGVyOwogICAgICAgIGlmICgwID09IF9fbXlfbWFsbG9jX2hhbmRsZXIpIHsgY2VyciA8PCAi b3V0IG9mIG1lbW9yeSIgPDwgZW5kbDsgZXhpdCgxKTsgfQogICAgICAgICgqX19teV9tYWxsb2Nf aGFuZGxlcikoKTsKICAgICAgICBfX3Jlc3VsdCA9IG1hbGxvYyhfX24pOwogICAgICAgIGlmIChf X3Jlc3VsdCkgcmV0dXJuKF9fcmVzdWx0KTsKICAgIH0KfQoKdGVtcGxhdGUgPGludCBfX2luc3Q+ CnZvaWQqIF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9faW5zdD46Ol9TX29vbV9yZWFsbG9jKHZv aWQqIF9fcCwgc2l6ZV90IF9fbikKewogICAgdm9pZCAoKiBfX215X21hbGxvY19oYW5kbGVyKSgp OwogICAgdm9pZCogX19yZXN1bHQ7CgogICAgZm9yICg7OykgewogICAgICAgIF9fbXlfbWFsbG9j X2hhbmRsZXIgPSBfX21hbGxvY19hbGxvY19vb21faGFuZGxlcjsKICAgICAgICBpZiAoMCA9PSBf X215X21hbGxvY19oYW5kbGVyKSB7IGNlcnIgPDwgIm91dCBvZiBtZW1vcnkiIDw8IGVuZGw7IGV4 aXQoMSk7IH0KICAgICAgICAoKl9fbXlfbWFsbG9jX2hhbmRsZXIpKCk7CiAgICAgICAgX19yZXN1 bHQgPSByZWFsbG9jKF9fcCwgX19uKTsKICAgICAgICBpZiAoX19yZXN1bHQpIHJldHVybihfX3Jl c3VsdCk7CiAgICB9Cn0KCnR5cGVkZWYgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8MD4gbWFsbG9j X2FsbG9jOwoKdGVtcGxhdGU8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CmNsYXNzIHNpbXBsZV9h bGxvYyB7CgpwdWJsaWM6CiAgICBzdGF0aWMgX1RwKiBhbGxvY2F0ZShzaXplX3QgX19uKQogICAg ICB7IHJldHVybiAwID09IF9fbiA/IDAgOiAoX1RwKikgX0FsbG9jOjphbGxvY2F0ZShfX24gKiBz aXplb2YgKF9UcCkpOyB9CiAgICBzdGF0aWMgX1RwKiBhbGxvY2F0ZSh2b2lkKQogICAgICB7IHJl dHVybiAoX1RwKikgX0FsbG9jOjphbGxvY2F0ZShzaXplb2YgKF9UcCkpOyB9CiAgICBzdGF0aWMg dm9pZCBkZWFsbG9jYXRlKF9UcCogX19wLCBzaXplX3QgX19uKQogICAgICB7IGlmICgwICE9IF9f bikgX0FsbG9jOjpkZWFsbG9jYXRlKF9fcCwgX19uICogc2l6ZW9mIChfVHApKTsgfQogICAgc3Rh dGljIHZvaWQgZGVhbGxvY2F0ZShfVHAqIF9fcCkKICAgICAgeyBfQWxsb2M6OmRlYWxsb2NhdGUo X19wLCBzaXplb2YgKF9UcCkpOyB9Cn07CgoKCgoKCnRlbXBsYXRlIDxjbGFzcyBfQWxsb2M+CmNs YXNzIGRlYnVnX2FsbG9jIHsKCnByaXZhdGU6CgogIGVudW0ge19TX2V4dHJhID0gOH07CgoKCnB1 YmxpYzoKCiAgc3RhdGljIHZvaWQqIGFsbG9jYXRlKHNpemVfdCBfX24pCiAgewogICAgY2hhciog X19yZXN1bHQgPSAoY2hhciopX0FsbG9jOjphbGxvY2F0ZShfX24gKyBfU19leHRyYSk7CiAgICAq KHNpemVfdCopX19yZXN1bHQgPSBfX247CiAgICByZXR1cm4gX19yZXN1bHQgKyBfU19leHRyYTsK ICB9CgogIHN0YXRpYyB2b2lkIGRlYWxsb2NhdGUodm9pZCogX19wLCBzaXplX3QgX19uKQogIHsK ICAgIGNoYXIqIF9fcmVhbF9wID0gKGNoYXIqKV9fcCAtIF9TX2V4dHJhOwogICAgKCh2b2lkKSAo KCooc2l6ZV90KilfX3JlYWxfcCA9PSBfX24pID8gMCA6IChfX2Fzc2VydF9mYWlsICgiKihzaXpl X3QqKV9fcmVhbF9wID09IF9fbiIsICIvdXNyL2luY2x1ZGUvZysrLTMvc3RsX2FsbG9jLmgiLCAy NjMsICgoY29uc3QgY2hhciAqKSAwKSksIDApKSk7CiAgICBfQWxsb2M6OmRlYWxsb2NhdGUoX19y ZWFsX3AsIF9fbiArIF9TX2V4dHJhKTsKICB9CgogIHN0YXRpYyB2b2lkKiByZWFsbG9jYXRlKHZv aWQqIF9fcCwgc2l6ZV90IF9fb2xkX3N6LCBzaXplX3QgX19uZXdfc3opCiAgewogICAgY2hhciog X19yZWFsX3AgPSAoY2hhciopX19wIC0gX1NfZXh0cmE7CiAgICAoKHZvaWQpICgoKihzaXplX3Qq KV9fcmVhbF9wID09IF9fb2xkX3N6KSA/IDAgOiAoX19hc3NlcnRfZmFpbCAoIiooc2l6ZV90Kilf X3JlYWxfcCA9PSBfX29sZF9zeiIsICIvdXNyL2luY2x1ZGUvZysrLTMvc3RsX2FsbG9jLmgiLCAy NzAsICgoY29uc3QgY2hhciAqKSAwKSksIDApKSk7CiAgICBjaGFyKiBfX3Jlc3VsdCA9IChjaGFy KikKICAgICAgX0FsbG9jOjpyZWFsbG9jYXRlKF9fcmVhbF9wLCBfX29sZF9zeiArIF9TX2V4dHJh LCBfX25ld19zeiArIF9TX2V4dHJhKTsKICAgICooc2l6ZV90KilfX3Jlc3VsdCA9IF9fbmV3X3N6 OwogICAgcmV0dXJuIF9fcmVzdWx0ICsgX1NfZXh0cmE7CiAgfQoKfTsKIyAzMTkgIi91c3IvaW5j bHVkZS9nKystMy9zdGxfYWxsb2MuaCIgMwp0ZW1wbGF0ZSA8Ym9vbCB0aHJlYWRzLCBpbnQgaW5z dD4KY2xhc3MgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlIHsKCnByaXZhdGU6CgoKCiAgICBlbnVt IHtfQUxJR04gPSA4fTsKICAgIGVudW0ge19NQVhfQllURVMgPSAxMjh9OwogICAgZW51bSB7X05G UkVFTElTVFMgPSBfTUFYX0JZVEVTL19BTElHTn07CgogIHN0YXRpYyBzaXplX3QKICBfU19yb3Vu ZF91cChzaXplX3QgX19ieXRlcykKICAgIHsgcmV0dXJuICgoKF9fYnl0ZXMpICsgX0FMSUdOLTEp ICYgfihfQUxJR04gLSAxKSk7IH0KCnByaXZhdGU6CiAgdW5pb24gX09iaiB7CiAgICAgICAgdW5p b24gX09iaiogX01fZnJlZV9saXN0X2xpbms7CiAgICAgICAgY2hhciBfTV9jbGllbnRfZGF0YVsx XTsKICB9Owpwcml2YXRlOgoKCgoKICAgIHN0YXRpYyBfT2JqKiBfU19mcmVlX2xpc3RbX05GUkVF TElTVFNdOwoKICBzdGF0aWMgc2l6ZV90IF9TX2ZyZWVsaXN0X2luZGV4KHNpemVfdCBfX2J5dGVz KSB7CiAgICAgICAgcmV0dXJuICgoKF9fYnl0ZXMpICsgX0FMSUdOLTEpL19BTElHTiAtIDEpOwog IH0KCgogIHN0YXRpYyB2b2lkKiBfU19yZWZpbGwoc2l6ZV90IF9fbik7CgoKICBzdGF0aWMgY2hh ciogX1NfY2h1bmtfYWxsb2Moc2l6ZV90IF9fc2l6ZSwgaW50JiBfX25vYmpzKTsKCgogIHN0YXRp YyBjaGFyKiBfU19zdGFydF9mcmVlOwogIHN0YXRpYyBjaGFyKiBfU19lbmRfZnJlZTsKICBzdGF0 aWMgc2l6ZV90IF9TX2hlYXBfc2l6ZTsKIyAzOTEgIi91c3IvaW5jbHVkZS9nKystMy9zdGxfYWxs b2MuaCIgMwogICAgY2xhc3MgX0xvY2sgewogICAgICAgIHB1YmxpYzoKICAgICAgICAgICAgX0xv Y2soKSB7IDsgfQogICAgICAgICAgICB+X0xvY2soKSB7IDsgfQogICAgfTsKICAgIGZyaWVuZCBj bGFzcyBfTG9jazsKCnB1YmxpYzoKCgogIHN0YXRpYyB2b2lkKiBhbGxvY2F0ZShzaXplX3QgX19u KQogIHsKICAgIF9PYmoqICogX19teV9mcmVlX2xpc3Q7CiAgICBfT2JqKiBfX3Jlc3VsdDsKCiAg ICBpZiAoX19uID4gKHNpemVfdCkgX01BWF9CWVRFUykgewogICAgICAgIHJldHVybihtYWxsb2Nf YWxsb2M6OmFsbG9jYXRlKF9fbikpOwogICAgfQogICAgX19teV9mcmVlX2xpc3QgPSBfU19mcmVl X2xpc3QgKyBfU19mcmVlbGlzdF9pbmRleChfX24pOwoKCgoKCgoKICAgIF9fcmVzdWx0ID0gKl9f bXlfZnJlZV9saXN0OwogICAgaWYgKF9fcmVzdWx0ID09IDApIHsKICAgICAgICB2b2lkKiBfX3Ig PSBfU19yZWZpbGwoX1Nfcm91bmRfdXAoX19uKSk7CiAgICAgICAgcmV0dXJuIF9fcjsKICAgIH0K ICAgICpfX215X2ZyZWVfbGlzdCA9IF9fcmVzdWx0IC0+IF9NX2ZyZWVfbGlzdF9saW5rOwogICAg cmV0dXJuIChfX3Jlc3VsdCk7CiAgfTsKCgogIHN0YXRpYyB2b2lkIGRlYWxsb2NhdGUodm9pZCog X19wLCBzaXplX3QgX19uKQogIHsKICAgIF9PYmoqIF9fcSA9IChfT2JqKilfX3A7CiAgICBfT2Jq KiAqIF9fbXlfZnJlZV9saXN0OwoKICAgIGlmIChfX24gPiAoc2l6ZV90KSBfTUFYX0JZVEVTKSB7 CiAgICAgICAgbWFsbG9jX2FsbG9jOjpkZWFsbG9jYXRlKF9fcCwgX19uKTsKICAgICAgICByZXR1 cm47CiAgICB9CiAgICBfX215X2ZyZWVfbGlzdCA9IF9TX2ZyZWVfbGlzdCArIF9TX2ZyZWVsaXN0 X2luZGV4KF9fbik7CgoKCgoKICAgIF9fcSAtPiBfTV9mcmVlX2xpc3RfbGluayA9ICpfX215X2Zy ZWVfbGlzdDsKICAgICpfX215X2ZyZWVfbGlzdCA9IF9fcTsKCiAgfQoKICBzdGF0aWMgdm9pZCog cmVhbGxvY2F0ZSh2b2lkKiBfX3AsIHNpemVfdCBfX29sZF9zeiwgc2l6ZV90IF9fbmV3X3N6KTsK Cn0gOwoKdHlwZWRlZiBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8ZmFsc2UsIDA+IGFsbG9jOwp0 eXBlZGVmIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxmYWxzZSwgMD4gc2luZ2xlX2NsaWVudF9h bGxvYzsKCgoKCgoKCnRlbXBsYXRlIDxib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4KY2hhcioK X19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0Pjo6X1NfY2h1bmtfYWxs b2Moc2l6ZV90IF9fc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgaW50JiBfX25vYmpzKQp7CiAgICBjaGFyKiBfX3Jlc3VsdDsK ICAgIHNpemVfdCBfX3RvdGFsX2J5dGVzID0gX19zaXplICogX19ub2JqczsKICAgIHNpemVfdCBf X2J5dGVzX2xlZnQgPSBfU19lbmRfZnJlZSAtIF9TX3N0YXJ0X2ZyZWU7CgogICAgaWYgKF9fYnl0 ZXNfbGVmdCA+PSBfX3RvdGFsX2J5dGVzKSB7CiAgICAgICAgX19yZXN1bHQgPSBfU19zdGFydF9m cmVlOwogICAgICAgIF9TX3N0YXJ0X2ZyZWUgKz0gX190b3RhbF9ieXRlczsKICAgICAgICByZXR1 cm4oX19yZXN1bHQpOwogICAgfSBlbHNlIGlmIChfX2J5dGVzX2xlZnQgPj0gX19zaXplKSB7CiAg ICAgICAgX19ub2JqcyA9IChpbnQpKF9fYnl0ZXNfbGVmdC9fX3NpemUpOwogICAgICAgIF9fdG90 YWxfYnl0ZXMgPSBfX3NpemUgKiBfX25vYmpzOwogICAgICAgIF9fcmVzdWx0ID0gX1Nfc3RhcnRf ZnJlZTsKICAgICAgICBfU19zdGFydF9mcmVlICs9IF9fdG90YWxfYnl0ZXM7CiAgICAgICAgcmV0 dXJuKF9fcmVzdWx0KTsKICAgIH0gZWxzZSB7CiAgICAgICAgc2l6ZV90IF9fYnl0ZXNfdG9fZ2V0 ID0KICAgICAgICAgIDIgKiBfX3RvdGFsX2J5dGVzICsgX1Nfcm91bmRfdXAoX1NfaGVhcF9zaXpl ID4+IDQpOwoKICAgICAgICBpZiAoX19ieXRlc19sZWZ0ID4gMCkgewogICAgICAgICAgICBfT2Jq KiAqIF9fbXlfZnJlZV9saXN0ID0KICAgICAgICAgICAgICAgICAgICAgICAgX1NfZnJlZV9saXN0 ICsgX1NfZnJlZWxpc3RfaW5kZXgoX19ieXRlc19sZWZ0KTsKCiAgICAgICAgICAgICgoX09iaiop X1Nfc3RhcnRfZnJlZSkgLT4gX01fZnJlZV9saXN0X2xpbmsgPSAqX19teV9mcmVlX2xpc3Q7CiAg ICAgICAgICAgICpfX215X2ZyZWVfbGlzdCA9IChfT2JqKilfU19zdGFydF9mcmVlOwogICAgICAg IH0KICAgICAgICBfU19zdGFydF9mcmVlID0gKGNoYXIqKW1hbGxvYyhfX2J5dGVzX3RvX2dldCk7 CiAgICAgICAgaWYgKDAgPT0gX1Nfc3RhcnRfZnJlZSkgewogICAgICAgICAgICBzaXplX3QgX19p OwogICAgICAgICAgICBfT2JqKiAqIF9fbXlfZnJlZV9saXN0OwogICAgICAgICAgICBfT2JqKiBf X3A7CgoKCiAgICAgICAgICAgIGZvciAoX19pID0gX19zaXplOyBfX2kgPD0gX01BWF9CWVRFUzsg X19pICs9IF9BTElHTikgewogICAgICAgICAgICAgICAgX19teV9mcmVlX2xpc3QgPSBfU19mcmVl X2xpc3QgKyBfU19mcmVlbGlzdF9pbmRleChfX2kpOwogICAgICAgICAgICAgICAgX19wID0gKl9f bXlfZnJlZV9saXN0OwogICAgICAgICAgICAgICAgaWYgKDAgIT0gX19wKSB7CiAgICAgICAgICAg ICAgICAgICAgKl9fbXlfZnJlZV9saXN0ID0gX19wIC0+IF9NX2ZyZWVfbGlzdF9saW5rOwogICAg ICAgICAgICAgICAgICAgIF9TX3N0YXJ0X2ZyZWUgPSAoY2hhciopX19wOwogICAgICAgICAgICAg ICAgICAgIF9TX2VuZF9mcmVlID0gX1Nfc3RhcnRfZnJlZSArIF9faTsKICAgICAgICAgICAgICAg ICAgICByZXR1cm4oX1NfY2h1bmtfYWxsb2MoX19zaXplLCBfX25vYmpzKSk7CgoKICAgICAgICAg ICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBfU19lbmRfZnJlZSA9IDA7CiAgICAg ICAgICAgIF9TX3N0YXJ0X2ZyZWUgPSAoY2hhciopbWFsbG9jX2FsbG9jOjphbGxvY2F0ZShfX2J5 dGVzX3RvX2dldCk7CgoKCiAgICAgICAgfQogICAgICAgIF9TX2hlYXBfc2l6ZSArPSBfX2J5dGVz X3RvX2dldDsKICAgICAgICBfU19lbmRfZnJlZSA9IF9TX3N0YXJ0X2ZyZWUgKyBfX2J5dGVzX3Rv X2dldDsKICAgICAgICByZXR1cm4oX1NfY2h1bmtfYWxsb2MoX19zaXplLCBfX25vYmpzKSk7CiAg ICB9Cn0KCgoKCgp0ZW1wbGF0ZSA8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+CnZvaWQqCl9f ZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD46Ol9TX3JlZmlsbChzaXpl X3QgX19uKQp7CiAgICBpbnQgX19ub2JqcyA9IDIwOwogICAgY2hhciogX19jaHVuayA9IF9TX2No dW5rX2FsbG9jKF9fbiwgX19ub2Jqcyk7CiAgICBfT2JqKiAqIF9fbXlfZnJlZV9saXN0OwogICAg X09iaiogX19yZXN1bHQ7CiAgICBfT2JqKiBfX2N1cnJlbnRfb2JqOwogICAgX09iaiogX19uZXh0 X29iajsKICAgIGludCBfX2k7CgogICAgaWYgKDEgPT0gX19ub2JqcykgcmV0dXJuKF9fY2h1bmsp OwogICAgX19teV9mcmVlX2xpc3QgPSBfU19mcmVlX2xpc3QgKyBfU19mcmVlbGlzdF9pbmRleChf X24pOwoKCiAgICAgIF9fcmVzdWx0ID0gKF9PYmoqKV9fY2h1bms7CiAgICAgICpfX215X2ZyZWVf bGlzdCA9IF9fbmV4dF9vYmogPSAoX09iaiopKF9fY2h1bmsgKyBfX24pOwogICAgICBmb3IgKF9f aSA9IDE7IDsgX19pKyspIHsKICAgICAgICBfX2N1cnJlbnRfb2JqID0gX19uZXh0X29iajsKICAg ICAgICBfX25leHRfb2JqID0gKF9PYmoqKSgoY2hhciopX19uZXh0X29iaiArIF9fbik7CiAgICAg ICAgaWYgKF9fbm9ianMgLSAxID09IF9faSkgewogICAgICAgICAgICBfX2N1cnJlbnRfb2JqIC0+ IF9NX2ZyZWVfbGlzdF9saW5rID0gMDsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfSBlbHNl IHsKICAgICAgICAgICAgX19jdXJyZW50X29iaiAtPiBfTV9mcmVlX2xpc3RfbGluayA9IF9fbmV4 dF9vYmo7CiAgICAgICAgfQogICAgICB9CiAgICByZXR1cm4oX19yZXN1bHQpOwp9Cgp0ZW1wbGF0 ZSA8Ym9vbCB0aHJlYWRzLCBpbnQgaW5zdD4Kdm9pZCoKX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRl PHRocmVhZHMsIGluc3Q+OjpyZWFsbG9jYXRlKHZvaWQqIF9fcCwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX29sZF9zeiwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX25l d19zeikKewogICAgdm9pZCogX19yZXN1bHQ7CiAgICBzaXplX3QgX19jb3B5X3N6OwoKICAgIGlm IChfX29sZF9zeiA+IChzaXplX3QpIF9NQVhfQllURVMgJiYgX19uZXdfc3ogPiAoc2l6ZV90KSBf TUFYX0JZVEVTKSB7CiAgICAgICAgcmV0dXJuKHJlYWxsb2MoX19wLCBfX25ld19zeikpOwogICAg fQogICAgaWYgKF9TX3JvdW5kX3VwKF9fb2xkX3N6KSA9PSBfU19yb3VuZF91cChfX25ld19zeikp IHJldHVybihfX3ApOwogICAgX19yZXN1bHQgPSBhbGxvY2F0ZShfX25ld19zeik7CiAgICBfX2Nv cHlfc3ogPSBfX25ld19zeiA+IF9fb2xkX3N6PyBfX29sZF9zeiA6IF9fbmV3X3N6OwogICAgbWVt Y3B5KF9fcmVzdWx0LCBfX3AsIF9fY29weV9zeik7CiAgICBkZWFsbG9jYXRlKF9fcCwgX19vbGRf c3opOwogICAgcmV0dXJuKF9fcmVzdWx0KTsKfQojIDY5MSAiL3Vzci9pbmNsdWRlL2crKy0zL3N0 bF9hbGxvYy5oIiAzCnRlbXBsYXRlIDxib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4KY2hhciog X19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0Pjo6X1Nfc3RhcnRfZnJl ZSA9IDA7Cgp0ZW1wbGF0ZSA8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+CmNoYXIqIF9fZGVm YXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD46Ol9TX2VuZF9mcmVlID0gMDsK CnRlbXBsYXRlIDxib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4Kc2l6ZV90IF9fZGVmYXVsdF9h bGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD46Ol9TX2hlYXBfc2l6ZSA9IDA7Cgp0ZW1w bGF0ZSA8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+Cl9fZGVmYXVsdF9hbGxvY190ZW1wbGF0 ZTxfX3RocmVhZHMsIF9faW5zdD46Ol9PYmoqCl9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3Ro cmVhZHMsIF9faW5zdD4gOjpfU19mcmVlX2xpc3RbCiAgICBfTkZSRUVMSVNUUwpdID0gezAsIDAs IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIH07CiMgMjIgIi91c3Iv aW5jbHVkZS9nKystMy9hbGxvYy5oIiAyIDMKIyA0MCAiL3Vzci9pbmNsdWRlL2crKy0zL3N0ZC9i YXN0cmluZy5oIiAyIDMKCmV4dGVybiAiQysrIiB7CmNsYXNzIGlzdHJlYW07IGNsYXNzIG9zdHJl YW07CgojIDEgIi91c3IvaW5jbHVkZS9nKystMy9pdGVyYXRvciIgMSAzCiMgMzAgIi91c3IvaW5j bHVkZS9nKystMy9pdGVyYXRvciIgMwojIDEgIi91c3IvaW5jbHVkZS9nKystMy9zdGxfY29uZmln LmgiIDEgMwojIDMxICIvdXNyL2luY2x1ZGUvZysrLTMvaXRlcmF0b3IiIDIgMwojIDEgIi91c3Iv aW5jbHVkZS9nKystMy9zdGxfcmVsb3BzLmgiIDEgMwojIDM2ICIvdXNyL2luY2x1ZGUvZysrLTMv c3RsX3JlbG9wcy5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfVHA+CmlubGluZSBib29sIG9wZXJhdG9y IT0oY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSB7CiAgcmV0dXJuICEoX194ID09IF9f eSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHA+CmlubGluZSBib29sIG9wZXJhdG9yPihjb25zdCBf VHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIHsKICByZXR1cm4gX195IDwgX194Owp9Cgp0ZW1wbGF0 ZSA8Y2xhc3MgX1RwPgppbmxpbmUgYm9vbCBvcGVyYXRvcjw9KGNvbnN0IF9UcCYgX194LCBjb25z dCBfVHAmIF9feSkgewogIHJldHVybiAhKF9feSA8IF9feCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBf VHA+CmlubGluZSBib29sIG9wZXJhdG9yPj0oY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195 KSB7CiAgcmV0dXJuICEoX194IDwgX195KTsKfQojIDMyICIvdXNyL2luY2x1ZGUvZysrLTMvaXRl cmF0b3IiIDIgMwojIDEgIi91c3IvbGliL2djYy1saWIvaTU4Ni1tYW5kcmFrZS1saW51eC1nbnUv Mi45Ni9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAzMyAiL3Vzci9pbmNsdWRlL2crKy0zL2l0ZXJh dG9yIiAyIDMKCgoKIyAxICIvdXNyL2luY2x1ZGUvZysrLTMvaW9zdHJlYW0uaCIgMSAzCiMgMzcg Ii91c3IvaW5jbHVkZS9nKystMy9pdGVyYXRvciIgMiAzCgojIDEgIi91c3IvaW5jbHVkZS9nKyst My9zdGxfaXRlcmF0b3IuaCIgMSAzCiMgMzYgIi91c3IvaW5jbHVkZS9nKystMy9zdGxfaXRlcmF0 b3IuaCIgMwpzdHJ1Y3QgaW5wdXRfaXRlcmF0b3JfdGFnIHt9OwpzdHJ1Y3Qgb3V0cHV0X2l0ZXJh dG9yX3RhZyB7fTsKc3RydWN0IGZvcndhcmRfaXRlcmF0b3JfdGFnIDogcHVibGljIGlucHV0X2l0 ZXJhdG9yX3RhZyB7fTsKc3RydWN0IGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnIDogcHVibGlj IGZvcndhcmRfaXRlcmF0b3JfdGFnIHt9OwpzdHJ1Y3QgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90 YWcgOiBwdWJsaWMgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcge307CgoKCgoKCnRlbXBsYXRl IDxjbGFzcyBfVHAsIGNsYXNzIF9EaXN0YW5jZT4gc3RydWN0IGlucHV0X2l0ZXJhdG9yIHsKICB0 eXBlZGVmIGlucHV0X2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIF9U cCB2YWx1ZV90eXBlOwogIHR5cGVkZWYgX0Rpc3RhbmNlIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBl ZGVmIF9UcCogcG9pbnRlcjsKICB0eXBlZGVmIF9UcCYgcmVmZXJlbmNlOwp9OwoKc3RydWN0IG91 dHB1dF9pdGVyYXRvciB7CiAgdHlwZWRlZiBvdXRwdXRfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2Nh dGVnb3J5OwogIHR5cGVkZWYgdm9pZCB2YWx1ZV90eXBlOwogIHR5cGVkZWYgdm9pZCBkaWZmZXJl bmNlX3R5cGU7CiAgdHlwZWRlZiB2b2lkIHBvaW50ZXI7CiAgdHlwZWRlZiB2b2lkIHJlZmVyZW5j ZTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9EaXN0YW5jZT4gc3RydWN0IGZvcndh cmRfaXRlcmF0b3IgewogIHR5cGVkZWYgZm9yd2FyZF9pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0 ZWdvcnk7CiAgdHlwZWRlZiBfVHAgdmFsdWVfdHlwZTsKICB0eXBlZGVmIF9EaXN0YW5jZSBkaWZm ZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiBfVHAqIHBvaW50ZXI7CiAgdHlwZWRlZiBfVHAmIHJlZmVy ZW5jZTsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfRGlzdGFuY2U+IHN0cnVjdCBi aWRpcmVjdGlvbmFsX2l0ZXJhdG9yIHsKICB0eXBlZGVmIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3Jf dGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVkZWYgX1RwIHZhbHVlX3R5cGU7CiAgdHlwZWRl ZiBfRGlzdGFuY2UgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgX1RwKiBwb2ludGVyOwogIHR5 cGVkZWYgX1RwJiByZWZlcmVuY2U7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfRGlz dGFuY2U+IHN0cnVjdCByYW5kb21fYWNjZXNzX2l0ZXJhdG9yIHsKICB0eXBlZGVmIHJhbmRvbV9h Y2Nlc3NfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVkZWYgX1RwIHZhbHVl X3R5cGU7CiAgdHlwZWRlZiBfRGlzdGFuY2UgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgX1Rw KiBwb2ludGVyOwogIHR5cGVkZWYgX1RwJiByZWZlcmVuY2U7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3Mg X0NhdGVnb3J5LCBjbGFzcyBfVHAsIGNsYXNzIF9EaXN0YW5jZSA9IHB0cmRpZmZfdCwKICAgICAg ICAgIGNsYXNzIF9Qb2ludGVyID0gX1RwKiwgY2xhc3MgX1JlZmVyZW5jZSA9IF9UcCY+CnN0cnVj dCBpdGVyYXRvciB7CiAgdHlwZWRlZiBfQ2F0ZWdvcnkgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlw ZWRlZiBfVHAgdmFsdWVfdHlwZTsKICB0eXBlZGVmIF9EaXN0YW5jZSBkaWZmZXJlbmNlX3R5cGU7 CiAgdHlwZWRlZiBfUG9pbnRlciBwb2ludGVyOwogIHR5cGVkZWYgX1JlZmVyZW5jZSByZWZlcmVu Y2U7Cn07CiMgMTc1ICIvdXNyL2luY2x1ZGUvZysrLTMvc3RsX2l0ZXJhdG9yLmgiIDMKdGVtcGxh dGUgPGNsYXNzIF9UcCwgY2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUgaW5wdXRfaXRlcmF0b3JfdGFn Cml0ZXJhdG9yX2NhdGVnb3J5KGNvbnN0IGlucHV0X2l0ZXJhdG9yPF9UcCwgX0Rpc3RhbmNlPiYp CiAgeyByZXR1cm4gaW5wdXRfaXRlcmF0b3JfdGFnKCk7IH0KCmlubGluZSBvdXRwdXRfaXRlcmF0 b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5KGNvbnN0IG91dHB1dF9pdGVyYXRvciYpCiAgeyByZXR1 cm4gb3V0cHV0X2l0ZXJhdG9yX3RhZygpOyB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBf RGlzdGFuY2U+CmlubGluZSBmb3J3YXJkX2l0ZXJhdG9yX3RhZwppdGVyYXRvcl9jYXRlZ29yeShj b25zdCBmb3J3YXJkX2l0ZXJhdG9yPF9UcCwgX0Rpc3RhbmNlPiYpCiAgeyByZXR1cm4gZm9yd2Fy ZF9pdGVyYXRvcl90YWcoKTsgfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0Rpc3RhbmNl PgppbmxpbmUgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcKaXRlcmF0b3JfY2F0ZWdvcnkoY29u c3QgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcjxfVHAsIF9EaXN0YW5jZT4mKQogIHsgcmV0dXJuIGJp ZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnKCk7IH0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNz IF9EaXN0YW5jZT4KaW5saW5lIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnCml0ZXJhdG9yX2Nh dGVnb3J5KGNvbnN0IHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3I8X1RwLCBfRGlzdGFuY2U+JikKICB7 IHJldHVybiByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZygpOyB9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg X1RwPgppbmxpbmUgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnko Y29uc3QgX1RwKikKICB7IHJldHVybiByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZygpOyB9Cgp0 ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfRGlzdGFuY2U+CmlubGluZSBfVHAqIHZhbHVlX3R5 cGUoY29uc3QgaW5wdXRfaXRlcmF0b3I8X1RwLCBfRGlzdGFuY2U+JikKICB7IHJldHVybiAoX1Rw KikoMCk7IH0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIF9U cCogdmFsdWVfdHlwZShjb25zdCBmb3J3YXJkX2l0ZXJhdG9yPF9UcCwgX0Rpc3RhbmNlPiYpCiAg eyByZXR1cm4gKF9UcCopKDApOyB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfRGlzdGFu Y2U+CmlubGluZSBfVHAqIHZhbHVlX3R5cGUoY29uc3QgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcjxf VHAsIF9EaXN0YW5jZT4mKQogIHsgcmV0dXJuIChfVHAqKSgwKTsgfQoKdGVtcGxhdGUgPGNsYXNz IF9UcCwgY2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUgX1RwKiB2YWx1ZV90eXBlKGNvbnN0IHJhbmRv bV9hY2Nlc3NfaXRlcmF0b3I8X1RwLCBfRGlzdGFuY2U+JikKICB7IHJldHVybiAoX1RwKikoMCk7 IH0KCnRlbXBsYXRlIDxjbGFzcyBfVHA+CmlubGluZSBfVHAqIHZhbHVlX3R5cGUoY29uc3QgX1Rw KikgeyByZXR1cm4gKF9UcCopKDApOyB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfRGlz dGFuY2U+CmlubGluZSBfRGlzdGFuY2UqIGRpc3RhbmNlX3R5cGUoY29uc3QgaW5wdXRfaXRlcmF0 b3I8X1RwLCBfRGlzdGFuY2U+JikKewogIHJldHVybiAoX0Rpc3RhbmNlKikoMCk7Cn0KCnRlbXBs YXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIF9EaXN0YW5jZSogZGlzdGFu Y2VfdHlwZShjb25zdCBmb3J3YXJkX2l0ZXJhdG9yPF9UcCwgX0Rpc3RhbmNlPiYpCnsKICByZXR1 cm4gKF9EaXN0YW5jZSopKDApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfRGlzdGFu Y2U+CmlubGluZSBfRGlzdGFuY2UqCmRpc3RhbmNlX3R5cGUoY29uc3QgYmlkaXJlY3Rpb25hbF9p dGVyYXRvcjxfVHAsIF9EaXN0YW5jZT4mKQp7CiAgcmV0dXJuIChfRGlzdGFuY2UqKSgwKTsKfQoK dGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUgX0Rpc3RhbmNlKgpk aXN0YW5jZV90eXBlKGNvbnN0IHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3I8X1RwLCBfRGlzdGFuY2U+ JikKewogIHJldHVybiAoX0Rpc3RhbmNlKikoMCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHA+Cmlu bGluZSBwdHJkaWZmX3QqIGRpc3RhbmNlX3R5cGUoY29uc3QgX1RwKikgeyByZXR1cm4gKHB0cmRp ZmZfdCopKDApOyB9CiMgMjU5ICIvdXNyL2luY2x1ZGUvZysrLTMvc3RsX2l0ZXJhdG9yLmgiIDMK dGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yLCBjbGFzcyBfRGlzdGFuY2U+CmlubGluZSB2 b2lkIF9fZGlzdGFuY2UoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19s YXN0LAogICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSYgX19uLCBpbnB1dF9pdGVyYXRv cl90YWcpCnsKICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpIHsgKytfX2ZpcnN0OyArK19fbjsg fQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCBjbGFzcyBfRGlzdGFu Y2U+CmlubGluZSB2b2lkIF9fZGlzdGFuY2UoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3Qs CiAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwKICAg ICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UmIF9fbiwgcmFuZG9tX2FjY2Vzc19pdGVyYXRv cl90YWcpCnsKICBfX24gKz0gX19sYXN0IC0gX19maXJzdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9J bnB1dEl0ZXJhdG9yLCBjbGFzcyBfRGlzdGFuY2U+CmlubGluZSB2b2lkIGRpc3RhbmNlKF9JbnB1 dEl0ZXJhdG9yIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXJhdG9yIF9f bGFzdCwgX0Rpc3RhbmNlJiBfX24pCnsKICBfX2Rpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCwgX19u LCBpdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7Cn0KIyAzMTEgIi91c3IvaW5jbHVkZS9nKyst My9zdGxfaXRlcmF0b3IuaCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX0Rp c3RhbmNlPgppbmxpbmUgdm9pZCBfX2FkdmFuY2UoX0lucHV0SXRlciYgX19pLCBfRGlzdGFuY2Ug X19uLCBpbnB1dF9pdGVyYXRvcl90YWcpIHsKICB3aGlsZSAoX19uLS0pICsrX19pOwp9CgoKCgoK dGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IsIGNsYXNzIF9EaXN0YW5jZT4K aW5saW5lIHZvaWQgX19hZHZhbmNlKF9CaWRpcmVjdGlvbmFsSXRlcmF0b3ImIF9faSwgX0Rpc3Rh bmNlIF9fbiwKICAgICAgICAgICAgICAgICAgICAgIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFn KSB7CiAgaWYgKF9fbiA+PSAwKQogICAgd2hpbGUgKF9fbi0tKSArK19faTsKICBlbHNlCiAgICB3 aGlsZSAoX19uKyspIC0tX19pOwp9CgoKCgoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJ dGVyYXRvciwgY2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUgdm9pZCBfX2FkdmFuY2UoX1JhbmRvbUFj Y2Vzc0l0ZXJhdG9yJiBfX2ksIF9EaXN0YW5jZSBfX24sCiAgICAgICAgICAgICAgICAgICAgICBy YW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykgewogIF9faSArPSBfX247Cn0KCnRlbXBsYXRlIDxj bGFzcyBfSW5wdXRJdGVyYXRvciwgY2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUgdm9pZCBhZHZhbmNl KF9JbnB1dEl0ZXJhdG9yJiBfX2ksIF9EaXN0YW5jZSBfX24pIHsKICBfX2FkdmFuY2UoX19pLCBf X24sIGl0ZXJhdG9yX2NhdGVnb3J5KF9faSkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0NvbnRhaW5l cj4KY2xhc3MgYmFja19pbnNlcnRfaXRlcmF0b3Igewpwcm90ZWN0ZWQ6CiAgX0NvbnRhaW5lciog Y29udGFpbmVyOwpwdWJsaWM6CiAgdHlwZWRlZiBfQ29udGFpbmVyIGNvbnRhaW5lcl90eXBlOwog IHR5cGVkZWYgb3V0cHV0X2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVm IHZvaWQgdmFsdWVfdHlwZTsKICB0eXBlZGVmIHZvaWQgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVk ZWYgdm9pZCBwb2ludGVyOwogIHR5cGVkZWYgdm9pZCByZWZlcmVuY2U7CgogIGV4cGxpY2l0IGJh Y2tfaW5zZXJ0X2l0ZXJhdG9yKF9Db250YWluZXImIF9feCkgOiBjb250YWluZXIoJl9feCkge30K ICBiYWNrX2luc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiYKICBvcGVyYXRvcj0oY29uc3QgdHlw ZW5hbWUgX0NvbnRhaW5lcjo6dmFsdWVfdHlwZSYgX192YWx1ZSkgewogICAgY29udGFpbmVyLT5w dXNoX2JhY2soX192YWx1ZSk7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIGJhY2tfaW5zZXJ0X2l0 ZXJhdG9yPF9Db250YWluZXI+JiBvcGVyYXRvciooKSB7IHJldHVybiAqdGhpczsgfQogIGJhY2tf aW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JiBvcGVyYXRvcisrKCkgeyByZXR1cm4gKnRoaXM7 IH0KICBiYWNrX2luc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiYgb3BlcmF0b3IrKyhpbnQpIHsg cmV0dXJuICp0aGlzOyB9Cn07CgoKCnRlbXBsYXRlIDxjbGFzcyBfQ29udGFpbmVyPgppbmxpbmUg b3V0cHV0X2l0ZXJhdG9yX3RhZwppdGVyYXRvcl9jYXRlZ29yeShjb25zdCBiYWNrX2luc2VydF9p dGVyYXRvcjxfQ29udGFpbmVyPiYpCnsKICByZXR1cm4gb3V0cHV0X2l0ZXJhdG9yX3RhZygpOwp9 CgoKCnRlbXBsYXRlIDxjbGFzcyBfQ29udGFpbmVyPgppbmxpbmUgYmFja19pbnNlcnRfaXRlcmF0 b3I8X0NvbnRhaW5lcj4gYmFja19pbnNlcnRlcihfQ29udGFpbmVyJiBfX3gpIHsKICByZXR1cm4g YmFja19pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4oX194KTsKfQoKdGVtcGxhdGUgPGNsYXNz IF9Db250YWluZXI+CmNsYXNzIGZyb250X2luc2VydF9pdGVyYXRvciB7CnByb3RlY3RlZDoKICBf Q29udGFpbmVyKiBjb250YWluZXI7CnB1YmxpYzoKICB0eXBlZGVmIF9Db250YWluZXIgY29udGFp bmVyX3R5cGU7CiAgdHlwZWRlZiBvdXRwdXRfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5 OwogIHR5cGVkZWYgdm9pZCB2YWx1ZV90eXBlOwogIHR5cGVkZWYgdm9pZCBkaWZmZXJlbmNlX3R5 cGU7CiAgdHlwZWRlZiB2b2lkIHBvaW50ZXI7CiAgdHlwZWRlZiB2b2lkIHJlZmVyZW5jZTsKCiAg ZXhwbGljaXQgZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yKF9Db250YWluZXImIF9feCkgOiBjb250YWlu ZXIoJl9feCkge30KICBmcm9udF9pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4mCiAgb3BlcmF0 b3I9KGNvbnN0IHR5cGVuYW1lIF9Db250YWluZXI6OnZhbHVlX3R5cGUmIF9fdmFsdWUpIHsKICAg IGNvbnRhaW5lci0+cHVzaF9mcm9udChfX3ZhbHVlKTsKICAgIHJldHVybiAqdGhpczsKICB9CiAg ZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JiBvcGVyYXRvciooKSB7IHJldHVybiAq dGhpczsgfQogIGZyb250X2luc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiYgb3BlcmF0b3IrKygp IHsgcmV0dXJuICp0aGlzOyB9CiAgZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JiBv cGVyYXRvcisrKGludCkgeyByZXR1cm4gKnRoaXM7IH0KfTsKCgoKdGVtcGxhdGUgPGNsYXNzIF9D b250YWluZXI+CmlubGluZSBvdXRwdXRfaXRlcmF0b3JfdGFnCml0ZXJhdG9yX2NhdGVnb3J5KGNv bnN0IGZyb250X2luc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiYpCnsKICByZXR1cm4gb3V0cHV0 X2l0ZXJhdG9yX3RhZygpOwp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfQ29udGFpbmVyPgppbmxpbmUg ZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+IGZyb250X2luc2VydGVyKF9Db250YWlu ZXImIF9feCkgewogIHJldHVybiBmcm9udF9pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4oX194 KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Db250YWluZXI+CmNsYXNzIGluc2VydF9pdGVyYXRvciB7 CnByb3RlY3RlZDoKICBfQ29udGFpbmVyKiBjb250YWluZXI7CiAgdHlwZW5hbWUgX0NvbnRhaW5l cjo6aXRlcmF0b3IgaXRlcjsKcHVibGljOgogIHR5cGVkZWYgX0NvbnRhaW5lciBjb250YWluZXJf dHlwZTsKICB0eXBlZGVmIG91dHB1dF9pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAg dHlwZWRlZiB2b2lkIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiB2b2lkIGRpZmZlcmVuY2VfdHlwZTsK ICB0eXBlZGVmIHZvaWQgcG9pbnRlcjsKICB0eXBlZGVmIHZvaWQgcmVmZXJlbmNlOwoKICBpbnNl cnRfaXRlcmF0b3IoX0NvbnRhaW5lciYgX194LCB0eXBlbmFtZSBfQ29udGFpbmVyOjppdGVyYXRv ciBfX2kpCiAgICA6IGNvbnRhaW5lcigmX194KSwgaXRlcihfX2kpIHt9CiAgaW5zZXJ0X2l0ZXJh dG9yPF9Db250YWluZXI+JgogIG9wZXJhdG9yPShjb25zdCB0eXBlbmFtZSBfQ29udGFpbmVyOjp2 YWx1ZV90eXBlJiBfX3ZhbHVlKSB7CiAgICBpdGVyID0gY29udGFpbmVyLT5pbnNlcnQoaXRlciwg X192YWx1ZSk7CiAgICArK2l0ZXI7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIGluc2VydF9pdGVy YXRvcjxfQ29udGFpbmVyPiYgb3BlcmF0b3IqKCkgeyByZXR1cm4gKnRoaXM7IH0KICBpbnNlcnRf aXRlcmF0b3I8X0NvbnRhaW5lcj4mIG9wZXJhdG9yKysoKSB7IHJldHVybiAqdGhpczsgfQogIGlu c2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiYgb3BlcmF0b3IrKyhpbnQpIHsgcmV0dXJuICp0aGlz OyB9Cn07CgoKCnRlbXBsYXRlIDxjbGFzcyBfQ29udGFpbmVyPgppbmxpbmUgb3V0cHV0X2l0ZXJh dG9yX3RhZwppdGVyYXRvcl9jYXRlZ29yeShjb25zdCBpbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5l cj4mKQp7CiAgcmV0dXJuIG91dHB1dF9pdGVyYXRvcl90YWcoKTsKfQoKCgp0ZW1wbGF0ZSA8Y2xh c3MgX0NvbnRhaW5lciwgY2xhc3MgX0l0ZXJhdG9yPgppbmxpbmUKaW5zZXJ0X2l0ZXJhdG9yPF9D b250YWluZXI+IGluc2VydGVyKF9Db250YWluZXImIF9feCwgX0l0ZXJhdG9yIF9faSkKewogIHR5 cGVkZWYgdHlwZW5hbWUgX0NvbnRhaW5lcjo6aXRlcmF0b3IgX19pdGVyOwogIHJldHVybiBpbnNl cnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4oX194LCBfX2l0ZXIoX19pKSk7Cn0KCgp0ZW1wbGF0ZSA8 Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyYXRvciwgY2xhc3MgX1RwLCBjbGFzcyBfUmVmZXJlbmNl ID0gX1RwJiwKICAgICAgICAgIGNsYXNzIF9EaXN0YW5jZSA9IHB0cmRpZmZfdD4KCgoKCmNsYXNz IHJldmVyc2VfYmlkaXJlY3Rpb25hbF9pdGVyYXRvciB7CiAgdHlwZWRlZiByZXZlcnNlX2JpZGly ZWN0aW9uYWxfaXRlcmF0b3I8X0JpZGlyZWN0aW9uYWxJdGVyYXRvciwgX1RwLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SZWZlcmVuY2UsIF9EaXN0YW5jZT4gX1Nl bGY7CnByb3RlY3RlZDoKICBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yIGN1cnJlbnQ7CnB1YmxpYzoK ICB0eXBlZGVmIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5Owog IHR5cGVkZWYgX1RwIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiBfRGlzdGFuY2UgZGlmZmVyZW5jZV90 eXBlOwogIHR5cGVkZWYgX1RwKiBwb2ludGVyOwogIHR5cGVkZWYgX1JlZmVyZW5jZSByZWZlcmVu Y2U7CgogIHJldmVyc2VfYmlkaXJlY3Rpb25hbF9pdGVyYXRvcigpIHt9CiAgZXhwbGljaXQgcmV2 ZXJzZV9iaWRpcmVjdGlvbmFsX2l0ZXJhdG9yKF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IgX194KQog ICAgOiBjdXJyZW50KF9feCkge30KICBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yIGJhc2UoKSBjb25z dCB7IHJldHVybiBjdXJyZW50OyB9CiAgX1JlZmVyZW5jZSBvcGVyYXRvciooKSBjb25zdCB7CiAg ICBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yIF9fdG1wID0gY3VycmVudDsKICAgIHJldHVybiAqLS1f X3RtcDsKICB9CgogIHBvaW50ZXIgb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuICYob3BlcmF0 b3IqKCkpOyB9CgogIF9TZWxmJiBvcGVyYXRvcisrKCkgewogICAgLS1jdXJyZW50OwogICAgcmV0 dXJuICp0aGlzOwogIH0KICBfU2VsZiBvcGVyYXRvcisrKGludCkgewogICAgX1NlbGYgX190bXAg PSAqdGhpczsKICAgIC0tY3VycmVudDsKICAgIHJldHVybiBfX3RtcDsKICB9CiAgX1NlbGYmIG9w ZXJhdG9yLS0oKSB7CiAgICArK2N1cnJlbnQ7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIF9TZWxm IG9wZXJhdG9yLS0oaW50KSB7CiAgICBfU2VsZiBfX3RtcCA9ICp0aGlzOwogICAgKytjdXJyZW50 OwogICAgcmV0dXJuIF9fdG1wOwogIH0KfTsKCgoKdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlv bmFsSXRlcmF0b3IsIGNsYXNzIF9UcCwgY2xhc3MgX1JlZmVyZW5jZSwKICAgICAgICAgIGNsYXNz IF9EaXN0YW5jZT4KaW5saW5lIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnCml0ZXJhdG9yX2Nh dGVnb3J5KGNvbnN0IHJldmVyc2VfYmlkaXJlY3Rpb25hbF9pdGVyYXRvcjxfQmlkaXJlY3Rpb25h bEl0ZXJhdG9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgX1RwLCBfUmVmZXJlbmNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlPiYpCnsKICByZXR1cm4gYmlkaXJlY3Rp b25hbF9pdGVyYXRvcl90YWcoKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRl cmF0b3IsIGNsYXNzIF9UcCwgY2xhc3MgX1JlZmVyZW5jZSwKICAgICAgICAgIGNsYXNzIF9EaXN0 YW5jZT4KaW5saW5lIF9UcCoKdmFsdWVfdHlwZShjb25zdCByZXZlcnNlX2JpZGlyZWN0aW9uYWxf aXRlcmF0b3I8X0JpZGlyZWN0aW9uYWxJdGVyYXRvciwgX1RwLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SZWZlcmVuY2UsIF9EaXN0YW5jZT4mKQp7CiAg cmV0dXJuIChfVHAqKSAwOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyYXRv ciwgY2xhc3MgX1RwLCBjbGFzcyBfUmVmZXJlbmNlLAogICAgICAgICAgY2xhc3MgX0Rpc3RhbmNl PgppbmxpbmUgX0Rpc3RhbmNlKgpkaXN0YW5jZV90eXBlKGNvbnN0IHJldmVyc2VfYmlkaXJlY3Rp b25hbF9pdGVyYXRvcjxfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfVHAsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SZWZlcmVuY2UsIF9EaXN0YW5jZT4mKQp7 CiAgcmV0dXJuIChfRGlzdGFuY2UqKSAwOwp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfQmlJdGVyLCBj bGFzcyBfVHAsIGNsYXNzIF9SZWYsCiAgICAgICAgICBjbGFzcyBfRGlzdGFuY2U+CmlubGluZSBi b29sIG9wZXJhdG9yPT0oCiAgICBjb25zdCByZXZlcnNlX2JpZGlyZWN0aW9uYWxfaXRlcmF0b3I8 X0JpSXRlciwgX1RwLCBfUmVmLCBfRGlzdGFuY2U+JiBfX3gsCiAgICBjb25zdCByZXZlcnNlX2Jp ZGlyZWN0aW9uYWxfaXRlcmF0b3I8X0JpSXRlciwgX1RwLCBfUmVmLCBfRGlzdGFuY2U+JiBfX3kp CnsKICByZXR1cm4gX194LmJhc2UoKSA9PSBfX3kuYmFzZSgpOwp9CiMgNjc1ICIvdXNyL2luY2x1 ZGUvZysrLTMvc3RsX2l0ZXJhdG9yLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJ dGVyYXRvciwgY2xhc3MgX1RwLCBjbGFzcyBfUmVmZXJlbmNlID0gX1RwJiwKICAgICAgICAgIGNs YXNzIF9EaXN0YW5jZSA9IHB0cmRpZmZfdD4KCgoKCmNsYXNzIHJldmVyc2VfaXRlcmF0b3Igewog IHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIF9UcCwgX1Jl ZmVyZW5jZSwgX0Rpc3RhbmNlPgogICAgICAgIF9TZWxmOwpwcm90ZWN0ZWQ6CiAgX1JhbmRvbUFj Y2Vzc0l0ZXJhdG9yIGN1cnJlbnQ7CnB1YmxpYzoKICB0eXBlZGVmIHJhbmRvbV9hY2Nlc3NfaXRl cmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVkZWYgX1RwIHZhbHVlX3R5cGU7CiAg dHlwZWRlZiBfRGlzdGFuY2UgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgX1RwKiBwb2ludGVy OwogIHR5cGVkZWYgX1JlZmVyZW5jZSByZWZlcmVuY2U7CgogIHJldmVyc2VfaXRlcmF0b3IoKSB7 fQogIGV4cGxpY2l0IHJldmVyc2VfaXRlcmF0b3IoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9feCkg OiBjdXJyZW50KF9feCkge30KICBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgYmFzZSgpIGNvbnN0IHsg cmV0dXJuIGN1cnJlbnQ7IH0KICBfUmVmZXJlbmNlIG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJu ICooY3VycmVudCAtIDEpOyB9CgogIHBvaW50ZXIgb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJu ICYob3BlcmF0b3IqKCkpOyB9CgogIF9TZWxmJiBvcGVyYXRvcisrKCkgewogICAgLS1jdXJyZW50 OwogICAgcmV0dXJuICp0aGlzOwogIH0KICBfU2VsZiBvcGVyYXRvcisrKGludCkgewogICAgX1Nl bGYgX190bXAgPSAqdGhpczsKICAgIC0tY3VycmVudDsKICAgIHJldHVybiBfX3RtcDsKICB9CiAg X1NlbGYmIG9wZXJhdG9yLS0oKSB7CiAgICArK2N1cnJlbnQ7CiAgICByZXR1cm4gKnRoaXM7CiAg fQogIF9TZWxmIG9wZXJhdG9yLS0oaW50KSB7CiAgICBfU2VsZiBfX3RtcCA9ICp0aGlzOwogICAg KytjdXJyZW50OwogICAgcmV0dXJuIF9fdG1wOwogIH0KICBfU2VsZiBvcGVyYXRvcisoX0Rpc3Rh bmNlIF9fbikgY29uc3QgewogICAgcmV0dXJuIF9TZWxmKGN1cnJlbnQgLSBfX24pOwogIH0KICBf U2VsZiYgb3BlcmF0b3IrPShfRGlzdGFuY2UgX19uKSB7CiAgICBjdXJyZW50IC09IF9fbjsKICAg IHJldHVybiAqdGhpczsKICB9CiAgX1NlbGYgb3BlcmF0b3ItKF9EaXN0YW5jZSBfX24pIGNvbnN0 IHsKICAgIHJldHVybiBfU2VsZihjdXJyZW50ICsgX19uKTsKICB9CiAgX1NlbGYmIG9wZXJhdG9y LT0oX0Rpc3RhbmNlIF9fbikgewogICAgY3VycmVudCArPSBfX247CiAgICByZXR1cm4gKnRoaXM7 CiAgfQogIF9SZWZlcmVuY2Ugb3BlcmF0b3JbXShfRGlzdGFuY2UgX19uKSBjb25zdCB7IHJldHVy biAqKCp0aGlzICsgX19uKTsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVy YXRvciwgY2xhc3MgX1RwLAogICAgICAgICAgY2xhc3MgX1JlZmVyZW5jZSwgY2xhc3MgX0Rpc3Rh bmNlPgppbmxpbmUgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcKaXRlcmF0b3JfY2F0ZWdvcnko Y29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIF9UcCwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmVmZXJlbmNlLCBfRGlzdGFuY2U+ JikKewogIHJldHVybiByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZygpOwp9Cgp0ZW1wbGF0ZSA8 Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCBjbGFzcyBfVHAsCiAgICAgICAgICBjbGFzcyBf UmVmZXJlbmNlLCBjbGFzcyBfRGlzdGFuY2U+CmlubGluZSBfVHAqIHZhbHVlX3R5cGUoY29uc3Qg cmV2ZXJzZV9pdGVyYXRvcjxfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIF9UcCwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SZWZlcmVuY2UsIF9EaXN0YW5jZT4m KQp7CiAgcmV0dXJuIChfVHAqKSAwOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0 ZXJhdG9yLCBjbGFzcyBfVHAsCiAgICAgICAgICBjbGFzcyBfUmVmZXJlbmNlLCBjbGFzcyBfRGlz dGFuY2U+CmlubGluZSBfRGlzdGFuY2UqCmRpc3RhbmNlX3R5cGUoY29uc3QgcmV2ZXJzZV9pdGVy YXRvcjxfUmFuZG9tQWNjZXNzSXRlcmF0b3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBfVHAsIF9SZWZlcmVuY2UsIF9EaXN0YW5jZT4mKQp7CiAgcmV0dXJuIChfRGlzdGFu Y2UqKSAwOwp9CgoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgY2xhc3Mg X1RwLAogICAgICAgICAgY2xhc3MgX1JlZmVyZW5jZSwgY2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUg Ym9vbApvcGVyYXRvcj09KGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X1JhbmRvbUFjY2Vzc0l0ZXJh dG9yLCBfVHAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmVmZXJlbmNlLCBf RGlzdGFuY2U+JiBfX3gsCiAgICAgICAgICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfUmFuZG9t QWNjZXNzSXRlcmF0b3IsIF9UcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9S ZWZlcmVuY2UsIF9EaXN0YW5jZT4mIF9feSkKewogIHJldHVybiBfX3guYmFzZSgpID09IF9feS5i YXNlKCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIGNsYXNzIF9U cCwKICAgICAgICAgIGNsYXNzIF9SZWZlcmVuY2UsIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIGJv b2wKb3BlcmF0b3I8KGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9y LCBfVHAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SZWZlcmVuY2UsIF9EaXN0 YW5jZT4mIF9feCwKICAgICAgICAgIGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X1JhbmRvbUFjY2Vz c0l0ZXJhdG9yLCBfVHAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SZWZlcmVu Y2UsIF9EaXN0YW5jZT4mIF9feSkKewogIHJldHVybiBfX3kuYmFzZSgpIDwgX194LmJhc2UoKTsK fQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgY2xhc3MgX1RwLAogICAg ICAgICAgY2xhc3MgX1JlZmVyZW5jZSwgY2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUgX0Rpc3RhbmNl Cm9wZXJhdG9yLShjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9SYW5kb21BY2Nlc3NJdGVyYXRvciwg X1RwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmVmZXJlbmNlLCBfRGlzdGFu Y2U+JiBfX3gsCiAgICAgICAgICBjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9SYW5kb21BY2Nlc3NJ dGVyYXRvciwgX1RwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmVmZXJlbmNl LCBfRGlzdGFuY2U+JiBfX3kpCnsKICByZXR1cm4gX195LmJhc2UoKSAtIF9feC5iYXNlKCk7Cn0K CnRlbXBsYXRlIDxjbGFzcyBfUmFuZEFjY0l0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX1JlZiwgY2xh c3MgX0Rpc3Q+CmlubGluZSByZXZlcnNlX2l0ZXJhdG9yPF9SYW5kQWNjSXRlciwgX1RwLCBfUmVm LCBfRGlzdD4Kb3BlcmF0b3IrKF9EaXN0IF9fbiwKICAgICAgICAgIGNvbnN0IHJldmVyc2VfaXRl cmF0b3I8X1JhbmRBY2NJdGVyLCBfVHAsIF9SZWYsIF9EaXN0PiYgX194KQp7CiAgcmV0dXJuIHJl dmVyc2VfaXRlcmF0b3I8X1JhbmRBY2NJdGVyLCBfVHAsIF9SZWYsIF9EaXN0PihfX3guYmFzZSgp IC0gX19uKTsKfQoKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfRGlzdCA9IHB0cmRp ZmZfdD4KY2xhc3MgaXN0cmVhbV9pdGVyYXRvciB7CiAgZnJpZW5kIGJvb2wgb3BlcmF0b3I9PSAo Y29uc3QgaXN0cmVhbV9pdGVyYXRvciYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgY29uc3QgaXN0cmVhbV9pdGVyYXRvciYpOwpwcm90ZWN0ZWQ6CiAgaXN0 cmVhbSogX01fc3RyZWFtOwogIF9UcCBfTV92YWx1ZTsKICBib29sIF9NX2VuZF9tYXJrZXI7CiAg dm9pZCBfTV9yZWFkKCkgewogICAgX01fZW5kX21hcmtlciA9ICgqX01fc3RyZWFtKSA/IHRydWUg OiBmYWxzZTsKICAgIGlmIChfTV9lbmRfbWFya2VyKSAqX01fc3RyZWFtID4+IF9NX3ZhbHVlOwog ICAgX01fZW5kX21hcmtlciA9ICgqX01fc3RyZWFtKSA/IHRydWUgOiBmYWxzZTsKICB9CnB1Ymxp YzoKICB0eXBlZGVmIGlucHV0X2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBl ZGVmIF9UcCB2YWx1ZV90eXBlOwogIHR5cGVkZWYgX0Rpc3QgZGlmZmVyZW5jZV90eXBlOwogIHR5 cGVkZWYgY29uc3QgX1RwKiBwb2ludGVyOwogIHR5cGVkZWYgY29uc3QgX1RwJiByZWZlcmVuY2U7 CgogIGlzdHJlYW1faXRlcmF0b3IoKSA6IF9NX3N0cmVhbSgmY2luKSwgX01fZW5kX21hcmtlcihm YWxzZSkge30KICBpc3RyZWFtX2l0ZXJhdG9yKGlzdHJlYW0mIF9fcykgOiBfTV9zdHJlYW0oJl9f cykgeyBfTV9yZWFkKCk7IH0KICByZWZlcmVuY2Ugb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4g X01fdmFsdWU7IH0KCiAgcG9pbnRlciBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4gJihvcGVy YXRvciooKSk7IH0KCiAgaXN0cmVhbV9pdGVyYXRvcjxfVHAsIF9EaXN0PiYgb3BlcmF0b3IrKygp IHsKICAgIF9NX3JlYWQoKTsKICAgIHJldHVybiAqdGhpczsKICB9CiAgaXN0cmVhbV9pdGVyYXRv cjxfVHAsIF9EaXN0PiBvcGVyYXRvcisrKGludCkgewogICAgaXN0cmVhbV9pdGVyYXRvcjxfVHAs IF9EaXN0PiBfX3RtcCA9ICp0aGlzOwogICAgX01fcmVhZCgpOwogICAgcmV0dXJuIF9fdG1wOwog IH0KfTsKCgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0Rpc3Q+CmlubGluZSBpbnB1dF9p dGVyYXRvcl90YWcKaXRlcmF0b3JfY2F0ZWdvcnkoY29uc3QgaXN0cmVhbV9pdGVyYXRvcjxfVHAs IF9EaXN0PiYpCnsKICByZXR1cm4gaW5wdXRfaXRlcmF0b3JfdGFnKCk7Cn0KCnRlbXBsYXRlIDxj bGFzcyBfVHAsIGNsYXNzIF9EaXN0PgppbmxpbmUgX1RwKgp2YWx1ZV90eXBlKGNvbnN0IGlzdHJl YW1faXRlcmF0b3I8X1RwLCBfRGlzdD4mKSB7IHJldHVybiAoX1RwKikgMDsgfQoKdGVtcGxhdGUg PGNsYXNzIF9UcCwgY2xhc3MgX0Rpc3Q+CmlubGluZSBfRGlzdCoKZGlzdGFuY2VfdHlwZShjb25z dCBpc3RyZWFtX2l0ZXJhdG9yPF9UcCwgX0Rpc3Q+JikgeyByZXR1cm4gKF9EaXN0KikwOyB9CgoK CnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIGJvb2wgb3BlcmF0 b3I9PShjb25zdCBpc3RyZWFtX2l0ZXJhdG9yPF9UcCwgX0Rpc3RhbmNlPiYgX194LAogICAgICAg ICAgICAgICAgICAgICAgIGNvbnN0IGlzdHJlYW1faXRlcmF0b3I8X1RwLCBfRGlzdGFuY2U+JiBf X3kpIHsKICByZXR1cm4gKF9feC5fTV9zdHJlYW0gPT0gX195Ll9NX3N0cmVhbSAmJgogICAgICAg ICAgX194Ll9NX2VuZF9tYXJrZXIgPT0gX195Ll9NX2VuZF9tYXJrZXIpIHx8CiAgICAgICAgIF9f eC5fTV9lbmRfbWFya2VyID09IGZhbHNlICYmIF9feS5fTV9lbmRfbWFya2VyID09IGZhbHNlOwp9 Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpjbGFzcyBvc3RyZWFtX2l0ZXJhdG9yIHsKcHJvdGVjdGVk OgogIG9zdHJlYW0qIF9NX3N0cmVhbTsKICBjb25zdCBjaGFyKiBfTV9zdHJpbmc7CnB1YmxpYzoK ICB0eXBlZGVmIG91dHB1dF9pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRl ZiB2b2lkIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiB2b2lkIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBl ZGVmIHZvaWQgcG9pbnRlcjsKICB0eXBlZGVmIHZvaWQgcmVmZXJlbmNlOwoKICBvc3RyZWFtX2l0 ZXJhdG9yKG9zdHJlYW0mIF9fcykgOiBfTV9zdHJlYW0oJl9fcyksIF9NX3N0cmluZygwKSB7fQog IG9zdHJlYW1faXRlcmF0b3Iob3N0cmVhbSYgX19zLCBjb25zdCBjaGFyKiBfX2MpCiAgICA6IF9N X3N0cmVhbSgmX19zKSwgX01fc3RyaW5nKF9fYykge30KICBvc3RyZWFtX2l0ZXJhdG9yPF9UcD4m IG9wZXJhdG9yPShjb25zdCBfVHAmIF9fdmFsdWUpIHsKICAgICpfTV9zdHJlYW0gPDwgX192YWx1 ZTsKICAgIGlmIChfTV9zdHJpbmcpICpfTV9zdHJlYW0gPDwgX01fc3RyaW5nOwogICAgcmV0dXJu ICp0aGlzOwogIH0KICBvc3RyZWFtX2l0ZXJhdG9yPF9UcD4mIG9wZXJhdG9yKigpIHsgcmV0dXJu ICp0aGlzOyB9CiAgb3N0cmVhbV9pdGVyYXRvcjxfVHA+JiBvcGVyYXRvcisrKCkgeyByZXR1cm4g KnRoaXM7IH0KICBvc3RyZWFtX2l0ZXJhdG9yPF9UcD4mIG9wZXJhdG9yKysoaW50KSB7IHJldHVy biAqdGhpczsgfQp9OwoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgppbmxpbmUgb3V0cHV0X2l0ZXJh dG9yX3RhZwppdGVyYXRvcl9jYXRlZ29yeShjb25zdCBvc3RyZWFtX2l0ZXJhdG9yPF9UcD4mKSB7 CiAgcmV0dXJuIG91dHB1dF9pdGVyYXRvcl90YWcoKTsKfQojIDM5ICIvdXNyL2luY2x1ZGUvZysr LTMvaXRlcmF0b3IiIDIgMwojIDQ1ICIvdXNyL2luY2x1ZGUvZysrLTMvc3RkL2Jhc3RyaW5nLmgi IDIgMwojIDU4ICIvdXNyL2luY2x1ZGUvZysrLTMvc3RkL2Jhc3RyaW5nLmgiIDMKIyAxICIvdXNy L2luY2x1ZGUvZysrLTMvY2Fzc2VydCIgMSAzCgoKCgoKIyAxICIvdXNyL2luY2x1ZGUvYXNzZXJ0 LmgiIDEgMwojIDM2ICIvdXNyL2luY2x1ZGUvYXNzZXJ0LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUv ZmVhdHVyZXMuaCIgMSAzCiMgMzcgIi91c3IvaW5jbHVkZS9hc3NlcnQuaCIgMiAzCiMgNjUgIi91 c3IvaW5jbHVkZS9hc3NlcnQuaCIgMwpleHRlcm4gIkMiIHsKCgpleHRlcm4gdm9pZCBfX2Fzc2Vy dF9mYWlsIChjb25zdCBjaGFyICpfX2Fzc2VydGlvbiwgY29uc3QgY2hhciAqX19maWxlLAogICAg ICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgX19saW5lLCBjb25zdCBjaGFyICpf X2Z1bmN0aW9uKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoK CmV4dGVybiB2b2lkIF9fYXNzZXJ0X3BlcnJvcl9mYWlsIChpbnQgX19lcnJudW0sIGNvbnN0IGNo YXIgKl9fZmlsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGlu dCBfX2xpbmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpf X2Z1bmN0aW9uKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoK CgoKZXh0ZXJuIHZvaWQgX19hc3NlcnQgKGNvbnN0IGNoYXIgKl9fYXNzZXJ0aW9uLCBjb25zdCBj aGFyICpfX2ZpbGUsIGludCBfX2xpbmUpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICA7CgoKfQojIDcgIi91c3IvaW5jbHVkZS9nKystMy9jYXNzZXJ0IiAyIDMKIyA1 OSAiL3Vzci9pbmNsdWRlL2crKy0zL3N0ZC9iYXN0cmluZy5oIiAyIDMKCgoKCgp0ZW1wbGF0ZSA8 Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cyA9IHN0cmluZ19jaGFyX3RyYWl0czxjaGFyVD4sCiAg ICAgICAgICBjbGFzcyBBbGxvY2F0b3IgPSBhbGxvYyA+CmNsYXNzIGJhc2ljX3N0cmluZwp7CnBy aXZhdGU6CiAgc3RydWN0IFJlcCB7CiAgICBzaXplX3QgbGVuLCByZXMsIHJlZjsKICAgIGJvb2wg c2VsZmlzaDsKCiAgICBjaGFyVCogZGF0YSAoKSB7IHJldHVybiByZWludGVycHJldF9jYXN0PGNo YXJUICo+KHRoaXMgKyAxKTsgfQogICAgY2hhclQmIG9wZXJhdG9yW10gKHNpemVfdCBzKSB7IHJl dHVybiBkYXRhICgpIFtzXTsgfQogICAgY2hhclQqIGdyYWIgKCkgeyBpZiAoc2VsZmlzaCkgcmV0 dXJuIGNsb25lICgpOyArK3JlZjsgcmV0dXJuIGRhdGEgKCk7IH0KIyAxMTQgIi91c3IvaW5jbHVk ZS9nKystMy9zdGQvYmFzdHJpbmcuaCIgMwogICAgdm9pZCByZWxlYXNlICgpIHsgaWYgKC0tcmVm ID09IDApIGRlbGV0ZSB0aGlzOyB9CgoKICAgIGlubGluZSBzdGF0aWMgdm9pZCAqIG9wZXJhdG9y IG5ldyAoc2l6ZV90LCBzaXplX3QpOwogICAgaW5saW5lIHN0YXRpYyB2b2lkIG9wZXJhdG9yIGRl bGV0ZSAodm9pZCAqKTsKICAgIGlubGluZSBzdGF0aWMgUmVwKiBjcmVhdGUgKHNpemVfdCk7CiAg ICBjaGFyVCogY2xvbmUgKCk7CgogICAgaW5saW5lIHZvaWQgY29weSAoc2l6ZV90LCBjb25zdCBj aGFyVCAqLCBzaXplX3QpOwogICAgaW5saW5lIHZvaWQgbW92ZSAoc2l6ZV90LCBjb25zdCBjaGFy VCAqLCBzaXplX3QpOwogICAgaW5saW5lIHZvaWQgc2V0IChzaXplX3QsIGNvbnN0IGNoYXJULCBz aXplX3QpOwoKICAgIGlubGluZSBzdGF0aWMgYm9vbCBleGNlc3Nfc2xvcCAoc2l6ZV90LCBzaXpl X3QpOwogICAgaW5saW5lIHN0YXRpYyBzaXplX3QgZnJvYl9zaXplIChzaXplX3QpOwoKICBwcml2 YXRlOgogICAgUmVwICZvcGVyYXRvcj0gKGNvbnN0IFJlcCAmKTsKICB9OwoKcHVibGljOgoKICB0 eXBlZGVmIHRyYWl0cyB0cmFpdHNfdHlwZTsKICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0czo6Y2hh cl90eXBlIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiBBbGxvY2F0b3IgYWxsb2NhdG9yX3R5cGU7Cgog IHR5cGVkZWYgc2l6ZV90IHNpemVfdHlwZTsKICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNl X3R5cGU7CiAgdHlwZWRlZiBjaGFyVCYgcmVmZXJlbmNlOwogIHR5cGVkZWYgY29uc3QgY2hhclQm IGNvbnN0X3JlZmVyZW5jZTsKICB0eXBlZGVmIGNoYXJUKiBwb2ludGVyOwogIHR5cGVkZWYgY29u c3QgY2hhclQqIGNvbnN0X3BvaW50ZXI7CiAgdHlwZWRlZiBwb2ludGVyIGl0ZXJhdG9yOwogIHR5 cGVkZWYgY29uc3RfcG9pbnRlciBjb25zdF9pdGVyYXRvcjsKICB0eXBlZGVmIDo6cmV2ZXJzZV9p dGVyYXRvcjxpdGVyYXRvcj4gcmV2ZXJzZV9pdGVyYXRvcjsKICB0eXBlZGVmIDo6cmV2ZXJzZV9p dGVyYXRvcjxjb25zdF9pdGVyYXRvcj4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcjsKICBzdGF0aWMg Y29uc3Qgc2l6ZV90eXBlIG5wb3MgPSBzdGF0aWNfY2FzdDxzaXplX3R5cGU+KC0xKTsKCnByaXZh dGU6CiAgUmVwICpyZXAgKCkgY29uc3QgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxSZXAgKj4o ZGF0KSAtIDE7IH0KICB2b2lkIHJlcHVwIChSZXAgKnApIHsgcmVwICgpLT5yZWxlYXNlICgpOyBk YXQgPSBwLT5kYXRhICgpOyB9CgpwdWJsaWM6CiAgY29uc3QgY2hhclQqIGRhdGEgKCkgY29uc3QK ICAgIHsgcmV0dXJuIHJlcCAoKS0+ZGF0YSgpOyB9CiAgc2l6ZV90eXBlIGxlbmd0aCAoKSBjb25z dAogICAgeyByZXR1cm4gcmVwICgpLT5sZW47IH0KICBzaXplX3R5cGUgc2l6ZSAoKSBjb25zdAog ICAgeyByZXR1cm4gcmVwICgpLT5sZW47IH0KICBzaXplX3R5cGUgY2FwYWNpdHkgKCkgY29uc3QK ICAgIHsgcmV0dXJuIHJlcCAoKS0+cmVzOyB9CiAgc2l6ZV90eXBlIG1heF9zaXplICgpIGNvbnN0 CiAgICB7IHJldHVybiAobnBvcyAtIDEpL3NpemVvZiAoY2hhclQpOyB9CiAgYm9vbCBlbXB0eSAo KSBjb25zdAogICAgeyByZXR1cm4gc2l6ZSAoKSA9PSAwOyB9CgoKICBiYXNpY19zdHJpbmcmIG9w ZXJhdG9yPSAoY29uc3QgYmFzaWNfc3RyaW5nJiBzdHIpCiAgICB7CiAgICAgIGlmICgmc3RyICE9 IHRoaXMpIHsgcmVwICgpLT5yZWxlYXNlICgpOyBkYXQgPSBzdHIucmVwICgpLT5ncmFiICgpOyB9 CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgZXhwbGljaXQgYmFzaWNfc3RyaW5nICgpOiBk YXQgKG5pbFJlcC5ncmFiICgpKSB7IH0KICBiYXNpY19zdHJpbmcgKGNvbnN0IGJhc2ljX3N0cmlu ZyYgc3RyKTogZGF0IChzdHIucmVwICgpLT5ncmFiICgpKSB7IH0KICBiYXNpY19zdHJpbmcgKGNv bnN0IGJhc2ljX3N0cmluZyYgc3RyLCBzaXplX3R5cGUgcG9zLCBzaXplX3R5cGUgbiA9IG5wb3Mp CiAgICA6IGRhdCAobmlsUmVwLmdyYWIgKCkpIHsgYXNzaWduIChzdHIsIHBvcywgbik7IH0KICBi YXNpY19zdHJpbmcgKGNvbnN0IGNoYXJUKiBzLCBzaXplX3R5cGUgbikKICAgIDogZGF0IChuaWxS ZXAuZ3JhYiAoKSkgeyBhc3NpZ24gKHMsIG4pOyB9CiAgYmFzaWNfc3RyaW5nIChjb25zdCBjaGFy VCogcykKICAgIDogZGF0IChuaWxSZXAuZ3JhYiAoKSkgeyBhc3NpZ24gKHMpOyB9CiAgYmFzaWNf c3RyaW5nIChzaXplX3R5cGUgbiwgY2hhclQgYykKICAgIDogZGF0IChuaWxSZXAuZ3JhYiAoKSkg eyBhc3NpZ24gKG4sIGMpOyB9CgoKCgogIGJhc2ljX3N0cmluZyhjb25zdF9pdGVyYXRvciBfX2Jl Z2luLCBjb25zdF9pdGVyYXRvciBfX2VuZCkKCiAgICA6IGRhdCAobmlsUmVwLmdyYWIgKCkpIHsg YXNzaWduIChfX2JlZ2luLCBfX2VuZCk7IH0KCiAgfmJhc2ljX3N0cmluZyAoKQogICAgeyByZXAg KCktPnJlbGVhc2UgKCk7IH0KCiAgdm9pZCBzd2FwIChiYXNpY19zdHJpbmcgJnMpIHsgY2hhclQg KmQgPSBkYXQ7IGRhdCA9IHMuZGF0OyBzLmRhdCA9IGQ7IH0KCiAgYmFzaWNfc3RyaW5nJiBhcHBl bmQgKGNvbnN0IGJhc2ljX3N0cmluZyYgc3RyLCBzaXplX3R5cGUgcG9zID0gMCwKICAgICAgICAg ICAgICAgICAgICAgICAgc2l6ZV90eXBlIG4gPSBucG9zKQogICAgeyByZXR1cm4gcmVwbGFjZSAo bGVuZ3RoICgpLCAwLCBzdHIsIHBvcywgbik7IH0KICBiYXNpY19zdHJpbmcmIGFwcGVuZCAoY29u c3QgY2hhclQqIHMsIHNpemVfdHlwZSBuKQogICAgeyByZXR1cm4gcmVwbGFjZSAobGVuZ3RoICgp LCAwLCBzLCBuKTsgfQogIGJhc2ljX3N0cmluZyYgYXBwZW5kIChjb25zdCBjaGFyVCogcykKICAg IHsgcmV0dXJuIGFwcGVuZCAocywgdHJhaXRzOjpsZW5ndGggKHMpKTsgfQogIGJhc2ljX3N0cmlu ZyYgYXBwZW5kIChzaXplX3R5cGUgbiwgY2hhclQgYykKICAgIHsgcmV0dXJuIHJlcGxhY2UgKGxl bmd0aCAoKSwgMCwgbiwgYyk7IH0KCgoKCiAgYmFzaWNfc3RyaW5nJiBhcHBlbmQoY29uc3RfaXRl cmF0b3IgZmlyc3QsIGNvbnN0X2l0ZXJhdG9yIGxhc3QpCgogICAgeyByZXR1cm4gcmVwbGFjZSAo aWVuZCAoKSwgaWVuZCAoKSwgZmlyc3QsIGxhc3QpOyB9CgogIHZvaWQgcHVzaF9iYWNrKGNoYXJU IF9fYykKICB7IGFwcGVuZCgxLCBfX2MpOyB9CgogIGJhc2ljX3N0cmluZyYgYXNzaWduIChjb25z dCBiYXNpY19zdHJpbmcmIHN0ciwgc2l6ZV90eXBlIHBvcyA9IDAsCiAgICAgICAgICAgICAgICAg ICAgICAgIHNpemVfdHlwZSBuID0gbnBvcykKICAgIHsgcmV0dXJuIHJlcGxhY2UgKDAsIG5wb3Ms IHN0ciwgcG9zLCBuKTsgfQogIGJhc2ljX3N0cmluZyYgYXNzaWduIChjb25zdCBjaGFyVCogcywg c2l6ZV90eXBlIG4pCiAgICB7IHJldHVybiByZXBsYWNlICgwLCBucG9zLCBzLCBuKTsgfQogIGJh c2ljX3N0cmluZyYgYXNzaWduIChjb25zdCBjaGFyVCogcykKICAgIHsgcmV0dXJuIGFzc2lnbiAo cywgdHJhaXRzOjpsZW5ndGggKHMpKTsgfQogIGJhc2ljX3N0cmluZyYgYXNzaWduIChzaXplX3R5 cGUgbiwgY2hhclQgYykKICAgIHsgcmV0dXJuIHJlcGxhY2UgKDAsIG5wb3MsIG4sIGMpOyB9CgoK CgogIGJhc2ljX3N0cmluZyYgYXNzaWduKGNvbnN0X2l0ZXJhdG9yIGZpcnN0LCBjb25zdF9pdGVy YXRvciBsYXN0KQoKICAgIHsgcmV0dXJuIHJlcGxhY2UgKGliZWdpbiAoKSwgaWVuZCAoKSwgZmly c3QsIGxhc3QpOyB9CgogIGJhc2ljX3N0cmluZyYgb3BlcmF0b3I9IChjb25zdCBjaGFyVCogcykK ICAgIHsgcmV0dXJuIGFzc2lnbiAocyk7IH0KICBiYXNpY19zdHJpbmcmIG9wZXJhdG9yPSAoY2hh clQgYykKICAgIHsgcmV0dXJuIGFzc2lnbiAoMSwgYyk7IH0KCiAgYmFzaWNfc3RyaW5nJiBvcGVy YXRvcis9IChjb25zdCBiYXNpY19zdHJpbmcmIHJocykKICAgIHsgcmV0dXJuIGFwcGVuZCAocmhz KTsgfQogIGJhc2ljX3N0cmluZyYgb3BlcmF0b3IrPSAoY29uc3QgY2hhclQqIHMpCiAgICB7IHJl dHVybiBhcHBlbmQgKHMpOyB9CiAgYmFzaWNfc3RyaW5nJiBvcGVyYXRvcis9IChjaGFyVCBjKQog ICAgeyByZXR1cm4gYXBwZW5kICgxLCBjKTsgfQoKICBiYXNpY19zdHJpbmcmIGluc2VydCAoc2l6 ZV90eXBlIHBvczEsIGNvbnN0IGJhc2ljX3N0cmluZyYgc3RyLAogICAgICAgICAgICAgICAgICAg ICAgICBzaXplX3R5cGUgcG9zMiA9IDAsIHNpemVfdHlwZSBuID0gbnBvcykKICAgIHsgcmV0dXJu IHJlcGxhY2UgKHBvczEsIDAsIHN0ciwgcG9zMiwgbik7IH0KICBiYXNpY19zdHJpbmcmIGluc2Vy dCAoc2l6ZV90eXBlIHBvcywgY29uc3QgY2hhclQqIHMsIHNpemVfdHlwZSBuKQogICAgeyByZXR1 cm4gcmVwbGFjZSAocG9zLCAwLCBzLCBuKTsgfQogIGJhc2ljX3N0cmluZyYgaW5zZXJ0IChzaXpl X3R5cGUgcG9zLCBjb25zdCBjaGFyVCogcykKICAgIHsgcmV0dXJuIGluc2VydCAocG9zLCBzLCB0 cmFpdHM6Omxlbmd0aCAocykpOyB9CiAgYmFzaWNfc3RyaW5nJiBpbnNlcnQgKHNpemVfdHlwZSBw b3MsIHNpemVfdHlwZSBuLCBjaGFyVCBjKQogICAgeyByZXR1cm4gcmVwbGFjZSAocG9zLCAwLCBu LCBjKTsgfQogIGl0ZXJhdG9yIGluc2VydChpdGVyYXRvciBwLCBjaGFyVCBjKQogICAgeyBzaXpl X3R5cGUgX19vID0gcCAtIGliZWdpbiAoKTsKICAgICAgaW5zZXJ0IChwIC0gaWJlZ2luICgpLCAx LCBjKTsgc2VsZmlzaCAoKTsKICAgICAgcmV0dXJuIGliZWdpbiAoKSArIF9fbzsgfQogIGl0ZXJh dG9yIGluc2VydChpdGVyYXRvciBwLCBzaXplX3R5cGUgbiwgY2hhclQgYykKICAgIHsgc2l6ZV90 eXBlIF9fbyA9IHAgLSBpYmVnaW4gKCk7CiAgICAgIGluc2VydCAocCAtIGliZWdpbiAoKSwgbiwg Yyk7IHNlbGZpc2ggKCk7CiAgICAgIHJldHVybiBpYmVnaW4gKCkgKyBfX287IH0KCgoKCiAgdm9p ZCBpbnNlcnQoaXRlcmF0b3IgcCwgY29uc3RfaXRlcmF0b3IgZmlyc3QsIGNvbnN0X2l0ZXJhdG9y IGxhc3QpCgogICAgeyByZXBsYWNlIChwLCBwLCBmaXJzdCwgbGFzdCk7IH0KCiAgYmFzaWNfc3Ry aW5nJiBlcmFzZSAoc2l6ZV90eXBlIHBvcyA9IDAsIHNpemVfdHlwZSBuID0gbnBvcykKICAgIHsg cmV0dXJuIHJlcGxhY2UgKHBvcywgbiwgKHNpemVfdHlwZSkwLCAoY2hhclQpMCk7IH0KICBpdGVy YXRvciBlcmFzZShpdGVyYXRvciBwKQogICAgeyBzaXplX3R5cGUgX19vID0gcCAtIGJlZ2luKCk7 CiAgICAgIHJlcGxhY2UgKF9fbywgMSwgKHNpemVfdHlwZSkwLCAoY2hhclQpMCk7IHNlbGZpc2gg KCk7CiAgICAgIHJldHVybiBpYmVnaW4oKSArIF9fbzsgfQogIGl0ZXJhdG9yIGVyYXNlKGl0ZXJh dG9yIGYsIGl0ZXJhdG9yIGwpCiAgICB7IHNpemVfdHlwZSBfX28gPSBmIC0gaWJlZ2luKCk7CiAg ICAgIHJlcGxhY2UgKF9fbywgbC1mLCAoc2l6ZV90eXBlKTAsIChjaGFyVCkwKTtzZWxmaXNoICgp OwogICAgICByZXR1cm4gaWJlZ2luKCkgKyBfX287IH0KCiAgYmFzaWNfc3RyaW5nJiByZXBsYWNl IChzaXplX3R5cGUgcG9zMSwgc2l6ZV90eXBlIG4xLCBjb25zdCBiYXNpY19zdHJpbmcmIHN0ciwK ICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdHlwZSBwb3MyID0gMCwgc2l6ZV90eXBlIG4y ID0gbnBvcyk7CiAgYmFzaWNfc3RyaW5nJiByZXBsYWNlIChzaXplX3R5cGUgcG9zLCBzaXplX3R5 cGUgbjEsIGNvbnN0IGNoYXJUKiBzLAogICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90eXBl IG4yKTsKICBiYXNpY19zdHJpbmcmIHJlcGxhY2UgKHNpemVfdHlwZSBwb3MsIHNpemVfdHlwZSBu MSwgY29uc3QgY2hhclQqIHMpCiAgICB7IHJldHVybiByZXBsYWNlIChwb3MsIG4xLCBzLCB0cmFp dHM6Omxlbmd0aCAocykpOyB9CiAgYmFzaWNfc3RyaW5nJiByZXBsYWNlIChzaXplX3R5cGUgcG9z LCBzaXplX3R5cGUgbjEsIHNpemVfdHlwZSBuMiwgY2hhclQgYyk7CiAgYmFzaWNfc3RyaW5nJiBy ZXBsYWNlIChzaXplX3R5cGUgcG9zLCBzaXplX3R5cGUgbiwgY2hhclQgYykKICAgIHsgcmV0dXJu IHJlcGxhY2UgKHBvcywgbiwgMSwgYyk7IH0KICBiYXNpY19zdHJpbmcmIHJlcGxhY2UgKGl0ZXJh dG9yIGkxLCBpdGVyYXRvciBpMiwgY29uc3QgYmFzaWNfc3RyaW5nJiBzdHIpCiAgICB7IHJldHVy biByZXBsYWNlIChpMSAtIGliZWdpbiAoKSwgaTIgLSBpMSwgc3RyKTsgfQogIGJhc2ljX3N0cmlu ZyYgcmVwbGFjZSAoaXRlcmF0b3IgaTEsIGl0ZXJhdG9yIGkyLCBjb25zdCBjaGFyVCogcywgc2l6 ZV90eXBlIG4pCiAgICB7IHJldHVybiByZXBsYWNlIChpMSAtIGliZWdpbiAoKSwgaTIgLSBpMSwg cywgbik7IH0KICBiYXNpY19zdHJpbmcmIHJlcGxhY2UgKGl0ZXJhdG9yIGkxLCBpdGVyYXRvciBp MiwgY29uc3QgY2hhclQqIHMpCiAgICB7IHJldHVybiByZXBsYWNlIChpMSAtIGliZWdpbiAoKSwg aTIgLSBpMSwgcyk7IH0KICBiYXNpY19zdHJpbmcmIHJlcGxhY2UgKGl0ZXJhdG9yIGkxLCBpdGVy YXRvciBpMiwgc2l6ZV90eXBlIG4sIGNoYXJUIGMpCiAgICB7IHJldHVybiByZXBsYWNlIChpMSAt IGliZWdpbiAoKSwgaTIgLSBpMSwgbiwgYyk7IH0KCgoKCgogIGJhc2ljX3N0cmluZyYgcmVwbGFj ZShpdGVyYXRvciBpMSwgaXRlcmF0b3IgaTIsCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0 X2l0ZXJhdG9yIGoxLCBjb25zdF9pdGVyYXRvciBqMik7CgoKcHJpdmF0ZToKICBzdGF0aWMgY2hh clQgZW9zICgpIHsgcmV0dXJuIHRyYWl0czo6ZW9zICgpOyB9CiAgdm9pZCB1bmlxdWUgKCkgeyBp ZiAocmVwICgpLT5yZWYgPiAxKSBhbGxvYyAobGVuZ3RoICgpLCB0cnVlKTsgfQogIHZvaWQgc2Vs ZmlzaCAoKSB7IHVuaXF1ZSAoKTsgcmVwICgpLT5zZWxmaXNoID0gdHJ1ZTsgfQoKcHVibGljOgog IGNoYXJUIG9wZXJhdG9yW10gKHNpemVfdHlwZSBwb3MpIGNvbnN0CiAgICB7CiAgICAgIGlmIChw b3MgPT0gbGVuZ3RoICgpKQogICAgICAgIHJldHVybiBlb3MgKCk7CiAgICAgIHJldHVybiBkYXRh ICgpW3Bvc107CiAgICB9CgogIHJlZmVyZW5jZSBvcGVyYXRvcltdIChzaXplX3R5cGUgcG9zKQog ICAgeyBzZWxmaXNoICgpOyByZXR1cm4gKCpyZXAgKCkpW3Bvc107IH0KCiAgcmVmZXJlbmNlIGF0 IChzaXplX3R5cGUgcG9zKQogICAgewogICAgICAoKHZvaWQpICgoIShwb3MgPj0gbGVuZ3RoICgp KSkgPyAwIDogKF9fYXNzZXJ0X2ZhaWwgKCIhKHBvcyA+PSBsZW5ndGggKCkpIiwgIi91c3IvaW5j bHVkZS9nKystMy9zdGQvYmFzdHJpbmcuaCIsIDMyOCwgKChjb25zdCBjaGFyICopIDApKSwgMCkp KTsKICAgICAgcmV0dXJuICgqdGhpcylbcG9zXTsKICAgIH0KICBjb25zdF9yZWZlcmVuY2UgYXQg KHNpemVfdHlwZSBwb3MpIGNvbnN0CiAgICB7CiAgICAgICgodm9pZCkgKCghKHBvcyA+PSBsZW5n dGggKCkpKSA/IDAgOiAoX19hc3NlcnRfZmFpbCAoIiEocG9zID49IGxlbmd0aCAoKSkiLCAiL3Vz ci9pbmNsdWRlL2crKy0zL3N0ZC9iYXN0cmluZy5oIiwgMzMzLCAoKGNvbnN0IGNoYXIgKikgMCkp LCAwKSkpOwogICAgICByZXR1cm4gZGF0YSAoKVtwb3NdOwogICAgfQoKcHJpdmF0ZToKICB2b2lk IHRlcm1pbmF0ZSAoKSBjb25zdAogICAgeyB0cmFpdHM6OmFzc2lnbiAoKCpyZXAgKCkpW2xlbmd0 aCAoKV0sIGVvcyAoKSk7IH0KCnB1YmxpYzoKICBjb25zdCBjaGFyVCogY19zdHIgKCkgY29uc3QK ICAgIHsgaWYgKGxlbmd0aCAoKSA9PSAwKSByZXR1cm4gIiI7IHRlcm1pbmF0ZSAoKTsgcmV0dXJu IGRhdGEgKCk7IH0KICB2b2lkIHJlc2l6ZSAoc2l6ZV90eXBlIG4sIGNoYXJUIGMpOwogIHZvaWQg cmVzaXplIChzaXplX3R5cGUgbikKICAgIHsgcmVzaXplIChuLCBlb3MgKCkpOyB9CiAgdm9pZCBy ZXNlcnZlIChzaXplX3R5cGUpIHsgfQoKICBzaXplX3R5cGUgY29weSAoY2hhclQqIHMsIHNpemVf dHlwZSBuLCBzaXplX3R5cGUgcG9zID0gMCkgY29uc3Q7CgogIHNpemVfdHlwZSBmaW5kIChjb25z dCBiYXNpY19zdHJpbmcmIHN0ciwgc2l6ZV90eXBlIHBvcyA9IDApIGNvbnN0CiAgICB7IHJldHVy biBmaW5kIChzdHIuZGF0YSgpLCBwb3MsIHN0ci5sZW5ndGgoKSk7IH0KICBzaXplX3R5cGUgZmlu ZCAoY29uc3QgY2hhclQqIHMsIHNpemVfdHlwZSBwb3MsIHNpemVfdHlwZSBuKSBjb25zdDsKICBz aXplX3R5cGUgZmluZCAoY29uc3QgY2hhclQqIHMsIHNpemVfdHlwZSBwb3MgPSAwKSBjb25zdAog ICAgeyByZXR1cm4gZmluZCAocywgcG9zLCB0cmFpdHM6Omxlbmd0aCAocykpOyB9CiAgc2l6ZV90 eXBlIGZpbmQgKGNoYXJUIGMsIHNpemVfdHlwZSBwb3MgPSAwKSBjb25zdDsKCiAgc2l6ZV90eXBl IHJmaW5kIChjb25zdCBiYXNpY19zdHJpbmcmIHN0ciwgc2l6ZV90eXBlIHBvcyA9IG5wb3MpIGNv bnN0CiAgICB7IHJldHVybiByZmluZCAoc3RyLmRhdGEoKSwgcG9zLCBzdHIubGVuZ3RoKCkpOyB9 CiAgc2l6ZV90eXBlIHJmaW5kIChjb25zdCBjaGFyVCogcywgc2l6ZV90eXBlIHBvcywgc2l6ZV90 eXBlIG4pIGNvbnN0OwogIHNpemVfdHlwZSByZmluZCAoY29uc3QgY2hhclQqIHMsIHNpemVfdHlw ZSBwb3MgPSBucG9zKSBjb25zdAogICAgeyByZXR1cm4gcmZpbmQgKHMsIHBvcywgdHJhaXRzOjps ZW5ndGggKHMpKTsgfQogIHNpemVfdHlwZSByZmluZCAoY2hhclQgYywgc2l6ZV90eXBlIHBvcyA9 IG5wb3MpIGNvbnN0OwoKICBzaXplX3R5cGUgZmluZF9maXJzdF9vZiAoY29uc3QgYmFzaWNfc3Ry aW5nJiBzdHIsIHNpemVfdHlwZSBwb3MgPSAwKSBjb25zdAogICAgeyByZXR1cm4gZmluZF9maXJz dF9vZiAoc3RyLmRhdGEoKSwgcG9zLCBzdHIubGVuZ3RoKCkpOyB9CiAgc2l6ZV90eXBlIGZpbmRf Zmlyc3Rfb2YgKGNvbnN0IGNoYXJUKiBzLCBzaXplX3R5cGUgcG9zLCBzaXplX3R5cGUgbikgY29u c3Q7CiAgc2l6ZV90eXBlIGZpbmRfZmlyc3Rfb2YgKGNvbnN0IGNoYXJUKiBzLCBzaXplX3R5cGUg cG9zID0gMCkgY29uc3QKICAgIHsgcmV0dXJuIGZpbmRfZmlyc3Rfb2YgKHMsIHBvcywgdHJhaXRz OjpsZW5ndGggKHMpKTsgfQogIHNpemVfdHlwZSBmaW5kX2ZpcnN0X29mIChjaGFyVCBjLCBzaXpl X3R5cGUgcG9zID0gMCkgY29uc3QKICAgIHsgcmV0dXJuIGZpbmQgKGMsIHBvcyk7IH0KCiAgc2l6 ZV90eXBlIGZpbmRfbGFzdF9vZiAoY29uc3QgYmFzaWNfc3RyaW5nJiBzdHIsIHNpemVfdHlwZSBw b3MgPSBucG9zKSBjb25zdAogICAgeyByZXR1cm4gZmluZF9sYXN0X29mIChzdHIuZGF0YSgpLCBw b3MsIHN0ci5sZW5ndGgoKSk7IH0KICBzaXplX3R5cGUgZmluZF9sYXN0X29mIChjb25zdCBjaGFy VCogcywgc2l6ZV90eXBlIHBvcywgc2l6ZV90eXBlIG4pIGNvbnN0OwogIHNpemVfdHlwZSBmaW5k X2xhc3Rfb2YgKGNvbnN0IGNoYXJUKiBzLCBzaXplX3R5cGUgcG9zID0gbnBvcykgY29uc3QKICAg IHsgcmV0dXJuIGZpbmRfbGFzdF9vZiAocywgcG9zLCB0cmFpdHM6Omxlbmd0aCAocykpOyB9CiAg c2l6ZV90eXBlIGZpbmRfbGFzdF9vZiAoY2hhclQgYywgc2l6ZV90eXBlIHBvcyA9IG5wb3MpIGNv bnN0CiAgICB7IHJldHVybiByZmluZCAoYywgcG9zKTsgfQoKICBzaXplX3R5cGUgZmluZF9maXJz dF9ub3Rfb2YgKGNvbnN0IGJhc2ljX3N0cmluZyYgc3RyLCBzaXplX3R5cGUgcG9zID0gMCkgY29u c3QKICAgIHsgcmV0dXJuIGZpbmRfZmlyc3Rfbm90X29mIChzdHIuZGF0YSgpLCBwb3MsIHN0ci5s ZW5ndGgoKSk7IH0KICBzaXplX3R5cGUgZmluZF9maXJzdF9ub3Rfb2YgKGNvbnN0IGNoYXJUKiBz LCBzaXplX3R5cGUgcG9zLCBzaXplX3R5cGUgbikgY29uc3Q7CiAgc2l6ZV90eXBlIGZpbmRfZmly c3Rfbm90X29mIChjb25zdCBjaGFyVCogcywgc2l6ZV90eXBlIHBvcyA9IDApIGNvbnN0CiAgICB7 IHJldHVybiBmaW5kX2ZpcnN0X25vdF9vZiAocywgcG9zLCB0cmFpdHM6Omxlbmd0aCAocykpOyB9 CiAgc2l6ZV90eXBlIGZpbmRfZmlyc3Rfbm90X29mIChjaGFyVCBjLCBzaXplX3R5cGUgcG9zID0g MCkgY29uc3Q7CgogIHNpemVfdHlwZSBmaW5kX2xhc3Rfbm90X29mIChjb25zdCBiYXNpY19zdHJp bmcmIHN0ciwgc2l6ZV90eXBlIHBvcyA9IG5wb3MpIGNvbnN0CiAgICB7IHJldHVybiBmaW5kX2xh c3Rfbm90X29mIChzdHIuZGF0YSgpLCBwb3MsIHN0ci5sZW5ndGgoKSk7IH0KICBzaXplX3R5cGUg ZmluZF9sYXN0X25vdF9vZiAoY29uc3QgY2hhclQqIHMsIHNpemVfdHlwZSBwb3MsIHNpemVfdHlw ZSBuKSBjb25zdDsKICBzaXplX3R5cGUgZmluZF9sYXN0X25vdF9vZiAoY29uc3QgY2hhclQqIHMs IHNpemVfdHlwZSBwb3MgPSBucG9zKSBjb25zdAogICAgeyByZXR1cm4gZmluZF9sYXN0X25vdF9v ZiAocywgcG9zLCB0cmFpdHM6Omxlbmd0aCAocykpOyB9CiAgc2l6ZV90eXBlIGZpbmRfbGFzdF9u b3Rfb2YgKGNoYXJUIGMsIHNpemVfdHlwZSBwb3MgPSBucG9zKSBjb25zdDsKCiAgYmFzaWNfc3Ry aW5nIHN1YnN0ciAoc2l6ZV90eXBlIHBvcyA9IDAsIHNpemVfdHlwZSBuID0gbnBvcykgY29uc3QK ICAgIHsgcmV0dXJuIGJhc2ljX3N0cmluZyAoKnRoaXMsIHBvcywgbik7IH0KCiAgaW50IGNvbXBh cmUgKGNvbnN0IGJhc2ljX3N0cmluZyYgc3RyLCBzaXplX3R5cGUgcG9zID0gMCwgc2l6ZV90eXBl IG4gPSBucG9zKSBjb25zdDsKCiAgaW50IGNvbXBhcmUgKGNvbnN0IGNoYXJUKiBzLCBzaXplX3R5 cGUgcG9zLCBzaXplX3R5cGUgbikgY29uc3Q7CiAgaW50IGNvbXBhcmUgKGNvbnN0IGNoYXJUKiBz LCBzaXplX3R5cGUgcG9zID0gMCkgY29uc3QKICAgIHsgcmV0dXJuIGNvbXBhcmUgKHMsIHBvcywg dHJhaXRzOjpsZW5ndGggKHMpKTsgfQoKICBpdGVyYXRvciBiZWdpbiAoKSB7IHNlbGZpc2ggKCk7 IHJldHVybiAmKCp0aGlzKVswXTsgfQogIGl0ZXJhdG9yIGVuZCAoKSB7IHNlbGZpc2ggKCk7IHJl dHVybiAmKCp0aGlzKVtsZW5ndGggKCldOyB9Cgpwcml2YXRlOgogIGl0ZXJhdG9yIGliZWdpbiAo KSBjb25zdCB7IHJldHVybiAmKCpyZXAgKCkpWzBdOyB9CiAgaXRlcmF0b3IgaWVuZCAoKSBjb25z dCB7IHJldHVybiAmKCpyZXAgKCkpW2xlbmd0aCAoKV07IH0KCnB1YmxpYzoKICBjb25zdF9pdGVy YXRvciBiZWdpbiAoKSBjb25zdCB7IHJldHVybiBpYmVnaW4gKCk7IH0KICBjb25zdF9pdGVyYXRv ciBlbmQgKCkgY29uc3QgeyByZXR1cm4gaWVuZCAoKTsgfQoKICByZXZlcnNlX2l0ZXJhdG9yIHJi ZWdpbigpIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IgKGVuZCAoKSk7IH0KICBjb25zdF9yZXZl cnNlX2l0ZXJhdG9yIHJiZWdpbigpIGNvbnN0CiAgICB7IHJldHVybiBjb25zdF9yZXZlcnNlX2l0 ZXJhdG9yIChlbmQgKCkpOyB9CiAgcmV2ZXJzZV9pdGVyYXRvciByZW5kKCkgeyByZXR1cm4gcmV2 ZXJzZV9pdGVyYXRvciAoYmVnaW4gKCkpOyB9CiAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvciByZW5k KCkgY29uc3QKICAgIHsgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IgKGJlZ2luICgpKTsg fQoKcHJpdmF0ZToKICB2b2lkIGFsbG9jIChzaXplX3R5cGUgc2l6ZSwgYm9vbCBzYXZlKTsKICBz dGF0aWMgc2l6ZV90eXBlIF9maW5kIChjb25zdCBjaGFyVCogcHRyLCBjaGFyVCBjLCBzaXplX3R5 cGUgeHBvcywgc2l6ZV90eXBlIGxlbik7CiAgaW5saW5lIGJvb2wgY2hlY2tfcmVhbGxvYyAoc2l6 ZV90eXBlIHMpIGNvbnN0OwoKICBzdGF0aWMgUmVwIG5pbFJlcDsKICBjaGFyVCAqZGF0Owp9OwoK CgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9y PgpiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mIGJhc2ljX3N0cmluZyA8 Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6CnJlcGxhY2UgKGl0ZXJhdG9yIGkxLCBpdGVyYXRv ciBpMiwgY29uc3RfaXRlcmF0b3IgajEsIGNvbnN0X2l0ZXJhdG9yIGoyKQoKewogIGNvbnN0IHNp emVfdHlwZSBsZW4gPSBsZW5ndGggKCk7CiAgc2l6ZV90eXBlIHBvcyA9IGkxIC0gaWJlZ2luICgp OwogIHNpemVfdHlwZSBuMSA9IGkyIC0gaTE7CiAgc2l6ZV90eXBlIG4yID0gajIgLSBqMTsKCiAg KCh2b2lkKSAoKCEocG9zID4gbGVuKSkgPyAwIDogKF9fYXNzZXJ0X2ZhaWwgKCIhKHBvcyA+IGxl bikiLCAiL3Vzci9pbmNsdWRlL2crKy0zL3N0ZC9iYXN0cmluZy5oIiwgNDQ2LCAoKGNvbnN0IGNo YXIgKikgMCkpLCAwKSkpOwogIGlmIChuMSA+IGxlbiAtIHBvcykKICAgIG4xID0gbGVuIC0gcG9z OwogICgodm9pZCkgKCghKGxlbiAtIG4xID4gbWF4X3NpemUgKCkgLSBuMikpID8gMCA6IChfX2Fz c2VydF9mYWlsICgiIShsZW4gLSBuMSA+IG1heF9zaXplICgpIC0gbjIpIiwgIi91c3IvaW5jbHVk ZS9nKystMy9zdGQvYmFzdHJpbmcuaCIsIDQ0OSwgKChjb25zdCBjaGFyICopIDApKSwgMCkpKTsK ICBzaXplX3QgbmV3bGVuID0gbGVuIC0gbjEgKyBuMjsKCiAgaWYgKGNoZWNrX3JlYWxsb2MgKG5l d2xlbikpCiAgICB7CiAgICAgIFJlcCAqcCA9IFJlcDo6Y3JlYXRlIChuZXdsZW4pOwogICAgICBw LT5jb3B5ICgwLCBkYXRhICgpLCBwb3MpOwogICAgICBwLT5jb3B5IChwb3MgKyBuMiwgZGF0YSAo KSArIHBvcyArIG4xLCBsZW4gLSAocG9zICsgbjEpKTsKICAgICAgZm9yICg7IGoxICE9IGoyOyAr K2oxLCArK3BvcykKICAgICAgICB0cmFpdHM6OmFzc2lnbiAoKCpwKVtwb3NdLCAqajEpOwogICAg ICByZXB1cCAocCk7CiAgICB9CiAgZWxzZQogICAgewogICAgICByZXAgKCktPm1vdmUgKHBvcyAr IG4yLCBkYXRhICgpICsgcG9zICsgbjEsIGxlbiAtIChwb3MgKyBuMSkpOwogICAgICBmb3IgKDsg ajEgIT0gajI7ICsrajEsICsrcG9zKQogICAgICAgIHRyYWl0czo6YXNzaWduICgoKnJlcCAoKSlb cG9zXSwgKmoxKTsKICAgIH0KICByZXAgKCktPmxlbiA9IG5ld2xlbjsKCiAgcmV0dXJuICp0aGlz Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9y PgppbmxpbmUgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+Cm9wZXJhdG9y KyAoY29uc3QgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+JiBsaHMsCiAg ICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+JiBy aHMpCnsKICBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4gc3RyIChsaHMp OwogIHN0ci5hcHBlbmQgKHJocyk7CiAgcmV0dXJuIHN0cjsKfQoKdGVtcGxhdGUgPGNsYXNzIGNo YXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KaW5saW5lIGJhc2ljX3N0cmluZyA8 Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPgpvcGVyYXRvcisgKGNvbnN0IGNoYXJUKiBsaHMsIGNv bnN0IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiYgcmhzKQp7CiAgYmFz aWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+IHN0ciAobGhzKTsKICBzdHIuYXBw ZW5kIChyaHMpOwogIHJldHVybiBzdHI7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3Mg dHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmlubGluZSBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFp dHMsIEFsbG9jYXRvcj4Kb3BlcmF0b3IrIChjaGFyVCBsaHMsIGNvbnN0IGJhc2ljX3N0cmluZyA8 Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiYgcmhzKQp7CiAgYmFzaWNfc3RyaW5nIDxjaGFyVCwg dHJhaXRzLCBBbGxvY2F0b3I+IHN0ciAoMSwgbGhzKTsKICBzdHIuYXBwZW5kIChyaHMpOwogIHJl dHVybiBzdHI7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBB bGxvY2F0b3I+CmlubGluZSBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4K b3BlcmF0b3IrIChjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4m IGxocywgY29uc3QgY2hhclQqIHJocykKewogIGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywg QWxsb2NhdG9yPiBzdHIgKGxocyk7CiAgc3RyLmFwcGVuZCAocmhzKTsKICByZXR1cm4gc3RyOwp9 Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgpp bmxpbmUgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+Cm9wZXJhdG9yKyAo Y29uc3QgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+JiBsaHMsIGNoYXJU IHJocykKewogIGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiBzdHIgKGxo cyk7CiAgc3RyLmFwcGVuZCAoMSwgcmhzKTsKICByZXR1cm4gc3RyOwp9Cgp0ZW1wbGF0ZSA8Y2xh c3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgppbmxpbmUgYm9vbApvcGVy YXRvcj09IChjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mIGxo cywKICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0 b3I+JiByaHMpCnsKICByZXR1cm4gKGxocy5jb21wYXJlIChyaHMpID09IDApOwp9Cgp0ZW1wbGF0 ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgppbmxpbmUgYm9v bApvcGVyYXRvcj09IChjb25zdCBjaGFyVCogbGhzLCBjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJU LCB0cmFpdHMsIEFsbG9jYXRvcj4mIHJocykKewogIHJldHVybiAocmhzLmNvbXBhcmUgKGxocykg PT0gMCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxv Y2F0b3I+CmlubGluZSBib29sCm9wZXJhdG9yPT0gKGNvbnN0IGJhc2ljX3N0cmluZyA8Y2hhclQs IHRyYWl0cywgQWxsb2NhdG9yPiYgbGhzLCBjb25zdCBjaGFyVCogcmhzKQp7CiAgcmV0dXJuIChs aHMuY29tcGFyZSAocmhzKSA9PSAwKTsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0 cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KaW5saW5lIGJvb2wKb3BlcmF0b3IhPSAoY29uc3QgY2hh clQqIGxocywgY29uc3QgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+JiBy aHMpCnsKICByZXR1cm4gKHJocy5jb21wYXJlIChsaHMpICE9IDApOwp9Cgp0ZW1wbGF0ZSA8Y2xh c3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgppbmxpbmUgYm9vbApvcGVy YXRvciE9IChjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mIGxo cywgY29uc3QgY2hhclQqIHJocykKewogIHJldHVybiAobGhzLmNvbXBhcmUgKHJocykgIT0gMCk7 Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+ CmlubGluZSBib29sCm9wZXJhdG9yPCAoY29uc3QgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRz LCBBbGxvY2F0b3I+JiBsaHMsCiAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZyA8Y2hhclQs IHRyYWl0cywgQWxsb2NhdG9yPiYgcmhzKQp7CiAgcmV0dXJuIChsaHMuY29tcGFyZSAocmhzKSA8 IDApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2Nh dG9yPgppbmxpbmUgYm9vbApvcGVyYXRvcjwgKGNvbnN0IGNoYXJUKiBsaHMsIGNvbnN0IGJhc2lj X3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiYgcmhzKQp7CiAgcmV0dXJuIChyaHMu Y29tcGFyZSAobGhzKSA+IDApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0 cywgY2xhc3MgQWxsb2NhdG9yPgppbmxpbmUgYm9vbApvcGVyYXRvcjwgKGNvbnN0IGJhc2ljX3N0 cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiYgbGhzLCBjb25zdCBjaGFyVCogcmhzKQp7 CiAgcmV0dXJuIChsaHMuY29tcGFyZSAocmhzKSA8IDApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hh clQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgppbmxpbmUgYm9vbApvcGVyYXRvcj4g KGNvbnN0IGNoYXJUKiBsaHMsIGNvbnN0IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxs b2NhdG9yPiYgcmhzKQp7CiAgcmV0dXJuIChyaHMuY29tcGFyZSAobGhzKSA8IDApOwp9Cgp0ZW1w bGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgppbmxpbmUg Ym9vbApvcGVyYXRvcj4gKGNvbnN0IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2Nh dG9yPiYgbGhzLCBjb25zdCBjaGFyVCogcmhzKQp7CiAgcmV0dXJuIChsaHMuY29tcGFyZSAocmhz KSA+IDApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxs b2NhdG9yPgppbmxpbmUgYm9vbApvcGVyYXRvcjw9IChjb25zdCBjaGFyVCogbGhzLCBjb25zdCBi YXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mIHJocykKewogIHJldHVybiAo cmhzLmNvbXBhcmUgKGxocykgPj0gMCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3Mg dHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmlubGluZSBib29sCm9wZXJhdG9yPD0gKGNvbnN0IGJh c2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiYgbGhzLCBjb25zdCBjaGFyVCog cmhzKQp7CiAgcmV0dXJuIChsaHMuY29tcGFyZSAocmhzKSA8PSAwKTsKfQoKdGVtcGxhdGUgPGNs YXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KaW5saW5lIGJvb2wKb3Bl cmF0b3I+PSAoY29uc3QgY2hhclQqIGxocywgY29uc3QgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJh aXRzLCBBbGxvY2F0b3I+JiByaHMpCnsKICByZXR1cm4gKHJocy5jb21wYXJlIChsaHMpIDw9IDAp Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9y PgppbmxpbmUgYm9vbApvcGVyYXRvcj49IChjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFp dHMsIEFsbG9jYXRvcj4mIGxocywgY29uc3QgY2hhclQqIHJocykKewogIHJldHVybiAobGhzLmNv bXBhcmUgKHJocykgPj0gMCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRz LCBjbGFzcyBBbGxvY2F0b3I+CmlubGluZSBib29sCm9wZXJhdG9yIT0gKGNvbnN0IGJhc2ljX3N0 cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiYgbGhzLAogICAgICAgICAgICBjb25zdCBi YXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mIHJocykKewogIHJldHVybiAo bGhzLmNvbXBhcmUgKHJocykgIT0gMCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3Mg dHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmlubGluZSBib29sCm9wZXJhdG9yPiAoY29uc3QgYmFz aWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+JiBsaHMsCiAgICAgICAgICAgY29u c3QgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+JiByaHMpCnsKICByZXR1 cm4gKGxocy5jb21wYXJlIChyaHMpID4gMCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xh c3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmlubGluZSBib29sCm9wZXJhdG9yPD0gKGNvbnN0 IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiYgbGhzLAogICAgICAgICAg ICBjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mIHJocykKewog IHJldHVybiAobGhzLmNvbXBhcmUgKHJocykgPD0gMCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFy VCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmlubGluZSBib29sCm9wZXJhdG9yPj0g KGNvbnN0IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiYgbGhzLAogICAg ICAgICAgICBjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mIHJo cykKewogIHJldHVybiAobGhzLmNvbXBhcmUgKHJocykgPj0gMCk7Cn0KCmNsYXNzIGlzdHJlYW07 IGNsYXNzIG9zdHJlYW07CnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFz cyBBbGxvY2F0b3I+IGlzdHJlYW0mCm9wZXJhdG9yPj4gKGlzdHJlYW0mLCBiYXNpY19zdHJpbmcg PGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mKTsKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFz cyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4gb3N0cmVhbSYKb3BlcmF0b3I8PCAob3N0cmVhbSYs IGNvbnN0IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiYpOwp0ZW1wbGF0 ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPiBpc3RyZWFtJgpn ZXRsaW5lIChpc3RyZWFtJiwgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+ JiwgY2hhclQgZGVsaW0gPSAnXG4nKTsKCn0KCiMgMSAiL3Vzci9pbmNsdWRlL2crKy0zL3N0ZC9i YXN0cmluZy5jYyIgMSAzCiMgMjggIi91c3IvaW5jbHVkZS9nKystMy9zdGQvYmFzdHJpbmcuY2Mi IDMKZXh0ZXJuICJDKysiIHsKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNs YXNzIEFsbG9jYXRvcj4KaW5saW5lIHZvaWQgKiBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMs IEFsbG9jYXRvcj46OlJlcDo6Cm9wZXJhdG9yIG5ldyAoc2l6ZV90IHMsIHNpemVfdCBleHRyYSkK ewogIHJldHVybiBBbGxvY2F0b3I6OmFsbG9jYXRlKHMgKyBleHRyYSAqIHNpemVvZiAoY2hhclQp KTsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRv cj4KaW5saW5lIHZvaWQgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjpS ZXA6OgpvcGVyYXRvciBkZWxldGUgKHZvaWQgKiBwdHIpCnsKICBBbGxvY2F0b3I6OmRlYWxsb2Nh dGUocHRyLCBzaXplb2YoUmVwKSArCiAgICAgICAgICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0 X2Nhc3Q8UmVwICo+KHB0ciktPnJlcyAqCiAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZiAo Y2hhclQpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFs bG9jYXRvcj4KaW5saW5lIHNpemVfdCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9j YXRvcj46OlJlcDo6CmZyb2Jfc2l6ZSAoc2l6ZV90IHMpCnsKICBzaXplX3QgaSA9IDE2OwogIHdo aWxlIChpIDwgcykgaSAqPSAyOwogIHJldHVybiBpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQs IGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgppbmxpbmUgYmFzaWNfc3RyaW5nIDxjaGFy VCwgdHJhaXRzLCBBbGxvY2F0b3I+OjpSZXAgKgpiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMs IEFsbG9jYXRvcj46OlJlcDo6CmNyZWF0ZSAoc2l6ZV90IGV4dHJhKQp7CiAgZXh0cmEgPSBmcm9i X3NpemUgKGV4dHJhICsgMSk7CiAgUmVwICpwID0gbmV3IChleHRyYSkgUmVwOwogIHAtPnJlcyA9 IGV4dHJhOwogIHAtPnJlZiA9IDE7CiAgcC0+c2VsZmlzaCA9IGZhbHNlOwogIHJldHVybiBwOwp9 Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgpj aGFyVCAqIGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6UmVwOjoKY2xv bmUgKCkKewogIFJlcCAqcCA9IFJlcDo6Y3JlYXRlIChsZW4pOwogIHAtPmNvcHkgKDAsIGRhdGEg KCksIGxlbik7CiAgcC0+bGVuID0gbGVuOwogIHJldHVybiBwLT5kYXRhICgpOwp9Cgp0ZW1wbGF0 ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgppbmxpbmUgYm9v bCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OlJlcDo6CmV4Y2Vzc19z bG9wIChzaXplX3Qgcywgc2l6ZV90IHIpCnsKICByZXR1cm4gMiAqIChzIDw9IDE2ID8gMTYgOiBz KSA8IHI7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxv Y2F0b3I+CmlubGluZSBib29sIGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9y Pjo6CmNoZWNrX3JlYWxsb2MgKGJhc2ljX3N0cmluZzo6c2l6ZV90eXBlIHMpIGNvbnN0CnsKICBz ICs9IHNpemVvZiAoY2hhclQpOwogIHJlcCAoKS0+c2VsZmlzaCA9IGZhbHNlOwogIHJldHVybiAo cmVwICgpLT5yZWYgPiAxCiAgICAgICAgICB8fCBzID4gY2FwYWNpdHkgKCkKICAgICAgICAgIHx8 IFJlcDo6ZXhjZXNzX3Nsb3AgKHMsIGNhcGFjaXR5ICgpKSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBj aGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CnZvaWQgYmFzaWNfc3RyaW5nIDxj aGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjoKYWxsb2MgKGJhc2ljX3N0cmluZzo6c2l6ZV90eXBl IF9fc2l6ZSwgYm9vbCBfX3NhdmUpCnsKICBpZiAoISBjaGVja19yZWFsbG9jIChfX3NpemUpKQog ICAgcmV0dXJuOwoKICBSZXAgKnAgPSBSZXA6OmNyZWF0ZSAoX19zaXplKTsKCiAgaWYgKF9fc2F2 ZSkKICAgIHsKICAgICAgcC0+Y29weSAoMCwgZGF0YSAoKSwgbGVuZ3RoICgpKTsKICAgICAgcC0+ bGVuID0gbGVuZ3RoICgpOwogICAgfQogIGVsc2UKICAgIHAtPmxlbiA9IDA7CgogIHJlcHVwIChw KTsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRv cj4KYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+JgpiYXNpY19zdHJpbmcg PGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OgpyZXBsYWNlIChzaXplX3R5cGUgcG9zMSwgc2l6 ZV90eXBlIG4xLAogICAgICAgICBjb25zdCBiYXNpY19zdHJpbmcmIHN0ciwgc2l6ZV90eXBlIHBv czIsIHNpemVfdHlwZSBuMikKewogIGNvbnN0IHNpemVfdCBsZW4yID0gc3RyLmxlbmd0aCAoKTsK CiAgaWYgKHBvczEgPT0gMCAmJiBuMSA+PSBsZW5ndGggKCkgJiYgcG9zMiA9PSAwICYmIG4yID49 IGxlbjIpCiAgICByZXR1cm4gb3BlcmF0b3I9IChzdHIpOwoKICAoKHZvaWQpICgoIShwb3MyID4g bGVuMikpID8gMCA6IChfX2Fzc2VydF9mYWlsICgiIShwb3MyID4gbGVuMikiLCAiL3Vzci9pbmNs dWRlL2crKy0zL3N0ZC9iYXN0cmluZy5jYyIsIDEyNiwgKChjb25zdCBjaGFyICopIDApKSwgMCkp KTsKCiAgaWYgKG4yID4gbGVuMiAtIHBvczIpCiAgICBuMiA9IGxlbjIgLSBwb3MyOwoKICByZXR1 cm4gcmVwbGFjZSAocG9zMSwgbjEsIHN0ci5kYXRhICgpICsgcG9zMiwgbjIpOwp9Cgp0ZW1wbGF0 ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgppbmxpbmUgdm9p ZCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OlJlcDo6CmNvcHkgKHNp emVfdCBwb3MsIGNvbnN0IGNoYXJUICpzLCBzaXplX3QgbikKewogIGlmIChuKQogICAgdHJhaXRz Ojpjb3B5IChkYXRhICgpICsgcG9zLCBzLCBuKTsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBj bGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KaW5saW5lIHZvaWQgYmFzaWNfc3RyaW5nIDxj aGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjpSZXA6Ogptb3ZlIChzaXplX3QgcG9zLCBjb25zdCBj aGFyVCAqcywgc2l6ZV90IG4pCnsKICBpZiAobikKICAgIHRyYWl0czo6bW92ZSAoZGF0YSAoKSAr IHBvcywgcywgbik7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFz cyBBbGxvY2F0b3I+CmJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiYKYmFz aWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjoKcmVwbGFjZSAoc2l6ZV90eXBl IHBvcywgc2l6ZV90eXBlIG4xLCBjb25zdCBjaGFyVCogcywgc2l6ZV90eXBlIG4yKQp7CiAgY29u c3Qgc2l6ZV90eXBlIGxlbiA9IGxlbmd0aCAoKTsKICAoKHZvaWQpICgoIShwb3MgPiBsZW4pKSA/ IDAgOiAoX19hc3NlcnRfZmFpbCAoIiEocG9zID4gbGVuKSIsICIvdXNyL2luY2x1ZGUvZysrLTMv c3RkL2Jhc3RyaW5nLmNjIiwgMTU2LCAoKGNvbnN0IGNoYXIgKikgMCkpLCAwKSkpOwogIGlmIChu MSA+IGxlbiAtIHBvcykKICAgIG4xID0gbGVuIC0gcG9zOwogICgodm9pZCkgKCghKGxlbiAtIG4x ID4gbWF4X3NpemUgKCkgLSBuMikpID8gMCA6IChfX2Fzc2VydF9mYWlsICgiIShsZW4gLSBuMSA+ IG1heF9zaXplICgpIC0gbjIpIiwgIi91c3IvaW5jbHVkZS9nKystMy9zdGQvYmFzdHJpbmcuY2Mi LCAxNTksICgoY29uc3QgY2hhciAqKSAwKSksIDApKSk7CiAgc2l6ZV90IG5ld2xlbiA9IGxlbiAt IG4xICsgbjI7CgogIGlmIChjaGVja19yZWFsbG9jIChuZXdsZW4pKQogICAgewogICAgICBSZXAg KnAgPSBSZXA6OmNyZWF0ZSAobmV3bGVuKTsKICAgICAgcC0+Y29weSAoMCwgZGF0YSAoKSwgcG9z KTsKICAgICAgcC0+Y29weSAocG9zICsgbjIsIGRhdGEgKCkgKyBwb3MgKyBuMSwgbGVuIC0gKHBv cyArIG4xKSk7CiAgICAgIHAtPmNvcHkgKHBvcywgcywgbjIpOwogICAgICByZXB1cCAocCk7CiAg ICB9CiAgZWxzZQogICAgewogICAgICByZXAgKCktPm1vdmUgKHBvcyArIG4yLCBkYXRhICgpICsg cG9zICsgbjEsIGxlbiAtIChwb3MgKyBuMSkpOwogICAgICByZXAgKCktPmNvcHkgKHBvcywgcywg bjIpOwogICAgfQogIHJlcCAoKS0+bGVuID0gbmV3bGVuOwoKICByZXR1cm4gKnRoaXM7Cn0KCnRl bXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmlubGlu ZSB2b2lkIGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6UmVwOjoKc2V0 IChzaXplX3QgcG9zLCBjb25zdCBjaGFyVCBjLCBzaXplX3QgbikKewogIHRyYWl0czo6c2V0IChk YXRhICgpICsgcG9zLCBjLCBuKTsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFp dHMsIGNsYXNzIEFsbG9jYXRvcj4KYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0 b3I+JiBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OgpyZXBsYWNlIChz aXplX3R5cGUgcG9zLCBzaXplX3R5cGUgbjEsIHNpemVfdHlwZSBuMiwgY2hhclQgYykKewogIGNv bnN0IHNpemVfdCBsZW4gPSBsZW5ndGggKCk7CiAgKCh2b2lkKSAoKCEocG9zID4gbGVuKSkgPyAw IDogKF9fYXNzZXJ0X2ZhaWwgKCIhKHBvcyA+IGxlbikiLCAiL3Vzci9pbmNsdWRlL2crKy0zL3N0 ZC9iYXN0cmluZy5jYyIsIDE5MiwgKChjb25zdCBjaGFyICopIDApKSwgMCkpKTsKICBpZiAobjEg PiBsZW4gLSBwb3MpCiAgICBuMSA9IGxlbiAtIHBvczsKICAoKHZvaWQpICgoIShsZW4gLSBuMSA+ IG1heF9zaXplICgpIC0gbjIpKSA/IDAgOiAoX19hc3NlcnRfZmFpbCAoIiEobGVuIC0gbjEgPiBt YXhfc2l6ZSAoKSAtIG4yKSIsICIvdXNyL2luY2x1ZGUvZysrLTMvc3RkL2Jhc3RyaW5nLmNjIiwg MTk1LCAoKGNvbnN0IGNoYXIgKikgMCkpLCAwKSkpOwogIHNpemVfdCBuZXdsZW4gPSBsZW4gLSBu MSArIG4yOwoKICBpZiAoY2hlY2tfcmVhbGxvYyAobmV3bGVuKSkKICAgIHsKICAgICAgUmVwICpw ID0gUmVwOjpjcmVhdGUgKG5ld2xlbik7CiAgICAgIHAtPmNvcHkgKDAsIGRhdGEgKCksIHBvcyk7 CiAgICAgIHAtPmNvcHkgKHBvcyArIG4yLCBkYXRhICgpICsgcG9zICsgbjEsIGxlbiAtIChwb3Mg KyBuMSkpOwogICAgICBwLT5zZXQgKHBvcywgYywgbjIpOwogICAgICByZXB1cCAocCk7CiAgICB9 CiAgZWxzZQogICAgewogICAgICByZXAgKCktPm1vdmUgKHBvcyArIG4yLCBkYXRhICgpICsgcG9z ICsgbjEsIGxlbiAtIChwb3MgKyBuMSkpOwogICAgICByZXAgKCktPnNldCAocG9zLCBjLCBuMik7 CiAgICB9CiAgcmVwICgpLT5sZW4gPSBuZXdsZW47CgogIHJldHVybiAqdGhpczsKfQoKdGVtcGxh dGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4Kdm9pZCBiYXNp Y19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OgpyZXNpemUgKHNpemVfdHlwZSBu LCBjaGFyVCBjKQp7CiAgKCh2b2lkKSAoKCEobiA+IG1heF9zaXplICgpKSkgPyAwIDogKF9fYXNz ZXJ0X2ZhaWwgKCIhKG4gPiBtYXhfc2l6ZSAoKSkiLCAiL3Vzci9pbmNsdWRlL2crKy0zL3N0ZC9i YXN0cmluZy5jYyIsIDIyMCwgKChjb25zdCBjaGFyICopIDApKSwgMCkpKTsKCiAgaWYgKG4gPiBs ZW5ndGggKCkpCiAgICBhcHBlbmQgKG4gLSBsZW5ndGggKCksIGMpOwogIGVsc2UKICAgIGVyYXNl IChuKTsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9j YXRvcj4KYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjpzaXplX3R5cGUK YmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjoKY29weSAoY2hhclQqIHMs IHNpemVfdHlwZSBuLCBzaXplX3R5cGUgcG9zKSBjb25zdAp7CiAgKCh2b2lkKSAoKCEocG9zID4g bGVuZ3RoICgpKSkgPyAwIDogKF9fYXNzZXJ0X2ZhaWwgKCIhKHBvcyA+IGxlbmd0aCAoKSkiLCAi L3Vzci9pbmNsdWRlL2crKy0zL3N0ZC9iYXN0cmluZy5jYyIsIDIzMywgKChjb25zdCBjaGFyICop IDApKSwgMCkpKTsKCiAgaWYgKG4gPiBsZW5ndGggKCkgLSBwb3MpCiAgICBuID0gbGVuZ3RoICgp IC0gcG9zOwoKICB0cmFpdHM6OmNvcHkgKHMsIGRhdGEgKCkgKyBwb3MsIG4pOwogIHJldHVybiBu Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9y PgpiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OnNpemVfdHlwZQpiYXNp Y19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OgpmaW5kIChjb25zdCBjaGFyVCog cywgc2l6ZV90eXBlIHBvcywgc2l6ZV90eXBlIG4pIGNvbnN0CnsKICBzaXplX3QgeHBvcyA9IHBv czsKICBmb3IgKDsgeHBvcyArIG4gPD0gbGVuZ3RoICgpOyArK3hwb3MpCiAgICBpZiAodHJhaXRz OjplcSAoZGF0YSAoKSBbeHBvc10sICpzKQogICAgICAgICYmIHRyYWl0czo6Y29tcGFyZSAoZGF0 YSAoKSArIHhwb3MsIHMsIG4pID09IDApCiAgICAgIHJldHVybiB4cG9zOwogIHJldHVybiBucG9z Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9y PgppbmxpbmUgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjpzaXplX3R5 cGUKYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjoKX2ZpbmQgKGNvbnN0 IGNoYXJUKiBwdHIsIGNoYXJUIGMsIHNpemVfdHlwZSB4cG9zLCBzaXplX3R5cGUgbGVuKQp7CiAg Zm9yICg7IHhwb3MgPCBsZW47ICsreHBvcykKICAgIGlmICh0cmFpdHM6OmVxIChwdHIgW3hwb3Nd LCBjKSkKICAgICAgcmV0dXJuIHhwb3M7CiAgcmV0dXJuIG5wb3M7Cn0KCnRlbXBsYXRlIDxjbGFz cyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmJhc2ljX3N0cmluZyA8Y2hh clQsIHRyYWl0cywgQWxsb2NhdG9yPjo6c2l6ZV90eXBlCmJhc2ljX3N0cmluZyA8Y2hhclQsIHRy YWl0cywgQWxsb2NhdG9yPjo6CmZpbmQgKGNoYXJUIGMsIHNpemVfdHlwZSBwb3MpIGNvbnN0CnsK ICByZXR1cm4gX2ZpbmQgKGRhdGEgKCksIGMsIHBvcywgbGVuZ3RoICgpKTsKfQoKdGVtcGxhdGUg PGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KYmFzaWNfc3RyaW5n IDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjpzaXplX3R5cGUKYmFzaWNfc3RyaW5nIDxjaGFy VCwgdHJhaXRzLCBBbGxvY2F0b3I+OjoKcmZpbmQgKGNvbnN0IGNoYXJUKiBzLCBzaXplX3R5cGUg cG9zLCBzaXplX3R5cGUgbikgY29uc3QKewogIGlmIChuID4gbGVuZ3RoICgpKQogICAgcmV0dXJu IG5wb3M7CgogIHNpemVfdCB4cG9zID0gbGVuZ3RoICgpIC0gbjsKICBpZiAoeHBvcyA+IHBvcykK ICAgIHhwb3MgPSBwb3M7CgogIGZvciAoKyt4cG9zOyB4cG9zLS0gPiAwOyApCiAgICBpZiAodHJh aXRzOjplcSAoZGF0YSAoKSBbeHBvc10sICpzKQogICAgICAgICYmIHRyYWl0czo6Y29tcGFyZSAo ZGF0YSAoKSArIHhwb3MsIHMsIG4pID09IDApCiAgICAgIHJldHVybiB4cG9zOwogIHJldHVybiBu cG9zOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2Nh dG9yPgpiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OnNpemVfdHlwZQpi YXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OgpyZmluZCAoY2hhclQgYywg c2l6ZV90eXBlIHBvcykgY29uc3QKewogIGlmICgxID4gbGVuZ3RoICgpKQogICAgcmV0dXJuIG5w b3M7CgogIHNpemVfdCB4cG9zID0gbGVuZ3RoICgpIC0gMTsKICBpZiAoeHBvcyA+IHBvcykKICAg IHhwb3MgPSBwb3M7CgogIGZvciAoKyt4cG9zOyB4cG9zLS0gPiAwOyApCiAgICBpZiAodHJhaXRz OjplcSAoZGF0YSAoKSBbeHBvc10sIGMpKQogICAgICByZXR1cm4geHBvczsKICByZXR1cm4gbnBv czsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRv cj4KYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjpzaXplX3R5cGUKYmFz aWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjoKZmluZF9maXJzdF9vZiAoY29u c3QgY2hhclQqIHMsIHNpemVfdHlwZSBwb3MsIHNpemVfdHlwZSBuKSBjb25zdAp7CiAgc2l6ZV90 IHhwb3MgPSBwb3M7CiAgZm9yICg7IHhwb3MgPCBsZW5ndGggKCk7ICsreHBvcykKICAgIGlmIChf ZmluZCAocywgZGF0YSAoKSBbeHBvc10sIDAsIG4pICE9IG5wb3MpCiAgICAgIHJldHVybiB4cG9z OwogIHJldHVybiBucG9zOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywg Y2xhc3MgQWxsb2NhdG9yPgpiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46 OnNpemVfdHlwZQpiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OgpmaW5k X2xhc3Rfb2YgKGNvbnN0IGNoYXJUKiBzLCBzaXplX3R5cGUgcG9zLCBzaXplX3R5cGUgbikgY29u c3QKewogIGlmIChsZW5ndGgoKSA9PSAwKQogICAgcmV0dXJuIG5wb3M7CiAgc2l6ZV90IHhwb3Mg PSBsZW5ndGggKCkgLSAxOwogIGlmICh4cG9zID4gcG9zKQogICAgeHBvcyA9IHBvczsKICBmb3Ig KCsreHBvczsgeHBvcy0tID4gMDspCiAgICBpZiAoX2ZpbmQgKHMsIGRhdGEgKCkgW3hwb3NdLCAw LCBuKSAhPSBucG9zKQogICAgICByZXR1cm4geHBvczsKICByZXR1cm4gbnBvczsKfQoKdGVtcGxh dGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KYmFzaWNfc3Ry aW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjpzaXplX3R5cGUKYmFzaWNfc3RyaW5nIDxj aGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjoKZmluZF9maXJzdF9ub3Rfb2YgKGNvbnN0IGNoYXJU KiBzLCBzaXplX3R5cGUgcG9zLCBzaXplX3R5cGUgbikgY29uc3QKewogIHNpemVfdCB4cG9zID0g cG9zOwogIGZvciAoOyB4cG9zIDwgbGVuZ3RoICgpOyArK3hwb3MpCiAgICBpZiAoX2ZpbmQgKHMs IGRhdGEgKCkgW3hwb3NdLCAwLCBuKSA9PSBucG9zKQogICAgICByZXR1cm4geHBvczsKICByZXR1 cm4gbnBvczsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFs bG9jYXRvcj4KYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjpzaXplX3R5 cGUKYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjoKZmluZF9maXJzdF9u b3Rfb2YgKGNoYXJUIGMsIHNpemVfdHlwZSBwb3MpIGNvbnN0CnsKICBzaXplX3QgeHBvcyA9IHBv czsKICBmb3IgKDsgeHBvcyA8IGxlbmd0aCAoKTsgKyt4cG9zKQogICAgaWYgKHRyYWl0czo6bmUg KGRhdGEgKCkgW3hwb3NdLCBjKSkKICAgICAgcmV0dXJuIHhwb3M7CiAgcmV0dXJuIG5wb3M7Cn0K CnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmJh c2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6c2l6ZV90eXBlCmJhc2ljX3N0 cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6CmZpbmRfbGFzdF9ub3Rfb2YgKGNvbnN0 IGNoYXJUKiBzLCBzaXplX3R5cGUgcG9zLCBzaXplX3R5cGUgbikgY29uc3QKewogIGlmIChsZW5n dGgoKSA9PSAwKQogICAgcmV0dXJuIG5wb3M7CiAgc2l6ZV90IHhwb3MgPSBsZW5ndGggKCkgLSAx OwogIGlmICh4cG9zID4gcG9zKQogICAgeHBvcyA9IHBvczsKICBmb3IgKCsreHBvczsgeHBvcy0t ID4gMDspCiAgICBpZiAoX2ZpbmQgKHMsIGRhdGEgKCkgW3hwb3NdLCAwLCBuKSA9PSBucG9zKQog ICAgICByZXR1cm4geHBvczsKICByZXR1cm4gbnBvczsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJU LCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJh aXRzLCBBbGxvY2F0b3I+OjpzaXplX3R5cGUKYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBB bGxvY2F0b3I+OjoKZmluZF9sYXN0X25vdF9vZiAoY2hhclQgYywgc2l6ZV90eXBlIHBvcykgY29u c3QKewogIGlmIChsZW5ndGgoKSA9PSAwKQogICAgcmV0dXJuIG5wb3M7CiAgc2l6ZV90IHhwb3Mg PSBsZW5ndGggKCkgLSAxOwogIGlmICh4cG9zID4gcG9zKQogICAgeHBvcyA9IHBvczsKICBmb3Ig KCsreHBvczsgeHBvcy0tID4gMDspCiAgICBpZiAodHJhaXRzOjpuZSAoZGF0YSAoKSBbeHBvc10s IGMpKQogICAgICByZXR1cm4geHBvczsKICByZXR1cm4gbnBvczsKfQoKdGVtcGxhdGUgPGNsYXNz IGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KaW50IGJhc2ljX3N0cmluZyA8 Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6CmNvbXBhcmUgKGNvbnN0IGJhc2ljX3N0cmluZyYg c3RyLCBzaXplX3R5cGUgcG9zLCBzaXplX3R5cGUgbikgY29uc3QKewogICgodm9pZCkgKCghKHBv cyA+IGxlbmd0aCAoKSkpID8gMCA6IChfX2Fzc2VydF9mYWlsICgiIShwb3MgPiBsZW5ndGggKCkp IiwgIi91c3IvaW5jbHVkZS9nKystMy9zdGQvYmFzdHJpbmcuY2MiLCAzOTksICgoY29uc3QgY2hh ciAqKSAwKSksIDApKSk7CgogIHNpemVfdCBybGVuID0gbGVuZ3RoICgpIC0gcG9zOwogIGlmIChy bGVuID4gbikKICAgIHJsZW4gPSBuOwogIGlmIChybGVuID4gc3RyLmxlbmd0aCAoKSkKICAgIHJs ZW4gPSBzdHIubGVuZ3RoICgpOwogIGludCByID0gdHJhaXRzOjpjb21wYXJlIChkYXRhICgpICsg cG9zLCBzdHIuZGF0YSAoKSwgcmxlbik7CiAgaWYgKHIgIT0gMCkKICAgIHJldHVybiByOwogIGlm IChybGVuID09IG4pCiAgICByZXR1cm4gMDsKICByZXR1cm4gKGxlbmd0aCAoKSAtIHBvcykgLSBz dHIubGVuZ3RoICgpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xh c3MgQWxsb2NhdG9yPgppbnQgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+ OjoKY29tcGFyZSAoY29uc3QgY2hhclQqIHMsIHNpemVfdHlwZSBwb3MsIHNpemVfdHlwZSBuKSBj b25zdAp7CiAgKCh2b2lkKSAoKCEocG9zID4gbGVuZ3RoICgpKSkgPyAwIDogKF9fYXNzZXJ0X2Zh aWwgKCIhKHBvcyA+IGxlbmd0aCAoKSkiLCAiL3Vzci9pbmNsdWRlL2crKy0zL3N0ZC9iYXN0cmlu Zy5jYyIsIDQxOCwgKChjb25zdCBjaGFyICopIDApKSwgMCkpKTsKCiAgc2l6ZV90IHJsZW4gPSBs ZW5ndGggKCkgLSBwb3M7CiAgaWYgKHJsZW4gPiBuKQogICAgcmxlbiA9IG47CiAgaW50IHIgPSB0 cmFpdHM6OmNvbXBhcmUgKGRhdGEgKCkgKyBwb3MsIHMsIHJsZW4pOwogIGlmIChyICE9IDApCiAg ICByZXR1cm4gcjsKICByZXR1cm4gKGxlbmd0aCAoKSAtIHBvcykgLSBuOwp9CgojIDEgIi91c3Iv aW5jbHVkZS9nKystMy9pb3N0cmVhbS5oIiAxIDMKIyA0MzAgIi91c3IvaW5jbHVkZS9nKystMy9z dGQvYmFzdHJpbmcuY2MiIDIgMwoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMs IGNsYXNzIEFsbG9jYXRvcj4KaXN0cmVhbSAmCm9wZXJhdG9yPj4gKGlzdHJlYW0gJmlzLCBiYXNp Y19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4gJnMpCnsKICBpbnQgdyA9IGlzLndp ZHRoICgwKTsKICBpZiAoaXMuaXBmeDAgKCkpCiAgICB7CiAgICAgIHJlZ2lzdGVyIHN0cmVhbWJ1 ZiAqc2IgPSBpcy5yZGJ1ZiAoKTsKICAgICAgcy5yZXNpemUgKDApOwogICAgICB3aGlsZSAoMSkK ICAgICAgICB7CiAgICAgICAgICBpbnQgY2ggPSBzYi0+c2J1bXBjICgpOwogICAgICAgICAgaWYg KGNoID09ICgtMSkpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpcy5zZXRzdGF0ZSAoaW9z Ojplb2ZiaXQpOwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICBl bHNlIGlmICh0cmFpdHM6OmlzX2RlbCAoY2gpKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAg c2ItPnN1bmdldGMgKCk7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAg ICAgIHMgKz0gc3RhdGljX2Nhc3Q8Y2hhclQ+IChjaCk7CiAgICAgICAgICBpZiAoLS13ID09IDEp CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgIH0KCiAgaXMuaXNmeCAoKTsKICBpZiAo cy5sZW5ndGggKCkgPT0gMCkKICAgIGlzLnNldHN0YXRlIChpb3M6OmZhaWxiaXQpOwoKICByZXR1 cm4gaXM7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxv Y2F0b3I+Cm9zdHJlYW0gJgpvcGVyYXRvcjw8IChvc3RyZWFtICZvLCBjb25zdCBiYXNpY19zdHJp bmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mIHMpCnsKICByZXR1cm4gby53cml0ZSAocy5k YXRhICgpLCBzLmxlbmd0aCAoKSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJh aXRzLCBjbGFzcyBBbGxvY2F0b3I+CmlzdHJlYW0mCmdldGxpbmUgKGlzdHJlYW0gJmlzLCBiYXNp Y19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mIHMsIGNoYXJUIGRlbGltKQp7CiAg aWYgKGlzLmlwZngxICgpKQogICAgewogICAgICBzaXplX3QgX19jb3VudCA9IDA7CiAgICAgIHN0 cmVhbWJ1ZiAqc2IgPSBpcy5yZGJ1ZiAoKTsKICAgICAgcy5yZXNpemUgKDApOwoKICAgICAgd2hp bGUgKDEpCiAgICAgICAgewogICAgICAgICAgaW50IGNoID0gc2ItPnNidW1wYyAoKTsKICAgICAg ICAgIGlmIChjaCA9PSAoLTEpKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaXMuc2V0c3Rh dGUgKF9fY291bnQgPT0gMAogICAgICAgICAgICAgICAgICAgICAgICAgICA/IChpb3M6OmZhaWxi aXR8aW9zOjplb2ZiaXQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgIDogaW9zOjplb2ZiaXQp OwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CgogICAgICAgICAgKytfX2NvdW50 OwoKICAgICAgICAgIGlmIChjaCA9PSBkZWxpbSkKICAgICAgICAgICAgYnJlYWs7CgogICAgICAg ICAgcyArPSBzdGF0aWNfY2FzdDxjaGFyVD4gKGNoKTsKCiAgICAgICAgICBpZiAocy5sZW5ndGgg KCkgPT0gcy5ucG9zIC0gMSkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlzLnNldHN0YXRl IChpb3M6OmZhaWxiaXQpOwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAg ICAgfQogICAgfQoKCgogIGlzLmlzZnggKCk7CgogIHJldHVybiBpczsKfQoKdGVtcGxhdGUgPGNs YXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KYmFzaWNfc3RyaW5nIDxj aGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjpSZXAKYmFzaWNfc3RyaW5nPGNoYXJULCB0cmFpdHMs IEFsbG9jYXRvcj46Om5pbFJlcCA9IHsgMCwgMCwgMSwgZmFsc2UgfTsKCnRlbXBsYXRlIDxjbGFz cyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmNvbnN0IGJhc2ljX3N0cmlu ZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6c2l6ZV90eXBlCmJhc2ljX3N0cmluZyA8Y2hh clQsIHRyYWl0cywgQWxsb2NhdG9yPjo6bnBvczsKCn0KIyA2NjEgIi91c3IvaW5jbHVkZS9nKyst My9zdGQvYmFzdHJpbmcuaCIgMiAzCiMgNyAiL3Vzci9pbmNsdWRlL2crKy0zL3N0cmluZyIgMiAz CgpleHRlcm4gIkMrKyIgewp0eXBlZGVmIGJhc2ljX3N0cmluZyA8Y2hhcj4gc3RyaW5nOwoKfQoj IDEzICJyZXNvdXJjZXMuaCIgMgojIDEgIi91c3IvaW5jbHVkZS9nKystMy9tYXAiIDEgMwojIDMx ICIvdXNyL2luY2x1ZGUvZysrLTMvbWFwIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2crKy0zL3N0bF90 cmVlLmgiIDEgMwojIDU2ICIvdXNyL2luY2x1ZGUvZysrLTMvc3RsX3RyZWUuaCIgMwojIDEgIi91 c3IvaW5jbHVkZS9nKystMy9zdGxfYWxnb2Jhc2UuaCIgMSAzCiMgNDIgIi91c3IvaW5jbHVkZS9n KystMy9zdGxfYWxnb2Jhc2UuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9nKystMy9zdGxfcGFpci5o IiAxIDMKIyAzNiAiL3Vzci9pbmNsdWRlL2crKy0zL3N0bF9wYWlyLmgiIDMKdGVtcGxhdGUgPGNs YXNzIF9UMSwgY2xhc3MgX1QyPgpzdHJ1Y3QgcGFpciB7CiAgdHlwZWRlZiBfVDEgZmlyc3RfdHlw ZTsKICB0eXBlZGVmIF9UMiBzZWNvbmRfdHlwZTsKCiAgX1QxIGZpcnN0OwogIF9UMiBzZWNvbmQ7 CiAgcGFpcigpIDogZmlyc3QoX1QxKCkpLCBzZWNvbmQoX1QyKCkpIHt9CiAgcGFpcihjb25zdCBf VDEmIF9fYSwgY29uc3QgX1QyJiBfX2IpIDogZmlyc3QoX19hKSwgc2Vjb25kKF9fYikge30KCgoK Cgp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgppbmxpbmUgYm9vbCBvcGVyYXRv cj09KGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3gsIGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3kp CnsKICByZXR1cm4gX194LmZpcnN0ID09IF9feS5maXJzdCAmJiBfX3guc2Vjb25kID09IF9feS5z ZWNvbmQ7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4KaW5saW5lIGJvb2wgb3Bl cmF0b3I8KGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3gsIGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBf X3kpCnsKICByZXR1cm4gX194LmZpcnN0IDwgX195LmZpcnN0IHx8CiAgICAgICAgICghKF9feS5m aXJzdCA8IF9feC5maXJzdCkgJiYgX194LnNlY29uZCA8IF9feS5zZWNvbmQpOwp9Cgp0ZW1wbGF0 ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CmlubGluZSBwYWlyPF9UMSwgX1QyPiBtYWtlX3BhaXIo Y29uc3QgX1QxJiBfX3gsIGNvbnN0IF9UMiYgX195KQp7CiAgcmV0dXJuIHBhaXI8X1QxLCBfVDI+ KF9feCwgX195KTsKfQojIDQzICIvdXNyL2luY2x1ZGUvZysrLTMvc3RsX2FsZ29iYXNlLmgiIDIg MwoKCiMgMSAiL3Vzci9pbmNsdWRlL2crKy0zL3R5cGVfdHJhaXRzLmgiIDEgMwojIDU1ICIvdXNy L2luY2x1ZGUvZysrLTMvdHlwZV90cmFpdHMuaCIgMwpzdHJ1Y3QgX190cnVlX3R5cGUgewp9OwoK c3RydWN0IF9fZmFsc2VfdHlwZSB7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgX190 eXBlX3RyYWl0cyB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgdGhpc19kdW1teV9tZW1iZXJfbXVz dF9iZV9maXJzdDsKIyA4MSAiL3Vzci9pbmNsdWRlL2crKy0zL3R5cGVfdHJhaXRzLmgiIDMKICAg dHlwZWRlZiBfX2ZhbHNlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAg dHlwZWRlZiBfX2ZhbHNlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlw ZWRlZiBfX2ZhbHNlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlw ZWRlZiBfX2ZhbHNlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX2Zh bHNlX3R5cGUgaXNfUE9EX3R5cGU7Cn07CiMgOTYgIi91c3IvaW5jbHVkZS9nKystMy90eXBlX3Ry YWl0cy5oIiAzCiAgICAgICAgICAgICAgICAgICAgc3RydWN0IF9fdHlwZV90cmFpdHM8Ym9vbD4g ewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7 CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAg dHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0 eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190 cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07CgoKCiAgICAgICAgICAgICAgICAgICAgc3RydWN0IF9f dHlwZV90cmFpdHM8Y2hhcj4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rl ZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29w eV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25t ZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0 b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07CgogICAgICAgICAgICAg ICAgICAgIHN0cnVjdCBfX3R5cGVfdHJhaXRzPHNpZ25lZCBjaGFyPiB7CiAgIHR5cGVkZWYgX190 cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3Ry dWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90 eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5 cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0Rf dHlwZTsKfTsKCiAgICAgICAgICAgICAgICAgICAgc3RydWN0IF9fdHlwZV90cmFpdHM8dW5zaWdu ZWQgY2hhcj4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29u c3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1 Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJh dG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5 cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07CiMgMTQyICIvdXNyL2luY2x1ZGUvZysr LTMvdHlwZV90cmFpdHMuaCIgMwogICAgICAgICAgICAgICAgICAgIHN0cnVjdCBfX3R5cGVfdHJh aXRzPHNob3J0PiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9j b25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0 cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3Bl cmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAg dHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCiAgICAgICAgICAgICAgICAgICAg c3RydWN0IF9fdHlwZV90cmFpdHM8dW5zaWduZWQgc2hvcnQ+IHsKICAgdHlwZWRlZiBfX3RydWVf dHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90 eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUg aGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBo YXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBl Owp9OwoKICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgX190eXBlX3RyYWl0czxpbnQ+IHsKICAg dHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0 eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVk ZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRl ZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90 eXBlIGlzX1BPRF90eXBlOwp9OwoKICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgX190eXBlX3Ry YWl0czx1bnNpZ25lZCBpbnQ+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9k ZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Nv cHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdu bWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVj dG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKICAgICAgICAgICAg ICAgICAgICBzdHJ1Y3QgX190eXBlX3RyYWl0czxsb25nPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5 cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlw ZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhh c190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFz X3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsK fTsKCiAgICAgICAgICAgICAgICAgICAgc3RydWN0IF9fdHlwZV90cmFpdHM8dW5zaWduZWQgbG9u Zz4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0 b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsK ICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwog ICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYg X190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07CiMgMjEwICIvdXNyL2luY2x1ZGUvZysrLTMvdHlw ZV90cmFpdHMuaCIgMwogICAgICAgICAgICAgICAgICAgIHN0cnVjdCBfX3R5cGVfdHJhaXRzPGZs b2F0PiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1 Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9y OwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7 CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRl ZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCiAgICAgICAgICAgICAgICAgICAgc3RydWN0 IF9fdHlwZV90cmFpdHM8ZG91YmxlPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZp YWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlh bF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fz c2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVz dHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCiAgICAgICAg ICAgICAgICAgICAgc3RydWN0IF9fdHlwZV90cmFpdHM8bG9uZyBkb3VibGU+IHsKICAgdHlwZWRl ZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVm IF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190 cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3Ry dWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlz X1BPRF90eXBlOwp9OwojIDI0NyAiL3Vzci9pbmNsdWRlL2crKy0zL3R5cGVfdHJhaXRzLmgiIDMK ICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgX190eXBlX3RyYWl0czxjaGFyKj4gewogICB0eXBl ZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVk ZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBf X3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9f dHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUg aXNfUE9EX3R5cGU7Cn07CgogICAgICAgICAgICAgICAgICAgIHN0cnVjdCBfX3R5cGVfdHJhaXRz PHNpZ25lZCBjaGFyKj4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1 bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9j b25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50 X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7 CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07CgogICAgICAgICAgICAgICAg ICAgIHN0cnVjdCBfX3R5cGVfdHJhaXRzPHVuc2lnbmVkIGNoYXIqPiB7CiAgIHR5cGVkZWYgX190 cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3Ry dWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90 eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5 cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0Rf dHlwZTsKfTsKCiAgICAgICAgICAgICAgICAgICAgc3RydWN0IF9fdHlwZV90cmFpdHM8Y29uc3Qg Y2hhcio+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0 cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0 b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRv cjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBl ZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKICAgICAgICAgICAgICAgICAgICBzdHJ1 Y3QgX190eXBlX3RyYWl0czxjb25zdCBzaWduZWQgY2hhcio+IHsKICAgdHlwZWRlZiBfX3RydWVf dHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90 eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUg aGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBo YXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBl Owp9OwoKICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgX190eXBlX3RyYWl0czxjb25zdCB1bnNp Z25lZCBjaGFyKj4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRf Y29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25z dHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29w ZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAg IHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07CgoKCgoKCgp0ZW1wbGF0ZSA8Y2xh c3MgX1RwPiBzdHJ1Y3QgX0lzX2ludGVnZXIgewogIHR5cGVkZWYgX19mYWxzZV90eXBlIF9JbnRl Z3JhbDsKfTsKCgoKICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgX0lzX2ludGVnZXI8Ym9vbD4g ewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKCgogICAgICAgICAgICAgICAg ICAgIHN0cnVjdCBfSXNfaW50ZWdlcjxjaGFyPiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50 ZWdyYWw7Cn07CgogICAgICAgICAgICAgICAgICAgIHN0cnVjdCBfSXNfaW50ZWdlcjxzaWduZWQg Y2hhcj4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKICAgICAgICAgICAg ICAgICAgICBzdHJ1Y3QgX0lzX2ludGVnZXI8dW5zaWduZWQgY2hhcj4gewogIHR5cGVkZWYgX190 cnVlX3R5cGUgX0ludGVncmFsOwp9OwojIDMzMyAiL3Vzci9pbmNsdWRlL2crKy0zL3R5cGVfdHJh aXRzLmgiIDMKICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgX0lzX2ludGVnZXI8c2hvcnQ+IHsK ICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCiAgICAgICAgICAgICAgICAgICAg c3RydWN0IF9Jc19pbnRlZ2VyPHVuc2lnbmVkIHNob3J0PiB7CiAgdHlwZWRlZiBfX3RydWVfdHlw ZSBfSW50ZWdyYWw7Cn07CgogICAgICAgICAgICAgICAgICAgIHN0cnVjdCBfSXNfaW50ZWdlcjxp bnQ+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCiAgICAgICAgICAgICAg ICAgICAgc3RydWN0IF9Jc19pbnRlZ2VyPHVuc2lnbmVkIGludD4gewogIHR5cGVkZWYgX190cnVl X3R5cGUgX0ludGVncmFsOwp9OwoKICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgX0lzX2ludGVn ZXI8bG9uZz4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKICAgICAgICAg ICAgICAgICAgICBzdHJ1Y3QgX0lzX2ludGVnZXI8dW5zaWduZWQgbG9uZz4gewogIHR5cGVkZWYg X190cnVlX3R5cGUgX0ludGVncmFsOwp9OwojIDQ2ICIvdXNyL2luY2x1ZGUvZysrLTMvc3RsX2Fs Z29iYXNlLmgiIDIgMwoKCiMgMSAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAxIDMKIyA0OSAiL3Vz ci9pbmNsdWRlL2crKy0zL3N0bF9hbGdvYmFzZS5oIiAyIDMKIyAxICIvdXNyL2xpYi9nY2MtbGli L2k1ODYtbWFuZHJha2UtbGludXgtZ251LzIuOTYvaW5jbHVkZS9saW1pdHMuaCIgMSAzCiMgMTEg Ii91c3IvbGliL2djYy1saWIvaTU4Ni1tYW5kcmFrZS1saW51eC1nbnUvMi45Ni9pbmNsdWRlL2xp bWl0cy5oIiAzCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxpbnV4LWdudS8y Ljk2L2luY2x1ZGUvc3lzbGltaXRzLmgiIDEgMwoKCgoKCgojIDEgIi91c3IvbGliL2djYy1saWIv aTU4Ni1tYW5kcmFrZS1saW51eC1nbnUvMi45Ni9pbmNsdWRlL2xpbWl0cy5oIiAxIDMKIyAxMzAg Ii91c3IvbGliL2djYy1saWIvaTU4Ni1tYW5kcmFrZS1saW51eC1nbnUvMi45Ni9pbmNsdWRlL2xp bWl0cy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2xpbWl0cy5oIiAxIDMKIyAyNiAiL3Vzci9pbmNs dWRlL2xpbWl0cy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDEgMwojIDI3ICIv dXNyL2luY2x1ZGUvbGltaXRzLmgiIDIgMwojIDQ1ICIvdXNyL2luY2x1ZGUvbGltaXRzLmgiIDMK IyAxICIvdXNyL2luY2x1ZGUvYml0cy93b3Jkc2l6ZS5oIiAxIDMKIyA0NiAiL3Vzci9pbmNsdWRl L2xpbWl0cy5oIiAyIDMKIyAxNDQgIi91c3IvaW5jbHVkZS9saW1pdHMuaCIgMwojIDEgIi91c3Iv aW5jbHVkZS9iaXRzL3Bvc2l4MV9saW0uaCIgMSAzCiMgMTI2ICIvdXNyL2luY2x1ZGUvYml0cy9w b3NpeDFfbGltLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9sb2NhbF9saW0uaCIgMSAzCiMg MzYgIi91c3IvaW5jbHVkZS9iaXRzL2xvY2FsX2xpbS5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2xp bnV4L2xpbWl0cy5oIiAxIDMKIyAzNyAiL3Vzci9pbmNsdWRlL2JpdHMvbG9jYWxfbGltLmgiIDIg MwojIDEyNyAiL3Vzci9pbmNsdWRlL2JpdHMvcG9zaXgxX2xpbS5oIiAyIDMKIyAxNDUgIi91c3Iv aW5jbHVkZS9saW1pdHMuaCIgMiAzCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvcG9zaXgyX2xp bS5oIiAxIDMKIyAxNDkgIi91c3IvaW5jbHVkZS9saW1pdHMuaCIgMiAzCiMgMTMxICIvdXNyL2xp Yi9nY2MtbGliL2k1ODYtbWFuZHJha2UtbGludXgtZ251LzIuOTYvaW5jbHVkZS9saW1pdHMuaCIg MiAzCiMgOCAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxpbnV4LWdudS8yLjk2L2lu Y2x1ZGUvc3lzbGltaXRzLmgiIDIgMwojIDEyICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtbWFuZHJh a2UtbGludXgtZ251LzIuOTYvaW5jbHVkZS9saW1pdHMuaCIgMiAzCiMgNTAgIi91c3IvaW5jbHVk ZS9nKystMy9zdGxfYWxnb2Jhc2UuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAx IDMKIyA1MSAiL3Vzci9pbmNsdWRlL2crKy0zL3N0bF9hbGdvYmFzZS5oIiAyIDMKIyAxICIvdXNy L2xpYi9nY2MtbGliL2k1ODYtbWFuZHJha2UtbGludXgtZ251LzIuOTYvaW5jbHVkZS9zdGRkZWYu aCIgMSAzCiMgNTIgIi91c3IvaW5jbHVkZS9nKystMy9zdGxfYWxnb2Jhc2UuaCIgMiAzCiMgMSAi L3Vzci9saWIvZ2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxpbnV4LWdudS8yLjk2L2luY2x1ZGUvbmV3 LmgiIDEgMwojIDMzICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtbWFuZHJha2UtbGludXgtZ251LzIu OTYvaW5jbHVkZS9uZXcuaCIgMwojIDEgIi91c3IvbGliL2djYy1saWIvaTU4Ni1tYW5kcmFrZS1s aW51eC1nbnUvMi45Ni9pbmNsdWRlL25ldyIgMSAzCiMgMzMgIi91c3IvbGliL2djYy1saWIvaTU4 Ni1tYW5kcmFrZS1saW51eC1nbnUvMi45Ni9pbmNsdWRlL25ldyIgMwojcHJhZ21hIGludGVyZmFj ZSAibmV3IgojIDEgIi91c3IvbGliL2djYy1saWIvaTU4Ni1tYW5kcmFrZS1saW51eC1nbnUvMi45 Ni9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAzNSAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LW1hbmRy YWtlLWxpbnV4LWdudS8yLjk2L2luY2x1ZGUvbmV3IiAyIDMKIyAxICIvdXNyL2xpYi9nY2MtbGli L2k1ODYtbWFuZHJha2UtbGludXgtZ251LzIuOTYvaW5jbHVkZS9leGNlcHRpb24iIDEgMwojIDMz ICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtbWFuZHJha2UtbGludXgtZ251LzIuOTYvaW5jbHVkZS9l eGNlcHRpb24iIDMKI3ByYWdtYSBpbnRlcmZhY2UgImV4Y2VwdGlvbiIKCmV4dGVybiAiQysrIiB7 CgpuYW1lc3BhY2Ugc3RkIHsKCmNsYXNzIGV4Y2VwdGlvbiB7CnB1YmxpYzoKICBleGNlcHRpb24g KCkgeyB9CiAgdmlydHVhbCB+ZXhjZXB0aW9uICgpIHsgfQogIHZpcnR1YWwgY29uc3QgY2hhciog d2hhdCAoKSBjb25zdDsKfTsKCmNsYXNzIGJhZF9leGNlcHRpb24gOiBwdWJsaWMgZXhjZXB0aW9u IHsKcHVibGljOgogIGJhZF9leGNlcHRpb24gKCkgeyB9CiAgdmlydHVhbCB+YmFkX2V4Y2VwdGlv biAoKSB7IH0KfTsKCnR5cGVkZWYgdm9pZCAoKnRlcm1pbmF0ZV9oYW5kbGVyKSAoKTsKdHlwZWRl ZiB2b2lkICgqdW5leHBlY3RlZF9oYW5kbGVyKSAoKTsKCnRlcm1pbmF0ZV9oYW5kbGVyIHNldF90 ZXJtaW5hdGUgKHRlcm1pbmF0ZV9oYW5kbGVyKTsKdm9pZCB0ZXJtaW5hdGUgKCkgOwp1bmV4cGVj dGVkX2hhbmRsZXIgc2V0X3VuZXhwZWN0ZWQgKHVuZXhwZWN0ZWRfaGFuZGxlcik7CnZvaWQgdW5l eHBlY3RlZCAoKSA7CmJvb2wgdW5jYXVnaHRfZXhjZXB0aW9uICgpOwoKfQoKfQojIDM2ICIvdXNy L2xpYi9nY2MtbGliL2k1ODYtbWFuZHJha2UtbGludXgtZ251LzIuOTYvaW5jbHVkZS9uZXciIDIg MwoKZXh0ZXJuICJDKysiIHsKCm5hbWVzcGFjZSBzdGQgewoKICBjbGFzcyBiYWRfYWxsb2MgOiBw dWJsaWMgZXhjZXB0aW9uIHsKICBwdWJsaWM6CiAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHdoYXQo KSBjb25zdCB0aHJvdygpIHsgcmV0dXJuICJiYWRfYWxsb2MiOyB9CiAgfTsKCiAgc3RydWN0IG5v dGhyb3dfdCB7fTsKICBleHRlcm4gY29uc3Qgbm90aHJvd190IG5vdGhyb3c7CiAgdHlwZWRlZiB2 b2lkICgqbmV3X2hhbmRsZXIpKCk7CiAgbmV3X2hhbmRsZXIgc2V0X25ld19oYW5kbGVyIChuZXdf aGFuZGxlcik7Cgp9CgoKdm9pZCAqb3BlcmF0b3IgbmV3IChzaXplX3QpIHRocm93IChzdGQ6OmJh ZF9hbGxvYyk7CnZvaWQgKm9wZXJhdG9yIG5ld1tdIChzaXplX3QpIHRocm93IChzdGQ6OmJhZF9h bGxvYyk7CnZvaWQgb3BlcmF0b3IgZGVsZXRlICh2b2lkICopIHRocm93KCk7CnZvaWQgb3BlcmF0 b3IgZGVsZXRlW10gKHZvaWQgKikgdGhyb3coKTsKdm9pZCAqb3BlcmF0b3IgbmV3IChzaXplX3Qs IGNvbnN0IHN0ZDo6bm90aHJvd190JikgdGhyb3coKTsKdm9pZCAqb3BlcmF0b3IgbmV3W10gKHNp emVfdCwgY29uc3Qgc3RkOjpub3Rocm93X3QmKSB0aHJvdygpOwp2b2lkIG9wZXJhdG9yIGRlbGV0 ZSAodm9pZCAqLCBjb25zdCBzdGQ6Om5vdGhyb3dfdCYpIHRocm93KCk7CnZvaWQgb3BlcmF0b3Ig ZGVsZXRlW10gKHZvaWQgKiwgY29uc3Qgc3RkOjpub3Rocm93X3QmKSB0aHJvdygpOwoKCmlubGlu ZSB2b2lkICpvcGVyYXRvciBuZXcoc2l6ZV90LCB2b2lkICpwbGFjZSkgdGhyb3coKSB7IHJldHVy biBwbGFjZTsgfQppbmxpbmUgdm9pZCAqb3BlcmF0b3IgbmV3W10oc2l6ZV90LCB2b2lkICpwbGFj ZSkgdGhyb3coKSB7IHJldHVybiBwbGFjZTsgfQp9CiMgMzQgIi91c3IvbGliL2djYy1saWIvaTU4 Ni1tYW5kcmFrZS1saW51eC1nbnUvMi45Ni9pbmNsdWRlL25ldy5oIiAyIDMKCnVzaW5nIHN0ZDo6 bmV3X2hhbmRsZXI7CnVzaW5nIHN0ZDo6c2V0X25ld19oYW5kbGVyOwojIDUzICIvdXNyL2luY2x1 ZGUvZysrLTMvc3RsX2FsZ29iYXNlLmgiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9nKystMy9pb3N0 cmVhbS5oIiAxIDMKIyA1NCAiL3Vzci9pbmNsdWRlL2crKy0zL3N0bF9hbGdvYmFzZS5oIiAyIDMK IyA2MyAiL3Vzci9pbmNsdWRlL2crKy0zL3N0bF9hbGdvYmFzZS5oIiAzCnRlbXBsYXRlIDxjbGFz cyBfRm9yd2FyZEl0ZXIxLCBjbGFzcyBfRm9yd2FyZEl0ZXIyLCBjbGFzcyBfVHA+CmlubGluZSB2 b2lkIF9faXRlcl9zd2FwKF9Gb3J3YXJkSXRlcjEgX19hLCBfRm9yd2FyZEl0ZXIyIF9fYiwgX1Rw KikgewogIF9UcCBfX3RtcCA9ICpfX2E7CiAgKl9fYSA9ICpfX2I7CiAgKl9fYiA9IF9fdG1wOwp9 Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyMSwgY2xhc3MgX0ZvcndhcmRJdGVyMj4KaW5s aW5lIHZvaWQgaXRlcl9zd2FwKF9Gb3J3YXJkSXRlcjEgX19hLCBfRm9yd2FyZEl0ZXIyIF9fYikg ewogIF9faXRlcl9zd2FwKF9fYSwgX19iLCB2YWx1ZV90eXBlKF9fYSkpOwp9Cgp0ZW1wbGF0ZSA8 Y2xhc3MgX1RwPgppbmxpbmUgdm9pZCBzd2FwKF9UcCYgX19hLCBfVHAmIF9fYikgewogIF9UcCBf X3RtcCA9IF9fYTsKICBfX2EgPSBfX2I7CiAgX19iID0gX190bXA7Cn0KIyA5MCAiL3Vzci9pbmNs dWRlL2crKy0zL3N0bF9hbGdvYmFzZS5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfVHA+CmlubGluZSBj b25zdCBfVHAmIG1pbihjb25zdCBfVHAmIF9fYSwgY29uc3QgX1RwJiBfX2IpIHsKICByZXR1cm4g X19iIDwgX19hID8gX19iIDogX19hOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgppbmxpbmUgY29u c3QgX1RwJiBtYXgoY29uc3QgX1RwJiBfX2EsIGNvbnN0IF9UcCYgX19iKSB7CiAgcmV0dXJuIF9f YSA8IF9fYiA/IF9fYiA6IF9fYTsKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQ29t cGFyZT4KaW5saW5lIGNvbnN0IF9UcCYgbWluKGNvbnN0IF9UcCYgX19hLCBjb25zdCBfVHAmIF9f YiwgX0NvbXBhcmUgX19jb21wKSB7CiAgcmV0dXJuIF9fY29tcChfX2IsIF9fYSkgPyBfX2IgOiBf X2E7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlPgppbmxpbmUgY29uc3Qg X1RwJiBtYXgoY29uc3QgX1RwJiBfX2EsIGNvbnN0IF9UcCYgX19iLCBfQ29tcGFyZSBfX2NvbXAp IHsKICByZXR1cm4gX19jb21wKF9fYSwgX19iKSA/IF9fYiA6IF9fYTsKfQojIDEyMyAiL3Vzci9p bmNsdWRlL2crKy0zL3N0bF9hbGdvYmFzZS5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVy LCBjbGFzcyBfT3V0cHV0SXRlciwgY2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUgX091dHB1dEl0ZXIg X19jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgaW5wdXRfaXRlcmF0b3JfdGFnLCBfRGlzdGFuY2UqKQp7CiAgZm9yICggOyBfX2ZpcnN0 ICE9IF9fbGFzdDsgKytfX3Jlc3VsdCwgKytfX2ZpcnN0KQogICAgKl9fcmVzdWx0ID0gKl9fZmly c3Q7CiAgcmV0dXJuIF9fcmVzdWx0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0 ZXIsIGNsYXNzIF9PdXRwdXRJdGVyLCBjbGFzcyBfRGlzdGFuY2U+CmlubGluZSBfT3V0cHV0SXRl cgpfX2NvcHkoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19s YXN0LAogICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3Jf dGFnLCBfRGlzdGFuY2UqKQp7CiAgZm9yIChfRGlzdGFuY2UgX19uID0gX19sYXN0IC0gX19maXJz dDsgX19uID4gMDsgLS1fX24pIHsKICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0OwogICAgKytfX2Zp cnN0OwogICAgKytfX3Jlc3VsdDsKICB9CiAgcmV0dXJuIF9fcmVzdWx0Owp9Cgp0ZW1wbGF0ZSA8 Y2xhc3MgX1RwPgppbmxpbmUgX1RwKgpfX2NvcHlfdHJpdmlhbChjb25zdCBfVHAqIF9fZmlyc3Qs IGNvbnN0IF9UcCogX19sYXN0LCBfVHAqIF9fcmVzdWx0KSB7CiAgbWVtbW92ZShfX3Jlc3VsdCwg X19maXJzdCwgc2l6ZW9mKF9UcCkgKiAoX19sYXN0IC0gX19maXJzdCkpOwogIHJldHVybiBfX3Jl c3VsdCArIChfX2xhc3QgLSBfX2ZpcnN0KTsKfQojIDE5MyAiL3Vzci9pbmNsdWRlL2crKy0zL3N0 bF9hbGdvYmFzZS5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfT3V0cHV0 SXRlcj4KaW5saW5lIF9PdXRwdXRJdGVyIGNvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJ dGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQp CnsKICByZXR1cm4gX19jb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQsCiAgICAgICAgICAg ICAgICBpdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSwKICAgICAgICAgICAgICAgIGRpc3RhbmNl X3R5cGUoX19maXJzdCkpOwp9CgppbmxpbmUgY2hhciogY29weShjb25zdCBjaGFyKiBfX2ZpcnN0 LCBjb25zdCBjaGFyKiBfX2xhc3QsIGNoYXIqIF9fcmVzdWx0KSB7CiAgbWVtbW92ZShfX3Jlc3Vs dCwgX19maXJzdCwgX19sYXN0IC0gX19maXJzdCk7CiAgcmV0dXJuIF9fcmVzdWx0ICsgKF9fbGFz dCAtIF9fZmlyc3QpOwp9CgppbmxpbmUgd2NoYXJfdCogY29weShjb25zdCB3Y2hhcl90KiBfX2Zp cnN0LCBjb25zdCB3Y2hhcl90KiBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3Qq IF9fcmVzdWx0KSB7CiAgbWVtbW92ZShfX3Jlc3VsdCwgX19maXJzdCwgc2l6ZW9mKHdjaGFyX3Qp ICogKF9fbGFzdCAtIF9fZmlyc3QpKTsKICByZXR1cm4gX19yZXN1bHQgKyAoX19sYXN0IC0gX19m aXJzdCk7Cn0KCgoKCgoKdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlcjEsIGNsYXNz IF9CaWRpcmVjdGlvbmFsSXRlcjIsCiAgICAgICAgICBjbGFzcyBfRGlzdGFuY2U+CmlubGluZSBf QmlkaXJlY3Rpb25hbEl0ZXIyIF9fY29weV9iYWNrd2FyZChfQmlkaXJlY3Rpb25hbEl0ZXIxIF9f Zmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJl Y3Rpb25hbEl0ZXIxIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZywKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSopCnsKICB3aGls ZSAoX19maXJzdCAhPSBfX2xhc3QpCiAgICAqLS1fX3Jlc3VsdCA9ICotLV9fbGFzdDsKICByZXR1 cm4gX19yZXN1bHQ7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3Mg X0JpZGlyZWN0aW9uYWxJdGVyLCBjbGFzcyBfRGlzdGFuY2U+CmlubGluZSBfQmlkaXJlY3Rpb25h bEl0ZXIgX19jb3B5X2JhY2t3YXJkKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFz dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9u YWxJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZywKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgX0Rpc3RhbmNlKikKewogIGZvciAoX0Rpc3RhbmNlIF9fbiA9IF9fbGFz dCAtIF9fZmlyc3Q7IF9fbiA+IDA7IC0tX19uKQogICAgKi0tX19yZXN1bHQgPSAqLS1fX2xhc3Q7 CiAgcmV0dXJuIF9fcmVzdWx0Owp9CiMgMjk2ICIvdXNyL2luY2x1ZGUvZysrLTMvc3RsX2FsZ29i YXNlLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9CSTEsIGNsYXNzIF9CSTI+CmlubGluZSBfQkkyIGNv cHlfYmFja3dhcmQoX0JJMSBfX2ZpcnN0LCBfQkkxIF9fbGFzdCwgX0JJMiBfX3Jlc3VsdCkgewog IHJldHVybiBfX2NvcHlfYmFja3dhcmQoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwKICAgICAg ICAgICAgICAgICAgICAgICAgIGl0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpLAogICAgICAgICAg ICAgICAgICAgICAgICAgZGlzdGFuY2VfdHlwZShfX2ZpcnN0KSk7Cn0KCgoKCgoKdGVtcGxhdGUg PGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9TaXplLCBjbGFzcyBfT3V0cHV0SXRlcj4KcGFpcjxf SW5wdXRJdGVyLCBfT3V0cHV0SXRlcj4gX19jb3B5X24oX0lucHV0SXRlciBfX2ZpcnN0LCBfU2l6 ZSBfX2NvdW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0 SXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5w dXRfaXRlcmF0b3JfdGFnKSB7CiAgZm9yICggOyBfX2NvdW50ID4gMDsgLS1fX2NvdW50KSB7CiAg ICAqX19yZXN1bHQgPSAqX19maXJzdDsKICAgICsrX19maXJzdDsKICAgICsrX19yZXN1bHQ7CiAg fQogIHJldHVybiBwYWlyPF9JbnB1dEl0ZXIsIF9PdXRwdXRJdGVyPihfX2ZpcnN0LCBfX3Jlc3Vs dCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUkFJdGVyLCBjbGFzcyBfU2l6ZSwgY2xhc3MgX091dHB1 dEl0ZXI+CmlubGluZSBwYWlyPF9SQUl0ZXIsIF9PdXRwdXRJdGVyPgpfX2NvcHlfbihfUkFJdGVy IF9fZmlyc3QsIF9TaXplIF9fY291bnQsCiAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LAog ICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykgewogIF9SQUl0ZXIgX19sYXN0ID0g X19maXJzdCArIF9fY291bnQ7CiAgcmV0dXJuIHBhaXI8X1JBSXRlciwgX091dHB1dEl0ZXI+KF9f bGFzdCwgY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KSk7Cn0KCnRlbXBsYXRlIDxjbGFz cyBfSW5wdXRJdGVyLCBjbGFzcyBfU2l6ZSwgY2xhc3MgX091dHB1dEl0ZXI+CmlubGluZSBwYWly PF9JbnB1dEl0ZXIsIF9PdXRwdXRJdGVyPgpfX2NvcHlfbihfSW5wdXRJdGVyIF9fZmlyc3QsIF9T aXplIF9fY291bnQsIF9PdXRwdXRJdGVyIF9fcmVzdWx0KSB7CiAgcmV0dXJuIF9fY29weV9uKF9f Zmlyc3QsIF9fY291bnQsIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICBpdGVyYXRvcl9jYXRl Z29yeShfX2ZpcnN0KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfU2l6 ZSwgY2xhc3MgX091dHB1dEl0ZXI+CmlubGluZSBwYWlyPF9JbnB1dEl0ZXIsIF9PdXRwdXRJdGVy Pgpjb3B5X24oX0lucHV0SXRlciBfX2ZpcnN0LCBfU2l6ZSBfX2NvdW50LCBfT3V0cHV0SXRlciBf X3Jlc3VsdCkgewogIHJldHVybiBfX2NvcHlfbihfX2ZpcnN0LCBfX2NvdW50LCBfX3Jlc3VsdCk7 Cn0KCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHA+CnZvaWQgZmls bChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwgY29uc3QgX1RwJiBf X3ZhbHVlKSB7CiAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgKl9f Zmlyc3QgPSBfX3ZhbHVlOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX091dHB1dEl0ZXIsIGNsYXNzIF9T aXplLCBjbGFzcyBfVHA+Cl9PdXRwdXRJdGVyIGZpbGxfbihfT3V0cHV0SXRlciBfX2ZpcnN0LCBf U2l6ZSBfX24sIGNvbnN0IF9UcCYgX192YWx1ZSkgewogIGZvciAoIDsgX19uID4gMDsgLS1fX24s ICsrX19maXJzdCkKICAgICpfX2ZpcnN0ID0gX192YWx1ZTsKICByZXR1cm4gX19maXJzdDsKfQoK CgoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMj4KcGFpcjxf SW5wdXRJdGVyMSwgX0lucHV0SXRlcjI+IG1pc21hdGNoKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjEgX19sYXN0 MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9f Zmlyc3QyKSB7CiAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgKl9fZmlyc3QxID09ICpf X2ZpcnN0MikgewogICAgKytfX2ZpcnN0MTsKICAgICsrX19maXJzdDI7CiAgfQogIHJldHVybiBw YWlyPF9JbnB1dEl0ZXIxLCBfSW5wdXRJdGVyMj4oX19maXJzdDEsIF9fZmlyc3QyKTsKfQoKdGVt cGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMiwgY2xhc3MgX0JpbmFy eVByZWRpY2F0ZT4KcGFpcjxfSW5wdXRJdGVyMSwgX0lucHV0SXRlcjI+IG1pc21hdGNoKF9JbnB1 dEl0ZXIxIF9fZmlyc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg X0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2JpbmFyeV9wcmVkKSB7CiAgd2hpbGUgKF9fZmly c3QxICE9IF9fbGFzdDEgJiYgX19iaW5hcnlfcHJlZCgqX19maXJzdDEsICpfX2ZpcnN0MikpIHsK ICAgICsrX19maXJzdDE7CiAgICArK19fZmlyc3QyOwogIH0KICByZXR1cm4gcGFpcjxfSW5wdXRJ dGVyMSwgX0lucHV0SXRlcjI+KF9fZmlyc3QxLCBfX2ZpcnN0Mik7Cn0KCnRlbXBsYXRlIDxjbGFz cyBfSW5wdXRJdGVyMSwgY2xhc3MgX0lucHV0SXRlcjI+CmlubGluZSBib29sIGVxdWFsKF9JbnB1 dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICBf SW5wdXRJdGVyMiBfX2ZpcnN0MikgewogIGZvciAoIDsgX19maXJzdDEgIT0gX19sYXN0MTsgKytf X2ZpcnN0MSwgKytfX2ZpcnN0MikKICAgIGlmICgqX19maXJzdDEgIT0gKl9fZmlyc3QyKQogICAg ICByZXR1cm4gZmFsc2U7CiAgcmV0dXJuIHRydWU7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJ dGVyMSwgY2xhc3MgX0lucHV0SXRlcjIsIGNsYXNzIF9CaW5hcnlQcmVkaWNhdGU+CmlubGluZSBi b29sIGVxdWFsKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAg ICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0JpbmFyeVByZWRpY2F0ZSBfX2Jp bmFyeV9wcmVkKSB7CiAgZm9yICggOyBfX2ZpcnN0MSAhPSBfX2xhc3QxOyArK19fZmlyc3QxLCAr K19fZmlyc3QyKQogICAgaWYgKCFfX2JpbmFyeV9wcmVkKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkK ICAgICAgcmV0dXJuIGZhbHNlOwogIHJldHVybiB0cnVlOwp9CgoKCgoKdGVtcGxhdGUgPGNsYXNz IF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMj4KYm9vbCBsZXhpY29ncmFwaGljYWxfY29t cGFyZShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19s YXN0MikgewogIGZvciAoIDsgX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xh c3QyCiAgICAgICAgOyArK19fZmlyc3QxLCArK19fZmlyc3QyKSB7CiAgICBpZiAoKl9fZmlyc3Qx IDwgKl9fZmlyc3QyKQogICAgICByZXR1cm4gdHJ1ZTsKICAgIGlmICgqX19maXJzdDIgPCAqX19m aXJzdDEpCiAgICAgIHJldHVybiBmYWxzZTsKICB9CiAgcmV0dXJuIF9fZmlyc3QxID09IF9fbGFz dDEgJiYgX19maXJzdDIgIT0gX19sYXN0MjsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIx LCBjbGFzcyBfSW5wdXRJdGVyMiwgY2xhc3MgX0NvbXBhcmU+CmJvb2wgbGV4aWNvZ3JhcGhpY2Fs X2NvbXBhcmUoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIy IF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKSB7 CiAgZm9yICggOyBfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIKICAg ICAgICA7ICsrX19maXJzdDEsICsrX19maXJzdDIpIHsKICAgIGlmIChfX2NvbXAoKl9fZmlyc3Qx LCAqX19maXJzdDIpKQogICAgICByZXR1cm4gdHJ1ZTsKICAgIGlmIChfX2NvbXAoKl9fZmlyc3Qy LCAqX19maXJzdDEpKQogICAgICByZXR1cm4gZmFsc2U7CiAgfQogIHJldHVybiBfX2ZpcnN0MSA9 PSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDI7Cn0KCmlubGluZSBib29sCmxleGljb2dy YXBoaWNhbF9jb21wYXJlKGNvbnN0IHVuc2lnbmVkIGNoYXIqIF9fZmlyc3QxLAogICAgICAgICAg ICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBfX2xhc3QxLAogICAgICAgICAgICAg ICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBfX2ZpcnN0MiwKICAgICAgICAgICAgICAg ICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciogX19sYXN0MikKewogIGNvbnN0IHNpemVfdCBf X2xlbjEgPSBfX2xhc3QxIC0gX19maXJzdDE7CiAgY29uc3Qgc2l6ZV90IF9fbGVuMiA9IF9fbGFz dDIgLSBfX2ZpcnN0MjsKICBjb25zdCBpbnQgX19yZXN1bHQgPSBtZW1jbXAoX19maXJzdDEsIF9f Zmlyc3QyLCBtaW4oX19sZW4xLCBfX2xlbjIpKTsKICByZXR1cm4gX19yZXN1bHQgIT0gMCA/IF9f cmVzdWx0IDwgMCA6IF9fbGVuMSA8IF9fbGVuMjsKfQoKaW5saW5lIGJvb2wgbGV4aWNvZ3JhcGhp Y2FsX2NvbXBhcmUoY29uc3QgY2hhciogX19maXJzdDEsIGNvbnN0IGNoYXIqIF9fbGFzdDEsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIF9fZmlyc3QyLCBj b25zdCBjaGFyKiBfX2xhc3QyKQp7CgogIHJldHVybiBsZXhpY29ncmFwaGljYWxfY29tcGFyZSgo Y29uc3Qgc2lnbmVkIGNoYXIqKSBfX2ZpcnN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKGNvbnN0IHNpZ25lZCBjaGFyKikgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKGNvbnN0IHNpZ25lZCBjaGFyKikgX19maXJzdDIsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIChjb25zdCBzaWduZWQgY2hhciopIF9fbGFzdDIpOwoKCgoKCgp9 Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyPgppbnQgX19s ZXhpY29ncmFwaGljYWxfY29tcGFyZV8zd2F5KF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJ dGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0 ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyKQp7CiAgd2hpbGUgKF9fZmlyc3QxICE9 IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikgewogICAgaWYgKCpfX2ZpcnN0MSA8ICpf X2ZpcnN0MikKICAgICAgcmV0dXJuIC0xOwogICAgaWYgKCpfX2ZpcnN0MiA8ICpfX2ZpcnN0MSkK ICAgICAgcmV0dXJuIDE7CiAgICArK19fZmlyc3QxOwogICAgKytfX2ZpcnN0MjsKICB9CiAgaWYg KF9fZmlyc3QyID09IF9fbGFzdDIpIHsKICAgIHJldHVybiAhKF9fZmlyc3QxID09IF9fbGFzdDEp OwogIH0KICBlbHNlIHsKICAgIHJldHVybiAtMTsKICB9Cn0KCmlubGluZSBpbnQKX19sZXhpY29n cmFwaGljYWxfY29tcGFyZV8zd2F5KGNvbnN0IHVuc2lnbmVkIGNoYXIqIF9fZmlyc3QxLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciogX19sYXN0MSwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIF9fZmly c3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciog X19sYXN0MikKewogIGNvbnN0IHB0cmRpZmZfdCBfX2xlbjEgPSBfX2xhc3QxIC0gX19maXJzdDE7 CiAgY29uc3QgcHRyZGlmZl90IF9fbGVuMiA9IF9fbGFzdDIgLSBfX2ZpcnN0MjsKICBjb25zdCBp bnQgX19yZXN1bHQgPSBtZW1jbXAoX19maXJzdDEsIF9fZmlyc3QyLCBtaW4oX19sZW4xLCBfX2xl bjIpKTsKICByZXR1cm4gX19yZXN1bHQgIT0gMCA/IF9fcmVzdWx0CiAgICAgICAgICAgICAgICAg ICAgICAgOiAoX19sZW4xID09IF9fbGVuMiA/IDAgOiAoX19sZW4xIDwgX19sZW4yID8gLTEgOiAx KSk7Cn0KCmlubGluZSBpbnQKX19sZXhpY29ncmFwaGljYWxfY29tcGFyZV8zd2F5KGNvbnN0IGNo YXIqIF9fZmlyc3QxLCBjb25zdCBjaGFyKiBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY29uc3QgY2hhciogX19maXJzdDIsIGNvbnN0IGNoYXIqIF9fbGFzdDIpCnsKCiAg cmV0dXJuIF9fbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmVfM3dheSgKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAoY29uc3Qgc2lnbmVkIGNoYXIqKSBfX2ZpcnN0MSwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAoY29uc3Qgc2lnbmVkIGNoYXIqKSBfX2xhc3QxLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBzaWduZWQgY2hhciopIF9fZmlyc3QyLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBzaWduZWQgY2hhciopIF9fbGFz dDIpOwoKCgoKCgp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0 ZXIyPgppbnQgbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmVfM3dheShfSW5wdXRJdGVyMSBfX2ZpcnN0 MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg X0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIpCnsKICByZXR1cm4gX19s ZXhpY29ncmFwaGljYWxfY29tcGFyZV8zd2F5KF9fZmlyc3QxLCBfX2xhc3QxLCBfX2ZpcnN0Miwg X19sYXN0Mik7Cn0KIyA1NyAiL3Vzci9pbmNsdWRlL2crKy0zL3N0bF90cmVlLmgiIDIgMwojIDEg Ii91c3IvaW5jbHVkZS9nKystMy9zdGxfYWxsb2MuaCIgMSAzCiMgNTggIi91c3IvaW5jbHVkZS9n KystMy9zdGxfdHJlZS5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvZysrLTMvc3RsX2NvbnN0cnVj dC5oIiAxIDMKIyAzNCAiL3Vzci9pbmNsdWRlL2crKy0zL3N0bF9jb25zdHJ1Y3QuaCIgMwojIDEg Ii91c3IvbGliL2djYy1saWIvaTU4Ni1tYW5kcmFrZS1saW51eC1nbnUvMi45Ni9pbmNsdWRlL25l dy5oIiAxIDMKIyAzNSAiL3Vzci9pbmNsdWRlL2crKy0zL3N0bF9jb25zdHJ1Y3QuaCIgMiAzCgoK CgoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CmlubGluZSB2b2lkIGRlc3Ryb3koX1RwKiBfX3BvaW50 ZXIpIHsKICBfX3BvaW50ZXItPn5fVHAoKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3Mg X1QyPgppbmxpbmUgdm9pZCBjb25zdHJ1Y3QoX1QxKiBfX3AsIGNvbnN0IF9UMiYgX192YWx1ZSkg ewogIG5ldyAoX19wKSBfVDEoX192YWx1ZSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVDE+CmlubGlu ZSB2b2lkIGNvbnN0cnVjdChfVDEqIF9fcCkgewogIG5ldyAoX19wKSBfVDEoKTsKfQoKdGVtcGxh dGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CmlubGluZSB2b2lkCl9fZGVzdHJveV9hdXgoX0Zv cndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwgX19mYWxzZV90 eXBlKQp7CiAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgZGVzdHJv eSgmKl9fZmlyc3QpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4KaW5saW5l IHZvaWQgX19kZXN0cm95X2F1eChfRm9yd2FyZEl0ZXJhdG9yLCBfRm9yd2FyZEl0ZXJhdG9yLCBf X3RydWVfdHlwZSkge30KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yLCBjbGFzcyBf VHA+CmlubGluZSB2b2lkCl9fZGVzdHJveShfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3 YXJkSXRlcmF0b3IgX19sYXN0LCBfVHAqKQp7CiAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5cGVfdHJh aXRzPF9UcD46Omhhc190cml2aWFsX2Rlc3RydWN0b3IKICAgICAgICAgIF9Ucml2aWFsX2Rlc3Ry dWN0b3I7CiAgX19kZXN0cm95X2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9Ucml2aWFsX2Rlc3RydWN0 b3IoKSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgppbmxpbmUgdm9pZCBk ZXN0cm95KF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3Qp IHsKICBfX2Rlc3Ryb3koX19maXJzdCwgX19sYXN0LCB2YWx1ZV90eXBlKF9fZmlyc3QpKTsKfQoK aW5saW5lIHZvaWQgZGVzdHJveShjaGFyKiwgY2hhciopIHt9CmlubGluZSB2b2lkIGRlc3Ryb3ko d2NoYXJfdCosIHdjaGFyX3QqKSB7fQojIDU5ICIvdXNyL2luY2x1ZGUvZysrLTMvc3RsX3RyZWUu aCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2crKy0zL3N0bF9mdW5jdGlvbi5oIiAxIDMKIyAzNiAi L3Vzci9pbmNsdWRlL2crKy0zL3N0bF9mdW5jdGlvbi5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfQXJn LCBjbGFzcyBfUmVzdWx0PgpzdHJ1Y3QgdW5hcnlfZnVuY3Rpb24gewogIHR5cGVkZWYgX0FyZyBh cmd1bWVudF90eXBlOwogIHR5cGVkZWYgX1Jlc3VsdCByZXN1bHRfdHlwZTsKfTsKCnRlbXBsYXRl IDxjbGFzcyBfQXJnMSwgY2xhc3MgX0FyZzIsIGNsYXNzIF9SZXN1bHQ+CnN0cnVjdCBiaW5hcnlf ZnVuY3Rpb24gewogIHR5cGVkZWYgX0FyZzEgZmlyc3RfYXJndW1lbnRfdHlwZTsKICB0eXBlZGVm IF9BcmcyIHNlY29uZF9hcmd1bWVudF90eXBlOwogIHR5cGVkZWYgX1Jlc3VsdCByZXN1bHRfdHlw ZTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBwbHVzIDogcHVibGljIGJpbmFyeV9m dW5jdGlvbjxfVHAsX1RwLF9UcD4gewogIF9UcCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBj b25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194ICsgX195OyB9Cn07Cgp0ZW1wbGF0ZSA8 Y2xhc3MgX1RwPgpzdHJ1Y3QgbWludXMgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAs X1RwPiB7CiAgX1RwIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBj b25zdCB7IHJldHVybiBfX3ggLSBfX3k7IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVj dCBtdWx0aXBsaWVzIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLF9UcD4gewogIF9U cCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1 cm4gX194ICogX195OyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgZGl2aWRlcyA6 IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxfVHA+IHsKICBfVHAgb3BlcmF0b3IoKShj b25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCAvIF9feTsg fQp9OwoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPiBpbmxpbmUgX1RwIGlkZW50aXR5X2VsZW1lbnQo cGx1czxfVHA+KSB7CiAgcmV0dXJuIF9UcCgwKTsKfQp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPiBpbmxp bmUgX1RwIGlkZW50aXR5X2VsZW1lbnQobXVsdGlwbGllczxfVHA+KSB7CiAgcmV0dXJuIF9UcCgx KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IG1vZHVsdXMgOiBwdWJsaWMgYmluYXJ5 X2Z1bmN0aW9uPF9UcCxfVHAsX1RwPgp7CiAgX1RwIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gs IGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggJSBfX3k7IH0KfTsKCnRlbXBsYXRl IDxjbGFzcyBfVHA+CnN0cnVjdCBuZWdhdGUgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X1RwLF9U cD4KewogIF9UcCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194KSBjb25zdCB7IHJldHVybiAtX194 OyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgZXF1YWxfdG8gOiBwdWJsaWMgYmlu YXJ5X2Z1bmN0aW9uPF9UcCxfVHAsYm9vbD4KewogIGJvb2wgb3BlcmF0b3IoKShjb25zdCBfVHAm IF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCA9PSBfX3k7IH0KfTsKCnRl bXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBub3RfZXF1YWxfdG8gOiBwdWJsaWMgYmluYXJ5X2Z1 bmN0aW9uPF9UcCxfVHAsYm9vbD4KewogIGJvb2wgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwg Y29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCAhPSBfX3k7IH0KfTsKCnRlbXBsYXRl IDxjbGFzcyBfVHA+CnN0cnVjdCBncmVhdGVyIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAs X1RwLGJvb2w+CnsKICBib29sIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYg X195KSBjb25zdCB7IHJldHVybiBfX3ggPiBfX3k7IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+ CnN0cnVjdCBsZXNzIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLGJvb2w+CnsKICBi b29sIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJl dHVybiBfX3ggPCBfX3k7IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBncmVhdGVy X2VxdWFsIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLGJvb2w+CnsKICBib29sIG9w ZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBf X3ggPj0gX195OyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgbGVzc19lcXVhbCA6 IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxib29sPgp7CiAgYm9vbCBvcGVyYXRvcigp KGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194IDw9IF9f eTsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IGxvZ2ljYWxfYW5kIDogcHVibGlj IGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLGJvb2w+CnsKICBib29sIG9wZXJhdG9yKCkoY29uc3Qg X1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggJiYgX195OyB9Cn07 Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgbG9naWNhbF9vciA6IHB1YmxpYyBiaW5hcnlf ZnVuY3Rpb248X1RwLF9UcCxib29sPgp7CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194 LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194IHx8IF9feTsgfQp9OwoKdGVtcGxh dGUgPGNsYXNzIF9UcD4Kc3RydWN0IGxvZ2ljYWxfbm90IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9u PF9UcCxib29sPgp7CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194KSBjb25zdCB7IHJl dHVybiAhX194OyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1ByZWRpY2F0ZT4KY2xhc3MgdW5hcnlf bmVnYXRlCiAgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248dHlwZW5hbWUgX1ByZWRpY2F0ZTo6YXJn dW1lbnRfdHlwZSwgYm9vbD4gewpwcm90ZWN0ZWQ6CiAgX1ByZWRpY2F0ZSBfTV9wcmVkOwpwdWJs aWM6CiAgZXhwbGljaXQgdW5hcnlfbmVnYXRlKGNvbnN0IF9QcmVkaWNhdGUmIF9feCkgOiBfTV9w cmVkKF9feCkge30KICBib29sIG9wZXJhdG9yKCkoY29uc3QgdHlwZW5hbWUgX1ByZWRpY2F0ZTo6 YXJndW1lbnRfdHlwZSYgX194KSBjb25zdCB7CiAgICByZXR1cm4gIV9NX3ByZWQoX194KTsKICB9 Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1ByZWRpY2F0ZT4KaW5saW5lIHVuYXJ5X25lZ2F0ZTxfUHJl ZGljYXRlPgpub3QxKGNvbnN0IF9QcmVkaWNhdGUmIF9fcHJlZCkKewogIHJldHVybiB1bmFyeV9u ZWdhdGU8X1ByZWRpY2F0ZT4oX19wcmVkKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9QcmVkaWNhdGU+ CmNsYXNzIGJpbmFyeV9uZWdhdGUKICA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248dHlwZW5hbWUg X1ByZWRpY2F0ZTo6Zmlyc3RfYXJndW1lbnRfdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgdHlwZW5hbWUgX1ByZWRpY2F0ZTo6c2Vjb25kX2FyZ3VtZW50X3R5cGUsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgIGJvb2w+IHsKcHJvdGVjdGVkOgogIF9QcmVkaWNhdGUgX01fcHJlZDsK cHVibGljOgogIGV4cGxpY2l0IGJpbmFyeV9uZWdhdGUoY29uc3QgX1ByZWRpY2F0ZSYgX194KSA6 IF9NX3ByZWQoX194KSB7fQogIGJvb2wgb3BlcmF0b3IoKShjb25zdCB0eXBlbmFtZSBfUHJlZGlj YXRlOjpmaXJzdF9hcmd1bWVudF90eXBlJiBfX3gsCiAgICAgICAgICAgICAgICAgIGNvbnN0IHR5 cGVuYW1lIF9QcmVkaWNhdGU6OnNlY29uZF9hcmd1bWVudF90eXBlJiBfX3kpIGNvbnN0CiAgewog ICAgcmV0dXJuICFfTV9wcmVkKF9feCwgX195KTsKICB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1By ZWRpY2F0ZT4KaW5saW5lIGJpbmFyeV9uZWdhdGU8X1ByZWRpY2F0ZT4Kbm90Mihjb25zdCBfUHJl ZGljYXRlJiBfX3ByZWQpCnsKICByZXR1cm4gYmluYXJ5X25lZ2F0ZTxfUHJlZGljYXRlPihfX3By ZWQpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX09wZXJhdGlvbj4KY2xhc3MgYmluZGVyMXN0CiAgOiBw dWJsaWMgdW5hcnlfZnVuY3Rpb248dHlwZW5hbWUgX09wZXJhdGlvbjo6c2Vjb25kX2FyZ3VtZW50 X3R5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgX09wZXJhdGlvbjo6cmVz dWx0X3R5cGU+IHsKcHJvdGVjdGVkOgogIF9PcGVyYXRpb24gb3A7CiAgdHlwZW5hbWUgX09wZXJh dGlvbjo6Zmlyc3RfYXJndW1lbnRfdHlwZSB2YWx1ZTsKcHVibGljOgogIGJpbmRlcjFzdChjb25z dCBfT3BlcmF0aW9uJiBfX3gsCiAgICAgICAgICAgIGNvbnN0IHR5cGVuYW1lIF9PcGVyYXRpb246 OmZpcnN0X2FyZ3VtZW50X3R5cGUmIF9feSkKICAgICAgOiBvcChfX3gpLCB2YWx1ZShfX3kpIHt9 CiAgdHlwZW5hbWUgX09wZXJhdGlvbjo6cmVzdWx0X3R5cGUKICBvcGVyYXRvcigpKGNvbnN0IHR5 cGVuYW1lIF9PcGVyYXRpb246OnNlY29uZF9hcmd1bWVudF90eXBlJiBfX3gpIGNvbnN0IHsKICAg IHJldHVybiBvcCh2YWx1ZSwgX194KTsKICB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX09wZXJhdGlv biwgY2xhc3MgX1RwPgppbmxpbmUgYmluZGVyMXN0PF9PcGVyYXRpb24+CmJpbmQxc3QoY29uc3Qg X09wZXJhdGlvbiYgX19vcGVyLCBjb25zdCBfVHAmIF9feCkKewogIHR5cGVkZWYgdHlwZW5hbWUg X09wZXJhdGlvbjo6Zmlyc3RfYXJndW1lbnRfdHlwZSBfQXJnMV90eXBlOwogIHJldHVybiBiaW5k ZXIxc3Q8X09wZXJhdGlvbj4oX19vcGVyLCBfQXJnMV90eXBlKF9feCkpOwp9Cgp0ZW1wbGF0ZSA8 Y2xhc3MgX09wZXJhdGlvbj4KY2xhc3MgYmluZGVyMm5kCiAgOiBwdWJsaWMgdW5hcnlfZnVuY3Rp b248dHlwZW5hbWUgX09wZXJhdGlvbjo6Zmlyc3RfYXJndW1lbnRfdHlwZSwKICAgICAgICAgICAg ICAgICAgICAgICAgICB0eXBlbmFtZSBfT3BlcmF0aW9uOjpyZXN1bHRfdHlwZT4gewpwcm90ZWN0 ZWQ6CiAgX09wZXJhdGlvbiBvcDsKICB0eXBlbmFtZSBfT3BlcmF0aW9uOjpzZWNvbmRfYXJndW1l bnRfdHlwZSB2YWx1ZTsKcHVibGljOgogIGJpbmRlcjJuZChjb25zdCBfT3BlcmF0aW9uJiBfX3gs CiAgICAgICAgICAgIGNvbnN0IHR5cGVuYW1lIF9PcGVyYXRpb246OnNlY29uZF9hcmd1bWVudF90 eXBlJiBfX3kpCiAgICAgIDogb3AoX194KSwgdmFsdWUoX195KSB7fQogIHR5cGVuYW1lIF9PcGVy YXRpb246OnJlc3VsdF90eXBlCiAgb3BlcmF0b3IoKShjb25zdCB0eXBlbmFtZSBfT3BlcmF0aW9u OjpmaXJzdF9hcmd1bWVudF90eXBlJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBvcChfX3gsIHZh bHVlKTsKICB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX09wZXJhdGlvbiwgY2xhc3MgX1RwPgppbmxp bmUgYmluZGVyMm5kPF9PcGVyYXRpb24+CmJpbmQybmQoY29uc3QgX09wZXJhdGlvbiYgX19vcGVy LCBjb25zdCBfVHAmIF9feCkKewogIHR5cGVkZWYgdHlwZW5hbWUgX09wZXJhdGlvbjo6c2Vjb25k X2FyZ3VtZW50X3R5cGUgX0FyZzJfdHlwZTsKICByZXR1cm4gYmluZGVyMm5kPF9PcGVyYXRpb24+ KF9fb3BlciwgX0FyZzJfdHlwZShfX3gpKTsKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX09wZXJhdGlv bjEsIGNsYXNzIF9PcGVyYXRpb24yPgpjbGFzcyB1bmFyeV9jb21wb3NlCiAgOiBwdWJsaWMgdW5h cnlfZnVuY3Rpb248dHlwZW5hbWUgX09wZXJhdGlvbjI6OmFyZ3VtZW50X3R5cGUsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgX09wZXJhdGlvbjE6OnJlc3VsdF90eXBlPgp7CnBy b3RlY3RlZDoKICBfT3BlcmF0aW9uMSBfX29wMTsKICBfT3BlcmF0aW9uMiBfX29wMjsKcHVibGlj OgogIHVuYXJ5X2NvbXBvc2UoY29uc3QgX09wZXJhdGlvbjEmIF9feCwgY29uc3QgX09wZXJhdGlv bjImIF9feSkKICAgIDogX19vcDEoX194KSwgX19vcDIoX195KSB7fQogIHR5cGVuYW1lIF9PcGVy YXRpb24xOjpyZXN1bHRfdHlwZQogIG9wZXJhdG9yKCkoY29uc3QgdHlwZW5hbWUgX09wZXJhdGlv bjI6OmFyZ3VtZW50X3R5cGUmIF9feCkgY29uc3QgewogICAgcmV0dXJuIF9fb3AxKF9fb3AyKF9f eCkpOwogIH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfT3BlcmF0aW9uMSwgY2xhc3MgX09wZXJhdGlv bjI+CmlubGluZSB1bmFyeV9jb21wb3NlPF9PcGVyYXRpb24xLF9PcGVyYXRpb24yPgpjb21wb3Nl MShjb25zdCBfT3BlcmF0aW9uMSYgX19vcDEsIGNvbnN0IF9PcGVyYXRpb24yJiBfX29wMikKewog IHJldHVybiB1bmFyeV9jb21wb3NlPF9PcGVyYXRpb24xLF9PcGVyYXRpb24yPihfX29wMSwgX19v cDIpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX09wZXJhdGlvbjEsIGNsYXNzIF9PcGVyYXRpb24yLCBj bGFzcyBfT3BlcmF0aW9uMz4KY2xhc3MgYmluYXJ5X2NvbXBvc2UKICA6IHB1YmxpYyB1bmFyeV9m dW5jdGlvbjx0eXBlbmFtZSBfT3BlcmF0aW9uMjo6YXJndW1lbnRfdHlwZSwKICAgICAgICAgICAg ICAgICAgICAgICAgICB0eXBlbmFtZSBfT3BlcmF0aW9uMTo6cmVzdWx0X3R5cGU+IHsKcHJvdGVj dGVkOgogIF9PcGVyYXRpb24xIF9NX29wMTsKICBfT3BlcmF0aW9uMiBfTV9vcDI7CiAgX09wZXJh dGlvbjMgX01fb3AzOwpwdWJsaWM6CiAgYmluYXJ5X2NvbXBvc2UoY29uc3QgX09wZXJhdGlvbjEm IF9feCwgY29uc3QgX09wZXJhdGlvbjImIF9feSwKICAgICAgICAgICAgICAgICBjb25zdCBfT3Bl cmF0aW9uMyYgX196KQogICAgOiBfTV9vcDEoX194KSwgX01fb3AyKF9feSksIF9NX29wMyhfX3op IHsgfQogIHR5cGVuYW1lIF9PcGVyYXRpb24xOjpyZXN1bHRfdHlwZQogIG9wZXJhdG9yKCkoY29u c3QgdHlwZW5hbWUgX09wZXJhdGlvbjI6OmFyZ3VtZW50X3R5cGUmIF9feCkgY29uc3QgewogICAg cmV0dXJuIF9NX29wMShfTV9vcDIoX194KSwgX01fb3AzKF9feCkpOwogIH0KfTsKCnRlbXBsYXRl IDxjbGFzcyBfT3BlcmF0aW9uMSwgY2xhc3MgX09wZXJhdGlvbjIsIGNsYXNzIF9PcGVyYXRpb24z PgppbmxpbmUgYmluYXJ5X2NvbXBvc2U8X09wZXJhdGlvbjEsIF9PcGVyYXRpb24yLCBfT3BlcmF0 aW9uMz4KY29tcG9zZTIoY29uc3QgX09wZXJhdGlvbjEmIF9fb3AxLCBjb25zdCBfT3BlcmF0aW9u MiYgX19vcDIsCiAgICAgICAgIGNvbnN0IF9PcGVyYXRpb24zJiBfX29wMykKewogIHJldHVybiBi aW5hcnlfY29tcG9zZTxfT3BlcmF0aW9uMSxfT3BlcmF0aW9uMixfT3BlcmF0aW9uMz4KICAgIChf X29wMSwgX19vcDIsIF9fb3AzKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9BcmcsIGNsYXNzIF9SZXN1 bHQ+CmNsYXNzIHBvaW50ZXJfdG9fdW5hcnlfZnVuY3Rpb24gOiBwdWJsaWMgdW5hcnlfZnVuY3Rp b248X0FyZywgX1Jlc3VsdD4gewpwcm90ZWN0ZWQ6CiAgX1Jlc3VsdCAoKl9NX3B0cikoX0FyZyk7 CnB1YmxpYzoKICBwb2ludGVyX3RvX3VuYXJ5X2Z1bmN0aW9uKCkge30KICBleHBsaWNpdCBwb2lu dGVyX3RvX3VuYXJ5X2Z1bmN0aW9uKF9SZXN1bHQgKCpfX3gpKF9BcmcpKSA6IF9NX3B0cihfX3gp IHt9CiAgX1Jlc3VsdCBvcGVyYXRvcigpKF9BcmcgX194KSBjb25zdCB7IHJldHVybiBfTV9wdHIo X194KTsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9BcmcsIGNsYXNzIF9SZXN1bHQ+CmlubGluZSBw b2ludGVyX3RvX3VuYXJ5X2Z1bmN0aW9uPF9BcmcsIF9SZXN1bHQ+IHB0cl9mdW4oX1Jlc3VsdCAo Kl9feCkoX0FyZykpCnsKICByZXR1cm4gcG9pbnRlcl90b191bmFyeV9mdW5jdGlvbjxfQXJnLCBf UmVzdWx0PihfX3gpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0FyZzEsIGNsYXNzIF9BcmcyLCBjbGFz cyBfUmVzdWx0PgpjbGFzcyBwb2ludGVyX3RvX2JpbmFyeV9mdW5jdGlvbiA6CiAgcHVibGljIGJp bmFyeV9mdW5jdGlvbjxfQXJnMSxfQXJnMixfUmVzdWx0PiB7CnByb3RlY3RlZDoKICAgIF9SZXN1 bHQgKCpfTV9wdHIpKF9BcmcxLCBfQXJnMik7CnB1YmxpYzoKICAgIHBvaW50ZXJfdG9fYmluYXJ5 X2Z1bmN0aW9uKCkge30KICAgIGV4cGxpY2l0IHBvaW50ZXJfdG9fYmluYXJ5X2Z1bmN0aW9uKF9S ZXN1bHQgKCpfX3gpKF9BcmcxLCBfQXJnMikpCiAgICAgIDogX01fcHRyKF9feCkge30KICAgIF9S ZXN1bHQgb3BlcmF0b3IoKShfQXJnMSBfX3gsIF9BcmcyIF9feSkgY29uc3QgewogICAgICByZXR1 cm4gX01fcHRyKF9feCwgX195KTsKICAgIH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfQXJnMSwgY2xh c3MgX0FyZzIsIGNsYXNzIF9SZXN1bHQ+CmlubGluZSBwb2ludGVyX3RvX2JpbmFyeV9mdW5jdGlv bjxfQXJnMSxfQXJnMixfUmVzdWx0PgpwdHJfZnVuKF9SZXN1bHQgKCpfX3gpKF9BcmcxLCBfQXJn MikpIHsKICByZXR1cm4gcG9pbnRlcl90b19iaW5hcnlfZnVuY3Rpb248X0FyZzEsX0FyZzIsX1Jl c3VsdD4oX194KTsKfQoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBfSWRlbnRpdHkgOiBw dWJsaWMgdW5hcnlfZnVuY3Rpb248X1RwLF9UcD4gewogIGNvbnN0IF9UcCYgb3BlcmF0b3IoKShj b25zdCBfVHAmIF9feCkgY29uc3QgeyByZXR1cm4gX194OyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3Mg X1RwPiBzdHJ1Y3QgaWRlbnRpdHkgOiBwdWJsaWMgX0lkZW50aXR5PF9UcD4ge307CgoKdGVtcGxh dGUgPGNsYXNzIF9QYWlyPgpzdHJ1Y3QgX1NlbGVjdDFzdCA6IHB1YmxpYyB1bmFyeV9mdW5jdGlv bjxfUGFpciwgdHlwZW5hbWUgX1BhaXI6OmZpcnN0X3R5cGU+IHsKICBjb25zdCB0eXBlbmFtZSBf UGFpcjo6Zmlyc3RfdHlwZSYgb3BlcmF0b3IoKShjb25zdCBfUGFpciYgX194KSBjb25zdCB7CiAg ICByZXR1cm4gX194LmZpcnN0OwogIH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfUGFpcj4Kc3RydWN0 IF9TZWxlY3QybmQgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X1BhaXIsIHR5cGVuYW1lIF9QYWly OjpzZWNvbmRfdHlwZT4KewogIGNvbnN0IHR5cGVuYW1lIF9QYWlyOjpzZWNvbmRfdHlwZSYgb3Bl cmF0b3IoKShjb25zdCBfUGFpciYgX194KSBjb25zdCB7CiAgICByZXR1cm4gX194LnNlY29uZDsK ICB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1BhaXI+IHN0cnVjdCBzZWxlY3Qxc3QgOiBwdWJsaWMg X1NlbGVjdDFzdDxfUGFpcj4ge307CnRlbXBsYXRlIDxjbGFzcyBfUGFpcj4gc3RydWN0IHNlbGVj dDJuZCA6IHB1YmxpYyBfU2VsZWN0Mm5kPF9QYWlyPiB7fTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0Fy ZzEsIGNsYXNzIF9BcmcyPgpzdHJ1Y3QgX1Byb2plY3Qxc3QgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0 aW9uPF9BcmcxLCBfQXJnMiwgX0FyZzE+IHsKICBfQXJnMSBvcGVyYXRvcigpKGNvbnN0IF9Bcmcx JiBfX3gsIGNvbnN0IF9BcmcyJikgY29uc3QgeyByZXR1cm4gX194OyB9Cn07Cgp0ZW1wbGF0ZSA8 Y2xhc3MgX0FyZzEsIGNsYXNzIF9BcmcyPgpzdHJ1Y3QgX1Byb2plY3QybmQgOiBwdWJsaWMgYmlu YXJ5X2Z1bmN0aW9uPF9BcmcxLCBfQXJnMiwgX0FyZzI+IHsKICBfQXJnMiBvcGVyYXRvcigpKGNv bnN0IF9BcmcxJiwgY29uc3QgX0FyZzImIF9feSkgY29uc3QgeyByZXR1cm4gX195OyB9Cn07Cgp0 ZW1wbGF0ZSA8Y2xhc3MgX0FyZzEsIGNsYXNzIF9BcmcyPgpzdHJ1Y3QgcHJvamVjdDFzdCA6IHB1 YmxpYyBfUHJvamVjdDFzdDxfQXJnMSwgX0FyZzI+IHt9OwoKdGVtcGxhdGUgPGNsYXNzIF9Bcmcx LCBjbGFzcyBfQXJnMj4Kc3RydWN0IHByb2plY3QybmQgOiBwdWJsaWMgX1Byb2plY3QybmQ8X0Fy ZzEsIF9BcmcyPiB7fTsKCgoKCnRlbXBsYXRlIDxjbGFzcyBfUmVzdWx0PgpzdHJ1Y3QgY29uc3Rh bnRfdm9pZF9mdW4KewogIHR5cGVkZWYgX1Jlc3VsdCByZXN1bHRfdHlwZTsKICByZXN1bHRfdHlw ZSBfX3ZhbDsKICBjb25zdGFudF92b2lkX2Z1bihjb25zdCByZXN1bHRfdHlwZSYgX192KSA6IF9f dmFsKF9fdikge30KICBjb25zdCByZXN1bHRfdHlwZSYgb3BlcmF0b3IoKSgpIGNvbnN0IHsgcmV0 dXJuIF9fdmFsOyB9Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9SZXN1bHQsIGNsYXNzIF9Bcmd1bWVu dCA9IF9SZXN1bHQ+CgoKCnN0cnVjdCBjb25zdGFudF91bmFyeV9mdW4gOiBwdWJsaWMgdW5hcnlf ZnVuY3Rpb248X0FyZ3VtZW50LCBfUmVzdWx0PiB7CiAgX1Jlc3VsdCBfTV92YWw7CiAgY29uc3Rh bnRfdW5hcnlfZnVuKGNvbnN0IF9SZXN1bHQmIF9fdikgOiBfTV92YWwoX192KSB7fQogIGNvbnN0 IF9SZXN1bHQmIG9wZXJhdG9yKCkoY29uc3QgX0FyZ3VtZW50JikgY29uc3QgeyByZXR1cm4gX01f dmFsOyB9Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9SZXN1bHQsIGNsYXNzIF9BcmcxID0gX1Jlc3Vs dCwgY2xhc3MgX0FyZzIgPSBfQXJnMT4KCgoKc3RydWN0IGNvbnN0YW50X2JpbmFyeV9mdW4gOiBw dWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9BcmcxLCBfQXJnMiwgX1Jlc3VsdD4gewogIF9SZXN1bHQg X01fdmFsOwogIGNvbnN0YW50X2JpbmFyeV9mdW4oY29uc3QgX1Jlc3VsdCYgX192KSA6IF9NX3Zh bChfX3YpIHt9CiAgY29uc3QgX1Jlc3VsdCYgb3BlcmF0b3IoKShjb25zdCBfQXJnMSYsIGNvbnN0 IF9BcmcyJikgY29uc3QgewogICAgcmV0dXJuIF9NX3ZhbDsKICB9Cn07Cgp0ZW1wbGF0ZSA8Y2xh c3MgX1Jlc3VsdD4KaW5saW5lIGNvbnN0YW50X3ZvaWRfZnVuPF9SZXN1bHQ+IGNvbnN0YW50MChj b25zdCBfUmVzdWx0JiBfX3ZhbCkKewogIHJldHVybiBjb25zdGFudF92b2lkX2Z1bjxfUmVzdWx0 PihfX3ZhbCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmVzdWx0PgppbmxpbmUgY29uc3RhbnRfdW5h cnlfZnVuPF9SZXN1bHQsX1Jlc3VsdD4gY29uc3RhbnQxKGNvbnN0IF9SZXN1bHQmIF9fdmFsKQp7 CiAgcmV0dXJuIGNvbnN0YW50X3VuYXJ5X2Z1bjxfUmVzdWx0LF9SZXN1bHQ+KF9fdmFsKTsKfQoK dGVtcGxhdGUgPGNsYXNzIF9SZXN1bHQ+CmlubGluZSBjb25zdGFudF9iaW5hcnlfZnVuPF9SZXN1 bHQsX1Jlc3VsdCxfUmVzdWx0Pgpjb25zdGFudDIoY29uc3QgX1Jlc3VsdCYgX192YWwpCnsKICBy ZXR1cm4gY29uc3RhbnRfYmluYXJ5X2Z1bjxfUmVzdWx0LF9SZXN1bHQsX1Jlc3VsdD4oX192YWwp Owp9CgoKCmNsYXNzIHN1YnRyYWN0aXZlX3JuZyA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjx1bnNp Z25lZCBpbnQsIHVuc2lnbmVkIGludD4gewpwcml2YXRlOgogIHVuc2lnbmVkIGludCBfTV90YWJs ZVs1NV07CiAgc2l6ZV90IF9NX2luZGV4MTsKICBzaXplX3QgX01faW5kZXgyOwpwdWJsaWM6CiAg dW5zaWduZWQgaW50IG9wZXJhdG9yKCkodW5zaWduZWQgaW50IF9fbGltaXQpIHsKICAgIF9NX2lu ZGV4MSA9IChfTV9pbmRleDEgKyAxKSAlIDU1OwogICAgX01faW5kZXgyID0gKF9NX2luZGV4MiAr IDEpICUgNTU7CiAgICBfTV90YWJsZVtfTV9pbmRleDFdID0gX01fdGFibGVbX01faW5kZXgxXSAt IF9NX3RhYmxlW19NX2luZGV4Ml07CiAgICByZXR1cm4gX01fdGFibGVbX01faW5kZXgxXSAlIF9f bGltaXQ7CiAgfQoKICB2b2lkIF9NX2luaXRpYWxpemUodW5zaWduZWQgaW50IF9fc2VlZCkKICB7 CiAgICB1bnNpZ25lZCBpbnQgX19rID0gMTsKICAgIF9NX3RhYmxlWzU0XSA9IF9fc2VlZDsKICAg IHNpemVfdCBfX2k7CiAgICBmb3IgKF9faSA9IDA7IF9faSA8IDU0OyBfX2krKykgewogICAgICAg IHNpemVfdCBfX2lpID0gKDIxICogKF9faSArIDEpICUgNTUpIC0gMTsKICAgICAgICBfTV90YWJs ZVtfX2lpXSA9IF9fazsKICAgICAgICBfX2sgPSBfX3NlZWQgLSBfX2s7CiAgICAgICAgX19zZWVk ID0gX01fdGFibGVbX19paV07CiAgICB9CiAgICBmb3IgKGludCBfX2xvb3AgPSAwOyBfX2xvb3Ag PCA0OyBfX2xvb3ArKykgewogICAgICAgIGZvciAoX19pID0gMDsgX19pIDwgNTU7IF9faSsrKQog ICAgICAgICAgICBfTV90YWJsZVtfX2ldID0gX01fdGFibGVbX19pXSAtIF9NX3RhYmxlWygxICsg X19pICsgMzApICUgNTVdOwogICAgfQogICAgX01faW5kZXgxID0gMDsKICAgIF9NX2luZGV4MiA9 IDMxOwogIH0KCiAgc3VidHJhY3RpdmVfcm5nKHVuc2lnbmVkIGludCBfX3NlZWQpIHsgX01faW5p dGlhbGl6ZShfX3NlZWQpOyB9CiAgc3VidHJhY3RpdmVfcm5nKCkgeyBfTV9pbml0aWFsaXplKDE2 MTgwMzM5OHUpOyB9Cn07CiMgNDg2ICIvdXNyL2luY2x1ZGUvZysrLTMvc3RsX2Z1bmN0aW9uLmgi IDMKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcD4KY2xhc3MgbWVtX2Z1bl90IDogcHVi bGljIHVuYXJ5X2Z1bmN0aW9uPF9UcCosX1JldD4gewpwdWJsaWM6CiAgZXhwbGljaXQgbWVtX2Z1 bl90KF9SZXQgKF9UcDo6Kl9fcGYpKCkpIDogX01fZihfX3BmKSB7fQogIF9SZXQgb3BlcmF0b3Io KShfVHAqIF9fcCkgY29uc3QgeyByZXR1cm4gKF9fcC0+Kl9NX2YpKCk7IH0KcHJpdmF0ZToKICBf UmV0IChfVHA6OipfTV9mKSgpOwp9OwoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcD4K Y2xhc3MgY29uc3RfbWVtX2Z1bl90IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPGNvbnN0IF9UcCos X1JldD4gewpwdWJsaWM6CiAgZXhwbGljaXQgY29uc3RfbWVtX2Z1bl90KF9SZXQgKF9UcDo6Kl9f cGYpKCkgY29uc3QpIDogX01fZihfX3BmKSB7fQogIF9SZXQgb3BlcmF0b3IoKShjb25zdCBfVHAq IF9fcCkgY29uc3QgeyByZXR1cm4gKF9fcC0+Kl9NX2YpKCk7IH0KcHJpdmF0ZToKICBfUmV0IChf VHA6OipfTV9mKSgpIGNvbnN0Owp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHA+ CmNsYXNzIG1lbV9mdW5fcmVmX3QgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X1RwLF9SZXQ+IHsK cHVibGljOgogIGV4cGxpY2l0IG1lbV9mdW5fcmVmX3QoX1JldCAoX1RwOjoqX19wZikoKSkgOiBf TV9mKF9fcGYpIHt9CiAgX1JldCBvcGVyYXRvcigpKF9UcCYgX19yKSBjb25zdCB7IHJldHVybiAo X19yLipfTV9mKSgpOyB9CnByaXZhdGU6CiAgX1JldCAoX1RwOjoqX01fZikoKTsKfTsKCnRlbXBs YXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHA+CmNsYXNzIGNvbnN0X21lbV9mdW5fcmVmX3QgOiBw dWJsaWMgdW5hcnlfZnVuY3Rpb248X1RwLF9SZXQ+IHsKcHVibGljOgogIGV4cGxpY2l0IGNvbnN0 X21lbV9mdW5fcmVmX3QoX1JldCAoX1RwOjoqX19wZikoKSBjb25zdCkgOiBfTV9mKF9fcGYpIHt9 CiAgX1JldCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX19yKSBjb25zdCB7IHJldHVybiAoX19yLipf TV9mKSgpOyB9CnByaXZhdGU6CiAgX1JldCAoX1RwOjoqX01fZikoKSBjb25zdDsKfTsKCnRlbXBs YXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmNsYXNzIG1lbV9mdW4xX3Qg OiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCosX0FyZyxfUmV0PiB7CnB1YmxpYzoKICBleHBs aWNpdCBtZW1fZnVuMV90KF9SZXQgKF9UcDo6Kl9fcGYpKF9BcmcpKSA6IF9NX2YoX19wZikge30K ICBfUmV0IG9wZXJhdG9yKCkoX1RwKiBfX3AsIF9BcmcgX194KSBjb25zdCB7IHJldHVybiAoX19w LT4qX01fZikoX194KTsgfQpwcml2YXRlOgogIF9SZXQgKF9UcDo6Kl9NX2YpKF9BcmcpOwp9OwoK dGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4KY2xhc3MgY29uc3Rf bWVtX2Z1bjFfdCA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248Y29uc3QgX1RwKixfQXJnLF9SZXQ+ IHsKcHVibGljOgogIGV4cGxpY2l0IGNvbnN0X21lbV9mdW4xX3QoX1JldCAoX1RwOjoqX19wZiko X0FyZykgY29uc3QpIDogX01fZihfX3BmKSB7fQogIF9SZXQgb3BlcmF0b3IoKShjb25zdCBfVHAq IF9fcCwgX0FyZyBfX3gpIGNvbnN0CiAgICB7IHJldHVybiAoX19wLT4qX01fZikoX194KTsgfQpw cml2YXRlOgogIF9SZXQgKF9UcDo6Kl9NX2YpKF9BcmcpIGNvbnN0Owp9OwoKdGVtcGxhdGUgPGNs YXNzIF9SZXQsIGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4KY2xhc3MgbWVtX2Z1bjFfcmVmX3QgOiBw dWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfQXJnLF9SZXQ+IHsKcHVibGljOgogIGV4cGxpY2l0 IG1lbV9mdW4xX3JlZl90KF9SZXQgKF9UcDo6Kl9fcGYpKF9BcmcpKSA6IF9NX2YoX19wZikge30K ICBfUmV0IG9wZXJhdG9yKCkoX1RwJiBfX3IsIF9BcmcgX194KSBjb25zdCB7IHJldHVybiAoX19y LipfTV9mKShfX3gpOyB9CnByaXZhdGU6CiAgX1JldCAoX1RwOjoqX01fZikoX0FyZyk7Cn07Cgp0 ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwLCBjbGFzcyBfQXJnPgpjbGFzcyBjb25zdF9t ZW1fZnVuMV9yZWZfdCA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9BcmcsX1JldD4gewpw dWJsaWM6CiAgZXhwbGljaXQgY29uc3RfbWVtX2Z1bjFfcmVmX3QoX1JldCAoX1RwOjoqX19wZiko X0FyZykgY29uc3QpIDogX01fZihfX3BmKSB7fQogIF9SZXQgb3BlcmF0b3IoKShjb25zdCBfVHAm IF9fciwgX0FyZyBfX3gpIGNvbnN0IHsgcmV0dXJuIChfX3IuKl9NX2YpKF9feCk7IH0KcHJpdmF0 ZToKICBfUmV0IChfVHA6OipfTV9mKShfQXJnKSBjb25zdDsKfTsKIyA2NDQgIi91c3IvaW5jbHVk ZS9nKystMy9zdGxfZnVuY3Rpb24uaCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1Rw PgppbmxpbmUgbWVtX2Z1bl90PF9SZXQsX1RwPiBtZW1fZnVuKF9SZXQgKF9UcDo6Kl9fZikoKSkK ICB7IHJldHVybiBtZW1fZnVuX3Q8X1JldCxfVHA+KF9fZik7IH0KCnRlbXBsYXRlIDxjbGFzcyBf UmV0LCBjbGFzcyBfVHA+CmlubGluZSBjb25zdF9tZW1fZnVuX3Q8X1JldCxfVHA+IG1lbV9mdW4o X1JldCAoX1RwOjoqX19mKSgpIGNvbnN0KQogIHsgcmV0dXJuIGNvbnN0X21lbV9mdW5fdDxfUmV0 LF9UcD4oX19mKTsgfQoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcD4KaW5saW5lIG1l bV9mdW5fcmVmX3Q8X1JldCxfVHA+IG1lbV9mdW5fcmVmKF9SZXQgKF9UcDo6Kl9fZikoKSkKICB7 IHJldHVybiBtZW1fZnVuX3JlZl90PF9SZXQsX1RwPihfX2YpOyB9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg X1JldCwgY2xhc3MgX1RwPgppbmxpbmUgY29uc3RfbWVtX2Z1bl9yZWZfdDxfUmV0LF9UcD4gbWVt X2Z1bl9yZWYoX1JldCAoX1RwOjoqX19mKSgpIGNvbnN0KQogIHsgcmV0dXJuIGNvbnN0X21lbV9m dW5fcmVmX3Q8X1JldCxfVHA+KF9fZik7IH0KCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBf VHAsIGNsYXNzIF9Bcmc+CmlubGluZSBtZW1fZnVuMV90PF9SZXQsX1RwLF9Bcmc+IG1lbV9mdW4o X1JldCAoX1RwOjoqX19mKShfQXJnKSkKICB7IHJldHVybiBtZW1fZnVuMV90PF9SZXQsX1RwLF9B cmc+KF9fZik7IH0KCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+ CmlubGluZSBjb25zdF9tZW1fZnVuMV90PF9SZXQsX1RwLF9Bcmc+IG1lbV9mdW4oX1JldCAoX1Rw OjoqX19mKShfQXJnKSBjb25zdCkKICB7IHJldHVybiBjb25zdF9tZW1fZnVuMV90PF9SZXQsX1Rw LF9Bcmc+KF9fZik7IH0KCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9B cmc+CmlubGluZSBtZW1fZnVuMV9yZWZfdDxfUmV0LF9UcCxfQXJnPiBtZW1fZnVuX3JlZihfUmV0 IChfVHA6OipfX2YpKF9BcmcpKQogIHsgcmV0dXJuIG1lbV9mdW4xX3JlZl90PF9SZXQsX1RwLF9B cmc+KF9fZik7IH0KCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+ CmlubGluZSBjb25zdF9tZW1fZnVuMV9yZWZfdDxfUmV0LF9UcCxfQXJnPgptZW1fZnVuX3JlZihf UmV0IChfVHA6OipfX2YpKF9BcmcpIGNvbnN0KQogIHsgcmV0dXJuIGNvbnN0X21lbV9mdW4xX3Jl Zl90PF9SZXQsX1RwLF9Bcmc+KF9fZik7IH0KCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBf VHAsIGNsYXNzIF9Bcmc+CmlubGluZSBtZW1fZnVuMV90PF9SZXQsX1RwLF9Bcmc+IG1lbV9mdW4x KF9SZXQgKF9UcDo6Kl9fZikoX0FyZykpCiAgeyByZXR1cm4gbWVtX2Z1bjFfdDxfUmV0LF9UcCxf QXJnPihfX2YpOyB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwLCBjbGFzcyBfQXJn PgppbmxpbmUgY29uc3RfbWVtX2Z1bjFfdDxfUmV0LF9UcCxfQXJnPiBtZW1fZnVuMShfUmV0IChf VHA6OipfX2YpKF9BcmcpIGNvbnN0KQogIHsgcmV0dXJuIGNvbnN0X21lbV9mdW4xX3Q8X1JldCxf VHAsX0FyZz4oX19mKTsgfQoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcCwgY2xhc3Mg X0FyZz4KaW5saW5lIG1lbV9mdW4xX3JlZl90PF9SZXQsX1RwLF9Bcmc+IG1lbV9mdW4xX3JlZihf UmV0IChfVHA6OipfX2YpKF9BcmcpKQogIHsgcmV0dXJuIG1lbV9mdW4xX3JlZl90PF9SZXQsX1Rw LF9Bcmc+KF9fZik7IH0KCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9B cmc+CmlubGluZSBjb25zdF9tZW1fZnVuMV9yZWZfdDxfUmV0LF9UcCxfQXJnPgptZW1fZnVuMV9y ZWYoX1JldCAoX1RwOjoqX19mKShfQXJnKSBjb25zdCkKICB7IHJldHVybiBjb25zdF9tZW1fZnVu MV9yZWZfdDxfUmV0LF9UcCxfQXJnPihfX2YpOyB9CiMgNjAgIi91c3IvaW5jbHVkZS9nKystMy9z dGxfdHJlZS5oIiAyIDMKCgoKCgoKCnR5cGVkZWYgYm9vbCBfUmJfdHJlZV9Db2xvcl90eXBlOwpj b25zdCBfUmJfdHJlZV9Db2xvcl90eXBlIF9TX3JiX3RyZWVfcmVkID0gZmFsc2U7CmNvbnN0IF9S Yl90cmVlX0NvbG9yX3R5cGUgX1NfcmJfdHJlZV9ibGFjayA9IHRydWU7CgpzdHJ1Y3QgX1JiX3Ry ZWVfbm9kZV9iYXNlCnsKICB0eXBlZGVmIF9SYl90cmVlX0NvbG9yX3R5cGUgX0NvbG9yX3R5cGU7 CiAgdHlwZWRlZiBfUmJfdHJlZV9ub2RlX2Jhc2UqIF9CYXNlX3B0cjsKCiAgX0NvbG9yX3R5cGUg X01fY29sb3I7CiAgX0Jhc2VfcHRyIF9NX3BhcmVudDsKICBfQmFzZV9wdHIgX01fbGVmdDsKICBf QmFzZV9wdHIgX01fcmlnaHQ7CgogIHN0YXRpYyBfQmFzZV9wdHIgX1NfbWluaW11bShfQmFzZV9w dHIgX194KQogIHsKICAgIHdoaWxlIChfX3gtPl9NX2xlZnQgIT0gMCkgX194ID0gX194LT5fTV9s ZWZ0OwogICAgcmV0dXJuIF9feDsKICB9CgogIHN0YXRpYyBfQmFzZV9wdHIgX1NfbWF4aW11bShf QmFzZV9wdHIgX194KQogIHsKICAgIHdoaWxlIChfX3gtPl9NX3JpZ2h0ICE9IDApIF9feCA9IF9f eC0+X01fcmlnaHQ7CiAgICByZXR1cm4gX194OwogIH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfVmFs dWU+CnN0cnVjdCBfUmJfdHJlZV9ub2RlIDogcHVibGljIF9SYl90cmVlX25vZGVfYmFzZQp7CiAg dHlwZWRlZiBfUmJfdHJlZV9ub2RlPF9WYWx1ZT4qIF9MaW5rX3R5cGU7CiAgX1ZhbHVlIF9NX3Zh bHVlX2ZpZWxkOwp9OwoKCnN0cnVjdCBfUmJfdHJlZV9iYXNlX2l0ZXJhdG9yCnsKICB0eXBlZGVm IF9SYl90cmVlX25vZGVfYmFzZTo6X0Jhc2VfcHRyIF9CYXNlX3B0cjsKICB0eXBlZGVmIGJpZGly ZWN0aW9uYWxfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVkZWYgcHRyZGlm Zl90IGRpZmZlcmVuY2VfdHlwZTsKICBfQmFzZV9wdHIgX01fbm9kZTsKCiAgdm9pZCBfTV9pbmNy ZW1lbnQoKQogIHsKICAgIGlmIChfTV9ub2RlLT5fTV9yaWdodCAhPSAwKSB7CiAgICAgIF9NX25v ZGUgPSBfTV9ub2RlLT5fTV9yaWdodDsKICAgICAgd2hpbGUgKF9NX25vZGUtPl9NX2xlZnQgIT0g MCkKICAgICAgICBfTV9ub2RlID0gX01fbm9kZS0+X01fbGVmdDsKICAgIH0KICAgIGVsc2Ugewog ICAgICBfQmFzZV9wdHIgX195ID0gX01fbm9kZS0+X01fcGFyZW50OwogICAgICB3aGlsZSAoX01f bm9kZSA9PSBfX3ktPl9NX3JpZ2h0KSB7CiAgICAgICAgX01fbm9kZSA9IF9feTsKICAgICAgICBf X3kgPSBfX3ktPl9NX3BhcmVudDsKICAgICAgfQogICAgICBpZiAoX01fbm9kZS0+X01fcmlnaHQg IT0gX195KQogICAgICAgIF9NX25vZGUgPSBfX3k7CiAgICB9CiAgfQoKICB2b2lkIF9NX2RlY3Jl bWVudCgpCiAgewogICAgaWYgKF9NX25vZGUtPl9NX2NvbG9yID09IF9TX3JiX3RyZWVfcmVkICYm CiAgICAgICAgX01fbm9kZS0+X01fcGFyZW50LT5fTV9wYXJlbnQgPT0gX01fbm9kZSkKICAgICAg X01fbm9kZSA9IF9NX25vZGUtPl9NX3JpZ2h0OwogICAgZWxzZSBpZiAoX01fbm9kZS0+X01fbGVm dCAhPSAwKSB7CiAgICAgIF9CYXNlX3B0ciBfX3kgPSBfTV9ub2RlLT5fTV9sZWZ0OwogICAgICB3 aGlsZSAoX195LT5fTV9yaWdodCAhPSAwKQogICAgICAgIF9feSA9IF9feS0+X01fcmlnaHQ7CiAg ICAgIF9NX25vZGUgPSBfX3k7CiAgICB9CiAgICBlbHNlIHsKICAgICAgX0Jhc2VfcHRyIF9feSA9 IF9NX25vZGUtPl9NX3BhcmVudDsKICAgICAgd2hpbGUgKF9NX25vZGUgPT0gX195LT5fTV9sZWZ0 KSB7CiAgICAgICAgX01fbm9kZSA9IF9feTsKICAgICAgICBfX3kgPSBfX3ktPl9NX3BhcmVudDsK ICAgICAgfQogICAgICBfTV9ub2RlID0gX195OwogICAgfQogIH0KfTsKCnRlbXBsYXRlIDxjbGFz cyBfVmFsdWUsIGNsYXNzIF9SZWYsIGNsYXNzIF9QdHI+CnN0cnVjdCBfUmJfdHJlZV9pdGVyYXRv ciA6IHB1YmxpYyBfUmJfdHJlZV9iYXNlX2l0ZXJhdG9yCnsKICB0eXBlZGVmIF9WYWx1ZSB2YWx1 ZV90eXBlOwogIHR5cGVkZWYgX1JlZiByZWZlcmVuY2U7CiAgdHlwZWRlZiBfUHRyIHBvaW50ZXI7 CiAgdHlwZWRlZiBfUmJfdHJlZV9pdGVyYXRvcjxfVmFsdWUsIF9WYWx1ZSYsIF9WYWx1ZSo+CiAg ICBpdGVyYXRvcjsKICB0eXBlZGVmIF9SYl90cmVlX2l0ZXJhdG9yPF9WYWx1ZSwgY29uc3QgX1Zh bHVlJiwgY29uc3QgX1ZhbHVlKj4KICAgIGNvbnN0X2l0ZXJhdG9yOwogIHR5cGVkZWYgX1JiX3Ry ZWVfaXRlcmF0b3I8X1ZhbHVlLCBfUmVmLCBfUHRyPgogICAgX1NlbGY7CiAgdHlwZWRlZiBfUmJf dHJlZV9ub2RlPF9WYWx1ZT4qIF9MaW5rX3R5cGU7CgogIF9SYl90cmVlX2l0ZXJhdG9yKCkge30K ICBfUmJfdHJlZV9pdGVyYXRvcihfTGlua190eXBlIF9feCkgeyBfTV9ub2RlID0gX194OyB9CiAg X1JiX3RyZWVfaXRlcmF0b3IoY29uc3QgaXRlcmF0b3ImIF9faXQpIHsgX01fbm9kZSA9IF9faXQu X01fbm9kZTsgfQoKICByZWZlcmVuY2Ugb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4gX0xpbmtf dHlwZShfTV9ub2RlKS0+X01fdmFsdWVfZmllbGQ7IH0KCiAgcG9pbnRlciBvcGVyYXRvci0+KCkg Y29uc3QgeyByZXR1cm4gJihvcGVyYXRvciooKSk7IH0KCgogIF9TZWxmJiBvcGVyYXRvcisrKCkg eyBfTV9pbmNyZW1lbnQoKTsgcmV0dXJuICp0aGlzOyB9CiAgX1NlbGYgb3BlcmF0b3IrKyhpbnQp IHsKICAgIF9TZWxmIF9fdG1wID0gKnRoaXM7CiAgICBfTV9pbmNyZW1lbnQoKTsKICAgIHJldHVy biBfX3RtcDsKICB9CgogIF9TZWxmJiBvcGVyYXRvci0tKCkgeyBfTV9kZWNyZW1lbnQoKTsgcmV0 dXJuICp0aGlzOyB9CiAgX1NlbGYgb3BlcmF0b3ItLShpbnQpIHsKICAgIF9TZWxmIF9fdG1wID0g KnRoaXM7CiAgICBfTV9kZWNyZW1lbnQoKTsKICAgIHJldHVybiBfX3RtcDsKICB9Cn07Cgppbmxp bmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IF9SYl90cmVlX2Jhc2VfaXRlcmF0b3ImIF9feCwKICAg ICAgICAgICAgICAgICAgICAgICBjb25zdCBfUmJfdHJlZV9iYXNlX2l0ZXJhdG9yJiBfX3kpIHsK ICByZXR1cm4gX194Ll9NX25vZGUgPT0gX195Ll9NX25vZGU7Cn0KCmlubGluZSBib29sIG9wZXJh dG9yIT0oY29uc3QgX1JiX3RyZWVfYmFzZV9pdGVyYXRvciYgX194LAogICAgICAgICAgICAgICAg ICAgICAgIGNvbnN0IF9SYl90cmVlX2Jhc2VfaXRlcmF0b3ImIF9feSkgewogIHJldHVybiBfX3gu X01fbm9kZSAhPSBfX3kuX01fbm9kZTsKfQoKCgppbmxpbmUgYmlkaXJlY3Rpb25hbF9pdGVyYXRv cl90YWcKaXRlcmF0b3JfY2F0ZWdvcnkoY29uc3QgX1JiX3RyZWVfYmFzZV9pdGVyYXRvciYpIHsK ICByZXR1cm4gYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcoKTsKfQoKaW5saW5lIF9SYl90cmVl X2Jhc2VfaXRlcmF0b3I6OmRpZmZlcmVuY2VfdHlwZSoKZGlzdGFuY2VfdHlwZShjb25zdCBfUmJf dHJlZV9iYXNlX2l0ZXJhdG9yJikgewogIHJldHVybiAoX1JiX3RyZWVfYmFzZV9pdGVyYXRvcjo6 ZGlmZmVyZW5jZV90eXBlKikgMDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9WYWx1ZSwgY2xhc3MgX1Jl ZiwgY2xhc3MgX1B0cj4KaW5saW5lIF9WYWx1ZSogdmFsdWVfdHlwZShjb25zdCBfUmJfdHJlZV9p dGVyYXRvcjxfVmFsdWUsIF9SZWYsIF9QdHI+JikgewogIHJldHVybiAoX1ZhbHVlKikgMDsKfQoK CgppbmxpbmUgdm9pZApfUmJfdHJlZV9yb3RhdGVfbGVmdChfUmJfdHJlZV9ub2RlX2Jhc2UqIF9f eCwgX1JiX3RyZWVfbm9kZV9iYXNlKiYgX19yb290KQp7CiAgX1JiX3RyZWVfbm9kZV9iYXNlKiBf X3kgPSBfX3gtPl9NX3JpZ2h0OwogIF9feC0+X01fcmlnaHQgPSBfX3ktPl9NX2xlZnQ7CiAgaWYg KF9feS0+X01fbGVmdCAhPTApCiAgICBfX3ktPl9NX2xlZnQtPl9NX3BhcmVudCA9IF9feDsKICBf X3ktPl9NX3BhcmVudCA9IF9feC0+X01fcGFyZW50OwoKICBpZiAoX194ID09IF9fcm9vdCkKICAg IF9fcm9vdCA9IF9feTsKICBlbHNlIGlmIChfX3ggPT0gX194LT5fTV9wYXJlbnQtPl9NX2xlZnQp CiAgICBfX3gtPl9NX3BhcmVudC0+X01fbGVmdCA9IF9feTsKICBlbHNlCiAgICBfX3gtPl9NX3Bh cmVudC0+X01fcmlnaHQgPSBfX3k7CiAgX195LT5fTV9sZWZ0ID0gX194OwogIF9feC0+X01fcGFy ZW50ID0gX195Owp9CgppbmxpbmUgdm9pZApfUmJfdHJlZV9yb3RhdGVfcmlnaHQoX1JiX3RyZWVf bm9kZV9iYXNlKiBfX3gsIF9SYl90cmVlX25vZGVfYmFzZSomIF9fcm9vdCkKewogIF9SYl90cmVl X25vZGVfYmFzZSogX195ID0gX194LT5fTV9sZWZ0OwogIF9feC0+X01fbGVmdCA9IF9feS0+X01f cmlnaHQ7CiAgaWYgKF9feS0+X01fcmlnaHQgIT0gMCkKICAgIF9feS0+X01fcmlnaHQtPl9NX3Bh cmVudCA9IF9feDsKICBfX3ktPl9NX3BhcmVudCA9IF9feC0+X01fcGFyZW50OwoKICBpZiAoX194 ID09IF9fcm9vdCkKICAgIF9fcm9vdCA9IF9feTsKICBlbHNlIGlmIChfX3ggPT0gX194LT5fTV9w YXJlbnQtPl9NX3JpZ2h0KQogICAgX194LT5fTV9wYXJlbnQtPl9NX3JpZ2h0ID0gX195OwogIGVs c2UKICAgIF9feC0+X01fcGFyZW50LT5fTV9sZWZ0ID0gX195OwogIF9feS0+X01fcmlnaHQgPSBf X3g7CiAgX194LT5fTV9wYXJlbnQgPSBfX3k7Cn0KCmlubGluZSB2b2lkCl9SYl90cmVlX3JlYmFs YW5jZShfUmJfdHJlZV9ub2RlX2Jhc2UqIF9feCwgX1JiX3RyZWVfbm9kZV9iYXNlKiYgX19yb290 KQp7CiAgX194LT5fTV9jb2xvciA9IF9TX3JiX3RyZWVfcmVkOwogIHdoaWxlIChfX3ggIT0gX19y b290ICYmIF9feC0+X01fcGFyZW50LT5fTV9jb2xvciA9PSBfU19yYl90cmVlX3JlZCkgewogICAg aWYgKF9feC0+X01fcGFyZW50ID09IF9feC0+X01fcGFyZW50LT5fTV9wYXJlbnQtPl9NX2xlZnQp IHsKICAgICAgX1JiX3RyZWVfbm9kZV9iYXNlKiBfX3kgPSBfX3gtPl9NX3BhcmVudC0+X01fcGFy ZW50LT5fTV9yaWdodDsKICAgICAgaWYgKF9feSAmJiBfX3ktPl9NX2NvbG9yID09IF9TX3JiX3Ry ZWVfcmVkKSB7CiAgICAgICAgX194LT5fTV9wYXJlbnQtPl9NX2NvbG9yID0gX1NfcmJfdHJlZV9i bGFjazsKICAgICAgICBfX3ktPl9NX2NvbG9yID0gX1NfcmJfdHJlZV9ibGFjazsKICAgICAgICBf X3gtPl9NX3BhcmVudC0+X01fcGFyZW50LT5fTV9jb2xvciA9IF9TX3JiX3RyZWVfcmVkOwogICAg ICAgIF9feCA9IF9feC0+X01fcGFyZW50LT5fTV9wYXJlbnQ7CiAgICAgIH0KICAgICAgZWxzZSB7 CiAgICAgICAgaWYgKF9feCA9PSBfX3gtPl9NX3BhcmVudC0+X01fcmlnaHQpIHsKICAgICAgICAg IF9feCA9IF9feC0+X01fcGFyZW50OwogICAgICAgICAgX1JiX3RyZWVfcm90YXRlX2xlZnQoX194 LCBfX3Jvb3QpOwogICAgICAgIH0KICAgICAgICBfX3gtPl9NX3BhcmVudC0+X01fY29sb3IgPSBf U19yYl90cmVlX2JsYWNrOwogICAgICAgIF9feC0+X01fcGFyZW50LT5fTV9wYXJlbnQtPl9NX2Nv bG9yID0gX1NfcmJfdHJlZV9yZWQ7CiAgICAgICAgX1JiX3RyZWVfcm90YXRlX3JpZ2h0KF9feC0+ X01fcGFyZW50LT5fTV9wYXJlbnQsIF9fcm9vdCk7CiAgICAgIH0KICAgIH0KICAgIGVsc2Ugewog ICAgICBfUmJfdHJlZV9ub2RlX2Jhc2UqIF9feSA9IF9feC0+X01fcGFyZW50LT5fTV9wYXJlbnQt Pl9NX2xlZnQ7CiAgICAgIGlmIChfX3kgJiYgX195LT5fTV9jb2xvciA9PSBfU19yYl90cmVlX3Jl ZCkgewogICAgICAgIF9feC0+X01fcGFyZW50LT5fTV9jb2xvciA9IF9TX3JiX3RyZWVfYmxhY2s7 CiAgICAgICAgX195LT5fTV9jb2xvciA9IF9TX3JiX3RyZWVfYmxhY2s7CiAgICAgICAgX194LT5f TV9wYXJlbnQtPl9NX3BhcmVudC0+X01fY29sb3IgPSBfU19yYl90cmVlX3JlZDsKICAgICAgICBf X3ggPSBfX3gtPl9NX3BhcmVudC0+X01fcGFyZW50OwogICAgICB9CiAgICAgIGVsc2UgewogICAg ICAgIGlmIChfX3ggPT0gX194LT5fTV9wYXJlbnQtPl9NX2xlZnQpIHsKICAgICAgICAgIF9feCA9 IF9feC0+X01fcGFyZW50OwogICAgICAgICAgX1JiX3RyZWVfcm90YXRlX3JpZ2h0KF9feCwgX19y b290KTsKICAgICAgICB9CiAgICAgICAgX194LT5fTV9wYXJlbnQtPl9NX2NvbG9yID0gX1NfcmJf dHJlZV9ibGFjazsKICAgICAgICBfX3gtPl9NX3BhcmVudC0+X01fcGFyZW50LT5fTV9jb2xvciA9 IF9TX3JiX3RyZWVfcmVkOwogICAgICAgIF9SYl90cmVlX3JvdGF0ZV9sZWZ0KF9feC0+X01fcGFy ZW50LT5fTV9wYXJlbnQsIF9fcm9vdCk7CiAgICAgIH0KICAgIH0KICB9CiAgX19yb290LT5fTV9j b2xvciA9IF9TX3JiX3RyZWVfYmxhY2s7Cn0KCmlubGluZSBfUmJfdHJlZV9ub2RlX2Jhc2UqCl9S Yl90cmVlX3JlYmFsYW5jZV9mb3JfZXJhc2UoX1JiX3RyZWVfbm9kZV9iYXNlKiBfX3osCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgX1JiX3RyZWVfbm9kZV9iYXNlKiYgX19yb290LAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgIF9SYl90cmVlX25vZGVfYmFzZSomIF9fbGVmdG1vc3Qs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JiX3RyZWVfbm9kZV9iYXNlKiYgX19yaWdo dG1vc3QpCnsKICBfUmJfdHJlZV9ub2RlX2Jhc2UqIF9feSA9IF9fejsKICBfUmJfdHJlZV9ub2Rl X2Jhc2UqIF9feCA9IDA7CiAgX1JiX3RyZWVfbm9kZV9iYXNlKiBfX3hfcGFyZW50ID0gMDsKICBp ZiAoX195LT5fTV9sZWZ0ID09IDApCiAgICBfX3ggPSBfX3ktPl9NX3JpZ2h0OwogIGVsc2UKICAg IGlmIChfX3ktPl9NX3JpZ2h0ID09IDApCiAgICAgIF9feCA9IF9feS0+X01fbGVmdDsKICAgIGVs c2UgewogICAgICBfX3kgPSBfX3ktPl9NX3JpZ2h0OwogICAgICB3aGlsZSAoX195LT5fTV9sZWZ0 ICE9IDApCiAgICAgICAgX195ID0gX195LT5fTV9sZWZ0OwogICAgICBfX3ggPSBfX3ktPl9NX3Jp Z2h0OwogICAgfQogIGlmIChfX3kgIT0gX196KSB7CiAgICBfX3otPl9NX2xlZnQtPl9NX3BhcmVu dCA9IF9feTsKICAgIF9feS0+X01fbGVmdCA9IF9fei0+X01fbGVmdDsKICAgIGlmIChfX3kgIT0g X196LT5fTV9yaWdodCkgewogICAgICBfX3hfcGFyZW50ID0gX195LT5fTV9wYXJlbnQ7CiAgICAg IGlmIChfX3gpIF9feC0+X01fcGFyZW50ID0gX195LT5fTV9wYXJlbnQ7CiAgICAgIF9feS0+X01f cGFyZW50LT5fTV9sZWZ0ID0gX194OwogICAgICBfX3ktPl9NX3JpZ2h0ID0gX196LT5fTV9yaWdo dDsKICAgICAgX196LT5fTV9yaWdodC0+X01fcGFyZW50ID0gX195OwogICAgfQogICAgZWxzZQog ICAgICBfX3hfcGFyZW50ID0gX195OwogICAgaWYgKF9fcm9vdCA9PSBfX3opCiAgICAgIF9fcm9v dCA9IF9feTsKICAgIGVsc2UgaWYgKF9fei0+X01fcGFyZW50LT5fTV9sZWZ0ID09IF9feikKICAg ICAgX196LT5fTV9wYXJlbnQtPl9NX2xlZnQgPSBfX3k7CiAgICBlbHNlCiAgICAgIF9fei0+X01f cGFyZW50LT5fTV9yaWdodCA9IF9feTsKICAgIF9feS0+X01fcGFyZW50ID0gX196LT5fTV9wYXJl bnQ7CiAgICAgICAgIDo6c3dhcChfX3ktPl9NX2NvbG9yLCBfX3otPl9NX2NvbG9yKTsKICAgIF9f eSA9IF9fejsKCiAgfQogIGVsc2UgewogICAgX194X3BhcmVudCA9IF9feS0+X01fcGFyZW50Owog ICAgaWYgKF9feCkgX194LT5fTV9wYXJlbnQgPSBfX3ktPl9NX3BhcmVudDsKICAgIGlmIChfX3Jv b3QgPT0gX196KQogICAgICBfX3Jvb3QgPSBfX3g7CiAgICBlbHNlCiAgICAgIGlmIChfX3otPl9N X3BhcmVudC0+X01fbGVmdCA9PSBfX3opCiAgICAgICAgX196LT5fTV9wYXJlbnQtPl9NX2xlZnQg PSBfX3g7CiAgICAgIGVsc2UKICAgICAgICBfX3otPl9NX3BhcmVudC0+X01fcmlnaHQgPSBfX3g7 CiAgICBpZiAoX19sZWZ0bW9zdCA9PSBfX3opCiAgICAgIGlmIChfX3otPl9NX3JpZ2h0ID09IDAp CiAgICAgICAgX19sZWZ0bW9zdCA9IF9fei0+X01fcGFyZW50OwoKICAgICAgZWxzZQogICAgICAg IF9fbGVmdG1vc3QgPSBfUmJfdHJlZV9ub2RlX2Jhc2U6Ol9TX21pbmltdW0oX194KTsKICAgIGlm IChfX3JpZ2h0bW9zdCA9PSBfX3opCiAgICAgIGlmIChfX3otPl9NX2xlZnQgPT0gMCkKICAgICAg ICBfX3JpZ2h0bW9zdCA9IF9fei0+X01fcGFyZW50OwoKICAgICAgZWxzZQogICAgICAgIF9fcmln aHRtb3N0ID0gX1JiX3RyZWVfbm9kZV9iYXNlOjpfU19tYXhpbXVtKF9feCk7CiAgfQogIGlmIChf X3ktPl9NX2NvbG9yICE9IF9TX3JiX3RyZWVfcmVkKSB7CiAgICB3aGlsZSAoX194ICE9IF9fcm9v dCAmJiAoX194ID09IDAgfHwgX194LT5fTV9jb2xvciA9PSBfU19yYl90cmVlX2JsYWNrKSkKICAg ICAgaWYgKF9feCA9PSBfX3hfcGFyZW50LT5fTV9sZWZ0KSB7CiAgICAgICAgX1JiX3RyZWVfbm9k ZV9iYXNlKiBfX3cgPSBfX3hfcGFyZW50LT5fTV9yaWdodDsKICAgICAgICBpZiAoX193LT5fTV9j b2xvciA9PSBfU19yYl90cmVlX3JlZCkgewogICAgICAgICAgX193LT5fTV9jb2xvciA9IF9TX3Ji X3RyZWVfYmxhY2s7CiAgICAgICAgICBfX3hfcGFyZW50LT5fTV9jb2xvciA9IF9TX3JiX3RyZWVf cmVkOwogICAgICAgICAgX1JiX3RyZWVfcm90YXRlX2xlZnQoX194X3BhcmVudCwgX19yb290KTsK ICAgICAgICAgIF9fdyA9IF9feF9wYXJlbnQtPl9NX3JpZ2h0OwogICAgICAgIH0KICAgICAgICBp ZiAoKF9fdy0+X01fbGVmdCA9PSAwIHx8CiAgICAgICAgICAgICBfX3ctPl9NX2xlZnQtPl9NX2Nv bG9yID09IF9TX3JiX3RyZWVfYmxhY2spICYmCiAgICAgICAgICAgIChfX3ctPl9NX3JpZ2h0ID09 IDAgfHwKICAgICAgICAgICAgIF9fdy0+X01fcmlnaHQtPl9NX2NvbG9yID09IF9TX3JiX3RyZWVf YmxhY2spKSB7CiAgICAgICAgICBfX3ctPl9NX2NvbG9yID0gX1NfcmJfdHJlZV9yZWQ7CiAgICAg ICAgICBfX3ggPSBfX3hfcGFyZW50OwogICAgICAgICAgX194X3BhcmVudCA9IF9feF9wYXJlbnQt Pl9NX3BhcmVudDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgaWYgKF9fdy0+X01fcmlnaHQg PT0gMCB8fAogICAgICAgICAgICAgIF9fdy0+X01fcmlnaHQtPl9NX2NvbG9yID09IF9TX3JiX3Ry ZWVfYmxhY2spIHsKICAgICAgICAgICAgaWYgKF9fdy0+X01fbGVmdCkgX193LT5fTV9sZWZ0LT5f TV9jb2xvciA9IF9TX3JiX3RyZWVfYmxhY2s7CiAgICAgICAgICAgIF9fdy0+X01fY29sb3IgPSBf U19yYl90cmVlX3JlZDsKICAgICAgICAgICAgX1JiX3RyZWVfcm90YXRlX3JpZ2h0KF9fdywgX19y b290KTsKICAgICAgICAgICAgX193ID0gX194X3BhcmVudC0+X01fcmlnaHQ7CiAgICAgICAgICB9 CiAgICAgICAgICBfX3ctPl9NX2NvbG9yID0gX194X3BhcmVudC0+X01fY29sb3I7CiAgICAgICAg ICBfX3hfcGFyZW50LT5fTV9jb2xvciA9IF9TX3JiX3RyZWVfYmxhY2s7CiAgICAgICAgICBpZiAo X193LT5fTV9yaWdodCkgX193LT5fTV9yaWdodC0+X01fY29sb3IgPSBfU19yYl90cmVlX2JsYWNr OwogICAgICAgICAgX1JiX3RyZWVfcm90YXRlX2xlZnQoX194X3BhcmVudCwgX19yb290KTsKICAg ICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICBfUmJfdHJlZV9u b2RlX2Jhc2UqIF9fdyA9IF9feF9wYXJlbnQtPl9NX2xlZnQ7CiAgICAgICAgaWYgKF9fdy0+X01f Y29sb3IgPT0gX1NfcmJfdHJlZV9yZWQpIHsKICAgICAgICAgIF9fdy0+X01fY29sb3IgPSBfU19y Yl90cmVlX2JsYWNrOwogICAgICAgICAgX194X3BhcmVudC0+X01fY29sb3IgPSBfU19yYl90cmVl X3JlZDsKICAgICAgICAgIF9SYl90cmVlX3JvdGF0ZV9yaWdodChfX3hfcGFyZW50LCBfX3Jvb3Qp OwogICAgICAgICAgX193ID0gX194X3BhcmVudC0+X01fbGVmdDsKICAgICAgICB9CiAgICAgICAg aWYgKChfX3ctPl9NX3JpZ2h0ID09IDAgfHwKICAgICAgICAgICAgIF9fdy0+X01fcmlnaHQtPl9N X2NvbG9yID09IF9TX3JiX3RyZWVfYmxhY2spICYmCiAgICAgICAgICAgIChfX3ctPl9NX2xlZnQg PT0gMCB8fAogICAgICAgICAgICAgX193LT5fTV9sZWZ0LT5fTV9jb2xvciA9PSBfU19yYl90cmVl X2JsYWNrKSkgewogICAgICAgICAgX193LT5fTV9jb2xvciA9IF9TX3JiX3RyZWVfcmVkOwogICAg ICAgICAgX194ID0gX194X3BhcmVudDsKICAgICAgICAgIF9feF9wYXJlbnQgPSBfX3hfcGFyZW50 LT5fTV9wYXJlbnQ7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGlmIChfX3ctPl9NX2xlZnQg PT0gMCB8fAogICAgICAgICAgICAgIF9fdy0+X01fbGVmdC0+X01fY29sb3IgPT0gX1NfcmJfdHJl ZV9ibGFjaykgewogICAgICAgICAgICBpZiAoX193LT5fTV9yaWdodCkgX193LT5fTV9yaWdodC0+ X01fY29sb3IgPSBfU19yYl90cmVlX2JsYWNrOwogICAgICAgICAgICBfX3ctPl9NX2NvbG9yID0g X1NfcmJfdHJlZV9yZWQ7CiAgICAgICAgICAgIF9SYl90cmVlX3JvdGF0ZV9sZWZ0KF9fdywgX19y b290KTsKICAgICAgICAgICAgX193ID0gX194X3BhcmVudC0+X01fbGVmdDsKICAgICAgICAgIH0K ICAgICAgICAgIF9fdy0+X01fY29sb3IgPSBfX3hfcGFyZW50LT5fTV9jb2xvcjsKICAgICAgICAg IF9feF9wYXJlbnQtPl9NX2NvbG9yID0gX1NfcmJfdHJlZV9ibGFjazsKICAgICAgICAgIGlmIChf X3ctPl9NX2xlZnQpIF9fdy0+X01fbGVmdC0+X01fY29sb3IgPSBfU19yYl90cmVlX2JsYWNrOwog ICAgICAgICAgX1JiX3RyZWVfcm90YXRlX3JpZ2h0KF9feF9wYXJlbnQsIF9fcm9vdCk7CiAgICAg ICAgICBicmVhazsKICAgICAgICB9CiAgICAgIH0KICAgIGlmIChfX3gpIF9feC0+X01fY29sb3Ig PSBfU19yYl90cmVlX2JsYWNrOwogIH0KICByZXR1cm4gX195Owp9CiMgNDk4ICIvdXNyL2luY2x1 ZGUvZysrLTMvc3RsX3RyZWUuaCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+ CnN0cnVjdCBfUmJfdHJlZV9iYXNlCnsKICB0eXBlZGVmIF9BbGxvYyBhbGxvY2F0b3JfdHlwZTsK ICBhbGxvY2F0b3JfdHlwZSBnZXRfYWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4gYWxsb2NhdG9y X3R5cGUoKTsgfQoKICBfUmJfdHJlZV9iYXNlKGNvbnN0IGFsbG9jYXRvcl90eXBlJikKICAgIDog X01faGVhZGVyKDApIHsgX01faGVhZGVyID0gX01fZ2V0X25vZGUoKTsgfQogIH5fUmJfdHJlZV9i YXNlKCkgeyBfTV9wdXRfbm9kZShfTV9oZWFkZXIpOyB9Cgpwcm90ZWN0ZWQ6CiAgX1JiX3RyZWVf bm9kZTxfVHA+KiBfTV9oZWFkZXI7CgogIHR5cGVkZWYgc2ltcGxlX2FsbG9jPF9SYl90cmVlX25v ZGU8X1RwPiwgX0FsbG9jPiBfQWxsb2NfdHlwZTsKCiAgX1JiX3RyZWVfbm9kZTxfVHA+KiBfTV9n ZXRfbm9kZSgpCiAgICB7IHJldHVybiBfQWxsb2NfdHlwZTo6YWxsb2NhdGUoMSk7IH0KICB2b2lk IF9NX3B1dF9ub2RlKF9SYl90cmVlX25vZGU8X1RwPiogX19wKQogICAgeyBfQWxsb2NfdHlwZTo6 ZGVhbGxvY2F0ZShfX3AsIDEpOyB9Cn07CgoKCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBf VmFsdWUsIGNsYXNzIF9LZXlPZlZhbHVlLCBjbGFzcyBfQ29tcGFyZSwKICAgICAgICAgIGNsYXNz IF9BbGxvYyA9IGFsbG9jID4KY2xhc3MgX1JiX3RyZWUgOiBwcm90ZWN0ZWQgX1JiX3RyZWVfYmFz ZTxfVmFsdWUsIF9BbGxvYz4gewogIHR5cGVkZWYgX1JiX3RyZWVfYmFzZTxfVmFsdWUsIF9BbGxv Yz4gX0Jhc2U7CnByb3RlY3RlZDoKICB0eXBlZGVmIF9SYl90cmVlX25vZGVfYmFzZSogX0Jhc2Vf cHRyOwogIHR5cGVkZWYgX1JiX3RyZWVfbm9kZTxfVmFsdWU+IF9SYl90cmVlX25vZGU7CiAgdHlw ZWRlZiBfUmJfdHJlZV9Db2xvcl90eXBlIF9Db2xvcl90eXBlOwpwdWJsaWM6CiAgdHlwZWRlZiBf S2V5IGtleV90eXBlOwogIHR5cGVkZWYgX1ZhbHVlIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiB2YWx1 ZV90eXBlKiBwb2ludGVyOwogIHR5cGVkZWYgY29uc3QgdmFsdWVfdHlwZSogY29uc3RfcG9pbnRl cjsKICB0eXBlZGVmIHZhbHVlX3R5cGUmIHJlZmVyZW5jZTsKICB0eXBlZGVmIGNvbnN0IHZhbHVl X3R5cGUmIGNvbnN0X3JlZmVyZW5jZTsKICB0eXBlZGVmIF9SYl90cmVlX25vZGUqIF9MaW5rX3R5 cGU7CiAgdHlwZWRlZiBzaXplX3Qgc2l6ZV90eXBlOwogIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZl cmVuY2VfdHlwZTsKCiAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6YWxsb2NhdG9yX3R5cGUgYWxs b2NhdG9yX3R5cGU7CiAgYWxsb2NhdG9yX3R5cGUgZ2V0X2FsbG9jYXRvcigpIGNvbnN0IHsgcmV0 dXJuIF9CYXNlOjpnZXRfYWxsb2NhdG9yKCk7IH0KCnByb3RlY3RlZDoKCgoKCgoKcHJvdGVjdGVk OgoKICBfTGlua190eXBlIF9NX2NyZWF0ZV9ub2RlKGNvbnN0IHZhbHVlX3R5cGUmIF9feCkKICB7 CiAgICBfTGlua190eXBlIF9fdG1wID0gX01fZ2V0X25vZGUoKTsKICAgICAgICAgICAgICB7CiAg ICAgIGNvbnN0cnVjdCgmX190bXAtPl9NX3ZhbHVlX2ZpZWxkLCBfX3gpOwogICAgfQogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICByZXR1cm4gX190bXA7CiAgfQoKICBf TGlua190eXBlIF9NX2Nsb25lX25vZGUoX0xpbmtfdHlwZSBfX3gpCiAgewogICAgX0xpbmtfdHlw ZSBfX3RtcCA9IF9NX2NyZWF0ZV9ub2RlKF9feC0+X01fdmFsdWVfZmllbGQpOwogICAgX190bXAt Pl9NX2NvbG9yID0gX194LT5fTV9jb2xvcjsKICAgIF9fdG1wLT5fTV9sZWZ0ID0gMDsKICAgIF9f dG1wLT5fTV9yaWdodCA9IDA7CiAgICByZXR1cm4gX190bXA7CiAgfQoKICB2b2lkIGRlc3Ryb3lf bm9kZShfTGlua190eXBlIF9fcCkKICB7CiAgICBkZXN0cm95KCZfX3AtPl9NX3ZhbHVlX2ZpZWxk KTsKICAgIF9NX3B1dF9ub2RlKF9fcCk7CiAgfQoKcHJvdGVjdGVkOgogIHNpemVfdHlwZSBfTV9u b2RlX2NvdW50OwogIF9Db21wYXJlIF9NX2tleV9jb21wYXJlOwoKICBfTGlua190eXBlJiBfTV9y b290KCkgY29uc3QKICAgIHsgcmV0dXJuIChfTGlua190eXBlJikgX01faGVhZGVyLT5fTV9wYXJl bnQ7IH0KICBfTGlua190eXBlJiBfTV9sZWZ0bW9zdCgpIGNvbnN0CiAgICB7IHJldHVybiAoX0xp bmtfdHlwZSYpIF9NX2hlYWRlci0+X01fbGVmdDsgfQogIF9MaW5rX3R5cGUmIF9NX3JpZ2h0bW9z dCgpIGNvbnN0CiAgICB7IHJldHVybiAoX0xpbmtfdHlwZSYpIF9NX2hlYWRlci0+X01fcmlnaHQ7 IH0KCiAgc3RhdGljIF9MaW5rX3R5cGUmIF9TX2xlZnQoX0xpbmtfdHlwZSBfX3gpCiAgICB7IHJl dHVybiAoX0xpbmtfdHlwZSYpKF9feC0+X01fbGVmdCk7IH0KICBzdGF0aWMgX0xpbmtfdHlwZSYg X1NfcmlnaHQoX0xpbmtfdHlwZSBfX3gpCiAgICB7IHJldHVybiAoX0xpbmtfdHlwZSYpKF9feC0+ X01fcmlnaHQpOyB9CiAgc3RhdGljIF9MaW5rX3R5cGUmIF9TX3BhcmVudChfTGlua190eXBlIF9f eCkKICAgIHsgcmV0dXJuIChfTGlua190eXBlJikoX194LT5fTV9wYXJlbnQpOyB9CiAgc3RhdGlj IHJlZmVyZW5jZSBfU192YWx1ZShfTGlua190eXBlIF9feCkKICAgIHsgcmV0dXJuIF9feC0+X01f dmFsdWVfZmllbGQ7IH0KICBzdGF0aWMgY29uc3QgX0tleSYgX1Nfa2V5KF9MaW5rX3R5cGUgX194 KQogICAgeyByZXR1cm4gX0tleU9mVmFsdWUoKShfU192YWx1ZShfX3gpKTsgfQogIHN0YXRpYyBf Q29sb3JfdHlwZSYgX1NfY29sb3IoX0xpbmtfdHlwZSBfX3gpCiAgICB7IHJldHVybiAoX0NvbG9y X3R5cGUmKShfX3gtPl9NX2NvbG9yKTsgfQoKICBzdGF0aWMgX0xpbmtfdHlwZSYgX1NfbGVmdChf QmFzZV9wdHIgX194KQogICAgeyByZXR1cm4gKF9MaW5rX3R5cGUmKShfX3gtPl9NX2xlZnQpOyB9 CiAgc3RhdGljIF9MaW5rX3R5cGUmIF9TX3JpZ2h0KF9CYXNlX3B0ciBfX3gpCiAgICB7IHJldHVy biAoX0xpbmtfdHlwZSYpKF9feC0+X01fcmlnaHQpOyB9CiAgc3RhdGljIF9MaW5rX3R5cGUmIF9T X3BhcmVudChfQmFzZV9wdHIgX194KQogICAgeyByZXR1cm4gKF9MaW5rX3R5cGUmKShfX3gtPl9N X3BhcmVudCk7IH0KICBzdGF0aWMgcmVmZXJlbmNlIF9TX3ZhbHVlKF9CYXNlX3B0ciBfX3gpCiAg ICB7IHJldHVybiAoKF9MaW5rX3R5cGUpX194KS0+X01fdmFsdWVfZmllbGQ7IH0KICBzdGF0aWMg Y29uc3QgX0tleSYgX1Nfa2V5KF9CYXNlX3B0ciBfX3gpCiAgICB7IHJldHVybiBfS2V5T2ZWYWx1 ZSgpKF9TX3ZhbHVlKF9MaW5rX3R5cGUoX194KSkpO30KICBzdGF0aWMgX0NvbG9yX3R5cGUmIF9T X2NvbG9yKF9CYXNlX3B0ciBfX3gpCiAgICB7IHJldHVybiAoX0NvbG9yX3R5cGUmKShfTGlua190 eXBlKF9feCktPl9NX2NvbG9yKTsgfQoKICBzdGF0aWMgX0xpbmtfdHlwZSBfU19taW5pbXVtKF9M aW5rX3R5cGUgX194KQogICAgeyByZXR1cm4gKF9MaW5rX3R5cGUpIF9SYl90cmVlX25vZGVfYmFz ZTo6X1NfbWluaW11bShfX3gpOyB9CgogIHN0YXRpYyBfTGlua190eXBlIF9TX21heGltdW0oX0xp bmtfdHlwZSBfX3gpCiAgICB7IHJldHVybiAoX0xpbmtfdHlwZSkgX1JiX3RyZWVfbm9kZV9iYXNl OjpfU19tYXhpbXVtKF9feCk7IH0KCnB1YmxpYzoKICB0eXBlZGVmIF9SYl90cmVlX2l0ZXJhdG9y PHZhbHVlX3R5cGUsIHJlZmVyZW5jZSwgcG9pbnRlcj4gaXRlcmF0b3I7CiAgdHlwZWRlZiBfUmJf dHJlZV9pdGVyYXRvcjx2YWx1ZV90eXBlLCBjb25zdF9yZWZlcmVuY2UsIGNvbnN0X3BvaW50ZXI+ CiAgICAgICAgICBjb25zdF9pdGVyYXRvcjsKCgoKCgogIHR5cGVkZWYgcmV2ZXJzZV9iaWRpcmVj dGlvbmFsX2l0ZXJhdG9yPGl0ZXJhdG9yLCB2YWx1ZV90eXBlLCByZWZlcmVuY2UsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlmZmVyZW5jZV90eXBlPgogICAgICAg ICAgcmV2ZXJzZV9pdGVyYXRvcjsKICB0eXBlZGVmIHJldmVyc2VfYmlkaXJlY3Rpb25hbF9pdGVy YXRvcjxjb25zdF9pdGVyYXRvciwgdmFsdWVfdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBjb25zdF9yZWZlcmVuY2UsIGRpZmZlcmVuY2VfdHlwZT4KICAgICAg ICAgIGNvbnN0X3JldmVyc2VfaXRlcmF0b3I7CgoKcHJpdmF0ZToKICBpdGVyYXRvciBfTV9pbnNl cnQoX0Jhc2VfcHRyIF9feCwgX0Jhc2VfcHRyIF9feSwgY29uc3QgdmFsdWVfdHlwZSYgX192KTsK ICBfTGlua190eXBlIF9NX2NvcHkoX0xpbmtfdHlwZSBfX3gsIF9MaW5rX3R5cGUgX19wKTsKICB2 b2lkIF9NX2VyYXNlKF9MaW5rX3R5cGUgX194KTsKCnB1YmxpYzoKCiAgX1JiX3RyZWUoKQogICAg OiBfQmFzZShhbGxvY2F0b3JfdHlwZSgpKSwgX01fbm9kZV9jb3VudCgwKSwgX01fa2V5X2NvbXBh cmUoKQogICAgeyBfTV9lbXB0eV9pbml0aWFsaXplKCk7IH0KCiAgX1JiX3RyZWUoY29uc3QgX0Nv bXBhcmUmIF9fY29tcCkKICAgIDogX0Jhc2UoYWxsb2NhdG9yX3R5cGUoKSksIF9NX25vZGVfY291 bnQoMCksIF9NX2tleV9jb21wYXJlKF9fY29tcCkKICAgIHsgX01fZW1wdHlfaW5pdGlhbGl6ZSgp OyB9CgogIF9SYl90cmVlKGNvbnN0IF9Db21wYXJlJiBfX2NvbXAsIGNvbnN0IGFsbG9jYXRvcl90 eXBlJiBfX2EpCiAgICA6IF9CYXNlKF9fYSksIF9NX25vZGVfY291bnQoMCksIF9NX2tleV9jb21w YXJlKF9fY29tcCkKICAgIHsgX01fZW1wdHlfaW5pdGlhbGl6ZSgpOyB9CgogIF9SYl90cmVlKGNv bnN0IF9SYl90cmVlPF9LZXksX1ZhbHVlLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4mIF9f eCkKICAgIDogX0Jhc2UoX194LmdldF9hbGxvY2F0b3IoKSksCiAgICAgIF9NX25vZGVfY291bnQo MCksIF9NX2tleV9jb21wYXJlKF9feC5fTV9rZXlfY29tcGFyZSkKICB7CiAgICBpZiAoX194Ll9N X3Jvb3QoKSA9PSAwKQogICAgICBfTV9lbXB0eV9pbml0aWFsaXplKCk7CiAgICBlbHNlIHsKICAg ICAgX1NfY29sb3IoX01faGVhZGVyKSA9IF9TX3JiX3RyZWVfcmVkOwogICAgICBfTV9yb290KCkg PSBfTV9jb3B5KF9feC5fTV9yb290KCksIF9NX2hlYWRlcik7CiAgICAgIF9NX2xlZnRtb3N0KCkg PSBfU19taW5pbXVtKF9NX3Jvb3QoKSk7CiAgICAgIF9NX3JpZ2h0bW9zdCgpID0gX1NfbWF4aW11 bShfTV9yb290KCkpOwogICAgfQogICAgX01fbm9kZV9jb3VudCA9IF9feC5fTV9ub2RlX2NvdW50 OwogIH0KICB+X1JiX3RyZWUoKSB7IGNsZWFyKCk7IH0KICBfUmJfdHJlZTxfS2V5LF9WYWx1ZSxf S2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+JgogIG9wZXJhdG9yPShjb25zdCBfUmJfdHJlZTxf S2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+JiBfX3gpOwoKcHJpdmF0ZToK ICB2b2lkIF9NX2VtcHR5X2luaXRpYWxpemUoKSB7CiAgICBfU19jb2xvcihfTV9oZWFkZXIpID0g X1NfcmJfdHJlZV9yZWQ7CgogICAgX01fcm9vdCgpID0gMDsKICAgIF9NX2xlZnRtb3N0KCkgPSBf TV9oZWFkZXI7CiAgICBfTV9yaWdodG1vc3QoKSA9IF9NX2hlYWRlcjsKICB9CgpwdWJsaWM6Cgog IF9Db21wYXJlIGtleV9jb21wKCkgY29uc3QgeyByZXR1cm4gX01fa2V5X2NvbXBhcmU7IH0KICBp dGVyYXRvciBiZWdpbigpIHsgcmV0dXJuIF9NX2xlZnRtb3N0KCk7IH0KICBjb25zdF9pdGVyYXRv ciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIF9NX2xlZnRtb3N0KCk7IH0KICBpdGVyYXRvciBlbmQo KSB7IHJldHVybiBfTV9oZWFkZXI7IH0KICBjb25zdF9pdGVyYXRvciBlbmQoKSBjb25zdCB7IHJl dHVybiBfTV9oZWFkZXI7IH0KICByZXZlcnNlX2l0ZXJhdG9yIHJiZWdpbigpIHsgcmV0dXJuIHJl dmVyc2VfaXRlcmF0b3IoZW5kKCkpOyB9CiAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvciByYmVnaW4o KSBjb25zdCB7CiAgICByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcihlbmQoKSk7CiAgfQog IHJldmVyc2VfaXRlcmF0b3IgcmVuZCgpIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IoYmVnaW4o KSk7IH0KICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIHJlbmQoKSBjb25zdCB7CiAgICByZXR1cm4g Y29uc3RfcmV2ZXJzZV9pdGVyYXRvcihiZWdpbigpKTsKICB9CiAgYm9vbCBlbXB0eSgpIGNvbnN0 IHsgcmV0dXJuIF9NX25vZGVfY291bnQgPT0gMDsgfQogIHNpemVfdHlwZSBzaXplKCkgY29uc3Qg eyByZXR1cm4gX01fbm9kZV9jb3VudDsgfQogIHNpemVfdHlwZSBtYXhfc2l6ZSgpIGNvbnN0IHsg cmV0dXJuIHNpemVfdHlwZSgtMSk7IH0KCiAgdm9pZCBzd2FwKF9SYl90cmVlPF9LZXksX1ZhbHVl LF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4mIF9fdCkgewogICAgICAgICA6OnN3YXAoX01f aGVhZGVyLCBfX3QuX01faGVhZGVyKTsKICAgICAgICAgOjpzd2FwKF9NX25vZGVfY291bnQsIF9f dC5fTV9ub2RlX2NvdW50KTsKICAgICAgICAgOjpzd2FwKF9NX2tleV9jb21wYXJlLCBfX3QuX01f a2V5X2NvbXBhcmUpOwogIH0KCnB1YmxpYzoKCiAgcGFpcjxpdGVyYXRvcixib29sPiBpbnNlcnRf dW5pcXVlKGNvbnN0IHZhbHVlX3R5cGUmIF9feCk7CiAgaXRlcmF0b3IgaW5zZXJ0X2VxdWFsKGNv bnN0IHZhbHVlX3R5cGUmIF9feCk7CgogIGl0ZXJhdG9yIGluc2VydF91bmlxdWUoaXRlcmF0b3Ig X19wb3NpdGlvbiwgY29uc3QgdmFsdWVfdHlwZSYgX194KTsKICBpdGVyYXRvciBpbnNlcnRfZXF1 YWwoaXRlcmF0b3IgX19wb3NpdGlvbiwgY29uc3QgdmFsdWVfdHlwZSYgX194KTsKCgoKCgoKCiAg dm9pZCBpbnNlcnRfdW5pcXVlKGNvbnN0X2l0ZXJhdG9yIF9fZmlyc3QsIGNvbnN0X2l0ZXJhdG9y IF9fbGFzdCk7CiAgdm9pZCBpbnNlcnRfdW5pcXVlKGNvbnN0IHZhbHVlX3R5cGUqIF9fZmlyc3Qs IGNvbnN0IHZhbHVlX3R5cGUqIF9fbGFzdCk7CiAgdm9pZCBpbnNlcnRfZXF1YWwoY29uc3RfaXRl cmF0b3IgX19maXJzdCwgY29uc3RfaXRlcmF0b3IgX19sYXN0KTsKICB2b2lkIGluc2VydF9lcXVh bChjb25zdCB2YWx1ZV90eXBlKiBfX2ZpcnN0LCBjb25zdCB2YWx1ZV90eXBlKiBfX2xhc3QpOwoK CiAgdm9pZCBlcmFzZShpdGVyYXRvciBfX3Bvc2l0aW9uKTsKICBzaXplX3R5cGUgZXJhc2UoY29u c3Qga2V5X3R5cGUmIF9feCk7CiAgdm9pZCBlcmFzZShpdGVyYXRvciBfX2ZpcnN0LCBpdGVyYXRv ciBfX2xhc3QpOwogIHZvaWQgZXJhc2UoY29uc3Qga2V5X3R5cGUqIF9fZmlyc3QsIGNvbnN0IGtl eV90eXBlKiBfX2xhc3QpOwogIHZvaWQgY2xlYXIoKSB7CiAgICBpZiAoX01fbm9kZV9jb3VudCAh PSAwKSB7CiAgICAgIF9NX2VyYXNlKF9NX3Jvb3QoKSk7CiAgICAgIF9NX2xlZnRtb3N0KCkgPSBf TV9oZWFkZXI7CiAgICAgIF9NX3Jvb3QoKSA9IDA7CiAgICAgIF9NX3JpZ2h0bW9zdCgpID0gX01f aGVhZGVyOwogICAgICBfTV9ub2RlX2NvdW50ID0gMDsKICAgIH0KICB9CgpwdWJsaWM6CgogIGl0 ZXJhdG9yIGZpbmQoY29uc3Qga2V5X3R5cGUmIF9feCk7CiAgY29uc3RfaXRlcmF0b3IgZmluZChj b25zdCBrZXlfdHlwZSYgX194KSBjb25zdDsKICBzaXplX3R5cGUgY291bnQoY29uc3Qga2V5X3R5 cGUmIF9feCkgY29uc3Q7CiAgaXRlcmF0b3IgbG93ZXJfYm91bmQoY29uc3Qga2V5X3R5cGUmIF9f eCk7CiAgY29uc3RfaXRlcmF0b3IgbG93ZXJfYm91bmQoY29uc3Qga2V5X3R5cGUmIF9feCkgY29u c3Q7CiAgaXRlcmF0b3IgdXBwZXJfYm91bmQoY29uc3Qga2V5X3R5cGUmIF9feCk7CiAgY29uc3Rf aXRlcmF0b3IgdXBwZXJfYm91bmQoY29uc3Qga2V5X3R5cGUmIF9feCkgY29uc3Q7CiAgcGFpcjxp dGVyYXRvcixpdGVyYXRvcj4gZXF1YWxfcmFuZ2UoY29uc3Qga2V5X3R5cGUmIF9feCk7CiAgcGFp cjxjb25zdF9pdGVyYXRvciwgY29uc3RfaXRlcmF0b3I+IGVxdWFsX3JhbmdlKGNvbnN0IGtleV90 eXBlJiBfX3gpIGNvbnN0OwoKcHVibGljOgoKICBib29sIF9fcmJfdmVyaWZ5KCkgY29uc3Q7Cn07 Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1ZhbHVlLCBjbGFzcyBfS2V5T2ZWYWx1ZSwK ICAgICAgICAgIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sCm9wZXJh dG9yPT0oY29uc3QgX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0Fs bG9jPiYgX194LAogICAgICAgICAgIGNvbnN0IF9SYl90cmVlPF9LZXksX1ZhbHVlLF9LZXlPZlZh bHVlLF9Db21wYXJlLF9BbGxvYz4mIF9feSkKewogIHJldHVybiBfX3guc2l6ZSgpID09IF9feS5z aXplKCkgJiYKICAgICAgICAgZXF1YWwoX194LmJlZ2luKCksIF9feC5lbmQoKSwgX195LmJlZ2lu KCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1ZhbHVlLCBjbGFzcyBfS2V5T2ZW YWx1ZSwKICAgICAgICAgIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29s Cm9wZXJhdG9yPChjb25zdCBfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFy ZSxfQWxsb2M+JiBfX3gsCiAgICAgICAgICBjb25zdCBfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5 T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpCnsKICByZXR1cm4gbGV4aWNvZ3JhcGhpY2Fs X2NvbXBhcmUoX194LmJlZ2luKCksIF9feC5lbmQoKSwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgX195LmJlZ2luKCksIF9feS5lbmQoKSk7Cn0KIyA3OTMgIi91c3IvaW5jbHVkZS9n KystMy9zdGxfdHJlZS5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVmFsdWUsIGNs YXNzIF9LZXlPZlZhbHVlLAogICAgICAgICAgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4K X1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPiYKX1JiX3Ry ZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPgogIDo6b3BlcmF0b3I9 KGNvbnN0IF9SYl90cmVlPF9LZXksX1ZhbHVlLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4m IF9feCkKewogIGlmICh0aGlzICE9ICZfX3gpIHsKCiAgICBjbGVhcigpOwogICAgX01fbm9kZV9j b3VudCA9IDA7CiAgICBfTV9rZXlfY29tcGFyZSA9IF9feC5fTV9rZXlfY29tcGFyZTsKICAgIGlm IChfX3guX01fcm9vdCgpID09IDApIHsKICAgICAgX01fcm9vdCgpID0gMDsKICAgICAgX01fbGVm dG1vc3QoKSA9IF9NX2hlYWRlcjsKICAgICAgX01fcmlnaHRtb3N0KCkgPSBfTV9oZWFkZXI7CiAg ICB9CiAgICBlbHNlIHsKICAgICAgX01fcm9vdCgpID0gX01fY29weShfX3guX01fcm9vdCgpLCBf TV9oZWFkZXIpOwogICAgICBfTV9sZWZ0bW9zdCgpID0gX1NfbWluaW11bShfTV9yb290KCkpOwog ICAgICBfTV9yaWdodG1vc3QoKSA9IF9TX21heGltdW0oX01fcm9vdCgpKTsKICAgICAgX01fbm9k ZV9jb3VudCA9IF9feC5fTV9ub2RlX2NvdW50OwogICAgfQogIH0KICByZXR1cm4gKnRoaXM7Cn0K CnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVmFsdWUsIGNsYXNzIF9LZXlPZlZhbHVlLAog ICAgICAgICAgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KdHlwZW5hbWUgX1JiX3RyZWU8 X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6aXRlcmF0b3IKX1JiX3Ry ZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPgogIDo6X01faW5zZXJ0 KF9CYXNlX3B0ciBfX3hfLCBfQmFzZV9wdHIgX195XywgY29uc3QgX1ZhbHVlJiBfX3YpCnsKICBf TGlua190eXBlIF9feCA9IChfTGlua190eXBlKSBfX3hfOwogIF9MaW5rX3R5cGUgX195ID0gKF9M aW5rX3R5cGUpIF9feV87CiAgX0xpbmtfdHlwZSBfX3o7CgogIGlmIChfX3kgPT0gX01faGVhZGVy IHx8IF9feCAhPSAwIHx8CiAgICAgIF9NX2tleV9jb21wYXJlKF9LZXlPZlZhbHVlKCkoX192KSwg X1Nfa2V5KF9feSkpKSB7CiAgICBfX3ogPSBfTV9jcmVhdGVfbm9kZShfX3YpOwogICAgX1NfbGVm dChfX3kpID0gX196OwoKICAgIGlmIChfX3kgPT0gX01faGVhZGVyKSB7CiAgICAgIF9NX3Jvb3Qo KSA9IF9fejsKICAgICAgX01fcmlnaHRtb3N0KCkgPSBfX3o7CiAgICB9CiAgICBlbHNlIGlmIChf X3kgPT0gX01fbGVmdG1vc3QoKSkKICAgICAgX01fbGVmdG1vc3QoKSA9IF9fejsKICB9CiAgZWxz ZSB7CiAgICBfX3ogPSBfTV9jcmVhdGVfbm9kZShfX3YpOwogICAgX1NfcmlnaHQoX195KSA9IF9f ejsKICAgIGlmIChfX3kgPT0gX01fcmlnaHRtb3N0KCkpCiAgICAgIF9NX3JpZ2h0bW9zdCgpID0g X196OwogIH0KICBfU19wYXJlbnQoX196KSA9IF9feTsKICBfU19sZWZ0KF9feikgPSAwOwogIF9T X3JpZ2h0KF9feikgPSAwOwogIF9SYl90cmVlX3JlYmFsYW5jZShfX3osIF9NX2hlYWRlci0+X01f cGFyZW50KTsKICArK19NX25vZGVfY291bnQ7CiAgcmV0dXJuIGl0ZXJhdG9yKF9feik7Cn0KCnRl bXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVmFsdWUsIGNsYXNzIF9LZXlPZlZhbHVlLAogICAg ICAgICAgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KdHlwZW5hbWUgX1JiX3RyZWU8X0tl eSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6aXRlcmF0b3IKX1JiX3RyZWU8 X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPgogIDo6aW5zZXJ0X2VxdWFs KGNvbnN0IF9WYWx1ZSYgX192KQp7CiAgX0xpbmtfdHlwZSBfX3kgPSBfTV9oZWFkZXI7CiAgX0xp bmtfdHlwZSBfX3ggPSBfTV9yb290KCk7CiAgd2hpbGUgKF9feCAhPSAwKSB7CiAgICBfX3kgPSBf X3g7CiAgICBfX3ggPSBfTV9rZXlfY29tcGFyZShfS2V5T2ZWYWx1ZSgpKF9fdiksIF9TX2tleShf X3gpKSA/CiAgICAgICAgICAgIF9TX2xlZnQoX194KSA6IF9TX3JpZ2h0KF9feCk7CiAgfQogIHJl dHVybiBfTV9pbnNlcnQoX194LCBfX3ksIF9fdik7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwg Y2xhc3MgX1ZhbHVlLCBjbGFzcyBfS2V5T2ZWYWx1ZSwKICAgICAgICAgIGNsYXNzIF9Db21wYXJl LCBjbGFzcyBfQWxsb2M+CnBhaXI8dHlwZW5hbWUgX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9m VmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6aXRlcmF0b3IsCiAgICAgYm9vbD4KX1JiX3RyZWU8X0tl eSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPgogIDo6aW5zZXJ0X3VuaXF1ZShj b25zdCBfVmFsdWUmIF9fdikKewogIF9MaW5rX3R5cGUgX195ID0gX01faGVhZGVyOwogIF9MaW5r X3R5cGUgX194ID0gX01fcm9vdCgpOwogIGJvb2wgX19jb21wID0gdHJ1ZTsKICB3aGlsZSAoX194 ICE9IDApIHsKICAgIF9feSA9IF9feDsKICAgIF9fY29tcCA9IF9NX2tleV9jb21wYXJlKF9LZXlP ZlZhbHVlKCkoX192KSwgX1Nfa2V5KF9feCkpOwogICAgX194ID0gX19jb21wID8gX1NfbGVmdChf X3gpIDogX1NfcmlnaHQoX194KTsKICB9CiAgaXRlcmF0b3IgX19qID0gaXRlcmF0b3IoX195KTsK ICBpZiAoX19jb21wKQogICAgaWYgKF9faiA9PSBiZWdpbigpKQogICAgICByZXR1cm4gcGFpcjxp dGVyYXRvcixib29sPihfTV9pbnNlcnQoX194LCBfX3ksIF9fdiksIHRydWUpOwogICAgZWxzZQog ICAgICAtLV9fajsKICBpZiAoX01fa2V5X2NvbXBhcmUoX1Nfa2V5KF9fai5fTV9ub2RlKSwgX0tl eU9mVmFsdWUoKShfX3YpKSkKICAgIHJldHVybiBwYWlyPGl0ZXJhdG9yLGJvb2w+KF9NX2luc2Vy dChfX3gsIF9feSwgX192KSwgdHJ1ZSk7CiAgcmV0dXJuIHBhaXI8aXRlcmF0b3IsYm9vbD4oX19q LCBmYWxzZSk7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1ZhbCwgY2xhc3MgX0tl eU9mVmFsdWUsCiAgICAgICAgICBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgp0eXBlbmFt ZSBfUmJfdHJlZTxfS2V5LCBfVmFsLCBfS2V5T2ZWYWx1ZSwgX0NvbXBhcmUsIF9BbGxvYz46Oml0 ZXJhdG9yCl9SYl90cmVlPF9LZXksIF9WYWwsIF9LZXlPZlZhbHVlLCBfQ29tcGFyZSwgX0FsbG9j PgogIDo6aW5zZXJ0X3VuaXF1ZShpdGVyYXRvciBfX3Bvc2l0aW9uLCBjb25zdCBfVmFsJiBfX3Yp CnsKICBpZiAoX19wb3NpdGlvbi5fTV9ub2RlID09IF9NX2hlYWRlci0+X01fbGVmdCkgewogICAg aWYgKHNpemUoKSA+IDAgJiYKICAgICAgICBfTV9rZXlfY29tcGFyZShfS2V5T2ZWYWx1ZSgpKF9f diksIF9TX2tleShfX3Bvc2l0aW9uLl9NX25vZGUpKSkKICAgICAgcmV0dXJuIF9NX2luc2VydChf X3Bvc2l0aW9uLl9NX25vZGUsIF9fcG9zaXRpb24uX01fbm9kZSwgX192KTsKCiAgICBlbHNlCiAg ICAgIHJldHVybiBpbnNlcnRfdW5pcXVlKF9fdikuZmlyc3Q7CiAgfSBlbHNlIGlmIChfX3Bvc2l0 aW9uLl9NX25vZGUgPT0gX01faGVhZGVyKSB7CiAgICBpZiAoX01fa2V5X2NvbXBhcmUoX1Nfa2V5 KF9NX3JpZ2h0bW9zdCgpKSwgX0tleU9mVmFsdWUoKShfX3YpKSkKICAgICAgcmV0dXJuIF9NX2lu c2VydCgwLCBfTV9yaWdodG1vc3QoKSwgX192KTsKICAgIGVsc2UKICAgICAgcmV0dXJuIGluc2Vy dF91bmlxdWUoX192KS5maXJzdDsKICB9IGVsc2UgewogICAgaXRlcmF0b3IgX19iZWZvcmUgPSBf X3Bvc2l0aW9uOwogICAgLS1fX2JlZm9yZTsKICAgIGlmIChfTV9rZXlfY29tcGFyZShfU19rZXko X19iZWZvcmUuX01fbm9kZSksIF9LZXlPZlZhbHVlKCkoX192KSkKICAgICAgICAmJiBfTV9rZXlf Y29tcGFyZShfS2V5T2ZWYWx1ZSgpKF9fdiksIF9TX2tleShfX3Bvc2l0aW9uLl9NX25vZGUpKSkg ewogICAgICBpZiAoX1NfcmlnaHQoX19iZWZvcmUuX01fbm9kZSkgPT0gMCkKICAgICAgICByZXR1 cm4gX01faW5zZXJ0KDAsIF9fYmVmb3JlLl9NX25vZGUsIF9fdik7CiAgICAgIGVsc2UKICAgICAg ICByZXR1cm4gX01faW5zZXJ0KF9fcG9zaXRpb24uX01fbm9kZSwgX19wb3NpdGlvbi5fTV9ub2Rl LCBfX3YpOwoKICAgIH0gZWxzZQogICAgICByZXR1cm4gaW5zZXJ0X3VuaXF1ZShfX3YpLmZpcnN0 OwogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9WYWwsIGNsYXNzIF9LZXlPZlZh bHVlLAogICAgICAgICAgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KdHlwZW5hbWUgX1Ji X3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46Oml0ZXJhdG9yCl9S Yl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+CiAgOjppbnNlcnRf ZXF1YWwoaXRlcmF0b3IgX19wb3NpdGlvbiwgY29uc3QgX1ZhbCYgX192KQp7CiAgaWYgKF9fcG9z aXRpb24uX01fbm9kZSA9PSBfTV9oZWFkZXItPl9NX2xlZnQpIHsKICAgIGlmIChzaXplKCkgPiAw ICYmCiAgICAgICAgX01fa2V5X2NvbXBhcmUoX0tleU9mVmFsdWUoKShfX3YpLCBfU19rZXkoX19w b3NpdGlvbi5fTV9ub2RlKSkpCiAgICAgIHJldHVybiBfTV9pbnNlcnQoX19wb3NpdGlvbi5fTV9u b2RlLCBfX3Bvc2l0aW9uLl9NX25vZGUsIF9fdik7CgogICAgZWxzZQogICAgICByZXR1cm4gaW5z ZXJ0X2VxdWFsKF9fdik7CiAgfSBlbHNlIGlmIChfX3Bvc2l0aW9uLl9NX25vZGUgPT0gX01faGVh ZGVyKSB7CiAgICBpZiAoIV9NX2tleV9jb21wYXJlKF9LZXlPZlZhbHVlKCkoX192KSwgX1Nfa2V5 KF9NX3JpZ2h0bW9zdCgpKSkpCiAgICAgIHJldHVybiBfTV9pbnNlcnQoMCwgX01fcmlnaHRtb3N0 KCksIF9fdik7CiAgICBlbHNlCiAgICAgIHJldHVybiBpbnNlcnRfZXF1YWwoX192KTsKICB9IGVs c2UgewogICAgaXRlcmF0b3IgX19iZWZvcmUgPSBfX3Bvc2l0aW9uOwogICAgLS1fX2JlZm9yZTsK ICAgIGlmICghX01fa2V5X2NvbXBhcmUoX0tleU9mVmFsdWUoKShfX3YpLCBfU19rZXkoX19iZWZv cmUuX01fbm9kZSkpCiAgICAgICAgJiYgIV9NX2tleV9jb21wYXJlKF9TX2tleShfX3Bvc2l0aW9u Ll9NX25vZGUpLCBfS2V5T2ZWYWx1ZSgpKF9fdikpKSB7CiAgICAgIGlmIChfU19yaWdodChfX2Jl Zm9yZS5fTV9ub2RlKSA9PSAwKQogICAgICAgIHJldHVybiBfTV9pbnNlcnQoMCwgX19iZWZvcmUu X01fbm9kZSwgX192KTsKICAgICAgZWxzZQogICAgICAgIHJldHVybiBfTV9pbnNlcnQoX19wb3Np dGlvbi5fTV9ub2RlLCBfX3Bvc2l0aW9uLl9NX25vZGUsIF9fdik7CgogICAgfSBlbHNlCiAgICAg IHJldHVybiBpbnNlcnRfZXF1YWwoX192KTsKICB9Cn0KIyA5ODYgIi91c3IvaW5jbHVkZS9nKyst My9zdGxfdHJlZS5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVmFsLCBjbGFzcyBf S29WLCBjbGFzcyBfQ21wLCBjbGFzcyBfQWxsb2M+CnZvaWQKX1JiX3RyZWU8X0tleSxfVmFsLF9L b1YsX0NtcCxfQWxsb2M+CiAgOjppbnNlcnRfZXF1YWwoY29uc3QgX1ZhbCogX19maXJzdCwgY29u c3QgX1ZhbCogX19sYXN0KQp7CiAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0 KQogICAgaW5zZXJ0X2VxdWFsKCpfX2ZpcnN0KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNs YXNzIF9WYWwsIGNsYXNzIF9Lb1YsIGNsYXNzIF9DbXAsIGNsYXNzIF9BbGxvYz4Kdm9pZApfUmJf dHJlZTxfS2V5LF9WYWwsX0tvVixfQ21wLF9BbGxvYz4KICA6Omluc2VydF9lcXVhbChjb25zdF9p dGVyYXRvciBfX2ZpcnN0LCBjb25zdF9pdGVyYXRvciBfX2xhc3QpCnsKICBmb3IgKCA7IF9fZmly c3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAgICBpbnNlcnRfZXF1YWwoKl9fZmlyc3QpOwp9Cgp0 ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1ZhbCwgY2xhc3MgX0tvViwgY2xhc3MgX0NtcCwg Y2xhc3MgX0FsbG9jPgp2b2lkCl9SYl90cmVlPF9LZXksX1ZhbCxfS29WLF9DbXAsX0FsbG9jPgog IDo6aW5zZXJ0X3VuaXF1ZShjb25zdCBfVmFsKiBfX2ZpcnN0LCBjb25zdCBfVmFsKiBfX2xhc3Qp CnsKICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAgICBpbnNlcnRfdW5p cXVlKCpfX2ZpcnN0KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9WYWwsIGNsYXNz IF9Lb1YsIGNsYXNzIF9DbXAsIGNsYXNzIF9BbGxvYz4Kdm9pZCBfUmJfdHJlZTxfS2V5LF9WYWws X0tvVixfQ21wLF9BbGxvYz4KICA6Omluc2VydF91bmlxdWUoY29uc3RfaXRlcmF0b3IgX19maXJz dCwgY29uc3RfaXRlcmF0b3IgX19sYXN0KQp7CiAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsg KytfX2ZpcnN0KQogICAgaW5zZXJ0X3VuaXF1ZSgqX19maXJzdCk7Cn0KCgoKdGVtcGxhdGUgPGNs YXNzIF9LZXksIGNsYXNzIF9WYWx1ZSwgY2xhc3MgX0tleU9mVmFsdWUsCiAgICAgICAgICBjbGFz cyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgppbmxpbmUgdm9pZCBfUmJfdHJlZTxfS2V5LF9WYWx1 ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+CiAgOjplcmFzZShpdGVyYXRvciBfX3Bvc2l0 aW9uKQp7CiAgX0xpbmtfdHlwZSBfX3kgPQogICAgKF9MaW5rX3R5cGUpIF9SYl90cmVlX3JlYmFs YW5jZV9mb3JfZXJhc2UoX19wb3NpdGlvbi5fTV9ub2RlLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgX01faGVhZGVyLT5fTV9wYXJlbnQsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTV9oZWFkZXItPl9NX2xlZnQsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTV9oZWFkZXItPl9N X3JpZ2h0KTsKICBkZXN0cm95X25vZGUoX195KTsKICAtLV9NX25vZGVfY291bnQ7Cn0KCnRlbXBs YXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVmFsdWUsIGNsYXNzIF9LZXlPZlZhbHVlLAogICAgICAg ICAgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KdHlwZW5hbWUgX1JiX3RyZWU8X0tleSxf VmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6c2l6ZV90eXBlCl9SYl90cmVlPF9L ZXksX1ZhbHVlLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46OmVyYXNlKGNvbnN0IF9LZXkm IF9feCkKewogIHBhaXI8aXRlcmF0b3IsaXRlcmF0b3I+IF9fcCA9IGVxdWFsX3JhbmdlKF9feCk7 CiAgc2l6ZV90eXBlIF9fbiA9IDA7CiAgZGlzdGFuY2UoX19wLmZpcnN0LCBfX3Auc2Vjb25kLCBf X24pOwogIGVyYXNlKF9fcC5maXJzdCwgX19wLnNlY29uZCk7CiAgcmV0dXJuIF9fbjsKfQoKdGVt cGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9WYWwsIGNsYXNzIF9Lb1YsIGNsYXNzIF9Db21wYXJl LCBjbGFzcyBfQWxsb2M+CnR5cGVuYW1lIF9SYl90cmVlPF9LZXksIF9WYWwsIF9Lb1YsIF9Db21w YXJlLCBfQWxsb2M+OjpfTGlua190eXBlCl9SYl90cmVlPF9LZXksX1ZhbCxfS29WLF9Db21wYXJl LF9BbGxvYz4KICA6Ol9NX2NvcHkoX0xpbmtfdHlwZSBfX3gsIF9MaW5rX3R5cGUgX19wKQp7Cgog IF9MaW5rX3R5cGUgX190b3AgPSBfTV9jbG9uZV9ub2RlKF9feCk7CiAgX190b3AtPl9NX3BhcmVu dCA9IF9fcDsKCiAgICAgICAgICAgIHsKICAgIGlmIChfX3gtPl9NX3JpZ2h0KQogICAgICBfX3Rv cC0+X01fcmlnaHQgPSBfTV9jb3B5KF9TX3JpZ2h0KF9feCksIF9fdG9wKTsKICAgIF9fcCA9IF9f dG9wOwogICAgX194ID0gX1NfbGVmdChfX3gpOwoKICAgIHdoaWxlIChfX3ggIT0gMCkgewogICAg ICBfTGlua190eXBlIF9feSA9IF9NX2Nsb25lX25vZGUoX194KTsKICAgICAgX19wLT5fTV9sZWZ0 ID0gX195OwogICAgICBfX3ktPl9NX3BhcmVudCA9IF9fcDsKICAgICAgaWYgKF9feC0+X01fcmln aHQpCiAgICAgICAgX195LT5fTV9yaWdodCA9IF9NX2NvcHkoX1NfcmlnaHQoX194KSwgX195KTsK ICAgICAgX19wID0gX195OwogICAgICBfX3ggPSBfU19sZWZ0KF9feCk7CiAgICB9CiAgfQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICByZXR1cm4gX190b3A7Cn0KCnRlbXBsYXRl IDxjbGFzcyBfS2V5LCBjbGFzcyBfVmFsdWUsIGNsYXNzIF9LZXlPZlZhbHVlLAogICAgICAgICAg Y2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4Kdm9pZCBfUmJfdHJlZTxfS2V5LF9WYWx1ZSxf S2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+CiAgOjpfTV9lcmFzZShfTGlua190eXBlIF9feCkK ewoKICB3aGlsZSAoX194ICE9IDApIHsKICAgIF9NX2VyYXNlKF9TX3JpZ2h0KF9feCkpOwogICAg X0xpbmtfdHlwZSBfX3kgPSBfU19sZWZ0KF9feCk7CiAgICBkZXN0cm95X25vZGUoX194KTsKICAg IF9feCA9IF9feTsKICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVmFsdWUsIGNs YXNzIF9LZXlPZlZhbHVlLAogICAgICAgICAgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4K dm9pZCBfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+CiAg OjplcmFzZShpdGVyYXRvciBfX2ZpcnN0LCBpdGVyYXRvciBfX2xhc3QpCnsKICBpZiAoX19maXJz dCA9PSBiZWdpbigpICYmIF9fbGFzdCA9PSBlbmQoKSkKICAgIGNsZWFyKCk7CiAgZWxzZQogICAg d2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KSBlcmFzZShfX2ZpcnN0KyspOwp9Cgp0ZW1wbGF0ZSA8 Y2xhc3MgX0tleSwgY2xhc3MgX1ZhbHVlLCBjbGFzcyBfS2V5T2ZWYWx1ZSwKICAgICAgICAgIGNs YXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CnZvaWQgX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tl eU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPgogIDo6ZXJhc2UoY29uc3QgX0tleSogX19maXJzdCwg Y29uc3QgX0tleSogX19sYXN0KQp7CiAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KSBlcmFzZSgq X19maXJzdCsrKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9WYWx1ZSwgY2xhc3Mg X0tleU9mVmFsdWUsCiAgICAgICAgICBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgp0eXBl bmFtZSBfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+Ojpp dGVyYXRvcgpfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+ OjpmaW5kKGNvbnN0IF9LZXkmIF9faykKewogIF9MaW5rX3R5cGUgX195ID0gX01faGVhZGVyOwog IF9MaW5rX3R5cGUgX194ID0gX01fcm9vdCgpOwoKICB3aGlsZSAoX194ICE9IDApCiAgICBpZiAo IV9NX2tleV9jb21wYXJlKF9TX2tleShfX3gpLCBfX2spKQogICAgICBfX3kgPSBfX3gsIF9feCA9 IF9TX2xlZnQoX194KTsKICAgIGVsc2UKICAgICAgX194ID0gX1NfcmlnaHQoX194KTsKCiAgaXRl cmF0b3IgX19qID0gaXRlcmF0b3IoX195KTsKICByZXR1cm4gKF9faiA9PSBlbmQoKSB8fCBfTV9r ZXlfY29tcGFyZShfX2ssIF9TX2tleShfX2ouX01fbm9kZSkpKSA/CiAgICAgZW5kKCkgOiBfX2o7 Cn0KCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVmFsdWUsIGNsYXNzIF9LZXlPZlZhbHVl LAogICAgICAgICAgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KdHlwZW5hbWUgX1JiX3Ry ZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6Y29uc3RfaXRlcmF0 b3IKX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6Zmlu ZChjb25zdCBfS2V5JiBfX2spIGNvbnN0CnsKICBfTGlua190eXBlIF9feSA9IF9NX2hlYWRlcjsK ICBfTGlua190eXBlIF9feCA9IF9NX3Jvb3QoKTsKCiAgd2hpbGUgKF9feCAhPSAwKSB7CiAgICBp ZiAoIV9NX2tleV9jb21wYXJlKF9TX2tleShfX3gpLCBfX2spKQogICAgICBfX3kgPSBfX3gsIF9f eCA9IF9TX2xlZnQoX194KTsKICAgIGVsc2UKICAgICAgX194ID0gX1NfcmlnaHQoX194KTsKICB9 CiAgY29uc3RfaXRlcmF0b3IgX19qID0gY29uc3RfaXRlcmF0b3IoX195KTsKICByZXR1cm4gKF9f aiA9PSBlbmQoKSB8fCBfTV9rZXlfY29tcGFyZShfX2ssIF9TX2tleShfX2ouX01fbm9kZSkpKSA/ CiAgICBlbmQoKSA6IF9fajsKfQoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9WYWx1ZSwg Y2xhc3MgX0tleU9mVmFsdWUsCiAgICAgICAgICBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9j Pgp0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxs b2M+OjpzaXplX3R5cGUKX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUs X0FsbG9jPgogIDo6Y291bnQoY29uc3QgX0tleSYgX19rKSBjb25zdAp7CiAgcGFpcjxjb25zdF9p dGVyYXRvciwgY29uc3RfaXRlcmF0b3I+IF9fcCA9IGVxdWFsX3JhbmdlKF9fayk7CiAgc2l6ZV90 eXBlIF9fbiA9IDA7CiAgZGlzdGFuY2UoX19wLmZpcnN0LCBfX3Auc2Vjb25kLCBfX24pOwogIHJl dHVybiBfX247Cn0KCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVmFsdWUsIGNsYXNzIF9L ZXlPZlZhbHVlLAogICAgICAgICAgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KdHlwZW5h bWUgX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6aXRl cmF0b3IKX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPgog IDo6bG93ZXJfYm91bmQoY29uc3QgX0tleSYgX19rKQp7CiAgX0xpbmtfdHlwZSBfX3kgPSBfTV9o ZWFkZXI7CiAgX0xpbmtfdHlwZSBfX3ggPSBfTV9yb290KCk7CgogIHdoaWxlIChfX3ggIT0gMCkK ICAgIGlmICghX01fa2V5X2NvbXBhcmUoX1Nfa2V5KF9feCksIF9faykpCiAgICAgIF9feSA9IF9f eCwgX194ID0gX1NfbGVmdChfX3gpOwogICAgZWxzZQogICAgICBfX3ggPSBfU19yaWdodChfX3gp OwoKICByZXR1cm4gaXRlcmF0b3IoX195KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNz IF9WYWx1ZSwgY2xhc3MgX0tleU9mVmFsdWUsCiAgICAgICAgICBjbGFzcyBfQ29tcGFyZSwgY2xh c3MgX0FsbG9jPgp0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29t cGFyZSxfQWxsb2M+Ojpjb25zdF9pdGVyYXRvcgpfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZW YWx1ZSxfQ29tcGFyZSxfQWxsb2M+CiAgOjpsb3dlcl9ib3VuZChjb25zdCBfS2V5JiBfX2spIGNv bnN0CnsKICBfTGlua190eXBlIF9feSA9IF9NX2hlYWRlcjsKICBfTGlua190eXBlIF9feCA9IF9N X3Jvb3QoKTsKCiAgd2hpbGUgKF9feCAhPSAwKQogICAgaWYgKCFfTV9rZXlfY29tcGFyZShfU19r ZXkoX194KSwgX19rKSkKICAgICAgX195ID0gX194LCBfX3ggPSBfU19sZWZ0KF9feCk7CiAgICBl bHNlCiAgICAgIF9feCA9IF9TX3JpZ2h0KF9feCk7CgogIHJldHVybiBjb25zdF9pdGVyYXRvcihf X3kpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1ZhbHVlLCBjbGFzcyBfS2V5T2ZW YWx1ZSwKICAgICAgICAgIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CnR5cGVuYW1lIF9S Yl90cmVlPF9LZXksX1ZhbHVlLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46Oml0ZXJhdG9y Cl9SYl90cmVlPF9LZXksX1ZhbHVlLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4KICA6OnVw cGVyX2JvdW5kKGNvbnN0IF9LZXkmIF9faykKewogIF9MaW5rX3R5cGUgX195ID0gX01faGVhZGVy OwogIF9MaW5rX3R5cGUgX194ID0gX01fcm9vdCgpOwoKICAgd2hpbGUgKF9feCAhPSAwKQogICAg IGlmIChfTV9rZXlfY29tcGFyZShfX2ssIF9TX2tleShfX3gpKSkKICAgICAgIF9feSA9IF9feCwg X194ID0gX1NfbGVmdChfX3gpOwogICAgIGVsc2UKICAgICAgIF9feCA9IF9TX3JpZ2h0KF9feCk7 CgogICByZXR1cm4gaXRlcmF0b3IoX195KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNz IF9WYWx1ZSwgY2xhc3MgX0tleU9mVmFsdWUsCiAgICAgICAgICBjbGFzcyBfQ29tcGFyZSwgY2xh c3MgX0FsbG9jPgp0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29t cGFyZSxfQWxsb2M+Ojpjb25zdF9pdGVyYXRvcgpfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZW YWx1ZSxfQ29tcGFyZSxfQWxsb2M+CiAgOjp1cHBlcl9ib3VuZChjb25zdCBfS2V5JiBfX2spIGNv bnN0CnsKICBfTGlua190eXBlIF9feSA9IF9NX2hlYWRlcjsKICBfTGlua190eXBlIF9feCA9IF9N X3Jvb3QoKTsKCiAgIHdoaWxlIChfX3ggIT0gMCkKICAgICBpZiAoX01fa2V5X2NvbXBhcmUoX19r LCBfU19rZXkoX194KSkpCiAgICAgICBfX3kgPSBfX3gsIF9feCA9IF9TX2xlZnQoX194KTsKICAg ICBlbHNlCiAgICAgICBfX3ggPSBfU19yaWdodChfX3gpOwoKICAgcmV0dXJuIGNvbnN0X2l0ZXJh dG9yKF9feSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVmFsdWUsIGNsYXNzIF9L ZXlPZlZhbHVlLAogICAgICAgICAgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KaW5saW5l CnBhaXI8dHlwZW5hbWUgX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUs X0FsbG9jPjo6aXRlcmF0b3IsCiAgICAgdHlwZW5hbWUgX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tl eU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6aXRlcmF0b3I+Cl9SYl90cmVlPF9LZXksX1ZhbHVl LF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4KICA6OmVxdWFsX3JhbmdlKGNvbnN0IF9LZXkm IF9faykKewogIHJldHVybiBwYWlyPGl0ZXJhdG9yLCBpdGVyYXRvcj4obG93ZXJfYm91bmQoX19r KSwgdXBwZXJfYm91bmQoX19rKSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVmFs dWUsIGNsYXNzIF9Lb1YsIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CmlubGluZQpwYWly PHR5cGVuYW1lIF9SYl90cmVlPF9LZXksIF9WYWx1ZSwgX0tvViwgX0NvbXBhcmUsIF9BbGxvYz46 OmNvbnN0X2l0ZXJhdG9yLAogICAgIHR5cGVuYW1lIF9SYl90cmVlPF9LZXksIF9WYWx1ZSwgX0tv ViwgX0NvbXBhcmUsIF9BbGxvYz46OmNvbnN0X2l0ZXJhdG9yPgpfUmJfdHJlZTxfS2V5LCBfVmFs dWUsIF9Lb1YsIF9Db21wYXJlLCBfQWxsb2M+CiAgOjplcXVhbF9yYW5nZShjb25zdCBfS2V5JiBf X2spIGNvbnN0CnsKICByZXR1cm4gcGFpcjxjb25zdF9pdGVyYXRvcixjb25zdF9pdGVyYXRvcj4o bG93ZXJfYm91bmQoX19rKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgdXBwZXJfYm91bmQoX19rKSk7Cn0KCmlubGluZSBpbnQKX19ibGFja19jb3VudChfUmJf dHJlZV9ub2RlX2Jhc2UqIF9fbm9kZSwgX1JiX3RyZWVfbm9kZV9iYXNlKiBfX3Jvb3QpCnsKICBp ZiAoX19ub2RlID09IDApCiAgICByZXR1cm4gMDsKICBlbHNlIHsKICAgIGludCBfX2JjID0gX19u b2RlLT5fTV9jb2xvciA9PSBfU19yYl90cmVlX2JsYWNrID8gMSA6IDA7CiAgICBpZiAoX19ub2Rl ID09IF9fcm9vdCkKICAgICAgcmV0dXJuIF9fYmM7CiAgICBlbHNlCiAgICAgIHJldHVybiBfX2Jj ICsgX19ibGFja19jb3VudChfX25vZGUtPl9NX3BhcmVudCwgX19yb290KTsKICB9Cn0KCnRlbXBs YXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVmFsdWUsIGNsYXNzIF9LZXlPZlZhbHVlLAogICAgICAg ICAgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KYm9vbCBfUmJfdHJlZTxfS2V5LF9WYWx1 ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjpfX3JiX3ZlcmlmeSgpIGNvbnN0CnsKICBp ZiAoX01fbm9kZV9jb3VudCA9PSAwIHx8IGJlZ2luKCkgPT0gZW5kKCkpCiAgICByZXR1cm4gX01f bm9kZV9jb3VudCA9PSAwICYmIGJlZ2luKCkgPT0gZW5kKCkgJiYKICAgICAgX01faGVhZGVyLT5f TV9sZWZ0ID09IF9NX2hlYWRlciAmJiBfTV9oZWFkZXItPl9NX3JpZ2h0ID09IF9NX2hlYWRlcjsK CiAgaW50IF9fbGVuID0gX19ibGFja19jb3VudChfTV9sZWZ0bW9zdCgpLCBfTV9yb290KCkpOwog IGZvciAoY29uc3RfaXRlcmF0b3IgX19pdCA9IGJlZ2luKCk7IF9faXQgIT0gZW5kKCk7ICsrX19p dCkgewogICAgX0xpbmtfdHlwZSBfX3ggPSAoX0xpbmtfdHlwZSkgX19pdC5fTV9ub2RlOwogICAg X0xpbmtfdHlwZSBfX0wgPSBfU19sZWZ0KF9feCk7CiAgICBfTGlua190eXBlIF9fUiA9IF9TX3Jp Z2h0KF9feCk7CgogICAgaWYgKF9feC0+X01fY29sb3IgPT0gX1NfcmJfdHJlZV9yZWQpCiAgICAg IGlmICgoX19MICYmIF9fTC0+X01fY29sb3IgPT0gX1NfcmJfdHJlZV9yZWQpIHx8CiAgICAgICAg ICAoX19SICYmIF9fUi0+X01fY29sb3IgPT0gX1NfcmJfdHJlZV9yZWQpKQogICAgICAgIHJldHVy biBmYWxzZTsKCiAgICBpZiAoX19MICYmIF9NX2tleV9jb21wYXJlKF9TX2tleShfX3gpLCBfU19r ZXkoX19MKSkpCiAgICAgIHJldHVybiBmYWxzZTsKICAgIGlmIChfX1IgJiYgX01fa2V5X2NvbXBh cmUoX1Nfa2V5KF9fUiksIF9TX2tleShfX3gpKSkKICAgICAgcmV0dXJuIGZhbHNlOwoKICAgIGlm ICghX19MICYmICFfX1IgJiYgX19ibGFja19jb3VudChfX3gsIF9NX3Jvb3QoKSkgIT0gX19sZW4p CiAgICAgIHJldHVybiBmYWxzZTsKICB9CgogIGlmIChfTV9sZWZ0bW9zdCgpICE9IF9SYl90cmVl X25vZGVfYmFzZTo6X1NfbWluaW11bShfTV9yb290KCkpKQogICAgcmV0dXJuIGZhbHNlOwogIGlm IChfTV9yaWdodG1vc3QoKSAhPSBfUmJfdHJlZV9ub2RlX2Jhc2U6Ol9TX21heGltdW0oX01fcm9v dCgpKSkKICAgIHJldHVybiBmYWxzZTsKCiAgcmV0dXJuIHRydWU7Cn0KCgoKCnRlbXBsYXRlIDxj bGFzcyBfS2V5LCBjbGFzcyBfVmFsdWUsIGNsYXNzIF9LZXlPZlZhbHVlLCBjbGFzcyBfQ29tcGFy ZSwKICAgICAgICAgIGNsYXNzIF9BbGxvYyA9IGFsbG9jID4Kc3RydWN0IHJiX3RyZWUgOiBwdWJs aWMgX1JiX3RyZWU8X0tleSwgX1ZhbHVlLCBfS2V5T2ZWYWx1ZSwgX0NvbXBhcmUsIF9BbGxvYz4K ewogIHR5cGVkZWYgX1JiX3RyZWU8X0tleSwgX1ZhbHVlLCBfS2V5T2ZWYWx1ZSwgX0NvbXBhcmUs IF9BbGxvYz4gX0Jhc2U7CiAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6YWxsb2NhdG9yX3R5cGUg YWxsb2NhdG9yX3R5cGU7CgogIHJiX3RyZWUoY29uc3QgX0NvbXBhcmUmIF9fY29tcCA9IF9Db21w YXJlKCksCiAgICAgICAgICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5 cGUoKSkKICAgIDogX0Jhc2UoX19jb21wLCBfX2EpIHt9CgogIH5yYl90cmVlKCkge30KfTsKIyAz MiAiL3Vzci9pbmNsdWRlL2crKy0zL21hcCIgMiAzCgojIDEgIi91c3IvaW5jbHVkZS9nKystMy9z dGxfbWFwLmgiIDEgMwojIDQyICIvdXNyL2luY2x1ZGUvZysrLTMvc3RsX21hcC5oIiAzCnRlbXBs YXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlID0gbGVzczxfS2V5PiwK ICAgICAgICAgIGNsYXNzIF9BbGxvYyA9IGFsbG9jID4KCgoKCmNsYXNzIG1hcCB7CnB1YmxpYzoK CgoKICB0eXBlZGVmIF9LZXkga2V5X3R5cGU7CiAgdHlwZWRlZiBfVHAgZGF0YV90eXBlOwogIHR5 cGVkZWYgX1RwIG1hcHBlZF90eXBlOwogIHR5cGVkZWYgcGFpcjxjb25zdCBfS2V5LCBfVHA+IHZh bHVlX3R5cGU7CiAgdHlwZWRlZiBfQ29tcGFyZSBrZXlfY29tcGFyZTsKCiAgY2xhc3MgdmFsdWVf Y29tcGFyZQogICAgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPHZhbHVlX3R5cGUsIHZhbHVlX3R5 cGUsIGJvb2w+IHsKICBmcmllbmQgY2xhc3MgbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz47 CiAgcHJvdGVjdGVkIDoKICAgIF9Db21wYXJlIF9NX2NvbXA7CiAgICB2YWx1ZV9jb21wYXJlKF9D b21wYXJlIF9fYykgOiBfTV9jb21wKF9fYykge30KICBwdWJsaWM6CiAgICBib29sIG9wZXJhdG9y KCkoY29uc3QgdmFsdWVfdHlwZSYgX194LCBjb25zdCB2YWx1ZV90eXBlJiBfX3kpIGNvbnN0IHsK ICAgICAgcmV0dXJuIF9NX2NvbXAoX194LmZpcnN0LCBfX3kuZmlyc3QpOwogICAgfQogIH07Cgpw cml2YXRlOgogIHR5cGVkZWYgX1JiX3RyZWU8a2V5X3R5cGUsIHZhbHVlX3R5cGUsCiAgICAgICAg ICAgICAgICAgICBfU2VsZWN0MXN0PHZhbHVlX3R5cGU+LCBrZXlfY29tcGFyZSwgX0FsbG9jPiBf UmVwX3R5cGU7CiAgX1JlcF90eXBlIF9NX3Q7CnB1YmxpYzoKICB0eXBlZGVmIHR5cGVuYW1lIF9S ZXBfdHlwZTo6cG9pbnRlciBwb2ludGVyOwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpj b25zdF9wb2ludGVyIGNvbnN0X3BvaW50ZXI7CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6 OnJlZmVyZW5jZSByZWZlcmVuY2U7CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OmNvbnN0 X3JlZmVyZW5jZSBjb25zdF9yZWZlcmVuY2U7CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6 Oml0ZXJhdG9yIGl0ZXJhdG9yOwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpjb25zdF9p dGVyYXRvciBjb25zdF9pdGVyYXRvcjsKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6cmV2 ZXJzZV9pdGVyYXRvciByZXZlcnNlX2l0ZXJhdG9yOwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90 eXBlOjpjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIGNvbnN0X3JldmVyc2VfaXRlcmF0b3I7CiAgdHlw ZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OnNpemVfdHlwZSBzaXplX3R5cGU7CiAgdHlwZWRlZiB0 eXBlbmFtZSBfUmVwX3R5cGU6OmRpZmZlcmVuY2VfdHlwZSBkaWZmZXJlbmNlX3R5cGU7CiAgdHlw ZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OmFsbG9jYXRvcl90eXBlIGFsbG9jYXRvcl90eXBlOwoK CgogIG1hcCgpIDogX01fdChfQ29tcGFyZSgpLCBhbGxvY2F0b3JfdHlwZSgpKSB7fQogIGV4cGxp Y2l0IG1hcChjb25zdCBfQ29tcGFyZSYgX19jb21wLAogICAgICAgICAgICAgICBjb25zdCBhbGxv Y2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKICAgIDogX01fdChfX2NvbXAsIF9f YSkge30KIyAxMDYgIi91c3IvaW5jbHVkZS9nKystMy9zdGxfbWFwLmgiIDMKICBtYXAoY29uc3Qg dmFsdWVfdHlwZSogX19maXJzdCwgY29uc3QgdmFsdWVfdHlwZSogX19sYXN0KQogICAgOiBfTV90 KF9Db21wYXJlKCksIGFsbG9jYXRvcl90eXBlKCkpCiAgICB7IF9NX3QuaW5zZXJ0X3VuaXF1ZShf X2ZpcnN0LCBfX2xhc3QpOyB9CgogIG1hcChjb25zdCB2YWx1ZV90eXBlKiBfX2ZpcnN0LAogICAg ICBjb25zdCB2YWx1ZV90eXBlKiBfX2xhc3QsIGNvbnN0IF9Db21wYXJlJiBfX2NvbXAsCiAgICAg IGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQogICAgOiBfTV90 KF9fY29tcCwgX19hKSB7IF9NX3QuaW5zZXJ0X3VuaXF1ZShfX2ZpcnN0LCBfX2xhc3QpOyB9Cgog IG1hcChjb25zdF9pdGVyYXRvciBfX2ZpcnN0LCBjb25zdF9pdGVyYXRvciBfX2xhc3QpCiAgICA6 IF9NX3QoX0NvbXBhcmUoKSwgYWxsb2NhdG9yX3R5cGUoKSkKICAgIHsgX01fdC5pbnNlcnRfdW5p cXVlKF9fZmlyc3QsIF9fbGFzdCk7IH0KCiAgbWFwKGNvbnN0X2l0ZXJhdG9yIF9fZmlyc3QsIGNv bnN0X2l0ZXJhdG9yIF9fbGFzdCwgY29uc3QgX0NvbXBhcmUmIF9fY29tcCwKICAgICAgY29uc3Qg YWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCiAgICA6IF9NX3QoX19jb21w LCBfX2EpIHsgX01fdC5pbnNlcnRfdW5pcXVlKF9fZmlyc3QsIF9fbGFzdCk7IH0KCgoKICBtYXAo Y29uc3QgbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feCkgOiBfTV90KF9feC5fTV90 KSB7fQogIG1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JgogIG9wZXJhdG9yPShjb25zdCBt YXA8X0tleSwgX1RwLCBfQ29tcGFyZSwgX0FsbG9jPiYgX194KQogIHsKICAgIF9NX3QgPSBfX3gu X01fdDsKICAgIHJldHVybiAqdGhpczsKICB9CgoKCiAga2V5X2NvbXBhcmUga2V5X2NvbXAoKSBj b25zdCB7IHJldHVybiBfTV90LmtleV9jb21wKCk7IH0KICB2YWx1ZV9jb21wYXJlIHZhbHVlX2Nv bXAoKSBjb25zdCB7IHJldHVybiB2YWx1ZV9jb21wYXJlKF9NX3Qua2V5X2NvbXAoKSk7IH0KICBh bGxvY2F0b3JfdHlwZSBnZXRfYWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4gX01fdC5nZXRfYWxs b2NhdG9yKCk7IH0KCiAgaXRlcmF0b3IgYmVnaW4oKSB7IHJldHVybiBfTV90LmJlZ2luKCk7IH0K ICBjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIF9NX3QuYmVnaW4oKTsgfQog IGl0ZXJhdG9yIGVuZCgpIHsgcmV0dXJuIF9NX3QuZW5kKCk7IH0KICBjb25zdF9pdGVyYXRvciBl bmQoKSBjb25zdCB7IHJldHVybiBfTV90LmVuZCgpOyB9CiAgcmV2ZXJzZV9pdGVyYXRvciByYmVn aW4oKSB7IHJldHVybiBfTV90LnJiZWdpbigpOyB9CiAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvciBy YmVnaW4oKSBjb25zdCB7IHJldHVybiBfTV90LnJiZWdpbigpOyB9CiAgcmV2ZXJzZV9pdGVyYXRv ciByZW5kKCkgeyByZXR1cm4gX01fdC5yZW5kKCk7IH0KICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9y IHJlbmQoKSBjb25zdCB7IHJldHVybiBfTV90LnJlbmQoKTsgfQogIGJvb2wgZW1wdHkoKSBjb25z dCB7IHJldHVybiBfTV90LmVtcHR5KCk7IH0KICBzaXplX3R5cGUgc2l6ZSgpIGNvbnN0IHsgcmV0 dXJuIF9NX3Quc2l6ZSgpOyB9CiAgc2l6ZV90eXBlIG1heF9zaXplKCkgY29uc3QgeyByZXR1cm4g X01fdC5tYXhfc2l6ZSgpOyB9CiAgX1RwJiBvcGVyYXRvcltdKGNvbnN0IGtleV90eXBlJiBfX2sp IHsKICAgIGl0ZXJhdG9yIF9faSA9IGxvd2VyX2JvdW5kKF9fayk7CgogICAgaWYgKF9faSA9PSBl bmQoKSB8fCBrZXlfY29tcCgpKF9faywgKCpfX2kpLmZpcnN0KSkKICAgICAgX19pID0gaW5zZXJ0 KF9faSwgdmFsdWVfdHlwZShfX2ssIF9UcCgpKSk7CiAgICByZXR1cm4gKCpfX2kpLnNlY29uZDsK ICB9CiAgdm9pZCBzd2FwKG1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3gpIHsgX01f dC5zd2FwKF9feC5fTV90KTsgfQoKCgogIHBhaXI8aXRlcmF0b3IsYm9vbD4gaW5zZXJ0KGNvbnN0 IHZhbHVlX3R5cGUmIF9feCkKICAgIHsgcmV0dXJuIF9NX3QuaW5zZXJ0X3VuaXF1ZShfX3gpOyB9 CiAgaXRlcmF0b3IgaW5zZXJ0KGl0ZXJhdG9yIHBvc2l0aW9uLCBjb25zdCB2YWx1ZV90eXBlJiBf X3gpCiAgICB7IHJldHVybiBfTV90Lmluc2VydF91bmlxdWUocG9zaXRpb24sIF9feCk7IH0KCgoK CgoKICB2b2lkIGluc2VydChjb25zdCB2YWx1ZV90eXBlKiBfX2ZpcnN0LCBjb25zdCB2YWx1ZV90 eXBlKiBfX2xhc3QpIHsKICAgIF9NX3QuaW5zZXJ0X3VuaXF1ZShfX2ZpcnN0LCBfX2xhc3QpOwog IH0KICB2b2lkIGluc2VydChjb25zdF9pdGVyYXRvciBfX2ZpcnN0LCBjb25zdF9pdGVyYXRvciBf X2xhc3QpIHsKICAgIF9NX3QuaW5zZXJ0X3VuaXF1ZShfX2ZpcnN0LCBfX2xhc3QpOwogIH0KCgog IHZvaWQgZXJhc2UoaXRlcmF0b3IgX19wb3NpdGlvbikgeyBfTV90LmVyYXNlKF9fcG9zaXRpb24p OyB9CiAgc2l6ZV90eXBlIGVyYXNlKGNvbnN0IGtleV90eXBlJiBfX3gpIHsgcmV0dXJuIF9NX3Qu ZXJhc2UoX194KTsgfQogIHZvaWQgZXJhc2UoaXRlcmF0b3IgX19maXJzdCwgaXRlcmF0b3IgX19s YXN0KQogICAgeyBfTV90LmVyYXNlKF9fZmlyc3QsIF9fbGFzdCk7IH0KICB2b2lkIGNsZWFyKCkg eyBfTV90LmNsZWFyKCk7IH0KCgoKICBpdGVyYXRvciBmaW5kKGNvbnN0IGtleV90eXBlJiBfX3gp IHsgcmV0dXJuIF9NX3QuZmluZChfX3gpOyB9CiAgY29uc3RfaXRlcmF0b3IgZmluZChjb25zdCBr ZXlfdHlwZSYgX194KSBjb25zdCB7IHJldHVybiBfTV90LmZpbmQoX194KTsgfQogIHNpemVfdHlw ZSBjb3VudChjb25zdCBrZXlfdHlwZSYgX194KSBjb25zdCB7IHJldHVybiBfTV90LmNvdW50KF9f eCk7IH0KICBpdGVyYXRvciBsb3dlcl9ib3VuZChjb25zdCBrZXlfdHlwZSYgX194KSB7cmV0dXJu IF9NX3QubG93ZXJfYm91bmQoX194KTsgfQogIGNvbnN0X2l0ZXJhdG9yIGxvd2VyX2JvdW5kKGNv bnN0IGtleV90eXBlJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBfTV90Lmxvd2VyX2JvdW5kKF9f eCk7CiAgfQogIGl0ZXJhdG9yIHVwcGVyX2JvdW5kKGNvbnN0IGtleV90eXBlJiBfX3gpIHtyZXR1 cm4gX01fdC51cHBlcl9ib3VuZChfX3gpOyB9CiAgY29uc3RfaXRlcmF0b3IgdXBwZXJfYm91bmQo Y29uc3Qga2V5X3R5cGUmIF9feCkgY29uc3QgewogICAgcmV0dXJuIF9NX3QudXBwZXJfYm91bmQo X194KTsKICB9CgogIHBhaXI8aXRlcmF0b3IsaXRlcmF0b3I+IGVxdWFsX3JhbmdlKGNvbnN0IGtl eV90eXBlJiBfX3gpIHsKICAgIHJldHVybiBfTV90LmVxdWFsX3JhbmdlKF9feCk7CiAgfQogIHBh aXI8Y29uc3RfaXRlcmF0b3IsY29uc3RfaXRlcmF0b3I+IGVxdWFsX3JhbmdlKGNvbnN0IGtleV90 eXBlJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBfTV90LmVxdWFsX3JhbmdlKF9feCk7CiAgfQog IGZyaWVuZCBib29sIG9wZXJhdG9yPT0gKGNvbnN0IG1hcCYsIGNvbnN0IG1hcCYpOwogIGZyaWVu ZCBib29sIG9wZXJhdG9yPCAoY29uc3QgbWFwJiwgY29uc3QgbWFwJik7Cn07Cgp0ZW1wbGF0ZSA8 Y2xhc3MgX0tleSwgY2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgppbmxp bmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IG1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBf X3gsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWFwPF9LZXksX1RwLF9Db21wYXJlLF9B bGxvYz4mIF9feSkgewogIHJldHVybiBfX3guX01fdCA9PSBfX3kuX01fdDsKfQoKdGVtcGxhdGUg PGNsYXNzIF9LZXksIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KaW5s aW5lIGJvb2wgb3BlcmF0b3I8KGNvbnN0IG1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBf X3gsCiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtYXA8X0tleSxfVHAsX0NvbXBhcmUsX0Fs bG9jPiYgX195KSB7CiAgcmV0dXJuIF9feC5fTV90IDwgX195Ll9NX3Q7Cn0KIyAzNCAiL3Vzci9p bmNsdWRlL2crKy0zL21hcCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2crKy0zL3N0bF9tdWx0aW1h cC5oIiAxIDMKIyA0MiAiL3Vzci9pbmNsdWRlL2crKy0zL3N0bF9tdWx0aW1hcC5oIiAzCnRlbXBs YXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlID0gbGVzczxfS2V5PiwK ICAgICAgICAgIGNsYXNzIF9BbGxvYyA9IGFsbG9jID4KCgoKCmNsYXNzIG11bHRpbWFwIHsKcHVi bGljOgoKCgogIHR5cGVkZWYgX0tleSBrZXlfdHlwZTsKICB0eXBlZGVmIF9UcCBkYXRhX3R5cGU7 CiAgdHlwZWRlZiBfVHAgbWFwcGVkX3R5cGU7CiAgdHlwZWRlZiBwYWlyPGNvbnN0IF9LZXksIF9U cD4gdmFsdWVfdHlwZTsKICB0eXBlZGVmIF9Db21wYXJlIGtleV9jb21wYXJlOwoKICBjbGFzcyB2 YWx1ZV9jb21wYXJlIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjx2YWx1ZV90eXBlLCB2YWx1ZV90 eXBlLCBib29sPiB7CiAgZnJpZW5kIGNsYXNzIG11bHRpbWFwPF9LZXksX1RwLF9Db21wYXJlLF9B bGxvYz47CiAgcHJvdGVjdGVkOgogICAgX0NvbXBhcmUgX01fY29tcDsKICAgIHZhbHVlX2NvbXBh cmUoX0NvbXBhcmUgX19jKSA6IF9NX2NvbXAoX19jKSB7fQogIHB1YmxpYzoKICAgIGJvb2wgb3Bl cmF0b3IoKShjb25zdCB2YWx1ZV90eXBlJiBfX3gsIGNvbnN0IHZhbHVlX3R5cGUmIF9feSkgY29u c3QgewogICAgICByZXR1cm4gX01fY29tcChfX3guZmlyc3QsIF9feS5maXJzdCk7CiAgICB9CiAg fTsKCnByaXZhdGU6CiAgdHlwZWRlZiBfUmJfdHJlZTxrZXlfdHlwZSwgdmFsdWVfdHlwZSwKICAg ICAgICAgICAgICAgICAgX1NlbGVjdDFzdDx2YWx1ZV90eXBlPiwga2V5X2NvbXBhcmUsIF9BbGxv Yz4gX1JlcF90eXBlOwogIF9SZXBfdHlwZSBfTV90OwpwdWJsaWM6CiAgdHlwZWRlZiB0eXBlbmFt ZSBfUmVwX3R5cGU6OnBvaW50ZXIgcG9pbnRlcjsKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlw ZTo6Y29uc3RfcG9pbnRlciBjb25zdF9wb2ludGVyOwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90 eXBlOjpyZWZlcmVuY2UgcmVmZXJlbmNlOwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpj b25zdF9yZWZlcmVuY2UgY29uc3RfcmVmZXJlbmNlOwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90 eXBlOjppdGVyYXRvciBpdGVyYXRvcjsKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6Y29u c3RfaXRlcmF0b3IgY29uc3RfaXRlcmF0b3I7CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6 OnJldmVyc2VfaXRlcmF0b3IgcmV2ZXJzZV9pdGVyYXRvcjsKICB0eXBlZGVmIHR5cGVuYW1lIF9S ZXBfdHlwZTo6Y29uc3RfcmV2ZXJzZV9pdGVyYXRvciBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yOwog IHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpzaXplX3R5cGUgc2l6ZV90eXBlOwogIHR5cGVk ZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpkaWZmZXJlbmNlX3R5cGUgZGlmZmVyZW5jZV90eXBlOwog IHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjphbGxvY2F0b3JfdHlwZSBhbGxvY2F0b3JfdHlw ZTsKCgoKICBtdWx0aW1hcCgpIDogX01fdChfQ29tcGFyZSgpLCBhbGxvY2F0b3JfdHlwZSgpKSB7 IH0KICBleHBsaWNpdCBtdWx0aW1hcChjb25zdCBfQ29tcGFyZSYgX19jb21wLAogICAgICAgICAg ICAgICAgICAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQog ICAgOiBfTV90KF9fY29tcCwgX19hKSB7IH0KIyAxMDYgIi91c3IvaW5jbHVkZS9nKystMy9zdGxf bXVsdGltYXAuaCIgMwogIG11bHRpbWFwKGNvbnN0IHZhbHVlX3R5cGUqIF9fZmlyc3QsIGNvbnN0 IHZhbHVlX3R5cGUqIF9fbGFzdCkKICAgIDogX01fdChfQ29tcGFyZSgpLCBhbGxvY2F0b3JfdHlw ZSgpKQogICAgeyBfTV90Lmluc2VydF9lcXVhbChfX2ZpcnN0LCBfX2xhc3QpOyB9CiAgbXVsdGlt YXAoY29uc3QgdmFsdWVfdHlwZSogX19maXJzdCwgY29uc3QgdmFsdWVfdHlwZSogX19sYXN0LAog ICAgICAgICAgIGNvbnN0IF9Db21wYXJlJiBfX2NvbXAsCiAgICAgICAgICAgY29uc3QgYWxsb2Nh dG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCiAgICA6IF9NX3QoX19jb21wLCBfX2Ep IHsgX01fdC5pbnNlcnRfZXF1YWwoX19maXJzdCwgX19sYXN0KTsgfQoKICBtdWx0aW1hcChjb25z dF9pdGVyYXRvciBfX2ZpcnN0LCBjb25zdF9pdGVyYXRvciBfX2xhc3QpCiAgICA6IF9NX3QoX0Nv bXBhcmUoKSwgYWxsb2NhdG9yX3R5cGUoKSkKICAgIHsgX01fdC5pbnNlcnRfZXF1YWwoX19maXJz dCwgX19sYXN0KTsgfQogIG11bHRpbWFwKGNvbnN0X2l0ZXJhdG9yIF9fZmlyc3QsIGNvbnN0X2l0 ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICBjb25zdCBfQ29tcGFyZSYgX19jb21wLAogICAgICAg ICAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQogICAgOiBf TV90KF9fY29tcCwgX19hKSB7IF9NX3QuaW5zZXJ0X2VxdWFsKF9fZmlyc3QsIF9fbGFzdCk7IH0K CgogIG11bHRpbWFwKGNvbnN0IG11bHRpbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9f eCkgOiBfTV90KF9feC5fTV90KSB7IH0KICBtdWx0aW1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxs b2M+JgogIG9wZXJhdG9yPShjb25zdCBtdWx0aW1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+ JiBfX3gpIHsKICAgIF9NX3QgPSBfX3guX01fdDsKICAgIHJldHVybiAqdGhpczsKICB9CgoKCiAg a2V5X2NvbXBhcmUga2V5X2NvbXAoKSBjb25zdCB7IHJldHVybiBfTV90LmtleV9jb21wKCk7IH0K ICB2YWx1ZV9jb21wYXJlIHZhbHVlX2NvbXAoKSBjb25zdCB7IHJldHVybiB2YWx1ZV9jb21wYXJl KF9NX3Qua2V5X2NvbXAoKSk7IH0KICBhbGxvY2F0b3JfdHlwZSBnZXRfYWxsb2NhdG9yKCkgY29u c3QgeyByZXR1cm4gX01fdC5nZXRfYWxsb2NhdG9yKCk7IH0KCiAgaXRlcmF0b3IgYmVnaW4oKSB7 IHJldHVybiBfTV90LmJlZ2luKCk7IH0KICBjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0IHsg cmV0dXJuIF9NX3QuYmVnaW4oKTsgfQogIGl0ZXJhdG9yIGVuZCgpIHsgcmV0dXJuIF9NX3QuZW5k KCk7IH0KICBjb25zdF9pdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBfTV90LmVuZCgpOyB9 CiAgcmV2ZXJzZV9pdGVyYXRvciByYmVnaW4oKSB7IHJldHVybiBfTV90LnJiZWdpbigpOyB9CiAg Y29uc3RfcmV2ZXJzZV9pdGVyYXRvciByYmVnaW4oKSBjb25zdCB7IHJldHVybiBfTV90LnJiZWdp bigpOyB9CiAgcmV2ZXJzZV9pdGVyYXRvciByZW5kKCkgeyByZXR1cm4gX01fdC5yZW5kKCk7IH0K ICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIHJlbmQoKSBjb25zdCB7IHJldHVybiBfTV90LnJlbmQo KTsgfQogIGJvb2wgZW1wdHkoKSBjb25zdCB7IHJldHVybiBfTV90LmVtcHR5KCk7IH0KICBzaXpl X3R5cGUgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIF9NX3Quc2l6ZSgpOyB9CiAgc2l6ZV90eXBlIG1h eF9zaXplKCkgY29uc3QgeyByZXR1cm4gX01fdC5tYXhfc2l6ZSgpOyB9CiAgdm9pZCBzd2FwKG11 bHRpbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feCkgeyBfTV90LnN3YXAoX194Ll9N X3QpOyB9CgoKCiAgaXRlcmF0b3IgaW5zZXJ0KGNvbnN0IHZhbHVlX3R5cGUmIF9feCkgeyByZXR1 cm4gX01fdC5pbnNlcnRfZXF1YWwoX194KTsgfQogIGl0ZXJhdG9yIGluc2VydChpdGVyYXRvciBf X3Bvc2l0aW9uLCBjb25zdCB2YWx1ZV90eXBlJiBfX3gpIHsKICAgIHJldHVybiBfTV90Lmluc2Vy dF9lcXVhbChfX3Bvc2l0aW9uLCBfX3gpOwogIH0KCgoKCgoKICB2b2lkIGluc2VydChjb25zdCB2 YWx1ZV90eXBlKiBfX2ZpcnN0LCBjb25zdCB2YWx1ZV90eXBlKiBfX2xhc3QpIHsKICAgIF9NX3Qu aW5zZXJ0X2VxdWFsKF9fZmlyc3QsIF9fbGFzdCk7CiAgfQogIHZvaWQgaW5zZXJ0KGNvbnN0X2l0 ZXJhdG9yIF9fZmlyc3QsIGNvbnN0X2l0ZXJhdG9yIF9fbGFzdCkgewogICAgX01fdC5pbnNlcnRf ZXF1YWwoX19maXJzdCwgX19sYXN0KTsKICB9CgogIHZvaWQgZXJhc2UoaXRlcmF0b3IgX19wb3Np dGlvbikgeyBfTV90LmVyYXNlKF9fcG9zaXRpb24pOyB9CiAgc2l6ZV90eXBlIGVyYXNlKGNvbnN0 IGtleV90eXBlJiBfX3gpIHsgcmV0dXJuIF9NX3QuZXJhc2UoX194KTsgfQogIHZvaWQgZXJhc2Uo aXRlcmF0b3IgX19maXJzdCwgaXRlcmF0b3IgX19sYXN0KQogICAgeyBfTV90LmVyYXNlKF9fZmly c3QsIF9fbGFzdCk7IH0KICB2b2lkIGNsZWFyKCkgeyBfTV90LmNsZWFyKCk7IH0KCgoKICBpdGVy YXRvciBmaW5kKGNvbnN0IGtleV90eXBlJiBfX3gpIHsgcmV0dXJuIF9NX3QuZmluZChfX3gpOyB9 CiAgY29uc3RfaXRlcmF0b3IgZmluZChjb25zdCBrZXlfdHlwZSYgX194KSBjb25zdCB7IHJldHVy biBfTV90LmZpbmQoX194KTsgfQogIHNpemVfdHlwZSBjb3VudChjb25zdCBrZXlfdHlwZSYgX194 KSBjb25zdCB7IHJldHVybiBfTV90LmNvdW50KF9feCk7IH0KICBpdGVyYXRvciBsb3dlcl9ib3Vu ZChjb25zdCBrZXlfdHlwZSYgX194KSB7cmV0dXJuIF9NX3QubG93ZXJfYm91bmQoX194KTsgfQog IGNvbnN0X2l0ZXJhdG9yIGxvd2VyX2JvdW5kKGNvbnN0IGtleV90eXBlJiBfX3gpIGNvbnN0IHsK ICAgIHJldHVybiBfTV90Lmxvd2VyX2JvdW5kKF9feCk7CiAgfQogIGl0ZXJhdG9yIHVwcGVyX2Jv dW5kKGNvbnN0IGtleV90eXBlJiBfX3gpIHtyZXR1cm4gX01fdC51cHBlcl9ib3VuZChfX3gpOyB9 CiAgY29uc3RfaXRlcmF0b3IgdXBwZXJfYm91bmQoY29uc3Qga2V5X3R5cGUmIF9feCkgY29uc3Qg ewogICAgcmV0dXJuIF9NX3QudXBwZXJfYm91bmQoX194KTsKICB9CiAgIHBhaXI8aXRlcmF0b3Is aXRlcmF0b3I+IGVxdWFsX3JhbmdlKGNvbnN0IGtleV90eXBlJiBfX3gpIHsKICAgIHJldHVybiBf TV90LmVxdWFsX3JhbmdlKF9feCk7CiAgfQogIHBhaXI8Y29uc3RfaXRlcmF0b3IsY29uc3RfaXRl cmF0b3I+IGVxdWFsX3JhbmdlKGNvbnN0IGtleV90eXBlJiBfX3gpIGNvbnN0IHsKICAgIHJldHVy biBfTV90LmVxdWFsX3JhbmdlKF9feCk7CiAgfQogIGZyaWVuZCBib29sIG9wZXJhdG9yPT0gKGNv bnN0IG11bHRpbWFwJiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBjb25zdCBtdWx0aW1hcCYpOwogIGZyaWVuZCBib29sIG9wZXJhdG9yPCAoY29uc3QgbXVs dGltYXAmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u c3QgbXVsdGltYXAmKTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVHAsIGNsYXNz IF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgbXVs dGltYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAgICAgICAgICAgICAgICAg ICAgIGNvbnN0IG11bHRpbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feSkgewogIHJl dHVybiBfX3guX01fdCA9PSBfX3kuX01fdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNz IF9UcCwgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3I8 KGNvbnN0IG11bHRpbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feCwKICAgICAgICAg ICAgICAgICAgICAgIGNvbnN0IG11bHRpbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9f eSkgewogIHJldHVybiBfX3guX01fdCA8IF9feS5fTV90Owp9CiMgMzUgIi91c3IvaW5jbHVkZS9n KystMy9tYXAiIDIgMwojIDE0ICJyZXNvdXJjZXMuaCIgMgojIDEgImRlZmluZXMuaCIgMQojIDEz ICJkZWZpbmVzLmgiCiMgMSAiL3Vzci9pbmNsdWRlL2crKy0zL3N0cmluZyIgMSAzCiMgMTQgImRl ZmluZXMuaCIgMgojIDI2ICJkZWZpbmVzLmgiCmVudW0gZUxhbmd1YWdlcyB7IGl0X0lUID0gMSwg ZW5fVVMgfTsKCnR5cGVkZWYgc3RydWN0IFRTdGFydE9wdGlvbnMKewoKCiAgICAgICAgc3RkOjpz dHJpbmcgQmFzZURpcmVjdG9yeTsKICAgICAgICBib29sIGJIaWRlQ3Vyc29yOwogICAgICAgIGJv b2wgYkRlYnVnSW5mbzsKICAgICAgICBib29sIGJBUlFJbmZvOwogICAgICAgIGJvb2wgYlNvY2tl dEluZm87CiAgICAgICAgYm9vbCBiTU1JbmZvOwogICAgICAgIGJvb2wgYklNSW5mbzsKCiAgICAg ICAgYm9vbCBiRGlzYWJsZUFja1RpbWVvdXQ7Cn07Cgp0eXBlZGVmIGVudW0ge2VOb25lPTAsZUVt ZXJnZW5jeSxlU3RvcCxlQ3ljbGUsZUN5Y2xlU2VtaSxlT3RoZXIgfSBlU3RhdGVzOwoKdHlwZWRl ZiBlbnVtIHsgZUxvYWRDZWxsID0gMSwgZVdhdGVyQ291bnRlciwgZVJlbWFpbmluZ1RpbWUgfSBl QW5hbG9ndWVPcGVyYXRvcjsKIyA1OCAiZGVmaW5lcy5oIgp0eXBlZGVmIHN0cnVjdCBUTWFjaGlu ZVN0YXRlCnsKCgogICAgICAgIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgdWxMYXN0S25vd25EaWdJ bnB1dDsKICAgICAgICB2b2xhdGlsZSB1bnNpZ25lZCBsb25nIHVsTGFzdEtub3duRGlnT3V0cHV0 OwoKCgoKICAgICAgICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgdUN1cnJlbnRXYXRlckFtb3VudDsK ICAgICAgICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgdUN1cnJlbnRXZWlndGg7CiAgICAgICAgdm9s YXRpbGUgdW5zaWduZWQgaW50IHVSZW1haW5pbmdUaW1lOwoKICAgICAgICB2b2xhdGlsZSBlU3Rh dGVzIGVTdGF0ZTsKCiAgICAgICAgdm9sYXRpbGUgYm9vbCBiV2FpdGluZ0Fuc3dlcjsKCiAgICAg ICAgdm9sYXRpbGUgYm9vbCBiQ29ubmVjdGVkOwp9OwoKCmVudW0gewogICAgICAgIEVHZW5lcmlj ID0gLTE5LAogIEVNZW1vcnkgPSAtOSwKICAgICAgICBFTWlzc2luZ0ltYWdlID0gLTgsCiAgICAg ICAgRVNvY2tldCA9IC01LAoKICAgICAgICBFTm9JbWFnZSA9IC00LAogICAgICAgIEVSZXNvbHV0 aW9uVW5zdXBwb3J0ZWQgPSAtMywKICAgICAgICBFTm9UaGVtZSA9IC0yLAogICAgICAgIEVOb0RC ID0gLTEsCiAgICAgICAgRU9LID0gMCwKfTsKCgplbnVtIHsKICAgICAgICBlU3lub3B0aWM9MjAw LAogICAgICAgIGVGb3JtdWxhcywKICAgICAgICBlUmVwb3J0cywKICAgICAgICBlVXNlclBhcmFt ZXRlcnMsCiAgICAgICAgZU1hY2hpbmVQYXJhbWV0ZXJzLAoKfTsKIyAxNSAicmVzb3VyY2VzLmgi IDIKCgpjbGFzcyBUTG9va3VwVGFibGUgOiBwcml2YXRlIG1hcDxpbnQsIHN0ZDo6c3RyaW5nPgp7 CiBwcm90ZWN0ZWQ6CiAgICAgICAgdHlwZWRlZiBtYXA8aW50LCBzdGQ6OnN0cmluZz46Oml0ZXJh dG9yIGl0ZXJJMlM7CiBwdWJsaWM6CiAgICAgICAgVExvb2t1cFRhYmxlKHZvaWQpIHt9OwoKICB2 b2lkIEZpbGxUYWJsZShlTGFuZ3VhZ2VzIExhbmcpOwoKICAgICAgICBjb25zdCBjaGFyKiBUZXh0 T2YoaW50IG5Db2RlKTsKfTsKCmVudW0gTWVzc2FnZUNvZGVzIHsKICAgICAgICBNU0dfQ1RMPTEs TVNHX0NURT0yLE1TR19FTUc9NCxNU0dfTlJFPTgsCiAgICAgICAgTVNHX0NBTFNUQVJUPTIwLE1T R19DQUxSRUFEV0VJR1RILE1TR19DQUxTRVRSRUZFUkVOQ0UsTVNHX0NBTEVORCwKICAgICAgICBN U0dfRVJSTlVMTFdFSUdUSD01MCxNU0dfRVJSUkVGLE1TR19XRUlHVEhfRVhDRUVERUQsTVNHX0NP TkZJUk1NQU5VQUwsCiAgICAgICAgTVNHX0NOMT02NCxNU0dfQ04yLE1TR19DTjMsCiAgICAgICAg TVNHX0gyTz03NSxNU0dfU0tJUEZBSUxVUkU9MTI5LE1TR19ET09SRkFJTFVSRT0xMzAsCiAgICAg ICAgTVNHX0NIRUNLU0tJUD0xNDAsTVNHX0NIRUNLTUlYLE1TR19DSEVDS0JFTFQsCiAgICAgICAg TVNHX01PVE9SRkFVTFQ9MTUwCn07CgplbnVtIExhYmVsQ29kZXMgewogICAgICAgIExCTF9GT1JN VUxBPTEwMDAsTEJMX1RPVEFMLExCTF9IMk8sTEJMX01JWFRJTUUsTEJMX0NZQ0xFLExCTF9NT0RF LExCTF9QUk9EVUNUSU9OLAogICAgICAgIExCTF9QUk9EVUNUTkFNRSxMQkxfUFJPRFVDVENPU1Qs TEJMX1dBVEVSQ09TVCxMQkxfU1lTVEVNLExCTF9GQUNUT1JZTkFNRSwKICAgICAgICBMQkxfQ1VS UkVOQ1lOQU1FLExCTF9QQVJUSUFMLExCTF9DTEVBUkNPTkZJUk0sCiAgICAgICAgTEJMX1lFUyxM QkxfTk8sTEJMX1JFVFJZLExCTF9BQk9SVCxMQkxfSEVMUCxMQkxfUkVQT1JUT0YsCiAgICAgICAg TEJMX1RJTUVSMSxMQkxfVElNRVIyLExCTF9USU1FUjMsTEJMX1RJTUVSNCxMQkxfVElNRU9VVDEs TEJMX1RJTUVPVVQyLAogICAgICAgIExCTF9USU1FT1VUMyxMQkxfVElNRU9VVDQsTEJMX1RJTUVP VVQ1LExCTF9USU1FT1VUNixMQkxfUVRZTUlYLExCTF9aRVJPVE9MTCwKICAgICAgICBMQkxfSVBB RERSLExCTF9JUFBPUlQsCiAgICAgICAgTEJMX0NBTElCUkFUSU9OLExCTF9MT0FEQ0VMTCxMQkxf V0VJR1RILExCTF9SRUZXRUlHVEgsTEJMX1JFUE9SVFNQQUdFLAogICAgICAgIExCTF9GT1JNVUxB U1BBR0UsTEJMX1VTRVJQQVJNU1BBR0UsTEJMX01BQ0hJTkVQQVJNU1BBR0UsTEJMX1RJTEVTLExC TF9QUklOVFNQRVJTSE9ULAogICAgICAgIFBSTl9SRVBPUlQsUFJOX1RPVEFMLFBSTl9QQVJUSUFM LFBSTl9QUklOVFMsUFJOX0FWR0NPU1QsCiAgICAgICAgTEJMX1RJTUVGT1JNQVQsTEJMX1RJTUVG T1JNQVRfSElTVCxMQkxfQ09OVElOVUUsTEJMX1NUT1AsTEJMX0xBTkdVQUdFCn07CgplbnVtIEJ1 dHRvbkNvZGVzIHsKICAgICAgICBCVE5fUEVSQ0VOVD0yMDAwLEJUTl9BQlNPTFVURSxCVE5fTkVX Rk9STVVMQSxCVE5fU0FWRSxCVE5fRVhJVCxCVE5fU1RBUlQsQlROX1NUT1AsCiAgICAgICAgQlRO X0FVVE8sQlROX1NFTUlBVVRPLEJUTl9NQU5VQUwsQlROX0ZPUk1VTEFTLEJUTl9SRVBPUlRTLEJU Tl9PUEVOLEJUTl9DTE9TRSxCVE5fVVBEQVRFRk9STVVMQSwKICAgICAgICBCVE5fUkVTRVQsQlRO X0NMRUFSLEJUTl9QUklOVCxCVE5fQ09ORklHLEJUTl9aRVJPLEJUTl9SRUYsCiAgICAgICAgQlRO X1NFTEVDVEZPUk1VTEEsQlROX1BSRVZJT1VTLEJUTl9ORVhULEJUTl9PUEVOV0FURVIsQlROX0NM T1NFV0FURVIKfTsKIyAxMSAicmVzb3VyY2VzLmNwcCIgMgojIDEgInByb3RvY29sLmgiIDEKIyAx MiAicHJvdG9jb2wuaCIKIyAxICIvdXNyL2luY2x1ZGUvZysrLTMvc3RyaW5nIiAxIDMKIyAxMyAi cHJvdG9jb2wuaCIgMgojIDEgIi91c3IvaW5jbHVkZS9nKystMy9tYXAiIDEgMwojIDE0ICJwcm90 b2NvbC5oIiAyCgplbnVtIENvbW1hbmRDb2RlcyB7CiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgQ1RFPTEsQ1RMPTIsRU1HPTQsTlJNPTgsTUJBPTE2LFBFQz0xNyxNR1U9MzIsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgV0FCPTUwLFdBRT01MSwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBUTU89NjQsUlRZPTY1LEFCVD02NiwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBNQ009NzAsT05FPTk2LEFJUz0xMDAsQU9TPTEwMSxESVM9MTAyLERPUz0x MDMsUFJEPTExMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRE89MTIwLFNETz0x MjEsU0FPPTEyMixSUVM9MTMwLFNUQz0xMzEsU1RQPTEzMixFU1Q9MTMzLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFNUTz0xMzQsCiAgICAgICAgICAgICAgICAgICAgICAgIH07Cgpj bGFzcyBUUHJvdG9jb2wKewogcHJpdmF0ZToKICAgICAgICBzdGQ6OnN0cmluZyBhU3RyaW5nOwog cHJvdGVjdGVkOgogICAgICAgIG1hcDxzdGQ6OnN0cmluZywgdW5zaWduZWQgbG9uZz4gQVNDSUky Q29kZTsKICAgICAgICBtYXA8dW5zaWduZWQgbG9uZywgc3RkOjpzdHJpbmc+IENvZGUyQVNDSUk7 CiAgICAgICAgbWFwPHVuc2lnbmVkIGxvbmcsIHN0ZDo6c3RyaW5nPiBGdWxsQ29kZTJBU0NJSTsK ICAgICAgICB0eXBlZGVmIG1hcDxzdGQ6OnN0cmluZywgdW5zaWduZWQgbG9uZz46Oml0ZXJhdG9y IGl0ZXJBMkM7CiAgICAgICAgdHlwZWRlZiBtYXA8dW5zaWduZWQgbG9uZywgc3RkOjpzdHJpbmc+ OjppdGVyYXRvciBpdGVyQzJBOwogcHVibGljOgoKICAgICAgICBUUHJvdG9jb2wodm9pZCk7CiMg NDYgInByb3RvY29sLmgiCiAgICAgICAgY29uc3QgY2hhciogRm9ybWF0dGVyKGNvbnN0IHVuc2ln bmVkIGxvbmcmLGNvbnN0IHVuc2lnbmVkIGxvbmcmKTsKIyA1NyAicHJvdG9jb2wuaCIKICAgICAg ICBjb25zdCBpbnQgSW50ZXJwcmV0ZXIoY29uc3Qgc3RyaW5nJiBDb21tYW5kLHVuc2lnbmVkIGxv bmcmLHVuc2lnbmVkIGxvbmcmKTsKCgoKCgoKICAgICAgICBjb25zdCBjaGFyKiBUcmFuc2xhdGVU b1N0cmluZyhjb25zdCB1bnNpZ25lZCBsb25nJixjb25zdCB1bnNpZ25lZCBsb25nJik7Cn07CiMg MTIgInJlc291cmNlcy5jcHAiIDIKCgp2b2lkIFRMb29rdXBUYWJsZTo6RmlsbFRhYmxlKGVMYW5n dWFnZXMgbGFuZ3VhZ2UpCnsKCiAgICAgICAgY2xlYXIoKTsKICAgICAgICBpbnNlcnQobWFrZV9w YWlyKEJUTl9QRVJDRU5ULHN0cmluZygiJSIpKSk7CgoKICAgICAgICBpZiAobGFuZ3VhZ2UgPT0g aXRfSVQpIHsKICAgICAgICAgICAgICAgIGluc2VydChtYWtlX3BhaXIoQlROX0FCU09MVVRFLHN0 cmluZygiYXNzIikpKTsKICAgICAgICAgICAgICAgIGluc2VydChtYWtlX3BhaXIoQlROX05FV0ZP Uk1VTEEsc3RyaW5nKCJOdW92YSBmb3JtdWxhIikpKTsKICAgICAgICAgICAgICAgIGluc2VydCht YWtlX3BhaXIoQlROX0FVVE8sc3RyaW5nKCJBdXRvbWF0aWNvIikpKTsKICAgICAgICAgICAgICAg IGluc2VydChtYWtlX3BhaXIoQlROX1NUQVJULHN0cmluZygiU3RhcnQiKSkpOwogICAgICAgICAg ICAgICAgaW5zZXJ0KG1ha2VfcGFpcihCVE5fU1RPUCxzdHJpbmcoIlN0b3AiKSkpOwogICAgICAg ICAgICAgICAgaW5zZXJ0KG1ha2VfcGFpcihCVE5fU0VNSUFVVE8sc3RyaW5nKCJTZW1pYXV0byIp KSk7CiAgICAgICAgICAgICAgICBpbnNlcnQobWFrZV9wYWlyKEJUTl9NQU5VQUwsc3RyaW5nKCJN YW51YWxlIikpKTsKICAgICAgICAgICAgICAgIGluc2VydChtYWtlX3BhaXIoQlROX0ZPUk1VTEFT LHN0cmluZygiRm9ybXVsZSIpKSk7CiAgICAgICAgICAgICAgICBpbnNlcnQobWFrZV9wYWlyKEJU Tl9SRVBPUlRTLHN0cmluZygiUmVwb3J0IikpKTsKICAgICAgICAgICAgICAgIGluc2VydChtYWtl X3BhaXIoQlROX1NBVkUsc3RyaW5nKCJTYWx2YSIpKSk7CiAgICAgICAgICAgICAgICBpbnNlcnQo bWFrZV9wYWlyKEJUTl9FWElULHN0cmluZygiRXNjaSIpKSk7CiAgICAgICAgICAgICAgICBpbnNl cnQobWFrZV9wYWlyKEJUTl9PUEVOLHN0cmluZygiQXByaSIpKSk7CiAgICAgICAgICAgICAgICBp bnNlcnQobWFrZV9wYWlyKEJUTl9DTE9TRSxzdHJpbmcoIkNoaXVkaSIpKSk7CiAgICAgICAgICAg ICAgICBpbnNlcnQobWFrZV9wYWlyKEJUTl9VUERBVEVGT1JNVUxBLHN0cmluZygiQWdnLiBmb3Jt dWxhIikpKTsKICAgICAgICAgICAgICAgIGluc2VydChtYWtlX3BhaXIoQlROX1JFU0VULHN0cmlu ZygiUmVzZXQiKSkpOwogICAgICAgICAgICAgICAgaW5zZXJ0KG1ha2VfcGFpcihCVE5fQ0xFQVIs c3RyaW5nKCJBenplcmEiKSkpOwogICAgICAgICAgICAgICAgaW5zZXJ0KG1ha2VfcGFpcihCVE5f UFJJTlQsc3RyaW5nKCJTdGFtcGUiKSkpOwogICAgICAgICAgICAgICAgaW5zZXJ0KG1ha2VfcGFp cihCVE5fQ09ORklHLHN0cmluZygiQ29uZmlndXJhemlvbmUiKSkpOwogICAgICAgICAgICAgICAg aW5zZXJ0KG1ha2VfcGFpcihCVE5fWkVSTyxzdHJpbmcoIlpFUk8iKSkpOwogICAgICAgICAgICAg ICAgaW5zZXJ0KG1ha2VfcGFpcihCVE5fUkVGLHN0cmluZygiUkVGIikpKTsKICAgICAgICAgICAg ICAgIGluc2VydChtYWtlX3BhaXIoQlROX1NFTEVDVEZPUk1VTEEsc3RyaW5nKCJSZW5kaSBhdHRp dmEiKSkpOwogICAgICAgICAgICAgICAgaW5zZXJ0KG1ha2VfcGFpcihCVE5fT1BFTldBVEVSLHN0 cmluZygiQXByaSBhY3F1YSIpKSk7CiAgICAgICAgICAgICAgICBpbnNlcnQobWFrZV9wYWlyKEJU Tl9DTE9TRVdBVEVSLHN0cmluZygiQ2hpdWRpIGFjcXVhIikpKTsKCiAgICAgICAgICAgICAgICBp bnNlcnQobWFrZV9wYWlyKEJUTl9QUkVWSU9VUyxzdHJpbmcoIlByZWNlZGVudGUiKSkpOwogICAg ICAgICAgICAgICAgaW5zZXJ0KG1ha2VfcGFpcihCVE5fTkVYVCxzdHJpbmcoIlN1Y2Nlc3NpdmEi KSkpOwoKICAgICAgICAgICAgICAgIGluc2VydChtYWtlX3BhaXIoTEJMX0ZPUk1VTEFTUEFHRSxz dHJpbmcoIkdlc3Rpb25lIGZvcm11bGUiKSkpOwogICAgICAgICAgICAgICAgaW5zZXJ0KG1ha2Vf cGFpcihMQkxfVVNFUlBBUk1TUEFHRSxzdHJpbmcoIlBhcmFtZXRyaSB1dGVudGUiKSkpOwogICAg ICAgICAgICAgICAgaW5zZXJ0KG1ha2VfcGFpcihMQkxfTUFDSElORVBBUk1TUEFHRSxzdHJpbmco IlBhcmFtZXRyaSBtYWNjaGluYSIpKSk7CiAgICAgICAgICAgICAgICBpbnNlcnQobWFrZV9wYWly KExCTF9SRVBPUlRTUEFHRSxzdHJpbmcoIlN0YXRpc3RpY2hlIGNvbnN1bWkgZSBjb3N0aSIpKSk7 CiAgICAgICAgICAgICAgICBpbnNlcnQobWFrZV9wYWlyKExCTF9GT1JNVUxBLHN0cmluZygiRm9y bXVsYSIpKSk7CiAgICAgICAgICAgICAgICBpbnNlcnQobWFrZV9wYWlyKExCTF9UT1RBTCxzdHJp bmcoIlRvdGFsZSIpKSk7CiAgICAgICAgICAgICAgICBpbnNlcnQobWFrZV9wYWlyKExCTF9QQVJU SUFMLHN0cmluZygiUGFyemlhbGUiKSkpOwogICAgICAgICAgICAgICAgaW5zZXJ0KG1ha2VfcGFp cihMQkxfSDJPLHN0cmluZygiQWNxdWEiKSkpOwogICAgICAgICAgICAgICAgaW5zZXJ0KG1ha2Vf cGFpcihMQkxfTUlYVElNRSxzdHJpbmcoIlRlbXBvIGQnaW1wYXN0byIpKSk7CiAgICAgICAgICAg ICAgICBpbnNlcnQobWFrZV9wYWlyKExCTF9NT0RFLHN0cmluZygiTW9kbyIpKSk7CiAgICAgICAg ICAgICAgICBpbnNlcnQobWFrZV9wYWlyKExCTF9QUk9EVUNUSU9OLHN0cmluZygiUHJvZHV6aW9u ZSIpKSk7CiAgICAgICAgICAgICAgICBpbnNlcnQobWFrZV9wYWlyKExCTF9QUk9EVUNUTkFNRSxz dHJpbmcoIk5vbWUgcHJvZG90dG8iKSkpOwogICAgICAgICAgICAgICAgaW5zZXJ0KG1ha2VfcGFp cihMQkxfUFJPRFVDVENPU1Qsc3RyaW5nKCJDb3N0byBwcm9kb3R0byIpKSk7CiAgICAgICAgICAg ICAgICBpbnNlcnQobWFrZV9wYWlyKExCTF9XQVRFUkNPU1Qsc3RyaW5nKCJDb3N0byBhY3F1YSBw ZXIgbCBvIGdhbCIpKSk7CiAgICAgICAgICAgICAgICBpbnNlcnQobWFrZV9wYWlyKExCTF9TWVNU RU0sc3RyaW5nKCJVc2Egc2lzdGVtYSBtZXRyaWNvPyIpKSk7CiAgICAgICAgICAgICAgICBpbnNl cnQobWFrZV9wYWlyKExCTF9GQUNUT1JZTkFNRSxzdHJpbmcoIk5vbWUgYXppZW5kYSIpKSk7CiAg ICAgICAgICAgICAgICBpbnNlcnQobWFrZV9wYWlyKExCTF9DVVJSRU5DWU5BTUUsc3RyaW5nKCJT aWdsYSB2YWx1dGEiKSkpOwogICAgICAgICAgICAgICAgaW5zZXJ0KG1ha2VfcGFpcihMQkxfQ0xF QVJDT05GSVJNLHN0cmluZygiT3BlcmF6aW9uZSBpcnJldmVyc2liaWxlIVxuUHJvY2Vkbz8iKSkp OwogICAgICAgICAgICAgICAgaW5zZXJ0KG1ha2VfcGFpcihMQkxfWUVTLHN0cmluZygiU2kiKSkp OwogICAgICAgICAgICAgICAgaW5zZXJ0KG1ha2VfcGFpcihMQkxfTk8sc3RyaW5nKCJObyIpKSk7 CiAgICAgICAgICAgICAgICBpbnNlcnQobWFrZV9wYWlyKExCTF9SRVRSWSxzdHJpbmcoIlJpcHJv dmEiKSkpOwogICAgICAgICAgICAgICAgaW5zZXJ0KG1ha2VfcGFpcihMQkxfQUJPUlQsc3RyaW5n KCJBbm51bGxhIikpKTsKICAgICAgICAgICAgICAgIGluc2VydChtYWtlX3BhaXIoTEJMX1RJTUVS MSxzdHJpbmcoIlN2dW90YW1lbnRvIG5hc3RybyBkb3NhZ2dpbyIpKSk7CiAgICAgICAgICAgICAg ICBpbnNlcnQobWFrZV9wYWlyKExCTF9USU1FUjIsc3RyaW5nKCJTdnVvdGFtZW50byBiZW5uYSIp KSk7CiAgICAgICAgICAgICAgICBpbnNlcnQobWFrZV9wYWlyKExCTF9USU1FUjMsc3RyaW5nKCJT dnVvdGFtZW50byBtaXhlciIpKSk7CiAgICAgICAgICAgICAgICBpbnNlcnQobWFrZV9wYWlyKExC TF9USU1FUjQsc3RyaW5nKCJTdnVvdGFtZW50byBuYXN0cm8gc2NhcmljbyIpKSk7CiAgICAgICAg ICAgICAgICBpbnNlcnQobWFrZV9wYWlyKExCTF9USU1FT1VUMSxzdHJpbmcoIlRpbWVvdXQgY29t dW5pY2F6aW9uZSIpKSk7CiAgICAgICAgICAgICAgICBpbnNlcnQobWFrZV9wYWlyKExCTF9USU1F T1VUMixzdHJpbmcoIlRpbWVvdXQgY29tcG9uZW50aSIpKSk7CiAgICAgICAgICAgICAgICBpbnNl cnQobWFrZV9wYWlyKExCTF9USU1FT1VUMyxzdHJpbmcoIlRpbWVvdXQgZmluZWNvcnNhIGJlbm5h IikpKTsKICAgICAgICAgICAgICAgIGluc2VydChtYWtlX3BhaXIoTEJMX1RJTUVPVVQ0LHN0cmlu ZygiVGltZW91dCBmaW5lY29yc2EgcG9ydGEgbWl4IikpKTsKICAgICAgICAgICAgICAgIGluc2Vy dChtYWtlX3BhaXIoTEJMX1RJTUVPVVQ1LHN0cmluZygiVGltZW91dCBtYW5jYW56YSBhY3F1YSIp KSk7CiAgICAgICAgICAgICAgICBpbnNlcnQobWFrZV9wYWlyKExCTF9USU1FT1VUNixzdHJpbmco IlRpbWVvdXQgcmllbXBpbWVudG8gZGVwb3NpdG8iKSkpOwogICAgICAgICAgICAgICAgaW5zZXJ0 KG1ha2VfcGFpcihMQkxfWkVST1RPTEwsc3RyaW5nKCJUb2xsZXJhbnphIHRhcmEgemVybyIpKSk7 CiAgICAgICAgICAgICAgICBpbnNlcnQobWFrZV9wYWlyKExCTF9RVFlNSVgsc3RyaW5nKCJDYXBp ZW56YSBtaXhlciIpKSk7CiAgICAgICAgICAgICAgICBpbnNlcnQobWFrZV9wYWlyKExCTF9JUEFE RFIsc3RyaW5nKCJJbmRpcml6em8gSVAgc2VydmVyIikpKTsKICAgICAgICAgICAgICAgIGluc2Vy dChtYWtlX3BhaXIoTEJMX0lQUE9SVCxzdHJpbmcoIlBvcnRhIHNlcnZlciIpKSk7CiAgICAgICAg ICAgICAgICBpbnNlcnQobWFrZV9wYWlyKExCTF9DT05USU5VRSxzdHJpbmcoIkNvbnRpbnVhIikp KTsKICAgICAgICAgICAgICAgIGluc2VydChtYWtlX3BhaXIoTEJMX1NUT1Asc3RyaW5nKCJTdG9w IikpKTsKICAgICAgICAgICAgICAgIGluc2VydChtYWtlX3BhaXIoTEJMX0xBTkdVQUdFLHN0cmlu ZygiTGluZ3VhIikpKTsKICAgICAgICAgICAgICAgIGluc2VydChtYWtlX3BhaXIoTEJMX0NBTElC UkFUSU9OLHN0cmluZygiU2lzdGVtYSBkaSBjYWxpYnJhemlvbmUiKSkpOwogICAgICAgICAgICAg ICAgaW5zZXJ0KG1ha2VfcGFpcihMQkxfTE9BRENFTEwsc3RyaW5nKCJMZXR0dXJhIGNlbGxhIikp KTsKICAgICAgICAgICAgICAgIGluc2VydChtYWtlX3BhaXIoTEJMX1dFSUdUSCxzdHJpbmcoIlBl c28iKSkpOwogICAgICAgICAgICAgICAgaW5zZXJ0KG1ha2VfcGFpcihMQkxfVElMRVMsc3RyaW5n KCJQaWFzdHJlbGxlIikpKTsKICAgICAgICAgICAgICAgIGluc2VydChtYWtlX3BhaXIoTEJMX1JF UE9SVE9GLHN0cmluZygiUmFwcG9ydG8gZGVsOiIpKSk7CiAgICAgICAgICAgICAgICBpbnNlcnQo bWFrZV9wYWlyKExCTF9QUklOVFNQRVJTSE9ULHN0cmluZygiUGlhc3RyZWxsZSBwZXIgc3RhbXBh dGE6IikpKTsKICAgICAgICAgICAgICAgIGluc2VydChtYWtlX3BhaXIoTEJMX0hFTFAsc3RyaW5n KCJGdW56aW9uaSBkYSB0YXN0aWVyYTpcbmMgLSBwYWdpbmEgZGkgY29uZmlndXJhemlvbmVcbnMg LSBwYWdpbmEgZGVsIHNpbm90dGljb1xucSAtIHVzY2l0YSBkYWxsJ2FwcGxpY2F6aW9uZSIgKSkp OwoKCgoKCgogICAgICAgICAgICAgICAgaW5zZXJ0KG1ha2VfcGFpcihNU0dfQ1RMLHN0cmluZygi TTAxLiBDb211bmljYXppb25lIGludGVycm90dGEgY29uIGlsIHByb2Nlc3NvIGRpIGNvbnRyb2xs byIpKSk7CiAgICAgICAgICAgICAgICBpbnNlcnQobWFrZV9wYWlyKE1TR19DVEUsc3RyaW5nKCJN MDIuIENvbXVuaWNhemlvbmUgc3RhYmlsaXRhIGNvbiBpbCBwcm9jZXNzbyBkaSBjb250cm9sbG8i KSkpOwogICAgICAgICAgICAgICAgaW5zZXJ0KG1ha2VfcGFpcihNU0dfRU1HLHN0cmluZygiTTAz LiBFbWVyZ2VuemEiKSkpOwogICAgICAgICAgICAgICAgaW5zZXJ0KG1ha2VfcGFpcihNU0dfTlJF LHN0cmluZygiTTA0LiBJbCBwcm9jZXNzbyBkaSBjb250cm9sbG8gbm9uIGhhIHJpc3Bvc3RvIGFs bCd1bHRpbW8gY29tYW5kby5cbkxhIG1hY2NoaW5hIHBvdHJlYmJlIHRyb3ZhcnNpIGluIHVubyBz dGF0byBhbm9tYWxvLiIpKSk7CiAgICAgICAgICAgICAgICBpbnNlcnQobWFrZV9wYWlyKE1TR19D TjEsc3RyaW5nKCJNMDUuIENvbnN1bWFiaWxlIDEgZXNhdXJpdG8iKSkpOwogICAgICAgICAgICAg ICAgaW5zZXJ0KG1ha2VfcGFpcihNU0dfQ04yLHN0cmluZygiTTA2LiBDb25zdW1hYmlsZSAyIGVz YXVyaXRvIikpKTsKICAgICAgICAgICAgICAgIGluc2VydChtYWtlX3BhaXIoTVNHX0NOMyxzdHJp bmcoIk0wNy4gQ29uc3VtYWJpbGUgMyBlc2F1cml0byIpKSk7CiAgICAgICAgICAgICAgICBpbnNl cnQobWFrZV9wYWlyKE1TR19IMk8sc3RyaW5nKCJNMDguIE1hbmNhbnphIGFjcXVhIikpKTsKICAg ICAgICAgICAgICAgIGluc2VydChtYWtlX3BhaXIoTVNHX1dFSUdUSF9FWENFRURFRCxzdHJpbmco Ik0wOS4gTGEgc29tbWEgZGVpIGNvbXBvbmVudGkgZGVsbGEgZm9ybXVsYSBzdXBlcmEgaWwgcGVz byBtYXNzaW1vIGNoZSBpbCBtaXhlciBlJyBpbiBncmFkbyBkaSBjb250ZW5lcmUuIgoKCiAgICAg ICAgICAgICAgICApKSk7CiAgICAgICAgICAgICAgICBpbnNlcnQobWFrZV9wYWlyKE1TR19DT05G SVJNTUFOVUFMLHN0cmluZygiTTEwLiBTaSB2dW9sZSB2ZXJhbWVudGUgcGFzc2FyZSBpbiBtYW51 YWxlIGR1cmFudGUgaWwgY2ljbG8/XG4gQXppb25hcmUgY29tYW5kaSBtYW51YWxpIGR1cmFudGUg aWwgY2ljbG8gcHVvJyBwb3JyZSBsYSBtYWNjaGluYSBpbiB1bm8gc3RhdG8gYW5vbWFsbyBlIGRh bm5lZ2dpYXJlIGxhIApwcm9kdXppb25lOiBzYXJlYmJlIG1lZ2xpbyBmZXJtYXJlIGlsIGNpY2xv IGUgcG9pIHBhc3NhcmUgaW4gbWFudWFsZS4iCgoKCgoKCiAgICAgICAgICAgICAgICApKSk7CiAg ICAgICAgICAgICAgICBpbnNlcnQobWFrZV9wYWlyKE1TR19TS0lQRkFJTFVSRSxzdHJpbmcoIk0x MS4gTG8gc2tpcHBlciBlJyByaW1hc3RvIGluIHVuYSBwb3NpemlvbmUgaW50ZXJtZWRpYS4gQ29u dHJvbGxhcmUgZSByaXRlbnRhcmUgbCdvcGVyYXppb25lLCBvcHB1cmUgYW5udWxsYXJlIHBlciBp bnRlcnJvbXBlcmUgaWwgY2ljbG8iCgoKCiAgICAgICAgICAgICAgICApKSk7CiAgICAgICAgICAg ICAgICBpbnNlcnQobWFrZV9wYWlyKE1TR19ET09SRkFJTFVSRSxzdHJpbmcoIk0xMi4gTGEgcG9y dGEgZScgcmltYXN0YSBpbiB1bmEgcG9zaXppb25lIGludGVybWVkaWEuIENvbnRyb2xsYXJlIGUg cml0ZW50YXJlIGwnb3BlcmF6aW9uZSwgb3BwdXJlIGFubnVsbGFyZSBwZXIgaW50ZXJyb21wZXJl IGlsIGNpY2xvIgoKCgogICAgICAgICAgICAgICAgKSkpOwogICAgICAgICAgICAgICAgaW5zZXJ0 KG1ha2VfcGFpcihNU0dfTU9UT1JGQVVMVCxzdHJpbmcoIk0xMy4gQXZhcmlhIG1hZ25ldG90ZXJt aWNpIC0gY2ljbG8gaW50ZXJyb3R0by5cbiBDb250cm9sbGFyZSBzdWwgc2lub3R0aWNvIHF1YWxl IG1vdG9yZSBoYSBkYXRvIHByb2JsZW1pIGUgcmlwcmlzdGluYXJlIGxhIHNpdHVhemlvbmUuIgoK CgogICAgICAgICAgICAgICAgKSkpOwogICAgICAgICAgICAgICAgaW5zZXJ0KG1ha2VfcGFpcihN U0dfQ0hFQ0tTS0lQLHN0cmluZygiTTE0LiBMbyBza2lwcGVyIGUnIGluIHVuYSBjb25kaXppb25l IGlnbm90YTogcG90cmViYmUgY29udGVuZXJlIG8gbWVubyBkZWwgbWF0ZXJpYWxlLlxuIFByZW1l cmUgJ2NvbnRpbnVhJyBwZXIgbG8gc3Z1b3RhbWVudG8gYXV0b21hdGljbywgb3BwdXJlICdzdG9w JyBwZXIgZmVybWFyZSBpbCBjaWNsby4iCgoKCgogICAgICAgICAgICAgICAgKSkpOwogICAgICAg ICAgICAgICAgaW5zZXJ0KG1ha2VfcGFpcihNU0dfQ0hFQ0tNSVgsc3RyaW5nKCJNMTUuIElsIG1p eGVyIGUnIGluIHVuYSBjb25kaXppb25lIGlnbm90YTogcG90cmViYmUgY29udGVuZXJlIG8gbWVu byBkZWwgbWF0ZXJpYWxlLlxuIFByZW1lcmUgJ2NvbnRpbnVhJyBwZXIgbG8gc3Z1b3RhbWVudG8g YXV0b21hdGljbywgb3BwdXJlICdzdG9wJyBwZXIgZmVybWFyZSBpbCBjaWNsby4iCgoKCgogICAg ICAgICAgICAgICAgKSkpOwogICAgICAgICAgICAgICAgaW5zZXJ0KG1ha2VfcGFpcihNU0dfQ0hF Q0tCRUxULHN0cmluZygiTTE2LiBJbCBuYXN0cm8gZGkgcGVzYXR1cmEgZScgaW4gdW5hIGNvbmRp emlvbmUgaWdub3RhOiBwb3RyZWJiZSBjb250ZW5lcmUgbyBtZW5vIGRlbCBtYXRlcmlhbGUuXG4g UHJlbWVyZSAnY29udGludWEnIHBlciBsbyBzdnVvdGFtZW50byBhdXRvbWF0aWNvLCBvcHB1cmUg J3N0b3AnIHBlciBmZXJtYXJlIGlsIGNpY2xvLiIKCgoKCiAgICAgICAgICAgICAgICApKSk7Cgog ICAgICAgICAgICAgICAgaW5zZXJ0KG1ha2VfcGFpcihQUk5fUkVQT1JULHN0cmluZygiUmFwcG9y dG8gZGkgcHJvZHV6aW9uZSBkZWwgIikpKTsKICAgICAgICAgICAgICAgIGluc2VydChtYWtlX3Bh aXIoUFJOX1BBUlRJQUwsc3RyaW5nKCJDb25zdW1pIHBhcnppYWxpOiIpKSk7CiAgICAgICAgICAg ICAgICBpbnNlcnQobWFrZV9wYWlyKFBSTl9UT1RBTCxzdHJpbmcoIkNvbnN1bWkgdG90YWxpOiIp KSk7CiAgICAgICAgICAgICAgICBpbnNlcnQobWFrZV9wYWlyKFBSTl9QUklOVFMsc3RyaW5nKCJQ aWFzdHJlbGxlIHN0YW1wYXRlOiIpKSk7CiAgICAgICAgICAgICAgICBpbnNlcnQobWFrZV9wYWly KFBSTl9BVkdDT1NULHN0cmluZygiQ29zdG8gbWVkaW8gYSBwaWFzdHJlbGxhOiIpKSk7CgogICAg ICAgICAgICAgICAgaW5zZXJ0KG1ha2VfcGFpcihNU0dfRVJSTlVMTFdFSUdUSCxzdHJpbmcoIk0x Ny4gSWwgcGVzbyBpbnNlcml0byBlJyBzYmFnbGlhdG8uXG5Db3JyZWdnZXJlLCBvcHB1cmUgYW5u dWxsYXJlIGxhIGNhbGlicmF6aW9uZSIKCgogICAgICAgICAgICAgICAgKSkpOwogICAgICAgICAg ICAgICAgaW5zZXJ0KG1ha2VfcGFpcihNU0dfRVJSUkVGLHN0cmluZygiTTE4LiBJbCBwZXNvIGRp IHJpZmVyaW1lbnRvIG5vbiBwdW8nIGVzc2VyZSBpbmZlcmlvcmUgYWwgcGVzbyBhIHZ1b3RvXG5D b3JyZWdnZXJlLCBvcHB1cmUgYW5udWxsYXJlIGxhIGNhbGlicmF6aW9uZSIKCgoKICAgICAgICAg ICAgICAgICkpKTsKCgogICAgICAgICAgICAgICAgaW5zZXJ0KG1ha2VfcGFpcihNU0dfQ0FMU1RB UlQsc3RyaW5nKCJQUk9DRVNTTyBESSBDQUxJQlJBWklPTkU6XG5GQVNFIDEpIFN2dW90YXJlIGNv bXBsZXRhbWVudGUgaWwgbmFzdHJvIGRpIGNhcmljb1xuRkFTRSAyKSBBY3F1aXNpcmUgaWwgcGVz byBhIHZ1b3RvIGNvbiBpbCB0YXN0byBaRVJPIgoKCgogICAgICAgICAgICAgICAgKSkpOwogICAg ICAgICAgICAgICAgaW5zZXJ0KG1ha2VfcGFpcihNU0dfQ0FMUkVBRFdFSUdUSCxzdHJpbmcoIkZB U0UgMykgcG9ycmUgc3VsIG5hc3RybyB1biBwZXNvIG5vdG9cbkZBU0UgNCkgaW5zZXJpcmUgaWwg cGVzbyBuZWxsJ2FwcG9zaXRhIGNhc2VsbGEiCgoKICAgICAgICAgICAgICAgICkpKTsKICAgICAg ICAgICAgICAgIGluc2VydChtYWtlX3BhaXIoTVNHX0NBTFNFVFJFRkVSRU5DRSxzdHJpbmcoIkZB U0UgNSkgQWNxdWlzaXJlIGlsIHBlc28gY2FtcGlvbmUgY29uIGlsIHRhc3RvIFJFRi4iCgogICAg ICAgICAgICAgICAgKSkpOwogICAgICAgICAgICAgICAgaW5zZXJ0KG1ha2VfcGFpcihNU0dfQ0FM RU5ELHN0cmluZygiTGEgbWFjY2hpbmEgZScgY2FsaWJyYXRhIikpKTsKICAgICAgICAgICAgICAg IGluc2VydChtYWtlX3BhaXIoTEJMX1RJTUVGT1JNQVQsc3RyaW5nKCIlZC8lbS8lWSIpKSk7CiAg ICAgICAgICAgICAgICBpbnNlcnQobWFrZV9wYWlyKExCTF9USU1FRk9STUFUX0hJU1Qsc3RyaW5n KCIlZC8lbS8lWSAoc29sbyBzdG9yaWNvIHRvdGFsaSkiKSkpOwogICAgICAgIH0KICAgICAgICBl bHNlIGlmIChsYW5ndWFnZSA9PSBlbl9VUykgewogICAgICAgICAgICAgICAgaW5zZXJ0KG1ha2Vf cGFpcihCVE5fQUJTT0xVVEUsc3RyaW5nKCJhYnMiKSkpOwogICAgICAgICAgICAgICAgaW5zZXJ0 KG1ha2VfcGFpcihCVE5fTkVXRk9STVVMQSxzdHJpbmcoIk5ldyBmb3JtdWxhIikpKTsKICAgICAg ICAgICAgICAgIGluc2VydChtYWtlX3BhaXIoQlROX0FVVE8sc3RyaW5nKCJBdXRvbWF0aWMiKSkp OwogICAgICAgICAgICAgICAgaW5zZXJ0KG1ha2VfcGFpcihCVE5fU1RBUlQsc3RyaW5nKCJTdGFy dCIpKSk7CiAgICAgICAgICAgICAgICBpbnNlcnQobWFrZV9wYWlyKEJUTl9TVE9QLHN0cmluZygi U3RvcCIpKSk7CiAgICAgICAgICAgICAgICBpbnNlcnQobWFrZV9wYWlyKEJUTl9TRU1JQVVUTyxz dHJpbmcoIlNlbWlhdXRvIikpKTsKICAgICAgICAgICAgICAgIGluc2VydChtYWtlX3BhaXIoQlRO X01BTlVBTCxzdHJpbmcoIk1hbnVhbCIpKSk7CiAgICAgICAgICAgICAgICBpbnNlcnQobWFrZV9w YWlyKEJUTl9GT1JNVUxBUyxzdHJpbmcoIkZvcm11bGFzIikpKTsKICAgICAgICAgICAgICAgIGlu c2VydChtYWtlX3BhaXIoQlROX1JFUE9SVFMsc3RyaW5nKCJSZXBvcnQiKSkpOwogICAgICAgICAg ICAgICAgaW5zZXJ0KG1ha2VfcGFpcihCVE5fU0FWRSxzdHJpbmcoIlNhdmUiKSkpOwogICAgICAg ICAgICAgICAgaW5zZXJ0KG1ha2VfcGFpcihCVE5fRVhJVCxzdHJpbmcoIkV4aXQiKSkpOwogICAg ICAgICAgICAgICAgaW5zZXJ0KG1ha2VfcGFpcihCVE5fT1BFTixzdHJpbmcoIk9wZW4iKSkpOwog ICAgICAgICAgICAgICAgaW5zZXJ0KG1ha2VfcGFpcihCVE5fQ0xPU0Usc3RyaW5nKCJDbG9zZSIp KSk7CiAgICAgICAgICAgICAgICBpbnNlcnQobWFrZV9wYWlyKEJUTl9VUERBVEVGT1JNVUxBLHN0 cmluZygiVXBkLiBmb3JtdWxhIikpKTsKICAgICAgICAgICAgICAgIGluc2VydChtYWtlX3BhaXIo QlROX1JFU0VULHN0cmluZygiUmVzZXQiKSkpOwogICAgICAgICAgICAgICAgaW5zZXJ0KG1ha2Vf cGFpcihCVE5fQ0xFQVIsc3RyaW5nKCJDbGVhciIpKSk7CiAgICAgICAgICAgICAgICBpbnNlcnQo bWFrZV9wYWlyKEJUTl9QUklOVCxzdHJpbmcoIlByaW50IikpKTsKICAgICAgICAgICAgICAgIGlu c2VydChtYWtlX3BhaXIoQlROX0NPTkZJRyxzdHJpbmcoIkNvbmZpZ3VyYXRpb24iKSkpOwogICAg ICAgICAgICAgICAgaW5zZXJ0KG1ha2VfcGFpcihCVE5fWkVSTyxzdHJpbmcoIlpFUk8iKSkpOwog ICAgICAgICAgICAgICAgaW5zZXJ0KG1ha2VfcGFpcihCVE5fUkVGLHN0cmluZygiUkVGIikpKTsK ICAgICAgICAgICAgICAgIGluc2VydChtYWtlX3BhaXIoQlROX1NFTEVDVEZPUk1VTEEsc3RyaW5n KCJNYWtlIGN1cnJlbnQiKSkpOwogICAgICAgICAgICAgICAgaW5zZXJ0KG1ha2VfcGFpcihCVE5f T1BFTldBVEVSLHN0cmluZygiQWRkIHdhdGVyIikpKTsKICAgICAgICAgICAgICAgIGluc2VydCht YWtlX3BhaXIoQlROX0NMT1NFV0FURVIsc3RyaW5nKCJTdG9wIHdhdGVyIikpKTsKCiAgICAgICAg ICAgICAgICBpbnNlcnQobWFrZV9wYWlyKEJUTl9QUkVWSU9VUyxzdHJpbmcoIlByZXZpb3VzIikp KTsKICAgICAgICAgICAgICAgIGluc2VydChtYWtlX3BhaXIoQlROX05FWFQsc3RyaW5nKCJOZXh0 IikpKTsKCiAgICAgICAgICAgICAgICBpbnNlcnQobWFrZV9wYWlyKExCTF9GT1JNVUxBU1BBR0Us c3RyaW5nKCJGb3JtdWxhIG1hbmFnZW1lbnQiKSkpOwogICAgICAgICAgICAgICAgaW5zZXJ0KG1h a2VfcGFpcihMQkxfVVNFUlBBUk1TUEFHRSxzdHJpbmcoIlVzZXIgcGFyYW1ldGVycyIpKSk7CiAg ICAgICAgICAgICAgICBpbnNlcnQobWFrZV9wYWlyKExCTF9NQUNISU5FUEFSTVNQQUdFLHN0cmlu ZygiTWFjaGluZSBwYXJhbWV0ZXJzIikpKTsKICAgICAgICAgICAgICAgIGluc2VydChtYWtlX3Bh aXIoTEJMX1JFUE9SVFNQQUdFLHN0cmluZygiQ29tcG9uZW50cycgdXNlIGFuZCBjb3N0IikpKTsK ICAgICAgICAgICAgICAgIGluc2VydChtYWtlX3BhaXIoTEJMX0ZPUk1VTEEsc3RyaW5nKCJGb3Jt dWxhIikpKTsKICAgICAgICAgICAgICAgIGluc2VydChtYWtlX3BhaXIoTEJMX1RPVEFMLHN0cmlu ZygiVG90YWwiKSkpOwogICAgICAgICAgICAgICAgaW5zZXJ0KG1ha2VfcGFpcihMQkxfUEFSVElB TCxzdHJpbmcoIlBhcnRpYWwiKSkpOwogICAgICAgICAgICAgICAgaW5zZXJ0KG1ha2VfcGFpcihM QkxfSDJPLHN0cmluZygiV2F0ZXIiKSkpOwogICAgICAgICAgICAgICAgaW5zZXJ0KG1ha2VfcGFp cihMQkxfTUlYVElNRSxzdHJpbmcoIk1peGluZyB0aW1lIikpKTsKICAgICAgICAgICAgICAgIGlu c2VydChtYWtlX3BhaXIoTEJMX01PREUsc3RyaW5nKCJNb2RlIikpKTsKICAgICAgICAgICAgICAg IGluc2VydChtYWtlX3BhaXIoTEJMX1BST0RVQ1RJT04sc3RyaW5nKCJQcm9kdWN0aW9uIikpKTsK ICAgICAgICAgICAgICAgIGluc2VydChtYWtlX3BhaXIoTEJMX1BST0RVQ1ROQU1FLHN0cmluZygi UHJvZHVjdCBuYW1lIikpKTsKICAgICAgICAgICAgICAgIGluc2VydChtYWtlX3BhaXIoTEJMX1BS T0RVQ1RDT1NULHN0cmluZygiUHJvZHVjdCBjb3N0IikpKTsKICAgICAgICAgICAgICAgIGluc2Vy dChtYWtlX3BhaXIoTEJMX1dBVEVSQ09TVCxzdHJpbmcoIldhdGVyIGNvc3QgcGVyIGx0IG9yIGdh bCIpKSk7CiAgICAgICAgICAgICAgICBpbnNlcnQobWFrZV9wYWlyKExCTF9TWVNURU0sc3RyaW5n KCJVc2UgbWV0cmljIHN5c3RlbT8iKSkpOwogICAgICAgICAgICAgICAgaW5zZXJ0KG1ha2VfcGFp cihMQkxfRkFDVE9SWU5BTUUsc3RyaW5nKCJDb21wYW55IG5hbWUiKSkpOwogICAgICAgICAgICAg ICAgaW5zZXJ0KG1ha2VfcGFpcihMQkxfQ1VSUkVOQ1lOQU1FLHN0cmluZygiQ3VycmVuY3kgYWJi ci4iKSkpOwogICAgICAgICAgICAgICAgaW5zZXJ0KG1ha2VfcGFpcihMQkxfQ0xFQVJDT05GSVJN LHN0cmluZygiT3BlcmF0aW9uIGNhbm5vdCBiZSB1bmRvbmUhXG5Qcm9jZWVkPyIpKSk7CiAgICAg ICAgICAgICAgICBpbnNlcnQobWFrZV9wYWlyKExCTF9ZRVMsc3RyaW5nKCJZZXMiKSkpOwogICAg ICAgICAgICAgICAgaW5zZXJ0KG1ha2VfcGFpcihMQkxfTk8sc3RyaW5nKCJObyIpKSk7CiAgICAg ICAgICAgICAgICBpbnNlcnQobWFrZV9wYWlyKExCTF9SRVRSWSxzdHJpbmcoIlJldHJ5IikpKTsK ICAgICAgICAgICAgICAgIGluc2VydChtYWtlX3BhaXIoTEJMX0FCT1JULHN0cmluZygiQWJvcnQi KSkpOwogICAgICAgICAgICAgICAgaW5zZXJ0KG1ha2VfcGFpcihMQkxfVElNRVIxLHN0cmluZygi RG9zaW5nIGJlbHQgZW1wdHlpbmcgb3V0IikpKTsKICAgICAgICAgICAgICAgIGluc2VydChtYWtl X3BhaXIoTEJMX1RJTUVSMixzdHJpbmcoIkJ1Y2tldCBlbXB0eWluZyBvdXQiKSkpOwogICAgICAg ICAgICAgICAgaW5zZXJ0KG1ha2VfcGFpcihMQkxfVElNRVIzLHN0cmluZygiTWl4ZXIgZW1wdHlp bmcgb3V0IikpKTsKICAgICAgICAgICAgICAgIGluc2VydChtYWtlX3BhaXIoTEJMX1RJTUVSNCxz dHJpbmcoIlVubG9hZGluZyBiZWx0IGVtcHR5aW5nIG91dCIpKSk7CiAgICAgICAgICAgICAgICBp bnNlcnQobWFrZV9wYWlyKExCTF9USU1FT1VUMSxzdHJpbmcoIkNvbW11bmljYXRpb24gdGltZW91 dCIpKSk7CiAgICAgICAgICAgICAgICBpbnNlcnQobWFrZV9wYWlyKExCTF9USU1FT1VUMixzdHJp bmcoIk91dCBvZiBjb21wb25lbnQgdGltZW91dCIpKSk7CiAgICAgICAgICAgICAgICBpbnNlcnQo bWFrZV9wYWlyKExCTF9USU1FT1VUMyxzdHJpbmcoIkJ1Y2tldCBsaW1pdCBzd2l0Y2ggdGltZW91 dCIpKSk7CiAgICAgICAgICAgICAgICBpbnNlcnQobWFrZV9wYWlyKExCTF9USU1FT1VUNCxzdHJp bmcoIk1peGVyIGRvb3IgbGltaXQgc3dpdGNoIHRpbWVvdXQiKSkpOwogICAgICAgICAgICAgICAg aW5zZXJ0KG1ha2VfcGFpcihMQkxfVElNRU9VVDUsc3RyaW5nKCJPdXQgb2Ygd2F0ZXIgdGltZW91 dCIpKSk7CiAgICAgICAgICAgICAgICBpbnNlcnQobWFrZV9wYWlyKExCTF9USU1FT1VUNixzdHJp bmcoIkRlcG90IGZpbGxpbmcgdGltZW91dCIpKSk7CiAgICAgICAgICAgICAgICBpbnNlcnQobWFr ZV9wYWlyKExCTF9aRVJPVE9MTCxzdHJpbmcoIlRhcmUgdG9sbGVyYW5jZSIpKSk7CiAgICAgICAg ICAgICAgICBpbnNlcnQobWFrZV9wYWlyKExCTF9RVFlNSVgsc3RyaW5nKCJNaXhlciBjYXBhY2l0 eSIpKSk7CiAgICAgICAgICAgICAgICBpbnNlcnQobWFrZV9wYWlyKExCTF9JUEFERFIsc3RyaW5n KCJTZXJ2ZXIgSVAgYWRkcmVzcyIpKSk7CiAgICAgICAgICAgICAgICBpbnNlcnQobWFrZV9wYWly KExCTF9JUFBPUlQsc3RyaW5nKCJTZXJ2ZXIgcG9ydCIpKSk7CiAgICAgICAgICAgICAgICBpbnNl cnQobWFrZV9wYWlyKExCTF9DT05USU5VRSxzdHJpbmcoIkNvbnRpbnVlIikpKTsKICAgICAgICAg ICAgICAgIGluc2VydChtYWtlX3BhaXIoTEJMX1NUT1Asc3RyaW5nKCJTdG9wIikpKTsKICAgICAg ICAgICAgICAgIGluc2VydChtYWtlX3BhaXIoTEJMX0xBTkdVQUdFLHN0cmluZygiTGFuZ3VhZ2Ui KSkpOwogICAgICAgICAgICAgICAgaW5zZXJ0KG1ha2VfcGFpcihMQkxfQ0FMSUJSQVRJT04sc3Ry aW5nKCJDYWxpYnJhdGlvbiBzeXN0ZW0iKSkpOwogICAgICAgICAgICAgICAgaW5zZXJ0KG1ha2Vf cGFpcihMQkxfTE9BRENFTEwsc3RyaW5nKCJMb2FkIGNlbGwgdmFsdWUiKSkpOwogICAgICAgICAg ICAgICAgaW5zZXJ0KG1ha2VfcGFpcihMQkxfV0VJR1RILHN0cmluZygiV2VpZ3RoIikpKTsKICAg ICAgICAgICAgICAgIGluc2VydChtYWtlX3BhaXIoTEJMX1RJTEVTLHN0cmluZygiVGlsZXMiKSkp OwogICAgICAgICAgICAgICAgaW5zZXJ0KG1ha2VfcGFpcihMQkxfUkVQT1JUT0Ysc3RyaW5nKCJS ZXBvcnQgb2Y6IikpKTsKICAgICAgICAgICAgICAgIGluc2VydChtYWtlX3BhaXIoTEJMX1BSSU5U U1BFUlNIT1Qsc3RyaW5nKCJUaWxlcyBwZXIgcHJpbnQ6IikpKTsKICAgICAgICAgICAgICAgIGlu c2VydChtYWtlX3BhaXIoTEJMX0hFTFAsc3RyaW5nKCJGdW5jdGlvbnMgYWNjZXNzaWJsZSB2aWEg a2V5Ym9hcmQ6XG5jIC0gbWFjaGluZSBjb25maWd1cmF0aW9uXG5zIC0gc3lub3B0aWNcbnEgLSBx dWl0IGFwcGxpY2F0aW9uIiApKSk7CgoKCgoKCiAgICAgICAgICAgICAgICBpbnNlcnQobWFrZV9w YWlyKE1TR19DVEwsc3RyaW5nKCJNMDEuIENvbW11bmljYXRpb24gd2l0aCBjb250cm9sIHByb2Nl c3MgaW50ZXJydXB0ZWQiKSkpOwogICAgICAgICAgICAgICAgaW5zZXJ0KG1ha2VfcGFpcihNU0df Q1RFLHN0cmluZygiTTAyLiBDb21tdW5pY2F0aW9uIHdpdGggY29udHJvbCBwcm9jZXNzIHJlc3Rv cmVkIikpKTsKICAgICAgICAgICAgICAgIGluc2VydChtYWtlX3BhaXIoTVNHX0VNRyxzdHJpbmco Ik0wMy4gRW1lcmdlbmN5IikpKTsKICAgICAgICAgICAgICAgIGluc2VydChtYWtlX3BhaXIoTVNH X05SRSxzdHJpbmcoIk0wNC4gQ29udHJvbCBwcm9jZXNzIGRpZG4ndCBhY2tub3dsZWRnZWQgdGhl IGxhc3QgY29tbWFuZC5cblRoZSBzeXN0ZW0gY291bGQgYmUgbm93IGluIGFuIGFub21hbG91cyBz dGF0ZS4iCgoKICAgICAgICAgICAgICAgICkpKTsKICAgICAgICAgICAgICAgIGluc2VydChtYWtl X3BhaXIoTVNHX0NOMSxzdHJpbmcoIk0wNS4gQ29tcG9uZW50IDEgZGVwb3QgaXMgZW1wdHkiKSkp OwogICAgICAgICAgICAgICAgaW5zZXJ0KG1ha2VfcGFpcihNU0dfQ04yLHN0cmluZygiTTA2LiBD b21wb25lbnQgMiBkZXBvdCBpcyBlbXB0eSIpKSk7CiAgICAgICAgICAgICAgICBpbnNlcnQobWFr ZV9wYWlyKE1TR19DTjMsc3RyaW5nKCJNMDcuIENvbXBvbmVudCAzIGRlcG90IGlzIGVtcHR5Iikp KTsKICAgICAgICAgICAgICAgIGluc2VydChtYWtlX3BhaXIoTVNHX0gyTyxzdHJpbmcoIk0wOC4g T3V0IG9mIHdhdGVyIikpKTsKICAgICAgICAgICAgICAgIGluc2VydChtYWtlX3BhaXIoTVNHX1dF SUdUSF9FWENFRURFRCxzdHJpbmcoIk0wOS4gVGhlIHN1bSBvZiBjb21wb25lbnRzJyBhbmQgd2F0 ZXIncyB3ZWlndGggaXMgaGlnaGVyIHRoYW4gdGhlIG1heGltdW0gbWl4ZXIgY2FwYWNpdHkuIgoK CiAgICAgICAgICAgICAgICApKSk7CiAgICAgICAgICAgICAgICBpbnNlcnQobWFrZV9wYWlyKE1T R19DT05GSVJNTUFOVUFMLHN0cmluZygiTTEwLiBEbyB5b3UgcmVhbGx5IHdhbnQgc3dpdGNoIHRv IG1hbnVhbCBtb2RlIHdoaWxlIGluIGN5Y2xlP1xuVXNpbmcgbWFudWFsIGNvbW1hbmRzIGR1cmlu ZyBjeWNsZSBjYW4gcHV0IHRoZSBtYWNoaW5lIGluIGFuIGFub21hbG91cyBzdGF0ZSBhbmQgZGFt YWdlIHRoZSBwcm9kdWN0aW9uLiBJdCBpcyByZWNvbW1lbmRlZCB0byBzdG9wIGN5Y2xlIGFuZCBU SEVOIHN3aXRjaCB0byBtYW51YWwuIgoKCgoKCgogICAgICAgICAgICAgICAgKSkpOwogICAgICAg ICAgICAgICAgaW5zZXJ0KG1ha2VfcGFpcihNU0dfU0tJUEZBSUxVUkUsc3RyaW5nKCJNMTEuIFRo ZSBza2lwcGVyIHN0b3BwZWQgaW4gYW4gaW50ZXJtZWRpYXRlIHBvc2l0aW9uLlxuUGxlYXNlIGNo ZWNrLCB0aGVuIHByZXNzIFJldHJ5IHRvIHJlcGVhdCB0aGUgb3BlcmF0aW9uIG9yIEFib3J0IHRv IHN0b3AgY3ljbGUuIgoKCgogICAgICAgICAgICAgICAgKSkpOwogICAgICAgICAgICAgICAgaW5z ZXJ0KG1ha2VfcGFpcihNU0dfRE9PUkZBSUxVUkUsc3RyaW5nKCJNMTIuIFRoZSBtaXhpbmcgZG9v ciBzdG9wcGVkIGluIGFuIGludGVybWVkaWF0ZSBwb3NpdGlvbi5cblBsZWFzZSBjaGVjaywgdGhl biBwcmVzcyBSZXRyeSB0byByZXBlYXQgdGhlIG9wZXJhdGlvbiBvciBBYm9ydCB0byBzdG9wIGN5 Y2xlLiIKCgoKICAgICAgICAgICAgICAgICkpKTsKICAgICAgICAgICAgICAgIGluc2VydChtYWtl X3BhaXIoTVNHX01PVE9SRkFVTFQsc3RyaW5nKCJNMTMuIE1vdG9yIGZhdWx0IC0gY3ljbGUgYWJv cnRlZC5cbiBQbGVhc2UgbG9jYWxpc2Ugb24gdGhlIHN5bm9wdGljIHRoZSBtb3RvciB3aG8gZ2Vu ZXJhdGVkIHRoZSBmYXVsdCwgdGhlIHJlbW92ZSB0aGUgY2F1c2UuIgoKCgogICAgICAgICAgICAg ICAgKSkpOwogICAgICAgICAgICAgICAgaW5zZXJ0KG1ha2VfcGFpcihNU0dfQ0hFQ0tTS0lQLHN0 cmluZygiTTE0LiBUaGUgc2tpcHBlciBzdGF0ZSBpcyB1bmtub3duOiBpdCBjb3VsZCBjb250YWlu IHNvbWUgbWF0ZXJpYWwsIG9yIG5vdC5cbiBQcmVzcyBDb250aW51ZSBmb3IgYXV0b21hdGljIGVt cHR5IG91dCwgb3IgU3RvcCB0byBzdG9wIHRoZSBjeWNsZS4iCgoKCgogICAgICAgICAgICAgICAg KSkpOwogICAgICAgICAgICAgICAgaW5zZXJ0KG1ha2VfcGFpcihNU0dfQ0hFQ0tNSVgsc3RyaW5n KCJNMTUuIFRoZSBtaXhlciBzdGF0ZSBpcyB1bmtub3duOiBpdCBjb3VsZCBjb250YWluIHNvbWUg bWF0ZXJpYWwsIG9yIG5vdC5cbiBQcmVzcyBDb250aW51ZSBmb3IgYXV0b21hdGljIGVtcHR5IG91 dCwgb3IgU3RvcCB0byBzdG9wIHRoZSBjeWNsZS4iCgoKCgoKICAgICAgICAgICAgICAgICkpKTsK ICAgICAgICAgICAgICAgIGluc2VydChtYWtlX3BhaXIoTVNHX0NIRUNLQkVMVCxzdHJpbmcoIk0x Ni4gVGhlIGRvc2luZyBiZWx0IHN0YXRlIGlzIHVua25vd246IGl0IGNvdWxkIGhvbGQgc29tZSBt YXRlcmlhbCwgb3Igbm90LlxuIFByZXNzIENvbnRpbnVlIGZvciBhdXRvbWF0aWMgZW1wdHkgb3V0 LCBvciBTdG9wIHRvIHN0b3AgdGhlIGN5Y2xlLiIKCgoKCiAgICAgICAgICAgICAgICApKSk7Cgog ICAgICAgICAgICAgICAgaW5zZXJ0KG1ha2VfcGFpcihQUk5fUkVQT1JULHN0cmluZygiUHJvZHVj dGlvbiByZXBvcnQgb24gIikpKTsKICAgICAgICAgICAgICAgIGluc2VydChtYWtlX3BhaXIoUFJO X1BBUlRJQUwsc3RyaW5nKCJDb21wb25lbnQgdXNlIChwYXJ0aWFsKToiKSkpOwogICAgICAgICAg ICAgICAgaW5zZXJ0KG1ha2VfcGFpcihQUk5fVE9UQUwsc3RyaW5nKCJDb21wb25lbnQgdXNlIChw YXJ0aWFsKToiKSkpOwogICAgICAgICAgICAgICAgaW5zZXJ0KG1ha2VfcGFpcihQUk5fUFJJTlRT LHN0cmluZygiVGlsZXMgcHJpbnRlZDoiKSkpOwogICAgICAgICAgICAgICAgaW5zZXJ0KG1ha2Vf cGFpcihQUk5fQVZHQ09TVCxzdHJpbmcoIkF2ZyBjb3N0IHBlciB0aWxlOiIpKSk7CgogICAgICAg ICAgICAgICAgaW5zZXJ0KG1ha2VfcGFpcihNU0dfRVJSTlVMTFdFSUdUSCxzdHJpbmcoIk0xNy4g VGhlIHdlaWd0aCBpbnNlcnRlZCBpcyB3cm9uZy5cblBsZWFzZSBjb3JyZWN0IG9yIGFib3J0IHRo ZSBjYWxpYnJhdGlvbi4iCgoKICAgICAgICAgICAgICAgICkpKTsKICAgICAgICAgICAgICAgIGlu c2VydChtYWtlX3BhaXIoTVNHX0VSUlJFRixzdHJpbmcoIk0xOC4gVGhlIHJlZmVyZW5jZSB3ZWln dGggY2Fubm90IGJlIGxvd2VyIHRoYW4gdGhlIHRhcmUuXG5QbGVhc2UgY29ycmVjdCBvciBhYm9y dCB0aGUgY2FsaWJyYXRpb24uIgoKCgogICAgICAgICAgICAgICAgKSkpOwoKCiAgICAgICAgICAg ICAgICBpbnNlcnQobWFrZV9wYWlyKE1TR19DQUxTVEFSVCxzdHJpbmcoIkNBTElCUkFUSU9OIFBS T0NFRFVSRTpcblBIQVNFIDEpIENvbXBsZXRlbHkgZW1wdHkgb3V0IHRoZSBkb3NpbmcgYmVsdFxu UEhBU0UgMikgQWNxdWlyZSB0aGUgd2VpZ3RoIGJ5IHByZXNzaW5nIFpFUk8iCgoKCiAgICAgICAg ICAgICAgICApKSk7CiAgICAgICAgICAgICAgICBpbnNlcnQobWFrZV9wYWlyKE1TR19DQUxSRUFE V0VJR1RILHN0cmluZygiUEhBU0UgMykgUHV0IG9uIHRoZSBiZWx0IGEga25vd24gd2VpZ3RoXG5Q SEFTRSA0KSBXcml0ZSBkb3duIHRoZSB3ZWlndGggaW4gdGhlIGFwcHJvcHJpYXRlIHRleHQgYm94 IgoKCiAgICAgICAgICAgICAgICApKSk7CiAgICAgICAgICAgICAgICBpbnNlcnQobWFrZV9wYWly KE1TR19DQUxTRVRSRUZFUkVOQ0Usc3RyaW5nKCJQSEFTRSA1KSBBY3F1aXJlIHRoZSByZWZlcmVu Y2Ugd2VpZ3RoIGJ5IHByZXNzaW5nIFJFRi4iCgogICAgICAgICAgICAgICAgKSkpOwogICAgICAg ICAgICAgICAgaW5zZXJ0KG1ha2VfcGFpcihNU0dfQ0FMRU5ELHN0cmluZygiVGhlIG1hY2hpbmUg aXMgbm93IGNhbGlicmF0ZWQiKSkpOwogICAgICAgICAgICAgICAgaW5zZXJ0KG1ha2VfcGFpcihM QkxfVElNRUZPUk1BVCxzdHJpbmcoIiVtLyVkLyVZIikpKTsKICAgICAgICAgICAgICAgIGluc2Vy dChtYWtlX3BhaXIoTEJMX1RJTUVGT1JNQVRfSElTVCxzdHJpbmcoIiVtLyVkLyVZIChvbmx5IHRv dGFscykiKSkpOwogICAgICAgIH0KfQoKY29uc3QgY2hhciogVExvb2t1cFRhYmxlOjpUZXh0T2Yo aW50IG5Db2RlKQp7CgogICAgICAgIGl0ZXJJMlMgaXRlciA9IGZpbmQobkNvZGUpOwogICAgICAg IGlmIChpdGVyICE9IGVuZCgpKQogICAgICAgICAgICAgICAgcmV0dXJuIGl0ZXItPnNlY29uZC5j X3N0cigpOwogICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIHJldHVybiAiVW5rbm93biBtZXNz YWdlIjsKfQo=