From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 31823 invoked by alias); 22 Feb 2003 19:46:00 -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 31799 invoked by uid 71); 22 Feb 2003 19:46:00 -0000 Resent-Date: 22 Feb 2003 19:45:59 -0000 Resent-Message-ID: <20030222194559.31794.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, frank6thursday@aol.com Received: (qmail 31479 invoked by uid 48); 22 Feb 2003 19:44:05 -0000 Message-Id: <20030222194405.31478.qmail@sources.redhat.com> Date: Sat, 22 Feb 2003 19:46:00 -0000 From: frank6thursday@aol.com Reply-To: frank6thursday@aol.com To: gcc-gnats@gcc.gnu.org X-Send-Pr-Version: gnatsweb-2.9.3 (1.1.1.1.2.31) Subject: c++/9807: Derived class object used as default parameter for base class reference requires explicit cast to reference to base class X-SW-Source: 2003-02/txt/msg01126.txt.bz2 List-Id: >Number: 9807 >Category: c++ >Synopsis: Derived class object used as default parameter for base class reference requires explicit cast to reference to base class >Confidential: no >Severity: non-critical >Priority: low >Responsible: unassigned >State: open >Class: sw-bug >Submitter-Id: net >Arrival-Date: Sat Feb 22 19:45:59 UTC 2003 >Closed-Date: >Last-Modified: >Originator: B Kerner >Release: gcc version 3.1.1 >Organization: >Environment: --enable-threads Thread model: posix RH Linux 7.2 >Description: The compiler generates the error: invalid type `B' for default argument to `A&' In function `int main()': could not convert `B()' to `A&' in passing argument 1 of `C::C(A&)' For the code: struct A { virtual ~A(){} }; struct B : A { }; struct C { //Without workaround, the default parameter is not //accepted. C(A& a = B()){} ~C(){} }; int main() { C c; //Uses workaround. B b; A& aRef = b; //Exhibits Normal polymorphic behavior. } >How-To-Repeat: Define a base class. Define a derived class. Define a function that takes a reference to the base class as a parameter and set its default value to an object of the derived class created within the function parameter list. void function(Base& b = Derived()) >Fix: (A workaround) Add an explicit cast in the derived class. operator Derived::Base& (){return *this;} >Release-Note: >Audit-Trail: >Unformatted: ----gnatsweb-attachment---- Content-Type: application/octet-stream; name="test.ii" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="test.ii" IyAxICJ0ZXN0LmNwcCIKIyAxICI8YnVpbHQtaW4+IgojIDEgIjxjb21tYW5kIGxpbmU+IgojIDEg InRlc3QuY3BwIgojIDEgIi91c3IvY3lnbnVzL2Jpbi8uLi9pbmNsdWRlL2MrKy8zLjEuMS9pb3N0 cmVhbSIgMSAzCiMgNDMgIi91c3IvY3lnbnVzL2Jpbi8uLi9pbmNsdWRlL2MrKy8zLjEuMS9pb3N0 cmVhbSIgMwoKIyAxICIvdXNyL2N5Z251cy9iaW4vLi4vaW5jbHVkZS9jKysvMy4xLjEvaTY4Ni1w Yy1saW51eC1nbnUvYml0cy9jKytjb25maWcuaCIgMSAzCiMgMzQgIi91c3IvY3lnbnVzL2Jpbi8u Li9pbmNsdWRlL2MrKy8zLjEuMS9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2MrK2NvbmZpZy5oIiAz CiMgMSAiL3Vzci9jeWdudXMvYmluLy4uL2luY2x1ZGUvYysrLzMuMS4xL2k2ODYtcGMtbGludXgt Z251L2JpdHMvb3NfZGVmaW5lcy5oIiAxIDMKIyAzOSAiL3Vzci9jeWdudXMvYmluLy4uL2luY2x1 ZGUvYysrLzMuMS4xL2k2ODYtcGMtbGludXgtZ251L2JpdHMvb3NfZGVmaW5lcy5oIiAzCiMgMSAi L3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDEgMwojIDI4MyAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVz LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvc3lzL2NkZWZzLmgiIDEgMwojIDI4NCAiL3Vzci9pbmNs dWRlL2ZlYXR1cmVzLmgiIDIgMwojIDMxMiAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDMKIyAx ICIvdXNyL2luY2x1ZGUvZ251L3N0dWJzLmgiIDEgMwojIDMxMyAiL3Vzci9pbmNsdWRlL2ZlYXR1 cmVzLmgiIDIgMwojIDQwICIvdXNyL2N5Z251cy9iaW4vLi4vaW5jbHVkZS9jKysvMy4xLjEvaTY4 Ni1wYy1saW51eC1nbnUvYml0cy9vc19kZWZpbmVzLmgiIDIgMwojIDM1ICIvdXNyL2N5Z251cy9i aW4vLi4vaW5jbHVkZS9jKysvMy4xLjEvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9jKytjb25maWcu aCIgMiAzCiMgNDUgIi91c3IvY3lnbnVzL2Jpbi8uLi9pbmNsdWRlL2MrKy8zLjEuMS9pb3N0cmVh bSIgMiAzCiMgMSAiL3Vzci9jeWdudXMvYmluLy4uL2luY2x1ZGUvYysrLzMuMS4xL29zdHJlYW0i IDEgMwojIDQ0ICIvdXNyL2N5Z251cy9iaW4vLi4vaW5jbHVkZS9jKysvMy4xLjEvb3N0cmVhbSIg MwoKIyAxICIvdXNyL2N5Z251cy9iaW4vLi4vaW5jbHVkZS9jKysvMy4xLjEvaW9zIiAxIDMKIyA0 MyAiL3Vzci9jeWdudXMvYmluLy4uL2luY2x1ZGUvYysrLzMuMS4xL2lvcyIgMwoKIyAxICIvdXNy L2N5Z251cy9iaW4vLi4vaW5jbHVkZS9jKysvMy4xLjEvaW9zZndkIiAxIDMKIyA0MyAiL3Vzci9j eWdudXMvYmluLy4uL2luY2x1ZGUvYysrLzMuMS4xL2lvc2Z3ZCIgMwoKCiMgMSAiL3Vzci9jeWdu dXMvYmluLy4uL2luY2x1ZGUvYysrLzMuMS4xL2JpdHMvc3RyaW5nZndkLmgiIDEgMwojIDQzICIv dXNyL2N5Z251cy9iaW4vLi4vaW5jbHVkZS9jKysvMy4xLjEvYml0cy9zdHJpbmdmd2QuaCIgMwoK CgpuYW1lc3BhY2Ugc3RkCnsKICB0ZW1wbGF0ZTxjbGFzcyBfQ2hhclQ+CiAgICBzdHJ1Y3QgY2hh cl90cmFpdHM7CgogIHRlbXBsYXRlPD4gc3RydWN0IGNoYXJfdHJhaXRzPGNoYXI+OwoKICB0ZW1w bGF0ZTw+IHN0cnVjdCBjaGFyX3RyYWl0czx3Y2hhcl90PjsKCgogIHRlbXBsYXRlPHR5cGVuYW1l IF9BbGxvYz4KICAgIGNsYXNzIGFsbG9jYXRvcjsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU LCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiwKICAgICAgICAgICB0eXBl bmFtZSBfQWxsb2MgPSBhbGxvY2F0b3I8X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19zdHJpbmc7 CgogIHR5cGVkZWYgYmFzaWNfc3RyaW5nPGNoYXI+IHN0cmluZzsKICB0eXBlZGVmIGJhc2ljX3N0 cmluZzx3Y2hhcl90PiB3c3RyaW5nOwp9CiMgNDYgIi91c3IvY3lnbnVzL2Jpbi8uLi9pbmNsdWRl L2MrKy8zLjEuMS9pb3Nmd2QiIDIgMwojIDEgIi91c3IvY3lnbnVzL2Jpbi8uLi9pbmNsdWRlL2Mr Ky8zLjEuMS9iaXRzL2Zwb3MuaCIgMSAzCiMgNDMgIi91c3IvY3lnbnVzL2Jpbi8uLi9pbmNsdWRl L2MrKy8zLjEuMS9iaXRzL2Zwb3MuaCIgMwoKIyAxICIvdXNyL2N5Z251cy9iaW4vLi4vaW5jbHVk ZS9jKysvMy4xLjEvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9jKytpby5oIiAxIDMKIyAzNSAiL3Vz ci9jeWdudXMvYmluLy4uL2luY2x1ZGUvYysrLzMuMS4xL2k2ODYtcGMtbGludXgtZ251L2JpdHMv YysraW8uaCIgMwojIDEgIi91c3IvY3lnbnVzL2Jpbi8uLi9pbmNsdWRlL2MrKy8zLjEuMS9jc3Rk aW8iIDEgMwojIDQ4ICIvdXNyL2N5Z251cy9iaW4vLi4vaW5jbHVkZS9jKysvMy4xLjEvY3N0ZGlv IiAzCgoKIyAxICIvdXNyL2N5Z251cy9iaW4vLi4vaW5jbHVkZS9jKysvMy4xLjEvY3N0ZGRlZiIg MSAzCiMgNDcgIi91c3IvY3lnbnVzL2Jpbi8uLi9pbmNsdWRlL2MrKy8zLjEuMS9jc3RkZGVmIiAz CgojIDEgIi91c3IvY3lnbnVzL2Jpbi8uLi9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8z LjEuMS9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAxNDcgIi91c3IvY3lnbnVzL2Jpbi8uLi9saWIv Z2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjEuMS9pbmNsdWRlL3N0ZGRlZi5oIiAzCnR5cGVk ZWYgaW50IHB0cmRpZmZfdDsKIyAyMDEgIi91c3IvY3lnbnVzL2Jpbi8uLi9saWIvZ2NjLWxpYi9p Njg2LXBjLWxpbnV4LWdudS8zLjEuMS9pbmNsdWRlL3N0ZGRlZi5oIiAzCnR5cGVkZWYgdW5zaWdu ZWQgaW50IHNpemVfdDsKIyA0OSAiL3Vzci9jeWdudXMvYmluLy4uL2luY2x1ZGUvYysrLzMuMS4x L2NzdGRkZWYiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CiAgdXNpbmcgOjpwdHJkaWZmX3Q7CiAgdXNp bmcgOjpzaXplX3Q7Cn0KIyA1MSAiL3Vzci9jeWdudXMvYmluLy4uL2luY2x1ZGUvYysrLzMuMS4x L2NzdGRpbyIgMiAzCgojIDEgIi91c3IvY3lnbnVzL2Jpbi8uLi9saWIvZ2NjLWxpYi9pNjg2LXBj LWxpbnV4LWdudS8zLjEuMS9pbmNsdWRlL3N0ZGlvLmgiIDEgMwojIDM5ICIvdXNyL2N5Z251cy9i aW4vLi4vbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4xLjEvaW5jbHVkZS9zdGRpby5o IiAzCmV4dGVybiAiQyIgewoKCgojIDEgIi91c3IvY3lnbnVzL2Jpbi8uLi9saWIvZ2NjLWxpYi9p Njg2LXBjLWxpbnV4LWdudS8zLjEuMS9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyA0NCAiL3Vzci9j eWdudXMvYmluLy4uL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMS4xL2luY2x1ZGUv c3RkaW8uaCIgMiAzCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDEgMwojIDI5ICIv dXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAzCiMgMSAiL3Vzci9jeWdudXMvYmluLy4uL2xpYi9n Y2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMS4xL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDMw ICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAyIDMKCgp0eXBlZGVmIHVuc2lnbmVkIGNoYXIg X191X2NoYXI7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgX191X3Nob3J0Owp0eXBlZGVmIHVuc2ln bmVkIGludCBfX3VfaW50Owp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgX191X2xvbmc7CgpfX2V4dGVu c2lvbl9fIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIGludCBfX3VfcXVhZF90OwpfX2V4dGVu c2lvbl9fIHR5cGVkZWYgbG9uZyBsb25nIGludCBfX3F1YWRfdDsKIyA0OSAiL3Vzci9pbmNsdWRl L2JpdHMvdHlwZXMuaCIgMwp0eXBlZGVmIHNpZ25lZCBjaGFyIF9faW50OF90Owp0eXBlZGVmIHVu c2lnbmVkIGNoYXIgX191aW50OF90Owp0eXBlZGVmIHNpZ25lZCBzaG9ydCBpbnQgX19pbnQxNl90 Owp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IGludCBfX3VpbnQxNl90Owp0eXBlZGVmIHNpZ25lZCBp bnQgX19pbnQzMl90Owp0eXBlZGVmIHVuc2lnbmVkIGludCBfX3VpbnQzMl90OwoKX19leHRlbnNp b25fXyB0eXBlZGVmIHNpZ25lZCBsb25nIGxvbmcgaW50IF9faW50NjRfdDsKX19leHRlbnNpb25f XyB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgX191aW50NjRfdDsKCnR5cGVkZWYgX19x dWFkX3QgKl9fcWFkZHJfdDsKCnR5cGVkZWYgX191X3F1YWRfdCBfX2Rldl90Owp0eXBlZGVmIF9f dV9pbnQgX191aWRfdDsKdHlwZWRlZiBfX3VfaW50IF9fZ2lkX3Q7CnR5cGVkZWYgX191X2xvbmcg X19pbm9fdDsKdHlwZWRlZiBfX3VfaW50IF9fbW9kZV90Owp0eXBlZGVmIF9fdV9pbnQgX19ubGlu a190Owp0eXBlZGVmIGxvbmcgaW50IF9fb2ZmX3Q7CnR5cGVkZWYgX19xdWFkX3QgX19sb2ZmX3Q7 CnR5cGVkZWYgaW50IF9fcGlkX3Q7CnR5cGVkZWYgaW50IF9fc3NpemVfdDsKdHlwZWRlZiBfX3Vf bG9uZyBfX3JsaW1fdDsKdHlwZWRlZiBfX3VfcXVhZF90IF9fcmxpbTY0X3Q7CnR5cGVkZWYgX191 X2ludCBfX2lkX3Q7Cgp0eXBlZGVmIHN0cnVjdAogIHsKICAgIGludCBfX3ZhbFsyXTsKICB9IF9f ZnNpZF90OwoKCnR5cGVkZWYgaW50IF9fZGFkZHJfdDsKdHlwZWRlZiBjaGFyICpfX2NhZGRyX3Q7 CnR5cGVkZWYgbG9uZyBpbnQgX190aW1lX3Q7CnR5cGVkZWYgdW5zaWduZWQgaW50IF9fdXNlY29u ZHNfdDsKdHlwZWRlZiBsb25nIGludCBfX3N1c2Vjb25kc190Owp0eXBlZGVmIGxvbmcgaW50IF9f c3dibGtfdDsKCnR5cGVkZWYgbG9uZyBpbnQgX19jbG9ja190OwoKCnR5cGVkZWYgaW50IF9fY2xv Y2tpZF90OwoKCnR5cGVkZWYgaW50IF9fdGltZXJfdDsKCgoKCgoKdHlwZWRlZiBpbnQgX19rZXlf dDsKCgp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IGludCBfX2lwY19waWRfdDsKCgoKdHlwZWRlZiBs b25nIGludCBfX2Jsa3NpemVfdDsKCgoKCnR5cGVkZWYgbG9uZyBpbnQgX19ibGtjbnRfdDsKdHlw ZWRlZiBfX3F1YWRfdCBfX2Jsa2NudDY0X3Q7CgoKdHlwZWRlZiBfX3VfbG9uZyBfX2ZzYmxrY250 X3Q7CnR5cGVkZWYgX191X3F1YWRfdCBfX2ZzYmxrY250NjRfdDsKCgp0eXBlZGVmIF9fdV9sb25n IF9fZnNmaWxjbnRfdDsKdHlwZWRlZiBfX3VfcXVhZF90IF9fZnNmaWxjbnQ2NF90OwoKCnR5cGVk ZWYgX191X3F1YWRfdCBfX2lubzY0X3Q7CgoKdHlwZWRlZiBfX2xvZmZfdCBfX29mZjY0X3Q7CgoK dHlwZWRlZiBsb25nIGludCBfX3Rfc2NhbGFyX3Q7CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBpbnQg X190X3VzY2FsYXJfdDsKCgp0eXBlZGVmIGludCBfX2ludHB0cl90OwoKCnR5cGVkZWYgdW5zaWdu ZWQgaW50IF9fc29ja2xlbl90OwoKCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9wdGhyZWFkdHlw ZXMuaCIgMSAzCiMgMjMgIi91c3IvaW5jbHVkZS9iaXRzL3B0aHJlYWR0eXBlcy5oIiAzCiMgMSAi L3Vzci9pbmNsdWRlL2JpdHMvc2NoZWQuaCIgMSAzCiMgNjggIi91c3IvaW5jbHVkZS9iaXRzL3Nj aGVkLmgiIDMKc3RydWN0IF9fc2NoZWRfcGFyYW0KICB7CiAgICBpbnQgX19zY2hlZF9wcmlvcml0 eTsKICB9OwojIDI0ICIvdXNyL2luY2x1ZGUvYml0cy9wdGhyZWFkdHlwZXMuaCIgMiAzCgoKc3Ry dWN0IF9wdGhyZWFkX2Zhc3Rsb2NrCnsKICBsb25nIGludCBfX3N0YXR1czsKICBpbnQgX19zcGlu bG9jazsKCn07CgoKCnR5cGVkZWYgc3RydWN0IF9wdGhyZWFkX2Rlc2NyX3N0cnVjdCAqX3B0aHJl YWRfZGVzY3I7CgoKCgoKdHlwZWRlZiBzdHJ1Y3QgX19wdGhyZWFkX2F0dHJfcwp7CiAgaW50IF9f ZGV0YWNoc3RhdGU7CiAgaW50IF9fc2NoZWRwb2xpY3k7CiAgc3RydWN0IF9fc2NoZWRfcGFyYW0g X19zY2hlZHBhcmFtOwogIGludCBfX2luaGVyaXRzY2hlZDsKICBpbnQgX19zY29wZTsKICBzaXpl X3QgX19ndWFyZHNpemU7CiAgaW50IF9fc3RhY2thZGRyX3NldDsKICB2b2lkICpfX3N0YWNrYWRk cjsKICBzaXplX3QgX19zdGFja3NpemU7Cn0gcHRocmVhZF9hdHRyX3Q7CgoKCnR5cGVkZWYgc3Ry dWN0CnsKICBzdHJ1Y3QgX3B0aHJlYWRfZmFzdGxvY2sgX19jX2xvY2s7CiAgX3B0aHJlYWRfZGVz Y3IgX19jX3dhaXRpbmc7Cn0gcHRocmVhZF9jb25kX3Q7CgoKCnR5cGVkZWYgc3RydWN0CnsKICBp bnQgX19kdW1teTsKfSBwdGhyZWFkX2NvbmRhdHRyX3Q7CgoKdHlwZWRlZiB1bnNpZ25lZCBpbnQg cHRocmVhZF9rZXlfdDsKCgoKCgp0eXBlZGVmIHN0cnVjdAp7CiAgaW50IF9fbV9yZXNlcnZlZDsK ICBpbnQgX19tX2NvdW50OwogIF9wdGhyZWFkX2Rlc2NyIF9fbV9vd25lcjsKICBpbnQgX19tX2tp bmQ7CiAgc3RydWN0IF9wdGhyZWFkX2Zhc3Rsb2NrIF9fbV9sb2NrOwp9IHB0aHJlYWRfbXV0ZXhf dDsKCgoKdHlwZWRlZiBzdHJ1Y3QKewogIGludCBfX211dGV4a2luZDsKfSBwdGhyZWFkX211dGV4 YXR0cl90OwoKCgp0eXBlZGVmIGludCBwdGhyZWFkX29uY2VfdDsKCgoKCnR5cGVkZWYgc3RydWN0 IF9wdGhyZWFkX3J3bG9ja190CnsKICBzdHJ1Y3QgX3B0aHJlYWRfZmFzdGxvY2sgX19yd19sb2Nr OwogIGludCBfX3J3X3JlYWRlcnM7CiAgX3B0aHJlYWRfZGVzY3IgX19yd193cml0ZXI7CiAgX3B0 aHJlYWRfZGVzY3IgX19yd19yZWFkX3dhaXRpbmc7CiAgX3B0aHJlYWRfZGVzY3IgX19yd193cml0 ZV93YWl0aW5nOwogIGludCBfX3J3X2tpbmQ7CiAgaW50IF9fcndfcHNoYXJlZDsKfSBwdGhyZWFk X3J3bG9ja190OwoKCgp0eXBlZGVmIHN0cnVjdAp7CiAgaW50IF9fbG9ja2tpbmQ7CiAgaW50IF9f cHNoYXJlZDsKfSBwdGhyZWFkX3J3bG9ja2F0dHJfdDsKCgoKCnR5cGVkZWYgdm9sYXRpbGUgaW50 IHB0aHJlYWRfc3BpbmxvY2tfdDsKCgp0eXBlZGVmIHN0cnVjdCB7CiAgc3RydWN0IF9wdGhyZWFk X2Zhc3Rsb2NrIF9fYmFfbG9jazsKICBpbnQgX19iYV9yZXF1aXJlZDsKICBpbnQgX19iYV9wcmVz ZW50OwogIF9wdGhyZWFkX2Rlc2NyIF9fYmFfd2FpdGluZzsKfSBwdGhyZWFkX2JhcnJpZXJfdDsK Cgp0eXBlZGVmIHN0cnVjdCB7CiAgaW50IF9fcHNoYXJlZDsKfSBwdGhyZWFkX2JhcnJpZXJhdHRy X3Q7CgoKCgoKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCBwdGhyZWFkX3Q7CiMgMTQ0ICIvdXNy L2luY2x1ZGUvYml0cy90eXBlcy5oIiAyIDMKIyA0NiAiL3Vzci9jeWdudXMvYmluLy4uL2xpYi9n Y2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMS4xL2luY2x1ZGUvc3RkaW8uaCIgMiAzCiMgNTQg Ii91c3IvY3lnbnVzL2Jpbi8uLi9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjEuMS9p bmNsdWRlL3N0ZGlvLmgiIDMKdHlwZWRlZiBzdHJ1Y3QgX0lPX0ZJTEUgRklMRTsKIyA2NCAiL3Vz ci9jeWdudXMvYmluLy4uL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMS4xL2luY2x1 ZGUvc3RkaW8uaCIgMwp0eXBlZGVmIHN0cnVjdCBfSU9fRklMRSBfX0ZJTEU7CiMgNzQgIi91c3Iv Y3lnbnVzL2Jpbi8uLi9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjEuMS9pbmNsdWRl L3N0ZGlvLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMSAzCiMgMzIgIi91c3IvaW5j bHVkZS9saWJpby5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL19HX2NvbmZpZy5oIiAxIDMKIyAxNCAi L3Vzci9pbmNsdWRlL19HX2NvbmZpZy5oIiAzCiMgMSAiL3Vzci9jeWdudXMvYmluLy4uL2xpYi9n Y2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMS4xL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDMy MSAiL3Vzci9jeWdudXMvYmluLy4uL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMS4x L2luY2x1ZGUvc3RkZGVmLmgiIDMKdHlwZWRlZiB1bnNpZ25lZCBpbnQgd2ludF90OwojIDE1ICIv dXNyL2luY2x1ZGUvX0dfY29uZmlnLmgiIDIgMwojIDI0ICIvdXNyL2luY2x1ZGUvX0dfY29uZmln LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMSAzCiMgNDggIi91c3IvaW5jbHVkZS93 Y2hhci5oIiAzCiMgMSAiL3Vzci9jeWdudXMvYmluLy4uL2xpYi9nY2MtbGliL2k2ODYtcGMtbGlu dXgtZ251LzMuMS4xL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDQ5ICIvdXNyL2luY2x1ZGUvd2No YXIuaCIgMiAzCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3djaGFyLmgiIDEgMwojIDUxICIvdXNy L2luY2x1ZGUvd2NoYXIuaCIgMiAzCiMgNjcgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAzCnR5cGVk ZWYgc3RydWN0CnsKICBpbnQgX19jb3VudDsKICB1bmlvbgogIHsKICAgIHdpbnRfdCBfX3djaDsK ICAgIGNoYXIgX193Y2hiWzRdOwogIH0gX192YWx1ZTsKfSBfX21ic3RhdGVfdDsKIyAyNSAiL3Vz ci9pbmNsdWRlL19HX2NvbmZpZy5oIiAyIDMKCnR5cGVkZWYgc3RydWN0CnsKICBfX29mZl90IF9f cG9zOwogIF9fbWJzdGF0ZV90IF9fc3RhdGU7Cn0gX0dfZnBvc190Owp0eXBlZGVmIHN0cnVjdAp7 CiAgX19vZmY2NF90IF9fcG9zOwogIF9fbWJzdGF0ZV90IF9fc3RhdGU7Cn0gX0dfZnBvczY0X3Q7 CiMgNDQgIi91c3IvaW5jbHVkZS9fR19jb25maWcuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9nY29u di5oIiAxIDMKIyAyOCAiL3Vzci9pbmNsdWRlL2djb252LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUv d2NoYXIuaCIgMSAzCiMgNDggIi91c3IvaW5jbHVkZS93Y2hhci5oIiAzCiMgMSAiL3Vzci9jeWdu dXMvYmluLy4uL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMS4xL2luY2x1ZGUvc3Rk ZGVmLmgiIDEgMwojIDQ5ICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMiAzCiMgMjkgIi91c3IvaW5j bHVkZS9nY29udi5oIiAyIDMKCgojIDEgIi91c3IvY3lnbnVzL2Jpbi8uLi9saWIvZ2NjLWxpYi9p Njg2LXBjLWxpbnV4LWdudS8zLjEuMS9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAzMiAiL3Vzci9p bmNsdWRlL2djb252LmgiIDIgMwoKCgoKCmVudW0KewogIF9fR0NPTlZfT0sgPSAwLAogIF9fR0NP TlZfTk9DT05WLAogIF9fR0NPTlZfTk9EQiwKICBfX0dDT05WX05PTUVNLAoKICBfX0dDT05WX0VN UFRZX0lOUFVULAogIF9fR0NPTlZfRlVMTF9PVVRQVVQsCiAgX19HQ09OVl9JTExFR0FMX0lOUFVU LAogIF9fR0NPTlZfSU5DT01QTEVURV9JTlBVVCwKCiAgX19HQ09OVl9JTExFR0FMX0RFU0NSSVBU T1IsCiAgX19HQ09OVl9JTlRFUk5BTF9FUlJPUgp9OwoKCgplbnVtCnsKICBfX0dDT05WX0lTX0xB U1QgPSAweDAwMDEsCiAgX19HQ09OVl9JR05PUkVfRVJST1JTID0gMHgwMDAyCn07CgoKCnN0cnVj dCBfX2djb252X3N0ZXA7CnN0cnVjdCBfX2djb252X3N0ZXBfZGF0YTsKc3RydWN0IF9fZ2NvbnZf bG9hZGVkX29iamVjdDsKc3RydWN0IF9fZ2NvbnZfdHJhbnNfZGF0YTsKCgoKdHlwZWRlZiBpbnQg KCpfX2djb252X2ZjdCkgKHN0cnVjdCBfX2djb252X3N0ZXAgKiwgc3RydWN0IF9fZ2NvbnZfc3Rl cF9kYXRhICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHVuc2lnbmVkIGNo YXIgKiosIF9fY29uc3QgdW5zaWduZWQgY2hhciAqLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgdW5zaWduZWQgY2hhciAqKiwgc2l6ZV90ICosIGludCwgaW50KTsKCgp0eXBlZGVmIGludCAo Kl9fZ2NvbnZfaW5pdF9mY3QpIChzdHJ1Y3QgX19nY29udl9zdGVwICopOwp0eXBlZGVmIHZvaWQg KCpfX2djb252X2VuZF9mY3QpIChzdHJ1Y3QgX19nY29udl9zdGVwICopOwoKCgp0eXBlZGVmIGlu dCAoKl9fZ2NvbnZfdHJhbnNfZmN0KSAoc3RydWN0IF9fZ2NvbnZfc3RlcCAqLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IF9fZ2NvbnZfc3RlcF9kYXRhICosIHZvaWQg KiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgdW5zaWduZWQgY2hh ciAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB1bnNpZ25lZCBj aGFyICoqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB1bnNpZ25l ZCBjaGFyICosIHVuc2lnbmVkIGNoYXIgKiosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBzaXplX3QgKik7CgoKdHlwZWRlZiBpbnQgKCpfX2djb252X3RyYW5zX2NvbnRleHRfZmN0 KSAodm9pZCAqLCBfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKiwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB1bnNpZ25lZCBjaGFyICosCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKiwgdW5zaWduZWQg Y2hhciAqKTsKCgp0eXBlZGVmIGludCAoKl9fZ2NvbnZfdHJhbnNfcXVlcnlfZmN0KSAoX19jb25z dCBjaGFyICosIF9fY29uc3QgY2hhciAqKiosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBzaXplX3QgKik7CgoKdHlwZWRlZiBpbnQgKCpfX2djb252X3RyYW5zX2luaXRf ZmN0KSAodm9pZCAqKiwgY29uc3QgY2hhciAqKTsKdHlwZWRlZiB2b2lkICgqX19nY29udl90cmFu c19lbmRfZmN0KSAodm9pZCAqKTsKCnN0cnVjdCBfX2djb252X3RyYW5zX2RhdGEKewoKICBfX2dj b252X3RyYW5zX2ZjdCBfX3RyYW5zX2ZjdDsKICBfX2djb252X3RyYW5zX2NvbnRleHRfZmN0IF9f dHJhbnNfY29udGV4dF9mY3Q7CiAgX19nY29udl90cmFuc19lbmRfZmN0IF9fdHJhbnNfZW5kX2Zj dDsKICB2b2lkICpfX2RhdGE7CiAgc3RydWN0IF9fZ2NvbnZfdHJhbnNfZGF0YSAqX19uZXh0Owp9 OwoKCgpzdHJ1Y3QgX19nY29udl9zdGVwCnsKICBzdHJ1Y3QgX19nY29udl9sb2FkZWRfb2JqZWN0 ICpfX3NobGliX2hhbmRsZTsKICBfX2NvbnN0IGNoYXIgKl9fbW9kbmFtZTsKCiAgaW50IF9fY291 bnRlcjsKCiAgY2hhciAqX19mcm9tX25hbWU7CiAgY2hhciAqX190b19uYW1lOwoKICBfX2djb252 X2ZjdCBfX2ZjdDsKICBfX2djb252X2luaXRfZmN0IF9faW5pdF9mY3Q7CiAgX19nY29udl9lbmRf ZmN0IF9fZW5kX2ZjdDsKCgoKICBpbnQgX19taW5fbmVlZGVkX2Zyb207CiAgaW50IF9fbWF4X25l ZWRlZF9mcm9tOwogIGludCBfX21pbl9uZWVkZWRfdG87CiAgaW50IF9fbWF4X25lZWRlZF90bzsK CgogIGludCBfX3N0YXRlZnVsOwoKICB2b2lkICpfX2RhdGE7Cn07CgoKCnN0cnVjdCBfX2djb252 X3N0ZXBfZGF0YQp7CiAgdW5zaWduZWQgY2hhciAqX19vdXRidWY7CiAgdW5zaWduZWQgY2hhciAq X19vdXRidWZlbmQ7CgoKCiAgaW50IF9fZmxhZ3M7CgoKCiAgaW50IF9faW52b2NhdGlvbl9jb3Vu dGVyOwoKCgogIGludCBfX2ludGVybmFsX3VzZTsKCiAgX19tYnN0YXRlX3QgKl9fc3RhdGVwOwog IF9fbWJzdGF0ZV90IF9fc3RhdGU7CgoKCiAgc3RydWN0IF9fZ2NvbnZfdHJhbnNfZGF0YSAqX190 cmFuczsKfTsKCgoKdHlwZWRlZiBzdHJ1Y3QgX19nY29udl9pbmZvCnsKICBzaXplX3QgX19uc3Rl cHM7CiAgc3RydWN0IF9fZ2NvbnZfc3RlcCAqX19zdGVwczsKICBfX2V4dGVuc2lvbl9fIHN0cnVj dCBfX2djb252X3N0ZXBfZGF0YSBfX2RhdGEgW107Cn0gKl9fZ2NvbnZfdDsKIyA0NSAiL3Vzci9p bmNsdWRlL19HX2NvbmZpZy5oIiAyIDMKdHlwZWRlZiB1bmlvbgp7CiAgc3RydWN0IF9fZ2NvbnZf aW5mbyBfX2NkOwogIHN0cnVjdAogIHsKICAgIHN0cnVjdCBfX2djb252X2luZm8gX19jZDsKICAg IHN0cnVjdCBfX2djb252X3N0ZXBfZGF0YSBfX2RhdGE7CiAgfSBfX2NvbWJpbmVkOwp9IF9HX2lj b252X3Q7Cgp0eXBlZGVmIGludCBfR19pbnQxNl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAo X19ISV9fKSkpOwp0eXBlZGVmIGludCBfR19pbnQzMl90IF9fYXR0cmlidXRlX18gKChfX21vZGVf XyAoX19TSV9fKSkpOwp0eXBlZGVmIHVuc2lnbmVkIGludCBfR191aW50MTZfdCBfX2F0dHJpYnV0 ZV9fICgoX19tb2RlX18gKF9fSElfXykpKTsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX0dfdWludDMy X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX1NJX18pKSk7CiMgMzMgIi91c3IvaW5jbHVk ZS9saWJpby5oIiAyIDMKIyA1MyAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKIyAxICIvdXNyL2N5 Z251cy9iaW4vLi4vbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4xLjEvaW5jbHVkZS9z dGRhcmcuaCIgMSAzCiMgNDMgIi91c3IvY3lnbnVzL2Jpbi8uLi9saWIvZ2NjLWxpYi9pNjg2LXBj LWxpbnV4LWdudS8zLjEuMS9pbmNsdWRlL3N0ZGFyZy5oIiAzCnR5cGVkZWYgX19idWlsdGluX3Zh X2xpc3QgX19nbnVjX3ZhX2xpc3Q7CiMgNTQgIi91c3IvaW5jbHVkZS9saWJpby5oIiAyIDMKIyAx NjAgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCnN0cnVjdCBfSU9fanVtcF90OyBzdHJ1Y3QgX0lP X0ZJTEU7CiMgMTcwICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwp0eXBlZGVmIHZvaWQgX0lPX2xv Y2tfdDsKCgoKCgpzdHJ1Y3QgX0lPX21hcmtlciB7CiAgc3RydWN0IF9JT19tYXJrZXIgKl9uZXh0 OwogIHN0cnVjdCBfSU9fRklMRSAqX3NidWY7CgoKCiAgaW50IF9wb3M7CiMgMTkzICIvdXNyL2lu Y2x1ZGUvbGliaW8uaCIgMwp9OwoKCmVudW0gX19jb2RlY3Z0X3Jlc3VsdAp7CiAgX19jb2RlY3Z0 X29rLAogIF9fY29kZWN2dF9wYXJ0aWFsLAogIF9fY29kZWN2dF9lcnJvciwKICBfX2NvZGVjdnRf bm9jb252Cn07CgoKCgpzdHJ1Y3QgX0lPX2NvZGVjdnQKewogIHZvaWQgKCpfX2NvZGVjdnRfZGVz dHIpIChzdHJ1Y3QgX0lPX2NvZGVjdnQgKik7CiAgZW51bSBfX2NvZGVjdnRfcmVzdWx0ICgqX19j b2RlY3Z0X2RvX291dCkgKHN0cnVjdCBfSU9fY29kZWN2dCAqLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBfX21ic3RhdGVfdCAqLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB3Y2hhcl90ICosCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHdjaGFyX3QgKiwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgd2NoYXJfdCAqKiwg Y2hhciAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFy ICosIGNoYXIgKiopOwogIGVudW0gX19jb2RlY3Z0X3Jlc3VsdCAoKl9fY29kZWN2dF9kb191bnNo aWZ0KSAoc3RydWN0IF9JT19jb2RlY3Z0ICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBfX21ic3RhdGVfdCAqLCBjaGFyICosCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICosIGNoYXIgKiopOwogIGVu dW0gX19jb2RlY3Z0X3Jlc3VsdCAoKl9fY29kZWN2dF9kb19pbikgKHN0cnVjdCBfSU9fY29kZWN2 dCAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbWJzdGF0 ZV90ICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg Y2hhciAqLCBjb25zdCBjaGFyICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY29uc3QgY2hhciAqKiwgd2NoYXJfdCAqLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKiwgd2NoYXJfdCAqKik7CiAgaW50ICgqX19j b2RlY3Z0X2RvX2VuY29kaW5nKSAoc3RydWN0IF9JT19jb2RlY3Z0ICopOwogIGludCAoKl9fY29k ZWN2dF9kb19hbHdheXNfbm9jb252KSAoc3RydWN0IF9JT19jb2RlY3Z0ICopOwogIGludCAoKl9f Y29kZWN2dF9kb19sZW5ndGgpIChzdHJ1Y3QgX0lPX2NvZGVjdnQgKiwgX19tYnN0YXRlX3QgKiwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICos IHNpemVfdCk7CiAgaW50ICgqX19jb2RlY3Z0X2RvX21heF9sZW5ndGgpIChzdHJ1Y3QgX0lPX2Nv ZGVjdnQgKik7CgogIF9HX2ljb252X3QgX19jZF9pbjsKICBfR19pY29udl90IF9fY2Rfb3V0Owp9 OwoKCnN0cnVjdCBfSU9fd2lkZV9kYXRhCnsKICB3Y2hhcl90ICpfSU9fcmVhZF9wdHI7CiAgd2No YXJfdCAqX0lPX3JlYWRfZW5kOwogIHdjaGFyX3QgKl9JT19yZWFkX2Jhc2U7CiAgd2NoYXJfdCAq X0lPX3dyaXRlX2Jhc2U7CiAgd2NoYXJfdCAqX0lPX3dyaXRlX3B0cjsKICB3Y2hhcl90ICpfSU9f d3JpdGVfZW5kOwogIHdjaGFyX3QgKl9JT19idWZfYmFzZTsKICB3Y2hhcl90ICpfSU9fYnVmX2Vu ZDsKCiAgd2NoYXJfdCAqX0lPX3NhdmVfYmFzZTsKICB3Y2hhcl90ICpfSU9fYmFja3VwX2Jhc2U7 CgogIHdjaGFyX3QgKl9JT19zYXZlX2VuZDsKCiAgX19tYnN0YXRlX3QgX0lPX3N0YXRlOwogIF9f bWJzdGF0ZV90IF9JT19sYXN0X3N0YXRlOwogIHN0cnVjdCBfSU9fY29kZWN2dCBfY29kZWN2dDsK CiAgd2NoYXJfdCBfc2hvcnRidWZbMV07CgogIHN0cnVjdCBfSU9fanVtcF90ICpfd2lkZV92dGFi bGU7Cn07CgoKc3RydWN0IF9JT19GSUxFIHsKICBpbnQgX2ZsYWdzOwoKCgoKICBjaGFyKiBfSU9f cmVhZF9wdHI7CiAgY2hhciogX0lPX3JlYWRfZW5kOwogIGNoYXIqIF9JT19yZWFkX2Jhc2U7CiAg Y2hhciogX0lPX3dyaXRlX2Jhc2U7CiAgY2hhciogX0lPX3dyaXRlX3B0cjsKICBjaGFyKiBfSU9f d3JpdGVfZW5kOwogIGNoYXIqIF9JT19idWZfYmFzZTsKICBjaGFyKiBfSU9fYnVmX2VuZDsKCiAg Y2hhciAqX0lPX3NhdmVfYmFzZTsKICBjaGFyICpfSU9fYmFja3VwX2Jhc2U7CiAgY2hhciAqX0lP X3NhdmVfZW5kOwoKICBzdHJ1Y3QgX0lPX21hcmtlciAqX21hcmtlcnM7CgogIHN0cnVjdCBfSU9f RklMRSAqX2NoYWluOwoKICBpbnQgX2ZpbGVubzsKICBpbnQgX2Jsa3NpemU7CiAgX19vZmZfdCBf b2xkX29mZnNldDsKCgoKICB1bnNpZ25lZCBzaG9ydCBfY3VyX2NvbHVtbjsKICBzaWduZWQgY2hh ciBfdnRhYmxlX29mZnNldDsKICBjaGFyIF9zaG9ydGJ1ZlsxXTsKCgoKICBfSU9fbG9ja190ICpf bG9jazsKIyAzMDUgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCiAgX19vZmY2NF90IF9vZmZzZXQ7 CgoKICBzdHJ1Y3QgX0lPX2NvZGVjdnQgKl9jb2RlY3Z0OwogIHN0cnVjdCBfSU9fd2lkZV9kYXRh ICpfd2lkZV9kYXRhOwoKCgoKICBpbnQgX21vZGU7CgogIGNoYXIgX3VudXNlZDJbMTUgKiBzaXpl b2YgKGludCkgLSAyICogc2l6ZW9mICh2b2lkICopXTsKCn07CgoKCgoKc3RydWN0IF9JT19GSUxF X3BsdXM7CgpleHRlcm4gc3RydWN0IF9JT19GSUxFX3BsdXMgX0lPXzJfMV9zdGRpbl87CmV4dGVy biBzdHJ1Y3QgX0lPX0ZJTEVfcGx1cyBfSU9fMl8xX3N0ZG91dF87CmV4dGVybiBzdHJ1Y3QgX0lP X0ZJTEVfcGx1cyBfSU9fMl8xX3N0ZGVycl87CiMgMzQ0ICIvdXNyL2luY2x1ZGUvbGliaW8uaCIg Mwp0eXBlZGVmIF9fc3NpemVfdCBfX2lvX3JlYWRfZm4gKHZvaWQgKl9fY29va2llLCBjaGFyICpf X2J1Ziwgc2l6ZV90IF9fbmJ5dGVzKTsKCgoKCgoKCnR5cGVkZWYgX19zc2l6ZV90IF9faW9fd3Jp dGVfZm4gKHZvaWQgKl9fY29va2llLCBfX2NvbnN0IGNoYXIgKl9fYnVmLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19uKTsKCgoKCgoKCnR5cGVkZWYgaW50IF9faW9f c2Vla19mbiAodm9pZCAqX19jb29raWUsIF9fb2ZmNjRfdCAqX19wb3MsIGludCBfX3cpOwoKCnR5 cGVkZWYgaW50IF9faW9fY2xvc2VfZm4gKHZvaWQgKl9fY29va2llKTsKCgoKCnR5cGVkZWYgX19p b19yZWFkX2ZuIGNvb2tpZV9yZWFkX2Z1bmN0aW9uX3Q7CnR5cGVkZWYgX19pb193cml0ZV9mbiBj b29raWVfd3JpdGVfZnVuY3Rpb25fdDsKdHlwZWRlZiBfX2lvX3NlZWtfZm4gY29va2llX3NlZWtf ZnVuY3Rpb25fdDsKdHlwZWRlZiBfX2lvX2Nsb3NlX2ZuIGNvb2tpZV9jbG9zZV9mdW5jdGlvbl90 OwoKCnR5cGVkZWYgc3RydWN0CnsKICBfX2lvX3JlYWRfZm4gKnJlYWQ7CiAgX19pb193cml0ZV9m biAqd3JpdGU7CiAgX19pb19zZWVrX2ZuICpzZWVrOwogIF9faW9fY2xvc2VfZm4gKmNsb3NlOwp9 IF9JT19jb29raWVfaW9fZnVuY3Rpb25zX3Q7CnR5cGVkZWYgX0lPX2Nvb2tpZV9pb19mdW5jdGlv bnNfdCBjb29raWVfaW9fZnVuY3Rpb25zX3Q7CgpzdHJ1Y3QgX0lPX2Nvb2tpZV9maWxlOwoKCmV4 dGVybiB2b2lkIF9JT19jb29raWVfaW5pdCAoc3RydWN0IF9JT19jb29raWVfZmlsZSAqX19jZmls ZSwgaW50IF9fcmVhZF93cml0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpf X2Nvb2tpZSwgX0lPX2Nvb2tpZV9pb19mdW5jdGlvbnNfdCBfX2Zucyk7CgoKCgpleHRlcm4gIkMi IHsKCgpleHRlcm4gaW50IF9fdW5kZXJmbG93IChfSU9fRklMRSAqKSB0aHJvdyAoKTsKZXh0ZXJu IGludCBfX3VmbG93IChfSU9fRklMRSAqKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfX292ZXJmbG93 IChfSU9fRklMRSAqLCBpbnQpIHRocm93ICgpOwpleHRlcm4gd2ludF90IF9fd3VuZGVyZmxvdyAo X0lPX0ZJTEUgKikgdGhyb3cgKCk7CmV4dGVybiB3aW50X3QgX193dWZsb3cgKF9JT19GSUxFICop IHRocm93ICgpOwpleHRlcm4gd2ludF90IF9fd292ZXJmbG93IChfSU9fRklMRSAqLCB3aW50X3Qp IHRocm93ICgpOwojIDQyNiAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKZXh0ZXJuIGludCBfSU9f Z2V0YyAoX0lPX0ZJTEUgKl9fZnApIHRocm93ICgpOwpleHRlcm4gaW50IF9JT19wdXRjIChpbnQg X19jLCBfSU9fRklMRSAqX19mcCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX0lPX2Zlb2YgKF9JT19G SUxFICpfX2ZwKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfSU9fZmVycm9yIChfSU9fRklMRSAqX19m cCkgdGhyb3cgKCk7CgpleHRlcm4gaW50IF9JT19wZWVrY19sb2NrZWQgKF9JT19GSUxFICpfX2Zw KSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gdm9pZCBfSU9fZmxvY2tmaWxlIChfSU9fRklMRSAqKSB0 aHJvdyAoKTsKZXh0ZXJuIHZvaWQgX0lPX2Z1bmxvY2tmaWxlIChfSU9fRklMRSAqKSB0aHJvdyAo KTsKZXh0ZXJuIGludCBfSU9fZnRyeWxvY2tmaWxlIChfSU9fRklMRSAqKSB0aHJvdyAoKTsKIyA0 NTYgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCmV4dGVybiBpbnQgX0lPX3Zmc2NhbmYgKF9JT19G SUxFICogX19yZXN0cmljdCwgY29uc3QgY2hhciAqIF9fcmVzdHJpY3QsCiAgICAgICAgICAgICAg ICAgICAgICAgIF9fZ251Y192YV9saXN0LCBpbnQgKl9fcmVzdHJpY3QpIHRocm93ICgpOwpleHRl cm4gaW50IF9JT192ZnByaW50ZiAoX0lPX0ZJTEUgKl9fcmVzdHJpY3QsIGNvbnN0IGNoYXIgKl9f cmVzdHJpY3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCkgdGhyb3cg KCk7CmV4dGVybiBfX3NzaXplX3QgX0lPX3BhZG4gKF9JT19GSUxFICosIGludCwgX19zc2l6ZV90 KSB0aHJvdyAoKTsKZXh0ZXJuIHNpemVfdCBfSU9fc2dldG4gKF9JT19GSUxFICosIHZvaWQgKiwg c2l6ZV90KSB0aHJvdyAoKTsKCmV4dGVybiBfX29mZjY0X3QgX0lPX3NlZWtvZmYgKF9JT19GSUxF ICosIF9fb2ZmNjRfdCwgaW50LCBpbnQpIHRocm93ICgpOwpleHRlcm4gX19vZmY2NF90IF9JT19z ZWVrcG9zIChfSU9fRklMRSAqLCBfX29mZjY0X3QsIGludCkgdGhyb3cgKCk7CgpleHRlcm4gdm9p ZCBfSU9fZnJlZV9iYWNrdXBfYXJlYSAoX0lPX0ZJTEUgKikgdGhyb3cgKCk7CgoKZXh0ZXJuIHdp bnRfdCBfSU9fZ2V0d2MgKF9JT19GSUxFICpfX2ZwKSB0aHJvdyAoKTsKZXh0ZXJuIHdpbnRfdCBf SU9fcHV0d2MgKHdjaGFyX3QgX193YywgX0lPX0ZJTEUgKl9fZnApIHRocm93ICgpOwpleHRlcm4g aW50IF9JT19md2lkZSAoX0lPX0ZJTEUgKl9fZnAsIGludCBfX21vZGUpIHRocm93ICgpOwojIDUw NSAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKZXh0ZXJuIGludCBfSU9fdmZ3c2NhbmYgKF9JT19G SUxFICogX19yZXN0cmljdCwgY29uc3Qgd2NoYXJfdCAqIF9fcmVzdHJpY3QsCiAgICAgICAgICAg ICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCwgaW50ICpfX3Jlc3RyaWN0KSB0aHJvdyAoKTsK ZXh0ZXJuIGludCBfSU9fdmZ3cHJpbnRmIChfSU9fRklMRSAqX19yZXN0cmljdCwgY29uc3Qgd2No YXJfdCAqX19yZXN0cmljdCwKICAgICAgICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlz dCkgdGhyb3cgKCk7CmV4dGVybiBfX3NzaXplX3QgX0lPX3dwYWRuIChfSU9fRklMRSAqLCB3aW50 X3QsIF9fc3NpemVfdCkgdGhyb3cgKCk7CmV4dGVybiB2b2lkIF9JT19mcmVlX3diYWNrdXBfYXJl YSAoX0lPX0ZJTEUgKikgdGhyb3cgKCk7CgoKCn0KIyA3NSAiL3Vzci9jeWdudXMvYmluLy4uL2xp Yi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMS4xL2luY2x1ZGUvc3RkaW8uaCIgMiAzCgoK Cgp0eXBlZGVmIF9fZ251Y192YV9saXN0IF9fbm90X3ZhX2xpc3RfXzsKIyA4OSAiL3Vzci9jeWdu dXMvYmluLy4uL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMS4xL2luY2x1ZGUvc3Rk aW8uaCIgMwp0eXBlZGVmIF9HX2Zwb3NfdCBmcG9zX3Q7CgoKCgp0eXBlZGVmIF9HX2Zwb3M2NF90 IGZwb3M2NF90OwojIDEzOCAiL3Vzci9jeWdudXMvYmluLy4uL2xpYi9nY2MtbGliL2k2ODYtcGMt bGludXgtZ251LzMuMS4xL2luY2x1ZGUvc3RkaW8uaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRz L3N0ZGlvX2xpbS5oIiAxIDMKIyAxMzkgIi91c3IvY3lnbnVzL2Jpbi8uLi9saWIvZ2NjLWxpYi9p Njg2LXBjLWxpbnV4LWdudS8zLjEuMS9pbmNsdWRlL3N0ZGlvLmgiIDIgMwoKCgpleHRlcm4gRklM RSAqc3RkaW47CmV4dGVybiBGSUxFICpzdGRvdXQ7CmV4dGVybiBGSUxFICpzdGRlcnI7CiMgMTUz ICIvdXNyL2N5Z251cy9iaW4vLi4vbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4xLjEv aW5jbHVkZS9zdGRpby5oIiAzCmV4dGVybiBpbnQgcmVtb3ZlIChfX2NvbnN0IGNoYXIgKl9fZmls ZW5hbWUpIHRocm93ICgpOwoKZXh0ZXJuIGludCByZW5hbWUgKF9fY29uc3QgY2hhciAqX19vbGQs IF9fY29uc3QgY2hhciAqX19uZXcpIHRocm93ICgpOwoKCgoKZXh0ZXJuIEZJTEUgKnRtcGZpbGUg KHZvaWQpIHRocm93ICgpOwojIDE2OSAiL3Vzci9jeWdudXMvYmluLy4uL2xpYi9nY2MtbGliL2k2 ODYtcGMtbGludXgtZ251LzMuMS4xL2luY2x1ZGUvc3RkaW8uaCIgMwpleHRlcm4gRklMRSAqdG1w ZmlsZTY0ICh2b2lkKSB0aHJvdyAoKTsKCgpleHRlcm4gY2hhciAqdG1wbmFtIChjaGFyICpfX3Mp IHRocm93ICgpOwoKCgoKZXh0ZXJuIGNoYXIgKnRtcG5hbV9yIChjaGFyICpfX3MpIHRocm93ICgp OwojIDE4OSAiL3Vzci9jeWdudXMvYmluLy4uL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251 LzMuMS4xL2luY2x1ZGUvc3RkaW8uaCIgMwpleHRlcm4gY2hhciAqdGVtcG5hbSAoX19jb25zdCBj aGFyICpfX2RpciwgX19jb25zdCBjaGFyICpfX3BmeCkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0 ZV9fICgoX19tYWxsb2NfXykpOwoKCgoKZXh0ZXJuIGludCBmY2xvc2UgKEZJTEUgKl9fc3RyZWFt KSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgZmZsdXNoIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7 CgoKCmV4dGVybiBpbnQgZmZsdXNoX3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7 CgoKCgpleHRlcm4gaW50IGZjbG9zZWFsbCAodm9pZCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIEZJ TEUgKmZvcGVuIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19maWxlbmFtZSwKICAgICAgICAg ICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19tb2RlcykgdGhyb3cgKCk7Cgpl eHRlcm4gRklMRSAqZnJlb3BlbiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZmlsZW5hbWUs CiAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19tb2RlcywK ICAgICAgICAgICAgICAgICAgICAgIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgp OwojIDIzMyAiL3Vzci9jeWdudXMvYmluLy4uL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251 LzMuMS4xL2luY2x1ZGUvc3RkaW8uaCIgMwpleHRlcm4gRklMRSAqZm9wZW42NCAoX19jb25zdCBj aGFyICpfX3Jlc3RyaWN0IF9fZmlsZW5hbWUsCiAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0 IGNoYXIgKl9fcmVzdHJpY3QgX19tb2RlcykgdGhyb3cgKCk7CmV4dGVybiBGSUxFICpmcmVvcGVu NjQgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZpbGVuYW1lLAogICAgICAgICAgICAgICAg ICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19tb2RlcywKICAgICAgICAgICAgICAg ICAgICAgICAgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgpleHRlcm4g RklMRSAqZmRvcGVuIChpbnQgX19mZCwgX19jb25zdCBjaGFyICpfX21vZGVzKSB0aHJvdyAoKTsK CgoKCgpleHRlcm4gRklMRSAqZm9wZW5jb29raWUgKHZvaWQgKl9fcmVzdHJpY3QgX19tYWdpY19j b29raWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0 IF9fbW9kZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX0lPX2Nvb2tpZV9pb19mdW5jdGlv bnNfdCBfX2lvX2Z1bmNzKSB0aHJvdyAoKTsKCgpleHRlcm4gRklMRSAqZm1lbW9wZW4gKHZvaWQg Kl9fcywgc2l6ZV90IF9fbGVuLCBfX2NvbnN0IGNoYXIgKl9fbW9kZXMpIHRocm93ICgpOwoKCgoK ZXh0ZXJuIEZJTEUgKm9wZW5fbWVtc3RyZWFtIChjaGFyICoqX19yZXN0cmljdCBfX2J1ZmxvYywK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKl9fcmVzdHJpY3QgX19zaXplbG9j KSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gdm9pZCBzZXRidWYgKEZJTEUgKl9fcmVzdHJpY3QgX19z dHJlYW0sIGNoYXIgKl9fcmVzdHJpY3QgX19idWYpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHNl dHZidWYgKEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sIGNoYXIgKl9fcmVzdHJpY3QgX19idWYs CiAgICAgICAgICAgICAgICAgICAgaW50IF9fbW9kZXMsIHNpemVfdCBfX24pIHRocm93ICgpOwoK CgoKZXh0ZXJuIHZvaWQgc2V0YnVmZmVyIChGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLCBjaGFy ICpfX3Jlc3RyaWN0IF9fYnVmLAogICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX3NpemUp IHRocm93ICgpOwoKCmV4dGVybiB2b2lkIHNldGxpbmVidWYgKEZJTEUgKl9fc3RyZWFtKSB0aHJv dyAoKTsKCgoKCmV4dGVybiBpbnQgZnByaW50ZiAoRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSwK ICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4u LikgdGhyb3cgKCk7CgpleHRlcm4gaW50IHByaW50ZiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0 IF9fZm9ybWF0LCAuLi4pIHRocm93ICgpOwoKZXh0ZXJuIGludCBzcHJpbnRmIChjaGFyICpfX3Jl c3RyaWN0IF9fcywKICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3Qg X19mb3JtYXQsIC4uLikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCB2ZnByaW50ZiAoRklMRSAqX19y ZXN0cmljdCBfX3MsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwKICAgICAgICAg ICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3QgX19hcmcpIHRocm93ICgpOwoKZXh0ZXJuIGludCB2 cHJpbnRmIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIF9fZ251Y192YV9saXN0 IF9fYXJnKQogICAgIHRocm93ICgpOwoKZXh0ZXJuIGludCB2c3ByaW50ZiAoY2hhciAqX19yZXN0 cmljdCBfX3MsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwKICAgICAgICAgICAg ICAgICAgICAgX19nbnVjX3ZhX2xpc3QgX19hcmcpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHNu cHJpbnRmIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbWF4bGVuLAogICAgICAgICAg ICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikKICAgICB0 aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMywgNCkpKTsK CmV4dGVybiBpbnQgdnNucHJpbnRmIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbWF4 bGVuLAogICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9y bWF0LCBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo X19mb3JtYXRfXyAoX19wcmludGZfXywgMywgMCkpKTsKCgoKCgpleHRlcm4gaW50IHZhc3ByaW50 ZiAoY2hhciAqKl9fcmVzdHJpY3QgX19wdHIsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Ys CiAgICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICB0aHJvdyAo KSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMiwgMCkpKTsKZXh0ZXJu IGludCBfX2FzcHJpbnRmIChjaGFyICoqX19yZXN0cmljdCBfX3B0ciwKICAgICAgICAgICAgICAg ICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mbXQsIC4uLikKICAgICB0aHJvdyAo KSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMiwgMykpKTsKZXh0ZXJu IGludCBhc3ByaW50ZiAoY2hhciAqKl9fcmVzdHJpY3QgX19wdHIsCiAgICAgICAgICAgICAgICAg ICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZtdCwgLi4uKQogICAgIHRocm93ICgpIF9f YXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAyLCAzKSkpOwoKCmV4dGVybiBp bnQgdmRwcmludGYgKGludCBfX2ZkLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mbXQsCiAg ICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0IF9fYXJnKQogICAgIHRocm93ICgpIF9f YXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAyLCAwKSkpOwpleHRlcm4gaW50 IGRwcmludGYgKGludCBfX2ZkLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mbXQsIC4uLikK ICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMiwg MykpKTsKCgoKCmV4dGVybiBpbnQgZnNjYW5mIChGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLAog ICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4p IHRocm93ICgpOwoKZXh0ZXJuIGludCBzY2FuZiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9f Zm9ybWF0LCAuLi4pIHRocm93ICgpOwoKZXh0ZXJuIGludCBzc2NhbmYgKF9fY29uc3QgY2hhciAq X19yZXN0cmljdCBfX3MsCiAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJp Y3QgX19mb3JtYXQsIC4uLikgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgdmZzY2FuZiAoRklMRSAq X19yZXN0cmljdCBfX3MsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwKICAgICAg ICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICB0aHJvdyAoKSBfX2F0dHJp YnV0ZV9fICgoX19mb3JtYXRfXyAoX19zY2FuZl9fLCAyLCAwKSkpOwoKCmV4dGVybiBpbnQgdnNj YW5mIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIF9fZ251Y192YV9saXN0IF9f YXJnKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3NjYW5mX18s IDEsIDApKSk7CgoKZXh0ZXJuIGludCB2c3NjYW5mIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3Qg X19zLAogICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1h dCwgX19nbnVjX3ZhX2xpc3QgX19hcmcpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9f Zm9ybWF0X18gKF9fc2NhbmZfXywgMiwgMCkpKTsKCgoKCmV4dGVybiBpbnQgZmdldGMgKEZJTEUg Kl9fc3RyZWFtKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBnZXRjIChGSUxFICpfX3N0cmVhbSkgdGhy b3cgKCk7CgoKZXh0ZXJuIGludCBnZXRjaGFyICh2b2lkKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVy biBpbnQgZ2V0Y191bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwpleHRlcm4gaW50 IGdldGNoYXJfdW5sb2NrZWQgKHZvaWQpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBmZ2V0Y191 bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBmcHV0YyAo aW50IF9fYywgRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwpleHRlcm4gaW50IHB1dGMgKGludCBf X2MsIEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB1dGNoYXIgKGludCBf X2MpIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIGludCBmcHV0Y191bmxvY2tlZCAoaW50IF9fYywg RklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBwdXRjX3VubG9ja2VkIChp bnQgX19jLCBGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVybiBpbnQgcHV0Y2hhcl91bmxv Y2tlZCAoaW50IF9fYykgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBnZXR3IChGSUxFICpfX3N0 cmVhbSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdXR3IChpbnQgX193LCBGSUxFICpfX3N0cmVh bSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hhciAqZmdldHMgKGNoYXIgKl9fcmVzdHJpY3QgX19z LCBpbnQgX19uLCBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKQogICAgIHRocm93ICgpOwoKCgpl eHRlcm4gY2hhciAqZmdldHNfdW5sb2NrZWQgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBpbnQgX19u LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0p IHRocm93ICgpOwoKCgoKZXh0ZXJuIGNoYXIgKmdldHMgKGNoYXIgKl9fcykgdGhyb3cgKCk7CiMg NDM3ICIvdXNyL2N5Z251cy9iaW4vLi4vbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4x LjEvaW5jbHVkZS9zdGRpby5oIiAzCmV4dGVybiBfX3NzaXplX3QgX19nZXRkZWxpbSAoY2hhciAq Kl9fcmVzdHJpY3QgX19saW5lcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6 ZV90ICpfX3Jlc3RyaWN0IF9fbiwgaW50IF9fZGVsaW1pdGVyLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVybiBf X3NzaXplX3QgZ2V0ZGVsaW0gKGNoYXIgKipfX3Jlc3RyaWN0IF9fbGluZXB0ciwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBzaXplX3QgKl9fcmVzdHJpY3QgX19uLCBpbnQgX19kZWxpbWl0 ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRklMRSAqX19yZXN0cmljdCBfX3N0cmVh bSkgdGhyb3cgKCk7CgoKZXh0ZXJuIF9fc3NpemVfdCBnZXRsaW5lIChjaGFyICoqX19yZXN0cmlj dCBfX2xpbmVwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKl9fcmVzdHJp Y3QgX19uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgRklMRSAqX19yZXN0cmljdCBfX3N0 cmVhbSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGZwdXRzIChfX2NvbnN0IGNoYXIgKl9fcmVz dHJpY3QgX19zLCBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKQogICAgIHRocm93ICgpOwoKCgpl eHRlcm4gaW50IGZwdXRzX3VubG9ja2VkIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zLAog ICAgICAgICAgICAgICAgICAgICAgICAgICBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0aHJv dyAoKTsKCgoKZXh0ZXJuIGludCBwdXRzIChfX2NvbnN0IGNoYXIgKl9fcykgdGhyb3cgKCk7CgoK CmV4dGVybiBpbnQgdW5nZXRjIChpbnQgX19jLCBGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoK CmV4dGVybiBzaXplX3QgZnJlYWQgKHZvaWQgKl9fcmVzdHJpY3QgX19wdHIsIHNpemVfdCBfX3Np emUsCiAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX24sIEZJTEUgKl9fcmVzdHJpY3QgX19z dHJlYW0pIHRocm93ICgpOwoKZXh0ZXJuIHNpemVfdCBmd3JpdGUgKF9fY29uc3Qgdm9pZCAqX19y ZXN0cmljdCBfX3B0ciwgc2l6ZV90IF9fc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgIHNpemVf dCBfX24sIEZJTEUgKl9fcmVzdHJpY3QgX19zKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHNpemVfdCBm cmVhZF91bmxvY2tlZCAodm9pZCAqX19yZXN0cmljdCBfX3B0ciwgc2l6ZV90IF9fc2l6ZSwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbiwgRklMRSAqX19yZXN0cmljdCBf X3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVybiBzaXplX3QgZndyaXRlX3VubG9ja2VkIChfX2NvbnN0 IHZvaWQgKl9fcmVzdHJpY3QgX19wdHIsIHNpemVfdCBfX3NpemUsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBzaXplX3QgX19uLCBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0aHJv dyAoKTsKCgoKCmV4dGVybiBpbnQgZnNlZWsgKEZJTEUgKl9fc3RyZWFtLCBsb25nIGludCBfX29m ZiwgaW50IF9fd2hlbmNlKSB0aHJvdyAoKTsKCmV4dGVybiBsb25nIGludCBmdGVsbCAoRklMRSAq X19zdHJlYW0pIHRocm93ICgpOwoKZXh0ZXJuIHZvaWQgcmV3aW5kIChGSUxFICpfX3N0cmVhbSkg dGhyb3cgKCk7CiMgNTAwICIvdXNyL2N5Z251cy9iaW4vLi4vbGliL2djYy1saWIvaTY4Ni1wYy1s aW51eC1nbnUvMy4xLjEvaW5jbHVkZS9zdGRpby5oIiAzCmV4dGVybiBpbnQgZnNlZWtvIChGSUxF ICpfX3N0cmVhbSwgX19vZmZfdCBfX29mZiwgaW50IF9fd2hlbmNlKSB0aHJvdyAoKTsKCmV4dGVy biBfX29mZl90IGZ0ZWxsbyAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgpleHRlcm4gaW50 IGZnZXRwb3MgKEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sIGZwb3NfdCAqX19yZXN0cmljdCBf X3BvcykKICAgICB0aHJvdyAoKTsKCmV4dGVybiBpbnQgZnNldHBvcyAoRklMRSAqX19zdHJlYW0s IF9fY29uc3QgZnBvc190ICpfX3BvcykgdGhyb3cgKCk7CiMgNTM0ICIvdXNyL2N5Z251cy9iaW4v Li4vbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4xLjEvaW5jbHVkZS9zdGRpby5oIiAz CmV4dGVybiBpbnQgZnNlZWtvNjQgKEZJTEUgKl9fc3RyZWFtLCBfX29mZjY0X3QgX19vZmYsIGlu dCBfX3doZW5jZSkgdGhyb3cgKCk7CmV4dGVybiBfX29mZjY0X3QgZnRlbGxvNjQgKEZJTEUgKl9f c3RyZWFtKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBmZ2V0cG9zNjQgKEZJTEUgKl9fcmVzdHJpY3Qg X19zdHJlYW0sIGZwb3M2NF90ICpfX3Jlc3RyaWN0IF9fcG9zKQogICAgIHRocm93ICgpOwpleHRl cm4gaW50IGZzZXRwb3M2NCAoRklMRSAqX19zdHJlYW0sIF9fY29uc3QgZnBvczY0X3QgKl9fcG9z KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHZvaWQgY2xlYXJlcnIgKEZJTEUgKl9fc3RyZWFtKSB0aHJv dyAoKTsKCmV4dGVybiBpbnQgZmVvZiAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKZXh0ZXJu IGludCBmZXJyb3IgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHZvaWQgY2xl YXJlcnJfdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBmZW9m X3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVybiBpbnQgZmVycm9yX3Vu bG9ja2VkIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gdm9pZCBwZXJyb3Ig KF9fY29uc3QgY2hhciAqX19zKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgc3lzX25lcnI7CmV4 dGVybiBfX2NvbnN0IGNoYXIgKl9fY29uc3Qgc3lzX2Vycmxpc3RbXTsKCgpleHRlcm4gaW50IF9z eXNfbmVycjsKZXh0ZXJuIF9fY29uc3QgY2hhciAqX19jb25zdCBfc3lzX2Vycmxpc3RbXTsKCgoK CgpleHRlcm4gaW50IGZpbGVubyAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgoKZXh0ZXJu IGludCBmaWxlbm9fdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCgoKZXh0 ZXJuIEZJTEUgKnBvcGVuIChfX2NvbnN0IGNoYXIgKl9fY29tbWFuZCwgX19jb25zdCBjaGFyICpf X21vZGVzKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHBjbG9zZSAoRklMRSAqX19zdHJlYW0pIHRo cm93ICgpOwoKCgoKCmV4dGVybiBjaGFyICpjdGVybWlkIChjaGFyICpfX3MpIHRocm93ICgpOwoK CgoKCmV4dGVybiBjaGFyICpjdXNlcmlkIChjaGFyICpfX3MpIHRocm93ICgpOwoKCgoKc3RydWN0 IG9ic3RhY2s7CgoKZXh0ZXJuIGludCBvYnN0YWNrX3ByaW50ZiAoc3RydWN0IG9ic3RhY2sgKl9f cmVzdHJpY3QgX19vYnN0YWNrLAogICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNo YXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikgdGhyb3cgKCk7CmV4dGVybiBpbnQgb2JzdGFj a192cHJpbnRmIChzdHJ1Y3Qgb2JzdGFjayAqX19yZXN0cmljdCBfX29ic3RhY2ssCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCBfX2FyZ3MpIHRocm93ICgp OwoKCgoKCgoKZXh0ZXJuIHZvaWQgZmxvY2tmaWxlIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7 CgoKCmV4dGVybiBpbnQgZnRyeWxvY2tmaWxlIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoK ZXh0ZXJuIHZvaWQgZnVubG9ja2ZpbGUgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKIyA2NDQg Ii91c3IvY3lnbnVzL2Jpbi8uLi9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjEuMS9p bmNsdWRlL3N0ZGlvLmgiIDMKfQojIDUzICIvdXNyL2N5Z251cy9iaW4vLi4vaW5jbHVkZS9jKysv My4xLjEvY3N0ZGlvIiAyIDMKIyA5NyAiL3Vzci9jeWdudXMvYmluLy4uL2luY2x1ZGUvYysrLzMu MS4xL2NzdGRpbyIgMwpuYW1lc3BhY2Ugc3RkCnsKICB1c2luZyA6OkZJTEU7CiAgdXNpbmcgOjpm cG9zX3Q7CgogIHVzaW5nIDo6Y2xlYXJlcnI7CiAgdXNpbmcgOjpmY2xvc2U7CiAgdXNpbmcgOjpm ZW9mOwogIHVzaW5nIDo6ZmVycm9yOwogIHVzaW5nIDo6ZmZsdXNoOwogIHVzaW5nIDo6ZmdldGM7 CiAgdXNpbmcgOjpmZ2V0cG9zOwogIHVzaW5nIDo6ZmdldHM7CiAgdXNpbmcgOjpmb3BlbjsKICB1 c2luZyA6OmZwcmludGY7CiAgdXNpbmcgOjpmcHV0YzsKICB1c2luZyA6OmZwdXRzOwogIHVzaW5n IDo6ZnJlYWQ7CiAgdXNpbmcgOjpmcmVvcGVuOwogIHVzaW5nIDo6ZnNjYW5mOwogIHVzaW5nIDo6 ZnNlZWs7CiAgdXNpbmcgOjpmc2V0cG9zOwogIHVzaW5nIDo6ZnRlbGw7CiAgdXNpbmcgOjpmd3Jp dGU7CiAgdXNpbmcgOjpnZXRjOwogIHVzaW5nIDo6Z2V0Y2hhcjsKICB1c2luZyA6OmdldHM7CiAg dXNpbmcgOjpwZXJyb3I7CiAgdXNpbmcgOjpwcmludGY7CiAgdXNpbmcgOjpwdXRjOwogIHVzaW5n IDo6cHV0Y2hhcjsKICB1c2luZyA6OnB1dHM7CiAgdXNpbmcgOjpyZW1vdmU7CiAgdXNpbmcgOjpy ZW5hbWU7CiAgdXNpbmcgOjpyZXdpbmQ7CiAgdXNpbmcgOjpzY2FuZjsKICB1c2luZyA6OnNldGJ1 ZjsKICB1c2luZyA6OnNldHZidWY7CiAgdXNpbmcgOjpzcHJpbnRmOwogIHVzaW5nIDo6c3NjYW5m OwogIHVzaW5nIDo6dG1wZmlsZTsKICB1c2luZyA6OnRtcG5hbTsKICB1c2luZyA6OnVuZ2V0YzsK ICB1c2luZyA6OnZmcHJpbnRmOwogIHVzaW5nIDo6dnByaW50ZjsKICB1c2luZyA6OnZzcHJpbnRm Owp9CiMgMTUzICIvdXNyL2N5Z251cy9iaW4vLi4vaW5jbHVkZS9jKysvMy4xLjEvY3N0ZGlvIiAz Cm5hbWVzcGFjZSBfX2dudV9jeHgKewogIHVzaW5nIDo6c25wcmludGY7CiAgdXNpbmcgOjp2ZnNj YW5mOwogIHVzaW5nIDo6dnNjYW5mOwogIHVzaW5nIDo6dnNucHJpbnRmOwogIHVzaW5nIDo6dnNz Y2FuZjsKfQoKbmFtZXNwYWNlIHN0ZAp7CiAgdXNpbmcgX19nbnVfY3h4OjpzbnByaW50ZjsKICB1 c2luZyBfX2dudV9jeHg6OnZmc2NhbmY7CiAgdXNpbmcgX19nbnVfY3h4Ojp2c2NhbmY7CiAgdXNp bmcgX19nbnVfY3h4Ojp2c25wcmludGY7CiAgdXNpbmcgX19nbnVfY3h4Ojp2c3NjYW5mOwp9CiMg MzYgIi91c3IvY3lnbnVzL2Jpbi8uLi9pbmNsdWRlL2MrKy8zLjEuMS9pNjg2LXBjLWxpbnV4LWdu dS9iaXRzL2MrK2lvLmgiIDIgMwoKIyAxICIvdXNyL2N5Z251cy9iaW4vLi4vaW5jbHVkZS9jKysv My4xLjEvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9ndGhyLmgiIDEgMwojIDk4ICIvdXNyL2N5Z251 cy9iaW4vLi4vaW5jbHVkZS9jKysvMy4xLjEvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9ndGhyLmgi IDMKIyAxICIvdXNyL2N5Z251cy9iaW4vLi4vaW5jbHVkZS9jKysvMy4xLjEvaTY4Ni1wYy1saW51 eC1nbnUvYml0cy9ndGhyLWRlZmF1bHQuaCIgMSAzCiMgMzcgIi91c3IvY3lnbnVzL2Jpbi8uLi9p bmNsdWRlL2MrKy8zLjEuMS9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2d0aHItZGVmYXVsdC5oIiAz CiMgMSAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMSAzCiMgMjAgIi91c3IvaW5jbHVkZS9wdGhy ZWFkLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvc2NoZWQuaCIgMSAzCiMgMjkgIi91c3IvaW5jbHVk ZS9zY2hlZC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMSAzCiMgMTA2ICIvdXNyL2lu Y2x1ZGUvdGltZS5oIiAzCnN0cnVjdCB0aW1lc3BlYwogIHsKICAgIF9fdGltZV90IHR2X3NlYzsK ICAgIGxvbmcgaW50IHR2X25zZWM7CiAgfTsKIyAzMCAiL3Vzci9pbmNsdWRlL3NjaGVkLmgiIDIg MwoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc2NoZWQuaCIgMSAzCiMgNDcgIi91c3IvaW5jbHVk ZS9iaXRzL3NjaGVkLmgiIDMKc3RydWN0IHNjaGVkX3BhcmFtCiAgewogICAgaW50IF9fc2NoZWRf cHJpb3JpdHk7CiAgfTsKCmV4dGVybiAiQyIgewoKCgpleHRlcm4gaW50IGNsb25lIChpbnQgKCpf X2ZuKSAodm9pZCAqX19hcmcpLCB2b2lkICpfX2NoaWxkX3N0YWNrLAogICAgICAgICAgICAgICAg ICBpbnQgX19mbGFncywgdm9pZCAqX19hcmcpIHRocm93ICgpOwoKCn0KIyAzMyAiL3Vzci9pbmNs dWRlL3NjaGVkLmgiIDIgMwoKCgoKZXh0ZXJuICJDIiB7CgoKZXh0ZXJuIGludCBzY2hlZF9zZXRw YXJhbSAoX19waWRfdCBfX3BpZCwgX19jb25zdCBzdHJ1Y3Qgc2NoZWRfcGFyYW0gKl9fcGFyYW0p CiAgICAgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBzY2hlZF9nZXRwYXJhbSAoX19waWRfdCBfX3Bp ZCwgc3RydWN0IHNjaGVkX3BhcmFtICpfX3BhcmFtKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHNj aGVkX3NldHNjaGVkdWxlciAoX19waWRfdCBfX3BpZCwgaW50IF9fcG9saWN5LAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBzdHJ1Y3Qgc2NoZWRfcGFyYW0gKl9fcGFyYW0p IHRocm93ICgpOwoKCmV4dGVybiBpbnQgc2NoZWRfZ2V0c2NoZWR1bGVyIChfX3BpZF90IF9fcGlk KSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHNjaGVkX3lpZWxkICh2b2lkKSB0aHJvdyAoKTsKCgpl eHRlcm4gaW50IHNjaGVkX2dldF9wcmlvcml0eV9tYXggKGludCBfX2FsZ29yaXRobSkgdGhyb3cg KCk7CgoKZXh0ZXJuIGludCBzY2hlZF9nZXRfcHJpb3JpdHlfbWluIChpbnQgX19hbGdvcml0aG0p IHRocm93ICgpOwoKCmV4dGVybiBpbnQgc2NoZWRfcnJfZ2V0X2ludGVydmFsIChfX3BpZF90IF9f cGlkLCBzdHJ1Y3QgdGltZXNwZWMgKl9fdCkgdGhyb3cgKCk7Cgp9CiMgMjEgIi91c3IvaW5jbHVk ZS9wdGhyZWFkLmgiIDIgMwojIDEgIi91c3IvaW5jbHVkZS90aW1lLmgiIDEgMwojIDMwICIvdXNy L2luY2x1ZGUvdGltZS5oIiAzCmV4dGVybiAiQyIgewoKCgoKCgoKIyAxICIvdXNyL2N5Z251cy9i aW4vLi4vbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4xLjEvaW5jbHVkZS9zdGRkZWYu aCIgMSAzCiMgMzkgIi91c3IvaW5jbHVkZS90aW1lLmgiIDIgMwoKCgojIDEgIi91c3IvaW5jbHVk ZS9iaXRzL3RpbWUuaCIgMSAzCiMgNDMgIi91c3IvaW5jbHVkZS90aW1lLmgiIDIgMwojIDU5ICIv dXNyL2luY2x1ZGUvdGltZS5oIiAzCnR5cGVkZWYgX19jbG9ja190IGNsb2NrX3Q7CiMgNzAgIi91 c3IvaW5jbHVkZS90aW1lLmgiIDMKdHlwZWRlZiBfX3RpbWVfdCB0aW1lX3Q7CiMgODIgIi91c3Iv aW5jbHVkZS90aW1lLmgiIDMKdHlwZWRlZiBfX2Nsb2NraWRfdCBjbG9ja2lkX3Q7CiMgOTQgIi91 c3IvaW5jbHVkZS90aW1lLmgiIDMKdHlwZWRlZiBfX3RpbWVyX3QgdGltZXJfdDsKIyAxMTggIi91 c3IvaW5jbHVkZS90aW1lLmgiIDMKc3RydWN0IHRtCnsKICBpbnQgdG1fc2VjOwogIGludCB0bV9t aW47CiAgaW50IHRtX2hvdXI7CiAgaW50IHRtX21kYXk7CiAgaW50IHRtX21vbjsKICBpbnQgdG1f eWVhcjsKICBpbnQgdG1fd2RheTsKICBpbnQgdG1feWRheTsKICBpbnQgdG1faXNkc3Q7CgoKICBs b25nIGludCB0bV9nbXRvZmY7CiAgX19jb25zdCBjaGFyICp0bV96b25lOwoKCgoKfTsKCgoKCnN0 cnVjdCBpdGltZXJzcGVjCiAgewogICAgc3RydWN0IHRpbWVzcGVjIGl0X2ludGVydmFsOwogICAg c3RydWN0IHRpbWVzcGVjIGl0X3ZhbHVlOwogIH07CgoKc3RydWN0IHNpZ2V2ZW50OwoKCgoKCnR5 cGVkZWYgX19waWRfdCBwaWRfdDsKCgoKCgoKCmV4dGVybiBjbG9ja190IGNsb2NrICh2b2lkKSB0 aHJvdyAoKTsKCgpleHRlcm4gdGltZV90IHRpbWUgKHRpbWVfdCAqX190aW1lcikgdGhyb3cgKCk7 CgoKZXh0ZXJuIGRvdWJsZSBkaWZmdGltZSAodGltZV90IF9fdGltZTEsIHRpbWVfdCBfX3RpbWUw KQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gdGlt ZV90IG1rdGltZSAoc3RydWN0IHRtICpfX3RwKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gc2l6ZV90 IHN0cmZ0aW1lIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbWF4c2l6ZSwKICAgICAg ICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LAogICAg ICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHN0cnVjdCB0bSAqX19yZXN0cmljdCBfX3RwKSB0 aHJvdyAoKTsKCgoKCmV4dGVybiBjaGFyICpzdHJwdGltZSAoX19jb25zdCBjaGFyICpfX3Jlc3Ry aWN0IF9fcywKICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3Qg X19mbXQsIHN0cnVjdCB0bSAqX190cCkKICAgICB0aHJvdyAoKTsKCgoKCgpleHRlcm4gc3RydWN0 IHRtICpnbXRpbWUgKF9fY29uc3QgdGltZV90ICpfX3RpbWVyKSB0aHJvdyAoKTsKCgoKZXh0ZXJu IHN0cnVjdCB0bSAqbG9jYWx0aW1lIChfX2NvbnN0IHRpbWVfdCAqX190aW1lcikgdGhyb3cgKCk7 CgoKCgpleHRlcm4gc3RydWN0IHRtICpnbXRpbWVfciAoX19jb25zdCB0aW1lX3QgKl9fcmVzdHJp Y3QgX190aW1lciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB0bSAqX19yZXN0 cmljdCBfX3RwKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHN0cnVjdCB0bSAqbG9jYWx0aW1lX3IgKF9f Y29uc3QgdGltZV90ICpfX3Jlc3RyaWN0IF9fdGltZXIsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBzdHJ1Y3QgdG0gKl9fcmVzdHJpY3QgX190cCkgdGhyb3cgKCk7CgoKCgpleHRlcm4g Y2hhciAqYXNjdGltZSAoX19jb25zdCBzdHJ1Y3QgdG0gKl9fdHApIHRocm93ICgpOwoKCmV4dGVy biBjaGFyICpjdGltZSAoX19jb25zdCB0aW1lX3QgKl9fdGltZXIpIHRocm93ICgpOwoKCgoKCgpl eHRlcm4gY2hhciAqYXNjdGltZV9yIChfX2NvbnN0IHN0cnVjdCB0bSAqX19yZXN0cmljdCBfX3Rw LAogICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmKSB0aHJvdyAo KTsKCgpleHRlcm4gY2hhciAqY3RpbWVfciAoX19jb25zdCB0aW1lX3QgKl9fcmVzdHJpY3QgX190 aW1lciwKICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKl9fcmVzdHJpY3QgX19idWYpIHRocm93 ICgpOwoKCgoKZXh0ZXJuIGNoYXIgKl9fdHpuYW1lWzJdOwpleHRlcm4gaW50IF9fZGF5bGlnaHQ7 CmV4dGVybiBsb25nIGludCBfX3RpbWV6b25lOwoKCgoKZXh0ZXJuIGNoYXIgKnR6bmFtZVsyXTsK CgoKZXh0ZXJuIHZvaWQgdHpzZXQgKHZvaWQpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IGRheWxp Z2h0OwpleHRlcm4gbG9uZyBpbnQgdGltZXpvbmU7CgoKCgoKZXh0ZXJuIGludCBzdGltZSAoX19j b25zdCB0aW1lX3QgKl9fd2hlbikgdGhyb3cgKCk7CiMgMjcxICIvdXNyL2luY2x1ZGUvdGltZS5o IiAzCmV4dGVybiB0aW1lX3QgdGltZWdtIChzdHJ1Y3QgdG0gKl9fdHApIHRocm93ICgpOwoKCmV4 dGVybiB0aW1lX3QgdGltZWxvY2FsIChzdHJ1Y3QgdG0gKl9fdHApIHRocm93ICgpOwoKCmV4dGVy biBpbnQgZHlzaXplIChpbnQgX195ZWFyKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25z dF9fKSk7CgoKCgoKZXh0ZXJuIGludCBuYW5vc2xlZXAgKF9fY29uc3Qgc3RydWN0IHRpbWVzcGVj ICpfX3JlcXVlc3RlZF90aW1lLAogICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHRpbWVzcGVj ICpfX3JlbWFpbmluZykgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgY2xvY2tfZ2V0cmVzIChjbG9j a2lkX3QgX19jbG9ja19pZCwgc3RydWN0IHRpbWVzcGVjICpfX3JlcykgdGhyb3cgKCk7CgoKZXh0 ZXJuIGludCBjbG9ja19nZXR0aW1lIChjbG9ja2lkX3QgX19jbG9ja19pZCwgc3RydWN0IHRpbWVz cGVjICpfX3RwKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IGNsb2NrX3NldHRpbWUgKGNsb2NraWRf dCBfX2Nsb2NrX2lkLCBfX2NvbnN0IHN0cnVjdCB0aW1lc3BlYyAqX190cCkKICAgICB0aHJvdyAo KTsKCgoKZXh0ZXJuIGludCBjbG9ja19uYW5vc2xlZXAgKGNsb2NraWRfdCBfX2Nsb2NrX2lkLCBp bnQgX19mbGFncywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgc3RydWN0IHRp bWVzcGVjICpfX3JlcSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB0aW1lc3Bl YyAqX19yZW0pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgY2xvY2tfZ2V0Y3B1Y2xvY2tpZCAocGlk X3QgX19waWQsIGNsb2NraWRfdCAqX19jbG9ja19pZCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50 IHRpbWVyX2NyZWF0ZSAoY2xvY2tpZF90IF9fY2xvY2tfaWQsCiAgICAgICAgICAgICAgICAgICAg ICAgICBzdHJ1Y3Qgc2lnZXZlbnQgKl9fcmVzdHJpY3QgX19ldnAsCiAgICAgICAgICAgICAgICAg ICAgICAgICB0aW1lcl90ICpfX3Jlc3RyaWN0IF9fdGltZXJpZCkgdGhyb3cgKCk7CgoKZXh0ZXJu IGludCB0aW1lcl9kZWxldGUgKHRpbWVyX3QgX190aW1lcmlkKSB0aHJvdyAoKTsKCgpleHRlcm4g aW50IHRpbWVyX3NldHRpbWUgKHRpbWVyX3QgX190aW1lcmlkLCBpbnQgX19mbGFncywKICAgICAg ICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHN0cnVjdCBpdGltZXJzcGVjICpfX3Jlc3RyaWN0 IF9fdmFsdWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGl0aW1lcnNwZWMgKl9f cmVzdHJpY3QgX19vdmFsdWUpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgdGltZXJfZ2V0dGltZSAo dGltZXJfdCBfX3RpbWVyaWQsIHN0cnVjdCBpdGltZXJzcGVjICpfX3ZhbHVlKQogICAgIHRocm93 ICgpOwoKCmV4dGVybiBpbnQgdGltZXJfZ2V0b3ZlcnJ1biAodGltZXJfdCBfX3RpbWVyaWQpIHRo cm93ICgpOwojIDM0MiAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwpleHRlcm4gaW50IGdldGRhdGVf ZXJyOwoKCgoKCmV4dGVybiBzdHJ1Y3QgdG0gKmdldGRhdGUgKF9fY29uc3QgY2hhciAqX19zdHJp bmcpIHRocm93ICgpOwojIDM1NyAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwpleHRlcm4gaW50IGdl dGRhdGVfciAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3RyaW5nLAogICAgICAgICAgICAg ICAgICAgICAgc3RydWN0IHRtICpfX3Jlc3RyaWN0IF9fcmVzYnVmcCkgdGhyb3cgKCk7CgoKCn0K IyAyMiAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMiAzCgoKIyAxICIvdXNyL2luY2x1ZGUvc2ln bmFsLmgiIDEgMwojIDMxICIvdXNyL2luY2x1ZGUvc2lnbmFsLmgiIDMKZXh0ZXJuICJDIiB7Cgoj IDEgIi91c3IvaW5jbHVkZS9iaXRzL3NpZ3NldC5oIiAxIDMKIyAyMyAiL3Vzci9pbmNsdWRlL2Jp dHMvc2lnc2V0LmgiIDMKdHlwZWRlZiBpbnQgX19zaWdfYXRvbWljX3Q7CgoKCgp0eXBlZGVmIHN0 cnVjdAogIHsKICAgIHVuc2lnbmVkIGxvbmcgaW50IF9fdmFsWygxMDI0IC8gKDggKiBzaXplb2Yg KHVuc2lnbmVkIGxvbmcgaW50KSkpXTsKICB9IF9fc2lnc2V0X3Q7CiMgMzQgIi91c3IvaW5jbHVk ZS9zaWduYWwuaCIgMiAzCiMgNDggIi91c3IvaW5jbHVkZS9zaWduYWwuaCIgMwp0eXBlZGVmIF9f c2lnc2V0X3Qgc2lnc2V0X3Q7CiMgMzcxICIvdXNyL2luY2x1ZGUvc2lnbmFsLmgiIDMKfQojIDI1 ICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9wdGhy ZWFkdHlwZXMuaCIgMSAzCiMgMjYgIi91c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDIgMwojIDEgIi91 c3IvaW5jbHVkZS9iaXRzL2luaXRzcGluLmgiIDEgMwojIDI3ICIvdXNyL2luY2x1ZGUvcHRocmVh ZC5oIiAyIDMKCgpleHRlcm4gIkMiIHsKIyA1OSAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMwpl bnVtCnsKICBQVEhSRUFEX0NSRUFURV9KT0lOQUJMRSwKCiAgUFRIUkVBRF9DUkVBVEVfREVUQUNI RUQKCn07CgplbnVtCnsKICBQVEhSRUFEX0lOSEVSSVRfU0NIRUQsCgogIFBUSFJFQURfRVhQTElD SVRfU0NIRUQKCn07CgplbnVtCnsKICBQVEhSRUFEX1NDT1BFX1NZU1RFTSwKCiAgUFRIUkVBRF9T Q09QRV9QUk9DRVNTCgp9OwoKZW51bQp7CiAgUFRIUkVBRF9NVVRFWF9USU1FRF9OUCwKICBQVEhS RUFEX01VVEVYX1JFQ1VSU0lWRV9OUCwKICBQVEhSRUFEX01VVEVYX0VSUk9SQ0hFQ0tfTlAsCiAg UFRIUkVBRF9NVVRFWF9BREFQVElWRV9OUAoKICAsCiAgUFRIUkVBRF9NVVRFWF9OT1JNQUwgPSBQ VEhSRUFEX01VVEVYX1RJTUVEX05QLAogIFBUSFJFQURfTVVURVhfUkVDVVJTSVZFID0gUFRIUkVB RF9NVVRFWF9SRUNVUlNJVkVfTlAsCiAgUFRIUkVBRF9NVVRFWF9FUlJPUkNIRUNLID0gUFRIUkVB RF9NVVRFWF9FUlJPUkNIRUNLX05QLAogIFBUSFJFQURfTVVURVhfREVGQVVMVCA9IFBUSFJFQURf TVVURVhfTk9STUFMCgoKCiAgLCBQVEhSRUFEX01VVEVYX0ZBU1RfTlAgPSBQVEhSRUFEX01VVEVY X0FEQVBUSVZFX05QCgp9OwoKZW51bQp7CiAgUFRIUkVBRF9QUk9DRVNTX1BSSVZBVEUsCgogIFBU SFJFQURfUFJPQ0VTU19TSEFSRUQKCn07CgoKZW51bQp7CiAgUFRIUkVBRF9SV0xPQ0tfUFJFRkVS X1JFQURFUl9OUCwKICBQVEhSRUFEX1JXTE9DS19QUkVGRVJfV1JJVEVSX05QLAogIFBUSFJFQURf UldMT0NLX1BSRUZFUl9XUklURVJfTk9OUkVDVVJTSVZFX05QLAogIFBUSFJFQURfUldMT0NLX0RF RkFVTFRfTlAgPSBQVEhSRUFEX1JXTE9DS19QUkVGRVJfV1JJVEVSX05QCn07CiMgMTMxICIvdXNy L2luY2x1ZGUvcHRocmVhZC5oIiAzCnN0cnVjdCBfcHRocmVhZF9jbGVhbnVwX2J1ZmZlcgp7CiAg dm9pZCAoKl9fcm91dGluZSkgKHZvaWQgKik7CiAgdm9pZCAqX19hcmc7CiAgaW50IF9fY2FuY2Vs dHlwZTsKICBzdHJ1Y3QgX3B0aHJlYWRfY2xlYW51cF9idWZmZXIgKl9fcHJldjsKfTsKCgoKZW51 bQp7CiAgUFRIUkVBRF9DQU5DRUxfRU5BQkxFLAoKICBQVEhSRUFEX0NBTkNFTF9ESVNBQkxFCgp9 OwplbnVtCnsKICBQVEhSRUFEX0NBTkNFTF9ERUZFUlJFRCwKCiAgUFRIUkVBRF9DQU5DRUxfQVNZ TkNIUk9OT1VTCgp9OwojIDE2MyAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMwpleHRlcm4gaW50 IHB0aHJlYWRfY3JlYXRlIChwdGhyZWFkX3QgKl9fcmVzdHJpY3QgX190aHJlYWQsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgIF9fY29uc3QgcHRocmVhZF9hdHRyX3QgKl9fcmVzdHJpY3QgX19h dHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICooKl9fc3RhcnRfcm91dGluZSkg KHZvaWQgKiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKl9fcmVzdHJpY3QgX19h cmcpIHRocm93ICgpOwoKCmV4dGVybiBwdGhyZWFkX3QgcHRocmVhZF9zZWxmICh2b2lkKSB0aHJv dyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfZXF1YWwgKHB0aHJlYWRfdCBfX3RocmVhZDEsIHB0 aHJlYWRfdCBfX3RocmVhZDIpIHRocm93ICgpOwoKCmV4dGVybiB2b2lkIHB0aHJlYWRfZXhpdCAo dm9pZCAqX19yZXR2YWwpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5f XykpOwoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2pvaW4gKHB0aHJlYWRfdCBfX3RoLCB2b2lkICoq X190aHJlYWRfcmV0dXJuKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IHB0aHJlYWRfZGV0YWNo IChwdGhyZWFkX3QgX190aCkgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0 cl9pbml0IChwdGhyZWFkX2F0dHJfdCAqX19hdHRyKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0 aHJlYWRfYXR0cl9kZXN0cm95IChwdGhyZWFkX2F0dHJfdCAqX19hdHRyKSB0aHJvdyAoKTsKCgpl eHRlcm4gaW50IHB0aHJlYWRfYXR0cl9zZXRkZXRhY2hzdGF0ZSAocHRocmVhZF9hdHRyX3QgKl9f YXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2RldGFj aHN0YXRlKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9nZXRkZXRhY2hzdGF0 ZSAoX19jb25zdCBwdGhyZWFkX2F0dHJfdCAqX19hdHRyLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgaW50ICpfX2RldGFjaHN0YXRlKSB0aHJvdyAoKTsKCgpleHRlcm4g aW50IHB0aHJlYWRfYXR0cl9zZXRzY2hlZHBhcmFtIChwdGhyZWFkX2F0dHJfdCAqX19yZXN0cmlj dCBfX2F0dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qg c3RydWN0IHNjaGVkX3BhcmFtICpfX3Jlc3RyaWN0CiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIF9fcGFyYW0pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRy X2dldHNjaGVkcGFyYW0gKF9fY29uc3QgcHRocmVhZF9hdHRyX3QgKl9fcmVzdHJpY3QKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19hdHRyLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2NoZWRfcGFyYW0gKl9fcmVzdHJpY3QgX19w YXJhbSkKICAgICB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9zZXRzY2hlZHBv bGljeSAocHRocmVhZF9hdHRyX3QgKl9fYXR0ciwgaW50IF9fcG9saWN5KQogICAgIHRocm93ICgp OwoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2dldHNjaGVkcG9saWN5IChfX2NvbnN0IHB0aHJl YWRfYXR0cl90ICpfX3Jlc3RyaWN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBfX2F0dHIsIGludCAqX19yZXN0cmljdCBfX3BvbGljeSkKICAgICB0aHJvdyAoKTsKCgpl eHRlcm4gaW50IHB0aHJlYWRfYXR0cl9zZXRpbmhlcml0c2NoZWQgKHB0aHJlYWRfYXR0cl90ICpf X2F0dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9faW5o ZXJpdCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfZ2V0aW5oZXJpdHNjaGVk IChfX2NvbnN0IHB0aHJlYWRfYXR0cl90ICpfX3Jlc3RyaWN0CiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgX19hdHRyLCBpbnQgKl9fcmVzdHJpY3QgX19pbmhlcml0KQog ICAgIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX3NldHNjb3BlIChwdGhyZWFk X2F0dHJfdCAqX19hdHRyLCBpbnQgX19zY29wZSkKICAgICB0aHJvdyAoKTsKCgpleHRlcm4gaW50 IHB0aHJlYWRfYXR0cl9nZXRzY29wZSAoX19jb25zdCBwdGhyZWFkX2F0dHJfdCAqX19yZXN0cmlj dCBfX2F0dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJp Y3QgX19zY29wZSkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX3NldGd1YXJk c2l6ZSAocHRocmVhZF9hdHRyX3QgKl9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBzaXplX3QgX19ndWFyZHNpemUpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRo cmVhZF9hdHRyX2dldGd1YXJkc2l6ZSAoX19jb25zdCBwdGhyZWFkX2F0dHJfdCAqX19yZXN0cmlj dAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYXR0ciwgc2l6ZV90ICpf X3Jlc3RyaWN0IF9fZ3VhcmRzaXplKQogICAgIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50IHB0 aHJlYWRfYXR0cl9zZXRzdGFja2FkZHIgKHB0aHJlYWRfYXR0cl90ICpfX2F0dHIsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqX19zdGFja2FkZHIpIHRocm93ICgp OwoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2dldHN0YWNrYWRkciAoX19jb25zdCBwdGhyZWFk X2F0dHJfdCAqX19yZXN0cmljdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IF9fYXR0ciwgdm9pZCAqKl9fcmVzdHJpY3QgX19zdGFja2FkZHIpCiAgICAgdGhyb3cgKCk7CgoK CgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfc2V0c3RhY2sgKHB0aHJlYWRfYXR0cl90ICpfX2F0 dHIsIHZvaWQgKl9fc3RhY2thZGRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg c2l6ZV90IF9fc3RhY2tzaXplKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9n ZXRzdGFjayAoX19jb25zdCBwdGhyZWFkX2F0dHJfdCAqX19yZXN0cmljdCBfX2F0dHIsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICoqX19yZXN0cmljdCBfX3N0YWNrYWRk ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqX19yZXN0cmljdCBf X3N0YWNrc2l6ZSkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfc2V0c3Rh Y2tzaXplIChwdGhyZWFkX2F0dHJfdCAqX19hdHRyLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHNpemVfdCBfX3N0YWNrc2l6ZSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBw dGhyZWFkX2F0dHJfZ2V0c3RhY2tzaXplIChfX2NvbnN0IHB0aHJlYWRfYXR0cl90ICpfX3Jlc3Ry aWN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19hdHRyLCBzaXplX3Qg Kl9fcmVzdHJpY3QgX19zdGFja3NpemUpCiAgICAgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgcHRo cmVhZF9nZXRhdHRyX25wIChwdGhyZWFkX3QgX190aCwgcHRocmVhZF9hdHRyX3QgKl9fYXR0cikg dGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9zZXRzY2hlZHBhcmFtIChwdGhyZWFk X3QgX190YXJnZXRfdGhyZWFkLCBpbnQgX19wb2xpY3ksCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBfX2NvbnN0IHN0cnVjdCBzY2hlZF9wYXJhbSAqX19wYXJhbSkKICAgICB0aHJv dyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfZ2V0c2NoZWRwYXJhbSAocHRocmVhZF90IF9fdGFy Z2V0X3RocmVhZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0 cmljdCBfX3BvbGljeSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBz Y2hlZF9wYXJhbSAqX19yZXN0cmljdCBfX3BhcmFtKQogICAgIHRocm93ICgpOwoKCgpleHRlcm4g aW50IHB0aHJlYWRfZ2V0Y29uY3VycmVuY3kgKHZvaWQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQg cHRocmVhZF9zZXRjb25jdXJyZW5jeSAoaW50IF9fbGV2ZWwpIHRocm93ICgpOwoKCgoKCgoKZXh0 ZXJuIGludCBwdGhyZWFkX3lpZWxkICh2b2lkKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCBw dGhyZWFkX211dGV4X2luaXQgKHB0aHJlYWRfbXV0ZXhfdCAqX19yZXN0cmljdCBfX211dGV4LAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBwdGhyZWFkX211dGV4YXR0cl90 ICpfX3Jlc3RyaWN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX211dGV4X2F0dHIp IHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9tdXRleF9kZXN0cm95IChwdGhyZWFkX211 dGV4X3QgKl9fbXV0ZXgpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9tdXRleF90cnls b2NrIChwdGhyZWFkX211dGV4X3QgKl9fbXV0ZXgpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRo cmVhZF9tdXRleF9sb2NrIChwdGhyZWFkX211dGV4X3QgKl9fbXV0ZXgpIHRocm93ICgpOwoKCgpl eHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhfdGltZWRsb2NrIChwdGhyZWFkX211dGV4X3QgKl9fcmVz dHJpY3QgX19tdXRleCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25z dCBzdHJ1Y3QgdGltZXNwZWMgKl9fcmVzdHJpY3QKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgX19hYnN0aW1lKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBwdGhyZWFkX211dGV4 X3VubG9jayAocHRocmVhZF9tdXRleF90ICpfX211dGV4KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJu IGludCBwdGhyZWFkX211dGV4YXR0cl9pbml0IChwdGhyZWFkX211dGV4YXR0cl90ICpfX2F0dHIp IHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9tdXRleGF0dHJfZGVzdHJveSAocHRocmVh ZF9tdXRleGF0dHJfdCAqX19hdHRyKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfbXV0 ZXhhdHRyX2dldHBzaGFyZWQgKF9fY29uc3QgcHRocmVhZF9tdXRleGF0dHJfdCAqCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19yZXN0cmljdCBfX2F0dHIsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fcHNo YXJlZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX211dGV4YXR0cl9zZXRwc2hhcmVk IChwdGhyZWFkX211dGV4YXR0cl90ICpfX2F0dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgaW50IF9fcHNoYXJlZCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBw dGhyZWFkX211dGV4YXR0cl9zZXR0eXBlIChwdGhyZWFkX211dGV4YXR0cl90ICpfX2F0dHIsIGlu dCBfX2tpbmQpCiAgICAgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX211dGV4YXR0cl9n ZXR0eXBlIChfX2NvbnN0IHB0aHJlYWRfbXV0ZXhhdHRyX3QgKl9fcmVzdHJpY3QKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2F0dHIsIGludCAqX19yZXN0cmljdCBfX2tp bmQpIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2NvbmRfaW5pdCAocHRocmVh ZF9jb25kX3QgKl9fcmVzdHJpY3QgX19jb25kLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBfX2NvbnN0IHB0aHJlYWRfY29uZGF0dHJfdCAqX19yZXN0cmljdAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBfX2NvbmRfYXR0cikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFk X2NvbmRfZGVzdHJveSAocHRocmVhZF9jb25kX3QgKl9fY29uZCkgdGhyb3cgKCk7CgoKZXh0ZXJu IGludCBwdGhyZWFkX2NvbmRfc2lnbmFsIChwdGhyZWFkX2NvbmRfdCAqX19jb25kKSB0aHJvdyAo KTsKCgpleHRlcm4gaW50IHB0aHJlYWRfY29uZF9icm9hZGNhc3QgKHB0aHJlYWRfY29uZF90ICpf X2NvbmQpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHB0aHJlYWRfY29uZF93YWl0IChwdGhyZWFk X2NvbmRfdCAqX19yZXN0cmljdCBfX2NvbmQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHB0aHJlYWRfbXV0ZXhfdCAqX19yZXN0cmljdCBfX211dGV4KSB0aHJvdyAoKTsKCgoKCgpleHRl cm4gaW50IHB0aHJlYWRfY29uZF90aW1lZHdhaXQgKHB0aHJlYWRfY29uZF90ICpfX3Jlc3RyaWN0 IF9fY29uZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdGhyZWFkX211dGV4 X3QgKl9fcmVzdHJpY3QgX19tdXRleCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBfX2NvbnN0IHN0cnVjdCB0aW1lc3BlYyAqX19yZXN0cmljdAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIF9fYWJzdGltZSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IHB0aHJl YWRfY29uZGF0dHJfaW5pdCAocHRocmVhZF9jb25kYXR0cl90ICpfX2F0dHIpIHRocm93ICgpOwoK CmV4dGVybiBpbnQgcHRocmVhZF9jb25kYXR0cl9kZXN0cm95IChwdGhyZWFkX2NvbmRhdHRyX3Qg Kl9fYXR0cikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2NvbmRhdHRyX2dldHBzaGFy ZWQgKF9fY29uc3QgcHRocmVhZF9jb25kYXR0cl90ICoKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIF9fcmVzdHJpY3QgX19hdHRyLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fcHNoYXJlZCkgdGhyb3cgKCk7CgoK ZXh0ZXJuIGludCBwdGhyZWFkX2NvbmRhdHRyX3NldHBzaGFyZWQgKHB0aHJlYWRfY29uZGF0dHJf dCAqX19hdHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9f cHNoYXJlZCkgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gaW50IHB0aHJlYWRfcndsb2NrX2luaXQg KHB0aHJlYWRfcndsb2NrX3QgKl9fcmVzdHJpY3QgX19yd2xvY2ssCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgX19jb25zdCBwdGhyZWFkX3J3bG9ja2F0dHJfdCAqX19yZXN0cmljdAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYXR0cikgdGhyb3cgKCk7CgoKZXh0ZXJu IGludCBwdGhyZWFkX3J3bG9ja19kZXN0cm95IChwdGhyZWFkX3J3bG9ja190ICpfX3J3bG9jaykg dGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja19yZGxvY2sgKHB0aHJlYWRfcnds b2NrX3QgKl9fcndsb2NrKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfcndsb2NrX3Ry eXJkbG9jayAocHRocmVhZF9yd2xvY2tfdCAqX19yd2xvY2spIHRocm93ICgpOwoKCgpleHRlcm4g aW50IHB0aHJlYWRfcndsb2NrX3RpbWVkcmRsb2NrIChwdGhyZWFkX3J3bG9ja190ICpfX3Jlc3Ry aWN0IF9fcndsb2NrLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2Nv bnN0IHN0cnVjdCB0aW1lc3BlYyAqX19yZXN0cmljdAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBfX2Fic3RpbWUpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHB0aHJlYWRf cndsb2NrX3dybG9jayAocHRocmVhZF9yd2xvY2tfdCAqX19yd2xvY2spIHRocm93ICgpOwoKCmV4 dGVybiBpbnQgcHRocmVhZF9yd2xvY2tfdHJ5d3Jsb2NrIChwdGhyZWFkX3J3bG9ja190ICpfX3J3 bG9jaykgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2tfdGltZWR3cmxvY2sg KHB0aHJlYWRfcndsb2NrX3QgKl9fcmVzdHJpY3QgX19yd2xvY2ssCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgc3RydWN0IHRpbWVzcGVjICpfX3Jlc3RyaWN0 CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYWJzdGltZSkgdGhyb3cg KCk7CgoKCmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2tfdW5sb2NrIChwdGhyZWFkX3J3bG9ja190 ICpfX3J3bG9jaykgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja2F0dHJf aW5pdCAocHRocmVhZF9yd2xvY2thdHRyX3QgKl9fYXR0cikgdGhyb3cgKCk7CgoKZXh0ZXJuIGlu dCBwdGhyZWFkX3J3bG9ja2F0dHJfZGVzdHJveSAocHRocmVhZF9yd2xvY2thdHRyX3QgKl9fYXR0 cikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja2F0dHJfZ2V0cHNoYXJlZCAo X19jb25zdCBwdGhyZWFkX3J3bG9ja2F0dHJfdCAqCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIF9fcmVzdHJpY3QgX19hdHRyLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19wc2hhcmVkKSB0aHJvdyAoKTsK CgpleHRlcm4gaW50IHB0aHJlYWRfcndsb2NrYXR0cl9zZXRwc2hhcmVkIChwdGhyZWFkX3J3bG9j a2F0dHJfdCAqX19hdHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBpbnQgX19wc2hhcmVkKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfcndsb2NrYXR0 cl9nZXRraW5kX25wIChfX2NvbnN0IHB0aHJlYWRfcndsb2NrYXR0cl90ICpfX2F0dHIsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqX19wcmVmKSB0aHJvdyAo KTsKCgpleHRlcm4gaW50IHB0aHJlYWRfcndsb2NrYXR0cl9zZXRraW5kX25wIChwdGhyZWFkX3J3 bG9ja2F0dHJfdCAqX19hdHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBpbnQgX19wcmVmKSB0aHJvdyAoKTsKIyA1MDkgIi91c3IvaW5jbHVkZS9wdGhyZWFkLmgi IDMKZXh0ZXJuIGludCBwdGhyZWFkX3NwaW5faW5pdCAocHRocmVhZF9zcGlubG9ja190ICpfX2xv Y2ssIGludCBfX3BzaGFyZWQpCiAgICAgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX3Nw aW5fZGVzdHJveSAocHRocmVhZF9zcGlubG9ja190ICpfX2xvY2spIHRocm93ICgpOwoKCmV4dGVy biBpbnQgcHRocmVhZF9zcGluX2xvY2sgKHB0aHJlYWRfc3BpbmxvY2tfdCAqX19sb2NrKSB0aHJv dyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfc3Bpbl90cnlsb2NrIChwdGhyZWFkX3NwaW5sb2Nr X3QgKl9fbG9jaykgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX3NwaW5fdW5sb2NrIChw dGhyZWFkX3NwaW5sb2NrX3QgKl9fbG9jaykgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IHB0aHJl YWRfYmFycmllcl9pbml0IChwdGhyZWFkX2JhcnJpZXJfdCAqX19yZXN0cmljdCBfX2JhcnJpZXIs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgcHRocmVhZF9iYXJyaWVy YXR0cl90ICpfX3Jlc3RyaWN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYXR0 ciwgdW5zaWduZWQgaW50IF9fY291bnQpIHRocm93ICgpOwoKZXh0ZXJuIGludCBwdGhyZWFkX2Jh cnJpZXJfZGVzdHJveSAocHRocmVhZF9iYXJyaWVyX3QgKl9fYmFycmllcikgdGhyb3cgKCk7Cgpl eHRlcm4gaW50IHB0aHJlYWRfYmFycmllcmF0dHJfaW5pdCAocHRocmVhZF9iYXJyaWVyYXR0cl90 ICpfX2F0dHIpIHRocm93ICgpOwoKZXh0ZXJuIGludCBwdGhyZWFkX2JhcnJpZXJhdHRyX2Rlc3Ry b3kgKHB0aHJlYWRfYmFycmllcmF0dHJfdCAqX19hdHRyKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQg cHRocmVhZF9iYXJyaWVyYXR0cl9nZXRwc2hhcmVkIChfX2NvbnN0IHB0aHJlYWRfYmFycmllcmF0 dHJfdCAqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Jlc3Ry aWN0IF9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu dCAqX19yZXN0cmljdCBfX3BzaGFyZWQpIHRocm93ICgpOwoKZXh0ZXJuIGludCBwdGhyZWFkX2Jh cnJpZXJhdHRyX3NldHBzaGFyZWQgKHB0aHJlYWRfYmFycmllcmF0dHJfdCAqX19hdHRyLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fcHNoYXJlZCkgdGhy b3cgKCk7CgpleHRlcm4gaW50IHB0aHJlYWRfYmFycmllcl93YWl0IChwdGhyZWFkX2JhcnJpZXJf dCAqX19iYXJyaWVyKSB0aHJvdyAoKTsKIyA1NTYgIi91c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDMK ZXh0ZXJuIGludCBwdGhyZWFkX2tleV9jcmVhdGUgKHB0aHJlYWRfa2V5X3QgKl9fa2V5LAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAoKl9fZGVzdHJfZnVuY3Rpb24pICh2b2lk ICopKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfa2V5X2RlbGV0ZSAocHRocmVhZF9r ZXlfdCBfX2tleSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX3NldHNwZWNpZmljIChw dGhyZWFkX2tleV90IF9fa2V5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29u c3Qgdm9pZCAqX19wb2ludGVyKSB0aHJvdyAoKTsKCgpleHRlcm4gdm9pZCAqcHRocmVhZF9nZXRz cGVjaWZpYyAocHRocmVhZF9rZXlfdCBfX2tleSkgdGhyb3cgKCk7CiMgNTc2ICIvdXNyL2luY2x1 ZGUvcHRocmVhZC5oIiAzCmV4dGVybiBpbnQgcHRocmVhZF9vbmNlIChwdGhyZWFkX29uY2VfdCAq X19vbmNlX2NvbnRyb2wsCiAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICgqX19pbml0X3Jv dXRpbmUpICh2b2lkKSkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9zZXRjYW5j ZWxzdGF0ZSAoaW50IF9fc3RhdGUsIGludCAqX19vbGRzdGF0ZSkgdGhyb3cgKCk7CgoKCmV4dGVy biBpbnQgcHRocmVhZF9zZXRjYW5jZWx0eXBlIChpbnQgX190eXBlLCBpbnQgKl9fb2xkdHlwZSkg dGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2NhbmNlbCAocHRocmVhZF90IF9fdGhyZWFk KSB0aHJvdyAoKTsKCgoKCmV4dGVybiB2b2lkIHB0aHJlYWRfdGVzdGNhbmNlbCAodm9pZCkgdGhy b3cgKCk7CiMgNjEwICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAzCmV4dGVybiB2b2lkIF9wdGhy ZWFkX2NsZWFudXBfcHVzaCAoc3RydWN0IF9wdGhyZWFkX2NsZWFudXBfYnVmZmVyICpfX2J1ZmZl ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICgqX19yb3V0aW5lKSAo dm9pZCAqKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpfX2FyZykg dGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gdm9pZCBfcHRocmVhZF9jbGVhbnVwX3BvcCAoc3RydWN0 IF9wdGhyZWFkX2NsZWFudXBfYnVmZmVyICpfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGludCBfX2V4ZWN1dGUpIHRocm93ICgpOwojIDYzMSAiL3Vzci9pbmNsdWRl L3B0aHJlYWQuaCIgMwpleHRlcm4gdm9pZCBfcHRocmVhZF9jbGVhbnVwX3B1c2hfZGVmZXIgKHN0 cnVjdCBfcHRocmVhZF9jbGVhbnVwX2J1ZmZlciAqX19idWZmZXIsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAoKl9fcm91dGluZSkgKHZvaWQgKiksCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqX19hcmcpIHRocm93ICgp OwojIDY0MiAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMwpleHRlcm4gdm9pZCBfcHRocmVhZF9j bGVhbnVwX3BvcF9yZXN0b3JlIChzdHJ1Y3QgX3B0aHJlYWRfY2xlYW51cF9idWZmZXIgKl9fYnVm ZmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19leGVj dXRlKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IHB0aHJlYWRfZ2V0Y3B1Y2xvY2tpZCAocHRo cmVhZF90IF9fdGhyZWFkX2lkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xv Y2tpZF90ICpfX2Nsb2NrX2lkKSB0aHJvdyAoKTsKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMv c2lndGhyZWFkLmgiIDEgMwojIDMxICIvdXNyL2luY2x1ZGUvYml0cy9zaWd0aHJlYWQuaCIgMwpl eHRlcm4gaW50IHB0aHJlYWRfc2lnbWFzayAoaW50IF9faG93LAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgX19jb25zdCBfX3NpZ3NldF90ICpfX3Jlc3RyaWN0IF9fbmV3bWFzaywKICAgICAg ICAgICAgICAgICAgICAgICAgICAgIF9fc2lnc2V0X3QgKl9fcmVzdHJpY3QgX19vbGRtYXNrKXRo cm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9raWxsIChwdGhyZWFkX3QgX190aHJlYWQsIGlu dCBfX3NpZ25vKSB0aHJvdyAoKTsKIyA2NTYgIi91c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDIgMwoj IDY3MSAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMwpleHRlcm4gaW50IHB0aHJlYWRfYXRmb3Jr ICh2b2lkICgqX19wcmVwYXJlKSAodm9pZCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHZv aWQgKCpfX3BhcmVudCkgKHZvaWQpLAogICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICgq X19jaGlsZCkgKHZvaWQpKSB0aHJvdyAoKTsKCgoKCmV4dGVybiB2b2lkIHB0aHJlYWRfa2lsbF9v dGhlcl90aHJlYWRzX25wICh2b2lkKSB0aHJvdyAoKTsKCn0KIyAzOCAiL3Vzci9jeWdudXMvYmlu Ly4uL2luY2x1ZGUvYysrLzMuMS4xL2k2ODYtcGMtbGludXgtZ251L2JpdHMvZ3Roci1kZWZhdWx0 LmgiIDIgMwoKdHlwZWRlZiBwdGhyZWFkX2tleV90IF9fZ3RocmVhZF9rZXlfdDsKdHlwZWRlZiBw dGhyZWFkX29uY2VfdCBfX2d0aHJlYWRfb25jZV90Owp0eXBlZGVmIHB0aHJlYWRfbXV0ZXhfdCBf X2d0aHJlYWRfbXV0ZXhfdDsKCgoKCgoKI3ByYWdtYSB3ZWFrIHB0aHJlYWRfb25jZQojcHJhZ21h IHdlYWsgcHRocmVhZF9rZXlfY3JlYXRlCiNwcmFnbWEgd2VhayBwdGhyZWFkX2tleV9kZWxldGUK I3ByYWdtYSB3ZWFrIHB0aHJlYWRfZ2V0c3BlY2lmaWMKI3ByYWdtYSB3ZWFrIHB0aHJlYWRfc2V0 c3BlY2lmaWMKI3ByYWdtYSB3ZWFrIHB0aHJlYWRfY3JlYXRlCgojcHJhZ21hIHdlYWsgcHRocmVh ZF9tdXRleF9sb2NrIAojcHJhZ21hIHdlYWsgcHRocmVhZF9tdXRleF90cnlsb2NrIAojcHJhZ21h IHdlYWsgcHRocmVhZF9tdXRleF91bmxvY2sgCiMgODAgIi91c3IvY3lnbnVzL2Jpbi8uLi9pbmNs dWRlL2MrKy8zLjEuMS9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2d0aHItZGVmYXVsdC5oIiAzCnN0 YXRpYyBpbmxpbmUgaW50Cl9fZ3RocmVhZF9hY3RpdmVfcCAodm9pZCkKewogIHN0YXRpYyB2b2lk ICpjb25zdCBfX2d0aHJlYWRfYWN0aXZlX3B0ciA9ICh2b2lkICopICZwdGhyZWFkX2NyZWF0ZTsK ICByZXR1cm4gX19ndGhyZWFkX2FjdGl2ZV9wdHIgIT0gMDsKfQojIDQzNyAiL3Vzci9jeWdudXMv YmluLy4uL2luY2x1ZGUvYysrLzMuMS4xL2k2ODYtcGMtbGludXgtZ251L2JpdHMvZ3Roci1kZWZh dWx0LmgiIDMKc3RhdGljIGlubGluZSBpbnQKX19ndGhyZWFkX29uY2UgKF9fZ3RocmVhZF9vbmNl X3QgKm9uY2UsIHZvaWQgKCpmdW5jKSAodm9pZCkpCnsKICBpZiAoX19ndGhyZWFkX2FjdGl2ZV9w ICgpKQogICAgcmV0dXJuIHB0aHJlYWRfb25jZSAob25jZSwgZnVuYyk7CiAgZWxzZQogICAgcmV0 dXJuIC0xOwp9CgpzdGF0aWMgaW5saW5lIGludApfX2d0aHJlYWRfa2V5X2NyZWF0ZSAoX19ndGhy ZWFkX2tleV90ICprZXksIHZvaWQgKCpkdG9yKSAodm9pZCAqKSkKewogIHJldHVybiBwdGhyZWFk X2tleV9jcmVhdGUgKGtleSwgZHRvcik7Cn0KCnN0YXRpYyBpbmxpbmUgaW50Cl9fZ3RocmVhZF9r ZXlfZHRvciAoX19ndGhyZWFkX2tleV90IGtleSwgdm9pZCAqcHRyKQp7CgogIGlmIChwdHIpCiAg ICByZXR1cm4gcHRocmVhZF9zZXRzcGVjaWZpYyAoa2V5LCAwKTsKICBlbHNlCiAgICByZXR1cm4g MDsKfQoKc3RhdGljIGlubGluZSBpbnQKX19ndGhyZWFkX2tleV9kZWxldGUgKF9fZ3RocmVhZF9r ZXlfdCBrZXkpCnsKICByZXR1cm4gcHRocmVhZF9rZXlfZGVsZXRlIChrZXkpOwp9CgpzdGF0aWMg aW5saW5lIHZvaWQgKgpfX2d0aHJlYWRfZ2V0c3BlY2lmaWMgKF9fZ3RocmVhZF9rZXlfdCBrZXkp CnsKICByZXR1cm4gcHRocmVhZF9nZXRzcGVjaWZpYyAoa2V5KTsKfQoKc3RhdGljIGlubGluZSBp bnQKX19ndGhyZWFkX3NldHNwZWNpZmljIChfX2d0aHJlYWRfa2V5X3Qga2V5LCBjb25zdCB2b2lk ICpwdHIpCnsKICByZXR1cm4gcHRocmVhZF9zZXRzcGVjaWZpYyAoa2V5LCBwdHIpOwp9CgpzdGF0 aWMgaW5saW5lIGludApfX2d0aHJlYWRfbXV0ZXhfbG9jayAoX19ndGhyZWFkX211dGV4X3QgKm11 dGV4KQp7CiAgaWYgKF9fZ3RocmVhZF9hY3RpdmVfcCAoKSkKICAgIHJldHVybiBwdGhyZWFkX211 dGV4X2xvY2sgKG11dGV4KTsKICBlbHNlCiAgICByZXR1cm4gMDsKfQoKc3RhdGljIGlubGluZSBp bnQKX19ndGhyZWFkX211dGV4X3RyeWxvY2sgKF9fZ3RocmVhZF9tdXRleF90ICptdXRleCkKewog IGlmIChfX2d0aHJlYWRfYWN0aXZlX3AgKCkpCiAgICByZXR1cm4gcHRocmVhZF9tdXRleF90cnls b2NrIChtdXRleCk7CiAgZWxzZQogICAgcmV0dXJuIDA7Cn0KCnN0YXRpYyBpbmxpbmUgaW50Cl9f Z3RocmVhZF9tdXRleF91bmxvY2sgKF9fZ3RocmVhZF9tdXRleF90ICptdXRleCkKewogIGlmIChf X2d0aHJlYWRfYWN0aXZlX3AgKCkpCiAgICByZXR1cm4gcHRocmVhZF9tdXRleF91bmxvY2sgKG11 dGV4KTsKICBlbHNlCiAgICByZXR1cm4gMDsKfQojIDk5ICIvdXNyL2N5Z251cy9iaW4vLi4vaW5j bHVkZS9jKysvMy4xLjEvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9ndGhyLmgiIDIgMwojIDM4ICIv dXNyL2N5Z251cy9iaW4vLi4vaW5jbHVkZS9jKysvMy4xLjEvaTY4Ni1wYy1saW51eC1nbnUvYml0 cy9jKytpby5oIiAyIDMKCm5hbWVzcGFjZSBzdGQKewoKICB0eXBlZGVmIGxvbmcgc3RyZWFtb2Zm OwogIHR5cGVkZWYgcHRyZGlmZl90IHN0cmVhbXNpemU7CgogIHR5cGVkZWYgcHRyZGlmZl90IHdz dHJlYW1zaXplOwoKICB0eXBlZGVmIGZwb3NfdCBfX2Nfc3RyZWFtcG9zOwoKICB0eXBlZGVmIF9f Z3RocmVhZF9tdXRleF90IF9fY19sb2NrOwoKCiAgdHlwZWRlZiBGSUxFIF9fY19maWxlOwoKCiAg c3RydWN0IF9faW9zX2ZsYWdzCiAgewogICAgdHlwZWRlZiBzaG9ydCBfX2ludF90eXBlOwoKICAg IHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2Jvb2xhbHBoYSA9IDB4MDAwMTsKICAgIHN0YXRp YyBjb25zdCBfX2ludF90eXBlIF9TX2RlYyA9IDB4MDAwMjsKICAgIHN0YXRpYyBjb25zdCBfX2lu dF90eXBlIF9TX2ZpeGVkID0gMHgwMDA0OwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1Nf aGV4ID0gMHgwMDA4OwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfaW50ZXJuYWwgPSAw eDAwMTA7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19sZWZ0ID0gMHgwMDIwOwogICAg c3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1Nfb2N0ID0gMHgwMDQwOwogICAgc3RhdGljIGNvbnN0 IF9faW50X3R5cGUgX1NfcmlnaHQgPSAweDAwODA7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlw ZSBfU19zY2llbnRpZmljID0gMHgwMTAwOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1Nf c2hvd2Jhc2UgPSAweDAyMDA7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19zaG93cG9p bnQgPSAweDA0MDA7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19zaG93cG9zID0gMHgw ODAwOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1Nfc2tpcHdzID0gMHgxMDAwOwogICAg c3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfdW5pdGJ1ZiA9IDB4MjAwMDsKICAgIHN0YXRpYyBj b25zdCBfX2ludF90eXBlIF9TX3VwcGVyY2FzZSA9IDB4NDAwMDsKICAgIHN0YXRpYyBjb25zdCBf X2ludF90eXBlIF9TX2FkanVzdGZpZWxkID0gMHgwMDIwIHwgMHgwMDgwIHwgMHgwMDEwOwogICAg c3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfYmFzZWZpZWxkID0gMHgwMDAyIHwgMHgwMDQwIHwg MHgwMDA4OwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfZmxvYXRmaWVsZCA9IDB4MDEw MCB8IDB4MDAwNDsKCgogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfYmFkYml0ID0gMHgw MTsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2VvZmJpdCA9IDB4MDI7CiAgICBzdGF0 aWMgY29uc3QgX19pbnRfdHlwZSBfU19mYWlsYml0ID0gMHgwNDsKCgogICAgc3RhdGljIGNvbnN0 IF9faW50X3R5cGUgX1NfYXBwID0gMHgwMTsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9T X2F0ZSA9IDB4MDI7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19iaW4gPSAweDA0Owog ICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfaW4gPSAweDA4OwogICAgc3RhdGljIGNvbnN0 IF9faW50X3R5cGUgX1Nfb3V0ID0gMHgxMDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9T X3RydW5jID0gMHgyMDsKICB9Owp9CiMgNDUgIi91c3IvY3lnbnVzL2Jpbi8uLi9pbmNsdWRlL2Mr Ky8zLjEuMS9iaXRzL2Zwb3MuaCIgMiAzCiMgMSAiL3Vzci9jeWdudXMvYmluLy4uL2luY2x1ZGUv YysrLzMuMS4xL2N3Y2hhciIgMSAzCiMgNDggIi91c3IvY3lnbnVzL2Jpbi8uLi9pbmNsdWRlL2Mr Ky8zLjEuMS9jd2NoYXIiIDMKCgoKIyAxICIvdXNyL2N5Z251cy9iaW4vLi4vaW5jbHVkZS9jKysv My4xLjEvY3RpbWUiIDEgMwojIDQ4ICIvdXNyL2N5Z251cy9iaW4vLi4vaW5jbHVkZS9jKysvMy4x LjEvY3RpbWUiIDMKIyA2NCAiL3Vzci9jeWdudXMvYmluLy4uL2luY2x1ZGUvYysrLzMuMS4xL2N0 aW1lIiAzCm5hbWVzcGFjZSBzdGQKewogIHVzaW5nIDo6Y2xvY2tfdDsKICB1c2luZyA6OnRpbWVf dDsKICB1c2luZyA6OnRtOwoKICB1c2luZyA6OmNsb2NrOwogIHVzaW5nIDo6ZGlmZnRpbWU7CiAg dXNpbmcgOjpta3RpbWU7CiAgdXNpbmcgOjp0aW1lOwogIHVzaW5nIDo6YXNjdGltZTsKICB1c2lu ZyA6OmN0aW1lOwogIHVzaW5nIDo6Z210aW1lOwogIHVzaW5nIDo6bG9jYWx0aW1lOwogIHVzaW5n IDo6c3RyZnRpbWU7Cn0KIyA1MiAiL3Vzci9jeWdudXMvYmluLy4uL2luY2x1ZGUvYysrLzMuMS4x L2N3Y2hhciIgMiAzCgoKIyAxICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMSAzCiMgNDAgIi91c3Iv aW5jbHVkZS93Y2hhci5oIiAzCiMgMSAiL3Vzci9jeWdudXMvYmluLy4uL2xpYi9nY2MtbGliL2k2 ODYtcGMtbGludXgtZ251LzMuMS4xL2luY2x1ZGUvc3RkYXJnLmgiIDEgMwojIDQxICIvdXNyL2lu Y2x1ZGUvd2NoYXIuaCIgMiAzCgoKCgoKCgojIDEgIi91c3IvY3lnbnVzL2Jpbi8uLi9saWIvZ2Nj LWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjEuMS9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyA0OSAi L3Vzci9pbmNsdWRlL3djaGFyLmgiIDIgMwojIDg1ICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMwp0 eXBlZGVmIF9fbWJzdGF0ZV90IG1ic3RhdGVfdDsKIyAxMDUgIi91c3IvaW5jbHVkZS93Y2hhci5o IiAzCnN0cnVjdCB0bTsKCgpleHRlcm4gIkMiIHsKCgpleHRlcm4gd2NoYXJfdCAqd2NzY3B5ICh3 Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZGVzdCwKICAgICAgICAgICAgICAgICAgICAgICAgX19jb25z dCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fc3JjKSB0aHJvdyAoKTsKCmV4dGVybiB3Y2hhcl90ICp3 Y3NuY3B5ICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZGVzdCwKICAgICAgICAgICAgICAgICAgICAg ICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbikKICAgICB0 aHJvdyAoKTsKCgpleHRlcm4gd2NoYXJfdCAqd2NzY2F0ICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9f ZGVzdCwKICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0 IF9fc3JjKSB0aHJvdyAoKTsKCmV4dGVybiB3Y2hhcl90ICp3Y3NuY2F0ICh3Y2hhcl90ICpfX3Jl c3RyaWN0IF9fZGVzdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAq X19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbikKICAgICB0aHJvdyAoKTsKCgpleHRlcm4gaW50 IHdjc2NtcCAoX19jb25zdCB3Y2hhcl90ICpfX3MxLCBfX2NvbnN0IHdjaGFyX3QgKl9fczIpCiAg ICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gaW50IHdjc25j bXAgKF9fY29uc3Qgd2NoYXJfdCAqX19zMSwgX19jb25zdCB3Y2hhcl90ICpfX3MyLCBzaXplX3Qg X19uKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgpleHRlcm4g aW50IHdjc2Nhc2VjbXAgKF9fY29uc3Qgd2NoYXJfdCAqX19zMSwgX19jb25zdCB3Y2hhcl90ICpf X3MyKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHdjc25jYXNlY21wIChfX2NvbnN0IHdjaGFyX3Qg Kl9fczEsIF9fY29uc3Qgd2NoYXJfdCAqX19zMiwKICAgICAgICAgICAgICAgICAgICAgICAgc2l6 ZV90IF9fbikgdGhyb3cgKCk7CgoKCiMgMSAiL3Vzci9pbmNsdWRlL3hsb2NhbGUuaCIgMSAzCiMg MjggIi91c3IvaW5jbHVkZS94bG9jYWxlLmgiIDMKdHlwZWRlZiBzdHJ1Y3QgX19sb2NhbGVfc3Ry dWN0CnsKCiAgc3RydWN0IGxvY2FsZV9kYXRhICpfX2xvY2FsZXNbMTNdOwoKCiAgY29uc3QgdW5z aWduZWQgc2hvcnQgaW50ICpfX2N0eXBlX2I7CiAgY29uc3QgaW50ICpfX2N0eXBlX3RvbG93ZXI7 CiAgY29uc3QgaW50ICpfX2N0eXBlX3RvdXBwZXI7Cn0gKl9fbG9jYWxlX3Q7CiMgMTQ0ICIvdXNy L2luY2x1ZGUvd2NoYXIuaCIgMiAzCgpleHRlcm4gaW50IF9fd2NzY2FzZWNtcF9sIChfX2NvbnN0 IHdjaGFyX3QgKl9fczEsIF9fY29uc3Qgd2NoYXJfdCAqX19zMiwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7CgpleHRlcm4gaW50IF9fd2NzbmNh c2VjbXBfbCAoX19jb25zdCB3Y2hhcl90ICpfX3MxLCBfX2NvbnN0IHdjaGFyX3QgKl9fczIsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19uLCBfX2xvY2FsZV90IF9fbG9jKSB0 aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgd2NzY29sbCAoX19jb25zdCB3Y2hhcl90ICpfX3MxLCBf X2NvbnN0IHdjaGFyX3QgKl9fczIpIHRocm93ICgpOwoKCgpleHRlcm4gc2l6ZV90IHdjc3hmcm0g KHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zMSwKICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0 IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zMiwgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCgoKCgpl eHRlcm4gaW50IF9fd2NzY29sbF9sIChfX2NvbnN0IHdjaGFyX3QgKl9fczEsIF9fY29uc3Qgd2No YXJfdCAqX19zMiwKICAgICAgICAgICAgICAgICAgICAgICAgX19sb2NhbGVfdCBfX2xvYykgdGhy b3cgKCk7CgoKCmV4dGVybiBzaXplX3QgX193Y3N4ZnJtX2wgKHdjaGFyX3QgKl9fczEsIF9fY29u c3Qgd2NoYXJfdCAqX19zMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbiwg X19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7CgoKZXh0ZXJuIHdjaGFyX3QgKndjc2R1cCAoX19j b25zdCB3Y2hhcl90ICpfX3MpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7 CgoKCmV4dGVybiB3Y2hhcl90ICp3Y3NjaHIgKF9fY29uc3Qgd2NoYXJfdCAqX193Y3MsIHdjaGFy X3QgX193YykKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVy biB3Y2hhcl90ICp3Y3NyY2hyIChfX2NvbnN0IHdjaGFyX3QgKl9fd2NzLCB3Y2hhcl90IF9fd2Mp CiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgpleHRlcm4gd2No YXJfdCAqd2NzY2hybnVsIChfX2NvbnN0IHdjaGFyX3QgKl9fcywgd2NoYXJfdCBfX3djKQogICAg IHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoKZXh0ZXJuIHNpemVfdCB3 Y3Njc3BuIChfX2NvbnN0IHdjaGFyX3QgKl9fd2NzLCBfX2NvbnN0IHdjaGFyX3QgKl9fcmVqZWN0 KQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVybiBzaXpl X3Qgd2Nzc3BuIChfX2NvbnN0IHdjaGFyX3QgKl9fd2NzLCBfX2NvbnN0IHdjaGFyX3QgKl9fYWNj ZXB0KQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIHdj aGFyX3QgKndjc3BicmsgKF9fY29uc3Qgd2NoYXJfdCAqX193Y3MsIF9fY29uc3Qgd2NoYXJfdCAq X19hY2NlcHQpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRl cm4gd2NoYXJfdCAqd2Nzc3RyIChfX2NvbnN0IHdjaGFyX3QgKl9faGF5c3RhY2ssIF9fY29uc3Qg d2NoYXJfdCAqX19uZWVkbGUpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9f KSk7CgoKCmV4dGVybiB3Y2hhcl90ICp3Y3N3Y3MgKF9fY29uc3Qgd2NoYXJfdCAqX19oYXlzdGFj aywgX19jb25zdCB3Y2hhcl90ICpfX25lZWRsZSkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9f ICgoX19wdXJlX18pKTsKCgoKZXh0ZXJuIHdjaGFyX3QgKndjc3RvayAod2NoYXJfdCAqX19yZXN0 cmljdCBfX3MsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0 cmljdCBfX2RlbGltLAogICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmlj dCBfX3B0cikgdGhyb3cgKCk7CgoKZXh0ZXJuIHNpemVfdCB3Y3NsZW4gKF9fY29uc3Qgd2NoYXJf dCAqX19zKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKZXh0ZXJuIHNp emVfdCB3Y3NubGVuIChfX2NvbnN0IHdjaGFyX3QgKl9fcywgc2l6ZV90IF9fbWF4bGVuKQogICAg IHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoKZXh0ZXJuIHdjaGFyX3Qg KndtZW1jaHIgKF9fY29uc3Qgd2NoYXJfdCAqX19zLCB3Y2hhcl90IF9fYywgc2l6ZV90IF9fbikK ICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgpleHRlcm4gaW50IHdt ZW1jbXAgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3MxLAogICAgICAgICAgICAgICAg ICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3MyLCBzaXplX3QgX19uKQogICAgIHRo cm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVybiB3Y2hhcl90ICp3bWVt Y3B5ICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fczEsCiAgICAgICAgICAgICAgICAgICAgICAgICBf X2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zMiwgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoK CmV4dGVybiB3Y2hhcl90ICp3bWVtbW92ZSAod2NoYXJfdCAqX19zMSwgX19jb25zdCB3Y2hhcl90 ICpfX3MyLCBzaXplX3QgX19uKQogICAgIHRocm93ICgpOwoKCmV4dGVybiB3Y2hhcl90ICp3bWVt c2V0ICh3Y2hhcl90ICpfX3MsIHdjaGFyX3QgX19jLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgoK CmV4dGVybiB3Y2hhcl90ICp3bWVtcGNweSAod2NoYXJfdCAqX19yZXN0cmljdCBfX3MxLAogICAg ICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3MyLCBz aXplX3QgX19uKQogICAgIHRocm93ICgpOwoKCgoKCmV4dGVybiB3aW50X3QgYnRvd2MgKGludCBf X2MpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHdjdG9iICh3aW50X3QgX19jKSB0aHJvdyAoKTsK CgoKZXh0ZXJuIGludCBtYnNpbml0IChfX2NvbnN0IG1ic3RhdGVfdCAqX19wcykgdGhyb3cgKCk7 CgoKCmV4dGVybiBzaXplX3QgbWJydG93YyAod2NoYXJfdCAqX19yZXN0cmljdCBfX3B3YywKICAg ICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zLCBzaXplX3Qg X19uLAogICAgICAgICAgICAgICAgICAgICAgIG1ic3RhdGVfdCAqX19wKSB0aHJvdyAoKTsKCgpl eHRlcm4gc2l6ZV90IHdjcnRvbWIgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCB3Y2hhcl90IF9fd2Ms CiAgICAgICAgICAgICAgICAgICAgICAgbWJzdGF0ZV90ICpfX3Jlc3RyaWN0IF9fcHMpIHRocm93 ICgpOwoKCmV4dGVybiBzaXplX3QgX19tYnJsZW4gKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBf X3MsIHNpemVfdCBfX24sCiAgICAgICAgICAgICAgICAgICAgICAgIG1ic3RhdGVfdCAqX19yZXN0 cmljdCBfX3BzKSB0aHJvdyAoKTsKZXh0ZXJuIHNpemVfdCBtYnJsZW4gKF9fY29uc3QgY2hhciAq X19yZXN0cmljdCBfX3MsIHNpemVfdCBfX24sCiAgICAgICAgICAgICAgICAgICAgICBtYnN0YXRl X3QgKl9fcmVzdHJpY3QgX19wcykgdGhyb3cgKCk7CiMgMjk3ICIvdXNyL2luY2x1ZGUvd2NoYXIu aCIgMwpleHRlcm4gc2l6ZV90IG1ic3J0b3djcyAod2NoYXJfdCAqX19yZXN0cmljdCBfX2RzdCwK ICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqKl9fcmVzdHJpY3QgX19zcmMs IHNpemVfdCBfX2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgIG1ic3RhdGVfdCAqX19yZXN0 cmljdCBfX3BzKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHNpemVfdCB3Y3NydG9tYnMgKGNoYXIgKl9f cmVzdHJpY3QgX19kc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3Qg KipfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19sZW4sCiAgICAgICAgICAgICAgICAgICAgICAg ICBtYnN0YXRlX3QgKl9fcmVzdHJpY3QgX19wcykgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIHNpemVf dCBtYnNucnRvd2NzICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZHN0LAogICAgICAgICAgICAgICAg ICAgICAgICAgIF9fY29uc3QgY2hhciAqKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX25tYywK ICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19sZW4sIG1ic3RhdGVfdCAqX19yZXN0 cmljdCBfX3BzKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHNpemVfdCB3Y3NucnRvbWJzIChjaGFyICpf X3Jlc3RyaWN0IF9fZHN0LAogICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJf dCAqKl9fcmVzdHJpY3QgX19zcmMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9f bndjLCBzaXplX3QgX19sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgbWJzdGF0ZV90ICpf X3Jlc3RyaWN0IF9fcHMpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50IHdjd2lkdGggKHdjaGFy X3QgX19jKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCB3Y3N3aWR0aCAoX19jb25zdCB3Y2hhcl90 ICpfX3MsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCgoKCmV4dGVybiBkb3VibGUgd2NzdG9kIChf X2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAg d2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIpIHRocm93ICgpOwoKCgpleHRlcm4gZmxvYXQg d2NzdG9mIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAg ICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0cikgdGhyb3cgKCk7CmV4dGVybiBs b25nIGRvdWJsZSB3Y3N0b2xkIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIp IHRocm93ICgpOwoKCgoKCmV4dGVybiBsb25nIGludCB3Y3N0b2wgKF9fY29uc3Qgd2NoYXJfdCAq X19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jl c3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHVuc2lnbmVk IGxvbmcgaW50IHdjc3RvdWwgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2Vu ZHB0ciwgaW50IF9fYmFzZSkKICAgICB0aHJvdyAoKTsKCgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJu IGxvbmcgbG9uZyBpbnQgd2NzdG9xIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRy LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5k cHRyLCBpbnQgX19iYXNlKQogICAgIHRocm93ICgpOwoKCgpfX2V4dGVuc2lvbl9fCmV4dGVybiB1 bnNpZ25lZCBsb25nIGxvbmcgaW50IHdjc3RvdXEgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmlj dCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3Qg KipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBpbnQgX19iYXNlKSB0aHJvdyAoKTsKCgoKCgpfX2V4dGVuc2lvbl9fCmV4dGVybiBsb25n IGxvbmcgaW50IHdjc3RvbGwgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRy LCBpbnQgX19iYXNlKQogICAgIHRocm93ICgpOwoKCgpfX2V4dGVuc2lvbl9fCmV4dGVybiB1bnNp Z25lZCBsb25nIGxvbmcgaW50IHdjc3RvdWxsIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3Qg X19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAq Kl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBpbnQgX19iYXNlKSB0aHJvdyAoKTsKIyA0MTAgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAz CmV4dGVybiBsb25nIGludCBfX3djc3RvbF9sIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3Qg X19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3Qg X19lbmRwdHIsIGludCBfX2Jhc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xvY2Fs ZV90IF9fbG9jKSB0aHJvdyAoKTsKCmV4dGVybiB1bnNpZ25lZCBsb25nIGludCBfX3djc3RvdWxf bCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNlLCBfX2xvY2FsZV90IF9f bG9jKSB0aHJvdyAoKTsKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIGxvbmcgbG9uZyBpbnQgX193Y3N0 b2xsX2wgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2Jhc2UsIF9fbG9jYWxlX3QgX19sb2Mp IHRocm93ICgpOwoKX19leHRlbnNpb25fXwpleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGludCBf X3djc3RvdWxsX2wgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3Qg X19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50 IF9fYmFzZSwgX19sb2NhbGVfdCBfX2xvYykKICAgICB0aHJvdyAoKTsKCmV4dGVybiBkb3VibGUg X193Y3N0b2RfbCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAg ICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwgX19sb2NhbGVf dCBfX2xvYykKICAgICB0aHJvdyAoKTsKCmV4dGVybiBmbG9hdCBfX3djc3RvZl9sIChfX2NvbnN0 IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgd2No YXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIF9fbG9jYWxlX3QgX19sb2MpCiAgICAgdGhyb3cg KCk7CgpleHRlcm4gbG9uZyBkb3VibGUgX193Y3N0b2xkX2wgKF9fY29uc3Qgd2NoYXJfdCAqX19y ZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAq Kl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19s b2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGRvdWJsZSBfX3djc3RvZF9pbnRl cm5hbCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2dy b3VwKQogICAgIHRocm93ICgpOwpleHRlcm4gZmxvYXQgX193Y3N0b2ZfaW50ZXJuYWwgKF9fY29u c3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2dyb3VwKQogICAgIHRo cm93ICgpOwpleHRlcm4gbG9uZyBkb3VibGUgX193Y3N0b2xkX2ludGVybmFsIChfX2NvbnN0IHdj aGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgaW50IF9fZ3JvdXApIHRocm93ICgpOwoKCmV4dGVybiBsb25n IGludCBfX3djc3RvbF9pbnRlcm5hbCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0 ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmlj dCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNl LCBpbnQgX19ncm91cCkgdGhyb3cgKCk7CgoKCmV4dGVybiB1bnNpZ25lZCBsb25nIGludCBfX3dj c3RvdWxfaW50ZXJuYWwgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdCwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJp Y3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGludCBfX2Jhc2UsIGludCBfX2dyb3VwKSB0aHJvdyAoKTsKCgoKX19leHRlbnNpb25fXwpleHRl cm4gbG9uZyBsb25nIGludCBfX3djc3RvbGxfaW50ZXJuYWwgKF9fY29uc3Qgd2NoYXJfdCAqX19y ZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg d2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgaW50IF9fYmFzZSwgaW50IF9fZ3JvdXApIHRocm93ICgpOwoKCgpfX2V4 dGVuc2lvbl9fCmV4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IF9fd2NzdG91bGxfaW50ZXJu YWwgKF9fY29uc3Qgd2NoYXJfdCAqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIF9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcmVzdHJpY3QgX19lbmRwdHIsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2Jh c2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu dCBfX2dyb3VwKSB0aHJvdyAoKTsKIyA1MjggIi91c3IvaW5jbHVkZS93Y2hhci5oIiAzCmV4dGVy biB3Y2hhcl90ICp3Y3BjcHkgKHdjaGFyX3QgKl9fZGVzdCwgX19jb25zdCB3Y2hhcl90ICpfX3Ny YykgdGhyb3cgKCk7CgoKCmV4dGVybiB3Y2hhcl90ICp3Y3BuY3B5ICh3Y2hhcl90ICpfX2Rlc3Qs IF9fY29uc3Qgd2NoYXJfdCAqX19zcmMsIHNpemVfdCBfX24pCiAgICAgdGhyb3cgKCk7CgoKCgoK CgpleHRlcm4gaW50IGZ3aWRlIChfX0ZJTEUgKl9fZnAsIGludCBfX21vZGUpIHRocm93ICgpOwoK CgpleHRlcm4gaW50IGZ3cHJpbnRmIChfX0ZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sCiAgICAg ICAgICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4u KQogICAgIHRocm93ICgpIDsKCmV4dGVybiBpbnQgd3ByaW50ZiAoX19jb25zdCB3Y2hhcl90ICpf X3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pCiAgICAgdGhyb3cgKCkgOwoKZXh0ZXJuIGludCBzd3By aW50ZiAod2NoYXJfdCAqX19yZXN0cmljdCBfX3MsIHNpemVfdCBfX24sCiAgICAgICAgICAgICAg ICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKQogICAgIHRo cm93ICgpIDsKCgpleHRlcm4gaW50IHZmd3ByaW50ZiAoX19GSUxFICpfX3Jlc3RyaWN0IF9fcywK ICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX2Zvcm1h dCwKICAgICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0IF9fYXJnKQogICAgIHRocm93 ICgpIDsKCmV4dGVybiBpbnQgdndwcmludGYgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBf X2Zvcm1hdCwKICAgICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3QgX19hcmcpCiAgICAg dGhyb3cgKCkgOwoKCmV4dGVybiBpbnQgdnN3cHJpbnRmICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9f cywgc2l6ZV90IF9fbiwKICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19y ZXN0cmljdCBfX2Zvcm1hdCwKICAgICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0IF9f YXJnKQogICAgIHRocm93ICgpIDsKCgoKZXh0ZXJuIGludCBmd3NjYW5mIChfX0ZJTEUgKl9fcmVz dHJpY3QgX19zdHJlYW0sCiAgICAgICAgICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90ICpfX3Jl c3RyaWN0IF9fZm9ybWF0LCAuLi4pCiAgICAgdGhyb3cgKCkgOwoKZXh0ZXJuIGludCB3c2NhbmYg KF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKQogICAgIHRocm93ICgp IDsKCmV4dGVybiBpbnQgc3dzY2FuZiAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fcywK ICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19mb3JtYXQs IC4uLikKICAgICB0aHJvdyAoKSA7CgoKCgpleHRlcm4gaW50IHZmd3NjYW5mIChfX0ZJTEUgKl9f cmVzdHJpY3QgX19zLAogICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVz dHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0IF9fYXJn KQogICAgIHRocm93ICgpIDsKCmV4dGVybiBpbnQgdndzY2FuZiAoX19jb25zdCB3Y2hhcl90ICpf X3Jlc3RyaWN0IF9fZm9ybWF0LAogICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0IF9f YXJnKQogICAgIHRocm93ICgpIDsKCmV4dGVybiBpbnQgdnN3c2NhbmYgKF9fY29uc3Qgd2NoYXJf dCAqX19yZXN0cmljdCBfX3MsCiAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAq X19yZXN0cmljdCBfX2Zvcm1hdCwKICAgICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3Qg X19hcmcpCiAgICAgdGhyb3cgKCkgOwoKCgoKZXh0ZXJuIHdpbnRfdCBmZ2V0d2MgKF9fRklMRSAq X19zdHJlYW0pIHRocm93ICgpOwpleHRlcm4gd2ludF90IGdldHdjIChfX0ZJTEUgKl9fc3RyZWFt KSB0aHJvdyAoKTsKCgpleHRlcm4gd2ludF90IGdldHdjaGFyICh2b2lkKSB0aHJvdyAoKTsKCgoK ZXh0ZXJuIHdpbnRfdCBmcHV0d2MgKHdjaGFyX3QgX193YywgX19GSUxFICpfX3N0cmVhbSkgdGhy b3cgKCk7CmV4dGVybiB3aW50X3QgcHV0d2MgKHdjaGFyX3QgX193YywgX19GSUxFICpfX3N0cmVh bSkgdGhyb3cgKCk7CgoKZXh0ZXJuIHdpbnRfdCBwdXR3Y2hhciAod2NoYXJfdCBfX3djKSB0aHJv dyAoKTsKCgoKCmV4dGVybiB3Y2hhcl90ICpmZ2V0d3MgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX193 cywgaW50IF9fbiwKICAgICAgICAgICAgICAgICAgICAgICAgX19GSUxFICpfX3Jlc3RyaWN0IF9f c3RyZWFtKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IGZwdXR3cyAoX19jb25zdCB3Y2hhcl90ICpf X3Jlc3RyaWN0IF9fd3MsCiAgICAgICAgICAgICAgICAgICBfX0ZJTEUgKl9fcmVzdHJpY3QgX19z dHJlYW0pIHRocm93ICgpOwoKCgpleHRlcm4gd2ludF90IHVuZ2V0d2MgKHdpbnRfdCBfX3djLCBf X0ZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gd2ludF90IGdldHdjX3VubG9j a2VkIChfX0ZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKZXh0ZXJuIHdpbnRfdCBnZXR3Y2hhcl91 bmxvY2tlZCAodm9pZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIHdpbnRfdCBmZ2V0d2NfdW5sb2NrZWQg KF9fRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCmV4dGVybiB3aW50X3QgZnB1dHdjX3VubG9j a2VkICh3Y2hhcl90IF9fd2MsIF9fRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgpleHRlcm4g d2ludF90IHB1dHdjX3VubG9ja2VkICh3Y2hhcl90IF9fd2MsIF9fRklMRSAqX19zdHJlYW0pIHRo cm93ICgpOwpleHRlcm4gd2ludF90IHB1dHdjaGFyX3VubG9ja2VkICh3Y2hhcl90IF9fd2MpIHRo cm93ICgpOwoKCgpleHRlcm4gd2NoYXJfdCAqZmdldHdzX3VubG9ja2VkICh3Y2hhcl90ICpfX3Jl c3RyaWN0IF9fd3MsIGludCBfX24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9f RklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBmcHV0d3Nf dW5sb2NrZWQgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3dzLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgX19GSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0aHJvdyAoKTsKCgoK CgoKZXh0ZXJuIHNpemVfdCB3Y3NmdGltZSAod2NoYXJfdCAqX19yZXN0cmljdCBfX3MsIHNpemVf dCBfX21heHNpemUsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19y ZXN0cmljdCBfX2Zvcm1hdCwKICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBzdHJ1Y3Qg dG0gKl9fcmVzdHJpY3QgX190cCkgdGhyb3cgKCk7CiMgNjgwICIvdXNyL2luY2x1ZGUvd2NoYXIu aCIgMwp9CiMgNTUgIi91c3IvY3lnbnVzL2Jpbi8uLi9pbmNsdWRlL2MrKy8zLjEuMS9jd2NoYXIi IDIgMwojIDY5ICIvdXNyL2N5Z251cy9iaW4vLi4vaW5jbHVkZS9jKysvMy4xLjEvY3djaGFyIiAz Cm5hbWVzcGFjZSBzdGQKewogIHVzaW5nIDo6bWJzdGF0ZV90Owp9CiMgMTMzICIvdXNyL2N5Z251 cy9iaW4vLi4vaW5jbHVkZS9jKysvMy4xLjEvY3djaGFyIiAzCm5hbWVzcGFjZSBzdGQKewogIHVz aW5nIDo6d2ludF90OwoKICB1c2luZyA6OmJ0b3djOwogIHVzaW5nIDo6ZmdldHdjOwogIHVzaW5n IDo6ZmdldHdzOwogIHVzaW5nIDo6ZnB1dHdjOwogIHVzaW5nIDo6ZnB1dHdzOwogIHVzaW5nIDo6 ZndpZGU7CiAgdXNpbmcgOjpmd3ByaW50ZjsKICB1c2luZyA6OmZ3c2NhbmY7CiAgdXNpbmcgOjpn ZXR3YzsKICB1c2luZyA6OmdldHdjaGFyOwogIHVzaW5nIDo6bWJybGVuOwogIHVzaW5nIDo6bWJy dG93YzsKICB1c2luZyA6Om1ic2luaXQ7CiAgdXNpbmcgOjptYnNydG93Y3M7CiAgdXNpbmcgOjpw dXR3YzsKICB1c2luZyA6OnB1dHdjaGFyOwogIHVzaW5nIDo6c3dwcmludGY7CiAgdXNpbmcgOjpz d3NjYW5mOwogIHVzaW5nIDo6dW5nZXR3YzsKICB1c2luZyA6OnZmd3ByaW50ZjsKICB1c2luZyA6 OnZmd3NjYW5mOwogIHVzaW5nIDo6dnN3cHJpbnRmOwogIHVzaW5nIDo6dnN3c2NhbmY7CiAgdXNp bmcgOjp2d3ByaW50ZjsKICB1c2luZyA6OnZ3c2NhbmY7CiAgdXNpbmcgOjp3Y3J0b21iOwogIHVz aW5nIDo6d2NzY2F0OwogIHVzaW5nIDo6d2NzY21wOwogIHVzaW5nIDo6d2NzY29sbDsKICB1c2lu ZyA6Ondjc2NweTsKICB1c2luZyA6Ondjc2NzcG47CiAgdXNpbmcgOjp3Y3NmdGltZTsKICB1c2lu ZyA6Ondjc2xlbjsKICB1c2luZyA6Ondjc25jYXQ7CiAgdXNpbmcgOjp3Y3NuY21wOwogIHVzaW5n IDo6d2NzbmNweTsKICB1c2luZyA6Ondjc3J0b21iczsKICB1c2luZyA6Ondjc3NwbjsKICB1c2lu ZyA6Ondjc3RvZDsKICB1c2luZyA6Ondjc3RvZjsKICB1c2luZyA6Ondjc3RvazsKICB1c2luZyA6 Ondjc3RvbDsKICB1c2luZyA6Ondjc3RvdWw7CiAgdXNpbmcgOjp3Y3N4ZnJtOwogIHVzaW5nIDo6 d2N0b2I7CiAgdXNpbmcgOjp3bWVtY21wOwogIHVzaW5nIDo6d21lbWNweTsKICB1c2luZyA6Ondt ZW1tb3ZlOwogIHVzaW5nIDo6d21lbXNldDsKICB1c2luZyA6OndwcmludGY7CiAgdXNpbmcgOjp3 c2NhbmY7CgogIHVzaW5nIDo6d2NzY2hyOwoKICBpbmxpbmUgd2NoYXJfdCoKICB3Y3NjaHIod2No YXJfdCogX19wLCB3Y2hhcl90IF9fYykKICB7IHJldHVybiB3Y3NjaHIoY29uc3RfY2FzdDxjb25z dCB3Y2hhcl90Kj4oX19wKSwgX19jKTsgfQoKICB1c2luZyA6Ondjc3Bicms7CgogIGlubGluZSB3 Y2hhcl90KgogIHdjc3Bicmsod2NoYXJfdCogX19zMSwgd2NoYXJfdCogX19zMikKICB7IHJldHVy biB3Y3NwYnJrKGNvbnN0X2Nhc3Q8Y29uc3Qgd2NoYXJfdCo+KF9fczEpLCBfX3MyKTsgfQoKICB1 c2luZyA6Ondjc3JjaHI7CgogIGlubGluZSB3Y2hhcl90KgogIHdjc3JjaHIod2NoYXJfdCogX19w LCB3Y2hhcl90IF9fYykKICB7IHJldHVybiB3Y3NyY2hyKGNvbnN0X2Nhc3Q8Y29uc3Qgd2NoYXJf dCo+KF9fcCksIF9fYyk7IH0KCiAgdXNpbmcgOjp3Y3NzdHI7CgogIGlubGluZSB3Y2hhcl90Kgog IHdjc3N0cih3Y2hhcl90KiBfX3MxLCB3Y2hhcl90KiBfX3MyKQogIHsgcmV0dXJuIHdjc3N0cihj b25zdF9jYXN0PGNvbnN0IHdjaGFyX3QqPihfX3MxKSwgX19zMik7IH0KCiAgdXNpbmcgOjp3bWVt Y2hyOwoKICBpbmxpbmUgd2NoYXJfdCoKICB3bWVtY2hyKHdjaGFyX3QqIF9fcCwgd2NoYXJfdCBf X2MsIHNpemVfdCBfX24pCiAgeyByZXR1cm4gd21lbWNocihjb25zdF9jYXN0PGNvbnN0IHdjaGFy X3QqPihfX3ApLCBfX2MsIF9fbik7IH0KfQoKCgoKCgoKbmFtZXNwYWNlIF9fZ251X2N4eAp7CiAg dXNpbmcgOjp3Y3N0b2xkOwogIHVzaW5nIDo6d2NzdG9sbDsKICB1c2luZyA6Ondjc3RvdWxsOwp9 CgpuYW1lc3BhY2Ugc3RkCnsKICB1c2luZyBfX2dudV9jeHg6Ondjc3RvbGQ7CiAgdXNpbmcgX19n bnVfY3h4Ojp3Y3N0b2xsOwogIHVzaW5nIF9fZ251X2N4eDo6d2NzdG91bGw7Cn0KIyA0NiAiL3Vz ci9jeWdudXMvYmluLy4uL2luY2x1ZGUvYysrLzMuMS4xL2JpdHMvZnBvcy5oIiAyIDMKCm5hbWVz cGFjZSBzdGQKewoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9TdGF0ZVQ+CiAgICBjbGFzcyBmcG9z CiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9TdGF0ZVQgX19zdGF0ZV90eXBlOwoK ICAgIHByaXZhdGU6CiAgICAgIHN0cmVhbW9mZiBfTV9vZmY7CiAgICAgIF9fc3RhdGVfdHlwZSBf TV9zdDsKCiAgICBwdWJsaWM6CiAgICAgIF9fc3RhdGVfdHlwZQogICAgICBzdGF0ZSgpIGNvbnN0 IHsgcmV0dXJuIF9NX3N0OyB9CgogICAgICB2b2lkCiAgICAgIHN0YXRlKF9fc3RhdGVfdHlwZSBf X3N0KSB7IF9NX3N0ID0gX19zdDsgfQoKCgogICAgICBmcG9zKCk6IF9NX29mZihzdHJlYW1vZmYo KSksIF9NX3N0KF9fc3RhdGVfdHlwZSgpKSB7IH0KCiAgICAgIGZwb3Moc3RyZWFtb2ZmIF9fb2Zm LCBfX3N0YXRlX3R5cGUgX19zdCA9IF9fc3RhdGVfdHlwZSgpKQogICAgICA6IF9NX29mZihfX29m ZiksIF9NX3N0KF9fc3QpIHsgfQoKICAgICAgb3BlcmF0b3Igc3RyZWFtb2ZmKCkgY29uc3QgeyBy ZXR1cm4gX01fb2ZmOyB9CgogICAgICBmcG9zJgogICAgICBvcGVyYXRvcis9KHN0cmVhbW9mZiBf X29mZikgeyBfTV9vZmYgKz0gX19vZmY7IHJldHVybiAqdGhpczsgfQoKICAgICAgZnBvcyYKICAg ICAgb3BlcmF0b3ItPShzdHJlYW1vZmYgX19vZmYpIHsgX01fb2ZmIC09IF9fb2ZmOyByZXR1cm4g KnRoaXM7IH0KCiAgICAgIGZwb3MKICAgICAgb3BlcmF0b3IrKHN0cmVhbW9mZiBfX29mZikKICAg ICAgewogICAgICAgIGZwb3MgX190KCp0aGlzKTsKICAgICAgICBfX3QgKz0gX19vZmY7CiAgICAg ICAgcmV0dXJuIF9fdDsKICAgICAgfQoKICAgICAgZnBvcwogICAgICBvcGVyYXRvci0oc3RyZWFt b2ZmIF9fb2ZmKQogICAgICB7CiAgICAgICAgZnBvcyBfX3QoKnRoaXMpOwogICAgICAgIF9fdCAt PSBfX29mZjsKICAgICAgICByZXR1cm4gX190OwogICAgICB9CgogICAgICBib29sCiAgICAgIG9w ZXJhdG9yPT0oY29uc3QgZnBvcyYgX19wb3MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX29mZiA9 PSBfX3Bvcy5fTV9vZmY7IH0KCiAgICAgIGJvb2wKICAgICAgb3BlcmF0b3IhPShjb25zdCBmcG9z JiBfX3BvcykgY29uc3QKICAgICAgeyByZXR1cm4gX01fb2ZmICE9IF9fcG9zLl9NX29mZjsgfQoK ICAgICAgc3RyZWFtb2ZmCiAgICAgIF9NX3Bvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gX01fb2Zm OyB9CgogICAgICB2b2lkCiAgICAgIF9NX3Bvc2l0aW9uKHN0cmVhbW9mZiBfX29mZikgeyBfTV9v ZmYgPSBfX29mZjsgfQogICAgfTsKCgogIHR5cGVkZWYgZnBvczxtYnN0YXRlX3Q+IHN0cmVhbXBv czsKCiAgdHlwZWRlZiBmcG9zPG1ic3RhdGVfdD4gd3N0cmVhbXBvczsKCn0KIyA0NyAiL3Vzci9j eWdudXMvYmluLy4uL2luY2x1ZGUvYysrLzMuMS4xL2lvc2Z3ZCIgMiAzCiMgMSAiL3Vzci9jeWdu dXMvYmluLy4uL2luY2x1ZGUvYysrLzMuMS4xL2JpdHMvZnVuY3RleGNlcHQuaCIgMSAzCiMgMzQg Ii91c3IvY3lnbnVzL2Jpbi8uLi9pbmNsdWRlL2MrKy8zLjEuMS9iaXRzL2Z1bmN0ZXhjZXB0Lmgi IDMKIyAxICIvdXNyL2N5Z251cy9iaW4vLi4vaW5jbHVkZS9jKysvMy4xLjEvZXhjZXB0aW9uX2Rl ZmluZXMuaCIgMSAzCiMgMzUgIi91c3IvY3lnbnVzL2Jpbi8uLi9pbmNsdWRlL2MrKy8zLjEuMS9i aXRzL2Z1bmN0ZXhjZXB0LmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CgogIHZvaWQKICBfX3Rocm93 X2JhZF9leGNlcHRpb24odm9pZCk7CgoKICB2b2lkCiAgX190aHJvd19iYWRfYWxsb2Modm9pZCk7 CgoKICB2b2lkCiAgX190aHJvd19iYWRfY2FzdCh2b2lkKTsKCiAgdm9pZAogIF9fdGhyb3dfYmFk X3R5cGVpZCh2b2lkKTsKCgogIHZvaWQKICBfX3Rocm93X2xvZ2ljX2Vycm9yKGNvbnN0IGNoYXIq IF9fcyk7CgogIHZvaWQKICBfX3Rocm93X2RvbWFpbl9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoK ICB2b2lkCiAgX190aHJvd19pbnZhbGlkX2FyZ3VtZW50KGNvbnN0IGNoYXIqIF9fcyk7CgogIHZv aWQKICBfX3Rocm93X2xlbmd0aF9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190 aHJvd19vdXRfb2ZfcmFuZ2UoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfcnVu dGltZV9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19yYW5nZV9lcnJv cihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19vdmVyZmxvd19lcnJvcihjb25z dCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd191bmRlcmZsb3dfZXJyb3IoY29uc3QgY2hh ciogX19zKTsKCgogIHZvaWQKICBfX3Rocm93X2lvc19mYWlsdXJlKGNvbnN0IGNoYXIqIF9fcyk7 Cn0KIyA0OCAiL3Vzci9jeWdudXMvYmluLy4uL2luY2x1ZGUvYysrLzMuMS4xL2lvc2Z3ZCIgMiAz CgpuYW1lc3BhY2Ugc3RkCnsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U cmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX2lvczsKCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0No YXJUPiA+CiAgICBjbGFzcyBiYXNpY19zdHJlYW1idWY7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D aGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgogICAgY2xhc3Mg YmFzaWNfaXN0cmVhbTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh aXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19vc3RyZWFtOwoKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxf Q2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX2lvc3RyZWFtOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+LAogICAgICAgICAg ICB0eXBlbmFtZSBfQWxsb2MgPSBhbGxvY2F0b3I8X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19z dHJpbmdidWY7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9 IGNoYXJfdHJhaXRzPF9DaGFyVD4sCiAgICAgICAgICAgdHlwZW5hbWUgX0FsbG9jID0gYWxsb2Nh dG9yPF9DaGFyVD4gPgogICAgY2xhc3MgYmFzaWNfaXN0cmluZ3N0cmVhbTsKCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiwK ICAgICAgICAgICB0eXBlbmFtZSBfQWxsb2MgPSBhbGxvY2F0b3I8X0NoYXJUPiA+CiAgICBjbGFz cyBiYXNpY19vc3RyaW5nc3RyZWFtOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu YW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+LAogICAgICAgICAgIHR5cGVuYW1lIF9B bGxvYyA9IGFsbG9jYXRvcjxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX3N0cmluZ3N0cmVhbTsK CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFp dHM8X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19maWxlYnVmOwoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KICAgIGNs YXNzIGJhc2ljX2lmc3RyZWFtOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l IF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX29mc3RyZWFt OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3Ry YWl0czxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX2ZzdHJlYW07CgogIHRlbXBsYXRlPHR5cGVu YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgogICAg Y2xhc3MgaXN0cmVhbWJ1Zl9pdGVyYXRvcjsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0 eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+CiAgICBjbGFzcyBvc3RyZWFt YnVmX2l0ZXJhdG9yOwoKCgogIGNsYXNzIGlvc19iYXNlOwoKCiAgdHlwZWRlZiBiYXNpY19pb3M8 Y2hhcj4gaW9zOwogIHR5cGVkZWYgYmFzaWNfc3RyZWFtYnVmPGNoYXI+IHN0cmVhbWJ1ZjsKICB0 eXBlZGVmIGJhc2ljX2lzdHJlYW08Y2hhcj4gaXN0cmVhbTsKICB0eXBlZGVmIGJhc2ljX29zdHJl YW08Y2hhcj4gb3N0cmVhbTsKICB0eXBlZGVmIGJhc2ljX2lvc3RyZWFtPGNoYXI+IGlvc3RyZWFt OwogIHR5cGVkZWYgYmFzaWNfc3RyaW5nYnVmPGNoYXI+IHN0cmluZ2J1ZjsKICB0eXBlZGVmIGJh c2ljX2lzdHJpbmdzdHJlYW08Y2hhcj4gaXN0cmluZ3N0cmVhbTsKICB0eXBlZGVmIGJhc2ljX29z dHJpbmdzdHJlYW08Y2hhcj4gb3N0cmluZ3N0cmVhbTsKICB0eXBlZGVmIGJhc2ljX3N0cmluZ3N0 cmVhbTxjaGFyPiBzdHJpbmdzdHJlYW07CiAgdHlwZWRlZiBiYXNpY19maWxlYnVmPGNoYXI+IGZp bGVidWY7CiAgdHlwZWRlZiBiYXNpY19pZnN0cmVhbTxjaGFyPiBpZnN0cmVhbTsKICB0eXBlZGVm IGJhc2ljX29mc3RyZWFtPGNoYXI+IG9mc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfZnN0cmVhbTxj aGFyPiBmc3RyZWFtOwoKICB0eXBlZGVmIGJhc2ljX2lvczx3Y2hhcl90PiB3aW9zOwogIHR5cGVk ZWYgYmFzaWNfc3RyZWFtYnVmPHdjaGFyX3Q+IHdzdHJlYW1idWY7CiAgdHlwZWRlZiBiYXNpY19p c3RyZWFtPHdjaGFyX3Q+IHdpc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfb3N0cmVhbTx3Y2hhcl90 PiB3b3N0cmVhbTsKICB0eXBlZGVmIGJhc2ljX2lvc3RyZWFtPHdjaGFyX3Q+IHdpb3N0cmVhbTsK ICB0eXBlZGVmIGJhc2ljX3N0cmluZ2J1Zjx3Y2hhcl90PiB3c3RyaW5nYnVmOwogIHR5cGVkZWYg YmFzaWNfaXN0cmluZ3N0cmVhbTx3Y2hhcl90PiB3aXN0cmluZ3N0cmVhbTsKICB0eXBlZGVmIGJh c2ljX29zdHJpbmdzdHJlYW08d2NoYXJfdD4gd29zdHJpbmdzdHJlYW07CiAgdHlwZWRlZiBiYXNp Y19zdHJpbmdzdHJlYW08d2NoYXJfdD4gd3N0cmluZ3N0cmVhbTsKICB0eXBlZGVmIGJhc2ljX2Zp bGVidWY8d2NoYXJfdD4gd2ZpbGVidWY7CiAgdHlwZWRlZiBiYXNpY19pZnN0cmVhbTx3Y2hhcl90 PiB3aWZzdHJlYW07CiAgdHlwZWRlZiBiYXNpY19vZnN0cmVhbTx3Y2hhcl90PiB3b2ZzdHJlYW07 CiAgdHlwZWRlZiBiYXNpY19mc3RyZWFtPHdjaGFyX3Q+IHdmc3RyZWFtOwp9CiMgNDUgIi91c3Iv Y3lnbnVzL2Jpbi8uLi9pbmNsdWRlL2MrKy8zLjEuMS9pb3MiIDIgMwojIDEgIi91c3IvY3lnbnVz L2Jpbi8uLi9pbmNsdWRlL2MrKy8zLjEuMS9leGNlcHRpb24iIDEgMwojIDQwICIvdXNyL2N5Z251 cy9iaW4vLi4vaW5jbHVkZS9jKysvMy4xLjEvZXhjZXB0aW9uIiAzCmV4dGVybiAiQysrIiB7Cgpu YW1lc3BhY2Ugc3RkCnsKCgoKCgoKICBjbGFzcyBleGNlcHRpb24KICB7CiAgcHVibGljOgogICAg ZXhjZXB0aW9uKCkgdGhyb3coKSB7IH0KICAgIHZpcnR1YWwgfmV4Y2VwdGlvbigpIHRocm93KCk7 CgoKICAgIHZpcnR1YWwgY29uc3QgY2hhciogd2hhdCgpIGNvbnN0IHRocm93KCk7CiAgfTsKCgoK ICBjbGFzcyBiYWRfZXhjZXB0aW9uIDogcHVibGljIGV4Y2VwdGlvbgogIHsKICBwdWJsaWM6CiAg ICBiYWRfZXhjZXB0aW9uKCkgdGhyb3coKSB7IH0KCgogICAgdmlydHVhbCB+YmFkX2V4Y2VwdGlv bigpIHRocm93KCk7CiAgfTsKCgogIHR5cGVkZWYgdm9pZCAoKnRlcm1pbmF0ZV9oYW5kbGVyKSAo KTsKCiAgdHlwZWRlZiB2b2lkICgqdW5leHBlY3RlZF9oYW5kbGVyKSAoKTsKCgogIHRlcm1pbmF0 ZV9oYW5kbGVyIHNldF90ZXJtaW5hdGUodGVybWluYXRlX2hhbmRsZXIpIHRocm93KCk7CgoKICB2 b2lkIHRlcm1pbmF0ZSgpIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKCgogIHVuZXhw ZWN0ZWRfaGFuZGxlciBzZXRfdW5leHBlY3RlZCh1bmV4cGVjdGVkX2hhbmRsZXIpIHRocm93KCk7 CgoKICB2b2lkIHVuZXhwZWN0ZWQoKSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CiMg OTggIi91c3IvY3lnbnVzL2Jpbi8uLi9pbmNsdWRlL2MrKy8zLjEuMS9leGNlcHRpb24iIDMKICBi b29sIHVuY2F1Z2h0X2V4Y2VwdGlvbigpIHRocm93KCk7Cn0KCm5hbWVzcGFjZSBfX2dudV9jeHgK ewojIDExMSAiL3Vzci9jeWdudXMvYmluLy4uL2luY2x1ZGUvYysrLzMuMS4xL2V4Y2VwdGlvbiIg MwogIHZvaWQgX192ZXJib3NlX3Rlcm1pbmF0ZV9oYW5kbGVyICgpOwp9Cgp9CiMgNDYgIi91c3Iv Y3lnbnVzL2Jpbi8uLi9pbmNsdWRlL2MrKy8zLjEuMS9pb3MiIDIgMwojIDEgIi91c3IvY3lnbnVz L2Jpbi8uLi9pbmNsdWRlL2MrKy8zLjEuMS9iaXRzL2NoYXJfdHJhaXRzLmgiIDEgMwojIDQzICIv dXNyL2N5Z251cy9iaW4vLi4vaW5jbHVkZS9jKysvMy4xLjEvYml0cy9jaGFyX3RyYWl0cy5oIiAz CgojIDEgIi91c3IvY3lnbnVzL2Jpbi8uLi9pbmNsdWRlL2MrKy8zLjEuMS9jc3RyaW5nIiAxIDMK IyA0OCAiL3Vzci9jeWdudXMvYmluLy4uL2luY2x1ZGUvYysrLzMuMS4xL2NzdHJpbmciIDMKCgoK IyAxICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDEgMwojIDI4ICIvdXNyL2luY2x1ZGUvc3RyaW5n LmgiIDMKZXh0ZXJuICJDIiB7CgoKCgojIDEgIi91c3IvY3lnbnVzL2Jpbi8uLi9saWIvZ2NjLWxp Yi9pNjg2LXBjLWxpbnV4LWdudS8zLjEuMS9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAzNCAiL3Vz ci9pbmNsdWRlL3N0cmluZy5oIiAyIDMKCgoKZXh0ZXJuIHZvaWQgKm1lbWNweSAodm9pZCAqX19y ZXN0cmljdCBfX2Rlc3QsCiAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgdm9pZCAqX19yZXN0 cmljdCBfX3NyYywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKZXh0ZXJuIHZvaWQgKm1lbW1vdmUg KHZvaWQgKl9fZGVzdCwgX19jb25zdCB2b2lkICpfX3NyYywgc2l6ZV90IF9fbikKICAgICB0aHJv dyAoKTsKCgoKCgpleHRlcm4gdm9pZCAqbWVtY2NweSAodm9pZCAqX19yZXN0cmljdCBfX2Rlc3Qs IF9fY29uc3Qgdm9pZCAqX19yZXN0cmljdCBfX3NyYywKICAgICAgICAgICAgICAgICAgICAgIGlu dCBfX2MsIHNpemVfdCBfX24pCiAgICAgdGhyb3cgKCk7CgoKCgpleHRlcm4gdm9pZCAqbWVtc2V0 ICh2b2lkICpfX3MsIGludCBfX2MsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCmV4dGVybiBpbnQg bWVtY21wIChfX2NvbnN0IHZvaWQgKl9fczEsIF9fY29uc3Qgdm9pZCAqX19zMiwgc2l6ZV90IF9f bikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgpleHRlcm4gdm9p ZCAqbWVtY2hyIChfX2NvbnN0IHZvaWQgKl9fcywgaW50IF9fYywgc2l6ZV90IF9fbikKICAgICAg dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgpleHRlcm4gdm9pZCAqcmF3 bWVtY2hyIChfX2NvbnN0IHZvaWQgKl9fcywgaW50IF9fYykgdGhyb3cgKCkgX19hdHRyaWJ1dGVf XyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIHZvaWQgKm1lbXJjaHIgKF9fY29uc3Qgdm9pZCAqX19z LCBpbnQgX19jLCBzaXplX3QgX19uKQogICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19w dXJlX18pKTsKCgoKCmV4dGVybiBjaGFyICpzdHJjcHkgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0 LCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMpCiAgICAgdGhyb3cgKCk7CgpleHRlcm4g Y2hhciAqc3RybmNweSAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsCiAgICAgICAgICAgICAgICAg ICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24pIHRocm93ICgp OwoKCmV4dGVybiBjaGFyICpzdHJjYXQgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LCBfX2NvbnN0 IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMpCiAgICAgdGhyb3cgKCk7CgpleHRlcm4gY2hhciAqc3Ry bmNhdCAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBf X3NyYywKICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX24pIHRocm93ICgpOwoKCmV4dGVy biBpbnQgc3RyY21wIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMikKICAg ICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBpbnQgc3RybmNt cCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIsIHNpemVfdCBfX24pCiAg ICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIGludCBzdHJj b2xsIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMikKICAgICB0aHJvdyAo KSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBzaXplX3Qgc3RyeGZybSAoY2hh ciAqX19yZXN0cmljdCBfX2Rlc3QsCiAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFy ICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKIyAxMTEgIi91c3IvaW5j bHVkZS9zdHJpbmcuaCIgMwpleHRlcm4gaW50IF9fc3RyY29sbF9sIChfX2NvbnN0IGNoYXIgKl9f czEsIF9fY29uc3QgY2hhciAqX19zMiwgX19sb2NhbGVfdCBfX2wpCiAgICAgdGhyb3cgKCkgX19h dHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gc2l6ZV90IF9fc3RyeGZybV9sIChjaGFy ICpfX2Rlc3QsIF9fY29uc3QgY2hhciAqX19zcmMsIHNpemVfdCBfX24sCiAgICAgICAgICAgICAg ICAgICAgICAgICAgIF9fbG9jYWxlX3QgX19sKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBjaGFyICpz dHJkdXAgKF9fY29uc3QgY2hhciAqX19zKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19tYWxs b2NfXykpOwoKCgoKCgpleHRlcm4gY2hhciAqc3RybmR1cCAoX19jb25zdCBjaGFyICpfX3N0cmlu Zywgc2l6ZV90IF9fbikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykp OwojIDE1NSAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAzCmV4dGVybiBjaGFyICpzdHJjaHIgKF9f Y29uc3QgY2hhciAqX19zLCBpbnQgX19jKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJl X18pKTsKCmV4dGVybiBjaGFyICpzdHJyY2hyIChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYykg dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgpleHRlcm4gY2hhciAqc3Ry Y2hybnVsIChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYykgdGhyb3cgKCkgX19hdHRyaWJ1dGVf XyAoKF9fcHVyZV9fKSk7CgoKCgpleHRlcm4gc2l6ZV90IHN0cmNzcG4gKF9fY29uc3QgY2hhciAq X19zLCBfX2NvbnN0IGNoYXIgKl9fcmVqZWN0KQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18g KChfX3B1cmVfXykpOwoKCmV4dGVybiBzaXplX3Qgc3Ryc3BuIChfX2NvbnN0IGNoYXIgKl9fcywg X19jb25zdCBjaGFyICpfX2FjY2VwdCkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19w dXJlX18pKTsKCmV4dGVybiBjaGFyICpzdHJwYnJrIChfX2NvbnN0IGNoYXIgKl9fcywgX19jb25z dCBjaGFyICpfX2FjY2VwdCkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18p KTsKCmV4dGVybiBjaGFyICpzdHJzdHIgKF9fY29uc3QgY2hhciAqX19oYXlzdGFjaywgX19jb25z dCBjaGFyICpfX25lZWRsZSkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18p KTsKCgoKZXh0ZXJuIGNoYXIgKnN0cmNhc2VzdHIgKF9fY29uc3QgY2hhciAqX19oYXlzdGFjaywg X19jb25zdCBjaGFyICpfX25lZWRsZSkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19w dXJlX18pKTsKCgoKZXh0ZXJuIGNoYXIgKnN0cnRvayAoY2hhciAqX19yZXN0cmljdCBfX3MsIF9f Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX2RlbGltKQogICAgIHRocm93ICgpOwoKCgpleHRlcm4g Y2hhciAqX19zdHJ0b2tfciAoY2hhciAqX19yZXN0cmljdCBfX3MsCiAgICAgICAgICAgICAgICAg ICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19kZWxpbSwKICAgICAgICAgICAgICAg ICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fc2F2ZV9wdHIpIHRocm93ICgpOwoKZXh0ZXJu IGNoYXIgKnN0cnRva19yIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgX19jb25zdCBjaGFyICpfX3Jl c3RyaWN0IF9fZGVsaW0sCiAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3Qg X19zYXZlX3B0cikgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiB2b2lkICptZW1tZW0gKF9fY29uc3Qg dm9pZCAqX19oYXlzdGFjaywgc2l6ZV90IF9faGF5c3RhY2tsZW4sCiAgICAgICAgICAgICAgICAg ICAgIF9fY29uc3Qgdm9pZCAqX19uZWVkbGUsIHNpemVfdCBfX25lZWRsZWxlbikKICAgICB0aHJv dyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKZXh0ZXJuIHZvaWQgKl9fbWVtcGNw eSAodm9pZCAqX19yZXN0cmljdCBfX2Rlc3QsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fY29u c3Qgdm9pZCAqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CmV4dGVybiB2 b2lkICptZW1wY3B5ICh2b2lkICpfX3Jlc3RyaWN0IF9fZGVzdCwKICAgICAgICAgICAgICAgICAg ICAgIF9fY29uc3Qgdm9pZCAqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbikgdGhyb3cgKCk7 CgoKCgpleHRlcm4gc2l6ZV90IHN0cmxlbiAoX19jb25zdCBjaGFyICpfX3MpIHRocm93ICgpIF9f YXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoKZXh0ZXJuIHNpemVfdCBzdHJubGVuIChfX2Nv bnN0IGNoYXIgKl9fc3RyaW5nLCBzaXplX3QgX19tYXhsZW4pCiAgICAgdGhyb3cgKCkgX19hdHRy aWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgpleHRlcm4gY2hhciAqc3RyZXJyb3IgKGludCBfX2Vy cm51bSkgdGhyb3cgKCk7CgoKCmV4dGVybiBjaGFyICpzdHJlcnJvcl9yIChpbnQgX19lcnJudW0s IGNoYXIgKl9fYnVmLCBzaXplX3QgX19idWZsZW4pIHRocm93ICgpOwoKCgoKZXh0ZXJuIHZvaWQg X19iemVybyAodm9pZCAqX19zLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHZvaWQg YmNvcHkgKF9fY29uc3Qgdm9pZCAqX19zcmMsIHZvaWQgKl9fZGVzdCwgc2l6ZV90IF9fbikgdGhy b3cgKCk7CgoKZXh0ZXJuIHZvaWQgYnplcm8gKHZvaWQgKl9fcywgc2l6ZV90IF9fbikgdGhyb3cg KCk7CgoKZXh0ZXJuIGludCBiY21wIChfX2NvbnN0IHZvaWQgKl9fczEsIF9fY29uc3Qgdm9pZCAq X19zMiwgc2l6ZV90IF9fbikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18p KTsKCgpleHRlcm4gY2hhciAqaW5kZXggKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19jKSB0aHJv dyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgpleHRlcm4gY2hhciAqcmluZGV4IChf X2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVy ZV9fKSk7CgoKCmV4dGVybiBpbnQgZmZzIChpbnQgX19pKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9f ICgoX19jb25zdF9fKSk7CgoKCgpleHRlcm4gaW50IGZmc2wgKGxvbmcgaW50IF9fbCkgdGhyb3cg KCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKX19leHRlbnNpb25fXyBleHRlcm4gaW50 IGZmc2xsIChsb25nIGxvbmcgaW50IF9fbGwpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAo KF9fY29uc3RfXykpOwoKCgoKZXh0ZXJuIGludCBzdHJjYXNlY21wIChfX2NvbnN0IGNoYXIgKl9f czEsIF9fY29uc3QgY2hhciAqX19zMikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19w dXJlX18pKTsKCgpleHRlcm4gaW50IHN0cm5jYXNlY21wIChfX2NvbnN0IGNoYXIgKl9fczEsIF9f Y29uc3QgY2hhciAqX19zMiwgc2l6ZV90IF9fbikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9f ICgoX19wdXJlX18pKTsKCgoKCgpleHRlcm4gaW50IF9fc3RyY2FzZWNtcF9sIChfX2NvbnN0IGNo YXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAg X19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7Cgpl eHRlcm4gaW50IF9fc3RybmNhc2VjbXBfbCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNo YXIgKl9fczIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19uLCBfX2xvY2Fs ZV90IF9fbG9jKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoK CmV4dGVybiBjaGFyICpzdHJzZXAgKGNoYXIgKipfX3Jlc3RyaWN0IF9fc3RyaW5ncCwKICAgICAg ICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZGVsaW0pIHRocm93ICgp OwoKCgoKZXh0ZXJuIGludCBzdHJ2ZXJzY21wIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3Qg Y2hhciAqX19zMikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgpl eHRlcm4gY2hhciAqc3Ryc2lnbmFsIChpbnQgX19zaWcpIHRocm93ICgpOwoKCmV4dGVybiBjaGFy ICpfX3N0cGNweSAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsIF9fY29uc3QgY2hhciAqX19yZXN0 cmljdCBfX3NyYykKICAgICB0aHJvdyAoKTsKZXh0ZXJuIGNoYXIgKnN0cGNweSAoY2hhciAqX19y ZXN0cmljdCBfX2Rlc3QsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYykKICAgICB0aHJv dyAoKTsKCgoKZXh0ZXJuIGNoYXIgKl9fc3RwbmNweSAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3Qs CiAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYywg c2l6ZV90IF9fbikgdGhyb3cgKCk7CmV4dGVybiBjaGFyICpzdHBuY3B5IChjaGFyICpfX3Jlc3Ry aWN0IF9fZGVzdCwKICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmlj dCBfX3NyYywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKZXh0ZXJuIGNoYXIgKnN0cmZyeSAoY2hh ciAqX19zdHJpbmcpIHRocm93ICgpOwoKCmV4dGVybiB2b2lkICptZW1mcm9iICh2b2lkICpfX3Ms IHNpemVfdCBfX24pIHRocm93ICgpOwoKCgoKCgpleHRlcm4gY2hhciAqYmFzZW5hbWUgKF9fY29u c3QgY2hhciAqX19maWxlbmFtZSkgdGhyb3cgKCk7CiMgMzY0ICIvdXNyL2luY2x1ZGUvc3RyaW5n LmgiIDMKfQojIDUyICIvdXNyL2N5Z251cy9iaW4vLi4vaW5jbHVkZS9jKysvMy4xLjEvY3N0cmlu ZyIgMiAzCiMgNzcgIi91c3IvY3lnbnVzL2Jpbi8uLi9pbmNsdWRlL2MrKy8zLjEuMS9jc3RyaW5n IiAzCm5hbWVzcGFjZSBzdGQKewogIHVzaW5nIDo6bWVtY3B5OwogIHVzaW5nIDo6bWVtbW92ZTsK ICB1c2luZyA6OnN0cmNweTsKICB1c2luZyA6OnN0cm5jcHk7CiAgdXNpbmcgOjpzdHJjYXQ7CiAg dXNpbmcgOjpzdHJuY2F0OwogIHVzaW5nIDo6bWVtY21wOwogIHVzaW5nIDo6c3RyY21wOwogIHVz aW5nIDo6c3RyY29sbDsKICB1c2luZyA6OnN0cm5jbXA7CiAgdXNpbmcgOjpzdHJ4ZnJtOwogIHVz aW5nIDo6c3RyY3NwbjsKICB1c2luZyA6OnN0cnNwbjsKICB1c2luZyA6OnN0cnRvazsKICB1c2lu ZyA6Om1lbXNldDsKICB1c2luZyA6OnN0cmVycm9yOwogIHVzaW5nIDo6c3RybGVuOwoKICB1c2lu ZyA6Om1lbWNocjsKCiAgaW5saW5lIHZvaWQqCiAgbWVtY2hyKHZvaWQqIF9fcCwgaW50IF9fYywg c2l6ZV90IF9fbikKICB7IHJldHVybiBtZW1jaHIoY29uc3RfY2FzdDxjb25zdCB2b2lkKj4oX19w KSwgX19jLCBfX24pOyB9CgogIHVzaW5nIDo6c3RyY2hyOwoKICBpbmxpbmUgY2hhcioKICBzdHJj aHIoY2hhciogX19zMSwgaW50IF9fbikKICB7IHJldHVybiBfX2J1aWx0aW5fc3RyY2hyKGNvbnN0 X2Nhc3Q8Y29uc3QgY2hhcio+KF9fczEpLCBfX24pOyB9CgogIHVzaW5nIDo6c3RycGJyazsKCiAg aW5saW5lIGNoYXIqCiAgc3RycGJyayhjaGFyKiBfX3MxLCBjb25zdCBjaGFyKiBfX3MyKQogIHsg cmV0dXJuIF9fYnVpbHRpbl9zdHJwYnJrKGNvbnN0X2Nhc3Q8Y29uc3QgY2hhcio+KF9fczEpLCBf X3MyKTsgfQoKICB1c2luZyA6OnN0cnJjaHI7CgogIGlubGluZSBjaGFyKgogIHN0cnJjaHIoY2hh ciogX19zMSwgaW50IF9fbikKICB7IHJldHVybiBfX2J1aWx0aW5fc3RycmNocihjb25zdF9jYXN0 PGNvbnN0IGNoYXIqPihfX3MxKSwgX19uKTsgfQoKICB1c2luZyA6OnN0cnN0cjsKCiAgaW5saW5l IGNoYXIqCiAgc3Ryc3RyKGNoYXIqIF9fczEsIGNvbnN0IGNoYXIqIF9fczIpCiAgeyByZXR1cm4g X19idWlsdGluX3N0cnN0cihjb25zdF9jYXN0PGNvbnN0IGNoYXIqPihfX3MxKSwgX19zMik7IH0K fQojIDQ1ICIvdXNyL2N5Z251cy9iaW4vLi4vaW5jbHVkZS9jKysvMy4xLjEvYml0cy9jaGFyX3Ry YWl0cy5oIiAyIDMKCgpuYW1lc3BhY2Ugc3RkCnsKCgoKICB0ZW1wbGF0ZTxjbGFzcyBfQ2hhclQ+ CiAgICBzdHJ1Y3QgY2hhcl90cmFpdHMKICAgIHsKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90 eXBlOwoKICAgICAgdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludF90eXBlOwogICAgICB0eXBlZGVm IHN0cmVhbXBvcyBwb3NfdHlwZTsKICAgICAgdHlwZWRlZiBzdHJlYW1vZmYgb2ZmX3R5cGU7CiAg ICAgIHR5cGVkZWYgbWJzdGF0ZV90IHN0YXRlX3R5cGU7CgogICAgICBzdGF0aWMgdm9pZAogICAg ICBhc3NpZ24oY2hhcl90eXBlJiBfX2MxLCBjb25zdCBjaGFyX3R5cGUmIF9fYzIpCiAgICAgIHsg X19jMSA9IF9fYzI7IH0KCiAgICAgIHN0YXRpYyBib29sCiAgICAgIGVxKGNvbnN0IGNoYXJfdHlw ZSYgX19jMSwgY29uc3QgY2hhcl90eXBlJiBfX2MyKQogICAgICB7IHJldHVybiBfX2MxID09IF9f YzI7IH0KCiAgICAgIHN0YXRpYyBib29sCiAgICAgIGx0KGNvbnN0IGNoYXJfdHlwZSYgX19jMSwg Y29uc3QgY2hhcl90eXBlJiBfX2MyKQogICAgICB7IHJldHVybiBfX2MxIDwgX19jMjsgfQoKICAg ICAgc3RhdGljIGludAogICAgICBjb21wYXJlKGNvbnN0IGNoYXJfdHlwZSogX19zMSwgY29uc3Qg Y2hhcl90eXBlKiBfX3MyLCBzaXplX3QgX19uKQogICAgICB7CiAgICAgICAgZm9yIChzaXplX3Qg X19pID0gMDsgX19pIDwgX19uOyArK19faSkKICAgICAgICAgIGlmICghZXEoX19zMVtfX2ldLCBf X3MyW19faV0pKQogICAgICAgICAgICByZXR1cm4gbHQoX19zMVtfX2ldLCBfX3MyW19faV0pID8g LTEgOiAxOwogICAgICAgIHJldHVybiAwOwogICAgICB9CgogICAgICBzdGF0aWMgc2l6ZV90CiAg ICAgIGxlbmd0aChjb25zdCBjaGFyX3R5cGUqIF9fcykKICAgICAgewogICAgICAgIGNvbnN0IGNo YXJfdHlwZSogX19wID0gX19zOwogICAgICAgIHdoaWxlICgqX19wKSArK19fcDsKICAgICAgICBy ZXR1cm4gKF9fcCAtIF9fcyk7CiAgICAgIH0KCiAgICAgIHN0YXRpYyBjb25zdCBjaGFyX3R5cGUq CiAgICAgIGZpbmQoY29uc3QgY2hhcl90eXBlKiBfX3MsIHNpemVfdCBfX24sIGNvbnN0IGNoYXJf dHlwZSYgX19hKQogICAgICB7CiAgICAgICAgZm9yIChjb25zdCBjaGFyX3R5cGUqIF9fcCA9IF9f czsgc2l6ZV90KF9fcCAtIF9fcykgPCBfX247ICsrX19wKQogICAgICAgICAgaWYgKCpfX3AgPT0g X19hKSByZXR1cm4gX19wOwogICAgICAgIHJldHVybiAwOwogICAgICB9CgogICAgICBzdGF0aWMg Y2hhcl90eXBlKgogICAgICBtb3ZlKGNoYXJfdHlwZSogX19zMSwgY29uc3QgY2hhcl90eXBlKiBf X3MyLCBzaXplX3QgX19uKQogICAgICB7IHJldHVybiAoY2hhcl90eXBlKikgbWVtbW92ZShfX3Mx LCBfX3MyLCBfX24gKiBzaXplb2YoY2hhcl90eXBlKSk7IH0KCiAgICAgIHN0YXRpYyBjaGFyX3R5 cGUqCiAgICAgIGNvcHkoY2hhcl90eXBlKiBfX3MxLCBjb25zdCBjaGFyX3R5cGUqIF9fczIsIHNp emVfdCBfX24pCiAgICAgIHsgcmV0dXJuIChjaGFyX3R5cGUqKSBtZW1jcHkoX19zMSwgX19zMiwg X19uICogc2l6ZW9mKGNoYXJfdHlwZSkpOyB9CgogICAgICBzdGF0aWMgY2hhcl90eXBlKgogICAg ICBhc3NpZ24oY2hhcl90eXBlKiBfX3MsIHNpemVfdCBfX24sIGNoYXJfdHlwZSBfX2EpCiAgICAg IHsKICAgICAgICBmb3IgKGNoYXJfdHlwZSogX19wID0gX19zOyBfX3AgPCBfX3MgKyBfX247ICsr X19wKQogICAgICAgICAgYXNzaWduKCpfX3AsIF9fYSk7CiAgICAgICAgcmV0dXJuIF9fczsKICAg ICAgfQoKICAgICAgc3RhdGljIGNoYXJfdHlwZQogICAgICB0b19jaGFyX3R5cGUoY29uc3QgaW50 X3R5cGUmIF9fYykKICAgICAgeyByZXR1cm4gY2hhcl90eXBlKF9fYyk7IH0KCiAgICAgIHN0YXRp YyBpbnRfdHlwZQogICAgICB0b19pbnRfdHlwZShjb25zdCBjaGFyX3R5cGUmIF9fYykgeyByZXR1 cm4gaW50X3R5cGUoX19jKTsgfQoKICAgICAgc3RhdGljIGJvb2wKICAgICAgZXFfaW50X3R5cGUo Y29uc3QgaW50X3R5cGUmIF9fYzEsIGNvbnN0IGludF90eXBlJiBfX2MyKQogICAgICB7IHJldHVy biBfX2MxID09IF9fYzI7IH0KCiAgICAgIHN0YXRpYyBpbnRfdHlwZQogICAgICBlb2YoKSB7IHJl dHVybiBzdGF0aWNfY2FzdDxpbnRfdHlwZT4oLTEpOyB9CgogICAgICBzdGF0aWMgaW50X3R5cGUK ICAgICAgbm90X2VvZihjb25zdCBpbnRfdHlwZSYgX19jKQogICAgICB7IHJldHVybiBlcV9pbnRf dHlwZShfX2MsIGVvZigpKSA/IGludF90eXBlKDApIDogX19jOyB9CiAgICB9OwoKCgogIHRlbXBs YXRlPD4KICAgIHN0cnVjdCBjaGFyX3RyYWl0czxjaGFyPgogICAgewogICAgICB0eXBlZGVmIGNo YXIgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIGludCBpbnRfdHlwZTsKICAgICAgdHlwZWRlZiBz dHJlYW1wb3MgcG9zX3R5cGU7CiAgICAgIHR5cGVkZWYgc3RyZWFtb2ZmIG9mZl90eXBlOwogICAg ICB0eXBlZGVmIG1ic3RhdGVfdCBzdGF0ZV90eXBlOwoKICAgICAgc3RhdGljIHZvaWQKICAgICAg YXNzaWduKGNoYXJfdHlwZSYgX19jMSwgY29uc3QgY2hhcl90eXBlJiBfX2MyKQogICAgICB7IF9f YzEgPSBfX2MyOyB9CgogICAgICBzdGF0aWMgYm9vbAogICAgICBlcShjb25zdCBjaGFyX3R5cGUm IF9fYzEsIGNvbnN0IGNoYXJfdHlwZSYgX19jMikKICAgICAgeyByZXR1cm4gX19jMSA9PSBfX2My OyB9CgogICAgICBzdGF0aWMgYm9vbAogICAgICBsdChjb25zdCBjaGFyX3R5cGUmIF9fYzEsIGNv bnN0IGNoYXJfdHlwZSYgX19jMikKICAgICAgeyByZXR1cm4gX19jMSA8IF9fYzI7IH0KCiAgICAg IHN0YXRpYyBpbnQKICAgICAgY29tcGFyZShjb25zdCBjaGFyX3R5cGUqIF9fczEsIGNvbnN0IGNo YXJfdHlwZSogX19zMiwgc2l6ZV90IF9fbikKICAgICAgeyByZXR1cm4gbWVtY21wKF9fczEsIF9f czIsIF9fbik7IH0KCiAgICAgIHN0YXRpYyBzaXplX3QKICAgICAgbGVuZ3RoKGNvbnN0IGNoYXJf dHlwZSogX19zKQogICAgICB7IHJldHVybiBzdHJsZW4oX19zKTsgfQoKICAgICAgc3RhdGljIGNv bnN0IGNoYXJfdHlwZSoKICAgICAgZmluZChjb25zdCBjaGFyX3R5cGUqIF9fcywgc2l6ZV90IF9f biwgY29uc3QgY2hhcl90eXBlJiBfX2EpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0 IGNoYXJfdHlwZSo+KG1lbWNocihfX3MsIF9fYSwgX19uKSk7IH0KCiAgICAgIHN0YXRpYyBjaGFy X3R5cGUqCiAgICAgIG1vdmUoY2hhcl90eXBlKiBfX3MxLCBjb25zdCBjaGFyX3R5cGUqIF9fczIs IHNpemVfdCBfX24pCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGNoYXJfdHlwZSo+KG1lbW1v dmUoX19zMSwgX19zMiwgX19uKSk7IH0KCiAgICAgIHN0YXRpYyBjaGFyX3R5cGUqCiAgICAgIGNv cHkoY2hhcl90eXBlKiBfX3MxLCBjb25zdCBjaGFyX3R5cGUqIF9fczIsIHNpemVfdCBfX24pCiAg ICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGNoYXJfdHlwZSo+KG1lbWNweShfX3MxLCBfX3MyLCBf X24pKTsgfQoKICAgICAgc3RhdGljIGNoYXJfdHlwZSoKICAgICAgYXNzaWduKGNoYXJfdHlwZSog X19zLCBzaXplX3QgX19uLCBjaGFyX3R5cGUgX19hKQogICAgICB7IHJldHVybiBzdGF0aWNfY2Fz dDxjaGFyX3R5cGUqPihtZW1zZXQoX19zLCBfX2EsIF9fbikpOyB9CgogICAgICBzdGF0aWMgY2hh cl90eXBlCiAgICAgIHRvX2NoYXJfdHlwZShjb25zdCBpbnRfdHlwZSYgX19jKQogICAgICB7IHJl dHVybiBzdGF0aWNfY2FzdDxjaGFyX3R5cGU+KF9fYyk7IH0KCgoKICAgICAgc3RhdGljIGludF90 eXBlCiAgICAgIHRvX2ludF90eXBlKGNvbnN0IGNoYXJfdHlwZSYgX19jKQogICAgICB7IHJldHVy biBzdGF0aWNfY2FzdDxpbnRfdHlwZT4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oX19jKSk7 IH0KCiAgICAgIHN0YXRpYyBib29sCiAgICAgIGVxX2ludF90eXBlKGNvbnN0IGludF90eXBlJiBf X2MxLCBjb25zdCBpbnRfdHlwZSYgX19jMikKICAgICAgeyByZXR1cm4gX19jMSA9PSBfX2MyOyB9 CgogICAgICBzdGF0aWMgaW50X3R5cGUKICAgICAgZW9mKCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8 aW50X3R5cGU+KCgtMSkpOyB9CgogICAgICBzdGF0aWMgaW50X3R5cGUKICAgICAgbm90X2VvZihj b25zdCBpbnRfdHlwZSYgX19jKQogICAgICB7IHJldHVybiAoX19jID09IGVvZigpKSA/IDAgOiBf X2M7IH0KICB9OwoKCgogIHRlbXBsYXRlPD4KICAgIHN0cnVjdCBjaGFyX3RyYWl0czx3Y2hhcl90 PgogICAgewogICAgICB0eXBlZGVmIHdjaGFyX3QgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIHdp bnRfdCBpbnRfdHlwZTsKICAgICAgdHlwZWRlZiBzdHJlYW1vZmYgb2ZmX3R5cGU7CiAgICAgIHR5 cGVkZWYgd3N0cmVhbXBvcyBwb3NfdHlwZTsKICAgICAgdHlwZWRlZiBtYnN0YXRlX3Qgc3RhdGVf dHlwZTsKCiAgICAgIHN0YXRpYyB2b2lkCiAgICAgIGFzc2lnbihjaGFyX3R5cGUmIF9fYzEsIGNv bnN0IGNoYXJfdHlwZSYgX19jMikKICAgICAgeyBfX2MxID0gX19jMjsgfQoKICAgICAgc3RhdGlj IGJvb2wKICAgICAgZXEoY29uc3QgY2hhcl90eXBlJiBfX2MxLCBjb25zdCBjaGFyX3R5cGUmIF9f YzIpCiAgICAgIHsgcmV0dXJuIF9fYzEgPT0gX19jMjsgfQoKICAgICAgc3RhdGljIGJvb2wKICAg ICAgbHQoY29uc3QgY2hhcl90eXBlJiBfX2MxLCBjb25zdCBjaGFyX3R5cGUmIF9fYzIpCiAgICAg IHsgcmV0dXJuIF9fYzEgPCBfX2MyOyB9CgogICAgICBzdGF0aWMgaW50CiAgICAgIGNvbXBhcmUo Y29uc3QgY2hhcl90eXBlKiBfX3MxLCBjb25zdCBjaGFyX3R5cGUqIF9fczIsIHNpemVfdCBfX24p CiAgICAgIHsgcmV0dXJuIHdtZW1jbXAoX19zMSwgX19zMiwgX19uKTsgfQoKICAgICAgc3RhdGlj IHNpemVfdAogICAgICBsZW5ndGgoY29uc3QgY2hhcl90eXBlKiBfX3MpCiAgICAgIHsgcmV0dXJu IHdjc2xlbihfX3MpOyB9CgogICAgICBzdGF0aWMgY29uc3QgY2hhcl90eXBlKgogICAgICBmaW5k KGNvbnN0IGNoYXJfdHlwZSogX19zLCBzaXplX3QgX19uLCBjb25zdCBjaGFyX3R5cGUmIF9fYSkK ICAgICAgeyByZXR1cm4gd21lbWNocihfX3MsIF9fYSwgX19uKTsgfQoKICAgICAgc3RhdGljIGNo YXJfdHlwZSoKICAgICAgbW92ZShjaGFyX3R5cGUqIF9fczEsIGNvbnN0IGNoYXJfdHlwZSogX19z MiwgaW50X3R5cGUgX19uKQogICAgICB7IHJldHVybiB3bWVtbW92ZShfX3MxLCBfX3MyLCBfX24p OyB9CgogICAgICBzdGF0aWMgY2hhcl90eXBlKgogICAgICBjb3B5KGNoYXJfdHlwZSogX19zMSwg Y29uc3QgY2hhcl90eXBlKiBfX3MyLCBzaXplX3QgX19uKQogICAgICB7IHJldHVybiB3bWVtY3B5 KF9fczEsIF9fczIsIF9fbik7IH0KCiAgICAgIHN0YXRpYyBjaGFyX3R5cGUqCiAgICAgIGFzc2ln bihjaGFyX3R5cGUqIF9fcywgc2l6ZV90IF9fbiwgY2hhcl90eXBlIF9fYSkKICAgICAgeyByZXR1 cm4gd21lbXNldChfX3MsIF9fYSwgX19uKTsgfQoKICAgICAgc3RhdGljIGNoYXJfdHlwZQogICAg ICB0b19jaGFyX3R5cGUoY29uc3QgaW50X3R5cGUmIF9fYykgeyByZXR1cm4gY2hhcl90eXBlKF9f Yyk7IH0KCiAgICAgIHN0YXRpYyBpbnRfdHlwZQogICAgICB0b19pbnRfdHlwZShjb25zdCBjaGFy X3R5cGUmIF9fYykgeyByZXR1cm4gaW50X3R5cGUoX19jKTsgfQoKICAgICAgc3RhdGljIGJvb2wK ICAgICAgZXFfaW50X3R5cGUoY29uc3QgaW50X3R5cGUmIF9fYzEsIGNvbnN0IGludF90eXBlJiBf X2MyKQogICAgICB7IHJldHVybiBfX2MxID09IF9fYzI7IH0KCiAgICAgIHN0YXRpYyBpbnRfdHlw ZQogICAgICBlb2YoKSB7IHJldHVybiBzdGF0aWNfY2FzdDxpbnRfdHlwZT4oKDB4ZmZmZmZmZmZ1 KSk7IH0KCiAgICAgIHN0YXRpYyBpbnRfdHlwZQogICAgICBub3RfZW9mKGNvbnN0IGludF90eXBl JiBfX2MpCiAgICAgIHsgcmV0dXJuIGVxX2ludF90eXBlKF9fYywgZW9mKCkpID8gMCA6IF9fYzsg fQogIH07CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAg ICBzdHJ1Y3QgX0NoYXJfdHJhaXRzX21hdGNoCiAgICB7CiAgICAgIF9DaGFyVCBfTV9jOwogICAg ICBfQ2hhcl90cmFpdHNfbWF0Y2goX0NoYXJUIGNvbnN0JiBfX2MpIDogX01fYyhfX2MpIHsgfQoK ICAgICAgYm9vbAogICAgICBvcGVyYXRvcigpKF9DaGFyVCBjb25zdCYgX19hKSB7IHJldHVybiBf VHJhaXRzOjplcShfTV9jLCBfX2EpOyB9CiAgICB9Owp9CiMgNDcgIi91c3IvY3lnbnVzL2Jpbi8u Li9pbmNsdWRlL2MrKy8zLjEuMS9pb3MiIDIgMwoKIyAxICIvdXNyL2N5Z251cy9iaW4vLi4vaW5j bHVkZS9jKysvMy4xLjEvYml0cy9sb2NhbGVmd2QuaCIgMSAzCiMgNDQgIi91c3IvY3lnbnVzL2Jp bi8uLi9pbmNsdWRlL2MrKy8zLjEuMS9iaXRzL2xvY2FsZWZ3ZC5oIiAzCgoKIyAxICIvdXNyL2N5 Z251cy9iaW4vLi4vaW5jbHVkZS9jKysvMy4xLjEvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9jKyts b2NhbGUuaCIgMSAzCiMgMzYgIi91c3IvY3lnbnVzL2Jpbi8uLi9pbmNsdWRlL2MrKy8zLjEuMS9p Njg2LXBjLWxpbnV4LWdudS9iaXRzL2MrK2xvY2FsZS5oIiAzCiMgMSAiL3Vzci9jeWdudXMvYmlu Ly4uL2luY2x1ZGUvYysrLzMuMS4xL2Nsb2NhbGUiIDEgMwojIDQ4ICIvdXNyL2N5Z251cy9iaW4v Li4vaW5jbHVkZS9jKysvMy4xLjEvY2xvY2FsZSIgMwoKIyAxICIvdXNyL2luY2x1ZGUvbG9jYWxl LmgiIDEgMwojIDI5ICIvdXNyL2luY2x1ZGUvbG9jYWxlLmgiIDMKIyAxICIvdXNyL2N5Z251cy9i aW4vLi4vbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4xLjEvaW5jbHVkZS9zdGRkZWYu aCIgMSAzCiMgMzAgIi91c3IvaW5jbHVkZS9sb2NhbGUuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRl L2JpdHMvbG9jYWxlLmgiIDEgMwojIDI3ICIvdXNyL2luY2x1ZGUvYml0cy9sb2NhbGUuaCIgMwpl bnVtCnsKICBfX0xDX0NUWVBFID0gMCwKICBfX0xDX05VTUVSSUMgPSAxLAogIF9fTENfVElNRSA9 IDIsCiAgX19MQ19DT0xMQVRFID0gMywKICBfX0xDX01PTkVUQVJZID0gNCwKICBfX0xDX01FU1NB R0VTID0gNSwKICBfX0xDX0FMTCA9IDYsCiAgX19MQ19QQVBFUiA9IDcsCiAgX19MQ19OQU1FID0g OCwKICBfX0xDX0FERFJFU1MgPSA5LAogIF9fTENfVEVMRVBIT05FID0gMTAsCiAgX19MQ19NRUFT VVJFTUVOVCA9IDExLAogIF9fTENfSURFTlRJRklDQVRJT04gPSAxMgp9OwojIDMxICIvdXNyL2lu Y2x1ZGUvbG9jYWxlLmgiIDIgMwoKZXh0ZXJuICJDIiB7CiMgNTIgIi91c3IvaW5jbHVkZS9sb2Nh bGUuaCIgMwpzdHJ1Y3QgbGNvbnYKewoKCiAgY2hhciAqZGVjaW1hbF9wb2ludDsKICBjaGFyICp0 aG91c2FuZHNfc2VwOwoKCgoKCiAgY2hhciAqZ3JvdXBpbmc7CgoKCgoKICBjaGFyICppbnRfY3Vy cl9zeW1ib2w7CiAgY2hhciAqY3VycmVuY3lfc3ltYm9sOwogIGNoYXIgKm1vbl9kZWNpbWFsX3Bv aW50OwogIGNoYXIgKm1vbl90aG91c2FuZHNfc2VwOwogIGNoYXIgKm1vbl9ncm91cGluZzsKICBj aGFyICpwb3NpdGl2ZV9zaWduOwogIGNoYXIgKm5lZ2F0aXZlX3NpZ247CiAgY2hhciBpbnRfZnJh Y19kaWdpdHM7CiAgY2hhciBmcmFjX2RpZ2l0czsKCiAgY2hhciBwX2NzX3ByZWNlZGVzOwoKICBj aGFyIHBfc2VwX2J5X3NwYWNlOwoKICBjaGFyIG5fY3NfcHJlY2VkZXM7CgogIGNoYXIgbl9zZXBf Ynlfc3BhY2U7CgoKCgoKCiAgY2hhciBwX3NpZ25fcG9zbjsKICBjaGFyIG5fc2lnbl9wb3NuOwoK CiAgY2hhciBpbnRfcF9jc19wcmVjZWRlczsKCiAgY2hhciBpbnRfcF9zZXBfYnlfc3BhY2U7Cgog IGNoYXIgaW50X25fY3NfcHJlY2VkZXM7CgogIGNoYXIgaW50X25fc2VwX2J5X3NwYWNlOwoKCgoK CgogIGNoYXIgaW50X3Bfc2lnbl9wb3NuOwogIGNoYXIgaW50X25fc2lnbl9wb3NuOwojIDExOSAi L3Vzci9pbmNsdWRlL2xvY2FsZS5oIiAzCn07CgoKCmV4dGVybiBjaGFyICpzZXRsb2NhbGUgKGlu dCBfX2NhdGVnb3J5LCBfX2NvbnN0IGNoYXIgKl9fbG9jYWxlKSB0aHJvdyAoKTsKCgpleHRlcm4g c3RydWN0IGxjb252ICpsb2NhbGVjb252ICh2b2lkKSB0aHJvdyAoKTsKIyAxNDkgIi91c3IvaW5j bHVkZS9sb2NhbGUuaCIgMwpleHRlcm4gX19sb2NhbGVfdCBfX25ld2xvY2FsZSAoaW50IF9fY2F0 ZWdvcnlfbWFzaywgX19jb25zdCBjaGFyICpfX2xvY2FsZSwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIF9fbG9jYWxlX3QgX19iYXNlKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIF9fbG9jYWxl X3QgX19kdXBsb2NhbGUgKF9fbG9jYWxlX3QgX19kYXRhc2V0KSB0aHJvdyAoKTsKCgoKZXh0ZXJu IHZvaWQgX19mcmVlbG9jYWxlIChfX2xvY2FsZV90IF9fZGF0YXNldCkgdGhyb3cgKCk7CgoKfQoj IDUwICIvdXNyL2N5Z251cy9iaW4vLi4vaW5jbHVkZS9jKysvMy4xLjEvY2xvY2FsZSIgMiAzCgoK CgoKbmFtZXNwYWNlIHN0ZAp7CiAgdXNpbmcgOjpsY29udjsKICB1c2luZyA6OnNldGxvY2FsZTsK ICB1c2luZyA6OmxvY2FsZWNvbnY7Cn0KIyAzNyAiL3Vzci9jeWdudXMvYmluLy4uL2luY2x1ZGUv YysrLzMuMS4xL2k2ODYtcGMtbGludXgtZ251L2JpdHMvYysrbG9jYWxlLmgiIDIgMwoKbmFtZXNw YWNlIHN0ZAp7CiAgdHlwZWRlZiBpbnQqIF9fY19sb2NhbGU7Cn0KIyA0NyAiL3Vzci9jeWdudXMv YmluLy4uL2luY2x1ZGUvYysrLzMuMS4xL2JpdHMvbG9jYWxlZndkLmgiIDIgMwojIDEgIi91c3Iv Y3lnbnVzL2Jpbi8uLi9pbmNsdWRlL2MrKy8zLjEuMS9jbGltaXRzIiAxIDMKIyA0OCAiL3Vzci9j eWdudXMvYmluLy4uL2luY2x1ZGUvYysrLzMuMS4xL2NsaW1pdHMiIDMKCiMgMSAiL3Vzci9jeWdu dXMvYmluLy4uL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMS4xL2luY2x1ZGUvbGlt aXRzLmgiIDEgMwojIDExICIvdXNyL2N5Z251cy9iaW4vLi4vbGliL2djYy1saWIvaTY4Ni1wYy1s aW51eC1nbnUvMy4xLjEvaW5jbHVkZS9saW1pdHMuaCIgMwojIDEgIi91c3IvY3lnbnVzL2Jpbi8u Li9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjEuMS9pbmNsdWRlL3N5c2xpbWl0cy5o IiAxIDMKCgoKCgoKIyAxICIvdXNyL2N5Z251cy9iaW4vLi4vbGliL2djYy1saWIvaTY4Ni1wYy1s aW51eC1nbnUvMy4xLjEvaW5jbHVkZS9saW1pdHMuaCIgMSAzCiMgMTMyICIvdXNyL2N5Z251cy9i aW4vLi4vbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4xLjEvaW5jbHVkZS9saW1pdHMu aCIgMwojIDEgIi91c3IvaW5jbHVkZS9saW1pdHMuaCIgMSAzCiMgMTQ0ICIvdXNyL2luY2x1ZGUv bGltaXRzLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9wb3NpeDFfbGltLmgiIDEgMwojIDEy NiAiL3Vzci9pbmNsdWRlL2JpdHMvcG9zaXgxX2xpbS5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2Jp dHMvbG9jYWxfbGltLmgiIDEgMwojIDM2ICIvdXNyL2luY2x1ZGUvYml0cy9sb2NhbF9saW0uaCIg MwojIDEgIi91c3IvaW5jbHVkZS9saW51eC9saW1pdHMuaCIgMSAzCiMgMzcgIi91c3IvaW5jbHVk ZS9iaXRzL2xvY2FsX2xpbS5oIiAyIDMKIyAxMjcgIi91c3IvaW5jbHVkZS9iaXRzL3Bvc2l4MV9s aW0uaCIgMiAzCiMgMTQ1ICIvdXNyL2luY2x1ZGUvbGltaXRzLmgiIDIgMwoKCgojIDEgIi91c3Iv aW5jbHVkZS9iaXRzL3Bvc2l4Ml9saW0uaCIgMSAzCiMgMTQ5ICIvdXNyL2luY2x1ZGUvbGltaXRz LmgiIDIgMwoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3hvcGVuX2xpbS5oIiAxIDMKIyAzNCAi L3Vzci9pbmNsdWRlL2JpdHMveG9wZW5fbGltLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9z dGRpb19saW0uaCIgMSAzCiMgMzUgIi91c3IvaW5jbHVkZS9iaXRzL3hvcGVuX2xpbS5oIiAyIDMK IyAxMzYgIi91c3IvaW5jbHVkZS9iaXRzL3hvcGVuX2xpbS5oIiAzCiMgMSAiL3Vzci9pbmNsdWRl L2JpdHMvd29yZHNpemUuaCIgMSAzCiMgMTM3ICIvdXNyL2luY2x1ZGUvYml0cy94b3Blbl9saW0u aCIgMiAzCiMgMTUzICIvdXNyL2luY2x1ZGUvbGltaXRzLmgiIDIgMwojIDEzMyAiL3Vzci9jeWdu dXMvYmluLy4uL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMS4xL2luY2x1ZGUvbGlt aXRzLmgiIDIgMwojIDggIi91c3IvY3lnbnVzL2Jpbi8uLi9saWIvZ2NjLWxpYi9pNjg2LXBjLWxp bnV4LWdudS8zLjEuMS9pbmNsdWRlL3N5c2xpbWl0cy5oIiAyIDMKIyAxMiAiL3Vzci9jeWdudXMv YmluLy4uL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMS4xL2luY2x1ZGUvbGltaXRz LmgiIDIgMwojIDUwICIvdXNyL2N5Z251cy9iaW4vLi4vaW5jbHVkZS9jKysvMy4xLjEvY2xpbWl0 cyIgMiAzCiMgNDggIi91c3IvY3lnbnVzL2Jpbi8uLi9pbmNsdWRlL2MrKy8zLjEuMS9iaXRzL2xv Y2FsZWZ3ZC5oIiAyIDMKIyAxICIvdXNyL2N5Z251cy9iaW4vLi4vaW5jbHVkZS9jKysvMy4xLjEv Y2N0eXBlIiAxIDMKIyA0NyAiL3Vzci9jeWdudXMvYmluLy4uL2luY2x1ZGUvYysrLzMuMS4xL2Nj dHlwZSIgMwoKCiMgMSAiL3Vzci9pbmNsdWRlL2N0eXBlLmgiIDEgMwojIDI5ICIvdXNyL2luY2x1 ZGUvY3R5cGUuaCIgMwpleHRlcm4gIkMiIHsKIyA0MCAiL3Vzci9pbmNsdWRlL2N0eXBlLmgiIDMK IyAxICIvdXNyL2luY2x1ZGUvZW5kaWFuLmgiIDEgMwojIDM3ICIvdXNyL2luY2x1ZGUvZW5kaWFu LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9lbmRpYW4uaCIgMSAzCiMgMzggIi91c3IvaW5j bHVkZS9lbmRpYW4uaCIgMiAzCiMgNDEgIi91c3IvaW5jbHVkZS9jdHlwZS5oIiAyIDMKCgoKCgoK ZW51bQp7CiAgX0lTdXBwZXIgPSAoKDApIDwgOCA/ICgoMSA8PCAoMCkpIDw8IDgpIDogKCgxIDw8 ICgwKSkgPj4gOCkpLAogIF9JU2xvd2VyID0gKCgxKSA8IDggPyAoKDEgPDwgKDEpKSA8PCA4KSA6 ICgoMSA8PCAoMSkpID4+IDgpKSwKICBfSVNhbHBoYSA9ICgoMikgPCA4ID8gKCgxIDw8ICgyKSkg PDwgOCkgOiAoKDEgPDwgKDIpKSA+PiA4KSksCiAgX0lTZGlnaXQgPSAoKDMpIDwgOCA/ICgoMSA8 PCAoMykpIDw8IDgpIDogKCgxIDw8ICgzKSkgPj4gOCkpLAogIF9JU3hkaWdpdCA9ICgoNCkgPCA4 ID8gKCgxIDw8ICg0KSkgPDwgOCkgOiAoKDEgPDwgKDQpKSA+PiA4KSksCiAgX0lTc3BhY2UgPSAo KDUpIDwgOCA/ICgoMSA8PCAoNSkpIDw8IDgpIDogKCgxIDw8ICg1KSkgPj4gOCkpLAogIF9JU3By aW50ID0gKCg2KSA8IDggPyAoKDEgPDwgKDYpKSA8PCA4KSA6ICgoMSA8PCAoNikpID4+IDgpKSwK ICBfSVNncmFwaCA9ICgoNykgPCA4ID8gKCgxIDw8ICg3KSkgPDwgOCkgOiAoKDEgPDwgKDcpKSA+ PiA4KSksCiAgX0lTYmxhbmsgPSAoKDgpIDwgOCA/ICgoMSA8PCAoOCkpIDw8IDgpIDogKCgxIDw8 ICg4KSkgPj4gOCkpLAogIF9JU2NudHJsID0gKCg5KSA8IDggPyAoKDEgPDwgKDkpKSA8PCA4KSA6 ICgoMSA8PCAoOSkpID4+IDgpKSwKICBfSVNwdW5jdCA9ICgoMTApIDwgOCA/ICgoMSA8PCAoMTAp KSA8PCA4KSA6ICgoMSA8PCAoMTApKSA+PiA4KSksCiAgX0lTYWxudW0gPSAoKDExKSA8IDggPyAo KDEgPDwgKDExKSkgPDwgOCkgOiAoKDEgPDwgKDExKSkgPj4gOCkpCn07CiMgNzUgIi91c3IvaW5j bHVkZS9jdHlwZS5oIiAzCmV4dGVybiBfX2NvbnN0IHVuc2lnbmVkIHNob3J0IGludCAqX19jdHlw ZV9iOwpleHRlcm4gX19jb25zdCBfX2ludDMyX3QgKl9fY3R5cGVfdG9sb3dlcjsKZXh0ZXJuIF9f Y29uc3QgX19pbnQzMl90ICpfX2N0eXBlX3RvdXBwZXI7CiMgOTEgIi91c3IvaW5jbHVkZS9jdHlw ZS5oIiAzCmV4dGVybiBpbnQgaXNhbG51bSAoaW50KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBpc2Fs cGhhIChpbnQpIHRocm93ICgpOwpleHRlcm4gaW50IGlzY250cmwgKGludCkgdGhyb3cgKCk7CmV4 dGVybiBpbnQgaXNkaWdpdCAoaW50KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBpc2xvd2VyIChpbnQp IHRocm93ICgpOwpleHRlcm4gaW50IGlzZ3JhcGggKGludCkgdGhyb3cgKCk7CmV4dGVybiBpbnQg aXNwcmludCAoaW50KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBpc3B1bmN0IChpbnQpIHRocm93ICgp OwpleHRlcm4gaW50IGlzc3BhY2UgKGludCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgaXN1cHBlciAo aW50KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBpc3hkaWdpdCAoaW50KSB0aHJvdyAoKTsKCgpleHRl cm4gaW50IGlzYmxhbmsgKGludCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IHRvbG93ZXIgKGlu dCBfX2MpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgdG91cHBlciAoaW50IF9fYykgdGhyb3cgKCk7 CgoKCgoKCmV4dGVybiBpbnQgaXNhc2NpaSAoaW50IF9fYykgdGhyb3cgKCk7CgoKCmV4dGVybiBp bnQgdG9hc2NpaSAoaW50IF9fYykgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgX3RvdXBwZXIgKGlu dCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX3RvbG93ZXIgKGludCkgdGhyb3cgKCk7CiMgMjIzICIv dXNyL2luY2x1ZGUvY3R5cGUuaCIgMwpleHRlcm4gaW50IF9faXNhbG51bV9sIChpbnQsIF9fbG9j YWxlX3QpIHRocm93ICgpOwpleHRlcm4gaW50IF9faXNhbHBoYV9sIChpbnQsIF9fbG9jYWxlX3Qp IHRocm93ICgpOwpleHRlcm4gaW50IF9faXNjbnRybF9sIChpbnQsIF9fbG9jYWxlX3QpIHRocm93 ICgpOwpleHRlcm4gaW50IF9faXNkaWdpdF9sIChpbnQsIF9fbG9jYWxlX3QpIHRocm93ICgpOwpl eHRlcm4gaW50IF9faXNsb3dlcl9sIChpbnQsIF9fbG9jYWxlX3QpIHRocm93ICgpOwpleHRlcm4g aW50IF9faXNncmFwaF9sIChpbnQsIF9fbG9jYWxlX3QpIHRocm93ICgpOwpleHRlcm4gaW50IF9f aXNwcmludF9sIChpbnQsIF9fbG9jYWxlX3QpIHRocm93ICgpOwpleHRlcm4gaW50IF9faXNwdW5j dF9sIChpbnQsIF9fbG9jYWxlX3QpIHRocm93ICgpOwpleHRlcm4gaW50IF9faXNzcGFjZV9sIChp bnQsIF9fbG9jYWxlX3QpIHRocm93ICgpOwpleHRlcm4gaW50IF9faXN1cHBlcl9sIChpbnQsIF9f bG9jYWxlX3QpIHRocm93ICgpOwpleHRlcm4gaW50IF9faXN4ZGlnaXRfbCAoaW50LCBfX2xvY2Fs ZV90KSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgX19pc2JsYW5rX2wgKGludCwgX19sb2NhbGVfdCkg dGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgX190b2xvd2VyX2wgKGludCBfX2MsIF9fbG9jYWxlX3Qg X19sKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IF9fdG91cHBlcl9sIChpbnQgX19jLCBfX2xvY2Fs ZV90IF9fbCkgdGhyb3cgKCk7CiMgMjc2ICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIgMwp9CiMgNTAg Ii91c3IvY3lnbnVzL2Jpbi8uLi9pbmNsdWRlL2MrKy8zLjEuMS9jY3R5cGUiIDIgMwojIDY2ICIv dXNyL2N5Z251cy9iaW4vLi4vaW5jbHVkZS9jKysvMy4xLjEvY2N0eXBlIiAzCm5hbWVzcGFjZSBz dGQKewogIHVzaW5nIDo6aXNhbG51bTsKICB1c2luZyA6OmlzYWxwaGE7CiAgdXNpbmcgOjppc2Nu dHJsOwogIHVzaW5nIDo6aXNkaWdpdDsKICB1c2luZyA6OmlzZ3JhcGg7CiAgdXNpbmcgOjppc2xv d2VyOwogIHVzaW5nIDo6aXNwcmludDsKICB1c2luZyA6OmlzcHVuY3Q7CiAgdXNpbmcgOjppc3Nw YWNlOwogIHVzaW5nIDo6aXN1cHBlcjsKICB1c2luZyA6OmlzeGRpZ2l0OwogIHVzaW5nIDo6dG9s b3dlcjsKICB1c2luZyA6OnRvdXBwZXI7Cn0KIyA0OSAiL3Vzci9jeWdudXMvYmluLy4uL2luY2x1 ZGUvYysrLzMuMS4xL2JpdHMvbG9jYWxlZndkLmgiIDIgMwojIDEgIi91c3IvY3lnbnVzL2Jpbi8u Li9pbmNsdWRlL2MrKy8zLjEuMS9zdHJpbmciIDEgMwojIDQ0ICIvdXNyL2N5Z251cy9iaW4vLi4v aW5jbHVkZS9jKysvMy4xLjEvc3RyaW5nIiAzCgoKCgojIDEgIi91c3IvY3lnbnVzL2Jpbi8uLi9p bmNsdWRlL2MrKy8zLjEuMS9tZW1vcnkiIDEgMwojIDUzICIvdXNyL2N5Z251cy9iaW4vLi4vaW5j bHVkZS9jKysvMy4xLjEvbWVtb3J5IiAzCgojIDEgIi91c3IvY3lnbnVzL2Jpbi8uLi9pbmNsdWRl L2MrKy8zLjEuMS9iaXRzL3N0bF9hbGdvYmFzZS5oIiAxIDMKIyA2NyAiL3Vzci9jeWdudXMvYmlu Ly4uL2luY2x1ZGUvYysrLzMuMS4xL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMKIyAxICIvdXNyL2N5 Z251cy9iaW4vLi4vaW5jbHVkZS9jKysvMy4xLjEvY3N0ZGxpYiIgMSAzCiMgNDggIi91c3IvY3ln bnVzL2Jpbi8uLi9pbmNsdWRlL2MrKy8zLjEuMS9jc3RkbGliIiAzCgoKCgojIDEgIi91c3IvaW5j bHVkZS9zdGRsaWIuaCIgMSAzCiMgMzMgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwojIDEgIi91 c3IvY3lnbnVzL2Jpbi8uLi9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjEuMS9pbmNs dWRlL3N0ZGRlZi5oIiAxIDMKIyAzNCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAyIDMKCmV4dGVy biAiQyIgewoKCgoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3dhaXRmbGFncy5oIiAxIDMKIyA0 MyAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy93YWl0 c3RhdHVzLmgiIDEgMwojIDY1ICIvdXNyL2luY2x1ZGUvYml0cy93YWl0c3RhdHVzLmgiIDMKdW5p b24gd2FpdAogIHsKICAgIGludCB3X3N0YXR1czsKICAgIHN0cnVjdAogICAgICB7CgogICAgICAg IHVuc2lnbmVkIGludCBfX3dfdGVybXNpZzo3OwogICAgICAgIHVuc2lnbmVkIGludCBfX3dfY29y ZWR1bXA6MTsKICAgICAgICB1bnNpZ25lZCBpbnQgX193X3JldGNvZGU6ODsKICAgICAgICB1bnNp Z25lZCBpbnQ6MTY7CgoKCgoKCgogICAgICB9IF9fd2FpdF90ZXJtaW5hdGVkOwogICAgc3RydWN0 CiAgICAgIHsKCiAgICAgICAgdW5zaWduZWQgaW50IF9fd19zdG9wdmFsOjg7CiAgICAgICAgdW5z aWduZWQgaW50IF9fd19zdG9wc2lnOjg7CiAgICAgICAgdW5zaWduZWQgaW50OjE2OwoKCgoKCgog ICAgICB9IF9fd2FpdF9zdG9wcGVkOwogIH07CiMgNDQgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIg MiAzCiMgOTQgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwp0eXBlZGVmIHN0cnVjdAogIHsKICAg IGludCBxdW90OwogICAgaW50IHJlbTsKICB9IGRpdl90OwoKCgp0eXBlZGVmIHN0cnVjdAogIHsK ICAgIGxvbmcgaW50IHF1b3Q7CiAgICBsb25nIGludCByZW07CiAgfSBsZGl2X3Q7CgoKCgoKX19l eHRlbnNpb25fXyB0eXBlZGVmIHN0cnVjdAogIHsKICAgIGxvbmcgbG9uZyBpbnQgcXVvdDsKICAg IGxvbmcgbG9uZyBpbnQgcmVtOwogIH0gbGxkaXZfdDsKIyAxMzMgIi91c3IvaW5jbHVkZS9zdGRs aWIuaCIgMwpleHRlcm4gc2l6ZV90IF9fY3R5cGVfZ2V0X21iX2N1cl9tYXggKHZvaWQpIHRocm93 ICgpOwoKCgpleHRlcm4gZG91YmxlIGF0b2YgKF9fY29uc3QgY2hhciAqX19ucHRyKSB0aHJvdyAo KSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBpbnQgYXRvaSAoX19jb25zdCBj aGFyICpfX25wdHIpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJu IGxvbmcgaW50IGF0b2wgKF9fY29uc3QgY2hhciAqX19ucHRyKSB0aHJvdyAoKSBfX2F0dHJpYnV0 ZV9fICgoX19wdXJlX18pKTsKCgoKX19leHRlbnNpb25fXyBleHRlcm4gbG9uZyBsb25nIGludCBh dG9sbCAoX19jb25zdCBjaGFyICpfX25wdHIpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAo KF9fcHVyZV9fKSk7CgoKCmV4dGVybiBkb3VibGUgc3RydG9kIChfX2NvbnN0IGNoYXIgKl9fcmVz dHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19l bmRwdHIpIHRocm93ICgpOwoKCgpleHRlcm4gZmxvYXQgc3RydG9mIChfX2NvbnN0IGNoYXIgKl9f cmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBf X2VuZHB0cikgdGhyb3cgKCk7CgpleHRlcm4gbG9uZyBkb3VibGUgc3RydG9sZCAoX19jb25zdCBj aGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIg KipfX3Jlc3RyaWN0IF9fZW5kcHRyKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGxvbmcgaW50IHN0cnRv bCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAg ICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpIHRocm93ICgpOwoKZXh0 ZXJuIHVuc2lnbmVkIGxvbmcgaW50IHN0cnRvdWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBf X25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmlj dCBfX2VuZHB0ciwgaW50IF9fYmFzZSkKICAgICB0aHJvdyAoKTsKCgoKX19leHRlbnNpb25fXwpl eHRlcm4gbG9uZyBsb25nIGludCBzdHJ0b3EgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25w dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRw dHIsIGludCBfX2Jhc2UpIHRocm93ICgpOwoKX19leHRlbnNpb25fXwpleHRlcm4gdW5zaWduZWQg bG9uZyBsb25nIGludCBzdHJ0b3VxIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBf X2VuZHB0ciwgaW50IF9fYmFzZSkKICAgICB0aHJvdyAoKTsKCgoKCgoKX19leHRlbnNpb25fXwpl eHRlcm4gbG9uZyBsb25nIGludCBzdHJ0b2xsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19u cHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2Vu ZHB0ciwgaW50IF9fYmFzZSkgdGhyb3cgKCk7CgpfX2V4dGVuc2lvbl9fCmV4dGVybiB1bnNpZ25l ZCBsb25nIGxvbmcgaW50IHN0cnRvdWxsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRy LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJp Y3QgX19lbmRwdHIsIGludCBfX2Jhc2UpCiAgICAgdGhyb3cgKCk7CiMgMjE1ICIvdXNyL2luY2x1 ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIGxvbmcgaW50IF9fc3RydG9sX2wgKF9fY29uc3QgY2hhciAq X19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19y ZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg IF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW50IF9f c3RydG91bF9sIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2Jhc2UsIF9fbG9jYWxlX3Qg X19sb2MpIHRocm93ICgpOwoKX19leHRlbnNpb25fXwpleHRlcm4gbG9uZyBsb25nIGludCBfX3N0 cnRvbGxfbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNl LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19sb2NhbGVfdCBfX2xvYykgdGhy b3cgKCk7CgpfX2V4dGVuc2lvbl9fCmV4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IF9fc3Ry dG91bGxfbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNlLCBf X2xvY2FsZV90IF9fbG9jKQogICAgIHRocm93ICgpOwoKZXh0ZXJuIGRvdWJsZSBfX3N0cnRvZF9s IChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAg ICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBfX2xvY2FsZV90IF9fbG9jKQogICAgIHRo cm93ICgpOwoKZXh0ZXJuIGZsb2F0IF9fc3RydG9mX2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmlj dCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2Vu ZHB0ciwgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7CgpleHRlcm4gbG9uZyBkb3VibGUgX19z dHJ0b2xkX2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7CgoKCgoKCmV4 dGVybiBkb3VibGUgX19zdHJ0b2RfaW50ZXJuYWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBf X25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0 IF9fZW5kcHRyLCBpbnQgX19ncm91cCkKICAgICB0aHJvdyAoKTsKZXh0ZXJuIGZsb2F0IF9fc3Ry dG9mX2ludGVybmFsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19n cm91cCkKICAgICB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcgZG91YmxlIF9fc3RydG9sZF9pbnRlcm5h bCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2dyb3VwKSB0aHJvdyAoKTsKCmV4dGVy biBsb25nIGludCBfX3N0cnRvbF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9f bnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmlj dCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNl LCBpbnQgX19ncm91cCkgdGhyb3cgKCk7CgoKCmV4dGVybiB1bnNpZ25lZCBsb25nIGludCBfX3N0 cnRvdWxfaW50ZXJuYWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9f ZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg X19iYXNlLCBpbnQgX19ncm91cCkgdGhyb3cgKCk7CgoKCgpfX2V4dGVuc2lvbl9fCmV4dGVybiBs b25nIGxvbmcgaW50IF9fc3RydG9sbF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0 IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoq X19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBpbnQgX19iYXNlLCBpbnQgX19ncm91cCkgdGhyb3cgKCk7CgoKCl9fZXh0ZW5zaW9uX18K ZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgX19zdHJ0b3VsbF9pbnRlcm5hbCAoX19jb25z dCBjaGFyICoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNlLCBpbnQgX19n cm91cCkKICAgICB0aHJvdyAoKTsKIyAzODQgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRl cm4gY2hhciAqbDY0YSAobG9uZyBpbnQgX19uKSB0aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBpbnQg YTY0bCAoX19jb25zdCBjaGFyICpfX3MpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVf XykpOwoKCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAxIDMKIyAyOCAiL3Vzci9pbmNs dWRlL3N5cy90eXBlcy5oIiAzCmV4dGVybiAiQyIgewoKCgoKCnR5cGVkZWYgX191X2NoYXIgdV9j aGFyOwp0eXBlZGVmIF9fdV9zaG9ydCB1X3Nob3J0Owp0eXBlZGVmIF9fdV9pbnQgdV9pbnQ7CnR5 cGVkZWYgX191X2xvbmcgdV9sb25nOwp0eXBlZGVmIF9fcXVhZF90IHF1YWRfdDsKdHlwZWRlZiBf X3VfcXVhZF90IHVfcXVhZF90Owp0eXBlZGVmIF9fZnNpZF90IGZzaWRfdDsKCgoKCnR5cGVkZWYg X19sb2ZmX3QgbG9mZl90OwoKCgp0eXBlZGVmIF9faW5vX3QgaW5vX3Q7CgoKCgoKCnR5cGVkZWYg X19pbm82NF90IGlubzY0X3Q7CgoKCgp0eXBlZGVmIF9fZGV2X3QgZGV2X3Q7CgoKCgp0eXBlZGVm IF9fZ2lkX3QgZ2lkX3Q7CgoKCgp0eXBlZGVmIF9fbW9kZV90IG1vZGVfdDsKCgoKCnR5cGVkZWYg X19ubGlua190IG5saW5rX3Q7CgoKCgp0eXBlZGVmIF9fdWlkX3QgdWlkX3Q7CgoKCgoKdHlwZWRl ZiBfX29mZl90IG9mZl90OwoKCgoKCgp0eXBlZGVmIF9fb2ZmNjRfdCBvZmY2NF90OwojIDEwNCAi L3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAzCnR5cGVkZWYgX19pZF90IGlkX3Q7CgoKCgp0eXBl ZGVmIF9fc3NpemVfdCBzc2l6ZV90OwoKCgoKCnR5cGVkZWYgX19kYWRkcl90IGRhZGRyX3Q7CnR5 cGVkZWYgX19jYWRkcl90IGNhZGRyX3Q7CgoKCgoKdHlwZWRlZiBfX2tleV90IGtleV90OwojIDEz NiAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAzCnR5cGVkZWYgX191c2Vjb25kc190IHVzZWNv bmRzX3Q7CgoKCnR5cGVkZWYgX19zdXNlY29uZHNfdCBzdXNlY29uZHNfdDsKCgoKCgojIDEgIi91 c3IvY3lnbnVzL2Jpbi8uLi9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjEuMS9pbmNs dWRlL3N0ZGRlZi5oIiAxIDMKIyAxNDcgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMiAzCgoK CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBpbnQgdWxvbmc7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQg aW50IHVzaG9ydDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdWludDsKIyAxOTAgIi91c3IvaW5jbHVk ZS9zeXMvdHlwZXMuaCIgMwp0eXBlZGVmIGludCBpbnQ4X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9k ZV9fIChfX1FJX18pKSk7CnR5cGVkZWYgaW50IGludDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9k ZV9fIChfX0hJX18pKSk7CnR5cGVkZWYgaW50IGludDMyX3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9k ZV9fIChfX1NJX18pKSk7CnR5cGVkZWYgaW50IGludDY0X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9k ZV9fIChfX0RJX18pKSk7CgoKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdV9pbnQ4X3QgX19hdHRyaWJ1 dGVfXyAoKF9fbW9kZV9fIChfX1FJX18pKSk7CnR5cGVkZWYgdW5zaWduZWQgaW50IHVfaW50MTZf dCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fSElfXykpKTsKdHlwZWRlZiB1bnNpZ25lZCBp bnQgdV9pbnQzMl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19TSV9fKSkpOwp0eXBlZGVm IHVuc2lnbmVkIGludCB1X2ludDY0X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX0RJX18p KSk7Cgp0eXBlZGVmIGludCByZWdpc3Rlcl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX193 b3JkX18pKSk7CiMgMjE1ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMKIyAxICIvdXNyL2lu Y2x1ZGUvc3lzL3NlbGVjdC5oIiAxIDMKIyAzMSAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIg MwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3NlbGVjdC5oIiAxIDMKIyAzMiAiL3Vzci9pbmNsdWRl L3N5cy9zZWxlY3QuaCIgMiAzCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9zaWdzZXQuaCIgMSAz CiMgMzUgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDIgMwojIDQ2ICIvdXNyL2luY2x1ZGUv c3lzL3NlbGVjdC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvdGltZS5oIiAxIDMKIyA2NyAi L3Vzci9pbmNsdWRlL2JpdHMvdGltZS5oIiAzCnN0cnVjdCB0aW1ldmFsCiAgewogICAgX190aW1l X3QgdHZfc2VjOwogICAgX19zdXNlY29uZHNfdCB0dl91c2VjOwogIH07CiMgNDcgIi91c3IvaW5j bHVkZS9zeXMvc2VsZWN0LmgiIDIgMwojIDU1ICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAz CnR5cGVkZWYgbG9uZyBpbnQgX19mZF9tYXNrOwoKCgoKCgoKdHlwZWRlZiBzdHJ1Y3QKICB7CgoK CiAgICBfX2ZkX21hc2sgZmRzX2JpdHNbMTAyNCAvICg4ICogc2l6ZW9mIChfX2ZkX21hc2spKV07 CgoKCgoKICB9IGZkX3NldDsKCgoKCgoKdHlwZWRlZiBfX2ZkX21hc2sgZmRfbWFzazsKIyA5NSAi L3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMwpleHRlcm4gIkMiIHsKCgoKCgoKZXh0ZXJuIGlu dCBzZWxlY3QgKGludCBfX25mZHMsIGZkX3NldCAqX19yZXN0cmljdCBfX3JlYWRmZHMsCiAgICAg ICAgICAgICAgICAgICBmZF9zZXQgKl9fcmVzdHJpY3QgX193cml0ZWZkcywKICAgICAgICAgICAg ICAgICAgIGZkX3NldCAqX19yZXN0cmljdCBfX2V4Y2VwdGZkcywKICAgICAgICAgICAgICAgICAg IHN0cnVjdCB0aW1ldmFsICpfX3Jlc3RyaWN0IF9fdGltZW91dCkgdGhyb3cgKCk7CgoKCgoKZXh0 ZXJuIGludCBwc2VsZWN0IChpbnQgX19uZmRzLCBmZF9zZXQgKl9fcmVzdHJpY3QgX19yZWFkZmRz LAogICAgICAgICAgICAgICAgICAgIGZkX3NldCAqX19yZXN0cmljdCBfX3dyaXRlZmRzLAogICAg ICAgICAgICAgICAgICAgIGZkX3NldCAqX19yZXN0cmljdCBfX2V4Y2VwdGZkcywKICAgICAgICAg ICAgICAgICAgICBjb25zdCBzdHJ1Y3QgdGltZXNwZWMgKl9fcmVzdHJpY3QgX190aW1lb3V0LAog ICAgICAgICAgICAgICAgICAgIGNvbnN0IF9fc2lnc2V0X3QgKl9fcmVzdHJpY3QgX19zaWdtYXNr KSB0aHJvdyAoKTsKCgp9CiMgMjE2ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMwoKCiMg MSAiL3Vzci9pbmNsdWRlL3N5cy9zeXNtYWNyb3MuaCIgMSAzCiMgMjE5ICIvdXNyL2luY2x1ZGUv c3lzL3R5cGVzLmgiIDIgMwoKCgoKdHlwZWRlZiBfX2Jsa3NpemVfdCBibGtzaXplX3Q7CgoKCgoK CnR5cGVkZWYgX19ibGtjbnRfdCBibGtjbnRfdDsKCgoKdHlwZWRlZiBfX2ZzYmxrY250X3QgZnNi bGtjbnRfdDsKCgoKdHlwZWRlZiBfX2ZzZmlsY250X3QgZnNmaWxjbnRfdDsKIyAyNTcgIi91c3Iv aW5jbHVkZS9zeXMvdHlwZXMuaCIgMwp0eXBlZGVmIF9fYmxrY250NjRfdCBibGtjbnQ2NF90Owp0 eXBlZGVmIF9fZnNibGtjbnQ2NF90IGZzYmxrY250NjRfdDsKdHlwZWRlZiBfX2ZzZmlsY250NjRf dCBmc2ZpbGNudDY0X3Q7CgoKfQojIDM5MSAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAyIDMKCgoK CgoKZXh0ZXJuIGxvbmcgaW50IHJhbmRvbSAodm9pZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIHZvaWQg c3JhbmRvbSAodW5zaWduZWQgaW50IF9fc2VlZCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGNoYXIg KmluaXRzdGF0ZSAodW5zaWduZWQgaW50IF9fc2VlZCwgY2hhciAqX19zdGF0ZWJ1ZiwKICAgICAg ICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fc3RhdGVsZW4pIHRocm93ICgpOwoKCgpleHRlcm4g Y2hhciAqc2V0c3RhdGUgKGNoYXIgKl9fc3RhdGVidWYpIHRocm93ICgpOwoKCgoKCgoKc3RydWN0 IHJhbmRvbV9kYXRhCiAgewogICAgaW50MzJfdCAqZnB0cjsKICAgIGludDMyX3QgKnJwdHI7CiAg ICBpbnQzMl90ICpzdGF0ZTsKICAgIGludCByYW5kX3R5cGU7CiAgICBpbnQgcmFuZF9kZWc7CiAg ICBpbnQgcmFuZF9zZXA7CiAgICBpbnQzMl90ICplbmRfcHRyOwogIH07CgpleHRlcm4gaW50IHJh bmRvbV9yIChzdHJ1Y3QgcmFuZG9tX2RhdGEgKl9fcmVzdHJpY3QgX19idWYsCiAgICAgICAgICAg ICAgICAgICAgIGludDMyX3QgKl9fcmVzdHJpY3QgX19yZXN1bHQpIHRocm93ICgpOwoKZXh0ZXJu IGludCBzcmFuZG9tX3IgKHVuc2lnbmVkIGludCBfX3NlZWQsIHN0cnVjdCByYW5kb21fZGF0YSAq X19idWYpIHRocm93ICgpOwoKZXh0ZXJuIGludCBpbml0c3RhdGVfciAodW5zaWduZWQgaW50IF9f c2VlZCwgY2hhciAqX19yZXN0cmljdCBfX3N0YXRlYnVmLAogICAgICAgICAgICAgICAgICAgICAg ICBzaXplX3QgX19zdGF0ZWxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHJhbmRv bV9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgc2V0c3RhdGVf ciAoY2hhciAqX19yZXN0cmljdCBfX3N0YXRlYnVmLAogICAgICAgICAgICAgICAgICAgICAgIHN0 cnVjdCByYW5kb21fZGF0YSAqX19yZXN0cmljdCBfX2J1ZikgdGhyb3cgKCk7CgoKCgoKZXh0ZXJu IGludCByYW5kICh2b2lkKSB0aHJvdyAoKTsKCmV4dGVybiB2b2lkIHNyYW5kICh1bnNpZ25lZCBp bnQgX19zZWVkKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCByYW5kX3IgKHVuc2lnbmVkIGludCAq X19zZWVkKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBkb3VibGUgZHJhbmQ0OCAodm9pZCkgdGhy b3cgKCk7CmV4dGVybiBkb3VibGUgZXJhbmQ0OCAodW5zaWduZWQgc2hvcnQgaW50IF9feHN1Ymlb M10pIHRocm93ICgpOwoKCmV4dGVybiBsb25nIGludCBscmFuZDQ4ICh2b2lkKSB0aHJvdyAoKTsK ZXh0ZXJuIGxvbmcgaW50IG5yYW5kNDggKHVuc2lnbmVkIHNob3J0IGludCBfX3hzdWJpWzNdKSB0 aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBpbnQgbXJhbmQ0OCAodm9pZCkgdGhyb3cgKCk7CmV4dGVy biBsb25nIGludCBqcmFuZDQ4ICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVszXSkgdGhyb3cg KCk7CgoKZXh0ZXJuIHZvaWQgc3JhbmQ0OCAobG9uZyBpbnQgX19zZWVkdmFsKSB0aHJvdyAoKTsK ZXh0ZXJuIHVuc2lnbmVkIHNob3J0IGludCAqc2VlZDQ4ICh1bnNpZ25lZCBzaG9ydCBpbnQgX19z ZWVkMTZ2WzNdKSB0aHJvdyAoKTsKZXh0ZXJuIHZvaWQgbGNvbmc0OCAodW5zaWduZWQgc2hvcnQg aW50IF9fcGFyYW1bN10pIHRocm93ICgpOwoKCgoKCnN0cnVjdCBkcmFuZDQ4X2RhdGEKICB7CiAg ICB1bnNpZ25lZCBzaG9ydCBpbnQgX194WzNdOwogICAgdW5zaWduZWQgc2hvcnQgaW50IF9fb2xk X3hbM107CiAgICB1bnNpZ25lZCBzaG9ydCBpbnQgX19jOwogICAgdW5zaWduZWQgc2hvcnQgaW50 IF9faW5pdDsKICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgX19hOwogIH07CgoKZXh0ZXJuIGlu dCBkcmFuZDQ4X3IgKHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fcmVzdHJpY3QgX19idWZmZXIsCiAg ICAgICAgICAgICAgICAgICAgICBkb3VibGUgKl9fcmVzdHJpY3QgX19yZXN1bHQpIHRocm93ICgp OwpleHRlcm4gaW50IGVyYW5kNDhfciAodW5zaWduZWQgc2hvcnQgaW50IF9feHN1YmlbM10sCiAg ICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX3Jlc3RyaWN0IF9fYnVm ZmVyLAogICAgICAgICAgICAgICAgICAgICAgZG91YmxlICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSB0 aHJvdyAoKTsKCgpleHRlcm4gaW50IGxyYW5kNDhfciAoc3RydWN0IGRyYW5kNDhfZGF0YSAqX19y ZXN0cmljdCBfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgIGxvbmcgaW50ICpfX3Jlc3Ry aWN0IF9fcmVzdWx0KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBucmFuZDQ4X3IgKHVuc2lnbmVkIHNo b3J0IGludCBfX3hzdWJpWzNdLAogICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRyYW5kNDhf ZGF0YSAqX19yZXN0cmljdCBfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgIGxvbmcgaW50 ICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IG1yYW5kNDhfciAo c3RydWN0IGRyYW5kNDhfZGF0YSAqX19yZXN0cmljdCBfX2J1ZmZlciwKICAgICAgICAgICAgICAg ICAgICAgIGxvbmcgaW50ICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSB0aHJvdyAoKTsKZXh0ZXJuIGlu dCBqcmFuZDQ4X3IgKHVuc2lnbmVkIHNob3J0IGludCBfX3hzdWJpWzNdLAogICAgICAgICAgICAg ICAgICAgICAgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19yZXN0cmljdCBfX2J1ZmZlciwKICAgICAg ICAgICAgICAgICAgICAgIGxvbmcgaW50ICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSB0aHJvdyAoKTsK CgpleHRlcm4gaW50IHNyYW5kNDhfciAobG9uZyBpbnQgX19zZWVkdmFsLCBzdHJ1Y3QgZHJhbmQ0 OF9kYXRhICpfX2J1ZmZlcikKICAgICB0aHJvdyAoKTsKCmV4dGVybiBpbnQgc2VlZDQ4X3IgKHVu c2lnbmVkIHNob3J0IGludCBfX3NlZWQxNnZbM10sCiAgICAgICAgICAgICAgICAgICAgIHN0cnVj dCBkcmFuZDQ4X2RhdGEgKl9fYnVmZmVyKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgbGNvbmc0OF9y ICh1bnNpZ25lZCBzaG9ydCBpbnQgX19wYXJhbVs3XSwKICAgICAgICAgICAgICAgICAgICAgIHN0 cnVjdCBkcmFuZDQ4X2RhdGEgKl9fYnVmZmVyKSB0aHJvdyAoKTsKIyA1MjcgIi91c3IvaW5jbHVk ZS9zdGRsaWIuaCIgMwpleHRlcm4gdm9pZCAqbWFsbG9jIChzaXplX3QgX19zaXplKSB0aHJvdyAo KSBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwoKZXh0ZXJuIHZvaWQgKmNhbGxvYyAoc2l6 ZV90IF9fbm1lbWIsIHNpemVfdCBfX3NpemUpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAo KF9fbWFsbG9jX18pKTsKCgoKCgpleHRlcm4gdm9pZCAqcmVhbGxvYyAodm9pZCAqX19wdHIsIHNp emVfdCBfX3NpemUpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7CgpleHRl cm4gdm9pZCBmcmVlICh2b2lkICpfX3B0cikgdGhyb3cgKCk7CgoKCmV4dGVybiB2b2lkIGNmcmVl ICh2b2lkICpfX3B0cikgdGhyb3cgKCk7CgoKCiMgMSAiL3Vzci9pbmNsdWRlL2FsbG9jYS5oIiAx IDMKIyAyNSAiL3Vzci9pbmNsdWRlL2FsbG9jYS5oIiAzCiMgMSAiL3Vzci9jeWdudXMvYmluLy4u L2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMS4xL2luY2x1ZGUvc3RkZGVmLmgiIDEg MwojIDI2ICIvdXNyL2luY2x1ZGUvYWxsb2NhLmgiIDIgMwoKZXh0ZXJuICJDIiB7CgoKCgoKZXh0 ZXJuIHZvaWQgKmFsbG9jYSAoc2l6ZV90IF9fc2l6ZSkgdGhyb3cgKCk7CgoKCgoKfQojIDU0NyAi L3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAyIDMKCgoKCmV4dGVybiB2b2lkICp2YWxsb2MgKHNpemVf dCBfX3NpemUpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7CgoKCgpleHRl cm4gaW50IHBvc2l4X21lbWFsaWduICh2b2lkICoqX19tZW1wdHIsIHNpemVfdCBfX2FsaWdubWVu dCwgc2l6ZV90IF9fc2l6ZSkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2Nf XykpOwoKCgpleHRlcm4gdm9pZCBhYm9ydCAodm9pZCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAo KF9fbm9yZXR1cm5fXykpOwoKCgpleHRlcm4gaW50IGF0ZXhpdCAodm9pZCAoKl9fZnVuYykgKHZv aWQpKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgb25fZXhpdCAodm9pZCAoKl9fZnVuYykgKGlu dCBfX3N0YXR1cywgdm9pZCAqX19hcmcpLCB2b2lkICpfX2FyZykKICAgICB0aHJvdyAoKTsKCgoK CgpleHRlcm4gdm9pZCBleGl0IChpbnQgX19zdGF0dXMpIHRocm93ICgpIF9fYXR0cmlidXRlX18g KChfX25vcmV0dXJuX18pKTsKCgoKCmV4dGVybiB2b2lkIF9FeGl0IChpbnQgX19zdGF0dXMpIHRo cm93ICgpIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKCgoKCmV4dGVybiBjaGFyICpn ZXRlbnYgKF9fY29uc3QgY2hhciAqX19uYW1lKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGNoYXIgKl9f c2VjdXJlX2dldGVudiAoX19jb25zdCBjaGFyICpfX25hbWUpIHRocm93ICgpOwoKCgoKCmV4dGVy biBpbnQgcHV0ZW52IChjaGFyICpfX3N0cmluZykgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBz ZXRlbnYgKF9fY29uc3QgY2hhciAqX19uYW1lLCBfX2NvbnN0IGNoYXIgKl9fdmFsdWUsIGludCBf X3JlcGxhY2UpCiAgICAgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCB1bnNldGVudiAoX19jb25zdCBj aGFyICpfX25hbWUpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50IGNsZWFyZW52ICh2b2lkKSB0 aHJvdyAoKTsKIyA2MjMgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gY2hhciAqbWt0 ZW1wIChjaGFyICpfX3RlbXBsYXRlKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBpbnQgbWtzdGVt cCAoY2hhciAqX190ZW1wbGF0ZSkgdGhyb3cgKCk7CiMgNjQwICIvdXNyL2luY2x1ZGUvc3RkbGli LmgiIDMKZXh0ZXJuIGludCBta3N0ZW1wNjQgKGNoYXIgKl9fdGVtcGxhdGUpIHRocm93ICgpOwoj IDY1MCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBjaGFyICpta2R0ZW1wIChjaGFy ICpfX3RlbXBsYXRlKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgc3lzdGVtIChfX2NvbnN0IGNo YXIgKl9fY29tbWFuZCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBjaGFyICpjYW5vbmljYWxpemVf ZmlsZV9uYW1lIChfX2NvbnN0IGNoYXIgKl9fbmFtZSkgdGhyb3cgKCk7CiMgNjcyICIvdXNyL2lu Y2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIGNoYXIgKnJlYWxwYXRoIChfX2NvbnN0IGNoYXIgKl9f cmVzdHJpY3QgX19uYW1lLAogICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKl9fcmVzdHJpY3Qg X19yZXNvbHZlZCkgdGhyb3cgKCk7CgoKCgoKCnR5cGVkZWYgaW50ICgqX19jb21wYXJfZm5fdCkg KF9fY29uc3Qgdm9pZCAqLCBfX2NvbnN0IHZvaWQgKik7CgoKdHlwZWRlZiBfX2NvbXBhcl9mbl90 IGNvbXBhcmlzb25fZm5fdDsKCgoKCgpleHRlcm4gdm9pZCAqYnNlYXJjaCAoX19jb25zdCB2b2lk ICpfX2tleSwgX19jb25zdCB2b2lkICpfX2Jhc2UsCiAgICAgICAgICAgICAgICAgICAgICBzaXpl X3QgX19ubWVtYiwgc2l6ZV90IF9fc2l6ZSwgX19jb21wYXJfZm5fdCBfX2NvbXBhcik7CgoKCmV4 dGVybiB2b2lkIHFzb3J0ICh2b2lkICpfX2Jhc2UsIHNpemVfdCBfX25tZW1iLCBzaXplX3QgX19z aXplLAogICAgICAgICAgICAgICAgICAgX19jb21wYXJfZm5fdCBfX2NvbXBhcik7CgoKCmV4dGVy biBpbnQgYWJzIChpbnQgX194KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7 CmV4dGVybiBsb25nIGludCBsYWJzIChsb25nIGludCBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRl X18gKChfX2NvbnN0X18pKTsKCl9fZXh0ZW5zaW9uX18gZXh0ZXJuIGxvbmcgbG9uZyBpbnQgbGxh YnMgKGxvbmcgbG9uZyBpbnQgX194KQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2Nv bnN0X18pKTsKCgoKCgoKZXh0ZXJuIGRpdl90IGRpdiAoaW50IF9fbnVtZXIsIGludCBfX2Rlbm9t KQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKZXh0ZXJuIGxkaXZf dCBsZGl2IChsb25nIGludCBfX251bWVyLCBsb25nIGludCBfX2Rlbm9tKQogICAgIHRocm93ICgp IF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCl9fZXh0ZW5zaW9uX18gZXh0ZXJuIGxsZGl2 X3QgbGxkaXYgKGxvbmcgbG9uZyBpbnQgX19udW1lciwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgbG9uZyBsb25nIGludCBfX2Rlbm9tKQogICAgIHRocm93ICgpIF9fYXR0cmli dXRlX18gKChfX2NvbnN0X18pKTsKIyA3MjggIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRl cm4gY2hhciAqZWN2dCAoZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwgaW50ICpfX3Jlc3Ry aWN0IF9fZGVjcHQsCiAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19zaWduKSB0 aHJvdyAoKTsKCgoKCmV4dGVybiBjaGFyICpmY3Z0IChkb3VibGUgX192YWx1ZSwgaW50IF9fbmRp Z2l0LCBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwKICAgICAgICAgICAgICAgICAgIGludCAqX19y ZXN0cmljdCBfX3NpZ24pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGNoYXIgKmdjdnQgKGRvdWJsZSBf X3ZhbHVlLCBpbnQgX19uZGlnaXQsIGNoYXIgKl9fYnVmKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBj aGFyICpxZWN2dCAobG9uZyBkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LAogICAgICAgICAg ICAgICAgICAgIGludCAqX19yZXN0cmljdCBfX2RlY3B0LCBpbnQgKl9fcmVzdHJpY3QgX19zaWdu KSB0aHJvdyAoKTsKZXh0ZXJuIGNoYXIgKnFmY3Z0IChsb25nIGRvdWJsZSBfX3ZhbHVlLCBpbnQg X19uZGlnaXQsCiAgICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsIGlu dCAqX19yZXN0cmljdCBfX3NpZ24pIHRocm93ICgpOwpleHRlcm4gY2hhciAqcWdjdnQgKGxvbmcg ZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwgY2hhciAqX19idWYpIHRocm93ICgpOwoKCgoK ZXh0ZXJuIGludCBlY3Z0X3IgKGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsIGludCAqX19y ZXN0cmljdCBfX2RlY3B0LAogICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fc2ln biwgY2hhciAqX19yZXN0cmljdCBfX2J1ZiwKICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX2xl bikgdGhyb3cgKCk7CmV4dGVybiBpbnQgZmN2dF9yIChkb3VibGUgX192YWx1ZSwgaW50IF9fbmRp Z2l0LCBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwKICAgICAgICAgICAgICAgICAgIGludCAqX19y ZXN0cmljdCBfX3NpZ24sIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsCiAgICAgICAgICAgICAgICAg ICBzaXplX3QgX19sZW4pIHRocm93ICgpOwoKZXh0ZXJuIGludCBxZWN2dF9yIChsb25nIGRvdWJs ZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsCiAgICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3Ry aWN0IF9fZGVjcHQsIGludCAqX19yZXN0cmljdCBfX3NpZ24sCiAgICAgICAgICAgICAgICAgICAg Y2hhciAqX19yZXN0cmljdCBfX2J1Ziwgc2l6ZV90IF9fbGVuKSB0aHJvdyAoKTsKZXh0ZXJuIGlu dCBxZmN2dF9yIChsb25nIGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsCiAgICAgICAgICAg ICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsIGludCAqX19yZXN0cmljdCBfX3NpZ24s CiAgICAgICAgICAgICAgICAgICAgY2hhciAqX19yZXN0cmljdCBfX2J1Ziwgc2l6ZV90IF9fbGVu KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCBtYmxlbiAoX19jb25zdCBjaGFyICpfX3MsIHNp emVfdCBfX24pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgbWJ0b3djICh3Y2hhcl90ICpfX3Jlc3Ry aWN0IF9fcHdjLAogICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9f cywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCB3Y3RvbWIgKGNoYXIgKl9fcywg d2NoYXJfdCBfX3djaGFyKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHNpemVfdCBtYnN0b3djcyAod2No YXJfdCAqX19yZXN0cmljdCBfX3B3Y3MsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qg Y2hhciAqX19yZXN0cmljdCBfX3MsIHNpemVfdCBfX24pIHRocm93ICgpOwoKZXh0ZXJuIHNpemVf dCB3Y3N0b21icyAoY2hhciAqX19yZXN0cmljdCBfX3MsCiAgICAgICAgICAgICAgICAgICAgICAg IF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3B3Y3MsIHNpemVfdCBfX24pCiAgICAgdGhy b3cgKCk7CgoKCgoKCgpleHRlcm4gaW50IHJwbWF0Y2ggKF9fY29uc3QgY2hhciAqX19yZXNwb25z ZSkgdGhyb3cgKCk7CiMgODA4ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIGludCBn ZXRzdWJvcHQgKGNoYXIgKipfX3Jlc3RyaWN0IF9fb3B0aW9ucCwKICAgICAgICAgICAgICAgICAg ICAgIGNoYXIgKl9fY29uc3QgKl9fcmVzdHJpY3QgX190b2tlbnMsCiAgICAgICAgICAgICAgICAg ICAgICBjaGFyICoqX19yZXN0cmljdCBfX3ZhbHVlcCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIHZv aWQgc2V0a2V5IChfX2NvbnN0IGNoYXIgKl9fa2V5KSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBp bnQgcG9zaXhfb3BlbnB0IChpbnQgX19vZmxhZykgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gaW50 IGdyYW50cHQgKGludCBfX2ZkKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCB1bmxvY2twdCAoaW50 IF9fZmQpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGNoYXIgKnB0c25hbWUgKGludCBfX2ZkKSB0aHJv dyAoKTsKCgoKCgoKZXh0ZXJuIGludCBwdHNuYW1lX3IgKGludCBfX2ZkLCBjaGFyICpfX2J1Ziwg c2l6ZV90IF9fYnVmbGVuKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IGdldHB0ICh2b2lkKSB0aHJv dyAoKTsKCgoKCgoKZXh0ZXJuIGludCBnZXRsb2FkYXZnIChkb3VibGUgX19sb2FkYXZnW10sIGlu dCBfX25lbGVtKSB0aHJvdyAoKTsKCgoKCgp9CiMgNTMgIi91c3IvY3lnbnVzL2Jpbi8uLi9pbmNs dWRlL2MrKy8zLjEuMS9jc3RkbGliIiAyIDMKIyA4NCAiL3Vzci9jeWdudXMvYmluLy4uL2luY2x1 ZGUvYysrLzMuMS4xL2NzdGRsaWIiIDMKbmFtZXNwYWNlIHN0ZAp7CiAgdXNpbmcgOjpkaXZfdDsK ICB1c2luZyA6OmxkaXZfdDsKCiAgdXNpbmcgOjphYm9ydDsKICB1c2luZyA6OmFiczsKICB1c2lu ZyA6OmF0ZXhpdDsKICB1c2luZyA6OmF0b2Y7CiAgdXNpbmcgOjphdG9pOwogIHVzaW5nIDo6YXRv bDsKICB1c2luZyA6OmJzZWFyY2g7CiAgdXNpbmcgOjpjYWxsb2M7CiAgdXNpbmcgOjpkaXY7CiAg dXNpbmcgOjpleGl0OwogIHVzaW5nIDo6ZnJlZTsKICB1c2luZyA6OmdldGVudjsKICB1c2luZyA6 OmxhYnM7CiAgdXNpbmcgOjpsZGl2OwogIHVzaW5nIDo6bWFsbG9jOwogIHVzaW5nIDo6bWJsZW47 CiAgdXNpbmcgOjptYnN0b3djczsKICB1c2luZyA6Om1idG93YzsKICB1c2luZyA6OnFzb3J0Owog IHVzaW5nIDo6cmFuZDsKICB1c2luZyA6OnJlYWxsb2M7CiAgdXNpbmcgOjpzcmFuZDsKICB1c2lu ZyA6OnN0cnRvZDsKICB1c2luZyA6OnN0cnRvbDsKICB1c2luZyA6OnN0cnRvdWw7CiAgdXNpbmcg OjpzeXN0ZW07CiAgdXNpbmcgOjp3Y3N0b21iczsKICB1c2luZyA6OndjdG9tYjsKCiAgaW5saW5l IGxvbmcKICBhYnMobG9uZyBfX2kpIHsgcmV0dXJuIGxhYnMoX19pKTsgfQoKICBpbmxpbmUgbGRp dl90CiAgZGl2KGxvbmcgX19pLCBsb25nIF9faikgeyByZXR1cm4gbGRpdihfX2ksIF9faik7IH0K fQojIDEzNiAiL3Vzci9jeWdudXMvYmluLy4uL2luY2x1ZGUvYysrLzMuMS4xL2NzdGRsaWIiIDMK bmFtZXNwYWNlIF9fZ251X2N4eAp7CiAgdXNpbmcgOjpsbGRpdl90OwogIHVzaW5nIDo6X0V4aXQ7 CgogIGlubGluZSBsb25nIGxvbmcKICBhYnMobG9uZyBsb25nIF9feCkgeyByZXR1cm4gX194ID49 IDAgPyBfX3ggOiAtX194OyB9CgogIGlubGluZSBsb25nIGxvbmcKICBsbGFicyhsb25nIGxvbmcg X194KSB7IHJldHVybiBfX3ggPj0gMCA/IF9feCA6IC1fX3g7IH0KCiAgaW5saW5lIGxsZGl2X3QK ICBkaXYobG9uZyBsb25nIF9fbiwgbG9uZyBsb25nIF9fZCkKICB7IGxsZGl2X3QgX19xOyBfX3Eu cXVvdCA9IF9fbiAvIF9fZDsgX19xLnJlbSA9IF9fbiAlIF9fZDsgcmV0dXJuIF9fcTsgfQoKICBp bmxpbmUgbGxkaXZfdAogIGxsZGl2KGxvbmcgbG9uZyBfX24sIGxvbmcgbG9uZyBfX2QpCiAgeyBs bGRpdl90IF9fcTsgX19xLnF1b3QgPSBfX24gLyBfX2Q7IF9fcS5yZW0gPSBfX24gJSBfX2Q7IHJl dHVybiBfX3E7IH0KCiAgdXNpbmcgOjphdG9sbDsKICB1c2luZyA6OnN0cnRvZjsKICB1c2luZyA6 OnN0cnRvbGw7CiAgdXNpbmcgOjpzdHJ0b3VsbDsKICB1c2luZyA6OnN0cnRvbGQ7Cn0KCm5hbWVz cGFjZSBzdGQKewogIHVzaW5nIF9fZ251X2N4eDo6bGxkaXZfdDsKICB1c2luZyBfX2dudV9jeHg6 Ol9FeGl0OwogIHVzaW5nIF9fZ251X2N4eDo6YWJzOwogIHVzaW5nIF9fZ251X2N4eDo6bGxhYnM7 CiAgdXNpbmcgX19nbnVfY3h4OjpkaXY7CiAgdXNpbmcgX19nbnVfY3h4OjpsbGRpdjsKICB1c2lu ZyBfX2dudV9jeHg6OmF0b2xsOwogIHVzaW5nIF9fZ251X2N4eDo6c3RydG9mOwogIHVzaW5nIF9f Z251X2N4eDo6c3RydG9sbDsKICB1c2luZyBfX2dudV9jeHg6OnN0cnRvdWxsOwogIHVzaW5nIF9f Z251X2N4eDo6c3RydG9sZDsKfQojIDY4ICIvdXNyL2N5Z251cy9iaW4vLi4vaW5jbHVkZS9jKysv My4xLjEvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMiAzCgojIDEgIi91c3IvY3lnbnVzL2Jpbi8uLi9p bmNsdWRlL2MrKy8zLjEuMS9uZXciIDEgMwojIDQ0ICIvdXNyL2N5Z251cy9iaW4vLi4vaW5jbHVk ZS9jKysvMy4xLjEvbmV3IiAzCmV4dGVybiAiQysrIiB7CgpuYW1lc3BhY2Ugc3RkCnsKCgogIGNs YXNzIGJhZF9hbGxvYyA6IHB1YmxpYyBleGNlcHRpb24KICB7CiAgcHVibGljOgogICAgYmFkX2Fs bG9jKCkgdGhyb3coKSB7IH0KCgogICAgdmlydHVhbCB+YmFkX2FsbG9jKCkgdGhyb3coKTsKICB9 OwoKICBzdHJ1Y3Qgbm90aHJvd190IHsgfTsKICBleHRlcm4gY29uc3Qgbm90aHJvd190IG5vdGhy b3c7CgoKICB0eXBlZGVmIHZvaWQgKCpuZXdfaGFuZGxlcikoKTsKCiAgbmV3X2hhbmRsZXIgc2V0 X25ld19oYW5kbGVyKG5ld19oYW5kbGVyKSB0aHJvdygpOwp9CiMgNzkgIi91c3IvY3lnbnVzL2Jp bi8uLi9pbmNsdWRlL2MrKy8zLjEuMS9uZXciIDMKdm9pZCogb3BlcmF0b3IgbmV3KHN0ZDo6c2l6 ZV90KSB0aHJvdyAoc3RkOjpiYWRfYWxsb2MpOwp2b2lkKiBvcGVyYXRvciBuZXdbXShzdGQ6OnNp emVfdCkgdGhyb3cgKHN0ZDo6YmFkX2FsbG9jKTsKdm9pZCBvcGVyYXRvciBkZWxldGUodm9pZCop IHRocm93KCk7CnZvaWQgb3BlcmF0b3IgZGVsZXRlW10odm9pZCopIHRocm93KCk7CnZvaWQqIG9w ZXJhdG9yIG5ldyhzdGQ6OnNpemVfdCwgY29uc3Qgc3RkOjpub3Rocm93X3QmKSB0aHJvdygpOwp2 b2lkKiBvcGVyYXRvciBuZXdbXShzdGQ6OnNpemVfdCwgY29uc3Qgc3RkOjpub3Rocm93X3QmKSB0 aHJvdygpOwp2b2lkIG9wZXJhdG9yIGRlbGV0ZSh2b2lkKiwgY29uc3Qgc3RkOjpub3Rocm93X3Qm KSB0aHJvdygpOwp2b2lkIG9wZXJhdG9yIGRlbGV0ZVtdKHZvaWQqLCBjb25zdCBzdGQ6Om5vdGhy b3dfdCYpIHRocm93KCk7CgoKaW5saW5lIHZvaWQqIG9wZXJhdG9yIG5ldyhzdGQ6OnNpemVfdCwg dm9pZCogX19wKSB0aHJvdygpIHsgcmV0dXJuIF9fcDsgfQppbmxpbmUgdm9pZCogb3BlcmF0b3Ig bmV3W10oc3RkOjpzaXplX3QsIHZvaWQqIF9fcCkgdGhyb3coKSB7IHJldHVybiBfX3A7IH0KCn0K IyA3MCAiL3Vzci9jeWdudXMvYmluLy4uL2luY2x1ZGUvYysrLzMuMS4xL2JpdHMvc3RsX2FsZ29i YXNlLmgiIDIgMwoKIyAxICIvdXNyL2N5Z251cy9iaW4vLi4vaW5jbHVkZS9jKysvMy4xLjEvYml0 cy9zdGxfcGFpci5oIiAxIDMKIyA2NCAiL3Vzci9jeWdudXMvYmluLy4uL2luY2x1ZGUvYysrLzMu MS4xL2JpdHMvc3RsX3BhaXIuaCIgMwpuYW1lc3BhY2Ugc3RkCnsKCgp0ZW1wbGF0ZSA8Y2xhc3Mg X1QxLCBjbGFzcyBfVDI+CnN0cnVjdCBwYWlyIHsKICB0eXBlZGVmIF9UMSBmaXJzdF90eXBlOwog IHR5cGVkZWYgX1QyIHNlY29uZF90eXBlOwoKICBfVDEgZmlyc3Q7CiAgX1QyIHNlY29uZDsKCgoK CiAgcGFpcigpIDogZmlyc3QoKSwgc2Vjb25kKCkge30KCgoKCiAgcGFpcihjb25zdCBfVDEmIF9f YSwgY29uc3QgX1QyJiBfX2IpIDogZmlyc3QoX19hKSwgc2Vjb25kKF9fYikge30KCgogIHRlbXBs YXRlIDxjbGFzcyBfVTEsIGNsYXNzIF9VMj4KICBwYWlyKGNvbnN0IHBhaXI8X1UxLCBfVTI+JiBf X3ApIDogZmlyc3QoX19wLmZpcnN0KSwgc2Vjb25kKF9fcC5zZWNvbmQpIHt9Cn07CgoKdGVtcGxh dGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgppbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IHBh aXI8X1QxLCBfVDI+JiBfX3gsIGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3kpCnsKICByZXR1cm4g X194LmZpcnN0ID09IF9feS5maXJzdCAmJiBfX3guc2Vjb25kID09IF9feS5zZWNvbmQ7Cn0KCgp0 ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CmlubGluZSBib29sIG9wZXJhdG9yPChjb25z dCBwYWlyPF9UMSwgX1QyPiYgX194LCBjb25zdCBwYWlyPF9UMSwgX1QyPiYgX195KQp7CiAgcmV0 dXJuIF9feC5maXJzdCA8IF9feS5maXJzdCB8fAogICAgICAgICAoIShfX3kuZmlyc3QgPCBfX3gu Zmlyc3QpICYmIF9feC5zZWNvbmQgPCBfX3kuc2Vjb25kKTsKfQoKCnRlbXBsYXRlIDxjbGFzcyBf VDEsIGNsYXNzIF9UMj4KaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBwYWlyPF9UMSwgX1Qy PiYgX194LCBjb25zdCBwYWlyPF9UMSwgX1QyPiYgX195KSB7CiAgcmV0dXJuICEoX194ID09IF9f eSk7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CmlubGluZSBib29sIG9wZXJh dG9yPihjb25zdCBwYWlyPF9UMSwgX1QyPiYgX194LCBjb25zdCBwYWlyPF9UMSwgX1QyPiYgX195 KSB7CiAgcmV0dXJuIF9feSA8IF9feDsKfQoKCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9U Mj4KaW5saW5lIGJvb2wgb3BlcmF0b3I8PShjb25zdCBwYWlyPF9UMSwgX1QyPiYgX194LCBjb25z dCBwYWlyPF9UMSwgX1QyPiYgX195KSB7CiAgcmV0dXJuICEoX195IDwgX194KTsKfQoKCnRlbXBs YXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4KaW5saW5lIGJvb2wgb3BlcmF0b3I+PShjb25zdCBw YWlyPF9UMSwgX1QyPiYgX194LCBjb25zdCBwYWlyPF9UMSwgX1QyPiYgX195KSB7CiAgcmV0dXJu ICEoX194IDwgX195KTsKfQojIDE0MCAiL3Vzci9jeWdudXMvYmluLy4uL2luY2x1ZGUvYysrLzMu MS4xL2JpdHMvc3RsX3BhaXIuaCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CgoK aW5saW5lIHBhaXI8X1QxLCBfVDI+IG1ha2VfcGFpcihfVDEgX194LCBfVDIgX195KQoKCgp7CiAg cmV0dXJuIHBhaXI8X1QxLCBfVDI+KF9feCwgX195KTsKfQoKfQojIDcyICIvdXNyL2N5Z251cy9i aW4vLi4vaW5jbHVkZS9jKysvMy4xLjEvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMiAzCiMgMSAiL3Vz ci9jeWdudXMvYmluLy4uL2luY2x1ZGUvYysrLzMuMS4xL2JpdHMvdHlwZV90cmFpdHMuaCIgMSAz CiMgNTMgIi91c3IvY3lnbnVzL2Jpbi8uLi9pbmNsdWRlL2MrKy8zLjEuMS9iaXRzL3R5cGVfdHJh aXRzLmgiIDMKIyA5MCAiL3Vzci9jeWdudXMvYmluLy4uL2luY2x1ZGUvYysrLzMuMS4xL2JpdHMv dHlwZV90cmFpdHMuaCIgMwpzdHJ1Y3QgX190cnVlX3R5cGUge307CnN0cnVjdCBfX2ZhbHNlX3R5 cGUge307Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgX190eXBlX3RyYWl0cyB7CiAgIHR5 cGVkZWYgX190cnVlX3R5cGUgdGhpc19kdW1teV9tZW1iZXJfbXVzdF9iZV9maXJzdDsKIyAxMTMg Ii91c3IvY3lnbnVzL2Jpbi8uLi9pbmNsdWRlL2MrKy8zLjEuMS9iaXRzL3R5cGVfdHJhaXRzLmgi IDMKICAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3Rv cjsKICAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsK ICAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsK ICAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRl ZiBfX2ZhbHNlX3R5cGUgaXNfUE9EX3R5cGU7Cn07CgoKCgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5 cGVfdHJhaXRzPGJvb2w+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZh dWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlf Y29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVu dF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9y OwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1 Y3QgX190eXBlX3RyYWl0czxjaGFyPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZp YWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlh bF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fz c2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVz dHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRl PD4gc3RydWN0IF9fdHlwZV90cmFpdHM8c2lnbmVkIGNoYXI+IHsKICAgdHlwZWRlZiBfX3RydWVf dHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90 eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUg aGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBo YXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBl Owp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czx1bnNpZ25lZCBjaGFyPiB7CiAg IHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAg dHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBl ZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVk ZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVf dHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8d2No YXJfdD4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3Ry dWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3Rv cjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9y OwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVk ZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVf dHJhaXRzPHNob3J0PiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVs dF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2Nv bnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRf b3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsK ICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0 IF9fdHlwZV90cmFpdHM8dW5zaWduZWQgc2hvcnQ+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBo YXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhh c190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3Ry aXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJp dmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoK dGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czxpbnQ+IHsKICAgdHlwZWRlZiBfX3RydWVf dHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90 eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUg aGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBo YXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBl Owp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czx1bnNpZ25lZCBpbnQ+IHsKICAg dHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0 eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVk ZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRl ZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90 eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czxsb25n PiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3Rv cjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwog ICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAg IHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBf X3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFp dHM8dW5zaWduZWQgbG9uZz4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rl ZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29w eV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25t ZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0 b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0 cnVjdCBfX3R5cGVfdHJhaXRzPGxvbmcgbG9uZz4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhh c190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFz X3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJp dmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2 aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0 ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPHVuc2lnbmVkIGxvbmcgbG9uZz4gewogICB0 eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5 cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRl ZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVm IF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5 cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPGZsb2F0 PiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3Rv cjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwog ICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAg IHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBf X3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFp dHM8ZG91YmxlPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9j b25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0 cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3Bl cmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAg dHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9f dHlwZV90cmFpdHM8bG9uZyBkb3VibGU+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJp dmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2 aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxf YXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9k ZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxh dGUgPGNsYXNzIF9UcD4Kc3RydWN0IF9fdHlwZV90cmFpdHM8X1RwKj4gewogICB0eXBlZGVmIF9f dHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190 cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVf dHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90 eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9E X3R5cGU7Cn07CgoKCgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4gc3RydWN0IF9Jc19pbnRlZ2VyIHsK ICB0eXBlZGVmIF9fZmFsc2VfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBf SXNfaW50ZWdlcjxib29sPiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0 ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjxjaGFyPiB7CiAgdHlwZWRlZiBfX3RydWVfdHlw ZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjxzaWduZWQgY2hh cj4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1 Y3QgX0lzX2ludGVnZXI8dW5zaWduZWQgY2hhcj4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0lu dGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8d2NoYXJfdD4gewogIHR5 cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2lu dGVnZXI8c2hvcnQ+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBs YXRlPD4gc3RydWN0IF9Jc19pbnRlZ2VyPHVuc2lnbmVkIHNob3J0PiB7CiAgdHlwZWRlZiBfX3Ry dWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjxpbnQ+ IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4gc3RydWN0 IF9Jc19pbnRlZ2VyPHVuc2lnbmVkIGludD4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVn cmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8bG9uZz4gewogIHR5cGVkZWYg X190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8 dW5zaWduZWQgbG9uZz4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVt cGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8bG9uZyBsb25nPiB7CiAgdHlwZWRlZiBfX3RydWVf dHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjx1bnNpZ25l ZCBsb25nIGxvbmc+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBs YXRlPHR5cGVuYW1lIF9UcD4gc3RydWN0IF9Jc19ub3JtYWxfaXRlcmF0b3IgewogICB0eXBlZGVm IF9fZmFsc2VfdHlwZSBfTm9ybWFsOwp9OwoKCm5hbWVzcGFjZSBfX2dudV9jeHgKewogIHRlbXBs YXRlPHR5cGVuYW1lIF9JdGVyYXRvciwgdHlwZW5hbWUgX0NvbnRhaW5lcj4gY2xhc3MgX19ub3Jt YWxfaXRlcmF0b3I7Cn0KCnRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvciwgdHlwZW5hbWUgX0Nv bnRhaW5lcj4Kc3RydWN0IF9Jc19ub3JtYWxfaXRlcmF0b3I8IF9fZ251X2N4eDo6X19ub3JtYWxf aXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPiA+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlw ZSBfTm9ybWFsOwp9OwojIDczICIvdXNyL2N5Z251cy9iaW4vLi4vaW5jbHVkZS9jKysvMy4xLjEv Yml0cy9zdGxfYWxnb2Jhc2UuaCIgMiAzCiMgMSAiL3Vzci9jeWdudXMvYmluLy4uL2luY2x1ZGUv YysrLzMuMS4xL2JpdHMvc3RsX2l0ZXJhdG9yX2Jhc2VfdHlwZXMuaCIgMSAzCiMgNjggIi91c3Iv Y3lnbnVzL2Jpbi8uLi9pbmNsdWRlL2MrKy8zLjEuMS9iaXRzL3N0bF9pdGVyYXRvcl9iYXNlX3R5 cGVzLmgiIDMKCm5hbWVzcGFjZSBzdGQKewojIDgwICIvdXNyL2N5Z251cy9iaW4vLi4vaW5jbHVk ZS9jKysvMy4xLjEvYml0cy9zdGxfaXRlcmF0b3JfYmFzZV90eXBlcy5oIiAzCiAgc3RydWN0IGlu cHV0X2l0ZXJhdG9yX3RhZyB7fTsKCiAgc3RydWN0IG91dHB1dF9pdGVyYXRvcl90YWcge307Cgog IHN0cnVjdCBmb3J3YXJkX2l0ZXJhdG9yX3RhZyA6IHB1YmxpYyBpbnB1dF9pdGVyYXRvcl90YWcg e307CgogIHN0cnVjdCBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZyA6IHB1YmxpYyBmb3J3YXJk X2l0ZXJhdG9yX3RhZyB7fTsKCiAgc3RydWN0IHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnIDog cHVibGljIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnIHt9OwojIDEwMCAiL3Vzci9jeWdudXMv YmluLy4uL2luY2x1ZGUvYysrLzMuMS4xL2JpdHMvc3RsX2l0ZXJhdG9yX2Jhc2VfdHlwZXMuaCIg MwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DYXRlZ29yeSwgdHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBf RGlzdGFuY2UgPSBwdHJkaWZmX3QsCiAgICAgICAgICAgdHlwZW5hbWUgX1BvaW50ZXIgPSBfVHAq LCB0eXBlbmFtZSBfUmVmZXJlbmNlID0gX1RwJj4KICAgIHN0cnVjdCBpdGVyYXRvciB7CgogICAg ICB0eXBlZGVmIF9DYXRlZ29yeSBpdGVyYXRvcl9jYXRlZ29yeTsKCiAgICAgIHR5cGVkZWYgX1Rw IHZhbHVlX3R5cGU7CgogICAgICB0eXBlZGVmIF9EaXN0YW5jZSBkaWZmZXJlbmNlX3R5cGU7Cgog ICAgICB0eXBlZGVmIF9Qb2ludGVyIHBvaW50ZXI7CgogICAgICB0eXBlZGVmIF9SZWZlcmVuY2Ug cmVmZXJlbmNlOwogICAgfTsKCgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yPgog ICAgc3RydWN0IGl0ZXJhdG9yX3RyYWl0cyB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0l0ZXJh dG9yOjppdGVyYXRvcl9jYXRlZ29yeSBpdGVyYXRvcl9jYXRlZ29yeTsKICAgICAgdHlwZWRlZiB0 eXBlbmFtZSBfSXRlcmF0b3I6OnZhbHVlX3R5cGUgdmFsdWVfdHlwZTsKICAgICAgdHlwZWRlZiB0 eXBlbmFtZSBfSXRlcmF0b3I6OmRpZmZlcmVuY2VfdHlwZSBkaWZmZXJlbmNlX3R5cGU7CiAgICAg IHR5cGVkZWYgdHlwZW5hbWUgX0l0ZXJhdG9yOjpwb2ludGVyIHBvaW50ZXI7CiAgICAgIHR5cGVk ZWYgdHlwZW5hbWUgX0l0ZXJhdG9yOjpyZWZlcmVuY2UgcmVmZXJlbmNlOwogICAgfTsKCiAgdGVt cGxhdGU8dHlwZW5hbWUgX1RwPgogICAgc3RydWN0IGl0ZXJhdG9yX3RyYWl0czxfVHAqPiB7CiAg ICAgIHR5cGVkZWYgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7 CiAgICAgIHR5cGVkZWYgX1RwIHZhbHVlX3R5cGU7CiAgICAgIHR5cGVkZWYgcHRyZGlmZl90IGRp ZmZlcmVuY2VfdHlwZTsKICAgICAgdHlwZWRlZiBfVHAqIHBvaW50ZXI7CiAgICAgIHR5cGVkZWYg X1RwJiByZWZlcmVuY2U7CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBzdHJ1 Y3QgaXRlcmF0b3JfdHJhaXRzPGNvbnN0IF9UcCo+IHsKICAgICAgdHlwZWRlZiByYW5kb21fYWNj ZXNzX2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKICAgICAgdHlwZWRlZiBfVHAgdmFs dWVfdHlwZTsKICAgICAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwogICAgICB0 eXBlZGVmIGNvbnN0IF9UcCogcG9pbnRlcjsKICAgICAgdHlwZWRlZiBjb25zdCBfVHAmIHJlZmVy ZW5jZTsKICAgIH07CgoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyPgogICAgaW5saW5l IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcj46Oml0ZXJhdG9yX2NhdGVnb3J5CiAgICBf X2l0ZXJhdG9yX2NhdGVnb3J5KGNvbnN0IF9JdGVyJikKICAgIHsgcmV0dXJuIHR5cGVuYW1lIGl0 ZXJhdG9yX3RyYWl0czxfSXRlcj46Oml0ZXJhdG9yX2NhdGVnb3J5KCk7IH0KCn0KIyA3NCAiL3Vz ci9jeWdudXMvYmluLy4uL2luY2x1ZGUvYysrLzMuMS4xL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDIg MwojIDEgIi91c3IvY3lnbnVzL2Jpbi8uLi9pbmNsdWRlL2MrKy8zLjEuMS9iaXRzL3N0bF9pdGVy YXRvcl9iYXNlX2Z1bmNzLmgiIDEgMwojIDY4ICIvdXNyL2N5Z251cy9iaW4vLi4vaW5jbHVkZS9j KysvMy4xLjEvYml0cy9zdGxfaXRlcmF0b3JfYmFzZV9mdW5jcy5oIiAzCiMgMSAiL3Vzci9jeWdu dXMvYmluLy4uL2luY2x1ZGUvYysrLzMuMS4xL2JpdHMvY29uY2VwdF9jaGVjay5oIiAxIDMKIyAz OSAiL3Vzci9jeWdudXMvYmluLy4uL2luY2x1ZGUvYysrLzMuMS4xL2JpdHMvY29uY2VwdF9jaGVj ay5oIiAzCiMgNjkgIi91c3IvY3lnbnVzL2Jpbi8uLi9pbmNsdWRlL2MrKy8zLjEuMS9iaXRzL3N0 bF9pdGVyYXRvcl9iYXNlX2Z1bmNzLmgiIDIgMwoKCgoKbmFtZXNwYWNlIHN0ZAp7CnRlbXBsYXRl PHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yPgogIGlubGluZSB0eXBlbmFtZSBpdGVyYXRvcl90cmFp dHM8X0lucHV0SXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUKICBfX2Rpc3RhbmNlKF9JbnB1dEl0 ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwgaW5wdXRfaXRlcmF0b3JfdGFn KQogIHsKCiAgIAoKICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyYXRvcj46 OmRpZmZlcmVuY2VfdHlwZSBfX24gPSAwOwogICAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KSB7 CiAgICAgICsrX19maXJzdDsgKytfX247CiAgICB9CiAgICByZXR1cm4gX19uOwogIH0KCnRlbXBs YXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvcj4KICBpbmxpbmUgdHlwZW5hbWUgaXRl cmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQogIF9f ZGlzdGFuY2UoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVy YXRvciBfX2xhc3QsCiAgICAgICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykKICB7 CgogICAKICAgIHJldHVybiBfX2xhc3QgLSBfX2ZpcnN0OwogIH0KIyAxMTEgIi91c3IvY3lnbnVz L2Jpbi8uLi9pbmNsdWRlL2MrKy8zLjEuMS9iaXRzL3N0bF9pdGVyYXRvcl9iYXNlX2Z1bmNzLmgi IDMKdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3I+CiAgaW5saW5lIHR5cGVuYW1lIGl0 ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQogIGRpc3RhbmNl KF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkKICB7CgogICAg cmV0dXJuIF9fZGlzdGFuY2UoX19maXJzdCwgX19sYXN0LCBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9f Zmlyc3QpKTsKICB9Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfRGlz dGFuY2U+CiAgaW5saW5lIHZvaWQKICBfX2FkdmFuY2UoX0lucHV0SXRlciYgX19pLCBfRGlzdGFu Y2UgX19uLCBpbnB1dF9pdGVyYXRvcl90YWcpCiAgewoKICAgCiAgICB3aGlsZSAoX19uLS0pICsr X19pOwogIH0KCnRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IsIHR5cGVu YW1lIF9EaXN0YW5jZT4KICBpbmxpbmUgdm9pZAogIF9fYWR2YW5jZShfQmlkaXJlY3Rpb25hbEl0 ZXJhdG9yJiBfX2ksIF9EaXN0YW5jZSBfX24sCiAgICAgICAgICAgIGJpZGlyZWN0aW9uYWxfaXRl cmF0b3JfdGFnKQogIHsKCiAgIAoKICAgIGlmIChfX24gPiAwKQogICAgICB3aGlsZSAoX19uLS0p ICsrX19pOwogICAgZWxzZQogICAgICB3aGlsZSAoX19uKyspIC0tX19pOwogIH0KCnRlbXBsYXRl PHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgdHlwZW5hbWUgX0Rpc3RhbmNlPgogIGlu bGluZSB2b2lkCiAgX19hZHZhbmNlKF9SYW5kb21BY2Nlc3NJdGVyYXRvciYgX19pLCBfRGlzdGFu Y2UgX19uLAogICAgICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykKICB7CgogICAK ICAgIF9faSArPSBfX247CiAgfQojIDE2NCAiL3Vzci9jeWdudXMvYmluLy4uL2luY2x1ZGUvYysr LzMuMS4xL2JpdHMvc3RsX2l0ZXJhdG9yX2Jhc2VfZnVuY3MuaCIgMwp0ZW1wbGF0ZTx0eXBlbmFt ZSBfSW5wdXRJdGVyYXRvciwgdHlwZW5hbWUgX0Rpc3RhbmNlPgogIGlubGluZSB2b2lkCiAgYWR2 YW5jZShfSW5wdXRJdGVyYXRvciYgX19pLCBfRGlzdGFuY2UgX19uKQogIHsKCiAgICBfX2FkdmFu Y2UoX19pLCBfX24sIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19pKSk7CiAgfQoKfQojIDc1ICIvdXNy L2N5Z251cy9iaW4vLi4vaW5jbHVkZS9jKysvMy4xLjEvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMiAz CiMgMSAiL3Vzci9jeWdudXMvYmluLy4uL2luY2x1ZGUvYysrLzMuMS4xL2JpdHMvc3RsX2l0ZXJh dG9yLmgiIDEgMwojIDY4ICIvdXNyL2N5Z251cy9iaW4vLi4vaW5jbHVkZS9jKysvMy4xLjEvYml0 cy9zdGxfaXRlcmF0b3IuaCIgMwpuYW1lc3BhY2Ugc3RkCnsKIyA4OSAiL3Vzci9jeWdudXMvYmlu Ly4uL2luY2x1ZGUvYysrLzMuMS4xL2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDMKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfSXRlcmF0b3I+CiAgICBjbGFzcyByZXZlcnNlX2l0ZXJhdG9yCiAgICA6IHB1Ymxp YyBpdGVyYXRvcjx0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6aXRlcmF0b3Jf Y2F0ZWdvcnksCiAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8 X0l0ZXJhdG9yPjo6dmFsdWVfdHlwZSwKICAgICAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIGl0 ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUsCiAgICAgICAgICAgICAg ICAgICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6cG9pbnRlciwKICAg ICAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+Ojpy ZWZlcmVuY2U+CiAgICB7CiAgICBwcm90ZWN0ZWQ6CiAgICAgIF9JdGVyYXRvciBjdXJyZW50OwoK ICAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiBfSXRlcmF0b3IgaXRlcmF0b3JfdHlwZTsKICAgICAg dHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90 eXBlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGRpZmZlcmVuY2VfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRv cl90cmFpdHM8X0l0ZXJhdG9yPjo6cmVmZXJlbmNlIHJlZmVyZW5jZTsKICAgICAgdHlwZWRlZiB0 eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6cG9pbnRlciBwb2ludGVyOwoKICAg IHB1YmxpYzoKCgoKICAgICAgcmV2ZXJzZV9pdGVyYXRvcigpIHsgfQoKCgoKICAgICAgZXhwbGlj aXQKICAgICAgcmV2ZXJzZV9pdGVyYXRvcihpdGVyYXRvcl90eXBlIF9feCkgOiBjdXJyZW50KF9f eCkgeyB9CgoKCgogICAgICByZXZlcnNlX2l0ZXJhdG9yKGNvbnN0IHJldmVyc2VfaXRlcmF0b3Im IF9feCkKICAgICAgOiBjdXJyZW50KF9feC5jdXJyZW50KSB7IH0KCgoKCgogICAgICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfSXRlcj4KICAgICAgICByZXZlcnNlX2l0ZXJhdG9yKGNvbnN0IHJldmVyc2Vf aXRlcmF0b3I8X0l0ZXI+JiBfX3gpCiAgICAgICAgOiBjdXJyZW50KF9feC5iYXNlKCkpIHsgfQoK CgoKICAgICAgaXRlcmF0b3JfdHlwZQogICAgICBiYXNlKCkgY29uc3QgeyByZXR1cm4gY3VycmVu dDsgfQoKCgoKCgogICAgICByZWZlcmVuY2UKICAgICAgb3BlcmF0b3IqKCkgY29uc3QKICAgICAg ewogICAgICAgIF9JdGVyYXRvciBfX3RtcCA9IGN1cnJlbnQ7CiAgICAgICAgcmV0dXJuICotLV9f dG1wOwogICAgICB9CgoKCgoKCiAgICAgIHBvaW50ZXIKICAgICAgb3BlcmF0b3ItPigpIGNvbnN0 IHsgcmV0dXJuICYob3BlcmF0b3IqKCkpOyB9CgoKCgoKCiAgICAgIHJldmVyc2VfaXRlcmF0b3Im CiAgICAgIG9wZXJhdG9yKysoKQogICAgICB7CiAgICAgICAgLS1jdXJyZW50OwogICAgICAgIHJl dHVybiAqdGhpczsKICAgICAgfQoKCgoKCgogICAgICByZXZlcnNlX2l0ZXJhdG9yCiAgICAgIG9w ZXJhdG9yKysoaW50KQogICAgICB7CiAgICAgICAgcmV2ZXJzZV9pdGVyYXRvciBfX3RtcCA9ICp0 aGlzOwogICAgICAgIC0tY3VycmVudDsKICAgICAgICByZXR1cm4gX190bXA7CiAgICAgIH0KCgoK CgoKICAgICAgcmV2ZXJzZV9pdGVyYXRvciYKICAgICAgb3BlcmF0b3ItLSgpCiAgICAgIHsKICAg ICAgICArK2N1cnJlbnQ7CiAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICB9CgoKCgoKCiAgICAg IHJldmVyc2VfaXRlcmF0b3Igb3BlcmF0b3ItLShpbnQpCiAgICAgIHsKICAgICAgICByZXZlcnNl X2l0ZXJhdG9yIF9fdG1wID0gKnRoaXM7CiAgICAgICAgKytjdXJyZW50OwogICAgICAgIHJldHVy biBfX3RtcDsKICAgICAgfQoKCgoKCgogICAgICByZXZlcnNlX2l0ZXJhdG9yCiAgICAgIG9wZXJh dG9yKyhkaWZmZXJlbmNlX3R5cGUgX19uKSBjb25zdAogICAgICB7IHJldHVybiByZXZlcnNlX2l0 ZXJhdG9yKGN1cnJlbnQgLSBfX24pOyB9CgoKCgoKCiAgICAgIHJldmVyc2VfaXRlcmF0b3ImCiAg ICAgIG9wZXJhdG9yKz0oZGlmZmVyZW5jZV90eXBlIF9fbikKICAgICAgewogICAgICAgIGN1cnJl bnQgLT0gX19uOwogICAgICAgIHJldHVybiAqdGhpczsKICAgICAgfQoKCgoKCgogICAgICByZXZl cnNlX2l0ZXJhdG9yCiAgICAgIG9wZXJhdG9yLShkaWZmZXJlbmNlX3R5cGUgX19uKSBjb25zdAog ICAgICB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKGN1cnJlbnQgKyBfX24pOyB9CgoKCgoKCiAg ICAgIHJldmVyc2VfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yLT0oZGlmZmVyZW5jZV90eXBlIF9f bikKICAgICAgewogICAgICAgIGN1cnJlbnQgKz0gX19uOwogICAgICAgIHJldHVybiAqdGhpczsK ICAgICAgfQoKCgoKCgogICAgICByZWZlcmVuY2UKICAgICAgb3BlcmF0b3JbXShkaWZmZXJlbmNl X3R5cGUgX19uKSBjb25zdCB7IHJldHVybiAqKCp0aGlzICsgX19uKTsgfQogICAgfTsKIyAyNjkg Ii91c3IvY3lnbnVzL2Jpbi8uLi9pbmNsdWRlL2MrKy8zLjEuMS9iaXRzL3N0bF9pdGVyYXRvci5o IiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yPgogICAgaW5saW5lIGJvb2wKICAgIG9w ZXJhdG9yPT0oY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3gsCiAgICAgICAg ICAgICAgIGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX195KQogICAgeyByZXR1 cm4gX194LmJhc2UoKSA9PSBfX3kuYmFzZSgpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVy YXRvcj4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcjwoY29uc3QgcmV2ZXJzZV9pdGVyYXRv cjxfSXRlcmF0b3I+JiBfX3gsCiAgICAgICAgICAgICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxf SXRlcmF0b3I+JiBfX3kpCiAgICB7IHJldHVybiBfX3kuYmFzZSgpIDwgX194LmJhc2UoKTsgfQoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3I+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0 b3IhPShjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feCwKICAgICAgICAgICAg ICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3kpCiAgICB7IHJldHVybiAh KF9feCA9PSBfX3kpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvcj4KICAgIGlubGlu ZSBib29sCiAgICBvcGVyYXRvcj4oY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBf X3gsCiAgICAgICAgICAgICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3kp CiAgICB7IHJldHVybiBfX3kgPCBfX3g7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9y PgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPD0oY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxf SXRlcmF0b3I+JiBfX3gsCiAgICAgICAgICAgICAgICBjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9J dGVyYXRvcj4mIF9feSkKICAgIHsgcmV0dXJuICEoX195IDwgX194KTsgfQoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfSXRlcmF0b3I+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I+PShjb25zdCBy ZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feCwKICAgICAgICAgICAgICAgY29uc3QgcmV2 ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3kpCiAgICB7IHJldHVybiAhKF9feCA8IF9feSk7 IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yPgogICAgaW5saW5lIHR5cGVuYW1lIHJl dmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlCiAgICBvcGVyYXRvci0o Y29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3gsCiAgICAgICAgICAgICAgY29u c3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3kpCiAgICB7IHJldHVybiBfX3kuYmFz ZSgpIC0gX194LmJhc2UoKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3I+CiAgICBp bmxpbmUgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+CiAgICBvcGVyYXRvcisodHlwZW5hbWUg cmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUgX19uLAogICAgICAg ICAgICAgIGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX194KQogICAgeyByZXR1 cm4gcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+KF9feC5iYXNlKCkgLSBfX24pOyB9CiMgMzI3 ICIvdXNyL2N5Z251cy9iaW4vLi4vaW5jbHVkZS9jKysvMy4xLjEvYml0cy9zdGxfaXRlcmF0b3Iu aCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Db250YWluZXI+CiAgICBjbGFzcyBiYWNrX2luc2Vy dF9pdGVyYXRvcgogICAgOiBwdWJsaWMgaXRlcmF0b3I8b3V0cHV0X2l0ZXJhdG9yX3RhZywgdm9p ZCwgdm9pZCwgdm9pZCwgdm9pZD4KICAgIHsKICAgIHByb3RlY3RlZDoKICAgICAgX0NvbnRhaW5l ciogY29udGFpbmVyOwoKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NvbnRhaW5lciBjb250 YWluZXJfdHlwZTsKCgogICAgICBleHBsaWNpdAogICAgICBiYWNrX2luc2VydF9pdGVyYXRvcihf Q29udGFpbmVyJiBfX3gpIDogY29udGFpbmVyKCZfX3gpIHsgfQojIDM1MyAiL3Vzci9jeWdudXMv YmluLy4uL2luY2x1ZGUvYysrLzMuMS4xL2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDMKICAgICAgYmFj a19pbnNlcnRfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yPSh0eXBlbmFtZSBfQ29udGFpbmVyOjpj b25zdF9yZWZlcmVuY2UgX192YWx1ZSkKICAgICAgewogICAgICAgIGNvbnRhaW5lci0+cHVzaF9i YWNrKF9fdmFsdWUpOwogICAgICAgIHJldHVybiAqdGhpczsKICAgICAgfQoKCiAgICAgIGJhY2tf aW5zZXJ0X2l0ZXJhdG9yJgogICAgICBvcGVyYXRvciooKSB7IHJldHVybiAqdGhpczsgfQoKCiAg ICAgIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yJgogICAgICBvcGVyYXRvcisrKCkgeyByZXR1cm4gKnRo aXM7IH0KCgogICAgICBiYWNrX2luc2VydF9pdGVyYXRvcgogICAgICBvcGVyYXRvcisrKGludCkg eyByZXR1cm4gKnRoaXM7IH0KICAgIH07CiMgMzg0ICIvdXNyL2N5Z251cy9iaW4vLi4vaW5jbHVk ZS9jKysvMy4xLjEvYml0cy9zdGxfaXRlcmF0b3IuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9D b250YWluZXI+CiAgICBpbmxpbmUgYmFja19pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4KICAg IGJhY2tfaW5zZXJ0ZXIoX0NvbnRhaW5lciYgX194KQogICAgeyByZXR1cm4gYmFja19pbnNlcnRf aXRlcmF0b3I8X0NvbnRhaW5lcj4oX194KTsgfQojIDM5NyAiL3Vzci9jeWdudXMvYmluLy4uL2lu Y2x1ZGUvYysrLzMuMS4xL2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQ29udGFpbmVyPgogICAgY2xhc3MgZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yCiAgICA6IHB1Ymxp YyBpdGVyYXRvcjxvdXRwdXRfaXRlcmF0b3JfdGFnLCB2b2lkLCB2b2lkLCB2b2lkLCB2b2lkPgog ICAgewogICAgcHJvdGVjdGVkOgogICAgICBfQ29udGFpbmVyKiBjb250YWluZXI7CgogICAgcHVi bGljOgoKICAgICAgdHlwZWRlZiBfQ29udGFpbmVyIGNvbnRhaW5lcl90eXBlOwoKCiAgICAgIGV4 cGxpY2l0IGZyb250X2luc2VydF9pdGVyYXRvcihfQ29udGFpbmVyJiBfX3gpIDogY29udGFpbmVy KCZfX3gpIHsgfQojIDQyMiAiL3Vzci9jeWdudXMvYmluLy4uL2luY2x1ZGUvYysrLzMuMS4xL2Jp dHMvc3RsX2l0ZXJhdG9yLmgiIDMKICAgICAgZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yJgogICAgICBv cGVyYXRvcj0odHlwZW5hbWUgX0NvbnRhaW5lcjo6Y29uc3RfcmVmZXJlbmNlIF9fdmFsdWUpCiAg ICAgIHsKICAgICAgICBjb250YWluZXItPnB1c2hfZnJvbnQoX192YWx1ZSk7CiAgICAgICAgcmV0 dXJuICp0aGlzOwogICAgICB9CgoKICAgICAgZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yJgogICAgICBv cGVyYXRvciooKSB7IHJldHVybiAqdGhpczsgfQoKCiAgICAgIGZyb250X2luc2VydF9pdGVyYXRv ciYKICAgICAgb3BlcmF0b3IrKygpIHsgcmV0dXJuICp0aGlzOyB9CgoKICAgICAgZnJvbnRfaW5z ZXJ0X2l0ZXJhdG9yCiAgICAgIG9wZXJhdG9yKysoaW50KSB7IHJldHVybiAqdGhpczsgfQogICAg fTsKIyA0NTMgIi91c3IvY3lnbnVzL2Jpbi8uLi9pbmNsdWRlL2MrKy8zLjEuMS9iaXRzL3N0bF9p dGVyYXRvci5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NvbnRhaW5lcj4KICAgIGlubGluZSBm cm9udF9pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4KICAgIGZyb250X2luc2VydGVyKF9Db250 YWluZXImIF9feCkKICAgIHsgcmV0dXJuIGZyb250X2luc2VydF9pdGVyYXRvcjxfQ29udGFpbmVy PihfX3gpOyB9CiMgNDcwICIvdXNyL2N5Z251cy9iaW4vLi4vaW5jbHVkZS9jKysvMy4xLjEvYml0 cy9zdGxfaXRlcmF0b3IuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Db250YWluZXI+CiAgICBj bGFzcyBpbnNlcnRfaXRlcmF0b3IKICAgIDogcHVibGljIGl0ZXJhdG9yPG91dHB1dF9pdGVyYXRv cl90YWcsIHZvaWQsIHZvaWQsIHZvaWQsIHZvaWQ+CiAgICB7CiAgICBwcm90ZWN0ZWQ6CiAgICAg IF9Db250YWluZXIqIGNvbnRhaW5lcjsKICAgICAgdHlwZW5hbWUgX0NvbnRhaW5lcjo6aXRlcmF0 b3IgaXRlcjsKCiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9Db250YWluZXIgY29udGFpbmVy X3R5cGU7CgoKCgoKICAgICAgaW5zZXJ0X2l0ZXJhdG9yKF9Db250YWluZXImIF9feCwgdHlwZW5h bWUgX0NvbnRhaW5lcjo6aXRlcmF0b3IgX19pKQogICAgICA6IGNvbnRhaW5lcigmX194KSwgaXRl cihfX2kpIHt9CiMgNTEyICIvdXNyL2N5Z251cy9iaW4vLi4vaW5jbHVkZS9jKysvMy4xLjEvYml0 cy9zdGxfaXRlcmF0b3IuaCIgMwogICAgICBpbnNlcnRfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9y PShjb25zdCB0eXBlbmFtZSBfQ29udGFpbmVyOjpjb25zdF9yZWZlcmVuY2UgX192YWx1ZSkKICAg ICAgewogICAgICAgIGl0ZXIgPSBjb250YWluZXItPmluc2VydChpdGVyLCBfX3ZhbHVlKTsKICAg ICAgICArK2l0ZXI7CiAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICB9CgoKICAgICAgaW5zZXJ0 X2l0ZXJhdG9yJgogICAgICBvcGVyYXRvciooKSB7IHJldHVybiAqdGhpczsgfQoKCiAgICAgIGlu c2VydF9pdGVyYXRvciYKICAgICAgb3BlcmF0b3IrKygpIHsgcmV0dXJuICp0aGlzOyB9CgoKICAg ICAgaW5zZXJ0X2l0ZXJhdG9yJgogICAgICBvcGVyYXRvcisrKGludCkgeyByZXR1cm4gKnRoaXM7 IH0KICAgIH07CiMgNTQ0ICIvdXNyL2N5Z251cy9iaW4vLi4vaW5jbHVkZS9jKysvMy4xLjEvYml0 cy9zdGxfaXRlcmF0b3IuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Db250YWluZXIsIHR5cGVu YW1lIF9JdGVyYXRvcj4KICAgIGlubGluZSBpbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4KICAg IGluc2VydGVyKF9Db250YWluZXImIF9feCwgX0l0ZXJhdG9yIF9faSkKICAgIHsKICAgICAgcmV0 dXJuIGluc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPihfX3gsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgX0NvbnRhaW5lcjo6aXRlcmF0b3IoX19pKSk7 CiAgICB9Cn0KCm5hbWVzcGFjZSBfX2dudV9jeHgKewoKCgoKCgoKICB1c2luZyBzdGQ6Oml0ZXJh dG9yX3RyYWl0czsKICB1c2luZyBzdGQ6Oml0ZXJhdG9yOwogIHRlbXBsYXRlPHR5cGVuYW1lIF9J dGVyYXRvciwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KICAgIGNsYXNzIF9fbm9ybWFsX2l0ZXJhdG9y CiAgICAgIDogcHVibGljIGl0ZXJhdG9yPHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0 b3I+OjppdGVyYXRvcl9jYXRlZ29yeSwKICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW5hbWUg aXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OnZhbHVlX3R5cGUsCiAgICAgICAgICAgICAgICAg ICAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5 cGUsCiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRl cmF0b3I+Ojpwb2ludGVyLAogICAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBpdGVyYXRv cl90cmFpdHM8X0l0ZXJhdG9yPjo6cmVmZXJlbmNlPgogICAgewogICAgcHJvdGVjdGVkOgogICAg ICBfSXRlcmF0b3IgX01fY3VycmVudDsKCiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgdHlwZW5h bWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWZm ZXJlbmNlX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVy YXRvcj46OnJlZmVyZW5jZSByZWZlcmVuY2U7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0 b3JfdHJhaXRzPF9JdGVyYXRvcj46OnBvaW50ZXIgcG9pbnRlcjsKCiAgICAgIF9fbm9ybWFsX2l0 ZXJhdG9yKCkgOiBfTV9jdXJyZW50KF9JdGVyYXRvcigpKSB7IH0KCiAgICAgIGV4cGxpY2l0CiAg ICAgIF9fbm9ybWFsX2l0ZXJhdG9yKGNvbnN0IF9JdGVyYXRvciYgX19pKSA6IF9NX2N1cnJlbnQo X19pKSB7IH0KCgogICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcj4KICAgICAgaW5saW5lIF9f bm9ybWFsX2l0ZXJhdG9yKGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyLCBfQ29udGFpbmVy PiYgX19pKQogICAgICAgIDogX01fY3VycmVudChfX2kuYmFzZSgpKSB7IH0KCgogICAgICByZWZl cmVuY2UKICAgICAgb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4gKl9NX2N1cnJlbnQ7IH0KCiAg ICAgIHBvaW50ZXIKICAgICAgb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuIF9NX2N1cnJlbnQ7 IH0KCiAgICAgIF9fbm9ybWFsX2l0ZXJhdG9yJgogICAgICBvcGVyYXRvcisrKCkgeyArK19NX2N1 cnJlbnQ7IHJldHVybiAqdGhpczsgfQoKICAgICAgX19ub3JtYWxfaXRlcmF0b3IKICAgICAgb3Bl cmF0b3IrKyhpbnQpIHsgcmV0dXJuIF9fbm9ybWFsX2l0ZXJhdG9yKF9NX2N1cnJlbnQrKyk7IH0K CgogICAgICBfX25vcm1hbF9pdGVyYXRvciYKICAgICAgb3BlcmF0b3ItLSgpIHsgLS1fTV9jdXJy ZW50OyByZXR1cm4gKnRoaXM7IH0KCiAgICAgIF9fbm9ybWFsX2l0ZXJhdG9yCiAgICAgIG9wZXJh dG9yLS0oaW50KSB7IHJldHVybiBfX25vcm1hbF9pdGVyYXRvcihfTV9jdXJyZW50LS0pOyB9CgoK ICAgICAgcmVmZXJlbmNlCiAgICAgIG9wZXJhdG9yW10oY29uc3QgZGlmZmVyZW5jZV90eXBlJiBf X24pIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX2N1cnJlbnRbX19uXTsgfQoKICAgICAgX19ub3Jt YWxfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yKz0oY29uc3QgZGlmZmVyZW5jZV90eXBlJiBfX24p CiAgICAgIHsgX01fY3VycmVudCArPSBfX247IHJldHVybiAqdGhpczsgfQoKICAgICAgX19ub3Jt YWxfaXRlcmF0b3IKICAgICAgb3BlcmF0b3IrKGNvbnN0IGRpZmZlcmVuY2VfdHlwZSYgX19uKSBj b25zdAogICAgICB7IHJldHVybiBfX25vcm1hbF9pdGVyYXRvcihfTV9jdXJyZW50ICsgX19uKTsg fQoKICAgICAgX19ub3JtYWxfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yLT0oY29uc3QgZGlmZmVy ZW5jZV90eXBlJiBfX24pCiAgICAgIHsgX01fY3VycmVudCAtPSBfX247IHJldHVybiAqdGhpczsg fQoKICAgICAgX19ub3JtYWxfaXRlcmF0b3IKICAgICAgb3BlcmF0b3ItKGNvbnN0IGRpZmZlcmVu Y2VfdHlwZSYgX19uKSBjb25zdAogICAgICB7IHJldHVybiBfX25vcm1hbF9pdGVyYXRvcihfTV9j dXJyZW50IC0gX19uKTsgfQoKICAgICAgZGlmZmVyZW5jZV90eXBlCiAgICAgIG9wZXJhdG9yLShj b25zdCBfX25vcm1hbF9pdGVyYXRvciYgX19pKSBjb25zdAogICAgICB7IHJldHVybiBfTV9jdXJy ZW50IC0gX19pLl9NX2N1cnJlbnQ7IH0KCiAgICAgIGNvbnN0IF9JdGVyYXRvciYKICAgICAgYmFz ZSgpIGNvbnN0IHsgcmV0dXJuIF9NX2N1cnJlbnQ7IH0KICAgIH07CiMgNjQ5ICIvdXNyL2N5Z251 cy9iaW4vLi4vaW5jbHVkZS9jKysvMy4xLjEvYml0cy9zdGxfaXRlcmF0b3IuaCIgMwogIHRlbXBs YXRlPHR5cGVuYW1lIF9JdGVyYXRvckwsIHR5cGVuYW1lIF9JdGVyYXRvclIsIHR5cGVuYW1lIF9D b250YWluZXI+CiAgaW5saW5lIGJvb2wKICBvcGVyYXRvcj09KGNvbnN0IF9fbm9ybWFsX2l0ZXJh dG9yPF9JdGVyYXRvckwsIF9Db250YWluZXI+JiBfX2xocywKICAgICAgICAgICAgIGNvbnN0IF9f bm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvclIsIF9Db250YWluZXI+JiBfX3JocykKICB7IHJldHVy biBfX2xocy5iYXNlKCkgPT0gX19yaHMuYmFzZSgpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9J dGVyYXRvciwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KICBpbmxpbmUgYm9vbAogIG9wZXJhdG9yPT0o Y29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPiYgX19saHMsCiAg ICAgICAgICAgICBjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWluZXI+ JiBfX3JocykKICB7IHJldHVybiBfX2xocy5iYXNlKCkgPT0gX19yaHMuYmFzZSgpOyB9CgogIHRl bXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvckwsIHR5cGVuYW1lIF9JdGVyYXRvclIsIHR5cGVuYW1l IF9Db250YWluZXI+CiAgaW5saW5lIGJvb2wKICBvcGVyYXRvciE9KGNvbnN0IF9fbm9ybWFsX2l0 ZXJhdG9yPF9JdGVyYXRvckwsIF9Db250YWluZXI+JiBfX2xocywKICAgICAgICAgICAgIGNvbnN0 IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvclIsIF9Db250YWluZXI+JiBfX3JocykKICB7IHJl dHVybiBfX2xocy5iYXNlKCkgIT0gX19yaHMuYmFzZSgpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1l IF9JdGVyYXRvciwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KICBpbmxpbmUgYm9vbAogIG9wZXJhdG9y IT0oY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPiYgX19saHMs CiAgICAgICAgICAgICBjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWlu ZXI+JiBfX3JocykKICB7IHJldHVybiBfX2xocy5iYXNlKCkgIT0gX19yaHMuYmFzZSgpOyB9CgoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3JMLCB0eXBlbmFtZSBfSXRlcmF0b3JSLCB0eXBl bmFtZSBfQ29udGFpbmVyPgogIGlubGluZSBib29sCiAgb3BlcmF0b3I8KGNvbnN0IF9fbm9ybWFs X2l0ZXJhdG9yPF9JdGVyYXRvckwsIF9Db250YWluZXI+JiBfX2xocywKICAgICAgICAgICAgY29u c3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yUiwgX0NvbnRhaW5lcj4mIF9fcmhzKQogIHsg cmV0dXJuIF9fbGhzLmJhc2UoKSA8IF9fcmhzLmJhc2UoKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfSXRlcmF0b3IsIHR5cGVuYW1lIF9Db250YWluZXI+CiAgaW5saW5lIGJvb2wKICBvcGVyYXRv cjwoY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPiYgX19saHMs CiAgICAgICAgICAgICBjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWlu ZXI+JiBfX3JocykKICB7IHJldHVybiBfX2xocy5iYXNlKCkgPCBfX3Jocy5iYXNlKCk7IH0KCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yTCwgdHlwZW5hbWUgX0l0ZXJhdG9yUiwgdHlwZW5h bWUgX0NvbnRhaW5lcj4KICBpbmxpbmUgYm9vbAogIG9wZXJhdG9yPihjb25zdCBfX25vcm1hbF9p dGVyYXRvcjxfSXRlcmF0b3JMLCBfQ29udGFpbmVyPiYgX19saHMsCiAgICAgICAgICAgIGNvbnN0 IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvclIsIF9Db250YWluZXI+JiBfX3JocykKICB7IHJl dHVybiBfX2xocy5iYXNlKCkgPiBfX3Jocy5iYXNlKCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg X0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29udGFpbmVyPgogIGlubGluZSBib29sCiAgb3BlcmF0b3I+ KGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwgX0NvbnRhaW5lcj4mIF9fbGhzLAog ICAgICAgICAgICBjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWluZXI+ JiBfX3JocykKICB7IHJldHVybiBfX2xocy5iYXNlKCkgPiBfX3Jocy5iYXNlKCk7IH0KCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yTCwgdHlwZW5hbWUgX0l0ZXJhdG9yUiwgdHlwZW5hbWUg X0NvbnRhaW5lcj4KICBpbmxpbmUgYm9vbAogIG9wZXJhdG9yPD0oY29uc3QgX19ub3JtYWxfaXRl cmF0b3I8X0l0ZXJhdG9yTCwgX0NvbnRhaW5lcj4mIF9fbGhzLAogICAgICAgICAgICAgY29uc3Qg X19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yUiwgX0NvbnRhaW5lcj4mIF9fcmhzKQogIHsgcmV0 dXJuIF9fbGhzLmJhc2UoKSA8PSBfX3Jocy5iYXNlKCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg X0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29udGFpbmVyPgogIGlubGluZSBib29sCiAgb3BlcmF0b3I8 PShjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWluZXI+JiBfX2xocywK ICAgICAgICAgICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwgX0NvbnRhaW5l cj4mIF9fcmhzKQogIHsgcmV0dXJuIF9fbGhzLmJhc2UoKSA8PSBfX3Jocy5iYXNlKCk7IH0KCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yTCwgdHlwZW5hbWUgX0l0ZXJhdG9yUiwgdHlwZW5h bWUgX0NvbnRhaW5lcj4KICBpbmxpbmUgYm9vbAogIG9wZXJhdG9yPj0oY29uc3QgX19ub3JtYWxf aXRlcmF0b3I8X0l0ZXJhdG9yTCwgX0NvbnRhaW5lcj4mIF9fbGhzLAogICAgICAgICAgICAgY29u c3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yUiwgX0NvbnRhaW5lcj4mIF9fcmhzKQogIHsg cmV0dXJuIF9fbGhzLmJhc2UoKSA+PSBfX3Jocy5iYXNlKCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29udGFpbmVyPgogIGlubGluZSBib29sCiAgb3BlcmF0 b3I+PShjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWluZXI+JiBfX2xo cywKICAgICAgICAgICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwgX0NvbnRh aW5lcj4mIF9fcmhzKQogIHsgcmV0dXJuIF9fbGhzLmJhc2UoKSA+PSBfX3Jocy5iYXNlKCk7IH0K CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29udGFpbmVyPgogIGlu bGluZSBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWluZXI+CiAgb3BlcmF0b3Ir KHR5cGVuYW1lIF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwgX0NvbnRhaW5lcj46OmRpZmZl cmVuY2VfdHlwZSBfX24sCiAgICAgICAgICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVy YXRvciwgX0NvbnRhaW5lcj4mIF9faSkKICB7IHJldHVybiBfX25vcm1hbF9pdGVyYXRvcjxfSXRl cmF0b3IsIF9Db250YWluZXI+KF9faS5iYXNlKCkgKyBfX24pOyB9Cn0KIyA3NiAiL3Vzci9jeWdu dXMvYmluLy4uL2luY2x1ZGUvYysrLzMuMS4xL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDIgMwoKCm5h bWVzcGFjZSBzdGQKewojIDkxICIvdXNyL2N5Z251cy9iaW4vLi4vaW5jbHVkZS9jKysvMy4xLjEv Yml0cy9zdGxfYWxnb2Jhc2UuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcjEs IHR5cGVuYW1lIF9Gb3J3YXJkSXRlcjI+CiAgICBpbmxpbmUgdm9pZAogICAgaXRlcl9zd2FwKF9G b3J3YXJkSXRlcjEgX19hLCBfRm9yd2FyZEl0ZXIyIF9fYikKICAgIHsKICAgICAgdHlwZWRlZiB0 eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyMT46OnZhbHVlX3R5cGUgX1ZhbHVl VHlwZTE7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRl cjI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGUyOwoKCiAgICAgCiAgICAgCiAgICAgCiAgICAgCgog ICAgICBfVmFsdWVUeXBlMSBfX3RtcCA9ICpfX2E7CiAgICAgICpfX2EgPSAqX19iOwogICAgICAq X19iID0gX190bXA7CiAgICB9CiMgMTE4ICIvdXNyL2N5Z251cy9iaW4vLi4vaW5jbHVkZS9jKysv My4xLjEvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAg IGlubGluZSB2b2lkCiAgICBzd2FwKF9UcCYgX19hLCBfVHAmIF9fYikKICAgIHsKCiAgICAgCgog ICAgICBfVHAgX190bXAgPSBfX2E7CiAgICAgIF9fYSA9IF9fYjsKICAgICAgX19iID0gX190bXA7 CiAgICB9CiMgMTQ2ICIvdXNyL2N5Z251cy9iaW4vLi4vaW5jbHVkZS9jKysvMy4xLjEvYml0cy9z dGxfYWxnb2Jhc2UuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSBjb25z dCBfVHAmCiAgICBtaW4oY29uc3QgX1RwJiBfX2EsIGNvbnN0IF9UcCYgX19iKQogICAgewoKICAg ICAKCiAgICAgIGlmIChfX2IgPCBfX2EpIHJldHVybiBfX2I7IHJldHVybiBfX2E7CiAgICB9CiMg MTY2ICIvdXNyL2N5Z251cy9iaW4vLi4vaW5jbHVkZS9jKysvMy4xLjEvYml0cy9zdGxfYWxnb2Jh c2UuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSBjb25zdCBfVHAmCiAg ICBtYXgoY29uc3QgX1RwJiBfX2EsIGNvbnN0IF9UcCYgX19iKQogICAgewoKICAgICAKCiAgICAg IGlmIChfX2EgPCBfX2IpIHJldHVybiBfX2I7IHJldHVybiBfX2E7CiAgICB9CiMgMTg2ICIvdXNy L2N5Z251cy9iaW4vLi4vaW5jbHVkZS9jKysvMy4xLjEvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwog IHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBpbmxpbmUgY29u c3QgX1RwJgogICAgbWluKGNvbnN0IF9UcCYgX19hLCBjb25zdCBfVHAmIF9fYiwgX0NvbXBhcmUg X19jb21wKQogICAgewoKICAgICAgaWYgKF9fY29tcChfX2IsIF9fYSkpIHJldHVybiBfX2I7IHJl dHVybiBfX2E7CiAgICB9CiMgMjA0ICIvdXNyL2N5Z251cy9iaW4vLi4vaW5jbHVkZS9jKysvMy4x LjEvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5h bWUgX0NvbXBhcmU+CiAgICBpbmxpbmUgY29uc3QgX1RwJgogICAgbWF4KGNvbnN0IF9UcCYgX19h LCBjb25zdCBfVHAmIF9fYiwgX0NvbXBhcmUgX19jb21wKQogICAgewoKICAgICAgaWYgKF9fY29t cChfX2EsIF9fYikpIHJldHVybiBfX2I7IHJldHVybiBfX2E7CiAgICB9CiMgMjIxICIvdXNyL2N5 Z251cy9iaW4vLi4vaW5jbHVkZS9jKysvMy4xLjEvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwogIHRl bXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyPgogICAgaW5s aW5lIF9PdXRwdXRJdGVyCiAgICBfX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVy IF9fbGFzdCwKICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwKICAgICAgICAgICBpbnB1 dF9pdGVyYXRvcl90YWcpCiAgICB7CiAgICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsr X19yZXN1bHQsICsrX19maXJzdCkKICAgICAgICAqX19yZXN1bHQgPSAqX19maXJzdDsKICAgICAg cmV0dXJuIF9fcmVzdWx0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNz SXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXI+CiAgICBpbmxpbmUgX091dHB1dEl0ZXIKICAgIF9f Y29weShfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3Qs CiAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgcmFuZG9tX2FjY2Vz c19pdGVyYXRvcl90YWcpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJh aXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6ZGlmZmVyZW5jZV90eXBlCiAgICAgICAgICBfRGlzdGFu Y2U7CiAgICAgIGZvciAoX0Rpc3RhbmNlIF9fbiA9IF9fbGFzdCAtIF9fZmlyc3Q7IF9fbiA+IDA7 IC0tX19uKSB7CiAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3Q7CiAgICAgICAgKytfX2ZpcnN0 OwogICAgICAgICsrX19yZXN1bHQ7CiAgICAgIH0KICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAg fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUgX1RwKgogICAgX19jb3B5X3Ry aXZpYWwoY29uc3QgX1RwKiBfX2ZpcnN0LCBjb25zdCBfVHAqIF9fbGFzdCwgX1RwKiBfX3Jlc3Vs dCkKICAgIHsKICAgICAgbWVtbW92ZShfX3Jlc3VsdCwgX19maXJzdCwgc2l6ZW9mKF9UcCkgKiAo X19sYXN0IC0gX19maXJzdCkpOwogICAgICByZXR1cm4gX19yZXN1bHQgKyAoX19sYXN0IC0gX19m aXJzdCk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9P dXRwdXRJdGVyPgogICAgaW5saW5lIF9PdXRwdXRJdGVyCiAgICBfX2NvcHlfYXV4MihfSW5wdXRJ dGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgX091dHB1dEl0 ZXIgX19yZXN1bHQsIF9fZmFsc2VfdHlwZSkKICAgIHsgcmV0dXJuIF9fY29weShfX2ZpcnN0LCBf X2xhc3QsIF9fcmVzdWx0LCBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsgfQoKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4KICAgIGlubGlu ZSBfT3V0cHV0SXRlcgogICAgX19jb3B5X2F1eDIoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJ dGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBfX3RydWVf dHlwZSkKICAgIHsgcmV0dXJuIF9fY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LCBfX2l0 ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAg ICBpbmxpbmUgX1RwKgogICAgX19jb3B5X2F1eDIoX1RwKiBfX2ZpcnN0LCBfVHAqIF9fbGFzdCwK ICAgICAgICAgICAgICAgIF9UcCogX19yZXN1bHQsIF9fdHJ1ZV90eXBlKQogICAgeyByZXR1cm4g X19jb3B5X3RyaXZpYWwoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCk7IH0KCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX1RwPgogICAgaW5saW5lIF9UcCoKICAgIF9fY29weV9hdXgyKGNvbnN0IF9UcCog X19maXJzdCwgY29uc3QgX1RwKiBfX2xhc3QsCiAgICAgICAgICAgICAgICBfVHAqIF9fcmVzdWx0 LCBfX3RydWVfdHlwZSkKICAgIHsgcmV0dXJuIF9fY29weV90cml2aWFsKF9fZmlyc3QsIF9fbGFz dCwgX19yZXN1bHQpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1l IF9PdXRwdXRJdGVyPgogICAgaW5saW5lIF9PdXRwdXRJdGVyCiAgICBfX2NvcHlfbmkyKF9JbnB1 dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgIF9PdXRwdXRJ dGVyIF9fcmVzdWx0LCBfX3RydWVfdHlwZSkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBp dGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcj46OnZhbHVlX3R5cGUKICAgICAgICAgIF9WYWx1ZVR5 cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX190eXBlX3RyYWl0czxfVmFsdWVUeXBlPjo6aGFz X3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcgogICAgICAgICAgX1RyaXZpYWw7CiAgICAgIHJl dHVybiBfT3V0cHV0SXRlcihfX2NvcHlfYXV4MihfX2ZpcnN0LCBfX2xhc3QsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Jlc3VsdC5iYXNlKCksCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBfVHJpdmlhbCgpKSk7CiAgICB9CgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyPgogICAgaW5saW5lIF9PdXRw dXRJdGVyCiAgICBfX2NvcHlfbmkyKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xh c3QsCiAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBfX2ZhbHNlX3R5cGUpCiAg ICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+Ojp2 YWx1ZV90eXBlCiAgICAgICAgICBfVmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9f dHlwZV90cmFpdHM8X1ZhbHVlVHlwZT46Omhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3IK ICAgICAgICAgIF9Ucml2aWFsOwogICAgICByZXR1cm4gX19jb3B5X2F1eDIoX19maXJzdCwgX19s YXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAg ICAgICAgICBfVHJpdmlhbCgpKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRl ciwgdHlwZW5hbWUgX091dHB1dEl0ZXI+CiAgICBpbmxpbmUgX091dHB1dEl0ZXIKICAgIF9fY29w eV9uaTEoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAg ICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9fdHJ1ZV90eXBlKQogICAgewogICAgICB0eXBlZGVm IHR5cGVuYW1lIF9Jc19ub3JtYWxfaXRlcmF0b3I8X091dHB1dEl0ZXI+OjpfTm9ybWFsIF9fTm9y bWFsOwogICAgICByZXR1cm4gX19jb3B5X25pMihfX2ZpcnN0LmJhc2UoKSwgX19sYXN0LmJhc2Uo KSwgX19yZXN1bHQsIF9fTm9ybWFsKCkpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5w dXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4KICAgIGlubGluZSBfT3V0cHV0SXRlcgogICAg X19jb3B5X25pMShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAg ICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX19mYWxzZV90eXBlKQogICAgewogICAgICB0 eXBlZGVmIHR5cGVuYW1lIF9Jc19ub3JtYWxfaXRlcmF0b3I8X091dHB1dEl0ZXI+OjpfTm9ybWFs IF9fTm9ybWFsOwogICAgICByZXR1cm4gX19jb3B5X25pMihfX2ZpcnN0LCBfX2xhc3QsIF9fcmVz dWx0LCBfX05vcm1hbCgpKTsKICAgIH0KIyAzMzkgIi91c3IvY3lnbnVzL2Jpbi8uLi9pbmNsdWRl L2MrKy8zLjEuMS9iaXRzL3N0bF9hbGdvYmFzZS5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lu cHV0SXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXI+CiAgICBpbmxpbmUgX091dHB1dEl0ZXIKICAg IGNvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwgX091dHB1dEl0ZXIg X19yZXN1bHQpCiAgICB7CgogICAgIAogICAgIAoKCiAgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9J c19ub3JtYWxfaXRlcmF0b3I8X0lucHV0SXRlcj46Ol9Ob3JtYWwgX19Ob3JtYWw7CiAgICAgICBy ZXR1cm4gX19jb3B5X25pMShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LCBfX05vcm1hbCgpKTsK ICAgIH0KCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyMSwgdHlwZW5h bWUgX0JpZGlyZWN0aW9uYWxJdGVyMj4KICAgIGlubGluZSBfQmlkaXJlY3Rpb25hbEl0ZXIyCiAg ICBfX2NvcHlfYmFja3dhcmQoX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2ZpcnN0LCBfQmlkaXJlY3Rp b25hbEl0ZXIxIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIy IF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFn KQogICAgewogICAgICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpCiAgICAgICAgKi0tX19yZXN1 bHQgPSAqLS1fX2xhc3Q7CiAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgIH0KCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcj4K ICAgIGlubGluZSBfQmlkaXJlY3Rpb25hbEl0ZXIKICAgIF9fY29weV9iYWNrd2FyZChfUmFuZG9t QWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAg ICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAg IHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKQogICAgewogICAgICB0eXBlbmFtZSBpdGVyYXRv cl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX19uOwogICAgICBm b3IgKF9fbiA9IF9fbGFzdCAtIF9fZmlyc3Q7IF9fbiA+IDA7IC0tX19uKQogICAgICAgICotLV9f cmVzdWx0ID0gKi0tX19sYXN0OwogICAgICByZXR1cm4gX19yZXN1bHQ7CiAgICB9CgoKCgoKCgog IHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcjEsIHR5cGVuYW1lIF9CaWRpcmVj dGlvbmFsSXRlcjIsCiAgICAgICAgICAgdHlwZW5hbWUgX0Jvb2xUeXBlPgogICAgc3RydWN0IF9f Y29weV9iYWNrd2FyZF9kaXNwYXRjaAogICAgewogICAgICBzdGF0aWMgX0JpZGlyZWN0aW9uYWxJ dGVyMgogICAgICBjb3B5KF9CaWRpcmVjdGlvbmFsSXRlcjEgX19maXJzdCwgX0JpZGlyZWN0aW9u YWxJdGVyMSBfX2xhc3QsCiAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX3Jlc3VsdCkK ICAgICAgewogICAgICAgIHJldHVybiBfX2NvcHlfYmFja3dhcmQoX19maXJzdCwgX19sYXN0LAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsKICAgICAgfQogICAg fTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgc3RydWN0IF9fY29weV9iYWNrd2FyZF9k aXNwYXRjaDxfVHAqLCBfVHAqLCBfX3RydWVfdHlwZT4KICAgIHsKICAgICAgc3RhdGljIF9UcCoK ICAgICAgY29weShjb25zdCBfVHAqIF9fZmlyc3QsIGNvbnN0IF9UcCogX19sYXN0LCBfVHAqIF9f cmVzdWx0KQogICAgICB7CiAgICAgICAgY29uc3QgcHRyZGlmZl90IF9OdW0gPSBfX2xhc3QgLSBf X2ZpcnN0OwogICAgICAgIG1lbW1vdmUoX19yZXN1bHQgLSBfTnVtLCBfX2ZpcnN0LCBzaXplb2Yo X1RwKSAqIF9OdW0pOwogICAgICAgIHJldHVybiBfX3Jlc3VsdCAtIF9OdW07CiAgICAgIH0KICAg IH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIHN0cnVjdCBfX2NvcHlfYmFja3dhcmRf ZGlzcGF0Y2g8Y29uc3QgX1RwKiwgX1RwKiwgX190cnVlX3R5cGU+CiAgICB7CiAgICAgIHN0YXRp YyBfVHAqCiAgICAgIGNvcHkoY29uc3QgX1RwKiBfX2ZpcnN0LCBjb25zdCBfVHAqIF9fbGFzdCwg X1RwKiBfX3Jlc3VsdCkKICAgICAgewogICAgICAgIHJldHVybiBfX2NvcHlfYmFja3dhcmRfZGlz cGF0Y2g8X1RwKiwgX1RwKiwgX190cnVlX3R5cGU+CiAgICAgICAgICA6OmNvcHkoX19maXJzdCwg X19sYXN0LCBfX3Jlc3VsdCk7CiAgICAgIH0KICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9C STEsIHR5cGVuYW1lIF9CSTI+CiAgICBpbmxpbmUgX0JJMgogICAgX19jb3B5X2JhY2t3YXJkX2F1 eChfQkkxIF9fZmlyc3QsIF9CSTEgX19sYXN0LCBfQkkyIF9fcmVzdWx0KQogICAgewogICAgICB0 eXBlZGVmIHR5cGVuYW1lIF9fdHlwZV90cmFpdHM8dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9C STI+Ojp2YWx1ZV90eXBlPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgOjpoYXNfdHJpdmlh bF9hc3NpZ25tZW50X29wZXJhdG9yIF9Ucml2aWFsOwogICAgICByZXR1cm4gX19jb3B5X2JhY2t3 YXJkX2Rpc3BhdGNoPF9CSTEsIF9CSTIsIF9Ucml2aWFsPgogICAgICAgICAgICAgICAgICA6OmNv cHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCk7CiAgICB9CgogIHRlbXBsYXRlIDx0eXBlbmFt ZSBfQkkxLCB0eXBlbmFtZSBfQkkyPgogICAgaW5saW5lIF9CSTIKICAgIF9fY29weV9iYWNrd2Fy ZF9vdXRwdXRfbm9ybWFsX2l0ZXJhdG9yKF9CSTEgX19maXJzdCwgX0JJMSBfX2xhc3QsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQkkyIF9fcmVzdWx0LCBfX3Ry dWVfdHlwZSkKICAgIHsgcmV0dXJuIF9CSTIoX19jb3B5X2JhY2t3YXJkX2F1eChfX2ZpcnN0LCBf X2xhc3QsIF9fcmVzdWx0LmJhc2UoKSkpOyB9CgogIHRlbXBsYXRlIDx0eXBlbmFtZSBfQkkxLCB0 eXBlbmFtZSBfQkkyPgogICAgaW5saW5lIF9CSTIKICAgIF9fY29weV9iYWNrd2FyZF9vdXRwdXRf bm9ybWFsX2l0ZXJhdG9yKF9CSTEgX19maXJzdCwgX0JJMSBfX2xhc3QsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQkkyIF9fcmVzdWx0LCBfX2ZhbHNlX3R5cGUp CiAgICB7IHJldHVybiBfX2NvcHlfYmFja3dhcmRfYXV4KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1 bHQpOyB9CgogIHRlbXBsYXRlIDx0eXBlbmFtZSBfQkkxLCB0eXBlbmFtZSBfQkkyPgogICAgaW5s aW5lIF9CSTIKICAgIF9fY29weV9iYWNrd2FyZF9pbnB1dF9ub3JtYWxfaXRlcmF0b3IoX0JJMSBf X2ZpcnN0LCBfQkkxIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgX0JJMiBfX3Jlc3VsdCwgX190cnVlX3R5cGUpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlw ZW5hbWUgX0lzX25vcm1hbF9pdGVyYXRvcjxfQkkyPjo6X05vcm1hbCBfX05vcm1hbDsKICAgICAg cmV0dXJuIF9fY29weV9iYWNrd2FyZF9vdXRwdXRfbm9ybWFsX2l0ZXJhdG9yKF9fZmlyc3QuYmFz ZSgpLCBfX2xhc3QuYmFzZSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgX19yZXN1bHQsIF9fTm9ybWFsKCkpOwogICAgfQoKICB0ZW1wbGF0ZSA8 dHlwZW5hbWUgX0JJMSwgdHlwZW5hbWUgX0JJMj4KICAgIGlubGluZSBfQkkyCiAgICBfX2NvcHlf YmFja3dhcmRfaW5wdXRfbm9ybWFsX2l0ZXJhdG9yKF9CSTEgX19maXJzdCwgX0JJMSBfX2xhc3Qs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CSTIgX19yZXN1bHQs IF9fZmFsc2VfdHlwZSkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfbm9ybWFsX2l0 ZXJhdG9yPF9CSTI+OjpfTm9ybWFsIF9fTm9ybWFsOwogICAgICByZXR1cm4gX19jb3B5X2JhY2t3 YXJkX291dHB1dF9ub3JtYWxfaXRlcmF0b3IoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fTm9ybWFs KCkpOwogICAgfQojIDQ3NyAiL3Vzci9jeWdudXMvYmluLy4uL2luY2x1ZGUvYysrLzMuMS4xL2Jp dHMvc3RsX2FsZ29iYXNlLmgiIDMKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0JJMSwgdHlwZW5hbWUg X0JJMj4KICAgIGlubGluZSBfQkkyCiAgICBjb3B5X2JhY2t3YXJkKF9CSTEgX19maXJzdCwgX0JJ MSBfX2xhc3QsIF9CSTIgX19yZXN1bHQpCiAgICB7CgogICAgIAogICAgIAogICAgIAoKCgogICAg ICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19ub3JtYWxfaXRlcmF0b3I8X0JJMT46Ol9Ob3JtYWwgX19O b3JtYWw7CiAgICAgIHJldHVybiBfX2NvcHlfYmFja3dhcmRfaW5wdXRfbm9ybWFsX2l0ZXJhdG9y KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIF9fTm9ybWFsKCkpOwogICAgfQojIDUwOSAiL3Vzci9jeWdu dXMvYmluLy4uL2luY2x1ZGUvYysrLzMuMS4xL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9UcD4KICAgIHZvaWQKICAgIGZp bGwoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsIGNvbnN0IF9UcCYg X192YWx1ZSkKICAgIHsKCiAgICAgCgogICAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyAr K19fZmlyc3QpCiAgICAgICAgKl9fZmlyc3QgPSBfX3ZhbHVlOwogICAgfQojIDUzMSAiL3Vzci9j eWdudXMvYmluLy4uL2luY2x1ZGUvYysrLzMuMS4xL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfT3V0cHV0SXRlciwgdHlwZW5hbWUgX1NpemUsIHR5cGVuYW1lIF9U cD4KICAgIF9PdXRwdXRJdGVyCiAgICBmaWxsX24oX091dHB1dEl0ZXIgX19maXJzdCwgX1NpemUg X19uLCBjb25zdCBfVHAmIF9fdmFsdWUpCiAgICB7CgogICAgIAoKICAgICAgZm9yICggOyBfX24g PiAwOyAtLV9fbiwgKytfX2ZpcnN0KQogICAgICAgICpfX2ZpcnN0ID0gX192YWx1ZTsKICAgICAg cmV0dXJuIF9fZmlyc3Q7CiAgICB9CgoKCiAgaW5saW5lIHZvaWQKICBmaWxsKHVuc2lnbmVkIGNo YXIqIF9fZmlyc3QsIHVuc2lnbmVkIGNoYXIqIF9fbGFzdCwgY29uc3QgdW5zaWduZWQgY2hhciYg X19jKQogIHsKICAgIHVuc2lnbmVkIGNoYXIgX190bXAgPSBfX2M7CiAgICBtZW1zZXQoX19maXJz dCwgX190bXAsIF9fbGFzdCAtIF9fZmlyc3QpOwogIH0KCiAgaW5saW5lIHZvaWQKICBmaWxsKHNp Z25lZCBjaGFyKiBfX2ZpcnN0LCBzaWduZWQgY2hhciogX19sYXN0LCBjb25zdCBzaWduZWQgY2hh ciYgX19jKQogIHsKICAgIHNpZ25lZCBjaGFyIF9fdG1wID0gX19jOwogICAgbWVtc2V0KF9fZmly c3QsIHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KF9fdG1wKSwgX19sYXN0IC0gX19maXJzdCk7 CiAgfQoKICBpbmxpbmUgdm9pZAogIGZpbGwoY2hhciogX19maXJzdCwgY2hhciogX19sYXN0LCBj b25zdCBjaGFyJiBfX2MpCiAgewogICAgY2hhciBfX3RtcCA9IF9fYzsKICAgIG1lbXNldChfX2Zp cnN0LCBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihfX3RtcCksIF9fbGFzdCAtIF9fZmlyc3Qp OwogIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1NpemU+CiAgICBpbmxpbmUgdW5zaWduZWQgY2hh cioKICAgIGZpbGxfbih1bnNpZ25lZCBjaGFyKiBfX2ZpcnN0LCBfU2l6ZSBfX24sIGNvbnN0IHVu c2lnbmVkIGNoYXImIF9fYykKICAgIHsKICAgICAgZmlsbChfX2ZpcnN0LCBfX2ZpcnN0ICsgX19u LCBfX2MpOwogICAgICByZXR1cm4gX19maXJzdCArIF9fbjsKICAgIH0KCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX1NpemU+CiAgICBpbmxpbmUgc2lnbmVkIGNoYXIqCiAgICBmaWxsX24oY2hhciogX19m aXJzdCwgX1NpemUgX19uLCBjb25zdCBzaWduZWQgY2hhciYgX19jKQogICAgewogICAgICBmaWxs KF9fZmlyc3QsIF9fZmlyc3QgKyBfX24sIF9fYyk7CiAgICAgIHJldHVybiBfX2ZpcnN0ICsgX19u OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfU2l6ZT4KICAgIGlubGluZSBjaGFyKgogICAg ZmlsbF9uKGNoYXIqIF9fZmlyc3QsIF9TaXplIF9fbiwgY29uc3QgY2hhciYgX19jKQogICAgewog ICAgICBmaWxsKF9fZmlyc3QsIF9fZmlyc3QgKyBfX24sIF9fYyk7CiAgICAgIHJldHVybiBfX2Zp cnN0ICsgX19uOwogICAgfQojIDYwNiAiL3Vzci9jeWdudXMvYmluLy4uL2luY2x1ZGUvYysrLzMu MS4xL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVy MSwgdHlwZW5hbWUgX0lucHV0SXRlcjI+CiAgICBwYWlyPF9JbnB1dEl0ZXIxLCBfSW5wdXRJdGVy Mj4KICAgIG1pc21hdGNoKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3Qx LAogICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIpCiAgICB7CgogICAgIAogICAgIAog ICAgIAoKICAgICAKCgogICAgICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiAqX19maXJz dDEgPT0gKl9fZmlyc3QyKSB7CiAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgICArK19fZmlyc3Qy OwogICAgICB9CiAgICAgIHJldHVybiBwYWlyPF9JbnB1dEl0ZXIxLCBfSW5wdXRJdGVyMj4oX19m aXJzdDEsIF9fZmlyc3QyKTsKICAgIH0KIyA2NDAgIi91c3IvY3lnbnVzL2Jpbi8uLi9pbmNsdWRl L2MrKy8zLjEuMS9iaXRzL3N0bF9hbGdvYmFzZS5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lu cHV0SXRlcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXIyLCB0eXBlbmFtZSBfQmluYXJ5UHJlZGljYXRl PgogICAgcGFpcjxfSW5wdXRJdGVyMSwgX0lucHV0SXRlcjI+CiAgICBtaXNtYXRjaChfSW5wdXRJ dGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgIF9JbnB1dEl0 ZXIyIF9fZmlyc3QyLAogICAgICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2JpbmFyeV9wcmVk KQogICAgewoKICAgICAKICAgICAKCiAgICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYm IF9fYmluYXJ5X3ByZWQoKl9fZmlyc3QxLCAqX19maXJzdDIpKSB7CiAgICAgICAgKytfX2ZpcnN0 MTsKICAgICAgICArK19fZmlyc3QyOwogICAgICB9CiAgICAgIHJldHVybiBwYWlyPF9JbnB1dEl0 ZXIxLCBfSW5wdXRJdGVyMj4oX19maXJzdDEsIF9fZmlyc3QyKTsKICAgIH0KIyA2NjggIi91c3Iv Y3lnbnVzL2Jpbi8uLi9pbmNsdWRlL2MrKy8zLjEuMS9iaXRzL3N0bF9hbGdvYmFzZS5oIiAzCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXIyPgogICAg aW5saW5lIGJvb2wKICAgIGVxdWFsKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBf X2xhc3QxLAogICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIpCiAgICB7CgogICAgIAogICAg IAogICAgIAoKCgogICAgICBmb3IgKCA7IF9fZmlyc3QxICE9IF9fbGFzdDE7ICsrX19maXJzdDEs ICsrX19maXJzdDIpCiAgICAgICAgaWYgKCEoKl9fZmlyc3QxID09ICpfX2ZpcnN0MikpCiAgICAg ICAgICByZXR1cm4gZmFsc2U7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQojIDY5OSAiL3Vzci9j eWdudXMvYmluLy4uL2luY2x1ZGUvYysrLzMuMS4xL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0SXRlcjIsIHR5cGVu YW1lIF9CaW5hcnlQcmVkaWNhdGU+CiAgICBpbmxpbmUgYm9vbAogICAgZXF1YWwoX0lucHV0SXRl cjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICBfSW5wdXRJdGVyMiBf X2ZpcnN0MiwKICAgICAgICAgIF9CaW5hcnlQcmVkaWNhdGUgX19iaW5hcnlfcHJlZCkKICAgIHsK CiAgICAgCiAgICAgCgogICAgICBmb3IgKCA7IF9fZmlyc3QxICE9IF9fbGFzdDE7ICsrX19maXJz dDEsICsrX19maXJzdDIpCiAgICAgICAgaWYgKCFfX2JpbmFyeV9wcmVkKCpfX2ZpcnN0MSwgKl9f Zmlyc3QyKSkKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9 CiMgNzMyICIvdXNyL2N5Z251cy9iaW4vLi4vaW5jbHVkZS9jKysvMy4xLjEvYml0cy9zdGxfYWxn b2Jhc2UuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5w dXRJdGVyMj4KICAgIGJvb2wKICAgIGxleGljb2dyYXBoaWNhbF9jb21wYXJlKF9JbnB1dEl0ZXIx IF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIpCiAgICB7CgogICAg IAogICAgIAogICAgIAoKICAgICAKCgogICAgICBmb3IgKCA7IF9fZmlyc3QxICE9IF9fbGFzdDEg JiYgX19maXJzdDIgIT0gX19sYXN0MgogICAgICAgICAgICA7ICsrX19maXJzdDEsICsrX19maXJz dDIpIHsKICAgICAgICBpZiAoKl9fZmlyc3QxIDwgKl9fZmlyc3QyKQogICAgICAgICAgcmV0dXJu IHRydWU7CiAgICAgICAgaWYgKCpfX2ZpcnN0MiA8ICpfX2ZpcnN0MSkKICAgICAgICAgIHJldHVy biBmYWxzZTsKICAgICAgfQogICAgICByZXR1cm4gX19maXJzdDEgPT0gX19sYXN0MSAmJiBfX2Zp cnN0MiAhPSBfX2xhc3QyOwogICAgfQojIDc2NyAiL3Vzci9jeWdudXMvYmluLy4uL2luY2x1ZGUv YysrLzMuMS4xL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5w dXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0SXRlcjIsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgYm9v bAogICAgbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmUoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1 dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBf X2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAg IF9Db21wYXJlIF9fY29tcCkKICAgIHsKCiAgICAgCiAgICAgCgogICAgICBmb3IgKCA7IF9fZmly c3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MgogICAgICAgICAgICA7ICsrX19m aXJzdDEsICsrX19maXJzdDIpIHsKICAgICAgICBpZiAoX19jb21wKCpfX2ZpcnN0MSwgKl9fZmly c3QyKSkKICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIGlmIChfX2NvbXAoKl9fZmlyc3Qy LCAqX19maXJzdDEpKQogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICAgIHJldHVy biBfX2ZpcnN0MSA9PSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDI7CiAgICB9CgogIGlu bGluZSBib29sCiAgbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmUoY29uc3QgdW5zaWduZWQgY2hhciog X19maXJzdDEsIGNvbnN0IHVuc2lnbmVkIGNoYXIqIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciogX19maXJzdDIsIGNvbnN0IHVuc2lnbmVkIGNo YXIqIF9fbGFzdDIpCiAgewogICAgY29uc3Qgc2l6ZV90IF9fbGVuMSA9IF9fbGFzdDEgLSBfX2Zp cnN0MTsKICAgIGNvbnN0IHNpemVfdCBfX2xlbjIgPSBfX2xhc3QyIC0gX19maXJzdDI7CiAgICBj b25zdCBpbnQgX19yZXN1bHQgPSBtZW1jbXAoX19maXJzdDEsIF9fZmlyc3QyLCBtaW4oX19sZW4x LCBfX2xlbjIpKTsKICAgIHJldHVybiBfX3Jlc3VsdCAhPSAwID8gX19yZXN1bHQgPCAwIDogX19s ZW4xIDwgX19sZW4yOwogIH0KCiAgaW5saW5lIGJvb2wKICBsZXhpY29ncmFwaGljYWxfY29tcGFy ZShjb25zdCBjaGFyKiBfX2ZpcnN0MSwgY29uc3QgY2hhciogX19sYXN0MSwKICAgICAgICAgICAg ICAgICAgICAgICAgICBjb25zdCBjaGFyKiBfX2ZpcnN0MiwgY29uc3QgY2hhciogX19sYXN0MikK ICB7CgogICAgcmV0dXJuIGxleGljb2dyYXBoaWNhbF9jb21wYXJlKChjb25zdCBzaWduZWQgY2hh ciopIF9fZmlyc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBz aWduZWQgY2hhciopIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KGNvbnN0IHNpZ25lZCBjaGFyKikgX19maXJzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKGNvbnN0IHNpZ25lZCBjaGFyKikgX19sYXN0Mik7CgoKCgoKCiAgfQoKfQojIDU1 ICIvdXNyL2N5Z251cy9iaW4vLi4vaW5jbHVkZS9jKysvMy4xLjEvbWVtb3J5IiAyIDMKIyAxICIv dXNyL2N5Z251cy9iaW4vLi4vaW5jbHVkZS9jKysvMy4xLjEvYml0cy9zdGxfYWxsb2MuaCIgMSAz CiMgODQgIi91c3IvY3lnbnVzL2Jpbi8uLi9pbmNsdWRlL2MrKy8zLjEuMS9iaXRzL3N0bF9hbGxv Yy5oIiAzCiMgMSAiL3Vzci9jeWdudXMvYmluLy4uL2luY2x1ZGUvYysrLzMuMS4xL2Nhc3NlcnQi IDEgMwojIDQ3ICIvdXNyL2N5Z251cy9iaW4vLi4vaW5jbHVkZS9jKysvMy4xLjEvY2Fzc2VydCIg MwoKIyAxICIvdXNyL2luY2x1ZGUvYXNzZXJ0LmgiIDEgMwojIDY1ICIvdXNyL2luY2x1ZGUvYXNz ZXJ0LmgiIDMKZXh0ZXJuICJDIiB7CgoKZXh0ZXJuIHZvaWQgX19hc3NlcnRfZmFpbCAoX19jb25z dCBjaGFyICpfX2Fzc2VydGlvbiwgX19jb25zdCBjaGFyICpfX2ZpbGUsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgIHVuc2lnbmVkIGludCBfX2xpbmUsIF9fY29uc3QgY2hhciAqX19mdW5jdGlv bikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CgoKZXh0ZXJu IHZvaWQgX19hc3NlcnRfcGVycm9yX2ZhaWwgKGludCBfX2Vycm51bSwgX19jb25zdCBjaGFyICpf X2ZpbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgX19s aW5lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX2Z1 bmN0aW9uKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKCgoK CmV4dGVybiB2b2lkIF9fYXNzZXJ0IChjb25zdCBjaGFyICpfX2Fzc2VydGlvbiwgY29uc3QgY2hh ciAqX19maWxlLCBpbnQgX19saW5lKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX25v cmV0dXJuX18pKTsKCgp9CiMgNDkgIi91c3IvY3lnbnVzL2Jpbi8uLi9pbmNsdWRlL2MrKy8zLjEu MS9jYXNzZXJ0IiAyIDMKIyA4NSAiL3Vzci9jeWdudXMvYmluLy4uL2luY2x1ZGUvYysrLzMuMS4x L2JpdHMvc3RsX2FsbG9jLmgiIDIgMwojIDEgIi91c3IvY3lnbnVzL2Jpbi8uLi9pbmNsdWRlL2Mr Ky8zLjEuMS9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDEgMwojIDM0ICIvdXNyL2N5Z251cy9iaW4vLi4v aW5jbHVkZS9jKysvMy4xLjEvYml0cy9mdW5jdGV4Y2VwdC5oIiAzCiMgMSAiL3Vzci9jeWdudXMv YmluLy4uL2luY2x1ZGUvYysrLzMuMS4xL2V4Y2VwdGlvbl9kZWZpbmVzLmgiIDEgMwojIDM1ICIv dXNyL2N5Z251cy9iaW4vLi4vaW5jbHVkZS9jKysvMy4xLjEvYml0cy9mdW5jdGV4Y2VwdC5oIiAy IDMKCm5hbWVzcGFjZSBzdGQKewoKICB2b2lkCiAgX190aHJvd19iYWRfZXhjZXB0aW9uKHZvaWQp OwoKCiAgdm9pZAogIF9fdGhyb3dfYmFkX2FsbG9jKHZvaWQpOwoKCiAgdm9pZAogIF9fdGhyb3df YmFkX2Nhc3Qodm9pZCk7CgogIHZvaWQKICBfX3Rocm93X2JhZF90eXBlaWQodm9pZCk7CgoKICB2 b2lkCiAgX190aHJvd19sb2dpY19lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190 aHJvd19kb21haW5fZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfaW52 YWxpZF9hcmd1bWVudChjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19sZW5ndGhf ZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfb3V0X29mX3JhbmdlKGNv bnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X3J1bnRpbWVfZXJyb3IoY29uc3QgY2hh ciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfcmFuZ2VfZXJyb3IoY29uc3QgY2hhciogX19zKTsK CiAgdm9pZAogIF9fdGhyb3dfb3ZlcmZsb3dfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9p ZAogIF9fdGhyb3dfdW5kZXJmbG93X2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgoKICB2b2lkCiAg X190aHJvd19pb3NfZmFpbHVyZShjb25zdCBjaGFyKiBfX3MpOwp9CiMgODYgIi91c3IvY3lnbnVz L2Jpbi8uLi9pbmNsdWRlL2MrKy8zLjEuMS9iaXRzL3N0bF9hbGxvYy5oIiAyIDMKIyAxICIvdXNy L2N5Z251cy9iaW4vLi4vaW5jbHVkZS9jKysvMy4xLjEvYml0cy9zdGxfdGhyZWFkcy5oIiAxIDMK IyA1NCAiL3Vzci9jeWdudXMvYmluLy4uL2luY2x1ZGUvYysrLzMuMS4xL2JpdHMvc3RsX3RocmVh ZHMuaCIgMwpuYW1lc3BhY2Ugc3RkCnsKCgoKCiAgc3RydWN0IF9SZWZjb3VudF9CYXNlCiAgewoK ICAgIHR5cGVkZWYgc2l6ZV90IF9SQ190OwoKCiAgICB2b2xhdGlsZSBfUkNfdCBfTV9yZWZfY291 bnQ7CgoKICAgIF9fZ3RocmVhZF9tdXRleF90IF9NX3JlZl9jb3VudF9sb2NrOwoKICAgIF9SZWZj b3VudF9CYXNlKF9SQ190IF9fbikgOiBfTV9yZWZfY291bnQoX19uKQogICAgewoKICAgICAgX19n dGhyZWFkX211dGV4X3QgX190bXAgPSB7MCwgMCwgMCwgUFRIUkVBRF9NVVRFWF9USU1FRF9OUCwg eyAwLCAwIH19OwogICAgICBfTV9yZWZfY291bnRfbG9jayA9IF9fdG1wOwoKCgoKCiAgICB9Cgog ICAgdm9pZAogICAgX01faW5jcigpCiAgICB7CiAgICAgIF9fZ3RocmVhZF9tdXRleF9sb2NrKCZf TV9yZWZfY291bnRfbG9jayk7CiAgICAgICsrX01fcmVmX2NvdW50OwogICAgICBfX2d0aHJlYWRf bXV0ZXhfdW5sb2NrKCZfTV9yZWZfY291bnRfbG9jayk7CiAgICB9CgogICAgX1JDX3QKICAgIF9N X2RlY3IoKQogICAgewogICAgICBfX2d0aHJlYWRfbXV0ZXhfbG9jaygmX01fcmVmX2NvdW50X2xv Y2spOwogICAgICB2b2xhdGlsZSBfUkNfdCBfX3RtcCA9IC0tX01fcmVmX2NvdW50OwogICAgICBf X2d0aHJlYWRfbXV0ZXhfdW5sb2NrKCZfTV9yZWZfY291bnRfbG9jayk7CiAgICAgIHJldHVybiBf X3RtcDsKICAgIH0KICB9OwojIDEwOSAiL3Vzci9jeWdudXMvYmluLy4uL2luY2x1ZGUvYysrLzMu MS4xL2JpdHMvc3RsX3RocmVhZHMuaCIgMwogIHRlbXBsYXRlPGludCBfX2R1bW15PgogICAgc3Ry dWN0IF9Td2FwX2xvY2tfc3RydWN0CiAgICB7IHN0YXRpYyBfX2d0aHJlYWRfbXV0ZXhfdCBfU19z d2FwX2xvY2s7IH07CgogIHRlbXBsYXRlPGludCBfX2R1bW15PgogICAgX19ndGhyZWFkX211dGV4 X3QKICAgIF9Td2FwX2xvY2tfc3RydWN0PF9fZHVtbXk+OjpfU19zd2FwX2xvY2sgPSB7MCwgMCwg MCwgUFRIUkVBRF9NVVRFWF9USU1FRF9OUCwgeyAwLCAwIH19OwoKCgogIGlubGluZSB1bnNpZ25l ZCBsb25nCiAgX0F0b21pY19zd2FwKHVuc2lnbmVkIGxvbmcgKiBfX3AsIHVuc2lnbmVkIGxvbmcg X19xKQogIHsKICAgIF9fZ3RocmVhZF9tdXRleF9sb2NrKCZfU3dhcF9sb2NrX3N0cnVjdDwwPjo6 X1Nfc3dhcF9sb2NrKTsKICAgIHVuc2lnbmVkIGxvbmcgX19yZXN1bHQgPSAqX19wOwogICAgKl9f cCA9IF9fcTsKICAgIF9fZ3RocmVhZF9tdXRleF91bmxvY2soJl9Td2FwX2xvY2tfc3RydWN0PDA+ OjpfU19zd2FwX2xvY2spOwogICAgcmV0dXJuIF9fcmVzdWx0OwogIH0KIyAxNTEgIi91c3IvY3ln bnVzL2Jpbi8uLi9pbmNsdWRlL2MrKy8zLjEuMS9iaXRzL3N0bF90aHJlYWRzLmgiIDMKICBzdHJ1 Y3QgX1NUTF9tdXRleF9sb2NrCiAgewoKCgoKCiAgICBfX2d0aHJlYWRfbXV0ZXhfdCBfTV9sb2Nr OwoKICAgIHZvaWQKICAgIF9NX2luaXRpYWxpemUoKQogICAgewojIDE4NCAiL3Vzci9jeWdudXMv YmluLy4uL2luY2x1ZGUvYysrLzMuMS4xL2JpdHMvc3RsX3RocmVhZHMuaCIgMwogICAgfQoKICAg IHZvaWQKICAgIF9NX2FjcXVpcmVfbG9jaygpCiAgICB7CgoKCiAgICAgIF9fZ3RocmVhZF9tdXRl eF9sb2NrKCZfTV9sb2NrKTsKICAgIH0KCiAgICB2b2lkCiAgICBfTV9yZWxlYXNlX2xvY2soKQog ICAgewoKCgogICAgICBfX2d0aHJlYWRfbXV0ZXhfdW5sb2NrKCZfTV9sb2NrKTsKICAgIH0KICB9 OwojIDIyMCAiL3Vzci9jeWdudXMvYmluLy4uL2luY2x1ZGUvYysrLzMuMS4xL2JpdHMvc3RsX3Ro cmVhZHMuaCIgMwogIHN0cnVjdCBfU1RMX2F1dG9fbG9jawogIHsKICAgIF9TVExfbXV0ZXhfbG9j ayYgX01fbG9jazsKCiAgICBfU1RMX2F1dG9fbG9jayhfU1RMX211dGV4X2xvY2smIF9fbG9jaykg OiBfTV9sb2NrKF9fbG9jaykKICAgIHsgX01fbG9jay5fTV9hY3F1aXJlX2xvY2soKTsgfQoKICAg IH5fU1RMX2F1dG9fbG9jaygpIHsgX01fbG9jay5fTV9yZWxlYXNlX2xvY2soKTsgfQoKICBwcml2 YXRlOgogICAgdm9pZCBvcGVyYXRvcj0oY29uc3QgX1NUTF9hdXRvX2xvY2smKTsKICAgIF9TVExf YXV0b19sb2NrKGNvbnN0IF9TVExfYXV0b19sb2NrJik7CiAgfTsKCn0KIyA4NyAiL3Vzci9jeWdu dXMvYmluLy4uL2luY2x1ZGUvYysrLzMuMS4xL2JpdHMvc3RsX2FsbG9jLmgiIDIgMwoKbmFtZXNw YWNlIHN0ZAp7CiMgOTggIi91c3IvY3lnbnVzL2Jpbi8uLi9pbmNsdWRlL2MrKy8zLjEuMS9iaXRz L3N0bF9hbGxvYy5oIiAzCiAgY2xhc3MgX19uZXdfYWxsb2MKICB7CiAgcHVibGljOgogICAgc3Rh dGljIHZvaWQqCiAgICBhbGxvY2F0ZShzaXplX3QgX19uKQogICAgeyByZXR1cm4gOjpvcGVyYXRv ciBuZXcoX19uKTsgfQoKICAgIHN0YXRpYyB2b2lkCiAgICBkZWFsbG9jYXRlKHZvaWQqIF9fcCwg c2l6ZV90KQogICAgeyA6Om9wZXJhdG9yIGRlbGV0ZShfX3ApOyB9CiAgfTsKIyAxMjEgIi91c3Iv Y3lnbnVzL2Jpbi8uLi9pbmNsdWRlL2MrKy8zLjEuMS9iaXRzL3N0bF9hbGxvYy5oIiAzCiAgdGVt cGxhdGUgPGludCBfX2luc3Q+CiAgICBjbGFzcyBfX21hbGxvY19hbGxvY190ZW1wbGF0ZQogICAg ewogICAgcHJpdmF0ZToKICAgICAgc3RhdGljIHZvaWQqIF9TX29vbV9tYWxsb2Moc2l6ZV90KTsK ICAgICAgc3RhdGljIHZvaWQqIF9TX29vbV9yZWFsbG9jKHZvaWQqLCBzaXplX3QpOwogICAgICBz dGF0aWMgdm9pZCAoKiBfX21hbGxvY19hbGxvY19vb21faGFuZGxlcikoKTsKCiAgICBwdWJsaWM6 CiAgICAgIHN0YXRpYyB2b2lkKgogICAgICBhbGxvY2F0ZShzaXplX3QgX19uKQogICAgICB7CiAg ICAgICAgdm9pZCogX19yZXN1bHQgPSBtYWxsb2MoX19uKTsKICAgICAgICBpZiAoMCA9PSBfX3Jl c3VsdCkgX19yZXN1bHQgPSBfU19vb21fbWFsbG9jKF9fbik7CiAgICAgICAgcmV0dXJuIF9fcmVz dWx0OwogICAgICB9CgogICAgICBzdGF0aWMgdm9pZAogICAgICBkZWFsbG9jYXRlKHZvaWQqIF9f cCwgc2l6ZV90ICkKICAgICAgeyBmcmVlKF9fcCk7IH0KCiAgICAgIHN0YXRpYyB2b2lkKgogICAg ICByZWFsbG9jYXRlKHZvaWQqIF9fcCwgc2l6ZV90ICwgc2l6ZV90IF9fbmV3X3N6KQogICAgICB7 CiAgICAgICAgdm9pZCogX19yZXN1bHQgPSByZWFsbG9jKF9fcCwgX19uZXdfc3opOwogICAgICAg IGlmICgwID09IF9fcmVzdWx0KSBfX3Jlc3VsdCA9IF9TX29vbV9yZWFsbG9jKF9fcCwgX19uZXdf c3opOwogICAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgICAgfQoKICAgICAgc3RhdGljIHZvaWQg KCogX19zZXRfbWFsbG9jX2hhbmRsZXIodm9pZCAoKl9fZikoKSkpKCkKICAgICAgewogICAgICAg IHZvaWQgKCogX19vbGQpKCkgPSBfX21hbGxvY19hbGxvY19vb21faGFuZGxlcjsKICAgICAgICBf X21hbGxvY19hbGxvY19vb21faGFuZGxlciA9IF9fZjsKICAgICAgICByZXR1cm4oX19vbGQpOwog ICAgICB9CiAgICB9OwoKCiAgdGVtcGxhdGUgPGludCBfX2luc3Q+CiAgICB2b2lkICgqIF9fbWFs bG9jX2FsbG9jX3RlbXBsYXRlPF9faW5zdD46Ol9fbWFsbG9jX2FsbG9jX29vbV9oYW5kbGVyKSgp ID0gMDsKCiAgdGVtcGxhdGUgPGludCBfX2luc3Q+CiAgICB2b2lkKgogICAgX19tYWxsb2NfYWxs b2NfdGVtcGxhdGU8X19pbnN0Pjo6X1Nfb29tX21hbGxvYyhzaXplX3QgX19uKQogICAgewogICAg ICB2b2lkICgqIF9fbXlfbWFsbG9jX2hhbmRsZXIpKCk7CiAgICAgIHZvaWQqIF9fcmVzdWx0OwoK ICAgICAgZm9yICg7OykKICAgICAgICB7CiAgICAgICAgICBfX215X21hbGxvY19oYW5kbGVyID0g X19tYWxsb2NfYWxsb2Nfb29tX2hhbmRsZXI7CiAgICAgICAgICBpZiAoMCA9PSBfX215X21hbGxv Y19oYW5kbGVyKQogICAgICAgICAgICBzdGQ6Ol9fdGhyb3dfYmFkX2FsbG9jKCk7CiAgICAgICAg ICAoKl9fbXlfbWFsbG9jX2hhbmRsZXIpKCk7CiAgICAgICAgICBfX3Jlc3VsdCA9IG1hbGxvYyhf X24pOwogICAgICAgICAgaWYgKF9fcmVzdWx0KQogICAgICAgICAgICByZXR1cm4oX19yZXN1bHQp OwogICAgICAgIH0KICAgIH0KCiAgdGVtcGxhdGUgPGludCBfX2luc3Q+CiAgICB2b2lkKgogICAg X19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0Pjo6X1Nfb29tX3JlYWxsb2Modm9pZCogX19w LCBzaXplX3QgX19uKQogICAgewogICAgICB2b2lkICgqIF9fbXlfbWFsbG9jX2hhbmRsZXIpKCk7 CiAgICAgIHZvaWQqIF9fcmVzdWx0OwoKICAgICAgZm9yICg7OykKICAgICAgICB7CiAgICAgICAg ICBfX215X21hbGxvY19oYW5kbGVyID0gX19tYWxsb2NfYWxsb2Nfb29tX2hhbmRsZXI7CiAgICAg ICAgICBpZiAoMCA9PSBfX215X21hbGxvY19oYW5kbGVyKQogICAgICAgICAgICBzdGQ6Ol9fdGhy b3dfYmFkX2FsbG9jKCk7CiAgICAgICAgICAoKl9fbXlfbWFsbG9jX2hhbmRsZXIpKCk7CiAgICAg ICAgICBfX3Jlc3VsdCA9IHJlYWxsb2MoX19wLCBfX24pOwogICAgICAgICAgaWYgKF9fcmVzdWx0 KQogICAgICAgICAgICByZXR1cm4oX19yZXN1bHQpOwogICAgICAgIH0KICAgIH0KCgoKCgoKICB0 eXBlZGVmIF9fbmV3X2FsbG9jIF9fbWVtX2ludGVyZmFjZTsKIyAyMTkgIi91c3IvY3lnbnVzL2Jp bi8uLi9pbmNsdWRlL2MrKy8zLjEuMS9iaXRzL3N0bF9hbGxvYy5oIiAzCiAgdGVtcGxhdGU8Y2xh c3MgX1RwLCBjbGFzcyBfQWxsb2M+CiAgY2xhc3MgX19zaW1wbGVfYWxsb2MKICB7CiAgcHVibGlj OgogICAgc3RhdGljIF9UcCogYWxsb2NhdGUoc2l6ZV90IF9fbikKICAgIHsgcmV0dXJuIDAgPT0g X19uID8gMCA6IChfVHAqKSBfQWxsb2M6OmFsbG9jYXRlKF9fbiAqIHNpemVvZiAoX1RwKSk7IH0K CiAgICBzdGF0aWMgX1RwKiBhbGxvY2F0ZSgpCiAgICB7IHJldHVybiAoX1RwKikgX0FsbG9jOjph bGxvY2F0ZShzaXplb2YgKF9UcCkpOyB9CgogICAgc3RhdGljIHZvaWQgZGVhbGxvY2F0ZShfVHAq IF9fcCwgc2l6ZV90IF9fbikKICAgIHsgaWYgKDAgIT0gX19uKSBfQWxsb2M6OmRlYWxsb2NhdGUo X19wLCBfX24gKiBzaXplb2YgKF9UcCkpOyB9CgogICAgc3RhdGljIHZvaWQgZGVhbGxvY2F0ZShf VHAqIF9fcCkKICAgIHsgX0FsbG9jOjpkZWFsbG9jYXRlKF9fcCwgc2l6ZW9mIChfVHApKTsgfQog IH07CiMgMjUxICIvdXNyL2N5Z251cy9iaW4vLi4vaW5jbHVkZS9jKysvMy4xLjEvYml0cy9zdGxf YWxsb2MuaCIgMwogIHRlbXBsYXRlIDxjbGFzcyBfQWxsb2M+CiAgY2xhc3MgX19kZWJ1Z19hbGxv YwogIHsKICBwcml2YXRlOgogICAgZW51bSB7X1NfZXh0cmEgPSA4fTsKCgogIHB1YmxpYzoKCiAg ICBzdGF0aWMgdm9pZCogYWxsb2NhdGUoc2l6ZV90IF9fbikKICAgIHsKICAgICAgY2hhciogX19y ZXN1bHQgPSAoY2hhciopX0FsbG9jOjphbGxvY2F0ZShfX24gKyAoaW50KSBfU19leHRyYSk7CiAg ICAgICooc2l6ZV90KilfX3Jlc3VsdCA9IF9fbjsKICAgICAgcmV0dXJuIF9fcmVzdWx0ICsgKGlu dCkgX1NfZXh0cmE7CiAgICB9CgogICAgc3RhdGljIHZvaWQgZGVhbGxvY2F0ZSh2b2lkKiBfX3As IHNpemVfdCBfX24pCiAgICB7CiAgICAgIGNoYXIqIF9fcmVhbF9wID0gKGNoYXIqKV9fcCAtIChp bnQpIF9TX2V4dHJhOwogICAgICAoc3RhdGljX2Nhc3Q8dm9pZD4gKCgqKHNpemVfdCopX19yZWFs X3AgPT0gX19uKSA/IDAgOiAoX19hc3NlcnRfZmFpbCAoIiooc2l6ZV90KilfX3JlYWxfcCA9PSBf X24iLCAiL3Vzci9jeWdudXMvYmluLy4uL2luY2x1ZGUvYysrLzMuMS4xL2JpdHMvc3RsX2FsbG9j LmgiLCAyNzAsIF9fUFJFVFRZX0ZVTkNUSU9OX18pLCAwKSkpOwogICAgICBfQWxsb2M6OmRlYWxs b2NhdGUoX19yZWFsX3AsIF9fbiArIChpbnQpIF9TX2V4dHJhKTsKICAgIH0KCiAgICBzdGF0aWMg dm9pZCogcmVhbGxvY2F0ZSh2b2lkKiBfX3AsIHNpemVfdCBfX29sZF9zeiwgc2l6ZV90IF9fbmV3 X3N6KQogICAgewogICAgICBjaGFyKiBfX3JlYWxfcCA9IChjaGFyKilfX3AgLSAoaW50KSBfU19l eHRyYTsKICAgICAgKHN0YXRpY19jYXN0PHZvaWQ+ICgoKihzaXplX3QqKV9fcmVhbF9wID09IF9f b2xkX3N6KSA/IDAgOiAoX19hc3NlcnRfZmFpbCAoIiooc2l6ZV90KilfX3JlYWxfcCA9PSBfX29s ZF9zeiIsICIvdXNyL2N5Z251cy9iaW4vLi4vaW5jbHVkZS9jKysvMy4xLjEvYml0cy9zdGxfYWxs b2MuaCIsIDI3NywgX19QUkVUVFlfRlVOQ1RJT05fXyksIDApKSk7CiAgICAgIGNoYXIqIF9fcmVz dWx0ID0gKGNoYXIqKQogICAgICAgIF9BbGxvYzo6cmVhbGxvY2F0ZShfX3JlYWxfcCwgX19vbGRf c3ogKyAoaW50KSBfU19leHRyYSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IF9fbmV3X3N6ICsgKGludCkgX1NfZXh0cmEpOwogICAgICAqKHNpemVfdCopX19yZXN1bHQgPSBf X25ld19zejsKICAgICAgcmV0dXJuIF9fcmVzdWx0ICsgKGludCkgX1NfZXh0cmE7CiAgICB9CiAg fTsKIyAzMjQgIi91c3IvY3lnbnVzL2Jpbi8uLi9pbmNsdWRlL2MrKy8zLjEuMS9iaXRzL3N0bF9h bGxvYy5oIiAzCnRlbXBsYXRlPGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0PgogIGNsYXNzIF9f ZGVmYXVsdF9hbGxvY190ZW1wbGF0ZQogIHsKICBwcml2YXRlOgogICAgZW51bSB7X0FMSUdOID0g OH07CiAgICBlbnVtIHtfTUFYX0JZVEVTID0gMTI4fTsKICAgIGVudW0ge19ORlJFRUxJU1RTID0g X01BWF9CWVRFUyAvIF9BTElHTn07CgogICAgdW5pb24gX09iagogICAgewogICAgICB1bmlvbiBf T2JqKiBfTV9mcmVlX2xpc3RfbGluazsKICAgICAgY2hhciBfTV9jbGllbnRfZGF0YVsxXTsKICAg IH07CgogICAgc3RhdGljIF9PYmoqIHZvbGF0aWxlIF9TX2ZyZWVfbGlzdFtfTkZSRUVMSVNUU107 CgoKICAgIHN0YXRpYyBjaGFyKiBfU19zdGFydF9mcmVlOwogICAgc3RhdGljIGNoYXIqIF9TX2Vu ZF9mcmVlOwogICAgc3RhdGljIHNpemVfdCBfU19oZWFwX3NpemU7CgogICAgc3RhdGljIF9TVExf bXV0ZXhfbG9jayBfU19ub2RlX2FsbG9jYXRvcl9sb2NrOwoKICAgIHN0YXRpYyBzaXplX3QKICAg IF9TX3JvdW5kX3VwKHNpemVfdCBfX2J5dGVzKQogICAgeyByZXR1cm4gKCgoX19ieXRlcykgKyAo c2l6ZV90KSBfQUxJR04tMSkgJiB+KChzaXplX3QpIF9BTElHTiAtIDEpKTsgfQoKICAgIHN0YXRp YyBzaXplX3QKICAgIF9TX2ZyZWVsaXN0X2luZGV4KHNpemVfdCBfX2J5dGVzKQogICAgeyByZXR1 cm4gKCgoX19ieXRlcykgKyAoc2l6ZV90KV9BTElHTi0xKS8oc2l6ZV90KV9BTElHTiAtIDEpOyB9 CgoKCiAgICBzdGF0aWMgdm9pZCoKICAgIF9TX3JlZmlsbChzaXplX3QgX19uKTsKCgoKICAgIHN0 YXRpYyBjaGFyKgogICAgX1NfY2h1bmtfYWxsb2Moc2l6ZV90IF9fc2l6ZSwgaW50JiBfX25vYmpz KTsKCgoKICAgIGNsYXNzIF9Mb2NrCiAgICB7CiAgICBwdWJsaWM6CiAgICAgIF9Mb2NrKCkgeyBp ZiAoX190aHJlYWRzKSBfU19ub2RlX2FsbG9jYXRvcl9sb2NrLl9NX2FjcXVpcmVfbG9jaygpOyB9 CiAgICAgIH5fTG9jaygpIHsgaWYgKF9fdGhyZWFkcykgX1Nfbm9kZV9hbGxvY2F0b3JfbG9jay5f TV9yZWxlYXNlX2xvY2soKTsgfQogICAgfSBfX2F0dHJpYnV0ZV9fICgoX191bnVzZWRfXykpOwog ICAgZnJpZW5kIGNsYXNzIF9Mb2NrOwoKICBwdWJsaWM6CgogICAgc3RhdGljIHZvaWQqCiAgICBh bGxvY2F0ZShzaXplX3QgX19uKQogICAgewogICAgICB2b2lkKiBfX3JldCA9IDA7CgogICAgICBp ZiAoX19uID4gKHNpemVfdCkgX01BWF9CWVRFUykKICAgICAgICBfX3JldCA9IF9fbWVtX2ludGVy ZmFjZTo6YWxsb2NhdGUoX19uKTsKICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgIF9PYmoq IHZvbGF0aWxlKiBfX215X2ZyZWVfbGlzdCA9IF9TX2ZyZWVfbGlzdAogICAgICAgICAgICArIF9T X2ZyZWVsaXN0X2luZGV4KF9fbik7CgoKCiAgICAgICAgICBfTG9jayBfX2xvY2tfaW5zdGFuY2U7 CiAgICAgICAgICBfT2JqKiBfX3Jlc3RyaWN0X18gX19yZXN1bHQgPSAqX19teV9mcmVlX2xpc3Q7 CiAgICAgICAgICBpZiAoX19yZXN1bHQgPT0gMCkKICAgICAgICAgICAgX19yZXQgPSBfU19yZWZp bGwoX1Nfcm91bmRfdXAoX19uKSk7CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIHsKICAgICAg ICAgICAgICAqX19teV9mcmVlX2xpc3QgPSBfX3Jlc3VsdCAtPiBfTV9mcmVlX2xpc3RfbGluazsK ICAgICAgICAgICAgICBfX3JldCA9IF9fcmVzdWx0OwogICAgICAgICAgICB9CiAgICAgICAgfQog ICAgICByZXR1cm4gX19yZXQ7CiAgICB9OwoKCiAgICBzdGF0aWMgdm9pZAogICAgZGVhbGxvY2F0 ZSh2b2lkKiBfX3AsIHNpemVfdCBfX24pCiAgICB7CiAgICAgIGlmIChfX24gPiAoc2l6ZV90KSBf TUFYX0JZVEVTKQogICAgICAgIF9fbWVtX2ludGVyZmFjZTo6ZGVhbGxvY2F0ZShfX3AsIF9fbik7 CiAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICBfT2JqKiB2b2xhdGlsZSogX19teV9mcmVl X2xpc3QKICAgICAgICAgICAgPSBfU19mcmVlX2xpc3QgKyBfU19mcmVlbGlzdF9pbmRleChfX24p OwogICAgICAgICAgX09iaiogX19xID0gKF9PYmoqKV9fcDsKCgoKICAgICAgICAgIF9Mb2NrIF9f bG9ja19pbnN0YW5jZTsKICAgICAgICAgIF9fcSAtPiBfTV9mcmVlX2xpc3RfbGluayA9ICpfX215 X2ZyZWVfbGlzdDsKICAgICAgICAgICpfX215X2ZyZWVfbGlzdCA9IF9fcTsKICAgICAgICB9CiAg ICB9CgogICAgc3RhdGljIHZvaWQqCiAgICByZWFsbG9jYXRlKHZvaWQqIF9fcCwgc2l6ZV90IF9f b2xkX3N6LCBzaXplX3QgX19uZXdfc3opOwogIH07CgoKICB0ZW1wbGF0ZTxib29sIF9fdGhyZWFk cywgaW50IF9faW5zdD4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj09KGNvbnN0IF9fZGVm YXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD4mLAogICAgICAgICAgICAgICBj b25zdCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+JikKICAgIHsg cmV0dXJuIHRydWU7IH0KCiAgdGVtcGxhdGU8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+CiAg ICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3IhPShjb25zdCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxh dGU8X190aHJlYWRzLCBfX2luc3Q+JiwKICAgICAgICAgICAgICAgY29uc3QgX19kZWZhdWx0X2Fs bG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0PiYpCiAgICB7IHJldHVybiBmYWxzZTsgfQoK CgoKCiAgdGVtcGxhdGU8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+CiAgICBjaGFyKgogICAg X19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0Pjo6X1NfY2h1bmtfYWxs b2Moc2l6ZV90IF9fc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGludCYgX19ub2JqcykKICAgIHsKICAgICAgY2hhciog X19yZXN1bHQ7CiAgICAgIHNpemVfdCBfX3RvdGFsX2J5dGVzID0gX19zaXplICogX19ub2JqczsK ICAgICAgc2l6ZV90IF9fYnl0ZXNfbGVmdCA9IF9TX2VuZF9mcmVlIC0gX1Nfc3RhcnRfZnJlZTsK CiAgICAgIGlmIChfX2J5dGVzX2xlZnQgPj0gX190b3RhbF9ieXRlcykKICAgICAgewogICAgICAg IF9fcmVzdWx0ID0gX1Nfc3RhcnRfZnJlZTsKICAgICAgICBfU19zdGFydF9mcmVlICs9IF9fdG90 YWxfYnl0ZXM7CiAgICAgICAgcmV0dXJuKF9fcmVzdWx0KTsKICAgICAgfQogICAgICBlbHNlIGlm IChfX2J5dGVzX2xlZnQgPj0gX19zaXplKQogICAgICAgIHsKICAgICAgICAgIF9fbm9ianMgPSAo aW50KShfX2J5dGVzX2xlZnQvX19zaXplKTsKICAgICAgICAgIF9fdG90YWxfYnl0ZXMgPSBfX3Np emUgKiBfX25vYmpzOwogICAgICAgICAgX19yZXN1bHQgPSBfU19zdGFydF9mcmVlOwogICAgICAg ICAgX1Nfc3RhcnRfZnJlZSArPSBfX3RvdGFsX2J5dGVzOwogICAgICAgICAgcmV0dXJuKF9fcmVz dWx0KTsKICAgICAgICB9CiAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICBzaXplX3QgX19i eXRlc190b19nZXQgPQogICAgICAgICAgICAyICogX190b3RhbF9ieXRlcyArIF9TX3JvdW5kX3Vw KF9TX2hlYXBfc2l6ZSA+PiA0KTsKCiAgICAgICAgICBpZiAoX19ieXRlc19sZWZ0ID4gMCkKICAg ICAgICAgICAgewogICAgICAgICAgICAgIF9PYmoqIHZvbGF0aWxlKiBfX215X2ZyZWVfbGlzdCA9 CiAgICAgICAgICAgICAgICBfU19mcmVlX2xpc3QgKyBfU19mcmVlbGlzdF9pbmRleChfX2J5dGVz X2xlZnQpOwoKICAgICAgICAgICAgICAoKF9PYmoqKV9TX3N0YXJ0X2ZyZWUpIC0+IF9NX2ZyZWVf bGlzdF9saW5rID0gKl9fbXlfZnJlZV9saXN0OwogICAgICAgICAgICAgICpfX215X2ZyZWVfbGlz dCA9IChfT2JqKilfU19zdGFydF9mcmVlOwogICAgICAgICAgICB9CiAgICAgICAgICBfU19zdGFy dF9mcmVlID0gKGNoYXIqKSBfX21lbV9pbnRlcmZhY2U6OmFsbG9jYXRlKF9fYnl0ZXNfdG9fZ2V0 KTsKICAgICAgICAgIGlmICgwID09IF9TX3N0YXJ0X2ZyZWUpCiAgICAgICAgICAgIHsKICAgICAg ICAgICAgICBzaXplX3QgX19pOwogICAgICAgICAgICAgIF9PYmoqIHZvbGF0aWxlKiBfX215X2Zy ZWVfbGlzdDsKICAgICAgICAgICAgICBfT2JqKiBfX3A7CgoKCiAgICAgICAgICAgICAgX19pID0g X19zaXplOwogICAgICAgICAgICAgIGZvciAoOyBfX2kgPD0gKHNpemVfdCkgX01BWF9CWVRFUzsg X19pICs9IChzaXplX3QpIF9BTElHTikKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg ICAgX19teV9mcmVlX2xpc3QgPSBfU19mcmVlX2xpc3QgKyBfU19mcmVlbGlzdF9pbmRleChfX2kp OwogICAgICAgICAgICAgICAgICBfX3AgPSAqX19teV9mcmVlX2xpc3Q7CiAgICAgICAgICAgICAg ICAgIGlmICgwICE9IF9fcCkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAg ICAgICAqX19teV9mcmVlX2xpc3QgPSBfX3AgLT4gX01fZnJlZV9saXN0X2xpbms7CiAgICAgICAg ICAgICAgICAgICAgICBfU19zdGFydF9mcmVlID0gKGNoYXIqKV9fcDsKICAgICAgICAgICAgICAg ICAgICAgIF9TX2VuZF9mcmVlID0gX1Nfc3RhcnRfZnJlZSArIF9faTsKICAgICAgICAgICAgICAg ICAgICAgIHJldHVybihfU19jaHVua19hbGxvYyhfX3NpemUsIF9fbm9ianMpKTsKCgogICAgICAg ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBfU19lbmRfZnJl ZSA9IDA7CiAgICAgICAgICAgICAgX1Nfc3RhcnRfZnJlZSA9IChjaGFyKilfX21lbV9pbnRlcmZh Y2U6OmFsbG9jYXRlKF9fYnl0ZXNfdG9fZ2V0KTsKCgogICAgICAgICAgICB9CiAgICAgICAgICBf U19oZWFwX3NpemUgKz0gX19ieXRlc190b19nZXQ7CiAgICAgICAgICBfU19lbmRfZnJlZSA9IF9T X3N0YXJ0X2ZyZWUgKyBfX2J5dGVzX3RvX2dldDsKICAgICAgICAgIHJldHVybihfU19jaHVua19h bGxvYyhfX3NpemUsIF9fbm9ianMpKTsKICAgICAgICB9CiAgICB9CgoKCgoKICB0ZW1wbGF0ZTxi b29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4KICAgIHZvaWQqCiAgICBfX2RlZmF1bHRfYWxsb2Nf dGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+OjpfU19yZWZpbGwoc2l6ZV90IF9fbikKICAgIHsK ICAgICAgaW50IF9fbm9ianMgPSAyMDsKICAgICAgY2hhciogX19jaHVuayA9IF9TX2NodW5rX2Fs bG9jKF9fbiwgX19ub2Jqcyk7CiAgICAgIF9PYmoqIHZvbGF0aWxlKiBfX215X2ZyZWVfbGlzdDsK ICAgICAgX09iaiogX19yZXN1bHQ7CiAgICAgIF9PYmoqIF9fY3VycmVudF9vYmo7CiAgICAgIF9P YmoqIF9fbmV4dF9vYmo7CiAgICAgIGludCBfX2k7CgogICAgICBpZiAoMSA9PSBfX25vYmpzKSBy ZXR1cm4oX19jaHVuayk7CiAgICAgIF9fbXlfZnJlZV9saXN0ID0gX1NfZnJlZV9saXN0ICsgX1Nf ZnJlZWxpc3RfaW5kZXgoX19uKTsKCgogICAgICBfX3Jlc3VsdCA9IChfT2JqKilfX2NodW5rOwog ICAgICAqX19teV9mcmVlX2xpc3QgPSBfX25leHRfb2JqID0gKF9PYmoqKShfX2NodW5rICsgX19u KTsKICAgICAgZm9yIChfX2kgPSAxOyA7IF9faSsrKSB7CiAgICAgICAgX19jdXJyZW50X29iaiA9 IF9fbmV4dF9vYmo7CiAgICAgICAgX19uZXh0X29iaiA9IChfT2JqKikoKGNoYXIqKV9fbmV4dF9v YmogKyBfX24pOwogICAgICAgIGlmIChfX25vYmpzIC0gMSA9PSBfX2kpIHsKICAgICAgICAgIF9f Y3VycmVudF9vYmogLT4gX01fZnJlZV9saXN0X2xpbmsgPSAwOwogICAgICAgICAgYnJlYWs7CiAg ICAgICAgfSBlbHNlIHsKICAgICAgICAgIF9fY3VycmVudF9vYmogLT4gX01fZnJlZV9saXN0X2xp bmsgPSBfX25leHRfb2JqOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4oX19yZXN1bHQp OwogICAgfQoKCiAgdGVtcGxhdGU8Ym9vbCB0aHJlYWRzLCBpbnQgaW5zdD4KICAgIHZvaWQqCiAg ICBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8dGhyZWFkcywgaW5zdD46OnJlYWxsb2NhdGUodm9p ZCogX19wLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHNpemVfdCBfX29sZF9zeiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19uZXdfc3opCiAgICB7CiAgICAgIHZvaWQq IF9fcmVzdWx0OwogICAgICBzaXplX3QgX19jb3B5X3N6OwoKICAgICAgaWYgKF9fb2xkX3N6ID4g KHNpemVfdCkgX01BWF9CWVRFUyAmJiBfX25ld19zeiA+IChzaXplX3QpIF9NQVhfQllURVMpIHsK ICAgICAgICByZXR1cm4ocmVhbGxvYyhfX3AsIF9fbmV3X3N6KSk7CiAgICAgIH0KICAgICAgaWYg KF9TX3JvdW5kX3VwKF9fb2xkX3N6KSA9PSBfU19yb3VuZF91cChfX25ld19zeikpIHJldHVybihf X3ApOwogICAgICBfX3Jlc3VsdCA9IGFsbG9jYXRlKF9fbmV3X3N6KTsKICAgICAgX19jb3B5X3N6 ID0gX19uZXdfc3ogPiBfX29sZF9zej8gX19vbGRfc3ogOiBfX25ld19zejsKICAgICAgbWVtY3B5 KF9fcmVzdWx0LCBfX3AsIF9fY29weV9zeik7CiAgICAgIGRlYWxsb2NhdGUoX19wLCBfX29sZF9z eik7CiAgICAgIHJldHVybihfX3Jlc3VsdCk7CiAgICB9CgogIHRlbXBsYXRlPGJvb2wgX190aHJl YWRzLCBpbnQgX19pbnN0PgogIF9TVExfbXV0ZXhfbG9jawogIF9fZGVmYXVsdF9hbGxvY190ZW1w bGF0ZTxfX3RocmVhZHMsIF9faW5zdD46Ol9TX25vZGVfYWxsb2NhdG9yX2xvY2sKICA9IHsgezAs IDAsIDAsIFBUSFJFQURfTVVURVhfVElNRURfTlAsIHsgMCwgMCB9fSB9OwoKICB0ZW1wbGF0ZTxi b29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4KICBjaGFyKiBfX2RlZmF1bHRfYWxsb2NfdGVtcGxh dGU8X190aHJlYWRzLCBfX2luc3Q+OjpfU19zdGFydF9mcmVlID0gMDsKCiAgdGVtcGxhdGU8Ym9v bCBfX3RocmVhZHMsIGludCBfX2luc3Q+CiAgY2hhciogX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRl PF9fdGhyZWFkcywgX19pbnN0Pjo6X1NfZW5kX2ZyZWUgPSAwOwoKICB0ZW1wbGF0ZTxib29sIF9f dGhyZWFkcywgaW50IF9faW5zdD4KICBzaXplX3QgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9f dGhyZWFkcywgX19pbnN0Pjo6X1NfaGVhcF9zaXplID0gMDsKCiAgdGVtcGxhdGU8Ym9vbCBfX3Ro cmVhZHMsIGludCBfX2luc3Q+CiAgdHlwZW5hbWUgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9f dGhyZWFkcywgX19pbnN0Pjo6X09iaiogdm9sYXRpbGUKICBfX2RlZmF1bHRfYWxsb2NfdGVtcGxh dGU8X190aHJlYWRzLCBfX2luc3Q+OjpfU19mcmVlX2xpc3RbX05GUkVFTElTVFNdOwoKICB0eXBl ZGVmIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTx0cnVlLCAwPiBfX2FsbG9jOwogIHR5cGVkZWYg X19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPGZhbHNlLCAwPiBfX3NpbmdsZV9jbGllbnRfYWxsb2M7 CiMgNjEzICIvdXNyL2N5Z251cy9iaW4vLi4vaW5jbHVkZS9jKysvMy4xLjEvYml0cy9zdGxfYWxs b2MuaCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpjbGFzcyBhbGxvY2F0b3IKewogIHR5cGVkZWYg X19hbGxvYyBfQWxsb2M7CnB1YmxpYzoKICB0eXBlZGVmIHNpemVfdCBzaXplX3R5cGU7CiAgdHlw ZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgX1RwKiBwb2ludGVyOwog IHR5cGVkZWYgY29uc3QgX1RwKiBjb25zdF9wb2ludGVyOwogIHR5cGVkZWYgX1RwJiByZWZlcmVu Y2U7CiAgdHlwZWRlZiBjb25zdCBfVHAmIGNvbnN0X3JlZmVyZW5jZTsKICB0eXBlZGVmIF9UcCB2 YWx1ZV90eXBlOwoKICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwMT4gc3RydWN0IHJlYmluZCB7CiAgICB0 eXBlZGVmIGFsbG9jYXRvcjxfVHAxPiBvdGhlcjsKICB9OwoKICBhbGxvY2F0b3IoKSB0aHJvdygp IHt9CiAgYWxsb2NhdG9yKGNvbnN0IGFsbG9jYXRvciYpIHRocm93KCkge30KICB0ZW1wbGF0ZSA8 Y2xhc3MgX1RwMT4gYWxsb2NhdG9yKGNvbnN0IGFsbG9jYXRvcjxfVHAxPiYpIHRocm93KCkge30K ICB+YWxsb2NhdG9yKCkgdGhyb3coKSB7fQoKICBwb2ludGVyIGFkZHJlc3MocmVmZXJlbmNlIF9f eCkgY29uc3QgeyByZXR1cm4gJl9feDsgfQogIGNvbnN0X3BvaW50ZXIgYWRkcmVzcyhjb25zdF9y ZWZlcmVuY2UgX194KSBjb25zdCB7IHJldHVybiAmX194OyB9CgoKCiAgX1RwKiBhbGxvY2F0ZShz aXplX3R5cGUgX19uLCBjb25zdCB2b2lkKiA9IDApIHsKICAgIHJldHVybiBfX24gIT0gMCA/IHN0 YXRpY19jYXN0PF9UcCo+KF9BbGxvYzo6YWxsb2NhdGUoX19uICogc2l6ZW9mKF9UcCkpKQogICAg ICAgICAgICAgICAgICAgIDogMDsKICB9CgoKICB2b2lkIGRlYWxsb2NhdGUocG9pbnRlciBfX3As IHNpemVfdHlwZSBfX24pCiAgICB7IF9BbGxvYzo6ZGVhbGxvY2F0ZShfX3AsIF9fbiAqIHNpemVv ZihfVHApKTsgfQoKICBzaXplX3R5cGUgbWF4X3NpemUoKSBjb25zdCB0aHJvdygpCiAgICB7IHJl dHVybiBzaXplX3QoLTEpIC8gc2l6ZW9mKF9UcCk7IH0KCiAgdm9pZCBjb25zdHJ1Y3QocG9pbnRl ciBfX3AsIGNvbnN0IF9UcCYgX192YWwpIHsgbmV3KF9fcCkgX1RwKF9fdmFsKTsgfQogIHZvaWQg ZGVzdHJveShwb2ludGVyIF9fcCkgeyBfX3AtPn5fVHAoKTsgfQp9OwoKdGVtcGxhdGU8PgpjbGFz cyBhbGxvY2F0b3I8dm9pZD4gewpwdWJsaWM6CiAgdHlwZWRlZiBzaXplX3Qgc2l6ZV90eXBlOwog IHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIHZvaWQqIHBvaW50 ZXI7CiAgdHlwZWRlZiBjb25zdCB2b2lkKiBjb25zdF9wb2ludGVyOwogIHR5cGVkZWYgdm9pZCB2 YWx1ZV90eXBlOwoKICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwMT4gc3RydWN0IHJlYmluZCB7CiAgICB0 eXBlZGVmIGFsbG9jYXRvcjxfVHAxPiBvdGhlcjsKICB9Owp9OwoKCnRlbXBsYXRlIDxjbGFzcyBf VDEsIGNsYXNzIF9UMj4KaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBhbGxvY2F0b3I8X1Qx PiYsIGNvbnN0IGFsbG9jYXRvcjxfVDI+JikKewogIHJldHVybiB0cnVlOwp9Cgp0ZW1wbGF0ZSA8 Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CmlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgYWxsb2Nh dG9yPF9UMT4mLCBjb25zdCBhbGxvY2F0b3I8X1QyPiYpCnsKICByZXR1cm4gZmFsc2U7Cn0KIyA2 OTUgIi91c3IvY3lnbnVzL2Jpbi8uLi9pbmNsdWRlL2MrKy8zLjEuMS9iaXRzL3N0bF9hbGxvYy5o IiAzCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4Kc3RydWN0IF9fYWxsb2NhdG9y CnsKICBfQWxsb2MgX191bmRlcmx5aW5nX2FsbG9jOwoKICB0eXBlZGVmIHNpemVfdCBzaXplX3R5 cGU7CiAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgX1RwKiBw b2ludGVyOwogIHR5cGVkZWYgY29uc3QgX1RwKiBjb25zdF9wb2ludGVyOwogIHR5cGVkZWYgX1Rw JiByZWZlcmVuY2U7CiAgdHlwZWRlZiBjb25zdCBfVHAmIGNvbnN0X3JlZmVyZW5jZTsKICB0eXBl ZGVmIF9UcCB2YWx1ZV90eXBlOwoKICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwMT4gc3RydWN0IHJlYmlu ZCB7CiAgICB0eXBlZGVmIF9fYWxsb2NhdG9yPF9UcDEsIF9BbGxvYz4gb3RoZXI7CiAgfTsKCiAg X19hbGxvY2F0b3IoKSB0aHJvdygpIHt9CiAgX19hbGxvY2F0b3IoY29uc3QgX19hbGxvY2F0b3Im IF9fYSkgdGhyb3coKQogICAgOiBfX3VuZGVybHlpbmdfYWxsb2MoX19hLl9fdW5kZXJseWluZ19h bGxvYykge30KICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwMT4KICBfX2FsbG9jYXRvcihjb25zdCBfX2Fs bG9jYXRvcjxfVHAxLCBfQWxsb2M+JiBfX2EpIHRocm93KCkKICAgIDogX191bmRlcmx5aW5nX2Fs bG9jKF9fYS5fX3VuZGVybHlpbmdfYWxsb2MpIHt9CiAgfl9fYWxsb2NhdG9yKCkgdGhyb3coKSB7 fQoKICBwb2ludGVyIGFkZHJlc3MocmVmZXJlbmNlIF9feCkgY29uc3QgeyByZXR1cm4gJl9feDsg fQogIGNvbnN0X3BvaW50ZXIgYWRkcmVzcyhjb25zdF9yZWZlcmVuY2UgX194KSBjb25zdCB7IHJl dHVybiAmX194OyB9CgoKICBfVHAqIGFsbG9jYXRlKHNpemVfdHlwZSBfX24sIGNvbnN0IHZvaWQq ID0gMCkgewogICAgcmV0dXJuIF9fbiAhPSAwCiAgICAgICAgPyBzdGF0aWNfY2FzdDxfVHAqPihf X3VuZGVybHlpbmdfYWxsb2MuYWxsb2NhdGUoX19uICogc2l6ZW9mKF9UcCkpKQogICAgICAgIDog MDsKICB9CgoKICB2b2lkIGRlYWxsb2NhdGUocG9pbnRlciBfX3AsIHNpemVfdHlwZSBfX24pCiAg ICB7IF9fdW5kZXJseWluZ19hbGxvYy5kZWFsbG9jYXRlKF9fcCwgX19uICogc2l6ZW9mKF9UcCkp OyB9CgogIHNpemVfdHlwZSBtYXhfc2l6ZSgpIGNvbnN0IHRocm93KCkKICAgIHsgcmV0dXJuIHNp emVfdCgtMSkgLyBzaXplb2YoX1RwKTsgfQoKICB2b2lkIGNvbnN0cnVjdChwb2ludGVyIF9fcCwg Y29uc3QgX1RwJiBfX3ZhbCkgeyBuZXcoX19wKSBfVHAoX192YWwpOyB9CiAgdm9pZCBkZXN0cm95 KHBvaW50ZXIgX19wKSB7IF9fcC0+fl9UcCgpOyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0FsbG9j PgpjbGFzcyBfX2FsbG9jYXRvcjx2b2lkLCBfQWxsb2M+IHsKICB0eXBlZGVmIHNpemVfdCBzaXpl X3R5cGU7CiAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgdm9p ZCogcG9pbnRlcjsKICB0eXBlZGVmIGNvbnN0IHZvaWQqIGNvbnN0X3BvaW50ZXI7CiAgdHlwZWRl ZiB2b2lkIHZhbHVlX3R5cGU7CgogIHRlbXBsYXRlIDxjbGFzcyBfVHAxPiBzdHJ1Y3QgcmViaW5k IHsKICAgIHR5cGVkZWYgX19hbGxvY2F0b3I8X1RwMSwgX0FsbG9jPiBvdGhlcjsKICB9Owp9OwoK dGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVyYXRvcj09 KGNvbnN0IF9fYWxsb2NhdG9yPF9UcCwgX0FsbG9jPiYgX19hMSwKICAgICAgICAgICAgICAgICAg ICAgICBjb25zdCBfX2FsbG9jYXRvcjxfVHAsIF9BbGxvYz4mIF9fYTIpCnsKICByZXR1cm4gX19h MS5fX3VuZGVybHlpbmdfYWxsb2MgPT0gX19hMi5fX3VuZGVybHlpbmdfYWxsb2M7Cn0KCnRlbXBs YXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25z dCBfX2FsbG9jYXRvcjxfVHAsIF9BbGxvYz4mIF9fYTEsCiAgICAgICAgICAgICAgICAgICAgICAg Y29uc3QgX19hbGxvY2F0b3I8X1RwLCBfQWxsb2M+JiBfX2EyKQp7CiAgcmV0dXJuIF9fYTEuX191 bmRlcmx5aW5nX2FsbG9jICE9IF9fYTIuX191bmRlcmx5aW5nX2FsbG9jOwp9CgoKCgoKCgp0ZW1w bGF0ZSA8aW50IGluc3Q+CmlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgX19tYWxsb2NfYWxs b2NfdGVtcGxhdGU8aW5zdD4mLAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9fbWFsbG9j X2FsbG9jX3RlbXBsYXRlPGluc3Q+JikKewogIHJldHVybiB0cnVlOwp9Cgp0ZW1wbGF0ZSA8aW50 IF9faW5zdD4KaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBfX21hbGxvY19hbGxvY190ZW1w bGF0ZTxfX2luc3Q+JiwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfX21hbGxvY19hbGxv Y190ZW1wbGF0ZTxfX2luc3Q+JikKewogIHJldHVybiBmYWxzZTsKfQoKdGVtcGxhdGUgPGNsYXNz IF9BbGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBfX2RlYnVnX2FsbG9jPF9BbGxv Yz4mLAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9fZGVidWdfYWxsb2M8X0FsbG9jPiYp IHsKICByZXR1cm4gdHJ1ZTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wg b3BlcmF0b3IhPShjb25zdCBfX2RlYnVnX2FsbG9jPF9BbGxvYz4mLAogICAgICAgICAgICAgICAg ICAgICAgIGNvbnN0IF9fZGVidWdfYWxsb2M8X0FsbG9jPiYpIHsKICByZXR1cm4gZmFsc2U7Cn0K IyA4NDAgIi91c3IvY3lnbnVzL2Jpbi8uLi9pbmNsdWRlL2MrKy8zLjEuMS9iaXRzL3N0bF9hbGxv Yy5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvY2F0b3I+CnN0cnVjdCBfQWxs b2NfdHJhaXRzCnsKICBzdGF0aWMgY29uc3QgYm9vbCBfU19pbnN0YW5jZWxlc3MgPSBmYWxzZTsK ICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvY2F0b3I6OnRlbXBsYXRlIHJlYmluZDxfVHA+OjpvdGhl ciBhbGxvY2F0b3JfdHlwZTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvY2F0 b3I+CmNvbnN0IGJvb2wgX0FsbG9jX3RyYWl0czxfVHAsIF9BbGxvY2F0b3I+OjpfU19pbnN0YW5j ZWxlc3M7CgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX1RwMT4Kc3RydWN0IF9BbGxvY190 cmFpdHM8X1RwLCBhbGxvY2F0b3I8X1RwMT4gPgp7CiAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5z dGFuY2VsZXNzID0gdHJ1ZTsKICB0eXBlZGVmIF9fc2ltcGxlX2FsbG9jPF9UcCwgX19hbGxvYz4g X0FsbG9jX3R5cGU7CiAgdHlwZWRlZiBhbGxvY2F0b3I8X1RwPiBhbGxvY2F0b3JfdHlwZTsKfTsK CgoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGludCBfX2luc3Q+CnN0cnVjdCBfQWxsb2NfdHJhaXRz PF9UcCwgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0PiA+CnsKICBzdGF0aWMgY29uc3Qg Ym9vbCBfU19pbnN0YW5jZWxlc3MgPSB0cnVlOwogIHR5cGVkZWYgX19zaW1wbGVfYWxsb2M8X1Rw LCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+ID4gX0FsbG9jX3R5cGU7CiAgdHlwZWRl ZiBfX2FsbG9jYXRvcjxfVHAsIF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9faW5zdD4gPiBhbGxv Y2F0b3JfdHlwZTsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBib29sIF9fdGhyZWFkcywgaW50 IF9faW5zdD4Kc3RydWN0IF9BbGxvY190cmFpdHM8X1RwLCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxh dGU8X190aHJlYWRzLCBfX2luc3Q+ID4KewogIHN0YXRpYyBjb25zdCBib29sIF9TX2luc3RhbmNl bGVzcyA9IHRydWU7CiAgdHlwZWRlZiBfX3NpbXBsZV9hbGxvYzxfVHAsIF9fZGVmYXVsdF9hbGxv Y190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD4gPgogICAgICAgICAgX0FsbG9jX3R5cGU7CiAg dHlwZWRlZiBfX2FsbG9jYXRvcjxfVHAsIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVh ZHMsIF9faW5zdD4gPgogICAgICAgICAgYWxsb2NhdG9yX3R5cGU7Cn07CgoKdGVtcGxhdGUgPGNs YXNzIF9UcCwgY2xhc3MgX0FsbG9jPgpzdHJ1Y3QgX0FsbG9jX3RyYWl0czxfVHAsIF9fZGVidWdf YWxsb2M8X0FsbG9jPiA+CnsKICBzdGF0aWMgY29uc3QgYm9vbCBfU19pbnN0YW5jZWxlc3MgPSB0 cnVlOwogIHR5cGVkZWYgX19zaW1wbGVfYWxsb2M8X1RwLCBfX2RlYnVnX2FsbG9jPF9BbGxvYz4g PiBfQWxsb2NfdHlwZTsKICB0eXBlZGVmIF9fYWxsb2NhdG9yPF9UcCwgX19kZWJ1Z19hbGxvYzxf QWxsb2M+ID4gYWxsb2NhdG9yX3R5cGU7Cn07CgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFz cyBfVHAxLCBpbnQgX19pbnN0PgpzdHJ1Y3QgX0FsbG9jX3RyYWl0czxfVHAsCiAgICAgICAgICAg ICAgICAgICAgIF9fYWxsb2NhdG9yPF9UcDEsIF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9faW5z dD4gPiA+CnsKICBzdGF0aWMgY29uc3QgYm9vbCBfU19pbnN0YW5jZWxlc3MgPSB0cnVlOwogIHR5 cGVkZWYgX19zaW1wbGVfYWxsb2M8X1RwLCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+ ID4gX0FsbG9jX3R5cGU7CiAgdHlwZWRlZiBfX2FsbG9jYXRvcjxfVHAsIF9fbWFsbG9jX2FsbG9j X3RlbXBsYXRlPF9faW5zdD4gPiBhbGxvY2F0b3JfdHlwZTsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3Mg X1RwLCBjbGFzcyBfVHAxLCBib29sIF9fdGhyLCBpbnQgX19pbnN0PgpzdHJ1Y3QgX0FsbG9jX3Ry YWl0czxfVHAsCiAgICAgICAgICAgICAgICAgICAgICBfX2FsbG9jYXRvcjxfVHAxLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhy LCBfX2luc3Q+ID4gPgp7CiAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5zdGFuY2VsZXNzID0gdHJ1 ZTsKICB0eXBlZGVmIF9fc2ltcGxlX2FsbG9jPF9UcCwgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRl PF9fdGhyLF9faW5zdD4gPgogICAgICAgICAgX0FsbG9jX3R5cGU7CiAgdHlwZWRlZiBfX2FsbG9j YXRvcjxfVHAsIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocixfX2luc3Q+ID4KICAgICAg ICAgIGFsbG9jYXRvcl90eXBlOwp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9UcDEs IGNsYXNzIF9BbGxvYz4Kc3RydWN0IF9BbGxvY190cmFpdHM8X1RwLCBfX2FsbG9jYXRvcjxfVHAx LCBfX2RlYnVnX2FsbG9jPF9BbGxvYz4gPiA+CnsKICBzdGF0aWMgY29uc3QgYm9vbCBfU19pbnN0 YW5jZWxlc3MgPSB0cnVlOwogIHR5cGVkZWYgX19zaW1wbGVfYWxsb2M8X1RwLCBfX2RlYnVnX2Fs bG9jPF9BbGxvYz4gPiBfQWxsb2NfdHlwZTsKICB0eXBlZGVmIF9fYWxsb2NhdG9yPF9UcCwgX19k ZWJ1Z19hbGxvYzxfQWxsb2M+ID4gYWxsb2NhdG9yX3R5cGU7Cn07CgoKCgoKICBleHRlcm4gdGVt cGxhdGUgY2xhc3MgYWxsb2NhdG9yPGNoYXI+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBhbGxv Y2F0b3I8d2NoYXJfdD47CgoKCiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIF9fZGVmYXVsdF9hbGxv Y190ZW1wbGF0ZTx0cnVlLCAwPjsKCn0KIyA1NiAiL3Vzci9jeWdudXMvYmluLy4uL2luY2x1ZGUv YysrLzMuMS4xL21lbW9yeSIgMiAzCiMgMSAiL3Vzci9jeWdudXMvYmluLy4uL2luY2x1ZGUvYysr LzMuMS4xL2JpdHMvc3RsX2NvbnN0cnVjdC5oIiAxIDMKIyA2NyAiL3Vzci9jeWdudXMvYmluLy4u L2luY2x1ZGUvYysrLzMuMS4xL2JpdHMvc3RsX2NvbnN0cnVjdC5oIiAzCm5hbWVzcGFjZSBzdGQK ewoKCgoKCgogIHRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4KICAgIGlubGluZSB2b2lk CiAgICBfQ29uc3RydWN0KF9UMSogX19wLCBjb25zdCBfVDImIF9fdmFsdWUpCiAgICB7IG5ldyAo c3RhdGljX2Nhc3Q8dm9pZCo+KF9fcCkpIF9UMShfX3ZhbHVlKTsgfQoKCgoKCgoKICB0ZW1wbGF0 ZSA8Y2xhc3MgX1QxPgogICAgaW5saW5lIHZvaWQKICAgIF9Db25zdHJ1Y3QoX1QxKiBfX3ApCiAg ICB7IG5ldyAoc3RhdGljX2Nhc3Q8dm9pZCo+KF9fcCkpIF9UMSgpOyB9CiMgOTggIi91c3IvY3ln bnVzL2Jpbi8uLi9pbmNsdWRlL2MrKy8zLjEuMS9iaXRzL3N0bF9jb25zdHJ1Y3QuaCIgMwogIHRl bXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgogICAgaW5saW5lIHZvaWQKICAgIF9fZGVz dHJveV9hdXgoX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFz dCwgX19mYWxzZV90eXBlKQogICAgeyBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmly c3QpIF9EZXN0cm95KCYqX19maXJzdCk7IH0KIyAxMTIgIi91c3IvY3lnbnVzL2Jpbi8uLi9pbmNs dWRlL2MrKy8zLjEuMS9iaXRzL3N0bF9jb25zdHJ1Y3QuaCIgMwogIHRlbXBsYXRlIDxjbGFzcyBf Rm9yd2FyZEl0ZXJhdG9yPgogICAgaW5saW5lIHZvaWQKICAgIF9fZGVzdHJveV9hdXgoX0Zvcndh cmRJdGVyYXRvciwgX0ZvcndhcmRJdGVyYXRvciwgX190cnVlX3R5cGUpCiAgICB7IH0KCgoKCgoK ICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgogICAgaW5saW5lIHZvaWQKICAgIF9EZXN0cm95KF9UcCog X19wb2ludGVyKQogICAgeyBfX3BvaW50ZXItPn5fVHAoKTsgfQojIDEzNCAiL3Vzci9jeWdudXMv YmluLy4uL2luY2x1ZGUvYysrLzMuMS4xL2JpdHMvc3RsX2NvbnN0cnVjdC5oIiAzCiAgdGVtcGxh dGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CiAgICBpbmxpbmUgdm9pZAogICAgX0Rlc3Ryb3ko X0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCkKICAgIHsK ICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyYXRvcj46 OnZhbHVlX3R5cGUKICAgICAgICAgICAgICAgICAgICAgICBfVmFsdWVfdHlwZTsKICAgICAgdHlw ZWRlZiB0eXBlbmFtZSBfX3R5cGVfdHJhaXRzPF9WYWx1ZV90eXBlPjo6aGFzX3RyaXZpYWxfZGVz dHJ1Y3RvcgogICAgICAgICAgICAgICAgICAgICAgIF9IYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwoK ICAgICAgX19kZXN0cm95X2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9IYXNfdHJpdmlhbF9kZXN0cnVj dG9yKCkpOwogICAgfQp9CiMgNTcgIi91c3IvY3lnbnVzL2Jpbi8uLi9pbmNsdWRlL2MrKy8zLjEu MS9tZW1vcnkiIDIgMwoKIyAxICIvdXNyL2N5Z251cy9iaW4vLi4vaW5jbHVkZS9jKysvMy4xLjEv Yml0cy9zdGxfdW5pbml0aWFsaXplZC5oIiAxIDMKIyA2NiAiL3Vzci9jeWdudXMvYmluLy4uL2lu Y2x1ZGUvYysrLzMuMS4xL2JpdHMvc3RsX3VuaW5pdGlhbGl6ZWQuaCIgMwpuYW1lc3BhY2Ugc3Rk CnsKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfRm9yd2FyZEl0 ZXI+CiAgICBpbmxpbmUgX0ZvcndhcmRJdGVyCiAgICBfX3VuaW5pdGlhbGl6ZWRfY29weV9hdXgo X0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgX190cnVlX3R5cGUpCiAgICB7IHJldHVybiBjb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19y ZXN1bHQpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9Gb3J3 YXJkSXRlcj4KICAgIF9Gb3J3YXJkSXRlcgogICAgX191bmluaXRpYWxpemVkX2NvcHlfYXV4KF9J bnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgIF9fZmFsc2VfdHlwZSkKICAgIHsKICAgICAgX0ZvcndhcmRJdGVyIF9fY3VyID0gX19yZXN1 bHQ7CiAgICAgIHRyeSB7CiAgICAgICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2Zp cnN0LCArK19fY3VyKQogICAgICAgICAgX0NvbnN0cnVjdCgmKl9fY3VyLCAqX19maXJzdCk7CiAg ICAgICAgcmV0dXJuIF9fY3VyOwogICAgICB9CiAgICAgIGNhdGNoKC4uLikKICAgICAgICB7CiAg ICAgICAgICBfRGVzdHJveShfX3Jlc3VsdCwgX19jdXIpOwogICAgICAgICAgdGhyb3c7CiAgICAg ICAgfQogICAgfQojIDEwNiAiL3Vzci9jeWdudXMvYmluLy4uL2luY2x1ZGUvYysrLzMuMS4xL2Jp dHMvc3RsX3VuaW5pdGlhbGl6ZWQuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIs IHR5cGVuYW1lIF9Gb3J3YXJkSXRlcj4KICAgIGlubGluZSBfRm9yd2FyZEl0ZXIKICAgIHVuaW5p dGlhbGl6ZWRfY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LCBfRm9y d2FyZEl0ZXIgX19yZXN1bHQpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3Jf dHJhaXRzPF9Gb3J3YXJkSXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKICAgICAgdHlwZWRl ZiB0eXBlbmFtZSBfX3R5cGVfdHJhaXRzPF9WYWx1ZVR5cGU+Ojppc19QT0RfdHlwZSBfSXNfUE9E OwogICAgICByZXR1cm4gX191bmluaXRpYWxpemVkX2NvcHlfYXV4KF9fZmlyc3QsIF9fbGFzdCwg X19yZXN1bHQsIF9Jc19QT0QoKSk7CiAgICB9CgogIGlubGluZSBjaGFyKgogIHVuaW5pdGlhbGl6 ZWRfY29weShjb25zdCBjaGFyKiBfX2ZpcnN0LCBjb25zdCBjaGFyKiBfX2xhc3QsIGNoYXIqIF9f cmVzdWx0KQogIHsKICAgIG1lbW1vdmUoX19yZXN1bHQsIF9fZmlyc3QsIF9fbGFzdCAtIF9fZmly c3QpOwogICAgcmV0dXJuIF9fcmVzdWx0ICsgKF9fbGFzdCAtIF9fZmlyc3QpOwogIH0KCiAgaW5s aW5lIHdjaGFyX3QqCiAgdW5pbml0aWFsaXplZF9jb3B5KGNvbnN0IHdjaGFyX3QqIF9fZmlyc3Qs IGNvbnN0IHdjaGFyX3QqIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCogX19y ZXN1bHQpCiAgewogICAgbWVtbW92ZShfX3Jlc3VsdCwgX19maXJzdCwgc2l6ZW9mKHdjaGFyX3Qp ICogKF9fbGFzdCAtIF9fZmlyc3QpKTsKICAgIHJldHVybiBfX3Jlc3VsdCArIChfX2xhc3QgLSBf X2ZpcnN0KTsKICB9CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFt ZSBfVHA+CiAgICBpbmxpbmUgdm9pZAogICAgX191bmluaXRpYWxpemVkX2ZpbGxfYXV4KF9Gb3J3 YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNvbnN0IF9UcCYgX194LCBfX3RydWVfdHlwZSkKICAgIHsgZmlsbChfX2ZpcnN0 LCBfX2xhc3QsIF9feCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBl bmFtZSBfVHA+CiAgICB2b2lkCiAgICBfX3VuaW5pdGlhbGl6ZWRfZmlsbF9hdXgoX0ZvcndhcmRJ dGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgY29uc3QgX1RwJiBfX3gsIF9fZmFsc2VfdHlwZSkKICAgIHsKICAgICAgX0ZvcndhcmRJ dGVyIF9fY3VyID0gX19maXJzdDsKICAgICAgdHJ5IHsKICAgICAgICBmb3IgKCA7IF9fY3VyICE9 IF9fbGFzdDsgKytfX2N1cikKICAgICAgICAgIF9Db25zdHJ1Y3QoJipfX2N1ciwgX194KTsKICAg ICAgfQogICAgICBjYXRjaCguLi4pCiAgICAgICAgewogICAgICAgICAgX0Rlc3Ryb3koX19maXJz dCwgX19jdXIpOwogICAgICAgICAgdGhyb3c7CiAgICAgICAgfQogICAgfQojIDE2NCAiL3Vzci9j eWdudXMvYmluLy4uL2luY2x1ZGUvYysrLzMuMS4xL2JpdHMvc3RsX3VuaW5pdGlhbGl6ZWQuaCIg MwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1RwPgogICAgaW5s aW5lIHZvaWQKICAgIHVuaW5pdGlhbGl6ZWRfZmlsbChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0Zv cndhcmRJdGVyIF9fbGFzdCwgY29uc3QgX1RwJiBfX3gpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlw ZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlw ZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5cGVfdHJhaXRzPF9WYWx1ZVR5cGU+Ojppc19Q T0RfdHlwZSBfSXNfUE9EOwogICAgICBfX3VuaW5pdGlhbGl6ZWRfZmlsbF9hdXgoX19maXJzdCwg X19sYXN0LCBfX3gsIF9Jc19QT0QoKSk7CiAgICB9CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0Zv cndhcmRJdGVyLCB0eXBlbmFtZSBfU2l6ZSwgdHlwZW5hbWUgX1RwPgogICAgaW5saW5lIF9Gb3J3 YXJkSXRlcgogICAgX191bmluaXRpYWxpemVkX2ZpbGxfbl9hdXgoX0ZvcndhcmRJdGVyIF9fZmly c3QsIF9TaXplIF9fbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYg X194LCBfX3RydWVfdHlwZSkKICAgIHsKICAgICAgcmV0dXJuIGZpbGxfbihfX2ZpcnN0LCBfX24s IF9feCk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUg X1NpemUsIHR5cGVuYW1lIF9UcD4KICAgIF9Gb3J3YXJkSXRlcgogICAgX191bmluaXRpYWxpemVk X2ZpbGxfbl9hdXgoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9TaXplIF9fbiwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX194LCBfX2ZhbHNlX3R5cGUpCiAgICB7CiAg ICAgIF9Gb3J3YXJkSXRlciBfX2N1ciA9IF9fZmlyc3Q7CiAgICAgIHRyeSB7CiAgICAgICAgZm9y ICggOyBfX24gPiAwOyAtLV9fbiwgKytfX2N1cikKICAgICAgICAgIF9Db25zdHJ1Y3QoJipfX2N1 ciwgX194KTsKICAgICAgICByZXR1cm4gX19jdXI7CiAgICAgIH0KICAgICAgY2F0Y2goLi4uKQog ICAgICAgIHsKICAgICAgICAgIF9EZXN0cm95KF9fZmlyc3QsIF9fY3VyKTsKICAgICAgICAgIHRo cm93OwogICAgICAgIH0KICAgIH0KIyAyMTAgIi91c3IvY3lnbnVzL2Jpbi8uLi9pbmNsdWRlL2Mr Ky8zLjEuMS9iaXRzL3N0bF91bmluaXRpYWxpemVkLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf Rm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9TaXplLCB0eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUgX0Zv cndhcmRJdGVyCiAgICB1bmluaXRpYWxpemVkX2ZpbGxfbihfRm9yd2FyZEl0ZXIgX19maXJzdCwg X1NpemUgX19uLCBjb25zdCBfVHAmIF9feCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBp dGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOwogICAg ICB0eXBlZGVmIHR5cGVuYW1lIF9fdHlwZV90cmFpdHM8X1ZhbHVlVHlwZT46OmlzX1BPRF90eXBl IF9Jc19QT0Q7CiAgICAgIHJldHVybiBfX3VuaW5pdGlhbGl6ZWRfZmlsbF9uX2F1eChfX2ZpcnN0 LCBfX24sIF9feCwgX0lzX1BPRCgpKTsKICAgIH0KIyAyMjcgIi91c3IvY3lnbnVzL2Jpbi8uLi9p bmNsdWRlL2MrKy8zLjEuMS9iaXRzL3N0bF91bmluaXRpYWxpemVkLmgiIDMKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0SXRlcjIsIHR5cGVuYW1lIF9Gb3J3 YXJkSXRlcj4KICAgIGlubGluZSBfRm9yd2FyZEl0ZXIKICAgIF9fdW5pbml0aWFsaXplZF9jb3B5 X2NvcHkoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBf X2xhc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1 bHQpCiAgICB7CiAgICAgIF9Gb3J3YXJkSXRlciBfX21pZCA9IHVuaW5pdGlhbGl6ZWRfY29weShf X2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQpOwogICAgICB0cnkgewogICAgICAgIHJldHVybiB1 bmluaXRpYWxpemVkX2NvcHkoX19maXJzdDIsIF9fbGFzdDIsIF9fbWlkKTsKICAgICAgfQogICAg ICBjYXRjaCguLi4pCiAgICAgICAgewogICAgICAgICAgX0Rlc3Ryb3koX19yZXN1bHQsIF9fbWlk KTsKICAgICAgICAgIHRocm93OwogICAgICAgIH0KICAgIH0KCgoKCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9JbnB1dEl0ZXI+CiAgICBp bmxpbmUgX0ZvcndhcmRJdGVyCiAgICBfX3VuaW5pdGlhbGl6ZWRfZmlsbF9jb3B5KF9Gb3J3YXJk SXRlciBfX3Jlc3VsdCwgX0ZvcndhcmRJdGVyIF9fbWlkLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBjb25zdCBfVHAmIF9feCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lu cHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCkKICAgIHsKICAgICAgdW5pbml0aWFs aXplZF9maWxsKF9fcmVzdWx0LCBfX21pZCwgX194KTsKICAgICAgdHJ5IHsKICAgICAgICByZXR1 cm4gdW5pbml0aWFsaXplZF9jb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19taWQpOwogICAgICB9CiAg ICAgIGNhdGNoKC4uLikKICAgICAgICB7CiAgICAgICAgICBfRGVzdHJveShfX3Jlc3VsdCwgX19t aWQpOwogICAgICAgICAgdGhyb3c7CiAgICAgICAgfQogICAgfQoKCgoKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9UcD4KICAg IGlubGluZSB2b2lkCiAgICBfX3VuaW5pdGlhbGl6ZWRfY29weV9maWxsKF9JbnB1dEl0ZXIgX19m aXJzdDEsIF9JbnB1dEl0ZXIgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg X0ZvcndhcmRJdGVyIF9fZmlyc3QyLCBfRm9yd2FyZEl0ZXIgX19sYXN0MiwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3gpCiAgICB7CiAgICAgIF9Gb3J3YXJkSXRl ciBfX21pZDIgPSB1bmluaXRpYWxpemVkX2NvcHkoX19maXJzdDEsIF9fbGFzdDEsIF9fZmlyc3Qy KTsKICAgICAgdHJ5IHsKICAgICAgICB1bmluaXRpYWxpemVkX2ZpbGwoX19taWQyLCBfX2xhc3Qy LCBfX3gpOwogICAgICB9CiAgICAgIGNhdGNoKC4uLikKICAgICAgICB7CiAgICAgICAgICBfRGVz dHJveShfX2ZpcnN0MiwgX19taWQyKTsKICAgICAgICAgIHRocm93OwogICAgICAgIH0KICAgIH0K Cn0KIyA1OSAiL3Vzci9jeWdudXMvYmluLy4uL2luY2x1ZGUvYysrLzMuMS4xL21lbW9yeSIgMiAz CiMgMSAiL3Vzci9jeWdudXMvYmluLy4uL2luY2x1ZGUvYysrLzMuMS4xL2JpdHMvc3RsX3Jhd19z dG9yYWdlX2l0ZXIuaCIgMSAzCiMgNjQgIi91c3IvY3lnbnVzL2Jpbi8uLi9pbmNsdWRlL2MrKy8z LjEuMS9iaXRzL3N0bF9yYXdfc3RvcmFnZV9pdGVyLmgiIDMKbmFtZXNwYWNlIHN0ZAp7CgoKCgog IHRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yLCBjbGFzcyBfVHA+CiAgY2xhc3MgcmF3 X3N0b3JhZ2VfaXRlcmF0b3IKICAgIDogcHVibGljIGl0ZXJhdG9yPG91dHB1dF9pdGVyYXRvcl90 YWcsIHZvaWQsIHZvaWQsIHZvaWQsIHZvaWQ+CiAgICB7CiAgICBwcm90ZWN0ZWQ6CiAgICAgIF9G b3J3YXJkSXRlcmF0b3IgX01faXRlcjsKCiAgICBwdWJsaWM6CiAgICAgIGV4cGxpY2l0CiAgICAg IHJhd19zdG9yYWdlX2l0ZXJhdG9yKF9Gb3J3YXJkSXRlcmF0b3IgX194KSA6IF9NX2l0ZXIoX194 KSB7fQoKICAgICAgcmF3X3N0b3JhZ2VfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yKigpIHsgcmV0 dXJuICp0aGlzOyB9CgogICAgICByYXdfc3RvcmFnZV9pdGVyYXRvciYKICAgICAgb3BlcmF0b3I9 KGNvbnN0IF9UcCYgX19lbGVtZW50KQogICAgICB7CiAgICAgICAgX0NvbnN0cnVjdCgmKl9NX2l0 ZXIsIF9fZWxlbWVudCk7CiAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICB9CgogICAgICByYXdf c3RvcmFnZV9pdGVyYXRvcjxfRm9yd2FyZEl0ZXJhdG9yLCBfVHA+JgogICAgICBvcGVyYXRvcisr KCkKICAgICAgewogICAgICAgICsrX01faXRlcjsKICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAg IH0KCiAgICAgIHJhd19zdG9yYWdlX2l0ZXJhdG9yPF9Gb3J3YXJkSXRlcmF0b3IsIF9UcD4KICAg ICAgb3BlcmF0b3IrKyhpbnQpCiAgICAgIHsKICAgICAgICByYXdfc3RvcmFnZV9pdGVyYXRvcjxf Rm9yd2FyZEl0ZXJhdG9yLCBfVHA+IF9fdG1wID0gKnRoaXM7CiAgICAgICAgKytfTV9pdGVyOwog ICAgICAgIHJldHVybiBfX3RtcDsKICAgICAgfQogICAgfTsKfQojIDYwICIvdXNyL2N5Z251cy9i aW4vLi4vaW5jbHVkZS9jKysvMy4xLjEvbWVtb3J5IiAyIDMKCgoKCm5hbWVzcGFjZSBzdGQKewoj IDc0ICIvdXNyL2N5Z251cy9iaW4vLi4vaW5jbHVkZS9jKysvMy4xLjEvbWVtb3J5IiAzCnRlbXBs YXRlIDx0eXBlbmFtZSBfVHA+CnBhaXI8X1RwKiwgcHRyZGlmZl90PgpfX2dldF90ZW1wb3Jhcnlf YnVmZmVyKHB0cmRpZmZfdCBfX2xlbiwgX1RwKikKewogIGlmIChfX2xlbiA+IHB0cmRpZmZfdCgy MTQ3NDgzNjQ3IC8gc2l6ZW9mKF9UcCkpKQogICAgX19sZW4gPSAyMTQ3NDgzNjQ3IC8gc2l6ZW9m KF9UcCk7CgogIHdoaWxlIChfX2xlbiA+IDApIHsKICAgIF9UcCogX190bXAgPSAoX1RwKikgc3Rk OjptYWxsb2MoKHN0ZDo6c2l6ZV90KV9fbGVuICogc2l6ZW9mKF9UcCkpOwogICAgaWYgKF9fdG1w ICE9IDApCiAgICAgIHJldHVybiBwYWlyPF9UcCosIHB0cmRpZmZfdD4oX190bXAsIF9fbGVuKTsK ICAgIF9fbGVuIC89IDI7CiAgfQoKICByZXR1cm4gcGFpcjxfVHAqLCBwdHJkaWZmX3Q+KChfVHAq KTAsIDApOwp9CiMgMTA2ICIvdXNyL2N5Z251cy9iaW4vLi4vaW5jbHVkZS9jKysvMy4xLjEvbWVt b3J5IiAzCnRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICBpbmxpbmUgcGFpcjxfVHAqLHB0cmRpZmZf dD4KICBnZXRfdGVtcG9yYXJ5X2J1ZmZlcihwdHJkaWZmX3QgX19sZW4pCiAgewogICAgcmV0dXJu IF9fZ2V0X3RlbXBvcmFyeV9idWZmZXIoX19sZW4sIChfVHAqKSAwKTsKICB9CiMgMTIwICIvdXNy L2N5Z251cy9iaW4vLi4vaW5jbHVkZS9jKysvMy4xLjEvbWVtb3J5IiAzCnRlbXBsYXRlPHR5cGVu YW1lIF9UcD4KICB2b2lkCiAgcmV0dXJuX3RlbXBvcmFyeV9idWZmZXIoX1RwKiBfX3ApCiAgewog ICAgc3RkOjpmcmVlKF9fcCk7CiAgfQojIDEzNSAiL3Vzci9jeWdudXMvYmluLy4uL2luY2x1ZGUv YysrLzMuMS4xL21lbW9yeSIgMwp0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAxPgogIHN0cnVjdCBhdXRv X3B0cl9yZWYKewogICBfVHAxKiBfTV9wdHI7CgogICBleHBsaWNpdAogICBhdXRvX3B0cl9yZWYo X1RwMSogX19wKQogICA6IF9NX3B0cihfX3ApIHt9Cn07CiMgMTc1ICIvdXNyL2N5Z251cy9iaW4v Li4vaW5jbHVkZS9jKysvMy4xLjEvbWVtb3J5IiAzCnRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICBj bGFzcyBhdXRvX3B0cgp7CnByaXZhdGU6CiAgX1RwKiBfTV9wdHI7CgpwdWJsaWM6CgogIHR5cGVk ZWYgX1RwIGVsZW1lbnRfdHlwZTsKCgoKCgoKCiAgZXhwbGljaXQKICBhdXRvX3B0cihlbGVtZW50 X3R5cGUqIF9fcCA9IDApIHRocm93KCkKICA6IF9NX3B0cihfX3ApIHsgfQojIDIwMiAiL3Vzci9j eWdudXMvYmluLy4uL2luY2x1ZGUvYysrLzMuMS4xL21lbW9yeSIgMwogIGF1dG9fcHRyKGF1dG9f cHRyJiBfX2EpIHRocm93KCkKICA6IF9NX3B0cihfX2EucmVsZWFzZSgpKSB7IH0KIyAyMTQgIi91 c3IvY3lnbnVzL2Jpbi8uLi9pbmNsdWRlL2MrKy8zLjEuMS9tZW1vcnkiIDMKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfVHAxPgogICAgYXV0b19wdHIoYXV0b19wdHI8X1RwMT4mIF9fYSkgdGhyb3coKQog ICAgOiBfTV9wdHIoX19hLnJlbGVhc2UoKSkgeyB9CiMgMjI2ICIvdXNyL2N5Z251cy9iaW4vLi4v aW5jbHVkZS9jKysvMy4xLjEvbWVtb3J5IiAzCiAgYXV0b19wdHImCiAgb3BlcmF0b3I9KGF1dG9f cHRyJiBfX2EpIHRocm93KCkKICAgIHsKICAgICAgcmVzZXQoX19hLnJlbGVhc2UoKSk7CiAgICAg IHJldHVybiAqdGhpczsKICAgIH0KIyAyNDMgIi91c3IvY3lnbnVzL2Jpbi8uLi9pbmNsdWRlL2Mr Ky8zLjEuMS9tZW1vcnkiIDMKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX1RwMT4KICAgIGF1dG9fcHRy JgogICAgb3BlcmF0b3I9KGF1dG9fcHRyPF9UcDE+JiBfX2EpIHRocm93KCkKICAgIHsKICAgICAg cmVzZXQoX19hLnJlbGVhc2UoKSk7CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KIyAyNjMgIi91 c3IvY3lnbnVzL2Jpbi8uLi9pbmNsdWRlL2MrKy8zLjEuMS9tZW1vcnkiIDMKICB+YXV0b19wdHIo KSB7IGRlbGV0ZSBfTV9wdHI7IH0KIyAyNzMgIi91c3IvY3lnbnVzL2Jpbi8uLi9pbmNsdWRlL2Mr Ky8zLjEuMS9tZW1vcnkiIDMKICBlbGVtZW50X3R5cGUmCiAgb3BlcmF0b3IqKCkgY29uc3QgdGhy b3coKSB7IHJldHVybiAqX01fcHRyOyB9CgoKCgoKCgogIGVsZW1lbnRfdHlwZSoKICBvcGVyYXRv ci0+KCkgY29uc3QgdGhyb3coKSB7IHJldHVybiBfTV9wdHI7IH0KIyAyOTUgIi91c3IvY3lnbnVz L2Jpbi8uLi9pbmNsdWRlL2MrKy8zLjEuMS9tZW1vcnkiIDMKICBlbGVtZW50X3R5cGUqCiAgZ2V0 KCkgY29uc3QgdGhyb3coKSB7IHJldHVybiBfTV9wdHI7IH0KIyAzMDkgIi91c3IvY3lnbnVzL2Jp bi8uLi9pbmNsdWRlL2MrKy8zLjEuMS9tZW1vcnkiIDMKICBlbGVtZW50X3R5cGUqCiAgcmVsZWFz ZSgpIHRocm93KCkKICAgIHsKICAgICAgZWxlbWVudF90eXBlKiBfX3RtcCA9IF9NX3B0cjsKICAg ICAgX01fcHRyID0gMDsKICAgICAgcmV0dXJuIF9fdG1wOwogICAgfQojIDMyNCAiL3Vzci9jeWdu dXMvYmluLy4uL2luY2x1ZGUvYysrLzMuMS4xL21lbW9yeSIgMwogIHZvaWQKICByZXNldChlbGVt ZW50X3R5cGUqIF9fcCA9IDApIHRocm93KCkKICAgIHsKICAgICAgaWYgKF9fcCAhPSBfTV9wdHIp CiAgICAgICAgewogICAgICAgICAgZGVsZXRlIF9NX3B0cjsKICAgICAgICAgIF9NX3B0ciA9IF9f cDsKICAgICAgICB9CiAgICB9CiMgMzQ1ICIvdXNyL2N5Z251cy9iaW4vLi4vaW5jbHVkZS9jKysv My4xLjEvbWVtb3J5IiAzCiAgYXV0b19wdHIoYXV0b19wdHJfcmVmPGVsZW1lbnRfdHlwZT4gX19y ZWYpIHRocm93KCkKICAgIDogX01fcHRyKF9fcmVmLl9NX3B0cikge30KCiAgYXV0b19wdHImCiAg b3BlcmF0b3I9KGF1dG9fcHRyX3JlZjxlbGVtZW50X3R5cGU+IF9fcmVmKSB0aHJvdygpCiAgICB7 CiAgICAgIGlmIChfX3JlZi5fTV9wdHIgIT0gdGhpcy0+Z2V0KCkpCiAgICAgICAgewogICAgICAg ICAgZGVsZXRlIF9NX3B0cjsKICAgICAgICAgIF9NX3B0ciA9IF9fcmVmLl9NX3B0cjsKICAgICAg ICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwMT4K ICAgIG9wZXJhdG9yIGF1dG9fcHRyX3JlZjxfVHAxPigpIHRocm93KCkKICAgICAgeyByZXR1cm4g YXV0b19wdHJfcmVmPF9UcDE+KHRoaXMtPnJlbGVhc2UoKSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5h bWUgX1RwMT4KICAgIG9wZXJhdG9yIGF1dG9fcHRyPF9UcDE+KCkgdGhyb3coKQogICAgICB7IHJl dHVybiBhdXRvX3B0cjxfVHAxPih0aGlzLT5yZWxlYXNlKCkpOyB9Cgp9OwoKfQojIDQ5ICIvdXNy L2N5Z251cy9iaW4vLi4vaW5jbHVkZS9jKysvMy4xLjEvc3RyaW5nIiAyIDMKCgoKIyAxICIvdXNy L2N5Z251cy9iaW4vLi4vaW5jbHVkZS9jKysvMy4xLjEvYml0cy9zdGxfZnVuY3Rpb24uaCIgMSAz CiMgNjQgIi91c3IvY3lnbnVzL2Jpbi8uLi9pbmNsdWRlL2MrKy8zLjEuMS9iaXRzL3N0bF9mdW5j dGlvbi5oIiAzCm5hbWVzcGFjZSBzdGQKewojIDEwMSAiL3Vzci9jeWdudXMvYmluLy4uL2luY2x1 ZGUvYysrLzMuMS4xL2JpdHMvc3RsX2Z1bmN0aW9uLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9Bcmcs IGNsYXNzIF9SZXN1bHQ+CnN0cnVjdCB1bmFyeV9mdW5jdGlvbiB7CiAgdHlwZWRlZiBfQXJnIGFy Z3VtZW50X3R5cGU7CiAgdHlwZWRlZiBfUmVzdWx0IHJlc3VsdF90eXBlOwp9OwoKCgoKdGVtcGxh dGUgPGNsYXNzIF9BcmcxLCBjbGFzcyBfQXJnMiwgY2xhc3MgX1Jlc3VsdD4Kc3RydWN0IGJpbmFy eV9mdW5jdGlvbiB7CiAgdHlwZWRlZiBfQXJnMSBmaXJzdF9hcmd1bWVudF90eXBlOwogIHR5cGVk ZWYgX0FyZzIgc2Vjb25kX2FyZ3VtZW50X3R5cGU7CiAgdHlwZWRlZiBfUmVzdWx0IHJlc3VsdF90 eXBlOwp9OwojIDEyNyAiL3Vzci9jeWdudXMvYmluLy4uL2luY2x1ZGUvYysrLzMuMS4xL2JpdHMv c3RsX2Z1bmN0aW9uLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IHBsdXMgOiBwdWJs aWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsX1RwPiB7CiAgX1RwIG9wZXJhdG9yKCkoY29uc3Qg X1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggKyBfX3k7IH0KfTsK Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgbWludXMgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0 aW9uPF9UcCxfVHAsX1RwPiB7CiAgX1RwIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0 IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggLSBfX3k7IH0KfTsKCgp0ZW1wbGF0ZSA8Y2xh c3MgX1RwPgpzdHJ1Y3QgbXVsdGlwbGllcyA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9U cCxfVHA+IHsKICBfVHAgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kp IGNvbnN0IHsgcmV0dXJuIF9feCAqIF9feTsgfQp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0 cnVjdCBkaXZpZGVzIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLF9UcD4gewogIF9U cCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1 cm4gX194IC8gX195OyB9Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IG1vZHVsdXMg OiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsX1RwPgp7CiAgX1RwIG9wZXJhdG9yKCko Y29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggJSBfX3k7 IH0KfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgbmVnYXRlIDogcHVibGljIHVuYXJ5 X2Z1bmN0aW9uPF9UcCxfVHA+CnsKICBfVHAgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCkgY29u c3QgeyByZXR1cm4gLV9feDsgfQp9OwojIDE3MyAiL3Vzci9jeWdudXMvYmluLy4uL2luY2x1ZGUv YysrLzMuMS4xL2JpdHMvc3RsX2Z1bmN0aW9uLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3Ry dWN0IGVxdWFsX3RvIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLGJvb2w+CnsKICBi b29sIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJl dHVybiBfX3ggPT0gX195OyB9Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IG5vdF9l cXVhbF90byA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxib29sPgp7CiAgYm9vbCBv cGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4g X194ICE9IF9feTsgfQp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBncmVhdGVyIDog cHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLGJvb2w+CnsKICBib29sIG9wZXJhdG9yKCko Y29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggPiBfX3k7 IH0KfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgbGVzcyA6IHB1YmxpYyBiaW5hcnlf ZnVuY3Rpb248X1RwLF9UcCxib29sPgp7CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194 LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194IDwgX195OyB9Cn07CgoKdGVtcGxh dGUgPGNsYXNzIF9UcD4Kc3RydWN0IGdyZWF0ZXJfZXF1YWwgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0 aW9uPF9UcCxfVHAsYm9vbD4KewogIGJvb2wgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29u c3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCA+PSBfX3k7IH0KfTsKCgp0ZW1wbGF0ZSA8 Y2xhc3MgX1RwPgpzdHJ1Y3QgbGVzc19lcXVhbCA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1Rw LF9UcCxib29sPgp7CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAm IF9feSkgY29uc3QgeyByZXR1cm4gX194IDw9IF9feTsgfQp9OwojIDIyMiAiL3Vzci9jeWdudXMv YmluLy4uL2luY2x1ZGUvYysrLzMuMS4xL2JpdHMvc3RsX2Z1bmN0aW9uLmgiIDMKdGVtcGxhdGUg PGNsYXNzIF9UcD4Kc3RydWN0IGxvZ2ljYWxfYW5kIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxf VHAsX1RwLGJvb2w+CnsKICBib29sIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9U cCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggJiYgX195OyB9Cn07CgoKdGVtcGxhdGUgPGNsYXNz IF9UcD4Kc3RydWN0IGxvZ2ljYWxfb3IgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAs Ym9vbD4KewogIGJvb2wgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kp IGNvbnN0IHsgcmV0dXJuIF9feCB8fCBfX3k7IH0KfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpz dHJ1Y3QgbG9naWNhbF9ub3QgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X1RwLGJvb2w+CnsKICBi b29sIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gpIGNvbnN0IHsgcmV0dXJuICFfX3g7IH0KfTsK IyAyNzEgIi91c3IvY3lnbnVzL2Jpbi8uLi9pbmNsdWRlL2MrKy8zLjEuMS9iaXRzL3N0bF9mdW5j dGlvbi5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfUHJlZGljYXRlPgpjbGFzcyB1bmFyeV9uZWdhdGUK ICA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjx0eXBlbmFtZSBfUHJlZGljYXRlOjphcmd1bWVudF90 eXBlLCBib29sPiB7CnByb3RlY3RlZDoKICBfUHJlZGljYXRlIF9NX3ByZWQ7CnB1YmxpYzoKICBl eHBsaWNpdCB1bmFyeV9uZWdhdGUoY29uc3QgX1ByZWRpY2F0ZSYgX194KSA6IF9NX3ByZWQoX194 KSB7fQogIGJvb2wgb3BlcmF0b3IoKShjb25zdCB0eXBlbmFtZSBfUHJlZGljYXRlOjphcmd1bWVu dF90eXBlJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiAhX01fcHJlZChfX3gpOwogIH0KfTsKCgp0 ZW1wbGF0ZSA8Y2xhc3MgX1ByZWRpY2F0ZT4KaW5saW5lIHVuYXJ5X25lZ2F0ZTxfUHJlZGljYXRl Pgpub3QxKGNvbnN0IF9QcmVkaWNhdGUmIF9fcHJlZCkKewogIHJldHVybiB1bmFyeV9uZWdhdGU8 X1ByZWRpY2F0ZT4oX19wcmVkKTsKfQoKCnRlbXBsYXRlIDxjbGFzcyBfUHJlZGljYXRlPgpjbGFz cyBiaW5hcnlfbmVnYXRlCiAgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPHR5cGVuYW1lIF9QcmVk aWNhdGU6OmZpcnN0X2FyZ3VtZW50X3R5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5 cGVuYW1lIF9QcmVkaWNhdGU6OnNlY29uZF9hcmd1bWVudF90eXBlLAogICAgICAgICAgICAgICAg ICAgICAgICAgICBib29sPiB7CnByb3RlY3RlZDoKICBfUHJlZGljYXRlIF9NX3ByZWQ7CnB1Ymxp YzoKICBleHBsaWNpdCBiaW5hcnlfbmVnYXRlKGNvbnN0IF9QcmVkaWNhdGUmIF9feCkgOiBfTV9w cmVkKF9feCkge30KICBib29sIG9wZXJhdG9yKCkoY29uc3QgdHlwZW5hbWUgX1ByZWRpY2F0ZTo6 Zmlyc3RfYXJndW1lbnRfdHlwZSYgX194LAogICAgICAgICAgICAgICAgICBjb25zdCB0eXBlbmFt ZSBfUHJlZGljYXRlOjpzZWNvbmRfYXJndW1lbnRfdHlwZSYgX195KSBjb25zdAogIHsKICAgIHJl dHVybiAhX01fcHJlZChfX3gsIF9feSk7CiAgfQp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfUHJlZGlj YXRlPgppbmxpbmUgYmluYXJ5X25lZ2F0ZTxfUHJlZGljYXRlPgpub3QyKGNvbnN0IF9QcmVkaWNh dGUmIF9fcHJlZCkKewogIHJldHVybiBiaW5hcnlfbmVnYXRlPF9QcmVkaWNhdGU+KF9fcHJlZCk7 Cn0KIyAzNDkgIi91c3IvY3lnbnVzL2Jpbi8uLi9pbmNsdWRlL2MrKy8zLjEuMS9iaXRzL3N0bF9m dW5jdGlvbi5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfT3BlcmF0aW9uPgpjbGFzcyBiaW5kZXIxc3QK ICA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjx0eXBlbmFtZSBfT3BlcmF0aW9uOjpzZWNvbmRfYXJn dW1lbnRfdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBfT3BlcmF0aW9u OjpyZXN1bHRfdHlwZT4gewpwcm90ZWN0ZWQ6CiAgX09wZXJhdGlvbiBvcDsKICB0eXBlbmFtZSBf T3BlcmF0aW9uOjpmaXJzdF9hcmd1bWVudF90eXBlIHZhbHVlOwpwdWJsaWM6CiAgYmluZGVyMXN0 KGNvbnN0IF9PcGVyYXRpb24mIF9feCwKICAgICAgICAgICAgY29uc3QgdHlwZW5hbWUgX09wZXJh dGlvbjo6Zmlyc3RfYXJndW1lbnRfdHlwZSYgX195KQogICAgICA6IG9wKF9feCksIHZhbHVlKF9f eSkge30KICB0eXBlbmFtZSBfT3BlcmF0aW9uOjpyZXN1bHRfdHlwZQogIG9wZXJhdG9yKCkoY29u c3QgdHlwZW5hbWUgX09wZXJhdGlvbjo6c2Vjb25kX2FyZ3VtZW50X3R5cGUmIF9feCkgY29uc3Qg ewogICAgcmV0dXJuIG9wKHZhbHVlLCBfX3gpOwogIH0KCgogIHR5cGVuYW1lIF9PcGVyYXRpb246 OnJlc3VsdF90eXBlCiAgb3BlcmF0b3IoKSh0eXBlbmFtZSBfT3BlcmF0aW9uOjpzZWNvbmRfYXJn dW1lbnRfdHlwZSYgX194KSBjb25zdCB7CiAgICByZXR1cm4gb3AodmFsdWUsIF9feCk7CiAgfQoK fTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX09wZXJhdGlvbiwgY2xhc3MgX1RwPgppbmxpbmUgYmluZGVy MXN0PF9PcGVyYXRpb24+CmJpbmQxc3QoY29uc3QgX09wZXJhdGlvbiYgX19mbiwgY29uc3QgX1Rw JiBfX3gpCnsKICB0eXBlZGVmIHR5cGVuYW1lIF9PcGVyYXRpb246OmZpcnN0X2FyZ3VtZW50X3R5 cGUgX0FyZzFfdHlwZTsKICByZXR1cm4gYmluZGVyMXN0PF9PcGVyYXRpb24+KF9fZm4sIF9Bcmcx X3R5cGUoX194KSk7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX09wZXJhdGlvbj4KY2xhc3MgYmluZGVy Mm5kCiAgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248dHlwZW5hbWUgX09wZXJhdGlvbjo6Zmlyc3Rf YXJndW1lbnRfdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBfT3BlcmF0 aW9uOjpyZXN1bHRfdHlwZT4gewpwcm90ZWN0ZWQ6CiAgX09wZXJhdGlvbiBvcDsKICB0eXBlbmFt ZSBfT3BlcmF0aW9uOjpzZWNvbmRfYXJndW1lbnRfdHlwZSB2YWx1ZTsKcHVibGljOgogIGJpbmRl cjJuZChjb25zdCBfT3BlcmF0aW9uJiBfX3gsCiAgICAgICAgICAgIGNvbnN0IHR5cGVuYW1lIF9P cGVyYXRpb246OnNlY29uZF9hcmd1bWVudF90eXBlJiBfX3kpCiAgICAgIDogb3AoX194KSwgdmFs dWUoX195KSB7fQogIHR5cGVuYW1lIF9PcGVyYXRpb246OnJlc3VsdF90eXBlCiAgb3BlcmF0b3Io KShjb25zdCB0eXBlbmFtZSBfT3BlcmF0aW9uOjpmaXJzdF9hcmd1bWVudF90eXBlJiBfX3gpIGNv bnN0IHsKICAgIHJldHVybiBvcChfX3gsIHZhbHVlKTsKICB9CgoKICB0eXBlbmFtZSBfT3BlcmF0 aW9uOjpyZXN1bHRfdHlwZQogIG9wZXJhdG9yKCkodHlwZW5hbWUgX09wZXJhdGlvbjo6Zmlyc3Rf YXJndW1lbnRfdHlwZSYgX194KSBjb25zdCB7CiAgICByZXR1cm4gb3AoX194LCB2YWx1ZSk7CiAg fQoKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX09wZXJhdGlvbiwgY2xhc3MgX1RwPgppbmxpbmUgYmlu ZGVyMm5kPF9PcGVyYXRpb24+CmJpbmQybmQoY29uc3QgX09wZXJhdGlvbiYgX19mbiwgY29uc3Qg X1RwJiBfX3gpCnsKICB0eXBlZGVmIHR5cGVuYW1lIF9PcGVyYXRpb246OnNlY29uZF9hcmd1bWVu dF90eXBlIF9BcmcyX3R5cGU7CiAgcmV0dXJuIGJpbmRlcjJuZDxfT3BlcmF0aW9uPihfX2ZuLCBf QXJnMl90eXBlKF9feCkpOwp9CiMgNDM4ICIvdXNyL2N5Z251cy9iaW4vLi4vaW5jbHVkZS9jKysv My4xLjEvYml0cy9zdGxfZnVuY3Rpb24uaCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX0FyZywgY2xhc3Mg X1Jlc3VsdD4KY2xhc3MgcG9pbnRlcl90b191bmFyeV9mdW5jdGlvbiA6IHB1YmxpYyB1bmFyeV9m dW5jdGlvbjxfQXJnLCBfUmVzdWx0PiB7CnByb3RlY3RlZDoKICBfUmVzdWx0ICgqX01fcHRyKShf QXJnKTsKcHVibGljOgogIHBvaW50ZXJfdG9fdW5hcnlfZnVuY3Rpb24oKSB7fQogIGV4cGxpY2l0 IHBvaW50ZXJfdG9fdW5hcnlfZnVuY3Rpb24oX1Jlc3VsdCAoKl9feCkoX0FyZykpIDogX01fcHRy KF9feCkge30KICBfUmVzdWx0IG9wZXJhdG9yKCkoX0FyZyBfX3gpIGNvbnN0IHsgcmV0dXJuIF9N X3B0cihfX3gpOyB9Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9BcmcsIGNsYXNzIF9SZXN1bHQ+Cmlu bGluZSBwb2ludGVyX3RvX3VuYXJ5X2Z1bmN0aW9uPF9BcmcsIF9SZXN1bHQ+IHB0cl9mdW4oX1Jl c3VsdCAoKl9feCkoX0FyZykpCnsKICByZXR1cm4gcG9pbnRlcl90b191bmFyeV9mdW5jdGlvbjxf QXJnLCBfUmVzdWx0PihfX3gpOwp9CgoKdGVtcGxhdGUgPGNsYXNzIF9BcmcxLCBjbGFzcyBfQXJn MiwgY2xhc3MgX1Jlc3VsdD4KY2xhc3MgcG9pbnRlcl90b19iaW5hcnlfZnVuY3Rpb24gOgogIHB1 YmxpYyBiaW5hcnlfZnVuY3Rpb248X0FyZzEsX0FyZzIsX1Jlc3VsdD4gewpwcm90ZWN0ZWQ6CiAg ICBfUmVzdWx0ICgqX01fcHRyKShfQXJnMSwgX0FyZzIpOwpwdWJsaWM6CiAgICBwb2ludGVyX3Rv X2JpbmFyeV9mdW5jdGlvbigpIHt9CiAgICBleHBsaWNpdCBwb2ludGVyX3RvX2JpbmFyeV9mdW5j dGlvbihfUmVzdWx0ICgqX194KShfQXJnMSwgX0FyZzIpKQogICAgICA6IF9NX3B0cihfX3gpIHt9 CiAgICBfUmVzdWx0IG9wZXJhdG9yKCkoX0FyZzEgX194LCBfQXJnMiBfX3kpIGNvbnN0IHsKICAg ICAgcmV0dXJuIF9NX3B0cihfX3gsIF9feSk7CiAgICB9Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9B cmcxLCBjbGFzcyBfQXJnMiwgY2xhc3MgX1Jlc3VsdD4KaW5saW5lIHBvaW50ZXJfdG9fYmluYXJ5 X2Z1bmN0aW9uPF9BcmcxLF9BcmcyLF9SZXN1bHQ+CnB0cl9mdW4oX1Jlc3VsdCAoKl9feCkoX0Fy ZzEsIF9BcmcyKSkgewogIHJldHVybiBwb2ludGVyX3RvX2JpbmFyeV9mdW5jdGlvbjxfQXJnMSxf QXJnMixfUmVzdWx0PihfX3gpOwp9CgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IF9JZGVu dGl0eSA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfVHAsX1RwPiB7CiAgX1RwJiBvcGVyYXRvcigp KF9UcCYgX194KSBjb25zdCB7IHJldHVybiBfX3g7IH0KICBjb25zdCBfVHAmIG9wZXJhdG9yKCko Y29uc3QgX1RwJiBfX3gpIGNvbnN0IHsgcmV0dXJuIF9feDsgfQp9OwoKdGVtcGxhdGUgPGNsYXNz IF9QYWlyPgpzdHJ1Y3QgX1NlbGVjdDFzdCA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfUGFpciwg dHlwZW5hbWUgX1BhaXI6OmZpcnN0X3R5cGU+IHsKICB0eXBlbmFtZSBfUGFpcjo6Zmlyc3RfdHlw ZSYgb3BlcmF0b3IoKShfUGFpciYgX194KSBjb25zdCB7CiAgICByZXR1cm4gX194LmZpcnN0Owog IH0KICBjb25zdCB0eXBlbmFtZSBfUGFpcjo6Zmlyc3RfdHlwZSYgb3BlcmF0b3IoKShjb25zdCBf UGFpciYgX194KSBjb25zdCB7CiAgICByZXR1cm4gX194LmZpcnN0OwogIH0KfTsKCnRlbXBsYXRl IDxjbGFzcyBfUGFpcj4Kc3RydWN0IF9TZWxlY3QybmQgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248 X1BhaXIsIHR5cGVuYW1lIF9QYWlyOjpzZWNvbmRfdHlwZT4KewogIHR5cGVuYW1lIF9QYWlyOjpz ZWNvbmRfdHlwZSYgb3BlcmF0b3IoKShfUGFpciYgX194KSBjb25zdCB7CiAgICByZXR1cm4gX194 LnNlY29uZDsKICB9CiAgY29uc3QgdHlwZW5hbWUgX1BhaXI6OnNlY29uZF90eXBlJiBvcGVyYXRv cigpKGNvbnN0IF9QYWlyJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBfX3guc2Vjb25kOwogIH0K fTsKIyA1MjggIi91c3IvY3lnbnVzL2Jpbi8uLi9pbmNsdWRlL2MrKy8zLjEuMS9iaXRzL3N0bF9m dW5jdGlvbi5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHA+CmNsYXNzIG1lbV9m dW5fdCA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfVHAqLF9SZXQ+IHsKcHVibGljOgogIGV4cGxp Y2l0IG1lbV9mdW5fdChfUmV0IChfVHA6OipfX3BmKSgpKSA6IF9NX2YoX19wZikge30KICBfUmV0 IG9wZXJhdG9yKCkoX1RwKiBfX3ApIGNvbnN0IHsgcmV0dXJuIChfX3AtPipfTV9mKSgpOyB9CnBy aXZhdGU6CiAgX1JldCAoX1RwOjoqX01fZikoKTsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwg Y2xhc3MgX1RwPgpjbGFzcyBjb25zdF9tZW1fZnVuX3QgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248 Y29uc3QgX1RwKixfUmV0PiB7CnB1YmxpYzoKICBleHBsaWNpdCBjb25zdF9tZW1fZnVuX3QoX1Jl dCAoX1RwOjoqX19wZikoKSBjb25zdCkgOiBfTV9mKF9fcGYpIHt9CiAgX1JldCBvcGVyYXRvcigp KGNvbnN0IF9UcCogX19wKSBjb25zdCB7IHJldHVybiAoX19wLT4qX01fZikoKTsgfQpwcml2YXRl OgogIF9SZXQgKF9UcDo6Kl9NX2YpKCkgY29uc3Q7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9SZXQs IGNsYXNzIF9UcD4KY2xhc3MgbWVtX2Z1bl9yZWZfdCA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxf VHAsX1JldD4gewpwdWJsaWM6CiAgZXhwbGljaXQgbWVtX2Z1bl9yZWZfdChfUmV0IChfVHA6Oipf X3BmKSgpKSA6IF9NX2YoX19wZikge30KICBfUmV0IG9wZXJhdG9yKCkoX1RwJiBfX3IpIGNvbnN0 IHsgcmV0dXJuIChfX3IuKl9NX2YpKCk7IH0KcHJpdmF0ZToKICBfUmV0IChfVHA6OipfTV9mKSgp Owp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHA+CmNsYXNzIGNvbnN0X21lbV9m dW5fcmVmX3QgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X1RwLF9SZXQ+IHsKcHVibGljOgogIGV4 cGxpY2l0IGNvbnN0X21lbV9mdW5fcmVmX3QoX1JldCAoX1RwOjoqX19wZikoKSBjb25zdCkgOiBf TV9mKF9fcGYpIHt9CiAgX1JldCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX19yKSBjb25zdCB7IHJl dHVybiAoX19yLipfTV9mKSgpOyB9CnByaXZhdGU6CiAgX1JldCAoX1RwOjoqX01fZikoKSBjb25z dDsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwLCBjbGFzcyBfQXJnPgpjbGFz cyBtZW1fZnVuMV90IDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAqLF9BcmcsX1JldD4gewpw dWJsaWM6CiAgZXhwbGljaXQgbWVtX2Z1bjFfdChfUmV0IChfVHA6OipfX3BmKShfQXJnKSkgOiBf TV9mKF9fcGYpIHt9CiAgX1JldCBvcGVyYXRvcigpKF9UcCogX19wLCBfQXJnIF9feCkgY29uc3Qg eyByZXR1cm4gKF9fcC0+Kl9NX2YpKF9feCk7IH0KcHJpdmF0ZToKICBfUmV0IChfVHA6OipfTV9m KShfQXJnKTsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwLCBjbGFzcyBfQXJn PgpjbGFzcyBjb25zdF9tZW1fZnVuMV90IDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxjb25zdCBf VHAqLF9BcmcsX1JldD4gewpwdWJsaWM6CiAgZXhwbGljaXQgY29uc3RfbWVtX2Z1bjFfdChfUmV0 IChfVHA6OipfX3BmKShfQXJnKSBjb25zdCkgOiBfTV9mKF9fcGYpIHt9CiAgX1JldCBvcGVyYXRv cigpKGNvbnN0IF9UcCogX19wLCBfQXJnIF9feCkgY29uc3QKICAgIHsgcmV0dXJuIChfX3AtPipf TV9mKShfX3gpOyB9CnByaXZhdGU6CiAgX1JldCAoX1RwOjoqX01fZikoX0FyZykgY29uc3Q7Cn07 CgoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4KY2xhc3MgbWVt X2Z1bjFfcmVmX3QgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfQXJnLF9SZXQ+IHsKcHVi bGljOgogIGV4cGxpY2l0IG1lbV9mdW4xX3JlZl90KF9SZXQgKF9UcDo6Kl9fcGYpKF9BcmcpKSA6 IF9NX2YoX19wZikge30KICBfUmV0IG9wZXJhdG9yKCkoX1RwJiBfX3IsIF9BcmcgX194KSBjb25z dCB7IHJldHVybiAoX19yLipfTV9mKShfX3gpOyB9CnByaXZhdGU6CiAgX1JldCAoX1RwOjoqX01f ZikoX0FyZyk7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcCwgY2xhc3MgX0Fy Zz4KY2xhc3MgY29uc3RfbWVtX2Z1bjFfcmVmX3QgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9U cCxfQXJnLF9SZXQ+IHsKcHVibGljOgogIGV4cGxpY2l0IGNvbnN0X21lbV9mdW4xX3JlZl90KF9S ZXQgKF9UcDo6Kl9fcGYpKF9BcmcpIGNvbnN0KSA6IF9NX2YoX19wZikge30KICBfUmV0IG9wZXJh dG9yKCkoY29uc3QgX1RwJiBfX3IsIF9BcmcgX194KSBjb25zdCB7IHJldHVybiAoX19yLipfTV9m KShfX3gpOyB9CnByaXZhdGU6CiAgX1JldCAoX1RwOjoqX01fZikoX0FyZykgY29uc3Q7Cn07CgoK dGVtcGxhdGUgPGNsYXNzIF9UcD4KY2xhc3MgbWVtX2Z1bl90PHZvaWQsIF9UcD4gOiBwdWJsaWMg dW5hcnlfZnVuY3Rpb248X1RwKix2b2lkPiB7CnB1YmxpYzoKICBleHBsaWNpdCBtZW1fZnVuX3Qo dm9pZCAoX1RwOjoqX19wZikoKSkgOiBfTV9mKF9fcGYpIHt9CiAgdm9pZCBvcGVyYXRvcigpKF9U cCogX19wKSBjb25zdCB7IChfX3AtPipfTV9mKSgpOyB9CnByaXZhdGU6CiAgdm9pZCAoX1RwOjoq X01fZikoKTsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpjbGFzcyBjb25zdF9tZW1fZnVuX3Q8 dm9pZCwgX1RwPiA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxjb25zdCBfVHAqLHZvaWQ+IHsKcHVi bGljOgogIGV4cGxpY2l0IGNvbnN0X21lbV9mdW5fdCh2b2lkIChfVHA6OipfX3BmKSgpIGNvbnN0 KSA6IF9NX2YoX19wZikge30KICB2b2lkIG9wZXJhdG9yKCkoY29uc3QgX1RwKiBfX3ApIGNvbnN0 IHsgKF9fcC0+Kl9NX2YpKCk7IH0KcHJpdmF0ZToKICB2b2lkIChfVHA6OipfTV9mKSgpIGNvbnN0 Owp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CmNsYXNzIG1lbV9mdW5fcmVmX3Q8dm9pZCwgX1Rw PiA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfVHAsdm9pZD4gewpwdWJsaWM6CiAgZXhwbGljaXQg bWVtX2Z1bl9yZWZfdCh2b2lkIChfVHA6OipfX3BmKSgpKSA6IF9NX2YoX19wZikge30KICB2b2lk IG9wZXJhdG9yKCkoX1RwJiBfX3IpIGNvbnN0IHsgKF9fci4qX01fZikoKTsgfQpwcml2YXRlOgog IHZvaWQgKF9UcDo6Kl9NX2YpKCk7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4KY2xhc3MgY29u c3RfbWVtX2Z1bl9yZWZfdDx2b2lkLCBfVHA+IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9UcCx2 b2lkPiB7CnB1YmxpYzoKICBleHBsaWNpdCBjb25zdF9tZW1fZnVuX3JlZl90KHZvaWQgKF9UcDo6 Kl9fcGYpKCkgY29uc3QpIDogX01fZihfX3BmKSB7fQogIHZvaWQgb3BlcmF0b3IoKShjb25zdCBf VHAmIF9fcikgY29uc3QgeyAoX19yLipfTV9mKSgpOyB9CnByaXZhdGU6CiAgdm9pZCAoX1RwOjoq X01fZikoKSBjb25zdDsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQXJnPgpjbGFz cyBtZW1fZnVuMV90PHZvaWQsIF9UcCwgX0FyZz4gOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9U cCosX0FyZyx2b2lkPiB7CnB1YmxpYzoKICBleHBsaWNpdCBtZW1fZnVuMV90KHZvaWQgKF9UcDo6 Kl9fcGYpKF9BcmcpKSA6IF9NX2YoX19wZikge30KICB2b2lkIG9wZXJhdG9yKCkoX1RwKiBfX3As IF9BcmcgX194KSBjb25zdCB7IChfX3AtPipfTV9mKShfX3gpOyB9CnByaXZhdGU6CiAgdm9pZCAo X1RwOjoqX01fZikoX0FyZyk7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4K Y2xhc3MgY29uc3RfbWVtX2Z1bjFfdDx2b2lkLCBfVHAsIF9Bcmc+CiAgOiBwdWJsaWMgYmluYXJ5 X2Z1bmN0aW9uPGNvbnN0IF9UcCosX0FyZyx2b2lkPiB7CnB1YmxpYzoKICBleHBsaWNpdCBjb25z dF9tZW1fZnVuMV90KHZvaWQgKF9UcDo6Kl9fcGYpKF9BcmcpIGNvbnN0KSA6IF9NX2YoX19wZikg e30KICB2b2lkIG9wZXJhdG9yKCkoY29uc3QgX1RwKiBfX3AsIF9BcmcgX194KSBjb25zdCB7IChf X3AtPipfTV9mKShfX3gpOyB9CnByaXZhdGU6CiAgdm9pZCAoX1RwOjoqX01fZikoX0FyZykgY29u c3Q7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4KY2xhc3MgbWVtX2Z1bjFf cmVmX3Q8dm9pZCwgX1RwLCBfQXJnPgogIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX0Fy Zyx2b2lkPiB7CnB1YmxpYzoKICBleHBsaWNpdCBtZW1fZnVuMV9yZWZfdCh2b2lkIChfVHA6Oipf X3BmKShfQXJnKSkgOiBfTV9mKF9fcGYpIHt9CiAgdm9pZCBvcGVyYXRvcigpKF9UcCYgX19yLCBf QXJnIF9feCkgY29uc3QgeyAoX19yLipfTV9mKShfX3gpOyB9CnByaXZhdGU6CiAgdm9pZCAoX1Rw OjoqX01fZikoX0FyZyk7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4KY2xh c3MgY29uc3RfbWVtX2Z1bjFfcmVmX3Q8dm9pZCwgX1RwLCBfQXJnPgogIDogcHVibGljIGJpbmFy eV9mdW5jdGlvbjxfVHAsX0FyZyx2b2lkPiB7CnB1YmxpYzoKICBleHBsaWNpdCBjb25zdF9tZW1f ZnVuMV9yZWZfdCh2b2lkIChfVHA6OipfX3BmKShfQXJnKSBjb25zdCkgOiBfTV9mKF9fcGYpIHt9 CiAgdm9pZCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX19yLCBfQXJnIF9feCkgY29uc3QgeyAoX19y LipfTV9mKShfX3gpOyB9CnByaXZhdGU6CiAgdm9pZCAoX1RwOjoqX01fZikoX0FyZykgY29uc3Q7 Cn07CgoKCgoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcD4KaW5saW5lIG1lbV9mdW5f dDxfUmV0LF9UcD4gbWVtX2Z1bihfUmV0IChfVHA6OipfX2YpKCkpCiAgeyByZXR1cm4gbWVtX2Z1 bl90PF9SZXQsX1RwPihfX2YpOyB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwPgpp bmxpbmUgY29uc3RfbWVtX2Z1bl90PF9SZXQsX1RwPiBtZW1fZnVuKF9SZXQgKF9UcDo6Kl9fZiko KSBjb25zdCkKICB7IHJldHVybiBjb25zdF9tZW1fZnVuX3Q8X1JldCxfVHA+KF9fZik7IH0KCnRl bXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHA+CmlubGluZSBtZW1fZnVuX3JlZl90PF9SZXQs X1RwPiBtZW1fZnVuX3JlZihfUmV0IChfVHA6OipfX2YpKCkpCiAgeyByZXR1cm4gbWVtX2Z1bl9y ZWZfdDxfUmV0LF9UcD4oX19mKTsgfQoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcD4K aW5saW5lIGNvbnN0X21lbV9mdW5fcmVmX3Q8X1JldCxfVHA+IG1lbV9mdW5fcmVmKF9SZXQgKF9U cDo6Kl9fZikoKSBjb25zdCkKICB7IHJldHVybiBjb25zdF9tZW1fZnVuX3JlZl90PF9SZXQsX1Rw PihfX2YpOyB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwLCBjbGFzcyBfQXJnPgpp bmxpbmUgbWVtX2Z1bjFfdDxfUmV0LF9UcCxfQXJnPiBtZW1fZnVuKF9SZXQgKF9UcDo6Kl9fZiko X0FyZykpCiAgeyByZXR1cm4gbWVtX2Z1bjFfdDxfUmV0LF9UcCxfQXJnPihfX2YpOyB9Cgp0ZW1w bGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwLCBjbGFzcyBfQXJnPgppbmxpbmUgY29uc3RfbWVt X2Z1bjFfdDxfUmV0LF9UcCxfQXJnPiBtZW1fZnVuKF9SZXQgKF9UcDo6Kl9fZikoX0FyZykgY29u c3QpCiAgeyByZXR1cm4gY29uc3RfbWVtX2Z1bjFfdDxfUmV0LF9UcCxfQXJnPihfX2YpOyB9Cgp0 ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwLCBjbGFzcyBfQXJnPgppbmxpbmUgbWVtX2Z1 bjFfcmVmX3Q8X1JldCxfVHAsX0FyZz4gbWVtX2Z1bl9yZWYoX1JldCAoX1RwOjoqX19mKShfQXJn KSkKICB7IHJldHVybiBtZW1fZnVuMV9yZWZfdDxfUmV0LF9UcCxfQXJnPihfX2YpOyB9Cgp0ZW1w bGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwLCBjbGFzcyBfQXJnPgppbmxpbmUgY29uc3RfbWVt X2Z1bjFfcmVmX3Q8X1JldCxfVHAsX0FyZz4KbWVtX2Z1bl9yZWYoX1JldCAoX1RwOjoqX19mKShf QXJnKSBjb25zdCkKICB7IHJldHVybiBjb25zdF9tZW1fZnVuMV9yZWZfdDxfUmV0LF9UcCxfQXJn PihfX2YpOyB9CgoKCn0KIyA1MyAiL3Vzci9jeWdudXMvYmluLy4uL2luY2x1ZGUvYysrLzMuMS4x L3N0cmluZyIgMiAzCiMgMSAiL3Vzci9jeWdudXMvYmluLy4uL2luY2x1ZGUvYysrLzMuMS4xL2Jp dHMvYmFzaWNfc3RyaW5nLmgiIDEgMwojIDQ0ICIvdXNyL2N5Z251cy9iaW4vLi4vaW5jbHVkZS9j KysvMy4xLjEvYml0cy9iYXNpY19zdHJpbmcuaCIgMwoKIyAxICIvdXNyL2N5Z251cy9iaW4vLi4v aW5jbHVkZS9jKysvMy4xLjEvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9hdG9taWNpdHkuaCIgMSAz CiMgMzMgIi91c3IvY3lnbnVzL2Jpbi8uLi9pbmNsdWRlL2MrKy8zLjEuMS9pNjg2LXBjLWxpbnV4 LWdudS9iaXRzL2F0b21pY2l0eS5oIiAzCnR5cGVkZWYgaW50IF9BdG9taWNfd29yZDsKCnN0YXRp YyBpbmxpbmUgX0F0b21pY193b3JkCl9fYXR0cmlidXRlX18gKChfX3VudXNlZF9fKSkKX19leGNo YW5nZV9hbmRfYWRkICh2b2xhdGlsZSBfQXRvbWljX3dvcmQgKl9fbWVtLCBpbnQgX192YWwpCnsK ICByZWdpc3RlciBfQXRvbWljX3dvcmQgX19yZXN1bHQ7CiAgX19hc21fXyBfX3ZvbGF0aWxlX18g KCJsb2NrOyB4YWRkbCAlMCwlMiIKICAgICAgICAgICAgICAgICAgICAgICAgOiAiPXIiIChfX3Jl c3VsdCkKICAgICAgICAgICAgICAgICAgICAgICAgOiAiMCIgKF9fdmFsKSwgIm0iICgqX19tZW0p CiAgICAgICAgICAgICAgICAgICAgICAgIDogIm1lbW9yeSIpOwogIHJldHVybiBfX3Jlc3VsdDsK fQoKc3RhdGljIGlubGluZSB2b2lkCl9fYXR0cmlidXRlX18gKChfX3VudXNlZF9fKSkKX19hdG9t aWNfYWRkICh2b2xhdGlsZSBfQXRvbWljX3dvcmQqIF9fbWVtLCBpbnQgX192YWwpCnsKICBfX2Fz bV9fIF9fdm9sYXRpbGVfXyAoImxvY2s7IGFkZGwgJTAsJTEiCiAgICAgICAgICAgICAgICAgICAg ICAgIDogOiAiaXIiIChfX3ZhbCksICJtIiAoKl9fbWVtKSA6ICJtZW1vcnkiKTsKfQojIDQ2ICIv dXNyL2N5Z251cy9iaW4vLi4vaW5jbHVkZS9jKysvMy4xLjEvYml0cy9iYXNpY19zdHJpbmcuaCIg MiAzCgpuYW1lc3BhY2Ugc3RkCnsKIyA4OCAiL3Vzci9jeWdudXMvYmluLy4uL2luY2x1ZGUvYysr LzMuMS4xL2JpdHMvYmFzaWNfc3RyaW5nLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs IHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGNsYXNzIGJhc2ljX3N0cmlu ZwogICAgewoKICAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiBfVHJhaXRzIHRyYWl0c190eXBlOwog ICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6OmNoYXJfdHlwZSB2YWx1ZV90eXBlOwogICAg ICB0eXBlZGVmIF9BbGxvYyBhbGxvY2F0b3JfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBf QWxsb2M6OnNpemVfdHlwZSBzaXplX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9j OjpkaWZmZXJlbmNlX3R5cGUgZGlmZmVyZW5jZV90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1l IF9BbGxvYzo6cmVmZXJlbmNlIHJlZmVyZW5jZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxs b2M6OmNvbnN0X3JlZmVyZW5jZSBjb25zdF9yZWZlcmVuY2U7CiAgICAgIHR5cGVkZWYgdHlwZW5h bWUgX0FsbG9jOjpwb2ludGVyIHBvaW50ZXI7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9j Ojpjb25zdF9wb2ludGVyIGNvbnN0X3BvaW50ZXI7CiAgICAgIHR5cGVkZWYgX19nbnVfY3h4Ojpf X25vcm1hbF9pdGVyYXRvcjxwb2ludGVyLCBiYXNpY19zdHJpbmc+IGl0ZXJhdG9yOwogICAgICB0 eXBlZGVmIF9fZ251X2N4eDo6X19ub3JtYWxfaXRlcmF0b3I8Y29uc3RfcG9pbnRlciwgYmFzaWNf c3RyaW5nPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjb25zdF9pdGVyYXRvcjsKICAgICAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9y PGNvbnN0X2l0ZXJhdG9yPiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yOwogICAgICB0eXBlZGVmIHJl dmVyc2VfaXRlcmF0b3I8aXRlcmF0b3I+IHJldmVyc2VfaXRlcmF0b3I7CgogICAgcHJpdmF0ZToK IyAxMjMgIi91c3IvY3lnbnVzL2Jpbi8uLi9pbmNsdWRlL2MrKy8zLjEuMS9iaXRzL2Jhc2ljX3N0 cmluZy5oIiAzCiAgICAgIHN0cnVjdCBfUmVwCiAgICAgIHsKCiAgICAgICAgdHlwZWRlZiB0eXBl bmFtZSBfQWxsb2M6OnRlbXBsYXRlIHJlYmluZDxjaGFyPjo6b3RoZXIgX1Jhd19ieXRlc19hbGxv YzsKIyAxNDEgIi91c3IvY3lnbnVzL2Jpbi8uLi9pbmNsdWRlL2MrKy8zLjEuMS9iaXRzL2Jhc2lj X3N0cmluZy5oIiAzCiAgICAgICAgc3RhdGljIGNvbnN0IHNpemVfdHlwZSBfU19tYXhfc2l6ZTsK ICAgICAgICBzdGF0aWMgY29uc3QgX0NoYXJUIF9TX3Rlcm1pbmFsOwoKICAgICAgICBzaXplX3R5 cGUgX01fbGVuZ3RoOwogICAgICAgIHNpemVfdHlwZSBfTV9jYXBhY2l0eTsKICAgICAgICBfQXRv bWljX3dvcmQgX01fcmVmZXJlbmNlczsKCiAgICAgICAgYm9vbAogICAgICAgIF9NX2lzX2xlYWtl ZCgpIGNvbnN0CiAgICAgICAgeyByZXR1cm4gX01fcmVmZXJlbmNlcyA8IDA7IH0KCiAgICAgICAg Ym9vbAogICAgICAgIF9NX2lzX3NoYXJlZCgpIGNvbnN0CiAgICAgICAgeyByZXR1cm4gX01fcmVm ZXJlbmNlcyA+IDA7IH0KCiAgICAgICAgdm9pZAogICAgICAgIF9NX3NldF9sZWFrZWQoKQogICAg ICAgIHsgX01fcmVmZXJlbmNlcyA9IC0xOyB9CgogICAgICAgIHZvaWQKICAgICAgICBfTV9zZXRf c2hhcmFibGUoKQogICAgICAgIHsgX01fcmVmZXJlbmNlcyA9IDA7IH0KCiAgICAgICAgX0NoYXJU KgogICAgICAgIF9NX3JlZmRhdGEoKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gcmVpbnRlcnBy ZXRfY2FzdDxfQ2hhclQqPih0aGlzICsgMSk7IH0KCiAgICAgICAgX0NoYXJUJgogICAgICAgIG9w ZXJhdG9yW10oc2l6ZV90IF9fcykgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIF9NX3JlZmRhdGEo KSBbX19zXTsgfQoKICAgICAgICBfQ2hhclQqCiAgICAgICAgX01fZ3JhYihjb25zdCBfQWxsb2Mm IF9fYWxsb2MxLCBjb25zdCBfQWxsb2MmIF9fYWxsb2MyKQogICAgICAgIHsKICAgICAgICAgIHJl dHVybiAoIV9NX2lzX2xlYWtlZCgpICYmIF9fYWxsb2MxID09IF9fYWxsb2MyKQogICAgICAgICAg ICAgICAgICA/IF9NX3JlZmNvcHkoKSA6IF9NX2Nsb25lKF9fYWxsb2MxKTsKICAgICAgICB9CgoK ICAgICAgICBzdGF0aWMgX1JlcCoKICAgICAgICBfU19jcmVhdGUoc2l6ZV90LCBjb25zdCBfQWxs b2MmKTsKCiAgICAgICAgdm9pZAogICAgICAgIF9NX2Rpc3Bvc2UoY29uc3QgX0FsbG9jJiBfX2Ep CiAgICAgICAgewogICAgICAgICAgaWYgKF9fZXhjaGFuZ2VfYW5kX2FkZCgmX01fcmVmZXJlbmNl cywgLTEpIDw9IDApCiAgICAgICAgICAgIF9NX2Rlc3Ryb3koX19hKTsKICAgICAgICB9CgogICAg ICAgIHZvaWQKICAgICAgICBfTV9kZXN0cm95KGNvbnN0IF9BbGxvYyYpIHRocm93KCk7CgogICAg ICAgIF9DaGFyVCoKICAgICAgICBfTV9yZWZjb3B5KCkgdGhyb3coKQogICAgICAgIHsKICAgICAg ICAgIF9fYXRvbWljX2FkZCgmX01fcmVmZXJlbmNlcywgMSk7CiAgICAgICAgICByZXR1cm4gX01f cmVmZGF0YSgpOwogICAgICAgIH0KCiAgICAgICAgX0NoYXJUKgogICAgICAgIF9NX2Nsb25lKGNv bnN0IF9BbGxvYyYsIHNpemVfdHlwZSBfX3JlcyA9IDApOwogICAgICB9OwoKCiAgICAgIHN0cnVj dCBfQWxsb2NfaGlkZXIgOiBfQWxsb2MKICAgICAgewogICAgICAgIF9BbGxvY19oaWRlcihfQ2hh clQqIF9fZGF0LCBjb25zdCBfQWxsb2MmIF9fYSkKICAgICAgICA6IF9BbGxvYyhfX2EpLCBfTV9w KF9fZGF0KSB7IH0KCiAgICAgICAgX0NoYXJUKiBfTV9wOwogICAgICB9OwoKICAgIHB1YmxpYzoK CgoKICAgICAgc3RhdGljIGNvbnN0IHNpemVfdHlwZSBucG9zID0gc3RhdGljX2Nhc3Q8c2l6ZV90 eXBlPigtMSk7CgogICAgcHJpdmF0ZToKCiAgICAgIG11dGFibGUgX0FsbG9jX2hpZGVyIF9NX2Rh dGFwbHVzOwoKCgogICAgICBzdGF0aWMgc2l6ZV90eXBlIF9TX2VtcHR5X3JlcF9zdG9yYWdlWyhz aXplb2YoX1JlcCkgKyBzaXplb2YoX0NoYXJUKSArIHNpemVvZihzaXplX3R5cGUpIC0gMSkvc2l6 ZW9mKHNpemVfdHlwZSldOwoKICAgICAgX0NoYXJUKgogICAgICBfTV9kYXRhKCkgY29uc3QKICAg ICAgeyByZXR1cm4gX01fZGF0YXBsdXMuX01fcDsgfQoKICAgICAgX0NoYXJUKgogICAgICBfTV9k YXRhKF9DaGFyVCogX19wKQogICAgICB7IHJldHVybiAoX01fZGF0YXBsdXMuX01fcCA9IF9fcCk7 IH0KCiAgICAgIF9SZXAqCiAgICAgIF9NX3JlcCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuICYoKHJl aW50ZXJwcmV0X2Nhc3Q8X1JlcCo+IChfTV9kYXRhKCkpKVstMV0pOyB9CgoKCiAgICAgIGl0ZXJh dG9yCiAgICAgIF9NX2liZWdpbigpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKF9NX2RhdGEoKSk7 IH0KCiAgICAgIGl0ZXJhdG9yCiAgICAgIF9NX2llbmQoKSBjb25zdCB7IHJldHVybiBpdGVyYXRv cihfTV9kYXRhKCkgKyB0aGlzLT5zaXplKCkpOyB9CgogICAgICB2b2lkCiAgICAgIF9NX2xlYWso KQogICAgICB7CiAgICAgICAgaWYgKCFfTV9yZXAoKS0+X01faXNfbGVha2VkKCkpCiAgICAgICAg ICBfTV9sZWFrX2hhcmQoKTsKICAgICAgfQoKICAgICAgaXRlcmF0b3IKICAgICAgX01fY2hlY2so c2l6ZV90eXBlIF9fcG9zKSBjb25zdAogICAgICB7CiAgICAgICAgaWYgKF9fcG9zID4gdGhpcy0+ c2l6ZSgpKQogICAgICAgICAgX190aHJvd19vdXRfb2ZfcmFuZ2UoImJhc2ljX3N0cmluZzo6X01f Y2hlY2siKTsKICAgICAgICByZXR1cm4gX01faWJlZ2luKCkgKyBfX3BvczsKICAgICAgfQoKCiAg ICAgIGl0ZXJhdG9yCiAgICAgIF9NX2ZvbGQoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19v ZmYpIGNvbnN0CiAgICAgIHsKICAgICAgICBib29sIF9fdGVzdG9mZiA9IF9fb2ZmIDwgdGhpcy0+ c2l6ZSgpIC0gX19wb3M7CiAgICAgICAgc2l6ZV90eXBlIF9fbmV3b2ZmID0gX190ZXN0b2ZmID8g X19vZmYgOiB0aGlzLT5zaXplKCkgLSBfX3BvczsKICAgICAgICByZXR1cm4gKF9NX2liZWdpbigp ICsgX19wb3MgKyBfX25ld29mZik7CiAgICAgIH0KCgoKICAgICAgdGVtcGxhdGU8Y2xhc3MgX0l0 ZXJhdG9yPgogICAgICAgIHN0YXRpYyB2b2lkCiAgICAgICAgX1NfY29weV9jaGFycyhfQ2hhclQq IF9fcCwgX0l0ZXJhdG9yIF9fazEsIF9JdGVyYXRvciBfX2syKQogICAgICAgIHsKICAgICAgICAg IGZvciAoOyBfX2sxICE9IF9fazI7ICsrX19rMSwgKytfX3ApCiAgICAgICAgICAgIHRyYWl0c190 eXBlOjphc3NpZ24oKl9fcCwgKl9fazEpOwogICAgICAgIH0KCiAgICAgIHN0YXRpYyB2b2lkCiAg ICAgIF9TX2NvcHlfY2hhcnMoX0NoYXJUKiBfX3AsIGl0ZXJhdG9yIF9fazEsIGl0ZXJhdG9yIF9f azIpCiAgICAgIHsgX1NfY29weV9jaGFycyhfX3AsIF9fazEuYmFzZSgpLCBfX2syLmJhc2UoKSk7 IH0KCiAgICAgIHN0YXRpYyB2b2lkCiAgICAgIF9TX2NvcHlfY2hhcnMoX0NoYXJUKiBfX3AsIGNv bnN0X2l0ZXJhdG9yIF9fazEsIGNvbnN0X2l0ZXJhdG9yIF9fazIpCiAgICAgIHsgX1NfY29weV9j aGFycyhfX3AsIF9fazEuYmFzZSgpLCBfX2syLmJhc2UoKSk7IH0KCiAgICAgIHN0YXRpYyB2b2lk CiAgICAgIF9TX2NvcHlfY2hhcnMoX0NoYXJUKiBfX3AsIF9DaGFyVCogX19rMSwgX0NoYXJUKiBf X2syKQogICAgICB7IHRyYWl0c190eXBlOjpjb3B5KF9fcCwgX19rMSwgX19rMiAtIF9fazEpOyB9 CgogICAgICBzdGF0aWMgdm9pZAogICAgICBfU19jb3B5X2NoYXJzKF9DaGFyVCogX19wLCBjb25z dCBfQ2hhclQqIF9fazEsIGNvbnN0IF9DaGFyVCogX19rMikKICAgICAgeyB0cmFpdHNfdHlwZTo6 Y29weShfX3AsIF9fazEsIF9fazIgLSBfX2sxKTsgfQoKICAgICAgdm9pZAogICAgICBfTV9tdXRh dGUoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19sZW4xLCBzaXplX3R5cGUgX19sZW4yKTsK CiAgICAgIHZvaWQKICAgICAgX01fbGVha19oYXJkKCk7CgogICAgICBzdGF0aWMgX1JlcCYKICAg ICAgX1NfZW1wdHlfcmVwKCkKICAgICAgeyByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8X1JlcCo+ KCZfU19lbXB0eV9yZXBfc3RvcmFnZSk7IH0KCiAgICBwdWJsaWM6CgoKCgogICAgICBpbmxpbmUK ICAgICAgYmFzaWNfc3RyaW5nKCk7CgogICAgICBleHBsaWNpdAogICAgICBiYXNpY19zdHJpbmco Y29uc3QgX0FsbG9jJiBfX2EpOwoKCiAgICAgIGJhc2ljX3N0cmluZyhjb25zdCBiYXNpY19zdHJp bmcmIF9fc3RyKTsKICAgICAgYmFzaWNfc3RyaW5nKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIs IHNpemVfdHlwZSBfX3BvcywKICAgICAgICAgICAgICAgICAgIHNpemVfdHlwZSBfX24gPSBucG9z KTsKICAgICAgYmFzaWNfc3RyaW5nKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsIHNpemVfdHlw ZSBfX3BvcywKICAgICAgICAgICAgICAgICAgIHNpemVfdHlwZSBfX24sIGNvbnN0IF9BbGxvYyYg X19hKTsKCiAgICAgIGJhc2ljX3N0cmluZyhjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9f biwKICAgICAgICAgICAgICAgICAgIGNvbnN0IF9BbGxvYyYgX19hID0gX0FsbG9jKCkpOwogICAg ICBiYXNpY19zdHJpbmcoY29uc3QgX0NoYXJUKiBfX3MsIGNvbnN0IF9BbGxvYyYgX19hID0gX0Fs bG9jKCkpOwogICAgICBiYXNpY19zdHJpbmcoc2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9fYywgY29u c3QgX0FsbG9jJiBfX2EgPSBfQWxsb2MoKSk7CgogICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW5wdXRJ dGVyYXRvcj4KICAgICAgICBiYXNpY19zdHJpbmcoX0lucHV0SXRlcmF0b3IgX19iZWcsIF9JbnB1 dEl0ZXJhdG9yIF9fZW5kLAogICAgICAgICAgICAgICAgICAgICBjb25zdCBfQWxsb2MmIF9fYSA9 IF9BbGxvYygpKTsKCiAgICAgIH5iYXNpY19zdHJpbmcoKQogICAgICB7IF9NX3JlcCgpLT5fTV9k aXNwb3NlKHRoaXMtPmdldF9hbGxvY2F0b3IoKSk7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAg ICAgb3BlcmF0b3I9KGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIpIHsgcmV0dXJuIHRoaXMtPmFz c2lnbihfX3N0cik7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgb3BlcmF0b3I9KGNvbnN0 IF9DaGFyVCogX19zKSB7IHJldHVybiB0aGlzLT5hc3NpZ24oX19zKTsgfQoKICAgICAgYmFzaWNf c3RyaW5nJgogICAgICBvcGVyYXRvcj0oX0NoYXJUIF9fYykgeyByZXR1cm4gdGhpcy0+YXNzaWdu KDEsIF9fYyk7IH0KCgogICAgICBpdGVyYXRvcgogICAgICBiZWdpbigpCiAgICAgIHsKICAgICAg ICBfTV9sZWFrKCk7CiAgICAgICAgcmV0dXJuIGl0ZXJhdG9yKF9NX2RhdGEoKSk7CiAgICAgIH0K CiAgICAgIGNvbnN0X2l0ZXJhdG9yCiAgICAgIGJlZ2luKCkgY29uc3QKICAgICAgeyByZXR1cm4g Y29uc3RfaXRlcmF0b3IoX01fZGF0YSgpKTsgfQoKICAgICAgaXRlcmF0b3IKICAgICAgZW5kKCkK ICAgICAgewogICAgICAgICBfTV9sZWFrKCk7CiAgICAgICAgIHJldHVybiBpdGVyYXRvcihfTV9k YXRhKCkgKyB0aGlzLT5zaXplKCkpOwogICAgICB9CgogICAgICBjb25zdF9pdGVyYXRvcgogICAg ICBlbmQoKSBjb25zdAogICAgICB7IHJldHVybiBjb25zdF9pdGVyYXRvcihfTV9kYXRhKCkgKyB0 aGlzLT5zaXplKCkpOyB9CgogICAgICByZXZlcnNlX2l0ZXJhdG9yCiAgICAgIHJiZWdpbigpCiAg ICAgIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IodGhpcy0+ZW5kKCkpOyB9CgogICAgICBjb25z dF9yZXZlcnNlX2l0ZXJhdG9yCiAgICAgIHJiZWdpbigpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGNv bnN0X3JldmVyc2VfaXRlcmF0b3IodGhpcy0+ZW5kKCkpOyB9CgogICAgICByZXZlcnNlX2l0ZXJh dG9yCiAgICAgIHJlbmQoKQogICAgICB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKHRoaXMtPmJl Z2luKCkpOyB9CgogICAgICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yCiAgICAgIHJlbmQoKSBjb25z dAogICAgICB7IHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKHRoaXMtPmJlZ2luKCkpOyB9 CgogICAgcHVibGljOgoKICAgICAgc2l6ZV90eXBlCiAgICAgIHNpemUoKSBjb25zdCB7IHJldHVy biBfTV9yZXAoKS0+X01fbGVuZ3RoOyB9CgogICAgICBzaXplX3R5cGUKICAgICAgbGVuZ3RoKCkg Y29uc3QgeyByZXR1cm4gX01fcmVwKCktPl9NX2xlbmd0aDsgfQoKICAgICAgc2l6ZV90eXBlCiAg ICAgIG1heF9zaXplKCkgY29uc3QgeyByZXR1cm4gX1JlcDo6X1NfbWF4X3NpemU7IH0KCiAgICAg IHZvaWQKICAgICAgcmVzaXplKHNpemVfdHlwZSBfX24sIF9DaGFyVCBfX2MpOwoKICAgICAgdm9p ZAogICAgICByZXNpemUoc2l6ZV90eXBlIF9fbikgeyB0aGlzLT5yZXNpemUoX19uLCBfQ2hhclQo KSk7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBjYXBhY2l0eSgpIGNvbnN0IHsgcmV0dXJuIF9N X3JlcCgpLT5fTV9jYXBhY2l0eTsgfQoKICAgICAgdm9pZAogICAgICByZXNlcnZlKHNpemVfdHlw ZSBfX3Jlc19hcmcgPSAwKTsKCiAgICAgIHZvaWQKICAgICAgY2xlYXIoKSB7IF9NX211dGF0ZSgw LCB0aGlzLT5zaXplKCksIDApOyB9CgogICAgICBib29sCiAgICAgIGVtcHR5KCkgY29uc3QgeyBy ZXR1cm4gdGhpcy0+c2l6ZSgpID09IDA7IH0KCgogICAgICBjb25zdF9yZWZlcmVuY2UKICAgICAg b3BlcmF0b3JbXSAoc2l6ZV90eXBlIF9fcG9zKSBjb25zdAogICAgICB7IHJldHVybiBfTV9kYXRh KClbX19wb3NdOyB9CgogICAgICByZWZlcmVuY2UKICAgICAgb3BlcmF0b3JbXShzaXplX3R5cGUg X19wb3MpCiAgICAgIHsKICAgICAgICBfTV9sZWFrKCk7CiAgICAgICAgcmV0dXJuIF9NX2RhdGEo KVtfX3Bvc107CiAgICAgIH0KCiAgICAgIGNvbnN0X3JlZmVyZW5jZQogICAgICBhdChzaXplX3R5 cGUgX19uKSBjb25zdAogICAgICB7CiAgICAgICAgaWYgKF9fbiA+PSB0aGlzLT5zaXplKCkpCiAg ICAgICAgICBfX3Rocm93X291dF9vZl9yYW5nZSgiYmFzaWNfc3RyaW5nOjphdCIpOwogICAgICAg IHJldHVybiBfTV9kYXRhKClbX19uXTsKICAgICAgfQoKICAgICAgcmVmZXJlbmNlCiAgICAgIGF0 KHNpemVfdHlwZSBfX24pCiAgICAgIHsKICAgICAgICBpZiAoX19uID49IHNpemUoKSkKICAgICAg ICAgIF9fdGhyb3dfb3V0X29mX3JhbmdlKCJiYXNpY19zdHJpbmc6OmF0Iik7CiAgICAgICAgX01f bGVhaygpOwogICAgICAgIHJldHVybiBfTV9kYXRhKClbX19uXTsKICAgICAgfQoKCiAgICAgIGJh c2ljX3N0cmluZyYKICAgICAgb3BlcmF0b3IrPShjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyKSB7 IHJldHVybiB0aGlzLT5hcHBlbmQoX19zdHIpOyB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAg IG9wZXJhdG9yKz0oY29uc3QgX0NoYXJUKiBfX3MpIHsgcmV0dXJuIHRoaXMtPmFwcGVuZChfX3Mp OyB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIG9wZXJhdG9yKz0oX0NoYXJUIF9fYykgeyBy ZXR1cm4gdGhpcy0+YXBwZW5kKHNpemVfdHlwZSgxKSwgX19jKTsgfQoKICAgICAgYmFzaWNfc3Ry aW5nJgogICAgICBhcHBlbmQoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cik7CgogICAgICBiYXNp Y19zdHJpbmcmCiAgICAgIGFwcGVuZChjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLCBzaXplX3R5 cGUgX19wb3MsIHNpemVfdHlwZSBfX24pOwoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBhcHBl bmQoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX24pOwoKICAgICAgYmFzaWNfc3RyaW5n JgogICAgICBhcHBlbmQoY29uc3QgX0NoYXJUKiBfX3MpCiAgICAgIHsgcmV0dXJuIHRoaXMtPmFw cGVuZChfX3MsIHRyYWl0c190eXBlOjpsZW5ndGgoX19zKSk7IH0KCiAgICAgIGJhc2ljX3N0cmlu ZyYKICAgICAgYXBwZW5kKHNpemVfdHlwZSBfX24sIF9DaGFyVCBfX2MpOwoKICAgICAgdGVtcGxh dGU8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgICAgICAgYmFzaWNfc3RyaW5nJgogICAgICAgIGFw cGVuZChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpCiAgICAg ICAgeyByZXR1cm4gdGhpcy0+cmVwbGFjZShfTV9pZW5kKCksIF9NX2llbmQoKSwgX19maXJzdCwg X19sYXN0KTsgfQoKICAgICAgdm9pZAogICAgICBwdXNoX2JhY2soX0NoYXJUIF9fYykKICAgICAg eyB0aGlzLT5yZXBsYWNlKF9NX2llbmQoKSwgX01faWVuZCgpLCAxLCBfX2MpOyB9CgogICAgICBi YXNpY19zdHJpbmcmCiAgICAgIGFzc2lnbihjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyKTsKCiAg ICAgIGJhc2ljX3N0cmluZyYKICAgICAgYXNzaWduKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIs IHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikKICAgICAgewogICAgICAgIGNvbnN0IHNp emVfdHlwZSBfX3N0cnNpemUgPSBfX3N0ci5zaXplKCk7CiAgICAgICAgaWYgKF9fcG9zID4gX19z dHJzaXplKQogICAgICAgICAgX190aHJvd19vdXRfb2ZfcmFuZ2UoImJhc2ljX3N0cmluZzo6YXNz aWduIik7CiAgICAgICAgY29uc3QgYm9vbCBfX3Rlc3RuID0gX19uIDwgX19zdHJzaXplIC0gX19w b3M7CiAgICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fbmV3c2l6ZSA9IF9fdGVzdG4gPyBfX24gOiBf X3N0cnNpemUgLSBfX3BvczsKICAgICAgICByZXR1cm4gdGhpcy0+YXNzaWduKF9fc3RyLl9NX2Rh dGEoKSArIF9fcG9zLCBfX25ld3NpemUpOwogICAgICB9CgogICAgICBiYXNpY19zdHJpbmcmCiAg ICAgIGFzc2lnbihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fbikKICAgICAgewogICAg ICAgIGlmIChfX24gPiB0aGlzLT5tYXhfc2l6ZSgpKQogICAgICAgICAgX190aHJvd19sZW5ndGhf ZXJyb3IoImJhc2ljX3N0cmluZzo6YXNzaWduIik7CiAgICAgICAgaWYgKF9NX3JlcCgpLT5fTV9p c19zaGFyZWQoKSB8fCBsZXNzPGNvbnN0IF9DaGFyVCo+KCkoX19zLCBfTV9kYXRhKCkpCiAgICAg ICAgICAgIHx8IGxlc3M8Y29uc3QgX0NoYXJUKj4oKShfTV9kYXRhKCkgKyB0aGlzLT5zaXplKCks IF9fcykpCiAgICAgICAgICByZXR1cm4gX01fcmVwbGFjZV9zYWZlKF9NX2liZWdpbigpLCBfTV9p ZW5kKCksIF9fcywgX19zICsgX19uKTsKICAgICAgICBlbHNlCiAgICAgICAgICB7CgogICAgICAg ICAgICBjb25zdCBzaXplX3R5cGUgX19wb3MgPSBfX3MgLSBfTV9kYXRhKCk7CiAgICAgICAgICAg IGlmIChfX3BvcyA+PSBfX24pCiAgICAgICAgICAgICAgdHJhaXRzX3R5cGU6OmNvcHkoX01fZGF0 YSgpLCBfX3MsIF9fbik7CiAgICAgICAgICAgIGVsc2UgaWYgKF9fcG9zKQogICAgICAgICAgICAg IHRyYWl0c190eXBlOjptb3ZlKF9NX2RhdGEoKSwgX19zLCBfX24pOwogICAgICAgICAgICBfTV9y ZXAoKS0+X01fbGVuZ3RoID0gX19uOwogICAgICAgICAgICBfTV9kYXRhKClbX19uXSA9IF9SZXA6 Ol9TX3Rlcm1pbmFsOwogICAgICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgICAgICB9CiAgICAg IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgYXNzaWduKGNvbnN0IF9DaGFyVCogX19zKQog ICAgICB7IHJldHVybiB0aGlzLT5hc3NpZ24oX19zLCB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcykp OyB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIGFzc2lnbihzaXplX3R5cGUgX19uLCBfQ2hh clQgX19jKQogICAgICB7IHJldHVybiB0aGlzLT5yZXBsYWNlKF9NX2liZWdpbigpLCBfTV9pZW5k KCksIF9fbiwgX19jKTsgfQoKICAgICAgdGVtcGxhdGU8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAg ICAgICAgYmFzaWNfc3RyaW5nJgogICAgICAgIGFzc2lnbihfSW5wdXRJdGVyYXRvciBfX2ZpcnN0 LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpCiAgICAgICAgeyByZXR1cm4gdGhpcy0+cmVwbGFjZShf TV9pYmVnaW4oKSwgX01faWVuZCgpLCBfX2ZpcnN0LCBfX2xhc3QpOyB9CgogICAgICB2b2lkCiAg ICAgIGluc2VydChpdGVyYXRvciBfX3AsIHNpemVfdHlwZSBfX24sIF9DaGFyVCBfX2MpCiAgICAg IHsgdGhpcy0+cmVwbGFjZShfX3AsIF9fcCwgX19uLCBfX2MpOyB9CgogICAgICB0ZW1wbGF0ZTxj bGFzcyBfSW5wdXRJdGVyYXRvcj4KICAgICAgICB2b2lkIGluc2VydChpdGVyYXRvciBfX3AsIF9J bnB1dEl0ZXJhdG9yIF9fYmVnLCBfSW5wdXRJdGVyYXRvciBfX2VuZCkKICAgICAgICB7IHRoaXMt PnJlcGxhY2UoX19wLCBfX3AsIF9fYmVnLCBfX2VuZCk7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYK ICAgICAgaW5zZXJ0KHNpemVfdHlwZSBfX3BvczEsIGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIp CiAgICAgIHsgcmV0dXJuIHRoaXMtPmluc2VydChfX3BvczEsIF9fc3RyLCAwLCBfX3N0ci5zaXpl KCkpOyB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIGluc2VydChzaXplX3R5cGUgX19wb3Mx LCBjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLAogICAgICAgICAgICAgc2l6ZV90eXBlIF9fcG9z Miwgc2l6ZV90eXBlIF9fbikKICAgICAgewogICAgICAgIGNvbnN0IHNpemVfdHlwZSBfX3N0cnNp emUgPSBfX3N0ci5zaXplKCk7CiAgICAgICAgaWYgKF9fcG9zMiA+IF9fc3Ryc2l6ZSkKICAgICAg ICAgIF9fdGhyb3dfb3V0X29mX3JhbmdlKCJiYXNpY19zdHJpbmc6Omluc2VydCIpOwogICAgICAg IGNvbnN0IGJvb2wgX190ZXN0biA9IF9fbiA8IF9fc3Ryc2l6ZSAtIF9fcG9zMjsKICAgICAgICBj b25zdCBzaXplX3R5cGUgX19uZXdzaXplID0gX190ZXN0biA/IF9fbiA6IF9fc3Ryc2l6ZSAtIF9f cG9zMjsKICAgICAgICByZXR1cm4gdGhpcy0+aW5zZXJ0KF9fcG9zMSwgX19zdHIuX01fZGF0YSgp ICsgX19wb3MyLCBfX25ld3NpemUpOwogICAgICB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAg IGluc2VydChzaXplX3R5cGUgX19wb3MsIGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19u KQogICAgICB7CiAgICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsK ICAgICAgICBpZiAoX19wb3MgPiBfX3NpemUpCiAgICAgICAgICBfX3Rocm93X291dF9vZl9yYW5n ZSgiYmFzaWNfc3RyaW5nOjppbnNlcnQiKTsKICAgICAgICBpZiAoX19zaXplID4gdGhpcy0+bWF4 X3NpemUoKSAtIF9fbikKICAgICAgICAgIF9fdGhyb3dfbGVuZ3RoX2Vycm9yKCJiYXNpY19zdHJp bmc6Omluc2VydCIpOwogICAgICAgIGlmIChfTV9yZXAoKS0+X01faXNfc2hhcmVkKCkgfHwgbGVz czxjb25zdCBfQ2hhclQqPigpKF9fcywgX01fZGF0YSgpKQogICAgICAgICAgICB8fCBsZXNzPGNv bnN0IF9DaGFyVCo+KCkoX01fZGF0YSgpICsgX19zaXplLCBfX3MpKQogICAgICAgICAgcmV0dXJu IF9NX3JlcGxhY2Vfc2FmZShfTV9pYmVnaW4oKSArIF9fcG9zLCBfTV9pYmVnaW4oKSArIF9fcG9z LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3MsIF9fcyArIF9fbik7CiAgICAg ICAgZWxzZQogICAgICAgICAgewoKCgogICAgICAgICAgICBjb25zdCBzaXplX3R5cGUgX19vZmYg PSBfX3MgLSBfTV9kYXRhKCk7CiAgICAgICAgICAgIF9NX211dGF0ZShfX3BvcywgMCwgX19uKTsK ICAgICAgICAgICAgX19zID0gX01fZGF0YSgpICsgX19vZmY7CiAgICAgICAgICAgIF9DaGFyVCog X19wID0gX01fZGF0YSgpICsgX19wb3M7CiAgICAgICAgICAgIGlmIChfX3MgKyBfX24gPD0gX19w KQogICAgICAgICAgICAgIHRyYWl0c190eXBlOjpjb3B5KF9fcCwgX19zLCBfX24pOwogICAgICAg ICAgICBlbHNlIGlmIChfX3MgPj0gX19wKQogICAgICAgICAgICAgIHRyYWl0c190eXBlOjpjb3B5 KF9fcCwgX19zICsgX19uLCBfX24pOwogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgewog ICAgICAgICAgICAgICAgdHJhaXRzX3R5cGU6OmNvcHkoX19wLCBfX3MsIF9fcCAtIF9fcyk7CiAg ICAgICAgICAgICAgICB0cmFpdHNfdHlwZTo6Y29weShfX3AgKyAoX19wIC0gX19zKSwgX19wICsg X19uLCBfX24gLSAoX19wIC0gX19zKSk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1 cm4gKnRoaXM7CiAgICAgICAgICB9CiAgICAgICB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAg IGluc2VydChzaXplX3R5cGUgX19wb3MsIGNvbnN0IF9DaGFyVCogX19zKQogICAgICB7IHJldHVy biB0aGlzLT5pbnNlcnQoX19wb3MsIF9fcywgdHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpKTsgfQoK ICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBpbnNlcnQoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5 cGUgX19uLCBfQ2hhclQgX19jKQogICAgICB7CiAgICAgICAgdGhpcy0+aW5zZXJ0KF9NX2NoZWNr KF9fcG9zKSwgX19uLCBfX2MpOwogICAgICAgIHJldHVybiAqdGhpczsKICAgICAgfQoKICAgICAg aXRlcmF0b3IKICAgICAgaW5zZXJ0KGl0ZXJhdG9yIF9fcCwgX0NoYXJUIF9fYyA9IF9DaGFyVCgp KQogICAgICB7CiAgICAgICAgc2l6ZV90eXBlIF9fcG9zID0gX19wIC0gX01faWJlZ2luKCk7CiAg ICAgICAgdGhpcy0+aW5zZXJ0KF9NX2NoZWNrKF9fcG9zKSwgc2l6ZV90eXBlKDEpLCBfX2MpOwog ICAgICAgIF9NX3JlcCgpLT5fTV9zZXRfbGVha2VkKCk7CiAgICAgICAgcmV0dXJuIHRoaXMtPl9N X2liZWdpbigpICsgX19wb3M7CiAgICAgIH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgZXJh c2Uoc2l6ZV90eXBlIF9fcG9zID0gMCwgc2l6ZV90eXBlIF9fbiA9IG5wb3MpCiAgICAgIHsKICAg ICAgICByZXR1cm4gdGhpcy0+cmVwbGFjZShfTV9jaGVjayhfX3BvcyksIF9NX2ZvbGQoX19wb3Ms IF9fbiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01fZGF0YSgpLCBfTV9kYXRhKCkp OwogICAgICB9CgogICAgICBpdGVyYXRvcgogICAgICBlcmFzZShpdGVyYXRvciBfX3Bvc2l0aW9u KQogICAgICB7CiAgICAgICAgc2l6ZV90eXBlIF9faSA9IF9fcG9zaXRpb24gLSBfTV9pYmVnaW4o KTsKICAgICAgICB0aGlzLT5yZXBsYWNlKF9fcG9zaXRpb24sIF9fcG9zaXRpb24gKyAxLCBfTV9k YXRhKCksIF9NX2RhdGEoKSk7CiAgICAgICAgX01fcmVwKCktPl9NX3NldF9sZWFrZWQoKTsKICAg ICAgICByZXR1cm4gX01faWJlZ2luKCkgKyBfX2k7CiAgICAgIH0KCiAgICAgIGl0ZXJhdG9yCiAg ICAgIGVyYXNlKGl0ZXJhdG9yIF9fZmlyc3QsIGl0ZXJhdG9yIF9fbGFzdCkKICAgICAgewogICAg ICAgIHNpemVfdHlwZSBfX2kgPSBfX2ZpcnN0IC0gX01faWJlZ2luKCk7CiAgICAgICAgdGhpcy0+ cmVwbGFjZShfX2ZpcnN0LCBfX2xhc3QsIF9NX2RhdGEoKSwgX01fZGF0YSgpKTsKICAgICAgICBf TV9yZXAoKS0+X01fc2V0X2xlYWtlZCgpOwogICAgICAgcmV0dXJuIF9NX2liZWdpbigpICsgX19p OwogICAgICB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIHJlcGxhY2Uoc2l6ZV90eXBlIF9f cG9zLCBzaXplX3R5cGUgX19uLCBjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyKQogICAgICB7IHJl dHVybiB0aGlzLT5yZXBsYWNlKF9fcG9zLCBfX24sIF9fc3RyLl9NX2RhdGEoKSwgX19zdHIuc2l6 ZSgpKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICByZXBsYWNlKHNpemVfdHlwZSBfX3Bv czEsIHNpemVfdHlwZSBfX24xLCBjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLAogICAgICAgICAg ICAgIHNpemVfdHlwZSBfX3BvczIsIHNpemVfdHlwZSBfX24yKTsKCiAgICAgIGJhc2ljX3N0cmlu ZyYKICAgICAgcmVwbGFjZShzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24xLCBjb25zdCBf Q2hhclQqIF9fcywKICAgICAgICAgICAgICBzaXplX3R5cGUgX19uMikKICAgICAgewogICAgICAg IGNvbnN0IHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CiAgICAgICAgaWYgKF9fcG9z ID4gX19zaXplKQogICAgICAgICAgX190aHJvd19vdXRfb2ZfcmFuZ2UoImJhc2ljX3N0cmluZzo6 cmVwbGFjZSIpOwogICAgICAgIGNvbnN0IGJvb2wgX190ZXN0bjEgPSBfX24xIDwgX19zaXplIC0g X19wb3M7CiAgICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fZm9sZG4xID0gX190ZXN0bjEgPyBfX24x IDogX19zaXplIC0gX19wb3M7CiAgICAgICAgaWYgKF9fc2l6ZSAtIF9fZm9sZG4xID4gdGhpcy0+ bWF4X3NpemUoKSAtIF9fbjIpCiAgICAgICAgICBfX3Rocm93X2xlbmd0aF9lcnJvcigiYmFzaWNf c3RyaW5nOjpyZXBsYWNlIik7CiAgICAgICAgaWYgKF9NX3JlcCgpLT5fTV9pc19zaGFyZWQoKSB8 fCBsZXNzPGNvbnN0IF9DaGFyVCo+KCkoX19zLCBfTV9kYXRhKCkpCiAgICAgICAgICAgIHx8IGxl c3M8Y29uc3QgX0NoYXJUKj4oKShfTV9kYXRhKCkgKyBfX3NpemUsIF9fcykpCiAgICAgICAgICBy ZXR1cm4gX01fcmVwbGFjZV9zYWZlKF9NX2liZWdpbigpICsgX19wb3MsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIF9NX2liZWdpbigpICsgX19wb3MgKyBfX2ZvbGRuMSwgX19zLCBf X3MgKyBfX24yKTsKCiAgICAgICAgZWxzZSByZXR1cm4KICAgICAgICAgICAgICAgX01fcmVwbGFj ZShfTV9pYmVnaW4oKSArIF9fcG9zLCBfTV9pYmVnaW4oKSArIF9fcG9zICsgX19mb2xkbjEsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgX19zLCBfX3MgKyBfX24yLAogICAgICAgICAgICAgICAg ICAgICAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxjb25zdCBfQ2hhclQqPjo6aXRlcmF0 b3JfY2F0ZWdvcnkoKSk7CiAgICAgIH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgcmVwbGFj ZShzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24xLCBjb25zdCBfQ2hhclQqIF9fcykKICAg ICAgeyByZXR1cm4gdGhpcy0+cmVwbGFjZShfX3BvcywgX19uMSwgX19zLCB0cmFpdHNfdHlwZTo6 bGVuZ3RoKF9fcykpOyB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIHJlcGxhY2Uoc2l6ZV90 eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uMSwgc2l6ZV90eXBlIF9fbjIsIF9DaGFyVCBfX2MpCiAg ICAgIHsgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX01fY2hlY2soX19wb3MpLCBfTV9mb2xkKF9fcG9z LCBfX24xKSwgX19uMiwgX19jKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICByZXBsYWNl KGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9yIF9faTIsIGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIp CiAgICAgIHsgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX19pMSwgX19pMiwgX19zdHIuX01fZGF0YSgp LCBfX3N0ci5zaXplKCkpOyB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIHJlcGxhY2UoaXRl cmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u c3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX24pCiAgICAgIHsgcmV0dXJuIHRoaXMtPnJlcGxh Y2UoX19pMSAtIF9NX2liZWdpbigpLCBfX2kyIC0gX19pMSwgX19zLCBfX24pOyB9CgogICAgICBi YXNpY19zdHJpbmcmCiAgICAgIHJlcGxhY2UoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwg Y29uc3QgX0NoYXJUKiBfX3MpCiAgICAgIHsgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX19pMSwgX19p MiwgX19zLCB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcykpOyB9CgogICAgICBiYXNpY19zdHJpbmcm CiAgICAgIHJlcGxhY2UoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwgc2l6ZV90eXBlIF9f biwgX0NoYXJUIF9fYyk7CgogICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICAg ICAgICBiYXNpY19zdHJpbmcmCiAgICAgICAgcmVwbGFjZShpdGVyYXRvciBfX2kxLCBpdGVyYXRv ciBfX2kyLAogICAgICAgICAgICAgICAgX0lucHV0SXRlcmF0b3IgX19rMSwgX0lucHV0SXRlcmF0 b3IgX19rMikKICAgICAgICB7IHJldHVybiBfTV9yZXBsYWNlKF9faTEsIF9faTIsIF9fazEsIF9f azIsCiAgICAgICAgICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcmF0b3I+ OjppdGVyYXRvcl9jYXRlZ29yeSgpKTsgfQoKCgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIHJl cGxhY2UoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwgX0NoYXJUKiBfX2sxLCBfQ2hhclQq IF9fazIpCiAgICAgICAgeyByZXR1cm4gdGhpcy0+cmVwbGFjZShfX2kxIC0gX01faWJlZ2luKCks IF9faTIgLSBfX2kxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19rMSwgX19rMiAt IF9fazEpOyB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIHJlcGxhY2UoaXRlcmF0b3IgX19p MSwgaXRlcmF0b3IgX19pMiwgY29uc3QgX0NoYXJUKiBfX2sxLCBjb25zdCBfQ2hhclQqIF9fazIp CiAgICAgICAgeyByZXR1cm4gdGhpcy0+cmVwbGFjZShfX2kxIC0gX01faWJlZ2luKCksIF9faTIg LSBfX2kxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19rMSwgX19rMiAtIF9fazEp OyB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIHJlcGxhY2UoaXRlcmF0b3IgX19pMSwgaXRl cmF0b3IgX19pMiwgaXRlcmF0b3IgX19rMSwgaXRlcmF0b3IgX19rMikKICAgICAgICB7IHJldHVy biB0aGlzLT5yZXBsYWNlKF9faTEgLSBfTV9pYmVnaW4oKSwgX19pMiAtIF9faTEsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBfX2sxLmJhc2UoKSwgX19rMiAtIF9fazEpOwogICAgICAg IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgcmVwbGFjZShpdGVyYXRvciBfX2kxLCBpdGVy YXRvciBfX2kyLCBjb25zdF9pdGVyYXRvciBfX2sxLCBjb25zdF9pdGVyYXRvciBfX2syKQogICAg ICAgIHsgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX19pMSAtIF9NX2liZWdpbigpLCBfX2kyIC0gX19p MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fazEuYmFzZSgpLCBfX2syIC0gX19r MSk7CiAgICAgICAgfQoKICAgIHByaXZhdGU6CiAgICAgIHRlbXBsYXRlPGNsYXNzIF9JbnB1dEl0 ZXJhdG9yPgogICAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgICBfTV9yZXBsYWNlKGl0ZXJhdG9y IF9faTEsIGl0ZXJhdG9yIF9faTIsIF9JbnB1dEl0ZXJhdG9yIF9fazEsCiAgICAgICAgICAgICAg ICAgICBfSW5wdXRJdGVyYXRvciBfX2syLCBpbnB1dF9pdGVyYXRvcl90YWcpOwoKICAgICAgdGVt cGxhdGU8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4KICAgICAgICBiYXNpY19zdHJpbmcmCiAgICAg ICAgX01fcmVwbGFjZV9zYWZlKGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9yIF9faTIsIF9Gb3J3YXJk SXRlcmF0b3IgX19rMSwKICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19rMik7 CgoKCiAgICAgIHRlbXBsYXRlPGNsYXNzIF9Jbkl0ZXI+CiAgICAgICAgc3RhdGljIF9DaGFyVCoK ICAgICAgICBfU19jb25zdHJ1Y3RfYXV4KF9Jbkl0ZXIgX19iZWcsIF9Jbkl0ZXIgX19lbmQsIGNv bnN0IF9BbGxvYyYgX19hLAogICAgICAgICAgICAgICAgICAgICAgICAgX19mYWxzZV90eXBlKQog ICAgICAgIHsKICAgICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Jbkl0 ZXI+OjppdGVyYXRvcl9jYXRlZ29yeSBfVGFnOwogICAgICAgICAgcmV0dXJuIF9TX2NvbnN0cnVj dChfX2JlZywgX19lbmQsIF9fYSwgX1RhZygpKTsKICAgICAgICB9CgogICAgICB0ZW1wbGF0ZTxj bGFzcyBfSW5JdGVyPgogICAgICAgIHN0YXRpYyBfQ2hhclQqCiAgICAgICAgX1NfY29uc3RydWN0 X2F1eChfSW5JdGVyIF9fYmVnLCBfSW5JdGVyIF9fZW5kLCBjb25zdCBfQWxsb2MmIF9fYSwKICAg ICAgICAgICAgICAgICAgICAgICAgIF9fdHJ1ZV90eXBlKQogICAgICAgIHsKICAgICAgICAgIHJl dHVybiBfU19jb25zdHJ1Y3Qoc3RhdGljX2Nhc3Q8c2l6ZV90eXBlPihfX2JlZyksCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PHZhbHVlX3R5cGU+KF9fZW5kKSwgX19h KTsKICAgICAgICB9CgogICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW5JdGVyPgogICAgICAgIHN0YXRp YyBfQ2hhclQqCiAgICAgICAgX1NfY29uc3RydWN0KF9Jbkl0ZXIgX19iZWcsIF9Jbkl0ZXIgX19l bmQsIGNvbnN0IF9BbGxvYyYgX19hKQogICAgICAgIHsKICAgICAgICAgIHR5cGVkZWYgdHlwZW5h bWUgX0lzX2ludGVnZXI8X0luSXRlcj46Ol9JbnRlZ3JhbCBfSW50ZWdyYWw7CiAgICAgICAgICBy ZXR1cm4gX1NfY29uc3RydWN0X2F1eChfX2JlZywgX19lbmQsIF9fYSwgX0ludGVncmFsKCkpOwog ICAgICAgIH0KCgogICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW5JdGVyPgogICAgICAgIHN0YXRpYyBf Q2hhclQqCiAgICAgICAgIF9TX2NvbnN0cnVjdChfSW5JdGVyIF9fYmVnLCBfSW5JdGVyIF9fZW5k LCBjb25zdCBfQWxsb2MmIF9fYSwKICAgICAgICAgICAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9y X3RhZyk7CgoKCiAgICAgIHRlbXBsYXRlPGNsYXNzIF9Gd2RJdGVyPgogICAgICAgIHN0YXRpYyBf Q2hhclQqCiAgICAgICAgX1NfY29uc3RydWN0KF9Gd2RJdGVyIF9fYmVnLCBfRndkSXRlciBfX2Vu ZCwgY29uc3QgX0FsbG9jJiBfX2EsCiAgICAgICAgICAgICAgICAgICAgIGZvcndhcmRfaXRlcmF0 b3JfdGFnKTsKCiAgICAgIHN0YXRpYyBfQ2hhclQqCiAgICAgIF9TX2NvbnN0cnVjdChzaXplX3R5 cGUgX19yZXEsIF9DaGFyVCBfX2MsIGNvbnN0IF9BbGxvYyYgX19hKTsKCiAgICBwdWJsaWM6Cgog ICAgICBzaXplX3R5cGUKICAgICAgY29weShfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fbiwgc2l6 ZV90eXBlIF9fcG9zID0gMCkgY29uc3Q7CgogICAgICB2b2lkCiAgICAgIHN3YXAoYmFzaWNfc3Ry aW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19zKTsKCgogICAgICBjb25zdCBfQ2hhclQq CiAgICAgIGNfc3RyKCkgY29uc3QKICAgICAgewoKICAgICAgICBzaXplX3R5cGUgX19uID0gdGhp cy0+c2l6ZSgpOwogICAgICAgIHRyYWl0c190eXBlOjphc3NpZ24oX01fZGF0YSgpW19fbl0sIF9S ZXA6Ol9TX3Rlcm1pbmFsKTsKICAgICAgICByZXR1cm4gX01fZGF0YSgpOwogICAgICB9CgogICAg ICBjb25zdCBfQ2hhclQqCiAgICAgIGRhdGEoKSBjb25zdCB7IHJldHVybiBfTV9kYXRhKCk7IH0K CiAgICAgIGFsbG9jYXRvcl90eXBlCiAgICAgIGdldF9hbGxvY2F0b3IoKSBjb25zdCB7IHJldHVy biBfTV9kYXRhcGx1czsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmQoY29uc3QgX0NoYXJU KiBfX3MsIHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikgY29uc3Q7CgogICAgICBzaXpl X3R5cGUKICAgICAgZmluZChjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19w b3MgPSAwKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5maW5kKF9fc3RyLmRhdGEoKSwgX19w b3MsIF9fc3RyLnNpemUoKSk7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kKGNvbnN0IF9D aGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MgPSAwKSBjb25zdAogICAgICB7IHJldHVybiB0aGlz LT5maW5kKF9fcywgX19wb3MsIHRyYWl0c190eXBlOjpsZW5ndGgoX19zKSk7IH0KCiAgICAgIHNp emVfdHlwZQogICAgICBmaW5kKF9DaGFyVCBfX2MsIHNpemVfdHlwZSBfX3BvcyA9IDApIGNvbnN0 OwoKICAgICAgc2l6ZV90eXBlCiAgICAgIHJmaW5kKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIs IHNpemVfdHlwZSBfX3BvcyA9IG5wb3MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPnJmaW5k KF9fc3RyLmRhdGEoKSwgX19wb3MsIF9fc3RyLnNpemUoKSk7IH0KCiAgICAgIHNpemVfdHlwZQog ICAgICByZmluZChjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUg X19uKSBjb25zdDsKCiAgICAgIHNpemVfdHlwZQogICAgICByZmluZChjb25zdCBfQ2hhclQqIF9f cywgc2l6ZV90eXBlIF9fcG9zID0gbnBvcykgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+cmZp bmQoX19zLCBfX3BvcywgdHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpKTsgfQoKICAgICAgc2l6ZV90 eXBlCiAgICAgIHJmaW5kKF9DaGFyVCBfX2MsIHNpemVfdHlwZSBfX3BvcyA9IG5wb3MpIGNvbnN0 OwoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmRfZmlyc3Rfb2YoY29uc3QgYmFzaWNfc3RyaW5n JiBfX3N0ciwgc2l6ZV90eXBlIF9fcG9zID0gMCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ ZmluZF9maXJzdF9vZihfX3N0ci5kYXRhKCksIF9fcG9zLCBfX3N0ci5zaXplKCkpOyB9CgogICAg ICBzaXplX3R5cGUKICAgICAgZmluZF9maXJzdF9vZihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90 eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKSBjb25zdDsKCiAgICAgIHNpemVfdHlwZQogICAgICBm aW5kX2ZpcnN0X29mKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MgPSAwKSBjb25z dAogICAgICB7IHJldHVybiB0aGlzLT5maW5kX2ZpcnN0X29mKF9fcywgX19wb3MsIHRyYWl0c190 eXBlOjpsZW5ndGgoX19zKSk7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kX2ZpcnN0X29m KF9DaGFyVCBfX2MsIHNpemVfdHlwZSBfX3BvcyA9IDApIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRo aXMtPmZpbmQoX19jLCBfX3Bvcyk7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kX2xhc3Rf b2YoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwgc2l6ZV90eXBlIF9fcG9zID0gbnBvcykgY29u c3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZmluZF9sYXN0X29mKF9fc3RyLmRhdGEoKSwgX19wb3Ms IF9fc3RyLnNpemUoKSk7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kX2xhc3Rfb2YoY29u c3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikgY29uc3Q7Cgog ICAgICBzaXplX3R5cGUKICAgICAgZmluZF9sYXN0X29mKGNvbnN0IF9DaGFyVCogX19zLCBzaXpl X3R5cGUgX19wb3MgPSBucG9zKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5maW5kX2xhc3Rf b2YoX19zLCBfX3BvcywgdHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpKTsgfQoKICAgICAgc2l6ZV90 eXBlCiAgICAgIGZpbmRfbGFzdF9vZihfQ2hhclQgX19jLCBzaXplX3R5cGUgX19wb3MgPSBucG9z KSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5yZmluZChfX2MsIF9fcG9zKTsgfQoKICAgICAg c2l6ZV90eXBlCiAgICAgIGZpbmRfZmlyc3Rfbm90X29mKGNvbnN0IGJhc2ljX3N0cmluZyYgX19z dHIsIHNpemVfdHlwZSBfX3BvcyA9IDApIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmZpbmRf Zmlyc3Rfbm90X29mKF9fc3RyLmRhdGEoKSwgX19wb3MsIF9fc3RyLnNpemUoKSk7IH0KCiAgICAg IHNpemVfdHlwZQogICAgICBmaW5kX2ZpcnN0X25vdF9vZihjb25zdCBfQ2hhclQqIF9fcywgc2l6 ZV90eXBlIF9fcG9zLAogICAgICAgICAgICAgICAgICAgICAgICBzaXplX3R5cGUgX19uKSBjb25z dDsKCiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kX2ZpcnN0X25vdF9vZihjb25zdCBfQ2hhclQq IF9fcywgc2l6ZV90eXBlIF9fcG9zID0gMCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+Zmlu ZF9maXJzdF9ub3Rfb2YoX19zLCBfX3BvcywgdHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpKTsgfQoK ICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmRfZmlyc3Rfbm90X29mKF9DaGFyVCBfX2MsIHNpemVf dHlwZSBfX3BvcyA9IDApIGNvbnN0OwoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmRfbGFzdF9u b3Rfb2YoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwgc2l6ZV90eXBlIF9fcG9zID0gbnBvcykg Y29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZmluZF9sYXN0X25vdF9vZihfX3N0ci5kYXRhKCks IF9fcG9zLCBfX3N0ci5zaXplKCkpOyB9CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZF9sYXN0 X25vdF9vZihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zLAogICAgICAgICAgICAg ICAgICAgICAgIHNpemVfdHlwZSBfX24pIGNvbnN0OwogICAgICBzaXplX3R5cGUKICAgICAgZmlu ZF9sYXN0X25vdF9vZihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zID0gbnBvcykg Y29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZmluZF9sYXN0X25vdF9vZihfX3MsIF9fcG9zLCB0 cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcykpOyB9CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZF9s YXN0X25vdF9vZihfQ2hhclQgX19jLCBzaXplX3R5cGUgX19wb3MgPSBucG9zKSBjb25zdDsKCiAg ICAgIGJhc2ljX3N0cmluZwogICAgICBzdWJzdHIoc2l6ZV90eXBlIF9fcG9zID0gMCwgc2l6ZV90 eXBlIF9fbiA9IG5wb3MpIGNvbnN0CiAgICAgIHsKICAgICAgICBpZiAoX19wb3MgPiB0aGlzLT5z aXplKCkpCiAgICAgICAgICBfX3Rocm93X291dF9vZl9yYW5nZSgiYmFzaWNfc3RyaW5nOjpzdWJz dHIiKTsKICAgICAgICByZXR1cm4gYmFzaWNfc3RyaW5nKCp0aGlzLCBfX3BvcywgX19uKTsKICAg ICAgfQoKICAgICAgaW50CiAgICAgIGNvbXBhcmUoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cikg Y29uc3QKICAgICAgewogICAgICAgIHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CiAg ICAgICAgc2l6ZV90eXBlIF9fb3NpemUgPSBfX3N0ci5zaXplKCk7CiAgICAgICAgc2l6ZV90eXBl IF9fbGVuID0gbWluKF9fc2l6ZSwgX19vc2l6ZSk7CgogICAgICAgIGludCBfX3IgPSB0cmFpdHNf dHlwZTo6Y29tcGFyZShfTV9kYXRhKCksIF9fc3RyLmRhdGEoKSwgX19sZW4pOwogICAgICAgIGlm ICghX19yKQogICAgICAgICAgX19yID0gX19zaXplIC0gX19vc2l6ZTsKICAgICAgICByZXR1cm4g X19yOwogICAgICB9CgogICAgICBpbnQKICAgICAgY29tcGFyZShzaXplX3R5cGUgX19wb3MsIHNp emVfdHlwZSBfX24sIGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIpIGNvbnN0OwoKICAgICAgaW50 CiAgICAgIGNvbXBhcmUoc2l6ZV90eXBlIF9fcG9zMSwgc2l6ZV90eXBlIF9fbjEsIGNvbnN0IGJh c2ljX3N0cmluZyYgX19zdHIsCiAgICAgICAgICAgICAgc2l6ZV90eXBlIF9fcG9zMiwgc2l6ZV90 eXBlIF9fbjIpIGNvbnN0OwoKICAgICAgaW50CiAgICAgIGNvbXBhcmUoY29uc3QgX0NoYXJUKiBf X3MpIGNvbnN0OwoKCgogICAgICBpbnQKICAgICAgY29tcGFyZShzaXplX3R5cGUgX19wb3MsIHNp emVfdHlwZSBfX24xLCBjb25zdCBfQ2hhclQqIF9fcykgY29uc3Q7CgogICAgICBpbnQKICAgICAg Y29tcGFyZShzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24xLCBjb25zdCBfQ2hhclQqIF9f cywKICAgICAgICAgICAgICBzaXplX3R5cGUgX19uMikgY29uc3Q7CiAgfTsKCgogIHRlbXBsYXRl PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAg aW5saW5lIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgYmFzaWNf c3RyaW5nKCkKICAgIDogX01fZGF0YXBsdXMoX1NfZW1wdHlfcmVwKCkuX01fcmVmY29weSgpLCBf QWxsb2MoKSkgeyB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp dHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9B bGxvYz4KICAgIG9wZXJhdG9yKyhjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBf QWxsb2M+JiBfX2xocywKICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBf VHJhaXRzLCBfQWxsb2M+JiBfX3JocykKICAgIHsKICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwg X1RyYWl0cywgX0FsbG9jPiBfX3N0cihfX2xocyk7CiAgICAgIF9fc3RyLmFwcGVuZChfX3Jocyk7 CiAgICAgIHJldHVybiBfX3N0cjsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0 eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJU LF9UcmFpdHMsX0FsbG9jPgogICAgb3BlcmF0b3IrKGNvbnN0IF9DaGFyVCogX19saHMsCiAgICAg ICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRzLF9BbGxvYz4mIF9fcmhz KTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFt ZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9jPgogICAgb3Bl cmF0b3IrKF9DaGFyVCBfX2xocywgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRzLF9B bGxvYz4mIF9fcmhzKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh aXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1Ry YWl0cywgX0FsbG9jPgogICAgb3BlcmF0b3IrKGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9U cmFpdHMsIF9BbGxvYz4mIF9fbGhzLAogICAgICAgICAgICAgY29uc3QgX0NoYXJUKiBfX3JocykK ICAgIHsKICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiBfX3N0cihf X2xocyk7CiAgICAgIF9fc3RyLmFwcGVuZChfX3Jocyk7CiAgICAgIHJldHVybiBfX3N0cjsKICAg IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFt ZSBfQWxsb2M+CiAgICBpbmxpbmUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9j PgogICAgb3BlcmF0b3IrKGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxv Yz4mIF9fbGhzLCBfQ2hhclQgX19yaHMpCiAgICB7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5n PF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiBfX3N0cmluZ190eXBlOwogICAgICB0eXBlZGVmIHR5 cGVuYW1lIF9fc3RyaW5nX3R5cGU6OnNpemVfdHlwZSBfX3NpemVfdHlwZTsKICAgICAgX19zdHJp bmdfdHlwZSBfX3N0cihfX2xocyk7CiAgICAgIF9fc3RyLmFwcGVuZChfX3NpemVfdHlwZSgxKSwg X19yaHMpOwogICAgICByZXR1cm4gX19zdHI7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29s CiAgICBvcGVyYXRvcj09KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxv Yz4mIF9fbGhzLAogICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJh aXRzLCBfQWxsb2M+JiBfX3JocykKICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpID09 IDA7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBl bmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I9PShjb25zdCBfQ2hhclQq IF9fbGhzLAogICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRz LCBfQWxsb2M+JiBfX3JocykKICAgIHsgcmV0dXJuIF9fcmhzLmNvbXBhcmUoX19saHMpID09IDA7 IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFt ZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I9PShjb25zdCBiYXNpY19zdHJp bmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywKICAgICAgICAgICAgICAgY29uc3Qg X0NoYXJUKiBfX3JocykKICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpID09IDA7IH0K CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUg X0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yIT0oY29uc3QgYmFzaWNfc3RyaW5n PF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsCiAgICAgICAgICAgICAgIGNvbnN0IGJh c2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcmhzKQogICAgeyByZXR1cm4g X19yaHMuY29tcGFyZShfX2xocykgIT0gMDsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs IHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBv cGVyYXRvciE9KGNvbnN0IF9DaGFyVCogX19saHMsCiAgICAgICAgICAgICAgIGNvbnN0IGJhc2lj X3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcmhzKQogICAgeyByZXR1cm4gX19y aHMuY29tcGFyZShfX2xocykgIT0gMDsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5 cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVy YXRvciE9KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhz LAogICAgICAgICAgICAgICBjb25zdCBfQ2hhclQqIF9fcmhzKQogICAgeyByZXR1cm4gX19saHMu Y29tcGFyZShfX3JocykgIT0gMDsgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl bmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0 b3I8KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhzLAog ICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4m IF9fcmhzKQogICAgeyByZXR1cm4gX19saHMuY29tcGFyZShfX3JocykgPCAwOyB9CgogIHRlbXBs YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgog ICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPChjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBf VHJhaXRzLCBfQWxsb2M+JiBfX2xocywKICAgICAgICAgICAgICBjb25zdCBfQ2hhclQqIF9fcmhz KQogICAgeyByZXR1cm4gX19saHMuY29tcGFyZShfX3JocykgPCAwOyB9CgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5s aW5lIGJvb2wKICAgIG9wZXJhdG9yPChjb25zdCBfQ2hhclQqIF9fbGhzLAogICAgICAgICAgICAg IGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcmhzKQogICAg eyByZXR1cm4gX19yaHMuY29tcGFyZShfX2xocykgPiAwOyB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBi b29sCiAgICBvcGVyYXRvcj4oY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0Fs bG9jPiYgX19saHMsCiAgICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1Ry YWl0cywgX0FsbG9jPiYgX19yaHMpCiAgICB7IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSA+ IDA7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBl bmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I+KGNvbnN0IGJhc2ljX3N0 cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhzLAogICAgICAgICAgICAgIGNvbnN0 IF9DaGFyVCogX19yaHMpCiAgICB7IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSA+IDA7IH0K CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBf QWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I+KGNvbnN0IF9DaGFyVCogX19saHMs CiAgICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9j PiYgX19yaHMpCiAgICB7IHJldHVybiBfX3Jocy5jb21wYXJlKF9fbGhzKSA8IDA7IH0KCgogIHRl bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9j PgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPD0oY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFy VCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsCiAgICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0 cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcmhzKQogICAgeyByZXR1cm4gX19saHMu Y29tcGFyZShfX3JocykgPD0gMDsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu YW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRv cjw9KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhzLAog ICAgICAgICAgICAgICBjb25zdCBfQ2hhclQqIF9fcmhzKQogICAgeyByZXR1cm4gX19saHMuY29t cGFyZShfX3JocykgPD0gMDsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l IF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcjw9 KGNvbnN0IF9DaGFyVCogX19saHMsCiAgICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxf Q2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcmhzKQogIHsgcmV0dXJuIF9fcmhzLmNvbXBhcmUo X19saHMpID49IDA7IH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry YWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPj0oY29u c3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsCiAgICAgICAg ICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcmhz KQogICAgeyByZXR1cm4gX19saHMuY29tcGFyZShfX3JocykgPj0gMDsgfQoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlu bGluZSBib29sCiAgICBvcGVyYXRvcj49KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFp dHMsIF9BbGxvYz4mIF9fbGhzLAogICAgICAgICAgICAgICBjb25zdCBfQ2hhclQqIF9fcmhzKQog ICAgeyByZXR1cm4gX19saHMuY29tcGFyZShfX3JocykgPj0gMDsgfQoKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGlu ZSBib29sCiAgICBvcGVyYXRvcj49KGNvbnN0IF9DaGFyVCogX19saHMsCiAgICAgICAgICAgICBj b25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3JocykKICAgIHsg cmV0dXJuIF9fcmhzLmNvbXBhcmUoX19saHMpIDw9IDA7IH0KCgogIHRlbXBsYXRlPHR5cGVuYW1l IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIHZv aWQKICAgIHN3YXAoYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMs CiAgICAgICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcmhzKQog ICAgeyBfX2xocy5zd2FwKF9fcmhzKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5 cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJU LCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPj4oYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+ JiBfX2lzLAogICAgICAgICAgICAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxs b2M+JiBfX3N0cik7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0 cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Jgog ICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3MsCiAgICAg ICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9f c3RyKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBl bmFtZSBfQWxsb2M+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCxfVHJhaXRzPiYKICAgIGdldGxp bmUoYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2lzLAogICAgICAgICAgICBiYXNp Y19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3N0ciwgX0NoYXJUIF9fZGVsaW0p OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1l IF9BbGxvYz4KICAgIGlubGluZSBiYXNpY19pc3RyZWFtPF9DaGFyVCxfVHJhaXRzPiYKICAgIGdl dGxpbmUoYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2lzLAogICAgICAgICAgICBi YXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3N0cik7Cn0KIyA1NCAiL3Vz ci9jeWdudXMvYmluLy4uL2luY2x1ZGUvYysrLzMuMS4xL3N0cmluZyIgMiAzCgoKIyAxICIvdXNy L2N5Z251cy9iaW4vLi4vaW5jbHVkZS9jKysvMy4xLjEvYWxnb3JpdGhtIiAxIDMKIyA2NSAiL3Vz ci9jeWdudXMvYmluLy4uL2luY2x1ZGUvYysrLzMuMS4xL2FsZ29yaXRobSIgMwoKCgoKIyAxICIv dXNyL2N5Z251cy9iaW4vLi4vaW5jbHVkZS9jKysvMy4xLjEvYml0cy9zdGxfYWxnby5oIiAxIDMK IyA2NCAiL3Vzci9jeWdudXMvYmluLy4uL2luY2x1ZGUvYysrLzMuMS4xL2JpdHMvc3RsX2FsZ28u aCIgMwojIDEgIi91c3IvY3lnbnVzL2Jpbi8uLi9pbmNsdWRlL2MrKy8zLjEuMS9iaXRzL3N0bF9o ZWFwLmgiIDEgMwojIDYzICIvdXNyL2N5Z251cy9iaW4vLi4vaW5jbHVkZS9jKysvMy4xLjEvYml0 cy9zdGxfaGVhcC5oIiAzCm5hbWVzcGFjZSBzdGQKewoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9S YW5kb21BY2Nlc3NJdGVyYXRvciwgdHlwZW5hbWUgX0Rpc3RhbmNlLCB0eXBlbmFtZSBfVHA+CiAg ICB2b2lkCiAgICBfX3B1c2hfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwKICAg ICAgICAgICAgICAgIF9EaXN0YW5jZSBfX2hvbGVJbmRleCwgX0Rpc3RhbmNlIF9fdG9wSW5kZXgs IF9UcCBfX3ZhbHVlKQogICAgewogICAgICBfRGlzdGFuY2UgX19wYXJlbnQgPSAoX19ob2xlSW5k ZXggLSAxKSAvIDI7CiAgICAgIHdoaWxlIChfX2hvbGVJbmRleCA+IF9fdG9wSW5kZXggJiYgKihf X2ZpcnN0ICsgX19wYXJlbnQpIDwgX192YWx1ZSkgewogICAgICAgICooX19maXJzdCArIF9faG9s ZUluZGV4KSA9ICooX19maXJzdCArIF9fcGFyZW50KTsKICAgICAgICBfX2hvbGVJbmRleCA9IF9f cGFyZW50OwogICAgICAgIF9fcGFyZW50ID0gKF9faG9sZUluZGV4IC0gMSkgLyAyOwogICAgICB9 CiAgICAgICooX19maXJzdCArIF9faG9sZUluZGV4KSA9IF9fdmFsdWU7CiAgICB9CgogIHRlbXBs YXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvcj4KICAgIGlubGluZSB2b2lkCiAgICBw dXNoX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVy YXRvciBfX2xhc3QpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRz PF9SYW5kb21BY2Nlc3NJdGVyYXRvcj46OnZhbHVlX3R5cGUKICAgICAgICAgIF9WYWx1ZVR5cGU7 CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVy YXRvcj46OmRpZmZlcmVuY2VfdHlwZQogICAgICAgICAgX0Rpc3RhbmNlVHlwZTsKCgogICAgIAoK ICAgICAKCiAgICAgIF9fcHVzaF9oZWFwKF9fZmlyc3QsIF9EaXN0YW5jZVR5cGUoKF9fbGFzdCAt IF9fZmlyc3QpIC0gMSksIF9EaXN0YW5jZVR5cGUoMCksCiAgICAgICAgICAgICAgICAgIF9WYWx1 ZVR5cGUoKihfX2xhc3QgLSAxKSkpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9t QWNjZXNzSXRlcmF0b3IsIHR5cGVuYW1lIF9EaXN0YW5jZSwgdHlwZW5hbWUgX1RwLAogICAgICAg ICAgICB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIHZvaWQKICAgIF9fcHVzaF9oZWFwKF9SYW5kb21B Y2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfRGlzdGFuY2UgX19ob2xlSW5kZXgsCiAgICAgICAgICAg ICAgICBfRGlzdGFuY2UgX190b3BJbmRleCwgX1RwIF9fdmFsdWUsIF9Db21wYXJlIF9fY29tcCkK ICAgIHsKICAgICAgX0Rpc3RhbmNlIF9fcGFyZW50ID0gKF9faG9sZUluZGV4IC0gMSkgLyAyOwog ICAgICB3aGlsZSAoX19ob2xlSW5kZXggPiBfX3RvcEluZGV4ICYmIF9fY29tcCgqKF9fZmlyc3Qg KyBfX3BhcmVudCksIF9fdmFsdWUpKSB7CiAgICAgICAgKihfX2ZpcnN0ICsgX19ob2xlSW5kZXgp ID0gKihfX2ZpcnN0ICsgX19wYXJlbnQpOwogICAgICAgIF9faG9sZUluZGV4ID0gX19wYXJlbnQ7 CiAgICAgICAgX19wYXJlbnQgPSAoX19ob2xlSW5kZXggLSAxKSAvIDI7CiAgICAgIH0KICAgICAg KihfX2ZpcnN0ICsgX19ob2xlSW5kZXgpID0gX192YWx1ZTsKICAgIH0KCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIGlubGlu ZSB2b2lkCiAgICBwdXNoX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5k b21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQog ICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNz SXRlcmF0b3I+Ojp2YWx1ZV90eXBlCiAgICAgICAgICBfVmFsdWVUeXBlOwogICAgICB0eXBlZGVm IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0b3I+OjpkaWZmZXJl bmNlX3R5cGUKICAgICAgICAgIF9EaXN0YW5jZVR5cGU7CgoKICAgICAKCgogICAgICBfX3B1c2hf aGVhcChfX2ZpcnN0LCBfRGlzdGFuY2VUeXBlKChfX2xhc3QgLSBfX2ZpcnN0KSAtIDEpLCBfRGlz dGFuY2VUeXBlKDApLAogICAgICAgICAgICAgICAgICBfVmFsdWVUeXBlKCooX19sYXN0IC0gMSkp LCBfX2NvbXApOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0 b3IsIHR5cGVuYW1lIF9EaXN0YW5jZSwgdHlwZW5hbWUgX1RwPgogICAgdm9pZAogICAgX19hZGp1 c3RfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX0Rpc3RhbmNlIF9faG9sZUlu ZGV4LAogICAgICAgICAgICAgICAgICBfRGlzdGFuY2UgX19sZW4sIF9UcCBfX3ZhbHVlKQogICAg ewogICAgICBfRGlzdGFuY2UgX190b3BJbmRleCA9IF9faG9sZUluZGV4OwogICAgICBfRGlzdGFu Y2UgX19zZWNvbmRDaGlsZCA9IDIgKiBfX2hvbGVJbmRleCArIDI7CiAgICAgIHdoaWxlIChfX3Nl Y29uZENoaWxkIDwgX19sZW4pIHsKICAgICAgICBpZiAoKihfX2ZpcnN0ICsgX19zZWNvbmRDaGls ZCkgPCAqKF9fZmlyc3QgKyAoX19zZWNvbmRDaGlsZCAtIDEpKSkKICAgICAgICAgIF9fc2Vjb25k Q2hpbGQtLTsKICAgICAgICAqKF9fZmlyc3QgKyBfX2hvbGVJbmRleCkgPSAqKF9fZmlyc3QgKyBf X3NlY29uZENoaWxkKTsKICAgICAgICBfX2hvbGVJbmRleCA9IF9fc2Vjb25kQ2hpbGQ7CiAgICAg ICAgX19zZWNvbmRDaGlsZCA9IDIgKiAoX19zZWNvbmRDaGlsZCArIDEpOwogICAgICB9CiAgICAg IGlmIChfX3NlY29uZENoaWxkID09IF9fbGVuKSB7CiAgICAgICAgKihfX2ZpcnN0ICsgX19ob2xl SW5kZXgpID0gKihfX2ZpcnN0ICsgKF9fc2Vjb25kQ2hpbGQgLSAxKSk7CiAgICAgICAgX19ob2xl SW5kZXggPSBfX3NlY29uZENoaWxkIC0gMTsKICAgICAgfQogICAgICBfX3B1c2hfaGVhcChfX2Zp cnN0LCBfX2hvbGVJbmRleCwgX190b3BJbmRleCwgX192YWx1ZSk7CiAgICB9CgogIHRlbXBsYXRl PHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgdHlwZW5hbWUgX1RwPgogICAgaW5saW5l IHZvaWQKICAgIF9fcG9wX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5k b21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVy YXRvciBfX3Jlc3VsdCwgX1RwIF9fdmFsdWUpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUg aXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZSBf RGlzdGFuY2U7CiAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0OwogICAgICBfX2FkanVzdF9oZWFw KF9fZmlyc3QsIF9EaXN0YW5jZSgwKSwgX0Rpc3RhbmNlKF9fbGFzdCAtIF9fZmlyc3QpLCBfX3Zh bHVlKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPgog ICAgaW5saW5lIHZvaWQKICAgIHBvcF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0 LCBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0KQogICAgewogICAgICB0eXBlZGVmIHR5cGVu YW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0b3I+Ojp2YWx1ZV90eXBlIF9W YWx1ZVR5cGU7CgoKICAgICAKCiAgICAgCgogICAgICBfX3BvcF9oZWFwKF9fZmlyc3QsIF9fbGFz dCAtIDEsIF9fbGFzdCAtIDEsIF9WYWx1ZVR5cGUoKihfX2xhc3QgLSAxKSkpOwogICAgfQoKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIHR5cGVuYW1lIF9EaXN0YW5j ZSwKICAgICAgICAgICB0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgdm9pZAog ICAgX19hZGp1c3RfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX0Rpc3RhbmNl IF9faG9sZUluZGV4LAogICAgICAgICAgICAgICAgICBfRGlzdGFuY2UgX19sZW4sIF9UcCBfX3Zh bHVlLCBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAgIF9EaXN0YW5jZSBfX3RvcEluZGV4ID0g X19ob2xlSW5kZXg7CiAgICAgIF9EaXN0YW5jZSBfX3NlY29uZENoaWxkID0gMiAqIF9faG9sZUlu ZGV4ICsgMjsKICAgICAgd2hpbGUgKF9fc2Vjb25kQ2hpbGQgPCBfX2xlbikgewogICAgICAgIGlm IChfX2NvbXAoKihfX2ZpcnN0ICsgX19zZWNvbmRDaGlsZCksICooX19maXJzdCArIChfX3NlY29u ZENoaWxkIC0gMSkpKSkKICAgICAgICAgIF9fc2Vjb25kQ2hpbGQtLTsKICAgICAgICAqKF9fZmly c3QgKyBfX2hvbGVJbmRleCkgPSAqKF9fZmlyc3QgKyBfX3NlY29uZENoaWxkKTsKICAgICAgICBf X2hvbGVJbmRleCA9IF9fc2Vjb25kQ2hpbGQ7CiAgICAgICAgX19zZWNvbmRDaGlsZCA9IDIgKiAo X19zZWNvbmRDaGlsZCArIDEpOwogICAgICB9CiAgICAgIGlmIChfX3NlY29uZENoaWxkID09IF9f bGVuKSB7CiAgICAgICAgKihfX2ZpcnN0ICsgX19ob2xlSW5kZXgpID0gKihfX2ZpcnN0ICsgKF9f c2Vjb25kQ2hpbGQgLSAxKSk7CiAgICAgICAgX19ob2xlSW5kZXggPSBfX3NlY29uZENoaWxkIC0g MTsKICAgICAgfQogICAgICBfX3B1c2hfaGVhcChfX2ZpcnN0LCBfX2hvbGVJbmRleCwgX190b3BJ bmRleCwgX192YWx1ZSwgX19jb21wKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRv bUFjY2Vzc0l0ZXJhdG9yLCB0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgaW5s aW5lIHZvaWQKICAgIF9fcG9wX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9S YW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJ dGVyYXRvciBfX3Jlc3VsdCwgX1RwIF9fdmFsdWUsIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAg ICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9y Pjo6ZGlmZmVyZW5jZV90eXBlIF9EaXN0YW5jZTsKICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3Q7 CiAgICAgIF9fYWRqdXN0X2hlYXAoX19maXJzdCwgX0Rpc3RhbmNlKDApLCBfRGlzdGFuY2UoX19s YXN0IC0gX19maXJzdCksCiAgICAgICAgICAgICAgICAgICAgX192YWx1ZSwgX19jb21wKTsKICAg IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCB0eXBlbmFtZSBf Q29tcGFyZT4KICAgIGlubGluZSB2b2lkCiAgICBwb3BfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0 b3IgX19maXJzdCwKICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsIF9D b21wYXJlIF9fY29tcCkKICAgIHsKCiAgICAgCgoKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVy YXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBl OwogICAgICBfX3BvcF9oZWFwKF9fZmlyc3QsIF9fbGFzdCAtIDEsIF9fbGFzdCAtIDEsIF9WYWx1 ZVR5cGUoKihfX2xhc3QgLSAxKSksIF9fY29tcCk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1l IF9SYW5kb21BY2Nlc3NJdGVyYXRvcj4KICAgIHZvaWQKICAgIG1ha2VfaGVhcChfUmFuZG9tQWNj ZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCkKICAgIHsK ICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJh dG9yPjo6dmFsdWVfdHlwZQogICAgICAgICAgX1ZhbHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBl bmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90 eXBlCiAgICAgICAgICBfRGlzdGFuY2VUeXBlOwoKCiAgICAgCgogICAgIAoKICAgICAgaWYgKF9f bGFzdCAtIF9fZmlyc3QgPCAyKSByZXR1cm47CiAgICAgIF9EaXN0YW5jZVR5cGUgX19sZW4gPSBf X2xhc3QgLSBfX2ZpcnN0OwogICAgICBfRGlzdGFuY2VUeXBlIF9fcGFyZW50ID0gKF9fbGVuIC0g MikvMjsKCiAgICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgX19hZGp1c3RfaGVhcChfX2ZpcnN0 LCBfX3BhcmVudCwgX19sZW4sIF9WYWx1ZVR5cGUoKihfX2ZpcnN0ICsgX19wYXJlbnQpKSk7CiAg ICAgICAgaWYgKF9fcGFyZW50ID09IDApIHJldHVybjsKICAgICAgICBfX3BhcmVudC0tOwogICAg ICB9CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgdHlw ZW5hbWUgX0NvbXBhcmU+CiAgICBpbmxpbmUgdm9pZAogICAgbWFrZV9oZWFwKF9SYW5kb21BY2Nl c3NJdGVyYXRvciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LAogICAgICAg ICAgICAgIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVy YXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6dmFsdWVfdHlwZQogICAgICAgICAg X1ZhbHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRv bUFjY2Vzc0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlCiAgICAgICAgICBfRGlzdGFuY2VUeXBl OwoKCiAgICAgCgoKICAgICAgaWYgKF9fbGFzdCAtIF9fZmlyc3QgPCAyKSByZXR1cm47CiAgICAg IF9EaXN0YW5jZVR5cGUgX19sZW4gPSBfX2xhc3QgLSBfX2ZpcnN0OwogICAgICBfRGlzdGFuY2VU eXBlIF9fcGFyZW50ID0gKF9fbGVuIC0gMikvMjsKCiAgICAgIHdoaWxlICh0cnVlKSB7CiAgICAg ICAgX19hZGp1c3RfaGVhcChfX2ZpcnN0LCBfX3BhcmVudCwgX19sZW4sCiAgICAgICAgICAgICAg ICAgICAgICBfVmFsdWVUeXBlKCooX19maXJzdCArIF9fcGFyZW50KSksIF9fY29tcCk7CiAgICAg ICAgaWYgKF9fcGFyZW50ID09IDApIHJldHVybjsKICAgICAgICBfX3BhcmVudC0tOwogICAgICB9 CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvcj4KICAgIHZv aWQKICAgIHNvcnRfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFj Y2Vzc0l0ZXJhdG9yIF9fbGFzdCkKICAgIHsKCiAgICAgCgogICAgIAoKCiAgICAgIHdoaWxlIChf X2xhc3QgLSBfX2ZpcnN0ID4gMSkKICAgICAgICBwb3BfaGVhcChfX2ZpcnN0LCBfX2xhc3QtLSk7 CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgdHlwZW5h bWUgX0NvbXBhcmU+CiAgICB2b2lkCiAgICBzb3J0X2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9y IF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgX0Nv bXBhcmUgX19jb21wKQogICAgewoKICAgICAKCgogICAgICB3aGlsZSAoX19sYXN0IC0gX19maXJz dCA+IDEpCiAgICAgICAgcG9wX2hlYXAoX19maXJzdCwgX19sYXN0LS0sIF9fY29tcCk7CiAgICB9 Cgp9CiMgNjUgIi91c3IvY3lnbnVzL2Jpbi8uLi9pbmNsdWRlL2MrKy8zLjEuMS9iaXRzL3N0bF9h bGdvLmgiIDIgMwojIDEgIi91c3IvY3lnbnVzL2Jpbi8uLi9pbmNsdWRlL2MrKy8zLjEuMS9iaXRz L3N0bF90ZW1wYnVmLmgiIDEgMwojIDY0ICIvdXNyL2N5Z251cy9iaW4vLi4vaW5jbHVkZS9jKysv My4xLjEvYml0cy9zdGxfdGVtcGJ1Zi5oIiAzCm5hbWVzcGFjZSBzdGQKewojIDc0ICIvdXNyL2N5 Z251cy9iaW4vLi4vaW5jbHVkZS9jKysvMy4xLjEvYml0cy9zdGxfdGVtcGJ1Zi5oIiAzCnRlbXBs YXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yLCBjbGFzcyBfVHA+CiAgY2xhc3MgX1RlbXBvcmFy eV9idWZmZXIKewoKIAoKICBwdHJkaWZmX3QgX01fb3JpZ2luYWxfbGVuOwogIHB0cmRpZmZfdCBf TV9sZW47CiAgX1RwKiBfTV9idWZmZXI7CgoKICB2b2lkIF9NX2FsbG9jYXRlX2J1ZmZlcigpIHsK ICAgIF9NX29yaWdpbmFsX2xlbiA9IF9NX2xlbjsKICAgIF9NX2J1ZmZlciA9IDA7CgogICAgaWYg KF9NX2xlbiA+IChwdHJkaWZmX3QpKDIxNDc0ODM2NDcgLyBzaXplb2YoX1RwKSkpCiAgICAgIF9N X2xlbiA9IDIxNDc0ODM2NDcgLyBzaXplb2YoX1RwKTsKCiAgICB3aGlsZSAoX01fbGVuID4gMCkg ewogICAgICBfTV9idWZmZXIgPSAoX1RwKikgbWFsbG9jKF9NX2xlbiAqIHNpemVvZihfVHApKTsK ICAgICAgaWYgKF9NX2J1ZmZlcikKICAgICAgICBicmVhazsKICAgICAgX01fbGVuIC89IDI7CiAg ICB9CiAgfQoKICB2b2lkIF9NX2luaXRpYWxpemVfYnVmZmVyKGNvbnN0IF9UcCYsIF9fdHJ1ZV90 eXBlKSB7fQogIHZvaWQgX01faW5pdGlhbGl6ZV9idWZmZXIoY29uc3QgX1RwJiB2YWwsIF9fZmFs c2VfdHlwZSkgewogICAgdW5pbml0aWFsaXplZF9maWxsX24oX01fYnVmZmVyLCBfTV9sZW4sIHZh bCk7CiAgfQoKcHVibGljOgoKICBwdHJkaWZmX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIF9NX2xl bjsgfQoKICBwdHJkaWZmX3QgcmVxdWVzdGVkX3NpemUoKSBjb25zdCB7IHJldHVybiBfTV9vcmln aW5hbF9sZW47IH0KCiAgX1RwKiBiZWdpbigpIHsgcmV0dXJuIF9NX2J1ZmZlcjsgfQoKICBfVHAq IGVuZCgpIHsgcmV0dXJuIF9NX2J1ZmZlciArIF9NX2xlbjsgfQoKICBfVGVtcG9yYXJ5X2J1ZmZl cihfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0KSB7Cgog ICAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5cGVfdHJhaXRzPF9UcD46Omhhc190cml2aWFsX2RlZmF1 bHRfY29uc3RydWN0b3IKICAgICAgICAgICAgX1RyaXZpYWw7CgogICAgdHJ5IHsKICAgICAgX01f bGVuID0gZGlzdGFuY2UoX19maXJzdCwgX19sYXN0KTsKICAgICAgX01fYWxsb2NhdGVfYnVmZmVy KCk7CiAgICAgIGlmIChfTV9sZW4gPiAwKQogICAgICAgIF9NX2luaXRpYWxpemVfYnVmZmVyKCpf X2ZpcnN0LCBfVHJpdmlhbCgpKTsKICAgIH0KICAgIGNhdGNoKC4uLikKICAgICAgewogICAgICAg IGZyZWUoX01fYnVmZmVyKTsKICAgICAgICBfTV9idWZmZXIgPSAwOwogICAgICAgIF9NX2xlbiA9 IDA7CiAgICAgICAgdGhyb3c7CiAgICAgIH0KICB9CgogIH5fVGVtcG9yYXJ5X2J1ZmZlcigpIHsK ICAgIF9EZXN0cm95KF9NX2J1ZmZlciwgX01fYnVmZmVyICsgX01fbGVuKTsKICAgIGZyZWUoX01f YnVmZmVyKTsKICB9Cgpwcml2YXRlOgoKICBfVGVtcG9yYXJ5X2J1ZmZlcihjb25zdCBfVGVtcG9y YXJ5X2J1ZmZlciYpIHt9CiAgdm9pZCBvcGVyYXRvcj0oY29uc3QgX1RlbXBvcmFyeV9idWZmZXIm KSB7fQp9OwoKfQojIDY2ICIvdXNyL2N5Z251cy9iaW4vLi4vaW5jbHVkZS9jKysvMy4xLjEvYml0 cy9zdGxfYWxnby5oIiAyIDMKCgoKbmFtZXNwYWNlIHN0ZAp7CiMgODQgIi91c3IvY3lnbnVzL2Jp bi8uLi9pbmNsdWRlL2MrKy8zLjEuMS9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfVHA+CiAgaW5saW5lIGNvbnN0IF9UcCYKICAgIF9fbWVkaWFuKGNvbnN0IF9UcCYgX19h LCBjb25zdCBfVHAmIF9fYiwgY29uc3QgX1RwJiBfX2MpCiAgICB7CgogICAgIAogICAgICBpZiAo X19hIDwgX19iKQogICAgICAgIGlmIChfX2IgPCBfX2MpCiAgICAgICAgICByZXR1cm4gX19iOwog ICAgICAgIGVsc2UgaWYgKF9fYSA8IF9fYykKICAgICAgICAgIHJldHVybiBfX2M7CiAgICAgICAg ZWxzZQogICAgICAgICAgcmV0dXJuIF9fYTsKICAgICAgZWxzZSBpZiAoX19hIDwgX19jKQogICAg ICAgIHJldHVybiBfX2E7CiAgICAgIGVsc2UgaWYgKF9fYiA8IF9fYykKICAgICAgICByZXR1cm4g X19jOwogICAgICBlbHNlCiAgICAgICAgcmV0dXJuIF9fYjsKICAgIH0KIyAxMTggIi91c3IvY3ln bnVzL2Jpbi8uLi9pbmNsdWRlL2MrKy8zLjEuMS9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgaW5saW5lIGNvbnN0IF9UcCYK ICAgIF9fbWVkaWFuKGNvbnN0IF9UcCYgX19hLCBjb25zdCBfVHAmIF9fYiwgY29uc3QgX1RwJiBf X2MsIF9Db21wYXJlIF9fY29tcCkKICAgIHsKCiAgICAgCiAgICAgIGlmIChfX2NvbXAoX19hLCBf X2IpKQogICAgICAgIGlmIChfX2NvbXAoX19iLCBfX2MpKQogICAgICAgICAgcmV0dXJuIF9fYjsK ICAgICAgICBlbHNlIGlmIChfX2NvbXAoX19hLCBfX2MpKQogICAgICAgICAgcmV0dXJuIF9fYzsK ICAgICAgICBlbHNlCiAgICAgICAgICByZXR1cm4gX19hOwogICAgICBlbHNlIGlmIChfX2NvbXAo X19hLCBfX2MpKQogICAgICAgIHJldHVybiBfX2E7CiAgICAgIGVsc2UgaWYgKF9fY29tcChfX2Is IF9fYykpCiAgICAgICAgcmV0dXJuIF9fYzsKICAgICAgZWxzZQogICAgICAgIHJldHVybiBfX2I7 CiAgICB9CiMgMTUwICIvdXNyL2N5Z251cy9iaW4vLi4vaW5jbHVkZS9jKysvMy4xLjEvYml0cy9z dGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX0Z1 bmN0aW9uPgogICAgX0Z1bmN0aW9uCiAgICBmb3JfZWFjaChfSW5wdXRJdGVyIF9fZmlyc3QsIF9J bnB1dEl0ZXIgX19sYXN0LCBfRnVuY3Rpb24gX19mKQogICAgewoKICAgICAKICAgICAgZm9yICgg OyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgICAgIF9fZigqX19maXJzdCk7CiAg ICAgIHJldHVybiBfX2Y7CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRl ciwgdHlwZW5hbWUgX1RwPgogICAgaW5saW5lIF9JbnB1dEl0ZXIKICAgIGZpbmQoX0lucHV0SXRl ciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgY29uc3QgX1RwJiBfX3ZhbCwK ICAgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFnKQogICAgewogICAgICB3aGlsZSAoX19maXJzdCAh PSBfX2xhc3QgJiYgISgqX19maXJzdCA9PSBfX3ZhbCkpCiAgICAgICAgKytfX2ZpcnN0OwogICAg ICByZXR1cm4gX19maXJzdDsKICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJ dGVyLCB0eXBlbmFtZSBfUHJlZGljYXRlPgogICAgaW5saW5lIF9JbnB1dEl0ZXIKICAgIGZpbmRf aWYoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgX1By ZWRpY2F0ZSBfX3ByZWQsCiAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZykKICAgIHsKICAg ICAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0ICYmICFfX3ByZWQoKl9fZmlyc3QpKQogICAgICAg ICsrX19maXJzdDsKICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9UcD4KICAgIF9SYW5kb21BY2Nl c3NJdGVyCiAgICBmaW5kKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJ dGVyIF9fbGFzdCwKICAgICAgICAgY29uc3QgX1RwJiBfX3ZhbCwKICAgICAgICAgcmFuZG9tX2Fj Y2Vzc19pdGVyYXRvcl90YWcpCiAgICB7CiAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxf UmFuZG9tQWNjZXNzSXRlcj46OmRpZmZlcmVuY2VfdHlwZSBfX3RyaXBfY291bnQKICAgICAgICA9 IChfX2xhc3QgLSBfX2ZpcnN0KSA+PiAyOwoKICAgICAgZm9yICggOyBfX3RyaXBfY291bnQgPiAw IDsgLS1fX3RyaXBfY291bnQpIHsKICAgICAgICBpZiAoKl9fZmlyc3QgPT0gX192YWwpIHJldHVy biBfX2ZpcnN0OwogICAgICAgICsrX19maXJzdDsKCiAgICAgICAgaWYgKCpfX2ZpcnN0ID09IF9f dmFsKSByZXR1cm4gX19maXJzdDsKICAgICAgICArK19fZmlyc3Q7CgogICAgICAgIGlmICgqX19m aXJzdCA9PSBfX3ZhbCkgcmV0dXJuIF9fZmlyc3Q7CiAgICAgICAgKytfX2ZpcnN0OwoKICAgICAg ICBpZiAoKl9fZmlyc3QgPT0gX192YWwpIHJldHVybiBfX2ZpcnN0OwogICAgICAgICsrX19maXJz dDsKICAgICAgfQoKICAgICAgc3dpdGNoKF9fbGFzdCAtIF9fZmlyc3QpIHsKICAgICAgY2FzZSAz OgogICAgICAgIGlmICgqX19maXJzdCA9PSBfX3ZhbCkgcmV0dXJuIF9fZmlyc3Q7CiAgICAgICAg KytfX2ZpcnN0OwogICAgICBjYXNlIDI6CiAgICAgICAgaWYgKCpfX2ZpcnN0ID09IF9fdmFsKSBy ZXR1cm4gX19maXJzdDsKICAgICAgICArK19fZmlyc3Q7CiAgICAgIGNhc2UgMToKICAgICAgICBp ZiAoKl9fZmlyc3QgPT0gX192YWwpIHJldHVybiBfX2ZpcnN0OwogICAgICAgICsrX19maXJzdDsK ICAgICAgY2FzZSAwOgogICAgICBkZWZhdWx0OgogICAgICAgIHJldHVybiBfX2xhc3Q7CiAgICAg IH0KICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlw ZW5hbWUgX1ByZWRpY2F0ZT4KICAgIF9SYW5kb21BY2Nlc3NJdGVyCiAgICBmaW5kX2lmKF9SYW5k b21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAg ICAgX1ByZWRpY2F0ZSBfX3ByZWQsCiAgICAgICAgICAgIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3Jf dGFnKQogICAgewogICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0 ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX190cmlwX2NvdW50CiAgICAgICAgPSAoX19sYXN0IC0gX19m aXJzdCkgPj4gMjsKCiAgICAgIGZvciAoIDsgX190cmlwX2NvdW50ID4gMCA7IC0tX190cmlwX2Nv dW50KSB7CiAgICAgICAgaWYgKF9fcHJlZCgqX19maXJzdCkpIHJldHVybiBfX2ZpcnN0OwogICAg ICAgICsrX19maXJzdDsKCiAgICAgICAgaWYgKF9fcHJlZCgqX19maXJzdCkpIHJldHVybiBfX2Zp cnN0OwogICAgICAgICsrX19maXJzdDsKCiAgICAgICAgaWYgKF9fcHJlZCgqX19maXJzdCkpIHJl dHVybiBfX2ZpcnN0OwogICAgICAgICsrX19maXJzdDsKCiAgICAgICAgaWYgKF9fcHJlZCgqX19m aXJzdCkpIHJldHVybiBfX2ZpcnN0OwogICAgICAgICsrX19maXJzdDsKICAgICAgfQoKICAgICAg c3dpdGNoKF9fbGFzdCAtIF9fZmlyc3QpIHsKICAgICAgY2FzZSAzOgogICAgICAgIGlmIChfX3By ZWQoKl9fZmlyc3QpKSByZXR1cm4gX19maXJzdDsKICAgICAgICArK19fZmlyc3Q7CiAgICAgIGNh c2UgMjoKICAgICAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkgcmV0dXJuIF9fZmlyc3Q7CiAgICAg ICAgKytfX2ZpcnN0OwogICAgICBjYXNlIDE6CiAgICAgICAgaWYgKF9fcHJlZCgqX19maXJzdCkp IHJldHVybiBfX2ZpcnN0OwogICAgICAgICsrX19maXJzdDsKICAgICAgY2FzZSAwOgogICAgICBk ZWZhdWx0OgogICAgICAgIHJldHVybiBfX2xhc3Q7CiAgICAgIH0KICAgIH0KIyAyODkgIi91c3Iv Y3lnbnVzL2Jpbi8uLi9pbmNsdWRlL2MrKy8zLjEuMS9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUgX0lucHV0 SXRlcgogICAgZmluZChfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAg ICAgICBjb25zdCBfVHAmIF9fdmFsKQogICAgewoKICAgICAKICAgICAKCiAgICAgIHJldHVybiBm aW5kKF9fZmlyc3QsIF9fbGFzdCwgX192YWwsIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdCkp OwogICAgfQojIDMwOSAiL3Vzci9jeWdudXMvYmluLy4uL2luY2x1ZGUvYysrLzMuMS4xL2JpdHMv c3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9Q cmVkaWNhdGU+CiAgICBpbmxpbmUgX0lucHV0SXRlcgogICAgZmluZF9pZihfSW5wdXRJdGVyIF9f Zmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCkK ICAgIHsKCiAgICAgCiAgICAgCgogICAgICByZXR1cm4gZmluZF9pZihfX2ZpcnN0LCBfX2xhc3Qs IF9fcHJlZCwgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7CiAgICB9CiMgMzI5ICIvdXNy L2N5Z251cy9iaW4vLi4vaW5jbHVkZS9jKysvMy4xLjEvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyPgogICAgX0ZvcndhcmRJdGVyCiAgICBhZGphY2Vu dF9maW5kKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0KQogICAgewoK ICAgICAKICAgICAKCiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkKICAgICAgICByZXR1cm4g X19sYXN0OwogICAgICBfRm9yd2FyZEl0ZXIgX19uZXh0ID0gX19maXJzdDsKICAgICAgd2hpbGUo KytfX25leHQgIT0gX19sYXN0KSB7CiAgICAgICAgaWYgKCpfX2ZpcnN0ID09ICpfX25leHQpCiAg ICAgICAgICByZXR1cm4gX19maXJzdDsKICAgICAgICBfX2ZpcnN0ID0gX19uZXh0OwogICAgICB9 CiAgICAgIHJldHVybiBfX2xhc3Q7CiAgICB9CiMgMzU4ICIvdXNyL2N5Z251cy9iaW4vLi4vaW5j bHVkZS9jKysvMy4xLjEvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0Zv cndhcmRJdGVyLCB0eXBlbmFtZSBfQmluYXJ5UHJlZGljYXRlPgogICAgX0ZvcndhcmRJdGVyCiAg ICBhZGphY2VudF9maW5kKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0 LAogICAgICAgICAgICAgICAgICBfQmluYXJ5UHJlZGljYXRlIF9fYmluYXJ5X3ByZWQpCiAgICB7 CgogICAgIAogICAgIAoKCiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkKICAgICAgICByZXR1 cm4gX19sYXN0OwogICAgICBfRm9yd2FyZEl0ZXIgX19uZXh0ID0gX19maXJzdDsKICAgICAgd2hp bGUoKytfX25leHQgIT0gX19sYXN0KSB7CiAgICAgICAgaWYgKF9fYmluYXJ5X3ByZWQoKl9fZmly c3QsICpfX25leHQpKQogICAgICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICAgICAgX19maXJzdCA9 IF9fbmV4dDsKICAgICAgfQogICAgICByZXR1cm4gX19sYXN0OwogICAgfQojIDM4NyAiL3Vzci9j eWdudXMvYmluLy4uL2luY2x1ZGUvYysrLzMuMS4xL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBs YXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9UcD4KICAgIHR5cGVuYW1lIGl0ZXJh dG9yX3RyYWl0czxfSW5wdXRJdGVyPjo6ZGlmZmVyZW5jZV90eXBlCiAgICBjb3VudChfSW5wdXRJ dGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LCBjb25zdCBfVHAmIF9fdmFsdWUpCiAgICB7 CgogICAgIAogICAgIAoKICAgICAKICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1 dEl0ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX19uID0gMDsKICAgICAgZm9yICggOyBfX2ZpcnN0ICE9 IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgICAgIGlmICgqX19maXJzdCA9PSBfX3ZhbHVlKQogICAg ICAgICAgKytfX247CiAgICAgIHJldHVybiBfX247CiAgICB9CiMgNDExICIvdXNyL2N5Z251cy9i aW4vLi4vaW5jbHVkZS9jKysvMy4xLjEvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX1ByZWRpY2F0ZT4KICAgIHR5cGVuYW1lIGl0ZXJh dG9yX3RyYWl0czxfSW5wdXRJdGVyPjo6ZGlmZmVyZW5jZV90eXBlCiAgICBjb3VudF9pZihfSW5w dXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LCBfUHJlZGljYXRlIF9fcHJlZCkKICAg IHsKCiAgICAgCiAgICAgCgogICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRl cj46OmRpZmZlcmVuY2VfdHlwZSBfX24gPSAwOwogICAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19s YXN0OyArK19fZmlyc3QpCiAgICAgICAgaWYgKF9fcHJlZCgqX19maXJzdCkpCiAgICAgICAgICAr K19fbjsKICAgICAgcmV0dXJuIF9fbjsKICAgIH0KIyA0NTAgIi91c3IvY3lnbnVzL2Jpbi8uLi9p bmNsdWRlL2MrKy8zLjEuMS9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf Rm9yd2FyZEl0ZXIxLCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXIyPgogICAgX0ZvcndhcmRJdGVyMQog ICAgc2VhcmNoKF9Gb3J3YXJkSXRlcjEgX19maXJzdDEsIF9Gb3J3YXJkSXRlcjEgX19sYXN0MSwK ICAgICAgICAgICBfRm9yd2FyZEl0ZXIyIF9fZmlyc3QyLCBfRm9yd2FyZEl0ZXIyIF9fbGFzdDIp CiAgICB7CgogICAgIAogICAgIAogICAgIAoKCgoKICAgICAgaWYgKF9fZmlyc3QxID09IF9fbGFz dDEgfHwgX19maXJzdDIgPT0gX19sYXN0MikKICAgICAgICByZXR1cm4gX19maXJzdDE7CgoKICAg ICAgX0ZvcndhcmRJdGVyMiBfX3RtcChfX2ZpcnN0Mik7CiAgICAgICsrX190bXA7CiAgICAgIGlm IChfX3RtcCA9PSBfX2xhc3QyKQogICAgICAgIHJldHVybiBmaW5kKF9fZmlyc3QxLCBfX2xhc3Qx LCAqX19maXJzdDIpOwoKCgogICAgICBfRm9yd2FyZEl0ZXIyIF9fcDEsIF9fcDsKCiAgICAgIF9f cDEgPSBfX2ZpcnN0MjsgKytfX3AxOwoKICAgICAgX0ZvcndhcmRJdGVyMSBfX2N1cnJlbnQgPSBf X2ZpcnN0MTsKCiAgICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxKSB7CiAgICAgICAgX19m aXJzdDEgPSBmaW5kKF9fZmlyc3QxLCBfX2xhc3QxLCAqX19maXJzdDIpOwogICAgICAgIGlmIChf X2ZpcnN0MSA9PSBfX2xhc3QxKQogICAgICAgICAgcmV0dXJuIF9fbGFzdDE7CgogICAgICAgIF9f cCA9IF9fcDE7CiAgICAgICAgX19jdXJyZW50ID0gX19maXJzdDE7CiAgICAgICAgaWYgKCsrX19j dXJyZW50ID09IF9fbGFzdDEpCiAgICAgICAgICByZXR1cm4gX19sYXN0MTsKCiAgICAgICAgd2hp bGUgKCpfX2N1cnJlbnQgPT0gKl9fcCkgewogICAgICAgICAgaWYgKCsrX19wID09IF9fbGFzdDIp CiAgICAgICAgICAgIHJldHVybiBfX2ZpcnN0MTsKICAgICAgICAgIGlmICgrK19fY3VycmVudCA9 PSBfX2xhc3QxKQogICAgICAgICAgICByZXR1cm4gX19sYXN0MTsKICAgICAgICB9CgogICAgICAg ICsrX19maXJzdDE7CiAgICAgIH0KICAgICAgcmV0dXJuIF9fZmlyc3QxOwogICAgfQojIDUyMiAi L3Vzci9jeWdudXMvYmluLy4uL2luY2x1ZGUvYysrLzMuMS4xL2JpdHMvc3RsX2FsZ28uaCIgMwog IHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcjEsIHR5cGVuYW1lIF9Gb3J3YXJkSXRlcjIs IHR5cGVuYW1lIF9CaW5hcnlQcmVkPgogICAgX0ZvcndhcmRJdGVyMQogICAgc2VhcmNoKF9Gb3J3 YXJkSXRlcjEgX19maXJzdDEsIF9Gb3J3YXJkSXRlcjEgX19sYXN0MSwKICAgICAgICAgICBfRm9y d2FyZEl0ZXIyIF9fZmlyc3QyLCBfRm9yd2FyZEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgX0Jp bmFyeVByZWQgX19wcmVkaWNhdGUpCiAgICB7CgogICAgIAogICAgIAogICAgIAoKCgoKICAgICAg aWYgKF9fZmlyc3QxID09IF9fbGFzdDEgfHwgX19maXJzdDIgPT0gX19sYXN0MikKICAgICAgICBy ZXR1cm4gX19maXJzdDE7CgoKICAgICAgX0ZvcndhcmRJdGVyMiBfX3RtcChfX2ZpcnN0Mik7CiAg ICAgICsrX190bXA7CiAgICAgIGlmIChfX3RtcCA9PSBfX2xhc3QyKSB7CiAgICAgICAgd2hpbGUg KF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgIV9fcHJlZGljYXRlKCpfX2ZpcnN0MSwgKl9fZmlyc3Qy KSkKICAgICAgICAgICsrX19maXJzdDE7CiAgICAgICAgcmV0dXJuIF9fZmlyc3QxOwogICAgICB9 CgoKCiAgICAgIF9Gb3J3YXJkSXRlcjIgX19wMSwgX19wOwoKICAgICAgX19wMSA9IF9fZmlyc3Qy OyArK19fcDE7CgogICAgICBfRm9yd2FyZEl0ZXIxIF9fY3VycmVudCA9IF9fZmlyc3QxOwoKICAg ICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEpIHsKICAgICAgICB3aGlsZSAoX19maXJzdDEg IT0gX19sYXN0MSkgewogICAgICAgICAgaWYgKF9fcHJlZGljYXRlKCpfX2ZpcnN0MSwgKl9fZmly c3QyKSkKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICArK19fZmlyc3QxOwogICAgICAgIH0K ICAgICAgICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiAhX19wcmVkaWNhdGUoKl9fZmly c3QxLCAqX19maXJzdDIpKQogICAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgICBpZiAoX19maXJz dDEgPT0gX19sYXN0MSkKICAgICAgICAgIHJldHVybiBfX2xhc3QxOwoKICAgICAgICBfX3AgPSBf X3AxOwogICAgICAgIF9fY3VycmVudCA9IF9fZmlyc3QxOwogICAgICAgIGlmICgrK19fY3VycmVu dCA9PSBfX2xhc3QxKSByZXR1cm4gX19sYXN0MTsKCiAgICAgICAgd2hpbGUgKF9fcHJlZGljYXRl KCpfX2N1cnJlbnQsICpfX3ApKSB7CiAgICAgICAgICBpZiAoKytfX3AgPT0gX19sYXN0MikKICAg ICAgICAgICAgcmV0dXJuIF9fZmlyc3QxOwogICAgICAgICAgaWYgKCsrX19jdXJyZW50ID09IF9f bGFzdDEpCiAgICAgICAgICAgIHJldHVybiBfX2xhc3QxOwogICAgICAgIH0KCiAgICAgICAgKytf X2ZpcnN0MTsKICAgICAgfQogICAgICByZXR1cm4gX19maXJzdDE7CiAgICB9CiMgNTk2ICIvdXNy L2N5Z251cy9iaW4vLi4vaW5jbHVkZS9jKysvMy4xLjEvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfSW50ZWdlciwgdHlwZW5hbWUg X1RwPgogICAgX0ZvcndhcmRJdGVyCiAgICBzZWFyY2hfbihfRm9yd2FyZEl0ZXIgX19maXJzdCwg X0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgIF9JbnRlZ2VyIF9fY291bnQsIGNvbnN0 IF9UcCYgX192YWwpCiAgICB7CgogICAgIAogICAgIAoKICAgICAKCiAgICAgIGlmIChfX2NvdW50 IDw9IDApCiAgICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICAgIGVsc2UgewogICAgICAgIF9fZmly c3QgPSBmaW5kKF9fZmlyc3QsIF9fbGFzdCwgX192YWwpOwogICAgICAgIHdoaWxlIChfX2ZpcnN0 ICE9IF9fbGFzdCkgewogICAgICAgICAgX0ludGVnZXIgX19uID0gX19jb3VudCAtIDE7CiAgICAg ICAgICBfRm9yd2FyZEl0ZXIgX19pID0gX19maXJzdDsKICAgICAgICAgICsrX19pOwogICAgICAg ICAgd2hpbGUgKF9faSAhPSBfX2xhc3QgJiYgX19uICE9IDAgJiYgKl9faSA9PSBfX3ZhbCkgewog ICAgICAgICAgICArK19faTsKICAgICAgICAgICAgLS1fX247CiAgICAgICAgICB9CiAgICAgICAg ICBpZiAoX19uID09IDApCiAgICAgICAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgICAgICAgZWxz ZQogICAgICAgICAgICBfX2ZpcnN0ID0gZmluZChfX2ksIF9fbGFzdCwgX192YWwpOwogICAgICAg IH0KICAgICAgICByZXR1cm4gX19sYXN0OwogICAgICB9CiAgICB9CiMgNjQzICIvdXNyL2N5Z251 cy9iaW4vLi4vaW5jbHVkZS9jKysvMy4xLjEvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfSW50ZWdlciwgdHlwZW5hbWUgX1RwLAog ICAgICAgICAgIHR5cGVuYW1lIF9CaW5hcnlQcmVkPgogICAgX0ZvcndhcmRJdGVyCiAgICBzZWFy Y2hfbihfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAg ICAgIF9JbnRlZ2VyIF9fY291bnQsIGNvbnN0IF9UcCYgX192YWwsCiAgICAgICAgICAgICBfQmlu YXJ5UHJlZCBfX2JpbmFyeV9wcmVkKQogICAgewoKICAgICAKICAgICAKCgogICAgICBpZiAoX19j b3VudCA8PSAwKQogICAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgICBlbHNlIHsKICAgICAgICB3 aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAgICAgICAgIGlmIChfX2JpbmFyeV9wcmVkKCpf X2ZpcnN0LCBfX3ZhbCkpCiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgKytfX2ZpcnN0Owog ICAgICAgIH0KICAgICAgICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAgICAgICAgIF9J bnRlZ2VyIF9fbiA9IF9fY291bnQgLSAxOwogICAgICAgICAgX0ZvcndhcmRJdGVyIF9faSA9IF9f Zmlyc3Q7CiAgICAgICAgICArK19faTsKICAgICAgICAgIHdoaWxlIChfX2kgIT0gX19sYXN0ICYm IF9fbiAhPSAwICYmIF9fYmluYXJ5X3ByZWQoKl9faSwgX192YWwpKSB7CiAgICAgICAgICAgICsr X19pOwogICAgICAgICAgICAtLV9fbjsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChfX24gPT0g MCkKICAgICAgICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICAgICAgICBlbHNlIHsKICAgICAgICAg ICAgd2hpbGUgKF9faSAhPSBfX2xhc3QpIHsKICAgICAgICAgICAgICBpZiAoX19iaW5hcnlfcHJl ZCgqX19pLCBfX3ZhbCkpCiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICArK19f aTsKICAgICAgICAgICAgfQogICAgICAgICAgICBfX2ZpcnN0ID0gX19pOwogICAgICAgICAgfQog ICAgICAgIH0KICAgICAgICByZXR1cm4gX19sYXN0OwogICAgICB9CiAgICB9CiMgNjk3ICIvdXNy L2N5Z251cy9iaW4vLi4vaW5jbHVkZS9jKysvMy4xLjEvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyMSwgdHlwZW5hbWUgX0ZvcndhcmRJdGVyMj4KICAg IF9Gb3J3YXJkSXRlcjIKICAgIHN3YXBfcmFuZ2VzKF9Gb3J3YXJkSXRlcjEgX19maXJzdDEsIF9G b3J3YXJkSXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcjIgX19maXJz dDIpCiAgICB7CgogICAgIAogICAgIAogICAgIAoKCiAgICAgCgoKCiAgICAgIGZvciAoIDsgX19m aXJzdDEgIT0gX19sYXN0MTsgKytfX2ZpcnN0MSwgKytfX2ZpcnN0MikKICAgICAgICBpdGVyX3N3 YXAoX19maXJzdDEsIF9fZmlyc3QyKTsKICAgICAgcmV0dXJuIF9fZmlyc3QyOwogICAgfQojIDcz MiAiL3Vzci9jeWdudXMvYmluLy4uL2luY2x1ZGUvYysrLzMuMS4xL2JpdHMvc3RsX2FsZ28uaCIg MwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyLCB0 eXBlbmFtZSBfVW5hcnlPcGVyYXRpb24+CiAgICBfT3V0cHV0SXRlcgogICAgdHJhbnNmb3JtKF9J bnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgX091dHB1 dEl0ZXIgX19yZXN1bHQsIF9VbmFyeU9wZXJhdGlvbiBfX3VuYXJ5X29wKQogICAgewoKICAgICAK ICAgICAKCgoKICAgICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0LCArK19f cmVzdWx0KQogICAgICAgICpfX3Jlc3VsdCA9IF9fdW5hcnlfb3AoKl9fZmlyc3QpOwogICAgICBy ZXR1cm4gX19yZXN1bHQ7CiAgICB9CiMgNzY1ICIvdXNyL2N5Z251cy9iaW4vLi4vaW5jbHVkZS9j KysvMy4xLjEvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRl cjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXIyLCB0eXBlbmFtZSBfT3V0cHV0SXRlciwKICAgICAgICAg ICB0eXBlbmFtZSBfQmluYXJ5T3BlcmF0aW9uPgogICAgX091dHB1dEl0ZXIKICAgIHRyYW5zZm9y bShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAg ICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX091dHB1dEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAg ICAgX0JpbmFyeU9wZXJhdGlvbiBfX2JpbmFyeV9vcCkKICAgIHsKCiAgICAgCiAgICAgCiAgICAg CgoKCiAgICAgIGZvciAoIDsgX19maXJzdDEgIT0gX19sYXN0MTsgKytfX2ZpcnN0MSwgKytfX2Zp cnN0MiwgKytfX3Jlc3VsdCkKICAgICAgICAqX19yZXN1bHQgPSBfX2JpbmFyeV9vcCgqX19maXJz dDEsICpfX2ZpcnN0Mik7CiAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgIH0KIyA3OTYgIi91c3Iv Y3lnbnVzL2Jpbi8uLi9pbmNsdWRlL2MrKy8zLjEuMS9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9UcD4KICAgIHZvaWQKICAgIHJl cGxhY2UoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAg ICAgIGNvbnN0IF9UcCYgX19vbGRfdmFsdWUsIGNvbnN0IF9UcCYgX19uZXdfdmFsdWUpCiAgICB7 CgogICAgIAogICAgIAoKICAgICAKCgogICAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyAr K19fZmlyc3QpCiAgICAgICAgaWYgKCpfX2ZpcnN0ID09IF9fb2xkX3ZhbHVlKQogICAgICAgICAg Kl9fZmlyc3QgPSBfX25ld192YWx1ZTsKICAgIH0KIyA4MjUgIi91c3IvY3lnbnVzL2Jpbi8uLi9p bmNsdWRlL2MrKy8zLjEuMS9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf Rm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9QcmVkaWNhdGUsIHR5cGVuYW1lIF9UcD4KICAgIHZvaWQK ICAgIHJlcGxhY2VfaWYoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3Qs CiAgICAgICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVkLCBjb25zdCBfVHAmIF9fbmV3X3ZhbHVl KQogICAgewoKICAgICAKICAgICAKCiAgICAgCgoKICAgICAgZm9yICggOyBfX2ZpcnN0ICE9IF9f bGFzdDsgKytfX2ZpcnN0KQogICAgICAgIGlmIChfX3ByZWQoKl9fZmlyc3QpKQogICAgICAgICAg Kl9fZmlyc3QgPSBfX25ld192YWx1ZTsKICAgIH0KIyA4NTYgIi91c3IvY3lnbnVzL2Jpbi8uLi9p bmNsdWRlL2MrKy8zLjEuMS9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf SW5wdXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlciwgdHlwZW5hbWUgX1RwPgogICAgX091dHB1 dEl0ZXIKICAgIHJlcGxhY2VfY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19s YXN0LAogICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAg ICAgIGNvbnN0IF9UcCYgX19vbGRfdmFsdWUsIGNvbnN0IF9UcCYgX19uZXdfdmFsdWUpCiAgICB7 CgogICAgIAogICAgIAoKICAgICAKCgogICAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyAr K19fZmlyc3QsICsrX19yZXN1bHQpCiAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QgPT0gX19v bGRfdmFsdWUgPyBfX25ld192YWx1ZSA6ICpfX2ZpcnN0OwogICAgICByZXR1cm4gX19yZXN1bHQ7 CiAgICB9CiMgODg4ICIvdXNyL2N5Z251cy9iaW4vLi4vaW5jbHVkZS9jKysvMy4xLjEvYml0cy9z dGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX091 dHB1dEl0ZXIsIHR5cGVuYW1lIF9QcmVkaWNhdGUsCiAgICAgICAgICAgdHlwZW5hbWUgX1RwPgog ICAgX091dHB1dEl0ZXIKICAgIHJlcGxhY2VfY29weV9pZihfSW5wdXRJdGVyIF9fZmlyc3QsIF9J bnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0 LAogICAgICAgICAgICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVkLCBjb25zdCBfVHAmIF9fbmV3 X3ZhbHVlKQogICAgewoKICAgICAKICAgICAKCiAgICAgCgoKICAgICAgZm9yICggOyBfX2ZpcnN0 ICE9IF9fbGFzdDsgKytfX2ZpcnN0LCArK19fcmVzdWx0KQogICAgICAgICpfX3Jlc3VsdCA9IF9f cHJlZCgqX19maXJzdCkgPyBfX25ld192YWx1ZSA6ICpfX2ZpcnN0OwogICAgICByZXR1cm4gX19y ZXN1bHQ7CiAgICB9CiMgOTE4ICIvdXNyL2N5Z251cy9iaW4vLi4vaW5jbHVkZS9jKysvMy4xLjEv Yml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBl bmFtZSBfR2VuZXJhdG9yPgogICAgdm9pZAogICAgZ2VuZXJhdGUoX0ZvcndhcmRJdGVyIF9fZmly c3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsIF9HZW5lcmF0b3IgX19nZW4pCiAgICB7CgogICAgIAog ICAgIAoKCiAgICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKICAgICAg ICAqX19maXJzdCA9IF9fZ2VuKCk7CiAgICB9CiMgOTQyICIvdXNyL2N5Z251cy9iaW4vLi4vaW5j bHVkZS9jKysvMy4xLjEvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX091 dHB1dEl0ZXIsIHR5cGVuYW1lIF9TaXplLCB0eXBlbmFtZSBfR2VuZXJhdG9yPgogICAgX091dHB1 dEl0ZXIKICAgIGdlbmVyYXRlX24oX091dHB1dEl0ZXIgX19maXJzdCwgX1NpemUgX19uLCBfR2Vu ZXJhdG9yIF9fZ2VuKQogICAgewoKICAgICAKCgoKICAgICAgZm9yICggOyBfX24gPiAwOyAtLV9f biwgKytfX2ZpcnN0KQogICAgICAgICpfX2ZpcnN0ID0gX19nZW4oKTsKICAgICAgcmV0dXJuIF9f Zmlyc3Q7CiAgICB9CiMgOTY5ICIvdXNyL2N5Z251cy9iaW4vLi4vaW5jbHVkZS9jKysvMy4xLjEv Yml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5h bWUgX091dHB1dEl0ZXIsIHR5cGVuYW1lIF9UcD4KICAgIF9PdXRwdXRJdGVyCiAgICByZW1vdmVf Y29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAg ICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIGNvbnN0IF9UcCYgX192YWx1ZSkKICAgIHsKCiAgICAg CiAgICAgCgogICAgIAoKCiAgICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJz dCkKICAgICAgICBpZiAoISgqX19maXJzdCA9PSBfX3ZhbHVlKSkgewogICAgICAgICAgKl9fcmVz dWx0ID0gKl9fZmlyc3Q7CiAgICAgICAgICArK19fcmVzdWx0OwogICAgICAgIH0KICAgICAgcmV0 dXJuIF9fcmVzdWx0OwogICAgfQojIDEwMDMgIi91c3IvY3lnbnVzL2Jpbi8uLi9pbmNsdWRlL2Mr Ky8zLjEuMS9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVy LCB0eXBlbmFtZSBfT3V0cHV0SXRlciwgdHlwZW5hbWUgX1ByZWRpY2F0ZT4KICAgIF9PdXRwdXRJ dGVyCiAgICByZW1vdmVfY29weV9pZihfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19s YXN0LAogICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9QcmVkaWNhdGUg X19wcmVkKQogICAgewoKICAgICAKICAgICAKCiAgICAgCgoKICAgICAgZm9yICggOyBfX2ZpcnN0 ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgICAgIGlmICghX19wcmVkKCpfX2ZpcnN0KSkgewog ICAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3Q7CiAgICAgICAgICArK19fcmVzdWx0OwogICAg ICAgIH0KICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAgfQojIDEwMzkgIi91c3IvY3lnbnVzL2Jp bi8uLi9pbmNsdWRlL2MrKy8zLjEuMS9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9UcD4KICAgIF9Gb3J3YXJkSXRlcgogICAgcmVt b3ZlKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAg IGNvbnN0IF9UcCYgX192YWx1ZSkKICAgIHsKCiAgICAgCiAgICAgCgogICAgIAoKCiAgICAgIF9f Zmlyc3QgPSBmaW5kKF9fZmlyc3QsIF9fbGFzdCwgX192YWx1ZSk7CiAgICAgIF9Gb3J3YXJkSXRl ciBfX2kgPSBfX2ZpcnN0OwogICAgICByZXR1cm4gX19maXJzdCA9PSBfX2xhc3QgPyBfX2ZpcnN0 CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHJlbW92ZV9jb3B5KCsrX19pLCBfX2xh c3QsIF9fZmlyc3QsIF9fdmFsdWUpOwogICAgfQojIDEwNzMgIi91c3IvY3lnbnVzL2Jpbi8uLi9p bmNsdWRlL2MrKy8zLjEuMS9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf Rm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9QcmVkaWNhdGU+CiAgICBfRm9yd2FyZEl0ZXIKICAgIHJl bW92ZV9pZihfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAg ICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCkKICAgIHsKCiAgICAgCiAgICAgCgoKICAgICAgX19m aXJzdCA9IGZpbmRfaWYoX19maXJzdCwgX19sYXN0LCBfX3ByZWQpOwogICAgICBfRm9yd2FyZEl0 ZXIgX19pID0gX19maXJzdDsKICAgICAgcmV0dXJuIF9fZmlyc3QgPT0gX19sYXN0ID8gX19maXJz dAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiByZW1vdmVfY29weV9pZigrK19faSwg X19sYXN0LCBfX2ZpcnN0LCBfX3ByZWQpOwogICAgfQoKCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4KICAgIF9PdXRwdXRJdGVyCiAgICBf X3VuaXF1ZV9jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAg ICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICBvdXRw dXRfaXRlcmF0b3JfdGFnKQogICAgewoKICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9J bnB1dEl0ZXI+Ojp2YWx1ZV90eXBlIF9fdmFsdWUgPSAqX19maXJzdDsKICAgICAgKl9fcmVzdWx0 ID0gX192YWx1ZTsKICAgICAgd2hpbGUgKCsrX19maXJzdCAhPSBfX2xhc3QpCiAgICAgICAgaWYg KCEoX192YWx1ZSA9PSAqX19maXJzdCkpIHsKICAgICAgICAgIF9fdmFsdWUgPSAqX19maXJzdDsK ICAgICAgICAgICorK19fcmVzdWx0ID0gX192YWx1ZTsKICAgICAgICB9CiAgICAgIHJldHVybiAr K19fcmVzdWx0OwogICAgfQoKCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0 eXBlbmFtZSBfRm9yd2FyZEl0ZXI+CiAgICBfRm9yd2FyZEl0ZXIKICAgIF9fdW5pcXVlX2NvcHko X0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAg X0ZvcndhcmRJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9y X3RhZykKICAgIHsKCiAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0OwogICAgICB3aGlsZSAoKytf X2ZpcnN0ICE9IF9fbGFzdCkKICAgICAgICBpZiAoISgqX19yZXN1bHQgPT0gKl9fZmlyc3QpKQog ICAgICAgICAgKisrX19yZXN1bHQgPSAqX19maXJzdDsKICAgICAgcmV0dXJuICsrX19yZXN1bHQ7 CiAgICB9CiMgMTE0NSAiL3Vzci9jeWdudXMvYmluLy4uL2luY2x1ZGUvYysrLzMuMS4xL2JpdHMv c3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9P dXRwdXRJdGVyPgogICAgaW5saW5lIF9PdXRwdXRJdGVyCiAgICB1bmlxdWVfY29weShfSW5wdXRJ dGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgX091dHB1dEl0 ZXIgX19yZXN1bHQpCiAgICB7CgogICAgIAogICAgIAoKICAgICAKCgogICAgICB0eXBlZGVmIHR5 cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfT3V0cHV0SXRlcj46Oml0ZXJhdG9yX2NhdGVnb3J5IF9J dGVyVHlwZTsKCiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuIF9fcmVzdWx0Owog ICAgICByZXR1cm4gX191bmlxdWVfY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LCBfSXRl clR5cGUoKSk7CiAgICB9CiMgMTE3MCAiL3Vzci9jeWdudXMvYmluLy4uL2luY2x1ZGUvYysrLzMu MS4xL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5 cGVuYW1lIF9PdXRwdXRJdGVyLCB0eXBlbmFtZSBfQmluYXJ5UHJlZGljYXRlPgogICAgX091dHB1 dEl0ZXIKICAgIF9fdW5pcXVlX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9f bGFzdCwKICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAg ICAgICAgIF9CaW5hcnlQcmVkaWNhdGUgX19iaW5hcnlfcHJlZCwKICAgICAgICAgICAgICAgICAg b3V0cHV0X2l0ZXJhdG9yX3RhZykKICAgIHsKCiAgICAgCgoKCiAgICAgIHR5cGVuYW1lIGl0ZXJh dG9yX3RyYWl0czxfSW5wdXRJdGVyPjo6dmFsdWVfdHlwZSBfX3ZhbHVlID0gKl9fZmlyc3Q7CiAg ICAgICpfX3Jlc3VsdCA9IF9fdmFsdWU7CiAgICAgIHdoaWxlICgrK19fZmlyc3QgIT0gX19sYXN0 KQogICAgICAgIGlmICghX19iaW5hcnlfcHJlZChfX3ZhbHVlLCAqX19maXJzdCkpIHsKICAgICAg ICAgIF9fdmFsdWUgPSAqX19maXJzdDsKICAgICAgICAgICorK19fcmVzdWx0ID0gX192YWx1ZTsK ICAgICAgICB9CiAgICAgIHJldHVybiArK19fcmVzdWx0OwogICAgfQojIDExOTkgIi91c3IvY3ln bnVzL2Jpbi8uLi9pbmNsdWRlL2MrKy8zLjEuMS9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9C aW5hcnlQcmVkaWNhdGU+CiAgICBfRm9yd2FyZEl0ZXIKICAgIF9fdW5pcXVlX2NvcHkoX0lucHV0 SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgX0Zvcndh cmRJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICBfQmluYXJ5UHJlZGljYXRlIF9fYmlu YXJ5X3ByZWQsCiAgICAgICAgICAgICAgICAgIGZvcndhcmRfaXRlcmF0b3JfdGFnKQogICAgewoK ICAgICAKCgoKICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3Q7CiAgICAgIHdoaWxlICgrK19fZmly c3QgIT0gX19sYXN0KQogICAgICAgIGlmICghX19iaW5hcnlfcHJlZCgqX19yZXN1bHQsICpfX2Zp cnN0KSkgKisrX19yZXN1bHQgPSAqX19maXJzdDsKICAgICAgcmV0dXJuICsrX19yZXN1bHQ7CiAg ICB9CiMgMTIzMiAiL3Vzci9jeWdudXMvYmluLy4uL2luY2x1ZGUvYysrLzMuMS4xL2JpdHMvc3Rs X2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRw dXRJdGVyLCB0eXBlbmFtZSBfQmluYXJ5UHJlZGljYXRlPgogICAgaW5saW5lIF9PdXRwdXRJdGVy CiAgICB1bmlxdWVfY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAog ICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICBfQmlu YXJ5UHJlZGljYXRlIF9fYmluYXJ5X3ByZWQpCiAgICB7CgogICAgIAogICAgIAoKCiAgICAgIHR5 cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9PdXRwdXRJdGVyPjo6aXRlcmF0b3JfY2F0 ZWdvcnkgX0l0ZXJUeXBlOwoKICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KSByZXR1cm4gX19y ZXN1bHQ7CiAgICAgIHJldHVybiBfX3VuaXF1ZV9jb3B5KF9fZmlyc3QsIF9fbGFzdCwKX19yZXN1 bHQsIF9fYmluYXJ5X3ByZWQsIF9JdGVyVHlwZSgpKTsKICAgIH0KIyAxMjYzICIvdXNyL2N5Z251 cy9iaW4vLi4vaW5jbHVkZS9jKysvMy4xLjEvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0ZvcndhcmRJdGVyPgogICAgX0ZvcndhcmRJdGVyCiAgICB1bmlxdWUoX0Zvcndh cmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QpCiAgICB7CgogICAgICAgICAKICAg ICAgICAgCgoKICAgICAgICAgIF9fZmlyc3QgPSBhZGphY2VudF9maW5kKF9fZmlyc3QsIF9fbGFz dCk7CiAgICAgICAgICByZXR1cm4gdW5pcXVlX2NvcHkoX19maXJzdCwgX19sYXN0LCBfX2ZpcnN0 KTsKICAgIH0KIyAxMjkwICIvdXNyL2N5Z251cy9iaW4vLi4vaW5jbHVkZS9jKysvMy4xLjEvYml0 cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFt ZSBfQmluYXJ5UHJlZGljYXRlPgogICAgX0ZvcndhcmRJdGVyCiAgICB1bmlxdWUoX0ZvcndhcmRJ dGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgX0JpbmFyeVByZWRp Y2F0ZSBfX2JpbmFyeV9wcmVkKQogICAgewoKICAgICAKICAgICAKCgoKICAgICAgX19maXJzdCA9 IGFkamFjZW50X2ZpbmQoX19maXJzdCwgX19sYXN0LCBfX2JpbmFyeV9wcmVkKTsKICAgICAgcmV0 dXJuIHVuaXF1ZV9jb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19maXJzdCwgX19iaW5hcnlfcHJlZCk7 CiAgICB9CgoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcj4KICAg IHZvaWQKICAgIF9fcmV2ZXJzZShfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwgX0JpZGlyZWN0 aW9uYWxJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICBiaWRpcmVjdGlvbmFs X2l0ZXJhdG9yX3RhZykKICAgIHsKICAgICAgICAgIHdoaWxlICh0cnVlKQogICAgICAgICAgICBp ZiAoX19maXJzdCA9PSBfX2xhc3QgfHwgX19maXJzdCA9PSAtLV9fbGFzdCkKICAgICAgICAgICAg ICAgICAgcmV0dXJuOwogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgIGl0ZXJfc3dh cChfX2ZpcnN0KyssIF9fbGFzdCk7CiAgICB9CgoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9S YW5kb21BY2Nlc3NJdGVyPgogICAgdm9pZAogICAgX19yZXZlcnNlKF9SYW5kb21BY2Nlc3NJdGVy IF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAg ICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykKICAgIHsKICAgICAgICAgIHdoaWxlIChf X2ZpcnN0IDwgX19sYXN0KQogICAgICAgICAgICBpdGVyX3N3YXAoX19maXJzdCsrLCAtLV9fbGFz dCk7CiAgICB9CiMgMTM0OSAiL3Vzci9jeWdudXMvYmluLy4uL2luY2x1ZGUvYysrLzMuMS4xL2Jp dHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcj4K ICAgIGlubGluZSB2b2lkCiAgICByZXZlcnNlKF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LCBf QmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0KQogICAgewoKICAgICAgICAgCgogICAgICAgICAgX19y ZXZlcnNlKF9fZmlyc3QsIF9fbGFzdCwgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7CiAg ICB9CiMgMTM3NCAiL3Vzci9jeWdudXMvYmluLy4uL2luY2x1ZGUvYysrLzMuMS4xL2JpdHMvc3Rs X2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlciwgdHlwZW5h bWUgX091dHB1dEl0ZXI+CiAgICBfT3V0cHV0SXRlcgogICAgcmV2ZXJzZV9jb3B5KF9CaWRpcmVj dGlvbmFsSXRlciBfX2ZpcnN0LCBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0LAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0KQogICAgewoKICAgICAKICAg ICAKCgogICAgICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAgICAgICAtLV9fbGFzdDsK ICAgICAgICAqX19yZXN1bHQgPSAqX19sYXN0OwogICAgICAgICsrX19yZXN1bHQ7CiAgICAgIH0K ICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAgfQojIDEzOTkgIi91c3IvY3lnbnVzL2Jpbi8uLi9p bmNsdWRlL2MrKy8zLjEuMS9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf RXVjbGlkZWFuUmluZ0VsZW1lbnQ+CiAgICBfRXVjbGlkZWFuUmluZ0VsZW1lbnQKICAgIF9fZ2Nk KF9FdWNsaWRlYW5SaW5nRWxlbWVudCBfX20sIF9FdWNsaWRlYW5SaW5nRWxlbWVudCBfX24pCiAg ICB7CiAgICAgIHdoaWxlIChfX24gIT0gMCkgewogICAgICAgIF9FdWNsaWRlYW5SaW5nRWxlbWVu dCBfX3QgPSBfX20gJSBfX247CiAgICAgICAgX19tID0gX19uOwogICAgICAgIF9fbiA9IF9fdDsK ICAgICAgfQogICAgICByZXR1cm4gX19tOwogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1l IF9Gb3J3YXJkSXRlcj4KICAgIHZvaWQKICAgIF9fcm90YXRlKF9Gb3J3YXJkSXRlciBfX2ZpcnN0 LAogICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fbWlkZGxlLAogICAgICAgICAgICAgX0Zvcndh cmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZykKICAgIHsK ICAgICAgaWYgKChfX2ZpcnN0ID09IF9fbWlkZGxlKSB8fCAoX19sYXN0ID09IF9fbWlkZGxlKSkK ICAgICAgICByZXR1cm47CgogICAgICBfRm9yd2FyZEl0ZXIgX19maXJzdDIgPSBfX21pZGRsZTsK ICAgICAgZG8gewogICAgICAgIHN3YXAoKl9fZmlyc3QrKywgKl9fZmlyc3QyKyspOwogICAgICAg IGlmIChfX2ZpcnN0ID09IF9fbWlkZGxlKQogICAgICAgICAgX19taWRkbGUgPSBfX2ZpcnN0MjsK ICAgICAgfSB3aGlsZSAoX19maXJzdDIgIT0gX19sYXN0KTsKCiAgICAgIF9fZmlyc3QyID0gX19t aWRkbGU7CgogICAgICB3aGlsZSAoX19maXJzdDIgIT0gX19sYXN0KSB7CiAgICAgICAgc3dhcCgq X19maXJzdCsrLCAqX19maXJzdDIrKyk7CiAgICAgICAgaWYgKF9fZmlyc3QgPT0gX19taWRkbGUp CiAgICAgICAgICBfX21pZGRsZSA9IF9fZmlyc3QyOwogICAgICAgIGVsc2UgaWYgKF9fZmlyc3Qy ID09IF9fbGFzdCkKICAgICAgICAgIF9fZmlyc3QyID0gX19taWRkbGU7CiAgICAgIH0KICAgIH0K CgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXI+CiAgICB2b2lkCiAg ICBfX3JvdGF0ZShfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwKICAgICAgICAgICAgIF9CaWRp cmVjdGlvbmFsSXRlciBfX21pZGRsZSwKICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBf X2xhc3QsCiAgICAgICAgICAgICAgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcpCiAgICB7Cgog ICAgIAoKCiAgICAgIGlmICgoX19maXJzdCA9PSBfX21pZGRsZSkgfHwgKF9fbGFzdCA9PSBfX21p ZGRsZSkpCiAgICAgICAgcmV0dXJuOwoKICAgICAgX19yZXZlcnNlKF9fZmlyc3QsIF9fbWlkZGxl LCBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZygpKTsKICAgICAgX19yZXZlcnNlKF9fbWlkZGxl LCBfX2xhc3QsIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnKCkpOwoKICAgICAgd2hpbGUgKF9f Zmlyc3QgIT0gX19taWRkbGUgJiYgX19taWRkbGUgIT0gX19sYXN0KQogICAgICAgIHN3YXAgKCpf X2ZpcnN0KyssICotLV9fbGFzdCk7CgogICAgICBpZiAoX19maXJzdCA9PSBfX21pZGRsZSkgewog ICAgICAgIF9fcmV2ZXJzZShfX21pZGRsZSwgX19sYXN0LCBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9y X3RhZygpKTsKICAgICAgfQogICAgICBlbHNlIHsKICAgICAgICBfX3JldmVyc2UoX19maXJzdCwg X19taWRkbGUsIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnKCkpOwogICAgICB9CiAgICB9CgoK CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXI+CiAgICB2b2lkCiAgICBf X3JvdGF0ZShfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgX1JhbmRvbUFj Y2Vzc0l0ZXIgX19taWRkbGUsCiAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3Qs CiAgICAgICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykKICAgIHsKCiAgICAgCgoK ICAgICAgaWYgKChfX2ZpcnN0ID09IF9fbWlkZGxlKSB8fCAoX19sYXN0ID09IF9fbWlkZGxlKSkK ICAgICAgICByZXR1cm47CgogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxf UmFuZG9tQWNjZXNzSXRlcj46OmRpZmZlcmVuY2VfdHlwZSBfRGlzdGFuY2U7CiAgICAgIHR5cGVk ZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6dmFsdWVfdHlw ZSBfVmFsdWVUeXBlOwoKICAgICAgX0Rpc3RhbmNlIF9fbiA9IF9fbGFzdCAtIF9fZmlyc3Q7CiAg ICAgIF9EaXN0YW5jZSBfX2sgPSBfX21pZGRsZSAtIF9fZmlyc3Q7CiAgICAgIF9EaXN0YW5jZSBf X2wgPSBfX24gLSBfX2s7CgogICAgICBpZiAoX19rID09IF9fbCkgewogICAgICAgIHN3YXBfcmFu Z2VzKF9fZmlyc3QsIF9fbWlkZGxlLCBfX21pZGRsZSk7CiAgICAgICAgcmV0dXJuOwogICAgICB9 CgogICAgICBfRGlzdGFuY2UgX19kID0gX19nY2QoX19uLCBfX2spOwoKICAgICAgZm9yIChfRGlz dGFuY2UgX19pID0gMDsgX19pIDwgX19kOyBfX2krKykgewogICAgICAgIF9WYWx1ZVR5cGUgX190 bXAgPSAqX19maXJzdDsKICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX3AgPSBfX2ZpcnN0OwoK ICAgICAgICBpZiAoX19rIDwgX19sKSB7CiAgICAgICAgICBmb3IgKF9EaXN0YW5jZSBfX2ogPSAw OyBfX2ogPCBfX2wvX19kOyBfX2orKykgewogICAgICAgICAgICBpZiAoX19wID4gX19maXJzdCAr IF9fbCkgewogICAgICAgICAgICAgICpfX3AgPSAqKF9fcCAtIF9fbCk7CiAgICAgICAgICAgICAg X19wIC09IF9fbDsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgKl9fcCA9ICooX19wICsgX19r KTsKICAgICAgICAgICAgX19wICs9IF9fazsKICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAg IGVsc2UgewogICAgICAgICAgZm9yIChfRGlzdGFuY2UgX19qID0gMDsgX19qIDwgX19rL19fZCAt IDE7IF9faiArKykgewogICAgICAgICAgICBpZiAoX19wIDwgX19sYXN0IC0gX19rKSB7CiAgICAg ICAgICAgICAgKl9fcCA9ICooX19wICsgX19rKTsKICAgICAgICAgICAgICBfX3AgKz0gX19rOwog ICAgICAgICAgICB9CgogICAgICAgICAgICAqX19wID0gKiAoX19wIC0gX19sKTsKICAgICAgICAg ICAgX19wIC09IF9fbDsKICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICpfX3AgPSBfX3Rt cDsKICAgICAgICArK19fZmlyc3Q7CiAgICAgIH0KICAgIH0KIyAxNTYxICIvdXNyL2N5Z251cy9i aW4vLi4vaW5jbHVkZS9jKysvMy4xLjEvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0ZvcndhcmRJdGVyPgogICAgaW5saW5lIHZvaWQKICAgIHJvdGF0ZShfRm9yd2FyZEl0 ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbWlkZGxlLCBfRm9yd2FyZEl0ZXIgX19sYXN0KQog ICAgewoKICAgICAKCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3 YXJkSXRlcj46Oml0ZXJhdG9yX2NhdGVnb3J5IF9JdGVyVHlwZTsKICAgICAgX19yb3RhdGUoX19m aXJzdCwgX19taWRkbGUsIF9fbGFzdCwgX0l0ZXJUeXBlKCkpOwogICAgfQojIDE1ODkgIi91c3Iv Y3lnbnVzL2Jpbi8uLi9pbmNsdWRlL2MrKy8zLjEuMS9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyPgogICAgX091 dHB1dEl0ZXIKICAgIHJvdGF0ZV9jb3B5KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0 ZXIgX19taWRkbGUsCiAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19sYXN0LCBfT3V0cHV0 SXRlciBfX3Jlc3VsdCkKICAgIHsKCiAgICAgCiAgICAgCgoKICAgICAgcmV0dXJuIGNvcHkoX19m aXJzdCwgX19taWRkbGUsIGNvcHkoX19taWRkbGUsIF9fbGFzdCwgX19yZXN1bHQpKTsKICAgIH0K IyAxNjEyICIvdXNyL2N5Z251cy9iaW4vLi4vaW5jbHVkZS9jKysvMy4xLjEvYml0cy9zdGxfYWxn by5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0Rpc3RhbmNlPgogICAgaW5saW5lIF9EaXN0YW5j ZQogICAgX19yYW5kb21fbnVtYmVyKF9EaXN0YW5jZSBfX24pCiAgICB7CgogICAgICByZXR1cm4g bHJhbmQ0OCgpICUgX19uOwoKCgogICAgfQojIDE2MzQgIi91c3IvY3lnbnVzL2Jpbi8uLi9pbmNs dWRlL2MrKy8zLjEuMS9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFu ZG9tQWNjZXNzSXRlcj4KICAgIGlubGluZSB2b2lkCiAgICByYW5kb21fc2h1ZmZsZShfUmFuZG9t QWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QpCiAgICB7CgogICAg IAoKCiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuOwogICAgICBmb3IgKF9SYW5k b21BY2Nlc3NJdGVyIF9faSA9IF9fZmlyc3QgKyAxOyBfX2kgIT0gX19sYXN0OyArK19faSkKICAg ICAgICBpdGVyX3N3YXAoX19pLCBfX2ZpcnN0ICsgX19yYW5kb21fbnVtYmVyKChfX2kgLSBfX2Zp cnN0KSArIDEpKTsKICAgIH0KIyAxNjYwICIvdXNyL2N5Z251cy9iaW4vLi4vaW5jbHVkZS9jKysv My4xLjEvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vz c0l0ZXIsIHR5cGVuYW1lIF9SYW5kb21OdW1iZXJHZW5lcmF0b3I+CiAgICB2b2lkCiAgICByYW5k b21fc2h1ZmZsZShfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBf X2xhc3QsCiAgICAgICAgICAgICAgICAgICBfUmFuZG9tTnVtYmVyR2VuZXJhdG9yJiBfX3JhbmQp CiAgICB7CgogICAgIAoKCiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuOwogICAg ICBmb3IgKF9SYW5kb21BY2Nlc3NJdGVyIF9faSA9IF9fZmlyc3QgKyAxOyBfX2kgIT0gX19sYXN0 OyArK19faSkKICAgICAgICBpdGVyX3N3YXAoX19pLCBfX2ZpcnN0ICsgX19yYW5kKChfX2kgLSBf X2ZpcnN0KSArIDEpKTsKICAgIH0KCgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJ dGVyLCB0eXBlbmFtZSBfUHJlZGljYXRlPgogICAgX0ZvcndhcmRJdGVyCiAgICBfX3BhcnRpdGlv bihfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAg ICAgIF9QcmVkaWNhdGUgX19wcmVkLAogICAgICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRvcl90 YWcpCiAgICB7CiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuIF9fZmlyc3Q7Cgog ICAgICB3aGlsZSAoX19wcmVkKCpfX2ZpcnN0KSkKICAgICAgICBpZiAoKytfX2ZpcnN0ID09IF9f bGFzdCkgcmV0dXJuIF9fZmlyc3Q7CgogICAgICBfRm9yd2FyZEl0ZXIgX19uZXh0ID0gX19maXJz dDsKCiAgICAgIHdoaWxlICgrK19fbmV4dCAhPSBfX2xhc3QpCiAgICAgICAgaWYgKF9fcHJlZCgq X19uZXh0KSkgewogICAgICAgICAgc3dhcCgqX19maXJzdCwgKl9fbmV4dCk7CiAgICAgICAgICAr K19fZmlyc3Q7CiAgICAgICAgfQoKICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICB9CgoKCgoKCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyLCB0eXBlbmFtZSBfUHJlZGljYXRl PgogICAgX0JpZGlyZWN0aW9uYWxJdGVyCiAgICBfX3BhcnRpdGlvbihfQmlkaXJlY3Rpb25hbEl0 ZXIgX19maXJzdCwgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgIF9Q cmVkaWNhdGUgX19wcmVkLAogICAgICAgICAgICAgICAgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90 YWcpCiAgICB7CiAgICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgd2hpbGUgKHRydWUpCiAgICAg ICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpCiAgICAgICAgICAgIHJldHVybiBfX2ZpcnN0Owog ICAgICAgICAgZWxzZSBpZiAoX19wcmVkKCpfX2ZpcnN0KSkKICAgICAgICAgICAgKytfX2ZpcnN0 OwogICAgICAgICAgZWxzZQogICAgICAgICAgICBicmVhazsKICAgICAgICAtLV9fbGFzdDsKICAg ICAgICB3aGlsZSAodHJ1ZSkKICAgICAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkKICAgICAg ICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICAgICAgICBlbHNlIGlmICghX19wcmVkKCpfX2xhc3Qp KQogICAgICAgICAgICAtLV9fbGFzdDsKICAgICAgICAgIGVsc2UKICAgICAgICAgICAgYnJlYWs7 CiAgICAgICAgaXRlcl9zd2FwKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgICAgKytfX2ZpcnN0Owog ICAgICB9CiAgICB9CiMgMTc0OCAiL3Vzci9jeWdudXMvYmluLy4uL2luY2x1ZGUvYysrLzMuMS4x L2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlw ZW5hbWUgX1ByZWRpY2F0ZT4KICAgIGlubGluZSBfRm9yd2FyZEl0ZXIKICAgIHBhcnRpdGlvbihf Rm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICBf UHJlZGljYXRlIF9fcHJlZCkKICAgIHsKCiAgICAgCiAgICAgCgoKICAgICAgcmV0dXJuIF9fcGFy dGl0aW9uKF9fZmlyc3QsIF9fbGFzdCwgX19wcmVkLCBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmly c3QpKTsKICAgIH0KCgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBl bmFtZSBfUHJlZGljYXRlLCB0eXBlbmFtZSBfRGlzdGFuY2U+CiAgICBfRm9yd2FyZEl0ZXIKICAg IF9faW5wbGFjZV9zdGFibGVfcGFydGl0aW9uKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2Fy ZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1ByZWRpY2F0ZSBf X3ByZWQsIF9EaXN0YW5jZSBfX2xlbikKICAgIHsKICAgICAgaWYgKF9fbGVuID09IDEpCiAgICAg ICAgcmV0dXJuIF9fcHJlZCgqX19maXJzdCkgPyBfX2xhc3QgOiBfX2ZpcnN0OwogICAgICBfRm9y d2FyZEl0ZXIgX19taWRkbGUgPSBfX2ZpcnN0OwogICAgICBhZHZhbmNlKF9fbWlkZGxlLCBfX2xl biAvIDIpOwogICAgICBfRm9yd2FyZEl0ZXIgX19iZWdpbiA9IF9faW5wbGFjZV9zdGFibGVfcGFy dGl0aW9uKF9fZmlyc3QsIF9fbWlkZGxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIF9fcHJlZCwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xlbiAvIDIpOwogICAgICBfRm9yd2Fy ZEl0ZXIgX19lbmQgPSBfX2lucGxhY2Vfc3RhYmxlX3BhcnRpdGlvbihfX21pZGRsZSwgX19sYXN0 LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf X3ByZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIF9fbGVuIC0gX19sZW4gLyAyKTsKICAgICAgcm90YXRlKF9fYmVnaW4sIF9fbWlkZGxlLCBf X2VuZCk7CiAgICAgIGFkdmFuY2UoX19iZWdpbiwgZGlzdGFuY2UoX19taWRkbGUsIF9fZW5kKSk7 CiAgICAgIHJldHVybiBfX2JlZ2luOwogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9G b3J3YXJkSXRlciwgdHlwZW5hbWUgX1BvaW50ZXIsIHR5cGVuYW1lIF9QcmVkaWNhdGUsCiAgICAg ICAgICAgdHlwZW5hbWUgX0Rpc3RhbmNlPgogICAgX0ZvcndhcmRJdGVyCiAgICBfX3N0YWJsZV9w YXJ0aXRpb25fYWRhcHRpdmUoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xh c3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQsIF9E aXN0YW5jZSBfX2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUG9pbnRlciBf X2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UgX19idWZm ZXJfc2l6ZSkKICAgIHsKICAgICAgaWYgKF9fbGVuIDw9IF9fYnVmZmVyX3NpemUpIHsKICAgICAg ICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQxID0gX19maXJzdDsKICAgICAgICBfUG9pbnRlciBfX3Jl c3VsdDIgPSBfX2J1ZmZlcjsKICAgICAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0IDsgKytf X2ZpcnN0KQogICAgICAgICAgaWYgKF9fcHJlZCgqX19maXJzdCkpIHsKICAgICAgICAgICAgKl9f cmVzdWx0MSA9ICpfX2ZpcnN0OwogICAgICAgICAgICArK19fcmVzdWx0MTsKICAgICAgICAgIH0K ICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAqX19yZXN1bHQyID0gKl9fZmlyc3Q7CiAgICAg ICAgICAgICsrX19yZXN1bHQyOwogICAgICAgICAgfQogICAgICAgIGNvcHkoX19idWZmZXIsIF9f cmVzdWx0MiwgX19yZXN1bHQxKTsKICAgICAgICByZXR1cm4gX19yZXN1bHQxOwogICAgICB9CiAg ICAgIGVsc2UgewogICAgICAgIF9Gb3J3YXJkSXRlciBfX21pZGRsZSA9IF9fZmlyc3Q7CiAgICAg ICAgYWR2YW5jZShfX21pZGRsZSwgX19sZW4gLyAyKTsKICAgICAgICBfRm9yd2FyZEl0ZXIgX19i ZWdpbiA9IF9fc3RhYmxlX3BhcnRpdGlvbl9hZGFwdGl2ZShfX2ZpcnN0LCBfX21pZGRsZSwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf X3ByZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgX19sZW4gLyAyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplKTsKICAgICAgICBf Rm9yd2FyZEl0ZXIgX19lbmQgPSBfX3N0YWJsZV9wYXJ0aXRpb25fYWRhcHRpdmUoIF9fbWlkZGxl LCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBfX3ByZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBfX2xlbiAtIF9fbGVuIC8gMiwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYnVmZmVyLCBfX2J1ZmZl cl9zaXplKTsKICAgICAgICByb3RhdGUoX19iZWdpbiwgX19taWRkbGUsIF9fZW5kKTsKICAgICAg ICBhZHZhbmNlKF9fYmVnaW4sIGRpc3RhbmNlKF9fbWlkZGxlLCBfX2VuZCkpOwogICAgICAgIHJl dHVybiBfX2JlZ2luOwogICAgICB9CiAgICB9CiMgMTg0OCAiL3Vzci9jeWdudXMvYmluLy4uL2lu Y2x1ZGUvYysrLzMuMS4xL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9G b3J3YXJkSXRlciwgdHlwZW5hbWUgX1ByZWRpY2F0ZT4KICAgIF9Gb3J3YXJkSXRlcgogICAgc3Rh YmxlX3BhcnRpdGlvbihfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwK ICAgICAgICAgICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQpCiAgICB7CgogICAgIAogICAg IAoKCiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkKICAgICAgICByZXR1cm4gX19maXJzdDsK ICAgICAgZWxzZQogICAgICB7CiAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFp dHM8X0ZvcndhcmRJdGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOwogICAgICAgIHR5cGVkZWYg dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OmRpZmZlcmVuY2VfdHlwZSBf RGlzdGFuY2VUeXBlOwoKICAgICAgICBfVGVtcG9yYXJ5X2J1ZmZlcjxfRm9yd2FyZEl0ZXIsIF9W YWx1ZVR5cGU+IF9fYnVmKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgICAgaWYgKF9fYnVmLnNpemUo KSA+IDApCiAgICAgICAgICByZXR1cm4gX19zdGFibGVfcGFydGl0aW9uX2FkYXB0aXZlKF9fZmly c3QsIF9fbGFzdCwgX19wcmVkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBfRGlzdGFuY2VUeXBlKF9fYnVmLnJlcXVlc3RlZF9zaXplKCkpLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2J1Zi5iZWdpbigpLCBfX2J1Zi5z aXplKCkpOwogICAgICAgIGVsc2UKICAgICAgICAgIHJldHVybiBfX2lucGxhY2Vfc3RhYmxlX3Bh cnRpdGlvbihfX2ZpcnN0LCBfX2xhc3QsIF9fcHJlZCwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2VUeXBlKF9fYnVmLnJlcXVlc3RlZF9zaXplKCkp KTsKICAgICAgfQogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJ dGVyLCB0eXBlbmFtZSBfVHA+CiAgICBfUmFuZG9tQWNjZXNzSXRlcgogICAgX191bmd1YXJkZWRf cGFydGl0aW9uKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9f bGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICBfVHAgX19waXZvdCkKICAgIHsKICAgICAg d2hpbGUgKHRydWUpIHsKICAgICAgICB3aGlsZSAoKl9fZmlyc3QgPCBfX3Bpdm90KQogICAgICAg ICAgKytfX2ZpcnN0OwogICAgICAgIC0tX19sYXN0OwogICAgICAgIHdoaWxlIChfX3Bpdm90IDwg Kl9fbGFzdCkKICAgICAgICAgIC0tX19sYXN0OwogICAgICAgIGlmICghKF9fZmlyc3QgPCBfX2xh c3QpKQogICAgICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICAgICAgaXRlcl9zd2FwKF9fZmlyc3Qs IF9fbGFzdCk7CiAgICAgICAgKytfX2ZpcnN0OwogICAgICB9CiAgICB9CgoKCgoKCiAgdGVtcGxh dGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0Nv bXBhcmU+CiAgICBfUmFuZG9tQWNjZXNzSXRlcgogICAgX191bmd1YXJkZWRfcGFydGl0aW9uKF9S YW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAg ICAgICAgICAgICAgICAgICAgICBfVHAgX19waXZvdCwgX0NvbXBhcmUgX19jb21wKQogICAgewog ICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAgIHdoaWxlIChfX2NvbXAoKl9fZmlyc3QsIF9fcGl2 b3QpKQogICAgICAgICAgKytfX2ZpcnN0OwogICAgICAgIC0tX19sYXN0OwogICAgICAgIHdoaWxl IChfX2NvbXAoX19waXZvdCwgKl9fbGFzdCkpCiAgICAgICAgICAtLV9fbGFzdDsKICAgICAgICBp ZiAoIShfX2ZpcnN0IDwgX19sYXN0KSkKICAgICAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgICAg IGl0ZXJfc3dhcChfX2ZpcnN0LCBfX2xhc3QpOwogICAgICAgICsrX19maXJzdDsKICAgICAgfQog ICAgfQojIDE5MjkgIi91c3IvY3lnbnVzL2Jpbi8uLi9pbmNsdWRlL2MrKy8zLjEuMS9iaXRzL3N0 bF9hbGdvLmgiIDMKICBlbnVtIHsgX01fdGhyZXNob2xkID0gMTYgfTsKCgoKCgoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX1RwPgogICAgdm9pZAogICAg X191bmd1YXJkZWRfbGluZWFyX2luc2VydChfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9UcCBf X3ZhbCkKICAgIHsKICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19uZXh0ID0gX19sYXN0OwogICAg ICAtLV9fbmV4dDsKICAgICAgd2hpbGUgKF9fdmFsIDwgKl9fbmV4dCkgewogICAgICAgICpfX2xh c3QgPSAqX19uZXh0OwogICAgICAgIF9fbGFzdCA9IF9fbmV4dDsKICAgICAgICAtLV9fbmV4dDsK ICAgICAgfQogICAgICAqX19sYXN0ID0gX192YWw7CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0NvbXBhcmU+ CiAgICB2b2lkCiAgICBfX3VuZ3VhcmRlZF9saW5lYXJfaW5zZXJ0KF9SYW5kb21BY2Nlc3NJdGVy IF9fbGFzdCwgX1RwIF9fdmFsLCBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAgIF9SYW5kb21B Y2Nlc3NJdGVyIF9fbmV4dCA9IF9fbGFzdDsKICAgICAgLS1fX25leHQ7CiAgICAgIHdoaWxlIChf X2NvbXAoX192YWwsICpfX25leHQpKSB7CiAgICAgICAgKl9fbGFzdCA9ICpfX25leHQ7CiAgICAg ICAgX19sYXN0ID0gX19uZXh0OwogICAgICAgIC0tX19uZXh0OwogICAgICB9CiAgICAgICpfX2xh c3QgPSBfX3ZhbDsKICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNz SXRlcj4KICAgIHZvaWQKICAgIF9faW5zZXJ0aW9uX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19m aXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0KQogICAgewogICAgICBpZiAoX19maXJzdCA9 PSBfX2xhc3QpIHJldHVybjsKCiAgICAgIGZvciAoX1JhbmRvbUFjY2Vzc0l0ZXIgX19pID0gX19m aXJzdCArIDE7IF9faSAhPSBfX2xhc3Q7ICsrX19pKQogICAgICB7CiAgICAgICAgdHlwZW5hbWUg aXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6dmFsdWVfdHlwZSBfX3ZhbCA9ICpf X2k7CiAgICAgICAgaWYgKF9fdmFsIDwgKl9fZmlyc3QpIHsKICAgICAgICAgIGNvcHlfYmFja3dh cmQoX19maXJzdCwgX19pLCBfX2kgKyAxKTsKICAgICAgICAgICpfX2ZpcnN0ID0gX192YWw7CiAg ICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICAgIF9fdW5ndWFyZGVkX2xpbmVhcl9pbnNlcnQo X19pLCBfX3ZhbCk7CiAgICAgIH0KICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFu ZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICB2b2lkCiAgICBfX2luc2VydGlv bl9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFz dCwKICAgICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQogICAgewogICAgICBpZiAo X19maXJzdCA9PSBfX2xhc3QpIHJldHVybjsKCiAgICAgIGZvciAoX1JhbmRvbUFjY2Vzc0l0ZXIg X19pID0gX19maXJzdCArIDE7IF9faSAhPSBfX2xhc3Q7ICsrX19pKQogICAgICB7CiAgICAgICAg dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6dmFsdWVfdHlwZSBf X3ZhbCA9ICpfX2k7CiAgICAgICAgaWYgKF9fY29tcChfX3ZhbCwgKl9fZmlyc3QpKSB7CiAgICAg ICAgICBjb3B5X2JhY2t3YXJkKF9fZmlyc3QsIF9faSwgX19pICsgMSk7CiAgICAgICAgICAqX19m aXJzdCA9IF9fdmFsOwogICAgICAgIH0KICAgICAgICBlbHNlCiAgICAgICAgICBfX3VuZ3VhcmRl ZF9saW5lYXJfaW5zZXJ0KF9faSwgX192YWwsIF9fY29tcCk7CiAgICAgIH0KICAgIH0KCgoKCgoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcj4KICAgIGlubGluZSB2b2lkCiAg ICBfX3VuZ3VhcmRlZF9pbnNlcnRpb25fc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBf UmFuZG9tQWNjZXNzSXRlciBfX2xhc3QpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRl cmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOwoK ICAgICAgZm9yIChfUmFuZG9tQWNjZXNzSXRlciBfX2kgPSBfX2ZpcnN0OyBfX2kgIT0gX19sYXN0 OyArK19faSkKICAgICAgICBfX3VuZ3VhcmRlZF9saW5lYXJfaW5zZXJ0KF9faSwgX1ZhbHVlVHlw ZSgqX19pKSk7CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0 ZXIsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgaW5saW5lIHZvaWQKICAgIF9fdW5ndWFyZGVkX2lu c2VydGlvbl9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVy IF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkK ICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vz c0l0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CgogICAgICBmb3IgKF9SYW5kb21BY2Nlc3NJ dGVyIF9faSA9IF9fZmlyc3Q7IF9faSAhPSBfX2xhc3Q7ICsrX19pKQogICAgICAgIF9fdW5ndWFy ZGVkX2xpbmVhcl9pbnNlcnQoX19pLCBfVmFsdWVUeXBlKCpfX2kpLCBfX2NvbXApOwogICAgfQoK CgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyPgogICAgdm9pZAogICAg X19maW5hbF9pbnNlcnRpb25fc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9t QWNjZXNzSXRlciBfX2xhc3QpCiAgICB7CiAgICAgIGlmIChfX2xhc3QgLSBfX2ZpcnN0ID4gX01f dGhyZXNob2xkKSB7CiAgICAgICAgX19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2ZpcnN0ICsg X01fdGhyZXNob2xkKTsKICAgICAgICBfX3VuZ3VhcmRlZF9pbnNlcnRpb25fc29ydChfX2ZpcnN0 ICsgX01fdGhyZXNob2xkLCBfX2xhc3QpOwogICAgICB9CiAgICAgIGVsc2UKICAgICAgICBfX2lu c2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFzdCk7CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgdm9pZAogICAg X19maW5hbF9pbnNlcnRpb25fc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9t QWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9f Y29tcCkKICAgIHsKICAgICAgaWYgKF9fbGFzdCAtIF9fZmlyc3QgPiBfTV90aHJlc2hvbGQpIHsK ICAgICAgICBfX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fZmlyc3QgKyBfTV90aHJlc2hvbGQs IF9fY29tcCk7CiAgICAgICAgX191bmd1YXJkZWRfaW5zZXJ0aW9uX3NvcnQoX19maXJzdCArIF9N X3RocmVzaG9sZCwgX19sYXN0LCBfX2NvbXApOwogICAgICB9CiAgICAgIGVsc2UKICAgICAgICBf X2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFzdCwgX19jb21wKTsKICAgIH0KCgoKCgoKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfU2l6ZT4KICAgIGlubGluZSBfU2l6ZQogICAgX19sZyhfU2l6ZSBf X24pCiAgICB7CiAgICAgIF9TaXplIF9fazsKICAgICAgZm9yIChfX2sgPSAwOyBfX24gIT0gMTsg X19uID4+PSAxKSArK19fazsKICAgICAgcmV0dXJuIF9fazsKICAgIH0KCgoKCgoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX1NpemU+CiAgICB2b2lkCiAg ICBfX2ludHJvc29ydF9sb29wKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nl c3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgX1NpemUgX19kZXB0aF9saW1pdCkK ICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vz c0l0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CgogICAgICB3aGlsZSAoX19sYXN0IC0gX19m aXJzdCA+IF9NX3RocmVzaG9sZCkgewogICAgICAgIGlmIChfX2RlcHRoX2xpbWl0ID09IDApIHsK ICAgICAgICAgIHBhcnRpYWxfc29ydChfX2ZpcnN0LCBfX2xhc3QsIF9fbGFzdCk7CiAgICAgICAg ICByZXR1cm47CiAgICAgICAgfQogICAgICAgIC0tX19kZXB0aF9saW1pdDsKICAgICAgICBfUmFu ZG9tQWNjZXNzSXRlciBfX2N1dCA9CiAgICAgICAgICBfX3VuZ3VhcmRlZF9wYXJ0aXRpb24oX19m aXJzdCwgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9WYWx1ZVR5cGUo X19tZWRpYW4oKl9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAqKF9fZmlyc3QgKyAoX19sYXN0IC0gX19maXJzdCkvMiksCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKF9fbGFzdCAtIDEp KSkpOwogICAgICAgIF9faW50cm9zb3J0X2xvb3AoX19jdXQsIF9fbGFzdCwgX19kZXB0aF9saW1p dCk7CiAgICAgICAgX19sYXN0ID0gX19jdXQ7CiAgICAgIH0KICAgIH0KCgoKCgoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX1NpemUsIHR5cGVuYW1lIF9D b21wYXJlPgogICAgdm9pZAogICAgX19pbnRyb3NvcnRfbG9vcChfUmFuZG9tQWNjZXNzSXRlciBf X2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgIF9T aXplIF9fZGVwdGhfbGltaXQsIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgdHlwZWRlZiB0 eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlIF9W YWx1ZVR5cGU7CgogICAgICB3aGlsZSAoX19sYXN0IC0gX19maXJzdCA+IF9NX3RocmVzaG9sZCkg ewogICAgICAgIGlmIChfX2RlcHRoX2xpbWl0ID09IDApIHsKICAgICAgICAgIHBhcnRpYWxfc29y dChfX2ZpcnN0LCBfX2xhc3QsIF9fbGFzdCwgX19jb21wKTsKICAgICAgICAgIHJldHVybjsKICAg ICAgICB9CiAgICAgICAgLS1fX2RlcHRoX2xpbWl0OwogICAgICAgIF9SYW5kb21BY2Nlc3NJdGVy IF9fY3V0ID0KICAgICAgICAgIF9fdW5ndWFyZGVkX3BhcnRpdGlvbihfX2ZpcnN0LCBfX2xhc3Qs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1ZhbHVlVHlwZShfX21lZGlhbigqX19m aXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICooX19maXJzdCArIChfX2xhc3QgLSBfX2ZpcnN0KS8yKSwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICooX19sYXN0IC0gMSksIF9fY29tcCkpLAog ICAgICAgICAgIF9fY29tcCk7CiAgICAgICAgX19pbnRyb3NvcnRfbG9vcChfX2N1dCwgX19sYXN0 LCBfX2RlcHRoX2xpbWl0LCBfX2NvbXApOwogICAgICAgIF9fbGFzdCA9IF9fY3V0OwogICAgICB9 CiAgICB9CiMgMjE2NiAiL3Vzci9jeWdudXMvYmluLy4uL2luY2x1ZGUvYysrLzMuMS4xL2JpdHMv c3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyPgogICAg aW5saW5lIHZvaWQKICAgIHNvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFj Y2Vzc0l0ZXIgX19sYXN0KQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3Ry YWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKCgogICAgIAoK ICAgICAKCiAgICAgIGlmIChfX2ZpcnN0ICE9IF9fbGFzdCkgewogICAgICAgIF9faW50cm9zb3J0 X2xvb3AoX19maXJzdCwgX19sYXN0LCBfX2xnKF9fbGFzdCAtIF9fZmlyc3QpICogMik7CiAgICAg ICAgX19maW5hbF9pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xhc3QpOwogICAgICB9CiAgICB9 CiMgMjE5NyAiL3Vzci9jeWdudXMvYmluLy4uL2luY2x1ZGUvYysrLzMuMS4xL2JpdHMvc3RsX2Fs Z28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBf Q29tcGFyZT4KICAgIGlubGluZSB2b2lkCiAgICBzb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmly c3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgX0NvbXBhcmUgX19jb21wKQogICAgewogICAg ICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OnZh bHVlX3R5cGUgX1ZhbHVlVHlwZTsKCgogICAgIAoKICAgICAKCiAgICAgIGlmIChfX2ZpcnN0ICE9 IF9fbGFzdCkgewogICAgICAgIF9faW50cm9zb3J0X2xvb3AoX19maXJzdCwgX19sYXN0LCBfX2xn KF9fbGFzdCAtIF9fZmlyc3QpICogMiwgX19jb21wKTsKICAgICAgICBfX2ZpbmFsX2luc2VydGlv bl9zb3J0KF9fZmlyc3QsIF9fbGFzdCwgX19jb21wKTsKICAgICAgfQogICAgfQoKCgoKCgoKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcj4KICAgIHZvaWQKICAgIF9faW5wbGFj ZV9zdGFibGVfc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRl ciBfX2xhc3QpCiAgICB7CiAgICAgIGlmIChfX2xhc3QgLSBfX2ZpcnN0IDwgMTUpIHsKICAgICAg ICBfX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgICAgcmV0dXJuOwogICAg ICB9CiAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbWlkZGxlID0gX19maXJzdCArIChfX2xhc3Qg LSBfX2ZpcnN0KSAvIDI7CiAgICAgIF9faW5wbGFjZV9zdGFibGVfc29ydChfX2ZpcnN0LCBfX21p ZGRsZSk7CiAgICAgIF9faW5wbGFjZV9zdGFibGVfc29ydChfX21pZGRsZSwgX19sYXN0KTsKICAg ICAgX19tZXJnZV93aXRob3V0X2J1ZmZlcihfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0LAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgIF9fbWlkZGxlIC0gX19maXJzdCwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBfX2xhc3QgLSBfX21pZGRsZSk7CiAgICB9CgoKCgoKCiAgdGVtcGxh dGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgdm9p ZAogICAgX19pbnBsYWNlX3N0YWJsZV9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9S YW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICBfQ29tcGFy ZSBfX2NvbXApCiAgICB7CiAgICAgIGlmIChfX2xhc3QgLSBfX2ZpcnN0IDwgMTUpIHsKICAgICAg ICBfX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFzdCwgX19jb21wKTsKICAgICAgICByZXR1 cm47CiAgICAgIH0KICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19taWRkbGUgPSBfX2ZpcnN0ICsg KF9fbGFzdCAtIF9fZmlyc3QpIC8gMjsKICAgICAgX19pbnBsYWNlX3N0YWJsZV9zb3J0KF9fZmly c3QsIF9fbWlkZGxlLCBfX2NvbXApOwogICAgICBfX2lucGxhY2Vfc3RhYmxlX3NvcnQoX19taWRk bGUsIF9fbGFzdCwgX19jb21wKTsKICAgICAgX19tZXJnZV93aXRob3V0X2J1ZmZlcihfX2ZpcnN0 LCBfX21pZGRsZSwgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbWlkZGxl IC0gX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xhc3QgLSBfX21pZGRs ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbXApOwogICAgfQoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcjEsIHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVy MiwKICAgICAgICAgICB0eXBlbmFtZSBfRGlzdGFuY2U+CiAgICB2b2lkCiAgICBfX21lcmdlX3Nv cnRfbG9vcChfUmFuZG9tQWNjZXNzSXRlcjEgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIxIF9f bGFzdCwKICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyMiBfX3Jlc3VsdCwg X0Rpc3RhbmNlIF9fc3RlcF9zaXplKQogICAgewogICAgICBfRGlzdGFuY2UgX190d29fc3RlcCA9 IDIgKiBfX3N0ZXBfc2l6ZTsKCiAgICAgIHdoaWxlIChfX2xhc3QgLSBfX2ZpcnN0ID49IF9fdHdv X3N0ZXApIHsKICAgICAgICBfX3Jlc3VsdCA9IG1lcmdlKF9fZmlyc3QsIF9fZmlyc3QgKyBfX3N0 ZXBfc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fZmlyc3QgKyBfX3N0ZXBfc2l6ZSwg X19maXJzdCArIF9fdHdvX3N0ZXAsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX3Jlc3VsdCk7 CiAgICAgICAgX19maXJzdCArPSBfX3R3b19zdGVwOwogICAgICB9CgogICAgICBfX3N0ZXBfc2l6 ZSA9IG1pbihfRGlzdGFuY2UoX19sYXN0IC0gX19maXJzdCksIF9fc3RlcF9zaXplKTsKICAgICAg bWVyZ2UoX19maXJzdCwgX19maXJzdCArIF9fc3RlcF9zaXplLCBfX2ZpcnN0ICsgX19zdGVwX3Np emUsIF9fbGFzdCwKICAgICAgICAgICAgX19yZXN1bHQpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfUmFuZG9tQWNjZXNzSXRlcjEsIHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyMiwKICAg ICAgICAgICB0eXBlbmFtZSBfRGlzdGFuY2UsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgdm9pZAog ICAgX19tZXJnZV9zb3J0X2xvb3AoX1JhbmRvbUFjY2Vzc0l0ZXIxIF9fZmlyc3QsIF9SYW5kb21B Y2Nlc3NJdGVyMSBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRl cjIgX19yZXN1bHQsIF9EaXN0YW5jZSBfX3N0ZXBfc2l6ZSwKICAgICAgICAgICAgICAgICAgICAg IF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgX0Rpc3RhbmNlIF9fdHdvX3N0ZXAgPSAyICog X19zdGVwX3NpemU7CgogICAgICB3aGlsZSAoX19sYXN0IC0gX19maXJzdCA+PSBfX3R3b19zdGVw KSB7CiAgICAgICAgX19yZXN1bHQgPSBtZXJnZShfX2ZpcnN0LCBfX2ZpcnN0ICsgX19zdGVwX3Np emUsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2ZpcnN0ICsgX19zdGVwX3NpemUsIF9fZmly c3QgKyBfX3R3b19zdGVwLAogICAgICAgICAgICAgICAgICAgICAgICAgX19yZXN1bHQsCiAgICAg ICAgICAgICAgICAgICAgICAgICBfX2NvbXApOwogICAgICAgIF9fZmlyc3QgKz0gX190d29fc3Rl cDsKICAgICAgfQogICAgICBfX3N0ZXBfc2l6ZSA9IG1pbihfRGlzdGFuY2UoX19sYXN0IC0gX19m aXJzdCksIF9fc3RlcF9zaXplKTsKCiAgICAgIG1lcmdlKF9fZmlyc3QsIF9fZmlyc3QgKyBfX3N0 ZXBfc2l6ZSwKICAgICAgICAgICAgX19maXJzdCArIF9fc3RlcF9zaXplLCBfX2xhc3QsCiAgICAg ICAgICAgIF9fcmVzdWx0LAogICAgICAgICAgICBfX2NvbXApOwogICAgfQoKICBlbnVtIHsgX01f Y2h1bmtfc2l6ZSA9IDcgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIs IHR5cGVuYW1lIF9EaXN0YW5jZT4KICAgIHZvaWQKICAgIF9fY2h1bmtfaW5zZXJ0aW9uX3NvcnQo X1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAg ICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UgX19jaHVua19zaXplKQogICAgewogICAg ICB3aGlsZSAoX19sYXN0IC0gX19maXJzdCA+PSBfX2NodW5rX3NpemUpIHsKICAgICAgICBfX2lu c2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fZmlyc3QgKyBfX2NodW5rX3NpemUpOwogICAgICAgIF9f Zmlyc3QgKz0gX19jaHVua19zaXplOwogICAgICB9CiAgICAgIF9faW5zZXJ0aW9uX3NvcnQoX19m aXJzdCwgX19sYXN0KTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0 ZXIsIHR5cGVuYW1lIF9EaXN0YW5jZSwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICB2b2lkCiAgICBf X2NodW5rX2luc2VydGlvbl9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21B Y2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlIF9f Y2h1bmtfc2l6ZSwgX0NvbXBhcmUgX19jb21wKQogICAgewogICAgICB3aGlsZSAoX19sYXN0IC0g X19maXJzdCA+PSBfX2NodW5rX3NpemUpIHsKICAgICAgICBfX2luc2VydGlvbl9zb3J0KF9fZmly c3QsIF9fZmlyc3QgKyBfX2NodW5rX3NpemUsIF9fY29tcCk7CiAgICAgICAgX19maXJzdCArPSBf X2NodW5rX3NpemU7CiAgICAgIH0KICAgICAgX19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xh c3QsIF9fY29tcCk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVy LCB0eXBlbmFtZSBfUG9pbnRlcj4KICAgIHZvaWQKICAgIF9fbWVyZ2Vfc29ydF93aXRoX2J1ZmZl cihfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgX1BvaW50ZXIgX19idWZmZXIpCiAgICB7CiAgICAg IHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6ZGlm ZmVyZW5jZV90eXBlIF9EaXN0YW5jZTsKCiAgICAgIF9EaXN0YW5jZSBfX2xlbiA9IF9fbGFzdCAt IF9fZmlyc3Q7CiAgICAgIF9Qb2ludGVyIF9fYnVmZmVyX2xhc3QgPSBfX2J1ZmZlciArIF9fbGVu OwoKICAgICAgX0Rpc3RhbmNlIF9fc3RlcF9zaXplID0gX01fY2h1bmtfc2l6ZTsKICAgICAgX19j aHVua19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xhc3QsIF9fc3RlcF9zaXplKTsKCiAgICAg IHdoaWxlIChfX3N0ZXBfc2l6ZSA8IF9fbGVuKSB7CiAgICAgICAgX19tZXJnZV9zb3J0X2xvb3Ao X19maXJzdCwgX19sYXN0LCBfX2J1ZmZlciwgX19zdGVwX3NpemUpOwogICAgICAgIF9fc3RlcF9z aXplICo9IDI7CiAgICAgICAgX19tZXJnZV9zb3J0X2xvb3AoX19idWZmZXIsIF9fYnVmZmVyX2xh c3QsIF9fZmlyc3QsIF9fc3RlcF9zaXplKTsKICAgICAgICBfX3N0ZXBfc2l6ZSAqPSAyOwogICAg ICB9CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFt ZSBfUG9pbnRlciwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICB2b2lkCiAgICBfX21lcmdlX3NvcnRf d2l0aF9idWZmZXIoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIg X19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Qb2ludGVyIF9fYnVmZmVyLCBf Q29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJh aXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9EaXN0YW5jZTsKCiAgICAg IF9EaXN0YW5jZSBfX2xlbiA9IF9fbGFzdCAtIF9fZmlyc3Q7CiAgICAgIF9Qb2ludGVyIF9fYnVm ZmVyX2xhc3QgPSBfX2J1ZmZlciArIF9fbGVuOwoKICAgICAgX0Rpc3RhbmNlIF9fc3RlcF9zaXpl ID0gX01fY2h1bmtfc2l6ZTsKICAgICAgX19jaHVua19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBf X2xhc3QsIF9fc3RlcF9zaXplLCBfX2NvbXApOwoKICAgICAgd2hpbGUgKF9fc3RlcF9zaXplIDwg X19sZW4pIHsKICAgICAgICBfX21lcmdlX3NvcnRfbG9vcChfX2ZpcnN0LCBfX2xhc3QsIF9fYnVm ZmVyLCBfX3N0ZXBfc2l6ZSwgX19jb21wKTsKICAgICAgICBfX3N0ZXBfc2l6ZSAqPSAyOwogICAg ICAgIF9fbWVyZ2Vfc29ydF9sb29wKF9fYnVmZmVyLCBfX2J1ZmZlcl9sYXN0LCBfX2ZpcnN0LCBf X3N0ZXBfc2l6ZSwgX19jb21wKTsKICAgICAgICBfX3N0ZXBfc2l6ZSAqPSAyOwogICAgICB9CiAg ICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfUG9p bnRlciwgdHlwZW5hbWUgX0Rpc3RhbmNlPgogICAgdm9pZAogICAgX19zdGFibGVfc29ydF9hZGFw dGl2ZShfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3Qs CiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Qb2ludGVyIF9fYnVmZmVyLCBfRGlzdGFuY2Ug X19idWZmZXJfc2l6ZSkKICAgIHsKICAgICAgX0Rpc3RhbmNlIF9fbGVuID0gKF9fbGFzdCAtIF9f Zmlyc3QgKyAxKSAvIDI7CiAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbWlkZGxlID0gX19maXJz dCArIF9fbGVuOwogICAgICBpZiAoX19sZW4gPiBfX2J1ZmZlcl9zaXplKSB7CiAgICAgICAgX19z dGFibGVfc29ydF9hZGFwdGl2ZShfX2ZpcnN0LCBfX21pZGRsZSwgX19idWZmZXIsIF9fYnVmZmVy X3NpemUpOwogICAgICAgIF9fc3RhYmxlX3NvcnRfYWRhcHRpdmUoX19taWRkbGUsIF9fbGFzdCwg X19idWZmZXIsIF9fYnVmZmVyX3NpemUpOwogICAgICB9CiAgICAgIGVsc2UgewogICAgICAgIF9f bWVyZ2Vfc29ydF93aXRoX2J1ZmZlcihfX2ZpcnN0LCBfX21pZGRsZSwgX19idWZmZXIpOwogICAg ICAgIF9fbWVyZ2Vfc29ydF93aXRoX2J1ZmZlcihfX21pZGRsZSwgX19sYXN0LCBfX2J1ZmZlcik7 CiAgICAgIH0KICAgICAgX19tZXJnZV9hZGFwdGl2ZShfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0 LCBfRGlzdGFuY2UoX19taWRkbGUgLSBfX2ZpcnN0KSwKICAgICAgICAgICAgICAgICAgICAgICBf RGlzdGFuY2UoX19sYXN0IC0gX19taWRkbGUpLCBfX2J1ZmZlciwgX19idWZmZXJfc2l6ZSk7CiAg ICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfUG9p bnRlciwgdHlwZW5hbWUgX0Rpc3RhbmNlLAogICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlPgog ICAgdm9pZAogICAgX19zdGFibGVfc29ydF9hZGFwdGl2ZShfUmFuZG9tQWNjZXNzSXRlciBfX2Zp cnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAg IF9Qb2ludGVyIF9fYnVmZmVyLCBfRGlzdGFuY2UgX19idWZmZXJfc2l6ZSwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQogICAgewogICAgICBfRGlzdGFuY2UgX19s ZW4gPSAoX19sYXN0IC0gX19maXJzdCArIDEpIC8gMjsKICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIg X19taWRkbGUgPSBfX2ZpcnN0ICsgX19sZW47CiAgICAgIGlmIChfX2xlbiA+IF9fYnVmZmVyX3Np emUpIHsKICAgICAgICBfX3N0YWJsZV9zb3J0X2FkYXB0aXZlKF9fZmlyc3QsIF9fbWlkZGxlLCBf X2J1ZmZlciwgX19idWZmZXJfc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9f Y29tcCk7CiAgICAgICAgX19zdGFibGVfc29ydF9hZGFwdGl2ZShfX21pZGRsZSwgX19sYXN0LCBf X2J1ZmZlciwgX19idWZmZXJfc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9f Y29tcCk7CiAgICAgIH0KICAgICAgZWxzZSB7CiAgICAgICAgX19tZXJnZV9zb3J0X3dpdGhfYnVm ZmVyKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2J1ZmZlciwgX19jb21wKTsKICAgICAgICBfX21lcmdl X3NvcnRfd2l0aF9idWZmZXIoX19taWRkbGUsIF9fbGFzdCwgX19idWZmZXIsIF9fY29tcCk7CiAg ICAgIH0KICAgICAgX19tZXJnZV9hZGFwdGl2ZShfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0LCBf RGlzdGFuY2UoX19taWRkbGUgLSBfX2ZpcnN0KSwKICAgICAgICAgICAgICAgICAgICAgICBfRGlz dGFuY2UoX19sYXN0IC0gX19taWRkbGUpLCBfX2J1ZmZlciwgX19idWZmZXJfc2l6ZSwKICAgICAg ICAgICAgICAgICAgICAgICBfX2NvbXApOwogICAgfQojIDI0MzAgIi91c3IvY3lnbnVzL2Jpbi8u Li9pbmNsdWRlL2MrKy8zLjEuMS9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfUmFuZG9tQWNjZXNzSXRlcj4KICAgIGlubGluZSB2b2lkCiAgICBzdGFibGVfc29ydChfUmFu ZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QpCiAgICB7CiAg ICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6 dmFsdWVfdHlwZSBfVmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3Ry YWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OmRpZmZlcmVuY2VfdHlwZSBfRGlzdGFuY2VUeXBlOwoK CiAgICAgCgogICAgIAoKICAgICAgX1RlbXBvcmFyeV9idWZmZXI8X1JhbmRvbUFjY2Vzc0l0ZXIs IF9WYWx1ZVR5cGU+IGJ1ZihfX2ZpcnN0LCBfX2xhc3QpOwogICAgICBpZiAoYnVmLmJlZ2luKCkg PT0gMCkKICAgICAgICBfX2lucGxhY2Vfc3RhYmxlX3NvcnQoX19maXJzdCwgX19sYXN0KTsKICAg ICAgZWxzZQogICAgICAgIF9fc3RhYmxlX3NvcnRfYWRhcHRpdmUoX19maXJzdCwgX19sYXN0LCBi dWYuYmVnaW4oKSwgX0Rpc3RhbmNlVHlwZShidWYuc2l6ZSgpKSk7CiAgICB9CiMgMjQ2NiAiL3Vz ci9jeWdudXMvYmluLy4uL2luY2x1ZGUvYysrLzMuMS4xL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRl bXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAg IGlubGluZSB2b2lkCiAgICBzdGFibGVfc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBf UmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgdHlw ZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90 eXBlIF9WYWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9S YW5kb21BY2Nlc3NJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9EaXN0YW5jZVR5cGU7CgoKICAgICAK CiAgICAgCgoKICAgICAgX1RlbXBvcmFyeV9idWZmZXI8X1JhbmRvbUFjY2Vzc0l0ZXIsIF9WYWx1 ZVR5cGU+IGJ1ZihfX2ZpcnN0LCBfX2xhc3QpOwogICAgICBpZiAoYnVmLmJlZ2luKCkgPT0gMCkK ICAgICAgICBfX2lucGxhY2Vfc3RhYmxlX3NvcnQoX19maXJzdCwgX19sYXN0LCBfX2NvbXApOwog ICAgICBlbHNlCiAgICAgICAgX19zdGFibGVfc29ydF9hZGFwdGl2ZShfX2ZpcnN0LCBfX2xhc3Qs IGJ1Zi5iZWdpbigpLCBfRGlzdGFuY2VUeXBlKGJ1Zi5zaXplKCkpLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgX19jb21wKTsKICAgIH0KIyAyNTAyICIvdXNyL2N5Z251cy9iaW4vLi4v aW5jbHVkZS9jKysvMy4xLjEvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUg X1JhbmRvbUFjY2Vzc0l0ZXI+CiAgICB2b2lkCiAgICBwYXJ0aWFsX3NvcnQoX1JhbmRvbUFjY2Vz c0l0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX21pZGRs ZSwKICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QpCiAgICB7CiAgICAg IHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6dmFs dWVfdHlwZSBfVmFsdWVUeXBlOwoKCiAgICAgCgogICAgIAoKICAgICAgbWFrZV9oZWFwKF9fZmly c3QsIF9fbWlkZGxlKTsKICAgICAgZm9yIChfUmFuZG9tQWNjZXNzSXRlciBfX2kgPSBfX21pZGRs ZTsgX19pIDwgX19sYXN0OyArK19faSkKICAgICAgICBpZiAoKl9faSA8ICpfX2ZpcnN0KQogICAg ICAgICAgX19wb3BfaGVhcChfX2ZpcnN0LCBfX21pZGRsZSwgX19pLCBfVmFsdWVUeXBlKCpfX2kp KTsKICAgICAgc29ydF9oZWFwKF9fZmlyc3QsIF9fbWlkZGxlKTsKICAgIH0KIyAyNTQwICIvdXNy L2N5Z251cy9iaW4vLi4vaW5jbHVkZS9jKysvMy4xLjEvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVt cGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9Db21wYXJlPgogICAg dm9pZAogICAgcGFydGlhbF9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsCiAgICAgICAg ICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19taWRkbGUsCiAgICAgICAgICAgICAgICAgX1Jh bmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkK ICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vz c0l0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CgoKICAgICAKCiAgICAgCgoKICAgICAgbWFr ZV9oZWFwKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2NvbXApOwogICAgICBmb3IgKF9SYW5kb21BY2Nl c3NJdGVyIF9faSA9IF9fbWlkZGxlOyBfX2kgPCBfX2xhc3Q7ICsrX19pKQogICAgICAgIGlmIChf X2NvbXAoKl9faSwgKl9fZmlyc3QpKQogICAgICAgICAgX19wb3BfaGVhcChfX2ZpcnN0LCBfX21p ZGRsZSwgX19pLCBfVmFsdWVUeXBlKCpfX2kpLCBfX2NvbXApOwogICAgICBzb3J0X2hlYXAoX19m aXJzdCwgX19taWRkbGUsIF9fY29tcCk7CiAgICB9CiMgMjU3OSAiL3Vzci9jeWdudXMvYmluLy4u L2luY2x1ZGUvYysrLzMuMS4xL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1l IF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyPgogICAgX1JhbmRvbUFjY2Vz c0l0ZXIKICAgIHBhcnRpYWxfc29ydF9jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRl ciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX3Jlc3Vs dF9maXJzdCwKICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fcmVzdWx0 X2xhc3QpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1 dEl0ZXI+Ojp2YWx1ZV90eXBlIF9JbnB1dFZhbHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFt ZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlIF9PdXRwdXRW YWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21B Y2Nlc3NJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9EaXN0YW5jZVR5cGU7CgoKICAgICAKICAgICAK ICAgICAKICAgICAKCiAgICAgIGlmIChfX3Jlc3VsdF9maXJzdCA9PSBfX3Jlc3VsdF9sYXN0KSBy ZXR1cm4gX19yZXN1bHRfbGFzdDsKICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19yZXN1bHRfcmVh bF9sYXN0ID0gX19yZXN1bHRfZmlyc3Q7CiAgICAgIHdoaWxlKF9fZmlyc3QgIT0gX19sYXN0ICYm IF9fcmVzdWx0X3JlYWxfbGFzdCAhPSBfX3Jlc3VsdF9sYXN0KSB7CiAgICAgICAgKl9fcmVzdWx0 X3JlYWxfbGFzdCA9ICpfX2ZpcnN0OwogICAgICAgICsrX19yZXN1bHRfcmVhbF9sYXN0OwogICAg ICAgICsrX19maXJzdDsKICAgICAgfQogICAgICBtYWtlX2hlYXAoX19yZXN1bHRfZmlyc3QsIF9f cmVzdWx0X3JlYWxfbGFzdCk7CiAgICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkgewogICAg ICAgIGlmICgqX19maXJzdCA8ICpfX3Jlc3VsdF9maXJzdCkKICAgICAgICAgIF9fYWRqdXN0X2hl YXAoX19yZXN1bHRfZmlyc3QsIF9EaXN0YW5jZVR5cGUoMCksCiAgICAgICAgICAgICAgICAgICAg ICAgIF9EaXN0YW5jZVR5cGUoX19yZXN1bHRfcmVhbF9sYXN0IC0gX19yZXN1bHRfZmlyc3QpLAog ICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRWYWx1ZVR5cGUoKl9fZmlyc3QpKTsKICAgICAg ICArK19fZmlyc3Q7CiAgICAgIH0KICAgICAgc29ydF9oZWFwKF9fcmVzdWx0X2ZpcnN0LCBfX3Jl c3VsdF9yZWFsX2xhc3QpOwogICAgICByZXR1cm4gX19yZXN1bHRfcmVhbF9sYXN0OwogICAgfQoj IDI2MzMgIi91c3IvY3lnbnVzL2Jpbi8uLi9pbmNsdWRlL2MrKy8zLjEuMS9iaXRzL3N0bF9hbGdv LmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfUmFuZG9tQWNj ZXNzSXRlciwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBfUmFuZG9tQWNjZXNzSXRlcgogICAgcGFy dGlhbF9zb3J0X2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAg ICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fcmVzdWx0X2ZpcnN0LAogICAg ICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19yZXN1bHRfbGFzdCwKICAgICAg ICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBl bmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcj46OnZhbHVlX3R5cGUgX0lucHV0VmFsdWVU eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNz SXRlcj46OnZhbHVlX3R5cGUgX091dHB1dFZhbHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFt ZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX0Rp c3RhbmNlVHlwZTsKCgogICAgIAogICAgIAogICAgIAogICAgIAoKCiAgICAgIGlmIChfX3Jlc3Vs dF9maXJzdCA9PSBfX3Jlc3VsdF9sYXN0KSByZXR1cm4gX19yZXN1bHRfbGFzdDsKICAgICAgX1Jh bmRvbUFjY2Vzc0l0ZXIgX19yZXN1bHRfcmVhbF9sYXN0ID0gX19yZXN1bHRfZmlyc3Q7CiAgICAg IHdoaWxlKF9fZmlyc3QgIT0gX19sYXN0ICYmIF9fcmVzdWx0X3JlYWxfbGFzdCAhPSBfX3Jlc3Vs dF9sYXN0KSB7CiAgICAgICAgKl9fcmVzdWx0X3JlYWxfbGFzdCA9ICpfX2ZpcnN0OwogICAgICAg ICsrX19yZXN1bHRfcmVhbF9sYXN0OwogICAgICAgICsrX19maXJzdDsKICAgICAgfQogICAgICBt YWtlX2hlYXAoX19yZXN1bHRfZmlyc3QsIF9fcmVzdWx0X3JlYWxfbGFzdCwgX19jb21wKTsKICAg ICAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KSB7CiAgICAgICAgaWYgKF9fY29tcCgqX19maXJz dCwgKl9fcmVzdWx0X2ZpcnN0KSkKICAgICAgICAgIF9fYWRqdXN0X2hlYXAoX19yZXN1bHRfZmly c3QsIF9EaXN0YW5jZVR5cGUoMCksCiAgICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZVR5 cGUoX19yZXN1bHRfcmVhbF9sYXN0IC0gX19yZXN1bHRfZmlyc3QpLAogICAgICAgICAgICAgICAg ICAgICAgICBfSW5wdXRWYWx1ZVR5cGUoKl9fZmlyc3QpLAogICAgICAgICAgICAgICAgICAgICAg ICBfX2NvbXApOwogICAgICAgICsrX19maXJzdDsKICAgICAgfQogICAgICBzb3J0X2hlYXAoX19y ZXN1bHRfZmlyc3QsIF9fcmVzdWx0X3JlYWxfbGFzdCwgX19jb21wKTsKICAgICAgcmV0dXJuIF9f cmVzdWx0X3JlYWxfbGFzdDsKICAgIH0KIyAyNjg2ICIvdXNyL2N5Z251cy9iaW4vLi4vaW5jbHVk ZS9jKysvMy4xLjEvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRv bUFjY2Vzc0l0ZXI+CiAgICB2b2lkCiAgICBudGhfZWxlbWVudChfUmFuZG9tQWNjZXNzSXRlciBf X2ZpcnN0LAogICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19udGgsCiAgICAgICAg ICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlw ZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6dmFsdWVfdHlwZSBfVmFs dWVUeXBlOwoKCiAgICAgCiAgICAgCgogICAgICB3aGlsZSAoX19sYXN0IC0gX19maXJzdCA+IDMp IHsKICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2N1dCA9CiAgICAgICAgICBfX3VuZ3VhcmRl ZF9wYXJ0aXRpb24oX19maXJzdCwgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIF9WYWx1ZVR5cGUoX19tZWRpYW4oKl9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKF9fZmlyc3QgKyAoX19sYXN0IC0gX19maXJz dCkvMiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAqKF9fbGFzdCAtIDEpKSkpOwogICAgICAgIGlmIChfX2N1dCA8PSBfX250aCkKICAgICAgICAg IF9fZmlyc3QgPSBfX2N1dDsKICAgICAgICBlbHNlCiAgICAgICAgICBfX2xhc3QgPSBfX2N1dDsK ICAgICAgfQogICAgICBfX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFzdCk7CiAgICB9CiMg MjcyOCAiL3Vzci9jeWdudXMvYmluLy4uL2luY2x1ZGUvYysrLzMuMS4xL2JpdHMvc3RsX2FsZ28u aCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfQ29t cGFyZT4KICAgIHZvaWQKICAgIG50aF9lbGVtZW50KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3Qs CiAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX250aCwKICAgICAgICAgICAgICAg IF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9D b21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFp dHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CgoKICAgICAKICAg ICAKCgogICAgICB3aGlsZSAoX19sYXN0IC0gX19maXJzdCA+IDMpIHsKICAgICAgICBfUmFuZG9t QWNjZXNzSXRlciBfX2N1dCA9CiAgICAgICAgICBfX3VuZ3VhcmRlZF9wYXJ0aXRpb24oX19maXJz dCwgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9WYWx1ZVR5cGUoX19t ZWRpYW4oKl9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAqKF9fZmlyc3QgKyAoX19sYXN0IC0gX19maXJzdCkvMiksCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKF9fbGFzdCAtIDEpLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb21w KSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb21wKTsKICAgICAgICBpZiAo X19jdXQgPD0gX19udGgpCiAgICAgICAgICBfX2ZpcnN0ID0gX19jdXQ7CiAgICAgICAgZWxzZQog ICAgICAgICAgX19sYXN0ID0gX19jdXQ7CiAgICAgIH0KICAgICAgX19pbnNlcnRpb25fc29ydChf X2ZpcnN0LCBfX2xhc3QsIF9fY29tcCk7CiAgICB9CiMgMjc2OCAiL3Vzci9jeWdudXMvYmluLy4u L2luY2x1ZGUvYysrLzMuMS4xL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1l IF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1RwPgogICAgX0ZvcndhcmRJdGVyCiAgICBsb3dlcl9i b3VuZChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwgY29uc3QgX1Rw JiBfX3ZhbCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0Zv cndhcmRJdGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1l IGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX0Rpc3RhbmNl VHlwZTsKCgoKCgoKICAgICAKICAgICAKICAgICAKCiAgICAgIF9EaXN0YW5jZVR5cGUgX19sZW4g PSBkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QpOwogICAgICBfRGlzdGFuY2VUeXBlIF9faGFsZjsK ICAgICAgX0ZvcndhcmRJdGVyIF9fbWlkZGxlOwoKICAgICAgd2hpbGUgKF9fbGVuID4gMCkgewog ICAgICAgIF9faGFsZiA9IF9fbGVuID4+IDE7CiAgICAgICAgX19taWRkbGUgPSBfX2ZpcnN0Owog ICAgICAgIGFkdmFuY2UoX19taWRkbGUsIF9faGFsZik7CiAgICAgICAgaWYgKCpfX21pZGRsZSA8 IF9fdmFsKSB7CiAgICAgICAgICBfX2ZpcnN0ID0gX19taWRkbGU7CiAgICAgICAgICArK19fZmly c3Q7CiAgICAgICAgICBfX2xlbiA9IF9fbGVuIC0gX19oYWxmIC0gMTsKICAgICAgICB9CiAgICAg ICAgZWxzZQogICAgICAgICAgX19sZW4gPSBfX2hhbGY7CiAgICAgIH0KICAgICAgcmV0dXJuIF9f Zmlyc3Q7CiAgICB9CiMgMjgxNiAiL3Vzci9jeWdudXMvYmluLy4uL2luY2x1ZGUvYysrLzMuMS4x L2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlw ZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIF9Gb3J3YXJkSXRlcgogICAgbG93ZXJf Ym91bmQoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAg ICAgICAgICBjb25zdCBfVHAmIF9fdmFsLCBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAgIHR5 cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OnZhbHVlX3R5cGUg X1ZhbHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0Zvcndh cmRJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9EaXN0YW5jZVR5cGU7CgoKICAgICAKICAgICAKCiAg ICAgIF9EaXN0YW5jZVR5cGUgX19sZW4gPSBkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QpOwogICAg ICBfRGlzdGFuY2VUeXBlIF9faGFsZjsKICAgICAgX0ZvcndhcmRJdGVyIF9fbWlkZGxlOwoKICAg ICAgd2hpbGUgKF9fbGVuID4gMCkgewogICAgICAgIF9faGFsZiA9IF9fbGVuID4+IDE7CiAgICAg ICAgX19taWRkbGUgPSBfX2ZpcnN0OwogICAgICAgIGFkdmFuY2UoX19taWRkbGUsIF9faGFsZik7 CiAgICAgICAgaWYgKF9fY29tcCgqX19taWRkbGUsIF9fdmFsKSkgewogICAgICAgICAgX19maXJz dCA9IF9fbWlkZGxlOwogICAgICAgICAgKytfX2ZpcnN0OwogICAgICAgICAgX19sZW4gPSBfX2xl biAtIF9faGFsZiAtIDE7CiAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICAgIF9fbGVuID0g X19oYWxmOwogICAgICB9CiAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgfQojIDI4NTYgIi91c3Iv Y3lnbnVzL2Jpbi8uLi9pbmNsdWRlL2MrKy8zLjEuMS9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9UcD4KICAgIF9Gb3J3YXJkSXRl cgogICAgdXBwZXJfYm91bmQoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xh c3QsIGNvbnN0IF9UcCYgX192YWwpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0 b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKICAgICAgdHlw ZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6ZGlmZmVyZW5jZV90 eXBlIF9EaXN0YW5jZVR5cGU7CgoKCiAgICAgCiAgICAgCiAgICAgCgogICAgICBfRGlzdGFuY2VU eXBlIF9fbGVuID0gZGlzdGFuY2UoX19maXJzdCwgX19sYXN0KTsKICAgICAgX0Rpc3RhbmNlVHlw ZSBfX2hhbGY7CiAgICAgIF9Gb3J3YXJkSXRlciBfX21pZGRsZTsKCiAgICAgIHdoaWxlIChfX2xl biA+IDApIHsKICAgICAgICBfX2hhbGYgPSBfX2xlbiA+PiAxOwogICAgICAgIF9fbWlkZGxlID0g X19maXJzdDsKICAgICAgICBhZHZhbmNlKF9fbWlkZGxlLCBfX2hhbGYpOwogICAgICAgIGlmIChf X3ZhbCA8ICpfX21pZGRsZSkKICAgICAgICAgIF9fbGVuID0gX19oYWxmOwogICAgICAgIGVsc2Ug ewogICAgICAgICAgX19maXJzdCA9IF9fbWlkZGxlOwogICAgICAgICAgKytfX2ZpcnN0OwogICAg ICAgICAgX19sZW4gPSBfX2xlbiAtIF9faGFsZiAtIDE7CiAgICAgICAgfQogICAgICB9CiAgICAg IHJldHVybiBfX2ZpcnN0OwogICAgfQojIDI5MDEgIi91c3IvY3lnbnVzL2Jpbi8uLi9pbmNsdWRl L2MrKy8zLjEuMS9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2Fy ZEl0ZXIsIHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBfRm9yd2FyZEl0ZXIK ICAgIHVwcGVyX2JvdW5kKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0 LAogICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3ZhbCwgX0NvbXBhcmUgX19jb21wKQogICAg ewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+Ojp2 YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJh aXRzPF9Gb3J3YXJkSXRlcj46OmRpZmZlcmVuY2VfdHlwZSBfRGlzdGFuY2VUeXBlOwoKCiAgICAg CiAgICAgCgogICAgICBfRGlzdGFuY2VUeXBlIF9fbGVuID0gZGlzdGFuY2UoX19maXJzdCwgX19s YXN0KTsKICAgICAgX0Rpc3RhbmNlVHlwZSBfX2hhbGY7CiAgICAgIF9Gb3J3YXJkSXRlciBfX21p ZGRsZTsKCiAgICAgIHdoaWxlIChfX2xlbiA+IDApIHsKICAgICAgICBfX2hhbGYgPSBfX2xlbiA+ PiAxOwogICAgICAgIF9fbWlkZGxlID0gX19maXJzdDsKICAgICAgICBhZHZhbmNlKF9fbWlkZGxl LCBfX2hhbGYpOwogICAgICAgIGlmIChfX2NvbXAoX192YWwsICpfX21pZGRsZSkpCiAgICAgICAg ICBfX2xlbiA9IF9faGFsZjsKICAgICAgICBlbHNlIHsKICAgICAgICAgIF9fZmlyc3QgPSBfX21p ZGRsZTsKICAgICAgICAgICsrX19maXJzdDsKICAgICAgICAgIF9fbGVuID0gX19sZW4gLSBfX2hh bGYgLSAxOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gX19maXJzdDsKICAgIH0KIyAy OTQ4ICIvdXNyL2N5Z251cy9iaW4vLi4vaW5jbHVkZS9jKysvMy4xLjEvYml0cy9zdGxfYWxnby5o IiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfVHA+CiAgICBw YWlyPF9Gb3J3YXJkSXRlciwgX0ZvcndhcmRJdGVyPgogICAgZXF1YWxfcmFuZ2UoX0ZvcndhcmRJ dGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsIGNvbnN0IF9UcCYgX192YWwpCiAgICB7 CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OnZh bHVlX3R5cGUgX1ZhbHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFp dHM8X0ZvcndhcmRJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9EaXN0YW5jZVR5cGU7CgoKCiAgICAg CiAgICAgCiAgICAgCgogICAgICBfRGlzdGFuY2VUeXBlIF9fbGVuID0gZGlzdGFuY2UoX19maXJz dCwgX19sYXN0KTsKICAgICAgX0Rpc3RhbmNlVHlwZSBfX2hhbGY7CiAgICAgIF9Gb3J3YXJkSXRl ciBfX21pZGRsZSwgX19sZWZ0LCBfX3JpZ2h0OwoKICAgICAgd2hpbGUgKF9fbGVuID4gMCkgewog ICAgICAgIF9faGFsZiA9IF9fbGVuID4+IDE7CiAgICAgICAgX19taWRkbGUgPSBfX2ZpcnN0Owog ICAgICAgIGFkdmFuY2UoX19taWRkbGUsIF9faGFsZik7CiAgICAgICAgaWYgKCpfX21pZGRsZSA8 IF9fdmFsKSB7CiAgICAgICAgICBfX2ZpcnN0ID0gX19taWRkbGU7CiAgICAgICAgICArK19fZmly c3Q7CiAgICAgICAgICBfX2xlbiA9IF9fbGVuIC0gX19oYWxmIC0gMTsKICAgICAgICB9CiAgICAg ICAgZWxzZSBpZiAoX192YWwgPCAqX19taWRkbGUpCiAgICAgICAgICBfX2xlbiA9IF9faGFsZjsK ICAgICAgICBlbHNlIHsKICAgICAgICAgIF9fbGVmdCA9IGxvd2VyX2JvdW5kKF9fZmlyc3QsIF9f bWlkZGxlLCBfX3ZhbCk7CiAgICAgICAgICBhZHZhbmNlKF9fZmlyc3QsIF9fbGVuKTsKICAgICAg ICAgIF9fcmlnaHQgPSB1cHBlcl9ib3VuZCgrK19fbWlkZGxlLCBfX2ZpcnN0LCBfX3ZhbCk7CiAg ICAgICAgICByZXR1cm4gcGFpcjxfRm9yd2FyZEl0ZXIsIF9Gb3J3YXJkSXRlcj4oX19sZWZ0LCBf X3JpZ2h0KTsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIHBhaXI8X0ZvcndhcmRJdGVy LCBfRm9yd2FyZEl0ZXI+KF9fZmlyc3QsIF9fZmlyc3QpOwogICAgfQojIDMwMDMgIi91c3IvY3ln bnVzL2Jpbi8uLi9pbmNsdWRlL2MrKy8zLjEuMS9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0NvbXBhcmU+ CiAgICBwYWlyPF9Gb3J3YXJkSXRlciwgX0ZvcndhcmRJdGVyPgogICAgZXF1YWxfcmFuZ2UoX0Zv cndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsIGNvbnN0IF9UcCYgX192YWws CiAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAgIHR5cGVkZWYgdHlw ZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlw ZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6 ZGlmZmVyZW5jZV90eXBlIF9EaXN0YW5jZVR5cGU7CgoKICAgICAKICAgICAKICAgICAKCiAgICAg IF9EaXN0YW5jZVR5cGUgX19sZW4gPSBkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QpOwogICAgICBf RGlzdGFuY2VUeXBlIF9faGFsZjsKICAgICAgX0ZvcndhcmRJdGVyIF9fbWlkZGxlLCBfX2xlZnQs IF9fcmlnaHQ7CgogICAgICB3aGlsZSAoX19sZW4gPiAwKSB7CiAgICAgICAgX19oYWxmID0gX19s ZW4gPj4gMTsKICAgICAgICBfX21pZGRsZSA9IF9fZmlyc3Q7CiAgICAgICAgYWR2YW5jZShfX21p ZGRsZSwgX19oYWxmKTsKICAgICAgICBpZiAoX19jb21wKCpfX21pZGRsZSwgX192YWwpKSB7CiAg ICAgICAgICBfX2ZpcnN0ID0gX19taWRkbGU7CiAgICAgICAgICArK19fZmlyc3Q7CiAgICAgICAg ICBfX2xlbiA9IF9fbGVuIC0gX19oYWxmIC0gMTsKICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAo X19jb21wKF9fdmFsLCAqX19taWRkbGUpKQogICAgICAgICAgX19sZW4gPSBfX2hhbGY7CiAgICAg ICAgZWxzZSB7CiAgICAgICAgICBfX2xlZnQgPSBsb3dlcl9ib3VuZChfX2ZpcnN0LCBfX21pZGRs ZSwgX192YWwsIF9fY29tcCk7CiAgICAgICAgICBhZHZhbmNlKF9fZmlyc3QsIF9fbGVuKTsKICAg ICAgICAgIF9fcmlnaHQgPSB1cHBlcl9ib3VuZCgrK19fbWlkZGxlLCBfX2ZpcnN0LCBfX3ZhbCwg X19jb21wKTsKICAgICAgICAgIHJldHVybiBwYWlyPF9Gb3J3YXJkSXRlciwgX0ZvcndhcmRJdGVy PihfX2xlZnQsIF9fcmlnaHQpOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gcGFpcjxf Rm9yd2FyZEl0ZXIsIF9Gb3J3YXJkSXRlcj4oX19maXJzdCwgX19maXJzdCk7CiAgICB9CiMgMzA1 MiAiL3Vzci9jeWdudXMvYmluLy4uL2luY2x1ZGUvYysrLzMuMS4xL2JpdHMvc3RsX2FsZ28uaCIg MwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1RwPgogICAgYm9v bAogICAgYmluYXJ5X3NlYXJjaChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9f bGFzdCwKICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3ZhbCkKICAgIHsKCgogICAgIAog ICAgIAoKICAgICAKCiAgICAgIF9Gb3J3YXJkSXRlciBfX2kgPSBsb3dlcl9ib3VuZChfX2ZpcnN0 LCBfX2xhc3QsIF9fdmFsKTsKICAgICAgcmV0dXJuIF9faSAhPSBfX2xhc3QgJiYgIShfX3ZhbCA8 ICpfX2kpOwogICAgfQojIDMwODMgIi91c3IvY3lnbnVzL2Jpbi8uLi9pbmNsdWRlL2MrKy8zLjEu MS9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5 cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBib29sCiAgICBiaW5hcnlfc2VhcmNo KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAg ICAgICBjb25zdCBfVHAmIF9fdmFsLCBfQ29tcGFyZSBfX2NvbXApCiAgICB7CgogICAgIAogICAg IAoKICAgICAKCgogICAgICBfRm9yd2FyZEl0ZXIgX19pID0gbG93ZXJfYm91bmQoX19maXJzdCwg X19sYXN0LCBfX3ZhbCwgX19jb21wKTsKICAgICAgcmV0dXJuIF9faSAhPSBfX2xhc3QgJiYgIV9f Y29tcChfX3ZhbCwgKl9faSk7CiAgICB9CiMgMzExNSAiL3Vzci9jeWdudXMvYmluLy4uL2luY2x1 ZGUvYysrLzMuMS4xL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1 dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJdGVyMiwgdHlwZW5hbWUgX091dHB1dEl0ZXI+CiAgICBf T3V0cHV0SXRlcgogICAgbWVyZ2UoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9f bGFzdDEsCiAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0 MiwKICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0KQogICAgewoKICAgICAKICAgICAKICAg ICAKCiAgICAgCgoKICAgICAKCgogICAgICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBf X2ZpcnN0MiAhPSBfX2xhc3QyKSB7CiAgICAgICAgaWYgKCpfX2ZpcnN0MiA8ICpfX2ZpcnN0MSkg ewogICAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QyOwogICAgICAgICAgKytfX2ZpcnN0MjsK ICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAqX19yZXN1bHQgPSAqX19maXJzdDE7 CiAgICAgICAgICArK19fZmlyc3QxOwogICAgICAgIH0KICAgICAgICArK19fcmVzdWx0OwogICAg ICB9CiAgICAgIHJldHVybiBjb3B5KF9fZmlyc3QyLCBfX2xhc3QyLCBjb3B5KF9fZmlyc3QxLCBf X2xhc3QxLCBfX3Jlc3VsdCkpOwogICAgfQojIDMxNjYgIi91c3IvY3lnbnVzL2Jpbi8uLi9pbmNs dWRlL2MrKy8zLjEuMS9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5w dXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0SXRlcjIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyLAogICAg ICAgICAgIHR5cGVuYW1lIF9Db21wYXJlPgogICAgX091dHB1dEl0ZXIKICAgIG1lcmdlKF9JbnB1 dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgX0lucHV0SXRl cjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICBfT3V0cHV0SXRlciBf X3Jlc3VsdCwgX0NvbXBhcmUgX19jb21wKQogICAgewoKICAgICAKICAgICAKICAgICAKCgogICAg IAoKICAgICAKCgoKICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIg IT0gX19sYXN0MikgewogICAgICAgIGlmIChfX2NvbXAoKl9fZmlyc3QyLCAqX19maXJzdDEpKSB7 CiAgICAgICAgICAqX19yZXN1bHQgPSAqX19maXJzdDI7CiAgICAgICAgICArK19fZmlyc3QyOwog ICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsK ICAgICAgICAgICsrX19maXJzdDE7CiAgICAgICAgfQogICAgICAgICsrX19yZXN1bHQ7CiAgICAg IH0KICAgICAgcmV0dXJuIGNvcHkoX19maXJzdDIsIF9fbGFzdDIsIGNvcHkoX19maXJzdDEsIF9f bGFzdDEsIF9fcmVzdWx0KSk7CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGly ZWN0aW9uYWxJdGVyLCB0eXBlbmFtZSBfRGlzdGFuY2U+CiAgICB2b2lkCiAgICBfX21lcmdlX3dp dGhvdXRfYnVmZmVyKF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAg ICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19taWRkbGUsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgIF9EaXN0YW5jZSBfX2xlbjEsIF9EaXN0YW5jZSBfX2xlbjIpCiAgICB7CiAgICAgIGlm IChfX2xlbjEgPT0gMCB8fCBfX2xlbjIgPT0gMCkKICAgICAgICByZXR1cm47CiAgICAgIGlmIChf X2xlbjEgKyBfX2xlbjIgPT0gMikgewogICAgICAgIGlmICgqX19taWRkbGUgPCAqX19maXJzdCkK ICAgICAgICAgICAgICBpdGVyX3N3YXAoX19maXJzdCwgX19taWRkbGUpOwogICAgICAgIHJldHVy bjsKICAgICAgfQogICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdF9jdXQgPSBfX2ZpcnN0 OwogICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19zZWNvbmRfY3V0ID0gX19taWRkbGU7CiAgICAg IF9EaXN0YW5jZSBfX2xlbjExID0gMDsKICAgICAgX0Rpc3RhbmNlIF9fbGVuMjIgPSAwOwogICAg ICBpZiAoX19sZW4xID4gX19sZW4yKSB7CiAgICAgICAgX19sZW4xMSA9IF9fbGVuMSAvIDI7CiAg ICAgICAgYWR2YW5jZShfX2ZpcnN0X2N1dCwgX19sZW4xMSk7CiAgICAgICAgX19zZWNvbmRfY3V0 ID0gbG93ZXJfYm91bmQoX19taWRkbGUsIF9fbGFzdCwgKl9fZmlyc3RfY3V0KTsKICAgICAgICBf X2xlbjIyID0gZGlzdGFuY2UoX19taWRkbGUsIF9fc2Vjb25kX2N1dCk7CiAgICAgIH0KICAgICAg ZWxzZSB7CiAgICAgICAgX19sZW4yMiA9IF9fbGVuMiAvIDI7CiAgICAgICAgYWR2YW5jZShfX3Nl Y29uZF9jdXQsIF9fbGVuMjIpOwogICAgICAgIF9fZmlyc3RfY3V0ID0gdXBwZXJfYm91bmQoX19m aXJzdCwgX19taWRkbGUsICpfX3NlY29uZF9jdXQpOwogICAgICAgIF9fbGVuMTEgPSBkaXN0YW5j ZShfX2ZpcnN0LCBfX2ZpcnN0X2N1dCk7CiAgICAgIH0KICAgICAgcm90YXRlKF9fZmlyc3RfY3V0 LCBfX21pZGRsZSwgX19zZWNvbmRfY3V0KTsKICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbmV3 X21pZGRsZSA9IF9fZmlyc3RfY3V0OwogICAgICBhZHZhbmNlKF9fbmV3X21pZGRsZSwgZGlzdGFu Y2UoX19taWRkbGUsIF9fc2Vjb25kX2N1dCkpOwogICAgICBfX21lcmdlX3dpdGhvdXRfYnVmZmVy KF9fZmlyc3QsIF9fZmlyc3RfY3V0LCBfX25ld19taWRkbGUsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgX19sZW4xMSwgX19sZW4yMik7CiAgICAgIF9fbWVyZ2Vfd2l0aG91dF9idWZmZXIo X19uZXdfbWlkZGxlLCBfX3NlY29uZF9jdXQsIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBfX2xlbjEgLSBfX2xlbjExLCBfX2xlbjIgLSBfX2xlbjIyKTsKICAgIH0KCgoKCgoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIsIHR5cGVuYW1lIF9EaXN0YW5j ZSwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICB2b2lkCiAgICBfX21lcmdlX3dpdGhvdXRfYnVmZmVy KF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICBf QmlkaXJlY3Rpb25hbEl0ZXIgX19taWRkbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9C aWRpcmVjdGlvbmFsSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9EaXN0 YW5jZSBfX2xlbjEsIF9EaXN0YW5jZSBfX2xlbjIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg IF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgaWYgKF9fbGVuMSA9PSAwIHx8IF9fbGVuMiA9 PSAwKQogICAgICAgIHJldHVybjsKICAgICAgaWYgKF9fbGVuMSArIF9fbGVuMiA9PSAyKSB7CiAg ICAgICAgaWYgKF9fY29tcCgqX19taWRkbGUsICpfX2ZpcnN0KSkKICAgICAgICAgICAgICBpdGVy X3N3YXAoX19maXJzdCwgX19taWRkbGUpOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBf QmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdF9jdXQgPSBfX2ZpcnN0OwogICAgICBfQmlkaXJlY3Rp b25hbEl0ZXIgX19zZWNvbmRfY3V0ID0gX19taWRkbGU7CiAgICAgIF9EaXN0YW5jZSBfX2xlbjEx ID0gMDsKICAgICAgX0Rpc3RhbmNlIF9fbGVuMjIgPSAwOwogICAgICBpZiAoX19sZW4xID4gX19s ZW4yKSB7CiAgICAgICAgX19sZW4xMSA9IF9fbGVuMSAvIDI7CiAgICAgICAgYWR2YW5jZShfX2Zp cnN0X2N1dCwgX19sZW4xMSk7CiAgICAgICAgX19zZWNvbmRfY3V0ID0gbG93ZXJfYm91bmQoX19t aWRkbGUsIF9fbGFzdCwgKl9fZmlyc3RfY3V0LCBfX2NvbXApOwogICAgICAgIF9fbGVuMjIgPSBk aXN0YW5jZShfX21pZGRsZSwgX19zZWNvbmRfY3V0KTsKICAgICAgfQogICAgICBlbHNlIHsKICAg ICAgICBfX2xlbjIyID0gX19sZW4yIC8gMjsKICAgICAgICBhZHZhbmNlKF9fc2Vjb25kX2N1dCwg X19sZW4yMik7CiAgICAgICAgX19maXJzdF9jdXQgPSB1cHBlcl9ib3VuZChfX2ZpcnN0LCBfX21p ZGRsZSwgKl9fc2Vjb25kX2N1dCwgX19jb21wKTsKICAgICAgICBfX2xlbjExID0gZGlzdGFuY2Uo X19maXJzdCwgX19maXJzdF9jdXQpOwogICAgICB9CiAgICAgIHJvdGF0ZShfX2ZpcnN0X2N1dCwg X19taWRkbGUsIF9fc2Vjb25kX2N1dCk7CiAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX25ld19t aWRkbGUgPSBfX2ZpcnN0X2N1dDsKICAgICAgYWR2YW5jZShfX25ld19taWRkbGUsIGRpc3RhbmNl KF9fbWlkZGxlLCBfX3NlY29uZF9jdXQpKTsKICAgICAgX19tZXJnZV93aXRob3V0X2J1ZmZlcihf X2ZpcnN0LCBfX2ZpcnN0X2N1dCwgX19uZXdfbWlkZGxlLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgIF9fbGVuMTEsIF9fbGVuMjIsIF9fY29tcCk7CiAgICAgIF9fbWVyZ2Vfd2l0aG91dF9i dWZmZXIoX19uZXdfbWlkZGxlLCBfX3NlY29uZF9jdXQsIF9fbGFzdCwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBfX2xlbjEgLSBfX2xlbjExLCBfX2xlbjIgLSBfX2xlbjIyLCBfX2NvbXAp OwogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcjEsIHR5 cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcjIsCiAgICAgICAgICAgdHlwZW5hbWUgX0Rpc3RhbmNl PgogICAgX0JpZGlyZWN0aW9uYWxJdGVyMQogICAgX19yb3RhdGVfYWRhcHRpdmUoX0JpZGlyZWN0 aW9uYWxJdGVyMSBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJ dGVyMSBfX21pZGRsZSwKICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjEg X19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlIF9fbGVuMSwgX0Rpc3RhbmNl IF9fbGVuMiwKICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19idWZm ZXIsCiAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UgX19idWZmZXJfc2l6ZSkKICAgIHsK ICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX2J1ZmZlcl9lbmQ7CiAgICAgIGlmIChfX2xlbjEg PiBfX2xlbjIgJiYgX19sZW4yIDw9IF9fYnVmZmVyX3NpemUpIHsKICAgICAgICBfX2J1ZmZlcl9l bmQgPSBjb3B5KF9fbWlkZGxlLCBfX2xhc3QsIF9fYnVmZmVyKTsKICAgICAgICBjb3B5X2JhY2t3 YXJkKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QpOwogICAgICAgIHJldHVybiBjb3B5KF9fYnVm ZmVyLCBfX2J1ZmZlcl9lbmQsIF9fZmlyc3QpOwogICAgICB9CiAgICAgIGVsc2UgaWYgKF9fbGVu MSA8PSBfX2J1ZmZlcl9zaXplKSB7CiAgICAgICAgX19idWZmZXJfZW5kID0gY29weShfX2ZpcnN0 LCBfX21pZGRsZSwgX19idWZmZXIpOwogICAgICAgIGNvcHkoX19taWRkbGUsIF9fbGFzdCwgX19m aXJzdCk7CiAgICAgICAgcmV0dXJuIGNvcHlfYmFja3dhcmQoX19idWZmZXIsIF9fYnVmZmVyX2Vu ZCwgX19sYXN0KTsKICAgICAgfQogICAgICBlbHNlIHsKICAgICAgICByb3RhdGUoX19maXJzdCwg X19taWRkbGUsIF9fbGFzdCk7CiAgICAgICAgYWR2YW5jZShfX2ZpcnN0LCBkaXN0YW5jZShfX21p ZGRsZSwgX19sYXN0KSk7CiAgICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICAgIH0KICAgIH0KCgoK CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIxLCB0eXBlbmFtZSBfQmlk aXJlY3Rpb25hbEl0ZXIyLAogICAgICAgICAgIHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcjM+ CiAgICBfQmlkaXJlY3Rpb25hbEl0ZXIzCiAgICBfX21lcmdlX2JhY2t3YXJkKF9CaWRpcmVjdGlv bmFsSXRlcjEgX19maXJzdDEsIF9CaWRpcmVjdGlvbmFsSXRlcjEgX19sYXN0MSwKICAgICAgICAg ICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX2ZpcnN0MiwgX0JpZGlyZWN0aW9uYWxJ dGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIzIF9f cmVzdWx0KQogICAgewogICAgICBpZiAoX19maXJzdDEgPT0gX19sYXN0MSkKICAgICAgICByZXR1 cm4gY29weV9iYWNrd2FyZChfX2ZpcnN0MiwgX19sYXN0MiwgX19yZXN1bHQpOwogICAgICBpZiAo X19maXJzdDIgPT0gX19sYXN0MikKICAgICAgICByZXR1cm4gY29weV9iYWNrd2FyZChfX2ZpcnN0 MSwgX19sYXN0MSwgX19yZXN1bHQpOwogICAgICAtLV9fbGFzdDE7CiAgICAgIC0tX19sYXN0MjsK ICAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICBpZiAoKl9fbGFzdDIgPCAqX19sYXN0MSkgewog ICAgICAgICAgKi0tX19yZXN1bHQgPSAqX19sYXN0MTsKICAgICAgICAgIGlmIChfX2ZpcnN0MSA9 PSBfX2xhc3QxKQogICAgICAgICAgICByZXR1cm4gY29weV9iYWNrd2FyZChfX2ZpcnN0MiwgKytf X2xhc3QyLCBfX3Jlc3VsdCk7CiAgICAgICAgICAtLV9fbGFzdDE7CiAgICAgICAgfQogICAgICAg IGVsc2UgewogICAgICAgICAgKi0tX19yZXN1bHQgPSAqX19sYXN0MjsKICAgICAgICAgIGlmIChf X2ZpcnN0MiA9PSBfX2xhc3QyKQogICAgICAgICAgICByZXR1cm4gY29weV9iYWNrd2FyZChfX2Zp cnN0MSwgKytfX2xhc3QxLCBfX3Jlc3VsdCk7CiAgICAgICAgICAtLV9fbGFzdDI7CiAgICAgICAg fQogICAgICB9CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJ dGVyMSwgdHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyMiwKICAgICAgICAgICB0eXBlbmFtZSBf QmlkaXJlY3Rpb25hbEl0ZXIzLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIF9CaWRpcmVjdGlvbmFs SXRlcjMKICAgIF9fbWVyZ2VfYmFja3dhcmQoX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2ZpcnN0MSwg X0JpZGlyZWN0aW9uYWxJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICBfQmlkaXJl Y3Rpb25hbEl0ZXIyIF9fZmlyc3QyLCBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fbGFzdDIsCiAgICAg ICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjMgX19yZXN1bHQsCiAgICAgICAgICAg ICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgaWYgKF9fZmlyc3QxID09IF9f bGFzdDEpCiAgICAgICAgcmV0dXJuIGNvcHlfYmFja3dhcmQoX19maXJzdDIsIF9fbGFzdDIsIF9f cmVzdWx0KTsKICAgICAgaWYgKF9fZmlyc3QyID09IF9fbGFzdDIpCiAgICAgICAgcmV0dXJuIGNv cHlfYmFja3dhcmQoX19maXJzdDEsIF9fbGFzdDEsIF9fcmVzdWx0KTsKICAgICAgLS1fX2xhc3Qx OwogICAgICAtLV9fbGFzdDI7CiAgICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgaWYgKF9fY29t cCgqX19sYXN0MiwgKl9fbGFzdDEpKSB7CiAgICAgICAgICAqLS1fX3Jlc3VsdCA9ICpfX2xhc3Qx OwogICAgICAgICAgaWYgKF9fZmlyc3QxID09IF9fbGFzdDEpCiAgICAgICAgICAgIHJldHVybiBj b3B5X2JhY2t3YXJkKF9fZmlyc3QyLCArK19fbGFzdDIsIF9fcmVzdWx0KTsKICAgICAgICAgIC0t X19sYXN0MTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAqLS1fX3Jlc3VsdCA9 ICpfX2xhc3QyOwogICAgICAgICAgaWYgKF9fZmlyc3QyID09IF9fbGFzdDIpCiAgICAgICAgICAg IHJldHVybiBjb3B5X2JhY2t3YXJkKF9fZmlyc3QxLCArK19fbGFzdDEsIF9fcmVzdWx0KTsKICAg ICAgICAgIC0tX19sYXN0MjsKICAgICAgICB9CiAgICAgIH0KICAgIH0KCgoKCgoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIsIHR5cGVuYW1lIF9EaXN0YW5jZSwgdHlwZW5h bWUgX1BvaW50ZXI+CiAgICB2b2lkCiAgICBfX21lcmdlX2FkYXB0aXZlKF9CaWRpcmVjdGlvbmFs SXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19t aWRkbGUsCiAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QsCiAg ICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSBfX2xlbjEsIF9EaXN0YW5jZSBfX2xlbjIsCiAg ICAgICAgICAgICAgICAgICAgIF9Qb2ludGVyIF9fYnVmZmVyLCBfRGlzdGFuY2UgX19idWZmZXJf c2l6ZSkKICAgIHsKICAgICAgICAgIGlmIChfX2xlbjEgPD0gX19sZW4yICYmIF9fbGVuMSA8PSBf X2J1ZmZlcl9zaXplKSB7CiAgICAgICAgICAgIF9Qb2ludGVyIF9fYnVmZmVyX2VuZCA9IGNvcHko X19maXJzdCwgX19taWRkbGUsIF9fYnVmZmVyKTsKICAgICAgICAgICAgbWVyZ2UoX19idWZmZXIs IF9fYnVmZmVyX2VuZCwgX19taWRkbGUsIF9fbGFzdCwgX19maXJzdCk7CiAgICAgICAgICB9CiAg ICAgICAgICBlbHNlIGlmIChfX2xlbjIgPD0gX19idWZmZXJfc2l6ZSkgewogICAgICAgICAgICBf UG9pbnRlciBfX2J1ZmZlcl9lbmQgPSBjb3B5KF9fbWlkZGxlLCBfX2xhc3QsIF9fYnVmZmVyKTsK ICAgICAgICAgICAgX19tZXJnZV9iYWNrd2FyZChfX2ZpcnN0LCBfX21pZGRsZSwgX19idWZmZXIs IF9fYnVmZmVyX2VuZCwgX19sYXN0KTsKICAgICAgICAgIH0KICAgICAgICAgIGVsc2UgewogICAg ICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdF9jdXQgPSBfX2ZpcnN0OwogICAgICAg ICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19zZWNvbmRfY3V0ID0gX19taWRkbGU7CiAgICAgICAg ICAgIF9EaXN0YW5jZSBfX2xlbjExID0gMDsKICAgICAgICAgICAgX0Rpc3RhbmNlIF9fbGVuMjIg PSAwOwogICAgICAgICAgICBpZiAoX19sZW4xID4gX19sZW4yKSB7CiAgICAgICAgICAgICAgICAg IF9fbGVuMTEgPSBfX2xlbjEgLyAyOwogICAgICAgICAgICAgICAgICBhZHZhbmNlKF9fZmlyc3Rf Y3V0LCBfX2xlbjExKTsKICAgICAgICAgICAgICAgICAgX19zZWNvbmRfY3V0ID0gbG93ZXJfYm91 bmQoX19taWRkbGUsIF9fbGFzdCwgKl9fZmlyc3RfY3V0KTsKICAgICAgICAgICAgICAgICAgX19s ZW4yMiA9IGRpc3RhbmNlKF9fbWlkZGxlLCBfX3NlY29uZF9jdXQpOwogICAgICAgICAgICB9CiAg ICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICBfX2xlbjIyID0gX19sZW4yIC8gMjsK ICAgICAgICAgICAgICAgICAgYWR2YW5jZShfX3NlY29uZF9jdXQsIF9fbGVuMjIpOwogICAgICAg ICAgICAgICAgICBfX2ZpcnN0X2N1dCA9IHVwcGVyX2JvdW5kKF9fZmlyc3QsIF9fbWlkZGxlLCAq X19zZWNvbmRfY3V0KTsKICAgICAgICAgICAgICAgICAgX19sZW4xMSA9IGRpc3RhbmNlKF9fZmly c3QsIF9fZmlyc3RfY3V0KTsKICAgICAgICAgICAgfQogICAgICAgICAgICBfQmlkaXJlY3Rpb25h bEl0ZXIgX19uZXdfbWlkZGxlID0KICAgICAgICAgICAgICAgICAgX19yb3RhdGVfYWRhcHRpdmUo X19maXJzdF9jdXQsIF9fbWlkZGxlLCBfX3NlY29uZF9jdXQsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIF9fbGVuMSAtIF9fbGVuMTEsIF9fbGVuMjIsIF9fYnVmZmVyLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2J1ZmZlcl9zaXplKTsKICAgICAgICAg ICAgX19tZXJnZV9hZGFwdGl2ZShfX2ZpcnN0LCBfX2ZpcnN0X2N1dCwgX19uZXdfbWlkZGxlLCBf X2xlbjExLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGVuMjIsIF9fYnVmZmVyLCBf X2J1ZmZlcl9zaXplKTsKICAgICAgICAgICAgX19tZXJnZV9hZGFwdGl2ZShfX25ld19taWRkbGUs IF9fc2Vjb25kX2N1dCwgX19sYXN0LCBfX2xlbjEgLSBfX2xlbjExLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgIF9fbGVuMiAtIF9fbGVuMjIsIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplKTsK ICAgICAgICAgIH0KICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25h bEl0ZXIsIHR5cGVuYW1lIF9EaXN0YW5jZSwgdHlwZW5hbWUgX1BvaW50ZXIsCiAgICAgICAgICAg dHlwZW5hbWUgX0NvbXBhcmU+CiAgICB2b2lkCiAgICBfX21lcmdlX2FkYXB0aXZlKF9CaWRpcmVj dGlvbmFsSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0 ZXIgX19taWRkbGUsCiAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xh c3QsCiAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSBfX2xlbjEsIF9EaXN0YW5jZSBfX2xl bjIsCiAgICAgICAgICAgICAgICAgICAgIF9Qb2ludGVyIF9fYnVmZmVyLCBfRGlzdGFuY2UgX19i dWZmZXJfc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQogICAgewog ICAgICAgICAgaWYgKF9fbGVuMSA8PSBfX2xlbjIgJiYgX19sZW4xIDw9IF9fYnVmZmVyX3NpemUp IHsKICAgICAgICAgICAgX1BvaW50ZXIgX19idWZmZXJfZW5kID0gY29weShfX2ZpcnN0LCBfX21p ZGRsZSwgX19idWZmZXIpOwogICAgICAgICAgICBtZXJnZShfX2J1ZmZlciwgX19idWZmZXJfZW5k LCBfX21pZGRsZSwgX19sYXN0LCBfX2ZpcnN0LCBfX2NvbXApOwogICAgICAgICAgfQogICAgICAg ICAgZWxzZSBpZiAoX19sZW4yIDw9IF9fYnVmZmVyX3NpemUpIHsKICAgICAgICAgICAgX1BvaW50 ZXIgX19idWZmZXJfZW5kID0gY29weShfX21pZGRsZSwgX19sYXN0LCBfX2J1ZmZlcik7CiAgICAg ICAgICAgIF9fbWVyZ2VfYmFja3dhcmQoX19maXJzdCwgX19taWRkbGUsIF9fYnVmZmVyLCBfX2J1 ZmZlcl9lbmQsIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgX19jb21wKTsKICAgICAgICAgIH0KICAgICAgICAgIGVsc2UgewogICAgICAgICAgICBf QmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdF9jdXQgPSBfX2ZpcnN0OwogICAgICAgICAgICBfQmlk aXJlY3Rpb25hbEl0ZXIgX19zZWNvbmRfY3V0ID0gX19taWRkbGU7CiAgICAgICAgICAgIF9EaXN0 YW5jZSBfX2xlbjExID0gMDsKICAgICAgICAgICAgX0Rpc3RhbmNlIF9fbGVuMjIgPSAwOwogICAg ICAgICAgICBpZiAoX19sZW4xID4gX19sZW4yKSB7CiAgICAgICAgICAgICAgICAgIF9fbGVuMTEg PSBfX2xlbjEgLyAyOwogICAgICAgICAgICAgICAgICBhZHZhbmNlKF9fZmlyc3RfY3V0LCBfX2xl bjExKTsKICAgICAgICAgICAgICAgICAgX19zZWNvbmRfY3V0ID0gbG93ZXJfYm91bmQoX19taWRk bGUsIF9fbGFzdCwgKl9fZmlyc3RfY3V0LCBfX2NvbXApOwogICAgICAgICAgICAgICAgICBfX2xl bjIyID0gZGlzdGFuY2UoX19taWRkbGUsIF9fc2Vjb25kX2N1dCk7CiAgICAgICAgICAgIH0KICAg ICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgIF9fbGVuMjIgPSBfX2xlbjIgLyAyOwog ICAgICAgICAgICAgICAgICBhZHZhbmNlKF9fc2Vjb25kX2N1dCwgX19sZW4yMik7CiAgICAgICAg ICAgICAgICAgIF9fZmlyc3RfY3V0ID0gdXBwZXJfYm91bmQoX19maXJzdCwgX19taWRkbGUsICpf X3NlY29uZF9jdXQsIF9fY29tcCk7CiAgICAgICAgICAgICAgICAgIF9fbGVuMTEgPSBkaXN0YW5j ZShfX2ZpcnN0LCBfX2ZpcnN0X2N1dCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgX0JpZGly ZWN0aW9uYWxJdGVyIF9fbmV3X21pZGRsZSA9CiAgICAgICAgICAgICAgICAgIF9fcm90YXRlX2Fk YXB0aXZlKF9fZmlyc3RfY3V0LCBfX21pZGRsZSwgX19zZWNvbmRfY3V0LAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBfX2xlbjEgLSBfX2xlbjExLCBfX2xlbjIyLCBfX2J1ZmZl ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19idWZmZXJfc2l6ZSk7CiAg ICAgICAgICAgIF9fbWVyZ2VfYWRhcHRpdmUoX19maXJzdCwgX19maXJzdF9jdXQsIF9fbmV3X21p ZGRsZSwgX19sZW4xMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xlbjIyLCBfX2J1 ZmZlciwgX19idWZmZXJfc2l6ZSwgX19jb21wKTsKICAgICAgICAgICAgX19tZXJnZV9hZGFwdGl2 ZShfX25ld19taWRkbGUsIF9fc2Vjb25kX2N1dCwgX19sYXN0LCBfX2xlbjEgLSBfX2xlbjExLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGVuMiAtIF9fbGVuMjIsIF9fYnVmZmVyLCBf X2J1ZmZlcl9zaXplLCBfX2NvbXApOwogICAgICAgICAgfQogICAgfQojIDM1MDggIi91c3IvY3ln bnVzL2Jpbi8uLi9pbmNsdWRlL2MrKy8zLjEuMS9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXI+CiAgICB2b2lkCiAgICBpbnBsYWNlX21lcmdl KF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rp b25hbEl0ZXIgX19taWRkbGUsCiAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBf X2xhc3QpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9CaWRp cmVjdGlvbmFsSXRlcj46OnZhbHVlX3R5cGUKICAgICAgICAgIF9WYWx1ZVR5cGU7CiAgICAgIHR5 cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9CaWRpcmVjdGlvbmFsSXRlcj46OmRpZmZl cmVuY2VfdHlwZQogICAgICAgICAgX0Rpc3RhbmNlVHlwZTsKCgogICAgIAoKICAgICAKCiAgICAg IGlmIChfX2ZpcnN0ID09IF9fbWlkZGxlIHx8IF9fbWlkZGxlID09IF9fbGFzdCkKICAgICAgICBy ZXR1cm47CgogICAgICBfRGlzdGFuY2VUeXBlIF9fbGVuMSA9IGRpc3RhbmNlKF9fZmlyc3QsIF9f bWlkZGxlKTsKICAgICAgX0Rpc3RhbmNlVHlwZSBfX2xlbjIgPSBkaXN0YW5jZShfX21pZGRsZSwg X19sYXN0KTsKCiAgICAgIF9UZW1wb3JhcnlfYnVmZmVyPF9CaWRpcmVjdGlvbmFsSXRlciwgX1Zh bHVlVHlwZT4gX19idWYoX19maXJzdCwgX19sYXN0KTsKICAgICAgaWYgKF9fYnVmLmJlZ2luKCkg PT0gMCkKICAgICAgICBfX21lcmdlX3dpdGhvdXRfYnVmZmVyKF9fZmlyc3QsIF9fbWlkZGxlLCBf X2xhc3QsIF9fbGVuMSwgX19sZW4yKTsKICAgICAgZWxzZQogICAgICAgIF9fbWVyZ2VfYWRhcHRp dmUoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwgX19sZW4xLCBfX2xlbjIsCiAgICAgICAgICAg ICAgICAgICAgICAgICBfX2J1Zi5iZWdpbigpLCBfRGlzdGFuY2VUeXBlKF9fYnVmLnNpemUoKSkp OwogICAgfQojIDM1NTkgIi91c3IvY3lnbnVzL2Jpbi8uLi9pbmNsdWRlL2MrKy8zLjEuMS9iaXRz L3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIsIHR5 cGVuYW1lIF9Db21wYXJlPgogICAgdm9pZAogICAgaW5wbGFjZV9tZXJnZShfQmlkaXJlY3Rpb25h bEl0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbWlk ZGxlLAogICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0LAogICAgICAg ICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUg aXRlcmF0b3JfdHJhaXRzPF9CaWRpcmVjdGlvbmFsSXRlcj46OnZhbHVlX3R5cGUKICAgICAgICAg IF9WYWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9CaWRp cmVjdGlvbmFsSXRlcj46OmRpZmZlcmVuY2VfdHlwZQogICAgICAgICAgX0Rpc3RhbmNlVHlwZTsK CgogICAgIAoKICAgICAKCgogICAgICBpZiAoX19maXJzdCA9PSBfX21pZGRsZSB8fCBfX21pZGRs ZSA9PSBfX2xhc3QpCiAgICAgICAgcmV0dXJuOwoKICAgICAgX0Rpc3RhbmNlVHlwZSBfX2xlbjEg PSBkaXN0YW5jZShfX2ZpcnN0LCBfX21pZGRsZSk7CiAgICAgIF9EaXN0YW5jZVR5cGUgX19sZW4y ID0gZGlzdGFuY2UoX19taWRkbGUsIF9fbGFzdCk7CgogICAgICBfVGVtcG9yYXJ5X2J1ZmZlcjxf QmlkaXJlY3Rpb25hbEl0ZXIsIF9WYWx1ZVR5cGU+IF9fYnVmKF9fZmlyc3QsIF9fbGFzdCk7CiAg ICAgIGlmIChfX2J1Zi5iZWdpbigpID09IDApCiAgICAgICAgX19tZXJnZV93aXRob3V0X2J1ZmZl cihfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0LCBfX2xlbjEsIF9fbGVuMiwgX19jb21wKTsKICAg ICAgZWxzZQogICAgICAgIF9fbWVyZ2VfYWRhcHRpdmUoX19maXJzdCwgX19taWRkbGUsIF9fbGFz dCwgX19sZW4xLCBfX2xlbjIsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2J1Zi5iZWdpbigp LCBfRGlzdGFuY2VUeXBlKF9fYnVmLnNpemUoKSksCiAgICAgICAgICAgICAgICAgICAgICAgICBf X2NvbXApOwogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBl bmFtZSBfSW5wdXRJdGVyMj4KICAgIGJvb2wKICAgIGluY2x1ZGVzKF9JbnB1dEl0ZXIxIF9fZmly c3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJz dDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIpCiAgICB7CgogICAgIAogICAgIAogICAgIAoKCiAgICAg CgoKICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0 MikKICAgICAgICBpZiAoKl9fZmlyc3QyIDwgKl9fZmlyc3QxKQogICAgICAgICAgcmV0dXJuIGZh bHNlOwogICAgICAgIGVsc2UgaWYoKl9fZmlyc3QxIDwgKl9fZmlyc3QyKQogICAgICAgICAgKytf X2ZpcnN0MTsKICAgICAgICBlbHNlCiAgICAgICAgICArK19fZmlyc3QxLCArK19fZmlyc3QyOwoK ICAgICAgcmV0dXJuIF9fZmlyc3QyID09IF9fbGFzdDI7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVu YW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJdGVyMiwgdHlwZW5hbWUgX0NvbXBhcmU+ CiAgICBib29sCiAgICBpbmNsdWRlcyhfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEg X19sYXN0MSwKICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBf X2xhc3QyLCBfQ29tcGFyZSBfX2NvbXApCiAgICB7CgogICAgIAogICAgIAogICAgIAoKCiAgICAg CgoKCiAgICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFz dDIpCiAgICAgICAgaWYgKF9fY29tcCgqX19maXJzdDIsICpfX2ZpcnN0MSkpCiAgICAgICAgICBy ZXR1cm4gZmFsc2U7CiAgICAgICAgZWxzZSBpZihfX2NvbXAoKl9fZmlyc3QxLCAqX19maXJzdDIp KQogICAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgICBlbHNlCiAgICAgICAgICArK19fZmlyc3Qx LCArK19fZmlyc3QyOwoKICAgICAgcmV0dXJuIF9fZmlyc3QyID09IF9fbGFzdDI7CiAgICB9Cgog IHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJdGVyMiwgdHlw ZW5hbWUgX091dHB1dEl0ZXI+CiAgICBfT3V0cHV0SXRlcgogICAgc2V0X3VuaW9uKF9JbnB1dEl0 ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgIF9JbnB1dEl0 ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgIF9PdXRwdXRJ dGVyIF9fcmVzdWx0KQogICAgewoKICAgICAKICAgICAKICAgICAKCiAgICAgCgoKICAgICAKCgog ICAgICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKSB7 CiAgICAgICAgaWYgKCpfX2ZpcnN0MSA8ICpfX2ZpcnN0MikgewogICAgICAgICAgKl9fcmVzdWx0 ID0gKl9fZmlyc3QxOwogICAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgICB9CiAgICAgICAgZWxz ZSBpZiAoKl9fZmlyc3QyIDwgKl9fZmlyc3QxKSB7CiAgICAgICAgICAqX19yZXN1bHQgPSAqX19m aXJzdDI7CiAgICAgICAgICArK19fZmlyc3QyOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAg ICAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsKICAgICAgICAgICsrX19maXJzdDE7CiAgICAg ICAgICArK19fZmlyc3QyOwogICAgICAgIH0KICAgICAgICArK19fcmVzdWx0OwogICAgICB9CiAg ICAgIHJldHVybiBjb3B5KF9fZmlyc3QyLCBfX2xhc3QyLCBjb3B5KF9fZmlyc3QxLCBfX2xhc3Qx LCBfX3Jlc3VsdCkpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlw ZW5hbWUgX0lucHV0SXRlcjIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyLAogICAgICAgICAgIHR5cGVu YW1lIF9Db21wYXJlPgogICAgX091dHB1dEl0ZXIKICAgIHNldF91bmlvbihfSW5wdXRJdGVyMSBf X2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBf X2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICBfT3V0cHV0SXRlciBf X3Jlc3VsdCwgX0NvbXBhcmUgX19jb21wKQogICAgewoKICAgICAKICAgICAKICAgICAKCgogICAg IAoKICAgICAKCgoKICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIg IT0gX19sYXN0MikgewogICAgICAgIGlmIChfX2NvbXAoKl9fZmlyc3QxLCAqX19maXJzdDIpKSB7 CiAgICAgICAgICAqX19yZXN1bHQgPSAqX19maXJzdDE7CiAgICAgICAgICArK19fZmlyc3QxOwog ICAgICAgIH0KICAgICAgICBlbHNlIGlmIChfX2NvbXAoKl9fZmlyc3QyLCAqX19maXJzdDEpKSB7 CiAgICAgICAgICAqX19yZXN1bHQgPSAqX19maXJzdDI7CiAgICAgICAgICArK19fZmlyc3QyOwog ICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsK ICAgICAgICAgICsrX19maXJzdDE7CiAgICAgICAgICArK19fZmlyc3QyOwogICAgICAgIH0KICAg ICAgICArK19fcmVzdWx0OwogICAgICB9CiAgICAgIHJldHVybiBjb3B5KF9fZmlyc3QyLCBfX2xh c3QyLCBjb3B5KF9fZmlyc3QxLCBfX2xhc3QxLCBfX3Jlc3VsdCkpOwogICAgfQoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0SXRlcjIsIHR5cGVuYW1lIF9P dXRwdXRJdGVyPgogICAgX091dHB1dEl0ZXIKICAgIHNldF9pbnRlcnNlY3Rpb24oX0lucHV0SXRl cjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgIF9J bnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICAg ICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCkKICAgIHsKCiAgICAgCiAgICAgCiAgICAgCgogICAg IAoKCiAgICAgCgoKICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIg IT0gX19sYXN0MikKICAgICAgICBpZiAoKl9fZmlyc3QxIDwgKl9fZmlyc3QyKQogICAgICAgICAg KytfX2ZpcnN0MTsKICAgICAgICBlbHNlIGlmICgqX19maXJzdDIgPCAqX19maXJzdDEpCiAgICAg ICAgICArK19fZmlyc3QyOwogICAgICAgIGVsc2UgewogICAgICAgICAgKl9fcmVzdWx0ID0gKl9f Zmlyc3QxOwogICAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgICAgICsrX19maXJzdDI7CiAgICAg ICAgICArK19fcmVzdWx0OwogICAgICAgIH0KICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAgfQoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0SXRlcjIsIHR5 cGVuYW1lIF9PdXRwdXRJdGVyLAogICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlPgogICAgX091 dHB1dEl0ZXIKICAgIHNldF9pbnRlcnNlY3Rpb24oX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1 dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3Qy LCBfSW5wdXRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBf X3Jlc3VsdCwgX0NvbXBhcmUgX19jb21wKQogICAgewoKICAgICAKICAgICAKICAgICAKCgogICAg IAoKICAgICAKCgoKICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIg IT0gX19sYXN0MikKICAgICAgICBpZiAoX19jb21wKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkKICAg ICAgICAgICsrX19maXJzdDE7CiAgICAgICAgZWxzZSBpZiAoX19jb21wKCpfX2ZpcnN0MiwgKl9f Zmlyc3QxKSkKICAgICAgICAgICsrX19maXJzdDI7CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAq X19yZXN1bHQgPSAqX19maXJzdDE7CiAgICAgICAgICArK19fZmlyc3QxOwogICAgICAgICAgKytf X2ZpcnN0MjsKICAgICAgICAgICsrX19yZXN1bHQ7CiAgICAgICAgfQogICAgICByZXR1cm4gX19y ZXN1bHQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBf SW5wdXRJdGVyMiwgdHlwZW5hbWUgX091dHB1dEl0ZXI+CiAgICBfT3V0cHV0SXRlcgogICAgc2V0 X2RpZmZlcmVuY2UoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAg ICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0 MiwKICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0KQogICAgewoKICAgICAK ICAgICAKICAgICAKCiAgICAgCgoKICAgICAKCgogICAgICB3aGlsZSAoX19maXJzdDEgIT0gX19s YXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKQogICAgICAgIGlmICgqX19maXJzdDEgPCAqX19m aXJzdDIpIHsKICAgICAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsKICAgICAgICAgICsrX19m aXJzdDE7CiAgICAgICAgICArK19fcmVzdWx0OwogICAgICAgIH0KICAgICAgICBlbHNlIGlmICgq X19maXJzdDIgPCAqX19maXJzdDEpCiAgICAgICAgICArK19fZmlyc3QyOwogICAgICAgIGVsc2Ug ewogICAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgICAgICsrX19maXJzdDI7CiAgICAgICAgfQog ICAgICByZXR1cm4gY29weShfX2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQpOwogICAgfQoKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0SXRlcjIsIHR5cGVu YW1lIF9PdXRwdXRJdGVyLAogICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlPgogICAgX091dHB1 dEl0ZXIKICAgIHNldF9kaWZmZXJlbmNlKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVy MSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1 dEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwg X0NvbXBhcmUgX19jb21wKQogICAgewoKICAgICAKICAgICAKICAgICAKCgogICAgIAoKICAgICAK CgoKICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0 MikKICAgICAgICBpZiAoX19jb21wKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkgewogICAgICAgICAg Kl9fcmVzdWx0ID0gKl9fZmlyc3QxOwogICAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgICAgICsr X19yZXN1bHQ7CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYgKF9fY29tcCgqX19maXJzdDIsICpf X2ZpcnN0MSkpCiAgICAgICAgICArK19fZmlyc3QyOwogICAgICAgIGVsc2UgewogICAgICAgICAg KytfX2ZpcnN0MTsKICAgICAgICAgICsrX19maXJzdDI7CiAgICAgICAgfQogICAgICByZXR1cm4g Y29weShfX2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0SXRlcjIsIHR5cGVuYW1lIF9PdXRwdXRJ dGVyPgogICAgX091dHB1dEl0ZXIKICAgIHNldF9zeW1tZXRyaWNfZGlmZmVyZW5jZShfSW5wdXRJ dGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCkKICAgIHsKCiAgICAg CiAgICAgCiAgICAgCgogICAgIAoKCiAgICAgCgoKICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9f bGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikKICAgICAgICBpZiAoKl9fZmlyc3QxIDwgKl9f Zmlyc3QyKSB7CiAgICAgICAgICAqX19yZXN1bHQgPSAqX19maXJzdDE7CiAgICAgICAgICArK19f Zmlyc3QxOwogICAgICAgICAgKytfX3Jlc3VsdDsKICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAo Kl9fZmlyc3QyIDwgKl9fZmlyc3QxKSB7CiAgICAgICAgICAqX19yZXN1bHQgPSAqX19maXJzdDI7 CiAgICAgICAgICArK19fZmlyc3QyOwogICAgICAgICAgKytfX3Jlc3VsdDsKICAgICAgICB9CiAg ICAgICAgZWxzZSB7CiAgICAgICAgICArK19fZmlyc3QxOwogICAgICAgICAgKytfX2ZpcnN0MjsK ICAgICAgICB9CiAgICAgIHJldHVybiBjb3B5KF9fZmlyc3QyLCBfX2xhc3QyLCBjb3B5KF9fZmly c3QxLCBfX2xhc3QxLCBfX3Jlc3VsdCkpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5w dXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0SXRlcjIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyLAogICAg ICAgICAgIHR5cGVuYW1lIF9Db21wYXJlPgogICAgX091dHB1dEl0ZXIKICAgIHNldF9zeW1tZXRy aWNfZGlmZmVyZW5jZShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0 SXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBf X3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCiAg ICB7CgogICAgIAogICAgIAogICAgIAoKCiAgICAgCgogICAgIAoKCgogICAgICB3aGlsZSAoX19m aXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKQogICAgICAgIGlmIChfX2Nv bXAoKl9fZmlyc3QxLCAqX19maXJzdDIpKSB7CiAgICAgICAgICAqX19yZXN1bHQgPSAqX19maXJz dDE7CiAgICAgICAgICArK19fZmlyc3QxOwogICAgICAgICAgKytfX3Jlc3VsdDsKICAgICAgICB9 CiAgICAgICAgZWxzZSBpZiAoX19jb21wKCpfX2ZpcnN0MiwgKl9fZmlyc3QxKSkgewogICAgICAg ICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QyOwogICAgICAgICAgKytfX2ZpcnN0MjsKICAgICAgICAg ICsrX19yZXN1bHQ7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgKytfX2ZpcnN0 MTsKICAgICAgICAgICsrX19maXJzdDI7CiAgICAgICAgfQogICAgICByZXR1cm4gY29weShfX2Zp cnN0MiwgX19sYXN0MiwgY29weShfX2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQpKTsKICAgIH0K CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyPgogICAgX0ZvcndhcmRJdGVyCiAg ICBtYXhfZWxlbWVudChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCkK ICAgIHsKCiAgICAgCiAgICAgCgoKICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KSByZXR1cm4g X19maXJzdDsKICAgICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0ID0gX19maXJzdDsKICAgICAgd2hp bGUgKCsrX19maXJzdCAhPSBfX2xhc3QpCiAgICAgICAgaWYgKCpfX3Jlc3VsdCA8ICpfX2ZpcnN0 KQogICAgICAgICAgX19yZXN1bHQgPSBfX2ZpcnN0OwogICAgICByZXR1cm4gX19yZXN1bHQ7CiAg ICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX0NvbXBhcmU+ CiAgICBfRm9yd2FyZEl0ZXIKICAgIG1heF9lbGVtZW50KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBf Rm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQogICAg ewoKICAgICAKICAgICAKCgoKICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KSByZXR1cm4gX19m aXJzdDsKICAgICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0ID0gX19maXJzdDsKICAgICAgd2hpbGUg KCsrX19maXJzdCAhPSBfX2xhc3QpCiAgICAgICAgaWYgKF9fY29tcCgqX19yZXN1bHQsICpfX2Zp cnN0KSkgX19yZXN1bHQgPSBfX2ZpcnN0OwogICAgICByZXR1cm4gX19yZXN1bHQ7CiAgICB9Cgog IHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcj4KICAgIF9Gb3J3YXJkSXRlcgogICAgbWlu X2VsZW1lbnQoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QpCiAgICB7 CgogICAgIAogICAgIAoKCiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuIF9fZmly c3Q7CiAgICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCA9IF9fZmlyc3Q7CiAgICAgIHdoaWxlICgr K19fZmlyc3QgIT0gX19sYXN0KQogICAgICAgIGlmICgqX19maXJzdCA8ICpfX3Jlc3VsdCkKICAg ICAgICAgIF9fcmVzdWx0ID0gX19maXJzdDsKICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAgfQoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9Db21wYXJlPgogICAg X0ZvcndhcmRJdGVyCiAgICBtaW5fZWxlbWVudChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0Zvcndh cmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKICAgIHsKCiAg ICAgCiAgICAgCgoKCiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuIF9fZmlyc3Q7 CiAgICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCA9IF9fZmlyc3Q7CiAgICAgIHdoaWxlICgrK19f Zmlyc3QgIT0gX19sYXN0KQogICAgICAgIGlmIChfX2NvbXAoKl9fZmlyc3QsICpfX3Jlc3VsdCkp CiAgICAgICAgICBfX3Jlc3VsdCA9IF9fZmlyc3Q7CiAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAg IH0KCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyPgogICAgYm9vbAog ICAgbmV4dF9wZXJtdXRhdGlvbihfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwgX0JpZGlyZWN0 aW9uYWxJdGVyIF9fbGFzdCkKICAgIHsKCiAgICAgCiAgICAgCgoKICAgICAgaWYgKF9fZmlyc3Qg PT0gX19sYXN0KQogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgX0JpZGlyZWN0aW9uYWxJdGVy IF9faSA9IF9fZmlyc3Q7CiAgICAgICsrX19pOwogICAgICBpZiAoX19pID09IF9fbGFzdCkKICAg ICAgICByZXR1cm4gZmFsc2U7CiAgICAgIF9faSA9IF9fbGFzdDsKICAgICAgLS1fX2k7CgogICAg ICBmb3IoOzspIHsKICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19paSA9IF9faTsKICAgICAg ICAtLV9faTsKICAgICAgICBpZiAoKl9faSA8ICpfX2lpKSB7CiAgICAgICAgICBfQmlkaXJlY3Rp b25hbEl0ZXIgX19qID0gX19sYXN0OwogICAgICAgICAgd2hpbGUgKCEoKl9faSA8ICotLV9faikp CiAgICAgICAgICAgIHt9CiAgICAgICAgICBpdGVyX3N3YXAoX19pLCBfX2opOwogICAgICAgICAg cmV2ZXJzZShfX2lpLCBfX2xhc3QpOwogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQog ICAgICAgIGlmIChfX2kgPT0gX19maXJzdCkgewogICAgICAgICAgcmV2ZXJzZShfX2ZpcnN0LCBf X2xhc3QpOwogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgfQogICAgfQoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIsIHR5cGVuYW1lIF9Db21wYXJl PgogICAgYm9vbAogICAgbmV4dF9wZXJtdXRhdGlvbihfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJz dCwgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgX0NvbXBh cmUgX19jb21wKQogICAgewoKICAgICAKICAgICAKCgoKICAgICAgaWYgKF9fZmlyc3QgPT0gX19s YXN0KQogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9faSA9 IF9fZmlyc3Q7CiAgICAgICsrX19pOwogICAgICBpZiAoX19pID09IF9fbGFzdCkKICAgICAgICBy ZXR1cm4gZmFsc2U7CiAgICAgIF9faSA9IF9fbGFzdDsKICAgICAgLS1fX2k7CgogICAgICBmb3Io OzspIHsKICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19paSA9IF9faTsKICAgICAgICAtLV9f aTsKICAgICAgICBpZiAoX19jb21wKCpfX2ksICpfX2lpKSkgewogICAgICAgICAgX0JpZGlyZWN0 aW9uYWxJdGVyIF9faiA9IF9fbGFzdDsKICAgICAgICAgIHdoaWxlICghX19jb21wKCpfX2ksICot LV9faikpCiAgICAgICAgICAgIHt9CiAgICAgICAgICBpdGVyX3N3YXAoX19pLCBfX2opOwogICAg ICAgICAgcmV2ZXJzZShfX2lpLCBfX2xhc3QpOwogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg ICAgfQogICAgICAgIGlmIChfX2kgPT0gX19maXJzdCkgewogICAgICAgICAgcmV2ZXJzZShfX2Zp cnN0LCBfX2xhc3QpOwogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgfQog ICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXI+CiAgICBib29sCiAg ICBwcmV2X3Blcm11dGF0aW9uKF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LCBfQmlkaXJlY3Rp b25hbEl0ZXIgX19sYXN0KQogICAgewoKICAgICAKICAgICAKCgogICAgICBpZiAoX19maXJzdCA9 PSBfX2xhc3QpCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIg X19pID0gX19maXJzdDsKICAgICAgKytfX2k7CiAgICAgIGlmIChfX2kgPT0gX19sYXN0KQogICAg ICAgIHJldHVybiBmYWxzZTsKICAgICAgX19pID0gX19sYXN0OwogICAgICAtLV9faTsKCiAgICAg IGZvcig7OykgewogICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2lpID0gX19pOwogICAgICAg IC0tX19pOwogICAgICAgIGlmICgqX19paSA8ICpfX2kpIHsKICAgICAgICAgIF9CaWRpcmVjdGlv bmFsSXRlciBfX2ogPSBfX2xhc3Q7CiAgICAgICAgICB3aGlsZSAoISgqLS1fX2ogPCAqX19pKSkK ICAgICAgICAgICAge30KICAgICAgICAgIGl0ZXJfc3dhcChfX2ksIF9faik7CiAgICAgICAgICBy ZXZlcnNlKF9faWksIF9fbGFzdCk7CiAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CiAg ICAgICAgaWYgKF9faSA9PSBfX2ZpcnN0KSB7CiAgICAgICAgICByZXZlcnNlKF9fZmlyc3QsIF9f bGFzdCk7CiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICB9CiAgICB9Cgog IHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlciwgdHlwZW5hbWUgX0NvbXBhcmU+ CiAgICBib29sCiAgICBwcmV2X3Blcm11dGF0aW9uKF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0 LCBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICBfQ29tcGFy ZSBfX2NvbXApCiAgICB7CgogICAgIAogICAgIAoKCgogICAgICBpZiAoX19maXJzdCA9PSBfX2xh c3QpCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19pID0g X19maXJzdDsKICAgICAgKytfX2k7CiAgICAgIGlmIChfX2kgPT0gX19sYXN0KQogICAgICAgIHJl dHVybiBmYWxzZTsKICAgICAgX19pID0gX19sYXN0OwogICAgICAtLV9faTsKCiAgICAgIGZvcig7 OykgewogICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2lpID0gX19pOwogICAgICAgIC0tX19p OwogICAgICAgIGlmIChfX2NvbXAoKl9faWksICpfX2kpKSB7CiAgICAgICAgICBfQmlkaXJlY3Rp b25hbEl0ZXIgX19qID0gX19sYXN0OwogICAgICAgICAgd2hpbGUgKCFfX2NvbXAoKi0tX19qLCAq X19pKSkKICAgICAgICAgICAge30KICAgICAgICAgIGl0ZXJfc3dhcChfX2ksIF9faik7CiAgICAg ICAgICByZXZlcnNlKF9faWksIF9fbGFzdCk7CiAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAg ICB9CiAgICAgICAgaWYgKF9faSA9PSBfX2ZpcnN0KSB7CiAgICAgICAgICByZXZlcnNlKF9fZmly c3QsIF9fbGFzdCk7CiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICB9CiAg ICB9CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX0ZvcndhcmRJ dGVyPgogICAgX0lucHV0SXRlcgogICAgZmluZF9maXJzdF9vZihfSW5wdXRJdGVyIF9fZmlyc3Qx LCBfSW5wdXRJdGVyIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX2Zp cnN0MiwgX0ZvcndhcmRJdGVyIF9fbGFzdDIpCiAgICB7CgogICAgIAogICAgIAogICAgIAoKCgog ICAgICBmb3IgKCA7IF9fZmlyc3QxICE9IF9fbGFzdDE7ICsrX19maXJzdDEpCiAgICAgICAgZm9y IChfRm9yd2FyZEl0ZXIgX19pdGVyID0gX19maXJzdDI7IF9faXRlciAhPSBfX2xhc3QyOyArK19f aXRlcikKICAgICAgICAgIGlmICgqX19maXJzdDEgPT0gKl9faXRlcikKICAgICAgICAgICAgcmV0 dXJuIF9fZmlyc3QxOwogICAgICByZXR1cm4gX19sYXN0MTsKICAgIH0KCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfQmluYXJ5 UHJlZGljYXRlPgogICAgX0lucHV0SXRlcgogICAgZmluZF9maXJzdF9vZihfSW5wdXRJdGVyIF9f Zmlyc3QxLCBfSW5wdXRJdGVyIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRl ciBfX2ZpcnN0MiwgX0ZvcndhcmRJdGVyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgIF9CaW5h cnlQcmVkaWNhdGUgX19jb21wKQogICAgewoKICAgICAKICAgICAKICAgICAKCgogICAgIAoKCgog ICAgICBmb3IgKCA7IF9fZmlyc3QxICE9IF9fbGFzdDE7ICsrX19maXJzdDEpCiAgICAgICAgZm9y IChfRm9yd2FyZEl0ZXIgX19pdGVyID0gX19maXJzdDI7IF9faXRlciAhPSBfX2xhc3QyOyArK19f aXRlcikKICAgICAgICAgIGlmIChfX2NvbXAoKl9fZmlyc3QxLCAqX19pdGVyKSkKICAgICAgICAg ICAgcmV0dXJuIF9fZmlyc3QxOwogICAgICByZXR1cm4gX19sYXN0MTsKICAgIH0KIyA0MjAxICIv dXNyL2N5Z251cy9iaW4vLi4vaW5jbHVkZS9jKysvMy4xLjEvYml0cy9zdGxfYWxnby5oIiAzCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyMSwgdHlwZW5hbWUgX0ZvcndhcmRJdGVyMj4K ICAgIF9Gb3J3YXJkSXRlcjEKICAgIF9fZmluZF9lbmQoX0ZvcndhcmRJdGVyMSBfX2ZpcnN0MSwg X0ZvcndhcmRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIyIF9fZmly c3QyLCBfRm9yd2FyZEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgIGZvcndhcmRfaXRlcmF0 b3JfdGFnLCBmb3J3YXJkX2l0ZXJhdG9yX3RhZykKICAgIHsKICAgICAgaWYgKF9fZmlyc3QyID09 IF9fbGFzdDIpCiAgICAgICAgcmV0dXJuIF9fbGFzdDE7CiAgICAgIGVsc2UgewogICAgICAgIF9G b3J3YXJkSXRlcjEgX19yZXN1bHQgPSBfX2xhc3QxOwogICAgICAgIHdoaWxlICgxKSB7CiAgICAg ICAgICBfRm9yd2FyZEl0ZXIxIF9fbmV3X3Jlc3VsdAogICAgICAgICAgICA9IHNlYXJjaChfX2Zp cnN0MSwgX19sYXN0MSwgX19maXJzdDIsIF9fbGFzdDIpOwogICAgICAgICAgaWYgKF9fbmV3X3Jl c3VsdCA9PSBfX2xhc3QxKQogICAgICAgICAgICByZXR1cm4gX19yZXN1bHQ7CiAgICAgICAgICBl bHNlIHsKICAgICAgICAgICAgX19yZXN1bHQgPSBfX25ld19yZXN1bHQ7CiAgICAgICAgICAgIF9f Zmlyc3QxID0gX19uZXdfcmVzdWx0OwogICAgICAgICAgICArK19fZmlyc3QxOwogICAgICAgICAg fQogICAgICAgIH0KICAgICAgfQogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0 ZXIxLCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXIyLAogICAgICAgICAgIHR5cGVuYW1lIF9CaW5hcnlQ cmVkaWNhdGU+CiAgICBfRm9yd2FyZEl0ZXIxCiAgICBfX2ZpbmRfZW5kKF9Gb3J3YXJkSXRlcjEg X19maXJzdDEsIF9Gb3J3YXJkSXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgX0ZvcndhcmRJ dGVyMiBfX2ZpcnN0MiwgX0ZvcndhcmRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICBmb3J3 YXJkX2l0ZXJhdG9yX3RhZywgZm9yd2FyZF9pdGVyYXRvcl90YWcsCiAgICAgICAgICAgICAgIF9C aW5hcnlQcmVkaWNhdGUgX19jb21wKQogICAgewogICAgICBpZiAoX19maXJzdDIgPT0gX19sYXN0 MikKICAgICAgICByZXR1cm4gX19sYXN0MTsKICAgICAgZWxzZSB7CiAgICAgICAgX0ZvcndhcmRJ dGVyMSBfX3Jlc3VsdCA9IF9fbGFzdDE7CiAgICAgICAgd2hpbGUgKDEpIHsKICAgICAgICAgIF9G b3J3YXJkSXRlcjEgX19uZXdfcmVzdWx0CiAgICAgICAgICAgID0gc2VhcmNoKF9fZmlyc3QxLCBf X2xhc3QxLCBfX2ZpcnN0MiwgX19sYXN0MiwgX19jb21wKTsKICAgICAgICAgIGlmIChfX25ld19y ZXN1bHQgPT0gX19sYXN0MSkKICAgICAgICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAgICAgICAg ZWxzZSB7CiAgICAgICAgICAgIF9fcmVzdWx0ID0gX19uZXdfcmVzdWx0OwogICAgICAgICAgICBf X2ZpcnN0MSA9IF9fbmV3X3Jlc3VsdDsKICAgICAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgICAg IH0KICAgICAgICB9CiAgICAgIH0KICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVj dGlvbmFsSXRlcjEsIHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcjI+CiAgICBfQmlkaXJlY3Rp b25hbEl0ZXIxCiAgICBfX2ZpbmRfZW5kKF9CaWRpcmVjdGlvbmFsSXRlcjEgX19maXJzdDEsIF9C aWRpcmVjdGlvbmFsSXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJ dGVyMiBfX2ZpcnN0MiwgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAg ICBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZywgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcp CiAgICB7CgogICAgIAogICAgIAoKICAgICAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9yPF9CaWRp cmVjdGlvbmFsSXRlcjE+IF9SZXZJdGVyMTsKICAgICAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9y PF9CaWRpcmVjdGlvbmFsSXRlcjI+IF9SZXZJdGVyMjsKCiAgICAgIF9SZXZJdGVyMSBfX3JsYXN0 MShfX2ZpcnN0MSk7CiAgICAgIF9SZXZJdGVyMiBfX3JsYXN0MihfX2ZpcnN0Mik7CiAgICAgIF9S ZXZJdGVyMSBfX3JyZXN1bHQgPSBzZWFyY2goX1Jldkl0ZXIxKF9fbGFzdDEpLCBfX3JsYXN0MSwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmV2SXRlcjIoX19sYXN0MiksIF9f cmxhc3QyKTsKCiAgICAgIGlmIChfX3JyZXN1bHQgPT0gX19ybGFzdDEpCiAgICAgICAgcmV0dXJu IF9fbGFzdDE7CiAgICAgIGVsc2UgewogICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjEgX19yZXN1 bHQgPSBfX3JyZXN1bHQuYmFzZSgpOwogICAgICAgIGFkdmFuY2UoX19yZXN1bHQsIC1kaXN0YW5j ZShfX2ZpcnN0MiwgX19sYXN0MikpOwogICAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgICAgfQog ICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIxLCB0eXBlbmFtZSBf QmlkaXJlY3Rpb25hbEl0ZXIyLAogICAgICAgICAgIHR5cGVuYW1lIF9CaW5hcnlQcmVkaWNhdGU+ CiAgICBfQmlkaXJlY3Rpb25hbEl0ZXIxCiAgICBfX2ZpbmRfZW5kKF9CaWRpcmVjdGlvbmFsSXRl cjEgX19maXJzdDEsIF9CaWRpcmVjdGlvbmFsSXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAg X0JpZGlyZWN0aW9uYWxJdGVyMiBfX2ZpcnN0MiwgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX2xhc3Qy LAogICAgICAgICAgICAgICBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZywgYmlkaXJlY3Rpb25h bF9pdGVyYXRvcl90YWcsCiAgICAgICAgICAgICAgIF9CaW5hcnlQcmVkaWNhdGUgX19jb21wKQog ICAgewoKICAgICAKICAgICAKCiAgICAgIHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxfQmlkaXJl Y3Rpb25hbEl0ZXIxPiBfUmV2SXRlcjE7CiAgICAgIHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxf QmlkaXJlY3Rpb25hbEl0ZXIyPiBfUmV2SXRlcjI7CgogICAgICBfUmV2SXRlcjEgX19ybGFzdDEo X19maXJzdDEpOwogICAgICBfUmV2SXRlcjIgX19ybGFzdDIoX19maXJzdDIpOwogICAgICBfUmV2 SXRlcjEgX19ycmVzdWx0ID0gc2VhcmNoKF9SZXZJdGVyMShfX2xhc3QxKSwgX19ybGFzdDEsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1Jldkl0ZXIyKF9fbGFzdDIpLCBfX3Js YXN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbXApOwoKICAgICAg aWYgKF9fcnJlc3VsdCA9PSBfX3JsYXN0MSkKICAgICAgICByZXR1cm4gX19sYXN0MTsKICAgICAg ZWxzZSB7CiAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMSBfX3Jlc3VsdCA9IF9fcnJlc3VsdC5i YXNlKCk7CiAgICAgICAgYWR2YW5jZShfX3Jlc3VsdCwgLWRpc3RhbmNlKF9fZmlyc3QyLCBfX2xh c3QyKSk7CiAgICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAgICB9CiAgICB9CgoKCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyMSwgdHlwZW5hbWUgX0ZvcndhcmRJdGVyMj4KICAgIGlu bGluZSBfRm9yd2FyZEl0ZXIxCiAgICBmaW5kX2VuZChfRm9yd2FyZEl0ZXIxIF9fZmlyc3QxLCBf Rm9yd2FyZEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIyIF9fZmlyc3Qy LCBfRm9yd2FyZEl0ZXIyIF9fbGFzdDIpCiAgICB7CgogICAgIAogICAgIAogICAgIAoKCgogICAg ICByZXR1cm4gX19maW5kX2VuZChfX2ZpcnN0MSwgX19sYXN0MSwgX19maXJzdDIsIF9fbGFzdDIs CiAgICAgICAgICAgICAgICAgICAgICAgIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdDEpLAog ICAgICAgICAgICAgICAgICAgICAgICBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QyKSk7CiAg ICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcjEsIHR5cGVuYW1lIF9Gb3J3YXJk SXRlcjIsCiAgICAgICAgICAgdHlwZW5hbWUgX0JpbmFyeVByZWRpY2F0ZT4KICAgIGlubGluZSBf Rm9yd2FyZEl0ZXIxCiAgICBmaW5kX2VuZChfRm9yd2FyZEl0ZXIxIF9fZmlyc3QxLCBfRm9yd2Fy ZEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIyIF9fZmlyc3QyLCBfRm9y d2FyZEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICBfQmluYXJ5UHJlZGljYXRlIF9fY29tcCkK ICAgIHsKCiAgICAgCiAgICAgCiAgICAgCgoKCiAgICAgIHJldHVybiBfX2ZpbmRfZW5kKF9fZmly c3QxLCBfX2xhc3QxLCBfX2ZpcnN0MiwgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgICAgICAg X19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0MSksCiAgICAgICAgICAgICAgICAgICAgICAgIF9f aXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdDIpLAogICAgICAgICAgICAgICAgICAgICAgICBfX2Nv bXApOwogICAgfQoKfQojIDcwICIvdXNyL2N5Z251cy9iaW4vLi4vaW5jbHVkZS9jKysvMy4xLjEv YWxnb3JpdGhtIiAyIDMKIyA1NyAiL3Vzci9jeWdudXMvYmluLy4uL2luY2x1ZGUvYysrLzMuMS4x L3N0cmluZyIgMiAzCiMgMSAiL3Vzci9jeWdudXMvYmluLy4uL2luY2x1ZGUvYysrLzMuMS4xL2Jp dHMvYmFzaWNfc3RyaW5nLnRjYyIgMSAzCiMgNDUgIi91c3IvY3lnbnVzL2Jpbi8uLi9pbmNsdWRl L2MrKy8zLjEuMS9iaXRzL2Jhc2ljX3N0cmluZy50Y2MiIDMKCm5hbWVzcGFjZSBzdGQKewogIHRl bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9j PgogICAgY29uc3QgdHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9j Pjo6c2l6ZV90eXBlCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoK ICAgIF9SZXA6Ol9TX21heF9zaXplID0gKCgobnBvcyAtIHNpemVvZihfUmVwKSkvc2l6ZW9mKF9D aGFyVCkpIC0gMSkgLyA0OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U cmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGNvbnN0IF9DaGFyVAogICAgYmFzaWNfc3RyaW5n PF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBfUmVwOjpfU190ZXJtaW5hbCA9IF9DaGFy VCgpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVu YW1lIF9BbGxvYz4KICAgIGNvbnN0IHR5cGVuYW1lIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFp dHMsIF9BbGxvYz46OnNpemVfdHlwZQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywg X0FsbG9jPjo6bnBvczsKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U cmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVuYW1lIGJhc2ljX3N0cmluZzxfQ2hhclQs IF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1Ry YWl0cywgX0FsbG9jPjo6X1NfZW1wdHlfcmVwX3N0b3JhZ2VbCiAgICAoc2l6ZW9mKF9SZXApICsg c2l6ZW9mKF9DaGFyVCkgKyBzaXplb2Yoc2l6ZV90eXBlKSAtIDEpL3NpemVvZihzaXplX3R5cGUp XTsKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlw ZW5hbWUgX0FsbG9jPgogICAgdGVtcGxhdGU8dHlwZW5hbWUgX0luSXRlcj4KICAgICAgX0NoYXJU KgogICAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgICAgX1Nf Y29uc3RydWN0KF9Jbkl0ZXIgX19iZWcsIF9Jbkl0ZXIgX19lbmQsIGNvbnN0IF9BbGxvYyYgX19h LAogICAgICAgICAgICAgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFnKQogICAgICB7CiAgICAgICAg aWYgKF9fYmVnID09IF9fZW5kICYmIF9fYSA9PSBfQWxsb2MoKSkKICAgICAgICAgIHJldHVybiBf U19lbXB0eV9yZXAoKS5fTV9yZWZjb3B5KCk7CgogICAgICAgIF9DaGFyVCBfX2J1ZlsxMDBdOwog ICAgICAgIHNpemVfdHlwZSBfX2kgPSAwOwogICAgICAgIHdoaWxlIChfX2JlZyAhPSBfX2VuZCAm JiBfX2kgPCBzaXplb2YoX19idWYpIC8gc2l6ZW9mKF9DaGFyVCkpCiAgICAgICAgICB7CiAgICAg ICAgICAgIF9fYnVmW19faSsrXSA9ICpfX2JlZzsKICAgICAgICAgICAgKytfX2JlZzsKICAgICAg ICAgIH0KICAgICAgICBfUmVwKiBfX3IgPSBfUmVwOjpfU19jcmVhdGUoX19pLCBfX2EpOwogICAg ICAgIHRyYWl0c190eXBlOjpjb3B5KF9fci0+X01fcmVmZGF0YSgpLCBfX2J1ZiwgX19pKTsKICAg ICAgICBfX3ItPl9NX2xlbmd0aCA9IF9faTsKICAgICAgICB0cnkKICAgICAgICAgIHsKCgoKICAg ICAgICAgICAgZm9yICg7OykKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBfQ2hhclQq IF9fcCA9IF9fci0+X01fcmVmZGF0YSgpICsgX19yLT5fTV9sZW5ndGg7CiAgICAgICAgICAgICAg ICBfQ2hhclQqIF9fbGFzdCA9IF9fci0+X01fcmVmZGF0YSgpICsgX19yLT5fTV9jYXBhY2l0eTsK ICAgICAgICAgICAgICAgIGZvciAoOzspCiAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAg ICAgICAgICBpZiAoX19iZWcgPT0gX19lbmQpCiAgICAgICAgICAgICAgICAgICAgICB7CiAgICAg ICAgICAgICAgICAgICAgICAgIF9fci0+X01fbGVuZ3RoID0gX19wIC0gX19yLT5fTV9yZWZkYXRh KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICpfX3AgPSBfUmVwOjpfU190ZXJtaW5hbDsKICAg ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9fci0+X01fcmVmZGF0YSgpOwogICAgICAgICAg ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGlmIChfX3AgPT0gX19sYXN0KQogICAg ICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgKl9fcCsrID0gKl9f YmVnOwogICAgICAgICAgICAgICAgICAgICsrX19iZWc7CiAgICAgICAgICAgICAgICAgIH0KCiAg ICAgICAgICAgICAgICBzaXplX3R5cGUgX19sZW4gPSBfX3AgLSBfX3ItPl9NX3JlZmRhdGEoKTsK ICAgICAgICAgICAgICAgIF9SZXAqIF9fYW5vdGhlciA9IF9SZXA6Ol9TX2NyZWF0ZShfX2xlbiAr IDEsIF9fYSk7CiAgICAgICAgICAgICAgICB0cmFpdHNfdHlwZTo6Y29weShfX2Fub3RoZXItPl9N X3JlZmRhdGEoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fci0+X01fcmVm ZGF0YSgpLCBfX2xlbik7CiAgICAgICAgICAgICAgICBfX3ItPl9NX2Rlc3Ryb3koX19hKTsKICAg ICAgICAgICAgICAgIF9fciA9IF9fYW5vdGhlcjsKICAgICAgICAgICAgICAgIF9fci0+X01fbGVu Z3RoID0gX19sZW47CiAgICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIGNhdGNoKC4u LikKICAgICAgICAgIHsKICAgICAgICAgICAgX19yLT5fTV9kZXN0cm95KF9fYSk7CiAgICAgICAg ICAgIHRocm93OwogICAgICAgICAgfQogICAgICAgIHJldHVybiAwOwogICAgICB9CgogIHRlbXBs YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgog ICAgdGVtcGxhdGUgPGNsYXNzIF9Jbkl0ZXI+CiAgICAgIF9DaGFyVCoKICAgICAgYmFzaWNfc3Ry aW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICAgIF9TX2NvbnN0cnVjdChfSW5JdGVy IF9fYmVnLCBfSW5JdGVyIF9fZW5kLCBjb25zdCBfQWxsb2MmIF9fYSwKICAgICAgICAgICAgICAg ICAgIGZvcndhcmRfaXRlcmF0b3JfdGFnKQogICAgICB7CiAgICAgICAgc2l6ZV90eXBlIF9fZG5l dyA9IHN0YXRpY19jYXN0PHNpemVfdHlwZT4oZGlzdGFuY2UoX19iZWcsIF9fZW5kKSk7CgoKICAg ICAgICBpZiAoX19idWlsdGluX2V4cGVjdChfX2JlZyA9PSBfSW5JdGVyKCksIDApKQogICAgICAg ICAgX190aHJvd19sb2dpY19lcnJvcigiYXR0ZW1wdCB0byBjcmVhdGUgc3RyaW5nIHdpdGggbnVs bCBwb2ludGVyIik7CgogICAgICAgIGlmIChfX2JlZyA9PSBfX2VuZCAmJiBfX2EgPT0gX0FsbG9j KCkpCiAgICAgICAgICByZXR1cm4gX1NfZW1wdHlfcmVwKCkuX01fcmVmY29weSgpOwoKCiAgICAg ICAgX1JlcCogX19yID0gX1JlcDo6X1NfY3JlYXRlKF9fZG5ldywgX19hKTsKICAgICAgICB0cnkK ICAgICAgICAgIHsgX1NfY29weV9jaGFycyhfX3ItPl9NX3JlZmRhdGEoKSwgX19iZWcsIF9fZW5k KTsgfQogICAgICAgIGNhdGNoKC4uLikKICAgICAgICAgIHsKICAgICAgICAgICAgX19yLT5fTV9k ZXN0cm95KF9fYSk7CiAgICAgICAgICAgIHRocm93OwogICAgICAgICAgfQogICAgICAgIF9fci0+ X01fbGVuZ3RoID0gX19kbmV3OwoKICAgICAgICBfX3ItPl9NX3JlZmRhdGEoKVtfX2RuZXddID0g X1JlcDo6X1NfdGVybWluYWw7CiAgICAgICAgcmV0dXJuIF9fci0+X01fcmVmZGF0YSgpOwogICAg ICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5h bWUgX0FsbG9jPgogICAgX0NoYXJUKgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywg X0FsbG9jPjo6CiAgICBfU19jb25zdHJ1Y3Qoc2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9fYywgY29u c3QgX0FsbG9jJiBfX2EpCiAgICB7CiAgICAgIGlmIChfX24gPT0gMCAmJiBfX2EgPT0gX0FsbG9j KCkpCiAgICAgICAgcmV0dXJuIF9TX2VtcHR5X3JlcCgpLl9NX3JlZmNvcHkoKTsKCgogICAgICBf UmVwKiBfX3IgPSBfUmVwOjpfU19jcmVhdGUoX19uLCBfX2EpOwogICAgICB0cnkKICAgICAgICB7 CiAgICAgICAgICBpZiAoX19uKQogICAgICAgICAgICB0cmFpdHNfdHlwZTo6YXNzaWduKF9fci0+ X01fcmVmZGF0YSgpLCBfX24sIF9fYyk7CiAgICAgICAgfQogICAgICBjYXRjaCguLi4pCiAgICAg ICAgewogICAgICAgICAgX19yLT5fTV9kZXN0cm95KF9fYSk7CiAgICAgICAgICB0aHJvdzsKICAg ICAgICB9CiAgICAgIF9fci0+X01fbGVuZ3RoID0gX19uOwogICAgICBfX3ItPl9NX3JlZmRhdGEo KVtfX25dID0gX1JlcDo6X1NfdGVybWluYWw7CiAgICAgIHJldHVybiBfX3ItPl9NX3JlZmRhdGEo KTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0 eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+ OjoKICAgIGJhc2ljX3N0cmluZyhjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyKQogICAgOiBfTV9k YXRhcGx1cyhfX3N0ci5fTV9yZXAoKS0+X01fZ3JhYihfQWxsb2MoKSwgX19zdHIuZ2V0X2FsbG9j YXRvcigpKSwKICAgICAgICAgICAgICAgICBfX3N0ci5nZXRfYWxsb2NhdG9yKCkpCiAgICB7IH0K CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBf QWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGJh c2ljX3N0cmluZyhjb25zdCBfQWxsb2MmIF9fYSkKICAgIDogX01fZGF0YXBsdXMoX1NfY29uc3Ry dWN0KHNpemVfdHlwZSgpLCBfQ2hhclQoKSwgX19hKSwgX19hKQogICAgeyB9CgogIHRlbXBsYXRl PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAg YmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBiYXNpY19zdHJpbmco Y29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19u KQogICAgOiBfTV9kYXRhcGx1cyhfU19jb25zdHJ1Y3QoX19zdHIuX01fY2hlY2soX19wb3MpLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zdHIuX01fZm9sZChfX3BvcywgX19uKSwg X0FsbG9jKCkpLCBfQWxsb2MoKSkKICAgIHsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs IHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hh clQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgYmFzaWNfc3RyaW5nKGNvbnN0IGJhc2ljX3N0cmlu ZyYgX19zdHIsIHNpemVfdHlwZSBfX3BvcywKICAgICAgICAgICAgICAgICBzaXplX3R5cGUgX19u LCBjb25zdCBfQWxsb2MmIF9fYSkKICAgIDogX01fZGF0YXBsdXMoX1NfY29uc3RydWN0KF9fc3Ry Ll9NX2NoZWNrKF9fcG9zKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fc3RyLl9N X2ZvbGQoX19wb3MsIF9fbiksIF9fYSksIF9fYSkKICAgIHsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0 cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgYmFzaWNfc3RyaW5nKGNvbnN0IF9D aGFyVCogX19zLCBzaXplX3R5cGUgX19uLCBjb25zdCBfQWxsb2MmIF9fYSkKICAgIDogX01fZGF0 YXBsdXMoX1NfY29uc3RydWN0KF9fcywgX19zICsgX19uLCBfX2EpLCBfX2EpCiAgICB7IH0KCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxs b2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGJhc2lj X3N0cmluZyhjb25zdCBfQ2hhclQqIF9fcywgY29uc3QgX0FsbG9jJiBfX2EpCiAgICA6IF9NX2Rh dGFwbHVzKF9TX2NvbnN0cnVjdChfX3MsIF9fcyA/IF9fcyArIHRyYWl0c190eXBlOjpsZW5ndGgo X19zKSA6IDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2EpLCBfX2EpCiAgICB7 IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFt ZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAg IGJhc2ljX3N0cmluZyhzaXplX3R5cGUgX19uLCBfQ2hhclQgX19jLCBjb25zdCBfQWxsb2MmIF9f YSkKICAgIDogX01fZGF0YXBsdXMoX1NfY29uc3RydWN0KF9fbiwgX19jLCBfX2EpLCBfX2EpCiAg ICB7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBl bmFtZSBfQWxsb2M+CiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyPgogICAgYmFzaWNf c3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBiYXNpY19zdHJpbmcoX0lucHV0 SXRlciBfX2JlZywgX0lucHV0SXRlciBfX2VuZCwgY29uc3QgX0FsbG9jJiBfX2EpCiAgICA6IF9N X2RhdGFwbHVzKF9TX2NvbnN0cnVjdChfX2JlZywgX19lbmQsIF9fYSksIF9fYSkKICAgIHsgfQoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9B bGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mCiAgICBiYXNp Y19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+Ojphc3NpZ24oY29uc3QgYmFzaWNfc3Ry aW5nJiBfX3N0cikKICAgIHsKICAgICAgaWYgKF9NX3JlcCgpICE9IF9fc3RyLl9NX3JlcCgpKQog ICAgICAgIHsKCiAgICAgICAgICBhbGxvY2F0b3JfdHlwZSBfX2EgPSB0aGlzLT5nZXRfYWxsb2Nh dG9yKCk7CiAgICAgICAgICBfQ2hhclQqIF9fdG1wID0gX19zdHIuX01fcmVwKCktPl9NX2dyYWIo X19hLCBfX3N0ci5nZXRfYWxsb2NhdG9yKCkpOwogICAgICAgICAgX01fcmVwKCktPl9NX2Rpc3Bv c2UoX19hKTsKICAgICAgICAgIF9NX2RhdGEoX190bXApOwogICAgICAgIH0KICAgICAgcmV0dXJu ICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp dHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHZvaWQKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9U cmFpdHMsIF9BbGxvYz46Ol9SZXA6OgogICAgX01fZGVzdHJveShjb25zdCBfQWxsb2MmIF9fYSkg dGhyb3cgKCkKICAgIHsKICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHNpemVvZihfUmVwKSArIChf TV9jYXBhY2l0eSArIDEpICogc2l6ZW9mKF9DaGFyVCk7CiAgICAgIF9SYXdfYnl0ZXNfYWxsb2Mo X19hKS5kZWFsbG9jYXRlKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHRoaXMpLCBfX3NpemUpOwog ICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVu YW1lIF9BbGxvYz4KICAgIHZvaWQKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9B bGxvYz46Ol9NX2xlYWtfaGFyZCgpCiAgICB7CiAgICAgIGlmIChfTV9yZXAoKS0+X01faXNfc2hh cmVkKCkpCiAgICAgICAgX01fbXV0YXRlKDAsIDAsIDApOwogICAgICBfTV9yZXAoKS0+X01fc2V0 X2xlYWtlZCgpOwogICAgfQoKCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu YW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHZvaWQKICAgIGJhc2ljX3N0cmluZzxf Q2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgX01fbXV0YXRlKHNpemVfdHlwZSBfX3Bvcywg c2l6ZV90eXBlIF9fbGVuMSwgc2l6ZV90eXBlIF9fbGVuMikKICAgIHsKICAgICAgc2l6ZV90eXBl IF9fb2xkX3NpemUgPSB0aGlzLT5zaXplKCk7CiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX25ld19z aXplID0gX19vbGRfc2l6ZSArIF9fbGVuMiAtIF9fbGVuMTsKICAgICAgY29uc3QgX0NoYXJUKiBf X3NyYyA9IF9NX2RhdGEoKSArIF9fcG9zICsgX19sZW4xOwogICAgICBjb25zdCBzaXplX3R5cGUg X19ob3dfbXVjaCA9IF9fb2xkX3NpemUgLSBfX3BvcyAtIF9fbGVuMTsKCiAgICAgIGlmIChfTV9y ZXAoKS0+X01faXNfc2hhcmVkKCkgfHwgX19uZXdfc2l6ZSA+IGNhcGFjaXR5KCkpCiAgICAgICAg ewoKICAgICAgICAgIGFsbG9jYXRvcl90eXBlIF9fYSA9IGdldF9hbGxvY2F0b3IoKTsKCgogICAg ICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fcGFnZXNpemUgPSA0MDk2OwogICAgICAgICAgY29uc3Qg c2l6ZV90eXBlIF9fbWFsbG9jX2hlYWRlcl9zaXplID0gNCAqIHNpemVvZiAodm9pZCopOwoKICAg ICAgICAgIGNvbnN0IHNpemVfdHlwZSBfX3BhZ2VfY2FwYWNpdHkgPSAoX19wYWdlc2l6ZSAtIF9f bWFsbG9jX2hlYWRlcl9zaXplCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIC0gc2l6ZW9mKF9SZXApIC0gc2l6ZW9mKF9DaGFyVCkpCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gc2l6ZW9mKF9DaGFyVCk7CiAgICAgICAgICBf UmVwKiBfX3I7CiAgICAgICAgICBpZiAoX19uZXdfc2l6ZSA+IGNhcGFjaXR5KCkgJiYgX19uZXdf c2l6ZSA+IF9fcGFnZV9jYXBhY2l0eSkKCiAgICAgICAgICAgIF9fciA9IF9SZXA6Ol9TX2NyZWF0 ZShfX25ld19zaXplID4gMipjYXBhY2l0eSgpID8KICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIF9fbmV3X3NpemUgOiAyKmNhcGFjaXR5KCksIF9fYSk7CiAgICAgICAgICBlbHNlCiAg ICAgICAgICAgIF9fciA9IF9SZXA6Ol9TX2NyZWF0ZShfX25ld19zaXplLCBfX2EpOwogICAgICAg ICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpZiAoX19wb3MpCiAgICAgICAgICAg ICAgICB0cmFpdHNfdHlwZTo6Y29weShfX3ItPl9NX3JlZmRhdGEoKSwgX01fZGF0YSgpLCBfX3Bv cyk7CiAgICAgICAgICAgICAgaWYgKF9faG93X211Y2gpCiAgICAgICAgICAgICAgICB0cmFpdHNf dHlwZTo6Y29weShfX3ItPl9NX3JlZmRhdGEoKSArIF9fcG9zICsgX19sZW4yLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgX19zcmMsIF9faG93X211Y2gpOwogICAgICAgICAgICB9 CiAgICAgICAgICBjYXRjaCguLi4pCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfX3ItPl9N X2Rpc3Bvc2UoZ2V0X2FsbG9jYXRvcigpKTsKICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAg ICAgfQogICAgICAgICAgX01fcmVwKCktPl9NX2Rpc3Bvc2UoX19hKTsKICAgICAgICAgIF9NX2Rh dGEoX19yLT5fTV9yZWZkYXRhKCkpOwogICAgICB9CiAgICAgIGVsc2UgaWYgKF9faG93X211Y2gg JiYgX19sZW4xICE9IF9fbGVuMikKICAgICAgICB7CgogICAgICAgICAgdHJhaXRzX3R5cGU6Om1v dmUoX01fZGF0YSgpICsgX19wb3MgKyBfX2xlbjIsIF9fc3JjLCBfX2hvd19tdWNoKTsKICAgICAg ICB9CiAgICAgIF9NX3JlcCgpLT5fTV9zZXRfc2hhcmFibGUoKTsKICAgICAgX01fcmVwKCktPl9N X2xlbmd0aCA9IF9fbmV3X3NpemU7CiAgICAgIF9NX2RhdGEoKVtfX25ld19zaXplXSA9IF9SZXA6 Ol9TX3Rlcm1pbmFsOwoKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt ZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB2b2lkCiAgICBiYXNpY19zdHJpbmc8X0No YXJULCBfVHJhaXRzLCBfQWxsb2M+OjpyZXNlcnZlKHNpemVfdHlwZSBfX3JlcykKICAgIHsKICAg ICAgaWYgKF9fcmVzID4gdGhpcy0+Y2FwYWNpdHkoKSB8fCBfTV9yZXAoKS0+X01faXNfc2hhcmVk KCkpCiAgICAgICAgewogICAgICAgICAgaWYgKF9fcmVzID4gdGhpcy0+bWF4X3NpemUoKSkKICAg ICAgICAgICAgX190aHJvd19sZW5ndGhfZXJyb3IoImJhc2ljX3N0cmluZzo6cmVzZXJ2ZSIpOwoK ICAgICAgICAgIGlmIChfX3JlcyA8IHRoaXMtPnNpemUoKSkKICAgICAgICAgICAgX19yZXMgPSB0 aGlzLT5zaXplKCk7CiAgICAgICAgICBhbGxvY2F0b3JfdHlwZSBfX2EgPSBnZXRfYWxsb2NhdG9y KCk7CiAgICAgICAgICBfQ2hhclQqIF9fdG1wID0gX01fcmVwKCktPl9NX2Nsb25lKF9fYSwgX19y ZXMgLSB0aGlzLT5zaXplKCkpOwogICAgICAgICAgX01fcmVwKCktPl9NX2Rpc3Bvc2UoX19hKTsK ICAgICAgICAgIF9NX2RhdGEoX190bXApOwogICAgICAgIH0KICAgIH0KCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB2b2lk IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnN3YXAoYmFzaWNfc3RyaW5n JiBfX3MpCiAgICB7CiAgICAgIGlmIChfTV9yZXAoKS0+X01faXNfbGVha2VkKCkpCiAgICAgICAg X01fcmVwKCktPl9NX3NldF9zaGFyYWJsZSgpOwogICAgICBpZiAoX19zLl9NX3JlcCgpLT5fTV9p c19sZWFrZWQoKSkKICAgICAgICBfX3MuX01fcmVwKCktPl9NX3NldF9zaGFyYWJsZSgpOwogICAg ICBpZiAodGhpcy0+Z2V0X2FsbG9jYXRvcigpID09IF9fcy5nZXRfYWxsb2NhdG9yKCkpCiAgICAg ICAgewogICAgICAgICAgX0NoYXJUKiBfX3RtcCA9IF9NX2RhdGEoKTsKICAgICAgICAgIF9NX2Rh dGEoX19zLl9NX2RhdGEoKSk7CiAgICAgICAgICBfX3MuX01fZGF0YShfX3RtcCk7CiAgICAgICAg fQoKICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgIGJhc2ljX3N0cmluZyBfX3RtcDEoX01f aWJlZ2luKCksIF9NX2llbmQoKSwgX19zLmdldF9hbGxvY2F0b3IoKSk7CiAgICAgICAgICBiYXNp Y19zdHJpbmcgX190bXAyKF9fcy5fTV9pYmVnaW4oKSwgX19zLl9NX2llbmQoKSwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgdGhpcy0+Z2V0X2FsbG9jYXRvcigpKTsKICAgICAgICAgICp0 aGlzID0gX190bXAyOwogICAgICAgICAgX19zID0gX190bXAxOwogICAgICAgIH0KICAgIH0KCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxs b2M+CiAgICB0eXBlbmFtZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+Ojpf UmVwKgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6X1JlcDo6CiAg ICBfU19jcmVhdGUoc2l6ZV90IF9fY2FwYWNpdHksIGNvbnN0IF9BbGxvYyYgX19hbGxvYykKICAg IHsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+IF9f c3RyaW5nX3R5cGU7CgoKICAgICAgaWYgKF9fY2FwYWNpdHkgPiBfU19tYXhfc2l6ZSkKCgoKICAg ICAgICBfX3Rocm93X2xlbmd0aF9lcnJvcigiYmFzaWNfc3RyaW5nOjpfU19jcmVhdGUiKTsKCgoK CiAgICAgIHNpemVfdCBfX3NpemUgPSAoX19jYXBhY2l0eSArIDEpICogc2l6ZW9mKF9DaGFyVCkg KyBzaXplb2YoX1JlcCk7CiMgNDIxICIvdXNyL2N5Z251cy9iaW4vLi4vaW5jbHVkZS9jKysvMy4x LjEvYml0cy9iYXNpY19zdHJpbmcudGNjIiAzCiAgICAgIGNvbnN0IHNpemVfdCBfX3BhZ2VzaXpl ID0gNDA5NjsKICAgICAgY29uc3Qgc2l6ZV90IF9fc3VicGFnZXNpemUgPSAxMjg7CiAgICAgIGNv bnN0IHNpemVfdCBfX21hbGxvY19oZWFkZXJfc2l6ZSA9IDQgKiBzaXplb2YgKHZvaWQqKTsKICAg ICAgaWYgKChfX3NpemUgKyBfX21hbGxvY19oZWFkZXJfc2l6ZSkgPiBfX3BhZ2VzaXplKQogICAg ICAgIHsKICAgICAgICAgIHNpemVfdCBfX2V4dHJhID0KICAgICAgICAgICAgKF9fcGFnZXNpemUg LSAoKF9fc2l6ZSArIF9fbWFsbG9jX2hlYWRlcl9zaXplKSAlIF9fcGFnZXNpemUpKQogICAgICAg ICAgICAlIF9fcGFnZXNpemU7CiAgICAgICAgICBfX2NhcGFjaXR5ICs9IF9fZXh0cmEgLyBzaXpl b2YoX0NoYXJUKTsKICAgICAgICAgIF9fc2l6ZSA9IChfX2NhcGFjaXR5ICsgMSkgKiBzaXplb2Yo X0NoYXJUKSArIHNpemVvZihfUmVwKTsKICAgICAgICB9CiAgICAgIGVsc2UgaWYgKF9fc2l6ZSA+ IF9fc3VicGFnZXNpemUpCiAgICAgICAgewogICAgICAgICAgc2l6ZV90IF9fZXh0cmEgPQogICAg ICAgICAgICAoX19zdWJwYWdlc2l6ZSAtICgoX19zaXplICsgX19tYWxsb2NfaGVhZGVyX3NpemUp ICUgX19zdWJwYWdlc2l6ZSkpCiAgICAgICAgICAgICUgX19zdWJwYWdlc2l6ZTsKICAgICAgICAg IF9fY2FwYWNpdHkgKz0gX19leHRyYSAvIHNpemVvZihfQ2hhclQpOwogICAgICAgICAgX19zaXpl ID0gKF9fY2FwYWNpdHkgKyAxKSAqIHNpemVvZihfQ2hhclQpICsgc2l6ZW9mKF9SZXApOwogICAg ICAgIH0KCgoKICAgICAgdm9pZCogX19wbGFjZSA9IF9SYXdfYnl0ZXNfYWxsb2MoX19hbGxvYyku YWxsb2NhdGUoX19zaXplKTsKICAgICAgX1JlcCAqX19wID0gbmV3IChfX3BsYWNlKSBfUmVwOwog ICAgICBfX3AtPl9NX2NhcGFjaXR5ID0gX19jYXBhY2l0eTsKICAgICAgX19wLT5fTV9zZXRfc2hh cmFibGUoKTsKICAgICAgX19wLT5fTV9sZW5ndGggPSAwOwogICAgICByZXR1cm4gX19wOwogICAg fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1l IF9BbGxvYz4KICAgIF9DaGFyVCoKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9B bGxvYz46Ol9SZXA6OgogICAgX01fY2xvbmUoY29uc3QgX0FsbG9jJiBfX2FsbG9jLCBzaXplX3R5 cGUgX19yZXMpCiAgICB7CgogICAgICBjb25zdCBzaXplX3R5cGUgX19yZXF1ZXN0ZWRfY2FwID0g X01fbGVuZ3RoICsgX19yZXM7CgogICAgICBjb25zdCBzaXplX3R5cGUgX19wYWdlc2l6ZSA9IDQw OTY7CiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX21hbGxvY19oZWFkZXJfc2l6ZSA9IDQgKiBzaXpl b2YgKHZvaWQqKTsKCiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX3BhZ2VfY2FwYWNpdHkgPQogICAg ICAgIChfX3BhZ2VzaXplIC0gX19tYWxsb2NfaGVhZGVyX3NpemUgLSBzaXplb2YoX1JlcCkgLSBz aXplb2YoX0NoYXJUKSkKICAgICAgICAvIHNpemVvZihfQ2hhclQpOwogICAgICBfUmVwKiBfX3I7 CiAgICAgIGlmIChfX3JlcXVlc3RlZF9jYXAgPiBfTV9jYXBhY2l0eSAmJiBfX3JlcXVlc3RlZF9j YXAgPiBfX3BhZ2VfY2FwYWNpdHkpCgogICAgICAgIF9fciA9IF9SZXA6Ol9TX2NyZWF0ZShfX3Jl cXVlc3RlZF9jYXAgPiAyKl9NX2NhcGFjaXR5ID8KICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgX19yZXF1ZXN0ZWRfY2FwIDogMipfTV9jYXBhY2l0eSwgX19hbGxvYyk7CiAgICAgIGVsc2UK ICAgICAgICBfX3IgPSBfUmVwOjpfU19jcmVhdGUoX19yZXF1ZXN0ZWRfY2FwLCBfX2FsbG9jKTsK CiAgICAgIGlmIChfTV9sZW5ndGgpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAg IHsgdHJhaXRzX3R5cGU6OmNvcHkoX19yLT5fTV9yZWZkYXRhKCksIF9NX3JlZmRhdGEoKSwgX01f bGVuZ3RoKTsgfQogICAgICAgICAgY2F0Y2goLi4uKQogICAgICAgICAgICB7CiAgICAgICAgICAg ICAgX19yLT5fTV9kZXN0cm95KF9fYWxsb2MpOwogICAgICAgICAgICAgIHRocm93OwogICAgICAg ICAgICB9CiAgICAgICAgfQogICAgICBfX3ItPl9NX2xlbmd0aCA9IF9NX2xlbmd0aDsKICAgICAg cmV0dXJuIF9fci0+X01fcmVmZGF0YSgpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh clQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHZvaWQKICAgIGJhc2lj X3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnJlc2l6ZShzaXplX3R5cGUgX19uLCBf Q2hhclQgX19jKQogICAgewogICAgICBpZiAoX19uID4gbWF4X3NpemUoKSkKICAgICAgICBfX3Ro cm93X2xlbmd0aF9lcnJvcigiYmFzaWNfc3RyaW5nOjpyZXNpemUiKTsKICAgICAgc2l6ZV90eXBl IF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsKICAgICAgaWYgKF9fc2l6ZSA8IF9fbikKICAgICAgICB0 aGlzLT5hcHBlbmQoX19uIC0gX19zaXplLCBfX2MpOwogICAgICBlbHNlIGlmIChfX24gPCBfX3Np emUpCiAgICAgICAgdGhpcy0+ZXJhc2UoX19uKTsKCiAgICB9CgoKCgoKICB0ZW1wbGF0ZTx0eXBl 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 IF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsKICAgICAgaW50IF9fciA9IHRyYWl0c190eXBlOjpjb21w YXJlKF9NX2RhdGEoKSwgX19zLCBfX3NpemUpOwogICAgICBpZiAoIV9fcikKICAgICAgICBfX3Ig PSBfX3NpemUgLSB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcyk7CiAgICAgIHJldHVybiBfX3I7CiAg ICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVu YW1lIF9BbGxvYz4KICAgIGludAogICAgYmFzaWNfc3RyaW5nIDxfQ2hhclQsIF9UcmFpdHMsIF9B bGxvYz46OgogICAgY29tcGFyZShzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24xLCBjb25z dCBfQ2hhclQqIF9fcykgY29uc3QKICAgIHsKICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMt PnNpemUoKTsKICAgICAgaWYgKF9fcG9zID4gX19zaXplKQogICAgICAgIF9fdGhyb3dfb3V0X29m X3JhbmdlKCJiYXNpY19zdHJpbmc6OmNvbXBhcmUiKTsKCiAgICAgIHNpemVfdHlwZSBfX29zaXpl ID0gdHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpOwogICAgICBzaXplX3R5cGUgX19yc2l6ZSA9IG1p bihfX3NpemUgLSBfX3BvcywgX19uMSk7CiAgICAgIHNpemVfdHlwZSBfX2xlbiA9IG1pbihfX3Jz aXplLCBfX29zaXplKTsKICAgICAgaW50IF9fciA9IHRyYWl0c190eXBlOjpjb21wYXJlKF9NX2Rh dGEoKSArIF9fcG9zLCBfX3MsIF9fbGVuKTsKICAgICAgaWYgKCFfX3IpCiAgICAgICAgX19yID0g X19yc2l6ZSAtIF9fb3NpemU7CiAgICAgIHJldHVybiBfX3I7CiAgICB9CgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW50 CiAgICBiYXNpY19zdHJpbmcgPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBjb21wYXJl KHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbjEsIGNvbnN0IF9DaGFyVCogX19zLAogICAg ICAgICAgICBzaXplX3R5cGUgX19uMikgY29uc3QKICAgIHsKICAgICAgc2l6ZV90eXBlIF9fc2l6 ZSA9IHRoaXMtPnNpemUoKTsKICAgICAgaWYgKF9fcG9zID4gX19zaXplKQogICAgICAgIF9fdGhy b3dfb3V0X29mX3JhbmdlKCJiYXNpY19zdHJpbmc6OmNvbXBhcmUiKTsKCiAgICAgIHNpemVfdHlw ZSBfX29zaXplID0gbWluKHRyYWl0c190eXBlOjpsZW5ndGgoX19zKSwgX19uMik7CiAgICAgIHNp emVfdHlwZSBfX3JzaXplID0gbWluKF9fc2l6ZSAtIF9fcG9zLCBfX24xKTsKICAgICAgc2l6ZV90 eXBlIF9fbGVuID0gbWluKF9fcnNpemUsIF9fb3NpemUpOwogICAgICBpbnQgX19yID0gdHJhaXRz X3R5cGU6OmNvbXBhcmUoX01fZGF0YSgpICsgX19wb3MsIF9fcywgX19sZW4pOwogICAgICBpZiAo IV9fcikKICAgICAgICBfX3IgPSBfX3JzaXplIC0gX19vc2l6ZTsKICAgICAgcmV0dXJuIF9fcjsK ICAgIH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9DaGFyVCwgY2xhc3MgX1RyYWl0cywgY2xhc3MgX0Fs bG9jPgogICAgdm9pZAogICAgX1Nfc3RyaW5nX2NvcHkoY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFy VCwgX1RyYWl0cywgX0FsbG9jPiYgX19zdHIsCiAgICAgICAgICAgICAgICAgICBfQ2hhclQqIF9f YnVmLCB0eXBlbmFtZSBfQWxsb2M6OnNpemVfdHlwZSBfX2J1ZnNpeikKICAgIHsKICAgICAgdHlw ZWRlZiB0eXBlbmFtZSBfQWxsb2M6OnNpemVfdHlwZSBzaXplX3R5cGU7CiAgICAgIHNpemVfdHlw ZSBfX3N0cnNpemUgPSBfX3N0ci5zaXplKCk7CiAgICAgIHNpemVfdHlwZSBfX2J5dGVzID0gbWlu KF9fc3Ryc2l6ZSwgX19idWZzaXogLSAxKTsKICAgICAgX1RyYWl0czo6Y29weShfX2J1ZiwgX19z dHIuZGF0YSgpLCBfX2J5dGVzKTsKICAgICAgX19idWZbX19ieXRlc10gPSBfQ2hhclQoKTsKICAg IH0KCgoKCiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIGJhc2ljX3N0cmluZzxjaGFyPjsKICBleHRl cm4gdGVtcGxhdGUKICAgIGJhc2ljX2lzdHJlYW08Y2hhcj4mCiAgICBvcGVyYXRvcj4+KGJhc2lj X2lzdHJlYW08Y2hhcj4mLCBzdHJpbmcmKTsKICBleHRlcm4gdGVtcGxhdGUKICAgIGJhc2ljX29z dHJlYW08Y2hhcj4mCiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08Y2hhcj4mLCBjb25zdCBz dHJpbmcmKTsKICBleHRlcm4gdGVtcGxhdGUKICAgIGJhc2ljX2lzdHJlYW08Y2hhcj4mCiAgICBn ZXRsaW5lKGJhc2ljX2lzdHJlYW08Y2hhcj4mLCBzdHJpbmcmLCBjaGFyKTsKICBleHRlcm4gdGVt cGxhdGUKICAgIGJhc2ljX2lzdHJlYW08Y2hhcj4mCiAgICBnZXRsaW5lKGJhc2ljX2lzdHJlYW08 Y2hhcj4mLCBzdHJpbmcmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIGJhc2ljX3N0cmluZzx3 Y2hhcl90PjsKICBleHRlcm4gdGVtcGxhdGUKICAgIGJhc2ljX2lzdHJlYW08d2NoYXJfdD4mCiAg ICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08d2NoYXJfdD4mLCB3c3RyaW5nJik7CiAgZXh0ZXJu IHRlbXBsYXRlCiAgICBiYXNpY19vc3RyZWFtPHdjaGFyX3Q+JgogICAgb3BlcmF0b3I8PChiYXNp Y19vc3RyZWFtPHdjaGFyX3Q+JiwgY29uc3Qgd3N0cmluZyYpOwogIGV4dGVybiB0ZW1wbGF0ZQog ICAgYmFzaWNfaXN0cmVhbTx3Y2hhcl90PiYKICAgIGdldGxpbmUoYmFzaWNfaXN0cmVhbTx3Y2hh cl90PiYsIHdzdHJpbmcmLCB3Y2hhcl90KTsKICBleHRlcm4gdGVtcGxhdGUKICAgIGJhc2ljX2lz dHJlYW08d2NoYXJfdD4mCiAgICBnZXRsaW5lKGJhc2ljX2lzdHJlYW08d2NoYXJfdD4mLCB3c3Ry aW5nJik7Cn0KIyA1OCAiL3Vzci9jeWdudXMvYmluLy4uL2luY2x1ZGUvYysrLzMuMS4xL3N0cmlu ZyIgMiAzCiMgNTAgIi91c3IvY3lnbnVzL2Jpbi8uLi9pbmNsdWRlL2MrKy8zLjEuMS9iaXRzL2xv Y2FsZWZ3ZC5oIiAyIDMKIyAxICIvdXNyL2N5Z251cy9iaW4vLi4vaW5jbHVkZS9jKysvMy4xLjEv Yml0cy9mdW5jdGV4Y2VwdC5oIiAxIDMKIyAzNCAiL3Vzci9jeWdudXMvYmluLy4uL2luY2x1ZGUv YysrLzMuMS4xL2JpdHMvZnVuY3RleGNlcHQuaCIgMwojIDEgIi91c3IvY3lnbnVzL2Jpbi8uLi9p bmNsdWRlL2MrKy8zLjEuMS9leGNlcHRpb25fZGVmaW5lcy5oIiAxIDMKIyAzNSAiL3Vzci9jeWdu dXMvYmluLy4uL2luY2x1ZGUvYysrLzMuMS4xL2JpdHMvZnVuY3RleGNlcHQuaCIgMiAzCgpuYW1l c3BhY2Ugc3RkCnsKCiAgdm9pZAogIF9fdGhyb3dfYmFkX2V4Y2VwdGlvbih2b2lkKTsKCgogIHZv aWQKICBfX3Rocm93X2JhZF9hbGxvYyh2b2lkKTsKCgogIHZvaWQKICBfX3Rocm93X2JhZF9jYXN0 KHZvaWQpOwoKICB2b2lkCiAgX190aHJvd19iYWRfdHlwZWlkKHZvaWQpOwoKCiAgdm9pZAogIF9f dGhyb3dfbG9naWNfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfZG9t YWluX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X2ludmFsaWRfYXJn dW1lbnQoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfbGVuZ3RoX2Vycm9yKGNv bnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X291dF9vZl9yYW5nZShjb25zdCBjaGFy KiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19ydW50aW1lX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7 CgogIHZvaWQKICBfX3Rocm93X3JhbmdlX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQK ICBfX3Rocm93X292ZXJmbG93X2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Ro cm93X3VuZGVyZmxvd19lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKCiAgdm9pZAogIF9fdGhyb3df aW9zX2ZhaWx1cmUoY29uc3QgY2hhciogX19zKTsKfQojIDUxICIvdXNyL2N5Z251cy9iaW4vLi4v aW5jbHVkZS9jKysvMy4xLjEvYml0cy9sb2NhbGVmd2QuaCIgMiAzCgoKbmFtZXNwYWNlIHN0ZAp7 CgogIGNsYXNzIGxvY2FsZTsKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGlu ZSBib29sCiAgICBpc3NwYWNlKF9DaGFyVCwgY29uc3QgbG9jYWxlJik7CgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAgICBpc3ByaW50KF9DaGFyVCwgY29uc3Qg bG9jYWxlJik7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAg ICBpc2NudHJsKF9DaGFyVCwgY29uc3QgbG9jYWxlJik7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D aGFyVD4KICAgIGlubGluZSBib29sCiAgICBpc3VwcGVyKF9DaGFyVCwgY29uc3QgbG9jYWxlJik7 CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAgICBpc2xvd2Vy KF9DaGFyVCwgY29uc3QgbG9jYWxlJik7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAg IGlubGluZSBib29sCiAgICBpc2FscGhhKF9DaGFyVCwgY29uc3QgbG9jYWxlJik7CgogIHRlbXBs YXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAgICBpc2RpZ2l0KF9DaGFyVCwg Y29uc3QgbG9jYWxlJik7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBi b29sCiAgICBpc3B1bmN0KF9DaGFyVCwgY29uc3QgbG9jYWxlJik7CgogIHRlbXBsYXRlPHR5cGVu YW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAgICBpc3hkaWdpdChfQ2hhclQsIGNvbnN0IGxv Y2FsZSYpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAg aXNhbG51bShfQ2hhclQsIGNvbnN0IGxvY2FsZSYpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh clQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXNncmFwaChfQ2hhclQsIGNvbnN0IGxvY2FsZSYpOwoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgX0NoYXJUCiAgICB0b3VwcGVy KF9DaGFyVCwgY29uc3QgbG9jYWxlJik7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAg IGlubGluZSBfQ2hhclQKICAgIHRvbG93ZXIoX0NoYXJULCBjb25zdCBsb2NhbGUmKTsKCgoKICBj bGFzcyBjdHlwZV9iYXNlOwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGNsYXNzIGN0 eXBlOwogIHRlbXBsYXRlPD4gY2xhc3MgY3R5cGU8Y2hhcj47CgogIHRlbXBsYXRlPD4gY2xhc3Mg Y3R5cGU8d2NoYXJfdD47CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGNsYXNzIGN0 eXBlX2J5bmFtZTsKCgogIGNsYXNzIGNvZGVjdnRfYmFzZTsKICBjbGFzcyBfX2VuY190cmFpdHM7 CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludGVyblQsIHR5cGVuYW1lIF9FeHRlcm5ULCB0eXBlbmFt ZSBfU3RhdGVUPgogICAgY2xhc3MgY29kZWN2dDsKICB0ZW1wbGF0ZTw+IGNsYXNzIGNvZGVjdnQ8 Y2hhciwgY2hhciwgbWJzdGF0ZV90PjsKCiAgdGVtcGxhdGU8PiBjbGFzcyBjb2RlY3Z0PHdjaGFy X3QsIGNoYXIsIG1ic3RhdGVfdD47CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRlcm5ULCB0eXBl bmFtZSBfRXh0ZXJuVCwgdHlwZW5hbWUgX1N0YXRlVD4KICAgIGNsYXNzIGNvZGVjdnRfYnluYW1l OwoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyID0gaXN0cmVh bWJ1Zl9pdGVyYXRvcjxfQ2hhclQ+ID4KICAgIGNsYXNzIG51bV9nZXQ7CiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlciA9IG9zdHJlYW1idWZfaXRlcmF0b3I8X0No YXJUPiA+CiAgICBjbGFzcyBudW1fcHV0OwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4gY2xh c3MgbnVtcHVuY3Q7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPiBjbGFzcyBudW1wdW5jdF9i eW5hbWU7CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBjbGFzcyBjb2xsYXRlOwog IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4gY2xhc3MKICAgIGNvbGxhdGVfYnluYW1lOwoKCiAg Y2xhc3MgdGltZV9iYXNlOwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0lu SXRlciA9IGlzdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJUPiA+CiAgICBjbGFzcyB0aW1lX2dldDsK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXIgPSBpc3RyZWFtYnVm X2l0ZXJhdG9yPF9DaGFyVD4gPgogICAgY2xhc3MgdGltZV9nZXRfYnluYW1lOwogIHRlbXBsYXRl PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXIgPSBvc3RyZWFtYnVmX2l0ZXJhdG9y PF9DaGFyVD4gPgogICAgY2xhc3MgdGltZV9wdXQ7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU LCB0eXBlbmFtZSBfT3V0SXRlciA9IG9zdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJUPiA+CiAgICBj bGFzcyB0aW1lX3B1dF9ieW5hbWU7CgoKICBjbGFzcyBtb25leV9iYXNlOwogIHRlbXBsYXRlPHR5 cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlciA9IGlzdHJlYW1idWZfaXRlcmF0b3I8X0No YXJUPiA+CiAgICBjbGFzcyBtb25leV9nZXQ7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0 eXBlbmFtZSBfT3V0SXRlciA9IG9zdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJUPiA+CiAgICBjbGFz cyBtb25leV9wdXQ7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCBib29sIF9JbnRsID0gZmFs c2U+CiAgICBjbGFzcyBtb25leXB1bmN0OwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgYm9v bCBfSW50bCA9IGZhbHNlPgogICAgY2xhc3MgbW9uZXlwdW5jdF9ieW5hbWU7CgoKICBjbGFzcyBt ZXNzYWdlc19iYXNlOwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGNsYXNzIG1lc3Nh Z2VzOwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGNsYXNzIG1lc3NhZ2VzX2J5bmFt ZTsKCgogIGNsYXNzIGxvY2FsZQogIHsKICBwdWJsaWM6CgogICAgdHlwZWRlZiB1bnNpZ25lZCBp bnQgY2F0ZWdvcnk7CgoKICAgIGNsYXNzIGZhY2V0OwogICAgY2xhc3MgaWQ7CiAgICBjbGFzcyBf SW1wbDsKCiAgICBmcmllbmQgY2xhc3MgZmFjZXQ7CiAgICBmcmllbmQgY2xhc3MgX0ltcGw7Cgog ICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZhY2V0PgogICAgICBmcmllbmQgY29uc3QgX0ZhY2V0Jgog ICAgICB1c2VfZmFjZXQoY29uc3QgbG9jYWxlJik7CgogICAgdGVtcGxhdGU8dHlwZW5hbWUgX0Zh Y2V0PgogICAgICBmcmllbmQgYm9vbAogICAgICBoYXNfZmFjZXQoY29uc3QgbG9jYWxlJikgdGhy b3coKTsKCgoKICAgIHN0YXRpYyBjb25zdCBjYXRlZ29yeSBub25lID0gMDsKICAgIHN0YXRpYyBj b25zdCBjYXRlZ29yeSBjdHlwZSA9IDFMIDw8IDA7CiAgICBzdGF0aWMgY29uc3QgY2F0ZWdvcnkg bnVtZXJpYyA9IDFMIDw8IDE7CiAgICBzdGF0aWMgY29uc3QgY2F0ZWdvcnkgY29sbGF0ZSA9IDFM IDw8IDI7CiAgICBzdGF0aWMgY29uc3QgY2F0ZWdvcnkgdGltZSA9IDFMIDw8IDM7CiAgICBzdGF0 aWMgY29uc3QgY2F0ZWdvcnkgbW9uZXRhcnkgPSAxTCA8PCA0OwogICAgc3RhdGljIGNvbnN0IGNh dGVnb3J5IG1lc3NhZ2VzID0gMUwgPDwgNTsKICAgIHN0YXRpYyBjb25zdCBjYXRlZ29yeSBhbGwg PSAoY29sbGF0ZSB8IGN0eXBlIHwgbW9uZXRhcnkgfAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgbnVtZXJpYyB8IHRpbWUgfCBtZXNzYWdlcyk7CgoKICAgIGxvY2Fs ZSgpIHRocm93KCk7CgogICAgbG9jYWxlKGNvbnN0IGxvY2FsZSYgX19vdGhlcikgdGhyb3coKTsK CiAgICBleHBsaWNpdAogICAgbG9jYWxlKGNvbnN0IGNoYXIqIF9fcyk7CgogICAgbG9jYWxlKGNv bnN0IGxvY2FsZSYgX19iYXNlLCBjb25zdCBjaGFyKiBfX3MsIGNhdGVnb3J5IF9fY2F0KTsKCiAg ICBsb2NhbGUoY29uc3QgbG9jYWxlJiBfX2Jhc2UsIGNvbnN0IGxvY2FsZSYgX19hZGQsIGNhdGVn b3J5IF9fY2F0KTsKCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFjZXQ+CiAgICAgIGxvY2FsZShj b25zdCBsb2NhbGUmIF9fb3RoZXIsIF9GYWNldCogX19mKTsKCiAgICB+bG9jYWxlKCkgdGhyb3co KTsKCiAgICBjb25zdCBsb2NhbGUmCiAgICBvcGVyYXRvcj0oY29uc3QgbG9jYWxlJiBfX290aGVy KSB0aHJvdygpOwoKICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9GYWNldD4KICAgICAgbG9jYWxlCiAg ICAgIGNvbWJpbmUoY29uc3QgbG9jYWxlJiBfX290aGVyKSBjb25zdDsKCgogICAgc3RyaW5nCiAg ICBuYW1lKCkgY29uc3Q7CgogICAgYm9vbAogICAgb3BlcmF0b3I9PShjb25zdCBsb2NhbGUmIF9f b3RoZXIpIGNvbnN0IHRocm93ICgpOwoKICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvciE9KGNv bnN0IGxvY2FsZSYgX19vdGhlcikgY29uc3QgdGhyb3cgKCkKICAgIHsgcmV0dXJuICEodGhpcy0+ b3BlcmF0b3I9PShfX290aGVyKSk7IH0KCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhciwgdHlw ZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgICBib29sCiAgICAgIG9wZXJhdG9y KCkoY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyLCBfVHJhaXRzLCBfQWxsb2M+JiBfX3MxLAogICAg ICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhciwgX1RyYWl0cywgX0FsbG9jPiYg X19zMikgY29uc3Q7CgoKICAgIHN0YXRpYyBsb2NhbGUKICAgIGdsb2JhbChjb25zdCBsb2NhbGUm KTsKCiAgICBzdGF0aWMgY29uc3QgbG9jYWxlJgogICAgY2xhc3NpYygpOwoKICBwcml2YXRlOgoK ICAgIF9JbXBsKiBfTV9pbXBsOwoKCiAgICBzdGF0aWMgX0ltcGwqIF9TX2NsYXNzaWM7CgoKICAg IHN0YXRpYyBfSW1wbCogX1NfZ2xvYmFsOwoKICAgIHN0YXRpYyBjb25zdCBzaXplX3QgX1NfbnVt X2NhdGVnb3JpZXMgPSA2OwoKICAgIGV4cGxpY2l0CiAgICBsb2NhbGUoX0ltcGwqKSB0aHJvdygp OwoKICAgIHN0YXRpYyBpbmxpbmUgdm9pZAogICAgX1NfaW5pdGlhbGl6ZSgpCiAgICB7CiAgICAg IGlmICghX1NfY2xhc3NpYykKICAgICAgICBjbGFzc2ljKCk7CiAgICB9CgogICAgc3RhdGljIGNh dGVnb3J5CiAgICBfU19ub3JtYWxpemVfY2F0ZWdvcnkoY2F0ZWdvcnkpOwoKICAgIHZvaWQKICAg IF9NX2NvYWxlc2NlKGNvbnN0IGxvY2FsZSYgX19iYXNlLCBjb25zdCBsb2NhbGUmIF9fYWRkLCBj YXRlZ29yeSBfX2NhdCk7CiAgfTsKCgoKICBjbGFzcyBsb2NhbGU6Ol9JbXBsCiAgewogIHB1Ymxp YzoKCiAgICBmcmllbmQgY2xhc3MgbG9jYWxlOwogICAgZnJpZW5kIGNsYXNzIGxvY2FsZTo6ZmFj ZXQ7CgogICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZhY2V0PgogICAgICBmcmllbmQgY29uc3QgX0Zh Y2V0JgogICAgICB1c2VfZmFjZXQoY29uc3QgbG9jYWxlJik7CgogICAgdGVtcGxhdGU8dHlwZW5h bWUgX0ZhY2V0PgogICAgICBmcmllbmQgYm9vbAogICAgICBoYXNfZmFjZXQoY29uc3QgbG9jYWxl JikgdGhyb3coKTsKCiAgcHJpdmF0ZToKCiAgICBfQXRvbWljX3dvcmQgX01fcmVmZXJlbmNlczsK ICAgIGZhY2V0KiogX01fZmFjZXRzOwogICAgc2l6ZV90IF9NX2ZhY2V0c19zaXplOwogICAgY29u c3QgY2hhciogX01fbmFtZXNbX1NfbnVtX2NhdGVnb3JpZXNdOwogICAgc3RhdGljIGNvbnN0IGxv Y2FsZTo6aWQqIGNvbnN0IF9TX2lkX2N0eXBlW107CiAgICBzdGF0aWMgY29uc3QgbG9jYWxlOjpp ZCogY29uc3QgX1NfaWRfbnVtZXJpY1tdOwogICAgc3RhdGljIGNvbnN0IGxvY2FsZTo6aWQqIGNv bnN0IF9TX2lkX2NvbGxhdGVbXTsKICAgIHN0YXRpYyBjb25zdCBsb2NhbGU6OmlkKiBjb25zdCBf U19pZF90aW1lW107CiAgICBzdGF0aWMgY29uc3QgbG9jYWxlOjppZCogY29uc3QgX1NfaWRfbW9u ZXRhcnlbXTsKICAgIHN0YXRpYyBjb25zdCBsb2NhbGU6OmlkKiBjb25zdCBfU19pZF9tZXNzYWdl c1tdOwogICAgc3RhdGljIGNvbnN0IGxvY2FsZTo6aWQqIGNvbnN0KiBjb25zdCBfU19mYWNldF9j YXRlZ29yaWVzW107CgogICAgaW5saW5lIHZvaWQKICAgIF9NX2FkZF9yZWZlcmVuY2UoKSB0aHJv dygpCiAgICB7IF9fYXRvbWljX2FkZCgmX01fcmVmZXJlbmNlcywgMSk7IH0KCiAgICBpbmxpbmUg dm9pZAogICAgX01fcmVtb3ZlX3JlZmVyZW5jZSgpIHRocm93KCkKICAgIHsKICAgICAgaWYgKF9f ZXhjaGFuZ2VfYW5kX2FkZCgmX01fcmVmZXJlbmNlcywgLTEpID09IDEpCiAgICAgICAgewogICAg ICAgICAgdHJ5CiAgICAgICAgICAgIHsgZGVsZXRlIHRoaXM7IH0KICAgICAgICAgIGNhdGNoKC4u LikKICAgICAgICAgICAgeyB9CiAgICAgICAgfQogICAgfQoKICAgIF9JbXBsKGNvbnN0IF9JbXBs Jiwgc2l6ZV90KTsKICAgIF9JbXBsKGNvbnN0IGNoYXIqLCBzaXplX3QpOwogICAgX0ltcGwoZmFj ZXQqKiwgc2l6ZV90LCBib29sKTsKCiAgIH5fSW1wbCgpIHRocm93KCk7CgogICAgX0ltcGwoY29u c3QgX0ltcGwmKTsKCiAgICB2b2lkCiAgICBvcGVyYXRvcj0oY29uc3QgX0ltcGwmKTsKCiAgICBp bmxpbmUgYm9vbAogICAgX01fY2hlY2tfc2FtZV9uYW1lKCkKICAgIHsKICAgICAgYm9vbCBfX3Jl dCA9IHRydWU7CiAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBfX3JldCAmJiBpIDwgX1NfbnVtX2Nh dGVnb3JpZXMgLSAxOyArK2kpCiAgICAgICAgX19yZXQgJj0gKHN0cmNtcChfTV9uYW1lc1tpXSwg X01fbmFtZXNbaSArIDFdKSA9PSAwKTsKICAgICAgcmV0dXJuIF9fcmV0OwogICAgfQoKICAgIHZv aWQKICAgIF9NX3JlcGxhY2VfY2F0ZWdvcmllcyhjb25zdCBfSW1wbCosIGNhdGVnb3J5KTsKCiAg ICB2b2lkCiAgICBfTV9yZXBsYWNlX2NhdGVnb3J5KGNvbnN0IF9JbXBsKiwgY29uc3QgbG9jYWxl OjppZCogY29uc3QqKTsKCiAgICB2b2lkCiAgICBfTV9yZXBsYWNlX2ZhY2V0KGNvbnN0IF9JbXBs KiwgY29uc3QgbG9jYWxlOjppZCopOwoKICAgIHZvaWQKICAgIF9NX2luc3RhbGxfZmFjZXQoY29u c3QgbG9jYWxlOjppZCosIGZhY2V0Kik7CgogICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZhY2V0Pgog ICAgICBpbmxpbmUgdm9pZAogICAgICBfTV9pbml0X2ZhY2V0KF9GYWNldCogX19mYWNldCkKICAg ICAgeyBfTV9pbnN0YWxsX2ZhY2V0KCZfRmFjZXQ6OmlkLCBfX2ZhY2V0KTsgfQogIH07CgogIHRl bXBsYXRlPHR5cGVuYW1lIF9GYWNldD4KICAgIGxvY2FsZTo6bG9jYWxlKGNvbnN0IGxvY2FsZSYg X19vdGhlciwgX0ZhY2V0KiBfX2YpCiAgICB7CiAgICAgIF9NX2ltcGwgPSBuZXcgX0ltcGwoKl9f b3RoZXIuX01faW1wbCwgMSk7CiAgICAgIF9NX2ltcGwtPl9NX2luc3RhbGxfZmFjZXQoJl9GYWNl dDo6aWQsIF9fZik7CiAgICAgIGZvciAoc2l6ZV90IF9faSA9IDA7IF9faSA8IF9TX251bV9jYXRl Z29yaWVzOyArK19faSkKICAgICAgICBfTV9pbXBsLT5fTV9uYW1lc1tfX2ldID0gIioiOwogICAg fQoKCiAgY2xhc3MgbG9jYWxlOjpmYWNldAogIHsKICBwcml2YXRlOgogICAgZnJpZW5kIGNsYXNz IGxvY2FsZTsKICAgIGZyaWVuZCBjbGFzcyBsb2NhbGU6Ol9JbXBsOwoKICAgIF9BdG9taWNfd29y ZCBfTV9yZWZlcmVuY2VzOwoKICBwcm90ZWN0ZWQ6CgoKICAgIHN0YXRpYyBfX2NfbG9jYWxlIF9T X2NfbG9jYWxlOwoKICAgIGV4cGxpY2l0CiAgICBmYWNldChzaXplX3QgX19yZWZzID0gMCkgdGhy b3coKTsKCiAgICB2aXJ0dWFsCiAgICB+ZmFjZXQoKTsKCiAgICBzdGF0aWMgdm9pZAogICAgX1Nf Y3JlYXRlX2NfbG9jYWxlKF9fY19sb2NhbGUmIF9fY2xvYywgY29uc3QgY2hhciogX19zLAogICAg ICAgICAgICAgICAgICAgICAgIF9fY19sb2NhbGUgX19vbGQgPSAwKTsKCiAgICBzdGF0aWMgX19j X2xvY2FsZQogICAgX1NfY2xvbmVfY19sb2NhbGUoX19jX2xvY2FsZSYgX19jbG9jKTsKCiAgICBz dGF0aWMgdm9pZAogICAgX1NfZGVzdHJveV9jX2xvY2FsZShfX2NfbG9jYWxlJiBfX2Nsb2MpOwoK ICBwcml2YXRlOgogICAgdm9pZAogICAgX01fYWRkX3JlZmVyZW5jZSgpIHRocm93KCk7CgogICAg dm9pZAogICAgX01fcmVtb3ZlX3JlZmVyZW5jZSgpIHRocm93KCk7CgogICAgZmFjZXQoY29uc3Qg ZmFjZXQmKTsKCiAgICB2b2lkCiAgICBvcGVyYXRvcj0oY29uc3QgZmFjZXQmKTsKICB9OwoKCgog IGNsYXNzIGxvY2FsZTo6aWQKICB7CiAgcHJpdmF0ZToKICAgIGZyaWVuZCBjbGFzcyBsb2NhbGU7 CiAgICBmcmllbmQgY2xhc3MgbG9jYWxlOjpfSW1wbDsKICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9G YWNldD4KICAgICAgZnJpZW5kIGNvbnN0IF9GYWNldCYKICAgICAgdXNlX2ZhY2V0KGNvbnN0IGxv Y2FsZSYpOwogICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZhY2V0PgogICAgICBmcmllbmQgYm9vbAog ICAgICBoYXNfZmFjZXQoY29uc3QgbG9jYWxlJikgdGhyb3cgKCk7CgoKCgogICAgbXV0YWJsZSBz aXplX3QgX01faW5kZXg7CgoKICAgIHN0YXRpYyBfQXRvbWljX3dvcmQgX1NfaGlnaHdhdGVyOwoK ICAgIHZvaWQKICAgIG9wZXJhdG9yPShjb25zdCBpZCYpOwoKICAgIGlkKGNvbnN0IGlkJik7Cgog IHB1YmxpYzoKCgogICAgaWQoKTsKCiAgICBpbmxpbmUgc2l6ZV90CiAgICBfTV9pZCgpIGNvbnN0 CiAgICB7CiAgICAgIGlmICghX01faW5kZXgpCiAgICAgICAgX01faW5kZXggPSAxICsgX19leGNo YW5nZV9hbmRfYWRkKCZfU19oaWdod2F0ZXIsIDEpOwogICAgICByZXR1cm4gX01faW5kZXggLSAx OwogICAgfQogIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9GYWNldD4KICAgIGNvbnN0IF9GYWNl dCYKICAgIHVzZV9mYWNldChjb25zdCBsb2NhbGUmIF9fbG9jKTsKCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0ZhY2V0PgogICAgYm9vbAogICAgaGFzX2ZhY2V0KGNvbnN0IGxvY2FsZSYgX19sb2MpIHRo cm93KCk7Cn0KIyA0OSAiL3Vzci9jeWdudXMvYmluLy4uL2luY2x1ZGUvYysrLzMuMS4xL2lvcyIg MiAzCiMgMSAiL3Vzci9jeWdudXMvYmluLy4uL2luY2x1ZGUvYysrLzMuMS4xL2JpdHMvaW9zX2Jh c2UuaCIgMSAzCiMgNDQgIi91c3IvY3lnbnVzL2Jpbi8uLi9pbmNsdWRlL2MrKy8zLjEuMS9iaXRz L2lvc19iYXNlLmgiIDMKCgoKbmFtZXNwYWNlIHN0ZAp7CgoKCgogIGVudW0gX0lvc19GbXRmbGFn cyB7IF9NX2lvc19mbXRmbGFnc19lbmQgPSAxTCA8PCAxNiB9OwoKICBpbmxpbmUgX0lvc19GbXRm bGFncwogIG9wZXJhdG9yJihfSW9zX0ZtdGZsYWdzIF9fYSwgX0lvc19GbXRmbGFncyBfX2IpCiAg eyByZXR1cm4gX0lvc19GbXRmbGFncyhzdGF0aWNfY2FzdDxpbnQ+KF9fYSkgJiBzdGF0aWNfY2Fz dDxpbnQ+KF9fYikpOyB9CgogIGlubGluZSBfSW9zX0ZtdGZsYWdzCiAgb3BlcmF0b3J8KF9Jb3Nf Rm10ZmxhZ3MgX19hLCBfSW9zX0ZtdGZsYWdzIF9fYikKICB7IHJldHVybiBfSW9zX0ZtdGZsYWdz KHN0YXRpY19jYXN0PGludD4oX19hKSB8IHN0YXRpY19jYXN0PGludD4oX19iKSk7IH0KCiAgaW5s aW5lIF9Jb3NfRm10ZmxhZ3MKICBvcGVyYXRvcl4oX0lvc19GbXRmbGFncyBfX2EsIF9Jb3NfRm10 ZmxhZ3MgX19iKQogIHsgcmV0dXJuIF9Jb3NfRm10ZmxhZ3Moc3RhdGljX2Nhc3Q8aW50PihfX2Ep IF4gc3RhdGljX2Nhc3Q8aW50PihfX2IpKTsgfQoKICBpbmxpbmUgX0lvc19GbXRmbGFncwogIG9w ZXJhdG9yfD0oX0lvc19GbXRmbGFncyYgX19hLCBfSW9zX0ZtdGZsYWdzIF9fYikKICB7IHJldHVy biBfX2EgPSBfX2EgfCBfX2I7IH0KCiAgaW5saW5lIF9Jb3NfRm10ZmxhZ3MKICBvcGVyYXRvciY9 KF9Jb3NfRm10ZmxhZ3MmIF9fYSwgX0lvc19GbXRmbGFncyBfX2IpCiAgeyByZXR1cm4gX19hID0g X19hICYgX19iOyB9CgogIGlubGluZSBfSW9zX0ZtdGZsYWdzCiAgb3BlcmF0b3JePShfSW9zX0Zt dGZsYWdzJiBfX2EsIF9Jb3NfRm10ZmxhZ3MgX19iKQogIHsgcmV0dXJuIF9fYSA9IF9fYSBeIF9f YjsgfQoKICBpbmxpbmUgX0lvc19GbXRmbGFncwogIG9wZXJhdG9yfihfSW9zX0ZtdGZsYWdzIF9f YSkKICB7IHJldHVybiBfSW9zX0ZtdGZsYWdzKH5zdGF0aWNfY2FzdDxpbnQ+KF9fYSkpOyB9CgoK ICBlbnVtIF9Jb3NfT3Blbm1vZGUgeyBfTV9pb3Nfb3Blbm1vZGVfZW5kID0gMUwgPDwgMTYgfTsK CiAgaW5saW5lIF9Jb3NfT3Blbm1vZGUKICBvcGVyYXRvciYoX0lvc19PcGVubW9kZSBfX2EsIF9J b3NfT3Blbm1vZGUgX19iKQogIHsgcmV0dXJuIF9Jb3NfT3Blbm1vZGUoc3RhdGljX2Nhc3Q8aW50 PihfX2EpICYgc3RhdGljX2Nhc3Q8aW50PihfX2IpKTsgfQoKICBpbmxpbmUgX0lvc19PcGVubW9k ZQogIG9wZXJhdG9yfChfSW9zX09wZW5tb2RlIF9fYSwgX0lvc19PcGVubW9kZSBfX2IpCiAgeyBy ZXR1cm4gX0lvc19PcGVubW9kZShzdGF0aWNfY2FzdDxpbnQ+KF9fYSkgfCBzdGF0aWNfY2FzdDxp bnQ+KF9fYikpOyB9CgogIGlubGluZSBfSW9zX09wZW5tb2RlCiAgb3BlcmF0b3JeKF9Jb3NfT3Bl bm1vZGUgX19hLCBfSW9zX09wZW5tb2RlIF9fYikKICB7IHJldHVybiBfSW9zX09wZW5tb2RlKHN0 YXRpY19jYXN0PGludD4oX19hKSBeIHN0YXRpY19jYXN0PGludD4oX19iKSk7IH0KCiAgaW5saW5l IF9Jb3NfT3Blbm1vZGUKICBvcGVyYXRvcnw9KF9Jb3NfT3Blbm1vZGUmIF9fYSwgX0lvc19PcGVu bW9kZSBfX2IpCiAgeyByZXR1cm4gX19hID0gX19hIHwgX19iOyB9CgogIGlubGluZSBfSW9zX09w ZW5tb2RlCiAgb3BlcmF0b3ImPShfSW9zX09wZW5tb2RlJiBfX2EsIF9Jb3NfT3Blbm1vZGUgX19i KQogIHsgcmV0dXJuIF9fYSA9IF9fYSAmIF9fYjsgfQoKICBpbmxpbmUgX0lvc19PcGVubW9kZQog IG9wZXJhdG9yXj0oX0lvc19PcGVubW9kZSYgX19hLCBfSW9zX09wZW5tb2RlIF9fYikKICB7IHJl dHVybiBfX2EgPSBfX2EgXiBfX2I7IH0KCiAgaW5saW5lIF9Jb3NfT3Blbm1vZGUKICBvcGVyYXRv cn4oX0lvc19PcGVubW9kZSBfX2EpCiAgeyByZXR1cm4gX0lvc19PcGVubW9kZSh+c3RhdGljX2Nh c3Q8aW50PihfX2EpKTsgfQoKCiAgZW51bSBfSW9zX0lvc3RhdGUgeyBfTV9pb3NfaW9zdGF0ZV9l bmQgPSAxTCA8PCAxNiB9OwoKICBpbmxpbmUgX0lvc19Jb3N0YXRlCiAgb3BlcmF0b3ImKF9Jb3Nf SW9zdGF0ZSBfX2EsIF9Jb3NfSW9zdGF0ZSBfX2IpCiAgeyByZXR1cm4gX0lvc19Jb3N0YXRlKHN0 YXRpY19jYXN0PGludD4oX19hKSAmIHN0YXRpY19jYXN0PGludD4oX19iKSk7IH0KCiAgaW5saW5l IF9Jb3NfSW9zdGF0ZQogIG9wZXJhdG9yfChfSW9zX0lvc3RhdGUgX19hLCBfSW9zX0lvc3RhdGUg X19iKQogIHsgcmV0dXJuIF9Jb3NfSW9zdGF0ZShzdGF0aWNfY2FzdDxpbnQ+KF9fYSkgfCBzdGF0 aWNfY2FzdDxpbnQ+KF9fYikpOyB9CgogIGlubGluZSBfSW9zX0lvc3RhdGUKICBvcGVyYXRvcl4o X0lvc19Jb3N0YXRlIF9fYSwgX0lvc19Jb3N0YXRlIF9fYikKICB7IHJldHVybiBfSW9zX0lvc3Rh dGUoc3RhdGljX2Nhc3Q8aW50PihfX2EpIF4gc3RhdGljX2Nhc3Q8aW50PihfX2IpKTsgfQoKICBp bmxpbmUgX0lvc19Jb3N0YXRlCiAgb3BlcmF0b3J8PShfSW9zX0lvc3RhdGUmIF9fYSwgX0lvc19J b3N0YXRlIF9fYikKICB7IHJldHVybiBfX2EgPSBfX2EgfCBfX2I7IH0KCiAgaW5saW5lIF9Jb3Nf SW9zdGF0ZQogIG9wZXJhdG9yJj0oX0lvc19Jb3N0YXRlJiBfX2EsIF9Jb3NfSW9zdGF0ZSBfX2Ip CiAgeyByZXR1cm4gX19hID0gX19hICYgX19iOyB9CgogIGlubGluZSBfSW9zX0lvc3RhdGUKICBv cGVyYXRvcl49KF9Jb3NfSW9zdGF0ZSYgX19hLCBfSW9zX0lvc3RhdGUgX19iKQogIHsgcmV0dXJu IF9fYSA9IF9fYSBeIF9fYjsgfQoKICBpbmxpbmUgX0lvc19Jb3N0YXRlCiAgb3BlcmF0b3J+KF9J b3NfSW9zdGF0ZSBfX2EpCiAgeyByZXR1cm4gX0lvc19Jb3N0YXRlKH5zdGF0aWNfY2FzdDxpbnQ+ KF9fYSkpOyB9CgogIGVudW0gX0lvc19TZWVrZGlyIHsgX01faW9zX3NlZWtkaXJfZW5kID0gMUwg PDwgMTYgfTsKCgogIGNsYXNzIGlvc19iYXNlCiAgewogIHB1YmxpYzoKCgogICAgY2xhc3MgZmFp bHVyZSA6IHB1YmxpYyBleGNlcHRpb24KICAgIHsKICAgIHB1YmxpYzoKCgogICAgICBleHBsaWNp dAogICAgICBmYWlsdXJlKGNvbnN0IHN0cmluZyYgX19zdHIpIHRocm93KCk7CgoKCiAgICAgIHZp cnR1YWwKICAgICAgfmZhaWx1cmUoKSB0aHJvdygpOwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFy KgogICAgICB3aGF0KCkgY29uc3QgdGhyb3coKTsKCiAgICBwcml2YXRlOgogICAgICBlbnVtIHsg X01fYnVmc2l6ZSA9IDI1NiB9OwogICAgICBjaGFyIF9NX25hbWVbX01fYnVmc2l6ZV07CgogICAg fTsKCgogICAgdHlwZWRlZiBfSW9zX0ZtdGZsYWdzIGZtdGZsYWdzOwoKICAgIHN0YXRpYyBjb25z dCBmbXRmbGFncyBib29sYWxwaGEgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1NfYm9vbGFscGhh KTsKICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBkZWMgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6 X1NfZGVjKTsKICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBmaXhlZCA9IGZtdGZsYWdzKF9faW9z X2ZsYWdzOjpfU19maXhlZCk7CiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3MgaGV4ID0gZm10Zmxh Z3MoX19pb3NfZmxhZ3M6Ol9TX2hleCk7CiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3MgaW50ZXJu YWwgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1NfaW50ZXJuYWwpOwogICAgc3RhdGljIGNvbnN0 IGZtdGZsYWdzIGxlZnQgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1NfbGVmdCk7CiAgICBzdGF0 aWMgY29uc3QgZm10ZmxhZ3Mgb2N0ID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX29jdCk7CiAg ICBzdGF0aWMgY29uc3QgZm10ZmxhZ3MgcmlnaHQgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1Nf cmlnaHQpOwogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIHNjaWVudGlmaWMgPSBmbXRmbGFncyhf X2lvc19mbGFnczo6X1Nfc2NpZW50aWZpYyk7CiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3Mgc2hv d2Jhc2UgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1Nfc2hvd2Jhc2UpOwogICAgc3RhdGljIGNv bnN0IGZtdGZsYWdzIHNob3dwb2ludCA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU19zaG93cG9p bnQpOwogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIHNob3dwb3MgPSBmbXRmbGFncyhfX2lvc19m bGFnczo6X1Nfc2hvd3Bvcyk7CiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3Mgc2tpcHdzID0gZm10 ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX3NraXB3cyk7CiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3Mg dW5pdGJ1ZiA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU191bml0YnVmKTsKICAgIHN0YXRpYyBj b25zdCBmbXRmbGFncyB1cHBlcmNhc2UgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1NfdXBwZXJj YXNlKTsKICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBhZGp1c3RmaWVsZCA9IGZtdGZsYWdzKF9f aW9zX2ZsYWdzOjpfU19hZGp1c3RmaWVsZCk7CiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3MgYmFz ZWZpZWxkID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX2Jhc2VmaWVsZCk7CiAgICBzdGF0aWMg Y29uc3QgZm10ZmxhZ3MgZmxvYXRmaWVsZCA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU19mbG9h dGZpZWxkKTsKCgogICAgdHlwZWRlZiBfSW9zX0lvc3RhdGUgaW9zdGF0ZTsKICAgIHN0YXRpYyBj b25zdCBpb3N0YXRlIGJhZGJpdCA9IGlvc3RhdGUoX19pb3NfZmxhZ3M6Ol9TX2JhZGJpdCk7CiAg ICBzdGF0aWMgY29uc3QgaW9zdGF0ZSBlb2ZiaXQgPSBpb3N0YXRlKF9faW9zX2ZsYWdzOjpfU19l b2ZiaXQpOwogICAgc3RhdGljIGNvbnN0IGlvc3RhdGUgZmFpbGJpdCA9IGlvc3RhdGUoX19pb3Nf ZmxhZ3M6Ol9TX2ZhaWxiaXQpOwogICAgc3RhdGljIGNvbnN0IGlvc3RhdGUgZ29vZGJpdCA9IGlv c3RhdGUoMCk7CgoKICAgIHR5cGVkZWYgX0lvc19PcGVubW9kZSBvcGVubW9kZTsKICAgIHN0YXRp YyBjb25zdCBvcGVubW9kZSBhcHAgPSBvcGVubW9kZShfX2lvc19mbGFnczo6X1NfYXBwKTsKICAg IHN0YXRpYyBjb25zdCBvcGVubW9kZSBhdGUgPSBvcGVubW9kZShfX2lvc19mbGFnczo6X1NfYXRl KTsKICAgIHN0YXRpYyBjb25zdCBvcGVubW9kZSBiaW5hcnkgPSBvcGVubW9kZShfX2lvc19mbGFn czo6X1NfYmluKTsKICAgIHN0YXRpYyBjb25zdCBvcGVubW9kZSBpbiA9IG9wZW5tb2RlKF9faW9z X2ZsYWdzOjpfU19pbik7CiAgICBzdGF0aWMgY29uc3Qgb3Blbm1vZGUgb3V0ID0gb3Blbm1vZGUo X19pb3NfZmxhZ3M6Ol9TX291dCk7CiAgICBzdGF0aWMgY29uc3Qgb3Blbm1vZGUgdHJ1bmMgPSBv cGVubW9kZShfX2lvc19mbGFnczo6X1NfdHJ1bmMpOwoKCiAgICB0eXBlZGVmIF9Jb3NfU2Vla2Rp ciBzZWVrZGlyOwogICAgc3RhdGljIGNvbnN0IHNlZWtkaXIgYmVnID0gc2Vla2RpcigwKTsKICAg IHN0YXRpYyBjb25zdCBzZWVrZGlyIGN1ciA9IHNlZWtkaXIoMSk7CiAgICBzdGF0aWMgY29uc3Qg c2Vla2RpciBlbmQgPSBzZWVrZGlyKDIpOwojIDIyNiAiL3Vzci9jeWdudXMvYmluLy4uL2luY2x1 ZGUvYysrLzMuMS4xL2JpdHMvaW9zX2Jhc2UuaCIgMwogICAgZW51bSBldmVudAogICAgewogICAg ICBlcmFzZV9ldmVudCwKICAgICAgaW1idWVfZXZlbnQsCiAgICAgIGNvcHlmbXRfZXZlbnQKICAg IH07CgogICAgdHlwZWRlZiB2b2lkICgqZXZlbnRfY2FsbGJhY2spIChldmVudCwgaW9zX2Jhc2Um LCBpbnQpOwoKICAgIHZvaWQKICAgIHJlZ2lzdGVyX2NhbGxiYWNrKGV2ZW50X2NhbGxiYWNrIF9f Zm4sIGludCBfX2luZGV4KTsKCiAgcHJvdGVjdGVkOgoKICAgIHN0cmVhbXNpemUgX01fcHJlY2lz aW9uOwogICAgc3RyZWFtc2l6ZSBfTV93aWR0aDsKICAgIGZtdGZsYWdzIF9NX2ZsYWdzOwogICAg aW9zdGF0ZSBfTV9leGNlcHRpb247CiAgICBpb3N0YXRlIF9NX3N0cmVhbWJ1Zl9zdGF0ZTsKCgoK ICAgIHN0cnVjdCBfQ2FsbGJhY2tfbGlzdAogICAgewoKICAgICAgX0NhbGxiYWNrX2xpc3QqIF9N X25leHQ7CiAgICAgIGlvc19iYXNlOjpldmVudF9jYWxsYmFjayBfTV9mbjsKICAgICAgaW50IF9N X2luZGV4OwogICAgICBfQXRvbWljX3dvcmQgX01fcmVmY291bnQ7CgogICAgICBfQ2FsbGJhY2tf bGlzdChpb3NfYmFzZTo6ZXZlbnRfY2FsbGJhY2sgX19mbiwgaW50IF9faW5kZXgsCiAgICAgICAg ICAgICAgICAgICAgIF9DYWxsYmFja19saXN0KiBfX2NiKQogICAgICA6IF9NX25leHQoX19jYiks IF9NX2ZuKF9fZm4pLCBfTV9pbmRleChfX2luZGV4KSwgX01fcmVmY291bnQoMCkgeyB9CgogICAg ICB2b2lkCiAgICAgIF9NX2FkZF9yZWZlcmVuY2UoKSB7IF9fYXRvbWljX2FkZCgmX01fcmVmY291 bnQsIDEpOyB9CgoKICAgICAgaW50CiAgICAgIF9NX3JlbW92ZV9yZWZlcmVuY2UoKSB7IHJldHVy biBfX2V4Y2hhbmdlX2FuZF9hZGQoJl9NX3JlZmNvdW50LCAtMSk7IH0KICAgIH07CgogICAgIF9D YWxsYmFja19saXN0KiBfTV9jYWxsYmFja3M7CgogICAgdm9pZAogICAgX01fY2FsbF9jYWxsYmFj a3MoZXZlbnQgX19ldikgdGhyb3coKTsKCiAgICB2b2lkCiAgICBfTV9kaXNwb3NlX2NhbGxiYWNr cyh2b2lkKTsKCgogICAgc3RydWN0IF9Xb3JkcwogICAgewogICAgICB2b2lkKiBfTV9wd29yZDsK ICAgICAgbG9uZyBfTV9pd29yZDsKICAgICAgX1dvcmRzKCkgOiBfTV9wd29yZCgwKSwgX01faXdv cmQoMCkgeyB9CiAgICB9OwoKCiAgICBfV29yZHMgX01fd29yZF96ZXJvOwoKCiAgICBzdGF0aWMg Y29uc3QgaW50IF9TX2xvY2FsX3dvcmRfc2l6ZSA9IDg7CiAgICBfV29yZHMgX01fbG9jYWxfd29y ZFtfU19sb2NhbF93b3JkX3NpemVdOwoKCiAgICBpbnQgX01fd29yZF9zaXplOwogICAgX1dvcmRz KiBfTV93b3JkOwoKICAgIF9Xb3JkcyYKICAgIF9NX2dyb3dfd29yZHMoaW50IF9faW5kZXgpOwoK CiAgICBsb2NhbGUgX01faW9zX2xvY2FsZTsKCiAgICB2b2lkCiAgICBfTV9pbml0KCk7CgogIHB1 YmxpYzoKCgoKCgogICAgY2xhc3MgSW5pdAogICAgewogICAgICBmcmllbmQgY2xhc3MgaW9zX2Jh c2U7CiAgICBwdWJsaWM6CiAgICAgIEluaXQoKTsKICAgICAgfkluaXQoKTsKCiAgICAgIHN0YXRp YyB2b2lkCiAgICAgIF9TX2lvc19jcmVhdGUoYm9vbCBfX3N5bmMpOwoKICAgICAgc3RhdGljIHZv aWQKICAgICAgX1NfaW9zX2Rlc3Ryb3koKTsKCiAgICBwcml2YXRlOgogICAgICBzdGF0aWMgaW50 IF9TX2lvc19iYXNlX2luaXQ7CiAgICAgIHN0YXRpYyBib29sIF9TX3N5bmNlZF93aXRoX3N0ZGlv OwogICAgfTsKCgogICAgaW5saW5lIGZtdGZsYWdzCiAgICBmbGFncygpIGNvbnN0IHsgcmV0dXJu IF9NX2ZsYWdzOyB9CgogICAgaW5saW5lIGZtdGZsYWdzCiAgICBmbGFncyhmbXRmbGFncyBfX2Zt dGZsKQogICAgewogICAgICBmbXRmbGFncyBfX29sZCA9IF9NX2ZsYWdzOwogICAgICBfTV9mbGFn cyA9IF9fZm10Zmw7CiAgICAgIHJldHVybiBfX29sZDsKICAgIH0KCiAgICBpbmxpbmUgZm10Zmxh Z3MKICAgIHNldGYoZm10ZmxhZ3MgX19mbXRmbCkKICAgIHsKICAgICAgZm10ZmxhZ3MgX19vbGQg PSBfTV9mbGFnczsKICAgICAgX01fZmxhZ3MgfD0gX19mbXRmbDsKICAgICAgcmV0dXJuIF9fb2xk OwogICAgfQoKICAgIGlubGluZSBmbXRmbGFncwogICAgc2V0ZihmbXRmbGFncyBfX2ZtdGZsLCBm bXRmbGFncyBfX21hc2spCiAgICB7CiAgICAgIGZtdGZsYWdzIF9fb2xkID0gX01fZmxhZ3M7CiAg ICAgIF9NX2ZsYWdzICY9IH5fX21hc2s7CiAgICAgIF9NX2ZsYWdzIHw9IChfX2ZtdGZsICYgX19t YXNrKTsKICAgICAgcmV0dXJuIF9fb2xkOwogICAgfQoKICAgIGlubGluZSB2b2lkCiAgICB1bnNl dGYoZm10ZmxhZ3MgX19tYXNrKSB7IF9NX2ZsYWdzICY9IH5fX21hc2s7IH0KCiAgICBpbmxpbmUg c3RyZWFtc2l6ZQogICAgcHJlY2lzaW9uKCkgY29uc3QgeyByZXR1cm4gX01fcHJlY2lzaW9uOyB9 CgogICAgaW5saW5lIHN0cmVhbXNpemUKICAgIHByZWNpc2lvbihzdHJlYW1zaXplIF9fcHJlYykK ICAgIHsKICAgICAgc3RyZWFtc2l6ZSBfX29sZCA9IF9NX3ByZWNpc2lvbjsKICAgICAgX01fcHJl Y2lzaW9uID0gX19wcmVjOwogICAgICByZXR1cm4gX19vbGQ7CiAgICB9CgogICAgaW5saW5lIHN0 cmVhbXNpemUKICAgIHdpZHRoKCkgY29uc3QgeyByZXR1cm4gX01fd2lkdGg7IH0KCiAgICBpbmxp bmUgc3RyZWFtc2l6ZQogICAgd2lkdGgoc3RyZWFtc2l6ZSBfX3dpZGUpCiAgICB7CiAgICAgIHN0 cmVhbXNpemUgX19vbGQgPSBfTV93aWR0aDsKICAgICAgX01fd2lkdGggPSBfX3dpZGU7CiAgICAg IHJldHVybiBfX29sZDsKICAgIH0KCiAgICBzdGF0aWMgYm9vbAogICAgc3luY193aXRoX3N0ZGlv KGJvb2wgX19zeW5jID0gdHJ1ZSk7CgoKICAgIGxvY2FsZQogICAgaW1idWUoY29uc3QgbG9jYWxl JiBfX2xvYyk7CgogICAgaW5saW5lIGxvY2FsZQogICAgZ2V0bG9jKCkgY29uc3QgeyByZXR1cm4g X01faW9zX2xvY2FsZTsgfQoKCiAgICBzdGF0aWMgaW50CiAgICB4YWxsb2MoKSB0aHJvdygpOwoK ICAgIGlubGluZSBsb25nJgogICAgaXdvcmQoaW50IF9faXgpCiAgICB7CiAgICAgIF9Xb3JkcyYg X193b3JkID0gKF9faXggPCBfTV93b3JkX3NpemUpCiAgICAgICAgICAgICAgICAgICAgICAgID8g X01fd29yZFtfX2l4XSA6IF9NX2dyb3dfd29yZHMoX19peCk7CiAgICAgIHJldHVybiBfX3dvcmQu X01faXdvcmQ7CiAgICB9CgogICAgaW5saW5lIHZvaWQqJgogICAgcHdvcmQoaW50IF9faXgpCiAg ICB7CiAgICAgIF9Xb3JkcyYgX193b3JkID0gKF9faXggPCBfTV93b3JkX3NpemUpCiAgICAgICAg ICAgICAgICAgICAgICAgID8gX01fd29yZFtfX2l4XSA6IF9NX2dyb3dfd29yZHMoX19peCk7CiAg ICAgIHJldHVybiBfX3dvcmQuX01fcHdvcmQ7CiAgICB9CgoKICAgIH5pb3NfYmFzZSgpOwoKICBw cm90ZWN0ZWQ6CiAgICBpb3NfYmFzZSgpOwoKCgogIHByaXZhdGU6CiAgICBpb3NfYmFzZShjb25z dCBpb3NfYmFzZSYpOwoKICAgIGlvc19iYXNlJgogICAgb3BlcmF0b3I9KGNvbnN0IGlvc19iYXNl Jik7CgogIH07CgoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgYm9vbGFscGhhKGlvc19iYXNlJiBfX2Jh c2UpCiAgewogICAgX19iYXNlLnNldGYoaW9zX2Jhc2U6OmJvb2xhbHBoYSk7CiAgICByZXR1cm4g X19iYXNlOwogIH0KCiAgaW5saW5lIGlvc19iYXNlJgogIG5vYm9vbGFscGhhKGlvc19iYXNlJiBf X2Jhc2UpCiAgewogICAgX19iYXNlLnVuc2V0Zihpb3NfYmFzZTo6Ym9vbGFscGhhKTsKICAgIHJl dHVybiBfX2Jhc2U7CiAgfQoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgc2hvd2Jhc2UoaW9zX2Jhc2Um IF9fYmFzZSkKICB7CiAgICBfX2Jhc2Uuc2V0Zihpb3NfYmFzZTo6c2hvd2Jhc2UpOwogICAgcmV0 dXJuIF9fYmFzZTsKICB9CgogIGlubGluZSBpb3NfYmFzZSYKICBub3Nob3diYXNlKGlvc19iYXNl JiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnVuc2V0Zihpb3NfYmFzZTo6c2hvd2Jhc2UpOwogICAg cmV0dXJuIF9fYmFzZTsKICB9CgogIGlubGluZSBpb3NfYmFzZSYKICBzaG93cG9pbnQoaW9zX2Jh c2UmIF9fYmFzZSkKICB7CiAgICBfX2Jhc2Uuc2V0Zihpb3NfYmFzZTo6c2hvd3BvaW50KTsKICAg IHJldHVybiBfX2Jhc2U7CiAgfQoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgbm9zaG93cG9pbnQoaW9z X2Jhc2UmIF9fYmFzZSkKICB7CiAgICBfX2Jhc2UudW5zZXRmKGlvc19iYXNlOjpzaG93cG9pbnQp OwogICAgcmV0dXJuIF9fYmFzZTsKICB9CgogIGlubGluZSBpb3NfYmFzZSYKICBzaG93cG9zKGlv c19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnNldGYoaW9zX2Jhc2U6OnNob3dwb3MpOwog ICAgcmV0dXJuIF9fYmFzZTsKICB9CgogIGlubGluZSBpb3NfYmFzZSYKICBub3Nob3dwb3MoaW9z X2Jhc2UmIF9fYmFzZSkKICB7CiAgICBfX2Jhc2UudW5zZXRmKGlvc19iYXNlOjpzaG93cG9zKTsK ICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgc2tpcHdzKGlvc19i YXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnNldGYoaW9zX2Jhc2U6OnNraXB3cyk7CiAgICBy ZXR1cm4gX19iYXNlOwogIH0KCiAgaW5saW5lIGlvc19iYXNlJgogIG5vc2tpcHdzKGlvc19iYXNl JiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnVuc2V0Zihpb3NfYmFzZTo6c2tpcHdzKTsKICAgIHJl dHVybiBfX2Jhc2U7CiAgfQoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgdXBwZXJjYXNlKGlvc19iYXNl JiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnNldGYoaW9zX2Jhc2U6OnVwcGVyY2FzZSk7CiAgICBy ZXR1cm4gX19iYXNlOwogIH0KCiAgaW5saW5lIGlvc19iYXNlJgogIG5vdXBwZXJjYXNlKGlvc19i YXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnVuc2V0Zihpb3NfYmFzZTo6dXBwZXJjYXNlKTsK ICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgdW5pdGJ1Zihpb3Nf YmFzZSYgX19iYXNlKQogIHsKICAgICBfX2Jhc2Uuc2V0Zihpb3NfYmFzZTo6dW5pdGJ1Zik7CiAg ICAgcmV0dXJuIF9fYmFzZTsKICB9CgogIGlubGluZSBpb3NfYmFzZSYKICBub3VuaXRidWYoaW9z X2Jhc2UmIF9fYmFzZSkKICB7CiAgICAgX19iYXNlLnVuc2V0Zihpb3NfYmFzZTo6dW5pdGJ1Zik7 CiAgICAgcmV0dXJuIF9fYmFzZTsKICB9CgoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgaW50ZXJuYWwo aW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICAgX19iYXNlLnNldGYoaW9zX2Jhc2U6OmludGVybmFs LCBpb3NfYmFzZTo6YWRqdXN0ZmllbGQpOwogICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKICBpbmxp bmUgaW9zX2Jhc2UmCiAgbGVmdChpb3NfYmFzZSYgX19iYXNlKQogIHsKICAgIF9fYmFzZS5zZXRm KGlvc19iYXNlOjpsZWZ0LCBpb3NfYmFzZTo6YWRqdXN0ZmllbGQpOwogICAgcmV0dXJuIF9fYmFz ZTsKICB9CgogIGlubGluZSBpb3NfYmFzZSYKICByaWdodChpb3NfYmFzZSYgX19iYXNlKQogIHsK ICAgIF9fYmFzZS5zZXRmKGlvc19iYXNlOjpyaWdodCwgaW9zX2Jhc2U6OmFkanVzdGZpZWxkKTsK ICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKCiAgaW5saW5lIGlvc19iYXNlJgogIGRlYyhpb3NfYmFz ZSYgX19iYXNlKQogIHsKICAgIF9fYmFzZS5zZXRmKGlvc19iYXNlOjpkZWMsIGlvc19iYXNlOjpi YXNlZmllbGQpOwogICAgcmV0dXJuIF9fYmFzZTsKICB9CgogIGlubGluZSBpb3NfYmFzZSYKICBo ZXgoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICBfX2Jhc2Uuc2V0Zihpb3NfYmFzZTo6aGV4LCBp b3NfYmFzZTo6YmFzZWZpZWxkKTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKICBpbmxpbmUgaW9z X2Jhc2UmCiAgb2N0KGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnNldGYoaW9zX2Jh c2U6Om9jdCwgaW9zX2Jhc2U6OmJhc2VmaWVsZCk7CiAgICByZXR1cm4gX19iYXNlOwogIH0KCgog IGlubGluZSBpb3NfYmFzZSYKICBmaXhlZChpb3NfYmFzZSYgX19iYXNlKQogIHsKICAgIF9fYmFz ZS5zZXRmKGlvc19iYXNlOjpmaXhlZCwgaW9zX2Jhc2U6OmZsb2F0ZmllbGQpOwogICAgcmV0dXJu IF9fYmFzZTsKICB9CgogIGlubGluZSBpb3NfYmFzZSYKICBzY2llbnRpZmljKGlvc19iYXNlJiBf X2Jhc2UpCiAgewogICAgX19iYXNlLnNldGYoaW9zX2Jhc2U6OnNjaWVudGlmaWMsIGlvc19iYXNl OjpmbG9hdGZpZWxkKTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKfQojIDUwICIvdXNyL2N5Z251 cy9iaW4vLi4vaW5jbHVkZS9jKysvMy4xLjEvaW9zIiAyIDMKIyAxICIvdXNyL2N5Z251cy9iaW4v Li4vaW5jbHVkZS9jKysvMy4xLjEvc3RyZWFtYnVmIiAxIDMKIyA0NCAiL3Vzci9jeWdudXMvYmlu Ly4uL2luY2x1ZGUvYysrLzMuMS4xL3N0cmVhbWJ1ZiIgMwoKCgoKCgoKbmFtZXNwYWNlIHN0ZAp7 CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgc3RyZWFt c2l6ZQogICAgX19jb3B5X3N0cmVhbWJ1ZnMoYmFzaWNfaW9zPF9DaGFyVCwgX1RyYWl0cz4mIF9p b3MsCiAgICAgICAgICAgICAgICAgICAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRz PiogX19zYmluLAogICAgICAgICAgICAgICAgICAgICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwg X1RyYWl0cz4qIF9fc2JvdXQpOwoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt ZSBfVHJhaXRzPgogICAgY2xhc3MgYmFzaWNfc3RyZWFtYnVmCiAgICB7CiAgICBwdWJsaWM6Cgog ICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgX1RyYWl0cyB0cmFp dHNfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfdHlwZTo6aW50X3R5cGUgaW50 X3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX3R5cGU6OnBvc190eXBlIHBvc190 eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c190eXBlOjpvZmZfdHlwZSBvZmZfdHlw ZTsKCgogICAgICB0eXBlZGVmIGN0eXBlPGNoYXJfdHlwZT4gX19jdHlwZV90eXBlOwogICAgICB0 eXBlZGVmIGJhc2ljX3N0cmVhbWJ1ZjxjaGFyX3R5cGUsIHRyYWl0c190eXBlPiBfX3N0cmVhbWJ1 Zl90eXBlOwoKICAgICAgZnJpZW5kIGNsYXNzIGJhc2ljX2lvczxjaGFyX3R5cGUsIHRyYWl0c190 eXBlPjsKICAgICAgZnJpZW5kIGNsYXNzIGJhc2ljX2lzdHJlYW08Y2hhcl90eXBlLCB0cmFpdHNf dHlwZT47CiAgICAgIGZyaWVuZCBjbGFzcyBiYXNpY19vc3RyZWFtPGNoYXJfdHlwZSwgdHJhaXRz X3R5cGU+OwogICAgICBmcmllbmQgY2xhc3MgaXN0cmVhbWJ1Zl9pdGVyYXRvcjxjaGFyX3R5cGUs IHRyYWl0c190eXBlPjsKICAgICAgZnJpZW5kIGNsYXNzIG9zdHJlYW1idWZfaXRlcmF0b3I8Y2hh cl90eXBlLCB0cmFpdHNfdHlwZT47CgogICAgICBmcmllbmQgc3RyZWFtc2l6ZQogICAgICBfX2Nv cHlfc3RyZWFtYnVmczw+KGJhc2ljX2lvczxjaGFyX3R5cGUsIHRyYWl0c190eXBlPiYgX19pb3Ms CiAgICAgICAgICAgICAgICAgICAgICAgICAgX19zdHJlYW1idWZfdHlwZSogX19zYmluLF9fc3Ry ZWFtYnVmX3R5cGUqIF9fc2JvdXQpOwoKICAgIHByb3RlY3RlZDoKCgoKCgogICAgICBjaGFyX3R5 cGUqIF9NX2J1ZjsKCgogICAgICBpbnRfdHlwZSBfTV9idWZfc2l6ZTsKCgogICAgICBpbnRfdHlw ZSBfTV9idWZfc2l6ZV9vcHQ7CgoKCiAgICAgIGJvb2wgX01fYnVmX3VuaWZpZWQ7CgoKCgoKCiAg ICAgIGNoYXJfdHlwZSogX01faW5fYmVnOwogICAgICBjaGFyX3R5cGUqIF9NX2luX2N1cjsKICAg ICAgY2hhcl90eXBlKiBfTV9pbl9lbmQ7CiAgICAgIGNoYXJfdHlwZSogX01fb3V0X2JlZzsKICAg ICAgY2hhcl90eXBlKiBfTV9vdXRfY3VyOwogICAgICBjaGFyX3R5cGUqIF9NX291dF9lbmQ7CgoK ICAgICAgaW9zX2Jhc2U6Om9wZW5tb2RlIF9NX21vZGU7CgoKICAgICAgbG9jYWxlIF9NX2J1Zl9s b2NhbGU7CgoKICAgICAgYm9vbCBfTV9idWZfbG9jYWxlX2luaXQ7CgoKCgoKCiAgICAgIHN0YXRp YyBjb25zdCBpbnRfdHlwZSBfU19wYmFja19zaXplID0gMTsKICAgICAgY2hhcl90eXBlIF9NX3Bi YWNrW19TX3BiYWNrX3NpemVdOwogICAgICBjaGFyX3R5cGUqIF9NX3BiYWNrX2N1cl9zYXZlOwog ICAgICBjaGFyX3R5cGUqIF9NX3BiYWNrX2VuZF9zYXZlOwogICAgICBib29sIF9NX3BiYWNrX2lu aXQ7CgoKCgogICAgICB2b2lkCiAgICAgIF9NX3BiYWNrX2NyZWF0ZSgpCiAgICAgIHsKICAgICAg ICBpZiAoIV9NX3BiYWNrX2luaXQpCiAgICAgICAgICB7CiAgICAgICAgICAgIGludF90eXBlIF9f ZGlzdCA9IF9NX2luX2VuZCAtIF9NX2luX2N1cjsKICAgICAgICAgICAgaW50X3R5cGUgX19sZW4g PSBtaW4oX1NfcGJhY2tfc2l6ZSwgX19kaXN0KTsKICAgICAgICAgICAgdHJhaXRzX3R5cGU6OmNv cHkoX01fcGJhY2ssIF9NX2luX2N1ciwgX19sZW4pOwogICAgICAgICAgICBfTV9wYmFja19jdXJf c2F2ZSA9IF9NX2luX2N1cjsKICAgICAgICAgICAgX01fcGJhY2tfZW5kX3NhdmUgPSBfTV9pbl9l bmQ7CiAgICAgICAgICAgIHRoaXMtPnNldGcoX01fcGJhY2ssIF9NX3BiYWNrLCBfTV9wYmFjayAr IF9fbGVuKTsKICAgICAgICAgICAgX01fcGJhY2tfaW5pdCA9IHRydWU7CiAgICAgICAgICB9CiAg ICAgIH0KCgoKCiAgICAgIHZvaWQKICAgICAgX01fcGJhY2tfZGVzdHJveSgpCiAgICAgIHsKICAg ICAgICBpZiAoX01fcGJhY2tfaW5pdCkKICAgICAgICAgIHsKCiAgICAgICAgICAgIGludF90eXBl IF9fb2ZmX2N1ciA9IF9NX2luX2N1ciAtIF9NX3BiYWNrOwoKCiAgICAgICAgICAgIGludF90eXBl IF9fb2ZmX2VuZCA9IDA7CiAgICAgICAgICAgIGludF90eXBlIF9fcGJhY2tfbGVuID0gX01faW5f ZW5kIC0gX01fcGJhY2s7CiAgICAgICAgICAgIGludF90eXBlIF9fc2F2ZV9sZW4gPSBfTV9wYmFj a19lbmRfc2F2ZSAtIF9NX2J1ZjsKICAgICAgICAgICAgaWYgKF9fcGJhY2tfbGVuID4gX19zYXZl X2xlbikKICAgICAgICAgICAgICBfX29mZl9lbmQgPSBfX3BiYWNrX2xlbiAtIF9fc2F2ZV9sZW47 CgogICAgICAgICAgICB0aGlzLT5zZXRnKF9NX2J1ZiwgX01fcGJhY2tfY3VyX3NhdmUgKyBfX29m Zl9jdXIsCiAgICAgICAgICAgICAgICAgICAgICAgX01fcGJhY2tfZW5kX3NhdmUgKyBfX29mZl9l bmQpOwogICAgICAgICAgICBfTV9wYmFja19jdXJfc2F2ZSA9IF9fbnVsbDsKICAgICAgICAgICAg X01fcGJhY2tfZW5kX3NhdmUgPSBfX251bGw7CiAgICAgICAgICAgIF9NX3BiYWNrX2luaXQgPSBm YWxzZTsKICAgICAgICAgIH0KICAgICAgfQoKCgogICAgICB2b2lkCiAgICAgIF9NX2luX2N1cl9t b3ZlKG9mZl90eXBlIF9fbikKICAgICAgewogICAgICAgIGJvb2wgX190ZXN0b3V0ID0gX01fb3V0 X2N1cjsKICAgICAgICBfTV9pbl9jdXIgKz0gX19uOwogICAgICAgIGlmIChfX3Rlc3RvdXQgJiYg X01fYnVmX3VuaWZpZWQpCiAgICAgICAgICBfTV9vdXRfY3VyICs9IF9fbjsKICAgICAgfQojIDE5 OCAiL3Vzci9jeWdudXMvYmluLy4uL2luY2x1ZGUvYysrLzMuMS4xL3N0cmVhbWJ1ZiIgMwogICAg ICB2b2lkCiAgICAgIF9NX291dF9jdXJfbW92ZShvZmZfdHlwZSBfX24pCiAgICAgIHsKICAgICAg ICBib29sIF9fdGVzdGluID0gX01faW5fY3VyOwoKICAgICAgICBfTV9vdXRfY3VyICs9IF9fbjsK ICAgICAgICBpZiAoX190ZXN0aW4gJiYgX01fYnVmX3VuaWZpZWQpCiAgICAgICAgICBfTV9pbl9j dXIgKz0gX19uOwogICAgICAgIGlmIChfTV9vdXRfY3VyID4gX01fb3V0X2VuZCkKICAgICAgICAg IHsKICAgICAgICAgICAgX01fb3V0X2VuZCA9IF9NX291dF9jdXI7CgogICAgICAgICAgICBpZiAo X190ZXN0aW4pCiAgICAgICAgICAgICAgX01faW5fZW5kICs9IF9fbjsKICAgICAgICAgIH0KICAg ICAgfQoKCgoKICAgICAgb2ZmX3R5cGUKICAgICAgX01fb3V0X2J1Zl9zaXplKCkKICAgICAgewog ICAgICAgIG9mZl90eXBlIF9fcmV0ID0gMDsKICAgICAgICBpZiAoX01fb3V0X2N1cikKICAgICAg ICAgIHsKCiAgICAgICAgICAgIGlmIChfTV9vdXRfYmVnID09IF9NX2J1ZikKICAgICAgICAgICAg ICBfX3JldCA9IF9NX291dF9iZWcgKyBfTV9idWZfc2l6ZSAtIF9NX291dF9jdXI7CgogICAgICAg ICAgICBlbHNlCiAgICAgICAgICAgICAgX19yZXQgPSBfTV9vdXRfZW5kIC0gX01fb3V0X2N1cjsK ICAgICAgICAgIH0KICAgICAgICByZXR1cm4gX19yZXQ7CiAgICAgIH0KCiAgcHVibGljOgogICAg ICB2aXJ0dWFsCiAgICAgIH5iYXNpY19zdHJlYW1idWYoKQogICAgICB7CiAgICAgICAgX01fYnVm X3VuaWZpZWQgPSBmYWxzZTsKICAgICAgICBfTV9idWZfc2l6ZSA9IDA7CiAgICAgICAgX01fYnVm X3NpemVfb3B0ID0gMDsKICAgICAgICBfTV9tb2RlID0gaW9zX2Jhc2U6Om9wZW5tb2RlKDApOwog ICAgICAgIF9NX2J1Zl9sb2NhbGVfaW5pdCA9IGZhbHNlOwogICAgICB9CgoKICAgICAgbG9jYWxl CiAgICAgIHB1YmltYnVlKGNvbnN0IGxvY2FsZSAmX19sb2MpCiAgICAgIHsKICAgICAgICBsb2Nh bGUgX190bXAodGhpcy0+Z2V0bG9jKCkpOwogICAgICAgIHRoaXMtPmltYnVlKF9fbG9jKTsKICAg ICAgICByZXR1cm4gX190bXA7CiAgICAgIH0KCiAgICAgIGxvY2FsZQogICAgICBnZXRsb2MoKSBj b25zdAogICAgICB7CiAgICAgICAgaWYgKF9NX2J1Zl9sb2NhbGVfaW5pdCkKICAgICAgICAgIHJl dHVybiBfTV9idWZfbG9jYWxlOwogICAgICAgIGVsc2UKICAgICAgICAgIHJldHVybiBsb2NhbGUo KTsKICAgICAgfQoKCiAgICAgIF9fc3RyZWFtYnVmX3R5cGUqCiAgICAgIHB1YnNldGJ1ZihjaGFy X3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pCiAgICAgIHsgcmV0dXJuIHRoaXMtPnNldGJ1Zihf X3MsIF9fbik7IH0KCiAgICAgIHBvc190eXBlCiAgICAgIHB1YnNlZWtvZmYob2ZmX3R5cGUgX19v ZmYsIGlvc19iYXNlOjpzZWVrZGlyIF9fd2F5LAogICAgICAgICAgICAgICAgIGlvc19iYXNlOjpv cGVubW9kZSBfX21vZGUgPSBpb3NfYmFzZTo6aW4gfCBpb3NfYmFzZTo6b3V0KQogICAgICB7IHJl dHVybiB0aGlzLT5zZWVrb2ZmKF9fb2ZmLCBfX3dheSwgX19tb2RlKTsgfQoKICAgICAgcG9zX3R5 cGUKICAgICAgcHVic2Vla3Bvcyhwb3NfdHlwZSBfX3NwLAogICAgICAgICAgICAgICAgIGlvc19i YXNlOjpvcGVubW9kZSBfX21vZGUgPSBpb3NfYmFzZTo6aW4gfCBpb3NfYmFzZTo6b3V0KQogICAg ICB7IHJldHVybiB0aGlzLT5zZWVrcG9zKF9fc3AsIF9fbW9kZSk7IH0KCiAgICAgIGludAogICAg ICBwdWJzeW5jKCkgeyByZXR1cm4gdGhpcy0+c3luYygpOyB9CgoKCiAgICAgIHN0cmVhbXNpemUK ICAgICAgaW5fYXZhaWwoKQogICAgICB7CiAgICAgICAgc3RyZWFtc2l6ZSBfX3JldDsKICAgICAg ICBpZiAoX01faW5fY3VyICYmIF9NX2luX2N1ciA8IF9NX2luX2VuZCkKICAgICAgICAgIHsKICAg ICAgICAgICAgaWYgKF9NX3BiYWNrX2luaXQpCiAgICAgICAgICAgICAgewogICAgICAgICAgICAg ICAgaW50X3R5cGUgX19zYXZlX2xlbiA9IF9NX3BiYWNrX2VuZF9zYXZlIC0gX01fcGJhY2tfY3Vy X3NhdmU7CiAgICAgICAgICAgICAgICBpbnRfdHlwZSBfX3BiYWNrX2xlbiA9IF9NX2luX2N1ciAt IF9NX3BiYWNrOwogICAgICAgICAgICAgICAgX19yZXQgPSBfX3NhdmVfbGVuIC0gX19wYmFja19s ZW47CiAgICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgX19yZXQg PSB0aGlzLT5lZ3B0cigpIC0gdGhpcy0+Z3B0cigpOwogICAgICAgICAgfQogICAgICAgIGVsc2UK ICAgICAgICAgIF9fcmV0ID0gdGhpcy0+c2hvd21hbnljKCk7CiAgICAgICAgcmV0dXJuIF9fcmV0 OwogICAgICB9CgogICAgICBpbnRfdHlwZQogICAgICBzbmV4dGMoKQogICAgICB7CiAgICAgICAg aW50X3R5cGUgX19lb2YgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7CiAgICAgICAgcmV0dXJuICh0aGlz LT5zYnVtcGMoKSA9PSBfX2VvZiA/IF9fZW9mIDogdGhpcy0+c2dldGMoKSk7CiAgICAgIH0KCiAg ICAgIGludF90eXBlCiAgICAgIHNidW1wYygpOwoKICAgICAgaW50X3R5cGUKICAgICAgc2dldGMo KQogICAgICB7CiAgICAgICAgaW50X3R5cGUgX19yZXQ7CiAgICAgICAgaWYgKF9NX2luX2N1ciAm JiBfTV9pbl9jdXIgPCBfTV9pbl9lbmQpCiAgICAgICAgICBfX3JldCA9IHRyYWl0c190eXBlOjp0 b19pbnRfdHlwZSgqKHRoaXMtPmdwdHIoKSkpOwogICAgICAgIGVsc2UKICAgICAgICAgIF9fcmV0 ID0gdGhpcy0+dW5kZXJmbG93KCk7CiAgICAgICAgcmV0dXJuIF9fcmV0OwogICAgICB9CgogICAg ICBzdHJlYW1zaXplCiAgICAgIHNnZXRuKGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbikK ICAgICAgeyByZXR1cm4gdGhpcy0+eHNnZXRuKF9fcywgX19uKTsgfQoKCiAgICAgIGludF90eXBl CiAgICAgIHNwdXRiYWNrYyhjaGFyX3R5cGUgX19jKTsKCiAgICAgIGludF90eXBlCiAgICAgIHN1 bmdldGMoKTsKCgogICAgICBpbnRfdHlwZQogICAgICBzcHV0YyhjaGFyX3R5cGUgX19jKTsKCiAg ICAgIHN0cmVhbXNpemUKICAgICAgc3B1dG4oY29uc3QgY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNp emUgX19uKQogICAgICB7IHJldHVybiB0aGlzLT54c3B1dG4oX19zLCBfX24pOyB9CgogICAgcHJv dGVjdGVkOgogICAgICBiYXNpY19zdHJlYW1idWYoKQogICAgICA6IF9NX2J1ZihfX251bGwpLCBf TV9idWZfc2l6ZSgwKSwKICAgICAgX01fYnVmX3NpemVfb3B0KHN0YXRpY19jYXN0PGludF90eXBl Pig4MTkyKSksIF9NX2J1Zl91bmlmaWVkKGZhbHNlKSwKICAgICAgX01faW5fYmVnKDApLCBfTV9p bl9jdXIoMCksIF9NX2luX2VuZCgwKSwgX01fb3V0X2JlZygwKSwgX01fb3V0X2N1cigwKSwKICAg ICAgX01fb3V0X2VuZCgwKSwgX01fbW9kZShpb3NfYmFzZTo6b3Blbm1vZGUoMCkpLCBfTV9idWZf bG9jYWxlKGxvY2FsZSgpKSwKICAgICAgX01fYnVmX2xvY2FsZV9pbml0KGZhbHNlKSwgX01fcGJh Y2tfY3VyX3NhdmUoMCksIF9NX3BiYWNrX2VuZF9zYXZlKDApLAogICAgICBfTV9wYmFja19pbml0 KGZhbHNlKQogICAgICB7IH0KCgogICAgICBjaGFyX3R5cGUqCiAgICAgIGViYWNrKCkgY29uc3Qg eyByZXR1cm4gX01faW5fYmVnOyB9CgogICAgICBjaGFyX3R5cGUqCiAgICAgIGdwdHIoKSBjb25z dCB7IHJldHVybiBfTV9pbl9jdXI7IH0KCiAgICAgIGNoYXJfdHlwZSoKICAgICAgZWdwdHIoKSBj b25zdCB7IHJldHVybiBfTV9pbl9lbmQ7IH0KCiAgICAgIHZvaWQKICAgICAgZ2J1bXAoaW50IF9f bikgeyBfTV9pbl9jdXIgKz0gX19uOyB9CgogICAgICB2b2lkCiAgICAgIHNldGcoY2hhcl90eXBl KiBfX2diZWcsIGNoYXJfdHlwZSogX19nbmV4dCwgY2hhcl90eXBlKiBfX2dlbmQpCiAgICAgIHsK ICAgICAgICBfTV9pbl9iZWcgPSBfX2diZWc7CiAgICAgICAgX01faW5fY3VyID0gX19nbmV4dDsK ICAgICAgICBfTV9pbl9lbmQgPSBfX2dlbmQ7CiAgICAgICAgaWYgKCEoX01fbW9kZSAmIGlvc19i YXNlOjppbikgJiYgX19nYmVnICYmIF9fZ25leHQgJiYgX19nZW5kKQogICAgICAgICAgX01fbW9k ZSA9IF9NX21vZGUgfCBpb3NfYmFzZTo6aW47CiAgICAgIH0KCgogICAgICBjaGFyX3R5cGUqCiAg ICAgIHBiYXNlKCkgY29uc3QgeyByZXR1cm4gX01fb3V0X2JlZzsgfQoKICAgICAgY2hhcl90eXBl KgogICAgICBwcHRyKCkgY29uc3QgeyByZXR1cm4gX01fb3V0X2N1cjsgfQoKICAgICAgY2hhcl90 eXBlKgogICAgICBlcHB0cigpIGNvbnN0IHsgcmV0dXJuIF9NX291dF9lbmQ7IH0KCiAgICAgIHZv aWQKICAgICAgcGJ1bXAoaW50IF9fbikgeyBfTV9vdXRfY3VyICs9IF9fbjsgfQoKICAgICAgdm9p ZAogICAgICBzZXRwKGNoYXJfdHlwZSogX19wYmVnLCBjaGFyX3R5cGUqIF9fcGVuZCkKICAgICAg ewogICAgICAgIF9NX291dF9iZWcgPSBfTV9vdXRfY3VyID0gX19wYmVnOwogICAgICAgIF9NX291 dF9lbmQgPSBfX3BlbmQ7CiAgICAgICAgaWYgKCEoX01fbW9kZSAmIGlvc19iYXNlOjpvdXQpICYm IF9fcGJlZyAmJiBfX3BlbmQpCiAgICAgICAgICBfTV9tb2RlID0gX01fbW9kZSB8IGlvc19iYXNl OjpvdXQ7CiAgICAgIH0KCgoKICAgICAgdmlydHVhbCB2b2lkCiAgICAgIGltYnVlKGNvbnN0IGxv Y2FsZSYgX19sb2MpCiAgICAgIHsKICAgICAgICBfTV9idWZfbG9jYWxlX2luaXQgPSB0cnVlOwog ICAgICAgIGlmIChfTV9idWZfbG9jYWxlICE9IF9fbG9jKQogICAgICAgICAgX01fYnVmX2xvY2Fs ZSA9IF9fbG9jOwogICAgICB9CgoKICAgICAgdmlydHVhbCBiYXNpY19zdHJlYW1idWY8Y2hhcl90 eXBlLF9UcmFpdHM+KgogICAgICBzZXRidWYoY2hhcl90eXBlKiwgc3RyZWFtc2l6ZSkKICAgICAg eyByZXR1cm4gdGhpczsgfQoKICAgICAgdmlydHVhbCBwb3NfdHlwZQogICAgICBzZWVrb2ZmKG9m Zl90eXBlLCBpb3NfYmFzZTo6c2Vla2RpciwKICAgICAgICAgICAgICBpb3NfYmFzZTo6b3Blbm1v ZGUgPSBpb3NfYmFzZTo6aW4gfCBpb3NfYmFzZTo6b3V0KQogICAgICB7IHJldHVybiBwb3NfdHlw ZShvZmZfdHlwZSgtMSkpOyB9CgogICAgICB2aXJ0dWFsIHBvc190eXBlCiAgICAgIHNlZWtwb3Mo cG9zX3R5cGUsCiAgICAgICAgICAgICAgaW9zX2Jhc2U6Om9wZW5tb2RlID0gaW9zX2Jhc2U6Omlu IHwgaW9zX2Jhc2U6Om91dCkKICAgICAgeyByZXR1cm4gcG9zX3R5cGUob2ZmX3R5cGUoLTEpKTsg fQoKICAgICAgdmlydHVhbCBpbnQKICAgICAgc3luYygpIHsgcmV0dXJuIDA7IH0KCgogICAgICB2 aXJ0dWFsIHN0cmVhbXNpemUKICAgICAgc2hvd21hbnljKCkgeyByZXR1cm4gMDsgfQoKICAgICAg dmlydHVhbCBzdHJlYW1zaXplCiAgICAgIHhzZ2V0bihjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6 ZSBfX24pOwoKICAgICAgdmlydHVhbCBpbnRfdHlwZQogICAgICB1bmRlcmZsb3coKQogICAgICB7 IHJldHVybiB0cmFpdHNfdHlwZTo6ZW9mKCk7IH0KCiAgICAgIHZpcnR1YWwgaW50X3R5cGUKICAg ICAgdWZsb3coKQogICAgICB7CiAgICAgICAgaW50X3R5cGUgX19yZXQgPSB0cmFpdHNfdHlwZTo6 ZW9mKCk7CiAgICAgICAgYm9vbCBfX3Rlc3Rlb2YgPSB0aGlzLT51bmRlcmZsb3coKSA9PSBfX3Jl dDsKICAgICAgICBib29sIF9fdGVzdHBlbmRpbmcgPSBfTV9pbl9jdXIgJiYgX01faW5fY3VyIDwg X01faW5fZW5kOwogICAgICAgIGlmICghX190ZXN0ZW9mICYmIF9fdGVzdHBlbmRpbmcpCiAgICAg ICAgICB7CiAgICAgICAgICAgIF9fcmV0ID0gdHJhaXRzX3R5cGU6OnRvX2ludF90eXBlKCpfTV9p bl9jdXIpOwogICAgICAgICAgICArK19NX2luX2N1cjsKICAgICAgICAgICAgaWYgKF9NX2J1Zl91 bmlmaWVkICYmIF9NX21vZGUgJiBpb3NfYmFzZTo6b3V0KQogICAgICAgICAgICAgICsrX01fb3V0 X2N1cjsKICAgICAgICAgIH0KICAgICAgICByZXR1cm4gX19yZXQ7CiAgICAgIH0KCgogICAgICB2 aXJ0dWFsIGludF90eXBlCiAgICAgIHBiYWNrZmFpbChpbnRfdHlwZSA9IHRyYWl0c190eXBlOjpl b2YoKSkKICAgICAgeyByZXR1cm4gdHJhaXRzX3R5cGU6OmVvZigpOyB9CgoKICAgICAgdmlydHVh bCBzdHJlYW1zaXplCiAgICAgIHhzcHV0bihjb25zdCBjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6 ZSBfX24pOwoKICAgICAgdmlydHVhbCBpbnRfdHlwZQogICAgICBvdmVyZmxvdyhpbnRfdHlwZSA9 IHRyYWl0c190eXBlOjplb2YoKSkKICAgICAgeyByZXR1cm4gdHJhaXRzX3R5cGU6OmVvZigpOyB9 CiMgNDgwICIvdXNyL2N5Z251cy9iaW4vLi4vaW5jbHVkZS9jKysvMy4xLjEvc3RyZWFtYnVmIiAz CiAgICBwcml2YXRlOgogICAgICBiYXNpY19zdHJlYW1idWYoY29uc3QgX19zdHJlYW1idWZfdHlw ZSYpIHsgfTsKCiAgICAgIF9fc3RyZWFtYnVmX3R5cGUmCiAgICAgIG9wZXJhdG9yPShjb25zdCBf X3N0cmVhbWJ1Zl90eXBlJikgeyByZXR1cm4gKnRoaXM7IH07CgogICAgfTsKfQoKCgoKCiMgMSAi L3Vzci9jeWdudXMvYmluLy4uL2luY2x1ZGUvYysrLzMuMS4xL2JpdHMvc3RyZWFtYnVmLnRjYyIg MSAzCiMgMzkgIi91c3IvY3lnbnVzL2Jpbi8uLi9pbmNsdWRlL2MrKy8zLjEuMS9iaXRzL3N0cmVh bWJ1Zi50Y2MiIDMKCm5hbWVzcGFjZSBzdGQKewogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg dHlwZW5hbWUgX1RyYWl0cz4KICAgIGNvbnN0IHR5cGVuYW1lIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hh clQsIF9UcmFpdHM+OjppbnRfdHlwZQogICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0 cz46Ol9TX3BiYWNrX3NpemU7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg X1RyYWl0cz4KICAgIHR5cGVuYW1lIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+Ojpp bnRfdHlwZQogICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz46OgogICAgc2J1bXBj KCkKICAgIHsKICAgICAgaW50X3R5cGUgX19yZXQ7CiAgICAgIGlmIChfTV9pbl9jdXIgJiYgX01f aW5fY3VyIDwgX01faW5fZW5kKQogICAgICAgIHsKICAgICAgICAgIGNoYXJfdHlwZSBfX2MgPSAq KHRoaXMtPmdwdHIoKSk7CiAgICAgICAgICBfTV9pbl9jdXJfbW92ZSgxKTsKICAgICAgICAgIF9f cmV0ID0gdHJhaXRzX3R5cGU6OnRvX2ludF90eXBlKF9fYyk7CiAgICAgICAgfQogICAgICBlbHNl CiAgICAgICAgX19yZXQgPSB0aGlzLT51ZmxvdygpOwogICAgICByZXR1cm4gX19yZXQ7CiAgICB9 CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIHR5cGVu YW1lIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjppbnRfdHlwZQogICAgYmFzaWNf c3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz46OgogICAgc3B1dGJhY2tjKGNoYXJfdHlwZSBfX2Mp CiAgICB7CiAgICAgIGludF90eXBlIF9fcmV0OwogICAgICBib29sIF9fdGVzdHBvcyA9IF9NX2lu X2N1ciAmJiBfTV9pbl9iZWcgPCBfTV9pbl9jdXI7CiAgICAgIGJvb2wgX190ZXN0bmUgPSBfTV9p bl9jdXIgJiYgIXRyYWl0c190eXBlOjplcShfX2MsIHRoaXMtPmdwdHIoKVstMV0pOwogICAgICBp ZiAoIV9fdGVzdHBvcyB8fCBfX3Rlc3RuZSkKICAgICAgICBfX3JldCA9IHBiYWNrZmFpbCh0cmFp dHNfdHlwZTo6dG9faW50X3R5cGUoX19jKSk7CiAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAg ICBfTV9pbl9jdXJfbW92ZSgtMSk7CiAgICAgICAgICBfX3JldCA9IHRyYWl0c190eXBlOjp0b19p bnRfdHlwZSgqdGhpcy0+Z3B0cigpKTsKICAgICAgICB9CiAgICAgIHJldHVybiBfX3JldDsKICAg IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgdHlw ZW5hbWUgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz46OmludF90eXBlCiAgICBiYXNp Y19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPjo6CiAgICBzdW5nZXRjKCkKICAgIHsKICAgICAg aW50X3R5cGUgX19yZXQ7CiAgICAgIGlmIChfTV9pbl9jdXIgJiYgX01faW5fYmVnIDwgX01faW5f Y3VyKQogICAgICAgIHsKICAgICAgICAgIF9NX2luX2N1cl9tb3ZlKC0xKTsKICAgICAgICAgIF9f cmV0ID0gdHJhaXRzX3R5cGU6OnRvX2ludF90eXBlKCpfTV9pbl9jdXIpOwogICAgICAgIH0KICAg ICAgZWxzZQogICAgICAgIF9fcmV0ID0gdGhpcy0+cGJhY2tmYWlsKCk7CiAgICAgIHJldHVybiBf X3JldDsKICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U cmFpdHM+CiAgICB0eXBlbmFtZSBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPjo6aW50 X3R5cGUKICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIHNwdXRjKGNo YXJfdHlwZSBfX2MpCiAgICB7CiAgICAgIGludF90eXBlIF9fcmV0OwogICAgICBpZiAoX01fb3V0 X2J1Zl9zaXplKCkpCiAgICAgICAgewogICAgICAgICAgKl9NX291dF9jdXIgPSBfX2M7CiAgICAg ICAgICBfTV9vdXRfY3VyX21vdmUoMSk7CiAgICAgICAgICBfX3JldCA9IHRyYWl0c190eXBlOjp0 b19pbnRfdHlwZShfX2MpOwogICAgICAgIH0KICAgICAgZWxzZQogICAgICAgIF9fcmV0ID0gdGhp cy0+b3ZlcmZsb3codHJhaXRzX3R5cGU6OnRvX2ludF90eXBlKF9fYykpOwogICAgICByZXR1cm4g X19yZXQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0 cz4KICAgIHN0cmVhbXNpemUKICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjoK ICAgIHhzZ2V0bihjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pCiAgICB7CiAgICAgIHN0 cmVhbXNpemUgX19yZXQgPSAwOwogICAgICB3aGlsZSAoX19yZXQgPCBfX24pCiAgICAgICAgewog ICAgICAgICAgc2l6ZV90IF9fYnVmX2xlbiA9IF9NX2luX2VuZCAtIF9NX2luX2N1cjsKICAgICAg ICAgIGlmIChfX2J1Zl9sZW4gPiAwKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgc2l6ZV90 IF9fcmVtYWluaW5nID0gX19uIC0gX19yZXQ7CiAgICAgICAgICAgICAgc2l6ZV90IF9fbGVuID0g bWluKF9fYnVmX2xlbiwgX19yZW1haW5pbmcpOwogICAgICAgICAgICAgIHRyYWl0c190eXBlOjpj b3B5KF9fcywgX01faW5fY3VyLCBfX2xlbik7CiAgICAgICAgICAgICAgX19yZXQgKz0gX19sZW47 CiAgICAgICAgICAgICAgX19zICs9IF9fbGVuOwogICAgICAgICAgICAgIF9NX2luX2N1cl9tb3Zl KF9fbGVuKTsKICAgICAgICAgICAgfQoKICAgICAgICAgIGlmIChfX3JldCA8IF9fbikKICAgICAg ICAgICAgewogICAgICAgICAgICAgIGludF90eXBlIF9fYyA9IHRoaXMtPnVmbG93KCk7CiAgICAg ICAgICAgICAgaWYgKF9fYyAhPSB0cmFpdHNfdHlwZTo6ZW9mKCkpCiAgICAgICAgICAgICAgICB7 CiAgICAgICAgICAgICAgICAgIHRyYWl0c190eXBlOjphc3NpZ24oKl9fcysrLCB0cmFpdHNfdHlw ZTo6dG9fY2hhcl90eXBlKF9fYykpOwogICAgICAgICAgICAgICAgICArK19fcmV0OwogICAgICAg ICAgICAgICAgfQogICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIGJyZWFrOwogICAg ICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gX19yZXQ7CiAgICB9CgoKCgoKCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgc3RyZWFtc2l6ZQog ICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz46OgogICAgeHNwdXRuKGNvbnN0IGNo YXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbikKICAgIHsKICAgICAgc3RyZWFtc2l6ZSBfX3Jl dCA9IDA7CiAgICAgIHdoaWxlIChfX3JldCA8IF9fbikKICAgICAgICB7CiAgICAgICAgICBvZmZf dHlwZSBfX2J1Zl9sZW4gPSBfTV9vdXRfYnVmX3NpemUoKTsKICAgICAgICAgIGlmIChfX2J1Zl9s ZW4gPiAwKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgb2ZmX3R5cGUgX19yZW1haW5pbmcg PSBfX24gLSBfX3JldDsKICAgICAgICAgICAgICBvZmZfdHlwZSBfX2xlbiA9IG1pbihfX2J1Zl9s ZW4sIF9fcmVtYWluaW5nKTsKICAgICAgICAgICAgICB0cmFpdHNfdHlwZTo6Y29weShfTV9vdXRf Y3VyLCBfX3MsIF9fbGVuKTsKICAgICAgICAgICAgICBfX3JldCArPSBfX2xlbjsKICAgICAgICAg ICAgICBfX3MgKz0gX19sZW47CiAgICAgICAgICAgICAgX01fb3V0X2N1cl9tb3ZlKF9fbGVuKTsK ICAgICAgICAgICAgfQoKICAgICAgICAgIGlmIChfX3JldCA8IF9fbikKICAgICAgICAgICAgewog ICAgICAgICAgICAgIGludF90eXBlIF9fYyA9IHRoaXMtPm92ZXJmbG93KHRyYWl0c190eXBlOjp0 b19pbnRfdHlwZSgqX19zKSk7CiAgICAgICAgICAgICAgaWYgKF9fYyAhPSB0cmFpdHNfdHlwZTo6 ZW9mKCkpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICsrX19yZXQ7CiAgICAg ICAgICAgICAgICAgICsrX19zOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGVsc2UK ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1 cm4gX19yZXQ7CiAgICB9CgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l IF9UcmFpdHM+CiAgICBzdHJlYW1zaXplCiAgICBfX2NvcHlfc3RyZWFtYnVmcyhiYXNpY19pb3M8 X0NoYXJULCBfVHJhaXRzPiYgX19pb3MsCiAgICAgICAgICAgICAgICAgICAgICBiYXNpY19zdHJl YW1idWY8X0NoYXJULCBfVHJhaXRzPiogX19zYmluLAogICAgICAgICAgICAgICAgICAgICAgYmFz aWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4qIF9fc2JvdXQpCiAgewogICAgICB0eXBlZGVm IHR5cGVuYW1lIF9UcmFpdHM6OmludF90eXBlIGludF90eXBlOwoKICAgICAgc3RyZWFtc2l6ZSBf X3JldCA9IDA7CiAgICAgIHN0cmVhbXNpemUgX19idWZzaXplID0gX19zYmluLT5pbl9hdmFpbCgp OwogICAgICBzdHJlYW1zaXplIF9feHRyY3Q7CiAgICAgIGJvb2wgX190ZXN0cHV0ID0gX19zYm91 dC0+X01fbW9kZSAmIGlvc19iYXNlOjpvdXQ7CiAgICAgIHRyeQogICAgICAgIHsKICAgICAgICAg IHdoaWxlIChfX3Rlc3RwdXQgJiYgX19idWZzaXplICE9IC0xKQogICAgICAgICAgICB7CiAgICAg ICAgICAgICAgX194dHJjdCA9IF9fc2JvdXQtPnNwdXRuKF9fc2Jpbi0+Z3B0cigpLCBfX2J1ZnNp emUpOwogICAgICAgICAgICAgIF9fcmV0ICs9IF9feHRyY3Q7CiAgICAgICAgICAgICAgX19zYmlu LT5fTV9pbl9jdXJfbW92ZShfX3h0cmN0KTsKICAgICAgICAgICAgICBpZiAoX194dHJjdCA9PSBf X2J1ZnNpemUpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIGlmIChfX3NiaW4t PnNnZXRjKCkgPT0gX1RyYWl0czo6ZW9mKCkpCiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAg ICAgICAgICAgICAgICAgIF9fYnVmc2l6ZSA9IF9fc2Jpbi0+aW5fYXZhaWwoKTsKICAgICAgICAg ICAgICAgIH0KICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICBicmVhazsKICAgICAg ICAgICAgfQogICAgICAgIH0KICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAg ewogICAgICAgICAgX19pb3Muc2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwogICAgICAgICAg aWYgKChfX2lvcy5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6ZmFpbGJpdCkgIT0gMCkKICAgICAg ICAgICAgdGhyb3c7CiAgICAgICAgfQogICAgICByZXR1cm4gX19yZXQ7CiAgICB9CgoKCgogIGV4 dGVybiB0ZW1wbGF0ZSBjbGFzcyBiYXNpY19zdHJlYW1idWY8Y2hhcj47CiAgZXh0ZXJuIHRlbXBs YXRlCiAgICBzdHJlYW1zaXplCiAgICBfX2NvcHlfc3RyZWFtYnVmcyhiYXNpY19pb3M8Y2hhcj4m LCBiYXNpY19zdHJlYW1idWY8Y2hhcj4qLAogICAgICAgICAgICAgICAgICAgICAgYmFzaWNfc3Ry ZWFtYnVmPGNoYXI+Kik7CgogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBiYXNpY19zdHJlYW1idWY8 d2NoYXJfdD47CiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBzdHJlYW1zaXplCiAgICBfX2NvcHlfc3Ry ZWFtYnVmcyhiYXNpY19pb3M8d2NoYXJfdD4mLCBiYXNpY19zdHJlYW1idWY8d2NoYXJfdD4qLAog ICAgICAgICAgICAgICAgICAgICAgYmFzaWNfc3RyZWFtYnVmPHdjaGFyX3Q+Kik7Cn0KIyA0OTQg Ii91c3IvY3lnbnVzL2Jpbi8uLi9pbmNsdWRlL2MrKy8zLjEuMS9zdHJlYW1idWYiIDIgMwojIDUx ICIvdXNyL2N5Z251cy9iaW4vLi4vaW5jbHVkZS9jKysvMy4xLjEvaW9zIiAyIDMKIyAxICIvdXNy L2N5Z251cy9iaW4vLi4vaW5jbHVkZS9jKysvMy4xLjEvYml0cy9iYXNpY19pb3MuaCIgMSAzCiMg MzkgIi91c3IvY3lnbnVzL2Jpbi8uLi9pbmNsdWRlL2MrKy8zLjEuMS9iaXRzL2Jhc2ljX2lvcy5o IiAzCgojIDEgIi91c3IvY3lnbnVzL2Jpbi8uLi9pbmNsdWRlL2MrKy8zLjEuMS9iaXRzL3N0cmVh bWJ1Zl9pdGVyYXRvci5oIiAxIDMKIyA0MiAiL3Vzci9jeWdudXMvYmluLy4uL2luY2x1ZGUvYysr LzMuMS4xL2JpdHMvc3RyZWFtYnVmX2l0ZXJhdG9yLmgiIDMKCm5hbWVzcGFjZSBzdGQKewoKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBjbGFzcyBpc3Ry ZWFtYnVmX2l0ZXJhdG9yCiAgICA6IHB1YmxpYyBpdGVyYXRvcjxpbnB1dF9pdGVyYXRvcl90YWcs IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0czo6b2ZmX3R5cGUsCiAgICAgICAgICAgICAgICAgICAg ICBfQ2hhclQqLCBfQ2hhclQmPgogICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfQ2hh clQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIF9UcmFpdHMgdHJhaXRzX3R5cGU7CiAgICAgIHR5 cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6aW50X3R5cGUgaW50X3R5cGU7CiAgICAgIHR5cGVkZWYg YmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4gc3RyZWFtYnVmX3R5cGU7CiAgICAgIHR5 cGVkZWYgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IGlzdHJlYW1fdHlwZTsKCiAgICBw cml2YXRlOgoKCgoKCgoKICAgICAgbXV0YWJsZSBzdHJlYW1idWZfdHlwZSogX01fc2J1ZjsKICAg ICAgaW50X3R5cGUgX01fYzsKCiAgICBwdWJsaWM6CiAgICAgIGlzdHJlYW1idWZfaXRlcmF0b3Io KSB0aHJvdygpCiAgICAgIDogX01fc2J1ZigwKSwgX01fYygtMikgeyB9CgogICAgICBpc3RyZWFt YnVmX2l0ZXJhdG9yKGlzdHJlYW1fdHlwZSYgX19zKSB0aHJvdygpCiAgICAgIDogX01fc2J1Zihf X3MucmRidWYoKSksIF9NX2MoLTIpIHsgfQoKICAgICAgaXN0cmVhbWJ1Zl9pdGVyYXRvcihzdHJl YW1idWZfdHlwZSogX19zKSB0aHJvdygpCiAgICAgIDogX01fc2J1ZihfX3MpLCBfTV9jKC0yKSB7 IH0KCgogICAgICBjaGFyX3R5cGUKICAgICAgb3BlcmF0b3IqKCkgY29uc3QKICAgICAgeyByZXR1 cm4gdHJhaXRzX3R5cGU6OnRvX2NoYXJfdHlwZShfTV9nZXQoKSk7IH0KCiAgICAgIGlzdHJlYW1i dWZfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yKysoKQogICAgICB7CiAgICAgICAgaWYgKF9NX3Ni dWYgJiYgX01fc2J1Zi0+c2J1bXBjKCkgPT0gdHJhaXRzX3R5cGU6OmVvZigpKQogICAgICAgICAg X01fc2J1ZiA9IDA7CiAgICAgICAgZWxzZQogICAgICAgICAgX01fYyA9IC0yOwogICAgICAgIHJl dHVybiAqdGhpczsKICAgICAgfQoKICAgICAgaXN0cmVhbWJ1Zl9pdGVyYXRvcgogICAgICBvcGVy YXRvcisrKGludCkKICAgICAgewogICAgICAgIGlzdHJlYW1idWZfaXRlcmF0b3IgX19vbGQgPSAq dGhpczsKICAgICAgICBpZiAoX01fc2J1ZiAmJiAoX19vbGQuX01fYyA9IF9NX3NidWYtPnNidW1w YygpKSA9PSB0cmFpdHNfdHlwZTo6ZW9mKCkpCiAgICAgICAgICBfTV9zYnVmID0gMDsKICAgICAg ICBlbHNlCiAgICAgICAgICBfTV9jID0gLTI7CiAgICAgICAgcmV0dXJuIF9fb2xkOwogICAgICB9 CgoKCgogICAgICBib29sCiAgICAgIGVxdWFsKGNvbnN0IGlzdHJlYW1idWZfaXRlcmF0b3ImIF9f YikgY29uc3QKICAgICAgewogICAgICAgIGNvbnN0IGludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5 cGU6OmVvZigpOwogICAgICAgIGJvb2wgX190aGlzZW9mID0gX01fZ2V0KCkgPT0gX19lb2Y7CiAg ICAgICAgYm9vbCBfX2Jlb2YgPSBfX2IuX01fZ2V0KCkgPT0gX19lb2Y7CiAgICAgICAgcmV0dXJu IChfX3RoaXNlb2YgJiYgX19iZW9mIHx8ICghX190aGlzZW9mICYmICFfX2Jlb2YpKTsKICAgICAg fQoKCiAgICBwcml2YXRlOgogICAgICBpbnRfdHlwZQogICAgICBfTV9nZXQoKSBjb25zdAogICAg ICB7CiAgICAgICAgaW50X3R5cGUgX19yZXQgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7CiAgICAgICAg aWYgKF9NX3NidWYpCiAgICAgICAgICB7CiAgICAgICAgICAgIGlmIChfTV9jICE9IHN0YXRpY19j YXN0PGludF90eXBlPigtMikpCiAgICAgICAgICAgICAgX19yZXQgPSBfTV9jOwogICAgICAgICAg ICBlbHNlCiAgICAgICAgICAgICAgaWYgKChfX3JldCA9IF9NX3NidWYtPnNnZXRjKCkpID09IHRy YWl0c190eXBlOjplb2YoKSkKICAgICAgICAgICAgICAgIF9NX3NidWYgPSAwOwogICAgICAgICAg fQogICAgICAgIHJldHVybiBfX3JldDsKICAgICAgfQogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9y PT0oY29uc3QgaXN0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQsIF9UcmFpdHM+JiBfX2EsCiAgICAg ICAgICAgICAgIGNvbnN0IGlzdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJULCBfVHJhaXRzPiYgX19i KQogICAgeyByZXR1cm4gX19hLmVxdWFsKF9fYik7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No YXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yIT0oY29u c3QgaXN0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQsIF9UcmFpdHM+JiBfX2EsCiAgICAgICAgICAg ICAgIGNvbnN0IGlzdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJULCBfVHJhaXRzPiYgX19iKQogICAg eyByZXR1cm4gIV9fYS5lcXVhbChfX2IpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg dHlwZW5hbWUgX1RyYWl0cz4KICAgIGNsYXNzIG9zdHJlYW1idWZfaXRlcmF0b3IKICAgIDogcHVi bGljIGl0ZXJhdG9yPG91dHB1dF9pdGVyYXRvcl90YWcsIHZvaWQsIHZvaWQsIHZvaWQsIHZvaWQ+ CiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAg IHR5cGVkZWYgX1RyYWl0cyB0cmFpdHNfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJlYW1i dWY8X0NoYXJULCBfVHJhaXRzPiBzdHJlYW1idWZfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19v c3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gb3N0cmVhbV90eXBlOwoKICAgIHByaXZhdGU6CiAgICAg IHN0cmVhbWJ1Zl90eXBlKiBfTV9zYnVmOwogICAgICBib29sIF9NX2ZhaWxlZDsKCiAgICBwdWJs aWM6CiAgICAgIGlubGluZQogICAgICBvc3RyZWFtYnVmX2l0ZXJhdG9yKG9zdHJlYW1fdHlwZSYg X19zKSB0aHJvdyAoKQogICAgICA6IF9NX3NidWYoX19zLnJkYnVmKCkpLCBfTV9mYWlsZWQoIV9N X3NidWYpIHsgfQoKICAgICAgb3N0cmVhbWJ1Zl9pdGVyYXRvcihzdHJlYW1idWZfdHlwZSogX19z KSB0aHJvdyAoKQogICAgICA6IF9NX3NidWYoX19zKSwgX01fZmFpbGVkKCFfTV9zYnVmKSB7IH0K CiAgICAgIG9zdHJlYW1idWZfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yPShfQ2hhclQgX19jKTsK CiAgICAgIG9zdHJlYW1idWZfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yKigpIHRocm93KCkKICAg ICAgeyByZXR1cm4gKnRoaXM7IH0KCiAgICAgIG9zdHJlYW1idWZfaXRlcmF0b3ImCiAgICAgIG9w ZXJhdG9yKysoaW50KSB0aHJvdygpCiAgICAgIHsgcmV0dXJuICp0aGlzOyB9CgogICAgICBvc3Ry ZWFtYnVmX2l0ZXJhdG9yJgogICAgICBvcGVyYXRvcisrKCkgdGhyb3coKQogICAgICB7IHJldHVy biAqdGhpczsgfQoKICAgICAgYm9vbAogICAgICBmYWlsZWQoKSBjb25zdCB0aHJvdygpCiAgICAg IHsgcmV0dXJuIF9NX2ZhaWxlZDsgfQogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU LCB0eXBlbmFtZSBfVHJhaXRzPgogICAgaW5saW5lIG9zdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJU LCBfVHJhaXRzPiYKICAgIG9zdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJULCBfVHJhaXRzPjo6b3Bl cmF0b3I9KF9DaGFyVCBfX2MpCiAgICB7CiAgICAgIGlmICghX01fZmFpbGVkICYmCiAgICAgICAg ICBfVHJhaXRzOjplcV9pbnRfdHlwZShfTV9zYnVmLT5zcHV0YyhfX2MpLCBfVHJhaXRzOjplb2Yo KSkpCiAgICAgICAgX01fZmFpbGVkID0gdHJ1ZTsKICAgICAgcmV0dXJuICp0aGlzOwogICAgfQp9 CiMgNDEgIi91c3IvY3lnbnVzL2Jpbi8uLi9pbmNsdWRlL2MrKy8zLjEuMS9iaXRzL2Jhc2ljX2lv cy5oIiAyIDMKIyAxICIvdXNyL2N5Z251cy9iaW4vLi4vaW5jbHVkZS9jKysvMy4xLjEvYml0cy9s b2NhbGVfZmFjZXRzLmgiIDEgMwojIDQ0ICIvdXNyL2N5Z251cy9iaW4vLi4vaW5jbHVkZS9jKysv My4xLjEvYml0cy9sb2NhbGVfZmFjZXRzLmgiIDMKCgojIDEgIi91c3IvY3lnbnVzL2Jpbi8uLi9p bmNsdWRlL2MrKy8zLjEuMS9jd2N0eXBlIiAxIDMKIyA0OCAiL3Vzci9jeWdudXMvYmluLy4uL2lu Y2x1ZGUvYysrLzMuMS4xL2N3Y3R5cGUiIDMKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL3djdHlwZS5o IiAxIDMKIyAzNSAiL3Vzci9pbmNsdWRlL3djdHlwZS5oIiAzCiMgMSAiL3Vzci9jeWdudXMvYmlu Ly4uL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMS4xL2luY2x1ZGUvc3RkZGVmLmgi IDEgMwojIDM2ICIvdXNyL2luY2x1ZGUvd2N0eXBlLmgiIDIgMwojIDYxICIvdXNyL2luY2x1ZGUv d2N0eXBlLmgiIDMKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCB3Y3R5cGVfdDsKIyA3OSAiL3Vz ci9pbmNsdWRlL3djdHlwZS5oIiAzCmVudW0KewogIF9fSVN3dXBwZXIgPSAwLAogIF9fSVN3bG93 ZXIgPSAxLAogIF9fSVN3YWxwaGEgPSAyLAogIF9fSVN3ZGlnaXQgPSAzLAogIF9fSVN3eGRpZ2l0 ID0gNCwKICBfX0lTd3NwYWNlID0gNSwKICBfX0lTd3ByaW50ID0gNiwKICBfX0lTd2dyYXBoID0g NywKICBfX0lTd2JsYW5rID0gOCwKICBfX0lTd2NudHJsID0gOSwKICBfX0lTd3B1bmN0ID0gMTAs CiAgX19JU3dhbG51bSA9IDExLAoKICBfSVN3dXBwZXIgPSAoKF9fSVN3dXBwZXIpIDwgOCA/IChp bnQpICgoMVVMIDw8IChfX0lTd3VwcGVyKSkgPDwgMjQpIDogKChfX0lTd3VwcGVyKSA8IDE2ID8g KGludCkgKCgxVUwgPDwgKF9fSVN3dXBwZXIpKSA8PCA4KSA6ICgoX19JU3d1cHBlcikgPCAyNCA/ IChpbnQpICgoMVVMIDw8IChfX0lTd3VwcGVyKSkgPj4gOCkgOiAoaW50KSAoKDFVTCA8PCAoX19J U3d1cHBlcikpID4+IDI0KSkpKSwKICBfSVN3bG93ZXIgPSAoKF9fSVN3bG93ZXIpIDwgOCA/IChp bnQpICgoMVVMIDw8IChfX0lTd2xvd2VyKSkgPDwgMjQpIDogKChfX0lTd2xvd2VyKSA8IDE2ID8g KGludCkgKCgxVUwgPDwgKF9fSVN3bG93ZXIpKSA8PCA4KSA6ICgoX19JU3dsb3dlcikgPCAyNCA/ IChpbnQpICgoMVVMIDw8IChfX0lTd2xvd2VyKSkgPj4gOCkgOiAoaW50KSAoKDFVTCA8PCAoX19J U3dsb3dlcikpID4+IDI0KSkpKSwKICBfSVN3YWxwaGEgPSAoKF9fSVN3YWxwaGEpIDwgOCA/IChp bnQpICgoMVVMIDw8IChfX0lTd2FscGhhKSkgPDwgMjQpIDogKChfX0lTd2FscGhhKSA8IDE2ID8g KGludCkgKCgxVUwgPDwgKF9fSVN3YWxwaGEpKSA8PCA4KSA6ICgoX19JU3dhbHBoYSkgPCAyNCA/ IChpbnQpICgoMVVMIDw8IChfX0lTd2FscGhhKSkgPj4gOCkgOiAoaW50KSAoKDFVTCA8PCAoX19J U3dhbHBoYSkpID4+IDI0KSkpKSwKICBfSVN3ZGlnaXQgPSAoKF9fSVN3ZGlnaXQpIDwgOCA/IChp bnQpICgoMVVMIDw8IChfX0lTd2RpZ2l0KSkgPDwgMjQpIDogKChfX0lTd2RpZ2l0KSA8IDE2ID8g KGludCkgKCgxVUwgPDwgKF9fSVN3ZGlnaXQpKSA8PCA4KSA6ICgoX19JU3dkaWdpdCkgPCAyNCA/ IChpbnQpICgoMVVMIDw8IChfX0lTd2RpZ2l0KSkgPj4gOCkgOiAoaW50KSAoKDFVTCA8PCAoX19J U3dkaWdpdCkpID4+IDI0KSkpKSwKICBfSVN3eGRpZ2l0ID0gKChfX0lTd3hkaWdpdCkgPCA4ID8g KGludCkgKCgxVUwgPDwgKF9fSVN3eGRpZ2l0KSkgPDwgMjQpIDogKChfX0lTd3hkaWdpdCkgPCAx NiA/IChpbnQpICgoMVVMIDw8IChfX0lTd3hkaWdpdCkpIDw8IDgpIDogKChfX0lTd3hkaWdpdCkg PCAyNCA/IChpbnQpICgoMVVMIDw8IChfX0lTd3hkaWdpdCkpID4+IDgpIDogKGludCkgKCgxVUwg PDwgKF9fSVN3eGRpZ2l0KSkgPj4gMjQpKSkpLAogIF9JU3dzcGFjZSA9ICgoX19JU3dzcGFjZSkg PCA4ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3c3BhY2UpKSA8PCAyNCkgOiAoKF9fSVN3c3BhY2Up IDwgMTYgPyAoaW50KSAoKDFVTCA8PCAoX19JU3dzcGFjZSkpIDw8IDgpIDogKChfX0lTd3NwYWNl KSA8IDI0ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3c3BhY2UpKSA+PiA4KSA6IChpbnQpICgoMVVM IDw8IChfX0lTd3NwYWNlKSkgPj4gMjQpKSkpLAogIF9JU3dwcmludCA9ICgoX19JU3dwcmludCkg PCA4ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3cHJpbnQpKSA8PCAyNCkgOiAoKF9fSVN3cHJpbnQp IDwgMTYgPyAoaW50KSAoKDFVTCA8PCAoX19JU3dwcmludCkpIDw8IDgpIDogKChfX0lTd3ByaW50 KSA8IDI0ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3cHJpbnQpKSA+PiA4KSA6IChpbnQpICgoMVVM IDw8IChfX0lTd3ByaW50KSkgPj4gMjQpKSkpLAogIF9JU3dncmFwaCA9ICgoX19JU3dncmFwaCkg PCA4ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3Z3JhcGgpKSA8PCAyNCkgOiAoKF9fSVN3Z3JhcGgp IDwgMTYgPyAoaW50KSAoKDFVTCA8PCAoX19JU3dncmFwaCkpIDw8IDgpIDogKChfX0lTd2dyYXBo KSA8IDI0ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3Z3JhcGgpKSA+PiA4KSA6IChpbnQpICgoMVVM IDw8IChfX0lTd2dyYXBoKSkgPj4gMjQpKSkpLAogIF9JU3dibGFuayA9ICgoX19JU3dibGFuaykg PCA4ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3YmxhbmspKSA8PCAyNCkgOiAoKF9fSVN3Ymxhbmsp IDwgMTYgPyAoaW50KSAoKDFVTCA8PCAoX19JU3dibGFuaykpIDw8IDgpIDogKChfX0lTd2JsYW5r KSA8IDI0ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3YmxhbmspKSA+PiA4KSA6IChpbnQpICgoMVVM IDw8IChfX0lTd2JsYW5rKSkgPj4gMjQpKSkpLAogIF9JU3djbnRybCA9ICgoX19JU3djbnRybCkg PCA4ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3Y250cmwpKSA8PCAyNCkgOiAoKF9fSVN3Y250cmwp IDwgMTYgPyAoaW50KSAoKDFVTCA8PCAoX19JU3djbnRybCkpIDw8IDgpIDogKChfX0lTd2NudHJs KSA8IDI0ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3Y250cmwpKSA+PiA4KSA6IChpbnQpICgoMVVM IDw8IChfX0lTd2NudHJsKSkgPj4gMjQpKSkpLAogIF9JU3dwdW5jdCA9ICgoX19JU3dwdW5jdCkg PCA4ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3cHVuY3QpKSA8PCAyNCkgOiAoKF9fSVN3cHVuY3Qp IDwgMTYgPyAoaW50KSAoKDFVTCA8PCAoX19JU3dwdW5jdCkpIDw8IDgpIDogKChfX0lTd3B1bmN0 KSA8IDI0ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3cHVuY3QpKSA+PiA4KSA6IChpbnQpICgoMVVM IDw8IChfX0lTd3B1bmN0KSkgPj4gMjQpKSkpLAogIF9JU3dhbG51bSA9ICgoX19JU3dhbG51bSkg PCA4ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3YWxudW0pKSA8PCAyNCkgOiAoKF9fSVN3YWxudW0p IDwgMTYgPyAoaW50KSAoKDFVTCA8PCAoX19JU3dhbG51bSkpIDw8IDgpIDogKChfX0lTd2FsbnVt KSA8IDI0ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3YWxudW0pKSA+PiA4KSA6IChpbnQpICgoMVVM IDw8IChfX0lTd2FsbnVtKSkgPj4gMjQpKSkpCn07CgoKCmV4dGVybiAiQyIgewoKCgoKCgoKZXh0 ZXJuIGludCBpc3dhbG51bSAod2ludF90IF9fd2MpIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQg aXN3YWxwaGEgKHdpbnRfdCBfX3djKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IGlzd2NudHJsICh3 aW50X3QgX193YykgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgaXN3ZGlnaXQgKHdpbnRfdCBfX3dj KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBpc3dncmFwaCAod2ludF90IF9fd2MpIHRocm93ICgp OwoKCgoKZXh0ZXJuIGludCBpc3dsb3dlciAod2ludF90IF9fd2MpIHRocm93ICgpOwoKCmV4dGVy biBpbnQgaXN3cHJpbnQgKHdpbnRfdCBfX3djKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgaXN3 cHVuY3QgKHdpbnRfdCBfX3djKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgaXN3c3BhY2UgKHdp bnRfdCBfX3djKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgaXN3dXBwZXIgKHdpbnRfdCBfX3dj KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgaXN3eGRpZ2l0ICh3aW50X3QgX193YykgdGhyb3cg KCk7CgoKCgoKZXh0ZXJuIGludCBpc3dibGFuayAod2ludF90IF9fd2MpIHRocm93ICgpOwojIDE3 OCAiL3Vzci9pbmNsdWRlL3djdHlwZS5oIiAzCmV4dGVybiB3Y3R5cGVfdCB3Y3R5cGUgKF9fY29u c3QgY2hhciAqX19wcm9wZXJ0eSkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgaXN3Y3R5cGUgKHdp bnRfdCBfX3djLCB3Y3R5cGVfdCBfX2Rlc2MpIHRocm93ICgpOwojIDI0OSAiL3Vzci9pbmNsdWRl L3djdHlwZS5oIiAzCnR5cGVkZWYgX19jb25zdCBfX2ludDMyX3QgKndjdHJhbnNfdDsKCgpleHRl cm4gd2ludF90IHRvd2xvd2VyICh3aW50X3QgX193YykgdGhyb3cgKCk7CgoKZXh0ZXJuIHdpbnRf dCB0b3d1cHBlciAod2ludF90IF9fd2MpIHRocm93ICgpOwojIDI3NSAiL3Vzci9pbmNsdWRlL3dj dHlwZS5oIiAzCn0KIyAyODggIi91c3IvaW5jbHVkZS93Y3R5cGUuaCIgMwpleHRlcm4gIkMiIHsK CgoKZXh0ZXJuIHdjdHJhbnNfdCB3Y3RyYW5zIChfX2NvbnN0IGNoYXIgKl9fcHJvcGVydHkpIHRo cm93ICgpOwoKCmV4dGVybiB3aW50X3QgdG93Y3RyYW5zICh3aW50X3QgX193Yywgd2N0cmFuc190 IF9fZGVzYykgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gaW50IF9faXN3YWxudW1fbCAod2ludF90 IF9fd2MsIF9fbG9jYWxlX3QgX19sb2NhbGUpIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgX19p c3dhbHBoYV9sICh3aW50X3QgX193YywgX19sb2NhbGVfdCBfX2xvY2FsZSkgdGhyb3cgKCk7CgoK ZXh0ZXJuIGludCBfX2lzd2NudHJsX2wgKHdpbnRfdCBfX3djLCBfX2xvY2FsZV90IF9fbG9jYWxl KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBfX2lzd2RpZ2l0X2wgKHdpbnRfdCBfX3djLCBfX2xv Y2FsZV90IF9fbG9jYWxlKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBfX2lzd2dyYXBoX2wgKHdp bnRfdCBfX3djLCBfX2xvY2FsZV90IF9fbG9jYWxlKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQg X19pc3dsb3dlcl9sICh3aW50X3QgX193YywgX19sb2NhbGVfdCBfX2xvY2FsZSkgdGhyb3cgKCk7 CgoKZXh0ZXJuIGludCBfX2lzd3ByaW50X2wgKHdpbnRfdCBfX3djLCBfX2xvY2FsZV90IF9fbG9j YWxlKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgX19pc3dwdW5jdF9sICh3aW50X3QgX193Yywg X19sb2NhbGVfdCBfX2xvY2FsZSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IF9faXN3c3BhY2Vf bCAod2ludF90IF9fd2MsIF9fbG9jYWxlX3QgX19sb2NhbGUpIHRocm93ICgpOwoKCgoKZXh0ZXJu IGludCBfX2lzd3VwcGVyX2wgKHdpbnRfdCBfX3djLCBfX2xvY2FsZV90IF9fbG9jYWxlKSB0aHJv dyAoKTsKCgoKCmV4dGVybiBpbnQgX19pc3d4ZGlnaXRfbCAod2ludF90IF9fd2MsIF9fbG9jYWxl X3QgX19sb2NhbGUpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBfX2lzd2JsYW5rX2wgKHdpbnRf dCBfX3djLCBfX2xvY2FsZV90IF9fbG9jYWxlKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHdjdHlwZV90 IF9fd2N0eXBlX2wgKF9fY29uc3QgY2hhciAqX19wcm9wZXJ0eSwgX19sb2NhbGVfdCBfX2xvY2Fs ZSkKICAgICB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBfX2lzd2N0eXBlX2wgKHdpbnRfdCBfX3dj LCB3Y3R5cGVfdCBfX2Rlc2MsIF9fbG9jYWxlX3QgX19sb2NhbGUpCiAgICAgdGhyb3cgKCk7CgoK CgoKCgpleHRlcm4gd2ludF90IF9fdG93bG93ZXJfbCAod2ludF90IF9fd2MsIF9fbG9jYWxlX3Qg X19sb2NhbGUpIHRocm93ICgpOwoKCmV4dGVybiB3aW50X3QgX190b3d1cHBlcl9sICh3aW50X3Qg X193YywgX19sb2NhbGVfdCBfX2xvY2FsZSkgdGhyb3cgKCk7CgoKCmV4dGVybiB3Y3RyYW5zX3Qg X193Y3RyYW5zX2wgKF9fY29uc3QgY2hhciAqX19wcm9wZXJ0eSwgX19sb2NhbGVfdCBfX2xvY2Fs ZSkKICAgICB0aHJvdyAoKTsKCgpleHRlcm4gd2ludF90IF9fdG93Y3RyYW5zX2wgKHdpbnRfdCBf X3djLCB3Y3RyYW5zX3QgX19kZXNjLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbG9j YWxlX3QgX19sb2NhbGUpIHRocm93ICgpOwoKCgp9CiMgNTMgIi91c3IvY3lnbnVzL2Jpbi8uLi9p bmNsdWRlL2MrKy8zLjEuMS9jd2N0eXBlIiAyIDMKIyA3NyAiL3Vzci9jeWdudXMvYmluLy4uL2lu Y2x1ZGUvYysrLzMuMS4xL2N3Y3R5cGUiIDMKbmFtZXNwYWNlIHN0ZAp7CiAgdXNpbmcgOjp3aW50 X3Q7CgogIHVzaW5nIDo6d2N0eXBlX3Q7CiAgdXNpbmcgOjp3Y3RyYW5zX3Q7CgogIHVzaW5nIDo6 aXN3YWxudW07CiAgdXNpbmcgOjppc3dhbHBoYTsKICB1c2luZyA6Omlzd2JsYW5rOwogIHVzaW5n IDo6aXN3Y250cmw7CiAgdXNpbmcgOjppc3dkaWdpdDsKICB1c2luZyA6Omlzd2dyYXBoOwogIHVz aW5nIDo6aXN3bG93ZXI7CiAgdXNpbmcgOjppc3dwcmludDsKICB1c2luZyA6Omlzd3ByaW50Owog IHVzaW5nIDo6aXN3cHVuY3Q7CiAgdXNpbmcgOjppc3dzcGFjZTsKICB1c2luZyA6Omlzd3VwcGVy OwogIHVzaW5nIDo6aXN3eGRpZ2l0OwogIHVzaW5nIDo6aXN3Y3R5cGU7CiAgdXNpbmcgOjp0b3ds b3dlcjsKICB1c2luZyA6OnRvd3VwcGVyOwogIHVzaW5nIDo6dG93Y3RyYW5zOwogIHVzaW5nIDo6 d2N0cmFuczsKICB1c2luZyA6OndjdHlwZTsKfQojIDQ3ICIvdXNyL2N5Z251cy9iaW4vLi4vaW5j bHVkZS9jKysvMy4xLjEvYml0cy9sb2NhbGVfZmFjZXRzLmgiIDIgMwojIDEgIi91c3IvY3lnbnVz L2Jpbi8uLi9pbmNsdWRlL2MrKy8zLjEuMS9pb3MiIDEgMwojIDQ4ICIvdXNyL2N5Z251cy9iaW4v Li4vaW5jbHVkZS9jKysvMy4xLjEvYml0cy9sb2NhbGVfZmFjZXRzLmgiIDIgMwoKbmFtZXNwYWNl IHN0ZAp7CiMgNjAgIi91c3IvY3lnbnVzL2Jpbi8uLi9pbmNsdWRlL2MrKy8zLjEuMS9iaXRzL2xv Y2FsZV9mYWNldHMuaCIgMwojIDEgIi91c3IvY3lnbnVzL2Jpbi8uLi9pbmNsdWRlL2MrKy8zLjEu MS9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2N0eXBlX2Jhc2UuaCIgMSAzCiMgNTAgIi91c3IvY3ln bnVzL2Jpbi8uLi9pbmNsdWRlL2MrKy8zLjEuMS9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2N0eXBl X2Jhc2UuaCIgMwogIHN0cnVjdCBjdHlwZV9iYXNlCiAgewoKICAgIHR5cGVkZWYgY29uc3QgaW50 KiBfX3RvX3R5cGU7CgoKCiAgICB0eXBlZGVmIHVuc2lnbmVkIHNob3J0IG1hc2s7CiAgICBzdGF0 aWMgY29uc3QgbWFzayB1cHBlciA9IF9JU3VwcGVyOwogICAgc3RhdGljIGNvbnN0IG1hc2sgbG93 ZXIgPSBfSVNsb3dlcjsKICAgIHN0YXRpYyBjb25zdCBtYXNrIGFscGhhID0gX0lTYWxwaGE7CiAg ICBzdGF0aWMgY29uc3QgbWFzayBkaWdpdCA9IF9JU2RpZ2l0OwogICAgc3RhdGljIGNvbnN0IG1h c2sgeGRpZ2l0ID0gX0lTeGRpZ2l0OwogICAgc3RhdGljIGNvbnN0IG1hc2sgc3BhY2UgPSBfSVNz cGFjZTsKICAgIHN0YXRpYyBjb25zdCBtYXNrIHByaW50ID0gX0lTcHJpbnQ7CiAgICBzdGF0aWMg Y29uc3QgbWFzayBncmFwaCA9IF9JU2dyYXBoOwogICAgc3RhdGljIGNvbnN0IG1hc2sgY250cmwg PSBfSVNjbnRybDsKICAgIHN0YXRpYyBjb25zdCBtYXNrIHB1bmN0ID0gX0lTcHVuY3Q7CiAgICBz dGF0aWMgY29uc3QgbWFzayBhbG51bSA9IF9JU2FsbnVtOwogIH07CiMgNjEgIi91c3IvY3lnbnVz L2Jpbi8uLi9pbmNsdWRlL2MrKy8zLjEuMS9iaXRzL2xvY2FsZV9mYWNldHMuaCIgMiAzCgoKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBjbGFzcyBfX2N0eXBlX2Fic3RyYWN0X2Jhc2Ug OiBwdWJsaWMgbG9jYWxlOjpmYWNldCwgcHVibGljIGN0eXBlX2Jhc2UKICAgIHsKICAgIHB1Ymxp YzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKCiAgICAgIGJvb2wKICAgICAgaXMo bWFzayBfX20sIGNoYXJfdHlwZSBfX2MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2lz KF9fbSwgX19jKTsgfQoKICAgICAgY29uc3QgY2hhcl90eXBlKgogICAgICBpcyhjb25zdCBjaGFy X3R5cGUgKl9fbG8sIGNvbnN0IGNoYXJfdHlwZSAqX19oaSwgbWFzayAqX192ZWMpIGNvbnN0CiAg ICAgIHsgcmV0dXJuIHRoaXMtPmRvX2lzKF9fbG8sIF9faGksIF9fdmVjKTsgfQoKICAgICAgY29u c3QgY2hhcl90eXBlKgogICAgICBzY2FuX2lzKG1hc2sgX19tLCBjb25zdCBjaGFyX3R5cGUqIF9f bG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9f c2Nhbl9pcyhfX20sIF9fbG8sIF9faGkpOyB9CgogICAgICBjb25zdCBjaGFyX3R5cGUqCiAgICAg IHNjYW5fbm90KG1hc2sgX19tLCBjb25zdCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlw ZSogX19oaSkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fc2Nhbl9ub3QoX19tLCBfX2xv LCBfX2hpKTsgfQoKICAgICAgY2hhcl90eXBlCiAgICAgIHRvdXBwZXIoY2hhcl90eXBlIF9fYykg Y29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fdG91cHBlcihfX2MpOyB9CgogICAgICBjb25z dCBjaGFyX3R5cGUqCiAgICAgIHRvdXBwZXIoY2hhcl90eXBlICpfX2xvLCBjb25zdCBjaGFyX3R5 cGUqIF9faGkpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3RvdXBwZXIoX19sbywgX19o aSk7IH0KCiAgICAgIGNoYXJfdHlwZQogICAgICB0b2xvd2VyKGNoYXJfdHlwZSBfX2MpIGNvbnN0 CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3RvbG93ZXIoX19jKTsgfQoKICAgICAgY29uc3QgY2hh cl90eXBlKgogICAgICB0b2xvd2VyKGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBf X2hpKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb190b2xvd2VyKF9fbG8sIF9faGkpOyB9 CgogICAgICBjaGFyX3R5cGUKICAgICAgd2lkZW4oY2hhciBfX2MpIGNvbnN0CiAgICAgIHsgcmV0 dXJuIHRoaXMtPmRvX3dpZGVuKF9fYyk7IH0KCiAgICAgIGNvbnN0IGNoYXIqCiAgICAgIHdpZGVu KGNvbnN0IGNoYXIqIF9fbG8sIGNvbnN0IGNoYXIqIF9faGksIGNoYXJfdHlwZSogX190bykgY29u c3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fd2lkZW4oX19sbywgX19oaSwgX190byk7IH0KCiAg ICAgIGNoYXIKICAgICAgbmFycm93KGNoYXJfdHlwZSBfX2MsIGNoYXIgX19kZmF1bHQpIGNvbnN0 CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX25hcnJvdyhfX2MsIF9fZGZhdWx0KTsgfQoKICAgICAg Y29uc3QgY2hhcl90eXBlKgogICAgICBuYXJyb3coY29uc3QgY2hhcl90eXBlKiBfX2xvLCBjb25z dCBjaGFyX3R5cGUqIF9faGksCiAgICAgICAgICAgICAgY2hhciBfX2RmYXVsdCwgY2hhciAqX190 bykgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fbmFycm93KF9fbG8sIF9faGksIF9fZGZh dWx0LCBfX3RvKTsgfQoKICAgIHByb3RlY3RlZDoKICAgICAgZXhwbGljaXQKICAgICAgX19jdHlw ZV9hYnN0cmFjdF9iYXNlKHNpemVfdCBfX3JlZnMgPSAwKTogbG9jYWxlOjpmYWNldChfX3JlZnMp IHsgfQoKICAgICAgdmlydHVhbAogICAgICB+X19jdHlwZV9hYnN0cmFjdF9iYXNlKCkgeyB9Cgog ICAgICB2aXJ0dWFsIGJvb2wKICAgICAgZG9faXMobWFzayBfX20sIGNoYXJfdHlwZSBfX2MpIGNv bnN0ID0gMDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb19pcyhjb25z dCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSwKICAgICAgICAgICAgbWFz ayogX192ZWMpIGNvbnN0ID0gMDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAg ICBkb19zY2FuX2lzKG1hc2sgX19tLCBjb25zdCBjaGFyX3R5cGUqIF9fbG8sCiAgICAgICAgICAg ICAgICAgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdCA9IDA7CgogICAgICB2aXJ0dWFsIGNv bnN0IGNoYXJfdHlwZSoKICAgICAgZG9fc2Nhbl9ub3QobWFzayBfX20sIGNvbnN0IGNoYXJfdHlw ZSogX19sbywKICAgICAgICAgICAgICAgICAgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdCA9 IDA7CgogICAgICB2aXJ0dWFsIGNoYXJfdHlwZQogICAgICBkb190b3VwcGVyKGNoYXJfdHlwZSkg Y29uc3QgPSAwOwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRvX3RvdXBw ZXIoY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0ID0gMDsKCiAg ICAgIHZpcnR1YWwgY2hhcl90eXBlCiAgICAgIGRvX3RvbG93ZXIoY2hhcl90eXBlKSBjb25zdCA9 IDA7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZG9fdG9sb3dlcihjaGFy X3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3QgPSAwOwoKICAgICAgdmly dHVhbCBjaGFyX3R5cGUKICAgICAgZG9fd2lkZW4oY2hhcikgY29uc3QgPSAwOwoKICAgICAgdmly dHVhbCBjb25zdCBjaGFyKgogICAgICBkb193aWRlbihjb25zdCBjaGFyKiBfX2xvLCBjb25zdCBj aGFyKiBfX2hpLAogICAgICAgICAgICAgICBjaGFyX3R5cGUqIF9fZGVzdCkgY29uc3QgPSAwOwoK ICAgICAgdmlydHVhbCBjaGFyCiAgICAgIGRvX25hcnJvdyhjaGFyX3R5cGUsIGNoYXIgX19kZmF1 bHQpIGNvbnN0ID0gMDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb19u YXJyb3coY29uc3QgY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGksCiAgICAg ICAgICAgICAgICAgY2hhciBfX2RmYXVsdCwgY2hhciogX19kZXN0KSBjb25zdCA9IDA7CiAgICB9 OwoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgY2xhc3MgY3R5cGUgOiBwdWJsaWMg X19jdHlwZV9hYnN0cmFjdF9iYXNlPF9DaGFyVD4KICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5 cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBjdHlwZTo6bWFz ayBtYXNrOwoKICAgICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7CgogICAgICBleHBsaWNpdAogICAg ICBjdHlwZShzaXplX3QgX19yZWZzID0gMCkgOiBfX2N0eXBlX2Fic3RyYWN0X2Jhc2U8X0NoYXJU PihfX3JlZnMpIHsgfQoKICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH5jdHlwZSgp OwoKICAgICAgdmlydHVhbCBib29sCiAgICAgIGRvX2lzKG1hc2sgX19tLCBjaGFyX3R5cGUgX19j KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb19pcyhjb25z dCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSwgbWFzayogX192ZWMpIGNv bnN0OwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRvX3NjYW5faXMobWFz ayBfX20sIGNvbnN0IGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25z dDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb19zY2FuX25vdChtYXNr IF9fbSwgY29uc3QgY2hhcl90eXBlKiBfX2xvLAogICAgICAgICAgICAgICAgICBjb25zdCBjaGFy X3R5cGUqIF9faGkpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjaGFyX3R5cGUKICAgICAgZG9fdG91 cHBlcihjaGFyX3R5cGUgX19jKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBl KgogICAgICBkb190b3VwcGVyKGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hp KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY2hhcl90eXBlCiAgICAgIGRvX3RvbG93ZXIoY2hhcl90 eXBlIF9fYykgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZG9f dG9sb3dlcihjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3Q7Cgog ICAgICB2aXJ0dWFsIGNoYXJfdHlwZQogICAgICBkb193aWRlbihjaGFyIF9fYykgY29uc3Q7Cgog ICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqCiAgICAgIGRvX3dpZGVuKGNvbnN0IGNoYXIqIF9fbG8s IGNvbnN0IGNoYXIqIF9faGksIGNoYXJfdHlwZSogX19kZXN0KSBjb25zdDsKCiAgICAgIHZpcnR1 YWwgY2hhcgogICAgICBkb19uYXJyb3coY2hhcl90eXBlLCBjaGFyIF9fZGZhdWx0KSBjb25zdDsK CiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb19uYXJyb3coY29uc3QgY2hh cl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGksCiAgICAgICAgICAgICAgICBjaGFy IF9fZGZhdWx0LCBjaGFyKiBfX2Rlc3QpIGNvbnN0OwogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0NoYXJUPgogICAgbG9jYWxlOjppZCBjdHlwZTxfQ2hhclQ+OjppZDsKCgogIHRlbXBsYXRl PD4KICAgIGNsYXNzIGN0eXBlPGNoYXI+IDogcHVibGljIF9fY3R5cGVfYWJzdHJhY3RfYmFzZTxj aGFyPgogICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBjaGFyIGNoYXJfdHlwZTsKCiAg ICBwcm90ZWN0ZWQ6CgogICAgICBfX2NfbG9jYWxlIF9NX2NfbG9jYWxlX2N0eXBlOwogICAgICBi b29sIF9NX2RlbDsKICAgICAgX190b190eXBlIF9NX3RvdXBwZXI7CiAgICAgIF9fdG9fdHlwZSBf TV90b2xvd2VyOwogICAgICBjb25zdCBtYXNrKiBfTV90YWJsZTsKCiAgICBwdWJsaWM6CiAgICAg IHN0YXRpYyBsb2NhbGU6OmlkIGlkOwogICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IHRhYmxlX3Np emUgPSAxICsgc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oLTEpOwoKICAgICAgZXhwbGljaXQK ICAgICAgY3R5cGUoY29uc3QgbWFzayogX190YWJsZSA9IDAsIGJvb2wgX19kZWwgPSBmYWxzZSwg c2l6ZV90IF9fcmVmcyA9IDApOwoKICAgICAgZXhwbGljaXQKICAgICAgY3R5cGUoX19jX2xvY2Fs ZSBfX2Nsb2MsIGNvbnN0IG1hc2sqIF9fdGFibGUgPSAwLCBib29sIF9fZGVsID0gZmFsc2UsCiAg ICAgICAgICAgIHNpemVfdCBfX3JlZnMgPSAwKTsKCiAgICAgIGlubGluZSBib29sCiAgICAgIGlz KG1hc2sgX19tLCBjaGFyIF9fYykgY29uc3Q7CgogICAgICBpbmxpbmUgY29uc3QgY2hhcioKICAg ICAgaXMoY29uc3QgY2hhciogX19sbywgY29uc3QgY2hhciogX19oaSwgbWFzayogX192ZWMpIGNv bnN0OwoKICAgICAgaW5saW5lIGNvbnN0IGNoYXIqCiAgICAgIHNjYW5faXMobWFzayBfX20sIGNv bnN0IGNoYXIqIF9fbG8sIGNvbnN0IGNoYXIqIF9faGkpIGNvbnN0OwoKICAgICAgaW5saW5lIGNv bnN0IGNoYXIqCiAgICAgIHNjYW5fbm90KG1hc2sgX19tLCBjb25zdCBjaGFyKiBfX2xvLCBjb25z dCBjaGFyKiBfX2hpKSBjb25zdDsKCiAgICBwcm90ZWN0ZWQ6CiAgICAgIGNvbnN0IG1hc2sqCiAg ICAgIHRhYmxlKCkgY29uc3QgdGhyb3coKQogICAgICB7IHJldHVybiBfTV90YWJsZTsgfQoKICAg ICAgc3RhdGljIGNvbnN0IG1hc2sqCiAgICAgIGNsYXNzaWNfdGFibGUoKSB0aHJvdygpOwoKICAg ICAgdmlydHVhbAogICAgICB+Y3R5cGUoKTsKCiAgICAgIHZpcnR1YWwgYm9vbAogICAgICBkb19p cyhtYXNrIF9fbSwgY2hhcl90eXBlIF9fYykgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNo YXJfdHlwZSoKICAgICAgZG9faXMoY29uc3QgY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5 cGUqIF9faGksIG1hc2sqIF9fdmVjKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90 eXBlKgogICAgICBkb19zY2FuX2lzKG1hc2sgX19tLCBjb25zdCBjaGFyX3R5cGUqIF9fbG8sIGNv bnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlw ZSoKICAgICAgZG9fc2Nhbl9ub3QobWFzayBfX20sIGNvbnN0IGNoYXJfdHlwZSogX19sbywKICAg ICAgICAgICAgICAgICAgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdDsKCiAgICAgIHZpcnR1 YWwgY2hhcl90eXBlCiAgICAgIGRvX3RvdXBwZXIoY2hhcl90eXBlKSBjb25zdDsKCiAgICAgIHZp cnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb190b3VwcGVyKGNoYXJfdHlwZSogX19sbywg Y29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY2hhcl90eXBlCiAg ICAgIGRvX3RvbG93ZXIoY2hhcl90eXBlKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hh cl90eXBlKgogICAgICBkb190b2xvd2VyKGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBl KiBfX2hpKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY2hhcl90eXBlCiAgICAgIGRvX3dpZGVuKGNo YXIpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyKgogICAgICBkb193aWRlbihjb25z dCBjaGFyKiBfX2xvLCBjb25zdCBjaGFyKiBfX2hpLCBjaGFyX3R5cGUqIF9fZGVzdCkgY29uc3Q7 CgogICAgICB2aXJ0dWFsIGNoYXIKICAgICAgZG9fbmFycm93KGNoYXJfdHlwZSwgY2hhciBfX2Rm YXVsdCkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZG9fbmFy cm93KGNvbnN0IGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpLAogICAgICAg ICAgICAgICAgY2hhciBfX2RmYXVsdCwgY2hhciogX19kZXN0KSBjb25zdDsKICAgIH07CgogIHRl bXBsYXRlPD4KICAgIGNvbnN0IGN0eXBlPGNoYXI+JgogICAgdXNlX2ZhY2V0PGN0eXBlPGNoYXI+ ID4oY29uc3QgbG9jYWxlJiBfX2xvYyk7CgoKCiAgdGVtcGxhdGU8PgogICAgY2xhc3MgY3R5cGU8 d2NoYXJfdD4gOiBwdWJsaWMgX19jdHlwZV9hYnN0cmFjdF9iYXNlPHdjaGFyX3Q+CiAgICB7CiAg ICBwdWJsaWM6CgogICAgICB0eXBlZGVmIHdjaGFyX3QgY2hhcl90eXBlOwogICAgICB0eXBlZGVm IHdjdHlwZV90IF9fd21hc2tfdHlwZTsKCiAgICBwcm90ZWN0ZWQ6CiAgICAgIF9fY19sb2NhbGUg X01fY19sb2NhbGVfY3R5cGU7CgogICAgcHVibGljOgoKICAgICAgc3RhdGljIGxvY2FsZTo6aWQg aWQ7CgogICAgICBleHBsaWNpdAogICAgICBjdHlwZShzaXplX3QgX19yZWZzID0gMCk7CgogICAg ICBleHBsaWNpdAogICAgICBjdHlwZShfX2NfbG9jYWxlIF9fY2xvYywgc2l6ZV90IF9fcmVmcyA9 IDApOwoKICAgIHByb3RlY3RlZDoKICAgICAgX193bWFza190eXBlCiAgICAgIF9NX2NvbnZlcnRf dG9fd21hc2soY29uc3QgbWFzayBfX20pIGNvbnN0OwoKICAgICAgdmlydHVhbAogICAgICB+Y3R5 cGUoKTsKCiAgICAgIHZpcnR1YWwgYm9vbAogICAgICBkb19pcyhtYXNrIF9fbSwgY2hhcl90eXBl IF9fYykgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZG9faXMo Y29uc3QgY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGksIG1hc2sqIF9fdmVj KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb19zY2FuX2lz KG1hc2sgX19tLCBjb25zdCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSkg Y29uc3Q7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZG9fc2Nhbl9ub3Qo bWFzayBfX20sIGNvbnN0IGNoYXJfdHlwZSogX19sbywKICAgICAgICAgICAgICAgICAgY29uc3Qg Y2hhcl90eXBlKiBfX2hpKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY2hhcl90eXBlCiAgICAgIGRv X3RvdXBwZXIoY2hhcl90eXBlKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBl KgogICAgICBkb190b3VwcGVyKGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hp KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY2hhcl90eXBlCiAgICAgIGRvX3RvbG93ZXIoY2hhcl90 eXBlKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb190b2xv d2VyKGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdDsKCiAgICAg IHZpcnR1YWwgY2hhcl90eXBlCiAgICAgIGRvX3dpZGVuKGNoYXIpIGNvbnN0OwoKICAgICAgdmly dHVhbCBjb25zdCBjaGFyKgogICAgICBkb193aWRlbihjb25zdCBjaGFyKiBfX2xvLCBjb25zdCBj aGFyKiBfX2hpLCBjaGFyX3R5cGUqIF9fZGVzdCkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNoYXIK ICAgICAgZG9fbmFycm93KGNoYXJfdHlwZSwgY2hhciBfX2RmYXVsdCkgY29uc3Q7CgogICAgICB2 aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZG9fbmFycm93KGNvbnN0IGNoYXJfdHlwZSog X19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpLAogICAgICAgICAgICAgICAgY2hhciBfX2RmYXVs dCwgY2hhciogX19kZXN0KSBjb25zdDsKCiAgICB9OwoKICB0ZW1wbGF0ZTw+CiAgICBjb25zdCBj dHlwZTx3Y2hhcl90PiYKICAgIHVzZV9mYWNldDxjdHlwZTx3Y2hhcl90PiA+KGNvbnN0IGxvY2Fs ZSYgX19sb2MpOwoKCgojIDEgIi91c3IvY3lnbnVzL2Jpbi8uLi9pbmNsdWRlL2MrKy8zLjEuMS9p Njg2LXBjLWxpbnV4LWdudS9iaXRzL2N0eXBlX2lubGluZS5oIiAxIDMKIyAzNyAiL3Vzci9jeWdu dXMvYmluLy4uL2luY2x1ZGUvYysrLzMuMS4xL2k2ODYtcGMtbGludXgtZ251L2JpdHMvY3R5cGVf aW5saW5lLmgiIDMKICBib29sCiAgY3R5cGU8Y2hhcj46OgogIGlzKG1hc2sgX19tLCBjaGFyIF9f YykgY29uc3QKICB7IHJldHVybiBfTV90YWJsZVtzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihf X2MpXSAmIF9fbTsgfQoKICBjb25zdCBjaGFyKgogIGN0eXBlPGNoYXI+OjoKICBpcyhjb25zdCBj aGFyKiBfX2xvdywgY29uc3QgY2hhciogX19oaWdoLCBtYXNrKiBfX3ZlYykgY29uc3QKICB7CiAg ICB3aGlsZSAoX19sb3cgPCBfX2hpZ2gpCiAgICAgICpfX3ZlYysrID0gX01fdGFibGVbc3RhdGlj X2Nhc3Q8dW5zaWduZWQgY2hhcj4oKl9fbG93KyspXTsKICAgIHJldHVybiBfX2hpZ2g7CiAgfQoK ICBjb25zdCBjaGFyKgogIGN0eXBlPGNoYXI+OjoKICBzY2FuX2lzKG1hc2sgX19tLCBjb25zdCBj aGFyKiBfX2xvdywgY29uc3QgY2hhciogX19oaWdoKSBjb25zdAogIHsKICAgIHdoaWxlIChfX2xv dyA8IF9faGlnaAogICAgICAgICAgICYmICEoX01fdGFibGVbc3RhdGljX2Nhc3Q8dW5zaWduZWQg Y2hhcj4oKl9fbG93KV0gJiBfX20pKQogICAgICArK19fbG93OwogICAgcmV0dXJuIF9fbG93Owog IH0KCiAgY29uc3QgY2hhcioKICBjdHlwZTxjaGFyPjo6CiAgc2Nhbl9ub3QobWFzayBfX20sIGNv bnN0IGNoYXIqIF9fbG93LCBjb25zdCBjaGFyKiBfX2hpZ2gpIGNvbnN0CiAgewogICAgd2hpbGUg KF9fbG93IDwgX19oaWdoCiAgICAgICAgICAgJiYgKF9NX3RhYmxlW3N0YXRpY19jYXN0PHVuc2ln bmVkIGNoYXI+KCpfX2xvdyldICYgX19tKSAhPSAwKQogICAgICArK19fbG93OwogICAgcmV0dXJu IF9fbG93OwogIH0KIyAzOTggIi91c3IvY3lnbnVzL2Jpbi8uLi9pbmNsdWRlL2MrKy8zLjEuMS9i aXRzL2xvY2FsZV9mYWNldHMuaCIgMiAzCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAg ICBjbGFzcyBjdHlwZV9ieW5hbWUgOiBwdWJsaWMgY3R5cGU8X0NoYXJUPgogICAgewogICAgcHVi bGljOgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CgogICAgICBleHBsaWNpdAogICAg ICBjdHlwZV9ieW5hbWUoY29uc3QgY2hhciogX19zLCBzaXplX3QgX19yZWZzID0gMCk7CgogICAg cHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH5jdHlwZV9ieW5hbWUoKSB7IH07CiAgICB9 OwoKCiAgdGVtcGxhdGU8PgogICAgY3R5cGVfYnluYW1lPGNoYXI+OjpjdHlwZV9ieW5hbWUoY29u c3QgY2hhciosIHNpemVfdCByZWZzKTsKCiAgdGVtcGxhdGU8PgogICAgY3R5cGVfYnluYW1lPHdj aGFyX3Q+OjpjdHlwZV9ieW5hbWUoY29uc3QgY2hhciosIHNpemVfdCByZWZzKTsKCgojIDEgIi91 c3IvY3lnbnVzL2Jpbi8uLi9pbmNsdWRlL2MrKy8zLjEuMS9iaXRzL2NvZGVjdnQuaCIgMSAzCiMg NDUgIi91c3IvY3lnbnVzL2Jpbi8uLi9pbmNsdWRlL2MrKy8zLjEuMS9iaXRzL2NvZGVjdnQuaCIg MwoKCiAgY2xhc3MgY29kZWN2dF9iYXNlCiAgewogIHB1YmxpYzoKICAgIGVudW0gcmVzdWx0CiAg ICB7CiAgICAgIG9rLAogICAgICBwYXJ0aWFsLAogICAgICBlcnJvciwKICAgICAgbm9jb252CiAg ICB9OwogIH07CgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZXJuVCwgdHlwZW5hbWUgX0V4 dGVyblQsIHR5cGVuYW1lIF9TdGF0ZVQ+CiAgICBjbGFzcyBfX2NvZGVjdnRfYWJzdHJhY3RfYmFz ZQogICAgOiBwdWJsaWMgbG9jYWxlOjpmYWNldCwgcHVibGljIGNvZGVjdnRfYmFzZQogICAgewog ICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBjb2RlY3Z0X2Jhc2U6OnJlc3VsdCByZXN1bHQ7CiAg ICAgIHR5cGVkZWYgX0ludGVyblQgaW50ZXJuX3R5cGU7CiAgICAgIHR5cGVkZWYgX0V4dGVyblQg ZXh0ZXJuX3R5cGU7CiAgICAgIHR5cGVkZWYgX1N0YXRlVCBzdGF0ZV90eXBlOwoKCiAgICAgIHJl c3VsdAogICAgICBvdXQoc3RhdGVfdHlwZSYgX19zdGF0ZSwgY29uc3QgaW50ZXJuX3R5cGUqIF9f ZnJvbSwKICAgICAgICAgIGNvbnN0IGludGVybl90eXBlKiBfX2Zyb21fZW5kLCBjb25zdCBpbnRl cm5fdHlwZSomIF9fZnJvbV9uZXh0LAogICAgICAgICAgZXh0ZXJuX3R5cGUqIF9fdG8sIGV4dGVy bl90eXBlKiBfX3RvX2VuZCwKICAgICAgICAgIGV4dGVybl90eXBlKiYgX190b19uZXh0KSBjb25z dAogICAgICB7CiAgICAgICAgcmV0dXJuIHRoaXMtPmRvX291dChfX3N0YXRlLCBfX2Zyb20sIF9f ZnJvbV9lbmQsIF9fZnJvbV9uZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX190bywg X190b19lbmQsIF9fdG9fbmV4dCk7CiAgICAgIH0KCiAgICAgIHJlc3VsdAogICAgICB1bnNoaWZ0 KHN0YXRlX3R5cGUmIF9fc3RhdGUsIGV4dGVybl90eXBlKiBfX3RvLCBleHRlcm5fdHlwZSogX190 b19lbmQsCiAgICAgICAgICAgICAgZXh0ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0CiAgICAg IHsgcmV0dXJuIHRoaXMtPmRvX3Vuc2hpZnQoX19zdGF0ZSwgX190byxfX3RvX2VuZCxfX3RvX25l eHQpOyB9CgogICAgICByZXN1bHQKICAgICAgaW4oc3RhdGVfdHlwZSYgX19zdGF0ZSwgY29uc3Qg ZXh0ZXJuX3R5cGUqIF9fZnJvbSwKICAgICAgICAgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbV9l bmQsIGNvbnN0IGV4dGVybl90eXBlKiYgX19mcm9tX25leHQsCiAgICAgICAgIGludGVybl90eXBl KiBfX3RvLCBpbnRlcm5fdHlwZSogX190b19lbmQsCiAgICAgICAgIGludGVybl90eXBlKiYgX190 b19uZXh0KSBjb25zdAogICAgICB7CiAgICAgICAgcmV0dXJuIHRoaXMtPmRvX2luKF9fc3RhdGUs IF9fZnJvbSwgX19mcm9tX2VuZCwgX19mcm9tX25leHQsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgIF9fdG8sIF9fdG9fZW5kLCBfX3RvX25leHQpOwogICAgICB9CgogICAgICBpbnQKICAgICAg ZW5jb2RpbmcoKSBjb25zdCB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2VuY29kaW5n KCk7IH0KCiAgICAgIGJvb2wKICAgICAgYWx3YXlzX25vY29udigpIGNvbnN0IHRocm93KCkKICAg ICAgeyByZXR1cm4gdGhpcy0+ZG9fYWx3YXlzX25vY29udigpOyB9CgogICAgICBpbnQKICAgICAg bGVuZ3RoKGNvbnN0IHN0YXRlX3R5cGUmIF9fc3RhdGUsIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zy b20sCiAgICAgICAgICAgICBjb25zdCBleHRlcm5fdHlwZSogX19lbmQsIHNpemVfdCBfX21heCkg Y29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fbGVuZ3RoKF9fc3RhdGUsIF9fZnJvbSwgX19l bmQsIF9fbWF4KTsgfQoKICAgICAgaW50CiAgICAgIG1heF9sZW5ndGgoKSBjb25zdCB0aHJvdygp CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX21heF9sZW5ndGgoKTsgfQoKICAgIHByb3RlY3RlZDoK ICAgICAgZXhwbGljaXQKICAgICAgX19jb2RlY3Z0X2Fic3RyYWN0X2Jhc2Uoc2l6ZV90IF9fcmVm cyA9IDApIDogbG9jYWxlOjpmYWNldChfX3JlZnMpIHsgfQoKICAgICAgdmlydHVhbAogICAgICB+ X19jb2RlY3Z0X2Fic3RyYWN0X2Jhc2UoKSB7IH0KCiAgICAgIHZpcnR1YWwgcmVzdWx0CiAgICAg IGRvX291dChzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBpbnRlcm5fdHlwZSogX19mcm9tLAog ICAgICAgICAgICAgY29uc3QgaW50ZXJuX3R5cGUqIF9fZnJvbV9lbmQsIGNvbnN0IGludGVybl90 eXBlKiYgX19mcm9tX25leHQsCiAgICAgICAgICAgICBleHRlcm5fdHlwZSogX190bywgZXh0ZXJu X3R5cGUqIF9fdG9fZW5kLAogICAgICAgICAgICAgZXh0ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNv bnN0ID0gMDsKCiAgICAgIHZpcnR1YWwgcmVzdWx0CiAgICAgIGRvX3Vuc2hpZnQoc3RhdGVfdHlw ZSYgX19zdGF0ZSwgZXh0ZXJuX3R5cGUqIF9fdG8sCiAgICAgICAgICAgICAgICAgZXh0ZXJuX3R5 cGUqIF9fdG9fZW5kLCBleHRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3QgPSAwOwoKICAgICAg dmlydHVhbCByZXN1bHQKICAgICAgZG9faW4oc3RhdGVfdHlwZSYgX19zdGF0ZSwgY29uc3QgZXh0 ZXJuX3R5cGUqIF9fZnJvbSwKICAgICAgICAgICAgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbV9l bmQsIGNvbnN0IGV4dGVybl90eXBlKiYgX19mcm9tX25leHQsCiAgICAgICAgICAgIGludGVybl90 eXBlKiBfX3RvLCBpbnRlcm5fdHlwZSogX190b19lbmQsCiAgICAgICAgICAgIGludGVybl90eXBl KiYgX190b19uZXh0KSBjb25zdCA9IDA7CgogICAgICB2aXJ0dWFsIGludAogICAgICBkb19lbmNv ZGluZygpIGNvbnN0IHRocm93KCkgPSAwOwoKICAgICAgdmlydHVhbCBib29sCiAgICAgIGRvX2Fs d2F5c19ub2NvbnYoKSBjb25zdCB0aHJvdygpID0gMDsKCiAgICAgIHZpcnR1YWwgaW50CiAgICAg IGRvX2xlbmd0aChjb25zdCBzdGF0ZV90eXBlJiwgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbSwK ICAgICAgICAgICAgICAgIGNvbnN0IGV4dGVybl90eXBlKiBfX2VuZCwgc2l6ZV90IF9fbWF4KSBj b25zdCA9IDA7CgogICAgICB2aXJ0dWFsIGludAogICAgICBkb19tYXhfbGVuZ3RoKCkgY29uc3Qg dGhyb3coKSA9IDA7CiAgICB9OwoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRlcm5ULCB0eXBl bmFtZSBfRXh0ZXJuVCwgdHlwZW5hbWUgX1N0YXRlVD4KICAgIGNsYXNzIGNvZGVjdnQKICAgIDog cHVibGljIF9fY29kZWN2dF9hYnN0cmFjdF9iYXNlPF9JbnRlcm5ULCBfRXh0ZXJuVCwgX1N0YXRl VD4KICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgY29kZWN2dF9iYXNlOjpyZXN1bHQg cmVzdWx0OwogICAgICB0eXBlZGVmIF9JbnRlcm5UIGludGVybl90eXBlOwogICAgICB0eXBlZGVm IF9FeHRlcm5UIGV4dGVybl90eXBlOwogICAgICB0eXBlZGVmIF9TdGF0ZVQgc3RhdGVfdHlwZTsK CgogICAgICBzdGF0aWMgbG9jYWxlOjppZCBpZDsKCiAgICAgIGV4cGxpY2l0CiAgICAgIGNvZGVj dnQoc2l6ZV90IF9fcmVmcyA9IDApCiAgICAgIDogX19jb2RlY3Z0X2Fic3RyYWN0X2Jhc2U8X0lu dGVyblQsX0V4dGVyblQsX1N0YXRlVD4gKF9fcmVmcykgeyB9CgogICAgcHJvdGVjdGVkOgogICAg ICB2aXJ0dWFsCiAgICAgIH5jb2RlY3Z0KCkgeyB9CgogICAgICB2aXJ0dWFsIHJlc3VsdAogICAg ICBkb19vdXQoc3RhdGVfdHlwZSYgX19zdGF0ZSwgY29uc3QgaW50ZXJuX3R5cGUqIF9fZnJvbSwK ICAgICAgICAgICAgIGNvbnN0IGludGVybl90eXBlKiBfX2Zyb21fZW5kLCBjb25zdCBpbnRlcm5f dHlwZSomIF9fZnJvbV9uZXh0LAogICAgICAgICAgICAgZXh0ZXJuX3R5cGUqIF9fdG8sIGV4dGVy bl90eXBlKiBfX3RvX2VuZCwKICAgICAgICAgICAgIGV4dGVybl90eXBlKiYgX190b19uZXh0KSBj b25zdDsKCiAgICAgIHZpcnR1YWwgcmVzdWx0CiAgICAgIGRvX3Vuc2hpZnQoc3RhdGVfdHlwZSYg X19zdGF0ZSwgZXh0ZXJuX3R5cGUqIF9fdG8sCiAgICAgICAgICAgICAgICAgZXh0ZXJuX3R5cGUq IF9fdG9fZW5kLCBleHRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3Q7CgogICAgICB2aXJ0dWFs IHJlc3VsdAogICAgICBkb19pbihzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBleHRlcm5fdHlw ZSogX19mcm9tLAogICAgICAgICAgICBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tX2VuZCwgY29u c3QgZXh0ZXJuX3R5cGUqJiBfX2Zyb21fbmV4dCwKICAgICAgICAgICAgaW50ZXJuX3R5cGUqIF9f dG8sIGludGVybl90eXBlKiBfX3RvX2VuZCwKICAgICAgICAgICAgaW50ZXJuX3R5cGUqJiBfX3Rv X25leHQpIGNvbnN0OwoKICAgICAgdmlydHVhbCBpbnQKICAgICAgZG9fZW5jb2RpbmcoKSBjb25z dCB0aHJvdygpOwoKICAgICAgdmlydHVhbCBib29sCiAgICAgIGRvX2Fsd2F5c19ub2NvbnYoKSBj b25zdCB0aHJvdygpOwoKICAgICAgdmlydHVhbCBpbnQKICAgICAgZG9fbGVuZ3RoKGNvbnN0IHN0 YXRlX3R5cGUmLCBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tLAogICAgICAgICAgICAgICAgY29u c3QgZXh0ZXJuX3R5cGUqIF9fZW5kLCBzaXplX3QgX19tYXgpIGNvbnN0OwoKICAgICAgdmlydHVh bCBpbnQKICAgICAgZG9fbWF4X2xlbmd0aCgpIGNvbnN0IHRocm93KCk7CiAgICB9OwoKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfSW50ZXJuVCwgdHlwZW5hbWUgX0V4dGVyblQsIHR5cGVuYW1lIF9TdGF0 ZVQ+CiAgICBsb2NhbGU6OmlkIGNvZGVjdnQ8X0ludGVyblQsIF9FeHRlcm5ULCBfU3RhdGVUPjo6 aWQ7CgoKICB0ZW1wbGF0ZTw+CiAgICBjbGFzcyBjb2RlY3Z0PGNoYXIsIGNoYXIsIG1ic3RhdGVf dD4KICAgIDogcHVibGljIF9fY29kZWN2dF9hYnN0cmFjdF9iYXNlPGNoYXIsIGNoYXIsIG1ic3Rh dGVfdD4KICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgY2hhciBpbnRlcm5fdHlwZTsK ICAgICAgdHlwZWRlZiBjaGFyIGV4dGVybl90eXBlOwogICAgICB0eXBlZGVmIG1ic3RhdGVfdCBz dGF0ZV90eXBlOwoKCiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOwoKICAgICAgZXhwbGljaXQK ICAgICAgY29kZWN2dChzaXplX3QgX19yZWZzID0gMCk7CgogICAgcHJvdGVjdGVkOgogICAgICB2 aXJ0dWFsCiAgICAgIH5jb2RlY3Z0KCk7CgogICAgICB2aXJ0dWFsIHJlc3VsdAogICAgICBkb19v dXQoc3RhdGVfdHlwZSYgX19zdGF0ZSwgY29uc3QgaW50ZXJuX3R5cGUqIF9fZnJvbSwKICAgICAg ICAgICAgIGNvbnN0IGludGVybl90eXBlKiBfX2Zyb21fZW5kLCBjb25zdCBpbnRlcm5fdHlwZSom IF9fZnJvbV9uZXh0LAogICAgICAgICAgICAgZXh0ZXJuX3R5cGUqIF9fdG8sIGV4dGVybl90eXBl KiBfX3RvX2VuZCwKICAgICAgICAgICAgIGV4dGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdDsK CiAgICAgIHZpcnR1YWwgcmVzdWx0CiAgICAgIGRvX3Vuc2hpZnQoc3RhdGVfdHlwZSYgX19zdGF0 ZSwgZXh0ZXJuX3R5cGUqIF9fdG8sCiAgICAgICAgICAgICAgICAgZXh0ZXJuX3R5cGUqIF9fdG9f ZW5kLCBleHRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3Q7CgogICAgICB2aXJ0dWFsIHJlc3Vs dAogICAgICBkb19pbihzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBleHRlcm5fdHlwZSogX19m cm9tLAogICAgICAgICAgICBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tX2VuZCwgY29uc3QgZXh0 ZXJuX3R5cGUqJiBfX2Zyb21fbmV4dCwKICAgICAgICAgICAgaW50ZXJuX3R5cGUqIF9fdG8sIGlu dGVybl90eXBlKiBfX3RvX2VuZCwKICAgICAgICAgICAgaW50ZXJuX3R5cGUqJiBfX3RvX25leHQp IGNvbnN0OwoKICAgICAgdmlydHVhbCBpbnQKICAgICAgZG9fZW5jb2RpbmcoKSBjb25zdCB0aHJv dygpOwoKICAgICAgdmlydHVhbCBib29sCiAgICAgIGRvX2Fsd2F5c19ub2NvbnYoKSBjb25zdCB0 aHJvdygpOwoKICAgICAgdmlydHVhbCBpbnQKICAgICAgZG9fbGVuZ3RoKGNvbnN0IHN0YXRlX3R5 cGUmLCBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tLAogICAgICAgICAgICAgICAgY29uc3QgZXh0 ZXJuX3R5cGUqIF9fZW5kLCBzaXplX3QgX19tYXgpIGNvbnN0OwoKICAgICAgdmlydHVhbCBpbnQK ICAgICAgZG9fbWF4X2xlbmd0aCgpIGNvbnN0IHRocm93KCk7CiAgfTsKCgoKICB0ZW1wbGF0ZTw+ CiAgICBjbGFzcyBjb2RlY3Z0PHdjaGFyX3QsIGNoYXIsIG1ic3RhdGVfdD4KICAgIDogcHVibGlj IF9fY29kZWN2dF9hYnN0cmFjdF9iYXNlPHdjaGFyX3QsIGNoYXIsIG1ic3RhdGVfdD4KICAgIHsK ICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgd2NoYXJfdCBpbnRlcm5fdHlwZTsKICAgICAgdHlw ZWRlZiBjaGFyIGV4dGVybl90eXBlOwogICAgICB0eXBlZGVmIG1ic3RhdGVfdCBzdGF0ZV90eXBl OwoKCiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOwoKICAgICAgZXhwbGljaXQKICAgICAgY29k ZWN2dChzaXplX3QgX19yZWZzID0gMCk7CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAg ICAgIH5jb2RlY3Z0KCk7CgogICAgICB2aXJ0dWFsIHJlc3VsdAogICAgICBkb19vdXQoc3RhdGVf dHlwZSYgX19zdGF0ZSwgY29uc3QgaW50ZXJuX3R5cGUqIF9fZnJvbSwKICAgICAgICAgICAgIGNv bnN0IGludGVybl90eXBlKiBfX2Zyb21fZW5kLCBjb25zdCBpbnRlcm5fdHlwZSomIF9fZnJvbV9u ZXh0LAogICAgICAgICAgICAgZXh0ZXJuX3R5cGUqIF9fdG8sIGV4dGVybl90eXBlKiBfX3RvX2Vu ZCwKICAgICAgICAgICAgIGV4dGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdDsKCiAgICAgIHZp cnR1YWwgcmVzdWx0CiAgICAgIGRvX3Vuc2hpZnQoc3RhdGVfdHlwZSYgX19zdGF0ZSwKICAgICAg ICAgICAgICAgICBleHRlcm5fdHlwZSogX190bywgZXh0ZXJuX3R5cGUqIF9fdG9fZW5kLAogICAg ICAgICAgICAgICAgIGV4dGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdDsKCiAgICAgIHZpcnR1 YWwgcmVzdWx0CiAgICAgIGRvX2luKHN0YXRlX3R5cGUmIF9fc3RhdGUsCiAgICAgICAgICAgICBj b25zdCBleHRlcm5fdHlwZSogX19mcm9tLCBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tX2VuZCwK ICAgICAgICAgICAgIGNvbnN0IGV4dGVybl90eXBlKiYgX19mcm9tX25leHQsCiAgICAgICAgICAg ICBpbnRlcm5fdHlwZSogX190bywgaW50ZXJuX3R5cGUqIF9fdG9fZW5kLAogICAgICAgICAgICAg aW50ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0OwoKICAgICAgdmlydHVhbAogICAgICBpbnQg ZG9fZW5jb2RpbmcoKSBjb25zdCB0aHJvdygpOwoKICAgICAgdmlydHVhbAogICAgICBib29sIGRv X2Fsd2F5c19ub2NvbnYoKSBjb25zdCB0aHJvdygpOwoKICAgICAgdmlydHVhbAogICAgICBpbnQg ZG9fbGVuZ3RoKGNvbnN0IHN0YXRlX3R5cGUmLCBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tLAog ICAgICAgICAgICAgICAgICAgIGNvbnN0IGV4dGVybl90eXBlKiBfX2VuZCwgc2l6ZV90IF9fbWF4 KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgaW50CiAgICAgIGRvX21heF9sZW5ndGgoKSBjb25zdCB0 aHJvdygpOwogICAgfTsKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZXJuVCwgdHlwZW5hbWUg X0V4dGVyblQsIHR5cGVuYW1lIF9TdGF0ZVQ+CiAgICBjbGFzcyBjb2RlY3Z0X2J5bmFtZSA6IHB1 YmxpYyBjb2RlY3Z0PF9JbnRlcm5ULCBfRXh0ZXJuVCwgX1N0YXRlVD4KICAgIHsKICAgIHB1Ymxp YzoKICAgICAgZXhwbGljaXQKICAgICAgY29kZWN2dF9ieW5hbWUoY29uc3QgY2hhciosIHNpemVf dCBfX3JlZnMgPSAwKQogICAgICA6IGNvZGVjdnQ8X0ludGVyblQsIF9FeHRlcm5ULCBfU3RhdGVU PihfX3JlZnMpIHsgfQogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH5jb2RlY3Z0 X2J5bmFtZSgpIHsgfQogICAgfTsKCgoKCiMgMSAiL3Vzci9jeWdudXMvYmluLy4uL2luY2x1ZGUv YysrLzMuMS4xL2k2ODYtcGMtbGludXgtZ251L2JpdHMvY29kZWN2dF9zcGVjaWFsaXphdGlvbnMu aCIgMSAzCiMgMzM0ICIvdXNyL2N5Z251cy9iaW4vLi4vaW5jbHVkZS9jKysvMy4xLjEvYml0cy9j b2RlY3Z0LmgiIDIgMwojIDQyMyAiL3Vzci9jeWdudXMvYmluLy4uL2luY2x1ZGUvYysrLzMuMS4x L2JpdHMvbG9jYWxlX2ZhY2V0cy5oIiAyIDMKCgoKICBjbGFzcyBfX251bV9iYXNlCiAgewogIHBy b3RlY3RlZDoKCgogICAgc3RhdGljIGNvbnN0IGNoYXIgX1NfYXRvbXNbXTsKCiAgICBlbnVtCiAg ICB7CiAgICAgIF9NX3plcm8sCiAgICAgIF9NX2UgPSBfTV96ZXJvICsgMTAsCiAgICAgIF9NX0Ug PSBfTV96ZXJvICsgMTEsCiAgICAgIF9NX3NpemUgPSAyMSArIDEKICAgIH07CgoKCiAgICBzdGF0 aWMgYm9vbAogICAgX1NfZm9ybWF0X2Zsb2F0KGNvbnN0IGlvc19iYXNlJiBfX2lvLCBjaGFyKiBf X2ZwdHIsIGNoYXIgX19tb2QsCiAgICAgICAgICAgICAgICAgICAgc3RyZWFtc2l6ZSBfX3ByZWMp OwoKCiAgICBzdGF0aWMgdm9pZAogICAgX1NfZm9ybWF0X2ludChjb25zdCBpb3NfYmFzZSYgX19p bywgY2hhciogX19mcHRyLCBjaGFyIF9fbW9kLCBjaGFyIF9fbW9kbCk7CiAgfTsKCgogIHRlbXBs YXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGNsYXNzIG51bXB1bmN0IDogcHVibGljIGxvY2FsZTo6 ZmFjZXQKICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsK ICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJUPiBzdHJpbmdfdHlwZTsKCiAgICAgIHN0 YXRpYyBsb2NhbGU6OmlkIGlkOwoKICAgIHByaXZhdGU6CiAgICAgIGNoYXJfdHlwZSBfTV9kZWNp bWFsX3BvaW50OwogICAgICBjaGFyX3R5cGUgX01fdGhvdXNhbmRzX3NlcDsKICAgICAgY29uc3Qg Y2hhciogX01fZ3JvdXBpbmc7CiAgICAgIGNvbnN0IGNoYXJfdHlwZSogX01fdHJ1ZW5hbWU7CiAg ICAgIGNvbnN0IGNoYXJfdHlwZSogX01fZmFsc2VuYW1lOwoKICAgIHB1YmxpYzoKICAgICAgZXhw bGljaXQKICAgICAgbnVtcHVuY3Qoc2l6ZV90IF9fcmVmcyA9IDApIDogbG9jYWxlOjpmYWNldChf X3JlZnMpCiAgICAgIHsgX01faW5pdGlhbGl6ZV9udW1wdW5jdCgpOyB9CgogICAgICBleHBsaWNp dAogICAgICBudW1wdW5jdChfX2NfbG9jYWxlIF9fY2xvYywgc2l6ZV90IF9fcmVmcyA9IDApIDog bG9jYWxlOjpmYWNldChfX3JlZnMpCiAgICAgIHsgX01faW5pdGlhbGl6ZV9udW1wdW5jdChfX2Ns b2MpOyB9CgogICAgICBjaGFyX3R5cGUKICAgICAgZGVjaW1hbF9wb2ludCgpIGNvbnN0CiAgICAg IHsgcmV0dXJuIHRoaXMtPmRvX2RlY2ltYWxfcG9pbnQoKTsgfQoKICAgICAgY2hhcl90eXBlCiAg ICAgIHRob3VzYW5kc19zZXAoKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb190aG91c2Fu ZHNfc2VwKCk7IH0KCiAgICAgIHN0cmluZwogICAgICBncm91cGluZygpIGNvbnN0CiAgICAgIHsg cmV0dXJuIHRoaXMtPmRvX2dyb3VwaW5nKCk7IH0KCiAgICAgIHN0cmluZ190eXBlCiAgICAgIHRy dWVuYW1lKCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fdHJ1ZW5hbWUoKTsgfQoKICAg ICAgc3RyaW5nX3R5cGUKICAgICAgZmFsc2VuYW1lKCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhp cy0+ZG9fZmFsc2VuYW1lKCk7IH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAg fm51bXB1bmN0KCk7CgogICAgICB2aXJ0dWFsIGNoYXJfdHlwZQogICAgICBkb19kZWNpbWFsX3Bv aW50KCkgY29uc3QKICAgICAgeyByZXR1cm4gX01fZGVjaW1hbF9wb2ludDsgfQoKICAgICAgdmly dHVhbCBjaGFyX3R5cGUKICAgICAgZG9fdGhvdXNhbmRzX3NlcCgpIGNvbnN0CiAgICAgIHsgcmV0 dXJuIF9NX3Rob3VzYW5kc19zZXA7IH0KCiAgICAgIHZpcnR1YWwgc3RyaW5nCiAgICAgIGRvX2dy b3VwaW5nKCkgY29uc3QKICAgICAgeyByZXR1cm4gX01fZ3JvdXBpbmc7IH0KCiAgICAgIHZpcnR1 YWwgc3RyaW5nX3R5cGUKICAgICAgZG9fdHJ1ZW5hbWUoKSBjb25zdAogICAgICB7IHJldHVybiBf TV90cnVlbmFtZTsgfQoKICAgICAgdmlydHVhbCBzdHJpbmdfdHlwZQogICAgICBkb19mYWxzZW5h bWUoKSBjb25zdAogICAgICB7IHJldHVybiBfTV9mYWxzZW5hbWU7IH0KCgogICAgICB2b2lkCiAg ICAgIF9NX2luaXRpYWxpemVfbnVtcHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MgPSBfU19jX2xvY2Fs ZSk7CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBsb2NhbGU6OmlkIG51 bXB1bmN0PF9DaGFyVD46OmlkOwoKICB0ZW1wbGF0ZTw+CiAgICBudW1wdW5jdDxjaGFyPjo6fm51 bXB1bmN0KCk7CgogIHRlbXBsYXRlPD4KICAgIHZvaWQKICAgIG51bXB1bmN0PGNoYXI+OjpfTV9p bml0aWFsaXplX251bXB1bmN0KF9fY19sb2NhbGUgX19jbG9jKTsKCgogIHRlbXBsYXRlPD4KICAg IG51bXB1bmN0PHdjaGFyX3Q+Ojp+bnVtcHVuY3QoKTsKCiAgdGVtcGxhdGU8PgogICAgdm9pZAog ICAgbnVtcHVuY3Q8d2NoYXJfdD46Ol9NX2luaXRpYWxpemVfbnVtcHVuY3QoX19jX2xvY2FsZSBf X2Nsb2MpOwoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgY2xhc3MgbnVtcHVuY3Rf YnluYW1lIDogcHVibGljIG51bXB1bmN0PF9DaGFyVD4KICAgIHsKCiAgICAgIF9fY19sb2NhbGUg X01fY19sb2NhbGVfbnVtcHVuY3Q7CgogICAgcHVibGljOgogICAgICB0eXBlZGVmIF9DaGFyVCBj aGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVD4gc3RyaW5nX3R5cGU7 CgogICAgICBleHBsaWNpdAogICAgICBudW1wdW5jdF9ieW5hbWUoY29uc3QgY2hhciogX19zLCBz aXplX3QgX19yZWZzID0gMCkKICAgICAgOiBudW1wdW5jdDxfQ2hhclQ+KF9fcmVmcykKICAgICAg ewogICAgICAgIF9TX2NyZWF0ZV9jX2xvY2FsZShfTV9jX2xvY2FsZV9udW1wdW5jdCwgX19zKTsK ICAgICAgICBfTV9pbml0aWFsaXplX251bXB1bmN0KF9NX2NfbG9jYWxlX251bXB1bmN0KTsKICAg ICAgfQoKICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbAogICAgICB+bnVtcHVuY3RfYnluYW1l KCkKICAgICAgeyBfU19kZXN0cm95X2NfbG9jYWxlKF9NX2NfbG9jYWxlX251bXB1bmN0KTsgfQog ICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAg Y2xhc3MgbnVtX2dldCA6IHB1YmxpYyBsb2NhbGU6OmZhY2V0LCBwdWJsaWMgX19udW1fYmFzZQog ICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0 eXBlZGVmIF9Jbkl0ZXIgaXRlcl90eXBlOwoKICAgICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7Cgog ICAgICBleHBsaWNpdAogICAgICBudW1fZ2V0KHNpemVfdCBfX3JlZnMgPSAwKSA6IGxvY2FsZTo6 ZmFjZXQoX19yZWZzKSB7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBnZXQoaXRlcl90eXBlIF9f aW4sIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICBpb3NfYmFzZTo6 aW9zdGF0ZSYgX19lcnIsIGJvb2wmIF9fdikgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9f Z2V0KF9faW4sIF9fZW5kLCBfX2lvLCBfX2VyciwgX192KTsgfQoKICAgICAgaXRlcl90eXBlCiAg ICAgIGdldChpdGVyX3R5cGUgX19pbiwgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywK ICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgbG9uZyYgX192KSBjb25zdAogICAg ICB7IHJldHVybiB0aGlzLT5kb19nZXQoX19pbiwgX19lbmQsIF9faW8sIF9fZXJyLCBfX3YpOyB9 CgogICAgICBpdGVyX3R5cGUKICAgICAgZ2V0KGl0ZXJfdHlwZSBfX2luLCBpdGVyX3R5cGUgX19l bmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB1 bnNpZ25lZCBzaG9ydCYgX192KSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19nZXQoX19p biwgX19lbmQsIF9faW8sIF9fZXJyLCBfX3YpOyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgZ2V0 KGl0ZXJfdHlwZSBfX2luLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAg ICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB1bnNpZ25lZCBpbnQmIF9fdikgY29uc3QKICAg ICAgeyByZXR1cm4gdGhpcy0+ZG9fZ2V0KF9faW4sIF9fZW5kLCBfX2lvLCBfX2VyciwgX192KTsg fQoKICAgICAgaXRlcl90eXBlCiAgICAgIGdldChpdGVyX3R5cGUgX19pbiwgaXRlcl90eXBlIF9f ZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2Vyciwg dW5zaWduZWQgbG9uZyYgX192KSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19nZXQoX19p biwgX19lbmQsIF9faW8sIF9fZXJyLCBfX3YpOyB9CgoKICAgICAgaXRlcl90eXBlCiAgICAgIGdl dChpdGVyX3R5cGUgX19pbiwgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAg ICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgbG9uZyBsb25nJiBfX3YpIGNvbnN0CiAgICAg IHsgcmV0dXJuIHRoaXMtPmRvX2dldChfX2luLCBfX2VuZCwgX19pbywgX19lcnIsIF9fdik7IH0K CiAgICAgIGl0ZXJfdHlwZQogICAgICBnZXQoaXRlcl90eXBlIF9faW4sIGl0ZXJfdHlwZSBfX2Vu ZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHVu c2lnbmVkIGxvbmcgbG9uZyYgX192KSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19nZXQo X19pbiwgX19lbmQsIF9faW8sIF9fZXJyLCBfX3YpOyB9CgoKICAgICAgaXRlcl90eXBlCiAgICAg IGdldChpdGVyX3R5cGUgX19pbiwgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAg ICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgZmxvYXQmIF9fdikgY29uc3QKICAgICAg eyByZXR1cm4gdGhpcy0+ZG9fZ2V0KF9faW4sIF9fZW5kLCBfX2lvLCBfX2VyciwgX192KTsgfQoK ICAgICAgaXRlcl90eXBlCiAgICAgIGdldChpdGVyX3R5cGUgX19pbiwgaXRlcl90eXBlIF9fZW5k LCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgZG91 YmxlJiBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dldChfX2luLCBfX2VuZCwg X19pbywgX19lcnIsIF9fdik7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBnZXQoaXRlcl90eXBl IF9faW4sIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICBpb3NfYmFz ZTo6aW9zdGF0ZSYgX19lcnIsIGxvbmcgZG91YmxlJiBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJu IHRoaXMtPmRvX2dldChfX2luLCBfX2VuZCwgX19pbywgX19lcnIsIF9fdik7IH0KCiAgICAgIGl0 ZXJfdHlwZQogICAgICBnZXQoaXRlcl90eXBlIF9faW4sIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jh c2UmIF9faW8sCiAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHZvaWQqJiBfX3Yp IGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dldChfX2luLCBfX2VuZCwgX19pbywgX19l cnIsIF9fdik7IH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwgfm51bV9nZXQoKSB7IH0K CiAgICAgIGl0ZXJfdHlwZQogICAgICBfTV9leHRyYWN0X2Zsb2F0KGl0ZXJfdHlwZSwgaXRlcl90 eXBlLCBpb3NfYmFzZSYsIGlvc19iYXNlOjppb3N0YXRlJiwKICAgICAgICAgICAgICAgICAgICAg ICBzdHJpbmcmIF9feHRyYykgY29uc3Q7CgogICAgICBpdGVyX3R5cGUKICAgICAgX01fZXh0cmFj dF9pbnQoaXRlcl90eXBlLCBpdGVyX3R5cGUsIGlvc19iYXNlJiwgaW9zX2Jhc2U6Omlvc3RhdGUm LAogICAgICAgICAgICAgICAgICAgICBzdHJpbmcmIF9feHRyYywgaW50JiBfX2Jhc2UpIGNvbnN0 OwoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fZ2V0KGl0ZXJfdHlwZSwgaXRlcl90 eXBlLCBpb3NfYmFzZSYsIGlvc19iYXNlOjppb3N0YXRlJiwgYm9vbCYpIGNvbnN0OwoKICAgICAg dmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fZ2V0KGl0ZXJfdHlwZSwgaXRlcl90eXBlLCBpb3Nf YmFzZSYsIGlvc19iYXNlOjppb3N0YXRlJiwgbG9uZyYpIGNvbnN0OwoKICAgICAgdmlydHVhbCBp dGVyX3R5cGUKICAgICAgZG9fZ2V0KGl0ZXJfdHlwZSwgaXRlcl90eXBlLCBpb3NfYmFzZSYsIGlv c19iYXNlOjppb3N0YXRlJiBfX2VyciwKICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCYpIGNv bnN0OwoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fZ2V0KGl0ZXJfdHlwZSwgaXRl cl90eXBlLCBpb3NfYmFzZSYsIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwKICAgICAgICAgICAg IHVuc2lnbmVkIGludCYpIGNvbnN0OwoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9f Z2V0KGl0ZXJfdHlwZSwgaXRlcl90eXBlLCBpb3NfYmFzZSYsIGlvc19iYXNlOjppb3N0YXRlJiBf X2VyciwKICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcmKSBjb25zdDsKCgogICAgICB2aXJ0dWFs IGl0ZXJfdHlwZQogICAgICBkb19nZXQoaXRlcl90eXBlLCBpdGVyX3R5cGUsIGlvc19iYXNlJiwg aW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLAogICAgICAgICAgICAgbG9uZyBsb25nJikgY29uc3Q7 CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXQoaXRlcl90eXBlLCBpdGVyX3R5 cGUsIGlvc19iYXNlJiwgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLAogICAgICAgICAgICAgdW5z aWduZWQgbG9uZyBsb25nJikgY29uc3Q7CgoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAg ZG9fZ2V0KGl0ZXJfdHlwZSwgaXRlcl90eXBlLCBpb3NfYmFzZSYsIGlvc19iYXNlOjppb3N0YXRl JiBfX2VyciwKICAgICAgICAgICAgIGZsb2F0JikgY29uc3Q7CgogICAgICB2aXJ0dWFsIGl0ZXJf dHlwZQogICAgICBkb19nZXQoaXRlcl90eXBlLCBpdGVyX3R5cGUsIGlvc19iYXNlJiwgaW9zX2Jh c2U6Omlvc3RhdGUmIF9fZXJyLAogICAgICAgICAgICAgZG91YmxlJikgY29uc3Q7CgogICAgICB2 aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXQoaXRlcl90eXBlLCBpdGVyX3R5cGUsIGlvc19i YXNlJiwgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLAogICAgICAgICAgICAgbG9uZyBkb3VibGUm KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX2dldChpdGVyX3R5cGUs IGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsCiAgICAgICAg ICAgICB2b2lkKiYpIGNvbnN0OwogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0 eXBlbmFtZSBfSW5JdGVyPgogICAgbG9jYWxlOjppZCBudW1fZ2V0PF9DaGFyVCwgX0luSXRlcj46 OmlkOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAg Y2xhc3MgbnVtX3B1dCA6IHB1YmxpYyBsb2NhbGU6OmZhY2V0LCBwdWJsaWMgX19udW1fYmFzZQog ICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0 eXBlZGVmIF9PdXRJdGVyIGl0ZXJfdHlwZTsKCiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOwoK ICAgICAgZXhwbGljaXQKICAgICAgbnVtX3B1dChzaXplX3QgX19yZWZzID0gMCkgOiBsb2NhbGU6 OmZhY2V0KF9fcmVmcykgeyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgcHV0KGl0ZXJfdHlwZSBf X3MsIGlvc19iYXNlJiBfX2YsIGNoYXJfdHlwZSBfX2ZpbGwsIGJvb2wgX192KSBjb25zdAogICAg ICB7IHJldHVybiB0aGlzLT5kb19wdXQoX19zLCBfX2YsIF9fZmlsbCwgX192KTsgfQoKICAgICAg aXRlcl90eXBlCiAgICAgIHB1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19mLCBjaGFyX3R5 cGUgX19maWxsLCBsb25nIF9fdikgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fcHV0KF9f cywgX19mLCBfX2ZpbGwsIF9fdik7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBwdXQoaXRlcl90 eXBlIF9fcywgaW9zX2Jhc2UmIF9fZiwgY2hhcl90eXBlIF9fZmlsbCwKICAgICAgICAgIHVuc2ln bmVkIGxvbmcgX192KSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19wdXQoX19zLCBfX2Ys IF9fZmlsbCwgX192KTsgfQoKCiAgICAgIGl0ZXJfdHlwZQogICAgICBwdXQoaXRlcl90eXBlIF9f cywgaW9zX2Jhc2UmIF9fZiwgY2hhcl90eXBlIF9fZmlsbCwgbG9uZyBsb25nIF9fdikgY29uc3QK ICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fcHV0KF9fcywgX19mLCBfX2ZpbGwsIF9fdik7IH0KCiAg ICAgIGl0ZXJfdHlwZQogICAgICBwdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9fZiwgY2hh cl90eXBlIF9fZmlsbCwKICAgICAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBfX3YpIGNvbnN0CiAg ICAgIHsgcmV0dXJuIHRoaXMtPmRvX3B1dChfX3MsIF9fZiwgX19maWxsLCBfX3YpOyB9CgoKICAg ICAgaXRlcl90eXBlCiAgICAgIHB1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19mLCBjaGFy X3R5cGUgX19maWxsLCBkb3VibGUgX192KSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19w dXQoX19zLCBfX2YsIF9fZmlsbCwgX192KTsgfQoKICAgICAgaXRlcl90eXBlCiAgICAgIHB1dChp dGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19mLCBjaGFyX3R5cGUgX19maWxsLAogICAgICAgICAg bG9uZyBkb3VibGUgX192KSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19wdXQoX19zLCBf X2YsIF9fZmlsbCwgX192KTsgfQoKICAgICAgaXRlcl90eXBlCiAgICAgIHB1dChpdGVyX3R5cGUg X19zLCBpb3NfYmFzZSYgX19mLCBjaGFyX3R5cGUgX19maWxsLAogICAgICAgICAgY29uc3Qgdm9p ZCogX192KSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19wdXQoX19zLCBfX2YsIF9fZmls bCwgX192KTsgfQoKICAgIHByb3RlY3RlZDoKICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1ZhbHVl VD4KICAgICAgICBpdGVyX3R5cGUKICAgICAgICBfTV9jb252ZXJ0X2Zsb2F0KGl0ZXJfdHlwZSwg aW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsCiAgICAgICAgICAgICAgICAgICAgICAg ICBjaGFyIF9fbW9kLCBfVmFsdWVUIF9fdikgY29uc3Q7CgogICAgICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfVmFsdWVUPgogICAgICAgIGl0ZXJfdHlwZQogICAgICAgIF9NX2NvbnZlcnRfaW50KGl0ZXJf dHlwZSwgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsCiAgICAgICAgICAgICAgICAg ICAgICAgY2hhciBfX21vZCwgY2hhciBfX21vZGwsIF9WYWx1ZVQgX192KSBjb25zdDsKCiAgICAg IGl0ZXJfdHlwZQogICAgICBfTV93aWRlbl9mbG9hdChpdGVyX3R5cGUsIGlvc19iYXNlJiBfX2lv LCBjaGFyX3R5cGUgX19maWxsLCBjaGFyKiBfX2NzLAogICAgICAgICAgICAgICAgICAgICBpbnQg X19sZW4pIGNvbnN0OwoKICAgICAgaXRlcl90eXBlCiAgICAgIF9NX3dpZGVuX2ludChpdGVyX3R5 cGUsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUgX19maWxsLCBjaGFyKiBfX2NzLAogICAgICAg ICAgICAgICAgICAgaW50IF9fbGVuKSBjb25zdDsKCiAgICAgIGl0ZXJfdHlwZQogICAgICBfTV9p bnNlcnQoaXRlcl90eXBlLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwKICAgICAg ICAgICAgICAgIGNvbnN0IGNoYXJfdHlwZSogX193cywgaW50IF9fbGVuKSBjb25zdDsKCiAgICAg IHZpcnR1YWwKICAgICAgfm51bV9wdXQoKSB7IH07CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQog ICAgICBkb19wdXQoaXRlcl90eXBlLCBpb3NfYmFzZSYsIGNoYXJfdHlwZSBfX2ZpbGwsIGJvb2wg X192KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX3B1dChpdGVyX3R5 cGUsIGlvc19iYXNlJiwgY2hhcl90eXBlIF9fZmlsbCwgbG9uZyBfX3YpIGNvbnN0OwoKICAgICAg dmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fcHV0KGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBjaGFy X3R5cGUgX19maWxsLCB1bnNpZ25lZCBsb25nKSBjb25zdDsKCgogICAgICB2aXJ0dWFsIGl0ZXJf dHlwZQogICAgICBkb19wdXQoaXRlcl90eXBlLCBpb3NfYmFzZSYsIGNoYXJfdHlwZSBfX2ZpbGws IGxvbmcgbG9uZyBfX3YpIGNvbnN0OwoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9f cHV0KGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBjaGFyX3R5cGUgX19maWxsLCB1bnNpZ25lZCBsb25n IGxvbmcpIGNvbnN0OwoKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX3B1dChpdGVy X3R5cGUsIGlvc19iYXNlJiwgY2hhcl90eXBlIF9fZmlsbCwgZG91YmxlIF9fdikgY29uc3Q7Cgog ICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19wdXQoaXRlcl90eXBlLCBpb3NfYmFzZSYs IGNoYXJfdHlwZSBfX2ZpbGwsIGxvbmcgZG91YmxlIF9fdikgY29uc3Q7CgogICAgICB2aXJ0dWFs IGl0ZXJfdHlwZQogICAgICBkb19wdXQoaXRlcl90eXBlLCBpb3NfYmFzZSYsIGNoYXJfdHlwZSBf X2ZpbGwsIGNvbnN0IHZvaWQqIF9fdikgY29uc3Q7CiAgICB9OwoKICB0ZW1wbGF0ZSA8dHlwZW5h bWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIGxvY2FsZTo6aWQgbnVtX3B1dDxfQ2hh clQsIF9PdXRJdGVyPjo6aWQ7CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBjbGFz cyBjb2xsYXRlIDogcHVibGljIGxvY2FsZTo6ZmFjZXQKICAgIHsKICAgIHB1YmxpYzoKCiAgICAg IHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0No YXJUPiBzdHJpbmdfdHlwZTsKCiAgICBwcm90ZWN0ZWQ6CgoKICAgICAgX19jX2xvY2FsZSBfTV9j X2xvY2FsZV9jb2xsYXRlOwoKICAgIHB1YmxpYzoKICAgICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7 CgogICAgICBleHBsaWNpdAogICAgICBjb2xsYXRlKHNpemVfdCBfX3JlZnMgPSAwKQogICAgICA6 IGxvY2FsZTo6ZmFjZXQoX19yZWZzKQogICAgICB7IF9NX2NfbG9jYWxlX2NvbGxhdGUgPSBfU19j X2xvY2FsZTsgfQoKCiAgICAgIGV4cGxpY2l0CiAgICAgIGNvbGxhdGUoX19jX2xvY2FsZSBfX2Ns b2MsIHNpemVfdCBfX3JlZnMgPSAwKQogICAgICA6IGxvY2FsZTo6ZmFjZXQoX19yZWZzKQogICAg ICB7IF9NX2NfbG9jYWxlX2NvbGxhdGUgPSBfU19jbG9uZV9jX2xvY2FsZShfX2Nsb2MpOyB9Cgog ICAgICBpbnQKICAgICAgY29tcGFyZShjb25zdCBfQ2hhclQqIF9fbG8xLCBjb25zdCBfQ2hhclQq IF9faGkxLAogICAgICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19sbzIsIGNvbnN0IF9DaGFyVCog X19oaTIpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2NvbXBhcmUoX19sbzEsIF9faGkx LCBfX2xvMiwgX19oaTIpOyB9CgogICAgICBzdHJpbmdfdHlwZQogICAgICB0cmFuc2Zvcm0oY29u c3QgX0NoYXJUKiBfX2xvLCBjb25zdCBfQ2hhclQqIF9faGkpIGNvbnN0CiAgICAgIHsgcmV0dXJu IHRoaXMtPmRvX3RyYW5zZm9ybShfX2xvLCBfX2hpKTsgfQoKICAgICAgbG9uZwogICAgICBoYXNo KGNvbnN0IF9DaGFyVCogX19sbywgY29uc3QgX0NoYXJUKiBfX2hpKSBjb25zdAogICAgICB7IHJl dHVybiB0aGlzLT5kb19oYXNoKF9fbG8sIF9faGkpOyB9CgoKICAgICAgaW50CiAgICAgIF9NX2Nv bXBhcmUoY29uc3QgX0NoYXJUKiwgY29uc3QgX0NoYXJUKikgY29uc3Q7CgogICAgICBzaXplX3QK ICAgICAgX01fdHJhbnNmb3JtKF9DaGFyVCosIGNvbnN0IF9DaGFyVCosIHNpemVfdCkgY29uc3Q7 CgogIHByb3RlY3RlZDoKICAgICAgdmlydHVhbAogICAgICB+Y29sbGF0ZSgpCiAgICAgIHsKICAg ICAgICBpZiAoX01fY19sb2NhbGVfY29sbGF0ZSAhPSBfU19jX2xvY2FsZSkKICAgICAgICAgIF9T X2Rlc3Ryb3lfY19sb2NhbGUoX01fY19sb2NhbGVfY29sbGF0ZSk7CiAgICAgIH0KCiAgICAgIHZp cnR1YWwgaW50CiAgICAgIGRvX2NvbXBhcmUoY29uc3QgX0NoYXJUKiBfX2xvMSwgY29uc3QgX0No YXJUKiBfX2hpMSwKICAgICAgICAgICAgICAgICBjb25zdCBfQ2hhclQqIF9fbG8yLCBjb25zdCBf Q2hhclQqIF9faGkyKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgc3RyaW5nX3R5cGUKICAgICAgZG9f dHJhbnNmb3JtKGNvbnN0IF9DaGFyVCogX19sbywgY29uc3QgX0NoYXJUKiBfX2hpKSBjb25zdDsK CiAgICAgIHZpcnR1YWwgbG9uZwogICAgICBkb19oYXNoKGNvbnN0IF9DaGFyVCogX19sbywgY29u c3QgX0NoYXJUKiBfX2hpKSBjb25zdDsKICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy VD4KICAgIGxvY2FsZTo6aWQgY29sbGF0ZTxfQ2hhclQ+OjppZDsKCgogIHRlbXBsYXRlPD4KICAg IGludAogICAgY29sbGF0ZTxjaGFyPjo6X01fY29tcGFyZShjb25zdCBjaGFyKiwgY29uc3QgY2hh ciopIGNvbnN0OwoKICB0ZW1wbGF0ZTw+CiAgICBzaXplX3QKICAgIGNvbGxhdGU8Y2hhcj46Ol9N X3RyYW5zZm9ybShjaGFyKiwgY29uc3QgY2hhciosIHNpemVfdCkgY29uc3Q7CgoKICB0ZW1wbGF0 ZTw+CiAgICBpbnQKICAgIGNvbGxhdGU8d2NoYXJfdD46Ol9NX2NvbXBhcmUoY29uc3Qgd2NoYXJf dCosIGNvbnN0IHdjaGFyX3QqKSBjb25zdDsKCiAgdGVtcGxhdGU8PgogICAgc2l6ZV90CiAgICBj b2xsYXRlPHdjaGFyX3Q+OjpfTV90cmFuc2Zvcm0od2NoYXJfdCosIGNvbnN0IHdjaGFyX3QqLCBz aXplX3QpIGNvbnN0OwoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgY2xhc3MgY29s bGF0ZV9ieW5hbWUgOiBwdWJsaWMgY29sbGF0ZTxfQ2hhclQ+CiAgICB7CiAgICBwdWJsaWM6CiAg ICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8 X0NoYXJUPiBzdHJpbmdfdHlwZTsKCiAgICAgIGV4cGxpY2l0CiAgICAgIGNvbGxhdGVfYnluYW1l KGNvbnN0IGNoYXIqIF9fcywgc2l6ZV90IF9fcmVmcyA9IDApCiAgICAgIDogY29sbGF0ZTxfQ2hh clQ+KF9fcmVmcykKICAgICAgewogICAgICAgIGlmIChfTV9jX2xvY2FsZV9jb2xsYXRlICE9IF9T X2NfbG9jYWxlKQogICAgICAgICAgX1NfZGVzdHJveV9jX2xvY2FsZShfTV9jX2xvY2FsZV9jb2xs YXRlKTsKICAgICAgICBfU19jcmVhdGVfY19sb2NhbGUoX01fY19sb2NhbGVfY29sbGF0ZSwgX19z KTsKICAgICAgfQoKICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbAogICAgICB+Y29sbGF0ZV9i eW5hbWUoKSB7IH0KICAgIH07CgoKICBjbGFzcyB0aW1lX2Jhc2UKICB7CiAgcHVibGljOgogICAg ZW51bSBkYXRlb3JkZXIgeyBub19vcmRlciwgZG15LCBtZHksIHltZCwgeWRtIH07CiAgfTsKCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgY2xhc3MgX190aW1lcHVuY3QgOiBwdWJsaWMg bG9jYWxlOjpmYWNldAogICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfQ2hhclQgX19j aGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVD4gX19zdHJpbmdfdHlw ZTsKCiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOwoKCiAgICAgIHN0YXRpYyBjb25zdCBfQ2hh clQqIF9TX3RpbWV6b25lc1sxNF07CgogICAgcHJvdGVjdGVkOgogICAgICBfX2NfbG9jYWxlIF9N X2NfbG9jYWxlX3RpbWVwdW5jdDsKICAgICAgY29uc3QgY2hhciogX01fbmFtZV90aW1lcHVuY3Q7 CiAgICAgIGNvbnN0IF9DaGFyVCogX01fZGF0ZV9mb3JtYXQ7CiAgICAgIGNvbnN0IF9DaGFyVCog X01fZGF0ZV9lcmFfZm9ybWF0OwogICAgICBjb25zdCBfQ2hhclQqIF9NX3RpbWVfZm9ybWF0Owog ICAgICBjb25zdCBfQ2hhclQqIF9NX3RpbWVfZXJhX2Zvcm1hdDsKICAgICAgY29uc3QgX0NoYXJU KiBfTV9kYXRlX3RpbWVfZm9ybWF0OwogICAgICBjb25zdCBfQ2hhclQqIF9NX2RhdGVfdGltZV9l cmFfZm9ybWF0OwogICAgICBjb25zdCBfQ2hhclQqIF9NX2FtOwogICAgICBjb25zdCBfQ2hhclQq IF9NX3BtOwogICAgICBjb25zdCBfQ2hhclQqIF9NX2FtX3BtX2Zvcm1hdDsKCgogICAgICBjb25z dCBfQ2hhclQqIF9NX2RheTE7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fZGF5MjsKICAgICAgY29u c3QgX0NoYXJUKiBfTV9kYXkzOwogICAgICBjb25zdCBfQ2hhclQqIF9NX2RheTQ7CiAgICAgIGNv bnN0IF9DaGFyVCogX01fZGF5NTsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9kYXk2OwogICAgICBj b25zdCBfQ2hhclQqIF9NX2RheTc7CgoKICAgICAgY29uc3QgX0NoYXJUKiBfTV9kYXlfYTE7CiAg ICAgIGNvbnN0IF9DaGFyVCogX01fZGF5X2EyOwogICAgICBjb25zdCBfQ2hhclQqIF9NX2RheV9h MzsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9kYXlfYTQ7CiAgICAgIGNvbnN0IF9DaGFyVCogX01f ZGF5X2E1OwogICAgICBjb25zdCBfQ2hhclQqIF9NX2RheV9hNjsKICAgICAgY29uc3QgX0NoYXJU KiBfTV9kYXlfYTc7CgoKICAgICAgY29uc3QgX0NoYXJUKiBfTV9tb250aDAxOwogICAgICBjb25z dCBfQ2hhclQqIF9NX21vbnRoMDI7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fbW9udGgwMzsKICAg ICAgY29uc3QgX0NoYXJUKiBfTV9tb250aDA0OwogICAgICBjb25zdCBfQ2hhclQqIF9NX21vbnRo MDU7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fbW9udGgwNjsKICAgICAgY29uc3QgX0NoYXJUKiBf TV9tb250aDA3OwogICAgICBjb25zdCBfQ2hhclQqIF9NX21vbnRoMDg7CiAgICAgIGNvbnN0IF9D aGFyVCogX01fbW9udGgwOTsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9tb250aDEwOwogICAgICBj b25zdCBfQ2hhclQqIF9NX21vbnRoMTE7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fbW9udGgxMjsK CgogICAgICBjb25zdCBfQ2hhclQqIF9NX21vbnRoX2EwMTsKICAgICAgY29uc3QgX0NoYXJUKiBf TV9tb250aF9hMDI7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fbW9udGhfYTAzOwogICAgICBjb25z dCBfQ2hhclQqIF9NX21vbnRoX2EwNDsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9tb250aF9hMDU7 CiAgICAgIGNvbnN0IF9DaGFyVCogX01fbW9udGhfYTA2OwogICAgICBjb25zdCBfQ2hhclQqIF9N X21vbnRoX2EwNzsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9tb250aF9hMDg7CiAgICAgIGNvbnN0 IF9DaGFyVCogX01fbW9udGhfYTA5OwogICAgICBjb25zdCBfQ2hhclQqIF9NX21vbnRoX2ExMDsK ICAgICAgY29uc3QgX0NoYXJUKiBfTV9tb250aF9hMTE7CiAgICAgIGNvbnN0IF9DaGFyVCogX01f bW9udGhfYTEyOwoKICAgIHB1YmxpYzoKICAgICAgZXhwbGljaXQKICAgICAgX190aW1lcHVuY3Qo c2l6ZV90IF9fcmVmcyA9IDApCiAgICAgIDogbG9jYWxlOjpmYWNldChfX3JlZnMpLCBfTV9uYW1l X3RpbWVwdW5jdCgiQyIpCiAgICAgIHsgX01faW5pdGlhbGl6ZV90aW1lcHVuY3QoKTsgfQoKICAg ICAgZXhwbGljaXQKICAgICAgX190aW1lcHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MsIGNvbnN0IGNo YXIqIF9fcywgc2l6ZV90IF9fcmVmcyA9IDApCiAgICAgIDogbG9jYWxlOjpmYWNldChfX3JlZnMp LCBfTV9uYW1lX3RpbWVwdW5jdChfX3MpCiAgICAgIHsgX01faW5pdGlhbGl6ZV90aW1lcHVuY3Qo X19jbG9jKTsgfQoKICAgICAgdm9pZAogICAgICBfTV9wdXQoX0NoYXJUKiBfX3MsIHNpemVfdCBf X21heGxlbiwgY29uc3QgX0NoYXJUKiBfX2Zvcm1hdCwKICAgICAgICAgICAgIGNvbnN0IHRtKiBf X3RtKSBjb25zdDsKCiAgICAgIHZvaWQKICAgICAgX01fZGF0ZV9mb3JtYXRzKGNvbnN0IF9DaGFy VCoqIF9fZGF0ZSkgY29uc3QKICAgICAgewoKICAgICAgICBfX2RhdGVbMF0gPSBfTV9kYXRlX2Zv cm1hdDsKICAgICAgICBfX2RhdGVbMV0gPSBfTV9kYXRlX2VyYV9mb3JtYXQ7CiAgICAgIH0KCiAg ICAgIHZvaWQKICAgICAgX01fdGltZV9mb3JtYXRzKGNvbnN0IF9DaGFyVCoqIF9fdGltZSkgY29u c3QKICAgICAgewoKICAgICAgICBfX3RpbWVbMF0gPSBfTV90aW1lX2Zvcm1hdDsKICAgICAgICBf X3RpbWVbMV0gPSBfTV90aW1lX2VyYV9mb3JtYXQ7CiAgICAgIH0KCiAgICAgIHZvaWQKICAgICAg X01fYW1wbShjb25zdCBfQ2hhclQqKiBfX2FtcG0pIGNvbnN0CiAgICAgIHsKICAgICAgICBfX2Ft cG1bMF0gPSBfTV9hbTsKICAgICAgICBfX2FtcG1bMV0gPSBfTV9wbTsKICAgICAgfQoKICAgICAg dm9pZAogICAgICBfTV9kYXRlX3RpbWVfZm9ybWF0cyhjb25zdCBfQ2hhclQqKiBfX2R0KSBjb25z dAogICAgICB7CgogICAgICAgIF9fZHRbMF0gPSBfTV9kYXRlX3RpbWVfZm9ybWF0OwogICAgICAg IF9fZHRbMV0gPSBfTV9kYXRlX3RpbWVfZXJhX2Zvcm1hdDsKICAgICAgfQoKICAgICAgdm9pZAog ICAgICBfTV9kYXlzKGNvbnN0IF9DaGFyVCoqIF9fZGF5cykgY29uc3QKICAgICAgewogICAgICAg IF9fZGF5c1swXSA9IF9NX2RheTE7CiAgICAgICAgX19kYXlzWzFdID0gX01fZGF5MjsKICAgICAg ICBfX2RheXNbMl0gPSBfTV9kYXkzOwogICAgICAgIF9fZGF5c1szXSA9IF9NX2RheTQ7CiAgICAg ICAgX19kYXlzWzRdID0gX01fZGF5NTsKICAgICAgICBfX2RheXNbNV0gPSBfTV9kYXk2OwogICAg ICAgIF9fZGF5c1s2XSA9IF9NX2RheTc7CiAgICAgIH0KCiAgICAgIHZvaWQKICAgICAgX01fZGF5 c19hYmJyZXZpYXRlZChjb25zdCBfQ2hhclQqKiBfX2RheXMpIGNvbnN0CiAgICAgIHsKICAgICAg ICBfX2RheXNbMF0gPSBfTV9kYXlfYTE7CiAgICAgICAgX19kYXlzWzFdID0gX01fZGF5X2EyOwog ICAgICAgIF9fZGF5c1syXSA9IF9NX2RheV9hMzsKICAgICAgICBfX2RheXNbM10gPSBfTV9kYXlf YTQ7CiAgICAgICAgX19kYXlzWzRdID0gX01fZGF5X2E1OwogICAgICAgIF9fZGF5c1s1XSA9IF9N X2RheV9hNjsKICAgICAgICBfX2RheXNbNl0gPSBfTV9kYXlfYTc7CiAgICAgIH0KCiAgICAgIHZv aWQKICAgICAgX01fbW9udGhzKGNvbnN0IF9DaGFyVCoqIF9fbW9udGhzKSBjb25zdAogICAgICB7 CiAgICAgICAgX19tb250aHNbMF0gPSBfTV9tb250aDAxOwogICAgICAgIF9fbW9udGhzWzFdID0g X01fbW9udGgwMjsKICAgICAgICBfX21vbnRoc1syXSA9IF9NX21vbnRoMDM7CiAgICAgICAgX19t b250aHNbM10gPSBfTV9tb250aDA0OwogICAgICAgIF9fbW9udGhzWzRdID0gX01fbW9udGgwNTsK ICAgICAgICBfX21vbnRoc1s1XSA9IF9NX21vbnRoMDY7CiAgICAgICAgX19tb250aHNbNl0gPSBf TV9tb250aDA3OwogICAgICAgIF9fbW9udGhzWzddID0gX01fbW9udGgwODsKICAgICAgICBfX21v bnRoc1s4XSA9IF9NX21vbnRoMDk7CiAgICAgICAgX19tb250aHNbOV0gPSBfTV9tb250aDEwOwog ICAgICAgIF9fbW9udGhzWzEwXSA9IF9NX21vbnRoMTE7CiAgICAgICAgX19tb250aHNbMTFdID0g X01fbW9udGgxMjsKICAgICAgfQoKICAgICAgdm9pZAogICAgICBfTV9tb250aHNfYWJicmV2aWF0 ZWQoY29uc3QgX0NoYXJUKiogX19tb250aHMpIGNvbnN0CiAgICAgIHsKICAgICAgICBfX21vbnRo c1swXSA9IF9NX21vbnRoX2EwMTsKICAgICAgICBfX21vbnRoc1sxXSA9IF9NX21vbnRoX2EwMjsK ICAgICAgICBfX21vbnRoc1syXSA9IF9NX21vbnRoX2EwMzsKICAgICAgICBfX21vbnRoc1szXSA9 IF9NX21vbnRoX2EwNDsKICAgICAgICBfX21vbnRoc1s0XSA9IF9NX21vbnRoX2EwNTsKICAgICAg ICBfX21vbnRoc1s1XSA9IF9NX21vbnRoX2EwNjsKICAgICAgICBfX21vbnRoc1s2XSA9IF9NX21v bnRoX2EwNzsKICAgICAgICBfX21vbnRoc1s3XSA9IF9NX21vbnRoX2EwODsKICAgICAgICBfX21v bnRoc1s4XSA9IF9NX21vbnRoX2EwOTsKICAgICAgICBfX21vbnRoc1s5XSA9IF9NX21vbnRoX2Ex MDsKICAgICAgICBfX21vbnRoc1sxMF0gPSBfTV9tb250aF9hMTE7CiAgICAgICAgX19tb250aHNb MTFdID0gX01fbW9udGhfYTEyOwogICAgICB9CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFs CiAgICAgIH5fX3RpbWVwdW5jdCgpOwoKCiAgICAgIHZvaWQKICAgICAgX01faW5pdGlhbGl6ZV90 aW1lcHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MgPSBfU19jX2xvY2FsZSk7CiAgICB9OwoKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBsb2NhbGU6OmlkIF9fdGltZXB1bmN0PF9DaGFyVD46 OmlkOwoKCiAgdGVtcGxhdGU8PgogICAgX190aW1lcHVuY3Q8Y2hhcj46On5fX3RpbWVwdW5jdCgp OwoKICB0ZW1wbGF0ZTw+CiAgICBjb25zdCBjaGFyKgogICAgX190aW1lcHVuY3Q8Y2hhcj46Ol9T X3RpbWV6b25lc1sxNF07CgogIHRlbXBsYXRlPD4KICAgIHZvaWQKICAgIF9fdGltZXB1bmN0PGNo YXI+OjpfTV9pbml0aWFsaXplX3RpbWVwdW5jdChfX2NfbG9jYWxlIF9fY2xvYyk7CgogIHRlbXBs YXRlPD4KICAgIHZvaWQKICAgIF9fdGltZXB1bmN0PGNoYXI+OjpfTV9wdXQoY2hhciosIHNpemVf dCwgY29uc3QgY2hhciosIGNvbnN0IHRtKikgY29uc3Q7CgoKICB0ZW1wbGF0ZTw+CiAgICBfX3Rp bWVwdW5jdDx3Y2hhcl90Pjo6fl9fdGltZXB1bmN0KCk7CgogIHRlbXBsYXRlPD4KICAgIGNvbnN0 IHdjaGFyX3QqCiAgICBfX3RpbWVwdW5jdDx3Y2hhcl90Pjo6X1NfdGltZXpvbmVzWzE0XTsKCiAg dGVtcGxhdGU8PgogICAgdm9pZAogICAgX190aW1lcHVuY3Q8d2NoYXJfdD46Ol9NX2luaXRpYWxp emVfdGltZXB1bmN0KF9fY19sb2NhbGUgX19jbG9jKTsKCiAgdGVtcGxhdGU8PgogICAgdm9pZAog ICAgX190aW1lcHVuY3Q8d2NoYXJfdD46Ol9NX3B1dCh3Y2hhcl90Kiwgc2l6ZV90LCBjb25zdCB3 Y2hhcl90KiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdG0qKSBjb25z dDsKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBjb25zdCBfQ2hhclQqIF9fdGlt ZXB1bmN0PF9DaGFyVD46Ol9TX3RpbWV6b25lc1sxNF07CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf Q2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBjbGFzcyB0aW1lX2dldCA6IHB1YmxpYyBsb2Nh bGU6OmZhY2V0LCBwdWJsaWMgdGltZV9iYXNlCiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBl ZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgX0luSXRlciBpdGVyX3R5cGU7CiAg ICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVD4gX19zdHJpbmdfdHlwZTsKCiAgICAgIHN0 YXRpYyBsb2NhbGU6OmlkIGlkOwoKICAgICAgZXhwbGljaXQKICAgICAgdGltZV9nZXQoc2l6ZV90 IF9fcmVmcyA9IDApCiAgICAgIDogbG9jYWxlOjpmYWNldCAoX19yZWZzKSB7IH0KCiAgICAgIGRh dGVvcmRlcgogICAgICBkYXRlX29yZGVyKCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9f ZGF0ZV9vcmRlcigpOyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgZ2V0X3RpbWUoaXRlcl90eXBl IF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgICAgICBp b3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3RtKSBjb25zdAogICAgICB7IHJldHVybiB0 aGlzLT5kb19nZXRfdGltZShfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3RtKTsgfQoKICAg ICAgaXRlcl90eXBlCiAgICAgIGdldF9kYXRlKGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9f ZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9f ZXJyLCB0bSogX190bSkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZ2V0X2RhdGUoX19i ZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX190bSk7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBn ZXRfd2Vla2RheShpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9f aW8sCiAgICAgICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdG0qIF9fdG0p IGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dldF93ZWVrZGF5KF9fYmVnLCBfX2VuZCwg X19pbywgX19lcnIsIF9fdG0pOyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgZ2V0X21vbnRobmFt ZShpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAg ICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB0bSogX190bSkgY29uc3QK ICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZ2V0X21vbnRobmFtZShfX2JlZywgX19lbmQsIF9faW8s IF9fZXJyLCBfX3RtKTsgfQoKICAgICAgaXRlcl90eXBlCiAgICAgIGdldF95ZWFyKGl0ZXJfdHlw ZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICAgICAg aW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB0bSogX190bSkgY29uc3QKICAgICAgeyByZXR1cm4g dGhpcy0+ZG9fZ2V0X3llYXIoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX190bSk7IH0KCiAg ICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfnRpbWVfZ2V0KCkgeyB9CgogICAgICB2 aXJ0dWFsIGRhdGVvcmRlcgogICAgICBkb19kYXRlX29yZGVyKCkgY29uc3Q7CgogICAgICB2aXJ0 dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXRfdGltZShpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlw ZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0 YXRlJiBfX2VyciwgdG0qIF9fdG0pIGNvbnN0OwoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAg ICAgZG9fZ2V0X2RhdGUoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNl JiBfX2lvLAogICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBf X3RtKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX2dldF93ZWVrZGF5 KGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYsCiAgICAgICAgICAg ICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdG0qIF9fdG0pIGNvbnN0OwoKICAg ICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fZ2V0X21vbnRobmFtZShpdGVyX3R5cGUgX19i ZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmLAogICAgICAgICAgICAgICAgICAgICAgIGlv c19iYXNlOjppb3N0YXRlJiBfX2VyciwgdG0qIF9fdG0pIGNvbnN0OwoKICAgICAgdmlydHVhbCBp dGVyX3R5cGUKICAgICAgZG9fZ2V0X3llYXIoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19l bmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYg X19lcnIsIHRtKiBfX3RtKSBjb25zdDsKCgogICAgICB2b2lkCiAgICAgIF9NX2V4dHJhY3RfbnVt KGl0ZXJfdHlwZSYgX19iZWcsIGl0ZXJfdHlwZSYgX19lbmQsIGludCYgX19tZW1iZXIsCiAgICAg ICAgICAgICAgICAgICAgIGludCBfX21pbiwgaW50IF9fbWF4LCBzaXplX3QgX19sZW4sCiAgICAg ICAgICAgICAgICAgICAgIGNvbnN0IGN0eXBlPF9DaGFyVD4mIF9fY3R5cGUsCiAgICAgICAgICAg ICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VycikgY29uc3Q7CgoKCiAgICAgIHZvaWQK ICAgICAgX01fZXh0cmFjdF9uYW1lKGl0ZXJfdHlwZSYgX19iZWcsIGl0ZXJfdHlwZSYgX19lbmQs IGludCYgX19tZW1iZXIsCiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfQ2hhclQqKiBfX25h bWVzLCBzaXplX3QgX19pbmRleGxlbiwKICAgICAgICAgICAgICAgICAgICAgIGlvc19iYXNlOjpp b3N0YXRlJiBfX2VycikgY29uc3Q7CgoKICAgICAgdm9pZAogICAgICBfTV9leHRyYWN0X3ZpYV9m b3JtYXQoaXRlcl90eXBlJiBfX2JlZywgaXRlcl90eXBlJiBfX2VuZCwgaW9zX2Jhc2UmIF9faW8s CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRt KiBfX3RtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX0NoYXJUKiBfX2Zvcm1h dCkgY29uc3Q7CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9J bkl0ZXI+CiAgICBsb2NhbGU6OmlkIHRpbWVfZ2V0PF9DaGFyVCwgX0luSXRlcj46OmlkOwoKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBjbGFzcyB0aW1l X2dldF9ieW5hbWUgOiBwdWJsaWMgdGltZV9nZXQ8X0NoYXJULCBfSW5JdGVyPgogICAgewogICAg cHVibGljOgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIF9J bkl0ZXIgaXRlcl90eXBlOwoKICAgICAgZXhwbGljaXQKICAgICAgdGltZV9nZXRfYnluYW1lKGNv bnN0IGNoYXIqLCBzaXplX3QgX19yZWZzID0gMCkKICAgICAgOiB0aW1lX2dldDxfQ2hhclQsIF9J bkl0ZXI+KF9fcmVmcykgeyB9CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH50 aW1lX2dldF9ieW5hbWUoKSB7IH0KICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg dHlwZW5hbWUgX091dEl0ZXI+CiAgICBjbGFzcyB0aW1lX3B1dCA6IHB1YmxpYyBsb2NhbGU6OmZh Y2V0LCBwdWJsaWMgdGltZV9iYXNlCiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9D aGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgX091dEl0ZXIgaXRlcl90eXBlOwoKICAgICAg c3RhdGljIGxvY2FsZTo6aWQgaWQ7CgogICAgICBleHBsaWNpdAogICAgICB0aW1lX3B1dChzaXpl X3QgX19yZWZzID0gMCkKICAgICAgOiBsb2NhbGU6OmZhY2V0KF9fcmVmcykgeyB9CgogICAgICBp dGVyX3R5cGUKICAgICAgcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5 cGUgX19maWxsLCBjb25zdCB0bSogX190bSwKICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19iZWcs IGNvbnN0IF9DaGFyVCogX19lbmQpIGNvbnN0OwoKICAgICAgaXRlcl90eXBlCiAgICAgIHB1dChp dGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwKICAgICAgICAg IGNvbnN0IHRtKiBfX3RtLCBjaGFyIF9fZm9ybWF0LCBjaGFyIF9fbW9kID0gMCkgY29uc3QKICAg ICAgeyByZXR1cm4gdGhpcy0+ZG9fcHV0KF9fcywgX19pbywgX19maWxsLCBfX3RtLCBfX2Zvcm1h dCwgX19tb2QpOyB9CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH50aW1lX3B1 dCgpCiAgICAgIHsgfQoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fcHV0KGl0ZXJf dHlwZSBfX3MsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUgX19maWxsLCBjb25zdCB0bSogX190 bSwKICAgICAgICAgICAgIGNoYXIgX19mb3JtYXQsIGNoYXIgX19tb2QpIGNvbnN0OwogICAgfTsK CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIGxvY2Fs ZTo6aWQgdGltZV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OmlkOwoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgY2xhc3MgdGltZV9wdXRfYnluYW1lIDog cHVibGljIHRpbWVfcHV0PF9DaGFyVCwgX091dEl0ZXI+CiAgICB7CiAgICBwdWJsaWM6CgogICAg ICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgX091dEl0ZXIgaXRlcl90 eXBlOwoKICAgICAgZXhwbGljaXQKICAgICAgdGltZV9wdXRfYnluYW1lKGNvbnN0IGNoYXIqICwg c2l6ZV90IF9fcmVmcyA9IDApCiAgICAgIDogdGltZV9wdXQ8X0NoYXJULCBfT3V0SXRlcj4oX19y ZWZzKQogICAgICB7IH07CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH50aW1l X3B1dF9ieW5hbWUoKSB7IH0KICAgIH07CgoKICBjbGFzcyBtb25leV9iYXNlCiAgewogIHB1Ymxp YzoKICAgIGVudW0gcGFydCB7IG5vbmUsIHNwYWNlLCBzeW1ib2wsIHNpZ24sIHZhbHVlIH07CiAg ICBzdHJ1Y3QgcGF0dGVybiB7IGNoYXIgZmllbGRbNF07IH07CgogICAgc3RhdGljIGNvbnN0IHBh dHRlcm4gX1NfZGVmYXVsdF9wYXR0ZXJuOwoKCgogICAgc3RhdGljIHBhdHRlcm4KICAgIF9TX2Nv bnN0cnVjdF9wYXR0ZXJuKGNoYXIgX19wcmVjZWRlcywgY2hhciBfX3NwYWNlLCBjaGFyIF9fcG9z bik7CiAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCBib29sIF9JbnRsPgogICAgY2xh c3MgbW9uZXlwdW5jdCA6IHB1YmxpYyBsb2NhbGU6OmZhY2V0LCBwdWJsaWMgbW9uZXlfYmFzZQog ICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0 eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQ+IHN0cmluZ190eXBlOwoKICAgICAgc3RhdGljIGNv bnN0IGJvb2wgaW50bCA9IF9JbnRsOwogICAgICBzdGF0aWMgbG9jYWxlOjppZCBpZDsKCiAgICBw cml2YXRlOgogICAgICBjb25zdCBjaGFyKiBfTV9ncm91cGluZzsKICAgICAgY2hhcl90eXBlIF9N X2RlY2ltYWxfcG9pbnQ7CiAgICAgIGNoYXJfdHlwZSBfTV90aG91c2FuZHNfc2VwOwogICAgICBj b25zdCBjaGFyX3R5cGUqIF9NX2N1cnJfc3ltYm9sOwogICAgICBjb25zdCBjaGFyX3R5cGUqIF9N X3Bvc2l0aXZlX3NpZ247CiAgICAgIGNvbnN0IGNoYXJfdHlwZSogX01fbmVnYXRpdmVfc2lnbjsK ICAgICAgaW50IF9NX2ZyYWNfZGlnaXRzOwogICAgICBwYXR0ZXJuIF9NX3Bvc19mb3JtYXQ7CiAg ICAgIHBhdHRlcm4gX01fbmVnX2Zvcm1hdDsKCiAgICBwdWJsaWM6CiAgICAgIGV4cGxpY2l0CiAg ICAgIG1vbmV5cHVuY3Qoc2l6ZV90IF9fcmVmcyA9IDApIDogbG9jYWxlOjpmYWNldChfX3JlZnMp CiAgICAgIHsgX01faW5pdGlhbGl6ZV9tb25leXB1bmN0KCk7IH0KCiAgICAgIGV4cGxpY2l0CiAg ICAgIG1vbmV5cHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MsIHNpemVfdCBfX3JlZnMgPSAwKSA6IGxv Y2FsZTo6ZmFjZXQoX19yZWZzKQogICAgICB7IF9NX2luaXRpYWxpemVfbW9uZXlwdW5jdChfX2Ns b2MpOyB9CgogICAgICBjaGFyX3R5cGUKICAgICAgZGVjaW1hbF9wb2ludCgpIGNvbnN0CiAgICAg IHsgcmV0dXJuIHRoaXMtPmRvX2RlY2ltYWxfcG9pbnQoKTsgfQoKICAgICAgY2hhcl90eXBlCiAg ICAgIHRob3VzYW5kc19zZXAoKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb190aG91c2Fu ZHNfc2VwKCk7IH0KCiAgICAgIHN0cmluZwogICAgICBncm91cGluZygpIGNvbnN0CiAgICAgIHsg cmV0dXJuIHRoaXMtPmRvX2dyb3VwaW5nKCk7IH0KCiAgICAgIHN0cmluZ190eXBlCiAgICAgIGN1 cnJfc3ltYm9sKCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fY3Vycl9zeW1ib2woKTsg fQoKICAgICAgc3RyaW5nX3R5cGUKICAgICAgcG9zaXRpdmVfc2lnbigpIGNvbnN0CiAgICAgIHsg cmV0dXJuIHRoaXMtPmRvX3Bvc2l0aXZlX3NpZ24oKTsgfQoKICAgICAgc3RyaW5nX3R5cGUKICAg ICAgbmVnYXRpdmVfc2lnbigpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX25lZ2F0aXZl X3NpZ24oKTsgfQoKICAgICAgaW50CiAgICAgIGZyYWNfZGlnaXRzKCkgY29uc3QKICAgICAgeyBy ZXR1cm4gdGhpcy0+ZG9fZnJhY19kaWdpdHMoKTsgfQoKICAgICAgcGF0dGVybgogICAgICBwb3Nf Zm9ybWF0KCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fcG9zX2Zvcm1hdCgpOyB9Cgog ICAgICBwYXR0ZXJuCiAgICAgIG5lZ19mb3JtYXQoKSBjb25zdAogICAgICB7IHJldHVybiB0aGlz LT5kb19uZWdfZm9ybWF0KCk7IH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAg fm1vbmV5cHVuY3QoKTsKCiAgICAgIHZpcnR1YWwgY2hhcl90eXBlCiAgICAgIGRvX2RlY2ltYWxf cG9pbnQoKSBjb25zdAogICAgICB7IHJldHVybiBfTV9kZWNpbWFsX3BvaW50OyB9CgogICAgICB2 aXJ0dWFsIGNoYXJfdHlwZQogICAgICBkb190aG91c2FuZHNfc2VwKCkgY29uc3QKICAgICAgeyBy ZXR1cm4gX01fdGhvdXNhbmRzX3NlcDsgfQoKICAgICAgdmlydHVhbCBzdHJpbmcKICAgICAgZG9f Z3JvdXBpbmcoKSBjb25zdAogICAgICB7IHJldHVybiBfTV9ncm91cGluZzsgfQoKICAgICAgdmly dHVhbCBzdHJpbmdfdHlwZQogICAgICBkb19jdXJyX3N5bWJvbCgpIGNvbnN0CiAgICAgIHsgcmV0 dXJuIF9NX2N1cnJfc3ltYm9sOyB9CgogICAgICB2aXJ0dWFsIHN0cmluZ190eXBlCiAgICAgIGRv X3Bvc2l0aXZlX3NpZ24oKSBjb25zdAogICAgICB7IHJldHVybiBfTV9wb3NpdGl2ZV9zaWduOyB9 CgogICAgICB2aXJ0dWFsIHN0cmluZ190eXBlCiAgICAgIGRvX25lZ2F0aXZlX3NpZ24oKSBjb25z dAogICAgICB7IHJldHVybiBfTV9uZWdhdGl2ZV9zaWduOyB9CgogICAgICB2aXJ0dWFsIGludAog ICAgICBkb19mcmFjX2RpZ2l0cygpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX2ZyYWNfZGlnaXRz OyB9CgogICAgICB2aXJ0dWFsIHBhdHRlcm4KICAgICAgZG9fcG9zX2Zvcm1hdCgpIGNvbnN0CiAg ICAgIHsgcmV0dXJuIF9NX3Bvc19mb3JtYXQ7IH0KCiAgICAgIHZpcnR1YWwgcGF0dGVybgogICAg ICBkb19uZWdfZm9ybWF0KCkgY29uc3QKICAgICAgeyByZXR1cm4gX01fbmVnX2Zvcm1hdDsgfQoK CiAgICAgICB2b2lkCiAgICAgICBfTV9pbml0aWFsaXplX21vbmV5cHVuY3QoX19jX2xvY2FsZSBf X2Nsb2MgPSBfU19jX2xvY2FsZSk7CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs IGJvb2wgX0ludGw+CiAgICBsb2NhbGU6OmlkIG1vbmV5cHVuY3Q8X0NoYXJULCBfSW50bD46Omlk OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIGJvb2wgX0ludGw+CiAgICBjb25zdCBib29s IG1vbmV5cHVuY3Q8X0NoYXJULCBfSW50bD46OmludGw7CgogIHRlbXBsYXRlPD4KICAgIG1vbmV5 cHVuY3Q8Y2hhciwgdHJ1ZT46On5tb25leXB1bmN0KCk7CgogIHRlbXBsYXRlPD4KICAgIG1vbmV5 cHVuY3Q8Y2hhciwgZmFsc2U+Ojp+bW9uZXlwdW5jdCgpOwoKICB0ZW1wbGF0ZTw+CiAgICB2b2lk CiAgICBtb25leXB1bmN0PGNoYXIsIHRydWU+OjpfTV9pbml0aWFsaXplX21vbmV5cHVuY3QoX19j X2xvY2FsZSBfX2Nsb2MpOwoKICB0ZW1wbGF0ZTw+CiAgICB2b2lkCiAgICBtb25leXB1bmN0PGNo YXIsIGZhbHNlPjo6X01faW5pdGlhbGl6ZV9tb25leXB1bmN0KF9fY19sb2NhbGUgX19jbG9jKTsK CgogIHRlbXBsYXRlPD4KICAgIG1vbmV5cHVuY3Q8d2NoYXJfdCwgdHJ1ZT46On5tb25leXB1bmN0 KCk7CgogIHRlbXBsYXRlPD4KICAgIG1vbmV5cHVuY3Q8d2NoYXJfdCwgZmFsc2U+Ojp+bW9uZXlw dW5jdCgpOwoKICB0ZW1wbGF0ZTw+CiAgICB2b2lkCiAgICBtb25leXB1bmN0PHdjaGFyX3QsIHRy dWU+OjpfTV9pbml0aWFsaXplX21vbmV5cHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MpOwoKICB0ZW1w bGF0ZTw+CiAgICB2b2lkCiAgICBtb25leXB1bmN0PHdjaGFyX3QsIGZhbHNlPjo6X01faW5pdGlh bGl6ZV9tb25leXB1bmN0KF9fY19sb2NhbGUgX19jbG9jKTsKCgogIHRlbXBsYXRlPHR5cGVuYW1l IF9DaGFyVCwgYm9vbCBfSW50bD4KICAgIGNsYXNzIG1vbmV5cHVuY3RfYnluYW1lIDogcHVibGlj IG1vbmV5cHVuY3Q8X0NoYXJULCBfSW50bD4KICAgIHsKICAgICAgX19jX2xvY2FsZSBfTV9jX2xv Y2FsZV9tb25leXB1bmN0OwoKICAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90 eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQ+IHN0cmluZ190eXBlOwoKICAg ICAgc3RhdGljIGNvbnN0IGJvb2wgaW50bCA9IF9JbnRsOwoKICAgICAgZXhwbGljaXQKICAgICAg bW9uZXlwdW5jdF9ieW5hbWUoY29uc3QgY2hhciogX19zLCBzaXplX3QgX19yZWZzID0gMCkKICAg ICAgOiBtb25leXB1bmN0PF9DaGFyVCwgX0ludGw+KF9fcmVmcykKICAgICAgewogICAgICAgIF9T X2NyZWF0ZV9jX2xvY2FsZShfTV9jX2xvY2FsZV9tb25leXB1bmN0LCBfX3MpOwogICAgICAgIF9N X2luaXRpYWxpemVfbW9uZXlwdW5jdChfTV9jX2xvY2FsZV9tb25leXB1bmN0KTsKICAgICAgfQoK ICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbAogICAgICB+bW9uZXlwdW5jdF9ieW5hbWUoKQog ICAgICB7IF9TX2Rlc3Ryb3lfY19sb2NhbGUoX01fY19sb2NhbGVfbW9uZXlwdW5jdCk7IH0KICAg IH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgYm9vbCBfSW50bD4KICAgIGNvbnN0IGJv b2wgbW9uZXlwdW5jdF9ieW5hbWU8X0NoYXJULCBfSW50bD46OmludGw7CgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIGNsYXNzIG1vbmV5X2dldCA6IHB1 YmxpYyBsb2NhbGU6OmZhY2V0CiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFy VCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgX0luSXRlciBpdGVyX3R5cGU7CiAgICAgIHR5cGVk ZWYgYmFzaWNfc3RyaW5nPF9DaGFyVD4gc3RyaW5nX3R5cGU7CgogICAgICBzdGF0aWMgbG9jYWxl OjppZCBpZDsKCiAgICAgIGV4cGxpY2l0CiAgICAgIG1vbmV5X2dldChzaXplX3QgX19yZWZzID0g MCkgOiBsb2NhbGU6OmZhY2V0KF9fcmVmcykgeyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgZ2V0 KGl0ZXJfdHlwZSBfX3MsIGl0ZXJfdHlwZSBfX2VuZCwgYm9vbCBfX2ludGwsIGlvc19iYXNlJiBf X2lvLAogICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBsb25nIGRvdWJsZSYgX191 bml0cykgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZ2V0KF9fcywgX19lbmQsIF9faW50 bCwgX19pbywgX19lcnIsIF9fdW5pdHMpOyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgZ2V0KGl0 ZXJfdHlwZSBfX3MsIGl0ZXJfdHlwZSBfX2VuZCwgYm9vbCBfX2ludGwsIGlvc19iYXNlJiBfX2lv LAogICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBzdHJpbmdfdHlwZSYgX19kaWdp dHMpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dldChfX3MsIF9fZW5kLCBfX2ludGws IF9faW8sIF9fZXJyLCBfX2RpZ2l0cyk7IH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwK ICAgICAgfm1vbmV5X2dldCgpIHsgfQoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9f Z2V0KGl0ZXJfdHlwZSBfX3MsIGl0ZXJfdHlwZSBfX2VuZCwgYm9vbCBfX2ludGwsIGlvc19iYXNl JiBfX2lvLAogICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBsb25nIGRvdWJs ZSYgX191bml0cykgY29uc3Q7CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXQo aXRlcl90eXBlIF9fcywgaXRlcl90eXBlIF9fZW5kLCBib29sIF9faW50bCwgaW9zX2Jhc2UmIF9f aW8sCiAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHN0cmluZ190eXBlJiBf X2RpZ2l0cykgY29uc3Q7CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu YW1lIF9Jbkl0ZXI+CiAgICBsb2NhbGU6OmlkIG1vbmV5X2dldDxfQ2hhclQsIF9Jbkl0ZXI+Ojpp ZDsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIGNs YXNzIG1vbmV5X3B1dCA6IHB1YmxpYyBsb2NhbGU6OmZhY2V0CiAgICB7CiAgICBwdWJsaWM6CiAg ICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBfT3V0SXRlciBpdGVy X3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVD4gc3RyaW5nX3R5cGU7Cgog ICAgICBzdGF0aWMgbG9jYWxlOjppZCBpZDsKCiAgICAgIGV4cGxpY2l0CiAgICAgIG1vbmV5X3B1 dChzaXplX3QgX19yZWZzID0gMCkgOiBsb2NhbGU6OmZhY2V0KF9fcmVmcykgeyB9CgogICAgICBp dGVyX3R5cGUKICAgICAgcHV0KGl0ZXJfdHlwZSBfX3MsIGJvb2wgX19pbnRsLCBpb3NfYmFzZSYg X19pbywKICAgICAgICAgIGNoYXJfdHlwZSBfX2ZpbGwsIGxvbmcgZG91YmxlIF9fdW5pdHMpIGNv bnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3B1dChfX3MsIF9faW50bCwgX19pbywgX19maWxs LCBfX3VuaXRzKTsgfQoKICAgICAgaXRlcl90eXBlCiAgICAgIHB1dChpdGVyX3R5cGUgX19zLCBi b29sIF9faW50bCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICBjaGFyX3R5cGUgX19maWxsLCBj b25zdCBzdHJpbmdfdHlwZSYgX19kaWdpdHMpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRv X3B1dChfX3MsIF9faW50bCwgX19pbywgX19maWxsLCBfX2RpZ2l0cyk7IH0KCiAgICBwcm90ZWN0 ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfm1vbmV5X3B1dCgpIHsgfQoKICAgICAgdmlydHVhbCBp dGVyX3R5cGUKICAgICAgZG9fcHV0KGl0ZXJfdHlwZSBfX3MsIGJvb2wgX19pbnRsLCBpb3NfYmFz ZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwKICAgICAgICAgICAgIGxvbmcgZG91YmxlIF9fdW5p dHMpIGNvbnN0OwoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fcHV0KGl0ZXJfdHlw ZSBfX3MsIGJvb2wgX19pbnRsLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwKICAg ICAgICAgICAgIGNvbnN0IHN0cmluZ190eXBlJiBfX2RpZ2l0cykgY29uc3Q7CiAgICB9OwoKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgbG9jYWxlOjpp ZCBtb25leV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OmlkOwoKCiAgc3RydWN0IG1lc3NhZ2VzX2Jh c2UKICB7CiAgICB0eXBlZGVmIGludCBjYXRhbG9nOwogIH07CgogIHRlbXBsYXRlPHR5cGVuYW1l IF9DaGFyVD4KICAgIGNsYXNzIG1lc3NhZ2VzIDogcHVibGljIGxvY2FsZTo6ZmFjZXQsIHB1Ymxp YyBtZXNzYWdlc19iYXNlCiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBj aGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVD4gc3RyaW5nX3R5cGU7 CgogICAgcHJvdGVjdGVkOgoKCiAgICAgIF9fY19sb2NhbGUgX01fY19sb2NhbGVfbWVzc2FnZXM7 CgoKICAgICAgY29uc3QgY2hhciogX01fbmFtZV9tZXNzYWdlczsKCgogICAgcHVibGljOgogICAg ICBzdGF0aWMgbG9jYWxlOjppZCBpZDsKCiAgICAgIGV4cGxpY2l0CiAgICAgIG1lc3NhZ2VzKHNp emVfdCBfX3JlZnMgPSAwKQogICAgICA6IGxvY2FsZTo6ZmFjZXQoX19yZWZzKSwgX01fbmFtZV9t ZXNzYWdlcygiQyIpCiAgICAgIHsgX01fY19sb2NhbGVfbWVzc2FnZXMgPSBfU19jX2xvY2FsZTsg fQoKCiAgICAgIGV4cGxpY2l0CiAgICAgIG1lc3NhZ2VzKF9fY19sb2NhbGUgX19jbG9jLCBjb25z dCBjaGFyKiBfX25hbWUsIHNpemVfdCBfX3JlZnMgPSAwKQogICAgICA6IGxvY2FsZTo6ZmFjZXQo X19yZWZzKQogICAgICB7CiAgICAgICAgX01fbmFtZV9tZXNzYWdlcyA9IF9fbmFtZTsKICAgICAg ICBfTV9jX2xvY2FsZV9tZXNzYWdlcyA9IF9TX2Nsb25lX2NfbG9jYWxlKF9fY2xvYyk7CiAgICAg IH0KCiAgICAgIGNhdGFsb2cKICAgICAgb3Blbihjb25zdCBiYXNpY19zdHJpbmc8Y2hhcj4mIF9f cywgY29uc3QgbG9jYWxlJiBfX2xvYykgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fb3Bl bihfX3MsIF9fbG9jKTsgfQoKCiAgICAgIGNhdGFsb2cKICAgICAgb3Blbihjb25zdCBiYXNpY19z dHJpbmc8Y2hhcj4mLCBjb25zdCBsb2NhbGUmLCBjb25zdCBjaGFyKikgY29uc3Q7CgogICAgICBz dHJpbmdfdHlwZQogICAgICBnZXQoY2F0YWxvZyBfX2MsIGludCBfX3NldCwgaW50IF9fbXNnaWQs IGNvbnN0IHN0cmluZ190eXBlJiBfX3MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dl dChfX2MsIF9fc2V0LCBfX21zZ2lkLCBfX3MpOyB9CgogICAgICB2b2lkCiAgICAgIGNsb3NlKGNh dGFsb2cgX19jKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19jbG9zZShfX2MpOyB9Cgog ICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH5tZXNzYWdlcygpCiAgICAgICB7CiAg ICAgICAgIGlmIChfTV9jX2xvY2FsZV9tZXNzYWdlcyAhPSBfU19jX2xvY2FsZSkKICAgICAgICAg ICBfU19kZXN0cm95X2NfbG9jYWxlKF9NX2NfbG9jYWxlX21lc3NhZ2VzKTsKICAgICAgIH0KCiAg ICAgIHZpcnR1YWwgY2F0YWxvZwogICAgICBkb19vcGVuKGNvbnN0IGJhc2ljX3N0cmluZzxjaGFy PiYsIGNvbnN0IGxvY2FsZSYpIGNvbnN0OwoKICAgICAgdmlydHVhbCBzdHJpbmdfdHlwZQogICAg ICBkb19nZXQoY2F0YWxvZywgaW50LCBpbnQsIGNvbnN0IHN0cmluZ190eXBlJiBfX2RmYXVsdCkg Y29uc3Q7CgogICAgICB2aXJ0dWFsIHZvaWQKICAgICAgZG9fY2xvc2UoY2F0YWxvZykgY29uc3Q7 CgoKICAgICAgY2hhcioKICAgICAgX01fY29udmVydF90b19jaGFyKGNvbnN0IHN0cmluZ190eXBl JiBfX21zZykgY29uc3QKICAgICAgewoKICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxj aGFyKj4oY29uc3RfY2FzdDxfQ2hhclQqPihfX21zZy5jX3N0cigpKSk7CiAgICAgIH0KCgogICAg ICBzdHJpbmdfdHlwZQogICAgICBfTV9jb252ZXJ0X2Zyb21fY2hhcihjaGFyKiBfX21zZykgY29u c3QKICAgICAgewoKICAgICAgICBzaXplX3QgX19sZW4gPSBjaGFyX3RyYWl0czxjaGFyPjo6bGVu Z3RoKF9fbXNnKSAtIDE7CiMgMTcwNSAiL3Vzci9jeWdudXMvYmluLy4uL2luY2x1ZGUvYysrLzMu MS4xL2JpdHMvbG9jYWxlX2ZhY2V0cy5oIiAzCiAgICAgICAgcmV0dXJuIHN0cmluZ190eXBlKCk7 CiAgICAgIH0KICAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBsb2NhbGU6 OmlkIG1lc3NhZ2VzPF9DaGFyVD46OmlkOwoKCiAgdGVtcGxhdGU8PgogICAgc3RyaW5nCiAgICBt ZXNzYWdlczxjaGFyPjo6ZG9fZ2V0KGNhdGFsb2csIGludCwgaW50LCBjb25zdCBzdHJpbmcmKSBj b25zdDsKCgojIDEgIi91c3IvY3lnbnVzL2Jpbi8uLi9pbmNsdWRlL2MrKy8zLjEuMS9pNjg2LXBj LWxpbnV4LWdudS9iaXRzL21lc3NhZ2VzX21lbWJlcnMuaCIgMSAzCiMgMzcgIi91c3IvY3lnbnVz L2Jpbi8uLi9pbmNsdWRlL2MrKy8zLjEuMS9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL21lc3NhZ2Vz X21lbWJlcnMuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIHR5cGVuYW1lIG1l c3NhZ2VzPF9DaGFyVD46OmNhdGFsb2cKICAgIG1lc3NhZ2VzPF9DaGFyVD46Om9wZW4oY29uc3Qg YmFzaWNfc3RyaW5nPGNoYXI+JiBfX3MsIGNvbnN0IGxvY2FsZSYgX19sb2MsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqKSBjb25zdAogICAgeyByZXR1cm4gdGhpcy0+ZG9f b3BlbihfX3MsIF9fbG9jKTsgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgdHlw ZW5hbWUgbWVzc2FnZXM8X0NoYXJUPjo6Y2F0YWxvZwogICAgbWVzc2FnZXM8X0NoYXJUPjo6ZG9f b3Blbihjb25zdCBiYXNpY19zdHJpbmc8Y2hhcj4mLCBjb25zdCBsb2NhbGUmKSBjb25zdAogICAg eyByZXR1cm4gMDsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICB0eXBlbmFtZSBt ZXNzYWdlczxfQ2hhclQ+OjpzdHJpbmdfdHlwZQogICAgbWVzc2FnZXM8X0NoYXJUPjo6ZG9fZ2V0 KGNhdGFsb2csIGludCwgaW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0 cmluZ190eXBlJiBfX2RmYXVsdCkgY29uc3QKICAgIHsgcmV0dXJuIF9fZGZhdWx0OyB9CgogIHRl bXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIHZvaWQKICAgIG1lc3NhZ2VzPF9DaGFyVD46OmRv X2Nsb3NlKGNhdGFsb2cpIGNvbnN0CiAgICB7IH0KIyAxNzE5ICIvdXNyL2N5Z251cy9iaW4vLi4v aW5jbHVkZS9jKysvMy4xLjEvYml0cy9sb2NhbGVfZmFjZXRzLmgiIDIgMwoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfQ2hhclQ+CiAgICBjbGFzcyBtZXNzYWdlc19ieW5hbWUgOiBwdWJsaWMgbWVzc2Fn ZXM8X0NoYXJUPgogICAgewogICAgcHVibGljOgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5 cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVD4gc3RyaW5nX3R5cGU7CgogICAg ICBleHBsaWNpdAogICAgICBtZXNzYWdlc19ieW5hbWUoY29uc3QgY2hhciogX19zLCBzaXplX3Qg X19yZWZzID0gMCkKICAgICAgOiBtZXNzYWdlczxfQ2hhclQ+KF9fcmVmcykKICAgICAgewogICAg ICAgIF9NX25hbWVfbWVzc2FnZXMgPSBfX3M7CiAgICAgICAgaWYgKF9NX2NfbG9jYWxlX21lc3Nh Z2VzICE9IF9TX2NfbG9jYWxlKQogICAgICAgICAgX1NfZGVzdHJveV9jX2xvY2FsZShfTV9jX2xv Y2FsZV9tZXNzYWdlcyk7CiAgICAgICAgX1NfY3JlYXRlX2NfbG9jYWxlKF9NX2NfbG9jYWxlX21l c3NhZ2VzLCBfX3MpOwogICAgICB9CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAg IH5tZXNzYWdlc19ieW5hbWUoKQogICAgICB7IH0KICAgIH07CgoKCgoKCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlzc3BhY2UoX0NoYXJUIF9fYywgY29u c3QgbG9jYWxlJiBfX2xvYykKICAgIHsgcmV0dXJuIHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4o X19sb2MpLmlzKGN0eXBlX2Jhc2U6OnNwYWNlLCBfX2MpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1l IF9DaGFyVD4KICAgIGlubGluZSBib29sCiAgICBpc3ByaW50KF9DaGFyVCBfX2MsIGNvbnN0IGxv Y2FsZSYgX19sb2MpCiAgICB7IHJldHVybiB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9j KS5pcyhjdHlwZV9iYXNlOjpwcmludCwgX19jKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh clQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXNjbnRybChfQ2hhclQgX19jLCBjb25zdCBsb2NhbGUm IF9fbG9jKQogICAgeyByZXR1cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYykuaXMo Y3R5cGVfYmFzZTo6Y250cmwsIF9fYyk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgog ICAgaW5saW5lIGJvb2wKICAgIGlzdXBwZXIoX0NoYXJUIF9fYywgY29uc3QgbG9jYWxlJiBfX2xv YykKICAgIHsgcmV0dXJuIHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpLmlzKGN0eXBl X2Jhc2U6OnVwcGVyLCBfX2MpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlu bGluZSBib29sIGlzbG93ZXIoX0NoYXJUIF9fYywgY29uc3QgbG9jYWxlJiBfX2xvYykKICAgIHsg cmV0dXJuIHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpLmlzKGN0eXBlX2Jhc2U6Omxv d2VyLCBfX2MpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29s CiAgICBpc2FscGhhKF9DaGFyVCBfX2MsIGNvbnN0IGxvY2FsZSYgX19sb2MpCiAgICB7IHJldHVy biB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKS5pcyhjdHlwZV9iYXNlOjphbHBoYSwg X19jKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAg aXNkaWdpdChfQ2hhclQgX19jLCBjb25zdCBsb2NhbGUmIF9fbG9jKQogICAgeyByZXR1cm4gdXNl X2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYykuaXMoY3R5cGVfYmFzZTo6ZGlnaXQsIF9fYyk7 IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlzcHVu Y3QoX0NoYXJUIF9fYywgY29uc3QgbG9jYWxlJiBfX2xvYykKICAgIHsgcmV0dXJuIHVzZV9mYWNl dDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpLmlzKGN0eXBlX2Jhc2U6OnB1bmN0LCBfX2MpOyB9Cgog IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAgICBpc3hkaWdpdChf Q2hhclQgX19jLCBjb25zdCBsb2NhbGUmIF9fbG9jKQogICAgeyByZXR1cm4gdXNlX2ZhY2V0PGN0 eXBlPF9DaGFyVD4gPihfX2xvYykuaXMoY3R5cGVfYmFzZTo6eGRpZ2l0LCBfX2MpOyB9CgogIHRl bXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAgICBpc2FsbnVtKF9DaGFy VCBfX2MsIGNvbnN0IGxvY2FsZSYgX19sb2MpCiAgICB7IHJldHVybiB1c2VfZmFjZXQ8Y3R5cGU8 X0NoYXJUPiA+KF9fbG9jKS5pcyhjdHlwZV9iYXNlOjphbG51bSwgX19jKTsgfQoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXNncmFwaChfQ2hhclQgX19j LCBjb25zdCBsb2NhbGUmIF9fbG9jKQogICAgeyByZXR1cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFy VD4gPihfX2xvYykuaXMoY3R5cGVfYmFzZTo6Z3JhcGgsIF9fYyk7IH0KCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIF9DaGFyVAogICAgdG91cHBlcihfQ2hhclQgX19jLCBj b25zdCBsb2NhbGUmIF9fbG9jKQogICAgeyByZXR1cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4g PihfX2xvYykudG91cHBlcihfX2MpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAg IGlubGluZSBfQ2hhclQKICAgIHRvbG93ZXIoX0NoYXJUIF9fYywgY29uc3QgbG9jYWxlJiBfX2xv YykKICAgIHsgcmV0dXJuIHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpLnRvbG93ZXIo X19jKTsgfQp9CiMgNDIgIi91c3IvY3lnbnVzL2Jpbi8uLi9pbmNsdWRlL2MrKy8zLjEuMS9iaXRz L2Jhc2ljX2lvcy5oIiAyIDMKCm5hbWVzcGFjZSBzdGQKewoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBjbGFzcyBiYXNpY19pb3MgOiBwdWJsaWMgaW9z X2Jhc2UKICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsK ICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjppbnRfdHlwZSBpbnRfdHlwZTsKICAgICAg dHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjpwb3NfdHlwZSBwb3NfdHlwZTsKICAgICAgdHlwZWRl ZiB0eXBlbmFtZSBfVHJhaXRzOjpvZmZfdHlwZSBvZmZfdHlwZTsKICAgICAgdHlwZWRlZiBfVHJh aXRzIHRyYWl0c190eXBlOwoKCiAgICAgIHR5cGVkZWYgY3R5cGU8X0NoYXJUPiBfX2N0eXBlX3R5 cGU7CiAgICAgIHR5cGVkZWYgb3N0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQsIF9UcmFpdHM+IF9f b3N0cmVhbWJ1Zl9pdGVyOwogICAgICB0eXBlZGVmIG51bV9wdXQ8X0NoYXJULCBfX29zdHJlYW1i dWZfaXRlcj4gX19udW1wdXRfdHlwZTsKICAgICAgdHlwZWRlZiBpc3RyZWFtYnVmX2l0ZXJhdG9y PF9DaGFyVCwgX1RyYWl0cz4gX19pc3RyZWFtYnVmX2l0ZXI7CiAgICAgIHR5cGVkZWYgbnVtX2dl dDxfQ2hhclQsIF9faXN0cmVhbWJ1Zl9pdGVyPiBfX251bWdldF90eXBlOwoKCiAgICBwcm90ZWN0 ZWQ6CiAgICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiogX01fdGllOwogICAgICBt dXRhYmxlIGNoYXJfdHlwZSBfTV9maWxsOwogICAgICBtdXRhYmxlIGJvb2wgX01fZmlsbF9pbml0 OwogICAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiogX01fc3RyZWFtYnVmOwoK CiAgICAgIGNvbnN0IF9fY3R5cGVfdHlwZSogX01fZmN0eXBlOwoKICAgICAgY29uc3QgX19udW1w dXRfdHlwZSogX01fZm51bXB1dDsKCiAgICAgIGNvbnN0IF9fbnVtZ2V0X3R5cGUqIF9NX2ZudW1n ZXQ7CgogICAgcHVibGljOgogICAgICBvcGVyYXRvciB2b2lkKigpIGNvbnN0CiAgICAgIHsgcmV0 dXJuIHRoaXMtPmZhaWwoKSA/IDAgOiBjb25zdF9jYXN0PGJhc2ljX2lvcyo+KHRoaXMpOyB9Cgog ICAgICBib29sCiAgICAgIG9wZXJhdG9yISgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmZh aWwoKTsgfQoKICAgICAgaW9zdGF0ZQogICAgICByZHN0YXRlKCkgY29uc3QKICAgICAgeyByZXR1 cm4gX01fc3RyZWFtYnVmX3N0YXRlOyB9CgogICAgICB2b2lkCiAgICAgIGNsZWFyKGlvc3RhdGUg X19zdGF0ZSA9IGdvb2RiaXQpOwoKICAgICAgdm9pZAogICAgICBzZXRzdGF0ZShpb3N0YXRlIF9f c3RhdGUpCiAgICAgIHsgdGhpcy0+Y2xlYXIodGhpcy0+cmRzdGF0ZSgpIHwgX19zdGF0ZSk7IH0K CiAgICAgIGJvb2wKICAgICAgZ29vZCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPnJkc3Rh dGUoKSA9PSAwOyB9CgogICAgICBib29sCiAgICAgIGVvZigpIGNvbnN0CiAgICAgIHsgcmV0dXJu ICh0aGlzLT5yZHN0YXRlKCkgJiBlb2ZiaXQpICE9IDA7IH0KCiAgICAgIGJvb2wKICAgICAgZmFp bCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuICh0aGlzLT5yZHN0YXRlKCkgJiAoYmFkYml0IHwgZmFp bGJpdCkpICE9IDA7IH0KCiAgICAgIGJvb2wKICAgICAgYmFkKCkgY29uc3QKICAgICAgeyByZXR1 cm4gKHRoaXMtPnJkc3RhdGUoKSAmIGJhZGJpdCkgIT0gMDsgfQoKICAgICAgaW9zdGF0ZQogICAg ICBleGNlcHRpb25zKCkgY29uc3QKICAgICAgeyByZXR1cm4gX01fZXhjZXB0aW9uOyB9CgogICAg ICB2b2lkCiAgICAgIGV4Y2VwdGlvbnMoaW9zdGF0ZSBfX2V4Y2VwdCkKICAgICAgewogICAgICAg IF9NX2V4Y2VwdGlvbiA9IF9fZXhjZXB0OwogICAgICAgIHRoaXMtPmNsZWFyKF9NX3N0cmVhbWJ1 Zl9zdGF0ZSk7CiAgICAgIH0KCgogICAgICBleHBsaWNpdAogICAgICBiYXNpY19pb3MoYmFzaWNf c3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4qIF9fc2IpIDogaW9zX2Jhc2UoKQogICAgICB7IHRo aXMtPmluaXQoX19zYik7IH0KCiAgICAgIHZpcnR1YWwKICAgICAgfmJhc2ljX2lvcygpIHsgfQoK CiAgICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPioKICAgICAgdGllKCkgY29uc3QK ICAgICAgeyByZXR1cm4gX01fdGllOyB9CgogICAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1Ry YWl0cz4qCiAgICAgIHRpZShiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4qIF9fdGllc3Ry KQogICAgICB7CiAgICAgICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+KiBfX29sZCA9 IF9NX3RpZTsKICAgICAgICBfTV90aWUgPSBfX3RpZXN0cjsKICAgICAgICByZXR1cm4gX19vbGQ7 CiAgICAgIH0KCiAgICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+KgogICAgICBy ZGJ1ZigpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX3N0cmVhbWJ1ZjsgfQoKICAgICAgYmFzaWNf c3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4qCiAgICAgIHJkYnVmKGJhc2ljX3N0cmVhbWJ1Zjxf Q2hhclQsIF9UcmFpdHM+KiBfX3NiKTsKCiAgICAgIGJhc2ljX2lvcyYKICAgICAgY29weWZtdChj b25zdCBiYXNpY19pb3MmIF9fcmhzKTsKCiAgICAgIGNoYXJfdHlwZQogICAgICBmaWxsKCkgY29u c3QKICAgICAgewogICAgICAgIGlmICghX01fZmlsbF9pbml0KQogICAgICAgICAgewogICAgICAg ICAgICBfTV9maWxsID0gdGhpcy0+d2lkZW4oJyAnKTsKICAgICAgICAgICAgX01fZmlsbF9pbml0 ID0gdHJ1ZTsKICAgICAgICAgIH0KICAgICAgICByZXR1cm4gX01fZmlsbDsKICAgICAgfQoKICAg ICAgY2hhcl90eXBlCiAgICAgIGZpbGwoY2hhcl90eXBlIF9fY2gpCiAgICAgIHsKICAgICAgICBj aGFyX3R5cGUgX19vbGQgPSB0aGlzLT5maWxsKCk7CiAgICAgICAgX01fZmlsbCA9IF9fY2g7CiAg ICAgICAgcmV0dXJuIF9fb2xkOwogICAgICB9CgoKICAgICAgbG9jYWxlCiAgICAgIGltYnVlKGNv bnN0IGxvY2FsZSYgX19sb2MpOwoKICAgICAgY2hhcgogICAgICBuYXJyb3coY2hhcl90eXBlIF9f YywgY2hhciBfX2RmYXVsdCkgY29uc3Q7CgogICAgICBjaGFyX3R5cGUKICAgICAgd2lkZW4oY2hh ciBfX2MpIGNvbnN0OwoKICAgIHByb3RlY3RlZDoKCiAgICAgIGJhc2ljX2lvcygpIDogaW9zX2Jh c2UoKQogICAgICB7IH0KCiAgICAgIHZvaWQKICAgICAgaW5pdChiYXNpY19zdHJlYW1idWY8X0No YXJULCBfVHJhaXRzPiogX19zYik7CgogICAgICBib29sCiAgICAgIF9NX2NoZWNrX2ZhY2V0KGNv bnN0IGxvY2FsZTo6ZmFjZXQqIF9fZikgY29uc3QKICAgICAgewogICAgICAgIGlmICghX19mKQog ICAgICAgICAgX190aHJvd19iYWRfY2FzdCgpOwogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9 CgogICAgICB2b2lkCiAgICAgIF9NX2NhY2hlX2ZhY2V0cyhjb25zdCBsb2NhbGUmIF9fbG9jKTsK ICAgIH07Cn0KCgoKIyAxICIvdXNyL2N5Z251cy9iaW4vLi4vaW5jbHVkZS9jKysvMy4xLjEvYml0 cy9iYXNpY19pb3MudGNjIiAxIDMKIyAzNCAiL3Vzci9jeWdudXMvYmluLy4uL2luY2x1ZGUvYysr LzMuMS4xL2JpdHMvYmFzaWNfaW9zLnRjYyIgMwoKbmFtZXNwYWNlIHN0ZAp7CiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgdm9pZAogICAgYmFzaWNfaW9z PF9DaGFyVCwgX1RyYWl0cz46OmNsZWFyKGlvc3RhdGUgX19zdGF0ZSkKICAgIHsKICAgICAgaWYg KHRoaXMtPnJkYnVmKCkpCiAgICAgICAgX01fc3RyZWFtYnVmX3N0YXRlID0gX19zdGF0ZTsKICAg ICAgZWxzZQogICAgICAgICAgX01fc3RyZWFtYnVmX3N0YXRlID0gX19zdGF0ZSB8IGJhZGJpdDsK ICAgICAgaWYgKCh0aGlzLT5yZHN0YXRlKCkgJiB0aGlzLT5leGNlcHRpb25zKCkpKQogICAgICAg IF9fdGhyb3dfaW9zX2ZhaWx1cmUoImJhc2ljX2lvczo6Y2xlYXIoaW9zdGF0ZSkgY2F1c2VkIGV4 Y2VwdGlvbiIpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U cmFpdHM+CiAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPioKICAgIGJhc2ljX2lv czxfQ2hhclQsIF9UcmFpdHM+OjpyZGJ1ZihiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRz PiogX19zYikKICAgIHsKICAgICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4qIF9f b2xkID0gX01fc3RyZWFtYnVmOwogICAgICBfTV9zdHJlYW1idWYgPSBfX3NiOwogICAgICB0aGlz LT5jbGVhcigpOwogICAgICByZXR1cm4gX19vbGQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1l IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lvczxfQ2hhclQsIF9UcmFpdHM+ JgogICAgYmFzaWNfaW9zPF9DaGFyVCwgX1RyYWl0cz46OmNvcHlmbXQoY29uc3QgYmFzaWNfaW9z JiBfX3JocykKICAgIHsKCgoKCiAgICAgIF9Xb3JkcyogX193b3JkcyA9IChfX3Jocy5fTV93b3Jk X3NpemUgPD0gX1NfbG9jYWxfd29yZF9zaXplKSA/CiAgICAgICAgX01fbG9jYWxfd29yZCA6IG5l dyBfV29yZHNbX19yaHMuX01fd29yZF9zaXplXTsKCgogICAgICBfQ2FsbGJhY2tfbGlzdCogX19j YiA9IF9fcmhzLl9NX2NhbGxiYWNrczsKICAgICAgaWYgKF9fY2IpCiAgICAgICAgX19jYi0+X01f YWRkX3JlZmVyZW5jZSgpOwogICAgICBfTV9jYWxsX2NhbGxiYWNrcyhlcmFzZV9ldmVudCk7CiAg ICAgIGlmIChfTV93b3JkICE9IF9NX2xvY2FsX3dvcmQpCiAgICAgICAgewogICAgICAgICAgZGVs ZXRlIFtdIF9NX3dvcmQ7CiAgICAgICAgICBfTV93b3JkID0gMDsKICAgICAgICB9CiAgICAgIF9N X2Rpc3Bvc2VfY2FsbGJhY2tzKCk7CgogICAgICBfTV9jYWxsYmFja3MgPSBfX2NiOwogICAgICBm b3IgKGludCBfX2kgPSAwOyBfX2kgPCBfX3Jocy5fTV93b3JkX3NpemU7ICsrX19pKQogICAgICAg IF9fd29yZHNbX19pXSA9IF9fcmhzLl9NX3dvcmRbX19pXTsKICAgICAgaWYgKF9NX3dvcmQgIT0g X01fbG9jYWxfd29yZCkKICAgICAgICB7CiAgICAgICAgICBkZWxldGUgW10gX01fd29yZDsKICAg ICAgICAgIF9NX3dvcmQgPSAwOwogICAgICAgIH0KICAgICAgX01fd29yZCA9IF9fd29yZHM7CiAg ICAgIF9NX3dvcmRfc2l6ZSA9IF9fcmhzLl9NX3dvcmRfc2l6ZTsKCiAgICAgIHRoaXMtPmZsYWdz KF9fcmhzLmZsYWdzKCkpOwogICAgICB0aGlzLT53aWR0aChfX3Jocy53aWR0aCgpKTsKICAgICAg dGhpcy0+cHJlY2lzaW9uKF9fcmhzLnByZWNpc2lvbigpKTsKICAgICAgdGhpcy0+dGllKF9fcmhz LnRpZSgpKTsKICAgICAgdGhpcy0+ZmlsbChfX3Jocy5maWxsKCkpOwoKICAgICAgdGhpcy0+ZXhj ZXB0aW9ucyhfX3Jocy5leGNlcHRpb25zKCkpOwoKICAgICAgX01fY2FsbF9jYWxsYmFja3MoY29w eWZtdF9ldmVudCk7CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgY2hhcgogICAgYmFzaWNfaW9zPF9DaGFy VCwgX1RyYWl0cz46Om5hcnJvdyhjaGFyX3R5cGUgX19jLCBjaGFyIF9fZGZhdWx0KSBjb25zdAog ICAgewogICAgICBjaGFyIF9fcmV0ID0gX19kZmF1bHQ7CiAgICAgIGlmIChfTV9jaGVja19mYWNl dChfTV9mY3R5cGUpKQogICAgICAgIF9fcmV0ID0gX01fZmN0eXBlLT5uYXJyb3coX19jLCBfX2Rm YXVsdCk7CiAgICAgIHJldHVybiBfX3JldDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No YXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgX0NoYXJUCiAgICBiYXNpY19pb3M8X0NoYXJULCBf VHJhaXRzPjo6d2lkZW4oY2hhciBfX2MpIGNvbnN0CiAgICB7CiAgICAgIGNoYXJfdHlwZSBfX3Jl dCA9IGNoYXJfdHlwZSgpOwogICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZmN0eXBlKSkKICAg ICAgICBfX3JldCA9IF9NX2ZjdHlwZS0+d2lkZW4oX19jKTsKICAgICAgcmV0dXJuIF9fcmV0Owog ICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAg bG9jYWxlCiAgICBiYXNpY19pb3M8X0NoYXJULCBfVHJhaXRzPjo6aW1idWUoY29uc3QgbG9jYWxl JiBfX2xvYykKICAgIHsKICAgICAgbG9jYWxlIF9fb2xkKHRoaXMtPmdldGxvYygpKTsKICAgICAg aW9zX2Jhc2U6OmltYnVlKF9fbG9jKTsKICAgICAgX01fY2FjaGVfZmFjZXRzKF9fbG9jKTsKICAg ICAgaWYgKHRoaXMtPnJkYnVmKCkgIT0gMCkKICAgICAgICB0aGlzLT5yZGJ1ZigpLT5wdWJpbWJ1 ZShfX2xvYyk7CiAgICAgIHJldHVybiBfX29sZDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgdm9pZAogICAgYmFzaWNfaW9zPF9DaGFyVCwg X1RyYWl0cz46OmluaXQoYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4qIF9fc2IpCiAg ICB7CgogICAgICBpb3NfYmFzZTo6X01faW5pdCgpOwogICAgICBfTV9jYWNoZV9mYWNldHMoX01f aW9zX2xvY2FsZSk7CiAgICAgIF9NX3RpZSA9IDA7CiMgMTU5ICIvdXNyL2N5Z251cy9iaW4vLi4v aW5jbHVkZS9jKysvMy4xLjEvYml0cy9iYXNpY19pb3MudGNjIiAzCiAgICAgIF9NX2ZpbGwgPSAw OwogICAgICBfTV9maWxsX2luaXQgPSBmYWxzZTsKCiAgICAgIF9NX2V4Y2VwdGlvbiA9IGdvb2Ri aXQ7CiAgICAgIF9NX3N0cmVhbWJ1ZiA9IF9fc2I7CiAgICAgIF9NX3N0cmVhbWJ1Zl9zdGF0ZSA9 IF9fc2IgPyBnb29kYml0IDogYmFkYml0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh clQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICB2b2lkCiAgICBiYXNpY19pb3M8X0NoYXJULCBfVHJh aXRzPjo6X01fY2FjaGVfZmFjZXRzKGNvbnN0IGxvY2FsZSYgX19sb2MpCiAgICB7CiAgICAgIGlm IChoYXNfZmFjZXQ8X19jdHlwZV90eXBlPihfX2xvYykpCiAgICAgICAgX01fZmN0eXBlID0gJnVz ZV9mYWNldDxfX2N0eXBlX3R5cGU+KF9fbG9jKTsKICAgICAgZWxzZQogICAgICAgIF9NX2ZjdHlw ZSA9IDA7CgogICAgICBpZiAoaGFzX2ZhY2V0PF9fbnVtcHV0X3R5cGU+KF9fbG9jKSkKICAgICAg ICBfTV9mbnVtcHV0ID0gJnVzZV9mYWNldDxfX251bXB1dF90eXBlPihfX2xvYyk7CiAgICAgIGVs c2UKICAgICAgICBfTV9mbnVtcHV0ID0gMDsKICAgICAgaWYgKGhhc19mYWNldDxfX251bWdldF90 eXBlPihfX2xvYykpCiAgICAgICAgX01fZm51bWdldCA9ICZ1c2VfZmFjZXQ8X19udW1nZXRfdHlw ZT4oX19sb2MpOwogICAgICBlbHNlCiAgICAgICAgX01fZm51bWdldCA9IDA7CiAgICB9CgoKCgog IGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBiYXNpY19pb3M8Y2hhcj47CiAgZXh0ZXJuIHRlbXBsYXRl IGNsYXNzIGJhc2ljX2lvczx3Y2hhcl90PjsKfQojIDIwOCAiL3Vzci9jeWdudXMvYmluLy4uL2lu Y2x1ZGUvYysrLzMuMS4xL2JpdHMvYmFzaWNfaW9zLmgiIDIgMwojIDUyICIvdXNyL2N5Z251cy9i aW4vLi4vaW5jbHVkZS9jKysvMy4xLjEvaW9zIiAyIDMKIyA0NiAiL3Vzci9jeWdudXMvYmluLy4u L2luY2x1ZGUvYysrLzMuMS4xL29zdHJlYW0iIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CgogIHRlbXBs YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGNsYXNzIGJhc2ljX29z dHJlYW0gOiB2aXJ0dWFsIHB1YmxpYyBiYXNpY19pb3M8X0NoYXJULCBfVHJhaXRzPgogICAgewog ICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVm IHR5cGVuYW1lIF9UcmFpdHM6OmludF90eXBlIGludF90eXBlOwogICAgICB0eXBlZGVmIHR5cGVu YW1lIF9UcmFpdHM6OnBvc190eXBlIHBvc190eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9U cmFpdHM6Om9mZl90eXBlIG9mZl90eXBlOwogICAgICB0eXBlZGVmIF9UcmFpdHMgdHJhaXRzX3R5 cGU7CgoKICAgICAgdHlwZWRlZiBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiBfX3N0 cmVhbWJ1Zl90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX2lvczxfQ2hhclQsIF9UcmFpdHM+IF9f aW9zX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IF9f b3N0cmVhbV90eXBlOwogICAgICB0eXBlZGVmIG9zdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJULCBf VHJhaXRzPiBfX29zdHJlYW1idWZfaXRlcjsKICAgICAgdHlwZWRlZiBudW1fcHV0PF9DaGFyVCwg X19vc3RyZWFtYnVmX2l0ZXI+IF9fbnVtcHV0X3R5cGU7CiAgICAgIHR5cGVkZWYgY3R5cGU8X0No YXJUPiBfX2N0eXBlX3R5cGU7CgoKICAgICAgZXhwbGljaXQKICAgICAgYmFzaWNfb3N0cmVhbShf X3N0cmVhbWJ1Zl90eXBlKiBfX3NiKQogICAgICB7IHRoaXMtPmluaXQoX19zYik7IH0KCiAgICAg IHZpcnR1YWwKICAgICAgfmJhc2ljX29zdHJlYW0oKSB7IH0KCgogICAgICBjbGFzcyBzZW50cnk7 CiAgICAgIGZyaWVuZCBjbGFzcyBzZW50cnk7CgoKCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAg ICBvcGVyYXRvcjw8KF9fb3N0cmVhbV90eXBlJiAoKl9fcGYpKF9fb3N0cmVhbV90eXBlJikpOwoK ICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPDwoX19pb3NfdHlwZSYgKCpfX3Bm KShfX2lvc190eXBlJikpOwoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPDwo aW9zX2Jhc2UmICgqX19wZikgKGlvc19iYXNlJikpOwoKCiAgICAgIF9fb3N0cmVhbV90eXBlJgog ICAgICBvcGVyYXRvcjw8KGxvbmcgX19uKTsKCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBv cGVyYXRvcjw8KHVuc2lnbmVkIGxvbmcgX19uKTsKCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAg ICBvcGVyYXRvcjw8KGJvb2wgX19uKTsKCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVy YXRvcjw8KHNob3J0IF9fbikKICAgICAgewogICAgICAgIGlvc19iYXNlOjpmbXRmbGFncyBfX2Zt dCA9IHRoaXMtPmZsYWdzKCkgJiBpb3NfYmFzZTo6YmFzZWZpZWxkOwogICAgICAgIGlmIChfX2Zt dCAmIGlvc19iYXNlOjpvY3QgfHwgX19mbXQgJiBpb3NfYmFzZTo6aGV4KQogICAgICAgICAgcmV0 dXJuIHRoaXMtPm9wZXJhdG9yPDwoc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4KICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIChzdGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9ydD4oX19u KSkpOwogICAgICAgIGVsc2UKICAgICAgICAgIHJldHVybiB0aGlzLT5vcGVyYXRvcjw8KHN0YXRp Y19jYXN0PGxvbmc+KF9fbikpOwogICAgICB9CgogICAgICBfX29zdHJlYW1fdHlwZSYKICAgICAg b3BlcmF0b3I8PCh1bnNpZ25lZCBzaG9ydCBfX24pCiAgICAgIHsgcmV0dXJuIHRoaXMtPm9wZXJh dG9yPDwoc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4oX19uKSk7IH0KCiAgICAgIF9fb3N0cmVh bV90eXBlJgogICAgICBvcGVyYXRvcjw8KGludCBfX24pCiAgICAgIHsKICAgICAgICBpb3NfYmFz ZTo6Zm10ZmxhZ3MgX19mbXQgPSB0aGlzLT5mbGFncygpICYgaW9zX2Jhc2U6OmJhc2VmaWVsZDsK ICAgICAgICBpZiAoX19mbXQgJiBpb3NfYmFzZTo6b2N0IHx8IF9fZm10ICYgaW9zX2Jhc2U6Omhl eCkKICAgICAgICAgIHJldHVybiB0aGlzLT5vcGVyYXRvcjw8KHN0YXRpY19jYXN0PHVuc2lnbmVk IGxvbmc+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RhdGljX2Nhc3Q8dW5z aWduZWQgaW50PihfX24pKSk7CiAgICAgICAgZWxzZQogICAgICAgICAgcmV0dXJuIHRoaXMtPm9w ZXJhdG9yPDwoc3RhdGljX2Nhc3Q8bG9uZz4oX19uKSk7CiAgICAgIH0KCiAgICAgIF9fb3N0cmVh bV90eXBlJgogICAgICBvcGVyYXRvcjw8KHVuc2lnbmVkIGludCBfX24pCiAgICAgIHsgcmV0dXJu IHRoaXMtPm9wZXJhdG9yPDwoc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4oX19uKSk7IH0KCgog ICAgICBfX29zdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I8PChsb25nIGxvbmcgX19uKTsKCiAg ICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8KHVuc2lnbmVkIGxvbmcgbG9uZyBf X24pOwoKCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8KGRvdWJsZSBfX2Yp OwoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPDwoZmxvYXQgX19mKQogICAg ICB7IHJldHVybiB0aGlzLT5vcGVyYXRvcjw8KHN0YXRpY19jYXN0PGRvdWJsZT4oX19mKSk7IH0K CiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8KGxvbmcgZG91YmxlIF9fZik7 CgogICAgICBfX29zdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I8PChjb25zdCB2b2lkKiBfX3Ap OwoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPDwoX19zdHJlYW1idWZfdHlw ZSogX19zYik7CgoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIHB1dChjaGFyX3R5cGUgX19j KTsKCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICB3cml0ZShjb25zdCBjaGFyX3R5cGUqIF9f cywgc3RyZWFtc2l6ZSBfX24pOwoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIGZsdXNoKCk7 CgoKICAgICAgcG9zX3R5cGUKICAgICAgdGVsbHAoKTsKCiAgICAgIF9fb3N0cmVhbV90eXBlJgog ICAgICBzZWVrcChwb3NfdHlwZSk7CgogICAgICBfX29zdHJlYW1fdHlwZSYKICAgICAgc2Vla3Ao b2ZmX3R5cGUsIGlvc19iYXNlOjpzZWVrZGlyKTsKICAgIH07CgoKICB0ZW1wbGF0ZSA8dHlwZW5h bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgY2xhc3MgYmFzaWNfb3N0cmVhbTxfQ2hh clQsIF9UcmFpdHM+OjpzZW50cnkKICAgIHsKCiAgICAgIGJvb2wgX01fb2s7CiAgICAgIGJhc2lj X29zdHJlYW08X0NoYXJULF9UcmFpdHM+JiBfTV9vczsKCiAgICBwdWJsaWM6CiAgICAgIGV4cGxp Y2l0CiAgICAgIHNlbnRyeShiYXNpY19vc3RyZWFtPF9DaGFyVCxfVHJhaXRzPiYgX19vcyk7Cgog ICAgICB+c2VudHJ5KCkKICAgICAgewoKICAgICAgICBpZiAoX01fb3MuZmxhZ3MoKSAmIGlvc19i YXNlOjp1bml0YnVmICYmICF1bmNhdWdodF9leGNlcHRpb24oKSkKICAgICAgICAgIHsKCiAgICAg ICAgICAgIGlmIChfTV9vcy5yZGJ1ZigpICYmIF9NX29zLnJkYnVmKCktPnB1YnN5bmMoKSA9PSAt MSkKICAgICAgICAgICAgICBfTV9vcy5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAg ICAgIH0KICAgICAgfQoKICAgICAgb3BlcmF0b3IgYm9vbCgpCiAgICAgIHsgcmV0dXJuIF9NX29r OyB9CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+ CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcjw8KGJhc2lj X29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vdXQsIF9DaGFyVCBfX2MpOwoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9D aGFyVCwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJh aXRzPiYgX19vdXQsIGNoYXIgX19jKQogICAgeyByZXR1cm4gKF9fb3V0IDw8IF9fb3V0LndpZGVu KF9fYykpOyB9CgoKICB0ZW1wbGF0ZSA8Y2xhc3MgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08 Y2hhciwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0 cz4mIF9fb3V0LCBjaGFyIF9fYyk7CgoKICB0ZW1wbGF0ZTxjbGFzcyBfVHJhaXRzPgogICAgYmFz aWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxj aGFyLCBfVHJhaXRzPiYgX19vdXQsIHNpZ25lZCBjaGFyIF9fYykKICAgIHsgcmV0dXJuIChfX291 dCA8PCBzdGF0aWNfY2FzdDxjaGFyPihfX2MpKTsgfQoKICB0ZW1wbGF0ZTxjbGFzcyBfVHJhaXRz PgogICAgYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPDwoYmFzaWNf b3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYgX19vdXQsIHVuc2lnbmVkIGNoYXIgX19jKQogICAgeyBy ZXR1cm4gKF9fb3V0IDw8IHN0YXRpY19jYXN0PGNoYXI+KF9fYykpOyB9CgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJU LCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+ JiBfX291dCwgY29uc3QgX0NoYXJUKiBfX3MpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs IHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gJgog ICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3V0LCBjb25z dCBjaGFyKiBfX3MpOwoKCiAgdGVtcGxhdGU8Y2xhc3MgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJl YW08Y2hhciwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08Y2hhciwgX1Ry YWl0cz4mIF9fb3V0LCBjb25zdCBjaGFyKiBfX3MpOwoKCiAgdGVtcGxhdGU8Y2xhc3MgX1RyYWl0 cz4KICAgIGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcjw8KGJhc2lj X29zdHJlYW08Y2hhciwgX1RyYWl0cz4mIF9fb3V0LCBjb25zdCBzaWduZWQgY2hhciogX19zKQog ICAgeyByZXR1cm4gKF9fb3V0IDw8IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KF9fcykp OyB9CgogIHRlbXBsYXRlPGNsYXNzIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPGNoYXIsIF9U cmFpdHM+ICYKICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYgX19v dXQsIGNvbnN0IHVuc2lnbmVkIGNoYXIqIF9fcykKICAgIHsgcmV0dXJuIChfX291dCA8PCByZWlu dGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihfX3MpKTsgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUg X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFp dHM+JgogICAgZW5kbChiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3MpCiAgICB7 IHJldHVybiBmbHVzaChfX29zLnB1dChfX29zLndpZGVuKCdcbicpKSk7IH0KCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hh clQsIF9UcmFpdHM+JgogICAgZW5kcyhiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9f b3MpCiAgICB7IHJldHVybiBfX29zLnB1dChfQ2hhclQoKSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9U cmFpdHM+JgogICAgZmx1c2goYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX29zKQog ICAgeyByZXR1cm4gX19vcy5mbHVzaCgpOyB9Cgp9CgoKCgoKIyAxICIvdXNyL2N5Z251cy9iaW4v Li4vaW5jbHVkZS9jKysvMy4xLjEvYml0cy9vc3RyZWFtLnRjYyIgMSAzCiMgMzYgIi91c3IvY3ln bnVzL2Jpbi8uLi9pbmNsdWRlL2MrKy8zLjEuMS9iaXRzL29zdHJlYW0udGNjIiAzCgojIDEgIi91 c3IvY3lnbnVzL2Jpbi8uLi9pbmNsdWRlL2MrKy8zLjEuMS9sb2NhbGUiIDEgMwojIDQzICIvdXNy L2N5Z251cy9iaW4vLi4vaW5jbHVkZS9jKysvMy4xLjEvbG9jYWxlIiAzCgoKCiMgMSAiL3Vzci9j eWdudXMvYmluLy4uL2luY2x1ZGUvYysrLzMuMS4xL2JpdHMvbG9jYWxlX2ZhY2V0cy50Y2MiIDEg MwojIDM3ICIvdXNyL2N5Z251cy9iaW4vLi4vaW5jbHVkZS9jKysvMy4xLjEvYml0cy9sb2NhbGVf ZmFjZXRzLnRjYyIgMwoKIyAxICIvdXNyL2N5Z251cy9iaW4vLi4vaW5jbHVkZS9jKysvMy4xLjEv Y2Vycm5vIiAxIDMKIyA0NyAiL3Vzci9jeWdudXMvYmluLy4uL2luY2x1ZGUvYysrLzMuMS4xL2Nl cnJubyIgMwoKIyAxICIvdXNyL2luY2x1ZGUvZXJybm8uaCIgMSAzCiMgMzIgIi91c3IvaW5jbHVk ZS9lcnJuby5oIiAzCmV4dGVybiAiQyIgewoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL2Vycm5v LmgiIDEgMwojIDI1ICIvdXNyL2luY2x1ZGUvYml0cy9lcnJuby5oIiAzCiMgMSAiL3Vzci9pbmNs dWRlL2xpbnV4L2Vycm5vLmgiIDEgMwoKCgojIDEgIi91c3IvaW5jbHVkZS9hc20vZXJybm8uaCIg MSAzCiMgNSAiL3Vzci9pbmNsdWRlL2xpbnV4L2Vycm5vLmgiIDIgMwojIDI2ICIvdXNyL2luY2x1 ZGUvYml0cy9lcnJuby5oIiAyIDMKIyAzNiAiL3Vzci9pbmNsdWRlL2JpdHMvZXJybm8uaCIgMwpl eHRlcm4gaW50IGVycm5vOwoKCmV4dGVybiBpbnQgKl9fZXJybm9fbG9jYXRpb24gKHZvaWQpIHRo cm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKIyAzNyAiL3Vzci9pbmNsdWRlL2Vy cm5vLmgiIDIgMwojIDU1ICIvdXNyL2luY2x1ZGUvZXJybm8uaCIgMwpleHRlcm4gY2hhciAqcHJv Z3JhbV9pbnZvY2F0aW9uX25hbWUsICpwcm9ncmFtX2ludm9jYXRpb25fc2hvcnRfbmFtZTsKCgoK fQojIDY5ICIvdXNyL2luY2x1ZGUvZXJybm8uaCIgMwp0eXBlZGVmIGludCBlcnJvcl90OwojIDQ5 ICIvdXNyL2N5Z251cy9iaW4vLi4vaW5jbHVkZS9jKysvMy4xLjEvY2Vycm5vIiAyIDMKIyAzOSAi L3Vzci9jeWdudXMvYmluLy4uL2luY2x1ZGUvYysrLzMuMS4xL2JpdHMvbG9jYWxlX2ZhY2V0cy50 Y2MiIDIgMwoKCiMgMSAiL3Vzci9jeWdudXMvYmluLy4uL2luY2x1ZGUvYysrLzMuMS4xL2NtYXRo IiAxIDMKIyA0OCAiL3Vzci9jeWdudXMvYmluLy4uL2luY2x1ZGUvYysrLzMuMS4xL2NtYXRoIiAz CgoKCiMgMSAiL3Vzci9pbmNsdWRlL21hdGguaCIgMSAzCiMgMjkgIi91c3IvaW5jbHVkZS9tYXRo LmgiIDMKZXh0ZXJuICJDIiB7CgoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvaHVnZV92YWwuaCIg MSAzCiMgMzQgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDIgMwoKCgojIDEgIi91c3IvaW5jbHVkZS9i aXRzL25hbi5oIiAxIDMKIyAzOCAiL3Vzci9pbmNsdWRlL21hdGguaCIgMiAzCgoKIyAxICIvdXNy L2luY2x1ZGUvYml0cy9tYXRoZGVmLmgiIDEgMwojIDI5ICIvdXNyL2luY2x1ZGUvYml0cy9tYXRo ZGVmLmgiIDMKdHlwZWRlZiBsb25nIGRvdWJsZSBmbG9hdF90OwoKdHlwZWRlZiBsb25nIGRvdWJs ZSBkb3VibGVfdDsKIyA0MSAiL3Vzci9pbmNsdWRlL21hdGguaCIgMiAzCiMgNjMgIi91c3IvaW5j bHVkZS9tYXRoLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoY2FsbHMuaCIgMSAzCiMg NTQgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhjYWxscy5oIiAzCmV4dGVybiBkb3VibGUgYWNvcyAo ZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19hY29zIChkb3VibGUgX194KSB0 aHJvdyAoKTsKCmV4dGVybiBkb3VibGUgYXNpbiAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVy biBkb3VibGUgX19hc2luIChkb3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVybiBkb3VibGUgYXRh biAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19hdGFuIChkb3VibGUgX194 KSB0aHJvdyAoKTsKCmV4dGVybiBkb3VibGUgYXRhbjIgKGRvdWJsZSBfX3ksIGRvdWJsZSBfX3gp IHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fYXRhbjIgKGRvdWJsZSBfX3ksIGRvdWJsZSBfX3gp IHRocm93ICgpOwoKCmV4dGVybiBkb3VibGUgY29zIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0 ZXJuIGRvdWJsZSBfX2NvcyAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgpleHRlcm4gZG91YmxlIHNp biAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19zaW4gKGRvdWJsZSBfX3gp IHRocm93ICgpOwoKZXh0ZXJuIGRvdWJsZSB0YW4gKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRl cm4gZG91YmxlIF9fdGFuIChkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHZvaWQgc2lu Y29zIChkb3VibGUgX194LCBkb3VibGUgKl9fc2lueCwgZG91YmxlICpfX2Nvc3gpIHRocm93ICgp OyBleHRlcm4gdm9pZCBfX3NpbmNvcyAoZG91YmxlIF9feCwgZG91YmxlICpfX3NpbngsIGRvdWJs ZSAqX19jb3N4KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGRvdWJsZSBjb3NoIChkb3VibGUgX194 KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2Nvc2ggKGRvdWJsZSBfX3gpIHRocm93ICgpOwoK ZXh0ZXJuIGRvdWJsZSBzaW5oIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBf X3NpbmggKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGRvdWJsZSB0YW5oIChkb3VibGUg X194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3RhbmggKGRvdWJsZSBfX3gpIHRocm93ICgp OwoKCgpleHRlcm4gZG91YmxlIGFjb3NoIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRv dWJsZSBfX2Fjb3NoIChkb3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVybiBkb3VibGUgYXNpbmgg KGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fYXNpbmggKGRvdWJsZSBfX3gp IHRocm93ICgpOwoKZXh0ZXJuIGRvdWJsZSBhdGFuaCAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4 dGVybiBkb3VibGUgX19hdGFuaCAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGRv dWJsZSBleHAgKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fZXhwIChkb3Vi bGUgX194KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGRvdWJsZSBleHAxMCAoZG91YmxlIF9feCkgdGhy b3cgKCk7IGV4dGVybiBkb3VibGUgX19leHAxMCAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgpleHRl cm4gZG91YmxlIHBvdzEwIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3Bv dzEwIChkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGRvdWJsZSBmcmV4cCAoZG91Ymxl IF9feCwgaW50ICpfX2V4cG9uZW50KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2ZyZXhwIChk b3VibGUgX194LCBpbnQgKl9fZXhwb25lbnQpIHRocm93ICgpOwoKCmV4dGVybiBkb3VibGUgbGRl eHAgKGRvdWJsZSBfX3gsIGludCBfX2V4cG9uZW50KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBf X2xkZXhwIChkb3VibGUgX194LCBpbnQgX19leHBvbmVudCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGRv dWJsZSBsb2cgKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fbG9nIChkb3Vi bGUgX194KSB0aHJvdyAoKTsKCgpleHRlcm4gZG91YmxlIGxvZzEwIChkb3VibGUgX194KSB0aHJv dyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2xvZzEwIChkb3VibGUgX194KSB0aHJvdyAoKTsKCgpleHRl cm4gZG91YmxlIG1vZGYgKGRvdWJsZSBfX3gsIGRvdWJsZSAqX19pcHRyKSB0aHJvdyAoKTsgZXh0 ZXJuIGRvdWJsZSBfX21vZGYgKGRvdWJsZSBfX3gsIGRvdWJsZSAqX19pcHRyKSB0aHJvdyAoKTsK CgoKZXh0ZXJuIGRvdWJsZSBleHBtMSAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3Vi bGUgX19leHBtMSAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGRvdWJsZSBsb2cxcCAo ZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19sb2cxcCAoZG91YmxlIF9feCkg dGhyb3cgKCk7CgoKZXh0ZXJuIGRvdWJsZSBsb2diIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0 ZXJuIGRvdWJsZSBfX2xvZ2IgKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGRvdWJs ZSBleHAyIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2V4cDIgKGRvdWJs ZSBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBkb3VibGUgbG9nMiAoZG91YmxlIF9feCkgdGhyb3cg KCk7IGV4dGVybiBkb3VibGUgX19sb2cyIChkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKCgoKZXh0 ZXJuIGRvdWJsZSBwb3cgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93ICgpOyBleHRlcm4g ZG91YmxlIF9fcG93IChkb3VibGUgX194LCBkb3VibGUgX195KSB0aHJvdyAoKTsKCgpleHRlcm4g ZG91YmxlIHNxcnQgKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fc3FydCAo ZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCmV4dGVybiBkb3VibGUgaHlwb3QgKGRvdWJsZSBfX3gs IGRvdWJsZSBfX3kpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9faHlwb3QgKGRvdWJsZSBfX3gs IGRvdWJsZSBfX3kpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGRvdWJsZSBjYnJ0IChkb3VibGUgX194 KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2NicnQgKGRvdWJsZSBfX3gpIHRocm93ICgpOwoK CgoKCgpleHRlcm4gZG91YmxlIGNlaWwgKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91 YmxlIF9fY2VpbCAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGRvdWJsZSBmYWJzIChk b3VibGUgX194KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBk b3VibGUgX19mYWJzIChkb3VibGUgX194KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25z dF9fKSk7CgoKZXh0ZXJuIGRvdWJsZSBmbG9vciAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVy biBkb3VibGUgX19mbG9vciAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGRvdWJsZSBm bW9kIChkb3VibGUgX194LCBkb3VibGUgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2Zt b2QgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBfX2lz aW5mIChkb3VibGUgX192YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykp OwoKCmV4dGVybiBpbnQgX19maW5pdGUgKGRvdWJsZSBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJp YnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgpleHRlcm4gaW50IGlzaW5mIChkb3VibGUgX192YWx1 ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBpbnQgZmlu aXRlIChkb3VibGUgX192YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykp OwoKCmV4dGVybiBkb3VibGUgZHJlbSAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgdGhyb3cgKCk7 IGV4dGVybiBkb3VibGUgX19kcmVtIChkb3VibGUgX194LCBkb3VibGUgX195KSB0aHJvdyAoKTsK CgoKZXh0ZXJuIGRvdWJsZSBzaWduaWZpY2FuZCAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVy biBkb3VibGUgX19zaWduaWZpY2FuZCAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCgpleHRlcm4g ZG91YmxlIGNvcHlzaWduIChkb3VibGUgX194LCBkb3VibGUgX195KSB0aHJvdyAoKSBfX2F0dHJp YnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBkb3VibGUgX19jb3B5c2lnbiAoZG91YmxlIF9f eCwgZG91YmxlIF9feSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoK ZXh0ZXJuIGRvdWJsZSBuYW4gKF9fY29uc3QgY2hhciAqX190YWdiKSB0aHJvdyAoKSBfX2F0dHJp YnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBkb3VibGUgX19uYW4gKF9fY29uc3QgY2hhciAq X190YWdiKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgpleHRlcm4g aW50IF9faXNuYW4gKGRvdWJsZSBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19j b25zdF9fKSk7CgoKCmV4dGVybiBpbnQgaXNuYW4gKGRvdWJsZSBfX3ZhbHVlKSB0aHJvdyAoKSBf X2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGRvdWJsZSBqMCAoZG91YmxlKSB0 aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2owIChkb3VibGUpIHRocm93ICgpOwpleHRlcm4gZG91 YmxlIGoxIChkb3VibGUpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fajEgKGRvdWJsZSkgdGhy b3cgKCk7CmV4dGVybiBkb3VibGUgam4gKGludCwgZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGRv dWJsZSBfX2puIChpbnQsIGRvdWJsZSkgdGhyb3cgKCk7CmV4dGVybiBkb3VibGUgeTAgKGRvdWJs ZSkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX195MCAoZG91YmxlKSB0aHJvdyAoKTsKZXh0ZXJu IGRvdWJsZSB5MSAoZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3kxIChkb3VibGUp IHRocm93ICgpOwpleHRlcm4gZG91YmxlIHluIChpbnQsIGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVy biBkb3VibGUgX195biAoaW50LCBkb3VibGUpIHRocm93ICgpOwoKCgoKCmV4dGVybiBkb3VibGUg ZXJmIChkb3VibGUpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fZXJmIChkb3VibGUpIHRocm93 ICgpOwpleHRlcm4gZG91YmxlIGVyZmMgKGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUg X19lcmZjIChkb3VibGUpIHRocm93ICgpOwpleHRlcm4gZG91YmxlIGxnYW1tYSAoZG91YmxlKSB0 aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2xnYW1tYSAoZG91YmxlKSB0aHJvdyAoKTsKCgoKZXh0 ZXJuIGRvdWJsZSB0Z2FtbWEgKGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX190Z2Ft bWEgKGRvdWJsZSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gZG91YmxlIGdhbW1hIChkb3VibGUpIHRo cm93ICgpOyBleHRlcm4gZG91YmxlIF9fZ2FtbWEgKGRvdWJsZSkgdGhyb3cgKCk7CgoKCgoKCmV4 dGVybiBkb3VibGUgbGdhbW1hX3IgKGRvdWJsZSwgaW50ICpfX3NpZ25nYW1wKSB0aHJvdyAoKTsg ZXh0ZXJuIGRvdWJsZSBfX2xnYW1tYV9yIChkb3VibGUsIGludCAqX19zaWduZ2FtcCkgdGhyb3cg KCk7CgoKCgoKCmV4dGVybiBkb3VibGUgcmludCAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVy biBkb3VibGUgX19yaW50IChkb3VibGUgX194KSB0aHJvdyAoKTsKCgpleHRlcm4gZG91YmxlIG5l eHRhZnRlciAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAo KF9fY29uc3RfXykpOyBleHRlcm4gZG91YmxlIF9fbmV4dGFmdGVyIChkb3VibGUgX194LCBkb3Vi bGUgX195KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgpleHRlcm4gZG91 YmxlIG5leHR0b3dhcmQgKGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCkgX19h dHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gZG91YmxlIF9fbmV4dHRvd2FyZCAoZG91 YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25z dF9fKSk7CgoKCmV4dGVybiBkb3VibGUgcmVtYWluZGVyIChkb3VibGUgX194LCBkb3VibGUgX195 KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3JlbWFpbmRlciAoZG91YmxlIF9feCwgZG91Ymxl IF9feSkgdGhyb3cgKCk7CgoKCmV4dGVybiBkb3VibGUgc2NhbGIgKGRvdWJsZSBfX3gsIGRvdWJs ZSBfX24pIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fc2NhbGIgKGRvdWJsZSBfX3gsIGRvdWJs ZSBfX24pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGRvdWJsZSBzY2FsYm4gKGRvdWJsZSBfX3gsIGlu dCBfX24pIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fc2NhbGJuIChkb3VibGUgX194LCBpbnQg X19uKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBpbG9nYiAoZG91YmxlIF9feCkgdGhyb3cgKCk7 IGV4dGVybiBpbnQgX19pbG9nYiAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gZG91 YmxlIHNjYWxibG4gKGRvdWJsZSBfX3gsIGxvbmcgaW50IF9fbikgdGhyb3cgKCk7IGV4dGVybiBk b3VibGUgX19zY2FsYmxuIChkb3VibGUgX194LCBsb25nIGludCBfX24pIHRocm93ICgpOwoKCgpl eHRlcm4gZG91YmxlIG5lYXJieWludCAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3Vi bGUgX19uZWFyYnlpbnQgKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4gZG91YmxlIHJv dW5kIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3JvdW5kIChkb3VibGUg X194KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGRvdWJsZSB0cnVuYyAoZG91YmxlIF9feCkgdGhyb3cg KCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gZG91YmxlIF9fdHJ1bmMgKGRv dWJsZSBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCmV4dGVy biBkb3VibGUgcmVtcXVvIChkb3VibGUgX194LCBkb3VibGUgX195LCBpbnQgKl9fcXVvKSB0aHJv dyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3JlbXF1byAoZG91YmxlIF9feCwgZG91YmxlIF9feSwgaW50 ICpfX3F1bykgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBsb25nIGludCBscmludCAoZG91YmxlIF9f eCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGludCBfX2xyaW50IChkb3VibGUgX194KSB0aHJvdyAo KTsKZXh0ZXJuIGxvbmcgbG9uZyBpbnQgbGxyaW50IChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0 ZXJuIGxvbmcgbG9uZyBpbnQgX19sbHJpbnQgKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgpleHRl cm4gbG9uZyBpbnQgbHJvdW5kIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgaW50 IF9fbHJvdW5kIChkb3VibGUgX194KSB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcgbG9uZyBpbnQgbGxy b3VuZCAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGxvbmcgaW50IF9fbGxyb3Vu ZCAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCmV4dGVybiBkb3VibGUgZmRpbSAoZG91YmxlIF9f eCwgZG91YmxlIF9feSkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19mZGltIChkb3VibGUgX194 LCBkb3VibGUgX195KSB0aHJvdyAoKTsKCgpleHRlcm4gZG91YmxlIGZtYXggKGRvdWJsZSBfX3gs IGRvdWJsZSBfX3kpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fZm1heCAoZG91YmxlIF9feCwg ZG91YmxlIF9feSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGRvdWJsZSBmbWluIChkb3VibGUgX194LCBk b3VibGUgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2ZtaW4gKGRvdWJsZSBfX3gsIGRv dWJsZSBfX3kpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IF9fZnBjbGFzc2lmeSAoZG91YmxlIF9f dmFsdWUpIHRocm93ICgpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVy biBpbnQgX19zaWduYml0IChkb3VibGUgX192YWx1ZSkgdGhyb3cgKCkKICAgICBfX2F0dHJpYnV0 ZV9fICgoX19jb25zdF9fKSk7CgoKCmV4dGVybiBkb3VibGUgZm1hIChkb3VibGUgX194LCBkb3Vi bGUgX195LCBkb3VibGUgX196KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2ZtYSAoZG91Ymxl IF9feCwgZG91YmxlIF9feSwgZG91YmxlIF9feikgdGhyb3cgKCk7CiMgNjQgIi91c3IvaW5jbHVk ZS9tYXRoLmgiIDIgMwojIDgyICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAzCiMgMSAiL3Vzci9pbmNs dWRlL2JpdHMvbWF0aGNhbGxzLmgiIDEgMwojIDU0ICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoY2Fs bHMuaCIgMwpleHRlcm4gZmxvYXQgYWNvc2YgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBm bG9hdCBfX2Fjb3NmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGZsb2F0IGFzaW5mIChm bG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19hc2luZiAoZmxvYXQgX194KSB0aHJv dyAoKTsKCmV4dGVybiBmbG9hdCBhdGFuZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZs b2F0IF9fYXRhbmYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgpleHRlcm4gZmxvYXQgYXRhbjJmIChm bG9hdCBfX3ksIGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2F0YW4yZiAoZmxv YXQgX195LCBmbG9hdCBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBmbG9hdCBjb3NmIChmbG9hdCBf X3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19jb3NmIChmbG9hdCBfX3gpIHRocm93ICgpOwoK ZXh0ZXJuIGZsb2F0IHNpbmYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX3Np bmYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgpleHRlcm4gZmxvYXQgdGFuZiAoZmxvYXQgX194KSB0 aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fdGFuZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCgoKZXh0 ZXJuIHZvaWQgc2luY29zZiAoZmxvYXQgX194LCBmbG9hdCAqX19zaW54LCBmbG9hdCAqX19jb3N4 KSB0aHJvdyAoKTsgZXh0ZXJuIHZvaWQgX19zaW5jb3NmIChmbG9hdCBfX3gsIGZsb2F0ICpfX3Np bngsIGZsb2F0ICpfX2Nvc3gpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gZmxvYXQgY29zaGYgKGZs b2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2Nvc2hmIChmbG9hdCBfX3gpIHRocm93 ICgpOwoKZXh0ZXJuIGZsb2F0IHNpbmhmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxv YXQgX19zaW5oZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCmV4dGVybiBmbG9hdCB0YW5oZiAoZmxv YXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fdGFuaGYgKGZsb2F0IF9feCkgdGhyb3cg KCk7CgoKCmV4dGVybiBmbG9hdCBhY29zaGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBm bG9hdCBfX2Fjb3NoZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCmV4dGVybiBmbG9hdCBhc2luaGYg KGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2FzaW5oZiAoZmxvYXQgX194KSB0 aHJvdyAoKTsKCmV4dGVybiBmbG9hdCBhdGFuaGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVy biBmbG9hdCBfX2F0YW5oZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gZmxvYXQg ZXhwZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fZXhwZiAoZmxvYXQgX194 KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGZsb2F0IGV4cDEwZiAoZmxvYXQgX194KSB0aHJvdyAoKTsg ZXh0ZXJuIGZsb2F0IF9fZXhwMTBmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGZsb2F0 IHBvdzEwZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fcG93MTBmIChmbG9h dCBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4gZmxvYXQgZnJleHBmIChmbG9hdCBfX3gsIGludCAq X19leHBvbmVudCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2ZyZXhwZiAoZmxvYXQgX194LCBp bnQgKl9fZXhwb25lbnQpIHRocm93ICgpOwoKCmV4dGVybiBmbG9hdCBsZGV4cGYgKGZsb2F0IF9f eCwgaW50IF9fZXhwb25lbnQpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19sZGV4cGYgKGZsb2F0 IF9feCwgaW50IF9fZXhwb25lbnQpIHRocm93ICgpOwoKCmV4dGVybiBmbG9hdCBsb2dmIChmbG9h dCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19sb2dmIChmbG9hdCBfX3gpIHRocm93ICgp OwoKCmV4dGVybiBmbG9hdCBsb2cxMGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9h dCBfX2xvZzEwZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCgpleHRlcm4gZmxvYXQgbW9kZmYgKGZs b2F0IF9feCwgZmxvYXQgKl9faXB0cikgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX21vZGZmIChm bG9hdCBfX3gsIGZsb2F0ICpfX2lwdHIpIHRocm93ICgpOwoKCgpleHRlcm4gZmxvYXQgZXhwbTFm IChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19leHBtMWYgKGZsb2F0IF9feCkg dGhyb3cgKCk7CgoKZXh0ZXJuIGZsb2F0IGxvZzFwZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0 ZXJuIGZsb2F0IF9fbG9nMXBmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBmbG9hdCBs b2diZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fbG9nYmYgKGZsb2F0IF9f eCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gZmxvYXQgZXhwMmYgKGZsb2F0IF9feCkgdGhyb3cgKCk7 IGV4dGVybiBmbG9hdCBfX2V4cDJmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBmbG9h dCBsb2cyZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fbG9nMmYgKGZsb2F0 IF9feCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBmbG9hdCBwb3dmIChmbG9hdCBfX3gsIGZsb2F0 IF9feSkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX3Bvd2YgKGZsb2F0IF9feCwgZmxvYXQgX195 KSB0aHJvdyAoKTsKCgpleHRlcm4gZmxvYXQgc3FydGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4 dGVybiBmbG9hdCBfX3NxcnRmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4gZmxvYXQg aHlwb3RmIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2h5 cG90ZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGZsb2F0IGNi cnRmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19jYnJ0ZiAoZmxvYXQgX194 KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGZsb2F0IGNlaWxmIChmbG9hdCBfX3gpIHRocm93ICgp OyBleHRlcm4gZmxvYXQgX19jZWlsZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCgpleHRlcm4gZmxv YXQgZmFic2YgKGZsb2F0IF9feCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykp OyBleHRlcm4gZmxvYXQgX19mYWJzZiAoZmxvYXQgX194KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9f ICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGZsb2F0IGZsb29yZiAoZmxvYXQgX194KSB0aHJvdyAo KTsgZXh0ZXJuIGZsb2F0IF9fZmxvb3JmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBm bG9hdCBmbW9kZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpOyBleHRlcm4gZmxvYXQg X19mbW9kZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBf X2lzaW5mZiAoZmxvYXQgX192YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3Rf XykpOwoKCmV4dGVybiBpbnQgX19maW5pdGVmIChmbG9hdCBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0 dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgpleHRlcm4gaW50IGlzaW5mZiAoZmxvYXQgX192 YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBpbnQg ZmluaXRlZiAoZmxvYXQgX192YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3Rf XykpOwoKCmV4dGVybiBmbG9hdCBkcmVtZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgp OyBleHRlcm4gZmxvYXQgX19kcmVtZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpOwoK CgpleHRlcm4gZmxvYXQgc2lnbmlmaWNhbmRmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4g ZmxvYXQgX19zaWduaWZpY2FuZGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gZmxv YXQgY29weXNpZ25mIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVf XyAoKF9fY29uc3RfXykpOyBleHRlcm4gZmxvYXQgX19jb3B5c2lnbmYgKGZsb2F0IF9feCwgZmxv YXQgX195KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgpleHRlcm4g ZmxvYXQgbmFuZiAoX19jb25zdCBjaGFyICpfX3RhZ2IpIHRocm93ICgpIF9fYXR0cmlidXRlX18g KChfX2NvbnN0X18pKTsgZXh0ZXJuIGZsb2F0IF9fbmFuZiAoX19jb25zdCBjaGFyICpfX3RhZ2Ip IHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCmV4dGVybiBpbnQgX19p c25hbmYgKGZsb2F0IF9fdmFsdWUpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18p KTsKCgoKZXh0ZXJuIGludCBpc25hbmYgKGZsb2F0IF9fdmFsdWUpIHRocm93ICgpIF9fYXR0cmli dXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gZmxvYXQgajBmIChmbG9hdCkgdGhyb3cgKCk7 IGV4dGVybiBmbG9hdCBfX2owZiAoZmxvYXQpIHRocm93ICgpOwpleHRlcm4gZmxvYXQgajFmIChm bG9hdCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2oxZiAoZmxvYXQpIHRocm93ICgpOwpleHRl cm4gZmxvYXQgam5mIChpbnQsIGZsb2F0KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fam5mIChp bnQsIGZsb2F0KSB0aHJvdyAoKTsKZXh0ZXJuIGZsb2F0IHkwZiAoZmxvYXQpIHRocm93ICgpOyBl eHRlcm4gZmxvYXQgX195MGYgKGZsb2F0KSB0aHJvdyAoKTsKZXh0ZXJuIGZsb2F0IHkxZiAoZmxv YXQpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX195MWYgKGZsb2F0KSB0aHJvdyAoKTsKZXh0ZXJu IGZsb2F0IHluZiAoaW50LCBmbG9hdCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX3luZiAoaW50 LCBmbG9hdCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGZsb2F0IGVyZmYgKGZsb2F0KSB0aHJvdyAo KTsgZXh0ZXJuIGZsb2F0IF9fZXJmZiAoZmxvYXQpIHRocm93ICgpOwpleHRlcm4gZmxvYXQgZXJm Y2YgKGZsb2F0KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fZXJmY2YgKGZsb2F0KSB0aHJvdyAo KTsKZXh0ZXJuIGZsb2F0IGxnYW1tYWYgKGZsb2F0KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9f bGdhbW1hZiAoZmxvYXQpIHRocm93ICgpOwoKCgpleHRlcm4gZmxvYXQgdGdhbW1hZiAoZmxvYXQp IHRocm93ICgpOyBleHRlcm4gZmxvYXQgX190Z2FtbWFmIChmbG9hdCkgdGhyb3cgKCk7CgoKCgpl eHRlcm4gZmxvYXQgZ2FtbWFmIChmbG9hdCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2dhbW1h ZiAoZmxvYXQpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gZmxvYXQgbGdhbW1hZl9yIChmbG9hdCwg aW50ICpfX3NpZ25nYW1wKSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fbGdhbW1hZl9yIChmbG9h dCwgaW50ICpfX3NpZ25nYW1wKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGZsb2F0IHJpbnRmIChm bG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19yaW50ZiAoZmxvYXQgX194KSB0aHJv dyAoKTsKCgpleHRlcm4gZmxvYXQgbmV4dGFmdGVyZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHRo cm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGZsb2F0IF9fbmV4dGFm dGVyZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2Nv bnN0X18pKTsKCmV4dGVybiBmbG9hdCBuZXh0dG93YXJkZiAoZmxvYXQgX194LCBsb25nIGRvdWJs ZSBfX3kpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGZsb2F0 IF9fbmV4dHRvd2FyZGYgKGZsb2F0IF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKSBfX2F0 dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCmV4dGVybiBmbG9hdCByZW1haW5kZXJmIChmbG9h dCBfX3gsIGZsb2F0IF9feSkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX3JlbWFpbmRlcmYgKGZs b2F0IF9feCwgZmxvYXQgX195KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGZsb2F0IHNjYWxiZiAoZmxv YXQgX194LCBmbG9hdCBfX24pIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19zY2FsYmYgKGZsb2F0 IF9feCwgZmxvYXQgX19uKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBmbG9hdCBzY2FsYm5mIChmbG9h dCBfX3gsIGludCBfX24pIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19zY2FsYm5mIChmbG9hdCBf X3gsIGludCBfX24pIHRocm93ICgpOwoKCgpleHRlcm4gaW50IGlsb2diZiAoZmxvYXQgX194KSB0 aHJvdyAoKTsgZXh0ZXJuIGludCBfX2lsb2diZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCgoKCmV4 dGVybiBmbG9hdCBzY2FsYmxuZiAoZmxvYXQgX194LCBsb25nIGludCBfX24pIHRocm93ICgpOyBl eHRlcm4gZmxvYXQgX19zY2FsYmxuZiAoZmxvYXQgX194LCBsb25nIGludCBfX24pIHRocm93ICgp OwoKCgpleHRlcm4gZmxvYXQgbmVhcmJ5aW50ZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJu IGZsb2F0IF9fbmVhcmJ5aW50ZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGZsb2F0 IHJvdW5kZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fcm91bmRmIChmbG9h dCBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4gZmxvYXQgdHJ1bmNmIChmbG9hdCBfX3gpIHRocm93 ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGZsb2F0IF9fdHJ1bmNmIChm bG9hdCBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCmV4dGVy biBmbG9hdCByZW1xdW9mIChmbG9hdCBfX3gsIGZsb2F0IF9feSwgaW50ICpfX3F1bykgdGhyb3cg KCk7IGV4dGVybiBmbG9hdCBfX3JlbXF1b2YgKGZsb2F0IF9feCwgZmxvYXQgX195LCBpbnQgKl9f cXVvKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGxvbmcgaW50IGxyaW50ZiAoZmxvYXQgX194KSB0 aHJvdyAoKTsgZXh0ZXJuIGxvbmcgaW50IF9fbHJpbnRmIChmbG9hdCBfX3gpIHRocm93ICgpOwpl eHRlcm4gbG9uZyBsb25nIGludCBsbHJpbnRmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4g bG9uZyBsb25nIGludCBfX2xscmludGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKCmV4dGVybiBs b25nIGludCBscm91bmRmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBpbnQgX19s cm91bmRmIChmbG9hdCBfX3gpIHRocm93ICgpOwpleHRlcm4gbG9uZyBsb25nIGludCBsbHJvdW5k ZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgbG9uZyBpbnQgX19sbHJvdW5kZiAo ZmxvYXQgX194KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGZsb2F0IGZkaW1mIChmbG9hdCBfX3gsIGZs b2F0IF9feSkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2ZkaW1mIChmbG9hdCBfX3gsIGZsb2F0 IF9feSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGZsb2F0IGZtYXhmIChmbG9hdCBfX3gsIGZsb2F0IF9f eSkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2ZtYXhmIChmbG9hdCBfX3gsIGZsb2F0IF9feSkg dGhyb3cgKCk7CgoKZXh0ZXJuIGZsb2F0IGZtaW5mIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhy b3cgKCk7IGV4dGVybiBmbG9hdCBfX2ZtaW5mIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cg KCk7CgoKCmV4dGVybiBpbnQgX19mcGNsYXNzaWZ5ZiAoZmxvYXQgX192YWx1ZSkgdGhyb3cgKCkK ICAgICBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGludCBfX3NpZ25iaXRm IChmbG9hdCBfX3ZhbHVlKSB0aHJvdyAoKQogICAgIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18p KTsKCgoKZXh0ZXJuIGZsb2F0IGZtYWYgKGZsb2F0IF9feCwgZmxvYXQgX195LCBmbG9hdCBfX3op IHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19mbWFmIChmbG9hdCBfX3gsIGZsb2F0IF9feSwgZmxv YXQgX196KSB0aHJvdyAoKTsKIyA4MyAiL3Vzci9pbmNsdWRlL21hdGguaCIgMiAzCiMgOTkgIi91 c3IvaW5jbHVkZS9tYXRoLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoY2FsbHMuaCIg MSAzCiMgNTQgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhjYWxscy5oIiAzCmV4dGVybiBsb25nIGRv dWJsZSBhY29zbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91Ymxl IF9fYWNvc2wgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgpleHRlcm4gbG9uZyBkb3VibGUg YXNpbmwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2Fz aW5sIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGxvbmcgZG91YmxlIGF0YW5s IChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19hdGFubCAo bG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVybiBsb25nIGRvdWJsZSBhdGFuMmwgKGxv bmcgZG91YmxlIF9feSwgbG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91 YmxlIF9fYXRhbjJsIChsb25nIGRvdWJsZSBfX3ksIGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7 CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGNvc2wgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4 dGVybiBsb25nIGRvdWJsZSBfX2Nvc2wgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgpleHRl cm4gbG9uZyBkb3VibGUgc2lubCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxv bmcgZG91YmxlIF9fc2lubCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVybiBsb25n IGRvdWJsZSB0YW5sIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3Vi bGUgX190YW5sIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4gdm9pZCBzaW5j b3NsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlICpfX3NpbngsIGxvbmcgZG91YmxlICpf X2Nvc3gpIHRocm93ICgpOyBleHRlcm4gdm9pZCBfX3NpbmNvc2wgKGxvbmcgZG91YmxlIF9feCwg bG9uZyBkb3VibGUgKl9fc2lueCwgbG9uZyBkb3VibGUgKl9fY29zeCkgdGhyb3cgKCk7CgoKCgoK CmV4dGVybiBsb25nIGRvdWJsZSBjb3NobCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0 ZXJuIGxvbmcgZG91YmxlIF9fY29zaGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgpleHRl cm4gbG9uZyBkb3VibGUgc2luaGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBs b25nIGRvdWJsZSBfX3NpbmhsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGxv bmcgZG91YmxlIHRhbmhsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBk b3VibGUgX190YW5obCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGxvbmcg ZG91YmxlIGFjb3NobCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91 YmxlIF9fYWNvc2hsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGxvbmcgZG91 YmxlIGFzaW5obCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91Ymxl IF9fYXNpbmhsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGxvbmcgZG91Ymxl IGF0YW5obCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9f YXRhbmhsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgoKCmV4dGVybiBsb25nIGRvdWJs ZSBleHBsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19l eHBsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4gbG9uZyBkb3VibGUgZXhw MTBsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19leHAx MGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgpleHRlcm4gbG9uZyBkb3VibGUgcG93MTBs IChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19wb3cxMGwg KGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCmV4dGVybiBsb25nIGRvdWJsZSBmcmV4cGwg KGxvbmcgZG91YmxlIF9feCwgaW50ICpfX2V4cG9uZW50KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcg ZG91YmxlIF9fZnJleHBsIChsb25nIGRvdWJsZSBfX3gsIGludCAqX19leHBvbmVudCkgdGhyb3cg KCk7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGxkZXhwbCAobG9uZyBkb3VibGUgX194LCBpbnQgX19l eHBvbmVudCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2xkZXhwbCAobG9uZyBkb3Vi bGUgX194LCBpbnQgX19leHBvbmVudCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGxv Z2wgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2xvZ2wg KGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGxvZzEwbCAo bG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fbG9nMTBsIChs b25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBtb2RmbCAobG9u ZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSAqX19pcHRyKSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcg ZG91YmxlIF9fbW9kZmwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgKl9faXB0cikgdGhy b3cgKCk7CgoKCmV4dGVybiBsb25nIGRvdWJsZSBleHBtMWwgKGxvbmcgZG91YmxlIF9feCkgdGhy b3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2V4cG0xbCAobG9uZyBkb3VibGUgX194KSB0aHJv dyAoKTsKCgpleHRlcm4gbG9uZyBkb3VibGUgbG9nMXBsIChsb25nIGRvdWJsZSBfX3gpIHRocm93 ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19sb2cxcGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cg KCk7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGxvZ2JsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgp OyBleHRlcm4gbG9uZyBkb3VibGUgX19sb2dibCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsK CgoKCmV4dGVybiBsb25nIGRvdWJsZSBleHAybCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsg ZXh0ZXJuIGxvbmcgZG91YmxlIF9fZXhwMmwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoK ZXh0ZXJuIGxvbmcgZG91YmxlIGxvZzJsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRl cm4gbG9uZyBkb3VibGUgX19sb2cybCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKCgoK ZXh0ZXJuIGxvbmcgZG91YmxlIHBvd2wgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195 KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fcG93bCAobG9uZyBkb3VibGUgX194LCBs b25nIGRvdWJsZSBfX3kpIHRocm93ICgpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBzcXJ0bCAobG9u ZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fc3FydGwgKGxvbmcg ZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCmV4dGVybiBsb25nIGRvdWJsZSBoeXBvdGwgKGxvbmcg ZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91Ymxl IF9faHlwb3RsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCk7CgoK CgpleHRlcm4gbG9uZyBkb3VibGUgY2JydGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4 dGVybiBsb25nIGRvdWJsZSBfX2NicnRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgoK CgpleHRlcm4gbG9uZyBkb3VibGUgY2VpbGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4 dGVybiBsb25nIGRvdWJsZSBfX2NlaWxsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCmV4 dGVybiBsb25nIGRvdWJsZSBmYWJzbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKSBfX2F0dHJp YnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2ZhYnNsIChsb25nIGRv dWJsZSBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4g bG9uZyBkb3VibGUgZmxvb3JsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9u ZyBkb3VibGUgX19mbG9vcmwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGxv bmcgZG91YmxlIGZtb2RsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cg KCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2Ztb2RsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91 YmxlIF9feSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IF9faXNpbmZsIChsb25nIGRvdWJsZSBf X3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGlu dCBfX2Zpbml0ZWwgKGxvbmcgZG91YmxlIF9fdmFsdWUpIHRocm93ICgpIF9fYXR0cmlidXRlX18g KChfX2NvbnN0X18pKTsKCgoKCmV4dGVybiBpbnQgaXNpbmZsIChsb25nIGRvdWJsZSBfX3ZhbHVl KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGludCBmaW5p dGVsIChsb25nIGRvdWJsZSBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25z dF9fKSk7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGRyZW1sIChsb25nIGRvdWJsZSBfX3gsIGxvbmcg ZG91YmxlIF9feSkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2RyZW1sIChsb25nIGRv dWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCk7CgoKCmV4dGVybiBsb25nIGRvdWJs ZSBzaWduaWZpY2FuZGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRv dWJsZSBfX3NpZ25pZmljYW5kbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKCmV4dGVy biBsb25nIGRvdWJsZSBjb3B5c2lnbmwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195 KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBsb25nIGRvdWJs ZSBfX2NvcHlzaWdubCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgp IF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBuYW5s IChfX2NvbnN0IGNoYXIgKl9fdGFnYikgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3Rf XykpOyBleHRlcm4gbG9uZyBkb3VibGUgX19uYW5sIChfX2NvbnN0IGNoYXIgKl9fdGFnYikgdGhy b3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKZXh0ZXJuIGludCBfX2lzbmFu bCAobG9uZyBkb3VibGUgX192YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3Rf XykpOwoKCgpleHRlcm4gaW50IGlzbmFubCAobG9uZyBkb3VibGUgX192YWx1ZSkgdGhyb3cgKCkg X19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBqMGwgKGxv bmcgZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fajBsIChsb25nIGRvdWJs ZSkgdGhyb3cgKCk7CmV4dGVybiBsb25nIGRvdWJsZSBqMWwgKGxvbmcgZG91YmxlKSB0aHJvdyAo KTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fajFsIChsb25nIGRvdWJsZSkgdGhyb3cgKCk7CmV4dGVy biBsb25nIGRvdWJsZSBqbmwgKGludCwgbG9uZyBkb3VibGUpIHRocm93ICgpOyBleHRlcm4gbG9u ZyBkb3VibGUgX19qbmwgKGludCwgbG9uZyBkb3VibGUpIHRocm93ICgpOwpleHRlcm4gbG9uZyBk b3VibGUgeTBsIChsb25nIGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3kw bCAobG9uZyBkb3VibGUpIHRocm93ICgpOwpleHRlcm4gbG9uZyBkb3VibGUgeTFsIChsb25nIGRv dWJsZSkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3kxbCAobG9uZyBkb3VibGUpIHRo cm93ICgpOwpleHRlcm4gbG9uZyBkb3VibGUgeW5sIChpbnQsIGxvbmcgZG91YmxlKSB0aHJvdyAo KTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9feW5sIChpbnQsIGxvbmcgZG91YmxlKSB0aHJvdyAoKTsK CgoKCgpleHRlcm4gbG9uZyBkb3VibGUgZXJmbCAobG9uZyBkb3VibGUpIHRocm93ICgpOyBleHRl cm4gbG9uZyBkb3VibGUgX19lcmZsIChsb25nIGRvdWJsZSkgdGhyb3cgKCk7CmV4dGVybiBsb25n IGRvdWJsZSBlcmZjbCAobG9uZyBkb3VibGUpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUg X19lcmZjbCAobG9uZyBkb3VibGUpIHRocm93ICgpOwpleHRlcm4gbG9uZyBkb3VibGUgbGdhbW1h bCAobG9uZyBkb3VibGUpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19sZ2FtbWFsIChs b25nIGRvdWJsZSkgdGhyb3cgKCk7CgoKCmV4dGVybiBsb25nIGRvdWJsZSB0Z2FtbWFsIChsb25n IGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3RnYW1tYWwgKGxvbmcgZG91 YmxlKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBnYW1tYWwgKGxvbmcgZG91Ymxl KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZ2FtbWFsIChsb25nIGRvdWJsZSkgdGhy b3cgKCk7CgoKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBsZ2FtbWFsX3IgKGxvbmcgZG91YmxlLCBp bnQgKl9fc2lnbmdhbXApIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19sZ2FtbWFsX3Ig KGxvbmcgZG91YmxlLCBpbnQgKl9fc2lnbmdhbXApIHRocm93ICgpOwoKCgoKCgpleHRlcm4gbG9u ZyBkb3VibGUgcmludGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRv dWJsZSBfX3JpbnRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBsb25nIGRv dWJsZSBuZXh0YWZ0ZXJsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cg KCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gbG9uZyBkb3VibGUgX19uZXh0 YWZ0ZXJsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCkgX19hdHRy aWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKZXh0ZXJuIGxvbmcgZG91YmxlIG5leHR0b3dhcmRsIChs b25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAo KF9fY29uc3RfXykpOyBleHRlcm4gbG9uZyBkb3VibGUgX19uZXh0dG93YXJkbCAobG9uZyBkb3Vi bGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0 X18pKTsKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIHJlbWFpbmRlcmwgKGxvbmcgZG91YmxlIF9feCwg bG9uZyBkb3VibGUgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fcmVtYWluZGVy bCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpOwoKCgpleHRlcm4g bG9uZyBkb3VibGUgc2NhbGJsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9fbikgdGhy b3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3NjYWxibCAobG9uZyBkb3VibGUgX194LCBsb25n IGRvdWJsZSBfX24pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIHNjYWxibmwgKGxv bmcgZG91YmxlIF9feCwgaW50IF9fbikgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3Nj YWxibmwgKGxvbmcgZG91YmxlIF9feCwgaW50IF9fbikgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQg aWxvZ2JsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gaW50IF9faWxvZ2JsIChs b25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIHNjYWxibG5s IChsb25nIGRvdWJsZSBfX3gsIGxvbmcgaW50IF9fbikgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRv dWJsZSBfX3NjYWxibG5sIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgaW50IF9fbikgdGhyb3cgKCk7 CgoKCmV4dGVybiBsb25nIGRvdWJsZSBuZWFyYnlpbnRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93 ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19uZWFyYnlpbnRsIChsb25nIGRvdWJsZSBfX3gpIHRo cm93ICgpOwoKCgpleHRlcm4gbG9uZyBkb3VibGUgcm91bmRsIChsb25nIGRvdWJsZSBfX3gpIHRo cm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19yb3VuZGwgKGxvbmcgZG91YmxlIF9feCkgdGhy b3cgKCk7CgoKCmV4dGVybiBsb25nIGRvdWJsZSB0cnVuY2wgKGxvbmcgZG91YmxlIF9feCkgdGhy b3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gbG9uZyBkb3VibGUgX190 cnVuY2wgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3Rf XykpOwoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIHJlbXF1b2wgKGxvbmcgZG91YmxlIF9feCwgbG9u ZyBkb3VibGUgX195LCBpbnQgKl9fcXVvKSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9f cmVtcXVvbCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3ksIGludCAqX19xdW8pIHRo cm93ICgpOwoKCgoKCgpleHRlcm4gbG9uZyBpbnQgbHJpbnRsIChsb25nIGRvdWJsZSBfX3gpIHRo cm93ICgpOyBleHRlcm4gbG9uZyBpbnQgX19scmludGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cg KCk7CmV4dGVybiBsb25nIGxvbmcgaW50IGxscmludGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cg KCk7IGV4dGVybiBsb25nIGxvbmcgaW50IF9fbGxyaW50bCAobG9uZyBkb3VibGUgX194KSB0aHJv dyAoKTsKCgoKZXh0ZXJuIGxvbmcgaW50IGxyb3VuZGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cg KCk7IGV4dGVybiBsb25nIGludCBfX2xyb3VuZGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7 CmV4dGVybiBsb25nIGxvbmcgaW50IGxscm91bmRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgp OyBleHRlcm4gbG9uZyBsb25nIGludCBfX2xscm91bmRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93 ICgpOwoKCgpleHRlcm4gbG9uZyBkb3VibGUgZmRpbWwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBk b3VibGUgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZmRpbWwgKGxvbmcgZG91 YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBkb3VibGUg Zm1heGwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKTsgZXh0ZXJu IGxvbmcgZG91YmxlIF9fZm1heGwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0 aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBkb3VibGUgZm1pbmwgKGxvbmcgZG91YmxlIF9feCwgbG9u ZyBkb3VibGUgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZm1pbmwgKGxvbmcg ZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBfX2Zw Y2xhc3NpZnlsIChsb25nIGRvdWJsZSBfX3ZhbHVlKSB0aHJvdyAoKQogICAgIF9fYXR0cmlidXRl X18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gaW50IF9fc2lnbmJpdGwgKGxvbmcgZG91YmxlIF9f dmFsdWUpIHRocm93ICgpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgpleHRl cm4gbG9uZyBkb3VibGUgZm1hbCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3ksIGxv bmcgZG91YmxlIF9feikgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2ZtYWwgKGxvbmcg ZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195LCBsb25nIGRvdWJsZSBfX3opIHRocm93ICgpOwoj IDEwMCAiL3Vzci9pbmNsdWRlL21hdGguaCIgMiAzCiMgMTEzICIvdXNyL2luY2x1ZGUvbWF0aC5o IiAzCmV4dGVybiBpbnQgc2lnbmdhbTsKIyAxNTQgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDMKZW51 bQogIHsKICAgIEZQX05BTiwKCiAgICBGUF9JTkZJTklURSwKCiAgICBGUF9aRVJPLAoKICAgIEZQ X1NVQk5PUk1BTCwKCiAgICBGUF9OT1JNQUwKCiAgfTsKIyAyNDAgIi91c3IvaW5jbHVkZS9tYXRo LmgiIDMKdHlwZWRlZiBlbnVtCnsKICBfSUVFRV8gPSAtMSwKICBfU1ZJRF8sCiAgX1hPUEVOXywK ICBfUE9TSVhfLAogIF9JU09DXwp9IF9MSUJfVkVSU0lPTl9UWVBFOwoKCgoKZXh0ZXJuIF9MSUJf VkVSU0lPTl9UWVBFIF9MSUJfVkVSU0lPTjsKIyAyNjMgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDMK c3RydWN0IF9fZXhjZXB0aW9uCgoKCiAgewogICAgaW50IHR5cGU7CiAgICBjaGFyICpuYW1lOwog ICAgZG91YmxlIGFyZzE7CiAgICBkb3VibGUgYXJnMjsKICAgIGRvdWJsZSByZXR2YWw7CiAgfTsK CgpleHRlcm4gaW50IG1hdGhlcnIgKHN0cnVjdCBfX2V4Y2VwdGlvbiAqX19leGMpIHRocm93ICgp OwojIDQxMSAiL3Vzci9pbmNsdWRlL21hdGguaCIgMwp9CiMgNTIgIi91c3IvY3lnbnVzL2Jpbi8u Li9pbmNsdWRlL2MrKy8zLjEuMS9jbWF0aCIgMiAzCiMgNzkgIi91c3IvY3lnbnVzL2Jpbi8uLi9p bmNsdWRlL2MrKy8zLjEuMS9jbWF0aCIgMwpuYW1lc3BhY2Ugc3RkCnsKCgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9UcD4gX1RwIF9fY21hdGhfcG93ZXIoX1RwLCB1bnNpZ25lZCBpbnQpOwoKICBpbmxp bmUgZG91YmxlCiAgYWJzKGRvdWJsZSBfX3gpCiAgeyByZXR1cm4gX19idWlsdGluX2ZhYnMoX194 KTsgfQoKICBpbmxpbmUgZmxvYXQKICBhYnMoZmxvYXQgX194KQogIHsgcmV0dXJuIF9fYnVpbHRp bl9mYWJzZihfX3gpOyB9CgogIGlubGluZSBsb25nIGRvdWJsZQogIGFicyhsb25nIGRvdWJsZSBf X3gpCiAgeyByZXR1cm4gX19idWlsdGluX2ZhYnNsKF9feCk7IH0KCgogIGlubGluZSBmbG9hdAog IGFjb3MoZmxvYXQgX194KSB7IHJldHVybiA6OmFjb3NmKF9feCk7IH0KCgoKCgogIHVzaW5nIDo6 YWNvczsKCgogIGlubGluZSBsb25nIGRvdWJsZQogIGFjb3MobG9uZyBkb3VibGUgX194KSB7IHJl dHVybiA6OmFjb3NsKF9feCk7IH0KCgoKCgogIHVzaW5nIDo6YXNpbjsKCgogIGlubGluZSBmbG9h dAogIGFzaW4oZmxvYXQgX194KSB7IHJldHVybiA6OmFzaW5mKF9feCk7IH0KCgoKCgoKICBpbmxp bmUgbG9uZyBkb3VibGUKICBhc2luKGxvbmcgZG91YmxlIF9feCkgeyByZXR1cm4gOjphc2lubChf X3gpOyB9CgoKCgoKICB1c2luZyA6OmF0YW47CgoKICBpbmxpbmUgZmxvYXQKICBhdGFuKGZsb2F0 IF9feCkgeyByZXR1cm4gOjphdGFuZihfX3gpOyB9CgoKCgoKCiAgaW5saW5lIGxvbmcgZG91Ymxl CiAgYXRhbihsb25nIGRvdWJsZSBfX3gpIHsgcmV0dXJuIDo6YXRhbmwoX194KTsgfQoKCgoKCiAg dXNpbmcgOjphdGFuMjsKCgogIGlubGluZSBmbG9hdAogIGF0YW4yKGZsb2F0IF9feSwgZmxvYXQg X194KSB7IHJldHVybiA6OmF0YW4yZihfX3ksIF9feCk7IH0KCgoKCgoKCiAgaW5saW5lIGxvbmcg ZG91YmxlCiAgYXRhbjIobG9uZyBkb3VibGUgX195LCBsb25nIGRvdWJsZSBfX3gpIHsgcmV0dXJu IDo6YXRhbjJsKF9feSwgX194KTsgfQoKCgoKCgogIHVzaW5nIDo6Y2VpbDsKCgogIGlubGluZSBm bG9hdAogIGNlaWwoZmxvYXQgX194KSB7IHJldHVybiA6OmNlaWxmKF9feCk7IH0KCgoKCgoKICBp bmxpbmUgbG9uZyBkb3VibGUKICBjZWlsKGxvbmcgZG91YmxlIF9feCkgeyByZXR1cm4gOjpjZWls bChfX3gpOyB9CgoKCgoKICB1c2luZyA6OmNvczsKCiAgaW5saW5lIGZsb2F0CiAgY29zKGZsb2F0 IF9feCkKICB7IHJldHVybiBfX2J1aWx0aW5fY29zZihfX3gpOyB9CgogIGlubGluZSBsb25nIGRv dWJsZQogIGNvcyhsb25nIGRvdWJsZSBfX3gpCiAgeyByZXR1cm4gX19idWlsdGluX2Nvc2woX194 KTsgfQoKICB1c2luZyA6OmNvc2g7CgoKICBpbmxpbmUgZmxvYXQKICBjb3NoKGZsb2F0IF9feCkg eyByZXR1cm4gOjpjb3NoZihfX3gpOyB9CgoKCgoKCiAgaW5saW5lIGxvbmcgZG91YmxlCiAgY29z aChsb25nIGRvdWJsZSBfX3gpIHsgcmV0dXJuIDo6Y29zaGwoX194KTsgfQoKCgoKCiAgdXNpbmcg OjpleHA7CgoKICBpbmxpbmUgZmxvYXQKICBleHAoZmxvYXQgX194KSB7IHJldHVybiA6OmV4cGYo X194KTsgfQoKCgoKCgogIGlubGluZSBsb25nIGRvdWJsZQogIGV4cChsb25nIGRvdWJsZSBfX3gp IHsgcmV0dXJuIDo6ZXhwbChfX3gpOyB9CgoKCgoKICB1c2luZyA6OmZhYnM7CgogIGlubGluZSBm bG9hdAogIGZhYnMoZmxvYXQgX194KQogIHsgcmV0dXJuIF9fYnVpbHRpbl9mYWJzZihfX3gpOyB9 CgogIGlubGluZSBsb25nIGRvdWJsZQogIGZhYnMobG9uZyBkb3VibGUgX194KQogIHsgcmV0dXJu IF9fYnVpbHRpbl9mYWJzbChfX3gpOyB9CgogIHVzaW5nIDo6Zmxvb3I7CgoKICBpbmxpbmUgZmxv YXQKICBmbG9vcihmbG9hdCBfX3gpIHsgcmV0dXJuIDo6Zmxvb3JmKF9feCk7IH0KCgoKCgoKICBp bmxpbmUgbG9uZyBkb3VibGUKICBmbG9vcihsb25nIGRvdWJsZSBfX3gpIHsgcmV0dXJuIDo6Zmxv b3JsKF9feCk7IH0KCgoKCgogIHVzaW5nIDo6Zm1vZDsKCgogIGlubGluZSBmbG9hdAogIGZtb2Qo ZmxvYXQgX194LCBmbG9hdCBfX3kpIHsgcmV0dXJuIDo6Zm1vZGYoX194LCBfX3kpOyB9CgoKCgoK CgogIGlubGluZSBsb25nIGRvdWJsZQogIGZtb2QobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJs ZSBfX3kpIHsgcmV0dXJuIDo6Zm1vZGwoX194LCBfX3kpOyB9CgoKCgoKCiAgdXNpbmcgOjpmcmV4 cDsKCgogIGlubGluZSBmbG9hdAogIGZyZXhwKGZsb2F0IF9feCwgaW50KiBfX2V4cCkgeyByZXR1 cm4gOjpmcmV4cGYoX194LCBfX2V4cCk7IH0KCgoKCgoKICBpbmxpbmUgbG9uZyBkb3VibGUKICBm cmV4cChsb25nIGRvdWJsZSBfX3gsIGludCogX19leHApIHsgcmV0dXJuIDo6ZnJleHBsKF9feCwg X19leHApOyB9CgoKCgoKCiAgdXNpbmcgOjpsZGV4cDsKCgogIGlubGluZSBmbG9hdAogIGxkZXhw KGZsb2F0IF9feCwgaW50IF9fZXhwKSB7IHJldHVybiA6OmxkZXhwZihfX3gsIF9fZXhwKTsgfQoK CgoKCgoKICBpbmxpbmUgbG9uZyBkb3VibGUKICBsZGV4cChsb25nIGRvdWJsZSBfX3gsIGludCBf X2V4cCkgeyByZXR1cm4gOjpsZGV4cGwoX194LCBfX2V4cCk7IH0KCgoKCgoKICB1c2luZyA6Omxv ZzsKCgogIGlubGluZSBmbG9hdAogIGxvZyhmbG9hdCBfX3gpIHsgcmV0dXJuIDo6bG9nZihfX3gp OyB9CgoKCgoKCiAgaW5saW5lIGxvbmcgZG91YmxlCiAgbG9nKGxvbmcgZG91YmxlIF9feCkgeyBy ZXR1cm4gOjpsb2dsKF9feCk7IH0KCgoKCgogIHVzaW5nIDo6bG9nMTA7CgoKICBpbmxpbmUgZmxv YXQKICBsb2cxMChmbG9hdCBfX3gpIHsgcmV0dXJuIDo6bG9nMTBmKF9feCk7IH0KCgoKCgoKICBp bmxpbmUgbG9uZyBkb3VibGUKICBsb2cxMChsb25nIGRvdWJsZSBfX3gpIHsgcmV0dXJuIDo6bG9n MTBsKF9feCk7IH0KCgoKCgogIHVzaW5nIDo6bW9kZjsKCgogIGlubGluZSBmbG9hdAogIG1vZGYo ZmxvYXQgX194LCBmbG9hdCogX19pcHRyKSB7IHJldHVybiA6Om1vZGZmKF9feCwgX19pcHRyKTsg fQojIDM3NSAiL3Vzci9jeWdudXMvYmluLy4uL2luY2x1ZGUvYysrLzMuMS4xL2NtYXRoIiAzCiAg aW5saW5lIGxvbmcgZG91YmxlCiAgbW9kZihsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlKiBf X2lwdHIpIHsgcmV0dXJuIDo6bW9kZmwoX194LCBfX2lwdHIpOyB9CiMgMzg4ICIvdXNyL2N5Z251 cy9iaW4vLi4vaW5jbHVkZS9jKysvMy4xLjEvY21hdGgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf VHA+CiAgICBpbmxpbmUgX1RwCiAgICBfX3Bvd19oZWxwZXIoX1RwIF9feCwgaW50IF9fbikKICAg IHsKICAgICAgcmV0dXJuIF9fbiA8IDAKICAgICAgICA/IF9UcCgxKS9fX2NtYXRoX3Bvd2VyKF9f eCwgLV9fbikKICAgICAgICA6IF9fY21hdGhfcG93ZXIoX194LCBfX24pOwogICAgfQoKICB1c2lu ZyA6OnBvdzsKCgogIGlubGluZSBmbG9hdAogIHBvdyhmbG9hdCBfX3gsIGZsb2F0IF9feSkgeyBy ZXR1cm4gOjpwb3dmKF9feCwgX195KTsgfQoKCgoKCgoKICBpbmxpbmUgbG9uZyBkb3VibGUKICBw b3cobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHsgcmV0dXJuIDo6cG93bChfX3gs IF9feSk7IH0KCgoKCgoKICBpbmxpbmUgZG91YmxlCiAgcG93KGRvdWJsZSBfX3gsIGludCBfX2kp CiAgeyByZXR1cm4gX19wb3dfaGVscGVyKF9feCwgX19pKTsgfQoKICBpbmxpbmUgZmxvYXQKICBw b3coZmxvYXQgX194LCBpbnQgX19uKQogIHsgcmV0dXJuIF9fcG93X2hlbHBlcihfX3gsIF9fbik7 IH0KCiAgaW5saW5lIGxvbmcgZG91YmxlCiAgcG93KGxvbmcgZG91YmxlIF9feCwgaW50IF9fbikK ICB7IHJldHVybiBfX3Bvd19oZWxwZXIoX194LCBfX24pOyB9CgogIHVzaW5nIDo6c2luOwoKICBp bmxpbmUgZmxvYXQKICBzaW4oZmxvYXQgX194KQogIHsgcmV0dXJuIF9fYnVpbHRpbl9zaW5mKF9f eCk7IH0KCiAgaW5saW5lIGxvbmcgZG91YmxlCiAgc2luKGxvbmcgZG91YmxlIF9feCkKICB7IHJl dHVybiBfX2J1aWx0aW5fc2lubChfX3gpOyB9CgogIHVzaW5nIDo6c2luaDsKCgogIGlubGluZSBm bG9hdAogIHNpbmgoZmxvYXQgX194KSB7IHJldHVybiA6OnNpbmhmKF9feCk7IH0KCgoKCgoKICBp bmxpbmUgbG9uZyBkb3VibGUKICBzaW5oKGxvbmcgZG91YmxlIF9feCkgeyByZXR1cm4gOjpzaW5o bChfX3gpOyB9CgoKCgoKICB1c2luZyA6OnNxcnQ7CgogIGlubGluZSBmbG9hdAogIHNxcnQoZmxv YXQgX194KQogIHsgcmV0dXJuIF9fYnVpbHRpbl9zcXJ0ZihfX3gpOyB9CgogIGlubGluZSBsb25n IGRvdWJsZQogIHNxcnQobG9uZyBkb3VibGUgX194KQogIHsgcmV0dXJuIF9fYnVpbHRpbl9zcXJ0 bChfX3gpOyB9CgogIHVzaW5nIDo6dGFuOwoKCiAgaW5saW5lIGZsb2F0CiAgdGFuKGZsb2F0IF9f eCkgeyByZXR1cm4gOjp0YW5mKF9feCk7IH0KCgoKCgoKICBpbmxpbmUgbG9uZyBkb3VibGUKICB0 YW4obG9uZyBkb3VibGUgX194KSB7IHJldHVybiA6OnRhbmwoX194KTsgfQoKCgoKCiAgdXNpbmcg Ojp0YW5oOwoKCiAgaW5saW5lIGZsb2F0CiAgdGFuaChmbG9hdCBfX3gpIHsgcmV0dXJuIDo6dGFu aGYoX194KTsgfQoKCgoKCgogIGlubGluZSBsb25nIGRvdWJsZQogIHRhbmgobG9uZyBkb3VibGUg X194KSB7IHJldHVybiA6OnRhbmhsKF9feCk7IH0KCgoKCn0KCgoKCgoKbmFtZXNwYWNlIF9fZ251 X2N4eAp7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW50CiAgICBfX2NhcHR1cmVfZnBj bGFzc2lmeShfVHAgX19mKSB7IHJldHVybiAoc2l6ZW9mIChfX2YpID09IHNpemVvZiAoZmxvYXQp ID8gX19mcGNsYXNzaWZ5ZiAoX19mKSA6IHNpemVvZiAoX19mKSA9PSBzaXplb2YgKGRvdWJsZSkg PyBfX2ZwY2xhc3NpZnkgKF9fZikgOiBfX2ZwY2xhc3NpZnlsIChfX2YpKTsgfQoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfVHA+CiAgICBpbnQKICAgIF9fY2FwdHVyZV9pc2Zpbml0ZShfVHAgX19mKSB7 IHJldHVybiAoc2l6ZW9mIChfX2YpID09IHNpemVvZiAoZmxvYXQpID8gX19maW5pdGVmIChfX2Yp IDogc2l6ZW9mIChfX2YpID09IHNpemVvZiAoZG91YmxlKSA/IF9fZmluaXRlIChfX2YpIDogX19m aW5pdGVsIChfX2YpKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbnQKICAgIF9f Y2FwdHVyZV9pc2luZihfVHAgX19mKSB7IHJldHVybiAoc2l6ZW9mIChfX2YpID09IHNpemVvZiAo ZmxvYXQpID8gX19pc2luZmYgKF9fZikgOiBzaXplb2YgKF9fZikgPT0gc2l6ZW9mIChkb3VibGUp ID8gX19pc2luZiAoX19mKSA6IF9faXNpbmZsIChfX2YpKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfVHA+CiAgICBpbnQKICAgIF9fY2FwdHVyZV9pc25hbihfVHAgX19mKSB7IHJldHVybiAoc2l6 ZW9mIChfX2YpID09IHNpemVvZiAoZmxvYXQpID8gX19pc25hbmYgKF9fZikgOiBzaXplb2YgKF9f ZikgPT0gc2l6ZW9mIChkb3VibGUpID8gX19pc25hbiAoX19mKSA6IF9faXNuYW5sIChfX2YpKTsg fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbnQKICAgIF9fY2FwdHVyZV9pc25vcm1h bChfVHAgX19mKSB7IHJldHVybiAoKHNpemVvZiAoX19mKSA9PSBzaXplb2YgKGZsb2F0KSA/IF9f ZnBjbGFzc2lmeWYgKF9fZikgOiBzaXplb2YgKF9fZikgPT0gc2l6ZW9mIChkb3VibGUpID8gX19m cGNsYXNzaWZ5IChfX2YpIDogX19mcGNsYXNzaWZ5bCAoX19mKSkgPT0gRlBfTk9STUFMKTsgfQoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbnQKICAgIF9fY2FwdHVyZV9zaWduYml0KF9U cCBfX2YpIHsgcmV0dXJuIChzaXplb2YgKF9fZikgPT0gc2l6ZW9mIChmbG9hdCkgPyBfX3NpZ25i aXRmIChfX2YpIDogc2l6ZW9mIChfX2YpID09IHNpemVvZiAoZG91YmxlKSA/IF9fc2lnbmJpdCAo X19mKSA6IF9fc2lnbmJpdGwgKF9fZikpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAg IGludAogICAgX19jYXB0dXJlX2lzZ3JlYXRlcihfVHAgX19mMSwgX1RwIF9fZjIpCiAgICB7IHJl dHVybiAoX19leHRlbnNpb25fXyAoeyBfX3R5cGVvZl9fKF9fZjEpIF9feCA9IChfX2YxKTsgX190 eXBlb2ZfXyhfX2YyKSBfX3kgPSAoX19mMik7ICEoX19leHRlbnNpb25fXyAoeyBfX3R5cGVvZl9f KF9feCkgX191ID0gKF9feCk7IF9fdHlwZW9mX18oX195KSBfX3YgPSAoX195KTsgKHNpemVvZiAo X191KSA9PSBzaXplb2YgKGZsb2F0KSA/IF9fZnBjbGFzc2lmeWYgKF9fdSkgOiBzaXplb2YgKF9f dSkgPT0gc2l6ZW9mIChkb3VibGUpID8gX19mcGNsYXNzaWZ5IChfX3UpIDogX19mcGNsYXNzaWZ5 bCAoX191KSkgPT0gRlBfTkFOIHx8IChzaXplb2YgKF9fdikgPT0gc2l6ZW9mIChmbG9hdCkgPyBf X2ZwY2xhc3NpZnlmIChfX3YpIDogc2l6ZW9mIChfX3YpID09IHNpemVvZiAoZG91YmxlKSA/IF9f ZnBjbGFzc2lmeSAoX192KSA6IF9fZnBjbGFzc2lmeWwgKF9fdikpID09IEZQX05BTjsgfSkpICYm IF9feCA+IF9feTsgfSkpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgICBpbnQKICAg ICBfX2NhcHR1cmVfaXNncmVhdGVyZXF1YWwoX1RwIF9fZjEsIF9UcCBfX2YyKQogICAgIHsgcmV0 dXJuIChfX2V4dGVuc2lvbl9fICh7IF9fdHlwZW9mX18oX19mMSkgX194ID0gKF9fZjEpOyBfX3R5 cGVvZl9fKF9fZjIpIF9feSA9IChfX2YyKTsgIShfX2V4dGVuc2lvbl9fICh7IF9fdHlwZW9mX18o X194KSBfX3UgPSAoX194KTsgX190eXBlb2ZfXyhfX3kpIF9fdiA9IChfX3kpOyAoc2l6ZW9mIChf X3UpID09IHNpemVvZiAoZmxvYXQpID8gX19mcGNsYXNzaWZ5ZiAoX191KSA6IHNpemVvZiAoX191 KSA9PSBzaXplb2YgKGRvdWJsZSkgPyBfX2ZwY2xhc3NpZnkgKF9fdSkgOiBfX2ZwY2xhc3NpZnls IChfX3UpKSA9PSBGUF9OQU4gfHwgKHNpemVvZiAoX192KSA9PSBzaXplb2YgKGZsb2F0KSA/IF9f ZnBjbGFzc2lmeWYgKF9fdikgOiBzaXplb2YgKF9fdikgPT0gc2l6ZW9mIChkb3VibGUpID8gX19m cGNsYXNzaWZ5IChfX3YpIDogX19mcGNsYXNzaWZ5bCAoX192KSkgPT0gRlBfTkFOOyB9KSkgJiYg X194ID49IF9feTsgfSkpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgICBpbnQKICAg ICBfX2NhcHR1cmVfaXNsZXNzKF9UcCBfX2YxLCBfVHAgX19mMikgeyByZXR1cm4gKF9fZXh0ZW5z aW9uX18gKHsgX190eXBlb2ZfXyhfX2YxKSBfX3ggPSAoX19mMSk7IF9fdHlwZW9mX18oX19mMikg X195ID0gKF9fZjIpOyAhKF9fZXh0ZW5zaW9uX18gKHsgX190eXBlb2ZfXyhfX3gpIF9fdSA9IChf X3gpOyBfX3R5cGVvZl9fKF9feSkgX192ID0gKF9feSk7IChzaXplb2YgKF9fdSkgPT0gc2l6ZW9m IChmbG9hdCkgPyBfX2ZwY2xhc3NpZnlmIChfX3UpIDogc2l6ZW9mIChfX3UpID09IHNpemVvZiAo ZG91YmxlKSA/IF9fZnBjbGFzc2lmeSAoX191KSA6IF9fZnBjbGFzc2lmeWwgKF9fdSkpID09IEZQ X05BTiB8fCAoc2l6ZW9mIChfX3YpID09IHNpemVvZiAoZmxvYXQpID8gX19mcGNsYXNzaWZ5ZiAo X192KSA6IHNpemVvZiAoX192KSA9PSBzaXplb2YgKGRvdWJsZSkgPyBfX2ZwY2xhc3NpZnkgKF9f dikgOiBfX2ZwY2xhc3NpZnlsIChfX3YpKSA9PSBGUF9OQU47IH0pKSAmJiBfX3ggPCBfX3k7IH0p KTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICAgaW50CiAgICAgX19jYXB0dXJlX2lz bGVzc2VxdWFsKF9UcCBfX2YxLCBfVHAgX19mMikKICAgICB7IHJldHVybiAoX19leHRlbnNpb25f XyAoeyBfX3R5cGVvZl9fKF9fZjEpIF9feCA9IChfX2YxKTsgX190eXBlb2ZfXyhfX2YyKSBfX3kg PSAoX19mMik7ICEoX19leHRlbnNpb25fXyAoeyBfX3R5cGVvZl9fKF9feCkgX191ID0gKF9feCk7 IF9fdHlwZW9mX18oX195KSBfX3YgPSAoX195KTsgKHNpemVvZiAoX191KSA9PSBzaXplb2YgKGZs b2F0KSA/IF9fZnBjbGFzc2lmeWYgKF9fdSkgOiBzaXplb2YgKF9fdSkgPT0gc2l6ZW9mIChkb3Vi bGUpID8gX19mcGNsYXNzaWZ5IChfX3UpIDogX19mcGNsYXNzaWZ5bCAoX191KSkgPT0gRlBfTkFO IHx8IChzaXplb2YgKF9fdikgPT0gc2l6ZW9mIChmbG9hdCkgPyBfX2ZwY2xhc3NpZnlmIChfX3Yp IDogc2l6ZW9mIChfX3YpID09IHNpemVvZiAoZG91YmxlKSA/IF9fZnBjbGFzc2lmeSAoX192KSA6 IF9fZnBjbGFzc2lmeWwgKF9fdikpID09IEZQX05BTjsgfSkpICYmIF9feCA8PSBfX3k7IH0pKTsg fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICAgaW50CiAgICAgX19jYXB0dXJlX2lzbGVz c2dyZWF0ZXIoX1RwIF9fZjEsIF9UcCBfX2YyKQogICAgIHsgcmV0dXJuIChfX2V4dGVuc2lvbl9f ICh7IF9fdHlwZW9mX18oX19mMSkgX194ID0gKF9fZjEpOyBfX3R5cGVvZl9fKF9fZjIpIF9feSA9 IChfX2YyKTsgIShfX2V4dGVuc2lvbl9fICh7IF9fdHlwZW9mX18oX194KSBfX3UgPSAoX194KTsg X190eXBlb2ZfXyhfX3kpIF9fdiA9IChfX3kpOyAoc2l6ZW9mIChfX3UpID09IHNpemVvZiAoZmxv YXQpID8gX19mcGNsYXNzaWZ5ZiAoX191KSA6IHNpemVvZiAoX191KSA9PSBzaXplb2YgKGRvdWJs ZSkgPyBfX2ZwY2xhc3NpZnkgKF9fdSkgOiBfX2ZwY2xhc3NpZnlsIChfX3UpKSA9PSBGUF9OQU4g fHwgKHNpemVvZiAoX192KSA9PSBzaXplb2YgKGZsb2F0KSA/IF9fZnBjbGFzc2lmeWYgKF9fdikg OiBzaXplb2YgKF9fdikgPT0gc2l6ZW9mIChkb3VibGUpID8gX19mcGNsYXNzaWZ5IChfX3YpIDog X19mcGNsYXNzaWZ5bCAoX192KSkgPT0gRlBfTkFOOyB9KSkgJiYgKF9feCA8IF9feSB8fCBfX3kg PCBfX3gpOyB9KSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgIGludAogICAgIF9f Y2FwdHVyZV9pc3Vub3JkZXJlZChfVHAgX19mMSwgX1RwIF9fZjIpCiAgICAgeyByZXR1cm4gKF9f ZXh0ZW5zaW9uX18gKHsgX190eXBlb2ZfXyhfX2YxKSBfX3UgPSAoX19mMSk7IF9fdHlwZW9mX18o X19mMikgX192ID0gKF9fZjIpOyAoc2l6ZW9mIChfX3UpID09IHNpemVvZiAoZmxvYXQpID8gX19m cGNsYXNzaWZ5ZiAoX191KSA6IHNpemVvZiAoX191KSA9PSBzaXplb2YgKGRvdWJsZSkgPyBfX2Zw Y2xhc3NpZnkgKF9fdSkgOiBfX2ZwY2xhc3NpZnlsIChfX3UpKSA9PSBGUF9OQU4gfHwgKHNpemVv ZiAoX192KSA9PSBzaXplb2YgKGZsb2F0KSA/IF9fZnBjbGFzc2lmeWYgKF9fdikgOiBzaXplb2Yg KF9fdikgPT0gc2l6ZW9mIChkb3VibGUpID8gX19mcGNsYXNzaWZ5IChfX3YpIDogX19mcGNsYXNz aWZ5bCAoX192KSkgPT0gRlBfTkFOOyB9KSk7IH0KfQojIDU4MCAiL3Vzci9jeWdudXMvYmluLy4u L2luY2x1ZGUvYysrLzMuMS4xL2NtYXRoIiAzCm5hbWVzcGFjZSBfX2dudV9jeHgKewogIHRlbXBs YXRlPHR5cGVuYW1lIF9UcD4KICAgIGludAogICAgZnBjbGFzc2lmeShfVHAgX19mKSB7IHJldHVy biBfX2NhcHR1cmVfZnBjbGFzc2lmeShfX2YpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4K ICAgIGludAogICAgaXNmaW5pdGUoX1RwIF9fZikgeyByZXR1cm4gX19jYXB0dXJlX2lzZmluaXRl KF9fZik7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW50CiAgICBpc2luZihfVHAg X19mKSB7IHJldHVybiBfX2NhcHR1cmVfaXNpbmYoX19mKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfVHA+CiAgICBpbnQKICAgIGlzbmFuKF9UcCBfX2YpIHsgcmV0dXJuIF9fY2FwdHVyZV9pc25h bihfX2YpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGludAogICAgaXNub3JtYWwo X1RwIF9fZikgeyByZXR1cm4gX19jYXB0dXJlX2lzbm9ybWFsKF9fZik7IH0KCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX1RwPgogICAgaW50CiAgICBzaWduYml0KF9UcCBfX2YpIHsgcmV0dXJuIF9fY2Fw dHVyZV9zaWduYml0KF9fZik7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW50CiAg ICBpc2dyZWF0ZXIoX1RwIF9fZjEsIF9UcCBfX2YyKSB7IHJldHVybiBfX2NhcHR1cmVfaXNncmVh dGVyKF9fZjEsIF9fZjIpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGludAogICAg aXNncmVhdGVyZXF1YWwoX1RwIF9fZjEsIF9UcCBfX2YyKQogICAgeyByZXR1cm4gX19jYXB0dXJl X2lzZ3JlYXRlcmVxdWFsKF9fZjEsIF9fZjIpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4K ICAgIGludAogICAgaXNsZXNzKF9UcCBfX2YxLCBfVHAgX19mMikgeyByZXR1cm4gX19jYXB0dXJl X2lzbGVzcyhfX2YxLCBfX2YyKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbnQK ICAgIGlzbGVzc2VxdWFsKF9UcCBfX2YxLCBfVHAgX19mMikKICAgIHsgcmV0dXJuIF9fY2FwdHVy ZV9pc2xlc3NlcXVhbChfX2YxLCBfX2YyKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAg ICBpbnQKICAgIGlzbGVzc2dyZWF0ZXIoX1RwIF9fZjEsIF9UcCBfX2YyKQogICAgeyByZXR1cm4g X19jYXB0dXJlX2lzbGVzc2dyZWF0ZXIoX19mMSwgX19mMik7IH0KCiAgdGVtcGxhdGU8dHlwZW5h bWUgX1RwPgogICAgaW50CiAgICBpc3Vub3JkZXJlZChfVHAgX19mMSwgX1RwIF9fZjIpCiAgICB7 IHJldHVybiBfX2NhcHR1cmVfaXN1bm9yZGVyZWQoX19mMSwgX19mMik7IH0KfQoKbmFtZXNwYWNl IHN0ZAp7CiAgdXNpbmcgX19nbnVfY3h4OjpmcGNsYXNzaWZ5OwogIHVzaW5nIF9fZ251X2N4eDo6 aXNmaW5pdGU7CiAgdXNpbmcgX19nbnVfY3h4Ojppc2luZjsKICB1c2luZyBfX2dudV9jeHg6Omlz bmFuOwogIHVzaW5nIF9fZ251X2N4eDo6aXNub3JtYWw7CiAgdXNpbmcgX19nbnVfY3h4OjpzaWdu Yml0OwogIHVzaW5nIF9fZ251X2N4eDo6aXNncmVhdGVyOwogIHVzaW5nIF9fZ251X2N4eDo6aXNn cmVhdGVyZXF1YWw7CiAgdXNpbmcgX19nbnVfY3h4Ojppc2xlc3M7CiAgdXNpbmcgX19nbnVfY3h4 Ojppc2xlc3NlcXVhbDsKICB1c2luZyBfX2dudV9jeHg6OmlzbGVzc2dyZWF0ZXI7CiAgdXNpbmcg X19nbnVfY3h4Ojppc3Vub3JkZXJlZDsKfQoKCgoKIyAxICIvdXNyL2N5Z251cy9iaW4vLi4vaW5j bHVkZS9jKysvMy4xLjEvYml0cy9jbWF0aC50Y2MiIDEgMwojIDM1ICIvdXNyL2N5Z251cy9iaW4v Li4vaW5jbHVkZS9jKysvMy4xLjEvYml0cy9jbWF0aC50Y2MiIDMKbmFtZXNwYWNlIHN0ZAp7CiAg dGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgX1RwCiAgICBfX2NtYXRoX3Bvd2VyKF9UcCBfX3gs IHVuc2lnbmVkIGludCBfX24pCiAgICB7CiAgICAgIF9UcCBfX3kgPSBfX24gJSAyID8gX194IDog MTsKCiAgICAgIHdoaWxlIChfX24gPj49IDEpCiAgICAgICAgewogICAgICAgICAgX194ID0gX194 ICogX194OwogICAgICAgICAgaWYgKF9fbiAlIDIpCiAgICAgICAgICAgIF9feSA9IF9feSAqIF9f eDsKICAgICAgICB9CgogICAgICByZXR1cm4gX195OwogICAgfQp9CiMgNjU1ICIvdXNyL2N5Z251 cy9iaW4vLi4vaW5jbHVkZS9jKysvMy4xLjEvY21hdGgiIDIgMwojIDQyICIvdXNyL2N5Z251cy9i aW4vLi4vaW5jbHVkZS9jKysvMy4xLjEvYml0cy9sb2NhbGVfZmFjZXRzLnRjYyIgMiAzCgojIDEg Ii91c3IvY3lnbnVzL2Jpbi8uLi9pbmNsdWRlL2MrKy8zLjEuMS9saW1pdHMiIDEgMwojIDQ3ICIv dXNyL2N5Z251cy9iaW4vLi4vaW5jbHVkZS9jKysvMy4xLjEvbGltaXRzIiAzCgojIDEgIi91c3Iv Y3lnbnVzL2Jpbi8uLi9pbmNsdWRlL2MrKy8zLjEuMS9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2Nw dV9saW1pdHMuaCIgMSAzCiMgNDkgIi91c3IvY3lnbnVzL2Jpbi8uLi9pbmNsdWRlL2MrKy8zLjEu MS9saW1pdHMiIDIgMwojIDg4NyAiL3Vzci9jeWdudXMvYmluLy4uL2luY2x1ZGUvYysrLzMuMS4x L2xpbWl0cyIgMwpuYW1lc3BhY2Ugc3RkCnsKICBlbnVtIGZsb2F0X3JvdW5kX3N0eWxlCiAgewog ICAgcm91bmRfaW5kZXRlcm1pbmF0ZSA9IC0xLAogICAgcm91bmRfdG93YXJkX3plcm8gPSAwLAog ICAgcm91bmRfdG9fbmVhcmVzdCA9IDEsCiAgICByb3VuZF90b3dhcmRfaW5maW5pdHkgPSAyLAog ICAgcm91bmRfdG93YXJkX25lZ19pbmZpbml0eSA9IDMKICB9OwoKICBlbnVtIGZsb2F0X2Rlbm9y bV9zdHlsZQogIHsKICAgIGRlbm9ybV9pbmRldGVybWluYXRlID0gLTEsCiAgICBkZW5vcm1fYWJz ZW50ID0gMCwKICAgIGRlbm9ybV9wcmVzZW50ID0gMQogIH07CgoKCgogIHN0cnVjdCBfX251bWVy aWNfbGltaXRzX2Jhc2UKICB7CiAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9 IGZhbHNlOwoKICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0gMDsKICAgIHN0YXRpYyBjb25z dCBpbnQgZGlnaXRzMTAgPSAwOwogICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gZmFs c2U7CiAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0gZmFsc2U7CiAgICBzdGF0aWMg Y29uc3QgYm9vbCBpc19leGFjdCA9IGZhbHNlOwogICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9 IDA7CgogICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAwOwogICAgc3RhdGljIGNv bnN0IGludCBtaW5fZXhwb25lbnQxMCA9IDA7CiAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBv bmVudCA9IDA7CiAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudDEwID0gMDsKCiAgICBz dGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxzZTsKICAgIHN0YXRpYyBjb25zdCBi b29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsKICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWdu YWxpbmdfTmFOID0gZmFsc2U7CiAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhh c19kZW5vcm0gPSBkZW5vcm1fYWJzZW50OwogICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9y bV9sb3NzID0gZmFsc2U7CgogICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5ID0gZmFsc2U7 CiAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gZmFsc2U7CiAgICBzdGF0aWMgY29u c3QgYm9vbCBpc19tb2R1bG8gPSBmYWxzZTsKCiAgICBzdGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9 IGZhbHNlOwogICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7CiAg ICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSByb3VuZF90b3dh cmRfemVybzsKICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBzdHJ1Y3QgbnVtZXJp Y19saW1pdHMgOiBwdWJsaWMgX19udW1lcmljX2xpbWl0c19iYXNlCiAgICB7CiAgICAgIHN0YXRp YyBfVHAgbWluKCkgdGhyb3coKSB7IHJldHVybiBzdGF0aWNfY2FzdDxfVHA+KDApOyB9CiAgICAg IHN0YXRpYyBfVHAgbWF4KCkgdGhyb3coKSB7IHJldHVybiBzdGF0aWNfY2FzdDxfVHA+KDApOyB9 CiAgICAgIHN0YXRpYyBfVHAgZXBzaWxvbigpIHRocm93KCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8 X1RwPigwKTsgfQogICAgICBzdGF0aWMgX1RwIHJvdW5kX2Vycm9yKCkgdGhyb3coKSB7IHJldHVy biBzdGF0aWNfY2FzdDxfVHA+KDApOyB9CiAgICAgIHN0YXRpYyBfVHAgaW5maW5pdHkoKSB0aHJv dygpIHsgcmV0dXJuIHN0YXRpY19jYXN0PF9UcD4oMCk7IH0KICAgICAgc3RhdGljIF9UcCBxdWll dF9OYU4oKSB0aHJvdygpIHsgcmV0dXJuIHN0YXRpY19jYXN0PF9UcD4oMCk7IH0KICAgICAgc3Rh dGljIF9UcCBzaWduYWxpbmdfTmFOKCkgdGhyb3coKSB7IHJldHVybiBzdGF0aWNfY2FzdDxfVHA+ KDApOyB9CiAgICAgIHN0YXRpYyBfVHAgZGVub3JtX21pbigpIHRocm93KCkgeyByZXR1cm4gc3Rh dGljX2Nhc3Q8X1RwPigwKTsgfQogICAgfTsKCgoKICB0ZW1wbGF0ZTw+CiAgICBzdHJ1Y3QgbnVt ZXJpY19saW1pdHM8Ym9vbD4KICAgIHsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lh bGl6ZWQgPSB0cnVlOwoKICAgICAgc3RhdGljIGJvb2wgbWluKCkgdGhyb3coKQogICAgICB7IHJl dHVybiBmYWxzZTsgfQoKICAgICAgc3RhdGljIGJvb2wgbWF4KCkgdGhyb3coKQogICAgICB7IHJl dHVybiB0cnVlOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IDE7CiAgICAgIHN0 YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSAwOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19z aWduZWQgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IHRydWU7 CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2V4YWN0ID0gdHJ1ZTsKICAgICAgc3RhdGljIGNv bnN0IGludCByYWRpeCA9IDI7CiAgICAgIHN0YXRpYyBib29sIGVwc2lsb24oKSB0aHJvdygpCiAg ICAgIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgIHN0YXRpYyBib29sIHJvdW5kX2Vycm9yKCkgdGhy b3coKQogICAgICB7IHJldHVybiBmYWxzZTsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5f ZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gMDsK ICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMgY29u c3QgaW50IG1heF9leHBvbmVudDEwID0gMDsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19p bmZpbml0eSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0g ZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7 CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9y bV9hYnNlbnQ7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNl OwoKICAgICAgc3RhdGljIGJvb2wgaW5maW5pdHkoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIGZh bHNlOyB9CiAgICAgIHN0YXRpYyBib29sIHF1aWV0X05hTigpIHRocm93KCkKICAgICAgeyByZXR1 cm4gZmFsc2U7IH0KICAgICAgc3RhdGljIGJvb2wgc2lnbmFsaW5nX05hTigpIHRocm93KCkKICAg ICAgeyByZXR1cm4gZmFsc2U7IH0KICAgICAgc3RhdGljIGJvb2wgZGVub3JtX21pbigpIHRocm93 KCkKICAgICAgeyByZXR1cm4gZmFsc2U7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2ll YzU1OSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsK ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gZmFsc2U7CgoKCgogICAgICBzdGF0 aWMgY29uc3QgYm9vbCB0cmFwcyA9IHRydWUKICAgICAgICAgICAgICAgfHwgdHJ1ZTsKICAgICAg c3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7CiAgICAgIHN0YXRpYyBj b25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOwog ICAgfTsKCgoKICB0ZW1wbGF0ZTw+CiAgICBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8Y2hhcj4KICAg IHsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOwoKICAgICAg c3RhdGljIGNoYXIgbWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiAoY2hhcikoLTEyNyAtIDEp OyB9CiAgICAgIHN0YXRpYyBjaGFyIG1heCgpIHRocm93KCkKICAgICAgeyByZXR1cm4gKGNoYXIp MTI3OyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IDc7CiAgICAgIHN0YXRpYyBj b25zdCBpbnQgZGlnaXRzMTAgPSA3OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zaWduZWQg PSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0gdHJ1ZTsKICAgICAg c3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgaW50 IHJhZGl4ID0gMjsKICAgICAgc3RhdGljIGNoYXIgZXBzaWxvbigpIHRocm93KCkKICAgICAgeyBy ZXR1cm4gY2hhcigpOyB9CiAgICAgIHN0YXRpYyBjaGFyIHJvdW5kX2Vycm9yKCkgdGhyb3coKQog ICAgICB7IHJldHVybiBjaGFyKCk7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9u ZW50ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9IDA7CiAgICAg IHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGlu dCBtYXhfZXhwb25lbnQxMCA9IDA7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5p dHkgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNl OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGZhbHNlOwogICAg ICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1fYWJz ZW50OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3MgPSBmYWxzZTsKCiAg ICAgIHN0YXRpYyBjaGFyIGluZmluaXR5KCkgdGhyb3coKQogICAgICB7IHJldHVybiBjaGFyKCk7 IH0KICAgICAgc3RhdGljIGNoYXIgcXVpZXRfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiBj aGFyKCk7IH0KICAgICAgc3RhdGljIGNoYXIgc2lnbmFsaW5nX05hTigpIHRocm93KCkKICAgICAg eyByZXR1cm4gY2hhcigpOyB9CiAgICAgIHN0YXRpYyBjaGFyIGRlbm9ybV9taW4oKSB0aHJvdygp CiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGNoYXI+KDApOyB9CgogICAgICBzdGF0aWMgY29u c3QgYm9vbCBpc19pZWM1NTkgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91 bmRlZCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX21vZHVsbyA9IHRydWU7Cgog ICAgICBzdGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBi b29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91 bmRfc3R5bGUgcm91bmRfc3R5bGUgPSByb3VuZF90b3dhcmRfemVybzsKICAgIH07CiMgMTA3MSAi L3Vzci9jeWdudXMvYmluLy4uL2luY2x1ZGUvYysrLzMuMS4xL2xpbWl0cyIgMwogIHRlbXBsYXRl PD4KICAgIHN0cnVjdCBudW1lcmljX2xpbWl0czxzaWduZWQgY2hhcj4KICAgIHsKICAgICAgc3Rh dGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOwoKICAgICAgc3RhdGljIHNpZ25l ZCBjaGFyIG1pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gKC0xMjcgLSAxKTsgfQogICAgICBz dGF0aWMgc2lnbmVkIGNoYXIgbWF4KCkgdGhyb3coKQogICAgICB7IHJldHVybiAxMjc7IH0KCiAg ICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0gNzsKICAgICAgc3RhdGljIGNvbnN0IGludCBk aWdpdHMxMCA9IDI7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IHRydWU7CiAg ICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIgPSB0cnVlOwogICAgICBzdGF0aWMgY29u c3QgYm9vbCBpc19leGFjdCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAy OwogICAgICBzdGF0aWMgc2lnbmVkIGNoYXIgZXBzaWxvbigpIHRocm93KCkKICAgICAgeyByZXR1 cm4gMDsgfQogICAgICBzdGF0aWMgc2lnbmVkIGNoYXIgcm91bmRfZXJyb3IoKSB0aHJvdygpCiAg ICAgIHsgcmV0dXJuIDA7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50ID0g MDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9IDA7CiAgICAgIHN0YXRp YyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhf ZXhwb25lbnQxMCA9IDA7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkgPSBm YWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNlOwogICAg ICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGZhbHNlOwogICAgICBzdGF0 aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1fYWJzZW50Owog ICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3MgPSBmYWxzZTsKCiAgICAgIHN0 YXRpYyBzaWduZWQgY2hhciBpbmZpbml0eSgpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGlj X2Nhc3Q8c2lnbmVkIGNoYXI+KDApOyB9CiAgICAgIHN0YXRpYyBzaWduZWQgY2hhciBxdWlldF9O YU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHNpZ25lZCBjaGFyPigwKTsg fQogICAgICBzdGF0aWMgc2lnbmVkIGNoYXIgc2lnbmFsaW5nX05hTigpIHRocm93KCkKICAgICAg eyByZXR1cm4gc3RhdGljX2Nhc3Q8c2lnbmVkIGNoYXI+KDApOyB9CiAgICAgIHN0YXRpYyBzaWdu ZWQgY2hhciBkZW5vcm1fbWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxz aWduZWQgY2hhcj4oMCk7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IGZh bHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsKICAgICAgc3Rh dGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyBjb25zdCBib29s IHRyYXBzID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0g ZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9 IHJvdW5kX3Rvd2FyZF96ZXJvOwogICAgfTsKIyAxMTI4ICIvdXNyL2N5Z251cy9iaW4vLi4vaW5j bHVkZS9jKysvMy4xLjEvbGltaXRzIiAzCiAgdGVtcGxhdGU8PgogICAgc3RydWN0IG51bWVyaWNf bGltaXRzPHVuc2lnbmVkIGNoYXI+CiAgICB7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3Nw ZWNpYWxpemVkID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyB1bnNpZ25lZCBjaGFyIG1pbigpIHRocm93 KCkKICAgICAgeyByZXR1cm4gMDsgfQogICAgICBzdGF0aWMgdW5zaWduZWQgY2hhciBtYXgoKSB0 aHJvdygpCiAgICAgIHsgcmV0dXJuICgxMjcgKiAyICsgMSk7IH0KCiAgICAgIHN0YXRpYyBjb25z dCBpbnQgZGlnaXRzID0gODsKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9IDI7CiAg ICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IGZhbHNlOwogICAgICBzdGF0aWMgY29u c3QgYm9vbCBpc19pbnRlZ2VyID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhh Y3QgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMjsKICAgICAgc3RhdGlj IHVuc2lnbmVkIGNoYXIgZXBzaWxvbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQogICAg ICBzdGF0aWMgdW5zaWduZWQgY2hhciByb3VuZF9lcnJvcigpIHRocm93KCkKICAgICAgeyByZXR1 cm4gMDsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAwOwogICAgICBz dGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGlu dCBtYXhfZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudDEw ID0gMDsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNlOwogICAg ICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBj b25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBm bG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7CiAgICAgIHN0YXRp YyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOwoKICAgICAgc3RhdGljIHVuc2ln bmVkIGNoYXIgaW5maW5pdHkoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVu c2lnbmVkIGNoYXI+KDApOyB9CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBjaGFyIHF1aWV0X05hTigp IHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oMCk7IH0K ICAgICAgc3RhdGljIHVuc2lnbmVkIGNoYXIgc2lnbmFsaW5nX05hTigpIHRocm93KCkKICAgICAg eyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oMCk7IH0KICAgICAgc3RhdGljIHVu c2lnbmVkIGNoYXIgZGVub3JtX21pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nh c3Q8dW5zaWduZWQgY2hhcj4oMCk7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1 OSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsKICAg ICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyBjb25z dCBib29sIHRyYXBzID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVm b3JlID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9z dHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOwogICAgfTsKCgoKCgoKICB0ZW1wbGF0ZTw+CiAgICBz dHJ1Y3QgbnVtZXJpY19saW1pdHM8d2NoYXJfdD4KICAgIHsKICAgICAgc3RhdGljIGNvbnN0IGJv b2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOwoKICAgICAgc3RhdGljIHdjaGFyX3QgbWluKCkgdGhy b3coKQogICAgICB7IHJldHVybiAod2NoYXJfdCkoLTIxNDc0ODM2NDdMIC0gMSk7IH0KICAgICAg c3RhdGljIHdjaGFyX3QgbWF4KCkgdGhyb3coKQogICAgICB7IHJldHVybiAod2NoYXJfdCkyMTQ3 NDgzNjQ3TDsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMgPSAzMTsKICAgICAgc3Rh dGljIGNvbnN0IGludCBkaWdpdHMxMCA9IDk7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3Np Z25lZCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIgPSB0cnVlOwog ICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25z dCBpbnQgcmFkaXggPSAyOwogICAgICBzdGF0aWMgd2NoYXJfdCBlcHNpbG9uKCkgdGhyb3coKQog ICAgICB7IHJldHVybiAwOyB9CiAgICAgIHN0YXRpYyB3Y2hhcl90IHJvdW5kX2Vycm9yKCkgdGhy b3coKQogICAgICB7IHJldHVybiAwOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBv bmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAwOwogICAg ICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBp bnQgbWF4X2V4cG9uZW50MTAgPSAwOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2luZmlu aXR5ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9OYU4gPSBmYWxz ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPSBmYWxzZTsKICAg ICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtID0gZGVub3JtX2Fi c2VudDsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7Cgog ICAgICBzdGF0aWMgd2NoYXJfdCBpbmZpbml0eSgpIHRocm93KCkKICAgICAgeyByZXR1cm4gd2No YXJfdCgpOyB9CiAgICAgIHN0YXRpYyB3Y2hhcl90IHF1aWV0X05hTigpIHRocm93KCkKICAgICAg eyByZXR1cm4gd2NoYXJfdCgpOyB9CiAgICAgIHN0YXRpYyB3Y2hhcl90IHNpZ25hbGluZ19OYU4o KSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHdjaGFyX3QoKTsgfQogICAgICBzdGF0aWMgd2NoYXJf dCBkZW5vcm1fbWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiB3Y2hhcl90KCk7IH0KCiAgICAg IHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3Qg Ym9vbCBpc19ib3VuZGVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxv ID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gdHJ1ZTsKICAgICAgc3Rh dGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25z dCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOwogICAg fTsKIyAxMjQxICIvdXNyL2N5Z251cy9iaW4vLi4vaW5jbHVkZS9jKysvMy4xLjEvbGltaXRzIiAz CiAgdGVtcGxhdGU8PgogICAgc3RydWN0IG51bWVyaWNfbGltaXRzPHNob3J0PgogICAgewogICAg ICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRydWU7CgogICAgICBzdGF0aWMg c2hvcnQgbWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiAoLTMyNzY3IC0gMSk7IH0KICAgICAg c3RhdGljIHNob3J0IG1heCgpIHRocm93KCkKICAgICAgeyByZXR1cm4gMzI3Njc7IH0KCiAgICAg IHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0gMTU7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGln aXRzMTAgPSA0OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zaWduZWQgPSB0cnVlOwogICAg ICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0 IGJvb2wgaXNfZXhhY3QgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMjsK ICAgICAgc3RhdGljIHNob3J0IGVwc2lsb24oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7IH0K ICAgICAgc3RhdGljIHNob3J0IHJvdW5kX2Vycm9yKCkgdGhyb3coKQogICAgICB7IHJldHVybiAw OyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRp YyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1h eF9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAw OwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7CiAgICAgIHN0 YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0 IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0 X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtID0gZGVub3JtX2Fic2VudDsKICAgICAgc3RhdGljIGNv bnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7CgogICAgICBzdGF0aWMgc2hvcnQgaW5m aW5pdHkoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHNob3J0KCk7IH0KICAgICAgc3RhdGljIHNo b3J0IHF1aWV0X05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc2hvcnQoKTsgfQogICAgICBz dGF0aWMgc2hvcnQgc2lnbmFsaW5nX05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc2hvcnQo KTsgfQogICAgICBzdGF0aWMgc2hvcnQgZGVub3JtX21pbigpIHRocm93KCkKICAgICAgeyByZXR1 cm4gc2hvcnQoKTsgfQoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5ID0gdHJ1ZTsK ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7CiAgICAgIHN0YXRpYyBj b25zdCBib29sIGlzX21vZHVsbyA9IHRydWU7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0cmFw cyA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNl OwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSByb3Vu ZF90b3dhcmRfemVybzsKICAgIH07CiMgMTI5OCAiL3Vzci9jeWdudXMvYmluLy4uL2luY2x1ZGUv YysrLzMuMS4xL2xpbWl0cyIgMwogIHRlbXBsYXRlPD4KICAgIHN0cnVjdCBudW1lcmljX2xpbWl0 czx1bnNpZ25lZCBzaG9ydD4KICAgIHsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lh bGl6ZWQgPSB0cnVlOwoKICAgICAgc3RhdGljIHVuc2lnbmVkIHNob3J0IG1pbigpIHRocm93KCkK ICAgICAgeyByZXR1cm4gMDsgfQogICAgICBzdGF0aWMgdW5zaWduZWQgc2hvcnQgbWF4KCkgdGhy b3coKQogICAgICB7IHJldHVybiAoMzI3NjcgKiAyICsgMSk7IH0KCiAgICAgIHN0YXRpYyBjb25z dCBpbnQgZGlnaXRzID0gMTY7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSA0Owog ICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zaWduZWQgPSBmYWxzZTsKICAgICAgc3RhdGljIGNv bnN0IGJvb2wgaXNfaW50ZWdlciA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2V4 YWN0ID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9IDI7CiAgICAgIHN0YXRp YyB1bnNpZ25lZCBzaG9ydCBlcHNpbG9uKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwOyB9CiAg ICAgIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCByb3VuZF9lcnJvcigpIHRocm93KCkKICAgICAgeyBy ZXR1cm4gMDsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAwOwogICAg ICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gMDsKICAgICAgc3RhdGljIGNvbnN0 IGludCBtYXhfZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVu dDEwID0gMDsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNlOwog ICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRp YyBjb25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25z dCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7CiAgICAgIHN0 YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOwoKICAgICAgc3RhdGljIHVu c2lnbmVkIHNob3J0IGluZmluaXR5KCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2Fz dDx1bnNpZ25lZCBzaG9ydD4oMCk7IH0KICAgICAgc3RhdGljIHVuc2lnbmVkIHNob3J0IHF1aWV0 X05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQ+ KDApOyB9CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCBzaWduYWxpbmdfTmFOKCkgdGhyb3co KQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9ydD4oMCk7IH0KICAgICAg c3RhdGljIHVuc2lnbmVkIHNob3J0IGRlbm9ybV9taW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJu IHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0PigwKTsgfQoKICAgICAgc3RhdGljIGNvbnN0IGJv b2wgaXNfaWVjNTU5ID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9 IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX21vZHVsbyA9IHRydWU7CgogICAgICBz dGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRp bnluZXNzX2JlZm9yZSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5 bGUgcm91bmRfc3R5bGUgPSByb3VuZF90b3dhcmRfemVybzsKICAgIH07CgoKCgoKCiAgdGVtcGxh dGU8PgogICAgc3RydWN0IG51bWVyaWNfbGltaXRzPGludD4KICAgIHsKICAgICAgc3RhdGljIGNv bnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOwoKICAgICAgc3RhdGljIGludCBtaW4oKSB0 aHJvdygpCiAgICAgIHsgcmV0dXJuIChpbnQpKC0yMTQ3NDgzNjQ3TCAtIDEpOyB9CiAgICAgIHN0 YXRpYyBpbnQgbWF4KCkgdGhyb3coKQogICAgICB7IHJldHVybiAoaW50KTIxNDc0ODM2NDdMOyB9 CgogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IDMxOwogICAgICBzdGF0aWMgY29uc3Qg aW50IGRpZ2l0czEwID0gOTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gdHJ1 ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IHRydWU7CiAgICAgIHN0YXRp YyBjb25zdCBib29sIGlzX2V4YWN0ID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGludCByYWRp eCA9IDI7CiAgICAgIHN0YXRpYyBpbnQgZXBzaWxvbigpIHRocm93KCkKICAgICAgeyByZXR1cm4g MDsgfQogICAgICBzdGF0aWMgaW50IHJvdW5kX2Vycm9yKCkgdGhyb3coKQogICAgICB7IHJldHVy biAwOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9IDA7CiAgICAgIHN0 YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50 IG1heF9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAg PSAwOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7CiAgICAg IHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNv bnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZs b2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtID0gZGVub3JtX2Fic2VudDsKICAgICAgc3RhdGlj IGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7CgogICAgICBzdGF0aWMgaW50IGlu ZmluaXR5KCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KDApOyB9CiAg ICAgIHN0YXRpYyBpbnQgcXVpZXRfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNf Y2FzdDxpbnQ+KDApOyB9CiAgICAgIHN0YXRpYyBpbnQgc2lnbmFsaW5nX05hTigpIHRocm93KCkK ICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PigwKTsgfQogICAgICBzdGF0aWMgaW50IGRl bm9ybV9taW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGludD4oMCk7IH0K CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IHRydWU7CiAgICAgIHN0YXRpYyBj b25zdCBib29sIGlzX2JvdW5kZWQgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19t b2R1bG8gPSB0cnVlOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdHJhcHMgPSB0cnVlOwogICAg ICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxzZTsKICAgICAgc3RhdGlj IGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxlID0gcm91bmRfdG93YXJkX3plcm87 CiAgICB9OwojIDE0MTAgIi91c3IvY3lnbnVzL2Jpbi8uLi9pbmNsdWRlL2MrKy8zLjEuMS9saW1p dHMiIDMKICB0ZW1wbGF0ZTw+CiAgICBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8dW5zaWduZWQgaW50 PgogICAgewogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRydWU7Cgog ICAgICBzdGF0aWMgdW5zaWduZWQgaW50IG1pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsg fQogICAgICAgICAgc3RhdGljIHVuc2lnbmVkIGludCBtYXgoKSB0aHJvdygpCiAgICAgIHsgcmV0 dXJuICh1bnNpZ25lZCkoMjE0NzQ4MzY0N0wgKiAyVSArIDEpOyB9CgogICAgICBzdGF0aWMgY29u c3QgaW50IGRpZ2l0cyA9IDMyOwogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0czEwID0gOTsK ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gZmFsc2U7CiAgICAgIHN0YXRpYyBj b25zdCBib29sIGlzX2ludGVnZXIgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19l eGFjdCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAyOwogICAgICBzdGF0 aWMgdW5zaWduZWQgaW50IGVwc2lsb24oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7IH0KICAg ICAgc3RhdGljIHVuc2lnbmVkIGludCByb3VuZF9lcnJvcigpIHRocm93KCkKICAgICAgeyByZXR1 cm4gMDsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAwOwogICAgICBz dGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGlu dCBtYXhfZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudDEw ID0gMDsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNlOwogICAg ICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBj b25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBm bG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7CiAgICAgIHN0YXRp YyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOwoKICAgICAgc3RhdGljIHVuc2ln bmVkIGludCBpbmZpbml0eSgpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5z aWduZWQgaW50PigwKTsgfQogICAgICBzdGF0aWMgdW5zaWduZWQgaW50IHF1aWV0X05hTigpIHRo cm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50PigwKTsgfQogICAg ICBzdGF0aWMgdW5zaWduZWQgaW50IHNpZ25hbGluZ19OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0 dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4oMCk7IH0KICAgICAgc3RhdGljIHVuc2lnbmVk IGludCBkZW5vcm1fbWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNp Z25lZCBpbnQ+KDApOyB9CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSB0cnVl OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsKICAgICAgc3RhdGlj IGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRy YXBzID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFs c2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJv dW5kX3Rvd2FyZF96ZXJvOwogICAgfTsKCgoKCgoKICB0ZW1wbGF0ZTw+CiAgICBzdHJ1Y3QgbnVt ZXJpY19saW1pdHM8bG9uZz4KICAgIHsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lh bGl6ZWQgPSB0cnVlOwoKICAgICAgc3RhdGljIGxvbmcgbWluKCkgdGhyb3coKQogICAgICB7IHJl dHVybiAoLTIxNDc0ODM2NDdMIC0gMSk7IH0KICAgICAgc3RhdGljIGxvbmcgbWF4KCkgdGhyb3co KQogICAgICB7IHJldHVybiAyMTQ3NDgzNjQ3TDsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBk aWdpdHMgPSAzMTsKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9IDk7CiAgICAgIHN0 YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29s IGlzX2ludGVnZXIgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IHRy dWU7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAyOwogICAgICBzdGF0aWMgbG9uZyBl cHNpbG9uKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwOyB9CiAgICAgIHN0YXRpYyBsb25nIHJv dW5kX2Vycm9yKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwOyB9CgogICAgICBzdGF0aWMgY29u c3QgaW50IG1pbl9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9u ZW50MTAgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDA7CiAgICAg IHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOwoKICAgICAgc3RhdGljIGNvbnN0 IGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19x dWlldF9OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19O YU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVu b3JtID0gZGVub3JtX2Fic2VudDsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9s b3NzID0gZmFsc2U7CgogICAgICBzdGF0aWMgbG9uZyBpbmZpbml0eSgpIHRocm93KCkKICAgICAg eyByZXR1cm4gc3RhdGljX2Nhc3Q8bG9uZz4oMCk7IH0KICAgICAgc3RhdGljIGxvbmcgcXVpZXRf TmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxsb25nPigwKTsgfQogICAg ICBzdGF0aWMgbG9uZyBzaWduYWxpbmdfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0 aWNfY2FzdDxsb25nPigwKTsgfQogICAgICBzdGF0aWMgbG9uZyBkZW5vcm1fbWluKCkgdGhyb3co KQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxsb25nPigwKTsgfQoKICAgICAgc3RhdGljIGNv bnN0IGJvb2wgaXNfaWVjNTU5ID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91 bmRlZCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX21vZHVsbyA9IHRydWU7Cgog ICAgICBzdGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBi b29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91 bmRfc3R5bGUgcm91bmRfc3R5bGUgPSByb3VuZF90b3dhcmRfemVybzsKICAgIH07CiMgMTUyMiAi L3Vzci9jeWdudXMvYmluLy4uL2luY2x1ZGUvYysrLzMuMS4xL2xpbWl0cyIgMwogIHRlbXBsYXRl PD4KICAgIHN0cnVjdCBudW1lcmljX2xpbWl0czx1bnNpZ25lZCBsb25nPgogICAgewogICAgICBz dGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRydWU7CgogICAgICBzdGF0aWMgdW5z aWduZWQgbG9uZyBtaW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7IH0KICAgICAgc3RhdGlj IHVuc2lnbmVkIGxvbmcgbWF4KCkgdGhyb3coKQogICAgICB7IHJldHVybiAoMjE0NzQ4MzY0N0wg KiAyVSArIDEpOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IDMyOwogICAgICBz dGF0aWMgY29uc3QgaW50IGRpZ2l0czEwID0gOTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNf c2lnbmVkID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIgPSB0cnVl OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IHRydWU7CiAgICAgIHN0YXRpYyBj b25zdCBpbnQgcmFkaXggPSAyOwogICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBlcHNpbG9uKCkg dGhyb3coKQogICAgICB7IHJldHVybiAwOyB9CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIHJv dW5kX2Vycm9yKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwOyB9CgogICAgICBzdGF0aWMgY29u c3QgaW50IG1pbl9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9u ZW50MTAgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDA7CiAgICAg IHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOwoKICAgICAgc3RhdGljIGNvbnN0 IGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19x dWlldF9OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19O YU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVu b3JtID0gZGVub3JtX2Fic2VudDsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9s b3NzID0gZmFsc2U7CgogICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBpbmZpbml0eSgpIHRocm93 KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4oMCk7IH0KICAgICAg c3RhdGljIHVuc2lnbmVkIGxvbmcgcXVpZXRfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiBz dGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPigwKTsgfQogICAgICBzdGF0aWMgdW5zaWduZWQgbG9u ZyBzaWduYWxpbmdfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNp Z25lZCBsb25nPigwKTsgfQogICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBkZW5vcm1fbWluKCkg dGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPigwKTsgfQoK ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5ID0gdHJ1ZTsKICAgICAgc3RhdGljIGNv bnN0IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX21v ZHVsbyA9IHRydWU7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IHRydWU7CiAgICAg IHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOwogICAgICBzdGF0aWMg Y29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSByb3VuZF90b3dhcmRfemVybzsK ICAgIH07CgoKCgoKCiAgdGVtcGxhdGU8PgogICAgc3RydWN0IG51bWVyaWNfbGltaXRzPGxvbmcg bG9uZz4KICAgIHsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVl OwoKICAgICAgc3RhdGljIGxvbmcgbG9uZyBtaW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuICgt OTIyMzM3MjAzNjg1NDc3NTgwN0xMIC0gMSk7IH0KICAgICAgc3RhdGljIGxvbmcgbG9uZyBtYXgo KSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDkyMjMzNzIwMzY4NTQ3NzU4MDdMTDsgfQoKICAgICAg c3RhdGljIGNvbnN0IGludCBkaWdpdHMgPSA2MzsKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdp dHMxMCA9IDE4OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zaWduZWQgPSB0cnVlOwogICAg ICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0 IGJvb2wgaXNfZXhhY3QgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMjsK ICAgICAgc3RhdGljIGxvbmcgbG9uZyBlcHNpbG9uKCkgdGhyb3coKQogICAgICB7IHJldHVybiAw OyB9CiAgICAgIHN0YXRpYyBsb25nIGxvbmcgcm91bmRfZXJyb3IoKSB0aHJvdygpCiAgICAgIHsg cmV0dXJuIDA7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50ID0gMDsKICAg ICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9IDA7CiAgICAgIHN0YXRpYyBjb25z dCBpbnQgbWF4X2V4cG9uZW50ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25l bnQxMCA9IDA7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxzZTsK ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNlOwogICAgICBzdGF0 aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29u c3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1fYWJzZW50OwogICAgICBz dGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3MgPSBmYWxzZTsKCiAgICAgIHN0YXRpYyBs b25nIGxvbmcgaW5maW5pdHkoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGxv bmcgbG9uZz4oMCk7IH0KICAgICAgc3RhdGljIGxvbmcgbG9uZyBxdWlldF9OYU4oKSB0aHJvdygp CiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGxvbmcgbG9uZz4oMCk7IH0KICAgICAgc3RhdGlj IGxvbmcgbG9uZyBzaWduYWxpbmdfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNf Y2FzdDxsb25nIGxvbmc+KDApOyB9CiAgICAgIHN0YXRpYyBsb25nIGxvbmcgZGVub3JtX21pbigp IHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8bG9uZyBsb25nPigwKTsgfQoKICAg ICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5ID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0 IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX21vZHVs byA9IHRydWU7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IHRydWU7CiAgICAgIHN0 YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29u c3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSByb3VuZF90b3dhcmRfemVybzsKICAg IH07CiMgMTYzNCAiL3Vzci9jeWdudXMvYmluLy4uL2luY2x1ZGUvYysrLzMuMS4xL2xpbWl0cyIg MwogIHRlbXBsYXRlPD4KICAgIHN0cnVjdCBudW1lcmljX2xpbWl0czx1bnNpZ25lZCBsb25nIGxv bmc+CiAgICB7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsK CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgbWluKCkgdGhyb3coKQogICAgICB7IHJl dHVybiAwOyB9CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgbWF4KCkgdGhyb3coKQog ICAgICB7IHJldHVybiAoOTIyMzM3MjAzNjg1NDc3NTgwN0xMICogMlVMTCArIDEpOyB9CgogICAg ICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IDY0OwogICAgICBzdGF0aWMgY29uc3QgaW50IGRp Z2l0czEwID0gMTk7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IGZhbHNlOwog ICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0gdHJ1ZTsKICAgICAgc3RhdGljIGNv bnN0IGJvb2wgaXNfZXhhY3QgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0g MjsKICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyBlcHNpbG9uKCkgdGhyb3coKQogICAg ICB7IHJldHVybiAwOyB9CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgcm91bmRfZXJy b3IoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQg bWluX2V4cG9uZW50ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9 IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMDsKICAgICAgc3RhdGlj IGNvbnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDA7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBo YXNfaW5maW5pdHkgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05h TiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGZh bHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPSBk ZW5vcm1fYWJzZW50OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3MgPSBm YWxzZTsKCiAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgaW5maW5pdHkoKSB0aHJvdygp CiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4oMCk7IH0KICAg ICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyBxdWlldF9OYU4oKSB0aHJvdygpCiAgICAgIHsg cmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4oMCk7IH0KICAgICAgc3RhdGlj IHVuc2lnbmVkIGxvbmcgbG9uZyBzaWduYWxpbmdfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVy biBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+KDApOyB9CiAgICAgIHN0YXRpYyB1bnNp Z25lZCBsb25nIGxvbmcgZGVub3JtX21pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGlj X2Nhc3Q8dW5zaWduZWQgbG9uZyBsb25nPigwKTsgfQoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wg aXNfaWVjNTU5ID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IHRy dWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX21vZHVsbyA9IHRydWU7CgogICAgICBzdGF0 aWMgY29uc3QgYm9vbCB0cmFwcyA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnlu ZXNzX2JlZm9yZSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUg cm91bmRfc3R5bGUgPSByb3VuZF90b3dhcmRfemVybzsKICAgIH07CgoKCgoKCiAgdGVtcGxhdGU8 PgogICAgc3RydWN0IG51bWVyaWNfbGltaXRzPGZsb2F0PgogICAgewogICAgICBzdGF0aWMgY29u c3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRydWU7CgogICAgICBzdGF0aWMgZmxvYXQgbWluKCkg dGhyb3coKQogICAgICB7IHJldHVybiAxLjE3NTQ5NDM1ZS0zOEY7IH0KICAgICAgc3RhdGljIGZs b2F0IG1heCgpIHRocm93KCkKICAgICAgeyByZXR1cm4gMy40MDI4MjM0N2UrMzhGOyB9CgogICAg ICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IDI0OwogICAgICBzdGF0aWMgY29uc3QgaW50IGRp Z2l0czEwID0gNjsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gdHJ1ZTsKICAg ICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IGZhbHNlOwogICAgICBzdGF0aWMgY29u c3QgYm9vbCBpc19leGFjdCA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0g MjsKICAgICAgc3RhdGljIGZsb2F0IGVwc2lsb24oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDEu MTkyMDkyOTBlLTA3RjsgfQogICAgICBzdGF0aWMgZmxvYXQgcm91bmRfZXJyb3IoKSB0aHJvdygp CiAgICAgIHsgcmV0dXJuIDEuMEY7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9u ZW50ID0gLTEyNTsKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9IC0zNzsK ICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSAxMjg7CiAgICAgIHN0YXRpYyBj b25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAzODsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhh c19pbmZpbml0eSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFO ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFs c2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRl bm9ybV9hYnNlbnQ7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZh bHNlOwoKICAgICAgc3RhdGljIGZsb2F0IGluZmluaXR5KCkgdGhyb3coKQogICAgICB7IHJldHVy biAwLjBGOyB9CiAgICAgIHN0YXRpYyBmbG9hdCBxdWlldF9OYU4oKSB0aHJvdygpCiAgICAgIHsg cmV0dXJuIDAuMEY7IH0KICAgICAgc3RhdGljIGZsb2F0IHNpZ25hbGluZ19OYU4oKSB0aHJvdygp CiAgICAgIHsgcmV0dXJuIDAuMEY7IH0KICAgICAgc3RhdGljIGZsb2F0IGRlbm9ybV9taW4oKSB0 aHJvdygpCiAgICAgIHsgcmV0dXJuIDAuMEY7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlz X2llYzU1OSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1 ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gZmFsc2U7CgogICAgICBzdGF0 aWMgY29uc3QgYm9vbCB0cmFwcyA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55 bmVzc19iZWZvcmUgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxl IHJvdW5kX3N0eWxlID0gcm91bmRfdG93YXJkX3plcm87CiAgICB9OwojIDE3NjUgIi91c3IvY3ln bnVzL2Jpbi8uLi9pbmNsdWRlL2MrKy8zLjEuMS9saW1pdHMiIDMKICB0ZW1wbGF0ZTw+CiAgICBz dHJ1Y3QgbnVtZXJpY19saW1pdHM8ZG91YmxlPgogICAgewogICAgICBzdGF0aWMgY29uc3QgYm9v bCBpc19zcGVjaWFsaXplZCA9IHRydWU7CgogICAgICBzdGF0aWMgZG91YmxlIG1pbigpIHRocm93 KCkKICAgICAgeyByZXR1cm4gMi4yMjUwNzM4NTg1MDcyMDE0ZS0zMDg7IH0KICAgICAgc3RhdGlj IGRvdWJsZSBtYXgoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDEuNzk3NjkzMTM0ODYyMzE1N2Ur MzA4OyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IDUzOwogICAgICBzdGF0aWMg Y29uc3QgaW50IGRpZ2l0czEwID0gMTU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25l ZCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIgPSBmYWxzZTsKICAg ICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0 IGludCByYWRpeCA9IDI7CiAgICAgIHN0YXRpYyBkb3VibGUgZXBzaWxvbigpIHRocm93KCkKICAg ICAgeyByZXR1cm4gMi4yMjA0NDYwNDkyNTAzMTMxZS0xNjsgfQogICAgICBzdGF0aWMgZG91Ymxl IHJvdW5kX2Vycm9yKCkgdGhyb3coKQogICAgICB7IHJldHVybiAxLjA7IH0KCiAgICAgIHN0YXRp YyBjb25zdCBpbnQgbWluX2V4cG9uZW50ID0gLTEwMjE7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQg bWluX2V4cG9uZW50MTAgPSAtMzA3OwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVu dCA9IDEwMjQ7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAzMDg7Cgog ICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxzZTsKICAgICAgc3RhdGlj IGNvbnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9v bCBoYXNfc2lnbmFsaW5nX05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVu b3JtX3N0eWxlIGhhc19kZW5vcm0gPQogICAgICAgICAgICAgIGRlbm9ybV9hYnNlbnQ7CiAgICAg IHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOwoKICAgICAgc3RhdGlj IGRvdWJsZSBpbmZpbml0eSgpIHRocm93KCkKICAgICAgeyByZXR1cm4gMC4wOyB9CiAgICAgIHN0 YXRpYyBkb3VibGUgcXVpZXRfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwLjA7IH0KICAg ICAgc3RhdGljIGRvdWJsZSBzaWduYWxpbmdfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiAw LjA7IH0KICAgICAgc3RhdGljIGRvdWJsZSBkZW5vcm1fbWluKCkgdGhyb3coKQogICAgICB7IHJl dHVybiAwLjA7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IGZhbHNlOwog ICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNv bnN0IGJvb2wgaXNfbW9kdWxvID0gZmFsc2U7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0cmFw cyA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxz ZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxlID0KICAg ICAgICAgICAgICByb3VuZF90b3dhcmRfemVybzsKICAgIH07CiMgMTg0NCAiL3Vzci9jeWdudXMv YmluLy4uL2luY2x1ZGUvYysrLzMuMS4xL2xpbWl0cyIgMwogIHRlbXBsYXRlPD4KICAgIHN0cnVj dCBudW1lcmljX2xpbWl0czxsb25nIGRvdWJsZT4KICAgIHsKICAgICAgc3RhdGljIGNvbnN0IGJv b2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOwoKICAgICAgc3RhdGljIGxvbmcgZG91YmxlIG1pbigp IHRocm93KCkKICAgICAgeyByZXR1cm4gMy4zNjIxMDMxNDMxMTIwOTM1MDYyNmUtNDkzMkw7IH0K ICAgICAgc3RhdGljIGxvbmcgZG91YmxlIG1heCgpIHRocm93KCkKICAgICAgeyByZXR1cm4gMS4x ODk3MzE0OTUzNTcyMzE3NjUwMmUrNDkzMkw7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGln aXRzID0gNjQ7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSAxODsKICAgICAgc3Rh dGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wg aXNfaW50ZWdlciA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IGZh bHNlOwogICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMjsKICAgICAgc3RhdGljIGxvbmcg ZG91YmxlIGVwc2lsb24oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDEuMDg0MjAyMTcyNDg1NTA0 NDM0MDFlLTE5TDsgfQogICAgICBzdGF0aWMgbG9uZyBkb3VibGUgcm91bmRfZXJyb3IoKSB0aHJv dygpCiAgICAgIHsgcmV0dXJuIDEuMEw7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4 cG9uZW50ID0gLTE2MzgxOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0g LTQ5MzE7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMTYzODQ7CiAgICAg IHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSA0OTMyOwoKICAgICAgc3RhdGljIGNv bnN0IGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhh c19xdWlldF9OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGlu Z19OYU4gPQogICAgICAgICAgICAgICAgZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9k ZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9CiAgICAgICAgICAgICAgICBkZW5vcm1fYWJzZW50Owog ICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3MgPQogICAgICAgICAgICAgICAg ZmFsc2U7CgogICAgICBzdGF0aWMgbG9uZyBkb3VibGUgaW5maW5pdHkoKSB0aHJvdygpCiAgICAg IHsgcmV0dXJuIDAuMEw7IH0KICAgICAgc3RhdGljIGxvbmcgZG91YmxlIHF1aWV0X05hTigpIHRo cm93KCkKICAgICAgeyByZXR1cm4gMC4wTDsgfQogICAgICBzdGF0aWMgbG9uZyBkb3VibGUgc2ln bmFsaW5nX05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMC4wTDsgfQogICAgICBzdGF0aWMg bG9uZyBkb3VibGUgZGVub3JtX21pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMC4wTDsgfQoK ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBj b25zdCBib29sIGlzX2JvdW5kZWQgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19t b2R1bG8gPSBmYWxzZTsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gZmFsc2U7CiAg ICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOwogICAgICBzdGF0 aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPQogICAgICAgIHJvdW5kX3Rv d2FyZF96ZXJvOwogICAgfTsKIyAxOTI0ICIvdXNyL2N5Z251cy9iaW4vLi4vaW5jbHVkZS9jKysv My4xLjEvbGltaXRzIiAzCn0KIyA0NCAiL3Vzci9jeWdudXMvYmluLy4uL2luY2x1ZGUvYysrLzMu MS4xL2JpdHMvbG9jYWxlX2ZhY2V0cy50Y2MiIDIgMwoKIyAxICIvdXNyL2N5Z251cy9iaW4vLi4v aW5jbHVkZS9jKysvMy4xLjEvdHlwZWluZm8iIDEgMwojIDQwICIvdXNyL2N5Z251cy9iaW4vLi4v aW5jbHVkZS9jKysvMy4xLjEvdHlwZWluZm8iIDMKZXh0ZXJuICJDKysiIHsKCm5hbWVzcGFjZSBf X2N4eGFiaXYxCnsKICBjbGFzcyBfX2NsYXNzX3R5cGVfaW5mbzsKfQojIDU1ICIvdXNyL2N5Z251 cy9iaW4vLi4vaW5jbHVkZS9jKysvMy4xLjEvdHlwZWluZm8iIDMKbmFtZXNwYWNlIHN0ZAp7CgoK CiAgY2xhc3MgdHlwZV9pbmZvCiAgewogIHB1YmxpYzoKCgoKCiAgICB2aXJ0dWFsIH50eXBlX2lu Zm8oKTsKCiAgcHJpdmF0ZToKCiAgICB0eXBlX2luZm8mIG9wZXJhdG9yPShjb25zdCB0eXBlX2lu Zm8mKTsKICAgIHR5cGVfaW5mbyhjb25zdCB0eXBlX2luZm8mKTsKCiAgcHJvdGVjdGVkOgogICAg Y29uc3QgY2hhciAqX19uYW1lOwoKICBwcm90ZWN0ZWQ6CiAgICBleHBsaWNpdCB0eXBlX2luZm8o Y29uc3QgY2hhciAqX19uKTogX19uYW1lKF9fbikgeyB9CgogIHB1YmxpYzoKCgoKICAgIGNvbnN0 IGNoYXIqIG5hbWUoKSBjb25zdAogICAgeyByZXR1cm4gX19uYW1lOyB9CiMgOTggIi91c3IvY3ln bnVzL2Jpbi8uLi9pbmNsdWRlL2MrKy8zLjEuMS90eXBlaW5mbyIgMwogICAgYm9vbCBiZWZvcmUo Y29uc3QgdHlwZV9pbmZvJiBfX2FyZykgY29uc3QKICAgIHsgcmV0dXJuIF9fbmFtZSA8IF9fYXJn Ll9fbmFtZTsgfQogICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IHR5cGVfaW5mbyYgX19hcmcpIGNv bnN0CiAgICB7IHJldHVybiBfX25hbWUgPT0gX19hcmcuX19uYW1lOyB9CgogICAgYm9vbCBvcGVy YXRvciE9KGNvbnN0IHR5cGVfaW5mbyYgX19hcmcpIGNvbnN0CiAgICB7IHJldHVybiAhb3BlcmF0 b3I9PShfX2FyZyk7IH0KCgogIHB1YmxpYzoKCiAgICB2aXJ0dWFsIGJvb2wgX19pc19wb2ludGVy X3AoKSBjb25zdDsKCiAgICB2aXJ0dWFsIGJvb2wgX19pc19mdW5jdGlvbl9wKCkgY29uc3Q7CgoK CgoKCgogICAgdmlydHVhbCBib29sIF9fZG9fY2F0Y2goY29uc3QgdHlwZV9pbmZvICpfX3Rocl90 eXBlLCB2b2lkICoqX190aHJfb2JqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWdu ZWQgX19vdXRlcikgY29uc3Q7CgoKICAgIHZpcnR1YWwgYm9vbCBfX2RvX3VwY2FzdChjb25zdCBf X2N4eGFiaXYxOjpfX2NsYXNzX3R5cGVfaW5mbyAqX190YXJnZXQsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgdm9pZCAqKl9fb2JqX3B0cikgY29uc3Q7CiAgfTsKCgoKICBjbGFzcyBiYWRf Y2FzdCA6IHB1YmxpYyBleGNlcHRpb24KICB7CiAgcHVibGljOgogICAgYmFkX2Nhc3QoKSB0aHJv dygpIHsgfQoKCiAgICB2aXJ0dWFsIH5iYWRfY2FzdCgpIHRocm93KCk7CiAgfTsKCgogIGNsYXNz IGJhZF90eXBlaWQgOiBwdWJsaWMgZXhjZXB0aW9uCiAgewogIHB1YmxpYzoKICAgIGJhZF90eXBl aWQgKCkgdGhyb3coKSB7IH0KCgogICAgdmlydHVhbCB+YmFkX3R5cGVpZCgpIHRocm93KCk7CiAg fTsKfQoKfQojIDQ2ICIvdXNyL2N5Z251cy9iaW4vLi4vaW5jbHVkZS9jKysvMy4xLjEvYml0cy9s b2NhbGVfZmFjZXRzLnRjYyIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfRmFjZXQ+CiAgICBsb2NhbGUKICAgIGxvY2FsZTo6Y29tYmluZShjb25zdCBsb2NhbGUmIF9f b3RoZXIpIGNvbnN0CiAgICB7CiAgICAgIF9JbXBsKiBfX3RtcCA9IG5ldyBfSW1wbCgqX01faW1w bCwgMSk7CiAgICAgIF9fdG1wLT5fTV9yZXBsYWNlX2ZhY2V0KF9fb3RoZXIuX01faW1wbCwgJl9G YWNldDo6aWQpOwogICAgICByZXR1cm4gbG9jYWxlKF9fdG1wKTsKICAgIH0KCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBi b29sCiAgICBsb2NhbGU6Om9wZXJhdG9yKCkoY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1Ry YWl0cywgX0FsbG9jPiYgX19zMSwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBiYXNpY19z dHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3MyKSBjb25zdAogICAgewogICAgICB0 eXBlZGVmIHN0ZDo6Y29sbGF0ZTxfQ2hhclQ+IF9fY29sbGF0ZV90eXBlOwogICAgICBjb25zdCBf X2NvbGxhdGVfdHlwZSYgX19jb2xsYXRlID0gdXNlX2ZhY2V0PF9fY29sbGF0ZV90eXBlPigqdGhp cyk7CiAgICAgIHJldHVybiAoX19jb2xsYXRlLmNvbXBhcmUoX19zMS5kYXRhKCksIF9fczEuZGF0 YSgpICsgX19zMS5sZW5ndGgoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3My LmRhdGEoKSwgX19zMi5kYXRhKCkgKyBfX3MyLmxlbmd0aCgpKSA8IDApOwogICAgfQoKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfRmFjZXQ+CiAgICBjb25zdCBfRmFjZXQmCiAgICB1c2VfZmFjZXQoY29u c3QgbG9jYWxlJiBfX2xvYykKICAgIHsKICAgICAgc2l6ZV90IF9faSA9IF9GYWNldDo6aWQuX01f aWQoKTsKICAgICAgbG9jYWxlOjpmYWNldCoqIF9fZmFjZXRzID0gX19sb2MuX01faW1wbC0+X01f ZmFjZXRzOwogICAgICBpZiAoIShfX2kgPCBfX2xvYy5fTV9pbXBsLT5fTV9mYWNldHNfc2l6ZSAm JiBfX2ZhY2V0c1tfX2ldKSkKICAgICAgICBfX3Rocm93X2JhZF9jYXN0KCk7CiAgICAgIHJldHVy biBzdGF0aWNfY2FzdDxjb25zdCBfRmFjZXQmPigqX19mYWNldHNbX19pXSk7CiAgICB9CgogIHRl bXBsYXRlPHR5cGVuYW1lIF9GYWNldD4KICAgIGJvb2wKICAgIGhhc19mYWNldChjb25zdCBsb2Nh bGUmIF9fbG9jKSB0aHJvdygpCiAgICB7CiAgICAgIHNpemVfdCBfX2kgPSBfRmFjZXQ6OmlkLl9N X2lkKCk7CiAgICAgIGxvY2FsZTo6ZmFjZXQqKiBfX2ZhY2V0cyA9IF9fbG9jLl9NX2ltcGwtPl9N X2ZhY2V0czsKICAgICAgcmV0dXJuIChfX2kgPCBfX2xvYy5fTV9pbXBsLT5fTV9mYWNldHNfc2l6 ZSAmJiBfX2ZhY2V0c1tfX2ldKTsKICAgIH0KCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs IHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBfSW5JdGVyCiAgICBudW1fZ2V0PF9DaGFyVCwgX0luSXRl cj46OgogICAgX01fZXh0cmFjdF9mbG9hdChfSW5JdGVyIF9fYmVnLCBfSW5JdGVyIF9fZW5kLCBp b3NfYmFzZSYgX19pbywKICAgICAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9f ZXJyLCBzdHJpbmcmIF9feHRyYykgY29uc3QKICAgIHsKICAgICAgY29uc3QgbG9jYWxlIF9fbG9j ID0gX19pby5nZXRsb2MoKTsKICAgICAgY29uc3QgY3R5cGU8X0NoYXJUPiYgX19jdHlwZSA9IHVz ZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpOwogICAgICBjb25zdCBudW1wdW5jdDxfQ2hh clQ+JiBfX25wID0gdXNlX2ZhY2V0PG51bXB1bmN0PF9DaGFyVD4gPihfX2xvYyk7CgoKICAgICAg Y29uc3QgY2hhcl90eXBlIF9fcGx1cyA9IF9fY3R5cGUud2lkZW4oJysnKTsKICAgICAgY29uc3Qg Y2hhcl90eXBlIF9fbWludXMgPSBfX2N0eXBlLndpZGVuKCctJyk7CiAgICAgIGludCBfX3BvcyA9 IDA7CiAgICAgIGNoYXJfdHlwZSBfX2MgPSAqX19iZWc7CiAgICAgIGlmICgoX19jID09IF9fcGx1 cyB8fCBfX2MgPT0gX19taW51cykgJiYgX19iZWcgIT0gX19lbmQpCiAgICAgICAgewogICAgICAg ICAgX194dHJjICs9IF9fY3R5cGUubmFycm93KF9fYywgY2hhcigpKTsKICAgICAgICAgICsrX19w b3M7CiAgICAgICAgICBfX2MgPSAqKCsrX19iZWcpOwogICAgICAgIH0KCgogICAgICBjb25zdCBj aGFyX3R5cGUgX196ZXJvID0gX19jdHlwZS53aWRlbihfU19hdG9tc1tfTV96ZXJvXSk7CiAgICAg IGJvb2wgX19mb3VuZF96ZXJvID0gZmFsc2U7CiAgICAgIHdoaWxlIChfX2MgPT0gX196ZXJvICYm IF9fYmVnICE9IF9fZW5kKQogICAgICAgIHsKICAgICAgICAgIF9fYyA9ICooKytfX2JlZyk7CiAg ICAgICAgICBfX2ZvdW5kX3plcm8gPSB0cnVlOwogICAgICAgIH0KICAgICAgaWYgKF9fZm91bmRf emVybykKICAgICAgICB7CiAgICAgICAgICBfX3h0cmMgKz0gX1NfYXRvbXNbX01femVyb107CiAg ICAgICAgICArK19fcG9zOwogICAgICAgIH0KCgogICAgICBjb25zdCBzaXplX3QgX19sZW4gPSBf TV9FIC0gX01femVybyArIDE7CiAgICAgIGNoYXJfdHlwZSBfX3dhdG9tc1tfX2xlbl07CiAgICAg IF9fY3R5cGUud2lkZW4oX1NfYXRvbXMsIF9TX2F0b21zICsgX19sZW4sIF9fd2F0b21zKTsKICAg ICAgYm9vbCBfX2ZvdW5kX2RlYyA9IGZhbHNlOwogICAgICBib29sIF9fZm91bmRfc2NpID0gZmFs c2U7CiAgICAgIGNvbnN0IGNoYXJfdHlwZSBfX2RlYyA9IF9fbnAuZGVjaW1hbF9wb2ludCgpOwoK ICAgICAgc3RyaW5nIF9fZm91bmRfZ3JvdXBpbmc7CiAgICAgIGNvbnN0IHN0cmluZyBfX2dyb3Vw aW5nID0gX19ucC5ncm91cGluZygpOwogICAgICBib29sIF9fY2hlY2tfZ3JvdXBpbmcgPSBfX2dy b3VwaW5nLnNpemUoKTsKICAgICAgaW50IF9fc2VwX3BvcyA9IDA7CiAgICAgIGNvbnN0IGNoYXJf dHlwZSBfX3NlcCA9IF9fbnAudGhvdXNhbmRzX3NlcCgpOwoKICAgICAgd2hpbGUgKF9fYmVnICE9 IF9fZW5kKQogICAgICAgIHsKCiAgICAgICAgICB0eXBlZGVmIGNoYXJfdHJhaXRzPF9DaGFyVD4g X190cmFpdHNfdHlwZTsKICAgICAgICAgIGNvbnN0IGNoYXJfdHlwZSogX19wID0gX190cmFpdHNf dHlwZTo6ZmluZChfX3dhdG9tcywgMTAsIF9fYyk7CgoKICAgICAgICAgIGlmIChfX3AgJiYgX19j KQogICAgICAgICAgICB7CgogICAgICAgICAgICAgICsrX19wb3M7CiAgICAgICAgICAgICAgX194 dHJjICs9IF9TX2F0b21zW19fcCAtIF9fd2F0b21zXTsKICAgICAgICAgICAgICArK19fc2VwX3Bv czsKICAgICAgICAgICAgICBfX2MgPSAqKCsrX19iZWcpOwogICAgICAgICAgICB9CiAgICAgICAg ICBlbHNlIGlmIChfX2MgPT0gX19zZXAgJiYgX19jaGVja19ncm91cGluZyAmJiAhX19mb3VuZF9k ZWMpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIGlmIChfX3NlcF9wb3MpCiAgICAgICAg ICAgICAgICB7CiAgICAgICAgICAgICAgICAgIF9fZm91bmRfZ3JvdXBpbmcgKz0gc3RhdGljX2Nh c3Q8Y2hhcj4oX19zZXBfcG9zKTsKICAgICAgICAgICAgICAgICAgX19zZXBfcG9zID0gMDsKICAg ICAgICAgICAgICAgICAgX19jID0gKigrK19fYmVnKTsKICAgICAgICAgICAgICAgIH0KICAgICAg ICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIF9fZXJyIHw9 IGlvc19iYXNlOjpmYWlsYml0OwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg ICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgZWxzZSBpZiAoX19jID09IF9fZGVjICYmICFf X2ZvdW5kX2RlYykKICAgICAgICAgICAgewoKCgogICAgICAgICAgICAgIGlmIChfX2ZvdW5kX2dy b3VwaW5nLnNpemUoKSkKICAgICAgICAgICAgICAgIF9fZm91bmRfZ3JvdXBpbmcgKz0gc3RhdGlj X2Nhc3Q8Y2hhcj4oX19zZXBfcG9zKTsKICAgICAgICAgICAgICArK19fcG9zOwogICAgICAgICAg ICAgIF9feHRyYyArPSAnLic7CiAgICAgICAgICAgICAgX19jID0gKigrK19fYmVnKTsKICAgICAg ICAgICAgICBfX2ZvdW5kX2RlYyA9IHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICAgIGVsc2Ug aWYgKChfX2MgPT0gX193YXRvbXNbX01fZV0gfHwgX19jID09IF9fd2F0b21zW19NX0VdKQogICAg ICAgICAgICAgICAgICAgJiYgIV9fZm91bmRfc2NpICYmIF9fcG9zKQogICAgICAgICAgICB7Cgog ICAgICAgICAgICAgICsrX19wb3M7CiAgICAgICAgICAgICAgX194dHJjICs9IF9fY3R5cGUubmFy cm93KF9fYywgY2hhcigpKTsKICAgICAgICAgICAgICBfX2MgPSAqKCsrX19iZWcpOwoKCiAgICAg ICAgICAgICAgaWYgKF9fYyA9PSBfX3BsdXMgfHwgX19jID09IF9fbWludXMpCiAgICAgICAgICAg ICAgICB7CiAgICAgICAgICAgICAgICAgICsrX19wb3M7CiAgICAgICAgICAgICAgICAgIF9feHRy YyArPSBfX2N0eXBlLm5hcnJvdyhfX2MsIGNoYXIoKSk7CiAgICAgICAgICAgICAgICAgIF9fYyA9 ICooKytfX2JlZyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgX19mb3VuZF9zY2kg PSB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgICBlbHNlCgogICAgICAgICAgICBicmVhazsK ICAgICAgICB9CgoKCiAgICAgIGlmIChfX2NoZWNrX2dyb3VwaW5nICYmIF9fZm91bmRfZ3JvdXBp bmcuc2l6ZSgpKQogICAgICAgIHsKCiAgICAgICAgICBpZiAoIV9fZm91bmRfZGVjKQogICAgICAg ICAgICBfX2ZvdW5kX2dyb3VwaW5nICs9IHN0YXRpY19jYXN0PGNoYXI+KF9fc2VwX3Bvcyk7CiAg ICAgICAgICBpZiAoIV9fdmVyaWZ5X2dyb3VwaW5nKF9fZ3JvdXBpbmcsIF9fZm91bmRfZ3JvdXBp bmcpKQogICAgICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKICAgICAgICB9CgoK ICAgICAgX194dHJjICs9IGNoYXIoKTsKICAgICAgaWYgKF9fYmVnID09IF9fZW5kKQogICAgICAg IF9fZXJyIHw9IGlvc19iYXNlOjplb2ZiaXQ7CiAgICAgIHJldHVybiBfX2JlZzsKICAgIH0KCgog IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIK ICAgIG51bV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBfTV9leHRyYWN0X2ludChfSW5JdGVy IF9fYmVnLCBfSW5JdGVyIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICAgICAgICAg IGlvc19iYXNlOjppb3N0YXRlJiBfX2Vyciwgc3RyaW5nJiBfX3h0cmMsIGludCYgX19iYXNlKSBj b25zdAogICAgewogICAgICBjb25zdCBsb2NhbGUgX19sb2MgPSBfX2lvLmdldGxvYygpOwogICAg ICBjb25zdCBjdHlwZTxfQ2hhclQ+JiBfX2N0eXBlID0gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4g PihfX2xvYyk7CiAgICAgIGNvbnN0IG51bXB1bmN0PF9DaGFyVD4mIF9fbnAgPSB1c2VfZmFjZXQ8 bnVtcHVuY3Q8X0NoYXJUPiA+KF9fbG9jKTsKCgogICAgICBpb3NfYmFzZTo6Zm10ZmxhZ3MgX19i YXNlZmllbGQgPSBfX2lvLmZsYWdzKCkgJiBpb3NfYmFzZTo6YmFzZWZpZWxkOwogICAgICBpZiAo X19iYXNlZmllbGQgPT0gaW9zX2Jhc2U6Om9jdCkKICAgICAgICBfX2Jhc2UgPSA4OwogICAgICBl bHNlIGlmIChfX2Jhc2VmaWVsZCA9PSBpb3NfYmFzZTo6aGV4KQogICAgICAgIF9fYmFzZSA9IDE2 OwogICAgICBlbHNlCiAgICAgICAgX19iYXNlID0gMTA7CgoKICAgICAgaW50IF9fcG9zID0gMDsK ICAgICAgY2hhcl90eXBlIF9fYyA9ICpfX2JlZzsKICAgICAgaWYgKChfX2MgPT0gX19jdHlwZS53 aWRlbignKycpIHx8IF9fYyA9PSBfX2N0eXBlLndpZGVuKCctJykpCiAgICAgICAgICAmJiBfX2Jl ZyAhPSBfX2VuZCkKICAgICAgICB7CiAgICAgICAgICBfX3h0cmMgKz0gX19jdHlwZS5uYXJyb3co X19jLCBjaGFyKCkpOwogICAgICAgICAgKytfX3BvczsKICAgICAgICAgIF9fYyA9ICooKytfX2Jl Zyk7CiAgICAgICAgfQoKCiAgICAgIGNvbnN0IGNoYXJfdHlwZSBfX3plcm8gPSBfX2N0eXBlLndp ZGVuKF9TX2F0b21zW19NX3plcm9dKTsKICAgICAgY29uc3QgY2hhcl90eXBlIF9feCA9IF9fY3R5 cGUud2lkZW4oJ3gnKTsKICAgICAgY29uc3QgY2hhcl90eXBlIF9fWCA9IF9fY3R5cGUud2lkZW4o J1gnKTsKICAgICAgaWYgKF9fYmFzZSA9PSAxMCkKICAgICAgICB7CiAgICAgICAgICBib29sIF9f Zm91bmRfemVybyA9IGZhbHNlOwogICAgICAgICAgd2hpbGUgKF9fYyA9PSBfX3plcm8gJiYgX19i ZWcgIT0gX19lbmQpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfX2MgPSAqKCsrX19iZWcp OwogICAgICAgICAgICAgIF9fZm91bmRfemVybyA9IHRydWU7CiAgICAgICAgICAgIH0KICAgICAg ICAgIGlmIChfX2ZvdW5kX3plcm8pCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfX3h0cmMg Kz0gX1NfYXRvbXNbX01femVyb107CiAgICAgICAgICAgICAgKytfX3BvczsKICAgICAgICAgICAg ICBpZiAoX19iYXNlZmllbGQgPT0gMCkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg ICAgaWYgKChfX2MgPT0gX194IHx8IF9fYyA9PSBfX1gpICYmIF9fYmVnICE9IF9fZW5kKQogICAg ICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgIF9feHRyYyArPSBfX2N0eXBl Lm5hcnJvdyhfX2MsIGNoYXIoKSk7CiAgICAgICAgICAgICAgICAgICAgICArK19fcG9zOwogICAg ICAgICAgICAgICAgICAgICAgX19jID0gKigrK19fYmVnKTsKICAgICAgICAgICAgICAgICAgICAg IF9fYmFzZSA9IDE2OwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgZWxz ZQogICAgICAgICAgICAgICAgICAgIF9fYmFzZSA9IDg7CiAgICAgICAgICAgICAgICB9CiAgICAg ICAgICAgIH0KICAgICAgICB9CiAgICAgIGVsc2UgaWYgKF9fYmFzZSA9PSAxNikKICAgICAgICB7 CiAgICAgICAgICBpZiAoX19jID09IF9femVybyAmJiBfX2JlZyAhPSBfX2VuZCkKICAgICAgICAg ICAgewogICAgICAgICAgICAgIF9feHRyYyArPSBfU19hdG9tc1tfTV96ZXJvXTsKICAgICAgICAg ICAgICArK19fcG9zOwogICAgICAgICAgICAgIF9fYyA9ICooKytfX2JlZyk7CiAgICAgICAgICAg ICAgaWYgKChfX2MgPT0gX194IHx8IF9fYyA9PSBfX1gpICYmIF9fYmVnICE9IF9fZW5kKQogICAg ICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBfX3h0cmMgKz0gX19jdHlwZS5uYXJyb3co X19jLCBjaGFyKCkpOwogICAgICAgICAgICAgICAgICArK19fcG9zOwogICAgICAgICAgICAgICAg ICBfX2MgPSAqKCsrX19iZWcpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAg ICAgfQoKCgogICAgICBzaXplX3QgX19sZW47CiAgICAgIGlmIChfX2Jhc2UgPT0gMTYpCiAgICAg ICAgX19sZW4gPSBfTV9zaXplOwogICAgICBlbHNlCiAgICAgICAgX19sZW4gPSBfX2Jhc2U7CgoK ICAgICAgY2hhcl90eXBlIF9fd2F0b21zW19NX3NpemVdOwogICAgICBfX2N0eXBlLndpZGVuKF9T X2F0b21zLCBfU19hdG9tcyArIF9fbGVuLCBfX3dhdG9tcyk7CiAgICAgIHN0cmluZyBfX2ZvdW5k X2dyb3VwaW5nOwogICAgICBjb25zdCBzdHJpbmcgX19ncm91cGluZyA9IF9fbnAuZ3JvdXBpbmco KTsKICAgICAgYm9vbCBfX2NoZWNrX2dyb3VwaW5nID0gX19ncm91cGluZy5zaXplKCk7CiAgICAg IGludCBfX3NlcF9wb3MgPSAwOwogICAgICBjb25zdCBjaGFyX3R5cGUgX19zZXAgPSBfX25wLnRo b3VzYW5kc19zZXAoKTsKICAgICAgd2hpbGUgKF9fYmVnICE9IF9fZW5kKQogICAgICAgIHsKICAg ICAgICAgIHR5cGVkZWYgY2hhcl90cmFpdHM8X0NoYXJUPiBfX3RyYWl0c190eXBlOwogICAgICAg ICAgY29uc3QgY2hhcl90eXBlKiBfX3AgPSBfX3RyYWl0c190eXBlOjpmaW5kKF9fd2F0b21zLCBf X2xlbiwgX19jKTsKCgogICAgICAgICAgaWYgKF9fcCAmJiBfX2MpCiAgICAgICAgICAgIHsKCiAg ICAgICAgICAgICAgX194dHJjICs9IF9TX2F0b21zW19fcCAtIF9fd2F0b21zXTsKICAgICAgICAg ICAgICArK19fcG9zOwogICAgICAgICAgICAgICsrX19zZXBfcG9zOwogICAgICAgICAgICAgIF9f YyA9ICooKytfX2JlZyk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGVsc2UgaWYgKF9fYyA9PSBf X3NlcCAmJiBfX2NoZWNrX2dyb3VwaW5nKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICBp ZiAoX19zZXBfcG9zKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBfX2ZvdW5k X2dyb3VwaW5nICs9IHN0YXRpY19jYXN0PGNoYXI+KF9fc2VwX3Bvcyk7CiAgICAgICAgICAgICAg ICAgIF9fc2VwX3BvcyA9IDA7CiAgICAgICAgICAgICAgICAgIF9fYyA9ICooKytfX2JlZyk7CiAg ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgewogICAg ICAgICAgICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKICAgICAgICAgICAgICAg ICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIGVsc2UK CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KCgoKICAgICAgaWYgKF9fY2hlY2tfZ3JvdXBp bmcgJiYgX19mb3VuZF9ncm91cGluZy5zaXplKCkpCiAgICAgICAgewoKICAgICAgICAgIF9fZm91 bmRfZ3JvdXBpbmcgKz0gc3RhdGljX2Nhc3Q8Y2hhcj4oX19zZXBfcG9zKTsKICAgICAgICAgIGlm ICghX192ZXJpZnlfZ3JvdXBpbmcoX19ncm91cGluZywgX19mb3VuZF9ncm91cGluZykpCiAgICAg ICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwogICAgICAgIH0KCgogICAgICBfX3h0 cmMgKz0gY2hhcigpOwogICAgICBpZiAoX19iZWcgPT0gX19lbmQpCiAgICAgICAgX19lcnIgfD0g aW9zX2Jhc2U6OmVvZmJpdDsKICAgICAgcmV0dXJuIF9fYmVnOwogICAgfQoKCgogIHRlbXBsYXRl PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIKICAgIG51bV9n ZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBkb19nZXQoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5 cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBf X2VyciwgYm9vbCYgX192KSBjb25zdAogICAgewoKICAgICAgaWYgKCEoX19pby5mbGFncygpICYg aW9zX2Jhc2U6OmJvb2xhbHBoYSkpCiAgICAgICAgewoKCiAgICAgICAgICBzdHJpbmcgX194dHJj OwogICAgICAgICAgaW50IF9fYmFzZTsKICAgICAgICAgIF9fYmVnID0gX01fZXh0cmFjdF9pbnQo X19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX194dHJjLCBfX2Jhc2UpOwoKICAgICAgICAgIHVu c2lnbmVkIGxvbmcgX191bDsKICAgICAgICAgIF9fY29udmVydF90b192KF9feHRyYy5jX3N0cigp LCBfX3VsLCBfX2VyciwgX1NfY19sb2NhbGUsIF9fYmFzZSk7CiAgICAgICAgICBpZiAoIShfX2Vy ciAmIGlvc19iYXNlOjpmYWlsYml0KSAmJiBfX3VsIDw9IDEpCiAgICAgICAgICAgIF9fdiA9IF9f dWw7CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0 OwogICAgICAgIH0KCgogICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgdHlwZWRlZiBiYXNp Y19zdHJpbmc8X0NoYXJUPiBfX3N0cmluZ190eXBlOwogICAgICAgICAgbG9jYWxlIF9fbG9jID0g X19pby5nZXRsb2MoKTsKICAgICAgICAgIGNvbnN0IG51bXB1bmN0PF9DaGFyVD4mIF9fbnAgPSB1 c2VfZmFjZXQ8bnVtcHVuY3Q8X0NoYXJUPiA+KF9fbG9jKTsKICAgICAgICAgIGNvbnN0IF9fc3Ry aW5nX3R5cGUgX190cnVlID0gX19ucC50cnVlbmFtZSgpOwogICAgICAgICAgY29uc3QgX19zdHJp bmdfdHlwZSBfX2ZhbHNlID0gX19ucC5mYWxzZW5hbWUoKTsKICAgICAgICAgIGNvbnN0IGNoYXJf dHlwZSogX190cnVlcyA9IF9fdHJ1ZS5jX3N0cigpOwogICAgICAgICAgY29uc3QgY2hhcl90eXBl KiBfX2ZhbHNlcyA9IF9fZmFsc2UuY19zdHIoKTsKICAgICAgICAgIGNvbnN0IHNpemVfdCBfX3Ry dWVuID0gX190cnVlLnNpemUoKSAtIDE7CiAgICAgICAgICBjb25zdCBzaXplX3QgX19mYWxzZW4g PSBfX2ZhbHNlLnNpemUoKSAtIDE7CgogICAgICAgICAgZm9yIChzaXplX3QgX19uID0gMDsgX19i ZWcgIT0gX19lbmQ7ICsrX19uKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgY2hhcl90eXBl IF9fYyA9ICpfX2JlZysrOwogICAgICAgICAgICAgIGJvb2wgX190ZXN0ZiA9IF9fbiA8PSBfX2Zh bHNlbiA/IF9fYyA9PSBfX2ZhbHNlc1tfX25dIDogZmFsc2U7CiAgICAgICAgICAgICAgYm9vbCBf X3Rlc3R0ID0gX19uIDw9IF9fdHJ1ZW4gPyBfX2MgPT0gX190cnVlc1tfX25dIDogZmFsc2U7CiAg ICAgICAgICAgICAgaWYgKCEoX190ZXN0ZiB8fCBfX3Rlc3R0KSkKICAgICAgICAgICAgICAgIHsK ICAgICAgICAgICAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CiAgICAgICAgICAg ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGVsc2UgaWYgKF9f dGVzdGYgJiYgX19uID09IF9fZmFsc2VuKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAg ICAgICBfX3YgPSAwOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0K ICAgICAgICAgICAgICBlbHNlIGlmIChfX3Rlc3R0ICYmIF9fbiA9PSBfX3RydWVuKQogICAgICAg ICAgICAgICAgewogICAgICAgICAgICAgICAgICBfX3YgPSAxOwogICAgICAgICAgICAgICAgICBi cmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgaWYgKF9fYmVn ID09IF9fZW5kKQogICAgICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZW9mYml0OwogICAgICAg IH0KICAgICAgcmV0dXJuIF9fYmVnOwogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU LCB0eXBlbmFtZSBfSW5JdGVyPgogICAgX0luSXRlcgogICAgbnVtX2dldDxfQ2hhclQsIF9Jbkl0 ZXI+OjoKICAgIGRvX2dldChpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jh c2UmIF9faW8sCiAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBsb25nJiBfX3Yp IGNvbnN0CiAgICB7CiAgICAgIHN0cmluZyBfX3h0cmM7CiAgICAgIGludCBfX2Jhc2U7CiAgICAg IF9fYmVnID0gX01fZXh0cmFjdF9pbnQoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX194dHJj LCBfX2Jhc2UpOwogICAgICBfX2NvbnZlcnRfdG9fdihfX3h0cmMuY19zdHIoKSwgX192LCBfX2Vy ciwgX1NfY19sb2NhbGUsIF9fYmFzZSk7CiAgICAgIHJldHVybiBfX2JlZzsKICAgIH0KCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgX0luSXRlcgogICAg bnVtX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAgIGRvX2dldChpdGVyX3R5cGUgX19iZWcsIGl0 ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3Rh dGUmIF9fZXJyLCB1bnNpZ25lZCBzaG9ydCYgX192KSBjb25zdAogICAgewogICAgICBzdHJpbmcg X194dHJjOwogICAgICBpbnQgX19iYXNlOwogICAgICBfX2JlZyA9IF9NX2V4dHJhY3RfaW50KF9f YmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9feHRyYywgX19iYXNlKTsKICAgICAgdW5zaWduZWQg bG9uZyBfX3VsOwogICAgICBfX2NvbnZlcnRfdG9fdihfX3h0cmMuY19zdHIoKSwgX191bCwgX19l cnIsIF9TX2NfbG9jYWxlLCBfX2Jhc2UpOwogICAgICBpZiAoIShfX2VyciAmIGlvc19iYXNlOjpm YWlsYml0KQogICAgICAgICAgJiYgX191bCA8PSBudW1lcmljX2xpbWl0czx1bnNpZ25lZCBzaG9y dD46Om1heCgpKQogICAgICAgIF9fdiA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0PihfX3Vs KTsKICAgICAgZWxzZQogICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwogICAgICBy ZXR1cm4gX19iZWc7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg X0luSXRlcj4KICAgIF9Jbkl0ZXIKICAgIG51bV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBk b19nZXQoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAog ICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdW5zaWduZWQgaW50JiBfX3YpIGNv bnN0CiAgICB7CiAgICAgIHN0cmluZyBfX3h0cmM7CiAgICAgIGludCBfX2Jhc2U7CiAgICAgIF9f YmVnID0gX01fZXh0cmFjdF9pbnQoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX194dHJjLCBf X2Jhc2UpOwogICAgICB1bnNpZ25lZCBsb25nIF9fdWw7CiAgICAgIF9fY29udmVydF90b192KF9f eHRyYy5jX3N0cigpLCBfX3VsLCBfX2VyciwgX1NfY19sb2NhbGUsIF9fYmFzZSk7CiAgICAgIGlm ICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQpCiAgICAgICAgICAmJiBfX3VsIDw9IG51bWVy aWNfbGltaXRzPHVuc2lnbmVkIGludD46Om1heCgpKQogICAgICAgIF9fdiA9IHN0YXRpY19jYXN0 PHVuc2lnbmVkIGludD4oX191bCk7CiAgICAgIGVsc2UKICAgICAgICBfX2VyciB8PSBpb3NfYmFz ZTo6ZmFpbGJpdDsKICAgICAgcmV0dXJuIF9fYmVnOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBfSW5JdGVyCiAgICBudW1fZ2V0PF9DaGFy VCwgX0luSXRlcj46OgogICAgZG9fZ2V0KGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5k LCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHVu c2lnbmVkIGxvbmcmIF9fdikgY29uc3QKICAgIHsKICAgICAgc3RyaW5nIF9feHRyYzsKICAgICAg aW50IF9fYmFzZTsKICAgICAgX19iZWcgPSBfTV9leHRyYWN0X2ludChfX2JlZywgX19lbmQsIF9f aW8sIF9fZXJyLCBfX3h0cmMsIF9fYmFzZSk7CiAgICAgIF9fY29udmVydF90b192KF9feHRyYy5j X3N0cigpLCBfX3YsIF9fZXJyLCBfU19jX2xvY2FsZSwgX19iYXNlKTsKICAgICAgcmV0dXJuIF9f YmVnOwogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVy PgogICAgX0luSXRlcgogICAgbnVtX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAgIGRvX2dldChp dGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAg ICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBsb25nIGxvbmcmIF9fdikgY29uc3QKICAgIHsK ICAgICAgc3RyaW5nIF9feHRyYzsKICAgICAgaW50IF9fYmFzZTsKICAgICAgX19iZWcgPSBfTV9l eHRyYWN0X2ludChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3h0cmMsIF9fYmFzZSk7CiAg ICAgIF9fY29udmVydF90b192KF9feHRyYy5jX3N0cigpLCBfX3YsIF9fZXJyLCBfU19jX2xvY2Fs ZSwgX19iYXNlKTsKICAgICAgcmV0dXJuIF9fYmVnOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBfSW5JdGVyCiAgICBudW1fZ2V0PF9DaGFy VCwgX0luSXRlcj46OgogICAgZG9fZ2V0KGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5k LCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHVu c2lnbmVkIGxvbmcgbG9uZyYgX192KSBjb25zdAogICAgewogICAgICBzdHJpbmcgX194dHJjOwog ICAgICBpbnQgX19iYXNlOwogICAgICBfX2JlZyA9IF9NX2V4dHJhY3RfaW50KF9fYmVnLCBfX2Vu ZCwgX19pbywgX19lcnIsIF9feHRyYywgX19iYXNlKTsKICAgICAgX19jb252ZXJ0X3RvX3YoX194 dHJjLmNfc3RyKCksIF9fdiwgX19lcnIsIF9TX2NfbG9jYWxlLCBfX2Jhc2UpOwogICAgICByZXR1 cm4gX19iZWc7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9J bkl0ZXI+CiAgICBfSW5JdGVyCiAgICBudW1fZ2V0PF9DaGFyVCwgX0luSXRlcj46OgogICAgZG9f Z2V0KGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAg ICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGZsb2F0JiBfX3YpIGNvbnN0CiAgICB7 CiAgICAgIHN0cmluZyBfX3h0cmM7CiAgICAgIF9feHRyYy5yZXNlcnZlKDMyKTsKICAgICAgX19i ZWcgPSBfTV9leHRyYWN0X2Zsb2F0KF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9feHRyYyk7 CiAgICAgIF9fY29udmVydF90b192KF9feHRyYy5jX3N0cigpLCBfX3YsIF9fZXJyLCBfU19jX2xv Y2FsZSk7CiAgICAgIHJldHVybiBfX2JlZzsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No YXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgX0luSXRlcgogICAgbnVtX2dldDxfQ2hhclQsIF9J bkl0ZXI+OjoKICAgIGRvX2dldChpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9z X2Jhc2UmIF9faW8sCiAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBkb3VibGUm IF9fdikgY29uc3QKICAgIHsKICAgICAgc3RyaW5nIF9feHRyYzsKICAgICAgX194dHJjLnJlc2Vy dmUoMzIpOwogICAgICBfX2JlZyA9IF9NX2V4dHJhY3RfZmxvYXQoX19iZWcsIF9fZW5kLCBfX2lv LCBfX2VyciwgX194dHJjKTsKICAgICAgX19jb252ZXJ0X3RvX3YoX194dHJjLmNfc3RyKCksIF9f diwgX19lcnIsIF9TX2NfbG9jYWxlKTsKICAgICAgcmV0dXJuIF9fYmVnOwogICAgfQoKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBfSW5JdGVyCiAgICBu dW1fZ2V0PF9DaGFyVCwgX0luSXRlcj46OgogICAgZG9fZ2V0KGl0ZXJfdHlwZSBfX2JlZywgaXRl cl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0 ZSYgX19lcnIsIGxvbmcgZG91YmxlJiBfX3YpIGNvbnN0CiAgICB7CiAgICAgIHN0cmluZyBfX3h0 cmM7CiAgICAgIF9feHRyYy5yZXNlcnZlKDMyKTsKICAgICAgX19iZWcgPSBfTV9leHRyYWN0X2Zs b2F0KF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9feHRyYyk7CiAgICAgIF9fY29udmVydF90 b192KF9feHRyYy5jX3N0cigpLCBfX3YsIF9fZXJyLCBfU19jX2xvY2FsZSk7CiAgICAgIHJldHVy biBfX2JlZzsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5J dGVyPgogICAgX0luSXRlcgogICAgbnVtX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAgIGRvX2dl dChpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAg ICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB2b2lkKiYgX192KSBjb25zdAogICAgewoK ICAgICAgdHlwZWRlZiBpb3NfYmFzZTo6Zm10ZmxhZ3MgZm10ZmxhZ3M7CiAgICAgIGZtdGZsYWdz IF9fZm10ID0gX19pby5mbGFncygpOwogICAgICBmbXRmbGFncyBfX2ZtdG1hc2sgPSB+KGlvc19i YXNlOjpzaG93cG9zIHwgaW9zX2Jhc2U6OmJhc2VmaWVsZAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHwgaW9zX2Jhc2U6OnVwcGVyY2FzZSB8IGlvc19iYXNlOjppbnRlcm5hbCk7CiAgICAg IF9faW8uZmxhZ3MoX19mbXQgJiBfX2ZtdG1hc2sgfCAoaW9zX2Jhc2U6OmhleCB8IGlvc19iYXNl OjpzaG93YmFzZSkpOwoKICAgICAgc3RyaW5nIF9feHRyYzsKICAgICAgaW50IF9fYmFzZTsKICAg ICAgX19iZWcgPSBfTV9leHRyYWN0X2ludChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3h0 cmMsIF9fYmFzZSk7CgoKICAgICAgX19pby5mbGFncyhfX2ZtdCk7CgogICAgICB1bnNpZ25lZCBs b25nIF9fdWw7CiAgICAgIF9fY29udmVydF90b192KF9feHRyYy5jX3N0cigpLCBfX3VsLCBfX2Vy ciwgX1NfY19sb2NhbGUsIF9fYmFzZSk7CiAgICAgIGlmICghKF9fZXJyICYgaW9zX2Jhc2U6OmZh aWxiaXQpKQogICAgICAgIF9fdiA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KF9fdWwpOwogICAg ICBlbHNlCiAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CiAgICAgIHJldHVybiBf X2JlZzsKICAgIH0KIyA2MDQgIi91c3IvY3lnbnVzL2Jpbi8uLi9pbmNsdWRlL2MrKy8zLjEuMS9i aXRzL2xvY2FsZV9mYWNldHMudGNjIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl bmFtZSBfT3V0SXRlcj4KICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9WYWx1ZVQ+CiAgICAgIF9PdXRJ dGVyCiAgICAgIG51bV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OgogICAgICBfTV9jb252ZXJ0X2Zs b2F0KF9PdXRJdGVyIF9fcywgaW9zX2Jhc2UmIF9faW8sIF9DaGFyVCBfX2ZpbGwsIGNoYXIgX19t b2QsCiAgICAgICAgICAgICAgICAgICAgICAgX1ZhbHVlVCBfX3YpIGNvbnN0CiAgICAgIHsKCgog ICAgICAgIGNvbnN0IGludCBfX21heF9kaWdpdHMgPSBudW1lcmljX2xpbWl0czxfVmFsdWVUPjo6 ZGlnaXRzMTAgKyAxOwogICAgICAgIHN0cmVhbXNpemUgX19wcmVjID0gX19pby5wcmVjaXNpb24o KTsKCiAgICAgICAgaWYgKF9fcHJlYyA+IHN0YXRpY19jYXN0PHN0cmVhbXNpemU+KF9fbWF4X2Rp Z2l0cykpCiAgICAgICAgICBfX3ByZWMgPSBzdGF0aWNfY2FzdDxzdHJlYW1zaXplPihfX21heF9k aWdpdHMpOwoKCiAgICAgICAgY2hhciBfX2ZidWZbMTZdOwoKCiAgICAgICAgaW50IF9fbGVuOwoK CgogICAgICAgIGludCBfX2NzX3NpemUgPSBfX21heF9kaWdpdHMgKiAzOwogICAgICAgIGNoYXIq IF9fY3MgPSBzdGF0aWNfY2FzdDxjaGFyKj4oX19idWlsdGluX2FsbG9jYShfX2NzX3NpemUpKTsK CiAgICAgICAgY29uc3QgYm9vbCBfX2ZwID0gX1NfZm9ybWF0X2Zsb2F0KF9faW8sIF9fZmJ1Ziwg X19tb2QsIF9fcHJlYyk7CiAgICAgICAgaWYgKF9fZnApCiAgICAgICAgICBfX2xlbiA9IF9fY29u dmVydF9mcm9tX3YoX19jcywgX19jc19zaXplLCBfX2ZidWYsIF9fdiwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBfU19jX2xvY2FsZSwgX19wcmVjKTsKICAgICAgICBlbHNlCiAg ICAgICAgICBfX2xlbiA9IF9fY29udmVydF9mcm9tX3YoX19jcywgX19jc19zaXplLCBfX2ZidWYs IF9fdiwgX1NfY19sb2NhbGUpOwoKCiAgICAgICAgaWYgKF9fbGVuID49IF9fY3Nfc2l6ZSkKICAg ICAgICAgIHsKICAgICAgICAgICAgX19jc19zaXplID0gX19sZW4gKyAxOwogICAgICAgICAgICBf X2NzID0gc3RhdGljX2Nhc3Q8Y2hhcio+KF9fYnVpbHRpbl9hbGxvY2EoX19jc19zaXplKSk7CiAg ICAgICAgICAgIGlmIChfX2ZwKQogICAgICAgICAgICAgIF9fbGVuID0gX19jb252ZXJ0X2Zyb21f dihfX2NzLCBfX2NzX3NpemUsIF9fZmJ1ZiwgX192LAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBfU19jX2xvY2FsZSwgX19wcmVjKTsKICAgICAgICAgICAgZWxzZQogICAg ICAgICAgICAgIF9fbGVuID0gX19jb252ZXJ0X2Zyb21fdihfX2NzLCBfX2NzX3NpemUsIF9fZmJ1 ZiwgX192LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfU19jX2xvY2Fs ZSk7CiAgICAgICAgICB9CiMgNjY3ICIvdXNyL2N5Z251cy9iaW4vLi4vaW5jbHVkZS9jKysvMy4x LjEvYml0cy9sb2NhbGVfZmFjZXRzLnRjYyIgMwogICAgICAgIHJldHVybiBfTV93aWRlbl9mbG9h dChfX3MsIF9faW8sIF9fZmlsbCwgX19jcywgX19sZW4pOwogICAgICB9CgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBf VmFsdWVUPgogICAgICBfT3V0SXRlcgogICAgICBudW1fcHV0PF9DaGFyVCwgX091dEl0ZXI+OjoK ICAgICAgX01fY29udmVydF9pbnQoX091dEl0ZXIgX19zLCBpb3NfYmFzZSYgX19pbywgX0NoYXJU IF9fZmlsbCwgY2hhciBfX21vZCwKICAgICAgICAgICAgICAgICAgICAgY2hhciBfX21vZGwsIF9W YWx1ZVQgX192KSBjb25zdAogICAgICB7CgoKCiAgICAgICAgY2hhciBfX2ZidWZbMTZdOwogICAg ICAgIF9TX2Zvcm1hdF9pbnQoX19pbywgX19mYnVmLCBfX21vZCwgX19tb2RsKTsKCgogICAgICAg IGludCBfX2NzX3NpemUgPSA2NDsKICAgICAgICBjaGFyKiBfX2NzID0gc3RhdGljX2Nhc3Q8Y2hh cio+KF9fYnVpbHRpbl9hbGxvY2EoX19jc19zaXplKSk7CiAgICAgICAgaW50IF9fbGVuID0gX19j b252ZXJ0X2Zyb21fdihfX2NzLCBfX2NzX3NpemUsIF9fZmJ1ZiwgX192LAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgX1NfY19sb2NhbGUpOwoKICAgICAgICBpZiAoX19sZW4g Pj0gX19jc19zaXplKQogICAgICAgICAgewogICAgICAgICAgICBfX2NzX3NpemUgPSBfX2xlbiAr IDE7CiAgICAgICAgICAgIF9fY3MgPSBzdGF0aWNfY2FzdDxjaGFyKj4oX19idWlsdGluX2FsbG9j YShfX2NzX3NpemUpKTsKICAgICAgICAgICAgX19sZW4gPSBfX2NvbnZlcnRfZnJvbV92KF9fY3Ms IF9fY3Nfc2l6ZSwgX19mYnVmLCBfX3YsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBfU19jX2xvY2FsZSk7CiAgICAgICAgICB9CgoKCgoKCiAgICAgICAgcmV0dXJuIF9NX3dp ZGVuX2ludChfX3MsIF9faW8sIF9fZmlsbCwgX19jcywgX19sZW4pOwogICAgICB9CgogIHRlbXBs YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBfT3V0SXRlcgogICAg bnVtX3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6CiAgICBfTV93aWRlbl9mbG9hdChfT3V0SXRlciBf X3MsIGlvc19iYXNlJiBfX2lvLCBfQ2hhclQgX19maWxsLCBjaGFyKiBfX2NzLAogICAgICAgICAg ICAgICAgICAgaW50IF9fbGVuKSBjb25zdAogICAgewoKCiAgICAgIGNvbnN0IGxvY2FsZSBfX2xv YyA9IF9faW8uZ2V0bG9jKCk7CiAgICAgIGNvbnN0IGN0eXBlPF9DaGFyVD4mIF9fY3R5cGUgPSB1 c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKTsKICAgICAgX0NoYXJUKiBfX3dzID0gc3Rh dGljX2Nhc3Q8X0NoYXJUKj4oX19idWlsdGluX2FsbG9jYShzaXplb2YoX0NoYXJUKQogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogX19s ZW4pKTsKCgogICAgICBfQ2hhclQqIF9fd3MyID0gc3RhdGljX2Nhc3Q8X0NoYXJUKj4oX19idWls dGluX2FsbG9jYShzaXplb2YoX0NoYXJUKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIF9fbGVuICogMikpOwogICAgICBfX2N0eXBl LndpZGVuKF9fY3MsIF9fY3MgKyBfX2xlbiwgX193cyk7CgoKICAgICAgY29uc3QgX0NoYXJUKiBf X3A7CiAgICAgIGNvbnN0IG51bXB1bmN0PF9DaGFyVD4mIF9fbnAgPSB1c2VfZmFjZXQ8bnVtcHVu Y3Q8X0NoYXJUPiA+KF9fbG9jKTsKICAgICAgaWYgKF9fcCA9IGNoYXJfdHJhaXRzPF9DaGFyVD46 OmZpbmQoX193cywgX19sZW4sIF9fY3R5cGUud2lkZW4oJy4nKSkpCiAgICAgICAgX193c1tfX3Ag LSBfX3dzXSA9IF9fbnAuZGVjaW1hbF9wb2ludCgpOwoKCgoKICAgICAgY29uc3Qgc3RyaW5nIF9f Z3JvdXBpbmcgPSBfX25wLmdyb3VwaW5nKCk7CiAgICAgIGlvc19iYXNlOjpmbXRmbGFncyBfX2Jh c2VmaWVsZCA9IF9faW8uZmxhZ3MoKSAmIGlvc19iYXNlOjpiYXNlZmllbGQ7CiAgICAgIGlmIChf X2dyb3VwaW5nLnNpemUoKSkKICAgICAgICB7CiAgICAgICAgICBfQ2hhclQqIF9fcDI7CiAgICAg ICAgICBpbnQgX19kZWNsZW4gPSBfX3AgPyBfX3AgLSBfX3dzIDogX19sZW47CiAgICAgICAgICBf X3AyID0gX19hZGRfZ3JvdXBpbmcoX193czIsIF9fbnAudGhvdXNhbmRzX3NlcCgpLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIF9fZ3JvdXBpbmcuY19zdHIoKSwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBfX2dyb3VwaW5nLmNfc3RyKCkgKyBfX2dyb3VwaW5nLnNpemUo KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3dzLCBfX3dzICsgX19kZWNsZW4p OwogICAgICAgICAgaW50IF9fbmV3bGVuID0gX19wMiAtIF9fd3MyOwoKCiAgICAgICAgICBpZiAo X19wKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgY2hhcl90cmFpdHM8X0NoYXJUPjo6Y29w eShfX3AyLCBfX3AsIF9fbGVuIC0gX19kZWNsZW4pOwogICAgICAgICAgICAgIF9fbmV3bGVuICs9 IF9fbGVuIC0gX19kZWNsZW47CiAgICAgICAgICAgIH0KCgogICAgICAgICAgX193cyA9IF9fd3My OwogICAgICAgICAgX19sZW4gPSBfX25ld2xlbjsKICAgICAgICB9CgogICAgICByZXR1cm4gX01f aW5zZXJ0KF9fcywgX19pbywgX19maWxsLCBfX3dzLCBfX2xlbik7CiAgICB9CgogIHRlbXBsYXRl PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBfT3V0SXRlcgogICAgbnVt X3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6CiAgICBfTV93aWRlbl9pbnQoX091dEl0ZXIgX19zLCBp b3NfYmFzZSYgX19pbywgX0NoYXJUIF9fZmlsbCwgY2hhciogX19jcywKICAgICAgICAgICAgICAg ICBpbnQgX19sZW4pIGNvbnN0CiAgICB7CgoKICAgICAgY29uc3QgbG9jYWxlIF9fbG9jID0gX19p by5nZXRsb2MoKTsKICAgICAgY29uc3QgY3R5cGU8X0NoYXJUPiYgX19jdHlwZSA9IHVzZV9mYWNl dDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpOwogICAgICBfQ2hhclQqIF9fd3MgPSBzdGF0aWNfY2Fz dDxfQ2hhclQqPihfX2J1aWx0aW5fYWxsb2NhKHNpemVvZihfQ2hhclQpCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBfX2xlbikpOwoK CiAgICAgIF9DaGFyVCogX193czIgPSBzdGF0aWNfY2FzdDxfQ2hhclQqPihfX2J1aWx0aW5fYWxs b2NhKHNpemVvZihfQ2hhclQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICogX19sZW4gKiAyKSk7CiAgICAgIF9fY3R5cGUud2lkZW4o X19jcywgX19jcyArIF9fbGVuLCBfX3dzKTsKCgogICAgICBjb25zdCBudW1wdW5jdDxfQ2hhclQ+ JiBfX25wID0gdXNlX2ZhY2V0PG51bXB1bmN0PF9DaGFyVD4gPihfX2xvYyk7CiAgICAgIGNvbnN0 IHN0cmluZyBfX2dyb3VwaW5nID0gX19ucC5ncm91cGluZygpOwogICAgICBjb25zdCBpb3NfYmFz ZTo6Zm10ZmxhZ3MgX19iYXNlZmllbGQgPSBfX2lvLmZsYWdzKCkgJiBpb3NfYmFzZTo6YmFzZWZp ZWxkOwogICAgICBpZiAoX19ncm91cGluZy5zaXplKCkpCiAgICAgICAgewoKCgogICAgICAgICAg c3RyZWFtc2l6ZSBfX29mZiA9IDA7CiAgICAgICAgICBpZiAoX19pby5mbGFncygpICYgaW9zX2Jh c2U6OnNob3diYXNlKQogICAgICAgICAgICBpZiAoX19iYXNlZmllbGQgPT0gaW9zX2Jhc2U6Om9j dCkKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBfX29mZiA9IDE7CiAgICAgICAgICAg ICAgICAqX193czIgPSAqX193czsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgaWYg KF9fYmFzZWZpZWxkID09IGlvc19iYXNlOjpoZXgpCiAgICAgICAgICAgICAgewogICAgICAgICAg ICAgICAgX19vZmYgPSAyOwogICAgICAgICAgICAgICAgKl9fd3MyID0gKl9fd3M7CiAgICAgICAg ICAgICAgICAqKF9fd3MyICsgMSkgPSAqKF9fd3MgKyAxKTsKICAgICAgICAgICAgICB9CiAgICAg ICAgICBfQ2hhclQqIF9fcDsKICAgICAgICAgIF9fcCA9IF9fYWRkX2dyb3VwaW5nKF9fd3MyICsg X19vZmYsIF9fbnAudGhvdXNhbmRzX3NlcCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgX19ncm91cGluZy5jX3N0cigpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19n cm91cGluZy5jX3N0cigpICsgX19ncm91cGluZy5zaXplKCksCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBfX3dzICsgX19vZmYsIF9fd3MgKyBfX2xlbik7CiAgICAgICAgICBfX2xlbiA9 IF9fcCAtIF9fd3MyOwoKICAgICAgICAgIF9fd3MgPSBfX3dzMjsKICAgICAgICB9CiAgICAgIHJl dHVybiBfTV9pbnNlcnQoX19zLCBfX2lvLCBfX2ZpbGwsIF9fd3MsIF9fbGVuKTsKICAgIH0KCgoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgX091dEl0 ZXIKICAgIG51bV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OgogICAgX01faW5zZXJ0KF9PdXRJdGVy IF9fcywgaW9zX2Jhc2UmIF9faW8sIF9DaGFyVCBfX2ZpbGwsIGNvbnN0IF9DaGFyVCogX193cywK ICAgICAgICAgICAgICBpbnQgX19sZW4pIGNvbnN0CiAgICB7CgogICAgICBzdHJlYW1zaXplIF9f dyA9IF9faW8ud2lkdGgoKTsKICAgICAgX0NoYXJUKiBfX3dzMiA9IHN0YXRpY19jYXN0PF9DaGFy VCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKF9DaGFyVCkKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBfX3cpKTsKICAgICAgaWYg KF9fdyA+IHN0YXRpY19jYXN0PHN0cmVhbXNpemU+KF9fbGVuKSkKICAgICAgICB7CiAgICAgICAg ICBfX3BhZChfX2lvLCBfX2ZpbGwsIF9fd3MyLCBfX3dzLCBfX3csIF9fbGVuLCB0cnVlKTsKICAg ICAgICAgIF9fbGVuID0gc3RhdGljX2Nhc3Q8aW50PihfX3cpOwoKICAgICAgICAgIF9fd3MgPSBf X3dzMjsKICAgICAgICB9CiAgICAgIF9faW8ud2lkdGgoMCk7CgoKCiAgICAgIGZvciAoaW50IF9f aiA9IDA7IF9faiA8IF9fbGVuOyArK19faiwgKytfX3MpCiAgICAgICAgKl9fcyA9IF9fd3NbX19q XTsKICAgICAgcmV0dXJuIF9fczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0 eXBlbmFtZSBfT3V0SXRlcj4KICAgIF9PdXRJdGVyCiAgICBudW1fcHV0PF9DaGFyVCwgX091dEl0 ZXI+OjoKICAgIGRvX3B1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBl IF9fZmlsbCwgYm9vbCBfX3YpIGNvbnN0CiAgICB7CiAgICAgIGlvc19iYXNlOjpmbXRmbGFncyBf X2ZsYWdzID0gX19pby5mbGFncygpOwogICAgICBpZiAoKF9fZmxhZ3MgJiBpb3NfYmFzZTo6Ym9v bGFscGhhKSA9PSAwKQogICAgICAgIHsKICAgICAgICAgIHVuc2lnbmVkIGxvbmcgX191diA9IF9f djsKICAgICAgICAgIF9fcyA9IF9NX2NvbnZlcnRfaW50KF9fcywgX19pbywgX19maWxsLCAndScs IGNoYXJfdHlwZSgpLCBfX3V2KTsKICAgICAgICB9CiAgICAgIGVsc2UKICAgICAgICB7CiAgICAg ICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQ+IF9fc3RyaW5nX3R5cGU7CiAgICAgICAg ICBsb2NhbGUgX19sb2MgPSBfX2lvLmdldGxvYygpOwogICAgICAgICAgY29uc3QgbnVtcHVuY3Q8 X0NoYXJUPiYgX19ucCA9IHVzZV9mYWNldDxudW1wdW5jdDxfQ2hhclQ+ID4oX19sb2MpOwogICAg ICAgICAgX19zdHJpbmdfdHlwZSBfX25hbWU7CiAgICAgICAgICBpZiAoX192KQogICAgICAgICAg ICBfX25hbWUgPSBfX25wLnRydWVuYW1lKCk7CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIF9f bmFtZSA9IF9fbnAuZmFsc2VuYW1lKCk7CiAgICAgICAgICBfX3MgPSBfTV9pbnNlcnQoX19zLCBf X2lvLCBfX2ZpbGwsIF9fbmFtZS5jX3N0cigpLCBfX25hbWUuc2l6ZSgpKTsKICAgICAgICB9CiAg ICAgIHJldHVybiBfX3M7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h bWUgX091dEl0ZXI+CiAgICBfT3V0SXRlcgogICAgbnVtX3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6 CiAgICBkb19wdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2Zp bGwsIGxvbmcgX192KSBjb25zdAogICAgeyByZXR1cm4gX01fY29udmVydF9pbnQoX19zLCBfX2lv LCBfX2ZpbGwsICdkJywgY2hhcl90eXBlKCksIF9fdik7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg X0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIF9PdXRJdGVyCiAgICBudW1fcHV0PF9DaGFy VCwgX091dEl0ZXI+OjoKICAgIGRvX3B1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19pbywg Y2hhcl90eXBlIF9fZmlsbCwKICAgICAgICAgICB1bnNpZ25lZCBsb25nIF9fdikgY29uc3QKICAg IHsgcmV0dXJuIF9NX2NvbnZlcnRfaW50KF9fcywgX19pbywgX19maWxsLCAndScsIGNoYXJfdHlw ZSgpLCBfX3YpOyB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJ dGVyPgogICAgX091dEl0ZXIKICAgIG51bV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OgogICAgZG9f cHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2IsIGNoYXJfdHlwZSBfX2ZpbGwsIGxvbmcg bG9uZyBfX3YpIGNvbnN0CiAgICB7IHJldHVybiBfTV9jb252ZXJ0X2ludChfX3MsIF9fYiwgX19m aWxsLCAnZCcsICdsJywgX192KTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu YW1lIF9PdXRJdGVyPgogICAgX091dEl0ZXIKICAgIG51bV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46 OgogICAgZG9fcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUgX19m aWxsLAogICAgICAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBfX3YpIGNvbnN0CiAgICB7IHJldHVy biBfTV9jb252ZXJ0X2ludChfX3MsIF9faW8sIF9fZmlsbCwgJ3UnLCAnbCcsIF9fdik7IH0KCgog IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBfT3V0SXRl cgogICAgbnVtX3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6CiAgICBkb19wdXQoaXRlcl90eXBlIF9f cywgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsIGRvdWJsZSBfX3YpIGNvbnN0CiAg ICB7IHJldHVybiBfTV9jb252ZXJ0X2Zsb2F0KF9fcywgX19pbywgX19maWxsLCBjaGFyX3R5cGUo KSwgX192KTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVy PgogICAgX091dEl0ZXIKICAgIG51bV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OgogICAgZG9fcHV0 KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUgX19maWxsLAogICAgICAg ICAgIGxvbmcgZG91YmxlIF9fdikgY29uc3QKICAgIHsgcmV0dXJuIF9NX2NvbnZlcnRfZmxvYXQo X19zLCBfX2lvLCBfX2ZpbGwsICdMJywgX192KTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh clQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgX091dEl0ZXIKICAgIG51bV9wdXQ8X0NoYXJULCBf T3V0SXRlcj46OgogICAgZG9fcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2lvLCBjaGFy X3R5cGUgX19maWxsLAogICAgICAgICAgIGNvbnN0IHZvaWQqIF9fdikgY29uc3QKICAgIHsKICAg ICAgaW9zX2Jhc2U6OmZtdGZsYWdzIF9fZmxhZ3MgPSBfX2lvLmZsYWdzKCk7CiAgICAgIGlvc19i YXNlOjpmbXRmbGFncyBfX2ZtdCA9IH4oaW9zX2Jhc2U6OnNob3dwb3MgfCBpb3NfYmFzZTo6YmFz ZWZpZWxkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBpb3NfYmFzZTo6dXBw ZXJjYXNlIHwgaW9zX2Jhc2U6OmludGVybmFsKTsKICAgICAgX19pby5mbGFncyhfX2ZsYWdzICYg X19mbXQgfCAoaW9zX2Jhc2U6OmhleCB8IGlvc19iYXNlOjpzaG93YmFzZSkpOwogICAgICB0cnkK ICAgICAgICB7CiAgICAgICAgICBfX3MgPSBfTV9jb252ZXJ0X2ludChfX3MsIF9faW8sIF9fZmls bCwgJ3UnLCBjaGFyX3R5cGUoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlaW50 ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgbG9uZz4oX192KSk7CiAgICAgICAgICBfX2lvLmZsYWdzKF9f ZmxhZ3MpOwogICAgICAgIH0KICAgICAgY2F0Y2ggKC4uLikKICAgICAgICB7CiAgICAgICAgICBf X2lvLmZsYWdzKF9fZmxhZ3MpOwogICAgICAgICAgdGhyb3c7CiAgICAgICAgfQogICAgICByZXR1 cm4gX19zOwogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5J dGVyPgogICAgX0luSXRlcgogICAgbW9uZXlfZ2V0PF9DaGFyVCwgX0luSXRlcj46OgogICAgZG9f Z2V0KGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBib29sIF9faW50bCwgaW9zX2Jh c2UmIF9faW8sCiAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBsb25nIGRvdWJs ZSYgX191bml0cykgY29uc3QKICAgIHsKICAgICAgc3RyaW5nX3R5cGUgX19zdHI7CiAgICAgIF9f YmVnID0gdGhpcy0+ZG9fZ2V0KF9fYmVnLCBfX2VuZCwgX19pbnRsLCBfX2lvLCBfX2VyciwgX19z dHIpOwoKICAgICAgY29uc3QgaW50IF9fbiA9IG51bWVyaWNfbGltaXRzPGxvbmcgZG91YmxlPjo6 ZGlnaXRzMTA7CiAgICAgIGNoYXIqIF9fY3MgPSBzdGF0aWNfY2FzdDxjaGFyKj4oX19idWlsdGlu X2FsbG9jYShfX24pKTsKICAgICAgY29uc3QgbG9jYWxlIF9fbG9jID0gX19pby5nZXRsb2MoKTsK ICAgICAgY29uc3QgY3R5cGU8X0NoYXJUPiYgX19jdHlwZSA9IHVzZV9mYWNldDxjdHlwZTxfQ2hh clQ+ID4oX19sb2MpOwogICAgICBjb25zdCBfQ2hhclQqIF9fd2NzID0gX19zdHIuY19zdHIoKTsK ICAgICAgX19jdHlwZS5uYXJyb3coX193Y3MsIF9fd2NzICsgX19zdHIuc2l6ZSgpICsgMSwgY2hh cigpLCBfX2NzKTsKICAgICAgX19jb252ZXJ0X3RvX3YoX19jcywgX191bml0cywgX19lcnIsIF9T X2NfbG9jYWxlKTsKICAgICAgcmV0dXJuIF9fYmVnOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBfSW5JdGVyCiAgICBtb25leV9nZXQ8X0No YXJULCBfSW5JdGVyPjo6CiAgICBkb19nZXQoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19l bmQsIGJvb2wgX19pbnRsLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICBpb3NfYmFzZTo6aW9z dGF0ZSYgX19lcnIsIHN0cmluZ190eXBlJiBfX3VuaXRzKSBjb25zdAogICAgewoKICAgICAgdHlw ZWRlZiBtb25leXB1bmN0PF9DaGFyVCwgdHJ1ZT4gX19tb25leV90cnVlOwogICAgICB0eXBlZGVm IG1vbmV5cHVuY3Q8X0NoYXJULCBmYWxzZT4gX19tb25leV9mYWxzZTsKICAgICAgdHlwZWRlZiBt b25leV9iYXNlOjpwYXJ0IHBhcnQ7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgc3RyaW5nX3R5cGU6 OnNpemVfdHlwZSBzaXplX3R5cGU7CgogICAgICBjb25zdCBsb2NhbGUgX19sb2MgPSBfX2lvLmdl dGxvYygpOwogICAgICBjb25zdCBfX21vbmV5X3RydWUmIF9fbXB0ID0gdXNlX2ZhY2V0PF9fbW9u ZXlfdHJ1ZT4oX19sb2MpOwogICAgICBjb25zdCBfX21vbmV5X2ZhbHNlJiBfX21wZiA9IHVzZV9m YWNldDxfX21vbmV5X2ZhbHNlPihfX2xvYyk7CiAgICAgIGNvbnN0IGN0eXBlPF9DaGFyVD4mIF9f Y3R5cGUgPSB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKTsKCiAgICAgIGNvbnN0IG1v bmV5X2Jhc2U6OnBhdHRlcm4gX19wID0gX19pbnRsID8gX19tcHQubmVnX2Zvcm1hdCgpCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogX19tcGYubmVnX2Zvcm1h dCgpOwoKICAgICAgY29uc3Qgc3RyaW5nX3R5cGUgX19wb3Nfc2lnbiA9X19pbnRsID8gX19tcHQu cG9zaXRpdmVfc2lnbigpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICA6IF9fbXBmLnBvc2l0aXZlX3NpZ24oKTsKICAgICAgY29uc3Qgc3RyaW5nX3R5cGUgX19uZWdf c2lnbiA9X19pbnRsID8gX19tcHQubmVnYXRpdmVfc2lnbigpCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICA6IF9fbXBmLm5lZ2F0aXZlX3NpZ24oKTsKICAgICAgY29u c3QgY2hhcl90eXBlIF9fZCA9IF9faW50bCA/IF9fbXB0LmRlY2ltYWxfcG9pbnQoKQogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogX19tcGYuZGVjaW1hbF9wb2ludCgpOwogICAg ICBjb25zdCBjaGFyX3R5cGUgX19zZXAgPSBfX2ludGwgPyBfX21wdC50aG91c2FuZHNfc2VwKCkK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogX19tcGYudGhvdXNhbmRzX3Nl cCgpOwoKICAgICAgY29uc3Qgc3RyaW5nIF9fZ3JvdXBpbmcgPSBfX2ludGwgPyBfX21wdC5ncm91 cGluZygpIDogX19tcGYuZ3JvdXBpbmcoKTsKCgogICAgICBzdHJpbmdfdHlwZSBfX3NpZ247Cgog ICAgICBzdHJpbmcgX19ncm91cGluZ190bXA7CgogICAgICBpbnQgX19zZXBfcG9zID0gMDsKCiAg ICAgIGJvb2wgX190ZXN0dmFsaWQgPSB0cnVlOwoKICAgICAgYm9vbCBfX3Rlc3RkZWNmb3VuZCA9 IGZhbHNlOwoKCiAgICAgIHN0cmluZ190eXBlIF9fdGVtcF91bml0czsKCiAgICAgIGNoYXJfdHlw ZSBfX2MgPSAqX19iZWc7CiAgICAgIGNoYXJfdHlwZSBfX2VvZiA9IHN0YXRpY19jYXN0PGNoYXJf dHlwZT4oY2hhcl90cmFpdHM8Y2hhcl90eXBlPjo6ZW9mKCkpOwogICAgICBmb3IgKGludCBfX2kg PSAwOyBfX2JlZyAhPSBfX2VuZCAmJiBfX2kgPCA0ICYmIF9fdGVzdHZhbGlkOyArK19faSkKICAg ICAgICB7CiAgICAgICAgICBwYXJ0IF9fd2hpY2ggPSBzdGF0aWNfY2FzdDxwYXJ0PihfX3AuZmll bGRbX19pXSk7CiAgICAgICAgICBzd2l0Y2ggKF9fd2hpY2gpCiAgICAgICAgICAgICAgICB7CiAg ICAgICAgICAgICAgICBjYXNlIG1vbmV5X2Jhc2U6OnN5bWJvbDoKICAgICAgICAgICAgICAgICAg aWYgKF9faW8uZmxhZ3MoKSAmIGlvc19iYXNlOjpzaG93YmFzZQogICAgICAgICAgICAgICAgICAg ICAgfHwgX19pIDwgMiB8fCBfX3NpZ24uc2l6ZSgpID4gMQogICAgICAgICAgICAgICAgICAgICAg fHwgKChzdGF0aWNfY2FzdDxwYXJ0PihfX3AuZmllbGRbM10pICE9IG1vbmV5X2Jhc2U6Om5vbmUp CiAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgX19pID09IDIpKQogICAgICAgICAgICAgICAg ICAgIHsKCgoKCgogICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RyaW5nX3R5cGUgX19zeW1i b2wgPSBfX2ludGwgPyBfX21wdC5jdXJyX3N5bWJvbCgpCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogX19tcGYuY3Vycl9zeW1ib2woKTsK ICAgICAgICAgICAgICAgICAgICAgIHNpemVfdHlwZSBfX2xlbiA9IF9fc3ltYm9sLnNpemUoKTsK ICAgICAgICAgICAgICAgICAgICAgIHNpemVfdHlwZSBfX2ogPSAwOwogICAgICAgICAgICAgICAg ICAgICAgd2hpbGUgKF9fYmVnICE9IF9fZW5kCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg JiYgX19qIDwgX19sZW4gJiYgX19zeW1ib2xbX19qXSA9PSBfX2MpCiAgICAgICAgICAgICAgICAg ICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICBfX2MgPSAqKCsrX19iZWcpOwogICAg ICAgICAgICAgICAgICAgICAgICAgICsrX19qOwogICAgICAgICAgICAgICAgICAgICAgICB9CgoK ICAgICAgICAgICAgICAgICAgICAgIGlmIChfX2ogIT0gX19sZW4gJiYgKF9faW8uZmxhZ3MoKSAm IGlvc19iYXNlOjpzaG93YmFzZSkpCiAgICAgICAgICAgICAgICAgICAgICAgIF9fdGVzdHZhbGlk ID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBicmVhazsK ICAgICAgICAgICAgICAgIGNhc2UgbW9uZXlfYmFzZTo6c2lnbjoKCiAgICAgICAgICAgICAgICAg IGlmIChfX3Bvc19zaWduLnNpemUoKSAmJiBfX25lZ19zaWduLnNpemUoKSkKICAgICAgICAgICAg ICAgICAgewoKICAgICAgICAgICAgICAgICAgICBpZiAoX19jID09IF9fcG9zX3NpZ25bMF0pCiAg ICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIF9fc2lnbiA9IF9f cG9zX3NpZ247CiAgICAgICAgICAgICAgICAgICAgICAgIF9fYyA9ICooKytfX2JlZyk7CiAgICAg ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoX19jID09IF9f bmVnX3NpZ25bMF0pCiAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAg ICAgIF9fc2lnbiA9IF9fbmVnX3NpZ247CiAgICAgICAgICAgICAgICAgICAgICAgIF9fYyA9ICoo KytfX2JlZyk7CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZWxz ZQogICAgICAgICAgICAgICAgICAgICAgX190ZXN0dmFsaWQgPSBmYWxzZTsKICAgICAgICAgICAg ICAgICAgfQogICAgICAgICAgICAgICAgICBlbHNlIGlmIChfX3Bvc19zaWduLnNpemUoKSAmJiBf X2MgPT0gX19wb3Nfc2lnblswXSkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAg ICAgICAgICBfX3NpZ24gPSBfX3Bvc19zaWduOwogICAgICAgICAgICAgICAgICAgICAgX19jID0g KigrK19fYmVnKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGVsc2Ug aWYgKF9fbmVnX3NpZ24uc2l6ZSgpICYmIF9fYyA9PSBfX25lZ19zaWduWzBdKQogICAgICAgICAg ICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgIF9fc2lnbiA9IF9fbmVnX3NpZ247CiAg ICAgICAgICAgICAgICAgICAgICBfX2MgPSAqKCsrX19iZWcpOwogICAgICAgICAgICAgICAgICAg IH0KICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlIG1vbmV5X2Jh c2U6OnZhbHVlOgoKCiAgICAgICAgICAgICAgICAgIHdoaWxlIChfX2JlZyAhPSBfX2VuZAogICAg ICAgICAgICAgICAgICAgICAgICAgJiYgKF9fY3R5cGUuaXMoY3R5cGVfYmFzZTo6ZGlnaXQsIF9f YykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoX19jID09IF9fZCAmJiAhX190ZXN0 ZGVjZm91bmQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgX19jID09IF9fc2VwKSkK ICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICBpZiAoX19jID09IF9f ZCkKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgIF9f Z3JvdXBpbmdfdG1wICs9IHN0YXRpY19jYXN0PGNoYXI+KF9fc2VwX3Bvcyk7CiAgICAgICAgICAg ICAgICAgICAgICAgICAgX19zZXBfcG9zID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgICBf X3Rlc3RkZWNmb3VuZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg ICAgICAgICAgICAgIGVsc2UgaWYgKF9fYyA9PSBfX3NlcCkKICAgICAgICAgICAgICAgICAgICAg ICAgewogICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfX2dyb3VwaW5nLnNpemUoKSkKICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IF9fZ3JvdXBpbmdfdG1wICs9IHN0YXRpY19jYXN0PGNoYXI+KF9fc2VwX3Bvcyk7CiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIF9fc2VwX3BvcyA9IDA7CiAgICAgICAgICAgICAgICAgICAg ICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAg ICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Rlc3R2YWxpZCA9 IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg ICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAg ICAgICAgICAgX190ZW1wX3VuaXRzICs9IF9fYzsKICAgICAgICAgICAgICAgICAgICAgICAgICAr K19fc2VwX3BvczsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAg ICAgX19jID0gKigrK19fYmVnKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg ICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSBtb25leV9iYXNlOjpzcGFjZToKICAgICAg ICAgICAgICAgIGNhc2UgbW9uZXlfYmFzZTo6bm9uZToKCiAgICAgICAgICAgICAgICAgIGlmIChf X2kgIT0gMykKICAgICAgICAgICAgICAgICAgICB3aGlsZSAoX19iZWcgIT0gX19lbmQKICAgICAg ICAgICAgICAgICAgICAgICAgICAgJiYgX19jdHlwZS5pcyhjdHlwZV9iYXNlOjpzcGFjZSwgX19j KSkKICAgICAgICAgICAgICAgICAgICAgIF9fYyA9ICooKytfX2JlZyk7CiAgICAgICAgICAgICAg ICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgIH0KCgogICAgICBpZiAoX19zaWdu LnNpemUoKSA+IDEpCiAgICAgICAgewogICAgICAgICAgc2l6ZV90eXBlIF9fbGVuID0gX19zaWdu LnNpemUoKTsKICAgICAgICAgIHNpemVfdHlwZSBfX2kgPSAxOwogICAgICAgICAgZm9yICg7IF9f YyAhPSBfX2VvZiAmJiBfX2kgPCBfX2xlbjsgKytfX2kpCiAgICAgICAgICAgIHdoaWxlIChfX2Jl ZyAhPSBfX2VuZCAmJiBfX2MgIT0gX19zaWduW19faV0pCiAgICAgICAgICAgICAgX19jID0gKigr K19fYmVnKTsKCiAgICAgICAgICBpZiAoX19pICE9IF9fbGVuKQogICAgICAgICAgICBfX3Rlc3R2 YWxpZCA9IGZhbHNlOwogICAgICAgIH0KCgogICAgICB3aGlsZSAoX190ZW1wX3VuaXRzWzBdID09 IF9fY3R5cGUud2lkZW4oJzAnKSkKICAgICAgICBfX3RlbXBfdW5pdHMuZXJhc2UoX190ZW1wX3Vu aXRzLmJlZ2luKCkpOwoKICAgICAgaWYgKF9fc2lnbi5zaXplKCkgJiYgX19zaWduID09IF9fbmVn X3NpZ24pCiAgICAgICAgX190ZW1wX3VuaXRzLmluc2VydChfX3RlbXBfdW5pdHMuYmVnaW4oKSwg X19jdHlwZS53aWRlbignLScpKTsKCgogICAgICBpZiAoX19ncm91cGluZy5zaXplKCkgJiYgX19n cm91cGluZ190bXAuc2l6ZSgpKQogICAgICAgIHsKICAgICAgICAgIGlmICghX192ZXJpZnlfZ3Jv dXBpbmcoX19ncm91cGluZywgX19ncm91cGluZ190bXApKQogICAgICAgICAgICBfX3Rlc3R2YWxp ZCA9IGZhbHNlOwogICAgICAgIH0KCgogICAgICBpZiAoX19jID09IF9fZW9mKQogICAgICAgIF9f ZXJyIHw9IGlvc19iYXNlOjplb2ZiaXQ7CgoKICAgICAgaWYgKCFfX3Rlc3R2YWxpZCB8fCAhX190 ZW1wX3VuaXRzLnNpemUoKSkKICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKICAg ICAgZWxzZQoKICAgICAgICBfX3RlbXBfdW5pdHMuc3dhcChfX3VuaXRzKTsKCiAgICAgIHJldHVy biBfX2JlZzsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0 SXRlcj4KICAgIF9PdXRJdGVyCiAgICBtb25leV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OgogICAg ZG9fcHV0KGl0ZXJfdHlwZSBfX3MsIGJvb2wgX19pbnRsLCBpb3NfYmFzZSYgX19pbywgY2hhcl90 eXBlIF9fZmlsbCwKICAgICAgICAgICBsb25nIGRvdWJsZSBfX3VuaXRzKSBjb25zdAogICAgewog ICAgICBjb25zdCBsb2NhbGUgX19sb2MgPSBfX2lvLmdldGxvYygpOwogICAgICBjb25zdCBjdHlw ZTxfQ2hhclQ+JiBfX2N0eXBlID0gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYyk7CgoK ICAgICAgaW50IF9fY3Nfc2l6ZSA9IDY0OwogICAgICBjaGFyKiBfX2NzID0gc3RhdGljX2Nhc3Q8 Y2hhcio+KF9fYnVpbHRpbl9hbGxvY2EoX19jc19zaXplKSk7CiAgICAgIGludCBfX2xlbiA9IF9f Y29udmVydF9mcm9tX3YoX19jcywgX19jc19zaXplLCAiJS4wMUxmIiwgX191bml0cywKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfU19jX2xvY2FsZSk7CgogICAgICBpZiAoX19s ZW4gPj0gX19jc19zaXplKQogICAgICAgIHsKICAgICAgICAgIF9fY3Nfc2l6ZSA9IF9fbGVuICsg MTsKICAgICAgICAgIF9fY3MgPSBzdGF0aWNfY2FzdDxjaGFyKj4oX19idWlsdGluX2FsbG9jYShf X2NzX3NpemUpKTsKICAgICAgICAgIF9fbGVuID0gX19jb252ZXJ0X2Zyb21fdihfX2NzLCBfX2Nz X3NpemUsICIlLjAxTGYiLCBfX3VuaXRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIF9TX2NfbG9jYWxlKTsKICAgICAgICB9CgoKCgoKCgogICAgICBfQ2hhclQqIF9fd3MgPSBz dGF0aWNfY2FzdDxfQ2hhclQqPihfX2J1aWx0aW5fYWxsb2NhKHNpemVvZihfQ2hhclQpICogX19j c19zaXplKSk7CiAgICAgIF9fY3R5cGUud2lkZW4oX19jcywgX19jcyArIF9fbGVuLCBfX3dzKTsK ICAgICAgc3RyaW5nX3R5cGUgX19kaWdpdHMoX193cyk7CiAgICAgIHJldHVybiB0aGlzLT5kb19w dXQoX19zLCBfX2ludGwsIF9faW8sIF9fZmlsbCwgX19kaWdpdHMpOwogICAgfQoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgX091dEl0ZXIKICAgIG1v bmV5X3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6CiAgICBkb19wdXQoaXRlcl90eXBlIF9fcywgYm9v bCBfX2ludGwsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUgX19maWxsLAogICAgICAgICAgIGNv bnN0IHN0cmluZ190eXBlJiBfX2RpZ2l0cykgY29uc3QKICAgIHsKICAgICAgdHlwZWRlZiB0eXBl bmFtZSBzdHJpbmdfdHlwZTo6c2l6ZV90eXBlIHNpemVfdHlwZTsKICAgICAgdHlwZWRlZiBtb25l eV9iYXNlOjpwYXJ0IHBhcnQ7CgogICAgICBjb25zdCBsb2NhbGUgX19sb2MgPSBfX2lvLmdldGxv YygpOwogICAgICBjb25zdCBzaXplX3R5cGUgX193aWR0aCA9IHN0YXRpY19jYXN0PHNpemVfdHlw ZT4oX19pby53aWR0aCgpKTsKCgogICAgICB0eXBlZGVmIG1vbmV5cHVuY3Q8X0NoYXJULCB0cnVl PiBfX21vbmV5X3RydWU7CiAgICAgIHR5cGVkZWYgbW9uZXlwdW5jdDxfQ2hhclQsIGZhbHNlPiBf X21vbmV5X2ZhbHNlOwogICAgICBjb25zdCBfX21vbmV5X3RydWUmIF9fbXB0ID0gdXNlX2ZhY2V0 PF9fbW9uZXlfdHJ1ZT4oX19sb2MpOwogICAgICBjb25zdCBfX21vbmV5X2ZhbHNlJiBfX21wZiA9 IHVzZV9mYWNldDxfX21vbmV5X2ZhbHNlPihfX2xvYyk7CiAgICAgIGNvbnN0IGN0eXBlPF9DaGFy VD4mIF9fY3R5cGUgPSB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKTsKCgoKICAgICAg Y29uc3QgY2hhcl90eXBlKiBfX2JlZyA9IF9fZGlnaXRzLmRhdGEoKTsKICAgICAgY29uc3QgY2hh cl90eXBlKiBfX2VuZCA9IF9fYmVnICsgX19kaWdpdHMuc2l6ZSgpOwogICAgICBtb25leV9iYXNl OjpwYXR0ZXJuIF9fcDsKICAgICAgc3RyaW5nX3R5cGUgX19zaWduOwogICAgICBpZiAoKl9fYmVn ICE9IF9fY3R5cGUud2lkZW4oJy0nKSkKICAgICAgICB7CiAgICAgICAgICBfX3AgPSBfX2ludGwg PyBfX21wdC5wb3NfZm9ybWF0KCkgOiBfX21wZi5wb3NfZm9ybWF0KCk7CiAgICAgICAgICBfX3Np Z24gPV9faW50bCA/IF9fbXB0LnBvc2l0aXZlX3NpZ24oKSA6IF9fbXBmLnBvc2l0aXZlX3NpZ24o KTsKICAgICAgICB9CiAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICBfX3AgPSBfX2ludGwg PyBfX21wdC5uZWdfZm9ybWF0KCkgOiBfX21wZi5uZWdfZm9ybWF0KCk7CiAgICAgICAgICBfX3Np Z24gPV9faW50bCA/IF9fbXB0Lm5lZ2F0aXZlX3NpZ24oKSA6IF9fbXBmLm5lZ2F0aXZlX3NpZ24o KTsKICAgICAgICAgICsrX19iZWc7CiAgICAgICAgfQoKCiAgICAgIF9fZW5kID0gX19jdHlwZS5z Y2FuX25vdChjdHlwZV9iYXNlOjpkaWdpdCwgX19iZWcsIF9fZW5kKTsKICAgICAgaWYgKF9fYmVn ICE9IF9fZW5kKQogICAgICAgIHsKCgoKICAgICAgICAgIHN0cmluZ190eXBlIF9fcmVzOwogICAg ICAgICAgc3RyaW5nX3R5cGUgX192YWx1ZTsKICAgICAgICAgIGNvbnN0IHN0cmluZ190eXBlIF9f c3ltYm9sID0gX19pbnRsID8gX19tcHQuY3Vycl9zeW1ib2woKQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBfX21wZi5jdXJyX3N5bWJvbCgpOwoKCiAgICAg ICAgICBjb25zdCBpbnQgX19mcmFjID0gX19pbnRsID8gX19tcHQuZnJhY19kaWdpdHMoKQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IF9fbXBmLmZyYWNfZGlnaXRzKCk7CiAg ICAgICAgICBpZiAoX19mcmFjID4gMCkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGNvbnN0 IGNoYXJfdHlwZSBfX2QgPSBfX2ludGwgPyBfX21wdC5kZWNpbWFsX3BvaW50KCkKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogX19tcGYuZGVjaW1hbF9wb2ludCgp OwogICAgICAgICAgICAgIGlmIChfX2VuZCAtIF9fYmVnID49IF9fZnJhYykKICAgICAgICAgICAg ICAgIHsKICAgICAgICAgICAgICAgICAgX192YWx1ZSA9IHN0cmluZ190eXBlKF9fZW5kIC0gX19m cmFjLCBfX2VuZCk7CiAgICAgICAgICAgICAgICAgIF9fdmFsdWUuaW5zZXJ0KF9fdmFsdWUuYmVn aW4oKSwgX19kKTsKICAgICAgICAgICAgICAgICAgX19lbmQgLT0gX19mcmFjOwogICAgICAgICAg ICAgICAgfQogICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIHsKCiAgICAgICAgICAg ICAgICAgIF9fdmFsdWUgPSBzdHJpbmdfdHlwZShfX2JlZywgX19lbmQpOwogICAgICAgICAgICAg ICAgICBpbnQgX19wYWRkZWMgPSBfX2ZyYWMgLSAoX19lbmQgLSBfX2JlZyk7CiAgICAgICAgICAg ICAgICAgIGNoYXJfdHlwZSBfX3plcm8gPSBfX2N0eXBlLndpZGVuKCcwJyk7CiAgICAgICAgICAg ICAgICAgIF9fdmFsdWUuaW5zZXJ0KF9fdmFsdWUuYmVnaW4oKSwgX19wYWRkZWMsIF9femVybyk7 CiAgICAgICAgICAgICAgICAgIF9fdmFsdWUuaW5zZXJ0KF9fdmFsdWUuYmVnaW4oKSwgX19kKTsK ICAgICAgICAgICAgICAgICAgX19iZWcgPSBfX2VuZDsKICAgICAgICAgICAgICAgIH0KICAgICAg ICAgICAgfQoKCgogICAgICAgICAgaWYgKF9fYmVnICE9IF9fZW5kKQogICAgICAgICAgICB7CiAg ICAgICAgICAgICAgY29uc3Qgc3RyaW5nIF9fZ3JvdXBpbmcgPSBfX2ludGwgPyBfX21wdC5ncm91 cGluZygpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBf X21wZi5ncm91cGluZygpOwogICAgICAgICAgICAgIGlmIChfX2dyb3VwaW5nLnNpemUoKSkKICAg ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgY29uc3QgY2hhcl90eXBlIF9fc2VwID0g X19pbnRsID8gX19tcHQudGhvdXNhbmRzX3NlcCgpCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICA6IF9fbXBmLnRob3VzYW5kc19zZXAoKTsKICAgICAgICAg ICAgICAgICAgY29uc3QgY2hhciogX19nYmVnID0gX19ncm91cGluZy5jX3N0cigpOwogICAgICAg ICAgICAgICAgICBjb25zdCBjaGFyKiBfX2dlbmQgPSBfX2diZWcgKyBfX2dyb3VwaW5nLnNpemUo KTsKICAgICAgICAgICAgICAgICAgY29uc3QgaW50IF9fbiA9IChfX2VuZCAtIF9fYmVnKSAqIDI7 CiAgICAgICAgICAgICAgICAgIF9DaGFyVCogX193czIgPQogICAgICAgICAgICAgICAgICAgIHN0 YXRpY19jYXN0PF9DaGFyVCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKF9DaGFyVCkgKiBfX24p KTsKICAgICAgICAgICAgICAgICAgX0NoYXJUKiBfX3dzX2VuZCA9IF9fYWRkX2dyb3VwaW5nKF9f d3MyLCBfX3NlcCwgX19nYmVnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgX19nZW5kLCBfX2JlZywgX19lbmQpOwogICAgICAgICAgICAgICAgICBf X3ZhbHVlLmluc2VydCgwLCBfX3dzMiwgX193c19lbmQgLSBfX3dzMik7CiAgICAgICAgICAgICAg ICB9CiAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgX192YWx1ZS5pbnNlcnQoMCwg c3RyaW5nX3R5cGUoX19iZWcsIF9fZW5kKSk7CiAgICAgICAgICAgIH0KCgogICAgICAgICAgaW9z X2Jhc2U6OmZtdGZsYWdzIF9fZiA9IF9faW8uZmxhZ3MoKSAmIGlvc19iYXNlOjphZGp1c3RmaWVs ZDsKICAgICAgICAgIHNpemVfdHlwZSBfX2xlbiA9IF9fdmFsdWUuc2l6ZSgpICsgX19zaWduLnNp emUoKTsKICAgICAgICAgIF9fbGVuICs9IChfX2lvLmZsYWdzKCkgJiBpb3NfYmFzZTo6c2hvd2Jh c2UpID8gX19zeW1ib2wuc2l6ZSgpIDogMDsKICAgICAgICAgIGJvb2wgX190ZXN0aXBhZCA9IF9f ZiA9PSBpb3NfYmFzZTo6aW50ZXJuYWwgJiYgX19sZW4gPCBfX3dpZHRoOwoKCiAgICAgICAgICBm b3IgKGludCBfX2kgPSAwOyBfX2kgPCA0OyArK19faSkKICAgICAgICAgICAgewogICAgICAgICAg ICAgIHBhcnQgX193aGljaCA9IHN0YXRpY19jYXN0PHBhcnQ+KF9fcC5maWVsZFtfX2ldKTsKICAg ICAgICAgICAgICBzd2l0Y2ggKF9fd2hpY2gpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAg ICAgICBjYXNlIG1vbmV5X2Jhc2U6OnN5bWJvbDoKICAgICAgICAgICAgICAgICAgaWYgKF9faW8u ZmxhZ3MoKSAmIGlvc19iYXNlOjpzaG93YmFzZSkKICAgICAgICAgICAgICAgICAgICBfX3JlcyAr PSBfX3N5bWJvbDsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNl IG1vbmV5X2Jhc2U6OnNpZ246CgoKCiAgICAgICAgICAgICAgICAgIGlmIChfX3NpZ24uc2l6ZSgp KQogICAgICAgICAgICAgICAgICAgIF9fcmVzICs9IF9fc2lnblswXTsKICAgICAgICAgICAgICAg ICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlIG1vbmV5X2Jhc2U6OnZhbHVlOgogICAgICAg ICAgICAgICAgICBfX3JlcyArPSBfX3ZhbHVlOwogICAgICAgICAgICAgICAgICBicmVhazsKICAg ICAgICAgICAgICAgIGNhc2UgbW9uZXlfYmFzZTo6c3BhY2U6CgoKCiAgICAgICAgICAgICAgICAg IGlmIChfX3Rlc3RpcGFkKQogICAgICAgICAgICAgICAgICAgIF9fcmVzICs9IHN0cmluZ190eXBl KF9fd2lkdGggLSBfX2xlbiwgX19maWxsKTsKICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAg ICAgICAgICAgICAgIF9fcmVzICs9IF9fY3R5cGUud2lkZW4oX19maWxsKTsKICAgICAgICAgICAg ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlIG1vbmV5X2Jhc2U6Om5vbmU6CiAgICAg ICAgICAgICAgICAgIGlmIChfX3Rlc3RpcGFkKQogICAgICAgICAgICAgICAgICAgIF9fcmVzICs9 IHN0cmluZ190eXBlKF9fd2lkdGggLSBfX2xlbiwgX19maWxsKTsKICAgICAgICAgICAgICAgICAg YnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCgogICAgICAgICAgaWYgKF9f c2lnbi5zaXplKCkgPiAxKQogICAgICAgICAgICBfX3JlcyArPSBzdHJpbmdfdHlwZShfX3NpZ24u YmVnaW4oKSArIDEsIF9fc2lnbi5lbmQoKSk7CgoKICAgICAgICAgIF9fbGVuID0gX19yZXMuc2l6 ZSgpOwogICAgICAgICAgaWYgKF9fd2lkdGggPiBfX2xlbikKICAgICAgICAgICAgewogICAgICAg ICAgICAgIGlmIChfX2YgPT0gaW9zX2Jhc2U6OmxlZnQpCgogICAgICAgICAgICAgICAgX19yZXMu YXBwZW5kKF9fd2lkdGggLSBfX2xlbiwgX19maWxsKTsKICAgICAgICAgICAgICBlbHNlCgogICAg ICAgICAgICAgICAgX19yZXMuaW5zZXJ0KDAsIHN0cmluZ190eXBlKF9fd2lkdGggLSBfX2xlbiwg X19maWxsKSk7CiAgICAgICAgICAgICAgX19sZW4gPSBfX3dpZHRoOwogICAgICAgICAgICB9CgoK ICAgICAgICAgIGZvciAoc2l6ZV90eXBlIF9faiA9IDA7IF9faiA8IF9fbGVuOyArK19faiwgKytf X3MpCiAgICAgICAgICAgICpfX3MgPSBfX3Jlc1tfX2pdOwogICAgICAgIH0KICAgICAgX19pby53 aWR0aCgwKTsKICAgICAgcmV0dXJuIF9fczsKICAgIH0KCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1l IF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIHRpbWVfYmFzZTo6ZGF0ZW9yZGVyCiAgICB0 aW1lX2dldDxfQ2hhclQsIF9Jbkl0ZXI+Ojpkb19kYXRlX29yZGVyKCkgY29uc3QKICAgIHsgcmV0 dXJuIHRpbWVfYmFzZTo6bm9fb3JkZXI7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0 eXBlbmFtZSBfSW5JdGVyPgogICAgdm9pZAogICAgdGltZV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6 CiAgICBfTV9leHRyYWN0X3ZpYV9mb3JtYXQoaXRlcl90eXBlJiBfX2JlZywgaXRlcl90eXBlJiBf X2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6 Omlvc3RhdGUmIF9fZXJyLCB0bSogX190bSwKICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z dCBfQ2hhclQqIF9fZm9ybWF0KSBjb25zdAogICAgewogICAgICBsb2NhbGUgX19sb2MgPSBfX2lv LmdldGxvYygpOwogICAgICBfX3RpbWVwdW5jdDxfQ2hhclQ+IGNvbnN0JiBfX3RwID0gdXNlX2Zh Y2V0PF9fdGltZXB1bmN0PF9DaGFyVD4gPihfX2xvYyk7CiAgICAgIGNvbnN0IGN0eXBlPF9DaGFy VD4mIF9fY3R5cGUgPSB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKTsKICAgICAgc2l6 ZV90IF9fbGVuID0gY2hhcl90cmFpdHM8X0NoYXJUPjo6bGVuZ3RoKF9fZm9ybWF0KTsKCiAgICAg IGZvciAoc2l6ZV90IF9faSA9IDA7IF9fYmVnICE9IF9fZW5kICYmIF9faSA8IF9fbGVuICYmICFf X2VycjsgKytfX2kpCiAgICAgICAgewogICAgICAgICAgY2hhciBfX2MgPSBfX2Zvcm1hdFtfX2ld OwogICAgICAgICAgaWYgKF9fYyA9PSAnJScpCiAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAg X19jID0gX19mb3JtYXRbKytfX2ldOwogICAgICAgICAgICAgIGNoYXIgX19tb2QgPSAwOwogICAg ICAgICAgICAgIGludCBfX21lbSA9IDA7CiAgICAgICAgICAgICAgaWYgKF9fYyA9PSAnRScgfHwg X19jID09ICdPJykKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgX19tb2QgPSBf X2M7CiAgICAgICAgICAgICAgICAgIF9fYyA9IF9fZm9ybWF0WysrX19pXTsKICAgICAgICAgICAg ICAgIH0KICAgICAgICAgICAgICBzd2l0Y2ggKF9fYykKICAgICAgICAgICAgICAgIHsKICAgICAg ICAgICAgICAgICAgY29uc3QgY2hhciogX19jczsKICAgICAgICAgICAgICAgICAgX0NoYXJUIF9f d2NzWzEwXTsKICAgICAgICAgICAgICAgIGNhc2UgJ2EnOgoKICAgICAgICAgICAgICAgICAgY29u c3QgY2hhcl90eXBlKiBfX2RheXMxWzddOwogICAgICAgICAgICAgICAgICBfX3RwLl9NX2RheXNf YWJicmV2aWF0ZWQoX19kYXlzMSk7CiAgICAgICAgICAgICAgICAgIF9NX2V4dHJhY3RfbmFtZShf X2JlZywgX19lbmQsIF9fdG0tPnRtX3dkYXksIF9fZGF5czEsIDcsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBfX2Vycik7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg ICAgICAgICAgY2FzZSAnQSc6CgogICAgICAgICAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9f ZGF5czJbN107CiAgICAgICAgICAgICAgICAgIF9fdHAuX01fZGF5cyhfX2RheXMyKTsKICAgICAg ICAgICAgICAgICAgX01fZXh0cmFjdF9uYW1lKF9fYmVnLCBfX2VuZCwgX190bS0+dG1fd2RheSwg X19kYXlzMiwgNywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZXJyKTsKICAg ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICdoJzoKICAgICAgICAg ICAgICAgIGNhc2UgJ2InOgoKICAgICAgICAgICAgICAgICAgY29uc3QgY2hhcl90eXBlKiBfX21v bnRoczFbMTJdOwogICAgICAgICAgICAgICAgICBfX3RwLl9NX21vbnRoc19hYmJyZXZpYXRlZChf X21vbnRoczEpOwogICAgICAgICAgICAgICAgICBfTV9leHRyYWN0X25hbWUoX19iZWcsIF9fZW5k LCBfX3RtLT50bV9tb24sIF9fbW9udGhzMSwgMTIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBfX2Vycik7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAg Y2FzZSAnQic6CgogICAgICAgICAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9fbW9udGhzMlsx Ml07CiAgICAgICAgICAgICAgICAgIF9fdHAuX01fbW9udGhzKF9fbW9udGhzMik7CiAgICAgICAg ICAgICAgICAgIF9NX2V4dHJhY3RfbmFtZShfX2JlZywgX19lbmQsIF9fdG0tPnRtX21vbiwgX19t b250aHMyLCAxMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZXJyKTsKICAg ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICdjJzoKCiAgICAgICAg ICAgICAgICAgIGNvbnN0IGNoYXJfdHlwZSogX19kdFsyXTsKICAgICAgICAgICAgICAgICAgX190 cC5fTV9kYXRlX3RpbWVfZm9ybWF0cyhfX2R0KTsKICAgICAgICAgICAgICAgICAgX01fZXh0cmFj dF92aWFfZm9ybWF0KF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9fdG0sCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2R0WzBdKTsKICAgICAgICAgICAgICAgICAg YnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICdkJzoKCiAgICAgICAgICAgICAgICAgIF9NX2V4 dHJhY3RfbnVtKF9fYmVnLCBfX2VuZCwgX190bS0+dG1fbWRheSwgMSwgMzEsIDIsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIF9fY3R5cGUsIF9fZXJyKTsKICAgICAgICAgICAgICAg ICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICdEJzoKCiAgICAgICAgICAgICAgICAgIF9f Y3MgPSAiJW0vJWQvJXkiOwogICAgICAgICAgICAgICAgICBfX2N0eXBlLndpZGVuKF9fY3MsIF9f Y3MgKyA5LCBfX3djcyk7CiAgICAgICAgICAgICAgICAgIF9NX2V4dHJhY3RfdmlhX2Zvcm1hdChf X2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3RtLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgX193Y3MpOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg ICAgICAgIGNhc2UgJ0gnOgoKICAgICAgICAgICAgICAgICAgX01fZXh0cmFjdF9udW0oX19iZWcs IF9fZW5kLCBfX3RtLT50bV9ob3VyLCAwLCAyMywgMiwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgX19jdHlwZSwgX19lcnIpOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg ICAgICAgICAgIGNhc2UgJ0knOgoKICAgICAgICAgICAgICAgICAgX01fZXh0cmFjdF9udW0oX19i ZWcsIF9fZW5kLCBfX3RtLT50bV9ob3VyLCAxLCAxMiwgMiwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgX19jdHlwZSwgX19lcnIpOwogICAgICAgICAgICAgICAgICBicmVhazsKICAg ICAgICAgICAgICAgIGNhc2UgJ20nOgoKICAgICAgICAgICAgICAgICAgX01fZXh0cmFjdF9udW0o X19iZWcsIF9fZW5kLCBfX21lbSwgMSwgMTIsIDIsIF9fY3R5cGUsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIF9fZXJyKTsKICAgICAgICAgICAgICAgICAgaWYgKCFfX2VycikKICAg ICAgICAgICAgICAgICAgICBfX3RtLT50bV9tb24gPSBfX21lbSAtIDE7CiAgICAgICAgICAgICAg ICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAnTSc6CgogICAgICAgICAgICAgICAgICBf TV9leHRyYWN0X251bShfX2JlZywgX19lbmQsIF9fdG0tPnRtX21pbiwgMCwgNTksIDIsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY3R5cGUsIF9fZXJyKTsKICAgICAgICAgICAg ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICduJzoKICAgICAgICAgICAgICAgICAg aWYgKF9fY3R5cGUubmFycm93KCpfX2JlZywgMCkgPT0gJ1xuJykKICAgICAgICAgICAgICAgICAg ICArK19fYmVnOwogICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgX19l cnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg ICAgICAgICAgY2FzZSAnUic6CgogICAgICAgICAgICAgICAgICBfX2NzID0gIiVIOiVNIjsKICAg ICAgICAgICAgICAgICAgX19jdHlwZS53aWRlbihfX2NzLCBfX2NzICsgNiwgX193Y3MpOwogICAg ICAgICAgICAgICAgICBfTV9leHRyYWN0X3ZpYV9mb3JtYXQoX19iZWcsIF9fZW5kLCBfX2lvLCBf X2VyciwgX190bSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fd2Nz KTsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICdTJzoKCiAg ICAgICAgICAgICAgICAgIF9NX2V4dHJhY3RfbnVtKF9fYmVnLCBfX2VuZCwgX190bS0+dG1fc2Vj LCAwLCA1OSwgMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jdHlwZSwgX19l cnIpOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ3QnOgog ICAgICAgICAgICAgICAgICBpZiAoX19jdHlwZS5uYXJyb3coKl9fYmVnLCAwKSA9PSAnXHQnKQog ICAgICAgICAgICAgICAgICAgICsrX19iZWc7CiAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAg ICAgICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwogICAgICAgICAgICAgICAgICBi cmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ1QnOgoKICAgICAgICAgICAgICAgICAgX19jcyA9 ICIlSDolTTolUyI7CiAgICAgICAgICAgICAgICAgIF9fY3R5cGUud2lkZW4oX19jcywgX19jcyAr IDksIF9fd2NzKTsKICAgICAgICAgICAgICAgICAgX01fZXh0cmFjdF92aWFfZm9ybWF0KF9fYmVn LCBfX2VuZCwgX19pbywgX19lcnIsIF9fdG0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBfX3djcyk7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg ICAgY2FzZSAneCc6CgogICAgICAgICAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9fZGF0ZXNb Ml07CiAgICAgICAgICAgICAgICAgIF9fdHAuX01fZGF0ZV9mb3JtYXRzKF9fZGF0ZXMpOwogICAg ICAgICAgICAgICAgICBfTV9leHRyYWN0X3ZpYV9mb3JtYXQoX19iZWcsIF9fZW5kLCBfX2lvLCBf X2VyciwgX190bSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZGF0 ZXNbMF0pOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ1gn OgoKICAgICAgICAgICAgICAgICAgY29uc3QgY2hhcl90eXBlKiBfX3RpbWVzWzJdOwogICAgICAg ICAgICAgICAgICBfX3RwLl9NX3RpbWVfZm9ybWF0cyhfX3RpbWVzKTsKICAgICAgICAgICAgICAg ICAgX01fZXh0cmFjdF92aWFfZm9ybWF0KF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9fdG0s CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3RpbWVzWzBdKTsKICAg ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICd5JzoKCiAgICAgICAg ICAgICAgICAgIF9NX2V4dHJhY3RfbnVtKF9fYmVnLCBfX2VuZCwgX190bS0+dG1feWVhciwgMCwg OTksIDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY3R5cGUsIF9fZXJyKTsK ICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICdZJzoKCiAgICAg ICAgICAgICAgICAgIF9NX2V4dHJhY3RfbnVtKF9fYmVnLCBfX2VuZCwgX19tZW0sIDAsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bWVyaWNfbGltaXRzPGludD46Om1heCgpLCA0 LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2N0eXBlLCBfX2Vycik7CiAgICAg ICAgICAgICAgICAgIGlmICghX19lcnIpCiAgICAgICAgICAgICAgICAgICAgX190bS0+dG1feWVh ciA9IF9fbWVtIC0gMTkwMDsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAg ICBjYXNlICdaJzoKCiAgICAgICAgICAgICAgICAgIGlmIChfX2N0eXBlLmlzKGN0eXBlX2Jhc2U6 OnVwcGVyLCAqX19iZWcpKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAg ICAgIGludCBfX3RtcDsKICAgICAgICAgICAgICAgICAgICAgIF9NX2V4dHJhY3RfbmFtZShfX2Jl ZywgX19lbmQsIF9fdG1wLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9f dGltZXB1bmN0PF9DaGFyVD46Ol9TX3RpbWV6b25lcywKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAxNCwgX19lcnIpOwoKCiAgICAgICAgICAgICAgICAgICAgICBjaGFyX3R5 cGUgX19jID0gKl9fYmVnOwogICAgICAgICAgICAgICAgICAgICAgaWYgKCFfX2VyciAmJiBfX3Rt cCA9PSAwCiAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgKF9fYyA9PSBfX2N0eXBlLndpZGVu KCctJykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgX19jID09IF9fY3R5cGUud2lk ZW4oJysnKSkpCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAg ICAgICBfTV9leHRyYWN0X251bShfX2JlZywgX19lbmQsIF9fdG1wLCAwLCAyMywgMiwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jdHlwZSwgX19lcnIpOwogICAg ICAgICAgICAgICAgICAgICAgICAgIF9NX2V4dHJhY3RfbnVtKF9fYmVnLCBfX2VuZCwgX190bXAs IDAsIDU5LCAyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2N0 eXBlLCBfX2Vycik7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAg ICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAg ICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwogICAgICAgICAgICAgICAgICAgICAgYnJl YWs7CiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKCiAgICAgICAgICAgICAgICAgICAgICBf X2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg ICAgICAgICB9CiAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgewoKICAgICAgICAg ICAgICAgICAgaWYgKF9fYyA9PSBfX2N0eXBlLm5hcnJvdygqX19iZWcsIDApKQogICAgICAgICAg ICAgICAgICAgICsrX19iZWc7CiAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAg ICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKICAgICAgICAgICAgICAgIH0KICAgICAg ICB9CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4K ICAgIHZvaWQKICAgIHRpbWVfZ2V0PF9DaGFyVCwgX0luSXRlcj46OgogICAgX01fZXh0cmFjdF9u dW0oaXRlcl90eXBlJiBfX2JlZywgaXRlcl90eXBlJiBfX2VuZCwgaW50JiBfX21lbWJlciwKICAg ICAgICAgICAgICAgICAgIGludCBfX21pbiwgaW50IF9fbWF4LCBzaXplX3QgX19sZW4sCiAgICAg ICAgICAgICAgICAgICBjb25zdCBjdHlwZTxfQ2hhclQ+JiBfX2N0eXBlLAogICAgICAgICAgICAg ICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyKSBjb25zdAogICAgewogICAgICBzaXplX3Qg X19pID0gMDsKICAgICAgc3RyaW5nIF9fZGlnaXRzOwogICAgICBib29sIF9fdGVzdHZhbGlkID0g dHJ1ZTsKICAgICAgY2hhcl90eXBlIF9fYyA9ICpfX2JlZzsKICAgICAgd2hpbGUgKF9fYmVnICE9 IF9fZW5kICYmIF9faSA8IF9fbGVuCiAgICAgICAgICAgICAmJiBfX2N0eXBlLmlzKGN0eXBlX2Jh c2U6OmRpZ2l0LCBfX2MpKQogICAgICAgIHsKICAgICAgICAgIF9fZGlnaXRzICs9IF9fY3R5cGUu bmFycm93KF9fYywgMCk7CiAgICAgICAgICBfX2MgPSAqKCsrX19iZWcpOwogICAgICAgICAgKytf X2k7CiAgICAgICAgfQogICAgICBpZiAoX19pID09IF9fbGVuKQogICAgICAgIHsKICAgICAgICAg IGludCBfX3ZhbHVlID0gYXRvaShfX2RpZ2l0cy5jX3N0cigpKTsKICAgICAgICAgIGlmIChfX21p biA8PSBfX3ZhbHVlICYmIF9fdmFsdWUgPD0gX19tYXgpCiAgICAgICAgICAgIF9fbWVtYmVyID0g X192YWx1ZTsKICAgICAgICAgIGVsc2UKICAgICAgICAgICAgX190ZXN0dmFsaWQgPSBmYWxzZTsK ICAgICAgICB9CiAgICAgIGVsc2UKICAgICAgICBfX3Rlc3R2YWxpZCA9IGZhbHNlOwogICAgICBp ZiAoIV9fdGVzdHZhbGlkKQogICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwogICAg fQoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIHZv aWQKICAgIHRpbWVfZ2V0PF9DaGFyVCwgX0luSXRlcj46OgogICAgX01fZXh0cmFjdF9uYW1lKGl0 ZXJfdHlwZSYgX19iZWcsIGl0ZXJfdHlwZSYgX19lbmQsIGludCYgX19tZW1iZXIsCiAgICAgICAg ICAgICAgICAgICAgY29uc3QgX0NoYXJUKiogX19uYW1lcywgc2l6ZV90IF9faW5kZXhsZW4sCiAg ICAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyKSBjb25zdAogICAgewog ICAgICB0eXBlZGVmIGNoYXJfdHJhaXRzPGNoYXJfdHlwZT4gX190cmFpdHNfdHlwZTsKICAgICAg aW50KiBfX21hdGNoZXMgPSBzdGF0aWNfY2FzdDxpbnQqPihfX2J1aWx0aW5fYWxsb2NhKHNpemVv ZihpbnQpICogX19pbmRleGxlbikpOwogICAgICBzaXplX3QgX19ubWF0Y2hlcyA9IDA7CiAgICAg IHNpemVfdCBfX3BvcyA9IDA7CiAgICAgIGJvb2wgX190ZXN0dmFsaWQgPSB0cnVlOwogICAgICBj b25zdCBjaGFyX3R5cGUqIF9fbmFtZTsKCiAgICAgIGNoYXJfdHlwZSBfX2MgPSAqX19iZWc7Cgog ICAgICBmb3IgKHNpemVfdCBfX2kxID0gMDsgX19pMSA8IF9faW5kZXhsZW47ICsrX19pMSkKICAg ICAgICBpZiAoX19jID09IF9fbmFtZXNbX19pMV1bMF0pCiAgICAgICAgICBfX21hdGNoZXNbX19u bWF0Y2hlcysrXSA9IF9faTE7CgogICAgICB3aGlsZShfX25tYXRjaGVzID4gMSkKICAgICAgICB7 CgogICAgICAgICAgc2l6ZV90IF9fbWlubGVuID0gMTA7CiAgICAgICAgICBmb3IgKHNpemVfdCBf X2kyID0gMDsgX19pMiA8IF9fbm1hdGNoZXM7ICsrX19pMikKICAgICAgICAgICAgX19taW5sZW4g PSBtaW4oX19taW5sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdHJhaXRzX3R5cGU6 Omxlbmd0aChfX25hbWVzW19fbWF0Y2hlc1tfX2kyXV0pKTsKCiAgICAgICAgICBpZiAoX19wb3Mg PCBfX21pbmxlbiAmJiBfX2JlZyAhPSBfX2VuZCkKICAgICAgICAgICAgewogICAgICAgICAgICAg ICsrX19wb3M7CiAgICAgICAgICAgICAgX19jID0gKigrK19fYmVnKTsKICAgICAgICAgICAgICBm b3IgKHNpemVfdCBfX2kzID0gMDsgX19pMyA8IF9fbm1hdGNoZXM7ICsrX19pMykKICAgICAgICAg ICAgICAgIHsKICAgICAgICAgICAgICAgICAgX19uYW1lID0gX19uYW1lc1tfX21hdGNoZXNbX19p M11dOwogICAgICAgICAgICAgICAgICBpZiAoX19uYW1lW19fcG9zXSAhPSBfX2MpCiAgICAgICAg ICAgICAgICAgICAgX19tYXRjaGVzW19faTNdID0gX19tYXRjaGVzWy0tX19ubWF0Y2hlc107CiAg ICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIGVsc2UKICAgICAgICAgICAg YnJlYWs7CiAgICAgICAgfQoKICAgICAgaWYgKF9fbm1hdGNoZXMgPT0gMSkKICAgICAgICB7Cgog ICAgICAgICAgX19uYW1lID0gX19uYW1lc1tfX21hdGNoZXNbMF1dOwogICAgICAgICAgY29uc3Qg c2l6ZV90IF9fbGVuID0gX190cmFpdHNfdHlwZTo6bGVuZ3RoKF9fbmFtZSk7CiAgICAgICAgICB3 aGlsZSAoX19wb3MgPCBfX2xlbiAmJiBfX2JlZyAhPSBfX2VuZCAmJiBfX25hbWVbX19wb3NdID09 ICpfX2JlZykKICAgICAgICAgICAgKytfX2JlZywgKytfX3BvczsKCiAgICAgICAgICBpZiAoX19s ZW4gPT0gX19wb3MpCiAgICAgICAgICAgIF9fbWVtYmVyID0gX19tYXRjaGVzWzBdOwogICAgICAg ICAgZWxzZQogICAgICAgICAgICBfX3Rlc3R2YWxpZCA9IGZhbHNlOwogICAgICAgIH0KICAgICAg ZWxzZQogICAgICAgIF9fdGVzdHZhbGlkID0gZmFsc2U7CiAgICAgIGlmICghX190ZXN0dmFsaWQp CiAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CiAgICB9CgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIKICAgIHRpbWVfZ2V0 PF9DaGFyVCwgX0luSXRlcj46OgogICAgZG9fZ2V0X3RpbWUoaXRlcl90eXBlIF9fYmVnLCBpdGVy X3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlv c3RhdGUmIF9fZXJyLCB0bSogX190bSkgY29uc3QKICAgIHsKICAgICAgX0NoYXJUIF9fd2NzWzNd OwogICAgICBjb25zdCBjaGFyKiBfX2NzID0gIiVYIjsKICAgICAgbG9jYWxlIF9fbG9jID0gX19p by5nZXRsb2MoKTsKICAgICAgY3R5cGU8X0NoYXJUPiBjb25zdCYgX19jdHlwZSA9IHVzZV9mYWNl dDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpOwogICAgICBfX2N0eXBlLndpZGVuKF9fY3MsIF9fY3Mg KyAzLCBfX3djcyk7CiAgICAgIF9NX2V4dHJhY3RfdmlhX2Zvcm1hdChfX2JlZywgX19lbmQsIF9f aW8sIF9fZXJyLCBfX3RtLCBfX3djcyk7CiAgICAgIGlmIChfX2JlZyA9PSBfX2VuZCkKICAgICAg ICBfX2VyciB8PSBpb3NfYmFzZTo6ZW9mYml0OwogICAgICByZXR1cm4gX19iZWc7CiAgICB9Cgog IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIK ICAgIHRpbWVfZ2V0PF9DaGFyVCwgX0luSXRlcj46OgogICAgZG9fZ2V0X2RhdGUoaXRlcl90eXBl IF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgICAgICAg aW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB0bSogX190bSkgY29uc3QKICAgIHsKICAgICAgX0No YXJUIF9fd2NzWzNdOwogICAgICBjb25zdCBjaGFyKiBfX2NzID0gIiV4IjsKICAgICAgbG9jYWxl IF9fbG9jID0gX19pby5nZXRsb2MoKTsKICAgICAgY3R5cGU8X0NoYXJUPiBjb25zdCYgX19jdHlw ZSA9IHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpOwogICAgICBfX2N0eXBlLndpZGVu KF9fY3MsIF9fY3MgKyAzLCBfX3djcyk7CiAgICAgIF9NX2V4dHJhY3RfdmlhX2Zvcm1hdChfX2Jl ZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3RtLCBfX3djcyk7CiAgICAgIGlmIChfX2JlZyA9PSBf X2VuZCkKICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZW9mYml0OwogICAgICByZXR1cm4gX19i ZWc7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4K ICAgIF9Jbkl0ZXIKICAgIHRpbWVfZ2V0PF9DaGFyVCwgX0luSXRlcj46OgogICAgZG9fZ2V0X3dl ZWtkYXkoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAog ICAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB0bSogX190bSkgY29u c3QKICAgIHsKICAgICAgdHlwZWRlZiBjaGFyX3RyYWl0czxjaGFyX3R5cGU+IF9fdHJhaXRzX3R5 cGU7CiAgICAgIGxvY2FsZSBfX2xvYyA9IF9faW8uZ2V0bG9jKCk7CiAgICAgIF9fdGltZXB1bmN0 PF9DaGFyVD4gY29uc3QmIF9fdHAgPSB1c2VfZmFjZXQ8X190aW1lcHVuY3Q8X0NoYXJUPiA+KF9f bG9jKTsKICAgICAgY29uc3QgY2hhcl90eXBlKiBfX2RheXNbN107CiAgICAgIF9fdHAuX01fZGF5 c19hYmJyZXZpYXRlZChfX2RheXMpOwogICAgICBpbnQgX190bXB3ZGF5OwogICAgICBfTV9leHRy YWN0X25hbWUoX19iZWcsIF9fZW5kLCBfX3RtcHdkYXksIF9fZGF5cywgNywgX19lcnIpOwoKCgoK CgoKICAgICAgaWYgKCFfX2VycikKICAgICAgICB7CiAgICAgICAgICBzaXplX3QgX19wb3MgPSBf X3RyYWl0c190eXBlOjpsZW5ndGgoX19kYXlzW19fdG1wd2RheV0pOwogICAgICAgICAgX190cC5f TV9kYXlzKF9fZGF5cyk7CiAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9fbmFtZSA9IF9fZGF5 c1tfX3RtcHdkYXldOwogICAgICAgICAgaWYgKF9fbmFtZVtfX3Bvc10gPT0gKl9fYmVnKQogICAg ICAgICAgICB7CgogICAgICAgICAgICAgIGNvbnN0IHNpemVfdCBfX2xlbiA9IF9fdHJhaXRzX3R5 cGU6Omxlbmd0aChfX25hbWUpOwogICAgICAgICAgICAgIHdoaWxlIChfX3BvcyA8IF9fbGVuICYm IF9fYmVnICE9IF9fZW5kCiAgICAgICAgICAgICAgICAgICAgICYmIF9fbmFtZVtfX3Bvc10gPT0g Kl9fYmVnKQogICAgICAgICAgICAgICAgKytfX2JlZywgKytfX3BvczsKICAgICAgICAgICAgICBp ZiAoX19sZW4gIT0gX19wb3MpCiAgICAgICAgICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFp bGJpdDsKICAgICAgICAgICAgfQogICAgICAgICAgaWYgKCFfX2VycikKICAgICAgICAgICAgX190 bS0+dG1fd2RheSA9IF9fdG1wd2RheTsKICAgICAgICB9CiAgICAgIGlmIChfX2JlZyA9PSBfX2Vu ZCkKICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZW9mYml0OwogICAgICByZXR1cm4gX19iZWc7 CiAgICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAg ICBfSW5JdGVyCiAgICB0aW1lX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAgIGRvX2dldF9tb250 aG5hbWUoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsCiAgICAgICAgICAgICAgICAg ICAgIGlvc19iYXNlJiBfX2lvLCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3RtKSBj b25zdAogICAgewogICAgICB0eXBlZGVmIGNoYXJfdHJhaXRzPGNoYXJfdHlwZT4gX190cmFpdHNf dHlwZTsKICAgICAgbG9jYWxlIF9fbG9jID0gX19pby5nZXRsb2MoKTsKICAgICAgX190aW1lcHVu Y3Q8X0NoYXJUPiBjb25zdCYgX190cCA9IHVzZV9mYWNldDxfX3RpbWVwdW5jdDxfQ2hhclQ+ID4o X19sb2MpOwogICAgICBjb25zdCBjaGFyX3R5cGUqIF9fbW9udGhzWzEyXTsKICAgICAgX190cC5f TV9tb250aHNfYWJicmV2aWF0ZWQoX19tb250aHMpOwogICAgICBpbnQgX190bXBtb247CiAgICAg IF9NX2V4dHJhY3RfbmFtZShfX2JlZywgX19lbmQsIF9fdG1wbW9uLCBfX21vbnRocywgMTIsIF9f ZXJyKTsKCgoKCgoKCiAgICAgIGlmICghX19lcnIpCiAgICAgICAgewogICAgICAgICAgc2l6ZV90 IF9fcG9zID0gX190cmFpdHNfdHlwZTo6bGVuZ3RoKF9fbW9udGhzW19fdG1wbW9uXSk7CiAgICAg ICAgICBfX3RwLl9NX21vbnRocyhfX21vbnRocyk7CiAgICAgICAgICBjb25zdCBjaGFyX3R5cGUq IF9fbmFtZSA9IF9fbW9udGhzW19fdG1wbW9uXTsKICAgICAgICAgIGlmIChfX25hbWVbX19wb3Nd ID09ICpfX2JlZykKICAgICAgICAgICAgewoKICAgICAgICAgICAgICBjb25zdCBzaXplX3QgX19s ZW4gPSBfX3RyYWl0c190eXBlOjpsZW5ndGgoX19uYW1lKTsKICAgICAgICAgICAgICB3aGlsZSAo X19wb3MgPCBfX2xlbiAmJiBfX2JlZyAhPSBfX2VuZAogICAgICAgICAgICAgICAgICAgICAmJiBf X25hbWVbX19wb3NdID09ICpfX2JlZykKICAgICAgICAgICAgICAgICsrX19iZWcsICsrX19wb3M7 CiAgICAgICAgICAgICAgaWYgKF9fbGVuICE9IF9fcG9zKQogICAgICAgICAgICAgICAgX19lcnIg fD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CiAgICAgICAgICAgIH0KICAgICAgICAgIGlmICghX19lcnIp CiAgICAgICAgICAgIF9fdG0tPnRtX21vbiA9IF9fdG1wbW9uOwogICAgICAgIH0KCiAgICAgIGlm IChfX2JlZyA9PSBfX2VuZCkKICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZW9mYml0OwogICAg ICByZXR1cm4gX19iZWc7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h bWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIKICAgIHRpbWVfZ2V0PF9DaGFyVCwgX0luSXRlcj46Ogog ICAgZG9fZ2V0X3llYXIoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNl JiBfX2lvLAogICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB0bSogX190 bSkgY29uc3QKICAgIHsKICAgICAgbG9jYWxlIF9fbG9jID0gX19pby5nZXRsb2MoKTsKICAgICAg Y29uc3QgY3R5cGU8X0NoYXJUPiYgX19jdHlwZSA9IHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4o X19sb2MpOwoKICAgICAgY2hhcl90eXBlIF9fYyA9ICpfX2JlZzsKICAgICAgc2l6ZV90IF9faSA9 IDA7CiAgICAgIHN0cmluZyBfX2RpZ2l0czsKICAgICAgd2hpbGUgKF9faSA8IDQgJiYgX19iZWcg IT0gX19lbmQgJiYgX19jdHlwZS5pcyhjdHlwZV9iYXNlOjpkaWdpdCwgX19jKSkKICAgICAgICB7 CiAgICAgICAgICBfX2RpZ2l0cyArPSBfX2N0eXBlLm5hcnJvdyhfX2MsIDApOwogICAgICAgICAg X19jID0gKigrK19fYmVnKTsKICAgICAgICAgICsrX19pOwogICAgICAgIH0KICAgICAgaWYgKF9f aSA9PSAyIHx8IF9faSA9PSA0KQogICAgICAgIHsKICAgICAgICAgIGxvbmcgX19sOwogICAgICAg ICAgX19jb252ZXJ0X3RvX3YoX19kaWdpdHMuY19zdHIoKSwgX19sLCBfX2VyciwgX1NfY19sb2Nh bGUpOwogICAgICAgICAgaWYgKCEoX19lcnIgJiBpb3NfYmFzZTo6ZmFpbGJpdCkgJiYgX19sIDw9 IDIxNDc0ODM2NDcpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfX2wgPSBfX2kgPT0gMiA/ IF9fbCA6IF9fbCAtIDE5MDA7CiAgICAgICAgICAgICAgX190bS0+dG1feWVhciA9IHN0YXRpY19j YXN0PGludD4oX19sKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgZWxzZQogICAgICAg IF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwogICAgICBpZiAoX19iZWcgPT0gX19lbmQpCiAg ICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmVvZmJpdDsKICAgICAgcmV0dXJuIF9fYmVnOwogICAg fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgX091 dEl0ZXIKICAgIHRpbWVfcHV0PF9DaGFyVCwgX091dEl0ZXI+OjoKICAgIHB1dChpdGVyX3R5cGUg X19zLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlLCBjb25zdCB0bSogX190bSwKICAgICAgICBj b25zdCBfQ2hhclQqIF9fYmVnLCBjb25zdCBfQ2hhclQqIF9fZW5kKSBjb25zdAogICAgewogICAg ICBsb2NhbGUgX19sb2MgPSBfX2lvLmdldGxvYygpOwogICAgICBjdHlwZTxfQ2hhclQ+IGNvbnN0 JiBfX2N0eXBlID0gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYyk7CiAgICAgIHdoaWxl IChfX2JlZyAhPSBfX2VuZCkKICAgICAgICB7CiAgICAgICAgICBjaGFyIF9fYyA9IF9fY3R5cGUu bmFycm93KCpfX2JlZywgMCk7CiAgICAgICAgICArK19fYmVnOwogICAgICAgICAgaWYgKF9fYyA9 PSAnJScpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBjaGFyIF9fZm9ybWF0OwogICAgICAg ICAgICAgIGNoYXIgX19tb2QgPSAwOwogICAgICAgICAgICAgIHNpemVfdCBfX2xlbiA9IDE7CiAg ICAgICAgICAgICAgX19jID0gX19jdHlwZS5uYXJyb3coKl9fYmVnLCAwKTsKICAgICAgICAgICAg ICArK19fYmVnOwogICAgICAgICAgICAgIGlmIChfX2MgPT0gJ0UnIHx8IF9fYyA9PSAnTycpCiAg ICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIF9fbW9kID0gX19jOwogICAgICAgICAg ICAgICAgICBfX2Zvcm1hdCA9IF9fY3R5cGUubmFycm93KCpfX2JlZywgMCk7CiAgICAgICAgICAg ICAgICAgICsrX19iZWc7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgZWxzZQogICAg ICAgICAgICAgICAgX19mb3JtYXQgPSBfX2M7CiAgICAgICAgICAgICAgX19zID0gdGhpcy0+ZG9f cHV0KF9fcywgX19pbywgY2hhcl90eXBlKCksIF9fdG0sIF9fZm9ybWF0LAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBfX21vZCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGVsc2UK ICAgICAgICAgICAgewogICAgICAgICAgICAgICpfX3MgPSBfX2M7CiAgICAgICAgICAgICAgKytf X3M7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiBfX3M7CiAgICB9CgogIHRl bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBfT3V0SXRlcgog ICAgdGltZV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OgogICAgZG9fcHV0KGl0ZXJfdHlwZSBfX3Ms IGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUsIGNvbnN0IHRtKiBfX3RtLAogICAgICAgICAgIGNo YXIgX19mb3JtYXQsIGNoYXIgX19tb2QpIGNvbnN0CiAgICB7CiAgICAgIGxvY2FsZSBfX2xvYyA9 IF9faW8uZ2V0bG9jKCk7CiAgICAgIGN0eXBlPF9DaGFyVD4gY29uc3QmIF9fY3R5cGUgPSB1c2Vf ZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKTsKICAgICAgX190aW1lcHVuY3Q8X0NoYXJUPiBj b25zdCYgX190cCA9IHVzZV9mYWNldDxfX3RpbWVwdW5jdDxfQ2hhclQ+ID4oX19sb2MpOwoKCgog ICAgICBjb25zdCBzaXplX3QgX19tYXhsZW4gPSA2NDsKICAgICAgY2hhcl90eXBlKiBfX3JlcyA9 CiAgICAgICAgc3RhdGljX2Nhc3Q8Y2hhcl90eXBlKj4oX19idWlsdGluX2FsbG9jYShzaXplb2Yo Y2hhcl90eXBlKSAqIF9fbWF4bGVuKSk7CgoKCgoKCiAgICAgIGNoYXJfdHlwZSBfX2ZtdFs0XTsK ICAgICAgX19mbXRbMF0gPSBfX2N0eXBlLndpZGVuKCclJyk7CiAgICAgIGlmICghX19tb2QpCiAg ICAgICAgewogICAgICAgICAgX19mbXRbMV0gPSBfX2Zvcm1hdDsKICAgICAgICAgIF9fZm10WzJd ID0gY2hhcl90eXBlKCk7CiAgICAgICAgfQogICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAg X19mbXRbMV0gPSBfX21vZDsKICAgICAgICAgIF9fZm10WzJdID0gX19mb3JtYXQ7CiAgICAgICAg ICBfX2ZtdFszXSA9IGNoYXJfdHlwZSgpOwogICAgICAgIH0KCiAgICAgIF9fdHAuX01fcHV0KF9f cmVzLCBfX21heGxlbiwgX19mbXQsIF9fdG0pOwoKCiAgICAgIHNpemVfdCBfX2xlbiA9IGNoYXJf dHJhaXRzPGNoYXJfdHlwZT46Omxlbmd0aChfX3Jlcyk7CiAgICAgIGZvciAoc2l6ZV90IF9faSA9 IDA7IF9faSA8IF9fbGVuOyArK19faSwgKytfX3MpCiAgICAgICAgKl9fcyA9IF9fcmVzW19faV07 CiAgICAgIHJldHVybiBfX3M7CiAgICB9CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgog ICAgaW50CiAgICBjb2xsYXRlPF9DaGFyVD46Ol9NX2NvbXBhcmUoY29uc3QgX0NoYXJUKiwgY29u c3QgX0NoYXJUKikgY29uc3QKICAgIHsgcmV0dXJuIDA7IH0KCgogIHRlbXBsYXRlPHR5cGVuYW1l IF9DaGFyVD4KICAgIHNpemVfdAogICAgY29sbGF0ZTxfQ2hhclQ+OjpfTV90cmFuc2Zvcm0oX0No YXJUKiwgY29uc3QgX0NoYXJUKiwgc2l6ZV90KSBjb25zdAogICAgeyByZXR1cm4gMDsgfQoKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbnQKICAgIGNvbGxhdGU8X0NoYXJUPjo6CiAg ICBkb19jb21wYXJlKGNvbnN0IF9DaGFyVCogX19sbzEsIGNvbnN0IF9DaGFyVCogX19oaTEsCiAg ICAgICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19sbzIsIGNvbnN0IF9DaGFyVCogX19oaTIpIGNv bnN0CiAgICB7CiAgICAgIGNvbnN0IHN0cmluZ190eXBlIF9fb25lKF9fbG8xLCBfX2hpMSk7CiAg ICAgIGNvbnN0IHN0cmluZ190eXBlIF9fdHdvKF9fbG8yLCBfX2hpMik7CiAgICAgIHJldHVybiBf TV9jb21wYXJlKF9fb25lLmNfc3RyKCksIF9fdHdvLmNfc3RyKCkpOwogICAgfQoKIHRlbXBsYXRl PHR5cGVuYW1lIF9DaGFyVD4KICAgIHR5cGVuYW1lIGNvbGxhdGU8X0NoYXJUPjo6c3RyaW5nX3R5 cGUKICAgIGNvbGxhdGU8X0NoYXJUPjo6CiAgICBkb190cmFuc2Zvcm0oY29uc3QgX0NoYXJUKiBf X2xvLCBjb25zdCBfQ2hhclQqIF9faGkpIGNvbnN0CiAgICB7CiAgICAgIHNpemVfdCBfX2xlbiA9 IChfX2hpIC0gX19sbykgKiAyOwoKICAgICAgX0NoYXJUKiBfX2MgPQogICAgICAgIHN0YXRpY19j YXN0PF9DaGFyVCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKF9DaGFyVCkgKiBfX2xlbikpOwog ICAgICBzaXplX3QgX19yZXMgPSBfTV90cmFuc2Zvcm0oX19jLCBfX2xvLCBfX2xlbik7CgogICAg ICBpZiAoX19yZXMgPj0gX19sZW4pCiAgICAgICAgewogICAgICAgICAgX19jID0KICAgICAgICAg ICAgc3RhdGljX2Nhc3Q8X0NoYXJUKj4oX19idWlsdGluX2FsbG9jYShzaXplb2YoX0NoYXJUKSAq IChfX3JlcyArIDEpKSk7CiAgICAgICAgICBfTV90cmFuc2Zvcm0oX19jLCBfX2xvLCBfX3JlcyAr IDEpOwogICAgICAgIH0KICAgICAgcmV0dXJuIHN0cmluZ190eXBlKF9fYyk7CiAgICB9CgogdGVt cGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgbG9uZwogICAgY29sbGF0ZTxfQ2hhclQ+OjoKICAg IGRvX2hhc2goY29uc3QgX0NoYXJUKiBfX2xvLCBjb25zdCBfQ2hhclQqIF9faGkpIGNvbnN0CiAg ICB7CiAgICAgIHVuc2lnbmVkIGxvbmcgX192YWwgPSAwOwogICAgICBmb3IgKDsgX19sbyA8IF9f aGk7ICsrX19sbykKICAgICAgICBfX3ZhbCA9ICpfX2xvICsgKChfX3ZhbCA8PCA3KSB8CiAgICAg ICAgICAgICAgICAgICAgICAgKF9fdmFsID4+IChudW1lcmljX2xpbWl0czx1bnNpZ25lZCBsb25n Pjo6ZGlnaXRzIC0gNykpKTsKICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGxvbmc+KF9fdmFsKTsK ICAgIH0KCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1R2PgogICAgdm9pZAogICAgX19jb252ZXJ0 X3RvX3YoY29uc3QgY2hhciogX19pbiwgX1R2JiBfX291dCwgaW9zX2Jhc2U6Omlvc3RhdGUmIF9f ZXJyLAogICAgICAgICAgICAgICAgICAgY29uc3QgX19jX2xvY2FsZSYgX19jbG9jLCBpbnQgX19i YXNlID0gMTApOwoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1R2PgogICAgaW50CiAgICBfX2Nv bnZlcnRfZnJvbV92KGNoYXIqIF9fb3V0LCBjb25zdCBpbnQgX19zaXplLCBjb25zdCBjaGFyKiBf X2ZtdCwKICAgICAgICAgICAgICAgICAgICAgX1R2IF9fdiwgY29uc3QgX19jX2xvY2FsZSYsIGlu dCBfX3ByZWMgPSAtMSkKICAgIHsKICAgICAgaW50IF9fcmV0OwogICAgICBjaGFyKiBfX29sZCA9 IHN0cmR1cChzZXRsb2NhbGUoX19MQ19BTEwsIF9fbnVsbCkpOwogICAgICBzZXRsb2NhbGUoX19M Q19BTEwsICJDIik7CiAgICAgIGlmIChfX3ByZWMgPj0gMCkKICAgICAgICBfX3JldCA9IHNucHJp bnRmKF9fb3V0LCBfX3NpemUsIF9fZm10LCBfX3ByZWMsIF9fdik7CiAgICAgIGVsc2UKICAgICAg ICBfX3JldCA9IHNucHJpbnRmKF9fb3V0LCBfX3NpemUsIF9fZm10LCBfX3YpOwogICAgICBzZXRs b2NhbGUoX19MQ19BTEwsIF9fb2xkKTsKICAgICAgZnJlZShfX29sZCk7CiAgICAgIHJldHVybiBf X3JldDsKICAgIH0KIyAxOTk5ICIvdXNyL2N5Z251cy9iaW4vLi4vaW5jbHVkZS9jKysvMy4xLjEv Yml0cy9sb2NhbGVfZmFjZXRzLnRjYyIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw ZW5hbWUgX1RyYWl0cz4KICAgIHZvaWQKICAgIF9fcGFkKGlvc19iYXNlJiBfX2lvLCBfQ2hhclQg X19maWxsLCBfQ2hhclQqIF9fbmV3cywgY29uc3QgX0NoYXJUKiBfX29sZHMsCiAgICAgICAgICBj b25zdCBzdHJlYW1zaXplIF9fbmV3bGVuLCBjb25zdCBzdHJlYW1zaXplIF9fb2xkbGVuLAogICAg ICAgICAgY29uc3QgYm9vbCBfX251bSkKICAgIHsKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90 eXBlOwogICAgICB0eXBlZGVmIF9UcmFpdHMgdHJhaXRzX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlw ZW5hbWUgdHJhaXRzX3R5cGU6OmludF90eXBlIGludF90eXBlOwoKICAgICAgaW50X3R5cGUgX19w bGVuID0gc3RhdGljX2Nhc3Q8c2l6ZV90PihfX25ld2xlbiAtIF9fb2xkbGVuKTsKICAgICAgY2hh cl90eXBlKiBfX3BhZHMgPSBzdGF0aWNfY2FzdDxjaGFyX3R5cGUqPihfX2J1aWx0aW5fYWxsb2Nh KHNpemVvZihjaGFyX3R5cGUpICogX19wbGVuKSk7CiAgICAgIHRyYWl0c190eXBlOjphc3NpZ24o X19wYWRzLCBfX3BsZW4sIF9fZmlsbCk7CgogICAgICBjaGFyX3R5cGUqIF9fYmVnOwogICAgICBj aGFyX3R5cGUqIF9fZW5kOwogICAgICBzaXplX3QgX19tb2QgPSAwOwogICAgICBzaXplX3QgX19i ZWdsZW47CiAgICAgIGlvc19iYXNlOjpmbXRmbGFncyBfX2FkanVzdCA9IF9faW8uZmxhZ3MoKSAm IGlvc19iYXNlOjphZGp1c3RmaWVsZDsKCiAgICAgIGlmIChfX2FkanVzdCA9PSBpb3NfYmFzZTo6 bGVmdCkKICAgICAgICB7CgogICAgICAgICAgX19iZWcgPSBjb25zdF9jYXN0PGNoYXJfdHlwZSo+ KF9fb2xkcyk7CiAgICAgICAgICBfX2JlZ2xlbiA9IF9fb2xkbGVuOwogICAgICAgICAgX19lbmQg PSBfX3BhZHM7CiAgICAgICAgfQogICAgICBlbHNlIGlmIChfX2FkanVzdCA9PSBpb3NfYmFzZTo6 aW50ZXJuYWwgJiYgX19udW0pCiAgICAgICAgewoKCgogICAgICAgICAgbG9jYWxlIF9fbG9jID0g X19pby5nZXRsb2MoKTsKICAgICAgICAgIGNvbnN0IGN0eXBlPF9DaGFyVD4mIF9fY3R5cGUgPSB1 c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKTsKICAgICAgICAgIGNvbnN0IGNoYXJfdHlw ZSBfX21pbnVzID0gX19jdHlwZS53aWRlbignLScpOwogICAgICAgICAgY29uc3QgY2hhcl90eXBl IF9fcGx1cyA9IF9fY3R5cGUud2lkZW4oJysnKTsKICAgICAgICAgIGJvb2wgX190ZXN0c2lnbiA9 IF9fb2xkc1swXSA9PSBfX21pbnVzIHx8IF9fb2xkc1swXSA9PSBfX3BsdXM7CiAgICAgICAgICBi b29sIF9fdGVzdGhleCA9IF9fY3R5cGUud2lkZW4oJzAnKSA9PSBfX29sZHNbMF0KICAgICAgICAg ICAgICAgICAgICAgICAgICAgJiYgKF9fY3R5cGUud2lkZW4oJ3gnKSA9PSBfX29sZHNbMV0KICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IF9fY3R5cGUud2lkZW4oJ1gnKSA9PSBfX29s ZHNbMV0pOwogICAgICAgICAgaWYgKF9fdGVzdGhleCkKICAgICAgICAgICAgewogICAgICAgICAg ICAgIF9fbmV3c1swXSA9IF9fb2xkc1swXTsKICAgICAgICAgICAgICBfX25ld3NbMV0gPSBfX29s ZHNbMV07CiAgICAgICAgICAgICAgX19tb2QgKz0gMjsKICAgICAgICAgICAgICBfX25ld3MgKz0g MjsKICAgICAgICAgICAgICBfX2JlZyA9IF9fcGFkczsKICAgICAgICAgICAgICBfX2JlZ2xlbiA9 IF9fcGxlbjsKICAgICAgICAgICAgICBfX2VuZCA9IGNvbnN0X2Nhc3Q8Y2hhcl90eXBlKj4oX19v bGRzICsgX19tb2QpOwogICAgICAgICAgICB9CiAgICAgICAgICBlbHNlIGlmIChfX3Rlc3RzaWdu KQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX19uZXdzWzBdID0gX19vbGRzWzBdID09IF9f cGx1cyA/IF9fcGx1cyA6IF9fbWludXM7CiAgICAgICAgICAgICAgKytfX21vZDsKICAgICAgICAg ICAgICArK19fbmV3czsKICAgICAgICAgICAgICBfX2JlZyA9IF9fcGFkczsKICAgICAgICAgICAg ICBfX2JlZ2xlbiA9IF9fcGxlbjsKICAgICAgICAgICAgICBfX2VuZCA9IGNvbnN0X2Nhc3Q8Y2hh cl90eXBlKj4oX19vbGRzICsgX19tb2QpOwogICAgICAgICAgICB9CiAgICAgICAgICBlbHNlCiAg ICAgICAgICAgIHsKCiAgICAgICAgICAgICAgX19iZWcgPSBfX3BhZHM7CiAgICAgICAgICAgICAg X19iZWdsZW4gPSBfX3BsZW47CiAgICAgICAgICAgICAgX19lbmQgPSBjb25zdF9jYXN0PGNoYXJf dHlwZSo+KF9fb2xkcyk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIGVsc2UKICAgICAg ICB7CgogICAgICAgICAgX19iZWcgPSBfX3BhZHM7CiAgICAgICAgICBfX2JlZ2xlbiA9IF9fcGxl bjsKICAgICAgICAgIF9fZW5kID0gY29uc3RfY2FzdDxjaGFyX3R5cGUqPihfX29sZHMpOwogICAg ICAgIH0KICAgICAgdHJhaXRzX3R5cGU6OmNvcHkoX19uZXdzLCBfX2JlZywgX19iZWdsZW4pOwog ICAgICB0cmFpdHNfdHlwZTo6Y29weShfX25ld3MgKyBfX2JlZ2xlbiwgX19lbmQsIF9fbmV3bGVu IC0gX19iZWdsZW4gLSBfX21vZCk7CiAgICB9CgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy VD4KICAgIHZvaWQKICAgIF9fcGFkKGlvc19iYXNlJiBfX2lvLCBfQ2hhclQgX19maWxsLCBfQ2hh clQqIF9fbmV3cywgY29uc3QgX0NoYXJUKiBfX29sZHMsCiAgICAgICAgICBjb25zdCBzdHJlYW1z aXplIF9fbmV3bGVuLCBjb25zdCBzdHJlYW1zaXplIF9fb2xkbGVuLAogICAgICAgICAgY29uc3Qg Ym9vbCBfX251bSkKICAgIHsKICAgICAgcmV0dXJuIF9fcGFkPF9DaGFyVCwgY2hhcl90cmFpdHM8 X0NoYXJUPiA+KF9faW8sIF9fZmlsbCwgX19uZXdzLCBfX29sZHMsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX25ld2xlbiwgX19vbGRsZW4sIF9fbnVt KTsKICAgIH0KIyAyMDk4ICIvdXNyL2N5Z251cy9iaW4vLi4vaW5jbHVkZS9jKysvMy4xLjEvYml0 cy9sb2NhbGVfZmFjZXRzLnRjYyIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGJv b2wKICAgIF9fdmVyaWZ5X2dyb3VwaW5nKGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQ+JiBfX2dy b3VwaW5nLAogICAgICAgICAgICAgICAgICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVD4mIF9fZ3Jv dXBpbmdfdG1wKQogICAgewogICAgICBpbnQgX19pID0gMDsKICAgICAgaW50IF9faiA9IDA7CiAg ICAgIGNvbnN0IGludCBfX2xlbiA9IF9fZ3JvdXBpbmcuc2l6ZSgpOwogICAgICBjb25zdCBpbnQg X19uID0gX19ncm91cGluZ190bXAuc2l6ZSgpOwogICAgICBib29sIF9fdGVzdCA9IHRydWU7CgoK CgogICAgICB3aGlsZSAoX190ZXN0ICYmIF9faSA8IF9fbiAtIDEpCiAgICAgICAgZm9yIChfX2og PSAwOyBfX3Rlc3QgJiYgX19qIDwgX19sZW4gJiYgX19pIDwgX19uIC0gMTsgKytfX2osKytfX2kp CiAgICAgICAgICBfX3Rlc3QgJj0gX19ncm91cGluZ1tfX2pdID09IF9fZ3JvdXBpbmdfdG1wW19f biAtIF9faSAtIDFdOwoKCiAgICAgIF9faiA9PSBfX2xlbiA/IF9faiA9IDAgOiBfX2o7CiAgICAg IF9fdGVzdCAmPSBfX2dyb3VwaW5nW19fal0gPj0gX19ncm91cGluZ190bXBbX19uIC0gX19pIC0g MV07CiAgICAgIHJldHVybiBfX3Rlc3Q7CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUg X0NoYXJUPgogICAgX0NoYXJUKgogICAgX19hZGRfZ3JvdXBpbmcoX0NoYXJUKiBfX3MsIF9DaGFy VCBfX3NlcCwKICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIF9fZ2JlZywgY29uc3QgY2hh ciogX19nZW5kLAogICAgICAgICAgICAgICAgICAgY29uc3QgX0NoYXJUKiBfX2ZpcnN0LCBjb25z dCBfQ2hhclQqIF9fbGFzdCkKICAgIHsKICAgICAgaWYgKF9fbGFzdCAtIF9fZmlyc3QgPiAqX19n YmVnKQogICAgICAgIHsKICAgICAgICAgIF9fcyA9IF9fYWRkX2dyb3VwaW5nKF9fcywgX19zZXAs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19nYmVnICsgMSA9PSBfX2dlbmQgPyBf X2diZWcgOiBfX2diZWcgKyAxKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZ2Vu ZCwgX19maXJzdCwgX19sYXN0IC0gKl9fZ2JlZyk7CiAgICAgICAgICBfX2ZpcnN0ID0gX19sYXN0 IC0gKl9fZ2JlZzsKICAgICAgICAgICpfX3MrKyA9IF9fc2VwOwogICAgICAgIH0KICAgICAgZG8K ICAgICAgICAqX19zKysgPSAqX19maXJzdCsrOwogICAgICB3aGlsZSAoX19maXJzdCAhPSBfX2xh c3QpOwogICAgICByZXR1cm4gX19zOwogICAgfQoKCgoKICBleHRlcm4gdGVtcGxhdGUgY2xhc3Mg bW9uZXlwdW5jdDxjaGFyLCBmYWxzZT47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIG1vbmV5cHVu Y3Q8Y2hhciwgdHJ1ZT47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIG1vbmV5cHVuY3RfYnluYW1l PGNoYXIsIGZhbHNlPjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgbW9uZXlwdW5jdF9ieW5hbWU8 Y2hhciwgdHJ1ZT47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIG1vbmV5X2dldDxjaGFyPjsKICBl eHRlcm4gdGVtcGxhdGUgY2xhc3MgbW9uZXlfcHV0PGNoYXI+OwogIGV4dGVybiB0ZW1wbGF0ZSBj bGFzcyBtb25leXB1bmN0PHdjaGFyX3QsIGZhbHNlPjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3Mg bW9uZXlwdW5jdDx3Y2hhcl90LCB0cnVlPjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgbW9uZXlw dW5jdF9ieW5hbWU8d2NoYXJfdCwgZmFsc2U+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBtb25l eXB1bmN0X2J5bmFtZTx3Y2hhcl90LCB0cnVlPjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgbW9u ZXlfZ2V0PHdjaGFyX3Q+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBtb25leV9wdXQ8d2NoYXJf dD47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIG51bXB1bmN0PGNoYXI+OwogIGV4dGVybiB0ZW1w bGF0ZSBjbGFzcyBudW1wdW5jdF9ieW5hbWU8Y2hhcj47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNz IG51bV9nZXQ8Y2hhcj47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIG51bV9wdXQ8Y2hhcj47CiAg ZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIG51bXB1bmN0PHdjaGFyX3Q+OwogIGV4dGVybiB0ZW1wbGF0 ZSBjbGFzcyBudW1wdW5jdF9ieW5hbWU8d2NoYXJfdD47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNz IG51bV9nZXQ8d2NoYXJfdD47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIG51bV9wdXQ8d2NoYXJf dD47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIF9fdGltZXB1bmN0PGNoYXI+OwogIGV4dGVybiB0 ZW1wbGF0ZSBjbGFzcyB0aW1lX3B1dDxjaGFyPjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgdGlt ZV9wdXRfYnluYW1lPGNoYXI+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyB0aW1lX2dldDxjaGFy PjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgdGltZV9nZXRfYnluYW1lPGNoYXI+OwogIGV4dGVy biB0ZW1wbGF0ZSBjbGFzcyBfX3RpbWVwdW5jdDx3Y2hhcl90PjsKICBleHRlcm4gdGVtcGxhdGUg Y2xhc3MgdGltZV9wdXQ8d2NoYXJfdD47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIHRpbWVfcHV0 X2J5bmFtZTx3Y2hhcl90PjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgdGltZV9nZXQ8d2NoYXJf dD47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIHRpbWVfZ2V0X2J5bmFtZTx3Y2hhcl90PjsKICBl eHRlcm4gdGVtcGxhdGUgY2xhc3MgbWVzc2FnZXM8Y2hhcj47CiAgZXh0ZXJuIHRlbXBsYXRlIGNs YXNzIG1lc3NhZ2VzX2J5bmFtZTxjaGFyPjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgbWVzc2Fn ZXM8d2NoYXJfdD47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIG1lc3NhZ2VzX2J5bmFtZTx3Y2hh cl90PjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgY3R5cGVfYnluYW1lPGNoYXI+OwogIGV4dGVy biB0ZW1wbGF0ZSBjbGFzcyBjdHlwZV9ieW5hbWU8d2NoYXJfdD47CiAgZXh0ZXJuIHRlbXBsYXRl IGNsYXNzIGNvZGVjdnRfYnluYW1lPGNoYXIsIGNoYXIsIG1ic3RhdGVfdD47CiAgZXh0ZXJuIHRl bXBsYXRlIGNsYXNzIGNvZGVjdnRfYnluYW1lPHdjaGFyX3QsIGNoYXIsIG1ic3RhdGVfdD47CiAg ZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIGNvbGxhdGU8Y2hhcj47CiAgZXh0ZXJuIHRlbXBsYXRlIGNs YXNzIGNvbGxhdGVfYnluYW1lPGNoYXI+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBjb2xsYXRl PHdjaGFyX3Q+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBjb2xsYXRlX2J5bmFtZTx3Y2hhcl90 PjsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBjb25zdCBjb2RlY3Z0PGNoYXIsIGNoYXIsIG1ic3Rh dGVfdD4mCiAgICB1c2VfZmFjZXQ8Y29kZWN2dDxjaGFyLCBjaGFyLCBtYnN0YXRlX3Q+ID4oY29u c3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgY29uc3QgY29sbGF0ZTxjaGFyPiYK ICAgIHVzZV9mYWNldDxjb2xsYXRlPGNoYXI+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0 ZW1wbGF0ZQogICAgY29uc3QgbnVtcHVuY3Q8Y2hhcj4mCiAgICB1c2VfZmFjZXQ8bnVtcHVuY3Q8 Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBjb25zdCBudW1f cHV0PGNoYXI+JgogICAgdXNlX2ZhY2V0PG51bV9wdXQ8Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsK CiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBjb25zdCBudW1fZ2V0PGNoYXI+JgogICAgdXNlX2ZhY2V0 PG51bV9nZXQ8Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBj b25zdCBtb25leXB1bmN0PGNoYXIsIHRydWU+JgogICAgdXNlX2ZhY2V0PG1vbmV5cHVuY3Q8Y2hh ciwgdHJ1ZT4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBjb25zdCBt b25leXB1bmN0PGNoYXIsIGZhbHNlPiYKICAgIHVzZV9mYWNldDxtb25leXB1bmN0PGNoYXIsIGZh bHNlPiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGNvbnN0IG1vbmV5 X3B1dDxjaGFyPiYKICAgIHVzZV9mYWNldDxtb25leV9wdXQ8Y2hhcj4gPihjb25zdCBsb2NhbGUm KTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBjb25zdCBtb25leV9nZXQ8Y2hhcj4mCiAgICB1c2Vf ZmFjZXQ8bW9uZXlfZ2V0PGNoYXI+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0 ZQogICAgY29uc3QgX190aW1lcHVuY3Q8Y2hhcj4mCiAgICB1c2VfZmFjZXQ8X190aW1lcHVuY3Q8 Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBjb25zdCB0aW1l X3B1dDxjaGFyPiYKICAgIHVzZV9mYWNldDx0aW1lX3B1dDxjaGFyPiA+KGNvbnN0IGxvY2FsZSYp OwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGNvbnN0IHRpbWVfZ2V0PGNoYXI+JgogICAgdXNlX2Zh Y2V0PHRpbWVfZ2V0PGNoYXI+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQog ICAgY29uc3QgbWVzc2FnZXM8Y2hhcj4mCiAgICB1c2VfZmFjZXQ8bWVzc2FnZXM8Y2hhcj4gPihj b25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBjb25zdCBjb2RlY3Z0PHdjaGFy X3QsIGNoYXIsIG1ic3RhdGVfdD4mCiAgICB1c2VfZmFjZXQ8Y29kZWN2dDx3Y2hhcl90LCBjaGFy LCBtYnN0YXRlX3Q+ID4obG9jYWxlIGNvbnN0Jik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgY29u c3QgY29sbGF0ZTx3Y2hhcl90PiYKICAgIHVzZV9mYWNldDxjb2xsYXRlPHdjaGFyX3Q+ID4oY29u c3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgY29uc3QgbnVtcHVuY3Q8d2NoYXJf dD4mCiAgICB1c2VfZmFjZXQ8bnVtcHVuY3Q8d2NoYXJfdD4gPihjb25zdCBsb2NhbGUmKTsKCiAg ZXh0ZXJuIHRlbXBsYXRlCiAgICBjb25zdCBudW1fcHV0PHdjaGFyX3Q+JgogICAgdXNlX2ZhY2V0 PG51bV9wdXQ8d2NoYXJfdD4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAg ICBjb25zdCBudW1fZ2V0PHdjaGFyX3Q+JgogICAgdXNlX2ZhY2V0PG51bV9nZXQ8d2NoYXJfdD4g Pihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBjb25zdCBtb25leXB1bmN0 PHdjaGFyX3QsIHRydWU+JgogICAgdXNlX2ZhY2V0PG1vbmV5cHVuY3Q8d2NoYXJfdCwgdHJ1ZT4g Pihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBjb25zdCBtb25leXB1bmN0 PHdjaGFyX3QsIGZhbHNlPiYKICAgIHVzZV9mYWNldDxtb25leXB1bmN0PHdjaGFyX3QsIGZhbHNl PiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGNvbnN0IG1vbmV5X3B1 dDx3Y2hhcl90PiYKICAgIHVzZV9mYWNldDxtb25leV9wdXQ8d2NoYXJfdD4gPihjb25zdCBsb2Nh bGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBjb25zdCBtb25leV9nZXQ8d2NoYXJfdD4mCiAg ICB1c2VfZmFjZXQ8bW9uZXlfZ2V0PHdjaGFyX3Q+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVy biB0ZW1wbGF0ZQogICAgY29uc3QgX190aW1lcHVuY3Q8d2NoYXJfdD4mCiAgICB1c2VfZmFjZXQ8 X190aW1lcHVuY3Q8d2NoYXJfdD4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRl CiAgICBjb25zdCB0aW1lX3B1dDx3Y2hhcl90PiYKICAgIHVzZV9mYWNldDx0aW1lX3B1dDx3Y2hh cl90PiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGNvbnN0IHRpbWVf Z2V0PHdjaGFyX3Q+JgogICAgdXNlX2ZhY2V0PHRpbWVfZ2V0PHdjaGFyX3Q+ID4oY29uc3QgbG9j YWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgY29uc3QgbWVzc2FnZXM8d2NoYXJfdD4mCiAg ICB1c2VfZmFjZXQ8bWVzc2FnZXM8d2NoYXJfdD4gPihjb25zdCBsb2NhbGUmKTsKCgogIGV4dGVy biB0ZW1wbGF0ZQogICAgYm9vbAogICAgaGFzX2ZhY2V0PGN0eXBlPGNoYXI+ID4oY29uc3QgbG9j YWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgYm9vbAogICAgaGFzX2ZhY2V0PGNvZGVjdnQ8 Y2hhciwgY2hhciwgbWJzdGF0ZV90PiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxh dGUKICAgIGJvb2wKICAgIGhhc19mYWNldDxjb2xsYXRlPGNoYXI+ID4oY29uc3QgbG9jYWxlJik7 CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgYm9vbAogICAgaGFzX2ZhY2V0PG51bXB1bmN0PGNoYXI+ ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgYm9vbAogICAgaGFzX2Zh Y2V0PG51bV9wdXQ8Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAg ICBib29sCiAgICBoYXNfZmFjZXQ8bnVtX2dldDxjaGFyPiA+KGNvbnN0IGxvY2FsZSYpOwoKICBl eHRlcm4gdGVtcGxhdGUKICAgIGJvb2wKICAgIGhhc19mYWNldDxtb25leXB1bmN0PGNoYXI+ID4o Y29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgYm9vbAogICAgaGFzX2ZhY2V0 PG1vbmV5X3B1dDxjaGFyPiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAg IGJvb2wKICAgIGhhc19mYWNldDxtb25leV9nZXQ8Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsKCiAg ZXh0ZXJuIHRlbXBsYXRlCiAgICBib29sCiAgICBoYXNfZmFjZXQ8X190aW1lcHVuY3Q8Y2hhcj4g Pihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBib29sCiAgICBoYXNfZmFj ZXQ8dGltZV9wdXQ8Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAg ICBib29sCiAgICBoYXNfZmFjZXQ8dGltZV9nZXQ8Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsKCiAg ZXh0ZXJuIHRlbXBsYXRlCiAgICBib29sCiAgICBoYXNfZmFjZXQ8bWVzc2FnZXM8Y2hhcj4gPihj b25zdCBsb2NhbGUmKTsKCiBleHRlcm4gdGVtcGxhdGUKICAgIGJvb2wKICAgIGhhc19mYWNldDxj dHlwZTx3Y2hhcl90PiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGJv b2wKICAgIGhhc19mYWNldDxjb2RlY3Z0PHdjaGFyX3QsIGNoYXIsIG1ic3RhdGVfdD4gPihjb25z dCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBib29sCiAgICBoYXNfZmFjZXQ8Y29s bGF0ZTx3Y2hhcl90PiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGJv b2wKICAgIGhhc19mYWNldDxudW1wdW5jdDx3Y2hhcl90PiA+KGNvbnN0IGxvY2FsZSYpOwoKICBl eHRlcm4gdGVtcGxhdGUKICAgIGJvb2wKICAgIGhhc19mYWNldDxudW1fcHV0PHdjaGFyX3Q+ID4o Y29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgYm9vbAogICAgaGFzX2ZhY2V0 PG51bV9nZXQ8d2NoYXJfdD4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAg ICBib29sCiAgICBoYXNfZmFjZXQ8bW9uZXlwdW5jdDx3Y2hhcl90PiA+KGNvbnN0IGxvY2FsZSYp OwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGJvb2wKICAgIGhhc19mYWNldDxtb25leV9wdXQ8d2No YXJfdD4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBib29sCiAgICBo YXNfZmFjZXQ8bW9uZXlfZ2V0PHdjaGFyX3Q+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0 ZW1wbGF0ZQogICAgYm9vbAogICAgaGFzX2ZhY2V0PF9fdGltZXB1bmN0PHdjaGFyX3Q+ID4oY29u c3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgYm9vbAogICAgaGFzX2ZhY2V0PHRp bWVfcHV0PHdjaGFyX3Q+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAg Ym9vbAogICAgaGFzX2ZhY2V0PHRpbWVfZ2V0PHdjaGFyX3Q+ID4oY29uc3QgbG9jYWxlJik7Cgog IGV4dGVybiB0ZW1wbGF0ZQogICAgYm9vbAogICAgaGFzX2ZhY2V0PG1lc3NhZ2VzPHdjaGFyX3Q+ ID4oY29uc3QgbG9jYWxlJik7Cn0KIyA0NyAiL3Vzci9jeWdudXMvYmluLy4uL2luY2x1ZGUvYysr LzMuMS4xL2xvY2FsZSIgMiAzCiMgMzggIi91c3IvY3lnbnVzL2Jpbi8uLi9pbmNsdWRlL2MrKy8z LjEuMS9iaXRzL29zdHJlYW0udGNjIiAyIDMKCm5hbWVzcGFjZSBzdGQKewogIHRlbXBsYXRlPHR5 cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJU LCBfVHJhaXRzPjo6c2VudHJ5OjoKICAgIHNlbnRyeShiYXNpY19vc3RyZWFtPF9DaGFyVCxfVHJh aXRzPiYgX19vcykKICAgIDogX01fb2soX19vcy5nb29kKCkpLCBfTV9vcyhfX29zKQogICAgewoK ICAgICAgaWYgKF9NX29rICYmIF9fb3MudGllKCkpCiAgICAgICAgX19vcy50aWUoKS0+Zmx1c2go KTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgog ICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfb3N0cmVhbTxfQ2hh clQsIF9UcmFpdHM+OjoKICAgIG9wZXJhdG9yPDwoX19vc3RyZWFtX3R5cGUmICgqX19wZikoX19v c3RyZWFtX3R5cGUmKSkKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcyk7CiAgICAgIGlm IChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsgX19wZigqdGhp cyk7IH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoK ICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAg ICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAg ICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJu ICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp dHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19vc3RyZWFt PF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3BlcmF0b3I8PChfX2lvc190eXBlJiAoKl9fcGYpKF9f aW9zX3R5cGUmKSkKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcyk7CiAgICAgIGlmIChf X2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsgX19wZigqdGhpcyk7 IH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAg ICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAg ICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAg ICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0 aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+ CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19vc3RyZWFtPF9D aGFyVCwgX1RyYWl0cz46OgogICAgb3BlcmF0b3I8PChpb3NfYmFzZSYgKCpfX3BmKShpb3NfYmFz ZSYpKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzKTsKICAgICAgaWYgKF9fY2VyYikK ICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgeyBfX3BmKCp0aGlzKTsgfQogICAg ICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAg ICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgo dGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAg ICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAg ICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJh c2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBf VHJhaXRzPjo6b3BlcmF0b3I8PChfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiaW4pCiAgICB7CiAgICAg IHNlbnRyeSBfX2NlcmIoKnRoaXMpOwogICAgICBpZiAoX19jZXJiICYmIF9fc2JpbikKICAgICAg ICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlmICghX19jb3B5 X3N0cmVhbWJ1ZnMoKnRoaXMsIF9fc2JpbiwgdGhpcy0+cmRidWYoKSkpCiAgICAgICAgICAgICAg ICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAgICAgICAgIH0KICAgICAg ICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAg ICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRo aXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAg ICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgZWxzZSBpZiAoIV9fc2JpbikK ICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgcmV0dXJuICp0 aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+ CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19vc3RyZWFtPF9D aGFyVCwgX1RyYWl0cz46Om9wZXJhdG9yPDwoYm9vbCBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBf X2NlcmIoKnRoaXMpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQog ICAgICAgICAgICB7CiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1wdXQp KQogICAgICAgICAgICAgICAgaWYgKF9NX2ZudW1wdXQtPnB1dCgqdGhpcywgKnRoaXMsIHRoaXMt PmZpbGwoKSwgX19uKS5mYWlsZWQoKSkKICAgICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUo aW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlv biYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShp b3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAm IGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAg ICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwg X1RyYWl0cz4mCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46Om9wZXJhdG9yPDwo bG9uZyBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMpOwogICAgICBpZiAoX19j ZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAg Y2hhcl90eXBlIF9fYyA9IHRoaXMtPmZpbGwoKTsKICAgICAgICAgICAgICBpb3NfYmFzZTo6Zm10 ZmxhZ3MgX19mbXQgPSB0aGlzLT5mbGFncygpICYgaW9zX2Jhc2U6OmJhc2VmaWVsZDsKICAgICAg ICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bXB1dCkpCiAgICAgICAgICAgICAgICB7 CiAgICAgICAgICAgICAgICAgIGJvb2wgX19iID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgIGlm ICgoX19mbXQgJiBpb3NfYmFzZTo6b2N0KSB8fCAoX19mbXQgJiBpb3NfYmFzZTo6aGV4KSkKICAg ICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIF9f bCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+KF9fbik7CiAgICAgICAgICAgICAgICAgICAg ICBfX2IgPSBfTV9mbnVtcHV0LT5wdXQoKnRoaXMsICp0aGlzLCBfX2MsIF9fbCkuZmFpbGVkKCk7 CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAg ICAgICAgICAgX19iID0gX01fZm51bXB1dC0+cHV0KCp0aGlzLCAqdGhpcywgX19jLCBfX24pLmZh aWxlZCgpOwogICAgICAgICAgICAgICAgICBpZiAoX19iKQogICAgICAgICAgICAgICAgICAgIHRo aXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgICAgfQogICAgICAg ICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoK CiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAg ICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQog ICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVy biAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh aXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfb3N0cmVh bTxfQ2hhclQsIF9UcmFpdHM+OjpvcGVyYXRvcjw8KHVuc2lnbmVkIGxvbmcgX19uKQogICAgewog ICAgICBzZW50cnkgX19jZXJiKCp0aGlzKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAg ICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNl dChfTV9mbnVtcHV0KSkKICAgICAgICAgICAgICAgIGlmIChfTV9mbnVtcHV0LT5wdXQoKnRoaXMs ICp0aGlzLCB0aGlzLT5maWxsKCksIF9fbikuZmFpbGVkKCkpCiAgICAgICAgICAgICAgICAgIHRo aXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICB9CiAgICAgICAgICBj YXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhp cy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5l eGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhy b3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCgog IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29z dHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRz Pjo6b3BlcmF0b3I8PChsb25nIGxvbmcgX19uKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0 aGlzKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAg ICAgewogICAgICAgICAgICAgIGNoYXJfdHlwZSBfX2MgPSB0aGlzLT5maWxsKCk7CiAgICAgICAg ICAgICAgaW9zX2Jhc2U6OmZtdGZsYWdzIF9fZm10ID0gdGhpcy0+ZmxhZ3MoKSAmIGlvc19iYXNl OjpiYXNlZmllbGQ7CiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1wdXQp KQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBib29sIF9fYiA9IGZhbHNlOwog ICAgICAgICAgICAgICAgICBpZiAoKF9fZm10ICYgaW9zX2Jhc2U6Om9jdCkgfHwgKF9fZm10ICYg aW9zX2Jhc2U6OmhleCkpCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAg ICAgdW5zaWduZWQgbG9uZyBsb25nIF9fbDsKICAgICAgICAgICAgICAgICAgICAgIF9fbCA9IHN0 YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4oX19uKTsKICAgICAgICAgICAgICAgICAgICAg IF9fYiA9IF9NX2ZudW1wdXQtPnB1dCgqdGhpcywgKnRoaXMsIF9fYywgX19sKS5mYWlsZWQoKTsK ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAg ICAgICAgICBfX2IgPSBfTV9mbnVtcHV0LT5wdXQoKnRoaXMsICp0aGlzLCBfX2MsIF9fbikuZmFp bGVkKCk7CiAgICAgICAgICAgICAgICAgIGlmIChfX2IpCiAgICAgICAgICAgICAgICAgICAgdGhp cy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAg ICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoK ICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAg ICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAg ICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJu ICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp dHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19vc3RyZWFt PF9DaGFyVCwgX1RyYWl0cz46Om9wZXJhdG9yPDwodW5zaWduZWQgbG9uZyBsb25nIF9fbikKICAg IHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcyk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAg ewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpZiAoX01fY2hlY2tf ZmFjZXQoX01fZm51bXB1dCkpCiAgICAgICAgICAgICAgICBpZiAoX01fZm51bXB1dC0+cHV0KCp0 aGlzLCAqdGhpcywgdGhpcy0+ZmlsbCgpLCBfX24pLmZhaWxlZCgpKQogICAgICAgICAgICAgICAg ICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgfQogICAgICAg ICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAg IHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhp cy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAg IHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9 CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNp Y19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1Ry YWl0cz46Om9wZXJhdG9yPDwoZG91YmxlIF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigq dGhpcyk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAg ICAgIHsKICAgICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bXB1dCkpCiAgICAg ICAgICAgICAgICBpZiAoX01fZm51bXB1dC0+cHV0KCp0aGlzLCAqdGhpcywgdGhpcy0+ZmlsbCgp LCBfX24pLmZhaWxlZCgpKQogICAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFz ZTo6YmFkYml0KTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2Zh aWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNl OjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jh c2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAg ICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D aGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRz PiYKICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6b3BlcmF0b3I8PChsb25nIGRv dWJsZSBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMpOwogICAgICBpZiAoX19j ZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAg aWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1wdXQpKQogICAgICAgICAgICAgICAgaWYgKF9NX2Zu dW1wdXQtPnB1dCgqdGhpcywgKnRoaXMsIHRoaXMtPmZpbGwoKSwgX19uKS5mYWlsZWQoKSkKICAg ICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAg ICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoK ICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAg ICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAg ICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJu ICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp dHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19vc3RyZWFt PF9DaGFyVCwgX1RyYWl0cz46Om9wZXJhdG9yPDwoY29uc3Qgdm9pZCogX19uKQogICAgewogICAg ICBzZW50cnkgX19jZXJiKCp0aGlzKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAg ICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChf TV9mbnVtcHV0KSkKICAgICAgICAgICAgICAgIGlmIChfTV9mbnVtcHV0LT5wdXQoKnRoaXMsICp0 aGlzLCB0aGlzLT5maWxsKCksIF9fbikuZmFpbGVkKCkpCiAgICAgICAgICAgICAgICAgIHRoaXMt PnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRj aChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+ c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNl cHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7 CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVh bTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Ojpw dXQoY2hhcl90eXBlIF9fYykKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcyk7CiAgICAg IGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgaW50X3R5cGUgX19wdXQgPSByZGJ1Zigp LT5zcHV0YyhfX2MpOwogICAgICAgICAgaWYgKHRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfX3B1 dCwgdHJhaXRzX3R5cGU6OmVvZigpKSkKICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jh c2U6OmJhZGJpdCk7CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBs YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08 X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6d3Jp dGUoY29uc3QgX0NoYXJUKiBfX3MsIHN0cmVhbXNpemUgX19uKQogICAgewogICAgICBzZW50cnkg X19jZXJiKCp0aGlzKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICBzdHJl YW1zaXplIF9fcHV0ID0gdGhpcy0+cmRidWYoKS0+c3B1dG4oX19zLCBfX24pOwogICAgICAgICAg aWYgKCBfX3B1dCAhPSBfX24pCiAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpi YWRiaXQpOwogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFy VCwgX1RyYWl0cz4mCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OmZsdXNoKCkK ICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcyk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAg ICAgewogICAgICAgICAgaWYgKHRoaXMtPnJkYnVmKCkgJiYgdGhpcy0+cmRidWYoKS0+cHVic3lu YygpID09IC0xKQogICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsK ICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgdHlwZW5hbWUgYmFzaWNfb3N0cmVhbTxfQ2hh clQsIF9UcmFpdHM+Ojpwb3NfdHlwZQogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+ Ojp0ZWxscCgpCiAgICB7CiAgICAgIHBvc190eXBlIF9fcmV0ID0gcG9zX3R5cGUoLTEpOwogICAg ICBpZiAoIXRoaXMtPmZhaWwoKSkKICAgICAgICBfX3JldCA9IHRoaXMtPnJkYnVmKCktPnB1YnNl ZWtvZmYoMCwgaW9zX2Jhc2U6OmN1ciwgaW9zX2Jhc2U6Om91dCk7CiAgICAgIHJldHVybiBfX3Jl dDsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4K ICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX29zdHJlYW08X0No YXJULCBfVHJhaXRzPjo6c2Vla3AocG9zX3R5cGUgX19wb3MpCiAgICB7CiAgICAgIGlmICghdGhp cy0+ZmFpbCgpKQogICAgICAgIHsKCgogICAgICAgICAgcG9zX3R5cGUgX19lcnIgPSB0aGlzLT5y ZGJ1ZigpLT5wdWJzZWVrcG9zKF9fcG9zLCBpb3NfYmFzZTo6b3V0KTsKCgogICAgICAgICAgaWYg KF9fZXJyID09IHBvc190eXBlKG9mZl90eXBlKC0xKSkpCiAgICAgICAgICAgIHRoaXMtPnNldHN0 YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKCiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAg ICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJh c2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBf VHJhaXRzPjo6CiAgICBzZWVrcChvZmZfdHlwZSBfX29mZiwgaW9zX2Jhc2U6OnNlZWtkaXIgX19k KQogICAgewogICAgICBpZiAoIXRoaXMtPmZhaWwoKSkKICAgICAgICB7CgoKICAgICAgICAgIHBv c190eXBlIF9fZXJyID0gdGhpcy0+cmRidWYoKS0+cHVic2Vla29mZihfX29mZiwgX19kLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvc19iYXNl OjpvdXQpOwoKCiAgICAgICAgICBpZiAoX19lcnIgPT0gcG9zX3R5cGUob2ZmX3R5cGUoLTEpKSkK ICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwoKICAgICAgICB9 CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg dHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAg IG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX291dCwgX0NoYXJU IF9fYykKICAgIHsKICAgICAgdHlwZWRlZiBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4g X19vc3RyZWFtX3R5cGU7CiAgICAgIHR5cGVuYW1lIF9fb3N0cmVhbV90eXBlOjpzZW50cnkgX19j ZXJiKF9fb3V0KTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAg ICAgICAgICAgewogICAgICAgICAgICAgIHN0cmVhbXNpemUgX193ID0gX19vdXQud2lkdGgoKTsK ICAgICAgICAgICAgICBfQ2hhclQqIF9fcGFkcyA9IHN0YXRpY19jYXN0PF9DaGFyVCo+KF9fYnVp bHRpbl9hbGxvY2Eoc2l6ZW9mKF9DaGFyVCkgKiAoX193ICsgMSkpKTsKICAgICAgICAgICAgICBf X3BhZHNbMF0gPSBfX2M7CiAgICAgICAgICAgICAgc3RyZWFtc2l6ZSBfX2xlbiA9IDE7CiAgICAg ICAgICAgICAgaWYgKF9fdyA+IF9fbGVuKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAg ICAgICBfX3BhZChfX291dCwgX19vdXQuZmlsbCgpLCBfX3BhZHMsICZfX2MsIF9fdywgX19sZW4s IGZhbHNlKTsKICAgICAgICAgICAgICAgICAgX19sZW4gPSBfX3c7CiAgICAgICAgICAgICAgICB9 CiAgICAgICAgICAgICAgX19vdXQud3JpdGUoX19wYWRzLCBfX2xlbik7CiAgICAgICAgICAgICAg X19vdXQud2lkdGgoMCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYg X19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICBfX291dC5zZXRzdGF0ZShpb3Nf YmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKF9fb3V0LmV4Y2VwdGlvbnMoKSAmIGlv c19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAg fQogICAgICAgIH0KICAgICAgcmV0dXJuIF9fb3V0OwogICAgfQoKCiAgdGVtcGxhdGUgPGNsYXNz IF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I8 PChiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+JiBfX291dCwgY2hhciBfX2MpCiAgICB7CiAg ICAgIHR5cGVkZWYgYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiBfX29zdHJlYW1fdHlwZTsK ICAgICAgdHlwZW5hbWUgX19vc3RyZWFtX3R5cGU6OnNlbnRyeSBfX2NlcmIoX19vdXQpOwogICAg ICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAg ICAgICAgICAgc3RyZWFtc2l6ZSBfX3cgPSBfX291dC53aWR0aCgpOwogICAgICAgICAgICAgIGNo YXIqIF9fcGFkcyA9IHN0YXRpY19jYXN0PGNoYXIqPihfX2J1aWx0aW5fYWxsb2NhKF9fdyArIDEp KTsKICAgICAgICAgICAgICBfX3BhZHNbMF0gPSBfX2M7CiAgICAgICAgICAgICAgc3RyZWFtc2l6 ZSBfX2xlbiA9IDE7CiAgICAgICAgICAgICAgaWYgKF9fdyA+IF9fbGVuKQogICAgICAgICAgICAg ICAgewogICAgICAgICAgICAgICAgICBfX3BhZChfX291dCwgX19vdXQuZmlsbCgpLCBfX3BhZHMs ICZfX2MsIF9fdywgX19sZW4sIGZhbHNlKTsKICAgICAgICAgICAgICAgICAgX19sZW4gPSBfX3c7 CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgX19vdXQud3JpdGUoX19wYWRzLCBfX2xl bik7CiAgICAgICAgICAgICAgX19vdXQud2lkdGgoMCk7CiAgICAgICAgICAgIH0KICAgICAgICAg IGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICBf X291dC5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKF9fb3V0 LmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0 aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuIF9fb3V0OwogICAgIH0K CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNf b3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPF9D aGFyVCwgX1RyYWl0cz4mIF9fb3V0LCBjb25zdCBfQ2hhclQqIF9fcykKICAgIHsKICAgICAgdHlw ZWRlZiBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gX19vc3RyZWFtX3R5cGU7CiAgICAg IHR5cGVuYW1lIF9fb3N0cmVhbV90eXBlOjpzZW50cnkgX19jZXJiKF9fb3V0KTsKICAgICAgaWYg KF9fY2VyYiAmJiBfX3MpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAg ICAgICAgICAgICBzdHJlYW1zaXplIF9fdyA9IF9fb3V0LndpZHRoKCk7CiAgICAgICAgICAgICAg X0NoYXJUKiBfX3BhZHMgPSBzdGF0aWNfY2FzdDxfQ2hhclQqPihfX2J1aWx0aW5fYWxsb2NhKHNp emVvZihfQ2hhclQpICogX193KSk7CiAgICAgICAgICAgICAgc3RyZWFtc2l6ZSBfX2xlbiA9IHN0 YXRpY19jYXN0PHN0cmVhbXNpemU+KF9UcmFpdHM6Omxlbmd0aChfX3MpKTsKICAgICAgICAgICAg ICBpZiAoX193ID4gX19sZW4pCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIF9f cGFkKF9fb3V0LCBfX291dC5maWxsKCksIF9fcGFkcywgX19zLCBfX3csIF9fbGVuLCBmYWxzZSk7 CiAgICAgICAgICAgICAgICAgIF9fcyA9IF9fcGFkczsKICAgICAgICAgICAgICAgICAgX19sZW4g PSBfX3c7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgX19vdXQud3JpdGUoX19zLCBf X2xlbik7CiAgICAgICAgICAgICAgX19vdXQud2lkdGgoMCk7CiAgICAgICAgICAgIH0KICAgICAg ICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAg ICBfX291dC5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKF9f b3V0LmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAg ICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgZWxzZSBpZiAoIV9fcykKICAg ICAgICBfX291dC5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgcmV0dXJuIF9fb3V0 OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAg ICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcjw8KGJhc2ljX29z dHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vdXQsIGNvbnN0IGNoYXIqIF9fcykKICAgIHsKICAg ICAgdHlwZWRlZiBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gX19vc3RyZWFtX3R5cGU7 CgoKCiAgICAgIHR5cGVkZWYgY2hhcl90cmFpdHM8Y2hhcj4gX190cmFpdHNfdHlwZTsKCiAgICAg IHR5cGVuYW1lIF9fb3N0cmVhbV90eXBlOjpzZW50cnkgX19jZXJiKF9fb3V0KTsKICAgICAgaWYg KF9fY2VyYiAmJiBfX3MpCiAgICAgICAgewogICAgICAgICAgc2l6ZV90IF9fY2xlbiA9IF9fdHJh aXRzX3R5cGU6Omxlbmd0aChfX3MpOwogICAgICAgICAgX0NoYXJUKiBfX3dzID0gc3RhdGljX2Nh c3Q8X0NoYXJUKj4oX19idWlsdGluX2FsbG9jYShzaXplb2YoX0NoYXJUKSAqIChfX2NsZW4gKyAx KSkpOwogICAgICAgICAgZm9yIChzaXplX3QgX19pID0gMDsgX19pIDwgX19jbGVuOyArK19faSkK ICAgICAgICAgICAgX193c1tfX2ldID0gX19vdXQud2lkZW4oX19zW19faV0pOwogICAgICAgICAg X0NoYXJUKiBfX3N0ciA9IF9fd3M7CgogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAg ICAgICAgICBzdHJlYW1zaXplIF9fbGVuID0gc3RhdGljX2Nhc3Q8c3RyZWFtc2l6ZT4oX19jbGVu KTsKICAgICAgICAgICAgICBzdHJlYW1zaXplIF9fdyA9IF9fb3V0LndpZHRoKCk7CiAgICAgICAg ICAgICAgX0NoYXJUKiBfX3BhZHMgPSBzdGF0aWNfY2FzdDxfQ2hhclQqPihfX2J1aWx0aW5fYWxs b2NhKHNpemVvZihfQ2hhclQpICogX193KSk7CgogICAgICAgICAgICAgIGlmIChfX3cgPiBfX2xl bikKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgX19wYWQoX19vdXQsIF9fb3V0 LmZpbGwoKSwgX19wYWRzLCBfX3dzLCBfX3csIF9fbGVuLCBmYWxzZSk7CiAgICAgICAgICAgICAg ICAgIF9fc3RyID0gX19wYWRzOwogICAgICAgICAgICAgICAgICBfX2xlbiA9IF9fdzsKICAgICAg ICAgICAgICAgIH0KICAgICAgICAgICAgICBfX291dC53cml0ZShfX3N0ciwgX19sZW4pOwogICAg ICAgICAgICAgIF9fb3V0LndpZHRoKDApOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChl eGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgX19vdXQuc2V0 c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKChfX291dC5leGNlcHRp b25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAg ICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIGVsc2UgaWYgKCFfX3MpCiAgICAgICAgX19vdXQu c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgIHJldHVybiBfX291dDsKICAgIH0KCgog IHRlbXBsYXRlPGNsYXNzIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+ JgogICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+JiBfX291dCwgY29u c3QgY2hhciogX19zKQogICAgewogICAgICB0eXBlZGVmIGJhc2ljX29zdHJlYW08Y2hhciwgX1Ry YWl0cz4gX19vc3RyZWFtX3R5cGU7CiAgICAgIHR5cGVuYW1lIF9fb3N0cmVhbV90eXBlOjpzZW50 cnkgX19jZXJiKF9fb3V0KTsKICAgICAgaWYgKF9fY2VyYiAmJiBfX3MpCiAgICAgICAgewogICAg ICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBzdHJlYW1zaXplIF9fdyA9IF9f b3V0LndpZHRoKCk7CiAgICAgICAgICAgICAgY2hhciogX19wYWRzID0gc3RhdGljX2Nhc3Q8Y2hh cio+KF9fYnVpbHRpbl9hbGxvY2EoX193KSk7CiAgICAgICAgICAgICAgc3RyZWFtc2l6ZSBfX2xl biA9IHN0YXRpY19jYXN0PHN0cmVhbXNpemU+KF9UcmFpdHM6Omxlbmd0aChfX3MpKTsKCiAgICAg ICAgICAgICAgaWYgKF9fdyA+IF9fbGVuKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAg ICAgICBfX3BhZChfX291dCwgX19vdXQuZmlsbCgpLCBfX3BhZHMsIF9fcywgX193LCBfX2xlbiwg ZmFsc2UpOwogICAgICAgICAgICAgICAgICBfX3MgPSBfX3BhZHM7CiAgICAgICAgICAgICAgICAg IF9fbGVuID0gX193OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIF9fb3V0LndyaXRl KF9fcywgX19sZW4pOwogICAgICAgICAgICAgIF9fb3V0LndpZHRoKDApOwogICAgICAgICAgICB9 CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAg ICAgICAgICAgX19vdXQuc2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAg aWYgKChfX291dC5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAg ICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIGVsc2UgaWYgKCFf X3MpCiAgICAgICAgX19vdXQuc2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgIHJldHVy biBfX291dDsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry YWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+ JgogICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3V0LAog ICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+ JiBfX3N0cikKICAgIHsKICAgICAgdHlwZWRlZiBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0 cz4gX19vc3RyZWFtX3R5cGU7CiAgICAgIHR5cGVuYW1lIF9fb3N0cmVhbV90eXBlOjpzZW50cnkg X19jZXJiKF9fb3V0KTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICBjb25z dCBfQ2hhclQqIF9fcyA9IF9fc3RyLmRhdGEoKTsKICAgICAgICAgIHN0cmVhbXNpemUgX193ID0g X19vdXQud2lkdGgoKTsKICAgICAgICAgIF9DaGFyVCogX19wYWRzID0gc3RhdGljX2Nhc3Q8X0No YXJUKj4oX19idWlsdGluX2FsbG9jYShzaXplb2YoX0NoYXJUKSAqIF9fdykpOwogICAgICAgICAg c3RyZWFtc2l6ZSBfX2xlbiA9IHN0YXRpY19jYXN0PHN0cmVhbXNpemU+KF9fc3RyLnNpemUoKSk7 CgoKCiAgICAgICAgICBpZiAoX193ID4gX19sZW4pCiAgICAgICAgICAgIHsKICAgICAgICAgICAg ICBfX3BhZChfX291dCwgX19vdXQuZmlsbCgpLCBfX3BhZHMsIF9fcywgX193LCBfX2xlbiwgZmFs c2UpOwogICAgICAgICAgICAgIF9fcyA9IF9fcGFkczsKICAgICAgICAgICAgICBfX2xlbiA9IF9f dzsKICAgICAgICAgICAgfQogICAgICAgICAgc3RyZWFtc2l6ZSBfX3JlcyA9IF9fb3V0LnJkYnVm KCktPnNwdXRuKF9fcywgX19sZW4pOwogICAgICAgICAgX19vdXQud2lkdGgoMCk7CiAgICAgICAg ICBpZiAoX19yZXMgIT0gX19sZW4pCiAgICAgICAgICAgIF9fb3V0LnNldHN0YXRlKGlvc19iYXNl OjpmYWlsYml0KTsKICAgICAgICB9CiAgICAgIHJldHVybiBfX291dDsKICAgIH0KCgoKCiAgZXh0 ZXJuIHRlbXBsYXRlIGNsYXNzIGJhc2ljX29zdHJlYW08Y2hhcj47CiAgZXh0ZXJuIHRlbXBsYXRl IG9zdHJlYW0mIGVuZGwob3N0cmVhbSYpOwogIGV4dGVybiB0ZW1wbGF0ZSBvc3RyZWFtJiBlbmRz KG9zdHJlYW0mKTsKICBleHRlcm4gdGVtcGxhdGUgb3N0cmVhbSYgZmx1c2gob3N0cmVhbSYpOwog IGV4dGVybiB0ZW1wbGF0ZSBvc3RyZWFtJiBvcGVyYXRvcjw8KG9zdHJlYW0mLCBjaGFyKTsKICBl eHRlcm4gdGVtcGxhdGUgb3N0cmVhbSYgb3BlcmF0b3I8PChvc3RyZWFtJiwgdW5zaWduZWQgY2hh cik7CiAgZXh0ZXJuIHRlbXBsYXRlIG9zdHJlYW0mIG9wZXJhdG9yPDwob3N0cmVhbSYsIHNpZ25l ZCBjaGFyKTsKICBleHRlcm4gdGVtcGxhdGUgb3N0cmVhbSYgb3BlcmF0b3I8PChvc3RyZWFtJiwg Y29uc3QgY2hhciopOwogIGV4dGVybiB0ZW1wbGF0ZSBvc3RyZWFtJiBvcGVyYXRvcjw8KG9zdHJl YW0mLCBjb25zdCB1bnNpZ25lZCBjaGFyKik7CiAgZXh0ZXJuIHRlbXBsYXRlIG9zdHJlYW0mIG9w ZXJhdG9yPDwob3N0cmVhbSYsIGNvbnN0IHNpZ25lZCBjaGFyKik7CgoKICBleHRlcm4gdGVtcGxh dGUgY2xhc3MgYmFzaWNfb3N0cmVhbTx3Y2hhcl90PjsKICBleHRlcm4gdGVtcGxhdGUgd29zdHJl YW0mIGVuZGwod29zdHJlYW0mKTsKICBleHRlcm4gdGVtcGxhdGUgd29zdHJlYW0mIGVuZHMod29z dHJlYW0mKTsKICBleHRlcm4gdGVtcGxhdGUgd29zdHJlYW0mIGZsdXNoKHdvc3RyZWFtJik7CiAg ZXh0ZXJuIHRlbXBsYXRlIHdvc3RyZWFtJiBvcGVyYXRvcjw8KHdvc3RyZWFtJiwgd2NoYXJfdCk7 CiAgZXh0ZXJuIHRlbXBsYXRlIHdvc3RyZWFtJiBvcGVyYXRvcjw8KHdvc3RyZWFtJiwgY2hhcik7 CiAgZXh0ZXJuIHRlbXBsYXRlIHdvc3RyZWFtJiBvcGVyYXRvcjw8KHdvc3RyZWFtJiwgY29uc3Qg d2NoYXJfdCopOwogIGV4dGVybiB0ZW1wbGF0ZSB3b3N0cmVhbSYgb3BlcmF0b3I8PCh3b3N0cmVh bSYsIGNvbnN0IGNoYXIqKTsKCn0KIyAyNzYgIi91c3IvY3lnbnVzL2Jpbi8uLi9pbmNsdWRlL2Mr Ky8zLjEuMS9vc3RyZWFtIiAyIDMKIyA0NiAiL3Vzci9jeWdudXMvYmluLy4uL2luY2x1ZGUvYysr LzMuMS4xL2lvc3RyZWFtIiAyIDMKIyAxICIvdXNyL2N5Z251cy9iaW4vLi4vaW5jbHVkZS9jKysv My4xLjEvaXN0cmVhbSIgMSAzCiMgNDMgIi91c3IvY3lnbnVzL2Jpbi8uLi9pbmNsdWRlL2MrKy8z LjEuMS9pc3RyZWFtIiAzCgoKCgpuYW1lc3BhY2Ugc3RkCnsKCiAgdGVtcGxhdGU8dHlwZW5hbWUg X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgY2xhc3MgYmFzaWNfaXN0cmVhbSA6IHZpcnR1 YWwgcHVibGljIGJhc2ljX2lvczxfQ2hhclQsIF9UcmFpdHM+CiAgICB7CiAgICBwdWJsaWM6Cgog ICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1Ry YWl0czo6aW50X3R5cGUgaW50X3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6 cG9zX3R5cGUgcG9zX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6b2ZmX3R5 cGUgb2ZmX3R5cGU7CiAgICAgIHR5cGVkZWYgX1RyYWl0cyB0cmFpdHNfdHlwZTsKCgogICAgICB0 eXBlZGVmIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+IF9fc3RyZWFtYnVmX3R5cGU7 CiAgICAgIHR5cGVkZWYgYmFzaWNfaW9zPF9DaGFyVCwgX1RyYWl0cz4gX19pb3NfdHlwZTsKICAg ICAgdHlwZWRlZiBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gX19pc3RyZWFtX3R5cGU7 CiAgICAgIHR5cGVkZWYgaXN0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQsIF9UcmFpdHM+IF9faXN0 cmVhbWJ1Zl9pdGVyOwogICAgICB0eXBlZGVmIG51bV9nZXQ8X0NoYXJULCBfX2lzdHJlYW1idWZf aXRlcj4gX19udW1nZXRfdHlwZTsKICAgICAgdHlwZWRlZiBjdHlwZTxfQ2hhclQ+IF9fY3R5cGVf dHlwZTsKCiAgICBwcm90ZWN0ZWQ6CgogICAgICBzdHJlYW1zaXplIF9NX2djb3VudDsKCiAgICBw dWJsaWM6CgogICAgICBleHBsaWNpdAogICAgICBiYXNpY19pc3RyZWFtKF9fc3RyZWFtYnVmX3R5 cGUqIF9fc2IpCiAgICAgIHsKICAgICAgICB0aGlzLT5pbml0KF9fc2IpOwogICAgICAgIF9NX2dj b3VudCA9IHN0cmVhbXNpemUoMCk7CiAgICAgIH0KCiAgICAgIHZpcnR1YWwKICAgICAgfmJhc2lj X2lzdHJlYW0oKQogICAgICB7IF9NX2djb3VudCA9IHN0cmVhbXNpemUoMCk7IH0KCgogICAgICBj bGFzcyBzZW50cnk7CiAgICAgIGZyaWVuZCBjbGFzcyBzZW50cnk7CgoKCiAgICAgIF9faXN0cmVh bV90eXBlJgogICAgICBvcGVyYXRvcj4+KF9faXN0cmVhbV90eXBlJiAoKl9fcGYpKF9faXN0cmVh bV90eXBlJikpOwoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPj4oX19pb3Nf dHlwZSYgKCpfX3BmKShfX2lvc190eXBlJikpOwoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAg IG9wZXJhdG9yPj4oaW9zX2Jhc2UmICgqX19wZikoaW9zX2Jhc2UmKSk7CgoKICAgICAgX19pc3Ry ZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPj4oYm9vbCYgX19uKTsKCiAgICAgIF9faXN0cmVhbV90 eXBlJgogICAgICBvcGVyYXRvcj4+KHNob3J0JiBfX24pOwoKICAgICAgX19pc3RyZWFtX3R5cGUm CiAgICAgIG9wZXJhdG9yPj4odW5zaWduZWQgc2hvcnQmIF9fbik7CgogICAgICBfX2lzdHJlYW1f dHlwZSYKICAgICAgb3BlcmF0b3I+PihpbnQmIF9fbik7CgogICAgICBfX2lzdHJlYW1fdHlwZSYK ICAgICAgb3BlcmF0b3I+Pih1bnNpZ25lZCBpbnQmIF9fbik7CgogICAgICBfX2lzdHJlYW1fdHlw ZSYKICAgICAgb3BlcmF0b3I+Pihsb25nJiBfX24pOwoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAg ICAgIG9wZXJhdG9yPj4odW5zaWduZWQgbG9uZyYgX19uKTsKCgogICAgICBfX2lzdHJlYW1fdHlw ZSYKICAgICAgb3BlcmF0b3I+Pihsb25nIGxvbmcmIF9fbik7CgogICAgICBfX2lzdHJlYW1fdHlw ZSYKICAgICAgb3BlcmF0b3I+Pih1bnNpZ25lZCBsb25nIGxvbmcmIF9fbik7CgoKICAgICAgX19p c3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPj4oZmxvYXQmIF9fZik7CgogICAgICBfX2lzdHJl YW1fdHlwZSYKICAgICAgb3BlcmF0b3I+Pihkb3VibGUmIF9fZik7CgogICAgICBfX2lzdHJlYW1f dHlwZSYKICAgICAgb3BlcmF0b3I+Pihsb25nIGRvdWJsZSYgX19mKTsKCiAgICAgIF9faXN0cmVh bV90eXBlJgogICAgICBvcGVyYXRvcj4+KHZvaWQqJiBfX3ApOwoKICAgICAgX19pc3RyZWFtX3R5 cGUmCiAgICAgIG9wZXJhdG9yPj4oX19zdHJlYW1idWZfdHlwZSogX19zYik7CgoKICAgICAgaW5s aW5lIHN0cmVhbXNpemUKICAgICAgZ2NvdW50KHZvaWQpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9N X2djb3VudDsgfQoKICAgICAgaW50X3R5cGUKICAgICAgZ2V0KHZvaWQpOwoKICAgICAgX19pc3Ry ZWFtX3R5cGUmCiAgICAgIGdldChjaGFyX3R5cGUmIF9fYyk7CgogICAgICBfX2lzdHJlYW1fdHlw ZSYKICAgICAgZ2V0KGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbiwgY2hhcl90eXBlIF9f ZGVsaW0pOwoKICAgICAgaW5saW5lIF9faXN0cmVhbV90eXBlJgogICAgICBnZXQoY2hhcl90eXBl KiBfX3MsIHN0cmVhbXNpemUgX19uKQogICAgICB7IHJldHVybiB0aGlzLT5nZXQoX19zLCBfX24s IHRoaXMtPndpZGVuKCdcbicpKTsgfQoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIGdldChf X3N0cmVhbWJ1Zl90eXBlJiBfX3NiLCBjaGFyX3R5cGUgX19kZWxpbSk7CgogICAgICBpbmxpbmUg X19pc3RyZWFtX3R5cGUmCiAgICAgIGdldChfX3N0cmVhbWJ1Zl90eXBlJiBfX3NiKQogICAgICB7 IHJldHVybiB0aGlzLT5nZXQoX19zYiwgdGhpcy0+d2lkZW4oJ1xuJykpOyB9CgogICAgICBfX2lz dHJlYW1fdHlwZSYKICAgICAgZ2V0bGluZShjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24s IGNoYXJfdHlwZSBfX2RlbGltKTsKCiAgICAgIGlubGluZSBfX2lzdHJlYW1fdHlwZSYKICAgICAg Z2V0bGluZShjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pCiAgICAgIHsgcmV0dXJuIHRo aXMtPmdldGxpbmUoX19zLCBfX24sIHRoaXMtPndpZGVuKCdcbicpKTsgfQoKICAgICAgX19pc3Ry ZWFtX3R5cGUmCiAgICAgIGlnbm9yZShzdHJlYW1zaXplIF9fbiA9IDEsIGludF90eXBlIF9fZGVs aW0gPSB0cmFpdHNfdHlwZTo6ZW9mKCkpOwoKICAgICAgaW50X3R5cGUKICAgICAgcGVlayh2b2lk KTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICByZWFkKGNoYXJfdHlwZSogX19zLCBzdHJl YW1zaXplIF9fbik7CgogICAgICBzdHJlYW1zaXplCiAgICAgIHJlYWRzb21lKGNoYXJfdHlwZSog X19zLCBzdHJlYW1zaXplIF9fbik7CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgcHV0YmFj ayhjaGFyX3R5cGUgX19jKTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICB1bmdldCh2b2lk KTsKCiAgICAgIGludAogICAgICBzeW5jKHZvaWQpOwoKICAgICAgcG9zX3R5cGUKICAgICAgdGVs bGcodm9pZCk7CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgc2Vla2cocG9zX3R5cGUpOwoK ICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIHNlZWtnKG9mZl90eXBlLCBpb3NfYmFzZTo6c2Vl a2Rpcik7CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp dHM+CiAgICBjbGFzcyBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OnNlbnRyeQogICAg ewogICAgcHVibGljOgogICAgICB0eXBlZGVmIF9UcmFpdHMgdHJhaXRzX3R5cGU7CiAgICAgIHR5 cGVkZWYgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4gX19zdHJlYW1idWZfdHlwZTsK ICAgICAgdHlwZWRlZiBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gX19pc3RyZWFtX3R5 cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6Ol9fY3R5cGVfdHlwZSBf X2N0eXBlX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6aW50X3R5cGUgX19p bnRfdHlwZTsKCiAgICAgIGV4cGxpY2l0CiAgICAgIHNlbnRyeShiYXNpY19pc3RyZWFtPF9DaGFy VCwgX1RyYWl0cz4mIF9faXMsIGJvb2wgX19ub3NraXB3cyA9IGZhbHNlKTsKCiAgICAgIG9wZXJh dG9yIGJvb2woKSB7IHJldHVybiBfTV9vazsgfQoKICAgIHByaXZhdGU6CiAgICAgIGJvb2wgX01f b2s7CiAgICB9OwoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz PgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I+PihiYXNp Y19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faW4sIF9DaGFyVCYgX19jKTsKCiAgdGVtcGxh dGU8Y2xhc3MgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08Y2hhciwgX1RyYWl0cz4mCiAgICBv cGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08Y2hhciwgX1RyYWl0cz4mIF9faW4sIHVuc2lnbmVkIGNo YXImIF9fYykKICAgIHsgcmV0dXJuIChfX2luID4+IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhciY+KF9f YykpOyB9CgogIHRlbXBsYXRlPGNsYXNzIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPGNoYXIs IF9UcmFpdHM+JgogICAgb3BlcmF0b3I+PihiYXNpY19pc3RyZWFtPGNoYXIsIF9UcmFpdHM+JiBf X2luLCBzaWduZWQgY2hhciYgX19jKQogICAgeyByZXR1cm4gKF9faW4gPj4gcmVpbnRlcnByZXRf Y2FzdDxjaGFyJj4oX19jKSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt ZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgb3BlcmF0 b3I+PihiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faW4sIF9DaGFyVCogX19zKTsK CiAgdGVtcGxhdGU8Y2xhc3MgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08Y2hhcixfVHJhaXRz PiYKICAgIG9wZXJhdG9yPj4oYmFzaWNfaXN0cmVhbTxjaGFyLF9UcmFpdHM+JiBfX2luLCB1bnNp Z25lZCBjaGFyKiBfX3MpCiAgICB7IHJldHVybiAoX19pbiA+PiByZWludGVycHJldF9jYXN0PGNo YXIqPihfX3MpKTsgfQoKICB0ZW1wbGF0ZTxjbGFzcyBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVh bTxjaGFyLF9UcmFpdHM+JgogICAgb3BlcmF0b3I+PihiYXNpY19pc3RyZWFtPGNoYXIsX1RyYWl0 cz4mIF9faW4sIHNpZ25lZCBjaGFyKiBfX3MpCiAgICB7IHJldHVybiAoX19pbiA+PiByZWludGVy cHJldF9jYXN0PGNoYXIqPihfX3MpKTsgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0 eXBlbmFtZSBfVHJhaXRzPgogICAgY2xhc3MgYmFzaWNfaW9zdHJlYW0KICAgIDogcHVibGljIGJh c2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiwKICAgICAgcHVibGljIGJhc2ljX29zdHJlYW08 X0NoYXJULCBfVHJhaXRzPgogICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBiYXNpY19p c3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gX19pc3RyZWFtX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFz aWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IF9fb3N0cmVhbV90eXBlOwoKICAgICAgZXhwbGlj aXQKICAgICAgYmFzaWNfaW9zdHJlYW0oYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4q IF9fc2IpCiAgICAgIDogX19pc3RyZWFtX3R5cGUoX19zYiksIF9fb3N0cmVhbV90eXBlKF9fc2Ip CiAgICAgIHsgfQoKICAgICAgdmlydHVhbAogICAgICB+YmFzaWNfaW9zdHJlYW0oKSB7IH0KICAg IH07CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBi YXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICB3cyhiYXNpY19pc3RyZWFtPF9DaGFy VCwgX1RyYWl0cz4mIF9faXMpOwp9CgoKCgoKIyAxICIvdXNyL2N5Z251cy9iaW4vLi4vaW5jbHVk ZS9jKysvMy4xLjEvYml0cy9pc3RyZWFtLnRjYyIgMSAzCiMgMzYgIi91c3IvY3lnbnVzL2Jpbi8u Li9pbmNsdWRlL2MrKy8zLjEuMS9iaXRzL2lzdHJlYW0udGNjIiAzCgoKCgpuYW1lc3BhY2Ugc3Rk CnsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNp Y19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OnNlbnRyeTo6CiAgICBzZW50cnkoYmFzaWNfaXN0 cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2luLCBib29sIF9fbm9za2lwd3MpCiAgICB7CiAgICAg IGlmIChfX2luLmdvb2QoKSkKICAgICAgICB7CiAgICAgICAgICBpZiAoX19pbi50aWUoKSkKICAg ICAgICAgICAgX19pbi50aWUoKS0+Zmx1c2goKTsKICAgICAgICAgIGlmICghX19ub3NraXB3cyAm JiAoX19pbi5mbGFncygpICYgaW9zX2Jhc2U6OnNraXB3cykpCiAgICAgICAgICAgIHsKICAgICAg ICAgICAgICBjb25zdCBfX2ludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6OmVvZigpOwogICAg ICAgICAgICAgIF9fc3RyZWFtYnVmX3R5cGUqIF9fc2IgPSBfX2luLnJkYnVmKCk7CiAgICAgICAg ICAgICAgX19pbnRfdHlwZSBfX2MgPSBfX3NiLT5zZ2V0YygpOwoKICAgICAgICAgICAgICBpZiAo X19pbi5fTV9jaGVja19mYWNldChfX2luLl9NX2ZjdHlwZSkpCiAgICAgICAgICAgICAgICB3aGls ZSAoX19jICE9IF9fZW9mCiAgICAgICAgICAgICAgICAgICAgICAgJiYgX19pbi5fTV9mY3R5cGUt PmlzKGN0eXBlX2Jhc2U6OnNwYWNlLCBfX2MpKQogICAgICAgICAgICAgICAgICBfX2MgPSBfX3Ni LT5zbmV4dGMoKTsKCgoKICAgICAgICAgICAgICBpZiAoX19jID09IF9fZW9mKQogICAgICAgICAg ICAgICAgX19pbi5zZXRzdGF0ZShpb3NfYmFzZTo6ZW9mYml0KTsKCiAgICAgICAgICAgIH0KICAg ICAgICB9CgogICAgICBpZiAoX19pbi5nb29kKCkpCiAgICAgICAgX01fb2sgPSB0cnVlOwogICAg ICBlbHNlCiAgICAgICAgewogICAgICAgICAgX01fb2sgPSBmYWxzZTsKICAgICAgICAgIF9faW4u c2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwogICAgICAgIH0KICAgIH0KCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hh clQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIG9w ZXJhdG9yPj4oX19pc3RyZWFtX3R5cGUmICgqX19wZikoX19pc3RyZWFtX3R5cGUmKSkKICAgIHsK ICAgICAgX19wZigqdGhpcyk7CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hh clQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIG9w ZXJhdG9yPj4oX19pb3NfdHlwZSYgKCpfX3BmKShfX2lvc190eXBlJikpCiAgICB7CiAgICAgIF9f cGYoKnRoaXMpOwogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1l IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJh aXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBvcGVyYXRvcj4+ KGlvc19iYXNlJiAoKl9fcGYpKGlvc19iYXNlJikpCiAgICB7CiAgICAgIF9fcGYoKnRoaXMpOwog ICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw ZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJh c2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBvcGVyYXRvcj4+KGJvb2wmIF9fbikK ICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgZmFsc2UpOwogICAgICBpZiAoX19jZXJi KQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaW9z X2Jhc2U6Omlvc3RhdGUgX19lcnIgPSBpb3NfYmFzZTo6aW9zdGF0ZShpb3NfYmFzZTo6Z29vZGJp dCk7CiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1nZXQpKQogICAgICAg ICAgICAgICAgX01fZm51bWdldC0+Z2V0KCp0aGlzLCAwLCAqdGhpcywgX19lcnIsIF9fbik7CiAg ICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoX19lcnIpOwogICAgICAgICAgICB9CiAgICAgICAg ICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAg dGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlz LT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAg dGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0K CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNf aXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFp dHM+OjoKICAgIG9wZXJhdG9yPj4oc2hvcnQmIF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9fY2Vy YigqdGhpcywgZmFsc2UpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRy eQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUgX19lcnIgPSBp b3NfYmFzZTo6aW9zdGF0ZShpb3NfYmFzZTo6Z29vZGJpdCk7CiAgICAgICAgICAgICAgbG9uZyBf X2w7CiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1nZXQpKQogICAgICAg ICAgICAgICAgX01fZm51bWdldC0+Z2V0KCp0aGlzLCAwLCAqdGhpcywgX19lcnIsIF9fbCk7CgoK ICAgICAgICAgICAgICBpZiAoIShfX2VyciAmIGlvc19iYXNlOjpmYWlsYml0KQogICAgICAgICAg ICAgICAgICAmJiAobnVtZXJpY19saW1pdHM8c2hvcnQ+OjptaW4oKSA8PSBfX2wKICAgICAgICAg ICAgICAgICAgICAgICYmIF9fbCA8PSBudW1lcmljX2xpbWl0czxzaG9ydD46Om1heCgpKSkKICAg ICAgICAgICAgICAgIF9fbiA9IF9fbDsKICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAg ICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3Rh dGUoX19lcnIpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFp bCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6 OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFz ZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAg ICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No YXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+ JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIG9wZXJhdG9yPj4odW5z aWduZWQgc2hvcnQmIF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgZmFsc2Up OwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7 CiAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUgX19lcnIgPSBpb3NfYmFzZTo6aW9zdGF0 ZShpb3NfYmFzZTo6Z29vZGJpdCk7CiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9N X2ZudW1nZXQpKQogICAgICAgICAgICAgICAgX01fZm51bWdldC0+Z2V0KCp0aGlzLCAwLCAqdGhp cywgX19lcnIsIF9fbik7CiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoX19lcnIpOwogICAg ICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAg ewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAg ICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAw KQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJl dHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf VHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0 cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIG9wZXJhdG9yPj4oaW50JiBfX24pCiAgICB7CiAg ICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIGZhbHNlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAg ICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlvc19iYXNlOjpp b3N0YXRlIF9fZXJyID0gaW9zX2Jhc2U6Omlvc3RhdGUoaW9zX2Jhc2U6Omdvb2RiaXQpOwogICAg ICAgICAgICAgIGxvbmcgX19sOwogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9m bnVtZ2V0KSkKICAgICAgICAgICAgICAgIF9NX2ZudW1nZXQtPmdldCgqdGhpcywgMCwgKnRoaXMs IF9fZXJyLCBfX2wpOwoKCiAgICAgICAgICAgICAgaWYgKCEoX19lcnIgJiBpb3NfYmFzZTo6ZmFp bGJpdCkKICAgICAgICAgICAgICAgICAgJiYgKG51bWVyaWNfbGltaXRzPGludD46Om1pbigpIDw9 IF9fbAogICAgICAgICAgICAgICAgICAgICAgJiYgX19sIDw9IG51bWVyaWNfbGltaXRzPGludD46 Om1heCgpKSkKICAgICAgICAgICAgICAgIF9fbiA9IF9fbDsKICAgICAgICAgICAgICBlbHNlCiAg ICAgICAgICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKCiAgICAgICAgICAgICAg dGhpcy0+c2V0c3RhdGUoX19lcnIpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNl cHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3Rh dGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25z KCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAg ICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hh clQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIG9w ZXJhdG9yPj4odW5zaWduZWQgaW50JiBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRo aXMsIGZhbHNlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAg ICAgICAgICAgewogICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlIF9fZXJyID0gaW9zX2Jh c2U6Omlvc3RhdGUoaW9zX2Jhc2U6Omdvb2RiaXQpOwogICAgICAgICAgICAgIGlmIChfTV9jaGVj a19mYWNldChfTV9mbnVtZ2V0KSkKICAgICAgICAgICAgICAgIF9NX2ZudW1nZXQtPmdldCgqdGhp cywgMCwgKnRoaXMsIF9fZXJyLCBfX24pOwogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKF9f ZXJyKTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAg ICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRi aXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJh ZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAg fQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg dHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAg IGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBvcGVyYXRvcj4+KGxvbmcmIF9f bikKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgZmFsc2UpOwogICAgICBpZiAoX19j ZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAg aW9zX2Jhc2U6Omlvc3RhdGUgX19lcnIgPSBpb3NfYmFzZTo6aW9zdGF0ZShpb3NfYmFzZTo6Z29v ZGJpdCk7CiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1nZXQpKQogICAg ICAgICAgICAgICAgX01fZm51bWdldC0+Z2V0KCp0aGlzLCAwLCAqdGhpcywgX19lcnIsIF9fbik7 CiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoX19lcnIpOwogICAgICAgICAgICB9CiAgICAg ICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAg ICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0 aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAg ICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAg IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFz aWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9U cmFpdHM+OjoKICAgIG9wZXJhdG9yPj4odW5zaWduZWQgbG9uZyYgX19uKQogICAgewogICAgICBz ZW50cnkgX19jZXJiKCp0aGlzLCBmYWxzZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewog ICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0 ZSBfX2VyciA9IGlvc19iYXNlOjppb3N0YXRlKGlvc19iYXNlOjpnb29kYml0KTsKICAgICAgICAg ICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bWdldCkpCiAgICAgICAgICAgICAgICBfTV9m bnVtZ2V0LT5nZXQoKnRoaXMsIDAsICp0aGlzLCBfX2VyciwgX19uKTsKICAgICAgICAgICAgICB0 aGlzLT5zZXRzdGF0ZShfX2Vycik7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2Vw dGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0 ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMo KSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAg ICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hh clQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIG9w ZXJhdG9yPj4obG9uZyBsb25nJiBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMs IGZhbHNlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAg ICAgICAgewogICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlIF9fZXJyID0gaW9zX2Jhc2U6 Omlvc3RhdGUoaW9zX2Jhc2U6Omdvb2RiaXQpOwogICAgICAgICAgICAgIGlmIChfTV9jaGVja19m YWNldChfTV9mbnVtZ2V0KSkKICAgICAgICAgICAgICAgIF9NX2ZudW1nZXQtPmdldCgqdGhpcywg MCwgKnRoaXMsIF9fZXJyLCBfX24pOwogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKF9fZXJy KTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAg ICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQp OwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJp dCkgIT0gMCkKICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAg ICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu YW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNp Y19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3BlcmF0b3I+Pih1bnNpZ25lZCBsb25n IGxvbmcmIF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgZmFsc2UpOwogICAg ICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAg ICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUgX19lcnIgPSBpb3NfYmFzZTo6aW9zdGF0ZShpb3Nf YmFzZTo6Z29vZGJpdCk7CiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1n ZXQpKQogICAgICAgICAgICAgICAgX01fZm51bWdldC0+Z2V0KCp0aGlzLCAwLCAqdGhpcywgX19l cnIsIF9fbik7CiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoX19lcnIpOwogICAgICAgICAg ICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAg ICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAg ICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAg ICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAq dGhpczsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0 cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08 X0NoYXJULCBfVHJhaXRzPjo6CiAgICBvcGVyYXRvcj4+KGZsb2F0JiBfX24pCiAgICB7CiAgICAg IHNlbnRyeSBfX2NlcmIoKnRoaXMsIGZhbHNlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7 CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0 YXRlIF9fZXJyID0gaW9zX2Jhc2U6Omlvc3RhdGUoaW9zX2Jhc2U6Omdvb2RiaXQpOwogICAgICAg ICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtZ2V0KSkKICAgICAgICAgICAgICAgIF9N X2ZudW1nZXQtPmdldCgqdGhpcywgMCwgKnRoaXMsIF9fZXJyLCBfX24pOwogICAgICAgICAgICAg IHRoaXMtPnNldHN0YXRlKF9fZXJyKTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhj ZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0 YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9u cygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAg ICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRl PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0No YXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBv cGVyYXRvcj4+KGRvdWJsZSYgX19uKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCBm YWxzZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAg ICAgIHsKICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNlOjpp b3N0YXRlKGlvc19iYXNlOjpnb29kYml0KTsKICAgICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFj ZXQoX01fZm51bWdldCkpCiAgICAgICAgICAgICAgICBfTV9mbnVtZ2V0LT5nZXQoKnRoaXMsIDAs ICp0aGlzLCBfX2VyciwgX19uKTsKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShfX2Vycik7 CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAg ICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsK ICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQp ICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAg ICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu YW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNp Y19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3BlcmF0b3I+Pihsb25nIGRvdWJsZSYg X19uKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCBmYWxzZSk7CiAgICAgIGlmIChf X2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAg ICBpb3NfYmFzZTo6aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNlOjppb3N0YXRlKGlvc19iYXNlOjpn b29kYml0KTsKICAgICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bWdldCkpCiAg ICAgICAgICAgICAgICBfTV9mbnVtZ2V0LT5nZXQoKnRoaXMsIDAsICp0aGlzLCBfX2VyciwgX19u KTsKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShfX2Vycik7CiAgICAgICAgICAgIH0KICAg ICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAg ICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAo KHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAg ICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwog ICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBi YXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwg X1RyYWl0cz46OgogICAgb3BlcmF0b3I+Pih2b2lkKiYgX19uKQogICAgewogICAgICBzZW50cnkg X19jZXJiKCp0aGlzLCBmYWxzZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAg ICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSBfX2Vy ciA9IGlvc19iYXNlOjppb3N0YXRlKGlvc19iYXNlOjpnb29kYml0KTsKICAgICAgICAgICAgICBp ZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bWdldCkpCiAgICAgICAgICAgICAgICBfTV9mbnVtZ2V0 LT5nZXQoKnRoaXMsIDAsICp0aGlzLCBfX2VyciwgX19uKTsKICAgICAgICAgICAgICB0aGlzLT5z ZXRzdGF0ZShfX2Vycik7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYg X19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3Nf YmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlv c19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAg fQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1Ry YWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3BlcmF0b3I+ PihfX3N0cmVhbWJ1Zl90eXBlKiBfX3Nib3V0KQogICAgewogICAgICAgc2VudHJ5IF9fY2VyYigq dGhpcywgZmFsc2UpOwogICAgICAgaWYgKF9fY2VyYikKICAgICAgICAgewogICAgICAgICAgIHRy eQogICAgICAgICAgICAgewogICAgICAgICAgICAgICBzdHJlYW1zaXplIF9feHRyY3QgPSAwOwog ICAgICAgICAgICAgICBpZiAoX19zYm91dCkKICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAg ICAgICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiaW4gPSB0aGlzLT5yZGJ1ZigpOwogICAgICAg ICAgICAgICAgICAgX194dHJjdCA9IF9fY29weV9zdHJlYW1idWZzKCp0aGlzLCBfX3NiaW4sIF9f c2JvdXQpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgaWYgKCFfX3Nib3V0IHx8 ICFfX3h0cmN0KQogICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpmYWls Yml0KTsKICAgICAgICAgICAgIH0KICAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkK ICAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6 YmFkYml0KTsKICAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFz ZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICAgfQog ICAgICAgICB9CiAgICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1l IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIHR5cGVuYW1lIGJhc2ljX2lzdHJlYW08X0No YXJULCBfVHJhaXRzPjo6aW50X3R5cGUKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRz Pjo6CiAgICBnZXQodm9pZCkKICAgIHsKICAgICAgY29uc3QgaW50X3R5cGUgX19lb2YgPSB0cmFp dHNfdHlwZTo6ZW9mKCk7CiAgICAgIGludF90eXBlIF9fYyA9IF9fZW9mOwogICAgICBfTV9nY291 bnQgPSAwOwogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCB0cnVlKTsKICAgICAgaWYgKF9fY2Vy YikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIF9f YyA9IHRoaXMtPnJkYnVmKCktPnNidW1wYygpOwoKICAgICAgICAgICAgICBpZiAoX19jICE9IF9f ZW9mKQogICAgICAgICAgICAgICAgX01fZ2NvdW50ID0gMTsKICAgICAgICAgICAgICBlbHNlCiAg ICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZW9mYml0IHwgaW9zX2Jhc2U6 OmZhaWxiaXQpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFp bCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6 OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFz ZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAg ICAgICB9CiAgICAgIHJldHVybiBfX2M7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy VCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYK ICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBnZXQoY2hhcl90eXBlJiBf X2MpCiAgICB7CiAgICAgIF9NX2djb3VudCA9IDA7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMs IHRydWUpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAg ICAgICB7CiAgICAgICAgICAgICAgY29uc3QgaW50X3R5cGUgX19lb2YgPSB0cmFpdHNfdHlwZTo6 ZW9mKCk7CiAgICAgICAgICAgICAgaW50X3R5cGUgX19idWZ2YWwgPSB0aGlzLT5yZGJ1ZigpLT5z YnVtcGMoKTsKCiAgICAgICAgICAgICAgaWYgKF9fYnVmdmFsICE9IF9fZW9mKQogICAgICAgICAg ICAgICAgewogICAgICAgICAgICAgICAgICBfTV9nY291bnQgPSAxOwogICAgICAgICAgICAgICAg ICBfX2MgPSB0cmFpdHNfdHlwZTo6dG9fY2hhcl90eXBlKF9fYnVmdmFsKTsKICAgICAgICAgICAg ICAgIH0KICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShp b3NfYmFzZTo6ZW9mYml0IHwgaW9zX2Jhc2U6OmZhaWxiaXQpOwogICAgICAgICAgICB9CiAgICAg ICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAg ICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0 aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAg ICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAg IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFz aWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9U cmFpdHM+OjoKICAgIGdldChjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24sIGNoYXJfdHlw ZSBfX2RlbGltKQogICAgewogICAgICBfTV9nY291bnQgPSAwOwogICAgICBzZW50cnkgX19jZXJi KCp0aGlzLCB0cnVlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkK ICAgICAgICAgICAgewogICAgICAgICAgICAgIGNvbnN0IGludF90eXBlIF9faWRlbGltID0gdHJh aXRzX3R5cGU6OnRvX2ludF90eXBlKF9fZGVsaW0pOwogICAgICAgICAgICAgIGNvbnN0IGludF90 eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6OmVvZigpOwogICAgICAgICAgICAgIF9fc3RyZWFtYnVm X3R5cGUqIF9fc2IgPSB0aGlzLT5yZGJ1ZigpOwogICAgICAgICAgICAgIGludF90eXBlIF9fYyA9 IF9fc2ItPnNnZXRjKCk7CgogICAgICAgICAgICAgIHdoaWxlIChfTV9nY291bnQgKyAxIDwgX19u ICYmIF9fYyAhPSBfX2VvZiAmJiBfX2MgIT0gX19pZGVsaW0pCiAgICAgICAgICAgICAgICB7CiAg ICAgICAgICAgICAgICAgICpfX3MrKyA9IHRyYWl0c190eXBlOjp0b19jaGFyX3R5cGUoX19jKTsK ICAgICAgICAgICAgICAgICAgX19jID0gX19zYi0+c25leHRjKCk7CiAgICAgICAgICAgICAgICAg ICsrX01fZ2NvdW50OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGlmIChfX2MgPT0g X19lb2YpCiAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZW9mYml0KTsK ICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAg ICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwog ICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkg IT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAg ICAqX19zID0gY2hhcl90eXBlKCk7CiAgICAgIGlmICghX01fZ2NvdW50KQogICAgICAgIHRoaXMt PnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19p c3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0 cz46OgogICAgZ2V0KF9fc3RyZWFtYnVmX3R5cGUmIF9fc2IsIGNoYXJfdHlwZSBfX2RlbGltKQog ICAgewogICAgICBfTV9nY291bnQgPSAwOwogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCB0cnVl KTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAg ewogICAgICAgICAgICAgIGNvbnN0IGludF90eXBlIF9faWRlbGltID0gdHJhaXRzX3R5cGU6OnRv X2ludF90eXBlKF9fZGVsaW0pOwogICAgICAgICAgICAgIGNvbnN0IGludF90eXBlIF9fZW9mID0g dHJhaXRzX3R5cGU6OmVvZigpOwogICAgICAgICAgICAgIF9fc3RyZWFtYnVmX3R5cGUqIF9fdGhp c19zYiA9IHRoaXMtPnJkYnVmKCk7CiAgICAgICAgICAgICAgaW50X3R5cGUgX19jID0gX190aGlz X3NiLT5zZ2V0YygpOwoKICAgICAgICAgICAgICB3aGlsZSAoX19jICE9IF9fZW9mICYmIF9fYyAh PSBfX2lkZWxpbQogICAgICAgICAgICAgICAgICAgICAmJiAoX19zYi5zcHV0Yyh0cmFpdHNfdHlw ZTo6dG9fY2hhcl90eXBlKF9fYykpICE9IF9fZW9mKSkKICAgICAgICAgICAgICAgIHsKICAgICAg ICAgICAgICAgICAgKytfTV9nY291bnQ7CiAgICAgICAgICAgICAgICAgIF9fYyA9IF9fdGhpc19z Yi0+c25leHRjKCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgaWYgKF9fYyA9PSBf X2VvZikKICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjplb2ZiaXQpOwog ICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAg ICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAg ICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAh PSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAg IGlmICghX01fZ2NvdW50KQogICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0 KTsKICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs IHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAg ICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgZ2V0bGluZShjaGFyX3R5cGUq IF9fcywgc3RyZWFtc2l6ZSBfX24sIGNoYXJfdHlwZSBfX2RlbGltKQogICAgewogICAgICBfTV9n Y291bnQgPSAwOwogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCB0cnVlKTsKICAgICAgaWYgKF9f Y2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAg IGNvbnN0IGludF90eXBlIF9faWRlbGltID0gdHJhaXRzX3R5cGU6OnRvX2ludF90eXBlKF9fZGVs aW0pOwogICAgICAgICAgICAgIGNvbnN0IGludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6OmVv ZigpOwogICAgICAgICAgICAgIF9fc3RyZWFtYnVmX3R5cGUqIF9fc2IgPSB0aGlzLT5yZGJ1Zigp OwogICAgICAgICAgICAgIGludF90eXBlIF9fYyA9IF9fc2ItPnNnZXRjKCk7CgogICAgICAgICAg ICAgIHdoaWxlIChfTV9nY291bnQgKyAxIDwgX19uICYmIF9fYyAhPSBfX2VvZiAmJiBfX2MgIT0g X19pZGVsaW0pCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICpfX3MrKyA9IHRy YWl0c190eXBlOjp0b19jaGFyX3R5cGUoX19jKTsKICAgICAgICAgICAgICAgICAgX19jID0gX19z Yi0+c25leHRjKCk7CiAgICAgICAgICAgICAgICAgICsrX01fZ2NvdW50OwogICAgICAgICAgICAg ICAgfQogICAgICAgICAgICAgIGlmIChfX2MgPT0gX19lb2YpCiAgICAgICAgICAgICAgICB0aGlz LT5zZXRzdGF0ZShpb3NfYmFzZTo6ZW9mYml0KTsKICAgICAgICAgICAgICBlbHNlCiAgICAgICAg ICAgICAgICB7CiAgICAgICAgICAgICAgICAgIGlmIChfX2MgPT0gX19pZGVsaW0pCiAgICAgICAg ICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgX19zYi0+c2J1bXBjKCk7CiAgICAg ICAgICAgICAgICAgICAgICArK19NX2djb3VudDsKICAgICAgICAgICAgICAgICAgICB9CiAgICAg ICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3Nf YmFzZTo6ZmFpbGJpdCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAg IGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0 aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMt PmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0 aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgKl9fcyA9IGNoYXJfdHlwZSgpOwog ICAgICBpZiAoIV9NX2djb3VudCkKICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFp bGJpdCk7CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No YXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+ JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIGlnbm9yZShzdHJlYW1z aXplIF9fbiwgaW50X3R5cGUgX19kZWxpbSkKICAgIHsKICAgICAgX01fZ2NvdW50ID0gMDsKICAg ICAgc2VudHJ5IF9fY2VyYigqdGhpcywgdHJ1ZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAg ewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBjb25zdCBpbnRfdHlw ZSBfX2VvZiA9IHRyYWl0c190eXBlOjplb2YoKTsKICAgICAgICAgICAgICBfX3N0cmVhbWJ1Zl90 eXBlKiBfX3NiID0gdGhpcy0+cmRidWYoKTsKICAgICAgICAgICAgICBpbnRfdHlwZSBfX2MgPSBf X3NiLT5zZ2V0YygpOwoKICAgICAgICAgICAgICBfX24gPSBtaW4oX19uLCBudW1lcmljX2xpbWl0 czxzdHJlYW1zaXplPjo6bWF4KCkpOwogICAgICAgICAgICAgIHdoaWxlIChfTV9nY291bnQgPCBf X24gJiYgX19jICE9X19lb2YgJiYgX19jICE9IF9fZGVsaW0pCiAgICAgICAgICAgICAgICB7CiAg ICAgICAgICAgICAgICAgIF9fYyA9IF9fc2ItPnNuZXh0YygpOwogICAgICAgICAgICAgICAgICAr K19NX2djb3VudDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBpZiAoX19jID09IF9f ZW9mKQogICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmVvZmJpdCk7CiAg ICAgICAgICAgICAgZWxzZSBpZiAoX19jID09IF9fZGVsaW0pCiAgICAgICAgICAgICAgICB7CiAg ICAgICAgICAgICAgICAgIF9fc2ItPnNidW1wYygpOwogICAgICAgICAgICAgICAgICArK19NX2dj b3VudDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhj ZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0 YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9u cygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAg ICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRl PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIHR5cGVuYW1lIGJhc2ljX2lz dHJlYW08X0NoYXJULCBfVHJhaXRzPjo6aW50X3R5cGUKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJU LCBfVHJhaXRzPjo6CiAgICBwZWVrKHZvaWQpCiAgICB7CiAgICAgIGludF90eXBlIF9fYyA9IHRy YWl0c190eXBlOjplb2YoKTsKICAgICAgX01fZ2NvdW50ID0gMDsKICAgICAgc2VudHJ5IF9fY2Vy YigqdGhpcywgdHJ1ZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5 CiAgICAgICAgICAgIHsgX19jID0gdGhpcy0+cmRidWYoKS0+c2dldGMoKTsgfQogICAgICAgICAg Y2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRo aXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRo cm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gX19jOwogICAgfQoKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3Ry ZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46 OgogICAgcmVhZChjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pCiAgICB7CiAgICAgIF9N X2djb3VudCA9IDA7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIHRydWUpOwogICAgICBpZiAo X19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAg ICAgX01fZ2NvdW50ID0gdGhpcy0+cmRidWYoKS0+c2dldG4oX19zLCBfX24pOwogICAgICAgICAg ICAgIGlmIChfTV9nY291bnQgIT0gX19uKQogICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUo aW9zX2Jhc2U6OmVvZmJpdCB8IGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAgICAgICAgfQogICAg ICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAg ICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgo dGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAg ICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICBlbHNlCiAgICAgICAgdGhp cy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwogICAgICByZXR1cm4gKnRoaXM7CiAgICB9 CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIHN0cmVh bXNpemUKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICByZWFkc29tZShj aGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pCiAgICB7CiAgICAgIF9NX2djb3VudCA9IDA7 CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIHRydWUpOwogICAgICBpZiAoX19jZXJiKQogICAg ICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgY29uc3QgaW50 X3R5cGUgX19lb2YgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7CiAgICAgICAgICAgICAgc3RyZWFtc2l6 ZSBfX251bSA9IHRoaXMtPnJkYnVmKCktPmluX2F2YWlsKCk7CiAgICAgICAgICAgICAgaWYgKF9f bnVtICE9IHN0YXRpY19jYXN0PHN0cmVhbXNpemU+KF9fZW9mKSkKICAgICAgICAgICAgICAgIHsK ICAgICAgICAgICAgICAgICAgX19udW0gPSBtaW4oX19udW0sIF9fbik7CiAgICAgICAgICAgICAg ICAgIGlmIChfX251bSkKICAgICAgICAgICAgICAgICAgICBfTV9nY291bnQgPSB0aGlzLT5yZGJ1 ZigpLT5zZ2V0bihfX3MsIF9fbnVtKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBl bHNlCiAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZW9mYml0KTsKICAg ICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAg IHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAg ICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0g MCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICBl bHNlCiAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwogICAgICByZXR1 cm4gX01fZ2NvdW50OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l IF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19p c3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgcHV0YmFjayhjaGFyX3R5cGUgX19jKQogICAg ewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCB0cnVlKTsKICAgICAgaWYgKF9fY2VyYikKICAg ICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGNvbnN0IGlu dF90eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6OmVvZigpOwogICAgICAgICAgICAgIF9fc3RyZWFt YnVmX3R5cGUqIF9fc2IgPSB0aGlzLT5yZGJ1ZigpOwogICAgICAgICAgICAgIGlmICghX19zYiB8 fCBfX3NiLT5zcHV0YmFja2MoX19jKSA9PSBfX2VvZikKICAgICAgICAgICAgICAgIHRoaXMtPnNl dHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChl eGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0 c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRp b25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAg ICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIGVsc2UKICAgICAgICB0aGlzLT5zZXRzdGF0ZShp b3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hh clQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIHVu Z2V0KHZvaWQpCiAgICB7CiAgICAgIF9NX2djb3VudCA9IDA7CiAgICAgIHNlbnRyeSBfX2NlcmIo KnRoaXMsIHRydWUpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQog ICAgICAgICAgICB7CiAgICAgICAgICAgICAgY29uc3QgaW50X3R5cGUgX19lb2YgPSB0cmFpdHNf dHlwZTo6ZW9mKCk7CiAgICAgICAgICAgICAgX19zdHJlYW1idWZfdHlwZSogX19zYiA9IHRoaXMt PnJkYnVmKCk7CiAgICAgICAgICAgICAgaWYgKCFfX3NiIHx8IF9fZW9mID09IF9fc2ItPnN1bmdl dGMoKSkKICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwog ICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAg ICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAg ICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAh PSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAg IGVsc2UKICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAgIHJl dHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf VHJhaXRzPgogICAgaW50CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAg c3luYyh2b2lkKQogICAgewogICAgICBpbnQgX19yZXQgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7CiAg ICAgIF9NX2djb3VudCA9IDA7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIHRydWUpOwogICAg ICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAg ICAgICAgICAgX19zdHJlYW1idWZfdHlwZSogX19zYiA9IHRoaXMtPnJkYnVmKCk7CiAgICAgICAg ICAgICAgaWYgKCFfX3NiIHx8IF9fcmV0ID09IF9fc2ItPnB1YnN5bmMoKSkKICAgICAgICAgICAg ICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGVsc2UK ICAgICAgICAgICAgICAgIF9fcmV0ID0gMDsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2go ZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNl dHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0 aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93Owog ICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gX19yZXQ7CiAgICB9CgogIHRlbXBs YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIHR5cGVuYW1lIGJhc2lj X2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6cG9zX3R5cGUKICAgIGJhc2ljX2lzdHJlYW08X0No YXJULCBfVHJhaXRzPjo6CiAgICB0ZWxsZyh2b2lkKQogICAgewogICAgICBwb3NfdHlwZSBfX3Jl dCA9IHBvc190eXBlKC0xKTsKICAgICAgX01fZ2NvdW50ID0gMDsKICAgICAgc2VudHJ5IF9fY2Vy YigqdGhpcywgdHJ1ZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5 CiAgICAgICAgICAgIHsKICAgICAgICAgICAgIF9fcmV0ID0gdGhpcy0+cmRidWYoKS0+cHVic2Vl a29mZigwLCBpb3NfYmFzZTo6Y3VyLCBpb3NfYmFzZTo6aW4pOwogICAgICAgICAgICB9CiAgICAg ICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAg ICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0 aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAg ICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiBfX3JldDsKICAg IH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJh c2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBf VHJhaXRzPjo6CiAgICBzZWVrZyhwb3NfdHlwZSBfX3BvcykKICAgIHsKICAgICAgX01fZ2NvdW50 ID0gMDsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgdHJ1ZSk7CiAgICAgIGlmIChfX2NlcmIp CiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHBv c190eXBlIF9fZXJyID0gdGhpcy0+cmRidWYoKS0+cHVic2Vla3BvcyhfX3BvcywgaW9zX2Jhc2U6 OmluKTsKCgogICAgICAgICAgICAgIGlmIChfX2VyciA9PSBwb3NfdHlwZShvZmZfdHlwZSgtMSkp KQogICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwoKICAg ICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAg IHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAg ICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0g MCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICBy ZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg X1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lz dHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBzZWVrZyhvZmZfdHlwZSBfX29mZiwgaW9zX2Jh c2U6OnNlZWtkaXIgX19kaXIpCiAgICB7CiAgICAgIF9NX2djb3VudCA9IDA7CiAgICAgIHNlbnRy eSBfX2NlcmIoKnRoaXMsIHRydWUpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAg ICAgIHRyeQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICBwb3NfdHlwZSBfX2VyciA9IHRo aXMtPnJkYnVmKCktPnB1YnNlZWtvZmYoX19vZmYsIF9fZGlyLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6aW4pOwoKCiAg ICAgICAgICAgICAgaWYgKF9fZXJyID09IHBvc190eXBlKG9mZl90eXBlKC0xKSkpCiAgICAgICAg ICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CgogICAgICAgICAgICB9 CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAg ICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAg aWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAg ICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhp czsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4K ICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPj4oYmFzaWNf aXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2luLCBfQ2hhclQmIF9fYykKICAgIHsKICAgICAg dHlwZWRlZiBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gX19pc3RyZWFtX3R5cGU7CiAg ICAgIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjpzZW50cnkgX19jZXJiKF9faW4sIGZhbHNlKTsK ICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgeyBf X2luLmdldChfX2MpOyB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAg ICAgICAgewoKCiAgICAgICAgICAgICAgX19pbi5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsK ICAgICAgICAgICAgICBpZiAoKF9faW4uZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkg IT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAg ICBlbHNlCiAgICAgICAgX19pbi5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAgIHJl dHVybiBfX2luOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U cmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcj4+ KGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pbiwgX0NoYXJUKiBfX3MpCiAgICB7 CiAgICAgIHR5cGVkZWYgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IF9faXN0cmVhbV90 eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjpfX3N0cmVhbWJ1Zl90 eXBlIF9fc3RyZWFtYnVmX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6aW50 X3R5cGUgaW50X3R5cGU7CiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlw ZWRlZiBjdHlwZTxfQ2hhclQ+IF9fY3R5cGVfdHlwZTsKICAgICAgc3RyZWFtc2l6ZSBfX2V4dHJh Y3RlZCA9IDA7CgogICAgICB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6c2VudHJ5IF9fY2VyYihf X2luLCBmYWxzZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAg ICAgICAgICAgIHsKCiAgICAgICAgICAgICAgc3RyZWFtc2l6ZSBfX251bSA9IF9faW4ud2lkdGgo KTsKICAgICAgICAgICAgICBpZiAoX19udW0gPT0gMCkKICAgICAgICAgICAgICAgIF9fbnVtID0g bnVtZXJpY19saW1pdHM8c3RyZWFtc2l6ZT46Om1heCgpOwoKICAgICAgICAgICAgICBjb25zdCBf X2N0eXBlX3R5cGUmIF9fY3R5cGUgPSB1c2VfZmFjZXQ8X19jdHlwZV90eXBlPihfX2luLmdldGxv YygpKTsKICAgICAgICAgICAgICBjb25zdCBpbnRfdHlwZSBfX2VvZiA9IF9UcmFpdHM6OmVvZigp OwogICAgICAgICAgICAgIF9fc3RyZWFtYnVmX3R5cGUqIF9fc2IgPSBfX2luLnJkYnVmKCk7CiAg ICAgICAgICAgICAgaW50X3R5cGUgX19jID0gX19zYi0+c2dldGMoKTsKCiAgICAgICAgICAgICAg d2hpbGUgKF9fZXh0cmFjdGVkIDwgX19udW0gLSAxCiAgICAgICAgICAgICAgICAgICAgICYmIF9f YyAhPSBfX2VvZiAmJiAhX19jdHlwZS5pcyhjdHlwZV9iYXNlOjpzcGFjZSwgX19jKSkKICAgICAg ICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgKl9fcysrID0gX19jOwogICAgICAgICAgICAg ICAgICArK19fZXh0cmFjdGVkOwogICAgICAgICAgICAgICAgICBfX2MgPSBfX3NiLT5zbmV4dGMo KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBpZiAoX19jID09IF9fZW9mKQogICAg ICAgICAgICAgICAgX19pbi5zZXRzdGF0ZShpb3NfYmFzZTo6ZW9mYml0KTsKCgoKICAgICAgICAg ICAgICAqX19zID0gY2hhcl90eXBlKCk7CgogICAgICAgICAgICAgIF9faW4ud2lkdGgoMCk7CiAg ICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAg ICB7CgoKICAgICAgICAgICAgICBfX2luLnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAg ICAgICAgICAgIGlmICgoX19pbi5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAw KQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIGlm ICghX19leHRyYWN0ZWQpCiAgICAgICAgX19pbi5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7 CiAgICAgIHJldHVybiBfX2luOwogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0 eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsX1RyYWl0cz4mCiAgICB3 cyhiYXNpY19pc3RyZWFtPF9DaGFyVCxfVHJhaXRzPiYgX19pbikKICAgIHsKICAgICAgdHlwZWRl ZiBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gX19pc3RyZWFtX3R5cGU7CiAgICAgIHR5 cGVkZWYgdHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6Ol9fc3RyZWFtYnVmX3R5cGUgX19zdHJlYW1i dWZfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6X19jdHlwZV90 eXBlIF9fY3R5cGVfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6 aW50X3R5cGUgX19pbnRfdHlwZTsKCiAgICAgIGNvbnN0IF9fY3R5cGVfdHlwZSYgX19jdHlwZSA9 IHVzZV9mYWNldDxfX2N0eXBlX3R5cGU+KF9faW4uZ2V0bG9jKCkpOwogICAgICBjb25zdCBfX2lu dF90eXBlIF9fZW9mID0gX1RyYWl0czo6ZW9mKCk7CiAgICAgIF9fc3RyZWFtYnVmX3R5cGUqIF9f c2IgPSBfX2luLnJkYnVmKCk7CiAgICAgIF9faW50X3R5cGUgX19jID0gX19zYi0+c2dldGMoKTsK CiAgICAgIHdoaWxlIChfX2MgIT0gX19lb2YgJiYgX19jdHlwZS5pcyhjdHlwZV9iYXNlOjpzcGFj ZSwgX19jKSkKICAgICAgICBfX2MgPSBfX3NiLT5zbmV4dGMoKTsKICAgICAgaWYgKF9fYyA9PSBf X2VvZikKICAgICAgICBfX2luLnNldHN0YXRlKGlvc19iYXNlOjplb2ZiaXQpOwoKICAgICAgcmV0 dXJuIF9faW47CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U cmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRz PiYKICAgIG9wZXJhdG9yPj4oYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2luLAog ICAgICAgICAgICAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3N0 cikKICAgIHsKICAgICAgdHlwZWRlZiBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gX19p c3RyZWFtX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6OmludF90 eXBlIF9faW50X3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6Ol9f c3RyZWFtYnVmX3R5cGUgX19zdHJlYW1idWZfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBf X2lzdHJlYW1fdHlwZTo6X19jdHlwZV90eXBlIF9fY3R5cGVfdHlwZTsKICAgICAgdHlwZWRlZiBi YXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+IF9fc3RyaW5nX3R5cGU7CiAgICAg IHR5cGVkZWYgdHlwZW5hbWUgX19zdHJpbmdfdHlwZTo6c2l6ZV90eXBlIF9fc2l6ZV90eXBlOwog ICAgICBfX3NpemVfdHlwZSBfX2V4dHJhY3RlZCA9IDA7CgogICAgICB0eXBlbmFtZSBfX2lzdHJl YW1fdHlwZTo6c2VudHJ5IF9fY2VyYihfX2luLCBmYWxzZSk7CiAgICAgIGlmIChfX2NlcmIpCiAg ICAgICAgewogICAgICAgICAgX19zdHIuZXJhc2UoKTsKICAgICAgICAgIHN0cmVhbXNpemUgX193 ID0gX19pbi53aWR0aCgpOwogICAgICAgICAgX19zaXplX3R5cGUgX19uOwogICAgICAgICAgX19u ID0gX193ID4gMCA/IHN0YXRpY19jYXN0PF9fc2l6ZV90eXBlPihfX3cpIDogX19zdHIubWF4X3Np emUoKTsKCiAgICAgICAgICBjb25zdCBfX2N0eXBlX3R5cGUmIF9fY3R5cGUgPSB1c2VfZmFjZXQ8 X19jdHlwZV90eXBlPihfX2luLmdldGxvYygpKTsKICAgICAgICAgIGNvbnN0IF9faW50X3R5cGUg X19lb2YgPSBfVHJhaXRzOjplb2YoKTsKICAgICAgICAgIF9fc3RyZWFtYnVmX3R5cGUqIF9fc2Ig PSBfX2luLnJkYnVmKCk7CiAgICAgICAgICBfX2ludF90eXBlIF9fYyA9IF9fc2ItPnNnZXRjKCk7 CgogICAgICAgICAgd2hpbGUgKF9fZXh0cmFjdGVkIDwgX19uCiAgICAgICAgICAgICAgICAgJiYg X19jICE9IF9fZW9mICYmICFfX2N0eXBlLmlzKGN0eXBlX2Jhc2U6OnNwYWNlLCBfX2MpKQogICAg ICAgICAgICB7CiAgICAgICAgICAgICAgX19zdHIgKz0gX1RyYWl0czo6dG9fY2hhcl90eXBlKF9f Yyk7CiAgICAgICAgICAgICAgKytfX2V4dHJhY3RlZDsKICAgICAgICAgICAgICBfX2MgPSBfX3Ni LT5zbmV4dGMoKTsKICAgICAgICAgICAgfQogICAgICAgICAgaWYgKF9fYyA9PSBfX2VvZikKICAg ICAgICAgICAgX19pbi5zZXRzdGF0ZShpb3NfYmFzZTo6ZW9mYml0KTsKICAgICAgICAgIF9faW4u d2lkdGgoMCk7CiAgICAgICAgfQoKCiAgICAgIGlmICghX19leHRyYWN0ZWQpCiAgICAgICAgX19p bi5zZXRzdGF0ZSAoaW9zX2Jhc2U6OmZhaWxiaXQpOwoKICAgICAgcmV0dXJuIF9faW47CiAgICB9 CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUg X0FsbG9jPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgZ2V0bGluZShi YXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faW4sCiAgICAgICAgICAgIGJhc2ljX3N0 cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fc3RyLCBfQ2hhclQgX19kZWxpbSkKICAg IHsKICAgICAgdHlwZWRlZiBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gX19pc3RyZWFt X3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6OmludF90eXBlIF9f aW50X3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6Ol9fc3RyZWFt YnVmX3R5cGUgX19zdHJlYW1idWZfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lzdHJl YW1fdHlwZTo6X19jdHlwZV90eXBlIF9fY3R5cGVfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19z dHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+IF9fc3RyaW5nX3R5cGU7CiAgICAgIHR5cGVk ZWYgdHlwZW5hbWUgX19zdHJpbmdfdHlwZTo6c2l6ZV90eXBlIF9fc2l6ZV90eXBlOwoKICAgICAg X19zaXplX3R5cGUgX19leHRyYWN0ZWQgPSAwOwogICAgICBib29sIF9fdGVzdGRlbGltID0gZmFs c2U7CiAgICAgIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjpzZW50cnkgX19jZXJiKF9faW4sIHRy dWUpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIF9fc3RyLmVyYXNlKCk7 CiAgICAgICAgICBfX3NpemVfdHlwZSBfX24gPSBfX3N0ci5tYXhfc2l6ZSgpOwoKICAgICAgICAg IF9faW50X3R5cGUgX19pZGVsaW0gPSBfVHJhaXRzOjp0b19pbnRfdHlwZShfX2RlbGltKTsKICAg ICAgICAgIF9fc3RyZWFtYnVmX3R5cGUqIF9fc2IgPSBfX2luLnJkYnVmKCk7CiAgICAgICAgICBf X2ludF90eXBlIF9fYyA9IF9fc2ItPnNidW1wYygpOwogICAgICAgICAgY29uc3QgX19pbnRfdHlw ZSBfX2VvZiA9IF9UcmFpdHM6OmVvZigpOwogICAgICAgICAgX190ZXN0ZGVsaW0gPSBfX2MgPT0g X19pZGVsaW07CgogICAgICAgICAgd2hpbGUgKF9fZXh0cmFjdGVkIDw9IF9fbiAmJiBfX2MgIT0g X19lb2YgJiYgIV9fdGVzdGRlbGltKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX19zdHIg Kz0gX1RyYWl0czo6dG9fY2hhcl90eXBlKF9fYyk7CiAgICAgICAgICAgICAgKytfX2V4dHJhY3Rl ZDsKICAgICAgICAgICAgICBfX2MgPSBfX3NiLT5zYnVtcGMoKTsKICAgICAgICAgICAgICBfX3Rl c3RkZWxpbSA9IF9fYyA9PSBfX2lkZWxpbTsKICAgICAgICAgICAgfQogICAgICAgICAgaWYgKF9f YyA9PSBfX2VvZikKICAgICAgICAgICAgX19pbi5zZXRzdGF0ZShpb3NfYmFzZTo6ZW9mYml0KTsK ICAgICAgICB9CiAgICAgIGlmICghX19leHRyYWN0ZWQgJiYgIV9fdGVzdGRlbGltKQogICAgICAg IF9faW4uc2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwogICAgICByZXR1cm4gX19pbjsKICAg IH0KCiAgdGVtcGxhdGU8Y2xhc3MgX0NoYXJULCBjbGFzcyBfVHJhaXRzLCBjbGFzcyBfQWxsb2M+ CiAgICBpbmxpbmUgYmFzaWNfaXN0cmVhbTxfQ2hhclQsX1RyYWl0cz4mCiAgICBnZXRsaW5lKGJh c2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pbiwKICAgICAgICAgICAgYmFzaWNfc3Ry aW5nPF9DaGFyVCxfVHJhaXRzLF9BbGxvYz4mIF9fc3RyKQogICAgeyByZXR1cm4gZ2V0bGluZShf X2luLCBfX3N0ciwgX19pbi53aWRlbignXG4nKSk7IH0KCgoKCiAgZXh0ZXJuIHRlbXBsYXRlIGNs YXNzIGJhc2ljX2lzdHJlYW08Y2hhcj47CiAgZXh0ZXJuIHRlbXBsYXRlIGlzdHJlYW0mIHdzKGlz dHJlYW0mKTsKICBleHRlcm4gdGVtcGxhdGUgaXN0cmVhbSYgb3BlcmF0b3I+Pihpc3RyZWFtJiwg Y2hhciYpOwogIGV4dGVybiB0ZW1wbGF0ZSBpc3RyZWFtJiBvcGVyYXRvcj4+KGlzdHJlYW0mLCBj aGFyKik7CiAgZXh0ZXJuIHRlbXBsYXRlIGlzdHJlYW0mIG9wZXJhdG9yPj4oaXN0cmVhbSYsIHVu c2lnbmVkIGNoYXImKTsKICBleHRlcm4gdGVtcGxhdGUgaXN0cmVhbSYgb3BlcmF0b3I+Pihpc3Ry ZWFtJiwgc2lnbmVkIGNoYXImKTsKICBleHRlcm4gdGVtcGxhdGUgaXN0cmVhbSYgb3BlcmF0b3I+ Pihpc3RyZWFtJiwgdW5zaWduZWQgY2hhciopOwogIGV4dGVybiB0ZW1wbGF0ZSBpc3RyZWFtJiBv cGVyYXRvcj4+KGlzdHJlYW0mLCBzaWduZWQgY2hhciopOwoKCiAgZXh0ZXJuIHRlbXBsYXRlIGNs YXNzIGJhc2ljX2lzdHJlYW08d2NoYXJfdD47CiAgZXh0ZXJuIHRlbXBsYXRlIHdpc3RyZWFtJiB3 cyh3aXN0cmVhbSYpOwogIGV4dGVybiB0ZW1wbGF0ZSB3aXN0cmVhbSYgb3BlcmF0b3I+Pih3aXN0 cmVhbSYsIHdjaGFyX3QmKTsKICBleHRlcm4gdGVtcGxhdGUgd2lzdHJlYW0mIG9wZXJhdG9yPj4o d2lzdHJlYW0mLCB3Y2hhcl90Kik7Cgp9CiMgMjg4ICIvdXNyL2N5Z251cy9iaW4vLi4vaW5jbHVk ZS9jKysvMy4xLjEvaXN0cmVhbSIgMiAzCiMgNDcgIi91c3IvY3lnbnVzL2Jpbi8uLi9pbmNsdWRl L2MrKy8zLjEuMS9pb3N0cmVhbSIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKICBleHRlcm4gaXN0cmVh bSBjaW47CiAgZXh0ZXJuIG9zdHJlYW0gY291dDsKICBleHRlcm4gb3N0cmVhbSBjZXJyOwogIGV4 dGVybiBvc3RyZWFtIGNsb2c7CgogIGV4dGVybiB3aXN0cmVhbSB3Y2luOwogIGV4dGVybiB3b3N0 cmVhbSB3Y291dDsKICBleHRlcm4gd29zdHJlYW0gd2NlcnI7CiAgZXh0ZXJuIHdvc3RyZWFtIHdj bG9nOwoKCgogIHN0YXRpYyBpb3NfYmFzZTo6SW5pdCBfX2lvaW5pdDsKfQojIDIgInRlc3QuY3Bw IiAyCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgpzdHJ1Y3QgQQp7CiAgdmlydHVhbCB+QSgpe30KfTsK CnN0cnVjdCBCIDogQQp7CgogIEIoKXtjb3V0IDw8IkIncyBjb25zdHJ1Y3RvciI8PGVuZGw7fQog IH5CKCl7Y291dCA8PCJCJ3MgZGVzdHJ1Y3RvciI8PGVuZGw7fQp9OwoKc3RydWN0IEMKewogIEMo QSYgYSA9IEIoKSl7Y291dCA8PCJDJ3MgY29uc3RydWN0b3IiPDxlbmRsO30KICB+Qygpe2NvdXQg PDwiQydzIGRlc3RydWN0b3IiPDxlbmRsO30KfTsKCgppbnQgbWFpbigpCnsKICBDIGM7CiAgQiBi OwogIEEmIGFSZWYgPSBiOwp9Cg==