From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 13102 invoked by alias); 4 Dec 2002 16:36:03 -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 13072 invoked by uid 71); 4 Dec 2002 16:36:02 -0000 Resent-Date: 4 Dec 2002 16:36:02 -0000 Resent-Message-ID: <20021204163602.13071.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, ebuddington@wesleyan.edu Received: (qmail 5742 invoked by uid 61); 4 Dec 2002 16:28:22 -0000 Message-Id: <20021204162822.5741.qmail@sources.redhat.com> Date: Wed, 04 Dec 2002 08:36:00 -0000 From: ebuddington@wesleyan.edu Reply-To: ebuddington@wesleyan.edu To: gcc-gnats@gcc.gnu.org X-Send-Pr-Version: gnatsweb-2.9.3 (1.1.1.1.2.31) Subject: c++/8808: Internal compiler error in extract_constrain_insn_cached X-SW-Source: 2002-12/txt/msg00220.txt.bz2 List-Id: >Number: 8808 >Category: c++ >Synopsis: Internal compiler error in extract_constrain_insn_cached >Confidential: no >Severity: serious >Priority: medium >Responsible: unassigned >State: open >Class: sw-bug >Submitter-Id: net >Arrival-Date: Wed Dec 04 08:36:01 PST 2002 >Closed-Date: >Last-Modified: >Originator: ebuddington@wesleyan.edu >Release: gcc-3.2.1 >Organization: >Environment: Linux-2.4.19 glibc-2.2.4 >Description: Internal compiler error while trying to use inline asm with MMX registers. >How-To-Repeat: g++ -o test test.cc >Fix: >Release-Note: >Audit-Trail: >Unformatted: ----gnatsweb-attachment---- Content-Type: application/octet-stream; name="test.cc" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="test.cc" IyAxICJ5dXYycmdiLmNjIgojIDEgIjxidWlsdC1pbj4iCiMgMSAiPGNvbW1hbmQgbGluZT4iCiMg MSAieXV2MnJnYi5jYyIKIyAxMyAieXV2MnJnYi5jYyIKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMu Mi4xL2lvc3RyZWFtIiAxIDMKIyA0MyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9pb3N0cmVhbSIg MwoKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL2kzODYtcGMtbGludXgtZ251L2JpdHMvYysr Y29uZmlnLmgiIDEgMwojIDM0ICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL2kzODYtcGMtbGludXgt Z251L2JpdHMvYysrY29uZmlnLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL2kzODYt cGMtbGludXgtZ251L2JpdHMvb3NfZGVmaW5lcy5oIiAxIDMKIyAzOSAiL3Vzci9pbmNsdWRlL2Mr Ky8zLjIuMS9pMzg2LXBjLWxpbnV4LWdudS9iaXRzL29zX2RlZmluZXMuaCIgMwojIDEgIi91c3Iv aW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAyODMgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAz CiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9jZGVmcy5oIiAxIDMKIyAyODQgIi91c3IvaW5jbHVkZS9m ZWF0dXJlcy5oIiAyIDMKIyAzMTEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAzCiMgMSAiL3Vz ci9pbmNsdWRlL2dudS9zdHVicy5oIiAxIDMKIyAzMTIgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5o IiAyIDMKIyA0MCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9pMzg2LXBjLWxpbnV4LWdudS9iaXRz L29zX2RlZmluZXMuaCIgMiAzCiMgMzUgIi91c3IvaW5jbHVkZS9jKysvMy4yLjEvaTM4Ni1wYy1s aW51eC1nbnUvYml0cy9jKytjb25maWcuaCIgMiAzCiMgNDUgIi91c3IvaW5jbHVkZS9jKysvMy4y LjEvaW9zdHJlYW0iIDIgMwojIDEgIi91c3IvaW5jbHVkZS9jKysvMy4yLjEvb3N0cmVhbSIgMSAz CiMgNDQgIi91c3IvaW5jbHVkZS9jKysvMy4yLjEvb3N0cmVhbSIgMwoKIyAxICIvdXNyL2luY2x1 ZGUvYysrLzMuMi4xL2lvcyIgMSAzCiMgNDMgIi91c3IvaW5jbHVkZS9jKysvMy4yLjEvaW9zIiAz CgojIDEgIi91c3IvaW5jbHVkZS9jKysvMy4yLjEvaW9zZndkIiAxIDMKIyA0MyAiL3Vzci9pbmNs dWRlL2MrKy8zLjIuMS9pb3Nmd2QiIDMKCgojIDEgIi91c3IvaW5jbHVkZS9jKysvMy4yLjEvYml0 cy9zdHJpbmdmd2QuaCIgMSAzCiMgNDMgIi91c3IvaW5jbHVkZS9jKysvMy4yLjEvYml0cy9zdHJp bmdmd2QuaCIgMwoKCgpuYW1lc3BhY2Ugc3RkCnsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQWxsb2M+ CiAgICBjbGFzcyBhbGxvY2F0b3I7CgogIHRlbXBsYXRlPGNsYXNzIF9DaGFyVD4KICAgIHN0cnVj dCBjaGFyX3RyYWl0czsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh aXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiwKICAgICAgICAgICB0eXBlbmFtZSBfQWxsb2MgPSBh bGxvY2F0b3I8X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19zdHJpbmc7CgogIHRlbXBsYXRlPD4g c3RydWN0IGNoYXJfdHJhaXRzPGNoYXI+OwoKICB0eXBlZGVmIGJhc2ljX3N0cmluZzxjaGFyPiBz dHJpbmc7CgoKICB0ZW1wbGF0ZTw+IHN0cnVjdCBjaGFyX3RyYWl0czx3Y2hhcl90PjsKCiAgdHlw ZWRlZiBiYXNpY19zdHJpbmc8d2NoYXJfdD4gd3N0cmluZzsKCn0KIyA0NiAiL3Vzci9pbmNsdWRl L2MrKy8zLjIuMS9pb3Nmd2QiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9jKysvMy4yLjEvYml0cy9m cG9zLmgiIDEgMwojIDQzICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL2JpdHMvZnBvcy5oIiAzCgoj IDEgIi91c3IvaW5jbHVkZS9jKysvMy4yLjEvaTM4Ni1wYy1saW51eC1nbnUvYml0cy9jKytpby5o IiAxIDMKIyAzNSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9pMzg2LXBjLWxpbnV4LWdudS9iaXRz L2MrK2lvLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL2NzdGRpbyIgMSAzCiMgNDgg Ii91c3IvaW5jbHVkZS9jKysvMy4yLjEvY3N0ZGlvIiAzCgoKIyAxICIvdXNyL2luY2x1ZGUvYysr LzMuMi4xL2NzdGRkZWYiIDEgMwojIDQ3ICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL2NzdGRkZWYi IDMKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LXBjLWxpbnV4LWdudS8zLjIuMS9pbmNsdWRl L3N0ZGRlZi5oIiAxIDMKIyAxNDcgIi91c3IvbGliL2djYy1saWIvaTM4Ni1wYy1saW51eC1nbnUv My4yLjEvaW5jbHVkZS9zdGRkZWYuaCIgMwp0eXBlZGVmIGludCBwdHJkaWZmX3Q7CiMgMjAxICIv dXNyL2xpYi9nY2MtbGliL2kzODYtcGMtbGludXgtZ251LzMuMi4xL2luY2x1ZGUvc3RkZGVmLmgi IDMKdHlwZWRlZiB1bnNpZ25lZCBpbnQgc2l6ZV90OwojIDQ5ICIvdXNyL2luY2x1ZGUvYysrLzMu Mi4xL2NzdGRkZWYiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CiAgdXNpbmcgOjpwdHJkaWZmX3Q7CiAg dXNpbmcgOjpzaXplX3Q7Cn0KIyA1MSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9jc3RkaW8iIDIg MwoKIyAxICIvdXNyL2xpYi9nY2MtbGliL2kzODYtcGMtbGludXgtZ251LzMuMi4xL2luY2x1ZGUv c3RkaW8uaCIgMSAzCiMgMzggIi91c3IvbGliL2djYy1saWIvaTM4Ni1wYy1saW51eC1nbnUvMy4y LjEvaW5jbHVkZS9zdGRpby5oIiAzCmV4dGVybiAiQyIgewoKCgojIDEgIi91c3IvbGliL2djYy1s aWIvaTM4Ni1wYy1saW51eC1nbnUvMy4yLjEvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgNDMgIi91 c3IvbGliL2djYy1saWIvaTM4Ni1wYy1saW51eC1nbnUvMy4yLjEvaW5jbHVkZS9zdGRpby5oIiAy IDMKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMSAzCiMgMjkgIi91c3IvaW5jbHVk ZS9iaXRzL3R5cGVzLmgiIDMKIyAxICIvdXNyL2xpYi9nY2MtbGliL2kzODYtcGMtbGludXgtZ251 LzMuMi4xL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDMwICIvdXNyL2luY2x1ZGUvYml0cy90eXBl cy5oIiAyIDMKCgp0eXBlZGVmIHVuc2lnbmVkIGNoYXIgX191X2NoYXI7CnR5cGVkZWYgdW5zaWdu ZWQgc2hvcnQgX191X3Nob3J0Owp0eXBlZGVmIHVuc2lnbmVkIGludCBfX3VfaW50Owp0eXBlZGVm IHVuc2lnbmVkIGxvbmcgX191X2xvbmc7CgpfX2V4dGVuc2lvbl9fIHR5cGVkZWYgdW5zaWduZWQg bG9uZyBsb25nIGludCBfX3VfcXVhZF90OwpfX2V4dGVuc2lvbl9fIHR5cGVkZWYgbG9uZyBsb25n IGludCBfX3F1YWRfdDsKIyA0OSAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMwp0eXBlZGVm IHNpZ25lZCBjaGFyIF9faW50OF90Owp0eXBlZGVmIHVuc2lnbmVkIGNoYXIgX191aW50OF90Owp0 eXBlZGVmIHNpZ25lZCBzaG9ydCBpbnQgX19pbnQxNl90Owp0eXBlZGVmIHVuc2lnbmVkIHNob3J0 IGludCBfX3VpbnQxNl90Owp0eXBlZGVmIHNpZ25lZCBpbnQgX19pbnQzMl90Owp0eXBlZGVmIHVu c2lnbmVkIGludCBfX3VpbnQzMl90OwoKX19leHRlbnNpb25fXyB0eXBlZGVmIHNpZ25lZCBsb25n IGxvbmcgaW50IF9faW50NjRfdDsKX19leHRlbnNpb25fXyB0eXBlZGVmIHVuc2lnbmVkIGxvbmcg bG9uZyBpbnQgX191aW50NjRfdDsKCnR5cGVkZWYgX19xdWFkX3QgKl9fcWFkZHJfdDsKCnR5cGVk ZWYgX191X3F1YWRfdCBfX2Rldl90Owp0eXBlZGVmIF9fdV9pbnQgX191aWRfdDsKdHlwZWRlZiBf X3VfaW50IF9fZ2lkX3Q7CnR5cGVkZWYgX191X2xvbmcgX19pbm9fdDsKdHlwZWRlZiBfX3VfaW50 IF9fbW9kZV90Owp0eXBlZGVmIF9fdV9pbnQgX19ubGlua190Owp0eXBlZGVmIGxvbmcgaW50IF9f b2ZmX3Q7CnR5cGVkZWYgX19xdWFkX3QgX19sb2ZmX3Q7CnR5cGVkZWYgaW50IF9fcGlkX3Q7CnR5 cGVkZWYgaW50IF9fc3NpemVfdDsKdHlwZWRlZiBfX3VfbG9uZyBfX3JsaW1fdDsKdHlwZWRlZiBf X3VfcXVhZF90IF9fcmxpbTY0X3Q7CnR5cGVkZWYgX191X2ludCBfX2lkX3Q7Cgp0eXBlZGVmIHN0 cnVjdAogIHsKICAgIGludCBfX3ZhbFsyXTsKICB9IF9fZnNpZF90OwoKCnR5cGVkZWYgaW50IF9f ZGFkZHJfdDsKdHlwZWRlZiBjaGFyICpfX2NhZGRyX3Q7CnR5cGVkZWYgbG9uZyBpbnQgX190aW1l X3Q7CnR5cGVkZWYgdW5zaWduZWQgaW50IF9fdXNlY29uZHNfdDsKdHlwZWRlZiBsb25nIGludCBf X3N1c2Vjb25kc190Owp0eXBlZGVmIGxvbmcgaW50IF9fc3dibGtfdDsKCnR5cGVkZWYgbG9uZyBp bnQgX19jbG9ja190OwoKCnR5cGVkZWYgaW50IF9fY2xvY2tpZF90OwoKCnR5cGVkZWYgaW50IF9f dGltZXJfdDsKCgoKCgoKdHlwZWRlZiBpbnQgX19rZXlfdDsKCgp0eXBlZGVmIHVuc2lnbmVkIHNo b3J0IGludCBfX2lwY19waWRfdDsKCgoKdHlwZWRlZiBsb25nIGludCBfX2Jsa3NpemVfdDsKCgoK CnR5cGVkZWYgbG9uZyBpbnQgX19ibGtjbnRfdDsKdHlwZWRlZiBfX3F1YWRfdCBfX2Jsa2NudDY0 X3Q7CgoKdHlwZWRlZiBfX3VfbG9uZyBfX2ZzYmxrY250X3Q7CnR5cGVkZWYgX191X3F1YWRfdCBf X2ZzYmxrY250NjRfdDsKCgp0eXBlZGVmIF9fdV9sb25nIF9fZnNmaWxjbnRfdDsKdHlwZWRlZiBf X3VfcXVhZF90IF9fZnNmaWxjbnQ2NF90OwoKCnR5cGVkZWYgX191X3F1YWRfdCBfX2lubzY0X3Q7 CgoKdHlwZWRlZiBfX2xvZmZfdCBfX29mZjY0X3Q7CgoKdHlwZWRlZiBsb25nIGludCBfX3Rfc2Nh bGFyX3Q7CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBpbnQgX190X3VzY2FsYXJfdDsKCgp0eXBlZGVm IGludCBfX2ludHB0cl90OwoKCnR5cGVkZWYgdW5zaWduZWQgaW50IF9fc29ja2xlbl90OwoKCgoK IyAxICIvdXNyL2luY2x1ZGUvYml0cy9wdGhyZWFkdHlwZXMuaCIgMSAzCiMgMjMgIi91c3IvaW5j bHVkZS9iaXRzL3B0aHJlYWR0eXBlcy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc2NoZWQu aCIgMSAzCiMgNjggIi91c3IvaW5jbHVkZS9iaXRzL3NjaGVkLmgiIDMKc3RydWN0IF9fc2NoZWRf cGFyYW0KICB7CiAgICBpbnQgX19zY2hlZF9wcmlvcml0eTsKICB9OwojIDI0ICIvdXNyL2luY2x1 ZGUvYml0cy9wdGhyZWFkdHlwZXMuaCIgMiAzCgoKc3RydWN0IF9wdGhyZWFkX2Zhc3Rsb2NrCnsK ICBsb25nIGludCBfX3N0YXR1czsKICBpbnQgX19zcGlubG9jazsKCn07CgoKCnR5cGVkZWYgc3Ry dWN0IF9wdGhyZWFkX2Rlc2NyX3N0cnVjdCAqX3B0aHJlYWRfZGVzY3I7CgoKCgoKdHlwZWRlZiBz dHJ1Y3QgX19wdGhyZWFkX2F0dHJfcwp7CiAgaW50IF9fZGV0YWNoc3RhdGU7CiAgaW50IF9fc2No ZWRwb2xpY3k7CiAgc3RydWN0IF9fc2NoZWRfcGFyYW0gX19zY2hlZHBhcmFtOwogIGludCBfX2lu aGVyaXRzY2hlZDsKICBpbnQgX19zY29wZTsKICBzaXplX3QgX19ndWFyZHNpemU7CiAgaW50IF9f c3RhY2thZGRyX3NldDsKICB2b2lkICpfX3N0YWNrYWRkcjsKICBzaXplX3QgX19zdGFja3NpemU7 Cn0gcHRocmVhZF9hdHRyX3Q7CgoKCnR5cGVkZWYgc3RydWN0CnsKICBzdHJ1Y3QgX3B0aHJlYWRf ZmFzdGxvY2sgX19jX2xvY2s7CiAgX3B0aHJlYWRfZGVzY3IgX19jX3dhaXRpbmc7Cn0gcHRocmVh ZF9jb25kX3Q7CgoKCnR5cGVkZWYgc3RydWN0CnsKICBpbnQgX19kdW1teTsKfSBwdGhyZWFkX2Nv bmRhdHRyX3Q7CgoKdHlwZWRlZiB1bnNpZ25lZCBpbnQgcHRocmVhZF9rZXlfdDsKCgoKCgp0eXBl ZGVmIHN0cnVjdAp7CiAgaW50IF9fbV9yZXNlcnZlZDsKICBpbnQgX19tX2NvdW50OwogIF9wdGhy ZWFkX2Rlc2NyIF9fbV9vd25lcjsKICBpbnQgX19tX2tpbmQ7CiAgc3RydWN0IF9wdGhyZWFkX2Zh c3Rsb2NrIF9fbV9sb2NrOwp9IHB0aHJlYWRfbXV0ZXhfdDsKCgoKdHlwZWRlZiBzdHJ1Y3QKewog IGludCBfX211dGV4a2luZDsKfSBwdGhyZWFkX211dGV4YXR0cl90OwoKCgp0eXBlZGVmIGludCBw dGhyZWFkX29uY2VfdDsKCgoKCnR5cGVkZWYgc3RydWN0IF9wdGhyZWFkX3J3bG9ja190CnsKICBz dHJ1Y3QgX3B0aHJlYWRfZmFzdGxvY2sgX19yd19sb2NrOwogIGludCBfX3J3X3JlYWRlcnM7CiAg X3B0aHJlYWRfZGVzY3IgX19yd193cml0ZXI7CiAgX3B0aHJlYWRfZGVzY3IgX19yd19yZWFkX3dh aXRpbmc7CiAgX3B0aHJlYWRfZGVzY3IgX19yd193cml0ZV93YWl0aW5nOwogIGludCBfX3J3X2tp bmQ7CiAgaW50IF9fcndfcHNoYXJlZDsKfSBwdGhyZWFkX3J3bG9ja190OwoKCgp0eXBlZGVmIHN0 cnVjdAp7CiAgaW50IF9fbG9ja2tpbmQ7CiAgaW50IF9fcHNoYXJlZDsKfSBwdGhyZWFkX3J3bG9j a2F0dHJfdDsKCgoKCnR5cGVkZWYgdm9sYXRpbGUgaW50IHB0aHJlYWRfc3BpbmxvY2tfdDsKCgp0 eXBlZGVmIHN0cnVjdCB7CiAgc3RydWN0IF9wdGhyZWFkX2Zhc3Rsb2NrIF9fYmFfbG9jazsKICBp bnQgX19iYV9yZXF1aXJlZDsKICBpbnQgX19iYV9wcmVzZW50OwogIF9wdGhyZWFkX2Rlc2NyIF9f YmFfd2FpdGluZzsKfSBwdGhyZWFkX2JhcnJpZXJfdDsKCgp0eXBlZGVmIHN0cnVjdCB7CiAgaW50 IF9fcHNoYXJlZDsKfSBwdGhyZWFkX2JhcnJpZXJhdHRyX3Q7CgoKCgoKdHlwZWRlZiB1bnNpZ25l ZCBsb25nIGludCBwdGhyZWFkX3Q7CiMgMTQ0ICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAy IDMKIyA0NSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LXBjLWxpbnV4LWdudS8zLjIuMS9pbmNsdWRl L3N0ZGlvLmgiIDIgMwojIDUzICIvdXNyL2xpYi9nY2MtbGliL2kzODYtcGMtbGludXgtZ251LzMu Mi4xL2luY2x1ZGUvc3RkaW8uaCIgMwp0eXBlZGVmIHN0cnVjdCBfSU9fRklMRSBGSUxFOwojIDYz ICIvdXNyL2xpYi9nY2MtbGliL2kzODYtcGMtbGludXgtZ251LzMuMi4xL2luY2x1ZGUvc3RkaW8u aCIgMwp0eXBlZGVmIHN0cnVjdCBfSU9fRklMRSBfX0ZJTEU7CiMgNzMgIi91c3IvbGliL2djYy1s aWIvaTM4Ni1wYy1saW51eC1nbnUvMy4yLjEvaW5jbHVkZS9zdGRpby5oIiAzCiMgMSAiL3Vzci9p bmNsdWRlL2xpYmlvLmgiIDEgMwojIDMwICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwojIDEgIi91 c3IvaW5jbHVkZS9fR19jb25maWcuaCIgMSAzCiMgMTQgIi91c3IvaW5jbHVkZS9fR19jb25maWcu aCIgMwojIDEgIi91c3IvbGliL2djYy1saWIvaTM4Ni1wYy1saW51eC1nbnUvMy4yLjEvaW5jbHVk ZS9zdGRkZWYuaCIgMSAzCiMgMzIxICIvdXNyL2xpYi9nY2MtbGliL2kzODYtcGMtbGludXgtZ251 LzMuMi4xL2luY2x1ZGUvc3RkZGVmLmgiIDMKdHlwZWRlZiB1bnNpZ25lZCBpbnQgd2ludF90Owoj IDE1ICIvdXNyL2luY2x1ZGUvX0dfY29uZmlnLmgiIDIgMwojIDI0ICIvdXNyL2luY2x1ZGUvX0df Y29uZmlnLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMSAzCiMgNDggIi91c3IvaW5j bHVkZS93Y2hhci5oIiAzCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LXBjLWxpbnV4LWdudS8z LjIuMS9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyA0OSAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDIg MwoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy93Y2hhci5oIiAxIDMKIyA1MSAiL3Vzci9pbmNsdWRl L3djaGFyLmgiIDIgMwojIDY3ICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMwp0eXBlZGVmIHN0cnVj dAp7CiAgaW50IF9fY291bnQ7CiAgdW5pb24KICB7CiAgICB3aW50X3QgX193Y2g7CiAgICBjaGFy IF9fd2NoYls0XTsKICB9IF9fdmFsdWU7Cn0gX19tYnN0YXRlX3Q7CiMgMjUgIi91c3IvaW5jbHVk ZS9fR19jb25maWcuaCIgMiAzCgp0eXBlZGVmIHN0cnVjdAp7CiAgX19vZmZfdCBfX3BvczsKICBf X21ic3RhdGVfdCBfX3N0YXRlOwp9IF9HX2Zwb3NfdDsKdHlwZWRlZiBzdHJ1Y3QKewogIF9fb2Zm NjRfdCBfX3BvczsKICBfX21ic3RhdGVfdCBfX3N0YXRlOwp9IF9HX2Zwb3M2NF90OwojIDQ0ICIv dXNyL2luY2x1ZGUvX0dfY29uZmlnLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZ2NvbnYuaCIgMSAz CiMgMjggIi91c3IvaW5jbHVkZS9nY29udi5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL3djaGFyLmgi IDEgMwojIDQ4ICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMwojIDEgIi91c3IvbGliL2djYy1saWIv aTM4Ni1wYy1saW51eC1nbnUvMy4yLjEvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgNDkgIi91c3Iv aW5jbHVkZS93Y2hhci5oIiAyIDMKIyAyOSAiL3Vzci9pbmNsdWRlL2djb252LmgiIDIgMwoKIyAx ICIvdXNyL2xpYi9nY2MtbGliL2kzODYtcGMtbGludXgtZ251LzMuMi4xL2luY2x1ZGUvc3RkZGVm LmgiIDEgMwojIDMxICIvdXNyL2luY2x1ZGUvZ2NvbnYuaCIgMiAzCgoKCgoKZW51bQp7CiAgX19H Q09OVl9PSyA9IDAsCiAgX19HQ09OVl9OT0NPTlYsCiAgX19HQ09OVl9OT0RCLAogIF9fR0NPTlZf Tk9NRU0sCgogIF9fR0NPTlZfRU1QVFlfSU5QVVQsCiAgX19HQ09OVl9GVUxMX09VVFBVVCwKICBf X0dDT05WX0lMTEVHQUxfSU5QVVQsCiAgX19HQ09OVl9JTkNPTVBMRVRFX0lOUFVULAoKICBfX0dD T05WX0lMTEVHQUxfREVTQ1JJUFRPUiwKICBfX0dDT05WX0lOVEVSTkFMX0VSUk9SCn07CgoKCmVu dW0KewogIF9fR0NPTlZfSVNfTEFTVCA9IDB4MDAwMSwKICBfX0dDT05WX0lHTk9SRV9FUlJPUlMg PSAweDAwMDIKfTsKCgoKc3RydWN0IF9fZ2NvbnZfc3RlcDsKc3RydWN0IF9fZ2NvbnZfc3RlcF9k YXRhOwpzdHJ1Y3QgX19nY29udl9sb2FkZWRfb2JqZWN0OwpzdHJ1Y3QgX19nY29udl90cmFuc19k YXRhOwoKCgp0eXBlZGVmIGludCAoKl9fZ2NvbnZfZmN0KSAoc3RydWN0IF9fZ2NvbnZfc3RlcCAq LCBzdHJ1Y3QgX19nY29udl9zdGVwX2RhdGEgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAg IF9fY29uc3QgdW5zaWduZWQgY2hhciAqKiwgX19jb25zdCB1bnNpZ25lZCBjaGFyICosCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICoqLCBzaXplX3QgKiwgaW50LCBp bnQpOwoKCnR5cGVkZWYgaW50ICgqX19nY29udl9pbml0X2ZjdCkgKHN0cnVjdCBfX2djb252X3N0 ZXAgKik7CnR5cGVkZWYgdm9pZCAoKl9fZ2NvbnZfZW5kX2ZjdCkgKHN0cnVjdCBfX2djb252X3N0 ZXAgKik7CgoKCnR5cGVkZWYgaW50ICgqX19nY29udl90cmFuc19mY3QpIChzdHJ1Y3QgX19nY29u dl9zdGVwICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgX19nY29u dl9zdGVwX2RhdGEgKiwgdm9pZCAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg X19jb25zdCB1bnNpZ25lZCBjaGFyICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKiosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKiwgdW5zaWduZWQgY2hhciAqKiwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqKTsKCgp0eXBlZGVmIGludCAoKl9fZ2Nv bnZfdHJhbnNfY29udGV4dF9mY3QpICh2b2lkICosIF9fY29uc3QgdW5zaWduZWQgY2hhciAqLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHVuc2lnbmVk IGNoYXIgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWdu ZWQgY2hhciAqLCB1bnNpZ25lZCBjaGFyICopOwoKCnR5cGVkZWYgaW50ICgqX19nY29udl90cmFu c19xdWVyeV9mY3QpIChfX2NvbnN0IGNoYXIgKiwgX19jb25zdCBjaGFyICoqKiwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqKTsKCgp0eXBlZGVmIGludCAo Kl9fZ2NvbnZfdHJhbnNfaW5pdF9mY3QpICh2b2lkICoqLCBjb25zdCBjaGFyICopOwp0eXBlZGVm IHZvaWQgKCpfX2djb252X3RyYW5zX2VuZF9mY3QpICh2b2lkICopOwoKc3RydWN0IF9fZ2NvbnZf dHJhbnNfZGF0YQp7CgogIF9fZ2NvbnZfdHJhbnNfZmN0IF9fdHJhbnNfZmN0OwogIF9fZ2NvbnZf dHJhbnNfY29udGV4dF9mY3QgX190cmFuc19jb250ZXh0X2ZjdDsKICBfX2djb252X3RyYW5zX2Vu ZF9mY3QgX190cmFuc19lbmRfZmN0OwogIHZvaWQgKl9fZGF0YTsKICBzdHJ1Y3QgX19nY29udl90 cmFuc19kYXRhICpfX25leHQ7Cn07CgoKCnN0cnVjdCBfX2djb252X3N0ZXAKewogIHN0cnVjdCBf X2djb252X2xvYWRlZF9vYmplY3QgKl9fc2hsaWJfaGFuZGxlOwogIF9fY29uc3QgY2hhciAqX19t b2RuYW1lOwoKICBpbnQgX19jb3VudGVyOwoKICBjaGFyICpfX2Zyb21fbmFtZTsKICBjaGFyICpf X3RvX25hbWU7CgogIF9fZ2NvbnZfZmN0IF9fZmN0OwogIF9fZ2NvbnZfaW5pdF9mY3QgX19pbml0 X2ZjdDsKICBfX2djb252X2VuZF9mY3QgX19lbmRfZmN0OwoKCgogIGludCBfX21pbl9uZWVkZWRf ZnJvbTsKICBpbnQgX19tYXhfbmVlZGVkX2Zyb207CiAgaW50IF9fbWluX25lZWRlZF90bzsKICBp bnQgX19tYXhfbmVlZGVkX3RvOwoKCiAgaW50IF9fc3RhdGVmdWw7CgogIHZvaWQgKl9fZGF0YTsK fTsKCgoKc3RydWN0IF9fZ2NvbnZfc3RlcF9kYXRhCnsKICB1bnNpZ25lZCBjaGFyICpfX291dGJ1 ZjsKICB1bnNpZ25lZCBjaGFyICpfX291dGJ1ZmVuZDsKCgoKICBpbnQgX19mbGFnczsKCgoKICBp bnQgX19pbnZvY2F0aW9uX2NvdW50ZXI7CgoKCiAgaW50IF9faW50ZXJuYWxfdXNlOwoKICBfX21i c3RhdGVfdCAqX19zdGF0ZXA7CiAgX19tYnN0YXRlX3QgX19zdGF0ZTsKCgoKICBzdHJ1Y3QgX19n Y29udl90cmFuc19kYXRhICpfX3RyYW5zOwp9OwoKCgp0eXBlZGVmIHN0cnVjdCBfX2djb252X2lu Zm8KewogIHNpemVfdCBfX25zdGVwczsKICBzdHJ1Y3QgX19nY29udl9zdGVwICpfX3N0ZXBzOwog IF9fZXh0ZW5zaW9uX18gc3RydWN0IF9fZ2NvbnZfc3RlcF9kYXRhIF9fZGF0YSBbXTsKfSAqX19n Y29udl90OwojIDQ1ICIvdXNyL2luY2x1ZGUvX0dfY29uZmlnLmgiIDIgMwp0eXBlZGVmIHVuaW9u CnsKICBzdHJ1Y3QgX19nY29udl9pbmZvIF9fY2Q7CiAgc3RydWN0CiAgewogICAgc3RydWN0IF9f Z2NvbnZfaW5mbyBfX2NkOwogICAgc3RydWN0IF9fZ2NvbnZfc3RlcF9kYXRhIF9fZGF0YTsKICB9 IF9fY29tYmluZWQ7Cn0gX0dfaWNvbnZfdDsKCnR5cGVkZWYgaW50IF9HX2ludDE2X3QgX19hdHRy aWJ1dGVfXyAoKF9fbW9kZV9fIChfX0hJX18pKSk7CnR5cGVkZWYgaW50IF9HX2ludDMyX3QgX19h dHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX1NJX18pKSk7CnR5cGVkZWYgdW5zaWduZWQgaW50IF9H X3VpbnQxNl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19ISV9fKSkpOwp0eXBlZGVmIHVu c2lnbmVkIGludCBfR191aW50MzJfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fU0lfXykp KTsKIyAzMSAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDIgMwojIDUxICIvdXNyL2luY2x1ZGUvbGli aW8uaCIgMwojIDEgIi91c3IvbGliL2djYy1saWIvaTM4Ni1wYy1saW51eC1nbnUvMy4yLjEvaW5j bHVkZS9zdGRhcmcuaCIgMSAzCiMgNDMgIi91c3IvbGliL2djYy1saWIvaTM4Ni1wYy1saW51eC1n bnUvMy4yLjEvaW5jbHVkZS9zdGRhcmcuaCIgMwp0eXBlZGVmIF9fYnVpbHRpbl92YV9saXN0IF9f Z251Y192YV9saXN0OwojIDUyICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMiAzCiMgMTU4ICIvdXNy L2luY2x1ZGUvbGliaW8uaCIgMwpzdHJ1Y3QgX0lPX2p1bXBfdDsgc3RydWN0IF9JT19GSUxFOwoj IDE2OCAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKdHlwZWRlZiB2b2lkIF9JT19sb2NrX3Q7CgoK CgoKc3RydWN0IF9JT19tYXJrZXIgewogIHN0cnVjdCBfSU9fbWFya2VyICpfbmV4dDsKICBzdHJ1 Y3QgX0lPX0ZJTEUgKl9zYnVmOwoKCgogIGludCBfcG9zOwojIDE5MSAiL3Vzci9pbmNsdWRlL2xp YmlvLmgiIDMKfTsKCgplbnVtIF9fY29kZWN2dF9yZXN1bHQKewogIF9fY29kZWN2dF9vaywKICBf X2NvZGVjdnRfcGFydGlhbCwKICBfX2NvZGVjdnRfZXJyb3IsCiAgX19jb2RlY3Z0X25vY29udgp9 OwoKCgoKc3RydWN0IF9JT19jb2RlY3Z0CnsKICB2b2lkICgqX19jb2RlY3Z0X2Rlc3RyKSAoc3Ry dWN0IF9JT19jb2RlY3Z0ICopOwogIGVudW0gX19jb2RlY3Z0X3Jlc3VsdCAoKl9fY29kZWN2dF9k b19vdXQpIChzdHJ1Y3QgX0lPX2NvZGVjdnQgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgX19tYnN0YXRlX3QgKiwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgY29uc3Qgd2NoYXJfdCAqLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB3Y2hhcl90ICosCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHdjaGFyX3QgKiosIGNoYXIgKiwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqLCBjaGFy ICoqKTsKICBlbnVtIF9fY29kZWN2dF9yZXN1bHQgKCpfX2NvZGVjdnRfZG9fdW5zaGlmdCkgKHN0 cnVjdCBfSU9fY29kZWN2dCAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgX19tYnN0YXRlX3QgKiwgY2hhciAqLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqLCBjaGFyICoqKTsKICBlbnVtIF9fY29k ZWN2dF9yZXN1bHQgKCpfX2NvZGVjdnRfZG9faW4pIChzdHJ1Y3QgX0lPX2NvZGVjdnQgKiwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX21ic3RhdGVfdCAqLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKiwg Y29uc3QgY2hhciAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGNvbnN0IGNoYXIgKiosIHdjaGFyX3QgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB3Y2hhcl90ICosIHdjaGFyX3QgKiopOwogIGludCAoKl9fY29kZWN2dF9k b19lbmNvZGluZykgKHN0cnVjdCBfSU9fY29kZWN2dCAqKTsKICBpbnQgKCpfX2NvZGVjdnRfZG9f YWx3YXlzX25vY29udikgKHN0cnVjdCBfSU9fY29kZWN2dCAqKTsKICBpbnQgKCpfX2NvZGVjdnRf ZG9fbGVuZ3RoKSAoc3RydWN0IF9JT19jb2RlY3Z0ICosIF9fbWJzdGF0ZV90ICosCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBzaXplX3Qp OwogIGludCAoKl9fY29kZWN2dF9kb19tYXhfbGVuZ3RoKSAoc3RydWN0IF9JT19jb2RlY3Z0ICop OwoKICBfR19pY29udl90IF9fY2RfaW47CiAgX0dfaWNvbnZfdCBfX2NkX291dDsKfTsKCgpzdHJ1 Y3QgX0lPX3dpZGVfZGF0YQp7CiAgd2NoYXJfdCAqX0lPX3JlYWRfcHRyOwogIHdjaGFyX3QgKl9J T19yZWFkX2VuZDsKICB3Y2hhcl90ICpfSU9fcmVhZF9iYXNlOwogIHdjaGFyX3QgKl9JT193cml0 ZV9iYXNlOwogIHdjaGFyX3QgKl9JT193cml0ZV9wdHI7CiAgd2NoYXJfdCAqX0lPX3dyaXRlX2Vu ZDsKICB3Y2hhcl90ICpfSU9fYnVmX2Jhc2U7CiAgd2NoYXJfdCAqX0lPX2J1Zl9lbmQ7CgogIHdj aGFyX3QgKl9JT19zYXZlX2Jhc2U7CiAgd2NoYXJfdCAqX0lPX2JhY2t1cF9iYXNlOwoKICB3Y2hh cl90ICpfSU9fc2F2ZV9lbmQ7CgogIF9fbWJzdGF0ZV90IF9JT19zdGF0ZTsKICBfX21ic3RhdGVf dCBfSU9fbGFzdF9zdGF0ZTsKICBzdHJ1Y3QgX0lPX2NvZGVjdnQgX2NvZGVjdnQ7CgogIHdjaGFy X3QgX3Nob3J0YnVmWzFdOwoKICBzdHJ1Y3QgX0lPX2p1bXBfdCAqX3dpZGVfdnRhYmxlOwp9OwoK CnN0cnVjdCBfSU9fRklMRSB7CiAgaW50IF9mbGFnczsKCgoKCiAgY2hhciogX0lPX3JlYWRfcHRy OwogIGNoYXIqIF9JT19yZWFkX2VuZDsKICBjaGFyKiBfSU9fcmVhZF9iYXNlOwogIGNoYXIqIF9J T193cml0ZV9iYXNlOwogIGNoYXIqIF9JT193cml0ZV9wdHI7CiAgY2hhciogX0lPX3dyaXRlX2Vu ZDsKICBjaGFyKiBfSU9fYnVmX2Jhc2U7CiAgY2hhciogX0lPX2J1Zl9lbmQ7CgogIGNoYXIgKl9J T19zYXZlX2Jhc2U7CiAgY2hhciAqX0lPX2JhY2t1cF9iYXNlOwogIGNoYXIgKl9JT19zYXZlX2Vu ZDsKCiAgc3RydWN0IF9JT19tYXJrZXIgKl9tYXJrZXJzOwoKICBzdHJ1Y3QgX0lPX0ZJTEUgKl9j aGFpbjsKCiAgaW50IF9maWxlbm87CiAgaW50IF9ibGtzaXplOwogIF9fb2ZmX3QgX29sZF9vZmZz ZXQ7CgoKCiAgdW5zaWduZWQgc2hvcnQgX2N1cl9jb2x1bW47CiAgc2lnbmVkIGNoYXIgX3Z0YWJs ZV9vZmZzZXQ7CiAgY2hhciBfc2hvcnRidWZbMV07CgoKCiAgX0lPX2xvY2tfdCAqX2xvY2s7CiMg MzAzICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwogIF9fb2ZmNjRfdCBfb2Zmc2V0OwoKCiAgc3Ry dWN0IF9JT19jb2RlY3Z0ICpfY29kZWN2dDsKICBzdHJ1Y3QgX0lPX3dpZGVfZGF0YSAqX3dpZGVf ZGF0YTsKCgoKCiAgaW50IF9tb2RlOwoKICBjaGFyIF91bnVzZWQyWzE1ICogc2l6ZW9mIChpbnQp IC0gMiAqIHNpemVvZiAodm9pZCAqKV07Cgp9OwoKCgoKCnN0cnVjdCBfSU9fRklMRV9wbHVzOwoK ZXh0ZXJuIHN0cnVjdCBfSU9fRklMRV9wbHVzIF9JT18yXzFfc3RkaW5fOwpleHRlcm4gc3RydWN0 IF9JT19GSUxFX3BsdXMgX0lPXzJfMV9zdGRvdXRfOwpleHRlcm4gc3RydWN0IF9JT19GSUxFX3Bs dXMgX0lPXzJfMV9zdGRlcnJfOwojIDM0MiAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKdHlwZWRl ZiBfX3NzaXplX3QgX19pb19yZWFkX2ZuICh2b2lkICpfX2Nvb2tpZSwgY2hhciAqX19idWYsIHNp emVfdCBfX25ieXRlcyk7CgoKCgoKCgp0eXBlZGVmIF9fc3NpemVfdCBfX2lvX3dyaXRlX2ZuICh2 b2lkICpfX2Nvb2tpZSwgX19jb25zdCBjaGFyICpfX2J1ZiwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgc2l6ZV90IF9fbik7CgoKCgoKCgp0eXBlZGVmIGludCBfX2lvX3NlZWtfZm4g KHZvaWQgKl9fY29va2llLCBfX29mZjY0X3QgKl9fcG9zLCBpbnQgX193KTsKCgp0eXBlZGVmIGlu dCBfX2lvX2Nsb3NlX2ZuICh2b2lkICpfX2Nvb2tpZSk7CgoKCgp0eXBlZGVmIF9faW9fcmVhZF9m biBjb29raWVfcmVhZF9mdW5jdGlvbl90Owp0eXBlZGVmIF9faW9fd3JpdGVfZm4gY29va2llX3dy aXRlX2Z1bmN0aW9uX3Q7CnR5cGVkZWYgX19pb19zZWVrX2ZuIGNvb2tpZV9zZWVrX2Z1bmN0aW9u X3Q7CnR5cGVkZWYgX19pb19jbG9zZV9mbiBjb29raWVfY2xvc2VfZnVuY3Rpb25fdDsKCgp0eXBl ZGVmIHN0cnVjdAp7CiAgX19pb19yZWFkX2ZuICpyZWFkOwogIF9faW9fd3JpdGVfZm4gKndyaXRl OwogIF9faW9fc2Vla19mbiAqc2VlazsKICBfX2lvX2Nsb3NlX2ZuICpjbG9zZTsKfSBfSU9fY29v a2llX2lvX2Z1bmN0aW9uc190Owp0eXBlZGVmIF9JT19jb29raWVfaW9fZnVuY3Rpb25zX3QgY29v a2llX2lvX2Z1bmN0aW9uc190OwoKc3RydWN0IF9JT19jb29raWVfZmlsZTsKCgpleHRlcm4gdm9p ZCBfSU9fY29va2llX2luaXQgKHN0cnVjdCBfSU9fY29va2llX2ZpbGUgKl9fY2ZpbGUsIGludCBf X3JlYWRfd3JpdGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqX19jb29raWUs IF9JT19jb29raWVfaW9fZnVuY3Rpb25zX3QgX19mbnMpOwoKCgoKZXh0ZXJuICJDIiB7CgoKZXh0 ZXJuIGludCBfX3VuZGVyZmxvdyAoX0lPX0ZJTEUgKikgdGhyb3cgKCk7CmV4dGVybiBpbnQgX191 ZmxvdyAoX0lPX0ZJTEUgKikgdGhyb3cgKCk7CmV4dGVybiBpbnQgX19vdmVyZmxvdyAoX0lPX0ZJ TEUgKiwgaW50KSB0aHJvdyAoKTsKZXh0ZXJuIHdpbnRfdCBfX3d1bmRlcmZsb3cgKF9JT19GSUxF ICopIHRocm93ICgpOwpleHRlcm4gd2ludF90IF9fd3VmbG93IChfSU9fRklMRSAqKSB0aHJvdyAo KTsKZXh0ZXJuIHdpbnRfdCBfX3dvdmVyZmxvdyAoX0lPX0ZJTEUgKiwgd2ludF90KSB0aHJvdyAo KTsKIyA0MjQgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCmV4dGVybiBpbnQgX0lPX2dldGMgKF9J T19GSUxFICpfX2ZwKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfSU9fcHV0YyAoaW50IF9fYywgX0lP X0ZJTEUgKl9fZnApIHRocm93ICgpOwpleHRlcm4gaW50IF9JT19mZW9mIChfSU9fRklMRSAqX19m cCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX0lPX2ZlcnJvciAoX0lPX0ZJTEUgKl9fZnApIHRocm93 ICgpOwoKZXh0ZXJuIGludCBfSU9fcGVla2NfbG9ja2VkIChfSU9fRklMRSAqX19mcCkgdGhyb3cg KCk7CgoKCgoKZXh0ZXJuIHZvaWQgX0lPX2Zsb2NrZmlsZSAoX0lPX0ZJTEUgKikgdGhyb3cgKCk7 CmV4dGVybiB2b2lkIF9JT19mdW5sb2NrZmlsZSAoX0lPX0ZJTEUgKikgdGhyb3cgKCk7CmV4dGVy biBpbnQgX0lPX2Z0cnlsb2NrZmlsZSAoX0lPX0ZJTEUgKikgdGhyb3cgKCk7CiMgNDU0ICIvdXNy L2luY2x1ZGUvbGliaW8uaCIgMwpleHRlcm4gaW50IF9JT192ZnNjYW5mIChfSU9fRklMRSAqIF9f cmVzdHJpY3QsIGNvbnN0IGNoYXIgKiBfX3Jlc3RyaWN0LAogICAgICAgICAgICAgICAgICAgICAg ICBfX2dudWNfdmFfbGlzdCwgaW50ICpfX3Jlc3RyaWN0KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBf SU9fdmZwcmludGYgKF9JT19GSUxFICpfX3Jlc3RyaWN0LCBjb25zdCBjaGFyICpfX3Jlc3RyaWN0 LAogICAgICAgICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3QpIHRocm93ICgpOwpleHRl cm4gX19zc2l6ZV90IF9JT19wYWRuIChfSU9fRklMRSAqLCBpbnQsIF9fc3NpemVfdCkgdGhyb3cg KCk7CmV4dGVybiBzaXplX3QgX0lPX3NnZXRuIChfSU9fRklMRSAqLCB2b2lkICosIHNpemVfdCkg dGhyb3cgKCk7CgpleHRlcm4gX19vZmY2NF90IF9JT19zZWVrb2ZmIChfSU9fRklMRSAqLCBfX29m ZjY0X3QsIGludCwgaW50KSB0aHJvdyAoKTsKZXh0ZXJuIF9fb2ZmNjRfdCBfSU9fc2Vla3BvcyAo X0lPX0ZJTEUgKiwgX19vZmY2NF90LCBpbnQpIHRocm93ICgpOwoKZXh0ZXJuIHZvaWQgX0lPX2Zy ZWVfYmFja3VwX2FyZWEgKF9JT19GSUxFICopIHRocm93ICgpOwoKCmV4dGVybiB3aW50X3QgX0lP X2dldHdjIChfSU9fRklMRSAqX19mcCkgdGhyb3cgKCk7CmV4dGVybiB3aW50X3QgX0lPX3B1dHdj ICh3Y2hhcl90IF9fd2MsIF9JT19GSUxFICpfX2ZwKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfSU9f ZndpZGUgKF9JT19GSUxFICpfX2ZwLCBpbnQgX19tb2RlKSB0aHJvdyAoKTsKIyA1MDEgIi91c3Iv aW5jbHVkZS9saWJpby5oIiAzCmV4dGVybiBpbnQgX0lPX3Zmd3NjYW5mIChfSU9fRklMRSAqIF9f cmVzdHJpY3QsIGNvbnN0IHdjaGFyX3QgKiBfX3Jlc3RyaWN0LAogICAgICAgICAgICAgICAgICAg ICAgICAgX19nbnVjX3ZhX2xpc3QsIGludCAqX19yZXN0cmljdCkgdGhyb3cgKCk7CmV4dGVybiBp bnQgX0lPX3Zmd3ByaW50ZiAoX0lPX0ZJTEUgKl9fcmVzdHJpY3QsIGNvbnN0IHdjaGFyX3QgKl9f cmVzdHJpY3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3QpIHRocm93 ICgpOwpleHRlcm4gX19zc2l6ZV90IF9JT193cGFkbiAoX0lPX0ZJTEUgKiwgd2ludF90LCBfX3Nz aXplX3QpIHRocm93ICgpOwpleHRlcm4gdm9pZCBfSU9fZnJlZV93YmFja3VwX2FyZWEgKF9JT19G SUxFICopIHRocm93ICgpOwoKCgp9CiMgNzQgIi91c3IvbGliL2djYy1saWIvaTM4Ni1wYy1saW51 eC1nbnUvMy4yLjEvaW5jbHVkZS9zdGRpby5oIiAyIDMKCgoKCnR5cGVkZWYgX19nbnVjX3ZhX2xp c3QgX19ub3RfdmFfbGlzdF9fOwojIDg4ICIvdXNyL2xpYi9nY2MtbGliL2kzODYtcGMtbGludXgt Z251LzMuMi4xL2luY2x1ZGUvc3RkaW8uaCIgMwp0eXBlZGVmIF9HX2Zwb3NfdCBmcG9zX3Q7CgoK Cgp0eXBlZGVmIF9HX2Zwb3M2NF90IGZwb3M2NF90OwojIDEzNyAiL3Vzci9saWIvZ2NjLWxpYi9p Mzg2LXBjLWxpbnV4LWdudS8zLjIuMS9pbmNsdWRlL3N0ZGlvLmgiIDMKIyAxICIvdXNyL2luY2x1 ZGUvYml0cy9zdGRpb19saW0uaCIgMSAzCiMgMTM4ICIvdXNyL2xpYi9nY2MtbGliL2kzODYtcGMt bGludXgtZ251LzMuMi4xL2luY2x1ZGUvc3RkaW8uaCIgMiAzCgoKCmV4dGVybiBGSUxFICpzdGRp bjsKZXh0ZXJuIEZJTEUgKnN0ZG91dDsKZXh0ZXJuIEZJTEUgKnN0ZGVycjsKCgoKCgoKZXh0ZXJu IGludCByZW1vdmUgKF9fY29uc3QgY2hhciAqX19maWxlbmFtZSkgdGhyb3cgKCk7CgpleHRlcm4g aW50IHJlbmFtZSAoX19jb25zdCBjaGFyICpfX29sZCwgX19jb25zdCBjaGFyICpfX25ldykgdGhy b3cgKCk7CgoKCgpleHRlcm4gRklMRSAqdG1wZmlsZSAodm9pZCkgdGhyb3cgKCk7CiMgMTY2ICIv dXNyL2xpYi9nY2MtbGliL2kzODYtcGMtbGludXgtZ251LzMuMi4xL2luY2x1ZGUvc3RkaW8uaCIg MwpleHRlcm4gRklMRSAqdG1wZmlsZTY0ICh2b2lkKSB0aHJvdyAoKTsKCgpleHRlcm4gY2hhciAq dG1wbmFtIChjaGFyICpfX3MpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGNoYXIgKnRtcG5hbV9yIChj aGFyICpfX3MpIHRocm93ICgpOwojIDE4NiAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LXBjLWxpbnV4 LWdudS8zLjIuMS9pbmNsdWRlL3N0ZGlvLmgiIDMKZXh0ZXJuIGNoYXIgKnRlbXBuYW0gKF9fY29u c3QgY2hhciAqX19kaXIsIF9fY29uc3QgY2hhciAqX19wZngpCiAgICAgdGhyb3cgKCkgX19hdHRy aWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKCgoKCmV4dGVybiBpbnQgZmNsb3NlIChGSUxFICpfX3N0 cmVhbSkgdGhyb3cgKCk7CgpleHRlcm4gaW50IGZmbHVzaCAoRklMRSAqX19zdHJlYW0pIHRocm93 ICgpOwoKCgpleHRlcm4gaW50IGZmbHVzaF91bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pIHRocm93 ICgpOwoKCgoKZXh0ZXJuIGludCBmY2xvc2VhbGwgKHZvaWQpIHRocm93ICgpOwoKCgoKCmV4dGVy biBGSUxFICpmb3BlbiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZmlsZW5hbWUsCiAgICAg ICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbW9kZXMpIHRocm93ICgp OwoKZXh0ZXJuIEZJTEUgKmZyZW9wZW4gKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZpbGVu YW1lLAogICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbW9k ZXMsCiAgICAgICAgICAgICAgICAgICAgICBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0aHJv dyAoKTsKIyAyMzAgIi91c3IvbGliL2djYy1saWIvaTM4Ni1wYy1saW51eC1nbnUvMy4yLjEvaW5j bHVkZS9zdGRpby5oIiAzCmV4dGVybiBGSUxFICpmb3BlbjY0IChfX2NvbnN0IGNoYXIgKl9fcmVz dHJpY3QgX19maWxlbmFtZSwKICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19y ZXN0cmljdCBfX21vZGVzKSB0aHJvdyAoKTsKZXh0ZXJuIEZJTEUgKmZyZW9wZW42NCAoX19jb25z dCBjaGFyICpfX3Jlc3RyaWN0IF9fZmlsZW5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgIF9f Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX21vZGVzLAogICAgICAgICAgICAgICAgICAgICAgICBG SUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBGSUxFICpmZG9w ZW4gKGludCBfX2ZkLCBfX2NvbnN0IGNoYXIgKl9fbW9kZXMpIHRocm93ICgpOwoKCgoKCmV4dGVy biBGSUxFICpmb3BlbmNvb2tpZSAodm9pZCAqX19yZXN0cmljdCBfX21hZ2ljX2Nvb2tpZSwKICAg ICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19tb2RlcywK ICAgICAgICAgICAgICAgICAgICAgICAgICBfSU9fY29va2llX2lvX2Z1bmN0aW9uc190IF9faW9f ZnVuY3MpIHRocm93ICgpOwoKCmV4dGVybiBGSUxFICpmbWVtb3BlbiAodm9pZCAqX19zLCBzaXpl X3QgX19sZW4sIF9fY29uc3QgY2hhciAqX19tb2RlcykgdGhyb3cgKCk7CgoKCgpleHRlcm4gRklM RSAqb3Blbl9tZW1zdHJlYW0gKGNoYXIgKipfX3Jlc3RyaWN0IF9fYnVmbG9jLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHNpemVfdCAqX19yZXN0cmljdCBfX3NpemVsb2MpIHRocm93ICgp OwoKCgoKCmV4dGVybiB2b2lkIHNldGJ1ZiAoRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSwgY2hh ciAqX19yZXN0cmljdCBfX2J1ZikgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgc2V0dmJ1ZiAoRklM RSAqX19yZXN0cmljdCBfX3N0cmVhbSwgY2hhciAqX19yZXN0cmljdCBfX2J1ZiwKICAgICAgICAg ICAgICAgICAgICBpbnQgX19tb2Rlcywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCgpleHRlcm4g dm9pZCBzZXRidWZmZXIgKEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sIGNoYXIgKl9fcmVzdHJp Y3QgX19idWYsCiAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fc2l6ZSkgdGhyb3cgKCk7 CgoKZXh0ZXJuIHZvaWQgc2V0bGluZWJ1ZiAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgoK ZXh0ZXJuIGludCBmcHJpbnRmIChGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLAogICAgICAgICAg ICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKSB0aHJvdyAo KTsKCmV4dGVybiBpbnQgcHJpbnRmIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQs IC4uLikgdGhyb3cgKCk7CgpleHRlcm4gaW50IHNwcmludGYgKGNoYXIgKl9fcmVzdHJpY3QgX19z LAogICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwg Li4uKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHZmcHJpbnRmIChGSUxFICpfX3Jlc3RyaWN0IF9f cywgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LAogICAgICAgICAgICAgICAgICAg ICBfX2dudWNfdmFfbGlzdCBfX2FyZykgdGhyb3cgKCk7CgpleHRlcm4gaW50IHZwcmludGYgKF9f Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgX19nbnVjX3ZhX2xpc3QgX19hcmcpCiAg ICAgdGhyb3cgKCk7CgpleHRlcm4gaW50IHZzcHJpbnRmIChjaGFyICpfX3Jlc3RyaWN0IF9fcywg X19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LAogICAgICAgICAgICAgICAgICAgICBf X2dudWNfdmFfbGlzdCBfX2FyZykgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgc25wcmludGYgKGNo YXIgKl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19tYXhsZW4sCiAgICAgICAgICAgICAgICAgICAg IF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKQogICAgIHRocm93ICgpIF9f YXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAzLCA0KSkpOwoKZXh0ZXJuIGlu dCB2c25wcmludGYgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19tYXhsZW4sCiAgICAg ICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIF9fZ251 Y192YV9saXN0IF9fYXJnKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9f IChfX3ByaW50Zl9fLCAzLCAwKSkpOwoKCgoKCmV4dGVybiBpbnQgdmFzcHJpbnRmIChjaGFyICoq X19yZXN0cmljdCBfX3B0ciwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZiwKICAgICAgICAg ICAgICAgICAgICAgIF9fZ251Y192YV9saXN0IF9fYXJnKQogICAgIHRocm93ICgpIF9fYXR0cmli dXRlX18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAyLCAwKSkpOwpleHRlcm4gaW50IF9fYXNw cmludGYgKGNoYXIgKipfX3Jlc3RyaWN0IF9fcHRyLAogICAgICAgICAgICAgICAgICAgICAgIF9f Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZtdCwgLi4uKQogICAgIHRocm93ICgpIF9fYXR0cmli dXRlX18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAyLCAzKSkpOwpleHRlcm4gaW50IGFzcHJp bnRmIChjaGFyICoqX19yZXN0cmljdCBfX3B0ciwKICAgICAgICAgICAgICAgICAgICAgX19jb25z dCBjaGFyICpfX3Jlc3RyaWN0IF9fZm10LCAuLi4pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVf XyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDIsIDMpKSk7CgoKZXh0ZXJuIGludCB2ZHByaW50 ZiAoaW50IF9fZmQsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZtdCwKICAgICAgICAgICAg ICAgICAgICAgX19nbnVjX3ZhX2xpc3QgX19hcmcpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVf XyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDIsIDApKSk7CmV4dGVybiBpbnQgZHByaW50ZiAo aW50IF9fZmQsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZtdCwgLi4uKQogICAgIHRocm93 ICgpIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAyLCAzKSkpOwoKCgoK ZXh0ZXJuIGludCBmc2NhbmYgKEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sCiAgICAgICAgICAg ICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikgdGhyb3cgKCk7 CgpleHRlcm4gaW50IHNjYW5mIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4u LikgdGhyb3cgKCk7CgpleHRlcm4gaW50IHNzY2FuZiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0 IF9fcywKICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1h dCwgLi4uKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCB2ZnNjYW5mIChGSUxFICpfX3Jlc3RyaWN0 IF9fcywgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LAogICAgICAgICAgICAgICAg ICAgIF9fZ251Y192YV9saXN0IF9fYXJnKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChf X2Zvcm1hdF9fIChfX3NjYW5mX18sIDIsIDApKSk7CgoKZXh0ZXJuIGludCB2c2NhbmYgKF9fY29u c3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgX19nbnVjX3ZhX2xpc3QgX19hcmcpCiAgICAg dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fc2NhbmZfXywgMSwgMCkpKTsK CgpleHRlcm4gaW50IHZzc2NhbmYgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3MsCiAgICAg ICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCBfX2dudWNf dmFfbGlzdCBfX2FyZykKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAo X19zY2FuZl9fLCAyLCAwKSkpOwoKCgoKZXh0ZXJuIGludCBmZ2V0YyAoRklMRSAqX19zdHJlYW0p IHRocm93ICgpOwpleHRlcm4gaW50IGdldGMgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgpl eHRlcm4gaW50IGdldGNoYXIgKHZvaWQpIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIGludCBnZXRj X3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVybiBpbnQgZ2V0Y2hhcl91 bmxvY2tlZCAodm9pZCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGZnZXRjX3VubG9ja2VkIChG SUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGZwdXRjIChpbnQgX19jLCBG SUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVybiBpbnQgcHV0YyAoaW50IF9fYywgRklMRSAq X19zdHJlYW0pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHV0Y2hhciAoaW50IF9fYykgdGhyb3cg KCk7CgoKCgoKCgpleHRlcm4gaW50IGZwdXRjX3VubG9ja2VkIChpbnQgX19jLCBGSUxFICpfX3N0 cmVhbSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IHB1dGNfdW5sb2NrZWQgKGludCBfX2MsIEZJ TEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBwdXRjaGFyX3VubG9ja2VkIChpbnQg X19jKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IGdldHcgKEZJTEUgKl9fc3RyZWFtKSB0aHJv dyAoKTsKCgpleHRlcm4gaW50IHB1dHcgKGludCBfX3csIEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAo KTsKCgoKCmV4dGVybiBjaGFyICpmZ2V0cyAoY2hhciAqX19yZXN0cmljdCBfX3MsIGludCBfX24s IEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pCiAgICAgdGhyb3cgKCk7CgoKCmV4dGVybiBjaGFy ICpmZ2V0c191bmxvY2tlZCAoY2hhciAqX19yZXN0cmljdCBfX3MsIGludCBfX24sCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7 CgoKCgpleHRlcm4gY2hhciAqZ2V0cyAoY2hhciAqX19zKSB0aHJvdyAoKTsKIyA0MzQgIi91c3Iv bGliL2djYy1saWIvaTM4Ni1wYy1saW51eC1nbnUvMy4yLjEvaW5jbHVkZS9zdGRpby5oIiAzCmV4 dGVybiBfX3NzaXplX3QgX19nZXRkZWxpbSAoY2hhciAqKl9fcmVzdHJpY3QgX19saW5lcHRyLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICpfX3Jlc3RyaWN0IF9fbiwgaW50 IF9fZGVsaW1pdGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRklMRSAqX19yZXN0 cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVybiBfX3NzaXplX3QgZ2V0ZGVsaW0gKGNoYXIg KipfX3Jlc3RyaWN0IF9fbGluZXB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXpl X3QgKl9fcmVzdHJpY3QgX19uLCBpbnQgX19kZWxpbWl0ZXIsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CgoKZXh0ZXJuIF9f c3NpemVfdCBnZXRsaW5lIChjaGFyICoqX19yZXN0cmljdCBfX2xpbmVwdHIsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICBzaXplX3QgKl9fcmVzdHJpY3QgX19uLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgpleHRl cm4gaW50IGZwdXRzIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zLCBGSUxFICpfX3Jlc3Ry aWN0IF9fc3RyZWFtKQogICAgIHRocm93ICgpOwoKCgpleHRlcm4gaW50IGZwdXRzX3VubG9ja2Vk IChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zLAogICAgICAgICAgICAgICAgICAgICAgICAg ICBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBwdXRz IChfX2NvbnN0IGNoYXIgKl9fcykgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgdW5nZXRjIChpbnQg X19jLCBGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCmV4dGVybiBzaXplX3QgZnJlYWQgKHZv aWQgKl9fcmVzdHJpY3QgX19wdHIsIHNpemVfdCBfX3NpemUsCiAgICAgICAgICAgICAgICAgICAg IHNpemVfdCBfX24sIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwoKZXh0ZXJu IHNpemVfdCBmd3JpdGUgKF9fY29uc3Qgdm9pZCAqX19yZXN0cmljdCBfX3B0ciwgc2l6ZV90IF9f c2l6ZSwKICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX24sIEZJTEUgKl9fcmVzdHJpY3Qg X19zKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHNpemVfdCBmcmVhZF91bmxvY2tlZCAodm9pZCAqX19y ZXN0cmljdCBfX3B0ciwgc2l6ZV90IF9fc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgc2l6ZV90IF9fbiwgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVy biBzaXplX3QgZndyaXRlX3VubG9ja2VkIChfX2NvbnN0IHZvaWQgKl9fcmVzdHJpY3QgX19wdHIs IHNpemVfdCBfX3NpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19u LCBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgZnNl ZWsgKEZJTEUgKl9fc3RyZWFtLCBsb25nIGludCBfX29mZiwgaW50IF9fd2hlbmNlKSB0aHJvdyAo KTsKCmV4dGVybiBsb25nIGludCBmdGVsbCAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKZXh0 ZXJuIHZvaWQgcmV3aW5kIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CiMgNDk3ICIvdXNyL2xp Yi9nY2MtbGliL2kzODYtcGMtbGludXgtZ251LzMuMi4xL2luY2x1ZGUvc3RkaW8uaCIgMwpleHRl cm4gaW50IGZzZWVrbyAoRklMRSAqX19zdHJlYW0sIF9fb2ZmX3QgX19vZmYsIGludCBfX3doZW5j ZSkgdGhyb3cgKCk7CgpleHRlcm4gX19vZmZfdCBmdGVsbG8gKEZJTEUgKl9fc3RyZWFtKSB0aHJv dyAoKTsKCgoKZXh0ZXJuIGludCBmZ2V0cG9zIChGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLCBm cG9zX3QgKl9fcmVzdHJpY3QgX19wb3MpCiAgICAgdGhyb3cgKCk7CgpleHRlcm4gaW50IGZzZXRw b3MgKEZJTEUgKl9fc3RyZWFtLCBfX2NvbnN0IGZwb3NfdCAqX19wb3MpIHRocm93ICgpOwojIDUz MSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LXBjLWxpbnV4LWdudS8zLjIuMS9pbmNsdWRlL3N0ZGlv LmgiIDMKZXh0ZXJuIGludCBmc2Vla282NCAoRklMRSAqX19zdHJlYW0sIF9fb2ZmNjRfdCBfX29m ZiwgaW50IF9fd2hlbmNlKSB0aHJvdyAoKTsKZXh0ZXJuIF9fb2ZmNjRfdCBmdGVsbG82NCAoRklM RSAqX19zdHJlYW0pIHRocm93ICgpOwpleHRlcm4gaW50IGZnZXRwb3M2NCAoRklMRSAqX19yZXN0 cmljdCBfX3N0cmVhbSwgZnBvczY0X3QgKl9fcmVzdHJpY3QgX19wb3MpCiAgICAgdGhyb3cgKCk7 CmV4dGVybiBpbnQgZnNldHBvczY0IChGSUxFICpfX3N0cmVhbSwgX19jb25zdCBmcG9zNjRfdCAq X19wb3MpIHRocm93ICgpOwoKCgpleHRlcm4gdm9pZCBjbGVhcmVyciAoRklMRSAqX19zdHJlYW0p IHRocm93ICgpOwoKZXh0ZXJuIGludCBmZW9mIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7Cgpl eHRlcm4gaW50IGZlcnJvciAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgpleHRlcm4gdm9p ZCBjbGVhcmVycl91bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwpleHRlcm4gaW50 IGZlb2ZfdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBmZXJy b3JfdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCmV4dGVybiB2b2lkIHBl cnJvciAoX19jb25zdCBjaGFyICpfX3MpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBzeXNfbmVy cjsKZXh0ZXJuIF9fY29uc3QgY2hhciAqX19jb25zdCBzeXNfZXJybGlzdFtdOwoKCmV4dGVybiBp bnQgX3N5c19uZXJyOwpleHRlcm4gX19jb25zdCBjaGFyICpfX2NvbnN0IF9zeXNfZXJybGlzdFtd OwoKCgoKCmV4dGVybiBpbnQgZmlsZW5vIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgpl eHRlcm4gaW50IGZpbGVub191bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgoK CgpleHRlcm4gRklMRSAqcG9wZW4gKF9fY29uc3QgY2hhciAqX19jb21tYW5kLCBfX2NvbnN0IGNo YXIgKl9fbW9kZXMpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcGNsb3NlIChGSUxFICpfX3N0cmVh bSkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGNoYXIgKmN0ZXJtaWQgKGNoYXIgKl9fcykgdGhyb3cg KCk7CgoKCgoKZXh0ZXJuIGNoYXIgKmN1c2VyaWQgKGNoYXIgKl9fcykgdGhyb3cgKCk7CgoKCgpz dHJ1Y3Qgb2JzdGFjazsKCgpleHRlcm4gaW50IG9ic3RhY2tfcHJpbnRmIChzdHJ1Y3Qgb2JzdGFj ayAqX19yZXN0cmljdCBfX29ic3RhY2ssCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29u c3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBv YnN0YWNrX3ZwcmludGYgKHN0cnVjdCBvYnN0YWNrICpfX3Jlc3RyaWN0IF9fb2JzdGFjaywKICAg ICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1h dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0IF9fYXJncykgdGhy b3cgKCk7CgoKCgoKCgpleHRlcm4gdm9pZCBmbG9ja2ZpbGUgKEZJTEUgKl9fc3RyZWFtKSB0aHJv dyAoKTsKCgoKZXh0ZXJuIGludCBmdHJ5bG9ja2ZpbGUgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAo KTsKCgpleHRlcm4gdm9pZCBmdW5sb2NrZmlsZSAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoj IDYzOCAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LXBjLWxpbnV4LWdudS8zLjIuMS9pbmNsdWRlL3N0 ZGlvLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9zdGRpby5oIiAxIDMKIyAzOSAiL3Vzci9p bmNsdWRlL2JpdHMvc3RkaW8uaCIgMwppbmxpbmUgaW50CnZwcmludGYgKF9fY29uc3QgY2hhciAq X19yZXN0cmljdCBfX2ZtdCwgX19nbnVjX3ZhX2xpc3QgX19hcmcpIHRocm93ICgpCnsKICByZXR1 cm4gdmZwcmludGYgKHN0ZG91dCwgX19mbXQsIF9fYXJnKTsKfQoKCmlubGluZSBpbnQKZ2V0Y2hh ciAodm9pZCkgdGhyb3cgKCkKewogIHJldHVybiBfSU9fZ2V0YyAoc3RkaW4pOwp9CgoKCgppbmxp bmUgaW50CmdldGNfdW5sb2NrZWQgKEZJTEUgKl9fZnApIHRocm93ICgpCnsKICByZXR1cm4gKChf X2ZwKS0+X0lPX3JlYWRfcHRyID49IChfX2ZwKS0+X0lPX3JlYWRfZW5kID8gX191ZmxvdyAoX19m cCkgOiAqKHVuc2lnbmVkIGNoYXIgKikgKF9fZnApLT5fSU9fcmVhZF9wdHIrKyk7Cn0KCgppbmxp bmUgaW50CmdldGNoYXJfdW5sb2NrZWQgKHZvaWQpIHRocm93ICgpCnsKICByZXR1cm4gKChzdGRp biktPl9JT19yZWFkX3B0ciA+PSAoc3RkaW4pLT5fSU9fcmVhZF9lbmQgPyBfX3VmbG93IChzdGRp bikgOiAqKHVuc2lnbmVkIGNoYXIgKikgKHN0ZGluKS0+X0lPX3JlYWRfcHRyKyspOwp9CgoKCgpp bmxpbmUgaW50CnB1dGNoYXIgKGludCBfX2MpIHRocm93ICgpCnsKICByZXR1cm4gX0lPX3B1dGMg KF9fYywgc3Rkb3V0KTsKfQoKCgoKaW5saW5lIGludApmcHV0Y191bmxvY2tlZCAoaW50IF9fYywg RklMRSAqX19zdHJlYW0pIHRocm93ICgpCnsKICByZXR1cm4gKCgoX19zdHJlYW0pLT5fSU9fd3Jp dGVfcHRyID49IChfX3N0cmVhbSktPl9JT193cml0ZV9lbmQpID8gX19vdmVyZmxvdyAoX19zdHJl YW0sICh1bnNpZ25lZCBjaGFyKSAoX19jKSkgOiAodW5zaWduZWQgY2hhcikgKCooX19zdHJlYW0p LT5fSU9fd3JpdGVfcHRyKysgPSAoX19jKSkpOwp9CgoKCgoKaW5saW5lIGludApwdXRjX3VubG9j a2VkIChpbnQgX19jLCBGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCkKewogIHJldHVybiAoKChfX3N0 cmVhbSktPl9JT193cml0ZV9wdHIgPj0gKF9fc3RyZWFtKS0+X0lPX3dyaXRlX2VuZCkgPyBfX292 ZXJmbG93IChfX3N0cmVhbSwgKHVuc2lnbmVkIGNoYXIpIChfX2MpKSA6ICh1bnNpZ25lZCBjaGFy KSAoKihfX3N0cmVhbSktPl9JT193cml0ZV9wdHIrKyA9IChfX2MpKSk7Cn0KCgppbmxpbmUgaW50 CnB1dGNoYXJfdW5sb2NrZWQgKGludCBfX2MpIHRocm93ICgpCnsKICByZXR1cm4gKCgoc3Rkb3V0 KS0+X0lPX3dyaXRlX3B0ciA+PSAoc3Rkb3V0KS0+X0lPX3dyaXRlX2VuZCkgPyBfX292ZXJmbG93 IChzdGRvdXQsICh1bnNpZ25lZCBjaGFyKSAoX19jKSkgOiAodW5zaWduZWQgY2hhcikgKCooc3Rk b3V0KS0+X0lPX3dyaXRlX3B0cisrID0gKF9fYykpKTsKfQoKCgoKCmlubGluZSBfX3NzaXplX3QK Z2V0bGluZSAoY2hhciAqKl9fbGluZXB0ciwgc2l6ZV90ICpfX24sIEZJTEUgKl9fc3RyZWFtKSB0 aHJvdyAoKQp7CiAgcmV0dXJuIF9fZ2V0ZGVsaW0gKF9fbGluZXB0ciwgX19uLCAnXG4nLCBfX3N0 cmVhbSk7Cn0KCgoKCgppbmxpbmUgaW50CmZlb2ZfdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKSB0 aHJvdyAoKQp7CiAgcmV0dXJuICgoKF9fc3RyZWFtKS0+X2ZsYWdzICYgMHgxMCkgIT0gMCk7Cn0K CgppbmxpbmUgaW50CmZlcnJvcl91bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpCnsK ICByZXR1cm4gKCgoX19zdHJlYW0pLT5fZmxhZ3MgJiAweDIwKSAhPSAwKTsKfQojIDYzOSAiL3Vz ci9saWIvZ2NjLWxpYi9pMzg2LXBjLWxpbnV4LWdudS8zLjIuMS9pbmNsdWRlL3N0ZGlvLmgiIDIg MwoKCn0KIyA1MyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9jc3RkaW8iIDIgMwojIDk3ICIvdXNy L2luY2x1ZGUvYysrLzMuMi4xL2NzdGRpbyIgMwpuYW1lc3BhY2Ugc3RkCnsKICB1c2luZyA6OkZJ TEU7CiAgdXNpbmcgOjpmcG9zX3Q7CgogIHVzaW5nIDo6Y2xlYXJlcnI7CiAgdXNpbmcgOjpmY2xv c2U7CiAgdXNpbmcgOjpmZW9mOwogIHVzaW5nIDo6ZmVycm9yOwogIHVzaW5nIDo6ZmZsdXNoOwog IHVzaW5nIDo6ZmdldGM7CiAgdXNpbmcgOjpmZ2V0cG9zOwogIHVzaW5nIDo6ZmdldHM7CiAgdXNp bmcgOjpmb3BlbjsKICB1c2luZyA6OmZwcmludGY7CiAgdXNpbmcgOjpmcHV0YzsKICB1c2luZyA6 OmZwdXRzOwogIHVzaW5nIDo6ZnJlYWQ7CiAgdXNpbmcgOjpmcmVvcGVuOwogIHVzaW5nIDo6ZnNj YW5mOwogIHVzaW5nIDo6ZnNlZWs7CiAgdXNpbmcgOjpmc2V0cG9zOwogIHVzaW5nIDo6ZnRlbGw7 CiAgdXNpbmcgOjpmd3JpdGU7CiAgdXNpbmcgOjpnZXRjOwogIHVzaW5nIDo6Z2V0Y2hhcjsKICB1 c2luZyA6OmdldHM7CiAgdXNpbmcgOjpwZXJyb3I7CiAgdXNpbmcgOjpwcmludGY7CiAgdXNpbmcg OjpwdXRjOwogIHVzaW5nIDo6cHV0Y2hhcjsKICB1c2luZyA6OnB1dHM7CiAgdXNpbmcgOjpyZW1v dmU7CiAgdXNpbmcgOjpyZW5hbWU7CiAgdXNpbmcgOjpyZXdpbmQ7CiAgdXNpbmcgOjpzY2FuZjsK ICB1c2luZyA6OnNldGJ1ZjsKICB1c2luZyA6OnNldHZidWY7CiAgdXNpbmcgOjpzcHJpbnRmOwog IHVzaW5nIDo6c3NjYW5mOwogIHVzaW5nIDo6dG1wZmlsZTsKICB1c2luZyA6OnRtcG5hbTsKICB1 c2luZyA6OnVuZ2V0YzsKICB1c2luZyA6OnZmcHJpbnRmOwogIHVzaW5nIDo6dnByaW50ZjsKICB1 c2luZyA6OnZzcHJpbnRmOwp9CiMgMTUzICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL2NzdGRpbyIg MwpuYW1lc3BhY2UgX19nbnVfY3h4CnsKICB1c2luZyA6OnNucHJpbnRmOwogIHVzaW5nIDo6dmZz Y2FuZjsKICB1c2luZyA6OnZzY2FuZjsKICB1c2luZyA6OnZzbnByaW50ZjsKICB1c2luZyA6OnZz c2NhbmY7Cn0KCm5hbWVzcGFjZSBzdGQKewogIHVzaW5nIF9fZ251X2N4eDo6c25wcmludGY7CiAg dXNpbmcgX19nbnVfY3h4Ojp2ZnNjYW5mOwogIHVzaW5nIF9fZ251X2N4eDo6dnNjYW5mOwogIHVz aW5nIF9fZ251X2N4eDo6dnNucHJpbnRmOwogIHVzaW5nIF9fZ251X2N4eDo6dnNzY2FuZjsKfQoj IDM2ICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL2kzODYtcGMtbGludXgtZ251L2JpdHMvYysraW8u aCIgMiAzCgojIDEgIi91c3IvaW5jbHVkZS9jKysvMy4yLjEvaTM4Ni1wYy1saW51eC1nbnUvYml0 cy9ndGhyLmgiIDEgMwojIDk4ICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL2kzODYtcGMtbGludXgt Z251L2JpdHMvZ3Roci5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9pMzg2LXBjLWxp bnV4LWdudS9iaXRzL2d0aHItZGVmYXVsdC5oIiAxIDMKIyAzNyAiL3Vzci9pbmNsdWRlL2MrKy8z LjIuMS9pMzg2LXBjLWxpbnV4LWdudS9iaXRzL2d0aHItZGVmYXVsdC5oIiAzCiMgMSAiL3Vzci9p bmNsdWRlL3B0aHJlYWQuaCIgMSAzCiMgMjAgIi91c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDMKIyAx ICIvdXNyL2luY2x1ZGUvc2NoZWQuaCIgMSAzCiMgMjkgIi91c3IvaW5jbHVkZS9zY2hlZC5oIiAz CiMgMSAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMSAzCiMgMTA2ICIvdXNyL2luY2x1ZGUvdGltZS5o IiAzCnN0cnVjdCB0aW1lc3BlYwogIHsKICAgIGxvbmcgaW50IHR2X3NlYzsKICAgIGxvbmcgaW50 IHR2X25zZWM7CiAgfTsKIyAzMCAiL3Vzci9pbmNsdWRlL3NjaGVkLmgiIDIgMwoKCiMgMSAiL3Vz ci9pbmNsdWRlL2JpdHMvc2NoZWQuaCIgMSAzCiMgNDcgIi91c3IvaW5jbHVkZS9iaXRzL3NjaGVk LmgiIDMKc3RydWN0IHNjaGVkX3BhcmFtCiAgewogICAgaW50IF9fc2NoZWRfcHJpb3JpdHk7CiAg fTsKCmV4dGVybiAiQyIgewoKCgpleHRlcm4gaW50IGNsb25lIChpbnQgKCpfX2ZuKSAodm9pZCAq X19hcmcpLCB2b2lkICpfX2NoaWxkX3N0YWNrLAogICAgICAgICAgICAgICAgICBpbnQgX19mbGFn cywgdm9pZCAqX19hcmcpIHRocm93ICgpOwoKCn0KIyAzMyAiL3Vzci9pbmNsdWRlL3NjaGVkLmgi IDIgMwoKCgoKZXh0ZXJuICJDIiB7CgoKZXh0ZXJuIGludCBzY2hlZF9zZXRwYXJhbSAoX19waWRf dCBfX3BpZCwgX19jb25zdCBzdHJ1Y3Qgc2NoZWRfcGFyYW0gKl9fcGFyYW0pCiAgICAgdGhyb3cg KCk7CgoKZXh0ZXJuIGludCBzY2hlZF9nZXRwYXJhbSAoX19waWRfdCBfX3BpZCwgc3RydWN0IHNj aGVkX3BhcmFtICpfX3BhcmFtKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHNjaGVkX3NldHNjaGVk dWxlciAoX19waWRfdCBfX3BpZCwgaW50IF9fcG9saWN5LAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgX19jb25zdCBzdHJ1Y3Qgc2NoZWRfcGFyYW0gKl9fcGFyYW0pIHRocm93ICgpOwoK CmV4dGVybiBpbnQgc2NoZWRfZ2V0c2NoZWR1bGVyIChfX3BpZF90IF9fcGlkKSB0aHJvdyAoKTsK CgpleHRlcm4gaW50IHNjaGVkX3lpZWxkICh2b2lkKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHNj aGVkX2dldF9wcmlvcml0eV9tYXggKGludCBfX2FsZ29yaXRobSkgdGhyb3cgKCk7CgoKZXh0ZXJu IGludCBzY2hlZF9nZXRfcHJpb3JpdHlfbWluIChpbnQgX19hbGdvcml0aG0pIHRocm93ICgpOwoK CmV4dGVybiBpbnQgc2NoZWRfcnJfZ2V0X2ludGVydmFsIChfX3BpZF90IF9fcGlkLCBzdHJ1Y3Qg dGltZXNwZWMgKl9fdCkgdGhyb3cgKCk7Cgp9CiMgMjEgIi91c3IvaW5jbHVkZS9wdGhyZWFkLmgi IDIgMwojIDEgIi91c3IvaW5jbHVkZS90aW1lLmgiIDEgMwojIDMwICIvdXNyL2luY2x1ZGUvdGlt ZS5oIiAzCmV4dGVybiAiQyIgewoKCgoKCgoKIyAxICIvdXNyL2xpYi9nY2MtbGliL2kzODYtcGMt bGludXgtZ251LzMuMi4xL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDM5ICIvdXNyL2luY2x1ZGUv dGltZS5oIiAyIDMKCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy90aW1lLmgiIDEgMwojIDQzICIv dXNyL2luY2x1ZGUvdGltZS5oIiAyIDMKIyA1OSAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwp0eXBl ZGVmIF9fY2xvY2tfdCBjbG9ja190OwojIDcwICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCnR5cGVk ZWYgX190aW1lX3QgdGltZV90OwojIDgyICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCnR5cGVkZWYg X19jbG9ja2lkX3QgY2xvY2tpZF90OwojIDk0ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCnR5cGVk ZWYgX190aW1lcl90IHRpbWVyX3Q7CiMgMTE4ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCnN0cnVj dCB0bQp7CiAgaW50IHRtX3NlYzsKICBpbnQgdG1fbWluOwogIGludCB0bV9ob3VyOwogIGludCB0 bV9tZGF5OwogIGludCB0bV9tb247CiAgaW50IHRtX3llYXI7CiAgaW50IHRtX3dkYXk7CiAgaW50 IHRtX3lkYXk7CiAgaW50IHRtX2lzZHN0OwoKCiAgbG9uZyBpbnQgdG1fZ210b2ZmOwogIF9fY29u c3QgY2hhciAqdG1fem9uZTsKCgoKCn07CgoKCgpzdHJ1Y3QgaXRpbWVyc3BlYwogIHsKICAgIHN0 cnVjdCB0aW1lc3BlYyBpdF9pbnRlcnZhbDsKICAgIHN0cnVjdCB0aW1lc3BlYyBpdF92YWx1ZTsK ICB9OwoKCnN0cnVjdCBzaWdldmVudDsKCgoKCgp0eXBlZGVmIF9fcGlkX3QgcGlkX3Q7CgoKCgoK CgpleHRlcm4gY2xvY2tfdCBjbG9jayAodm9pZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIHRpbWVfdCB0 aW1lICh0aW1lX3QgKl9fdGltZXIpIHRocm93ICgpOwoKCmV4dGVybiBkb3VibGUgZGlmZnRpbWUg KHRpbWVfdCBfX3RpbWUxLCB0aW1lX3QgX190aW1lMCkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0 ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIHRpbWVfdCBta3RpbWUgKHN0cnVjdCB0bSAqX190 cCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIHNpemVfdCBzdHJmdGltZSAoY2hhciAqX19yZXN0cmlj dCBfX3MsIHNpemVfdCBfX21heHNpemUsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qg Y2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwKICAgICAgICAgICAgICAgICAgICAgICAgX19jb25z dCBzdHJ1Y3QgdG0gKl9fcmVzdHJpY3QgX190cCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hhciAq c3RycHRpbWUgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3MsCiAgICAgICAgICAgICAgICAg ICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm10LCBzdHJ1Y3QgdG0gKl9fdHApCiAg ICAgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIHN0cnVjdCB0bSAqZ210aW1lIChfX2NvbnN0IHRpbWVf dCAqX190aW1lcikgdGhyb3cgKCk7CgoKCmV4dGVybiBzdHJ1Y3QgdG0gKmxvY2FsdGltZSAoX19j b25zdCB0aW1lX3QgKl9fdGltZXIpIHRocm93ICgpOwoKCgoKZXh0ZXJuIHN0cnVjdCB0bSAqZ210 aW1lX3IgKF9fY29uc3QgdGltZV90ICpfX3Jlc3RyaWN0IF9fdGltZXIsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICBzdHJ1Y3QgdG0gKl9fcmVzdHJpY3QgX190cCkgdGhyb3cgKCk7CgoKCmV4 dGVybiBzdHJ1Y3QgdG0gKmxvY2FsdGltZV9yIChfX2NvbnN0IHRpbWVfdCAqX19yZXN0cmljdCBf X3RpbWVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHRtICpfX3Jlc3Ry aWN0IF9fdHApIHRocm93ICgpOwoKCgoKZXh0ZXJuIGNoYXIgKmFzY3RpbWUgKF9fY29uc3Qgc3Ry dWN0IHRtICpfX3RwKSB0aHJvdyAoKTsKCgpleHRlcm4gY2hhciAqY3RpbWUgKF9fY29uc3QgdGlt ZV90ICpfX3RpbWVyKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGNoYXIgKmFzY3RpbWVfciAoX19j b25zdCBzdHJ1Y3QgdG0gKl9fcmVzdHJpY3QgX190cCwKICAgICAgICAgICAgICAgICAgICAgICAg Y2hhciAqX19yZXN0cmljdCBfX2J1ZikgdGhyb3cgKCk7CgoKZXh0ZXJuIGNoYXIgKmN0aW1lX3Ig KF9fY29uc3QgdGltZV90ICpfX3Jlc3RyaWN0IF9fdGltZXIsCiAgICAgICAgICAgICAgICAgICAg ICBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBjaGFyICpfX3R6 bmFtZVsyXTsKZXh0ZXJuIGludCBfX2RheWxpZ2h0OwpleHRlcm4gbG9uZyBpbnQgX190aW1lem9u ZTsKCgoKCmV4dGVybiBjaGFyICp0em5hbWVbMl07CgoKCmV4dGVybiB2b2lkIHR6c2V0ICh2b2lk KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBkYXlsaWdodDsKZXh0ZXJuIGxvbmcgaW50IHRpbWV6 b25lOwoKCgoKCmV4dGVybiBpbnQgc3RpbWUgKF9fY29uc3QgdGltZV90ICpfX3doZW4pIHRocm93 ICgpOwojIDI3MSAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwpleHRlcm4gdGltZV90IHRpbWVnbSAo c3RydWN0IHRtICpfX3RwKSB0aHJvdyAoKTsKCgpleHRlcm4gdGltZV90IHRpbWVsb2NhbCAoc3Ry dWN0IHRtICpfX3RwKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IGR5c2l6ZSAoaW50IF9feWVhcikg dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKCmV4dGVybiBpbnQgbmFu b3NsZWVwIChfX2NvbnN0IHN0cnVjdCB0aW1lc3BlYyAqX19yZXF1ZXN0ZWRfdGltZSwKICAgICAg ICAgICAgICAgICAgICAgIHN0cnVjdCB0aW1lc3BlYyAqX19yZW1haW5pbmcpIHRocm93ICgpOwoK CgpleHRlcm4gaW50IGNsb2NrX2dldHJlcyAoY2xvY2tpZF90IF9fY2xvY2tfaWQsIHN0cnVjdCB0 aW1lc3BlYyAqX19yZXMpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgY2xvY2tfZ2V0dGltZSAoY2xv Y2tpZF90IF9fY2xvY2tfaWQsIHN0cnVjdCB0aW1lc3BlYyAqX190cCkgdGhyb3cgKCk7CgoKZXh0 ZXJuIGludCBjbG9ja19zZXR0aW1lIChjbG9ja2lkX3QgX19jbG9ja19pZCwgX19jb25zdCBzdHJ1 Y3QgdGltZXNwZWMgKl9fdHApCiAgICAgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgY2xvY2tfbmFu b3NsZWVwIChjbG9ja2lkX3QgX19jbG9ja19pZCwgaW50IF9fZmxhZ3MsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICBfX2NvbnN0IHN0cnVjdCB0aW1lc3BlYyAqX19yZXEsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICBzdHJ1Y3QgdGltZXNwZWMgKl9fcmVtKSB0aHJvdyAoKTsKCgpleHRl cm4gaW50IGNsb2NrX2dldGNwdWNsb2NraWQgKHBpZF90IF9fcGlkLCBjbG9ja2lkX3QgKl9fY2xv Y2tfaWQpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCB0aW1lcl9jcmVhdGUgKGNsb2NraWRfdCBf X2Nsb2NrX2lkLAogICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNpZ2V2ZW50ICpfX3Jl c3RyaWN0IF9fZXZwLAogICAgICAgICAgICAgICAgICAgICAgICAgdGltZXJfdCAqX19yZXN0cmlj dCBfX3RpbWVyaWQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgdGltZXJfZGVsZXRlICh0aW1lcl90 IF9fdGltZXJpZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCB0aW1lcl9zZXR0aW1lICh0aW1lcl90 IF9fdGltZXJpZCwgaW50IF9fZmxhZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25z dCBzdHJ1Y3QgaXRpbWVyc3BlYyAqX19yZXN0cmljdCBfX3ZhbHVlLAogICAgICAgICAgICAgICAg ICAgICAgICAgIHN0cnVjdCBpdGltZXJzcGVjICpfX3Jlc3RyaWN0IF9fb3ZhbHVlKSB0aHJvdyAo KTsKCgpleHRlcm4gaW50IHRpbWVyX2dldHRpbWUgKHRpbWVyX3QgX190aW1lcmlkLCBzdHJ1Y3Qg aXRpbWVyc3BlYyAqX192YWx1ZSkKICAgICB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHRpbWVyX2dl dG92ZXJydW4gKHRpbWVyX3QgX190aW1lcmlkKSB0aHJvdyAoKTsKIyAzNDIgIi91c3IvaW5jbHVk ZS90aW1lLmgiIDMKZXh0ZXJuIGludCBnZXRkYXRlX2VycjsKCgoKCgpleHRlcm4gc3RydWN0IHRt ICpnZXRkYXRlIChfX2NvbnN0IGNoYXIgKl9fc3RyaW5nKSB0aHJvdyAoKTsKIyAzNTcgIi91c3Iv aW5jbHVkZS90aW1lLmgiIDMKZXh0ZXJuIGludCBnZXRkYXRlX3IgKF9fY29uc3QgY2hhciAqX19y ZXN0cmljdCBfX3N0cmluZywKICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB0bSAqX19yZXN0 cmljdCBfX3Jlc2J1ZnApIHRocm93ICgpOwoKCgp9CiMgMjIgIi91c3IvaW5jbHVkZS9wdGhyZWFk LmgiIDIgMwoKCiMgMSAiL3Vzci9pbmNsdWRlL3NpZ25hbC5oIiAxIDMKIyAzMSAiL3Vzci9pbmNs dWRlL3NpZ25hbC5oIiAzCmV4dGVybiAiQyIgewoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9zaWdz ZXQuaCIgMSAzCiMgMjMgIi91c3IvaW5jbHVkZS9iaXRzL3NpZ3NldC5oIiAzCnR5cGVkZWYgaW50 IF9fc2lnX2F0b21pY190OwoKCgoKdHlwZWRlZiBzdHJ1Y3QKICB7CiAgICB1bnNpZ25lZCBsb25n IGludCBfX3ZhbFsoMTAyNCAvICg4ICogc2l6ZW9mICh1bnNpZ25lZCBsb25nIGludCkpKV07CiAg fSBfX3NpZ3NldF90OwojIDM0ICIvdXNyL2luY2x1ZGUvc2lnbmFsLmgiIDIgMwojIDQ4ICIvdXNy L2luY2x1ZGUvc2lnbmFsLmgiIDMKdHlwZWRlZiBfX3NpZ3NldF90IHNpZ3NldF90OwojIDM3MSAi L3Vzci9pbmNsdWRlL3NpZ25hbC5oIiAzCn0KIyAyNSAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIg MiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvcHRocmVhZHR5cGVzLmgiIDEgMwojIDI2ICIvdXNy L2luY2x1ZGUvcHRocmVhZC5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9pbml0c3Bpbi5o IiAxIDMKIyAyNyAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMiAzCgoKZXh0ZXJuICJDIiB7CiMg NTkgIi91c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDMKZW51bQp7CiAgUFRIUkVBRF9DUkVBVEVfSk9J TkFCTEUsCgogIFBUSFJFQURfQ1JFQVRFX0RFVEFDSEVECgp9OwoKZW51bQp7CiAgUFRIUkVBRF9J TkhFUklUX1NDSEVELAoKICBQVEhSRUFEX0VYUExJQ0lUX1NDSEVECgp9OwoKZW51bQp7CiAgUFRI UkVBRF9TQ09QRV9TWVNURU0sCgogIFBUSFJFQURfU0NPUEVfUFJPQ0VTUwoKfTsKCmVudW0Kewog IFBUSFJFQURfTVVURVhfVElNRURfTlAsCiAgUFRIUkVBRF9NVVRFWF9SRUNVUlNJVkVfTlAsCiAg UFRIUkVBRF9NVVRFWF9FUlJPUkNIRUNLX05QLAogIFBUSFJFQURfTVVURVhfQURBUFRJVkVfTlAK CiAgLAogIFBUSFJFQURfTVVURVhfTk9STUFMID0gUFRIUkVBRF9NVVRFWF9USU1FRF9OUCwKICBQ VEhSRUFEX01VVEVYX1JFQ1VSU0lWRSA9IFBUSFJFQURfTVVURVhfUkVDVVJTSVZFX05QLAogIFBU SFJFQURfTVVURVhfRVJST1JDSEVDSyA9IFBUSFJFQURfTVVURVhfRVJST1JDSEVDS19OUCwKICBQ VEhSRUFEX01VVEVYX0RFRkFVTFQgPSBQVEhSRUFEX01VVEVYX05PUk1BTAoKCgogICwgUFRIUkVB RF9NVVRFWF9GQVNUX05QID0gUFRIUkVBRF9NVVRFWF9BREFQVElWRV9OUAoKfTsKCmVudW0Kewog IFBUSFJFQURfUFJPQ0VTU19QUklWQVRFLAoKICBQVEhSRUFEX1BST0NFU1NfU0hBUkVECgp9OwoK CmVudW0KewogIFBUSFJFQURfUldMT0NLX1BSRUZFUl9SRUFERVJfTlAsCiAgUFRIUkVBRF9SV0xP Q0tfUFJFRkVSX1dSSVRFUl9OUCwKICBQVEhSRUFEX1JXTE9DS19QUkVGRVJfV1JJVEVSX05PTlJF Q1VSU0lWRV9OUCwKICBQVEhSRUFEX1JXTE9DS19ERUZBVUxUX05QID0gUFRIUkVBRF9SV0xPQ0tf UFJFRkVSX1dSSVRFUl9OUAp9OwojIDEzMSAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMwpzdHJ1 Y3QgX3B0aHJlYWRfY2xlYW51cF9idWZmZXIKewogIHZvaWQgKCpfX3JvdXRpbmUpICh2b2lkICop OwogIHZvaWQgKl9fYXJnOwogIGludCBfX2NhbmNlbHR5cGU7CiAgc3RydWN0IF9wdGhyZWFkX2Ns ZWFudXBfYnVmZmVyICpfX3ByZXY7Cn07CgoKCmVudW0KewogIFBUSFJFQURfQ0FOQ0VMX0VOQUJM RSwKCiAgUFRIUkVBRF9DQU5DRUxfRElTQUJMRQoKfTsKZW51bQp7CiAgUFRIUkVBRF9DQU5DRUxf REVGRVJSRUQsCgogIFBUSFJFQURfQ0FOQ0VMX0FTWU5DSFJPTk9VUwoKfTsKIyAxNjMgIi91c3Iv aW5jbHVkZS9wdGhyZWFkLmgiIDMKZXh0ZXJuIGludCBwdGhyZWFkX2NyZWF0ZSAocHRocmVhZF90 ICpfX3Jlc3RyaWN0IF9fdGhyZWFkLAogICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0 IHB0aHJlYWRfYXR0cl90ICpfX3Jlc3RyaWN0IF9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgdm9pZCAqKCpfX3N0YXJ0X3JvdXRpbmUpICh2b2lkICopLAogICAgICAgICAgICAgICAg ICAgICAgICAgICB2b2lkICpfX3Jlc3RyaWN0IF9fYXJnKSB0aHJvdyAoKTsKCgpleHRlcm4gcHRo cmVhZF90IHB0aHJlYWRfc2VsZiAodm9pZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFk X2VxdWFsIChwdGhyZWFkX3QgX190aHJlYWQxLCBwdGhyZWFkX3QgX190aHJlYWQyKSB0aHJvdyAo KTsKCgpleHRlcm4gdm9pZCBwdGhyZWFkX2V4aXQgKHZvaWQgKl9fcmV0dmFsKQogICAgIHRocm93 ICgpIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKCgoKCmV4dGVybiBpbnQgcHRocmVh ZF9qb2luIChwdGhyZWFkX3QgX190aCwgdm9pZCAqKl9fdGhyZWFkX3JldHVybikgdGhyb3cgKCk7 CgoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2RldGFjaCAocHRocmVhZF90IF9fdGgpIHRocm93ICgp OwoKCgoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfaW5pdCAocHRocmVhZF9hdHRyX3QgKl9f YXR0cikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfZGVzdHJveSAocHRocmVh ZF9hdHRyX3QgKl9fYXR0cikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfc2V0 ZGV0YWNoc3RhdGUgKHB0aHJlYWRfYXR0cl90ICpfX2F0dHIsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBpbnQgX19kZXRhY2hzdGF0ZSkgdGhyb3cgKCk7CgoKZXh0ZXJu IGludCBwdGhyZWFkX2F0dHJfZ2V0ZGV0YWNoc3RhdGUgKF9fY29uc3QgcHRocmVhZF9hdHRyX3Qg Kl9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqX19k ZXRhY2hzdGF0ZSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfc2V0c2NoZWRw YXJhbSAocHRocmVhZF9hdHRyX3QgKl9fcmVzdHJpY3QgX19hdHRyLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHN0cnVjdCBzY2hlZF9wYXJhbSAqX19yZXN0 cmljdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3BhcmFtKSB0aHJv dyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9nZXRzY2hlZHBhcmFtIChfX2NvbnN0IHB0 aHJlYWRfYXR0cl90ICpfX3Jlc3RyaWN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIF9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ry dWN0IHNjaGVkX3BhcmFtICpfX3Jlc3RyaWN0IF9fcGFyYW0pCiAgICAgdGhyb3cgKCk7CgoKZXh0 ZXJuIGludCBwdGhyZWFkX2F0dHJfc2V0c2NoZWRwb2xpY3kgKHB0aHJlYWRfYXR0cl90ICpfX2F0 dHIsIGludCBfX3BvbGljeSkKICAgICB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0 cl9nZXRzY2hlZHBvbGljeSAoX19jb25zdCBwdGhyZWFkX2F0dHJfdCAqX19yZXN0cmljdAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19hdHRyLCBpbnQgKl9fcmVzdHJp Y3QgX19wb2xpY3kpCiAgICAgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfc2V0 aW5oZXJpdHNjaGVkIChwdGhyZWFkX2F0dHJfdCAqX19hdHRyLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGludCBfX2luaGVyaXQpIHRocm93ICgpOwoKCmV4dGVybiBp bnQgcHRocmVhZF9hdHRyX2dldGluaGVyaXRzY2hlZCAoX19jb25zdCBwdGhyZWFkX2F0dHJfdCAq X19yZXN0cmljdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYXR0 ciwgaW50ICpfX3Jlc3RyaWN0IF9faW5oZXJpdCkKICAgICB0aHJvdyAoKTsKCgpleHRlcm4gaW50 IHB0aHJlYWRfYXR0cl9zZXRzY29wZSAocHRocmVhZF9hdHRyX3QgKl9fYXR0ciwgaW50IF9fc2Nv cGUpCiAgICAgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfZ2V0c2NvcGUgKF9f Y29uc3QgcHRocmVhZF9hdHRyX3QgKl9fcmVzdHJpY3QgX19hdHRyLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fc2NvcGUpIHRocm93ICgpOwoKCgpl eHRlcm4gaW50IHB0aHJlYWRfYXR0cl9zZXRndWFyZHNpemUgKHB0aHJlYWRfYXR0cl90ICpfX2F0 dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fZ3VhcmRz aXplKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9nZXRndWFyZHNpemUgKF9f Y29uc3QgcHRocmVhZF9hdHRyX3QgKl9fcmVzdHJpY3QKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBfX2F0dHIsIHNpemVfdCAqX19yZXN0cmljdCBfX2d1YXJkc2l6ZSkKICAg ICB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfc2V0c3RhY2thZGRyIChw dGhyZWFkX2F0dHJfdCAqX19hdHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHZvaWQgKl9fc3RhY2thZGRyKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0 cl9nZXRzdGFja2FkZHIgKF9fY29uc3QgcHRocmVhZF9hdHRyX3QgKl9fcmVzdHJpY3QKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2F0dHIsIHZvaWQgKipfX3Jlc3RyaWN0 IF9fc3RhY2thZGRyKQogICAgIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRy X3NldHN0YWNrIChwdGhyZWFkX2F0dHJfdCAqX19hdHRyLCB2b2lkICpfX3N0YWNrYWRkciwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX3N0YWNrc2l6ZSkgdGhyb3cg KCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfZ2V0c3RhY2sgKF9fY29uc3QgcHRocmVhZF9h dHRyX3QgKl9fcmVzdHJpY3QgX19hdHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgdm9pZCAqKl9fcmVzdHJpY3QgX19zdGFja2FkZHIsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBzaXplX3QgKl9fcmVzdHJpY3QgX19zdGFja3NpemUpIHRocm93ICgpOwoKCgoK CmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX3NldHN0YWNrc2l6ZSAocHRocmVhZF9hdHRyX3QgKl9f YXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19zdGFj a3NpemUpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2dldHN0YWNrc2l6ZSAo X19jb25zdCBwdGhyZWFkX2F0dHJfdCAqX19yZXN0cmljdAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIF9fYXR0ciwgc2l6ZV90ICpfX3Jlc3RyaWN0IF9fc3RhY2tzaXplKQog ICAgIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9zZXRzY2hlZHBhcmFtIChwdGhy ZWFkX3QgX190YXJnZXRfdGhyZWFkLCBpbnQgX19wb2xpY3ksCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBfX2NvbnN0IHN0cnVjdCBzY2hlZF9wYXJhbSAqX19wYXJhbSkKICAgICB0 aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfZ2V0c2NoZWRwYXJhbSAocHRocmVhZF90IF9f dGFyZ2V0X3RocmVhZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqX19y ZXN0cmljdCBfX3BvbGljeSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVj dCBzY2hlZF9wYXJhbSAqX19yZXN0cmljdCBfX3BhcmFtKQogICAgIHRocm93ICgpOwoKCgpleHRl cm4gaW50IHB0aHJlYWRfZ2V0Y29uY3VycmVuY3kgKHZvaWQpIHRocm93ICgpOwoKCmV4dGVybiBp bnQgcHRocmVhZF9zZXRjb25jdXJyZW5jeSAoaW50IF9fbGV2ZWwpIHRocm93ICgpOwoKCgoKCgoK ZXh0ZXJuIGludCBwdGhyZWFkX3lpZWxkICh2b2lkKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGlu dCBwdGhyZWFkX211dGV4X2luaXQgKHB0aHJlYWRfbXV0ZXhfdCAqX19yZXN0cmljdCBfX211dGV4 LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBwdGhyZWFkX211dGV4YXR0 cl90ICpfX3Jlc3RyaWN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX211dGV4X2F0 dHIpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9tdXRleF9kZXN0cm95IChwdGhyZWFk X211dGV4X3QgKl9fbXV0ZXgpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9tdXRleF90 cnlsb2NrIChwdGhyZWFkX211dGV4X3QgKl9fbXV0ZXgpIHRocm93ICgpOwoKCmV4dGVybiBpbnQg cHRocmVhZF9tdXRleF9sb2NrIChwdGhyZWFkX211dGV4X3QgKl9fbXV0ZXgpIHRocm93ICgpOwoK CgpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhfdGltZWRsb2NrIChwdGhyZWFkX211dGV4X3QgKl9f cmVzdHJpY3QgX19tdXRleCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19j b25zdCBzdHJ1Y3QgdGltZXNwZWMgKl9fcmVzdHJpY3QKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgX19hYnN0aW1lKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBwdGhyZWFkX211 dGV4X3VubG9jayAocHRocmVhZF9tdXRleF90ICpfX211dGV4KSB0aHJvdyAoKTsKCgoKCgoKZXh0 ZXJuIGludCBwdGhyZWFkX211dGV4YXR0cl9pbml0IChwdGhyZWFkX211dGV4YXR0cl90ICpfX2F0 dHIpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9tdXRleGF0dHJfZGVzdHJveSAocHRo cmVhZF9tdXRleGF0dHJfdCAqX19hdHRyKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRf bXV0ZXhhdHRyX2dldHBzaGFyZWQgKF9fY29uc3QgcHRocmVhZF9tdXRleGF0dHJfdCAqCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19yZXN0cmljdCBfX2F0dHIsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9f cHNoYXJlZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX211dGV4YXR0cl9zZXRwc2hh cmVkIChwdGhyZWFkX211dGV4YXR0cl90ICpfX2F0dHIsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgaW50IF9fcHNoYXJlZCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGlu dCBwdGhyZWFkX211dGV4YXR0cl9zZXR0eXBlIChwdGhyZWFkX211dGV4YXR0cl90ICpfX2F0dHIs IGludCBfX2tpbmQpCiAgICAgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX211dGV4YXR0 cl9nZXR0eXBlIChfX2NvbnN0IHB0aHJlYWRfbXV0ZXhhdHRyX3QgKl9fcmVzdHJpY3QKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2F0dHIsIGludCAqX19yZXN0cmljdCBf X2tpbmQpIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2NvbmRfaW5pdCAocHRo cmVhZF9jb25kX3QgKl9fcmVzdHJpY3QgX19jb25kLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBfX2NvbnN0IHB0aHJlYWRfY29uZGF0dHJfdCAqX19yZXN0cmljdAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBfX2NvbmRfYXR0cikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhy ZWFkX2NvbmRfZGVzdHJveSAocHRocmVhZF9jb25kX3QgKl9fY29uZCkgdGhyb3cgKCk7CgoKZXh0 ZXJuIGludCBwdGhyZWFkX2NvbmRfc2lnbmFsIChwdGhyZWFkX2NvbmRfdCAqX19jb25kKSB0aHJv dyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfY29uZF9icm9hZGNhc3QgKHB0aHJlYWRfY29uZF90 ICpfX2NvbmQpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHB0aHJlYWRfY29uZF93YWl0IChwdGhy ZWFkX2NvbmRfdCAqX19yZXN0cmljdCBfX2NvbmQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHB0aHJlYWRfbXV0ZXhfdCAqX19yZXN0cmljdCBfX211dGV4KSB0aHJvdyAoKTsKCgoKCgpl eHRlcm4gaW50IHB0aHJlYWRfY29uZF90aW1lZHdhaXQgKHB0aHJlYWRfY29uZF90ICpfX3Jlc3Ry aWN0IF9fY29uZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdGhyZWFkX211 dGV4X3QgKl9fcmVzdHJpY3QgX19tdXRleCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBfX2NvbnN0IHN0cnVjdCB0aW1lc3BlYyAqX19yZXN0cmljdAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIF9fYWJzdGltZSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IHB0 aHJlYWRfY29uZGF0dHJfaW5pdCAocHRocmVhZF9jb25kYXR0cl90ICpfX2F0dHIpIHRocm93ICgp OwoKCmV4dGVybiBpbnQgcHRocmVhZF9jb25kYXR0cl9kZXN0cm95IChwdGhyZWFkX2NvbmRhdHRy X3QgKl9fYXR0cikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2NvbmRhdHRyX2dldHBz aGFyZWQgKF9fY29uc3QgcHRocmVhZF9jb25kYXR0cl90ICoKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIF9fcmVzdHJpY3QgX19hdHRyLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fcHNoYXJlZCkgdGhyb3cgKCk7 CgoKZXh0ZXJuIGludCBwdGhyZWFkX2NvbmRhdHRyX3NldHBzaGFyZWQgKHB0aHJlYWRfY29uZGF0 dHJfdCAqX19hdHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50 IF9fcHNoYXJlZCkgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gaW50IHB0aHJlYWRfcndsb2NrX2lu aXQgKHB0aHJlYWRfcndsb2NrX3QgKl9fcmVzdHJpY3QgX19yd2xvY2ssCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgX19jb25zdCBwdGhyZWFkX3J3bG9ja2F0dHJfdCAqX19yZXN0cmlj dAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYXR0cikgdGhyb3cgKCk7CgoKZXh0 ZXJuIGludCBwdGhyZWFkX3J3bG9ja19kZXN0cm95IChwdGhyZWFkX3J3bG9ja190ICpfX3J3bG9j aykgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja19yZGxvY2sgKHB0aHJlYWRf cndsb2NrX3QgKl9fcndsb2NrKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfcndsb2Nr X3RyeXJkbG9jayAocHRocmVhZF9yd2xvY2tfdCAqX19yd2xvY2spIHRocm93ICgpOwoKCgpleHRl cm4gaW50IHB0aHJlYWRfcndsb2NrX3RpbWVkcmRsb2NrIChwdGhyZWFkX3J3bG9ja190ICpfX3Jl c3RyaWN0IF9fcndsb2NrLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf X2NvbnN0IHN0cnVjdCB0aW1lc3BlYyAqX19yZXN0cmljdAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBfX2Fic3RpbWUpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHB0aHJl YWRfcndsb2NrX3dybG9jayAocHRocmVhZF9yd2xvY2tfdCAqX19yd2xvY2spIHRocm93ICgpOwoK CmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2tfdHJ5d3Jsb2NrIChwdGhyZWFkX3J3bG9ja190ICpf X3J3bG9jaykgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2tfdGltZWR3cmxv Y2sgKHB0aHJlYWRfcndsb2NrX3QgKl9fcmVzdHJpY3QgX19yd2xvY2ssCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgc3RydWN0IHRpbWVzcGVjICpfX3Jlc3Ry aWN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYWJzdGltZSkgdGhy b3cgKCk7CgoKCmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2tfdW5sb2NrIChwdGhyZWFkX3J3bG9j a190ICpfX3J3bG9jaykgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja2F0 dHJfaW5pdCAocHRocmVhZF9yd2xvY2thdHRyX3QgKl9fYXR0cikgdGhyb3cgKCk7CgoKZXh0ZXJu IGludCBwdGhyZWFkX3J3bG9ja2F0dHJfZGVzdHJveSAocHRocmVhZF9yd2xvY2thdHRyX3QgKl9f YXR0cikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja2F0dHJfZ2V0cHNoYXJl ZCAoX19jb25zdCBwdGhyZWFkX3J3bG9ja2F0dHJfdCAqCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIF9fcmVzdHJpY3QgX19hdHRyLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19wc2hhcmVkKSB0aHJvdyAo KTsKCgpleHRlcm4gaW50IHB0aHJlYWRfcndsb2NrYXR0cl9zZXRwc2hhcmVkIChwdGhyZWFkX3J3 bG9ja2F0dHJfdCAqX19hdHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBpbnQgX19wc2hhcmVkKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfcndsb2Nr YXR0cl9nZXRraW5kX25wIChfX2NvbnN0IHB0aHJlYWRfcndsb2NrYXR0cl90ICpfX2F0dHIsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqX19wcmVmKSB0aHJv dyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfcndsb2NrYXR0cl9zZXRraW5kX25wIChwdGhyZWFk X3J3bG9ja2F0dHJfdCAqX19hdHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBpbnQgX19wcmVmKSB0aHJvdyAoKTsKIyA1MDQgIi91c3IvaW5jbHVkZS9wdGhyZWFk LmgiIDMKZXh0ZXJuIGludCBwdGhyZWFkX3NwaW5faW5pdCAocHRocmVhZF9zcGlubG9ja190ICpf X2xvY2ssIGludCBfX3BzaGFyZWQpCiAgICAgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFk X3NwaW5fZGVzdHJveSAocHRocmVhZF9zcGlubG9ja190ICpfX2xvY2spIHRocm93ICgpOwoKCmV4 dGVybiBpbnQgcHRocmVhZF9zcGluX2xvY2sgKHB0aHJlYWRfc3BpbmxvY2tfdCAqX19sb2NrKSB0 aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfc3Bpbl90cnlsb2NrIChwdGhyZWFkX3NwaW5s b2NrX3QgKl9fbG9jaykgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX3NwaW5fdW5sb2Nr IChwdGhyZWFkX3NwaW5sb2NrX3QgKl9fbG9jaykgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IHB0 aHJlYWRfYmFycmllcl9pbml0IChwdGhyZWFkX2JhcnJpZXJfdCAqX19yZXN0cmljdCBfX2JhcnJp ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgcHRocmVhZF9iYXJy aWVyYXR0cl90ICpfX3Jlc3RyaWN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9f YXR0ciwgdW5zaWduZWQgaW50IF9fY291bnQpIHRocm93ICgpOwoKZXh0ZXJuIGludCBwdGhyZWFk X2JhcnJpZXJfZGVzdHJveSAocHRocmVhZF9iYXJyaWVyX3QgKl9fYmFycmllcikgdGhyb3cgKCk7 CgpleHRlcm4gaW50IHB0aHJlYWRfYmFycmllcmF0dHJfaW5pdCAocHRocmVhZF9iYXJyaWVyYXR0 cl90ICpfX2F0dHIpIHRocm93ICgpOwoKZXh0ZXJuIGludCBwdGhyZWFkX2JhcnJpZXJhdHRyX2Rl c3Ryb3kgKHB0aHJlYWRfYmFycmllcmF0dHJfdCAqX19hdHRyKSB0aHJvdyAoKTsKCmV4dGVybiBp bnQgcHRocmVhZF9iYXJyaWVyYXR0cl9nZXRwc2hhcmVkIChfX2NvbnN0IHB0aHJlYWRfYmFycmll cmF0dHJfdCAqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Jl c3RyaWN0IF9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGludCAqX19yZXN0cmljdCBfX3BzaGFyZWQpIHRocm93ICgpOwoKZXh0ZXJuIGludCBwdGhyZWFk X2JhcnJpZXJhdHRyX3NldHBzaGFyZWQgKHB0aHJlYWRfYmFycmllcmF0dHJfdCAqX19hdHRyLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fcHNoYXJlZCkg dGhyb3cgKCk7CgpleHRlcm4gaW50IHB0aHJlYWRfYmFycmllcl93YWl0IChwdGhyZWFkX2JhcnJp ZXJfdCAqX19iYXJyaWVyKSB0aHJvdyAoKTsKIyA1NTEgIi91c3IvaW5jbHVkZS9wdGhyZWFkLmgi IDMKZXh0ZXJuIGludCBwdGhyZWFkX2tleV9jcmVhdGUgKHB0aHJlYWRfa2V5X3QgKl9fa2V5LAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAoKl9fZGVzdHJfZnVuY3Rpb24pICh2 b2lkICopKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfa2V5X2RlbGV0ZSAocHRocmVh ZF9rZXlfdCBfX2tleSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX3NldHNwZWNpZmlj IChwdGhyZWFkX2tleV90IF9fa2V5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9f Y29uc3Qgdm9pZCAqX19wb2ludGVyKSB0aHJvdyAoKTsKCgpleHRlcm4gdm9pZCAqcHRocmVhZF9n ZXRzcGVjaWZpYyAocHRocmVhZF9rZXlfdCBfX2tleSkgdGhyb3cgKCk7CiMgNTcxICIvdXNyL2lu Y2x1ZGUvcHRocmVhZC5oIiAzCmV4dGVybiBpbnQgcHRocmVhZF9vbmNlIChwdGhyZWFkX29uY2Vf dCAqX19vbmNlX2NvbnRyb2wsCiAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICgqX19pbml0 X3JvdXRpbmUpICh2b2lkKSkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9zZXRj YW5jZWxzdGF0ZSAoaW50IF9fc3RhdGUsIGludCAqX19vbGRzdGF0ZSkgdGhyb3cgKCk7CgoKCmV4 dGVybiBpbnQgcHRocmVhZF9zZXRjYW5jZWx0eXBlIChpbnQgX190eXBlLCBpbnQgKl9fb2xkdHlw ZSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2NhbmNlbCAocHRocmVhZF90IF9fdGhy ZWFkKSB0aHJvdyAoKTsKCgoKCmV4dGVybiB2b2lkIHB0aHJlYWRfdGVzdGNhbmNlbCAodm9pZCkg dGhyb3cgKCk7CiMgNjA1ICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAzCmV4dGVybiB2b2lkIF9w dGhyZWFkX2NsZWFudXBfcHVzaCAoc3RydWN0IF9wdGhyZWFkX2NsZWFudXBfYnVmZmVyICpfX2J1 ZmZlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICgqX19yb3V0aW5l KSAodm9pZCAqKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpfX2Fy ZykgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gdm9pZCBfcHRocmVhZF9jbGVhbnVwX3BvcCAoc3Ry dWN0IF9wdGhyZWFkX2NsZWFudXBfYnVmZmVyICpfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGludCBfX2V4ZWN1dGUpIHRocm93ICgpOwojIDYyNiAiL3Vzci9pbmNs dWRlL3B0aHJlYWQuaCIgMwpleHRlcm4gdm9pZCBfcHRocmVhZF9jbGVhbnVwX3B1c2hfZGVmZXIg KHN0cnVjdCBfcHRocmVhZF9jbGVhbnVwX2J1ZmZlciAqX19idWZmZXIsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAoKl9fcm91dGluZSkgKHZvaWQgKiksCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqX19hcmcpIHRocm93 ICgpOwojIDYzNyAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMwpleHRlcm4gdm9pZCBfcHRocmVh ZF9jbGVhbnVwX3BvcF9yZXN0b3JlIChzdHJ1Y3QgX3B0aHJlYWRfY2xlYW51cF9idWZmZXIgKl9f YnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19l eGVjdXRlKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IHB0aHJlYWRfZ2V0Y3B1Y2xvY2tpZCAo cHRocmVhZF90IF9fdGhyZWFkX2lkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Y2xvY2tpZF90ICpfX2Nsb2NrX2lkKSB0aHJvdyAoKTsKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2Jp dHMvc2lndGhyZWFkLmgiIDEgMwojIDMxICIvdXNyL2luY2x1ZGUvYml0cy9zaWd0aHJlYWQuaCIg MwpleHRlcm4gaW50IHB0aHJlYWRfc2lnbWFzayAoaW50IF9faG93LAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgX19jb25zdCBfX3NpZ3NldF90ICpfX3Jlc3RyaWN0IF9fbmV3bWFzaywKICAg ICAgICAgICAgICAgICAgICAgICAgICAgIF9fc2lnc2V0X3QgKl9fcmVzdHJpY3QgX19vbGRtYXNr KXRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9raWxsIChwdGhyZWFkX3QgX190aHJlYWQs IGludCBfX3NpZ25vKSB0aHJvdyAoKTsKIyA2NTEgIi91c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDIg MwojIDY2NiAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMwpleHRlcm4gaW50IHB0aHJlYWRfYXRm b3JrICh2b2lkICgqX19wcmVwYXJlKSAodm9pZCksCiAgICAgICAgICAgICAgICAgICAgICAgICAg IHZvaWQgKCpfX3BhcmVudCkgKHZvaWQpLAogICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lk ICgqX19jaGlsZCkgKHZvaWQpKSB0aHJvdyAoKTsKCgoKCmV4dGVybiB2b2lkIHB0aHJlYWRfa2ls bF9vdGhlcl90aHJlYWRzX25wICh2b2lkKSB0aHJvdyAoKTsKCn0KIyAzOCAiL3Vzci9pbmNsdWRl L2MrKy8zLjIuMS9pMzg2LXBjLWxpbnV4LWdudS9iaXRzL2d0aHItZGVmYXVsdC5oIiAyIDMKCnR5 cGVkZWYgcHRocmVhZF9rZXlfdCBfX2d0aHJlYWRfa2V5X3Q7CnR5cGVkZWYgcHRocmVhZF9vbmNl X3QgX19ndGhyZWFkX29uY2VfdDsKdHlwZWRlZiBwdGhyZWFkX211dGV4X3QgX19ndGhyZWFkX211 dGV4X3Q7CgoKCgoKCiNwcmFnbWEgd2VhayBwdGhyZWFkX29uY2UKI3ByYWdtYSB3ZWFrIHB0aHJl YWRfa2V5X2NyZWF0ZQojcHJhZ21hIHdlYWsgcHRocmVhZF9rZXlfZGVsZXRlCiNwcmFnbWEgd2Vh ayBwdGhyZWFkX2dldHNwZWNpZmljCiNwcmFnbWEgd2VhayBwdGhyZWFkX3NldHNwZWNpZmljCiNw cmFnbWEgd2VhayBwdGhyZWFkX2NyZWF0ZQoKI3ByYWdtYSB3ZWFrIHB0aHJlYWRfbXV0ZXhfbG9j ayAKI3ByYWdtYSB3ZWFrIHB0aHJlYWRfbXV0ZXhfdHJ5bG9jayAKI3ByYWdtYSB3ZWFrIHB0aHJl YWRfbXV0ZXhfdW5sb2NrIAojIDgwICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL2kzODYtcGMtbGlu dXgtZ251L2JpdHMvZ3Roci1kZWZhdWx0LmgiIDMKc3RhdGljIGlubGluZSBpbnQKX19ndGhyZWFk X2FjdGl2ZV9wICh2b2lkKQp7CiAgc3RhdGljIHZvaWQgKmNvbnN0IF9fZ3RocmVhZF9hY3RpdmVf cHRyID0gKHZvaWQgKikgJnB0aHJlYWRfY3JlYXRlOwogIHJldHVybiBfX2d0aHJlYWRfYWN0aXZl X3B0ciAhPSAwOwp9CiMgNDM3ICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL2kzODYtcGMtbGludXgt Z251L2JpdHMvZ3Roci1kZWZhdWx0LmgiIDMKc3RhdGljIGlubGluZSBpbnQKX19ndGhyZWFkX29u Y2UgKF9fZ3RocmVhZF9vbmNlX3QgKm9uY2UsIHZvaWQgKCpmdW5jKSAodm9pZCkpCnsKICBpZiAo X19ndGhyZWFkX2FjdGl2ZV9wICgpKQogICAgcmV0dXJuIHB0aHJlYWRfb25jZSAob25jZSwgZnVu Yyk7CiAgZWxzZQogICAgcmV0dXJuIC0xOwp9CgpzdGF0aWMgaW5saW5lIGludApfX2d0aHJlYWRf a2V5X2NyZWF0ZSAoX19ndGhyZWFkX2tleV90ICprZXksIHZvaWQgKCpkdG9yKSAodm9pZCAqKSkK ewogIHJldHVybiBwdGhyZWFkX2tleV9jcmVhdGUgKGtleSwgZHRvcik7Cn0KCnN0YXRpYyBpbmxp bmUgaW50Cl9fZ3RocmVhZF9rZXlfZHRvciAoX19ndGhyZWFkX2tleV90IGtleSwgdm9pZCAqcHRy KQp7CgogIGlmIChwdHIpCiAgICByZXR1cm4gcHRocmVhZF9zZXRzcGVjaWZpYyAoa2V5LCAwKTsK ICBlbHNlCiAgICByZXR1cm4gMDsKfQoKc3RhdGljIGlubGluZSBpbnQKX19ndGhyZWFkX2tleV9k ZWxldGUgKF9fZ3RocmVhZF9rZXlfdCBrZXkpCnsKICByZXR1cm4gcHRocmVhZF9rZXlfZGVsZXRl IChrZXkpOwp9CgpzdGF0aWMgaW5saW5lIHZvaWQgKgpfX2d0aHJlYWRfZ2V0c3BlY2lmaWMgKF9f Z3RocmVhZF9rZXlfdCBrZXkpCnsKICByZXR1cm4gcHRocmVhZF9nZXRzcGVjaWZpYyAoa2V5KTsK fQoKc3RhdGljIGlubGluZSBpbnQKX19ndGhyZWFkX3NldHNwZWNpZmljIChfX2d0aHJlYWRfa2V5 X3Qga2V5LCBjb25zdCB2b2lkICpwdHIpCnsKICByZXR1cm4gcHRocmVhZF9zZXRzcGVjaWZpYyAo a2V5LCBwdHIpOwp9CgpzdGF0aWMgaW5saW5lIGludApfX2d0aHJlYWRfbXV0ZXhfbG9jayAoX19n dGhyZWFkX211dGV4X3QgKm11dGV4KQp7CiAgaWYgKF9fZ3RocmVhZF9hY3RpdmVfcCAoKSkKICAg IHJldHVybiBwdGhyZWFkX211dGV4X2xvY2sgKG11dGV4KTsKICBlbHNlCiAgICByZXR1cm4gMDsK fQoKc3RhdGljIGlubGluZSBpbnQKX19ndGhyZWFkX211dGV4X3RyeWxvY2sgKF9fZ3RocmVhZF9t dXRleF90ICptdXRleCkKewogIGlmIChfX2d0aHJlYWRfYWN0aXZlX3AgKCkpCiAgICByZXR1cm4g cHRocmVhZF9tdXRleF90cnlsb2NrIChtdXRleCk7CiAgZWxzZQogICAgcmV0dXJuIDA7Cn0KCnN0 YXRpYyBpbmxpbmUgaW50Cl9fZ3RocmVhZF9tdXRleF91bmxvY2sgKF9fZ3RocmVhZF9tdXRleF90 ICptdXRleCkKewogIGlmIChfX2d0aHJlYWRfYWN0aXZlX3AgKCkpCiAgICByZXR1cm4gcHRocmVh ZF9tdXRleF91bmxvY2sgKG11dGV4KTsKICBlbHNlCiAgICByZXR1cm4gMDsKfQojIDk5ICIvdXNy L2luY2x1ZGUvYysrLzMuMi4xL2kzODYtcGMtbGludXgtZ251L2JpdHMvZ3Roci5oIiAyIDMKIyAz OCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9pMzg2LXBjLWxpbnV4LWdudS9iaXRzL2MrK2lvLmgi IDIgMwoKbmFtZXNwYWNlIHN0ZAp7CgogIHR5cGVkZWYgbG9uZyBzdHJlYW1vZmY7CiAgdHlwZWRl ZiBwdHJkaWZmX3Qgc3RyZWFtc2l6ZTsKCiAgdHlwZWRlZiBwdHJkaWZmX3Qgd3N0cmVhbXNpemU7 CgogIHR5cGVkZWYgZnBvc190IF9fY19zdHJlYW1wb3M7CgogIHR5cGVkZWYgX19ndGhyZWFkX211 dGV4X3QgX19jX2xvY2s7CgoKICB0eXBlZGVmIEZJTEUgX19jX2ZpbGU7CgoKICBzdHJ1Y3QgX19p b3NfZmxhZ3MKICB7CiAgICB0eXBlZGVmIHNob3J0IF9faW50X3R5cGU7CgogICAgc3RhdGljIGNv bnN0IF9faW50X3R5cGUgX1NfYm9vbGFscGhhID0gMHgwMDAxOwogICAgc3RhdGljIGNvbnN0IF9f aW50X3R5cGUgX1NfZGVjID0gMHgwMDAyOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1Nf Zml4ZWQgPSAweDAwMDQ7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19oZXggPSAweDAw MDg7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19pbnRlcm5hbCA9IDB4MDAxMDsKICAg IHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2xlZnQgPSAweDAwMjA7CiAgICBzdGF0aWMgY29u c3QgX19pbnRfdHlwZSBfU19vY3QgPSAweDAwNDA7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlw ZSBfU19yaWdodCA9IDB4MDA4MDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX3NjaWVu dGlmaWMgPSAweDAxMDA7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19zaG93YmFzZSA9 IDB4MDIwMDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX3Nob3dwb2ludCA9IDB4MDQw MDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX3Nob3dwb3MgPSAweDA4MDA7CiAgICBz dGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19za2lwd3MgPSAweDEwMDA7CiAgICBzdGF0aWMgY29u c3QgX19pbnRfdHlwZSBfU191bml0YnVmID0gMHgyMDAwOwogICAgc3RhdGljIGNvbnN0IF9faW50 X3R5cGUgX1NfdXBwZXJjYXNlID0gMHg0MDAwOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUg X1NfYWRqdXN0ZmllbGQgPSAweDAwMjAgfCAweDAwODAgfCAweDAwMTA7CiAgICBzdGF0aWMgY29u c3QgX19pbnRfdHlwZSBfU19iYXNlZmllbGQgPSAweDAwMDIgfCAweDAwNDAgfCAweDAwMDg7CiAg ICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19mbG9hdGZpZWxkID0gMHgwMTAwIHwgMHgwMDA0 OwoKCiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19iYWRiaXQgPSAweDAxOwogICAgc3Rh dGljIGNvbnN0IF9faW50X3R5cGUgX1NfZW9mYml0ID0gMHgwMjsKICAgIHN0YXRpYyBjb25zdCBf X2ludF90eXBlIF9TX2ZhaWxiaXQgPSAweDA0OwoKCiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlw ZSBfU19hcHAgPSAweDAxOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfYXRlID0gMHgw MjsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2JpbiA9IDB4MDQ7CiAgICBzdGF0aWMg Y29uc3QgX19pbnRfdHlwZSBfU19pbiA9IDB4MDg7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlw ZSBfU19vdXQgPSAweDEwOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfdHJ1bmMgPSAw eDIwOwogIH07Cn0KIyA0NSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9iaXRzL2Zwb3MuaCIgMiAz CiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9jd2NoYXIiIDEgMwojIDQ4ICIvdXNyL2luY2x1 ZGUvYysrLzMuMi4xL2N3Y2hhciIgMwoKCgojIDEgIi91c3IvaW5jbHVkZS9jKysvMy4yLjEvY3Rp bWUiIDEgMwojIDQ4ICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL2N0aW1lIiAzCiMgNjQgIi91c3Iv aW5jbHVkZS9jKysvMy4yLjEvY3RpbWUiIDMKbmFtZXNwYWNlIHN0ZAp7CiAgdXNpbmcgOjpjbG9j a190OwogIHVzaW5nIDo6dGltZV90OwogIHVzaW5nIDo6dG07CgogIHVzaW5nIDo6Y2xvY2s7CiAg dXNpbmcgOjpkaWZmdGltZTsKICB1c2luZyA6Om1rdGltZTsKICB1c2luZyA6OnRpbWU7CiAgdXNp bmcgOjphc2N0aW1lOwogIHVzaW5nIDo6Y3RpbWU7CiAgdXNpbmcgOjpnbXRpbWU7CiAgdXNpbmcg Ojpsb2NhbHRpbWU7CiAgdXNpbmcgOjpzdHJmdGltZTsKfQojIDUyICIvdXNyL2luY2x1ZGUvYysr LzMuMi4xL2N3Y2hhciIgMiAzCgoKIyAxICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMSAzCiMgNDAg Ii91c3IvaW5jbHVkZS93Y2hhci5oIiAzCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LXBjLWxp bnV4LWdudS8zLjIuMS9pbmNsdWRlL3N0ZGFyZy5oIiAxIDMKIyA0MSAiL3Vzci9pbmNsdWRlL3dj aGFyLmgiIDIgMwoKCgoKCgoKIyAxICIvdXNyL2xpYi9nY2MtbGliL2kzODYtcGMtbGludXgtZ251 LzMuMi4xL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDQ5ICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIg MiAzCiMgODUgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAzCnR5cGVkZWYgX19tYnN0YXRlX3QgbWJz dGF0ZV90OwojIDEwNSAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDMKc3RydWN0IHRtOwoKCmV4dGVy biAiQyIgewoKCmV4dGVybiB3Y2hhcl90ICp3Y3NjcHkgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19k ZXN0LAogICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3Qg X19zcmMpIHRocm93ICgpOwoKZXh0ZXJuIHdjaGFyX3QgKndjc25jcHkgKHdjaGFyX3QgKl9fcmVz dHJpY3QgX19kZXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90ICpf X3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKQogICAgIHRocm93ICgpOwoKCmV4dGVybiB3Y2hh cl90ICp3Y3NjYXQgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19kZXN0LAogICAgICAgICAgICAgICAg ICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zcmMpIHRocm93ICgpOwoKZXh0 ZXJuIHdjaGFyX3QgKndjc25jYXQgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19kZXN0LAogICAgICAg ICAgICAgICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXpl X3QgX19uKQogICAgIHRocm93ICgpOwoKCmV4dGVybiBpbnQgd2NzY21wIChfX2NvbnN0IHdjaGFy X3QgKl9fczEsIF9fY29uc3Qgd2NoYXJfdCAqX19zMikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0 ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBpbnQgd2NzbmNtcCAoX19jb25zdCB3Y2hhcl90ICpf X3MxLCBfX2NvbnN0IHdjaGFyX3QgKl9fczIsIHNpemVfdCBfX24pCiAgICAgdGhyb3cgKCkgX19h dHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCmV4dGVybiBpbnQgd2NzY2FzZWNtcCAoX19jb25z dCB3Y2hhcl90ICpfX3MxLCBfX2NvbnN0IHdjaGFyX3QgKl9fczIpIHRocm93ICgpOwoKCmV4dGVy biBpbnQgd2NzbmNhc2VjbXAgKF9fY29uc3Qgd2NoYXJfdCAqX19zMSwgX19jb25zdCB3Y2hhcl90 ICpfX3MyLAogICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgoK IyAxICIvdXNyL2luY2x1ZGUveGxvY2FsZS5oIiAxIDMKIyAyOCAiL3Vzci9pbmNsdWRlL3hsb2Nh bGUuaCIgMwp0eXBlZGVmIHN0cnVjdCBfX2xvY2FsZV9zdHJ1Y3QKewoKICBzdHJ1Y3QgbG9jYWxl X2RhdGEgKl9fbG9jYWxlc1sxM107CgoKICBjb25zdCB1bnNpZ25lZCBzaG9ydCBpbnQgKl9fY3R5 cGVfYjsKICBjb25zdCBpbnQgKl9fY3R5cGVfdG9sb3dlcjsKICBjb25zdCBpbnQgKl9fY3R5cGVf dG91cHBlcjsKfSAqX19sb2NhbGVfdDsKIyAxNDQgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAyIDMK CmV4dGVybiBpbnQgX193Y3NjYXNlY21wX2wgKF9fY29uc3Qgd2NoYXJfdCAqX19zMSwgX19jb25z dCB3Y2hhcl90ICpfX3MyLAogICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xvY2FsZV90IF9f bG9jKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgX193Y3NuY2FzZWNtcF9sIChfX2NvbnN0IHdjaGFy X3QgKl9fczEsIF9fY29uc3Qgd2NoYXJfdCAqX19zMiwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHNpemVfdCBfX24sIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGlu dCB3Y3Njb2xsIChfX2NvbnN0IHdjaGFyX3QgKl9fczEsIF9fY29uc3Qgd2NoYXJfdCAqX19zMikg dGhyb3cgKCk7CgoKCmV4dGVybiBzaXplX3Qgd2NzeGZybSAod2NoYXJfdCAqX19yZXN0cmljdCBf X3MxLAogICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBf X3MyLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBpbnQgX193Y3Njb2xsX2wg KF9fY29uc3Qgd2NoYXJfdCAqX19zMSwgX19jb25zdCB3Y2hhcl90ICpfX3MyLAogICAgICAgICAg ICAgICAgICAgICAgICBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHNpemVf dCBfX3djc3hmcm1fbCAod2NoYXJfdCAqX19zMSwgX19jb25zdCB3Y2hhcl90ICpfX3MyLAogICAg ICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19uLCBfX2xvY2FsZV90IF9fbG9jKSB0aHJv dyAoKTsKCgpleHRlcm4gd2NoYXJfdCAqd2NzZHVwIChfX2NvbnN0IHdjaGFyX3QgKl9fcykgdGhy b3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKCgoKZXh0ZXJuIHdjaGFyX3QgKndj c2NociAoX19jb25zdCB3Y2hhcl90ICpfX3djcywgd2NoYXJfdCBfX3djKQogICAgIHRocm93ICgp IF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIHdjaGFyX3QgKndjc3JjaHIgKF9f Y29uc3Qgd2NoYXJfdCAqX193Y3MsIHdjaGFyX3QgX193YykKICAgICB0aHJvdyAoKSBfX2F0dHJp YnV0ZV9fICgoX19wdXJlX18pKTsKCgoKCmV4dGVybiB3Y2hhcl90ICp3Y3NjaHJudWwgKF9fY29u c3Qgd2NoYXJfdCAqX19zLCB3Y2hhcl90IF9fd2MpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVf XyAoKF9fcHVyZV9fKSk7CgoKCgpleHRlcm4gc2l6ZV90IHdjc2NzcG4gKF9fY29uc3Qgd2NoYXJf dCAqX193Y3MsIF9fY29uc3Qgd2NoYXJfdCAqX19yZWplY3QpCiAgICAgdGhyb3cgKCkgX19hdHRy aWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIHNpemVfdCB3Y3NzcG4gKF9fY29uc3Qgd2No YXJfdCAqX193Y3MsIF9fY29uc3Qgd2NoYXJfdCAqX19hY2NlcHQpCiAgICAgdGhyb3cgKCkgX19h dHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gd2NoYXJfdCAqd2NzcGJyayAoX19jb25z dCB3Y2hhcl90ICpfX3djcywgX19jb25zdCB3Y2hhcl90ICpfX2FjY2VwdCkKICAgICB0aHJvdyAo KSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiB3Y2hhcl90ICp3Y3NzdHIgKF9f Y29uc3Qgd2NoYXJfdCAqX19oYXlzdGFjaywgX19jb25zdCB3Y2hhcl90ICpfX25lZWRsZSkKICAg ICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKZXh0ZXJuIHdjaGFyX3Qg Kndjc3djcyAoX19jb25zdCB3Y2hhcl90ICpfX2hheXN0YWNrLCBfX2NvbnN0IHdjaGFyX3QgKl9f bmVlZGxlKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgpleHRl cm4gd2NoYXJfdCAqd2NzdG9rICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAg ICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZGVsaW0sCiAgICAgICAg ICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fcHRyKSB0aHJvdyAoKTsKCgpl eHRlcm4gc2l6ZV90IHdjc2xlbiAoX19jb25zdCB3Y2hhcl90ICpfX3MpIHRocm93ICgpIF9fYXR0 cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgpleHRlcm4gc2l6ZV90IHdjc25sZW4gKF9fY29uc3Qg d2NoYXJfdCAqX19zLCBzaXplX3QgX19tYXhsZW4pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVf XyAoKF9fcHVyZV9fKSk7CgoKCgpleHRlcm4gd2NoYXJfdCAqd21lbWNociAoX19jb25zdCB3Y2hh cl90ICpfX3MsIHdjaGFyX3QgX19jLCBzaXplX3QgX19uKQogICAgIHRocm93ICgpIF9fYXR0cmli dXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVybiBpbnQgd21lbWNtcCAoX19jb25zdCB3Y2hhcl90 ICpfX3Jlc3RyaWN0IF9fczEsCiAgICAgICAgICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90ICpf X3Jlc3RyaWN0IF9fczIsIHNpemVfdCBfX24pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAo KF9fcHVyZV9fKSk7CgoKZXh0ZXJuIHdjaGFyX3QgKndtZW1jcHkgKHdjaGFyX3QgKl9fcmVzdHJp Y3QgX19zMSwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0 cmljdCBfX3MyLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHdjaGFyX3QgKndtZW1t b3ZlICh3Y2hhcl90ICpfX3MxLCBfX2NvbnN0IHdjaGFyX3QgKl9fczIsIHNpemVfdCBfX24pCiAg ICAgdGhyb3cgKCk7CgoKZXh0ZXJuIHdjaGFyX3QgKndtZW1zZXQgKHdjaGFyX3QgKl9fcywgd2No YXJfdCBfX2MsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCgoKZXh0ZXJuIHdjaGFyX3QgKndtZW1w Y3B5ICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fczEsCiAgICAgICAgICAgICAgICAgICAgICAgICAg X19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fczIsIHNpemVfdCBfX24pCiAgICAgdGhyb3cg KCk7CgoKCgoKZXh0ZXJuIHdpbnRfdCBidG93YyAoaW50IF9fYykgdGhyb3cgKCk7CgoKCmV4dGVy biBpbnQgd2N0b2IgKHdpbnRfdCBfX2MpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IG1ic2luaXQg KF9fY29uc3QgbWJzdGF0ZV90ICpfX3BzKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHNpemVfdCBtYnJ0 b3djICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fcHdjLAogICAgICAgICAgICAgICAgICAgICAgIF9f Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX3MsIHNpemVfdCBfX24sCiAgICAgICAgICAgICAgICAg ICAgICAgbWJzdGF0ZV90ICpfX3ApIHRocm93ICgpOwoKCmV4dGVybiBzaXplX3Qgd2NydG9tYiAo Y2hhciAqX19yZXN0cmljdCBfX3MsIHdjaGFyX3QgX193YywKICAgICAgICAgICAgICAgICAgICAg ICBtYnN0YXRlX3QgKl9fcmVzdHJpY3QgX19wcykgdGhyb3cgKCk7CgoKZXh0ZXJuIHNpemVfdCBf X21icmxlbiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbiwKICAgICAg ICAgICAgICAgICAgICAgICAgbWJzdGF0ZV90ICpfX3Jlc3RyaWN0IF9fcHMpIHRocm93ICgpOwpl eHRlcm4gc2l6ZV90IG1icmxlbiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90 IF9fbiwKICAgICAgICAgICAgICAgICAgICAgIG1ic3RhdGVfdCAqX19yZXN0cmljdCBfX3BzKSB0 aHJvdyAoKTsKCgoKCmV4dGVybiBfX2lubGluZSBzaXplX3QgbWJybGVuIChfX2NvbnN0IGNoYXIg Kl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgbWJzdGF0ZV90ICpfX3Jlc3RyaWN0IF9fcHMpIHRocm93ICgpCnsgcmV0dXJuIChfX3BzICE9 IF9fbnVsbAogICAgICAgICAgPyBtYnJ0b3djIChfX251bGwsIF9fcywgX19uLCBfX3BzKSA6IF9f bWJybGVuIChfX3MsIF9fbiwgX19udWxsKSk7IH0KCgoKCmV4dGVybiBzaXplX3QgbWJzcnRvd2Nz ICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZHN0LAogICAgICAgICAgICAgICAgICAgICAgICAgX19j b25zdCBjaGFyICoqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbGVuLAogICAgICAgICAgICAg ICAgICAgICAgICAgbWJzdGF0ZV90ICpfX3Jlc3RyaWN0IF9fcHMpIHRocm93ICgpOwoKCgpleHRl cm4gc2l6ZV90IHdjc3J0b21icyAoY2hhciAqX19yZXN0cmljdCBfX2RzdCwKICAgICAgICAgICAg ICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBf X2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgIG1ic3RhdGVfdCAqX19yZXN0cmljdCBfX3Bz KSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gc2l6ZV90IG1ic25ydG93Y3MgKHdjaGFyX3QgKl9fcmVz dHJpY3QgX19kc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICoqX19y ZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbm1jLAogICAgICAgICAgICAgICAgICAgICAgICAgIHNp emVfdCBfX2xlbiwgbWJzdGF0ZV90ICpfX3Jlc3RyaWN0IF9fcHMpIHRocm93ICgpOwoKCgpleHRl cm4gc2l6ZV90IHdjc25ydG9tYnMgKGNoYXIgKl9fcmVzdHJpY3QgX19kc3QsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90ICoqX19yZXN0cmljdCBfX3NyYywKICAgICAg ICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19ud2MsIHNpemVfdCBfX2xlbiwKICAgICAgICAg ICAgICAgICAgICAgICAgICBtYnN0YXRlX3QgKl9fcmVzdHJpY3QgX19wcykgdGhyb3cgKCk7CgoK CgoKCmV4dGVybiBpbnQgd2N3aWR0aCAod2ludF90IF9fYykgdGhyb3cgKCk7CgoKCmV4dGVybiBp bnQgd2Nzd2lkdGggKF9fY29uc3Qgd2NoYXJfdCAqX19zLCBzaXplX3QgX19uKSB0aHJvdyAoKTsK CgoKCgpleHRlcm4gZG91YmxlIHdjc3RvZCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9f bnB0ciwKICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRy KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGZsb2F0IHdjc3RvZiAoX19jb25zdCB3Y2hhcl90ICpfX3Jl c3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3Qg X19lbmRwdHIpIHRocm93ICgpOwpleHRlcm4gbG9uZyBkb3VibGUgd2NzdG9sZCAoX19jb25zdCB3 Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdj aGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gbG9uZyBp bnQgd2NzdG9sIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAg ICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkg dGhyb3cgKCk7CgoKCmV4dGVybiB1bnNpZ25lZCBsb25nIGludCB3Y3N0b3VsIChfX2NvbnN0IHdj aGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpCiAgICAgdGhyb3cg KCk7CgoKCgpfX2V4dGVuc2lvbl9fCmV4dGVybiBsb25nIGxvbmcgaW50IHdjc3RvcSAoX19jb25z dCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkKICAgICB0aHJvdyAo KTsKCgoKX19leHRlbnNpb25fXwpleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGludCB3Y3N0b3Vx IChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYmFzZSkgdGhyb3cgKCk7CgoK CgoKX19leHRlbnNpb25fXwpleHRlcm4gbG9uZyBsb25nIGludCB3Y3N0b2xsIChfX2NvbnN0IHdj aGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3 Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkKICAgICB0aHJvdyAoKTsK CgoKX19leHRlbnNpb25fXwpleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGludCB3Y3N0b3VsbCAo X19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYmFzZSkgdGhyb3cgKCk7CiMg NDExICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMwpleHRlcm4gbG9uZyBpbnQgX193Y3N0b2xfbCAo X19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7CgpleHRlcm4g dW5zaWduZWQgbG9uZyBpbnQgX193Y3N0b3VsX2wgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmlj dCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAq Kl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgaW50IF9fYmFzZSwgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7CgpfX2V4dGVuc2lvbl9f CmV4dGVybiBsb25nIGxvbmcgaW50IF9fd2NzdG9sbF9sIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVz dHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAq Kl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp bnQgX19iYXNlLCBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKTsKCl9fZXh0ZW5zaW9uX18KZXh0 ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgX193Y3N0b3VsbF9sIChfX2NvbnN0IHdjaGFyX3Qg Kl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2Jhc2UsIF9fbG9jYWxlX3QgX19sb2MpCiAg ICAgdGhyb3cgKCk7CgpleHRlcm4gZG91YmxlIF9fd2NzdG9kX2wgKF9fY29uc3Qgd2NoYXJfdCAq X19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9f cmVzdHJpY3QgX19lbmRwdHIsIF9fbG9jYWxlX3QgX19sb2MpCiAgICAgdGhyb3cgKCk7CgpleHRl cm4gZmxvYXQgX193Y3N0b2ZfbCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwK ICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBf X2xvY2FsZV90IF9fbG9jKQogICAgIHRocm93ICgpOwoKZXh0ZXJuIGxvbmcgZG91YmxlIF9fd2Nz dG9sZF9sIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoKCgoK CmV4dGVybiBkb3VibGUgX193Y3N0b2RfaW50ZXJuYWwgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0 cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipf X3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19ncm91cCkKICAgICB0aHJvdyAoKTsKZXh0ZXJuIGZs b2F0IF9fd2NzdG9mX2ludGVybmFsIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRy LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9f ZW5kcHRyLCBpbnQgX19ncm91cCkKICAgICB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcgZG91YmxlIF9f d2NzdG9sZF9pbnRlcm5hbCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3Qg X19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2dy b3VwKSB0aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBpbnQgX193Y3N0b2xfaW50ZXJuYWwgKF9fY29u c3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgaW50IF9fYmFzZSwgaW50IF9fZ3JvdXApIHRocm93ICgpOwoKCgpl eHRlcm4gdW5zaWduZWQgbG9uZyBpbnQgX193Y3N0b3VsX2ludGVybmFsIChfX2NvbnN0IHdjaGFy X3QgKl9fcmVzdHJpY3QgX19ucHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNlLCBpbnQgX19ncm91cCkgdGhy b3cgKCk7CgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIGxvbmcgbG9uZyBpbnQgX193Y3N0b2xsX2lu dGVybmFsIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRy LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2Jhc2UsIGlu dCBfX2dyb3VwKSB0aHJvdyAoKTsKCgoKX19leHRlbnNpb25fXwpleHRlcm4gdW5zaWduZWQgbG9u ZyBsb25nIGludCBfX3djc3RvdWxsX2ludGVybmFsIChfX2NvbnN0IHdjaGFyX3QgKgogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Jlc3RyaWN0IF9f bnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg d2NoYXJfdCAqKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNlLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19ncm91cCkgdGhyb3cgKCk7CgoKCgoKCgpl eHRlcm4gX19pbmxpbmUgZG91YmxlIHdjc3RvZCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0 IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3Ry aWN0IF9fZW5kcHRyKSB0aHJvdyAoKQp7IHJldHVybiBfX3djc3RvZF9pbnRlcm5hbCAoX19ucHRy LCBfX2VuZHB0ciwgMCk7IH0KZXh0ZXJuIF9faW5saW5lIGxvbmcgaW50IHdjc3RvbCAoX19jb25z dCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGludCBfX2Jhc2UpIHRocm93ICgpCnsgcmV0dXJuIF9fd2NzdG9sX2ludGVy bmFsIChfX25wdHIsIF9fZW5kcHRyLCBfX2Jhc2UsIDApOyB9CmV4dGVybiBfX2lubGluZSB1bnNp Z25lZCBsb25nIGludCB3Y3N0b3VsIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRy LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9f cmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBpbnQgX19iYXNlKSB0aHJvdyAoKQp7IHJldHVybiBfX3djc3RvdWxfaW50ZXJuYWwgKF9f bnB0ciwgX19lbmRwdHIsIF9fYmFzZSwgMCk7IH0KCgpleHRlcm4gX19pbmxpbmUgZmxvYXQgd2Nz dG9mIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0cikgdGhyb3cgKCkKeyBy ZXR1cm4gX193Y3N0b2ZfaW50ZXJuYWwgKF9fbnB0ciwgX19lbmRwdHIsIDApOyB9CmV4dGVybiBf X2lubGluZSBsb25nIGRvdWJsZSB3Y3N0b2xkIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3Qg X19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9f cmVzdHJpY3QgX19lbmRwdHIpIHRocm93ICgpCnsgcmV0dXJuIF9fd2NzdG9sZF9pbnRlcm5hbCAo X19ucHRyLCBfX2VuZHB0ciwgMCk7IH0KCgpfX2V4dGVuc2lvbl9fCmV4dGVybiBfX2lubGluZSBs b25nIGxvbmcgaW50IHdjc3RvcSAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmlj dCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19i YXNlKSB0aHJvdyAoKQp7IHJldHVybiBfX3djc3RvbGxfaW50ZXJuYWwgKF9fbnB0ciwgX19lbmRw dHIsIF9fYmFzZSwgMCk7IH0KX19leHRlbnNpb25fXwpleHRlcm4gX19pbmxpbmUgdW5zaWduZWQg bG9uZyBsb25nIGludCB3Y3N0b3VxIChfX2NvbnN0IHdjaGFyX3QgKgogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVz dHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGludCBfX2Jhc2UpIHRocm93ICgpCnsgcmV0dXJuIF9fd2NzdG91bGxfaW50ZXJuYWwg KF9fbnB0ciwgX19lbmRwdHIsIF9fYmFzZSwgMCk7IH0KCgoKCgoKCmV4dGVybiB3Y2hhcl90ICp3 Y3BjcHkgKHdjaGFyX3QgKl9fZGVzdCwgX19jb25zdCB3Y2hhcl90ICpfX3NyYykgdGhyb3cgKCk7 CgoKCmV4dGVybiB3Y2hhcl90ICp3Y3BuY3B5ICh3Y2hhcl90ICpfX2Rlc3QsIF9fY29uc3Qgd2No YXJfdCAqX19zcmMsIHNpemVfdCBfX24pCiAgICAgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gaW50 IGZ3aWRlIChfX0ZJTEUgKl9fZnAsIGludCBfX21vZGUpIHRocm93ICgpOwoKCgpleHRlcm4gaW50 IGZ3cHJpbnRmIChfX0ZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sCiAgICAgICAgICAgICAgICAg ICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKQogICAgIHRocm93 ICgpIDsKCmV4dGVybiBpbnQgd3ByaW50ZiAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9f Zm9ybWF0LCAuLi4pCiAgICAgdGhyb3cgKCkgOwoKZXh0ZXJuIGludCBzd3ByaW50ZiAod2NoYXJf dCAqX19yZXN0cmljdCBfX3MsIHNpemVfdCBfX24sCiAgICAgICAgICAgICAgICAgICAgIF9fY29u c3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKQogICAgIHRocm93ICgpIDsKCgpl eHRlcm4gaW50IHZmd3ByaW50ZiAoX19GSUxFICpfX3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAg ICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX2Zvcm1hdCwKICAgICAgICAg ICAgICAgICAgICAgIF9fZ251Y192YV9saXN0IF9fYXJnKQogICAgIHRocm93ICgpIDsKCmV4dGVy biBpbnQgdndwcmludGYgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX2Zvcm1hdCwKICAg ICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3QgX19hcmcpCiAgICAgdGhyb3cgKCkgOwoK CmV4dGVybiBpbnQgdnN3cHJpbnRmICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9f biwKICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX2Zv cm1hdCwKICAgICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0IF9fYXJnKQogICAgIHRo cm93ICgpIDsKCgoKZXh0ZXJuIGludCBmd3NjYW5mIChfX0ZJTEUgKl9fcmVzdHJpY3QgX19zdHJl YW0sCiAgICAgICAgICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZm9y bWF0LCAuLi4pCiAgICAgdGhyb3cgKCkgOwoKZXh0ZXJuIGludCB3c2NhbmYgKF9fY29uc3Qgd2No YXJfdCAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKQogICAgIHRocm93ICgpIDsKCmV4dGVybiBp bnQgc3dzY2FuZiAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAg ICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikKICAgICB0 aHJvdyAoKSA7CgoKCgpleHRlcm4gaW50IHZmd3NjYW5mIChfX0ZJTEUgKl9fcmVzdHJpY3QgX19z LAogICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19mb3Jt YXQsCiAgICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0IF9fYXJnKQogICAgIHRocm93 ICgpIDsKCmV4dGVybiBpbnQgdndzY2FuZiAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9f Zm9ybWF0LAogICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0IF9fYXJnKQogICAgIHRo cm93ICgpIDsKCmV4dGVybiBpbnQgdnN3c2NhbmYgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmlj dCBfX3MsCiAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBf X2Zvcm1hdCwKICAgICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3QgX19hcmcpCiAgICAg dGhyb3cgKCkgOwoKCgoKZXh0ZXJuIHdpbnRfdCBmZ2V0d2MgKF9fRklMRSAqX19zdHJlYW0pOwpl eHRlcm4gd2ludF90IGdldHdjIChfX0ZJTEUgKl9fc3RyZWFtKTsKCgpleHRlcm4gd2ludF90IGdl dHdjaGFyICh2b2lkKTsKCgoKZXh0ZXJuIHdpbnRfdCBmcHV0d2MgKHdjaGFyX3QgX193YywgX19G SUxFICpfX3N0cmVhbSk7CmV4dGVybiB3aW50X3QgcHV0d2MgKHdjaGFyX3QgX193YywgX19GSUxF ICpfX3N0cmVhbSk7CgoKZXh0ZXJuIHdpbnRfdCBwdXR3Y2hhciAod2NoYXJfdCBfX3djKTsKCgoK CmV4dGVybiB3Y2hhcl90ICpmZ2V0d3MgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX193cywgaW50IF9f biwKICAgICAgICAgICAgICAgICAgICAgICAgX19GSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKTsK CgpleHRlcm4gaW50IGZwdXR3cyAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fd3MsCiAg ICAgICAgICAgICAgICAgICBfX0ZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pOwoKCgpleHRlcm4g d2ludF90IHVuZ2V0d2MgKHdpbnRfdCBfX3djLCBfX0ZJTEUgKl9fc3RyZWFtKTsKCgoKCgpleHRl cm4gd2ludF90IGdldHdjX3VubG9ja2VkIChfX0ZJTEUgKl9fc3RyZWFtKTsKZXh0ZXJuIHdpbnRf dCBnZXR3Y2hhcl91bmxvY2tlZCAodm9pZCk7CgoKZXh0ZXJuIHdpbnRfdCBmZ2V0d2NfdW5sb2Nr ZWQgKF9fRklMRSAqX19zdHJlYW0pOwoKCmV4dGVybiB3aW50X3QgZnB1dHdjX3VubG9ja2VkICh3 Y2hhcl90IF9fd2MsIF9fRklMRSAqX19zdHJlYW0pOwoKCgpleHRlcm4gd2ludF90IHB1dHdjX3Vu bG9ja2VkICh3Y2hhcl90IF9fd2MsIF9fRklMRSAqX19zdHJlYW0pOwpleHRlcm4gd2ludF90IHB1 dHdjaGFyX3VubG9ja2VkICh3Y2hhcl90IF9fd2MpOwoKCgpleHRlcm4gd2NoYXJfdCAqZmdldHdz X3VubG9ja2VkICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fd3MsIGludCBfX24sCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIF9fRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSk7CgoKZXh0 ZXJuIGludCBmcHV0d3NfdW5sb2NrZWQgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3dz LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX19GSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFt KTsKCgoKCgoKZXh0ZXJuIHNpemVfdCB3Y3NmdGltZSAod2NoYXJfdCAqX19yZXN0cmljdCBfX3Ms IHNpemVfdCBfX21heHNpemUsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJf dCAqX19yZXN0cmljdCBfX2Zvcm1hdCwKICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBz dHJ1Y3QgdG0gKl9fcmVzdHJpY3QgX190cCk7CiMgNjgxICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIg Mwp9CiMgNTUgIi91c3IvaW5jbHVkZS9jKysvMy4yLjEvY3djaGFyIiAyIDMKIyA2OSAiL3Vzci9p bmNsdWRlL2MrKy8zLjIuMS9jd2NoYXIiIDMKbmFtZXNwYWNlIHN0ZAp7CiAgdXNpbmcgOjptYnN0 YXRlX3Q7Cn0KIyAxMzMgIi91c3IvaW5jbHVkZS9jKysvMy4yLjEvY3djaGFyIiAzCm5hbWVzcGFj ZSBzdGQKewogIHVzaW5nIDo6d2ludF90OwoKICB1c2luZyA6OmJ0b3djOwogIHVzaW5nIDo6Zmdl dHdjOwogIHVzaW5nIDo6ZmdldHdzOwogIHVzaW5nIDo6ZnB1dHdjOwogIHVzaW5nIDo6ZnB1dHdz OwogIHVzaW5nIDo6ZndpZGU7CiAgdXNpbmcgOjpmd3ByaW50ZjsKICB1c2luZyA6OmZ3c2NhbmY7 CiAgdXNpbmcgOjpnZXR3YzsKICB1c2luZyA6OmdldHdjaGFyOwogIHVzaW5nIDo6bWJybGVuOwog IHVzaW5nIDo6bWJydG93YzsKICB1c2luZyA6Om1ic2luaXQ7CiAgdXNpbmcgOjptYnNydG93Y3M7 CiAgdXNpbmcgOjpwdXR3YzsKICB1c2luZyA6OnB1dHdjaGFyOwogIHVzaW5nIDo6c3dwcmludGY7 CiAgdXNpbmcgOjpzd3NjYW5mOwogIHVzaW5nIDo6dW5nZXR3YzsKICB1c2luZyA6OnZmd3ByaW50 ZjsKICB1c2luZyA6OnZmd3NjYW5mOwogIHVzaW5nIDo6dnN3cHJpbnRmOwogIHVzaW5nIDo6dnN3 c2NhbmY7CiAgdXNpbmcgOjp2d3ByaW50ZjsKICB1c2luZyA6OnZ3c2NhbmY7CiAgdXNpbmcgOjp3 Y3J0b21iOwogIHVzaW5nIDo6d2NzY2F0OwogIHVzaW5nIDo6d2NzY21wOwogIHVzaW5nIDo6d2Nz Y29sbDsKICB1c2luZyA6Ondjc2NweTsKICB1c2luZyA6Ondjc2NzcG47CiAgdXNpbmcgOjp3Y3Nm dGltZTsKICB1c2luZyA6Ondjc2xlbjsKICB1c2luZyA6Ondjc25jYXQ7CiAgdXNpbmcgOjp3Y3Nu Y21wOwogIHVzaW5nIDo6d2NzbmNweTsKICB1c2luZyA6Ondjc3J0b21iczsKICB1c2luZyA6Ondj c3NwbjsKICB1c2luZyA6Ondjc3RvZDsKICB1c2luZyA6Ondjc3RvZjsKICB1c2luZyA6Ondjc3Rv azsKICB1c2luZyA6Ondjc3RvbDsKICB1c2luZyA6Ondjc3RvdWw7CiAgdXNpbmcgOjp3Y3N4ZnJt OwogIHVzaW5nIDo6d2N0b2I7CiAgdXNpbmcgOjp3bWVtY21wOwogIHVzaW5nIDo6d21lbWNweTsK ICB1c2luZyA6OndtZW1tb3ZlOwogIHVzaW5nIDo6d21lbXNldDsKICB1c2luZyA6OndwcmludGY7 CiAgdXNpbmcgOjp3c2NhbmY7CgogIHVzaW5nIDo6d2NzY2hyOwoKICBpbmxpbmUgd2NoYXJfdCoK ICB3Y3NjaHIod2NoYXJfdCogX19wLCB3Y2hhcl90IF9fYykKICB7IHJldHVybiB3Y3NjaHIoY29u c3RfY2FzdDxjb25zdCB3Y2hhcl90Kj4oX19wKSwgX19jKTsgfQoKICB1c2luZyA6Ondjc3Bicms7 CgogIGlubGluZSB3Y2hhcl90KgogIHdjc3Bicmsod2NoYXJfdCogX19zMSwgd2NoYXJfdCogX19z MikKICB7IHJldHVybiB3Y3NwYnJrKGNvbnN0X2Nhc3Q8Y29uc3Qgd2NoYXJfdCo+KF9fczEpLCBf X3MyKTsgfQoKICB1c2luZyA6Ondjc3JjaHI7CgogIGlubGluZSB3Y2hhcl90KgogIHdjc3JjaHIo d2NoYXJfdCogX19wLCB3Y2hhcl90IF9fYykKICB7IHJldHVybiB3Y3NyY2hyKGNvbnN0X2Nhc3Q8 Y29uc3Qgd2NoYXJfdCo+KF9fcCksIF9fYyk7IH0KCiAgdXNpbmcgOjp3Y3NzdHI7CgogIGlubGlu ZSB3Y2hhcl90KgogIHdjc3N0cih3Y2hhcl90KiBfX3MxLCB3Y2hhcl90KiBfX3MyKQogIHsgcmV0 dXJuIHdjc3N0cihjb25zdF9jYXN0PGNvbnN0IHdjaGFyX3QqPihfX3MxKSwgX19zMik7IH0KCiAg dXNpbmcgOjp3bWVtY2hyOwoKICBpbmxpbmUgd2NoYXJfdCoKICB3bWVtY2hyKHdjaGFyX3QqIF9f cCwgd2NoYXJfdCBfX2MsIHNpemVfdCBfX24pCiAgeyByZXR1cm4gd21lbWNocihjb25zdF9jYXN0 PGNvbnN0IHdjaGFyX3QqPihfX3ApLCBfX2MsIF9fbik7IH0KfQoKCgoKCgoKbmFtZXNwYWNlIF9f Z251X2N4eAp7CiAgdXNpbmcgOjp3Y3N0b2xkOwogIHVzaW5nIDo6d2NzdG9sbDsKICB1c2luZyA6 Ondjc3RvdWxsOwp9CgpuYW1lc3BhY2Ugc3RkCnsKICB1c2luZyBfX2dudV9jeHg6Ondjc3RvbGQ7 CiAgdXNpbmcgX19nbnVfY3h4Ojp3Y3N0b2xsOwogIHVzaW5nIF9fZ251X2N4eDo6d2NzdG91bGw7 Cn0KIyA0NiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9iaXRzL2Zwb3MuaCIgMiAzCgpuYW1lc3Bh Y2Ugc3RkCnsKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfU3RhdGVUPgogICAgY2xhc3MgZnBvcwog ICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfU3RhdGVUIF9fc3RhdGVfdHlwZTsKCiAg ICBwcml2YXRlOgogICAgICBzdHJlYW1vZmYgX01fb2ZmOwogICAgICBfX3N0YXRlX3R5cGUgX01f c3Q7CgogICAgcHVibGljOgogICAgICBfX3N0YXRlX3R5cGUKICAgICAgc3RhdGUoKSBjb25zdCB7 IHJldHVybiBfTV9zdDsgfQoKICAgICAgdm9pZAogICAgICBzdGF0ZShfX3N0YXRlX3R5cGUgX19z dCkgeyBfTV9zdCA9IF9fc3Q7IH0KCgoKICAgICAgZnBvcygpOiBfTV9vZmYoc3RyZWFtb2ZmKCkp LCBfTV9zdChfX3N0YXRlX3R5cGUoKSkgeyB9CgogICAgICBmcG9zKHN0cmVhbW9mZiBfX29mZiwg X19zdGF0ZV90eXBlIF9fc3QgPSBfX3N0YXRlX3R5cGUoKSkKICAgICAgOiBfTV9vZmYoX19vZmYp LCBfTV9zdChfX3N0KSB7IH0KCiAgICAgIG9wZXJhdG9yIHN0cmVhbW9mZigpIGNvbnN0IHsgcmV0 dXJuIF9NX29mZjsgfQoKICAgICAgZnBvcyYKICAgICAgb3BlcmF0b3IrPShzdHJlYW1vZmYgX19v ZmYpIHsgX01fb2ZmICs9IF9fb2ZmOyByZXR1cm4gKnRoaXM7IH0KCiAgICAgIGZwb3MmCiAgICAg IG9wZXJhdG9yLT0oc3RyZWFtb2ZmIF9fb2ZmKSB7IF9NX29mZiAtPSBfX29mZjsgcmV0dXJuICp0 aGlzOyB9CgogICAgICBmcG9zCiAgICAgIG9wZXJhdG9yKyhzdHJlYW1vZmYgX19vZmYpCiAgICAg IHsKICAgICAgICBmcG9zIF9fdCgqdGhpcyk7CiAgICAgICAgX190ICs9IF9fb2ZmOwogICAgICAg IHJldHVybiBfX3Q7CiAgICAgIH0KCiAgICAgIGZwb3MKICAgICAgb3BlcmF0b3ItKHN0cmVhbW9m ZiBfX29mZikKICAgICAgewogICAgICAgIGZwb3MgX190KCp0aGlzKTsKICAgICAgICBfX3QgLT0g X19vZmY7CiAgICAgICAgcmV0dXJuIF9fdDsKICAgICAgfQoKICAgICAgYm9vbAogICAgICBvcGVy YXRvcj09KGNvbnN0IGZwb3MmIF9fcG9zKSBjb25zdAogICAgICB7IHJldHVybiBfTV9vZmYgPT0g X19wb3MuX01fb2ZmOyB9CgogICAgICBib29sCiAgICAgIG9wZXJhdG9yIT0oY29uc3QgZnBvcyYg X19wb3MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX29mZiAhPSBfX3Bvcy5fTV9vZmY7IH0KCiAg ICAgIHN0cmVhbW9mZgogICAgICBfTV9wb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIF9NX29mZjsg fQoKICAgICAgdm9pZAogICAgICBfTV9wb3NpdGlvbihzdHJlYW1vZmYgX19vZmYpIHsgX01fb2Zm ID0gX19vZmY7IH0KICAgIH07CgoKICB0eXBlZGVmIGZwb3M8bWJzdGF0ZV90PiBzdHJlYW1wb3M7 CgogIHR5cGVkZWYgZnBvczxtYnN0YXRlX3Q+IHdzdHJlYW1wb3M7Cgp9CiMgNDcgIi91c3IvaW5j bHVkZS9jKysvMy4yLjEvaW9zZndkIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL2Jp dHMvZnVuY3RleGNlcHQuaCIgMSAzCiMgMzQgIi91c3IvaW5jbHVkZS9jKysvMy4yLjEvYml0cy9m dW5jdGV4Y2VwdC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9leGNlcHRpb25fZGVm aW5lcy5oIiAxIDMKIyAzNSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9iaXRzL2Z1bmN0ZXhjZXB0 LmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CgogIHZvaWQKICBfX3Rocm93X2JhZF9leGNlcHRpb24o dm9pZCk7CgoKICB2b2lkCiAgX190aHJvd19iYWRfYWxsb2Modm9pZCk7CgoKICB2b2lkCiAgX190 aHJvd19iYWRfY2FzdCh2b2lkKTsKCiAgdm9pZAogIF9fdGhyb3dfYmFkX3R5cGVpZCh2b2lkKTsK CgogIHZvaWQKICBfX3Rocm93X2xvZ2ljX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQK ICBfX3Rocm93X2RvbWFpbl9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJv d19pbnZhbGlkX2FyZ3VtZW50KGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X2xl bmd0aF9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19vdXRfb2ZfcmFu Z2UoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfcnVudGltZV9lcnJvcihjb25z dCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19yYW5nZV9lcnJvcihjb25zdCBjaGFyKiBf X3MpOwoKICB2b2lkCiAgX190aHJvd19vdmVyZmxvd19lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoK ICB2b2lkCiAgX190aHJvd191bmRlcmZsb3dfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCgogIHZv aWQKICBfX3Rocm93X2lvc19mYWlsdXJlKGNvbnN0IGNoYXIqIF9fcyk7Cn0KIyA0OCAiL3Vzci9p bmNsdWRlL2MrKy8zLjIuMS9pb3Nmd2QiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+ CiAgICBjbGFzcyBiYXNpY19pb3M7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h bWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgogICAgY2xhc3MgYmFzaWNfc3RyZWFt YnVmOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFy X3RyYWl0czxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX2lzdHJlYW07CgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgog ICAgY2xhc3MgYmFzaWNfb3N0cmVhbTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl bmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19pb3N0 cmVhbTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hh cl90cmFpdHM8X0NoYXJUPiwKICAgICAgICAgICAgdHlwZW5hbWUgX0FsbG9jID0gYWxsb2NhdG9y PF9DaGFyVD4gPgogICAgY2xhc3MgYmFzaWNfc3RyaW5nYnVmOwoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+LAogICAgICAg ICAgIHR5cGVuYW1lIF9BbGxvYyA9IGFsbG9jYXRvcjxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2lj X2lzdHJpbmdzdHJlYW07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry YWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4sCiAgICAgICAgICAgdHlwZW5hbWUgX0FsbG9jID0g YWxsb2NhdG9yPF9DaGFyVD4gPgogICAgY2xhc3MgYmFzaWNfb3N0cmluZ3N0cmVhbTsKCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0No YXJUPiwKICAgICAgICAgICB0eXBlbmFtZSBfQWxsb2MgPSBhbGxvY2F0b3I8X0NoYXJUPiA+CiAg ICBjbGFzcyBiYXNpY19zdHJpbmdzdHJlYW07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg dHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgogICAgY2xhc3MgYmFzaWNf ZmlsZWJ1ZjsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0g Y2hhcl90cmFpdHM8X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19pZnN0cmVhbTsKCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJU PiA+CiAgICBjbGFzcyBiYXNpY19vZnN0cmVhbTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU LCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNp Y19mc3RyZWFtOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMg PSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KICAgIGNsYXNzIGlzdHJlYW1idWZfaXRlcmF0b3I7Cgog IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRz PF9DaGFyVD4gPgogICAgY2xhc3Mgb3N0cmVhbWJ1Zl9pdGVyYXRvcjsKCgoKICBjbGFzcyBpb3Nf YmFzZTsKCgogIHR5cGVkZWYgYmFzaWNfaW9zPGNoYXI+IGlvczsKICB0eXBlZGVmIGJhc2ljX3N0 cmVhbWJ1ZjxjaGFyPiBzdHJlYW1idWY7CiAgdHlwZWRlZiBiYXNpY19pc3RyZWFtPGNoYXI+IGlz dHJlYW07CiAgdHlwZWRlZiBiYXNpY19vc3RyZWFtPGNoYXI+IG9zdHJlYW07CiAgdHlwZWRlZiBi YXNpY19pb3N0cmVhbTxjaGFyPiBpb3N0cmVhbTsKICB0eXBlZGVmIGJhc2ljX3N0cmluZ2J1Zjxj aGFyPiBzdHJpbmdidWY7CiAgdHlwZWRlZiBiYXNpY19pc3RyaW5nc3RyZWFtPGNoYXI+IGlzdHJp bmdzdHJlYW07CiAgdHlwZWRlZiBiYXNpY19vc3RyaW5nc3RyZWFtPGNoYXI+IG9zdHJpbmdzdHJl YW07CiAgdHlwZWRlZiBiYXNpY19zdHJpbmdzdHJlYW08Y2hhcj4gc3RyaW5nc3RyZWFtOwogIHR5 cGVkZWYgYmFzaWNfZmlsZWJ1ZjxjaGFyPiBmaWxlYnVmOwogIHR5cGVkZWYgYmFzaWNfaWZzdHJl YW08Y2hhcj4gaWZzdHJlYW07CiAgdHlwZWRlZiBiYXNpY19vZnN0cmVhbTxjaGFyPiBvZnN0cmVh bTsKICB0eXBlZGVmIGJhc2ljX2ZzdHJlYW08Y2hhcj4gZnN0cmVhbTsKCgogIHR5cGVkZWYgYmFz aWNfaW9zPHdjaGFyX3Q+IHdpb3M7CiAgdHlwZWRlZiBiYXNpY19zdHJlYW1idWY8d2NoYXJfdD4g d3N0cmVhbWJ1ZjsKICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08d2NoYXJfdD4gd2lzdHJlYW07CiAg dHlwZWRlZiBiYXNpY19vc3RyZWFtPHdjaGFyX3Q+IHdvc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNf aW9zdHJlYW08d2NoYXJfdD4gd2lvc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfc3RyaW5nYnVmPHdj aGFyX3Q+IHdzdHJpbmdidWY7CiAgdHlwZWRlZiBiYXNpY19pc3RyaW5nc3RyZWFtPHdjaGFyX3Q+ IHdpc3RyaW5nc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfb3N0cmluZ3N0cmVhbTx3Y2hhcl90PiB3 b3N0cmluZ3N0cmVhbTsKICB0eXBlZGVmIGJhc2ljX3N0cmluZ3N0cmVhbTx3Y2hhcl90PiB3c3Ry aW5nc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfZmlsZWJ1Zjx3Y2hhcl90PiB3ZmlsZWJ1ZjsKICB0 eXBlZGVmIGJhc2ljX2lmc3RyZWFtPHdjaGFyX3Q+IHdpZnN0cmVhbTsKICB0eXBlZGVmIGJhc2lj X29mc3RyZWFtPHdjaGFyX3Q+IHdvZnN0cmVhbTsKICB0eXBlZGVmIGJhc2ljX2ZzdHJlYW08d2No YXJfdD4gd2ZzdHJlYW07Cgp9CiMgNDUgIi91c3IvaW5jbHVkZS9jKysvMy4yLjEvaW9zIiAyIDMK IyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL2V4Y2VwdGlvbiIgMSAzCiMgNDAgIi91c3IvaW5j bHVkZS9jKysvMy4yLjEvZXhjZXB0aW9uIiAzCmV4dGVybiAiQysrIiB7CgpuYW1lc3BhY2Ugc3Rk CnsKCgoKCgoKICBjbGFzcyBleGNlcHRpb24KICB7CiAgcHVibGljOgogICAgZXhjZXB0aW9uKCkg dGhyb3coKSB7IH0KICAgIHZpcnR1YWwgfmV4Y2VwdGlvbigpIHRocm93KCk7CgoKICAgIHZpcnR1 YWwgY29uc3QgY2hhciogd2hhdCgpIGNvbnN0IHRocm93KCk7CiAgfTsKCgoKICBjbGFzcyBiYWRf ZXhjZXB0aW9uIDogcHVibGljIGV4Y2VwdGlvbgogIHsKICBwdWJsaWM6CiAgICBiYWRfZXhjZXB0 aW9uKCkgdGhyb3coKSB7IH0KCgogICAgdmlydHVhbCB+YmFkX2V4Y2VwdGlvbigpIHRocm93KCk7 CiAgfTsKCgogIHR5cGVkZWYgdm9pZCAoKnRlcm1pbmF0ZV9oYW5kbGVyKSAoKTsKCiAgdHlwZWRl ZiB2b2lkICgqdW5leHBlY3RlZF9oYW5kbGVyKSAoKTsKCgogIHRlcm1pbmF0ZV9oYW5kbGVyIHNl dF90ZXJtaW5hdGUodGVybWluYXRlX2hhbmRsZXIpIHRocm93KCk7CgoKICB2b2lkIHRlcm1pbmF0 ZSgpIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKCgogIHVuZXhwZWN0ZWRfaGFuZGxl ciBzZXRfdW5leHBlY3RlZCh1bmV4cGVjdGVkX2hhbmRsZXIpIHRocm93KCk7CgoKICB2b2lkIHVu ZXhwZWN0ZWQoKSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CiMgOTggIi91c3IvaW5j bHVkZS9jKysvMy4yLjEvZXhjZXB0aW9uIiAzCiAgYm9vbCB1bmNhdWdodF9leGNlcHRpb24oKSB0 aHJvdygpOwp9CgpuYW1lc3BhY2UgX19nbnVfY3h4CnsKIyAxMTEgIi91c3IvaW5jbHVkZS9jKysv My4yLjEvZXhjZXB0aW9uIiAzCiAgdm9pZCBfX3ZlcmJvc2VfdGVybWluYXRlX2hhbmRsZXIgKCk7 Cn0KCn0KIyA0NiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9pb3MiIDIgMwojIDEgIi91c3IvaW5j bHVkZS9jKysvMy4yLjEvYml0cy9jaGFyX3RyYWl0cy5oIiAxIDMKIyA0NCAiL3Vzci9pbmNsdWRl L2MrKy8zLjIuMS9iaXRzL2NoYXJfdHJhaXRzLmgiIDMKCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8z LjIuMS9jc3RyaW5nIiAxIDMKIyA0OCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9jc3RyaW5nIiAz CgoKCiMgMSAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAxIDMKIyAyOCAiL3Vzci9pbmNsdWRlL3N0 cmluZy5oIiAzCmV4dGVybiAiQyIgewoKCgoKIyAxICIvdXNyL2xpYi9nY2MtbGliL2kzODYtcGMt bGludXgtZ251LzMuMi4xL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDM0ICIvdXNyL2luY2x1ZGUv c3RyaW5nLmgiIDIgMwoKCgpleHRlcm4gdm9pZCAqbWVtY3B5ICh2b2lkICpfX3Jlc3RyaWN0IF9f ZGVzdCwKICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB2b2lkICpfX3Jlc3RyaWN0IF9fc3Jj LCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgpleHRlcm4gdm9pZCAqbWVtbW92ZSAodm9pZCAqX19k ZXN0LCBfX2NvbnN0IHZvaWQgKl9fc3JjLCBzaXplX3QgX19uKQogICAgIHRocm93ICgpOwoKCgoK CmV4dGVybiB2b2lkICptZW1jY3B5ICh2b2lkICpfX3Jlc3RyaWN0IF9fZGVzdCwgX19jb25zdCB2 b2lkICpfX3Jlc3RyaWN0IF9fc3JjLAogICAgICAgICAgICAgICAgICAgICAgaW50IF9fYywgc2l6 ZV90IF9fbikKICAgICB0aHJvdyAoKTsKCgoKCmV4dGVybiB2b2lkICptZW1zZXQgKHZvaWQgKl9f cywgaW50IF9fYywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBtZW1jbXAgKF9f Y29uc3Qgdm9pZCAqX19zMSwgX19jb25zdCB2b2lkICpfX3MyLCBzaXplX3QgX19uKQogICAgIHRo cm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVybiB2b2lkICptZW1jaHIg KF9fY29uc3Qgdm9pZCAqX19zLCBpbnQgX19jLCBzaXplX3QgX19uKQogICAgICB0aHJvdyAoKSBf X2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKCmV4dGVybiB2b2lkICpyYXdtZW1jaHIgKF9f Y29uc3Qgdm9pZCAqX19zLCBpbnQgX19jKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJl X18pKTsKCgpleHRlcm4gdm9pZCAqbWVtcmNociAoX19jb25zdCB2b2lkICpfX3MsIGludCBfX2Ms IHNpemVfdCBfX24pCiAgICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoK CgoKZXh0ZXJuIGNoYXIgKnN0cmNweSAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsIF9fY29uc3Qg Y2hhciAqX19yZXN0cmljdCBfX3NyYykKICAgICB0aHJvdyAoKTsKCmV4dGVybiBjaGFyICpzdHJu Y3B5IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwKICAgICAgICAgICAgICAgICAgICAgIF9fY29u c3QgY2hhciAqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKZXh0ZXJu IGNoYXIgKnN0cmNhdCAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsIF9fY29uc3QgY2hhciAqX19y ZXN0cmljdCBfX3NyYykKICAgICB0aHJvdyAoKTsKCmV4dGVybiBjaGFyICpzdHJuY2F0IChjaGFy ICpfX3Jlc3RyaWN0IF9fZGVzdCwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjLAogICAg ICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBzdHJj bXAgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyKQogICAgIHRocm93ICgp IF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIGludCBzdHJuY21wIChfX2NvbnN0 IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMiwgc2l6ZV90IF9fbikKICAgICB0aHJvdyAo KSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgpleHRlcm4gaW50IHN0cmNvbGwgKF9fY29u c3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyKQogICAgIHRocm93ICgpIF9fYXR0cmli dXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIHNpemVfdCBzdHJ4ZnJtIChjaGFyICpfX3Jlc3Ry aWN0IF9fZGVzdCwKICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJp Y3QgX19zcmMsIHNpemVfdCBfX24pIHRocm93ICgpOwojIDExMSAiL3Vzci9pbmNsdWRlL3N0cmlu Zy5oIiAzCmV4dGVybiBpbnQgX19zdHJjb2xsX2wgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25z dCBjaGFyICpfX3MyLCBfX2xvY2FsZV90IF9fbCkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9f ICgoX19wdXJlX18pKTsKCmV4dGVybiBzaXplX3QgX19zdHJ4ZnJtX2wgKGNoYXIgKl9fZGVzdCwg X19jb25zdCBjaGFyICpfX3NyYywgc2l6ZV90IF9fbiwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgX19sb2NhbGVfdCBfX2wpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGNoYXIgKnN0cmR1cCAoX19j b25zdCBjaGFyICpfX3MpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7CgoK CgoKCmV4dGVybiBjaGFyICpzdHJuZHVwIChfX2NvbnN0IGNoYXIgKl9fc3RyaW5nLCBzaXplX3Qg X19uKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7CiMgMTU1ICIv dXNyL2luY2x1ZGUvc3RyaW5nLmgiIDMKZXh0ZXJuIGNoYXIgKnN0cmNociAoX19jb25zdCBjaGFy ICpfX3MsIGludCBfX2MpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0 ZXJuIGNoYXIgKnN0cnJjaHIgKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19jKSB0aHJvdyAoKSBf X2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKCmV4dGVybiBjaGFyICpzdHJjaHJudWwgKF9f Y29uc3QgY2hhciAqX19zLCBpbnQgX19jKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJl X18pKTsKCgoKCmV4dGVybiBzaXplX3Qgc3RyY3NwbiAoX19jb25zdCBjaGFyICpfX3MsIF9fY29u c3QgY2hhciAqX19yZWplY3QpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9f KSk7CgoKZXh0ZXJuIHNpemVfdCBzdHJzcG4gKF9fY29uc3QgY2hhciAqX19zLCBfX2NvbnN0IGNo YXIgKl9fYWNjZXB0KQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoK ZXh0ZXJuIGNoYXIgKnN0cnBicmsgKF9fY29uc3QgY2hhciAqX19zLCBfX2NvbnN0IGNoYXIgKl9f YWNjZXB0KQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJu IGNoYXIgKnN0cnN0ciAoX19jb25zdCBjaGFyICpfX2hheXN0YWNrLCBfX2NvbnN0IGNoYXIgKl9f bmVlZGxlKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgpleHRl cm4gY2hhciAqc3RyY2FzZXN0ciAoX19jb25zdCBjaGFyICpfX2hheXN0YWNrLCBfX2NvbnN0IGNo YXIgKl9fbmVlZGxlKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoK CgpleHRlcm4gY2hhciAqc3RydG9rIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgX19jb25zdCBjaGFy ICpfX3Jlc3RyaWN0IF9fZGVsaW0pCiAgICAgdGhyb3cgKCk7CgoKCmV4dGVybiBjaGFyICpfX3N0 cnRva19yIChjaGFyICpfX3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAgICAgICAgICAgICAgIF9f Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX2RlbGltLAogICAgICAgICAgICAgICAgICAgICAgICAg Y2hhciAqKl9fcmVzdHJpY3QgX19zYXZlX3B0cikgdGhyb3cgKCk7CgpleHRlcm4gY2hhciAqc3Ry dG9rX3IgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19k ZWxpbSwKICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX3NhdmVfcHRy KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIHZvaWQgKm1lbW1lbSAoX19jb25zdCB2b2lkICpfX2hh eXN0YWNrLCBzaXplX3QgX19oYXlzdGFja2xlbiwKICAgICAgICAgICAgICAgICAgICAgX19jb25z dCB2b2lkICpfX25lZWRsZSwgc2l6ZV90IF9fbmVlZGxlbGVuKQogICAgIHRocm93ICgpIF9fYXR0 cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgpleHRlcm4gdm9pZCAqX19tZW1wY3B5ICh2b2lkICpf X3Jlc3RyaWN0IF9fZGVzdCwKICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB2b2lkICpf X3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKZXh0ZXJuIHZvaWQgKm1lbXBj cHkgKHZvaWQgKl9fcmVzdHJpY3QgX19kZXN0LAogICAgICAgICAgICAgICAgICAgICAgX19jb25z dCB2b2lkICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgoKCmV4dGVy biBzaXplX3Qgc3RybGVuIChfX2NvbnN0IGNoYXIgKl9fcykgdGhyb3cgKCkgX19hdHRyaWJ1dGVf XyAoKF9fcHVyZV9fKSk7CgoKCgpleHRlcm4gc2l6ZV90IHN0cm5sZW4gKF9fY29uc3QgY2hhciAq X19zdHJpbmcsIHNpemVfdCBfX21heGxlbikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo X19wdXJlX18pKTsKCgoKCmV4dGVybiBjaGFyICpzdHJlcnJvciAoaW50IF9fZXJybnVtKSB0aHJv dyAoKTsKCgoKZXh0ZXJuIGNoYXIgKnN0cmVycm9yX3IgKGludCBfX2Vycm51bSwgY2hhciAqX19i dWYsIHNpemVfdCBfX2J1ZmxlbikgdGhyb3cgKCk7CgoKCgpleHRlcm4gdm9pZCBfX2J6ZXJvICh2 b2lkICpfX3MsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCgpleHRlcm4gdm9pZCBiY29weSAoX19j b25zdCB2b2lkICpfX3NyYywgdm9pZCAqX19kZXN0LCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgpl eHRlcm4gdm9pZCBiemVybyAodm9pZCAqX19zLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgpleHRl cm4gaW50IGJjbXAgKF9fY29uc3Qgdm9pZCAqX19zMSwgX19jb25zdCB2b2lkICpfX3MyLCBzaXpl X3QgX19uKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVy biBjaGFyICppbmRleCAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX2MpIHRocm93ICgpIF9fYXR0 cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVybiBjaGFyICpyaW5kZXggKF9fY29uc3QgY2hh ciAqX19zLCBpbnQgX19jKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoK ZXh0ZXJuIGludCBmZnMgKGludCBfX2kpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChjb25zdCkp OwoKCgoKZXh0ZXJuIGludCBmZnNsIChsb25nIGludCBfX2wpIHRocm93ICgpIF9fYXR0cmlidXRl X18gKChjb25zdCkpOwoKX19leHRlbnNpb25fXyBleHRlcm4gaW50IGZmc2xsIChsb25nIGxvbmcg aW50IF9fbGwpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKGNvbnN0KSk7CgoKCgpleHRl cm4gaW50IHN0cmNhc2VjbXAgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3My KQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVybiBpbnQg c3RybmNhc2VjbXAgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyLCBzaXpl X3QgX19uKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoKCmV4 dGVybiBpbnQgX19zdHJjYXNlY21wX2wgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFy ICpfX3MyLAogICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xvY2FsZV90IF9fbG9jKSB0aHJv dyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBpbnQgX19zdHJuY2FzZWNt cF9sIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMiwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHNpemVfdCBfX24sIF9fbG9jYWxlX3QgX19sb2MpCiAgICAgdGhyb3cg KCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgoKZXh0ZXJuIGNoYXIgKnN0cnNlcCAo Y2hhciAqKl9fcmVzdHJpY3QgX19zdHJpbmdwLAogICAgICAgICAgICAgICAgICAgICBfX2NvbnN0 IGNoYXIgKl9fcmVzdHJpY3QgX19kZWxpbSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IHN0cnZl cnNjbXAgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyKQogICAgIHRocm93 ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVybiBjaGFyICpzdHJzaWduYWwg KGludCBfX3NpZykgdGhyb3cgKCk7CgoKZXh0ZXJuIGNoYXIgKl9fc3RwY3B5IChjaGFyICpfX3Jl c3RyaWN0IF9fZGVzdCwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjKQogICAgIHRocm93 ICgpOwpleHRlcm4gY2hhciAqc3RwY3B5IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwgX19jb25z dCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjKQogICAgIHRocm93ICgpOwoKCgpleHRlcm4gY2hhciAq X19zdHBuY3B5IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwKICAgICAgICAgICAgICAgICAgICAg ICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSB0aHJvdyAoKTsK ZXh0ZXJuIGNoYXIgKnN0cG5jcHkgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LAogICAgICAgICAg ICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSB0 aHJvdyAoKTsKCgpleHRlcm4gY2hhciAqc3RyZnJ5IChjaGFyICpfX3N0cmluZykgdGhyb3cgKCk7 CgoKZXh0ZXJuIHZvaWQgKm1lbWZyb2IgKHZvaWQgKl9fcywgc2l6ZV90IF9fbikgdGhyb3cgKCk7 CgoKCgoKCmV4dGVybiBjaGFyICpiYXNlbmFtZSAoX19jb25zdCBjaGFyICpfX2ZpbGVuYW1lKSB0 aHJvdyAoKTsKIyAzNjMgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMwp9CiMgNTIgIi91c3IvaW5j bHVkZS9jKysvMy4yLjEvY3N0cmluZyIgMiAzCiMgNzcgIi91c3IvaW5jbHVkZS9jKysvMy4yLjEv Y3N0cmluZyIgMwpuYW1lc3BhY2Ugc3RkCnsKICB1c2luZyA6Om1lbWNweTsKICB1c2luZyA6Om1l bW1vdmU7CiAgdXNpbmcgOjpzdHJjcHk7CiAgdXNpbmcgOjpzdHJuY3B5OwogIHVzaW5nIDo6c3Ry Y2F0OwogIHVzaW5nIDo6c3RybmNhdDsKICB1c2luZyA6Om1lbWNtcDsKICB1c2luZyA6OnN0cmNt cDsKICB1c2luZyA6OnN0cmNvbGw7CiAgdXNpbmcgOjpzdHJuY21wOwogIHVzaW5nIDo6c3RyeGZy bTsKICB1c2luZyA6OnN0cmNzcG47CiAgdXNpbmcgOjpzdHJzcG47CiAgdXNpbmcgOjpzdHJ0b2s7 CiAgdXNpbmcgOjptZW1zZXQ7CiAgdXNpbmcgOjpzdHJlcnJvcjsKICB1c2luZyA6OnN0cmxlbjsK CiAgdXNpbmcgOjptZW1jaHI7CgogIGlubGluZSB2b2lkKgogIG1lbWNocih2b2lkKiBfX3AsIGlu dCBfX2MsIHNpemVfdCBfX24pCiAgeyByZXR1cm4gbWVtY2hyKGNvbnN0X2Nhc3Q8Y29uc3Qgdm9p ZCo+KF9fcCksIF9fYywgX19uKTsgfQoKICB1c2luZyA6OnN0cmNocjsKCiAgaW5saW5lIGNoYXIq CiAgc3RyY2hyKGNoYXIqIF9fczEsIGludCBfX24pCiAgeyByZXR1cm4gX19idWlsdGluX3N0cmNo cihjb25zdF9jYXN0PGNvbnN0IGNoYXIqPihfX3MxKSwgX19uKTsgfQoKICB1c2luZyA6OnN0cnBi cms7CgogIGlubGluZSBjaGFyKgogIHN0cnBicmsoY2hhciogX19zMSwgY29uc3QgY2hhciogX19z MikKICB7IHJldHVybiBfX2J1aWx0aW5fc3RycGJyayhjb25zdF9jYXN0PGNvbnN0IGNoYXIqPihf X3MxKSwgX19zMik7IH0KCiAgdXNpbmcgOjpzdHJyY2hyOwoKICBpbmxpbmUgY2hhcioKICBzdHJy Y2hyKGNoYXIqIF9fczEsIGludCBfX24pCiAgeyByZXR1cm4gX19idWlsdGluX3N0cnJjaHIoY29u c3RfY2FzdDxjb25zdCBjaGFyKj4oX19zMSksIF9fbik7IH0KCiAgdXNpbmcgOjpzdHJzdHI7Cgog IGlubGluZSBjaGFyKgogIHN0cnN0cihjaGFyKiBfX3MxLCBjb25zdCBjaGFyKiBfX3MyKQogIHsg cmV0dXJuIF9fYnVpbHRpbl9zdHJzdHIoY29uc3RfY2FzdDxjb25zdCBjaGFyKj4oX19zMSksIF9f czIpOyB9Cn0KIyA0NiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9iaXRzL2NoYXJfdHJhaXRzLmgi IDIgMwoKCm5hbWVzcGFjZSBzdGQKewoKCgogIHRlbXBsYXRlPGNsYXNzIF9DaGFyVD4KICAgIHN0 cnVjdCBjaGFyX3RyYWl0cwogICAgewogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7Cgog ICAgICB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50X3R5cGU7CiAgICAgIHR5cGVkZWYgc3RyZWFt cG9zIHBvc190eXBlOwogICAgICB0eXBlZGVmIHN0cmVhbW9mZiBvZmZfdHlwZTsKICAgICAgdHlw ZWRlZiBtYnN0YXRlX3Qgc3RhdGVfdHlwZTsKCiAgICAgIHN0YXRpYyB2b2lkCiAgICAgIGFzc2ln bihjaGFyX3R5cGUmIF9fYzEsIGNvbnN0IGNoYXJfdHlwZSYgX19jMik7CgogICAgICBzdGF0aWMg Ym9vbAogICAgICBlcShjb25zdCBjaGFyX3R5cGUmIF9fYzEsIGNvbnN0IGNoYXJfdHlwZSYgX19j Mik7CgogICAgICBzdGF0aWMgYm9vbAogICAgICBsdChjb25zdCBjaGFyX3R5cGUmIF9fYzEsIGNv bnN0IGNoYXJfdHlwZSYgX19jMik7CgogICAgICBzdGF0aWMgaW50CiAgICAgIGNvbXBhcmUoY29u c3QgY2hhcl90eXBlKiBfX3MxLCBjb25zdCBjaGFyX3R5cGUqIF9fczIsIHNpemVfdCBfX24pOwoK ICAgICAgc3RhdGljIHNpemVfdAogICAgICBsZW5ndGgoY29uc3QgY2hhcl90eXBlKiBfX3MpOwoK ICAgICAgc3RhdGljIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZmluZChjb25zdCBjaGFyX3R5cGUq IF9fcywgc2l6ZV90IF9fbiwgY29uc3QgY2hhcl90eXBlJiBfX2EpOwoKICAgICAgc3RhdGljIGNo YXJfdHlwZSoKICAgICAgbW92ZShjaGFyX3R5cGUqIF9fczEsIGNvbnN0IGNoYXJfdHlwZSogX19z Miwgc2l6ZV90IF9fbik7CgogICAgICBzdGF0aWMgY2hhcl90eXBlKgogICAgICBjb3B5KGNoYXJf dHlwZSogX19zMSwgY29uc3QgY2hhcl90eXBlKiBfX3MyLCBzaXplX3QgX19uKTsKCiAgICAgIHN0 YXRpYyBjaGFyX3R5cGUqCiAgICAgIGFzc2lnbihjaGFyX3R5cGUqIF9fcywgc2l6ZV90IF9fbiwg Y2hhcl90eXBlIF9fYSk7CgogICAgICBzdGF0aWMgY2hhcl90eXBlCiAgICAgIHRvX2NoYXJfdHlw ZShjb25zdCBpbnRfdHlwZSYgX19jKTsKCiAgICAgIHN0YXRpYyBpbnRfdHlwZQogICAgICB0b19p bnRfdHlwZShjb25zdCBjaGFyX3R5cGUmIF9fYyk7CgogICAgICBzdGF0aWMgYm9vbAogICAgICBl cV9pbnRfdHlwZShjb25zdCBpbnRfdHlwZSYgX19jMSwgY29uc3QgaW50X3R5cGUmIF9fYzIpOwoK ICAgICAgc3RhdGljIGludF90eXBlCiAgICAgIGVvZigpOwoKICAgICAgc3RhdGljIGludF90eXBl CiAgICAgIG5vdF9lb2YoY29uc3QgaW50X3R5cGUmIF9fYyk7CiAgICB9OwoKCgogIHRlbXBsYXRl PD4KICAgIHN0cnVjdCBjaGFyX3RyYWl0czxjaGFyPgogICAgewogICAgICB0eXBlZGVmIGNoYXIg Y2hhcl90eXBlOwogICAgICB0eXBlZGVmIGludCBpbnRfdHlwZTsKICAgICAgdHlwZWRlZiBzdHJl YW1wb3MgcG9zX3R5cGU7CiAgICAgIHR5cGVkZWYgc3RyZWFtb2ZmIG9mZl90eXBlOwogICAgICB0 eXBlZGVmIG1ic3RhdGVfdCBzdGF0ZV90eXBlOwoKICAgICAgc3RhdGljIHZvaWQKICAgICAgYXNz aWduKGNoYXJfdHlwZSYgX19jMSwgY29uc3QgY2hhcl90eXBlJiBfX2MyKQogICAgICB7IF9fYzEg PSBfX2MyOyB9CgogICAgICBzdGF0aWMgYm9vbAogICAgICBlcShjb25zdCBjaGFyX3R5cGUmIF9f YzEsIGNvbnN0IGNoYXJfdHlwZSYgX19jMikKICAgICAgeyByZXR1cm4gX19jMSA9PSBfX2MyOyB9 CgogICAgICBzdGF0aWMgYm9vbAogICAgICBsdChjb25zdCBjaGFyX3R5cGUmIF9fYzEsIGNvbnN0 IGNoYXJfdHlwZSYgX19jMikKICAgICAgeyByZXR1cm4gX19jMSA8IF9fYzI7IH0KCiAgICAgIHN0 YXRpYyBpbnQKICAgICAgY29tcGFyZShjb25zdCBjaGFyX3R5cGUqIF9fczEsIGNvbnN0IGNoYXJf dHlwZSogX19zMiwgc2l6ZV90IF9fbikKICAgICAgeyByZXR1cm4gbWVtY21wKF9fczEsIF9fczIs IF9fbik7IH0KCiAgICAgIHN0YXRpYyBzaXplX3QKICAgICAgbGVuZ3RoKGNvbnN0IGNoYXJfdHlw ZSogX19zKQogICAgICB7IHJldHVybiBzdHJsZW4oX19zKTsgfQoKICAgICAgc3RhdGljIGNvbnN0 IGNoYXJfdHlwZSoKICAgICAgZmluZChjb25zdCBjaGFyX3R5cGUqIF9fcywgc2l6ZV90IF9fbiwg Y29uc3QgY2hhcl90eXBlJiBfX2EpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IGNo YXJfdHlwZSo+KG1lbWNocihfX3MsIF9fYSwgX19uKSk7IH0KCiAgICAgIHN0YXRpYyBjaGFyX3R5 cGUqCiAgICAgIG1vdmUoY2hhcl90eXBlKiBfX3MxLCBjb25zdCBjaGFyX3R5cGUqIF9fczIsIHNp emVfdCBfX24pCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGNoYXJfdHlwZSo+KG1lbW1vdmUo X19zMSwgX19zMiwgX19uKSk7IH0KCiAgICAgIHN0YXRpYyBjaGFyX3R5cGUqCiAgICAgIGNvcHko Y2hhcl90eXBlKiBfX3MxLCBjb25zdCBjaGFyX3R5cGUqIF9fczIsIHNpemVfdCBfX24pCiAgICAg IHsgcmV0dXJuIHN0YXRpY19jYXN0PGNoYXJfdHlwZSo+KG1lbWNweShfX3MxLCBfX3MyLCBfX24p KTsgfQoKICAgICAgc3RhdGljIGNoYXJfdHlwZSoKICAgICAgYXNzaWduKGNoYXJfdHlwZSogX19z LCBzaXplX3QgX19uLCBjaGFyX3R5cGUgX19hKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxj aGFyX3R5cGUqPihtZW1zZXQoX19zLCBfX2EsIF9fbikpOyB9CgogICAgICBzdGF0aWMgY2hhcl90 eXBlCiAgICAgIHRvX2NoYXJfdHlwZShjb25zdCBpbnRfdHlwZSYgX19jKQogICAgICB7IHJldHVy biBzdGF0aWNfY2FzdDxjaGFyX3R5cGU+KF9fYyk7IH0KCgoKICAgICAgc3RhdGljIGludF90eXBl CiAgICAgIHRvX2ludF90eXBlKGNvbnN0IGNoYXJfdHlwZSYgX19jKQogICAgICB7IHJldHVybiBz dGF0aWNfY2FzdDxpbnRfdHlwZT4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oX19jKSk7IH0K CiAgICAgIHN0YXRpYyBib29sCiAgICAgIGVxX2ludF90eXBlKGNvbnN0IGludF90eXBlJiBfX2Mx LCBjb25zdCBpbnRfdHlwZSYgX19jMikKICAgICAgeyByZXR1cm4gX19jMSA9PSBfX2MyOyB9Cgog ICAgICBzdGF0aWMgaW50X3R5cGUKICAgICAgZW9mKCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8aW50 X3R5cGU+KCgtMSkpOyB9CgogICAgICBzdGF0aWMgaW50X3R5cGUKICAgICAgbm90X2VvZihjb25z dCBpbnRfdHlwZSYgX19jKQogICAgICB7IHJldHVybiAoX19jID09IGVvZigpKSA/IDAgOiBfX2M7 IH0KICB9OwoKCgogIHRlbXBsYXRlPD4KICAgIHN0cnVjdCBjaGFyX3RyYWl0czx3Y2hhcl90Pgog ICAgewogICAgICB0eXBlZGVmIHdjaGFyX3QgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIHdpbnRf dCBpbnRfdHlwZTsKICAgICAgdHlwZWRlZiBzdHJlYW1vZmYgb2ZmX3R5cGU7CiAgICAgIHR5cGVk ZWYgd3N0cmVhbXBvcyBwb3NfdHlwZTsKICAgICAgdHlwZWRlZiBtYnN0YXRlX3Qgc3RhdGVfdHlw ZTsKCiAgICAgIHN0YXRpYyB2b2lkCiAgICAgIGFzc2lnbihjaGFyX3R5cGUmIF9fYzEsIGNvbnN0 IGNoYXJfdHlwZSYgX19jMikKICAgICAgeyBfX2MxID0gX19jMjsgfQoKICAgICAgc3RhdGljIGJv b2wKICAgICAgZXEoY29uc3QgY2hhcl90eXBlJiBfX2MxLCBjb25zdCBjaGFyX3R5cGUmIF9fYzIp CiAgICAgIHsgcmV0dXJuIF9fYzEgPT0gX19jMjsgfQoKICAgICAgc3RhdGljIGJvb2wKICAgICAg bHQoY29uc3QgY2hhcl90eXBlJiBfX2MxLCBjb25zdCBjaGFyX3R5cGUmIF9fYzIpCiAgICAgIHsg cmV0dXJuIF9fYzEgPCBfX2MyOyB9CgogICAgICBzdGF0aWMgaW50CiAgICAgIGNvbXBhcmUoY29u c3QgY2hhcl90eXBlKiBfX3MxLCBjb25zdCBjaGFyX3R5cGUqIF9fczIsIHNpemVfdCBfX24pCiAg ICAgIHsgcmV0dXJuIHdtZW1jbXAoX19zMSwgX19zMiwgX19uKTsgfQoKICAgICAgc3RhdGljIHNp emVfdAogICAgICBsZW5ndGgoY29uc3QgY2hhcl90eXBlKiBfX3MpCiAgICAgIHsgcmV0dXJuIHdj c2xlbihfX3MpOyB9CgogICAgICBzdGF0aWMgY29uc3QgY2hhcl90eXBlKgogICAgICBmaW5kKGNv bnN0IGNoYXJfdHlwZSogX19zLCBzaXplX3QgX19uLCBjb25zdCBjaGFyX3R5cGUmIF9fYSkKICAg ICAgeyByZXR1cm4gd21lbWNocihfX3MsIF9fYSwgX19uKTsgfQoKICAgICAgc3RhdGljIGNoYXJf dHlwZSoKICAgICAgbW92ZShjaGFyX3R5cGUqIF9fczEsIGNvbnN0IGNoYXJfdHlwZSogX19zMiwg aW50X3R5cGUgX19uKQogICAgICB7IHJldHVybiB3bWVtbW92ZShfX3MxLCBfX3MyLCBfX24pOyB9 CgogICAgICBzdGF0aWMgY2hhcl90eXBlKgogICAgICBjb3B5KGNoYXJfdHlwZSogX19zMSwgY29u c3QgY2hhcl90eXBlKiBfX3MyLCBzaXplX3QgX19uKQogICAgICB7IHJldHVybiB3bWVtY3B5KF9f czEsIF9fczIsIF9fbik7IH0KCiAgICAgIHN0YXRpYyBjaGFyX3R5cGUqCiAgICAgIGFzc2lnbihj aGFyX3R5cGUqIF9fcywgc2l6ZV90IF9fbiwgY2hhcl90eXBlIF9fYSkKICAgICAgeyByZXR1cm4g d21lbXNldChfX3MsIF9fYSwgX19uKTsgfQoKICAgICAgc3RhdGljIGNoYXJfdHlwZQogICAgICB0 b19jaGFyX3R5cGUoY29uc3QgaW50X3R5cGUmIF9fYykgeyByZXR1cm4gY2hhcl90eXBlKF9fYyk7 IH0KCiAgICAgIHN0YXRpYyBpbnRfdHlwZQogICAgICB0b19pbnRfdHlwZShjb25zdCBjaGFyX3R5 cGUmIF9fYykgeyByZXR1cm4gaW50X3R5cGUoX19jKTsgfQoKICAgICAgc3RhdGljIGJvb2wKICAg ICAgZXFfaW50X3R5cGUoY29uc3QgaW50X3R5cGUmIF9fYzEsIGNvbnN0IGludF90eXBlJiBfX2My KQogICAgICB7IHJldHVybiBfX2MxID09IF9fYzI7IH0KCiAgICAgIHN0YXRpYyBpbnRfdHlwZQog ICAgICBlb2YoKSB7IHJldHVybiBzdGF0aWNfY2FzdDxpbnRfdHlwZT4oKDB4ZmZmZmZmZmZ1KSk7 IH0KCiAgICAgIHN0YXRpYyBpbnRfdHlwZQogICAgICBub3RfZW9mKGNvbnN0IGludF90eXBlJiBf X2MpCiAgICAgIHsgcmV0dXJuIGVxX2ludF90eXBlKF9fYywgZW9mKCkpID8gMCA6IF9fYzsgfQog IH07CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBz dHJ1Y3QgX0NoYXJfdHJhaXRzX21hdGNoCiAgICB7CiAgICAgIF9DaGFyVCBfTV9jOwogICAgICBf Q2hhcl90cmFpdHNfbWF0Y2goX0NoYXJUIGNvbnN0JiBfX2MpIDogX01fYyhfX2MpIHsgfQoKICAg ICAgYm9vbAogICAgICBvcGVyYXRvcigpKF9DaGFyVCBjb25zdCYgX19hKSB7IHJldHVybiBfVHJh aXRzOjplcShfTV9jLCBfX2EpOyB9CiAgICB9Owp9CiMgNDcgIi91c3IvaW5jbHVkZS9jKysvMy4y LjEvaW9zIiAyIDMKCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9iaXRzL2xvY2FsZWZ3ZC5o IiAxIDMKIyA0NCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9iaXRzL2xvY2FsZWZ3ZC5oIiAzCgoK IyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL2kzODYtcGMtbGludXgtZ251L2JpdHMvYysrbG9j YWxlLmgiIDEgMwojIDM2ICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL2kzODYtcGMtbGludXgtZ251 L2JpdHMvYysrbG9jYWxlLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL2Nsb2NhbGUi IDEgMwojIDQ4ICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL2Nsb2NhbGUiIDMKCiMgMSAiL3Vzci9p bmNsdWRlL2xvY2FsZS5oIiAxIDMKIyAyOSAiL3Vzci9pbmNsdWRlL2xvY2FsZS5oIiAzCiMgMSAi L3Vzci9saWIvZ2NjLWxpYi9pMzg2LXBjLWxpbnV4LWdudS8zLjIuMS9pbmNsdWRlL3N0ZGRlZi5o IiAxIDMKIyAzMCAiL3Vzci9pbmNsdWRlL2xvY2FsZS5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUv Yml0cy9sb2NhbGUuaCIgMSAzCiMgMjcgIi91c3IvaW5jbHVkZS9iaXRzL2xvY2FsZS5oIiAzCmVu dW0KewogIF9fTENfQ1RZUEUgPSAwLAogIF9fTENfTlVNRVJJQyA9IDEsCiAgX19MQ19USU1FID0g MiwKICBfX0xDX0NPTExBVEUgPSAzLAogIF9fTENfTU9ORVRBUlkgPSA0LAogIF9fTENfTUVTU0FH RVMgPSA1LAogIF9fTENfQUxMID0gNiwKICBfX0xDX1BBUEVSID0gNywKICBfX0xDX05BTUUgPSA4 LAogIF9fTENfQUREUkVTUyA9IDksCiAgX19MQ19URUxFUEhPTkUgPSAxMCwKICBfX0xDX01FQVNV UkVNRU5UID0gMTEsCiAgX19MQ19JREVOVElGSUNBVElPTiA9IDEyCn07CiMgMzEgIi91c3IvaW5j bHVkZS9sb2NhbGUuaCIgMiAzCgpleHRlcm4gIkMiIHsKIyA1MiAiL3Vzci9pbmNsdWRlL2xvY2Fs ZS5oIiAzCnN0cnVjdCBsY29udgp7CgoKICBjaGFyICpkZWNpbWFsX3BvaW50OwogIGNoYXIgKnRo b3VzYW5kc19zZXA7CgoKCgoKICBjaGFyICpncm91cGluZzsKCgoKCgogIGNoYXIgKmludF9jdXJy X3N5bWJvbDsKICBjaGFyICpjdXJyZW5jeV9zeW1ib2w7CiAgY2hhciAqbW9uX2RlY2ltYWxfcG9p bnQ7CiAgY2hhciAqbW9uX3Rob3VzYW5kc19zZXA7CiAgY2hhciAqbW9uX2dyb3VwaW5nOwogIGNo YXIgKnBvc2l0aXZlX3NpZ247CiAgY2hhciAqbmVnYXRpdmVfc2lnbjsKICBjaGFyIGludF9mcmFj X2RpZ2l0czsKICBjaGFyIGZyYWNfZGlnaXRzOwoKICBjaGFyIHBfY3NfcHJlY2VkZXM7CgogIGNo YXIgcF9zZXBfYnlfc3BhY2U7CgogIGNoYXIgbl9jc19wcmVjZWRlczsKCiAgY2hhciBuX3NlcF9i eV9zcGFjZTsKCgoKCgoKICBjaGFyIHBfc2lnbl9wb3NuOwogIGNoYXIgbl9zaWduX3Bvc247CgoK ICBjaGFyIGludF9wX2NzX3ByZWNlZGVzOwoKICBjaGFyIGludF9wX3NlcF9ieV9zcGFjZTsKCiAg Y2hhciBpbnRfbl9jc19wcmVjZWRlczsKCiAgY2hhciBpbnRfbl9zZXBfYnlfc3BhY2U7CgoKCgoK CiAgY2hhciBpbnRfcF9zaWduX3Bvc247CiAgY2hhciBpbnRfbl9zaWduX3Bvc247CiMgMTE5ICIv dXNyL2luY2x1ZGUvbG9jYWxlLmgiIDMKfTsKCgoKZXh0ZXJuIGNoYXIgKnNldGxvY2FsZSAoaW50 IF9fY2F0ZWdvcnksIF9fY29uc3QgY2hhciAqX19sb2NhbGUpIHRocm93ICgpOwoKCmV4dGVybiBz dHJ1Y3QgbGNvbnYgKmxvY2FsZWNvbnYgKHZvaWQpIHRocm93ICgpOwojIDE0OSAiL3Vzci9pbmNs dWRlL2xvY2FsZS5oIiAzCmV4dGVybiBfX2xvY2FsZV90IF9fbmV3bG9jYWxlIChpbnQgX19jYXRl Z29yeV9tYXNrLCBfX2NvbnN0IGNoYXIgKl9fbG9jYWxlLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgX19sb2NhbGVfdCBfX2Jhc2UpIHRocm93ICgpOwoKCgpleHRlcm4gX19sb2NhbGVf dCBfX2R1cGxvY2FsZSAoX19sb2NhbGVfdCBfX2RhdGFzZXQpIHRocm93ICgpOwoKCgpleHRlcm4g dm9pZCBfX2ZyZWVsb2NhbGUgKF9fbG9jYWxlX3QgX19kYXRhc2V0KSB0aHJvdyAoKTsKCgp9CiMg NTAgIi91c3IvaW5jbHVkZS9jKysvMy4yLjEvY2xvY2FsZSIgMiAzCgoKCgoKbmFtZXNwYWNlIHN0 ZAp7CiAgdXNpbmcgOjpsY29udjsKICB1c2luZyA6OnNldGxvY2FsZTsKICB1c2luZyA6OmxvY2Fs ZWNvbnY7Cn0KIyAzNyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9pMzg2LXBjLWxpbnV4LWdudS9i aXRzL2MrK2xvY2FsZS5oIiAyIDMKCgoKbmFtZXNwYWNlIHN0ZAp7CiAgdHlwZWRlZiBpbnQqIF9f Y19sb2NhbGU7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9Udj4KICAgIGludAogICAgX19jb252ZXJ0 X2Zyb21fdihjaGFyKiBfX291dCwgY29uc3QgaW50IF9fc2l6ZSwgY29uc3QgY2hhciogX19mbXQs CiAgICAgICAgICAgICAgICAgICAgIF9UdiBfX3YsIGNvbnN0IF9fY19sb2NhbGUmLCBpbnQgX19w cmVjID0gLTEpCiAgICB7CiAgICAgIGNoYXIqIF9fb2xkID0gc2V0bG9jYWxlKF9fTENfQUxMLCBf X251bGwpOwogICAgICBjaGFyKiBfX3NhdiA9IHN0YXRpY19jYXN0PGNoYXIqPihtYWxsb2Moc3Ry bGVuKF9fb2xkKSArIDEpKTsKICAgICAgaWYgKF9fc2F2KQogICAgICAgIHN0cmNweShfX3Nhdiwg X19vbGQpOwogICAgICBzZXRsb2NhbGUoX19MQ19BTEwsICJDIik7CgogICAgICBpbnQgX19yZXQ7 CgogICAgICBpZiAoX19wcmVjID49IDApCiAgICAgICAgX19yZXQgPSBzbnByaW50ZihfX291dCwg X19zaXplLCBfX2ZtdCwgX19wcmVjLCBfX3YpOwogICAgICBlbHNlCiAgICAgICAgX19yZXQgPSBz bnByaW50ZihfX291dCwgX19zaXplLCBfX2ZtdCwgX192KTsKCgoKCgoKICAgICAgc2V0bG9jYWxl KF9fTENfQUxMLCBfX3Nhdik7CiAgICAgIGZyZWUoX19zYXYpOwogICAgICByZXR1cm4gX19yZXQ7 CiAgICB9Cn0KIyA0NyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9iaXRzL2xvY2FsZWZ3ZC5oIiAy IDMKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL2NsaW1pdHMiIDEgMwojIDQ4ICIvdXNyL2lu Y2x1ZGUvYysrLzMuMi4xL2NsaW1pdHMiIDMKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LXBj LWxpbnV4LWdudS8zLjIuMS9pbmNsdWRlL2xpbWl0cy5oIiAxIDMKIyAxMSAiL3Vzci9saWIvZ2Nj LWxpYi9pMzg2LXBjLWxpbnV4LWdudS8zLjIuMS9pbmNsdWRlL2xpbWl0cy5oIiAzCiMgMSAiL3Vz ci9saWIvZ2NjLWxpYi9pMzg2LXBjLWxpbnV4LWdudS8zLjIuMS9pbmNsdWRlL3N5c2xpbWl0cy5o IiAxIDMKCgoKCgoKIyAxICIvdXNyL2xpYi9nY2MtbGliL2kzODYtcGMtbGludXgtZ251LzMuMi4x L2luY2x1ZGUvbGltaXRzLmgiIDEgMwojIDEzMiAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LXBjLWxp bnV4LWdudS8zLjIuMS9pbmNsdWRlL2xpbWl0cy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2xpbWl0 cy5oIiAxIDMKIyAxNDQgIi91c3IvaW5jbHVkZS9saW1pdHMuaCIgMwojIDEgIi91c3IvaW5jbHVk ZS9iaXRzL3Bvc2l4MV9saW0uaCIgMSAzCiMgMTI2ICIvdXNyL2luY2x1ZGUvYml0cy9wb3NpeDFf bGltLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9sb2NhbF9saW0uaCIgMSAzCiMgMzYgIi91 c3IvaW5jbHVkZS9iaXRzL2xvY2FsX2xpbS5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2xpbnV4L2xp bWl0cy5oIiAxIDMKIyAzNyAiL3Vzci9pbmNsdWRlL2JpdHMvbG9jYWxfbGltLmgiIDIgMwojIDEy NyAiL3Vzci9pbmNsdWRlL2JpdHMvcG9zaXgxX2xpbS5oIiAyIDMKIyAxNDUgIi91c3IvaW5jbHVk ZS9saW1pdHMuaCIgMiAzCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvcG9zaXgyX2xpbS5oIiAx IDMKIyAxNDkgIi91c3IvaW5jbHVkZS9saW1pdHMuaCIgMiAzCgoKCiMgMSAiL3Vzci9pbmNsdWRl L2JpdHMveG9wZW5fbGltLmgiIDEgMwojIDM0ICIvdXNyL2luY2x1ZGUvYml0cy94b3Blbl9saW0u aCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3N0ZGlvX2xpbS5oIiAxIDMKIyAzNSAiL3Vzci9p bmNsdWRlL2JpdHMveG9wZW5fbGltLmgiIDIgMwojIDEzNiAiL3Vzci9pbmNsdWRlL2JpdHMveG9w ZW5fbGltLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy93b3Jkc2l6ZS5oIiAxIDMKIyAxMzcg Ii91c3IvaW5jbHVkZS9iaXRzL3hvcGVuX2xpbS5oIiAyIDMKIyAxNTMgIi91c3IvaW5jbHVkZS9s aW1pdHMuaCIgMiAzCiMgMTMzICIvdXNyL2xpYi9nY2MtbGliL2kzODYtcGMtbGludXgtZ251LzMu Mi4xL2luY2x1ZGUvbGltaXRzLmgiIDIgMwojIDggIi91c3IvbGliL2djYy1saWIvaTM4Ni1wYy1s aW51eC1nbnUvMy4yLjEvaW5jbHVkZS9zeXNsaW1pdHMuaCIgMiAzCiMgMTIgIi91c3IvbGliL2dj Yy1saWIvaTM4Ni1wYy1saW51eC1nbnUvMy4yLjEvaW5jbHVkZS9saW1pdHMuaCIgMiAzCiMgNTAg Ii91c3IvaW5jbHVkZS9jKysvMy4yLjEvY2xpbWl0cyIgMiAzCiMgNDggIi91c3IvaW5jbHVkZS9j KysvMy4yLjEvYml0cy9sb2NhbGVmd2QuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIu MS9jY3R5cGUiIDEgMwojIDQ3ICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL2NjdHlwZSIgMwoKCiMg MSAiL3Vzci9pbmNsdWRlL2N0eXBlLmgiIDEgMwojIDI5ICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIg MwpleHRlcm4gIkMiIHsKIyA0MCAiL3Vzci9pbmNsdWRlL2N0eXBlLmgiIDMKIyAxICIvdXNyL2lu Y2x1ZGUvZW5kaWFuLmgiIDEgMwojIDM3ICIvdXNyL2luY2x1ZGUvZW5kaWFuLmgiIDMKIyAxICIv dXNyL2luY2x1ZGUvYml0cy9lbmRpYW4uaCIgMSAzCiMgMzggIi91c3IvaW5jbHVkZS9lbmRpYW4u aCIgMiAzCiMgNDEgIi91c3IvaW5jbHVkZS9jdHlwZS5oIiAyIDMKCgoKCgoKZW51bQp7CiAgX0lT dXBwZXIgPSAoKDApIDwgOCA/ICgoMSA8PCAoMCkpIDw8IDgpIDogKCgxIDw8ICgwKSkgPj4gOCkp LAogIF9JU2xvd2VyID0gKCgxKSA8IDggPyAoKDEgPDwgKDEpKSA8PCA4KSA6ICgoMSA8PCAoMSkp ID4+IDgpKSwKICBfSVNhbHBoYSA9ICgoMikgPCA4ID8gKCgxIDw8ICgyKSkgPDwgOCkgOiAoKDEg PDwgKDIpKSA+PiA4KSksCiAgX0lTZGlnaXQgPSAoKDMpIDwgOCA/ICgoMSA8PCAoMykpIDw8IDgp IDogKCgxIDw8ICgzKSkgPj4gOCkpLAogIF9JU3hkaWdpdCA9ICgoNCkgPCA4ID8gKCgxIDw8ICg0 KSkgPDwgOCkgOiAoKDEgPDwgKDQpKSA+PiA4KSksCiAgX0lTc3BhY2UgPSAoKDUpIDwgOCA/ICgo MSA8PCAoNSkpIDw8IDgpIDogKCgxIDw8ICg1KSkgPj4gOCkpLAogIF9JU3ByaW50ID0gKCg2KSA8 IDggPyAoKDEgPDwgKDYpKSA8PCA4KSA6ICgoMSA8PCAoNikpID4+IDgpKSwKICBfSVNncmFwaCA9 ICgoNykgPCA4ID8gKCgxIDw8ICg3KSkgPDwgOCkgOiAoKDEgPDwgKDcpKSA+PiA4KSksCiAgX0lT YmxhbmsgPSAoKDgpIDwgOCA/ICgoMSA8PCAoOCkpIDw8IDgpIDogKCgxIDw8ICg4KSkgPj4gOCkp LAogIF9JU2NudHJsID0gKCg5KSA8IDggPyAoKDEgPDwgKDkpKSA8PCA4KSA6ICgoMSA8PCAoOSkp ID4+IDgpKSwKICBfSVNwdW5jdCA9ICgoMTApIDwgOCA/ICgoMSA8PCAoMTApKSA8PCA4KSA6ICgo MSA8PCAoMTApKSA+PiA4KSksCiAgX0lTYWxudW0gPSAoKDExKSA8IDggPyAoKDEgPDwgKDExKSkg PDwgOCkgOiAoKDEgPDwgKDExKSkgPj4gOCkpCn07CiMgNzUgIi91c3IvaW5jbHVkZS9jdHlwZS5o IiAzCmV4dGVybiBfX2NvbnN0IHVuc2lnbmVkIHNob3J0IGludCAqX19jdHlwZV9iOwpleHRlcm4g X19jb25zdCBfX2ludDMyX3QgKl9fY3R5cGVfdG9sb3dlcjsKZXh0ZXJuIF9fY29uc3QgX19pbnQz Ml90ICpfX2N0eXBlX3RvdXBwZXI7CiMgOTEgIi91c3IvaW5jbHVkZS9jdHlwZS5oIiAzCmV4dGVy biBpbnQgaXNhbG51bSAoaW50KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBpc2FscGhhIChpbnQpIHRo cm93ICgpOwpleHRlcm4gaW50IGlzY250cmwgKGludCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgaXNk aWdpdCAoaW50KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBpc2xvd2VyIChpbnQpIHRocm93ICgpOwpl eHRlcm4gaW50IGlzZ3JhcGggKGludCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgaXNwcmludCAoaW50 KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBpc3B1bmN0IChpbnQpIHRocm93ICgpOwpleHRlcm4gaW50 IGlzc3BhY2UgKGludCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgaXN1cHBlciAoaW50KSB0aHJvdyAo KTsKZXh0ZXJuIGludCBpc3hkaWdpdCAoaW50KSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IGlzYmxh bmsgKGludCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IHRvbG93ZXIgKGludCBfX2MpIHRocm93 ICgpOwoKCmV4dGVybiBpbnQgdG91cHBlciAoaW50IF9fYykgdGhyb3cgKCk7CgoKCgoKCmV4dGVy biBpbnQgaXNhc2NpaSAoaW50IF9fYykgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgdG9hc2NpaSAo aW50IF9fYykgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgX3RvdXBwZXIgKGludCkgdGhyb3cgKCk7 CmV4dGVybiBpbnQgX3RvbG93ZXIgKGludCkgdGhyb3cgKCk7CiMgMjI0ICIvdXNyL2luY2x1ZGUv Y3R5cGUuaCIgMwpleHRlcm4gaW50IF9faXNhbG51bV9sIChpbnQsIF9fbG9jYWxlX3QpIHRocm93 ICgpOwpleHRlcm4gaW50IF9faXNhbHBoYV9sIChpbnQsIF9fbG9jYWxlX3QpIHRocm93ICgpOwpl eHRlcm4gaW50IF9faXNjbnRybF9sIChpbnQsIF9fbG9jYWxlX3QpIHRocm93ICgpOwpleHRlcm4g aW50IF9faXNkaWdpdF9sIChpbnQsIF9fbG9jYWxlX3QpIHRocm93ICgpOwpleHRlcm4gaW50IF9f aXNsb3dlcl9sIChpbnQsIF9fbG9jYWxlX3QpIHRocm93ICgpOwpleHRlcm4gaW50IF9faXNncmFw aF9sIChpbnQsIF9fbG9jYWxlX3QpIHRocm93ICgpOwpleHRlcm4gaW50IF9faXNwcmludF9sIChp bnQsIF9fbG9jYWxlX3QpIHRocm93ICgpOwpleHRlcm4gaW50IF9faXNwdW5jdF9sIChpbnQsIF9f bG9jYWxlX3QpIHRocm93ICgpOwpleHRlcm4gaW50IF9faXNzcGFjZV9sIChpbnQsIF9fbG9jYWxl X3QpIHRocm93ICgpOwpleHRlcm4gaW50IF9faXN1cHBlcl9sIChpbnQsIF9fbG9jYWxlX3QpIHRo cm93ICgpOwpleHRlcm4gaW50IF9faXN4ZGlnaXRfbCAoaW50LCBfX2xvY2FsZV90KSB0aHJvdyAo KTsKCmV4dGVybiBpbnQgX19pc2JsYW5rX2wgKGludCwgX19sb2NhbGVfdCkgdGhyb3cgKCk7CgoK CmV4dGVybiBpbnQgX190b2xvd2VyX2wgKGludCBfX2MsIF9fbG9jYWxlX3QgX19sKSB0aHJvdyAo KTsKCgpleHRlcm4gaW50IF9fdG91cHBlcl9sIChpbnQgX19jLCBfX2xvY2FsZV90IF9fbCkgdGhy b3cgKCk7CiMgMjc3ICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIgMwp9CiMgNTAgIi91c3IvaW5jbHVk ZS9jKysvMy4yLjEvY2N0eXBlIiAyIDMKIyA2NiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9jY3R5 cGUiIDMKbmFtZXNwYWNlIHN0ZAp7CiAgdXNpbmcgOjppc2FsbnVtOwogIHVzaW5nIDo6aXNhbHBo YTsKICB1c2luZyA6OmlzY250cmw7CiAgdXNpbmcgOjppc2RpZ2l0OwogIHVzaW5nIDo6aXNncmFw aDsKICB1c2luZyA6OmlzbG93ZXI7CiAgdXNpbmcgOjppc3ByaW50OwogIHVzaW5nIDo6aXNwdW5j dDsKICB1c2luZyA6Omlzc3BhY2U7CiAgdXNpbmcgOjppc3VwcGVyOwogIHVzaW5nIDo6aXN4ZGln aXQ7CiAgdXNpbmcgOjp0b2xvd2VyOwogIHVzaW5nIDo6dG91cHBlcjsKfQojIDQ5ICIvdXNyL2lu Y2x1ZGUvYysrLzMuMi4xL2JpdHMvbG9jYWxlZndkLmgiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9j KysvMy4yLjEvc3RyaW5nIiAxIDMKIyA0NCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9zdHJpbmci IDMKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9tZW1vcnkiIDEgMwojIDUzICIvdXNy L2luY2x1ZGUvYysrLzMuMi4xL21lbW9yeSIgMwoKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi4x L2JpdHMvc3RsX2FsZ29iYXNlLmgiIDEgMwojIDY3ICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL2Jp dHMvc3RsX2FsZ29iYXNlLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL2NzdGRsaWIi IDEgMwojIDQ4ICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL2NzdGRsaWIiIDMKCgoKCiMgMSAiL3Vz ci9pbmNsdWRlL3N0ZGxpYi5oIiAxIDMKIyAzMyAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCiMg MSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LXBjLWxpbnV4LWdudS8zLjIuMS9pbmNsdWRlL3N0ZGRl Zi5oIiAxIDMKIyAzNCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAyIDMKCmV4dGVybiAiQyIgewoK CgoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3dhaXRmbGFncy5oIiAxIDMKIyA0MyAiL3Vzci9p bmNsdWRlL3N0ZGxpYi5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy93YWl0c3RhdHVzLmgi IDEgMwojIDY1ICIvdXNyL2luY2x1ZGUvYml0cy93YWl0c3RhdHVzLmgiIDMKdW5pb24gd2FpdAog IHsKICAgIGludCB3X3N0YXR1czsKICAgIHN0cnVjdAogICAgICB7CgogICAgICAgIHVuc2lnbmVk IGludCBfX3dfdGVybXNpZzo3OwogICAgICAgIHVuc2lnbmVkIGludCBfX3dfY29yZWR1bXA6MTsK ICAgICAgICB1bnNpZ25lZCBpbnQgX193X3JldGNvZGU6ODsKICAgICAgICB1bnNpZ25lZCBpbnQ6 MTY7CgoKCgoKCgogICAgICB9IF9fd2FpdF90ZXJtaW5hdGVkOwogICAgc3RydWN0CiAgICAgIHsK CiAgICAgICAgdW5zaWduZWQgaW50IF9fd19zdG9wdmFsOjg7CiAgICAgICAgdW5zaWduZWQgaW50 IF9fd19zdG9wc2lnOjg7CiAgICAgICAgdW5zaWduZWQgaW50OjE2OwoKCgoKCgogICAgICB9IF9f d2FpdF9zdG9wcGVkOwogIH07CiMgNDQgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMiAzCiMgOTQg Ii91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwp0eXBlZGVmIHN0cnVjdAogIHsKICAgIGludCBxdW90 OwogICAgaW50IHJlbTsKICB9IGRpdl90OwoKCgp0eXBlZGVmIHN0cnVjdAogIHsKICAgIGxvbmcg aW50IHF1b3Q7CiAgICBsb25nIGludCByZW07CiAgfSBsZGl2X3Q7CgoKCgoKX19leHRlbnNpb25f XyB0eXBlZGVmIHN0cnVjdAogIHsKICAgIGxvbmcgbG9uZyBpbnQgcXVvdDsKICAgIGxvbmcgbG9u ZyBpbnQgcmVtOwogIH0gbGxkaXZfdDsKIyAxMzMgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpl eHRlcm4gc2l6ZV90IF9fY3R5cGVfZ2V0X21iX2N1cl9tYXggKHZvaWQpIHRocm93ICgpOwoKCgpl eHRlcm4gZG91YmxlIGF0b2YgKF9fY29uc3QgY2hhciAqX19ucHRyKSB0aHJvdyAoKSBfX2F0dHJp YnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBpbnQgYXRvaSAoX19jb25zdCBjaGFyICpfX25w dHIpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIGxvbmcgaW50 IGF0b2wgKF9fY29uc3QgY2hhciAqX19ucHRyKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19w dXJlX18pKTsKCgoKX19leHRlbnNpb25fXyBleHRlcm4gbG9uZyBsb25nIGludCBhdG9sbCAoX19j b25zdCBjaGFyICpfX25wdHIpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9f KSk7CgoKCmV4dGVybiBkb3VibGUgc3RydG9kIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19u cHRyLAogICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIpIHRo cm93ICgpOwoKCgpleHRlcm4gZmxvYXQgc3RydG9mIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3Qg X19ucHRyLAogICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0cikg dGhyb3cgKCk7CgpleHRlcm4gbG9uZyBkb3VibGUgc3RydG9sZCAoX19jb25zdCBjaGFyICpfX3Jl c3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3Ry aWN0IF9fZW5kcHRyKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGxvbmcgaW50IHN0cnRvbCAoX19jb25z dCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAq Kl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpIHRocm93ICgpOwoKZXh0ZXJuIHVuc2ln bmVkIGxvbmcgaW50IHN0cnRvdWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0 ciwgaW50IF9fYmFzZSkKICAgICB0aHJvdyAoKTsKCgoKX19leHRlbnNpb25fXwpleHRlcm4gbG9u ZyBsb25nIGludCBzdHJ0b3EgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBf X2Jhc2UpIHRocm93ICgpOwoKX19leHRlbnNpb25fXwpleHRlcm4gdW5zaWduZWQgbG9uZyBsb25n IGludCBzdHJ0b3VxIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwg aW50IF9fYmFzZSkKICAgICB0aHJvdyAoKTsKCgoKCgoKX19leHRlbnNpb25fXwpleHRlcm4gbG9u ZyBsb25nIGludCBzdHJ0b2xsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50 IF9fYmFzZSkgdGhyb3cgKCk7CgpfX2V4dGVuc2lvbl9fCmV4dGVybiB1bnNpZ25lZCBsb25nIGxv bmcgaW50IHN0cnRvdWxsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRw dHIsIGludCBfX2Jhc2UpCiAgICAgdGhyb3cgKCk7CiMgMjE1ICIvdXNyL2luY2x1ZGUvc3RkbGli LmgiIDMKZXh0ZXJuIGxvbmcgaW50IF9fc3RydG9sX2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmlj dCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBf X2VuZHB0ciwgaW50IF9fYmFzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbG9jYWxl X3QgX19sb2MpIHRocm93ICgpOwoKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW50IF9fc3RydG91bF9s IChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2Jhc2UsIF9fbG9jYWxlX3QgX19sb2MpIHRo cm93ICgpOwoKX19leHRlbnNpb25fXwpleHRlcm4gbG9uZyBsb25nIGludCBfX3N0cnRvbGxfbCAo X19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7Cgpf X2V4dGVuc2lvbl9fCmV4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IF9fc3RydG91bGxfbCAo X19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNlLCBfX2xvY2FsZV90 IF9fbG9jKQogICAgIHRocm93ICgpOwoKZXh0ZXJuIGRvdWJsZSBfX3N0cnRvZF9sIChfX2NvbnN0 IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIg KipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBfX2xvY2FsZV90IF9fbG9jKQogICAgIHRocm93ICgpOwoK ZXh0ZXJuIGZsb2F0IF9fc3RydG9mX2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIs CiAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgX19s b2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7CgpleHRlcm4gbG9uZyBkb3VibGUgX19zdHJ0b2xkX2wg KF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBkb3Vi bGUgX19zdHJ0b2RfaW50ZXJuYWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRy LCBpbnQgX19ncm91cCkKICAgICB0aHJvdyAoKTsKZXh0ZXJuIGZsb2F0IF9fc3RydG9mX2ludGVy bmFsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19ncm91cCkKICAg ICB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcgZG91YmxlIF9fc3RydG9sZF9pbnRlcm5hbCAoX19jb25z dCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGludCBfX2dyb3VwKSB0aHJvdyAoKTsKCmV4dGVybiBsb25nIGlu dCBfX3N0cnRvbF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0 ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNlLCBpbnQgX19n cm91cCkgdGhyb3cgKCk7CgoKCmV4dGVybiB1bnNpZ25lZCBsb25nIGludCBfX3N0cnRvdWxfaW50 ZXJuYWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNlLCBp bnQgX19ncm91cCkgdGhyb3cgKCk7CgoKCgpfX2V4dGVuc2lvbl9fCmV4dGVybiBsb25nIGxvbmcg aW50IF9fc3RydG9sbF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmlj dCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg X19iYXNlLCBpbnQgX19ncm91cCkgdGhyb3cgKCk7CgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIHVu c2lnbmVkIGxvbmcgbG9uZyBpbnQgX19zdHJ0b3VsbF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICoK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19yZXN0 cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNlLCBpbnQgX19ncm91cCkKICAg ICB0aHJvdyAoKTsKIyAyOTQgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gX19pbmxp bmUgZG91YmxlCnN0cnRvZCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAq Kl9fcmVzdHJpY3QgX19lbmRwdHIpIHRocm93ICgpCnsKICByZXR1cm4gX19zdHJ0b2RfaW50ZXJu YWwgKF9fbnB0ciwgX19lbmRwdHIsIDApOwp9CmV4dGVybiBfX2lubGluZSBsb25nIGludApzdHJ0 b2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9f ZW5kcHRyLAogICAgICAgIGludCBfX2Jhc2UpIHRocm93ICgpCnsKICByZXR1cm4gX19zdHJ0b2xf aW50ZXJuYWwgKF9fbnB0ciwgX19lbmRwdHIsIF9fYmFzZSwgMCk7Cn0KZXh0ZXJuIF9faW5saW5l IHVuc2lnbmVkIGxvbmcgaW50CnN0cnRvdWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25w dHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICBpbnQgX19iYXNlKSB0aHJv dyAoKQp7CiAgcmV0dXJuIF9fc3RydG91bF9pbnRlcm5hbCAoX19ucHRyLCBfX2VuZHB0ciwgX19i YXNlLCAwKTsKfQoKCmV4dGVybiBfX2lubGluZSBmbG9hdApzdHJ0b2YgKF9fY29uc3QgY2hhciAq X19yZXN0cmljdCBfX25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyKSB0aHJvdyAoKQp7 CiAgcmV0dXJuIF9fc3RydG9mX2ludGVybmFsIChfX25wdHIsIF9fZW5kcHRyLCAwKTsKfQpleHRl cm4gX19pbmxpbmUgbG9uZyBkb3VibGUKc3RydG9sZCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0 IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIpIHRocm93ICgpCnsKICByZXR1cm4g X19zdHJ0b2xkX2ludGVybmFsIChfX25wdHIsIF9fZW5kcHRyLCAwKTsKfQoKCgpfX2V4dGVuc2lv bl9fIGV4dGVybiBfX2lubGluZSBsb25nIGxvbmcgaW50CnN0cnRvcSAoX19jb25zdCBjaGFyICpf X3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgaW50 IF9fYmFzZSkgdGhyb3cgKCkKewogIHJldHVybiBfX3N0cnRvbGxfaW50ZXJuYWwgKF9fbnB0ciwg X19lbmRwdHIsIF9fYmFzZSwgMCk7Cn0KX19leHRlbnNpb25fXyBleHRlcm4gX19pbmxpbmUgdW5z aWduZWQgbG9uZyBsb25nIGludApzdHJ0b3VxIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19u cHRyLCBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgaW50IF9fYmFzZSkgdGhy b3cgKCkKewogIHJldHVybiBfX3N0cnRvdWxsX2ludGVybmFsIChfX25wdHIsIF9fZW5kcHRyLCBf X2Jhc2UsIDApOwp9CgoKCl9fZXh0ZW5zaW9uX18gZXh0ZXJuIF9faW5saW5lIGxvbmcgbG9uZyBp bnQKc3RydG9sbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVz dHJpY3QgX19lbmRwdHIsCiAgICAgICAgIGludCBfX2Jhc2UpIHRocm93ICgpCnsKICByZXR1cm4g X19zdHJ0b2xsX2ludGVybmFsIChfX25wdHIsIF9fZW5kcHRyLCBfX2Jhc2UsIDApOwp9Cl9fZXh0 ZW5zaW9uX18gZXh0ZXJuIF9faW5saW5lIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQKc3RydG91bGwg KF9fY29uc3QgY2hhciAqIF9fcmVzdHJpY3QgX19ucHRyLCBjaGFyICoqX19yZXN0cmljdCBfX2Vu ZHB0ciwKICAgICAgICAgIGludCBfX2Jhc2UpIHRocm93ICgpCnsKICByZXR1cm4gX19zdHJ0b3Vs bF9pbnRlcm5hbCAoX19ucHRyLCBfX2VuZHB0ciwgX19iYXNlLCAwKTsKfQoKCmV4dGVybiBfX2lu bGluZSBkb3VibGUKYXRvZiAoX19jb25zdCBjaGFyICpfX25wdHIpIHRocm93ICgpCnsKICByZXR1 cm4gc3RydG9kIChfX25wdHIsIChjaGFyICoqKSBfX251bGwpOwp9CmV4dGVybiBfX2lubGluZSBp bnQKYXRvaSAoX19jb25zdCBjaGFyICpfX25wdHIpIHRocm93ICgpCnsKICByZXR1cm4gKGludCkg c3RydG9sIChfX25wdHIsIChjaGFyICoqKSBfX251bGwsIDEwKTsKfQpleHRlcm4gX19pbmxpbmUg bG9uZyBpbnQKYXRvbCAoX19jb25zdCBjaGFyICpfX25wdHIpIHRocm93ICgpCnsKICByZXR1cm4g c3RydG9sIChfX25wdHIsIChjaGFyICoqKSBfX251bGwsIDEwKTsKfQoKCl9fZXh0ZW5zaW9uX18g ZXh0ZXJuIF9faW5saW5lIGxvbmcgbG9uZyBpbnQKYXRvbGwgKF9fY29uc3QgY2hhciAqX19ucHRy KSB0aHJvdyAoKQp7CiAgcmV0dXJuIHN0cnRvbGwgKF9fbnB0ciwgKGNoYXIgKiopIF9fbnVsbCwg MTApOwp9CiMgMzg1ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIGNoYXIgKmw2NGEg KGxvbmcgaW50IF9fbikgdGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcgaW50IGE2NGwgKF9fY29uc3Qg Y2hhciAqX19zKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgojIDEgIi91 c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMSAzCiMgMjggIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMu aCIgMwpleHRlcm4gIkMiIHsKCgoKCnR5cGVkZWYgX191X2NoYXIgdV9jaGFyOwp0eXBlZGVmIF9f dV9zaG9ydCB1X3Nob3J0Owp0eXBlZGVmIF9fdV9pbnQgdV9pbnQ7CnR5cGVkZWYgX191X2xvbmcg dV9sb25nOwp0eXBlZGVmIF9fcXVhZF90IHF1YWRfdDsKdHlwZWRlZiBfX3VfcXVhZF90IHVfcXVh ZF90Owp0eXBlZGVmIF9fZnNpZF90IGZzaWRfdDsKCgp0eXBlZGVmIF9fbG9mZl90IGxvZmZfdDsK CgoKdHlwZWRlZiBfX2lub190IGlub190OwoKCgoKCgp0eXBlZGVmIF9faW5vNjRfdCBpbm82NF90 OwoKCgoKdHlwZWRlZiBfX2Rldl90IGRldl90OwoKCgoKdHlwZWRlZiBfX2dpZF90IGdpZF90OwoK CgoKdHlwZWRlZiBfX21vZGVfdCBtb2RlX3Q7CgoKCgp0eXBlZGVmIF9fbmxpbmtfdCBubGlua190 OwoKCgoKdHlwZWRlZiBfX3VpZF90IHVpZF90OwoKCgoKCnR5cGVkZWYgX19vZmZfdCBvZmZfdDsK CgoKCgoKdHlwZWRlZiBfX29mZjY0X3Qgb2ZmNjRfdDsKIyAxMDEgIi91c3IvaW5jbHVkZS9zeXMv dHlwZXMuaCIgMwp0eXBlZGVmIF9faWRfdCBpZF90OwoKCgoKdHlwZWRlZiBfX3NzaXplX3Qgc3Np emVfdDsKCgoKCnR5cGVkZWYgX19kYWRkcl90IGRhZGRyX3Q7CnR5cGVkZWYgX19jYWRkcl90IGNh ZGRyX3Q7CgoKCnR5cGVkZWYgX19rZXlfdCBrZXlfdDsKIyAxMzAgIi91c3IvaW5jbHVkZS9zeXMv dHlwZXMuaCIgMwp0eXBlZGVmIF9fdXNlY29uZHNfdCB1c2Vjb25kc190OwoKCgp0eXBlZGVmIF9f c3VzZWNvbmRzX3Qgc3VzZWNvbmRzX3Q7CgoKCgoKIyAxICIvdXNyL2xpYi9nY2MtbGliL2kzODYt cGMtbGludXgtZ251LzMuMi4xL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDE0MSAiL3Vzci9pbmNs dWRlL3N5cy90eXBlcy5oIiAyIDMKCgoKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCB1bG9uZzsK dHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBpbnQgdXNob3J0Owp0eXBlZGVmIHVuc2lnbmVkIGludCB1 aW50OwojIDE4NCAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAzCnR5cGVkZWYgaW50IGludDhf dCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fUUlfXykpKTsKdHlwZWRlZiBpbnQgaW50MTZf dCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fSElfXykpKTsKdHlwZWRlZiBpbnQgaW50MzJf dCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fU0lfXykpKTsKdHlwZWRlZiBpbnQgaW50NjRf dCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fRElfXykpKTsKCgp0eXBlZGVmIHVuc2lnbmVk IGludCB1X2ludDhfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fUUlfXykpKTsKdHlwZWRl ZiB1bnNpZ25lZCBpbnQgdV9pbnQxNl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19ISV9f KSkpOwp0eXBlZGVmIHVuc2lnbmVkIGludCB1X2ludDMyX3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9k ZV9fIChfX1NJX18pKSk7CnR5cGVkZWYgdW5zaWduZWQgaW50IHVfaW50NjRfdCBfX2F0dHJpYnV0 ZV9fICgoX19tb2RlX18gKF9fRElfXykpKTsKCnR5cGVkZWYgaW50IHJlZ2lzdGVyX3QgX19hdHRy aWJ1dGVfXyAoKF9fbW9kZV9fIChfX3dvcmRfXykpKTsKIyAyMDkgIi91c3IvaW5jbHVkZS9zeXMv dHlwZXMuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDEgMwojIDMxICIvdXNy L2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc2VsZWN0Lmgi IDEgMwojIDMyICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAyIDMKCgojIDEgIi91c3IvaW5j bHVkZS9iaXRzL3NpZ3NldC5oIiAxIDMKIyAzNSAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIg MiAzCiMgNDUgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUv Yml0cy90aW1lLmgiIDEgMwojIDY3ICIvdXNyL2luY2x1ZGUvYml0cy90aW1lLmgiIDMKc3RydWN0 IHRpbWV2YWwKICB7CiAgICBfX3RpbWVfdCB0dl9zZWM7CiAgICBfX3N1c2Vjb25kc190IHR2X3Vz ZWM7CiAgfTsKIyA0NiAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMiAzCgoKCnR5cGVkZWYg bG9uZyBpbnQgX19mZF9tYXNrOwoKCgoKCgoKdHlwZWRlZiBzdHJ1Y3QKICB7CgoKCiAgICBfX2Zk X21hc2sgZmRzX2JpdHNbMTAyNCAvICg4ICogc2l6ZW9mIChfX2ZkX21hc2spKV07CgoKCgoKICB9 IGZkX3NldDsKCgoKCgoKdHlwZWRlZiBfX2ZkX21hc2sgZmRfbWFzazsKIyA4OSAiL3Vzci9pbmNs dWRlL3N5cy9zZWxlY3QuaCIgMwpleHRlcm4gIkMiIHsKCgoKCgoKZXh0ZXJuIGludCBzZWxlY3Qg KGludCBfX25mZHMsIGZkX3NldCAqX19yZXN0cmljdCBfX3JlYWRmZHMsCiAgICAgICAgICAgICAg ICAgICBmZF9zZXQgKl9fcmVzdHJpY3QgX193cml0ZWZkcywKICAgICAgICAgICAgICAgICAgIGZk X3NldCAqX19yZXN0cmljdCBfX2V4Y2VwdGZkcywKICAgICAgICAgICAgICAgICAgIHN0cnVjdCB0 aW1ldmFsICpfX3Jlc3RyaWN0IF9fdGltZW91dCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBw c2VsZWN0IChpbnQgX19uZmRzLCBmZF9zZXQgKl9fcmVzdHJpY3QgX19yZWFkZmRzLAogICAgICAg ICAgICAgICAgICAgIGZkX3NldCAqX19yZXN0cmljdCBfX3dyaXRlZmRzLAogICAgICAgICAgICAg ICAgICAgIGZkX3NldCAqX19yZXN0cmljdCBfX2V4Y2VwdGZkcywKICAgICAgICAgICAgICAgICAg ICBjb25zdCBzdHJ1Y3QgdGltZXNwZWMgKl9fcmVzdHJpY3QgX190aW1lb3V0LAogICAgICAgICAg ICAgICAgICAgIGNvbnN0IF9fc2lnc2V0X3QgKl9fcmVzdHJpY3QgX19zaWdtYXNrKSB0aHJvdyAo KTsKCgp9CiMgMjEwICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMwoKCiMgMSAiL3Vzci9p bmNsdWRlL3N5cy9zeXNtYWNyb3MuaCIgMSAzCiMgMjEzICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVz LmgiIDIgMwoKCgoKdHlwZWRlZiBfX2Jsa3NpemVfdCBibGtzaXplX3Q7CgoKCgoKCnR5cGVkZWYg X19ibGtjbnRfdCBibGtjbnRfdDsKCgoKdHlwZWRlZiBfX2ZzYmxrY250X3QgZnNibGtjbnRfdDsK CgoKdHlwZWRlZiBfX2ZzZmlsY250X3QgZnNmaWxjbnRfdDsKIyAyNTEgIi91c3IvaW5jbHVkZS9z eXMvdHlwZXMuaCIgMwp0eXBlZGVmIF9fYmxrY250NjRfdCBibGtjbnQ2NF90Owp0eXBlZGVmIF9f ZnNibGtjbnQ2NF90IGZzYmxrY250NjRfdDsKdHlwZWRlZiBfX2ZzZmlsY250NjRfdCBmc2ZpbGNu dDY0X3Q7CgoKfQojIDM5MiAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAyIDMKCgoKCgoKZXh0ZXJu IGxvbmcgaW50IHJhbmRvbSAodm9pZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIHZvaWQgc3JhbmRvbSAo dW5zaWduZWQgaW50IF9fc2VlZCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGNoYXIgKmluaXRzdGF0 ZSAodW5zaWduZWQgaW50IF9fc2VlZCwgY2hhciAqX19zdGF0ZWJ1ZiwKICAgICAgICAgICAgICAg ICAgICAgICAgc2l6ZV90IF9fc3RhdGVsZW4pIHRocm93ICgpOwoKCgpleHRlcm4gY2hhciAqc2V0 c3RhdGUgKGNoYXIgKl9fc3RhdGVidWYpIHRocm93ICgpOwoKCgoKCgoKc3RydWN0IHJhbmRvbV9k YXRhCiAgewogICAgaW50MzJfdCAqZnB0cjsKICAgIGludDMyX3QgKnJwdHI7CiAgICBpbnQzMl90 ICpzdGF0ZTsKICAgIGludCByYW5kX3R5cGU7CiAgICBpbnQgcmFuZF9kZWc7CiAgICBpbnQgcmFu ZF9zZXA7CiAgICBpbnQzMl90ICplbmRfcHRyOwogIH07CgpleHRlcm4gaW50IHJhbmRvbV9yIChz dHJ1Y3QgcmFuZG9tX2RhdGEgKl9fcmVzdHJpY3QgX19idWYsCiAgICAgICAgICAgICAgICAgICAg IGludDMyX3QgKl9fcmVzdHJpY3QgX19yZXN1bHQpIHRocm93ICgpOwoKZXh0ZXJuIGludCBzcmFu ZG9tX3IgKHVuc2lnbmVkIGludCBfX3NlZWQsIHN0cnVjdCByYW5kb21fZGF0YSAqX19idWYpIHRo cm93ICgpOwoKZXh0ZXJuIGludCBpbml0c3RhdGVfciAodW5zaWduZWQgaW50IF9fc2VlZCwgY2hh ciAqX19yZXN0cmljdCBfX3N0YXRlYnVmLAogICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qg X19zdGF0ZWxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHJhbmRvbV9kYXRhICpf X3Jlc3RyaWN0IF9fYnVmKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgc2V0c3RhdGVfciAoY2hhciAq X19yZXN0cmljdCBfX3N0YXRlYnVmLAogICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCByYW5k b21fZGF0YSAqX19yZXN0cmljdCBfX2J1ZikgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCByYW5k ICh2b2lkKSB0aHJvdyAoKTsKCmV4dGVybiB2b2lkIHNyYW5kICh1bnNpZ25lZCBpbnQgX19zZWVk KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCByYW5kX3IgKHVuc2lnbmVkIGludCAqX19zZWVkKSB0 aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBkb3VibGUgZHJhbmQ0OCAodm9pZCkgdGhyb3cgKCk7CmV4 dGVybiBkb3VibGUgZXJhbmQ0OCAodW5zaWduZWQgc2hvcnQgaW50IF9feHN1YmlbM10pIHRocm93 ICgpOwoKCmV4dGVybiBsb25nIGludCBscmFuZDQ4ICh2b2lkKSB0aHJvdyAoKTsKZXh0ZXJuIGxv bmcgaW50IG5yYW5kNDggKHVuc2lnbmVkIHNob3J0IGludCBfX3hzdWJpWzNdKSB0aHJvdyAoKTsK CgpleHRlcm4gbG9uZyBpbnQgbXJhbmQ0OCAodm9pZCkgdGhyb3cgKCk7CmV4dGVybiBsb25nIGlu dCBqcmFuZDQ4ICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVszXSkgdGhyb3cgKCk7CgoKZXh0 ZXJuIHZvaWQgc3JhbmQ0OCAobG9uZyBpbnQgX19zZWVkdmFsKSB0aHJvdyAoKTsKZXh0ZXJuIHVu c2lnbmVkIHNob3J0IGludCAqc2VlZDQ4ICh1bnNpZ25lZCBzaG9ydCBpbnQgX19zZWVkMTZ2WzNd KSB0aHJvdyAoKTsKZXh0ZXJuIHZvaWQgbGNvbmc0OCAodW5zaWduZWQgc2hvcnQgaW50IF9fcGFy YW1bN10pIHRocm93ICgpOwoKCgoKCnN0cnVjdCBkcmFuZDQ4X2RhdGEKICB7CiAgICB1bnNpZ25l ZCBzaG9ydCBpbnQgX194WzNdOwogICAgdW5zaWduZWQgc2hvcnQgaW50IF9fb2xkX3hbM107CiAg ICB1bnNpZ25lZCBzaG9ydCBpbnQgX19jOwogICAgdW5zaWduZWQgc2hvcnQgaW50IF9faW5pdDsK ICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgX19hOwogIH07CgoKZXh0ZXJuIGludCBkcmFuZDQ4 X3IgKHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fcmVzdHJpY3QgX19idWZmZXIsCiAgICAgICAgICAg ICAgICAgICAgICBkb3VibGUgKl9fcmVzdHJpY3QgX19yZXN1bHQpIHRocm93ICgpOwpleHRlcm4g aW50IGVyYW5kNDhfciAodW5zaWduZWQgc2hvcnQgaW50IF9feHN1YmlbM10sCiAgICAgICAgICAg ICAgICAgICAgICBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmZmVyLAogICAg ICAgICAgICAgICAgICAgICAgZG91YmxlICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSB0aHJvdyAoKTsK CgpleHRlcm4gaW50IGxyYW5kNDhfciAoc3RydWN0IGRyYW5kNDhfZGF0YSAqX19yZXN0cmljdCBf X2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgIGxvbmcgaW50ICpfX3Jlc3RyaWN0IF9fcmVz dWx0KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBucmFuZDQ4X3IgKHVuc2lnbmVkIHNob3J0IGludCBf X3hzdWJpWzNdLAogICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19y ZXN0cmljdCBfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgIGxvbmcgaW50ICpfX3Jlc3Ry aWN0IF9fcmVzdWx0KSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IG1yYW5kNDhfciAoc3RydWN0IGRy YW5kNDhfZGF0YSAqX19yZXN0cmljdCBfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgIGxv bmcgaW50ICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBqcmFuZDQ4 X3IgKHVuc2lnbmVkIHNob3J0IGludCBfX3hzdWJpWzNdLAogICAgICAgICAgICAgICAgICAgICAg c3RydWN0IGRyYW5kNDhfZGF0YSAqX19yZXN0cmljdCBfX2J1ZmZlciwKICAgICAgICAgICAgICAg ICAgICAgIGxvbmcgaW50ICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSB0aHJvdyAoKTsKCgpleHRlcm4g aW50IHNyYW5kNDhfciAobG9uZyBpbnQgX19zZWVkdmFsLCBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpf X2J1ZmZlcikKICAgICB0aHJvdyAoKTsKCmV4dGVybiBpbnQgc2VlZDQ4X3IgKHVuc2lnbmVkIHNo b3J0IGludCBfX3NlZWQxNnZbM10sCiAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkcmFuZDQ4 X2RhdGEgKl9fYnVmZmVyKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgbGNvbmc0OF9yICh1bnNpZ25l ZCBzaG9ydCBpbnQgX19wYXJhbVs3XSwKICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkcmFu ZDQ4X2RhdGEgKl9fYnVmZmVyKSB0aHJvdyAoKTsKIyA1MjggIi91c3IvaW5jbHVkZS9zdGRsaWIu aCIgMwpleHRlcm4gdm9pZCAqbWFsbG9jIChzaXplX3QgX19zaXplKSB0aHJvdyAoKSBfX2F0dHJp YnV0ZV9fICgoX19tYWxsb2NfXykpOwoKZXh0ZXJuIHZvaWQgKmNhbGxvYyAoc2l6ZV90IF9fbm1l bWIsIHNpemVfdCBfX3NpemUpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9j X18pKTsKCgoKCgpleHRlcm4gdm9pZCAqcmVhbGxvYyAodm9pZCAqX19wdHIsIHNpemVfdCBfX3Np emUpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7CgpleHRlcm4gdm9pZCBm cmVlICh2b2lkICpfX3B0cikgdGhyb3cgKCk7CgoKCmV4dGVybiB2b2lkIGNmcmVlICh2b2lkICpf X3B0cikgdGhyb3cgKCk7CgoKCiMgMSAiL3Vzci9pbmNsdWRlL2FsbG9jYS5oIiAxIDMKIyAyNSAi L3Vzci9pbmNsdWRlL2FsbG9jYS5oIiAzCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LXBjLWxp bnV4LWdudS8zLjIuMS9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAyNiAiL3Vzci9pbmNsdWRlL2Fs bG9jYS5oIiAyIDMKCmV4dGVybiAiQyIgewoKCgoKCmV4dGVybiB2b2lkICphbGxvY2EgKHNpemVf dCBfX3NpemUpIHRocm93ICgpOwoKCgoKCn0KIyA1NDggIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIg MiAzCgoKCgpleHRlcm4gdm9pZCAqdmFsbG9jIChzaXplX3QgX19zaXplKSB0aHJvdyAoKSBfX2F0 dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwoKCgoKZXh0ZXJuIGludCBwb3NpeF9tZW1hbGlnbiAo dm9pZCAqKl9fbWVtcHRyLCBzaXplX3QgX19hbGlnbm1lbnQsIHNpemVfdCBfX3NpemUpCiAgICAg dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKCgoKZXh0ZXJuIHZvaWQgYWJv cnQgKHZvaWQpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKCgoKZXh0 ZXJuIGludCBhdGV4aXQgKHZvaWQgKCpfX2Z1bmMpICh2b2lkKSkgdGhyb3cgKCk7CgoKCgpleHRl cm4gaW50IG9uX2V4aXQgKHZvaWQgKCpfX2Z1bmMpIChpbnQgX19zdGF0dXMsIHZvaWQgKl9fYXJn KSwgdm9pZCAqX19hcmcpCiAgICAgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIHZvaWQgZXhpdCAoaW50 IF9fc3RhdHVzKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CgoKCgpl eHRlcm4gdm9pZCBfRXhpdCAoaW50IF9fc3RhdHVzKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo X19ub3JldHVybl9fKSk7CgoKCgpleHRlcm4gY2hhciAqZ2V0ZW52IChfX2NvbnN0IGNoYXIgKl9f bmFtZSkgdGhyb3cgKCk7CgoKCmV4dGVybiBjaGFyICpfX3NlY3VyZV9nZXRlbnYgKF9fY29uc3Qg Y2hhciAqX19uYW1lKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IHB1dGVudiAoY2hhciAqX19z dHJpbmcpIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgc2V0ZW52IChfX2NvbnN0IGNoYXIgKl9f bmFtZSwgX19jb25zdCBjaGFyICpfX3ZhbHVlLCBpbnQgX19yZXBsYWNlKQogICAgIHRocm93ICgp OwoKCmV4dGVybiBpbnQgdW5zZXRlbnYgKF9fY29uc3QgY2hhciAqX19uYW1lKSB0aHJvdyAoKTsK CgoKCgoKZXh0ZXJuIGludCBjbGVhcmVudiAodm9pZCkgdGhyb3cgKCk7CiMgNjI0ICIvdXNyL2lu Y2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIGNoYXIgKm1rdGVtcCAoY2hhciAqX190ZW1wbGF0ZSkg dGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gaW50IG1rc3RlbXAgKGNoYXIgKl9fdGVtcGxhdGUpIHRo cm93ICgpOwojIDY0MSAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBpbnQgbWtzdGVt cDY0IChjaGFyICpfX3RlbXBsYXRlKSB0aHJvdyAoKTsKIyA2NTEgIi91c3IvaW5jbHVkZS9zdGRs aWIuaCIgMwpleHRlcm4gY2hhciAqbWtkdGVtcCAoY2hhciAqX190ZW1wbGF0ZSkgdGhyb3cgKCk7 CgoKCgpleHRlcm4gaW50IHN5c3RlbSAoX19jb25zdCBjaGFyICpfX2NvbW1hbmQpIHRocm93ICgp OwoKCgoKCgpleHRlcm4gY2hhciAqY2Fub25pY2FsaXplX2ZpbGVfbmFtZSAoX19jb25zdCBjaGFy ICpfX25hbWUpIHRocm93ICgpOwojIDY3MyAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVy biBjaGFyICpyZWFscGF0aCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbmFtZSwKICAgICAg ICAgICAgICAgICAgICAgICBjaGFyICpfX3Jlc3RyaWN0IF9fcmVzb2x2ZWQpIHRocm93ICgpOwoK CgoKCgp0eXBlZGVmIGludCAoKl9fY29tcGFyX2ZuX3QpIChfX2NvbnN0IHZvaWQgKiwgX19jb25z dCB2b2lkICopOwoKCnR5cGVkZWYgX19jb21wYXJfZm5fdCBjb21wYXJpc29uX2ZuX3Q7CgoKCgoK ZXh0ZXJuIHZvaWQgKmJzZWFyY2ggKF9fY29uc3Qgdm9pZCAqX19rZXksIF9fY29uc3Qgdm9pZCAq X19iYXNlLAogICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbm1lbWIsIHNpemVfdCBfX3Np emUsIF9fY29tcGFyX2ZuX3QgX19jb21wYXIpOwoKCgpleHRlcm4gdm9pZCBxc29ydCAodm9pZCAq X19iYXNlLCBzaXplX3QgX19ubWVtYiwgc2l6ZV90IF9fc2l6ZSwKICAgICAgICAgICAgICAgICAg IF9fY29tcGFyX2ZuX3QgX19jb21wYXIpOwoKCgpleHRlcm4gaW50IGFicyAoaW50IF9feCkgdGhy b3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwpleHRlcm4gbG9uZyBpbnQgbGFicyAo bG9uZyBpbnQgX194KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgpfX2V4 dGVuc2lvbl9fIGV4dGVybiBsb25nIGxvbmcgaW50IGxsYWJzIChsb25nIGxvbmcgaW50IF9feCkK ICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgoKCmV4dGVybiBk aXZfdCBkaXYgKGludCBfX251bWVyLCBpbnQgX19kZW5vbSkKICAgICB0aHJvdyAoKSBfX2F0dHJp YnV0ZV9fICgoX19jb25zdF9fKSk7CmV4dGVybiBsZGl2X3QgbGRpdiAobG9uZyBpbnQgX19udW1l ciwgbG9uZyBpbnQgX19kZW5vbSkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25z dF9fKSk7CgpfX2V4dGVuc2lvbl9fIGV4dGVybiBsbGRpdl90IGxsZGl2IChsb25nIGxvbmcgaW50 IF9fbnVtZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgbG9uZyBp bnQgX19kZW5vbSkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CiMg NzI5ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIGNoYXIgKmVjdnQgKGRvdWJsZSBf X3ZhbHVlLCBpbnQgX19uZGlnaXQsIGludCAqX19yZXN0cmljdCBfX2RlY3B0LAogICAgICAgICAg ICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbikgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hh ciAqZmN2dCAoZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwgaW50ICpfX3Jlc3RyaWN0IF9f ZGVjcHQsCiAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19zaWduKSB0aHJvdyAo KTsKCgoKCmV4dGVybiBjaGFyICpnY3Z0IChkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LCBj aGFyICpfX2J1ZikgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hhciAqcWVjdnQgKGxvbmcgZG91Ymxl IF9fdmFsdWUsIGludCBfX25kaWdpdCwKICAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJp Y3QgX19kZWNwdCwgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbikgdGhyb3cgKCk7CmV4dGVybiBjaGFy ICpxZmN2dCAobG9uZyBkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LAogICAgICAgICAgICAg ICAgICAgIGludCAqX19yZXN0cmljdCBfX2RlY3B0LCBpbnQgKl9fcmVzdHJpY3QgX19zaWduKSB0 aHJvdyAoKTsKZXh0ZXJuIGNoYXIgKnFnY3Z0IChsb25nIGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19u ZGlnaXQsIGNoYXIgKl9fYnVmKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgZWN2dF9yIChkb3Vi bGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LCBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwKICAgICAg ICAgICAgICAgICAgIGludCAqX19yZXN0cmljdCBfX3NpZ24sIGNoYXIgKl9fcmVzdHJpY3QgX19i dWYsCiAgICAgICAgICAgICAgICAgICBzaXplX3QgX19sZW4pIHRocm93ICgpOwpleHRlcm4gaW50 IGZjdnRfciAoZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwgaW50ICpfX3Jlc3RyaWN0IF9f ZGVjcHQsCiAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19zaWduLCBjaGFyICpf X3Jlc3RyaWN0IF9fYnVmLAogICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbGVuKSB0aHJvdyAo KTsKCmV4dGVybiBpbnQgcWVjdnRfciAobG9uZyBkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0 LAogICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0cmljdCBfX2RlY3B0LCBpbnQgKl9fcmVz dHJpY3QgX19zaWduLAogICAgICAgICAgICAgICAgICAgIGNoYXIgKl9fcmVzdHJpY3QgX19idWYs IHNpemVfdCBfX2xlbikgdGhyb3cgKCk7CmV4dGVybiBpbnQgcWZjdnRfciAobG9uZyBkb3VibGUg X192YWx1ZSwgaW50IF9fbmRpZ2l0LAogICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0cmlj dCBfX2RlY3B0LCBpbnQgKl9fcmVzdHJpY3QgX19zaWduLAogICAgICAgICAgICAgICAgICAgIGNo YXIgKl9fcmVzdHJpY3QgX19idWYsIHNpemVfdCBfX2xlbikgdGhyb3cgKCk7CgoKCgoKCmV4dGVy biBpbnQgbWJsZW4gKF9fY29uc3QgY2hhciAqX19zLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgpl eHRlcm4gaW50IG1idG93YyAod2NoYXJfdCAqX19yZXN0cmljdCBfX3B3YywKICAgICAgICAgICAg ICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3MsIHNpemVfdCBfX24pIHRocm93ICgp OwoKCmV4dGVybiBpbnQgd2N0b21iIChjaGFyICpfX3MsIHdjaGFyX3QgX193Y2hhcikgdGhyb3cg KCk7CgoKCmV4dGVybiBzaXplX3QgbWJzdG93Y3MgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19wd2Nz LAogICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zLCBz aXplX3QgX19uKSB0aHJvdyAoKTsKCmV4dGVybiBzaXplX3Qgd2NzdG9tYnMgKGNoYXIgKl9fcmVz dHJpY3QgX19zLAogICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVz dHJpY3QgX19wd2NzLCBzaXplX3QgX19uKQogICAgIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIGlu dCBycG1hdGNoIChfX2NvbnN0IGNoYXIgKl9fcmVzcG9uc2UpIHRocm93ICgpOwojIDgwOSAiL3Vz ci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBpbnQgZ2V0c3Vib3B0IChjaGFyICoqX19yZXN0 cmljdCBfX29wdGlvbnAsCiAgICAgICAgICAgICAgICAgICAgICBjaGFyICpfX2NvbnN0ICpfX3Jl c3RyaWN0IF9fdG9rZW5zLAogICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3Qg X192YWx1ZXApIHRocm93ICgpOwoKCgoKCmV4dGVybiB2b2lkIHNldGtleSAoX19jb25zdCBjaGFy ICpfX2tleSkgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gaW50IHBvc2l4X29wZW5wdCAoaW50IF9f b2ZsYWcpIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIGludCBncmFudHB0IChpbnQgX19mZCkgdGhy b3cgKCk7CgoKCmV4dGVybiBpbnQgdW5sb2NrcHQgKGludCBfX2ZkKSB0aHJvdyAoKTsKCgoKCmV4 dGVybiBjaGFyICpwdHNuYW1lIChpbnQgX19mZCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQg cHRzbmFtZV9yIChpbnQgX19mZCwgY2hhciAqX19idWYsIHNpemVfdCBfX2J1ZmxlbikgdGhyb3cg KCk7CgoKZXh0ZXJuIGludCBnZXRwdCAodm9pZCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQg Z2V0bG9hZGF2ZyAoZG91YmxlIF9fbG9hZGF2Z1tdLCBpbnQgX19uZWxlbSkgdGhyb3cgKCk7CgoK CgoKfQojIDUzICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL2NzdGRsaWIiIDIgMwojIDg0ICIvdXNy L2luY2x1ZGUvYysrLzMuMi4xL2NzdGRsaWIiIDMKbmFtZXNwYWNlIHN0ZAp7CiAgdXNpbmcgOjpk aXZfdDsKICB1c2luZyA6OmxkaXZfdDsKCiAgdXNpbmcgOjphYm9ydDsKICB1c2luZyA6OmFiczsK ICB1c2luZyA6OmF0ZXhpdDsKICB1c2luZyA6OmF0b2Y7CiAgdXNpbmcgOjphdG9pOwogIHVzaW5n IDo6YXRvbDsKICB1c2luZyA6OmJzZWFyY2g7CiAgdXNpbmcgOjpjYWxsb2M7CiAgdXNpbmcgOjpk aXY7CiAgdXNpbmcgOjpleGl0OwogIHVzaW5nIDo6ZnJlZTsKICB1c2luZyA6OmdldGVudjsKICB1 c2luZyA6OmxhYnM7CiAgdXNpbmcgOjpsZGl2OwogIHVzaW5nIDo6bWFsbG9jOwogIHVzaW5nIDo6 bWJsZW47CiAgdXNpbmcgOjptYnN0b3djczsKICB1c2luZyA6Om1idG93YzsKICB1c2luZyA6OnFz b3J0OwogIHVzaW5nIDo6cmFuZDsKICB1c2luZyA6OnJlYWxsb2M7CiAgdXNpbmcgOjpzcmFuZDsK ICB1c2luZyA6OnN0cnRvZDsKICB1c2luZyA6OnN0cnRvbDsKICB1c2luZyA6OnN0cnRvdWw7CiAg dXNpbmcgOjpzeXN0ZW07CiAgdXNpbmcgOjp3Y3N0b21iczsKICB1c2luZyA6OndjdG9tYjsKCiAg aW5saW5lIGxvbmcKICBhYnMobG9uZyBfX2kpIHsgcmV0dXJuIGxhYnMoX19pKTsgfQoKICBpbmxp bmUgbGRpdl90CiAgZGl2KGxvbmcgX19pLCBsb25nIF9faikgeyByZXR1cm4gbGRpdihfX2ksIF9f aik7IH0KfQojIDEzNiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9jc3RkbGliIiAzCm5hbWVzcGFj ZSBfX2dudV9jeHgKewogIHVzaW5nIDo6bGxkaXZfdDsKICB1c2luZyA6Ol9FeGl0OwoKICBpbmxp bmUgbG9uZyBsb25nCiAgYWJzKGxvbmcgbG9uZyBfX3gpIHsgcmV0dXJuIF9feCA+PSAwID8gX194 IDogLV9feDsgfQoKICBpbmxpbmUgbG9uZyBsb25nCiAgbGxhYnMobG9uZyBsb25nIF9feCkgeyBy ZXR1cm4gX194ID49IDAgPyBfX3ggOiAtX194OyB9CgogIGlubGluZSBsbGRpdl90CiAgZGl2KGxv bmcgbG9uZyBfX24sIGxvbmcgbG9uZyBfX2QpCiAgeyBsbGRpdl90IF9fcTsgX19xLnF1b3QgPSBf X24gLyBfX2Q7IF9fcS5yZW0gPSBfX24gJSBfX2Q7IHJldHVybiBfX3E7IH0KCiAgaW5saW5lIGxs ZGl2X3QKICBsbGRpdihsb25nIGxvbmcgX19uLCBsb25nIGxvbmcgX19kKQogIHsgbGxkaXZfdCBf X3E7IF9fcS5xdW90ID0gX19uIC8gX19kOyBfX3EucmVtID0gX19uICUgX19kOyByZXR1cm4gX19x OyB9CgogIHVzaW5nIDo6YXRvbGw7CiAgdXNpbmcgOjpzdHJ0b2Y7CiAgdXNpbmcgOjpzdHJ0b2xs OwogIHVzaW5nIDo6c3RydG91bGw7CiAgdXNpbmcgOjpzdHJ0b2xkOwp9CgpuYW1lc3BhY2Ugc3Rk CnsKICB1c2luZyBfX2dudV9jeHg6OmxsZGl2X3Q7CiAgdXNpbmcgX19nbnVfY3h4OjpfRXhpdDsK ICB1c2luZyBfX2dudV9jeHg6OmFiczsKICB1c2luZyBfX2dudV9jeHg6OmxsYWJzOwogIHVzaW5n IF9fZ251X2N4eDo6ZGl2OwogIHVzaW5nIF9fZ251X2N4eDo6bGxkaXY7CiAgdXNpbmcgX19nbnVf Y3h4OjphdG9sbDsKICB1c2luZyBfX2dudV9jeHg6OnN0cnRvZjsKICB1c2luZyBfX2dudV9jeHg6 OnN0cnRvbGw7CiAgdXNpbmcgX19nbnVfY3h4OjpzdHJ0b3VsbDsKICB1c2luZyBfX2dudV9jeHg6 OnN0cnRvbGQ7Cn0KIyA2OCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9iaXRzL3N0bF9hbGdvYmFz ZS5oIiAyIDMKCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9uZXciIDEgMwojIDQ0ICIvdXNy L2luY2x1ZGUvYysrLzMuMi4xL25ldyIgMwpleHRlcm4gIkMrKyIgewoKbmFtZXNwYWNlIHN0ZAp7 CgoKICBjbGFzcyBiYWRfYWxsb2MgOiBwdWJsaWMgZXhjZXB0aW9uCiAgewogIHB1YmxpYzoKICAg IGJhZF9hbGxvYygpIHRocm93KCkgeyB9CgoKICAgIHZpcnR1YWwgfmJhZF9hbGxvYygpIHRocm93 KCk7CiAgfTsKCiAgc3RydWN0IG5vdGhyb3dfdCB7IH07CiAgZXh0ZXJuIGNvbnN0IG5vdGhyb3df dCBub3Rocm93OwoKCiAgdHlwZWRlZiB2b2lkICgqbmV3X2hhbmRsZXIpKCk7CgogIG5ld19oYW5k bGVyIHNldF9uZXdfaGFuZGxlcihuZXdfaGFuZGxlcikgdGhyb3coKTsKfQojIDc5ICIvdXNyL2lu Y2x1ZGUvYysrLzMuMi4xL25ldyIgMwp2b2lkKiBvcGVyYXRvciBuZXcoc3RkOjpzaXplX3QpIHRo cm93IChzdGQ6OmJhZF9hbGxvYyk7CnZvaWQqIG9wZXJhdG9yIG5ld1tdKHN0ZDo6c2l6ZV90KSB0 aHJvdyAoc3RkOjpiYWRfYWxsb2MpOwp2b2lkIG9wZXJhdG9yIGRlbGV0ZSh2b2lkKikgdGhyb3co KTsKdm9pZCBvcGVyYXRvciBkZWxldGVbXSh2b2lkKikgdGhyb3coKTsKdm9pZCogb3BlcmF0b3Ig bmV3KHN0ZDo6c2l6ZV90LCBjb25zdCBzdGQ6Om5vdGhyb3dfdCYpIHRocm93KCk7CnZvaWQqIG9w ZXJhdG9yIG5ld1tdKHN0ZDo6c2l6ZV90LCBjb25zdCBzdGQ6Om5vdGhyb3dfdCYpIHRocm93KCk7 CnZvaWQgb3BlcmF0b3IgZGVsZXRlKHZvaWQqLCBjb25zdCBzdGQ6Om5vdGhyb3dfdCYpIHRocm93 KCk7CnZvaWQgb3BlcmF0b3IgZGVsZXRlW10odm9pZCosIGNvbnN0IHN0ZDo6bm90aHJvd190Jikg dGhyb3coKTsKCgppbmxpbmUgdm9pZCogb3BlcmF0b3IgbmV3KHN0ZDo6c2l6ZV90LCB2b2lkKiBf X3ApIHRocm93KCkgeyByZXR1cm4gX19wOyB9CmlubGluZSB2b2lkKiBvcGVyYXRvciBuZXdbXShz dGQ6OnNpemVfdCwgdm9pZCogX19wKSB0aHJvdygpIHsgcmV0dXJuIF9fcDsgfQoKCmlubGluZSB2 b2lkIG9wZXJhdG9yIGRlbGV0ZSAodm9pZCosIHZvaWQqKSB0aHJvdygpIHsgfTsKaW5saW5lIHZv aWQgb3BlcmF0b3IgZGVsZXRlW10odm9pZCosIHZvaWQqKSB0aHJvdygpIHsgfTsKCn0KIyA3MCAi L3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9iaXRzL3N0bF9hbGdvYmFzZS5oIiAyIDMKCiMgMSAiL3Vz ci9pbmNsdWRlL2MrKy8zLjIuMS9iaXRzL3N0bF9wYWlyLmgiIDEgMwojIDY0ICIvdXNyL2luY2x1 ZGUvYysrLzMuMi4xL2JpdHMvc3RsX3BhaXIuaCIgMwpuYW1lc3BhY2Ugc3RkCnsKCgp0ZW1wbGF0 ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CnN0cnVjdCBwYWlyIHsKICB0eXBlZGVmIF9UMSBmaXJz dF90eXBlOwogIHR5cGVkZWYgX1QyIHNlY29uZF90eXBlOwoKICBfVDEgZmlyc3Q7CiAgX1QyIHNl Y29uZDsKCgoKCiAgcGFpcigpIDogZmlyc3QoKSwgc2Vjb25kKCkge30KCgoKCiAgcGFpcihjb25z dCBfVDEmIF9fYSwgY29uc3QgX1QyJiBfX2IpIDogZmlyc3QoX19hKSwgc2Vjb25kKF9fYikge30K CgogIHRlbXBsYXRlIDxjbGFzcyBfVTEsIGNsYXNzIF9VMj4KICBwYWlyKGNvbnN0IHBhaXI8X1Ux LCBfVTI+JiBfX3ApIDogZmlyc3QoX19wLmZpcnN0KSwgc2Vjb25kKF9fcC5zZWNvbmQpIHt9Cn07 CgoKdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgppbmxpbmUgYm9vbCBvcGVyYXRvcj09 KGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3gsIGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3kpCnsK ICByZXR1cm4gX194LmZpcnN0ID09IF9feS5maXJzdCAmJiBfX3guc2Vjb25kID09IF9feS5zZWNv bmQ7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CmlubGluZSBib29sIG9wZXJh dG9yPChjb25zdCBwYWlyPF9UMSwgX1QyPiYgX194LCBjb25zdCBwYWlyPF9UMSwgX1QyPiYgX195 KQp7CiAgcmV0dXJuIF9feC5maXJzdCA8IF9feS5maXJzdCB8fAogICAgICAgICAoIShfX3kuZmly c3QgPCBfX3guZmlyc3QpICYmIF9feC5zZWNvbmQgPCBfX3kuc2Vjb25kKTsKfQoKCnRlbXBsYXRl IDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4KaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBwYWly PF9UMSwgX1QyPiYgX194LCBjb25zdCBwYWlyPF9UMSwgX1QyPiYgX195KSB7CiAgcmV0dXJuICEo X194ID09IF9feSk7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CmlubGluZSBi b29sIG9wZXJhdG9yPihjb25zdCBwYWlyPF9UMSwgX1QyPiYgX194LCBjb25zdCBwYWlyPF9UMSwg X1QyPiYgX195KSB7CiAgcmV0dXJuIF9feSA8IF9feDsKfQoKCnRlbXBsYXRlIDxjbGFzcyBfVDEs IGNsYXNzIF9UMj4KaW5saW5lIGJvb2wgb3BlcmF0b3I8PShjb25zdCBwYWlyPF9UMSwgX1QyPiYg X194LCBjb25zdCBwYWlyPF9UMSwgX1QyPiYgX195KSB7CiAgcmV0dXJuICEoX195IDwgX194KTsK fQoKCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4KaW5saW5lIGJvb2wgb3BlcmF0b3I+ PShjb25zdCBwYWlyPF9UMSwgX1QyPiYgX194LCBjb25zdCBwYWlyPF9UMSwgX1QyPiYgX195KSB7 CiAgcmV0dXJuICEoX194IDwgX195KTsKfQojIDE0MCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9i aXRzL3N0bF9wYWlyLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgoKCmlubGlu ZSBwYWlyPF9UMSwgX1QyPiBtYWtlX3BhaXIoX1QxIF9feCwgX1QyIF9feSkKCgoKewogIHJldHVy biBwYWlyPF9UMSwgX1QyPihfX3gsIF9feSk7Cn0KCn0KIyA3MiAiL3Vzci9pbmNsdWRlL2MrKy8z LjIuMS9iaXRzL3N0bF9hbGdvYmFzZS5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi4x L2JpdHMvdHlwZV90cmFpdHMuaCIgMSAzCiMgNTMgIi91c3IvaW5jbHVkZS9jKysvMy4yLjEvYml0 cy90eXBlX3RyYWl0cy5oIiAzCiMgOTAgIi91c3IvaW5jbHVkZS9jKysvMy4yLjEvYml0cy90eXBl X3RyYWl0cy5oIiAzCnN0cnVjdCBfX3RydWVfdHlwZSB7fTsKc3RydWN0IF9fZmFsc2VfdHlwZSB7 fTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBfX3R5cGVfdHJhaXRzIHsKICAgdHlwZWRl ZiBfX3RydWVfdHlwZSB0aGlzX2R1bW15X21lbWJlcl9tdXN0X2JlX2ZpcnN0OwojIDExMyAiL3Vz ci9pbmNsdWRlL2MrKy8zLjIuMS9iaXRzL3R5cGVfdHJhaXRzLmgiIDMKICAgdHlwZWRlZiBfX2Zh bHNlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX2Zh bHNlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX2ZhbHNl X3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX2ZhbHNl X3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUgaXNf UE9EX3R5cGU7Cn07CgoKCgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPGJvb2w+IHsK ICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwog ICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5 cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlw ZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1 ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czxj aGFyPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1 Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9y OwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7 CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRl ZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90 cmFpdHM8c2lnbmVkIGNoYXI+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9k ZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Nv cHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdu bWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVj dG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBz dHJ1Y3QgX190eXBlX3RyYWl0czx1bnNpZ25lZCBjaGFyPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5 cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlw ZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhh c190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFz X3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsK fTsKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8d2NoYXJfdD4gewogICB0eXBlZGVm IF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYg X190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3Ry dWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1 ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNf UE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPHNob3J0PiB7CiAg IHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAg dHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBl ZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVk ZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVf dHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8dW5z aWduZWQgc2hvcnQ+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0 X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29u c3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9v cGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwog ICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3Qg X190eXBlX3RyYWl0czxpbnQ+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9k ZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Nv cHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdu bWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVj dG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBz dHJ1Y3QgX190eXBlX3RyYWl0czx1bnNpZ25lZCBpbnQ+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlw ZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBl IGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFz X3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNf dHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9 OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czxsb25nPiB7CiAgIHR5cGVkZWYgX190 cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3Ry dWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90 eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5 cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0Rf dHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8dW5zaWduZWQgbG9uZz4g ewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7 CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAg dHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0 eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190 cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRz PGxvbmcgbG9uZz4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRf Y29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25z dHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29w ZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAg IHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBf X3R5cGVfdHJhaXRzPHVuc2lnbmVkIGxvbmcgbG9uZz4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBl IGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUg aGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNf dHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190 cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07 Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPGZsb2F0PiB7CiAgIHR5cGVkZWYgX190 cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3Ry dWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90 eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5 cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0Rf dHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8ZG91YmxlPiB7CiAgIHR5 cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlw ZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVm IF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYg X190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlw ZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8bG9uZyBk b3VibGU+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0 cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0 b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRv cjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBl ZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3Ry dWN0IF9fdHlwZV90cmFpdHM8X1RwKj4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2 aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZp YWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9h c3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rl c3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07CgoKCgoKdGVt cGxhdGUgPGNsYXNzIF9UcD4gc3RydWN0IF9Jc19pbnRlZ2VyIHsKICB0eXBlZGVmIF9fZmFsc2Vf dHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjxib29sPiB7 CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBf SXNfaW50ZWdlcjxjaGFyPiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0 ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjxzaWduZWQgY2hhcj4gewogIHR5cGVkZWYgX190 cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8dW5z aWduZWQgY2hhcj4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxh dGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8d2NoYXJfdD4gewogIHR5cGVkZWYgX190cnVlX3R5cGUg X0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8c2hvcnQ+IHsKICB0 eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9Jc19p bnRlZ2VyPHVuc2lnbmVkIHNob3J0PiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7 Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjxpbnQ+IHsKICB0eXBlZGVmIF9fdHJ1 ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9Jc19pbnRlZ2VyPHVuc2ln bmVkIGludD4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8 PiBzdHJ1Y3QgX0lzX2ludGVnZXI8bG9uZz4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVn cmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8dW5zaWduZWQgbG9uZz4gewog IHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lz X2ludGVnZXI8bG9uZyBsb25nPiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07 Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjx1bnNpZ25lZCBsb25nIGxvbmc+IHsKICB0 eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRlPHR5cGVuYW1lIF9UcD4g c3RydWN0IF9Jc19ub3JtYWxfaXRlcmF0b3IgewogICB0eXBlZGVmIF9fZmFsc2VfdHlwZSBfTm9y bWFsOwp9OwoKCm5hbWVzcGFjZSBfX2dudV9jeHgKewogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVy YXRvciwgdHlwZW5hbWUgX0NvbnRhaW5lcj4gY2xhc3MgX19ub3JtYWxfaXRlcmF0b3I7Cn0KCnRl bXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvciwgdHlwZW5hbWUgX0NvbnRhaW5lcj4Kc3RydWN0IF9J c19ub3JtYWxfaXRlcmF0b3I8IF9fZ251X2N4eDo6X19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9y LCBfQ29udGFpbmVyPiA+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBfTm9ybWFsOwp9OwojIDcz ICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDIgMwojIDEgIi91 c3IvaW5jbHVkZS9jKysvMy4yLjEvYml0cy9zdGxfaXRlcmF0b3JfYmFzZV90eXBlcy5oIiAxIDMK IyA2OCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9iaXRzL3N0bF9pdGVyYXRvcl9iYXNlX3R5cGVz LmgiIDMKCm5hbWVzcGFjZSBzdGQKewojIDgwICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL2JpdHMv c3RsX2l0ZXJhdG9yX2Jhc2VfdHlwZXMuaCIgMwogIHN0cnVjdCBpbnB1dF9pdGVyYXRvcl90YWcg e307CgogIHN0cnVjdCBvdXRwdXRfaXRlcmF0b3JfdGFnIHt9OwoKICBzdHJ1Y3QgZm9yd2FyZF9p dGVyYXRvcl90YWcgOiBwdWJsaWMgaW5wdXRfaXRlcmF0b3JfdGFnIHt9OwoKICBzdHJ1Y3QgYmlk aXJlY3Rpb25hbF9pdGVyYXRvcl90YWcgOiBwdWJsaWMgZm9yd2FyZF9pdGVyYXRvcl90YWcge307 CgogIHN0cnVjdCByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZyA6IHB1YmxpYyBiaWRpcmVjdGlv bmFsX2l0ZXJhdG9yX3RhZyB7fTsKIyAxMDAgIi91c3IvaW5jbHVkZS9jKysvMy4yLjEvYml0cy9z dGxfaXRlcmF0b3JfYmFzZV90eXBlcy5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NhdGVnb3J5 LCB0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9EaXN0YW5jZSA9IHB0cmRpZmZfdCwKICAgICAgICAg ICB0eXBlbmFtZSBfUG9pbnRlciA9IF9UcCosIHR5cGVuYW1lIF9SZWZlcmVuY2UgPSBfVHAmPgog ICAgc3RydWN0IGl0ZXJhdG9yIHsKCiAgICAgIHR5cGVkZWYgX0NhdGVnb3J5IGl0ZXJhdG9yX2Nh dGVnb3J5OwoKICAgICAgdHlwZWRlZiBfVHAgdmFsdWVfdHlwZTsKCiAgICAgIHR5cGVkZWYgX0Rp c3RhbmNlIGRpZmZlcmVuY2VfdHlwZTsKCiAgICAgIHR5cGVkZWYgX1BvaW50ZXIgcG9pbnRlcjsK CiAgICAgIHR5cGVkZWYgX1JlZmVyZW5jZSByZWZlcmVuY2U7CiAgICB9OwoKCgoKCgoKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3I+CiAgICBzdHJ1Y3QgaXRlcmF0b3JfdHJhaXRzIHsKICAg ICAgdHlwZWRlZiB0eXBlbmFtZSBfSXRlcmF0b3I6Oml0ZXJhdG9yX2NhdGVnb3J5IGl0ZXJhdG9y X2NhdGVnb3J5OwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9JdGVyYXRvcjo6dmFsdWVfdHlwZSB2 YWx1ZV90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9JdGVyYXRvcjo6ZGlmZmVyZW5jZV90 eXBlIGRpZmZlcmVuY2VfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSXRlcmF0b3I6OnBv aW50ZXIgcG9pbnRlcjsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSXRlcmF0b3I6OnJlZmVyZW5j ZSByZWZlcmVuY2U7CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBzdHJ1Y3Qg aXRlcmF0b3JfdHJhaXRzPF9UcCo+IHsKICAgICAgdHlwZWRlZiByYW5kb21fYWNjZXNzX2l0ZXJh dG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKICAgICAgdHlwZWRlZiBfVHAgdmFsdWVfdHlwZTsK ICAgICAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwogICAgICB0eXBlZGVmIF9U cCogcG9pbnRlcjsKICAgICAgdHlwZWRlZiBfVHAmIHJlZmVyZW5jZTsKICAgIH07CgogIHRlbXBs YXRlPHR5cGVuYW1lIF9UcD4KICAgIHN0cnVjdCBpdGVyYXRvcl90cmFpdHM8Y29uc3QgX1RwKj4g ewogICAgICB0eXBlZGVmIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVn b3J5OwogICAgICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBlOwogICAgICB0eXBlZGVmIHB0cmRpZmZf dCBkaWZmZXJlbmNlX3R5cGU7CiAgICAgIHR5cGVkZWYgY29uc3QgX1RwKiBwb2ludGVyOwogICAg ICB0eXBlZGVmIGNvbnN0IF9UcCYgcmVmZXJlbmNlOwogICAgfTsKCgoKCgoKCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0l0ZXI+CiAgICBpbmxpbmUgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVy Pjo6aXRlcmF0b3JfY2F0ZWdvcnkKICAgIF9faXRlcmF0b3JfY2F0ZWdvcnkoY29uc3QgX0l0ZXIm KQogICAgeyByZXR1cm4gdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyPjo6aXRlcmF0b3Jf Y2F0ZWdvcnkoKTsgfQoKfQojIDc0ICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL2JpdHMvc3RsX2Fs Z29iYXNlLmgiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9jKysvMy4yLjEvYml0cy9zdGxfaXRlcmF0 b3JfYmFzZV9mdW5jcy5oIiAxIDMKIyA2OCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9iaXRzL3N0 bF9pdGVyYXRvcl9iYXNlX2Z1bmNzLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL2Jp dHMvY29uY2VwdF9jaGVjay5oIiAxIDMKIyAzOSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9iaXRz L2NvbmNlcHRfY2hlY2suaCIgMwojIDY5ICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL2JpdHMvc3Rs X2l0ZXJhdG9yX2Jhc2VfZnVuY3MuaCIgMiAzCgoKCgpuYW1lc3BhY2Ugc3RkCnsKdGVtcGxhdGU8 dHlwZW5hbWUgX0lucHV0SXRlcmF0b3I+CiAgaW5saW5lIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0 czxfSW5wdXRJdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQogIF9fZGlzdGFuY2UoX0lucHV0SXRl cmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LCBpbnB1dF9pdGVyYXRvcl90YWcp CiAgewoKICAgCgogICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXJhdG9yPjo6 ZGlmZmVyZW5jZV90eXBlIF9fbiA9IDA7CiAgICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpIHsK ICAgICAgKytfX2ZpcnN0OyArK19fbjsKICAgIH0KICAgIHJldHVybiBfX247CiAgfQoKdGVtcGxh dGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPgogIGlubGluZSB0eXBlbmFtZSBpdGVy YXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlCiAgX19k aXN0YW5jZShfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJh dG9yIF9fbGFzdCwKICAgICAgICAgICAgIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKQogIHsK CiAgIAogICAgcmV0dXJuIF9fbGFzdCAtIF9fZmlyc3Q7CiAgfQojIDExMSAiL3Vzci9pbmNsdWRl L2MrKy8zLjIuMS9iaXRzL3N0bF9pdGVyYXRvcl9iYXNlX2Z1bmNzLmgiIDMKdGVtcGxhdGU8dHlw ZW5hbWUgX0lucHV0SXRlcmF0b3I+CiAgaW5saW5lIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxf SW5wdXRJdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQogIGRpc3RhbmNlKF9JbnB1dEl0ZXJhdG9y IF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkKICB7CgogICAgcmV0dXJuIF9fZGlzdGFu Y2UoX19maXJzdCwgX19sYXN0LCBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsKICB9Cgp0 ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfRGlzdGFuY2U+CiAgaW5saW5l IHZvaWQKICBfX2FkdmFuY2UoX0lucHV0SXRlciYgX19pLCBfRGlzdGFuY2UgX19uLCBpbnB1dF9p dGVyYXRvcl90YWcpCiAgewoKICAgCiAgICB3aGlsZSAoX19uLS0pICsrX19pOwogIH0KCnRlbXBs YXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IsIHR5cGVuYW1lIF9EaXN0YW5jZT4K ICBpbmxpbmUgdm9pZAogIF9fYWR2YW5jZShfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yJiBfX2ksIF9E aXN0YW5jZSBfX24sCiAgICAgICAgICAgIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnKQogIHsK CiAgIAoKICAgIGlmIChfX24gPiAwKQogICAgICB3aGlsZSAoX19uLS0pICsrX19pOwogICAgZWxz ZQogICAgICB3aGlsZSAoX19uKyspIC0tX19pOwogIH0KCnRlbXBsYXRlPHR5cGVuYW1lIF9SYW5k b21BY2Nlc3NJdGVyYXRvciwgdHlwZW5hbWUgX0Rpc3RhbmNlPgogIGlubGluZSB2b2lkCiAgX19h ZHZhbmNlKF9SYW5kb21BY2Nlc3NJdGVyYXRvciYgX19pLCBfRGlzdGFuY2UgX19uLAogICAgICAg ICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykKICB7CgogICAKICAgIF9faSArPSBfX247 CiAgfQojIDE2NCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9iaXRzL3N0bF9pdGVyYXRvcl9iYXNl X2Z1bmNzLmgiIDMKdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3IsIHR5cGVuYW1lIF9E aXN0YW5jZT4KICBpbmxpbmUgdm9pZAogIGFkdmFuY2UoX0lucHV0SXRlcmF0b3ImIF9faSwgX0Rp c3RhbmNlIF9fbikKICB7CgogICAgX19hZHZhbmNlKF9faSwgX19uLCBfX2l0ZXJhdG9yX2NhdGVn b3J5KF9faSkpOwogIH0KCn0KIyA3NSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9iaXRzL3N0bF9h bGdvYmFzZS5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL2JpdHMvc3RsX2l0ZXJh dG9yLmgiIDEgMwojIDY4ICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL2JpdHMvc3RsX2l0ZXJhdG9y LmgiIDMKbmFtZXNwYWNlIHN0ZAp7CiMgODkgIi91c3IvaW5jbHVkZS9jKysvMy4yLjEvYml0cy9z dGxfaXRlcmF0b3IuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvcj4KICAgIGNsYXNz IHJldmVyc2VfaXRlcmF0b3IKICAgIDogcHVibGljIGl0ZXJhdG9yPHR5cGVuYW1lIGl0ZXJhdG9y X3RyYWl0czxfSXRlcmF0b3I+OjppdGVyYXRvcl9jYXRlZ29yeSwKICAgICAgICAgICAgICAgICAg ICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+Ojp2YWx1ZV90eXBlLAogICAg ICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OmRp ZmZlcmVuY2VfdHlwZSwKICAgICAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3Ry YWl0czxfSXRlcmF0b3I+Ojpwb2ludGVyLAogICAgICAgICAgICAgICAgICAgICAgdHlwZW5hbWUg aXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OnJlZmVyZW5jZT4KICAgIHsKICAgIHByb3RlY3Rl ZDoKICAgICAgX0l0ZXJhdG9yIGN1cnJlbnQ7CgogICAgcHVibGljOgogICAgICB0eXBlZGVmIF9J dGVyYXRvciBpdGVyYXRvcl90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3Ry YWl0czxfSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlmZmVyZW5jZV90eXBlOwog ICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+OjpyZWZlcmVu Y2UgcmVmZXJlbmNlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRl cmF0b3I+Ojpwb2ludGVyIHBvaW50ZXI7CgogICAgcHVibGljOgoKCgogICAgICByZXZlcnNlX2l0 ZXJhdG9yKCkgeyB9CgoKCgogICAgICBleHBsaWNpdAogICAgICByZXZlcnNlX2l0ZXJhdG9yKGl0 ZXJhdG9yX3R5cGUgX194KSA6IGN1cnJlbnQoX194KSB7IH0KCgoKCiAgICAgIHJldmVyc2VfaXRl cmF0b3IoY29uc3QgcmV2ZXJzZV9pdGVyYXRvciYgX194KQogICAgICA6IGN1cnJlbnQoX194LmN1 cnJlbnQpIHsgfQoKCgoKCiAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyPgogICAgICAgIHJl dmVyc2VfaXRlcmF0b3IoY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcj4mIF9feCkKICAgICAg ICA6IGN1cnJlbnQoX194LmJhc2UoKSkgeyB9CgoKCgogICAgICBpdGVyYXRvcl90eXBlCiAgICAg IGJhc2UoKSBjb25zdCB7IHJldHVybiBjdXJyZW50OyB9CgoKCgoKCiAgICAgIHJlZmVyZW5jZQog ICAgICBvcGVyYXRvciooKSBjb25zdAogICAgICB7CiAgICAgICAgX0l0ZXJhdG9yIF9fdG1wID0g Y3VycmVudDsKICAgICAgICByZXR1cm4gKi0tX190bXA7CiAgICAgIH0KCgoKCgoKICAgICAgcG9p bnRlcgogICAgICBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4gJihvcGVyYXRvciooKSk7IH0K CgoKCgoKICAgICAgcmV2ZXJzZV9pdGVyYXRvciYKICAgICAgb3BlcmF0b3IrKygpCiAgICAgIHsK ICAgICAgICAtLWN1cnJlbnQ7CiAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICB9CgoKCgoKCiAg ICAgIHJldmVyc2VfaXRlcmF0b3IKICAgICAgb3BlcmF0b3IrKyhpbnQpCiAgICAgIHsKICAgICAg ICByZXZlcnNlX2l0ZXJhdG9yIF9fdG1wID0gKnRoaXM7CiAgICAgICAgLS1jdXJyZW50OwogICAg ICAgIHJldHVybiBfX3RtcDsKICAgICAgfQoKCgoKCgogICAgICByZXZlcnNlX2l0ZXJhdG9yJgog ICAgICBvcGVyYXRvci0tKCkKICAgICAgewogICAgICAgICsrY3VycmVudDsKICAgICAgICByZXR1 cm4gKnRoaXM7CiAgICAgIH0KCgoKCgoKICAgICAgcmV2ZXJzZV9pdGVyYXRvciBvcGVyYXRvci0t KGludCkKICAgICAgewogICAgICAgIHJldmVyc2VfaXRlcmF0b3IgX190bXAgPSAqdGhpczsKICAg ICAgICArK2N1cnJlbnQ7CiAgICAgICAgcmV0dXJuIF9fdG1wOwogICAgICB9CgoKCgoKCiAgICAg IHJldmVyc2VfaXRlcmF0b3IKICAgICAgb3BlcmF0b3IrKGRpZmZlcmVuY2VfdHlwZSBfX24pIGNv bnN0CiAgICAgIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IoY3VycmVudCAtIF9fbik7IH0KCgoK CgoKICAgICAgcmV2ZXJzZV9pdGVyYXRvciYKICAgICAgb3BlcmF0b3IrPShkaWZmZXJlbmNlX3R5 cGUgX19uKQogICAgICB7CiAgICAgICAgY3VycmVudCAtPSBfX247CiAgICAgICAgcmV0dXJuICp0 aGlzOwogICAgICB9CgoKCgoKCiAgICAgIHJldmVyc2VfaXRlcmF0b3IKICAgICAgb3BlcmF0b3It KGRpZmZlcmVuY2VfdHlwZSBfX24pIGNvbnN0CiAgICAgIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0 b3IoY3VycmVudCArIF9fbik7IH0KCgoKCgoKICAgICAgcmV2ZXJzZV9pdGVyYXRvciYKICAgICAg b3BlcmF0b3ItPShkaWZmZXJlbmNlX3R5cGUgX19uKQogICAgICB7CiAgICAgICAgY3VycmVudCAr PSBfX247CiAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICB9CgoKCgoKCiAgICAgIHJlZmVyZW5j ZQogICAgICBvcGVyYXRvcltdKGRpZmZlcmVuY2VfdHlwZSBfX24pIGNvbnN0IHsgcmV0dXJuICoo KnRoaXMgKyBfX24pOyB9CiAgICB9OwojIDI2OSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9iaXRz L3N0bF9pdGVyYXRvci5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yPgogICAgaW5s aW5lIGJvb2wKICAgIG9wZXJhdG9yPT0oY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+ JiBfX3gsCiAgICAgICAgICAgICAgIGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYg X195KQogICAgeyByZXR1cm4gX194LmJhc2UoKSA9PSBfX3kuYmFzZSgpOyB9CgogIHRlbXBsYXRl PHR5cGVuYW1lIF9JdGVyYXRvcj4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcjwoY29uc3Qg cmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3gsCiAgICAgICAgICAgICAgY29uc3QgcmV2 ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3kpCiAgICB7IHJldHVybiBfX3kuYmFzZSgpIDwg X194LmJhc2UoKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3I+CiAgICBpbmxpbmUg Ym9vbAogICAgb3BlcmF0b3IhPShjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9f eCwKICAgICAgICAgICAgICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3kp CiAgICB7IHJldHVybiAhKF9feCA9PSBfX3kpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVy YXRvcj4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj4oY29uc3QgcmV2ZXJzZV9pdGVyYXRv cjxfSXRlcmF0b3I+JiBfX3gsCiAgICAgICAgICAgICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxf SXRlcmF0b3I+JiBfX3kpCiAgICB7IHJldHVybiBfX3kgPCBfX3g7IH0KCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0l0ZXJhdG9yPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPD0oY29uc3QgcmV2 ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3gsCiAgICAgICAgICAgICAgICBjb25zdCByZXZl cnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feSkKICAgIHsgcmV0dXJuICEoX195IDwgX194KTsg fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3I+CiAgICBpbmxpbmUgYm9vbAogICAgb3Bl cmF0b3I+PShjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feCwKICAgICAgICAg ICAgICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3kpCiAgICB7IHJldHVy biAhKF9feCA8IF9feSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yPgogICAgaW5s aW5lIHR5cGVuYW1lIHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBl CiAgICBvcGVyYXRvci0oY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3gsCiAg ICAgICAgICAgICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3kpCiAgICB7 IHJldHVybiBfX3kuYmFzZSgpIC0gX194LmJhc2UoKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf SXRlcmF0b3I+CiAgICBpbmxpbmUgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+CiAgICBvcGVy YXRvcisodHlwZW5hbWUgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5 cGUgX19uLAogICAgICAgICAgICAgIGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYg X194KQogICAgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+KF9feC5iYXNlKCkg LSBfX24pOyB9CiMgMzI3ICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL2JpdHMvc3RsX2l0ZXJhdG9y LmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ29udGFpbmVyPgogICAgY2xhc3MgYmFja19pbnNl cnRfaXRlcmF0b3IKICAgIDogcHVibGljIGl0ZXJhdG9yPG91dHB1dF9pdGVyYXRvcl90YWcsIHZv aWQsIHZvaWQsIHZvaWQsIHZvaWQ+CiAgICB7CiAgICBwcm90ZWN0ZWQ6CiAgICAgIF9Db250YWlu ZXIqIGNvbnRhaW5lcjsKCiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9Db250YWluZXIgY29u dGFpbmVyX3R5cGU7CgoKICAgICAgZXhwbGljaXQKICAgICAgYmFja19pbnNlcnRfaXRlcmF0b3Io X0NvbnRhaW5lciYgX194KSA6IGNvbnRhaW5lcigmX194KSB7IH0KIyAzNTMgIi91c3IvaW5jbHVk ZS9jKysvMy4yLjEvYml0cy9zdGxfaXRlcmF0b3IuaCIgMwogICAgICBiYWNrX2luc2VydF9pdGVy YXRvciYKICAgICAgb3BlcmF0b3I9KHR5cGVuYW1lIF9Db250YWluZXI6OmNvbnN0X3JlZmVyZW5j ZSBfX3ZhbHVlKQogICAgICB7CiAgICAgICAgY29udGFpbmVyLT5wdXNoX2JhY2soX192YWx1ZSk7 CiAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICB9CgoKICAgICAgYmFja19pbnNlcnRfaXRlcmF0 b3ImCiAgICAgIG9wZXJhdG9yKigpIHsgcmV0dXJuICp0aGlzOyB9CgoKICAgICAgYmFja19pbnNl cnRfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yKysoKSB7IHJldHVybiAqdGhpczsgfQoKCiAgICAg IGJhY2tfaW5zZXJ0X2l0ZXJhdG9yCiAgICAgIG9wZXJhdG9yKysoaW50KSB7IHJldHVybiAqdGhp czsgfQogICAgfTsKIyAzODQgIi91c3IvaW5jbHVkZS9jKysvMy4yLjEvYml0cy9zdGxfaXRlcmF0 b3IuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Db250YWluZXI+CiAgICBpbmxpbmUgYmFja19p bnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4KICAgIGJhY2tfaW5zZXJ0ZXIoX0NvbnRhaW5lciYg X194KQogICAgeyByZXR1cm4gYmFja19pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4oX194KTsg fQojIDM5NyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9iaXRzL3N0bF9pdGVyYXRvci5oIiAzCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0NvbnRhaW5lcj4KICAgIGNsYXNzIGZyb250X2luc2VydF9pdGVy YXRvcgogICAgOiBwdWJsaWMgaXRlcmF0b3I8b3V0cHV0X2l0ZXJhdG9yX3RhZywgdm9pZCwgdm9p ZCwgdm9pZCwgdm9pZD4KICAgIHsKICAgIHByb3RlY3RlZDoKICAgICAgX0NvbnRhaW5lciogY29u dGFpbmVyOwoKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NvbnRhaW5lciBjb250YWluZXJf dHlwZTsKCgogICAgICBleHBsaWNpdCBmcm9udF9pbnNlcnRfaXRlcmF0b3IoX0NvbnRhaW5lciYg X194KSA6IGNvbnRhaW5lcigmX194KSB7IH0KIyA0MjIgIi91c3IvaW5jbHVkZS9jKysvMy4yLjEv Yml0cy9zdGxfaXRlcmF0b3IuaCIgMwogICAgICBmcm9udF9pbnNlcnRfaXRlcmF0b3ImCiAgICAg IG9wZXJhdG9yPSh0eXBlbmFtZSBfQ29udGFpbmVyOjpjb25zdF9yZWZlcmVuY2UgX192YWx1ZSkK ICAgICAgewogICAgICAgIGNvbnRhaW5lci0+cHVzaF9mcm9udChfX3ZhbHVlKTsKICAgICAgICBy ZXR1cm4gKnRoaXM7CiAgICAgIH0KCgogICAgICBmcm9udF9pbnNlcnRfaXRlcmF0b3ImCiAgICAg IG9wZXJhdG9yKigpIHsgcmV0dXJuICp0aGlzOyB9CgoKICAgICAgZnJvbnRfaW5zZXJ0X2l0ZXJh dG9yJgogICAgICBvcGVyYXRvcisrKCkgeyByZXR1cm4gKnRoaXM7IH0KCgogICAgICBmcm9udF9p bnNlcnRfaXRlcmF0b3IKICAgICAgb3BlcmF0b3IrKyhpbnQpIHsgcmV0dXJuICp0aGlzOyB9CiAg ICB9OwojIDQ1MyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9iaXRzL3N0bF9pdGVyYXRvci5oIiAz CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NvbnRhaW5lcj4KICAgIGlubGluZSBmcm9udF9pbnNlcnRf aXRlcmF0b3I8X0NvbnRhaW5lcj4KICAgIGZyb250X2luc2VydGVyKF9Db250YWluZXImIF9feCkK ICAgIHsgcmV0dXJuIGZyb250X2luc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPihfX3gpOyB9CiMg NDcwICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDMKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfQ29udGFpbmVyPgogICAgY2xhc3MgaW5zZXJ0X2l0ZXJhdG9yCiAgICA6 IHB1YmxpYyBpdGVyYXRvcjxvdXRwdXRfaXRlcmF0b3JfdGFnLCB2b2lkLCB2b2lkLCB2b2lkLCB2 b2lkPgogICAgewogICAgcHJvdGVjdGVkOgogICAgICBfQ29udGFpbmVyKiBjb250YWluZXI7CiAg ICAgIHR5cGVuYW1lIF9Db250YWluZXI6Oml0ZXJhdG9yIGl0ZXI7CgogICAgcHVibGljOgoKICAg ICAgdHlwZWRlZiBfQ29udGFpbmVyIGNvbnRhaW5lcl90eXBlOwoKCgoKCiAgICAgIGluc2VydF9p dGVyYXRvcihfQ29udGFpbmVyJiBfX3gsIHR5cGVuYW1lIF9Db250YWluZXI6Oml0ZXJhdG9yIF9f aSkKICAgICAgOiBjb250YWluZXIoJl9feCksIGl0ZXIoX19pKSB7fQojIDUxMiAiL3Vzci9pbmNs dWRlL2MrKy8zLjIuMS9iaXRzL3N0bF9pdGVyYXRvci5oIiAzCiAgICAgIGluc2VydF9pdGVyYXRv ciYKICAgICAgb3BlcmF0b3I9KGNvbnN0IHR5cGVuYW1lIF9Db250YWluZXI6OmNvbnN0X3JlZmVy ZW5jZSBfX3ZhbHVlKQogICAgICB7CiAgICAgICAgaXRlciA9IGNvbnRhaW5lci0+aW5zZXJ0KGl0 ZXIsIF9fdmFsdWUpOwogICAgICAgICsraXRlcjsKICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAg IH0KCgogICAgICBpbnNlcnRfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yKigpIHsgcmV0dXJuICp0 aGlzOyB9CgoKICAgICAgaW5zZXJ0X2l0ZXJhdG9yJgogICAgICBvcGVyYXRvcisrKCkgeyByZXR1 cm4gKnRoaXM7IH0KCgogICAgICBpbnNlcnRfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yKysoaW50 KSB7IHJldHVybiAqdGhpczsgfQogICAgfTsKIyA1NDQgIi91c3IvaW5jbHVkZS9jKysvMy4yLjEv Yml0cy9zdGxfaXRlcmF0b3IuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Db250YWluZXIsIHR5 cGVuYW1lIF9JdGVyYXRvcj4KICAgIGlubGluZSBpbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4K ICAgIGluc2VydGVyKF9Db250YWluZXImIF9feCwgX0l0ZXJhdG9yIF9faSkKICAgIHsKICAgICAg cmV0dXJuIGluc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPihfX3gsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgX0NvbnRhaW5lcjo6aXRlcmF0b3IoX19p KSk7CiAgICB9Cn0KCm5hbWVzcGFjZSBfX2dudV9jeHgKewoKCgoKCgoKICB1c2luZyBzdGQ6Oml0 ZXJhdG9yX3RyYWl0czsKICB1c2luZyBzdGQ6Oml0ZXJhdG9yOwogIHRlbXBsYXRlPHR5cGVuYW1l IF9JdGVyYXRvciwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KICAgIGNsYXNzIF9fbm9ybWFsX2l0ZXJh dG9yCiAgICAgIDogcHVibGljIGl0ZXJhdG9yPHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRl cmF0b3I+OjppdGVyYXRvcl9jYXRlZ29yeSwKICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW5h bWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OnZhbHVlX3R5cGUsCiAgICAgICAgICAgICAg ICAgICAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+OjpkaWZmZXJlbmNl X3R5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxf SXRlcmF0b3I+Ojpwb2ludGVyLAogICAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBpdGVy YXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6cmVmZXJlbmNlPgogICAgewogICAgcHJvdGVjdGVkOgog ICAgICBfSXRlcmF0b3IgX01fY3VycmVudDsKCiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgdHlw ZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBk aWZmZXJlbmNlX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9J dGVyYXRvcj46OnJlZmVyZW5jZSByZWZlcmVuY2U7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRl cmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OnBvaW50ZXIgcG9pbnRlcjsKCiAgICAgIF9fbm9ybWFs X2l0ZXJhdG9yKCkgOiBfTV9jdXJyZW50KF9JdGVyYXRvcigpKSB7IH0KCiAgICAgIGV4cGxpY2l0 CiAgICAgIF9fbm9ybWFsX2l0ZXJhdG9yKGNvbnN0IF9JdGVyYXRvciYgX19pKSA6IF9NX2N1cnJl bnQoX19pKSB7IH0KCgogICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcj4KICAgICAgaW5saW5l IF9fbm9ybWFsX2l0ZXJhdG9yKGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyLCBfQ29udGFp bmVyPiYgX19pKQogICAgICAgIDogX01fY3VycmVudChfX2kuYmFzZSgpKSB7IH0KCgogICAgICBy ZWZlcmVuY2UKICAgICAgb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4gKl9NX2N1cnJlbnQ7IH0K CiAgICAgIHBvaW50ZXIKICAgICAgb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuIF9NX2N1cnJl bnQ7IH0KCiAgICAgIF9fbm9ybWFsX2l0ZXJhdG9yJgogICAgICBvcGVyYXRvcisrKCkgeyArK19N X2N1cnJlbnQ7IHJldHVybiAqdGhpczsgfQoKICAgICAgX19ub3JtYWxfaXRlcmF0b3IKICAgICAg b3BlcmF0b3IrKyhpbnQpIHsgcmV0dXJuIF9fbm9ybWFsX2l0ZXJhdG9yKF9NX2N1cnJlbnQrKyk7 IH0KCgogICAgICBfX25vcm1hbF9pdGVyYXRvciYKICAgICAgb3BlcmF0b3ItLSgpIHsgLS1fTV9j dXJyZW50OyByZXR1cm4gKnRoaXM7IH0KCiAgICAgIF9fbm9ybWFsX2l0ZXJhdG9yCiAgICAgIG9w ZXJhdG9yLS0oaW50KSB7IHJldHVybiBfX25vcm1hbF9pdGVyYXRvcihfTV9jdXJyZW50LS0pOyB9 CgoKICAgICAgcmVmZXJlbmNlCiAgICAgIG9wZXJhdG9yW10oY29uc3QgZGlmZmVyZW5jZV90eXBl JiBfX24pIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX2N1cnJlbnRbX19uXTsgfQoKICAgICAgX19u b3JtYWxfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yKz0oY29uc3QgZGlmZmVyZW5jZV90eXBlJiBf X24pCiAgICAgIHsgX01fY3VycmVudCArPSBfX247IHJldHVybiAqdGhpczsgfQoKICAgICAgX19u b3JtYWxfaXRlcmF0b3IKICAgICAgb3BlcmF0b3IrKGNvbnN0IGRpZmZlcmVuY2VfdHlwZSYgX19u KSBjb25zdAogICAgICB7IHJldHVybiBfX25vcm1hbF9pdGVyYXRvcihfTV9jdXJyZW50ICsgX19u KTsgfQoKICAgICAgX19ub3JtYWxfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yLT0oY29uc3QgZGlm ZmVyZW5jZV90eXBlJiBfX24pCiAgICAgIHsgX01fY3VycmVudCAtPSBfX247IHJldHVybiAqdGhp czsgfQoKICAgICAgX19ub3JtYWxfaXRlcmF0b3IKICAgICAgb3BlcmF0b3ItKGNvbnN0IGRpZmZl cmVuY2VfdHlwZSYgX19uKSBjb25zdAogICAgICB7IHJldHVybiBfX25vcm1hbF9pdGVyYXRvcihf TV9jdXJyZW50IC0gX19uKTsgfQoKICAgICAgY29uc3QgX0l0ZXJhdG9yJgogICAgICBiYXNlKCkg Y29uc3QgeyByZXR1cm4gX01fY3VycmVudDsgfQogICAgfTsKIyA2NDUgIi91c3IvaW5jbHVkZS9j KysvMy4yLjEvYml0cy9zdGxfaXRlcmF0b3IuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVy YXRvckwsIHR5cGVuYW1lIF9JdGVyYXRvclIsIHR5cGVuYW1lIF9Db250YWluZXI+CiAgaW5saW5l IGJvb2wKICBvcGVyYXRvcj09KGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvckwsIF9D b250YWluZXI+JiBfX2xocywKICAgICAgICAgICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9J dGVyYXRvclIsIF9Db250YWluZXI+JiBfX3JocykKICB7IHJldHVybiBfX2xocy5iYXNlKCkgPT0g X19yaHMuYmFzZSgpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvciwgdHlwZW5hbWUg X0NvbnRhaW5lcj4KICBpbmxpbmUgYm9vbAogIG9wZXJhdG9yPT0oY29uc3QgX19ub3JtYWxfaXRl cmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPiYgX19saHMsCiAgICAgICAgICAgICBjb25zdCBf X25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWluZXI+JiBfX3JocykKICB7IHJldHVy biBfX2xocy5iYXNlKCkgPT0gX19yaHMuYmFzZSgpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9J dGVyYXRvckwsIHR5cGVuYW1lIF9JdGVyYXRvclIsIHR5cGVuYW1lIF9Db250YWluZXI+CiAgaW5s aW5lIGJvb2wKICBvcGVyYXRvciE9KGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvckws IF9Db250YWluZXI+JiBfX2xocywKICAgICAgICAgICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9y PF9JdGVyYXRvclIsIF9Db250YWluZXI+JiBfX3JocykKICB7IHJldHVybiBfX2xocy5iYXNlKCkg IT0gX19yaHMuYmFzZSgpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvciwgdHlwZW5h bWUgX0NvbnRhaW5lcj4KICBpbmxpbmUgYm9vbAogIG9wZXJhdG9yIT0oY29uc3QgX19ub3JtYWxf aXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPiYgX19saHMsCiAgICAgICAgICAgICBjb25z dCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWluZXI+JiBfX3JocykKICB7IHJl dHVybiBfX2xocy5iYXNlKCkgIT0gX19yaHMuYmFzZSgpOyB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfSXRlcmF0b3JMLCB0eXBlbmFtZSBfSXRlcmF0b3JSLCB0eXBlbmFtZSBfQ29udGFpbmVyPgog IGlubGluZSBib29sCiAgb3BlcmF0b3I8KGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRv ckwsIF9Db250YWluZXI+JiBfX2xocywKICAgICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0 b3I8X0l0ZXJhdG9yUiwgX0NvbnRhaW5lcj4mIF9fcmhzKQogIHsgcmV0dXJuIF9fbGhzLmJhc2Uo KSA8IF9fcmhzLmJhc2UoKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3IsIHR5cGVu YW1lIF9Db250YWluZXI+CiAgaW5saW5lIGJvb2wKICBvcGVyYXRvcjwoY29uc3QgX19ub3JtYWxf aXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPiYgX19saHMsCiAgICAgICAgICAgICBjb25z dCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWluZXI+JiBfX3JocykKICB7IHJl dHVybiBfX2xocy5iYXNlKCkgPCBfX3Jocy5iYXNlKCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg X0l0ZXJhdG9yTCwgdHlwZW5hbWUgX0l0ZXJhdG9yUiwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KICBp bmxpbmUgYm9vbAogIG9wZXJhdG9yPihjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JM LCBfQ29udGFpbmVyPiYgX19saHMsCiAgICAgICAgICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9y PF9JdGVyYXRvclIsIF9Db250YWluZXI+JiBfX3JocykKICB7IHJldHVybiBfX2xocy5iYXNlKCkg PiBfX3Jocy5iYXNlKCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yLCB0eXBlbmFt ZSBfQ29udGFpbmVyPgogIGlubGluZSBib29sCiAgb3BlcmF0b3I+KGNvbnN0IF9fbm9ybWFsX2l0 ZXJhdG9yPF9JdGVyYXRvciwgX0NvbnRhaW5lcj4mIF9fbGhzLAogICAgICAgICAgICBjb25zdCBf X25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWluZXI+JiBfX3JocykKICB7IHJldHVy biBfX2xocy5iYXNlKCkgPiBfX3Jocy5iYXNlKCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0 ZXJhdG9yTCwgdHlwZW5hbWUgX0l0ZXJhdG9yUiwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KICBpbmxp bmUgYm9vbAogIG9wZXJhdG9yPD0oY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yTCwg X0NvbnRhaW5lcj4mIF9fbGhzLAogICAgICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8 X0l0ZXJhdG9yUiwgX0NvbnRhaW5lcj4mIF9fcmhzKQogIHsgcmV0dXJuIF9fbGhzLmJhc2UoKSA8 PSBfX3Jocy5iYXNlKCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yLCB0eXBlbmFt ZSBfQ29udGFpbmVyPgogIGlubGluZSBib29sCiAgb3BlcmF0b3I8PShjb25zdCBfX25vcm1hbF9p dGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWluZXI+JiBfX2xocywKICAgICAgICAgICAgIGNvbnN0 IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwgX0NvbnRhaW5lcj4mIF9fcmhzKQogIHsgcmV0 dXJuIF9fbGhzLmJhc2UoKSA8PSBfX3Jocy5iYXNlKCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg X0l0ZXJhdG9yTCwgdHlwZW5hbWUgX0l0ZXJhdG9yUiwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KICBp bmxpbmUgYm9vbAogIG9wZXJhdG9yPj0oY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9y TCwgX0NvbnRhaW5lcj4mIF9fbGhzLAogICAgICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0 b3I8X0l0ZXJhdG9yUiwgX0NvbnRhaW5lcj4mIF9fcmhzKQogIHsgcmV0dXJuIF9fbGhzLmJhc2Uo KSA+PSBfX3Jocy5iYXNlKCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yLCB0eXBl bmFtZSBfQ29udGFpbmVyPgogIGlubGluZSBib29sCiAgb3BlcmF0b3I+PShjb25zdCBfX25vcm1h bF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWluZXI+JiBfX2xocywKICAgICAgICAgICAgIGNv bnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwgX0NvbnRhaW5lcj4mIF9fcmhzKQogIHsg cmV0dXJuIF9fbGhzLmJhc2UoKSA+PSBfX3Jocy5iYXNlKCk7IH0KCgoKCgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9JdGVyYXRvckwsIHR5cGVuYW1lIF9JdGVyYXRvclIsIHR5cGVuYW1lIF9Db250YWlu ZXI+CiAgaW5saW5lIHR5cGVuYW1lIF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvckwsIF9Db250 YWluZXI+OjpkaWZmZXJlbmNlX3R5cGUKICBvcGVyYXRvci0oY29uc3QgX19ub3JtYWxfaXRlcmF0 b3I8X0l0ZXJhdG9yTCwgX0NvbnRhaW5lcj4mIF9fbGhzLAogICAgICAgICAgICAgY29uc3QgX19u b3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yUiwgX0NvbnRhaW5lcj4mIF9fcmhzKQogIHsgcmV0dXJu IF9fbGhzLmJhc2UoKSAtIF9fcmhzLmJhc2UoKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRl cmF0b3IsIHR5cGVuYW1lIF9Db250YWluZXI+CiAgaW5saW5lIF9fbm9ybWFsX2l0ZXJhdG9yPF9J dGVyYXRvciwgX0NvbnRhaW5lcj4KICBvcGVyYXRvcisodHlwZW5hbWUgX19ub3JtYWxfaXRlcmF0 b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPjo6ZGlmZmVyZW5jZV90eXBlIF9fbiwKICAgICAgICAg ICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPiYgX19pKQog IHsgcmV0dXJuIF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwgX0NvbnRhaW5lcj4oX19pLmJh c2UoKSArIF9fbik7IH0KfQojIDc2ICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL2JpdHMvc3RsX2Fs Z29iYXNlLmgiIDIgMwoKCm5hbWVzcGFjZSBzdGQKewojIDkxICIvdXNyL2luY2x1ZGUvYysrLzMu Mi4xL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0 ZXIxLCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXIyPgogICAgaW5saW5lIHZvaWQKICAgIGl0ZXJfc3dh cChfRm9yd2FyZEl0ZXIxIF9fYSwgX0ZvcndhcmRJdGVyMiBfX2IpCiAgICB7CiAgICAgIHR5cGVk ZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcjE+Ojp2YWx1ZV90eXBlIF9W YWx1ZVR5cGUxOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2Fy ZEl0ZXIyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlMjsKCgogICAgIAogICAgIAogICAgIAogICAg IAoKICAgICAgX1ZhbHVlVHlwZTEgX190bXAgPSAqX19hOwogICAgICAqX19hID0gKl9fYjsKICAg ICAgKl9fYiA9IF9fdG1wOwogICAgfQojIDExOCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9iaXRz L3N0bF9hbGdvYmFzZS5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW5saW5lIHZv aWQKICAgIHN3YXAoX1RwJiBfX2EsIF9UcCYgX19iKQogICAgewoKICAgICAKCiAgICAgIF9UcCBf X3RtcCA9IF9fYTsKICAgICAgX19hID0gX19iOwogICAgICBfX2IgPSBfX3RtcDsKICAgIH0KIyAx NDYgIi91c3IvaW5jbHVkZS9jKysvMy4yLjEvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwogIHRlbXBs YXRlPHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSBjb25zdCBfVHAmCiAgICBtaW4oY29uc3QgX1Rw JiBfX2EsIGNvbnN0IF9UcCYgX19iKQogICAgewoKICAgICAKCiAgICAgIGlmIChfX2IgPCBfX2Ep IHJldHVybiBfX2I7IHJldHVybiBfX2E7CiAgICB9CiMgMTY2ICIvdXNyL2luY2x1ZGUvYysrLzMu Mi4xL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBp bmxpbmUgY29uc3QgX1RwJgogICAgbWF4KGNvbnN0IF9UcCYgX19hLCBjb25zdCBfVHAmIF9fYikK ICAgIHsKCiAgICAgCgogICAgICBpZiAoX19hIDwgX19iKSByZXR1cm4gX19iOyByZXR1cm4gX19h OwogICAgfQojIDE4NiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9iaXRzL3N0bF9hbGdvYmFzZS5o IiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIGlubGlu ZSBjb25zdCBfVHAmCiAgICBtaW4oY29uc3QgX1RwJiBfX2EsIGNvbnN0IF9UcCYgX19iLCBfQ29t cGFyZSBfX2NvbXApCiAgICB7CgogICAgICBpZiAoX19jb21wKF9fYiwgX19hKSkgcmV0dXJuIF9f YjsgcmV0dXJuIF9fYTsKICAgIH0KIyAyMDQgIi91c3IvaW5jbHVkZS9jKysvMy4yLjEvYml0cy9z dGxfYWxnb2Jhc2UuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0NvbXBh cmU+CiAgICBpbmxpbmUgY29uc3QgX1RwJgogICAgbWF4KGNvbnN0IF9UcCYgX19hLCBjb25zdCBf VHAmIF9fYiwgX0NvbXBhcmUgX19jb21wKQogICAgewoKICAgICAgaWYgKF9fY29tcChfX2EsIF9f YikpIHJldHVybiBfX2I7IHJldHVybiBfX2E7CiAgICB9CiMgMjIxICIvdXNyL2luY2x1ZGUvYysr LzMuMi4xL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJ dGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4KICAgIGlubGluZSBfT3V0cHV0SXRlcgogICAgX19j b3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgX091 dHB1dEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFnKQogICAgewog ICAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fcmVzdWx0LCArK19fZmlyc3QpCiAg ICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3Q7CiAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgIH0K CiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJ dGVyPgogICAgaW5saW5lIF9PdXRwdXRJdGVyCiAgICBfX2NvcHkoX1JhbmRvbUFjY2Vzc0l0ZXIg X19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgIF9PdXRwdXRJdGVy IF9fcmVzdWx0LAogICAgICAgICAgIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKQogICAgewog ICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46 OmRpZmZlcmVuY2VfdHlwZQogICAgICAgICAgX0Rpc3RhbmNlOwogICAgICBmb3IgKF9EaXN0YW5j ZSBfX24gPSBfX2xhc3QgLSBfX2ZpcnN0OyBfX24gPiAwOyAtLV9fbikgewogICAgICAgICpfX3Jl c3VsdCA9ICpfX2ZpcnN0OwogICAgICAgICsrX19maXJzdDsKICAgICAgICArK19fcmVzdWx0Owog ICAgICB9CiAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg X1RwPgogICAgaW5saW5lIF9UcCoKICAgIF9fY29weV90cml2aWFsKGNvbnN0IF9UcCogX19maXJz dCwgY29uc3QgX1RwKiBfX2xhc3QsIF9UcCogX19yZXN1bHQpCiAgICB7CiAgICAgIG1lbW1vdmUo X19yZXN1bHQsIF9fZmlyc3QsIHNpemVvZihfVHApICogKF9fbGFzdCAtIF9fZmlyc3QpKTsKICAg ICAgcmV0dXJuIF9fcmVzdWx0ICsgKF9fbGFzdCAtIF9fZmlyc3QpOwogICAgfQoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4KICAgIGlubGluZSBf T3V0cHV0SXRlcgogICAgX19jb3B5X2F1eDIoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVy IF9fbGFzdCwKICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBfX2ZhbHNlX3R5 cGUpCiAgICB7IHJldHVybiBfX2NvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwgX19pdGVy YXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRl ciwgdHlwZW5hbWUgX091dHB1dEl0ZXI+CiAgICBpbmxpbmUgX091dHB1dEl0ZXIKICAgIF9fY29w eV9hdXgyKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAg ICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX190cnVlX3R5cGUpCiAgICB7IHJldHVybiBfX2Nv cHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0 KSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW5saW5lIF9UcCoKICAgIF9fY29w eV9hdXgyKF9UcCogX19maXJzdCwgX1RwKiBfX2xhc3QsCiAgICAgICAgICAgICAgICBfVHAqIF9f cmVzdWx0LCBfX3RydWVfdHlwZSkKICAgIHsgcmV0dXJuIF9fY29weV90cml2aWFsKF9fZmlyc3Qs IF9fbGFzdCwgX19yZXN1bHQpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGlubGlu ZSBfVHAqCiAgICBfX2NvcHlfYXV4Mihjb25zdCBfVHAqIF9fZmlyc3QsIGNvbnN0IF9UcCogX19s YXN0LAogICAgICAgICAgICAgICAgX1RwKiBfX3Jlc3VsdCwgX190cnVlX3R5cGUpCiAgICB7IHJl dHVybiBfX2NvcHlfdHJpdmlhbChfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KTsgfQoKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4KICAgIGlubGlu ZSBfT3V0cHV0SXRlcgogICAgX19jb3B5X25pMihfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0 ZXIgX19sYXN0LAogICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX190cnVlX3R5 cGUpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0 ZXI+Ojp2YWx1ZV90eXBlCiAgICAgICAgICBfVmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVu YW1lIF9fdHlwZV90cmFpdHM8X1ZhbHVlVHlwZT46Omhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3Bl cmF0b3IKICAgICAgICAgIF9Ucml2aWFsOwogICAgICByZXR1cm4gX091dHB1dEl0ZXIoX19jb3B5 X2F1eDIoX19maXJzdCwgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgX19yZXN1bHQuYmFzZSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg X1RyaXZpYWwoKSkpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBl bmFtZSBfT3V0cHV0SXRlcj4KICAgIGlubGluZSBfT3V0cHV0SXRlcgogICAgX19jb3B5X25pMihf SW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICBfT3V0 cHV0SXRlciBfX3Jlc3VsdCwgX19mYWxzZV90eXBlKQogICAgewogICAgICB0eXBlZGVmIHR5cGVu YW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyPjo6dmFsdWVfdHlwZQogICAgICAgICAgX1Zh bHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5cGVfdHJhaXRzPF9WYWx1ZVR5cGU+ OjpoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yCiAgICAgICAgICBfVHJpdmlhbDsKICAg ICAgcmV0dXJuIF9fY29weV9hdXgyKF9fZmlyc3QsIF9fbGFzdCwKICAgICAgICAgICAgICAgICAg ICAgICAgIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgX1RyaXZpYWwoKSk7CiAg ICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVy PgogICAgaW5saW5lIF9PdXRwdXRJdGVyCiAgICBfX2NvcHlfbmkxKF9JbnB1dEl0ZXIgX19maXJz dCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0 LCBfX3RydWVfdHlwZSkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfbm9ybWFsX2l0 ZXJhdG9yPF9PdXRwdXRJdGVyPjo6X05vcm1hbCBfX05vcm1hbDsKICAgICAgcmV0dXJuIF9fY29w eV9uaTIoX19maXJzdC5iYXNlKCksIF9fbGFzdC5iYXNlKCksIF9fcmVzdWx0LCBfX05vcm1hbCgp KTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX091dHB1 dEl0ZXI+CiAgICBpbmxpbmUgX091dHB1dEl0ZXIKICAgIF9fY29weV9uaTEoX0lucHV0SXRlciBf X2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19y ZXN1bHQsIF9fZmFsc2VfdHlwZSkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfbm9y bWFsX2l0ZXJhdG9yPF9PdXRwdXRJdGVyPjo6X05vcm1hbCBfX05vcm1hbDsKICAgICAgcmV0dXJu IF9fY29weV9uaTIoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwgX19Ob3JtYWwoKSk7CiAgICB9 CiMgMzM5ICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4KICAgIGlu bGluZSBfT3V0cHV0SXRlcgogICAgY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIg X19sYXN0LCBfT3V0cHV0SXRlciBfX3Jlc3VsdCkKICAgIHsKCiAgICAgCiAgICAgCgoKICAgICAg IHR5cGVkZWYgdHlwZW5hbWUgX0lzX25vcm1hbF9pdGVyYXRvcjxfSW5wdXRJdGVyPjo6X05vcm1h bCBfX05vcm1hbDsKICAgICAgIHJldHVybiBfX2NvcHlfbmkxKF9fZmlyc3QsIF9fbGFzdCwgX19y ZXN1bHQsIF9fTm9ybWFsKCkpOwogICAgfQoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJl Y3Rpb25hbEl0ZXIxLCB0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIyPgogICAgaW5saW5lIF9C aWRpcmVjdGlvbmFsSXRlcjIKICAgIF9fY29weV9iYWNrd2FyZChfQmlkaXJlY3Rpb25hbEl0ZXIx IF9fZmlyc3QsIF9CaWRpcmVjdGlvbmFsSXRlcjEgX19sYXN0LAogICAgICAgICAgICAgICAgICAg IF9CaWRpcmVjdGlvbmFsSXRlcjIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgYmlkaXJl Y3Rpb25hbF9pdGVyYXRvcl90YWcpCiAgICB7CiAgICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFz dCkKICAgICAgICAqLS1fX3Jlc3VsdCA9ICotLV9fbGFzdDsKICAgICAgcmV0dXJuIF9fcmVzdWx0 OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUg X0JpZGlyZWN0aW9uYWxJdGVyPgogICAgaW5saW5lIF9CaWRpcmVjdGlvbmFsSXRlcgogICAgX19j b3B5X2JhY2t3YXJkKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVy IF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19yZXN1bHQs CiAgICAgICAgICAgICAgICAgICAgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpCiAgICB7CiAg ICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OmRpZmZlcmVu Y2VfdHlwZSBfX247CiAgICAgIGZvciAoX19uID0gX19sYXN0IC0gX19maXJzdDsgX19uID4gMDsg LS1fX24pCiAgICAgICAgKi0tX19yZXN1bHQgPSAqLS1fX2xhc3Q7CiAgICAgIHJldHVybiBfX3Jl c3VsdDsKICAgIH0KCgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVy MSwgdHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyMiwKICAgICAgICAgICB0eXBlbmFtZSBfQm9v bFR5cGU+CiAgICBzdHJ1Y3QgX19jb3B5X2JhY2t3YXJkX2Rpc3BhdGNoCiAgICB7CiAgICAgIHN0 YXRpYyBfQmlkaXJlY3Rpb25hbEl0ZXIyCiAgICAgIGNvcHkoX0JpZGlyZWN0aW9uYWxJdGVyMSBf X2ZpcnN0LCBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fbGFzdCwKICAgICAgICAgICBfQmlkaXJlY3Rp b25hbEl0ZXIyIF9fcmVzdWx0KQogICAgICB7CiAgICAgICAgcmV0dXJuIF9fY29weV9iYWNrd2Fy ZChfX2ZpcnN0LCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Jlc3Vs dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19m aXJzdCkpOwogICAgICB9CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBzdHJ1 Y3QgX19jb3B5X2JhY2t3YXJkX2Rpc3BhdGNoPF9UcCosIF9UcCosIF9fdHJ1ZV90eXBlPgogICAg ewogICAgICBzdGF0aWMgX1RwKgogICAgICBjb3B5KGNvbnN0IF9UcCogX19maXJzdCwgY29uc3Qg X1RwKiBfX2xhc3QsIF9UcCogX19yZXN1bHQpCiAgICAgIHsKICAgICAgICBjb25zdCBwdHJkaWZm X3QgX051bSA9IF9fbGFzdCAtIF9fZmlyc3Q7CiAgICAgICAgbWVtbW92ZShfX3Jlc3VsdCAtIF9O dW0sIF9fZmlyc3QsIHNpemVvZihfVHApICogX051bSk7CiAgICAgICAgcmV0dXJuIF9fcmVzdWx0 IC0gX051bTsKICAgICAgfQogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgc3Ry dWN0IF9fY29weV9iYWNrd2FyZF9kaXNwYXRjaDxjb25zdCBfVHAqLCBfVHAqLCBfX3RydWVfdHlw ZT4KICAgIHsKICAgICAgc3RhdGljIF9UcCoKICAgICAgY29weShjb25zdCBfVHAqIF9fZmlyc3Qs IGNvbnN0IF9UcCogX19sYXN0LCBfVHAqIF9fcmVzdWx0KQogICAgICB7CiAgICAgICAgcmV0dXJu IF9fY29weV9iYWNrd2FyZF9kaXNwYXRjaDxfVHAqLCBfVHAqLCBfX3RydWVfdHlwZT4KICAgICAg ICAgIDo6Y29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KTsKICAgICAgfQogICAgfTsKCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0JJMSwgdHlwZW5hbWUgX0JJMj4KICAgIGlubGluZSBfQkkyCiAg ICBfX2NvcHlfYmFja3dhcmRfYXV4KF9CSTEgX19maXJzdCwgX0JJMSBfX2xhc3QsIF9CSTIgX19y ZXN1bHQpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX190eXBlX3RyYWl0czx0eXBlbmFt ZSBpdGVyYXRvcl90cmFpdHM8X0JJMj46OnZhbHVlX3R5cGU+CiAgICAgICAgICAgICAgICAgICAg ICAgICAgICA6Omhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3IgX1RyaXZpYWw7CiAgICAg IHJldHVybiBfX2NvcHlfYmFja3dhcmRfZGlzcGF0Y2g8X0JJMSwgX0JJMiwgX1RyaXZpYWw+CiAg ICAgICAgICAgICAgICAgIDo6Y29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KTsKICAgIH0K CiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9CSTEsIHR5cGVuYW1lIF9CSTI+CiAgICBpbmxpbmUgX0JJ MgogICAgX19jb3B5X2JhY2t3YXJkX291dHB1dF9ub3JtYWxfaXRlcmF0b3IoX0JJMSBfX2ZpcnN0 LCBfQkkxIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IF9CSTIgX19yZXN1bHQsIF9fdHJ1ZV90eXBlKQogICAgeyByZXR1cm4gX0JJMihfX2NvcHlfYmFj a3dhcmRfYXV4KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQuYmFzZSgpKSk7IH0KCiAgdGVtcGxh dGUgPHR5cGVuYW1lIF9CSTEsIHR5cGVuYW1lIF9CSTI+CiAgICBpbmxpbmUgX0JJMgogICAgX19j b3B5X2JhY2t3YXJkX291dHB1dF9ub3JtYWxfaXRlcmF0b3IoX0JJMSBfX2ZpcnN0LCBfQkkxIF9f bGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CSTIgX19y ZXN1bHQsIF9fZmFsc2VfdHlwZSkKICAgIHsgcmV0dXJuIF9fY29weV9iYWNrd2FyZF9hdXgoX19m aXJzdCwgX19sYXN0LCBfX3Jlc3VsdCk7IH0KCiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9CSTEsIHR5 cGVuYW1lIF9CSTI+CiAgICBpbmxpbmUgX0JJMgogICAgX19jb3B5X2JhY2t3YXJkX2lucHV0X25v cm1hbF9pdGVyYXRvcihfQkkxIF9fZmlyc3QsIF9CSTEgX19sYXN0LAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBfQkkyIF9fcmVzdWx0LCBfX3RydWVfdHlwZSkKICAg IHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfbm9ybWFsX2l0ZXJhdG9yPF9CSTI+OjpfTm9y bWFsIF9fTm9ybWFsOwogICAgICByZXR1cm4gX19jb3B5X2JhY2t3YXJkX291dHB1dF9ub3JtYWxf aXRlcmF0b3IoX19maXJzdC5iYXNlKCksIF9fbGFzdC5iYXNlKCksCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Jlc3VsdCwgX19Ob3JtYWwoKSk7 CiAgICB9CgogIHRlbXBsYXRlIDx0eXBlbmFtZSBfQkkxLCB0eXBlbmFtZSBfQkkyPgogICAgaW5s aW5lIF9CSTIKICAgIF9fY29weV9iYWNrd2FyZF9pbnB1dF9ub3JtYWxfaXRlcmF0b3IoX0JJMSBf X2ZpcnN0LCBfQkkxIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgX0JJMiBfX3Jlc3VsdCwgX19mYWxzZV90eXBlKQogICAgewogICAgICB0eXBlZGVmIHR5 cGVuYW1lIF9Jc19ub3JtYWxfaXRlcmF0b3I8X0JJMj46Ol9Ob3JtYWwgX19Ob3JtYWw7CiAgICAg IHJldHVybiBfX2NvcHlfYmFja3dhcmRfb3V0cHV0X25vcm1hbF9pdGVyYXRvcihfX2ZpcnN0LCBf X2xhc3QsIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgX19Ob3JtYWwoKSk7CiAgICB9CiMgNDc3ICIvdXNyL2luY2x1ZGUvYysrLzMu Mi4xL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0JJMSwgdHlw ZW5hbWUgX0JJMj4KICAgIGlubGluZSBfQkkyCiAgICBjb3B5X2JhY2t3YXJkKF9CSTEgX19maXJz dCwgX0JJMSBfX2xhc3QsIF9CSTIgX19yZXN1bHQpCiAgICB7CgogICAgIAogICAgIAogICAgIAoK CgogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19ub3JtYWxfaXRlcmF0b3I8X0JJMT46Ol9Ob3Jt YWwgX19Ob3JtYWw7CiAgICAgIHJldHVybiBfX2NvcHlfYmFja3dhcmRfaW5wdXRfbm9ybWFsX2l0 ZXJhdG9yKF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fTm9ybWFsKCkpOwogICAgfQojIDUwOSAiL3Vz ci9pbmNsdWRlL2MrKy8zLjIuMS9iaXRzL3N0bF9hbGdvYmFzZS5oIiAzCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfVHA+CiAgICB2b2lkCiAgICBmaWxsKF9Gb3J3 YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LCBjb25zdCBfVHAmIF9fdmFsdWUp CiAgICB7CgogICAgIAoKICAgICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0 KQogICAgICAgICpfX2ZpcnN0ID0gX192YWx1ZTsKICAgIH0KIyA1MzEgIi91c3IvaW5jbHVkZS9j KysvMy4yLjEvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9PdXRw dXRJdGVyLCB0eXBlbmFtZSBfU2l6ZSwgdHlwZW5hbWUgX1RwPgogICAgX091dHB1dEl0ZXIKICAg IGZpbGxfbihfT3V0cHV0SXRlciBfX2ZpcnN0LCBfU2l6ZSBfX24sIGNvbnN0IF9UcCYgX192YWx1 ZSkKICAgIHsKCiAgICAgCgogICAgICBmb3IgKCA7IF9fbiA+IDA7IC0tX19uLCArK19fZmlyc3Qp CiAgICAgICAgKl9fZmlyc3QgPSBfX3ZhbHVlOwogICAgICByZXR1cm4gX19maXJzdDsKICAgIH0K CgoKICBpbmxpbmUgdm9pZAogIGZpbGwodW5zaWduZWQgY2hhciogX19maXJzdCwgdW5zaWduZWQg Y2hhciogX19sYXN0LCBjb25zdCB1bnNpZ25lZCBjaGFyJiBfX2MpCiAgewogICAgdW5zaWduZWQg Y2hhciBfX3RtcCA9IF9fYzsKICAgIG1lbXNldChfX2ZpcnN0LCBfX3RtcCwgX19sYXN0IC0gX19m aXJzdCk7CiAgfQoKICBpbmxpbmUgdm9pZAogIGZpbGwoc2lnbmVkIGNoYXIqIF9fZmlyc3QsIHNp Z25lZCBjaGFyKiBfX2xhc3QsIGNvbnN0IHNpZ25lZCBjaGFyJiBfX2MpCiAgewogICAgc2lnbmVk IGNoYXIgX190bXAgPSBfX2M7CiAgICBtZW1zZXQoX19maXJzdCwgc3RhdGljX2Nhc3Q8dW5zaWdu ZWQgY2hhcj4oX190bXApLCBfX2xhc3QgLSBfX2ZpcnN0KTsKICB9CgogIGlubGluZSB2b2lkCiAg ZmlsbChjaGFyKiBfX2ZpcnN0LCBjaGFyKiBfX2xhc3QsIGNvbnN0IGNoYXImIF9fYykKICB7CiAg ICBjaGFyIF9fdG1wID0gX19jOwogICAgbWVtc2V0KF9fZmlyc3QsIHN0YXRpY19jYXN0PHVuc2ln bmVkIGNoYXI+KF9fdG1wKSwgX19sYXN0IC0gX19maXJzdCk7CiAgfQoKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfU2l6ZT4KICAgIGlubGluZSB1bnNpZ25lZCBjaGFyKgogICAgZmlsbF9uKHVuc2lnbmVk IGNoYXIqIF9fZmlyc3QsIF9TaXplIF9fbiwgY29uc3QgdW5zaWduZWQgY2hhciYgX19jKQogICAg ewogICAgICBmaWxsKF9fZmlyc3QsIF9fZmlyc3QgKyBfX24sIF9fYyk7CiAgICAgIHJldHVybiBf X2ZpcnN0ICsgX19uOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfU2l6ZT4KICAgIGlubGlu ZSBzaWduZWQgY2hhcioKICAgIGZpbGxfbihjaGFyKiBfX2ZpcnN0LCBfU2l6ZSBfX24sIGNvbnN0 IHNpZ25lZCBjaGFyJiBfX2MpCiAgICB7CiAgICAgIGZpbGwoX19maXJzdCwgX19maXJzdCArIF9f biwgX19jKTsKICAgICAgcmV0dXJuIF9fZmlyc3QgKyBfX247CiAgICB9CgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9TaXplPgogICAgaW5saW5lIGNoYXIqCiAgICBmaWxsX24oY2hhciogX19maXJzdCwg X1NpemUgX19uLCBjb25zdCBjaGFyJiBfX2MpCiAgICB7CiAgICAgIGZpbGwoX19maXJzdCwgX19m aXJzdCArIF9fbiwgX19jKTsKICAgICAgcmV0dXJuIF9fZmlyc3QgKyBfX247CiAgICB9CiMgNjA2 ICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0SXRlcjI+CiAgICBwYWlyPF9J bnB1dEl0ZXIxLCBfSW5wdXRJdGVyMj4KICAgIG1pc21hdGNoKF9JbnB1dEl0ZXIxIF9fZmlyc3Qx LCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIp CiAgICB7CgogICAgIAogICAgIAogICAgIAoKICAgICAKCgogICAgICB3aGlsZSAoX19maXJzdDEg IT0gX19sYXN0MSAmJiAqX19maXJzdDEgPT0gKl9fZmlyc3QyKSB7CiAgICAgICAgKytfX2ZpcnN0 MTsKICAgICAgICArK19fZmlyc3QyOwogICAgICB9CiAgICAgIHJldHVybiBwYWlyPF9JbnB1dEl0 ZXIxLCBfSW5wdXRJdGVyMj4oX19maXJzdDEsIF9fZmlyc3QyKTsKICAgIH0KIyA2NDAgIi91c3Iv aW5jbHVkZS9jKysvMy4yLjEvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwogIHRlbXBsYXRlPHR5cGVu YW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJdGVyMiwgdHlwZW5hbWUgX0JpbmFyeVBy ZWRpY2F0ZT4KICAgIHBhaXI8X0lucHV0SXRlcjEsIF9JbnB1dEl0ZXIyPgogICAgbWlzbWF0Y2go X0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICBf SW5wdXRJdGVyMiBfX2ZpcnN0MiwKICAgICAgICAgICAgIF9CaW5hcnlQcmVkaWNhdGUgX19iaW5h cnlfcHJlZCkKICAgIHsKCiAgICAgCiAgICAgCgogICAgICB3aGlsZSAoX19maXJzdDEgIT0gX19s YXN0MSAmJiBfX2JpbmFyeV9wcmVkKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkgewogICAgICAgICsr X19maXJzdDE7CiAgICAgICAgKytfX2ZpcnN0MjsKICAgICAgfQogICAgICByZXR1cm4gcGFpcjxf SW5wdXRJdGVyMSwgX0lucHV0SXRlcjI+KF9fZmlyc3QxLCBfX2ZpcnN0Mik7CiAgICB9CiMgNjY4 ICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0SXRlcjI+CiAgICBpbmxpbmUg Ym9vbAogICAgZXF1YWwoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEs CiAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MikKICAgIHsKCiAgICAgCiAgICAgCiAgICAg CgoKCiAgICAgIGZvciAoIDsgX19maXJzdDEgIT0gX19sYXN0MTsgKytfX2ZpcnN0MSwgKytfX2Zp cnN0MikKICAgICAgICBpZiAoISgqX19maXJzdDEgPT0gKl9fZmlyc3QyKSkKICAgICAgICAgIHJl dHVybiBmYWxzZTsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiMgNjk5ICIvdXNyL2luY2x1ZGUv YysrLzMuMi4xL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5w dXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0SXRlcjIsIHR5cGVuYW1lIF9CaW5hcnlQcmVkaWNhdGU+ CiAgICBpbmxpbmUgYm9vbAogICAgZXF1YWwoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0 ZXIxIF9fbGFzdDEsCiAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwKICAgICAgICAgIF9C aW5hcnlQcmVkaWNhdGUgX19iaW5hcnlfcHJlZCkKICAgIHsKCiAgICAgCiAgICAgCgogICAgICBm b3IgKCA7IF9fZmlyc3QxICE9IF9fbGFzdDE7ICsrX19maXJzdDEsICsrX19maXJzdDIpCiAgICAg ICAgaWYgKCFfX2JpbmFyeV9wcmVkKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkKICAgICAgICAgIHJl dHVybiBmYWxzZTsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiMgNzMyICIvdXNyL2luY2x1ZGUv YysrLzMuMi4xL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5w dXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0SXRlcjI+CiAgICBib29sCiAgICBsZXhpY29ncmFwaGlj YWxfY29tcGFyZShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVy MiBfX2xhc3QyKQogICAgewoKICAgICAKICAgICAKICAgICAKCiAgICAgCgoKICAgICAgZm9yICgg OyBfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIKICAgICAgICAgICAg OyArK19fZmlyc3QxLCArK19fZmlyc3QyKSB7CiAgICAgICAgaWYgKCpfX2ZpcnN0MSA8ICpfX2Zp cnN0MikKICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIGlmICgqX19maXJzdDIgPCAqX19m aXJzdDEpCiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgICAgcmV0dXJuIF9fZmly c3QxID09IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MjsKICAgIH0KIyA3NjcgIi91c3Iv aW5jbHVkZS9jKysvMy4yLjEvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwogIHRlbXBsYXRlPHR5cGVu YW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJdGVyMiwgdHlwZW5hbWUgX0NvbXBhcmU+ CiAgICBib29sCiAgICBsZXhpY29ncmFwaGljYWxfY29tcGFyZShfSW5wdXRJdGVyMSBfX2ZpcnN0 MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1 dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgX0NvbXBhcmUgX19jb21wKQogICAgewoKICAgICAKICAgICAKCiAgICAgIGZvciAo IDsgX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyCiAgICAgICAgICAg IDsgKytfX2ZpcnN0MSwgKytfX2ZpcnN0MikgewogICAgICAgIGlmIChfX2NvbXAoKl9fZmlyc3Qx LCAqX19maXJzdDIpKQogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgaWYgKF9fY29tcCgq X19maXJzdDIsICpfX2ZpcnN0MSkpCiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAg ICAgcmV0dXJuIF9fZmlyc3QxID09IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MjsKICAg IH0KCiAgaW5saW5lIGJvb2wKICBsZXhpY29ncmFwaGljYWxfY29tcGFyZShjb25zdCB1bnNpZ25l ZCBjaGFyKiBfX2ZpcnN0MSwgY29uc3QgdW5zaWduZWQgY2hhciogX19sYXN0MSwKICAgICAgICAg ICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBfX2ZpcnN0MiwgY29uc3QgdW5z aWduZWQgY2hhciogX19sYXN0MikKICB7CiAgICBjb25zdCBzaXplX3QgX19sZW4xID0gX19sYXN0 MSAtIF9fZmlyc3QxOwogICAgY29uc3Qgc2l6ZV90IF9fbGVuMiA9IF9fbGFzdDIgLSBfX2ZpcnN0 MjsKICAgIGNvbnN0IGludCBfX3Jlc3VsdCA9IG1lbWNtcChfX2ZpcnN0MSwgX19maXJzdDIsIG1p bihfX2xlbjEsIF9fbGVuMikpOwogICAgcmV0dXJuIF9fcmVzdWx0ICE9IDAgPyBfX3Jlc3VsdCA8 IDAgOiBfX2xlbjEgPCBfX2xlbjI7CiAgfQoKICBpbmxpbmUgYm9vbAogIGxleGljb2dyYXBoaWNh bF9jb21wYXJlKGNvbnN0IGNoYXIqIF9fZmlyc3QxLCBjb25zdCBjaGFyKiBfX2xhc3QxLAogICAg ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIF9fZmlyc3QyLCBjb25zdCBjaGFyKiBf X2xhc3QyKQogIHsKCiAgICByZXR1cm4gbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmUoKGNvbnN0IHNp Z25lZCBjaGFyKikgX19maXJzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KGNvbnN0IHNpZ25lZCBjaGFyKikgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAoY29uc3Qgc2lnbmVkIGNoYXIqKSBfX2ZpcnN0MiwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAoY29uc3Qgc2lnbmVkIGNoYXIqKSBfX2xhc3QyKTsKCgoKCgoKICB9 Cgp9CiMgNTUgIi91c3IvaW5jbHVkZS9jKysvMy4yLjEvbWVtb3J5IiAyIDMKIyAxICIvdXNyL2lu Y2x1ZGUvYysrLzMuMi4xL2JpdHMvc3RsX2FsbG9jLmgiIDEgMwojIDg0ICIvdXNyL2luY2x1ZGUv YysrLzMuMi4xL2JpdHMvc3RsX2FsbG9jLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi4x L2Nhc3NlcnQiIDEgMwojIDQ3ICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL2Nhc3NlcnQiIDMKCiMg MSAiL3Vzci9pbmNsdWRlL2Fzc2VydC5oIiAxIDMKIyA2NSAiL3Vzci9pbmNsdWRlL2Fzc2VydC5o IiAzCmV4dGVybiAiQyIgewoKCmV4dGVybiB2b2lkIF9fYXNzZXJ0X2ZhaWwgKF9fY29uc3QgY2hh ciAqX19hc3NlcnRpb24sIF9fY29uc3QgY2hhciAqX19maWxlLAogICAgICAgICAgICAgICAgICAg ICAgICAgICB1bnNpZ25lZCBpbnQgX19saW5lLCBfX2NvbnN0IGNoYXIgKl9fZnVuY3Rpb24pCiAg ICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKCmV4dGVybiB2b2lk IF9fYXNzZXJ0X3BlcnJvcl9mYWlsIChpbnQgX19lcnJudW0sIF9fY29uc3QgY2hhciAqX19maWxl LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IF9fbGluZSwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19mdW5jdGlv bikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CgoKCgpleHRl cm4gdm9pZCBfX2Fzc2VydCAoY29uc3QgY2hhciAqX19hc3NlcnRpb24sIGNvbnN0IGNoYXIgKl9f ZmlsZSwgaW50IF9fbGluZSkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVy bl9fKSk7CgoKfQojIDQ5ICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL2Nhc3NlcnQiIDIgMwojIDg1 ICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL2JpdHMvc3RsX2FsbG9jLmgiIDIgMwojIDEgIi91c3Iv aW5jbHVkZS9jKysvMy4yLjEvYml0cy9mdW5jdGV4Y2VwdC5oIiAxIDMKIyAzNCAiL3Vzci9pbmNs dWRlL2MrKy8zLjIuMS9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYysr LzMuMi4xL2V4Y2VwdGlvbl9kZWZpbmVzLmgiIDEgMwojIDM1ICIvdXNyL2luY2x1ZGUvYysrLzMu Mi4xL2JpdHMvZnVuY3RleGNlcHQuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKCiAgdm9pZAogIF9f dGhyb3dfYmFkX2V4Y2VwdGlvbih2b2lkKTsKCgogIHZvaWQKICBfX3Rocm93X2JhZF9hbGxvYyh2 b2lkKTsKCgogIHZvaWQKICBfX3Rocm93X2JhZF9jYXN0KHZvaWQpOwoKICB2b2lkCiAgX190aHJv d19iYWRfdHlwZWlkKHZvaWQpOwoKCiAgdm9pZAogIF9fdGhyb3dfbG9naWNfZXJyb3IoY29uc3Qg Y2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfZG9tYWluX2Vycm9yKGNvbnN0IGNoYXIqIF9f cyk7CgogIHZvaWQKICBfX3Rocm93X2ludmFsaWRfYXJndW1lbnQoY29uc3QgY2hhciogX19zKTsK CiAgdm9pZAogIF9fdGhyb3dfbGVuZ3RoX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQK ICBfX3Rocm93X291dF9vZl9yYW5nZShjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJv d19ydW50aW1lX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X3Jhbmdl X2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X292ZXJmbG93X2Vycm9y KGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X3VuZGVyZmxvd19lcnJvcihjb25z dCBjaGFyKiBfX3MpOwoKCiAgdm9pZAogIF9fdGhyb3dfaW9zX2ZhaWx1cmUoY29uc3QgY2hhciog X19zKTsKfQojIDg2ICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL2JpdHMvc3RsX2FsbG9jLmgiIDIg MwojIDEgIi91c3IvaW5jbHVkZS9jKysvMy4yLjEvYml0cy9zdGxfdGhyZWFkcy5oIiAxIDMKIyA1 NCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9iaXRzL3N0bF90aHJlYWRzLmgiIDMKbmFtZXNwYWNl IHN0ZAp7CgoKCgogIHN0cnVjdCBfUmVmY291bnRfQmFzZQogIHsKCiAgICB0eXBlZGVmIHNpemVf dCBfUkNfdDsKCgogICAgdm9sYXRpbGUgX1JDX3QgX01fcmVmX2NvdW50OwoKCiAgICBfX2d0aHJl YWRfbXV0ZXhfdCBfTV9yZWZfY291bnRfbG9jazsKCiAgICBfUmVmY291bnRfQmFzZShfUkNfdCBf X24pIDogX01fcmVmX2NvdW50KF9fbikKICAgIHsKCiAgICAgIF9fZ3RocmVhZF9tdXRleF90IF9f dG1wID0gezAsIDAsIDAsIFBUSFJFQURfTVVURVhfVElNRURfTlAsIHsgMCwgMCB9fTsKICAgICAg X01fcmVmX2NvdW50X2xvY2sgPSBfX3RtcDsKCgoKCgogICAgfQoKICAgIHZvaWQKICAgIF9NX2lu Y3IoKQogICAgewogICAgICBfX2d0aHJlYWRfbXV0ZXhfbG9jaygmX01fcmVmX2NvdW50X2xvY2sp OwogICAgICArK19NX3JlZl9jb3VudDsKICAgICAgX19ndGhyZWFkX211dGV4X3VubG9jaygmX01f cmVmX2NvdW50X2xvY2spOwogICAgfQoKICAgIF9SQ190CiAgICBfTV9kZWNyKCkKICAgIHsKICAg ICAgX19ndGhyZWFkX211dGV4X2xvY2soJl9NX3JlZl9jb3VudF9sb2NrKTsKICAgICAgdm9sYXRp bGUgX1JDX3QgX190bXAgPSAtLV9NX3JlZl9jb3VudDsKICAgICAgX19ndGhyZWFkX211dGV4X3Vu bG9jaygmX01fcmVmX2NvdW50X2xvY2spOwogICAgICByZXR1cm4gX190bXA7CiAgICB9CiAgfTsK IyAxMDkgIi91c3IvaW5jbHVkZS9jKysvMy4yLjEvYml0cy9zdGxfdGhyZWFkcy5oIiAzCiAgdGVt cGxhdGU8aW50IF9fZHVtbXk+CiAgICBzdHJ1Y3QgX1N3YXBfbG9ja19zdHJ1Y3QKICAgIHsgc3Rh dGljIF9fZ3RocmVhZF9tdXRleF90IF9TX3N3YXBfbG9jazsgfTsKCiAgdGVtcGxhdGU8aW50IF9f ZHVtbXk+CiAgICBfX2d0aHJlYWRfbXV0ZXhfdAogICAgX1N3YXBfbG9ja19zdHJ1Y3Q8X19kdW1t eT46Ol9TX3N3YXBfbG9jayA9IHswLCAwLCAwLCBQVEhSRUFEX01VVEVYX1RJTUVEX05QLCB7IDAs IDAgfX07CgoKCiAgaW5saW5lIHVuc2lnbmVkIGxvbmcKICBfQXRvbWljX3N3YXAodW5zaWduZWQg bG9uZyAqIF9fcCwgdW5zaWduZWQgbG9uZyBfX3EpCiAgewogICAgX19ndGhyZWFkX211dGV4X2xv Y2soJl9Td2FwX2xvY2tfc3RydWN0PDA+OjpfU19zd2FwX2xvY2spOwogICAgdW5zaWduZWQgbG9u ZyBfX3Jlc3VsdCA9ICpfX3A7CiAgICAqX19wID0gX19xOwogICAgX19ndGhyZWFkX211dGV4X3Vu bG9jaygmX1N3YXBfbG9ja19zdHJ1Y3Q8MD46Ol9TX3N3YXBfbG9jayk7CiAgICByZXR1cm4gX19y ZXN1bHQ7CiAgfQojIDE1MSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9iaXRzL3N0bF90aHJlYWRz LmgiIDMKICBzdHJ1Y3QgX1NUTF9tdXRleF9sb2NrCiAgewoKCgoKCiAgICBfX2d0aHJlYWRfbXV0 ZXhfdCBfTV9sb2NrOwoKICAgIHZvaWQKICAgIF9NX2luaXRpYWxpemUoKQogICAgewojIDE4NCAi L3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9iaXRzL3N0bF90aHJlYWRzLmgiIDMKICAgIH0KCiAgICB2 b2lkCiAgICBfTV9hY3F1aXJlX2xvY2soKQogICAgewoKCgogICAgICBfX2d0aHJlYWRfbXV0ZXhf bG9jaygmX01fbG9jayk7CiAgICB9CgogICAgdm9pZAogICAgX01fcmVsZWFzZV9sb2NrKCkKICAg IHsKCgoKICAgICAgX19ndGhyZWFkX211dGV4X3VubG9jaygmX01fbG9jayk7CiAgICB9CiAgfTsK IyAyMjAgIi91c3IvaW5jbHVkZS9jKysvMy4yLjEvYml0cy9zdGxfdGhyZWFkcy5oIiAzCiAgc3Ry dWN0IF9TVExfYXV0b19sb2NrCiAgewogICAgX1NUTF9tdXRleF9sb2NrJiBfTV9sb2NrOwoKICAg IF9TVExfYXV0b19sb2NrKF9TVExfbXV0ZXhfbG9jayYgX19sb2NrKSA6IF9NX2xvY2soX19sb2Nr KQogICAgeyBfTV9sb2NrLl9NX2FjcXVpcmVfbG9jaygpOyB9CgogICAgfl9TVExfYXV0b19sb2Nr KCkgeyBfTV9sb2NrLl9NX3JlbGVhc2VfbG9jaygpOyB9CgogIHByaXZhdGU6CiAgICB2b2lkIG9w ZXJhdG9yPShjb25zdCBfU1RMX2F1dG9fbG9jayYpOwogICAgX1NUTF9hdXRvX2xvY2soY29uc3Qg X1NUTF9hdXRvX2xvY2smKTsKICB9OwoKfQojIDg3ICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL2Jp dHMvc3RsX2FsbG9jLmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CiMgOTggIi91c3IvaW5jbHVkZS9j KysvMy4yLjEvYml0cy9zdGxfYWxsb2MuaCIgMwogIGNsYXNzIF9fbmV3X2FsbG9jCiAgewogIHB1 YmxpYzoKICAgIHN0YXRpYyB2b2lkKgogICAgYWxsb2NhdGUoc2l6ZV90IF9fbikKICAgIHsgcmV0 dXJuIDo6b3BlcmF0b3IgbmV3KF9fbik7IH0KCiAgICBzdGF0aWMgdm9pZAogICAgZGVhbGxvY2F0 ZSh2b2lkKiBfX3AsIHNpemVfdCkKICAgIHsgOjpvcGVyYXRvciBkZWxldGUoX19wKTsgfQogIH07 CiMgMTIxICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL2JpdHMvc3RsX2FsbG9jLmgiIDMKICB0ZW1w bGF0ZSA8aW50IF9faW5zdD4KICAgIGNsYXNzIF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlCiAgICB7 CiAgICBwcml2YXRlOgogICAgICBzdGF0aWMgdm9pZCogX1Nfb29tX21hbGxvYyhzaXplX3QpOwog ICAgICBzdGF0aWMgdm9pZCogX1Nfb29tX3JlYWxsb2Modm9pZCosIHNpemVfdCk7CiAgICAgIHN0 YXRpYyB2b2lkICgqIF9fbWFsbG9jX2FsbG9jX29vbV9oYW5kbGVyKSgpOwoKICAgIHB1YmxpYzoK ICAgICAgc3RhdGljIHZvaWQqCiAgICAgIGFsbG9jYXRlKHNpemVfdCBfX24pCiAgICAgIHsKICAg ICAgICB2b2lkKiBfX3Jlc3VsdCA9IG1hbGxvYyhfX24pOwogICAgICAgIGlmICgwID09IF9fcmVz dWx0KSBfX3Jlc3VsdCA9IF9TX29vbV9tYWxsb2MoX19uKTsKICAgICAgICByZXR1cm4gX19yZXN1 bHQ7CiAgICAgIH0KCiAgICAgIHN0YXRpYyB2b2lkCiAgICAgIGRlYWxsb2NhdGUodm9pZCogX19w LCBzaXplX3QgKQogICAgICB7IGZyZWUoX19wKTsgfQoKICAgICAgc3RhdGljIHZvaWQqCiAgICAg IHJlYWxsb2NhdGUodm9pZCogX19wLCBzaXplX3QgLCBzaXplX3QgX19uZXdfc3opCiAgICAgIHsK ICAgICAgICB2b2lkKiBfX3Jlc3VsdCA9IHJlYWxsb2MoX19wLCBfX25ld19zeik7CiAgICAgICAg aWYgKDAgPT0gX19yZXN1bHQpIF9fcmVzdWx0ID0gX1Nfb29tX3JlYWxsb2MoX19wLCBfX25ld19z eik7CiAgICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAgICB9CgogICAgICBzdGF0aWMgdm9pZCAo KiBfX3NldF9tYWxsb2NfaGFuZGxlcih2b2lkICgqX19mKSgpKSkoKQogICAgICB7CiAgICAgICAg dm9pZCAoKiBfX29sZCkoKSA9IF9fbWFsbG9jX2FsbG9jX29vbV9oYW5kbGVyOwogICAgICAgIF9f bWFsbG9jX2FsbG9jX29vbV9oYW5kbGVyID0gX19mOwogICAgICAgIHJldHVybihfX29sZCk7CiAg ICAgIH0KICAgIH07CgoKICB0ZW1wbGF0ZSA8aW50IF9faW5zdD4KICAgIHZvaWQgKCogX19tYWxs b2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0Pjo6X19tYWxsb2NfYWxsb2Nfb29tX2hhbmRsZXIpKCkg PSAwOwoKICB0ZW1wbGF0ZSA8aW50IF9faW5zdD4KICAgIHZvaWQqCiAgICBfX21hbGxvY19hbGxv Y190ZW1wbGF0ZTxfX2luc3Q+OjpfU19vb21fbWFsbG9jKHNpemVfdCBfX24pCiAgICB7CiAgICAg IHZvaWQgKCogX19teV9tYWxsb2NfaGFuZGxlcikoKTsKICAgICAgdm9pZCogX19yZXN1bHQ7Cgog ICAgICBmb3IgKDs7KQogICAgICAgIHsKICAgICAgICAgIF9fbXlfbWFsbG9jX2hhbmRsZXIgPSBf X21hbGxvY19hbGxvY19vb21faGFuZGxlcjsKICAgICAgICAgIGlmICgwID09IF9fbXlfbWFsbG9j X2hhbmRsZXIpCiAgICAgICAgICAgIHN0ZDo6X190aHJvd19iYWRfYWxsb2MoKTsKICAgICAgICAg ICgqX19teV9tYWxsb2NfaGFuZGxlcikoKTsKICAgICAgICAgIF9fcmVzdWx0ID0gbWFsbG9jKF9f bik7CiAgICAgICAgICBpZiAoX19yZXN1bHQpCiAgICAgICAgICAgIHJldHVybihfX3Jlc3VsdCk7 CiAgICAgICAgfQogICAgfQoKICB0ZW1wbGF0ZSA8aW50IF9faW5zdD4KICAgIHZvaWQqCiAgICBf X21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+OjpfU19vb21fcmVhbGxvYyh2b2lkKiBfX3As IHNpemVfdCBfX24pCiAgICB7CiAgICAgIHZvaWQgKCogX19teV9tYWxsb2NfaGFuZGxlcikoKTsK ICAgICAgdm9pZCogX19yZXN1bHQ7CgogICAgICBmb3IgKDs7KQogICAgICAgIHsKICAgICAgICAg IF9fbXlfbWFsbG9jX2hhbmRsZXIgPSBfX21hbGxvY19hbGxvY19vb21faGFuZGxlcjsKICAgICAg ICAgIGlmICgwID09IF9fbXlfbWFsbG9jX2hhbmRsZXIpCiAgICAgICAgICAgIHN0ZDo6X190aHJv d19iYWRfYWxsb2MoKTsKICAgICAgICAgICgqX19teV9tYWxsb2NfaGFuZGxlcikoKTsKICAgICAg ICAgIF9fcmVzdWx0ID0gcmVhbGxvYyhfX3AsIF9fbik7CiAgICAgICAgICBpZiAoX19yZXN1bHQp CiAgICAgICAgICAgIHJldHVybihfX3Jlc3VsdCk7CiAgICAgICAgfQogICAgfQoKCgoKCgogIHR5 cGVkZWYgX19uZXdfYWxsb2MgX19tZW1faW50ZXJmYWNlOwojIDIxOSAiL3Vzci9pbmNsdWRlL2Mr Ky8zLjIuMS9iaXRzL3N0bF9hbGxvYy5oIiAzCiAgdGVtcGxhdGU8Y2xhc3MgX1RwLCBjbGFzcyBf QWxsb2M+CiAgY2xhc3MgX19zaW1wbGVfYWxsb2MKICB7CiAgcHVibGljOgogICAgc3RhdGljIF9U cCogYWxsb2NhdGUoc2l6ZV90IF9fbikKICAgIHsgcmV0dXJuIDAgPT0gX19uID8gMCA6IChfVHAq KSBfQWxsb2M6OmFsbG9jYXRlKF9fbiAqIHNpemVvZiAoX1RwKSk7IH0KCiAgICBzdGF0aWMgX1Rw KiBhbGxvY2F0ZSgpCiAgICB7IHJldHVybiAoX1RwKikgX0FsbG9jOjphbGxvY2F0ZShzaXplb2Yg KF9UcCkpOyB9CgogICAgc3RhdGljIHZvaWQgZGVhbGxvY2F0ZShfVHAqIF9fcCwgc2l6ZV90IF9f bikKICAgIHsgaWYgKDAgIT0gX19uKSBfQWxsb2M6OmRlYWxsb2NhdGUoX19wLCBfX24gKiBzaXpl b2YgKF9UcCkpOyB9CgogICAgc3RhdGljIHZvaWQgZGVhbGxvY2F0ZShfVHAqIF9fcCkKICAgIHsg X0FsbG9jOjpkZWFsbG9jYXRlKF9fcCwgc2l6ZW9mIChfVHApKTsgfQogIH07CiMgMjUxICIvdXNy L2luY2x1ZGUvYysrLzMuMi4xL2JpdHMvc3RsX2FsbG9jLmgiIDMKICB0ZW1wbGF0ZSA8Y2xhc3Mg X0FsbG9jPgogIGNsYXNzIF9fZGVidWdfYWxsb2MKICB7CiAgcHJpdmF0ZToKICAgIGVudW0ge19T X2V4dHJhID0gOH07CgoKICBwdWJsaWM6CgogICAgc3RhdGljIHZvaWQqIGFsbG9jYXRlKHNpemVf dCBfX24pCiAgICB7CiAgICAgIGNoYXIqIF9fcmVzdWx0ID0gKGNoYXIqKV9BbGxvYzo6YWxsb2Nh dGUoX19uICsgKGludCkgX1NfZXh0cmEpOwogICAgICAqKHNpemVfdCopX19yZXN1bHQgPSBfX247 CiAgICAgIHJldHVybiBfX3Jlc3VsdCArIChpbnQpIF9TX2V4dHJhOwogICAgfQoKICAgIHN0YXRp YyB2b2lkIGRlYWxsb2NhdGUodm9pZCogX19wLCBzaXplX3QgX19uKQogICAgewogICAgICBjaGFy KiBfX3JlYWxfcCA9IChjaGFyKilfX3AgLSAoaW50KSBfU19leHRyYTsKICAgICAgKHN0YXRpY19j YXN0PHZvaWQ+ICgoKihzaXplX3QqKV9fcmVhbF9wID09IF9fbikgPyAwIDogKF9fYXNzZXJ0X2Zh aWwgKCIqKHNpemVfdCopX19yZWFsX3AgPT0gX19uIiwgIi91c3IvaW5jbHVkZS9jKysvMy4yLjEv Yml0cy9zdGxfYWxsb2MuaCIsIDI3MCwgX19QUkVUVFlfRlVOQ1RJT05fXyksIDApKSk7CiAgICAg IF9BbGxvYzo6ZGVhbGxvY2F0ZShfX3JlYWxfcCwgX19uICsgKGludCkgX1NfZXh0cmEpOwogICAg fQoKICAgIHN0YXRpYyB2b2lkKiByZWFsbG9jYXRlKHZvaWQqIF9fcCwgc2l6ZV90IF9fb2xkX3N6 LCBzaXplX3QgX19uZXdfc3opCiAgICB7CiAgICAgIGNoYXIqIF9fcmVhbF9wID0gKGNoYXIqKV9f cCAtIChpbnQpIF9TX2V4dHJhOwogICAgICAoc3RhdGljX2Nhc3Q8dm9pZD4gKCgqKHNpemVfdCop X19yZWFsX3AgPT0gX19vbGRfc3opID8gMCA6IChfX2Fzc2VydF9mYWlsICgiKihzaXplX3QqKV9f cmVhbF9wID09IF9fb2xkX3N6IiwgIi91c3IvaW5jbHVkZS9jKysvMy4yLjEvYml0cy9zdGxfYWxs b2MuaCIsIDI3NywgX19QUkVUVFlfRlVOQ1RJT05fXyksIDApKSk7CiAgICAgIGNoYXIqIF9fcmVz dWx0ID0gKGNoYXIqKQogICAgICAgIF9BbGxvYzo6cmVhbGxvY2F0ZShfX3JlYWxfcCwgX19vbGRf c3ogKyAoaW50KSBfU19leHRyYSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IF9fbmV3X3N6ICsgKGludCkgX1NfZXh0cmEpOwogICAgICAqKHNpemVfdCopX19yZXN1bHQgPSBf X25ld19zejsKICAgICAgcmV0dXJuIF9fcmVzdWx0ICsgKGludCkgX1NfZXh0cmE7CiAgICB9CiAg fTsKIyAzMjQgIi91c3IvaW5jbHVkZS9jKysvMy4yLjEvYml0cy9zdGxfYWxsb2MuaCIgMwp0ZW1w bGF0ZTxib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4KICBjbGFzcyBfX2RlZmF1bHRfYWxsb2Nf dGVtcGxhdGUKICB7CiAgcHJpdmF0ZToKICAgIGVudW0ge19BTElHTiA9IDh9OwogICAgZW51bSB7 X01BWF9CWVRFUyA9IDEyOH07CiAgICBlbnVtIHtfTkZSRUVMSVNUUyA9IF9NQVhfQllURVMgLyBf QUxJR059OwoKICAgIHVuaW9uIF9PYmoKICAgIHsKICAgICAgdW5pb24gX09iaiogX01fZnJlZV9s aXN0X2xpbms7CiAgICAgIGNoYXIgX01fY2xpZW50X2RhdGFbMV07CiAgICB9OwoKICAgIHN0YXRp YyBfT2JqKiB2b2xhdGlsZSBfU19mcmVlX2xpc3RbX05GUkVFTElTVFNdOwoKCiAgICBzdGF0aWMg Y2hhciogX1Nfc3RhcnRfZnJlZTsKICAgIHN0YXRpYyBjaGFyKiBfU19lbmRfZnJlZTsKICAgIHN0 YXRpYyBzaXplX3QgX1NfaGVhcF9zaXplOwoKICAgIHN0YXRpYyBfU1RMX211dGV4X2xvY2sgX1Nf bm9kZV9hbGxvY2F0b3JfbG9jazsKCiAgICBzdGF0aWMgc2l6ZV90CiAgICBfU19yb3VuZF91cChz aXplX3QgX19ieXRlcykKICAgIHsgcmV0dXJuICgoKF9fYnl0ZXMpICsgKHNpemVfdCkgX0FMSUdO LTEpICYgfigoc2l6ZV90KSBfQUxJR04gLSAxKSk7IH0KCiAgICBzdGF0aWMgc2l6ZV90CiAgICBf U19mcmVlbGlzdF9pbmRleChzaXplX3QgX19ieXRlcykKICAgIHsgcmV0dXJuICgoKF9fYnl0ZXMp ICsgKHNpemVfdClfQUxJR04tMSkvKHNpemVfdClfQUxJR04gLSAxKTsgfQoKCgogICAgc3RhdGlj IHZvaWQqCiAgICBfU19yZWZpbGwoc2l6ZV90IF9fbik7CgoKCiAgICBzdGF0aWMgY2hhcioKICAg IF9TX2NodW5rX2FsbG9jKHNpemVfdCBfX3NpemUsIGludCYgX19ub2Jqcyk7CgoKCiAgICBjbGFz cyBfTG9jawogICAgewogICAgcHVibGljOgogICAgICBfTG9jaygpIHsgaWYgKF9fdGhyZWFkcykg X1Nfbm9kZV9hbGxvY2F0b3JfbG9jay5fTV9hY3F1aXJlX2xvY2soKTsgfQogICAgICB+X0xvY2so KSB7IGlmIChfX3RocmVhZHMpIF9TX25vZGVfYWxsb2NhdG9yX2xvY2suX01fcmVsZWFzZV9sb2Nr KCk7IH0KICAgIH0gX19hdHRyaWJ1dGVfXyAoKF9fdW51c2VkX18pKTsKICAgIGZyaWVuZCBjbGFz cyBfTG9jazsKCiAgcHVibGljOgoKICAgIHN0YXRpYyB2b2lkKgogICAgYWxsb2NhdGUoc2l6ZV90 IF9fbikKICAgIHsKICAgICAgdm9pZCogX19yZXQgPSAwOwoKICAgICAgaWYgKF9fbiA+IChzaXpl X3QpIF9NQVhfQllURVMpCiAgICAgICAgX19yZXQgPSBfX21lbV9pbnRlcmZhY2U6OmFsbG9jYXRl KF9fbik7CiAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICBfT2JqKiB2b2xhdGlsZSogX19t eV9mcmVlX2xpc3QgPSBfU19mcmVlX2xpc3QKICAgICAgICAgICAgKyBfU19mcmVlbGlzdF9pbmRl eChfX24pOwoKCgogICAgICAgICAgX0xvY2sgX19sb2NrX2luc3RhbmNlOwogICAgICAgICAgX09i aiogX19yZXN0cmljdF9fIF9fcmVzdWx0ID0gKl9fbXlfZnJlZV9saXN0OwogICAgICAgICAgaWYg KF9fcmVzdWx0ID09IDApCiAgICAgICAgICAgIF9fcmV0ID0gX1NfcmVmaWxsKF9TX3JvdW5kX3Vw KF9fbikpOwogICAgICAgICAgZWxzZQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgKl9fbXlf ZnJlZV9saXN0ID0gX19yZXN1bHQgLT4gX01fZnJlZV9saXN0X2xpbms7CiAgICAgICAgICAgICAg X19yZXQgPSBfX3Jlc3VsdDsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuIF9f cmV0OwogICAgfTsKCgogICAgc3RhdGljIHZvaWQKICAgIGRlYWxsb2NhdGUodm9pZCogX19wLCBz aXplX3QgX19uKQogICAgewogICAgICBpZiAoX19uID4gKHNpemVfdCkgX01BWF9CWVRFUykKICAg ICAgICBfX21lbV9pbnRlcmZhY2U6OmRlYWxsb2NhdGUoX19wLCBfX24pOwogICAgICBlbHNlCiAg ICAgICAgewogICAgICAgICAgX09iaiogdm9sYXRpbGUqIF9fbXlfZnJlZV9saXN0CiAgICAgICAg ICAgID0gX1NfZnJlZV9saXN0ICsgX1NfZnJlZWxpc3RfaW5kZXgoX19uKTsKICAgICAgICAgIF9P YmoqIF9fcSA9IChfT2JqKilfX3A7CgoKCiAgICAgICAgICBfTG9jayBfX2xvY2tfaW5zdGFuY2U7 CiAgICAgICAgICBfX3EgLT4gX01fZnJlZV9saXN0X2xpbmsgPSAqX19teV9mcmVlX2xpc3Q7CiAg ICAgICAgICAqX19teV9mcmVlX2xpc3QgPSBfX3E7CiAgICAgICAgfQogICAgfQoKICAgIHN0YXRp YyB2b2lkKgogICAgcmVhbGxvY2F0ZSh2b2lkKiBfX3AsIHNpemVfdCBfX29sZF9zeiwgc2l6ZV90 IF9fbmV3X3N6KTsKICB9OwoKCiAgdGVtcGxhdGU8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+ CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I9PShjb25zdCBfX2RlZmF1bHRfYWxsb2NfdGVt cGxhdGU8X190aHJlYWRzLCBfX2luc3Q+JiwKICAgICAgICAgICAgICAgY29uc3QgX19kZWZhdWx0 X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0PiYpCiAgICB7IHJldHVybiB0cnVlOyB9 CgogIHRlbXBsYXRlPGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0PgogICAgaW5saW5lIGJvb2wK ICAgIG9wZXJhdG9yIT0oY29uc3QgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywg X19pbnN0PiYsCiAgICAgICAgICAgICAgIGNvbnN0IF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxf X3RocmVhZHMsIF9faW5zdD4mKQogICAgeyByZXR1cm4gZmFsc2U7IH0KCgoKCgogIHRlbXBsYXRl PGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0PgogICAgY2hhcioKICAgIF9fZGVmYXVsdF9hbGxv Y190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD46Ol9TX2NodW5rX2FsbG9jKHNpemVfdCBfX3Np emUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBpbnQmIF9fbm9ianMpCiAgICB7CiAgICAgIGNoYXIqIF9fcmVzdWx0OwogICAg ICBzaXplX3QgX190b3RhbF9ieXRlcyA9IF9fc2l6ZSAqIF9fbm9ianM7CiAgICAgIHNpemVfdCBf X2J5dGVzX2xlZnQgPSBfU19lbmRfZnJlZSAtIF9TX3N0YXJ0X2ZyZWU7CgogICAgICBpZiAoX19i eXRlc19sZWZ0ID49IF9fdG90YWxfYnl0ZXMpCiAgICAgIHsKICAgICAgICBfX3Jlc3VsdCA9IF9T X3N0YXJ0X2ZyZWU7CiAgICAgICAgX1Nfc3RhcnRfZnJlZSArPSBfX3RvdGFsX2J5dGVzOwogICAg ICAgIHJldHVybihfX3Jlc3VsdCk7CiAgICAgIH0KICAgICAgZWxzZSBpZiAoX19ieXRlc19sZWZ0 ID49IF9fc2l6ZSkKICAgICAgICB7CiAgICAgICAgICBfX25vYmpzID0gKGludCkoX19ieXRlc19s ZWZ0L19fc2l6ZSk7CiAgICAgICAgICBfX3RvdGFsX2J5dGVzID0gX19zaXplICogX19ub2JqczsK ICAgICAgICAgIF9fcmVzdWx0ID0gX1Nfc3RhcnRfZnJlZTsKICAgICAgICAgIF9TX3N0YXJ0X2Zy ZWUgKz0gX190b3RhbF9ieXRlczsKICAgICAgICAgIHJldHVybihfX3Jlc3VsdCk7CiAgICAgICAg fQogICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgc2l6ZV90IF9fYnl0ZXNfdG9fZ2V0ID0K ICAgICAgICAgICAgMiAqIF9fdG90YWxfYnl0ZXMgKyBfU19yb3VuZF91cChfU19oZWFwX3NpemUg Pj4gNCk7CgogICAgICAgICAgaWYgKF9fYnl0ZXNfbGVmdCA+IDApCiAgICAgICAgICAgIHsKICAg ICAgICAgICAgICBfT2JqKiB2b2xhdGlsZSogX19teV9mcmVlX2xpc3QgPQogICAgICAgICAgICAg ICAgX1NfZnJlZV9saXN0ICsgX1NfZnJlZWxpc3RfaW5kZXgoX19ieXRlc19sZWZ0KTsKCiAgICAg ICAgICAgICAgKChfT2JqKilfU19zdGFydF9mcmVlKSAtPiBfTV9mcmVlX2xpc3RfbGluayA9ICpf X215X2ZyZWVfbGlzdDsKICAgICAgICAgICAgICAqX19teV9mcmVlX2xpc3QgPSAoX09iaiopX1Nf c3RhcnRfZnJlZTsKICAgICAgICAgICAgfQogICAgICAgICAgX1Nfc3RhcnRfZnJlZSA9IChjaGFy KikgX19tZW1faW50ZXJmYWNlOjphbGxvY2F0ZShfX2J5dGVzX3RvX2dldCk7CiAgICAgICAgICBp ZiAoMCA9PSBfU19zdGFydF9mcmVlKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgc2l6ZV90 IF9faTsKICAgICAgICAgICAgICBfT2JqKiB2b2xhdGlsZSogX19teV9mcmVlX2xpc3Q7CiAgICAg ICAgICAgICAgX09iaiogX19wOwoKCgogICAgICAgICAgICAgIF9faSA9IF9fc2l6ZTsKICAgICAg ICAgICAgICBmb3IgKDsgX19pIDw9IChzaXplX3QpIF9NQVhfQllURVM7IF9faSArPSAoc2l6ZV90 KSBfQUxJR04pCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIF9fbXlfZnJlZV9s aXN0ID0gX1NfZnJlZV9saXN0ICsgX1NfZnJlZWxpc3RfaW5kZXgoX19pKTsKICAgICAgICAgICAg ICAgICAgX19wID0gKl9fbXlfZnJlZV9saXN0OwogICAgICAgICAgICAgICAgICBpZiAoMCAhPSBf X3ApCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgKl9fbXlfZnJl ZV9saXN0ID0gX19wIC0+IF9NX2ZyZWVfbGlzdF9saW5rOwogICAgICAgICAgICAgICAgICAgICAg X1Nfc3RhcnRfZnJlZSA9IChjaGFyKilfX3A7CiAgICAgICAgICAgICAgICAgICAgICBfU19lbmRf ZnJlZSA9IF9TX3N0YXJ0X2ZyZWUgKyBfX2k7CiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4o X1NfY2h1bmtfYWxsb2MoX19zaXplLCBfX25vYmpzKSk7CgoKICAgICAgICAgICAgICAgICAgICB9 CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgX1NfZW5kX2ZyZWUgPSAwOwogICAgICAg ICAgICAgIF9TX3N0YXJ0X2ZyZWUgPSAoY2hhciopX19tZW1faW50ZXJmYWNlOjphbGxvY2F0ZShf X2J5dGVzX3RvX2dldCk7CgoKICAgICAgICAgICAgfQogICAgICAgICAgX1NfaGVhcF9zaXplICs9 IF9fYnl0ZXNfdG9fZ2V0OwogICAgICAgICAgX1NfZW5kX2ZyZWUgPSBfU19zdGFydF9mcmVlICsg X19ieXRlc190b19nZXQ7CiAgICAgICAgICByZXR1cm4oX1NfY2h1bmtfYWxsb2MoX19zaXplLCBf X25vYmpzKSk7CiAgICAgICAgfQogICAgfQoKCgoKCiAgdGVtcGxhdGU8Ym9vbCBfX3RocmVhZHMs IGludCBfX2luc3Q+CiAgICB2b2lkKgogICAgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhy ZWFkcywgX19pbnN0Pjo6X1NfcmVmaWxsKHNpemVfdCBfX24pCiAgICB7CiAgICAgIGludCBfX25v YmpzID0gMjA7CiAgICAgIGNoYXIqIF9fY2h1bmsgPSBfU19jaHVua19hbGxvYyhfX24sIF9fbm9i anMpOwogICAgICBfT2JqKiB2b2xhdGlsZSogX19teV9mcmVlX2xpc3Q7CiAgICAgIF9PYmoqIF9f cmVzdWx0OwogICAgICBfT2JqKiBfX2N1cnJlbnRfb2JqOwogICAgICBfT2JqKiBfX25leHRfb2Jq OwogICAgICBpbnQgX19pOwoKICAgICAgaWYgKDEgPT0gX19ub2JqcykgcmV0dXJuKF9fY2h1bmsp OwogICAgICBfX215X2ZyZWVfbGlzdCA9IF9TX2ZyZWVfbGlzdCArIF9TX2ZyZWVsaXN0X2luZGV4 KF9fbik7CgoKICAgICAgX19yZXN1bHQgPSAoX09iaiopX19jaHVuazsKICAgICAgKl9fbXlfZnJl ZV9saXN0ID0gX19uZXh0X29iaiA9IChfT2JqKikoX19jaHVuayArIF9fbik7CiAgICAgIGZvciAo X19pID0gMTsgOyBfX2krKykgewogICAgICAgIF9fY3VycmVudF9vYmogPSBfX25leHRfb2JqOwog ICAgICAgIF9fbmV4dF9vYmogPSAoX09iaiopKChjaGFyKilfX25leHRfb2JqICsgX19uKTsKICAg ICAgICBpZiAoX19ub2JqcyAtIDEgPT0gX19pKSB7CiAgICAgICAgICBfX2N1cnJlbnRfb2JqIC0+ IF9NX2ZyZWVfbGlzdF9saW5rID0gMDsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0gZWxzZSB7 CiAgICAgICAgICBfX2N1cnJlbnRfb2JqIC0+IF9NX2ZyZWVfbGlzdF9saW5rID0gX19uZXh0X29i ajsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuKF9fcmVzdWx0KTsKICAgIH0KCgogIHRl bXBsYXRlPGJvb2wgdGhyZWFkcywgaW50IGluc3Q+CiAgICB2b2lkKgogICAgX19kZWZhdWx0X2Fs bG9jX3RlbXBsYXRlPHRocmVhZHMsIGluc3Q+OjpyZWFsbG9jYXRlKHZvaWQqIF9fcCwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qg X19vbGRfc3osCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgc2l6ZV90IF9fbmV3X3N6KQogICAgewogICAgICB2b2lkKiBfX3Jlc3VsdDsKICAg ICAgc2l6ZV90IF9fY29weV9zejsKCiAgICAgIGlmIChfX29sZF9zeiA+IChzaXplX3QpIF9NQVhf QllURVMgJiYgX19uZXdfc3ogPiAoc2l6ZV90KSBfTUFYX0JZVEVTKSB7CiAgICAgICAgcmV0dXJu KHJlYWxsb2MoX19wLCBfX25ld19zeikpOwogICAgICB9CiAgICAgIGlmIChfU19yb3VuZF91cChf X29sZF9zeikgPT0gX1Nfcm91bmRfdXAoX19uZXdfc3opKSByZXR1cm4oX19wKTsKICAgICAgX19y ZXN1bHQgPSBhbGxvY2F0ZShfX25ld19zeik7CiAgICAgIF9fY29weV9zeiA9IF9fbmV3X3N6ID4g X19vbGRfc3o/IF9fb2xkX3N6IDogX19uZXdfc3o7CiAgICAgIG1lbWNweShfX3Jlc3VsdCwgX19w LCBfX2NvcHlfc3opOwogICAgICBkZWFsbG9jYXRlKF9fcCwgX19vbGRfc3opOwogICAgICByZXR1 cm4oX19yZXN1bHQpOwogICAgfQoKICB0ZW1wbGF0ZTxib29sIF9fdGhyZWFkcywgaW50IF9faW5z dD4KICBfU1RMX211dGV4X2xvY2sKICBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRz LCBfX2luc3Q+OjpfU19ub2RlX2FsbG9jYXRvcl9sb2NrCiAgPSB7IHswLCAwLCAwLCBQVEhSRUFE X01VVEVYX1RJTUVEX05QLCB7IDAsIDAgfX0gfTsKCiAgdGVtcGxhdGU8Ym9vbCBfX3RocmVhZHMs IGludCBfX2luc3Q+CiAgY2hhciogX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywg X19pbnN0Pjo6X1Nfc3RhcnRfZnJlZSA9IDA7CgogIHRlbXBsYXRlPGJvb2wgX190aHJlYWRzLCBp bnQgX19pbnN0PgogIGNoYXIqIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9f aW5zdD46Ol9TX2VuZF9mcmVlID0gMDsKCiAgdGVtcGxhdGU8Ym9vbCBfX3RocmVhZHMsIGludCBf X2luc3Q+CiAgc2l6ZV90IF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5z dD46Ol9TX2hlYXBfc2l6ZSA9IDA7CgogIHRlbXBsYXRlPGJvb2wgX190aHJlYWRzLCBpbnQgX19p bnN0PgogIHR5cGVuYW1lIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5z dD46Ol9PYmoqIHZvbGF0aWxlCiAgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywg X19pbnN0Pjo6X1NfZnJlZV9saXN0W19ORlJFRUxJU1RTXTsKCiAgdHlwZWRlZiBfX2RlZmF1bHRf YWxsb2NfdGVtcGxhdGU8dHJ1ZSwgMD4gX19hbGxvYzsKICB0eXBlZGVmIF9fZGVmYXVsdF9hbGxv Y190ZW1wbGF0ZTxmYWxzZSwgMD4gX19zaW5nbGVfY2xpZW50X2FsbG9jOwojIDYxMyAiL3Vzci9p bmNsdWRlL2MrKy8zLjIuMS9iaXRzL3N0bF9hbGxvYy5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfVHA+ CmNsYXNzIGFsbG9jYXRvcgp7CiAgdHlwZWRlZiBfX2FsbG9jIF9BbGxvYzsKcHVibGljOgogIHR5 cGVkZWYgc2l6ZV90IHNpemVfdHlwZTsKICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5 cGU7CiAgdHlwZWRlZiBfVHAqIHBvaW50ZXI7CiAgdHlwZWRlZiBjb25zdCBfVHAqIGNvbnN0X3Bv aW50ZXI7CiAgdHlwZWRlZiBfVHAmIHJlZmVyZW5jZTsKICB0eXBlZGVmIGNvbnN0IF9UcCYgY29u c3RfcmVmZXJlbmNlOwogIHR5cGVkZWYgX1RwIHZhbHVlX3R5cGU7CgogIHRlbXBsYXRlIDxjbGFz cyBfVHAxPiBzdHJ1Y3QgcmViaW5kIHsKICAgIHR5cGVkZWYgYWxsb2NhdG9yPF9UcDE+IG90aGVy OwogIH07CgogIGFsbG9jYXRvcigpIHRocm93KCkge30KICBhbGxvY2F0b3IoY29uc3QgYWxsb2Nh dG9yJikgdGhyb3coKSB7fQogIHRlbXBsYXRlIDxjbGFzcyBfVHAxPiBhbGxvY2F0b3IoY29uc3Qg YWxsb2NhdG9yPF9UcDE+JikgdGhyb3coKSB7fQogIH5hbGxvY2F0b3IoKSB0aHJvdygpIHt9Cgog IHBvaW50ZXIgYWRkcmVzcyhyZWZlcmVuY2UgX194KSBjb25zdCB7IHJldHVybiAmX194OyB9CiAg Y29uc3RfcG9pbnRlciBhZGRyZXNzKGNvbnN0X3JlZmVyZW5jZSBfX3gpIGNvbnN0IHsgcmV0dXJu ICZfX3g7IH0KCgoKICBfVHAqIGFsbG9jYXRlKHNpemVfdHlwZSBfX24sIGNvbnN0IHZvaWQqID0g MCkgewogICAgcmV0dXJuIF9fbiAhPSAwID8gc3RhdGljX2Nhc3Q8X1RwKj4oX0FsbG9jOjphbGxv Y2F0ZShfX24gKiBzaXplb2YoX1RwKSkpCiAgICAgICAgICAgICAgICAgICAgOiAwOwogIH0KCgog IHZvaWQgZGVhbGxvY2F0ZShwb2ludGVyIF9fcCwgc2l6ZV90eXBlIF9fbikKICAgIHsgX0FsbG9j OjpkZWFsbG9jYXRlKF9fcCwgX19uICogc2l6ZW9mKF9UcCkpOyB9CgogIHNpemVfdHlwZSBtYXhf c2l6ZSgpIGNvbnN0IHRocm93KCkKICAgIHsgcmV0dXJuIHNpemVfdCgtMSkgLyBzaXplb2YoX1Rw KTsgfQoKICB2b2lkIGNvbnN0cnVjdChwb2ludGVyIF9fcCwgY29uc3QgX1RwJiBfX3ZhbCkgeyBu ZXcoX19wKSBfVHAoX192YWwpOyB9CiAgdm9pZCBkZXN0cm95KHBvaW50ZXIgX19wKSB7IF9fcC0+ fl9UcCgpOyB9Cn07Cgp0ZW1wbGF0ZTw+CmNsYXNzIGFsbG9jYXRvcjx2b2lkPiB7CnB1YmxpYzoK ICB0eXBlZGVmIHNpemVfdCBzaXplX3R5cGU7CiAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5j ZV90eXBlOwogIHR5cGVkZWYgdm9pZCogcG9pbnRlcjsKICB0eXBlZGVmIGNvbnN0IHZvaWQqIGNv bnN0X3BvaW50ZXI7CiAgdHlwZWRlZiB2b2lkIHZhbHVlX3R5cGU7CgogIHRlbXBsYXRlIDxjbGFz cyBfVHAxPiBzdHJ1Y3QgcmViaW5kIHsKICAgIHR5cGVkZWYgYWxsb2NhdG9yPF9UcDE+IG90aGVy OwogIH07Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgppbmxpbmUgYm9vbCBv cGVyYXRvcj09KGNvbnN0IGFsbG9jYXRvcjxfVDE+JiwgY29uc3QgYWxsb2NhdG9yPF9UMj4mKQp7 CiAgcmV0dXJuIHRydWU7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4KaW5saW5l IGJvb2wgb3BlcmF0b3IhPShjb25zdCBhbGxvY2F0b3I8X1QxPiYsIGNvbnN0IGFsbG9jYXRvcjxf VDI+JikKewogIHJldHVybiBmYWxzZTsKfQojIDY5NSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9i aXRzL3N0bF9hbGxvYy5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4Kc3Ry dWN0IF9fYWxsb2NhdG9yCnsKICBfQWxsb2MgX191bmRlcmx5aW5nX2FsbG9jOwoKICB0eXBlZGVm IHNpemVfdCBzaXplX3R5cGU7CiAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwog IHR5cGVkZWYgX1RwKiBwb2ludGVyOwogIHR5cGVkZWYgY29uc3QgX1RwKiBjb25zdF9wb2ludGVy OwogIHR5cGVkZWYgX1RwJiByZWZlcmVuY2U7CiAgdHlwZWRlZiBjb25zdCBfVHAmIGNvbnN0X3Jl ZmVyZW5jZTsKICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBlOwoKICB0ZW1wbGF0ZSA8Y2xhc3MgX1Rw MT4gc3RydWN0IHJlYmluZCB7CiAgICB0eXBlZGVmIF9fYWxsb2NhdG9yPF9UcDEsIF9BbGxvYz4g b3RoZXI7CiAgfTsKCiAgX19hbGxvY2F0b3IoKSB0aHJvdygpIHt9CiAgX19hbGxvY2F0b3IoY29u c3QgX19hbGxvY2F0b3ImIF9fYSkgdGhyb3coKQogICAgOiBfX3VuZGVybHlpbmdfYWxsb2MoX19h Ll9fdW5kZXJseWluZ19hbGxvYykge30KICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwMT4KICBfX2FsbG9j YXRvcihjb25zdCBfX2FsbG9jYXRvcjxfVHAxLCBfQWxsb2M+JiBfX2EpIHRocm93KCkKICAgIDog X191bmRlcmx5aW5nX2FsbG9jKF9fYS5fX3VuZGVybHlpbmdfYWxsb2MpIHt9CiAgfl9fYWxsb2Nh dG9yKCkgdGhyb3coKSB7fQoKICBwb2ludGVyIGFkZHJlc3MocmVmZXJlbmNlIF9feCkgY29uc3Qg eyByZXR1cm4gJl9feDsgfQogIGNvbnN0X3BvaW50ZXIgYWRkcmVzcyhjb25zdF9yZWZlcmVuY2Ug X194KSBjb25zdCB7IHJldHVybiAmX194OyB9CgoKICBfVHAqIGFsbG9jYXRlKHNpemVfdHlwZSBf X24sIGNvbnN0IHZvaWQqID0gMCkgewogICAgcmV0dXJuIF9fbiAhPSAwCiAgICAgICAgPyBzdGF0 aWNfY2FzdDxfVHAqPihfX3VuZGVybHlpbmdfYWxsb2MuYWxsb2NhdGUoX19uICogc2l6ZW9mKF9U cCkpKQogICAgICAgIDogMDsKICB9CgoKICB2b2lkIGRlYWxsb2NhdGUocG9pbnRlciBfX3AsIHNp emVfdHlwZSBfX24pCiAgICB7IF9fdW5kZXJseWluZ19hbGxvYy5kZWFsbG9jYXRlKF9fcCwgX19u ICogc2l6ZW9mKF9UcCkpOyB9CgogIHNpemVfdHlwZSBtYXhfc2l6ZSgpIGNvbnN0IHRocm93KCkK ICAgIHsgcmV0dXJuIHNpemVfdCgtMSkgLyBzaXplb2YoX1RwKTsgfQoKICB2b2lkIGNvbnN0cnVj dChwb2ludGVyIF9fcCwgY29uc3QgX1RwJiBfX3ZhbCkgeyBuZXcoX19wKSBfVHAoX192YWwpOyB9 CiAgdm9pZCBkZXN0cm95KHBvaW50ZXIgX19wKSB7IF9fcC0+fl9UcCgpOyB9Cn07Cgp0ZW1wbGF0 ZSA8Y2xhc3MgX0FsbG9jPgpjbGFzcyBfX2FsbG9jYXRvcjx2b2lkLCBfQWxsb2M+IHsKICB0eXBl ZGVmIHNpemVfdCBzaXplX3R5cGU7CiAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBl OwogIHR5cGVkZWYgdm9pZCogcG9pbnRlcjsKICB0eXBlZGVmIGNvbnN0IHZvaWQqIGNvbnN0X3Bv aW50ZXI7CiAgdHlwZWRlZiB2b2lkIHZhbHVlX3R5cGU7CgogIHRlbXBsYXRlIDxjbGFzcyBfVHAx PiBzdHJ1Y3QgcmViaW5kIHsKICAgIHR5cGVkZWYgX19hbGxvY2F0b3I8X1RwMSwgX0FsbG9jPiBv dGhlcjsKICB9Owp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgppbmxpbmUg Ym9vbCBvcGVyYXRvcj09KGNvbnN0IF9fYWxsb2NhdG9yPF9UcCwgX0FsbG9jPiYgX19hMSwKICAg ICAgICAgICAgICAgICAgICAgICBjb25zdCBfX2FsbG9jYXRvcjxfVHAsIF9BbGxvYz4mIF9fYTIp CnsKICByZXR1cm4gX19hMS5fX3VuZGVybHlpbmdfYWxsb2MgPT0gX19hMi5fX3VuZGVybHlpbmdf YWxsb2M7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wg b3BlcmF0b3IhPShjb25zdCBfX2FsbG9jYXRvcjxfVHAsIF9BbGxvYz4mIF9fYTEsCiAgICAgICAg ICAgICAgICAgICAgICAgY29uc3QgX19hbGxvY2F0b3I8X1RwLCBfQWxsb2M+JiBfX2EyKQp7CiAg cmV0dXJuIF9fYTEuX191bmRlcmx5aW5nX2FsbG9jICE9IF9fYTIuX191bmRlcmx5aW5nX2FsbG9j Owp9CgoKCgoKCgp0ZW1wbGF0ZSA8aW50IGluc3Q+CmlubGluZSBib29sIG9wZXJhdG9yPT0oY29u c3QgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8aW5zdD4mLAogICAgICAgICAgICAgICAgICAgICAg IGNvbnN0IF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPGluc3Q+JikKewogIHJldHVybiB0cnVlOwp9 Cgp0ZW1wbGF0ZSA8aW50IF9faW5zdD4KaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBfX21h bGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+JiwKICAgICAgICAgICAgICAgICAgICAgICBjb25z dCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+JikKewogIHJldHVybiBmYWxzZTsKfQoK dGVtcGxhdGUgPGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBfX2Rl YnVnX2FsbG9jPF9BbGxvYz4mLAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9fZGVidWdf YWxsb2M8X0FsbG9jPiYpIHsKICByZXR1cm4gdHJ1ZTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9BbGxv Yz4KaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBfX2RlYnVnX2FsbG9jPF9BbGxvYz4mLAog ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9fZGVidWdfYWxsb2M8X0FsbG9jPiYpIHsKICBy ZXR1cm4gZmFsc2U7Cn0KIyA4NDAgIi91c3IvaW5jbHVkZS9jKysvMy4yLjEvYml0cy9zdGxfYWxs b2MuaCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2NhdG9yPgpzdHJ1Y3QgX0Fs bG9jX3RyYWl0cwp7CiAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5zdGFuY2VsZXNzID0gZmFsc2U7 CiAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2NhdG9yOjp0ZW1wbGF0ZSByZWJpbmQ8X1RwPjo6b3Ro ZXIgYWxsb2NhdG9yX3R5cGU7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2Nh dG9yPgpjb25zdCBib29sIF9BbGxvY190cmFpdHM8X1RwLCBfQWxsb2NhdG9yPjo6X1NfaW5zdGFu Y2VsZXNzOwoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9UcDE+CnN0cnVjdCBfQWxsb2Nf dHJhaXRzPF9UcCwgYWxsb2NhdG9yPF9UcDE+ID4KewogIHN0YXRpYyBjb25zdCBib29sIF9TX2lu c3RhbmNlbGVzcyA9IHRydWU7CiAgdHlwZWRlZiBfX3NpbXBsZV9hbGxvYzxfVHAsIF9fYWxsb2M+ IF9BbGxvY190eXBlOwogIHR5cGVkZWYgYWxsb2NhdG9yPF9UcD4gYWxsb2NhdG9yX3R5cGU7Cn07 CgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBpbnQgX19pbnN0PgpzdHJ1Y3QgX0FsbG9jX3RyYWl0 czxfVHAsIF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9faW5zdD4gPgp7CiAgc3RhdGljIGNvbnN0 IGJvb2wgX1NfaW5zdGFuY2VsZXNzID0gdHJ1ZTsKICB0eXBlZGVmIF9fc2ltcGxlX2FsbG9jPF9U cCwgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0PiA+IF9BbGxvY190eXBlOwogIHR5cGVk ZWYgX19hbGxvY2F0b3I8X1RwLCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+ID4gYWxs b2NhdG9yX3R5cGU7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgYm9vbCBfX3RocmVhZHMsIGlu dCBfX2luc3Q+CnN0cnVjdCBfQWxsb2NfdHJhaXRzPF9UcCwgX19kZWZhdWx0X2FsbG9jX3RlbXBs YXRlPF9fdGhyZWFkcywgX19pbnN0PiA+CnsKICBzdGF0aWMgY29uc3QgYm9vbCBfU19pbnN0YW5j ZWxlc3MgPSB0cnVlOwogIHR5cGVkZWYgX19zaW1wbGVfYWxsb2M8X1RwLCBfX2RlZmF1bHRfYWxs b2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+ID4KICAgICAgICAgIF9BbGxvY190eXBlOwog IHR5cGVkZWYgX19hbGxvY2F0b3I8X1RwLCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJl YWRzLCBfX2luc3Q+ID4KICAgICAgICAgIGFsbG9jYXRvcl90eXBlOwp9OwoKCnRlbXBsYXRlIDxj bGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4Kc3RydWN0IF9BbGxvY190cmFpdHM8X1RwLCBfX2RlYnVn X2FsbG9jPF9BbGxvYz4gPgp7CiAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5zdGFuY2VsZXNzID0g dHJ1ZTsKICB0eXBlZGVmIF9fc2ltcGxlX2FsbG9jPF9UcCwgX19kZWJ1Z19hbGxvYzxfQWxsb2M+ ID4gX0FsbG9jX3R5cGU7CiAgdHlwZWRlZiBfX2FsbG9jYXRvcjxfVHAsIF9fZGVidWdfYWxsb2M8 X0FsbG9jPiA+IGFsbG9jYXRvcl90eXBlOwp9OwoKCgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xh c3MgX1RwMSwgaW50IF9faW5zdD4Kc3RydWN0IF9BbGxvY190cmFpdHM8X1RwLAogICAgICAgICAg ICAgICAgICAgICBfX2FsbG9jYXRvcjxfVHAxLCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2lu c3Q+ID4gPgp7CiAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5zdGFuY2VsZXNzID0gdHJ1ZTsKICB0 eXBlZGVmIF9fc2ltcGxlX2FsbG9jPF9UcCwgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0 PiA+IF9BbGxvY190eXBlOwogIHR5cGVkZWYgX19hbGxvY2F0b3I8X1RwLCBfX21hbGxvY19hbGxv Y190ZW1wbGF0ZTxfX2luc3Q+ID4gYWxsb2NhdG9yX3R5cGU7Cn07CgoKdGVtcGxhdGUgPGNsYXNz IF9UcCwgY2xhc3MgX1RwMSwgYm9vbCBfX3RociwgaW50IF9faW5zdD4Kc3RydWN0IF9BbGxvY190 cmFpdHM8X1RwLAogICAgICAgICAgICAgICAgICAgICAgX19hbGxvY2F0b3I8X1RwMSwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3Ro ciwgX19pbnN0PiA+ID4KewogIHN0YXRpYyBjb25zdCBib29sIF9TX2luc3RhbmNlbGVzcyA9IHRy dWU7CiAgdHlwZWRlZiBfX3NpbXBsZV9hbGxvYzxfVHAsIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0 ZTxfX3RocixfX2luc3Q+ID4KICAgICAgICAgIF9BbGxvY190eXBlOwogIHR5cGVkZWYgX19hbGxv Y2F0b3I8X1RwLCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHIsX19pbnN0PiA+CiAgICAg ICAgICBhbGxvY2F0b3JfdHlwZTsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfVHAx LCBjbGFzcyBfQWxsb2M+CnN0cnVjdCBfQWxsb2NfdHJhaXRzPF9UcCwgX19hbGxvY2F0b3I8X1Rw MSwgX19kZWJ1Z19hbGxvYzxfQWxsb2M+ID4gPgp7CiAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5z dGFuY2VsZXNzID0gdHJ1ZTsKICB0eXBlZGVmIF9fc2ltcGxlX2FsbG9jPF9UcCwgX19kZWJ1Z19h bGxvYzxfQWxsb2M+ID4gX0FsbG9jX3R5cGU7CiAgdHlwZWRlZiBfX2FsbG9jYXRvcjxfVHAsIF9f ZGVidWdfYWxsb2M8X0FsbG9jPiA+IGFsbG9jYXRvcl90eXBlOwp9OwoKCgoKCiAgZXh0ZXJuIHRl bXBsYXRlIGNsYXNzIGFsbG9jYXRvcjxjaGFyPjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgYWxs b2NhdG9yPHdjaGFyX3Q+OwoKCgogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBfX2RlZmF1bHRfYWxs b2NfdGVtcGxhdGU8dHJ1ZSwgMD47Cgp9CiMgNTYgIi91c3IvaW5jbHVkZS9jKysvMy4yLjEvbWVt b3J5IiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL2JpdHMvc3RsX2NvbnN0cnVjdC5o IiAxIDMKIyA2NyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9iaXRzL3N0bF9jb25zdHJ1Y3QuaCIg MwpuYW1lc3BhY2Ugc3RkCnsKCgoKCgoKICB0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+ CiAgICBpbmxpbmUgdm9pZAogICAgX0NvbnN0cnVjdChfVDEqIF9fcCwgY29uc3QgX1QyJiBfX3Zh bHVlKQogICAgeyBuZXcgKHN0YXRpY19jYXN0PHZvaWQqPihfX3ApKSBfVDEoX192YWx1ZSk7IH0K CgoKCgoKCiAgdGVtcGxhdGUgPGNsYXNzIF9UMT4KICAgIGlubGluZSB2b2lkCiAgICBfQ29uc3Ry dWN0KF9UMSogX19wKQogICAgeyBuZXcgKHN0YXRpY19jYXN0PHZvaWQqPihfX3ApKSBfVDEoKTsg fQojIDk4ICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL2JpdHMvc3RsX2NvbnN0cnVjdC5oIiAzCiAg dGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CiAgICBpbmxpbmUgdm9pZAogICAgX19k ZXN0cm95X2F1eChfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19s YXN0LCBfX2ZhbHNlX3R5cGUpCiAgICB7IGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19m aXJzdCkgX0Rlc3Ryb3koJipfX2ZpcnN0KTsgfQojIDExMiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIu MS9iaXRzL3N0bF9jb25zdHJ1Y3QuaCIgMwogIHRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJh dG9yPgogICAgaW5saW5lIHZvaWQKICAgIF9fZGVzdHJveV9hdXgoX0ZvcndhcmRJdGVyYXRvciwg X0ZvcndhcmRJdGVyYXRvciwgX190cnVlX3R5cGUpCiAgICB7IH0KCgoKCgoKICB0ZW1wbGF0ZSA8 Y2xhc3MgX1RwPgogICAgaW5saW5lIHZvaWQKICAgIF9EZXN0cm95KF9UcCogX19wb2ludGVyKQog ICAgeyBfX3BvaW50ZXItPn5fVHAoKTsgfQojIDEzNCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9i aXRzL3N0bF9jb25zdHJ1Y3QuaCIgMwogIHRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9y PgogICAgaW5saW5lIHZvaWQKICAgIF9EZXN0cm95KF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwg X0ZvcndhcmRJdGVyYXRvciBfX2xhc3QpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRl cmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcmF0b3I+Ojp2YWx1ZV90eXBlCiAgICAgICAgICAgICAg ICAgICAgICAgX1ZhbHVlX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX190eXBlX3RyYWl0 czxfVmFsdWVfdHlwZT46Omhhc190cml2aWFsX2Rlc3RydWN0b3IKICAgICAgICAgICAgICAgICAg ICAgICBfSGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKCiAgICAgIF9fZGVzdHJveV9hdXgoX19maXJz dCwgX19sYXN0LCBfSGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcigpKTsKICAgIH0KfQojIDU3ICIvdXNy L2luY2x1ZGUvYysrLzMuMi4xL21lbW9yeSIgMiAzCgojIDEgIi91c3IvaW5jbHVkZS9jKysvMy4y LjEvYml0cy9zdGxfdW5pbml0aWFsaXplZC5oIiAxIDMKIyA2NiAiL3Vzci9pbmNsdWRlL2MrKy8z LjIuMS9iaXRzL3N0bF91bmluaXRpYWxpemVkLmgiIDMKbmFtZXNwYWNlIHN0ZAp7CgoKCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX0ZvcndhcmRJdGVyPgogICAgaW5s aW5lIF9Gb3J3YXJkSXRlcgogICAgX191bmluaXRpYWxpemVkX2NvcHlfYXV4KF9JbnB1dEl0ZXIg X19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg X0ZvcndhcmRJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdHJ1 ZV90eXBlKQogICAgeyByZXR1cm4gY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KTsgfQoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXI+CiAg ICBfRm9yd2FyZEl0ZXIKICAgIF9fdW5pbml0aWFsaXplZF9jb3B5X2F1eChfSW5wdXRJdGVyIF9f Zmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9G b3J3YXJkSXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2ZhbHNl X3R5cGUpCiAgICB7CiAgICAgIF9Gb3J3YXJkSXRlciBfX2N1ciA9IF9fcmVzdWx0OwogICAgICB0 cnkgewogICAgICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCwgKytfX2N1 cikKICAgICAgICAgIF9Db25zdHJ1Y3QoJipfX2N1ciwgKl9fZmlyc3QpOwogICAgICAgIHJldHVy biBfX2N1cjsKICAgICAgfQogICAgICBjYXRjaCguLi4pCiAgICAgICAgewogICAgICAgICAgX0Rl c3Ryb3koX19yZXN1bHQsIF9fY3VyKTsKICAgICAgICAgIHRocm93OwogICAgICAgIH0KICAgIH0K IyAxMDYgIi91c3IvaW5jbHVkZS9jKysvMy4yLjEvYml0cy9zdGxfdW5pbml0aWFsaXplZC5oIiAz CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX0ZvcndhcmRJdGVyPgog ICAgaW5saW5lIF9Gb3J3YXJkSXRlcgogICAgdW5pbml0aWFsaXplZF9jb3B5KF9JbnB1dEl0ZXIg X19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCkKICAgIHsK ICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6dmFs dWVfdHlwZSBfVmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fdHlwZV90cmFpdHM8 X1ZhbHVlVHlwZT46OmlzX1BPRF90eXBlIF9Jc19QT0Q7CiAgICAgIHJldHVybiBfX3VuaW5pdGlh bGl6ZWRfY29weV9hdXgoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwgX0lzX1BPRCgpKTsKICAg IH0KCiAgaW5saW5lIGNoYXIqCiAgdW5pbml0aWFsaXplZF9jb3B5KGNvbnN0IGNoYXIqIF9fZmly c3QsIGNvbnN0IGNoYXIqIF9fbGFzdCwgY2hhciogX19yZXN1bHQpCiAgewogICAgbWVtbW92ZShf X3Jlc3VsdCwgX19maXJzdCwgX19sYXN0IC0gX19maXJzdCk7CiAgICByZXR1cm4gX19yZXN1bHQg KyAoX19sYXN0IC0gX19maXJzdCk7CiAgfQoKICBpbmxpbmUgd2NoYXJfdCoKICB1bmluaXRpYWxp emVkX2NvcHkoY29uc3Qgd2NoYXJfdCogX19maXJzdCwgY29uc3Qgd2NoYXJfdCogX19sYXN0LAog ICAgICAgICAgICAgICAgICAgICB3Y2hhcl90KiBfX3Jlc3VsdCkKICB7CiAgICBtZW1tb3ZlKF9f cmVzdWx0LCBfX2ZpcnN0LCBzaXplb2Yod2NoYXJfdCkgKiAoX19sYXN0IC0gX19maXJzdCkpOwog ICAgcmV0dXJuIF9fcmVzdWx0ICsgKF9fbGFzdCAtIF9fZmlyc3QpOwogIH0KCgoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSB2b2lkCiAg ICBfX3VuaW5pdGlhbGl6ZWRfZmlsbF9hdXgoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJk SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3gs IF9fdHJ1ZV90eXBlKQogICAgeyBmaWxsKF9fZmlyc3QsIF9fbGFzdCwgX194KTsgfQoKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9UcD4KICAgIHZvaWQKICAgIF9f dW5pbml0aWFsaXplZF9maWxsX2F1eChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVy IF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9feCwgX19m YWxzZV90eXBlKQogICAgewogICAgICBfRm9yd2FyZEl0ZXIgX19jdXIgPSBfX2ZpcnN0OwogICAg ICB0cnkgewogICAgICAgIGZvciAoIDsgX19jdXIgIT0gX19sYXN0OyArK19fY3VyKQogICAgICAg ICAgX0NvbnN0cnVjdCgmKl9fY3VyLCBfX3gpOwogICAgICB9CiAgICAgIGNhdGNoKC4uLikKICAg ICAgICB7CiAgICAgICAgICBfRGVzdHJveShfX2ZpcnN0LCBfX2N1cik7CiAgICAgICAgICB0aHJv dzsKICAgICAgICB9CiAgICB9CiMgMTY0ICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL2JpdHMvc3Rs X3VuaW5pdGlhbGl6ZWQuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlw ZW5hbWUgX1RwPgogICAgaW5saW5lIHZvaWQKICAgIHVuaW5pdGlhbGl6ZWRfZmlsbChfRm9yd2Fy ZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwgY29uc3QgX1RwJiBfX3gpCiAgICB7 CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OnZh bHVlX3R5cGUgX1ZhbHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5cGVfdHJhaXRz PF9WYWx1ZVR5cGU+Ojppc19QT0RfdHlwZSBfSXNfUE9EOwogICAgICBfX3VuaW5pdGlhbGl6ZWRf ZmlsbF9hdXgoX19maXJzdCwgX19sYXN0LCBfX3gsIF9Jc19QT0QoKSk7CiAgICB9CgoKCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfU2l6ZSwgdHlwZW5hbWUgX1Rw PgogICAgaW5saW5lIF9Gb3J3YXJkSXRlcgogICAgX191bmluaXRpYWxpemVkX2ZpbGxfbl9hdXgo X0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9TaXplIF9fbiwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGNvbnN0IF9UcCYgX194LCBfX3RydWVfdHlwZSkKICAgIHsKICAgICAgcmV0dXJuIGZp bGxfbihfX2ZpcnN0LCBfX24sIF9feCk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3 YXJkSXRlciwgdHlwZW5hbWUgX1NpemUsIHR5cGVuYW1lIF9UcD4KICAgIF9Gb3J3YXJkSXRlcgog ICAgX191bmluaXRpYWxpemVkX2ZpbGxfbl9hdXgoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9TaXpl IF9fbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX194LCBfX2Zh bHNlX3R5cGUpCiAgICB7CiAgICAgIF9Gb3J3YXJkSXRlciBfX2N1ciA9IF9fZmlyc3Q7CiAgICAg IHRyeSB7CiAgICAgICAgZm9yICggOyBfX24gPiAwOyAtLV9fbiwgKytfX2N1cikKICAgICAgICAg IF9Db25zdHJ1Y3QoJipfX2N1ciwgX194KTsKICAgICAgICByZXR1cm4gX19jdXI7CiAgICAgIH0K ICAgICAgY2F0Y2goLi4uKQogICAgICAgIHsKICAgICAgICAgIF9EZXN0cm95KF9fZmlyc3QsIF9f Y3VyKTsKICAgICAgICAgIHRocm93OwogICAgICAgIH0KICAgIH0KIyAyMTAgIi91c3IvaW5jbHVk ZS9jKysvMy4yLjEvYml0cy9zdGxfdW5pbml0aWFsaXplZC5oIiAzCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfU2l6ZSwgdHlwZW5hbWUgX1RwPgogICAgaW5saW5l IF9Gb3J3YXJkSXRlcgogICAgdW5pbml0aWFsaXplZF9maWxsX24oX0ZvcndhcmRJdGVyIF9fZmly c3QsIF9TaXplIF9fbiwgY29uc3QgX1RwJiBfX3gpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5h bWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsK ICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5cGVfdHJhaXRzPF9WYWx1ZVR5cGU+Ojppc19QT0Rf dHlwZSBfSXNfUE9EOwogICAgICByZXR1cm4gX191bmluaXRpYWxpemVkX2ZpbGxfbl9hdXgoX19m aXJzdCwgX19uLCBfX3gsIF9Jc19QT0QoKSk7CiAgICB9CiMgMjI3ICIvdXNyL2luY2x1ZGUvYysr LzMuMi4xL2JpdHMvc3RsX3VuaW5pdGlhbGl6ZWQuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9J bnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJdGVyMiwgdHlwZW5hbWUgX0ZvcndhcmRJdGVyPgog ICAgaW5saW5lIF9Gb3J3YXJkSXRlcgogICAgX191bmluaXRpYWxpemVkX2NvcHlfY29weShfSW5w dXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCkKICAgIHsK ICAgICAgX0ZvcndhcmRJdGVyIF9fbWlkID0gdW5pbml0aWFsaXplZF9jb3B5KF9fZmlyc3QxLCBf X2xhc3QxLCBfX3Jlc3VsdCk7CiAgICAgIHRyeSB7CiAgICAgICAgcmV0dXJuIHVuaW5pdGlhbGl6 ZWRfY29weShfX2ZpcnN0MiwgX19sYXN0MiwgX19taWQpOwogICAgICB9CiAgICAgIGNhdGNoKC4u LikKICAgICAgICB7CiAgICAgICAgICBfRGVzdHJveShfX3Jlc3VsdCwgX19taWQpOwogICAgICAg ICAgdGhyb3c7CiAgICAgICAgfQogICAgfQoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2Fy ZEl0ZXIsIHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0lucHV0SXRlcj4KICAgIGlubGluZSBfRm9y d2FyZEl0ZXIKICAgIF9fdW5pbml0aWFsaXplZF9maWxsX2NvcHkoX0ZvcndhcmRJdGVyIF9fcmVz dWx0LCBfRm9yd2FyZEl0ZXIgX19taWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv bnN0IF9UcCYgX194LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyIF9f Zmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0KQogICAgewogICAgICB1bmluaXRpYWxpemVkX2ZpbGwo X19yZXN1bHQsIF9fbWlkLCBfX3gpOwogICAgICB0cnkgewogICAgICAgIHJldHVybiB1bmluaXRp YWxpemVkX2NvcHkoX19maXJzdCwgX19sYXN0LCBfX21pZCk7CiAgICAgIH0KICAgICAgY2F0Y2go Li4uKQogICAgICAgIHsKICAgICAgICAgIF9EZXN0cm95KF9fcmVzdWx0LCBfX21pZCk7CiAgICAg ICAgICB0aHJvdzsKICAgICAgICB9CiAgICB9CgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1 dEl0ZXIsIHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1RwPgogICAgaW5saW5lIHZv aWQKICAgIF9fdW5pbml0aWFsaXplZF9jb3B5X2ZpbGwoX0lucHV0SXRlciBfX2ZpcnN0MSwgX0lu cHV0SXRlciBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0 ZXIgX19maXJzdDIsIF9Gb3J3YXJkSXRlciBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBjb25zdCBfVHAmIF9feCkKICAgIHsKICAgICAgX0ZvcndhcmRJdGVyIF9fbWlkMiA9 IHVuaW5pdGlhbGl6ZWRfY29weShfX2ZpcnN0MSwgX19sYXN0MSwgX19maXJzdDIpOwogICAgICB0 cnkgewogICAgICAgIHVuaW5pdGlhbGl6ZWRfZmlsbChfX21pZDIsIF9fbGFzdDIsIF9feCk7CiAg ICAgIH0KICAgICAgY2F0Y2goLi4uKQogICAgICAgIHsKICAgICAgICAgIF9EZXN0cm95KF9fZmly c3QyLCBfX21pZDIpOwogICAgICAgICAgdGhyb3c7CiAgICAgICAgfQogICAgfQoKfQojIDU5ICIv dXNyL2luY2x1ZGUvYysrLzMuMi4xL21lbW9yeSIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8z LjIuMS9iaXRzL3N0bF9yYXdfc3RvcmFnZV9pdGVyLmgiIDEgMwojIDY0ICIvdXNyL2luY2x1ZGUv YysrLzMuMi4xL2JpdHMvc3RsX3Jhd19zdG9yYWdlX2l0ZXIuaCIgMwpuYW1lc3BhY2Ugc3RkCnsK CgoKCiAgdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3IsIGNsYXNzIF9UcD4KICBjbGFz cyByYXdfc3RvcmFnZV9pdGVyYXRvcgogICAgOiBwdWJsaWMgaXRlcmF0b3I8b3V0cHV0X2l0ZXJh dG9yX3RhZywgdm9pZCwgdm9pZCwgdm9pZCwgdm9pZD4KICAgIHsKICAgIHByb3RlY3RlZDoKICAg ICAgX0ZvcndhcmRJdGVyYXRvciBfTV9pdGVyOwoKICAgIHB1YmxpYzoKICAgICAgZXhwbGljaXQK ICAgICAgcmF3X3N0b3JhZ2VfaXRlcmF0b3IoX0ZvcndhcmRJdGVyYXRvciBfX3gpIDogX01faXRl cihfX3gpIHt9CgogICAgICByYXdfc3RvcmFnZV9pdGVyYXRvciYKICAgICAgb3BlcmF0b3IqKCkg eyByZXR1cm4gKnRoaXM7IH0KCiAgICAgIHJhd19zdG9yYWdlX2l0ZXJhdG9yJgogICAgICBvcGVy YXRvcj0oY29uc3QgX1RwJiBfX2VsZW1lbnQpCiAgICAgIHsKICAgICAgICBfQ29uc3RydWN0KCYq X01faXRlciwgX19lbGVtZW50KTsKICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgIH0KCiAgICAg IHJhd19zdG9yYWdlX2l0ZXJhdG9yPF9Gb3J3YXJkSXRlcmF0b3IsIF9UcD4mCiAgICAgIG9wZXJh dG9yKysoKQogICAgICB7CiAgICAgICAgKytfTV9pdGVyOwogICAgICAgIHJldHVybiAqdGhpczsK ICAgICAgfQoKICAgICAgcmF3X3N0b3JhZ2VfaXRlcmF0b3I8X0ZvcndhcmRJdGVyYXRvciwgX1Rw PgogICAgICBvcGVyYXRvcisrKGludCkKICAgICAgewogICAgICAgIHJhd19zdG9yYWdlX2l0ZXJh dG9yPF9Gb3J3YXJkSXRlcmF0b3IsIF9UcD4gX190bXAgPSAqdGhpczsKICAgICAgICArK19NX2l0 ZXI7CiAgICAgICAgcmV0dXJuIF9fdG1wOwogICAgICB9CiAgICB9Owp9CiMgNjAgIi91c3IvaW5j bHVkZS9jKysvMy4yLjEvbWVtb3J5IiAyIDMKCgoKCm5hbWVzcGFjZSBzdGQKewojIDc0ICIvdXNy L2luY2x1ZGUvYysrLzMuMi4xL21lbW9yeSIgMwp0ZW1wbGF0ZSA8dHlwZW5hbWUgX1RwPgpwYWly PF9UcCosIHB0cmRpZmZfdD4KX19nZXRfdGVtcG9yYXJ5X2J1ZmZlcihwdHJkaWZmX3QgX19sZW4s IF9UcCopCnsKICBpZiAoX19sZW4gPiBwdHJkaWZmX3QoMjE0NzQ4MzY0NyAvIHNpemVvZihfVHAp KSkKICAgIF9fbGVuID0gMjE0NzQ4MzY0NyAvIHNpemVvZihfVHApOwoKICB3aGlsZSAoX19sZW4g PiAwKSB7CiAgICBfVHAqIF9fdG1wID0gKF9UcCopIHN0ZDo6bWFsbG9jKChzdGQ6OnNpemVfdClf X2xlbiAqIHNpemVvZihfVHApKTsKICAgIGlmIChfX3RtcCAhPSAwKQogICAgICByZXR1cm4gcGFp cjxfVHAqLCBwdHJkaWZmX3Q+KF9fdG1wLCBfX2xlbik7CiAgICBfX2xlbiAvPSAyOwogIH0KCiAg cmV0dXJuIHBhaXI8X1RwKiwgcHRyZGlmZl90PigoX1RwKikwLCAwKTsKfQojIDEwNiAiL3Vzci9p bmNsdWRlL2MrKy8zLjIuMS9tZW1vcnkiIDMKdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogIGlubGlu ZSBwYWlyPF9UcCoscHRyZGlmZl90PgogIGdldF90ZW1wb3JhcnlfYnVmZmVyKHB0cmRpZmZfdCBf X2xlbikKICB7CiAgICByZXR1cm4gX19nZXRfdGVtcG9yYXJ5X2J1ZmZlcihfX2xlbiwgKF9UcCop IDApOwogIH0KIyAxMjAgIi91c3IvaW5jbHVkZS9jKysvMy4yLjEvbWVtb3J5IiAzCnRlbXBsYXRl PHR5cGVuYW1lIF9UcD4KICB2b2lkCiAgcmV0dXJuX3RlbXBvcmFyeV9idWZmZXIoX1RwKiBfX3Ap CiAgewogICAgc3RkOjpmcmVlKF9fcCk7CiAgfQojIDEzNSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIu MS9tZW1vcnkiIDMKdGVtcGxhdGU8dHlwZW5hbWUgX1RwMT4KICBzdHJ1Y3QgYXV0b19wdHJfcmVm CnsKICAgX1RwMSogX01fcHRyOwoKICAgZXhwbGljaXQKICAgYXV0b19wdHJfcmVmKF9UcDEqIF9f cCkKICAgOiBfTV9wdHIoX19wKSB7fQp9OwojIDE3NSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9t ZW1vcnkiIDMKdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogIGNsYXNzIGF1dG9fcHRyCnsKcHJpdmF0 ZToKICBfVHAqIF9NX3B0cjsKCnB1YmxpYzoKCiAgdHlwZWRlZiBfVHAgZWxlbWVudF90eXBlOwoK CgoKCgoKICBleHBsaWNpdAogIGF1dG9fcHRyKGVsZW1lbnRfdHlwZSogX19wID0gMCkgdGhyb3co KQogIDogX01fcHRyKF9fcCkgeyB9CiMgMjAyICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL21lbW9y eSIgMwogIGF1dG9fcHRyKGF1dG9fcHRyJiBfX2EpIHRocm93KCkKICA6IF9NX3B0cihfX2EucmVs ZWFzZSgpKSB7IH0KIyAyMTQgIi91c3IvaW5jbHVkZS9jKysvMy4yLjEvbWVtb3J5IiAzCiAgdGVt cGxhdGU8dHlwZW5hbWUgX1RwMT4KICAgIGF1dG9fcHRyKGF1dG9fcHRyPF9UcDE+JiBfX2EpIHRo cm93KCkKICAgIDogX01fcHRyKF9fYS5yZWxlYXNlKCkpIHsgfQojIDIyNiAiL3Vzci9pbmNsdWRl L2MrKy8zLjIuMS9tZW1vcnkiIDMKICBhdXRvX3B0ciYKICBvcGVyYXRvcj0oYXV0b19wdHImIF9f YSkgdGhyb3coKQogICAgewogICAgICByZXNldChfX2EucmVsZWFzZSgpKTsKICAgICAgcmV0dXJu ICp0aGlzOwogICAgfQojIDI0MyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9tZW1vcnkiIDMKICB0 ZW1wbGF0ZSA8dHlwZW5hbWUgX1RwMT4KICAgIGF1dG9fcHRyJgogICAgb3BlcmF0b3I9KGF1dG9f cHRyPF9UcDE+JiBfX2EpIHRocm93KCkKICAgIHsKICAgICAgcmVzZXQoX19hLnJlbGVhc2UoKSk7 CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KIyAyNjMgIi91c3IvaW5jbHVkZS9jKysvMy4yLjEv bWVtb3J5IiAzCiAgfmF1dG9fcHRyKCkgeyBkZWxldGUgX01fcHRyOyB9CiMgMjczICIvdXNyL2lu Y2x1ZGUvYysrLzMuMi4xL21lbW9yeSIgMwogIGVsZW1lbnRfdHlwZSYKICBvcGVyYXRvciooKSBj b25zdCB0aHJvdygpIHsgcmV0dXJuICpfTV9wdHI7IH0KCgoKCgoKCiAgZWxlbWVudF90eXBlKgog IG9wZXJhdG9yLT4oKSBjb25zdCB0aHJvdygpIHsgcmV0dXJuIF9NX3B0cjsgfQojIDI5NSAiL3Vz ci9pbmNsdWRlL2MrKy8zLjIuMS9tZW1vcnkiIDMKICBlbGVtZW50X3R5cGUqCiAgZ2V0KCkgY29u c3QgdGhyb3coKSB7IHJldHVybiBfTV9wdHI7IH0KIyAzMDkgIi91c3IvaW5jbHVkZS9jKysvMy4y LjEvbWVtb3J5IiAzCiAgZWxlbWVudF90eXBlKgogIHJlbGVhc2UoKSB0aHJvdygpCiAgICB7CiAg ICAgIGVsZW1lbnRfdHlwZSogX190bXAgPSBfTV9wdHI7CiAgICAgIF9NX3B0ciA9IDA7CiAgICAg IHJldHVybiBfX3RtcDsKICAgIH0KIyAzMjQgIi91c3IvaW5jbHVkZS9jKysvMy4yLjEvbWVtb3J5 IiAzCiAgdm9pZAogIHJlc2V0KGVsZW1lbnRfdHlwZSogX19wID0gMCkgdGhyb3coKQogICAgewog ICAgICBpZiAoX19wICE9IF9NX3B0cikKICAgICAgICB7CiAgICAgICAgICBkZWxldGUgX01fcHRy OwogICAgICAgICAgX01fcHRyID0gX19wOwogICAgICAgIH0KICAgIH0KIyAzNDUgIi91c3IvaW5j bHVkZS9jKysvMy4yLjEvbWVtb3J5IiAzCiAgYXV0b19wdHIoYXV0b19wdHJfcmVmPGVsZW1lbnRf dHlwZT4gX19yZWYpIHRocm93KCkKICAgIDogX01fcHRyKF9fcmVmLl9NX3B0cikge30KCiAgYXV0 b19wdHImCiAgb3BlcmF0b3I9KGF1dG9fcHRyX3JlZjxlbGVtZW50X3R5cGU+IF9fcmVmKSB0aHJv dygpCiAgICB7CiAgICAgIGlmIChfX3JlZi5fTV9wdHIgIT0gdGhpcy0+Z2V0KCkpCiAgICAgICAg ewogICAgICAgICAgZGVsZXRlIF9NX3B0cjsKICAgICAgICAgIF9NX3B0ciA9IF9fcmVmLl9NX3B0 cjsKICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5h bWUgX1RwMT4KICAgIG9wZXJhdG9yIGF1dG9fcHRyX3JlZjxfVHAxPigpIHRocm93KCkKICAgICAg eyByZXR1cm4gYXV0b19wdHJfcmVmPF9UcDE+KHRoaXMtPnJlbGVhc2UoKSk7IH0KCiAgdGVtcGxh dGU8dHlwZW5hbWUgX1RwMT4KICAgIG9wZXJhdG9yIGF1dG9fcHRyPF9UcDE+KCkgdGhyb3coKQog ICAgICB7IHJldHVybiBhdXRvX3B0cjxfVHAxPih0aGlzLT5yZWxlYXNlKCkpOyB9Cgp9OwoKfQoj IDQ5ICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL3N0cmluZyIgMiAzCgoKCiMgMSAiL3Vzci9pbmNs dWRlL2MrKy8zLjIuMS9iaXRzL3N0bF9mdW5jdGlvbi5oIiAxIDMKIyA2NCAiL3Vzci9pbmNsdWRl L2MrKy8zLjIuMS9iaXRzL3N0bF9mdW5jdGlvbi5oIiAzCm5hbWVzcGFjZSBzdGQKewojIDEwMSAi L3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9iaXRzL3N0bF9mdW5jdGlvbi5oIiAzCnRlbXBsYXRlIDxj bGFzcyBfQXJnLCBjbGFzcyBfUmVzdWx0PgpzdHJ1Y3QgdW5hcnlfZnVuY3Rpb24gewogIHR5cGVk ZWYgX0FyZyBhcmd1bWVudF90eXBlOwogIHR5cGVkZWYgX1Jlc3VsdCByZXN1bHRfdHlwZTsKfTsK CgoKCnRlbXBsYXRlIDxjbGFzcyBfQXJnMSwgY2xhc3MgX0FyZzIsIGNsYXNzIF9SZXN1bHQ+CnN0 cnVjdCBiaW5hcnlfZnVuY3Rpb24gewogIHR5cGVkZWYgX0FyZzEgZmlyc3RfYXJndW1lbnRfdHlw ZTsKICB0eXBlZGVmIF9BcmcyIHNlY29uZF9hcmd1bWVudF90eXBlOwogIHR5cGVkZWYgX1Jlc3Vs dCByZXN1bHRfdHlwZTsKfTsKIyAxMjcgIi91c3IvaW5jbHVkZS9jKysvMy4yLjEvYml0cy9zdGxf ZnVuY3Rpb24uaCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgcGx1cyA6IHB1YmxpYyBi aW5hcnlfZnVuY3Rpb248X1RwLF9UcCxfVHA+IHsKICBfVHAgb3BlcmF0b3IoKShjb25zdCBfVHAm IF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCArIF9feTsgfQp9OwoKCnRl bXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBtaW51cyA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248 X1RwLF9UcCxfVHA+IHsKICBfVHAgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1Rw JiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCAtIF9feTsgfQp9OwoKCnRlbXBsYXRlIDxjbGFzcyBf VHA+CnN0cnVjdCBtdWx0aXBsaWVzIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLF9U cD4gewogIF9UcCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29u c3QgeyByZXR1cm4gX194ICogX195OyB9Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0 IGRpdmlkZXMgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsX1RwPiB7CiAgX1RwIG9w ZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBf X3ggLyBfX3k7IH0KfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgbW9kdWx1cyA6IHB1 YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxfVHA+CnsKICBfVHAgb3BlcmF0b3IoKShjb25z dCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCAlIF9feTsgfQp9 OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBuZWdhdGUgOiBwdWJsaWMgdW5hcnlfZnVu Y3Rpb248X1RwLF9UcD4KewogIF9UcCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194KSBjb25zdCB7 IHJldHVybiAtX194OyB9Cn07CiMgMTczICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL2JpdHMvc3Rs X2Z1bmN0aW9uLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IGVxdWFsX3RvIDogcHVi bGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLGJvb2w+CnsKICBib29sIG9wZXJhdG9yKCkoY29u c3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggPT0gX195OyB9 Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IG5vdF9lcXVhbF90byA6IHB1YmxpYyBi aW5hcnlfZnVuY3Rpb248X1RwLF9UcCxib29sPgp7CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IF9U cCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194ICE9IF9feTsgfQp9OwoK CnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBncmVhdGVyIDogcHVibGljIGJpbmFyeV9mdW5j dGlvbjxfVHAsX1RwLGJvb2w+CnsKICBib29sIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNv bnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggPiBfX3k7IH0KfTsKCgp0ZW1wbGF0ZSA8 Y2xhc3MgX1RwPgpzdHJ1Y3QgbGVzcyA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxi b29sPgp7CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkg Y29uc3QgeyByZXR1cm4gX194IDwgX195OyB9Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3Ry dWN0IGdyZWF0ZXJfZXF1YWwgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsYm9vbD4K ewogIGJvb2wgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0 IHsgcmV0dXJuIF9feCA+PSBfX3k7IH0KfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3Qg bGVzc19lcXVhbCA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxib29sPgp7CiAgYm9v bCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1 cm4gX194IDw9IF9feTsgfQp9OwojIDIyMiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9iaXRzL3N0 bF9mdW5jdGlvbi5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBsb2dpY2FsX2FuZCA6 IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxib29sPgp7CiAgYm9vbCBvcGVyYXRvcigp KGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194ICYmIF9f eTsgfQp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBsb2dpY2FsX29yIDogcHVibGlj IGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLGJvb2w+CnsKICBib29sIG9wZXJhdG9yKCkoY29uc3Qg X1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggfHwgX195OyB9Cn07 CgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IGxvZ2ljYWxfbm90IDogcHVibGljIHVuYXJ5 X2Z1bmN0aW9uPF9UcCxib29sPgp7CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194KSBj b25zdCB7IHJldHVybiAhX194OyB9Cn07CiMgMjcxICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL2Jp dHMvc3RsX2Z1bmN0aW9uLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9QcmVkaWNhdGU+CmNsYXNzIHVu YXJ5X25lZ2F0ZQogIDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPHR5cGVuYW1lIF9QcmVkaWNhdGU6 OmFyZ3VtZW50X3R5cGUsIGJvb2w+IHsKcHJvdGVjdGVkOgogIF9QcmVkaWNhdGUgX01fcHJlZDsK cHVibGljOgogIGV4cGxpY2l0IHVuYXJ5X25lZ2F0ZShjb25zdCBfUHJlZGljYXRlJiBfX3gpIDog X01fcHJlZChfX3gpIHt9CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IHR5cGVuYW1lIF9QcmVkaWNh dGU6OmFyZ3VtZW50X3R5cGUmIF9feCkgY29uc3QgewogICAgcmV0dXJuICFfTV9wcmVkKF9feCk7 CiAgfQp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfUHJlZGljYXRlPgppbmxpbmUgdW5hcnlfbmVnYXRl PF9QcmVkaWNhdGU+Cm5vdDEoY29uc3QgX1ByZWRpY2F0ZSYgX19wcmVkKQp7CiAgcmV0dXJuIHVu YXJ5X25lZ2F0ZTxfUHJlZGljYXRlPihfX3ByZWQpOwp9CgoKdGVtcGxhdGUgPGNsYXNzIF9QcmVk aWNhdGU+CmNsYXNzIGJpbmFyeV9uZWdhdGUKICA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248dHlw ZW5hbWUgX1ByZWRpY2F0ZTo6Zmlyc3RfYXJndW1lbnRfdHlwZSwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgdHlwZW5hbWUgX1ByZWRpY2F0ZTo6c2Vjb25kX2FyZ3VtZW50X3R5cGUsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgIGJvb2w+IHsKcHJvdGVjdGVkOgogIF9QcmVkaWNhdGUgX01f cHJlZDsKcHVibGljOgogIGV4cGxpY2l0IGJpbmFyeV9uZWdhdGUoY29uc3QgX1ByZWRpY2F0ZSYg X194KSA6IF9NX3ByZWQoX194KSB7fQogIGJvb2wgb3BlcmF0b3IoKShjb25zdCB0eXBlbmFtZSBf UHJlZGljYXRlOjpmaXJzdF9hcmd1bWVudF90eXBlJiBfX3gsCiAgICAgICAgICAgICAgICAgIGNv bnN0IHR5cGVuYW1lIF9QcmVkaWNhdGU6OnNlY29uZF9hcmd1bWVudF90eXBlJiBfX3kpIGNvbnN0 CiAgewogICAgcmV0dXJuICFfTV9wcmVkKF9feCwgX195KTsKICB9Cn07CgoKdGVtcGxhdGUgPGNs YXNzIF9QcmVkaWNhdGU+CmlubGluZSBiaW5hcnlfbmVnYXRlPF9QcmVkaWNhdGU+Cm5vdDIoY29u c3QgX1ByZWRpY2F0ZSYgX19wcmVkKQp7CiAgcmV0dXJuIGJpbmFyeV9uZWdhdGU8X1ByZWRpY2F0 ZT4oX19wcmVkKTsKfQojIDM0OSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9iaXRzL3N0bF9mdW5j dGlvbi5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfT3BlcmF0aW9uPgpjbGFzcyBiaW5kZXIxc3QKICA6 IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjx0eXBlbmFtZSBfT3BlcmF0aW9uOjpzZWNvbmRfYXJndW1l bnRfdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBfT3BlcmF0aW9uOjpy ZXN1bHRfdHlwZT4gewpwcm90ZWN0ZWQ6CiAgX09wZXJhdGlvbiBvcDsKICB0eXBlbmFtZSBfT3Bl cmF0aW9uOjpmaXJzdF9hcmd1bWVudF90eXBlIHZhbHVlOwpwdWJsaWM6CiAgYmluZGVyMXN0KGNv bnN0IF9PcGVyYXRpb24mIF9feCwKICAgICAgICAgICAgY29uc3QgdHlwZW5hbWUgX09wZXJhdGlv bjo6Zmlyc3RfYXJndW1lbnRfdHlwZSYgX195KQogICAgICA6IG9wKF9feCksIHZhbHVlKF9feSkg e30KICB0eXBlbmFtZSBfT3BlcmF0aW9uOjpyZXN1bHRfdHlwZQogIG9wZXJhdG9yKCkoY29uc3Qg dHlwZW5hbWUgX09wZXJhdGlvbjo6c2Vjb25kX2FyZ3VtZW50X3R5cGUmIF9feCkgY29uc3Qgewog ICAgcmV0dXJuIG9wKHZhbHVlLCBfX3gpOwogIH0KCgogIHR5cGVuYW1lIF9PcGVyYXRpb246OnJl c3VsdF90eXBlCiAgb3BlcmF0b3IoKSh0eXBlbmFtZSBfT3BlcmF0aW9uOjpzZWNvbmRfYXJndW1l bnRfdHlwZSYgX194KSBjb25zdCB7CiAgICByZXR1cm4gb3AodmFsdWUsIF9feCk7CiAgfQoKfTsK Cgp0ZW1wbGF0ZSA8Y2xhc3MgX09wZXJhdGlvbiwgY2xhc3MgX1RwPgppbmxpbmUgYmluZGVyMXN0 PF9PcGVyYXRpb24+CmJpbmQxc3QoY29uc3QgX09wZXJhdGlvbiYgX19mbiwgY29uc3QgX1RwJiBf X3gpCnsKICB0eXBlZGVmIHR5cGVuYW1lIF9PcGVyYXRpb246OmZpcnN0X2FyZ3VtZW50X3R5cGUg X0FyZzFfdHlwZTsKICByZXR1cm4gYmluZGVyMXN0PF9PcGVyYXRpb24+KF9fZm4sIF9BcmcxX3R5 cGUoX194KSk7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX09wZXJhdGlvbj4KY2xhc3MgYmluZGVyMm5k CiAgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248dHlwZW5hbWUgX09wZXJhdGlvbjo6Zmlyc3RfYXJn dW1lbnRfdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBfT3BlcmF0aW9u OjpyZXN1bHRfdHlwZT4gewpwcm90ZWN0ZWQ6CiAgX09wZXJhdGlvbiBvcDsKICB0eXBlbmFtZSBf T3BlcmF0aW9uOjpzZWNvbmRfYXJndW1lbnRfdHlwZSB2YWx1ZTsKcHVibGljOgogIGJpbmRlcjJu ZChjb25zdCBfT3BlcmF0aW9uJiBfX3gsCiAgICAgICAgICAgIGNvbnN0IHR5cGVuYW1lIF9PcGVy YXRpb246OnNlY29uZF9hcmd1bWVudF90eXBlJiBfX3kpCiAgICAgIDogb3AoX194KSwgdmFsdWUo X195KSB7fQogIHR5cGVuYW1lIF9PcGVyYXRpb246OnJlc3VsdF90eXBlCiAgb3BlcmF0b3IoKShj b25zdCB0eXBlbmFtZSBfT3BlcmF0aW9uOjpmaXJzdF9hcmd1bWVudF90eXBlJiBfX3gpIGNvbnN0 IHsKICAgIHJldHVybiBvcChfX3gsIHZhbHVlKTsKICB9CgoKICB0eXBlbmFtZSBfT3BlcmF0aW9u OjpyZXN1bHRfdHlwZQogIG9wZXJhdG9yKCkodHlwZW5hbWUgX09wZXJhdGlvbjo6Zmlyc3RfYXJn dW1lbnRfdHlwZSYgX194KSBjb25zdCB7CiAgICByZXR1cm4gb3AoX194LCB2YWx1ZSk7CiAgfQoK fTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX09wZXJhdGlvbiwgY2xhc3MgX1RwPgppbmxpbmUgYmluZGVy Mm5kPF9PcGVyYXRpb24+CmJpbmQybmQoY29uc3QgX09wZXJhdGlvbiYgX19mbiwgY29uc3QgX1Rw JiBfX3gpCnsKICB0eXBlZGVmIHR5cGVuYW1lIF9PcGVyYXRpb246OnNlY29uZF9hcmd1bWVudF90 eXBlIF9BcmcyX3R5cGU7CiAgcmV0dXJuIGJpbmRlcjJuZDxfT3BlcmF0aW9uPihfX2ZuLCBfQXJn Ml90eXBlKF9feCkpOwp9CiMgNDM4ICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL2JpdHMvc3RsX2Z1 bmN0aW9uLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9BcmcsIGNsYXNzIF9SZXN1bHQ+CmNsYXNzIHBv aW50ZXJfdG9fdW5hcnlfZnVuY3Rpb24gOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X0FyZywgX1Jl c3VsdD4gewpwcm90ZWN0ZWQ6CiAgX1Jlc3VsdCAoKl9NX3B0cikoX0FyZyk7CnB1YmxpYzoKICBw b2ludGVyX3RvX3VuYXJ5X2Z1bmN0aW9uKCkge30KICBleHBsaWNpdCBwb2ludGVyX3RvX3VuYXJ5 X2Z1bmN0aW9uKF9SZXN1bHQgKCpfX3gpKF9BcmcpKSA6IF9NX3B0cihfX3gpIHt9CiAgX1Jlc3Vs dCBvcGVyYXRvcigpKF9BcmcgX194KSBjb25zdCB7IHJldHVybiBfTV9wdHIoX194KTsgfQp9OwoK CnRlbXBsYXRlIDxjbGFzcyBfQXJnLCBjbGFzcyBfUmVzdWx0PgppbmxpbmUgcG9pbnRlcl90b191 bmFyeV9mdW5jdGlvbjxfQXJnLCBfUmVzdWx0PiBwdHJfZnVuKF9SZXN1bHQgKCpfX3gpKF9Bcmcp KQp7CiAgcmV0dXJuIHBvaW50ZXJfdG9fdW5hcnlfZnVuY3Rpb248X0FyZywgX1Jlc3VsdD4oX194 KTsKfQoKCnRlbXBsYXRlIDxjbGFzcyBfQXJnMSwgY2xhc3MgX0FyZzIsIGNsYXNzIF9SZXN1bHQ+ CmNsYXNzIHBvaW50ZXJfdG9fYmluYXJ5X2Z1bmN0aW9uIDoKICBwdWJsaWMgYmluYXJ5X2Z1bmN0 aW9uPF9BcmcxLF9BcmcyLF9SZXN1bHQ+IHsKcHJvdGVjdGVkOgogICAgX1Jlc3VsdCAoKl9NX3B0 cikoX0FyZzEsIF9BcmcyKTsKcHVibGljOgogICAgcG9pbnRlcl90b19iaW5hcnlfZnVuY3Rpb24o KSB7fQogICAgZXhwbGljaXQgcG9pbnRlcl90b19iaW5hcnlfZnVuY3Rpb24oX1Jlc3VsdCAoKl9f eCkoX0FyZzEsIF9BcmcyKSkKICAgICAgOiBfTV9wdHIoX194KSB7fQogICAgX1Jlc3VsdCBvcGVy YXRvcigpKF9BcmcxIF9feCwgX0FyZzIgX195KSBjb25zdCB7CiAgICAgIHJldHVybiBfTV9wdHIo X194LCBfX3kpOwogICAgfQp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfQXJnMSwgY2xhc3MgX0FyZzIs IGNsYXNzIF9SZXN1bHQ+CmlubGluZSBwb2ludGVyX3RvX2JpbmFyeV9mdW5jdGlvbjxfQXJnMSxf QXJnMixfUmVzdWx0PgpwdHJfZnVuKF9SZXN1bHQgKCpfX3gpKF9BcmcxLCBfQXJnMikpIHsKICBy ZXR1cm4gcG9pbnRlcl90b19iaW5hcnlfZnVuY3Rpb248X0FyZzEsX0FyZzIsX1Jlc3VsdD4oX194 KTsKfQoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBfSWRlbnRpdHkgOiBwdWJsaWMgdW5h cnlfZnVuY3Rpb248X1RwLF9UcD4gewogIF9UcCYgb3BlcmF0b3IoKShfVHAmIF9feCkgY29uc3Qg eyByZXR1cm4gX194OyB9CiAgY29uc3QgX1RwJiBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194KSBj b25zdCB7IHJldHVybiBfX3g7IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfUGFpcj4Kc3RydWN0IF9T ZWxlY3Qxc3QgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X1BhaXIsIHR5cGVuYW1lIF9QYWlyOjpm aXJzdF90eXBlPiB7CiAgdHlwZW5hbWUgX1BhaXI6OmZpcnN0X3R5cGUmIG9wZXJhdG9yKCkoX1Bh aXImIF9feCkgY29uc3QgewogICAgcmV0dXJuIF9feC5maXJzdDsKICB9CiAgY29uc3QgdHlwZW5h bWUgX1BhaXI6OmZpcnN0X3R5cGUmIG9wZXJhdG9yKCkoY29uc3QgX1BhaXImIF9feCkgY29uc3Qg ewogICAgcmV0dXJuIF9feC5maXJzdDsKICB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1BhaXI+CnN0 cnVjdCBfU2VsZWN0Mm5kIDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9QYWlyLCB0eXBlbmFtZSBf UGFpcjo6c2Vjb25kX3R5cGU+CnsKICB0eXBlbmFtZSBfUGFpcjo6c2Vjb25kX3R5cGUmIG9wZXJh dG9yKCkoX1BhaXImIF9feCkgY29uc3QgewogICAgcmV0dXJuIF9feC5zZWNvbmQ7CiAgfQogIGNv bnN0IHR5cGVuYW1lIF9QYWlyOjpzZWNvbmRfdHlwZSYgb3BlcmF0b3IoKShjb25zdCBfUGFpciYg X194KSBjb25zdCB7CiAgICByZXR1cm4gX194LnNlY29uZDsKICB9Cn07CiMgNTI4ICIvdXNyL2lu Y2x1ZGUvYysrLzMuMi4xL2JpdHMvc3RsX2Z1bmN0aW9uLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9S ZXQsIGNsYXNzIF9UcD4KY2xhc3MgbWVtX2Z1bl90IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9U cCosX1JldD4gewpwdWJsaWM6CiAgZXhwbGljaXQgbWVtX2Z1bl90KF9SZXQgKF9UcDo6Kl9fcGYp KCkpIDogX01fZihfX3BmKSB7fQogIF9SZXQgb3BlcmF0b3IoKShfVHAqIF9fcCkgY29uc3QgeyBy ZXR1cm4gKF9fcC0+Kl9NX2YpKCk7IH0KcHJpdmF0ZToKICBfUmV0IChfVHA6OipfTV9mKSgpOwp9 OwoKCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHA+CmNsYXNzIGNvbnN0X21lbV9mdW5f dCA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxjb25zdCBfVHAqLF9SZXQ+IHsKcHVibGljOgogIGV4 cGxpY2l0IGNvbnN0X21lbV9mdW5fdChfUmV0IChfVHA6OipfX3BmKSgpIGNvbnN0KSA6IF9NX2Yo X19wZikge30KICBfUmV0IG9wZXJhdG9yKCkoY29uc3QgX1RwKiBfX3ApIGNvbnN0IHsgcmV0dXJu IChfX3AtPipfTV9mKSgpOyB9CnByaXZhdGU6CiAgX1JldCAoX1RwOjoqX01fZikoKSBjb25zdDsK fTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwPgpjbGFzcyBtZW1fZnVuX3JlZl90 IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9UcCxfUmV0PiB7CnB1YmxpYzoKICBleHBsaWNpdCBt ZW1fZnVuX3JlZl90KF9SZXQgKF9UcDo6Kl9fcGYpKCkpIDogX01fZihfX3BmKSB7fQogIF9SZXQg b3BlcmF0b3IoKShfVHAmIF9fcikgY29uc3QgeyByZXR1cm4gKF9fci4qX01fZikoKTsgfQpwcml2 YXRlOgogIF9SZXQgKF9UcDo6Kl9NX2YpKCk7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNs YXNzIF9UcD4KY2xhc3MgY29uc3RfbWVtX2Z1bl9yZWZfdCA6IHB1YmxpYyB1bmFyeV9mdW5jdGlv bjxfVHAsX1JldD4gewpwdWJsaWM6CiAgZXhwbGljaXQgY29uc3RfbWVtX2Z1bl9yZWZfdChfUmV0 IChfVHA6OipfX3BmKSgpIGNvbnN0KSA6IF9NX2YoX19wZikge30KICBfUmV0IG9wZXJhdG9yKCko Y29uc3QgX1RwJiBfX3IpIGNvbnN0IHsgcmV0dXJuIChfX3IuKl9NX2YpKCk7IH0KcHJpdmF0ZToK ICBfUmV0IChfVHA6OipfTV9mKSgpIGNvbnN0Owp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBj bGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmNsYXNzIG1lbV9mdW4xX3QgOiBwdWJsaWMgYmluYXJ5X2Z1 bmN0aW9uPF9UcCosX0FyZyxfUmV0PiB7CnB1YmxpYzoKICBleHBsaWNpdCBtZW1fZnVuMV90KF9S ZXQgKF9UcDo6Kl9fcGYpKF9BcmcpKSA6IF9NX2YoX19wZikge30KICBfUmV0IG9wZXJhdG9yKCko X1RwKiBfX3AsIF9BcmcgX194KSBjb25zdCB7IHJldHVybiAoX19wLT4qX01fZikoX194KTsgfQpw cml2YXRlOgogIF9SZXQgKF9UcDo6Kl9NX2YpKF9BcmcpOwp9OwoKCnRlbXBsYXRlIDxjbGFzcyBf UmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmNsYXNzIGNvbnN0X21lbV9mdW4xX3QgOiBwdWJs aWMgYmluYXJ5X2Z1bmN0aW9uPGNvbnN0IF9UcCosX0FyZyxfUmV0PiB7CnB1YmxpYzoKICBleHBs aWNpdCBjb25zdF9tZW1fZnVuMV90KF9SZXQgKF9UcDo6Kl9fcGYpKF9BcmcpIGNvbnN0KSA6IF9N X2YoX19wZikge30KICBfUmV0IG9wZXJhdG9yKCkoY29uc3QgX1RwKiBfX3AsIF9BcmcgX194KSBj b25zdAogICAgeyByZXR1cm4gKF9fcC0+Kl9NX2YpKF9feCk7IH0KcHJpdmF0ZToKICBfUmV0IChf VHA6OipfTV9mKShfQXJnKSBjb25zdDsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3Mg X1RwLCBjbGFzcyBfQXJnPgpjbGFzcyBtZW1fZnVuMV9yZWZfdCA6IHB1YmxpYyBiaW5hcnlfZnVu Y3Rpb248X1RwLF9BcmcsX1JldD4gewpwdWJsaWM6CiAgZXhwbGljaXQgbWVtX2Z1bjFfcmVmX3Qo X1JldCAoX1RwOjoqX19wZikoX0FyZykpIDogX01fZihfX3BmKSB7fQogIF9SZXQgb3BlcmF0b3Io KShfVHAmIF9fciwgX0FyZyBfX3gpIGNvbnN0IHsgcmV0dXJuIChfX3IuKl9NX2YpKF9feCk7IH0K cHJpdmF0ZToKICBfUmV0IChfVHA6OipfTV9mKShfQXJnKTsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3Mg X1JldCwgY2xhc3MgX1RwLCBjbGFzcyBfQXJnPgpjbGFzcyBjb25zdF9tZW1fZnVuMV9yZWZfdCA6 IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9BcmcsX1JldD4gewpwdWJsaWM6CiAgZXhwbGlj aXQgY29uc3RfbWVtX2Z1bjFfcmVmX3QoX1JldCAoX1RwOjoqX19wZikoX0FyZykgY29uc3QpIDog X01fZihfX3BmKSB7fQogIF9SZXQgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9fciwgX0FyZyBfX3gp IGNvbnN0IHsgcmV0dXJuIChfX3IuKl9NX2YpKF9feCk7IH0KcHJpdmF0ZToKICBfUmV0IChfVHA6 OipfTV9mKShfQXJnKSBjb25zdDsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpjbGFzcyBtZW1f ZnVuX3Q8dm9pZCwgX1RwPiA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfVHAqLHZvaWQ+IHsKcHVi bGljOgogIGV4cGxpY2l0IG1lbV9mdW5fdCh2b2lkIChfVHA6OipfX3BmKSgpKSA6IF9NX2YoX19w Zikge30KICB2b2lkIG9wZXJhdG9yKCkoX1RwKiBfX3ApIGNvbnN0IHsgKF9fcC0+Kl9NX2YpKCk7 IH0KcHJpdmF0ZToKICB2b2lkIChfVHA6OipfTV9mKSgpOwp9OwoKCnRlbXBsYXRlIDxjbGFzcyBf VHA+CmNsYXNzIGNvbnN0X21lbV9mdW5fdDx2b2lkLCBfVHA+IDogcHVibGljIHVuYXJ5X2Z1bmN0 aW9uPGNvbnN0IF9UcCosdm9pZD4gewpwdWJsaWM6CiAgZXhwbGljaXQgY29uc3RfbWVtX2Z1bl90 KHZvaWQgKF9UcDo6Kl9fcGYpKCkgY29uc3QpIDogX01fZihfX3BmKSB7fQogIHZvaWQgb3BlcmF0 b3IoKShjb25zdCBfVHAqIF9fcCkgY29uc3QgeyAoX19wLT4qX01fZikoKTsgfQpwcml2YXRlOgog IHZvaWQgKF9UcDo6Kl9NX2YpKCkgY29uc3Q7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4KY2xh c3MgbWVtX2Z1bl9yZWZfdDx2b2lkLCBfVHA+IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9UcCx2 b2lkPiB7CnB1YmxpYzoKICBleHBsaWNpdCBtZW1fZnVuX3JlZl90KHZvaWQgKF9UcDo6Kl9fcGYp KCkpIDogX01fZihfX3BmKSB7fQogIHZvaWQgb3BlcmF0b3IoKShfVHAmIF9fcikgY29uc3QgeyAo X19yLipfTV9mKSgpOyB9CnByaXZhdGU6CiAgdm9pZCAoX1RwOjoqX01fZikoKTsKfTsKCgp0ZW1w bGF0ZSA8Y2xhc3MgX1RwPgpjbGFzcyBjb25zdF9tZW1fZnVuX3JlZl90PHZvaWQsIF9UcD4gOiBw dWJsaWMgdW5hcnlfZnVuY3Rpb248X1RwLHZvaWQ+IHsKcHVibGljOgogIGV4cGxpY2l0IGNvbnN0 X21lbV9mdW5fcmVmX3Qodm9pZCAoX1RwOjoqX19wZikoKSBjb25zdCkgOiBfTV9mKF9fcGYpIHt9 CiAgdm9pZCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX19yKSBjb25zdCB7IChfX3IuKl9NX2YpKCk7 IH0KcHJpdmF0ZToKICB2b2lkIChfVHA6OipfTV9mKSgpIGNvbnN0Owp9OwoKCnRlbXBsYXRlIDxj bGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmNsYXNzIG1lbV9mdW4xX3Q8dm9pZCwgX1RwLCBfQXJnPiA6 IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwKixfQXJnLHZvaWQ+IHsKcHVibGljOgogIGV4cGxp Y2l0IG1lbV9mdW4xX3Qodm9pZCAoX1RwOjoqX19wZikoX0FyZykpIDogX01fZihfX3BmKSB7fQog IHZvaWQgb3BlcmF0b3IoKShfVHAqIF9fcCwgX0FyZyBfX3gpIGNvbnN0IHsgKF9fcC0+Kl9NX2Yp KF9feCk7IH0KcHJpdmF0ZToKICB2b2lkIChfVHA6OipfTV9mKShfQXJnKTsKfTsKCgp0ZW1wbGF0 ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQXJnPgpjbGFzcyBjb25zdF9tZW1fZnVuMV90PHZvaWQsIF9U cCwgX0FyZz4KICA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248Y29uc3QgX1RwKixfQXJnLHZvaWQ+ IHsKcHVibGljOgogIGV4cGxpY2l0IGNvbnN0X21lbV9mdW4xX3Qodm9pZCAoX1RwOjoqX19wZiko X0FyZykgY29uc3QpIDogX01fZihfX3BmKSB7fQogIHZvaWQgb3BlcmF0b3IoKShjb25zdCBfVHAq IF9fcCwgX0FyZyBfX3gpIGNvbnN0IHsgKF9fcC0+Kl9NX2YpKF9feCk7IH0KcHJpdmF0ZToKICB2 b2lkIChfVHA6OipfTV9mKShfQXJnKSBjb25zdDsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBj bGFzcyBfQXJnPgpjbGFzcyBtZW1fZnVuMV9yZWZfdDx2b2lkLCBfVHAsIF9Bcmc+CiAgOiBwdWJs aWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfQXJnLHZvaWQ+IHsKcHVibGljOgogIGV4cGxpY2l0IG1l bV9mdW4xX3JlZl90KHZvaWQgKF9UcDo6Kl9fcGYpKF9BcmcpKSA6IF9NX2YoX19wZikge30KICB2 b2lkIG9wZXJhdG9yKCkoX1RwJiBfX3IsIF9BcmcgX194KSBjb25zdCB7IChfX3IuKl9NX2YpKF9f eCk7IH0KcHJpdmF0ZToKICB2b2lkIChfVHA6OipfTV9mKShfQXJnKTsKfTsKCgp0ZW1wbGF0ZSA8 Y2xhc3MgX1RwLCBjbGFzcyBfQXJnPgpjbGFzcyBjb25zdF9tZW1fZnVuMV9yZWZfdDx2b2lkLCBf VHAsIF9Bcmc+CiAgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfQXJnLHZvaWQ+IHsKcHVi bGljOgogIGV4cGxpY2l0IGNvbnN0X21lbV9mdW4xX3JlZl90KHZvaWQgKF9UcDo6Kl9fcGYpKF9B cmcpIGNvbnN0KSA6IF9NX2YoX19wZikge30KICB2b2lkIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBf X3IsIF9BcmcgX194KSBjb25zdCB7IChfX3IuKl9NX2YpKF9feCk7IH0KcHJpdmF0ZToKICB2b2lk IChfVHA6OipfTV9mKShfQXJnKSBjb25zdDsKfTsKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwg Y2xhc3MgX1RwPgppbmxpbmUgbWVtX2Z1bl90PF9SZXQsX1RwPiBtZW1fZnVuKF9SZXQgKF9UcDo6 Kl9fZikoKSkKICB7IHJldHVybiBtZW1fZnVuX3Q8X1JldCxfVHA+KF9fZik7IH0KCnRlbXBsYXRl IDxjbGFzcyBfUmV0LCBjbGFzcyBfVHA+CmlubGluZSBjb25zdF9tZW1fZnVuX3Q8X1JldCxfVHA+ IG1lbV9mdW4oX1JldCAoX1RwOjoqX19mKSgpIGNvbnN0KQogIHsgcmV0dXJuIGNvbnN0X21lbV9m dW5fdDxfUmV0LF9UcD4oX19mKTsgfQoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcD4K aW5saW5lIG1lbV9mdW5fcmVmX3Q8X1JldCxfVHA+IG1lbV9mdW5fcmVmKF9SZXQgKF9UcDo6Kl9f ZikoKSkKICB7IHJldHVybiBtZW1fZnVuX3JlZl90PF9SZXQsX1RwPihfX2YpOyB9Cgp0ZW1wbGF0 ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwPgppbmxpbmUgY29uc3RfbWVtX2Z1bl9yZWZfdDxfUmV0 LF9UcD4gbWVtX2Z1bl9yZWYoX1JldCAoX1RwOjoqX19mKSgpIGNvbnN0KQogIHsgcmV0dXJuIGNv bnN0X21lbV9mdW5fcmVmX3Q8X1JldCxfVHA+KF9fZik7IH0KCnRlbXBsYXRlIDxjbGFzcyBfUmV0 LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmlubGluZSBtZW1fZnVuMV90PF9SZXQsX1RwLF9Bcmc+ IG1lbV9mdW4oX1JldCAoX1RwOjoqX19mKShfQXJnKSkKICB7IHJldHVybiBtZW1fZnVuMV90PF9S ZXQsX1RwLF9Bcmc+KF9fZik7IH0KCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNs YXNzIF9Bcmc+CmlubGluZSBjb25zdF9tZW1fZnVuMV90PF9SZXQsX1RwLF9Bcmc+IG1lbV9mdW4o X1JldCAoX1RwOjoqX19mKShfQXJnKSBjb25zdCkKICB7IHJldHVybiBjb25zdF9tZW1fZnVuMV90 PF9SZXQsX1RwLF9Bcmc+KF9fZik7IH0KCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAs IGNsYXNzIF9Bcmc+CmlubGluZSBtZW1fZnVuMV9yZWZfdDxfUmV0LF9UcCxfQXJnPiBtZW1fZnVu X3JlZihfUmV0IChfVHA6OipfX2YpKF9BcmcpKQogIHsgcmV0dXJuIG1lbV9mdW4xX3JlZl90PF9S ZXQsX1RwLF9Bcmc+KF9fZik7IH0KCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNs YXNzIF9Bcmc+CmlubGluZSBjb25zdF9tZW1fZnVuMV9yZWZfdDxfUmV0LF9UcCxfQXJnPgptZW1f ZnVuX3JlZihfUmV0IChfVHA6OipfX2YpKF9BcmcpIGNvbnN0KQogIHsgcmV0dXJuIGNvbnN0X21l bV9mdW4xX3JlZl90PF9SZXQsX1RwLF9Bcmc+KF9fZik7IH0KCgoKfQojIDUzICIvdXNyL2luY2x1 ZGUvYysrLzMuMi4xL3N0cmluZyIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9iaXRz L2Jhc2ljX3N0cmluZy5oIiAxIDMKIyA0NCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9iaXRzL2Jh c2ljX3N0cmluZy5oIiAzCgojIDEgIi91c3IvaW5jbHVkZS9jKysvMy4yLjEvaTM4Ni1wYy1saW51 eC1nbnUvYml0cy9hdG9taWNpdHkuaCIgMSAzCiMgMzMgIi91c3IvaW5jbHVkZS9jKysvMy4yLjEv aTM4Ni1wYy1saW51eC1nbnUvYml0cy9hdG9taWNpdHkuaCIgMwp0eXBlZGVmIGludCBfQXRvbWlj X3dvcmQ7CgpzdGF0aWMgaW5saW5lIF9BdG9taWNfd29yZApfX2F0dHJpYnV0ZV9fICgoX191bnVz ZWRfXykpCl9fZXhjaGFuZ2VfYW5kX2FkZCAodm9sYXRpbGUgX0F0b21pY193b3JkICpfX21lbSwg aW50IF9fdmFsKQp7CiAgcmVnaXN0ZXIgX0F0b21pY193b3JkIF9fcmVzdWx0OwogIF9fYXNtX18g X192b2xhdGlsZV9fICgibG9jazsgeGFkZGwgJTAsJTIiCiAgICAgICAgICAgICAgICAgICAgICAg IDogIj1yIiAoX19yZXN1bHQpCiAgICAgICAgICAgICAgICAgICAgICAgIDogIjAiIChfX3ZhbCks ICJtIiAoKl9fbWVtKQogICAgICAgICAgICAgICAgICAgICAgICA6ICJtZW1vcnkiKTsKICByZXR1 cm4gX19yZXN1bHQ7Cn0KCnN0YXRpYyBpbmxpbmUgdm9pZApfX2F0dHJpYnV0ZV9fICgoX191bnVz ZWRfXykpCl9fYXRvbWljX2FkZCAodm9sYXRpbGUgX0F0b21pY193b3JkKiBfX21lbSwgaW50IF9f dmFsKQp7CiAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJsb2NrOyBhZGRsICUwLCUxIgogICAgICAg ICAgICAgICAgICAgICAgICA6IDogImlyIiAoX192YWwpLCAibSIgKCpfX21lbSkgOiAibWVtb3J5 Iik7Cn0KIyA0NiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9iaXRzL2Jhc2ljX3N0cmluZy5oIiAy IDMKCm5hbWVzcGFjZSBzdGQKewojIDg4ICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL2JpdHMvYmFz aWNfc3RyaW5nLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp dHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGNsYXNzIGJhc2ljX3N0cmluZwogICAgewoKICAgIHB1 YmxpYzoKICAgICAgdHlwZWRlZiBfVHJhaXRzIHRyYWl0c190eXBlOwogICAgICB0eXBlZGVmIHR5 cGVuYW1lIF9UcmFpdHM6OmNoYXJfdHlwZSB2YWx1ZV90eXBlOwogICAgICB0eXBlZGVmIF9BbGxv YyBhbGxvY2F0b3JfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2M6OnNpemVfdHlw ZSBzaXplX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjpkaWZmZXJlbmNlX3R5 cGUgZGlmZmVyZW5jZV90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6cmVmZXJl bmNlIHJlZmVyZW5jZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2M6OmNvbnN0X3JlZmVy ZW5jZSBjb25zdF9yZWZlcmVuY2U7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjpwb2lu dGVyIHBvaW50ZXI7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjpjb25zdF9wb2ludGVy IGNvbnN0X3BvaW50ZXI7CiAgICAgIHR5cGVkZWYgX19nbnVfY3h4OjpfX25vcm1hbF9pdGVyYXRv cjxwb2ludGVyLCBiYXNpY19zdHJpbmc+IGl0ZXJhdG9yOwogICAgICB0eXBlZGVmIF9fZ251X2N4 eDo6X19ub3JtYWxfaXRlcmF0b3I8Y29uc3RfcG9pbnRlciwgYmFzaWNfc3RyaW5nPgogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z dF9pdGVyYXRvcjsKICAgICAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9yPGNvbnN0X2l0ZXJhdG9y PiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yOwogICAgICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8 aXRlcmF0b3I+IHJldmVyc2VfaXRlcmF0b3I7CgogICAgcHJpdmF0ZToKIyAxMjMgIi91c3IvaW5j bHVkZS9jKysvMy4yLjEvYml0cy9iYXNpY19zdHJpbmcuaCIgMwogICAgICBzdHJ1Y3QgX1JlcAog ICAgICB7CgogICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjp0ZW1wbGF0ZSByZWJpbmQ8 Y2hhcj46Om90aGVyIF9SYXdfYnl0ZXNfYWxsb2M7CiMgMTQxICIvdXNyL2luY2x1ZGUvYysrLzMu Mi4xL2JpdHMvYmFzaWNfc3RyaW5nLmgiIDMKICAgICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90eXBl IF9TX21heF9zaXplOwogICAgICAgIHN0YXRpYyBjb25zdCBfQ2hhclQgX1NfdGVybWluYWw7Cgog ICAgICAgIHNpemVfdHlwZSBfTV9sZW5ndGg7CiAgICAgICAgc2l6ZV90eXBlIF9NX2NhcGFjaXR5 OwogICAgICAgIF9BdG9taWNfd29yZCBfTV9yZWZlcmVuY2VzOwoKICAgICAgICBib29sCiAgICAg ICAgX01faXNfbGVha2VkKCkgY29uc3QKICAgICAgICB7IHJldHVybiBfTV9yZWZlcmVuY2VzIDwg MDsgfQoKICAgICAgICBib29sCiAgICAgICAgX01faXNfc2hhcmVkKCkgY29uc3QKICAgICAgICB7 IHJldHVybiBfTV9yZWZlcmVuY2VzID4gMDsgfQoKICAgICAgICB2b2lkCiAgICAgICAgX01fc2V0 X2xlYWtlZCgpCiAgICAgICAgeyBfTV9yZWZlcmVuY2VzID0gLTE7IH0KCiAgICAgICAgdm9pZAog ICAgICAgIF9NX3NldF9zaGFyYWJsZSgpCiAgICAgICAgeyBfTV9yZWZlcmVuY2VzID0gMDsgfQoK ICAgICAgICBfQ2hhclQqCiAgICAgICAgX01fcmVmZGF0YSgpIHRocm93KCkKICAgICAgICB7IHJl dHVybiByZWludGVycHJldF9jYXN0PF9DaGFyVCo+KHRoaXMgKyAxKTsgfQoKICAgICAgICBfQ2hh clQmCiAgICAgICAgb3BlcmF0b3JbXShzaXplX3QgX19zKSB0aHJvdygpCiAgICAgICAgeyByZXR1 cm4gX01fcmVmZGF0YSgpIFtfX3NdOyB9CgogICAgICAgIF9DaGFyVCoKICAgICAgICBfTV9ncmFi KGNvbnN0IF9BbGxvYyYgX19hbGxvYzEsIGNvbnN0IF9BbGxvYyYgX19hbGxvYzIpCiAgICAgICAg ewogICAgICAgICAgcmV0dXJuICghX01faXNfbGVha2VkKCkgJiYgX19hbGxvYzEgPT0gX19hbGxv YzIpCiAgICAgICAgICAgICAgICAgID8gX01fcmVmY29weSgpIDogX01fY2xvbmUoX19hbGxvYzEp OwogICAgICAgIH0KCgogICAgICAgIHN0YXRpYyBfUmVwKgogICAgICAgIF9TX2NyZWF0ZShzaXpl X3QsIGNvbnN0IF9BbGxvYyYpOwoKICAgICAgICB2b2lkCiAgICAgICAgX01fZGlzcG9zZShjb25z dCBfQWxsb2MmIF9fYSkKICAgICAgICB7CiAgICAgICAgICBpZiAoX19leGNoYW5nZV9hbmRfYWRk KCZfTV9yZWZlcmVuY2VzLCAtMSkgPD0gMCkKICAgICAgICAgICAgX01fZGVzdHJveShfX2EpOwog ICAgICAgIH0KCiAgICAgICAgdm9pZAogICAgICAgIF9NX2Rlc3Ryb3koY29uc3QgX0FsbG9jJikg dGhyb3coKTsKCiAgICAgICAgX0NoYXJUKgogICAgICAgIF9NX3JlZmNvcHkoKSB0aHJvdygpCiAg ICAgICAgewogICAgICAgICAgX19hdG9taWNfYWRkKCZfTV9yZWZlcmVuY2VzLCAxKTsKICAgICAg ICAgIHJldHVybiBfTV9yZWZkYXRhKCk7CiAgICAgICAgfQoKICAgICAgICBfQ2hhclQqCiAgICAg ICAgX01fY2xvbmUoY29uc3QgX0FsbG9jJiwgc2l6ZV90eXBlIF9fcmVzID0gMCk7CiAgICAgIH07 CgoKICAgICAgc3RydWN0IF9BbGxvY19oaWRlciA6IF9BbGxvYwogICAgICB7CiAgICAgICAgX0Fs bG9jX2hpZGVyKF9DaGFyVCogX19kYXQsIGNvbnN0IF9BbGxvYyYgX19hKQogICAgICAgIDogX0Fs bG9jKF9fYSksIF9NX3AoX19kYXQpIHsgfQoKICAgICAgICBfQ2hhclQqIF9NX3A7CiAgICAgIH07 CgogICAgcHVibGljOgoKCgogICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90eXBlIG5wb3MgPSBzdGF0 aWNfY2FzdDxzaXplX3R5cGU+KC0xKTsKCiAgICBwcml2YXRlOgoKICAgICAgbXV0YWJsZSBfQWxs b2NfaGlkZXIgX01fZGF0YXBsdXM7CgoKCiAgICAgIHN0YXRpYyBzaXplX3R5cGUgX1NfZW1wdHlf cmVwX3N0b3JhZ2VbKHNpemVvZihfUmVwKSArIHNpemVvZihfQ2hhclQpICsgc2l6ZW9mKHNpemVf dHlwZSkgLSAxKS9zaXplb2Yoc2l6ZV90eXBlKV07CgogICAgICBfQ2hhclQqCiAgICAgIF9NX2Rh dGEoKSBjb25zdAogICAgICB7IHJldHVybiBfTV9kYXRhcGx1cy5fTV9wOyB9CgogICAgICBfQ2hh clQqCiAgICAgIF9NX2RhdGEoX0NoYXJUKiBfX3ApCiAgICAgIHsgcmV0dXJuIChfTV9kYXRhcGx1 cy5fTV9wID0gX19wKTsgfQoKICAgICAgX1JlcCoKICAgICAgX01fcmVwKCkgY29uc3QKICAgICAg eyByZXR1cm4gJigocmVpbnRlcnByZXRfY2FzdDxfUmVwKj4gKF9NX2RhdGEoKSkpWy0xXSk7IH0K CgoKICAgICAgaXRlcmF0b3IKICAgICAgX01faWJlZ2luKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0 b3IoX01fZGF0YSgpKTsgfQoKICAgICAgaXRlcmF0b3IKICAgICAgX01faWVuZCgpIGNvbnN0IHsg cmV0dXJuIGl0ZXJhdG9yKF9NX2RhdGEoKSArIHRoaXMtPnNpemUoKSk7IH0KCiAgICAgIHZvaWQK ICAgICAgX01fbGVhaygpCiAgICAgIHsKICAgICAgICBpZiAoIV9NX3JlcCgpLT5fTV9pc19sZWFr ZWQoKSkKICAgICAgICAgIF9NX2xlYWtfaGFyZCgpOwogICAgICB9CgogICAgICBpdGVyYXRvcgog ICAgICBfTV9jaGVjayhzaXplX3R5cGUgX19wb3MpIGNvbnN0CiAgICAgIHsKICAgICAgICBpZiAo X19wb3MgPiB0aGlzLT5zaXplKCkpCiAgICAgICAgICBfX3Rocm93X291dF9vZl9yYW5nZSgiYmFz aWNfc3RyaW5nOjpfTV9jaGVjayIpOwogICAgICAgIHJldHVybiBfTV9pYmVnaW4oKSArIF9fcG9z OwogICAgICB9CgoKICAgICAgaXRlcmF0b3IKICAgICAgX01fZm9sZChzaXplX3R5cGUgX19wb3Ms IHNpemVfdHlwZSBfX29mZikgY29uc3QKICAgICAgewogICAgICAgIGJvb2wgX190ZXN0b2ZmID0g X19vZmYgPCB0aGlzLT5zaXplKCkgLSBfX3BvczsKICAgICAgICBzaXplX3R5cGUgX19uZXdvZmYg PSBfX3Rlc3RvZmYgPyBfX29mZiA6IHRoaXMtPnNpemUoKSAtIF9fcG9zOwogICAgICAgIHJldHVy biAoX01faWJlZ2luKCkgKyBfX3BvcyArIF9fbmV3b2ZmKTsKICAgICAgfQoKCgogICAgICB0ZW1w bGF0ZTxjbGFzcyBfSXRlcmF0b3I+CiAgICAgICAgc3RhdGljIHZvaWQKICAgICAgICBfU19jb3B5 X2NoYXJzKF9DaGFyVCogX19wLCBfSXRlcmF0b3IgX19rMSwgX0l0ZXJhdG9yIF9fazIpCiAgICAg ICAgewogICAgICAgICAgZm9yICg7IF9fazEgIT0gX19rMjsgKytfX2sxLCArK19fcCkKICAgICAg ICAgICAgdHJhaXRzX3R5cGU6OmFzc2lnbigqX19wLCAqX19rMSk7CiAgICAgICAgfQoKICAgICAg c3RhdGljIHZvaWQKICAgICAgX1NfY29weV9jaGFycyhfQ2hhclQqIF9fcCwgaXRlcmF0b3IgX19r MSwgaXRlcmF0b3IgX19rMikKICAgICAgeyBfU19jb3B5X2NoYXJzKF9fcCwgX19rMS5iYXNlKCks IF9fazIuYmFzZSgpKTsgfQoKICAgICAgc3RhdGljIHZvaWQKICAgICAgX1NfY29weV9jaGFycyhf Q2hhclQqIF9fcCwgY29uc3RfaXRlcmF0b3IgX19rMSwgY29uc3RfaXRlcmF0b3IgX19rMikKICAg ICAgeyBfU19jb3B5X2NoYXJzKF9fcCwgX19rMS5iYXNlKCksIF9fazIuYmFzZSgpKTsgfQoKICAg ICAgc3RhdGljIHZvaWQKICAgICAgX1NfY29weV9jaGFycyhfQ2hhclQqIF9fcCwgX0NoYXJUKiBf X2sxLCBfQ2hhclQqIF9fazIpCiAgICAgIHsgdHJhaXRzX3R5cGU6OmNvcHkoX19wLCBfX2sxLCBf X2syIC0gX19rMSk7IH0KCiAgICAgIHN0YXRpYyB2b2lkCiAgICAgIF9TX2NvcHlfY2hhcnMoX0No YXJUKiBfX3AsIGNvbnN0IF9DaGFyVCogX19rMSwgY29uc3QgX0NoYXJUKiBfX2syKQogICAgICB7 IHRyYWl0c190eXBlOjpjb3B5KF9fcCwgX19rMSwgX19rMiAtIF9fazEpOyB9CgogICAgICB2b2lk CiAgICAgIF9NX211dGF0ZShzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX2xlbjEsIHNpemVf dHlwZSBfX2xlbjIpOwoKICAgICAgdm9pZAogICAgICBfTV9sZWFrX2hhcmQoKTsKCiAgICAgIHN0 YXRpYyBfUmVwJgogICAgICBfU19lbXB0eV9yZXAoKQogICAgICB7IHJldHVybiAqcmVpbnRlcnBy ZXRfY2FzdDxfUmVwKj4oJl9TX2VtcHR5X3JlcF9zdG9yYWdlKTsgfQoKICAgIHB1YmxpYzoKCgoK CiAgICAgIGlubGluZQogICAgICBiYXNpY19zdHJpbmcoKTsKCiAgICAgIGV4cGxpY2l0CiAgICAg IGJhc2ljX3N0cmluZyhjb25zdCBfQWxsb2MmIF9fYSk7CgoKICAgICAgYmFzaWNfc3RyaW5nKGNv bnN0IGJhc2ljX3N0cmluZyYgX19zdHIpOwogICAgICBiYXNpY19zdHJpbmcoY29uc3QgYmFzaWNf c3RyaW5nJiBfX3N0ciwgc2l6ZV90eXBlIF9fcG9zLAogICAgICAgICAgICAgICAgICAgc2l6ZV90 eXBlIF9fbiA9IG5wb3MpOwogICAgICBiYXNpY19zdHJpbmcoY29uc3QgYmFzaWNfc3RyaW5nJiBf X3N0ciwgc2l6ZV90eXBlIF9fcG9zLAogICAgICAgICAgICAgICAgICAgc2l6ZV90eXBlIF9fbiwg Y29uc3QgX0FsbG9jJiBfX2EpOwoKICAgICAgYmFzaWNfc3RyaW5nKGNvbnN0IF9DaGFyVCogX19z LCBzaXplX3R5cGUgX19uLAogICAgICAgICAgICAgICAgICAgY29uc3QgX0FsbG9jJiBfX2EgPSBf QWxsb2MoKSk7CiAgICAgIGJhc2ljX3N0cmluZyhjb25zdCBfQ2hhclQqIF9fcywgY29uc3QgX0Fs bG9jJiBfX2EgPSBfQWxsb2MoKSk7CiAgICAgIGJhc2ljX3N0cmluZyhzaXplX3R5cGUgX19uLCBf Q2hhclQgX19jLCBjb25zdCBfQWxsb2MmIF9fYSA9IF9BbGxvYygpKTsKCiAgICAgIHRlbXBsYXRl PGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogICAgICAgIGJhc2ljX3N0cmluZyhfSW5wdXRJdGVyYXRv ciBfX2JlZywgX0lucHV0SXRlcmF0b3IgX19lbmQsCiAgICAgICAgICAgICAgICAgICAgIGNvbnN0 IF9BbGxvYyYgX19hID0gX0FsbG9jKCkpOwoKICAgICAgfmJhc2ljX3N0cmluZygpCiAgICAgIHsg X01fcmVwKCktPl9NX2Rpc3Bvc2UodGhpcy0+Z2V0X2FsbG9jYXRvcigpKTsgfQoKICAgICAgYmFz aWNfc3RyaW5nJgogICAgICBvcGVyYXRvcj0oY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cikgeyBy ZXR1cm4gdGhpcy0+YXNzaWduKF9fc3RyKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBv cGVyYXRvcj0oY29uc3QgX0NoYXJUKiBfX3MpIHsgcmV0dXJuIHRoaXMtPmFzc2lnbihfX3MpOyB9 CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIG9wZXJhdG9yPShfQ2hhclQgX19jKSB7IHJldHVy biB0aGlzLT5hc3NpZ24oMSwgX19jKTsgfQoKCiAgICAgIGl0ZXJhdG9yCiAgICAgIGJlZ2luKCkK ICAgICAgewogICAgICAgIF9NX2xlYWsoKTsKICAgICAgICByZXR1cm4gaXRlcmF0b3IoX01fZGF0 YSgpKTsKICAgICAgfQoKICAgICAgY29uc3RfaXRlcmF0b3IKICAgICAgYmVnaW4oKSBjb25zdAog ICAgICB7IHJldHVybiBjb25zdF9pdGVyYXRvcihfTV9kYXRhKCkpOyB9CgogICAgICBpdGVyYXRv cgogICAgICBlbmQoKQogICAgICB7CiAgICAgICAgIF9NX2xlYWsoKTsKICAgICAgICAgcmV0dXJu IGl0ZXJhdG9yKF9NX2RhdGEoKSArIHRoaXMtPnNpemUoKSk7CiAgICAgIH0KCiAgICAgIGNvbnN0 X2l0ZXJhdG9yCiAgICAgIGVuZCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9y KF9NX2RhdGEoKSArIHRoaXMtPnNpemUoKSk7IH0KCiAgICAgIHJldmVyc2VfaXRlcmF0b3IKICAg ICAgcmJlZ2luKCkKICAgICAgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcih0aGlzLT5lbmQoKSk7 IH0KCiAgICAgIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IKICAgICAgcmJlZ2luKCkgY29uc3QKICAg ICAgeyByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcih0aGlzLT5lbmQoKSk7IH0KCiAgICAg IHJldmVyc2VfaXRlcmF0b3IKICAgICAgcmVuZCgpCiAgICAgIHsgcmV0dXJuIHJldmVyc2VfaXRl cmF0b3IodGhpcy0+YmVnaW4oKSk7IH0KCiAgICAgIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IKICAg ICAgcmVuZCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IodGhp cy0+YmVnaW4oKSk7IH0KCiAgICBwdWJsaWM6CgogICAgICBzaXplX3R5cGUKICAgICAgc2l6ZSgp IGNvbnN0IHsgcmV0dXJuIF9NX3JlcCgpLT5fTV9sZW5ndGg7IH0KCiAgICAgIHNpemVfdHlwZQog ICAgICBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBfTV9yZXAoKS0+X01fbGVuZ3RoOyB9CgogICAg ICBzaXplX3R5cGUKICAgICAgbWF4X3NpemUoKSBjb25zdCB7IHJldHVybiBfUmVwOjpfU19tYXhf c2l6ZTsgfQoKICAgICAgdm9pZAogICAgICByZXNpemUoc2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9f Yyk7CgogICAgICB2b2lkCiAgICAgIHJlc2l6ZShzaXplX3R5cGUgX19uKSB7IHRoaXMtPnJlc2l6 ZShfX24sIF9DaGFyVCgpKTsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAgIGNhcGFjaXR5KCkgY29u c3QgeyByZXR1cm4gX01fcmVwKCktPl9NX2NhcGFjaXR5OyB9CgogICAgICB2b2lkCiAgICAgIHJl c2VydmUoc2l6ZV90eXBlIF9fcmVzX2FyZyA9IDApOwoKICAgICAgdm9pZAogICAgICBjbGVhcigp IHsgX01fbXV0YXRlKDAsIHRoaXMtPnNpemUoKSwgMCk7IH0KCiAgICAgIGJvb2wKICAgICAgZW1w dHkoKSBjb25zdCB7IHJldHVybiB0aGlzLT5zaXplKCkgPT0gMDsgfQoKCiAgICAgIGNvbnN0X3Jl ZmVyZW5jZQogICAgICBvcGVyYXRvcltdIChzaXplX3R5cGUgX19wb3MpIGNvbnN0CiAgICAgIHsg cmV0dXJuIF9NX2RhdGEoKVtfX3Bvc107IH0KCiAgICAgIHJlZmVyZW5jZQogICAgICBvcGVyYXRv cltdKHNpemVfdHlwZSBfX3BvcykKICAgICAgewogICAgICAgIF9NX2xlYWsoKTsKICAgICAgICBy ZXR1cm4gX01fZGF0YSgpW19fcG9zXTsKICAgICAgfQoKICAgICAgY29uc3RfcmVmZXJlbmNlCiAg ICAgIGF0KHNpemVfdHlwZSBfX24pIGNvbnN0CiAgICAgIHsKICAgICAgICBpZiAoX19uID49IHRo aXMtPnNpemUoKSkKICAgICAgICAgIF9fdGhyb3dfb3V0X29mX3JhbmdlKCJiYXNpY19zdHJpbmc6 OmF0Iik7CiAgICAgICAgcmV0dXJuIF9NX2RhdGEoKVtfX25dOwogICAgICB9CgogICAgICByZWZl cmVuY2UKICAgICAgYXQoc2l6ZV90eXBlIF9fbikKICAgICAgewogICAgICAgIGlmIChfX24gPj0g c2l6ZSgpKQogICAgICAgICAgX190aHJvd19vdXRfb2ZfcmFuZ2UoImJhc2ljX3N0cmluZzo6YXQi KTsKICAgICAgICBfTV9sZWFrKCk7CiAgICAgICAgcmV0dXJuIF9NX2RhdGEoKVtfX25dOwogICAg ICB9CgoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBvcGVyYXRvcis9KGNvbnN0IGJhc2ljX3N0 cmluZyYgX19zdHIpIHsgcmV0dXJuIHRoaXMtPmFwcGVuZChfX3N0cik7IH0KCiAgICAgIGJhc2lj X3N0cmluZyYKICAgICAgb3BlcmF0b3IrPShjb25zdCBfQ2hhclQqIF9fcykgeyByZXR1cm4gdGhp cy0+YXBwZW5kKF9fcyk7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgb3BlcmF0b3IrPShf Q2hhclQgX19jKSB7IHJldHVybiB0aGlzLT5hcHBlbmQoc2l6ZV90eXBlKDEpLCBfX2MpOyB9Cgog ICAgICBiYXNpY19zdHJpbmcmCiAgICAgIGFwcGVuZChjb25zdCBiYXNpY19zdHJpbmcmIF9fc3Ry KTsKCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgYXBwZW5kKGNvbnN0IGJhc2ljX3N0cmluZyYg X19zdHIsIHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbik7CgogICAgICBiYXNpY19zdHJp bmcmCiAgICAgIGFwcGVuZChjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fbik7CgogICAg ICBiYXNpY19zdHJpbmcmCiAgICAgIGFwcGVuZChjb25zdCBfQ2hhclQqIF9fcykKICAgICAgeyBy ZXR1cm4gdGhpcy0+YXBwZW5kKF9fcywgdHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpKTsgfQoKICAg ICAgYmFzaWNfc3RyaW5nJgogICAgICBhcHBlbmQoc2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9fYyk7 CgogICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICAgICAgICBiYXNpY19zdHJp bmcmCiAgICAgICAgYXBwZW5kKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9y IF9fbGFzdCkKICAgICAgICB7IHJldHVybiB0aGlzLT5yZXBsYWNlKF9NX2llbmQoKSwgX01faWVu ZCgpLCBfX2ZpcnN0LCBfX2xhc3QpOyB9CgogICAgICB2b2lkCiAgICAgIHB1c2hfYmFjayhfQ2hh clQgX19jKQogICAgICB7IHRoaXMtPnJlcGxhY2UoX01faWVuZCgpLCBfTV9pZW5kKCksIDEsIF9f Yyk7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgYXNzaWduKGNvbnN0IGJhc2ljX3N0cmlu ZyYgX19zdHIpOwoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBhc3NpZ24oY29uc3QgYmFzaWNf c3RyaW5nJiBfX3N0ciwgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKQogICAgICB7CiAg ICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fc3Ryc2l6ZSA9IF9fc3RyLnNpemUoKTsKICAgICAgICBp ZiAoX19wb3MgPiBfX3N0cnNpemUpCiAgICAgICAgICBfX3Rocm93X291dF9vZl9yYW5nZSgiYmFz aWNfc3RyaW5nOjphc3NpZ24iKTsKICAgICAgICBjb25zdCBib29sIF9fdGVzdG4gPSBfX24gPCBf X3N0cnNpemUgLSBfX3BvczsKICAgICAgICBjb25zdCBzaXplX3R5cGUgX19uZXdzaXplID0gX190 ZXN0biA/IF9fbiA6IF9fc3Ryc2l6ZSAtIF9fcG9zOwogICAgICAgIHJldHVybiB0aGlzLT5hc3Np Z24oX19zdHIuX01fZGF0YSgpICsgX19wb3MsIF9fbmV3c2l6ZSk7CiAgICAgIH0KCiAgICAgIGJh c2ljX3N0cmluZyYKICAgICAgYXNzaWduKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19u KQogICAgICB7CiAgICAgICAgaWYgKF9fbiA+IHRoaXMtPm1heF9zaXplKCkpCiAgICAgICAgICBf X3Rocm93X2xlbmd0aF9lcnJvcigiYmFzaWNfc3RyaW5nOjphc3NpZ24iKTsKICAgICAgICBpZiAo X01fcmVwKCktPl9NX2lzX3NoYXJlZCgpIHx8IGxlc3M8Y29uc3QgX0NoYXJUKj4oKShfX3MsIF9N X2RhdGEoKSkKICAgICAgICAgICAgfHwgbGVzczxjb25zdCBfQ2hhclQqPigpKF9NX2RhdGEoKSAr IHRoaXMtPnNpemUoKSwgX19zKSkKICAgICAgICAgIHJldHVybiBfTV9yZXBsYWNlX3NhZmUoX01f aWJlZ2luKCksIF9NX2llbmQoKSwgX19zLCBfX3MgKyBfX24pOwogICAgICAgIGVsc2UKICAgICAg ICAgIHsKCiAgICAgICAgICAgIGNvbnN0IHNpemVfdHlwZSBfX3BvcyA9IF9fcyAtIF9NX2RhdGEo KTsKICAgICAgICAgICAgaWYgKF9fcG9zID49IF9fbikKICAgICAgICAgICAgICB0cmFpdHNfdHlw ZTo6Y29weShfTV9kYXRhKCksIF9fcywgX19uKTsKICAgICAgICAgICAgZWxzZSBpZiAoX19wb3Mp CiAgICAgICAgICAgICAgdHJhaXRzX3R5cGU6Om1vdmUoX01fZGF0YSgpLCBfX3MsIF9fbik7CiAg ICAgICAgICAgIF9NX3JlcCgpLT5fTV9sZW5ndGggPSBfX247CiAgICAgICAgICAgIF9NX2RhdGEo KVtfX25dID0gX1JlcDo6X1NfdGVybWluYWw7CiAgICAgICAgICAgIHJldHVybiAqdGhpczsKICAg ICAgICAgIH0KICAgICAgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBhc3NpZ24oY29uc3Qg X0NoYXJUKiBfX3MpCiAgICAgIHsgcmV0dXJuIHRoaXMtPmFzc2lnbihfX3MsIHRyYWl0c190eXBl OjpsZW5ndGgoX19zKSk7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgYXNzaWduKHNpemVf dHlwZSBfX24sIF9DaGFyVCBfX2MpCiAgICAgIHsgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX01faWJl Z2luKCksIF9NX2llbmQoKSwgX19uLCBfX2MpOyB9CgogICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW5w dXRJdGVyYXRvcj4KICAgICAgICBiYXNpY19zdHJpbmcmCiAgICAgICAgYXNzaWduKF9JbnB1dEl0 ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkKICAgICAgICB7IHJldHVybiB0 aGlzLT5yZXBsYWNlKF9NX2liZWdpbigpLCBfTV9pZW5kKCksIF9fZmlyc3QsIF9fbGFzdCk7IH0K CiAgICAgIHZvaWQKICAgICAgaW5zZXJ0KGl0ZXJhdG9yIF9fcCwgc2l6ZV90eXBlIF9fbiwgX0No YXJUIF9fYykKICAgICAgeyB0aGlzLT5yZXBsYWNlKF9fcCwgX19wLCBfX24sIF9fYyk7IH0KCiAg ICAgIHRlbXBsYXRlPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogICAgICAgIHZvaWQgaW5zZXJ0KGl0 ZXJhdG9yIF9fcCwgX0lucHV0SXRlcmF0b3IgX19iZWcsIF9JbnB1dEl0ZXJhdG9yIF9fZW5kKQog ICAgICAgIHsgdGhpcy0+cmVwbGFjZShfX3AsIF9fcCwgX19iZWcsIF9fZW5kKTsgfQoKICAgICAg YmFzaWNfc3RyaW5nJgogICAgICBpbnNlcnQoc2l6ZV90eXBlIF9fcG9zMSwgY29uc3QgYmFzaWNf c3RyaW5nJiBfX3N0cikKICAgICAgeyByZXR1cm4gdGhpcy0+aW5zZXJ0KF9fcG9zMSwgX19zdHIs IDAsIF9fc3RyLnNpemUoKSk7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgaW5zZXJ0KHNp emVfdHlwZSBfX3BvczEsIGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsCiAgICAgICAgICAgICBz aXplX3R5cGUgX19wb3MyLCBzaXplX3R5cGUgX19uKQogICAgICB7CiAgICAgICAgY29uc3Qgc2l6 ZV90eXBlIF9fc3Ryc2l6ZSA9IF9fc3RyLnNpemUoKTsKICAgICAgICBpZiAoX19wb3MyID4gX19z dHJzaXplKQogICAgICAgICAgX190aHJvd19vdXRfb2ZfcmFuZ2UoImJhc2ljX3N0cmluZzo6aW5z ZXJ0Iik7CiAgICAgICAgY29uc3QgYm9vbCBfX3Rlc3RuID0gX19uIDwgX19zdHJzaXplIC0gX19w b3MyOwogICAgICAgIGNvbnN0IHNpemVfdHlwZSBfX25ld3NpemUgPSBfX3Rlc3RuID8gX19uIDog X19zdHJzaXplIC0gX19wb3MyOwogICAgICAgIHJldHVybiB0aGlzLT5pbnNlcnQoX19wb3MxLCBf X3N0ci5fTV9kYXRhKCkgKyBfX3BvczIsIF9fbmV3c2l6ZSk7CiAgICAgIH0KCiAgICAgIGJhc2lj X3N0cmluZyYKICAgICAgaW5zZXJ0KHNpemVfdHlwZSBfX3BvcywgY29uc3QgX0NoYXJUKiBfX3Ms IHNpemVfdHlwZSBfX24pCiAgICAgIHsKICAgICAgICBjb25zdCBzaXplX3R5cGUgX19zaXplID0g dGhpcy0+c2l6ZSgpOwogICAgICAgIGlmIChfX3BvcyA+IF9fc2l6ZSkKICAgICAgICAgIF9fdGhy b3dfb3V0X29mX3JhbmdlKCJiYXNpY19zdHJpbmc6Omluc2VydCIpOwogICAgICAgIGlmIChfX3Np emUgPiB0aGlzLT5tYXhfc2l6ZSgpIC0gX19uKQogICAgICAgICAgX190aHJvd19sZW5ndGhfZXJy b3IoImJhc2ljX3N0cmluZzo6aW5zZXJ0Iik7CiAgICAgICAgaWYgKF9NX3JlcCgpLT5fTV9pc19z aGFyZWQoKSB8fCBsZXNzPGNvbnN0IF9DaGFyVCo+KCkoX19zLCBfTV9kYXRhKCkpCiAgICAgICAg ICAgIHx8IGxlc3M8Y29uc3QgX0NoYXJUKj4oKShfTV9kYXRhKCkgKyBfX3NpemUsIF9fcykpCiAg ICAgICAgICByZXR1cm4gX01fcmVwbGFjZV9zYWZlKF9NX2liZWdpbigpICsgX19wb3MsIF9NX2li ZWdpbigpICsgX19wb3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcywgX19z ICsgX19uKTsKICAgICAgICBlbHNlCiAgICAgICAgICB7CgoKCiAgICAgICAgICAgIGNvbnN0IHNp emVfdHlwZSBfX29mZiA9IF9fcyAtIF9NX2RhdGEoKTsKICAgICAgICAgICAgX01fbXV0YXRlKF9f cG9zLCAwLCBfX24pOwogICAgICAgICAgICBfX3MgPSBfTV9kYXRhKCkgKyBfX29mZjsKICAgICAg ICAgICAgX0NoYXJUKiBfX3AgPSBfTV9kYXRhKCkgKyBfX3BvczsKICAgICAgICAgICAgaWYgKF9f cyArIF9fbiA8PSBfX3ApCiAgICAgICAgICAgICAgdHJhaXRzX3R5cGU6OmNvcHkoX19wLCBfX3Ms IF9fbik7CiAgICAgICAgICAgIGVsc2UgaWYgKF9fcyA+PSBfX3ApCiAgICAgICAgICAgICAgdHJh aXRzX3R5cGU6OmNvcHkoX19wLCBfX3MgKyBfX24sIF9fbik7CiAgICAgICAgICAgIGVsc2UKICAg ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0cmFpdHNfdHlwZTo6Y29weShfX3AsIF9fcywg X19wIC0gX19zKTsKICAgICAgICAgICAgICAgIHRyYWl0c190eXBlOjpjb3B5KF9fcCArIChfX3Ag LSBfX3MpLCBfX3AgKyBfX24sIF9fbiAtIChfX3AgLSBfX3MpKTsKICAgICAgICAgICAgICB9CiAg ICAgICAgICAgIHJldHVybiAqdGhpczsKICAgICAgICAgIH0KICAgICAgIH0KCiAgICAgIGJhc2lj X3N0cmluZyYKICAgICAgaW5zZXJ0KHNpemVfdHlwZSBfX3BvcywgY29uc3QgX0NoYXJUKiBfX3Mp CiAgICAgIHsgcmV0dXJuIHRoaXMtPmluc2VydChfX3BvcywgX19zLCB0cmFpdHNfdHlwZTo6bGVu Z3RoKF9fcykpOyB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIGluc2VydChzaXplX3R5cGUg X19wb3MsIHNpemVfdHlwZSBfX24sIF9DaGFyVCBfX2MpCiAgICAgIHsKICAgICAgICB0aGlzLT5p bnNlcnQoX01fY2hlY2soX19wb3MpLCBfX24sIF9fYyk7CiAgICAgICAgcmV0dXJuICp0aGlzOwog ICAgICB9CgogICAgICBpdGVyYXRvcgogICAgICBpbnNlcnQoaXRlcmF0b3IgX19wLCBfQ2hhclQg X19jID0gX0NoYXJUKCkpCiAgICAgIHsKICAgICAgICBzaXplX3R5cGUgX19wb3MgPSBfX3AgLSBf TV9pYmVnaW4oKTsKICAgICAgICB0aGlzLT5pbnNlcnQoX01fY2hlY2soX19wb3MpLCBzaXplX3R5 cGUoMSksIF9fYyk7CiAgICAgICAgX01fcmVwKCktPl9NX3NldF9sZWFrZWQoKTsKICAgICAgICBy ZXR1cm4gdGhpcy0+X01faWJlZ2luKCkgKyBfX3BvczsKICAgICAgfQoKICAgICAgYmFzaWNfc3Ry aW5nJgogICAgICBlcmFzZShzaXplX3R5cGUgX19wb3MgPSAwLCBzaXplX3R5cGUgX19uID0gbnBv cykKICAgICAgewogICAgICAgIHJldHVybiB0aGlzLT5yZXBsYWNlKF9NX2NoZWNrKF9fcG9zKSwg X01fZm9sZChfX3BvcywgX19uKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTV9kYXRh KCksIF9NX2RhdGEoKSk7CiAgICAgIH0KCiAgICAgIGl0ZXJhdG9yCiAgICAgIGVyYXNlKGl0ZXJh dG9yIF9fcG9zaXRpb24pCiAgICAgIHsKICAgICAgICBzaXplX3R5cGUgX19pID0gX19wb3NpdGlv biAtIF9NX2liZWdpbigpOwogICAgICAgIHRoaXMtPnJlcGxhY2UoX19wb3NpdGlvbiwgX19wb3Np dGlvbiArIDEsIF9NX2RhdGEoKSwgX01fZGF0YSgpKTsKICAgICAgICBfTV9yZXAoKS0+X01fc2V0 X2xlYWtlZCgpOwogICAgICAgIHJldHVybiBfTV9pYmVnaW4oKSArIF9faTsKICAgICAgfQoKICAg ICAgaXRlcmF0b3IKICAgICAgZXJhc2UoaXRlcmF0b3IgX19maXJzdCwgaXRlcmF0b3IgX19sYXN0 KQogICAgICB7CiAgICAgICAgc2l6ZV90eXBlIF9faSA9IF9fZmlyc3QgLSBfTV9pYmVnaW4oKTsK ICAgICAgICB0aGlzLT5yZXBsYWNlKF9fZmlyc3QsIF9fbGFzdCwgX01fZGF0YSgpLCBfTV9kYXRh KCkpOwogICAgICAgIF9NX3JlcCgpLT5fTV9zZXRfbGVha2VkKCk7CiAgICAgICByZXR1cm4gX01f aWJlZ2luKCkgKyBfX2k7CiAgICAgIH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgcmVwbGFj ZShzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24sIGNvbnN0IGJhc2ljX3N0cmluZyYgX19z dHIpCiAgICAgIHsgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX19wb3MsIF9fbiwgX19zdHIuX01fZGF0 YSgpLCBfX3N0ci5zaXplKCkpOyB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIHJlcGxhY2Uo c2l6ZV90eXBlIF9fcG9zMSwgc2l6ZV90eXBlIF9fbjEsIGNvbnN0IGJhc2ljX3N0cmluZyYgX19z dHIsCiAgICAgICAgICAgICAgc2l6ZV90eXBlIF9fcG9zMiwgc2l6ZV90eXBlIF9fbjIpOwoKICAg ICAgYmFzaWNfc3RyaW5nJgogICAgICByZXBsYWNlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBl IF9fbjEsIGNvbnN0IF9DaGFyVCogX19zLAogICAgICAgICAgICAgIHNpemVfdHlwZSBfX24yKQog ICAgICB7CiAgICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsKICAg ICAgICBpZiAoX19wb3MgPiBfX3NpemUpCiAgICAgICAgICBfX3Rocm93X291dF9vZl9yYW5nZSgi YmFzaWNfc3RyaW5nOjpyZXBsYWNlIik7CiAgICAgICAgY29uc3QgYm9vbCBfX3Rlc3RuMSA9IF9f bjEgPCBfX3NpemUgLSBfX3BvczsKICAgICAgICBjb25zdCBzaXplX3R5cGUgX19mb2xkbjEgPSBf X3Rlc3RuMSA/IF9fbjEgOiBfX3NpemUgLSBfX3BvczsKICAgICAgICBpZiAoX19zaXplIC0gX19m b2xkbjEgPiB0aGlzLT5tYXhfc2l6ZSgpIC0gX19uMikKICAgICAgICAgIF9fdGhyb3dfbGVuZ3Ro X2Vycm9yKCJiYXNpY19zdHJpbmc6OnJlcGxhY2UiKTsKICAgICAgICBpZiAoX01fcmVwKCktPl9N X2lzX3NoYXJlZCgpIHx8IGxlc3M8Y29uc3QgX0NoYXJUKj4oKShfX3MsIF9NX2RhdGEoKSkKICAg ICAgICAgICAgfHwgbGVzczxjb25zdCBfQ2hhclQqPigpKF9NX2RhdGEoKSArIF9fc2l6ZSwgX19z KSkKICAgICAgICAgIHJldHVybiBfTV9yZXBsYWNlX3NhZmUoX01faWJlZ2luKCkgKyBfX3BvcywK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01faWJlZ2luKCkgKyBfX3BvcyArIF9f Zm9sZG4xLCBfX3MsIF9fcyArIF9fbjIpOwoKICAgICAgICBlbHNlIHJldHVybgogICAgICAgICAg ICAgICBfTV9yZXBsYWNlKF9NX2liZWdpbigpICsgX19wb3MsIF9NX2liZWdpbigpICsgX19wb3Mg KyBfX2ZvbGRuMSwKICAgICAgICAgICAgICAgICAgICAgICAgICBfX3MsIF9fcyArIF9fbjIsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPGNvbnN0IF9D aGFyVCo+OjppdGVyYXRvcl9jYXRlZ29yeSgpKTsKICAgICAgfQoKICAgICAgYmFzaWNfc3RyaW5n JgogICAgICByZXBsYWNlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbjEsIGNvbnN0IF9D aGFyVCogX19zKQogICAgICB7IHJldHVybiB0aGlzLT5yZXBsYWNlKF9fcG9zLCBfX24xLCBfX3Ms IHRyYWl0c190eXBlOjpsZW5ndGgoX19zKSk7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAg cmVwbGFjZShzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24xLCBzaXplX3R5cGUgX19uMiwg X0NoYXJUIF9fYykKICAgICAgeyByZXR1cm4gdGhpcy0+cmVwbGFjZShfTV9jaGVjayhfX3Bvcyks IF9NX2ZvbGQoX19wb3MsIF9fbjEpLCBfX24yLCBfX2MpOyB9CgogICAgICBiYXNpY19zdHJpbmcm CiAgICAgIHJlcGxhY2UoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwgY29uc3QgYmFzaWNf c3RyaW5nJiBfX3N0cikKICAgICAgeyByZXR1cm4gdGhpcy0+cmVwbGFjZShfX2kxLCBfX2kyLCBf X3N0ci5fTV9kYXRhKCksIF9fc3RyLnNpemUoKSk7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAg ICAgcmVwbGFjZShpdGVyYXRvciBfX2kxLCBpdGVyYXRvciBfX2kyLAogICAgICAgICAgICAgICAg ICAgICAgICAgICBjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fbikKICAgICAgeyByZXR1 cm4gdGhpcy0+cmVwbGFjZShfX2kxIC0gX01faWJlZ2luKCksIF9faTIgLSBfX2kxLCBfX3MsIF9f bik7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgcmVwbGFjZShpdGVyYXRvciBfX2kxLCBp dGVyYXRvciBfX2kyLCBjb25zdCBfQ2hhclQqIF9fcykKICAgICAgeyByZXR1cm4gdGhpcy0+cmVw bGFjZShfX2kxLCBfX2kyLCBfX3MsIHRyYWl0c190eXBlOjpsZW5ndGgoX19zKSk7IH0KCiAgICAg IGJhc2ljX3N0cmluZyYKICAgICAgcmVwbGFjZShpdGVyYXRvciBfX2kxLCBpdGVyYXRvciBfX2ky LCBzaXplX3R5cGUgX19uLCBfQ2hhclQgX19jKTsKCiAgICAgIHRlbXBsYXRlPGNsYXNzIF9JbnB1 dEl0ZXJhdG9yPgogICAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgICByZXBsYWNlKGl0ZXJhdG9y IF9faTEsIGl0ZXJhdG9yIF9faTIsCiAgICAgICAgICAgICAgICBfSW5wdXRJdGVyYXRvciBfX2sx LCBfSW5wdXRJdGVyYXRvciBfX2syKQogICAgICAgIHsgcmV0dXJuIF9NX3JlcGxhY2UoX19pMSwg X19pMiwgX19rMSwgX19rMiwKICAgICAgICAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxf SW5wdXRJdGVyYXRvcj46Oml0ZXJhdG9yX2NhdGVnb3J5KCkpOyB9CgoKCiAgICAgIGJhc2ljX3N0 cmluZyYKICAgICAgcmVwbGFjZShpdGVyYXRvciBfX2kxLCBpdGVyYXRvciBfX2kyLCBfQ2hhclQq IF9fazEsIF9DaGFyVCogX19rMikKICAgICAgICB7IHJldHVybiB0aGlzLT5yZXBsYWNlKF9faTEg LSBfTV9pYmVnaW4oKSwgX19pMiAtIF9faTEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBfX2sxLCBfX2syIC0gX19rMSk7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgcmVwbGFj ZShpdGVyYXRvciBfX2kxLCBpdGVyYXRvciBfX2kyLCBjb25zdCBfQ2hhclQqIF9fazEsIGNvbnN0 IF9DaGFyVCogX19rMikKICAgICAgICB7IHJldHVybiB0aGlzLT5yZXBsYWNlKF9faTEgLSBfTV9p YmVnaW4oKSwgX19pMiAtIF9faTEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2sx LCBfX2syIC0gX19rMSk7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgcmVwbGFjZShpdGVy YXRvciBfX2kxLCBpdGVyYXRvciBfX2kyLCBpdGVyYXRvciBfX2sxLCBpdGVyYXRvciBfX2syKQog ICAgICAgIHsgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX19pMSAtIF9NX2liZWdpbigpLCBfX2kyIC0g X19pMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fazEuYmFzZSgpLCBfX2syIC0g X19rMSk7CiAgICAgICAgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICByZXBsYWNlKGl0ZXJh dG9yIF9faTEsIGl0ZXJhdG9yIF9faTIsIGNvbnN0X2l0ZXJhdG9yIF9fazEsIGNvbnN0X2l0ZXJh dG9yIF9fazIpCiAgICAgICAgeyByZXR1cm4gdGhpcy0+cmVwbGFjZShfX2kxIC0gX01faWJlZ2lu KCksIF9faTIgLSBfX2kxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19rMS5iYXNl KCksIF9fazIgLSBfX2sxKTsKICAgICAgICB9CgogICAgcHJpdmF0ZToKICAgICAgdGVtcGxhdGU8 Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgICAgICAgYmFzaWNfc3RyaW5nJgogICAgICAgIF9NX3Jl cGxhY2UoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwgX0lucHV0SXRlcmF0b3IgX19rMSwK ICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXJhdG9yIF9fazIsIGlucHV0X2l0ZXJhdG9yX3Rh Zyk7CgogICAgICB0ZW1wbGF0ZTxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgogICAgICAgIGJhc2lj X3N0cmluZyYKICAgICAgICBfTV9yZXBsYWNlX3NhZmUoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3Ig X19pMiwgX0ZvcndhcmRJdGVyYXRvciBfX2sxLAogICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJ dGVyYXRvciBfX2syKTsKCgoKICAgICAgdGVtcGxhdGU8Y2xhc3MgX0luSXRlcj4KICAgICAgICBz dGF0aWMgX0NoYXJUKgogICAgICAgIF9TX2NvbnN0cnVjdF9hdXgoX0luSXRlciBfX2JlZywgX0lu SXRlciBfX2VuZCwgY29uc3QgX0FsbG9jJiBfX2EsCiAgICAgICAgICAgICAgICAgICAgICAgICBf X2ZhbHNlX3R5cGUpCiAgICAgICAgewogICAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRv cl90cmFpdHM8X0luSXRlcj46Oml0ZXJhdG9yX2NhdGVnb3J5IF9UYWc7CiAgICAgICAgICByZXR1 cm4gX1NfY29uc3RydWN0KF9fYmVnLCBfX2VuZCwgX19hLCBfVGFnKCkpOwogICAgICAgIH0KCiAg ICAgIHRlbXBsYXRlPGNsYXNzIF9Jbkl0ZXI+CiAgICAgICAgc3RhdGljIF9DaGFyVCoKICAgICAg ICBfU19jb25zdHJ1Y3RfYXV4KF9Jbkl0ZXIgX19iZWcsIF9Jbkl0ZXIgX19lbmQsIGNvbnN0IF9B bGxvYyYgX19hLAogICAgICAgICAgICAgICAgICAgICAgICAgX190cnVlX3R5cGUpCiAgICAgICAg ewogICAgICAgICAgcmV0dXJuIF9TX2NvbnN0cnVjdChzdGF0aWNfY2FzdDxzaXplX3R5cGU+KF9f YmVnKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8dmFsdWVfdHlw ZT4oX19lbmQpLCBfX2EpOwogICAgICAgIH0KCiAgICAgIHRlbXBsYXRlPGNsYXNzIF9Jbkl0ZXI+ CiAgICAgICAgc3RhdGljIF9DaGFyVCoKICAgICAgICBfU19jb25zdHJ1Y3QoX0luSXRlciBfX2Jl ZywgX0luSXRlciBfX2VuZCwgY29uc3QgX0FsbG9jJiBfX2EpCiAgICAgICAgewogICAgICAgICAg dHlwZWRlZiB0eXBlbmFtZSBfSXNfaW50ZWdlcjxfSW5JdGVyPjo6X0ludGVncmFsIF9JbnRlZ3Jh bDsKICAgICAgICAgIHJldHVybiBfU19jb25zdHJ1Y3RfYXV4KF9fYmVnLCBfX2VuZCwgX19hLCBf SW50ZWdyYWwoKSk7CiAgICAgICAgfQoKCiAgICAgIHRlbXBsYXRlPGNsYXNzIF9Jbkl0ZXI+CiAg ICAgICAgc3RhdGljIF9DaGFyVCoKICAgICAgICAgX1NfY29uc3RydWN0KF9Jbkl0ZXIgX19iZWcs IF9Jbkl0ZXIgX19lbmQsIGNvbnN0IF9BbGxvYyYgX19hLAogICAgICAgICAgICAgICAgICAgICAg aW5wdXRfaXRlcmF0b3JfdGFnKTsKCgoKICAgICAgdGVtcGxhdGU8Y2xhc3MgX0Z3ZEl0ZXI+CiAg ICAgICAgc3RhdGljIF9DaGFyVCoKICAgICAgICBfU19jb25zdHJ1Y3QoX0Z3ZEl0ZXIgX19iZWcs IF9Gd2RJdGVyIF9fZW5kLCBjb25zdCBfQWxsb2MmIF9fYSwKICAgICAgICAgICAgICAgICAgICAg Zm9yd2FyZF9pdGVyYXRvcl90YWcpOwoKICAgICAgc3RhdGljIF9DaGFyVCoKICAgICAgX1NfY29u c3RydWN0KHNpemVfdHlwZSBfX3JlcSwgX0NoYXJUIF9fYywgY29uc3QgX0FsbG9jJiBfX2EpOwoK ICAgIHB1YmxpYzoKCiAgICAgIHNpemVfdHlwZQogICAgICBjb3B5KF9DaGFyVCogX19zLCBzaXpl X3R5cGUgX19uLCBzaXplX3R5cGUgX19wb3MgPSAwKSBjb25zdDsKCiAgICAgIHZvaWQKICAgICAg c3dhcChiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3MpOwoKCiAgICAg IGNvbnN0IF9DaGFyVCoKICAgICAgY19zdHIoKSBjb25zdAogICAgICB7CgogICAgICAgIHNpemVf dHlwZSBfX24gPSB0aGlzLT5zaXplKCk7CiAgICAgICAgdHJhaXRzX3R5cGU6OmFzc2lnbihfTV9k YXRhKClbX19uXSwgX1JlcDo6X1NfdGVybWluYWwpOwogICAgICAgIHJldHVybiBfTV9kYXRhKCk7 CiAgICAgIH0KCiAgICAgIGNvbnN0IF9DaGFyVCoKICAgICAgZGF0YSgpIGNvbnN0IHsgcmV0dXJu IF9NX2RhdGEoKTsgfQoKICAgICAgYWxsb2NhdG9yX3R5cGUKICAgICAgZ2V0X2FsbG9jYXRvcigp IGNvbnN0IHsgcmV0dXJuIF9NX2RhdGFwbHVzOyB9CgogICAgICBzaXplX3R5cGUKICAgICAgZmlu ZChjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKSBjb25z dDsKCiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIs IHNpemVfdHlwZSBfX3BvcyA9IDApIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmZpbmQoX19z dHIuZGF0YSgpLCBfX3BvcywgX19zdHIuc2l6ZSgpKTsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAg IGZpbmQoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3BvcyA9IDApIGNvbnN0CiAgICAg IHsgcmV0dXJuIHRoaXMtPmZpbmQoX19zLCBfX3BvcywgdHJhaXRzX3R5cGU6Omxlbmd0aChfX3Mp KTsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmQoX0NoYXJUIF9fYywgc2l6ZV90eXBlIF9f cG9zID0gMCkgY29uc3Q7CgogICAgICBzaXplX3R5cGUKICAgICAgcmZpbmQoY29uc3QgYmFzaWNf c3RyaW5nJiBfX3N0ciwgc2l6ZV90eXBlIF9fcG9zID0gbnBvcykgY29uc3QKICAgICAgeyByZXR1 cm4gdGhpcy0+cmZpbmQoX19zdHIuZGF0YSgpLCBfX3BvcywgX19zdHIuc2l6ZSgpKTsgfQoKICAg ICAgc2l6ZV90eXBlCiAgICAgIHJmaW5kKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19w b3MsIHNpemVfdHlwZSBfX24pIGNvbnN0OwoKICAgICAgc2l6ZV90eXBlCiAgICAgIHJmaW5kKGNv bnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MgPSBucG9zKSBjb25zdAogICAgICB7IHJl dHVybiB0aGlzLT5yZmluZChfX3MsIF9fcG9zLCB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcykpOyB9 CgogICAgICBzaXplX3R5cGUKICAgICAgcmZpbmQoX0NoYXJUIF9fYywgc2l6ZV90eXBlIF9fcG9z ID0gbnBvcykgY29uc3Q7CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZF9maXJzdF9vZihjb25z dCBiYXNpY19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3MgPSAwKSBjb25zdAogICAgICB7 IHJldHVybiB0aGlzLT5maW5kX2ZpcnN0X29mKF9fc3RyLmRhdGEoKSwgX19wb3MsIF9fc3RyLnNp emUoKSk7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kX2ZpcnN0X29mKGNvbnN0IF9DaGFy VCogX19zLCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24pIGNvbnN0OwoKICAgICAgc2l6 ZV90eXBlCiAgICAgIGZpbmRfZmlyc3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBf X3BvcyA9IDApIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmZpbmRfZmlyc3Rfb2YoX19zLCBf X3BvcywgdHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpKTsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAg IGZpbmRfZmlyc3Rfb2YoX0NoYXJUIF9fYywgc2l6ZV90eXBlIF9fcG9zID0gMCkgY29uc3QKICAg ICAgeyByZXR1cm4gdGhpcy0+ZmluZChfX2MsIF9fcG9zKTsgfQoKICAgICAgc2l6ZV90eXBlCiAg ICAgIGZpbmRfbGFzdF9vZihjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19w b3MgPSBucG9zKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5maW5kX2xhc3Rfb2YoX19zdHIu ZGF0YSgpLCBfX3BvcywgX19zdHIuc2l6ZSgpKTsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZp bmRfbGFzdF9vZihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUg X19uKSBjb25zdDsKCiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kX2xhc3Rfb2YoY29uc3QgX0No YXJUKiBfX3MsIHNpemVfdHlwZSBfX3BvcyA9IG5wb3MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRo aXMtPmZpbmRfbGFzdF9vZihfX3MsIF9fcG9zLCB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcykpOyB9 CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZF9sYXN0X29mKF9DaGFyVCBfX2MsIHNpemVfdHlw ZSBfX3BvcyA9IG5wb3MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPnJmaW5kKF9fYywgX19w b3MpOyB9CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZF9maXJzdF9ub3Rfb2YoY29uc3QgYmFz aWNfc3RyaW5nJiBfX3N0ciwgc2l6ZV90eXBlIF9fcG9zID0gMCkgY29uc3QKICAgICAgeyByZXR1 cm4gdGhpcy0+ZmluZF9maXJzdF9ub3Rfb2YoX19zdHIuZGF0YSgpLCBfX3BvcywgX19zdHIuc2l6 ZSgpKTsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmRfZmlyc3Rfbm90X29mKGNvbnN0IF9D aGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MsCiAgICAgICAgICAgICAgICAgICAgICAgIHNpemVf dHlwZSBfX24pIGNvbnN0OwoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmRfZmlyc3Rfbm90X29m KGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MgPSAwKSBjb25zdAogICAgICB7IHJl dHVybiB0aGlzLT5maW5kX2ZpcnN0X25vdF9vZihfX3MsIF9fcG9zLCB0cmFpdHNfdHlwZTo6bGVu Z3RoKF9fcykpOyB9CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZF9maXJzdF9ub3Rfb2YoX0No YXJUIF9fYywgc2l6ZV90eXBlIF9fcG9zID0gMCkgY29uc3Q7CgogICAgICBzaXplX3R5cGUKICAg ICAgZmluZF9sYXN0X25vdF9vZihjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUg X19wb3MgPSBucG9zKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5maW5kX2xhc3Rfbm90X29m KF9fc3RyLmRhdGEoKSwgX19wb3MsIF9fc3RyLnNpemUoKSk7IH0KCiAgICAgIHNpemVfdHlwZQog ICAgICBmaW5kX2xhc3Rfbm90X29mKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3Ms CiAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90eXBlIF9fbikgY29uc3Q7CiAgICAgIHNpemVf dHlwZQogICAgICBmaW5kX2xhc3Rfbm90X29mKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUg X19wb3MgPSBucG9zKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5maW5kX2xhc3Rfbm90X29m KF9fcywgX19wb3MsIHRyYWl0c190eXBlOjpsZW5ndGgoX19zKSk7IH0KCiAgICAgIHNpemVfdHlw ZQogICAgICBmaW5kX2xhc3Rfbm90X29mKF9DaGFyVCBfX2MsIHNpemVfdHlwZSBfX3BvcyA9IG5w b3MpIGNvbnN0OwoKICAgICAgYmFzaWNfc3RyaW5nCiAgICAgIHN1YnN0cihzaXplX3R5cGUgX19w b3MgPSAwLCBzaXplX3R5cGUgX19uID0gbnBvcykgY29uc3QKICAgICAgewogICAgICAgIGlmIChf X3BvcyA+IHRoaXMtPnNpemUoKSkKICAgICAgICAgIF9fdGhyb3dfb3V0X29mX3JhbmdlKCJiYXNp Y19zdHJpbmc6OnN1YnN0ciIpOwogICAgICAgIHJldHVybiBiYXNpY19zdHJpbmcoKnRoaXMsIF9f cG9zLCBfX24pOwogICAgICB9CgogICAgICBpbnQKICAgICAgY29tcGFyZShjb25zdCBiYXNpY19z dHJpbmcmIF9fc3RyKSBjb25zdAogICAgICB7CiAgICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHRo aXMtPnNpemUoKTsKICAgICAgICBzaXplX3R5cGUgX19vc2l6ZSA9IF9fc3RyLnNpemUoKTsKICAg ICAgICBzaXplX3R5cGUgX19sZW4gPSBtaW4oX19zaXplLCBfX29zaXplKTsKCiAgICAgICAgaW50 IF9fciA9IHRyYWl0c190eXBlOjpjb21wYXJlKF9NX2RhdGEoKSwgX19zdHIuZGF0YSgpLCBfX2xl bik7CiAgICAgICAgaWYgKCFfX3IpCiAgICAgICAgICBfX3IgPSBfX3NpemUgLSBfX29zaXplOwog ICAgICAgIHJldHVybiBfX3I7CiAgICAgIH0KCiAgICAgIGludAogICAgICBjb21wYXJlKHNpemVf dHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbiwgY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cikgY29u c3Q7CgogICAgICBpbnQKICAgICAgY29tcGFyZShzaXplX3R5cGUgX19wb3MxLCBzaXplX3R5cGUg X19uMSwgY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwKICAgICAgICAgICAgICBzaXplX3R5cGUg X19wb3MyLCBzaXplX3R5cGUgX19uMikgY29uc3Q7CgogICAgICBpbnQKICAgICAgY29tcGFyZShj b25zdCBfQ2hhclQqIF9fcykgY29uc3Q7CgoKCiAgICAgIGludAogICAgICBjb21wYXJlKHNpemVf dHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbjEsIGNvbnN0IF9DaGFyVCogX19zKSBjb25zdDsKCiAg ICAgIGludAogICAgICBjb21wYXJlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbjEsIGNv bnN0IF9DaGFyVCogX19zLAogICAgICAgICAgICAgIHNpemVfdHlwZSBfX24yKSBjb25zdDsKICB9 OwoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFt ZSBfQWxsb2M+CiAgICBpbmxpbmUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9j Pjo6CiAgICBiYXNpY19zdHJpbmcoKQogICAgOiBfTV9kYXRhcGx1cyhfU19lbXB0eV9yZXAoKS5f TV9yZWZjb3B5KCksIF9BbGxvYygpKSB7IH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg dHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFy VCwgX1RyYWl0cywgX0FsbG9jPgogICAgb3BlcmF0b3IrKGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hh clQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhzLAogICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0 cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcmhzKQogICAgewogICAgICBiYXNpY19z dHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+IF9fc3RyKF9fbGhzKTsKICAgICAgX19zdHIu YXBwZW5kKF9fcmhzKTsKICAgICAgcmV0dXJuIF9fc3RyOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2lj X3N0cmluZzxfQ2hhclQsX1RyYWl0cyxfQWxsb2M+CiAgICBvcGVyYXRvcisoY29uc3QgX0NoYXJU KiBfX2xocywKICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMs X0FsbG9jPiYgX19yaHMpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U cmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsX1RyYWl0cyxf QWxsb2M+CiAgICBvcGVyYXRvcisoX0NoYXJUIF9fbGhzLCBjb25zdCBiYXNpY19zdHJpbmc8X0No YXJULF9UcmFpdHMsX0FsbG9jPiYgX19yaHMpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs IHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBiYXNpY19zdHJp bmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+CiAgICBvcGVyYXRvcisoY29uc3QgYmFzaWNfc3Ry aW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsCiAgICAgICAgICAgICBjb25zdCBf Q2hhclQqIF9fcmhzKQogICAgewogICAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBf QWxsb2M+IF9fc3RyKF9fbGhzKTsKICAgICAgX19zdHIuYXBwZW5kKF9fcmhzKTsKICAgICAgcmV0 dXJuIF9fc3RyOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U cmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBiYXNpY19zdHJpbmc8X0NoYXJULCBf VHJhaXRzLCBfQWxsb2M+CiAgICBvcGVyYXRvcisoY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwg X1RyYWl0cywgX0FsbG9jPiYgX19saHMsIF9DaGFyVCBfX3JocykKICAgIHsKICAgICAgdHlwZWRl ZiBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+IF9fc3RyaW5nX3R5cGU7CiAg ICAgIHR5cGVkZWYgdHlwZW5hbWUgX19zdHJpbmdfdHlwZTo6c2l6ZV90eXBlIF9fc2l6ZV90eXBl OwogICAgICBfX3N0cmluZ190eXBlIF9fc3RyKF9fbGhzKTsKICAgICAgX19zdHIuYXBwZW5kKF9f c2l6ZV90eXBlKDEpLCBfX3Jocyk7CiAgICAgIHJldHVybiBfX3N0cjsKICAgIH0KCgogIHRlbXBs YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgog ICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPT0oY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwg X1RyYWl0cywgX0FsbG9jPiYgX19saHMsCiAgICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmlu ZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcmhzKQogICAgeyByZXR1cm4gX19saHMuY29t cGFyZShfX3JocykgPT0gMDsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l IF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj09 KGNvbnN0IF9DaGFyVCogX19saHMsCiAgICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxf Q2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcmhzKQogICAgeyByZXR1cm4gX19yaHMuY29tcGFy ZShfX2xocykgPT0gMDsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U cmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj09KGNv bnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhzLAogICAgICAg ICAgICAgICBjb25zdCBfQ2hhclQqIF9fcmhzKQogICAgeyByZXR1cm4gX19saHMuY29tcGFyZShf X3JocykgPT0gMDsgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh aXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3IhPShjb25z dCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywKICAgICAgICAg ICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMp CiAgICB7IHJldHVybiBfX3Jocy5jb21wYXJlKF9fbGhzKSAhPSAwOyB9CgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5s aW5lIGJvb2wKICAgIG9wZXJhdG9yIT0oY29uc3QgX0NoYXJUKiBfX2xocywKICAgICAgICAgICAg ICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAg ICB7IHJldHVybiBfX3Jocy5jb21wYXJlKF9fbGhzKSAhPSAwOyB9CgogIHRlbXBsYXRlPHR5cGVu YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5l IGJvb2wKICAgIG9wZXJhdG9yIT0oY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywg X0FsbG9jPiYgX19saHMsCiAgICAgICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19yaHMpCiAgICB7 IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSAhPSAwOyB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBi b29sCiAgICBvcGVyYXRvcjwoY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0Fs bG9jPiYgX19saHMsCiAgICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1Ry YWl0cywgX0FsbG9jPiYgX19yaHMpCiAgICB7IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSA8 IDA7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBl bmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I8KGNvbnN0IGJhc2ljX3N0 cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhzLAogICAgICAgICAgICAgIGNvbnN0 IF9DaGFyVCogX19yaHMpCiAgICB7IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSA8IDA7IH0K CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBf QWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I8KGNvbnN0IF9DaGFyVCogX19saHMs CiAgICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9j PiYgX19yaHMpCiAgICB7IHJldHVybiBfX3Jocy5jb21wYXJlKF9fbGhzKSA+IDA7IH0KCgogIHRl bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9j PgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPihjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJU LCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywKICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJp bmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3JocykKICAgIHsgcmV0dXJuIF9fbGhzLmNv bXBhcmUoX19yaHMpID4gMDsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l IF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj4o Y29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsCiAgICAg ICAgICAgICAgY29uc3QgX0NoYXJUKiBfX3JocykKICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUo X19yaHMpID4gMDsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp dHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj4oY29uc3Qg X0NoYXJUKiBfX2xocywKICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBf VHJhaXRzLCBfQWxsb2M+JiBfX3JocykKICAgIHsgcmV0dXJuIF9fcmhzLmNvbXBhcmUoX19saHMp IDwgMDsgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0 eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I8PShjb25zdCBiYXNp Y19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywKICAgICAgICAgICAgICAg Y29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAgICB7 IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSA8PSAwOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1l IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJv b2wKICAgIG9wZXJhdG9yPD0oY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0Fs bG9jPiYgX19saHMsCiAgICAgICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19yaHMpCiAgICB7IHJl dHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSA8PSAwOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D aGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wK ICAgIG9wZXJhdG9yPD0oY29uc3QgX0NoYXJUKiBfX2xocywKICAgICAgICAgICAgICAgY29uc3Qg YmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAgeyByZXR1cm4g X19yaHMuY29tcGFyZShfX2xocykgPj0gMDsgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU LCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAg b3BlcmF0b3I+PShjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBf X2xocywKICAgICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywg X0FsbG9jPiYgX19yaHMpCiAgICB7IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSA+PSAwOyB9 CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUg X0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPj0oY29uc3QgYmFzaWNfc3RyaW5n PF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsCiAgICAgICAgICAgICAgIGNvbnN0IF9D aGFyVCogX19yaHMpCiAgICB7IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSA+PSAwOyB9Cgog IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0Fs bG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPj0oY29uc3QgX0NoYXJUKiBfX2xocywK ICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4m IF9fcmhzKQogICAgeyByZXR1cm4gX19yaHMuY29tcGFyZShfX2xocykgPD0gMDsgfQoKCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+ CiAgICBpbmxpbmUgdm9pZAogICAgc3dhcChiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBf QWxsb2M+JiBfX2xocywKICAgICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0Fs bG9jPiYgX19yaHMpCiAgICB7IF9fbGhzLnN3YXAoX19yaHMpOyB9CgogIHRlbXBsYXRlPHR5cGVu YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNf aXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I+PihiYXNpY19pc3RyZWFtPF9D aGFyVCwgX1RyYWl0cz4mIF9faXMsCiAgICAgICAgICAgICAgIGJhc2ljX3N0cmluZzxfQ2hhclQs IF9UcmFpdHMsIF9BbGxvYz4mIF9fc3RyKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0 eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFy VCwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRz PiYgX19vcywKICAgICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0 cywgX0FsbG9jPiYgX19zdHIpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l IF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULF9UcmFp dHM+JgogICAgZ2V0bGluZShiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faXMsCiAg ICAgICAgICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fc3RyLCBf Q2hhclQgX19kZWxpbSk7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry YWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJhc2ljX2lzdHJlYW08X0NoYXJULF9U cmFpdHM+JgogICAgZ2V0bGluZShiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faXMs CiAgICAgICAgICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fc3Ry KTsKfQojIDU0ICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL3N0cmluZyIgMiAzCgoKIyAxICIvdXNy L2luY2x1ZGUvYysrLzMuMi4xL2FsZ29yaXRobSIgMSAzCiMgNjUgIi91c3IvaW5jbHVkZS9jKysv My4yLjEvYWxnb3JpdGhtIiAzCgoKCgojIDEgIi91c3IvaW5jbHVkZS9jKysvMy4yLjEvYml0cy9z dGxfYWxnby5oIiAxIDMKIyA2NCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9iaXRzL3N0bF9hbGdv LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL2JpdHMvc3RsX2hlYXAuaCIgMSAzCiMg NjMgIi91c3IvaW5jbHVkZS9jKysvMy4yLjEvYml0cy9zdGxfaGVhcC5oIiAzCm5hbWVzcGFjZSBz dGQKewoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgdHlwZW5h bWUgX0Rpc3RhbmNlLCB0eXBlbmFtZSBfVHA+CiAgICB2b2lkCiAgICBfX3B1c2hfaGVhcChfUmFu ZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwKICAgICAgICAgICAgICAgIF9EaXN0YW5jZSBfX2hv bGVJbmRleCwgX0Rpc3RhbmNlIF9fdG9wSW5kZXgsIF9UcCBfX3ZhbHVlKQogICAgewogICAgICBf RGlzdGFuY2UgX19wYXJlbnQgPSAoX19ob2xlSW5kZXggLSAxKSAvIDI7CiAgICAgIHdoaWxlIChf X2hvbGVJbmRleCA+IF9fdG9wSW5kZXggJiYgKihfX2ZpcnN0ICsgX19wYXJlbnQpIDwgX192YWx1 ZSkgewogICAgICAgICooX19maXJzdCArIF9faG9sZUluZGV4KSA9ICooX19maXJzdCArIF9fcGFy ZW50KTsKICAgICAgICBfX2hvbGVJbmRleCA9IF9fcGFyZW50OwogICAgICAgIF9fcGFyZW50ID0g KF9faG9sZUluZGV4IC0gMSkgLyAyOwogICAgICB9CiAgICAgICooX19maXJzdCArIF9faG9sZUlu ZGV4KSA9IF9fdmFsdWU7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJ dGVyYXRvcj4KICAgIGlubGluZSB2b2lkCiAgICBwdXNoX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJh dG9yIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QpCiAgICB7CiAgICAgIHR5 cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyYXRvcj46OnZh bHVlX3R5cGUKICAgICAgICAgIF9WYWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRl cmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQogICAg ICAgICAgX0Rpc3RhbmNlVHlwZTsKCgogICAgIAoKICAgICAKCiAgICAgIF9fcHVzaF9oZWFwKF9f Zmlyc3QsIF9EaXN0YW5jZVR5cGUoKF9fbGFzdCAtIF9fZmlyc3QpIC0gMSksIF9EaXN0YW5jZVR5 cGUoMCksCiAgICAgICAgICAgICAgICAgIF9WYWx1ZVR5cGUoKihfX2xhc3QgLSAxKSkpOwogICAg fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIHR5cGVuYW1lIF9E aXN0YW5jZSwgdHlwZW5hbWUgX1RwLAogICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZT4KICAg IHZvaWQKICAgIF9fcHVzaF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfRGlz dGFuY2UgX19ob2xlSW5kZXgsCiAgICAgICAgICAgICAgICBfRGlzdGFuY2UgX190b3BJbmRleCwg X1RwIF9fdmFsdWUsIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgX0Rpc3RhbmNlIF9fcGFy ZW50ID0gKF9faG9sZUluZGV4IC0gMSkgLyAyOwogICAgICB3aGlsZSAoX19ob2xlSW5kZXggPiBf X3RvcEluZGV4ICYmIF9fY29tcCgqKF9fZmlyc3QgKyBfX3BhcmVudCksIF9fdmFsdWUpKSB7CiAg ICAgICAgKihfX2ZpcnN0ICsgX19ob2xlSW5kZXgpID0gKihfX2ZpcnN0ICsgX19wYXJlbnQpOwog ICAgICAgIF9faG9sZUluZGV4ID0gX19wYXJlbnQ7CiAgICAgICAgX19wYXJlbnQgPSAoX19ob2xl SW5kZXggLSAxKSAvIDI7CiAgICAgIH0KICAgICAgKihfX2ZpcnN0ICsgX19ob2xlSW5kZXgpID0g X192YWx1ZTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9y LCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIGlubGluZSB2b2lkCiAgICBwdXNoX2hlYXAoX1JhbmRv bUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsCiAg ICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1l IGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0b3I+Ojp2YWx1ZV90eXBlCiAgICAg ICAgICBfVmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxf UmFuZG9tQWNjZXNzSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUKICAgICAgICAgIF9EaXN0YW5j ZVR5cGU7CgoKICAgICAKCgogICAgICBfX3B1c2hfaGVhcChfX2ZpcnN0LCBfRGlzdGFuY2VUeXBl KChfX2xhc3QgLSBfX2ZpcnN0KSAtIDEpLCBfRGlzdGFuY2VUeXBlKDApLAogICAgICAgICAgICAg ICAgICBfVmFsdWVUeXBlKCooX19sYXN0IC0gMSkpLCBfX2NvbXApOwogICAgfQoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIHR5cGVuYW1lIF9EaXN0YW5jZSwgdHlw ZW5hbWUgX1RwPgogICAgdm9pZAogICAgX19hZGp1c3RfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0 b3IgX19maXJzdCwgX0Rpc3RhbmNlIF9faG9sZUluZGV4LAogICAgICAgICAgICAgICAgICBfRGlz dGFuY2UgX19sZW4sIF9UcCBfX3ZhbHVlKQogICAgewogICAgICBfRGlzdGFuY2UgX190b3BJbmRl eCA9IF9faG9sZUluZGV4OwogICAgICBfRGlzdGFuY2UgX19zZWNvbmRDaGlsZCA9IDIgKiBfX2hv bGVJbmRleCArIDI7CiAgICAgIHdoaWxlIChfX3NlY29uZENoaWxkIDwgX19sZW4pIHsKICAgICAg ICBpZiAoKihfX2ZpcnN0ICsgX19zZWNvbmRDaGlsZCkgPCAqKF9fZmlyc3QgKyAoX19zZWNvbmRD aGlsZCAtIDEpKSkKICAgICAgICAgIF9fc2Vjb25kQ2hpbGQtLTsKICAgICAgICAqKF9fZmlyc3Qg KyBfX2hvbGVJbmRleCkgPSAqKF9fZmlyc3QgKyBfX3NlY29uZENoaWxkKTsKICAgICAgICBfX2hv bGVJbmRleCA9IF9fc2Vjb25kQ2hpbGQ7CiAgICAgICAgX19zZWNvbmRDaGlsZCA9IDIgKiAoX19z ZWNvbmRDaGlsZCArIDEpOwogICAgICB9CiAgICAgIGlmIChfX3NlY29uZENoaWxkID09IF9fbGVu KSB7CiAgICAgICAgKihfX2ZpcnN0ICsgX19ob2xlSW5kZXgpID0gKihfX2ZpcnN0ICsgKF9fc2Vj b25kQ2hpbGQgLSAxKSk7CiAgICAgICAgX19ob2xlSW5kZXggPSBfX3NlY29uZENoaWxkIC0gMTsK ICAgICAgfQogICAgICBfX3B1c2hfaGVhcChfX2ZpcnN0LCBfX2hvbGVJbmRleCwgX190b3BJbmRl eCwgX192YWx1ZSk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVy YXRvciwgdHlwZW5hbWUgX1RwPgogICAgaW5saW5lIHZvaWQKICAgIF9fcG9wX2hlYXAoX1JhbmRv bUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsCiAg ICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX3Jlc3VsdCwgX1RwIF9fdmFsdWUp CiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nl c3NJdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZSBfRGlzdGFuY2U7CiAgICAgICpfX3Jlc3VsdCA9 ICpfX2ZpcnN0OwogICAgICBfX2FkanVzdF9oZWFwKF9fZmlyc3QsIF9EaXN0YW5jZSgwKSwgX0Rp c3RhbmNlKF9fbGFzdCAtIF9fZmlyc3QpLCBfX3ZhbHVlKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPgogICAgaW5saW5lIHZvaWQKICAgIHBvcF9oZWFw KF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19s YXN0KQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9t QWNjZXNzSXRlcmF0b3I+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CgoKICAgICAKCiAgICAgCgog ICAgICBfX3BvcF9oZWFwKF9fZmlyc3QsIF9fbGFzdCAtIDEsIF9fbGFzdCAtIDEsIF9WYWx1ZVR5 cGUoKihfX2xhc3QgLSAxKSkpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNj ZXNzSXRlcmF0b3IsIHR5cGVuYW1lIF9EaXN0YW5jZSwKICAgICAgICAgICB0eXBlbmFtZSBfVHAs IHR5cGVuYW1lIF9Db21wYXJlPgogICAgdm9pZAogICAgX19hZGp1c3RfaGVhcChfUmFuZG9tQWNj ZXNzSXRlcmF0b3IgX19maXJzdCwgX0Rpc3RhbmNlIF9faG9sZUluZGV4LAogICAgICAgICAgICAg ICAgICBfRGlzdGFuY2UgX19sZW4sIF9UcCBfX3ZhbHVlLCBfQ29tcGFyZSBfX2NvbXApCiAgICB7 CiAgICAgIF9EaXN0YW5jZSBfX3RvcEluZGV4ID0gX19ob2xlSW5kZXg7CiAgICAgIF9EaXN0YW5j ZSBfX3NlY29uZENoaWxkID0gMiAqIF9faG9sZUluZGV4ICsgMjsKICAgICAgd2hpbGUgKF9fc2Vj b25kQ2hpbGQgPCBfX2xlbikgewogICAgICAgIGlmIChfX2NvbXAoKihfX2ZpcnN0ICsgX19zZWNv bmRDaGlsZCksICooX19maXJzdCArIChfX3NlY29uZENoaWxkIC0gMSkpKSkKICAgICAgICAgIF9f c2Vjb25kQ2hpbGQtLTsKICAgICAgICAqKF9fZmlyc3QgKyBfX2hvbGVJbmRleCkgPSAqKF9fZmly c3QgKyBfX3NlY29uZENoaWxkKTsKICAgICAgICBfX2hvbGVJbmRleCA9IF9fc2Vjb25kQ2hpbGQ7 CiAgICAgICAgX19zZWNvbmRDaGlsZCA9IDIgKiAoX19zZWNvbmRDaGlsZCArIDEpOwogICAgICB9 CiAgICAgIGlmIChfX3NlY29uZENoaWxkID09IF9fbGVuKSB7CiAgICAgICAgKihfX2ZpcnN0ICsg X19ob2xlSW5kZXgpID0gKihfX2ZpcnN0ICsgKF9fc2Vjb25kQ2hpbGQgLSAxKSk7CiAgICAgICAg X19ob2xlSW5kZXggPSBfX3NlY29uZENoaWxkIC0gMTsKICAgICAgfQogICAgICBfX3B1c2hfaGVh cChfX2ZpcnN0LCBfX2hvbGVJbmRleCwgX190b3BJbmRleCwgX192YWx1ZSwgX19jb21wKTsKICAg IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCB0eXBlbmFtZSBf VHAsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgaW5saW5lIHZvaWQKICAgIF9fcG9wX2hlYXAoX1Jh bmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3Qs CiAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX3Jlc3VsdCwgX1RwIF9fdmFs dWUsIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRv cl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlIF9EaXN0YW5j ZTsKICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3Q7CiAgICAgIF9fYWRqdXN0X2hlYXAoX19maXJz dCwgX0Rpc3RhbmNlKDApLCBfRGlzdGFuY2UoX19sYXN0IC0gX19maXJzdCksCiAgICAgICAgICAg ICAgICAgICAgX192YWx1ZSwgX19jb21wKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1Jh bmRvbUFjY2Vzc0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIGlubGluZSB2b2lkCiAg ICBwb3BfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwKICAgICAgICAgICAgIF9S YW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsIF9Db21wYXJlIF9fY29tcCkKICAgIHsKCiAgICAg CgoKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0 ZXJhdG9yPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOwogICAgICBfX3BvcF9oZWFwKF9fZmlyc3Qs IF9fbGFzdCAtIDEsIF9fbGFzdCAtIDEsIF9WYWx1ZVR5cGUoKihfX2xhc3QgLSAxKSksIF9fY29t cCk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvcj4KICAg IHZvaWQKICAgIG1ha2VfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRv bUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVy YXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6dmFsdWVfdHlwZQogICAgICAgICAg X1ZhbHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRv bUFjY2Vzc0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlCiAgICAgICAgICBfRGlzdGFuY2VUeXBl OwoKCiAgICAgCgogICAgIAoKICAgICAgaWYgKF9fbGFzdCAtIF9fZmlyc3QgPCAyKSByZXR1cm47 CiAgICAgIF9EaXN0YW5jZVR5cGUgX19sZW4gPSBfX2xhc3QgLSBfX2ZpcnN0OwogICAgICBfRGlz dGFuY2VUeXBlIF9fcGFyZW50ID0gKF9fbGVuIC0gMikvMjsKCiAgICAgIHdoaWxlICh0cnVlKSB7 CiAgICAgICAgX19hZGp1c3RfaGVhcChfX2ZpcnN0LCBfX3BhcmVudCwgX19sZW4sIF9WYWx1ZVR5 cGUoKihfX2ZpcnN0ICsgX19wYXJlbnQpKSk7CiAgICAgICAgaWYgKF9fcGFyZW50ID09IDApIHJl dHVybjsKICAgICAgICBfX3BhcmVudC0tOwogICAgICB9CiAgICB9CgogIHRlbXBsYXRlPHR5cGVu YW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBpbmxpbmUg dm9pZAogICAgbWFrZV9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfUmFuZG9t QWNjZXNzSXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKICAg IHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0 ZXJhdG9yPjo6dmFsdWVfdHlwZQogICAgICAgICAgX1ZhbHVlVHlwZTsKICAgICAgdHlwZWRlZiB0 eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6ZGlmZmVyZW5j ZV90eXBlCiAgICAgICAgICBfRGlzdGFuY2VUeXBlOwoKCiAgICAgCgoKICAgICAgaWYgKF9fbGFz dCAtIF9fZmlyc3QgPCAyKSByZXR1cm47CiAgICAgIF9EaXN0YW5jZVR5cGUgX19sZW4gPSBfX2xh c3QgLSBfX2ZpcnN0OwogICAgICBfRGlzdGFuY2VUeXBlIF9fcGFyZW50ID0gKF9fbGVuIC0gMikv MjsKCiAgICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgX19hZGp1c3RfaGVhcChfX2ZpcnN0LCBf X3BhcmVudCwgX19sZW4sCiAgICAgICAgICAgICAgICAgICAgICBfVmFsdWVUeXBlKCooX19maXJz dCArIF9fcGFyZW50KSksIF9fY29tcCk7CiAgICAgICAgaWYgKF9fcGFyZW50ID09IDApIHJldHVy bjsKICAgICAgICBfX3BhcmVudC0tOwogICAgICB9CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1l IF9SYW5kb21BY2Nlc3NJdGVyYXRvcj4KICAgIHZvaWQKICAgIHNvcnRfaGVhcChfUmFuZG9tQWNj ZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCkKICAgIHsK CiAgICAgCgogICAgIAoKCiAgICAgIHdoaWxlIChfX2xhc3QgLSBfX2ZpcnN0ID4gMSkKICAgICAg ICBwb3BfaGVhcChfX2ZpcnN0LCBfX2xhc3QtLSk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1l IF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICB2b2lkCiAgICBz b3J0X2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVy YXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQogICAgewoKICAgICAK CgogICAgICB3aGlsZSAoX19sYXN0IC0gX19maXJzdCA+IDEpCiAgICAgICAgcG9wX2hlYXAoX19m aXJzdCwgX19sYXN0LS0sIF9fY29tcCk7CiAgICB9Cgp9CiMgNjUgIi91c3IvaW5jbHVkZS9jKysv My4yLjEvYml0cy9zdGxfYWxnby5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL2Jp dHMvc3RsX3RlbXBidWYuaCIgMSAzCiMgNjQgIi91c3IvaW5jbHVkZS9jKysvMy4yLjEvYml0cy9z dGxfdGVtcGJ1Zi5oIiAzCm5hbWVzcGFjZSBzdGQKewojIDc0ICIvdXNyL2luY2x1ZGUvYysrLzMu Mi4xL2JpdHMvc3RsX3RlbXBidWYuaCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRv ciwgY2xhc3MgX1RwPgogIGNsYXNzIF9UZW1wb3JhcnlfYnVmZmVyCnsKCiAKCiAgcHRyZGlmZl90 IF9NX29yaWdpbmFsX2xlbjsKICBwdHJkaWZmX3QgX01fbGVuOwogIF9UcCogX01fYnVmZmVyOwoK CiAgdm9pZCBfTV9hbGxvY2F0ZV9idWZmZXIoKSB7CiAgICBfTV9vcmlnaW5hbF9sZW4gPSBfTV9s ZW47CiAgICBfTV9idWZmZXIgPSAwOwoKICAgIGlmIChfTV9sZW4gPiAocHRyZGlmZl90KSgyMTQ3 NDgzNjQ3IC8gc2l6ZW9mKF9UcCkpKQogICAgICBfTV9sZW4gPSAyMTQ3NDgzNjQ3IC8gc2l6ZW9m KF9UcCk7CgogICAgd2hpbGUgKF9NX2xlbiA+IDApIHsKICAgICAgX01fYnVmZmVyID0gKF9UcCop IG1hbGxvYyhfTV9sZW4gKiBzaXplb2YoX1RwKSk7CiAgICAgIGlmIChfTV9idWZmZXIpCiAgICAg ICAgYnJlYWs7CiAgICAgIF9NX2xlbiAvPSAyOwogICAgfQogIH0KCiAgdm9pZCBfTV9pbml0aWFs aXplX2J1ZmZlcihjb25zdCBfVHAmLCBfX3RydWVfdHlwZSkge30KICB2b2lkIF9NX2luaXRpYWxp emVfYnVmZmVyKGNvbnN0IF9UcCYgdmFsLCBfX2ZhbHNlX3R5cGUpIHsKICAgIHVuaW5pdGlhbGl6 ZWRfZmlsbF9uKF9NX2J1ZmZlciwgX01fbGVuLCB2YWwpOwogIH0KCnB1YmxpYzoKCiAgcHRyZGlm Zl90IHNpemUoKSBjb25zdCB7IHJldHVybiBfTV9sZW47IH0KCiAgcHRyZGlmZl90IHJlcXVlc3Rl ZF9zaXplKCkgY29uc3QgeyByZXR1cm4gX01fb3JpZ2luYWxfbGVuOyB9CgogIF9UcCogYmVnaW4o KSB7IHJldHVybiBfTV9idWZmZXI7IH0KCiAgX1RwKiBlbmQoKSB7IHJldHVybiBfTV9idWZmZXIg KyBfTV9sZW47IH0KCiAgX1RlbXBvcmFyeV9idWZmZXIoX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0 LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCkgewoKICAgIHR5cGVkZWYgdHlwZW5hbWUgX190eXBl X3RyYWl0czxfVHA+OjpoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yCiAgICAgICAgICAg IF9Ucml2aWFsOwoKICAgIHRyeSB7CiAgICAgIF9NX2xlbiA9IGRpc3RhbmNlKF9fZmlyc3QsIF9f bGFzdCk7CiAgICAgIF9NX2FsbG9jYXRlX2J1ZmZlcigpOwogICAgICBpZiAoX01fbGVuID4gMCkK ICAgICAgICBfTV9pbml0aWFsaXplX2J1ZmZlcigqX19maXJzdCwgX1RyaXZpYWwoKSk7CiAgICB9 CiAgICBjYXRjaCguLi4pCiAgICAgIHsKICAgICAgICBmcmVlKF9NX2J1ZmZlcik7CiAgICAgICAg X01fYnVmZmVyID0gMDsKICAgICAgICBfTV9sZW4gPSAwOwogICAgICAgIHRocm93OwogICAgICB9 CiAgfQoKICB+X1RlbXBvcmFyeV9idWZmZXIoKSB7CiAgICBfRGVzdHJveShfTV9idWZmZXIsIF9N X2J1ZmZlciArIF9NX2xlbik7CiAgICBmcmVlKF9NX2J1ZmZlcik7CiAgfQoKcHJpdmF0ZToKCiAg X1RlbXBvcmFyeV9idWZmZXIoY29uc3QgX1RlbXBvcmFyeV9idWZmZXImKSB7fQogIHZvaWQgb3Bl cmF0b3I9KGNvbnN0IF9UZW1wb3JhcnlfYnVmZmVyJikge30KfTsKCn0KIyA2NiAiL3Vzci9pbmNs dWRlL2MrKy8zLjIuMS9iaXRzL3N0bF9hbGdvLmgiIDIgMwoKCgpuYW1lc3BhY2Ugc3RkCnsKIyA4 NCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfVHA+CiAgaW5saW5lIGNvbnN0IF9UcCYKICAgIF9fbWVkaWFuKGNvbnN0IF9UcCYg X19hLCBjb25zdCBfVHAmIF9fYiwgY29uc3QgX1RwJiBfX2MpCiAgICB7CgogICAgIAogICAgICBp ZiAoX19hIDwgX19iKQogICAgICAgIGlmIChfX2IgPCBfX2MpCiAgICAgICAgICByZXR1cm4gX19i OwogICAgICAgIGVsc2UgaWYgKF9fYSA8IF9fYykKICAgICAgICAgIHJldHVybiBfX2M7CiAgICAg ICAgZWxzZQogICAgICAgICAgcmV0dXJuIF9fYTsKICAgICAgZWxzZSBpZiAoX19hIDwgX19jKQog ICAgICAgIHJldHVybiBfX2E7CiAgICAgIGVsc2UgaWYgKF9fYiA8IF9fYykKICAgICAgICByZXR1 cm4gX19jOwogICAgICBlbHNlCiAgICAgICAgcmV0dXJuIF9fYjsKICAgIH0KIyAxMTggIi91c3Iv aW5jbHVkZS9jKysvMy4yLjEvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUg X1RwLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIGlubGluZSBjb25zdCBfVHAmCiAgICBfX21lZGlh bihjb25zdCBfVHAmIF9fYSwgY29uc3QgX1RwJiBfX2IsIGNvbnN0IF9UcCYgX19jLCBfQ29tcGFy ZSBfX2NvbXApCiAgICB7CgogICAgIAogICAgICBpZiAoX19jb21wKF9fYSwgX19iKSkKICAgICAg ICBpZiAoX19jb21wKF9fYiwgX19jKSkKICAgICAgICAgIHJldHVybiBfX2I7CiAgICAgICAgZWxz ZSBpZiAoX19jb21wKF9fYSwgX19jKSkKICAgICAgICAgIHJldHVybiBfX2M7CiAgICAgICAgZWxz ZQogICAgICAgICAgcmV0dXJuIF9fYTsKICAgICAgZWxzZSBpZiAoX19jb21wKF9fYSwgX19jKSkK ICAgICAgICByZXR1cm4gX19hOwogICAgICBlbHNlIGlmIChfX2NvbXAoX19iLCBfX2MpKQogICAg ICAgIHJldHVybiBfX2M7CiAgICAgIGVsc2UKICAgICAgICByZXR1cm4gX19iOwogICAgfQojIDE1 MCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfRnVuY3Rpb24+CiAgICBfRnVuY3Rpb24KICAg IGZvcl9lYWNoKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsIF9GdW5jdGlv biBfX2YpCiAgICB7CgogICAgIAogICAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19f Zmlyc3QpCiAgICAgICAgX19mKCpfX2ZpcnN0KTsKICAgICAgcmV0dXJuIF9fZjsKICAgIH0KCgoK CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfVHA+CiAgICBpbmxp bmUgX0lucHV0SXRlcgogICAgZmluZChfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19s YXN0LAogICAgICAgICBjb25zdCBfVHAmIF9fdmFsLAogICAgICAgICBpbnB1dF9pdGVyYXRvcl90 YWcpCiAgICB7CiAgICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCAmJiAhKCpfX2ZpcnN0ID09 IF9fdmFsKSkKICAgICAgICArK19fZmlyc3Q7CiAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgfQoK CgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9QcmVkaWNhdGU+ CiAgICBpbmxpbmUgX0lucHV0SXRlcgogICAgZmluZF9pZihfSW5wdXRJdGVyIF9fZmlyc3QsIF9J bnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCwKICAgICAgICAg ICAgaW5wdXRfaXRlcmF0b3JfdGFnKQogICAgewogICAgICB3aGlsZSAoX19maXJzdCAhPSBfX2xh c3QgJiYgIV9fcHJlZCgqX19maXJzdCkpCiAgICAgICAgKytfX2ZpcnN0OwogICAgICByZXR1cm4g X19maXJzdDsKICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRl ciwgdHlwZW5hbWUgX1RwPgogICAgX1JhbmRvbUFjY2Vzc0l0ZXIKICAgIGZpbmQoX1JhbmRvbUFj Y2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICBjb25z dCBfVHAmIF9fdmFsLAogICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykKICAgIHsK ICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6ZGlmZmVy ZW5jZV90eXBlIF9fdHJpcF9jb3VudAogICAgICAgID0gKF9fbGFzdCAtIF9fZmlyc3QpID4+IDI7 CgogICAgICBmb3IgKCA7IF9fdHJpcF9jb3VudCA+IDAgOyAtLV9fdHJpcF9jb3VudCkgewogICAg ICAgIGlmICgqX19maXJzdCA9PSBfX3ZhbCkgcmV0dXJuIF9fZmlyc3Q7CiAgICAgICAgKytfX2Zp cnN0OwoKICAgICAgICBpZiAoKl9fZmlyc3QgPT0gX192YWwpIHJldHVybiBfX2ZpcnN0OwogICAg ICAgICsrX19maXJzdDsKCiAgICAgICAgaWYgKCpfX2ZpcnN0ID09IF9fdmFsKSByZXR1cm4gX19m aXJzdDsKICAgICAgICArK19fZmlyc3Q7CgogICAgICAgIGlmICgqX19maXJzdCA9PSBfX3ZhbCkg cmV0dXJuIF9fZmlyc3Q7CiAgICAgICAgKytfX2ZpcnN0OwogICAgICB9CgogICAgICBzd2l0Y2go X19sYXN0IC0gX19maXJzdCkgewogICAgICBjYXNlIDM6CiAgICAgICAgaWYgKCpfX2ZpcnN0ID09 IF9fdmFsKSByZXR1cm4gX19maXJzdDsKICAgICAgICArK19fZmlyc3Q7CiAgICAgIGNhc2UgMjoK ICAgICAgICBpZiAoKl9fZmlyc3QgPT0gX192YWwpIHJldHVybiBfX2ZpcnN0OwogICAgICAgICsr X19maXJzdDsKICAgICAgY2FzZSAxOgogICAgICAgIGlmICgqX19maXJzdCA9PSBfX3ZhbCkgcmV0 dXJuIF9fZmlyc3Q7CiAgICAgICAgKytfX2ZpcnN0OwogICAgICBjYXNlIDA6CiAgICAgIGRlZmF1 bHQ6CiAgICAgICAgcmV0dXJuIF9fbGFzdDsKICAgICAgfQogICAgfQoKCgoKCgogIHRlbXBsYXRl PHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfUHJlZGljYXRlPgogICAgX1Jh bmRvbUFjY2Vzc0l0ZXIKICAgIGZpbmRfaWYoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1Jh bmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCwKICAg ICAgICAgICAgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpCiAgICB7CiAgICAgIHR5cGVuYW1l IGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OmRpZmZlcmVuY2VfdHlwZSBfX3Ry aXBfY291bnQKICAgICAgICA9IChfX2xhc3QgLSBfX2ZpcnN0KSA+PiAyOwoKICAgICAgZm9yICgg OyBfX3RyaXBfY291bnQgPiAwIDsgLS1fX3RyaXBfY291bnQpIHsKICAgICAgICBpZiAoX19wcmVk KCpfX2ZpcnN0KSkgcmV0dXJuIF9fZmlyc3Q7CiAgICAgICAgKytfX2ZpcnN0OwoKICAgICAgICBp ZiAoX19wcmVkKCpfX2ZpcnN0KSkgcmV0dXJuIF9fZmlyc3Q7CiAgICAgICAgKytfX2ZpcnN0OwoK ICAgICAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkgcmV0dXJuIF9fZmlyc3Q7CiAgICAgICAgKytf X2ZpcnN0OwoKICAgICAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkgcmV0dXJuIF9fZmlyc3Q7CiAg ICAgICAgKytfX2ZpcnN0OwogICAgICB9CgogICAgICBzd2l0Y2goX19sYXN0IC0gX19maXJzdCkg ewogICAgICBjYXNlIDM6CiAgICAgICAgaWYgKF9fcHJlZCgqX19maXJzdCkpIHJldHVybiBfX2Zp cnN0OwogICAgICAgICsrX19maXJzdDsKICAgICAgY2FzZSAyOgogICAgICAgIGlmIChfX3ByZWQo Kl9fZmlyc3QpKSByZXR1cm4gX19maXJzdDsKICAgICAgICArK19fZmlyc3Q7CiAgICAgIGNhc2Ug MToKICAgICAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkgcmV0dXJuIF9fZmlyc3Q7CiAgICAgICAg KytfX2ZpcnN0OwogICAgICBjYXNlIDA6CiAgICAgIGRlZmF1bHQ6CiAgICAgICAgcmV0dXJuIF9f bGFzdDsKICAgICAgfQogICAgfQojIDI4OSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9iaXRzL3N0 bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfVHA+ CiAgICBpbmxpbmUgX0lucHV0SXRlcgogICAgZmluZChfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1 dEl0ZXIgX19sYXN0LAogICAgICAgICBjb25zdCBfVHAmIF9fdmFsKQogICAgewoKICAgICAKICAg ICAKCiAgICAgIHJldHVybiBmaW5kKF9fZmlyc3QsIF9fbGFzdCwgX192YWwsIF9faXRlcmF0b3Jf Y2F0ZWdvcnkoX19maXJzdCkpOwogICAgfQojIDMwOSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9i aXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFt ZSBfUHJlZGljYXRlPgogICAgaW5saW5lIF9JbnB1dEl0ZXIKICAgIGZpbmRfaWYoX0lucHV0SXRl ciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3By ZWQpCiAgICB7CgogICAgIAogICAgIAoKICAgICAgcmV0dXJuIGZpbmRfaWYoX19maXJzdCwgX19s YXN0LCBfX3ByZWQsIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdCkpOwogICAgfQojIDMyOSAi L3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfRm9yd2FyZEl0ZXI+CiAgICBfRm9yd2FyZEl0ZXIKICAgIGFkamFjZW50X2ZpbmQoX0Zv cndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QpCiAgICB7CgogICAgIAogICAg IAoKICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQogICAgICAgIHJldHVybiBfX2xhc3Q7CiAg ICAgIF9Gb3J3YXJkSXRlciBfX25leHQgPSBfX2ZpcnN0OwogICAgICB3aGlsZSgrK19fbmV4dCAh PSBfX2xhc3QpIHsKICAgICAgICBpZiAoKl9fZmlyc3QgPT0gKl9fbmV4dCkKICAgICAgICAgIHJl dHVybiBfX2ZpcnN0OwogICAgICAgIF9fZmlyc3QgPSBfX25leHQ7CiAgICAgIH0KICAgICAgcmV0 dXJuIF9fbGFzdDsKICAgIH0KIyAzNTggIi91c3IvaW5jbHVkZS9jKysvMy4yLjEvYml0cy9zdGxf YWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfQmlu YXJ5UHJlZGljYXRlPgogICAgX0ZvcndhcmRJdGVyCiAgICBhZGphY2VudF9maW5kKF9Gb3J3YXJk SXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICBfQmlu YXJ5UHJlZGljYXRlIF9fYmluYXJ5X3ByZWQpCiAgICB7CgogICAgIAogICAgIAoKCiAgICAgIGlm IChfX2ZpcnN0ID09IF9fbGFzdCkKICAgICAgICByZXR1cm4gX19sYXN0OwogICAgICBfRm9yd2Fy ZEl0ZXIgX19uZXh0ID0gX19maXJzdDsKICAgICAgd2hpbGUoKytfX25leHQgIT0gX19sYXN0KSB7 CiAgICAgICAgaWYgKF9fYmluYXJ5X3ByZWQoKl9fZmlyc3QsICpfX25leHQpKQogICAgICAgICAg cmV0dXJuIF9fZmlyc3Q7CiAgICAgICAgX19maXJzdCA9IF9fbmV4dDsKICAgICAgfQogICAgICBy ZXR1cm4gX19sYXN0OwogICAgfQojIDM4NyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9iaXRzL3N0 bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfVHA+ CiAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcj46OmRpZmZlcmVuY2VfdHlw ZQogICAgY291bnQoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwgY29uc3Qg X1RwJiBfX3ZhbHVlKQogICAgewoKICAgICAKICAgICAKCiAgICAgCiAgICAgIHR5cGVuYW1lIGl0 ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9fbiA9IDA7CiAgICAg IGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKICAgICAgICBpZiAoKl9fZmly c3QgPT0gX192YWx1ZSkKICAgICAgICAgICsrX19uOwogICAgICByZXR1cm4gX19uOwogICAgfQoj IDQxMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfUHJlZGljYXRlPgogICAgdHlwZW5hbWUg aXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+OjpkaWZmZXJlbmNlX3R5cGUKICAgIGNvdW50X2lm KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsIF9QcmVkaWNhdGUgX19wcmVk KQogICAgewoKICAgICAKICAgICAKCiAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5w dXRJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9fbiA9IDA7CiAgICAgIGZvciAoIDsgX19maXJzdCAh PSBfX2xhc3Q7ICsrX19maXJzdCkKICAgICAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkKICAgICAg ICAgICsrX19uOwogICAgICByZXR1cm4gX19uOwogICAgfQojIDQ1MCAiL3Vzci9pbmNsdWRlL2Mr Ky8zLjIuMS9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0 ZXIxLCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXIyPgogICAgX0ZvcndhcmRJdGVyMQogICAgc2VhcmNo KF9Gb3J3YXJkSXRlcjEgX19maXJzdDEsIF9Gb3J3YXJkSXRlcjEgX19sYXN0MSwKICAgICAgICAg ICBfRm9yd2FyZEl0ZXIyIF9fZmlyc3QyLCBfRm9yd2FyZEl0ZXIyIF9fbGFzdDIpCiAgICB7Cgog ICAgIAogICAgIAogICAgIAoKCgoKICAgICAgaWYgKF9fZmlyc3QxID09IF9fbGFzdDEgfHwgX19m aXJzdDIgPT0gX19sYXN0MikKICAgICAgICByZXR1cm4gX19maXJzdDE7CgoKICAgICAgX0Zvcndh cmRJdGVyMiBfX3RtcChfX2ZpcnN0Mik7CiAgICAgICsrX190bXA7CiAgICAgIGlmIChfX3RtcCA9 PSBfX2xhc3QyKQogICAgICAgIHJldHVybiBmaW5kKF9fZmlyc3QxLCBfX2xhc3QxLCAqX19maXJz dDIpOwoKCgogICAgICBfRm9yd2FyZEl0ZXIyIF9fcDEsIF9fcDsKCiAgICAgIF9fcDEgPSBfX2Zp cnN0MjsgKytfX3AxOwoKICAgICAgX0ZvcndhcmRJdGVyMSBfX2N1cnJlbnQgPSBfX2ZpcnN0MTsK CiAgICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxKSB7CiAgICAgICAgX19maXJzdDEgPSBm aW5kKF9fZmlyc3QxLCBfX2xhc3QxLCAqX19maXJzdDIpOwogICAgICAgIGlmIChfX2ZpcnN0MSA9 PSBfX2xhc3QxKQogICAgICAgICAgcmV0dXJuIF9fbGFzdDE7CgogICAgICAgIF9fcCA9IF9fcDE7 CiAgICAgICAgX19jdXJyZW50ID0gX19maXJzdDE7CiAgICAgICAgaWYgKCsrX19jdXJyZW50ID09 IF9fbGFzdDEpCiAgICAgICAgICByZXR1cm4gX19sYXN0MTsKCiAgICAgICAgd2hpbGUgKCpfX2N1 cnJlbnQgPT0gKl9fcCkgewogICAgICAgICAgaWYgKCsrX19wID09IF9fbGFzdDIpCiAgICAgICAg ICAgIHJldHVybiBfX2ZpcnN0MTsKICAgICAgICAgIGlmICgrK19fY3VycmVudCA9PSBfX2xhc3Qx KQogICAgICAgICAgICByZXR1cm4gX19sYXN0MTsKICAgICAgICB9CgogICAgICAgICsrX19maXJz dDE7CiAgICAgIH0KICAgICAgcmV0dXJuIF9fZmlyc3QxOwogICAgfQojIDUyMiAiL3Vzci9pbmNs dWRlL2MrKy8zLjIuMS9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9y d2FyZEl0ZXIxLCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXIyLCB0eXBlbmFtZSBfQmluYXJ5UHJlZD4K ICAgIF9Gb3J3YXJkSXRlcjEKICAgIHNlYXJjaChfRm9yd2FyZEl0ZXIxIF9fZmlyc3QxLCBfRm9y d2FyZEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgX0ZvcndhcmRJdGVyMiBfX2ZpcnN0MiwgX0Zv cndhcmRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgIF9CaW5hcnlQcmVkIF9fcHJlZGljYXRlKQog ICAgewoKICAgICAKICAgICAKICAgICAKCgoKCiAgICAgIGlmIChfX2ZpcnN0MSA9PSBfX2xhc3Qx IHx8IF9fZmlyc3QyID09IF9fbGFzdDIpCiAgICAgICAgcmV0dXJuIF9fZmlyc3QxOwoKCiAgICAg IF9Gb3J3YXJkSXRlcjIgX190bXAoX19maXJzdDIpOwogICAgICArK19fdG1wOwogICAgICBpZiAo X190bXAgPT0gX19sYXN0MikgewogICAgICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYm ICFfX3ByZWRpY2F0ZSgqX19maXJzdDEsICpfX2ZpcnN0MikpCiAgICAgICAgICArK19fZmlyc3Qx OwogICAgICAgIHJldHVybiBfX2ZpcnN0MTsKICAgICAgfQoKCgogICAgICBfRm9yd2FyZEl0ZXIy IF9fcDEsIF9fcDsKCiAgICAgIF9fcDEgPSBfX2ZpcnN0MjsgKytfX3AxOwoKICAgICAgX0Zvcndh cmRJdGVyMSBfX2N1cnJlbnQgPSBfX2ZpcnN0MTsKCiAgICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBf X2xhc3QxKSB7CiAgICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEpIHsKICAgICAgICAg IGlmIChfX3ByZWRpY2F0ZSgqX19maXJzdDEsICpfX2ZpcnN0MikpCiAgICAgICAgICAgIGJyZWFr OwogICAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgICB9CiAgICAgICAgd2hpbGUgKF9fZmlyc3Qx ICE9IF9fbGFzdDEgJiYgIV9fcHJlZGljYXRlKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkKICAgICAg ICAgICsrX19maXJzdDE7CiAgICAgICAgaWYgKF9fZmlyc3QxID09IF9fbGFzdDEpCiAgICAgICAg ICByZXR1cm4gX19sYXN0MTsKCiAgICAgICAgX19wID0gX19wMTsKICAgICAgICBfX2N1cnJlbnQg PSBfX2ZpcnN0MTsKICAgICAgICBpZiAoKytfX2N1cnJlbnQgPT0gX19sYXN0MSkgcmV0dXJuIF9f bGFzdDE7CgogICAgICAgIHdoaWxlIChfX3ByZWRpY2F0ZSgqX19jdXJyZW50LCAqX19wKSkgewog ICAgICAgICAgaWYgKCsrX19wID09IF9fbGFzdDIpCiAgICAgICAgICAgIHJldHVybiBfX2ZpcnN0 MTsKICAgICAgICAgIGlmICgrK19fY3VycmVudCA9PSBfX2xhc3QxKQogICAgICAgICAgICByZXR1 cm4gX19sYXN0MTsKICAgICAgICB9CgogICAgICAgICsrX19maXJzdDE7CiAgICAgIH0KICAgICAg cmV0dXJuIF9fZmlyc3QxOwogICAgfQojIDU5NiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9iaXRz L3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1l IF9JbnRlZ2VyLCB0eXBlbmFtZSBfVHA+CiAgICBfRm9yd2FyZEl0ZXIKICAgIHNlYXJjaF9uKF9G b3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgX0lu dGVnZXIgX19jb3VudCwgY29uc3QgX1RwJiBfX3ZhbCkKICAgIHsKCiAgICAgCiAgICAgCgogICAg IAoKICAgICAgaWYgKF9fY291bnQgPD0gMCkKICAgICAgICByZXR1cm4gX19maXJzdDsKICAgICAg ZWxzZSB7CiAgICAgICAgX19maXJzdCA9IGZpbmQoX19maXJzdCwgX19sYXN0LCBfX3ZhbCk7CiAg ICAgICAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KSB7CiAgICAgICAgICBfSW50ZWdlciBfX24g PSBfX2NvdW50IC0gMTsKICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX2kgPSBfX2ZpcnN0OwogICAg ICAgICAgKytfX2k7CiAgICAgICAgICB3aGlsZSAoX19pICE9IF9fbGFzdCAmJiBfX24gIT0gMCAm JiAqX19pID09IF9fdmFsKSB7CiAgICAgICAgICAgICsrX19pOwogICAgICAgICAgICAtLV9fbjsK ICAgICAgICAgIH0KICAgICAgICAgIGlmIChfX24gPT0gMCkKICAgICAgICAgICAgcmV0dXJuIF9f Zmlyc3Q7CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIF9fZmlyc3QgPSBmaW5kKF9faSwgX19s YXN0LCBfX3ZhbCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBfX2xhc3Q7CiAgICAgIH0KICAg IH0KIyA2NDMgIi91c3IvaW5jbHVkZS9jKysvMy4yLjEvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfSW50ZWdlciwgdHlwZW5hbWUg X1RwLAogICAgICAgICAgIHR5cGVuYW1lIF9CaW5hcnlQcmVkPgogICAgX0ZvcndhcmRJdGVyCiAg ICBzZWFyY2hfbihfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAg ICAgICAgICAgIF9JbnRlZ2VyIF9fY291bnQsIGNvbnN0IF9UcCYgX192YWwsCiAgICAgICAgICAg ICBfQmluYXJ5UHJlZCBfX2JpbmFyeV9wcmVkKQogICAgewoKICAgICAKICAgICAKCgogICAgICBp ZiAoX19jb3VudCA8PSAwKQogICAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgICBlbHNlIHsKICAg ICAgICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAgICAgICAgIGlmIChfX2JpbmFyeV9w cmVkKCpfX2ZpcnN0LCBfX3ZhbCkpCiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgKytfX2Zp cnN0OwogICAgICAgIH0KICAgICAgICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAgICAg ICAgIF9JbnRlZ2VyIF9fbiA9IF9fY291bnQgLSAxOwogICAgICAgICAgX0ZvcndhcmRJdGVyIF9f aSA9IF9fZmlyc3Q7CiAgICAgICAgICArK19faTsKICAgICAgICAgIHdoaWxlIChfX2kgIT0gX19s YXN0ICYmIF9fbiAhPSAwICYmIF9fYmluYXJ5X3ByZWQoKl9faSwgX192YWwpKSB7CiAgICAgICAg ICAgICsrX19pOwogICAgICAgICAgICAtLV9fbjsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChf X24gPT0gMCkKICAgICAgICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICAgICAgICBlbHNlIHsKICAg ICAgICAgICAgd2hpbGUgKF9faSAhPSBfX2xhc3QpIHsKICAgICAgICAgICAgICBpZiAoX19iaW5h cnlfcHJlZCgqX19pLCBfX3ZhbCkpCiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg ICArK19faTsKICAgICAgICAgICAgfQogICAgICAgICAgICBfX2ZpcnN0ID0gX19pOwogICAgICAg ICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gX19sYXN0OwogICAgICB9CiAgICB9CiMgNjk3 ICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5 cGVuYW1lIF9Gb3J3YXJkSXRlcjEsIHR5cGVuYW1lIF9Gb3J3YXJkSXRlcjI+CiAgICBfRm9yd2Fy ZEl0ZXIyCiAgICBzd2FwX3JhbmdlcyhfRm9yd2FyZEl0ZXIxIF9fZmlyc3QxLCBfRm9yd2FyZEl0 ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIyIF9fZmlyc3QyKQogICAg ewoKICAgICAKICAgICAKICAgICAKCgogICAgIAoKCgogICAgICBmb3IgKCA7IF9fZmlyc3QxICE9 IF9fbGFzdDE7ICsrX19maXJzdDEsICsrX19maXJzdDIpCiAgICAgICAgaXRlcl9zd2FwKF9fZmly c3QxLCBfX2ZpcnN0Mik7CiAgICAgIHJldHVybiBfX2ZpcnN0MjsKICAgIH0KIyA3MzIgIi91c3Iv aW5jbHVkZS9jKysvMy4yLjEvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUg X0lucHV0SXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXIsIHR5cGVuYW1lIF9VbmFyeU9wZXJhdGlv bj4KICAgIF9PdXRwdXRJdGVyCiAgICB0cmFuc2Zvcm0oX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5w dXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX1VuYXJ5 T3BlcmF0aW9uIF9fdW5hcnlfb3ApCiAgICB7CgogICAgIAogICAgIAoKCgogICAgICBmb3IgKCA7 IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QsICsrX19yZXN1bHQpCiAgICAgICAgKl9fcmVz dWx0ID0gX191bmFyeV9vcCgqX19maXJzdCk7CiAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgIH0K IyA3NjUgIi91c3IvaW5jbHVkZS9jKysvMy4yLjEvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0lucHV0SXRlcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXIyLCB0eXBlbmFtZSBf T3V0cHV0SXRlciwKICAgICAgICAgICB0eXBlbmFtZSBfQmluYXJ5T3BlcmF0aW9uPgogICAgX091 dHB1dEl0ZXIKICAgIHRyYW5zZm9ybShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEg X19sYXN0MSwKICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX091dHB1dEl0ZXIg X19yZXN1bHQsCiAgICAgICAgICAgICAgX0JpbmFyeU9wZXJhdGlvbiBfX2JpbmFyeV9vcCkKICAg IHsKCiAgICAgCiAgICAgCiAgICAgCgoKCiAgICAgIGZvciAoIDsgX19maXJzdDEgIT0gX19sYXN0 MTsgKytfX2ZpcnN0MSwgKytfX2ZpcnN0MiwgKytfX3Jlc3VsdCkKICAgICAgICAqX19yZXN1bHQg PSBfX2JpbmFyeV9vcCgqX19maXJzdDEsICpfX2ZpcnN0Mik7CiAgICAgIHJldHVybiBfX3Jlc3Vs dDsKICAgIH0KIyA3OTYgIi91c3IvaW5jbHVkZS9jKysvMy4yLjEvYml0cy9zdGxfYWxnby5oIiAz CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfVHA+CiAgICB2b2lk CiAgICByZXBsYWNlKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAog ICAgICAgICAgICBjb25zdCBfVHAmIF9fb2xkX3ZhbHVlLCBjb25zdCBfVHAmIF9fbmV3X3ZhbHVl KQogICAgewoKICAgICAKICAgICAKCiAgICAgCgoKICAgICAgZm9yICggOyBfX2ZpcnN0ICE9IF9f bGFzdDsgKytfX2ZpcnN0KQogICAgICAgIGlmICgqX19maXJzdCA9PSBfX29sZF92YWx1ZSkKICAg ICAgICAgICpfX2ZpcnN0ID0gX19uZXdfdmFsdWU7CiAgICB9CiMgODI1ICIvdXNyL2luY2x1ZGUv YysrLzMuMi4xL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJk SXRlciwgdHlwZW5hbWUgX1ByZWRpY2F0ZSwgdHlwZW5hbWUgX1RwPgogICAgdm9pZAogICAgcmVw bGFjZV9pZihfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAg ICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQsIGNvbnN0IF9UcCYgX19uZXdfdmFsdWUpCiAgICB7 CgogICAgIAogICAgIAoKICAgICAKCgogICAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyAr K19fZmlyc3QpCiAgICAgICAgaWYgKF9fcHJlZCgqX19maXJzdCkpCiAgICAgICAgICAqX19maXJz dCA9IF9fbmV3X3ZhbHVlOwogICAgfQojIDg1NiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9iaXRz L3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBf T3V0cHV0SXRlciwgdHlwZW5hbWUgX1RwPgogICAgX091dHB1dEl0ZXIKICAgIHJlcGxhY2VfY29w eShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAg IF9PdXRwdXRJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX19vbGRf dmFsdWUsIGNvbnN0IF9UcCYgX19uZXdfdmFsdWUpCiAgICB7CgogICAgIAogICAgIAoKICAgICAK CgogICAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QsICsrX19yZXN1bHQp CiAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QgPT0gX19vbGRfdmFsdWUgPyBfX25ld192YWx1 ZSA6ICpfX2ZpcnN0OwogICAgICByZXR1cm4gX19yZXN1bHQ7CiAgICB9CiMgODg4ICIvdXNyL2lu Y2x1ZGUvYysrLzMuMi4xL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9J bnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyLCB0eXBlbmFtZSBfUHJlZGljYXRlLAogICAg ICAgICAgIHR5cGVuYW1lIF9UcD4KICAgIF9PdXRwdXRJdGVyCiAgICByZXBsYWNlX2NvcHlfaWYo X0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAg ICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICBfUHJlZGljYXRlIF9f cHJlZCwgY29uc3QgX1RwJiBfX25ld192YWx1ZSkKICAgIHsKCiAgICAgCiAgICAgCgogICAgIAoK CiAgICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCwgKytfX3Jlc3VsdCkK ICAgICAgICAqX19yZXN1bHQgPSBfX3ByZWQoKl9fZmlyc3QpID8gX19uZXdfdmFsdWUgOiAqX19m aXJzdDsKICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAgfQojIDkxOCAiL3Vzci9pbmNsdWRlL2Mr Ky8zLjIuMS9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0 ZXIsIHR5cGVuYW1lIF9HZW5lcmF0b3I+CiAgICB2b2lkCiAgICBnZW5lcmF0ZShfRm9yd2FyZEl0 ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwgX0dlbmVyYXRvciBfX2dlbikKICAgIHsK CiAgICAgCiAgICAgCgoKICAgICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0 KQogICAgICAgICpfX2ZpcnN0ID0gX19nZW4oKTsKICAgIH0KIyA5NDIgIi91c3IvaW5jbHVkZS9j KysvMy4yLjEvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX091dHB1dEl0 ZXIsIHR5cGVuYW1lIF9TaXplLCB0eXBlbmFtZSBfR2VuZXJhdG9yPgogICAgX091dHB1dEl0ZXIK ICAgIGdlbmVyYXRlX24oX091dHB1dEl0ZXIgX19maXJzdCwgX1NpemUgX19uLCBfR2VuZXJhdG9y IF9fZ2VuKQogICAgewoKICAgICAKCgoKICAgICAgZm9yICggOyBfX24gPiAwOyAtLV9fbiwgKytf X2ZpcnN0KQogICAgICAgICpfX2ZpcnN0ID0gX19nZW4oKTsKICAgICAgcmV0dXJuIF9fZmlyc3Q7 CiAgICB9CiMgOTY5ICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL2JpdHMvc3RsX2FsZ28uaCIgMwog IHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyLCB0eXBl bmFtZSBfVHA+CiAgICBfT3V0cHV0SXRlcgogICAgcmVtb3ZlX2NvcHkoX0lucHV0SXRlciBfX2Zp cnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVz dWx0LCBjb25zdCBfVHAmIF9fdmFsdWUpCiAgICB7CgogICAgIAogICAgIAoKICAgICAKCgogICAg ICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAgICAgICAgaWYgKCEoKl9f Zmlyc3QgPT0gX192YWx1ZSkpIHsKICAgICAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0OwogICAg ICAgICAgKytfX3Jlc3VsdDsKICAgICAgICB9CiAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgIH0K IyAxMDAzICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBs YXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyLCB0eXBlbmFtZSBf UHJlZGljYXRlPgogICAgX091dHB1dEl0ZXIKICAgIHJlbW92ZV9jb3B5X2lmKF9JbnB1dEl0ZXIg X19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRl ciBfX3Jlc3VsdCwgX1ByZWRpY2F0ZSBfX3ByZWQpCiAgICB7CgogICAgIAogICAgIAoKICAgICAK CgogICAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAgICAgICAgaWYg KCFfX3ByZWQoKl9fZmlyc3QpKSB7CiAgICAgICAgICAqX19yZXN1bHQgPSAqX19maXJzdDsKICAg ICAgICAgICsrX19yZXN1bHQ7CiAgICAgICAgfQogICAgICByZXR1cm4gX19yZXN1bHQ7CiAgICB9 CiMgMTAzOSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9UcD4KICAgIF9Gb3J3YXJkSXRl cgogICAgcmVtb3ZlKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAog ICAgICAgICAgIGNvbnN0IF9UcCYgX192YWx1ZSkKICAgIHsKCiAgICAgCiAgICAgCgogICAgIAoK CiAgICAgIF9fZmlyc3QgPSBmaW5kKF9fZmlyc3QsIF9fbGFzdCwgX192YWx1ZSk7CiAgICAgIF9G b3J3YXJkSXRlciBfX2kgPSBfX2ZpcnN0OwogICAgICByZXR1cm4gX19maXJzdCA9PSBfX2xhc3Qg PyBfX2ZpcnN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHJlbW92ZV9jb3B5KCsr X19pLCBfX2xhc3QsIF9fZmlyc3QsIF9fdmFsdWUpOwogICAgfQojIDEwNzMgIi91c3IvaW5jbHVk ZS9jKysvMy4yLjEvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0Zvcndh cmRJdGVyLCB0eXBlbmFtZSBfUHJlZGljYXRlPgogICAgX0ZvcndhcmRJdGVyCiAgICByZW1vdmVf aWYoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAg ICAgX1ByZWRpY2F0ZSBfX3ByZWQpCiAgICB7CgogICAgIAogICAgIAoKCiAgICAgIF9fZmlyc3Qg PSBmaW5kX2lmKF9fZmlyc3QsIF9fbGFzdCwgX19wcmVkKTsKICAgICAgX0ZvcndhcmRJdGVyIF9f aSA9IF9fZmlyc3Q7CiAgICAgIHJldHVybiBfX2ZpcnN0ID09IF9fbGFzdCA/IF9fZmlyc3QKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogcmVtb3ZlX2NvcHlfaWYoKytfX2ksIF9fbGFz dCwgX19maXJzdCwgX19wcmVkKTsKICAgIH0KCgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lu cHV0SXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXI+CiAgICBfT3V0cHV0SXRlcgogICAgX191bmlx dWVfY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAg ICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgb3V0cHV0X2l0 ZXJhdG9yX3RhZykKICAgIHsKCiAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJ dGVyPjo6dmFsdWVfdHlwZSBfX3ZhbHVlID0gKl9fZmlyc3Q7CiAgICAgICpfX3Jlc3VsdCA9IF9f dmFsdWU7CiAgICAgIHdoaWxlICgrK19fZmlyc3QgIT0gX19sYXN0KQogICAgICAgIGlmICghKF9f dmFsdWUgPT0gKl9fZmlyc3QpKSB7CiAgICAgICAgICBfX3ZhbHVlID0gKl9fZmlyc3Q7CiAgICAg ICAgICAqKytfX3Jlc3VsdCA9IF9fdmFsdWU7CiAgICAgICAgfQogICAgICByZXR1cm4gKytfX3Jl c3VsdDsKICAgIH0KCgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5h bWUgX0ZvcndhcmRJdGVyPgogICAgX0ZvcndhcmRJdGVyCiAgICBfX3VuaXF1ZV9jb3B5KF9JbnB1 dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgIF9Gb3J3 YXJkSXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRvcl90YWcp CiAgICB7CgogICAgICAqX19yZXN1bHQgPSAqX19maXJzdDsKICAgICAgd2hpbGUgKCsrX19maXJz dCAhPSBfX2xhc3QpCiAgICAgICAgaWYgKCEoKl9fcmVzdWx0ID09ICpfX2ZpcnN0KSkKICAgICAg ICAgICorK19fcmVzdWx0ID0gKl9fZmlyc3Q7CiAgICAgIHJldHVybiArK19fcmVzdWx0OwogICAg fQojIDExNDUgIi91c3IvaW5jbHVkZS9jKysvMy4yLjEvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXI+CiAgICBpbmxp bmUgX091dHB1dEl0ZXIKICAgIHVuaXF1ZV9jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0 SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCkKICAgIHsK CiAgICAgCiAgICAgCgogICAgIAoKCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJh aXRzPF9PdXRwdXRJdGVyPjo6aXRlcmF0b3JfY2F0ZWdvcnkgX0l0ZXJUeXBlOwoKICAgICAgaWYg KF9fZmlyc3QgPT0gX19sYXN0KSByZXR1cm4gX19yZXN1bHQ7CiAgICAgIHJldHVybiBfX3VuaXF1 ZV9jb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQsIF9JdGVyVHlwZSgpKTsKICAgIH0KIyAx MTcwICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRl PHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyLCB0eXBlbmFtZSBfQmlu YXJ5UHJlZGljYXRlPgogICAgX091dHB1dEl0ZXIKICAgIF9fdW5pcXVlX2NvcHkoX0lucHV0SXRl ciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgX091dHB1dEl0 ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgIF9CaW5hcnlQcmVkaWNhdGUgX19iaW5hcnlf cHJlZCwKICAgICAgICAgICAgICAgICAgb3V0cHV0X2l0ZXJhdG9yX3RhZykKICAgIHsKCiAgICAg CgoKCiAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyPjo6dmFsdWVfdHlw ZSBfX3ZhbHVlID0gKl9fZmlyc3Q7CiAgICAgICpfX3Jlc3VsdCA9IF9fdmFsdWU7CiAgICAgIHdo aWxlICgrK19fZmlyc3QgIT0gX19sYXN0KQogICAgICAgIGlmICghX19iaW5hcnlfcHJlZChfX3Zh bHVlLCAqX19maXJzdCkpIHsKICAgICAgICAgIF9fdmFsdWUgPSAqX19maXJzdDsKICAgICAgICAg ICorK19fcmVzdWx0ID0gX192YWx1ZTsKICAgICAgICB9CiAgICAgIHJldHVybiArK19fcmVzdWx0 OwogICAgfQojIDExOTkgIi91c3IvaW5jbHVkZS9jKysvMy4yLjEvYml0cy9zdGxfYWxnby5oIiAz CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0 eXBlbmFtZSBfQmluYXJ5UHJlZGljYXRlPgogICAgX0ZvcndhcmRJdGVyCiAgICBfX3VuaXF1ZV9j b3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAg ICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgX0JpbmFyeVByZWRp Y2F0ZSBfX2JpbmFyeV9wcmVkLAogICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3Rh ZykKICAgIHsKCiAgICAgCgoKCiAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0OwogICAgICB3aGls ZSAoKytfX2ZpcnN0ICE9IF9fbGFzdCkKICAgICAgICBpZiAoIV9fYmluYXJ5X3ByZWQoKl9fcmVz dWx0LCAqX19maXJzdCkpICorK19fcmVzdWx0ID0gKl9fZmlyc3Q7CiAgICAgIHJldHVybiArK19f cmVzdWx0OwogICAgfQojIDEyMzIgIi91c3IvaW5jbHVkZS9jKysvMy4yLjEvYml0cy9zdGxfYWxn by5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX091dHB1dEl0 ZXIsIHR5cGVuYW1lIF9CaW5hcnlQcmVkaWNhdGU+CiAgICBpbmxpbmUgX091dHB1dEl0ZXIKICAg IHVuaXF1ZV9jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAg ICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgIF9CaW5hcnlQ cmVkaWNhdGUgX19iaW5hcnlfcHJlZCkKICAgIHsKCiAgICAgCiAgICAgCgoKICAgICAgdHlwZWRl ZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X091dHB1dEl0ZXI+OjppdGVyYXRvcl9jYXRlZ29y eSBfSXRlclR5cGU7CgogICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpIHJldHVybiBfX3Jlc3Vs dDsKICAgICAgcmV0dXJuIF9fdW5pcXVlX2NvcHkoX19maXJzdCwgX19sYXN0LApfX3Jlc3VsdCwg X19iaW5hcnlfcHJlZCwgX0l0ZXJUeXBlKCkpOwogICAgfQojIDEyNjMgIi91c3IvaW5jbHVkZS9j KysvMy4yLjEvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJ dGVyPgogICAgX0ZvcndhcmRJdGVyCiAgICB1bmlxdWUoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9G b3J3YXJkSXRlciBfX2xhc3QpCiAgICB7CgogICAgICAgICAKICAgICAgICAgCgoKICAgICAgICAg IF9fZmlyc3QgPSBhZGphY2VudF9maW5kKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgICAgICByZXR1 cm4gdW5pcXVlX2NvcHkoX19maXJzdCwgX19sYXN0LCBfX2ZpcnN0KTsKICAgIH0KIyAxMjkwICIv dXNyL2luY2x1ZGUvYysrLzMuMi4xL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVu YW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX0JpbmFyeVByZWRpY2F0ZT4KICAgIF9Gb3J3YXJk SXRlcgogICAgdW5pcXVlKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0 LAogICAgICAgICAgIF9CaW5hcnlQcmVkaWNhdGUgX19iaW5hcnlfcHJlZCkKICAgIHsKCiAgICAg CiAgICAgCgoKCiAgICAgIF9fZmlyc3QgPSBhZGphY2VudF9maW5kKF9fZmlyc3QsIF9fbGFzdCwg X19iaW5hcnlfcHJlZCk7CiAgICAgIHJldHVybiB1bmlxdWVfY29weShfX2ZpcnN0LCBfX2xhc3Qs IF9fZmlyc3QsIF9fYmluYXJ5X3ByZWQpOwogICAgfQoKCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQmlkaXJlY3Rpb25hbEl0ZXI+CiAgICB2b2lkCiAgICBfX3JldmVyc2UoX0JpZGlyZWN0aW9u YWxJdGVyIF9fZmlyc3QsIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcpCiAgICB7CiAgICAgICAgICB3 aGlsZSAodHJ1ZSkKICAgICAgICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0IHx8IF9fZmlyc3Qg PT0gLS1fX2xhc3QpCiAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgZWxzZQog ICAgICAgICAgICAgICAgICBpdGVyX3N3YXAoX19maXJzdCsrLCBfX2xhc3QpOwogICAgfQoKCgoK CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcj4KICAgIHZvaWQKICAgIF9f cmV2ZXJzZShfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xh c3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcp CiAgICB7CiAgICAgICAgICB3aGlsZSAoX19maXJzdCA8IF9fbGFzdCkKICAgICAgICAgICAgaXRl cl9zd2FwKF9fZmlyc3QrKywgLS1fX2xhc3QpOwogICAgfQojIDEzNDkgIi91c3IvaW5jbHVkZS9j KysvMy4yLjEvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0 aW9uYWxJdGVyPgogICAgaW5saW5lIHZvaWQKICAgIHJldmVyc2UoX0JpZGlyZWN0aW9uYWxJdGVy IF9fZmlyc3QsIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QpCiAgICB7CgogICAgICAgICAKCiAg ICAgICAgICBfX3JldmVyc2UoX19maXJzdCwgX19sYXN0LCBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9f Zmlyc3QpKTsKICAgIH0KIyAxMzc0ICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL2JpdHMvc3RsX2Fs Z28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlciwgdHlwZW5hbWUg X091dHB1dEl0ZXI+CiAgICBfT3V0cHV0SXRlcgogICAgcmV2ZXJzZV9jb3B5KF9CaWRpcmVjdGlv bmFsSXRlciBfX2ZpcnN0LCBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0LAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0KQogICAgewoKICAgICAKICAgICAK CgogICAgICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAgICAgICAtLV9fbGFzdDsKICAg ICAgICAqX19yZXN1bHQgPSAqX19sYXN0OwogICAgICAgICsrX19yZXN1bHQ7CiAgICAgIH0KICAg ICAgcmV0dXJuIF9fcmVzdWx0OwogICAgfQojIDEzOTkgIi91c3IvaW5jbHVkZS9jKysvMy4yLjEv Yml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0V1Y2xpZGVhblJpbmdFbGVt ZW50PgogICAgX0V1Y2xpZGVhblJpbmdFbGVtZW50CiAgICBfX2djZChfRXVjbGlkZWFuUmluZ0Vs ZW1lbnQgX19tLCBfRXVjbGlkZWFuUmluZ0VsZW1lbnQgX19uKQogICAgewogICAgICB3aGlsZSAo X19uICE9IDApIHsKICAgICAgICBfRXVjbGlkZWFuUmluZ0VsZW1lbnQgX190ID0gX19tICUgX19u OwogICAgICAgIF9fbSA9IF9fbjsKICAgICAgICBfX24gPSBfX3Q7CiAgICAgIH0KICAgICAgcmV0 dXJuIF9fbTsKICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXI+CiAg ICB2b2lkCiAgICBfX3JvdGF0ZShfRm9yd2FyZEl0ZXIgX19maXJzdCwKICAgICAgICAgICAgIF9G b3J3YXJkSXRlciBfX21pZGRsZSwKICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAg ICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRvcl90YWcpCiAgICB7CiAgICAgIGlmICgoX19maXJz dCA9PSBfX21pZGRsZSkgfHwgKF9fbGFzdCA9PSBfX21pZGRsZSkpCiAgICAgICAgcmV0dXJuOwoK ICAgICAgX0ZvcndhcmRJdGVyIF9fZmlyc3QyID0gX19taWRkbGU7CiAgICAgIGRvIHsKICAgICAg ICBzd2FwKCpfX2ZpcnN0KyssICpfX2ZpcnN0MisrKTsKICAgICAgICBpZiAoX19maXJzdCA9PSBf X21pZGRsZSkKICAgICAgICAgIF9fbWlkZGxlID0gX19maXJzdDI7CiAgICAgIH0gd2hpbGUgKF9f Zmlyc3QyICE9IF9fbGFzdCk7CgogICAgICBfX2ZpcnN0MiA9IF9fbWlkZGxlOwoKICAgICAgd2hp bGUgKF9fZmlyc3QyICE9IF9fbGFzdCkgewogICAgICAgIHN3YXAoKl9fZmlyc3QrKywgKl9fZmly c3QyKyspOwogICAgICAgIGlmIChfX2ZpcnN0ID09IF9fbWlkZGxlKQogICAgICAgICAgX19taWRk bGUgPSBfX2ZpcnN0MjsKICAgICAgICBlbHNlIGlmIChfX2ZpcnN0MiA9PSBfX2xhc3QpCiAgICAg ICAgICBfX2ZpcnN0MiA9IF9fbWlkZGxlOwogICAgICB9CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyPgogICAgdm9pZAogICAgX19yb3RhdGUoX0JpZGly ZWN0aW9uYWxJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19t aWRkbGUsCiAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0LAogICAgICAgICAg ICAgIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnKQogICAgewoKICAgICAKCgogICAgICBpZiAo KF9fZmlyc3QgPT0gX19taWRkbGUpIHx8IChfX2xhc3QgPT0gX19taWRkbGUpKQogICAgICAgIHJl dHVybjsKCiAgICAgIF9fcmV2ZXJzZShfX2ZpcnN0LCBfX21pZGRsZSwgYmlkaXJlY3Rpb25hbF9p dGVyYXRvcl90YWcoKSk7CiAgICAgIF9fcmV2ZXJzZShfX21pZGRsZSwgX19sYXN0LCBiaWRpcmVj dGlvbmFsX2l0ZXJhdG9yX3RhZygpKTsKCiAgICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbWlkZGxl ICYmIF9fbWlkZGxlICE9IF9fbGFzdCkKICAgICAgICBzd2FwICgqX19maXJzdCsrLCAqLS1fX2xh c3QpOwoKICAgICAgaWYgKF9fZmlyc3QgPT0gX19taWRkbGUpIHsKICAgICAgICBfX3JldmVyc2Uo X19taWRkbGUsIF9fbGFzdCwgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcoKSk7CiAgICAgIH0K ICAgICAgZWxzZSB7CiAgICAgICAgX19yZXZlcnNlKF9fZmlyc3QsIF9fbWlkZGxlLCBiaWRpcmVj dGlvbmFsX2l0ZXJhdG9yX3RhZygpKTsKICAgICAgfQogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyPgogICAgdm9pZAogICAgX19yb3RhdGUoX1JhbmRvbUFj Y2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbWlkZGxl LAogICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgcmFu ZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpCiAgICB7CgogICAgIAoKCiAgICAgIGlmICgoX19maXJz dCA9PSBfX21pZGRsZSkgfHwgKF9fbGFzdCA9PSBfX21pZGRsZSkpCiAgICAgICAgcmV0dXJuOwoK ICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+ OjpkaWZmZXJlbmNlX3R5cGUgX0Rpc3RhbmNlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJh dG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKCiAg ICAgIF9EaXN0YW5jZSBfX24gPSBfX2xhc3QgLSBfX2ZpcnN0OwogICAgICBfRGlzdGFuY2UgX19r ID0gX19taWRkbGUgLSBfX2ZpcnN0OwogICAgICBfRGlzdGFuY2UgX19sID0gX19uIC0gX19rOwoK ICAgICAgaWYgKF9fayA9PSBfX2wpIHsKICAgICAgICBzd2FwX3JhbmdlcyhfX2ZpcnN0LCBfX21p ZGRsZSwgX19taWRkbGUpOwogICAgICAgIHJldHVybjsKICAgICAgfQoKICAgICAgX0Rpc3RhbmNl IF9fZCA9IF9fZ2NkKF9fbiwgX19rKTsKCiAgICAgIGZvciAoX0Rpc3RhbmNlIF9faSA9IDA7IF9f aSA8IF9fZDsgX19pKyspIHsKICAgICAgICBfVmFsdWVUeXBlIF9fdG1wID0gKl9fZmlyc3Q7CiAg ICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19wID0gX19maXJzdDsKCiAgICAgICAgaWYgKF9fayA8 IF9fbCkgewogICAgICAgICAgZm9yIChfRGlzdGFuY2UgX19qID0gMDsgX19qIDwgX19sL19fZDsg X19qKyspIHsKICAgICAgICAgICAgaWYgKF9fcCA+IF9fZmlyc3QgKyBfX2wpIHsKICAgICAgICAg ICAgICAqX19wID0gKihfX3AgLSBfX2wpOwogICAgICAgICAgICAgIF9fcCAtPSBfX2w7CiAgICAg ICAgICAgIH0KCiAgICAgICAgICAgICpfX3AgPSAqKF9fcCArIF9fayk7CiAgICAgICAgICAgIF9f cCArPSBfX2s7CiAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBlbHNlIHsKICAgICAgICAg IGZvciAoX0Rpc3RhbmNlIF9faiA9IDA7IF9faiA8IF9fay9fX2QgLSAxOyBfX2ogKyspIHsKICAg ICAgICAgICAgaWYgKF9fcCA8IF9fbGFzdCAtIF9faykgewogICAgICAgICAgICAgICpfX3AgPSAq KF9fcCArIF9fayk7CiAgICAgICAgICAgICAgX19wICs9IF9fazsKICAgICAgICAgICAgfQoKICAg ICAgICAgICAgKl9fcCA9ICogKF9fcCAtIF9fbCk7CiAgICAgICAgICAgIF9fcCAtPSBfX2w7CiAg ICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAqX19wID0gX190bXA7CiAgICAgICAgKytfX2Zp cnN0OwogICAgICB9CiAgICB9CiMgMTU2MSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9iaXRzL3N0 bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXI+CiAgICBpbmxpbmUg dm9pZAogICAgcm90YXRlKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19taWRk bGUsIF9Gb3J3YXJkSXRlciBfX2xhc3QpCiAgICB7CgogICAgIAoKICAgICAgdHlwZWRlZiB0eXBl bmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6aXRlcmF0b3JfY2F0ZWdvcnkgX0l0 ZXJUeXBlOwogICAgICBfX3JvdGF0ZShfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0LCBfSXRlclR5 cGUoKSk7CiAgICB9CiMgMTU4OSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9iaXRzL3N0bF9hbGdv LmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJ dGVyPgogICAgX091dHB1dEl0ZXIKICAgIHJvdGF0ZV9jb3B5KF9Gb3J3YXJkSXRlciBfX2ZpcnN0 LCBfRm9yd2FyZEl0ZXIgX19taWRkbGUsCiAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19s YXN0LCBfT3V0cHV0SXRlciBfX3Jlc3VsdCkKICAgIHsKCiAgICAgCiAgICAgCgoKICAgICAgcmV0 dXJuIGNvcHkoX19maXJzdCwgX19taWRkbGUsIGNvcHkoX19taWRkbGUsIF9fbGFzdCwgX19yZXN1 bHQpKTsKICAgIH0KIyAxNjEyICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL2JpdHMvc3RsX2FsZ28u aCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9EaXN0YW5jZT4KICAgIGlubGluZSBfRGlzdGFuY2UK ICAgIF9fcmFuZG9tX251bWJlcihfRGlzdGFuY2UgX19uKQogICAgewoKICAgICAgcmV0dXJuIGxy YW5kNDgoKSAlIF9fbjsKCgoKICAgIH0KIyAxNjM0ICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL2Jp dHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyPgog ICAgaW5saW5lIHZvaWQKICAgIHJhbmRvbV9zaHVmZmxlKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmly c3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCkKICAgIHsKCiAgICAgCgoKICAgICAgaWYgKF9f Zmlyc3QgPT0gX19sYXN0KSByZXR1cm47CiAgICAgIGZvciAoX1JhbmRvbUFjY2Vzc0l0ZXIgX19p ID0gX19maXJzdCArIDE7IF9faSAhPSBfX2xhc3Q7ICsrX19pKQogICAgICAgIGl0ZXJfc3dhcChf X2ksIF9fZmlyc3QgKyBfX3JhbmRvbV9udW1iZXIoKF9faSAtIF9fZmlyc3QpICsgMSkpOwogICAg fQojIDE2NjAgIi91c3IvaW5jbHVkZS9jKysvMy4yLjEvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVt cGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9SYW5kb21OdW1iZXJH ZW5lcmF0b3I+CiAgICB2b2lkCiAgICByYW5kb21fc2h1ZmZsZShfUmFuZG9tQWNjZXNzSXRlciBf X2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICBfUmFu ZG9tTnVtYmVyR2VuZXJhdG9yJiBfX3JhbmQpCiAgICB7CgogICAgIAoKCiAgICAgIGlmIChfX2Zp cnN0ID09IF9fbGFzdCkgcmV0dXJuOwogICAgICBmb3IgKF9SYW5kb21BY2Nlc3NJdGVyIF9faSA9 IF9fZmlyc3QgKyAxOyBfX2kgIT0gX19sYXN0OyArK19faSkKICAgICAgICBpdGVyX3N3YXAoX19p LCBfX2ZpcnN0ICsgX19yYW5kKChfX2kgLSBfX2ZpcnN0KSArIDEpKTsKICAgIH0KCgoKCgoKCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfUHJlZGljYXRlPgogICAg X0ZvcndhcmRJdGVyCiAgICBfX3BhcnRpdGlvbihfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0Zvcndh cmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVkLAogICAgICAg ICAgICAgICAgZm9yd2FyZF9pdGVyYXRvcl90YWcpCiAgICB7CiAgICAgIGlmIChfX2ZpcnN0ID09 IF9fbGFzdCkgcmV0dXJuIF9fZmlyc3Q7CgogICAgICB3aGlsZSAoX19wcmVkKCpfX2ZpcnN0KSkK ICAgICAgICBpZiAoKytfX2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuIF9fZmlyc3Q7CgogICAgICBf Rm9yd2FyZEl0ZXIgX19uZXh0ID0gX19maXJzdDsKCiAgICAgIHdoaWxlICgrK19fbmV4dCAhPSBf X2xhc3QpCiAgICAgICAgaWYgKF9fcHJlZCgqX19uZXh0KSkgewogICAgICAgICAgc3dhcCgqX19m aXJzdCwgKl9fbmV4dCk7CiAgICAgICAgICArK19fZmlyc3Q7CiAgICAgICAgfQoKICAgICAgcmV0 dXJuIF9fZmlyc3Q7CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9u YWxJdGVyLCB0eXBlbmFtZSBfUHJlZGljYXRlPgogICAgX0JpZGlyZWN0aW9uYWxJdGVyCiAgICBf X3BhcnRpdGlvbihfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwgX0JpZGlyZWN0aW9uYWxJdGVy IF9fbGFzdCwKICAgICAgICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVkLAogICAgICAgICAgICAg ICAgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcpCiAgICB7CiAgICAgIHdoaWxlICh0cnVlKSB7 CiAgICAgICAgd2hpbGUgKHRydWUpCiAgICAgICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpCiAg ICAgICAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgICAgICAgZWxzZSBpZiAoX19wcmVkKCpfX2Zp cnN0KSkKICAgICAgICAgICAgKytfX2ZpcnN0OwogICAgICAgICAgZWxzZQogICAgICAgICAgICBi cmVhazsKICAgICAgICAtLV9fbGFzdDsKICAgICAgICB3aGlsZSAodHJ1ZSkKICAgICAgICAgIGlm IChfX2ZpcnN0ID09IF9fbGFzdCkKICAgICAgICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICAgICAg ICBlbHNlIGlmICghX19wcmVkKCpfX2xhc3QpKQogICAgICAgICAgICAtLV9fbGFzdDsKICAgICAg ICAgIGVsc2UKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgaXRlcl9zd2FwKF9fZmlyc3QsIF9f bGFzdCk7CiAgICAgICAgKytfX2ZpcnN0OwogICAgICB9CiAgICB9CiMgMTc0OCAiL3Vzci9pbmNs dWRlL2MrKy8zLjIuMS9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9y d2FyZEl0ZXIsIHR5cGVuYW1lIF9QcmVkaWNhdGU+CiAgICBpbmxpbmUgX0ZvcndhcmRJdGVyCiAg ICBwYXJ0aXRpb24oX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAg ICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQpCiAgICB7CgogICAgIAogICAgIAoKCiAgICAg IHJldHVybiBfX3BhcnRpdGlvbihfX2ZpcnN0LCBfX2xhc3QsIF9fcHJlZCwgX19pdGVyYXRvcl9j YXRlZ29yeShfX2ZpcnN0KSk7CiAgICB9CgoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3 YXJkSXRlciwgdHlwZW5hbWUgX1ByZWRpY2F0ZSwgdHlwZW5hbWUgX0Rpc3RhbmNlPgogICAgX0Zv cndhcmRJdGVyCiAgICBfX2lucGxhY2Vfc3RhYmxlX3BhcnRpdGlvbihfRm9yd2FyZEl0ZXIgX19m aXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IF9QcmVkaWNhdGUgX19wcmVkLCBfRGlzdGFuY2UgX19sZW4pCiAgICB7CiAgICAgIGlmIChfX2xl biA9PSAxKQogICAgICAgIHJldHVybiBfX3ByZWQoKl9fZmlyc3QpID8gX19sYXN0IDogX19maXJz dDsKICAgICAgX0ZvcndhcmRJdGVyIF9fbWlkZGxlID0gX19maXJzdDsKICAgICAgYWR2YW5jZShf X21pZGRsZSwgX19sZW4gLyAyKTsKICAgICAgX0ZvcndhcmRJdGVyIF9fYmVnaW4gPSBfX2lucGxh Y2Vfc3RhYmxlX3BhcnRpdGlvbihfX2ZpcnN0LCBfX21pZGRsZSwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3ByZWQsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19sZW4gLyAyKTsK ICAgICAgX0ZvcndhcmRJdGVyIF9fZW5kID0gX19pbnBsYWNlX3N0YWJsZV9wYXJ0aXRpb24oX19t aWRkbGUsIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgX19wcmVkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBfX2xlbiAtIF9fbGVuIC8gMik7CiAgICAgIHJvdGF0ZShfX2JlZ2lu LCBfX21pZGRsZSwgX19lbmQpOwogICAgICBhZHZhbmNlKF9fYmVnaW4sIGRpc3RhbmNlKF9fbWlk ZGxlLCBfX2VuZCkpOwogICAgICByZXR1cm4gX19iZWdpbjsKICAgIH0KCgoKCgoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9Qb2ludGVyLCB0eXBlbmFtZSBfUHJl ZGljYXRlLAogICAgICAgICAgIHR5cGVuYW1lIF9EaXN0YW5jZT4KICAgIF9Gb3J3YXJkSXRlcgog ICAgX19zdGFibGVfcGFydGl0aW9uX2FkYXB0aXZlKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9y d2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9QcmVkaWNh dGUgX19wcmVkLCBfRGlzdGFuY2UgX19sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgX1BvaW50ZXIgX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Rp c3RhbmNlIF9fYnVmZmVyX3NpemUpCiAgICB7CiAgICAgIGlmIChfX2xlbiA8PSBfX2J1ZmZlcl9z aXplKSB7CiAgICAgICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0MSA9IF9fZmlyc3Q7CiAgICAgICAg X1BvaW50ZXIgX19yZXN1bHQyID0gX19idWZmZXI7CiAgICAgICAgZm9yICggOyBfX2ZpcnN0ICE9 IF9fbGFzdCA7ICsrX19maXJzdCkKICAgICAgICAgIGlmIChfX3ByZWQoKl9fZmlyc3QpKSB7CiAg ICAgICAgICAgICpfX3Jlc3VsdDEgPSAqX19maXJzdDsKICAgICAgICAgICAgKytfX3Jlc3VsdDE7 CiAgICAgICAgICB9CiAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgKl9fcmVzdWx0MiA9ICpf X2ZpcnN0OwogICAgICAgICAgICArK19fcmVzdWx0MjsKICAgICAgICAgIH0KICAgICAgICBjb3B5 KF9fYnVmZmVyLCBfX3Jlc3VsdDIsIF9fcmVzdWx0MSk7CiAgICAgICAgcmV0dXJuIF9fcmVzdWx0 MTsKICAgICAgfQogICAgICBlbHNlIHsKICAgICAgICBfRm9yd2FyZEl0ZXIgX19taWRkbGUgPSBf X2ZpcnN0OwogICAgICAgIGFkdmFuY2UoX19taWRkbGUsIF9fbGVuIC8gMik7CiAgICAgICAgX0Zv cndhcmRJdGVyIF9fYmVnaW4gPSBfX3N0YWJsZV9wYXJ0aXRpb25fYWRhcHRpdmUoX19maXJzdCwg X19taWRkbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgX19wcmVkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIF9fbGVuIC8gMiwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2J1ZmZlciwgX19idWZmZXJfc2l6 ZSk7CiAgICAgICAgX0ZvcndhcmRJdGVyIF9fZW5kID0gX19zdGFibGVfcGFydGl0aW9uX2FkYXB0 aXZlKCBfX21pZGRsZSwgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgX19wcmVkLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19sZW4gLSBfX2xlbiAvIDIsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2J1 ZmZlciwgX19idWZmZXJfc2l6ZSk7CiAgICAgICAgcm90YXRlKF9fYmVnaW4sIF9fbWlkZGxlLCBf X2VuZCk7CiAgICAgICAgYWR2YW5jZShfX2JlZ2luLCBkaXN0YW5jZShfX21pZGRsZSwgX19lbmQp KTsKICAgICAgICByZXR1cm4gX19iZWdpbjsKICAgICAgfQogICAgfQojIDE4NDggIi91c3IvaW5j bHVkZS9jKysvMy4yLjEvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0Zv cndhcmRJdGVyLCB0eXBlbmFtZSBfUHJlZGljYXRlPgogICAgX0ZvcndhcmRJdGVyCiAgICBzdGFi bGVfcGFydGl0aW9uKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAog ICAgICAgICAgICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCkKICAgIHsKCiAgICAgCiAgICAg CgoKICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQogICAgICAgIHJldHVybiBfX2ZpcnN0Owog ICAgICBlbHNlCiAgICAgIHsKICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0 czxfRm9yd2FyZEl0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CiAgICAgICAgdHlwZWRlZiB0 eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9E aXN0YW5jZVR5cGU7CgogICAgICAgIF9UZW1wb3JhcnlfYnVmZmVyPF9Gb3J3YXJkSXRlciwgX1Zh bHVlVHlwZT4gX19idWYoX19maXJzdCwgX19sYXN0KTsKICAgICAgICBpZiAoX19idWYuc2l6ZSgp ID4gMCkKICAgICAgICAgIHJldHVybiBfX3N0YWJsZV9wYXJ0aXRpb25fYWRhcHRpdmUoX19maXJz dCwgX19sYXN0LCBfX3ByZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIF9EaXN0YW5jZVR5cGUoX19idWYucmVxdWVzdGVkX3NpemUoKSksCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYnVmLmJlZ2luKCksIF9fYnVmLnNp emUoKSk7CiAgICAgICAgZWxzZQogICAgICAgICAgcmV0dXJuIF9faW5wbGFjZV9zdGFibGVfcGFy dGl0aW9uKF9fZmlyc3QsIF9fbGFzdCwgX19wcmVkLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZVR5cGUoX19idWYucmVxdWVzdGVkX3NpemUoKSkp OwogICAgICB9CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0 ZXIsIHR5cGVuYW1lIF9UcD4KICAgIF9SYW5kb21BY2Nlc3NJdGVyCiAgICBfX3VuZ3VhcmRlZF9w YXJ0aXRpb24oX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19s YXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgIF9UcCBfX3Bpdm90KQogICAgewogICAgICB3 aGlsZSAodHJ1ZSkgewogICAgICAgIHdoaWxlICgqX19maXJzdCA8IF9fcGl2b3QpCiAgICAgICAg ICArK19fZmlyc3Q7CiAgICAgICAgLS1fX2xhc3Q7CiAgICAgICAgd2hpbGUgKF9fcGl2b3QgPCAq X19sYXN0KQogICAgICAgICAgLS1fX2xhc3Q7CiAgICAgICAgaWYgKCEoX19maXJzdCA8IF9fbGFz dCkpCiAgICAgICAgICByZXR1cm4gX19maXJzdDsKICAgICAgICBpdGVyX3N3YXAoX19maXJzdCwg X19sYXN0KTsKICAgICAgICArK19fZmlyc3Q7CiAgICAgIH0KICAgIH0KCgoKCgoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ29t cGFyZT4KICAgIF9SYW5kb21BY2Nlc3NJdGVyCiAgICBfX3VuZ3VhcmRlZF9wYXJ0aXRpb24oX1Jh bmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAg ICAgICAgICAgICAgICAgICAgIF9UcCBfX3Bpdm90LCBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAg ICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgd2hpbGUgKF9fY29tcCgqX19maXJzdCwgX19waXZv dCkpCiAgICAgICAgICArK19fZmlyc3Q7CiAgICAgICAgLS1fX2xhc3Q7CiAgICAgICAgd2hpbGUg KF9fY29tcChfX3Bpdm90LCAqX19sYXN0KSkKICAgICAgICAgIC0tX19sYXN0OwogICAgICAgIGlm ICghKF9fZmlyc3QgPCBfX2xhc3QpKQogICAgICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICAgICAg aXRlcl9zd2FwKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgICAgKytfX2ZpcnN0OwogICAgICB9CiAg ICB9CiMgMTkyOSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9iaXRzL3N0bF9hbGdvLmgiIDMKICBl bnVtIHsgX01fdGhyZXNob2xkID0gMTYgfTsKCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFu ZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX1RwPgogICAgdm9pZAogICAgX191bmd1YXJkZWRfbGlu ZWFyX2luc2VydChfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9UcCBfX3ZhbCkKICAgIHsKICAg ICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19uZXh0ID0gX19sYXN0OwogICAgICAtLV9fbmV4dDsKICAg ICAgd2hpbGUgKF9fdmFsIDwgKl9fbmV4dCkgewogICAgICAgICpfX2xhc3QgPSAqX19uZXh0Owog ICAgICAgIF9fbGFzdCA9IF9fbmV4dDsKICAgICAgICAtLV9fbmV4dDsKICAgICAgfQogICAgICAq X19sYXN0ID0gX192YWw7CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFj Y2Vzc0l0ZXIsIHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICB2b2lkCiAgICBf X3VuZ3VhcmRlZF9saW5lYXJfaW5zZXJ0KF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgX1RwIF9f dmFsLCBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbmV4 dCA9IF9fbGFzdDsKICAgICAgLS1fX25leHQ7CiAgICAgIHdoaWxlIChfX2NvbXAoX192YWwsICpf X25leHQpKSB7CiAgICAgICAgKl9fbGFzdCA9ICpfX25leHQ7CiAgICAgICAgX19sYXN0ID0gX19u ZXh0OwogICAgICAgIC0tX19uZXh0OwogICAgICB9CiAgICAgICpfX2xhc3QgPSBfX3ZhbDsKICAg IH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcj4KICAgIHZvaWQK ICAgIF9faW5zZXJ0aW9uX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFj Y2Vzc0l0ZXIgX19sYXN0KQogICAgewogICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpIHJldHVy bjsKCiAgICAgIGZvciAoX1JhbmRvbUFjY2Vzc0l0ZXIgX19pID0gX19maXJzdCArIDE7IF9faSAh PSBfX2xhc3Q7ICsrX19pKQogICAgICB7CiAgICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRz PF9SYW5kb21BY2Nlc3NJdGVyPjo6dmFsdWVfdHlwZSBfX3ZhbCA9ICpfX2k7CiAgICAgICAgaWYg KF9fdmFsIDwgKl9fZmlyc3QpIHsKICAgICAgICAgIGNvcHlfYmFja3dhcmQoX19maXJzdCwgX19p LCBfX2kgKyAxKTsKICAgICAgICAgICpfX2ZpcnN0ID0gX192YWw7CiAgICAgICAgfQogICAgICAg IGVsc2UKICAgICAgICAgIF9fdW5ndWFyZGVkX2xpbmVhcl9pbnNlcnQoX19pLCBfX3ZhbCk7CiAg ICAgIH0KICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwg dHlwZW5hbWUgX0NvbXBhcmU+CiAgICB2b2lkCiAgICBfX2luc2VydGlvbl9zb3J0KF9SYW5kb21B Y2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAg ICAgICAgICAgX0NvbXBhcmUgX19jb21wKQogICAgewogICAgICBpZiAoX19maXJzdCA9PSBfX2xh c3QpIHJldHVybjsKCiAgICAgIGZvciAoX1JhbmRvbUFjY2Vzc0l0ZXIgX19pID0gX19maXJzdCAr IDE7IF9faSAhPSBfX2xhc3Q7ICsrX19pKQogICAgICB7CiAgICAgICAgdHlwZW5hbWUgaXRlcmF0 b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6dmFsdWVfdHlwZSBfX3ZhbCA9ICpfX2k7CiAg ICAgICAgaWYgKF9fY29tcChfX3ZhbCwgKl9fZmlyc3QpKSB7CiAgICAgICAgICBjb3B5X2JhY2t3 YXJkKF9fZmlyc3QsIF9faSwgX19pICsgMSk7CiAgICAgICAgICAqX19maXJzdCA9IF9fdmFsOwog ICAgICAgIH0KICAgICAgICBlbHNlCiAgICAgICAgICBfX3VuZ3VhcmRlZF9saW5lYXJfaW5zZXJ0 KF9faSwgX192YWwsIF9fY29tcCk7CiAgICAgIH0KICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfUmFuZG9tQWNjZXNzSXRlcj4KICAgIGlubGluZSB2b2lkCiAgICBfX3VuZ3VhcmRlZF9p bnNlcnRpb25fc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRl ciBfX2xhc3QpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9S YW5kb21BY2Nlc3NJdGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOwoKICAgICAgZm9yIChfUmFu ZG9tQWNjZXNzSXRlciBfX2kgPSBfX2ZpcnN0OyBfX2kgIT0gX19sYXN0OyArK19faSkKICAgICAg ICBfX3VuZ3VhcmRlZF9saW5lYXJfaW5zZXJ0KF9faSwgX1ZhbHVlVHlwZSgqX19pKSk7CiAgICB9 CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9D b21wYXJlPgogICAgaW5saW5lIHZvaWQKICAgIF9fdW5ndWFyZGVkX2luc2VydGlvbl9zb3J0KF9S YW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgdHlw ZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90 eXBlIF9WYWx1ZVR5cGU7CgogICAgICBmb3IgKF9SYW5kb21BY2Nlc3NJdGVyIF9faSA9IF9fZmly c3Q7IF9faSAhPSBfX2xhc3Q7ICsrX19pKQogICAgICAgIF9fdW5ndWFyZGVkX2xpbmVhcl9pbnNl cnQoX19pLCBfVmFsdWVUeXBlKCpfX2kpLCBfX2NvbXApOwogICAgfQoKCgoKCgogIHRlbXBsYXRl PHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyPgogICAgdm9pZAogICAgX19maW5hbF9pbnNlcnRp b25fc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xh c3QpCiAgICB7CiAgICAgIGlmIChfX2xhc3QgLSBfX2ZpcnN0ID4gX01fdGhyZXNob2xkKSB7CiAg ICAgICAgX19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2ZpcnN0ICsgX01fdGhyZXNob2xkKTsK ICAgICAgICBfX3VuZ3VhcmRlZF9pbnNlcnRpb25fc29ydChfX2ZpcnN0ICsgX01fdGhyZXNob2xk LCBfX2xhc3QpOwogICAgICB9CiAgICAgIGVsc2UKICAgICAgICBfX2luc2VydGlvbl9zb3J0KF9f Zmlyc3QsIF9fbGFzdCk7CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFj Y2Vzc0l0ZXIsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgdm9pZAogICAgX19maW5hbF9pbnNlcnRp b25fc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xh c3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAg ICAgaWYgKF9fbGFzdCAtIF9fZmlyc3QgPiBfTV90aHJlc2hvbGQpIHsKICAgICAgICBfX2luc2Vy dGlvbl9zb3J0KF9fZmlyc3QsIF9fZmlyc3QgKyBfTV90aHJlc2hvbGQsIF9fY29tcCk7CiAgICAg ICAgX191bmd1YXJkZWRfaW5zZXJ0aW9uX3NvcnQoX19maXJzdCArIF9NX3RocmVzaG9sZCwgX19s YXN0LCBfX2NvbXApOwogICAgICB9CiAgICAgIGVsc2UKICAgICAgICBfX2luc2VydGlvbl9zb3J0 KF9fZmlyc3QsIF9fbGFzdCwgX19jb21wKTsKICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfU2l6ZT4KICAgIGlubGluZSBfU2l6ZQogICAgX19sZyhfU2l6ZSBfX24pCiAgICB7CiAgICAg IF9TaXplIF9fazsKICAgICAgZm9yIChfX2sgPSAwOyBfX24gIT0gMTsgX19uID4+PSAxKSArK19f azsKICAgICAgcmV0dXJuIF9fazsKICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFu ZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX1NpemU+CiAgICB2b2lkCiAgICBfX2ludHJvc29ydF9s b29wKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwK ICAgICAgICAgICAgICAgICAgICAgX1NpemUgX19kZXB0aF9saW1pdCkKICAgIHsKICAgICAgdHlw ZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90 eXBlIF9WYWx1ZVR5cGU7CgogICAgICB3aGlsZSAoX19sYXN0IC0gX19maXJzdCA+IF9NX3RocmVz aG9sZCkgewogICAgICAgIGlmIChfX2RlcHRoX2xpbWl0ID09IDApIHsKICAgICAgICAgIHBhcnRp YWxfc29ydChfX2ZpcnN0LCBfX2xhc3QsIF9fbGFzdCk7CiAgICAgICAgICByZXR1cm47CiAgICAg ICAgfQogICAgICAgIC0tX19kZXB0aF9saW1pdDsKICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBf X2N1dCA9CiAgICAgICAgICBfX3VuZ3VhcmRlZF9wYXJ0aXRpb24oX19maXJzdCwgX19sYXN0LAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9WYWx1ZVR5cGUoX19tZWRpYW4oKl9fZmly c3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAq KF9fZmlyc3QgKyAoX19sYXN0IC0gX19maXJzdCkvMiksCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKF9fbGFzdCAtIDEpKSkpOwogICAgICAgIF9f aW50cm9zb3J0X2xvb3AoX19jdXQsIF9fbGFzdCwgX19kZXB0aF9saW1pdCk7CiAgICAgICAgX19s YXN0ID0gX19jdXQ7CiAgICAgIH0KICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFu ZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX1NpemUsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgdm9p ZAogICAgX19pbnRyb3NvcnRfbG9vcChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9t QWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgIF9TaXplIF9fZGVwdGhfbGlt aXQsIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRv cl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CgogICAg ICB3aGlsZSAoX19sYXN0IC0gX19maXJzdCA+IF9NX3RocmVzaG9sZCkgewogICAgICAgIGlmIChf X2RlcHRoX2xpbWl0ID09IDApIHsKICAgICAgICAgIHBhcnRpYWxfc29ydChfX2ZpcnN0LCBfX2xh c3QsIF9fbGFzdCwgX19jb21wKTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAg LS1fX2RlcHRoX2xpbWl0OwogICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fY3V0ID0KICAgICAg ICAgIF9fdW5ndWFyZGVkX3BhcnRpdGlvbihfX2ZpcnN0LCBfX2xhc3QsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgX1ZhbHVlVHlwZShfX21lZGlhbigqX19maXJzdCwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICooX19maXJzdCArIChf X2xhc3QgLSBfX2ZpcnN0KS8yKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICooX19sYXN0IC0gMSksIF9fY29tcCkpLAogICAgICAgICAgIF9fY29t cCk7CiAgICAgICAgX19pbnRyb3NvcnRfbG9vcChfX2N1dCwgX19sYXN0LCBfX2RlcHRoX2xpbWl0 LCBfX2NvbXApOwogICAgICAgIF9fbGFzdCA9IF9fY3V0OwogICAgICB9CiAgICB9CiMgMjE2NiAi L3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfUmFuZG9tQWNjZXNzSXRlcj4KICAgIGlubGluZSB2b2lkCiAgICBzb3J0KF9SYW5kb21B Y2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCkKICAgIHsKICAgICAg dHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1 ZV90eXBlIF9WYWx1ZVR5cGU7CgoKICAgICAKCiAgICAgCgogICAgICBpZiAoX19maXJzdCAhPSBf X2xhc3QpIHsKICAgICAgICBfX2ludHJvc29ydF9sb29wKF9fZmlyc3QsIF9fbGFzdCwgX19sZyhf X2xhc3QgLSBfX2ZpcnN0KSAqIDIpOwogICAgICAgIF9fZmluYWxfaW5zZXJ0aW9uX3NvcnQoX19m aXJzdCwgX19sYXN0KTsKICAgICAgfQogICAgfQojIDIxOTcgIi91c3IvaW5jbHVkZS9jKysvMy4y LjEvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0 ZXIsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgaW5saW5lIHZvaWQKICAgIHNvcnQoX1JhbmRvbUFj Y2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfQ29tcGFyZSBfX2Nv bXApCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21B Y2Nlc3NJdGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOwoKCiAgICAgCgogICAgIAoKICAgICAg aWYgKF9fZmlyc3QgIT0gX19sYXN0KSB7CiAgICAgICAgX19pbnRyb3NvcnRfbG9vcChfX2ZpcnN0 LCBfX2xhc3QsIF9fbGcoX19sYXN0IC0gX19maXJzdCkgKiAyLCBfX2NvbXApOwogICAgICAgIF9f ZmluYWxfaW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0LCBfX2NvbXApOwogICAgICB9CiAg ICB9CgoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyPgogICAgdm9p ZAogICAgX19pbnBsYWNlX3N0YWJsZV9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9S YW5kb21BY2Nlc3NJdGVyIF9fbGFzdCkKICAgIHsKICAgICAgaWYgKF9fbGFzdCAtIF9fZmlyc3Qg PCAxNSkgewogICAgICAgIF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0KTsKICAgICAg ICByZXR1cm47CiAgICAgIH0KICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19taWRkbGUgPSBfX2Zp cnN0ICsgKF9fbGFzdCAtIF9fZmlyc3QpIC8gMjsKICAgICAgX19pbnBsYWNlX3N0YWJsZV9zb3J0 KF9fZmlyc3QsIF9fbWlkZGxlKTsKICAgICAgX19pbnBsYWNlX3N0YWJsZV9zb3J0KF9fbWlkZGxl LCBfX2xhc3QpOwogICAgICBfX21lcmdlX3dpdGhvdXRfYnVmZmVyKF9fZmlyc3QsIF9fbWlkZGxl LCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19taWRkbGUgLSBfX2ZpcnN0 LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGFzdCAtIF9fbWlkZGxlKTsKICAgIH0K CgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX0Nv bXBhcmU+CiAgICB2b2lkCiAgICBfX2lucGxhY2Vfc3RhYmxlX3NvcnQoX1JhbmRvbUFjY2Vzc0l0 ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAg ICAgICAgIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgaWYgKF9fbGFzdCAtIF9fZmlyc3Qg PCAxNSkgewogICAgICAgIF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0LCBfX2NvbXAp OwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX21pZGRs ZSA9IF9fZmlyc3QgKyAoX19sYXN0IC0gX19maXJzdCkgLyAyOwogICAgICBfX2lucGxhY2Vfc3Rh YmxlX3NvcnQoX19maXJzdCwgX19taWRkbGUsIF9fY29tcCk7CiAgICAgIF9faW5wbGFjZV9zdGFi bGVfc29ydChfX21pZGRsZSwgX19sYXN0LCBfX2NvbXApOwogICAgICBfX21lcmdlX3dpdGhvdXRf YnVmZmVyKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgX19taWRkbGUgLSBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9f bGFzdCAtIF9fbWlkZGxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7CiAg ICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyMSwgdHlwZW5hbWUgX1Jh bmRvbUFjY2Vzc0l0ZXIyLAogICAgICAgICAgIHR5cGVuYW1lIF9EaXN0YW5jZT4KICAgIHZvaWQK ICAgIF9fbWVyZ2Vfc29ydF9sb29wKF9SYW5kb21BY2Nlc3NJdGVyMSBfX2ZpcnN0LCBfUmFuZG9t QWNjZXNzSXRlcjEgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0 ZXIyIF9fcmVzdWx0LCBfRGlzdGFuY2UgX19zdGVwX3NpemUpCiAgICB7CiAgICAgIF9EaXN0YW5j ZSBfX3R3b19zdGVwID0gMiAqIF9fc3RlcF9zaXplOwoKICAgICAgd2hpbGUgKF9fbGFzdCAtIF9f Zmlyc3QgPj0gX190d29fc3RlcCkgewogICAgICAgIF9fcmVzdWx0ID0gbWVyZ2UoX19maXJzdCwg X19maXJzdCArIF9fc3RlcF9zaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgX19maXJzdCAr IF9fc3RlcF9zaXplLCBfX2ZpcnN0ICsgX190d29fc3RlcCwKICAgICAgICAgICAgICAgICAgICAg ICAgIF9fcmVzdWx0KTsKICAgICAgICBfX2ZpcnN0ICs9IF9fdHdvX3N0ZXA7CiAgICAgIH0KCiAg ICAgIF9fc3RlcF9zaXplID0gbWluKF9EaXN0YW5jZShfX2xhc3QgLSBfX2ZpcnN0KSwgX19zdGVw X3NpemUpOwogICAgICBtZXJnZShfX2ZpcnN0LCBfX2ZpcnN0ICsgX19zdGVwX3NpemUsIF9fZmly c3QgKyBfX3N0ZXBfc2l6ZSwgX19sYXN0LAogICAgICAgICAgICBfX3Jlc3VsdCk7CiAgICB9Cgog IHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyMSwgdHlwZW5hbWUgX1JhbmRvbUFj Y2Vzc0l0ZXIyLAogICAgICAgICAgIHR5cGVuYW1lIF9EaXN0YW5jZSwgdHlwZW5hbWUgX0NvbXBh cmU+CiAgICB2b2lkCiAgICBfX21lcmdlX3NvcnRfbG9vcChfUmFuZG9tQWNjZXNzSXRlcjEgX19m aXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIxIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgIF9S YW5kb21BY2Nlc3NJdGVyMiBfX3Jlc3VsdCwgX0Rpc3RhbmNlIF9fc3RlcF9zaXplLAogICAgICAg ICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQogICAgewogICAgICBfRGlzdGFuY2UgX190 d29fc3RlcCA9IDIgKiBfX3N0ZXBfc2l6ZTsKCiAgICAgIHdoaWxlIChfX2xhc3QgLSBfX2ZpcnN0 ID49IF9fdHdvX3N0ZXApIHsKICAgICAgICBfX3Jlc3VsdCA9IG1lcmdlKF9fZmlyc3QsIF9fZmly c3QgKyBfX3N0ZXBfc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fZmlyc3QgKyBfX3N0 ZXBfc2l6ZSwgX19maXJzdCArIF9fdHdvX3N0ZXAsCiAgICAgICAgICAgICAgICAgICAgICAgICBf X3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7CiAgICAgICAgX19maXJz dCArPSBfX3R3b19zdGVwOwogICAgICB9CiAgICAgIF9fc3RlcF9zaXplID0gbWluKF9EaXN0YW5j ZShfX2xhc3QgLSBfX2ZpcnN0KSwgX19zdGVwX3NpemUpOwoKICAgICAgbWVyZ2UoX19maXJzdCwg X19maXJzdCArIF9fc3RlcF9zaXplLAogICAgICAgICAgICBfX2ZpcnN0ICsgX19zdGVwX3NpemUs IF9fbGFzdCwKICAgICAgICAgICAgX19yZXN1bHQsCiAgICAgICAgICAgIF9fY29tcCk7CiAgICB9 CgogIGVudW0geyBfTV9jaHVua19zaXplID0gNyB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFu ZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX0Rpc3RhbmNlPgogICAgdm9pZAogICAgX19jaHVua19p bnNlcnRpb25fc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRl ciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSBfX2NodW5rX3Np emUpCiAgICB7CiAgICAgIHdoaWxlIChfX2xhc3QgLSBfX2ZpcnN0ID49IF9fY2h1bmtfc2l6ZSkg ewogICAgICAgIF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19maXJzdCArIF9fY2h1bmtfc2l6 ZSk7CiAgICAgICAgX19maXJzdCArPSBfX2NodW5rX3NpemU7CiAgICAgIH0KICAgICAgX19pbnNl cnRpb25fc29ydChfX2ZpcnN0LCBfX2xhc3QpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf UmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX0Rpc3RhbmNlLCB0eXBlbmFtZSBfQ29tcGFyZT4K ICAgIHZvaWQKICAgIF9fY2h1bmtfaW5zZXJ0aW9uX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19m aXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAg ICBfRGlzdGFuY2UgX19jaHVua19zaXplLCBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAgIHdo aWxlIChfX2xhc3QgLSBfX2ZpcnN0ID49IF9fY2h1bmtfc2l6ZSkgewogICAgICAgIF9faW5zZXJ0 aW9uX3NvcnQoX19maXJzdCwgX19maXJzdCArIF9fY2h1bmtfc2l6ZSwgX19jb21wKTsKICAgICAg ICBfX2ZpcnN0ICs9IF9fY2h1bmtfc2l6ZTsKICAgICAgfQogICAgICBfX2luc2VydGlvbl9zb3J0 KF9fZmlyc3QsIF9fbGFzdCwgX19jb21wKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1Jh bmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9Qb2ludGVyPgogICAgdm9pZAogICAgX19tZXJnZV9z b3J0X3dpdGhfYnVmZmVyKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJ dGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUG9pbnRlciBfX2J1ZmZl cikKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFj Y2Vzc0l0ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX0Rpc3RhbmNlOwoKICAgICAgX0Rpc3RhbmNlIF9f bGVuID0gX19sYXN0IC0gX19maXJzdDsKICAgICAgX1BvaW50ZXIgX19idWZmZXJfbGFzdCA9IF9f YnVmZmVyICsgX19sZW47CgogICAgICBfRGlzdGFuY2UgX19zdGVwX3NpemUgPSBfTV9jaHVua19z aXplOwogICAgICBfX2NodW5rX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFzdCwgX19zdGVw X3NpemUpOwoKICAgICAgd2hpbGUgKF9fc3RlcF9zaXplIDwgX19sZW4pIHsKICAgICAgICBfX21l cmdlX3NvcnRfbG9vcChfX2ZpcnN0LCBfX2xhc3QsIF9fYnVmZmVyLCBfX3N0ZXBfc2l6ZSk7CiAg ICAgICAgX19zdGVwX3NpemUgKj0gMjsKICAgICAgICBfX21lcmdlX3NvcnRfbG9vcChfX2J1ZmZl ciwgX19idWZmZXJfbGFzdCwgX19maXJzdCwgX19zdGVwX3NpemUpOwogICAgICAgIF9fc3RlcF9z aXplICo9IDI7CiAgICAgIH0KICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vz c0l0ZXIsIHR5cGVuYW1lIF9Qb2ludGVyLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIHZvaWQKICAg IF9fbWVyZ2Vfc29ydF93aXRoX2J1ZmZlcihfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFu ZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1BvaW50 ZXIgX19idWZmZXIsIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFt ZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX0Rp c3RhbmNlOwoKICAgICAgX0Rpc3RhbmNlIF9fbGVuID0gX19sYXN0IC0gX19maXJzdDsKICAgICAg X1BvaW50ZXIgX19idWZmZXJfbGFzdCA9IF9fYnVmZmVyICsgX19sZW47CgogICAgICBfRGlzdGFu Y2UgX19zdGVwX3NpemUgPSBfTV9jaHVua19zaXplOwogICAgICBfX2NodW5rX2luc2VydGlvbl9z b3J0KF9fZmlyc3QsIF9fbGFzdCwgX19zdGVwX3NpemUsIF9fY29tcCk7CgogICAgICB3aGlsZSAo X19zdGVwX3NpemUgPCBfX2xlbikgewogICAgICAgIF9fbWVyZ2Vfc29ydF9sb29wKF9fZmlyc3Qs IF9fbGFzdCwgX19idWZmZXIsIF9fc3RlcF9zaXplLCBfX2NvbXApOwogICAgICAgIF9fc3RlcF9z aXplICo9IDI7CiAgICAgICAgX19tZXJnZV9zb3J0X2xvb3AoX19idWZmZXIsIF9fYnVmZmVyX2xh c3QsIF9fZmlyc3QsIF9fc3RlcF9zaXplLCBfX2NvbXApOwogICAgICAgIF9fc3RlcF9zaXplICo9 IDI7CiAgICAgIH0KICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIs IHR5cGVuYW1lIF9Qb2ludGVyLCB0eXBlbmFtZSBfRGlzdGFuY2U+CiAgICB2b2lkCiAgICBfX3N0 YWJsZV9zb3J0X2FkYXB0aXZlKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nl c3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX1BvaW50ZXIgX19idWZm ZXIsIF9EaXN0YW5jZSBfX2J1ZmZlcl9zaXplKQogICAgewogICAgICBfRGlzdGFuY2UgX19sZW4g PSAoX19sYXN0IC0gX19maXJzdCArIDEpIC8gMjsKICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19t aWRkbGUgPSBfX2ZpcnN0ICsgX19sZW47CiAgICAgIGlmIChfX2xlbiA+IF9fYnVmZmVyX3NpemUp IHsKICAgICAgICBfX3N0YWJsZV9zb3J0X2FkYXB0aXZlKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2J1 ZmZlciwgX19idWZmZXJfc2l6ZSk7CiAgICAgICAgX19zdGFibGVfc29ydF9hZGFwdGl2ZShfX21p ZGRsZSwgX19sYXN0LCBfX2J1ZmZlciwgX19idWZmZXJfc2l6ZSk7CiAgICAgIH0KICAgICAgZWxz ZSB7CiAgICAgICAgX19tZXJnZV9zb3J0X3dpdGhfYnVmZmVyKF9fZmlyc3QsIF9fbWlkZGxlLCBf X2J1ZmZlcik7CiAgICAgICAgX19tZXJnZV9zb3J0X3dpdGhfYnVmZmVyKF9fbWlkZGxlLCBfX2xh c3QsIF9fYnVmZmVyKTsKICAgICAgfQogICAgICBfX21lcmdlX2FkYXB0aXZlKF9fZmlyc3QsIF9f bWlkZGxlLCBfX2xhc3QsIF9EaXN0YW5jZShfX21pZGRsZSAtIF9fZmlyc3QpLAogICAgICAgICAg ICAgICAgICAgICAgIF9EaXN0YW5jZShfX2xhc3QgLSBfX21pZGRsZSksIF9fYnVmZmVyLCBfX2J1 ZmZlcl9zaXplKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIs IHR5cGVuYW1lIF9Qb2ludGVyLCB0eXBlbmFtZSBfRGlzdGFuY2UsCiAgICAgICAgICAgdHlwZW5h bWUgX0NvbXBhcmU+CiAgICB2b2lkCiAgICBfX3N0YWJsZV9zb3J0X2FkYXB0aXZlKF9SYW5kb21B Y2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgX1BvaW50ZXIgX19idWZmZXIsIF9EaXN0YW5jZSBfX2J1ZmZlcl9zaXpl LAogICAgICAgICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAg IF9EaXN0YW5jZSBfX2xlbiA9IChfX2xhc3QgLSBfX2ZpcnN0ICsgMSkgLyAyOwogICAgICBfUmFu ZG9tQWNjZXNzSXRlciBfX21pZGRsZSA9IF9fZmlyc3QgKyBfX2xlbjsKICAgICAgaWYgKF9fbGVu ID4gX19idWZmZXJfc2l6ZSkgewogICAgICAgIF9fc3RhYmxlX3NvcnRfYWRhcHRpdmUoX19maXJz dCwgX19taWRkbGUsIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgX19jb21wKTsKICAgICAgICBfX3N0YWJsZV9zb3J0X2FkYXB0aXZlKF9fbWlk ZGxlLCBfX2xhc3QsIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgX19jb21wKTsKICAgICAgfQogICAgICBlbHNlIHsKICAgICAgICBfX21lcmdl X3NvcnRfd2l0aF9idWZmZXIoX19maXJzdCwgX19taWRkbGUsIF9fYnVmZmVyLCBfX2NvbXApOwog ICAgICAgIF9fbWVyZ2Vfc29ydF93aXRoX2J1ZmZlcihfX21pZGRsZSwgX19sYXN0LCBfX2J1ZmZl ciwgX19jb21wKTsKICAgICAgfQogICAgICBfX21lcmdlX2FkYXB0aXZlKF9fZmlyc3QsIF9fbWlk ZGxlLCBfX2xhc3QsIF9EaXN0YW5jZShfX21pZGRsZSAtIF9fZmlyc3QpLAogICAgICAgICAgICAg ICAgICAgICAgIF9EaXN0YW5jZShfX2xhc3QgLSBfX21pZGRsZSksIF9fYnVmZmVyLCBfX2J1ZmZl cl9zaXplLAogICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7CiAgICB9CiMgMjQzMCAiL3Vz ci9pbmNsdWRlL2MrKy8zLjIuMS9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfUmFuZG9tQWNjZXNzSXRlcj4KICAgIGlubGluZSB2b2lkCiAgICBzdGFibGVfc29ydChfUmFu ZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QpCiAgICB7CiAg ICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6 dmFsdWVfdHlwZSBfVmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3Ry YWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OmRpZmZlcmVuY2VfdHlwZSBfRGlzdGFuY2VUeXBlOwoK CiAgICAgCgogICAgIAoKICAgICAgX1RlbXBvcmFyeV9idWZmZXI8X1JhbmRvbUFjY2Vzc0l0ZXIs IF9WYWx1ZVR5cGU+IGJ1ZihfX2ZpcnN0LCBfX2xhc3QpOwogICAgICBpZiAoYnVmLmJlZ2luKCkg PT0gMCkKICAgICAgICBfX2lucGxhY2Vfc3RhYmxlX3NvcnQoX19maXJzdCwgX19sYXN0KTsKICAg ICAgZWxzZQogICAgICAgIF9fc3RhYmxlX3NvcnRfYWRhcHRpdmUoX19maXJzdCwgX19sYXN0LCBi dWYuYmVnaW4oKSwgX0Rpc3RhbmNlVHlwZShidWYuc2l6ZSgpKSk7CiAgICB9CiMgMjQ2NiAiL3Vz ci9pbmNsdWRlL2MrKy8zLjIuMS9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBpbmxpbmUgdm9pZAog ICAgc3RhYmxlX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0 ZXIgX19sYXN0LCBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUg aXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBl OwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRl cj46OmRpZmZlcmVuY2VfdHlwZSBfRGlzdGFuY2VUeXBlOwoKCiAgICAgCgogICAgIAoKCiAgICAg IF9UZW1wb3JhcnlfYnVmZmVyPF9SYW5kb21BY2Nlc3NJdGVyLCBfVmFsdWVUeXBlPiBidWYoX19m aXJzdCwgX19sYXN0KTsKICAgICAgaWYgKGJ1Zi5iZWdpbigpID09IDApCiAgICAgICAgX19pbnBs YWNlX3N0YWJsZV9zb3J0KF9fZmlyc3QsIF9fbGFzdCwgX19jb21wKTsKICAgICAgZWxzZQogICAg ICAgIF9fc3RhYmxlX3NvcnRfYWRhcHRpdmUoX19maXJzdCwgX19sYXN0LCBidWYuYmVnaW4oKSwg X0Rpc3RhbmNlVHlwZShidWYuc2l6ZSgpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IF9fY29tcCk7CiAgICB9CiMgMjUwMiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9iaXRzL3N0bF9h bGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcj4KICAgIHZvaWQK ICAgIHBhcnRpYWxfc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAg ICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbWlkZGxlLAogICAgICAgICAgICAgICAgIF9SYW5kb21B Y2Nlc3NJdGVyIF9fbGFzdCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90 cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CgoKICAgICAK CiAgICAgCgogICAgICBtYWtlX2hlYXAoX19maXJzdCwgX19taWRkbGUpOwogICAgICBmb3IgKF9S YW5kb21BY2Nlc3NJdGVyIF9faSA9IF9fbWlkZGxlOyBfX2kgPCBfX2xhc3Q7ICsrX19pKQogICAg ICAgIGlmICgqX19pIDwgKl9fZmlyc3QpCiAgICAgICAgICBfX3BvcF9oZWFwKF9fZmlyc3QsIF9f bWlkZGxlLCBfX2ksIF9WYWx1ZVR5cGUoKl9faSkpOwogICAgICBzb3J0X2hlYXAoX19maXJzdCwg X19taWRkbGUpOwogICAgfQojIDI1NDAgIi91c3IvaW5jbHVkZS9jKysvMy4yLjEvYml0cy9zdGxf YWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1l IF9Db21wYXJlPgogICAgdm9pZAogICAgcGFydGlhbF9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9f Zmlyc3QsCiAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19taWRkbGUsCiAgICAg ICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgIF9D b21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFp dHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CgoKICAgICAKCiAg ICAgCgoKICAgICAgbWFrZV9oZWFwKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2NvbXApOwogICAgICBm b3IgKF9SYW5kb21BY2Nlc3NJdGVyIF9faSA9IF9fbWlkZGxlOyBfX2kgPCBfX2xhc3Q7ICsrX19p KQogICAgICAgIGlmIChfX2NvbXAoKl9faSwgKl9fZmlyc3QpKQogICAgICAgICAgX19wb3BfaGVh cChfX2ZpcnN0LCBfX21pZGRsZSwgX19pLCBfVmFsdWVUeXBlKCpfX2kpLCBfX2NvbXApOwogICAg ICBzb3J0X2hlYXAoX19maXJzdCwgX19taWRkbGUsIF9fY29tcCk7CiAgICB9CiMgMjU3OSAiL3Vz ci9pbmNsdWRlL2MrKy8zLjIuMS9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcj4KICAgIF9SYW5kb21BY2Nl c3NJdGVyCiAgICBwYXJ0aWFsX3NvcnRfY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0 ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19yZXN1 bHRfZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX3Jlc3Vs dF9sYXN0KQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5w dXRJdGVyPjo6dmFsdWVfdHlwZSBfSW5wdXRWYWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5h bWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6dmFsdWVfdHlwZSBfT3V0cHV0 VmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9t QWNjZXNzSXRlcj46OmRpZmZlcmVuY2VfdHlwZSBfRGlzdGFuY2VUeXBlOwoKCiAgICAgCiAgICAg CiAgICAgCiAgICAgCgogICAgICBpZiAoX19yZXN1bHRfZmlyc3QgPT0gX19yZXN1bHRfbGFzdCkg cmV0dXJuIF9fcmVzdWx0X2xhc3Q7CiAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fcmVzdWx0X3Jl YWxfbGFzdCA9IF9fcmVzdWx0X2ZpcnN0OwogICAgICB3aGlsZShfX2ZpcnN0ICE9IF9fbGFzdCAm JiBfX3Jlc3VsdF9yZWFsX2xhc3QgIT0gX19yZXN1bHRfbGFzdCkgewogICAgICAgICpfX3Jlc3Vs dF9yZWFsX2xhc3QgPSAqX19maXJzdDsKICAgICAgICArK19fcmVzdWx0X3JlYWxfbGFzdDsKICAg ICAgICArK19fZmlyc3Q7CiAgICAgIH0KICAgICAgbWFrZV9oZWFwKF9fcmVzdWx0X2ZpcnN0LCBf X3Jlc3VsdF9yZWFsX2xhc3QpOwogICAgICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAg ICAgICBpZiAoKl9fZmlyc3QgPCAqX19yZXN1bHRfZmlyc3QpCiAgICAgICAgICBfX2FkanVzdF9o ZWFwKF9fcmVzdWx0X2ZpcnN0LCBfRGlzdGFuY2VUeXBlKDApLAogICAgICAgICAgICAgICAgICAg ICAgICBfRGlzdGFuY2VUeXBlKF9fcmVzdWx0X3JlYWxfbGFzdCAtIF9fcmVzdWx0X2ZpcnN0KSwK ICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0VmFsdWVUeXBlKCpfX2ZpcnN0KSk7CiAgICAg ICAgKytfX2ZpcnN0OwogICAgICB9CiAgICAgIHNvcnRfaGVhcChfX3Jlc3VsdF9maXJzdCwgX19y ZXN1bHRfcmVhbF9sYXN0KTsKICAgICAgcmV0dXJuIF9fcmVzdWx0X3JlYWxfbGFzdDsKICAgIH0K IyAyNjMzICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBs YXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBl bmFtZSBfQ29tcGFyZT4KICAgIF9SYW5kb21BY2Nlc3NJdGVyCiAgICBwYXJ0aWFsX3NvcnRfY29w eShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAg ICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19yZXN1bHRfZmlyc3QsCiAgICAgICAgICAgICAgICAg ICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX3Jlc3VsdF9sYXN0LAogICAgICAgICAgICAgICAgICAg ICAgX0NvbXBhcmUgX19jb21wKQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9y X3RyYWl0czxfSW5wdXRJdGVyPjo6dmFsdWVfdHlwZSBfSW5wdXRWYWx1ZVR5cGU7CiAgICAgIHR5 cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6dmFsdWVf dHlwZSBfT3V0cHV0VmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3Ry YWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OmRpZmZlcmVuY2VfdHlwZSBfRGlzdGFuY2VUeXBlOwoK CiAgICAgCiAgICAgCiAgICAgCiAgICAgCgoKICAgICAgaWYgKF9fcmVzdWx0X2ZpcnN0ID09IF9f cmVzdWx0X2xhc3QpIHJldHVybiBfX3Jlc3VsdF9sYXN0OwogICAgICBfUmFuZG9tQWNjZXNzSXRl ciBfX3Jlc3VsdF9yZWFsX2xhc3QgPSBfX3Jlc3VsdF9maXJzdDsKICAgICAgd2hpbGUoX19maXJz dCAhPSBfX2xhc3QgJiYgX19yZXN1bHRfcmVhbF9sYXN0ICE9IF9fcmVzdWx0X2xhc3QpIHsKICAg ICAgICAqX19yZXN1bHRfcmVhbF9sYXN0ID0gKl9fZmlyc3Q7CiAgICAgICAgKytfX3Jlc3VsdF9y ZWFsX2xhc3Q7CiAgICAgICAgKytfX2ZpcnN0OwogICAgICB9CiAgICAgIG1ha2VfaGVhcChfX3Jl c3VsdF9maXJzdCwgX19yZXN1bHRfcmVhbF9sYXN0LCBfX2NvbXApOwogICAgICB3aGlsZSAoX19m aXJzdCAhPSBfX2xhc3QpIHsKICAgICAgICBpZiAoX19jb21wKCpfX2ZpcnN0LCAqX19yZXN1bHRf Zmlyc3QpKQogICAgICAgICAgX19hZGp1c3RfaGVhcChfX3Jlc3VsdF9maXJzdCwgX0Rpc3RhbmNl VHlwZSgwKSwKICAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlVHlwZShfX3Jlc3VsdF9y ZWFsX2xhc3QgLSBfX3Jlc3VsdF9maXJzdCksCiAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1 dFZhbHVlVHlwZSgqX19maXJzdCksCiAgICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7CiAg ICAgICAgKytfX2ZpcnN0OwogICAgICB9CiAgICAgIHNvcnRfaGVhcChfX3Jlc3VsdF9maXJzdCwg X19yZXN1bHRfcmVhbF9sYXN0LCBfX2NvbXApOwogICAgICByZXR1cm4gX19yZXN1bHRfcmVhbF9s YXN0OwogICAgfQojIDI2ODYgIi91c3IvaW5jbHVkZS9jKysvMy4yLjEvYml0cy9zdGxfYWxnby5o IiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXI+CiAgICB2b2lkCiAgICBu dGhfZWxlbWVudChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgX1Jh bmRvbUFjY2Vzc0l0ZXIgX19udGgsCiAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBf X2xhc3QpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5k b21BY2Nlc3NJdGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOwoKCiAgICAgCiAgICAgCgogICAg ICB3aGlsZSAoX19sYXN0IC0gX19maXJzdCA+IDMpIHsKICAgICAgICBfUmFuZG9tQWNjZXNzSXRl ciBfX2N1dCA9CiAgICAgICAgICBfX3VuZ3VhcmRlZF9wYXJ0aXRpb24oX19maXJzdCwgX19sYXN0 LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9WYWx1ZVR5cGUoX19tZWRpYW4oKl9f Zmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAqKF9fZmlyc3QgKyAoX19sYXN0IC0gX19maXJzdCkvMiksCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKF9fbGFzdCAtIDEpKSkpOwogICAgICAg IGlmIChfX2N1dCA8PSBfX250aCkKICAgICAgICAgIF9fZmlyc3QgPSBfX2N1dDsKICAgICAgICBl bHNlCiAgICAgICAgICBfX2xhc3QgPSBfX2N1dDsKICAgICAgfQogICAgICBfX2luc2VydGlvbl9z b3J0KF9fZmlyc3QsIF9fbGFzdCk7CiAgICB9CiMgMjcyOCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIu MS9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRl ciwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICB2b2lkCiAgICBudGhfZWxlbWVudChfUmFuZG9tQWNj ZXNzSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19udGgs CiAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5h bWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVU eXBlOwoKCiAgICAgCiAgICAgCgoKICAgICAgd2hpbGUgKF9fbGFzdCAtIF9fZmlyc3QgPiAzKSB7 CiAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19jdXQgPQogICAgICAgICAgX191bmd1YXJkZWRf cGFydGl0aW9uKF9fZmlyc3QsIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBfVmFsdWVUeXBlKF9fbWVkaWFuKCpfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKihfX2ZpcnN0ICsgKF9fbGFzdCAtIF9fZmlyc3Qp LzIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KihfX2xhc3QgLSAxKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIF9fY29tcCkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29t cCk7CiAgICAgICAgaWYgKF9fY3V0IDw9IF9fbnRoKQogICAgICAgICAgX19maXJzdCA9IF9fY3V0 OwogICAgICAgIGVsc2UKICAgICAgICAgIF9fbGFzdCA9IF9fY3V0OwogICAgICB9CiAgICAgIF9f aW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0LCBfX2NvbXApOwogICAgfQojIDI3NjggIi91 c3IvaW5jbHVkZS9jKysvMy4yLjEvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfVHA+CiAgICBfRm9yd2FyZEl0ZXIKICAgIGxvd2Vy X2JvdW5kKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LCBjb25zdCBf VHAmIF9fdmFsKQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxf Rm9yd2FyZEl0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5h bWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OmRpZmZlcmVuY2VfdHlwZSBfRGlzdGFu Y2VUeXBlOwoKCgoKCgogICAgIAogICAgIAogICAgIAoKICAgICAgX0Rpc3RhbmNlVHlwZSBfX2xl biA9IGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgIF9EaXN0YW5jZVR5cGUgX19oYWxm OwogICAgICBfRm9yd2FyZEl0ZXIgX19taWRkbGU7CgogICAgICB3aGlsZSAoX19sZW4gPiAwKSB7 CiAgICAgICAgX19oYWxmID0gX19sZW4gPj4gMTsKICAgICAgICBfX21pZGRsZSA9IF9fZmlyc3Q7 CiAgICAgICAgYWR2YW5jZShfX21pZGRsZSwgX19oYWxmKTsKICAgICAgICBpZiAoKl9fbWlkZGxl IDwgX192YWwpIHsKICAgICAgICAgIF9fZmlyc3QgPSBfX21pZGRsZTsKICAgICAgICAgICsrX19m aXJzdDsKICAgICAgICAgIF9fbGVuID0gX19sZW4gLSBfX2hhbGYgLSAxOwogICAgICAgIH0KICAg ICAgICBlbHNlCiAgICAgICAgICBfX2xlbiA9IF9faGFsZjsKICAgICAgfQogICAgICByZXR1cm4g X19maXJzdDsKICAgIH0KIyAyODE2ICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL2JpdHMvc3RsX2Fs Z28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1RwLCB0 eXBlbmFtZSBfQ29tcGFyZT4KICAgIF9Gb3J3YXJkSXRlcgogICAgbG93ZXJfYm91bmQoX0Zvcndh cmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICBjb25z dCBfVHAmIF9fdmFsLCBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5h bWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsK ICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6ZGlm ZmVyZW5jZV90eXBlIF9EaXN0YW5jZVR5cGU7CgoKICAgICAKICAgICAKCiAgICAgIF9EaXN0YW5j ZVR5cGUgX19sZW4gPSBkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QpOwogICAgICBfRGlzdGFuY2VU eXBlIF9faGFsZjsKICAgICAgX0ZvcndhcmRJdGVyIF9fbWlkZGxlOwoKICAgICAgd2hpbGUgKF9f bGVuID4gMCkgewogICAgICAgIF9faGFsZiA9IF9fbGVuID4+IDE7CiAgICAgICAgX19taWRkbGUg PSBfX2ZpcnN0OwogICAgICAgIGFkdmFuY2UoX19taWRkbGUsIF9faGFsZik7CiAgICAgICAgaWYg KF9fY29tcCgqX19taWRkbGUsIF9fdmFsKSkgewogICAgICAgICAgX19maXJzdCA9IF9fbWlkZGxl OwogICAgICAgICAgKytfX2ZpcnN0OwogICAgICAgICAgX19sZW4gPSBfX2xlbiAtIF9faGFsZiAt IDE7CiAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICAgIF9fbGVuID0gX19oYWxmOwogICAg ICB9CiAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgfQojIDI4NTYgIi91c3IvaW5jbHVkZS9jKysv My4yLjEvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVy LCB0eXBlbmFtZSBfVHA+CiAgICBfRm9yd2FyZEl0ZXIKICAgIHVwcGVyX2JvdW5kKF9Gb3J3YXJk SXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LCBjb25zdCBfVHAmIF9fdmFsKQogICAg ewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+Ojp2 YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJh aXRzPF9Gb3J3YXJkSXRlcj46OmRpZmZlcmVuY2VfdHlwZSBfRGlzdGFuY2VUeXBlOwoKCgogICAg IAogICAgIAogICAgIAoKICAgICAgX0Rpc3RhbmNlVHlwZSBfX2xlbiA9IGRpc3RhbmNlKF9fZmly c3QsIF9fbGFzdCk7CiAgICAgIF9EaXN0YW5jZVR5cGUgX19oYWxmOwogICAgICBfRm9yd2FyZEl0 ZXIgX19taWRkbGU7CgogICAgICB3aGlsZSAoX19sZW4gPiAwKSB7CiAgICAgICAgX19oYWxmID0g X19sZW4gPj4gMTsKICAgICAgICBfX21pZGRsZSA9IF9fZmlyc3Q7CiAgICAgICAgYWR2YW5jZShf X21pZGRsZSwgX19oYWxmKTsKICAgICAgICBpZiAoX192YWwgPCAqX19taWRkbGUpCiAgICAgICAg ICBfX2xlbiA9IF9faGFsZjsKICAgICAgICBlbHNlIHsKICAgICAgICAgIF9fZmlyc3QgPSBfX21p ZGRsZTsKICAgICAgICAgICsrX19maXJzdDsKICAgICAgICAgIF9fbGVuID0gX19sZW4gLSBfX2hh bGYgLSAxOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gX19maXJzdDsKICAgIH0KIyAy OTAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRl PHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ29tcGFyZT4K ICAgIF9Gb3J3YXJkSXRlcgogICAgdXBwZXJfYm91bmQoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9G b3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9fdmFsLCBfQ29t cGFyZSBfX2NvbXApCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRz PF9Gb3J3YXJkSXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBl bmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9EaXN0 YW5jZVR5cGU7CgoKICAgICAKICAgICAKCiAgICAgIF9EaXN0YW5jZVR5cGUgX19sZW4gPSBkaXN0 YW5jZShfX2ZpcnN0LCBfX2xhc3QpOwogICAgICBfRGlzdGFuY2VUeXBlIF9faGFsZjsKICAgICAg X0ZvcndhcmRJdGVyIF9fbWlkZGxlOwoKICAgICAgd2hpbGUgKF9fbGVuID4gMCkgewogICAgICAg IF9faGFsZiA9IF9fbGVuID4+IDE7CiAgICAgICAgX19taWRkbGUgPSBfX2ZpcnN0OwogICAgICAg IGFkdmFuY2UoX19taWRkbGUsIF9faGFsZik7CiAgICAgICAgaWYgKF9fY29tcChfX3ZhbCwgKl9f bWlkZGxlKSkKICAgICAgICAgIF9fbGVuID0gX19oYWxmOwogICAgICAgIGVsc2UgewogICAgICAg ICAgX19maXJzdCA9IF9fbWlkZGxlOwogICAgICAgICAgKytfX2ZpcnN0OwogICAgICAgICAgX19s ZW4gPSBfX2xlbiAtIF9faGFsZiAtIDE7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiBf X2ZpcnN0OwogICAgfQojIDI5NDggIi91c3IvaW5jbHVkZS9jKysvMy4yLjEvYml0cy9zdGxfYWxn by5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfVHA+CiAg ICBwYWlyPF9Gb3J3YXJkSXRlciwgX0ZvcndhcmRJdGVyPgogICAgZXF1YWxfcmFuZ2UoX0Zvcndh cmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsIGNvbnN0IF9UcCYgX192YWwpCiAg ICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46 OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90 cmFpdHM8X0ZvcndhcmRJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9EaXN0YW5jZVR5cGU7CgoKCiAg ICAgCiAgICAgCiAgICAgCgogICAgICBfRGlzdGFuY2VUeXBlIF9fbGVuID0gZGlzdGFuY2UoX19m aXJzdCwgX19sYXN0KTsKICAgICAgX0Rpc3RhbmNlVHlwZSBfX2hhbGY7CiAgICAgIF9Gb3J3YXJk SXRlciBfX21pZGRsZSwgX19sZWZ0LCBfX3JpZ2h0OwoKICAgICAgd2hpbGUgKF9fbGVuID4gMCkg ewogICAgICAgIF9faGFsZiA9IF9fbGVuID4+IDE7CiAgICAgICAgX19taWRkbGUgPSBfX2ZpcnN0 OwogICAgICAgIGFkdmFuY2UoX19taWRkbGUsIF9faGFsZik7CiAgICAgICAgaWYgKCpfX21pZGRs ZSA8IF9fdmFsKSB7CiAgICAgICAgICBfX2ZpcnN0ID0gX19taWRkbGU7CiAgICAgICAgICArK19f Zmlyc3Q7CiAgICAgICAgICBfX2xlbiA9IF9fbGVuIC0gX19oYWxmIC0gMTsKICAgICAgICB9CiAg ICAgICAgZWxzZSBpZiAoX192YWwgPCAqX19taWRkbGUpCiAgICAgICAgICBfX2xlbiA9IF9faGFs ZjsKICAgICAgICBlbHNlIHsKICAgICAgICAgIF9fbGVmdCA9IGxvd2VyX2JvdW5kKF9fZmlyc3Qs IF9fbWlkZGxlLCBfX3ZhbCk7CiAgICAgICAgICBhZHZhbmNlKF9fZmlyc3QsIF9fbGVuKTsKICAg ICAgICAgIF9fcmlnaHQgPSB1cHBlcl9ib3VuZCgrK19fbWlkZGxlLCBfX2ZpcnN0LCBfX3ZhbCk7 CiAgICAgICAgICByZXR1cm4gcGFpcjxfRm9yd2FyZEl0ZXIsIF9Gb3J3YXJkSXRlcj4oX19sZWZ0 LCBfX3JpZ2h0KTsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIHBhaXI8X0ZvcndhcmRJ dGVyLCBfRm9yd2FyZEl0ZXI+KF9fZmlyc3QsIF9fZmlyc3QpOwogICAgfQojIDMwMDMgIi91c3Iv aW5jbHVkZS9jKysvMy4yLjEvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUg X0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgcGFpcjxf Rm9yd2FyZEl0ZXIsIF9Gb3J3YXJkSXRlcj4KICAgIGVxdWFsX3JhbmdlKF9Gb3J3YXJkSXRlciBf X2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LCBjb25zdCBfVHAmIF9fdmFsLAogICAgICAgICAg ICAgICAgX0NvbXBhcmUgX19jb21wKQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJh dG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CiAgICAgIHR5 cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OmRpZmZlcmVuY2Vf dHlwZSBfRGlzdGFuY2VUeXBlOwoKCiAgICAgCiAgICAgCiAgICAgCgogICAgICBfRGlzdGFuY2VU eXBlIF9fbGVuID0gZGlzdGFuY2UoX19maXJzdCwgX19sYXN0KTsKICAgICAgX0Rpc3RhbmNlVHlw ZSBfX2hhbGY7CiAgICAgIF9Gb3J3YXJkSXRlciBfX21pZGRsZSwgX19sZWZ0LCBfX3JpZ2h0OwoK ICAgICAgd2hpbGUgKF9fbGVuID4gMCkgewogICAgICAgIF9faGFsZiA9IF9fbGVuID4+IDE7CiAg ICAgICAgX19taWRkbGUgPSBfX2ZpcnN0OwogICAgICAgIGFkdmFuY2UoX19taWRkbGUsIF9faGFs Zik7CiAgICAgICAgaWYgKF9fY29tcCgqX19taWRkbGUsIF9fdmFsKSkgewogICAgICAgICAgX19m aXJzdCA9IF9fbWlkZGxlOwogICAgICAgICAgKytfX2ZpcnN0OwogICAgICAgICAgX19sZW4gPSBf X2xlbiAtIF9faGFsZiAtIDE7CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYgKF9fY29tcChfX3Zh bCwgKl9fbWlkZGxlKSkKICAgICAgICAgIF9fbGVuID0gX19oYWxmOwogICAgICAgIGVsc2Ugewog ICAgICAgICAgX19sZWZ0ID0gbG93ZXJfYm91bmQoX19maXJzdCwgX19taWRkbGUsIF9fdmFsLCBf X2NvbXApOwogICAgICAgICAgYWR2YW5jZShfX2ZpcnN0LCBfX2xlbik7CiAgICAgICAgICBfX3Jp Z2h0ID0gdXBwZXJfYm91bmQoKytfX21pZGRsZSwgX19maXJzdCwgX192YWwsIF9fY29tcCk7CiAg ICAgICAgICByZXR1cm4gcGFpcjxfRm9yd2FyZEl0ZXIsIF9Gb3J3YXJkSXRlcj4oX19sZWZ0LCBf X3JpZ2h0KTsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIHBhaXI8X0ZvcndhcmRJdGVy LCBfRm9yd2FyZEl0ZXI+KF9fZmlyc3QsIF9fZmlyc3QpOwogICAgfQojIDMwNTIgIi91c3IvaW5j bHVkZS9jKysvMy4yLjEvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0Zv cndhcmRJdGVyLCB0eXBlbmFtZSBfVHA+CiAgICBib29sCiAgICBiaW5hcnlfc2VhcmNoKF9Gb3J3 YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICBj b25zdCBfVHAmIF9fdmFsKQogICAgewoKCiAgICAgCiAgICAgCgogICAgIAoKICAgICAgX0Zvcndh cmRJdGVyIF9faSA9IGxvd2VyX2JvdW5kKF9fZmlyc3QsIF9fbGFzdCwgX192YWwpOwogICAgICBy ZXR1cm4gX19pICE9IF9fbGFzdCAmJiAhKF9fdmFsIDwgKl9faSk7CiAgICB9CiMgMzA4MyAiL3Vz ci9pbmNsdWRlL2MrKy8zLjIuMS9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBib29s CiAgICBiaW5hcnlfc2VhcmNoKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19s YXN0LAogICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9fdmFsLCBfQ29tcGFyZSBfX2NvbXAp CiAgICB7CgogICAgIAogICAgIAoKICAgICAKCgogICAgICBfRm9yd2FyZEl0ZXIgX19pID0gbG93 ZXJfYm91bmQoX19maXJzdCwgX19sYXN0LCBfX3ZhbCwgX19jb21wKTsKICAgICAgcmV0dXJuIF9f aSAhPSBfX2xhc3QgJiYgIV9fY29tcChfX3ZhbCwgKl9faSk7CiAgICB9CiMgMzExNSAiL3Vzci9p bmNsdWRlL2MrKy8zLjIuMS9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf SW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0SXRlcjIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyPgog ICAgX091dHB1dEl0ZXIKICAgIG1lcmdlKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVy MSBfX2xhc3QxLAogICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9f bGFzdDIsCiAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCkKICAgIHsKCiAgICAgCiAgICAg CiAgICAgCgogICAgIAoKCiAgICAgCgoKICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEg JiYgX19maXJzdDIgIT0gX19sYXN0MikgewogICAgICAgIGlmICgqX19maXJzdDIgPCAqX19maXJz dDEpIHsKICAgICAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MjsKICAgICAgICAgICsrX19maXJz dDI7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmly c3QxOwogICAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgICB9CiAgICAgICAgKytfX3Jlc3VsdDsK ICAgICAgfQogICAgICByZXR1cm4gY29weShfX2ZpcnN0MiwgX19sYXN0MiwgY29weShfX2ZpcnN0 MSwgX19sYXN0MSwgX19yZXN1bHQpKTsKICAgIH0KIyAzMTY2ICIvdXNyL2luY2x1ZGUvYysrLzMu Mi4xL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0 eXBlbmFtZSBfSW5wdXRJdGVyMiwgdHlwZW5hbWUgX091dHB1dEl0ZXIsCiAgICAgICAgICAgdHlw ZW5hbWUgX0NvbXBhcmU+CiAgICBfT3V0cHV0SXRlcgogICAgbWVyZ2UoX0lucHV0SXRlcjEgX19m aXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0 MiwgX0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBf Q29tcGFyZSBfX2NvbXApCiAgICB7CgogICAgIAogICAgIAogICAgIAoKCiAgICAgCgogICAgIAoK CgogICAgICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3Qy KSB7CiAgICAgICAgaWYgKF9fY29tcCgqX19maXJzdDIsICpfX2ZpcnN0MSkpIHsKICAgICAgICAg ICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MjsKICAgICAgICAgICsrX19maXJzdDI7CiAgICAgICAgfQog ICAgICAgIGVsc2UgewogICAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOwogICAgICAgICAg KytfX2ZpcnN0MTsKICAgICAgICB9CiAgICAgICAgKytfX3Jlc3VsdDsKICAgICAgfQogICAgICBy ZXR1cm4gY29weShfX2ZpcnN0MiwgX19sYXN0MiwgY29weShfX2ZpcnN0MSwgX19sYXN0MSwgX19y ZXN1bHQpKTsKICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0 ZXIsIHR5cGVuYW1lIF9EaXN0YW5jZT4KICAgIHZvaWQKICAgIF9fbWVyZ2Vfd2l0aG91dF9idWZm ZXIoX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAg IF9CaWRpcmVjdGlvbmFsSXRlciBfX21pZGRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg X0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Rp c3RhbmNlIF9fbGVuMSwgX0Rpc3RhbmNlIF9fbGVuMikKICAgIHsKICAgICAgaWYgKF9fbGVuMSA9 PSAwIHx8IF9fbGVuMiA9PSAwKQogICAgICAgIHJldHVybjsKICAgICAgaWYgKF9fbGVuMSArIF9f bGVuMiA9PSAyKSB7CiAgICAgICAgaWYgKCpfX21pZGRsZSA8ICpfX2ZpcnN0KQogICAgICAgICAg ICAgIGl0ZXJfc3dhcChfX2ZpcnN0LCBfX21pZGRsZSk7CiAgICAgICAgcmV0dXJuOwogICAgICB9 CiAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0X2N1dCA9IF9fZmlyc3Q7CiAgICAgIF9C aWRpcmVjdGlvbmFsSXRlciBfX3NlY29uZF9jdXQgPSBfX21pZGRsZTsKICAgICAgX0Rpc3RhbmNl IF9fbGVuMTEgPSAwOwogICAgICBfRGlzdGFuY2UgX19sZW4yMiA9IDA7CiAgICAgIGlmIChfX2xl bjEgPiBfX2xlbjIpIHsKICAgICAgICBfX2xlbjExID0gX19sZW4xIC8gMjsKICAgICAgICBhZHZh bmNlKF9fZmlyc3RfY3V0LCBfX2xlbjExKTsKICAgICAgICBfX3NlY29uZF9jdXQgPSBsb3dlcl9i b3VuZChfX21pZGRsZSwgX19sYXN0LCAqX19maXJzdF9jdXQpOwogICAgICAgIF9fbGVuMjIgPSBk aXN0YW5jZShfX21pZGRsZSwgX19zZWNvbmRfY3V0KTsKICAgICAgfQogICAgICBlbHNlIHsKICAg ICAgICBfX2xlbjIyID0gX19sZW4yIC8gMjsKICAgICAgICBhZHZhbmNlKF9fc2Vjb25kX2N1dCwg X19sZW4yMik7CiAgICAgICAgX19maXJzdF9jdXQgPSB1cHBlcl9ib3VuZChfX2ZpcnN0LCBfX21p ZGRsZSwgKl9fc2Vjb25kX2N1dCk7CiAgICAgICAgX19sZW4xMSA9IGRpc3RhbmNlKF9fZmlyc3Qs IF9fZmlyc3RfY3V0KTsKICAgICAgfQogICAgICByb3RhdGUoX19maXJzdF9jdXQsIF9fbWlkZGxl LCBfX3NlY29uZF9jdXQpOwogICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19uZXdfbWlkZGxlID0g X19maXJzdF9jdXQ7CiAgICAgIGFkdmFuY2UoX19uZXdfbWlkZGxlLCBkaXN0YW5jZShfX21pZGRs ZSwgX19zZWNvbmRfY3V0KSk7CiAgICAgIF9fbWVyZ2Vfd2l0aG91dF9idWZmZXIoX19maXJzdCwg X19maXJzdF9jdXQsIF9fbmV3X21pZGRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf X2xlbjExLCBfX2xlbjIyKTsKICAgICAgX19tZXJnZV93aXRob3V0X2J1ZmZlcihfX25ld19taWRk bGUsIF9fc2Vjb25kX2N1dCwgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9f bGVuMSAtIF9fbGVuMTEsIF9fbGVuMiAtIF9fbGVuMjIpOwogICAgfQoKCgoKCgogIHRlbXBsYXRl PHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlciwgdHlwZW5hbWUgX0Rpc3RhbmNlLCB0eXBlbmFt ZSBfQ29tcGFyZT4KICAgIHZvaWQKICAgIF9fbWVyZ2Vfd2l0aG91dF9idWZmZXIoX0JpZGlyZWN0 aW9uYWxJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlv bmFsSXRlciBfX21pZGRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9u YWxJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlIF9fbGVu MSwgX0Rpc3RhbmNlIF9fbGVuMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX0NvbXBhcmUg X19jb21wKQogICAgewogICAgICBpZiAoX19sZW4xID09IDAgfHwgX19sZW4yID09IDApCiAgICAg ICAgcmV0dXJuOwogICAgICBpZiAoX19sZW4xICsgX19sZW4yID09IDIpIHsKICAgICAgICBpZiAo X19jb21wKCpfX21pZGRsZSwgKl9fZmlyc3QpKQogICAgICAgICAgICAgIGl0ZXJfc3dhcChfX2Zp cnN0LCBfX21pZGRsZSk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIF9CaWRpcmVjdGlv bmFsSXRlciBfX2ZpcnN0X2N1dCA9IF9fZmlyc3Q7CiAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBf X3NlY29uZF9jdXQgPSBfX21pZGRsZTsKICAgICAgX0Rpc3RhbmNlIF9fbGVuMTEgPSAwOwogICAg ICBfRGlzdGFuY2UgX19sZW4yMiA9IDA7CiAgICAgIGlmIChfX2xlbjEgPiBfX2xlbjIpIHsKICAg ICAgICBfX2xlbjExID0gX19sZW4xIC8gMjsKICAgICAgICBhZHZhbmNlKF9fZmlyc3RfY3V0LCBf X2xlbjExKTsKICAgICAgICBfX3NlY29uZF9jdXQgPSBsb3dlcl9ib3VuZChfX21pZGRsZSwgX19s YXN0LCAqX19maXJzdF9jdXQsIF9fY29tcCk7CiAgICAgICAgX19sZW4yMiA9IGRpc3RhbmNlKF9f bWlkZGxlLCBfX3NlY29uZF9jdXQpOwogICAgICB9CiAgICAgIGVsc2UgewogICAgICAgIF9fbGVu MjIgPSBfX2xlbjIgLyAyOwogICAgICAgIGFkdmFuY2UoX19zZWNvbmRfY3V0LCBfX2xlbjIyKTsK ICAgICAgICBfX2ZpcnN0X2N1dCA9IHVwcGVyX2JvdW5kKF9fZmlyc3QsIF9fbWlkZGxlLCAqX19z ZWNvbmRfY3V0LCBfX2NvbXApOwogICAgICAgIF9fbGVuMTEgPSBkaXN0YW5jZShfX2ZpcnN0LCBf X2ZpcnN0X2N1dCk7CiAgICAgIH0KICAgICAgcm90YXRlKF9fZmlyc3RfY3V0LCBfX21pZGRsZSwg X19zZWNvbmRfY3V0KTsKICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbmV3X21pZGRsZSA9IF9f Zmlyc3RfY3V0OwogICAgICBhZHZhbmNlKF9fbmV3X21pZGRsZSwgZGlzdGFuY2UoX19taWRkbGUs IF9fc2Vjb25kX2N1dCkpOwogICAgICBfX21lcmdlX3dpdGhvdXRfYnVmZmVyKF9fZmlyc3QsIF9f Zmlyc3RfY3V0LCBfX25ld19taWRkbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19s ZW4xMSwgX19sZW4yMiwgX19jb21wKTsKICAgICAgX19tZXJnZV93aXRob3V0X2J1ZmZlcihfX25l d19taWRkbGUsIF9fc2Vjb25kX2N1dCwgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgIF9fbGVuMSAtIF9fbGVuMTEsIF9fbGVuMiAtIF9fbGVuMjIsIF9fY29tcCk7CiAgICB9CgoK CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyMSwgdHlwZW5hbWUgX0Jp ZGlyZWN0aW9uYWxJdGVyMiwKICAgICAgICAgICB0eXBlbmFtZSBfRGlzdGFuY2U+CiAgICBfQmlk aXJlY3Rpb25hbEl0ZXIxCiAgICBfX3JvdGF0ZV9hZGFwdGl2ZShfQmlkaXJlY3Rpb25hbEl0ZXIx IF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fbWlk ZGxlLAogICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2xhc3QsCiAg ICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UgX19sZW4xLCBfRGlzdGFuY2UgX19sZW4yLAog ICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX2J1ZmZlciwKICAgICAg ICAgICAgICAgICAgICAgIF9EaXN0YW5jZSBfX2J1ZmZlcl9zaXplKQogICAgewogICAgICBfQmlk aXJlY3Rpb25hbEl0ZXIyIF9fYnVmZmVyX2VuZDsKICAgICAgaWYgKF9fbGVuMSA+IF9fbGVuMiAm JiBfX2xlbjIgPD0gX19idWZmZXJfc2l6ZSkgewogICAgICAgIF9fYnVmZmVyX2VuZCA9IGNvcHko X19taWRkbGUsIF9fbGFzdCwgX19idWZmZXIpOwogICAgICAgIGNvcHlfYmFja3dhcmQoX19maXJz dCwgX19taWRkbGUsIF9fbGFzdCk7CiAgICAgICAgcmV0dXJuIGNvcHkoX19idWZmZXIsIF9fYnVm ZmVyX2VuZCwgX19maXJzdCk7CiAgICAgIH0KICAgICAgZWxzZSBpZiAoX19sZW4xIDw9IF9fYnVm ZmVyX3NpemUpIHsKICAgICAgICBfX2J1ZmZlcl9lbmQgPSBjb3B5KF9fZmlyc3QsIF9fbWlkZGxl LCBfX2J1ZmZlcik7CiAgICAgICAgY29weShfX21pZGRsZSwgX19sYXN0LCBfX2ZpcnN0KTsKICAg ICAgICByZXR1cm4gY29weV9iYWNrd2FyZChfX2J1ZmZlciwgX19idWZmZXJfZW5kLCBfX2xhc3Qp OwogICAgICB9CiAgICAgIGVsc2UgewogICAgICAgIHJvdGF0ZShfX2ZpcnN0LCBfX21pZGRsZSwg X19sYXN0KTsKICAgICAgICBhZHZhbmNlKF9fZmlyc3QsIGRpc3RhbmNlKF9fbWlkZGxlLCBfX2xh c3QpKTsKICAgICAgICByZXR1cm4gX19maXJzdDsKICAgICAgfQogICAgfQoKCgoKCgogIHRlbXBs YXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcjEsIHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFs SXRlcjIsCiAgICAgICAgICAgdHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyMz4KICAgIF9CaWRp cmVjdGlvbmFsSXRlcjMKICAgIF9fbWVyZ2VfYmFja3dhcmQoX0JpZGlyZWN0aW9uYWxJdGVyMSBf X2ZpcnN0MSwgX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAg ICBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fZmlyc3QyLCBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fbGFz dDIsCiAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjMgX19yZXN1bHQpCiAg ICB7CiAgICAgIGlmIChfX2ZpcnN0MSA9PSBfX2xhc3QxKQogICAgICAgIHJldHVybiBjb3B5X2Jh Y2t3YXJkKF9fZmlyc3QyLCBfX2xhc3QyLCBfX3Jlc3VsdCk7CiAgICAgIGlmIChfX2ZpcnN0MiA9 PSBfX2xhc3QyKQogICAgICAgIHJldHVybiBjb3B5X2JhY2t3YXJkKF9fZmlyc3QxLCBfX2xhc3Qx LCBfX3Jlc3VsdCk7CiAgICAgIC0tX19sYXN0MTsKICAgICAgLS1fX2xhc3QyOwogICAgICB3aGls ZSAodHJ1ZSkgewogICAgICAgIGlmICgqX19sYXN0MiA8ICpfX2xhc3QxKSB7CiAgICAgICAgICAq LS1fX3Jlc3VsdCA9ICpfX2xhc3QxOwogICAgICAgICAgaWYgKF9fZmlyc3QxID09IF9fbGFzdDEp CiAgICAgICAgICAgIHJldHVybiBjb3B5X2JhY2t3YXJkKF9fZmlyc3QyLCArK19fbGFzdDIsIF9f cmVzdWx0KTsKICAgICAgICAgIC0tX19sYXN0MTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAg ICAgICAgICAqLS1fX3Jlc3VsdCA9ICpfX2xhc3QyOwogICAgICAgICAgaWYgKF9fZmlyc3QyID09 IF9fbGFzdDIpCiAgICAgICAgICAgIHJldHVybiBjb3B5X2JhY2t3YXJkKF9fZmlyc3QxLCArK19f bGFzdDEsIF9fcmVzdWx0KTsKICAgICAgICAgIC0tX19sYXN0MjsKICAgICAgICB9CiAgICAgIH0K ICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIxLCB0eXBl bmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIyLAogICAgICAgICAgIHR5cGVuYW1lIF9CaWRpcmVjdGlv bmFsSXRlcjMsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgX0JpZGlyZWN0aW9uYWxJdGVyMwogICAg X19tZXJnZV9iYWNrd2FyZChfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fZmlyc3QxLCBfQmlkaXJlY3Rp b25hbEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRl cjIgX19maXJzdDIsIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAg ICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMyBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAg X0NvbXBhcmUgX19jb21wKQogICAgewogICAgICBpZiAoX19maXJzdDEgPT0gX19sYXN0MSkKICAg ICAgICByZXR1cm4gY29weV9iYWNrd2FyZChfX2ZpcnN0MiwgX19sYXN0MiwgX19yZXN1bHQpOwog ICAgICBpZiAoX19maXJzdDIgPT0gX19sYXN0MikKICAgICAgICByZXR1cm4gY29weV9iYWNrd2Fy ZChfX2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQpOwogICAgICAtLV9fbGFzdDE7CiAgICAgIC0t X19sYXN0MjsKICAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICBpZiAoX19jb21wKCpfX2xhc3Qy LCAqX19sYXN0MSkpIHsKICAgICAgICAgICotLV9fcmVzdWx0ID0gKl9fbGFzdDE7CiAgICAgICAg ICBpZiAoX19maXJzdDEgPT0gX19sYXN0MSkKICAgICAgICAgICAgcmV0dXJuIGNvcHlfYmFja3dh cmQoX19maXJzdDIsICsrX19sYXN0MiwgX19yZXN1bHQpOwogICAgICAgICAgLS1fX2xhc3QxOwog ICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICotLV9fcmVzdWx0ID0gKl9fbGFzdDI7 CiAgICAgICAgICBpZiAoX19maXJzdDIgPT0gX19sYXN0MikKICAgICAgICAgICAgcmV0dXJuIGNv cHlfYmFja3dhcmQoX19maXJzdDEsICsrX19sYXN0MSwgX19yZXN1bHQpOwogICAgICAgICAgLS1f X2xhc3QyOwogICAgICAgIH0KICAgICAgfQogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1l IF9CaWRpcmVjdGlvbmFsSXRlciwgdHlwZW5hbWUgX0Rpc3RhbmNlLCB0eXBlbmFtZSBfUG9pbnRl cj4KICAgIHZvaWQKICAgIF9fbWVyZ2VfYWRhcHRpdmUoX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmly c3QsCiAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX21pZGRsZSwKICAg ICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCwKICAgICAgICAgICAg ICAgICAgICAgX0Rpc3RhbmNlIF9fbGVuMSwgX0Rpc3RhbmNlIF9fbGVuMiwKICAgICAgICAgICAg ICAgICAgICAgX1BvaW50ZXIgX19idWZmZXIsIF9EaXN0YW5jZSBfX2J1ZmZlcl9zaXplKQogICAg ewogICAgICAgICAgaWYgKF9fbGVuMSA8PSBfX2xlbjIgJiYgX19sZW4xIDw9IF9fYnVmZmVyX3Np emUpIHsKICAgICAgICAgICAgX1BvaW50ZXIgX19idWZmZXJfZW5kID0gY29weShfX2ZpcnN0LCBf X21pZGRsZSwgX19idWZmZXIpOwogICAgICAgICAgICBtZXJnZShfX2J1ZmZlciwgX19idWZmZXJf ZW5kLCBfX21pZGRsZSwgX19sYXN0LCBfX2ZpcnN0KTsKICAgICAgICAgIH0KICAgICAgICAgIGVs c2UgaWYgKF9fbGVuMiA8PSBfX2J1ZmZlcl9zaXplKSB7CiAgICAgICAgICAgIF9Qb2ludGVyIF9f YnVmZmVyX2VuZCA9IGNvcHkoX19taWRkbGUsIF9fbGFzdCwgX19idWZmZXIpOwogICAgICAgICAg ICBfX21lcmdlX2JhY2t3YXJkKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2J1ZmZlciwgX19idWZmZXJf ZW5kLCBfX2xhc3QpOwogICAgICAgICAgfQogICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIF9C aWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0X2N1dCA9IF9fZmlyc3Q7CiAgICAgICAgICAgIF9CaWRp cmVjdGlvbmFsSXRlciBfX3NlY29uZF9jdXQgPSBfX21pZGRsZTsKICAgICAgICAgICAgX0Rpc3Rh bmNlIF9fbGVuMTEgPSAwOwogICAgICAgICAgICBfRGlzdGFuY2UgX19sZW4yMiA9IDA7CiAgICAg ICAgICAgIGlmIChfX2xlbjEgPiBfX2xlbjIpIHsKICAgICAgICAgICAgICAgICAgX19sZW4xMSA9 IF9fbGVuMSAvIDI7CiAgICAgICAgICAgICAgICAgIGFkdmFuY2UoX19maXJzdF9jdXQsIF9fbGVu MTEpOwogICAgICAgICAgICAgICAgICBfX3NlY29uZF9jdXQgPSBsb3dlcl9ib3VuZChfX21pZGRs ZSwgX19sYXN0LCAqX19maXJzdF9jdXQpOwogICAgICAgICAgICAgICAgICBfX2xlbjIyID0gZGlz dGFuY2UoX19taWRkbGUsIF9fc2Vjb25kX2N1dCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAg ZWxzZSB7CiAgICAgICAgICAgICAgICAgIF9fbGVuMjIgPSBfX2xlbjIgLyAyOwogICAgICAgICAg ICAgICAgICBhZHZhbmNlKF9fc2Vjb25kX2N1dCwgX19sZW4yMik7CiAgICAgICAgICAgICAgICAg IF9fZmlyc3RfY3V0ID0gdXBwZXJfYm91bmQoX19maXJzdCwgX19taWRkbGUsICpfX3NlY29uZF9j dXQpOwogICAgICAgICAgICAgICAgICBfX2xlbjExID0gZGlzdGFuY2UoX19maXJzdCwgX19maXJz dF9jdXQpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX25l d19taWRkbGUgPQogICAgICAgICAgICAgICAgICBfX3JvdGF0ZV9hZGFwdGl2ZShfX2ZpcnN0X2N1 dCwgX19taWRkbGUsIF9fc2Vjb25kX2N1dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgX19sZW4xIC0gX19sZW4xMSwgX19sZW4yMiwgX19idWZmZXIsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIF9fYnVmZmVyX3NpemUpOwogICAgICAgICAgICBfX21lcmdl X2FkYXB0aXZlKF9fZmlyc3QsIF9fZmlyc3RfY3V0LCBfX25ld19taWRkbGUsIF9fbGVuMTEsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgX19sZW4yMiwgX19idWZmZXIsIF9fYnVmZmVyX3Np emUpOwogICAgICAgICAgICBfX21lcmdlX2FkYXB0aXZlKF9fbmV3X21pZGRsZSwgX19zZWNvbmRf Y3V0LCBfX2xhc3QsIF9fbGVuMSAtIF9fbGVuMTEsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgX19sZW4yIC0gX19sZW4yMiwgX19idWZmZXIsIF9fYnVmZmVyX3NpemUpOwogICAgICAgICAg fQogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlciwgdHlw ZW5hbWUgX0Rpc3RhbmNlLCB0eXBlbmFtZSBfUG9pbnRlciwKICAgICAgICAgICB0eXBlbmFtZSBf Q29tcGFyZT4KICAgIHZvaWQKICAgIF9fbWVyZ2VfYWRhcHRpdmUoX0JpZGlyZWN0aW9uYWxJdGVy IF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX21pZGRs ZSwKICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCwKICAgICAg ICAgICAgICAgICAgICAgX0Rpc3RhbmNlIF9fbGVuMSwgX0Rpc3RhbmNlIF9fbGVuMiwKICAgICAg ICAgICAgICAgICAgICAgX1BvaW50ZXIgX19idWZmZXIsIF9EaXN0YW5jZSBfX2J1ZmZlcl9zaXpl LAogICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAgICAgICBp ZiAoX19sZW4xIDw9IF9fbGVuMiAmJiBfX2xlbjEgPD0gX19idWZmZXJfc2l6ZSkgewogICAgICAg ICAgICBfUG9pbnRlciBfX2J1ZmZlcl9lbmQgPSBjb3B5KF9fZmlyc3QsIF9fbWlkZGxlLCBfX2J1 ZmZlcik7CiAgICAgICAgICAgIG1lcmdlKF9fYnVmZmVyLCBfX2J1ZmZlcl9lbmQsIF9fbWlkZGxl LCBfX2xhc3QsIF9fZmlyc3QsIF9fY29tcCk7CiAgICAgICAgICB9CiAgICAgICAgICBlbHNlIGlm IChfX2xlbjIgPD0gX19idWZmZXJfc2l6ZSkgewogICAgICAgICAgICBfUG9pbnRlciBfX2J1ZmZl cl9lbmQgPSBjb3B5KF9fbWlkZGxlLCBfX2xhc3QsIF9fYnVmZmVyKTsKICAgICAgICAgICAgX19t ZXJnZV9iYWNrd2FyZChfX2ZpcnN0LCBfX21pZGRsZSwgX19idWZmZXIsIF9fYnVmZmVyX2VuZCwg X19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2Nv bXApOwogICAgICAgICAgfQogICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIF9CaWRpcmVjdGlv bmFsSXRlciBfX2ZpcnN0X2N1dCA9IF9fZmlyc3Q7CiAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFs SXRlciBfX3NlY29uZF9jdXQgPSBfX21pZGRsZTsKICAgICAgICAgICAgX0Rpc3RhbmNlIF9fbGVu MTEgPSAwOwogICAgICAgICAgICBfRGlzdGFuY2UgX19sZW4yMiA9IDA7CiAgICAgICAgICAgIGlm IChfX2xlbjEgPiBfX2xlbjIpIHsKICAgICAgICAgICAgICAgICAgX19sZW4xMSA9IF9fbGVuMSAv IDI7CiAgICAgICAgICAgICAgICAgIGFkdmFuY2UoX19maXJzdF9jdXQsIF9fbGVuMTEpOwogICAg ICAgICAgICAgICAgICBfX3NlY29uZF9jdXQgPSBsb3dlcl9ib3VuZChfX21pZGRsZSwgX19sYXN0 LCAqX19maXJzdF9jdXQsIF9fY29tcCk7CiAgICAgICAgICAgICAgICAgIF9fbGVuMjIgPSBkaXN0 YW5jZShfX21pZGRsZSwgX19zZWNvbmRfY3V0KTsKICAgICAgICAgICAgfQogICAgICAgICAgICBl bHNlIHsKICAgICAgICAgICAgICAgICAgX19sZW4yMiA9IF9fbGVuMiAvIDI7CiAgICAgICAgICAg ICAgICAgIGFkdmFuY2UoX19zZWNvbmRfY3V0LCBfX2xlbjIyKTsKICAgICAgICAgICAgICAgICAg X19maXJzdF9jdXQgPSB1cHBlcl9ib3VuZChfX2ZpcnN0LCBfX21pZGRsZSwgKl9fc2Vjb25kX2N1 dCwgX19jb21wKTsKICAgICAgICAgICAgICAgICAgX19sZW4xMSA9IGRpc3RhbmNlKF9fZmlyc3Qs IF9fZmlyc3RfY3V0KTsKICAgICAgICAgICAgfQogICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0 ZXIgX19uZXdfbWlkZGxlID0KICAgICAgICAgICAgICAgICAgX19yb3RhdGVfYWRhcHRpdmUoX19m aXJzdF9jdXQsIF9fbWlkZGxlLCBfX3NlY29uZF9jdXQsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIF9fbGVuMSAtIF9fbGVuMTEsIF9fbGVuMjIsIF9fYnVmZmVyLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2J1ZmZlcl9zaXplKTsKICAgICAgICAgICAg X19tZXJnZV9hZGFwdGl2ZShfX2ZpcnN0LCBfX2ZpcnN0X2N1dCwgX19uZXdfbWlkZGxlLCBfX2xl bjExLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGVuMjIsIF9fYnVmZmVyLCBfX2J1 ZmZlcl9zaXplLCBfX2NvbXApOwogICAgICAgICAgICBfX21lcmdlX2FkYXB0aXZlKF9fbmV3X21p ZGRsZSwgX19zZWNvbmRfY3V0LCBfX2xhc3QsIF9fbGVuMSAtIF9fbGVuMTEsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgX19sZW4yIC0gX19sZW4yMiwgX19idWZmZXIsIF9fYnVmZmVyX3Np emUsIF9fY29tcCk7CiAgICAgICAgICB9CiAgICB9CiMgMzUwOCAiL3Vzci9pbmNsdWRlL2MrKy8z LjIuMS9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25h bEl0ZXI+CiAgICB2b2lkCiAgICBpbnBsYWNlX21lcmdlKF9CaWRpcmVjdGlvbmFsSXRlciBfX2Zp cnN0LAogICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19taWRkbGUsCiAgICAg ICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QpCiAgICB7CiAgICAgIHR5cGVk ZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9CaWRpcmVjdGlvbmFsSXRlcj46OnZhbHVlX3R5 cGUKICAgICAgICAgIF9WYWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3Jf dHJhaXRzPF9CaWRpcmVjdGlvbmFsSXRlcj46OmRpZmZlcmVuY2VfdHlwZQogICAgICAgICAgX0Rp c3RhbmNlVHlwZTsKCgogICAgIAoKICAgICAKCiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbWlkZGxl IHx8IF9fbWlkZGxlID09IF9fbGFzdCkKICAgICAgICByZXR1cm47CgogICAgICBfRGlzdGFuY2VU eXBlIF9fbGVuMSA9IGRpc3RhbmNlKF9fZmlyc3QsIF9fbWlkZGxlKTsKICAgICAgX0Rpc3RhbmNl VHlwZSBfX2xlbjIgPSBkaXN0YW5jZShfX21pZGRsZSwgX19sYXN0KTsKCiAgICAgIF9UZW1wb3Jh cnlfYnVmZmVyPF9CaWRpcmVjdGlvbmFsSXRlciwgX1ZhbHVlVHlwZT4gX19idWYoX19maXJzdCwg X19sYXN0KTsKICAgICAgaWYgKF9fYnVmLmJlZ2luKCkgPT0gMCkKICAgICAgICBfX21lcmdlX3dp dGhvdXRfYnVmZmVyKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsIF9fbGVuMSwgX19sZW4yKTsK ICAgICAgZWxzZQogICAgICAgIF9fbWVyZ2VfYWRhcHRpdmUoX19maXJzdCwgX19taWRkbGUsIF9f bGFzdCwgX19sZW4xLCBfX2xlbjIsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2J1Zi5iZWdp bigpLCBfRGlzdGFuY2VUeXBlKF9fYnVmLnNpemUoKSkpOwogICAgfQojIDM1NTkgIi91c3IvaW5j bHVkZS9jKysvMy4yLjEvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0Jp ZGlyZWN0aW9uYWxJdGVyLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIHZvaWQKICAgIGlucGxhY2Vf bWVyZ2UoX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgIF9CaWRp cmVjdGlvbmFsSXRlciBfX21pZGRsZSwKICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJ dGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQogICAgewogICAg ICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfQmlkaXJlY3Rpb25hbEl0ZXI+Ojp2 YWx1ZV90eXBlCiAgICAgICAgICBfVmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0 ZXJhdG9yX3RyYWl0czxfQmlkaXJlY3Rpb25hbEl0ZXI+OjpkaWZmZXJlbmNlX3R5cGUKICAgICAg ICAgIF9EaXN0YW5jZVR5cGU7CgoKICAgICAKCiAgICAgCgoKICAgICAgaWYgKF9fZmlyc3QgPT0g X19taWRkbGUgfHwgX19taWRkbGUgPT0gX19sYXN0KQogICAgICAgIHJldHVybjsKCiAgICAgIF9E aXN0YW5jZVR5cGUgX19sZW4xID0gZGlzdGFuY2UoX19maXJzdCwgX19taWRkbGUpOwogICAgICBf RGlzdGFuY2VUeXBlIF9fbGVuMiA9IGRpc3RhbmNlKF9fbWlkZGxlLCBfX2xhc3QpOwoKICAgICAg X1RlbXBvcmFyeV9idWZmZXI8X0JpZGlyZWN0aW9uYWxJdGVyLCBfVmFsdWVUeXBlPiBfX2J1Zihf X2ZpcnN0LCBfX2xhc3QpOwogICAgICBpZiAoX19idWYuYmVnaW4oKSA9PSAwKQogICAgICAgIF9f bWVyZ2Vfd2l0aG91dF9idWZmZXIoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwgX19sZW4xLCBf X2xlbjIsIF9fY29tcCk7CiAgICAgIGVsc2UKICAgICAgICBfX21lcmdlX2FkYXB0aXZlKF9fZmly c3QsIF9fbWlkZGxlLCBfX2xhc3QsIF9fbGVuMSwgX19sZW4yLAogICAgICAgICAgICAgICAgICAg ICAgICAgX19idWYuYmVnaW4oKSwgX0Rpc3RhbmNlVHlwZShfX2J1Zi5zaXplKCkpLAogICAgICAg ICAgICAgICAgICAgICAgICAgX19jb21wKTsKICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0SXRlcjI+CiAgICBib29sCiAgICBpbmNsdWRl cyhfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAg IF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyKQogICAgewoKICAgICAK ICAgICAKICAgICAKCgogICAgIAoKCiAgICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYm IF9fZmlyc3QyICE9IF9fbGFzdDIpCiAgICAgICAgaWYgKCpfX2ZpcnN0MiA8ICpfX2ZpcnN0MSkK ICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICBlbHNlIGlmKCpfX2ZpcnN0MSA8ICpfX2Zp cnN0MikKICAgICAgICAgICsrX19maXJzdDE7CiAgICAgICAgZWxzZQogICAgICAgICAgKytfX2Zp cnN0MSwgKytfX2ZpcnN0MjsKCiAgICAgIHJldHVybiBfX2ZpcnN0MiA9PSBfX2xhc3QyOwogICAg fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0SXRlcjIs IHR5cGVuYW1lIF9Db21wYXJlPgogICAgYm9vbAogICAgaW5jbHVkZXMoX0lucHV0SXRlcjEgX19m aXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2Zp cnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwgX0NvbXBhcmUgX19jb21wKQogICAgewoKICAgICAK ICAgICAKICAgICAKCgogICAgIAoKCgogICAgICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAm JiBfX2ZpcnN0MiAhPSBfX2xhc3QyKQogICAgICAgIGlmIChfX2NvbXAoKl9fZmlyc3QyLCAqX19m aXJzdDEpKQogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIGVsc2UgaWYoX19jb21wKCpf X2ZpcnN0MSwgKl9fZmlyc3QyKSkKICAgICAgICAgICsrX19maXJzdDE7CiAgICAgICAgZWxzZQog ICAgICAgICAgKytfX2ZpcnN0MSwgKytfX2ZpcnN0MjsKCiAgICAgIHJldHVybiBfX2ZpcnN0MiA9 PSBfX2xhc3QyOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5h bWUgX0lucHV0SXRlcjIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyPgogICAgX091dHB1dEl0ZXIKICAg IHNldF91bmlvbihfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAg ICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwKICAg ICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCkKICAgIHsKCiAgICAgCiAgICAgCiAgICAg CgogICAgIAoKCiAgICAgCgoKICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19m aXJzdDIgIT0gX19sYXN0MikgewogICAgICAgIGlmICgqX19maXJzdDEgPCAqX19maXJzdDIpIHsK ICAgICAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsKICAgICAgICAgICsrX19maXJzdDE7CiAg ICAgICAgfQogICAgICAgIGVsc2UgaWYgKCpfX2ZpcnN0MiA8ICpfX2ZpcnN0MSkgewogICAgICAg ICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QyOwogICAgICAgICAgKytfX2ZpcnN0MjsKICAgICAgICB9 CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAqX19yZXN1bHQgPSAqX19maXJzdDE7CiAgICAgICAg ICArK19fZmlyc3QxOwogICAgICAgICAgKytfX2ZpcnN0MjsKICAgICAgICB9CiAgICAgICAgKytf X3Jlc3VsdDsKICAgICAgfQogICAgICByZXR1cm4gY29weShfX2ZpcnN0MiwgX19sYXN0MiwgY29w eShfX2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQpKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0lucHV0SXRlcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXIyLCB0eXBlbmFtZSBfT3V0cHV0SXRl ciwKICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIF9PdXRwdXRJdGVyCiAgICBzZXRf dW5pb24oX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAg ICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsCiAgICAgICAg ICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9Db21wYXJlIF9fY29tcCkKICAgIHsKCiAgICAg CiAgICAgCiAgICAgCgoKICAgICAKCiAgICAgCgoKCiAgICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBf X2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpIHsKICAgICAgICBpZiAoX19jb21wKCpfX2Zp cnN0MSwgKl9fZmlyc3QyKSkgewogICAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOwogICAg ICAgICAgKytfX2ZpcnN0MTsKICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAoX19jb21wKCpfX2Zp cnN0MiwgKl9fZmlyc3QxKSkgewogICAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QyOwogICAg ICAgICAgKytfX2ZpcnN0MjsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAqX19y ZXN1bHQgPSAqX19maXJzdDE7CiAgICAgICAgICArK19fZmlyc3QxOwogICAgICAgICAgKytfX2Zp cnN0MjsKICAgICAgICB9CiAgICAgICAgKytfX3Jlc3VsdDsKICAgICAgfQogICAgICByZXR1cm4g Y29weShfX2ZpcnN0MiwgX19sYXN0MiwgY29weShfX2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQp KTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcjEsIHR5cGVuYW1lIF9JbnB1 dEl0ZXIyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4KICAgIF9PdXRwdXRJdGVyCiAgICBzZXRfaW50 ZXJzZWN0aW9uKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAg ICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0 MiwKICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQpCiAgICB7CgogICAg IAogICAgIAogICAgIAoKICAgICAKCgogICAgIAoKCiAgICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBf X2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpCiAgICAgICAgaWYgKCpfX2ZpcnN0MSA8ICpf X2ZpcnN0MikKICAgICAgICAgICsrX19maXJzdDE7CiAgICAgICAgZWxzZSBpZiAoKl9fZmlyc3Qy IDwgKl9fZmlyc3QxKQogICAgICAgICAgKytfX2ZpcnN0MjsKICAgICAgICBlbHNlIHsKICAgICAg ICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsKICAgICAgICAgICsrX19maXJzdDE7CiAgICAgICAg ICArK19fZmlyc3QyOwogICAgICAgICAgKytfX3Jlc3VsdDsKICAgICAgICB9CiAgICAgIHJldHVy biBfX3Jlc3VsdDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcjEsIHR5cGVu YW1lIF9JbnB1dEl0ZXIyLCB0eXBlbmFtZSBfT3V0cHV0SXRlciwKICAgICAgICAgICB0eXBlbmFt ZSBfQ29tcGFyZT4KICAgIF9PdXRwdXRJdGVyCiAgICBzZXRfaW50ZXJzZWN0aW9uKF9JbnB1dEl0 ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICBf SW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAg ICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9Db21wYXJlIF9fY29tcCkKICAgIHsKCiAgICAg CiAgICAgCiAgICAgCgoKICAgICAKCiAgICAgCgoKCiAgICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBf X2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpCiAgICAgICAgaWYgKF9fY29tcCgqX19maXJz dDEsICpfX2ZpcnN0MikpCiAgICAgICAgICArK19fZmlyc3QxOwogICAgICAgIGVsc2UgaWYgKF9f Y29tcCgqX19maXJzdDIsICpfX2ZpcnN0MSkpCiAgICAgICAgICArK19fZmlyc3QyOwogICAgICAg IGVsc2UgewogICAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOwogICAgICAgICAgKytfX2Zp cnN0MTsKICAgICAgICAgICsrX19maXJzdDI7CiAgICAgICAgICArK19fcmVzdWx0OwogICAgICAg IH0KICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5w dXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0SXRlcjIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyPgogICAg X091dHB1dEl0ZXIKICAgIHNldF9kaWZmZXJlbmNlKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5w dXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIs IF9JbnB1dEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jl c3VsdCkKICAgIHsKCiAgICAgCiAgICAgCiAgICAgCgogICAgIAoKCiAgICAgCgoKICAgICAgd2hp bGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikKICAgICAgICBp ZiAoKl9fZmlyc3QxIDwgKl9fZmlyc3QyKSB7CiAgICAgICAgICAqX19yZXN1bHQgPSAqX19maXJz dDE7CiAgICAgICAgICArK19fZmlyc3QxOwogICAgICAgICAgKytfX3Jlc3VsdDsKICAgICAgICB9 CiAgICAgICAgZWxzZSBpZiAoKl9fZmlyc3QyIDwgKl9fZmlyc3QxKQogICAgICAgICAgKytfX2Zp cnN0MjsKICAgICAgICBlbHNlIHsKICAgICAgICAgICsrX19maXJzdDE7CiAgICAgICAgICArK19f Zmlyc3QyOwogICAgICAgIH0KICAgICAgcmV0dXJuIGNvcHkoX19maXJzdDEsIF9fbGFzdDEsIF9f cmVzdWx0KTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcjEsIHR5cGVuYW1l IF9JbnB1dEl0ZXIyLCB0eXBlbmFtZSBfT3V0cHV0SXRlciwKICAgICAgICAgICB0eXBlbmFtZSBf Q29tcGFyZT4KICAgIF9PdXRwdXRJdGVyCiAgICBzZXRfZGlmZmVyZW5jZShfSW5wdXRJdGVyMSBf X2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0 ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAgX091 dHB1dEl0ZXIgX19yZXN1bHQsIF9Db21wYXJlIF9fY29tcCkKICAgIHsKCiAgICAgCiAgICAgCiAg ICAgCgoKICAgICAKCiAgICAgCgoKCiAgICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYm IF9fZmlyc3QyICE9IF9fbGFzdDIpCiAgICAgICAgaWYgKF9fY29tcCgqX19maXJzdDEsICpfX2Zp cnN0MikpIHsKICAgICAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsKICAgICAgICAgICsrX19m aXJzdDE7CiAgICAgICAgICArK19fcmVzdWx0OwogICAgICAgIH0KICAgICAgICBlbHNlIGlmIChf X2NvbXAoKl9fZmlyc3QyLCAqX19maXJzdDEpKQogICAgICAgICAgKytfX2ZpcnN0MjsKICAgICAg ICBlbHNlIHsKICAgICAgICAgICsrX19maXJzdDE7CiAgICAgICAgICArK19fZmlyc3QyOwogICAg ICAgIH0KICAgICAgcmV0dXJuIGNvcHkoX19maXJzdDEsIF9fbGFzdDEsIF9fcmVzdWx0KTsKICAg IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXIy LCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4KICAgIF9PdXRwdXRJdGVyCiAgICBzZXRfc3ltbWV0cmlj X2RpZmZlcmVuY2UoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0 ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19y ZXN1bHQpCiAgICB7CgogICAgIAogICAgIAogICAgIAoKICAgICAKCgogICAgIAoKCiAgICAgIHdo aWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpCiAgICAgICAg aWYgKCpfX2ZpcnN0MSA8ICpfX2ZpcnN0MikgewogICAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmly c3QxOwogICAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgICAgICsrX19yZXN1bHQ7CiAgICAgICAg fQogICAgICAgIGVsc2UgaWYgKCpfX2ZpcnN0MiA8ICpfX2ZpcnN0MSkgewogICAgICAgICAgKl9f cmVzdWx0ID0gKl9fZmlyc3QyOwogICAgICAgICAgKytfX2ZpcnN0MjsKICAgICAgICAgICsrX19y ZXN1bHQ7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgKytfX2ZpcnN0MTsKICAg ICAgICAgICsrX19maXJzdDI7CiAgICAgICAgfQogICAgICByZXR1cm4gY29weShfX2ZpcnN0Miwg X19sYXN0MiwgY29weShfX2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQpKTsKICAgIH0KCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXIyLCB0eXBlbmFt ZSBfT3V0cHV0SXRlciwKICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIF9PdXRwdXRJ dGVyCiAgICBzZXRfc3ltbWV0cmljX2RpZmZlcmVuY2UoX0lucHV0SXRlcjEgX19maXJzdDEsIF9J bnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRl cjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg X0NvbXBhcmUgX19jb21wKQogICAgewoKICAgICAKICAgICAKICAgICAKCgogICAgIAoKICAgICAK CgoKICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0 MikKICAgICAgICBpZiAoX19jb21wKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkgewogICAgICAgICAg Kl9fcmVzdWx0ID0gKl9fZmlyc3QxOwogICAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgICAgICsr X19yZXN1bHQ7CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYgKF9fY29tcCgqX19maXJzdDIsICpf X2ZpcnN0MSkpIHsKICAgICAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MjsKICAgICAgICAgICsr X19maXJzdDI7CiAgICAgICAgICArK19fcmVzdWx0OwogICAgICAgIH0KICAgICAgICBlbHNlIHsK ICAgICAgICAgICsrX19maXJzdDE7CiAgICAgICAgICArK19fZmlyc3QyOwogICAgICAgIH0KICAg ICAgcmV0dXJuIGNvcHkoX19maXJzdDIsIF9fbGFzdDIsIGNvcHkoX19maXJzdDEsIF9fbGFzdDEs IF9fcmVzdWx0KSk7CiAgICB9CgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcj4K ICAgIF9Gb3J3YXJkSXRlcgogICAgbWF4X2VsZW1lbnQoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9G b3J3YXJkSXRlciBfX2xhc3QpCiAgICB7CgogICAgIAogICAgIAoKCiAgICAgIGlmIChfX2ZpcnN0 ID09IF9fbGFzdCkgcmV0dXJuIF9fZmlyc3Q7CiAgICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCA9 IF9fZmlyc3Q7CiAgICAgIHdoaWxlICgrK19fZmlyc3QgIT0gX19sYXN0KQogICAgICAgIGlmICgq X19yZXN1bHQgPCAqX19maXJzdCkKICAgICAgICAgIF9fcmVzdWx0ID0gX19maXJzdDsKICAgICAg cmV0dXJuIF9fcmVzdWx0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIs IHR5cGVuYW1lIF9Db21wYXJlPgogICAgX0ZvcndhcmRJdGVyCiAgICBtYXhfZWxlbWVudChfRm9y d2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgIF9D b21wYXJlIF9fY29tcCkKICAgIHsKCiAgICAgCiAgICAgCgoKCiAgICAgIGlmIChfX2ZpcnN0ID09 IF9fbGFzdCkgcmV0dXJuIF9fZmlyc3Q7CiAgICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCA9IF9f Zmlyc3Q7CiAgICAgIHdoaWxlICgrK19fZmlyc3QgIT0gX19sYXN0KQogICAgICAgIGlmIChfX2Nv bXAoKl9fcmVzdWx0LCAqX19maXJzdCkpIF9fcmVzdWx0ID0gX19maXJzdDsKICAgICAgcmV0dXJu IF9fcmVzdWx0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXI+CiAgICBf Rm9yd2FyZEl0ZXIKICAgIG1pbl9lbGVtZW50KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2Fy ZEl0ZXIgX19sYXN0KQogICAgewoKICAgICAKICAgICAKCgogICAgICBpZiAoX19maXJzdCA9PSBf X2xhc3QpIHJldHVybiBfX2ZpcnN0OwogICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQgPSBfX2Zp cnN0OwogICAgICB3aGlsZSAoKytfX2ZpcnN0ICE9IF9fbGFzdCkKICAgICAgICBpZiAoKl9fZmly c3QgPCAqX19yZXN1bHQpCiAgICAgICAgICBfX3Jlc3VsdCA9IF9fZmlyc3Q7CiAgICAgIHJldHVy biBfX3Jlc3VsdDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBl bmFtZSBfQ29tcGFyZT4KICAgIF9Gb3J3YXJkSXRlcgogICAgbWluX2VsZW1lbnQoX0ZvcndhcmRJ dGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICBfQ29tcGFy ZSBfX2NvbXApCiAgICB7CgogICAgIAogICAgIAoKCgogICAgICBpZiAoX19maXJzdCA9PSBfX2xh c3QpIHJldHVybiBfX2ZpcnN0OwogICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQgPSBfX2ZpcnN0 OwogICAgICB3aGlsZSAoKytfX2ZpcnN0ICE9IF9fbGFzdCkKICAgICAgICBpZiAoX19jb21wKCpf X2ZpcnN0LCAqX19yZXN1bHQpKQogICAgICAgICAgX19yZXN1bHQgPSBfX2ZpcnN0OwogICAgICBy ZXR1cm4gX19yZXN1bHQ7CiAgICB9CgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlv bmFsSXRlcj4KICAgIGJvb2wKICAgIG5leHRfcGVybXV0YXRpb24oX0JpZGlyZWN0aW9uYWxJdGVy IF9fZmlyc3QsIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QpCiAgICB7CgogICAgIAogICAgIAoK CiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg IF9CaWRpcmVjdGlvbmFsSXRlciBfX2kgPSBfX2ZpcnN0OwogICAgICArK19faTsKICAgICAgaWYg KF9faSA9PSBfX2xhc3QpCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICBfX2kgPSBfX2xhc3Q7 CiAgICAgIC0tX19pOwoKICAgICAgZm9yKDs7KSB7CiAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVy IF9faWkgPSBfX2k7CiAgICAgICAgLS1fX2k7CiAgICAgICAgaWYgKCpfX2kgPCAqX19paSkgewog ICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9faiA9IF9fbGFzdDsKICAgICAgICAgIHdoaWxl ICghKCpfX2kgPCAqLS1fX2opKQogICAgICAgICAgICB7fQogICAgICAgICAgaXRlcl9zd2FwKF9f aSwgX19qKTsKICAgICAgICAgIHJldmVyc2UoX19paSwgX19sYXN0KTsKICAgICAgICAgIHJldHVy biB0cnVlOwogICAgICAgIH0KICAgICAgICBpZiAoX19pID09IF9fZmlyc3QpIHsKICAgICAgICAg IHJldmVyc2UoX19maXJzdCwgX19sYXN0KTsKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAg ICB9CiAgICAgIH0KICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVy LCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIGJvb2wKICAgIG5leHRfcGVybXV0YXRpb24oX0JpZGly ZWN0aW9uYWxJdGVyIF9fZmlyc3QsIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QsCiAgICAgICAg ICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKICAgIHsKCiAgICAgCiAgICAgCgoKCiAgICAg IGlmIChfX2ZpcnN0ID09IF9fbGFzdCkKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIF9CaWRp cmVjdGlvbmFsSXRlciBfX2kgPSBfX2ZpcnN0OwogICAgICArK19faTsKICAgICAgaWYgKF9faSA9 PSBfX2xhc3QpCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICBfX2kgPSBfX2xhc3Q7CiAgICAg IC0tX19pOwoKICAgICAgZm9yKDs7KSB7CiAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9faWkg PSBfX2k7CiAgICAgICAgLS1fX2k7CiAgICAgICAgaWYgKF9fY29tcCgqX19pLCAqX19paSkpIHsK ICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2ogPSBfX2xhc3Q7CiAgICAgICAgICB3aGls ZSAoIV9fY29tcCgqX19pLCAqLS1fX2opKQogICAgICAgICAgICB7fQogICAgICAgICAgaXRlcl9z d2FwKF9faSwgX19qKTsKICAgICAgICAgIHJldmVyc2UoX19paSwgX19sYXN0KTsKICAgICAgICAg IHJldHVybiB0cnVlOwogICAgICAgIH0KICAgICAgICBpZiAoX19pID09IF9fZmlyc3QpIHsKICAg ICAgICAgIHJldmVyc2UoX19maXJzdCwgX19sYXN0KTsKICAgICAgICAgIHJldHVybiBmYWxzZTsK ICAgICAgICB9CiAgICAgIH0KICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9u YWxJdGVyPgogICAgYm9vbAogICAgcHJldl9wZXJtdXRhdGlvbihfQmlkaXJlY3Rpb25hbEl0ZXIg X19maXJzdCwgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCkKICAgIHsKCiAgICAgCiAgICAgCgoK ICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAg X0JpZGlyZWN0aW9uYWxJdGVyIF9faSA9IF9fZmlyc3Q7CiAgICAgICsrX19pOwogICAgICBpZiAo X19pID09IF9fbGFzdCkKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIF9faSA9IF9fbGFzdDsK ICAgICAgLS1fX2k7CgogICAgICBmb3IoOzspIHsKICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIg X19paSA9IF9faTsKICAgICAgICAtLV9faTsKICAgICAgICBpZiAoKl9faWkgPCAqX19pKSB7CiAg ICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19qID0gX19sYXN0OwogICAgICAgICAgd2hpbGUg KCEoKi0tX19qIDwgKl9faSkpCiAgICAgICAgICAgIHt9CiAgICAgICAgICBpdGVyX3N3YXAoX19p LCBfX2opOwogICAgICAgICAgcmV2ZXJzZShfX2lpLCBfX2xhc3QpOwogICAgICAgICAgcmV0dXJu IHRydWU7CiAgICAgICAgfQogICAgICAgIGlmIChfX2kgPT0gX19maXJzdCkgewogICAgICAgICAg cmV2ZXJzZShfX2ZpcnN0LCBfX2xhc3QpOwogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAg IH0KICAgICAgfQogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIs IHR5cGVuYW1lIF9Db21wYXJlPgogICAgYm9vbAogICAgcHJldl9wZXJtdXRhdGlvbihfQmlkaXJl Y3Rpb25hbEl0ZXIgX19maXJzdCwgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCwKICAgICAgICAg ICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQogICAgewoKICAgICAKICAgICAKCgoKICAgICAg aWYgKF9fZmlyc3QgPT0gX19sYXN0KQogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgX0JpZGly ZWN0aW9uYWxJdGVyIF9faSA9IF9fZmlyc3Q7CiAgICAgICsrX19pOwogICAgICBpZiAoX19pID09 IF9fbGFzdCkKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIF9faSA9IF9fbGFzdDsKICAgICAg LS1fX2k7CgogICAgICBmb3IoOzspIHsKICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19paSA9 IF9faTsKICAgICAgICAtLV9faTsKICAgICAgICBpZiAoX19jb21wKCpfX2lpLCAqX19pKSkgewog ICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9faiA9IF9fbGFzdDsKICAgICAgICAgIHdoaWxl ICghX19jb21wKCotLV9faiwgKl9faSkpCiAgICAgICAgICAgIHt9CiAgICAgICAgICBpdGVyX3N3 YXAoX19pLCBfX2opOwogICAgICAgICAgcmV2ZXJzZShfX2lpLCBfX2xhc3QpOwogICAgICAgICAg cmV0dXJuIHRydWU7CiAgICAgICAgfQogICAgICAgIGlmIChfX2kgPT0gX19maXJzdCkgewogICAg ICAgICAgcmV2ZXJzZShfX2ZpcnN0LCBfX2xhc3QpOwogICAgICAgICAgcmV0dXJuIGZhbHNlOwog ICAgICAgIH0KICAgICAgfQogICAgfQoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIs IHR5cGVuYW1lIF9Gb3J3YXJkSXRlcj4KICAgIF9JbnB1dEl0ZXIKICAgIGZpbmRfZmlyc3Rfb2Yo X0lucHV0SXRlciBfX2ZpcnN0MSwgX0lucHV0SXRlciBfX2xhc3QxLAogICAgICAgICAgICAgICAg ICBfRm9yd2FyZEl0ZXIgX19maXJzdDIsIF9Gb3J3YXJkSXRlciBfX2xhc3QyKQogICAgewoKICAg ICAKICAgICAKICAgICAKCgoKICAgICAgZm9yICggOyBfX2ZpcnN0MSAhPSBfX2xhc3QxOyArK19f Zmlyc3QxKQogICAgICAgIGZvciAoX0ZvcndhcmRJdGVyIF9faXRlciA9IF9fZmlyc3QyOyBfX2l0 ZXIgIT0gX19sYXN0MjsgKytfX2l0ZXIpCiAgICAgICAgICBpZiAoKl9fZmlyc3QxID09ICpfX2l0 ZXIpCiAgICAgICAgICAgIHJldHVybiBfX2ZpcnN0MTsKICAgICAgcmV0dXJuIF9fbGFzdDE7CiAg ICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9Gb3J3YXJkSXRl ciwgdHlwZW5hbWUgX0JpbmFyeVByZWRpY2F0ZT4KICAgIF9JbnB1dEl0ZXIKICAgIGZpbmRfZmly c3Rfb2YoX0lucHV0SXRlciBfX2ZpcnN0MSwgX0lucHV0SXRlciBfX2xhc3QxLAogICAgICAgICAg ICAgICAgICBfRm9yd2FyZEl0ZXIgX19maXJzdDIsIF9Gb3J3YXJkSXRlciBfX2xhc3QyLAogICAg ICAgICAgICAgICAgICBfQmluYXJ5UHJlZGljYXRlIF9fY29tcCkKICAgIHsKCiAgICAgCiAgICAg CiAgICAgCgoKICAgICAKCgoKICAgICAgZm9yICggOyBfX2ZpcnN0MSAhPSBfX2xhc3QxOyArK19f Zmlyc3QxKQogICAgICAgIGZvciAoX0ZvcndhcmRJdGVyIF9faXRlciA9IF9fZmlyc3QyOyBfX2l0 ZXIgIT0gX19sYXN0MjsgKytfX2l0ZXIpCiAgICAgICAgICBpZiAoX19jb21wKCpfX2ZpcnN0MSwg Kl9faXRlcikpCiAgICAgICAgICAgIHJldHVybiBfX2ZpcnN0MTsKICAgICAgcmV0dXJuIF9fbGFz dDE7CiAgICB9CiMgNDIwMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9iaXRzL3N0bF9hbGdvLmgi IDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIxLCB0eXBlbmFtZSBfRm9yd2FyZEl0 ZXIyPgogICAgX0ZvcndhcmRJdGVyMQogICAgX19maW5kX2VuZChfRm9yd2FyZEl0ZXIxIF9fZmly c3QxLCBfRm9yd2FyZEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcjIg X19maXJzdDIsIF9Gb3J3YXJkSXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAgZm9yd2FyZF9p dGVyYXRvcl90YWcsIGZvcndhcmRfaXRlcmF0b3JfdGFnKQogICAgewogICAgICBpZiAoX19maXJz dDIgPT0gX19sYXN0MikKICAgICAgICByZXR1cm4gX19sYXN0MTsKICAgICAgZWxzZSB7CiAgICAg ICAgX0ZvcndhcmRJdGVyMSBfX3Jlc3VsdCA9IF9fbGFzdDE7CiAgICAgICAgd2hpbGUgKDEpIHsK ICAgICAgICAgIF9Gb3J3YXJkSXRlcjEgX19uZXdfcmVzdWx0CiAgICAgICAgICAgID0gc2VhcmNo KF9fZmlyc3QxLCBfX2xhc3QxLCBfX2ZpcnN0MiwgX19sYXN0Mik7CiAgICAgICAgICBpZiAoX19u ZXdfcmVzdWx0ID09IF9fbGFzdDEpCiAgICAgICAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgICAg ICAgIGVsc2UgewogICAgICAgICAgICBfX3Jlc3VsdCA9IF9fbmV3X3Jlc3VsdDsKICAgICAgICAg ICAgX19maXJzdDEgPSBfX25ld19yZXN1bHQ7CiAgICAgICAgICAgICsrX19maXJzdDE7CiAgICAg ICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3 YXJkSXRlcjEsIHR5cGVuYW1lIF9Gb3J3YXJkSXRlcjIsCiAgICAgICAgICAgdHlwZW5hbWUgX0Jp bmFyeVByZWRpY2F0ZT4KICAgIF9Gb3J3YXJkSXRlcjEKICAgIF9fZmluZF9lbmQoX0ZvcndhcmRJ dGVyMSBfX2ZpcnN0MSwgX0ZvcndhcmRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICBfRm9y d2FyZEl0ZXIyIF9fZmlyc3QyLCBfRm9yd2FyZEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAg IGZvcndhcmRfaXRlcmF0b3JfdGFnLCBmb3J3YXJkX2l0ZXJhdG9yX3RhZywKICAgICAgICAgICAg ICAgX0JpbmFyeVByZWRpY2F0ZSBfX2NvbXApCiAgICB7CiAgICAgIGlmIChfX2ZpcnN0MiA9PSBf X2xhc3QyKQogICAgICAgIHJldHVybiBfX2xhc3QxOwogICAgICBlbHNlIHsKICAgICAgICBfRm9y d2FyZEl0ZXIxIF9fcmVzdWx0ID0gX19sYXN0MTsKICAgICAgICB3aGlsZSAoMSkgewogICAgICAg ICAgX0ZvcndhcmRJdGVyMSBfX25ld19yZXN1bHQKICAgICAgICAgICAgPSBzZWFyY2goX19maXJz dDEsIF9fbGFzdDEsIF9fZmlyc3QyLCBfX2xhc3QyLCBfX2NvbXApOwogICAgICAgICAgaWYgKF9f bmV3X3Jlc3VsdCA9PSBfX2xhc3QxKQogICAgICAgICAgICByZXR1cm4gX19yZXN1bHQ7CiAgICAg ICAgICBlbHNlIHsKICAgICAgICAgICAgX19yZXN1bHQgPSBfX25ld19yZXN1bHQ7CiAgICAgICAg ICAgIF9fZmlyc3QxID0gX19uZXdfcmVzdWx0OwogICAgICAgICAgICArK19fZmlyc3QxOwogICAg ICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0Jp ZGlyZWN0aW9uYWxJdGVyMSwgdHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyMj4KICAgIF9CaWRp cmVjdGlvbmFsSXRlcjEKICAgIF9fZmluZF9lbmQoX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2ZpcnN0 MSwgX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICBfQmlkaXJlY3Rp b25hbEl0ZXIyIF9fZmlyc3QyLCBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fbGFzdDIsCiAgICAgICAg ICAgICAgIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnLCBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9y X3RhZykKICAgIHsKCiAgICAgCiAgICAgCgogICAgICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8 X0JpZGlyZWN0aW9uYWxJdGVyMT4gX1Jldkl0ZXIxOwogICAgICB0eXBlZGVmIHJldmVyc2VfaXRl cmF0b3I8X0JpZGlyZWN0aW9uYWxJdGVyMj4gX1Jldkl0ZXIyOwoKICAgICAgX1Jldkl0ZXIxIF9f cmxhc3QxKF9fZmlyc3QxKTsKICAgICAgX1Jldkl0ZXIyIF9fcmxhc3QyKF9fZmlyc3QyKTsKICAg ICAgX1Jldkl0ZXIxIF9fcnJlc3VsdCA9IHNlYXJjaChfUmV2SXRlcjEoX19sYXN0MSksIF9fcmxh c3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SZXZJdGVyMihfX2xhc3Qy KSwgX19ybGFzdDIpOwoKICAgICAgaWYgKF9fcnJlc3VsdCA9PSBfX3JsYXN0MSkKICAgICAgICBy ZXR1cm4gX19sYXN0MTsKICAgICAgZWxzZSB7CiAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMSBf X3Jlc3VsdCA9IF9fcnJlc3VsdC5iYXNlKCk7CiAgICAgICAgYWR2YW5jZShfX3Jlc3VsdCwgLWRp c3RhbmNlKF9fZmlyc3QyLCBfX2xhc3QyKSk7CiAgICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAg ICB9CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcjEsIHR5cGVu YW1lIF9CaWRpcmVjdGlvbmFsSXRlcjIsCiAgICAgICAgICAgdHlwZW5hbWUgX0JpbmFyeVByZWRp Y2F0ZT4KICAgIF9CaWRpcmVjdGlvbmFsSXRlcjEKICAgIF9fZmluZF9lbmQoX0JpZGlyZWN0aW9u YWxJdGVyMSBfX2ZpcnN0MSwgX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2xhc3QxLAogICAgICAgICAg ICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fZmlyc3QyLCBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9f bGFzdDIsCiAgICAgICAgICAgICAgIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnLCBiaWRpcmVj dGlvbmFsX2l0ZXJhdG9yX3RhZywKICAgICAgICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2Nv bXApCiAgICB7CgogICAgIAogICAgIAoKICAgICAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9yPF9C aWRpcmVjdGlvbmFsSXRlcjE+IF9SZXZJdGVyMTsKICAgICAgdHlwZWRlZiByZXZlcnNlX2l0ZXJh dG9yPF9CaWRpcmVjdGlvbmFsSXRlcjI+IF9SZXZJdGVyMjsKCiAgICAgIF9SZXZJdGVyMSBfX3Js YXN0MShfX2ZpcnN0MSk7CiAgICAgIF9SZXZJdGVyMiBfX3JsYXN0MihfX2ZpcnN0Mik7CiAgICAg IF9SZXZJdGVyMSBfX3JyZXN1bHQgPSBzZWFyY2goX1Jldkl0ZXIxKF9fbGFzdDEpLCBfX3JsYXN0 MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmV2SXRlcjIoX19sYXN0Miks IF9fcmxhc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7Cgog ICAgICBpZiAoX19ycmVzdWx0ID09IF9fcmxhc3QxKQogICAgICAgIHJldHVybiBfX2xhc3QxOwog ICAgICBlbHNlIHsKICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fcmVzdWx0ID0gX19ycmVz dWx0LmJhc2UoKTsKICAgICAgICBhZHZhbmNlKF9fcmVzdWx0LCAtZGlzdGFuY2UoX19maXJzdDIs IF9fbGFzdDIpKTsKICAgICAgICByZXR1cm4gX19yZXN1bHQ7CiAgICAgIH0KICAgIH0KCgoKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIxLCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXIyPgog ICAgaW5saW5lIF9Gb3J3YXJkSXRlcjEKICAgIGZpbmRfZW5kKF9Gb3J3YXJkSXRlcjEgX19maXJz dDEsIF9Gb3J3YXJkSXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcjIgX19m aXJzdDIsIF9Gb3J3YXJkSXRlcjIgX19sYXN0MikKICAgIHsKCiAgICAgCiAgICAgCiAgICAgCgoK CiAgICAgIHJldHVybiBfX2ZpbmRfZW5kKF9fZmlyc3QxLCBfX2xhc3QxLCBfX2ZpcnN0MiwgX19s YXN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0 MSksCiAgICAgICAgICAgICAgICAgICAgICAgIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdDIp KTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyMSwgdHlwZW5hbWUgX0Zv cndhcmRJdGVyMiwKICAgICAgICAgICB0eXBlbmFtZSBfQmluYXJ5UHJlZGljYXRlPgogICAgaW5s aW5lIF9Gb3J3YXJkSXRlcjEKICAgIGZpbmRfZW5kKF9Gb3J3YXJkSXRlcjEgX19maXJzdDEsIF9G b3J3YXJkSXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcjIgX19maXJzdDIs IF9Gb3J3YXJkSXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgIF9CaW5hcnlQcmVkaWNhdGUgX19j b21wKQogICAgewoKICAgICAKICAgICAKICAgICAKCgoKICAgICAgcmV0dXJuIF9fZmluZF9lbmQo X19maXJzdDEsIF9fbGFzdDEsIF9fZmlyc3QyLCBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAg ICAgICBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QxKSwKICAgICAgICAgICAgICAgICAgICAg ICAgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0MiksCiAgICAgICAgICAgICAgICAgICAgICAg IF9fY29tcCk7CiAgICB9Cgp9CiMgNzAgIi91c3IvaW5jbHVkZS9jKysvMy4yLjEvYWxnb3JpdGht IiAyIDMKIyA1NyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9zdHJpbmciIDIgMwojIDEgIi91c3Iv aW5jbHVkZS9jKysvMy4yLjEvYml0cy9iYXNpY19zdHJpbmcudGNjIiAxIDMKIyA0NSAiL3Vzci9p bmNsdWRlL2MrKy8zLjIuMS9iaXRzL2Jhc2ljX3N0cmluZy50Y2MiIDMKCm5hbWVzcGFjZSBzdGQK ewogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUg X0FsbG9jPgogICAgY29uc3QgdHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywg X0FsbG9jPjo6c2l6ZV90eXBlCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxs b2M+OjoKICAgIF9SZXA6Ol9TX21heF9zaXplID0gKCgobnBvcyAtIHNpemVvZihfUmVwKSkvc2l6 ZW9mKF9DaGFyVCkpIC0gMSkgLyA0OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu YW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGNvbnN0IF9DaGFyVAogICAgYmFzaWNf c3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBfUmVwOjpfU190ZXJtaW5hbCA9 IF9DaGFyVCgpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMs IHR5cGVuYW1lIF9BbGxvYz4KICAgIGNvbnN0IHR5cGVuYW1lIGJhc2ljX3N0cmluZzxfQ2hhclQs IF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1Ry YWl0cywgX0FsbG9jPjo6bnBvczsKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu YW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVuYW1lIGJhc2ljX3N0cmluZzxf Q2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQogICAgYmFzaWNfc3RyaW5nPF9DaGFy VCwgX1RyYWl0cywgX0FsbG9jPjo6X1NfZW1wdHlfcmVwX3N0b3JhZ2VbCiAgICAoc2l6ZW9mKF9S ZXApICsgc2l6ZW9mKF9DaGFyVCkgKyBzaXplb2Yoc2l6ZV90eXBlKSAtIDEpL3NpemVvZihzaXpl X3R5cGUpXTsKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0 cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdGVtcGxhdGU8dHlwZW5hbWUgX0luSXRlcj4KICAgICAg X0NoYXJUKgogICAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAg ICAgX1NfY29uc3RydWN0KF9Jbkl0ZXIgX19iZWcsIF9Jbkl0ZXIgX19lbmQsIGNvbnN0IF9BbGxv YyYgX19hLAogICAgICAgICAgICAgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFnKQogICAgICB7CiAg ICAgICAgaWYgKF9fYmVnID09IF9fZW5kICYmIF9fYSA9PSBfQWxsb2MoKSkKICAgICAgICAgIHJl dHVybiBfU19lbXB0eV9yZXAoKS5fTV9yZWZjb3B5KCk7CgogICAgICAgIF9DaGFyVCBfX2J1Zlsx MDBdOwogICAgICAgIHNpemVfdHlwZSBfX2kgPSAwOwogICAgICAgIHdoaWxlIChfX2JlZyAhPSBf X2VuZCAmJiBfX2kgPCBzaXplb2YoX19idWYpIC8gc2l6ZW9mKF9DaGFyVCkpCiAgICAgICAgICB7 CiAgICAgICAgICAgIF9fYnVmW19faSsrXSA9ICpfX2JlZzsKICAgICAgICAgICAgKytfX2JlZzsK ICAgICAgICAgIH0KICAgICAgICBfUmVwKiBfX3IgPSBfUmVwOjpfU19jcmVhdGUoX19pLCBfX2Ep OwogICAgICAgIHRyYWl0c190eXBlOjpjb3B5KF9fci0+X01fcmVmZGF0YSgpLCBfX2J1ZiwgX19p KTsKICAgICAgICBfX3ItPl9NX2xlbmd0aCA9IF9faTsKICAgICAgICB0cnkKICAgICAgICAgIHsK CgoKICAgICAgICAgICAgZm9yICg7OykKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBf Q2hhclQqIF9fcCA9IF9fci0+X01fcmVmZGF0YSgpICsgX19yLT5fTV9sZW5ndGg7CiAgICAgICAg ICAgICAgICBfQ2hhclQqIF9fbGFzdCA9IF9fci0+X01fcmVmZGF0YSgpICsgX19yLT5fTV9jYXBh Y2l0eTsKICAgICAgICAgICAgICAgIGZvciAoOzspCiAgICAgICAgICAgICAgICAgIHsKICAgICAg ICAgICAgICAgICAgICBpZiAoX19iZWcgPT0gX19lbmQpCiAgICAgICAgICAgICAgICAgICAgICB7 CiAgICAgICAgICAgICAgICAgICAgICAgIF9fci0+X01fbGVuZ3RoID0gX19wIC0gX19yLT5fTV9y ZWZkYXRhKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICpfX3AgPSBfUmVwOjpfU190ZXJtaW5h bDsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9fci0+X01fcmVmZGF0YSgpOwogICAg ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGlmIChfX3AgPT0gX19sYXN0 KQogICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgKl9fcCsr ID0gKl9fYmVnOwogICAgICAgICAgICAgICAgICAgICsrX19iZWc7CiAgICAgICAgICAgICAgICAg IH0KCiAgICAgICAgICAgICAgICBzaXplX3R5cGUgX19sZW4gPSBfX3AgLSBfX3ItPl9NX3JlZmRh dGEoKTsKICAgICAgICAgICAgICAgIF9SZXAqIF9fYW5vdGhlciA9IF9SZXA6Ol9TX2NyZWF0ZShf X2xlbiArIDEsIF9fYSk7CiAgICAgICAgICAgICAgICB0cmFpdHNfdHlwZTo6Y29weShfX2Fub3Ro ZXItPl9NX3JlZmRhdGEoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fci0+ X01fcmVmZGF0YSgpLCBfX2xlbik7CiAgICAgICAgICAgICAgICBfX3ItPl9NX2Rlc3Ryb3koX19h KTsKICAgICAgICAgICAgICAgIF9fciA9IF9fYW5vdGhlcjsKICAgICAgICAgICAgICAgIF9fci0+ X01fbGVuZ3RoID0gX19sZW47CiAgICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIGNh dGNoKC4uLikKICAgICAgICAgIHsKICAgICAgICAgICAgX19yLT5fTV9kZXN0cm95KF9fYSk7CiAg ICAgICAgICAgIHRocm93OwogICAgICAgICAgfQogICAgICAgIHJldHVybiAwOwogICAgICB9Cgog IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0Fs bG9jPgogICAgdGVtcGxhdGUgPGNsYXNzIF9Jbkl0ZXI+CiAgICAgIF9DaGFyVCoKICAgICAgYmFz aWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICAgIF9TX2NvbnN0cnVjdChf SW5JdGVyIF9fYmVnLCBfSW5JdGVyIF9fZW5kLCBjb25zdCBfQWxsb2MmIF9fYSwKICAgICAgICAg ICAgICAgICAgIGZvcndhcmRfaXRlcmF0b3JfdGFnKQogICAgICB7CiAgICAgICAgc2l6ZV90eXBl IF9fZG5ldyA9IHN0YXRpY19jYXN0PHNpemVfdHlwZT4oZGlzdGFuY2UoX19iZWcsIF9fZW5kKSk7 CgogICAgICAgIGlmIChfX2JlZyA9PSBfX2VuZCAmJiBfX2EgPT0gX0FsbG9jKCkpCiAgICAgICAg ICByZXR1cm4gX1NfZW1wdHlfcmVwKCkuX01fcmVmY29weSgpOwoKCiAgICAgICAgaWYgKF9fYnVp bHRpbl9leHBlY3QoX19iZWcgPT0gX0luSXRlcigpLCAwKSkKICAgICAgICAgIF9fdGhyb3dfbG9n aWNfZXJyb3IoImF0dGVtcHQgdG8gY3JlYXRlIHN0cmluZyB3aXRoIG51bGwgcG9pbnRlciIpOwoK CiAgICAgICAgX1JlcCogX19yID0gX1JlcDo6X1NfY3JlYXRlKF9fZG5ldywgX19hKTsKICAgICAg ICB0cnkKICAgICAgICAgIHsgX1NfY29weV9jaGFycyhfX3ItPl9NX3JlZmRhdGEoKSwgX19iZWcs IF9fZW5kKTsgfQogICAgICAgIGNhdGNoKC4uLikKICAgICAgICAgIHsKICAgICAgICAgICAgX19y LT5fTV9kZXN0cm95KF9fYSk7CiAgICAgICAgICAgIHRocm93OwogICAgICAgICAgfQogICAgICAg IF9fci0+X01fbGVuZ3RoID0gX19kbmV3OwoKICAgICAgICBfX3ItPl9NX3JlZmRhdGEoKVtfX2Ru ZXddID0gX1JlcDo6X1NfdGVybWluYWw7CiAgICAgICAgcmV0dXJuIF9fci0+X01fcmVmZGF0YSgp OwogICAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywg dHlwZW5hbWUgX0FsbG9jPgogICAgX0NoYXJUKgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1Ry YWl0cywgX0FsbG9jPjo6CiAgICBfU19jb25zdHJ1Y3Qoc2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9f YywgY29uc3QgX0FsbG9jJiBfX2EpCiAgICB7CiAgICAgIGlmIChfX24gPT0gMCAmJiBfX2EgPT0g X0FsbG9jKCkpCiAgICAgICAgcmV0dXJuIF9TX2VtcHR5X3JlcCgpLl9NX3JlZmNvcHkoKTsKCgog ICAgICBfUmVwKiBfX3IgPSBfUmVwOjpfU19jcmVhdGUoX19uLCBfX2EpOwogICAgICB0cnkKICAg ICAgICB7CiAgICAgICAgICBpZiAoX19uKQogICAgICAgICAgICB0cmFpdHNfdHlwZTo6YXNzaWdu KF9fci0+X01fcmVmZGF0YSgpLCBfX24sIF9fYyk7CiAgICAgICAgfQogICAgICBjYXRjaCguLi4p CiAgICAgICAgewogICAgICAgICAgX19yLT5fTV9kZXN0cm95KF9fYSk7CiAgICAgICAgICB0aHJv dzsKICAgICAgICB9CiAgICAgIF9fci0+X01fbGVuZ3RoID0gX19uOwogICAgICBfX3ItPl9NX3Jl ZmRhdGEoKVtfX25dID0gX1JlcDo6X1NfdGVybWluYWw7CiAgICAgIHJldHVybiBfX3ItPl9NX3Jl ZmRhdGEoKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh aXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBf QWxsb2M+OjoKICAgIGJhc2ljX3N0cmluZyhjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyKQogICAg OiBfTV9kYXRhcGx1cyhfX3N0ci5fTV9yZXAoKS0+X01fZ3JhYihfQWxsb2MoKSwgX19zdHIuZ2V0 X2FsbG9jYXRvcigpKSwKICAgICAgICAgICAgICAgICBfX3N0ci5nZXRfYWxsb2NhdG9yKCkpCiAg ICB7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBl bmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoK ICAgIGJhc2ljX3N0cmluZyhjb25zdCBfQWxsb2MmIF9fYSkKICAgIDogX01fZGF0YXBsdXMoX1Nf Y29uc3RydWN0KHNpemVfdHlwZSgpLCBfQ2hhclQoKSwgX19hKSwgX19hKQogICAgeyB9CgogIHRl bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9j PgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBiYXNpY19z dHJpbmcoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5 cGUgX19uKQogICAgOiBfTV9kYXRhcGx1cyhfU19jb25zdHJ1Y3QoX19zdHIuX01fY2hlY2soX19w b3MpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zdHIuX01fZm9sZChfX3Bvcywg X19uKSwgX0FsbG9jKCkpLCBfQWxsb2MoKSkKICAgIHsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmlu ZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgYmFzaWNfc3RyaW5nKGNvbnN0IGJhc2lj X3N0cmluZyYgX19zdHIsIHNpemVfdHlwZSBfX3BvcywKICAgICAgICAgICAgICAgICBzaXplX3R5 cGUgX19uLCBjb25zdCBfQWxsb2MmIF9fYSkKICAgIDogX01fZGF0YXBsdXMoX1NfY29uc3RydWN0 KF9fc3RyLl9NX2NoZWNrKF9fcG9zKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9f c3RyLl9NX2ZvbGQoX19wb3MsIF9fbiksIF9fYSksIF9fYSkKICAgIHsgfQoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJh c2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgYmFzaWNfc3RyaW5nKGNv bnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19uLCBjb25zdCBfQWxsb2MmIF9fYSkKICAgIDog X01fZGF0YXBsdXMoX1NfY29uc3RydWN0KF9fcywgX19zICsgX19uLCBfX2EpLCBfX2EpCiAgICB7 IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFt ZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAg IGJhc2ljX3N0cmluZyhjb25zdCBfQ2hhclQqIF9fcywgY29uc3QgX0FsbG9jJiBfX2EpCiAgICA6 IF9NX2RhdGFwbHVzKF9TX2NvbnN0cnVjdChfX3MsIF9fcyA/IF9fcyArIHRyYWl0c190eXBlOjps ZW5ndGgoX19zKSA6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3MgKyBucG9zLCBf X2EpLCBfX2EpCiAgICB7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf VHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRz LCBfQWxsb2M+OjoKICAgIGJhc2ljX3N0cmluZyhzaXplX3R5cGUgX19uLCBfQ2hhclQgX19jLCBj b25zdCBfQWxsb2MmIF9fYSkKICAgIDogX01fZGF0YXBsdXMoX1NfY29uc3RydWN0KF9fbiwgX19j LCBfX2EpLCBfX2EpCiAgICB7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt ZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJ dGVyPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBiYXNp Y19zdHJpbmcoX0lucHV0SXRlciBfX2JlZywgX0lucHV0SXRlciBfX2VuZCwgY29uc3QgX0FsbG9j JiBfX2EpCiAgICA6IF9NX2RhdGFwbHVzKF9TX2NvbnN0cnVjdChfX2JlZywgX19lbmQsIF9fYSks IF9fYSkKICAgIHsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp dHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9B bGxvYz4mCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+Ojphc3NpZ24o Y29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cikKICAgIHsKICAgICAgaWYgKF9NX3JlcCgpICE9IF9f c3RyLl9NX3JlcCgpKQogICAgICAgIHsKCiAgICAgICAgICBhbGxvY2F0b3JfdHlwZSBfX2EgPSB0 aGlzLT5nZXRfYWxsb2NhdG9yKCk7CiAgICAgICAgICBfQ2hhclQqIF9fdG1wID0gX19zdHIuX01f cmVwKCktPl9NX2dyYWIoX19hLCBfX3N0ci5nZXRfYWxsb2NhdG9yKCkpOwogICAgICAgICAgX01f cmVwKCktPl9NX2Rpc3Bvc2UoX19hKTsKICAgICAgICAgIF9NX2RhdGEoX190bXApOwogICAgICAg IH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs IHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHZvaWQKICAgIGJhc2ljX3N0 cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Ol9SZXA6OgogICAgX01fZGVzdHJveShjb25z dCBfQWxsb2MmIF9fYSkgdGhyb3cgKCkKICAgIHsKICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHNp emVvZihfUmVwKSArIChfTV9jYXBhY2l0eSArIDEpICogc2l6ZW9mKF9DaGFyVCk7CiAgICAgIF9S YXdfYnl0ZXNfYWxsb2MoX19hKS5kZWFsbG9jYXRlKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHRo aXMpLCBfX3NpemUpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l IF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHZvaWQKICAgIGJhc2ljX3N0cmluZzxfQ2hh clQsIF9UcmFpdHMsIF9BbGxvYz46Ol9NX2xlYWtfaGFyZCgpCiAgICB7CiAgICAgIGlmIChfTV9y ZXAoKS0+X01faXNfc2hhcmVkKCkpCiAgICAgICAgX01fbXV0YXRlKDAsIDAsIDApOwogICAgICBf TV9yZXAoKS0+X01fc2V0X2xlYWtlZCgpOwogICAgfQoKCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHZvaWQKICAg IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgX01fbXV0YXRlKHNp emVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbGVuMSwgc2l6ZV90eXBlIF9fbGVuMikKICAgIHsK ICAgICAgc2l6ZV90eXBlIF9fb2xkX3NpemUgPSB0aGlzLT5zaXplKCk7CiAgICAgIGNvbnN0IHNp emVfdHlwZSBfX25ld19zaXplID0gX19vbGRfc2l6ZSArIF9fbGVuMiAtIF9fbGVuMTsKICAgICAg Y29uc3QgX0NoYXJUKiBfX3NyYyA9IF9NX2RhdGEoKSArIF9fcG9zICsgX19sZW4xOwogICAgICBj b25zdCBzaXplX3R5cGUgX19ob3dfbXVjaCA9IF9fb2xkX3NpemUgLSBfX3BvcyAtIF9fbGVuMTsK CiAgICAgIGlmIChfTV9yZXAoKS0+X01faXNfc2hhcmVkKCkgfHwgX19uZXdfc2l6ZSA+IGNhcGFj aXR5KCkpCiAgICAgICAgewoKICAgICAgICAgIGFsbG9jYXRvcl90eXBlIF9fYSA9IGdldF9hbGxv Y2F0b3IoKTsKCgogICAgICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fcGFnZXNpemUgPSA0MDk2Owog ICAgICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fbWFsbG9jX2hlYWRlcl9zaXplID0gNCAqIHNpemVv ZiAodm9pZCopOwoKICAgICAgICAgIGNvbnN0IHNpemVfdHlwZSBfX3BhZ2VfY2FwYWNpdHkgPSAo X19wYWdlc2l6ZSAtIF9fbWFsbG9jX2hlYWRlcl9zaXplCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIC0gc2l6ZW9mKF9SZXApIC0gc2l6ZW9mKF9DaGFyVCkpCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gc2l6ZW9mKF9DaGFy VCk7CiAgICAgICAgICBfUmVwKiBfX3I7CiAgICAgICAgICBpZiAoX19uZXdfc2l6ZSA+IGNhcGFj aXR5KCkgJiYgX19uZXdfc2l6ZSA+IF9fcGFnZV9jYXBhY2l0eSkKCiAgICAgICAgICAgIF9fciA9 IF9SZXA6Ol9TX2NyZWF0ZShfX25ld19zaXplID4gMipjYXBhY2l0eSgpID8KICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIF9fbmV3X3NpemUgOiAyKmNhcGFjaXR5KCksIF9fYSk7CiAg ICAgICAgICBlbHNlCiAgICAgICAgICAgIF9fciA9IF9SZXA6Ol9TX2NyZWF0ZShfX25ld19zaXpl LCBfX2EpOwogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpZiAoX19w b3MpCiAgICAgICAgICAgICAgICB0cmFpdHNfdHlwZTo6Y29weShfX3ItPl9NX3JlZmRhdGEoKSwg X01fZGF0YSgpLCBfX3Bvcyk7CiAgICAgICAgICAgICAgaWYgKF9faG93X211Y2gpCiAgICAgICAg ICAgICAgICB0cmFpdHNfdHlwZTo6Y29weShfX3ItPl9NX3JlZmRhdGEoKSArIF9fcG9zICsgX19s ZW4yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zcmMsIF9faG93X211Y2gp OwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaCguLi4pCiAgICAgICAgICAgIHsKICAgICAg ICAgICAgICBfX3ItPl9NX2Rpc3Bvc2UoZ2V0X2FsbG9jYXRvcigpKTsKICAgICAgICAgICAgICB0 aHJvdzsKICAgICAgICAgICAgfQogICAgICAgICAgX01fcmVwKCktPl9NX2Rpc3Bvc2UoX19hKTsK ICAgICAgICAgIF9NX2RhdGEoX19yLT5fTV9yZWZkYXRhKCkpOwogICAgICB9CiAgICAgIGVsc2Ug aWYgKF9faG93X211Y2ggJiYgX19sZW4xICE9IF9fbGVuMikKICAgICAgICB7CgogICAgICAgICAg dHJhaXRzX3R5cGU6Om1vdmUoX01fZGF0YSgpICsgX19wb3MgKyBfX2xlbjIsIF9fc3JjLCBfX2hv d19tdWNoKTsKICAgICAgICB9CiAgICAgIF9NX3JlcCgpLT5fTV9zZXRfc2hhcmFibGUoKTsKICAg ICAgX01fcmVwKCktPl9NX2xlbmd0aCA9IF9fbmV3X3NpemU7CiAgICAgIF9NX2RhdGEoKVtfX25l d19zaXplXSA9IF9SZXA6Ol9TX3Rlcm1pbmFsOwoKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB2b2lkCiAgICBi YXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpyZXNlcnZlKHNpemVfdHlwZSBf X3JlcykKICAgIHsKICAgICAgaWYgKF9fcmVzID4gdGhpcy0+Y2FwYWNpdHkoKSB8fCBfTV9yZXAo KS0+X01faXNfc2hhcmVkKCkpCiAgICAgICAgewogICAgICAgICAgaWYgKF9fcmVzID4gdGhpcy0+ bWF4X3NpemUoKSkKICAgICAgICAgICAgX190aHJvd19sZW5ndGhfZXJyb3IoImJhc2ljX3N0cmlu Zzo6cmVzZXJ2ZSIpOwoKICAgICAgICAgIGlmIChfX3JlcyA8IHRoaXMtPnNpemUoKSkKICAgICAg ICAgICAgX19yZXMgPSB0aGlzLT5zaXplKCk7CiAgICAgICAgICBhbGxvY2F0b3JfdHlwZSBfX2Eg PSBnZXRfYWxsb2NhdG9yKCk7CiAgICAgICAgICBfQ2hhclQqIF9fdG1wID0gX01fcmVwKCktPl9N X2Nsb25lKF9fYSwgX19yZXMgLSB0aGlzLT5zaXplKCkpOwogICAgICAgICAgX01fcmVwKCktPl9N X2Rpc3Bvc2UoX19hKTsKICAgICAgICAgIF9NX2RhdGEoX190bXApOwogICAgICAgIH0KICAgIH0K CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBf QWxsb2M+CiAgICB2b2lkIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnN3 YXAoYmFzaWNfc3RyaW5nJiBfX3MpCiAgICB7CiAgICAgIGlmIChfTV9yZXAoKS0+X01faXNfbGVh a2VkKCkpCiAgICAgICAgX01fcmVwKCktPl9NX3NldF9zaGFyYWJsZSgpOwogICAgICBpZiAoX19z Ll9NX3JlcCgpLT5fTV9pc19sZWFrZWQoKSkKICAgICAgICBfX3MuX01fcmVwKCktPl9NX3NldF9z aGFyYWJsZSgpOwogICAgICBpZiAodGhpcy0+Z2V0X2FsbG9jYXRvcigpID09IF9fcy5nZXRfYWxs b2NhdG9yKCkpCiAgICAgICAgewogICAgICAgICAgX0NoYXJUKiBfX3RtcCA9IF9NX2RhdGEoKTsK ICAgICAgICAgIF9NX2RhdGEoX19zLl9NX2RhdGEoKSk7CiAgICAgICAgICBfX3MuX01fZGF0YShf X3RtcCk7CiAgICAgICAgfQoKICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgIGJhc2ljX3N0 cmluZyBfX3RtcDEoX01faWJlZ2luKCksIF9NX2llbmQoKSwgX19zLmdldF9hbGxvY2F0b3IoKSk7 CiAgICAgICAgICBiYXNpY19zdHJpbmcgX190bXAyKF9fcy5fTV9pYmVnaW4oKSwgX19zLl9NX2ll bmQoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+Z2V0X2FsbG9jYXRvcigp KTsKICAgICAgICAgICp0aGlzID0gX190bXAyOwogICAgICAgICAgX19zID0gX190bXAxOwogICAg ICAgIH0KICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz LCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0eXBlbmFtZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJh aXRzLCBfQWxsb2M+OjpfUmVwKgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0Fs bG9jPjo6X1JlcDo6CiAgICBfU19jcmVhdGUoc2l6ZV90IF9fY2FwYWNpdHksIGNvbnN0IF9BbGxv YyYgX19hbGxvYykKICAgIHsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJh aXRzLCBfQWxsb2M+IF9fc3RyaW5nX3R5cGU7CgoKICAgICAgaWYgKF9fY2FwYWNpdHkgPiBfU19t YXhfc2l6ZSkKCgoKICAgICAgICBfX3Rocm93X2xlbmd0aF9lcnJvcigiYmFzaWNfc3RyaW5nOjpf U19jcmVhdGUiKTsKCgoKCiAgICAgIHNpemVfdCBfX3NpemUgPSAoX19jYXBhY2l0eSArIDEpICog c2l6ZW9mKF9DaGFyVCkgKyBzaXplb2YoX1JlcCk7CiMgNDIxICIvdXNyL2luY2x1ZGUvYysrLzMu Mi4xL2JpdHMvYmFzaWNfc3RyaW5nLnRjYyIgMwogICAgICBjb25zdCBzaXplX3QgX19wYWdlc2l6 ZSA9IDQwOTY7CiAgICAgIGNvbnN0IHNpemVfdCBfX3N1YnBhZ2VzaXplID0gMTI4OwogICAgICBj b25zdCBzaXplX3QgX19tYWxsb2NfaGVhZGVyX3NpemUgPSA0ICogc2l6ZW9mICh2b2lkKik7CiAg ICAgIGlmICgoX19zaXplICsgX19tYWxsb2NfaGVhZGVyX3NpemUpID4gX19wYWdlc2l6ZSkKICAg ICAgICB7CiAgICAgICAgICBzaXplX3QgX19leHRyYSA9CiAgICAgICAgICAgIChfX3BhZ2VzaXpl IC0gKChfX3NpemUgKyBfX21hbGxvY19oZWFkZXJfc2l6ZSkgJSBfX3BhZ2VzaXplKSkKICAgICAg ICAgICAgJSBfX3BhZ2VzaXplOwogICAgICAgICAgX19jYXBhY2l0eSArPSBfX2V4dHJhIC8gc2l6 ZW9mKF9DaGFyVCk7CiAgICAgICAgICBfX3NpemUgPSAoX19jYXBhY2l0eSArIDEpICogc2l6ZW9m KF9DaGFyVCkgKyBzaXplb2YoX1JlcCk7CiAgICAgICAgfQogICAgICBlbHNlIGlmIChfX3NpemUg PiBfX3N1YnBhZ2VzaXplKQogICAgICAgIHsKICAgICAgICAgIHNpemVfdCBfX2V4dHJhID0KICAg ICAgICAgICAgKF9fc3VicGFnZXNpemUgLSAoKF9fc2l6ZSArIF9fbWFsbG9jX2hlYWRlcl9zaXpl KSAlIF9fc3VicGFnZXNpemUpKQogICAgICAgICAgICAlIF9fc3VicGFnZXNpemU7CiAgICAgICAg ICBfX2NhcGFjaXR5ICs9IF9fZXh0cmEgLyBzaXplb2YoX0NoYXJUKTsKICAgICAgICAgIF9fc2l6 ZSA9IChfX2NhcGFjaXR5ICsgMSkgKiBzaXplb2YoX0NoYXJUKSArIHNpemVvZihfUmVwKTsKICAg ICAgICB9CgoKCiAgICAgIHZvaWQqIF9fcGxhY2UgPSBfUmF3X2J5dGVzX2FsbG9jKF9fYWxsb2Mp LmFsbG9jYXRlKF9fc2l6ZSk7CiAgICAgIF9SZXAgKl9fcCA9IG5ldyAoX19wbGFjZSkgX1JlcDsK ICAgICAgX19wLT5fTV9jYXBhY2l0eSA9IF9fY2FwYWNpdHk7CiAgICAgIF9fcC0+X01fc2V0X3No YXJhYmxlKCk7CiAgICAgIF9fcC0+X01fbGVuZ3RoID0gMDsKICAgICAgcmV0dXJuIF9fcDsKICAg IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFt ZSBfQWxsb2M+CiAgICBfQ2hhclQqCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBf QWxsb2M+OjpfUmVwOjoKICAgIF9NX2Nsb25lKGNvbnN0IF9BbGxvYyYgX19hbGxvYywgc2l6ZV90 eXBlIF9fcmVzKQogICAgewoKICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fcmVxdWVzdGVkX2NhcCA9 IF9NX2xlbmd0aCArIF9fcmVzOwoKICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fcGFnZXNpemUgPSA0 MDk2OwogICAgICBjb25zdCBzaXplX3R5cGUgX19tYWxsb2NfaGVhZGVyX3NpemUgPSA0ICogc2l6 ZW9mICh2b2lkKik7CgogICAgICBjb25zdCBzaXplX3R5cGUgX19wYWdlX2NhcGFjaXR5ID0KICAg ICAgICAoX19wYWdlc2l6ZSAtIF9fbWFsbG9jX2hlYWRlcl9zaXplIC0gc2l6ZW9mKF9SZXApIC0g c2l6ZW9mKF9DaGFyVCkpCiAgICAgICAgLyBzaXplb2YoX0NoYXJUKTsKICAgICAgX1JlcCogX19y OwogICAgICBpZiAoX19yZXF1ZXN0ZWRfY2FwID4gX01fY2FwYWNpdHkgJiYgX19yZXF1ZXN0ZWRf Y2FwID4gX19wYWdlX2NhcGFjaXR5KQoKICAgICAgICBfX3IgPSBfUmVwOjpfU19jcmVhdGUoX19y ZXF1ZXN0ZWRfY2FwID4gMipfTV9jYXBhY2l0eSA/CiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIF9fcmVxdWVzdGVkX2NhcCA6IDIqX01fY2FwYWNpdHksIF9fYWxsb2MpOwogICAgICBlbHNl CiAgICAgICAgX19yID0gX1JlcDo6X1NfY3JlYXRlKF9fcmVxdWVzdGVkX2NhcCwgX19hbGxvYyk7 CgogICAgICBpZiAoX01fbGVuZ3RoKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAg ICB7IHRyYWl0c190eXBlOjpjb3B5KF9fci0+X01fcmVmZGF0YSgpLCBfTV9yZWZkYXRhKCksIF9N X2xlbmd0aCk7IH0KICAgICAgICAgIGNhdGNoKC4uLikKICAgICAgICAgICAgewogICAgICAgICAg ICAgIF9fci0+X01fZGVzdHJveShfX2FsbG9jKTsKICAgICAgICAgICAgICB0aHJvdzsKICAgICAg ICAgICAgfQogICAgICAgIH0KICAgICAgX19yLT5fTV9sZW5ndGggPSBfTV9sZW5ndGg7CiAgICAg IHJldHVybiBfX3ItPl9NX3JlZmRhdGEoKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No YXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB2b2lkCiAgICBiYXNp Y19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpyZXNpemUoc2l6ZV90eXBlIF9fbiwg X0NoYXJUIF9fYykKICAgIHsKICAgICAgaWYgKF9fbiA+IG1heF9zaXplKCkpCiAgICAgICAgX190 aHJvd19sZW5ndGhfZXJyb3IoImJhc2ljX3N0cmluZzo6cmVzaXplIik7CiAgICAgIHNpemVfdHlw ZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CiAgICAgIGlmIChfX3NpemUgPCBfX24pCiAgICAgICAg dGhpcy0+YXBwZW5kKF9fbiAtIF9fc2l6ZSwgX19jKTsKICAgICAgZWxzZSBpZiAoX19uIDwgX19z aXplKQogICAgICAgIHRoaXMtPmVyYXNlKF9fbik7CgogICAgfQoKCgoKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHRlbXBs YXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXI+CiAgICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFp dHMsIF9BbGxvYz4mCiAgICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46 OgogICAgICBfTV9yZXBsYWNlKGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9yIF9faTIsIF9JbnB1dEl0 ZXIgX19rMSwKICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyIF9fazIsIGlucHV0X2l0ZXJhdG9y X3RhZykKICAgICAgewoKICAgICAgICBiYXNpY19zdHJpbmcgX19zKF9fazEsIF9fazIpOwogICAg ICAgIHJldHVybiBfTV9yZXBsYWNlX3NhZmUoX19pMSwgX19pMiwgX19zLl9NX2liZWdpbigpLCBf X3MuX01faWVuZCgpKTsKICAgICAgfQoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5 cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9G b3J3YXJkSXRlcj4KICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYK ICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICAgIF9NX3Jl cGxhY2Vfc2FmZShpdGVyYXRvciBfX2kxLCBpdGVyYXRvciBfX2kyLCBfRm9yd2FyZEl0ZXIgX19r MSwKICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX2syKQogICAgICB7CiAgICAg ICAgc2l6ZV90eXBlIF9fZG5ldyA9IHN0YXRpY19jYXN0PHNpemVfdHlwZT4oZGlzdGFuY2UoX19r MSwgX19rMikpOwogICAgICAgIHNpemVfdHlwZSBfX2RvbGQgPSBfX2kyIC0gX19pMTsKICAgICAg ICBzaXplX3R5cGUgX19kbWF4ID0gdGhpcy0+bWF4X3NpemUoKTsKCiAgICAgICAgaWYgKF9fZG1h eCA8PSBfX2RuZXcpCiAgICAgICAgICBfX3Rocm93X2xlbmd0aF9lcnJvcigiYmFzaWNfc3RyaW5n OjpfTV9yZXBsYWNlIik7CiAgICAgICAgc2l6ZV90eXBlIF9fb2ZmID0gX19pMSAtIF9NX2liZWdp bigpOwogICAgICAgIF9NX211dGF0ZShfX29mZiwgX19kb2xkLCBfX2RuZXcpOwoKCiAgICAgICAg aWYgKF9fZG5ldykKICAgICAgICAgIF9TX2NvcHlfY2hhcnMoX01fZGF0YSgpICsgX19vZmYsIF9f azEsIF9fazIpOwoKICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgIH0KCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNp Y19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JgogICAgYmFzaWNfc3RyaW5nPF9DaGFy VCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICByZXBsYWNlKHNpemVfdHlwZSBfX3BvczEsIHNpemVf dHlwZSBfX24xLCBjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLAogICAgICAgICAgICBzaXplX3R5 cGUgX19wb3MyLCBzaXplX3R5cGUgX19uMikKICAgIHsKICAgICAgY29uc3Qgc2l6ZV90eXBlIF9f c3Ryc2l6ZSA9IF9fc3RyLnNpemUoKTsKICAgICAgaWYgKF9fcG9zMiA+IF9fc3Ryc2l6ZSkKICAg ICAgICBfX3Rocm93X291dF9vZl9yYW5nZSgiYmFzaWNfc3RyaW5nOjpyZXBsYWNlIik7CiAgICAg IGNvbnN0IGJvb2wgX190ZXN0bjIgPSBfX24yIDwgX19zdHJzaXplIC0gX19wb3MyOwogICAgICBj b25zdCBzaXplX3R5cGUgX19mb2xkbjIgPSBfX3Rlc3RuMiA/IF9fbjIgOiBfX3N0cnNpemUgLSBf X3BvczI7CiAgICAgIHJldHVybiB0aGlzLT5yZXBsYWNlKF9fcG9zMSwgX19uMSwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgX19zdHIuX01fZGF0YSgpICsgX19wb3MyLCBfX2ZvbGRuMik7CiAg ICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5h bWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYKICAg IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgYXBwZW5kKGNvbnN0 IGJhc2ljX3N0cmluZyYgX19zdHIpCiAgICB7CgoKCiAgICAgIHNpemVfdHlwZSBfX3NpemUgPSBf X3N0ci5zaXplKCk7CiAgICAgIHNpemVfdHlwZSBfX2xlbiA9IF9fc2l6ZSArIHRoaXMtPnNpemUo KTsKICAgICAgaWYgKF9fbGVuID4gdGhpcy0+Y2FwYWNpdHkoKSkKICAgICAgICB0aGlzLT5yZXNl cnZlKF9fbGVuKTsKICAgICAgcmV0dXJuIF9NX3JlcGxhY2Vfc2FmZShfTV9pZW5kKCksIF9NX2ll bmQoKSwgX19zdHIuX01faWJlZ2luKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19z dHIuX01faWVuZCgpKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt ZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJh aXRzLCBfQWxsb2M+JgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6 CiAgICBhcHBlbmQoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwgc2l6ZV90eXBlIF9fcG9zLCBz aXplX3R5cGUgX19uKQogICAgewoKCgogICAgICBzaXplX3R5cGUgX19sZW4gPSBtaW4oX19zdHIu c2l6ZSgpIC0gX19wb3MsIF9fbikgKyB0aGlzLT5zaXplKCk7CiAgICAgIGlmIChfX2xlbiA+IHRo aXMtPmNhcGFjaXR5KCkpCiAgICAgICAgdGhpcy0+cmVzZXJ2ZShfX2xlbik7CiAgICAgIHJldHVy biBfTV9yZXBsYWNlX3NhZmUoX01faWVuZCgpLCBfTV9pZW5kKCksIF9fc3RyLl9NX2NoZWNrKF9f cG9zKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3N0ci5fTV9mb2xkKF9fcG9zLCBf X24pKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz LCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxs b2M+JgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBhcHBl bmQoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX24pCiAgICB7CiAgICAgIHNpemVfdHlw ZSBfX2xlbiA9IF9fbiArIHRoaXMtPnNpemUoKTsKICAgICAgaWYgKF9fbGVuID4gdGhpcy0+Y2Fw YWNpdHkoKSkKICAgICAgICB0aGlzLT5yZXNlcnZlKF9fbGVuKTsKICAgICAgcmV0dXJuIF9NX3Jl cGxhY2Vfc2FmZShfTV9pZW5kKCksIF9NX2llbmQoKSwgX19zLCBfX3MgKyBfX24pOwogICAgfQoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9B bGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mCiAgICBiYXNp Y19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGFwcGVuZChzaXplX3R5cGUg X19uLCBfQ2hhclQgX19jKQogICAgewogICAgICBzaXplX3R5cGUgX19sZW4gPSBfX24gKyB0aGlz LT5zaXplKCk7CiAgICAgIGlmIChfX2xlbiA+IHRoaXMtPmNhcGFjaXR5KCkpCiAgICAgICAgdGhp cy0+cmVzZXJ2ZShfX2xlbik7CiAgICAgICByZXR1cm4gdGhpcy0+cmVwbGFjZShfTV9pZW5kKCks IF9NX2llbmQoKSwgX19uLCBfX2MpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs IHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hh clQsIF9UcmFpdHMsIF9BbGxvYz4KICAgIG9wZXJhdG9yKyhjb25zdCBfQ2hhclQqIF9fbGhzLAog ICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4m IF9fcmhzKQogICAgewogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMs IF9BbGxvYz4gX19zdHJpbmdfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX3N0cmluZ190 eXBlOjpzaXplX3R5cGUgX19zaXplX3R5cGU7CiAgICAgIF9fc2l6ZV90eXBlIF9fbGVuID0gX1Ry YWl0czo6bGVuZ3RoKF9fbGhzKTsKICAgICAgX19zdHJpbmdfdHlwZSBfX3N0cjsKICAgICAgX19z dHIucmVzZXJ2ZShfX2xlbiArIF9fcmhzLnNpemUoKSk7CiAgICAgIF9fc3RyLmFwcGVuZChfX2xo cywgX19saHMgKyBfX2xlbik7CiAgICAgIF9fc3RyLmFwcGVuZChfX3Jocyk7CiAgICAgIHJldHVy biBfX3N0cjsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh aXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBf QWxsb2M+CiAgICBvcGVyYXRvcisoX0NoYXJUIF9fbGhzLCBjb25zdCBiYXNpY19zdHJpbmc8X0No YXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3JocykKICAgIHsKICAgICAgdHlwZWRlZiBiYXNpY19z dHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+IF9fc3RyaW5nX3R5cGU7CiAgICAgIHR5cGVk ZWYgdHlwZW5hbWUgX19zdHJpbmdfdHlwZTo6c2l6ZV90eXBlIF9fc2l6ZV90eXBlOwogICAgICBf X3N0cmluZ190eXBlIF9fc3RyOwogICAgICBfX3NpemVfdHlwZSBfX2xlbiA9IF9fcmhzLnNpemUo KTsKICAgICAgX19zdHIucmVzZXJ2ZShfX2xlbiArIDEpOwogICAgICBfX3N0ci5hcHBlbmQoX19z aXplX3R5cGUoMSksIF9fbGhzKTsKICAgICAgX19zdHIuYXBwZW5kKF9fcmhzKTsKICAgICAgcmV0 dXJuIF9fc3RyOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U cmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMs IF9BbGxvYz4mCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAg IHJlcGxhY2UoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwgc2l6ZV90eXBlIF9fbjIsIF9D aGFyVCBfX2MpCiAgICB7CiAgICAgIHNpemVfdHlwZSBfX24xID0gX19pMiAtIF9faTE7CiAgICAg IHNpemVfdHlwZSBfX29mZjEgPSBfX2kxIC0gX01faWJlZ2luKCk7CiAgICAgIGlmIChtYXhfc2l6 ZSgpIC0gKHRoaXMtPnNpemUoKSAtIF9fbjEpIDw9IF9fbjIpCiAgICAgICAgX190aHJvd19sZW5n dGhfZXJyb3IoImJhc2ljX3N0cmluZzo6cmVwbGFjZSIpOwogICAgICBfTV9tdXRhdGUgKF9fb2Zm MSwgX19uMSwgX19uMik7CgogICAgICBpZiAoX19uMikKICAgICAgICB0cmFpdHNfdHlwZTo6YXNz aWduKF9NX2RhdGEoKSArIF9fb2ZmMSwgX19uMiwgX19jKTsKICAgICAgcmV0dXJuICp0aGlzOwog ICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVu YW1lIF9BbGxvYz4KICAgIHR5cGVuYW1lIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9B bGxvYz46OnNpemVfdHlwZQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9j Pjo6CiAgICBjb3B5KF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19uLCBzaXplX3R5cGUgX19wb3Mp IGNvbnN0CiAgICB7CiAgICAgIGlmIChfX3BvcyA+IHRoaXMtPnNpemUoKSkKICAgICAgICBfX3Ro cm93X291dF9vZl9yYW5nZSgiYmFzaWNfc3RyaW5nOjpjb3B5Iik7CgogICAgICBpZiAoX19uID4g dGhpcy0+c2l6ZSgpIC0gX19wb3MpCiAgICAgICAgX19uID0gdGhpcy0+c2l6ZSgpIC0gX19wb3M7 CgogICAgICB0cmFpdHNfdHlwZTo6Y29weShfX3MsIF9NX2RhdGEoKSArIF9fcG9zLCBfX24pOwoK ICAgICAgcmV0dXJuIF9fbjsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl bmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0eXBlbmFtZSBiYXNpY19zdHJpbmc8 X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpzaXplX3R5cGUKICAgIGJhc2ljX3N0cmluZzxfQ2hh clQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgZmluZChjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90 eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKSBjb25zdAogICAgewogICAgICBzaXplX3R5cGUgX19z aXplID0gdGhpcy0+c2l6ZSgpOwogICAgICBzaXplX3QgX194cG9zID0gX19wb3M7CiAgICAgIGNv bnN0IF9DaGFyVCogX19kYXRhID0gX01fZGF0YSgpOwogICAgICBmb3IgKDsgX194cG9zICsgX19u IDw9IF9fc2l6ZTsgKytfX3hwb3MpCiAgICAgICAgaWYgKHRyYWl0c190eXBlOjpjb21wYXJlKF9f ZGF0YSArIF9feHBvcywgX19zLCBfX24pID09IDApCiAgICAgICAgICByZXR1cm4gX194cG9zOwog ICAgICByZXR1cm4gbnBvczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl bmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0eXBlbmFtZSBiYXNpY19zdHJpbmc8 X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpzaXplX3R5cGUKICAgIGJhc2ljX3N0cmluZzxfQ2hh clQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgZmluZChfQ2hhclQgX19jLCBzaXplX3R5cGUgX19w b3MpIGNvbnN0CiAgICB7CiAgICAgIHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CiAg ICAgIHNpemVfdHlwZSBfX3JldCA9IG5wb3M7CiAgICAgIGlmIChfX3BvcyA8IF9fc2l6ZSkKICAg ICAgICB7CiAgICAgICAgICBjb25zdCBfQ2hhclQqIF9fZGF0YSA9IF9NX2RhdGEoKTsKICAgICAg ICAgIHNpemVfdHlwZSBfX24gPSBfX3NpemUgLSBfX3BvczsKICAgICAgICAgIGNvbnN0IF9DaGFy VCogX19wID0gdHJhaXRzX3R5cGU6OmZpbmQoX19kYXRhICsgX19wb3MsIF9fbiwgX19jKTsKICAg ICAgICAgIGlmIChfX3ApCiAgICAgICAgICAgIF9fcmV0ID0gX19wIC0gX19kYXRhOwogICAgICAg IH0KICAgICAgcmV0dXJuIF9fcmV0OwogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU LCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0eXBlbmFtZSBiYXNpY19z dHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpzaXplX3R5cGUKICAgIGJhc2ljX3N0cmlu ZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgcmZpbmQoY29uc3QgX0NoYXJUKiBfX3Ms IHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikgY29uc3QKICAgIHsKICAgICAgc2l6ZV90 eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsKICAgICAgaWYgKF9fbiA8PSBfX3NpemUpCiAgICAg ICAgewogICAgICAgICAgX19wb3MgPSBzdGQ6Om1pbihfX3NpemUgLSBfX24sIF9fcG9zKTsKICAg ICAgICAgIGNvbnN0IF9DaGFyVCogX19kYXRhID0gX01fZGF0YSgpOwogICAgICAgICAgZG8KICAg ICAgICAgICAgewogICAgICAgICAgICAgIGlmICh0cmFpdHNfdHlwZTo6Y29tcGFyZShfX2RhdGEg KyBfX3BvcywgX19zLCBfX24pID09IDApCiAgICAgICAgICAgICAgICByZXR1cm4gX19wb3M7CiAg ICAgICAgICAgIH0KICAgICAgICAgIHdoaWxlIChfX3Bvcy0tID4gMCk7CiAgICAgICAgfQogICAg ICByZXR1cm4gbnBvczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt ZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0eXBlbmFtZSBiYXNpY19zdHJpbmc8X0No YXJULCBfVHJhaXRzLCBfQWxsb2M+OjpzaXplX3R5cGUKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQs IF9UcmFpdHMsIF9BbGxvYz46OgogICAgcmZpbmQoX0NoYXJUIF9fYywgc2l6ZV90eXBlIF9fcG9z KSBjb25zdAogICAgewogICAgICBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOwogICAg ICBpZiAoX19zaXplKQogICAgICAgIHsKICAgICAgICAgIHNpemVfdCBfX3hwb3MgPSBfX3NpemUg LSAxOwogICAgICAgICAgaWYgKF9feHBvcyA+IF9fcG9zKQogICAgICAgICAgICBfX3hwb3MgPSBf X3BvczsKCiAgICAgICAgICBmb3IgKCsrX194cG9zOyBfX3hwb3MtLSA+IDA7ICkKICAgICAgICAg ICAgaWYgKHRyYWl0c190eXBlOjplcShfTV9kYXRhKClbX194cG9zXSwgX19jKSkKICAgICAgICAg ICAgICByZXR1cm4gX194cG9zOwogICAgICAgIH0KICAgICAgcmV0dXJuIG5wb3M7CiAgICB9Cgog IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0Fs bG9jPgogICAgdHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6 c2l6ZV90eXBlCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAg IGZpbmRfZmlyc3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90 eXBlIF9fbikgY29uc3QKICAgIHsKICAgICAgZm9yICg7IF9fbiAmJiBfX3BvcyA8IHRoaXMtPnNp emUoKTsgKytfX3BvcykKICAgICAgICB7CiAgICAgICAgICBjb25zdCBfQ2hhclQqIF9fcCA9IHRy YWl0c190eXBlOjpmaW5kKF9fcywgX19uLCBfTV9kYXRhKClbX19wb3NdKTsKICAgICAgICAgIGlm IChfX3ApCiAgICAgICAgICAgIHJldHVybiBfX3BvczsKICAgICAgICB9CiAgICAgIHJldHVybiBu cG9zOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMs IHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVuYW1lIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFp dHMsIF9BbGxvYz46OnNpemVfdHlwZQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywg X0FsbG9jPjo6CiAgICBmaW5kX2xhc3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBf X3Bvcywgc2l6ZV90eXBlIF9fbikgY29uc3QKICAgIHsKICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9 IHRoaXMtPnNpemUoKTsKICAgICAgaWYgKF9fc2l6ZSAmJiBfX24pCiAgICAgICAgewogICAgICAg ICAgaWYgKC0tX19zaXplID4gX19wb3MpCiAgICAgICAgICAgIF9fc2l6ZSA9IF9fcG9zOwogICAg ICAgICAgZG8KICAgICAgICAgICAgewogICAgICAgICAgICAgIGlmICh0cmFpdHNfdHlwZTo6Zmlu ZChfX3MsIF9fbiwgX01fZGF0YSgpW19fc2l6ZV0pKQogICAgICAgICAgICAgICAgcmV0dXJuIF9f c2l6ZTsKICAgICAgICAgICAgfQogICAgICAgICAgd2hpbGUgKF9fc2l6ZS0tICE9IDApOwogICAg ICAgIH0KICAgICAgcmV0dXJuIG5wb3M7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy VCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdHlwZW5hbWUgYmFzaWNf c3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90eXBlCiAgICBiYXNpY19zdHJp bmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGZpbmRfZmlyc3Rfbm90X29mKGNvbnN0 IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24pIGNvbnN0CiAgICB7 CiAgICAgIHNpemVfdCBfX3hwb3MgPSBfX3BvczsKICAgICAgZm9yICg7IF9feHBvcyA8IHRoaXMt PnNpemUoKTsgKytfX3hwb3MpCiAgICAgICAgaWYgKCF0cmFpdHNfdHlwZTo6ZmluZChfX3MsIF9f biwgX01fZGF0YSgpW19feHBvc10pKQogICAgICAgICAgcmV0dXJuIF9feHBvczsKICAgICAgcmV0 dXJuIG5wb3M7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry YWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9DaGFyVCwg X1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90eXBlCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJh aXRzLCBfQWxsb2M+OjoKICAgIGZpbmRfZmlyc3Rfbm90X29mKF9DaGFyVCBfX2MsIHNpemVfdHlw ZSBfX3BvcykgY29uc3QKICAgIHsKICAgICAgc2l6ZV90IF9feHBvcyA9IF9fcG9zOwogICAgICBm b3IgKDsgX194cG9zIDwgdGhpcy0+c2l6ZSgpOyArK19feHBvcykKICAgICAgICBpZiAoIXRyYWl0 c190eXBlOjplcShfTV9kYXRhKClbX194cG9zXSwgX19jKSkKICAgICAgICAgIHJldHVybiBfX3hw b3M7CiAgICAgIHJldHVybiBucG9zOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs IHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVuYW1lIGJhc2ljX3N0 cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQogICAgYmFzaWNfc3RyaW5n PF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBmaW5kX2xhc3Rfbm90X29mKGNvbnN0IF9D aGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24pIGNvbnN0CiAgICB7CiAg ICAgIHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CiAgICAgIGlmIChfX3NpemUpCiAg ICAgICAgewogICAgICAgICAgaWYgKC0tX19zaXplID4gX19wb3MpCiAgICAgICAgICAgIF9fc2l6 ZSA9IF9fcG9zOwogICAgICAgICAgZG8KICAgICAgICAgICAgewogICAgICAgICAgICAgIGlmICgh dHJhaXRzX3R5cGU6OmZpbmQoX19zLCBfX24sIF9NX2RhdGEoKVtfX3NpemVdKSkKICAgICAgICAg ICAgICAgIHJldHVybiBfX3NpemU7CiAgICAgICAgICAgIH0KICAgICAgICAgIHdoaWxlIChfX3Np emUtLSk7CiAgICAgICAgfQogICAgICByZXR1cm4gbnBvczsKICAgIH0KCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0eXBl bmFtZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpzaXplX3R5cGUKICAg IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgZmluZF9sYXN0X25v dF9vZihfQ2hhclQgX19jLCBzaXplX3R5cGUgX19wb3MpIGNvbnN0CiAgICB7CiAgICAgIHNpemVf dHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CiAgICAgIGlmIChfX3NpemUpCiAgICAgICAgewog ICAgICAgICAgaWYgKC0tX19zaXplID4gX19wb3MpCiAgICAgICAgICAgIF9fc2l6ZSA9IF9fcG9z OwogICAgICAgICAgZG8KICAgICAgICAgICAgewogICAgICAgICAgICAgIGlmICghdHJhaXRzX3R5 cGU6OmVxKF9NX2RhdGEoKVtfX3NpemVdLCBfX2MpKQogICAgICAgICAgICAgICAgcmV0dXJuIF9f c2l6ZTsKICAgICAgICAgICAgfQogICAgICAgICAgd2hpbGUgKF9fc2l6ZS0tKTsKICAgICAgICB9 CiAgICAgIHJldHVybiBucG9zOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5 cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGludAogICAgYmFzaWNfc3RyaW5n PF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBjb21wYXJlKHNpemVfdHlwZSBfX3Bvcywg c2l6ZV90eXBlIF9fbiwgY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cikgY29uc3QKICAgIHsKICAg ICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsKICAgICAgc2l6ZV90eXBlIF9fb3Np emUgPSBfX3N0ci5zaXplKCk7CiAgICAgIGlmIChfX3BvcyA+IF9fc2l6ZSkKICAgICAgICBfX3Ro cm93X291dF9vZl9yYW5nZSgiYmFzaWNfc3RyaW5nOjpjb21wYXJlIik7CgogICAgICBzaXplX3R5 cGUgX19yc2l6ZT0gbWluKF9fc2l6ZSAtIF9fcG9zLCBfX24pOwogICAgICBzaXplX3R5cGUgX19s ZW4gPSBtaW4oX19yc2l6ZSwgX19vc2l6ZSk7CiAgICAgIGludCBfX3IgPSB0cmFpdHNfdHlwZTo6 Y29tcGFyZShfTV9kYXRhKCkgKyBfX3BvcywgX19zdHIuZGF0YSgpLCBfX2xlbik7CiAgICAgIGlm ICghX19yKQogICAgICAgIF9fciA9IF9fcnNpemUgLSBfX29zaXplOwogICAgICByZXR1cm4gX19y OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5 cGVuYW1lIF9BbGxvYz4KICAgIGludAogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywg X0FsbG9jPjo6CiAgICBjb21wYXJlKHNpemVfdHlwZSBfX3BvczEsIHNpemVfdHlwZSBfX24xLCBj b25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLAogICAgICAgICAgICBzaXplX3R5cGUgX19wb3MyLCBz aXplX3R5cGUgX19uMikgY29uc3QKICAgIHsKICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMt PnNpemUoKTsKICAgICAgc2l6ZV90eXBlIF9fb3NpemUgPSBfX3N0ci5zaXplKCk7CiAgICAgIGlm IChfX3BvczEgPiBfX3NpemUgfHwgX19wb3MyID4gX19vc2l6ZSkKICAgICAgICBfX3Rocm93X291 dF9vZl9yYW5nZSgiYmFzaWNfc3RyaW5nOjpjb21wYXJlIik7CgogICAgICBzaXplX3R5cGUgX19y c2l6ZSA9IG1pbihfX3NpemUgLSBfX3BvczEsIF9fbjEpOwogICAgICBzaXplX3R5cGUgX19yb3Np emUgPSBtaW4oX19vc2l6ZSAtIF9fcG9zMiwgX19uMik7CiAgICAgIHNpemVfdHlwZSBfX2xlbiA9 IG1pbihfX3JzaXplLCBfX3Jvc2l6ZSk7CiAgICAgIGludCBfX3IgPSB0cmFpdHNfdHlwZTo6Y29t cGFyZShfTV9kYXRhKCkgKyBfX3BvczEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBfX3N0ci5kYXRhKCkgKyBfX3BvczIsIF9fbGVuKTsKICAgICAgaWYgKCFfX3IpCiAgICAg ICAgX19yID0gX19yc2l6ZSAtIF9fcm9zaXplOwogICAgICByZXR1cm4gX19yOwogICAgfQoKCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxs b2M+CiAgICBpbnQKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Ogog ICAgY29tcGFyZShjb25zdCBfQ2hhclQqIF9fcykgY29uc3QKICAgIHsKICAgICAgc2l6ZV90eXBl IF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsKICAgICAgc2l6ZV90eXBlIF9fb3NpemUgPSB0cmFpdHNf dHlwZTo6bGVuZ3RoKF9fcyk7CiAgICAgIHNpemVfdHlwZSBfX2xlbiA9IG1pbihfX3NpemUsIF9f b3NpemUpOwogICAgICBpbnQgX19yID0gdHJhaXRzX3R5cGU6OmNvbXBhcmUoX01fZGF0YSgpLCBf X3MsIF9fbGVuKTsKICAgICAgaWYgKCFfX3IpCiAgICAgICAgX19yID0gX19zaXplIC0gX19vc2l6 ZTsKICAgICAgcmV0dXJuIF9fcjsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg dHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW50CiAgICBiYXNpY19zdHJp bmcgPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBjb21wYXJlKHNpemVfdHlwZSBfX3Bv cywgc2l6ZV90eXBlIF9fbjEsIGNvbnN0IF9DaGFyVCogX19zKSBjb25zdAogICAgewogICAgICBz aXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOwogICAgICBpZiAoX19wb3MgPiBfX3NpemUp CiAgICAgICAgX190aHJvd19vdXRfb2ZfcmFuZ2UoImJhc2ljX3N0cmluZzo6Y29tcGFyZSIpOwoK ICAgICAgc2l6ZV90eXBlIF9fb3NpemUgPSB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcyk7CiAgICAg IHNpemVfdHlwZSBfX3JzaXplID0gbWluKF9fc2l6ZSAtIF9fcG9zLCBfX24xKTsKICAgICAgc2l6 ZV90eXBlIF9fbGVuID0gbWluKF9fcnNpemUsIF9fb3NpemUpOwogICAgICBpbnQgX19yID0gdHJh aXRzX3R5cGU6OmNvbXBhcmUoX01fZGF0YSgpICsgX19wb3MsIF9fcywgX19sZW4pOwogICAgICBp ZiAoIV9fcikKICAgICAgICBfX3IgPSBfX3JzaXplIC0gX19vc2l6ZTsKICAgICAgcmV0dXJuIF9f cjsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0 eXBlbmFtZSBfQWxsb2M+CiAgICBpbnQKICAgIGJhc2ljX3N0cmluZyA8X0NoYXJULCBfVHJhaXRz LCBfQWxsb2M+OjoKICAgIGNvbXBhcmUoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uMSwg Y29uc3QgX0NoYXJUKiBfX3MsCiAgICAgICAgICAgIHNpemVfdHlwZSBfX24yKSBjb25zdAogICAg ewogICAgICBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOwogICAgICBpZiAoX19wb3Mg PiBfX3NpemUpCiAgICAgICAgX190aHJvd19vdXRfb2ZfcmFuZ2UoImJhc2ljX3N0cmluZzo6Y29t cGFyZSIpOwoKICAgICAgc2l6ZV90eXBlIF9fb3NpemUgPSBtaW4odHJhaXRzX3R5cGU6Omxlbmd0 aChfX3MpLCBfX24yKTsKICAgICAgc2l6ZV90eXBlIF9fcnNpemUgPSBtaW4oX19zaXplIC0gX19w b3MsIF9fbjEpOwogICAgICBzaXplX3R5cGUgX19sZW4gPSBtaW4oX19yc2l6ZSwgX19vc2l6ZSk7 CiAgICAgIGludCBfX3IgPSB0cmFpdHNfdHlwZTo6Y29tcGFyZShfTV9kYXRhKCkgKyBfX3Bvcywg X19zLCBfX2xlbik7CiAgICAgIGlmICghX19yKQogICAgICAgIF9fciA9IF9fcnNpemUgLSBfX29z aXplOwogICAgICByZXR1cm4gX19yOwogICAgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0NoYXJULCBj bGFzcyBfVHJhaXRzLCBjbGFzcyBfQWxsb2M+CiAgICB2b2lkCiAgICBfU19zdHJpbmdfY29weShj b25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3N0ciwKICAgICAg ICAgICAgICAgICAgIF9DaGFyVCogX19idWYsIHR5cGVuYW1lIF9BbGxvYzo6c2l6ZV90eXBlIF9f YnVmc2l6KQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6c2l6ZV90eXBlIHNp emVfdHlwZTsKICAgICAgc2l6ZV90eXBlIF9fc3Ryc2l6ZSA9IF9fc3RyLnNpemUoKTsKICAgICAg c2l6ZV90eXBlIF9fYnl0ZXMgPSBtaW4oX19zdHJzaXplLCBfX2J1ZnNpeiAtIDEpOwogICAgICBf VHJhaXRzOjpjb3B5KF9fYnVmLCBfX3N0ci5kYXRhKCksIF9fYnl0ZXMpOwogICAgICBfX2J1Zltf X2J5dGVzXSA9IF9DaGFyVCgpOwogICAgfQoKCgoKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgYmFz aWNfc3RyaW5nPGNoYXI+OwogIGV4dGVybiB0ZW1wbGF0ZQogICAgYmFzaWNfaXN0cmVhbTxjaGFy PiYKICAgIG9wZXJhdG9yPj4oYmFzaWNfaXN0cmVhbTxjaGFyPiYsIHN0cmluZyYpOwogIGV4dGVy biB0ZW1wbGF0ZQogICAgYmFzaWNfb3N0cmVhbTxjaGFyPiYKICAgIG9wZXJhdG9yPDwoYmFzaWNf b3N0cmVhbTxjaGFyPiYsIGNvbnN0IHN0cmluZyYpOwogIGV4dGVybiB0ZW1wbGF0ZQogICAgYmFz aWNfaXN0cmVhbTxjaGFyPiYKICAgIGdldGxpbmUoYmFzaWNfaXN0cmVhbTxjaGFyPiYsIHN0cmlu ZyYsIGNoYXIpOwogIGV4dGVybiB0ZW1wbGF0ZQogICAgYmFzaWNfaXN0cmVhbTxjaGFyPiYKICAg IGdldGxpbmUoYmFzaWNfaXN0cmVhbTxjaGFyPiYsIHN0cmluZyYpOwoKCiAgZXh0ZXJuIHRlbXBs YXRlIGNsYXNzIGJhc2ljX3N0cmluZzx3Y2hhcl90PjsKICBleHRlcm4gdGVtcGxhdGUKICAgIGJh c2ljX2lzdHJlYW08d2NoYXJfdD4mCiAgICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08d2NoYXJf dD4mLCB3c3RyaW5nJik7CiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBiYXNpY19vc3RyZWFtPHdjaGFy X3Q+JgogICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPHdjaGFyX3Q+JiwgY29uc3Qgd3N0cmlu ZyYpOwogIGV4dGVybiB0ZW1wbGF0ZQogICAgYmFzaWNfaXN0cmVhbTx3Y2hhcl90PiYKICAgIGdl dGxpbmUoYmFzaWNfaXN0cmVhbTx3Y2hhcl90PiYsIHdzdHJpbmcmLCB3Y2hhcl90KTsKICBleHRl cm4gdGVtcGxhdGUKICAgIGJhc2ljX2lzdHJlYW08d2NoYXJfdD4mCiAgICBnZXRsaW5lKGJhc2lj X2lzdHJlYW08d2NoYXJfdD4mLCB3c3RyaW5nJik7Cgp9CiMgNTggIi91c3IvaW5jbHVkZS9jKysv My4yLjEvc3RyaW5nIiAyIDMKIyA1MCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9iaXRzL2xvY2Fs ZWZ3ZC5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL2JpdHMvZnVuY3RleGNlcHQu aCIgMSAzCiMgMzQgIi91c3IvaW5jbHVkZS9jKysvMy4yLjEvYml0cy9mdW5jdGV4Y2VwdC5oIiAz CiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9leGNlcHRpb25fZGVmaW5lcy5oIiAxIDMKIyAz NSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDIgMwoKbmFtZXNw YWNlIHN0ZAp7CgogIHZvaWQKICBfX3Rocm93X2JhZF9leGNlcHRpb24odm9pZCk7CgoKICB2b2lk CiAgX190aHJvd19iYWRfYWxsb2Modm9pZCk7CgoKICB2b2lkCiAgX190aHJvd19iYWRfY2FzdCh2 b2lkKTsKCiAgdm9pZAogIF9fdGhyb3dfYmFkX3R5cGVpZCh2b2lkKTsKCgogIHZvaWQKICBfX3Ro cm93X2xvZ2ljX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X2RvbWFp bl9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19pbnZhbGlkX2FyZ3Vt ZW50KGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X2xlbmd0aF9lcnJvcihjb25z dCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19vdXRfb2ZfcmFuZ2UoY29uc3QgY2hhciog X19zKTsKCiAgdm9pZAogIF9fdGhyb3dfcnVudGltZV9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoK ICB2b2lkCiAgX190aHJvd19yYW5nZV9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAg X190aHJvd19vdmVyZmxvd19lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJv d191bmRlcmZsb3dfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCgogIHZvaWQKICBfX3Rocm93X2lv c19mYWlsdXJlKGNvbnN0IGNoYXIqIF9fcyk7Cn0KIyA1MSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIu MS9iaXRzL2xvY2FsZWZ3ZC5oIiAyIDMKCgpuYW1lc3BhY2Ugc3RkCnsKCiAgY2xhc3MgbG9jYWxl OwoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlzc3Bh Y2UoX0NoYXJULCBjb25zdCBsb2NhbGUmKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgog ICAgaW5saW5lIGJvb2wKICAgIGlzcHJpbnQoX0NoYXJULCBjb25zdCBsb2NhbGUmKTsKCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlzY250cmwoX0NoYXJU LCBjb25zdCBsb2NhbGUmKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5l IGJvb2wKICAgIGlzdXBwZXIoX0NoYXJULCBjb25zdCBsb2NhbGUmKTsKCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlzbG93ZXIoX0NoYXJULCBjb25zdCBs b2NhbGUmKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAg IGlzYWxwaGEoX0NoYXJULCBjb25zdCBsb2NhbGUmKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No YXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlzZGlnaXQoX0NoYXJULCBjb25zdCBsb2NhbGUmKTsK CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlzcHVuY3Qo X0NoYXJULCBjb25zdCBsb2NhbGUmKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAg aW5saW5lIGJvb2wKICAgIGlzeGRpZ2l0KF9DaGFyVCwgY29uc3QgbG9jYWxlJik7CgogIHRlbXBs YXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAgICBpc2FsbnVtKF9DaGFyVCwg Y29uc3QgbG9jYWxlJik7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBi b29sCiAgICBpc2dyYXBoKF9DaGFyVCwgY29uc3QgbG9jYWxlJik7CgogIHRlbXBsYXRlPHR5cGVu YW1lIF9DaGFyVD4KICAgIGlubGluZSBfQ2hhclQKICAgIHRvdXBwZXIoX0NoYXJULCBjb25zdCBs b2NhbGUmKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIF9DaGFyVAog ICAgdG9sb3dlcihfQ2hhclQsIGNvbnN0IGxvY2FsZSYpOwoKCgogIGNsYXNzIGN0eXBlX2Jhc2U7 CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgY2xhc3MgY3R5cGU7CiAgdGVtcGxhdGU8 PiBjbGFzcyBjdHlwZTxjaGFyPjsKCiAgdGVtcGxhdGU8PiBjbGFzcyBjdHlwZTx3Y2hhcl90PjsK CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgY2xhc3MgY3R5cGVfYnluYW1lOwoKCiAg Y2xhc3MgY29kZWN2dF9iYXNlOwogIGNsYXNzIF9fZW5jX3RyYWl0czsKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfSW50ZXJuVCwgdHlwZW5hbWUgX0V4dGVyblQsIHR5cGVuYW1lIF9TdGF0ZVQ+CiAgICBj bGFzcyBjb2RlY3Z0OwogIHRlbXBsYXRlPD4gY2xhc3MgY29kZWN2dDxjaGFyLCBjaGFyLCBtYnN0 YXRlX3Q+OwoKICB0ZW1wbGF0ZTw+IGNsYXNzIGNvZGVjdnQ8d2NoYXJfdCwgY2hhciwgbWJzdGF0 ZV90PjsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludGVyblQsIHR5cGVuYW1lIF9FeHRlcm5ULCB0 eXBlbmFtZSBfU3RhdGVUPgogICAgY2xhc3MgY29kZWN2dF9ieW5hbWU7CgoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXIgPSBpc3RyZWFtYnVmX2l0ZXJhdG9yPF9D aGFyVD4gPgogICAgY2xhc3MgbnVtX2dldDsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5 cGVuYW1lIF9PdXRJdGVyID0gb3N0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQ+ID4KICAgIGNsYXNz IG51bV9wdXQ7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPiBjbGFzcyBudW1wdW5jdDsKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+IGNsYXNzIG51bXB1bmN0X2J5bmFtZTsKCgogIHRlbXBs YXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGNsYXNzIGNvbGxhdGU7CiAgdGVtcGxhdGU8dHlwZW5h bWUgX0NoYXJUPiBjbGFzcwogICAgY29sbGF0ZV9ieW5hbWU7CgoKICBjbGFzcyB0aW1lX2Jhc2U7 CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyID0gaXN0cmVhbWJ1 Zl9pdGVyYXRvcjxfQ2hhclQ+ID4KICAgIGNsYXNzIHRpbWVfZ2V0OwogIHRlbXBsYXRlPHR5cGVu YW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlciA9IGlzdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJU PiA+CiAgICBjbGFzcyB0aW1lX2dldF9ieW5hbWU7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU LCB0eXBlbmFtZSBfT3V0SXRlciA9IG9zdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJUPiA+CiAgICBj bGFzcyB0aW1lX3B1dDsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJ dGVyID0gb3N0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQ+ID4KICAgIGNsYXNzIHRpbWVfcHV0X2J5 bmFtZTsKCgogIGNsYXNzIG1vbmV5X2Jhc2U7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0 eXBlbmFtZSBfSW5JdGVyID0gaXN0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQ+ID4KICAgIGNsYXNz IG1vbmV5X2dldDsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVy ID0gb3N0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQ+ID4KICAgIGNsYXNzIG1vbmV5X3B1dDsKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIGJvb2wgX0ludGwgPSBmYWxzZT4KICAgIGNsYXNzIG1v bmV5cHVuY3Q7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCBib29sIF9JbnRsID0gZmFsc2U+ CiAgICBjbGFzcyBtb25leXB1bmN0X2J5bmFtZTsKCgogIGNsYXNzIG1lc3NhZ2VzX2Jhc2U7CiAg dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgY2xhc3MgbWVzc2FnZXM7CiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0NoYXJUPgogICAgY2xhc3MgbWVzc2FnZXNfYnluYW1lOwoKCiAgY2xhc3MgbG9j YWxlCiAgewogIHB1YmxpYzoKCiAgICB0eXBlZGVmIHVuc2lnbmVkIGludCBjYXRlZ29yeTsKCgog ICAgY2xhc3MgZmFjZXQ7CiAgICBjbGFzcyBpZDsKICAgIGNsYXNzIF9JbXBsOwoKICAgIGZyaWVu ZCBjbGFzcyBmYWNldDsKICAgIGZyaWVuZCBjbGFzcyBfSW1wbDsKCiAgICB0ZW1wbGF0ZTx0eXBl bmFtZSBfRmFjZXQ+CiAgICAgIGZyaWVuZCBjb25zdCBfRmFjZXQmCiAgICAgIHVzZV9mYWNldChj b25zdCBsb2NhbGUmKTsKCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFjZXQ+CiAgICAgIGZyaWVu ZCBib29sCiAgICAgIGhhc19mYWNldChjb25zdCBsb2NhbGUmKSB0aHJvdygpOwoKCgogICAgc3Rh dGljIGNvbnN0IGNhdGVnb3J5IG5vbmUgPSAwOwogICAgc3RhdGljIGNvbnN0IGNhdGVnb3J5IGN0 eXBlID0gMUwgPDwgMDsKICAgIHN0YXRpYyBjb25zdCBjYXRlZ29yeSBudW1lcmljID0gMUwgPDwg MTsKICAgIHN0YXRpYyBjb25zdCBjYXRlZ29yeSBjb2xsYXRlID0gMUwgPDwgMjsKICAgIHN0YXRp YyBjb25zdCBjYXRlZ29yeSB0aW1lID0gMUwgPDwgMzsKICAgIHN0YXRpYyBjb25zdCBjYXRlZ29y eSBtb25ldGFyeSA9IDFMIDw8IDQ7CiAgICBzdGF0aWMgY29uc3QgY2F0ZWdvcnkgbWVzc2FnZXMg PSAxTCA8PCA1OwogICAgc3RhdGljIGNvbnN0IGNhdGVnb3J5IGFsbCA9IChjdHlwZSB8IG51bWVy aWMgfCBjb2xsYXRlIHwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHRpbWUgfCBtb25ldGFyeSB8IG1lc3NhZ2VzKTsKCgogICAgbG9jYWxlKCkgdGhyb3coKTsKCiAg ICBsb2NhbGUoY29uc3QgbG9jYWxlJiBfX290aGVyKSB0aHJvdygpOwoKICAgIGV4cGxpY2l0CiAg ICBsb2NhbGUoY29uc3QgY2hhciogX19zKTsKCiAgICBsb2NhbGUoY29uc3QgbG9jYWxlJiBfX2Jh c2UsIGNvbnN0IGNoYXIqIF9fcywgY2F0ZWdvcnkgX19jYXQpOwoKICAgIGxvY2FsZShjb25zdCBs b2NhbGUmIF9fYmFzZSwgY29uc3QgbG9jYWxlJiBfX2FkZCwgY2F0ZWdvcnkgX19jYXQpOwoKICAg IHRlbXBsYXRlPHR5cGVuYW1lIF9GYWNldD4KICAgICAgbG9jYWxlKGNvbnN0IGxvY2FsZSYgX19v dGhlciwgX0ZhY2V0KiBfX2YpOwoKICAgIH5sb2NhbGUoKSB0aHJvdygpOwoKICAgIGNvbnN0IGxv Y2FsZSYKICAgIG9wZXJhdG9yPShjb25zdCBsb2NhbGUmIF9fb3RoZXIpIHRocm93KCk7CgogICAg dGVtcGxhdGU8dHlwZW5hbWUgX0ZhY2V0PgogICAgICBsb2NhbGUKICAgICAgY29tYmluZShjb25z dCBsb2NhbGUmIF9fb3RoZXIpIGNvbnN0OwoKCiAgICBzdHJpbmcKICAgIG5hbWUoKSBjb25zdDsK CiAgICBib29sCiAgICBvcGVyYXRvcj09KGNvbnN0IGxvY2FsZSYgX19vdGhlcikgY29uc3QgdGhy b3cgKCk7CgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yIT0oY29uc3QgbG9jYWxlJiBfX290 aGVyKSBjb25zdCB0aHJvdyAoKQogICAgeyByZXR1cm4gISh0aGlzLT5vcGVyYXRvcj09KF9fb3Ro ZXIpKTsgfQoKICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyLCB0eXBlbmFtZSBfVHJhaXRzLCB0 eXBlbmFtZSBfQWxsb2M+CiAgICAgIGJvb2wKICAgICAgb3BlcmF0b3IoKShjb25zdCBiYXNpY19z dHJpbmc8X0NoYXIsIF9UcmFpdHMsIF9BbGxvYz4mIF9fczEsCiAgICAgICAgICAgICAgICAgY29u c3QgYmFzaWNfc3RyaW5nPF9DaGFyLCBfVHJhaXRzLCBfQWxsb2M+JiBfX3MyKSBjb25zdDsKCgog ICAgc3RhdGljIGxvY2FsZQogICAgZ2xvYmFsKGNvbnN0IGxvY2FsZSYpOwoKICAgIHN0YXRpYyBj b25zdCBsb2NhbGUmCiAgICBjbGFzc2ljKCk7CgogIHByaXZhdGU6CgogICAgX0ltcGwqIF9NX2lt cGw7CgoKICAgIHN0YXRpYyBfSW1wbCogX1NfY2xhc3NpYzsKCgogICAgc3RhdGljIF9JbXBsKiBf U19nbG9iYWw7CgoKCgoKCiAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IF9TX2NhdGVnb3JpZXNfc2l6 ZSA9IDY7CgoKCgoKCiAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IF9TX2V4dHJhX2NhdGVnb3JpZXNf c2l6ZSA9IDA7CgoKCgoKICAgIHN0YXRpYyBjb25zdCBjaGFyKiBfU19jYXRlZ29yaWVzW19TX2Nh dGVnb3JpZXNfc2l6ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgX1Nf ZXh0cmFfY2F0ZWdvcmllc19zaXplXTsKCiAgICBleHBsaWNpdAogICAgbG9jYWxlKF9JbXBsKikg dGhyb3coKTsKCiAgICBzdGF0aWMgaW5saW5lIHZvaWQKICAgIF9TX2luaXRpYWxpemUoKQogICAg ewogICAgICBpZiAoIV9TX2NsYXNzaWMpCiAgICAgICAgY2xhc3NpYygpOwogICAgfQoKICAgIHN0 YXRpYyBjYXRlZ29yeQogICAgX1Nfbm9ybWFsaXplX2NhdGVnb3J5KGNhdGVnb3J5KTsKCiAgICB2 b2lkCiAgICBfTV9jb2FsZXNjZShjb25zdCBsb2NhbGUmIF9fYmFzZSwgY29uc3QgbG9jYWxlJiBf X2FkZCwgY2F0ZWdvcnkgX19jYXQpOwogIH07CgoKCiAgY2xhc3MgbG9jYWxlOjpfSW1wbAogIHsK ICBwdWJsaWM6CgogICAgZnJpZW5kIGNsYXNzIGxvY2FsZTsKICAgIGZyaWVuZCBjbGFzcyBsb2Nh bGU6OmZhY2V0OwoKICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9GYWNldD4KICAgICAgZnJpZW5kIGNv bnN0IF9GYWNldCYKICAgICAgdXNlX2ZhY2V0KGNvbnN0IGxvY2FsZSYpOwoKICAgIHRlbXBsYXRl PHR5cGVuYW1lIF9GYWNldD4KICAgICAgZnJpZW5kIGJvb2wKICAgICAgaGFzX2ZhY2V0KGNvbnN0 IGxvY2FsZSYpIHRocm93KCk7CgogIHByaXZhdGU6CgogICAgX0F0b21pY193b3JkIF9NX3JlZmVy ZW5jZXM7CiAgICBmYWNldCoqIF9NX2ZhY2V0czsKICAgIHNpemVfdCBfTV9mYWNldHNfc2l6ZTsK CiAgICBjaGFyKiBfTV9uYW1lc1tfU19jYXRlZ29yaWVzX3NpemUKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgX1NfZXh0cmFfY2F0ZWdvcmllc19zaXpl XTsKICAgIHN0YXRpYyBjb25zdCBsb2NhbGU6OmlkKiBjb25zdCBfU19pZF9jdHlwZVtdOwogICAg c3RhdGljIGNvbnN0IGxvY2FsZTo6aWQqIGNvbnN0IF9TX2lkX251bWVyaWNbXTsKICAgIHN0YXRp YyBjb25zdCBsb2NhbGU6OmlkKiBjb25zdCBfU19pZF9jb2xsYXRlW107CiAgICBzdGF0aWMgY29u c3QgbG9jYWxlOjppZCogY29uc3QgX1NfaWRfdGltZVtdOwogICAgc3RhdGljIGNvbnN0IGxvY2Fs ZTo6aWQqIGNvbnN0IF9TX2lkX21vbmV0YXJ5W107CiAgICBzdGF0aWMgY29uc3QgbG9jYWxlOjpp ZCogY29uc3QgX1NfaWRfbWVzc2FnZXNbXTsKICAgIHN0YXRpYyBjb25zdCBsb2NhbGU6OmlkKiBj b25zdCogY29uc3QgX1NfZmFjZXRfY2F0ZWdvcmllc1tdOwoKICAgIGlubGluZSB2b2lkCiAgICBf TV9hZGRfcmVmZXJlbmNlKCkgdGhyb3coKQogICAgeyBfX2F0b21pY19hZGQoJl9NX3JlZmVyZW5j ZXMsIDEpOyB9CgogICAgaW5saW5lIHZvaWQKICAgIF9NX3JlbW92ZV9yZWZlcmVuY2UoKSB0aHJv dygpCiAgICB7CiAgICAgIGlmIChfX2V4Y2hhbmdlX2FuZF9hZGQoJl9NX3JlZmVyZW5jZXMsIC0x KSA9PSAxKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7IGRlbGV0ZSB0aGlz OyB9CiAgICAgICAgICBjYXRjaCguLi4pCiAgICAgICAgICAgIHsgfQogICAgICAgIH0KICAgIH0K CiAgICBfSW1wbChjb25zdCBfSW1wbCYsIHNpemVfdCk7CiAgICBfSW1wbChjb25zdCBjaGFyKiwg c2l6ZV90KTsKICAgIF9JbXBsKGZhY2V0KiosIHNpemVfdCwgYm9vbCk7CgogICB+X0ltcGwoKSB0 aHJvdygpOwoKICAgIF9JbXBsKGNvbnN0IF9JbXBsJik7CgogICAgdm9pZAogICAgb3BlcmF0b3I9 KGNvbnN0IF9JbXBsJik7CgogICAgaW5saW5lIGJvb2wKICAgIF9NX2NoZWNrX3NhbWVfbmFtZSgp CiAgICB7CiAgICAgIGJvb2wgX19yZXQgPSB0cnVlOwogICAgICBmb3IgKHNpemVfdCBfX2kgPSAw OwogICAgICAgICAgIF9fcmV0ICYmIF9faSA8IF9TX2NhdGVnb3JpZXNfc2l6ZSArIF9TX2V4dHJh X2NhdGVnb3JpZXNfc2l6ZSAtIDE7CiAgICAgICAgICAgKytfX2kpCiAgICAgICAgX19yZXQgJj0g KHN0cmNtcChfTV9uYW1lc1tfX2ldLCBfTV9uYW1lc1tfX2kgKyAxXSkgPT0gMCk7CiAgICAgIHJl dHVybiBfX3JldDsKICAgIH0KCiAgICB2b2lkCiAgICBfTV9yZXBsYWNlX2NhdGVnb3JpZXMoY29u c3QgX0ltcGwqLCBjYXRlZ29yeSk7CgogICAgdm9pZAogICAgX01fcmVwbGFjZV9jYXRlZ29yeShj b25zdCBfSW1wbCosIGNvbnN0IGxvY2FsZTo6aWQqIGNvbnN0Kik7CgogICAgdm9pZAogICAgX01f cmVwbGFjZV9mYWNldChjb25zdCBfSW1wbCosIGNvbnN0IGxvY2FsZTo6aWQqKTsKCiAgICB2b2lk CiAgICBfTV9pbnN0YWxsX2ZhY2V0KGNvbnN0IGxvY2FsZTo6aWQqLCBmYWNldCopOwoKICAgIHRl bXBsYXRlPHR5cGVuYW1lIF9GYWNldD4KICAgICAgaW5saW5lIHZvaWQKICAgICAgX01faW5pdF9m YWNldChfRmFjZXQqIF9fZmFjZXQpCiAgICAgIHsgX01faW5zdGFsbF9mYWNldCgmX0ZhY2V0Ojpp ZCwgX19mYWNldCk7IH0KICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFjZXQ+CiAgICBsb2Nh bGU6OmxvY2FsZShjb25zdCBsb2NhbGUmIF9fb3RoZXIsIF9GYWNldCogX19mKQogICAgewogICAg ICBfTV9pbXBsID0gbmV3IF9JbXBsKCpfX290aGVyLl9NX2ltcGwsIDEpOwogICAgICBfTV9pbXBs LT5fTV9pbnN0YWxsX2ZhY2V0KCZfRmFjZXQ6OmlkLCBfX2YpOwogICAgICBmb3IgKHNpemVfdCBf X2kgPSAwOwogICAgICAgICAgIF9faSA8IF9TX2NhdGVnb3JpZXNfc2l6ZSArIF9TX2V4dHJhX2Nh dGVnb3JpZXNfc2l6ZTsgKytfX2kpCiAgICAgICAgewogICAgICAgICAgZGVsZXRlIFtdIF9NX2lt cGwtPl9NX25hbWVzW19faV07CiAgICAgICAgICBjaGFyKiBfX25ldyA9IG5ldyBjaGFyWzJdOwog ICAgICAgICAgc3RyY3B5KF9fbmV3LCAiKiIpOwogICAgICAgICAgX01faW1wbC0+X01fbmFtZXNb X19pXSA9IF9fbmV3OwogICAgICAgIH0KICAgIH0KCgogIGNsYXNzIGxvY2FsZTo6ZmFjZXQKICB7 CiAgcHJpdmF0ZToKICAgIGZyaWVuZCBjbGFzcyBsb2NhbGU7CiAgICBmcmllbmQgY2xhc3MgbG9j YWxlOjpfSW1wbDsKCiAgICBfQXRvbWljX3dvcmQgX01fcmVmZXJlbmNlczsKCiAgcHJvdGVjdGVk OgoKCiAgICBzdGF0aWMgX19jX2xvY2FsZSBfU19jX2xvY2FsZTsKCiAgICBleHBsaWNpdAogICAg ZmFjZXQoc2l6ZV90IF9fcmVmcyA9IDApIHRocm93KCk7CgogICAgdmlydHVhbAogICAgfmZhY2V0 KCk7CgogICAgc3RhdGljIHZvaWQKICAgIF9TX2NyZWF0ZV9jX2xvY2FsZShfX2NfbG9jYWxlJiBf X2Nsb2MsIGNvbnN0IGNoYXIqIF9fcywKICAgICAgICAgICAgICAgICAgICAgICBfX2NfbG9jYWxl IF9fb2xkID0gMCk7CgogICAgc3RhdGljIF9fY19sb2NhbGUKICAgIF9TX2Nsb25lX2NfbG9jYWxl KF9fY19sb2NhbGUmIF9fY2xvYyk7CgogICAgc3RhdGljIHZvaWQKICAgIF9TX2Rlc3Ryb3lfY19s b2NhbGUoX19jX2xvY2FsZSYgX19jbG9jKTsKCiAgcHJpdmF0ZToKICAgIHZvaWQKICAgIF9NX2Fk ZF9yZWZlcmVuY2UoKSB0aHJvdygpOwoKICAgIHZvaWQKICAgIF9NX3JlbW92ZV9yZWZlcmVuY2Uo KSB0aHJvdygpOwoKICAgIGZhY2V0KGNvbnN0IGZhY2V0Jik7CgogICAgdm9pZAogICAgb3BlcmF0 b3I9KGNvbnN0IGZhY2V0Jik7CiAgfTsKCgoKICBjbGFzcyBsb2NhbGU6OmlkCiAgewogIHByaXZh dGU6CiAgICBmcmllbmQgY2xhc3MgbG9jYWxlOwogICAgZnJpZW5kIGNsYXNzIGxvY2FsZTo6X0lt cGw7CiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFjZXQ+CiAgICAgIGZyaWVuZCBjb25zdCBfRmFj ZXQmCiAgICAgIHVzZV9mYWNldChjb25zdCBsb2NhbGUmKTsKICAgIHRlbXBsYXRlPHR5cGVuYW1l IF9GYWNldD4KICAgICAgZnJpZW5kIGJvb2wKICAgICAgaGFzX2ZhY2V0KGNvbnN0IGxvY2FsZSYp IHRocm93ICgpOwoKCgoKICAgIG11dGFibGUgc2l6ZV90IF9NX2luZGV4OwoKCiAgICBzdGF0aWMg X0F0b21pY193b3JkIF9TX2hpZ2h3YXRlcjsKCiAgICB2b2lkCiAgICBvcGVyYXRvcj0oY29uc3Qg aWQmKTsKCiAgICBpZChjb25zdCBpZCYpOwoKICBwdWJsaWM6CgoKICAgIGlkKCk7CgogICAgaW5s aW5lIHNpemVfdAogICAgX01faWQoKSBjb25zdAogICAgewogICAgICBpZiAoIV9NX2luZGV4KQog ICAgICAgIF9NX2luZGV4ID0gMSArIF9fZXhjaGFuZ2VfYW5kX2FkZCgmX1NfaGlnaHdhdGVyLCAx KTsKICAgICAgcmV0dXJuIF9NX2luZGV4IC0gMTsKICAgIH0KICB9OwoKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfRmFjZXQ+CiAgICBjb25zdCBfRmFjZXQmCiAgICB1c2VfZmFjZXQoY29uc3QgbG9jYWxl JiBfX2xvYyk7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9GYWNldD4KICAgIGJvb2wKICAgIGhhc19m YWNldChjb25zdCBsb2NhbGUmIF9fbG9jKSB0aHJvdygpOwp9CiMgNDkgIi91c3IvaW5jbHVkZS9j KysvMy4yLjEvaW9zIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL2JpdHMvaW9zX2Jh c2UuaCIgMSAzCiMgNDQgIi91c3IvaW5jbHVkZS9jKysvMy4yLjEvYml0cy9pb3NfYmFzZS5oIiAz CgoKCm5hbWVzcGFjZSBzdGQKewoKCgoKICBlbnVtIF9Jb3NfRm10ZmxhZ3MgeyBfTV9pb3NfZm10 ZmxhZ3NfZW5kID0gMUwgPDwgMTYgfTsKCiAgaW5saW5lIF9Jb3NfRm10ZmxhZ3MKICBvcGVyYXRv ciYoX0lvc19GbXRmbGFncyBfX2EsIF9Jb3NfRm10ZmxhZ3MgX19iKQogIHsgcmV0dXJuIF9Jb3Nf Rm10ZmxhZ3Moc3RhdGljX2Nhc3Q8aW50PihfX2EpICYgc3RhdGljX2Nhc3Q8aW50PihfX2IpKTsg fQoKICBpbmxpbmUgX0lvc19GbXRmbGFncwogIG9wZXJhdG9yfChfSW9zX0ZtdGZsYWdzIF9fYSwg X0lvc19GbXRmbGFncyBfX2IpCiAgeyByZXR1cm4gX0lvc19GbXRmbGFncyhzdGF0aWNfY2FzdDxp bnQ+KF9fYSkgfCBzdGF0aWNfY2FzdDxpbnQ+KF9fYikpOyB9CgogIGlubGluZSBfSW9zX0ZtdGZs YWdzCiAgb3BlcmF0b3JeKF9Jb3NfRm10ZmxhZ3MgX19hLCBfSW9zX0ZtdGZsYWdzIF9fYikKICB7 IHJldHVybiBfSW9zX0ZtdGZsYWdzKHN0YXRpY19jYXN0PGludD4oX19hKSBeIHN0YXRpY19jYXN0 PGludD4oX19iKSk7IH0KCiAgaW5saW5lIF9Jb3NfRm10ZmxhZ3MKICBvcGVyYXRvcnw9KF9Jb3Nf Rm10ZmxhZ3MmIF9fYSwgX0lvc19GbXRmbGFncyBfX2IpCiAgeyByZXR1cm4gX19hID0gX19hIHwg X19iOyB9CgogIGlubGluZSBfSW9zX0ZtdGZsYWdzCiAgb3BlcmF0b3ImPShfSW9zX0ZtdGZsYWdz JiBfX2EsIF9Jb3NfRm10ZmxhZ3MgX19iKQogIHsgcmV0dXJuIF9fYSA9IF9fYSAmIF9fYjsgfQoK ICBpbmxpbmUgX0lvc19GbXRmbGFncwogIG9wZXJhdG9yXj0oX0lvc19GbXRmbGFncyYgX19hLCBf SW9zX0ZtdGZsYWdzIF9fYikKICB7IHJldHVybiBfX2EgPSBfX2EgXiBfX2I7IH0KCiAgaW5saW5l IF9Jb3NfRm10ZmxhZ3MKICBvcGVyYXRvcn4oX0lvc19GbXRmbGFncyBfX2EpCiAgeyByZXR1cm4g X0lvc19GbXRmbGFncyh+c3RhdGljX2Nhc3Q8aW50PihfX2EpKTsgfQoKCiAgZW51bSBfSW9zX09w ZW5tb2RlIHsgX01faW9zX29wZW5tb2RlX2VuZCA9IDFMIDw8IDE2IH07CgogIGlubGluZSBfSW9z X09wZW5tb2RlCiAgb3BlcmF0b3ImKF9Jb3NfT3Blbm1vZGUgX19hLCBfSW9zX09wZW5tb2RlIF9f YikKICB7IHJldHVybiBfSW9zX09wZW5tb2RlKHN0YXRpY19jYXN0PGludD4oX19hKSAmIHN0YXRp Y19jYXN0PGludD4oX19iKSk7IH0KCiAgaW5saW5lIF9Jb3NfT3Blbm1vZGUKICBvcGVyYXRvcnwo X0lvc19PcGVubW9kZSBfX2EsIF9Jb3NfT3Blbm1vZGUgX19iKQogIHsgcmV0dXJuIF9Jb3NfT3Bl bm1vZGUoc3RhdGljX2Nhc3Q8aW50PihfX2EpIHwgc3RhdGljX2Nhc3Q8aW50PihfX2IpKTsgfQoK ICBpbmxpbmUgX0lvc19PcGVubW9kZQogIG9wZXJhdG9yXihfSW9zX09wZW5tb2RlIF9fYSwgX0lv c19PcGVubW9kZSBfX2IpCiAgeyByZXR1cm4gX0lvc19PcGVubW9kZShzdGF0aWNfY2FzdDxpbnQ+ KF9fYSkgXiBzdGF0aWNfY2FzdDxpbnQ+KF9fYikpOyB9CgogIGlubGluZSBfSW9zX09wZW5tb2Rl CiAgb3BlcmF0b3J8PShfSW9zX09wZW5tb2RlJiBfX2EsIF9Jb3NfT3Blbm1vZGUgX19iKQogIHsg cmV0dXJuIF9fYSA9IF9fYSB8IF9fYjsgfQoKICBpbmxpbmUgX0lvc19PcGVubW9kZQogIG9wZXJh dG9yJj0oX0lvc19PcGVubW9kZSYgX19hLCBfSW9zX09wZW5tb2RlIF9fYikKICB7IHJldHVybiBf X2EgPSBfX2EgJiBfX2I7IH0KCiAgaW5saW5lIF9Jb3NfT3Blbm1vZGUKICBvcGVyYXRvcl49KF9J b3NfT3Blbm1vZGUmIF9fYSwgX0lvc19PcGVubW9kZSBfX2IpCiAgeyByZXR1cm4gX19hID0gX19h IF4gX19iOyB9CgogIGlubGluZSBfSW9zX09wZW5tb2RlCiAgb3BlcmF0b3J+KF9Jb3NfT3Blbm1v ZGUgX19hKQogIHsgcmV0dXJuIF9Jb3NfT3Blbm1vZGUofnN0YXRpY19jYXN0PGludD4oX19hKSk7 IH0KCgogIGVudW0gX0lvc19Jb3N0YXRlIHsgX01faW9zX2lvc3RhdGVfZW5kID0gMUwgPDwgMTYg fTsKCiAgaW5saW5lIF9Jb3NfSW9zdGF0ZQogIG9wZXJhdG9yJihfSW9zX0lvc3RhdGUgX19hLCBf SW9zX0lvc3RhdGUgX19iKQogIHsgcmV0dXJuIF9Jb3NfSW9zdGF0ZShzdGF0aWNfY2FzdDxpbnQ+ KF9fYSkgJiBzdGF0aWNfY2FzdDxpbnQ+KF9fYikpOyB9CgogIGlubGluZSBfSW9zX0lvc3RhdGUK ICBvcGVyYXRvcnwoX0lvc19Jb3N0YXRlIF9fYSwgX0lvc19Jb3N0YXRlIF9fYikKICB7IHJldHVy biBfSW9zX0lvc3RhdGUoc3RhdGljX2Nhc3Q8aW50PihfX2EpIHwgc3RhdGljX2Nhc3Q8aW50Pihf X2IpKTsgfQoKICBpbmxpbmUgX0lvc19Jb3N0YXRlCiAgb3BlcmF0b3JeKF9Jb3NfSW9zdGF0ZSBf X2EsIF9Jb3NfSW9zdGF0ZSBfX2IpCiAgeyByZXR1cm4gX0lvc19Jb3N0YXRlKHN0YXRpY19jYXN0 PGludD4oX19hKSBeIHN0YXRpY19jYXN0PGludD4oX19iKSk7IH0KCiAgaW5saW5lIF9Jb3NfSW9z dGF0ZQogIG9wZXJhdG9yfD0oX0lvc19Jb3N0YXRlJiBfX2EsIF9Jb3NfSW9zdGF0ZSBfX2IpCiAg eyByZXR1cm4gX19hID0gX19hIHwgX19iOyB9CgogIGlubGluZSBfSW9zX0lvc3RhdGUKICBvcGVy YXRvciY9KF9Jb3NfSW9zdGF0ZSYgX19hLCBfSW9zX0lvc3RhdGUgX19iKQogIHsgcmV0dXJuIF9f YSA9IF9fYSAmIF9fYjsgfQoKICBpbmxpbmUgX0lvc19Jb3N0YXRlCiAgb3BlcmF0b3JePShfSW9z X0lvc3RhdGUmIF9fYSwgX0lvc19Jb3N0YXRlIF9fYikKICB7IHJldHVybiBfX2EgPSBfX2EgXiBf X2I7IH0KCiAgaW5saW5lIF9Jb3NfSW9zdGF0ZQogIG9wZXJhdG9yfihfSW9zX0lvc3RhdGUgX19h KQogIHsgcmV0dXJuIF9Jb3NfSW9zdGF0ZSh+c3RhdGljX2Nhc3Q8aW50PihfX2EpKTsgfQoKICBl bnVtIF9Jb3NfU2Vla2RpciB7IF9NX2lvc19zZWVrZGlyX2VuZCA9IDFMIDw8IDE2IH07CgoKICBj bGFzcyBpb3NfYmFzZQogIHsKICBwdWJsaWM6CgoKICAgIGNsYXNzIGZhaWx1cmUgOiBwdWJsaWMg ZXhjZXB0aW9uCiAgICB7CiAgICBwdWJsaWM6CgoKICAgICAgZXhwbGljaXQKICAgICAgZmFpbHVy ZShjb25zdCBzdHJpbmcmIF9fc3RyKSB0aHJvdygpOwoKCgogICAgICB2aXJ0dWFsCiAgICAgIH5m YWlsdXJlKCkgdGhyb3coKTsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcioKICAgICAgd2hhdCgp IGNvbnN0IHRocm93KCk7CgogICAgcHJpdmF0ZToKICAgICAgZW51bSB7IF9NX2J1ZnNpemUgPSAy NTYgfTsKICAgICAgY2hhciBfTV9uYW1lW19NX2J1ZnNpemVdOwoKICAgIH07CgoKICAgIHR5cGVk ZWYgX0lvc19GbXRmbGFncyBmbXRmbGFnczsKCiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3MgYm9v bGFscGhhID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX2Jvb2xhbHBoYSk7CiAgICBzdGF0aWMg Y29uc3QgZm10ZmxhZ3MgZGVjID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX2RlYyk7CiAgICBz dGF0aWMgY29uc3QgZm10ZmxhZ3MgZml4ZWQgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1NfZml4 ZWQpOwogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIGhleCA9IGZtdGZsYWdzKF9faW9zX2ZsYWdz OjpfU19oZXgpOwogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIGludGVybmFsID0gZm10ZmxhZ3Mo X19pb3NfZmxhZ3M6Ol9TX2ludGVybmFsKTsKICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBsZWZ0 ID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX2xlZnQpOwogICAgc3RhdGljIGNvbnN0IGZtdGZs YWdzIG9jdCA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU19vY3QpOwogICAgc3RhdGljIGNvbnN0 IGZtdGZsYWdzIHJpZ2h0ID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX3JpZ2h0KTsKICAgIHN0 YXRpYyBjb25zdCBmbXRmbGFncyBzY2llbnRpZmljID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9T X3NjaWVudGlmaWMpOwogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIHNob3diYXNlID0gZm10Zmxh Z3MoX19pb3NfZmxhZ3M6Ol9TX3Nob3diYXNlKTsKICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBz aG93cG9pbnQgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1Nfc2hvd3BvaW50KTsKICAgIHN0YXRp YyBjb25zdCBmbXRmbGFncyBzaG93cG9zID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX3Nob3dw b3MpOwogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIHNraXB3cyA9IGZtdGZsYWdzKF9faW9zX2Zs YWdzOjpfU19za2lwd3MpOwogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIHVuaXRidWYgPSBmbXRm bGFncyhfX2lvc19mbGFnczo6X1NfdW5pdGJ1Zik7CiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3Mg dXBwZXJjYXNlID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX3VwcGVyY2FzZSk7CiAgICBzdGF0 aWMgY29uc3QgZm10ZmxhZ3MgYWRqdXN0ZmllbGQgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1Nf YWRqdXN0ZmllbGQpOwogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIGJhc2VmaWVsZCA9IGZtdGZs YWdzKF9faW9zX2ZsYWdzOjpfU19iYXNlZmllbGQpOwogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdz IGZsb2F0ZmllbGQgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1NfZmxvYXRmaWVsZCk7CgoKICAg IHR5cGVkZWYgX0lvc19Jb3N0YXRlIGlvc3RhdGU7CiAgICBzdGF0aWMgY29uc3QgaW9zdGF0ZSBi YWRiaXQgPSBpb3N0YXRlKF9faW9zX2ZsYWdzOjpfU19iYWRiaXQpOwogICAgc3RhdGljIGNvbnN0 IGlvc3RhdGUgZW9mYml0ID0gaW9zdGF0ZShfX2lvc19mbGFnczo6X1NfZW9mYml0KTsKICAgIHN0 YXRpYyBjb25zdCBpb3N0YXRlIGZhaWxiaXQgPSBpb3N0YXRlKF9faW9zX2ZsYWdzOjpfU19mYWls Yml0KTsKICAgIHN0YXRpYyBjb25zdCBpb3N0YXRlIGdvb2RiaXQgPSBpb3N0YXRlKDApOwoKCiAg ICB0eXBlZGVmIF9Jb3NfT3Blbm1vZGUgb3Blbm1vZGU7CiAgICBzdGF0aWMgY29uc3Qgb3Blbm1v ZGUgYXBwID0gb3Blbm1vZGUoX19pb3NfZmxhZ3M6Ol9TX2FwcCk7CiAgICBzdGF0aWMgY29uc3Qg b3Blbm1vZGUgYXRlID0gb3Blbm1vZGUoX19pb3NfZmxhZ3M6Ol9TX2F0ZSk7CiAgICBzdGF0aWMg Y29uc3Qgb3Blbm1vZGUgYmluYXJ5ID0gb3Blbm1vZGUoX19pb3NfZmxhZ3M6Ol9TX2Jpbik7CiAg ICBzdGF0aWMgY29uc3Qgb3Blbm1vZGUgaW4gPSBvcGVubW9kZShfX2lvc19mbGFnczo6X1NfaW4p OwogICAgc3RhdGljIGNvbnN0IG9wZW5tb2RlIG91dCA9IG9wZW5tb2RlKF9faW9zX2ZsYWdzOjpf U19vdXQpOwogICAgc3RhdGljIGNvbnN0IG9wZW5tb2RlIHRydW5jID0gb3Blbm1vZGUoX19pb3Nf ZmxhZ3M6Ol9TX3RydW5jKTsKCgogICAgdHlwZWRlZiBfSW9zX1NlZWtkaXIgc2Vla2RpcjsKICAg IHN0YXRpYyBjb25zdCBzZWVrZGlyIGJlZyA9IHNlZWtkaXIoMCk7CiAgICBzdGF0aWMgY29uc3Qg c2Vla2RpciBjdXIgPSBzZWVrZGlyKDEpOwogICAgc3RhdGljIGNvbnN0IHNlZWtkaXIgZW5kID0g c2Vla2RpcigyKTsKIyAyMjkgIi91c3IvaW5jbHVkZS9jKysvMy4yLjEvYml0cy9pb3NfYmFzZS5o IiAzCiAgICBlbnVtIGV2ZW50CiAgICB7CiAgICAgIGVyYXNlX2V2ZW50LAogICAgICBpbWJ1ZV9l dmVudCwKICAgICAgY29weWZtdF9ldmVudAogICAgfTsKCiAgICB0eXBlZGVmIHZvaWQgKCpldmVu dF9jYWxsYmFjaykgKGV2ZW50LCBpb3NfYmFzZSYsIGludCk7CgogICAgdm9pZAogICAgcmVnaXN0 ZXJfY2FsbGJhY2soZXZlbnRfY2FsbGJhY2sgX19mbiwgaW50IF9faW5kZXgpOwoKICBwcm90ZWN0 ZWQ6CgogICAgc3RyZWFtc2l6ZSBfTV9wcmVjaXNpb247CiAgICBzdHJlYW1zaXplIF9NX3dpZHRo OwogICAgZm10ZmxhZ3MgX01fZmxhZ3M7CiAgICBpb3N0YXRlIF9NX2V4Y2VwdGlvbjsKICAgIGlv c3RhdGUgX01fc3RyZWFtYnVmX3N0YXRlOwoKCgogICAgc3RydWN0IF9DYWxsYmFja19saXN0CiAg ICB7CgogICAgICBfQ2FsbGJhY2tfbGlzdCogX01fbmV4dDsKICAgICAgaW9zX2Jhc2U6OmV2ZW50 X2NhbGxiYWNrIF9NX2ZuOwogICAgICBpbnQgX01faW5kZXg7CiAgICAgIF9BdG9taWNfd29yZCBf TV9yZWZjb3VudDsKCiAgICAgIF9DYWxsYmFja19saXN0KGlvc19iYXNlOjpldmVudF9jYWxsYmFj ayBfX2ZuLCBpbnQgX19pbmRleCwKICAgICAgICAgICAgICAgICAgICAgX0NhbGxiYWNrX2xpc3Qq IF9fY2IpCiAgICAgIDogX01fbmV4dChfX2NiKSwgX01fZm4oX19mbiksIF9NX2luZGV4KF9faW5k ZXgpLCBfTV9yZWZjb3VudCgwKSB7IH0KCiAgICAgIHZvaWQKICAgICAgX01fYWRkX3JlZmVyZW5j ZSgpIHsgX19hdG9taWNfYWRkKCZfTV9yZWZjb3VudCwgMSk7IH0KCgogICAgICBpbnQKICAgICAg X01fcmVtb3ZlX3JlZmVyZW5jZSgpIHsgcmV0dXJuIF9fZXhjaGFuZ2VfYW5kX2FkZCgmX01fcmVm Y291bnQsIC0xKTsgfQogICAgfTsKCiAgICAgX0NhbGxiYWNrX2xpc3QqIF9NX2NhbGxiYWNrczsK CiAgICB2b2lkCiAgICBfTV9jYWxsX2NhbGxiYWNrcyhldmVudCBfX2V2KSB0aHJvdygpOwoKICAg IHZvaWQKICAgIF9NX2Rpc3Bvc2VfY2FsbGJhY2tzKHZvaWQpOwoKCiAgICBzdHJ1Y3QgX1dvcmRz CiAgICB7CiAgICAgIHZvaWQqIF9NX3B3b3JkOwogICAgICBsb25nIF9NX2l3b3JkOwogICAgICBf V29yZHMoKSA6IF9NX3B3b3JkKDApLCBfTV9pd29yZCgwKSB7IH0KICAgIH07CgoKICAgIF9Xb3Jk cyBfTV93b3JkX3plcm87CgoKICAgIHN0YXRpYyBjb25zdCBpbnQgX1NfbG9jYWxfd29yZF9zaXpl ID0gODsKICAgIF9Xb3JkcyBfTV9sb2NhbF93b3JkW19TX2xvY2FsX3dvcmRfc2l6ZV07CgoKICAg IGludCBfTV93b3JkX3NpemU7CiAgICBfV29yZHMqIF9NX3dvcmQ7CgogICAgX1dvcmRzJgogICAg X01fZ3Jvd193b3JkcyhpbnQgX19pbmRleCk7CgoKICAgIGxvY2FsZSBfTV9pb3NfbG9jYWxlOwoK ICAgIHZvaWQKICAgIF9NX2luaXQoKTsKCiAgcHVibGljOgoKCgoKCiAgICBjbGFzcyBJbml0CiAg ICB7CiAgICAgIGZyaWVuZCBjbGFzcyBpb3NfYmFzZTsKICAgIHB1YmxpYzoKICAgICAgSW5pdCgp OwogICAgICB+SW5pdCgpOwoKICAgICAgc3RhdGljIHZvaWQKICAgICAgX1NfaW9zX2NyZWF0ZShi b29sIF9fc3luYyk7CgogICAgICBzdGF0aWMgdm9pZAogICAgICBfU19pb3NfZGVzdHJveSgpOwoK ICAgIHByaXZhdGU6CiAgICAgIHN0YXRpYyBpbnQgX1NfaW9zX2Jhc2VfaW5pdDsKICAgICAgc3Rh dGljIGJvb2wgX1Nfc3luY2VkX3dpdGhfc3RkaW87CiAgICB9OwoKCiAgICBpbmxpbmUgZm10Zmxh Z3MKICAgIGZsYWdzKCkgY29uc3QgeyByZXR1cm4gX01fZmxhZ3M7IH0KCiAgICBpbmxpbmUgZm10 ZmxhZ3MKICAgIGZsYWdzKGZtdGZsYWdzIF9fZm10ZmwpCiAgICB7CiAgICAgIGZtdGZsYWdzIF9f b2xkID0gX01fZmxhZ3M7CiAgICAgIF9NX2ZsYWdzID0gX19mbXRmbDsKICAgICAgcmV0dXJuIF9f b2xkOwogICAgfQoKICAgIGlubGluZSBmbXRmbGFncwogICAgc2V0ZihmbXRmbGFncyBfX2ZtdGZs KQogICAgewogICAgICBmbXRmbGFncyBfX29sZCA9IF9NX2ZsYWdzOwogICAgICBfTV9mbGFncyB8 PSBfX2ZtdGZsOwogICAgICByZXR1cm4gX19vbGQ7CiAgICB9CgogICAgaW5saW5lIGZtdGZsYWdz CiAgICBzZXRmKGZtdGZsYWdzIF9fZm10ZmwsIGZtdGZsYWdzIF9fbWFzaykKICAgIHsKICAgICAg Zm10ZmxhZ3MgX19vbGQgPSBfTV9mbGFnczsKICAgICAgX01fZmxhZ3MgJj0gfl9fbWFzazsKICAg ICAgX01fZmxhZ3MgfD0gKF9fZm10ZmwgJiBfX21hc2spOwogICAgICByZXR1cm4gX19vbGQ7CiAg ICB9CgogICAgaW5saW5lIHZvaWQKICAgIHVuc2V0ZihmbXRmbGFncyBfX21hc2spIHsgX01fZmxh Z3MgJj0gfl9fbWFzazsgfQoKICAgIGlubGluZSBzdHJlYW1zaXplCiAgICBwcmVjaXNpb24oKSBj b25zdCB7IHJldHVybiBfTV9wcmVjaXNpb247IH0KCiAgICBpbmxpbmUgc3RyZWFtc2l6ZQogICAg cHJlY2lzaW9uKHN0cmVhbXNpemUgX19wcmVjKQogICAgewogICAgICBzdHJlYW1zaXplIF9fb2xk ID0gX01fcHJlY2lzaW9uOwogICAgICBfTV9wcmVjaXNpb24gPSBfX3ByZWM7CiAgICAgIHJldHVy biBfX29sZDsKICAgIH0KCiAgICBpbmxpbmUgc3RyZWFtc2l6ZQogICAgd2lkdGgoKSBjb25zdCB7 IHJldHVybiBfTV93aWR0aDsgfQoKICAgIGlubGluZSBzdHJlYW1zaXplCiAgICB3aWR0aChzdHJl YW1zaXplIF9fd2lkZSkKICAgIHsKICAgICAgc3RyZWFtc2l6ZSBfX29sZCA9IF9NX3dpZHRoOwog ICAgICBfTV93aWR0aCA9IF9fd2lkZTsKICAgICAgcmV0dXJuIF9fb2xkOwogICAgfQoKICAgIHN0 YXRpYyBib29sCiAgICBzeW5jX3dpdGhfc3RkaW8oYm9vbCBfX3N5bmMgPSB0cnVlKTsKCgogICAg bG9jYWxlCiAgICBpbWJ1ZShjb25zdCBsb2NhbGUmIF9fbG9jKTsKCiAgICBpbmxpbmUgbG9jYWxl CiAgICBnZXRsb2MoKSBjb25zdCB7IHJldHVybiBfTV9pb3NfbG9jYWxlOyB9CgoKICAgIHN0YXRp YyBpbnQKICAgIHhhbGxvYygpIHRocm93KCk7CgogICAgaW5saW5lIGxvbmcmCiAgICBpd29yZChp bnQgX19peCkKICAgIHsKICAgICAgX1dvcmRzJiBfX3dvcmQgPSAoX19peCA8IF9NX3dvcmRfc2l6 ZSkKICAgICAgICAgICAgICAgICAgICAgICAgPyBfTV93b3JkW19faXhdIDogX01fZ3Jvd193b3Jk cyhfX2l4KTsKICAgICAgcmV0dXJuIF9fd29yZC5fTV9pd29yZDsKICAgIH0KCiAgICBpbmxpbmUg dm9pZComCiAgICBwd29yZChpbnQgX19peCkKICAgIHsKICAgICAgX1dvcmRzJiBfX3dvcmQgPSAo X19peCA8IF9NX3dvcmRfc2l6ZSkKICAgICAgICAgICAgICAgICAgICAgICAgPyBfTV93b3JkW19f aXhdIDogX01fZ3Jvd193b3JkcyhfX2l4KTsKICAgICAgcmV0dXJuIF9fd29yZC5fTV9wd29yZDsK ICAgIH0KCgogICAgfmlvc19iYXNlKCk7CgogIHByb3RlY3RlZDoKICAgIGlvc19iYXNlKCk7CgoK CiAgcHJpdmF0ZToKICAgIGlvc19iYXNlKGNvbnN0IGlvc19iYXNlJik7CgogICAgaW9zX2Jhc2Um CiAgICBvcGVyYXRvcj0oY29uc3QgaW9zX2Jhc2UmKTsKCiAgfTsKCgogIGlubGluZSBpb3NfYmFz ZSYKICBib29sYWxwaGEoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICBfX2Jhc2Uuc2V0Zihpb3Nf YmFzZTo6Ym9vbGFscGhhKTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKICBpbmxpbmUgaW9zX2Jh c2UmCiAgbm9ib29sYWxwaGEoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICBfX2Jhc2UudW5zZXRm KGlvc19iYXNlOjpib29sYWxwaGEpOwogICAgcmV0dXJuIF9fYmFzZTsKICB9CgogIGlubGluZSBp b3NfYmFzZSYKICBzaG93YmFzZShpb3NfYmFzZSYgX19iYXNlKQogIHsKICAgIF9fYmFzZS5zZXRm KGlvc19iYXNlOjpzaG93YmFzZSk7CiAgICByZXR1cm4gX19iYXNlOwogIH0KCiAgaW5saW5lIGlv c19iYXNlJgogIG5vc2hvd2Jhc2UoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICBfX2Jhc2UudW5z ZXRmKGlvc19iYXNlOjpzaG93YmFzZSk7CiAgICByZXR1cm4gX19iYXNlOwogIH0KCiAgaW5saW5l IGlvc19iYXNlJgogIHNob3dwb2ludChpb3NfYmFzZSYgX19iYXNlKQogIHsKICAgIF9fYmFzZS5z ZXRmKGlvc19iYXNlOjpzaG93cG9pbnQpOwogICAgcmV0dXJuIF9fYmFzZTsKICB9CgogIGlubGlu ZSBpb3NfYmFzZSYKICBub3Nob3dwb2ludChpb3NfYmFzZSYgX19iYXNlKQogIHsKICAgIF9fYmFz ZS51bnNldGYoaW9zX2Jhc2U6OnNob3dwb2ludCk7CiAgICByZXR1cm4gX19iYXNlOwogIH0KCiAg aW5saW5lIGlvc19iYXNlJgogIHNob3dwb3MoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICBfX2Jh c2Uuc2V0Zihpb3NfYmFzZTo6c2hvd3Bvcyk7CiAgICByZXR1cm4gX19iYXNlOwogIH0KCiAgaW5s aW5lIGlvc19iYXNlJgogIG5vc2hvd3Bvcyhpb3NfYmFzZSYgX19iYXNlKQogIHsKICAgIF9fYmFz ZS51bnNldGYoaW9zX2Jhc2U6OnNob3dwb3MpOwogICAgcmV0dXJuIF9fYmFzZTsKICB9CgogIGlu bGluZSBpb3NfYmFzZSYKICBza2lwd3MoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICBfX2Jhc2Uu c2V0Zihpb3NfYmFzZTo6c2tpcHdzKTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKICBpbmxpbmUg aW9zX2Jhc2UmCiAgbm9za2lwd3MoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICBfX2Jhc2UudW5z ZXRmKGlvc19iYXNlOjpza2lwd3MpOwogICAgcmV0dXJuIF9fYmFzZTsKICB9CgogIGlubGluZSBp b3NfYmFzZSYKICB1cHBlcmNhc2UoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICBfX2Jhc2Uuc2V0 Zihpb3NfYmFzZTo6dXBwZXJjYXNlKTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKICBpbmxpbmUg aW9zX2Jhc2UmCiAgbm91cHBlcmNhc2UoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICBfX2Jhc2Uu dW5zZXRmKGlvc19iYXNlOjp1cHBlcmNhc2UpOwogICAgcmV0dXJuIF9fYmFzZTsKICB9CgogIGlu bGluZSBpb3NfYmFzZSYKICB1bml0YnVmKGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgIF9fYmFz ZS5zZXRmKGlvc19iYXNlOjp1bml0YnVmKTsKICAgICByZXR1cm4gX19iYXNlOwogIH0KCiAgaW5s aW5lIGlvc19iYXNlJgogIG5vdW5pdGJ1Zihpb3NfYmFzZSYgX19iYXNlKQogIHsKICAgICBfX2Jh c2UudW5zZXRmKGlvc19iYXNlOjp1bml0YnVmKTsKICAgICByZXR1cm4gX19iYXNlOwogIH0KCgog IGlubGluZSBpb3NfYmFzZSYKICBpbnRlcm5hbChpb3NfYmFzZSYgX19iYXNlKQogIHsKICAgICBf X2Jhc2Uuc2V0Zihpb3NfYmFzZTo6aW50ZXJuYWwsIGlvc19iYXNlOjphZGp1c3RmaWVsZCk7CiAg ICAgcmV0dXJuIF9fYmFzZTsKICB9CgogIGlubGluZSBpb3NfYmFzZSYKICBsZWZ0KGlvc19iYXNl JiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnNldGYoaW9zX2Jhc2U6OmxlZnQsIGlvc19iYXNlOjph ZGp1c3RmaWVsZCk7CiAgICByZXR1cm4gX19iYXNlOwogIH0KCiAgaW5saW5lIGlvc19iYXNlJgog IHJpZ2h0KGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnNldGYoaW9zX2Jhc2U6OnJp Z2h0LCBpb3NfYmFzZTo6YWRqdXN0ZmllbGQpOwogICAgcmV0dXJuIF9fYmFzZTsKICB9CgoKICBp bmxpbmUgaW9zX2Jhc2UmCiAgZGVjKGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnNl dGYoaW9zX2Jhc2U6OmRlYywgaW9zX2Jhc2U6OmJhc2VmaWVsZCk7CiAgICByZXR1cm4gX19iYXNl OwogIH0KCiAgaW5saW5lIGlvc19iYXNlJgogIGhleChpb3NfYmFzZSYgX19iYXNlKQogIHsKICAg IF9fYmFzZS5zZXRmKGlvc19iYXNlOjpoZXgsIGlvc19iYXNlOjpiYXNlZmllbGQpOwogICAgcmV0 dXJuIF9fYmFzZTsKICB9CgogIGlubGluZSBpb3NfYmFzZSYKICBvY3QoaW9zX2Jhc2UmIF9fYmFz ZSkKICB7CiAgICBfX2Jhc2Uuc2V0Zihpb3NfYmFzZTo6b2N0LCBpb3NfYmFzZTo6YmFzZWZpZWxk KTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKCiAgaW5saW5lIGlvc19iYXNlJgogIGZpeGVkKGlv c19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnNldGYoaW9zX2Jhc2U6OmZpeGVkLCBpb3Nf YmFzZTo6ZmxvYXRmaWVsZCk7CiAgICByZXR1cm4gX19iYXNlOwogIH0KCiAgaW5saW5lIGlvc19i YXNlJgogIHNjaWVudGlmaWMoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICBfX2Jhc2Uuc2V0Zihp b3NfYmFzZTo6c2NpZW50aWZpYywgaW9zX2Jhc2U6OmZsb2F0ZmllbGQpOwogICAgcmV0dXJuIF9f YmFzZTsKICB9Cgp9CiMgNTAgIi91c3IvaW5jbHVkZS9jKysvMy4yLjEvaW9zIiAyIDMKIyAxICIv dXNyL2luY2x1ZGUvYysrLzMuMi4xL3N0cmVhbWJ1ZiIgMSAzCiMgNDQgIi91c3IvaW5jbHVkZS9j KysvMy4yLjEvc3RyZWFtYnVmIiAzCgoKCgoKCgpuYW1lc3BhY2Ugc3RkCnsKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBzdHJlYW1zaXplCiAgICBfX2Nv cHlfc3RyZWFtYnVmcyhiYXNpY19pb3M8X0NoYXJULCBfVHJhaXRzPiYgX2lvcywKICAgICAgICAg ICAgICAgICAgICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+KiBfX3NiaW4sCiAg ICAgICAgICAgICAgICAgICAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiogX19z Ym91dCk7CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAg ICBjbGFzcyBiYXNpY19zdHJlYW1idWYKICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYg X0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBfVHJhaXRzIHRyYWl0c190eXBlOwogICAg ICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c190eXBlOjppbnRfdHlwZSBpbnRfdHlwZTsKICAgICAg dHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfdHlwZTo6cG9zX3R5cGUgcG9zX3R5cGU7CiAgICAgIHR5 cGVkZWYgdHlwZW5hbWUgdHJhaXRzX3R5cGU6Om9mZl90eXBlIG9mZl90eXBlOwoKCiAgICAgIHR5 cGVkZWYgY3R5cGU8Y2hhcl90eXBlPiBfX2N0eXBlX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNf c3RyZWFtYnVmPGNoYXJfdHlwZSwgdHJhaXRzX3R5cGU+IF9fc3RyZWFtYnVmX3R5cGU7CiAgICAg IHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX3R5cGU6OnN0YXRlX3R5cGUgX19zdGF0ZV90eXBlOwoK ICAgICAgZnJpZW5kIGNsYXNzIGJhc2ljX2lvczxjaGFyX3R5cGUsIHRyYWl0c190eXBlPjsKICAg ICAgZnJpZW5kIGNsYXNzIGJhc2ljX2lzdHJlYW08Y2hhcl90eXBlLCB0cmFpdHNfdHlwZT47CiAg ICAgIGZyaWVuZCBjbGFzcyBiYXNpY19vc3RyZWFtPGNoYXJfdHlwZSwgdHJhaXRzX3R5cGU+Owog ICAgICBmcmllbmQgY2xhc3MgaXN0cmVhbWJ1Zl9pdGVyYXRvcjxjaGFyX3R5cGUsIHRyYWl0c190 eXBlPjsKICAgICAgZnJpZW5kIGNsYXNzIG9zdHJlYW1idWZfaXRlcmF0b3I8Y2hhcl90eXBlLCB0 cmFpdHNfdHlwZT47CgogICAgICBmcmllbmQgc3RyZWFtc2l6ZQogICAgICBfX2NvcHlfc3RyZWFt YnVmczw+KGJhc2ljX2lvczxjaGFyX3R5cGUsIHRyYWl0c190eXBlPiYgX19pb3MsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgX19zdHJlYW1idWZfdHlwZSogX19zYmluLF9fc3RyZWFtYnVmX3R5 cGUqIF9fc2JvdXQpOwoKICAgIHByb3RlY3RlZDoKCgoKCgogICAgICBjaGFyX3R5cGUqIF9NX2J1 ZjsKCgogICAgICBzaXplX3QgX01fYnVmX3NpemU7CgoKICAgICAgc2l6ZV90IF9NX2J1Zl9zaXpl X29wdDsKCgoKICAgICAgYm9vbCBfTV9idWZfdW5pZmllZDsKCgoKCgoKICAgICAgY2hhcl90eXBl KiBfTV9pbl9iZWc7CiAgICAgIGNoYXJfdHlwZSogX01faW5fY3VyOwogICAgICBjaGFyX3R5cGUq IF9NX2luX2VuZDsKICAgICAgY2hhcl90eXBlKiBfTV9vdXRfYmVnOwogICAgICBjaGFyX3R5cGUq IF9NX291dF9jdXI7CiAgICAgIGNoYXJfdHlwZSogX01fb3V0X2VuZDsKCgogICAgICBpb3NfYmFz ZTo6b3Blbm1vZGUgX01fbW9kZTsKCgogICAgICBsb2NhbGUgX01fYnVmX2xvY2FsZTsKCgogICAg ICBib29sIF9NX2J1Zl9sb2NhbGVfaW5pdDsKCgoKCgoKICAgICAgc3RhdGljIGNvbnN0IHNpemVf dCBfU19wYmFja19zaXplID0gMTsKICAgICAgY2hhcl90eXBlIF9NX3BiYWNrW19TX3BiYWNrX3Np emVdOwogICAgICBjaGFyX3R5cGUqIF9NX3BiYWNrX2N1cl9zYXZlOwogICAgICBjaGFyX3R5cGUq IF9NX3BiYWNrX2VuZF9zYXZlOwogICAgICBib29sIF9NX3BiYWNrX2luaXQ7CgoKICAgICAgZnBv czxfX3N0YXRlX3R5cGU+IF9NX3BvczsKCgoKCiAgICAgIHZvaWQKICAgICAgX01fcGJhY2tfY3Jl YXRlKCkKICAgICAgewogICAgICAgIGlmICghX01fcGJhY2tfaW5pdCkKICAgICAgICAgIHsKICAg ICAgICAgICAgc2l6ZV90IF9fZGlzdCA9IF9NX2luX2VuZCAtIF9NX2luX2N1cjsKICAgICAgICAg ICAgc2l6ZV90IF9fbGVuID0gbWluKF9TX3BiYWNrX3NpemUsIF9fZGlzdCk7CiAgICAgICAgICAg IHRyYWl0c190eXBlOjpjb3B5KF9NX3BiYWNrLCBfTV9pbl9jdXIsIF9fbGVuKTsKICAgICAgICAg ICAgX01fcGJhY2tfY3VyX3NhdmUgPSBfTV9pbl9jdXI7CiAgICAgICAgICAgIF9NX3BiYWNrX2Vu ZF9zYXZlID0gX01faW5fZW5kOwogICAgICAgICAgICB0aGlzLT5zZXRnKF9NX3BiYWNrLCBfTV9w YmFjaywgX01fcGJhY2sgKyBfX2xlbik7CiAgICAgICAgICAgIF9NX3BiYWNrX2luaXQgPSB0cnVl OwogICAgICAgICAgfQogICAgICB9CgoKCgogICAgICB2b2lkCiAgICAgIF9NX3BiYWNrX2Rlc3Ry b3koKQogICAgICB7CiAgICAgICAgaWYgKF9NX3BiYWNrX2luaXQpCiAgICAgICAgICB7CgogICAg ICAgICAgICBzaXplX3QgX19vZmZfY3VyID0gX01faW5fY3VyIC0gX01fcGJhY2s7CgoKICAgICAg ICAgICAgc2l6ZV90IF9fb2ZmX2VuZCA9IDA7CiAgICAgICAgICAgIHNpemVfdCBfX3BiYWNrX2xl biA9IF9NX2luX2VuZCAtIF9NX3BiYWNrOwogICAgICAgICAgICBzaXplX3QgX19zYXZlX2xlbiA9 IF9NX3BiYWNrX2VuZF9zYXZlIC0gX01fYnVmOwogICAgICAgICAgICBpZiAoX19wYmFja19sZW4g PiBfX3NhdmVfbGVuKQogICAgICAgICAgICAgIF9fb2ZmX2VuZCA9IF9fcGJhY2tfbGVuIC0gX19z YXZlX2xlbjsKCiAgICAgICAgICAgIHRoaXMtPnNldGcoX01fYnVmLCBfTV9wYmFja19jdXJfc2F2 ZSArIF9fb2ZmX2N1ciwKICAgICAgICAgICAgICAgICAgICAgICBfTV9wYmFja19lbmRfc2F2ZSAr IF9fb2ZmX2VuZCk7CiAgICAgICAgICAgIF9NX3BiYWNrX2N1cl9zYXZlID0gX19udWxsOwogICAg ICAgICAgICBfTV9wYmFja19lbmRfc2F2ZSA9IF9fbnVsbDsKICAgICAgICAgICAgX01fcGJhY2tf aW5pdCA9IGZhbHNlOwogICAgICAgICAgfQogICAgICB9CgoKCiAgICAgIHZvaWQKICAgICAgX01f aW5fY3VyX21vdmUob2ZmX3R5cGUgX19uKQogICAgICB7CiAgICAgICAgYm9vbCBfX3Rlc3RvdXQg PSBfTV9vdXRfY3VyOwogICAgICAgIF9NX2luX2N1ciArPSBfX247CiAgICAgICAgaWYgKF9fdGVz dG91dCAmJiBfTV9idWZfdW5pZmllZCkKICAgICAgICAgIF9NX291dF9jdXIgKz0gX19uOwogICAg ICB9CiMgMjAyICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL3N0cmVhbWJ1ZiIgMwogICAgICB2b2lk CiAgICAgIF9NX291dF9jdXJfbW92ZShvZmZfdHlwZSBfX24pCiAgICAgIHsKICAgICAgICBib29s IF9fdGVzdGluID0gX01faW5fY3VyOwoKICAgICAgICBfTV9vdXRfY3VyICs9IF9fbjsKICAgICAg ICBpZiAoX190ZXN0aW4gJiYgX01fYnVmX3VuaWZpZWQpCiAgICAgICAgICBfTV9pbl9jdXIgKz0g X19uOwogICAgICAgIGlmIChfTV9vdXRfY3VyID4gX01fb3V0X2VuZCkKICAgICAgICAgIHsKICAg ICAgICAgICAgX01fb3V0X2VuZCA9IF9NX291dF9jdXI7CgogICAgICAgICAgICBpZiAoX190ZXN0 aW4pCiAgICAgICAgICAgICAgX01faW5fZW5kICs9IF9fbjsKICAgICAgICAgIH0KICAgICAgfQoK CgoKICAgICAgb2ZmX3R5cGUKICAgICAgX01fb3V0X2J1Zl9zaXplKCkKICAgICAgewogICAgICAg IG9mZl90eXBlIF9fcmV0ID0gMDsKICAgICAgICBpZiAoX01fb3V0X2N1cikKICAgICAgICAgIHsK CiAgICAgICAgICAgIGlmIChfTV9vdXRfYmVnID09IF9NX2J1ZikKICAgICAgICAgICAgICBfX3Jl dCA9IF9NX291dF9iZWcgKyBfTV9idWZfc2l6ZSAtIF9NX291dF9jdXI7CgogICAgICAgICAgICBl bHNlCiAgICAgICAgICAgICAgX19yZXQgPSBfTV9vdXRfZW5kIC0gX01fb3V0X2N1cjsKICAgICAg ICAgIH0KICAgICAgICByZXR1cm4gX19yZXQ7CiAgICAgIH0KCiAgcHVibGljOgogICAgICB2aXJ0 dWFsCiAgICAgIH5iYXNpY19zdHJlYW1idWYoKQogICAgICB7CiAgICAgICAgX01fYnVmX3VuaWZp ZWQgPSBmYWxzZTsKICAgICAgICBfTV9idWZfc2l6ZSA9IDA7CiAgICAgICAgX01fYnVmX3NpemVf b3B0ID0gMDsKICAgICAgICBfTV9tb2RlID0gaW9zX2Jhc2U6Om9wZW5tb2RlKDApOwogICAgICAg IF9NX2J1Zl9sb2NhbGVfaW5pdCA9IGZhbHNlOwogICAgICB9CgoKICAgICAgbG9jYWxlCiAgICAg IHB1YmltYnVlKGNvbnN0IGxvY2FsZSAmX19sb2MpCiAgICAgIHsKICAgICAgICBsb2NhbGUgX190 bXAodGhpcy0+Z2V0bG9jKCkpOwogICAgICAgIHRoaXMtPmltYnVlKF9fbG9jKTsKICAgICAgICBy ZXR1cm4gX190bXA7CiAgICAgIH0KCiAgICAgIGxvY2FsZQogICAgICBnZXRsb2MoKSBjb25zdAog ICAgICB7CiAgICAgICAgaWYgKF9NX2J1Zl9sb2NhbGVfaW5pdCkKICAgICAgICAgIHJldHVybiBf TV9idWZfbG9jYWxlOwogICAgICAgIGVsc2UKICAgICAgICAgIHJldHVybiBsb2NhbGUoKTsKICAg ICAgfQoKCiAgICAgIF9fc3RyZWFtYnVmX3R5cGUqCiAgICAgIHB1YnNldGJ1ZihjaGFyX3R5cGUq IF9fcywgc3RyZWFtc2l6ZSBfX24pCiAgICAgIHsgcmV0dXJuIHRoaXMtPnNldGJ1ZihfX3MsIF9f bik7IH0KCiAgICAgIHBvc190eXBlCiAgICAgIHB1YnNlZWtvZmYob2ZmX3R5cGUgX19vZmYsIGlv c19iYXNlOjpzZWVrZGlyIF9fd2F5LAogICAgICAgICAgICAgICAgIGlvc19iYXNlOjpvcGVubW9k ZSBfX21vZGUgPSBpb3NfYmFzZTo6aW4gfCBpb3NfYmFzZTo6b3V0KQogICAgICB7IHJldHVybiB0 aGlzLT5zZWVrb2ZmKF9fb2ZmLCBfX3dheSwgX19tb2RlKTsgfQoKICAgICAgcG9zX3R5cGUKICAg ICAgcHVic2Vla3Bvcyhwb3NfdHlwZSBfX3NwLAogICAgICAgICAgICAgICAgIGlvc19iYXNlOjpv cGVubW9kZSBfX21vZGUgPSBpb3NfYmFzZTo6aW4gfCBpb3NfYmFzZTo6b3V0KQogICAgICB7IHJl dHVybiB0aGlzLT5zZWVrcG9zKF9fc3AsIF9fbW9kZSk7IH0KCiAgICAgIGludAogICAgICBwdWJz eW5jKCkgeyByZXR1cm4gdGhpcy0+c3luYygpOyB9CgoKCiAgICAgIHN0cmVhbXNpemUKICAgICAg aW5fYXZhaWwoKQogICAgICB7CiAgICAgICAgc3RyZWFtc2l6ZSBfX3JldDsKICAgICAgICBpZiAo X01faW5fY3VyICYmIF9NX2luX2N1ciA8IF9NX2luX2VuZCkKICAgICAgICAgIHsKICAgICAgICAg ICAgaWYgKF9NX3BiYWNrX2luaXQpCiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgc2l6 ZV90IF9fc2F2ZV9sZW4gPSBfTV9wYmFja19lbmRfc2F2ZSAtIF9NX3BiYWNrX2N1cl9zYXZlOwog ICAgICAgICAgICAgICAgc2l6ZV90IF9fcGJhY2tfbGVuID0gX01faW5fY3VyIC0gX01fcGJhY2s7 CiAgICAgICAgICAgICAgICBfX3JldCA9IF9fc2F2ZV9sZW4gLSBfX3BiYWNrX2xlbjsKICAgICAg ICAgICAgICB9CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICBfX3JldCA9IHRoaXMtPmVn cHRyKCkgLSB0aGlzLT5ncHRyKCk7CiAgICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgICAg X19yZXQgPSB0aGlzLT5zaG93bWFueWMoKTsKICAgICAgICByZXR1cm4gX19yZXQ7CiAgICAgIH0K CiAgICAgIGludF90eXBlCiAgICAgIHNuZXh0YygpCiAgICAgIHsKICAgICAgICBpbnRfdHlwZSBf X2VvZiA9IHRyYWl0c190eXBlOjplb2YoKTsKICAgICAgICByZXR1cm4gKHRyYWl0c190eXBlOjpl cV9pbnRfdHlwZSh0aGlzLT5zYnVtcGMoKSwgX19lb2YpCiAgICAgICAgICAgICAgICA/IF9fZW9m IDogdGhpcy0+c2dldGMoKSk7CiAgICAgIH0KCiAgICAgIGludF90eXBlCiAgICAgIHNidW1wYygp OwoKICAgICAgaW50X3R5cGUKICAgICAgc2dldGMoKQogICAgICB7CiAgICAgICAgaW50X3R5cGUg X19yZXQ7CiAgICAgICAgaWYgKF9NX2luX2N1ciAmJiBfTV9pbl9jdXIgPCBfTV9pbl9lbmQpCiAg ICAgICAgICBfX3JldCA9IHRyYWl0c190eXBlOjp0b19pbnRfdHlwZSgqKHRoaXMtPmdwdHIoKSkp OwogICAgICAgIGVsc2UKICAgICAgICAgIF9fcmV0ID0gdGhpcy0+dW5kZXJmbG93KCk7CiAgICAg ICAgcmV0dXJuIF9fcmV0OwogICAgICB9CgogICAgICBzdHJlYW1zaXplCiAgICAgIHNnZXRuKGNo YXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbikKICAgICAgeyByZXR1cm4gdGhpcy0+eHNnZXRu KF9fcywgX19uKTsgfQoKCiAgICAgIGludF90eXBlCiAgICAgIHNwdXRiYWNrYyhjaGFyX3R5cGUg X19jKTsKCiAgICAgIGludF90eXBlCiAgICAgIHN1bmdldGMoKTsKCgogICAgICBpbnRfdHlwZQog ICAgICBzcHV0YyhjaGFyX3R5cGUgX19jKTsKCiAgICAgIHN0cmVhbXNpemUKICAgICAgc3B1dG4o Y29uc3QgY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKQogICAgICB7IHJldHVybiB0aGlz LT54c3B1dG4oX19zLCBfX24pOyB9CgogICAgcHJvdGVjdGVkOgogICAgICBiYXNpY19zdHJlYW1i dWYoKQogICAgICA6IF9NX2J1ZihfX251bGwpLCBfTV9idWZfc2l6ZSgwKSwgX01fYnVmX3NpemVf b3B0KDgxOTIpLAogICAgICBfTV9idWZfdW5pZmllZChmYWxzZSksIF9NX2luX2JlZygwKSwgX01f aW5fY3VyKDApLCBfTV9pbl9lbmQoMCksCiAgICAgIF9NX291dF9iZWcoMCksIF9NX291dF9jdXIo MCksIF9NX291dF9lbmQoMCksCiAgICAgIF9NX21vZGUoaW9zX2Jhc2U6Om9wZW5tb2RlKDApKSwg X01fYnVmX2xvY2FsZShsb2NhbGUoKSksCiAgICAgIF9NX2J1Zl9sb2NhbGVfaW5pdChmYWxzZSks IF9NX3BiYWNrX2N1cl9zYXZlKDApLCBfTV9wYmFja19lbmRfc2F2ZSgwKSwKICAgICAgX01fcGJh Y2tfaW5pdChmYWxzZSkKICAgICAgeyB9CgoKICAgICAgY2hhcl90eXBlKgogICAgICBlYmFjaygp IGNvbnN0IHsgcmV0dXJuIF9NX2luX2JlZzsgfQoKICAgICAgY2hhcl90eXBlKgogICAgICBncHRy KCkgY29uc3QgeyByZXR1cm4gX01faW5fY3VyOyB9CgogICAgICBjaGFyX3R5cGUqCiAgICAgIGVn cHRyKCkgY29uc3QgeyByZXR1cm4gX01faW5fZW5kOyB9CgogICAgICB2b2lkCiAgICAgIGdidW1w KGludCBfX24pIHsgX01faW5fY3VyICs9IF9fbjsgfQoKICAgICAgdm9pZAogICAgICBzZXRnKGNo YXJfdHlwZSogX19nYmVnLCBjaGFyX3R5cGUqIF9fZ25leHQsIGNoYXJfdHlwZSogX19nZW5kKQog ICAgICB7CiAgICAgICAgX01faW5fYmVnID0gX19nYmVnOwogICAgICAgIF9NX2luX2N1ciA9IF9f Z25leHQ7CiAgICAgICAgX01faW5fZW5kID0gX19nZW5kOwogICAgICAgIGlmICghKF9NX21vZGUg JiBpb3NfYmFzZTo6aW4pICYmIF9fZ2JlZyAmJiBfX2duZXh0ICYmIF9fZ2VuZCkKICAgICAgICAg IF9NX21vZGUgPSBfTV9tb2RlIHwgaW9zX2Jhc2U6OmluOwogICAgICB9CgoKICAgICAgY2hhcl90 eXBlKgogICAgICBwYmFzZSgpIGNvbnN0IHsgcmV0dXJuIF9NX291dF9iZWc7IH0KCiAgICAgIGNo YXJfdHlwZSoKICAgICAgcHB0cigpIGNvbnN0IHsgcmV0dXJuIF9NX291dF9jdXI7IH0KCiAgICAg IGNoYXJfdHlwZSoKICAgICAgZXBwdHIoKSBjb25zdCB7IHJldHVybiBfTV9vdXRfZW5kOyB9Cgog ICAgICB2b2lkCiAgICAgIHBidW1wKGludCBfX24pIHsgX01fb3V0X2N1ciArPSBfX247IH0KCiAg ICAgIHZvaWQKICAgICAgc2V0cChjaGFyX3R5cGUqIF9fcGJlZywgY2hhcl90eXBlKiBfX3BlbmQp CiAgICAgIHsKICAgICAgICBfTV9vdXRfYmVnID0gX01fb3V0X2N1ciA9IF9fcGJlZzsKICAgICAg ICBfTV9vdXRfZW5kID0gX19wZW5kOwogICAgICAgIGlmICghKF9NX21vZGUgJiBpb3NfYmFzZTo6 b3V0KSAmJiBfX3BiZWcgJiYgX19wZW5kKQogICAgICAgICAgX01fbW9kZSA9IF9NX21vZGUgfCBp b3NfYmFzZTo6b3V0OwogICAgICB9CgoKCiAgICAgIHZpcnR1YWwgdm9pZAogICAgICBpbWJ1ZShj b25zdCBsb2NhbGUmIF9fbG9jKQogICAgICB7CiAgICAgICAgX01fYnVmX2xvY2FsZV9pbml0ID0g dHJ1ZTsKICAgICAgICBpZiAoX01fYnVmX2xvY2FsZSAhPSBfX2xvYykKICAgICAgICAgIF9NX2J1 Zl9sb2NhbGUgPSBfX2xvYzsKICAgICAgfQoKCiAgICAgIHZpcnR1YWwgYmFzaWNfc3RyZWFtYnVm PGNoYXJfdHlwZSxfVHJhaXRzPioKICAgICAgc2V0YnVmKGNoYXJfdHlwZSosIHN0cmVhbXNpemUp CiAgICAgIHsgcmV0dXJuIHRoaXM7IH0KCiAgICAgIHZpcnR1YWwgcG9zX3R5cGUKICAgICAgc2Vl a29mZihvZmZfdHlwZSwgaW9zX2Jhc2U6OnNlZWtkaXIsCiAgICAgICAgICAgICAgaW9zX2Jhc2U6 Om9wZW5tb2RlID0gaW9zX2Jhc2U6OmluIHwgaW9zX2Jhc2U6Om91dCkKICAgICAgeyByZXR1cm4g cG9zX3R5cGUob2ZmX3R5cGUoLTEpKTsgfQoKICAgICAgdmlydHVhbCBwb3NfdHlwZQogICAgICBz ZWVrcG9zKHBvc190eXBlLAogICAgICAgICAgICAgIGlvc19iYXNlOjpvcGVubW9kZSA9IGlvc19i YXNlOjppbiB8IGlvc19iYXNlOjpvdXQpCiAgICAgIHsgcmV0dXJuIHBvc190eXBlKG9mZl90eXBl KC0xKSk7IH0KCiAgICAgIHZpcnR1YWwgaW50CiAgICAgIHN5bmMoKSB7IHJldHVybiAwOyB9CgoK ICAgICAgdmlydHVhbCBzdHJlYW1zaXplCiAgICAgIHNob3dtYW55YygpIHsgcmV0dXJuIDA7IH0K CiAgICAgIHZpcnR1YWwgc3RyZWFtc2l6ZQogICAgICB4c2dldG4oY2hhcl90eXBlKiBfX3MsIHN0 cmVhbXNpemUgX19uKTsKCiAgICAgIHZpcnR1YWwgaW50X3R5cGUKICAgICAgdW5kZXJmbG93KCkK ICAgICAgeyByZXR1cm4gdHJhaXRzX3R5cGU6OmVvZigpOyB9CgogICAgICB2aXJ0dWFsIGludF90 eXBlCiAgICAgIHVmbG93KCkKICAgICAgewogICAgICAgIGludF90eXBlIF9fcmV0ID0gdHJhaXRz X3R5cGU6OmVvZigpOwogICAgICAgIGJvb2wgX190ZXN0ZW9mID0gdHJhaXRzX3R5cGU6OmVxX2lu dF90eXBlKHRoaXMtPnVuZGVyZmxvdygpLCBfX3JldCk7CiAgICAgICAgYm9vbCBfX3Rlc3RwZW5k aW5nID0gX01faW5fY3VyICYmIF9NX2luX2N1ciA8IF9NX2luX2VuZDsKICAgICAgICBpZiAoIV9f dGVzdGVvZiAmJiBfX3Rlc3RwZW5kaW5nKQogICAgICAgICAgewogICAgICAgICAgICBfX3JldCA9 IHRyYWl0c190eXBlOjp0b19pbnRfdHlwZSgqX01faW5fY3VyKTsKICAgICAgICAgICAgKytfTV9p bl9jdXI7CiAgICAgICAgICAgIGlmIChfTV9idWZfdW5pZmllZCAmJiBfTV9tb2RlICYgaW9zX2Jh c2U6Om91dCkKICAgICAgICAgICAgICArK19NX291dF9jdXI7CiAgICAgICAgICB9CiAgICAgICAg cmV0dXJuIF9fcmV0OwogICAgICB9CgoKICAgICAgdmlydHVhbCBpbnRfdHlwZQogICAgICBwYmFj a2ZhaWwoaW50X3R5cGUgPSB0cmFpdHNfdHlwZTo6ZW9mKCkpCiAgICAgIHsgcmV0dXJuIHRyYWl0 c190eXBlOjplb2YoKTsgfQoKCiAgICAgIHZpcnR1YWwgc3RyZWFtc2l6ZQogICAgICB4c3B1dG4o Y29uc3QgY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKTsKCiAgICAgIHZpcnR1YWwgaW50 X3R5cGUKICAgICAgb3ZlcmZsb3coaW50X3R5cGUgPSB0cmFpdHNfdHlwZTo6ZW9mKCkpCiAgICAg IHsgcmV0dXJuIHRyYWl0c190eXBlOjplb2YoKTsgfQojIDQ4NSAiL3Vzci9pbmNsdWRlL2MrKy8z LjIuMS9zdHJlYW1idWYiIDMKICAgIHByaXZhdGU6CiAgICAgIGJhc2ljX3N0cmVhbWJ1Zihjb25z dCBfX3N0cmVhbWJ1Zl90eXBlJikgeyB9OwoKICAgICAgX19zdHJlYW1idWZfdHlwZSYKICAgICAg b3BlcmF0b3I9KGNvbnN0IF9fc3RyZWFtYnVmX3R5cGUmKSB7IHJldHVybiAqdGhpczsgfTsKCiAg ICB9Owp9CgoKCgoKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL2JpdHMvc3RyZWFtYnVmLnRj YyIgMSAzCiMgMzkgIi91c3IvaW5jbHVkZS9jKysvMy4yLjEvYml0cy9zdHJlYW1idWYudGNjIiAz CgpuYW1lc3BhY2Ugc3RkCnsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U cmFpdHM+CiAgICBjb25zdCBzaXplX3QKICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFp dHM+OjpfU19wYmFja19zaXplOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l IF9UcmFpdHM+CiAgICB0eXBlbmFtZSBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPjo6 aW50X3R5cGUKICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIHNidW1w YygpCiAgICB7CiAgICAgIGludF90eXBlIF9fcmV0OwogICAgICBpZiAoX01faW5fY3VyICYmIF9N X2luX2N1ciA8IF9NX2luX2VuZCkKICAgICAgICB7CiAgICAgICAgICBjaGFyX3R5cGUgX19jID0g Kih0aGlzLT5ncHRyKCkpOwogICAgICAgICAgX01faW5fY3VyX21vdmUoMSk7CiAgICAgICAgICBf X3JldCA9IHRyYWl0c190eXBlOjp0b19pbnRfdHlwZShfX2MpOwogICAgICAgIH0KICAgICAgZWxz ZQogICAgICAgIF9fcmV0ID0gdGhpcy0+dWZsb3coKTsKICAgICAgcmV0dXJuIF9fcmV0OwogICAg fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICB0eXBl bmFtZSBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPjo6aW50X3R5cGUKICAgIGJhc2lj X3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIHNwdXRiYWNrYyhjaGFyX3R5cGUgX19j KQogICAgewogICAgICBpbnRfdHlwZSBfX3JldDsKICAgICAgYm9vbCBfX3Rlc3Rwb3MgPSBfTV9p bl9jdXIgJiYgX01faW5fYmVnIDwgX01faW5fY3VyOwogICAgICBib29sIF9fdGVzdG5lID0gX01f aW5fY3VyICYmICF0cmFpdHNfdHlwZTo6ZXEoX19jLCB0aGlzLT5ncHRyKClbLTFdKTsKICAgICAg aWYgKCFfX3Rlc3Rwb3MgfHwgX190ZXN0bmUpCiAgICAgICAgX19yZXQgPSBwYmFja2ZhaWwodHJh aXRzX3R5cGU6OnRvX2ludF90eXBlKF9fYykpOwogICAgICBlbHNlCiAgICAgICAgewogICAgICAg ICAgX01faW5fY3VyX21vdmUoLTEpOwogICAgICAgICAgX19yZXQgPSB0cmFpdHNfdHlwZTo6dG9f aW50X3R5cGUoKnRoaXMtPmdwdHIoKSk7CiAgICAgICAgfQogICAgICByZXR1cm4gX19yZXQ7CiAg ICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIHR5 cGVuYW1lIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjppbnRfdHlwZQogICAgYmFz aWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz46OgogICAgc3VuZ2V0YygpCiAgICB7CiAgICAg IGludF90eXBlIF9fcmV0OwogICAgICBpZiAoX01faW5fY3VyICYmIF9NX2luX2JlZyA8IF9NX2lu X2N1cikKICAgICAgICB7CiAgICAgICAgICBfTV9pbl9jdXJfbW92ZSgtMSk7CiAgICAgICAgICBf X3JldCA9IHRyYWl0c190eXBlOjp0b19pbnRfdHlwZSgqX01faW5fY3VyKTsKICAgICAgICB9CiAg ICAgIGVsc2UKICAgICAgICBfX3JldCA9IHRoaXMtPnBiYWNrZmFpbCgpOwogICAgICByZXR1cm4g X19yZXQ7CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf VHJhaXRzPgogICAgdHlwZW5hbWUgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz46Omlu dF90eXBlCiAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPjo6CiAgICBzcHV0Yyhj aGFyX3R5cGUgX19jKQogICAgewogICAgICBpbnRfdHlwZSBfX3JldDsKICAgICAgaWYgKF9NX291 dF9idWZfc2l6ZSgpKQogICAgICAgIHsKICAgICAgICAgICpfTV9vdXRfY3VyID0gX19jOwogICAg ICAgICAgX01fb3V0X2N1cl9tb3ZlKDEpOwogICAgICAgICAgX19yZXQgPSB0cmFpdHNfdHlwZTo6 dG9faW50X3R5cGUoX19jKTsKICAgICAgICB9CiAgICAgIGVsc2UKICAgICAgICBfX3JldCA9IHRo aXMtPm92ZXJmbG93KHRyYWl0c190eXBlOjp0b19pbnRfdHlwZShfX2MpKTsKICAgICAgcmV0dXJu IF9fcmV0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp dHM+CiAgICBzdHJlYW1zaXplCiAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPjo6 CiAgICB4c2dldG4oY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKQogICAgewogICAgICBz dHJlYW1zaXplIF9fcmV0ID0gMDsKICAgICAgd2hpbGUgKF9fcmV0IDwgX19uKQogICAgICAgIHsK ICAgICAgICAgIHNpemVfdCBfX2J1Zl9sZW4gPSBfTV9pbl9lbmQgLSBfTV9pbl9jdXI7CiAgICAg ICAgICBpZiAoX19idWZfbGVuID4gMCkKICAgICAgICAgICAgewogICAgICAgICAgICAgIHNpemVf dCBfX3JlbWFpbmluZyA9IF9fbiAtIF9fcmV0OwogICAgICAgICAgICAgIHNpemVfdCBfX2xlbiA9 IG1pbihfX2J1Zl9sZW4sIF9fcmVtYWluaW5nKTsKICAgICAgICAgICAgICB0cmFpdHNfdHlwZTo6 Y29weShfX3MsIF9NX2luX2N1ciwgX19sZW4pOwogICAgICAgICAgICAgIF9fcmV0ICs9IF9fbGVu OwogICAgICAgICAgICAgIF9fcyArPSBfX2xlbjsKICAgICAgICAgICAgICBfTV9pbl9jdXJfbW92 ZShfX2xlbik7CiAgICAgICAgICAgIH0KCiAgICAgICAgICBpZiAoX19yZXQgPCBfX24pCiAgICAg ICAgICAgIHsKICAgICAgICAgICAgICBpbnRfdHlwZSBfX2MgPSB0aGlzLT51ZmxvdygpOwogICAg ICAgICAgICAgIGlmICghdHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKF9fYywgdHJhaXRzX3R5cGU6 OmVvZigpKSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgdHJhaXRzX3R5cGU6 OmFzc2lnbigqX19zKyssIHRyYWl0c190eXBlOjp0b19jaGFyX3R5cGUoX19jKSk7CiAgICAgICAg ICAgICAgICAgICsrX19yZXQ7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgZWxzZQog ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVy biBfX3JldDsKICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l IF9UcmFpdHM+CiAgICBzdHJlYW1zaXplCiAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJh aXRzPjo6CiAgICB4c3B1dG4oY29uc3QgY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKQog ICAgewogICAgICBzdHJlYW1zaXplIF9fcmV0ID0gMDsKICAgICAgd2hpbGUgKF9fcmV0IDwgX19u KQogICAgICAgIHsKICAgICAgICAgIG9mZl90eXBlIF9fYnVmX2xlbiA9IF9NX291dF9idWZfc2l6 ZSgpOwogICAgICAgICAgaWYgKF9fYnVmX2xlbiA+IDApCiAgICAgICAgICAgIHsKICAgICAgICAg ICAgICBvZmZfdHlwZSBfX3JlbWFpbmluZyA9IF9fbiAtIF9fcmV0OwogICAgICAgICAgICAgIG9m Zl90eXBlIF9fbGVuID0gbWluKF9fYnVmX2xlbiwgX19yZW1haW5pbmcpOwogICAgICAgICAgICAg IHRyYWl0c190eXBlOjpjb3B5KF9NX291dF9jdXIsIF9fcywgX19sZW4pOwogICAgICAgICAgICAg IF9fcmV0ICs9IF9fbGVuOwogICAgICAgICAgICAgIF9fcyArPSBfX2xlbjsKICAgICAgICAgICAg ICBfTV9vdXRfY3VyX21vdmUoX19sZW4pOwogICAgICAgICAgICB9CgogICAgICAgICAgaWYgKF9f cmV0IDwgX19uKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaW50X3R5cGUgX19jID0gdGhp cy0+b3ZlcmZsb3codHJhaXRzX3R5cGU6OnRvX2ludF90eXBlKCpfX3MpKTsKICAgICAgICAgICAg ICBpZiAoIXRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfX2MsIHRyYWl0c190eXBlOjplb2YoKSkp CiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICsrX19yZXQ7CiAgICAgICAgICAg ICAgICAgICsrX19zOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGVsc2UKICAgICAg ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gX19y ZXQ7CiAgICB9CgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp dHM+CiAgICBzdHJlYW1zaXplCiAgICBfX2NvcHlfc3RyZWFtYnVmcyhiYXNpY19pb3M8X0NoYXJU LCBfVHJhaXRzPiYgX19pb3MsCiAgICAgICAgICAgICAgICAgICAgICBiYXNpY19zdHJlYW1idWY8 X0NoYXJULCBfVHJhaXRzPiogX19zYmluLAogICAgICAgICAgICAgICAgICAgICAgYmFzaWNfc3Ry ZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4qIF9fc2JvdXQpCiAgewogICAgICB0eXBlZGVmIHR5cGVu YW1lIF9UcmFpdHM6OmludF90eXBlIGludF90eXBlOwoKICAgICAgc3RyZWFtc2l6ZSBfX3JldCA9 IDA7CiAgICAgIHN0cmVhbXNpemUgX19idWZzaXplID0gX19zYmluLT5pbl9hdmFpbCgpOwogICAg ICBzdHJlYW1zaXplIF9feHRyY3Q7CiAgICAgIGJvb2wgX190ZXN0cHV0ID0gX19zYm91dC0+X01f bW9kZSAmIGlvc19iYXNlOjpvdXQ7CiAgICAgIHRyeQogICAgICAgIHsKICAgICAgICAgIHdoaWxl IChfX3Rlc3RwdXQgJiYgX19idWZzaXplICE9IC0xKQogICAgICAgICAgICB7CiAgICAgICAgICAg ICAgaWYgKF9fYnVmc2l6ZSAhPSAwICYmIF9fc2Jpbi0+Z3B0cigpICE9IF9fbnVsbCkKICAgICAg ICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgX194dHJjdCA9IF9fc2JvdXQtPnNwdXRuKF9f c2Jpbi0+Z3B0cigpLCBfX2J1ZnNpemUpOwogICAgICAgICAgICAgICAgICBfX3JldCArPSBfX3h0 cmN0OwogICAgICAgICAgICAgICAgICBfX3NiaW4tPl9NX2luX2N1cl9tb3ZlKF9feHRyY3QpOwog ICAgICAgICAgICAgICAgICBpZiAoX194dHJjdCAhPSBfX2J1ZnNpemUpCiAgICAgICAgICAgICAg ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgZWxzZQogICAgICAg ICAgICAgICAgewogICAgICAgICAgICAgICAgICBfQ2hhclQgX19idWZbMjU2XTsKICAgICAgICAg ICAgICAgICAgc3RyZWFtc2l6ZSBfX2NoYXJzcmVhZCA9IF9fc2Jpbi0+c2dldG4oX19idWYsIHNp emVvZihfX2J1ZikpOwogICAgICAgICAgICAgICAgICBfX3h0cmN0ID0gX19zYm91dC0+c3B1dG4o X19idWYsIF9fY2hhcnNyZWFkKTsKICAgICAgICAgICAgICAgICAgX19yZXQgKz0gX194dHJjdDsK ICAgICAgICAgICAgICAgICAgaWYgKF9feHRyY3QgIT0gX19jaGFyc3JlYWQpCiAgICAgICAgICAg ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgaWYgKF9UcmFp dHM6OmVxX2ludF90eXBlKF9fc2Jpbi0+c2dldGMoKSwgX1RyYWl0czo6ZW9mKCkpKQogICAgICAg ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgX19idWZzaXplID0gX19zYmluLT5pbl9hdmFp bCgpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFp bCkKICAgICAgICB7CiAgICAgICAgICBfX2lvcy5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7 CiAgICAgICAgICBpZiAoKF9faW9zLmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpmYWlsYml0KSAh PSAwKQogICAgICAgICAgICB0aHJvdzsKICAgICAgICB9CiAgICAgIHJldHVybiBfX3JldDsKICAg IH0KCgoKCiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIGJhc2ljX3N0cmVhbWJ1ZjxjaGFyPjsKICBl eHRlcm4gdGVtcGxhdGUKICAgIHN0cmVhbXNpemUKICAgIF9fY29weV9zdHJlYW1idWZzKGJhc2lj X2lvczxjaGFyPiYsIGJhc2ljX3N0cmVhbWJ1ZjxjaGFyPiosCiAgICAgICAgICAgICAgICAgICAg ICBiYXNpY19zdHJlYW1idWY8Y2hhcj4qKTsKCgogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBiYXNp Y19zdHJlYW1idWY8d2NoYXJfdD47CiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBzdHJlYW1zaXplCiAg ICBfX2NvcHlfc3RyZWFtYnVmcyhiYXNpY19pb3M8d2NoYXJfdD4mLCBiYXNpY19zdHJlYW1idWY8 d2NoYXJfdD4qLAogICAgICAgICAgICAgICAgICAgICAgYmFzaWNfc3RyZWFtYnVmPHdjaGFyX3Q+ Kik7Cgp9CiMgNDk5ICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL3N0cmVhbWJ1ZiIgMiAzCiMgNTEg Ii91c3IvaW5jbHVkZS9jKysvMy4yLjEvaW9zIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMu Mi4xL2JpdHMvYmFzaWNfaW9zLmgiIDEgMwojIDM5ICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL2Jp dHMvYmFzaWNfaW9zLmgiIDMKCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9iaXRzL3N0cmVh bWJ1Zl9pdGVyYXRvci5oIiAxIDMKIyA0MiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9iaXRzL3N0 cmVhbWJ1Zl9pdGVyYXRvci5oIiAzCgpuYW1lc3BhY2Ugc3RkCnsKCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgY2xhc3MgaXN0cmVhbWJ1Zl9pdGVyYXRv cgogICAgOiBwdWJsaWMgaXRlcmF0b3I8aW5wdXRfaXRlcmF0b3JfdGFnLCBfQ2hhclQsIHR5cGVu YW1lIF9UcmFpdHM6Om9mZl90eXBlLAogICAgICAgICAgICAgICAgICAgICAgX0NoYXJUKiwgX0No YXJUJj4KICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsK ICAgICAgdHlwZWRlZiBfVHJhaXRzIHRyYWl0c190eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1l IF9UcmFpdHM6OmludF90eXBlIGludF90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX3N0cmVhbWJ1 ZjxfQ2hhclQsIF9UcmFpdHM+IHN0cmVhbWJ1Zl90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX2lz dHJlYW08X0NoYXJULCBfVHJhaXRzPiBpc3RyZWFtX3R5cGU7CgogICAgcHJpdmF0ZToKCgoKCgoK CiAgICAgIG11dGFibGUgc3RyZWFtYnVmX3R5cGUqIF9NX3NidWY7CiAgICAgIGludF90eXBlIF9N X2M7CgogICAgcHVibGljOgogICAgICBpc3RyZWFtYnVmX2l0ZXJhdG9yKCkgdGhyb3coKQogICAg ICA6IF9NX3NidWYoMCksIF9NX2ModHJhaXRzX3R5cGU6OmVvZigpKSB7IH0KCiAgICAgIGlzdHJl YW1idWZfaXRlcmF0b3IoaXN0cmVhbV90eXBlJiBfX3MpIHRocm93KCkKICAgICAgOiBfTV9zYnVm KF9fcy5yZGJ1ZigpKSwgX01fYyh0cmFpdHNfdHlwZTo6ZW9mKCkpIHsgfQoKICAgICAgaXN0cmVh bWJ1Zl9pdGVyYXRvcihzdHJlYW1idWZfdHlwZSogX19zKSB0aHJvdygpCiAgICAgIDogX01fc2J1 ZihfX3MpLCBfTV9jKHRyYWl0c190eXBlOjplb2YoKSkgeyB9CgoKICAgICAgY2hhcl90eXBlCiAg ICAgIG9wZXJhdG9yKigpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRyYWl0c190eXBlOjp0b19jaGFy X3R5cGUoX01fZ2V0KCkpOyB9CgogICAgICBpc3RyZWFtYnVmX2l0ZXJhdG9yJgogICAgICBvcGVy YXRvcisrKCkKICAgICAgewogICAgICAgIGNvbnN0IGludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5 cGU6OmVvZigpOwogICAgICAgIGlmIChfTV9zYnVmICYmIHRyYWl0c190eXBlOjplcV9pbnRfdHlw ZShfTV9zYnVmLT5zYnVtcGMoKSwgX19lb2YpKQogICAgICAgICAgX01fc2J1ZiA9IDA7CiAgICAg ICAgZWxzZQogICAgICAgICAgX01fYyA9IF9fZW9mOwogICAgICAgIHJldHVybiAqdGhpczsKICAg ICAgfQoKICAgICAgaXN0cmVhbWJ1Zl9pdGVyYXRvcgogICAgICBvcGVyYXRvcisrKGludCkKICAg ICAgewogICAgICAgIGNvbnN0IGludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6OmVvZigpOwog ICAgICAgIGlzdHJlYW1idWZfaXRlcmF0b3IgX19vbGQgPSAqdGhpczsKICAgICAgICBpZiAoX01f c2J1ZgogICAgICAgICAgICAmJiB0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoKF9fb2xkLl9NX2Mg PSBfTV9zYnVmLT5zYnVtcGMoKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBfX2VvZikpCiAgICAgICAgICBfTV9zYnVmID0gMDsKICAgICAgICBlbHNlCiAgICAgICAg ICBfTV9jID0gX19lb2Y7CiAgICAgICAgcmV0dXJuIF9fb2xkOwogICAgICB9CgoKCgogICAgICBi b29sCiAgICAgIGVxdWFsKGNvbnN0IGlzdHJlYW1idWZfaXRlcmF0b3ImIF9fYikgY29uc3QKICAg ICAgewogICAgICAgIGNvbnN0IGludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6OmVvZigpOwog ICAgICAgIGJvb2wgX190aGlzZW9mID0gdHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKF9NX2dldCgp LCBfX2VvZik7CiAgICAgICAgYm9vbCBfX2Jlb2YgPSB0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUo X19iLl9NX2dldCgpLCBfX2VvZik7CiAgICAgICAgcmV0dXJuIChfX3RoaXNlb2YgJiYgX19iZW9m IHx8ICghX190aGlzZW9mICYmICFfX2Jlb2YpKTsKICAgICAgfQoKCiAgICBwcml2YXRlOgogICAg ICBpbnRfdHlwZQogICAgICBfTV9nZXQoKSBjb25zdAogICAgICB7CiAgICAgICAgY29uc3QgaW50 X3R5cGUgX19lb2YgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7CiAgICAgICAgaW50X3R5cGUgX19yZXQg PSBfX2VvZjsKICAgICAgICBpZiAoX01fc2J1ZikKICAgICAgICAgIHsKICAgICAgICAgICAgaWYg KCF0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX01fYywgX19lb2YpKQogICAgICAgICAgICAgIF9f cmV0ID0gX01fYzsKICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgIGlmICh0cmFpdHNfdHlw ZTo6ZXFfaW50X3R5cGUoKF9fcmV0ID0gX01fc2J1Zi0+c2dldGMoKSksIF9fZW9mKSkKICAgICAg ICAgICAgICAgIF9NX3NidWYgPSAwOwogICAgICAgICAgfQogICAgICAgIHJldHVybiBfX3JldDsK ICAgICAgfQogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh aXRzPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPT0oY29uc3QgaXN0cmVhbWJ1Zl9pdGVy YXRvcjxfQ2hhclQsIF9UcmFpdHM+JiBfX2EsCiAgICAgICAgICAgICAgIGNvbnN0IGlzdHJlYW1i dWZfaXRlcmF0b3I8X0NoYXJULCBfVHJhaXRzPiYgX19iKQogICAgeyByZXR1cm4gX19hLmVxdWFs KF9fYik7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgog ICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yIT0oY29uc3QgaXN0cmVhbWJ1Zl9pdGVyYXRvcjxf Q2hhclQsIF9UcmFpdHM+JiBfX2EsCiAgICAgICAgICAgICAgIGNvbnN0IGlzdHJlYW1idWZfaXRl cmF0b3I8X0NoYXJULCBfVHJhaXRzPiYgX19iKQogICAgeyByZXR1cm4gIV9fYS5lcXVhbChfX2Ip OyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGNs YXNzIG9zdHJlYW1idWZfaXRlcmF0b3IKICAgIDogcHVibGljIGl0ZXJhdG9yPG91dHB1dF9pdGVy YXRvcl90YWcsIHZvaWQsIHZvaWQsIHZvaWQsIHZvaWQ+CiAgICB7CiAgICBwdWJsaWM6CgogICAg ICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgX1RyYWl0cyB0cmFpdHNf dHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiBzdHJl YW1idWZfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4g b3N0cmVhbV90eXBlOwoKICAgIHByaXZhdGU6CiAgICAgIHN0cmVhbWJ1Zl90eXBlKiBfTV9zYnVm OwogICAgICBib29sIF9NX2ZhaWxlZDsKCiAgICBwdWJsaWM6CiAgICAgIGlubGluZQogICAgICBv c3RyZWFtYnVmX2l0ZXJhdG9yKG9zdHJlYW1fdHlwZSYgX19zKSB0aHJvdyAoKQogICAgICA6IF9N X3NidWYoX19zLnJkYnVmKCkpLCBfTV9mYWlsZWQoIV9NX3NidWYpIHsgfQoKICAgICAgb3N0cmVh bWJ1Zl9pdGVyYXRvcihzdHJlYW1idWZfdHlwZSogX19zKSB0aHJvdyAoKQogICAgICA6IF9NX3Ni dWYoX19zKSwgX01fZmFpbGVkKCFfTV9zYnVmKSB7IH0KCiAgICAgIG9zdHJlYW1idWZfaXRlcmF0 b3ImCiAgICAgIG9wZXJhdG9yPShfQ2hhclQgX19jKTsKCiAgICAgIG9zdHJlYW1idWZfaXRlcmF0 b3ImCiAgICAgIG9wZXJhdG9yKigpIHRocm93KCkKICAgICAgeyByZXR1cm4gKnRoaXM7IH0KCiAg ICAgIG9zdHJlYW1idWZfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yKysoaW50KSB0aHJvdygpCiAg ICAgIHsgcmV0dXJuICp0aGlzOyB9CgogICAgICBvc3RyZWFtYnVmX2l0ZXJhdG9yJgogICAgICBv cGVyYXRvcisrKCkgdGhyb3coKQogICAgICB7IHJldHVybiAqdGhpczsgfQoKICAgICAgYm9vbAog ICAgICBmYWlsZWQoKSBjb25zdCB0aHJvdygpCiAgICAgIHsgcmV0dXJuIF9NX2ZhaWxlZDsgfQog ICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAg aW5saW5lIG9zdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJULCBfVHJhaXRzPiYKICAgIG9zdHJlYW1i dWZfaXRlcmF0b3I8X0NoYXJULCBfVHJhaXRzPjo6b3BlcmF0b3I9KF9DaGFyVCBfX2MpCiAgICB7 CiAgICAgIGlmICghX01fZmFpbGVkICYmCiAgICAgICAgICBfVHJhaXRzOjplcV9pbnRfdHlwZShf TV9zYnVmLT5zcHV0YyhfX2MpLCBfVHJhaXRzOjplb2YoKSkpCiAgICAgICAgX01fZmFpbGVkID0g dHJ1ZTsKICAgICAgcmV0dXJuICp0aGlzOwogICAgfQp9CiMgNDEgIi91c3IvaW5jbHVkZS9jKysv My4yLjEvYml0cy9iYXNpY19pb3MuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9i aXRzL2xvY2FsZV9mYWNldHMuaCIgMSAzCiMgNDQgIi91c3IvaW5jbHVkZS9jKysvMy4yLjEvYml0 cy9sb2NhbGVfZmFjZXRzLmgiIDMKCgojIDEgIi91c3IvaW5jbHVkZS9jKysvMy4yLjEvY3djdHlw ZSIgMSAzCiMgNDggIi91c3IvaW5jbHVkZS9jKysvMy4yLjEvY3djdHlwZSIgMwoKCgoKIyAxICIv dXNyL2luY2x1ZGUvd2N0eXBlLmgiIDEgMwojIDM1ICIvdXNyL2luY2x1ZGUvd2N0eXBlLmgiIDMK IyAxICIvdXNyL2xpYi9nY2MtbGliL2kzODYtcGMtbGludXgtZ251LzMuMi4xL2luY2x1ZGUvc3Rk ZGVmLmgiIDEgMwojIDM2ICIvdXNyL2luY2x1ZGUvd2N0eXBlLmgiIDIgMwojIDYxICIvdXNyL2lu Y2x1ZGUvd2N0eXBlLmgiIDMKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCB3Y3R5cGVfdDsKIyA3 OSAiL3Vzci9pbmNsdWRlL3djdHlwZS5oIiAzCmVudW0KewogIF9fSVN3dXBwZXIgPSAwLAogIF9f SVN3bG93ZXIgPSAxLAogIF9fSVN3YWxwaGEgPSAyLAogIF9fSVN3ZGlnaXQgPSAzLAogIF9fSVN3 eGRpZ2l0ID0gNCwKICBfX0lTd3NwYWNlID0gNSwKICBfX0lTd3ByaW50ID0gNiwKICBfX0lTd2dy YXBoID0gNywKICBfX0lTd2JsYW5rID0gOCwKICBfX0lTd2NudHJsID0gOSwKICBfX0lTd3B1bmN0 ID0gMTAsCiAgX19JU3dhbG51bSA9IDExLAoKICBfSVN3dXBwZXIgPSAoKF9fSVN3dXBwZXIpIDwg OCA/IChpbnQpICgoMVVMIDw8IChfX0lTd3VwcGVyKSkgPDwgMjQpIDogKChfX0lTd3VwcGVyKSA8 IDE2ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3dXBwZXIpKSA8PCA4KSA6ICgoX19JU3d1cHBlcikg PCAyNCA/IChpbnQpICgoMVVMIDw8IChfX0lTd3VwcGVyKSkgPj4gOCkgOiAoaW50KSAoKDFVTCA8 PCAoX19JU3d1cHBlcikpID4+IDI0KSkpKSwKICBfSVN3bG93ZXIgPSAoKF9fSVN3bG93ZXIpIDwg OCA/IChpbnQpICgoMVVMIDw8IChfX0lTd2xvd2VyKSkgPDwgMjQpIDogKChfX0lTd2xvd2VyKSA8 IDE2ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3bG93ZXIpKSA8PCA4KSA6ICgoX19JU3dsb3dlcikg PCAyNCA/IChpbnQpICgoMVVMIDw8IChfX0lTd2xvd2VyKSkgPj4gOCkgOiAoaW50KSAoKDFVTCA8 PCAoX19JU3dsb3dlcikpID4+IDI0KSkpKSwKICBfSVN3YWxwaGEgPSAoKF9fSVN3YWxwaGEpIDwg OCA/IChpbnQpICgoMVVMIDw8IChfX0lTd2FscGhhKSkgPDwgMjQpIDogKChfX0lTd2FscGhhKSA8 IDE2ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3YWxwaGEpKSA8PCA4KSA6ICgoX19JU3dhbHBoYSkg PCAyNCA/IChpbnQpICgoMVVMIDw8IChfX0lTd2FscGhhKSkgPj4gOCkgOiAoaW50KSAoKDFVTCA8 PCAoX19JU3dhbHBoYSkpID4+IDI0KSkpKSwKICBfSVN3ZGlnaXQgPSAoKF9fSVN3ZGlnaXQpIDwg OCA/IChpbnQpICgoMVVMIDw8IChfX0lTd2RpZ2l0KSkgPDwgMjQpIDogKChfX0lTd2RpZ2l0KSA8 IDE2ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3ZGlnaXQpKSA8PCA4KSA6ICgoX19JU3dkaWdpdCkg PCAyNCA/IChpbnQpICgoMVVMIDw8IChfX0lTd2RpZ2l0KSkgPj4gOCkgOiAoaW50KSAoKDFVTCA8 PCAoX19JU3dkaWdpdCkpID4+IDI0KSkpKSwKICBfSVN3eGRpZ2l0ID0gKChfX0lTd3hkaWdpdCkg PCA4ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3eGRpZ2l0KSkgPDwgMjQpIDogKChfX0lTd3hkaWdp dCkgPCAxNiA/IChpbnQpICgoMVVMIDw8IChfX0lTd3hkaWdpdCkpIDw8IDgpIDogKChfX0lTd3hk aWdpdCkgPCAyNCA/IChpbnQpICgoMVVMIDw8IChfX0lTd3hkaWdpdCkpID4+IDgpIDogKGludCkg KCgxVUwgPDwgKF9fSVN3eGRpZ2l0KSkgPj4gMjQpKSkpLAogIF9JU3dzcGFjZSA9ICgoX19JU3dz cGFjZSkgPCA4ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3c3BhY2UpKSA8PCAyNCkgOiAoKF9fSVN3 c3BhY2UpIDwgMTYgPyAoaW50KSAoKDFVTCA8PCAoX19JU3dzcGFjZSkpIDw8IDgpIDogKChfX0lT d3NwYWNlKSA8IDI0ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3c3BhY2UpKSA+PiA4KSA6IChpbnQp ICgoMVVMIDw8IChfX0lTd3NwYWNlKSkgPj4gMjQpKSkpLAogIF9JU3dwcmludCA9ICgoX19JU3dw cmludCkgPCA4ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3cHJpbnQpKSA8PCAyNCkgOiAoKF9fSVN3 cHJpbnQpIDwgMTYgPyAoaW50KSAoKDFVTCA8PCAoX19JU3dwcmludCkpIDw8IDgpIDogKChfX0lT d3ByaW50KSA8IDI0ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3cHJpbnQpKSA+PiA4KSA6IChpbnQp ICgoMVVMIDw8IChfX0lTd3ByaW50KSkgPj4gMjQpKSkpLAogIF9JU3dncmFwaCA9ICgoX19JU3dn cmFwaCkgPCA4ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3Z3JhcGgpKSA8PCAyNCkgOiAoKF9fSVN3 Z3JhcGgpIDwgMTYgPyAoaW50KSAoKDFVTCA8PCAoX19JU3dncmFwaCkpIDw8IDgpIDogKChfX0lT d2dyYXBoKSA8IDI0ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3Z3JhcGgpKSA+PiA4KSA6IChpbnQp ICgoMVVMIDw8IChfX0lTd2dyYXBoKSkgPj4gMjQpKSkpLAogIF9JU3dibGFuayA9ICgoX19JU3di bGFuaykgPCA4ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3YmxhbmspKSA8PCAyNCkgOiAoKF9fSVN3 YmxhbmspIDwgMTYgPyAoaW50KSAoKDFVTCA8PCAoX19JU3dibGFuaykpIDw8IDgpIDogKChfX0lT d2JsYW5rKSA8IDI0ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3YmxhbmspKSA+PiA4KSA6IChpbnQp ICgoMVVMIDw8IChfX0lTd2JsYW5rKSkgPj4gMjQpKSkpLAogIF9JU3djbnRybCA9ICgoX19JU3dj bnRybCkgPCA4ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3Y250cmwpKSA8PCAyNCkgOiAoKF9fSVN3 Y250cmwpIDwgMTYgPyAoaW50KSAoKDFVTCA8PCAoX19JU3djbnRybCkpIDw8IDgpIDogKChfX0lT d2NudHJsKSA8IDI0ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3Y250cmwpKSA+PiA4KSA6IChpbnQp ICgoMVVMIDw8IChfX0lTd2NudHJsKSkgPj4gMjQpKSkpLAogIF9JU3dwdW5jdCA9ICgoX19JU3dw dW5jdCkgPCA4ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3cHVuY3QpKSA8PCAyNCkgOiAoKF9fSVN3 cHVuY3QpIDwgMTYgPyAoaW50KSAoKDFVTCA8PCAoX19JU3dwdW5jdCkpIDw8IDgpIDogKChfX0lT d3B1bmN0KSA8IDI0ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3cHVuY3QpKSA+PiA4KSA6IChpbnQp ICgoMVVMIDw8IChfX0lTd3B1bmN0KSkgPj4gMjQpKSkpLAogIF9JU3dhbG51bSA9ICgoX19JU3dh bG51bSkgPCA4ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3YWxudW0pKSA8PCAyNCkgOiAoKF9fSVN3 YWxudW0pIDwgMTYgPyAoaW50KSAoKDFVTCA8PCAoX19JU3dhbG51bSkpIDw8IDgpIDogKChfX0lT d2FsbnVtKSA8IDI0ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3YWxudW0pKSA+PiA4KSA6IChpbnQp ICgoMVVMIDw8IChfX0lTd2FsbnVtKSkgPj4gMjQpKSkpCn07CgoKCmV4dGVybiAiQyIgewoKCgoK CgoKZXh0ZXJuIGludCBpc3dhbG51bSAod2ludF90IF9fd2MpIHRocm93ICgpOwoKCgoKCmV4dGVy biBpbnQgaXN3YWxwaGEgKHdpbnRfdCBfX3djKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IGlzd2Nu dHJsICh3aW50X3QgX193YykgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgaXN3ZGlnaXQgKHdpbnRf dCBfX3djKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBpc3dncmFwaCAod2ludF90IF9fd2MpIHRo cm93ICgpOwoKCgoKZXh0ZXJuIGludCBpc3dsb3dlciAod2ludF90IF9fd2MpIHRocm93ICgpOwoK CmV4dGVybiBpbnQgaXN3cHJpbnQgKHdpbnRfdCBfX3djKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBp bnQgaXN3cHVuY3QgKHdpbnRfdCBfX3djKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgaXN3c3Bh Y2UgKHdpbnRfdCBfX3djKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgaXN3dXBwZXIgKHdpbnRf dCBfX3djKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgaXN3eGRpZ2l0ICh3aW50X3QgX193Yykg dGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBpc3dibGFuayAod2ludF90IF9fd2MpIHRocm93ICgp OwojIDE3OCAiL3Vzci9pbmNsdWRlL3djdHlwZS5oIiAzCmV4dGVybiB3Y3R5cGVfdCB3Y3R5cGUg KF9fY29uc3QgY2hhciAqX19wcm9wZXJ0eSkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgaXN3Y3R5 cGUgKHdpbnRfdCBfX3djLCB3Y3R5cGVfdCBfX2Rlc2MpIHRocm93ICgpOwoKCgoKZXh0ZXJuIHVu c2lnbmVkIGludCAqX19jdHlwZTMyX2I7CiMgMjQ5ICIvdXNyL2luY2x1ZGUvd2N0eXBlLmgiIDMK dHlwZWRlZiBfX2NvbnN0IF9faW50MzJfdCAqd2N0cmFuc190OwoKCmV4dGVybiB3aW50X3QgdG93 bG93ZXIgKHdpbnRfdCBfX3djKSB0aHJvdyAoKTsKCgpleHRlcm4gd2ludF90IHRvd3VwcGVyICh3 aW50X3QgX193YykgdGhyb3cgKCk7CgoKCgpleHRlcm4gY29uc3Qgd2ludF90ICpfX2N0eXBlMzJf dG9sb3dlcjsKZXh0ZXJuIGNvbnN0IHdpbnRfdCAqX19jdHlwZTMyX3RvdXBwZXI7CiMgMjc1ICIv dXNyL2luY2x1ZGUvd2N0eXBlLmgiIDMKfQojIDI4OCAiL3Vzci9pbmNsdWRlL3djdHlwZS5oIiAz CmV4dGVybiAiQyIgewoKCgpleHRlcm4gd2N0cmFuc190IHdjdHJhbnMgKF9fY29uc3QgY2hhciAq X19wcm9wZXJ0eSkgdGhyb3cgKCk7CgoKZXh0ZXJuIHdpbnRfdCB0b3djdHJhbnMgKHdpbnRfdCBf X3djLCB3Y3RyYW5zX3QgX19kZXNjKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBpbnQgX19pc3dh bG51bV9sICh3aW50X3QgX193YywgX19sb2NhbGVfdCBfX2xvY2FsZSkgdGhyb3cgKCk7CgoKCgoK ZXh0ZXJuIGludCBfX2lzd2FscGhhX2wgKHdpbnRfdCBfX3djLCBfX2xvY2FsZV90IF9fbG9jYWxl KSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IF9faXN3Y250cmxfbCAod2ludF90IF9fd2MsIF9fbG9j YWxlX3QgX19sb2NhbGUpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IF9faXN3ZGlnaXRfbCAod2lu dF90IF9fd2MsIF9fbG9jYWxlX3QgX19sb2NhbGUpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IF9f aXN3Z3JhcGhfbCAod2ludF90IF9fd2MsIF9fbG9jYWxlX3QgX19sb2NhbGUpIHRocm93ICgpOwoK CgoKZXh0ZXJuIGludCBfX2lzd2xvd2VyX2wgKHdpbnRfdCBfX3djLCBfX2xvY2FsZV90IF9fbG9j YWxlKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IF9faXN3cHJpbnRfbCAod2ludF90IF9fd2MsIF9f bG9jYWxlX3QgX19sb2NhbGUpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBfX2lzd3B1bmN0X2wg KHdpbnRfdCBfX3djLCBfX2xvY2FsZV90IF9fbG9jYWxlKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBp bnQgX19pc3dzcGFjZV9sICh3aW50X3QgX193YywgX19sb2NhbGVfdCBfX2xvY2FsZSkgdGhyb3cg KCk7CgoKCgpleHRlcm4gaW50IF9faXN3dXBwZXJfbCAod2ludF90IF9fd2MsIF9fbG9jYWxlX3Qg X19sb2NhbGUpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBfX2lzd3hkaWdpdF9sICh3aW50X3Qg X193YywgX19sb2NhbGVfdCBfX2xvY2FsZSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IF9faXN3 YmxhbmtfbCAod2ludF90IF9fd2MsIF9fbG9jYWxlX3QgX19sb2NhbGUpIHRocm93ICgpOwoKCgpl eHRlcm4gd2N0eXBlX3QgX193Y3R5cGVfbCAoX19jb25zdCBjaGFyICpfX3Byb3BlcnR5LCBfX2xv Y2FsZV90IF9fbG9jYWxlKQogICAgIHRocm93ICgpOwoKCgpleHRlcm4gaW50IF9faXN3Y3R5cGVf bCAod2ludF90IF9fd2MsIHdjdHlwZV90IF9fZGVzYywgX19sb2NhbGVfdCBfX2xvY2FsZSkKICAg ICB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiB3aW50X3QgX190b3dsb3dlcl9sICh3aW50X3QgX193 YywgX19sb2NhbGVfdCBfX2xvY2FsZSkgdGhyb3cgKCk7CgoKZXh0ZXJuIHdpbnRfdCBfX3Rvd3Vw cGVyX2wgKHdpbnRfdCBfX3djLCBfX2xvY2FsZV90IF9fbG9jYWxlKSB0aHJvdyAoKTsKCgoKZXh0 ZXJuIHdjdHJhbnNfdCBfX3djdHJhbnNfbCAoX19jb25zdCBjaGFyICpfX3Byb3BlcnR5LCBfX2xv Y2FsZV90IF9fbG9jYWxlKQogICAgIHRocm93ICgpOwoKCmV4dGVybiB3aW50X3QgX190b3djdHJh bnNfbCAod2ludF90IF9fd2MsIHdjdHJhbnNfdCBfX2Rlc2MsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgX19sb2NhbGVfdCBfX2xvY2FsZSkgdGhyb3cgKCk7CgoKCn0KIyA1MyAiL3Vzci9p bmNsdWRlL2MrKy8zLjIuMS9jd2N0eXBlIiAyIDMKIyA3NyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIu MS9jd2N0eXBlIiAzCm5hbWVzcGFjZSBzdGQKewogIHVzaW5nIDo6d2ludF90OwoKICB1c2luZyA6 OndjdHlwZV90OwogIHVzaW5nIDo6d2N0cmFuc190OwoKICB1c2luZyA6Omlzd2FsbnVtOwogIHVz aW5nIDo6aXN3YWxwaGE7CiAgdXNpbmcgOjppc3dibGFuazsKICB1c2luZyA6Omlzd2NudHJsOwog IHVzaW5nIDo6aXN3ZGlnaXQ7CiAgdXNpbmcgOjppc3dncmFwaDsKICB1c2luZyA6Omlzd2xvd2Vy OwogIHVzaW5nIDo6aXN3cHJpbnQ7CiAgdXNpbmcgOjppc3dwcmludDsKICB1c2luZyA6Omlzd3B1 bmN0OwogIHVzaW5nIDo6aXN3c3BhY2U7CiAgdXNpbmcgOjppc3d1cHBlcjsKICB1c2luZyA6Omlz d3hkaWdpdDsKICB1c2luZyA6Omlzd2N0eXBlOwogIHVzaW5nIDo6dG93bG93ZXI7CiAgdXNpbmcg Ojp0b3d1cHBlcjsKICB1c2luZyA6OnRvd2N0cmFuczsKICB1c2luZyA6OndjdHJhbnM7CiAgdXNp bmcgOjp3Y3R5cGU7Cn0KIyA0NyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9iaXRzL2xvY2FsZV9m YWNldHMuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9pb3MiIDEgMwojIDQ4ICIv dXNyL2luY2x1ZGUvYysrLzMuMi4xL2JpdHMvbG9jYWxlX2ZhY2V0cy5oIiAyIDMKCm5hbWVzcGFj ZSBzdGQKewoKCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp dHM+CiAgICBzdHJ1Y3QgX19wYWQ7CgoKCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9pMzg2 LXBjLWxpbnV4LWdudS9iaXRzL2N0eXBlX2Jhc2UuaCIgMSAzCiMgMzYgIi91c3IvaW5jbHVkZS9j KysvMy4yLjEvaTM4Ni1wYy1saW51eC1nbnUvYml0cy9jdHlwZV9iYXNlLmgiIDMKICBzdHJ1Y3Qg Y3R5cGVfYmFzZQogIHsKCiAgICB0eXBlZGVmIGNvbnN0IGludCogX190b190eXBlOwoKCgogICAg dHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBtYXNrOwogICAgc3RhdGljIGNvbnN0IG1hc2sgdXBwZXIg PSBfSVN1cHBlcjsKICAgIHN0YXRpYyBjb25zdCBtYXNrIGxvd2VyID0gX0lTbG93ZXI7CiAgICBz dGF0aWMgY29uc3QgbWFzayBhbHBoYSA9IF9JU2FscGhhOwogICAgc3RhdGljIGNvbnN0IG1hc2sg ZGlnaXQgPSBfSVNkaWdpdDsKICAgIHN0YXRpYyBjb25zdCBtYXNrIHhkaWdpdCA9IF9JU3hkaWdp dDsKICAgIHN0YXRpYyBjb25zdCBtYXNrIHNwYWNlID0gX0lTc3BhY2U7CiAgICBzdGF0aWMgY29u c3QgbWFzayBwcmludCA9IF9JU3ByaW50OwogICAgc3RhdGljIGNvbnN0IG1hc2sgZ3JhcGggPSBf SVNncmFwaDsKICAgIHN0YXRpYyBjb25zdCBtYXNrIGNudHJsID0gX0lTY250cmw7CiAgICBzdGF0 aWMgY29uc3QgbWFzayBwdW5jdCA9IF9JU3B1bmN0OwogICAgc3RhdGljIGNvbnN0IG1hc2sgYWxu dW0gPSBfSVNhbG51bTsKICB9OwojIDY0ICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL2JpdHMvbG9j YWxlX2ZhY2V0cy5oIiAyIDMKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGNsYXNz IF9fY3R5cGVfYWJzdHJhY3RfYmFzZSA6IHB1YmxpYyBsb2NhbGU6OmZhY2V0LCBwdWJsaWMgY3R5 cGVfYmFzZQogICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBl OwoKICAgICAgYm9vbAogICAgICBpcyhtYXNrIF9fbSwgY2hhcl90eXBlIF9fYykgY29uc3QKICAg ICAgeyByZXR1cm4gdGhpcy0+ZG9faXMoX19tLCBfX2MpOyB9CgogICAgICBjb25zdCBjaGFyX3R5 cGUqCiAgICAgIGlzKGNvbnN0IGNoYXJfdHlwZSAqX19sbywgY29uc3QgY2hhcl90eXBlICpfX2hp LCBtYXNrICpfX3ZlYykgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9faXMoX19sbywgX19o aSwgX192ZWMpOyB9CgogICAgICBjb25zdCBjaGFyX3R5cGUqCiAgICAgIHNjYW5faXMobWFzayBf X20sIGNvbnN0IGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdAog ICAgICB7IHJldHVybiB0aGlzLT5kb19zY2FuX2lzKF9fbSwgX19sbywgX19oaSk7IH0KCiAgICAg IGNvbnN0IGNoYXJfdHlwZSoKICAgICAgc2Nhbl9ub3QobWFzayBfX20sIGNvbnN0IGNoYXJfdHlw ZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdAogICAgICB7IHJldHVybiB0aGlz LT5kb19zY2FuX25vdChfX20sIF9fbG8sIF9faGkpOyB9CgogICAgICBjaGFyX3R5cGUKICAgICAg dG91cHBlcihjaGFyX3R5cGUgX19jKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb190b3Vw cGVyKF9fYyk7IH0KCiAgICAgIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgdG91cHBlcihjaGFyX3R5 cGUgKl9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3QKICAgICAgeyByZXR1cm4gdGhp cy0+ZG9fdG91cHBlcihfX2xvLCBfX2hpKTsgfQoKICAgICAgY2hhcl90eXBlCiAgICAgIHRvbG93 ZXIoY2hhcl90eXBlIF9fYykgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fdG9sb3dlcihf X2MpOyB9CgogICAgICBjb25zdCBjaGFyX3R5cGUqCiAgICAgIHRvbG93ZXIoY2hhcl90eXBlKiBf X2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRv X3RvbG93ZXIoX19sbywgX19oaSk7IH0KCiAgICAgIGNoYXJfdHlwZQogICAgICB3aWRlbihjaGFy IF9fYykgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fd2lkZW4oX19jKTsgfQoKICAgICAg Y29uc3QgY2hhcioKICAgICAgd2lkZW4oY29uc3QgY2hhciogX19sbywgY29uc3QgY2hhciogX19o aSwgY2hhcl90eXBlKiBfX3RvKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb193aWRlbihf X2xvLCBfX2hpLCBfX3RvKTsgfQoKICAgICAgY2hhcgogICAgICBuYXJyb3coY2hhcl90eXBlIF9f YywgY2hhciBfX2RmYXVsdCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fbmFycm93KF9f YywgX19kZmF1bHQpOyB9CgogICAgICBjb25zdCBjaGFyX3R5cGUqCiAgICAgIG5hcnJvdyhjb25z dCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSwKICAgICAgICAgICAgICBj aGFyIF9fZGZhdWx0LCBjaGFyICpfX3RvKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19u YXJyb3coX19sbywgX19oaSwgX19kZmF1bHQsIF9fdG8pOyB9CgogICAgcHJvdGVjdGVkOgogICAg ICBleHBsaWNpdAogICAgICBfX2N0eXBlX2Fic3RyYWN0X2Jhc2Uoc2l6ZV90IF9fcmVmcyA9IDAp OiBsb2NhbGU6OmZhY2V0KF9fcmVmcykgeyB9CgogICAgICB2aXJ0dWFsCiAgICAgIH5fX2N0eXBl X2Fic3RyYWN0X2Jhc2UoKSB7IH0KCiAgICAgIHZpcnR1YWwgYm9vbAogICAgICBkb19pcyhtYXNr IF9fbSwgY2hhcl90eXBlIF9fYykgY29uc3QgPSAwOwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFy X3R5cGUqCiAgICAgIGRvX2lzKGNvbnN0IGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBl KiBfX2hpLAogICAgICAgICAgICBtYXNrKiBfX3ZlYykgY29uc3QgPSAwOwoKICAgICAgdmlydHVh bCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRvX3NjYW5faXMobWFzayBfX20sIGNvbnN0IGNoYXJf dHlwZSogX19sbywKICAgICAgICAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0 ID0gMDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb19zY2FuX25vdCht YXNrIF9fbSwgY29uc3QgY2hhcl90eXBlKiBfX2xvLAogICAgICAgICAgICAgICAgICBjb25zdCBj aGFyX3R5cGUqIF9faGkpIGNvbnN0ID0gMDsKCiAgICAgIHZpcnR1YWwgY2hhcl90eXBlCiAgICAg IGRvX3RvdXBwZXIoY2hhcl90eXBlKSBjb25zdCA9IDA7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNo YXJfdHlwZSoKICAgICAgZG9fdG91cHBlcihjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlw ZSogX19oaSkgY29uc3QgPSAwOwoKICAgICAgdmlydHVhbCBjaGFyX3R5cGUKICAgICAgZG9fdG9s b3dlcihjaGFyX3R5cGUpIGNvbnN0ID0gMDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBl KgogICAgICBkb190b2xvd2VyKGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hp KSBjb25zdCA9IDA7CgogICAgICB2aXJ0dWFsIGNoYXJfdHlwZQogICAgICBkb193aWRlbihjaGFy KSBjb25zdCA9IDA7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqCiAgICAgIGRvX3dpZGVuKGNv bnN0IGNoYXIqIF9fbG8sIGNvbnN0IGNoYXIqIF9faGksCiAgICAgICAgICAgICAgIGNoYXJfdHlw ZSogX19kZXN0KSBjb25zdCA9IDA7CgogICAgICB2aXJ0dWFsIGNoYXIKICAgICAgZG9fbmFycm93 KGNoYXJfdHlwZSwgY2hhciBfX2RmYXVsdCkgY29uc3QgPSAwOwoKICAgICAgdmlydHVhbCBjb25z dCBjaGFyX3R5cGUqCiAgICAgIGRvX25hcnJvdyhjb25zdCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0 IGNoYXJfdHlwZSogX19oaSwKICAgICAgICAgICAgICAgICBjaGFyIF9fZGZhdWx0LCBjaGFyKiBf X2Rlc3QpIGNvbnN0ID0gMDsKICAgIH07CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAg ICBjbGFzcyBjdHlwZSA6IHB1YmxpYyBfX2N0eXBlX2Fic3RyYWN0X2Jhc2U8X0NoYXJUPgogICAg ewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBl ZGVmIHR5cGVuYW1lIGN0eXBlOjptYXNrIG1hc2s7CgogICAgICBzdGF0aWMgbG9jYWxlOjppZCBp ZDsKCiAgICAgIGV4cGxpY2l0CiAgICAgIGN0eXBlKHNpemVfdCBfX3JlZnMgPSAwKSA6IF9fY3R5 cGVfYWJzdHJhY3RfYmFzZTxfQ2hhclQ+KF9fcmVmcykgeyB9CgogICBwcm90ZWN0ZWQ6CiAgICAg IHZpcnR1YWwKICAgICAgfmN0eXBlKCk7CgogICAgICB2aXJ0dWFsIGJvb2wKICAgICAgZG9faXMo bWFzayBfX20sIGNoYXJfdHlwZSBfX2MpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFy X3R5cGUqCiAgICAgIGRvX2lzKGNvbnN0IGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBl KiBfX2hpLCBtYXNrKiBfX3ZlYykgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlw ZSoKICAgICAgZG9fc2Nhbl9pcyhtYXNrIF9fbSwgY29uc3QgY2hhcl90eXBlKiBfX2xvLCBjb25z dCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUq CiAgICAgIGRvX3NjYW5fbm90KG1hc2sgX19tLCBjb25zdCBjaGFyX3R5cGUqIF9fbG8sCiAgICAg ICAgICAgICAgICAgIGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3Q7CgogICAgICB2aXJ0dWFs IGNoYXJfdHlwZQogICAgICBkb190b3VwcGVyKGNoYXJfdHlwZSBfX2MpIGNvbnN0OwoKICAgICAg dmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRvX3RvdXBwZXIoY2hhcl90eXBlKiBfX2xv LCBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjaGFyX3R5cGUK ICAgICAgZG9fdG9sb3dlcihjaGFyX3R5cGUgX19jKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29u c3QgY2hhcl90eXBlKgogICAgICBkb190b2xvd2VyKGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hh cl90eXBlKiBfX2hpKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY2hhcl90eXBlCiAgICAgIGRvX3dp ZGVuKGNoYXIgX19jKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcioKICAgICAgZG9f d2lkZW4oY29uc3QgY2hhciogX19sbywgY29uc3QgY2hhciogX19oaSwgY2hhcl90eXBlKiBfX2Rl c3QpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjaGFyCiAgICAgIGRvX25hcnJvdyhjaGFyX3R5cGUs IGNoYXIgX19kZmF1bHQpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCiAg ICAgIGRvX25hcnJvdyhjb25zdCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19o aSwKICAgICAgICAgICAgICAgIGNoYXIgX19kZmF1bHQsIGNoYXIqIF9fZGVzdCkgY29uc3Q7CiAg ICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBsb2NhbGU6OmlkIGN0eXBlPF9D aGFyVD46OmlkOwoKCiAgdGVtcGxhdGU8PgogICAgY2xhc3MgY3R5cGU8Y2hhcj4gOiBwdWJsaWMg X19jdHlwZV9hYnN0cmFjdF9iYXNlPGNoYXI+CiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBl ZGVmIGNoYXIgY2hhcl90eXBlOwoKICAgIHByb3RlY3RlZDoKCiAgICAgIF9fY19sb2NhbGUgX01f Y19sb2NhbGVfY3R5cGU7CiAgICAgIGJvb2wgX01fZGVsOwogICAgICBfX3RvX3R5cGUgX01fdG91 cHBlcjsKICAgICAgX190b190eXBlIF9NX3RvbG93ZXI7CiAgICAgIGNvbnN0IG1hc2sqIF9NX3Rh YmxlOwoKICAgIHB1YmxpYzoKICAgICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7CiAgICAgIHN0YXRp YyBjb25zdCBzaXplX3QgdGFibGVfc2l6ZSA9IDEgKyBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFy PigtMSk7CgogICAgICBleHBsaWNpdAogICAgICBjdHlwZShjb25zdCBtYXNrKiBfX3RhYmxlID0g MCwgYm9vbCBfX2RlbCA9IGZhbHNlLCBzaXplX3QgX19yZWZzID0gMCk7CgogICAgICBleHBsaWNp dAogICAgICBjdHlwZShfX2NfbG9jYWxlIF9fY2xvYywgY29uc3QgbWFzayogX190YWJsZSA9IDAs IGJvb2wgX19kZWwgPSBmYWxzZSwKICAgICAgICAgICAgc2l6ZV90IF9fcmVmcyA9IDApOwoKICAg ICAgaW5saW5lIGJvb2wKICAgICAgaXMobWFzayBfX20sIGNoYXIgX19jKSBjb25zdDsKCiAgICAg IGlubGluZSBjb25zdCBjaGFyKgogICAgICBpcyhjb25zdCBjaGFyKiBfX2xvLCBjb25zdCBjaGFy KiBfX2hpLCBtYXNrKiBfX3ZlYykgY29uc3Q7CgogICAgICBpbmxpbmUgY29uc3QgY2hhcioKICAg ICAgc2Nhbl9pcyhtYXNrIF9fbSwgY29uc3QgY2hhciogX19sbywgY29uc3QgY2hhciogX19oaSkg Y29uc3Q7CgogICAgICBpbmxpbmUgY29uc3QgY2hhcioKICAgICAgc2Nhbl9ub3QobWFzayBfX20s IGNvbnN0IGNoYXIqIF9fbG8sIGNvbnN0IGNoYXIqIF9faGkpIGNvbnN0OwoKICAgIHByb3RlY3Rl ZDoKICAgICAgY29uc3QgbWFzayoKICAgICAgdGFibGUoKSBjb25zdCB0aHJvdygpCiAgICAgIHsg cmV0dXJuIF9NX3RhYmxlOyB9CgogICAgICBzdGF0aWMgY29uc3QgbWFzayoKICAgICAgY2xhc3Np Y190YWJsZSgpIHRocm93KCk7CgogICAgICB2aXJ0dWFsCiAgICAgIH5jdHlwZSgpOwoKICAgICAg dmlydHVhbCBib29sCiAgICAgIGRvX2lzKG1hc2sgX19tLCBjaGFyX3R5cGUgX19jKSBjb25zdDsK CiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb19pcyhjb25zdCBjaGFyX3R5 cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSwgbWFzayogX192ZWMpIGNvbnN0OwoKICAg ICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRvX3NjYW5faXMobWFzayBfX20sIGNv bnN0IGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdDsKCiAgICAg IHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb19zY2FuX25vdChtYXNrIF9fbSwgY29u c3QgY2hhcl90eXBlKiBfX2xvLAogICAgICAgICAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9f aGkpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjaGFyX3R5cGUKICAgICAgZG9fdG91cHBlcihjaGFy X3R5cGUpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRvX3Rv dXBwZXIoY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0OwoKICAg ICAgdmlydHVhbCBjaGFyX3R5cGUKICAgICAgZG9fdG9sb3dlcihjaGFyX3R5cGUpIGNvbnN0OwoK ICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRvX3RvbG93ZXIoY2hhcl90eXBl KiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjaGFy X3R5cGUKICAgICAgZG9fd2lkZW4oY2hhcikgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNo YXIqCiAgICAgIGRvX3dpZGVuKGNvbnN0IGNoYXIqIF9fbG8sIGNvbnN0IGNoYXIqIF9faGksIGNo YXJfdHlwZSogX19kZXN0KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY2hhcgogICAgICBkb19uYXJy b3coY2hhcl90eXBlLCBjaGFyIF9fZGZhdWx0KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3Qg Y2hhcl90eXBlKgogICAgICBkb19uYXJyb3coY29uc3QgY2hhcl90eXBlKiBfX2xvLCBjb25zdCBj aGFyX3R5cGUqIF9faGksCiAgICAgICAgICAgICAgICBjaGFyIF9fZGZhdWx0LCBjaGFyKiBfX2Rl c3QpIGNvbnN0OwogICAgfTsKCiAgdGVtcGxhdGU8PgogICAgY29uc3QgY3R5cGU8Y2hhcj4mCiAg ICB1c2VfZmFjZXQ8Y3R5cGU8Y2hhcj4gPihjb25zdCBsb2NhbGUmIF9fbG9jKTsKCgoKICB0ZW1w bGF0ZTw+CiAgICBjbGFzcyBjdHlwZTx3Y2hhcl90PiA6IHB1YmxpYyBfX2N0eXBlX2Fic3RyYWN0 X2Jhc2U8d2NoYXJfdD4KICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgd2NoYXJfdCBj aGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgd2N0eXBlX3QgX193bWFza190eXBlOwoKICAgIHByb3Rl Y3RlZDoKICAgICAgX19jX2xvY2FsZSBfTV9jX2xvY2FsZV9jdHlwZTsKCiAgICBwdWJsaWM6Cgog ICAgICBzdGF0aWMgbG9jYWxlOjppZCBpZDsKCiAgICAgIGV4cGxpY2l0CiAgICAgIGN0eXBlKHNp emVfdCBfX3JlZnMgPSAwKTsKCiAgICAgIGV4cGxpY2l0CiAgICAgIGN0eXBlKF9fY19sb2NhbGUg X19jbG9jLCBzaXplX3QgX19yZWZzID0gMCk7CgogICAgcHJvdGVjdGVkOgogICAgICBfX3dtYXNr X3R5cGUKICAgICAgX01fY29udmVydF90b193bWFzayhjb25zdCBtYXNrIF9fbSkgY29uc3Q7Cgog ICAgICB2aXJ0dWFsCiAgICAgIH5jdHlwZSgpOwoKICAgICAgdmlydHVhbCBib29sCiAgICAgIGRv X2lzKG1hc2sgX19tLCBjaGFyX3R5cGUgX19jKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3Qg Y2hhcl90eXBlKgogICAgICBkb19pcyhjb25zdCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJf dHlwZSogX19oaSwgbWFzayogX192ZWMpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFy X3R5cGUqCiAgICAgIGRvX3NjYW5faXMobWFzayBfX20sIGNvbnN0IGNoYXJfdHlwZSogX19sbywg Y29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90 eXBlKgogICAgICBkb19zY2FuX25vdChtYXNrIF9fbSwgY29uc3QgY2hhcl90eXBlKiBfX2xvLAog ICAgICAgICAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0OwoKICAgICAgdmly dHVhbCBjaGFyX3R5cGUKICAgICAgZG9fdG91cHBlcihjaGFyX3R5cGUpIGNvbnN0OwoKICAgICAg dmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRvX3RvdXBwZXIoY2hhcl90eXBlKiBfX2xv LCBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjaGFyX3R5cGUK ICAgICAgZG9fdG9sb3dlcihjaGFyX3R5cGUpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjb25zdCBj aGFyX3R5cGUqCiAgICAgIGRvX3RvbG93ZXIoY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5 cGUqIF9faGkpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjaGFyX3R5cGUKICAgICAgZG9fd2lkZW4o Y2hhcikgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqCiAgICAgIGRvX3dpZGVuKGNv bnN0IGNoYXIqIF9fbG8sIGNvbnN0IGNoYXIqIF9faGksIGNoYXJfdHlwZSogX19kZXN0KSBjb25z dDsKCiAgICAgIHZpcnR1YWwgY2hhcgogICAgICBkb19uYXJyb3coY2hhcl90eXBlLCBjaGFyIF9f ZGZhdWx0KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb19u YXJyb3coY29uc3QgY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGksCiAgICAg ICAgICAgICAgICBjaGFyIF9fZGZhdWx0LCBjaGFyKiBfX2Rlc3QpIGNvbnN0OwoKICAgIH07Cgog IHRlbXBsYXRlPD4KICAgIGNvbnN0IGN0eXBlPHdjaGFyX3Q+JgogICAgdXNlX2ZhY2V0PGN0eXBl PHdjaGFyX3Q+ID4oY29uc3QgbG9jYWxlJiBfX2xvYyk7CgoKCiMgMSAiL3Vzci9pbmNsdWRlL2Mr Ky8zLjIuMS9pMzg2LXBjLWxpbnV4LWdudS9iaXRzL2N0eXBlX2lubGluZS5oIiAxIDMKIyAzNyAi L3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9pMzg2LXBjLWxpbnV4LWdudS9iaXRzL2N0eXBlX2lubGlu ZS5oIiAzCiAgYm9vbAogIGN0eXBlPGNoYXI+OjoKICBpcyhtYXNrIF9fbSwgY2hhciBfX2MpIGNv bnN0CiAgeyByZXR1cm4gX01fdGFibGVbc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oX19jKV0g JiBfX207IH0KCiAgY29uc3QgY2hhcioKICBjdHlwZTxjaGFyPjo6CiAgaXMoY29uc3QgY2hhciog X19sb3csIGNvbnN0IGNoYXIqIF9faGlnaCwgbWFzayogX192ZWMpIGNvbnN0CiAgewogICAgd2hp bGUgKF9fbG93IDwgX19oaWdoKQogICAgICAqX192ZWMrKyA9IF9NX3RhYmxlW3N0YXRpY19jYXN0 PHVuc2lnbmVkIGNoYXI+KCpfX2xvdysrKV07CiAgICByZXR1cm4gX19oaWdoOwogIH0KCiAgY29u c3QgY2hhcioKICBjdHlwZTxjaGFyPjo6CiAgc2Nhbl9pcyhtYXNrIF9fbSwgY29uc3QgY2hhciog X19sb3csIGNvbnN0IGNoYXIqIF9faGlnaCkgY29uc3QKICB7CiAgICB3aGlsZSAoX19sb3cgPCBf X2hpZ2gKICAgICAgICAgICAmJiAhKF9NX3RhYmxlW3N0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+ KCpfX2xvdyldICYgX19tKSkKICAgICAgKytfX2xvdzsKICAgIHJldHVybiBfX2xvdzsKICB9Cgog IGNvbnN0IGNoYXIqCiAgY3R5cGU8Y2hhcj46OgogIHNjYW5fbm90KG1hc2sgX19tLCBjb25zdCBj aGFyKiBfX2xvdywgY29uc3QgY2hhciogX19oaWdoKSBjb25zdAogIHsKICAgIHdoaWxlIChfX2xv dyA8IF9faGlnaAogICAgICAgICAgICYmIChfTV90YWJsZVtzdGF0aWNfY2FzdDx1bnNpZ25lZCBj aGFyPigqX19sb3cpXSAmIF9fbSkgIT0gMCkKICAgICAgKytfX2xvdzsKICAgIHJldHVybiBfX2xv dzsKICB9CiMgNDAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL2JpdHMvbG9jYWxlX2ZhY2V0cy5o IiAyIDMKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGNsYXNzIGN0eXBlX2J5bmFt ZSA6IHB1YmxpYyBjdHlwZTxfQ2hhclQ+CiAgICB7CiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYg X0NoYXJUIGNoYXJfdHlwZTsKCiAgICAgIGV4cGxpY2l0CiAgICAgIGN0eXBlX2J5bmFtZShjb25z dCBjaGFyKiBfX3MsIHNpemVfdCBfX3JlZnMgPSAwKTsKCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZp cnR1YWwKICAgICAgfmN0eXBlX2J5bmFtZSgpIHsgfTsKICAgIH07CgoKICB0ZW1wbGF0ZTw+CiAg ICBjdHlwZV9ieW5hbWU8Y2hhcj46OmN0eXBlX2J5bmFtZShjb25zdCBjaGFyKiwgc2l6ZV90IHJl ZnMpOwoKICB0ZW1wbGF0ZTw+CiAgICBjdHlwZV9ieW5hbWU8d2NoYXJfdD46OmN0eXBlX2J5bmFt ZShjb25zdCBjaGFyKiwgc2l6ZV90IHJlZnMpOwoKCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIu MS9iaXRzL2NvZGVjdnQuaCIgMSAzCiMgNDUgIi91c3IvaW5jbHVkZS9jKysvMy4yLjEvYml0cy9j b2RlY3Z0LmgiIDMKCgogIGNsYXNzIGNvZGVjdnRfYmFzZQogIHsKICBwdWJsaWM6CiAgICBlbnVt IHJlc3VsdAogICAgewogICAgICBvaywKICAgICAgcGFydGlhbCwKICAgICAgZXJyb3IsCiAgICAg IG5vY29udgogICAgfTsKICB9OwoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludGVyblQsIHR5 cGVuYW1lIF9FeHRlcm5ULCB0eXBlbmFtZSBfU3RhdGVUPgogICAgY2xhc3MgX19jb2RlY3Z0X2Fi c3RyYWN0X2Jhc2UKICAgIDogcHVibGljIGxvY2FsZTo6ZmFjZXQsIHB1YmxpYyBjb2RlY3Z0X2Jh c2UKICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgY29kZWN2dF9iYXNlOjpyZXN1bHQg cmVzdWx0OwogICAgICB0eXBlZGVmIF9JbnRlcm5UIGludGVybl90eXBlOwogICAgICB0eXBlZGVm IF9FeHRlcm5UIGV4dGVybl90eXBlOwogICAgICB0eXBlZGVmIF9TdGF0ZVQgc3RhdGVfdHlwZTsK CgogICAgICByZXN1bHQKICAgICAgb3V0KHN0YXRlX3R5cGUmIF9fc3RhdGUsIGNvbnN0IGludGVy bl90eXBlKiBfX2Zyb20sCiAgICAgICAgICBjb25zdCBpbnRlcm5fdHlwZSogX19mcm9tX2VuZCwg Y29uc3QgaW50ZXJuX3R5cGUqJiBfX2Zyb21fbmV4dCwKICAgICAgICAgIGV4dGVybl90eXBlKiBf X3RvLCBleHRlcm5fdHlwZSogX190b19lbmQsCiAgICAgICAgICBleHRlcm5fdHlwZSomIF9fdG9f bmV4dCkgY29uc3QKICAgICAgewogICAgICAgIHJldHVybiB0aGlzLT5kb19vdXQoX19zdGF0ZSwg X19mcm9tLCBfX2Zyb21fZW5kLCBfX2Zyb21fbmV4dCwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgIF9fdG8sIF9fdG9fZW5kLCBfX3RvX25leHQpOwogICAgICB9CgogICAgICByZXN1bHQKICAg ICAgdW5zaGlmdChzdGF0ZV90eXBlJiBfX3N0YXRlLCBleHRlcm5fdHlwZSogX190bywgZXh0ZXJu X3R5cGUqIF9fdG9fZW5kLAogICAgICAgICAgICAgIGV4dGVybl90eXBlKiYgX190b19uZXh0KSBj b25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb191bnNoaWZ0KF9fc3RhdGUsIF9fdG8sX190b19l bmQsX190b19uZXh0KTsgfQoKICAgICAgcmVzdWx0CiAgICAgIGluKHN0YXRlX3R5cGUmIF9fc3Rh dGUsIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb20sCiAgICAgICAgIGNvbnN0IGV4dGVybl90eXBl KiBfX2Zyb21fZW5kLCBjb25zdCBleHRlcm5fdHlwZSomIF9fZnJvbV9uZXh0LAogICAgICAgICBp bnRlcm5fdHlwZSogX190bywgaW50ZXJuX3R5cGUqIF9fdG9fZW5kLAogICAgICAgICBpbnRlcm5f dHlwZSomIF9fdG9fbmV4dCkgY29uc3QKICAgICAgewogICAgICAgIHJldHVybiB0aGlzLT5kb19p bihfX3N0YXRlLCBfX2Zyb20sIF9fZnJvbV9lbmQsIF9fZnJvbV9uZXh0LAogICAgICAgICAgICAg ICAgICAgICAgICAgICBfX3RvLCBfX3RvX2VuZCwgX190b19uZXh0KTsKICAgICAgfQoKICAgICAg aW50CiAgICAgIGVuY29kaW5nKCkgY29uc3QgdGhyb3coKQogICAgICB7IHJldHVybiB0aGlzLT5k b19lbmNvZGluZygpOyB9CgogICAgICBib29sCiAgICAgIGFsd2F5c19ub2NvbnYoKSBjb25zdCB0 aHJvdygpCiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2Fsd2F5c19ub2NvbnYoKTsgfQoKICAgICAg aW50CiAgICAgIGxlbmd0aChjb25zdCBzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBleHRlcm5f dHlwZSogX19mcm9tLAogICAgICAgICAgICAgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZW5kLCBzaXpl X3QgX19tYXgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2xlbmd0aChfX3N0YXRlLCBf X2Zyb20sIF9fZW5kLCBfX21heCk7IH0KCiAgICAgIGludAogICAgICBtYXhfbGVuZ3RoKCkgY29u c3QgdGhyb3coKQogICAgICB7IHJldHVybiB0aGlzLT5kb19tYXhfbGVuZ3RoKCk7IH0KCiAgICBw cm90ZWN0ZWQ6CiAgICAgIGV4cGxpY2l0CiAgICAgIF9fY29kZWN2dF9hYnN0cmFjdF9iYXNlKHNp emVfdCBfX3JlZnMgPSAwKSA6IGxvY2FsZTo6ZmFjZXQoX19yZWZzKSB7IH0KCiAgICAgIHZpcnR1 YWwKICAgICAgfl9fY29kZWN2dF9hYnN0cmFjdF9iYXNlKCkgeyB9CgogICAgICB2aXJ0dWFsIHJl c3VsdAogICAgICBkb19vdXQoc3RhdGVfdHlwZSYgX19zdGF0ZSwgY29uc3QgaW50ZXJuX3R5cGUq IF9fZnJvbSwKICAgICAgICAgICAgIGNvbnN0IGludGVybl90eXBlKiBfX2Zyb21fZW5kLCBjb25z dCBpbnRlcm5fdHlwZSomIF9fZnJvbV9uZXh0LAogICAgICAgICAgICAgZXh0ZXJuX3R5cGUqIF9f dG8sIGV4dGVybl90eXBlKiBfX3RvX2VuZCwKICAgICAgICAgICAgIGV4dGVybl90eXBlKiYgX190 b19uZXh0KSBjb25zdCA9IDA7CgogICAgICB2aXJ0dWFsIHJlc3VsdAogICAgICBkb191bnNoaWZ0 KHN0YXRlX3R5cGUmIF9fc3RhdGUsIGV4dGVybl90eXBlKiBfX3RvLAogICAgICAgICAgICAgICAg IGV4dGVybl90eXBlKiBfX3RvX2VuZCwgZXh0ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0ID0g MDsKCiAgICAgIHZpcnR1YWwgcmVzdWx0CiAgICAgIGRvX2luKHN0YXRlX3R5cGUmIF9fc3RhdGUs IGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb20sCiAgICAgICAgICAgIGNvbnN0IGV4dGVybl90eXBl KiBfX2Zyb21fZW5kLCBjb25zdCBleHRlcm5fdHlwZSomIF9fZnJvbV9uZXh0LAogICAgICAgICAg ICBpbnRlcm5fdHlwZSogX190bywgaW50ZXJuX3R5cGUqIF9fdG9fZW5kLAogICAgICAgICAgICBp bnRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3QgPSAwOwoKICAgICAgdmlydHVhbCBpbnQKICAg ICAgZG9fZW5jb2RpbmcoKSBjb25zdCB0aHJvdygpID0gMDsKCiAgICAgIHZpcnR1YWwgYm9vbAog ICAgICBkb19hbHdheXNfbm9jb252KCkgY29uc3QgdGhyb3coKSA9IDA7CgogICAgICB2aXJ0dWFs IGludAogICAgICBkb19sZW5ndGgoY29uc3Qgc3RhdGVfdHlwZSYsIGNvbnN0IGV4dGVybl90eXBl KiBfX2Zyb20sCiAgICAgICAgICAgICAgICBjb25zdCBleHRlcm5fdHlwZSogX19lbmQsIHNpemVf dCBfX21heCkgY29uc3QgPSAwOwoKICAgICAgdmlydHVhbCBpbnQKICAgICAgZG9fbWF4X2xlbmd0 aCgpIGNvbnN0IHRocm93KCkgPSAwOwogICAgfTsKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50 ZXJuVCwgdHlwZW5hbWUgX0V4dGVyblQsIHR5cGVuYW1lIF9TdGF0ZVQ+CiAgICBjbGFzcyBjb2Rl Y3Z0CiAgICA6IHB1YmxpYyBfX2NvZGVjdnRfYWJzdHJhY3RfYmFzZTxfSW50ZXJuVCwgX0V4dGVy blQsIF9TdGF0ZVQ+CiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIGNvZGVjdnRfYmFz ZTo6cmVzdWx0IHJlc3VsdDsKICAgICAgdHlwZWRlZiBfSW50ZXJuVCBpbnRlcm5fdHlwZTsKICAg ICAgdHlwZWRlZiBfRXh0ZXJuVCBleHRlcm5fdHlwZTsKICAgICAgdHlwZWRlZiBfU3RhdGVUIHN0 YXRlX3R5cGU7CgogICAgcHVibGljOgogICAgICBzdGF0aWMgbG9jYWxlOjppZCBpZDsKCiAgICAg IGV4cGxpY2l0CiAgICAgIGNvZGVjdnQoc2l6ZV90IF9fcmVmcyA9IDApCiAgICAgIDogX19jb2Rl Y3Z0X2Fic3RyYWN0X2Jhc2U8X0ludGVyblQsIF9FeHRlcm5ULCBfU3RhdGVUPiAoX19yZWZzKSB7 IH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfmNvZGVjdnQoKSB7IH0KCiAg ICAgIHZpcnR1YWwgcmVzdWx0CiAgICAgIGRvX291dChzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25z dCBpbnRlcm5fdHlwZSogX19mcm9tLAogICAgICAgICAgICAgY29uc3QgaW50ZXJuX3R5cGUqIF9f ZnJvbV9lbmQsIGNvbnN0IGludGVybl90eXBlKiYgX19mcm9tX25leHQsCiAgICAgICAgICAgICBl eHRlcm5fdHlwZSogX190bywgZXh0ZXJuX3R5cGUqIF9fdG9fZW5kLAogICAgICAgICAgICAgZXh0 ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0OwoKICAgICAgdmlydHVhbCByZXN1bHQKICAgICAg ZG9fdW5zaGlmdChzdGF0ZV90eXBlJiBfX3N0YXRlLCBleHRlcm5fdHlwZSogX190bywKICAgICAg ICAgICAgICAgICBleHRlcm5fdHlwZSogX190b19lbmQsIGV4dGVybl90eXBlKiYgX190b19uZXh0 KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgcmVzdWx0CiAgICAgIGRvX2luKHN0YXRlX3R5cGUmIF9f c3RhdGUsIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb20sCiAgICAgICAgICAgIGNvbnN0IGV4dGVy bl90eXBlKiBfX2Zyb21fZW5kLCBjb25zdCBleHRlcm5fdHlwZSomIF9fZnJvbV9uZXh0LAogICAg ICAgICAgICBpbnRlcm5fdHlwZSogX190bywgaW50ZXJuX3R5cGUqIF9fdG9fZW5kLAogICAgICAg ICAgICBpbnRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGludAog ICAgICBkb19lbmNvZGluZygpIGNvbnN0IHRocm93KCk7CgogICAgICB2aXJ0dWFsIGJvb2wKICAg ICAgZG9fYWx3YXlzX25vY29udigpIGNvbnN0IHRocm93KCk7CgogICAgICB2aXJ0dWFsIGludAog ICAgICBkb19sZW5ndGgoY29uc3Qgc3RhdGVfdHlwZSYsIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zy b20sCiAgICAgICAgICAgICAgICBjb25zdCBleHRlcm5fdHlwZSogX19lbmQsIHNpemVfdCBfX21h eCkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGludAogICAgICBkb19tYXhfbGVuZ3RoKCkgY29uc3Qg dGhyb3coKTsKICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRlcm5ULCB0eXBlbmFtZSBf RXh0ZXJuVCwgdHlwZW5hbWUgX1N0YXRlVD4KICAgIGxvY2FsZTo6aWQgY29kZWN2dDxfSW50ZXJu VCwgX0V4dGVyblQsIF9TdGF0ZVQ+OjppZDsKCgogIHRlbXBsYXRlPD4KICAgIGNsYXNzIGNvZGVj dnQ8Y2hhciwgY2hhciwgbWJzdGF0ZV90PgogICAgOiBwdWJsaWMgX19jb2RlY3Z0X2Fic3RyYWN0 X2Jhc2U8Y2hhciwgY2hhciwgbWJzdGF0ZV90PgogICAgewogICAgcHVibGljOgoKICAgICAgdHlw ZWRlZiBjaGFyIGludGVybl90eXBlOwogICAgICB0eXBlZGVmIGNoYXIgZXh0ZXJuX3R5cGU7CiAg ICAgIHR5cGVkZWYgbWJzdGF0ZV90IHN0YXRlX3R5cGU7CgogICAgcHVibGljOgogICAgICBzdGF0 aWMgbG9jYWxlOjppZCBpZDsKCiAgICAgIGV4cGxpY2l0CiAgICAgIGNvZGVjdnQoc2l6ZV90IF9f cmVmcyA9IDApOwoKICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbAogICAgICB+Y29kZWN2dCgp OwoKICAgICAgdmlydHVhbCByZXN1bHQKICAgICAgZG9fb3V0KHN0YXRlX3R5cGUmIF9fc3RhdGUs IGNvbnN0IGludGVybl90eXBlKiBfX2Zyb20sCiAgICAgICAgICAgICBjb25zdCBpbnRlcm5fdHlw ZSogX19mcm9tX2VuZCwgY29uc3QgaW50ZXJuX3R5cGUqJiBfX2Zyb21fbmV4dCwKICAgICAgICAg ICAgIGV4dGVybl90eXBlKiBfX3RvLCBleHRlcm5fdHlwZSogX190b19lbmQsCiAgICAgICAgICAg ICBleHRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3Q7CgogICAgICB2aXJ0dWFsIHJlc3VsdAog ICAgICBkb191bnNoaWZ0KHN0YXRlX3R5cGUmIF9fc3RhdGUsIGV4dGVybl90eXBlKiBfX3RvLAog ICAgICAgICAgICAgICAgIGV4dGVybl90eXBlKiBfX3RvX2VuZCwgZXh0ZXJuX3R5cGUqJiBfX3Rv X25leHQpIGNvbnN0OwoKICAgICAgdmlydHVhbCByZXN1bHQKICAgICAgZG9faW4oc3RhdGVfdHlw ZSYgX19zdGF0ZSwgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbSwKICAgICAgICAgICAgY29uc3Qg ZXh0ZXJuX3R5cGUqIF9fZnJvbV9lbmQsIGNvbnN0IGV4dGVybl90eXBlKiYgX19mcm9tX25leHQs CiAgICAgICAgICAgIGludGVybl90eXBlKiBfX3RvLCBpbnRlcm5fdHlwZSogX190b19lbmQsCiAg ICAgICAgICAgIGludGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdDsKCiAgICAgIHZpcnR1YWwg aW50CiAgICAgIGRvX2VuY29kaW5nKCkgY29uc3QgdGhyb3coKTsKCiAgICAgIHZpcnR1YWwgYm9v bAogICAgICBkb19hbHdheXNfbm9jb252KCkgY29uc3QgdGhyb3coKTsKCiAgICAgIHZpcnR1YWwg aW50CiAgICAgIGRvX2xlbmd0aChjb25zdCBzdGF0ZV90eXBlJiwgY29uc3QgZXh0ZXJuX3R5cGUq IF9fZnJvbSwKICAgICAgICAgICAgICAgIGNvbnN0IGV4dGVybl90eXBlKiBfX2VuZCwgc2l6ZV90 IF9fbWF4KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgaW50CiAgICAgIGRvX21heF9sZW5ndGgoKSBj b25zdCB0aHJvdygpOwogIH07CgoKCiAgdGVtcGxhdGU8PgogICAgY2xhc3MgY29kZWN2dDx3Y2hh cl90LCBjaGFyLCBtYnN0YXRlX3Q+CiAgICA6IHB1YmxpYyBfX2NvZGVjdnRfYWJzdHJhY3RfYmFz ZTx3Y2hhcl90LCBjaGFyLCBtYnN0YXRlX3Q+CiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBl ZGVmIHdjaGFyX3QgaW50ZXJuX3R5cGU7CiAgICAgIHR5cGVkZWYgY2hhciBleHRlcm5fdHlwZTsK ICAgICAgdHlwZWRlZiBtYnN0YXRlX3Qgc3RhdGVfdHlwZTsKCiAgICBwdWJsaWM6CiAgICAgIHN0 YXRpYyBsb2NhbGU6OmlkIGlkOwoKICAgICAgZXhwbGljaXQKICAgICAgY29kZWN2dChzaXplX3Qg X19yZWZzID0gMCk7CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH5jb2RlY3Z0 KCk7CgogICAgICB2aXJ0dWFsIHJlc3VsdAogICAgICBkb19vdXQoc3RhdGVfdHlwZSYgX19zdGF0 ZSwgY29uc3QgaW50ZXJuX3R5cGUqIF9fZnJvbSwKICAgICAgICAgICAgIGNvbnN0IGludGVybl90 eXBlKiBfX2Zyb21fZW5kLCBjb25zdCBpbnRlcm5fdHlwZSomIF9fZnJvbV9uZXh0LAogICAgICAg ICAgICAgZXh0ZXJuX3R5cGUqIF9fdG8sIGV4dGVybl90eXBlKiBfX3RvX2VuZCwKICAgICAgICAg ICAgIGV4dGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgcmVzdWx0 CiAgICAgIGRvX3Vuc2hpZnQoc3RhdGVfdHlwZSYgX19zdGF0ZSwKICAgICAgICAgICAgICAgICBl eHRlcm5fdHlwZSogX190bywgZXh0ZXJuX3R5cGUqIF9fdG9fZW5kLAogICAgICAgICAgICAgICAg IGV4dGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgcmVzdWx0CiAg ICAgIGRvX2luKHN0YXRlX3R5cGUmIF9fc3RhdGUsCiAgICAgICAgICAgICBjb25zdCBleHRlcm5f dHlwZSogX19mcm9tLCBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tX2VuZCwKICAgICAgICAgICAg IGNvbnN0IGV4dGVybl90eXBlKiYgX19mcm9tX25leHQsCiAgICAgICAgICAgICBpbnRlcm5fdHlw ZSogX190bywgaW50ZXJuX3R5cGUqIF9fdG9fZW5kLAogICAgICAgICAgICAgaW50ZXJuX3R5cGUq JiBfX3RvX25leHQpIGNvbnN0OwoKICAgICAgdmlydHVhbAogICAgICBpbnQgZG9fZW5jb2Rpbmco KSBjb25zdCB0aHJvdygpOwoKICAgICAgdmlydHVhbAogICAgICBib29sIGRvX2Fsd2F5c19ub2Nv bnYoKSBjb25zdCB0aHJvdygpOwoKICAgICAgdmlydHVhbAogICAgICBpbnQgZG9fbGVuZ3RoKGNv bnN0IHN0YXRlX3R5cGUmLCBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tLAogICAgICAgICAgICAg ICAgICAgIGNvbnN0IGV4dGVybl90eXBlKiBfX2VuZCwgc2l6ZV90IF9fbWF4KSBjb25zdDsKCiAg ICAgIHZpcnR1YWwgaW50CiAgICAgIGRvX21heF9sZW5ndGgoKSBjb25zdCB0aHJvdygpOwogICAg fTsKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZXJuVCwgdHlwZW5hbWUgX0V4dGVyblQsIHR5 cGVuYW1lIF9TdGF0ZVQ+CiAgICBjbGFzcyBjb2RlY3Z0X2J5bmFtZSA6IHB1YmxpYyBjb2RlY3Z0 PF9JbnRlcm5ULCBfRXh0ZXJuVCwgX1N0YXRlVD4KICAgIHsKICAgIHB1YmxpYzoKICAgICAgZXhw bGljaXQKICAgICAgY29kZWN2dF9ieW5hbWUoY29uc3QgY2hhciosIHNpemVfdCBfX3JlZnMgPSAw KQogICAgICA6IGNvZGVjdnQ8X0ludGVyblQsIF9FeHRlcm5ULCBfU3RhdGVUPihfX3JlZnMpIHsg fQoKICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbAogICAgICB+Y29kZWN2dF9ieW5hbWUoKSB7 IH0KICAgIH07CgoKCgojIDEgIi91c3IvaW5jbHVkZS9jKysvMy4yLjEvaTM4Ni1wYy1saW51eC1n bnUvYml0cy9jb2RlY3Z0X3NwZWNpYWxpemF0aW9ucy5oIiAxIDMKIyAzMzUgIi91c3IvaW5jbHVk ZS9jKysvMy4yLjEvYml0cy9jb2RlY3Z0LmgiIDIgMwojIDQyNiAiL3Vzci9pbmNsdWRlL2MrKy8z LjIuMS9iaXRzL2xvY2FsZV9mYWNldHMuaCIgMiAzCgoKCiAgY2xhc3MgX19udW1fYmFzZQogIHsK ICBwcm90ZWN0ZWQ6CgoKICAgIHN0YXRpYyBjb25zdCBjaGFyIF9TX2F0b21zW107CgogICAgZW51 bQogICAgewogICAgICBfTV96ZXJvLAogICAgICBfTV9lID0gX01femVybyArIDEwLAogICAgICBf TV9FID0gX01femVybyArIDExLAogICAgICBfTV9zaXplID0gMjEgKyAxCiAgICB9OwoKCgogICAg c3RhdGljIGJvb2wKICAgIF9TX2Zvcm1hdF9mbG9hdChjb25zdCBpb3NfYmFzZSYgX19pbywgY2hh ciogX19mcHRyLCBjaGFyIF9fbW9kLAogICAgICAgICAgICAgICAgICAgIHN0cmVhbXNpemUgX19w cmVjKTsKCgogICAgc3RhdGljIHZvaWQKICAgIF9TX2Zvcm1hdF9pbnQoY29uc3QgaW9zX2Jhc2Um IF9faW8sIGNoYXIqIF9fZnB0ciwgY2hhciBfX21vZCwgY2hhciBfX21vZGwpOwogIH07CgoKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBjbGFzcyBudW1wdW5jdCA6IHB1YmxpYyBsb2Nh bGU6OmZhY2V0CiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5 cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVD4gc3RyaW5nX3R5cGU7CgogICAg ICBzdGF0aWMgbG9jYWxlOjppZCBpZDsKCiAgICBwcml2YXRlOgogICAgICBjaGFyX3R5cGUgX01f ZGVjaW1hbF9wb2ludDsKICAgICAgY2hhcl90eXBlIF9NX3Rob3VzYW5kc19zZXA7CiAgICAgIGNv bnN0IGNoYXIqIF9NX2dyb3VwaW5nOwogICAgICBjb25zdCBjaGFyX3R5cGUqIF9NX3RydWVuYW1l OwogICAgICBjb25zdCBjaGFyX3R5cGUqIF9NX2ZhbHNlbmFtZTsKCiAgICBwdWJsaWM6CiAgICAg IGV4cGxpY2l0CiAgICAgIG51bXB1bmN0KHNpemVfdCBfX3JlZnMgPSAwKSA6IGxvY2FsZTo6ZmFj ZXQoX19yZWZzKQogICAgICB7IF9NX2luaXRpYWxpemVfbnVtcHVuY3QoKTsgfQoKICAgICAgZXhw bGljaXQKICAgICAgbnVtcHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MsIHNpemVfdCBfX3JlZnMgPSAw KSA6IGxvY2FsZTo6ZmFjZXQoX19yZWZzKQogICAgICB7IF9NX2luaXRpYWxpemVfbnVtcHVuY3Qo X19jbG9jKTsgfQoKICAgICAgY2hhcl90eXBlCiAgICAgIGRlY2ltYWxfcG9pbnQoKSBjb25zdAog ICAgICB7IHJldHVybiB0aGlzLT5kb19kZWNpbWFsX3BvaW50KCk7IH0KCiAgICAgIGNoYXJfdHlw ZQogICAgICB0aG91c2FuZHNfc2VwKCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fdGhv dXNhbmRzX3NlcCgpOyB9CgogICAgICBzdHJpbmcKICAgICAgZ3JvdXBpbmcoKSBjb25zdAogICAg ICB7IHJldHVybiB0aGlzLT5kb19ncm91cGluZygpOyB9CgogICAgICBzdHJpbmdfdHlwZQogICAg ICB0cnVlbmFtZSgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3RydWVuYW1lKCk7IH0K CiAgICAgIHN0cmluZ190eXBlCiAgICAgIGZhbHNlbmFtZSgpIGNvbnN0CiAgICAgIHsgcmV0dXJu IHRoaXMtPmRvX2ZhbHNlbmFtZSgpOyB9CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAg ICAgIH5udW1wdW5jdCgpOwoKICAgICAgdmlydHVhbCBjaGFyX3R5cGUKICAgICAgZG9fZGVjaW1h bF9wb2ludCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX2RlY2ltYWxfcG9pbnQ7IH0KCiAgICAg IHZpcnR1YWwgY2hhcl90eXBlCiAgICAgIGRvX3Rob3VzYW5kc19zZXAoKSBjb25zdAogICAgICB7 IHJldHVybiBfTV90aG91c2FuZHNfc2VwOyB9CgogICAgICB2aXJ0dWFsIHN0cmluZwogICAgICBk b19ncm91cGluZygpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX2dyb3VwaW5nOyB9CgogICAgICB2 aXJ0dWFsIHN0cmluZ190eXBlCiAgICAgIGRvX3RydWVuYW1lKCkgY29uc3QKICAgICAgeyByZXR1 cm4gX01fdHJ1ZW5hbWU7IH0KCiAgICAgIHZpcnR1YWwgc3RyaW5nX3R5cGUKICAgICAgZG9fZmFs c2VuYW1lKCkgY29uc3QKICAgICAgeyByZXR1cm4gX01fZmFsc2VuYW1lOyB9CgoKICAgICAgdm9p ZAogICAgICBfTV9pbml0aWFsaXplX251bXB1bmN0KF9fY19sb2NhbGUgX19jbG9jID0gX19udWxs KTsKICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGxvY2FsZTo6aWQgbnVt cHVuY3Q8X0NoYXJUPjo6aWQ7CgogIHRlbXBsYXRlPD4KICAgIG51bXB1bmN0PGNoYXI+Ojp+bnVt cHVuY3QoKTsKCiAgdGVtcGxhdGU8PgogICAgdm9pZAogICAgbnVtcHVuY3Q8Y2hhcj46Ol9NX2lu aXRpYWxpemVfbnVtcHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MpOwoKCiAgdGVtcGxhdGU8PgogICAg bnVtcHVuY3Q8d2NoYXJfdD46On5udW1wdW5jdCgpOwoKICB0ZW1wbGF0ZTw+CiAgICB2b2lkCiAg ICBudW1wdW5jdDx3Y2hhcl90Pjo6X01faW5pdGlhbGl6ZV9udW1wdW5jdChfX2NfbG9jYWxlIF9f Y2xvYyk7CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBjbGFzcyBudW1wdW5jdF9i eW5hbWUgOiBwdWJsaWMgbnVtcHVuY3Q8X0NoYXJUPgogICAgewoKICAgICAgX19jX2xvY2FsZSBf TV9jX2xvY2FsZV9udW1wdW5jdDsKCiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgX0NoYXJUIGNo YXJfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJUPiBzdHJpbmdfdHlwZTsK CiAgICAgIGV4cGxpY2l0CiAgICAgIG51bXB1bmN0X2J5bmFtZShjb25zdCBjaGFyKiBfX3MsIHNp emVfdCBfX3JlZnMgPSAwKQogICAgICA6IG51bXB1bmN0PF9DaGFyVD4oX19yZWZzKQogICAgICB7 CiAgICAgICAgX1NfY3JlYXRlX2NfbG9jYWxlKF9NX2NfbG9jYWxlX251bXB1bmN0LCBfX3MpOwog ICAgICAgIF9NX2luaXRpYWxpemVfbnVtcHVuY3QoX01fY19sb2NhbGVfbnVtcHVuY3QpOwogICAg ICB9CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH5udW1wdW5jdF9ieW5hbWUo KQogICAgICB7IF9TX2Rlc3Ryb3lfY19sb2NhbGUoX01fY19sb2NhbGVfbnVtcHVuY3QpOyB9CiAg ICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBj bGFzcyBudW1fZ2V0IDogcHVibGljIGxvY2FsZTo6ZmFjZXQsIHB1YmxpYyBfX251bV9iYXNlCiAg ICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5 cGVkZWYgX0luSXRlciBpdGVyX3R5cGU7CgogICAgICBzdGF0aWMgbG9jYWxlOjppZCBpZDsKCiAg ICAgIGV4cGxpY2l0CiAgICAgIG51bV9nZXQoc2l6ZV90IF9fcmVmcyA9IDApIDogbG9jYWxlOjpm YWNldChfX3JlZnMpIHsgfQoKICAgICAgaXRlcl90eXBlCiAgICAgIGdldChpdGVyX3R5cGUgX19p biwgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgIGlvc19iYXNlOjpp b3N0YXRlJiBfX2VyciwgYm9vbCYgX192KSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19n ZXQoX19pbiwgX19lbmQsIF9faW8sIF9fZXJyLCBfX3YpOyB9CgogICAgICBpdGVyX3R5cGUKICAg ICAgZ2V0KGl0ZXJfdHlwZSBfX2luLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAog ICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBsb25nJiBfX3YpIGNvbnN0CiAgICAg IHsgcmV0dXJuIHRoaXMtPmRvX2dldChfX2luLCBfX2VuZCwgX19pbywgX19lcnIsIF9fdik7IH0K CiAgICAgIGl0ZXJfdHlwZQogICAgICBnZXQoaXRlcl90eXBlIF9faW4sIGl0ZXJfdHlwZSBfX2Vu ZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHVu c2lnbmVkIHNob3J0JiBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dldChfX2lu LCBfX2VuZCwgX19pbywgX19lcnIsIF9fdik7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBnZXQo aXRlcl90eXBlIF9faW4sIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAg ICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHVuc2lnbmVkIGludCYgX192KSBjb25zdAogICAg ICB7IHJldHVybiB0aGlzLT5kb19nZXQoX19pbiwgX19lbmQsIF9faW8sIF9fZXJyLCBfX3YpOyB9 CgogICAgICBpdGVyX3R5cGUKICAgICAgZ2V0KGl0ZXJfdHlwZSBfX2luLCBpdGVyX3R5cGUgX19l bmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB1 bnNpZ25lZCBsb25nJiBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dldChfX2lu LCBfX2VuZCwgX19pbywgX19lcnIsIF9fdik7IH0KCgogICAgICBpdGVyX3R5cGUKICAgICAgZ2V0 KGl0ZXJfdHlwZSBfX2luLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAg ICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBsb25nIGxvbmcmIF9fdikgY29uc3QKICAgICAg eyByZXR1cm4gdGhpcy0+ZG9fZ2V0KF9faW4sIF9fZW5kLCBfX2lvLCBfX2VyciwgX192KTsgfQoK ICAgICAgaXRlcl90eXBlCiAgICAgIGdldChpdGVyX3R5cGUgX19pbiwgaXRlcl90eXBlIF9fZW5k LCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdW5z aWduZWQgbG9uZyBsb25nJiBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dldChf X2luLCBfX2VuZCwgX19pbywgX19lcnIsIF9fdik7IH0KCgogICAgICBpdGVyX3R5cGUKICAgICAg Z2V0KGl0ZXJfdHlwZSBfX2luLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAg ICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBmbG9hdCYgX192KSBjb25zdAogICAgICB7 IHJldHVybiB0aGlzLT5kb19nZXQoX19pbiwgX19lbmQsIF9faW8sIF9fZXJyLCBfX3YpOyB9Cgog ICAgICBpdGVyX3R5cGUKICAgICAgZ2V0KGl0ZXJfdHlwZSBfX2luLCBpdGVyX3R5cGUgX19lbmQs IGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBkb3Vi bGUmIF9fdikgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZ2V0KF9faW4sIF9fZW5kLCBf X2lvLCBfX2VyciwgX192KTsgfQoKICAgICAgaXRlcl90eXBlCiAgICAgIGdldChpdGVyX3R5cGUg X19pbiwgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgIGlvc19iYXNl Ojppb3N0YXRlJiBfX2VyciwgbG9uZyBkb3VibGUmIF9fdikgY29uc3QKICAgICAgeyByZXR1cm4g dGhpcy0+ZG9fZ2V0KF9faW4sIF9fZW5kLCBfX2lvLCBfX2VyciwgX192KTsgfQoKICAgICAgaXRl cl90eXBlCiAgICAgIGdldChpdGVyX3R5cGUgX19pbiwgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFz ZSYgX19pbywKICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2Vyciwgdm9pZComIF9fdikg Y29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZ2V0KF9faW4sIF9fZW5kLCBfX2lvLCBfX2Vy ciwgX192KTsgfQoKICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbCB+bnVtX2dldCgpIHsgfQoK ICAgICAgaXRlcl90eXBlCiAgICAgIF9NX2V4dHJhY3RfZmxvYXQoaXRlcl90eXBlLCBpdGVyX3R5 cGUsIGlvc19iYXNlJiwgaW9zX2Jhc2U6Omlvc3RhdGUmLAogICAgICAgICAgICAgICAgICAgICAg IHN0cmluZyYgX194dHJjKSBjb25zdDsKCiAgICAgIGl0ZXJfdHlwZQogICAgICBfTV9leHRyYWN0 X2ludChpdGVyX3R5cGUsIGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBpb3NfYmFzZTo6aW9zdGF0ZSYs CiAgICAgICAgICAgICAgICAgICAgIHN0cmluZyYgX194dHJjLCBpbnQmIF9fYmFzZSkgY29uc3Q7 CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXQoaXRlcl90eXBlLCBpdGVyX3R5 cGUsIGlvc19iYXNlJiwgaW9zX2Jhc2U6Omlvc3RhdGUmLCBib29sJikgY29uc3Q7CgoKICAgICAg dmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fZ2V0KGl0ZXJfdHlwZSwgaXRlcl90eXBlLCBpb3Nf YmFzZSYsIGlvc19iYXNlOjppb3N0YXRlJiwgbG9uZyYpIGNvbnN0OwoKICAgICAgdmlydHVhbCBp dGVyX3R5cGUKICAgICAgZG9fZ2V0KGl0ZXJfdHlwZSwgaXRlcl90eXBlLCBpb3NfYmFzZSYsIGlv c19iYXNlOjppb3N0YXRlJiBfX2VyciwKICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCYpIGNv bnN0OwoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fZ2V0KGl0ZXJfdHlwZSwgaXRl cl90eXBlLCBpb3NfYmFzZSYsIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwKICAgICAgICAgICAg IHVuc2lnbmVkIGludCYpIGNvbnN0OwoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9f Z2V0KGl0ZXJfdHlwZSwgaXRlcl90eXBlLCBpb3NfYmFzZSYsIGlvc19iYXNlOjppb3N0YXRlJiBf X2VyciwKICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcmKSBjb25zdDsKCgogICAgICB2aXJ0dWFs IGl0ZXJfdHlwZQogICAgICBkb19nZXQoaXRlcl90eXBlLCBpdGVyX3R5cGUsIGlvc19iYXNlJiwg aW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLAogICAgICAgICAgICAgbG9uZyBsb25nJikgY29uc3Q7 CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXQoaXRlcl90eXBlLCBpdGVyX3R5 cGUsIGlvc19iYXNlJiwgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLAogICAgICAgICAgICAgdW5z aWduZWQgbG9uZyBsb25nJikgY29uc3Q7CgoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAg ZG9fZ2V0KGl0ZXJfdHlwZSwgaXRlcl90eXBlLCBpb3NfYmFzZSYsIGlvc19iYXNlOjppb3N0YXRl JiBfX2VyciwKICAgICAgICAgICAgIGZsb2F0JikgY29uc3Q7CgogICAgICB2aXJ0dWFsIGl0ZXJf dHlwZQogICAgICBkb19nZXQoaXRlcl90eXBlLCBpdGVyX3R5cGUsIGlvc19iYXNlJiwgaW9zX2Jh c2U6Omlvc3RhdGUmIF9fZXJyLAogICAgICAgICAgICAgZG91YmxlJikgY29uc3Q7CgogICAgICB2 aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXQoaXRlcl90eXBlLCBpdGVyX3R5cGUsIGlvc19i YXNlJiwgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLAogICAgICAgICAgICAgbG9uZyBkb3VibGUm KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX2dldChpdGVyX3R5cGUs IGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsCiAgICAgICAg ICAgICB2b2lkKiYpIGNvbnN0OwogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0 eXBlbmFtZSBfSW5JdGVyPgogICAgbG9jYWxlOjppZCBudW1fZ2V0PF9DaGFyVCwgX0luSXRlcj46 OmlkOwojIDcyMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9iaXRzL2xvY2FsZV9mYWNldHMuaCIg MwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBjbGFz cyBudW1fcHV0IDogcHVibGljIGxvY2FsZTo6ZmFjZXQsIHB1YmxpYyBfX251bV9iYXNlCiAgICB7 CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVk ZWYgX091dEl0ZXIgaXRlcl90eXBlOwoKICAgICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7CgogICAg ICBleHBsaWNpdAogICAgICBudW1fcHV0KHNpemVfdCBfX3JlZnMgPSAwKSA6IGxvY2FsZTo6ZmFj ZXQoX19yZWZzKSB7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBwdXQoaXRlcl90eXBlIF9fcywg aW9zX2Jhc2UmIF9fZiwgY2hhcl90eXBlIF9fZmlsbCwgYm9vbCBfX3YpIGNvbnN0CiAgICAgIHsg cmV0dXJuIHRoaXMtPmRvX3B1dChfX3MsIF9fZiwgX19maWxsLCBfX3YpOyB9CgogICAgICBpdGVy X3R5cGUKICAgICAgcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2YsIGNoYXJfdHlwZSBf X2ZpbGwsIGxvbmcgX192KSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19wdXQoX19zLCBf X2YsIF9fZmlsbCwgX192KTsgfQoKICAgICAgaXRlcl90eXBlCiAgICAgIHB1dChpdGVyX3R5cGUg X19zLCBpb3NfYmFzZSYgX19mLCBjaGFyX3R5cGUgX19maWxsLAogICAgICAgICAgdW5zaWduZWQg bG9uZyBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3B1dChfX3MsIF9fZiwgX19m aWxsLCBfX3YpOyB9CgoKICAgICAgaXRlcl90eXBlCiAgICAgIHB1dChpdGVyX3R5cGUgX19zLCBp b3NfYmFzZSYgX19mLCBjaGFyX3R5cGUgX19maWxsLCBsb25nIGxvbmcgX192KSBjb25zdAogICAg ICB7IHJldHVybiB0aGlzLT5kb19wdXQoX19zLCBfX2YsIF9fZmlsbCwgX192KTsgfQoKICAgICAg aXRlcl90eXBlCiAgICAgIHB1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19mLCBjaGFyX3R5 cGUgX19maWxsLAogICAgICAgICAgdW5zaWduZWQgbG9uZyBsb25nIF9fdikgY29uc3QKICAgICAg eyByZXR1cm4gdGhpcy0+ZG9fcHV0KF9fcywgX19mLCBfX2ZpbGwsIF9fdik7IH0KCgogICAgICBp dGVyX3R5cGUKICAgICAgcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2YsIGNoYXJfdHlw ZSBfX2ZpbGwsIGRvdWJsZSBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3B1dChf X3MsIF9fZiwgX19maWxsLCBfX3YpOyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgcHV0KGl0ZXJf dHlwZSBfX3MsIGlvc19iYXNlJiBfX2YsIGNoYXJfdHlwZSBfX2ZpbGwsCiAgICAgICAgICBsb25n IGRvdWJsZSBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3B1dChfX3MsIF9fZiwg X19maWxsLCBfX3YpOyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgcHV0KGl0ZXJfdHlwZSBfX3Ms IGlvc19iYXNlJiBfX2YsIGNoYXJfdHlwZSBfX2ZpbGwsCiAgICAgICAgICBjb25zdCB2b2lkKiBf X3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3B1dChfX3MsIF9fZiwgX19maWxsLCBf X3YpOyB9CgogICAgcHJvdGVjdGVkOgogICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVmFsdWVUPgog ICAgICAgIGl0ZXJfdHlwZQogICAgICAgIF9NX2NvbnZlcnRfZmxvYXQoaXRlcl90eXBlLCBpb3Nf YmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwKICAgICAgICAgICAgICAgICAgICAgICAgIGNo YXIgX19tb2QsIF9WYWx1ZVQgX192KSBjb25zdDsKCiAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9W YWx1ZVQ+CiAgICAgICAgaXRlcl90eXBlCiAgICAgICAgX01fY29udmVydF9pbnQoaXRlcl90eXBl LCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwKICAgICAgICAgICAgICAgICAgICAg ICBjaGFyIF9fbW9kLCBjaGFyIF9fbW9kbCwgX1ZhbHVlVCBfX3YpIGNvbnN0OwoKICAgICAgaXRl cl90eXBlCiAgICAgIF9NX3dpZGVuX2Zsb2F0KGl0ZXJfdHlwZSwgaW9zX2Jhc2UmIF9faW8sIGNo YXJfdHlwZSBfX2ZpbGwsIGNoYXIqIF9fY3MsCiAgICAgICAgICAgICAgICAgICAgIGludCBfX2xl bikgY29uc3Q7CgogICAgICBpdGVyX3R5cGUKICAgICAgX01fd2lkZW5faW50KGl0ZXJfdHlwZSwg aW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsIGNoYXIqIF9fY3MsCiAgICAgICAgICAg ICAgICAgICBpbnQgX19sZW4pIGNvbnN0OwoKICAgICAgaXRlcl90eXBlCiAgICAgIF9NX2luc2Vy dChpdGVyX3R5cGUsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUgX19maWxsLAogICAgICAgICAg ICAgICAgY29uc3QgY2hhcl90eXBlKiBfX3dzLCBpbnQgX19sZW4pIGNvbnN0OwoKICAgICAgdmly dHVhbAogICAgICB+bnVtX3B1dCgpIHsgfTsKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAg IGRvX3B1dChpdGVyX3R5cGUsIGlvc19iYXNlJiwgY2hhcl90eXBlIF9fZmlsbCwgYm9vbCBfX3Yp IGNvbnN0OwoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fcHV0KGl0ZXJfdHlwZSwg aW9zX2Jhc2UmLCBjaGFyX3R5cGUgX19maWxsLCBsb25nIF9fdikgY29uc3Q7CgogICAgICB2aXJ0 dWFsIGl0ZXJfdHlwZQogICAgICBkb19wdXQoaXRlcl90eXBlLCBpb3NfYmFzZSYsIGNoYXJfdHlw ZSBfX2ZpbGwsIHVuc2lnbmVkIGxvbmcpIGNvbnN0OwoKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBl CiAgICAgIGRvX3B1dChpdGVyX3R5cGUsIGlvc19iYXNlJiwgY2hhcl90eXBlIF9fZmlsbCwgbG9u ZyBsb25nIF9fdikgY29uc3Q7CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19wdXQo aXRlcl90eXBlLCBpb3NfYmFzZSYsIGNoYXJfdHlwZSBfX2ZpbGwsIHVuc2lnbmVkIGxvbmcgbG9u ZykgY29uc3Q7CgoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fcHV0KGl0ZXJfdHlw ZSwgaW9zX2Jhc2UmLCBjaGFyX3R5cGUgX19maWxsLCBkb3VibGUgX192KSBjb25zdDsKCiAgICAg IHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX3B1dChpdGVyX3R5cGUsIGlvc19iYXNlJiwgY2hh cl90eXBlIF9fZmlsbCwgbG9uZyBkb3VibGUgX192KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgaXRl cl90eXBlCiAgICAgIGRvX3B1dChpdGVyX3R5cGUsIGlvc19iYXNlJiwgY2hhcl90eXBlIF9fZmls bCwgY29uc3Qgdm9pZCogX192KSBjb25zdDsKICAgIH07CgogIHRlbXBsYXRlIDx0eXBlbmFtZSBf Q2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgbG9jYWxlOjppZCBudW1fcHV0PF9DaGFyVCwg X091dEl0ZXI+OjppZDsKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGNsYXNzIGNv bGxhdGUgOiBwdWJsaWMgbG9jYWxlOjpmYWNldAogICAgewogICAgcHVibGljOgoKICAgICAgdHlw ZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQ+ IHN0cmluZ190eXBlOwoKICAgIHByb3RlY3RlZDoKCgogICAgICBfX2NfbG9jYWxlIF9NX2NfbG9j YWxlX2NvbGxhdGU7CgogICAgcHVibGljOgogICAgICBzdGF0aWMgbG9jYWxlOjppZCBpZDsKCiAg ICAgIGV4cGxpY2l0CiAgICAgIGNvbGxhdGUoc2l6ZV90IF9fcmVmcyA9IDApCiAgICAgIDogbG9j YWxlOjpmYWNldChfX3JlZnMpCiAgICAgIHsgX01fY19sb2NhbGVfY29sbGF0ZSA9IF9TX2NfbG9j YWxlOyB9CgogICAgICBleHBsaWNpdAogICAgICBjb2xsYXRlKF9fY19sb2NhbGUgX19jbG9jLCBz aXplX3QgX19yZWZzID0gMCkKICAgICAgOiBsb2NhbGU6OmZhY2V0KF9fcmVmcykKICAgICAgeyBf TV9jX2xvY2FsZV9jb2xsYXRlID0gX1NfY2xvbmVfY19sb2NhbGUoX19jbG9jKTsgfQoKICAgICAg aW50CiAgICAgIGNvbXBhcmUoY29uc3QgX0NoYXJUKiBfX2xvMSwgY29uc3QgX0NoYXJUKiBfX2hp MSwKICAgICAgICAgICAgICBjb25zdCBfQ2hhclQqIF9fbG8yLCBjb25zdCBfQ2hhclQqIF9faGky KSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19jb21wYXJlKF9fbG8xLCBfX2hpMSwgX19s bzIsIF9faGkyKTsgfQoKICAgICAgc3RyaW5nX3R5cGUKICAgICAgdHJhbnNmb3JtKGNvbnN0IF9D aGFyVCogX19sbywgY29uc3QgX0NoYXJUKiBfX2hpKSBjb25zdAogICAgICB7IHJldHVybiB0aGlz LT5kb190cmFuc2Zvcm0oX19sbywgX19oaSk7IH0KCiAgICAgIGxvbmcKICAgICAgaGFzaChjb25z dCBfQ2hhclQqIF9fbG8sIGNvbnN0IF9DaGFyVCogX19oaSkgY29uc3QKICAgICAgeyByZXR1cm4g dGhpcy0+ZG9faGFzaChfX2xvLCBfX2hpKTsgfQoKCiAgICAgIGludAogICAgICBfTV9jb21wYXJl KGNvbnN0IF9DaGFyVCosIGNvbnN0IF9DaGFyVCopIGNvbnN0OwoKICAgICAgc2l6ZV90CiAgICAg IF9NX3RyYW5zZm9ybShfQ2hhclQqLCBjb25zdCBfQ2hhclQqLCBzaXplX3QpIGNvbnN0OwoKICBw cm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfmNvbGxhdGUoKQogICAgICB7IF9TX2Rlc3Ry b3lfY19sb2NhbGUoX01fY19sb2NhbGVfY29sbGF0ZSk7IH0KCiAgICAgIHZpcnR1YWwgaW50CiAg ICAgIGRvX2NvbXBhcmUoY29uc3QgX0NoYXJUKiBfX2xvMSwgY29uc3QgX0NoYXJUKiBfX2hpMSwK ICAgICAgICAgICAgICAgICBjb25zdCBfQ2hhclQqIF9fbG8yLCBjb25zdCBfQ2hhclQqIF9faGky KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgc3RyaW5nX3R5cGUKICAgICAgZG9fdHJhbnNmb3JtKGNv bnN0IF9DaGFyVCogX19sbywgY29uc3QgX0NoYXJUKiBfX2hpKSBjb25zdDsKCiAgICAgIHZpcnR1 YWwgbG9uZwogICAgICBkb19oYXNoKGNvbnN0IF9DaGFyVCogX19sbywgY29uc3QgX0NoYXJUKiBf X2hpKSBjb25zdDsKICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGxvY2Fs ZTo6aWQgY29sbGF0ZTxfQ2hhclQ+OjppZDsKCgogIHRlbXBsYXRlPD4KICAgIGludAogICAgY29s bGF0ZTxjaGFyPjo6X01fY29tcGFyZShjb25zdCBjaGFyKiwgY29uc3QgY2hhciopIGNvbnN0OwoK ICB0ZW1wbGF0ZTw+CiAgICBzaXplX3QKICAgIGNvbGxhdGU8Y2hhcj46Ol9NX3RyYW5zZm9ybShj aGFyKiwgY29uc3QgY2hhciosIHNpemVfdCkgY29uc3Q7CgoKICB0ZW1wbGF0ZTw+CiAgICBpbnQK ICAgIGNvbGxhdGU8d2NoYXJfdD46Ol9NX2NvbXBhcmUoY29uc3Qgd2NoYXJfdCosIGNvbnN0IHdj aGFyX3QqKSBjb25zdDsKCiAgdGVtcGxhdGU8PgogICAgc2l6ZV90CiAgICBjb2xsYXRlPHdjaGFy X3Q+OjpfTV90cmFuc2Zvcm0od2NoYXJfdCosIGNvbnN0IHdjaGFyX3QqLCBzaXplX3QpIGNvbnN0 OwoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgY2xhc3MgY29sbGF0ZV9ieW5hbWUg OiBwdWJsaWMgY29sbGF0ZTxfQ2hhclQ+CiAgICB7CiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYg X0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJUPiBzdHJp bmdfdHlwZTsKCiAgICAgIGV4cGxpY2l0CiAgICAgIGNvbGxhdGVfYnluYW1lKGNvbnN0IGNoYXIq IF9fcywgc2l6ZV90IF9fcmVmcyA9IDApCiAgICAgIDogY29sbGF0ZTxfQ2hhclQ+KF9fcmVmcykK ICAgICAgewogICAgICAgIF9TX2Rlc3Ryb3lfY19sb2NhbGUoX01fY19sb2NhbGVfY29sbGF0ZSk7 CiAgICAgICAgX1NfY3JlYXRlX2NfbG9jYWxlKF9NX2NfbG9jYWxlX2NvbGxhdGUsIF9fcyk7CiAg ICAgIH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfmNvbGxhdGVfYnluYW1l KCkgeyB9CiAgICB9OwoKCiAgY2xhc3MgdGltZV9iYXNlCiAgewogIHB1YmxpYzoKICAgIGVudW0g ZGF0ZW9yZGVyIHsgbm9fb3JkZXIsIGRteSwgbWR5LCB5bWQsIHlkbSB9OwogIH07CgogIHRlbXBs YXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGNsYXNzIF9fdGltZXB1bmN0IDogcHVibGljIGxvY2Fs ZTo6ZmFjZXQKICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIF9fY2hhcl90 eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQ+IF9fc3RyaW5nX3R5cGU7Cgog ICAgICBzdGF0aWMgbG9jYWxlOjppZCBpZDsKCgogICAgICBzdGF0aWMgY29uc3QgX0NoYXJUKiBf U190aW1lem9uZXNbMTRdOwoKICAgIHByb3RlY3RlZDoKICAgICAgX19jX2xvY2FsZSBfTV9jX2xv Y2FsZV90aW1lcHVuY3Q7CiAgICAgIGNoYXIqIF9NX25hbWVfdGltZXB1bmN0OwogICAgICBjb25z dCBfQ2hhclQqIF9NX2RhdGVfZm9ybWF0OwogICAgICBjb25zdCBfQ2hhclQqIF9NX2RhdGVfZXJh X2Zvcm1hdDsKICAgICAgY29uc3QgX0NoYXJUKiBfTV90aW1lX2Zvcm1hdDsKICAgICAgY29uc3Qg X0NoYXJUKiBfTV90aW1lX2VyYV9mb3JtYXQ7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fZGF0ZV90 aW1lX2Zvcm1hdDsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9kYXRlX3RpbWVfZXJhX2Zvcm1hdDsK ICAgICAgY29uc3QgX0NoYXJUKiBfTV9hbTsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9wbTsKICAg ICAgY29uc3QgX0NoYXJUKiBfTV9hbV9wbV9mb3JtYXQ7CgoKICAgICAgY29uc3QgX0NoYXJUKiBf TV9kYXkxOwogICAgICBjb25zdCBfQ2hhclQqIF9NX2RheTI7CiAgICAgIGNvbnN0IF9DaGFyVCog X01fZGF5MzsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9kYXk0OwogICAgICBjb25zdCBfQ2hhclQq IF9NX2RheTU7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fZGF5NjsKICAgICAgY29uc3QgX0NoYXJU KiBfTV9kYXk3OwoKCiAgICAgIGNvbnN0IF9DaGFyVCogX01fZGF5X2ExOwogICAgICBjb25zdCBf Q2hhclQqIF9NX2RheV9hMjsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9kYXlfYTM7CiAgICAgIGNv bnN0IF9DaGFyVCogX01fZGF5X2E0OwogICAgICBjb25zdCBfQ2hhclQqIF9NX2RheV9hNTsKICAg ICAgY29uc3QgX0NoYXJUKiBfTV9kYXlfYTY7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fZGF5X2E3 OwoKCiAgICAgIGNvbnN0IF9DaGFyVCogX01fbW9udGgwMTsKICAgICAgY29uc3QgX0NoYXJUKiBf TV9tb250aDAyOwogICAgICBjb25zdCBfQ2hhclQqIF9NX21vbnRoMDM7CiAgICAgIGNvbnN0IF9D aGFyVCogX01fbW9udGgwNDsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9tb250aDA1OwogICAgICBj b25zdCBfQ2hhclQqIF9NX21vbnRoMDY7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fbW9udGgwNzsK ICAgICAgY29uc3QgX0NoYXJUKiBfTV9tb250aDA4OwogICAgICBjb25zdCBfQ2hhclQqIF9NX21v bnRoMDk7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fbW9udGgxMDsKICAgICAgY29uc3QgX0NoYXJU KiBfTV9tb250aDExOwogICAgICBjb25zdCBfQ2hhclQqIF9NX21vbnRoMTI7CgoKICAgICAgY29u c3QgX0NoYXJUKiBfTV9tb250aF9hMDE7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fbW9udGhfYTAy OwogICAgICBjb25zdCBfQ2hhclQqIF9NX21vbnRoX2EwMzsKICAgICAgY29uc3QgX0NoYXJUKiBf TV9tb250aF9hMDQ7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fbW9udGhfYTA1OwogICAgICBjb25z dCBfQ2hhclQqIF9NX21vbnRoX2EwNjsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9tb250aF9hMDc7 CiAgICAgIGNvbnN0IF9DaGFyVCogX01fbW9udGhfYTA4OwogICAgICBjb25zdCBfQ2hhclQqIF9N X21vbnRoX2EwOTsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9tb250aF9hMTA7CiAgICAgIGNvbnN0 IF9DaGFyVCogX01fbW9udGhfYTExOwogICAgICBjb25zdCBfQ2hhclQqIF9NX21vbnRoX2ExMjsK CiAgICBwdWJsaWM6CiAgICAgIGV4cGxpY2l0CiAgICAgIF9fdGltZXB1bmN0KHNpemVfdCBfX3Jl ZnMgPSAwKQogICAgICA6IGxvY2FsZTo6ZmFjZXQoX19yZWZzKQogICAgICB7CiAgICAgICAgX01f bmFtZV90aW1lcHVuY3QgPSBuZXcgY2hhclsyXTsKICAgICAgICBzdHJjcHkoX01fbmFtZV90aW1l cHVuY3QsICJDIik7CiAgICAgICAgX01faW5pdGlhbGl6ZV90aW1lcHVuY3QoKTsKICAgICAgfQoK ICAgICAgZXhwbGljaXQKICAgICAgX190aW1lcHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MsIGNvbnN0 IGNoYXIqIF9fcywgc2l6ZV90IF9fcmVmcyA9IDApCiAgICAgIDogbG9jYWxlOjpmYWNldChfX3Jl ZnMpCiAgICAgIHsKICAgICAgICBfTV9uYW1lX3RpbWVwdW5jdCA9IG5ldyBjaGFyW3N0cmxlbihf X3MpICsgMV07CiAgICAgICAgc3RyY3B5KF9NX25hbWVfdGltZXB1bmN0LCBfX3MpOwogICAgICAg IF9NX2luaXRpYWxpemVfdGltZXB1bmN0KF9fY2xvYyk7CiAgICAgIH0KCiAgICAgIHZvaWQKICAg ICAgX01fcHV0KF9DaGFyVCogX19zLCBzaXplX3QgX19tYXhsZW4sIGNvbnN0IF9DaGFyVCogX19m b3JtYXQsCiAgICAgICAgICAgICBjb25zdCB0bSogX190bSkgY29uc3Q7CgogICAgICB2b2lkCiAg ICAgIF9NX2RhdGVfZm9ybWF0cyhjb25zdCBfQ2hhclQqKiBfX2RhdGUpIGNvbnN0CiAgICAgIHsK CiAgICAgICAgX19kYXRlWzBdID0gX01fZGF0ZV9mb3JtYXQ7CiAgICAgICAgX19kYXRlWzFdID0g X01fZGF0ZV9lcmFfZm9ybWF0OwogICAgICB9CgogICAgICB2b2lkCiAgICAgIF9NX3RpbWVfZm9y bWF0cyhjb25zdCBfQ2hhclQqKiBfX3RpbWUpIGNvbnN0CiAgICAgIHsKCiAgICAgICAgX190aW1l WzBdID0gX01fdGltZV9mb3JtYXQ7CiAgICAgICAgX190aW1lWzFdID0gX01fdGltZV9lcmFfZm9y bWF0OwogICAgICB9CgogICAgICB2b2lkCiAgICAgIF9NX2FtcG0oY29uc3QgX0NoYXJUKiogX19h bXBtKSBjb25zdAogICAgICB7CiAgICAgICAgX19hbXBtWzBdID0gX01fYW07CiAgICAgICAgX19h bXBtWzFdID0gX01fcG07CiAgICAgIH0KCiAgICAgIHZvaWQKICAgICAgX01fZGF0ZV90aW1lX2Zv cm1hdHMoY29uc3QgX0NoYXJUKiogX19kdCkgY29uc3QKICAgICAgewoKICAgICAgICBfX2R0WzBd ID0gX01fZGF0ZV90aW1lX2Zvcm1hdDsKICAgICAgICBfX2R0WzFdID0gX01fZGF0ZV90aW1lX2Vy YV9mb3JtYXQ7CiAgICAgIH0KCiAgICAgIHZvaWQKICAgICAgX01fZGF5cyhjb25zdCBfQ2hhclQq KiBfX2RheXMpIGNvbnN0CiAgICAgIHsKICAgICAgICBfX2RheXNbMF0gPSBfTV9kYXkxOwogICAg ICAgIF9fZGF5c1sxXSA9IF9NX2RheTI7CiAgICAgICAgX19kYXlzWzJdID0gX01fZGF5MzsKICAg ICAgICBfX2RheXNbM10gPSBfTV9kYXk0OwogICAgICAgIF9fZGF5c1s0XSA9IF9NX2RheTU7CiAg ICAgICAgX19kYXlzWzVdID0gX01fZGF5NjsKICAgICAgICBfX2RheXNbNl0gPSBfTV9kYXk3Owog ICAgICB9CgogICAgICB2b2lkCiAgICAgIF9NX2RheXNfYWJicmV2aWF0ZWQoY29uc3QgX0NoYXJU KiogX19kYXlzKSBjb25zdAogICAgICB7CiAgICAgICAgX19kYXlzWzBdID0gX01fZGF5X2ExOwog ICAgICAgIF9fZGF5c1sxXSA9IF9NX2RheV9hMjsKICAgICAgICBfX2RheXNbMl0gPSBfTV9kYXlf YTM7CiAgICAgICAgX19kYXlzWzNdID0gX01fZGF5X2E0OwogICAgICAgIF9fZGF5c1s0XSA9IF9N X2RheV9hNTsKICAgICAgICBfX2RheXNbNV0gPSBfTV9kYXlfYTY7CiAgICAgICAgX19kYXlzWzZd ID0gX01fZGF5X2E3OwogICAgICB9CgogICAgICB2b2lkCiAgICAgIF9NX21vbnRocyhjb25zdCBf Q2hhclQqKiBfX21vbnRocykgY29uc3QKICAgICAgewogICAgICAgIF9fbW9udGhzWzBdID0gX01f bW9udGgwMTsKICAgICAgICBfX21vbnRoc1sxXSA9IF9NX21vbnRoMDI7CiAgICAgICAgX19tb250 aHNbMl0gPSBfTV9tb250aDAzOwogICAgICAgIF9fbW9udGhzWzNdID0gX01fbW9udGgwNDsKICAg ICAgICBfX21vbnRoc1s0XSA9IF9NX21vbnRoMDU7CiAgICAgICAgX19tb250aHNbNV0gPSBfTV9t b250aDA2OwogICAgICAgIF9fbW9udGhzWzZdID0gX01fbW9udGgwNzsKICAgICAgICBfX21vbnRo c1s3XSA9IF9NX21vbnRoMDg7CiAgICAgICAgX19tb250aHNbOF0gPSBfTV9tb250aDA5OwogICAg ICAgIF9fbW9udGhzWzldID0gX01fbW9udGgxMDsKICAgICAgICBfX21vbnRoc1sxMF0gPSBfTV9t b250aDExOwogICAgICAgIF9fbW9udGhzWzExXSA9IF9NX21vbnRoMTI7CiAgICAgIH0KCiAgICAg IHZvaWQKICAgICAgX01fbW9udGhzX2FiYnJldmlhdGVkKGNvbnN0IF9DaGFyVCoqIF9fbW9udGhz KSBjb25zdAogICAgICB7CiAgICAgICAgX19tb250aHNbMF0gPSBfTV9tb250aF9hMDE7CiAgICAg ICAgX19tb250aHNbMV0gPSBfTV9tb250aF9hMDI7CiAgICAgICAgX19tb250aHNbMl0gPSBfTV9t b250aF9hMDM7CiAgICAgICAgX19tb250aHNbM10gPSBfTV9tb250aF9hMDQ7CiAgICAgICAgX19t b250aHNbNF0gPSBfTV9tb250aF9hMDU7CiAgICAgICAgX19tb250aHNbNV0gPSBfTV9tb250aF9h MDY7CiAgICAgICAgX19tb250aHNbNl0gPSBfTV9tb250aF9hMDc7CiAgICAgICAgX19tb250aHNb N10gPSBfTV9tb250aF9hMDg7CiAgICAgICAgX19tb250aHNbOF0gPSBfTV9tb250aF9hMDk7CiAg ICAgICAgX19tb250aHNbOV0gPSBfTV9tb250aF9hMTA7CiAgICAgICAgX19tb250aHNbMTBdID0g X01fbW9udGhfYTExOwogICAgICAgIF9fbW9udGhzWzExXSA9IF9NX21vbnRoX2ExMjsKICAgICAg fQoKICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbAogICAgICB+X190aW1lcHVuY3QoKQogICAg ICB7CiAgICAgICAgZGVsZXRlIFtdIF9NX25hbWVfdGltZXB1bmN0OwogICAgICAgIF9TX2Rlc3Ry b3lfY19sb2NhbGUoX01fY19sb2NhbGVfdGltZXB1bmN0KTsKICAgICAgfQoKCiAgICAgIHZvaWQK ICAgICAgX01faW5pdGlhbGl6ZV90aW1lcHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MgPSBfX251bGwp OwogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgbG9jYWxlOjppZCBfX3Rp bWVwdW5jdDxfQ2hhclQ+OjppZDsKCgogIHRlbXBsYXRlPD4KICAgIGNvbnN0IGNoYXIqCiAgICBf X3RpbWVwdW5jdDxjaGFyPjo6X1NfdGltZXpvbmVzWzE0XTsKCiAgdGVtcGxhdGU8PgogICAgdm9p ZAogICAgX190aW1lcHVuY3Q8Y2hhcj46Ol9NX2luaXRpYWxpemVfdGltZXB1bmN0KF9fY19sb2Nh bGUgX19jbG9jKTsKCiAgdGVtcGxhdGU8PgogICAgdm9pZAogICAgX190aW1lcHVuY3Q8Y2hhcj46 Ol9NX3B1dChjaGFyKiwgc2l6ZV90LCBjb25zdCBjaGFyKiwgY29uc3QgdG0qKSBjb25zdDsKCgog IHRlbXBsYXRlPD4KICAgIGNvbnN0IHdjaGFyX3QqCiAgICBfX3RpbWVwdW5jdDx3Y2hhcl90Pjo6 X1NfdGltZXpvbmVzWzE0XTsKCiAgdGVtcGxhdGU8PgogICAgdm9pZAogICAgX190aW1lcHVuY3Q8 d2NoYXJfdD46Ol9NX2luaXRpYWxpemVfdGltZXB1bmN0KF9fY19sb2NhbGUgX19jbG9jKTsKCiAg dGVtcGxhdGU8PgogICAgdm9pZAogICAgX190aW1lcHVuY3Q8d2NoYXJfdD46Ol9NX3B1dCh3Y2hh cl90Kiwgc2l6ZV90LCBjb25zdCB3Y2hhcl90KiwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgY29uc3QgdG0qKSBjb25zdDsKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAg ICBjb25zdCBfQ2hhclQqIF9fdGltZXB1bmN0PF9DaGFyVD46Ol9TX3RpbWV6b25lc1sxNF07CgoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBjbGFzcyB0 aW1lX2dldCA6IHB1YmxpYyBsb2NhbGU6OmZhY2V0LCBwdWJsaWMgdGltZV9iYXNlCiAgICB7CiAg ICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYg X0luSXRlciBpdGVyX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVD4gX19z dHJpbmdfdHlwZTsKCiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOwoKICAgICAgZXhwbGljaXQK ICAgICAgdGltZV9nZXQoc2l6ZV90IF9fcmVmcyA9IDApCiAgICAgIDogbG9jYWxlOjpmYWNldCAo X19yZWZzKSB7IH0KCiAgICAgIGRhdGVvcmRlcgogICAgICBkYXRlX29yZGVyKCkgY29uc3QKICAg ICAgeyByZXR1cm4gdGhpcy0+ZG9fZGF0ZV9vcmRlcigpOyB9CgogICAgICBpdGVyX3R5cGUKICAg ICAgZ2V0X3RpbWUoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBf X2lvLAogICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3RtKSBj b25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19nZXRfdGltZShfX2JlZywgX19lbmQsIF9faW8s IF9fZXJyLCBfX3RtKTsgfQoKICAgICAgaXRlcl90eXBlCiAgICAgIGdldF9kYXRlKGl0ZXJfdHlw ZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICAgICAg aW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB0bSogX190bSkgY29uc3QKICAgICAgeyByZXR1cm4g dGhpcy0+ZG9fZ2V0X2RhdGUoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX190bSk7IH0KCiAg ICAgIGl0ZXJfdHlwZQogICAgICBnZXRfd2Vla2RheShpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlw ZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0 YXRlJiBfX2VyciwgdG0qIF9fdG0pIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dldF93 ZWVrZGF5KF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9fdG0pOyB9CgogICAgICBpdGVyX3R5 cGUKICAgICAgZ2V0X21vbnRobmFtZShpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwg aW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9f ZXJyLCB0bSogX190bSkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZ2V0X21vbnRobmFt ZShfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3RtKTsgfQoKICAgICAgaXRlcl90eXBlCiAg ICAgIGdldF95ZWFyKGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYg X19pbywKICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB0bSogX190bSkg Y29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZ2V0X3llYXIoX19iZWcsIF9fZW5kLCBfX2lv LCBfX2VyciwgX190bSk7IH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfnRp bWVfZ2V0KCkgeyB9CgogICAgICB2aXJ0dWFsIGRhdGVvcmRlcgogICAgICBkb19kYXRlX29yZGVy KCkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXRfdGltZShpdGVy X3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAg ICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdG0qIF9fdG0pIGNvbnN0OwoKICAgICAg dmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fZ2V0X2RhdGUoaXRlcl90eXBlIF9fYmVnLCBpdGVy X3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6 aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3RtKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBl CiAgICAgIGRvX2dldF93ZWVrZGF5KGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBp b3NfYmFzZSYsCiAgICAgICAgICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2Vyciwg dG0qIF9fdG0pIGNvbnN0OwoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fZ2V0X21v bnRobmFtZShpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmLAogICAg ICAgICAgICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdG0qIF9fdG0pIGNv bnN0OwoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fZ2V0X3llYXIoaXRlcl90eXBl IF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgICAgICAg ICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3RtKSBjb25zdDsKCgogICAgICB2b2lk CiAgICAgIF9NX2V4dHJhY3RfbnVtKGl0ZXJfdHlwZSYgX19iZWcsIGl0ZXJfdHlwZSYgX19lbmQs IGludCYgX19tZW1iZXIsCiAgICAgICAgICAgICAgICAgICAgIGludCBfX21pbiwgaW50IF9fbWF4 LCBzaXplX3QgX19sZW4sCiAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGN0eXBlPF9DaGFyVD4m IF9fY3R5cGUsCiAgICAgICAgICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2Vycikg Y29uc3Q7CgoKCiAgICAgIHZvaWQKICAgICAgX01fZXh0cmFjdF9uYW1lKGl0ZXJfdHlwZSYgX19i ZWcsIGl0ZXJfdHlwZSYgX19lbmQsIGludCYgX19tZW1iZXIsCiAgICAgICAgICAgICAgICAgICAg ICBjb25zdCBfQ2hhclQqKiBfX25hbWVzLCBzaXplX3QgX19pbmRleGxlbiwKICAgICAgICAgICAg ICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VycikgY29uc3Q7CgoKICAgICAgdm9pZAog ICAgICBfTV9leHRyYWN0X3ZpYV9mb3JtYXQoaXRlcl90eXBlJiBfX2JlZywgaXRlcl90eXBlJiBf X2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpb3NfYmFz ZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3RtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg Y29uc3QgX0NoYXJUKiBfX2Zvcm1hdCkgY29uc3Q7CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBsb2NhbGU6OmlkIHRpbWVfZ2V0PF9DaGFy VCwgX0luSXRlcj46OmlkOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9J bkl0ZXI+CiAgICBjbGFzcyB0aW1lX2dldF9ieW5hbWUgOiBwdWJsaWMgdGltZV9nZXQ8X0NoYXJU LCBfSW5JdGVyPgogICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90 eXBlOwogICAgICB0eXBlZGVmIF9Jbkl0ZXIgaXRlcl90eXBlOwoKICAgICAgZXhwbGljaXQKICAg ICAgdGltZV9nZXRfYnluYW1lKGNvbnN0IGNoYXIqLCBzaXplX3QgX19yZWZzID0gMCkKICAgICAg OiB0aW1lX2dldDxfQ2hhclQsIF9Jbkl0ZXI+KF9fcmVmcykgeyB9CgogICAgcHJvdGVjdGVkOgog ICAgICB2aXJ0dWFsCiAgICAgIH50aW1lX2dldF9ieW5hbWUoKSB7IH0KICAgIH07CgogIHRlbXBs YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBjbGFzcyB0aW1lX3B1 dCA6IHB1YmxpYyBsb2NhbGU6OmZhY2V0LCBwdWJsaWMgdGltZV9iYXNlCiAgICB7CiAgICBwdWJs aWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgX091dEl0 ZXIgaXRlcl90eXBlOwoKICAgICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7CgogICAgICBleHBsaWNp dAogICAgICB0aW1lX3B1dChzaXplX3QgX19yZWZzID0gMCkKICAgICAgOiBsb2NhbGU6OmZhY2V0 KF9fcmVmcykgeyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgcHV0KGl0ZXJfdHlwZSBfX3MsIGlv c19iYXNlJiBfX2lvLCBjaGFyX3R5cGUgX19maWxsLCBjb25zdCB0bSogX190bSwKICAgICAgICAg IGNvbnN0IF9DaGFyVCogX19iZWcsIGNvbnN0IF9DaGFyVCogX19lbmQpIGNvbnN0OwoKICAgICAg aXRlcl90eXBlCiAgICAgIHB1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19pbywgY2hhcl90 eXBlIF9fZmlsbCwKICAgICAgICAgIGNvbnN0IHRtKiBfX3RtLCBjaGFyIF9fZm9ybWF0LCBjaGFy IF9fbW9kID0gMCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fcHV0KF9fcywgX19pbywg X19maWxsLCBfX3RtLCBfX2Zvcm1hdCwgX19tb2QpOyB9CgogICAgcHJvdGVjdGVkOgogICAgICB2 aXJ0dWFsCiAgICAgIH50aW1lX3B1dCgpCiAgICAgIHsgfQoKICAgICAgdmlydHVhbCBpdGVyX3R5 cGUKICAgICAgZG9fcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUg X19maWxsLCBjb25zdCB0bSogX190bSwKICAgICAgICAgICAgIGNoYXIgX19mb3JtYXQsIGNoYXIg X19tb2QpIGNvbnN0OwogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt ZSBfT3V0SXRlcj4KICAgIGxvY2FsZTo6aWQgdGltZV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46Omlk OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgY2xh c3MgdGltZV9wdXRfYnluYW1lIDogcHVibGljIHRpbWVfcHV0PF9DaGFyVCwgX091dEl0ZXI+CiAg ICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5 cGVkZWYgX091dEl0ZXIgaXRlcl90eXBlOwoKICAgICAgZXhwbGljaXQKICAgICAgdGltZV9wdXRf YnluYW1lKGNvbnN0IGNoYXIqICwgc2l6ZV90IF9fcmVmcyA9IDApCiAgICAgIDogdGltZV9wdXQ8 X0NoYXJULCBfT3V0SXRlcj4oX19yZWZzKQogICAgICB7IH07CgogICAgcHJvdGVjdGVkOgogICAg ICB2aXJ0dWFsCiAgICAgIH50aW1lX3B1dF9ieW5hbWUoKSB7IH0KICAgIH07CgoKICBjbGFzcyBt b25leV9iYXNlCiAgewogIHB1YmxpYzoKICAgIGVudW0gcGFydCB7IG5vbmUsIHNwYWNlLCBzeW1i b2wsIHNpZ24sIHZhbHVlIH07CiAgICBzdHJ1Y3QgcGF0dGVybiB7IGNoYXIgZmllbGRbNF07IH07 CgogICAgc3RhdGljIGNvbnN0IHBhdHRlcm4gX1NfZGVmYXVsdF9wYXR0ZXJuOwoKCgogICAgc3Rh dGljIHBhdHRlcm4KICAgIF9TX2NvbnN0cnVjdF9wYXR0ZXJuKGNoYXIgX19wcmVjZWRlcywgY2hh ciBfX3NwYWNlLCBjaGFyIF9fcG9zbik7CiAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU LCBib29sIF9JbnRsPgogICAgY2xhc3MgbW9uZXlwdW5jdCA6IHB1YmxpYyBsb2NhbGU6OmZhY2V0 LCBwdWJsaWMgbW9uZXlfYmFzZQogICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfQ2hh clQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQ+IHN0cmluZ190 eXBlOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaW50bCA9IF9JbnRsOwogICAgICBzdGF0aWMg bG9jYWxlOjppZCBpZDsKCiAgICBwcml2YXRlOgogICAgICBjb25zdCBjaGFyKiBfTV9ncm91cGlu ZzsKICAgICAgY2hhcl90eXBlIF9NX2RlY2ltYWxfcG9pbnQ7CiAgICAgIGNoYXJfdHlwZSBfTV90 aG91c2FuZHNfc2VwOwogICAgICBjb25zdCBjaGFyX3R5cGUqIF9NX2N1cnJfc3ltYm9sOwogICAg ICBjb25zdCBjaGFyX3R5cGUqIF9NX3Bvc2l0aXZlX3NpZ247CiAgICAgIGNvbnN0IGNoYXJfdHlw ZSogX01fbmVnYXRpdmVfc2lnbjsKICAgICAgaW50IF9NX2ZyYWNfZGlnaXRzOwogICAgICBwYXR0 ZXJuIF9NX3Bvc19mb3JtYXQ7CiAgICAgIHBhdHRlcm4gX01fbmVnX2Zvcm1hdDsKCiAgICBwdWJs aWM6CiAgICAgIGV4cGxpY2l0CiAgICAgIG1vbmV5cHVuY3Qoc2l6ZV90IF9fcmVmcyA9IDApIDog bG9jYWxlOjpmYWNldChfX3JlZnMpCiAgICAgIHsgX01faW5pdGlhbGl6ZV9tb25leXB1bmN0KCk7 IH0KCiAgICAgIGV4cGxpY2l0CiAgICAgIG1vbmV5cHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MsIGNv bnN0IGNoYXIqIF9fcywgc2l6ZV90IF9fcmVmcyA9IDApCiAgICAgIDogbG9jYWxlOjpmYWNldChf X3JlZnMpCiAgICAgIHsgX01faW5pdGlhbGl6ZV9tb25leXB1bmN0KF9fY2xvYywgX19zKTsgfQoK ICAgICAgY2hhcl90eXBlCiAgICAgIGRlY2ltYWxfcG9pbnQoKSBjb25zdAogICAgICB7IHJldHVy biB0aGlzLT5kb19kZWNpbWFsX3BvaW50KCk7IH0KCiAgICAgIGNoYXJfdHlwZQogICAgICB0aG91 c2FuZHNfc2VwKCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fdGhvdXNhbmRzX3NlcCgp OyB9CgogICAgICBzdHJpbmcKICAgICAgZ3JvdXBpbmcoKSBjb25zdAogICAgICB7IHJldHVybiB0 aGlzLT5kb19ncm91cGluZygpOyB9CgogICAgICBzdHJpbmdfdHlwZQogICAgICBjdXJyX3N5bWJv bCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2N1cnJfc3ltYm9sKCk7IH0KCiAgICAg IHN0cmluZ190eXBlCiAgICAgIHBvc2l0aXZlX3NpZ24oKSBjb25zdAogICAgICB7IHJldHVybiB0 aGlzLT5kb19wb3NpdGl2ZV9zaWduKCk7IH0KCiAgICAgIHN0cmluZ190eXBlCiAgICAgIG5lZ2F0 aXZlX3NpZ24oKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19uZWdhdGl2ZV9zaWduKCk7 IH0KCiAgICAgIGludAogICAgICBmcmFjX2RpZ2l0cygpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRo aXMtPmRvX2ZyYWNfZGlnaXRzKCk7IH0KCiAgICAgIHBhdHRlcm4KICAgICAgcG9zX2Zvcm1hdCgp IGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3Bvc19mb3JtYXQoKTsgfQoKICAgICAgcGF0 dGVybgogICAgICBuZWdfZm9ybWF0KCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fbmVn X2Zvcm1hdCgpOyB9CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH5tb25leXB1 bmN0KCk7CgogICAgICB2aXJ0dWFsIGNoYXJfdHlwZQogICAgICBkb19kZWNpbWFsX3BvaW50KCkg Y29uc3QKICAgICAgeyByZXR1cm4gX01fZGVjaW1hbF9wb2ludDsgfQoKICAgICAgdmlydHVhbCBj aGFyX3R5cGUKICAgICAgZG9fdGhvdXNhbmRzX3NlcCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9N X3Rob3VzYW5kc19zZXA7IH0KCiAgICAgIHZpcnR1YWwgc3RyaW5nCiAgICAgIGRvX2dyb3VwaW5n KCkgY29uc3QKICAgICAgeyByZXR1cm4gX01fZ3JvdXBpbmc7IH0KCiAgICAgIHZpcnR1YWwgc3Ry aW5nX3R5cGUKICAgICAgZG9fY3Vycl9zeW1ib2woKSBjb25zdAogICAgICB7IHJldHVybiBfTV9j dXJyX3N5bWJvbDsgfQoKICAgICAgdmlydHVhbCBzdHJpbmdfdHlwZQogICAgICBkb19wb3NpdGl2 ZV9zaWduKCkgY29uc3QKICAgICAgeyByZXR1cm4gX01fcG9zaXRpdmVfc2lnbjsgfQoKICAgICAg dmlydHVhbCBzdHJpbmdfdHlwZQogICAgICBkb19uZWdhdGl2ZV9zaWduKCkgY29uc3QKICAgICAg eyByZXR1cm4gX01fbmVnYXRpdmVfc2lnbjsgfQoKICAgICAgdmlydHVhbCBpbnQKICAgICAgZG9f ZnJhY19kaWdpdHMoKSBjb25zdAogICAgICB7IHJldHVybiBfTV9mcmFjX2RpZ2l0czsgfQoKICAg ICAgdmlydHVhbCBwYXR0ZXJuCiAgICAgIGRvX3Bvc19mb3JtYXQoKSBjb25zdAogICAgICB7IHJl dHVybiBfTV9wb3NfZm9ybWF0OyB9CgogICAgICB2aXJ0dWFsIHBhdHRlcm4KICAgICAgZG9fbmVn X2Zvcm1hdCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX25lZ19mb3JtYXQ7IH0KCgogICAgICAg dm9pZAogICAgICAgX01faW5pdGlhbGl6ZV9tb25leXB1bmN0KF9fY19sb2NhbGUgX19jbG9jID0g X19udWxsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIF9fbmFt ZSA9IF9fbnVsbCk7CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIGJvb2wgX0lu dGw+CiAgICBsb2NhbGU6OmlkIG1vbmV5cHVuY3Q8X0NoYXJULCBfSW50bD46OmlkOwoKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIGJvb2wgX0ludGw+CiAgICBjb25zdCBib29sIG1vbmV5cHVu Y3Q8X0NoYXJULCBfSW50bD46OmludGw7CgogIHRlbXBsYXRlPD4KICAgIG1vbmV5cHVuY3Q8Y2hh ciwgdHJ1ZT46On5tb25leXB1bmN0KCk7CgogIHRlbXBsYXRlPD4KICAgIG1vbmV5cHVuY3Q8Y2hh ciwgZmFsc2U+Ojp+bW9uZXlwdW5jdCgpOwoKICB0ZW1wbGF0ZTw+CiAgICB2b2lkCiAgICBtb25l eXB1bmN0PGNoYXIsIHRydWU+OjpfTV9pbml0aWFsaXplX21vbmV5cHVuY3QoX19jX2xvY2FsZSwg Y29uc3QgY2hhciopOwoKICB0ZW1wbGF0ZTw+CiAgICB2b2lkCiAgICBtb25leXB1bmN0PGNoYXIs IGZhbHNlPjo6X01faW5pdGlhbGl6ZV9tb25leXB1bmN0KF9fY19sb2NhbGUsIGNvbnN0IGNoYXIq KTsKCgogIHRlbXBsYXRlPD4KICAgIG1vbmV5cHVuY3Q8d2NoYXJfdCwgdHJ1ZT46On5tb25leXB1 bmN0KCk7CgogIHRlbXBsYXRlPD4KICAgIG1vbmV5cHVuY3Q8d2NoYXJfdCwgZmFsc2U+Ojp+bW9u ZXlwdW5jdCgpOwoKICB0ZW1wbGF0ZTw+CiAgICB2b2lkCiAgICBtb25leXB1bmN0PHdjaGFyX3Qs IHRydWU+OjpfTV9pbml0aWFsaXplX21vbmV5cHVuY3QoX19jX2xvY2FsZSwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKik7 CgogIHRlbXBsYXRlPD4KICAgIHZvaWQKICAgIG1vbmV5cHVuY3Q8d2NoYXJfdCwgZmFsc2U+Ojpf TV9pbml0aWFsaXplX21vbmV5cHVuY3QoX19jX2xvY2FsZSwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciopOwoKCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0NoYXJULCBib29sIF9JbnRsPgogICAgY2xhc3MgbW9uZXlwdW5jdF9i eW5hbWUgOiBwdWJsaWMgbW9uZXlwdW5jdDxfQ2hhclQsIF9JbnRsPgogICAgewogICAgICBfX2Nf bG9jYWxlIF9NX2NfbG9jYWxlX21vbmV5cHVuY3Q7CgogICAgcHVibGljOgogICAgICB0eXBlZGVm IF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVD4gc3Ry aW5nX3R5cGU7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpbnRsID0gX0ludGw7CgogICAgICBl eHBsaWNpdAogICAgICBtb25leXB1bmN0X2J5bmFtZShjb25zdCBjaGFyKiBfX3MsIHNpemVfdCBf X3JlZnMgPSAwKQogICAgICA6IG1vbmV5cHVuY3Q8X0NoYXJULCBfSW50bD4oX19yZWZzKQogICAg ICB7CiAgICAgICAgX1NfY3JlYXRlX2NfbG9jYWxlKF9NX2NfbG9jYWxlX21vbmV5cHVuY3QsIF9f cyk7CiAgICAgICAgX01faW5pdGlhbGl6ZV9tb25leXB1bmN0KF9NX2NfbG9jYWxlX21vbmV5cHVu Y3QpOwogICAgICB9CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH5tb25leXB1 bmN0X2J5bmFtZSgpCiAgICAgIHsgX1NfZGVzdHJveV9jX2xvY2FsZShfTV9jX2xvY2FsZV9tb25l eXB1bmN0KTsgfQogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCBib29sIF9JbnRs PgogICAgY29uc3QgYm9vbCBtb25leXB1bmN0X2J5bmFtZTxfQ2hhclQsIF9JbnRsPjo6aW50bDsK CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgY2xhc3Mg bW9uZXlfZ2V0IDogcHVibGljIGxvY2FsZTo6ZmFjZXQKICAgIHsKICAgIHB1YmxpYzoKCiAgICAg IHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBfSW5JdGVyIGl0ZXJfdHlw ZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJUPiBzdHJpbmdfdHlwZTsKCiAgICAg IHN0YXRpYyBsb2NhbGU6OmlkIGlkOwoKICAgICAgZXhwbGljaXQKICAgICAgbW9uZXlfZ2V0KHNp emVfdCBfX3JlZnMgPSAwKSA6IGxvY2FsZTo6ZmFjZXQoX19yZWZzKSB7IH0KCiAgICAgIGl0ZXJf dHlwZQogICAgICBnZXQoaXRlcl90eXBlIF9fcywgaXRlcl90eXBlIF9fZW5kLCBib29sIF9faW50 bCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGxv bmcgZG91YmxlJiBfX3VuaXRzKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19nZXQoX19z LCBfX2VuZCwgX19pbnRsLCBfX2lvLCBfX2VyciwgX191bml0cyk7IH0KCiAgICAgIGl0ZXJfdHlw ZQogICAgICBnZXQoaXRlcl90eXBlIF9fcywgaXRlcl90eXBlIF9fZW5kLCBib29sIF9faW50bCwg aW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHN0cmlu Z190eXBlJiBfX2RpZ2l0cykgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZ2V0KF9fcywg X19lbmQsIF9faW50bCwgX19pbywgX19lcnIsIF9fZGlnaXRzKTsgfQoKICAgIHByb3RlY3RlZDoK ICAgICAgdmlydHVhbAogICAgICB+bW9uZXlfZ2V0KCkgeyB9CgogICAgICB2aXJ0dWFsIGl0ZXJf dHlwZQogICAgICBkb19nZXQoaXRlcl90eXBlIF9fcywgaXRlcl90eXBlIF9fZW5kLCBib29sIF9f aW50bCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19l cnIsIGxvbmcgZG91YmxlJiBfX3VuaXRzKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBl CiAgICAgIGRvX2dldChpdGVyX3R5cGUgX19zLCBpdGVyX3R5cGUgX19lbmQsIGJvb2wgX19pbnRs LCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2Vyciwg c3RyaW5nX3R5cGUmIF9fZGlnaXRzKSBjb25zdDsKICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1l IF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIGxvY2FsZTo6aWQgbW9uZXlfZ2V0PF9DaGFy VCwgX0luSXRlcj46OmlkOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9P dXRJdGVyPgogICAgY2xhc3MgbW9uZXlfcHV0IDogcHVibGljIGxvY2FsZTo6ZmFjZXQKICAgIHsK ICAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVm IF9PdXRJdGVyIGl0ZXJfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJUPiBz dHJpbmdfdHlwZTsKCiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOwoKICAgICAgZXhwbGljaXQK ICAgICAgbW9uZXlfcHV0KHNpemVfdCBfX3JlZnMgPSAwKSA6IGxvY2FsZTo6ZmFjZXQoX19yZWZz KSB7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBwdXQoaXRlcl90eXBlIF9fcywgYm9vbCBfX2lu dGwsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgY2hhcl90eXBlIF9fZmlsbCwgbG9uZyBkb3Vi bGUgX191bml0cykgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fcHV0KF9fcywgX19pbnRs LCBfX2lvLCBfX2ZpbGwsIF9fdW5pdHMpOyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgcHV0KGl0 ZXJfdHlwZSBfX3MsIGJvb2wgX19pbnRsLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgIGNoYXJf dHlwZSBfX2ZpbGwsIGNvbnN0IHN0cmluZ190eXBlJiBfX2RpZ2l0cykgY29uc3QKICAgICAgeyBy ZXR1cm4gdGhpcy0+ZG9fcHV0KF9fcywgX19pbnRsLCBfX2lvLCBfX2ZpbGwsIF9fZGlnaXRzKTsg fQoKICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbAogICAgICB+bW9uZXlfcHV0KCkgeyB9Cgog ICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19wdXQoaXRlcl90eXBlIF9fcywgYm9vbCBf X2ludGwsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUgX19maWxsLAogICAgICAgICAgICAgbG9u ZyBkb3VibGUgX191bml0cykgY29uc3Q7CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBk b19wdXQoaXRlcl90eXBlIF9fcywgYm9vbCBfX2ludGwsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5 cGUgX19maWxsLAogICAgICAgICAgICAgY29uc3Qgc3RyaW5nX3R5cGUmIF9fZGlnaXRzKSBjb25z dDsKICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+ CiAgICBsb2NhbGU6OmlkIG1vbmV5X3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6aWQ7CgoKICBzdHJ1 Y3QgbWVzc2FnZXNfYmFzZQogIHsKICAgIHR5cGVkZWYgaW50IGNhdGFsb2c7CiAgfTsKCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgY2xhc3MgbWVzc2FnZXMgOiBwdWJsaWMgbG9jYWxl OjpmYWNldCwgcHVibGljIG1lc3NhZ2VzX2Jhc2UKICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5 cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJU PiBzdHJpbmdfdHlwZTsKCiAgICBwcm90ZWN0ZWQ6CgoKICAgICAgX19jX2xvY2FsZSBfTV9jX2xv Y2FsZV9tZXNzYWdlczsKCgogICAgICBjaGFyKiBfTV9uYW1lX21lc3NhZ2VzOwoKCiAgICBwdWJs aWM6CiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOwoKICAgICAgZXhwbGljaXQKICAgICAgbWVz c2FnZXMoc2l6ZV90IF9fcmVmcyA9IDApCiAgICAgIDogbG9jYWxlOjpmYWNldChfX3JlZnMpCiAg ICAgIHsKICAgICAgICBfTV9uYW1lX21lc3NhZ2VzID0gbmV3IGNoYXJbMl07CiAgICAgICAgc3Ry Y3B5KF9NX25hbWVfbWVzc2FnZXMsICJDIik7CiAgICAgICAgX01fY19sb2NhbGVfbWVzc2FnZXMg PSBfU19jX2xvY2FsZTsKICAgICAgfQoKCiAgICAgIGV4cGxpY2l0CiAgICAgIG1lc3NhZ2VzKF9f Y19sb2NhbGUgX19jbG9jLCBjb25zdCBjaGFyKiBfX3MsIHNpemVfdCBfX3JlZnMgPSAwKQogICAg ICA6IGxvY2FsZTo6ZmFjZXQoX19yZWZzKQogICAgICB7CiAgICAgICAgX01fbmFtZV9tZXNzYWdl cyA9IG5ldyBjaGFyW3N0cmxlbihfX3MpICsgMV07CiAgICAgICAgc3RyY3B5KF9NX25hbWVfbWVz c2FnZXMsIF9fcyk7CiAgICAgICAgX01fY19sb2NhbGVfbWVzc2FnZXMgPSBfU19jbG9uZV9jX2xv Y2FsZShfX2Nsb2MpOwogICAgICB9CgogICAgICBjYXRhbG9nCiAgICAgIG9wZW4oY29uc3QgYmFz aWNfc3RyaW5nPGNoYXI+JiBfX3MsIGNvbnN0IGxvY2FsZSYgX19sb2MpIGNvbnN0CiAgICAgIHsg cmV0dXJuIHRoaXMtPmRvX29wZW4oX19zLCBfX2xvYyk7IH0KCgogICAgICBjYXRhbG9nCiAgICAg IG9wZW4oY29uc3QgYmFzaWNfc3RyaW5nPGNoYXI+JiwgY29uc3QgbG9jYWxlJiwgY29uc3QgY2hh ciopIGNvbnN0OwoKICAgICAgc3RyaW5nX3R5cGUKICAgICAgZ2V0KGNhdGFsb2cgX19jLCBpbnQg X19zZXQsIGludCBfX21zZ2lkLCBjb25zdCBzdHJpbmdfdHlwZSYgX19zKSBjb25zdAogICAgICB7 IHJldHVybiB0aGlzLT5kb19nZXQoX19jLCBfX3NldCwgX19tc2dpZCwgX19zKTsgfQoKICAgICAg dm9pZAogICAgICBjbG9zZShjYXRhbG9nIF9fYykgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ ZG9fY2xvc2UoX19jKTsgfQoKICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbAogICAgICB+bWVz c2FnZXMoKQogICAgICAgewogICAgICAgICBkZWxldGUgW10gX01fbmFtZV9tZXNzYWdlczsKICAg ICAgICAgX1NfZGVzdHJveV9jX2xvY2FsZShfTV9jX2xvY2FsZV9tZXNzYWdlcyk7CiAgICAgICB9 CgogICAgICB2aXJ0dWFsIGNhdGFsb2cKICAgICAgZG9fb3Blbihjb25zdCBiYXNpY19zdHJpbmc8 Y2hhcj4mLCBjb25zdCBsb2NhbGUmKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgc3RyaW5nX3R5cGUK ICAgICAgZG9fZ2V0KGNhdGFsb2csIGludCwgaW50LCBjb25zdCBzdHJpbmdfdHlwZSYgX19kZmF1 bHQpIGNvbnN0OwoKICAgICAgdmlydHVhbCB2b2lkCiAgICAgIGRvX2Nsb3NlKGNhdGFsb2cpIGNv bnN0OwoKCiAgICAgIGNoYXIqCiAgICAgIF9NX2NvbnZlcnRfdG9fY2hhcihjb25zdCBzdHJpbmdf dHlwZSYgX19tc2cpIGNvbnN0CiAgICAgIHsKCiAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nh c3Q8Y2hhcio+KGNvbnN0X2Nhc3Q8X0NoYXJUKj4oX19tc2cuY19zdHIoKSkpOwogICAgICB9CgoK ICAgICAgc3RyaW5nX3R5cGUKICAgICAgX01fY29udmVydF9mcm9tX2NoYXIoY2hhciogX19tc2cp IGNvbnN0CiAgICAgIHsKCiAgICAgICAgc2l6ZV90IF9fbGVuID0gY2hhcl90cmFpdHM8Y2hhcj46 Omxlbmd0aChfX21zZykgLSAxOwojIDE3MzYgIi91c3IvaW5jbHVkZS9jKysvMy4yLjEvYml0cy9s b2NhbGVfZmFjZXRzLmgiIDMKICAgICAgICByZXR1cm4gc3RyaW5nX3R5cGUoKTsKICAgICAgfQog ICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGxvY2FsZTo6aWQgbWVzc2Fn ZXM8X0NoYXJUPjo6aWQ7CgoKICB0ZW1wbGF0ZTw+CiAgICBzdHJpbmcKICAgIG1lc3NhZ2VzPGNo YXI+Ojpkb19nZXQoY2F0YWxvZywgaW50LCBpbnQsIGNvbnN0IHN0cmluZyYpIGNvbnN0OwoKCiAg dGVtcGxhdGU8PgogICAgd3N0cmluZwogICAgbWVzc2FnZXM8d2NoYXJfdD46OmRvX2dldChjYXRh bG9nLCBpbnQsIGludCwgY29uc3Qgd3N0cmluZyYpIGNvbnN0OwoKCgojIDEgIi91c3IvaW5jbHVk ZS9jKysvMy4yLjEvaTM4Ni1wYy1saW51eC1nbnUvYml0cy9tZXNzYWdlc19tZW1iZXJzLmgiIDEg MwojIDM3ICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL2kzODYtcGMtbGludXgtZ251L2JpdHMvbWVz c2FnZXNfbWVtYmVycy5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgdHlwZW5h bWUgbWVzc2FnZXM8X0NoYXJUPjo6Y2F0YWxvZwogICAgbWVzc2FnZXM8X0NoYXJUPjo6b3Blbihj b25zdCBiYXNpY19zdHJpbmc8Y2hhcj4mIF9fcywgY29uc3QgbG9jYWxlJiBfX2xvYywKICAgICAg ICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciopIGNvbnN0CiAgICB7IHJldHVybiB0aGlz LT5kb19vcGVuKF9fcywgX19sb2MpOyB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAg ICB0eXBlbmFtZSBtZXNzYWdlczxfQ2hhclQ+OjpjYXRhbG9nCiAgICBtZXNzYWdlczxfQ2hhclQ+ Ojpkb19vcGVuKGNvbnN0IGJhc2ljX3N0cmluZzxjaGFyPiYsIGNvbnN0IGxvY2FsZSYpIGNvbnN0 CiAgICB7IHJldHVybiAwOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIHR5cGVu YW1lIG1lc3NhZ2VzPF9DaGFyVD46OnN0cmluZ190eXBlCiAgICBtZXNzYWdlczxfQ2hhclQ+Ojpk b19nZXQoY2F0YWxvZywgaW50LCBpbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u c3Qgc3RyaW5nX3R5cGUmIF9fZGZhdWx0KSBjb25zdAogICAgeyByZXR1cm4gX19kZmF1bHQ7IH0K CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgdm9pZAogICAgbWVzc2FnZXM8X0NoYXJU Pjo6ZG9fY2xvc2UoY2F0YWxvZykgY29uc3QKICAgIHsgfQojIDE3NTYgIi91c3IvaW5jbHVkZS9j KysvMy4yLjEvYml0cy9sb2NhbGVfZmFjZXRzLmgiIDIgMwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf Q2hhclQ+CiAgICBjbGFzcyBtZXNzYWdlc19ieW5hbWUgOiBwdWJsaWMgbWVzc2FnZXM8X0NoYXJU PgogICAgewogICAgcHVibGljOgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAg IHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVD4gc3RyaW5nX3R5cGU7CgogICAgICBleHBsaWNp dAogICAgICBtZXNzYWdlc19ieW5hbWUoY29uc3QgY2hhciogX19zLCBzaXplX3QgX19yZWZzID0g MCkKICAgICAgOiBtZXNzYWdlczxfQ2hhclQ+KF9fcmVmcykKICAgICAgewogICAgICAgIGRlbGV0 ZSBbXSBfTV9uYW1lX21lc3NhZ2VzOwogICAgICAgIF9NX25hbWVfbWVzc2FnZXMgPSBuZXcgY2hh cltzdHJsZW4oX19zKSArIDFdOwogICAgICAgIHN0cmNweShfTV9uYW1lX21lc3NhZ2VzLCBfX3Mp OwogICAgICAgIF9TX2Rlc3Ryb3lfY19sb2NhbGUoX01fY19sb2NhbGVfbWVzc2FnZXMpOwogICAg ICAgIF9TX2NyZWF0ZV9jX2xvY2FsZShfTV9jX2xvY2FsZV9tZXNzYWdlcywgX19zKTsKICAgICAg fQoKICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbAogICAgICB+bWVzc2FnZXNfYnluYW1lKCkK ICAgICAgeyB9CiAgICB9OwoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlu bGluZSBib29sCiAgICBpc3NwYWNlKF9DaGFyVCBfX2MsIGNvbnN0IGxvY2FsZSYgX19sb2MpCiAg ICB7IHJldHVybiB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKS5pcyhjdHlwZV9iYXNl OjpzcGFjZSwgX19jKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUg Ym9vbAogICAgaXNwcmludChfQ2hhclQgX19jLCBjb25zdCBsb2NhbGUmIF9fbG9jKQogICAgeyBy ZXR1cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYykuaXMoY3R5cGVfYmFzZTo6cHJp bnQsIF9fYyk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wK ICAgIGlzY250cmwoX0NoYXJUIF9fYywgY29uc3QgbG9jYWxlJiBfX2xvYykKICAgIHsgcmV0dXJu IHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpLmlzKGN0eXBlX2Jhc2U6OmNudHJsLCBf X2MpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAgICBp c3VwcGVyKF9DaGFyVCBfX2MsIGNvbnN0IGxvY2FsZSYgX19sb2MpCiAgICB7IHJldHVybiB1c2Vf ZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKS5pcyhjdHlwZV9iYXNlOjp1cHBlciwgX19jKTsg fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbCBpc2xvd2VyKF9D aGFyVCBfX2MsIGNvbnN0IGxvY2FsZSYgX19sb2MpCiAgICB7IHJldHVybiB1c2VfZmFjZXQ8Y3R5 cGU8X0NoYXJUPiA+KF9fbG9jKS5pcyhjdHlwZV9iYXNlOjpsb3dlciwgX19jKTsgfQoKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXNhbHBoYShfQ2hhclQg X19jLCBjb25zdCBsb2NhbGUmIF9fbG9jKQogICAgeyByZXR1cm4gdXNlX2ZhY2V0PGN0eXBlPF9D aGFyVD4gPihfX2xvYykuaXMoY3R5cGVfYmFzZTo6YWxwaGEsIF9fYyk7IH0KCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlzZGlnaXQoX0NoYXJUIF9fYywg Y29uc3QgbG9jYWxlJiBfX2xvYykKICAgIHsgcmV0dXJuIHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ ID4oX19sb2MpLmlzKGN0eXBlX2Jhc2U6OmRpZ2l0LCBfX2MpOyB9CgogIHRlbXBsYXRlPHR5cGVu YW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAgICBpc3B1bmN0KF9DaGFyVCBfX2MsIGNvbnN0 IGxvY2FsZSYgX19sb2MpCiAgICB7IHJldHVybiB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9f bG9jKS5pcyhjdHlwZV9iYXNlOjpwdW5jdCwgX19jKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf Q2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXN4ZGlnaXQoX0NoYXJUIF9fYywgY29uc3QgbG9j YWxlJiBfX2xvYykKICAgIHsgcmV0dXJuIHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2Mp LmlzKGN0eXBlX2Jhc2U6OnhkaWdpdCwgX19jKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh clQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXNhbG51bShfQ2hhclQgX19jLCBjb25zdCBsb2NhbGUm IF9fbG9jKQogICAgeyByZXR1cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYykuaXMo Y3R5cGVfYmFzZTo6YWxudW0sIF9fYyk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgog ICAgaW5saW5lIGJvb2wKICAgIGlzZ3JhcGgoX0NoYXJUIF9fYywgY29uc3QgbG9jYWxlJiBfX2xv YykKICAgIHsgcmV0dXJuIHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpLmlzKGN0eXBl X2Jhc2U6OmdyYXBoLCBfX2MpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlu bGluZSBfQ2hhclQKICAgIHRvdXBwZXIoX0NoYXJUIF9fYywgY29uc3QgbG9jYWxlJiBfX2xvYykK ICAgIHsgcmV0dXJuIHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpLnRvdXBwZXIoX19j KTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgX0NoYXJUCiAgICB0 b2xvd2VyKF9DaGFyVCBfX2MsIGNvbnN0IGxvY2FsZSYgX19sb2MpCiAgICB7IHJldHVybiB1c2Vf ZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKS50b2xvd2VyKF9fYyk7IH0KfQojIDQyICIvdXNy L2luY2x1ZGUvYysrLzMuMi4xL2JpdHMvYmFzaWNfaW9zLmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7 CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGNsYXNz IGJhc2ljX2lvcyA6IHB1YmxpYyBpb3NfYmFzZQogICAgewogICAgcHVibGljOgoKICAgICAgdHlw ZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6Omlu dF90eXBlIGludF90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6OnBvc190eXBl IHBvc190eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6Om9mZl90eXBlIG9mZl90 eXBlOwogICAgICB0eXBlZGVmIF9UcmFpdHMgdHJhaXRzX3R5cGU7CgoKICAgICAgdHlwZWRlZiBj dHlwZTxfQ2hhclQ+IF9fY3R5cGVfdHlwZTsKICAgICAgdHlwZWRlZiBvc3RyZWFtYnVmX2l0ZXJh dG9yPF9DaGFyVCwgX1RyYWl0cz4gX19vc3RyZWFtYnVmX2l0ZXI7CiAgICAgIHR5cGVkZWYgbnVt X3B1dDxfQ2hhclQsIF9fb3N0cmVhbWJ1Zl9pdGVyPiBfX251bXB1dF90eXBlOwogICAgICB0eXBl ZGVmIGlzdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJULCBfVHJhaXRzPiBfX2lzdHJlYW1idWZfaXRl cjsKICAgICAgdHlwZWRlZiBudW1fZ2V0PF9DaGFyVCwgX19pc3RyZWFtYnVmX2l0ZXI+IF9fbnVt Z2V0X3R5cGU7CgoKICAgIHByb3RlY3RlZDoKICAgICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9U cmFpdHM+KiBfTV90aWU7CiAgICAgIG11dGFibGUgY2hhcl90eXBlIF9NX2ZpbGw7CiAgICAgIG11 dGFibGUgYm9vbCBfTV9maWxsX2luaXQ7CiAgICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9U cmFpdHM+KiBfTV9zdHJlYW1idWY7CgoKICAgICAgY29uc3QgX19jdHlwZV90eXBlKiBfTV9mY3R5 cGU7CgogICAgICBjb25zdCBfX251bXB1dF90eXBlKiBfTV9mbnVtcHV0OwoKICAgICAgY29uc3Qg X19udW1nZXRfdHlwZSogX01fZm51bWdldDsKCiAgICBwdWJsaWM6CiAgICAgIG9wZXJhdG9yIHZv aWQqKCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZmFpbCgpID8gMCA6IGNvbnN0X2Nhc3Q8 YmFzaWNfaW9zKj4odGhpcyk7IH0KCiAgICAgIGJvb2wKICAgICAgb3BlcmF0b3IhKCkgY29uc3QK ICAgICAgeyByZXR1cm4gdGhpcy0+ZmFpbCgpOyB9CgogICAgICBpb3N0YXRlCiAgICAgIHJkc3Rh dGUoKSBjb25zdAogICAgICB7IHJldHVybiBfTV9zdHJlYW1idWZfc3RhdGU7IH0KCiAgICAgIHZv aWQKICAgICAgY2xlYXIoaW9zdGF0ZSBfX3N0YXRlID0gZ29vZGJpdCk7CgogICAgICB2b2lkCiAg ICAgIHNldHN0YXRlKGlvc3RhdGUgX19zdGF0ZSkKICAgICAgeyB0aGlzLT5jbGVhcih0aGlzLT5y ZHN0YXRlKCkgfCBfX3N0YXRlKTsgfQoKICAgICAgYm9vbAogICAgICBnb29kKCkgY29uc3QKICAg ICAgeyByZXR1cm4gdGhpcy0+cmRzdGF0ZSgpID09IDA7IH0KCiAgICAgIGJvb2wKICAgICAgZW9m KCkgY29uc3QKICAgICAgeyByZXR1cm4gKHRoaXMtPnJkc3RhdGUoKSAmIGVvZmJpdCkgIT0gMDsg fQoKICAgICAgYm9vbAogICAgICBmYWlsKCkgY29uc3QKICAgICAgeyByZXR1cm4gKHRoaXMtPnJk c3RhdGUoKSAmIChiYWRiaXQgfCBmYWlsYml0KSkgIT0gMDsgfQoKICAgICAgYm9vbAogICAgICBi YWQoKSBjb25zdAogICAgICB7IHJldHVybiAodGhpcy0+cmRzdGF0ZSgpICYgYmFkYml0KSAhPSAw OyB9CgogICAgICBpb3N0YXRlCiAgICAgIGV4Y2VwdGlvbnMoKSBjb25zdAogICAgICB7IHJldHVy biBfTV9leGNlcHRpb247IH0KCiAgICAgIHZvaWQKICAgICAgZXhjZXB0aW9ucyhpb3N0YXRlIF9f ZXhjZXB0KQogICAgICB7CiAgICAgICAgX01fZXhjZXB0aW9uID0gX19leGNlcHQ7CiAgICAgICAg dGhpcy0+Y2xlYXIoX01fc3RyZWFtYnVmX3N0YXRlKTsKICAgICAgfQoKCiAgICAgIGV4cGxpY2l0 CiAgICAgIGJhc2ljX2lvcyhiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiogX19zYikg OiBpb3NfYmFzZSgpCiAgICAgIHsgdGhpcy0+aW5pdChfX3NiKTsgfQoKICAgICAgdmlydHVhbAog ICAgICB+YmFzaWNfaW9zKCkgeyB9CgoKICAgICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFp dHM+KgogICAgICB0aWUoKSBjb25zdAogICAgICB7IHJldHVybiBfTV90aWU7IH0KCiAgICAgIGJh c2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPioKICAgICAgdGllKGJhc2ljX29zdHJlYW08X0No YXJULCBfVHJhaXRzPiogX190aWVzdHIpCiAgICAgIHsKICAgICAgICBiYXNpY19vc3RyZWFtPF9D aGFyVCwgX1RyYWl0cz4qIF9fb2xkID0gX01fdGllOwogICAgICAgIF9NX3RpZSA9IF9fdGllc3Ry OwogICAgICAgIHJldHVybiBfX29sZDsKICAgICAgfQoKICAgICAgYmFzaWNfc3RyZWFtYnVmPF9D aGFyVCwgX1RyYWl0cz4qCiAgICAgIHJkYnVmKCkgY29uc3QKICAgICAgeyByZXR1cm4gX01fc3Ry ZWFtYnVmOyB9CgogICAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPioKICAgICAg cmRidWYoYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4qIF9fc2IpOwoKICAgICAgYmFz aWNfaW9zJgogICAgICBjb3B5Zm10KGNvbnN0IGJhc2ljX2lvcyYgX19yaHMpOwoKICAgICAgY2hh cl90eXBlCiAgICAgIGZpbGwoKSBjb25zdAogICAgICB7CiAgICAgICAgaWYgKCFfTV9maWxsX2lu aXQpCiAgICAgICAgICB7CiAgICAgICAgICAgIF9NX2ZpbGwgPSB0aGlzLT53aWRlbignICcpOwog ICAgICAgICAgICBfTV9maWxsX2luaXQgPSB0cnVlOwogICAgICAgICAgfQogICAgICAgIHJldHVy biBfTV9maWxsOwogICAgICB9CgogICAgICBjaGFyX3R5cGUKICAgICAgZmlsbChjaGFyX3R5cGUg X19jaCkKICAgICAgewogICAgICAgIGNoYXJfdHlwZSBfX29sZCA9IHRoaXMtPmZpbGwoKTsKICAg ICAgICBfTV9maWxsID0gX19jaDsKICAgICAgICByZXR1cm4gX19vbGQ7CiAgICAgIH0KCgogICAg ICBsb2NhbGUKICAgICAgaW1idWUoY29uc3QgbG9jYWxlJiBfX2xvYyk7CgogICAgICBjaGFyCiAg ICAgIG5hcnJvdyhjaGFyX3R5cGUgX19jLCBjaGFyIF9fZGZhdWx0KSBjb25zdDsKCiAgICAgIGNo YXJfdHlwZQogICAgICB3aWRlbihjaGFyIF9fYykgY29uc3Q7CgogICAgcHJvdGVjdGVkOgoKICAg ICAgYmFzaWNfaW9zKCkgOiBpb3NfYmFzZSgpCiAgICAgIHsgfQoKICAgICAgdm9pZAogICAgICBp bml0KGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+KiBfX3NiKTsKCiAgICAgIGJvb2wK ICAgICAgX01fY2hlY2tfZmFjZXQoY29uc3QgbG9jYWxlOjpmYWNldCogX19mKSBjb25zdAogICAg ICB7CiAgICAgICAgaWYgKCFfX2YpCiAgICAgICAgICBfX3Rocm93X2JhZF9jYXN0KCk7CiAgICAg ICAgcmV0dXJuIHRydWU7CiAgICAgIH0KCiAgICAgIHZvaWQKICAgICAgX01fY2FjaGVfZmFjZXRz KGNvbnN0IGxvY2FsZSYgX19sb2MpOwogICAgfTsKfQoKCgojIDEgIi91c3IvaW5jbHVkZS9jKysv My4yLjEvYml0cy9iYXNpY19pb3MudGNjIiAxIDMKIyAzNCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIu MS9iaXRzL2Jhc2ljX2lvcy50Y2MiIDMKCm5hbWVzcGFjZSBzdGQKewogIHRlbXBsYXRlPHR5cGVu YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIHZvaWQKICAgIGJhc2ljX2lvczxfQ2hh clQsIF9UcmFpdHM+OjpjbGVhcihpb3N0YXRlIF9fc3RhdGUpCiAgICB7CiAgICAgIGlmICh0aGlz LT5yZGJ1ZigpKQogICAgICAgIF9NX3N0cmVhbWJ1Zl9zdGF0ZSA9IF9fc3RhdGU7CiAgICAgIGVs c2UKICAgICAgICAgIF9NX3N0cmVhbWJ1Zl9zdGF0ZSA9IF9fc3RhdGUgfCBiYWRiaXQ7CiAgICAg IGlmICgodGhpcy0+cmRzdGF0ZSgpICYgdGhpcy0+ZXhjZXB0aW9ucygpKSkKICAgICAgICBfX3Ro cm93X2lvc19mYWlsdXJlKCJiYXNpY19pb3M6OmNsZWFyKGlvc3RhdGUpIGNhdXNlZCBleGNlcHRp b24iKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz PgogICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4qCiAgICBiYXNpY19pb3M8X0No YXJULCBfVHJhaXRzPjo6cmRidWYoYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4qIF9f c2IpCiAgICB7CiAgICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+KiBfX29sZCA9 IF9NX3N0cmVhbWJ1ZjsKICAgICAgX01fc3RyZWFtYnVmID0gX19zYjsKICAgICAgdGhpcy0+Y2xl YXIoKTsKICAgICAgcmV0dXJuIF9fb2xkOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh clQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pb3M8X0NoYXJULCBfVHJhaXRzPiYKICAg IGJhc2ljX2lvczxfQ2hhclQsIF9UcmFpdHM+Ojpjb3B5Zm10KGNvbnN0IGJhc2ljX2lvcyYgX19y aHMpCiAgICB7CgoKCgogICAgICBfV29yZHMqIF9fd29yZHMgPSAoX19yaHMuX01fd29yZF9zaXpl IDw9IF9TX2xvY2FsX3dvcmRfc2l6ZSkgPwogICAgICAgIF9NX2xvY2FsX3dvcmQgOiBuZXcgX1dv cmRzW19fcmhzLl9NX3dvcmRfc2l6ZV07CgoKICAgICAgX0NhbGxiYWNrX2xpc3QqIF9fY2IgPSBf X3Jocy5fTV9jYWxsYmFja3M7CiAgICAgIGlmIChfX2NiKQogICAgICAgIF9fY2ItPl9NX2FkZF9y ZWZlcmVuY2UoKTsKICAgICAgX01fY2FsbF9jYWxsYmFja3MoZXJhc2VfZXZlbnQpOwogICAgICBp ZiAoX01fd29yZCAhPSBfTV9sb2NhbF93b3JkKQogICAgICAgIHsKICAgICAgICAgIGRlbGV0ZSBb XSBfTV93b3JkOwogICAgICAgICAgX01fd29yZCA9IDA7CiAgICAgICAgfQogICAgICBfTV9kaXNw b3NlX2NhbGxiYWNrcygpOwoKICAgICAgX01fY2FsbGJhY2tzID0gX19jYjsKICAgICAgZm9yIChp bnQgX19pID0gMDsgX19pIDwgX19yaHMuX01fd29yZF9zaXplOyArK19faSkKICAgICAgICBfX3dv cmRzW19faV0gPSBfX3Jocy5fTV93b3JkW19faV07CiAgICAgIGlmIChfTV93b3JkICE9IF9NX2xv Y2FsX3dvcmQpCiAgICAgICAgewogICAgICAgICAgZGVsZXRlIFtdIF9NX3dvcmQ7CiAgICAgICAg ICBfTV93b3JkID0gMDsKICAgICAgICB9CiAgICAgIF9NX3dvcmQgPSBfX3dvcmRzOwogICAgICBf TV93b3JkX3NpemUgPSBfX3Jocy5fTV93b3JkX3NpemU7CgogICAgICB0aGlzLT5mbGFncyhfX3Jo cy5mbGFncygpKTsKICAgICAgdGhpcy0+d2lkdGgoX19yaHMud2lkdGgoKSk7CiAgICAgIHRoaXMt PnByZWNpc2lvbihfX3Jocy5wcmVjaXNpb24oKSk7CiAgICAgIHRoaXMtPnRpZShfX3Jocy50aWUo KSk7CiAgICAgIHRoaXMtPmZpbGwoX19yaHMuZmlsbCgpKTsKCiAgICAgIHRoaXMtPmV4Y2VwdGlv bnMoX19yaHMuZXhjZXB0aW9ucygpKTsKCiAgICAgIF9NX2NhbGxfY2FsbGJhY2tzKGNvcHlmbXRf ZXZlbnQpOwogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D aGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGNoYXIKICAgIGJhc2ljX2lvczxfQ2hhclQsIF9U cmFpdHM+OjpuYXJyb3coY2hhcl90eXBlIF9fYywgY2hhciBfX2RmYXVsdCkgY29uc3QKICAgIHsK ICAgICAgY2hhciBfX3JldCA9IF9fZGZhdWx0OwogICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01f ZmN0eXBlKSkKICAgICAgICBfX3JldCA9IF9NX2ZjdHlwZS0+bmFycm93KF9fYywgX19kZmF1bHQp OwogICAgICByZXR1cm4gX19yZXQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg dHlwZW5hbWUgX1RyYWl0cz4KICAgIF9DaGFyVAogICAgYmFzaWNfaW9zPF9DaGFyVCwgX1RyYWl0 cz46OndpZGVuKGNoYXIgX19jKSBjb25zdAogICAgewogICAgICBjaGFyX3R5cGUgX19yZXQgPSBj aGFyX3R5cGUoKTsKICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZjdHlwZSkpCiAgICAgICAg X19yZXQgPSBfTV9mY3R5cGUtPndpZGVuKF9fYyk7CiAgICAgIHJldHVybiBfX3JldDsKICAgIH0K CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGxvY2Fs ZQogICAgYmFzaWNfaW9zPF9DaGFyVCwgX1RyYWl0cz46OmltYnVlKGNvbnN0IGxvY2FsZSYgX19s b2MpCiAgICB7CiAgICAgIGxvY2FsZSBfX29sZCh0aGlzLT5nZXRsb2MoKSk7CiAgICAgIGlvc19i YXNlOjppbWJ1ZShfX2xvYyk7CiAgICAgIF9NX2NhY2hlX2ZhY2V0cyhfX2xvYyk7CiAgICAgIGlm ICh0aGlzLT5yZGJ1ZigpICE9IDApCiAgICAgICAgdGhpcy0+cmRidWYoKS0+cHViaW1idWUoX19s b2MpOwogICAgICByZXR1cm4gX19vbGQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy VCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIHZvaWQKICAgIGJhc2ljX2lvczxfQ2hhclQsIF9UcmFp dHM+Ojppbml0KGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+KiBfX3NiKQogICAgewoK ICAgICAgaW9zX2Jhc2U6Ol9NX2luaXQoKTsKICAgICAgX01fY2FjaGVfZmFjZXRzKF9NX2lvc19s b2NhbGUpOwogICAgICBfTV90aWUgPSAwOwojIDE1OSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9i aXRzL2Jhc2ljX2lvcy50Y2MiIDMKICAgICAgX01fZmlsbCA9IF9DaGFyVCgpOwogICAgICBfTV9m aWxsX2luaXQgPSBmYWxzZTsKCiAgICAgIF9NX2V4Y2VwdGlvbiA9IGdvb2RiaXQ7CiAgICAgIF9N X3N0cmVhbWJ1ZiA9IF9fc2I7CiAgICAgIF9NX3N0cmVhbWJ1Zl9zdGF0ZSA9IF9fc2IgPyBnb29k Yml0IDogYmFkYml0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l IF9UcmFpdHM+CiAgICB2b2lkCiAgICBiYXNpY19pb3M8X0NoYXJULCBfVHJhaXRzPjo6X01fY2Fj aGVfZmFjZXRzKGNvbnN0IGxvY2FsZSYgX19sb2MpCiAgICB7CiAgICAgIGlmIChoYXNfZmFjZXQ8 X19jdHlwZV90eXBlPihfX2xvYykpCiAgICAgICAgX01fZmN0eXBlID0gJnVzZV9mYWNldDxfX2N0 eXBlX3R5cGU+KF9fbG9jKTsKICAgICAgZWxzZQogICAgICAgIF9NX2ZjdHlwZSA9IDA7CgogICAg ICBpZiAoaGFzX2ZhY2V0PF9fbnVtcHV0X3R5cGU+KF9fbG9jKSkKICAgICAgICBfTV9mbnVtcHV0 ID0gJnVzZV9mYWNldDxfX251bXB1dF90eXBlPihfX2xvYyk7CiAgICAgIGVsc2UKICAgICAgICBf TV9mbnVtcHV0ID0gMDsKICAgICAgaWYgKGhhc19mYWNldDxfX251bWdldF90eXBlPihfX2xvYykp CiAgICAgICAgX01fZm51bWdldCA9ICZ1c2VfZmFjZXQ8X19udW1nZXRfdHlwZT4oX19sb2MpOwog ICAgICBlbHNlCiAgICAgICAgX01fZm51bWdldCA9IDA7CiAgICB9CgoKCgogIGV4dGVybiB0ZW1w bGF0ZSBjbGFzcyBiYXNpY19pb3M8Y2hhcj47CgoKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgYmFz aWNfaW9zPHdjaGFyX3Q+OwoKfQojIDIwOCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9iaXRzL2Jh c2ljX2lvcy5oIiAyIDMKIyA1MiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9pb3MiIDIgMwojIDQ2 ICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL29zdHJlYW0iIDIgMwoKbmFtZXNwYWNlIHN0ZAp7Cgog IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGNsYXNzIGJh c2ljX29zdHJlYW0gOiB2aXJ0dWFsIHB1YmxpYyBiYXNpY19pb3M8X0NoYXJULCBfVHJhaXRzPgog ICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0 eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6OmludF90eXBlIGludF90eXBlOwogICAgICB0eXBlZGVm IHR5cGVuYW1lIF9UcmFpdHM6OnBvc190eXBlIHBvc190eXBlOwogICAgICB0eXBlZGVmIHR5cGVu YW1lIF9UcmFpdHM6Om9mZl90eXBlIG9mZl90eXBlOwogICAgICB0eXBlZGVmIF9UcmFpdHMgdHJh aXRzX3R5cGU7CgoKICAgICAgdHlwZWRlZiBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRz PiBfX3N0cmVhbWJ1Zl90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX2lvczxfQ2hhclQsIF9UcmFp dHM+IF9faW9zX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFp dHM+IF9fb3N0cmVhbV90eXBlOwogICAgICB0eXBlZGVmIG9zdHJlYW1idWZfaXRlcmF0b3I8X0No YXJULCBfVHJhaXRzPiBfX29zdHJlYW1idWZfaXRlcjsKICAgICAgdHlwZWRlZiBudW1fcHV0PF9D aGFyVCwgX19vc3RyZWFtYnVmX2l0ZXI+IF9fbnVtcHV0X3R5cGU7CiAgICAgIHR5cGVkZWYgY3R5 cGU8X0NoYXJUPiBfX2N0eXBlX3R5cGU7CgoKICAgICAgZXhwbGljaXQKICAgICAgYmFzaWNfb3N0 cmVhbShfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiKQogICAgICB7IHRoaXMtPmluaXQoX19zYik7IH0K CiAgICAgIHZpcnR1YWwKICAgICAgfmJhc2ljX29zdHJlYW0oKSB7IH0KCgogICAgICBjbGFzcyBz ZW50cnk7CiAgICAgIGZyaWVuZCBjbGFzcyBzZW50cnk7CgoKCiAgICAgIF9fb3N0cmVhbV90eXBl JgogICAgICBvcGVyYXRvcjw8KF9fb3N0cmVhbV90eXBlJiAoKl9fcGYpKF9fb3N0cmVhbV90eXBl JikpOwoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPDwoX19pb3NfdHlwZSYg KCpfX3BmKShfX2lvc190eXBlJikpOwoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJh dG9yPDwoaW9zX2Jhc2UmICgqX19wZikgKGlvc19iYXNlJikpOwoKCiAgICAgIF9fb3N0cmVhbV90 eXBlJgogICAgICBvcGVyYXRvcjw8KGxvbmcgX19uKTsKCiAgICAgIF9fb3N0cmVhbV90eXBlJgog ICAgICBvcGVyYXRvcjw8KHVuc2lnbmVkIGxvbmcgX19uKTsKCiAgICAgIF9fb3N0cmVhbV90eXBl JgogICAgICBvcGVyYXRvcjw8KGJvb2wgX19uKTsKCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAg ICBvcGVyYXRvcjw8KHNob3J0IF9fbikKICAgICAgewogICAgICAgIGlvc19iYXNlOjpmbXRmbGFn cyBfX2ZtdCA9IHRoaXMtPmZsYWdzKCkgJiBpb3NfYmFzZTo6YmFzZWZpZWxkOwogICAgICAgIGlm IChfX2ZtdCAmIGlvc19iYXNlOjpvY3QgfHwgX19mbXQgJiBpb3NfYmFzZTo6aGV4KQogICAgICAg ICAgcmV0dXJuIHRoaXMtPm9wZXJhdG9yPDwoc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4KICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9y dD4oX19uKSkpOwogICAgICAgIGVsc2UKICAgICAgICAgIHJldHVybiB0aGlzLT5vcGVyYXRvcjw8 KHN0YXRpY19jYXN0PGxvbmc+KF9fbikpOwogICAgICB9CgogICAgICBfX29zdHJlYW1fdHlwZSYK ICAgICAgb3BlcmF0b3I8PCh1bnNpZ25lZCBzaG9ydCBfX24pCiAgICAgIHsgcmV0dXJuIHRoaXMt Pm9wZXJhdG9yPDwoc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4oX19uKSk7IH0KCiAgICAgIF9f b3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8KGludCBfX24pCiAgICAgIHsKICAgICAgICBp b3NfYmFzZTo6Zm10ZmxhZ3MgX19mbXQgPSB0aGlzLT5mbGFncygpICYgaW9zX2Jhc2U6OmJhc2Vm aWVsZDsKICAgICAgICBpZiAoX19mbXQgJiBpb3NfYmFzZTo6b2N0IHx8IF9fZm10ICYgaW9zX2Jh c2U6OmhleCkKICAgICAgICAgIHJldHVybiB0aGlzLT5vcGVyYXRvcjw8KHN0YXRpY19jYXN0PHVu c2lnbmVkIGxvbmc+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RhdGljX2Nh c3Q8dW5zaWduZWQgaW50PihfX24pKSk7CiAgICAgICAgZWxzZQogICAgICAgICAgcmV0dXJuIHRo aXMtPm9wZXJhdG9yPDwoc3RhdGljX2Nhc3Q8bG9uZz4oX19uKSk7CiAgICAgIH0KCiAgICAgIF9f b3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8KHVuc2lnbmVkIGludCBfX24pCiAgICAgIHsg cmV0dXJuIHRoaXMtPm9wZXJhdG9yPDwoc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4oX19uKSk7 IH0KCgogICAgICBfX29zdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I8PChsb25nIGxvbmcgX19u KTsKCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8KHVuc2lnbmVkIGxvbmcg bG9uZyBfX24pOwoKCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8KGRvdWJs ZSBfX2YpOwoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPDwoZmxvYXQgX19m KQogICAgICB7IHJldHVybiB0aGlzLT5vcGVyYXRvcjw8KHN0YXRpY19jYXN0PGRvdWJsZT4oX19m KSk7IH0KCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8KGxvbmcgZG91Ymxl IF9fZik7CgogICAgICBfX29zdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I8PChjb25zdCB2b2lk KiBfX3ApOwoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPDwoX19zdHJlYW1i dWZfdHlwZSogX19zYik7CgoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIHB1dChjaGFyX3R5 cGUgX19jKTsKCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICB3cml0ZShjb25zdCBjaGFyX3R5 cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pOwoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIGZs dXNoKCk7CgoKICAgICAgcG9zX3R5cGUKICAgICAgdGVsbHAoKTsKCiAgICAgIF9fb3N0cmVhbV90 eXBlJgogICAgICBzZWVrcChwb3NfdHlwZSk7CgogICAgICBfX29zdHJlYW1fdHlwZSYKICAgICAg c2Vla3Aob2ZmX3R5cGUsIGlvc19iYXNlOjpzZWVrZGlyKTsKICAgIH07CgoKICB0ZW1wbGF0ZSA8 dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgY2xhc3MgYmFzaWNfb3N0cmVh bTxfQ2hhclQsIF9UcmFpdHM+OjpzZW50cnkKICAgIHsKCiAgICAgIGJvb2wgX01fb2s7CiAgICAg IGJhc2ljX29zdHJlYW08X0NoYXJULF9UcmFpdHM+JiBfTV9vczsKCiAgICBwdWJsaWM6CiAgICAg IGV4cGxpY2l0CiAgICAgIHNlbnRyeShiYXNpY19vc3RyZWFtPF9DaGFyVCxfVHJhaXRzPiYgX19v cyk7CgogICAgICB+c2VudHJ5KCkKICAgICAgewoKICAgICAgICBpZiAoX01fb3MuZmxhZ3MoKSAm IGlvc19iYXNlOjp1bml0YnVmICYmICF1bmNhdWdodF9leGNlcHRpb24oKSkKICAgICAgICAgIHsK CiAgICAgICAgICAgIGlmIChfTV9vcy5yZGJ1ZigpICYmIF9NX29zLnJkYnVmKCktPnB1YnN5bmMo KSA9PSAtMSkKICAgICAgICAgICAgICBfTV9vcy5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsK ICAgICAgICAgIH0KICAgICAgfQoKICAgICAgb3BlcmF0b3IgYm9vbCgpCiAgICAgIHsgcmV0dXJu IF9NX29rOyB9CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U cmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcjw8 KGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vdXQsIF9DaGFyVCBfX2MpOwoKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3Ry ZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08X0NoYXJU LCBfVHJhaXRzPiYgX19vdXQsIGNoYXIgX19jKQogICAgeyByZXR1cm4gKF9fb3V0IDw8IF9fb3V0 LndpZGVuKF9fYykpOyB9CgoKICB0ZW1wbGF0ZSA8Y2xhc3MgX1RyYWl0cz4KICAgIGJhc2ljX29z dHJlYW08Y2hhciwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08Y2hhciwg X1RyYWl0cz4mIF9fb3V0LCBjaGFyIF9fYyk7CgoKICB0ZW1wbGF0ZTxjbGFzcyBfVHJhaXRzPgog ICAgYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0 cmVhbTxjaGFyLCBfVHJhaXRzPiYgX19vdXQsIHNpZ25lZCBjaGFyIF9fYykKICAgIHsgcmV0dXJu IChfX291dCA8PCBzdGF0aWNfY2FzdDxjaGFyPihfX2MpKTsgfQoKICB0ZW1wbGF0ZTxjbGFzcyBf VHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPDwo YmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYgX19vdXQsIHVuc2lnbmVkIGNoYXIgX19jKQog ICAgeyByZXR1cm4gKF9fb3V0IDw8IHN0YXRpY19jYXN0PGNoYXI+KF9fYykpOyB9CgogIHRlbXBs YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08 X0NoYXJULCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9U cmFpdHM+JiBfX291dCwgY29uc3QgX0NoYXJUKiBfX3MpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0 cz4gJgogICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3V0 LCBjb25zdCBjaGFyKiBfX3MpOwoKCiAgdGVtcGxhdGU8Y2xhc3MgX1RyYWl0cz4KICAgIGJhc2lj X29zdHJlYW08Y2hhciwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08Y2hh ciwgX1RyYWl0cz4mIF9fb3V0LCBjb25zdCBjaGFyKiBfX3MpOwoKCiAgdGVtcGxhdGU8Y2xhc3Mg X1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcjw8 KGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0cz4mIF9fb3V0LCBjb25zdCBzaWduZWQgY2hhciog X19zKQogICAgeyByZXR1cm4gKF9fb3V0IDw8IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+ KF9fcykpOyB9CgogIHRlbXBsYXRlPGNsYXNzIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPGNo YXIsIF9UcmFpdHM+ICYKICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRz PiYgX19vdXQsIGNvbnN0IHVuc2lnbmVkIGNoYXIqIF9fcykKICAgIHsgcmV0dXJuIChfX291dCA8 PCByZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihfX3MpKTsgfQoKCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQs IF9UcmFpdHM+JgogICAgZW5kbChiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3Mp CiAgICB7IHJldHVybiBmbHVzaChfX29zLnB1dChfX29zLndpZGVuKCdcbicpKSk7IH0KCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVh bTxfQ2hhclQsIF9UcmFpdHM+JgogICAgZW5kcyhiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0 cz4mIF9fb3MpCiAgICB7IHJldHVybiBfX29zLnB1dChfQ2hhclQoKSk7IH0KCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hh clQsIF9UcmFpdHM+JgogICAgZmx1c2goYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBf X29zKQogICAgeyByZXR1cm4gX19vcy5mbHVzaCgpOyB9Cgp9CgoKCgoKIyAxICIvdXNyL2luY2x1 ZGUvYysrLzMuMi4xL2JpdHMvb3N0cmVhbS50Y2MiIDEgMwojIDM2ICIvdXNyL2luY2x1ZGUvYysr LzMuMi4xL2JpdHMvb3N0cmVhbS50Y2MiIDMKCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9s b2NhbGUiIDEgMwojIDQzICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL2xvY2FsZSIgMwoKCgojIDEg Ii91c3IvaW5jbHVkZS9jKysvMy4yLjEvYml0cy9sb2NhbGVfZmFjZXRzLnRjYyIgMSAzCiMgMzcg Ii91c3IvaW5jbHVkZS9jKysvMy4yLjEvYml0cy9sb2NhbGVfZmFjZXRzLnRjYyIgMwoKIyAxICIv dXNyL2luY2x1ZGUvYysrLzMuMi4xL2NlcnJubyIgMSAzCiMgNDcgIi91c3IvaW5jbHVkZS9jKysv My4yLjEvY2Vycm5vIiAzCgojIDEgIi91c3IvaW5jbHVkZS9lcnJuby5oIiAxIDMKIyAzMiAiL3Vz ci9pbmNsdWRlL2Vycm5vLmgiIDMKZXh0ZXJuICJDIiB7CgoKCiMgMSAiL3Vzci9pbmNsdWRlL2Jp dHMvZXJybm8uaCIgMSAzCiMgMjUgIi91c3IvaW5jbHVkZS9iaXRzL2Vycm5vLmgiIDMKIyAxICIv dXNyL2luY2x1ZGUvbGludXgvZXJybm8uaCIgMSAzCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2FzbS9l cnJuby5oIiAxIDMKIyA1ICIvdXNyL2luY2x1ZGUvbGludXgvZXJybm8uaCIgMiAzCiMgMjYgIi91 c3IvaW5jbHVkZS9iaXRzL2Vycm5vLmgiIDIgMwojIDM2ICIvdXNyL2luY2x1ZGUvYml0cy9lcnJu by5oIiAzCmV4dGVybiBpbnQgZXJybm87CgoKZXh0ZXJuIGludCAqX19lcnJub19sb2NhdGlvbiAo dm9pZCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwojIDM3ICIvdXNyL2lu Y2x1ZGUvZXJybm8uaCIgMiAzCiMgNTUgIi91c3IvaW5jbHVkZS9lcnJuby5oIiAzCmV4dGVybiBj aGFyICpwcm9ncmFtX2ludm9jYXRpb25fbmFtZSwgKnByb2dyYW1faW52b2NhdGlvbl9zaG9ydF9u YW1lOwoKCgp9CiMgNjkgIi91c3IvaW5jbHVkZS9lcnJuby5oIiAzCnR5cGVkZWYgaW50IGVycm9y X3Q7CiMgNDkgIi91c3IvaW5jbHVkZS9jKysvMy4yLjEvY2Vycm5vIiAyIDMKIyAzOSAiL3Vzci9p bmNsdWRlL2MrKy8zLjIuMS9iaXRzL2xvY2FsZV9mYWNldHMudGNjIiAyIDMKCgojIDEgIi91c3Iv aW5jbHVkZS9jKysvMy4yLjEvY21hdGgiIDEgMwojIDQ4ICIvdXNyL2luY2x1ZGUvYysrLzMuMi4x L2NtYXRoIiAzCgoKCiMgMSAiL3Vzci9pbmNsdWRlL21hdGguaCIgMSAzCiMgMjkgIi91c3IvaW5j bHVkZS9tYXRoLmgiIDMKZXh0ZXJuICJDIiB7CgoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvaHVn ZV92YWwuaCIgMSAzCiMgMzQgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDIgMwoKCgojIDEgIi91c3Iv aW5jbHVkZS9iaXRzL25hbi5oIiAxIDMKIyAzOCAiL3Vzci9pbmNsdWRlL21hdGguaCIgMiAzCgoK IyAxICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoZGVmLmgiIDEgMwojIDI5ICIvdXNyL2luY2x1ZGUv Yml0cy9tYXRoZGVmLmgiIDMKdHlwZWRlZiBsb25nIGRvdWJsZSBmbG9hdF90OwoKdHlwZWRlZiBs b25nIGRvdWJsZSBkb3VibGVfdDsKIyA0MSAiL3Vzci9pbmNsdWRlL21hdGguaCIgMiAzCiMgNjMg Ii91c3IvaW5jbHVkZS9tYXRoLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoY2FsbHMu aCIgMSAzCiMgNTQgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhjYWxscy5oIiAzCmV4dGVybiBkb3Vi bGUgYWNvcyAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19hY29zIChkb3Vi bGUgX194KSB0aHJvdyAoKTsKCmV4dGVybiBkb3VibGUgYXNpbiAoZG91YmxlIF9feCkgdGhyb3cg KCk7IGV4dGVybiBkb3VibGUgX19hc2luIChkb3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVybiBk b3VibGUgYXRhbiAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19hdGFuIChk b3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVybiBkb3VibGUgYXRhbjIgKGRvdWJsZSBfX3ksIGRv dWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fYXRhbjIgKGRvdWJsZSBfX3ksIGRv dWJsZSBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBkb3VibGUgY29zIChkb3VibGUgX194KSB0aHJv dyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2NvcyAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgpleHRlcm4g ZG91YmxlIHNpbiAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19zaW4gKGRv dWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGRvdWJsZSB0YW4gKGRvdWJsZSBfX3gpIHRocm93 ICgpOyBleHRlcm4gZG91YmxlIF9fdGFuIChkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKZXh0ZXJu IHZvaWQgc2luY29zIChkb3VibGUgX194LCBkb3VibGUgKl9fc2lueCwgZG91YmxlICpfX2Nvc3gp IHRocm93ICgpOyBleHRlcm4gdm9pZCBfX3NpbmNvcyAoZG91YmxlIF9feCwgZG91YmxlICpfX3Np bngsIGRvdWJsZSAqX19jb3N4KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGRvdWJsZSBjb3NoIChk b3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2Nvc2ggKGRvdWJsZSBfX3gpIHRo cm93ICgpOwoKZXh0ZXJuIGRvdWJsZSBzaW5oIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJu IGRvdWJsZSBfX3NpbmggKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGRvdWJsZSB0YW5o IChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3RhbmggKGRvdWJsZSBfX3gp IHRocm93ICgpOwoKCgpleHRlcm4gZG91YmxlIGFjb3NoIChkb3VibGUgX194KSB0aHJvdyAoKTsg ZXh0ZXJuIGRvdWJsZSBfX2Fjb3NoIChkb3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVybiBkb3Vi bGUgYXNpbmggKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fYXNpbmggKGRv dWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGRvdWJsZSBhdGFuaCAoZG91YmxlIF9feCkgdGhy b3cgKCk7IGV4dGVybiBkb3VibGUgX19hdGFuaCAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCgoK ZXh0ZXJuIGRvdWJsZSBleHAgKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9f ZXhwIChkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGRvdWJsZSBleHAxMCAoZG91Ymxl IF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19leHAxMCAoZG91YmxlIF9feCkgdGhyb3cg KCk7CgpleHRlcm4gZG91YmxlIHBvdzEwIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRv dWJsZSBfX3BvdzEwIChkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGRvdWJsZSBmcmV4 cCAoZG91YmxlIF9feCwgaW50ICpfX2V4cG9uZW50KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBf X2ZyZXhwIChkb3VibGUgX194LCBpbnQgKl9fZXhwb25lbnQpIHRocm93ICgpOwoKCmV4dGVybiBk b3VibGUgbGRleHAgKGRvdWJsZSBfX3gsIGludCBfX2V4cG9uZW50KSB0aHJvdyAoKTsgZXh0ZXJu IGRvdWJsZSBfX2xkZXhwIChkb3VibGUgX194LCBpbnQgX19leHBvbmVudCkgdGhyb3cgKCk7CgoK ZXh0ZXJuIGRvdWJsZSBsb2cgKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9f bG9nIChkb3VibGUgX194KSB0aHJvdyAoKTsKCgpleHRlcm4gZG91YmxlIGxvZzEwIChkb3VibGUg X194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2xvZzEwIChkb3VibGUgX194KSB0aHJvdyAo KTsKCgpleHRlcm4gZG91YmxlIG1vZGYgKGRvdWJsZSBfX3gsIGRvdWJsZSAqX19pcHRyKSB0aHJv dyAoKTsgZXh0ZXJuIGRvdWJsZSBfX21vZGYgKGRvdWJsZSBfX3gsIGRvdWJsZSAqX19pcHRyKSB0 aHJvdyAoKTsKCgoKZXh0ZXJuIGRvdWJsZSBleHBtMSAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4 dGVybiBkb3VibGUgX19leHBtMSAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGRvdWJs ZSBsb2cxcCAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19sb2cxcCAoZG91 YmxlIF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGRvdWJsZSBsb2diIChkb3VibGUgX194KSB0aHJv dyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2xvZ2IgKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgoKZXh0 ZXJuIGRvdWJsZSBleHAyIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2V4 cDIgKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBkb3VibGUgbG9nMiAoZG91YmxlIF9f eCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19sb2cyIChkb3VibGUgX194KSB0aHJvdyAoKTsK CgoKCgoKZXh0ZXJuIGRvdWJsZSBwb3cgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93ICgp OyBleHRlcm4gZG91YmxlIF9fcG93IChkb3VibGUgX194LCBkb3VibGUgX195KSB0aHJvdyAoKTsK CgpleHRlcm4gZG91YmxlIHNxcnQgKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91Ymxl IF9fc3FydCAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCmV4dGVybiBkb3VibGUgaHlwb3QgKGRv dWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9faHlwb3QgKGRv dWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGRvdWJsZSBjYnJ0IChk b3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2NicnQgKGRvdWJsZSBfX3gpIHRo cm93ICgpOwoKCgoKCgpleHRlcm4gZG91YmxlIGNlaWwgKGRvdWJsZSBfX3gpIHRocm93ICgpOyBl eHRlcm4gZG91YmxlIF9fY2VpbCAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGRvdWJs ZSBmYWJzIChkb3VibGUgX194KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7 IGV4dGVybiBkb3VibGUgX19mYWJzIChkb3VibGUgX194KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9f ICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGRvdWJsZSBmbG9vciAoZG91YmxlIF9feCkgdGhyb3cg KCk7IGV4dGVybiBkb3VibGUgX19mbG9vciAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJu IGRvdWJsZSBmbW9kIChkb3VibGUgX194LCBkb3VibGUgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGRv dWJsZSBfX2Ztb2QgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93ICgpOwoKCgoKZXh0ZXJu IGludCBfX2lzaW5mIChkb3VibGUgX192YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9f Y29uc3RfXykpOwoKCmV4dGVybiBpbnQgX19maW5pdGUgKGRvdWJsZSBfX3ZhbHVlKSB0aHJvdyAo KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgpleHRlcm4gaW50IGlzaW5mIChkb3Vi bGUgX192YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVy biBpbnQgZmluaXRlIChkb3VibGUgX192YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9f Y29uc3RfXykpOwoKCgoKCgoKZXh0ZXJuIGRvdWJsZSBpbmZuYW4gKGludCBfX2Vycm9yKSB0aHJv dyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBkb3VibGUgX19pbmZuYW4g KGludCBfX2Vycm9yKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0 ZXJuIGRvdWJsZSBkcmVtIChkb3VibGUgX194LCBkb3VibGUgX195KSB0aHJvdyAoKTsgZXh0ZXJu IGRvdWJsZSBfX2RyZW0gKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93ICgpOwoKCgpleHRl cm4gZG91YmxlIHNpZ25pZmljYW5kIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJs ZSBfX3NpZ25pZmljYW5kIChkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBkb3VibGUg Y29weXNpZ24gKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93ICgpIF9fYXR0cmlidXRlX18g KChfX2NvbnN0X18pKTsgZXh0ZXJuIGRvdWJsZSBfX2NvcHlzaWduIChkb3VibGUgX194LCBkb3Vi bGUgX195KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgpleHRlcm4g ZG91YmxlIG5hbiAoX19jb25zdCBjaGFyICpfX3RhZ2IpIHRocm93ICgpIF9fYXR0cmlidXRlX18g KChfX2NvbnN0X18pKTsgZXh0ZXJuIGRvdWJsZSBfX25hbiAoX19jb25zdCBjaGFyICpfX3RhZ2Ip IHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCmV4dGVybiBpbnQgX19p c25hbiAoZG91YmxlIF9fdmFsdWUpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18p KTsKCgoKZXh0ZXJuIGludCBpc25hbiAoZG91YmxlIF9fdmFsdWUpIHRocm93ICgpIF9fYXR0cmli dXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gZG91YmxlIGowIChkb3VibGUpIHRocm93ICgp OyBleHRlcm4gZG91YmxlIF9fajAgKGRvdWJsZSkgdGhyb3cgKCk7CmV4dGVybiBkb3VibGUgajEg KGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19qMSAoZG91YmxlKSB0aHJvdyAoKTsK ZXh0ZXJuIGRvdWJsZSBqbiAoaW50LCBkb3VibGUpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9f am4gKGludCwgZG91YmxlKSB0aHJvdyAoKTsKZXh0ZXJuIGRvdWJsZSB5MCAoZG91YmxlKSB0aHJv dyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3kwIChkb3VibGUpIHRocm93ICgpOwpleHRlcm4gZG91Ymxl IHkxIChkb3VibGUpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9feTEgKGRvdWJsZSkgdGhyb3cg KCk7CmV4dGVybiBkb3VibGUgeW4gKGludCwgZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJs ZSBfX3luIChpbnQsIGRvdWJsZSkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGRvdWJsZSBlcmYgKGRv dWJsZSkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19lcmYgKGRvdWJsZSkgdGhyb3cgKCk7CmV4 dGVybiBkb3VibGUgZXJmYyAoZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2VyZmMg KGRvdWJsZSkgdGhyb3cgKCk7CmV4dGVybiBkb3VibGUgbGdhbW1hIChkb3VibGUpIHRocm93ICgp OyBleHRlcm4gZG91YmxlIF9fbGdhbW1hIChkb3VibGUpIHRocm93ICgpOwoKCgpleHRlcm4gZG91 YmxlIHRnYW1tYSAoZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3RnYW1tYSAoZG91 YmxlKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBkb3VibGUgZ2FtbWEgKGRvdWJsZSkgdGhyb3cgKCk7 IGV4dGVybiBkb3VibGUgX19nYW1tYSAoZG91YmxlKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGRv dWJsZSBsZ2FtbWFfciAoZG91YmxlLCBpbnQgKl9fc2lnbmdhbXApIHRocm93ICgpOyBleHRlcm4g ZG91YmxlIF9fbGdhbW1hX3IgKGRvdWJsZSwgaW50ICpfX3NpZ25nYW1wKSB0aHJvdyAoKTsKCgoK CgoKZXh0ZXJuIGRvdWJsZSByaW50IChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJs ZSBfX3JpbnQgKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBkb3VibGUgbmV4dGFmdGVy IChkb3VibGUgX194LCBkb3VibGUgX195KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25z dF9fKSk7IGV4dGVybiBkb3VibGUgX19uZXh0YWZ0ZXIgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kp IHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCmV4dGVybiBkb3VibGUgbmV4 dHRvd2FyZCAoZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKSBfX2F0dHJpYnV0 ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBkb3VibGUgX19uZXh0dG93YXJkIChkb3VibGUgX194 LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsK CgoKZXh0ZXJuIGRvdWJsZSByZW1haW5kZXIgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93 ICgpOyBleHRlcm4gZG91YmxlIF9fcmVtYWluZGVyIChkb3VibGUgX194LCBkb3VibGUgX195KSB0 aHJvdyAoKTsKCgoKZXh0ZXJuIGRvdWJsZSBzY2FsYiAoZG91YmxlIF9feCwgZG91YmxlIF9fbikg dGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19zY2FsYiAoZG91YmxlIF9feCwgZG91YmxlIF9fbikg dGhyb3cgKCk7CgoKCgpleHRlcm4gZG91YmxlIHNjYWxibiAoZG91YmxlIF9feCwgaW50IF9fbikg dGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19zY2FsYm4gKGRvdWJsZSBfX3gsIGludCBfX24pIHRo cm93ICgpOwoKCgpleHRlcm4gaW50IGlsb2diIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJu IGludCBfX2lsb2diIChkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBkb3VibGUgc2Nh bGJsbiAoZG91YmxlIF9feCwgbG9uZyBpbnQgX19uKSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBf X3NjYWxibG4gKGRvdWJsZSBfX3gsIGxvbmcgaW50IF9fbikgdGhyb3cgKCk7CgoKCmV4dGVybiBk b3VibGUgbmVhcmJ5aW50IChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX25l YXJieWludCAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCmV4dGVybiBkb3VibGUgcm91bmQgKGRv dWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fcm91bmQgKGRvdWJsZSBfX3gpIHRo cm93ICgpOwoKCgpleHRlcm4gZG91YmxlIHRydW5jIChkb3VibGUgX194KSB0aHJvdyAoKSBfX2F0 dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBkb3VibGUgX190cnVuYyAoZG91YmxlIF9f eCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKZXh0ZXJuIGRvdWJs ZSByZW1xdW8gKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3ksIGludCAqX19xdW8pIHRocm93ICgpOyBl eHRlcm4gZG91YmxlIF9fcmVtcXVvIChkb3VibGUgX194LCBkb3VibGUgX195LCBpbnQgKl9fcXVv KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGxvbmcgaW50IGxyaW50IChkb3VibGUgX194KSB0aHJv dyAoKTsgZXh0ZXJuIGxvbmcgaW50IF9fbHJpbnQgKGRvdWJsZSBfX3gpIHRocm93ICgpOwpleHRl cm4gbG9uZyBsb25nIGludCBsbHJpbnQgKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9u ZyBsb25nIGludCBfX2xscmludCAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCmV4dGVybiBsb25n IGludCBscm91bmQgKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBpbnQgX19scm91 bmQgKGRvdWJsZSBfX3gpIHRocm93ICgpOwpleHRlcm4gbG9uZyBsb25nIGludCBsbHJvdW5kIChk b3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgbG9uZyBpbnQgX19sbHJvdW5kIChkb3Vi bGUgX194KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGRvdWJsZSBmZGltIChkb3VibGUgX194LCBkb3Vi bGUgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2ZkaW0gKGRvdWJsZSBfX3gsIGRvdWJs ZSBfX3kpIHRocm93ICgpOwoKCmV4dGVybiBkb3VibGUgZm1heCAoZG91YmxlIF9feCwgZG91Ymxl IF9feSkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19mbWF4IChkb3VibGUgX194LCBkb3VibGUg X195KSB0aHJvdyAoKTsKCgpleHRlcm4gZG91YmxlIGZtaW4gKGRvdWJsZSBfX3gsIGRvdWJsZSBf X3kpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fZm1pbiAoZG91YmxlIF9feCwgZG91YmxlIF9f eSkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgX19mcGNsYXNzaWZ5IChkb3VibGUgX192YWx1ZSkg dGhyb3cgKCkKICAgICBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGludCBf X3NpZ25iaXQgKGRvdWJsZSBfX3ZhbHVlKSB0aHJvdyAoKQogICAgIF9fYXR0cmlidXRlX18gKChf X2NvbnN0X18pKTsKCgoKZXh0ZXJuIGRvdWJsZSBmbWEgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3ks IGRvdWJsZSBfX3opIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fZm1hIChkb3VibGUgX194LCBk b3VibGUgX195LCBkb3VibGUgX196KSB0aHJvdyAoKTsKIyA2NCAiL3Vzci9pbmNsdWRlL21hdGgu aCIgMiAzCiMgODIgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0 cy9tYXRoY2FsbHMuaCIgMSAzCiMgNTQgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhjYWxscy5oIiAz CmV4dGVybiBmbG9hdCBhY29zZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9f YWNvc2YgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgpleHRlcm4gZmxvYXQgYXNpbmYgKGZsb2F0IF9f eCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2FzaW5mIChmbG9hdCBfX3gpIHRocm93ICgpOwoK ZXh0ZXJuIGZsb2F0IGF0YW5mIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19h dGFuZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCmV4dGVybiBmbG9hdCBhdGFuMmYgKGZsb2F0IF9f eSwgZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fYXRhbjJmIChmbG9hdCBfX3ks IGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGZsb2F0IGNvc2YgKGZsb2F0IF9feCkgdGhy b3cgKCk7IGV4dGVybiBmbG9hdCBfX2Nvc2YgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgpleHRlcm4g ZmxvYXQgc2luZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fc2luZiAoZmxv YXQgX194KSB0aHJvdyAoKTsKCmV4dGVybiBmbG9hdCB0YW5mIChmbG9hdCBfX3gpIHRocm93ICgp OyBleHRlcm4gZmxvYXQgX190YW5mIChmbG9hdCBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4gdm9p ZCBzaW5jb3NmIChmbG9hdCBfX3gsIGZsb2F0ICpfX3NpbngsIGZsb2F0ICpfX2Nvc3gpIHRocm93 ICgpOyBleHRlcm4gdm9pZCBfX3NpbmNvc2YgKGZsb2F0IF9feCwgZmxvYXQgKl9fc2lueCwgZmxv YXQgKl9fY29zeCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBmbG9hdCBjb3NoZiAoZmxvYXQgX194 KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fY29zaGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7Cgpl eHRlcm4gZmxvYXQgc2luaGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX3Np bmhmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGZsb2F0IHRhbmhmIChmbG9hdCBfX3gp IHRocm93ICgpOyBleHRlcm4gZmxvYXQgX190YW5oZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCgoK ZXh0ZXJuIGZsb2F0IGFjb3NoZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9f YWNvc2hmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGZsb2F0IGFzaW5oZiAoZmxvYXQg X194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fYXNpbmhmIChmbG9hdCBfX3gpIHRocm93ICgp OwoKZXh0ZXJuIGZsb2F0IGF0YW5oZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0 IF9fYXRhbmhmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKCgoKCmV4dGVybiBmbG9hdCBleHBmIChm bG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19leHBmIChmbG9hdCBfX3gpIHRocm93 ICgpOwoKCgpleHRlcm4gZmxvYXQgZXhwMTBmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4g ZmxvYXQgX19leHAxMGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgpleHRlcm4gZmxvYXQgcG93MTBm IChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19wb3cxMGYgKGZsb2F0IF9feCkg dGhyb3cgKCk7CgoKCmV4dGVybiBmbG9hdCBmcmV4cGYgKGZsb2F0IF9feCwgaW50ICpfX2V4cG9u ZW50KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fZnJleHBmIChmbG9hdCBfX3gsIGludCAqX19l eHBvbmVudCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGZsb2F0IGxkZXhwZiAoZmxvYXQgX194LCBpbnQg X19leHBvbmVudCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2xkZXhwZiAoZmxvYXQgX194LCBp bnQgX19leHBvbmVudCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGZsb2F0IGxvZ2YgKGZsb2F0IF9feCkg dGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2xvZ2YgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKZXh0 ZXJuIGZsb2F0IGxvZzEwZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fbG9n MTBmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBmbG9hdCBtb2RmZiAoZmxvYXQgX194 LCBmbG9hdCAqX19pcHRyKSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fbW9kZmYgKGZsb2F0IF9f eCwgZmxvYXQgKl9faXB0cikgdGhyb3cgKCk7CgoKCmV4dGVybiBmbG9hdCBleHBtMWYgKGZsb2F0 IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2V4cG0xZiAoZmxvYXQgX194KSB0aHJvdyAo KTsKCgpleHRlcm4gZmxvYXQgbG9nMXBmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxv YXQgX19sb2cxcGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGZsb2F0IGxvZ2JmIChm bG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19sb2diZiAoZmxvYXQgX194KSB0aHJv dyAoKTsKCgoKCmV4dGVybiBmbG9hdCBleHAyZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJu IGZsb2F0IF9fZXhwMmYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGZsb2F0IGxvZzJm IChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19sb2cyZiAoZmxvYXQgX194KSB0 aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGZsb2F0IHBvd2YgKGZsb2F0IF9feCwgZmxvYXQgX195KSB0 aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fcG93ZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93 ICgpOwoKCmV4dGVybiBmbG9hdCBzcXJ0ZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZs b2F0IF9fc3FydGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKCmV4dGVybiBmbG9hdCBoeXBvdGYg KGZsb2F0IF9feCwgZmxvYXQgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9faHlwb3RmIChm bG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gZmxvYXQgY2JydGYgKGZs b2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2NicnRmIChmbG9hdCBfX3gpIHRocm93 ICgpOwoKCgoKCgpleHRlcm4gZmxvYXQgY2VpbGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVy biBmbG9hdCBfX2NlaWxmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBmbG9hdCBmYWJz ZiAoZmxvYXQgX194KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVy biBmbG9hdCBfX2ZhYnNmIChmbG9hdCBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2Nv bnN0X18pKTsKCgpleHRlcm4gZmxvYXQgZmxvb3JmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRl cm4gZmxvYXQgX19mbG9vcmYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGZsb2F0IGZt b2RmIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2Ztb2Rm IChmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IF9faXNpbmZm IChmbG9hdCBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoK ZXh0ZXJuIGludCBfX2Zpbml0ZWYgKGZsb2F0IF9fdmFsdWUpIHRocm93ICgpIF9fYXR0cmlidXRl X18gKChfX2NvbnN0X18pKTsKCgoKCmV4dGVybiBpbnQgaXNpbmZmIChmbG9hdCBfX3ZhbHVlKSB0 aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGludCBmaW5pdGVm IChmbG9hdCBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoK CgoKCgpleHRlcm4gZmxvYXQgaW5mbmFuZiAoaW50IF9fZXJyb3IpIHRocm93ICgpIF9fYXR0cmli dXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGZsb2F0IF9faW5mbmFuZiAoaW50IF9fZXJyb3Ip IHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gZmxvYXQgZHJl bWYgKGZsb2F0IF9feCwgZmxvYXQgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fZHJlbWYg KGZsb2F0IF9feCwgZmxvYXQgX195KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGZsb2F0IHNpZ25pZmlj YW5kZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fc2lnbmlmaWNhbmRmIChm bG9hdCBfX3gpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGZsb2F0IGNvcHlzaWduZiAoZmxvYXQgX194 LCBmbG9hdCBfX3kpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJu IGZsb2F0IF9fY29weXNpZ25mIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cgKCkgX19hdHRy aWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKZXh0ZXJuIGZsb2F0IG5hbmYgKF9fY29uc3QgY2hh ciAqX190YWdiKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBm bG9hdCBfX25hbmYgKF9fY29uc3QgY2hhciAqX190YWdiKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9f ICgoX19jb25zdF9fKSk7CgoKCgpleHRlcm4gaW50IF9faXNuYW5mIChmbG9hdCBfX3ZhbHVlKSB0 aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCmV4dGVybiBpbnQgaXNuYW5m IChmbG9hdCBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoK ZXh0ZXJuIGZsb2F0IGowZiAoZmxvYXQpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19qMGYgKGZs b2F0KSB0aHJvdyAoKTsKZXh0ZXJuIGZsb2F0IGoxZiAoZmxvYXQpIHRocm93ICgpOyBleHRlcm4g ZmxvYXQgX19qMWYgKGZsb2F0KSB0aHJvdyAoKTsKZXh0ZXJuIGZsb2F0IGpuZiAoaW50LCBmbG9h dCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2puZiAoaW50LCBmbG9hdCkgdGhyb3cgKCk7CmV4 dGVybiBmbG9hdCB5MGYgKGZsb2F0KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9feTBmIChmbG9h dCkgdGhyb3cgKCk7CmV4dGVybiBmbG9hdCB5MWYgKGZsb2F0KSB0aHJvdyAoKTsgZXh0ZXJuIGZs b2F0IF9feTFmIChmbG9hdCkgdGhyb3cgKCk7CmV4dGVybiBmbG9hdCB5bmYgKGludCwgZmxvYXQp IHRocm93ICgpOyBleHRlcm4gZmxvYXQgX195bmYgKGludCwgZmxvYXQpIHRocm93ICgpOwoKCgoK CmV4dGVybiBmbG9hdCBlcmZmIChmbG9hdCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2VyZmYg KGZsb2F0KSB0aHJvdyAoKTsKZXh0ZXJuIGZsb2F0IGVyZmNmIChmbG9hdCkgdGhyb3cgKCk7IGV4 dGVybiBmbG9hdCBfX2VyZmNmIChmbG9hdCkgdGhyb3cgKCk7CmV4dGVybiBmbG9hdCBsZ2FtbWFm IChmbG9hdCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2xnYW1tYWYgKGZsb2F0KSB0aHJvdyAo KTsKCgoKZXh0ZXJuIGZsb2F0IHRnYW1tYWYgKGZsb2F0KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0 IF9fdGdhbW1hZiAoZmxvYXQpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGZsb2F0IGdhbW1hZiAoZmxv YXQpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19nYW1tYWYgKGZsb2F0KSB0aHJvdyAoKTsKCgoK CgoKZXh0ZXJuIGZsb2F0IGxnYW1tYWZfciAoZmxvYXQsIGludCAqX19zaWduZ2FtcCkgdGhyb3cg KCk7IGV4dGVybiBmbG9hdCBfX2xnYW1tYWZfciAoZmxvYXQsIGludCAqX19zaWduZ2FtcCkgdGhy b3cgKCk7CgoKCgoKCmV4dGVybiBmbG9hdCByaW50ZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0 ZXJuIGZsb2F0IF9fcmludGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGZsb2F0IG5l eHRhZnRlcmYgKGZsb2F0IF9feCwgZmxvYXQgX195KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo X19jb25zdF9fKSk7IGV4dGVybiBmbG9hdCBfX25leHRhZnRlcmYgKGZsb2F0IF9feCwgZmxvYXQg X195KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgpleHRlcm4gZmxvYXQg bmV4dHRvd2FyZGYgKGZsb2F0IF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKSBfX2F0dHJp YnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBmbG9hdCBfX25leHR0b3dhcmRmIChmbG9hdCBf X3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykp OwoKCgpleHRlcm4gZmxvYXQgcmVtYWluZGVyZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93 ICgpOyBleHRlcm4gZmxvYXQgX19yZW1haW5kZXJmIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhy b3cgKCk7CgoKCmV4dGVybiBmbG9hdCBzY2FsYmYgKGZsb2F0IF9feCwgZmxvYXQgX19uKSB0aHJv dyAoKTsgZXh0ZXJuIGZsb2F0IF9fc2NhbGJmIChmbG9hdCBfX3gsIGZsb2F0IF9fbikgdGhyb3cg KCk7CgoKCgpleHRlcm4gZmxvYXQgc2NhbGJuZiAoZmxvYXQgX194LCBpbnQgX19uKSB0aHJvdyAo KTsgZXh0ZXJuIGZsb2F0IF9fc2NhbGJuZiAoZmxvYXQgX194LCBpbnQgX19uKSB0aHJvdyAoKTsK CgoKZXh0ZXJuIGludCBpbG9nYmYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBpbnQgX19p bG9nYmYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gZmxvYXQgc2NhbGJsbmYgKGZs b2F0IF9feCwgbG9uZyBpbnQgX19uKSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fc2NhbGJsbmYg KGZsb2F0IF9feCwgbG9uZyBpbnQgX19uKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGZsb2F0IG5lYXJi eWludGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX25lYXJieWludGYgKGZs b2F0IF9feCkgdGhyb3cgKCk7CgoKCmV4dGVybiBmbG9hdCByb3VuZGYgKGZsb2F0IF9feCkgdGhy b3cgKCk7IGV4dGVybiBmbG9hdCBfX3JvdW5kZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCgoKZXh0 ZXJuIGZsb2F0IHRydW5jZiAoZmxvYXQgX194KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19j b25zdF9fKSk7IGV4dGVybiBmbG9hdCBfX3RydW5jZiAoZmxvYXQgX194KSB0aHJvdyAoKSBfX2F0 dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgpleHRlcm4gZmxvYXQgcmVtcXVvZiAoZmxvYXQg X194LCBmbG9hdCBfX3ksIGludCAqX19xdW8pIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19yZW1x dW9mIChmbG9hdCBfX3gsIGZsb2F0IF9feSwgaW50ICpfX3F1bykgdGhyb3cgKCk7CgoKCgoKCmV4 dGVybiBsb25nIGludCBscmludGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGlu dCBfX2xyaW50ZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcgbG9uZyBpbnQgbGxy aW50ZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgbG9uZyBpbnQgX19sbHJpbnRm IChmbG9hdCBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4gbG9uZyBpbnQgbHJvdW5kZiAoZmxvYXQg X194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgaW50IF9fbHJvdW5kZiAoZmxvYXQgX194KSB0aHJv dyAoKTsKZXh0ZXJuIGxvbmcgbG9uZyBpbnQgbGxyb3VuZGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7 IGV4dGVybiBsb25nIGxvbmcgaW50IF9fbGxyb3VuZGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoK CmV4dGVybiBmbG9hdCBmZGltZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpOyBleHRl cm4gZmxvYXQgX19mZGltZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpOwoKCmV4dGVy biBmbG9hdCBmbWF4ZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpOyBleHRlcm4gZmxv YXQgX19mbWF4ZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpOwoKCmV4dGVybiBmbG9h dCBmbWluZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19m bWluZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IF9fZnBj bGFzc2lmeWYgKGZsb2F0IF9fdmFsdWUpIHRocm93ICgpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9f Y29uc3RfXykpOwoKCmV4dGVybiBpbnQgX19zaWduYml0ZiAoZmxvYXQgX192YWx1ZSkgdGhyb3cg KCkKICAgICBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCmV4dGVybiBmbG9hdCBmbWFm IChmbG9hdCBfX3gsIGZsb2F0IF9feSwgZmxvYXQgX196KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0 IF9fZm1hZiAoZmxvYXQgX194LCBmbG9hdCBfX3ksIGZsb2F0IF9feikgdGhyb3cgKCk7CiMgODMg Ii91c3IvaW5jbHVkZS9tYXRoLmgiIDIgMwojIDk5ICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAzCiMg MSAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGNhbGxzLmgiIDEgMwojIDU0ICIvdXNyL2luY2x1ZGUv Yml0cy9tYXRoY2FsbHMuaCIgMwpleHRlcm4gbG9uZyBkb3VibGUgYWNvc2wgKGxvbmcgZG91Ymxl IF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2Fjb3NsIChsb25nIGRvdWJsZSBf X3gpIHRocm93ICgpOwoKZXh0ZXJuIGxvbmcgZG91YmxlIGFzaW5sIChsb25nIGRvdWJsZSBfX3gp IHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19hc2lubCAobG9uZyBkb3VibGUgX194KSB0 aHJvdyAoKTsKCmV4dGVybiBsb25nIGRvdWJsZSBhdGFubCAobG9uZyBkb3VibGUgX194KSB0aHJv dyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fYXRhbmwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cg KCk7CgpleHRlcm4gbG9uZyBkb3VibGUgYXRhbjJsIChsb25nIGRvdWJsZSBfX3ksIGxvbmcgZG91 YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2F0YW4ybCAobG9uZyBkb3Vi bGUgX195LCBsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBj b3NsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19jb3Ns IChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGxvbmcgZG91YmxlIHNpbmwgKGxv bmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3NpbmwgKGxvbmcg ZG91YmxlIF9feCkgdGhyb3cgKCk7CgpleHRlcm4gbG9uZyBkb3VibGUgdGFubCAobG9uZyBkb3Vi bGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fdGFubCAobG9uZyBkb3VibGUg X194KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHZvaWQgc2luY29zbCAobG9uZyBkb3VibGUgX194LCBs b25nIGRvdWJsZSAqX19zaW54LCBsb25nIGRvdWJsZSAqX19jb3N4KSB0aHJvdyAoKTsgZXh0ZXJu IHZvaWQgX19zaW5jb3NsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlICpfX3NpbngsIGxv bmcgZG91YmxlICpfX2Nvc3gpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gbG9uZyBkb3VibGUgY29z aGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2Nvc2hs IChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGxvbmcgZG91YmxlIHNpbmhsIChs b25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19zaW5obCAobG9u ZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVybiBsb25nIGRvdWJsZSB0YW5obCAobG9uZyBk b3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fdGFuaGwgKGxvbmcgZG91 YmxlIF9feCkgdGhyb3cgKCk7CgoKCmV4dGVybiBsb25nIGRvdWJsZSBhY29zaGwgKGxvbmcgZG91 YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2Fjb3NobCAobG9uZyBkb3Vi bGUgX194KSB0aHJvdyAoKTsKCmV4dGVybiBsb25nIGRvdWJsZSBhc2luaGwgKGxvbmcgZG91Ymxl IF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2FzaW5obCAobG9uZyBkb3VibGUg X194KSB0aHJvdyAoKTsKCmV4dGVybiBsb25nIGRvdWJsZSBhdGFuaGwgKGxvbmcgZG91YmxlIF9f eCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2F0YW5obCAobG9uZyBkb3VibGUgX194 KSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gbG9uZyBkb3VibGUgZXhwbCAobG9uZyBkb3VibGUgX194 KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZXhwbCAobG9uZyBkb3VibGUgX194KSB0 aHJvdyAoKTsKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIGV4cDEwbCAobG9uZyBkb3VibGUgX194KSB0 aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZXhwMTBsIChsb25nIGRvdWJsZSBfX3gpIHRo cm93ICgpOwoKZXh0ZXJuIGxvbmcgZG91YmxlIHBvdzEwbCAobG9uZyBkb3VibGUgX194KSB0aHJv dyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fcG93MTBsIChsb25nIGRvdWJsZSBfX3gpIHRocm93 ICgpOwoKCgpleHRlcm4gbG9uZyBkb3VibGUgZnJleHBsIChsb25nIGRvdWJsZSBfX3gsIGludCAq X19leHBvbmVudCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2ZyZXhwbCAobG9uZyBk b3VibGUgX194LCBpbnQgKl9fZXhwb25lbnQpIHRocm93ICgpOwoKCmV4dGVybiBsb25nIGRvdWJs ZSBsZGV4cGwgKGxvbmcgZG91YmxlIF9feCwgaW50IF9fZXhwb25lbnQpIHRocm93ICgpOyBleHRl cm4gbG9uZyBkb3VibGUgX19sZGV4cGwgKGxvbmcgZG91YmxlIF9feCwgaW50IF9fZXhwb25lbnQp IHRocm93ICgpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBsb2dsIChsb25nIGRvdWJsZSBfX3gpIHRo cm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19sb2dsIChsb25nIGRvdWJsZSBfX3gpIHRocm93 ICgpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBsb2cxMGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cg KCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2xvZzEwbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAo KTsKCgpleHRlcm4gbG9uZyBkb3VibGUgbW9kZmwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3Vi bGUgKl9faXB0cikgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX21vZGZsIChsb25nIGRv dWJsZSBfX3gsIGxvbmcgZG91YmxlICpfX2lwdHIpIHRocm93ICgpOwoKCgpleHRlcm4gbG9uZyBk b3VibGUgZXhwbTFsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3Vi bGUgX19leHBtMWwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcgZG91 YmxlIGxvZzFwbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91Ymxl IF9fbG9nMXBsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBsb25nIGRvdWJs ZSBsb2dibCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9f bG9nYmwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gbG9uZyBkb3VibGUg ZXhwMmwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2V4 cDJsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBsb2cy bCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fbG9nMmwg KGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBwb3ds IChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCk7IGV4dGVybiBsb25n IGRvdWJsZSBfX3Bvd2wgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAo KTsKCgpleHRlcm4gbG9uZyBkb3VibGUgc3FydGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7 IGV4dGVybiBsb25nIGRvdWJsZSBfX3NxcnRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoK CgpleHRlcm4gbG9uZyBkb3VibGUgaHlwb3RsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91Ymxl IF9feSkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2h5cG90bCAobG9uZyBkb3VibGUg X194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIGNi cnRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19jYnJ0 bCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIGNl aWxsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19jZWls bCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBkb3VibGUgZmFic2wg KGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBl eHRlcm4gbG9uZyBkb3VibGUgX19mYWJzbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKSBfX2F0 dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGZsb29ybCAobG9u ZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZmxvb3JsIChsb25n IGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBmbW9kbCAobG9uZyBk b3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUg X19mbW9kbCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpOwoKCgoK ZXh0ZXJuIGludCBfX2lzaW5mbCAobG9uZyBkb3VibGUgX192YWx1ZSkgdGhyb3cgKCkgX19hdHRy aWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBpbnQgX19maW5pdGVsIChsb25nIGRvdWJs ZSBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgpleHRl cm4gaW50IGlzaW5mbCAobG9uZyBkb3VibGUgX192YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVf XyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBpbnQgZmluaXRlbCAobG9uZyBkb3VibGUgX192YWx1 ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKCgoKZXh0ZXJuIGxv bmcgZG91YmxlIGluZm5hbmwgKGludCBfX2Vycm9yKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo X19jb25zdF9fKSk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2luZm5hbmwgKGludCBfX2Vycm9yKSB0 aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGxvbmcgZG91Ymxl IGRyZW1sIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCk7IGV4dGVy biBsb25nIGRvdWJsZSBfX2RyZW1sIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkg dGhyb3cgKCk7CgoKCmV4dGVybiBsb25nIGRvdWJsZSBzaWduaWZpY2FuZGwgKGxvbmcgZG91Ymxl IF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3NpZ25pZmljYW5kbCAobG9uZyBk b3VibGUgX194KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBjb3B5c2lnbmwgKGxv bmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo X19jb25zdF9fKSk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2NvcHlzaWdubCAobG9uZyBkb3VibGUg X194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18p KTsKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBuYW5sIChfX2NvbnN0IGNoYXIgKl9fdGFnYikgdGhy b3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gbG9uZyBkb3VibGUgX19u YW5sIChfX2NvbnN0IGNoYXIgKl9fdGFnYikgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29u c3RfXykpOwoKCgoKZXh0ZXJuIGludCBfX2lzbmFubCAobG9uZyBkb3VibGUgX192YWx1ZSkgdGhy b3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgpleHRlcm4gaW50IGlzbmFubCAo bG9uZyBkb3VibGUgX192YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykp OwoKCmV4dGVybiBsb25nIGRvdWJsZSBqMGwgKGxvbmcgZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJu IGxvbmcgZG91YmxlIF9fajBsIChsb25nIGRvdWJsZSkgdGhyb3cgKCk7CmV4dGVybiBsb25nIGRv dWJsZSBqMWwgKGxvbmcgZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fajFs IChsb25nIGRvdWJsZSkgdGhyb3cgKCk7CmV4dGVybiBsb25nIGRvdWJsZSBqbmwgKGludCwgbG9u ZyBkb3VibGUpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19qbmwgKGludCwgbG9uZyBk b3VibGUpIHRocm93ICgpOwpleHRlcm4gbG9uZyBkb3VibGUgeTBsIChsb25nIGRvdWJsZSkgdGhy b3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3kwbCAobG9uZyBkb3VibGUpIHRocm93ICgpOwpl eHRlcm4gbG9uZyBkb3VibGUgeTFsIChsb25nIGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBsb25n IGRvdWJsZSBfX3kxbCAobG9uZyBkb3VibGUpIHRocm93ICgpOwpleHRlcm4gbG9uZyBkb3VibGUg eW5sIChpbnQsIGxvbmcgZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9feW5s IChpbnQsIGxvbmcgZG91YmxlKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gbG9uZyBkb3VibGUgZXJm bCAobG9uZyBkb3VibGUpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19lcmZsIChsb25n IGRvdWJsZSkgdGhyb3cgKCk7CmV4dGVybiBsb25nIGRvdWJsZSBlcmZjbCAobG9uZyBkb3VibGUp IHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19lcmZjbCAobG9uZyBkb3VibGUpIHRocm93 ICgpOwpleHRlcm4gbG9uZyBkb3VibGUgbGdhbW1hbCAobG9uZyBkb3VibGUpIHRocm93ICgpOyBl eHRlcm4gbG9uZyBkb3VibGUgX19sZ2FtbWFsIChsb25nIGRvdWJsZSkgdGhyb3cgKCk7CgoKCmV4 dGVybiBsb25nIGRvdWJsZSB0Z2FtbWFsIChsb25nIGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBs b25nIGRvdWJsZSBfX3RnYW1tYWwgKGxvbmcgZG91YmxlKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBs b25nIGRvdWJsZSBnYW1tYWwgKGxvbmcgZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91 YmxlIF9fZ2FtbWFsIChsb25nIGRvdWJsZSkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBsb25nIGRv dWJsZSBsZ2FtbWFsX3IgKGxvbmcgZG91YmxlLCBpbnQgKl9fc2lnbmdhbXApIHRocm93ICgpOyBl eHRlcm4gbG9uZyBkb3VibGUgX19sZ2FtbWFsX3IgKGxvbmcgZG91YmxlLCBpbnQgKl9fc2lnbmdh bXApIHRocm93ICgpOwoKCgoKCgpleHRlcm4gbG9uZyBkb3VibGUgcmludGwgKGxvbmcgZG91Ymxl IF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3JpbnRsIChsb25nIGRvdWJsZSBf X3gpIHRocm93ICgpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBuZXh0YWZ0ZXJsIChsb25nIGRvdWJs ZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3Rf XykpOyBleHRlcm4gbG9uZyBkb3VibGUgX19uZXh0YWZ0ZXJsIChsb25nIGRvdWJsZSBfX3gsIGxv bmcgZG91YmxlIF9feSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKZXh0 ZXJuIGxvbmcgZG91YmxlIG5leHR0b3dhcmRsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91Ymxl IF9feSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gbG9uZyBk b3VibGUgX19uZXh0dG93YXJkbCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRo cm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKZXh0ZXJuIGxvbmcgZG91Ymxl IHJlbWFpbmRlcmwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKTsg ZXh0ZXJuIGxvbmcgZG91YmxlIF9fcmVtYWluZGVybCAobG9uZyBkb3VibGUgX194LCBsb25nIGRv dWJsZSBfX3kpIHRocm93ICgpOwoKCgpleHRlcm4gbG9uZyBkb3VibGUgc2NhbGJsIChsb25nIGRv dWJsZSBfX3gsIGxvbmcgZG91YmxlIF9fbikgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBf X3NjYWxibCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX24pIHRocm93ICgpOwoKCgoK ZXh0ZXJuIGxvbmcgZG91YmxlIHNjYWxibmwgKGxvbmcgZG91YmxlIF9feCwgaW50IF9fbikgdGhy b3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3NjYWxibmwgKGxvbmcgZG91YmxlIF9feCwgaW50 IF9fbikgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgaWxvZ2JsIChsb25nIGRvdWJsZSBfX3gpIHRo cm93ICgpOyBleHRlcm4gaW50IF9faWxvZ2JsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoK CgoKZXh0ZXJuIGxvbmcgZG91YmxlIHNjYWxibG5sIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgaW50 IF9fbikgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3NjYWxibG5sIChsb25nIGRvdWJs ZSBfX3gsIGxvbmcgaW50IF9fbikgdGhyb3cgKCk7CgoKCmV4dGVybiBsb25nIGRvdWJsZSBuZWFy YnlpbnRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19u ZWFyYnlpbnRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4gbG9uZyBkb3Vi bGUgcm91bmRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUg X19yb3VuZGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCmV4dGVybiBsb25nIGRvdWJs ZSB0cnVuY2wgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29u c3RfXykpOyBleHRlcm4gbG9uZyBkb3VibGUgX190cnVuY2wgKGxvbmcgZG91YmxlIF9feCkgdGhy b3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKZXh0ZXJuIGxvbmcgZG91Ymxl IHJlbXF1b2wgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195LCBpbnQgKl9fcXVvKSB0 aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fcmVtcXVvbCAobG9uZyBkb3VibGUgX194LCBs b25nIGRvdWJsZSBfX3ksIGludCAqX19xdW8pIHRocm93ICgpOwoKCgoKCgpleHRlcm4gbG9uZyBp bnQgbHJpbnRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBpbnQgX19s cmludGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CmV4dGVybiBsb25nIGxvbmcgaW50IGxs cmludGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGxvbmcgaW50IF9f bGxyaW50bCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGxvbmcgaW50IGxy b3VuZGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGludCBfX2xyb3Vu ZGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CmV4dGVybiBsb25nIGxvbmcgaW50IGxscm91 bmRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBsb25nIGludCBfX2xs cm91bmRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4gbG9uZyBkb3VibGUg ZmRpbWwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKTsgZXh0ZXJu IGxvbmcgZG91YmxlIF9fZmRpbWwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0 aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBkb3VibGUgZm1heGwgKGxvbmcgZG91YmxlIF9feCwgbG9u ZyBkb3VibGUgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZm1heGwgKGxvbmcg ZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBkb3Vi bGUgZm1pbmwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKTsgZXh0 ZXJuIGxvbmcgZG91YmxlIF9fZm1pbmwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195 KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBfX2ZwY2xhc3NpZnlsIChsb25nIGRvdWJsZSBfX3Zh bHVlKSB0aHJvdyAoKQogICAgIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4g aW50IF9fc2lnbmJpdGwgKGxvbmcgZG91YmxlIF9fdmFsdWUpIHRocm93ICgpCiAgICAgX19hdHRy aWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgpleHRlcm4gbG9uZyBkb3VibGUgZm1hbCAobG9uZyBk b3VibGUgX194LCBsb25nIGRvdWJsZSBfX3ksIGxvbmcgZG91YmxlIF9feikgdGhyb3cgKCk7IGV4 dGVybiBsb25nIGRvdWJsZSBfX2ZtYWwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195 LCBsb25nIGRvdWJsZSBfX3opIHRocm93ICgpOwojIDEwMCAiL3Vzci9pbmNsdWRlL21hdGguaCIg MiAzCiMgMTEzICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAzCmV4dGVybiBpbnQgc2lnbmdhbTsKIyAx NTQgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDMKZW51bQogIHsKICAgIEZQX05BTiwKCiAgICBGUF9J TkZJTklURSwKCiAgICBGUF9aRVJPLAoKICAgIEZQX1NVQk5PUk1BTCwKCiAgICBGUF9OT1JNQUwK CiAgfTsKIyAyNDAgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDMKdHlwZWRlZiBlbnVtCnsKICBfSUVF RV8gPSAtMSwKICBfU1ZJRF8sCiAgX1hPUEVOXywKICBfUE9TSVhfLAogIF9JU09DXwp9IF9MSUJf VkVSU0lPTl9UWVBFOwoKCgoKZXh0ZXJuIF9MSUJfVkVSU0lPTl9UWVBFIF9MSUJfVkVSU0lPTjsK IyAyNjMgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDMKc3RydWN0IF9fZXhjZXB0aW9uCgoKCiAgewog ICAgaW50IHR5cGU7CiAgICBjaGFyICpuYW1lOwogICAgZG91YmxlIGFyZzE7CiAgICBkb3VibGUg YXJnMjsKICAgIGRvdWJsZSByZXR2YWw7CiAgfTsKCgpleHRlcm4gaW50IG1hdGhlcnIgKHN0cnVj dCBfX2V4Y2VwdGlvbiAqX19leGMpIHRocm93ICgpOwojIDM1MCAiL3Vzci9pbmNsdWRlL21hdGgu aCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhpbmxpbmUuaCIgMSAzCiMgMTI3ICIvdXNy L2luY2x1ZGUvYml0cy9tYXRoaW5saW5lLmgiIDMKX19pbmxpbmUgaW50Cl9fc2lnbmJpdGYgKGZs b2F0IF9feCkgdGhyb3cgKCkKewogIF9fZXh0ZW5zaW9uX18gdW5pb24geyBmbG9hdCBfX2Y7IGlu dCBfX2k7IH0gX191ID0geyBfX2Y6IF9feCB9OwogIHJldHVybiBfX3UuX19pIDwgMDsKfQpfX2lu bGluZSBpbnQKX19zaWduYml0IChkb3VibGUgX194KSB0aHJvdyAoKQp7CiAgX19leHRlbnNpb25f XyB1bmlvbiB7IGRvdWJsZSBfX2Q7IGludCBfX2lbMl07IH0gX191ID0geyBfX2Q6IF9feCB9Owog IHJldHVybiBfX3UuX19pWzFdIDwgMDsKfQpfX2lubGluZSBpbnQKX19zaWduYml0bCAobG9uZyBk b3VibGUgX194KSB0aHJvdyAoKQp7CiAgX19leHRlbnNpb25fXyB1bmlvbiB7IGxvbmcgZG91Ymxl IF9fbDsgaW50IF9faVszXTsgfSBfX3UgPSB7IF9fbDogX194IH07CiAgcmV0dXJuIChfX3UuX19p WzJdICYgMHg4MDAwKSAhPSAwOwp9CiMgMjkxICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoaW5saW5l LmgiIDMKX19pbmxpbmUgZG91YmxlIF9fc2duIChkb3VibGUpIHRocm93ICgpOyBfX2lubGluZSBk b3VibGUgX19zZ24gKGRvdWJsZSBfX3gpIHRocm93ICgpIHsgcmV0dXJuIF9feCA9PSAwLjAgPyAw LjAgOiAoX194ID4gMC4wID8gMS4wIDogLTEuMCk7IH0gX19pbmxpbmUgZmxvYXQgX19zZ25mIChm bG9hdCkgdGhyb3cgKCk7IF9faW5saW5lIGZsb2F0IF9fc2duZiAoZmxvYXQgX194KSB0aHJvdyAo KSB7IHJldHVybiBfX3ggPT0gMC4wID8gMC4wIDogKF9feCA+IDAuMCA/IDEuMCA6IC0xLjApOyB9 IF9faW5saW5lIGxvbmcgZG91YmxlIF9fc2dubCAobG9uZyBkb3VibGUpIHRocm93ICgpOyBfX2lu bGluZSBsb25nIGRvdWJsZSBfX3NnbmwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCkgeyByZXR1 cm4gX194ID09IDAuMCA/IDAuMCA6IChfX3ggPiAwLjAgPyAxLjAgOiAtMS4wKTsgfQojIDQ3NSAi L3Vzci9pbmNsdWRlL2JpdHMvbWF0aGlubGluZS5oIiAzCl9faW5saW5lIGRvdWJsZSBhdGFuMiAo ZG91YmxlIF9feSwgZG91YmxlIF9feCkgdGhyb3cgKCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBf X3ZhbHVlOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmcGF0YW4iIDogIj10IiAoX192YWx1ZSkgOiAi MCIgKF9feCksICJ1IiAoX195KSA6ICJzdCgxKSIpOyByZXR1cm4gX192YWx1ZTsgfSBfX2lubGlu ZSBmbG9hdCBhdGFuMmYgKGZsb2F0IF9feSwgZmxvYXQgX194KSB0aHJvdyAoKSB7IHJlZ2lzdGVy IGxvbmcgZG91YmxlIF9fdmFsdWU7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZwYXRhbiIgOiAiPXQi IChfX3ZhbHVlKSA6ICIwIiAoX194KSwgInUiIChfX3kpIDogInN0KDEpIik7IHJldHVybiBfX3Zh bHVlOyB9IF9faW5saW5lIGxvbmcgZG91YmxlIGF0YW4ybCAobG9uZyBkb3VibGUgX195LCBsb25n IGRvdWJsZSBfX3gpIHRocm93ICgpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgX19h c20gX192b2xhdGlsZV9fICgiZnBhdGFuIiA6ICI9dCIgKF9fdmFsdWUpIDogIjAiIChfX3gpLCAi dSIgKF9feSkgOiAic3QoMSkiKTsgcmV0dXJuIF9fdmFsdWU7IH0KX19pbmxpbmUgbG9uZyBkb3Vi bGUgX19hdGFuMmwgKGxvbmcgZG91YmxlIF9feSwgbG9uZyBkb3VibGUgX194KSB0aHJvdyAoKSB7 IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZwYXRh biIgOiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAoX194KSwgInUiIChfX3kpIDogInN0KDEpIik7IHJl dHVybiBfX3ZhbHVlOyB9CgoKX19pbmxpbmUgZG91YmxlIGZtb2QgKGRvdWJsZSBfX3gsIGRvdWJs ZSBfX3kpIHRocm93ICgpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgX19hc20gX192 b2xhdGlsZV9fICgiMToJZnByZW1cblx0IiAiZm5zdHN3CSUlYXhcblx0IiAic2FoZlxuXHQiICJq cAkxYiIgOiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAoX194KSwgInUiIChfX3kpIDogImF4IiwgImNj Iik7IHJldHVybiBfX3ZhbHVlOyB9IF9faW5saW5lIGZsb2F0IGZtb2RmIChmbG9hdCBfX3gsIGZs b2F0IF9feSkgdGhyb3cgKCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOyBfX2FzbSBf X3ZvbGF0aWxlX18gKCIxOglmcHJlbVxuXHQiICJmbnN0c3cJJSVheFxuXHQiICJzYWhmXG5cdCIg ImpwCTFiIiA6ICI9dCIgKF9fdmFsdWUpIDogIjAiIChfX3gpLCAidSIgKF9feSkgOiAiYXgiLCAi Y2MiKTsgcmV0dXJuIF9fdmFsdWU7IH0gX19pbmxpbmUgbG9uZyBkb3VibGUgZm1vZGwgKGxvbmcg ZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGxvbmcgZG91 YmxlIF9fdmFsdWU7IF9fYXNtIF9fdm9sYXRpbGVfXyAoIjE6CWZwcmVtXG5cdCIgImZuc3Rzdwkl JWF4XG5cdCIgInNhaGZcblx0IiAianAJMWIiIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9feCks ICJ1IiAoX195KSA6ICJheCIsICJjYyIpOyByZXR1cm4gX192YWx1ZTsgfQojIDQ5MCAiL3Vzci9p bmNsdWRlL2JpdHMvbWF0aGlubGluZS5oIiAzCl9faW5saW5lIGRvdWJsZSBzcXJ0IChkb3VibGUg X194KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGRvdWJsZSBfX3Jlc3VsdDsgX19hc20gX192b2xhdGls ZV9fICgiZnNxcnQiIDogIj10IiAoX19yZXN1bHQpIDogIjAiIChfX3gpKTsgcmV0dXJuIF9fcmVz dWx0OyB9IF9faW5saW5lIGZsb2F0IHNxcnRmIChmbG9hdCBfX3gpIHRocm93ICgpIHsgcmVnaXN0 ZXIgZmxvYXQgX19yZXN1bHQ7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZzcXJ0IiA6ICI9dCIgKF9f cmVzdWx0KSA6ICIwIiAoX194KSk7IHJldHVybiBfX3Jlc3VsdDsgfSBfX2lubGluZSBsb25nIGRv dWJsZSBzcXJ0bCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGxvbmcgZG91 YmxlIF9fcmVzdWx0OyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmc3FydCIgOiAiPXQiIChfX3Jlc3Vs dCkgOiAiMCIgKF9feCkpOyByZXR1cm4gX19yZXN1bHQ7IH0KX19pbmxpbmUgbG9uZyBkb3VibGUg X19zcXJ0bCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGxvbmcgZG91Ymxl IF9fcmVzdWx0OyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmc3FydCIgOiAiPXQiIChfX3Jlc3VsdCkg OiAiMCIgKF9feCkpOyByZXR1cm4gX19yZXN1bHQ7IH0KCgpfX2lubGluZSBkb3VibGUgZmFicyAo ZG91YmxlIF9feCkgdGhyb3cgKCkgeyByZXR1cm4gX19idWlsdGluX2ZhYnMgKF9feCk7IH0KX19p bmxpbmUgZmxvYXQgZmFic2YgKGZsb2F0IF9feCkgdGhyb3cgKCkgeyByZXR1cm4gX19idWlsdGlu X2ZhYnNmIChfX3gpOyB9Cl9faW5saW5lIGxvbmcgZG91YmxlIGZhYnNsIChsb25nIGRvdWJsZSBf X3gpIHRocm93ICgpIHsgcmV0dXJuIF9fYnVpbHRpbl9mYWJzbCAoX194KTsgfQpfX2lubGluZSBs b25nIGRvdWJsZSBfX2ZhYnNsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpIHsgcmV0dXJuIF9f YnVpbHRpbl9mYWJzbCAoX194KTsgfQojIDUxNiAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGlubGlu ZS5oIiAzCl9faW5saW5lIGRvdWJsZSBhdGFuIChkb3VibGUgX194KSB0aHJvdyAoKSB7IHJlZ2lz dGVyIGRvdWJsZSBfX3Jlc3VsdDsgX19hc20gX192b2xhdGlsZV9fICgiZmxkMTsgZnBhdGFuIiA6 ICI9dCIgKF9fcmVzdWx0KSA6ICIwIiAoX194KSA6ICJzdCgxKSIpOyByZXR1cm4gX19yZXN1bHQ7 IH0gX19pbmxpbmUgZmxvYXQgYXRhbmYgKGZsb2F0IF9feCkgdGhyb3cgKCkgeyByZWdpc3RlciBm bG9hdCBfX3Jlc3VsdDsgX19hc20gX192b2xhdGlsZV9fICgiZmxkMTsgZnBhdGFuIiA6ICI9dCIg KF9fcmVzdWx0KSA6ICIwIiAoX194KSA6ICJzdCgxKSIpOyByZXR1cm4gX19yZXN1bHQ7IH0gX19p bmxpbmUgbG9uZyBkb3VibGUgYXRhbmwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCkgeyByZWdp c3RlciBsb25nIGRvdWJsZSBfX3Jlc3VsdDsgX19hc20gX192b2xhdGlsZV9fICgiZmxkMTsgZnBh dGFuIiA6ICI9dCIgKF9fcmVzdWx0KSA6ICIwIiAoX194KSA6ICJzdCgxKSIpOyByZXR1cm4gX19y ZXN1bHQ7IH0KCl9faW5saW5lIGxvbmcgZG91YmxlIF9fc2duMWwgKGxvbmcgZG91YmxlKSB0aHJv dyAoKTsgX19pbmxpbmUgbG9uZyBkb3VibGUgX19zZ24xbCAobG9uZyBkb3VibGUgX194KSB0aHJv dyAoKSB7IF9fZXh0ZW5zaW9uX18gdW5pb24geyBsb25nIGRvdWJsZSBfX3hsZDsgdW5zaWduZWQg aW50IF9feGlbM107IH0gX19uID0geyBfX3hsZDogX194IH07IF9fbi5fX3hpWzJdID0gKF9fbi5f X3hpWzJdICYgMHg4MDAwKSB8IDB4M2ZmZjsgX19uLl9feGlbMV0gPSAweDgwMDAwMDAwOyBfX24u X194aVswXSA9IDA7IHJldHVybiBfX24uX194bGQ7IH0KIyA1NDIgIi91c3IvaW5jbHVkZS9iaXRz L21hdGhpbmxpbmUuaCIgMwpfX2lubGluZSBkb3VibGUgZmxvb3IgKGRvdWJsZSBfX3gpIHRocm93 ICgpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgX192b2xhdGlsZSB1bnNpZ25lZCBz aG9ydCBpbnQgX19jdzsgX192b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCBpbnQgX19jd3RtcDsgX19h c20gX192b2xhdGlsZSAoImZuc3RjdyAlMCIgOiAiPW0iIChfX2N3KSk7IF9fY3d0bXAgPSAoX19j dyAmIDB4ZjNmZikgfCAweDA0MDA7IF9fYXNtIF9fdm9sYXRpbGUgKCJmbGRjdyAlMCIgOiA6ICJt IiAoX19jd3RtcCkpOyBfX2FzbSBfX3ZvbGF0aWxlICgiZnJuZGludCIgOiAiPXQiIChfX3ZhbHVl KSA6ICIwIiAoX194KSk7IF9fYXNtIF9fdm9sYXRpbGUgKCJmbGRjdyAlMCIgOiA6ICJtIiAoX19j dykpOyByZXR1cm4gX192YWx1ZTsgfSBfX2lubGluZSBmbG9hdCBmbG9vcmYgKGZsb2F0IF9feCkg dGhyb3cgKCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOyBfX3ZvbGF0aWxlIHVuc2ln bmVkIHNob3J0IGludCBfX2N3OyBfX3ZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IGludCBfX2N3dG1w OyBfX2FzbSBfX3ZvbGF0aWxlICgiZm5zdGN3ICUwIiA6ICI9bSIgKF9fY3cpKTsgX19jd3RtcCA9 IChfX2N3ICYgMHhmM2ZmKSB8IDB4MDQwMDsgX19hc20gX192b2xhdGlsZSAoImZsZGN3ICUwIiA6 IDogIm0iIChfX2N3dG1wKSk7IF9fYXNtIF9fdm9sYXRpbGUgKCJmcm5kaW50IiA6ICI9dCIgKF9f dmFsdWUpIDogIjAiIChfX3gpKTsgX19hc20gX192b2xhdGlsZSAoImZsZGN3ICUwIiA6IDogIm0i IChfX2N3KSk7IHJldHVybiBfX3ZhbHVlOyB9IF9faW5saW5lIGxvbmcgZG91YmxlIGZsb29ybCAo bG9uZyBkb3VibGUgX194KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7 IF9fdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgaW50IF9fY3c7IF9fdm9sYXRpbGUgdW5zaWduZWQg c2hvcnQgaW50IF9fY3d0bXA7IF9fYXNtIF9fdm9sYXRpbGUgKCJmbnN0Y3cgJTAiIDogIj1tIiAo X19jdykpOyBfX2N3dG1wID0gKF9fY3cgJiAweGYzZmYpIHwgMHgwNDAwOyBfX2FzbSBfX3ZvbGF0 aWxlICgiZmxkY3cgJTAiIDogOiAibSIgKF9fY3d0bXApKTsgX19hc20gX192b2xhdGlsZSAoImZy bmRpbnQiIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9feCkpOyBfX2FzbSBfX3ZvbGF0aWxlICgi ZmxkY3cgJTAiIDogOiAibSIgKF9fY3cpKTsgcmV0dXJuIF9fdmFsdWU7IH0KIyA1NTMgIi91c3Iv aW5jbHVkZS9iaXRzL21hdGhpbmxpbmUuaCIgMwpfX2lubGluZSBkb3VibGUgY2VpbCAoZG91Ymxl IF9feCkgdGhyb3cgKCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOyBfX3ZvbGF0aWxl IHVuc2lnbmVkIHNob3J0IGludCBfX2N3OyBfX3ZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IGludCBf X2N3dG1wOyBfX2FzbSBfX3ZvbGF0aWxlICgiZm5zdGN3ICUwIiA6ICI9bSIgKF9fY3cpKTsgX19j d3RtcCA9IChfX2N3ICYgMHhmM2ZmKSB8IDB4MDgwMDsgX19hc20gX192b2xhdGlsZSAoImZsZGN3 ICUwIiA6IDogIm0iIChfX2N3dG1wKSk7IF9fYXNtIF9fdm9sYXRpbGUgKCJmcm5kaW50IiA6ICI9 dCIgKF9fdmFsdWUpIDogIjAiIChfX3gpKTsgX19hc20gX192b2xhdGlsZSAoImZsZGN3ICUwIiA6 IDogIm0iIChfX2N3KSk7IHJldHVybiBfX3ZhbHVlOyB9IF9faW5saW5lIGZsb2F0IGNlaWxmIChm bG9hdCBfX3gpIHRocm93ICgpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgX192b2xh dGlsZSB1bnNpZ25lZCBzaG9ydCBpbnQgX19jdzsgX192b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCBp bnQgX19jd3RtcDsgX19hc20gX192b2xhdGlsZSAoImZuc3RjdyAlMCIgOiAiPW0iIChfX2N3KSk7 IF9fY3d0bXAgPSAoX19jdyAmIDB4ZjNmZikgfCAweDA4MDA7IF9fYXNtIF9fdm9sYXRpbGUgKCJm bGRjdyAlMCIgOiA6ICJtIiAoX19jd3RtcCkpOyBfX2FzbSBfX3ZvbGF0aWxlICgiZnJuZGludCIg OiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAoX194KSk7IF9fYXNtIF9fdm9sYXRpbGUgKCJmbGRjdyAl MCIgOiA6ICJtIiAoX19jdykpOyByZXR1cm4gX192YWx1ZTsgfSBfX2lubGluZSBsb25nIGRvdWJs ZSBjZWlsbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGxvbmcgZG91Ymxl IF9fdmFsdWU7IF9fdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgaW50IF9fY3c7IF9fdm9sYXRpbGUg dW5zaWduZWQgc2hvcnQgaW50IF9fY3d0bXA7IF9fYXNtIF9fdm9sYXRpbGUgKCJmbnN0Y3cgJTAi IDogIj1tIiAoX19jdykpOyBfX2N3dG1wID0gKF9fY3cgJiAweGYzZmYpIHwgMHgwODAwOyBfX2Fz bSBfX3ZvbGF0aWxlICgiZmxkY3cgJTAiIDogOiAibSIgKF9fY3d0bXApKTsgX19hc20gX192b2xh dGlsZSAoImZybmRpbnQiIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9feCkpOyBfX2FzbSBfX3Zv bGF0aWxlICgiZmxkY3cgJTAiIDogOiAibSIgKF9fY3cpKTsgcmV0dXJuIF9fdmFsdWU7IH0KIyA1 NzEgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhpbmxpbmUuaCIgMwpfX2lubGluZSBkb3VibGUKbGRl eHAgKGRvdWJsZSBfX3gsIGludCBfX3kpIHRocm93ICgpCnsKICByZWdpc3RlciBsb25nIGRvdWJs ZSBfX3ZhbHVlOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmc2NhbGUiIDogIj10IiAoX192YWx1ZSkg OiAiMCIgKF9feCksICJ1IiAoKGxvbmcgZG91YmxlKSBfX3kpKTsgcmV0dXJuIF9fdmFsdWU7Cn0K IyA1ODkgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhpbmxpbmUuaCIgMwpfX2lubGluZSBkb3VibGUg bG9nMXAgKGRvdWJsZSBfX3gpIHRocm93ICgpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1 ZTsgaWYgKF9fZmFic2wgKF9feCkgPj0gMS4wIC0gMC41ICogMS40MTQyMTM1NjIzNzMwOTUwNDg4 MEwpIF9fdmFsdWUgPSBsb2dsICgxLjAgKyBfX3gpOyBlbHNlIF9fYXNtIF9fdm9sYXRpbGVfXyAo ImZsZGxuMlxuXHQiICJmeGNoXG5cdCIgImZ5bDJ4cDEiIDogIj10IiAoX192YWx1ZSkgOiAiMCIg KF9feCkgOiAic3QoMSkiKTsgcmV0dXJuIF9fdmFsdWU7IH0gX19pbmxpbmUgZmxvYXQgbG9nMXBm IChmbG9hdCBfX3gpIHRocm93ICgpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgaWYg KF9fZmFic2wgKF9feCkgPj0gMS4wIC0gMC41ICogMS40MTQyMTM1NjIzNzMwOTUwNDg4MEwpIF9f dmFsdWUgPSBsb2dsICgxLjAgKyBfX3gpOyBlbHNlIF9fYXNtIF9fdm9sYXRpbGVfXyAoImZsZGxu MlxuXHQiICJmeGNoXG5cdCIgImZ5bDJ4cDEiIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9feCkg OiAic3QoMSkiKTsgcmV0dXJuIF9fdmFsdWU7IH0gX19pbmxpbmUgbG9uZyBkb3VibGUgbG9nMXBs IChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1 ZTsgaWYgKF9fZmFic2wgKF9feCkgPj0gMS4wIC0gMC41ICogMS40MTQyMTM1NjIzNzMwOTUwNDg4 MEwpIF9fdmFsdWUgPSBsb2dsICgxLjAgKyBfX3gpOyBlbHNlIF9fYXNtIF9fdm9sYXRpbGVfXyAo ImZsZGxuMlxuXHQiICJmeGNoXG5cdCIgImZ5bDJ4cDEiIDogIj10IiAoX192YWx1ZSkgOiAiMCIg KF9feCkgOiAic3QoMSkiKTsgcmV0dXJuIF9fdmFsdWU7IH0KIyA2MDMgIi91c3IvaW5jbHVkZS9i aXRzL21hdGhpbmxpbmUuaCIgMwpfX2lubGluZSBkb3VibGUgYXNpbmggKGRvdWJsZSBfX3gpIHRo cm93ICgpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX195ID0gX19mYWJzbCAoX194KTsgcmV0dXJu IChsb2cxcGwgKF9feSAqIF9feSAvIChfX3NxcnRsIChfX3kgKiBfX3kgKyAxLjApICsgMS4wKSAr IF9feSkgKiBfX3NnbjFsIChfX3gpKTsgfSBfX2lubGluZSBmbG9hdCBhc2luaGYgKGZsb2F0IF9f eCkgdGhyb3cgKCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3kgPSBfX2ZhYnNsIChfX3gpOyBy ZXR1cm4gKGxvZzFwbCAoX195ICogX195IC8gKF9fc3FydGwgKF9feSAqIF9feSArIDEuMCkgKyAx LjApICsgX195KSAqIF9fc2duMWwgKF9feCkpOyB9IF9faW5saW5lIGxvbmcgZG91YmxlIGFzaW5o bCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9feSA9 IF9fZmFic2wgKF9feCk7IHJldHVybiAobG9nMXBsIChfX3kgKiBfX3kgLyAoX19zcXJ0bCAoX195 ICogX195ICsgMS4wKSArIDEuMCkgKyBfX3kpICogX19zZ24xbCAoX194KSk7IH0KCgoKCl9faW5s aW5lIGRvdWJsZSBhY29zaCAoZG91YmxlIF9feCkgdGhyb3cgKCkgeyByZXR1cm4gbG9nbCAoX194 ICsgX19zcXJ0bCAoX194IC0gMS4wKSAqIF9fc3FydGwgKF9feCArIDEuMCkpOyB9IF9faW5saW5l IGZsb2F0IGFjb3NoZiAoZmxvYXQgX194KSB0aHJvdyAoKSB7IHJldHVybiBsb2dsIChfX3ggKyBf X3NxcnRsIChfX3ggLSAxLjApICogX19zcXJ0bCAoX194ICsgMS4wKSk7IH0gX19pbmxpbmUgbG9u ZyBkb3VibGUgYWNvc2hsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpIHsgcmV0dXJuIGxvZ2wg KF9feCArIF9fc3FydGwgKF9feCAtIDEuMCkgKiBfX3NxcnRsIChfX3ggKyAxLjApKTsgfQoKCl9f aW5saW5lIGRvdWJsZSBhdGFuaCAoZG91YmxlIF9feCkgdGhyb3cgKCkgeyByZWdpc3RlciBsb25n IGRvdWJsZSBfX3kgPSBfX2ZhYnNsIChfX3gpOyByZXR1cm4gLTAuNSAqIGxvZzFwbCAoLShfX3kg KyBfX3kpIC8gKDEuMCArIF9feSkpICogX19zZ24xbCAoX194KTsgfSBfX2lubGluZSBmbG9hdCBh dGFuaGYgKGZsb2F0IF9feCkgdGhyb3cgKCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3kgPSBf X2ZhYnNsIChfX3gpOyByZXR1cm4gLTAuNSAqIGxvZzFwbCAoLShfX3kgKyBfX3kpIC8gKDEuMCAr IF9feSkpICogX19zZ24xbCAoX194KTsgfSBfX2lubGluZSBsb25nIGRvdWJsZSBhdGFuaGwgKGxv bmcgZG91YmxlIF9feCkgdGhyb3cgKCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3kgPSBfX2Zh YnNsIChfX3gpOyByZXR1cm4gLTAuNSAqIGxvZzFwbCAoLShfX3kgKyBfX3kpIC8gKDEuMCArIF9f eSkpICogX19zZ24xbCAoX194KTsgfQoKCgoKX19pbmxpbmUgZG91YmxlIGh5cG90IChkb3VibGUg X194LCBkb3VibGUgX195KSB0aHJvdyAoKSB7IHJldHVybiBfX3NxcnRsIChfX3ggKiBfX3ggKyBf X3kgKiBfX3kpOyB9IF9faW5saW5lIGZsb2F0IGh5cG90ZiAoZmxvYXQgX194LCBmbG9hdCBfX3kp IHRocm93ICgpIHsgcmV0dXJuIF9fc3FydGwgKF9feCAqIF9feCArIF9feSAqIF9feSk7IH0gX19p bmxpbmUgbG9uZyBkb3VibGUgaHlwb3RsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9f eSkgdGhyb3cgKCkgeyByZXR1cm4gX19zcXJ0bCAoX194ICogX194ICsgX195ICogX195KTsgfQoK X19pbmxpbmUgZG91YmxlIGxvZ2IgKGRvdWJsZSBfX3gpIHRocm93ICgpIHsgcmVnaXN0ZXIgbG9u ZyBkb3VibGUgX192YWx1ZTsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX19qdW5rOyBfX2FzbSBfX3Zv bGF0aWxlX18gKCJmeHRyYWN0XG5cdCIgOiAiPXQiIChfX2p1bmspLCAiPXUiIChfX3ZhbHVlKSA6 ICIwIiAoX194KSk7IHJldHVybiBfX3ZhbHVlOyB9IF9faW5saW5lIGZsb2F0IGxvZ2JmIChmbG9h dCBfX3gpIHRocm93ICgpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgcmVnaXN0ZXIg bG9uZyBkb3VibGUgX19qdW5rOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmeHRyYWN0XG5cdCIgOiAi PXQiIChfX2p1bmspLCAiPXUiIChfX3ZhbHVlKSA6ICIwIiAoX194KSk7IHJldHVybiBfX3ZhbHVl OyB9IF9faW5saW5lIGxvbmcgZG91YmxlIGxvZ2JsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgp IHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX19q dW5rOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmeHRyYWN0XG5cdCIgOiAiPXQiIChfX2p1bmspLCAi PXUiIChfX3ZhbHVlKSA6ICIwIiAoX194KSk7IHJldHVybiBfX3ZhbHVlOyB9CiMgNjMzICIvdXNy L2luY2x1ZGUvYml0cy9tYXRoaW5saW5lLmgiIDMKX19pbmxpbmUgZmxvYXQKbGRleHBmIChmbG9h dCBfX3gsIGludCBfX3kpIHRocm93ICgpCnsKICByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVl OyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmc2NhbGUiIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9f eCksICJ1IiAoKGxvbmcgZG91YmxlKSBfX3kpKTsgcmV0dXJuIF9fdmFsdWU7Cn0KCl9faW5saW5l IGxvbmcgZG91YmxlCmxkZXhwbCAobG9uZyBkb3VibGUgX194LCBpbnQgX195KSB0aHJvdyAoKQp7 CiAgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgX19hc20gX192b2xhdGlsZV9fICgiZnNj YWxlIiA6ICI9dCIgKF9fdmFsdWUpIDogIjAiIChfX3gpLCAidSIgKChsb25nIGRvdWJsZSkgX195 KSk7IHJldHVybiBfX3ZhbHVlOwp9CiMgNjU3ICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoaW5saW5l LmgiIDMKX19pbmxpbmUgbG9uZyBpbnQKbHJpbnRmIChmbG9hdCBfX3gpIHRocm93ICgpCnsKICBs b25nIGludCBfX2xyaW50cmVzOyBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImZpc3RwbCAlMCIgOiAi PW0iIChfX2xyaW50cmVzKSA6ICJ0IiAoX194KSA6ICJzdCIpOyByZXR1cm4gX19scmludHJlczsK fQpfX2lubGluZSBsb25nIGludApscmludCAoZG91YmxlIF9feCkgdGhyb3cgKCkKewogIGxvbmcg aW50IF9fbHJpbnRyZXM7IF9fYXNtX18gX192b2xhdGlsZV9fICgiZmlzdHBsICUwIiA6ICI9bSIg KF9fbHJpbnRyZXMpIDogInQiIChfX3gpIDogInN0Iik7IHJldHVybiBfX2xyaW50cmVzOwp9Cl9f aW5saW5lIGxvbmcgaW50CmxyaW50bCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKQp7CiAgbG9u ZyBpbnQgX19scmludHJlczsgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJmaXN0cGwgJTAiIDogIj1t IiAoX19scmludHJlcykgOiAidCIgKF9feCkgOiAic3QiKTsgcmV0dXJuIF9fbHJpbnRyZXM7Cn0K IyA2ODAgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhpbmxpbmUuaCIgMwpfX2lubGluZSBsb25nIGxv bmcgaW50CmxscmludGYgKGZsb2F0IF9feCkgdGhyb3cgKCkKewogIGxvbmcgbG9uZyBpbnQgX19s bHJpbnRyZXM7IF9fYXNtX18gX192b2xhdGlsZV9fICgiZmlzdHBsbCAlMCIgOiAiPW0iIChfX2xs cmludHJlcykgOiAidCIgKF9feCkgOiAic3QiKTsgcmV0dXJuIF9fbGxyaW50cmVzOwp9Cl9faW5s aW5lIGxvbmcgbG9uZyBpbnQKbGxyaW50IChkb3VibGUgX194KSB0aHJvdyAoKQp7CiAgbG9uZyBs b25nIGludCBfX2xscmludHJlczsgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJmaXN0cGxsICUwIiA6 ICI9bSIgKF9fbGxyaW50cmVzKSA6ICJ0IiAoX194KSA6ICJzdCIpOyByZXR1cm4gX19sbHJpbnRy ZXM7Cn0KX19pbmxpbmUgbG9uZyBsb25nIGludApsbHJpbnRsIChsb25nIGRvdWJsZSBfX3gpIHRo cm93ICgpCnsKICBsb25nIGxvbmcgaW50IF9fbGxyaW50cmVzOyBfX2FzbV9fIF9fdm9sYXRpbGVf XyAoImZpc3RwbGwgJTAiIDogIj1tIiAoX19sbHJpbnRyZXMpIDogInQiIChfX3gpIDogInN0Iik7 IHJldHVybiBfX2xscmludHJlczsKfQoKCgoKCgoKX19pbmxpbmUgZG91YmxlIGRyZW0gKGRvdWJs ZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93ICgpIHsgcmVnaXN0ZXIgZG91YmxlIF9fdmFsdWU7IHJl Z2lzdGVyIGludCBfX2Nsb2JiZXJlZDsgX19hc20gX192b2xhdGlsZV9fICgiMToJZnByZW0xXG5c dCIgImZzdHN3CSUlYXhcblx0IiAic2FoZlxuXHQiICJqcAkxYiIgOiAiPXQiIChfX3ZhbHVlKSwg Ij0mYSIgKF9fY2xvYmJlcmVkKSA6ICIwIiAoX194KSwgInUiIChfX3kpIDogImNjIik7IHJldHVy biBfX3ZhbHVlOyB9IF9faW5saW5lIGZsb2F0IGRyZW1mIChmbG9hdCBfX3gsIGZsb2F0IF9feSkg dGhyb3cgKCkgeyByZWdpc3RlciBkb3VibGUgX192YWx1ZTsgcmVnaXN0ZXIgaW50IF9fY2xvYmJl cmVkOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCIxOglmcHJlbTFcblx0IiAiZnN0c3cJJSVheFxuXHQi ICJzYWhmXG5cdCIgImpwCTFiIiA6ICI9dCIgKF9fdmFsdWUpLCAiPSZhIiAoX19jbG9iYmVyZWQp IDogIjAiIChfX3gpLCAidSIgKF9feSkgOiAiY2MiKTsgcmV0dXJuIF9fdmFsdWU7IH0gX19pbmxp bmUgbG9uZyBkb3VibGUgZHJlbWwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0 aHJvdyAoKSB7IHJlZ2lzdGVyIGRvdWJsZSBfX3ZhbHVlOyByZWdpc3RlciBpbnQgX19jbG9iYmVy ZWQ7IF9fYXNtIF9fdm9sYXRpbGVfXyAoIjE6CWZwcmVtMVxuXHQiICJmc3RzdwklJWF4XG5cdCIg InNhaGZcblx0IiAianAJMWIiIDogIj10IiAoX192YWx1ZSksICI9JmEiIChfX2Nsb2JiZXJlZCkg OiAiMCIgKF9feCksICJ1IiAoX195KSA6ICJjYyIpOyByZXR1cm4gX192YWx1ZTsgfQojIDcxNSAi L3Vzci9pbmNsdWRlL2JpdHMvbWF0aGlubGluZS5oIiAzCl9faW5saW5lIGludApfX2Zpbml0ZSAo ZG91YmxlIF9feCkgdGhyb3cgKCkKewogIHJldHVybiAoX19leHRlbnNpb25fXwogICAgICAgICAg KCgoKCh1bmlvbiB7IGRvdWJsZSBfX2Q7IGludCBfX2lbMl07IH0pIHtfX2Q6IF9feH0pLl9faVsx XQogICAgICAgICAgICAgfCAweDgwMGZmZmZmdSkgKyAxKSA+PiAzMSkpOwp9CiMgMzUxICIvdXNy L2luY2x1ZGUvbWF0aC5oIiAyIDMKIyA0MTEgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDMKfQojIDUy ICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL2NtYXRoIiAyIDMKIyA3OSAiL3Vzci9pbmNsdWRlL2Mr Ky8zLjIuMS9jbWF0aCIgMwpuYW1lc3BhY2Ugc3RkCnsKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9U cD4gX1RwIF9fY21hdGhfcG93ZXIoX1RwLCB1bnNpZ25lZCBpbnQpOwoKICBpbmxpbmUgZG91Ymxl CiAgYWJzKGRvdWJsZSBfX3gpCiAgeyByZXR1cm4gX19idWlsdGluX2ZhYnMoX194KTsgfQoKICBp bmxpbmUgZmxvYXQKICBhYnMoZmxvYXQgX194KQogIHsgcmV0dXJuIF9fYnVpbHRpbl9mYWJzZihf X3gpOyB9CgogIGlubGluZSBsb25nIGRvdWJsZQogIGFicyhsb25nIGRvdWJsZSBfX3gpCiAgeyBy ZXR1cm4gX19idWlsdGluX2ZhYnNsKF9feCk7IH0KCgogIGlubGluZSBmbG9hdAogIGFjb3MoZmxv YXQgX194KSB7IHJldHVybiA6OmFjb3NmKF9feCk7IH0KCgoKCgogIHVzaW5nIDo6YWNvczsKCgog IGlubGluZSBsb25nIGRvdWJsZQogIGFjb3MobG9uZyBkb3VibGUgX194KSB7IHJldHVybiA6OmFj b3NsKF9feCk7IH0KCgoKCgogIHVzaW5nIDo6YXNpbjsKCgogIGlubGluZSBmbG9hdAogIGFzaW4o ZmxvYXQgX194KSB7IHJldHVybiA6OmFzaW5mKF9feCk7IH0KCgoKCgoKICBpbmxpbmUgbG9uZyBk b3VibGUKICBhc2luKGxvbmcgZG91YmxlIF9feCkgeyByZXR1cm4gOjphc2lubChfX3gpOyB9CgoK CgoKICB1c2luZyA6OmF0YW47CgoKICBpbmxpbmUgZmxvYXQKICBhdGFuKGZsb2F0IF9feCkgeyBy ZXR1cm4gOjphdGFuZihfX3gpOyB9CgoKCgoKCiAgaW5saW5lIGxvbmcgZG91YmxlCiAgYXRhbihs b25nIGRvdWJsZSBfX3gpIHsgcmV0dXJuIDo6YXRhbmwoX194KTsgfQoKCgoKCiAgdXNpbmcgOjph dGFuMjsKCgogIGlubGluZSBmbG9hdAogIGF0YW4yKGZsb2F0IF9feSwgZmxvYXQgX194KSB7IHJl dHVybiA6OmF0YW4yZihfX3ksIF9feCk7IH0KCgoKCgoKCiAgaW5saW5lIGxvbmcgZG91YmxlCiAg YXRhbjIobG9uZyBkb3VibGUgX195LCBsb25nIGRvdWJsZSBfX3gpIHsgcmV0dXJuIDo6YXRhbjJs KF9feSwgX194KTsgfQoKCgoKCgogIHVzaW5nIDo6Y2VpbDsKCgogIGlubGluZSBmbG9hdAogIGNl aWwoZmxvYXQgX194KSB7IHJldHVybiA6OmNlaWxmKF9feCk7IH0KCgoKCgoKICBpbmxpbmUgbG9u ZyBkb3VibGUKICBjZWlsKGxvbmcgZG91YmxlIF9feCkgeyByZXR1cm4gOjpjZWlsbChfX3gpOyB9 CgoKCgoKICB1c2luZyA6OmNvczsKCiAgaW5saW5lIGZsb2F0CiAgY29zKGZsb2F0IF9feCkKICB7 IHJldHVybiBfX2J1aWx0aW5fY29zZihfX3gpOyB9CgogIGlubGluZSBsb25nIGRvdWJsZQogIGNv cyhsb25nIGRvdWJsZSBfX3gpCiAgeyByZXR1cm4gX19idWlsdGluX2Nvc2woX194KTsgfQoKICB1 c2luZyA6OmNvc2g7CgoKICBpbmxpbmUgZmxvYXQKICBjb3NoKGZsb2F0IF9feCkgeyByZXR1cm4g Ojpjb3NoZihfX3gpOyB9CgoKCgoKCiAgaW5saW5lIGxvbmcgZG91YmxlCiAgY29zaChsb25nIGRv dWJsZSBfX3gpIHsgcmV0dXJuIDo6Y29zaGwoX194KTsgfQoKCgoKCiAgdXNpbmcgOjpleHA7CgoK ICBpbmxpbmUgZmxvYXQKICBleHAoZmxvYXQgX194KSB7IHJldHVybiA6OmV4cGYoX194KTsgfQoK CgoKCgogIGlubGluZSBsb25nIGRvdWJsZQogIGV4cChsb25nIGRvdWJsZSBfX3gpIHsgcmV0dXJu IDo6ZXhwbChfX3gpOyB9CgoKCgoKICB1c2luZyA6OmZhYnM7CgogIGlubGluZSBmbG9hdAogIGZh YnMoZmxvYXQgX194KQogIHsgcmV0dXJuIF9fYnVpbHRpbl9mYWJzZihfX3gpOyB9CgogIGlubGlu ZSBsb25nIGRvdWJsZQogIGZhYnMobG9uZyBkb3VibGUgX194KQogIHsgcmV0dXJuIF9fYnVpbHRp bl9mYWJzbChfX3gpOyB9CgogIHVzaW5nIDo6Zmxvb3I7CgoKICBpbmxpbmUgZmxvYXQKICBmbG9v cihmbG9hdCBfX3gpIHsgcmV0dXJuIDo6Zmxvb3JmKF9feCk7IH0KCgoKCgoKICBpbmxpbmUgbG9u ZyBkb3VibGUKICBmbG9vcihsb25nIGRvdWJsZSBfX3gpIHsgcmV0dXJuIDo6Zmxvb3JsKF9feCk7 IH0KCgoKCgogIHVzaW5nIDo6Zm1vZDsKCgogIGlubGluZSBmbG9hdAogIGZtb2QoZmxvYXQgX194 LCBmbG9hdCBfX3kpIHsgcmV0dXJuIDo6Zm1vZGYoX194LCBfX3kpOyB9CgoKCgoKCgogIGlubGlu ZSBsb25nIGRvdWJsZQogIGZtb2QobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHsg cmV0dXJuIDo6Zm1vZGwoX194LCBfX3kpOyB9CgoKCgoKCiAgdXNpbmcgOjpmcmV4cDsKCgogIGlu bGluZSBmbG9hdAogIGZyZXhwKGZsb2F0IF9feCwgaW50KiBfX2V4cCkgeyByZXR1cm4gOjpmcmV4 cGYoX194LCBfX2V4cCk7IH0KCgoKCgoKICBpbmxpbmUgbG9uZyBkb3VibGUKICBmcmV4cChsb25n IGRvdWJsZSBfX3gsIGludCogX19leHApIHsgcmV0dXJuIDo6ZnJleHBsKF9feCwgX19leHApOyB9 CgoKCgoKCiAgdXNpbmcgOjpsZGV4cDsKCgogIGlubGluZSBmbG9hdAogIGxkZXhwKGZsb2F0IF9f eCwgaW50IF9fZXhwKSB7IHJldHVybiA6OmxkZXhwZihfX3gsIF9fZXhwKTsgfQoKCgoKCgoKICBp bmxpbmUgbG9uZyBkb3VibGUKICBsZGV4cChsb25nIGRvdWJsZSBfX3gsIGludCBfX2V4cCkgeyBy ZXR1cm4gOjpsZGV4cGwoX194LCBfX2V4cCk7IH0KCgoKCgoKICB1c2luZyA6OmxvZzsKCgogIGlu bGluZSBmbG9hdAogIGxvZyhmbG9hdCBfX3gpIHsgcmV0dXJuIDo6bG9nZihfX3gpOyB9CgoKCgoK CiAgaW5saW5lIGxvbmcgZG91YmxlCiAgbG9nKGxvbmcgZG91YmxlIF9feCkgeyByZXR1cm4gOjps b2dsKF9feCk7IH0KCgoKCgogIHVzaW5nIDo6bG9nMTA7CgoKICBpbmxpbmUgZmxvYXQKICBsb2cx MChmbG9hdCBfX3gpIHsgcmV0dXJuIDo6bG9nMTBmKF9feCk7IH0KCgoKCgoKICBpbmxpbmUgbG9u ZyBkb3VibGUKICBsb2cxMChsb25nIGRvdWJsZSBfX3gpIHsgcmV0dXJuIDo6bG9nMTBsKF9feCk7 IH0KCgoKCgogIHVzaW5nIDo6bW9kZjsKCgogIGlubGluZSBmbG9hdAogIG1vZGYoZmxvYXQgX194 LCBmbG9hdCogX19pcHRyKSB7IHJldHVybiA6Om1vZGZmKF9feCwgX19pcHRyKTsgfQojIDM3NSAi L3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9jbWF0aCIgMwogIGlubGluZSBsb25nIGRvdWJsZQogIG1v ZGYobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSogX19pcHRyKSB7IHJldHVybiA6Om1vZGZs KF9feCwgX19pcHRyKTsgfQojIDM4OCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9jbWF0aCIgMwog IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSBfVHAKICAgIF9fcG93X2hlbHBlcihf VHAgX194LCBpbnQgX19uKQogICAgewogICAgICByZXR1cm4gX19uIDwgMAogICAgICAgID8gX1Rw KDEpL19fY21hdGhfcG93ZXIoX194LCAtX19uKQogICAgICAgIDogX19jbWF0aF9wb3dlcihfX3gs IF9fbik7CiAgICB9CgogIHVzaW5nIDo6cG93OwoKCiAgaW5saW5lIGZsb2F0CiAgcG93KGZsb2F0 IF9feCwgZmxvYXQgX195KSB7IHJldHVybiA6OnBvd2YoX194LCBfX3kpOyB9CgoKCgoKCgogIGlu bGluZSBsb25nIGRvdWJsZQogIHBvdyhsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkg eyByZXR1cm4gOjpwb3dsKF9feCwgX195KTsgfQoKCgoKCgogIGlubGluZSBkb3VibGUKICBwb3co ZG91YmxlIF9feCwgaW50IF9faSkKICB7IHJldHVybiBfX3Bvd19oZWxwZXIoX194LCBfX2kpOyB9 CgogIGlubGluZSBmbG9hdAogIHBvdyhmbG9hdCBfX3gsIGludCBfX24pCiAgeyByZXR1cm4gX19w b3dfaGVscGVyKF9feCwgX19uKTsgfQoKICBpbmxpbmUgbG9uZyBkb3VibGUKICBwb3cobG9uZyBk b3VibGUgX194LCBpbnQgX19uKQogIHsgcmV0dXJuIF9fcG93X2hlbHBlcihfX3gsIF9fbik7IH0K CiAgdXNpbmcgOjpzaW47CgogIGlubGluZSBmbG9hdAogIHNpbihmbG9hdCBfX3gpCiAgeyByZXR1 cm4gX19idWlsdGluX3NpbmYoX194KTsgfQoKICBpbmxpbmUgbG9uZyBkb3VibGUKICBzaW4obG9u ZyBkb3VibGUgX194KQogIHsgcmV0dXJuIF9fYnVpbHRpbl9zaW5sKF9feCk7IH0KCiAgdXNpbmcg OjpzaW5oOwoKCiAgaW5saW5lIGZsb2F0CiAgc2luaChmbG9hdCBfX3gpIHsgcmV0dXJuIDo6c2lu aGYoX194KTsgfQoKCgoKCgogIGlubGluZSBsb25nIGRvdWJsZQogIHNpbmgobG9uZyBkb3VibGUg X194KSB7IHJldHVybiA6OnNpbmhsKF9feCk7IH0KCgoKCgogIHVzaW5nIDo6c3FydDsKCiAgaW5s aW5lIGZsb2F0CiAgc3FydChmbG9hdCBfX3gpCiAgeyByZXR1cm4gX19idWlsdGluX3NxcnRmKF9f eCk7IH0KCiAgaW5saW5lIGxvbmcgZG91YmxlCiAgc3FydChsb25nIGRvdWJsZSBfX3gpCiAgeyBy ZXR1cm4gX19idWlsdGluX3NxcnRsKF9feCk7IH0KCiAgdXNpbmcgOjp0YW47CgoKICBpbmxpbmUg ZmxvYXQKICB0YW4oZmxvYXQgX194KSB7IHJldHVybiA6OnRhbmYoX194KTsgfQoKCgoKCgogIGlu bGluZSBsb25nIGRvdWJsZQogIHRhbihsb25nIGRvdWJsZSBfX3gpIHsgcmV0dXJuIDo6dGFubChf X3gpOyB9CgoKCgoKICB1c2luZyA6OnRhbmg7CgoKICBpbmxpbmUgZmxvYXQKICB0YW5oKGZsb2F0 IF9feCkgeyByZXR1cm4gOjp0YW5oZihfX3gpOyB9CgoKCgoKCiAgaW5saW5lIGxvbmcgZG91Ymxl CiAgdGFuaChsb25nIGRvdWJsZSBfX3gpIHsgcmV0dXJuIDo6dGFuaGwoX194KTsgfQoKCgoKfQoK CgoKCgpuYW1lc3BhY2UgX19nbnVfY3h4CnsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBp bnQKICAgIF9fY2FwdHVyZV9mcGNsYXNzaWZ5KF9UcCBfX2YpIHsgcmV0dXJuIChzaXplb2YgKF9f ZikgPT0gc2l6ZW9mIChmbG9hdCkgPyBfX2ZwY2xhc3NpZnlmIChfX2YpIDogc2l6ZW9mIChfX2Yp ID09IHNpemVvZiAoZG91YmxlKSA/IF9fZnBjbGFzc2lmeSAoX19mKSA6IF9fZnBjbGFzc2lmeWwg KF9fZikpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGludAogICAgX19jYXB0dXJl X2lzZmluaXRlKF9UcCBfX2YpIHsgcmV0dXJuIChzaXplb2YgKF9fZikgPT0gc2l6ZW9mIChmbG9h dCkgPyBfX2Zpbml0ZWYgKF9fZikgOiBzaXplb2YgKF9fZikgPT0gc2l6ZW9mIChkb3VibGUpID8g X19maW5pdGUgKF9fZikgOiBfX2Zpbml0ZWwgKF9fZikpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1l IF9UcD4KICAgIGludAogICAgX19jYXB0dXJlX2lzaW5mKF9UcCBfX2YpIHsgcmV0dXJuIChzaXpl b2YgKF9fZikgPT0gc2l6ZW9mIChmbG9hdCkgPyBfX2lzaW5mZiAoX19mKSA6IHNpemVvZiAoX19m KSA9PSBzaXplb2YgKGRvdWJsZSkgPyBfX2lzaW5mIChfX2YpIDogX19pc2luZmwgKF9fZikpOyB9 CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGludAogICAgX19jYXB0dXJlX2lzbmFuKF9U cCBfX2YpIHsgcmV0dXJuIChzaXplb2YgKF9fZikgPT0gc2l6ZW9mIChmbG9hdCkgPyBfX2lzbmFu ZiAoX19mKSA6IHNpemVvZiAoX19mKSA9PSBzaXplb2YgKGRvdWJsZSkgPyBfX2lzbmFuIChfX2Yp IDogX19pc25hbmwgKF9fZikpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGludAog ICAgX19jYXB0dXJlX2lzbm9ybWFsKF9UcCBfX2YpIHsgcmV0dXJuICgoc2l6ZW9mIChfX2YpID09 IHNpemVvZiAoZmxvYXQpID8gX19mcGNsYXNzaWZ5ZiAoX19mKSA6IHNpemVvZiAoX19mKSA9PSBz aXplb2YgKGRvdWJsZSkgPyBfX2ZwY2xhc3NpZnkgKF9fZikgOiBfX2ZwY2xhc3NpZnlsIChfX2Yp KSA9PSBGUF9OT1JNQUwpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGludAogICAg X19jYXB0dXJlX3NpZ25iaXQoX1RwIF9fZikgeyByZXR1cm4gKHNpemVvZiAoX19mKSA9PSBzaXpl b2YgKGZsb2F0KSA/IF9fc2lnbmJpdGYgKF9fZikgOiBzaXplb2YgKF9fZikgPT0gc2l6ZW9mIChk b3VibGUpID8gX19zaWduYml0IChfX2YpIDogX19zaWduYml0bCAoX19mKSk7IH0KCiAgdGVtcGxh dGU8dHlwZW5hbWUgX1RwPgogICAgaW50CiAgICBfX2NhcHR1cmVfaXNncmVhdGVyKF9UcCBfX2Yx LCBfVHAgX19mMikKICAgIHsgcmV0dXJuIF9fYnVpbHRpbl9pc2dyZWF0ZXIgKF9fZjEsIF9fZjIp OyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgICBpbnQKICAgICBfX2NhcHR1cmVfaXNn cmVhdGVyZXF1YWwoX1RwIF9fZjEsIF9UcCBfX2YyKQogICAgIHsgcmV0dXJuIF9fYnVpbHRpbl9p c2dyZWF0ZXJlcXVhbCAoX19mMSwgX19mMik7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgog ICAgIGludAogICAgIF9fY2FwdHVyZV9pc2xlc3MoX1RwIF9fZjEsIF9UcCBfX2YyKSB7IHJldHVy biBfX2J1aWx0aW5faXNsZXNzIChfX2YxLCBfX2YyKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf VHA+CiAgICAgaW50CiAgICAgX19jYXB0dXJlX2lzbGVzc2VxdWFsKF9UcCBfX2YxLCBfVHAgX19m MikKICAgICB7IHJldHVybiBfX2J1aWx0aW5faXNsZXNzZXF1YWwgKF9fZjEsIF9fZjIpOyB9Cgog IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgICBpbnQKICAgICBfX2NhcHR1cmVfaXNsZXNzZ3Jl YXRlcihfVHAgX19mMSwgX1RwIF9fZjIpCiAgICAgeyByZXR1cm4gX19idWlsdGluX2lzbGVzc2dy ZWF0ZXIgKF9fZjEsIF9fZjIpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgICBpbnQK ICAgICBfX2NhcHR1cmVfaXN1bm9yZGVyZWQoX1RwIF9fZjEsIF9UcCBfX2YyKQogICAgIHsgcmV0 dXJuIF9fYnVpbHRpbl9pc3Vub3JkZXJlZCAoX19mMSwgX19mMik7IH0KfQojIDU4MCAiL3Vzci9p bmNsdWRlL2MrKy8zLjIuMS9jbWF0aCIgMwpuYW1lc3BhY2UgX19nbnVfY3h4CnsKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfVHA+CiAgICBpbnQKICAgIGZwY2xhc3NpZnkoX1RwIF9fZikgeyByZXR1cm4g X19jYXB0dXJlX2ZwY2xhc3NpZnkoX19mKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAg ICBpbnQKICAgIGlzZmluaXRlKF9UcCBfX2YpIHsgcmV0dXJuIF9fY2FwdHVyZV9pc2Zpbml0ZShf X2YpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGludAogICAgaXNpbmYoX1RwIF9f ZikgeyByZXR1cm4gX19jYXB0dXJlX2lzaW5mKF9fZik7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg X1RwPgogICAgaW50CiAgICBpc25hbihfVHAgX19mKSB7IHJldHVybiBfX2NhcHR1cmVfaXNuYW4o X19mKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbnQKICAgIGlzbm9ybWFsKF9U cCBfX2YpIHsgcmV0dXJuIF9fY2FwdHVyZV9pc25vcm1hbChfX2YpOyB9CgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9UcD4KICAgIGludAogICAgc2lnbmJpdChfVHAgX19mKSB7IHJldHVybiBfX2NhcHR1 cmVfc2lnbmJpdChfX2YpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGludAogICAg aXNncmVhdGVyKF9UcCBfX2YxLCBfVHAgX19mMikgeyByZXR1cm4gX19jYXB0dXJlX2lzZ3JlYXRl cihfX2YxLCBfX2YyKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbnQKICAgIGlz Z3JlYXRlcmVxdWFsKF9UcCBfX2YxLCBfVHAgX19mMikKICAgIHsgcmV0dXJuIF9fY2FwdHVyZV9p c2dyZWF0ZXJlcXVhbChfX2YxLCBfX2YyKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAg ICBpbnQKICAgIGlzbGVzcyhfVHAgX19mMSwgX1RwIF9fZjIpIHsgcmV0dXJuIF9fY2FwdHVyZV9p c2xlc3MoX19mMSwgX19mMik7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW50CiAg ICBpc2xlc3NlcXVhbChfVHAgX19mMSwgX1RwIF9fZjIpCiAgICB7IHJldHVybiBfX2NhcHR1cmVf aXNsZXNzZXF1YWwoX19mMSwgX19mMik7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAg aW50CiAgICBpc2xlc3NncmVhdGVyKF9UcCBfX2YxLCBfVHAgX19mMikKICAgIHsgcmV0dXJuIF9f Y2FwdHVyZV9pc2xlc3NncmVhdGVyKF9fZjEsIF9fZjIpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1l IF9UcD4KICAgIGludAogICAgaXN1bm9yZGVyZWQoX1RwIF9fZjEsIF9UcCBfX2YyKQogICAgeyBy ZXR1cm4gX19jYXB0dXJlX2lzdW5vcmRlcmVkKF9fZjEsIF9fZjIpOyB9Cn0KCm5hbWVzcGFjZSBz dGQKewogIHVzaW5nIF9fZ251X2N4eDo6ZnBjbGFzc2lmeTsKICB1c2luZyBfX2dudV9jeHg6Omlz ZmluaXRlOwogIHVzaW5nIF9fZ251X2N4eDo6aXNpbmY7CiAgdXNpbmcgX19nbnVfY3h4Ojppc25h bjsKICB1c2luZyBfX2dudV9jeHg6Omlzbm9ybWFsOwogIHVzaW5nIF9fZ251X2N4eDo6c2lnbmJp dDsKICB1c2luZyBfX2dudV9jeHg6OmlzZ3JlYXRlcjsKICB1c2luZyBfX2dudV9jeHg6OmlzZ3Jl YXRlcmVxdWFsOwogIHVzaW5nIF9fZ251X2N4eDo6aXNsZXNzOwogIHVzaW5nIF9fZ251X2N4eDo6 aXNsZXNzZXF1YWw7CiAgdXNpbmcgX19nbnVfY3h4Ojppc2xlc3NncmVhdGVyOwogIHVzaW5nIF9f Z251X2N4eDo6aXN1bm9yZGVyZWQ7Cn0KCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9i aXRzL2NtYXRoLnRjYyIgMSAzCiMgMzUgIi91c3IvaW5jbHVkZS9jKysvMy4yLjEvYml0cy9jbWF0 aC50Y2MiIDMKbmFtZXNwYWNlIHN0ZAp7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgX1Rw CiAgICBfX2NtYXRoX3Bvd2VyKF9UcCBfX3gsIHVuc2lnbmVkIGludCBfX24pCiAgICB7CiAgICAg IF9UcCBfX3kgPSBfX24gJSAyID8gX194IDogMTsKCiAgICAgIHdoaWxlIChfX24gPj49IDEpCiAg ICAgICAgewogICAgICAgICAgX194ID0gX194ICogX194OwogICAgICAgICAgaWYgKF9fbiAlIDIp CiAgICAgICAgICAgIF9feSA9IF9feSAqIF9feDsKICAgICAgICB9CgogICAgICByZXR1cm4gX195 OwogICAgfQp9CiMgNjU1ICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL2NtYXRoIiAyIDMKIyA0MiAi L3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9iaXRzL2xvY2FsZV9mYWNldHMudGNjIiAyIDMKCiMgMSAi L3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9saW1pdHMiIDEgMwojIDQ3ICIvdXNyL2luY2x1ZGUvYysr LzMuMi4xL2xpbWl0cyIgMwoKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL2kzODYtcGMtbGlu dXgtZ251L2JpdHMvY3B1X2xpbWl0cy5oIiAxIDMKIyA0OSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIu MS9saW1pdHMiIDIgMwojIDg4NyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9saW1pdHMiIDMKbmFt ZXNwYWNlIHN0ZAp7CiAgZW51bSBmbG9hdF9yb3VuZF9zdHlsZQogIHsKICAgIHJvdW5kX2luZGV0 ZXJtaW5hdGUgPSAtMSwKICAgIHJvdW5kX3Rvd2FyZF96ZXJvID0gMCwKICAgIHJvdW5kX3RvX25l YXJlc3QgPSAxLAogICAgcm91bmRfdG93YXJkX2luZmluaXR5ID0gMiwKICAgIHJvdW5kX3Rvd2Fy ZF9uZWdfaW5maW5pdHkgPSAzCiAgfTsKCiAgZW51bSBmbG9hdF9kZW5vcm1fc3R5bGUKICB7CiAg ICBkZW5vcm1faW5kZXRlcm1pbmF0ZSA9IC0xLAogICAgZGVub3JtX2Fic2VudCA9IDAsCiAgICBk ZW5vcm1fcHJlc2VudCA9IDEKICB9OwoKCgoKICBzdHJ1Y3QgX19udW1lcmljX2xpbWl0c19iYXNl CiAgewogICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSBmYWxzZTsKCiAgICBz dGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IDA7CiAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0czEw ID0gMDsKICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IGZhbHNlOwogICAgc3RhdGlj IGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IGZhbHNlOwogICAgc3RhdGljIGNvbnN0IGJvb2wgaXNf ZXhhY3QgPSBmYWxzZTsKICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAwOwoKICAgIHN0YXRp YyBjb25zdCBpbnQgbWluX2V4cG9uZW50ID0gMDsKICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4 cG9uZW50MTAgPSAwOwogICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSAwOwogICAg c3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDA7CgogICAgc3RhdGljIGNvbnN0IGJv b2wgaGFzX2luZmluaXR5ID0gZmFsc2U7CiAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRf TmFOID0gZmFsc2U7CiAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGZh bHNlOwogICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtID0gZGVu b3JtX2Fic2VudDsKICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNl OwoKICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IGZhbHNlOwogICAgc3RhdGljIGNv bnN0IGJvb2wgaXNfYm91bmRlZCA9IGZhbHNlOwogICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9k dWxvID0gZmFsc2U7CgogICAgc3RhdGljIGNvbnN0IGJvb2wgdHJhcHMgPSBmYWxzZTsKICAgIHN0 YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOwogICAgc3RhdGljIGNvbnN0 IGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxlID0gcm91bmRfdG93YXJkX3plcm87CiAgfTsK CiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgc3RydWN0IG51bWVyaWNfbGltaXRzIDogcHVi bGljIF9fbnVtZXJpY19saW1pdHNfYmFzZQogICAgewogICAgICBzdGF0aWMgX1RwIG1pbigpIHRo cm93KCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8X1RwPigwKTsgfQogICAgICBzdGF0aWMgX1RwIG1h eCgpIHRocm93KCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8X1RwPigwKTsgfQogICAgICBzdGF0aWMg X1RwIGVwc2lsb24oKSB0aHJvdygpIHsgcmV0dXJuIHN0YXRpY19jYXN0PF9UcD4oMCk7IH0KICAg ICAgc3RhdGljIF9UcCByb3VuZF9lcnJvcigpIHRocm93KCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8 X1RwPigwKTsgfQogICAgICBzdGF0aWMgX1RwIGluZmluaXR5KCkgdGhyb3coKSB7IHJldHVybiBz dGF0aWNfY2FzdDxfVHA+KDApOyB9CiAgICAgIHN0YXRpYyBfVHAgcXVpZXRfTmFOKCkgdGhyb3co KSB7IHJldHVybiBzdGF0aWNfY2FzdDxfVHA+KDApOyB9CiAgICAgIHN0YXRpYyBfVHAgc2lnbmFs aW5nX05hTigpIHRocm93KCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8X1RwPigwKTsgfQogICAgICBz dGF0aWMgX1RwIGRlbm9ybV9taW4oKSB0aHJvdygpIHsgcmV0dXJuIHN0YXRpY19jYXN0PF9UcD4o MCk7IH0KICAgIH07CgoKCiAgdGVtcGxhdGU8PgogICAgc3RydWN0IG51bWVyaWNfbGltaXRzPGJv b2w+CiAgICB7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsK CiAgICAgIHN0YXRpYyBib29sIG1pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gZmFsc2U7IH0K CiAgICAgIHN0YXRpYyBib29sIG1heCgpIHRocm93KCkKICAgICAgeyByZXR1cm4gdHJ1ZTsgfQoK ICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMgPSAxOwogICAgICBzdGF0aWMgY29uc3QgaW50 IGRpZ2l0czEwID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gZmFsc2U7 CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIgPSB0cnVlOwogICAgICBzdGF0aWMg Y29uc3QgYm9vbCBpc19leGFjdCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXgg PSAyOwogICAgICBzdGF0aWMgYm9vbCBlcHNpbG9uKCkgdGhyb3coKQogICAgICB7IHJldHVybiBm YWxzZTsgfQogICAgICBzdGF0aWMgYm9vbCByb3VuZF9lcnJvcigpIHRocm93KCkKICAgICAgeyBy ZXR1cm4gZmFsc2U7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50ID0gMDsK ICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9IDA7CiAgICAgIHN0YXRpYyBj b25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhw b25lbnQxMCA9IDA7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxz ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNlOwogICAgICBz dGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMg Y29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1fYWJzZW50OwogICAg ICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3MgPSBmYWxzZTsKCiAgICAgIHN0YXRp YyBib29sIGluZmluaXR5KCkgdGhyb3coKQogICAgICB7IHJldHVybiBmYWxzZTsgfQogICAgICBz dGF0aWMgYm9vbCBxdWlldF9OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIGZhbHNlOyB9CiAg ICAgIHN0YXRpYyBib29sIHNpZ25hbGluZ19OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIGZh bHNlOyB9CiAgICAgIHN0YXRpYyBib29sIGRlbm9ybV9taW4oKSB0aHJvdygpCiAgICAgIHsgcmV0 dXJuIGZhbHNlOyB9CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSBmYWxzZTsK ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7CiAgICAgIHN0YXRpYyBj b25zdCBib29sIGlzX21vZHVsbyA9IGZhbHNlOwoKCgoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wg dHJhcHMgPSB0cnVlCiAgICAgICAgICAgICAgIHx8IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBi b29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91 bmRfc3R5bGUgcm91bmRfc3R5bGUgPSByb3VuZF90b3dhcmRfemVybzsKICAgIH07CgoKCiAgdGVt cGxhdGU8PgogICAgc3RydWN0IG51bWVyaWNfbGltaXRzPGNoYXI+CiAgICB7CiAgICAgIHN0YXRp YyBjb25zdCBib29sIGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyBjaGFyIG1p bigpIHRocm93KCkKICAgICAgeyByZXR1cm4gKGNoYXIpKC0xMjcgLSAxKTsgfQogICAgICBzdGF0 aWMgY2hhciBtYXgoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIChjaGFyKTEyNzsgfQoKICAgICAg c3RhdGljIGNvbnN0IGludCBkaWdpdHMgPSA3OwogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0 czEwID0gMjsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gdHJ1ZTsKICAgICAg c3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBi b29sIGlzX2V4YWN0ID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9IDI7CiAg ICAgIHN0YXRpYyBjaGFyIGVwc2lsb24oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIGNoYXIoKTsg fQogICAgICBzdGF0aWMgY2hhciByb3VuZF9lcnJvcigpIHRocm93KCkKICAgICAgeyByZXR1cm4g Y2hhcigpOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9IDA7CiAgICAg IHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAwOwogICAgICBzdGF0aWMgY29uc3Qg aW50IG1heF9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50 MTAgPSAwOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7CiAg ICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsKICAgICAgc3RhdGlj IGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0 IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtID0gZGVub3JtX2Fic2VudDsKICAgICAgc3Rh dGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7CgogICAgICBzdGF0aWMgY2hh ciBpbmZpbml0eSgpIHRocm93KCkKICAgICAgeyByZXR1cm4gY2hhcigpOyB9CiAgICAgIHN0YXRp YyBjaGFyIHF1aWV0X05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gY2hhcigpOyB9CiAgICAg IHN0YXRpYyBjaGFyIHNpZ25hbGluZ19OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIGNoYXIo KTsgfQogICAgICBzdGF0aWMgY2hhciBkZW5vcm1fbWluKCkgdGhyb3coKQogICAgICB7IHJldHVy biBzdGF0aWNfY2FzdDxjaGFyPigwKTsgfQoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaWVj NTU5ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2JvdW5kZWQgPSB0cnVlOwog ICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSB0cnVlOwoKICAgICAgc3RhdGljIGNv bnN0IGJvb2wgdHJhcHMgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVzc19i ZWZvcmUgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5k X3N0eWxlID0gcm91bmRfdG93YXJkX3plcm87CiAgICB9OwojIDEwNzEgIi91c3IvaW5jbHVkZS9j KysvMy4yLjEvbGltaXRzIiAzCiAgdGVtcGxhdGU8PgogICAgc3RydWN0IG51bWVyaWNfbGltaXRz PHNpZ25lZCBjaGFyPgogICAgewogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXpl ZCA9IHRydWU7CgogICAgICBzdGF0aWMgc2lnbmVkIGNoYXIgbWluKCkgdGhyb3coKQogICAgICB7 IHJldHVybiAoLTEyNyAtIDEpOyB9CiAgICAgIHN0YXRpYyBzaWduZWQgY2hhciBtYXgoKSB0aHJv dygpCiAgICAgIHsgcmV0dXJuIDEyNzsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMg PSA3OwogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0czEwID0gMjsKICAgICAgc3RhdGljIGNv bnN0IGJvb2wgaXNfc2lnbmVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50 ZWdlciA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2V4YWN0ID0gdHJ1ZTsKICAg ICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9IDI7CiAgICAgIHN0YXRpYyBzaWduZWQgY2hhciBl cHNpbG9uKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwOyB9CiAgICAgIHN0YXRpYyBzaWduZWQg Y2hhciByb3VuZF9lcnJvcigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQoKICAgICAgc3Rh dGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1p bl9leHBvbmVudDEwID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSAw OwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudDEwID0gMDsKCiAgICAgIHN0YXRp YyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9v bCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWdu YWxpbmdfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUg aGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19k ZW5vcm1fbG9zcyA9IGZhbHNlOwoKICAgICAgc3RhdGljIHNpZ25lZCBjaGFyIGluZmluaXR5KCkg dGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxzaWduZWQgY2hhcj4oMCk7IH0KICAg ICAgc3RhdGljIHNpZ25lZCBjaGFyIHF1aWV0X05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4g c3RhdGljX2Nhc3Q8c2lnbmVkIGNoYXI+KDApOyB9CiAgICAgIHN0YXRpYyBzaWduZWQgY2hhciBz aWduYWxpbmdfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxzaWduZWQg Y2hhcj4oMCk7IH0KICAgICAgc3RhdGljIHNpZ25lZCBjaGFyIGRlbm9ybV9taW4oKSB0aHJvdygp CiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHNpZ25lZCBjaGFyPigwKTsgfQoKICAgICAgc3Rh dGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29s IGlzX2JvdW5kZWQgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSB0 cnVlOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdHJhcHMgPSB0cnVlOwogICAgICBzdGF0aWMg Y29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZs b2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxlID0gcm91bmRfdG93YXJkX3plcm87CiAgICB9Owoj IDExMjggIi91c3IvaW5jbHVkZS9jKysvMy4yLjEvbGltaXRzIiAzCiAgdGVtcGxhdGU8PgogICAg c3RydWN0IG51bWVyaWNfbGltaXRzPHVuc2lnbmVkIGNoYXI+CiAgICB7CiAgICAgIHN0YXRpYyBj b25zdCBib29sIGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyB1bnNpZ25lZCBj aGFyIG1pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQogICAgICBzdGF0aWMgdW5zaWdu ZWQgY2hhciBtYXgoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuICgxMjcgKiAyICsgMSk7IH0KCiAg ICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0gODsKICAgICAgc3RhdGljIGNvbnN0IGludCBk aWdpdHMxMCA9IDI7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IGZhbHNlOwog ICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0gdHJ1ZTsKICAgICAgc3RhdGljIGNv bnN0IGJvb2wgaXNfZXhhY3QgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0g MjsKICAgICAgc3RhdGljIHVuc2lnbmVkIGNoYXIgZXBzaWxvbigpIHRocm93KCkKICAgICAgeyBy ZXR1cm4gMDsgfQogICAgICBzdGF0aWMgdW5zaWduZWQgY2hhciByb3VuZF9lcnJvcigpIHRocm93 KCkKICAgICAgeyByZXR1cm4gMDsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25l bnQgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gMDsKICAgICAg c3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50 IG1heF9leHBvbmVudDEwID0gMDsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0 eSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7 CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7CiAgICAg IHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNl bnQ7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOwoKICAg ICAgc3RhdGljIHVuc2lnbmVkIGNoYXIgaW5maW5pdHkoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJu IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KDApOyB9CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBj aGFyIHF1aWV0X05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWdu ZWQgY2hhcj4oMCk7IH0KICAgICAgc3RhdGljIHVuc2lnbmVkIGNoYXIgc2lnbmFsaW5nX05hTigp IHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oMCk7IH0K ICAgICAgc3RhdGljIHVuc2lnbmVkIGNoYXIgZGVub3JtX21pbigpIHRocm93KCkKICAgICAgeyBy ZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oMCk7IH0KCiAgICAgIHN0YXRpYyBjb25z dCBib29sIGlzX2llYzU1OSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3Vu ZGVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gdHJ1ZTsKCiAg ICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJv b2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3Vu ZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOwogICAgfTsKCgoKCgoKICB0 ZW1wbGF0ZTw+CiAgICBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8d2NoYXJfdD4KICAgIHsKICAgICAg c3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOwoKICAgICAgc3RhdGljIHdj aGFyX3QgbWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiAod2NoYXJfdCkoLTIxNDc0ODM2NDdM IC0gMSk7IH0KICAgICAgc3RhdGljIHdjaGFyX3QgbWF4KCkgdGhyb3coKQogICAgICB7IHJldHVy biAod2NoYXJfdCkyMTQ3NDgzNjQ3TDsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMg PSAzMTsKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9IDk7CiAgICAgIHN0YXRpYyBj b25zdCBib29sIGlzX3NpZ25lZCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2lu dGVnZXIgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IHRydWU7CiAg ICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAyOwogICAgICBzdGF0aWMgd2NoYXJfdCBlcHNp bG9uKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwOyB9CiAgICAgIHN0YXRpYyB3Y2hhcl90IHJv dW5kX2Vycm9yKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwOyB9CgogICAgICBzdGF0aWMgY29u c3QgaW50IG1pbl9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9u ZW50MTAgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDA7CiAgICAg IHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOwoKICAgICAgc3RhdGljIGNvbnN0 IGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19x dWlldF9OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19O YU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVu b3JtID0gZGVub3JtX2Fic2VudDsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9s b3NzID0gZmFsc2U7CgogICAgICBzdGF0aWMgd2NoYXJfdCBpbmZpbml0eSgpIHRocm93KCkKICAg ICAgeyByZXR1cm4gd2NoYXJfdCgpOyB9CiAgICAgIHN0YXRpYyB3Y2hhcl90IHF1aWV0X05hTigp IHRocm93KCkKICAgICAgeyByZXR1cm4gd2NoYXJfdCgpOyB9CiAgICAgIHN0YXRpYyB3Y2hhcl90 IHNpZ25hbGluZ19OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHdjaGFyX3QoKTsgfQogICAg ICBzdGF0aWMgd2NoYXJfdCBkZW5vcm1fbWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiB3Y2hh cl90KCk7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IGZhbHNlOwogICAg ICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0 IGJvb2wgaXNfbW9kdWxvID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0g dHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7CiAg ICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rv d2FyZF96ZXJvOwogICAgfTsKIyAxMjQxICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL2xpbWl0cyIg MwogIHRlbXBsYXRlPD4KICAgIHN0cnVjdCBudW1lcmljX2xpbWl0czxzaG9ydD4KICAgIHsKICAg ICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOwoKICAgICAgc3RhdGlj IHNob3J0IG1pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gKC0zMjc2NyAtIDEpOyB9CiAgICAg IHN0YXRpYyBzaG9ydCBtYXgoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDMyNzY3OyB9CgogICAg ICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IDE1OwogICAgICBzdGF0aWMgY29uc3QgaW50IGRp Z2l0czEwID0gNDsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gdHJ1ZTsKICAg ICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25z dCBib29sIGlzX2V4YWN0ID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9IDI7 CiAgICAgIHN0YXRpYyBzaG9ydCBlcHNpbG9uKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwOyB9 CiAgICAgIHN0YXRpYyBzaG9ydCByb3VuZF9lcnJvcigpIHRocm93KCkKICAgICAgeyByZXR1cm4g MDsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAwOwogICAgICBzdGF0 aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBt YXhfZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudDEwID0g MDsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNlOwogICAgICBz dGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25z dCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9h dF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7CiAgICAgIHN0YXRpYyBj b25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOwoKICAgICAgc3RhdGljIHNob3J0IGlu ZmluaXR5KCkgdGhyb3coKQogICAgICB7IHJldHVybiBzaG9ydCgpOyB9CiAgICAgIHN0YXRpYyBz aG9ydCBxdWlldF9OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHNob3J0KCk7IH0KICAgICAg c3RhdGljIHNob3J0IHNpZ25hbGluZ19OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHNob3J0 KCk7IH0KICAgICAgc3RhdGljIHNob3J0IGRlbm9ybV9taW4oKSB0aHJvdygpCiAgICAgIHsgcmV0 dXJuIHNob3J0KCk7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IHRydWU7 CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2JvdW5kZWQgPSB0cnVlOwogICAgICBzdGF0aWMg Y29uc3QgYm9vbCBpc19tb2R1bG8gPSB0cnVlOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdHJh cHMgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxz ZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxlID0gcm91 bmRfdG93YXJkX3plcm87CiAgICB9OwojIDEyOTggIi91c3IvaW5jbHVkZS9jKysvMy4yLjEvbGlt aXRzIiAzCiAgdGVtcGxhdGU8PgogICAgc3RydWN0IG51bWVyaWNfbGltaXRzPHVuc2lnbmVkIHNo b3J0PgogICAgewogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRydWU7 CgogICAgICBzdGF0aWMgdW5zaWduZWQgc2hvcnQgbWluKCkgdGhyb3coKQogICAgICB7IHJldHVy biAwOyB9CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCBtYXgoKSB0aHJvdygpCiAgICAgIHsg cmV0dXJuICgzMjc2NyAqIDIgKyAxKTsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMg PSAxNjsKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9IDQ7CiAgICAgIHN0YXRpYyBj b25zdCBib29sIGlzX3NpZ25lZCA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19p bnRlZ2VyID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSB0cnVlOwog ICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMjsKICAgICAgc3RhdGljIHVuc2lnbmVkIHNo b3J0IGVwc2lsb24oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7IH0KICAgICAgc3RhdGljIHVu c2lnbmVkIHNob3J0IHJvdW5kX2Vycm9yKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwOyB9Cgog ICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25z dCBpbnQgbWluX2V4cG9uZW50MTAgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBv bmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOwoKICAg ICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBj b25zdCBib29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wg aGFzX3NpZ25hbGluZ19OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9y bV9zdHlsZSBoYXNfZGVub3JtID0gZGVub3JtX2Fic2VudDsKICAgICAgc3RhdGljIGNvbnN0IGJv b2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7CgogICAgICBzdGF0aWMgdW5zaWduZWQgc2hvcnQg aW5maW5pdHkoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIHNo b3J0PigwKTsgfQogICAgICBzdGF0aWMgdW5zaWduZWQgc2hvcnQgcXVpZXRfTmFOKCkgdGhyb3co KQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9ydD4oMCk7IH0KICAgICAg c3RhdGljIHVuc2lnbmVkIHNob3J0IHNpZ25hbGluZ19OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0 dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0PigwKTsgfQogICAgICBzdGF0aWMgdW5zaWdu ZWQgc2hvcnQgZGVub3JtX21pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8 dW5zaWduZWQgc2hvcnQ+KDApOyB9CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkg PSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsKICAgICAg c3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyBjb25zdCBi b29sIHRyYXBzID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3Jl ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHls ZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOwogICAgfTsKCgoKCgoKICB0ZW1wbGF0ZTw+CiAgICBzdHJ1 Y3QgbnVtZXJpY19saW1pdHM8aW50PgogICAgewogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19z cGVjaWFsaXplZCA9IHRydWU7CgogICAgICBzdGF0aWMgaW50IG1pbigpIHRocm93KCkKICAgICAg eyByZXR1cm4gKGludCkoLTIxNDc0ODM2NDdMIC0gMSk7IH0KICAgICAgc3RhdGljIGludCBtYXgo KSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIChpbnQpMjE0NzQ4MzY0N0w7IH0KCiAgICAgIHN0YXRp YyBjb25zdCBpbnQgZGlnaXRzID0gMzE7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAg PSA5OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zaWduZWQgPSB0cnVlOwogICAgICBzdGF0 aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wg aXNfZXhhY3QgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMjsKICAgICAg c3RhdGljIGludCBlcHNpbG9uKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwOyB9CiAgICAgIHN0 YXRpYyBpbnQgcm91bmRfZXJyb3IoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7IH0KCiAgICAg IHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGlu dCBtaW5fZXhwb25lbnQxMCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50 ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDA7CgogICAgICBz dGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0 IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNf c2lnbmFsaW5nX05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0 eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1fYWJzZW50OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBo YXNfZGVub3JtX2xvc3MgPSBmYWxzZTsKCiAgICAgIHN0YXRpYyBpbnQgaW5maW5pdHkoKSB0aHJv dygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGludD4oMCk7IH0KICAgICAgc3RhdGljIGlu dCBxdWlldF9OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGludD4oMCk7 IH0KICAgICAgc3RhdGljIGludCBzaWduYWxpbmdfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVy biBzdGF0aWNfY2FzdDxpbnQ+KDApOyB9CiAgICAgIHN0YXRpYyBpbnQgZGVub3JtX21pbigpIHRo cm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PigwKTsgfQoKICAgICAgc3RhdGlj IGNvbnN0IGJvb2wgaXNfaWVjNTU5ID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNf Ym91bmRlZCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX21vZHVsbyA9IHRydWU7 CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25z dCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRf cm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSByb3VuZF90b3dhcmRfemVybzsKICAgIH07CiMgMTQx MCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9saW1pdHMiIDMKICB0ZW1wbGF0ZTw+CiAgICBzdHJ1 Y3QgbnVtZXJpY19saW1pdHM8dW5zaWduZWQgaW50PgogICAgewogICAgICBzdGF0aWMgY29uc3Qg Ym9vbCBpc19zcGVjaWFsaXplZCA9IHRydWU7CgogICAgICBzdGF0aWMgdW5zaWduZWQgaW50IG1p bigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQogICAgICAgICAgc3RhdGljIHVuc2lnbmVk IGludCBtYXgoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuICh1bnNpZ25lZCkoMjE0NzQ4MzY0N0wg KiAyVSArIDEpOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IDMyOwogICAgICBz dGF0aWMgY29uc3QgaW50IGRpZ2l0czEwID0gOTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNf c2lnbmVkID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIgPSB0cnVl OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IHRydWU7CiAgICAgIHN0YXRpYyBj b25zdCBpbnQgcmFkaXggPSAyOwogICAgICBzdGF0aWMgdW5zaWduZWQgaW50IGVwc2lsb24oKSB0 aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7IH0KICAgICAgc3RhdGljIHVuc2lnbmVkIGludCByb3Vu ZF9lcnJvcigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQoKICAgICAgc3RhdGljIGNvbnN0 IGludCBtaW5fZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVu dDEwID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSAwOwogICAgICBz dGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudDEwID0gMDsKCiAgICAgIHN0YXRpYyBjb25zdCBi b29sIGhhc19pbmZpbml0eSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVp ZXRfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdfTmFO ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9y bSA9IGRlbm9ybV9hYnNlbnQ7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9z cyA9IGZhbHNlOwoKICAgICAgc3RhdGljIHVuc2lnbmVkIGludCBpbmZpbml0eSgpIHRocm93KCkK ICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50PigwKTsgfQogICAgICBzdGF0 aWMgdW5zaWduZWQgaW50IHF1aWV0X05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGlj X2Nhc3Q8dW5zaWduZWQgaW50PigwKTsgfQogICAgICBzdGF0aWMgdW5zaWduZWQgaW50IHNpZ25h bGluZ19OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGlu dD4oMCk7IH0KICAgICAgc3RhdGljIHVuc2lnbmVkIGludCBkZW5vcm1fbWluKCkgdGhyb3coKQog ICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KDApOyB9CgogICAgICBzdGF0 aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBp c19ib3VuZGVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gdHJ1 ZTsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gdHJ1ZTsKICAgICAgc3RhdGljIGNv bnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9h dF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOwogICAgfTsKCgoK CgoKICB0ZW1wbGF0ZTw+CiAgICBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8bG9uZz4KICAgIHsKICAg ICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOwoKICAgICAgc3RhdGlj IGxvbmcgbWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiAoLTIxNDc0ODM2NDdMIC0gMSk7IH0K ICAgICAgc3RhdGljIGxvbmcgbWF4KCkgdGhyb3coKQogICAgICB7IHJldHVybiAyMTQ3NDgzNjQ3 TDsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMgPSAzMTsKICAgICAgc3RhdGljIGNv bnN0IGludCBkaWdpdHMxMCA9IDk7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9 IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIgPSB0cnVlOwogICAgICBz dGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQg cmFkaXggPSAyOwogICAgICBzdGF0aWMgbG9uZyBlcHNpbG9uKCkgdGhyb3coKQogICAgICB7IHJl dHVybiAwOyB9CiAgICAgIHN0YXRpYyBsb25nIHJvdW5kX2Vycm9yKCkgdGhyb3coKQogICAgICB7 IHJldHVybiAwOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9IDA7CiAg ICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAwOwogICAgICBzdGF0aWMgY29u c3QgaW50IG1heF9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9u ZW50MTAgPSAwOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7 CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsKICAgICAgc3Rh dGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNv bnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtID0gZGVub3JtX2Fic2VudDsKICAgICAg c3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7CgogICAgICBzdGF0aWMg bG9uZyBpbmZpbml0eSgpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8bG9uZz4o MCk7IH0KICAgICAgc3RhdGljIGxvbmcgcXVpZXRfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVy biBzdGF0aWNfY2FzdDxsb25nPigwKTsgfQogICAgICBzdGF0aWMgbG9uZyBzaWduYWxpbmdfTmFO KCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxsb25nPigwKTsgfQogICAgICBz dGF0aWMgbG9uZyBkZW5vcm1fbWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2Fz dDxsb25nPigwKTsgfQoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5ID0gdHJ1ZTsK ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7CiAgICAgIHN0YXRpYyBj b25zdCBib29sIGlzX21vZHVsbyA9IHRydWU7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0cmFw cyA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNl OwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSByb3Vu ZF90b3dhcmRfemVybzsKICAgIH07CiMgMTUyMiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9saW1p dHMiIDMKICB0ZW1wbGF0ZTw+CiAgICBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8dW5zaWduZWQgbG9u Zz4KICAgIHsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOwoK ICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgbWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiAw OyB9CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIG1heCgpIHRocm93KCkKICAgICAgeyByZXR1 cm4gKDIxNDc0ODM2NDdMICogMlUgKyAxKTsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdp dHMgPSAzMjsKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9IDk7CiAgICAgIHN0YXRp YyBjb25zdCBib29sIGlzX3NpZ25lZCA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBp c19pbnRlZ2VyID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSB0cnVl OwogICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMjsKICAgICAgc3RhdGljIHVuc2lnbmVk IGxvbmcgZXBzaWxvbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQogICAgICBzdGF0aWMg dW5zaWduZWQgbG9uZyByb3VuZF9lcnJvcigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQoK ICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMgY29u c3QgaW50IG1pbl9leHBvbmVudDEwID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhw b25lbnQgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudDEwID0gMDsKCiAg ICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNlOwogICAgICBzdGF0aWMg Y29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29s IGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5v cm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7CiAgICAgIHN0YXRpYyBjb25zdCBi b29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOwoKICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcg aW5maW5pdHkoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxv bmc+KDApOyB9CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIHF1aWV0X05hTigpIHRocm93KCkK ICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4oMCk7IH0KICAgICAgc3Rh dGljIHVuc2lnbmVkIGxvbmcgc2lnbmFsaW5nX05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4g c3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4oMCk7IH0KICAgICAgc3RhdGljIHVuc2lnbmVkIGxv bmcgZGVub3JtX21pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWdu ZWQgbG9uZz4oMCk7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IHRydWU7 CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2JvdW5kZWQgPSB0cnVlOwogICAgICBzdGF0aWMg Y29uc3QgYm9vbCBpc19tb2R1bG8gPSB0cnVlOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdHJh cHMgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxz ZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxlID0gcm91 bmRfdG93YXJkX3plcm87CiAgICB9OwoKCgoKCgogIHRlbXBsYXRlPD4KICAgIHN0cnVjdCBudW1l cmljX2xpbWl0czxsb25nIGxvbmc+CiAgICB7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3Nw ZWNpYWxpemVkID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyBsb25nIGxvbmcgbWluKCkgdGhyb3coKQog ICAgICB7IHJldHVybiAoLTkyMjMzNzIwMzY4NTQ3NzU4MDdMTCAtIDEpOyB9CiAgICAgIHN0YXRp YyBsb25nIGxvbmcgbWF4KCkgdGhyb3coKQogICAgICB7IHJldHVybiA5MjIzMzcyMDM2ODU0Nzc1 ODA3TEw7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0gNjM7CiAgICAgIHN0YXRp YyBjb25zdCBpbnQgZGlnaXRzMTAgPSAxODsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2ln bmVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IHRydWU7CiAg ICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2V4YWN0ID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0 IGludCByYWRpeCA9IDI7CiAgICAgIHN0YXRpYyBsb25nIGxvbmcgZXBzaWxvbigpIHRocm93KCkK ICAgICAgeyByZXR1cm4gMDsgfQogICAgICBzdGF0aWMgbG9uZyBsb25nIHJvdW5kX2Vycm9yKCkg dGhyb3coKQogICAgICB7IHJldHVybiAwOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9l eHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAwOwog ICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25z dCBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2lu ZmluaXR5ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9OYU4gPSBm YWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPSBmYWxzZTsK ICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtID0gZGVub3Jt X2Fic2VudDsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7 CgogICAgICBzdGF0aWMgbG9uZyBsb25nIGluZmluaXR5KCkgdGhyb3coKQogICAgICB7IHJldHVy biBzdGF0aWNfY2FzdDxsb25nIGxvbmc+KDApOyB9CiAgICAgIHN0YXRpYyBsb25nIGxvbmcgcXVp ZXRfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxsb25nIGxvbmc+KDAp OyB9CiAgICAgIHN0YXRpYyBsb25nIGxvbmcgc2lnbmFsaW5nX05hTigpIHRocm93KCkKICAgICAg eyByZXR1cm4gc3RhdGljX2Nhc3Q8bG9uZyBsb25nPigwKTsgfQogICAgICBzdGF0aWMgbG9uZyBs b25nIGRlbm9ybV9taW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGxvbmcg bG9uZz4oMCk7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IHRydWU7CiAg ICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2JvdW5kZWQgPSB0cnVlOwogICAgICBzdGF0aWMgY29u c3QgYm9vbCBpc19tb2R1bG8gPSB0cnVlOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdHJhcHMg PSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxzZTsK ICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxlID0gcm91bmRf dG93YXJkX3plcm87CiAgICB9OwojIDE2MzQgIi91c3IvaW5jbHVkZS9jKysvMy4yLjEvbGltaXRz IiAzCiAgdGVtcGxhdGU8PgogICAgc3RydWN0IG51bWVyaWNfbGltaXRzPHVuc2lnbmVkIGxvbmcg bG9uZz4KICAgIHsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVl OwoKICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyBtaW4oKSB0aHJvdygpCiAgICAgIHsg cmV0dXJuIDA7IH0KICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyBtYXgoKSB0aHJvdygp CiAgICAgIHsgcmV0dXJuICg5MjIzMzcyMDM2ODU0Nzc1ODA3TEwgKiAyVUxMICsgMSk7IH0KCiAg ICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0gNjQ7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQg ZGlnaXRzMTAgPSAxOTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gZmFsc2U7 CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIgPSB0cnVlOwogICAgICBzdGF0aWMg Y29uc3QgYm9vbCBpc19leGFjdCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXgg PSAyOwogICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nIGVwc2lsb24oKSB0aHJvdygpCiAg ICAgIHsgcmV0dXJuIDA7IH0KICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyByb3VuZF9l cnJvcigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQoKICAgICAgc3RhdGljIGNvbnN0IGlu dCBtaW5fZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEw ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSAwOwogICAgICBzdGF0 aWMgY29uc3QgaW50IG1heF9leHBvbmVudDEwID0gMDsKCiAgICAgIHN0YXRpYyBjb25zdCBib29s IGhhc19pbmZpbml0eSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRf TmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0g ZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9 IGRlbm9ybV9hYnNlbnQ7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9 IGZhbHNlOwoKICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyBpbmZpbml0eSgpIHRocm93 KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZyBsb25nPigwKTsgfQog ICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nIHF1aWV0X05hTigpIHRocm93KCkKICAgICAg eyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZyBsb25nPigwKTsgfQogICAgICBzdGF0 aWMgdW5zaWduZWQgbG9uZyBsb25nIHNpZ25hbGluZ19OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0 dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4oMCk7IH0KICAgICAgc3RhdGljIHVu c2lnbmVkIGxvbmcgbG9uZyBkZW5vcm1fbWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0 aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+KDApOyB9CgogICAgICBzdGF0aWMgY29uc3QgYm9v bCBpc19pZWM1NTkgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0g dHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gdHJ1ZTsKCiAgICAgIHN0 YXRpYyBjb25zdCBib29sIHRyYXBzID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlu eW5lc3NfYmVmb3JlID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHls ZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOwogICAgfTsKCgoKCgoKICB0ZW1wbGF0 ZTw+CiAgICBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8ZmxvYXQ+CiAgICB7CiAgICAgIHN0YXRpYyBj b25zdCBib29sIGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyBmbG9hdCBtaW4o KSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDEuMTc1NDk0MzVlLTM4RjsgfQogICAgICBzdGF0aWMg ZmxvYXQgbWF4KCkgdGhyb3coKQogICAgICB7IHJldHVybiAzLjQwMjgyMzQ3ZSszOEY7IH0KCiAg ICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0gMjQ7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQg ZGlnaXRzMTAgPSA2OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zaWduZWQgPSB0cnVlOwog ICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0gZmFsc2U7CiAgICAgIHN0YXRpYyBj b25zdCBib29sIGlzX2V4YWN0ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXgg PSAyOwogICAgICBzdGF0aWMgZmxvYXQgZXBzaWxvbigpIHRocm93KCkKICAgICAgeyByZXR1cm4g MS4xOTIwOTI5MGUtMDdGOyB9CiAgICAgIHN0YXRpYyBmbG9hdCByb3VuZF9lcnJvcigpIHRocm93 KCkKICAgICAgeyByZXR1cm4gMS4wRjsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhw b25lbnQgPSAtMTI1OwogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gLTM3 OwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDEyODsKICAgICAgc3RhdGlj IGNvbnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDM4OwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wg aGFzX2luZmluaXR5ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9O YU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPSBm YWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtID0g ZGVub3JtX2Fic2VudDsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0g ZmFsc2U7CgogICAgICBzdGF0aWMgZmxvYXQgaW5maW5pdHkoKSB0aHJvdygpCiAgICAgIHsgcmV0 dXJuIDAuMEY7IH0KICAgICAgc3RhdGljIGZsb2F0IHF1aWV0X05hTigpIHRocm93KCkKICAgICAg eyByZXR1cm4gMC4wRjsgfQogICAgICBzdGF0aWMgZmxvYXQgc2lnbmFsaW5nX05hTigpIHRocm93 KCkKICAgICAgeyByZXR1cm4gMC4wRjsgfQogICAgICBzdGF0aWMgZmxvYXQgZGVub3JtX21pbigp IHRocm93KCkKICAgICAgeyByZXR1cm4gMC4wRjsgfQoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wg aXNfaWVjNTU5ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2JvdW5kZWQgPSB0 cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSBmYWxzZTsKCiAgICAgIHN0 YXRpYyBjb25zdCBib29sIHRyYXBzID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRp bnluZXNzX2JlZm9yZSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5 bGUgcm91bmRfc3R5bGUgPSByb3VuZF90b3dhcmRfemVybzsKICAgIH07CiMgMTc2NSAiL3Vzci9p bmNsdWRlL2MrKy8zLjIuMS9saW1pdHMiIDMKICB0ZW1wbGF0ZTw+CiAgICBzdHJ1Y3QgbnVtZXJp Y19saW1pdHM8ZG91YmxlPgogICAgewogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFs aXplZCA9IHRydWU7CgogICAgICBzdGF0aWMgZG91YmxlIG1pbigpIHRocm93KCkKICAgICAgeyBy ZXR1cm4gMi4yMjUwNzM4NTg1MDcyMDE0ZS0zMDg7IH0KICAgICAgc3RhdGljIGRvdWJsZSBtYXgo KSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDEuNzk3NjkzMTM0ODYyMzE1N2UrMzA4OyB9CgogICAg ICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IDUzOwogICAgICBzdGF0aWMgY29uc3QgaW50IGRp Z2l0czEwID0gMTU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IHRydWU7CiAg ICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIgPSBmYWxzZTsKICAgICAgc3RhdGljIGNv bnN0IGJvb2wgaXNfZXhhY3QgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9 IDI7CiAgICAgIHN0YXRpYyBkb3VibGUgZXBzaWxvbigpIHRocm93KCkKICAgICAgeyByZXR1cm4g Mi4yMjA0NDYwNDkyNTAzMTMxZS0xNjsgfQogICAgICBzdGF0aWMgZG91YmxlIHJvdW5kX2Vycm9y KCkgdGhyb3coKQogICAgICB7IHJldHVybiAxLjA7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQg bWluX2V4cG9uZW50ID0gLTEwMjE7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50 MTAgPSAtMzA3OwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDEwMjQ7CiAg ICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAzMDg7CgogICAgICBzdGF0aWMg Y29uc3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wg aGFzX3F1aWV0X05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFs aW5nX05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhh c19kZW5vcm0gPQogICAgICAgICAgICAgIGRlbm9ybV9hYnNlbnQ7CiAgICAgIHN0YXRpYyBjb25z dCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOwoKICAgICAgc3RhdGljIGRvdWJsZSBpbmZp bml0eSgpIHRocm93KCkKICAgICAgeyByZXR1cm4gMC4wOyB9CiAgICAgIHN0YXRpYyBkb3VibGUg cXVpZXRfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwLjA7IH0KICAgICAgc3RhdGljIGRv dWJsZSBzaWduYWxpbmdfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwLjA7IH0KICAgICAg c3RhdGljIGRvdWJsZSBkZW5vcm1fbWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwLjA7IH0K CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IGZhbHNlOwogICAgICBzdGF0aWMg Y29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNf bW9kdWxvID0gZmFsc2U7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IGZhbHNlOwog ICAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxzZTsKICAgICAgc3Rh dGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxlID0KICAgICAgICAgICAgICBy b3VuZF90b3dhcmRfemVybzsKICAgIH07CiMgMTg0NCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9s aW1pdHMiIDMKICB0ZW1wbGF0ZTw+CiAgICBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8bG9uZyBkb3Vi bGU+CiAgICB7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsK CiAgICAgIHN0YXRpYyBsb25nIGRvdWJsZSBtaW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDMu MzYyMTAzMTQzMTEyMDkzNTA2MjZlLTQ5MzJMOyB9CiAgICAgIHN0YXRpYyBsb25nIGRvdWJsZSBt YXgoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDEuMTg5NzMxNDk1MzU3MjMxNzY1MDJlKzQ5MzJM OyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IDY0OwogICAgICBzdGF0aWMgY29u c3QgaW50IGRpZ2l0czEwID0gMTg7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9 IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIgPSBmYWxzZTsKICAgICAg c3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGlu dCByYWRpeCA9IDI7CiAgICAgIHN0YXRpYyBsb25nIGRvdWJsZSBlcHNpbG9uKCkgdGhyb3coKQog ICAgICB7IHJldHVybiAxLjA4NDIwMjE3MjQ4NTUwNDQzNDAxZS0xOUw7IH0KICAgICAgc3RhdGlj IGxvbmcgZG91YmxlIHJvdW5kX2Vycm9yKCkgdGhyb3coKQogICAgICB7IHJldHVybiAxLjBMOyB9 CgogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9IC0xNjM4MTsKICAgICAgc3Rh dGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9IC00OTMxOwogICAgICBzdGF0aWMgY29uc3Qg aW50IG1heF9leHBvbmVudCA9IDE2Mzg0OwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBv bmVudDEwID0gNDkzMjsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IGZh bHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7CiAgICAg IHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0KICAgICAgICAgICAgICAgIGZh bHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPQog ICAgICAgICAgICAgICAgZGVub3JtX2Fic2VudDsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFz X2Rlbm9ybV9sb3NzID0KICAgICAgICAgICAgICAgIGZhbHNlOwoKICAgICAgc3RhdGljIGxvbmcg ZG91YmxlIGluZmluaXR5KCkgdGhyb3coKQogICAgICB7IHJldHVybiAwLjBMOyB9CiAgICAgIHN0 YXRpYyBsb25nIGRvdWJsZSBxdWlldF9OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDAuMEw7 IH0KICAgICAgc3RhdGljIGxvbmcgZG91YmxlIHNpZ25hbGluZ19OYU4oKSB0aHJvdygpCiAgICAg IHsgcmV0dXJuIDAuMEw7IH0KICAgICAgc3RhdGljIGxvbmcgZG91YmxlIGRlbm9ybV9taW4oKSB0 aHJvdygpCiAgICAgIHsgcmV0dXJuIDAuMEw7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlz X2llYzU1OSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1 ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gZmFsc2U7CgogICAgICBzdGF0 aWMgY29uc3QgYm9vbCB0cmFwcyA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55 bmVzc19iZWZvcmUgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxl IHJvdW5kX3N0eWxlID0KICAgICAgICByb3VuZF90b3dhcmRfemVybzsKICAgIH07CiMgMTkyNCAi L3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9saW1pdHMiIDMKfQojIDQ0ICIvdXNyL2luY2x1ZGUvYysr LzMuMi4xL2JpdHMvbG9jYWxlX2ZhY2V0cy50Y2MiIDIgMwoKIyAxICIvdXNyL2luY2x1ZGUvYysr LzMuMi4xL3R5cGVpbmZvIiAxIDMKIyA0MCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIuMS90eXBlaW5m byIgMwpleHRlcm4gIkMrKyIgewoKbmFtZXNwYWNlIF9fY3h4YWJpdjEKewogIGNsYXNzIF9fY2xh c3NfdHlwZV9pbmZvOwp9CiMgNTUgIi91c3IvaW5jbHVkZS9jKysvMy4yLjEvdHlwZWluZm8iIDMK bmFtZXNwYWNlIHN0ZAp7CgoKCiAgY2xhc3MgdHlwZV9pbmZvCiAgewogIHB1YmxpYzoKCgoKCiAg ICB2aXJ0dWFsIH50eXBlX2luZm8oKTsKCiAgcHJpdmF0ZToKCiAgICB0eXBlX2luZm8mIG9wZXJh dG9yPShjb25zdCB0eXBlX2luZm8mKTsKICAgIHR5cGVfaW5mbyhjb25zdCB0eXBlX2luZm8mKTsK CiAgcHJvdGVjdGVkOgogICAgY29uc3QgY2hhciAqX19uYW1lOwoKICBwcm90ZWN0ZWQ6CiAgICBl eHBsaWNpdCB0eXBlX2luZm8oY29uc3QgY2hhciAqX19uKTogX19uYW1lKF9fbikgeyB9CgogIHB1 YmxpYzoKCgoKICAgIGNvbnN0IGNoYXIqIG5hbWUoKSBjb25zdAogICAgeyByZXR1cm4gX19uYW1l OyB9CiMgOTggIi91c3IvaW5jbHVkZS9jKysvMy4yLjEvdHlwZWluZm8iIDMKICAgIGJvb2wgYmVm b3JlKGNvbnN0IHR5cGVfaW5mbyYgX19hcmcpIGNvbnN0CiAgICB7IHJldHVybiBfX25hbWUgPCBf X2FyZy5fX25hbWU7IH0KICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCB0eXBlX2luZm8mIF9fYXJn KSBjb25zdAogICAgeyByZXR1cm4gX19uYW1lID09IF9fYXJnLl9fbmFtZTsgfQoKICAgIGJvb2wg b3BlcmF0b3IhPShjb25zdCB0eXBlX2luZm8mIF9fYXJnKSBjb25zdAogICAgeyByZXR1cm4gIW9w ZXJhdG9yPT0oX19hcmcpOyB9CgoKICBwdWJsaWM6CgogICAgdmlydHVhbCBib29sIF9faXNfcG9p bnRlcl9wKCkgY29uc3Q7CgogICAgdmlydHVhbCBib29sIF9faXNfZnVuY3Rpb25fcCgpIGNvbnN0 OwoKCgoKCgoKICAgIHZpcnR1YWwgYm9vbCBfX2RvX2NhdGNoKGNvbnN0IHR5cGVfaW5mbyAqX190 aHJfdHlwZSwgdm9pZCAqKl9fdGhyX29iaiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVu c2lnbmVkIF9fb3V0ZXIpIGNvbnN0OwoKCiAgICB2aXJ0dWFsIGJvb2wgX19kb191cGNhc3QoY29u c3QgX19jeHhhYml2MTo6X19jbGFzc190eXBlX2luZm8gKl9fdGFyZ2V0LAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHZvaWQgKipfX29ial9wdHIpIGNvbnN0OwogIH07CgoKCiAgY2xhc3Mg YmFkX2Nhc3QgOiBwdWJsaWMgZXhjZXB0aW9uCiAgewogIHB1YmxpYzoKICAgIGJhZF9jYXN0KCkg dGhyb3coKSB7IH0KCgogICAgdmlydHVhbCB+YmFkX2Nhc3QoKSB0aHJvdygpOwogIH07CgoKICBj bGFzcyBiYWRfdHlwZWlkIDogcHVibGljIGV4Y2VwdGlvbgogIHsKICBwdWJsaWM6CiAgICBiYWRf dHlwZWlkICgpIHRocm93KCkgeyB9CgoKICAgIHZpcnR1YWwgfmJhZF90eXBlaWQoKSB0aHJvdygp OwogIH07Cn0KCn0KIyA0NiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9iaXRzL2xvY2FsZV9mYWNl dHMudGNjIiAyIDMKCm5hbWVzcGFjZSBzdGQKewogIHRlbXBsYXRlPHR5cGVuYW1lIF9GYWNldD4K ICAgIGxvY2FsZQogICAgbG9jYWxlOjpjb21iaW5lKGNvbnN0IGxvY2FsZSYgX19vdGhlcikgY29u c3QKICAgIHsKICAgICAgX0ltcGwqIF9fdG1wID0gbmV3IF9JbXBsKCpfTV9pbXBsLCAxKTsKICAg ICAgX190bXAtPl9NX3JlcGxhY2VfZmFjZXQoX19vdGhlci5fTV9pbXBsLCAmX0ZhY2V0OjppZCk7 CiAgICAgIHJldHVybiBsb2NhbGUoX190bXApOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJvb2wKICAgIGxv Y2FsZTo6b3BlcmF0b3IoKShjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxs b2M+JiBfX3MxLAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hh clQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fczIpIGNvbnN0CiAgICB7CiAgICAgIHR5cGVkZWYgc3Rk Ojpjb2xsYXRlPF9DaGFyVD4gX19jb2xsYXRlX3R5cGU7CiAgICAgIGNvbnN0IF9fY29sbGF0ZV90 eXBlJiBfX2NvbGxhdGUgPSB1c2VfZmFjZXQ8X19jb2xsYXRlX3R5cGU+KCp0aGlzKTsKICAgICAg cmV0dXJuIChfX2NvbGxhdGUuY29tcGFyZShfX3MxLmRhdGEoKSwgX19zMS5kYXRhKCkgKyBfX3Mx Lmxlbmd0aCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fczIuZGF0YSgpLCBf X3MyLmRhdGEoKSArIF9fczIubGVuZ3RoKCkpIDwgMCk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVu YW1lIF9GYWNldD4KICAgIGNvbnN0IF9GYWNldCYKICAgIHVzZV9mYWNldChjb25zdCBsb2NhbGUm IF9fbG9jKQogICAgewogICAgICBzaXplX3QgX19pID0gX0ZhY2V0OjppZC5fTV9pZCgpOwogICAg ICBsb2NhbGU6OmZhY2V0KiogX19mYWNldHMgPSBfX2xvYy5fTV9pbXBsLT5fTV9mYWNldHM7CiAg ICAgIGlmICghKF9faSA8IF9fbG9jLl9NX2ltcGwtPl9NX2ZhY2V0c19zaXplICYmIF9fZmFjZXRz W19faV0pKQogICAgICAgIF9fdGhyb3dfYmFkX2Nhc3QoKTsKICAgICAgcmV0dXJuIHN0YXRpY19j YXN0PGNvbnN0IF9GYWNldCY+KCpfX2ZhY2V0c1tfX2ldKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0ZhY2V0PgogICAgYm9vbAogICAgaGFzX2ZhY2V0KGNvbnN0IGxvY2FsZSYgX19sb2Mp IHRocm93KCkKICAgIHsKICAgICAgc2l6ZV90IF9faSA9IF9GYWNldDo6aWQuX01faWQoKTsKICAg ICAgbG9jYWxlOjpmYWNldCoqIF9fZmFjZXRzID0gX19sb2MuX01faW1wbC0+X01fZmFjZXRzOwog ICAgICByZXR1cm4gKF9faSA8IF9fbG9jLl9NX2ltcGwtPl9NX2ZhY2V0c19zaXplICYmIF9fZmFj ZXRzW19faV0pOwogICAgfQoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg X0luSXRlcj4KICAgIF9Jbkl0ZXIKICAgIG51bV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBf TV9leHRyYWN0X2Zsb2F0KF9Jbkl0ZXIgX19iZWcsIF9Jbkl0ZXIgX19lbmQsIGlvc19iYXNlJiBf X2lvLAogICAgICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHN0cmlu ZyYgX194dHJjKSBjb25zdAogICAgewogICAgICB0eXBlZGVmIGNoYXJfdHJhaXRzPF9DaGFyVD4g X190cmFpdHNfdHlwZTsKICAgICAgY29uc3QgbG9jYWxlIF9fbG9jID0gX19pby5nZXRsb2MoKTsK ICAgICAgY29uc3QgY3R5cGU8X0NoYXJUPiYgX19jdHlwZSA9IHVzZV9mYWNldDxjdHlwZTxfQ2hh clQ+ID4oX19sb2MpOwogICAgICBjb25zdCBudW1wdW5jdDxfQ2hhclQ+JiBfX25wID0gdXNlX2Zh Y2V0PG51bXB1bmN0PF9DaGFyVD4gPihfX2xvYyk7CgoKICAgICAgY29uc3QgY2hhcl90eXBlIF9f cGx1cyA9IF9fY3R5cGUud2lkZW4oJysnKTsKICAgICAgY29uc3QgY2hhcl90eXBlIF9fbWludXMg PSBfX2N0eXBlLndpZGVuKCctJyk7CiAgICAgIGludCBfX3BvcyA9IDA7CiAgICAgIGNoYXJfdHlw ZSBfX2MgPSAqX19iZWc7CiAgICAgIGlmICgoX190cmFpdHNfdHlwZTo6ZXEoX19jLCBfX3BsdXMp IHx8IF9fdHJhaXRzX3R5cGU6OmVxKF9fYywgX19taW51cykpCiAgICAgICAgICAmJiBfX2JlZyAh PSBfX2VuZCkKICAgICAgICB7CiAgICAgICAgICBfX3h0cmMgKz0gX19jdHlwZS5uYXJyb3coX19j LCBjaGFyKCkpOwogICAgICAgICAgKytfX3BvczsKICAgICAgICAgIF9fYyA9ICooKytfX2JlZyk7 CiAgICAgICAgfQoKCiAgICAgIGNvbnN0IGNoYXJfdHlwZSBfX3plcm8gPSBfX2N0eXBlLndpZGVu KF9TX2F0b21zW19NX3plcm9dKTsKICAgICAgYm9vbCBfX2ZvdW5kX3plcm8gPSBmYWxzZTsKICAg ICAgd2hpbGUgKF9fdHJhaXRzX3R5cGU6OmVxKF9fYywgX196ZXJvKSAmJiBfX2JlZyAhPSBfX2Vu ZCkKICAgICAgICB7CiAgICAgICAgICBfX2MgPSAqKCsrX19iZWcpOwogICAgICAgICAgX19mb3Vu ZF96ZXJvID0gdHJ1ZTsKICAgICAgICB9CiAgICAgIGlmIChfX2ZvdW5kX3plcm8pCiAgICAgICAg ewogICAgICAgICAgX194dHJjICs9IF9TX2F0b21zW19NX3plcm9dOwogICAgICAgICAgKytfX3Bv czsKICAgICAgICB9CgoKICAgICAgY29uc3Qgc2l6ZV90IF9fbGVuID0gX01fRSAtIF9NX3plcm8g KyAxOwogICAgICBjaGFyX3R5cGUgX193YXRvbXNbX19sZW5dOwogICAgICBfX2N0eXBlLndpZGVu KF9TX2F0b21zLCBfU19hdG9tcyArIF9fbGVuLCBfX3dhdG9tcyk7CiAgICAgIGJvb2wgX19mb3Vu ZF9kZWMgPSBmYWxzZTsKICAgICAgYm9vbCBfX2ZvdW5kX3NjaSA9IGZhbHNlOwogICAgICBjb25z dCBjaGFyX3R5cGUgX19kZWMgPSBfX25wLmRlY2ltYWxfcG9pbnQoKTsKCiAgICAgIHN0cmluZyBf X2ZvdW5kX2dyb3VwaW5nOwogICAgICBjb25zdCBzdHJpbmcgX19ncm91cGluZyA9IF9fbnAuZ3Jv dXBpbmcoKTsKICAgICAgYm9vbCBfX2NoZWNrX2dyb3VwaW5nID0gX19ncm91cGluZy5zaXplKCk7 CiAgICAgIGludCBfX3NlcF9wb3MgPSAwOwogICAgICBjb25zdCBjaGFyX3R5cGUgX19zZXAgPSBf X25wLnRob3VzYW5kc19zZXAoKTsKCiAgICAgIHdoaWxlIChfX2JlZyAhPSBfX2VuZCkKICAgICAg ICB7CgogICAgICAgICAgY29uc3QgY2hhcl90eXBlKiBfX3AgPSBfX3RyYWl0c190eXBlOjpmaW5k KF9fd2F0b21zLCAxMCwgX19jKTsKCgogICAgICAgICAgaWYgKF9fcCAmJiAhX190cmFpdHNfdHlw ZTo6ZXEoX19jLCBjaGFyX3R5cGUoKSkpCiAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgKytf X3BvczsKICAgICAgICAgICAgICBfX3h0cmMgKz0gX1NfYXRvbXNbX19wIC0gX193YXRvbXNdOwog ICAgICAgICAgICAgICsrX19zZXBfcG9zOwogICAgICAgICAgICAgIF9fYyA9ICooKytfX2JlZyk7 CiAgICAgICAgICAgIH0KICAgICAgICAgIGVsc2UgaWYgKF9fdHJhaXRzX3R5cGU6OmVxKF9fYywg X19zZXApCiAgICAgICAgICAgICAgICAgICAmJiBfX2NoZWNrX2dyb3VwaW5nICYmICFfX2ZvdW5k X2RlYykKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgaWYgKF9fc2VwX3BvcykKICAgICAg ICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgX19mb3VuZF9ncm91cGluZyArPSBzdGF0aWNf Y2FzdDxjaGFyPihfX3NlcF9wb3MpOwogICAgICAgICAgICAgICAgICBfX3NlcF9wb3MgPSAwOwog ICAgICAgICAgICAgICAgICBfX2MgPSAqKCsrX19iZWcpOwogICAgICAgICAgICAgICAgfQogICAg ICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgX19lcnIg fD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg ICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICBlbHNlIGlmIChfX3RyYWl0c190eXBlOjpl cShfX2MsIF9fZGVjKSAmJiAhX19mb3VuZF9kZWMpCiAgICAgICAgICAgIHsKCgoKICAgICAgICAg ICAgICBpZiAoX19mb3VuZF9ncm91cGluZy5zaXplKCkpCiAgICAgICAgICAgICAgICBfX2ZvdW5k X2dyb3VwaW5nICs9IHN0YXRpY19jYXN0PGNoYXI+KF9fc2VwX3Bvcyk7CiAgICAgICAgICAgICAg KytfX3BvczsKICAgICAgICAgICAgICBfX3h0cmMgKz0gJy4nOwogICAgICAgICAgICAgIF9fYyA9 ICooKytfX2JlZyk7CiAgICAgICAgICAgICAgX19mb3VuZF9kZWMgPSB0cnVlOwogICAgICAgICAg ICB9CiAgICAgICAgICBlbHNlIGlmICgoX190cmFpdHNfdHlwZTo6ZXEoX19jLCBfX3dhdG9tc1tf TV9lXSkKICAgICAgICAgICAgICAgICAgICB8fCBfX3RyYWl0c190eXBlOjplcShfX2MsIF9fd2F0 b21zW19NX0VdKSkKICAgICAgICAgICAgICAgICAgICYmICFfX2ZvdW5kX3NjaSAmJiBfX3BvcykK ICAgICAgICAgICAgewoKICAgICAgICAgICAgICArK19fcG9zOwogICAgICAgICAgICAgIF9feHRy YyArPSBfX2N0eXBlLm5hcnJvdyhfX2MsIGNoYXIoKSk7CiAgICAgICAgICAgICAgX19jID0gKigr K19fYmVnKTsKCgogICAgICAgICAgICAgIGlmIChfX3RyYWl0c190eXBlOjplcShfX2MsIF9fcGx1 cykKICAgICAgICAgICAgICAgICAgfHwgX190cmFpdHNfdHlwZTo6ZXEoX19jLCBfX21pbnVzKSkK ICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgKytfX3BvczsKICAgICAgICAgICAg ICAgICAgX194dHJjICs9IF9fY3R5cGUubmFycm93KF9fYywgY2hhcigpKTsKICAgICAgICAgICAg ICAgICAgX19jID0gKigrK19fYmVnKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBf X2ZvdW5kX3NjaSA9IHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICAgIGVsc2UKCiAgICAgICAg ICAgIGJyZWFrOwogICAgICAgIH0KCgoKICAgICAgaWYgKF9fY2hlY2tfZ3JvdXBpbmcgJiYgX19m b3VuZF9ncm91cGluZy5zaXplKCkpCiAgICAgICAgewoKICAgICAgICAgIGlmICghX19mb3VuZF9k ZWMpCiAgICAgICAgICAgIF9fZm91bmRfZ3JvdXBpbmcgKz0gc3RhdGljX2Nhc3Q8Y2hhcj4oX19z ZXBfcG9zKTsKICAgICAgICAgIGlmICghX192ZXJpZnlfZ3JvdXBpbmcoX19ncm91cGluZywgX19m b3VuZF9ncm91cGluZykpCiAgICAgICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0Owog ICAgICAgIH0KCgogICAgICBfX3h0cmMgKz0gY2hhcigpOwogICAgICBpZiAoX19iZWcgPT0gX19l bmQpCiAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmVvZmJpdDsKICAgICAgcmV0dXJuIF9fYmVn OwogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgog ICAgX0luSXRlcgogICAgbnVtX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAgIF9NX2V4dHJhY3Rf aW50KF9Jbkl0ZXIgX19iZWcsIF9Jbkl0ZXIgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAg ICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBzdHJpbmcmIF9feHRyYywgaW50 JiBfX2Jhc2UpIGNvbnN0CiAgICB7CiAgICAgIHR5cGVkZWYgY2hhcl90cmFpdHM8X0NoYXJUPiBf X3RyYWl0c190eXBlOwogICAgICBjb25zdCBsb2NhbGUgX19sb2MgPSBfX2lvLmdldGxvYygpOwog ICAgICBjb25zdCBjdHlwZTxfQ2hhclQ+JiBfX2N0eXBlID0gdXNlX2ZhY2V0PGN0eXBlPF9DaGFy VD4gPihfX2xvYyk7CiAgICAgIGNvbnN0IG51bXB1bmN0PF9DaGFyVD4mIF9fbnAgPSB1c2VfZmFj ZXQ8bnVtcHVuY3Q8X0NoYXJUPiA+KF9fbG9jKTsKCgogICAgICBpb3NfYmFzZTo6Zm10ZmxhZ3Mg X19iYXNlZmllbGQgPSBfX2lvLmZsYWdzKCkgJiBpb3NfYmFzZTo6YmFzZWZpZWxkOwogICAgICBp ZiAoX19iYXNlZmllbGQgPT0gaW9zX2Jhc2U6Om9jdCkKICAgICAgICBfX2Jhc2UgPSA4OwogICAg ICBlbHNlIGlmIChfX2Jhc2VmaWVsZCA9PSBpb3NfYmFzZTo6aGV4KQogICAgICAgIF9fYmFzZSA9 IDE2OwogICAgICBlbHNlCiAgICAgICAgX19iYXNlID0gMTA7CgoKICAgICAgaW50IF9fcG9zID0g MDsKICAgICAgY2hhcl90eXBlIF9fYyA9ICpfX2JlZzsKICAgICAgY29uc3QgY2hhcl90eXBlIF9f cGx1cyA9IF9fY3R5cGUud2lkZW4oJysnKTsKICAgICAgY29uc3QgY2hhcl90eXBlIF9fbWludXMg PSBfX2N0eXBlLndpZGVuKCctJyk7CgogICAgICBpZiAoKF9fdHJhaXRzX3R5cGU6OmVxKF9fYywg X19wbHVzKSB8fCBfX3RyYWl0c190eXBlOjplcShfX2MsIF9fbWludXMpKQogICAgICAgICAgJiYg X19iZWcgIT0gX19lbmQpCiAgICAgICAgewogICAgICAgICAgX194dHJjICs9IF9fY3R5cGUubmFy cm93KF9fYywgY2hhcigpKTsKICAgICAgICAgICsrX19wb3M7CiAgICAgICAgICBfX2MgPSAqKCsr X19iZWcpOwogICAgICAgIH0KCgogICAgICBjb25zdCBjaGFyX3R5cGUgX196ZXJvID0gX19jdHlw ZS53aWRlbihfU19hdG9tc1tfTV96ZXJvXSk7CiAgICAgIGNvbnN0IGNoYXJfdHlwZSBfX3ggPSBf X2N0eXBlLndpZGVuKCd4Jyk7CiAgICAgIGNvbnN0IGNoYXJfdHlwZSBfX1ggPSBfX2N0eXBlLndp ZGVuKCdYJyk7CiAgICAgIGlmIChfX2Jhc2UgPT0gMTApCiAgICAgICAgewogICAgICAgICAgYm9v bCBfX2ZvdW5kX3plcm8gPSBmYWxzZTsKICAgICAgICAgIHdoaWxlIChfX3RyYWl0c190eXBlOjpl cShfX2MsIF9femVybykgJiYgX19iZWcgIT0gX19lbmQpCiAgICAgICAgICAgIHsKICAgICAgICAg ICAgICBfX2MgPSAqKCsrX19iZWcpOwogICAgICAgICAgICAgIF9fZm91bmRfemVybyA9IHRydWU7 CiAgICAgICAgICAgIH0KICAgICAgICAgIGlmIChfX2ZvdW5kX3plcm8pCiAgICAgICAgICAgIHsK ICAgICAgICAgICAgICBfX3h0cmMgKz0gX1NfYXRvbXNbX01femVyb107CiAgICAgICAgICAgICAg KytfX3BvczsKICAgICAgICAgICAgICBpZiAoX19iYXNlZmllbGQgPT0gMCkKICAgICAgICAgICAg ICAgIHsKICAgICAgICAgICAgICAgICAgaWYgKChfX3RyYWl0c190eXBlOjplcShfX2MsIF9feCkK ICAgICAgICAgICAgICAgICAgICAgICB8fCBfX3RyYWl0c190eXBlOjplcShfX2MsIF9fWCkpCiAg ICAgICAgICAgICAgICAgICAgICAmJiBfX2JlZyAhPSBfX2VuZCkKICAgICAgICAgICAgICAgICAg ICB7CiAgICAgICAgICAgICAgICAgICAgICBfX3h0cmMgKz0gX19jdHlwZS5uYXJyb3coX19jLCBj aGFyKCkpOwogICAgICAgICAgICAgICAgICAgICAgKytfX3BvczsKICAgICAgICAgICAgICAgICAg ICAgIF9fYyA9ICooKytfX2JlZyk7CiAgICAgICAgICAgICAgICAgICAgICBfX2Jhc2UgPSAxNjsK ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAg ICAgICAgICBfX2Jhc2UgPSA4OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAg ICAgfQogICAgICBlbHNlIGlmIChfX2Jhc2UgPT0gMTYpCiAgICAgICAgewogICAgICAgICAgaWYg KF9fdHJhaXRzX3R5cGU6OmVxKF9fYywgX196ZXJvKSAmJiBfX2JlZyAhPSBfX2VuZCkKICAgICAg ICAgICAgewogICAgICAgICAgICAgIF9feHRyYyArPSBfU19hdG9tc1tfTV96ZXJvXTsKICAgICAg ICAgICAgICArK19fcG9zOwogICAgICAgICAgICAgIF9fYyA9ICooKytfX2JlZyk7CiAgICAgICAg ICAgICAgaWYgKChfX3RyYWl0c190eXBlOjplcShfX2MsIF9feCkgfHwgX190cmFpdHNfdHlwZTo6 ZXEoX19jLCBfX1gpKQogICAgICAgICAgICAgICAgICAmJiBfX2JlZyAhPSBfX2VuZCkKICAgICAg ICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgX194dHJjICs9IF9fY3R5cGUubmFycm93KF9f YywgY2hhcigpKTsKICAgICAgICAgICAgICAgICAgKytfX3BvczsKICAgICAgICAgICAgICAgICAg X19jID0gKigrK19fYmVnKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAg IH0KCgoKICAgICAgc2l6ZV90IF9fbGVuOwogICAgICBpZiAoX19iYXNlID09IDE2KQogICAgICAg IF9fbGVuID0gX01fc2l6ZTsKICAgICAgZWxzZQogICAgICAgIF9fbGVuID0gX19iYXNlOwoKCiAg ICAgIGNoYXJfdHlwZSBfX3dhdG9tc1tfTV9zaXplXTsKICAgICAgX19jdHlwZS53aWRlbihfU19h dG9tcywgX1NfYXRvbXMgKyBfX2xlbiwgX193YXRvbXMpOwogICAgICBzdHJpbmcgX19mb3VuZF9n cm91cGluZzsKICAgICAgY29uc3Qgc3RyaW5nIF9fZ3JvdXBpbmcgPSBfX25wLmdyb3VwaW5nKCk7 CiAgICAgIGJvb2wgX19jaGVja19ncm91cGluZyA9IF9fZ3JvdXBpbmcuc2l6ZSgpOwogICAgICBp bnQgX19zZXBfcG9zID0gMDsKICAgICAgY29uc3QgY2hhcl90eXBlIF9fc2VwID0gX19ucC50aG91 c2FuZHNfc2VwKCk7CiAgICAgIHdoaWxlIChfX2JlZyAhPSBfX2VuZCkKICAgICAgICB7CiAgICAg ICAgICBjb25zdCBjaGFyX3R5cGUqIF9fcCA9IF9fdHJhaXRzX3R5cGU6OmZpbmQoX193YXRvbXMs IF9fbGVuLCBfX2MpOwoKCiAgICAgICAgICBpZiAoX19wICYmICFfX3RyYWl0c190eXBlOjplcShf X2MsIGNoYXJfdHlwZSgpKSkKICAgICAgICAgICAgewoKICAgICAgICAgICAgICBfX3h0cmMgKz0g X1NfYXRvbXNbX19wIC0gX193YXRvbXNdOwogICAgICAgICAgICAgICsrX19wb3M7CiAgICAgICAg ICAgICAgKytfX3NlcF9wb3M7CiAgICAgICAgICAgICAgX19jID0gKigrK19fYmVnKTsKICAgICAg ICAgICAgfQogICAgICAgICAgZWxzZSBpZiAoX190cmFpdHNfdHlwZTo6ZXEoX19jLCBfX3NlcCkg JiYgX19jaGVja19ncm91cGluZykKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgaWYgKF9f c2VwX3BvcykKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgX19mb3VuZF9ncm91 cGluZyArPSBzdGF0aWNfY2FzdDxjaGFyPihfX3NlcF9wb3MpOwogICAgICAgICAgICAgICAgICBf X3NlcF9wb3MgPSAwOwogICAgICAgICAgICAgICAgICBfX2MgPSAqKCsrX19iZWcpOwogICAgICAg ICAgICAgICAgfQogICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIHsKICAgICAgICAg ICAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CiAgICAgICAgICAgICAgICAgIGJy ZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICBlbHNlCgogICAg ICAgICAgICBicmVhazsKICAgICAgICB9CgoKCiAgICAgIGlmIChfX2NoZWNrX2dyb3VwaW5nICYm IF9fZm91bmRfZ3JvdXBpbmcuc2l6ZSgpKQogICAgICAgIHsKCiAgICAgICAgICBfX2ZvdW5kX2dy b3VwaW5nICs9IHN0YXRpY19jYXN0PGNoYXI+KF9fc2VwX3Bvcyk7CiAgICAgICAgICBpZiAoIV9f dmVyaWZ5X2dyb3VwaW5nKF9fZ3JvdXBpbmcsIF9fZm91bmRfZ3JvdXBpbmcpKQogICAgICAgICAg ICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKICAgICAgICB9CgoKICAgICAgX194dHJjICs9 IGNoYXIoKTsKICAgICAgaWYgKF9fYmVnID09IF9fZW5kKQogICAgICAgIF9fZXJyIHw9IGlvc19i YXNlOjplb2ZiaXQ7CiAgICAgIHJldHVybiBfX2JlZzsKICAgIH0KCgoKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBfSW5JdGVyCiAgICBudW1fZ2V0PF9D aGFyVCwgX0luSXRlcj46OgogICAgZG9fZ2V0KGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9f ZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIs IGJvb2wmIF9fdikgY29uc3QKICAgIHsKCiAgICAgIGlmICghKF9faW8uZmxhZ3MoKSAmIGlvc19i YXNlOjpib29sYWxwaGEpKQogICAgICAgIHsKCgogICAgICAgICAgc3RyaW5nIF9feHRyYzsKICAg ICAgICAgIGludCBfX2Jhc2U7CiAgICAgICAgICBfX2JlZyA9IF9NX2V4dHJhY3RfaW50KF9fYmVn LCBfX2VuZCwgX19pbywgX19lcnIsIF9feHRyYywgX19iYXNlKTsKCiAgICAgICAgICB1bnNpZ25l ZCBsb25nIF9fdWw7CiAgICAgICAgICBfX2NvbnZlcnRfdG9fdihfX3h0cmMuY19zdHIoKSwgX191 bCwgX19lcnIsIF9TX2NfbG9jYWxlLCBfX2Jhc2UpOwogICAgICAgICAgaWYgKCEoX19lcnIgJiBp b3NfYmFzZTo6ZmFpbGJpdCkgJiYgX191bCA8PSAxKQogICAgICAgICAgICBfX3YgPSBfX3VsOwog ICAgICAgICAgZWxzZQogICAgICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKICAg ICAgICB9CgoKICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgIHR5cGVkZWYgY2hhcl90cmFp dHM8X0NoYXJUPiBfX3RyYWl0c190eXBlOwogICAgICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8 X0NoYXJUPiBfX3N0cmluZ190eXBlOwoKICAgICAgICAgIGxvY2FsZSBfX2xvYyA9IF9faW8uZ2V0 bG9jKCk7CiAgICAgICAgICBjb25zdCBudW1wdW5jdDxfQ2hhclQ+JiBfX25wID0gdXNlX2ZhY2V0 PG51bXB1bmN0PF9DaGFyVD4gPihfX2xvYyk7CiAgICAgICAgICBjb25zdCBfX3N0cmluZ190eXBl IF9fdHJ1ZSA9IF9fbnAudHJ1ZW5hbWUoKTsKICAgICAgICAgIGNvbnN0IF9fc3RyaW5nX3R5cGUg X19mYWxzZSA9IF9fbnAuZmFsc2VuYW1lKCk7CiAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9f dHJ1ZXMgPSBfX3RydWUuY19zdHIoKTsKICAgICAgICAgIGNvbnN0IGNoYXJfdHlwZSogX19mYWxz ZXMgPSBfX2ZhbHNlLmNfc3RyKCk7CiAgICAgICAgICBjb25zdCBzaXplX3QgX190cnVlbiA9IF9f dHJ1ZS5zaXplKCkgLSAxOwogICAgICAgICAgY29uc3Qgc2l6ZV90IF9fZmFsc2VuID0gX19mYWxz ZS5zaXplKCkgLSAxOwoKICAgICAgICAgIGZvciAoc2l6ZV90IF9fbiA9IDA7IF9fYmVnICE9IF9f ZW5kOyArK19fbikKICAgICAgICAgICAgewogICAgICAgICAgICAgIGNoYXJfdHlwZSBfX2MgPSAq X19iZWcrKzsKICAgICAgICAgICAgICBib29sIF9fdGVzdGYgPSBfX24gPD0gX19mYWxzZW4KICAg ICAgICAgICAgICAgICAgICAgICAgICAgICA/IF9fdHJhaXRzX3R5cGU6OmVxKF9fYywgX19mYWxz ZXNbX19uXSkgOiBmYWxzZTsKICAgICAgICAgICAgICBib29sIF9fdGVzdHQgPSBfX24gPD0gX190 cnVlbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gX190cmFpdHNfdHlwZTo6ZXEoX19j LCBfX3RydWVzW19fbl0pIDogZmFsc2U7CiAgICAgICAgICAgICAgaWYgKCEoX190ZXN0ZiB8fCBf X3Rlc3R0KSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgX19lcnIgfD0gaW9z X2Jhc2U6OmZhaWxiaXQ7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAg fQogICAgICAgICAgICAgIGVsc2UgaWYgKF9fdGVzdGYgJiYgX19uID09IF9fZmFsc2VuKQogICAg ICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBfX3YgPSAwOwogICAgICAgICAgICAgICAg ICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBlbHNlIGlmIChfX3Rlc3R0 ICYmIF9fbiA9PSBfX3RydWVuKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBf X3YgPSAxOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAg ICAgICAgfQogICAgICAgICAgaWYgKF9fYmVnID09IF9fZW5kKQogICAgICAgICAgICBfX2VyciB8 PSBpb3NfYmFzZTo6ZW9mYml0OwogICAgICAgIH0KICAgICAgcmV0dXJuIF9fYmVnOwogICAgfQoK CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgX0luSXRl cgogICAgbnVtX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAgIGRvX2dldChpdGVyX3R5cGUgX19i ZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgaW9zX2Jhc2U6 Omlvc3RhdGUmIF9fZXJyLCBsb25nJiBfX3YpIGNvbnN0CiAgICB7CiAgICAgIHN0cmluZyBfX3h0 cmM7CiAgICAgIGludCBfX2Jhc2U7CiAgICAgIF9fYmVnID0gX01fZXh0cmFjdF9pbnQoX19iZWcs IF9fZW5kLCBfX2lvLCBfX2VyciwgX194dHJjLCBfX2Jhc2UpOwogICAgICBfX2NvbnZlcnRfdG9f dihfX3h0cmMuY19zdHIoKSwgX192LCBfX2VyciwgX1NfY19sb2NhbGUsIF9fYmFzZSk7CiAgICAg IHJldHVybiBfX2JlZzsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt ZSBfSW5JdGVyPgogICAgX0luSXRlcgogICAgbnVtX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAg IGRvX2dldChpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8s CiAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB1bnNpZ25lZCBzaG9ydCYgX192 KSBjb25zdAogICAgewogICAgICBzdHJpbmcgX194dHJjOwogICAgICBpbnQgX19iYXNlOwogICAg ICBfX2JlZyA9IF9NX2V4dHJhY3RfaW50KF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9feHRy YywgX19iYXNlKTsKICAgICAgdW5zaWduZWQgbG9uZyBfX3VsOwogICAgICBfX2NvbnZlcnRfdG9f dihfX3h0cmMuY19zdHIoKSwgX191bCwgX19lcnIsIF9TX2NfbG9jYWxlLCBfX2Jhc2UpOwogICAg ICBpZiAoIShfX2VyciAmIGlvc19iYXNlOjpmYWlsYml0KQogICAgICAgICAgJiYgX191bCA8PSBu dW1lcmljX2xpbWl0czx1bnNpZ25lZCBzaG9ydD46Om1heCgpKQogICAgICAgIF9fdiA9IHN0YXRp Y19jYXN0PHVuc2lnbmVkIHNob3J0PihfX3VsKTsKICAgICAgZWxzZQogICAgICAgIF9fZXJyIHw9 IGlvc19iYXNlOjpmYWlsYml0OwogICAgICByZXR1cm4gX19iZWc7CiAgICB9CgogIHRlbXBsYXRl PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIKICAgIG51bV9n ZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBkb19nZXQoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5 cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBf X2VyciwgdW5zaWduZWQgaW50JiBfX3YpIGNvbnN0CiAgICB7CiAgICAgIHN0cmluZyBfX3h0cmM7 CiAgICAgIGludCBfX2Jhc2U7CiAgICAgIF9fYmVnID0gX01fZXh0cmFjdF9pbnQoX19iZWcsIF9f ZW5kLCBfX2lvLCBfX2VyciwgX194dHJjLCBfX2Jhc2UpOwogICAgICB1bnNpZ25lZCBsb25nIF9f dWw7CiAgICAgIF9fY29udmVydF90b192KF9feHRyYy5jX3N0cigpLCBfX3VsLCBfX2VyciwgX1Nf Y19sb2NhbGUsIF9fYmFzZSk7CiAgICAgIGlmICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQp CiAgICAgICAgICAmJiBfX3VsIDw9IG51bWVyaWNfbGltaXRzPHVuc2lnbmVkIGludD46Om1heCgp KQogICAgICAgIF9fdiA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4oX191bCk7CiAgICAgIGVs c2UKICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKICAgICAgcmV0dXJuIF9fYmVn OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAg ICBfSW5JdGVyCiAgICBudW1fZ2V0PF9DaGFyVCwgX0luSXRlcj46OgogICAgZG9fZ2V0KGl0ZXJf dHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICBp b3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHVuc2lnbmVkIGxvbmcmIF9fdikgY29uc3QKICAgIHsK ICAgICAgc3RyaW5nIF9feHRyYzsKICAgICAgaW50IF9fYmFzZTsKICAgICAgX19iZWcgPSBfTV9l eHRyYWN0X2ludChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3h0cmMsIF9fYmFzZSk7CiAg ICAgIF9fY29udmVydF90b192KF9feHRyYy5jX3N0cigpLCBfX3YsIF9fZXJyLCBfU19jX2xvY2Fs ZSwgX19iYXNlKTsKICAgICAgcmV0dXJuIF9fYmVnOwogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgX0luSXRlcgogICAgbnVtX2dldDxfQ2hh clQsIF9Jbkl0ZXI+OjoKICAgIGRvX2dldChpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2Vu ZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBs b25nIGxvbmcmIF9fdikgY29uc3QKICAgIHsKICAgICAgc3RyaW5nIF9feHRyYzsKICAgICAgaW50 IF9fYmFzZTsKICAgICAgX19iZWcgPSBfTV9leHRyYWN0X2ludChfX2JlZywgX19lbmQsIF9faW8s IF9fZXJyLCBfX3h0cmMsIF9fYmFzZSk7CiAgICAgIF9fY29udmVydF90b192KF9feHRyYy5jX3N0 cigpLCBfX3YsIF9fZXJyLCBfU19jX2xvY2FsZSwgX19iYXNlKTsKICAgICAgcmV0dXJuIF9fYmVn OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAg ICBfSW5JdGVyCiAgICBudW1fZ2V0PF9DaGFyVCwgX0luSXRlcj46OgogICAgZG9fZ2V0KGl0ZXJf dHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICBp b3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHVuc2lnbmVkIGxvbmcgbG9uZyYgX192KSBjb25zdAog ICAgewogICAgICBzdHJpbmcgX194dHJjOwogICAgICBpbnQgX19iYXNlOwogICAgICBfX2JlZyA9 IF9NX2V4dHJhY3RfaW50KF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9feHRyYywgX19iYXNl KTsKICAgICAgX19jb252ZXJ0X3RvX3YoX194dHJjLmNfc3RyKCksIF9fdiwgX19lcnIsIF9TX2Nf bG9jYWxlLCBfX2Jhc2UpOwogICAgICByZXR1cm4gX19iZWc7CiAgICB9CgoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBfSW5JdGVyCiAgICBudW1fZ2V0 PF9DaGFyVCwgX0luSXRlcj46OgogICAgZG9fZ2V0KGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBl IF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19l cnIsIGZsb2F0JiBfX3YpIGNvbnN0CiAgICB7CiAgICAgIHN0cmluZyBfX3h0cmM7CiAgICAgIF9f eHRyYy5yZXNlcnZlKDMyKTsKICAgICAgX19iZWcgPSBfTV9leHRyYWN0X2Zsb2F0KF9fYmVnLCBf X2VuZCwgX19pbywgX19lcnIsIF9feHRyYyk7CiAgICAgIF9fY29udmVydF90b192KF9feHRyYy5j X3N0cigpLCBfX3YsIF9fZXJyLCBfU19jX2xvY2FsZSk7CiAgICAgIHJldHVybiBfX2JlZzsKICAg IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgX0lu SXRlcgogICAgbnVtX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAgIGRvX2dldChpdGVyX3R5cGUg X19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgaW9zX2Jh c2U6Omlvc3RhdGUmIF9fZXJyLCBkb3VibGUmIF9fdikgY29uc3QKICAgIHsKICAgICAgc3RyaW5n IF9feHRyYzsKICAgICAgX194dHJjLnJlc2VydmUoMzIpOwogICAgICBfX2JlZyA9IF9NX2V4dHJh Y3RfZmxvYXQoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX194dHJjKTsKICAgICAgX19jb252 ZXJ0X3RvX3YoX194dHJjLmNfc3RyKCksIF9fdiwgX19lcnIsIF9TX2NfbG9jYWxlKTsKICAgICAg cmV0dXJuIF9fYmVnOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l IF9Jbkl0ZXI+CiAgICBfSW5JdGVyCiAgICBudW1fZ2V0PF9DaGFyVCwgX0luSXRlcj46OgogICAg ZG9fZ2V0KGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywK ICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGxvbmcgZG91YmxlJiBfX3YpIGNv bnN0CiAgICB7CiAgICAgIHN0cmluZyBfX3h0cmM7CiAgICAgIF9feHRyYy5yZXNlcnZlKDMyKTsK ICAgICAgX19iZWcgPSBfTV9leHRyYWN0X2Zsb2F0KF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIs IF9feHRyYyk7CiAgICAgIF9fY29udmVydF90b192KF9feHRyYy5jX3N0cigpLCBfX3YsIF9fZXJy LCBfU19jX2xvY2FsZSk7CiAgICAgIHJldHVybiBfX2JlZzsKICAgIH0KCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgX0luSXRlcgogICAgbnVtX2dldDxf Q2hhclQsIF9Jbkl0ZXI+OjoKICAgIGRvX2dldChpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBf X2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJy LCB2b2lkKiYgX192KSBjb25zdAogICAgewoKICAgICAgdHlwZWRlZiBpb3NfYmFzZTo6Zm10Zmxh Z3MgZm10ZmxhZ3M7CiAgICAgIGZtdGZsYWdzIF9fZm10ID0gX19pby5mbGFncygpOwogICAgICBm bXRmbGFncyBfX2ZtdG1hc2sgPSB+KGlvc19iYXNlOjpzaG93cG9zIHwgaW9zX2Jhc2U6OmJhc2Vm aWVsZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaW9zX2Jhc2U6OnVwcGVyY2FzZSB8 IGlvc19iYXNlOjppbnRlcm5hbCk7CiAgICAgIF9faW8uZmxhZ3MoX19mbXQgJiBfX2ZtdG1hc2sg fCAoaW9zX2Jhc2U6OmhleCB8IGlvc19iYXNlOjpzaG93YmFzZSkpOwoKICAgICAgc3RyaW5nIF9f eHRyYzsKICAgICAgaW50IF9fYmFzZTsKICAgICAgX19iZWcgPSBfTV9leHRyYWN0X2ludChfX2Jl ZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3h0cmMsIF9fYmFzZSk7CgoKICAgICAgX19pby5mbGFn cyhfX2ZtdCk7CgogICAgICB1bnNpZ25lZCBsb25nIF9fdWw7CiAgICAgIF9fY29udmVydF90b192 KF9feHRyYy5jX3N0cigpLCBfX3VsLCBfX2VyciwgX1NfY19sb2NhbGUsIF9fYmFzZSk7CiAgICAg IGlmICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQpKQogICAgICAgIF9fdiA9IHJlaW50ZXJw cmV0X2Nhc3Q8dm9pZCo+KF9fdWwpOwogICAgICBlbHNlCiAgICAgICAgX19lcnIgfD0gaW9zX2Jh c2U6OmZhaWxiaXQ7CiAgICAgIHJldHVybiBfX2JlZzsKICAgIH0KIyA2MTggIi91c3IvaW5jbHVk ZS9jKysvMy4yLjEvYml0cy9sb2NhbGVfZmFjZXRzLnRjYyIgMwogIHRlbXBsYXRlPHR5cGVuYW1l IF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVmFsdWVU PgogICAgICBfT3V0SXRlcgogICAgICBudW1fcHV0PF9DaGFyVCwgX091dEl0ZXI+OjoKICAgICAg X01fY29udmVydF9mbG9hdChfT3V0SXRlciBfX3MsIGlvc19iYXNlJiBfX2lvLCBfQ2hhclQgX19m aWxsLCBjaGFyIF9fbW9kLAogICAgICAgICAgICAgICAgICAgICAgIF9WYWx1ZVQgX192KSBjb25z dAogICAgICB7CgoKICAgICAgICBjb25zdCBpbnQgX19tYXhfZGlnaXRzID0gbnVtZXJpY19saW1p dHM8X1ZhbHVlVD46OmRpZ2l0czEwICsgMTsKICAgICAgICBzdHJlYW1zaXplIF9fcHJlYyA9IF9f aW8ucHJlY2lzaW9uKCk7CgogICAgICAgIGlmIChfX3ByZWMgPiBzdGF0aWNfY2FzdDxzdHJlYW1z aXplPihfX21heF9kaWdpdHMpKQogICAgICAgICAgX19wcmVjID0gc3RhdGljX2Nhc3Q8c3RyZWFt c2l6ZT4oX19tYXhfZGlnaXRzKTsKCgogICAgICAgIGNoYXIgX19mYnVmWzE2XTsKCgogICAgICAg IGludCBfX2xlbjsKCgoKICAgICAgICBpbnQgX19jc19zaXplID0gX19tYXhfZGlnaXRzICogMzsK ICAgICAgICBjaGFyKiBfX2NzID0gc3RhdGljX2Nhc3Q8Y2hhcio+KF9fYnVpbHRpbl9hbGxvY2Eo X19jc19zaXplKSk7CgogICAgICAgIGNvbnN0IGJvb2wgX19mcCA9IF9TX2Zvcm1hdF9mbG9hdChf X2lvLCBfX2ZidWYsIF9fbW9kLCBfX3ByZWMpOwogICAgICAgIGlmIChfX2ZwKQogICAgICAgICAg X19sZW4gPSBfX2NvbnZlcnRfZnJvbV92KF9fY3MsIF9fY3Nfc2l6ZSwgX19mYnVmLCBfX3YsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1NfY19sb2NhbGUsIF9fcHJlYyk7CiAg ICAgICAgZWxzZQogICAgICAgICAgX19sZW4gPSBfX2NvbnZlcnRfZnJvbV92KF9fY3MsIF9fY3Nf c2l6ZSwgX19mYnVmLCBfX3YsIF9TX2NfbG9jYWxlKTsKCgogICAgICAgIGlmIChfX2xlbiA+PSBf X2NzX3NpemUpCiAgICAgICAgICB7CiAgICAgICAgICAgIF9fY3Nfc2l6ZSA9IF9fbGVuICsgMTsK ICAgICAgICAgICAgX19jcyA9IHN0YXRpY19jYXN0PGNoYXIqPihfX2J1aWx0aW5fYWxsb2NhKF9f Y3Nfc2l6ZSkpOwogICAgICAgICAgICBpZiAoX19mcCkKICAgICAgICAgICAgICBfX2xlbiA9IF9f Y29udmVydF9mcm9tX3YoX19jcywgX19jc19zaXplLCBfX2ZidWYsIF9fdiwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgX1NfY19sb2NhbGUsIF9fcHJlYyk7CiAgICAgICAg ICAgIGVsc2UKICAgICAgICAgICAgICBfX2xlbiA9IF9fY29udmVydF9mcm9tX3YoX19jcywgX19j c19zaXplLCBfX2ZidWYsIF9fdiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgX1NfY19sb2NhbGUpOwogICAgICAgICAgfQojIDY4MSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIu MS9iaXRzL2xvY2FsZV9mYWNldHMudGNjIiAzCiAgICAgICAgcmV0dXJuIF9NX3dpZGVuX2Zsb2F0 KF9fcywgX19pbywgX19maWxsLCBfX2NzLCBfX2xlbik7CiAgICAgIH0KCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9W YWx1ZVQ+CiAgICAgIF9PdXRJdGVyCiAgICAgIG51bV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46Ogog ICAgICBfTV9jb252ZXJ0X2ludChfT3V0SXRlciBfX3MsIGlvc19iYXNlJiBfX2lvLCBfQ2hhclQg X19maWxsLCBjaGFyIF9fbW9kLAogICAgICAgICAgICAgICAgICAgICBjaGFyIF9fbW9kbCwgX1Zh bHVlVCBfX3YpIGNvbnN0CiAgICAgIHsKCgoKICAgICAgICBjaGFyIF9fZmJ1ZlsxNl07CiAgICAg ICAgX1NfZm9ybWF0X2ludChfX2lvLCBfX2ZidWYsIF9fbW9kLCBfX21vZGwpOwoKCiAgICAgICAg aW50IF9fY3Nfc2l6ZSA9IDY0OwogICAgICAgIGNoYXIqIF9fY3MgPSBzdGF0aWNfY2FzdDxjaGFy Kj4oX19idWlsdGluX2FsbG9jYShfX2NzX3NpemUpKTsKICAgICAgICBpbnQgX19sZW4gPSBfX2Nv bnZlcnRfZnJvbV92KF9fY3MsIF9fY3Nfc2l6ZSwgX19mYnVmLCBfX3YsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBfU19jX2xvY2FsZSk7CgogICAgICAgIGlmIChfX2xlbiA+ PSBfX2NzX3NpemUpCiAgICAgICAgICB7CiAgICAgICAgICAgIF9fY3Nfc2l6ZSA9IF9fbGVuICsg MTsKICAgICAgICAgICAgX19jcyA9IHN0YXRpY19jYXN0PGNoYXIqPihfX2J1aWx0aW5fYWxsb2Nh KF9fY3Nfc2l6ZSkpOwogICAgICAgICAgICBfX2xlbiA9IF9fY29udmVydF9mcm9tX3YoX19jcywg X19jc19zaXplLCBfX2ZidWYsIF9fdiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIF9TX2NfbG9jYWxlKTsKICAgICAgICAgIH0KCgoKCgoKICAgICAgICByZXR1cm4gX01fd2lk ZW5faW50KF9fcywgX19pbywgX19maWxsLCBfX2NzLCBfX2xlbik7CiAgICAgIH0KCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIF9PdXRJdGVyCiAgICBu dW1fcHV0PF9DaGFyVCwgX091dEl0ZXI+OjoKICAgIF9NX3dpZGVuX2Zsb2F0KF9PdXRJdGVyIF9f cywgaW9zX2Jhc2UmIF9faW8sIF9DaGFyVCBfX2ZpbGwsIGNoYXIqIF9fY3MsCiAgICAgICAgICAg ICAgICAgICBpbnQgX19sZW4pIGNvbnN0CiAgICB7CiAgICAgIHR5cGVkZWYgY2hhcl90cmFpdHM8 X0NoYXJUPiBfX3RyYWl0c190eXBlOwoKCiAgICAgIGNvbnN0IGxvY2FsZSBfX2xvYyA9IF9faW8u Z2V0bG9jKCk7CiAgICAgIGNvbnN0IGN0eXBlPF9DaGFyVD4mIF9fY3R5cGUgPSB1c2VfZmFjZXQ8 Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKTsKICAgICAgX0NoYXJUKiBfX3dzID0gc3RhdGljX2Nhc3Q8 X0NoYXJUKj4oX19idWlsdGluX2FsbG9jYShzaXplb2YoX0NoYXJUKQogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogX19sZW4pKTsKCgog ICAgICBfQ2hhclQqIF9fd3MyID0gc3RhdGljX2Nhc3Q8X0NoYXJUKj4oX19idWlsdGluX2FsbG9j YShzaXplb2YoX0NoYXJUKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAqIF9fbGVuICogMikpOwogICAgICBfX2N0eXBlLndpZGVuKF9f Y3MsIF9fY3MgKyBfX2xlbiwgX193cyk7CgoKICAgICAgY29uc3QgX0NoYXJUKiBfX3A7CiAgICAg IGNvbnN0IG51bXB1bmN0PF9DaGFyVD4mIF9fbnAgPSB1c2VfZmFjZXQ8bnVtcHVuY3Q8X0NoYXJU PiA+KF9fbG9jKTsKICAgICAgaWYgKF9fcCA9IF9fdHJhaXRzX3R5cGU6OmZpbmQoX193cywgX19s ZW4sIF9fY3R5cGUud2lkZW4oJy4nKSkpCiAgICAgICAgX193c1tfX3AgLSBfX3dzXSA9IF9fbnAu ZGVjaW1hbF9wb2ludCgpOwoKCgoKICAgICAgY29uc3Qgc3RyaW5nIF9fZ3JvdXBpbmcgPSBfX25w Lmdyb3VwaW5nKCk7CiAgICAgIGlvc19iYXNlOjpmbXRmbGFncyBfX2Jhc2VmaWVsZCA9IF9faW8u ZmxhZ3MoKSAmIGlvc19iYXNlOjpiYXNlZmllbGQ7CiAgICAgIGlmIChfX2dyb3VwaW5nLnNpemUo KSkKICAgICAgICB7CiAgICAgICAgICBfQ2hhclQqIF9fcDI7CiAgICAgICAgICBpbnQgX19kZWNs ZW4gPSBfX3AgPyBfX3AgLSBfX3dzIDogX19sZW47CiAgICAgICAgICBfX3AyID0gX19hZGRfZ3Jv dXBpbmcoX193czIsIF9fbnAudGhvdXNhbmRzX3NlcCgpLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIF9fZ3JvdXBpbmcuY19zdHIoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBfX2dyb3VwaW5nLmNfc3RyKCkgKyBfX2dyb3VwaW5nLnNpemUoKSwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBfX3dzLCBfX3dzICsgX19kZWNsZW4pOwogICAgICAgICAgaW50 IF9fbmV3bGVuID0gX19wMiAtIF9fd3MyOwoKCiAgICAgICAgICBpZiAoX19wKQogICAgICAgICAg ICB7CiAgICAgICAgICAgICAgX190cmFpdHNfdHlwZTo6Y29weShfX3AyLCBfX3AsIF9fbGVuIC0g X19kZWNsZW4pOwogICAgICAgICAgICAgIF9fbmV3bGVuICs9IF9fbGVuIC0gX19kZWNsZW47CiAg ICAgICAgICAgIH0KCgogICAgICAgICAgX193cyA9IF9fd3MyOwogICAgICAgICAgX19sZW4gPSBf X25ld2xlbjsKICAgICAgICB9CgogICAgICByZXR1cm4gX01faW5zZXJ0KF9fcywgX19pbywgX19m aWxsLCBfX3dzLCBfX2xlbik7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw ZW5hbWUgX091dEl0ZXI+CiAgICBfT3V0SXRlcgogICAgbnVtX3B1dDxfQ2hhclQsIF9PdXRJdGVy Pjo6CiAgICBfTV93aWRlbl9pbnQoX091dEl0ZXIgX19zLCBpb3NfYmFzZSYgX19pbywgX0NoYXJU IF9fZmlsbCwgY2hhciogX19jcywKICAgICAgICAgICAgICAgICBpbnQgX19sZW4pIGNvbnN0CiAg ICB7CgoKICAgICAgY29uc3QgbG9jYWxlIF9fbG9jID0gX19pby5nZXRsb2MoKTsKICAgICAgY29u c3QgY3R5cGU8X0NoYXJUPiYgX19jdHlwZSA9IHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19s b2MpOwogICAgICBfQ2hhclQqIF9fd3MgPSBzdGF0aWNfY2FzdDxfQ2hhclQqPihfX2J1aWx0aW5f YWxsb2NhKHNpemVvZihfQ2hhclQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKiBfX2xlbikpOwoKCiAgICAgIF9DaGFyVCogX193czIg PSBzdGF0aWNfY2FzdDxfQ2hhclQqPihfX2J1aWx0aW5fYWxsb2NhKHNpemVvZihfQ2hhclQpCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICogX19sZW4gKiAyKSk7CiAgICAgIF9fY3R5cGUud2lkZW4oX19jcywgX19jcyArIF9fbGVuLCBf X3dzKTsKCgogICAgICBjb25zdCBudW1wdW5jdDxfQ2hhclQ+JiBfX25wID0gdXNlX2ZhY2V0PG51 bXB1bmN0PF9DaGFyVD4gPihfX2xvYyk7CiAgICAgIGNvbnN0IHN0cmluZyBfX2dyb3VwaW5nID0g X19ucC5ncm91cGluZygpOwogICAgICBjb25zdCBpb3NfYmFzZTo6Zm10ZmxhZ3MgX19iYXNlZmll bGQgPSBfX2lvLmZsYWdzKCkgJiBpb3NfYmFzZTo6YmFzZWZpZWxkOwogICAgICBpZiAoX19ncm91 cGluZy5zaXplKCkpCiAgICAgICAgewoKCgoKCiAgICAgICAgICBzdHJlYW1zaXplIF9fb2ZmID0g MDsKICAgICAgICAgIGlmICgoX19pby5mbGFncygpICYgaW9zX2Jhc2U6OnNob3diYXNlKSAmJiBf X2xlbiA+IDEpCiAgICAgICAgICAgIGlmIChfX2Jhc2VmaWVsZCA9PSBpb3NfYmFzZTo6b2N0KQog ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIF9fb2ZmID0gMTsKICAgICAgICAgICAgICAg ICpfX3dzMiA9ICpfX3dzOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSBpZiAoX19i YXNlZmllbGQgPT0gaW9zX2Jhc2U6OmhleCkKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAg ICBfX29mZiA9IDI7CiAgICAgICAgICAgICAgICAqX193czIgPSAqX193czsKICAgICAgICAgICAg ICAgICooX193czIgKyAxKSA9ICooX193cyArIDEpOwogICAgICAgICAgICAgIH0KICAgICAgICAg IF9DaGFyVCogX19wOwogICAgICAgICAgX19wID0gX19hZGRfZ3JvdXBpbmcoX193czIgKyBfX29m ZiwgX19ucC50aG91c2FuZHNfc2VwKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf X2dyb3VwaW5nLmNfc3RyKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2dyb3Vw aW5nLmNfc3RyKCkgKyBfX2dyb3VwaW5nLnNpemUoKSwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIF9fd3MgKyBfX29mZiwgX193cyArIF9fbGVuKTsKICAgICAgICAgIF9fbGVuID0gX19w IC0gX193czI7CgogICAgICAgICAgX193cyA9IF9fd3MyOwogICAgICAgIH0KICAgICAgcmV0dXJu IF9NX2luc2VydChfX3MsIF9faW8sIF9fZmlsbCwgX193cywgX19sZW4pOwogICAgfQoKCgogIHRl bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBfT3V0SXRlcgog ICAgbnVtX3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6CiAgICBfTV9pbnNlcnQoX091dEl0ZXIgX19z LCBpb3NfYmFzZSYgX19pbywgX0NoYXJUIF9fZmlsbCwgY29uc3QgX0NoYXJUKiBfX3dzLAogICAg ICAgICAgICAgIGludCBfX2xlbikgY29uc3QKICAgIHsKICAgICAgdHlwZWRlZiBjaGFyX3RyYWl0 czxfQ2hhclQ+IF9fdHJhaXRzX3R5cGU7CgogICAgICBzdHJlYW1zaXplIF9fdyA9IF9faW8ud2lk dGgoKTsKICAgICAgX0NoYXJUKiBfX3dzMiA9IHN0YXRpY19jYXN0PF9DaGFyVCo+KF9fYnVpbHRp bl9hbGxvY2Eoc2l6ZW9mKF9DaGFyVCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBfX3cpKTsKICAgICAgaWYgKF9fdyA+IHN0YXRp Y19jYXN0PHN0cmVhbXNpemU+KF9fbGVuKSkKICAgICAgICB7CiAgICAgICAgICBfX3BhZDxfQ2hh clQsIF9fdHJhaXRzX3R5cGU+OjpfU19wYWQoX19pbywgX19maWxsLCBfX3dzMiwgX193cywKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3csIF9fbGVuLCB0 cnVlKTsKICAgICAgICAgIF9fbGVuID0gc3RhdGljX2Nhc3Q8aW50PihfX3cpOwoKICAgICAgICAg IF9fd3MgPSBfX3dzMjsKICAgICAgICB9CiAgICAgIF9faW8ud2lkdGgoMCk7CgoKCiAgICAgIGZv ciAoaW50IF9faiA9IDA7IF9faiA8IF9fbGVuOyArK19faiwgKytfX3MpCiAgICAgICAgKl9fcyA9 IF9fd3NbX19qXTsKICAgICAgcmV0dXJuIF9fczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg X0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIF9PdXRJdGVyCiAgICBudW1fcHV0PF9DaGFy VCwgX091dEl0ZXI+OjoKICAgIGRvX3B1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19pbywg Y2hhcl90eXBlIF9fZmlsbCwgYm9vbCBfX3YpIGNvbnN0CiAgICB7CiAgICAgIGlvc19iYXNlOjpm bXRmbGFncyBfX2ZsYWdzID0gX19pby5mbGFncygpOwogICAgICBpZiAoKF9fZmxhZ3MgJiBpb3Nf YmFzZTo6Ym9vbGFscGhhKSA9PSAwKQogICAgICAgIHsKICAgICAgICAgIHVuc2lnbmVkIGxvbmcg X191diA9IF9fdjsKICAgICAgICAgIF9fcyA9IF9NX2NvbnZlcnRfaW50KF9fcywgX19pbywgX19m aWxsLCAndScsIGNoYXIoKSwgX191dik7CiAgICAgICAgfQogICAgICBlbHNlCiAgICAgICAgewog ICAgICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJUPiBfX3N0cmluZ190eXBlOwogICAg ICAgICAgbG9jYWxlIF9fbG9jID0gX19pby5nZXRsb2MoKTsKICAgICAgICAgIGNvbnN0IG51bXB1 bmN0PF9DaGFyVD4mIF9fbnAgPSB1c2VfZmFjZXQ8bnVtcHVuY3Q8X0NoYXJUPiA+KF9fbG9jKTsK ICAgICAgICAgIF9fc3RyaW5nX3R5cGUgX19uYW1lOwogICAgICAgICAgaWYgKF9fdikKICAgICAg ICAgICAgX19uYW1lID0gX19ucC50cnVlbmFtZSgpOwogICAgICAgICAgZWxzZQogICAgICAgICAg ICBfX25hbWUgPSBfX25wLmZhbHNlbmFtZSgpOwogICAgICAgICAgX19zID0gX01faW5zZXJ0KF9f cywgX19pbywgX19maWxsLCBfX25hbWUuY19zdHIoKSwgX19uYW1lLnNpemUoKSk7CiAgICAgICAg fQogICAgICByZXR1cm4gX19zOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5 cGVuYW1lIF9PdXRJdGVyPgogICAgX091dEl0ZXIKICAgIG51bV9wdXQ8X0NoYXJULCBfT3V0SXRl cj46OgogICAgZG9fcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUg X19maWxsLCBsb25nIF9fdikgY29uc3QKICAgIHsgcmV0dXJuIF9NX2NvbnZlcnRfaW50KF9fcywg X19pbywgX19maWxsLCAnZCcsIGNoYXIoKSwgX192KTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf Q2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgX091dEl0ZXIKICAgIG51bV9wdXQ8X0NoYXJU LCBfT3V0SXRlcj46OgogICAgZG9fcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2lvLCBj aGFyX3R5cGUgX19maWxsLAogICAgICAgICAgIHVuc2lnbmVkIGxvbmcgX192KSBjb25zdAogICAg eyByZXR1cm4gX01fY29udmVydF9pbnQoX19zLCBfX2lvLCBfX2ZpbGwsICd1JywgY2hhcigpLCBf X3YpOyB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgog ICAgX091dEl0ZXIKICAgIG51bV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OgogICAgZG9fcHV0KGl0 ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2IsIGNoYXJfdHlwZSBfX2ZpbGwsIGxvbmcgbG9uZyBf X3YpIGNvbnN0CiAgICB7IHJldHVybiBfTV9jb252ZXJ0X2ludChfX3MsIF9fYiwgX19maWxsLCAn ZCcsICdsJywgX192KTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9P dXRJdGVyPgogICAgX091dEl0ZXIKICAgIG51bV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OgogICAg ZG9fcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUgX19maWxsLAog ICAgICAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBfX3YpIGNvbnN0CiAgICB7IHJldHVybiBfTV9j b252ZXJ0X2ludChfX3MsIF9faW8sIF9fZmlsbCwgJ3UnLCAnbCcsIF9fdik7IH0KCgogIHRlbXBs YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBfT3V0SXRlcgogICAg bnVtX3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6CiAgICBkb19wdXQoaXRlcl90eXBlIF9fcywgaW9z X2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsIGRvdWJsZSBfX3YpIGNvbnN0CiAgICB7IHJl dHVybiBfTV9jb252ZXJ0X2Zsb2F0KF9fcywgX19pbywgX19maWxsLCBjaGFyKCksIF9fdik7IH0K CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIF9PdXRJ dGVyCiAgICBudW1fcHV0PF9DaGFyVCwgX091dEl0ZXI+OjoKICAgIGRvX3B1dChpdGVyX3R5cGUg X19zLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwKICAgICAgICAgICBsb25nIGRv dWJsZSBfX3YpIGNvbnN0CiAgICB7IHJldHVybiBfTV9jb252ZXJ0X2Zsb2F0KF9fcywgX19pbywg X19maWxsLCAnTCcsIF9fdik7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt ZSBfT3V0SXRlcj4KICAgIF9PdXRJdGVyCiAgICBudW1fcHV0PF9DaGFyVCwgX091dEl0ZXI+OjoK ICAgIGRvX3B1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmls bCwKICAgICAgICAgICBjb25zdCB2b2lkKiBfX3YpIGNvbnN0CiAgICB7CiAgICAgIGlvc19iYXNl OjpmbXRmbGFncyBfX2ZsYWdzID0gX19pby5mbGFncygpOwogICAgICBpb3NfYmFzZTo6Zm10Zmxh Z3MgX19mbXQgPSB+KGlvc19iYXNlOjpzaG93cG9zIHwgaW9zX2Jhc2U6OmJhc2VmaWVsZAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaW9zX2Jhc2U6OnVwcGVyY2FzZSB8IGlv c19iYXNlOjppbnRlcm5hbCk7CiAgICAgIF9faW8uZmxhZ3MoX19mbGFncyAmIF9fZm10IHwgKGlv c19iYXNlOjpoZXggfCBpb3NfYmFzZTo6c2hvd2Jhc2UpKTsKICAgICAgdHJ5CiAgICAgICAgewog ICAgICAgICAgX19zID0gX01fY29udmVydF9pbnQoX19zLCBfX2lvLCBfX2ZpbGwsICd1JywgY2hh cigpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx1bnNp Z25lZCBsb25nPihfX3YpKTsKICAgICAgICAgIF9faW8uZmxhZ3MoX19mbGFncyk7CiAgICAgICAg fQogICAgICBjYXRjaCAoLi4uKQogICAgICAgIHsKICAgICAgICAgIF9faW8uZmxhZ3MoX19mbGFn cyk7CiAgICAgICAgICB0aHJvdzsKICAgICAgICB9CiAgICAgIHJldHVybiBfX3M7CiAgICB9CgoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBfSW5JdGVy CiAgICBtb25leV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBkb19nZXQoaXRlcl90eXBlIF9f YmVnLCBpdGVyX3R5cGUgX19lbmQsIGJvb2wgX19pbnRsLCBpb3NfYmFzZSYgX19pbywKICAgICAg ICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGxvbmcgZG91YmxlJiBfX3VuaXRzKSBjb25z dAogICAgewogICAgICBzdHJpbmdfdHlwZSBfX3N0cjsKICAgICAgX19iZWcgPSB0aGlzLT5kb19n ZXQoX19iZWcsIF9fZW5kLCBfX2ludGwsIF9faW8sIF9fZXJyLCBfX3N0cik7CgogICAgICBjb25z dCBpbnQgX19uID0gbnVtZXJpY19saW1pdHM8bG9uZyBkb3VibGU+OjpkaWdpdHMxMDsKICAgICAg Y2hhciogX19jcyA9IHN0YXRpY19jYXN0PGNoYXIqPihfX2J1aWx0aW5fYWxsb2NhKF9fbikpOwog ICAgICBjb25zdCBsb2NhbGUgX19sb2MgPSBfX2lvLmdldGxvYygpOwogICAgICBjb25zdCBjdHlw ZTxfQ2hhclQ+JiBfX2N0eXBlID0gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYyk7CiAg ICAgIGNvbnN0IF9DaGFyVCogX193Y3MgPSBfX3N0ci5jX3N0cigpOwogICAgICBfX2N0eXBlLm5h cnJvdyhfX3djcywgX193Y3MgKyBfX3N0ci5zaXplKCkgKyAxLCBjaGFyKCksIF9fY3MpOwogICAg ICBfX2NvbnZlcnRfdG9fdihfX2NzLCBfX3VuaXRzLCBfX2VyciwgX1NfY19sb2NhbGUpOwogICAg ICByZXR1cm4gX19iZWc7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h bWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIKICAgIG1vbmV5X2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoK ICAgIGRvX2dldChpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgYm9vbCBfX2ludGws IGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2Vyciwgc3Ry aW5nX3R5cGUmIF9fdW5pdHMpIGNvbnN0CiAgICB7CgogICAgICB0eXBlZGVmIG1vbmV5cHVuY3Q8 X0NoYXJULCB0cnVlPiBfX21vbmV5X3RydWU7CiAgICAgIHR5cGVkZWYgbW9uZXlwdW5jdDxfQ2hh clQsIGZhbHNlPiBfX21vbmV5X2ZhbHNlOwogICAgICB0eXBlZGVmIG1vbmV5X2Jhc2U6OnBhcnQg cGFydDsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBzdHJpbmdfdHlwZTo6c2l6ZV90eXBlIHNpemVf dHlwZTsKCiAgICAgIGNvbnN0IGxvY2FsZSBfX2xvYyA9IF9faW8uZ2V0bG9jKCk7CiAgICAgIGNv bnN0IF9fbW9uZXlfdHJ1ZSYgX19tcHQgPSB1c2VfZmFjZXQ8X19tb25leV90cnVlPihfX2xvYyk7 CiAgICAgIGNvbnN0IF9fbW9uZXlfZmFsc2UmIF9fbXBmID0gdXNlX2ZhY2V0PF9fbW9uZXlfZmFs c2U+KF9fbG9jKTsKICAgICAgY29uc3QgY3R5cGU8X0NoYXJUPiYgX19jdHlwZSA9IHVzZV9mYWNl dDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpOwoKICAgICAgY29uc3QgbW9uZXlfYmFzZTo6cGF0dGVy biBfX3AgPSBfX2ludGwgPyBfX21wdC5uZWdfZm9ybWF0KCkKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgOiBfX21wZi5uZWdfZm9ybWF0KCk7CgogICAgICBjb25z dCBzdHJpbmdfdHlwZSBfX3Bvc19zaWduID1fX2ludGwgPyBfX21wdC5wb3NpdGl2ZV9zaWduKCkK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogX19tcGYucG9zaXRp dmVfc2lnbigpOwogICAgICBjb25zdCBzdHJpbmdfdHlwZSBfX25lZ19zaWduID1fX2ludGwgPyBf X21wdC5uZWdhdGl2ZV9zaWduKCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIDogX19tcGYubmVnYXRpdmVfc2lnbigpOwogICAgICBjb25zdCBjaGFyX3R5cGUgX19k ID0gX19pbnRsID8gX19tcHQuZGVjaW1hbF9wb2ludCgpCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgOiBfX21wZi5kZWNpbWFsX3BvaW50KCk7CiAgICAgIGNvbnN0IGNoYXJfdHlw ZSBfX3NlcCA9IF9faW50bCA/IF9fbXB0LnRob3VzYW5kc19zZXAoKQogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgOiBfX21wZi50aG91c2FuZHNfc2VwKCk7CgogICAgICBjb25z dCBzdHJpbmcgX19ncm91cGluZyA9IF9faW50bCA/IF9fbXB0Lmdyb3VwaW5nKCkgOiBfX21wZi5n cm91cGluZygpOwoKCiAgICAgIHN0cmluZ190eXBlIF9fc2lnbjsKCiAgICAgIHN0cmluZyBfX2dy b3VwaW5nX3RtcDsKCiAgICAgIGludCBfX3NlcF9wb3MgPSAwOwoKICAgICAgYm9vbCBfX3Rlc3R2 YWxpZCA9IHRydWU7CgogICAgICBib29sIF9fdGVzdGRlY2ZvdW5kID0gZmFsc2U7CgoKICAgICAg c3RyaW5nX3R5cGUgX190ZW1wX3VuaXRzOwoKICAgICAgY2hhcl90eXBlIF9fYyA9ICpfX2JlZzsK ICAgICAgY2hhcl90eXBlIF9fZW9mID0gc3RhdGljX2Nhc3Q8Y2hhcl90eXBlPihjaGFyX3RyYWl0 czxjaGFyX3R5cGU+Ojplb2YoKSk7CiAgICAgIGZvciAoaW50IF9faSA9IDA7IF9fYmVnICE9IF9f ZW5kICYmIF9faSA8IDQgJiYgX190ZXN0dmFsaWQ7ICsrX19pKQogICAgICAgIHsKICAgICAgICAg IHBhcnQgX193aGljaCA9IHN0YXRpY19jYXN0PHBhcnQ+KF9fcC5maWVsZFtfX2ldKTsKICAgICAg ICAgIHN3aXRjaCAoX193aGljaCkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGNh c2UgbW9uZXlfYmFzZTo6c3ltYm9sOgogICAgICAgICAgICAgICAgICBpZiAoX19pby5mbGFncygp ICYgaW9zX2Jhc2U6OnNob3diYXNlCiAgICAgICAgICAgICAgICAgICAgICB8fCBfX2kgPCAyIHx8 IF9fc2lnbi5zaXplKCkgPiAxCiAgICAgICAgICAgICAgICAgICAgICB8fCAoKHN0YXRpY19jYXN0 PHBhcnQ+KF9fcC5maWVsZFszXSkgIT0gbW9uZXlfYmFzZTo6bm9uZSkKICAgICAgICAgICAgICAg ICAgICAgICAgICAmJiBfX2kgPT0gMikpCiAgICAgICAgICAgICAgICAgICAgewoKCgoKCiAgICAg ICAgICAgICAgICAgICAgICBjb25zdCBzdHJpbmdfdHlwZSBfX3N5bWJvbCA9IF9faW50bCA/IF9f bXB0LmN1cnJfc3ltYm9sKCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgOiBfX21wZi5jdXJyX3N5bWJvbCgpOwogICAgICAgICAgICAgICAg ICAgICAgc2l6ZV90eXBlIF9fbGVuID0gX19zeW1ib2wuc2l6ZSgpOwogICAgICAgICAgICAgICAg ICAgICAgc2l6ZV90eXBlIF9faiA9IDA7CiAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoX19i ZWcgIT0gX19lbmQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBfX2ogPCBfX2xlbiAm JiBfX3N5bWJvbFtfX2pdID09IF9fYykKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAg ICAgICAgICAgICAgICAgICAgIF9fYyA9ICooKytfX2JlZyk7CiAgICAgICAgICAgICAgICAgICAg ICAgICAgKytfX2o7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCgogICAgICAgICAgICAgICAg ICAgICAgaWYgKF9faiAhPSBfX2xlbiAmJiAoX19pby5mbGFncygpICYgaW9zX2Jhc2U6OnNob3di YXNlKSkKICAgICAgICAgICAgICAgICAgICAgICAgX190ZXN0dmFsaWQgPSBmYWxzZTsKICAgICAg ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAg Y2FzZSBtb25leV9iYXNlOjpzaWduOgoKICAgICAgICAgICAgICAgICAgaWYgKF9fcG9zX3NpZ24u c2l6ZSgpICYmIF9fbmVnX3NpZ24uc2l6ZSgpKQogICAgICAgICAgICAgICAgICB7CgogICAgICAg ICAgICAgICAgICAgIGlmIChfX2MgPT0gX19wb3Nfc2lnblswXSkKICAgICAgICAgICAgICAgICAg ICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgX19zaWduID0gX19wb3Nfc2lnbjsKICAgICAg ICAgICAgICAgICAgICAgICAgX19jID0gKigrK19fYmVnKTsKICAgICAgICAgICAgICAgICAgICAg IH0KICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChfX2MgPT0gX19uZWdfc2lnblswXSkKICAg ICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgX19zaWduID0gX19u ZWdfc2lnbjsKICAgICAgICAgICAgICAgICAgICAgICAgX19jID0gKigrK19fYmVnKTsKICAgICAg ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAg ICAgICAgICBfX3Rlc3R2YWxpZCA9IGZhbHNlOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAg ICAgICAgICAgIGVsc2UgaWYgKF9fcG9zX3NpZ24uc2l6ZSgpICYmIF9fYyA9PSBfX3Bvc19zaWdu WzBdKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgIF9fc2lnbiA9 IF9fcG9zX3NpZ247CiAgICAgICAgICAgICAgICAgICAgICBfX2MgPSAqKCsrX19iZWcpOwogICAg ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoX19uZWdfc2lnbi5z aXplKCkgJiYgX19jID09IF9fbmVnX3NpZ25bMF0pCiAgICAgICAgICAgICAgICAgICAgewogICAg ICAgICAgICAgICAgICAgICAgX19zaWduID0gX19uZWdfc2lnbjsKICAgICAgICAgICAgICAgICAg ICAgIF9fYyA9ICooKytfX2JlZyk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg ICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgbW9uZXlfYmFzZTo6dmFsdWU6CgoKICAg ICAgICAgICAgICAgICAgd2hpbGUgKF9fYmVnICE9IF9fZW5kCiAgICAgICAgICAgICAgICAgICAg ICAgICAmJiAoX19jdHlwZS5pcyhjdHlwZV9iYXNlOjpkaWdpdCwgX19jKQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHx8IChfX2MgPT0gX19kICYmICFfX3Rlc3RkZWNmb3VuZCkKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB8fCBfX2MgPT0gX19zZXApKQogICAgICAgICAgICAgICAg ICAgIHsKICAgICAgICAgICAgICAgICAgICAgIGlmIChfX2MgPT0gX19kKQogICAgICAgICAgICAg ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgX19ncm91cGluZ190bXAgKz0g c3RhdGljX2Nhc3Q8Y2hhcj4oX19zZXBfcG9zKTsKICAgICAgICAgICAgICAgICAgICAgICAgICBf X3NlcF9wb3MgPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgIF9fdGVzdGRlY2ZvdW5kID0g dHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgZWxz ZSBpZiAoX19jID09IF9fc2VwKQogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAg ICAgICAgICAgICAgICAgaWYgKF9fZ3JvdXBpbmcuc2l6ZSgpKQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19ncm91cGluZ190bXAg Kz0gc3RhdGljX2Nhc3Q8Y2hhcj4oX19zZXBfcG9zKTsKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgX19zZXBfcG9zID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAg ICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdGVzdHZhbGlkID0gZmFsc2U7CiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg fQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICBlbHNlCiAg ICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICBfX3RlbXBf dW5pdHMgKz0gX19jOwogICAgICAgICAgICAgICAgICAgICAgICAgICsrX19zZXBfcG9zOwogICAg ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICBfX2MgPSAqKCsrX19i ZWcpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg ICAgICAgICAgICBjYXNlIG1vbmV5X2Jhc2U6OnNwYWNlOgogICAgICAgICAgICAgICAgY2FzZSBt b25leV9iYXNlOjpub25lOgoKICAgICAgICAgICAgICAgICAgaWYgKF9faSAhPSAzKQogICAgICAg ICAgICAgICAgICAgIHdoaWxlIChfX2JlZyAhPSBfX2VuZAogICAgICAgICAgICAgICAgICAgICAg ICAgICAmJiBfX2N0eXBlLmlzKGN0eXBlX2Jhc2U6OnNwYWNlLCBfX2MpKQogICAgICAgICAgICAg ICAgICAgICAgX19jID0gKigrK19fYmVnKTsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg ICAgICAgICAgICB9CiAgICAgICAgfQoKCiAgICAgIGlmIChfX3NpZ24uc2l6ZSgpID4gMSkKICAg ICAgICB7CiAgICAgICAgICBzaXplX3R5cGUgX19sZW4gPSBfX3NpZ24uc2l6ZSgpOwogICAgICAg ICAgc2l6ZV90eXBlIF9faSA9IDE7CiAgICAgICAgICBmb3IgKDsgX19jICE9IF9fZW9mICYmIF9f aSA8IF9fbGVuOyArK19faSkKICAgICAgICAgICAgd2hpbGUgKF9fYmVnICE9IF9fZW5kICYmIF9f YyAhPSBfX3NpZ25bX19pXSkKICAgICAgICAgICAgICBfX2MgPSAqKCsrX19iZWcpOwoKICAgICAg ICAgIGlmIChfX2kgIT0gX19sZW4pCiAgICAgICAgICAgIF9fdGVzdHZhbGlkID0gZmFsc2U7CiAg ICAgICAgfQoKCiAgICAgIHdoaWxlIChfX3RlbXBfdW5pdHNbMF0gPT0gX19jdHlwZS53aWRlbign MCcpKQogICAgICAgIF9fdGVtcF91bml0cy5lcmFzZShfX3RlbXBfdW5pdHMuYmVnaW4oKSk7Cgog ICAgICBpZiAoX19zaWduLnNpemUoKSAmJiBfX3NpZ24gPT0gX19uZWdfc2lnbikKICAgICAgICBf X3RlbXBfdW5pdHMuaW5zZXJ0KF9fdGVtcF91bml0cy5iZWdpbigpLCBfX2N0eXBlLndpZGVuKCct JykpOwoKCiAgICAgIGlmIChfX2dyb3VwaW5nLnNpemUoKSAmJiBfX2dyb3VwaW5nX3RtcC5zaXpl KCkpCiAgICAgICAgewogICAgICAgICAgaWYgKCFfX3ZlcmlmeV9ncm91cGluZyhfX2dyb3VwaW5n LCBfX2dyb3VwaW5nX3RtcCkpCiAgICAgICAgICAgIF9fdGVzdHZhbGlkID0gZmFsc2U7CiAgICAg ICAgfQoKCiAgICAgIGlmIChfX2MgPT0gX19lb2YpCiAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6 OmVvZmJpdDsKCgogICAgICBpZiAoIV9fdGVzdHZhbGlkIHx8ICFfX3RlbXBfdW5pdHMuc2l6ZSgp KQogICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwogICAgICBlbHNlCgogICAgICAg IF9fdGVtcF91bml0cy5zd2FwKF9fdW5pdHMpOwoKICAgICAgcmV0dXJuIF9fYmVnOwogICAgfQoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgX091dEl0 ZXIKICAgIG1vbmV5X3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6CiAgICBkb19wdXQoaXRlcl90eXBl IF9fcywgYm9vbCBfX2ludGwsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUgX19maWxsLAogICAg ICAgICAgIGxvbmcgZG91YmxlIF9fdW5pdHMpIGNvbnN0CiAgICB7CiAgICAgIGNvbnN0IGxvY2Fs ZSBfX2xvYyA9IF9faW8uZ2V0bG9jKCk7CiAgICAgIGNvbnN0IGN0eXBlPF9DaGFyVD4mIF9fY3R5 cGUgPSB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKTsKCgogICAgICBpbnQgX19jc19z aXplID0gNjQ7CiAgICAgIGNoYXIqIF9fY3MgPSBzdGF0aWNfY2FzdDxjaGFyKj4oX19idWlsdGlu X2FsbG9jYShfX2NzX3NpemUpKTsKICAgICAgaW50IF9fbGVuID0gX19jb252ZXJ0X2Zyb21fdihf X2NzLCBfX2NzX3NpemUsICIlLjAxTGYiLCBfX3VuaXRzLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIF9TX2NfbG9jYWxlKTsKCiAgICAgIGlmIChfX2xlbiA+PSBfX2NzX3NpemUp CiAgICAgICAgewogICAgICAgICAgX19jc19zaXplID0gX19sZW4gKyAxOwogICAgICAgICAgX19j cyA9IHN0YXRpY19jYXN0PGNoYXIqPihfX2J1aWx0aW5fYWxsb2NhKF9fY3Nfc2l6ZSkpOwogICAg ICAgICAgX19sZW4gPSBfX2NvbnZlcnRfZnJvbV92KF9fY3MsIF9fY3Nfc2l6ZSwgIiUuMDFMZiIs IF9fdW5pdHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1NfY19sb2NhbGUp OwogICAgICAgIH0KCgoKCgoKCiAgICAgIF9DaGFyVCogX193cyA9IHN0YXRpY19jYXN0PF9DaGFy VCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKF9DaGFyVCkgKiBfX2NzX3NpemUpKTsKICAgICAg X19jdHlwZS53aWRlbihfX2NzLCBfX2NzICsgX19sZW4sIF9fd3MpOwogICAgICBzdHJpbmdfdHlw ZSBfX2RpZ2l0cyhfX3dzKTsKICAgICAgcmV0dXJuIHRoaXMtPmRvX3B1dChfX3MsIF9faW50bCwg X19pbywgX19maWxsLCBfX2RpZ2l0cyk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy VCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBfT3V0SXRlcgogICAgbW9uZXlfcHV0PF9DaGFyVCwg X091dEl0ZXI+OjoKICAgIGRvX3B1dChpdGVyX3R5cGUgX19zLCBib29sIF9faW50bCwgaW9zX2Jh c2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsCiAgICAgICAgICAgY29uc3Qgc3RyaW5nX3R5cGUm IF9fZGlnaXRzKSBjb25zdAogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIHN0cmluZ190eXBl OjpzaXplX3R5cGUgc2l6ZV90eXBlOwogICAgICB0eXBlZGVmIG1vbmV5X2Jhc2U6OnBhcnQgcGFy dDsKCiAgICAgIGNvbnN0IGxvY2FsZSBfX2xvYyA9IF9faW8uZ2V0bG9jKCk7CiAgICAgIGNvbnN0 IHNpemVfdHlwZSBfX3dpZHRoID0gc3RhdGljX2Nhc3Q8c2l6ZV90eXBlPihfX2lvLndpZHRoKCkp OwoKCiAgICAgIHR5cGVkZWYgbW9uZXlwdW5jdDxfQ2hhclQsIHRydWU+IF9fbW9uZXlfdHJ1ZTsK ICAgICAgdHlwZWRlZiBtb25leXB1bmN0PF9DaGFyVCwgZmFsc2U+IF9fbW9uZXlfZmFsc2U7CiAg ICAgIGNvbnN0IF9fbW9uZXlfdHJ1ZSYgX19tcHQgPSB1c2VfZmFjZXQ8X19tb25leV90cnVlPihf X2xvYyk7CiAgICAgIGNvbnN0IF9fbW9uZXlfZmFsc2UmIF9fbXBmID0gdXNlX2ZhY2V0PF9fbW9u ZXlfZmFsc2U+KF9fbG9jKTsKICAgICAgY29uc3QgY3R5cGU8X0NoYXJUPiYgX19jdHlwZSA9IHVz ZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpOwoKCgogICAgICBjb25zdCBjaGFyX3R5cGUq IF9fYmVnID0gX19kaWdpdHMuZGF0YSgpOwogICAgICBjb25zdCBjaGFyX3R5cGUqIF9fZW5kID0g X19iZWcgKyBfX2RpZ2l0cy5zaXplKCk7CiAgICAgIG1vbmV5X2Jhc2U6OnBhdHRlcm4gX19wOwog ICAgICBzdHJpbmdfdHlwZSBfX3NpZ247CiAgICAgIGlmICgqX19iZWcgIT0gX19jdHlwZS53aWRl bignLScpKQogICAgICAgIHsKICAgICAgICAgIF9fcCA9IF9faW50bCA/IF9fbXB0LnBvc19mb3Jt YXQoKSA6IF9fbXBmLnBvc19mb3JtYXQoKTsKICAgICAgICAgIF9fc2lnbiA9X19pbnRsID8gX19t cHQucG9zaXRpdmVfc2lnbigpIDogX19tcGYucG9zaXRpdmVfc2lnbigpOwogICAgICAgIH0KICAg ICAgZWxzZQogICAgICAgIHsKICAgICAgICAgIF9fcCA9IF9faW50bCA/IF9fbXB0Lm5lZ19mb3Jt YXQoKSA6IF9fbXBmLm5lZ19mb3JtYXQoKTsKICAgICAgICAgIF9fc2lnbiA9X19pbnRsID8gX19t cHQubmVnYXRpdmVfc2lnbigpIDogX19tcGYubmVnYXRpdmVfc2lnbigpOwogICAgICAgICAgKytf X2JlZzsKICAgICAgICB9CgoKICAgICAgX19lbmQgPSBfX2N0eXBlLnNjYW5fbm90KGN0eXBlX2Jh c2U6OmRpZ2l0LCBfX2JlZywgX19lbmQpOwogICAgICBpZiAoX19iZWcgIT0gX19lbmQpCiAgICAg ICAgewoKCgogICAgICAgICAgc3RyaW5nX3R5cGUgX19yZXM7CiAgICAgICAgICBzdHJpbmdfdHlw ZSBfX3ZhbHVlOwogICAgICAgICAgY29uc3Qgc3RyaW5nX3R5cGUgX19zeW1ib2wgPSBfX2ludGwg PyBfX21wdC5jdXJyX3N5bWJvbCgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICA6IF9fbXBmLmN1cnJfc3ltYm9sKCk7CgoKICAgICAgICAgIGNvbnN0IGludCBf X2ZyYWMgPSBfX2ludGwgPyBfX21wdC5mcmFjX2RpZ2l0cygpCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDogX19tcGYuZnJhY19kaWdpdHMoKTsKICAgICAgICAgIGlmIChfX2Zy YWMgPiAwKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgY29uc3QgY2hhcl90eXBlIF9fZCA9 IF9faW50bCA/IF9fbXB0LmRlY2ltYWxfcG9pbnQoKQogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgOiBfX21wZi5kZWNpbWFsX3BvaW50KCk7CiAgICAgICAgICAgICAg aWYgKF9fZW5kIC0gX19iZWcgPj0gX19mcmFjKQogICAgICAgICAgICAgICAgewogICAgICAgICAg ICAgICAgICBfX3ZhbHVlID0gc3RyaW5nX3R5cGUoX19lbmQgLSBfX2ZyYWMsIF9fZW5kKTsKICAg ICAgICAgICAgICAgICAgX192YWx1ZS5pbnNlcnQoX192YWx1ZS5iZWdpbigpLCBfX2QpOwogICAg ICAgICAgICAgICAgICBfX2VuZCAtPSBfX2ZyYWM7CiAgICAgICAgICAgICAgICB9CiAgICAgICAg ICAgICAgZWxzZQogICAgICAgICAgICAgICAgewoKICAgICAgICAgICAgICAgICAgX192YWx1ZSA9 IHN0cmluZ190eXBlKF9fYmVnLCBfX2VuZCk7CiAgICAgICAgICAgICAgICAgIGludCBfX3BhZGRl YyA9IF9fZnJhYyAtIChfX2VuZCAtIF9fYmVnKTsKICAgICAgICAgICAgICAgICAgY2hhcl90eXBl IF9femVybyA9IF9fY3R5cGUud2lkZW4oJzAnKTsKICAgICAgICAgICAgICAgICAgX192YWx1ZS5p bnNlcnQoX192YWx1ZS5iZWdpbigpLCBfX3BhZGRlYywgX196ZXJvKTsKICAgICAgICAgICAgICAg ICAgX192YWx1ZS5pbnNlcnQoX192YWx1ZS5iZWdpbigpLCBfX2QpOwogICAgICAgICAgICAgICAg ICBfX2JlZyA9IF9fZW5kOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgoKCiAgICAg ICAgICBpZiAoX19iZWcgIT0gX19lbmQpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBjb25z dCBzdHJpbmcgX19ncm91cGluZyA9IF9faW50bCA/IF9fbXB0Lmdyb3VwaW5nKCkKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IF9fbXBmLmdyb3VwaW5nKCk7 CiAgICAgICAgICAgICAgaWYgKF9fZ3JvdXBpbmcuc2l6ZSgpKQogICAgICAgICAgICAgICAgewog ICAgICAgICAgICAgICAgICBjb25zdCBjaGFyX3R5cGUgX19zZXAgPSBfX2ludGwgPyBfX21wdC50 aG91c2FuZHNfc2VwKCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIDogX19tcGYudGhvdXNhbmRzX3NlcCgpOwogICAgICAgICAgICAgICAgICBjb25zdCBj aGFyKiBfX2diZWcgPSBfX2dyb3VwaW5nLmNfc3RyKCk7CiAgICAgICAgICAgICAgICAgIGNvbnN0 IGNoYXIqIF9fZ2VuZCA9IF9fZ2JlZyArIF9fZ3JvdXBpbmcuc2l6ZSgpOwogICAgICAgICAgICAg ICAgICBjb25zdCBpbnQgX19uID0gKF9fZW5kIC0gX19iZWcpICogMjsKICAgICAgICAgICAgICAg ICAgX0NoYXJUKiBfX3dzMiA9CiAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8X0NoYXJU Kj4oX19idWlsdGluX2FsbG9jYShzaXplb2YoX0NoYXJUKSAqIF9fbikpOwogICAgICAgICAgICAg ICAgICBfQ2hhclQqIF9fd3NfZW5kID0gX19hZGRfZ3JvdXBpbmcoX193czIsIF9fc2VwLCBfX2di ZWcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf X2dlbmQsIF9fYmVnLCBfX2VuZCk7CiAgICAgICAgICAgICAgICAgIF9fdmFsdWUuaW5zZXJ0KDAs IF9fd3MyLCBfX3dzX2VuZCAtIF9fd3MyKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg ICBlbHNlCiAgICAgICAgICAgICAgICBfX3ZhbHVlLmluc2VydCgwLCBzdHJpbmdfdHlwZShfX2Jl ZywgX19lbmQpKTsKICAgICAgICAgICAgfQoKCiAgICAgICAgICBpb3NfYmFzZTo6Zm10ZmxhZ3Mg X19mID0gX19pby5mbGFncygpICYgaW9zX2Jhc2U6OmFkanVzdGZpZWxkOwogICAgICAgICAgc2l6 ZV90eXBlIF9fbGVuID0gX192YWx1ZS5zaXplKCkgKyBfX3NpZ24uc2l6ZSgpOwogICAgICAgICAg X19sZW4gKz0gKF9faW8uZmxhZ3MoKSAmIGlvc19iYXNlOjpzaG93YmFzZSkgPyBfX3N5bWJvbC5z aXplKCkgOiAwOwogICAgICAgICAgYm9vbCBfX3Rlc3RpcGFkID0gX19mID09IGlvc19iYXNlOjpp bnRlcm5hbCAmJiBfX2xlbiA8IF9fd2lkdGg7CgoKICAgICAgICAgIGZvciAoaW50IF9faSA9IDA7 IF9faSA8IDQ7ICsrX19pKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgcGFydCBfX3doaWNo ID0gc3RhdGljX2Nhc3Q8cGFydD4oX19wLmZpZWxkW19faV0pOwogICAgICAgICAgICAgIHN3aXRj aCAoX193aGljaCkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGNhc2UgbW9uZXlf YmFzZTo6c3ltYm9sOgogICAgICAgICAgICAgICAgICBpZiAoX19pby5mbGFncygpICYgaW9zX2Jh c2U6OnNob3diYXNlKQogICAgICAgICAgICAgICAgICAgIF9fcmVzICs9IF9fc3ltYm9sOwogICAg ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgbW9uZXlfYmFzZTo6c2ln bjoKCgoKICAgICAgICAgICAgICAgICAgaWYgKF9fc2lnbi5zaXplKCkpCiAgICAgICAgICAgICAg ICAgICAgX19yZXMgKz0gX19zaWduWzBdOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg ICAgICAgICAgIGNhc2UgbW9uZXlfYmFzZTo6dmFsdWU6CiAgICAgICAgICAgICAgICAgIF9fcmVz ICs9IF9fdmFsdWU7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2Fz ZSBtb25leV9iYXNlOjpzcGFjZToKCgoKICAgICAgICAgICAgICAgICAgaWYgKF9fdGVzdGlwYWQp CiAgICAgICAgICAgICAgICAgICAgX19yZXMgKz0gc3RyaW5nX3R5cGUoX193aWR0aCAtIF9fbGVu LCBfX2ZpbGwpOwogICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgX19y ZXMgKz0gX19jdHlwZS53aWRlbihfX2ZpbGwpOwogICAgICAgICAgICAgICAgICBicmVhazsKICAg ICAgICAgICAgICAgIGNhc2UgbW9uZXlfYmFzZTo6bm9uZToKICAgICAgICAgICAgICAgICAgaWYg KF9fdGVzdGlwYWQpCiAgICAgICAgICAgICAgICAgICAgX19yZXMgKz0gc3RyaW5nX3R5cGUoX193 aWR0aCAtIF9fbGVuLCBfX2ZpbGwpOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg ICAgICAgIH0KICAgICAgICAgICAgfQoKCiAgICAgICAgICBpZiAoX19zaWduLnNpemUoKSA+IDEp CiAgICAgICAgICAgIF9fcmVzICs9IHN0cmluZ190eXBlKF9fc2lnbi5iZWdpbigpICsgMSwgX19z aWduLmVuZCgpKTsKCgogICAgICAgICAgX19sZW4gPSBfX3Jlcy5zaXplKCk7CiAgICAgICAgICBp ZiAoX193aWR0aCA+IF9fbGVuKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaWYgKF9fZiA9 PSBpb3NfYmFzZTo6bGVmdCkKCiAgICAgICAgICAgICAgICBfX3Jlcy5hcHBlbmQoX193aWR0aCAt IF9fbGVuLCBfX2ZpbGwpOwogICAgICAgICAgICAgIGVsc2UKCiAgICAgICAgICAgICAgICBfX3Jl cy5pbnNlcnQoMCwgc3RyaW5nX3R5cGUoX193aWR0aCAtIF9fbGVuLCBfX2ZpbGwpKTsKICAgICAg ICAgICAgICBfX2xlbiA9IF9fd2lkdGg7CiAgICAgICAgICAgIH0KCgogICAgICAgICAgZm9yIChz aXplX3R5cGUgX19qID0gMDsgX19qIDwgX19sZW47ICsrX19qLCArK19fcykKICAgICAgICAgICAg Kl9fcyA9IF9fcmVzW19fal07CiAgICAgICAgfQogICAgICBfX2lvLndpZHRoKDApOwogICAgICBy ZXR1cm4gX19zOwogICAgfQoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt ZSBfSW5JdGVyPgogICAgdGltZV9iYXNlOjpkYXRlb3JkZXIKICAgIHRpbWVfZ2V0PF9DaGFyVCwg X0luSXRlcj46OmRvX2RhdGVfb3JkZXIoKSBjb25zdAogICAgeyByZXR1cm4gdGltZV9iYXNlOjpu b19vcmRlcjsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+ CiAgICB2b2lkCiAgICB0aW1lX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAgIF9NX2V4dHJhY3Rf dmlhX2Zvcm1hdChpdGVyX3R5cGUmIF9fYmVnLCBpdGVyX3R5cGUmIF9fZW5kLCBpb3NfYmFzZSYg X19pbywKICAgICAgICAgICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIs IHRtKiBfX3RtLAogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19mb3Jt YXQpIGNvbnN0CiAgICB7CiAgICAgIGxvY2FsZSBfX2xvYyA9IF9faW8uZ2V0bG9jKCk7CiAgICAg IF9fdGltZXB1bmN0PF9DaGFyVD4gY29uc3QmIF9fdHAgPSB1c2VfZmFjZXQ8X190aW1lcHVuY3Q8 X0NoYXJUPiA+KF9fbG9jKTsKICAgICAgY29uc3QgY3R5cGU8X0NoYXJUPiYgX19jdHlwZSA9IHVz ZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpOwogICAgICBzaXplX3QgX19sZW4gPSBjaGFy X3RyYWl0czxfQ2hhclQ+OjpsZW5ndGgoX19mb3JtYXQpOwoKICAgICAgZm9yIChzaXplX3QgX19p ID0gMDsgX19iZWcgIT0gX19lbmQgJiYgX19pIDwgX19sZW4gJiYgIV9fZXJyOyArK19faSkKICAg ICAgICB7CiAgICAgICAgICBjaGFyIF9fYyA9IF9fZm9ybWF0W19faV07CiAgICAgICAgICBpZiAo X19jID09ICclJykKICAgICAgICAgICAgewoKICAgICAgICAgICAgICBfX2MgPSBfX2Zvcm1hdFsr K19faV07CiAgICAgICAgICAgICAgY2hhciBfX21vZCA9IDA7CiAgICAgICAgICAgICAgaW50IF9f bWVtID0gMDsKICAgICAgICAgICAgICBpZiAoX19jID09ICdFJyB8fCBfX2MgPT0gJ08nKQogICAg ICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBfX21vZCA9IF9fYzsKICAgICAgICAgICAg ICAgICAgX19jID0gX19mb3JtYXRbKytfX2ldOwogICAgICAgICAgICAgICAgfQogICAgICAgICAg ICAgIHN3aXRjaCAoX19jKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBjb25z dCBjaGFyKiBfX2NzOwogICAgICAgICAgICAgICAgICBfQ2hhclQgX193Y3NbMTBdOwogICAgICAg ICAgICAgICAgY2FzZSAnYSc6CgogICAgICAgICAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9f ZGF5czFbN107CiAgICAgICAgICAgICAgICAgIF9fdHAuX01fZGF5c19hYmJyZXZpYXRlZChfX2Rh eXMxKTsKICAgICAgICAgICAgICAgICAgX01fZXh0cmFjdF9uYW1lKF9fYmVnLCBfX2VuZCwgX190 bS0+dG1fd2RheSwgX19kYXlzMSwgNywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IF9fZXJyKTsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICdB JzoKCiAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXJfdHlwZSogX19kYXlzMls3XTsKICAgICAg ICAgICAgICAgICAgX190cC5fTV9kYXlzKF9fZGF5czIpOwogICAgICAgICAgICAgICAgICBfTV9l eHRyYWN0X25hbWUoX19iZWcsIF9fZW5kLCBfX3RtLT50bV93ZGF5LCBfX2RheXMyLCA3LAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19lcnIpOwogICAgICAgICAgICAgICAgICBi cmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ2gnOgogICAgICAgICAgICAgICAgY2FzZSAnYic6 CgogICAgICAgICAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9fbW9udGhzMVsxMl07CiAgICAg ICAgICAgICAgICAgIF9fdHAuX01fbW9udGhzX2FiYnJldmlhdGVkKF9fbW9udGhzMSk7CiAgICAg ICAgICAgICAgICAgIF9NX2V4dHJhY3RfbmFtZShfX2JlZywgX19lbmQsIF9fdG0tPnRtX21vbiwg X19tb250aHMxLCAxMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZXJyKTsK ICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICdCJzoKCiAgICAg ICAgICAgICAgICAgIGNvbnN0IGNoYXJfdHlwZSogX19tb250aHMyWzEyXTsKICAgICAgICAgICAg ICAgICAgX190cC5fTV9tb250aHMoX19tb250aHMyKTsKICAgICAgICAgICAgICAgICAgX01fZXh0 cmFjdF9uYW1lKF9fYmVnLCBfX2VuZCwgX190bS0+dG1fbW9uLCBfX21vbnRoczIsIDEyLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19lcnIpOwogICAgICAgICAgICAgICAgICBi cmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ2MnOgoKICAgICAgICAgICAgICAgICAgY29uc3Qg Y2hhcl90eXBlKiBfX2R0WzJdOwogICAgICAgICAgICAgICAgICBfX3RwLl9NX2RhdGVfdGltZV9m b3JtYXRzKF9fZHQpOwogICAgICAgICAgICAgICAgICBfTV9leHRyYWN0X3ZpYV9mb3JtYXQoX19i ZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX190bSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIF9fZHRbMF0pOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg ICAgICAgIGNhc2UgJ2QnOgoKICAgICAgICAgICAgICAgICAgX01fZXh0cmFjdF9udW0oX19iZWcs IF9fZW5kLCBfX3RtLT50bV9tZGF5LCAxLCAzMSwgMiwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgX19jdHlwZSwgX19lcnIpOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg ICAgICAgICAgIGNhc2UgJ0QnOgoKICAgICAgICAgICAgICAgICAgX19jcyA9ICIlbS8lZC8leSI7 CiAgICAgICAgICAgICAgICAgIF9fY3R5cGUud2lkZW4oX19jcywgX19jcyArIDksIF9fd2NzKTsK ICAgICAgICAgICAgICAgICAgX01fZXh0cmFjdF92aWFfZm9ybWF0KF9fYmVnLCBfX2VuZCwgX19p bywgX19lcnIsIF9fdG0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf X3djcyk7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAnSCc6 CgogICAgICAgICAgICAgICAgICBfTV9leHRyYWN0X251bShfX2JlZywgX19lbmQsIF9fdG0tPnRt X2hvdXIsIDAsIDIzLCAyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2N0eXBl LCBfX2Vycik7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAn SSc6CgogICAgICAgICAgICAgICAgICBfTV9leHRyYWN0X251bShfX2JlZywgX19lbmQsIF9fdG0t PnRtX2hvdXIsIDEsIDEyLCAyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2N0 eXBlLCBfX2Vycik7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2Fz ZSAnbSc6CgogICAgICAgICAgICAgICAgICBfTV9leHRyYWN0X251bShfX2JlZywgX19lbmQsIF9f bWVtLCAxLCAxMiwgMiwgX19jdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg X19lcnIpOwogICAgICAgICAgICAgICAgICBpZiAoIV9fZXJyKQogICAgICAgICAgICAgICAgICAg IF9fdG0tPnRtX21vbiA9IF9fbWVtIC0gMTsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg ICAgICAgICAgICBjYXNlICdNJzoKCiAgICAgICAgICAgICAgICAgIF9NX2V4dHJhY3RfbnVtKF9f YmVnLCBfX2VuZCwgX190bS0+dG1fbWluLCAwLCA1OSwgMiwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgX19jdHlwZSwgX19lcnIpOwogICAgICAgICAgICAgICAgICBicmVhazsKICAg ICAgICAgICAgICAgIGNhc2UgJ24nOgogICAgICAgICAgICAgICAgICBpZiAoX19jdHlwZS5uYXJy b3coKl9fYmVnLCAwKSA9PSAnXG4nKQogICAgICAgICAgICAgICAgICAgICsrX19iZWc7CiAgICAg ICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6 ZmFpbGJpdDsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICdS JzoKCiAgICAgICAgICAgICAgICAgIF9fY3MgPSAiJUg6JU0iOwogICAgICAgICAgICAgICAgICBf X2N0eXBlLndpZGVuKF9fY3MsIF9fY3MgKyA2LCBfX3djcyk7CiAgICAgICAgICAgICAgICAgIF9N X2V4dHJhY3RfdmlhX2Zvcm1hdChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3RtLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX193Y3MpOwogICAgICAgICAgICAg ICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ1MnOgoKICAgICAgICAgICAgICAgICAg X01fZXh0cmFjdF9udW0oX19iZWcsIF9fZW5kLCBfX3RtLT50bV9zZWMsIDAsIDU5LCAyLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2N0eXBlLCBfX2Vycik7CiAgICAgICAgICAg ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAndCc6CiAgICAgICAgICAgICAgICAg IGlmIChfX2N0eXBlLm5hcnJvdygqX19iZWcsIDApID09ICdcdCcpCiAgICAgICAgICAgICAgICAg ICAgKytfX2JlZzsKICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgX19lcnIg fD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg ICAgICAgY2FzZSAnVCc6CgogICAgICAgICAgICAgICAgICBfX2NzID0gIiVIOiVNOiVTIjsKICAg ICAgICAgICAgICAgICAgX19jdHlwZS53aWRlbihfX2NzLCBfX2NzICsgOSwgX193Y3MpOwogICAg ICAgICAgICAgICAgICBfTV9leHRyYWN0X3ZpYV9mb3JtYXQoX19iZWcsIF9fZW5kLCBfX2lvLCBf X2VyciwgX190bSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fd2Nz KTsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICd4JzoKCiAg ICAgICAgICAgICAgICAgIGNvbnN0IGNoYXJfdHlwZSogX19kYXRlc1syXTsKICAgICAgICAgICAg ICAgICAgX190cC5fTV9kYXRlX2Zvcm1hdHMoX19kYXRlcyk7CiAgICAgICAgICAgICAgICAgIF9N X2V4dHJhY3RfdmlhX2Zvcm1hdChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3RtLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19kYXRlc1swXSk7CiAgICAgICAg ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAnWCc6CgogICAgICAgICAgICAg ICAgICBjb25zdCBjaGFyX3R5cGUqIF9fdGltZXNbMl07CiAgICAgICAgICAgICAgICAgIF9fdHAu X01fdGltZV9mb3JtYXRzKF9fdGltZXMpOwogICAgICAgICAgICAgICAgICBfTV9leHRyYWN0X3Zp YV9mb3JtYXQoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX190bSwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIF9fdGltZXNbMF0pOwogICAgICAgICAgICAgICAgICBi cmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ3knOgoKICAgICAgICAgICAgICAgICAgX01fZXh0 cmFjdF9udW0oX19iZWcsIF9fZW5kLCBfX3RtLT50bV95ZWFyLCAwLCA5OSwgMiwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgX19jdHlwZSwgX19lcnIpOwogICAgICAgICAgICAgICAg ICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ1knOgoKICAgICAgICAgICAgICAgICAgX01f ZXh0cmFjdF9udW0oX19iZWcsIF9fZW5kLCBfX21lbSwgMCwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgbnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCksIDQsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIF9fY3R5cGUsIF9fZXJyKTsKICAgICAgICAgICAgICAgICAgaWYg KCFfX2VycikKICAgICAgICAgICAgICAgICAgICBfX3RtLT50bV95ZWFyID0gX19tZW0gLSAxOTAw OwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ1onOgoKICAg ICAgICAgICAgICAgICAgaWYgKF9fY3R5cGUuaXMoY3R5cGVfYmFzZTo6dXBwZXIsICpfX2JlZykp CiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgaW50IF9fdG1wOwog ICAgICAgICAgICAgICAgICAgICAgX01fZXh0cmFjdF9uYW1lKF9fYmVnLCBfX2VuZCwgX190bXAs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX190aW1lcHVuY3Q8X0NoYXJU Pjo6X1NfdGltZXpvbmVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE0 LCBfX2Vycik7CgoKICAgICAgICAgICAgICAgICAgICAgIGNoYXJfdHlwZSBfX2MgPSAqX19iZWc7 CiAgICAgICAgICAgICAgICAgICAgICBpZiAoIV9fZXJyICYmIF9fdG1wID09IDAKICAgICAgICAg ICAgICAgICAgICAgICAgICAmJiAoX19jID09IF9fY3R5cGUud2lkZW4oJy0nKQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB8fCBfX2MgPT0gX19jdHlwZS53aWRlbignKycpKSkKICAgICAg ICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgIF9NX2V4dHJhY3Rf bnVtKF9fYmVnLCBfX2VuZCwgX190bXAsIDAsIDIzLCAyLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBfX2N0eXBlLCBfX2Vycik7CiAgICAgICAgICAgICAgICAgICAg ICAgICAgX01fZXh0cmFjdF9udW0oX19iZWcsIF9fZW5kLCBfX3RtcCwgMCwgNTksIDIsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY3R5cGUsIF9fZXJyKTsKICAg ICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAg ICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgX19lcnIgfD0gaW9z X2Jhc2U6OmZhaWxiaXQ7CiAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg ICAgICAgICBkZWZhdWx0OgoKICAgICAgICAgICAgICAgICAgICAgIF9fZXJyIHw9IGlvc19iYXNl OjpmYWlsYml0OwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAg ICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICB7CgogICAgICAgICAgICAgICAgICBpZiAoX19j ID09IF9fY3R5cGUubmFycm93KCpfX2JlZywgMCkpCiAgICAgICAgICAgICAgICAgICAgKytfX2Jl ZzsKICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgIF9fZXJyIHw9IGlv c19iYXNlOjpmYWlsYml0OwogICAgICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgdm9pZAogICAgdGlt ZV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBfTV9leHRyYWN0X251bShpdGVyX3R5cGUmIF9f YmVnLCBpdGVyX3R5cGUmIF9fZW5kLCBpbnQmIF9fbWVtYmVyLAogICAgICAgICAgICAgICAgICAg aW50IF9fbWluLCBpbnQgX19tYXgsIHNpemVfdCBfX2xlbiwKICAgICAgICAgICAgICAgICAgIGNv bnN0IGN0eXBlPF9DaGFyVD4mIF9fY3R5cGUsCiAgICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6 aW9zdGF0ZSYgX19lcnIpIGNvbnN0CiAgICB7CiAgICAgIHNpemVfdCBfX2kgPSAwOwogICAgICBz dHJpbmcgX19kaWdpdHM7CiAgICAgIGJvb2wgX190ZXN0dmFsaWQgPSB0cnVlOwogICAgICBjaGFy X3R5cGUgX19jID0gKl9fYmVnOwogICAgICB3aGlsZSAoX19iZWcgIT0gX19lbmQgJiYgX19pIDwg X19sZW4KICAgICAgICAgICAgICYmIF9fY3R5cGUuaXMoY3R5cGVfYmFzZTo6ZGlnaXQsIF9fYykp CiAgICAgICAgewogICAgICAgICAgX19kaWdpdHMgKz0gX19jdHlwZS5uYXJyb3coX19jLCAwKTsK ICAgICAgICAgIF9fYyA9ICooKytfX2JlZyk7CiAgICAgICAgICArK19faTsKICAgICAgICB9CiAg ICAgIGlmIChfX2kgPT0gX19sZW4pCiAgICAgICAgewogICAgICAgICAgaW50IF9fdmFsdWUgPSBh dG9pKF9fZGlnaXRzLmNfc3RyKCkpOwogICAgICAgICAgaWYgKF9fbWluIDw9IF9fdmFsdWUgJiYg X192YWx1ZSA8PSBfX21heCkKICAgICAgICAgICAgX19tZW1iZXIgPSBfX3ZhbHVlOwogICAgICAg ICAgZWxzZQogICAgICAgICAgICBfX3Rlc3R2YWxpZCA9IGZhbHNlOwogICAgICAgIH0KICAgICAg ZWxzZQogICAgICAgIF9fdGVzdHZhbGlkID0gZmFsc2U7CiAgICAgIGlmICghX190ZXN0dmFsaWQp CiAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CiAgICB9CgoKCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgdm9pZAogICAgdGltZV9nZXQ8 X0NoYXJULCBfSW5JdGVyPjo6CiAgICBfTV9leHRyYWN0X25hbWUoaXRlcl90eXBlJiBfX2JlZywg aXRlcl90eXBlJiBfX2VuZCwgaW50JiBfX21lbWJlciwKICAgICAgICAgICAgICAgICAgICBjb25z dCBfQ2hhclQqKiBfX25hbWVzLCBzaXplX3QgX19pbmRleGxlbiwKICAgICAgICAgICAgICAgICAg ICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIpIGNvbnN0CiAgICB7CiAgICAgIHR5cGVkZWYgY2hh cl90cmFpdHM8X0NoYXJUPiBfX3RyYWl0c190eXBlOwogICAgICBpbnQqIF9fbWF0Y2hlcyA9IHN0 YXRpY19jYXN0PGludCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKGludCkgKiBfX2luZGV4bGVu KSk7CiAgICAgIHNpemVfdCBfX25tYXRjaGVzID0gMDsKICAgICAgc2l6ZV90IF9fcG9zID0gMDsK ICAgICAgYm9vbCBfX3Rlc3R2YWxpZCA9IHRydWU7CiAgICAgIGNvbnN0IGNoYXJfdHlwZSogX19u YW1lOwoKICAgICAgY2hhcl90eXBlIF9fYyA9ICpfX2JlZzsKCiAgICAgIGZvciAoc2l6ZV90IF9f aTEgPSAwOyBfX2kxIDwgX19pbmRleGxlbjsgKytfX2kxKQogICAgICAgIGlmIChfX2MgPT0gX19u YW1lc1tfX2kxXVswXSkKICAgICAgICAgIF9fbWF0Y2hlc1tfX25tYXRjaGVzKytdID0gX19pMTsK CiAgICAgIHdoaWxlKF9fbm1hdGNoZXMgPiAxKQogICAgICAgIHsKCiAgICAgICAgICBzaXplX3Qg X19taW5sZW4gPSAxMDsKICAgICAgICAgIGZvciAoc2l6ZV90IF9faTIgPSAwOyBfX2kyIDwgX19u bWF0Y2hlczsgKytfX2kyKQogICAgICAgICAgICBfX21pbmxlbiA9IG1pbihfX21pbmxlbiwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgX190cmFpdHNfdHlwZTo6bGVuZ3RoKF9fbmFtZXNbX19t YXRjaGVzW19faTJdXSkpOwoKICAgICAgICAgIGlmIChfX3BvcyA8IF9fbWlubGVuICYmIF9fYmVn ICE9IF9fZW5kKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgKytfX3BvczsKICAgICAgICAg ICAgICBfX2MgPSAqKCsrX19iZWcpOwogICAgICAgICAgICAgIGZvciAoc2l6ZV90IF9faTMgPSAw OyBfX2kzIDwgX19ubWF0Y2hlczsgKytfX2kzKQogICAgICAgICAgICAgICAgewogICAgICAgICAg ICAgICAgICBfX25hbWUgPSBfX25hbWVzW19fbWF0Y2hlc1tfX2kzXV07CiAgICAgICAgICAgICAg ICAgIGlmIChfX25hbWVbX19wb3NdICE9IF9fYykKICAgICAgICAgICAgICAgICAgICBfX21hdGNo ZXNbX19pM10gPSBfX21hdGNoZXNbLS1fX25tYXRjaGVzXTsKICAgICAgICAgICAgICAgIH0KICAg ICAgICAgICAgfQogICAgICAgICAgZWxzZQogICAgICAgICAgICBicmVhazsKICAgICAgICB9Cgog ICAgICBpZiAoX19ubWF0Y2hlcyA9PSAxKQogICAgICAgIHsKCiAgICAgICAgICBfX25hbWUgPSBf X25hbWVzW19fbWF0Y2hlc1swXV07CiAgICAgICAgICBjb25zdCBzaXplX3QgX19sZW4gPSBfX3Ry YWl0c190eXBlOjpsZW5ndGgoX19uYW1lKTsKICAgICAgICAgIHdoaWxlIChfX3BvcyA8IF9fbGVu ICYmIF9fYmVnICE9IF9fZW5kICYmIF9fbmFtZVtfX3Bvc10gPT0gKl9fYmVnKQogICAgICAgICAg ICArK19fYmVnLCArK19fcG9zOwoKICAgICAgICAgIGlmIChfX2xlbiA9PSBfX3BvcykKICAgICAg ICAgICAgX19tZW1iZXIgPSBfX21hdGNoZXNbMF07CiAgICAgICAgICBlbHNlCiAgICAgICAgICAg IF9fdGVzdHZhbGlkID0gZmFsc2U7CiAgICAgICAgfQogICAgICBlbHNlCiAgICAgICAgX190ZXN0 dmFsaWQgPSBmYWxzZTsKICAgICAgaWYgKCFfX3Rlc3R2YWxpZCkKICAgICAgICBfX2VyciB8PSBp b3NfYmFzZTo6ZmFpbGJpdDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl bmFtZSBfSW5JdGVyPgogICAgX0luSXRlcgogICAgdGltZV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6 CiAgICBkb19nZXRfdGltZShpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jh c2UmIF9faW8sCiAgICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBf X3RtKSBjb25zdAogICAgewogICAgICBfQ2hhclQgX193Y3NbM107CiAgICAgIGNvbnN0IGNoYXIq IF9fY3MgPSAiJVgiOwogICAgICBsb2NhbGUgX19sb2MgPSBfX2lvLmdldGxvYygpOwogICAgICBj dHlwZTxfQ2hhclQ+IGNvbnN0JiBfX2N0eXBlID0gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihf X2xvYyk7CiAgICAgIF9fY3R5cGUud2lkZW4oX19jcywgX19jcyArIDMsIF9fd2NzKTsKICAgICAg X01fZXh0cmFjdF92aWFfZm9ybWF0KF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9fdG0sIF9f d2NzKTsKICAgICAgaWYgKF9fYmVnID09IF9fZW5kKQogICAgICAgIF9fZXJyIHw9IGlvc19iYXNl Ojplb2ZiaXQ7CiAgICAgIHJldHVybiBfX2JlZzsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg X0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgX0luSXRlcgogICAgdGltZV9nZXQ8X0NoYXJU LCBfSW5JdGVyPjo6CiAgICBkb19nZXRfZGF0ZShpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBf X2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYg X19lcnIsIHRtKiBfX3RtKSBjb25zdAogICAgewogICAgICBfQ2hhclQgX193Y3NbM107CiAgICAg IGNvbnN0IGNoYXIqIF9fY3MgPSAiJXgiOwogICAgICBsb2NhbGUgX19sb2MgPSBfX2lvLmdldGxv YygpOwogICAgICBjdHlwZTxfQ2hhclQ+IGNvbnN0JiBfX2N0eXBlID0gdXNlX2ZhY2V0PGN0eXBl PF9DaGFyVD4gPihfX2xvYyk7CiAgICAgIF9fY3R5cGUud2lkZW4oX19jcywgX19jcyArIDMsIF9f d2NzKTsKICAgICAgX01fZXh0cmFjdF92aWFfZm9ybWF0KF9fYmVnLCBfX2VuZCwgX19pbywgX19l cnIsIF9fdG0sIF9fd2NzKTsKICAgICAgaWYgKF9fYmVnID09IF9fZW5kKQogICAgICAgIF9fZXJy IHw9IGlvc19iYXNlOjplb2ZiaXQ7CiAgICAgIHJldHVybiBfX2JlZzsKICAgIH0KCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgX0luSXRlcgogICAgdGlt ZV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBkb19nZXRfd2Vla2RheShpdGVyX3R5cGUgX19i ZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgICAgICAgICBp b3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3RtKSBjb25zdAogICAgewogICAgICB0eXBl ZGVmIGNoYXJfdHJhaXRzPF9DaGFyVD4gX190cmFpdHNfdHlwZTsKICAgICAgbG9jYWxlIF9fbG9j ID0gX19pby5nZXRsb2MoKTsKICAgICAgX190aW1lcHVuY3Q8X0NoYXJUPiBjb25zdCYgX190cCA9 IHVzZV9mYWNldDxfX3RpbWVwdW5jdDxfQ2hhclQ+ID4oX19sb2MpOwogICAgICBjb25zdCBjaGFy X3R5cGUqIF9fZGF5c1s3XTsKICAgICAgX190cC5fTV9kYXlzX2FiYnJldmlhdGVkKF9fZGF5cyk7 CiAgICAgIGludCBfX3RtcHdkYXk7CiAgICAgIF9NX2V4dHJhY3RfbmFtZShfX2JlZywgX19lbmQs IF9fdG1wd2RheSwgX19kYXlzLCA3LCBfX2Vycik7CgoKCgoKCgogICAgICBpZiAoIV9fZXJyKQog ICAgICAgIHsKICAgICAgICAgIHNpemVfdCBfX3BvcyA9IF9fdHJhaXRzX3R5cGU6Omxlbmd0aChf X2RheXNbX190bXB3ZGF5XSk7CiAgICAgICAgICBfX3RwLl9NX2RheXMoX19kYXlzKTsKICAgICAg ICAgIGNvbnN0IGNoYXJfdHlwZSogX19uYW1lID0gX19kYXlzW19fdG1wd2RheV07CiAgICAgICAg ICBpZiAoX19uYW1lW19fcG9zXSA9PSAqX19iZWcpCiAgICAgICAgICAgIHsKCiAgICAgICAgICAg ICAgY29uc3Qgc2l6ZV90IF9fbGVuID0gX190cmFpdHNfdHlwZTo6bGVuZ3RoKF9fbmFtZSk7CiAg ICAgICAgICAgICAgd2hpbGUgKF9fcG9zIDwgX19sZW4gJiYgX19iZWcgIT0gX19lbmQKICAgICAg ICAgICAgICAgICAgICAgJiYgX19uYW1lW19fcG9zXSA9PSAqX19iZWcpCiAgICAgICAgICAgICAg ICArK19fYmVnLCArK19fcG9zOwogICAgICAgICAgICAgIGlmIChfX2xlbiAhPSBfX3BvcykKICAg ICAgICAgICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwogICAgICAgICAgICB9CiAg ICAgICAgICBpZiAoIV9fZXJyKQogICAgICAgICAgICBfX3RtLT50bV93ZGF5ID0gX190bXB3ZGF5 OwogICAgICAgIH0KICAgICAgaWYgKF9fYmVnID09IF9fZW5kKQogICAgICAgIF9fZXJyIHw9IGlv c19iYXNlOjplb2ZiaXQ7CiAgICAgIHJldHVybiBfX2JlZzsKICAgICB9CgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIKICAgIHRpbWVfZ2V0 PF9DaGFyVCwgX0luSXRlcj46OgogICAgZG9fZ2V0X21vbnRobmFtZShpdGVyX3R5cGUgX19iZWcs IGl0ZXJfdHlwZSBfX2VuZCwKICAgICAgICAgICAgICAgICAgICAgaW9zX2Jhc2UmIF9faW8sIGlv c19iYXNlOjppb3N0YXRlJiBfX2VyciwgdG0qIF9fdG0pIGNvbnN0CiAgICB7CiAgICAgIHR5cGVk ZWYgY2hhcl90cmFpdHM8X0NoYXJUPiBfX3RyYWl0c190eXBlOwogICAgICBsb2NhbGUgX19sb2Mg PSBfX2lvLmdldGxvYygpOwogICAgICBfX3RpbWVwdW5jdDxfQ2hhclQ+IGNvbnN0JiBfX3RwID0g dXNlX2ZhY2V0PF9fdGltZXB1bmN0PF9DaGFyVD4gPihfX2xvYyk7CiAgICAgIGNvbnN0IGNoYXJf dHlwZSogX19tb250aHNbMTJdOwogICAgICBfX3RwLl9NX21vbnRoc19hYmJyZXZpYXRlZChfX21v bnRocyk7CiAgICAgIGludCBfX3RtcG1vbjsKICAgICAgX01fZXh0cmFjdF9uYW1lKF9fYmVnLCBf X2VuZCwgX190bXBtb24sIF9fbW9udGhzLCAxMiwgX19lcnIpOwoKCgoKCgoKICAgICAgaWYgKCFf X2VycikKICAgICAgICB7CiAgICAgICAgICBzaXplX3QgX19wb3MgPSBfX3RyYWl0c190eXBlOjps ZW5ndGgoX19tb250aHNbX190bXBtb25dKTsKICAgICAgICAgIF9fdHAuX01fbW9udGhzKF9fbW9u dGhzKTsKICAgICAgICAgIGNvbnN0IGNoYXJfdHlwZSogX19uYW1lID0gX19tb250aHNbX190bXBt b25dOwogICAgICAgICAgaWYgKF9fbmFtZVtfX3Bvc10gPT0gKl9fYmVnKQogICAgICAgICAgICB7 CgogICAgICAgICAgICAgIGNvbnN0IHNpemVfdCBfX2xlbiA9IF9fdHJhaXRzX3R5cGU6Omxlbmd0 aChfX25hbWUpOwogICAgICAgICAgICAgIHdoaWxlIChfX3BvcyA8IF9fbGVuICYmIF9fYmVnICE9 IF9fZW5kCiAgICAgICAgICAgICAgICAgICAgICYmIF9fbmFtZVtfX3Bvc10gPT0gKl9fYmVnKQog ICAgICAgICAgICAgICAgKytfX2JlZywgKytfX3BvczsKICAgICAgICAgICAgICBpZiAoX19sZW4g IT0gX19wb3MpCiAgICAgICAgICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKICAg ICAgICAgICAgfQogICAgICAgICAgaWYgKCFfX2VycikKICAgICAgICAgICAgX190bS0+dG1fbW9u ID0gX190bXBtb247CiAgICAgICAgfQoKICAgICAgaWYgKF9fYmVnID09IF9fZW5kKQogICAgICAg IF9fZXJyIHw9IGlvc19iYXNlOjplb2ZiaXQ7CiAgICAgIHJldHVybiBfX2JlZzsKICAgIH0KCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgX0luSXRlcgog ICAgdGltZV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBkb19nZXRfeWVhcihpdGVyX3R5cGUg X19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgICAgICBp b3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3RtKSBjb25zdAogICAgewogICAgICBsb2Nh bGUgX19sb2MgPSBfX2lvLmdldGxvYygpOwogICAgICBjb25zdCBjdHlwZTxfQ2hhclQ+JiBfX2N0 eXBlID0gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYyk7CgogICAgICBjaGFyX3R5cGUg X19jID0gKl9fYmVnOwogICAgICBzaXplX3QgX19pID0gMDsKICAgICAgc3RyaW5nIF9fZGlnaXRz OwogICAgICB3aGlsZSAoX19pIDwgNCAmJiBfX2JlZyAhPSBfX2VuZCAmJiBfX2N0eXBlLmlzKGN0 eXBlX2Jhc2U6OmRpZ2l0LCBfX2MpKQogICAgICAgIHsKICAgICAgICAgIF9fZGlnaXRzICs9IF9f Y3R5cGUubmFycm93KF9fYywgMCk7CiAgICAgICAgICBfX2MgPSAqKCsrX19iZWcpOwogICAgICAg ICAgKytfX2k7CiAgICAgICAgfQogICAgICBpZiAoX19pID09IDIgfHwgX19pID09IDQpCiAgICAg ICAgewogICAgICAgICAgbG9uZyBfX2w7CiAgICAgICAgICBfX2NvbnZlcnRfdG9fdihfX2RpZ2l0 cy5jX3N0cigpLCBfX2wsIF9fZXJyLCBfU19jX2xvY2FsZSk7CiAgICAgICAgICBpZiAoIShfX2Vy ciAmIGlvc19iYXNlOjpmYWlsYml0KSAmJiBfX2wgPD0gMjE0NzQ4MzY0NykKICAgICAgICAgICAg ewogICAgICAgICAgICAgIF9fbCA9IF9faSA9PSAyID8gX19sIDogX19sIC0gMTkwMDsKICAgICAg ICAgICAgICBfX3RtLT50bV95ZWFyID0gc3RhdGljX2Nhc3Q8aW50PihfX2wpOwogICAgICAgICAg ICB9CiAgICAgICAgfQogICAgICBlbHNlCiAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxi aXQ7CiAgICAgIGlmIChfX2JlZyA9PSBfX2VuZCkKICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6 ZW9mYml0OwogICAgICByZXR1cm4gX19iZWc7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D aGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBfT3V0SXRlcgogICAgdGltZV9wdXQ8X0NoYXJU LCBfT3V0SXRlcj46OgogICAgcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2lvLCBjaGFy X3R5cGUsIGNvbnN0IHRtKiBfX3RtLAogICAgICAgIGNvbnN0IF9DaGFyVCogX19iZWcsIGNvbnN0 IF9DaGFyVCogX19lbmQpIGNvbnN0CiAgICB7CiAgICAgIGxvY2FsZSBfX2xvYyA9IF9faW8uZ2V0 bG9jKCk7CiAgICAgIGN0eXBlPF9DaGFyVD4gY29uc3QmIF9fY3R5cGUgPSB1c2VfZmFjZXQ8Y3R5 cGU8X0NoYXJUPiA+KF9fbG9jKTsKICAgICAgd2hpbGUgKF9fYmVnICE9IF9fZW5kKQogICAgICAg IHsKICAgICAgICAgIGNoYXIgX19jID0gX19jdHlwZS5uYXJyb3coKl9fYmVnLCAwKTsKICAgICAg ICAgICsrX19iZWc7CiAgICAgICAgICBpZiAoX19jID09ICclJykKICAgICAgICAgICAgewogICAg ICAgICAgICAgIGNoYXIgX19mb3JtYXQ7CiAgICAgICAgICAgICAgY2hhciBfX21vZCA9IDA7CiAg ICAgICAgICAgICAgc2l6ZV90IF9fbGVuID0gMTsKICAgICAgICAgICAgICBfX2MgPSBfX2N0eXBl Lm5hcnJvdygqX19iZWcsIDApOwogICAgICAgICAgICAgICsrX19iZWc7CiAgICAgICAgICAgICAg aWYgKF9fYyA9PSAnRScgfHwgX19jID09ICdPJykKICAgICAgICAgICAgICAgIHsKICAgICAgICAg ICAgICAgICAgX19tb2QgPSBfX2M7CiAgICAgICAgICAgICAgICAgIF9fZm9ybWF0ID0gX19jdHlw ZS5uYXJyb3coKl9fYmVnLCAwKTsKICAgICAgICAgICAgICAgICAgKytfX2JlZzsKICAgICAgICAg ICAgICAgIH0KICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICBfX2Zvcm1hdCA9IF9f YzsKICAgICAgICAgICAgICBfX3MgPSB0aGlzLT5kb19wdXQoX19zLCBfX2lvLCBjaGFyX3R5cGUo KSwgX190bSwgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbW9k KTsKICAgICAgICAgICAgfQogICAgICAgICAgZWxzZQogICAgICAgICAgICB7CiAgICAgICAgICAg ICAgKl9fcyA9IF9fYzsKICAgICAgICAgICAgICArK19fczsKICAgICAgICAgICAgfQogICAgICAg IH0KICAgICAgcmV0dXJuIF9fczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0 eXBlbmFtZSBfT3V0SXRlcj4KICAgIF9PdXRJdGVyCiAgICB0aW1lX3B1dDxfQ2hhclQsIF9PdXRJ dGVyPjo6CiAgICBkb19wdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlw ZSwgY29uc3QgdG0qIF9fdG0sCiAgICAgICAgICAgY2hhciBfX2Zvcm1hdCwgY2hhciBfX21vZCkg Y29uc3QKICAgIHsKICAgICAgbG9jYWxlIF9fbG9jID0gX19pby5nZXRsb2MoKTsKICAgICAgY3R5 cGU8X0NoYXJUPiBjb25zdCYgX19jdHlwZSA9IHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19s b2MpOwogICAgICBfX3RpbWVwdW5jdDxfQ2hhclQ+IGNvbnN0JiBfX3RwID0gdXNlX2ZhY2V0PF9f dGltZXB1bmN0PF9DaGFyVD4gPihfX2xvYyk7CgoKCiAgICAgIGNvbnN0IHNpemVfdCBfX21heGxl biA9IDY0OwogICAgICBjaGFyX3R5cGUqIF9fcmVzID0KICAgICAgICBzdGF0aWNfY2FzdDxjaGFy X3R5cGUqPihfX2J1aWx0aW5fYWxsb2NhKHNpemVvZihjaGFyX3R5cGUpICogX19tYXhsZW4pKTsK CgoKCgoKICAgICAgY2hhcl90eXBlIF9fZm10WzRdOwogICAgICBfX2ZtdFswXSA9IF9fY3R5cGUu d2lkZW4oJyUnKTsKICAgICAgaWYgKCFfX21vZCkKICAgICAgICB7CiAgICAgICAgICBfX2ZtdFsx XSA9IF9fZm9ybWF0OwogICAgICAgICAgX19mbXRbMl0gPSBjaGFyX3R5cGUoKTsKICAgICAgICB9 CiAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICBfX2ZtdFsxXSA9IF9fbW9kOwogICAgICAg ICAgX19mbXRbMl0gPSBfX2Zvcm1hdDsKICAgICAgICAgIF9fZm10WzNdID0gY2hhcl90eXBlKCk7 CiAgICAgICAgfQoKICAgICAgX190cC5fTV9wdXQoX19yZXMsIF9fbWF4bGVuLCBfX2ZtdCwgX190 bSk7CgoKICAgICAgc2l6ZV90IF9fbGVuID0gY2hhcl90cmFpdHM8Y2hhcl90eXBlPjo6bGVuZ3Ro KF9fcmVzKTsKICAgICAgZm9yIChzaXplX3QgX19pID0gMDsgX19pIDwgX19sZW47ICsrX19pLCAr K19fcykKICAgICAgICAqX19zID0gX19yZXNbX19pXTsKICAgICAgcmV0dXJuIF9fczsKICAgIH0K CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbnQKICAgIGNvbGxhdGU8X0NoYXJU Pjo6X01fY29tcGFyZShjb25zdCBfQ2hhclQqLCBjb25zdCBfQ2hhclQqKSBjb25zdAogICAgeyBy ZXR1cm4gMDsgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgc2l6ZV90CiAgICBj b2xsYXRlPF9DaGFyVD46Ol9NX3RyYW5zZm9ybShfQ2hhclQqLCBjb25zdCBfQ2hhclQqLCBzaXpl X3QpIGNvbnN0CiAgICB7IHJldHVybiAwOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4K ICAgIGludAogICAgY29sbGF0ZTxfQ2hhclQ+OjoKICAgIGRvX2NvbXBhcmUoY29uc3QgX0NoYXJU KiBfX2xvMSwgY29uc3QgX0NoYXJUKiBfX2hpMSwKICAgICAgICAgICAgICAgY29uc3QgX0NoYXJU KiBfX2xvMiwgY29uc3QgX0NoYXJUKiBfX2hpMikgY29uc3QKICAgIHsKICAgICAgY29uc3Qgc3Ry aW5nX3R5cGUgX19vbmUoX19sbzEsIF9faGkxKTsKICAgICAgY29uc3Qgc3RyaW5nX3R5cGUgX190 d28oX19sbzIsIF9faGkyKTsKICAgICAgcmV0dXJuIF9NX2NvbXBhcmUoX19vbmUuY19zdHIoKSwg X190d28uY19zdHIoKSk7CiAgICB9CgogdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgdHlw ZW5hbWUgY29sbGF0ZTxfQ2hhclQ+OjpzdHJpbmdfdHlwZQogICAgY29sbGF0ZTxfQ2hhclQ+OjoK ICAgIGRvX3RyYW5zZm9ybShjb25zdCBfQ2hhclQqIF9fbG8sIGNvbnN0IF9DaGFyVCogX19oaSkg Y29uc3QKICAgIHsKICAgICAgc2l6ZV90IF9fbGVuID0gKF9faGkgLSBfX2xvKSAqIDI7CgogICAg ICBfQ2hhclQqIF9fYyA9CiAgICAgICAgc3RhdGljX2Nhc3Q8X0NoYXJUKj4oX19idWlsdGluX2Fs bG9jYShzaXplb2YoX0NoYXJUKSAqIF9fbGVuKSk7CiAgICAgIHNpemVfdCBfX3JlcyA9IF9NX3Ry YW5zZm9ybShfX2MsIF9fbG8sIF9fbGVuKTsKCiAgICAgIGlmIChfX3JlcyA+PSBfX2xlbikKICAg ICAgICB7CiAgICAgICAgICBfX2MgPQogICAgICAgICAgICBzdGF0aWNfY2FzdDxfQ2hhclQqPihf X2J1aWx0aW5fYWxsb2NhKHNpemVvZihfQ2hhclQpICogKF9fcmVzICsgMSkpKTsKICAgICAgICAg IF9NX3RyYW5zZm9ybShfX2MsIF9fbG8sIF9fcmVzICsgMSk7CiAgICAgICAgfQogICAgICByZXR1 cm4gc3RyaW5nX3R5cGUoX19jKTsKICAgIH0KCiB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAg ICBsb25nCiAgICBjb2xsYXRlPF9DaGFyVD46OgogICAgZG9faGFzaChjb25zdCBfQ2hhclQqIF9f bG8sIGNvbnN0IF9DaGFyVCogX19oaSkgY29uc3QKICAgIHsKICAgICAgdW5zaWduZWQgbG9uZyBf X3ZhbCA9IDA7CiAgICAgIGZvciAoOyBfX2xvIDwgX19oaTsgKytfX2xvKQogICAgICAgIF9fdmFs ID0gKl9fbG8gKyAoKF9fdmFsIDw8IDcpIHwKICAgICAgICAgICAgICAgICAgICAgICAoX192YWwg Pj4gKG51bWVyaWNfbGltaXRzPHVuc2lnbmVkIGxvbmc+OjpkaWdpdHMgLSA3KSkpOwogICAgICBy ZXR1cm4gc3RhdGljX2Nhc3Q8bG9uZz4oX192YWwpOwogICAgfQoKCgoKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfVHY+CiAgICB2b2lkCiAgICBfX2NvbnZlcnRfdG9fdihjb25zdCBjaGFyKiBfX2luLCBf VHYmIF9fb3V0LCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsCiAgICAgICAgICAgICAgICAgICBj b25zdCBfX2NfbG9jYWxlJiBfX2Nsb2MsIGludCBfX2Jhc2UgPSAxMCk7CgoKCgogIHRlbXBsYXRl PHR5cGVuYW1lIF9Udj4KICAgIGludAogICAgX19jb252ZXJ0X2Zyb21fdihjaGFyKiBfX291dCwg Y29uc3QgaW50IF9fc2l6ZSwgY29uc3QgY2hhciogX19mbXQsCiAgICAgICAgICAgICAgICAgICAg IF9UdiBfX3YsIGNvbnN0IF9fY19sb2NhbGUmLCBpbnQgX19wcmVjID0gLTEpOwojIDE5OTAgIi91 c3IvaW5jbHVkZS9jKysvMy4yLjEvYml0cy9sb2NhbGVfZmFjZXRzLnRjYyIgMwogIHRlbXBsYXRl PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIHN0cnVjdCBfX3BhZAogICAg ewogICAgICBzdGF0aWMgdm9pZAogICAgICBfU19wYWQoaW9zX2Jhc2UmIF9faW8sIF9DaGFyVCBf X2ZpbGwsIF9DaGFyVCogX19uZXdzLAogICAgICAgICAgICAgY29uc3QgX0NoYXJUKiBfX29sZHMs IGNvbnN0IHN0cmVhbXNpemUgX19uZXdsZW4sCiAgICAgICAgICAgICBjb25zdCBzdHJlYW1zaXpl IF9fb2xkbGVuLCBjb25zdCBib29sIF9fbnVtKTsKICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1l IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIHZvaWQKICAgIF9fcGFkPF9DaGFyVCwgX1Ry YWl0cz46Ol9TX3BhZChpb3NfYmFzZSYgX19pbywgX0NoYXJUIF9fZmlsbCwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBfQ2hhclQqIF9fbmV3cywgY29uc3QgX0NoYXJUKiBfX29s ZHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RyZWFtc2l6ZSBf X25ld2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJlYW1z aXplIF9fb2xkbGVuLCBjb25zdCBib29sIF9fbnVtKQogICAgewogICAgICBzaXplX3QgX19wbGVu ID0gc3RhdGljX2Nhc3Q8c2l6ZV90PihfX25ld2xlbiAtIF9fb2xkbGVuKTsKICAgICAgX0NoYXJU KiBfX3BhZHMgPSBzdGF0aWNfY2FzdDxfQ2hhclQqPihfX2J1aWx0aW5fYWxsb2NhKHNpemVvZihf Q2hhclQpICogX19wbGVuKSk7CiAgICAgIF9UcmFpdHM6OmFzc2lnbihfX3BhZHMsIF9fcGxlbiwg X19maWxsKTsKCiAgICAgIF9DaGFyVCogX19iZWc7CiAgICAgIF9DaGFyVCogX19lbmQ7CiAgICAg IHNpemVfdCBfX21vZCA9IDA7CiAgICAgIHNpemVfdCBfX2JlZ2xlbjsKICAgICAgaW9zX2Jhc2U6 OmZtdGZsYWdzIF9fYWRqdXN0ID0gX19pby5mbGFncygpICYgaW9zX2Jhc2U6OmFkanVzdGZpZWxk OwoKICAgICAgaWYgKF9fYWRqdXN0ID09IGlvc19iYXNlOjpsZWZ0KQogICAgICAgIHsKCiAgICAg ICAgICBfX2JlZyA9IGNvbnN0X2Nhc3Q8X0NoYXJUKj4oX19vbGRzKTsKICAgICAgICAgIF9fYmVn bGVuID0gX19vbGRsZW47CiAgICAgICAgICBfX2VuZCA9IF9fcGFkczsKICAgICAgICB9CiAgICAg IGVsc2UgaWYgKF9fYWRqdXN0ID09IGlvc19iYXNlOjppbnRlcm5hbCAmJiBfX251bSkKICAgICAg ICB7CgoKCiAgICAgICAgICBsb2NhbGUgX19sb2MgPSBfX2lvLmdldGxvYygpOwogICAgICAgICAg Y29uc3QgY3R5cGU8X0NoYXJUPiYgX19jdHlwZSA9IHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4o X19sb2MpOwogICAgICAgICAgY29uc3QgX0NoYXJUIF9fbWludXMgPSBfX2N0eXBlLndpZGVuKCct Jyk7CiAgICAgICAgICBjb25zdCBfQ2hhclQgX19wbHVzID0gX19jdHlwZS53aWRlbignKycpOwog ICAgICAgICAgYm9vbCBfX3Rlc3RzaWduID0gX1RyYWl0czo6ZXEoX19vbGRzWzBdLCBfX21pbnVz KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgX1RyYWl0czo6ZXEoX19vbGRzWzBdLCBf X3BsdXMpOwoKICAgICAgICAgIGJvb2wgX190ZXN0aGV4ID0gX1RyYWl0czo6ZXEoX19jdHlwZS53 aWRlbignMCcpLCBfX29sZHNbMF0pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIChfVHJh aXRzOjplcShfX2N0eXBlLndpZGVuKCd4JyksIF9fb2xkc1sxXSkKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHx8IF9UcmFpdHM6OmVxKF9fY3R5cGUud2lkZW4oJ1gnKSwgX19vbGRzWzFd KSk7CiAgICAgICAgICBpZiAoX190ZXN0aGV4KQogICAgICAgICAgICB7CiAgICAgICAgICAgICAg X19uZXdzWzBdID0gX19vbGRzWzBdOwogICAgICAgICAgICAgIF9fbmV3c1sxXSA9IF9fb2xkc1sx XTsKICAgICAgICAgICAgICBfX21vZCArPSAyOwogICAgICAgICAgICAgIF9fbmV3cyArPSAyOwog ICAgICAgICAgICAgIF9fYmVnID0gX19wYWRzOwogICAgICAgICAgICAgIF9fYmVnbGVuID0gX19w bGVuOwogICAgICAgICAgICAgIF9fZW5kID0gY29uc3RfY2FzdDxfQ2hhclQqPihfX29sZHMgKyBf X21vZCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGVsc2UgaWYgKF9fdGVzdHNpZ24pCiAgICAg ICAgICAgIHsKICAgICAgICAgICAgICBfVHJhaXRzOjplcSgoX19uZXdzWzBdID0gX19vbGRzWzBd KSwgX19wbHVzKSA/IF9fcGx1cyA6IF9fbWludXM7CiAgICAgICAgICAgICAgKytfX21vZDsKICAg ICAgICAgICAgICArK19fbmV3czsKICAgICAgICAgICAgICBfX2JlZyA9IF9fcGFkczsKICAgICAg ICAgICAgICBfX2JlZ2xlbiA9IF9fcGxlbjsKICAgICAgICAgICAgICBfX2VuZCA9IGNvbnN0X2Nh c3Q8X0NoYXJUKj4oX19vbGRzICsgX19tb2QpOwogICAgICAgICAgICB9CiAgICAgICAgICBlbHNl CiAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgX19iZWcgPSBfX3BhZHM7CiAgICAgICAgICAg ICAgX19iZWdsZW4gPSBfX3BsZW47CiAgICAgICAgICAgICAgX19lbmQgPSBjb25zdF9jYXN0PF9D aGFyVCo+KF9fb2xkcyk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIGVsc2UKICAgICAg ICB7CgogICAgICAgICAgX19iZWcgPSBfX3BhZHM7CiAgICAgICAgICBfX2JlZ2xlbiA9IF9fcGxl bjsKICAgICAgICAgIF9fZW5kID0gY29uc3RfY2FzdDxfQ2hhclQqPihfX29sZHMpOwogICAgICAg IH0KICAgICAgX1RyYWl0czo6Y29weShfX25ld3MsIF9fYmVnLCBfX2JlZ2xlbik7CiAgICAgIF9U cmFpdHM6OmNvcHkoX19uZXdzICsgX19iZWdsZW4sIF9fZW5kLAogICAgICAgICAgICAgICAgICAg ICAgICAgIF9fbmV3bGVuIC0gX19iZWdsZW4gLSBfX21vZCk7CiAgICB9CiMgMjA4NSAiL3Vzci9p bmNsdWRlL2MrKy8zLjIuMS9iaXRzL2xvY2FsZV9mYWNldHMudGNjIiAzCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0NoYXJUPgogICAgYm9vbAogICAgX192ZXJpZnlfZ3JvdXBpbmcoY29uc3QgYmFzaWNf c3RyaW5nPF9DaGFyVD4mIF9fZ3JvdXBpbmcsCiAgICAgICAgICAgICAgICAgICAgICBiYXNpY19z dHJpbmc8X0NoYXJUPiYgX19ncm91cGluZ190bXApCiAgICB7CiAgICAgIGludCBfX2kgPSAwOwog ICAgICBpbnQgX19qID0gMDsKICAgICAgY29uc3QgaW50IF9fbGVuID0gX19ncm91cGluZy5zaXpl KCk7CiAgICAgIGNvbnN0IGludCBfX24gPSBfX2dyb3VwaW5nX3RtcC5zaXplKCk7CiAgICAgIGJv b2wgX190ZXN0ID0gdHJ1ZTsKCgoKCiAgICAgIHdoaWxlIChfX3Rlc3QgJiYgX19pIDwgX19uIC0g MSkKICAgICAgICBmb3IgKF9faiA9IDA7IF9fdGVzdCAmJiBfX2ogPCBfX2xlbiAmJiBfX2kgPCBf X24gLSAxOyArK19faiwrK19faSkKICAgICAgICAgIF9fdGVzdCAmPSBfX2dyb3VwaW5nW19fal0g PT0gX19ncm91cGluZ190bXBbX19uIC0gX19pIC0gMV07CgoKICAgICAgX19qID09IF9fbGVuID8g X19qID0gMCA6IF9fajsKICAgICAgX190ZXN0ICY9IF9fZ3JvdXBpbmdbX19qXSA+PSBfX2dyb3Vw aW5nX3RtcFtfX24gLSBfX2kgLSAxXTsKICAgICAgcmV0dXJuIF9fdGVzdDsKICAgIH0KCgoKCgoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBfQ2hhclQqCiAgICBfX2FkZF9ncm91cGlu ZyhfQ2hhclQqIF9fcywgX0NoYXJUIF9fc2VwLAogICAgICAgICAgICAgICAgICAgY29uc3QgY2hh ciogX19nYmVnLCBjb25zdCBjaGFyKiBfX2dlbmQsCiAgICAgICAgICAgICAgICAgICBjb25zdCBf Q2hhclQqIF9fZmlyc3QsIGNvbnN0IF9DaGFyVCogX19sYXN0KQogICAgewogICAgICBpZiAoX19s YXN0IC0gX19maXJzdCA+ICpfX2diZWcpCiAgICAgICAgewogICAgICAgICAgX19zID0gX19hZGRf Z3JvdXBpbmcoX19zLCBfX3NlcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX2di ZWcgKyAxID09IF9fZ2VuZCA/IF9fZ2JlZyA6IF9fZ2JlZyArIDEpLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgX19nZW5kLCBfX2ZpcnN0LCBfX2xhc3QgLSAqX19nYmVnKTsKICAgICAg ICAgIF9fZmlyc3QgPSBfX2xhc3QgLSAqX19nYmVnOwogICAgICAgICAgKl9fcysrID0gX19zZXA7 CiAgICAgICAgfQogICAgICBkbwogICAgICAgICpfX3MrKyA9ICpfX2ZpcnN0Kys7CiAgICAgIHdo aWxlIChfX2ZpcnN0ICE9IF9fbGFzdCk7CiAgICAgIHJldHVybiBfX3M7CiAgICB9CgoKCgogIGV4 dGVybiB0ZW1wbGF0ZSBjbGFzcyBtb25leXB1bmN0PGNoYXIsIGZhbHNlPjsKICBleHRlcm4gdGVt cGxhdGUgY2xhc3MgbW9uZXlwdW5jdDxjaGFyLCB0cnVlPjsKICBleHRlcm4gdGVtcGxhdGUgY2xh c3MgbW9uZXlwdW5jdF9ieW5hbWU8Y2hhciwgZmFsc2U+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFz cyBtb25leXB1bmN0X2J5bmFtZTxjaGFyLCB0cnVlPjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3Mg bW9uZXlfZ2V0PGNoYXI+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBtb25leV9wdXQ8Y2hhcj47 CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIG51bXB1bmN0PGNoYXI+OwogIGV4dGVybiB0ZW1wbGF0 ZSBjbGFzcyBudW1wdW5jdF9ieW5hbWU8Y2hhcj47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIG51 bV9nZXQ8Y2hhcj47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIG51bV9wdXQ8Y2hhcj47CiAgZXh0 ZXJuIHRlbXBsYXRlIGNsYXNzIF9fdGltZXB1bmN0PGNoYXI+OwogIGV4dGVybiB0ZW1wbGF0ZSBj bGFzcyB0aW1lX3B1dDxjaGFyPjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgdGltZV9wdXRfYnlu YW1lPGNoYXI+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyB0aW1lX2dldDxjaGFyPjsKICBleHRl cm4gdGVtcGxhdGUgY2xhc3MgdGltZV9nZXRfYnluYW1lPGNoYXI+OwogIGV4dGVybiB0ZW1wbGF0 ZSBjbGFzcyBtZXNzYWdlczxjaGFyPjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgbWVzc2FnZXNf YnluYW1lPGNoYXI+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBjdHlwZV9ieW5hbWU8Y2hhcj47 CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIGNvZGVjdnRfYnluYW1lPGNoYXIsIGNoYXIsIG1ic3Rh dGVfdD47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIGNvbGxhdGU8Y2hhcj47CiAgZXh0ZXJuIHRl bXBsYXRlIGNsYXNzIGNvbGxhdGVfYnluYW1lPGNoYXI+OwoKICBleHRlcm4gdGVtcGxhdGUKICAg IGNvbnN0IGNvZGVjdnQ8Y2hhciwgY2hhciwgbWJzdGF0ZV90PiYKICAgIHVzZV9mYWNldDxjb2Rl Y3Z0PGNoYXIsIGNoYXIsIG1ic3RhdGVfdD4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRl bXBsYXRlCiAgICBjb25zdCBjb2xsYXRlPGNoYXI+JgogICAgdXNlX2ZhY2V0PGNvbGxhdGU8Y2hh cj4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBjb25zdCBudW1wdW5j dDxjaGFyPiYKICAgIHVzZV9mYWNldDxudW1wdW5jdDxjaGFyPiA+KGNvbnN0IGxvY2FsZSYpOwoK ICBleHRlcm4gdGVtcGxhdGUKICAgIGNvbnN0IG51bV9wdXQ8Y2hhcj4mCiAgICB1c2VfZmFjZXQ8 bnVtX3B1dDxjaGFyPiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGNv bnN0IG51bV9nZXQ8Y2hhcj4mCiAgICB1c2VfZmFjZXQ8bnVtX2dldDxjaGFyPiA+KGNvbnN0IGxv Y2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGNvbnN0IG1vbmV5cHVuY3Q8Y2hhciwgdHJ1 ZT4mCiAgICB1c2VfZmFjZXQ8bW9uZXlwdW5jdDxjaGFyLCB0cnVlPiA+KGNvbnN0IGxvY2FsZSYp OwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGNvbnN0IG1vbmV5cHVuY3Q8Y2hhciwgZmFsc2U+Jgog ICAgdXNlX2ZhY2V0PG1vbmV5cHVuY3Q8Y2hhciwgZmFsc2U+ID4oY29uc3QgbG9jYWxlJik7Cgog IGV4dGVybiB0ZW1wbGF0ZQogICAgY29uc3QgbW9uZXlfcHV0PGNoYXI+JgogICAgdXNlX2ZhY2V0 PG1vbmV5X3B1dDxjaGFyPiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAg IGNvbnN0IG1vbmV5X2dldDxjaGFyPiYKICAgIHVzZV9mYWNldDxtb25leV9nZXQ8Y2hhcj4gPihj b25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBjb25zdCBfX3RpbWVwdW5jdDxj aGFyPiYKICAgIHVzZV9mYWNldDxfX3RpbWVwdW5jdDxjaGFyPiA+KGNvbnN0IGxvY2FsZSYpOwoK ICBleHRlcm4gdGVtcGxhdGUKICAgIGNvbnN0IHRpbWVfcHV0PGNoYXI+JgogICAgdXNlX2ZhY2V0 PHRpbWVfcHV0PGNoYXI+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAg Y29uc3QgdGltZV9nZXQ8Y2hhcj4mCiAgICB1c2VfZmFjZXQ8dGltZV9nZXQ8Y2hhcj4gPihjb25z dCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBjb25zdCBtZXNzYWdlczxjaGFyPiYK ICAgIHVzZV9mYWNldDxtZXNzYWdlczxjaGFyPiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4g dGVtcGxhdGUKICAgIGJvb2wKICAgIGhhc19mYWNldDxjdHlwZTxjaGFyPiA+KGNvbnN0IGxvY2Fs ZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGJvb2wKICAgIGhhc19mYWNldDxjb2RlY3Z0PGNo YXIsIGNoYXIsIG1ic3RhdGVfdD4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRl CiAgICBib29sCiAgICBoYXNfZmFjZXQ8Y29sbGF0ZTxjaGFyPiA+KGNvbnN0IGxvY2FsZSYpOwoK ICBleHRlcm4gdGVtcGxhdGUKICAgIGJvb2wKICAgIGhhc19mYWNldDxudW1wdW5jdDxjaGFyPiA+ KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGJvb2wKICAgIGhhc19mYWNl dDxudW1fcHV0PGNoYXI+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAg Ym9vbAogICAgaGFzX2ZhY2V0PG51bV9nZXQ8Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0 ZXJuIHRlbXBsYXRlCiAgICBib29sCiAgICBoYXNfZmFjZXQ8bW9uZXlwdW5jdDxjaGFyPiA+KGNv bnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGJvb2wKICAgIGhhc19mYWNldDxt b25leV9wdXQ8Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBi b29sCiAgICBoYXNfZmFjZXQ8bW9uZXlfZ2V0PGNoYXI+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4 dGVybiB0ZW1wbGF0ZQogICAgYm9vbAogICAgaGFzX2ZhY2V0PF9fdGltZXB1bmN0PGNoYXI+ID4o Y29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgYm9vbAogICAgaGFzX2ZhY2V0 PHRpbWVfcHV0PGNoYXI+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAg Ym9vbAogICAgaGFzX2ZhY2V0PHRpbWVfZ2V0PGNoYXI+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4 dGVybiB0ZW1wbGF0ZQogICAgYm9vbAogICAgaGFzX2ZhY2V0PG1lc3NhZ2VzPGNoYXI+ID4oY29u c3QgbG9jYWxlJik7CgoKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgbW9uZXlwdW5jdDx3Y2hhcl90 LCBmYWxzZT47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIG1vbmV5cHVuY3Q8d2NoYXJfdCwgdHJ1 ZT47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIG1vbmV5cHVuY3RfYnluYW1lPHdjaGFyX3QsIGZh bHNlPjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgbW9uZXlwdW5jdF9ieW5hbWU8d2NoYXJfdCwg dHJ1ZT47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIG1vbmV5X2dldDx3Y2hhcl90PjsKICBleHRl cm4gdGVtcGxhdGUgY2xhc3MgbW9uZXlfcHV0PHdjaGFyX3Q+OwogIGV4dGVybiB0ZW1wbGF0ZSBj bGFzcyBudW1wdW5jdDx3Y2hhcl90PjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgbnVtcHVuY3Rf YnluYW1lPHdjaGFyX3Q+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBudW1fZ2V0PHdjaGFyX3Q+ OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBudW1fcHV0PHdjaGFyX3Q+OwogIGV4dGVybiB0ZW1w bGF0ZSBjbGFzcyBfX3RpbWVwdW5jdDx3Y2hhcl90PjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3Mg dGltZV9wdXQ8d2NoYXJfdD47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIHRpbWVfcHV0X2J5bmFt ZTx3Y2hhcl90PjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgdGltZV9nZXQ8d2NoYXJfdD47CiAg ZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIHRpbWVfZ2V0X2J5bmFtZTx3Y2hhcl90PjsKICBleHRlcm4g dGVtcGxhdGUgY2xhc3MgbWVzc2FnZXM8d2NoYXJfdD47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNz IG1lc3NhZ2VzX2J5bmFtZTx3Y2hhcl90PjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgY3R5cGVf YnluYW1lPHdjaGFyX3Q+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBjb2RlY3Z0X2J5bmFtZTx3 Y2hhcl90LCBjaGFyLCBtYnN0YXRlX3Q+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBjb2xsYXRl PHdjaGFyX3Q+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBjb2xsYXRlX2J5bmFtZTx3Y2hhcl90 PjsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBjb25zdCBjb2RlY3Z0PHdjaGFyX3QsIGNoYXIsIG1i c3RhdGVfdD4mCiAgICB1c2VfZmFjZXQ8Y29kZWN2dDx3Y2hhcl90LCBjaGFyLCBtYnN0YXRlX3Q+ ID4obG9jYWxlIGNvbnN0Jik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgY29uc3QgY29sbGF0ZTx3 Y2hhcl90PiYKICAgIHVzZV9mYWNldDxjb2xsYXRlPHdjaGFyX3Q+ID4oY29uc3QgbG9jYWxlJik7 CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgY29uc3QgbnVtcHVuY3Q8d2NoYXJfdD4mCiAgICB1c2Vf ZmFjZXQ8bnVtcHVuY3Q8d2NoYXJfdD4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBs YXRlCiAgICBjb25zdCBudW1fcHV0PHdjaGFyX3Q+JgogICAgdXNlX2ZhY2V0PG51bV9wdXQ8d2No YXJfdD4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBjb25zdCBudW1f Z2V0PHdjaGFyX3Q+JgogICAgdXNlX2ZhY2V0PG51bV9nZXQ8d2NoYXJfdD4gPihjb25zdCBsb2Nh bGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBjb25zdCBtb25leXB1bmN0PHdjaGFyX3QsIHRy dWU+JgogICAgdXNlX2ZhY2V0PG1vbmV5cHVuY3Q8d2NoYXJfdCwgdHJ1ZT4gPihjb25zdCBsb2Nh bGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBjb25zdCBtb25leXB1bmN0PHdjaGFyX3QsIGZh bHNlPiYKICAgIHVzZV9mYWNldDxtb25leXB1bmN0PHdjaGFyX3QsIGZhbHNlPiA+KGNvbnN0IGxv Y2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGNvbnN0IG1vbmV5X3B1dDx3Y2hhcl90PiYK ICAgIHVzZV9mYWNldDxtb25leV9wdXQ8d2NoYXJfdD4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0 ZXJuIHRlbXBsYXRlCiAgICBjb25zdCBtb25leV9nZXQ8d2NoYXJfdD4mCiAgICB1c2VfZmFjZXQ8 bW9uZXlfZ2V0PHdjaGFyX3Q+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQog ICAgY29uc3QgX190aW1lcHVuY3Q8d2NoYXJfdD4mCiAgICB1c2VfZmFjZXQ8X190aW1lcHVuY3Q8 d2NoYXJfdD4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBjb25zdCB0 aW1lX3B1dDx3Y2hhcl90PiYKICAgIHVzZV9mYWNldDx0aW1lX3B1dDx3Y2hhcl90PiA+KGNvbnN0 IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGNvbnN0IHRpbWVfZ2V0PHdjaGFyX3Q+ JgogICAgdXNlX2ZhY2V0PHRpbWVfZ2V0PHdjaGFyX3Q+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4 dGVybiB0ZW1wbGF0ZQogICAgY29uc3QgbWVzc2FnZXM8d2NoYXJfdD4mCiAgICB1c2VfZmFjZXQ8 bWVzc2FnZXM8d2NoYXJfdD4gPihjb25zdCBsb2NhbGUmKTsKCiBleHRlcm4gdGVtcGxhdGUKICAg IGJvb2wKICAgIGhhc19mYWNldDxjdHlwZTx3Y2hhcl90PiA+KGNvbnN0IGxvY2FsZSYpOwoKICBl eHRlcm4gdGVtcGxhdGUKICAgIGJvb2wKICAgIGhhc19mYWNldDxjb2RlY3Z0PHdjaGFyX3QsIGNo YXIsIG1ic3RhdGVfdD4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBi b29sCiAgICBoYXNfZmFjZXQ8Y29sbGF0ZTx3Y2hhcl90PiA+KGNvbnN0IGxvY2FsZSYpOwoKICBl eHRlcm4gdGVtcGxhdGUKICAgIGJvb2wKICAgIGhhc19mYWNldDxudW1wdW5jdDx3Y2hhcl90PiA+ KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGJvb2wKICAgIGhhc19mYWNl dDxudW1fcHV0PHdjaGFyX3Q+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQog ICAgYm9vbAogICAgaGFzX2ZhY2V0PG51bV9nZXQ8d2NoYXJfdD4gPihjb25zdCBsb2NhbGUmKTsK CiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBib29sCiAgICBoYXNfZmFjZXQ8bW9uZXlwdW5jdDx3Y2hh cl90PiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGJvb2wKICAgIGhh c19mYWNldDxtb25leV9wdXQ8d2NoYXJfdD4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRl bXBsYXRlCiAgICBib29sCiAgICBoYXNfZmFjZXQ8bW9uZXlfZ2V0PHdjaGFyX3Q+ID4oY29uc3Qg bG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgYm9vbAogICAgaGFzX2ZhY2V0PF9fdGlt ZXB1bmN0PHdjaGFyX3Q+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAg Ym9vbAogICAgaGFzX2ZhY2V0PHRpbWVfcHV0PHdjaGFyX3Q+ID4oY29uc3QgbG9jYWxlJik7Cgog IGV4dGVybiB0ZW1wbGF0ZQogICAgYm9vbAogICAgaGFzX2ZhY2V0PHRpbWVfZ2V0PHdjaGFyX3Q+ ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgYm9vbAogICAgaGFzX2Zh Y2V0PG1lc3NhZ2VzPHdjaGFyX3Q+ID4oY29uc3QgbG9jYWxlJik7Cgp9CiMgNDcgIi91c3IvaW5j bHVkZS9jKysvMy4yLjEvbG9jYWxlIiAyIDMKIyAzOCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9i aXRzL29zdHJlYW0udGNjIiAyIDMKCm5hbWVzcGFjZSBzdGQKewogIHRlbXBsYXRlPHR5cGVuYW1l IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJh aXRzPjo6c2VudHJ5OjoKICAgIHNlbnRyeShiYXNpY19vc3RyZWFtPF9DaGFyVCxfVHJhaXRzPiYg X19vcykKICAgIDogX01fb2soX19vcy5nb29kKCkpLCBfTV9vcyhfX29zKQogICAgewoKICAgICAg aWYgKF9NX29rICYmIF9fb3MudGllKCkpCiAgICAgICAgX19vcy50aWUoKS0+Zmx1c2goKTsKICAg IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFz aWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9U cmFpdHM+OjoKICAgIG9wZXJhdG9yPDwoX19vc3RyZWFtX3R5cGUmICgqX19wZikoX19vc3RyZWFt X3R5cGUmKSkKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcyk7CiAgICAgIGlmIChfX2Nl cmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsgX19wZigqdGhpcyk7IH0K ICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAg ICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBp ZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAg ICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlz OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAg ICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19vc3RyZWFtPF9DaGFy VCwgX1RyYWl0cz46OgogICAgb3BlcmF0b3I8PChfX2lvc190eXBlJiAoKl9fcGYpKF9faW9zX3R5 cGUmKSkKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcyk7CiAgICAgIGlmIChfX2NlcmIp CiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsgX19wZigqdGhpcyk7IH0KICAg ICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAg ICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAo KHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAg ICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwog ICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBi YXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwg X1RyYWl0cz46OgogICAgb3BlcmF0b3I8PChpb3NfYmFzZSYgKCpfX3BmKShpb3NfYmFzZSYpKQog ICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAg ICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgeyBfX3BmKCp0aGlzKTsgfQogICAgICAgICAg Y2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRo aXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRo cm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9Cgog IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29z dHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRz Pjo6b3BlcmF0b3I8PChfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiaW4pCiAgICB7CiAgICAgIHNlbnRy eSBfX2NlcmIoKnRoaXMpOwogICAgICBpZiAoX19jZXJiICYmIF9fc2JpbikKICAgICAgICB7CiAg ICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlmICghX19jb3B5X3N0cmVh bWJ1ZnMoKnRoaXMsIF9fc2JpbiwgdGhpcy0+cmRidWYoKSkpCiAgICAgICAgICAgICAgICB0aGlz LT5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNh dGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlz LT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4 Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJv dzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgZWxzZSBpZiAoIV9fc2JpbikKICAgICAg ICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgcmV0dXJuICp0aGlzOwog ICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBi YXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwg X1RyYWl0cz46Om9wZXJhdG9yPDwoYm9vbCBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIo KnRoaXMpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAg ICAgICB7CiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1wdXQpKQogICAg ICAgICAgICAgICAgaWYgKF9NX2ZudW1wdXQtPnB1dCgqdGhpcywgKnRoaXMsIHRoaXMtPmZpbGwo KSwgX19uKS5mYWlsZWQoKSkKICAgICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jh c2U6OmJhZGJpdCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19m YWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFz ZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19i YXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQog ICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0 cz4mCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46Om9wZXJhdG9yPDwobG9uZyBf X24pCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMpOwogICAgICBpZiAoX19jZXJiKQog ICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgY2hhcl90 eXBlIF9fYyA9IHRoaXMtPmZpbGwoKTsKICAgICAgICAgICAgICBpb3NfYmFzZTo6Zm10ZmxhZ3Mg X19mbXQgPSB0aGlzLT5mbGFncygpICYgaW9zX2Jhc2U6OmJhc2VmaWVsZDsKICAgICAgICAgICAg ICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bXB1dCkpCiAgICAgICAgICAgICAgICB7CiAgICAg ICAgICAgICAgICAgIGJvb2wgX19iID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgIGlmICgoX19m bXQgJiBpb3NfYmFzZTo6b2N0KSB8fCAoX19mbXQgJiBpb3NfYmFzZTo6aGV4KSkKICAgICAgICAg ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIF9fbCA9IHN0 YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+KF9fbik7CiAgICAgICAgICAgICAgICAgICAgICBfX2Ig PSBfTV9mbnVtcHV0LT5wdXQoKnRoaXMsICp0aGlzLCBfX2MsIF9fbCkuZmFpbGVkKCk7CiAgICAg ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAg ICAgX19iID0gX01fZm51bXB1dC0+cHV0KCp0aGlzLCAqdGhpcywgX19jLCBfX24pLmZhaWxlZCgp OwogICAgICAgICAgICAgICAgICBpZiAoX19iKQogICAgICAgICAgICAgICAgICAgIHRoaXMtPnNl dHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9 CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAg ICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAg aWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAg ICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhp czsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgog ICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfb3N0cmVhbTxfQ2hh clQsIF9UcmFpdHM+OjpvcGVyYXRvcjw8KHVuc2lnbmVkIGxvbmcgX19uKQogICAgewogICAgICBz ZW50cnkgX19jZXJiKCp0aGlzKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAg ICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9m bnVtcHV0KSkKICAgICAgICAgICAgICAgIGlmIChfTV9mbnVtcHV0LT5wdXQoKnRoaXMsICp0aGlz LCB0aGlzLT5maWxsKCksIF9fbikuZmFpbGVkKCkpCiAgICAgICAgICAgICAgICAgIHRoaXMtPnNl dHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChl eGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0 c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRp b25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAg ICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCgogIHRlbXBs YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08 X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6b3Bl cmF0b3I8PChsb25nIGxvbmcgX19uKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzKTsK ICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewog ICAgICAgICAgICAgIGNoYXJfdHlwZSBfX2MgPSB0aGlzLT5maWxsKCk7CiAgICAgICAgICAgICAg aW9zX2Jhc2U6OmZtdGZsYWdzIF9fZm10ID0gdGhpcy0+ZmxhZ3MoKSAmIGlvc19iYXNlOjpiYXNl ZmllbGQ7CiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1wdXQpKQogICAg ICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBib29sIF9fYiA9IGZhbHNlOwogICAgICAg ICAgICAgICAgICBpZiAoKF9fZm10ICYgaW9zX2Jhc2U6Om9jdCkgfHwgKF9fZm10ICYgaW9zX2Jh c2U6OmhleCkpCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgdW5z aWduZWQgbG9uZyBsb25nIF9fbDsKICAgICAgICAgICAgICAgICAgICAgIF9fbCA9IHN0YXRpY19j YXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4oX19uKTsKICAgICAgICAgICAgICAgICAgICAgIF9fYiA9 IF9NX2ZudW1wdXQtPnB1dCgqdGhpcywgKnRoaXMsIF9fYywgX19sKS5mYWlsZWQoKTsKICAgICAg ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAg ICBfX2IgPSBfTV9mbnVtcHV0LT5wdXQoKnRoaXMsICp0aGlzLCBfX2MsIF9fbikuZmFpbGVkKCk7 CiAgICAgICAgICAgICAgICAgIGlmIChfX2IpCiAgICAgICAgICAgICAgICAgICAgdGhpcy0+c2V0 c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0K ICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAg ICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBp ZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAg ICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlz OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAg ICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19vc3RyZWFtPF9DaGFy VCwgX1RyYWl0cz46Om9wZXJhdG9yPDwodW5zaWduZWQgbG9uZyBsb25nIF9fbikKICAgIHsKICAg ICAgc2VudHJ5IF9fY2VyYigqdGhpcyk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAg ICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQo X01fZm51bXB1dCkpCiAgICAgICAgICAgICAgICBpZiAoX01fZm51bXB1dC0+cHV0KCp0aGlzLCAq dGhpcywgdGhpcy0+ZmlsbCgpLCBfX24pLmZhaWxlZCgpKQogICAgICAgICAgICAgICAgICB0aGlz LT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0 Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMt PnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhj ZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93 OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgoKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3Ry ZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46 Om9wZXJhdG9yPDwoZG91YmxlIF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcyk7 CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsK ICAgICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bXB1dCkpCiAgICAgICAgICAg ICAgICBpZiAoX01fZm51bXB1dC0+cHV0KCp0aGlzLCAqdGhpcywgdGhpcy0+ZmlsbCgpLCBfX24p LmZhaWxlZCgpKQogICAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFk Yml0KTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAg ICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRi aXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJh ZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAg fQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg dHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAg IGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6b3BlcmF0b3I8PChsb25nIGRvdWJsZSBf X24pCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMpOwogICAgICBpZiAoX19jZXJiKQog ICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaWYgKF9N X2NoZWNrX2ZhY2V0KF9NX2ZudW1wdXQpKQogICAgICAgICAgICAgICAgaWYgKF9NX2ZudW1wdXQt PnB1dCgqdGhpcywgKnRoaXMsIHRoaXMtPmZpbGwoKSwgX19uKS5mYWlsZWQoKSkKICAgICAgICAg ICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgIH0K ICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAg ICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBp ZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAg ICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlz OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAg ICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19vc3RyZWFtPF9DaGFy VCwgX1RyYWl0cz46Om9wZXJhdG9yPDwoY29uc3Qgdm9pZCogX19uKQogICAgewogICAgICBzZW50 cnkgX19jZXJiKCp0aGlzKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0 cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVt cHV0KSkKICAgICAgICAgICAgICAgIGlmIChfTV9mbnVtcHV0LT5wdXQoKnRoaXMsICp0aGlzLCB0 aGlzLT5maWxsKCksIF9fbikuZmFpbGVkKCkpCiAgICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0 YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNl cHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3Rh dGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25z KCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAg ICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hh clQsIF9UcmFpdHM+JgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjpwdXQoY2hh cl90eXBlIF9fYykKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcyk7CiAgICAgIGlmIChf X2NlcmIpCiAgICAgICAgewogICAgICAgICAgaW50X3R5cGUgX19wdXQgPSByZGJ1ZigpLT5zcHV0 YyhfX2MpOwogICAgICAgICAgaWYgKHRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfX3B1dCwgdHJh aXRzX3R5cGU6OmVvZigpKSkKICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJh ZGJpdCk7CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJU LCBfVHJhaXRzPiYKICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6d3JpdGUoY29u c3QgX0NoYXJUKiBfX3MsIHN0cmVhbXNpemUgX19uKQogICAgewogICAgICBzZW50cnkgX19jZXJi KCp0aGlzKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICBzdHJlYW1zaXpl IF9fcHV0ID0gdGhpcy0+cmRidWYoKS0+c3B1dG4oX19zLCBfX24pOwogICAgICAgICAgaWYgKCBf X3B1dCAhPSBfX24pCiAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQp OwogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1Ry YWl0cz4mCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OmZsdXNoKCkKICAgIHsK ICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcyk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewog ICAgICAgICAgaWYgKHRoaXMtPnJkYnVmKCkgJiYgdGhpcy0+cmRidWYoKS0+cHVic3luYygpID09 IC0xKQogICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAg ICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU LCB0eXBlbmFtZSBfVHJhaXRzPgogICAgdHlwZW5hbWUgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9U cmFpdHM+Ojpwb3NfdHlwZQogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Ojp0ZWxs cCgpCiAgICB7CiAgICAgIHBvc190eXBlIF9fcmV0ID0gcG9zX3R5cGUoLTEpOwogICAgICBpZiAo IXRoaXMtPmZhaWwoKSkKICAgICAgICBfX3JldCA9IHRoaXMtPnJkYnVmKCktPnB1YnNlZWtvZmYo MCwgaW9zX2Jhc2U6OmN1ciwgaW9zX2Jhc2U6Om91dCk7CiAgICAgIHJldHVybiBfX3JldDsKICAg IH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJh c2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBf VHJhaXRzPjo6c2Vla3AocG9zX3R5cGUgX19wb3MpCiAgICB7CiAgICAgIGlmICghdGhpcy0+ZmFp bCgpKQogICAgICAgIHsKCgogICAgICAgICAgcG9zX3R5cGUgX19lcnIgPSB0aGlzLT5yZGJ1Zigp LT5wdWJzZWVrcG9zKF9fcG9zLCBpb3NfYmFzZTo6b3V0KTsKCgogICAgICAgICAgaWYgKF9fZXJy ID09IHBvc190eXBlKG9mZl90eXBlKC0xKSkpCiAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlv c19iYXNlOjpmYWlsYml0KTsKCiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9Cgog IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29z dHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRz Pjo6CiAgICBzZWVrcChvZmZfdHlwZSBfX29mZiwgaW9zX2Jhc2U6OnNlZWtkaXIgX19kKQogICAg ewogICAgICBpZiAoIXRoaXMtPmZhaWwoKSkKICAgICAgICB7CgoKICAgICAgICAgIHBvc190eXBl IF9fZXJyID0gdGhpcy0+cmRidWYoKS0+cHVic2Vla29mZihfX29mZiwgX19kLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvc19iYXNlOjpvdXQp OwoKCiAgICAgICAgICBpZiAoX19lcnIgPT0gcG9zX3R5cGUob2ZmX3R5cGUoLTEpKSkKICAgICAg ICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwoKICAgICAgICB9CiAgICAg IHJldHVybiAqdGhpczsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h bWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIG9wZXJh dG9yPDwoYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX291dCwgX0NoYXJUIF9fYykK ICAgIHsKICAgICAgdHlwZWRlZiBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gX19vc3Ry ZWFtX3R5cGU7CiAgICAgIHR5cGVuYW1lIF9fb3N0cmVhbV90eXBlOjpzZW50cnkgX19jZXJiKF9f b3V0KTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAg ICAgewogICAgICAgICAgICAgIHN0cmVhbXNpemUgX193ID0gX19vdXQud2lkdGgoKTsKICAgICAg ICAgICAgICBfQ2hhclQqIF9fcGFkcyA9IHN0YXRpY19jYXN0PF9DaGFyVCo+KF9fYnVpbHRpbl9h bGxvY2Eoc2l6ZW9mKF9DaGFyVCkgKiAoX193ICsgMSkpKTsKICAgICAgICAgICAgICBfX3BhZHNb MF0gPSBfX2M7CiAgICAgICAgICAgICAgc3RyZWFtc2l6ZSBfX2xlbiA9IDE7CiAgICAgICAgICAg ICAgaWYgKF9fdyA+IF9fbGVuKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBf X3BhZDxfQ2hhclQsIF9UcmFpdHM+OjpfU19wYWQoX19vdXQsIF9fb3V0LmZpbGwoKSwgX19wYWRz LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJl9fYywg X193LCBfX2xlbiwgZmFsc2UpOwogICAgICAgICAgICAgICAgICBfX2xlbiA9IF9fdzsKICAgICAg ICAgICAgICAgIH0KICAgICAgICAgICAgICBfX291dC53cml0ZShfX3BhZHMsIF9fbGVuKTsKICAg ICAgICAgICAgICBfX291dC53aWR0aCgwKTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2go ZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIF9fb3V0LnNl dHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgoX19vdXQuZXhjZXB0 aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93Owog ICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gX19vdXQ7CiAgICB9CgoKICB0ZW1w bGF0ZSA8Y2xhc3MgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0cz4mCiAg ICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0cz4mIF9fb3V0LCBjaGFyIF9f YykKICAgIHsKICAgICAgdHlwZWRlZiBiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+IF9fb3N0 cmVhbV90eXBlOwogICAgICB0eXBlbmFtZSBfX29zdHJlYW1fdHlwZTo6c2VudHJ5IF9fY2VyYihf X291dCk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAg ICAgIHsKICAgICAgICAgICAgICBzdHJlYW1zaXplIF9fdyA9IF9fb3V0LndpZHRoKCk7CiAgICAg ICAgICAgICAgY2hhciogX19wYWRzID0gc3RhdGljX2Nhc3Q8Y2hhcio+KF9fYnVpbHRpbl9hbGxv Y2EoX193ICsgMSkpOwogICAgICAgICAgICAgIF9fcGFkc1swXSA9IF9fYzsKICAgICAgICAgICAg ICBzdHJlYW1zaXplIF9fbGVuID0gMTsKICAgICAgICAgICAgICBpZiAoX193ID4gX19sZW4pCiAg ICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIF9fcGFkPGNoYXIsIF9UcmFpdHM+Ojpf U19wYWQoX19vdXQsIF9fb3V0LmZpbGwoKSwgX19wYWRzLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICZfX2MsIF9fdywgX19sZW4sIGZhbHNlKTsKICAgICAg ICAgICAgICAgICAgX19sZW4gPSBfX3c7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg X19vdXQud3JpdGUoX19wYWRzLCBfX2xlbik7CiAgICAgICAgICAgICAgX19vdXQud2lkdGgoMCk7 CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAg ICAgICB7CgoKICAgICAgICAgICAgICBfX291dC5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsK ICAgICAgICAgICAgICBpZiAoKF9fb3V0LmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQp ICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAg ICAgcmV0dXJuIF9fb3V0OwogICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl bmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgb3Bl cmF0b3I8PChiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3V0LCBjb25zdCBfQ2hh clQqIF9fcykKICAgIHsKICAgICAgdHlwZWRlZiBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0 cz4gX19vc3RyZWFtX3R5cGU7CiAgICAgIHR5cGVuYW1lIF9fb3N0cmVhbV90eXBlOjpzZW50cnkg X19jZXJiKF9fb3V0KTsKICAgICAgaWYgKF9fY2VyYiAmJiBfX3MpCiAgICAgICAgewogICAgICAg ICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBzdHJlYW1zaXplIF9fdyA9IF9fb3V0 LndpZHRoKCk7CiAgICAgICAgICAgICAgX0NoYXJUKiBfX3BhZHMgPSBzdGF0aWNfY2FzdDxfQ2hh clQqPihfX2J1aWx0aW5fYWxsb2NhKHNpemVvZihfQ2hhclQpICogX193KSk7CiAgICAgICAgICAg ICAgc3RyZWFtc2l6ZSBfX2xlbiA9IHN0YXRpY19jYXN0PHN0cmVhbXNpemU+KF9UcmFpdHM6Omxl bmd0aChfX3MpKTsKICAgICAgICAgICAgICBpZiAoX193ID4gX19sZW4pCiAgICAgICAgICAgICAg ICB7CiAgICAgICAgICAgICAgICAgIF9fcGFkPF9DaGFyVCwgX1RyYWl0cz46Ol9TX3BhZChfX291 dCwgX19vdXQuZmlsbCgpLCBfX3BhZHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBfX3MsIF9fdywgX19sZW4sIGZhbHNlKTsKICAgICAgICAgICAgICAg ICAgX19zID0gX19wYWRzOwogICAgICAgICAgICAgICAgICBfX2xlbiA9IF9fdzsKICAgICAgICAg ICAgICAgIH0KICAgICAgICAgICAgICBfX291dC53cml0ZShfX3MsIF9fbGVuKTsKICAgICAgICAg ICAgICBfX291dC53aWR0aCgwKTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0 aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIF9fb3V0LnNldHN0YXRl KGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgoX19vdXQuZXhjZXB0aW9ucygp ICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAg ICAgICB9CiAgICAgICAgfQogICAgICBlbHNlIGlmICghX19zKQogICAgICAgIF9fb3V0LnNldHN0 YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICByZXR1cm4gX19vdXQ7CiAgICB9CgogIHRlbXBs YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08 X0NoYXJULCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9U cmFpdHM+JiBfX291dCwgY29uc3QgY2hhciogX19zKQogICAgewogICAgICB0eXBlZGVmIGJhc2lj X29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiBfX29zdHJlYW1fdHlwZTsKCgoKICAgICAgdHlwZWRl ZiBjaGFyX3RyYWl0czxjaGFyPiBfX3RyYWl0c190eXBlOwoKICAgICAgdHlwZW5hbWUgX19vc3Ry ZWFtX3R5cGU6OnNlbnRyeSBfX2NlcmIoX19vdXQpOwogICAgICBpZiAoX19jZXJiICYmIF9fcykK ICAgICAgICB7CiAgICAgICAgICBzaXplX3QgX19jbGVuID0gX190cmFpdHNfdHlwZTo6bGVuZ3Ro KF9fcyk7CiAgICAgICAgICBfQ2hhclQqIF9fd3MgPSBzdGF0aWNfY2FzdDxfQ2hhclQqPihfX2J1 aWx0aW5fYWxsb2NhKHNpemVvZihfQ2hhclQpICogKF9fY2xlbiArIDEpKSk7CiAgICAgICAgICBm b3IgKHNpemVfdCBfX2kgPSAwOyBfX2kgPCBfX2NsZW47ICsrX19pKQogICAgICAgICAgICBfX3dz W19faV0gPSBfX291dC53aWRlbihfX3NbX19pXSk7CiAgICAgICAgICBfQ2hhclQqIF9fc3RyID0g X193czsKCiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIHN0cmVhbXNp emUgX19sZW4gPSBzdGF0aWNfY2FzdDxzdHJlYW1zaXplPihfX2NsZW4pOwogICAgICAgICAgICAg IHN0cmVhbXNpemUgX193ID0gX19vdXQud2lkdGgoKTsKICAgICAgICAgICAgICBfQ2hhclQqIF9f cGFkcyA9IHN0YXRpY19jYXN0PF9DaGFyVCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKF9DaGFy VCkgKiBfX3cpKTsKCiAgICAgICAgICAgICAgaWYgKF9fdyA+IF9fbGVuKQogICAgICAgICAgICAg ICAgewogICAgICAgICAgICAgICAgICBfX3BhZDxfQ2hhclQsIF9UcmFpdHM+OjpfU19wYWQoX19v dXQsIF9fb3V0LmZpbGwoKSwgX19wYWRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgX193cywgX193LCBfX2xlbiwgZmFsc2UpOwogICAgICAgICAgICAg ICAgICBfX3N0ciA9IF9fcGFkczsKICAgICAgICAgICAgICAgICAgX19sZW4gPSBfX3c7CiAgICAg ICAgICAgICAgICB9CiAgICAgICAgICAgICAgX19vdXQud3JpdGUoX19zdHIsIF9fbGVuKTsKICAg ICAgICAgICAgICBfX291dC53aWR0aCgwKTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2go ZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIF9fb3V0LnNl dHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgoX19vdXQuZXhjZXB0 aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93Owog ICAgICAgICAgICB9CiAgICAgICAgfQogICAgICBlbHNlIGlmICghX19zKQogICAgICAgIF9fb3V0 LnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICByZXR1cm4gX19vdXQ7CiAgICB9CgoK ICB0ZW1wbGF0ZTxjbGFzcyBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRz PiYKICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYgX19vdXQsIGNv bnN0IGNoYXIqIF9fcykKICAgIHsKICAgICAgdHlwZWRlZiBiYXNpY19vc3RyZWFtPGNoYXIsIF9U cmFpdHM+IF9fb3N0cmVhbV90eXBlOwogICAgICB0eXBlbmFtZSBfX29zdHJlYW1fdHlwZTo6c2Vu dHJ5IF9fY2VyYihfX291dCk7CiAgICAgIGlmIChfX2NlcmIgJiYgX19zKQogICAgICAgIHsKICAg ICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgc3RyZWFtc2l6ZSBfX3cgPSBf X291dC53aWR0aCgpOwogICAgICAgICAgICAgIGNoYXIqIF9fcGFkcyA9IHN0YXRpY19jYXN0PGNo YXIqPihfX2J1aWx0aW5fYWxsb2NhKF9fdykpOwogICAgICAgICAgICAgIHN0cmVhbXNpemUgX19s ZW4gPSBzdGF0aWNfY2FzdDxzdHJlYW1zaXplPihfVHJhaXRzOjpsZW5ndGgoX19zKSk7CgogICAg ICAgICAgICAgIGlmIChfX3cgPiBfX2xlbikKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAg ICAgICAgX19wYWQ8Y2hhciwgX1RyYWl0cz46Ol9TX3BhZChfX291dCwgX19vdXQuZmlsbCgpLCBf X3BhZHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf X3MsIF9fdywgX19sZW4sIGZhbHNlKTsKICAgICAgICAgICAgICAgICAgX19zID0gX19wYWRzOwog ICAgICAgICAgICAgICAgICBfX2xlbiA9IF9fdzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAg ICAgICBfX291dC53cml0ZShfX3MsIF9fbGVuKTsKICAgICAgICAgICAgICBfX291dC53aWR0aCgw KTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAg ICAgICAgIHsKCgogICAgICAgICAgICAgIF9fb3V0LnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQp OwogICAgICAgICAgICAgIGlmICgoX19vdXQuZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJp dCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQog ICAgICBlbHNlIGlmICghX19zKQogICAgICAgIF9fb3V0LnNldHN0YXRlKGlvc19iYXNlOjpiYWRi aXQpOwogICAgICByZXR1cm4gX19vdXQ7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh clQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX29zdHJlYW08 X0NoYXJULCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9U cmFpdHM+JiBfX291dCwKICAgICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwg X1RyYWl0cywgX0FsbG9jPiYgX19zdHIpCiAgICB7CiAgICAgIHR5cGVkZWYgYmFzaWNfb3N0cmVh bTxfQ2hhclQsIF9UcmFpdHM+IF9fb3N0cmVhbV90eXBlOwogICAgICB0eXBlbmFtZSBfX29zdHJl YW1fdHlwZTo6c2VudHJ5IF9fY2VyYihfX291dCk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAg ewogICAgICAgICAgY29uc3QgX0NoYXJUKiBfX3MgPSBfX3N0ci5kYXRhKCk7CiAgICAgICAgICBz dHJlYW1zaXplIF9fdyA9IF9fb3V0LndpZHRoKCk7CiAgICAgICAgICBfQ2hhclQqIF9fcGFkcyA9 IHN0YXRpY19jYXN0PF9DaGFyVCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKF9DaGFyVCkgKiBf X3cpKTsKICAgICAgICAgIHN0cmVhbXNpemUgX19sZW4gPSBzdGF0aWNfY2FzdDxzdHJlYW1zaXpl PihfX3N0ci5zaXplKCkpOwoKCgogICAgICAgICAgaWYgKF9fdyA+IF9fbGVuKQogICAgICAgICAg ICB7CiAgICAgICAgICAgICAgX19wYWQ8X0NoYXJULCBfVHJhaXRzPjo6X1NfcGFkKF9fb3V0LCBf X291dC5maWxsKCksIF9fcGFkcywgX19zLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBfX3csIF9fbGVuLCBmYWxzZSk7CiAgICAgICAgICAgICAgX19zID0gX19w YWRzOwogICAgICAgICAgICAgIF9fbGVuID0gX193OwogICAgICAgICAgICB9CiAgICAgICAgICBz dHJlYW1zaXplIF9fcmVzID0gX19vdXQucmRidWYoKS0+c3B1dG4oX19zLCBfX2xlbik7CiAgICAg ICAgICBfX291dC53aWR0aCgwKTsKICAgICAgICAgIGlmIChfX3JlcyAhPSBfX2xlbikKICAgICAg ICAgICAgX19vdXQuc2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwogICAgICAgIH0KICAgICAg cmV0dXJuIF9fb3V0OwogICAgfQoKCgoKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgYmFzaWNfb3N0 cmVhbTxjaGFyPjsKICBleHRlcm4gdGVtcGxhdGUgb3N0cmVhbSYgZW5kbChvc3RyZWFtJik7CiAg ZXh0ZXJuIHRlbXBsYXRlIG9zdHJlYW0mIGVuZHMob3N0cmVhbSYpOwogIGV4dGVybiB0ZW1wbGF0 ZSBvc3RyZWFtJiBmbHVzaChvc3RyZWFtJik7CiAgZXh0ZXJuIHRlbXBsYXRlIG9zdHJlYW0mIG9w ZXJhdG9yPDwob3N0cmVhbSYsIGNoYXIpOwogIGV4dGVybiB0ZW1wbGF0ZSBvc3RyZWFtJiBvcGVy YXRvcjw8KG9zdHJlYW0mLCB1bnNpZ25lZCBjaGFyKTsKICBleHRlcm4gdGVtcGxhdGUgb3N0cmVh bSYgb3BlcmF0b3I8PChvc3RyZWFtJiwgc2lnbmVkIGNoYXIpOwogIGV4dGVybiB0ZW1wbGF0ZSBv c3RyZWFtJiBvcGVyYXRvcjw8KG9zdHJlYW0mLCBjb25zdCBjaGFyKik7CiAgZXh0ZXJuIHRlbXBs YXRlIG9zdHJlYW0mIG9wZXJhdG9yPDwob3N0cmVhbSYsIGNvbnN0IHVuc2lnbmVkIGNoYXIqKTsK ICBleHRlcm4gdGVtcGxhdGUgb3N0cmVhbSYgb3BlcmF0b3I8PChvc3RyZWFtJiwgY29uc3Qgc2ln bmVkIGNoYXIqKTsKCgogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBiYXNpY19vc3RyZWFtPHdjaGFy X3Q+OwogIGV4dGVybiB0ZW1wbGF0ZSB3b3N0cmVhbSYgZW5kbCh3b3N0cmVhbSYpOwogIGV4dGVy biB0ZW1wbGF0ZSB3b3N0cmVhbSYgZW5kcyh3b3N0cmVhbSYpOwogIGV4dGVybiB0ZW1wbGF0ZSB3 b3N0cmVhbSYgZmx1c2god29zdHJlYW0mKTsKICBleHRlcm4gdGVtcGxhdGUgd29zdHJlYW0mIG9w ZXJhdG9yPDwod29zdHJlYW0mLCB3Y2hhcl90KTsKICBleHRlcm4gdGVtcGxhdGUgd29zdHJlYW0m IG9wZXJhdG9yPDwod29zdHJlYW0mLCBjaGFyKTsKICBleHRlcm4gdGVtcGxhdGUgd29zdHJlYW0m IG9wZXJhdG9yPDwod29zdHJlYW0mLCBjb25zdCB3Y2hhcl90Kik7CiAgZXh0ZXJuIHRlbXBsYXRl IHdvc3RyZWFtJiBvcGVyYXRvcjw8KHdvc3RyZWFtJiwgY29uc3QgY2hhciopOwoKfQojIDI3NiAi L3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9vc3RyZWFtIiAyIDMKIyA0NiAiL3Vzci9pbmNsdWRlL2Mr Ky8zLjIuMS9pb3N0cmVhbSIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9pc3RyZWFt IiAxIDMKIyA0MyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIuMS9pc3RyZWFtIiAzCgoKCgpuYW1lc3Bh Y2Ugc3RkCnsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgog ICAgY2xhc3MgYmFzaWNfaXN0cmVhbSA6IHZpcnR1YWwgcHVibGljIGJhc2ljX2lvczxfQ2hhclQs IF9UcmFpdHM+CiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5 cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6aW50X3R5cGUgaW50X3R5cGU7CiAg ICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6cG9zX3R5cGUgcG9zX3R5cGU7CiAgICAgIHR5 cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6b2ZmX3R5cGUgb2ZmX3R5cGU7CiAgICAgIHR5cGVkZWYg X1RyYWl0cyB0cmFpdHNfdHlwZTsKCgogICAgICB0eXBlZGVmIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hh clQsIF9UcmFpdHM+IF9fc3RyZWFtYnVmX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfaW9zPF9D aGFyVCwgX1RyYWl0cz4gX19pb3NfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19pc3RyZWFtPF9D aGFyVCwgX1RyYWl0cz4gX19pc3RyZWFtX3R5cGU7CiAgICAgIHR5cGVkZWYgaXN0cmVhbWJ1Zl9p dGVyYXRvcjxfQ2hhclQsIF9UcmFpdHM+IF9faXN0cmVhbWJ1Zl9pdGVyOwogICAgICB0eXBlZGVm IG51bV9nZXQ8X0NoYXJULCBfX2lzdHJlYW1idWZfaXRlcj4gX19udW1nZXRfdHlwZTsKICAgICAg dHlwZWRlZiBjdHlwZTxfQ2hhclQ+IF9fY3R5cGVfdHlwZTsKCiAgICBwcm90ZWN0ZWQ6CgogICAg ICBzdHJlYW1zaXplIF9NX2djb3VudDsKCiAgICBwdWJsaWM6CgogICAgICBleHBsaWNpdAogICAg ICBiYXNpY19pc3RyZWFtKF9fc3RyZWFtYnVmX3R5cGUqIF9fc2IpCiAgICAgIHsKICAgICAgICB0 aGlzLT5pbml0KF9fc2IpOwogICAgICAgIF9NX2djb3VudCA9IHN0cmVhbXNpemUoMCk7CiAgICAg IH0KCiAgICAgIHZpcnR1YWwKICAgICAgfmJhc2ljX2lzdHJlYW0oKQogICAgICB7IF9NX2djb3Vu dCA9IHN0cmVhbXNpemUoMCk7IH0KCgogICAgICBjbGFzcyBzZW50cnk7CiAgICAgIGZyaWVuZCBj bGFzcyBzZW50cnk7CgoKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj4+KF9f aXN0cmVhbV90eXBlJiAoKl9fcGYpKF9faXN0cmVhbV90eXBlJikpOwoKICAgICAgX19pc3RyZWFt X3R5cGUmCiAgICAgIG9wZXJhdG9yPj4oX19pb3NfdHlwZSYgKCpfX3BmKShfX2lvc190eXBlJikp OwoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPj4oaW9zX2Jhc2UmICgqX19w ZikoaW9zX2Jhc2UmKSk7CgoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPj4o Ym9vbCYgX19uKTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj4+KHNob3J0 JiBfX24pOwoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPj4odW5zaWduZWQg c2hvcnQmIF9fbik7CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+PihpbnQm IF9fbik7CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+Pih1bnNpZ25lZCBp bnQmIF9fbik7CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+Pihsb25nJiBf X24pOwoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPj4odW5zaWduZWQgbG9u ZyYgX19uKTsKCgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+Pihsb25nIGxv bmcmIF9fbik7CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+Pih1bnNpZ25l ZCBsb25nIGxvbmcmIF9fbik7CgoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9y Pj4oZmxvYXQmIF9fZik7CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+Pihk b3VibGUmIF9fZik7CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+Pihsb25n IGRvdWJsZSYgX19mKTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj4+KHZv aWQqJiBfX3ApOwoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPj4oX19zdHJl YW1idWZfdHlwZSogX19zYik7CgoKICAgICAgaW5saW5lIHN0cmVhbXNpemUKICAgICAgZ2NvdW50 KHZvaWQpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX2djb3VudDsgfQoKICAgICAgaW50X3R5cGUK ICAgICAgZ2V0KHZvaWQpOwoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIGdldChjaGFyX3R5 cGUmIF9fYyk7CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgZ2V0KGNoYXJfdHlwZSogX19z LCBzdHJlYW1zaXplIF9fbiwgY2hhcl90eXBlIF9fZGVsaW0pOwoKICAgICAgaW5saW5lIF9faXN0 cmVhbV90eXBlJgogICAgICBnZXQoY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKQogICAg ICB7IHJldHVybiB0aGlzLT5nZXQoX19zLCBfX24sIHRoaXMtPndpZGVuKCdcbicpKTsgfQoKICAg ICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIGdldChfX3N0cmVhbWJ1Zl90eXBlJiBfX3NiLCBjaGFy X3R5cGUgX19kZWxpbSk7CgogICAgICBpbmxpbmUgX19pc3RyZWFtX3R5cGUmCiAgICAgIGdldChf X3N0cmVhbWJ1Zl90eXBlJiBfX3NiKQogICAgICB7IHJldHVybiB0aGlzLT5nZXQoX19zYiwgdGhp cy0+d2lkZW4oJ1xuJykpOyB9CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgZ2V0bGluZShj aGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24sIGNoYXJfdHlwZSBfX2RlbGltKTsKCiAgICAg IGlubGluZSBfX2lzdHJlYW1fdHlwZSYKICAgICAgZ2V0bGluZShjaGFyX3R5cGUqIF9fcywgc3Ry ZWFtc2l6ZSBfX24pCiAgICAgIHsgcmV0dXJuIHRoaXMtPmdldGxpbmUoX19zLCBfX24sIHRoaXMt PndpZGVuKCdcbicpKTsgfQoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIGlnbm9yZShzdHJl YW1zaXplIF9fbiA9IDEsIGludF90eXBlIF9fZGVsaW0gPSB0cmFpdHNfdHlwZTo6ZW9mKCkpOwoK ICAgICAgaW50X3R5cGUKICAgICAgcGVlayh2b2lkKTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgog ICAgICByZWFkKGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbik7CgogICAgICBzdHJlYW1z aXplCiAgICAgIHJlYWRzb21lKGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbik7CgogICAg ICBfX2lzdHJlYW1fdHlwZSYKICAgICAgcHV0YmFjayhjaGFyX3R5cGUgX19jKTsKCiAgICAgIF9f aXN0cmVhbV90eXBlJgogICAgICB1bmdldCh2b2lkKTsKCiAgICAgIGludAogICAgICBzeW5jKHZv aWQpOwoKICAgICAgcG9zX3R5cGUKICAgICAgdGVsbGcodm9pZCk7CgogICAgICBfX2lzdHJlYW1f dHlwZSYKICAgICAgc2Vla2cocG9zX3R5cGUpOwoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAg IHNlZWtnKG9mZl90eXBlLCBpb3NfYmFzZTo6c2Vla2Rpcik7CiAgICB9OwoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBjbGFzcyBiYXNpY19pc3RyZWFt PF9DaGFyVCwgX1RyYWl0cz46OnNlbnRyeQogICAgewogICAgcHVibGljOgogICAgICB0eXBlZGVm IF9UcmFpdHMgdHJhaXRzX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyZWFtYnVmPF9DaGFy VCwgX1RyYWl0cz4gX19zdHJlYW1idWZfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19pc3RyZWFt PF9DaGFyVCwgX1RyYWl0cz4gX19pc3RyZWFtX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUg X19pc3RyZWFtX3R5cGU6Ol9fY3R5cGVfdHlwZSBfX2N0eXBlX3R5cGU7CiAgICAgIHR5cGVkZWYg dHlwZW5hbWUgX1RyYWl0czo6aW50X3R5cGUgX19pbnRfdHlwZTsKCiAgICAgIGV4cGxpY2l0CiAg ICAgIHNlbnRyeShiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faXMsIGJvb2wgX19u b3NraXB3cyA9IGZhbHNlKTsKCiAgICAgIG9wZXJhdG9yIGJvb2woKSB7IHJldHVybiBfTV9vazsg fQoKICAgIHByaXZhdGU6CiAgICAgIGJvb2wgX01fb2s7CiAgICB9OwoKCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQs IF9UcmFpdHM+JgogICAgb3BlcmF0b3I+PihiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4m IF9faW4sIF9DaGFyVCYgX19jKTsKCiAgdGVtcGxhdGU8Y2xhc3MgX1RyYWl0cz4KICAgIGJhc2lj X2lzdHJlYW08Y2hhciwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08Y2hh ciwgX1RyYWl0cz4mIF9faW4sIHVuc2lnbmVkIGNoYXImIF9fYykKICAgIHsgcmV0dXJuIChfX2lu ID4+IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhciY+KF9fYykpOyB9CgogIHRlbXBsYXRlPGNsYXNzIF9U cmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPGNoYXIsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I+Pihi YXNpY19pc3RyZWFtPGNoYXIsIF9UcmFpdHM+JiBfX2luLCBzaWduZWQgY2hhciYgX19jKQogICAg eyByZXR1cm4gKF9faW4gPj4gcmVpbnRlcnByZXRfY2FzdDxjaGFyJj4oX19jKSk7IH0KCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVh bTxfQ2hhclQsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I+PihiYXNpY19pc3RyZWFtPF9DaGFyVCwg X1RyYWl0cz4mIF9faW4sIF9DaGFyVCogX19zKTsKCiAgdGVtcGxhdGU8Y2xhc3MgX1RyYWl0cz4K ICAgIGJhc2ljX2lzdHJlYW08Y2hhcixfVHJhaXRzPiYKICAgIG9wZXJhdG9yPj4oYmFzaWNfaXN0 cmVhbTxjaGFyLF9UcmFpdHM+JiBfX2luLCB1bnNpZ25lZCBjaGFyKiBfX3MpCiAgICB7IHJldHVy biAoX19pbiA+PiByZWludGVycHJldF9jYXN0PGNoYXIqPihfX3MpKTsgfQoKICB0ZW1wbGF0ZTxj bGFzcyBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxjaGFyLF9UcmFpdHM+JgogICAgb3BlcmF0 b3I+PihiYXNpY19pc3RyZWFtPGNoYXIsX1RyYWl0cz4mIF9faW4sIHNpZ25lZCBjaGFyKiBfX3Mp CiAgICB7IHJldHVybiAoX19pbiA+PiByZWludGVycHJldF9jYXN0PGNoYXIqPihfX3MpKTsgfQoK CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgY2xhc3Mg YmFzaWNfaW9zdHJlYW0KICAgIDogcHVibGljIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRz PiwKICAgICAgcHVibGljIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPgogICAgewogICAg cHVibGljOgoKCgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYg dHlwZW5hbWUgX1RyYWl0czo6aW50X3R5cGUgaW50X3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5h bWUgX1RyYWl0czo6cG9zX3R5cGUgcG9zX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1Ry YWl0czo6b2ZmX3R5cGUgb2ZmX3R5cGU7CiAgICAgIHR5cGVkZWYgX1RyYWl0cyB0cmFpdHNfdHlw ZTsKCgoKICAgICAgdHlwZWRlZiBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gX19pc3Ry ZWFtX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IF9f b3N0cmVhbV90eXBlOwoKICAgICAgZXhwbGljaXQKICAgICAgYmFzaWNfaW9zdHJlYW0oYmFzaWNf c3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4qIF9fc2IpCiAgICAgIDogX19pc3RyZWFtX3R5cGUo X19zYiksIF9fb3N0cmVhbV90eXBlKF9fc2IpCiAgICAgIHsgfQoKICAgICAgdmlydHVhbAogICAg ICB+YmFzaWNfaW9zdHJlYW0oKSB7IH0KICAgIH07CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh clQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4m CiAgICB3cyhiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faXMpOwp9CgoKCgoKIyAx ICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL2JpdHMvaXN0cmVhbS50Y2MiIDEgMwojIDM2ICIvdXNy L2luY2x1ZGUvYysrLzMuMi4xL2JpdHMvaXN0cmVhbS50Y2MiIDMKCgoKCm5hbWVzcGFjZSBzdGQK ewogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2lj X2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6c2VudHJ5OjoKICAgIHNlbnRyeShiYXNpY19pc3Ry ZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faW4sIGJvb2wgX19ub3NraXB3cykKICAgIHsKICAgICAg aWYgKF9faW4uZ29vZCgpKQogICAgICAgIHsKICAgICAgICAgIGlmIChfX2luLnRpZSgpKQogICAg ICAgICAgICBfX2luLnRpZSgpLT5mbHVzaCgpOwogICAgICAgICAgaWYgKCFfX25vc2tpcHdzICYm IChfX2luLmZsYWdzKCkgJiBpb3NfYmFzZTo6c2tpcHdzKSkKICAgICAgICAgICAgewogICAgICAg ICAgICAgIGNvbnN0IF9faW50X3R5cGUgX19lb2YgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7CiAgICAg ICAgICAgICAgX19zdHJlYW1idWZfdHlwZSogX19zYiA9IF9faW4ucmRidWYoKTsKICAgICAgICAg ICAgICBfX2ludF90eXBlIF9fYyA9IF9fc2ItPnNnZXRjKCk7CgogICAgICAgICAgICAgIGlmIChf X2luLl9NX2NoZWNrX2ZhY2V0KF9faW4uX01fZmN0eXBlKSkKICAgICAgICAgICAgICAgIHdoaWxl ICghdHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKF9fYywgX19lb2YpCiAgICAgICAgICAgICAgICAg ICAgICAgJiYgX19pbi5fTV9mY3R5cGUtPmlzKGN0eXBlX2Jhc2U6OnNwYWNlLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFpdHNfdHlwZTo6dG9fY2hhcl90 eXBlKF9fYykpKQogICAgICAgICAgICAgICAgICBfX2MgPSBfX3NiLT5zbmV4dGMoKTsKCgoKICAg ICAgICAgICAgICBpZiAodHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKF9fYywgX19lb2YpKQogICAg ICAgICAgICAgICAgX19pbi5zZXRzdGF0ZShpb3NfYmFzZTo6ZW9mYml0KTsKCiAgICAgICAgICAg IH0KICAgICAgICB9CgogICAgICBpZiAoX19pbi5nb29kKCkpCiAgICAgICAgX01fb2sgPSB0cnVl OwogICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgX01fb2sgPSBmYWxzZTsKICAgICAgICAg IF9faW4uc2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwogICAgICAgIH0KICAgIH0KCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVh bTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoK ICAgIG9wZXJhdG9yPj4oX19pc3RyZWFtX3R5cGUmICgqX19wZikoX19pc3RyZWFtX3R5cGUmKSkK ICAgIHsKICAgICAgX19wZigqdGhpcyk7CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVh bTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoK ICAgIG9wZXJhdG9yPj4oX19pb3NfdHlwZSYgKCpfX3BmKShfX2lvc190eXBlJikpCiAgICB7CiAg ICAgIF9fcGYoKnRoaXMpOwogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJU LCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBvcGVy YXRvcj4+KGlvc19iYXNlJiAoKl9fcGYpKGlvc19iYXNlJikpCiAgICB7CiAgICAgIF9fcGYoKnRo aXMpOwogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy VCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYK ICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBvcGVyYXRvcj4+KGJvb2wm IF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgZmFsc2UpOwogICAgICBpZiAo X19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAg ICAgaW9zX2Jhc2U6Omlvc3RhdGUgX19lcnIgPSBpb3NfYmFzZTo6aW9zdGF0ZShpb3NfYmFzZTo6 Z29vZGJpdCk7CiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1nZXQpKQog ICAgICAgICAgICAgICAgX01fZm51bWdldC0+Z2V0KCp0aGlzLCAwLCAqdGhpcywgX19lcnIsIF9f bik7CiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoX19lcnIpOwogICAgICAgICAgICB9CiAg ICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAg ICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYg KCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAg ICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsK ICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAg YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQs IF9UcmFpdHM+OjoKICAgIG9wZXJhdG9yPj4oc2hvcnQmIF9fbikKICAgIHsKICAgICAgc2VudHJ5 IF9fY2VyYigqdGhpcywgZmFsc2UpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAg ICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUgX19l cnIgPSBpb3NfYmFzZTo6aW9zdGF0ZShpb3NfYmFzZTo6Z29vZGJpdCk7CiAgICAgICAgICAgICAg bG9uZyBfX2w7CiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1nZXQpKQog ICAgICAgICAgICAgICAgX01fZm51bWdldC0+Z2V0KCp0aGlzLCAwLCAqdGhpcywgX19lcnIsIF9f bCk7CgoKICAgICAgICAgICAgICBpZiAoIShfX2VyciAmIGlvc19iYXNlOjpmYWlsYml0KQogICAg ICAgICAgICAgICAgICAmJiAobnVtZXJpY19saW1pdHM8c2hvcnQ+OjptaW4oKSA8PSBfX2wKICAg ICAgICAgICAgICAgICAgICAgICYmIF9fbCA8PSBudW1lcmljX2xpbWl0czxzaG9ydD46Om1heCgp KSkKICAgICAgICAgICAgICAgIF9fbiA9IF9fbDsKICAgICAgICAgICAgICBlbHNlCiAgICAgICAg ICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKCiAgICAgICAgICAgICAgdGhpcy0+ c2V0c3RhdGUoX19lcnIpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24m IF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9z X2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBp b3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAg IH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9U cmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIG9wZXJhdG9y Pj4odW5zaWduZWQgc2hvcnQmIF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywg ZmFsc2UpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAg ICAgICB7CiAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUgX19lcnIgPSBpb3NfYmFzZTo6 aW9zdGF0ZShpb3NfYmFzZTo6Z29vZGJpdCk7CiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2Zh Y2V0KF9NX2ZudW1nZXQpKQogICAgICAgICAgICAgICAgX01fZm51bWdldC0+Z2V0KCp0aGlzLCAw LCAqdGhpcywgX19lcnIsIF9fbik7CiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoX19lcnIp OwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAg ICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7 CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0 KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAg ICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl bmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFz aWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIG9wZXJhdG9yPj4oaW50JiBfX24pCiAg ICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIGZhbHNlKTsKICAgICAgaWYgKF9fY2VyYikK ICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlvc19i YXNlOjppb3N0YXRlIF9fZXJyID0gaW9zX2Jhc2U6Omlvc3RhdGUoaW9zX2Jhc2U6Omdvb2RiaXQp OwogICAgICAgICAgICAgIGxvbmcgX19sOwogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNl dChfTV9mbnVtZ2V0KSkKICAgICAgICAgICAgICAgIF9NX2ZudW1nZXQtPmdldCgqdGhpcywgMCwg KnRoaXMsIF9fZXJyLCBfX2wpOwoKCiAgICAgICAgICAgICAgaWYgKCEoX19lcnIgJiBpb3NfYmFz ZTo6ZmFpbGJpdCkKICAgICAgICAgICAgICAgICAgJiYgKG51bWVyaWNfbGltaXRzPGludD46Om1p bigpIDw9IF9fbAogICAgICAgICAgICAgICAgICAgICAgJiYgX19sIDw9IG51bWVyaWNfbGltaXRz PGludD46Om1heCgpKSkKICAgICAgICAgICAgICAgIF9fbiA9IF9fbDsKICAgICAgICAgICAgICBl bHNlCiAgICAgICAgICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKCiAgICAgICAg ICAgICAgdGhpcy0+c2V0c3RhdGUoX19lcnIpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRj aChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+ c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNl cHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7 CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVh bTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoK ICAgIG9wZXJhdG9yPj4odW5zaWduZWQgaW50JiBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBfX2Nl cmIoKnRoaXMsIGZhbHNlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0 cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlIF9fZXJyID0g aW9zX2Jhc2U6Omlvc3RhdGUoaW9zX2Jhc2U6Omdvb2RiaXQpOwogICAgICAgICAgICAgIGlmIChf TV9jaGVja19mYWNldChfTV9mbnVtZ2V0KSkKICAgICAgICAgICAgICAgIF9NX2ZudW1nZXQtPmdl dCgqdGhpcywgMCwgKnRoaXMsIF9fZXJyLCBfX24pOwogICAgICAgICAgICAgIHRoaXMtPnNldHN0 YXRlKF9fZXJyKTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2Zh aWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNl OjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jh c2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAg ICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D aGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRz PiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBvcGVyYXRvcj4+KGxv bmcmIF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgZmFsc2UpOwogICAgICBp ZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAg ICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUgX19lcnIgPSBpb3NfYmFzZTo6aW9zdGF0ZShpb3NfYmFz ZTo6Z29vZGJpdCk7CiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1nZXQp KQogICAgICAgICAgICAgICAgX01fZm51bWdldC0+Z2V0KCp0aGlzLCAwLCAqdGhpcywgX19lcnIs IF9fbik7CiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoX19lcnIpOwogICAgICAgICAgICB9 CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAg ICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAg aWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAg ICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhp czsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgog ICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hh clQsIF9UcmFpdHM+OjoKICAgIG9wZXJhdG9yPj4odW5zaWduZWQgbG9uZyYgX19uKQogICAgewog ICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCBmYWxzZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAg ICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpb3NfYmFzZTo6 aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNlOjppb3N0YXRlKGlvc19iYXNlOjpnb29kYml0KTsKICAg ICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bWdldCkpCiAgICAgICAgICAgICAg ICBfTV9mbnVtZ2V0LT5nZXQoKnRoaXMsIDAsICp0aGlzLCBfX2VyciwgX19uKTsKICAgICAgICAg ICAgICB0aGlzLT5zZXRzdGF0ZShfX2Vycik7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNo KGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5z ZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2Vw dGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsK ICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVh bTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoK ICAgIG9wZXJhdG9yPj4obG9uZyBsb25nJiBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIo KnRoaXMsIGZhbHNlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkK ICAgICAgICAgICAgewogICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlIF9fZXJyID0gaW9z X2Jhc2U6Omlvc3RhdGUoaW9zX2Jhc2U6Omdvb2RiaXQpOwogICAgICAgICAgICAgIGlmIChfTV9j aGVja19mYWNldChfTV9mbnVtZ2V0KSkKICAgICAgICAgICAgICAgIF9NX2ZudW1nZXQtPmdldCgq dGhpcywgMCwgKnRoaXMsIF9fZXJyLCBfX24pOwogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRl KF9fZXJyKTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwp CiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpi YWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6 OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAg IH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs IHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAg ICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3BlcmF0b3I+Pih1bnNpZ25l ZCBsb25nIGxvbmcmIF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgZmFsc2Up OwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7 CiAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUgX19lcnIgPSBpb3NfYmFzZTo6aW9zdGF0 ZShpb3NfYmFzZTo6Z29vZGJpdCk7CiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9N X2ZudW1nZXQpKQogICAgICAgICAgICAgICAgX01fZm51bWdldC0+Z2V0KCp0aGlzLCAwLCAqdGhp cywgX19lcnIsIF9fbik7CiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoX19lcnIpOwogICAg ICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAg ewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAg ICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAw KQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJl dHVybiAqdGhpczsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg X1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lz dHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBvcGVyYXRvcj4+KGZsb2F0JiBfX24pCiAgICB7 CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIGZhbHNlKTsKICAgICAgaWYgKF9fY2VyYikKICAg ICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlvc19iYXNl Ojppb3N0YXRlIF9fZXJyID0gaW9zX2Jhc2U6Omlvc3RhdGUoaW9zX2Jhc2U6Omdvb2RiaXQpOwog ICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtZ2V0KSkKICAgICAgICAgICAg ICAgIF9NX2ZudW1nZXQtPmdldCgqdGhpcywgMCwgKnRoaXMsIF9fZXJyLCBfX24pOwogICAgICAg ICAgICAgIHRoaXMtPnNldHN0YXRlKF9fZXJyKTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0 Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMt PnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhj ZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93 OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRl bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJl YW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6 CiAgICBvcGVyYXRvcj4+KGRvdWJsZSYgX19uKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0 aGlzLCBmYWxzZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAg ICAgICAgICAgIHsKICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSBfX2VyciA9IGlvc19i YXNlOjppb3N0YXRlKGlvc19iYXNlOjpnb29kYml0KTsKICAgICAgICAgICAgICBpZiAoX01fY2hl Y2tfZmFjZXQoX01fZm51bWdldCkpCiAgICAgICAgICAgICAgICBfTV9mbnVtZ2V0LT5nZXQoKnRo aXMsIDAsICp0aGlzLCBfX2VyciwgX19uKTsKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShf X2Vycik7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQog ICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFk Yml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpi YWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAg IH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs IHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAg ICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3BlcmF0b3I+Pihsb25nIGRv dWJsZSYgX19uKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCBmYWxzZSk7CiAgICAg IGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAg ICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNlOjppb3N0YXRlKGlvc19i YXNlOjpnb29kYml0KTsKICAgICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bWdl dCkpCiAgICAgICAgICAgICAgICBfTV9mbnVtZ2V0LT5nZXQoKnRoaXMsIDAsICp0aGlzLCBfX2Vy ciwgX19uKTsKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShfX2Vycik7CiAgICAgICAgICAg IH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAg ICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAg ICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAg ICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0 aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+ CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9D aGFyVCwgX1RyYWl0cz46OgogICAgb3BlcmF0b3I+Pih2b2lkKiYgX19uKQogICAgewogICAgICBz ZW50cnkgX19jZXJiKCp0aGlzLCBmYWxzZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewog ICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0 ZSBfX2VyciA9IGlvc19iYXNlOjppb3N0YXRlKGlvc19iYXNlOjpnb29kYml0KTsKICAgICAgICAg ICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bWdldCkpCiAgICAgICAgICAgICAgICBfTV9m bnVtZ2V0LT5nZXQoKnRoaXMsIDAsICp0aGlzLCBfX2VyciwgX19uKTsKICAgICAgICAgICAgICB0 aGlzLT5zZXRzdGF0ZShfX2Vycik7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2Vw dGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0 ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMo KSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAg ICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFy VCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3Bl cmF0b3I+PihfX3N0cmVhbWJ1Zl90eXBlKiBfX3Nib3V0KQogICAgewogICAgICAgc2VudHJ5IF9f Y2VyYigqdGhpcywgZmFsc2UpOwogICAgICAgaWYgKF9fY2VyYikKICAgICAgICAgewogICAgICAg ICAgIHRyeQogICAgICAgICAgICAgewogICAgICAgICAgICAgICBzdHJlYW1zaXplIF9feHRyY3Qg PSAwOwogICAgICAgICAgICAgICBpZiAoX19zYm91dCkKICAgICAgICAgICAgICAgICB7CiAgICAg ICAgICAgICAgICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiaW4gPSB0aGlzLT5yZGJ1ZigpOwog ICAgICAgICAgICAgICAgICAgX194dHJjdCA9IF9fY29weV9zdHJlYW1idWZzKCp0aGlzLCBfX3Ni aW4sIF9fc2JvdXQpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgaWYgKCFfX3Ni b3V0IHx8ICFfX3h0cmN0KQogICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNl OjpmYWlsYml0KTsKICAgICAgICAgICAgIH0KICAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9f ZmFpbCkKICAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3Nf YmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBp b3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAg ICAgfQogICAgICAgICB9CiAgICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIHR5cGVuYW1lIGJhc2ljX2lzdHJl YW08X0NoYXJULCBfVHJhaXRzPjo6aW50X3R5cGUKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBf VHJhaXRzPjo6CiAgICBnZXQodm9pZCkKICAgIHsKICAgICAgY29uc3QgaW50X3R5cGUgX19lb2Yg PSB0cmFpdHNfdHlwZTo6ZW9mKCk7CiAgICAgIGludF90eXBlIF9fYyA9IF9fZW9mOwogICAgICBf TV9nY291bnQgPSAwOwogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCB0cnVlKTsKICAgICAgaWYg KF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAg ICAgIF9fYyA9IHRoaXMtPnJkYnVmKCktPnNidW1wYygpOwoKICAgICAgICAgICAgICBpZiAoIXRy YWl0c190eXBlOjplcV9pbnRfdHlwZShfX2MsIF9fZW9mKSkKICAgICAgICAgICAgICAgIF9NX2dj b3VudCA9IDE7CiAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgdGhpcy0+c2V0c3Rh dGUoaW9zX2Jhc2U6OmVvZmJpdCB8IGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAgICAgICAgfQog ICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAg ICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlm ICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAg ICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gX19jOwog ICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBi YXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwg X1RyYWl0cz46OgogICAgZ2V0KGNoYXJfdHlwZSYgX19jKQogICAgewogICAgICBfTV9nY291bnQg PSAwOwogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCB0cnVlKTsKICAgICAgaWYgKF9fY2VyYikK ICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGNvbnN0 IGludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6OmVvZigpOwogICAgICAgICAgICAgIGludF90 eXBlIF9fYnVmdmFsID0gdGhpcy0+cmRidWYoKS0+c2J1bXBjKCk7CgogICAgICAgICAgICAgIGlm ICghdHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKF9fYnVmdmFsLCBfX2VvZikpCiAgICAgICAgICAg ICAgICB7CiAgICAgICAgICAgICAgICAgIF9NX2djb3VudCA9IDE7CiAgICAgICAgICAgICAgICAg IF9fYyA9IHRyYWl0c190eXBlOjp0b19jaGFyX3R5cGUoX19idWZ2YWwpOwogICAgICAgICAgICAg ICAgfQogICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlv c19iYXNlOjplb2ZiaXQgfCBpb3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAgICAgICAgIH0KICAgICAg ICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAg ICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRo aXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAg ICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAg fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNp Y19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1Ry YWl0cz46OgogICAgZ2V0KGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbiwgY2hhcl90eXBl IF9fZGVsaW0pCiAgICB7CiAgICAgIF9NX2djb3VudCA9IDA7CiAgICAgIHNlbnRyeSBfX2NlcmIo KnRoaXMsIHRydWUpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQog ICAgICAgICAgICB7CiAgICAgICAgICAgICAgY29uc3QgaW50X3R5cGUgX19pZGVsaW0gPSB0cmFp dHNfdHlwZTo6dG9faW50X3R5cGUoX19kZWxpbSk7CiAgICAgICAgICAgICAgY29uc3QgaW50X3R5 cGUgX19lb2YgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7CiAgICAgICAgICAgICAgX19zdHJlYW1idWZf dHlwZSogX19zYiA9IHRoaXMtPnJkYnVmKCk7CiAgICAgICAgICAgICAgaW50X3R5cGUgX19jID0g X19zYi0+c2dldGMoKTsKCiAgICAgICAgICAgICAgd2hpbGUgKF9NX2djb3VudCArIDEgPCBfX24K ICAgICAgICAgICAgICAgICAgICAgJiYgIXRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfX2MsIF9f ZW9mKQogICAgICAgICAgICAgICAgICAgICAmJiAhdHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKF9f YywgX19pZGVsaW0pKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAqX19zKysg PSB0cmFpdHNfdHlwZTo6dG9fY2hhcl90eXBlKF9fYyk7CiAgICAgICAgICAgICAgICAgIF9fYyA9 IF9fc2ItPnNuZXh0YygpOwogICAgICAgICAgICAgICAgICArK19NX2djb3VudDsKICAgICAgICAg ICAgICAgIH0KICAgICAgICAgICAgICBpZiAodHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKF9fYywg X19lb2YpKQogICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmVvZmJpdCk7 CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAg ICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsK ICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQp ICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAg ICAgKl9fcyA9IGNoYXJfdHlwZSgpOwogICAgICBpZiAoIV9NX2djb3VudCkKICAgICAgICB0aGlz LT5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0K CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNf aXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFp dHM+OjoKICAgIGdldChfX3N0cmVhbWJ1Zl90eXBlJiBfX3NiLCBjaGFyX3R5cGUgX19kZWxpbSkK ICAgIHsKICAgICAgX01fZ2NvdW50ID0gMDsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgdHJ1 ZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAg IHsKICAgICAgICAgICAgICBjb25zdCBpbnRfdHlwZSBfX2lkZWxpbSA9IHRyYWl0c190eXBlOjp0 b19pbnRfdHlwZShfX2RlbGltKTsKICAgICAgICAgICAgICBjb25zdCBpbnRfdHlwZSBfX2VvZiA9 IHRyYWl0c190eXBlOjplb2YoKTsKICAgICAgICAgICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3Ro aXNfc2IgPSB0aGlzLT5yZGJ1ZigpOwogICAgICAgICAgICAgIGludF90eXBlIF9fYyA9IF9fdGhp c19zYi0+c2dldGMoKTsKICAgICAgICAgICAgICBjaGFyX3R5cGUgX19jMiA9IHRyYWl0c190eXBl Ojp0b19jaGFyX3R5cGUoX19jKTsKCiAgICAgICAgICAgICAgd2hpbGUgKCF0cmFpdHNfdHlwZTo6 ZXFfaW50X3R5cGUoX19jLCBfX2VvZikKICAgICAgICAgICAgICAgICAgICAgJiYgIXRyYWl0c190 eXBlOjplcV9pbnRfdHlwZShfX2MsIF9faWRlbGltKQogICAgICAgICAgICAgICAgICAgICAmJiAh dHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKF9fc2Iuc3B1dGMoX19jMiksIF9fZW9mKSkKICAgICAg ICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgKytfTV9nY291bnQ7CiAgICAgICAgICAgICAg ICAgIF9fYyA9IF9fdGhpc19zYi0+c25leHRjKCk7CiAgICAgICAgICAgICAgICAgIF9fYzIgPSB0 cmFpdHNfdHlwZTo6dG9fY2hhcl90eXBlKF9fYyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAg ICAgICAgaWYgKHRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfX2MsIF9fZW9mKSkKICAgICAgICAg ICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjplb2ZiaXQpOwogICAgICAgICAgICB9CiAg ICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAg ICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYg KCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAg ICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIGlmICghX01fZ2NvdW50 KQogICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAgcmV0dXJu ICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp dHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFt PF9DaGFyVCwgX1RyYWl0cz46OgogICAgZ2V0bGluZShjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6 ZSBfX24sIGNoYXJfdHlwZSBfX2RlbGltKQogICAgewogICAgICBfTV9nY291bnQgPSAwOwogICAg ICBzZW50cnkgX19jZXJiKCp0aGlzLCB0cnVlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7 CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGNvbnN0IGludF90eXBl IF9faWRlbGltID0gdHJhaXRzX3R5cGU6OnRvX2ludF90eXBlKF9fZGVsaW0pOwogICAgICAgICAg ICAgIGNvbnN0IGludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6OmVvZigpOwogICAgICAgICAg ICAgIF9fc3RyZWFtYnVmX3R5cGUqIF9fc2IgPSB0aGlzLT5yZGJ1ZigpOwogICAgICAgICAgICAg IGludF90eXBlIF9fYyA9IF9fc2ItPnNnZXRjKCk7CgogICAgICAgICAgICAgIHdoaWxlIChfTV9n Y291bnQgKyAxIDwgX19uCiAgICAgICAgICAgICAgICAgICAgICYmICF0cmFpdHNfdHlwZTo6ZXFf aW50X3R5cGUoX19jLCBfX2VvZikKICAgICAgICAgICAgICAgICAgICAgJiYgIXRyYWl0c190eXBl OjplcV9pbnRfdHlwZShfX2MsIF9faWRlbGltKSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAg ICAgICAgICAgKl9fcysrID0gdHJhaXRzX3R5cGU6OnRvX2NoYXJfdHlwZShfX2MpOwogICAgICAg ICAgICAgICAgICBfX2MgPSBfX3NiLT5zbmV4dGMoKTsKICAgICAgICAgICAgICAgICAgKytfTV9n Y291bnQ7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgaWYgKHRyYWl0c190eXBlOjpl cV9pbnRfdHlwZShfX2MsIF9fZW9mKSkKICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlv c19iYXNlOjplb2ZiaXQpOwogICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIHsKICAg ICAgICAgICAgICAgICAgaWYgKHRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfX2MsIF9faWRlbGlt KSkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICBfX3NiLT5zYnVt cGMoKTsKICAgICAgICAgICAgICAgICAgICAgICsrX01fZ2NvdW50OwogICAgICAgICAgICAgICAg ICAgIH0KICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgIHRoaXMtPnNl dHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg fQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAg ICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAg IGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAg ICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAqX19zID0gY2hh cl90eXBlKCk7CiAgICAgIGlmICghX01fZ2NvdW50KQogICAgICAgIHRoaXMtPnNldHN0YXRlKGlv c19iYXNlOjpmYWlsYml0KTsKICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFy VCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgaWdu b3JlKHN0cmVhbXNpemUgX19uLCBpbnRfdHlwZSBfX2RlbGltKQogICAgewogICAgICBfTV9nY291 bnQgPSAwOwogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCB0cnVlKTsKICAgICAgaWYgKF9fY2Vy YiAmJiBfX24gPiAwKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAg ICAgICAgICAgY29uc3QgaW50X3R5cGUgX19lb2YgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7CiAgICAg ICAgICAgICAgX19zdHJlYW1idWZfdHlwZSogX19zYiA9IHRoaXMtPnJkYnVmKCk7CiAgICAgICAg ICAgICAgaW50X3R5cGUgX19jOwoKICAgICAgICAgICAgICBfX24gPSBtaW4oX19uLCBudW1lcmlj X2xpbWl0czxzdHJlYW1zaXplPjo6bWF4KCkpOwogICAgICAgICAgICAgIHdoaWxlIChfTV9nY291 bnQgPCBfX24KICAgICAgICAgICAgICAgICAgICAgJiYgIXRyYWl0c190eXBlOjplcV9pbnRfdHlw ZShfX2MgPSBfX3NiLT5zYnVtcGMoKSwgX19lb2YpKQogICAgICAgICAgICAgICAgewogICAgICAg ICAgICAgICAgICArK19NX2djb3VudDsKICAgICAgICAgICAgICAgICAgaWYgKHRyYWl0c190eXBl OjplcV9pbnRfdHlwZShfX2MsIF9fZGVsaW0pKQogICAgICAgICAgICAgICAgICAgIGJyZWFrOwog ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGlmICh0cmFpdHNfdHlwZTo6ZXFfaW50X3R5 cGUoX19jLCBfX2VvZikpCiAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6 ZW9mYml0KTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwp CiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpi YWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6 OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAg ICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy VCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIHR5cGVuYW1lIGJhc2ljX2lzdHJlYW08X0NoYXJULCBf VHJhaXRzPjo6aW50X3R5cGUKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAg ICBwZWVrKHZvaWQpCiAgICB7CiAgICAgIGludF90eXBlIF9fYyA9IHRyYWl0c190eXBlOjplb2Yo KTsKICAgICAgX01fZ2NvdW50ID0gMDsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgdHJ1ZSk7 CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsg X19jID0gdGhpcy0+cmRidWYoKS0+c2dldGMoKTsgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9u JiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlv c19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYg aW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAg ICB9CiAgICAgICAgfQogICAgICByZXR1cm4gX19jOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1Ry YWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgcmVhZChjaGFy X3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pCiAgICB7CiAgICAgIF9NX2djb3VudCA9IDA7CiAg ICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIHRydWUpOwogICAgICBpZiAoX19jZXJiKQogICAgICAg IHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX01fZ2NvdW50ID0g dGhpcy0+cmRidWYoKS0+c2dldG4oX19zLCBfX24pOwogICAgICAgICAgICAgIGlmIChfTV9nY291 bnQgIT0gX19uKQogICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmVvZmJp dCB8IGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhj ZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0 YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9u cygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAg ICAgICAgICB9CiAgICAgICAgfQogICAgICBlbHNlCiAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9z X2Jhc2U6OmZhaWxiaXQpOwogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIHN0cmVhbXNpemUKICAgIGJhc2lj X2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICByZWFkc29tZShjaGFyX3R5cGUqIF9fcywg c3RyZWFtc2l6ZSBfX24pCiAgICB7CiAgICAgIF9NX2djb3VudCA9IDA7CiAgICAgIHNlbnRyeSBf X2NlcmIoKnRoaXMsIHRydWUpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAg IHRyeQogICAgICAgICAgICB7CgogICAgICAgICAgICAgIHN0cmVhbXNpemUgX19udW0gPSB0aGlz LT5yZGJ1ZigpLT5pbl9hdmFpbCgpOwogICAgICAgICAgICAgIGlmIChfX251bSA+PSAwKQogICAg ICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBfX251bSA9IG1pbihfX251bSwgX19uKTsK ICAgICAgICAgICAgICAgICAgaWYgKF9fbnVtKQogICAgICAgICAgICAgICAgICAgIF9NX2djb3Vu dCA9IHRoaXMtPnJkYnVmKCktPnNnZXRuKF9fcywgX19udW0pOwogICAgICAgICAgICAgICAgfQog ICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNl Ojplb2ZiaXQpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFp bCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6 OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFz ZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAg ICAgICB9CiAgICAgIGVsc2UKICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJp dCk7CiAgICAgIHJldHVybiBfTV9nY291bnQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D aGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRz PiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBwdXRiYWNrKGNoYXJf dHlwZSBfX2MpCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIHRydWUpOwogICAgICBp ZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAg ICAgICAgY29uc3QgaW50X3R5cGUgX19lb2YgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7CiAgICAgICAg ICAgICAgX19zdHJlYW1idWZfdHlwZSogX19zYiA9IHRoaXMtPnJkYnVmKCk7CiAgICAgICAgICAg ICAgaWYgKCFfX3NiCiAgICAgICAgICAgICAgICAgIHx8IHRyYWl0c190eXBlOjplcV9pbnRfdHlw ZShfX3NiLT5zcHV0YmFja2MoX19jKSwgX19lb2YpKQogICAgICAgICAgICAgICAgdGhpcy0+c2V0 c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4 Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRz dGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlv bnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAg ICAgICAgICAgfQogICAgICAgIH0KICAgICAgZWxzZQogICAgICAgIHRoaXMtPnNldHN0YXRlKGlv c19iYXNlOjpmYWlsYml0KTsKICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFy VCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgdW5n ZXQodm9pZCkKICAgIHsKICAgICAgX01fZ2NvdW50ID0gMDsKICAgICAgc2VudHJ5IF9fY2VyYigq dGhpcywgdHJ1ZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAg ICAgICAgICAgIHsKICAgICAgICAgICAgICBjb25zdCBpbnRfdHlwZSBfX2VvZiA9IHRyYWl0c190 eXBlOjplb2YoKTsKICAgICAgICAgICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiID0gdGhpcy0+ cmRidWYoKTsKICAgICAgICAgICAgICBpZiAoIV9fc2IKICAgICAgICAgICAgICAgICAgfHwgdHJh aXRzX3R5cGU6OmVxX2ludF90eXBlKF9fc2ItPnN1bmdldGMoKSwgX19lb2YpKQogICAgICAgICAg ICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgIH0KICAg ICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAg ICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAo KHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAg ICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgZWxzZQogICAgICAgIHRo aXMtPnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAgcmV0dXJuICp0aGlzOwogICAg fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBpbnQK ICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBzeW5jKHZvaWQpCiAgICB7 CiAgICAgIGludCBfX3JldCA9IC0xOwogICAgICBfTV9nY291bnQgPSAwOwogICAgICBzZW50cnkg X19jZXJiKCp0aGlzLCB0cnVlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAg ICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIF9fc3RyZWFtYnVmX3R5cGUqIF9fc2Ig PSB0aGlzLT5yZGJ1ZigpOwogICAgICAgICAgICAgIGlmIChfX3NiKQogICAgICAgICAgICAgICAg ewogICAgICAgICAgICAgICAgICBpZiAoX19zYi0+cHVic3luYygpID09IC0xKQogICAgICAgICAg ICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAg ICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgX19yZXQgPSAwOwogICAgICAgICAgICAgICAg fQogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAg ICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7 CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0 KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAg ICAgIHJldHVybiBfX3JldDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl bmFtZSBfVHJhaXRzPgogICAgdHlwZW5hbWUgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+ Ojpwb3NfdHlwZQogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIHRlbGxn KHZvaWQpCiAgICB7CiAgICAgIHBvc190eXBlIF9fcmV0ID0gcG9zX3R5cGUoLTEpOwogICAgICBp ZiAoIXRoaXMtPmZhaWwoKSkKICAgICAgICBfX3JldCA9IHRoaXMtPnJkYnVmKCktPnB1YnNlZWtv ZmYoMCwgaW9zX2Jhc2U6OmN1ciwgaW9zX2Jhc2U6OmluKTsKICAgICAgcmV0dXJuIF9fcmV0Owog ICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAg YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQs IF9UcmFpdHM+OjoKICAgIHNlZWtnKHBvc190eXBlIF9fcG9zKQogICAgewogICAgICBfTV9nY291 bnQgPSAwOwogICAgICBpZiAoIXRoaXMtPmZhaWwoKSkKICAgICAgICB7CgoKICAgICAgICAgIHBv c190eXBlIF9fZXJyID0gdGhpcy0+cmRidWYoKS0+cHVic2Vla3BvcyhfX3BvcywgaW9zX2Jhc2U6 OmluKTsKCgogICAgICAgICAgaWYgKF9fZXJyID09IHBvc190eXBlKG9mZl90eXBlKC0xKSkpCiAg ICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKCiAgICAgICAgfQog ICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw ZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJh c2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBzZWVrZyhvZmZfdHlwZSBfX29mZiwg aW9zX2Jhc2U6OnNlZWtkaXIgX19kaXIpCiAgICB7CiAgICAgIF9NX2djb3VudCA9IDA7CiAgICAg IGlmICghdGhpcy0+ZmFpbCgpKQogICAgICAgIHsKCgogICAgICAgICAgcG9zX3R5cGUgX19lcnIg PSB0aGlzLT5yZGJ1ZigpLT5wdWJzZWVrb2ZmKF9fb2ZmLCBfX2RpciwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6aW4pOwoKCiAg ICAgICAgICBpZiAoX19lcnIgPT0gcG9zX3R5cGUob2ZmX3R5cGUoLTEpKSkKICAgICAgICAgICAg dGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwoKICAgICAgICB9CiAgICAgIHJldHVy biAqdGhpczsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry YWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPj4o YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2luLCBfQ2hhclQmIF9fYykKICAgIHsK ICAgICAgdHlwZWRlZiBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gX19pc3RyZWFtX3R5 cGU7CiAgICAgIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjpzZW50cnkgX19jZXJiKF9faW4sIGZh bHNlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAg ICAgeyBfX2luLmdldChfX2MpOyB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkK ICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgX19pbi5zZXRzdGF0ZShpb3NfYmFzZTo6YmFk Yml0KTsKICAgICAgICAgICAgICBpZiAoKF9faW4uZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJh ZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAg fQogICAgICBlbHNlCiAgICAgICAgX19pbi5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CiAg ICAgIHJldHVybiBfX2luOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu YW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBvcGVy YXRvcj4+KGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pbiwgX0NoYXJUKiBfX3Mp CiAgICB7CiAgICAgIHR5cGVkZWYgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IF9faXN0 cmVhbV90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjpfX3N0cmVh bWJ1Zl90eXBlIF9fc3RyZWFtYnVmX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0 czo6aW50X3R5cGUgaW50X3R5cGU7CiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAg ICAgdHlwZWRlZiBjdHlwZTxfQ2hhclQ+IF9fY3R5cGVfdHlwZTsKICAgICAgc3RyZWFtc2l6ZSBf X2V4dHJhY3RlZCA9IDA7CgogICAgICB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6c2VudHJ5IF9f Y2VyYihfX2luLCBmYWxzZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAg dHJ5CiAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgc3RyZWFtc2l6ZSBfX251bSA9IF9faW4u d2lkdGgoKTsKICAgICAgICAgICAgICBpZiAoX19udW0gPT0gMCkKICAgICAgICAgICAgICAgIF9f bnVtID0gbnVtZXJpY19saW1pdHM8c3RyZWFtc2l6ZT46Om1heCgpOwoKICAgICAgICAgICAgICBj b25zdCBfX2N0eXBlX3R5cGUmIF9fY3R5cGUgPSB1c2VfZmFjZXQ8X19jdHlwZV90eXBlPihfX2lu LmdldGxvYygpKTsKICAgICAgICAgICAgICBjb25zdCBpbnRfdHlwZSBfX2VvZiA9IF9UcmFpdHM6 OmVvZigpOwogICAgICAgICAgICAgIF9fc3RyZWFtYnVmX3R5cGUqIF9fc2IgPSBfX2luLnJkYnVm KCk7CiAgICAgICAgICAgICAgaW50X3R5cGUgX19jID0gX19zYi0+c2dldGMoKTsKCiAgICAgICAg ICAgICAgd2hpbGUgKF9fZXh0cmFjdGVkIDwgX19udW0gLSAxCiAgICAgICAgICAgICAgICAgICAg ICYmICFfVHJhaXRzOjplcV9pbnRfdHlwZShfX2MsIF9fZW9mKQogICAgICAgICAgICAgICAgICAg ICAmJiAhX19jdHlwZS5pcyhjdHlwZV9iYXNlOjpzcGFjZSwgX19jKSkKICAgICAgICAgICAgICAg IHsKICAgICAgICAgICAgICAgICAgKl9fcysrID0gX19jOwogICAgICAgICAgICAgICAgICArK19f ZXh0cmFjdGVkOwogICAgICAgICAgICAgICAgICBfX2MgPSBfX3NiLT5zbmV4dGMoKTsKICAgICAg ICAgICAgICAgIH0KICAgICAgICAgICAgICBpZiAoX1RyYWl0czo6ZXFfaW50X3R5cGUoX19jLCBf X2VvZikpCiAgICAgICAgICAgICAgICBfX2luLnNldHN0YXRlKGlvc19iYXNlOjplb2ZiaXQpOwoK CgogICAgICAgICAgICAgICpfX3MgPSBjaGFyX3R5cGUoKTsKCiAgICAgICAgICAgICAgX19pbi53 aWR0aCgwKTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwp CiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIF9faW4uc2V0c3RhdGUoaW9zX2Jhc2U6OmJh ZGJpdCk7CiAgICAgICAgICAgICAgaWYgKChfX2luLmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpi YWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAg IH0KICAgICAgaWYgKCFfX2V4dHJhY3RlZCkKICAgICAgICBfX2luLnNldHN0YXRlKGlvc19iYXNl OjpmYWlsYml0KTsKICAgICAgcmV0dXJuIF9faW47CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCxfVHJh aXRzPiYKICAgIHdzKGJhc2ljX2lzdHJlYW08X0NoYXJULF9UcmFpdHM+JiBfX2luKQogICAgewog ICAgICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiBfX2lzdHJlYW1fdHlw ZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6X19zdHJlYW1idWZfdHlw ZSBfX3N0cmVhbWJ1Zl90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9faXN0cmVhbV90eXBl OjpfX2N0eXBlX3R5cGUgX19jdHlwZV90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9faXN0 cmVhbV90eXBlOjppbnRfdHlwZSBfX2ludF90eXBlOwoKICAgICAgY29uc3QgX19jdHlwZV90eXBl JiBfX2N0eXBlID0gdXNlX2ZhY2V0PF9fY3R5cGVfdHlwZT4oX19pbi5nZXRsb2MoKSk7CiAgICAg IGNvbnN0IF9faW50X3R5cGUgX19lb2YgPSBfVHJhaXRzOjplb2YoKTsKICAgICAgX19zdHJlYW1i dWZfdHlwZSogX19zYiA9IF9faW4ucmRidWYoKTsKICAgICAgX19pbnRfdHlwZSBfX2MgPSBfX3Ni LT5zZ2V0YygpOwoKICAgICAgd2hpbGUgKCFfVHJhaXRzOjplcV9pbnRfdHlwZShfX2MsIF9fZW9m KQogICAgICAgICAgICAgJiYgX19jdHlwZS5pcyhjdHlwZV9iYXNlOjpzcGFjZSwgX19jKSkKICAg ICAgICBfX2MgPSBfX3NiLT5zbmV4dGMoKTsKCiAgICAgICBpZiAoX1RyYWl0czo6ZXFfaW50X3R5 cGUoX19jLCBfX2VvZikpCiAgICAgICAgX19pbi5zZXRzdGF0ZShpb3NfYmFzZTo6ZW9mYml0KTsK CiAgICAgIHJldHVybiBfX2luOwogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0 eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFy VCwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRz PiYgX19pbiwKICAgICAgICAgICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0Fs bG9jPiYgX19zdHIpCiAgICB7CiAgICAgIHR5cGVkZWYgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9U cmFpdHM+IF9faXN0cmVhbV90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9faXN0cmVhbV90 eXBlOjppbnRfdHlwZSBfX2ludF90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9faXN0cmVh bV90eXBlOjpfX3N0cmVhbWJ1Zl90eXBlIF9fc3RyZWFtYnVmX3R5cGU7CiAgICAgIHR5cGVkZWYg dHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6Ol9fY3R5cGVfdHlwZSBfX2N0eXBlX3R5cGU7CiAgICAg IHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiBfX3N0cmluZ190 eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fc3RyaW5nX3R5cGU6OnNpemVfdHlwZSBfX3Np emVfdHlwZTsKICAgICAgX19zaXplX3R5cGUgX19leHRyYWN0ZWQgPSAwOwoKICAgICAgdHlwZW5h bWUgX19pc3RyZWFtX3R5cGU6OnNlbnRyeSBfX2NlcmIoX19pbiwgZmFsc2UpOwogICAgICBpZiAo X19jZXJiKQogICAgICAgIHsKICAgICAgICAgIF9fc3RyLmVyYXNlKCk7CiAgICAgICAgICBzdHJl YW1zaXplIF9fdyA9IF9faW4ud2lkdGgoKTsKICAgICAgICAgIF9fc2l6ZV90eXBlIF9fbjsKICAg ICAgICAgIF9fbiA9IF9fdyA+IDAgPyBzdGF0aWNfY2FzdDxfX3NpemVfdHlwZT4oX193KSA6IF9f c3RyLm1heF9zaXplKCk7CgogICAgICAgICAgY29uc3QgX19jdHlwZV90eXBlJiBfX2N0eXBlID0g dXNlX2ZhY2V0PF9fY3R5cGVfdHlwZT4oX19pbi5nZXRsb2MoKSk7CiAgICAgICAgICBjb25zdCBf X2ludF90eXBlIF9fZW9mID0gX1RyYWl0czo6ZW9mKCk7CiAgICAgICAgICBfX3N0cmVhbWJ1Zl90 eXBlKiBfX3NiID0gX19pbi5yZGJ1ZigpOwogICAgICAgICAgX19pbnRfdHlwZSBfX2MgPSBfX3Ni LT5zZ2V0YygpOwoKICAgICAgICAgIHdoaWxlIChfX2V4dHJhY3RlZCA8IF9fbgogICAgICAgICAg ICAgICAgICYmICFfVHJhaXRzOjplcV9pbnRfdHlwZShfX2MsIF9fZW9mKQogICAgICAgICAgICAg ICAgICYmICFfX2N0eXBlLmlzKGN0eXBlX2Jhc2U6OnNwYWNlLCBfX2MpKQogICAgICAgICAgICB7 CiAgICAgICAgICAgICAgX19zdHIgKz0gX1RyYWl0czo6dG9fY2hhcl90eXBlKF9fYyk7CiAgICAg ICAgICAgICAgKytfX2V4dHJhY3RlZDsKICAgICAgICAgICAgICBfX2MgPSBfX3NiLT5zbmV4dGMo KTsKICAgICAgICAgICAgfQogICAgICAgICAgaWYgKF9UcmFpdHM6OmVxX2ludF90eXBlKF9fYywg X19lb2YpKQogICAgICAgICAgICBfX2luLnNldHN0YXRlKGlvc19iYXNlOjplb2ZiaXQpOwogICAg ICAgICAgX19pbi53aWR0aCgwKTsKICAgICAgICB9CgoKICAgICAgaWYgKCFfX2V4dHJhY3RlZCkK ICAgICAgICBfX2luLnNldHN0YXRlIChpb3NfYmFzZTo6ZmFpbGJpdCk7CgogICAgICByZXR1cm4g X19pbjsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz LCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAg ICBnZXRsaW5lKGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pbiwKICAgICAgICAg ICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19zdHIsIF9DaGFyVCBf X2RlbGltKQogICAgewogICAgICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRz PiBfX2lzdHJlYW1fdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6 aW50X3R5cGUgX19pbnRfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lzdHJlYW1fdHlw ZTo6X19zdHJlYW1idWZfdHlwZSBfX3N0cmVhbWJ1Zl90eXBlOwogICAgICB0eXBlZGVmIHR5cGVu YW1lIF9faXN0cmVhbV90eXBlOjpfX2N0eXBlX3R5cGUgX19jdHlwZV90eXBlOwogICAgICB0eXBl ZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4gX19zdHJpbmdfdHlwZTsK ICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX3N0cmluZ190eXBlOjpzaXplX3R5cGUgX19zaXplX3R5 cGU7CgogICAgICBfX3NpemVfdHlwZSBfX2V4dHJhY3RlZCA9IDA7CiAgICAgIGJvb2wgX190ZXN0 ZGVsaW0gPSBmYWxzZTsKICAgICAgdHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6OnNlbnRyeSBfX2Nl cmIoX19pbiwgdHJ1ZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgX19z dHIuZXJhc2UoKTsKICAgICAgICAgIF9fc2l6ZV90eXBlIF9fbiA9IF9fc3RyLm1heF9zaXplKCk7 CgogICAgICAgICAgX19pbnRfdHlwZSBfX2lkZWxpbSA9IF9UcmFpdHM6OnRvX2ludF90eXBlKF9f ZGVsaW0pOwogICAgICAgICAgX19zdHJlYW1idWZfdHlwZSogX19zYiA9IF9faW4ucmRidWYoKTsK ICAgICAgICAgIF9faW50X3R5cGUgX19jID0gX19zYi0+c2J1bXBjKCk7CiAgICAgICAgICBjb25z dCBfX2ludF90eXBlIF9fZW9mID0gX1RyYWl0czo6ZW9mKCk7CiAgICAgICAgICBfX3Rlc3RkZWxp bSA9IF9UcmFpdHM6OmVxX2ludF90eXBlKF9fYywgX19pZGVsaW0pOwoKICAgICAgICAgIHdoaWxl IChfX2V4dHJhY3RlZCA8PSBfX24KICAgICAgICAgICAgICAgICAmJiAhX1RyYWl0czo6ZXFfaW50 X3R5cGUoX19jLCBfX2VvZikKICAgICAgICAgICAgICAgICAmJiAhX190ZXN0ZGVsaW0pCiAgICAg ICAgICAgIHsKICAgICAgICAgICAgICBfX3N0ciArPSBfVHJhaXRzOjp0b19jaGFyX3R5cGUoX19j KTsKICAgICAgICAgICAgICArK19fZXh0cmFjdGVkOwogICAgICAgICAgICAgIF9fYyA9IF9fc2It PnNidW1wYygpOwogICAgICAgICAgICAgIF9fdGVzdGRlbGltID0gX1RyYWl0czo6ZXFfaW50X3R5 cGUoX19jLCBfX2lkZWxpbSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGlmIChfVHJhaXRzOjpl cV9pbnRfdHlwZShfX2MsIF9fZW9mKSkKICAgICAgICAgICAgX19pbi5zZXRzdGF0ZShpb3NfYmFz ZTo6ZW9mYml0KTsKICAgICAgICB9CiAgICAgIGlmICghX19leHRyYWN0ZWQgJiYgIV9fdGVzdGRl bGltKQogICAgICAgIF9faW4uc2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwogICAgICByZXR1 cm4gX19pbjsKICAgIH0KCiAgdGVtcGxhdGU8Y2xhc3MgX0NoYXJULCBjbGFzcyBfVHJhaXRzLCBj bGFzcyBfQWxsb2M+CiAgICBpbmxpbmUgYmFzaWNfaXN0cmVhbTxfQ2hhclQsX1RyYWl0cz4mCiAg ICBnZXRsaW5lKGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pbiwKICAgICAgICAg ICAgYmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRzLF9BbGxvYz4mIF9fc3RyKQogICAgeyByZXR1 cm4gZ2V0bGluZShfX2luLCBfX3N0ciwgX19pbi53aWRlbignXG4nKSk7IH0KCgoKCiAgZXh0ZXJu IHRlbXBsYXRlIGNsYXNzIGJhc2ljX2lzdHJlYW08Y2hhcj47CiAgZXh0ZXJuIHRlbXBsYXRlIGlz dHJlYW0mIHdzKGlzdHJlYW0mKTsKICBleHRlcm4gdGVtcGxhdGUgaXN0cmVhbSYgb3BlcmF0b3I+ Pihpc3RyZWFtJiwgY2hhciYpOwogIGV4dGVybiB0ZW1wbGF0ZSBpc3RyZWFtJiBvcGVyYXRvcj4+ KGlzdHJlYW0mLCBjaGFyKik7CiAgZXh0ZXJuIHRlbXBsYXRlIGlzdHJlYW0mIG9wZXJhdG9yPj4o aXN0cmVhbSYsIHVuc2lnbmVkIGNoYXImKTsKICBleHRlcm4gdGVtcGxhdGUgaXN0cmVhbSYgb3Bl cmF0b3I+Pihpc3RyZWFtJiwgc2lnbmVkIGNoYXImKTsKICBleHRlcm4gdGVtcGxhdGUgaXN0cmVh bSYgb3BlcmF0b3I+Pihpc3RyZWFtJiwgdW5zaWduZWQgY2hhciopOwogIGV4dGVybiB0ZW1wbGF0 ZSBpc3RyZWFtJiBvcGVyYXRvcj4+KGlzdHJlYW0mLCBzaWduZWQgY2hhciopOwoKCiAgZXh0ZXJu IHRlbXBsYXRlIGNsYXNzIGJhc2ljX2lzdHJlYW08d2NoYXJfdD47CiAgZXh0ZXJuIHRlbXBsYXRl IHdpc3RyZWFtJiB3cyh3aXN0cmVhbSYpOwogIGV4dGVybiB0ZW1wbGF0ZSB3aXN0cmVhbSYgb3Bl cmF0b3I+Pih3aXN0cmVhbSYsIHdjaGFyX3QmKTsKICBleHRlcm4gdGVtcGxhdGUgd2lzdHJlYW0m IG9wZXJhdG9yPj4od2lzdHJlYW0mLCB3Y2hhcl90Kik7Cgp9CiMgMjk4ICIvdXNyL2luY2x1ZGUv YysrLzMuMi4xL2lzdHJlYW0iIDIgMwojIDQ3ICIvdXNyL2luY2x1ZGUvYysrLzMuMi4xL2lvc3Ry ZWFtIiAyIDMKCm5hbWVzcGFjZSBzdGQKewogIGV4dGVybiBpc3RyZWFtIGNpbjsKICBleHRlcm4g b3N0cmVhbSBjb3V0OwogIGV4dGVybiBvc3RyZWFtIGNlcnI7CiAgZXh0ZXJuIG9zdHJlYW0gY2xv ZzsKCgogIGV4dGVybiB3aXN0cmVhbSB3Y2luOwogIGV4dGVybiB3b3N0cmVhbSB3Y291dDsKICBl eHRlcm4gd29zdHJlYW0gd2NlcnI7CiAgZXh0ZXJuIHdvc3RyZWFtIHdjbG9nOwoKCgogIHN0YXRp YyBpb3NfYmFzZTo6SW5pdCBfX2lvaW5pdDsKfQojIDE0ICJ5dXYycmdiLmNjIiAyCnVzaW5nIHN0 ZDo6Y291dDsKdXNpbmcgc3RkOjplbmRsOwpleHRlcm4gIkMiIHsKCiMgMSAiL3Vzci9pbmNsdWRl L3N0ZGludC5oIiAxIDMKIyAyOCAiL3Vzci9pbmNsdWRlL3N0ZGludC5oIiAzCiMgMSAiL3Vzci9s aWIvZ2NjLWxpYi9pMzg2LXBjLWxpbnV4LWdudS8zLjIuMS9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMK IyAyOSAiL3Vzci9pbmNsdWRlL3N0ZGludC5oIiAyIDMKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMv d29yZHNpemUuaCIgMSAzCiMgMzEgIi91c3IvaW5jbHVkZS9zdGRpbnQuaCIgMiAzCiMgNTEgIi91 c3IvaW5jbHVkZS9zdGRpbnQuaCIgMwp0eXBlZGVmIHVuc2lnbmVkIGNoYXIgdWludDhfdDsKdHlw ZWRlZiB1bnNpZ25lZCBzaG9ydCBpbnQgdWludDE2X3Q7Cgp0eXBlZGVmIHVuc2lnbmVkIGludCB1 aW50MzJfdDsKCgoKCgpfX2V4dGVuc2lvbl9fCnR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIGlu dCB1aW50NjRfdDsKCgoKCgoKdHlwZWRlZiBzaWduZWQgY2hhciBpbnRfbGVhc3Q4X3Q7CnR5cGVk ZWYgc2hvcnQgaW50IGludF9sZWFzdDE2X3Q7CnR5cGVkZWYgaW50IGludF9sZWFzdDMyX3Q7CgoK Cl9fZXh0ZW5zaW9uX18KdHlwZWRlZiBsb25nIGxvbmcgaW50IGludF9sZWFzdDY0X3Q7CgoKCnR5 cGVkZWYgdW5zaWduZWQgY2hhciB1aW50X2xlYXN0OF90Owp0eXBlZGVmIHVuc2lnbmVkIHNob3J0 IGludCB1aW50X2xlYXN0MTZfdDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdWludF9sZWFzdDMyX3Q7 CgoKCl9fZXh0ZW5zaW9uX18KdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IHVpbnRfbGVh c3Q2NF90OwoKCgoKCgp0eXBlZGVmIHNpZ25lZCBjaGFyIGludF9mYXN0OF90OwoKCgoKCnR5cGVk ZWYgaW50IGludF9mYXN0MTZfdDsKdHlwZWRlZiBpbnQgaW50X2Zhc3QzMl90OwpfX2V4dGVuc2lv bl9fCnR5cGVkZWYgbG9uZyBsb25nIGludCBpbnRfZmFzdDY0X3Q7CgoKCnR5cGVkZWYgdW5zaWdu ZWQgY2hhciB1aW50X2Zhc3Q4X3Q7CgoKCgoKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdWludF9mYXN0 MTZfdDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdWludF9mYXN0MzJfdDsKX19leHRlbnNpb25fXwp0 eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgdWludF9mYXN0NjRfdDsKIyAxMjggIi91c3Iv aW5jbHVkZS9zdGRpbnQuaCIgMwp0eXBlZGVmIGludCBpbnRwdHJfdDsKCgp0eXBlZGVmIHVuc2ln bmVkIGludCB1aW50cHRyX3Q7CiMgMTQwICIvdXNyL2luY2x1ZGUvc3RkaW50LmgiIDMKX19leHRl bnNpb25fXwp0eXBlZGVmIGxvbmcgbG9uZyBpbnQgaW50bWF4X3Q7Cl9fZXh0ZW5zaW9uX18KdHlw ZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IHVpbnRtYXhfdDsKIyAxOSAieXV2MnJnYi5jYyIg Mgp9CgpzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludApjcHVpZF9mbGFncyAoKQp7CiAgdW5zaWdu ZWQgaW50IHJlczsKICBhc20KICAgICgKICAgICAibW92ICQxLCAlJWVheFxuXHQiCiAgICAgImNw dWlkXG5cdCIKICAgICAibW92bCAlJWVkeCwgJVtyZXNdXG5cdCIKICAgICA6IFtyZXNdICI9ZyIg KHJlcykKICAgICA6CiAgICAgOiAiZWF4IiwgImVkeCIKICAgICApOwogIHJldHVybiByZXM7Cn0K CnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50CmNwdWlkX2V4dGVuZGVkX2ZsYWdzICgpCnsKICB1 bnNpZ25lZCBpbnQgcmVzOwogIGFzbQogICAgKAogICAgICJtb3YgJDB4ODAwMDAwMDAsICUlZWF4 XG5cdCIKICAgICAiY3B1aWRcblx0IgogICAgICJtb3ZsICUlZWR4LCAlW3Jlc11cblx0IgogICAg IDogW3Jlc10gIj1nIiAocmVzKQogICAgIDoKICAgICA6ICJlYXgiLCAiZWJ4IiwgImVjeCIsICJl ZHgiCiAgICAgKTsKICBpZiAocmVzID09IDApIHJldHVybiAwOwogIGFzbQogICAgKAogICAgICJt b3YgJDB4ODAwMDAwMDEsICUlZWF4XG5cdCIKICAgICAiY3B1aWRcblx0IgogICAgICJtb3ZsICUl ZWR4LCAlW3Jlc11cblx0IgogICAgIDogW3Jlc10gIj1nIiAocmVzKQogICAgIDoKICAgICA6ICJl YXgiLCAiZWJ4IiwgImVjeCIsICJlZHgiCiAgICAgKTsKICByZXR1cm4gcmVzOwp9CiMgNzEgInl1 djJyZ2IuY2MiCnZvaWQKeXV2MnJnYiAodW5zaWduZWQgY2hhciAqIGRzdDEsIHVuc2lnbmVkIGNo YXIgKiBkc3QyLAogICAgICAgICB1bnNpZ25lZCBjaGFyICogeTEsIHVuc2lnbmVkIGNoYXIgKiB5 MiwKICAgICAgICAgdW5zaWduZWQgY2hhciAqIHUsIHVuc2lnbmVkIGNoYXIgKiB2LAogICAgICAg ICBpbnQgY29uc3Qgd2lkdGgpCnsKCgp9CgoKCgpzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGNoYXIK Y3NhdCAoZmxvYXQgY29uc3QgJiBmKQp7CiAgaWYgKGYgPiAyNTUpIHJldHVybiAyNTU7CiAgaWYg KGYgPCAwKSByZXR1cm4gMDsKICByZXR1cm4gKHVuc2lnbmVkIGNoYXIpIGZsb29yIChmKy41KTsK fQoKCgoKc3RhdGljIGlubGluZSB1bnNpZ25lZCBjaGFyCmNzYXQgKGludCBjb25zdCBpKQp7CiAg aWYgKGkgPiAyNTUpIHJldHVybiAyNTU7CiAgaWYgKGkgPCAwKSByZXR1cm4gMDsKICByZXR1cm4g KHVuc2lnbmVkIGNoYXIpIGk7Cn0KIyAxMTEgInl1djJyZ2IuY2MiCnN0YXRpYyBmbG9hdCBjb25z dCBmX3J1ID0gMDsKc3RhdGljIGZsb2F0IGNvbnN0IGZfcnYgPSAxLjQwMjI7CnN0YXRpYyBmbG9h dCBjb25zdCBmX2d1ID0gLS4zNDU1OwpzdGF0aWMgZmxvYXQgY29uc3QgZl9ndiA9IC0uNzE2OTsK c3RhdGljIGZsb2F0IGNvbnN0IGZfYnUgPSAxLjc3OTA7CnN0YXRpYyBmbG9hdCBjb25zdCBmX2J2 ID0gMDsKc3RhdGljIHNob3J0IG1teF91XzE0IFs0XSBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSkK ICA9IHsgMCwgKHNob3J0KSAoZl9ndSooMTw8MTQpKSwgKHNob3J0KSAoZl9idSooMTw8MTQpKSwg MH07CnN0YXRpYyBzaG9ydCBtbXhfdl8xNCBbNF0gX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpCiAg PSB7IChzaG9ydCkgKGZfcnYqKDE8PDE0KSksIChzaG9ydCkgKGZfZ3YqKDE8PDE0KSksIDAsIDAg fTsKCnN0YXRpYyBzaG9ydCBjd18xMjggWzRdID0geyAxMjgsIDEyOCwgMTI4LCAxMjggfTsKc3Rh dGljIHNob3J0IGN3XzE2IFs0XSA9IHsgMTYsIDE2LCAxNiwgMTYgfTsKCnN0YXRpYyB1bnNpZ25l ZCBjaGFyIHRlc3QwWzhdOwpzdGF0aWMgdW5zaWduZWQgY2hhciB0ZXN0MVs4XTsKc3RhdGljIHVu c2lnbmVkIGNoYXIgdGVzdDJbOF07CgpzdGF0aWMgaW5saW5lIHZvaWQKeXV2NDIwX3RvX3JnYl9m bG9hdCAodW5zaWduZWQgY2hhciAqIGRzdDEsIHVuc2lnbmVkIGNoYXIqIGRzdDIsCiAgICAgICAg ICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKiB5MSwgdW5zaWduZWQgY2hhciAqIHkyLAogICAg ICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICogdSwgdW5zaWduZWQgY2hhciAqIHYpCnsK ICBmb3IgKGludCBpPTA7IGkgPCA4OyBpKyspCiAgICB7CiAgICAgIGRzdDFbaSo0KzBdID0gY3Nh dCAoeTFbaV0gKyB2W2kvMl0gKiBmX3J2KTsKICAgICAgZHN0MVtpKjQrMV0gPSBjc2F0ICh5MVtp XSArIHVbaS8yXSAqIGZfZ3UgKyB2W2kvMl0gKiBmX2d2KTsKICAgICAgZHN0MVtpKjQrMl0gPSBj c2F0ICh5MVtpXSArIHVbaS8yXSAqIGZfYnUgKyB2W2kvMl0gKiBmX2J2KTsKICAgICAgZHN0MVtp KjQrM10gPSBjc2F0ICgwKTsKICAgICAgZHN0MltpKjQrMF0gPSBjc2F0ICh5MltpXSArIHZbaS8y XSAqIGZfcnYpOwogICAgICBkc3QyW2kqNCsxXSA9IGNzYXQgKHkyW2ldICsgdVtpLzJdICogZl9n dSArIHZbaS8yXSAqIGZfZ3YpOwogICAgICBkc3QyW2kqNCsyXSA9IGNzYXQgKHkyW2ldICsgdVtp LzJdICogZl9idSArIHZbaS8yXSAqIGZfYnYpOwogICAgICBkc3QyW2kqNCszXSA9IGNzYXQgKDAp OwogICAgfQp9CgpzdGF0aWMgaW5saW5lIHZvaWQKeXV2NDIwX3RvX3JnYl9pbnQgKHVuc2lnbmVk IGNoYXIgKiBkc3QxLCB1bnNpZ25lZCBjaGFyKiBkc3QyLAogICAgICAgICAgICAgICAgICAgdW5z aWduZWQgY2hhciAqIHkxLCB1bnNpZ25lZCBjaGFyICogeTIsCiAgICAgICAgICAgICAgICAgICB1 bnNpZ25lZCBjaGFyICogdSwgdW5zaWduZWQgY2hhciAqIHYpCnsKICBmb3IgKGludCBpPTA7IGkg PCA4OyBpKyspCiAgICB7CiAgICAgIGludCB4ID0gMSA8PCAxNDsKICAgICAgaW50IGogPSBpLzI7 CiAgICAgIGRzdDFbaSo0KzBdID0gY3NhdCAoeTFbaV0gKyAobW14X3ZfMTRbMF0qdltqXSArIG1t eF91XzE0WzBdKnVbal0pIC8geCk7CiAgICAgIGRzdDFbaSo0KzFdID0gY3NhdCAoeTFbaV0gKyAo bW14X3ZfMTRbMV0qdltqXSArIG1teF91XzE0WzFdKnVbal0pIC8geCk7CiAgICAgIGRzdDFbaSo0 KzJdID0gY3NhdCAoeTFbaV0gKyAobW14X3ZfMTRbMl0qdltqXSArIG1teF91XzE0WzJdKnVbal0p IC8geCk7CiAgICAgIGRzdDFbaSo0KzNdID0gMDsKICAgICAgZHN0MltpKjQrMF0gPSBjc2F0ICh5 MltpXSArIChtbXhfdl8xNFswXSp2W2pdICsgbW14X3VfMTRbMF0qdVtqXSkgLyB4KTsKICAgICAg ZHN0MltpKjQrMV0gPSBjc2F0ICh5MltpXSArIChtbXhfdl8xNFsxXSp2W2pdICsgbW14X3VfMTRb MV0qdVtqXSkgLyB4KTsKICAgICAgZHN0MltpKjQrMl0gPSBjc2F0ICh5MltpXSArIChtbXhfdl8x NFsyXSp2W2pdICsgbW14X3VfMTRbMl0qdVtqXSkgLyB4KTsKICAgICAgZHN0MltpKjQrM10gPSAw OwogICAgfQp9CgpzdGF0aWMgaW5saW5lIHZvaWQKeXV2NDIwX3RvX3JnYl9tbXggKHVuc2lnbmVk IGNoYXIgKiBkc3QxLCB1bnNpZ25lZCBjaGFyKiBkc3QyLAogICAgICAgICAgICAgICAgICAgdW5z aWduZWQgY2hhciAqIHkxLCB1bnNpZ25lZCBjaGFyICogeTIsCiAgICAgICAgICAgICAgICAgICB1 bnNpZ25lZCBjaGFyICogdSwgdW5zaWduZWQgY2hhciAqIHYpCnsKCgogIHJlZ2lzdGVyIHVpbnQ2 NF90IFUxVTJVM1U0IGFzbSAoIm1tMCIpID0gMDsKICBhc20KICAgICgKICAgICAicHVucGFja2xi dyAlW3VdLCAlJW1tMFxuXHQiCiAgICAgOgogICAgIDogW3VdICJtIiAoKnUpCiAgICAgOiAibW0w IgogICAgICk7CiAgY291dCA8PCAiVTFVMlUzVTQ6ICIgPDwgc3RkOjpoZXggPDwgVTFVMlUzVTQg PDwgZW5kbDsKCiAgYXNtCiAgICAoCiAgICAgInB4b3IgJSVtbTIsICUlbW0yXG5cdCIKICAgICAi cHVucGNrbGJ3ICVbdV0sICUlbW0yXG5cdCIKICAgICAicHNybHEgJDgsICUlbW0yXG5cdCIKICAg ICAibW92cSAlJW1tMiwgJSVtbTdcblx0IgoKICAgICAicHhvciAlJW1tNiwgJSVtbTZcblx0Igog ICAgICJwdW5wY2tsYncgJVt2XSwgJSVtbTZcblx0IgoKICAgICAicHhvciAlJW1tMCwgJSVtbTBc blx0IgogICAgICJwc3JscSAkOCwgJSVtbTZcblx0IgogICAgICJwdW5wY2tsd2QgJSVtbTYsICUl bW0yXG5cdCIKICAgICAicHhvciAlJW1tMSwgJSVtbTFcblx0IgogICAgICJwdW5wY2tsd2QgJSVt bTYsICUlbW0wXG5cdCIKICAgICAicHVucGNraHdkICUlbW02LCAlJW1tMVxuXHQiCiAgICAgInBv ciAlJW1tMiwgJSVtbTBcblx0IgogICAgICJwdW5wY2tod2QgJSVtbTYsICUlbW03XG5cdCIKICAg ICAicG9yICUlbW03LCAlJW1tMVxuXHQiCgogICAgIDoKICAgICA6IFt1XSAibSIgKCp1KSwgW3Zd ICJtIiAoKnYpLCBbeTFdICJtIiAoKnkxKQogICAgIDogIm1tMCIsICJtbTEiLCAibW0yIiwgIm1t NiIsICJtbTciCiAgICAgKTsKCgoKCgoKICBhc20KICAgICgKICAgICAibW92cSAlJW1tMCwgJSVt bTJcblx0IgogICAgICJwdW5wY2tsd2QgJSVtbTIsICUlbW0yXG5cdCIKICAgICAibW92cSAlJW1t MiwgJSVtbTVcblx0IgogICAgICJwdW5wY2tsZHEgJSVtbTIsICUlbW0yXG5cdCIKICAgICAicG11 bGx3IChjd18xMjgpLCAlJW1tMlxuXHQiCiAgICAgInB1bnBja2hkcSAlJW1tNSwgJSVtbTVcblx0 IgogICAgICJwbXVsaHcgKG1teF91XzE0KSwgJSVtbTJcblx0IgoKICAgICAicG11bGx3IChjd18x MjgpLCAlJW1tNVxuXHQiCiAgICAgInBtdWxodyAobW14X3ZfMTQpLCAlJW1tNVxuXHQiCiAgICAg InBhZGRzdyAlJW1tNSwgJSVtbTJcblx0IgogICAgICJwYWRkc3cgKGN3XzE2KSwgJSVtbTJcblx0 IgogICAgICJwc3JhdyAkNSwgJSVtbTJcblx0IgogICAgIDoKICAgICA6CiAgICAgOiAibW0wIiwg Im1tMiIsICJtbTQiLCAibW01IgogICAgICk7CgoKCgoKCgogIGFzbQogICAgKAogICAgICJwdW5w Y2tod2QgJSVtbTAsICUlbW0wXG5cdCIKICAgICAibW92cSAlJW1tMCwgJSVtbTNcblx0IgogICAg ICJwdW5wY2tsZHEgJSVtbTAsICUlbW0wXG5cdCIKICAgICAicG11bGx3IChjd18xMjgpLCAlJW1t MFxuXHQiCiAgICAgInBtdWxodyAobW14X3VfMTQpLCAlJW1tMFxuXHQiCiAgICAgInB1bnBja2hk cSAlJW1tMywgJSVtbTNcblx0IgogICAgICJwbXVsbHcgKGN3XzEyOCksICUlbW0zXG5cdCIKICAg ICAicG11bGh3IChtbXhfdl8xNCksICUlbW0zXG5cdCIKICAgICAicGFkZHN3ICUlbW0zLCAlJW1t MFxuXHQiCiAgICAgInBhZGRzdyAoY3dfMTYpLCAlJW1tMFxuXHQiCiAgICAgInBzcmF3ICQ1LCAl JW1tMFxuXHQiCiAgICAgOgogICAgIDoKICAgICA6ICJtbTAiLCAibW0zIgogICAgICk7CgoKCgoK CiAgYXNtCiAgICAoCiAgICAgInB4b3IgJSVtbTMsICUlbW0zXG5cdCIKICAgICAicHVucGNrbGJ3 ICVbeTFdLCAlJW1tM1xuXHQiCiAgICAgInBzcmxxICQ4LCAlJW1tM1xuXHQiCiAgICAgIm1vdnEg JSVtbTMsICUlbW03XG5cdCIKICAgICAicHVucGNrbHdkICUlbW03LCAlJW1tN1xuXHQiCiAgICAg Im1vdnEgJSVtbTcsICUlbW02XG5cdCIKICAgICAicHVucGNrbGRxICUlbW02LCAlJW1tNlxuXHQi CiAgICAgInBzbGxxICQxNiwgJSVtbTZcblx0IgogICAgICJwc3JscSAkMTYsICUlbW02XG5cdCIK ICAgICAicGFkZHN3ICUlbW0yLCAlJW1tNlxuXHQiCiAgICAgInB1bnBja2h3ZCAlJW1tNywgJSVt bTdcblx0IgogICAgICJwc2xscSAkMTYsICUlbW03XG5cdCIKICAgICAicHNybHEgJDE2LCAlJW1t N1xuXHQiCiAgICAgInBhZGRzdyAlJW1tMiwgJSVtbTdcblx0IgogICAgICJwYWNrdXN3YiAlJW1t NywgJSVtbTZcblx0IgogICAgICJtb3ZxICUlbW02LCAlW2RzdDFdXG5cdCIKICAgICA6CiAgICAg OiBbZHN0MV0gIm0iICgqZHN0MSksIFt5MV0gIm0iICgqeTEpCiAgICAgOiAibW0zIiwgIm1tNiIs ICJtbTciCiAgICAgKTsKCgoKCgoKCiAgYXNtCiAgICAoCiAgICAgInB1bnBja2h3ZCAlJW1tMywg JSVtbTNcblx0IgogICAgICJtb3ZxICUlbW0zLCAlJW1tNVxuXHQiCiAgICAgInB1bnBja2xkcSAl JW1tNSwgJSVtbTVcblx0IgogICAgICJwc2xscSAkMTYsICUlbW01XG5cdCIKICAgICAicHNybHEg JDE2LCAlJW1tNVxuXHQiCiAgICAgInBhZGRzdyAlJW1tMCwgJSVtbTVcblx0IgogICAgICJwdW5w Y2toZHEgJSVtbTMsICUlbW0zXG5cdCIKICAgICAicHNsbHEgJDE2LCAlJW1tM1xuXHQiCiAgICAg InBzcmxxICQxNiwgJSVtbTNcblx0IgogICAgICJwYWRkc3cgJSVtbTAsICUlbW0zXG5cdCIKICAg ICAicGFja3Vzd2IgJSVtbTMsICUlbW01XG5cdCIKICAgICAibW92cSAlJW1tNSwgOCVbZHN0MV1c blx0IgogICAgIDoKICAgICA6IFtkc3QxXSAibSIgKCpkc3QxKQogICAgIDogIm1tMCIsICJtbTMi LCAibW01IgoKICAgICApOwoKCgoKCgogIGFzbQogICAgKAogICAgICJweG9yICUlbW03LCAlJW1t N1xuXHQiCiAgICAgInB1bnBja2xidyAlW3kyXSwgJSVtbTdcblx0IgogICAgICJwc3JscSAkOCwg JSVtbTdcblx0IgogICAgICJtb3ZxICUlbW03LCAlJW1tNFxuXHQiCiAgICAgInB1bnBja2x3ZCAl JW1tNCwgJSVtbTRcblx0IgogICAgICJtb3ZxICUlbW00LCAlJW1tNlxuXHQiCiAgICAgInB1bnBj a2xkcSAlJW1tNiwgJSVtbTZcblx0IgogICAgICJwc2xscSAkMTYsICUlbW02XG5cdCIKICAgICAi cHNybHEgJDE2LCAlJW1tNlxuXHQiCiAgICAgInBhZGRzdyAlJW1tMiwgJSVtbTZcblx0IgogICAg ICJwdW5wY2tod2QgJSVtbTQsICUlbW00XG5cdCIKICAgICAicHNsbHEgJDE2LCAlJW1tNFxuXHQi CiAgICAgInBzcmxxICQxNiwgJSVtbTRcblx0IgogICAgICJwYWRkc3cgJSVtbTIsICUlbW00XG5c dCIKICAgICAicGFja3Vzd2IgJSVtbTQsICUlbW02XG5cdCIKICAgICAibW92cSAlJW1tNiwgJVtk c3QyXVxuXHQiCiAgICAgOgogICAgIDogW2RzdDJdICJtIiAoKmRzdDIpLCBbeTJdICJtIiAoKnky KQogICAgIDogIm1tMiIsICJtbTQiLCAibW02IiwgIm1tNyIKICAgICApOwoKCgoKCgoKICBhc20K ICAgICgKICAgICAicHVucGNraHdkICUlbW03LCAlJW1tN1xuXHQiCiAgICAgIm1vdnEgJSVtbTcs ICh0ZXN0MClcblx0IgogICAgICJtb3ZxICUlbW03LCAlJW1tNVxuXHQiCiAgICAgInB1bnBja2xk cSAlJW1tNSwgJSVtbTVcblx0IgogICAgICJtb3ZxICUlbW01LCAodGVzdDEpXG5cdCIKICAgICAi cHNsbHEgJDE2LCAlJW1tNVxuXHQiCiAgICAgInBzcmxxICQxNiwgJSVtbTVcblx0IgogICAgICJt b3ZxICUlbW01LCAodGVzdDIpXG5cdCIKICAgICAicGFkZHN3ICUlbW0wLCAlJW1tNVxuXHQiCiAg ICAgInB1bnBja2hkcSAlJW1tNywgJSVtbTdcblx0IgogICAgICJwc2xscSAkMTYsICUlbW03XG5c dCIKICAgICAicHNybHEgJDE2LCAlJW1tN1xuXHQiCiAgICAgInBhZGRzdyAlJW1tMCwgJSVtbTdc blx0IgogICAgICJwYWNrdXN3YiAlJW1tNywgJSVtbTVcblx0IgogICAgICJtb3ZxICUlbW01LCA4 JVtkc3QyXVxuXHQiCiAgICAgOgogICAgIDogW2RzdDJdICJtIiAoKmRzdDIpCiAgICAgOiAibW0w IiwgIm1tNSIsICJtbTciCgogICAgICk7CgoKCgoKICBhc20KICAgICgKICAgICAibW92cSAlJW1t MSwgJSVtbTJcblx0IgogICAgICJwdW5wY2tsd2QgJSVtbTIsICUlbW0yXG5cdCIKICAgICAibW92 cSAlJW1tMiwgJSVtbTNcblx0IgogICAgICJwdW5wY2tsZHEgJSVtbTIsICUlbW0yXG5cdCIKICAg ICAicG11bGx3IChjd18xMjgpLCAlJW1tMlxuXHQiCiAgICAgInBtdWxodyAobW14X3VfMTQpLCAl JW1tMlxuXHQiCiAgICAgInB1bnBja2hkcSAlJW1tMywgJSVtbTNcblx0IgogICAgICJwbXVsbHcg KGN3XzEyOCksICUlbW0zXG5cdCIKICAgICAicG11bGh3IChtbXhfdl8xNCksICUlbW0zXG5cdCIK ICAgICAicGFkZHN3ICUlbW0zLCAlJW1tMlxuXHQiCiAgICAgInBhZGRzdyAoY3dfMTYpLCAlJW1t MlxuXHQiCiAgICAgInBzcmF3ICQ1LCAlJW1tMlxuXHQiCiAgICAgOgogICAgIDoKICAgICA6ICJt bTEiLCAibW0yIiwgIm1tMyIKICAgICApOwoKCgoKCiAgYXNtCiAgICAoCiAgICAgInB1bnBja2h3 ZCAlJW1tMSwgJSVtbTFcblx0IgogICAgICJtb3ZxICUlbW0xLCAlJW1tNFxuXHQiCiAgICAgInB1 bnBja2xkcSAlJW1tMSwgJSVtbTFcblx0IgogICAgICJwbXVsbHcgKGN3XzEyOCksICUlbW0xXG5c dCIKICAgICAicG11bGh3IChtbXhfdV8xNCksICUlbW0xXG5cdCIKICAgICAicHVucGNraGRxICUl bW00LCAlJW1tNFxuXHQiCiAgICAgInBtdWxsdyAoY3dfMTI4KSwgJSVtbTRcblx0IgogICAgICJw bXVsaHcgKG1teF92XzE0KSwgJSVtbTRcblx0IgogICAgICJwYWRkc3cgJSVtbTQsICUlbW0xXG5c dCIKICAgICAicGFkZHN3IChjd18xNiksICUlbW0xXG5cdCIKICAgICAicHNyYXcgJDUsICUlbW0x XG5cdCIKICAgICA6CiAgICAgOgogICAgIDogIm1tMSIsICJtbTQiCiAgICAgKTsKCgoKCgogIGFz bQogICAgKAogICAgICJweG9yICUlbW0wLCAlJW1tMFxuXHQiCiAgICAgInB1bnBja2xidyA0JVt5 MV0sICUlbW0wXG5cdCIKICAgICAicHNybHEgJDgsICUlbW0wXG5cdCIKICAgICAibW92cSAlJW1t MCwgJSVtbTZcblx0IgogICAgICJwdW5wY2tsd2QgJSVtbTYsICUlbW02XG5cdCIKICAgICAibW92 cSAlJW1tNiwgJSVtbTVcblx0IgogICAgICJwdW5wY2tsZHEgJSVtbTUsICUlbW01XG5cdCIKICAg ICAicHNsbHEgJDE2LCAlJW1tNVxuXHQiCiAgICAgInBzcmxxICQxNiwgJSVtbTVcblx0IgogICAg ICJwYWRkc3cgJSVtbTIsICUlbW01XG5cdCIKICAgICAicHVucGNraHdkICUlbW02LCAlJW1tNlxu XHQiCiAgICAgInBzbGxxICQxNiwgJSVtbTZcblx0IgogICAgICJwc3JscSAkMTYsICUlbW02XG5c dCIKICAgICAicGFkZHN3ICUlbW0yLCAlJW1tNlxuXHQiCiAgICAgInBhY2t1c3diICUlbW02LCAl JW1tNVxuXHQiCiAgICAgIm1vdnEgJSVtbTUsIDE2JVtkc3QxXVxuXHQiCiAgICAgOgogICAgIDog W2RzdDFdICJtIiAoKmRzdDEpLCBbeTFdICJtIiAoKnkxKQogICAgIDogIm1tMiIsICJtbTMiLCAi bW01IiwgIm1tNiIKICAgICApOwoKCgoKCgogIGFzbQogICAgKAogICAgICJwdW5wY2tod2QgJSVt bTAsICUlbW0wXG5cdCIKICAgICAibW92cSAlJW1tMCwgJSVtbTdcblx0IgogICAgICJwdW5wY2ts ZHEgJSVtbTcsICUlbW03XG5cdCIKICAgICAicHNsbHEgJDE2LCAlJW1tN1xuXHQiCiAgICAgInBz cmxxICQxNiwgJSVtbTdcblx0IgogICAgICJwYWRkc3cgJSVtbTEsICUlbW03XG5cdCIKICAgICAi cHVucGNraGRxICUlbW0wLCAlJW1tMFxuXHQiCiAgICAgInBzbGxxICQxNiwgJSVtbTBcblx0Igog ICAgICJwc3JscSAkMTYsICUlbW0wXG5cdCIKICAgICAicGFkZHN3ICUlbW0xLCAlJW1tMFxuXHQi CiAgICAgInBhY2t1c3diICUlbW0wLCAlJW1tN1xuXHQiCiAgICAgIm1vdnEgJSVtbTcsIDI0JVtk c3QxXVxuXHQiCiAgICAgOgogICAgIDogW2RzdDFdICJtIiAoKmRzdDEpCiAgICAgOiAibW0wIiwg Im1tMSIsICJtbTciCgogICAgICk7CgoKCgoKICBhc20KICAgICgKICAgICAicHhvciAlJW1tNCwg JSVtbTRcblx0IgogICAgICJwdW5wY2tsYncgNCVbeTJdLCAlJW1tNFxuXHQiCiAgICAgInBzcmxx ICQ4LCAlJW1tNFxuXHQiCiAgICAgIm1vdnEgJSVtbTQsICUlbW0zXG5cdCIKICAgICAicHVucGNr bHdkICUlbW0zLCAlJW1tM1xuXHQiCiAgICAgIm1vdnEgJSVtbTMsICUlbW01XG5cdCIKICAgICAi cHVucGNrbGRxICUlbW01LCAlJW1tNVxuXHQiCiAgICAgInBzbGxxICQxNiwgJSVtbTVcblx0Igog ICAgICJwc3JscSAkMTYsICUlbW01XG5cdCIKICAgICAicGFkZHN3ICUlbW0yLCAlJW1tNVxuXHQi CiAgICAgInB1bnBja2h3ZCAlJW1tMywgJSVtbTNcblx0IgogICAgICJwc2xscSAkMTYsICUlbW0z XG5cdCIKICAgICAicHNybHEgJDE2LCAlJW1tM1xuXHQiCiAgICAgInBhZGRzdyAlJW1tMiwgJSVt bTNcblx0IgogICAgICJwYWNrdXN3YiAlJW1tMywgJSVtbTVcblx0IgogICAgICJub3Bcblx0Igog ICAgICJub3Bcblx0IgogICAgICJtb3ZxICUlbW01LCAxNiVbZHN0Ml1cblx0IgogICAgIDoKICAg ICA6IFtkc3QyXSAibSIgKCpkc3QyKSwgW3kyXSAibSIgKCp5MikKICAgICA6ICJtbTIiLCAibW0z IiwgIm1tNCIsICJtbTUiCiAgICAgKTsKCgoKCgoKICBhc20KICAgICgKICAgICAicHVucGNraHdk ICUlbW00LCAlJW1tNFxuXHQiCiAgICAgIm1vdnEgJSVtbTQsICUlbW02XG5cdCIKICAgICAicHVu cGNrbGRxICUlbW02LCAlJW1tNlxuXHQiCiAgICAgInBzbGxxICQxNiwgJSVtbTZcblx0IgogICAg ICJwc3JscSAkMTYsICUlbW02XG5cdCIKICAgICAicGFkZHN3ICUlbW0xLCAlJW1tNlxuXHQiCiAg ICAgInB1bnBja2hkcSAlJW1tNCwgJSVtbTRcblx0IgogICAgICJwc2xscSAkMTYsICUlbW00XG5c dCIKICAgICAicHNybHEgJDE2LCAlJW1tNFxuXHQiCiAgICAgInBhZGRzdyAlJW1tMSwgJSVtbTRc blx0IgogICAgICJwYWNrdXN3YiAlJW1tNCwgJSVtbTZcblx0IgogICAgICJtb3ZxICUlbW02LCAy NCVbZHN0Ml1cblx0IgogICAgIDoKICAgICA6IFtkc3QyXSAibSIgKCpkc3QyKQogICAgIDogIm1t MSIsICJtbTQiLCAibW02IgoKICAgICApOwp9CgppbnQKbWFpbiAoaW50IGFyZ2MsIGNoYXIqKikK ewogIHVuc2lnbmVkIGludCBmbGFncyA9IGNwdWlkX2ZsYWdzICgpOwogIGNvdXQgPDwgImZsYWdz OiAiIDw8IGVuZGw7CiAgZm9yIChpbnQgaT0wOyBpIDwgMzI7IGkrKykKICAgIGlmIChmbGFncyAm ICgxPDxpKSkKICAgICAgY291dCA8PCBpIDw8ICIgIjsKICBjb3V0IDw8IGVuZGw7CiAgdW5zaWdu ZWQgaW50IGV4dGVuZGVkID0gY3B1aWRfZXh0ZW5kZWRfZmxhZ3MgKCk7CiAgY291dCA8PCAiZXh0 ZW5kZWQgZmxhZ3M6ICIgPDwgZW5kbDsKICBmb3IgKGludCBpPTA7IGkgPCAzMjsgaSsrKQogICAg aWYgKGV4dGVuZGVkICYgKDE8PGkpKQogICAgICBjb3V0IDw8IGkgPDwgIiAiOwogIGNvdXQgPDwg ZW5kbDsKICBpZiAoZmxhZ3MgJiAoMTw8MjMpKQogICAgY291dCA8PCAiRGV0ZWN0ZWQgTU1YIiA8 PCBlbmRsOwogIGVsc2UKICAgIGNvdXQgPDwgIm5vIE1NWCIgPDwgZW5kbDsKICBpZiAoZXh0ZW5k ZWQgJiAoMTw8MjIpKQogICAgY291dCA8PCAiRGV0ZWN0ZWQgZXh0ZW5kZWQgTU1YIiA8PCBlbmRs OwogIGVsc2UKICAgIGNvdXQgPDwgIm5vIGV4dGVuZGVkIE1NWCIgPDwgZW5kbDsKICBpZiAoZXh0 ZW5kZWQgJiAoMTw8MzEpKQogICAgY291dCA8PCAiRGV0ZWN0ZWQgM0ROb3ciIDw8IGVuZGw7CiAg ZWxzZQogICAgY291dCA8PCAibm8gM0ROb3ciIDw8IGVuZGw7CiAgaWYgKGV4dGVuZGVkICYgKDE8 PDMwKSkKICAgIGNvdXQgPDwgIkRldGVjdGVkIGV4dGVuZGVkIDNETm93IiA8PCBlbmRsOwogIGVs c2UKICAgIGNvdXQgPDwgIm5vIGV4dGVuZGVkIDNETm93IiA8PCBlbmRsOwogIGlmIChmbGFncyAm ICgxPDwyNSkpCiAgICBjb3V0IDw8ICJEZXRlY3RlZCBTU0UiIDw8IGVuZGw7CiAgZWxzZQogICAg Y291dCA8PCAibm8gU1NFIiA8PCBlbmRsOwogIGlmIChmbGFncyAmICgxPDwyNikpCiAgICBjb3V0 IDw8ICJEZXRlY3RlZCBTU0UyIiA8PCBlbmRsOwogIGVsc2UKICAgIGNvdXQgPDwgIm5vIFNTRTIi IDw8IGVuZGw7CgoKICB1bnNpZ25lZCBjaGFyIGRzdDFbMzJdOwogIHVuc2lnbmVkIGNoYXIgZHN0 MlszMl07CiAgdW5zaWduZWQgY2hhciBkc3QzWzMyXTsKICB1bnNpZ25lZCBjaGFyIGRzdDRbMzJd OwogIGZvciAoaW50IGk9MDsgaSA8IDMyOyBpKyspCiAgICBkc3QxW2ldID0gZHN0MltpXSA9IGRz dDNbaV0gPSBkc3Q0W2ldID0gMDsKICB1bnNpZ25lZCBjaGFyIHkxWzhdID0geyA0NSwgMTYzLCA2 MywgMjYsIDE3NCwgMTg4LCA4LCA4NyB9OwogIHVuc2lnbmVkIGNoYXIgeTJbOF0gPSB7IDE3Miwg NzIsIDE3LCAwLCA0NiwgMzUsIDE2LCA4OCB9OwogIHVuc2lnbmVkIGNoYXIgdVs4XSA9IHsgMCwg NjYsIDE3MywgMjYsIDc4LCAxNywgMzcsIDh9OwogIHVuc2lnbmVkIGNoYXIgdls4XSA9IHsgNjIs IDI1NSwgNTYsIDAsIDksIDE3NywgMjU1LCA3IH07CiAgaWYgKGFyZ2MgPT0gMSkKICAgIGZvciAo aW50IGk9MDsgaSA8IDEwMjQqMTAyNCoxNjsgKytpKQogICAgICB5dXY0MjBfdG9fcmdiX21teCAo ZHN0MiwgZHN0NCwgeTEsIHkyLCB1LCB2KTsKICBlbHNlCiAgICBmb3IgKGludCBpPTA7IGkgPCAx MDI0KjEwMjQqMTY7ICsraSkKICAgICAgeXV2NDIwX3RvX3JnYl9pbnQgKGRzdDEsIGRzdDMsIHkx LCB5MiwgdSwgdik7CiAgcmV0dXJuIDA7CiAgY291dCA8PCAibW14X3VfMTQ6ICI7CiAgZm9yIChp bnQgaT0wOyBpIDwgNDsgaSsrKQogICAgY291dCA8PCAoaW50KW1teF91XzE0W2ldIDw8ICIgIjsK ICBjb3V0IDw8IGVuZGw7CiAgY291dCA8PCAibW14X3ZfMTQ6ICI7CiAgZm9yIChpbnQgaT0wOyBp IDwgNDsgaSsrKQogICAgY291dCA8PCAoaW50KW1teF92XzE0W2ldIDw8ICIgIjsKICBjb3V0IDw8 IGVuZGw7CgogIGNvdXQgPDwgInU6ICI7CiAgZm9yIChpbnQgaT0wOyBpIDwgNDsgaSsrKQogICAg Y291dCA8PCAoaW50KXVbaV0gPDwgIiAiOwogIGNvdXQgPDwgZW5kbDsKCiAgY291dCA8PCAidjog IjsKICBmb3IgKGludCBpPTA7IGkgPCA0OyBpKyspCiAgICBjb3V0IDw8IChpbnQpdltpXSA8PCAi ICI7CiAgY291dCA8PCBlbmRsOwoKICBjb3V0IDw8ICJ5MTogIjsKICBmb3IgKGludCBpPTA7IGkg PCA4OyBpKyspCiAgICBjb3V0IDw8IChpbnQpeTFbaV0gPDwgIiAiOwogIGNvdXQgPDwgZW5kbDsK CiAgY291dCA8PCAieTI6ICI7CiAgZm9yIChpbnQgaT0wOyBpIDwgODsgaSsrKQogICAgY291dCA8 PCAoaW50KXkyW2ldIDw8ICIgIjsKICBjb3V0IDw8IGVuZGw7CgogIGNvdXQgPDwgImRzdDE6ICI7 CiAgZm9yIChpbnQgaT0wOyBpIDwgMzI7IGkrKykKICAgIGNvdXQgPDwgKGludClkc3QxW2ldIDw8 ICIgIjsKICBjb3V0IDw8IGVuZGw7CgogIGNvdXQgPDwgImRzdDI6ICI7CiAgZm9yIChpbnQgaT0w OyBpIDwgMzI7IGkrKykKICAgIGNvdXQgPDwgKGludClkc3QyW2ldIDw8ICIgIjsKICBjb3V0IDw8 IGVuZGw7CgogIGNvdXQgPDwgImRzdDM6ICI7CiAgZm9yIChpbnQgaT0wOyBpIDwgMzI7IGkrKykK ICAgIGNvdXQgPDwgKGludClkc3QzW2ldIDw8ICIgIjsKICBjb3V0IDw8IGVuZGw7CgogIGNvdXQg PDwgImRzdDQ6ICI7CiAgZm9yIChpbnQgaT0wOyBpIDwgMzI7IGkrKykKICAgIGNvdXQgPDwgKGlu dClkc3Q0W2ldIDw8ICIgIjsKICBjb3V0IDw8IGVuZGw7CgogIGNvdXQgPDwgInRlc3QwOiAiOwog IGZvciAoaW50IGk9MDsgaSA8IDg7IGkrKykKICAgIGNvdXQgPDwgKGludCl0ZXN0MFtpXSA8PCAi ICI7CiAgY291dCA8PCBlbmRsOwogIGNvdXQgPDwgInRlc3QxOiAiOwogIGZvciAoaW50IGk9MDsg aSA8IDg7IGkrKykKICAgIGNvdXQgPDwgKGludCl0ZXN0MVtpXSA8PCAiICI7CiAgY291dCA8PCBl bmRsOwogIGNvdXQgPDwgInRlc3QyOiAiOwogIGZvciAoaW50IGk9MDsgaSA8IDg7IGkrKykKICAg IGNvdXQgPDwgKGludCl0ZXN0MltpXSA8PCAiICI7CiAgY291dCA8PCBlbmRsOwoKICByZXR1cm4g MDsKfQo=