From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 17618 invoked by alias); 4 Feb 2003 21:16:01 -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 17597 invoked by uid 71); 4 Feb 2003 21:16:00 -0000 Resent-Date: 4 Feb 2003 21:16:00 -0000 Resent-Message-ID: <20030204211600.17595.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, fche@redhat.com Received: (qmail 12870 invoked by uid 48); 4 Feb 2003 21:09:52 -0000 Message-Id: <20030204210952.12869.qmail@sources.redhat.com> Date: Tue, 04 Feb 2003 21:16:00 -0000 From: fche@redhat.com Reply-To: fche@redhat.com To: gcc-gnats@gcc.gnu.org X-Send-Pr-Version: gnatsweb-2.9.3 (1.1.1.1.2.31) Subject: c++/9574: parser crash X-SW-Source: 2003-02/txt/msg00217.txt.bz2 List-Id: >Number: 9574 >Category: c++ >Synopsis: parser crash >Confidential: no >Severity: serious >Priority: medium >Responsible: unassigned >State: open >Class: sw-bug >Submitter-Id: net >Arrival-Date: Tue Feb 04 21:16:00 UTC 2003 >Closed-Date: >Last-Modified: >Originator: fche@redhat.com >Release: 3.5-tree-ssa >Organization: >Environment: >Description: Plain "g++ -c foo2.i" crashes. I believe tree-ssa is irrelevant - the mainline should also show this problem. gdb backtrace shows: Program received signal SIGSEGV, Segmentation fault. 0x08109707 in finish_non_static_data_member (decl=0x404b2e70, qualifying_scope=0x0) at /home/fche/DEVEL-gcc-mudflap/gcc/gcc/cp/semantics.c:1222 1222 access_type = DECL_CONTEXT (access_type); (gdb) frame 1 #1 0x080fd349 in hack_identifier (value=0x404b2e70, name=0x405feb00) at /home/fche/DEVEL-gcc-mudflap/gcc/gcc/cp/method.c:117 117 value = finish_non_static_data_member (value, (gdb) bt #0 0x08109707 in finish_non_static_data_member (decl=0x404b2e70, qualifying_scope=0x0) at /home/fche/DEVEL-gcc-mudflap/gcc/gcc/cp/semantics.c:1222 #1 0x080fd349 in hack_identifier (value=0x404b2e70, name=0x405feb00) at /home/fche/DEVEL-gcc-mudflap/gcc/gcc/cp/method.c:117 #2 0x080d2f7e in cp_parser_primary_expression (parser=0x401d1c40, idk=0xbfffed48, qualifying_class=0xbfffed4c) at /home/fche/DEVEL-gcc-mudflap/gcc/gcc/cp/parser.c:2812 #3 0x080d3cf9 in cp_parser_postfix_expression (parser=0x401d1c40, address_p=false) at /home/fche/DEVEL-gcc-mudflap/gcc/gcc/cp/parser.c:3787 #4 0x080d4924 in cp_parser_unary_expression (parser=0x401d1c40, address_p=false) at /home/fche/DEVEL-gcc-mudflap/gcc/gcc/cp/parser.c:4487 >How-To-Repeat: >Fix: >Release-Note: >Audit-Trail: >Unformatted: ----gnatsweb-attachment---- Content-Type: application/octet-stream; name="foo2.i" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="foo2.i" IyAxICIvaG9tZS9mY2hlL3RtcC9mb28yLmNjIgojIDEgIjxidWlsdC1pbj4iCiMgMSAiPGNvbW1h bmQgbGluZT4iCiMgMSAiL2hvbWUvZmNoZS90bXAvZm9vMi5jYyIKIyAxICIvbm90bmZzL2ZjaGUv QlVJTEQtZ2NjLW11ZGZsYXAvSU5TVC9pbmNsdWRlL2MrKy8zLjUtdHJlZS1zc2EvbWFwIiAxIDMK IyA2NSAiL25vdG5mcy9mY2hlL0JVSUxELWdjYy1tdWRmbGFwL0lOU1QvaW5jbHVkZS9jKysvMy41 LXRyZWUtc3NhL21hcCIgMwoKIyAxICIvbm90bmZzL2ZjaGUvQlVJTEQtZ2NjLW11ZGZsYXAvSU5T VC9pbmNsdWRlL2MrKy8zLjUtdHJlZS1zc2EvYml0cy9zdGxfdHJlZS5oIiAxIDMKIyA4NiAiL25v dG5mcy9mY2hlL0JVSUxELWdjYy1tdWRmbGFwL0lOU1QvaW5jbHVkZS9jKysvMy41LXRyZWUtc3Nh L2JpdHMvc3RsX3RyZWUuaCIgMwojIDEgIi9ub3RuZnMvZmNoZS9CVUlMRC1nY2MtbXVkZmxhcC9J TlNUL2luY2x1ZGUvYysrLzMuNS10cmVlLXNzYS9iaXRzL3N0bF9hbGdvYmFzZS5oIiAxIDMKIyA2 NCAiL25vdG5mcy9mY2hlL0JVSUxELWdjYy1tdWRmbGFwL0lOU1QvaW5jbHVkZS9jKysvMy41LXRy ZWUtc3NhL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMKIyAxICIvbm90bmZzL2ZjaGUvQlVJTEQtZ2Nj LW11ZGZsYXAvSU5TVC9pbmNsdWRlL2MrKy8zLjUtdHJlZS1zc2EvaTY4Ni1wYy1saW51eC1nbnUv Yml0cy9jKytjb25maWcuaCIgMSAzCiMgMzQgIi9ub3RuZnMvZmNoZS9CVUlMRC1nY2MtbXVkZmxh cC9JTlNUL2luY2x1ZGUvYysrLzMuNS10cmVlLXNzYS9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2Mr K2NvbmZpZy5oIiAzCiMgMSAiL25vdG5mcy9mY2hlL0JVSUxELWdjYy1tdWRmbGFwL0lOU1QvaW5j bHVkZS9jKysvMy41LXRyZWUtc3NhL2k2ODYtcGMtbGludXgtZ251L2JpdHMvb3NfZGVmaW5lcy5o IiAxIDMKIyAzOSAiL25vdG5mcy9mY2hlL0JVSUxELWdjYy1tdWRmbGFwL0lOU1QvaW5jbHVkZS9j KysvMy41LXRyZWUtc3NhL2k2ODYtcGMtbGludXgtZ251L2JpdHMvb3NfZGVmaW5lcy5oIiAzCiMg MSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDEgMyA0CiMgMjgzICIvdXNyL2luY2x1ZGUvZmVh dHVyZXMuaCIgMyA0CiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9jZGVmcy5oIiAxIDMgNAojIDI4NCAi L3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDIgMyA0CiMgMzEyICIvdXNyL2luY2x1ZGUvZmVhdHVy ZXMuaCIgMyA0CiMgMSAiL3Vzci9pbmNsdWRlL2dudS9zdHVicy5oIiAxIDMgNAojIDMxMyAiL3Vz ci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDIgMyA0CiMgNDAgIi9ub3RuZnMvZmNoZS9CVUlMRC1nY2Mt bXVkZmxhcC9JTlNUL2luY2x1ZGUvYysrLzMuNS10cmVlLXNzYS9pNjg2LXBjLWxpbnV4LWdudS9i aXRzL29zX2RlZmluZXMuaCIgMiAzCiMgMzUgIi9ub3RuZnMvZmNoZS9CVUlMRC1nY2MtbXVkZmxh cC9JTlNUL2luY2x1ZGUvYysrLzMuNS10cmVlLXNzYS9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2Mr K2NvbmZpZy5oIiAyIDMKIyA2NSAiL25vdG5mcy9mY2hlL0JVSUxELWdjYy1tdWRmbGFwL0lOU1Qv aW5jbHVkZS9jKysvMy41LXRyZWUtc3NhL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDIgMwojIDEgIi9u b3RuZnMvZmNoZS9CVUlMRC1nY2MtbXVkZmxhcC9JTlNUL2luY2x1ZGUvYysrLzMuNS10cmVlLXNz YS9jc3RyaW5nIiAxIDMKIyA0OCAiL25vdG5mcy9mY2hlL0JVSUxELWdjYy1tdWRmbGFwL0lOU1Qv aW5jbHVkZS9jKysvMy41LXRyZWUtc3NhL2NzdHJpbmciIDMKCiMgMSAiL25vdG5mcy9mY2hlL0JV SUxELWdjYy1tdWRmbGFwL0lOU1QvaW5jbHVkZS9jKysvMy41LXRyZWUtc3NhL2NzdGRkZWYiIDEg MwojIDQ3ICIvbm90bmZzL2ZjaGUvQlVJTEQtZ2NjLW11ZGZsYXAvSU5TVC9pbmNsdWRlL2MrKy8z LjUtdHJlZS1zc2EvY3N0ZGRlZiIgMwoKIyAxICIvbm90bmZzL2ZjaGUvQlVJTEQtZ2NjLW11ZGZs YXAvSU5TVC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjUtdHJlZS1zc2EvaW5jbHVk ZS9zdGRkZWYuaCIgMSAzIDQKIyAxNTEgIi9ub3RuZnMvZmNoZS9CVUlMRC1nY2MtbXVkZmxhcC9J TlNUL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuNS10cmVlLXNzYS9pbmNsdWRlL3N0 ZGRlZi5oIiAzIDQKdHlwZWRlZiBpbnQgcHRyZGlmZl90OwojIDIxMyAiL25vdG5mcy9mY2hlL0JV SUxELWdjYy1tdWRmbGFwL0lOU1QvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy41LXRy ZWUtc3NhL2luY2x1ZGUvc3RkZGVmLmgiIDMgNAp0eXBlZGVmIHVuc2lnbmVkIGludCBzaXplX3Q7 CiMgNDkgIi9ub3RuZnMvZmNoZS9CVUlMRC1nY2MtbXVkZmxhcC9JTlNUL2luY2x1ZGUvYysrLzMu NS10cmVlLXNzYS9jc3RkZGVmIiAyIDMKCm5hbWVzcGFjZSBzdGQKewogIHVzaW5nIDo6cHRyZGlm Zl90OwogIHVzaW5nIDo6c2l6ZV90Owp9CiMgNTAgIi9ub3RuZnMvZmNoZS9CVUlMRC1nY2MtbXVk ZmxhcC9JTlNUL2luY2x1ZGUvYysrLzMuNS10cmVlLXNzYS9jc3RyaW5nIiAyIDMKCiMgMSAiL3Vz ci9pbmNsdWRlL3N0cmluZy5oIiAxIDMgNAojIDI4ICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDMg NApleHRlcm4gIkMiIHsKCgoKCiMgMSAiL25vdG5mcy9mY2hlL0JVSUxELWdjYy1tdWRmbGFwL0lO U1QvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy41LXRyZWUtc3NhL2luY2x1ZGUvc3Rk ZGVmLmgiIDEgMyA0CiMgMzQgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMiAzIDQKCgoKZXh0ZXJu IHZvaWQgKm1lbWNweSAodm9pZCAqX19yZXN0cmljdCBfX2Rlc3QsCiAgICAgICAgICAgICAgICAg ICAgIF9fY29uc3Qgdm9pZCAqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbikgdGhyb3cgKCk7 CgoKZXh0ZXJuIHZvaWQgKm1lbW1vdmUgKHZvaWQgKl9fZGVzdCwgX19jb25zdCB2b2lkICpfX3Ny Yywgc2l6ZV90IF9fbikKICAgICB0aHJvdyAoKTsKCgoKCgpleHRlcm4gdm9pZCAqbWVtY2NweSAo dm9pZCAqX19yZXN0cmljdCBfX2Rlc3QsIF9fY29uc3Qgdm9pZCAqX19yZXN0cmljdCBfX3NyYywK ICAgICAgICAgICAgICAgICAgICAgIGludCBfX2MsIHNpemVfdCBfX24pCiAgICAgdGhyb3cgKCk7 CgoKCgpleHRlcm4gdm9pZCAqbWVtc2V0ICh2b2lkICpfX3MsIGludCBfX2MsIHNpemVfdCBfX24p IHRocm93ICgpOwoKCmV4dGVybiBpbnQgbWVtY21wIChfX2NvbnN0IHZvaWQgKl9fczEsIF9fY29u c3Qgdm9pZCAqX19zMiwgc2l6ZV90IF9fbikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo X19wdXJlX18pKTsKCgpleHRlcm4gdm9pZCAqbWVtY2hyIChfX2NvbnN0IHZvaWQgKl9fcywgaW50 IF9fYywgc2l6ZV90IF9fbikKICAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9f KSk7CgoKCgpleHRlcm4gdm9pZCAqcmF3bWVtY2hyIChfX2NvbnN0IHZvaWQgKl9fcywgaW50IF9f YykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIHZvaWQgKm1l bXJjaHIgKF9fY29uc3Qgdm9pZCAqX19zLCBpbnQgX19jLCBzaXplX3QgX19uKQogICAgICB0aHJv dyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKCmV4dGVybiBjaGFyICpzdHJjcHkg KGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMp CiAgICAgdGhyb3cgKCk7CgpleHRlcm4gY2hhciAqc3RybmNweSAoY2hhciAqX19yZXN0cmljdCBf X2Rlc3QsCiAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19z cmMsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCmV4dGVybiBjaGFyICpzdHJjYXQgKGNoYXIgKl9f cmVzdHJpY3QgX19kZXN0LCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMpCiAgICAgdGhy b3cgKCk7CgpleHRlcm4gY2hhciAqc3RybmNhdCAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsIF9f Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYywKICAgICAgICAgICAgICAgICAgICAgIHNpemVf dCBfX24pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgc3RyY21wIChfX2NvbnN0IGNoYXIgKl9fczEs IF9fY29uc3QgY2hhciAqX19zMikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJl X18pKTsKCmV4dGVybiBpbnQgc3RybmNtcCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNo YXIgKl9fczIsIHNpemVfdCBfX24pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVy ZV9fKSk7CgoKZXh0ZXJuIGludCBzdHJjb2xsIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3Qg Y2hhciAqX19zMikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4 dGVybiBzaXplX3Qgc3RyeGZybSAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsCiAgICAgICAgICAg ICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSB0 aHJvdyAoKTsKCgoKCgojIDEgIi91c3IvaW5jbHVkZS94bG9jYWxlLmgiIDEgMyA0CiMgMjggIi91 c3IvaW5jbHVkZS94bG9jYWxlLmgiIDMgNAp0eXBlZGVmIHN0cnVjdCBfX2xvY2FsZV9zdHJ1Y3QK ewoKICBzdHJ1Y3QgbG9jYWxlX2RhdGEgKl9fbG9jYWxlc1sxM107CgoKICBjb25zdCB1bnNpZ25l ZCBzaG9ydCBpbnQgKl9fY3R5cGVfYjsKICBjb25zdCBpbnQgKl9fY3R5cGVfdG9sb3dlcjsKICBj b25zdCBpbnQgKl9fY3R5cGVfdG91cHBlcjsKfSAqX19sb2NhbGVfdDsKIyAxMDkgIi91c3IvaW5j bHVkZS9zdHJpbmcuaCIgMiAzIDQKCgpleHRlcm4gaW50IF9fc3RyY29sbF9sIChfX2NvbnN0IGNo YXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMiwgX19sb2NhbGVfdCBfX2wpCiAgICAgdGhyb3cg KCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gc2l6ZV90IF9fc3RyeGZybV9s IChjaGFyICpfX2Rlc3QsIF9fY29uc3QgY2hhciAqX19zcmMsIHNpemVfdCBfX24sCiAgICAgICAg ICAgICAgICAgICAgICAgICAgIF9fbG9jYWxlX3QgX19sKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBj aGFyICpzdHJkdXAgKF9fY29uc3QgY2hhciAqX19zKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo X19tYWxsb2NfXykpOwoKCgoKCgpleHRlcm4gY2hhciAqc3RybmR1cCAoX19jb25zdCBjaGFyICpf X3N0cmluZywgc2l6ZV90IF9fbikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19tYWxs b2NfXykpOwojIDE1NSAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAzIDQKZXh0ZXJuIGNoYXIgKnN0 cmNociAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX2MpIHRocm93ICgpIF9fYXR0cmlidXRlX18g KChfX3B1cmVfXykpOwoKZXh0ZXJuIGNoYXIgKnN0cnJjaHIgKF9fY29uc3QgY2hhciAqX19zLCBp bnQgX19jKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKCmV4dGVybiBj aGFyICpzdHJjaHJudWwgKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19jKSB0aHJvdyAoKSBfX2F0 dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKCmV4dGVybiBzaXplX3Qgc3RyY3NwbiAoX19jb25z dCBjaGFyICpfX3MsIF9fY29uc3QgY2hhciAqX19yZWplY3QpCiAgICAgdGhyb3cgKCkgX19hdHRy aWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIHNpemVfdCBzdHJzcG4gKF9fY29uc3QgY2hh ciAqX19zLCBfX2NvbnN0IGNoYXIgKl9fYWNjZXB0KQogICAgIHRocm93ICgpIF9fYXR0cmlidXRl X18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIGNoYXIgKnN0cnBicmsgKF9fY29uc3QgY2hhciAqX19z LCBfX2NvbnN0IGNoYXIgKl9fYWNjZXB0KQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChf X3B1cmVfXykpOwoKZXh0ZXJuIGNoYXIgKnN0cnN0ciAoX19jb25zdCBjaGFyICpfX2hheXN0YWNr LCBfX2NvbnN0IGNoYXIgKl9fbmVlZGxlKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChf X3B1cmVfXykpOwoKCgpleHRlcm4gY2hhciAqc3RyY2FzZXN0ciAoX19jb25zdCBjaGFyICpfX2hh eXN0YWNrLCBfX2NvbnN0IGNoYXIgKl9fbmVlZGxlKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRl X18gKChfX3B1cmVfXykpOwoKCgpleHRlcm4gY2hhciAqc3RydG9rIChjaGFyICpfX3Jlc3RyaWN0 IF9fcywgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZGVsaW0pCiAgICAgdGhyb3cgKCk7CgoK CmV4dGVybiBjaGFyICpfX3N0cnRva19yIChjaGFyICpfX3Jlc3RyaWN0IF9fcywKICAgICAgICAg ICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2RlbGltLAogICAgICAg ICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19zYXZlX3B0cikgdGhyb3cgKCk7 CgpleHRlcm4gY2hhciAqc3RydG9rX3IgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBfX2NvbnN0IGNo YXIgKl9fcmVzdHJpY3QgX19kZWxpbSwKICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19y ZXN0cmljdCBfX3NhdmVfcHRyKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIHZvaWQgKm1lbW1lbSAo X19jb25zdCB2b2lkICpfX2hheXN0YWNrLCBzaXplX3QgX19oYXlzdGFja2xlbiwKICAgICAgICAg ICAgICAgICAgICAgX19jb25zdCB2b2lkICpfX25lZWRsZSwgc2l6ZV90IF9fbmVlZGxlbGVuKQog ICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgpleHRlcm4gdm9pZCAq X19tZW1wY3B5ICh2b2lkICpfX3Jlc3RyaWN0IF9fZGVzdCwKICAgICAgICAgICAgICAgICAgICAg ICAgX19jb25zdCB2b2lkICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSB0aHJvdyAoKTsK ZXh0ZXJuIHZvaWQgKm1lbXBjcHkgKHZvaWQgKl9fcmVzdHJpY3QgX19kZXN0LAogICAgICAgICAg ICAgICAgICAgICAgX19jb25zdCB2b2lkICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSB0 aHJvdyAoKTsKCgoKCmV4dGVybiBzaXplX3Qgc3RybGVuIChfX2NvbnN0IGNoYXIgKl9fcykgdGhy b3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgpleHRlcm4gc2l6ZV90IHN0cm5s ZW4gKF9fY29uc3QgY2hhciAqX19zdHJpbmcsIHNpemVfdCBfX21heGxlbikKICAgICB0aHJvdyAo KSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKCmV4dGVybiBjaGFyICpzdHJlcnJvciAo aW50IF9fZXJybnVtKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGNoYXIgKnN0cmVycm9yX3IgKGludCBf X2Vycm51bSwgY2hhciAqX19idWYsIHNpemVfdCBfX2J1ZmxlbikgdGhyb3cgKCk7CgoKCgpleHRl cm4gdm9pZCBfX2J6ZXJvICh2b2lkICpfX3MsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCgpleHRl cm4gdm9pZCBiY29weSAoX19jb25zdCB2b2lkICpfX3NyYywgdm9pZCAqX19kZXN0LCBzaXplX3Qg X19uKSB0aHJvdyAoKTsKCgpleHRlcm4gdm9pZCBiemVybyAodm9pZCAqX19zLCBzaXplX3QgX19u KSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IGJjbXAgKF9fY29uc3Qgdm9pZCAqX19zMSwgX19jb25z dCB2b2lkICpfX3MyLCBzaXplX3QgX19uKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChf X3B1cmVfXykpOwoKCmV4dGVybiBjaGFyICppbmRleCAoX19jb25zdCBjaGFyICpfX3MsIGludCBf X2MpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVybiBjaGFyICpy aW5kZXggKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19jKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9f ICgoX19wdXJlX18pKTsKCgoKZXh0ZXJuIGludCBmZnMgKGludCBfX2kpIHRocm93ICgpIF9fYXR0 cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCmV4dGVybiBpbnQgZmZzbCAobG9uZyBpbnQgX19s KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgpfX2V4dGVuc2lvbl9fIGV4 dGVybiBpbnQgZmZzbGwgKGxvbmcgbG9uZyBpbnQgX19sbCkKICAgICB0aHJvdyAoKSBfX2F0dHJp YnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgpleHRlcm4gaW50IHN0cmNhc2VjbXAgKF9fY29uc3Qg Y2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRl X18gKChfX3B1cmVfXykpOwoKCmV4dGVybiBpbnQgc3RybmNhc2VjbXAgKF9fY29uc3QgY2hhciAq X19zMSwgX19jb25zdCBjaGFyICpfX3MyLCBzaXplX3QgX19uKQogICAgIHRocm93ICgpIF9fYXR0 cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoKCmV4dGVybiBpbnQgX19zdHJjYXNlY21wX2wgKF9f Y29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyLAogICAgICAgICAgICAgICAgICAg ICAgICAgICBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJl X18pKTsKCmV4dGVybiBpbnQgX19zdHJuY2FzZWNtcF9sIChfX2NvbnN0IGNoYXIgKl9fczEsIF9f Y29uc3QgY2hhciAqX19zMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX24s IF9fbG9jYWxlX3QgX19sb2MpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9f KSk7CgoKCgoKZXh0ZXJuIGNoYXIgKnN0cnNlcCAoY2hhciAqKl9fcmVzdHJpY3QgX19zdHJpbmdw LAogICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19kZWxpbSkg dGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IHN0cnZlcnNjbXAgKF9fY29uc3QgY2hhciAqX19zMSwg X19jb25zdCBjaGFyICpfX3MyKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVf XykpOwoKCmV4dGVybiBjaGFyICpzdHJzaWduYWwgKGludCBfX3NpZykgdGhyb3cgKCk7CgoKZXh0 ZXJuIGNoYXIgKl9fc3RwY3B5IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwgX19jb25zdCBjaGFy ICpfX3Jlc3RyaWN0IF9fc3JjKQogICAgIHRocm93ICgpOwpleHRlcm4gY2hhciAqc3RwY3B5IChj aGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjKQog ICAgIHRocm93ICgpOwoKCgpleHRlcm4gY2hhciAqX19zdHBuY3B5IChjaGFyICpfX3Jlc3RyaWN0 IF9fZGVzdCwKICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0 IF9fc3JjLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKZXh0ZXJuIGNoYXIgKnN0cG5jcHkgKGNoYXIg Kl9fcmVzdHJpY3QgX19kZXN0LAogICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpf X3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgpleHRlcm4gY2hhciAqc3Ry ZnJ5IChjaGFyICpfX3N0cmluZykgdGhyb3cgKCk7CgoKZXh0ZXJuIHZvaWQgKm1lbWZyb2IgKHZv aWQgKl9fcywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBjaGFyICpiYXNlbmFt ZSAoX19jb25zdCBjaGFyICpfX2ZpbGVuYW1lKSB0aHJvdyAoKTsKIyAzNjQgIi91c3IvaW5jbHVk ZS9zdHJpbmcuaCIgMyA0Cn0KIyA1MiAiL25vdG5mcy9mY2hlL0JVSUxELWdjYy1tdWRmbGFwL0lO U1QvaW5jbHVkZS9jKysvMy41LXRyZWUtc3NhL2NzdHJpbmciIDIgMwojIDc3ICIvbm90bmZzL2Zj aGUvQlVJTEQtZ2NjLW11ZGZsYXAvSU5TVC9pbmNsdWRlL2MrKy8zLjUtdHJlZS1zc2EvY3N0cmlu ZyIgMwpuYW1lc3BhY2Ugc3RkCnsKICB1c2luZyA6Om1lbWNweTsKICB1c2luZyA6Om1lbW1vdmU7 CiAgdXNpbmcgOjpzdHJjcHk7CiAgdXNpbmcgOjpzdHJuY3B5OwogIHVzaW5nIDo6c3RyY2F0Owog IHVzaW5nIDo6c3RybmNhdDsKICB1c2luZyA6Om1lbWNtcDsKICB1c2luZyA6OnN0cmNtcDsKICB1 c2luZyA6OnN0cmNvbGw7CiAgdXNpbmcgOjpzdHJuY21wOwogIHVzaW5nIDo6c3RyeGZybTsKICB1 c2luZyA6OnN0cmNzcG47CiAgdXNpbmcgOjpzdHJzcG47CiAgdXNpbmcgOjpzdHJ0b2s7CiAgdXNp bmcgOjptZW1zZXQ7CiAgdXNpbmcgOjpzdHJlcnJvcjsKICB1c2luZyA6OnN0cmxlbjsKCiAgdXNp bmcgOjptZW1jaHI7CgogIGlubGluZSB2b2lkKgogIG1lbWNocih2b2lkKiBfX3AsIGludCBfX2Ms IHNpemVfdCBfX24pCiAgeyByZXR1cm4gbWVtY2hyKGNvbnN0X2Nhc3Q8Y29uc3Qgdm9pZCo+KF9f cCksIF9fYywgX19uKTsgfQoKICB1c2luZyA6OnN0cmNocjsKCiAgaW5saW5lIGNoYXIqCiAgc3Ry Y2hyKGNoYXIqIF9fczEsIGludCBfX24pCiAgeyByZXR1cm4gX19idWlsdGluX3N0cmNocihjb25z dF9jYXN0PGNvbnN0IGNoYXIqPihfX3MxKSwgX19uKTsgfQoKICB1c2luZyA6OnN0cnBicms7Cgog IGlubGluZSBjaGFyKgogIHN0cnBicmsoY2hhciogX19zMSwgY29uc3QgY2hhciogX19zMikKICB7 IHJldHVybiBfX2J1aWx0aW5fc3RycGJyayhjb25zdF9jYXN0PGNvbnN0IGNoYXIqPihfX3MxKSwg X19zMik7IH0KCiAgdXNpbmcgOjpzdHJyY2hyOwoKICBpbmxpbmUgY2hhcioKICBzdHJyY2hyKGNo YXIqIF9fczEsIGludCBfX24pCiAgeyByZXR1cm4gX19idWlsdGluX3N0cnJjaHIoY29uc3RfY2Fz dDxjb25zdCBjaGFyKj4oX19zMSksIF9fbik7IH0KCiAgdXNpbmcgOjpzdHJzdHI7CgogIGlubGlu ZSBjaGFyKgogIHN0cnN0cihjaGFyKiBfX3MxLCBjb25zdCBjaGFyKiBfX3MyKQogIHsgcmV0dXJu IF9fYnVpbHRpbl9zdHJzdHIoY29uc3RfY2FzdDxjb25zdCBjaGFyKj4oX19zMSksIF9fczIpOyB9 Cn0KIyA2NiAiL25vdG5mcy9mY2hlL0JVSUxELWdjYy1tdWRmbGFwL0lOU1QvaW5jbHVkZS9jKysv My41LXRyZWUtc3NhL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDIgMwojIDEgIi9ub3RuZnMvZmNoZS9C VUlMRC1nY2MtbXVkZmxhcC9JTlNUL2luY2x1ZGUvYysrLzMuNS10cmVlLXNzYS9jbGltaXRzIiAx IDMKIyA0OCAiL25vdG5mcy9mY2hlL0JVSUxELWdjYy1tdWRmbGFwL0lOU1QvaW5jbHVkZS9jKysv My41LXRyZWUtc3NhL2NsaW1pdHMiIDMKCiMgMSAiL25vdG5mcy9mY2hlL0JVSUxELWdjYy1tdWRm bGFwL0lOU1QvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy41LXRyZWUtc3NhL2luY2x1 ZGUvbGltaXRzLmgiIDEgMyA0CiMgMTEgIi9ub3RuZnMvZmNoZS9CVUlMRC1nY2MtbXVkZmxhcC9J TlNUL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuNS10cmVlLXNzYS9pbmNsdWRlL2xp bWl0cy5oIiAzIDQKIyAxICIvbm90bmZzL2ZjaGUvQlVJTEQtZ2NjLW11ZGZsYXAvSU5TVC9saWIv Z2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjUtdHJlZS1zc2EvaW5jbHVkZS9zeXNsaW1pdHMu aCIgMSAzIDQKCgoKCgoKIyAxICIvbm90bmZzL2ZjaGUvQlVJTEQtZ2NjLW11ZGZsYXAvSU5TVC9s aWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjUtdHJlZS1zc2EvaW5jbHVkZS9saW1pdHMu aCIgMSAzIDQKIyAxMjIgIi9ub3RuZnMvZmNoZS9CVUlMRC1nY2MtbXVkZmxhcC9JTlNUL2xpYi9n Y2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuNS10cmVlLXNzYS9pbmNsdWRlL2xpbWl0cy5oIiAz IDQKIyAxICIvdXNyL2luY2x1ZGUvbGltaXRzLmgiIDEgMyA0CiMgMTQ0ICIvdXNyL2luY2x1ZGUv bGltaXRzLmgiIDMgNAojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3Bvc2l4MV9saW0uaCIgMSAzIDQK IyAxMjYgIi91c3IvaW5jbHVkZS9iaXRzL3Bvc2l4MV9saW0uaCIgMyA0CiMgMSAiL3Vzci9pbmNs dWRlL2JpdHMvbG9jYWxfbGltLmgiIDEgMyA0CiMgMzYgIi91c3IvaW5jbHVkZS9iaXRzL2xvY2Fs X2xpbS5oIiAzIDQKIyAxICIvdXNyL2luY2x1ZGUvbGludXgvbGltaXRzLmgiIDEgMyA0CiMgMzcg Ii91c3IvaW5jbHVkZS9iaXRzL2xvY2FsX2xpbS5oIiAyIDMgNAojIDEyNyAiL3Vzci9pbmNsdWRl L2JpdHMvcG9zaXgxX2xpbS5oIiAyIDMgNAojIDE0NSAiL3Vzci9pbmNsdWRlL2xpbWl0cy5oIiAy IDMgNAoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3Bvc2l4Ml9saW0uaCIgMSAzIDQKIyAxNDkg Ii91c3IvaW5jbHVkZS9saW1pdHMuaCIgMiAzIDQKCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy94 b3Blbl9saW0uaCIgMSAzIDQKIyAzNCAiL3Vzci9pbmNsdWRlL2JpdHMveG9wZW5fbGltLmgiIDMg NAojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3N0ZGlvX2xpbS5oIiAxIDMgNAojIDM1ICIvdXNyL2lu Y2x1ZGUvYml0cy94b3Blbl9saW0uaCIgMiAzIDQKIyAxNTMgIi91c3IvaW5jbHVkZS9saW1pdHMu aCIgMiAzIDQKIyAxMjMgIi9ub3RuZnMvZmNoZS9CVUlMRC1nY2MtbXVkZmxhcC9JTlNUL2xpYi9n Y2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuNS10cmVlLXNzYS9pbmNsdWRlL2xpbWl0cy5oIiAy IDMgNAojIDggIi9ub3RuZnMvZmNoZS9CVUlMRC1nY2MtbXVkZmxhcC9JTlNUL2xpYi9nY2MtbGli L2k2ODYtcGMtbGludXgtZ251LzMuNS10cmVlLXNzYS9pbmNsdWRlL3N5c2xpbWl0cy5oIiAyIDMg NAojIDEyICIvbm90bmZzL2ZjaGUvQlVJTEQtZ2NjLW11ZGZsYXAvSU5TVC9saWIvZ2NjLWxpYi9p Njg2LXBjLWxpbnV4LWdudS8zLjUtdHJlZS1zc2EvaW5jbHVkZS9saW1pdHMuaCIgMiAzIDQKIyA1 MCAiL25vdG5mcy9mY2hlL0JVSUxELWdjYy1tdWRmbGFwL0lOU1QvaW5jbHVkZS9jKysvMy41LXRy ZWUtc3NhL2NsaW1pdHMiIDIgMwojIDY3ICIvbm90bmZzL2ZjaGUvQlVJTEQtZ2NjLW11ZGZsYXAv SU5TVC9pbmNsdWRlL2MrKy8zLjUtdHJlZS1zc2EvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMiAzCiMg MSAiL25vdG5mcy9mY2hlL0JVSUxELWdjYy1tdWRmbGFwL0lOU1QvaW5jbHVkZS9jKysvMy41LXRy ZWUtc3NhL2NzdGRsaWIiIDEgMwojIDQ4ICIvbm90bmZzL2ZjaGUvQlVJTEQtZ2NjLW11ZGZsYXAv SU5TVC9pbmNsdWRlL2MrKy8zLjUtdHJlZS1zc2EvY3N0ZGxpYiIgMwoKCgoKIyAxICIvdXNyL2lu Y2x1ZGUvc3RkbGliLmgiIDEgMyA0CiMgMzMgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMyA0CiMg MSAiL25vdG5mcy9mY2hlL0JVSUxELWdjYy1tdWRmbGFwL0lOU1QvbGliL2djYy1saWIvaTY4Ni1w Yy1saW51eC1nbnUvMy41LXRyZWUtc3NhL2luY2x1ZGUvc3RkZGVmLmgiIDEgMyA0CiMgMzQgIi91 c3IvaW5jbHVkZS9zdGRsaWIuaCIgMiAzIDQKCmV4dGVybiAiQyIgewoKCgoKCgojIDEgIi91c3Iv aW5jbHVkZS9iaXRzL3dhaXRmbGFncy5oIiAxIDMgNAojIDQzICIvdXNyL2luY2x1ZGUvc3RkbGli LmgiIDIgMyA0CiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvd2FpdHN0YXR1cy5oIiAxIDMgNAojIDYz ICIvdXNyL2luY2x1ZGUvYml0cy93YWl0c3RhdHVzLmgiIDMgNAojIDEgIi91c3IvaW5jbHVkZS9l bmRpYW4uaCIgMSAzIDQKIyAzNyAiL3Vzci9pbmNsdWRlL2VuZGlhbi5oIiAzIDQKIyAxICIvdXNy L2luY2x1ZGUvYml0cy9lbmRpYW4uaCIgMSAzIDQKIyAzOCAiL3Vzci9pbmNsdWRlL2VuZGlhbi5o IiAyIDMgNAojIDY0ICIvdXNyL2luY2x1ZGUvYml0cy93YWl0c3RhdHVzLmgiIDIgMyA0Cgp1bmlv biB3YWl0CiAgewogICAgaW50IHdfc3RhdHVzOwogICAgc3RydWN0CiAgICAgIHsKCiAgICAgICAg dW5zaWduZWQgaW50IF9fd190ZXJtc2lnOjc7CiAgICAgICAgdW5zaWduZWQgaW50IF9fd19jb3Jl ZHVtcDoxOwogICAgICAgIHVuc2lnbmVkIGludCBfX3dfcmV0Y29kZTo4OwogICAgICAgIHVuc2ln bmVkIGludDoxNjsKCgoKCgoKCiAgICAgIH0gX193YWl0X3Rlcm1pbmF0ZWQ7CiAgICBzdHJ1Y3QK ICAgICAgewoKICAgICAgICB1bnNpZ25lZCBpbnQgX193X3N0b3B2YWw6ODsKICAgICAgICB1bnNp Z25lZCBpbnQgX193X3N0b3BzaWc6ODsKICAgICAgICB1bnNpZ25lZCBpbnQ6MTY7CgoKCgoKCiAg ICAgIH0gX193YWl0X3N0b3BwZWQ7CiAgfTsKIyA0NCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAy IDMgNAojIDk0ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMgNAp0eXBlZGVmIHN0cnVjdAogIHsK ICAgIGludCBxdW90OwogICAgaW50IHJlbTsKICB9IGRpdl90OwoKCgp0eXBlZGVmIHN0cnVjdAog IHsKICAgIGxvbmcgaW50IHF1b3Q7CiAgICBsb25nIGludCByZW07CiAgfSBsZGl2X3Q7CgoKCgoK X19leHRlbnNpb25fXyB0eXBlZGVmIHN0cnVjdAogIHsKICAgIGxvbmcgbG9uZyBpbnQgcXVvdDsK ICAgIGxvbmcgbG9uZyBpbnQgcmVtOwogIH0gbGxkaXZfdDsKIyAxMzMgIi91c3IvaW5jbHVkZS9z dGRsaWIuaCIgMyA0CmV4dGVybiBzaXplX3QgX19jdHlwZV9nZXRfbWJfY3VyX21heCAodm9pZCkg dGhyb3cgKCk7CgoKCmV4dGVybiBkb3VibGUgYXRvZiAoX19jb25zdCBjaGFyICpfX25wdHIpIHRo cm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIGludCBhdG9pIChfX2Nv bnN0IGNoYXIgKl9fbnB0cikgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7Cgpl eHRlcm4gbG9uZyBpbnQgYXRvbCAoX19jb25zdCBjaGFyICpfX25wdHIpIHRocm93ICgpIF9fYXR0 cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgpfX2V4dGVuc2lvbl9fIGV4dGVybiBsb25nIGxvbmcg aW50IGF0b2xsIChfX2NvbnN0IGNoYXIgKl9fbnB0cikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0 ZV9fICgoX19wdXJlX18pKTsKCgoKZXh0ZXJuIGRvdWJsZSBzdHJ0b2QgKF9fY29uc3QgY2hhciAq X19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmlj dCBfX2VuZHB0cikgdGhyb3cgKCk7CgoKCmV4dGVybiBmbG9hdCBzdHJ0b2YgKF9fY29uc3QgY2hh ciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3Ry aWN0IF9fZW5kcHRyKSB0aHJvdyAoKTsKCmV4dGVybiBsb25nIGRvdWJsZSBzdHJ0b2xkIChfX2Nv bnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg Y2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIpIHRocm93ICgpOwoKCgpleHRlcm4gbG9uZyBpbnQg c3RydG9sIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAg ICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkgdGhyb3cgKCk7 CgpleHRlcm4gdW5zaWduZWQgbG9uZyBpbnQgc3RydG91bCAoX19jb25zdCBjaGFyICpfX3Jlc3Ry aWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jl c3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKQogICAgIHRocm93ICgpOwoKCgpfX2V4dGVuc2lv bl9fCmV4dGVybiBsb25nIGxvbmcgaW50IHN0cnRvcSAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0 IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBf X2VuZHB0ciwgaW50IF9fYmFzZSkgdGhyb3cgKCk7CgpfX2V4dGVuc2lvbl9fCmV4dGVybiB1bnNp Z25lZCBsb25nIGxvbmcgaW50IHN0cnRvdXEgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25w dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3Ry aWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKQogICAgIHRocm93ICgpOwoKCgoKCgpfX2V4dGVuc2lv bl9fCmV4dGVybiBsb25nIGxvbmcgaW50IHN0cnRvbGwgKF9fY29uc3QgY2hhciAqX19yZXN0cmlj dCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0 IF9fZW5kcHRyLCBpbnQgX19iYXNlKSB0aHJvdyAoKTsKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIHVu c2lnbmVkIGxvbmcgbG9uZyBpbnQgc3RydG91bGwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBf X25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19y ZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkKICAgICB0aHJvdyAoKTsKIyAyMTUgIi91c3Iv aW5jbHVkZS9zdGRsaWIuaCIgMyA0CmV4dGVybiBsb25nIGludCBfX3N0cnRvbF9sIChfX2NvbnN0 IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hh ciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKTsKCmV4dGVybiB1bnNpZ25lZCBsb25n IGludCBfX3N0cnRvdWxfbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0 ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNlLCBfX2xv Y2FsZV90IF9fbG9jKSB0aHJvdyAoKTsKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIGxvbmcgbG9uZyBp bnQgX19zdHJ0b2xsX2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50 IF9fYmFzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbG9jYWxlX3QgX19s b2MpIHRocm93ICgpOwoKX19leHRlbnNpb25fXwpleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGlu dCBfX3N0cnRvdWxsX2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19l bmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9f YmFzZSwgX19sb2NhbGVfdCBfX2xvYykKICAgICB0aHJvdyAoKTsKCmV4dGVybiBkb3VibGUgX19z dHJ0b2RfbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAg ICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgX19sb2NhbGVfdCBfX2xvYykK ICAgICB0aHJvdyAoKTsKCmV4dGVybiBmbG9hdCBfX3N0cnRvZl9sIChfX2NvbnN0IGNoYXIgKl9f cmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJp Y3QgX19lbmRwdHIsIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoKZXh0ZXJuIGxvbmcgZG91 YmxlIF9fc3RydG9sZF9sIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoK CgoKCgpleHRlcm4gZG91YmxlIF9fc3RydG9kX2ludGVybmFsIChfX2NvbnN0IGNoYXIgKl9fcmVz dHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19y ZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fZ3JvdXApCiAgICAgdGhyb3cgKCk7CmV4dGVybiBmbG9h dCBfX3N0cnRvZl9pbnRlcm5hbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwg aW50IF9fZ3JvdXApCiAgICAgdGhyb3cgKCk7CmV4dGVybiBsb25nIGRvdWJsZSBfX3N0cnRvbGRf aW50ZXJuYWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19ncm91cCkgdGhyb3cgKCk7 CgpleHRlcm4gbG9uZyBpbnQgX19zdHJ0b2xfaW50ZXJuYWwgKF9fY29uc3QgY2hhciAqX19yZXN0 cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9f cmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50 IF9fYmFzZSwgaW50IF9fZ3JvdXApIHRocm93ICgpOwoKCgpleHRlcm4gdW5zaWduZWQgbG9uZyBp bnQgX19zdHJ0b3VsX2ludGVybmFsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0 cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgaW50IF9fYmFzZSwgaW50IF9fZ3JvdXApIHRocm93ICgpOwoKCgoKX19leHRlbnNpb25fXwpl eHRlcm4gbG9uZyBsb25nIGludCBfX3N0cnRvbGxfaW50ZXJuYWwgKF9fY29uc3QgY2hhciAqX19y ZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Y2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgaW50IF9fYmFzZSwgaW50IF9fZ3JvdXApIHRocm93ICgpOwoKCgpfX2V4dGVu c2lvbl9fCmV4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IF9fc3RydG91bGxfaW50ZXJuYWwg KF9fY29uc3QgY2hhciAqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIF9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYmFzZSwg aW50IF9fZ3JvdXApCiAgICAgdGhyb3cgKCk7CiMgMzg0ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgi IDMgNApleHRlcm4gY2hhciAqbDY0YSAobG9uZyBpbnQgX19uKSB0aHJvdyAoKTsKCgpleHRlcm4g bG9uZyBpbnQgYTY0bCAoX19jb25zdCBjaGFyICpfX3MpIHRocm93ICgpIF9fYXR0cmlidXRlX18g KChfX3B1cmVfXykpOwoKCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAxIDMgNAojIDI4 ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMgNApleHRlcm4gIkMiIHsKCiMgMSAiL3Vzci9p bmNsdWRlL2JpdHMvdHlwZXMuaCIgMSAzIDQKIyAyOSAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMu aCIgMyA0CiMgMSAiL25vdG5mcy9mY2hlL0JVSUxELWdjYy1tdWRmbGFwL0lOU1QvbGliL2djYy1s aWIvaTY4Ni1wYy1saW51eC1nbnUvMy41LXRyZWUtc3NhL2luY2x1ZGUvc3RkZGVmLmgiIDEgMyA0 CiMgMzAgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDIgMyA0CgoKdHlwZWRlZiB1bnNpZ25l ZCBjaGFyIF9fdV9jaGFyOwp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IF9fdV9zaG9ydDsKdHlwZWRl ZiB1bnNpZ25lZCBpbnQgX191X2ludDsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIF9fdV9sb25nOwoK X19leHRlbnNpb25fXyB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgX191X3F1YWRfdDsK X19leHRlbnNpb25fXyB0eXBlZGVmIGxvbmcgbG9uZyBpbnQgX19xdWFkX3Q7CiMgNDkgIi91c3Iv aW5jbHVkZS9iaXRzL3R5cGVzLmgiIDMgNAp0eXBlZGVmIHNpZ25lZCBjaGFyIF9faW50OF90Owp0 eXBlZGVmIHVuc2lnbmVkIGNoYXIgX191aW50OF90Owp0eXBlZGVmIHNpZ25lZCBzaG9ydCBpbnQg X19pbnQxNl90Owp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IGludCBfX3VpbnQxNl90Owp0eXBlZGVm IHNpZ25lZCBpbnQgX19pbnQzMl90Owp0eXBlZGVmIHVuc2lnbmVkIGludCBfX3VpbnQzMl90OwoK X19leHRlbnNpb25fXyB0eXBlZGVmIHNpZ25lZCBsb25nIGxvbmcgaW50IF9faW50NjRfdDsKX19l eHRlbnNpb25fXyB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgX191aW50NjRfdDsKCnR5 cGVkZWYgX19xdWFkX3QgKl9fcWFkZHJfdDsKCnR5cGVkZWYgX191X3F1YWRfdCBfX2Rldl90Owp0 eXBlZGVmIF9fdV9pbnQgX191aWRfdDsKdHlwZWRlZiBfX3VfaW50IF9fZ2lkX3Q7CnR5cGVkZWYg X191X2xvbmcgX19pbm9fdDsKdHlwZWRlZiBfX3VfaW50IF9fbW9kZV90Owp0eXBlZGVmIF9fdV9p bnQgX19ubGlua190Owp0eXBlZGVmIGxvbmcgaW50IF9fb2ZmX3Q7CnR5cGVkZWYgX19xdWFkX3Qg X19sb2ZmX3Q7CnR5cGVkZWYgaW50IF9fcGlkX3Q7CnR5cGVkZWYgaW50IF9fc3NpemVfdDsKdHlw ZWRlZiBfX3VfbG9uZyBfX3JsaW1fdDsKdHlwZWRlZiBfX3VfcXVhZF90IF9fcmxpbTY0X3Q7CnR5 cGVkZWYgX191X2ludCBfX2lkX3Q7Cgp0eXBlZGVmIHN0cnVjdAogIHsKICAgIGludCBfX3ZhbFsy XTsKICB9IF9fZnNpZF90OwoKCnR5cGVkZWYgaW50IF9fZGFkZHJfdDsKdHlwZWRlZiBjaGFyICpf X2NhZGRyX3Q7CnR5cGVkZWYgbG9uZyBpbnQgX190aW1lX3Q7CnR5cGVkZWYgdW5zaWduZWQgaW50 IF9fdXNlY29uZHNfdDsKdHlwZWRlZiBsb25nIGludCBfX3N1c2Vjb25kc190Owp0eXBlZGVmIGxv bmcgaW50IF9fc3dibGtfdDsKCnR5cGVkZWYgbG9uZyBpbnQgX19jbG9ja190OwoKCnR5cGVkZWYg aW50IF9fY2xvY2tpZF90OwoKCnR5cGVkZWYgaW50IF9fdGltZXJfdDsKCgoKCgoKdHlwZWRlZiBp bnQgX19rZXlfdDsKCgp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IGludCBfX2lwY19waWRfdDsKCgoK dHlwZWRlZiBsb25nIGludCBfX2Jsa3NpemVfdDsKCgoKCnR5cGVkZWYgbG9uZyBpbnQgX19ibGtj bnRfdDsKdHlwZWRlZiBfX3F1YWRfdCBfX2Jsa2NudDY0X3Q7CgoKdHlwZWRlZiBfX3VfbG9uZyBf X2ZzYmxrY250X3Q7CnR5cGVkZWYgX191X3F1YWRfdCBfX2ZzYmxrY250NjRfdDsKCgp0eXBlZGVm IF9fdV9sb25nIF9fZnNmaWxjbnRfdDsKdHlwZWRlZiBfX3VfcXVhZF90IF9fZnNmaWxjbnQ2NF90 OwoKCnR5cGVkZWYgX191X3F1YWRfdCBfX2lubzY0X3Q7CgoKdHlwZWRlZiBfX2xvZmZfdCBfX29m ZjY0X3Q7CgoKdHlwZWRlZiBsb25nIGludCBfX3Rfc2NhbGFyX3Q7CnR5cGVkZWYgdW5zaWduZWQg bG9uZyBpbnQgX190X3VzY2FsYXJfdDsKCgp0eXBlZGVmIGludCBfX2ludHB0cl90OwoKCnR5cGVk ZWYgdW5zaWduZWQgaW50IF9fc29ja2xlbl90OwoKCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9w dGhyZWFkdHlwZXMuaCIgMSAzIDQKIyAyMyAiL3Vzci9pbmNsdWRlL2JpdHMvcHRocmVhZHR5cGVz LmgiIDMgNAojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3NjaGVkLmgiIDEgMyA0CiMgNjggIi91c3Iv aW5jbHVkZS9iaXRzL3NjaGVkLmgiIDMgNApzdHJ1Y3QgX19zY2hlZF9wYXJhbQogIHsKICAgIGlu dCBfX3NjaGVkX3ByaW9yaXR5OwogIH07CiMgMjQgIi91c3IvaW5jbHVkZS9iaXRzL3B0aHJlYWR0 eXBlcy5oIiAyIDMgNAoKCnN0cnVjdCBfcHRocmVhZF9mYXN0bG9jawp7CiAgbG9uZyBpbnQgX19z dGF0dXM7CiAgaW50IF9fc3BpbmxvY2s7Cgp9OwoKCgp0eXBlZGVmIHN0cnVjdCBfcHRocmVhZF9k ZXNjcl9zdHJ1Y3QgKl9wdGhyZWFkX2Rlc2NyOwoKCgoKCnR5cGVkZWYgc3RydWN0IF9fcHRocmVh ZF9hdHRyX3MKewogIGludCBfX2RldGFjaHN0YXRlOwogIGludCBfX3NjaGVkcG9saWN5OwogIHN0 cnVjdCBfX3NjaGVkX3BhcmFtIF9fc2NoZWRwYXJhbTsKICBpbnQgX19pbmhlcml0c2NoZWQ7CiAg aW50IF9fc2NvcGU7CiAgc2l6ZV90IF9fZ3VhcmRzaXplOwogIGludCBfX3N0YWNrYWRkcl9zZXQ7 CiAgdm9pZCAqX19zdGFja2FkZHI7CiAgc2l6ZV90IF9fc3RhY2tzaXplOwp9IHB0aHJlYWRfYXR0 cl90OwoKCgp0eXBlZGVmIHN0cnVjdAp7CiAgc3RydWN0IF9wdGhyZWFkX2Zhc3Rsb2NrIF9fY19s b2NrOwogIF9wdGhyZWFkX2Rlc2NyIF9fY193YWl0aW5nOwp9IHB0aHJlYWRfY29uZF90OwoKCgp0 eXBlZGVmIHN0cnVjdAp7CiAgaW50IF9fZHVtbXk7Cn0gcHRocmVhZF9jb25kYXR0cl90OwoKCnR5 cGVkZWYgdW5zaWduZWQgaW50IHB0aHJlYWRfa2V5X3Q7CgoKCgoKdHlwZWRlZiBzdHJ1Y3QKewog IGludCBfX21fcmVzZXJ2ZWQ7CiAgaW50IF9fbV9jb3VudDsKICBfcHRocmVhZF9kZXNjciBfX21f b3duZXI7CiAgaW50IF9fbV9raW5kOwogIHN0cnVjdCBfcHRocmVhZF9mYXN0bG9jayBfX21fbG9j azsKfSBwdGhyZWFkX211dGV4X3Q7CgoKCnR5cGVkZWYgc3RydWN0CnsKICBpbnQgX19tdXRleGtp bmQ7Cn0gcHRocmVhZF9tdXRleGF0dHJfdDsKCgoKdHlwZWRlZiBpbnQgcHRocmVhZF9vbmNlX3Q7 CgoKCgp0eXBlZGVmIHN0cnVjdCBfcHRocmVhZF9yd2xvY2tfdAp7CiAgc3RydWN0IF9wdGhyZWFk X2Zhc3Rsb2NrIF9fcndfbG9jazsKICBpbnQgX19yd19yZWFkZXJzOwogIF9wdGhyZWFkX2Rlc2Ny IF9fcndfd3JpdGVyOwogIF9wdGhyZWFkX2Rlc2NyIF9fcndfcmVhZF93YWl0aW5nOwogIF9wdGhy ZWFkX2Rlc2NyIF9fcndfd3JpdGVfd2FpdGluZzsKICBpbnQgX19yd19raW5kOwogIGludCBfX3J3 X3BzaGFyZWQ7Cn0gcHRocmVhZF9yd2xvY2tfdDsKCgoKdHlwZWRlZiBzdHJ1Y3QKewogIGludCBf X2xvY2traW5kOwogIGludCBfX3BzaGFyZWQ7Cn0gcHRocmVhZF9yd2xvY2thdHRyX3Q7CgoKCgp0 eXBlZGVmIHZvbGF0aWxlIGludCBwdGhyZWFkX3NwaW5sb2NrX3Q7CgoKdHlwZWRlZiBzdHJ1Y3Qg ewogIHN0cnVjdCBfcHRocmVhZF9mYXN0bG9jayBfX2JhX2xvY2s7CiAgaW50IF9fYmFfcmVxdWly ZWQ7CiAgaW50IF9fYmFfcHJlc2VudDsKICBfcHRocmVhZF9kZXNjciBfX2JhX3dhaXRpbmc7Cn0g cHRocmVhZF9iYXJyaWVyX3Q7CgoKdHlwZWRlZiBzdHJ1Y3QgewogIGludCBfX3BzaGFyZWQ7Cn0g cHRocmVhZF9iYXJyaWVyYXR0cl90OwoKCgoKCnR5cGVkZWYgdW5zaWduZWQgbG9uZyBpbnQgcHRo cmVhZF90OwojIDE0NCAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMiAzIDQKIyAzMSAiL3Vz ci9pbmNsdWRlL3N5cy90eXBlcy5oIiAyIDMgNAoKCgp0eXBlZGVmIF9fdV9jaGFyIHVfY2hhcjsK dHlwZWRlZiBfX3Vfc2hvcnQgdV9zaG9ydDsKdHlwZWRlZiBfX3VfaW50IHVfaW50Owp0eXBlZGVm IF9fdV9sb25nIHVfbG9uZzsKdHlwZWRlZiBfX3F1YWRfdCBxdWFkX3Q7CnR5cGVkZWYgX191X3F1 YWRfdCB1X3F1YWRfdDsKdHlwZWRlZiBfX2ZzaWRfdCBmc2lkX3Q7CgoKCgp0eXBlZGVmIF9fbG9m Zl90IGxvZmZfdDsKCgoKdHlwZWRlZiBfX2lub190IGlub190OwoKCgoKCgp0eXBlZGVmIF9faW5v NjRfdCBpbm82NF90OwoKCgoKdHlwZWRlZiBfX2Rldl90IGRldl90OwoKCgoKdHlwZWRlZiBfX2dp ZF90IGdpZF90OwoKCgoKdHlwZWRlZiBfX21vZGVfdCBtb2RlX3Q7CgoKCgp0eXBlZGVmIF9fbmxp bmtfdCBubGlua190OwoKCgoKdHlwZWRlZiBfX3VpZF90IHVpZF90OwoKCgoKCnR5cGVkZWYgX19v ZmZfdCBvZmZfdDsKCgoKCgoKdHlwZWRlZiBfX29mZjY0X3Qgb2ZmNjRfdDsKCgoKCnR5cGVkZWYg X19waWRfdCBwaWRfdDsKCgoKCnR5cGVkZWYgX19pZF90IGlkX3Q7CgoKCgp0eXBlZGVmIF9fc3Np emVfdCBzc2l6ZV90OwoKCgoKCnR5cGVkZWYgX19kYWRkcl90IGRhZGRyX3Q7CnR5cGVkZWYgX19j YWRkcl90IGNhZGRyX3Q7CgoKCgoKdHlwZWRlZiBfX2tleV90IGtleV90OwojIDEzMiAiL3Vzci9p bmNsdWRlL3N5cy90eXBlcy5oIiAzIDQKIyAxICIvdXNyL2luY2x1ZGUvdGltZS5oIiAxIDMgNAoj IDU5ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzIDQKdHlwZWRlZiBfX2Nsb2NrX3QgY2xvY2tfdDsK IyA3MCAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMyA0CnR5cGVkZWYgX190aW1lX3QgdGltZV90Owoj IDgyICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzIDQKdHlwZWRlZiBfX2Nsb2NraWRfdCBjbG9ja2lk X3Q7CiMgOTQgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMgNAp0eXBlZGVmIF9fdGltZXJfdCB0aW1l cl90OwojIDEzMyAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAyIDMgNAoKCgp0eXBlZGVmIF9f dXNlY29uZHNfdCB1c2Vjb25kc190OwoKCgp0eXBlZGVmIF9fc3VzZWNvbmRzX3Qgc3VzZWNvbmRz X3Q7CgoKCgoKIyAxICIvbm90bmZzL2ZjaGUvQlVJTEQtZ2NjLW11ZGZsYXAvSU5TVC9saWIvZ2Nj LWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjUtdHJlZS1zc2EvaW5jbHVkZS9zdGRkZWYuaCIgMSAz IDQKIyAxNDcgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMiAzIDQKCgoKdHlwZWRlZiB1bnNp Z25lZCBsb25nIGludCB1bG9uZzsKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBpbnQgdXNob3J0Owp0 eXBlZGVmIHVuc2lnbmVkIGludCB1aW50OwojIDE5MCAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5o IiAzIDQKdHlwZWRlZiBpbnQgaW50OF90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19RSV9f KSkpOwp0eXBlZGVmIGludCBpbnQxNl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19ISV9f KSkpOwp0eXBlZGVmIGludCBpbnQzMl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19TSV9f KSkpOwp0eXBlZGVmIGludCBpbnQ2NF90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19ESV9f KSkpOwoKCnR5cGVkZWYgdW5zaWduZWQgaW50IHVfaW50OF90IF9fYXR0cmlidXRlX18gKChfX21v ZGVfXyAoX19RSV9fKSkpOwp0eXBlZGVmIHVuc2lnbmVkIGludCB1X2ludDE2X3QgX19hdHRyaWJ1 dGVfXyAoKF9fbW9kZV9fIChfX0hJX18pKSk7CnR5cGVkZWYgdW5zaWduZWQgaW50IHVfaW50MzJf dCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fU0lfXykpKTsKdHlwZWRlZiB1bnNpZ25lZCBp bnQgdV9pbnQ2NF90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19ESV9fKSkpOwoKdHlwZWRl ZiBpbnQgcmVnaXN0ZXJfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fd29yZF9fKSkpOwoj IDIxNSAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAzIDQKIyAxICIvdXNyL2luY2x1ZGUvc3lz L3NlbGVjdC5oIiAxIDMgNAojIDMxICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAzIDQKIyAx ICIvdXNyL2luY2x1ZGUvYml0cy9zZWxlY3QuaCIgMSAzIDQKIyAzMiAiL3Vzci9pbmNsdWRlL3N5 cy9zZWxlY3QuaCIgMiAzIDQKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3NpZ3NldC5oIiAxIDMg NAojIDIzICIvdXNyL2luY2x1ZGUvYml0cy9zaWdzZXQuaCIgMyA0CnR5cGVkZWYgaW50IF9fc2ln X2F0b21pY190OwoKCgoKdHlwZWRlZiBzdHJ1Y3QKICB7CiAgICB1bnNpZ25lZCBsb25nIGludCBf X3ZhbFsoMTAyNCAvICg4ICogc2l6ZW9mICh1bnNpZ25lZCBsb25nIGludCkpKV07CiAgfSBfX3Np Z3NldF90OwojIDM1ICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAyIDMgNAoKCgp0eXBlZGVm IF9fc2lnc2V0X3Qgc2lnc2V0X3Q7CgoKCgoKIyAxICIvdXNyL2luY2x1ZGUvdGltZS5oIiAxIDMg NAojIDEwNiAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMyA0CnN0cnVjdCB0aW1lc3BlYwogIHsKICAg IF9fdGltZV90IHR2X3NlYzsKICAgIGxvbmcgaW50IHR2X25zZWM7CiAgfTsKIyA0NSAiL3Vzci9p bmNsdWRlL3N5cy9zZWxlY3QuaCIgMiAzIDQKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvdGltZS5o IiAxIDMgNAojIDY3ICIvdXNyL2luY2x1ZGUvYml0cy90aW1lLmgiIDMgNApzdHJ1Y3QgdGltZXZh bAogIHsKICAgIF9fdGltZV90IHR2X3NlYzsKICAgIF9fc3VzZWNvbmRzX3QgdHZfdXNlYzsKICB9 OwojIDQ3ICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAyIDMgNAojIDU1ICIvdXNyL2luY2x1 ZGUvc3lzL3NlbGVjdC5oIiAzIDQKdHlwZWRlZiBsb25nIGludCBfX2ZkX21hc2s7CgoKCgoKCgp0 eXBlZGVmIHN0cnVjdAogIHsKCgoKICAgIF9fZmRfbWFzayBmZHNfYml0c1sxMDI0IC8gKDggKiBz aXplb2YgKF9fZmRfbWFzaykpXTsKCgoKCgogIH0gZmRfc2V0OwoKCgoKCgp0eXBlZGVmIF9fZmRf bWFzayBmZF9tYXNrOwojIDk1ICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAzIDQKZXh0ZXJu ICJDIiB7CgoKCgoKCmV4dGVybiBpbnQgc2VsZWN0IChpbnQgX19uZmRzLCBmZF9zZXQgKl9fcmVz dHJpY3QgX19yZWFkZmRzLAogICAgICAgICAgICAgICAgICAgZmRfc2V0ICpfX3Jlc3RyaWN0IF9f d3JpdGVmZHMsCiAgICAgICAgICAgICAgICAgICBmZF9zZXQgKl9fcmVzdHJpY3QgX19leGNlcHRm ZHMsCiAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdGltZXZhbCAqX19yZXN0cmljdCBfX3RpbWVv dXQpIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgcHNlbGVjdCAoaW50IF9fbmZkcywgZmRfc2V0 ICpfX3Jlc3RyaWN0IF9fcmVhZGZkcywKICAgICAgICAgICAgICAgICAgICBmZF9zZXQgKl9fcmVz dHJpY3QgX193cml0ZWZkcywKICAgICAgICAgICAgICAgICAgICBmZF9zZXQgKl9fcmVzdHJpY3Qg X19leGNlcHRmZHMsCiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHRpbWVzcGVjICpf X3Jlc3RyaWN0IF9fdGltZW91dCwKICAgICAgICAgICAgICAgICAgICBjb25zdCBfX3NpZ3NldF90 ICpfX3Jlc3RyaWN0IF9fc2lnbWFzaykgdGhyb3cgKCk7CgoKfQojIDIxNiAiL3Vzci9pbmNsdWRl L3N5cy90eXBlcy5oIiAyIDMgNAoKCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9zeXNtYWNyb3MuaCIg MSAzIDQKIyAyMTkgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMiAzIDQKCgoKCnR5cGVkZWYg X19ibGtzaXplX3QgYmxrc2l6ZV90OwoKCgoKCgp0eXBlZGVmIF9fYmxrY250X3QgYmxrY250X3Q7 CgoKCnR5cGVkZWYgX19mc2Jsa2NudF90IGZzYmxrY250X3Q7CgoKCnR5cGVkZWYgX19mc2ZpbGNu dF90IGZzZmlsY250X3Q7CiMgMjU3ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMgNAp0eXBl ZGVmIF9fYmxrY250NjRfdCBibGtjbnQ2NF90Owp0eXBlZGVmIF9fZnNibGtjbnQ2NF90IGZzYmxr Y250NjRfdDsKdHlwZWRlZiBfX2ZzZmlsY250NjRfdCBmc2ZpbGNudDY0X3Q7CgoKfQojIDM5MSAi L3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAyIDMgNAoKCgoKCgpleHRlcm4gbG9uZyBpbnQgcmFuZG9t ICh2b2lkKSB0aHJvdyAoKTsKCgpleHRlcm4gdm9pZCBzcmFuZG9tICh1bnNpZ25lZCBpbnQgX19z ZWVkKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gY2hhciAqaW5pdHN0YXRlICh1bnNpZ25lZCBpbnQg X19zZWVkLCBjaGFyICpfX3N0YXRlYnVmLAogICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qg X19zdGF0ZWxlbikgdGhyb3cgKCk7CgoKCmV4dGVybiBjaGFyICpzZXRzdGF0ZSAoY2hhciAqX19z dGF0ZWJ1ZikgdGhyb3cgKCk7CgoKCgoKCgpzdHJ1Y3QgcmFuZG9tX2RhdGEKICB7CiAgICBpbnQz Ml90ICpmcHRyOwogICAgaW50MzJfdCAqcnB0cjsKICAgIGludDMyX3QgKnN0YXRlOwogICAgaW50 IHJhbmRfdHlwZTsKICAgIGludCByYW5kX2RlZzsKICAgIGludCByYW5kX3NlcDsKICAgIGludDMy X3QgKmVuZF9wdHI7CiAgfTsKCmV4dGVybiBpbnQgcmFuZG9tX3IgKHN0cnVjdCByYW5kb21fZGF0 YSAqX19yZXN0cmljdCBfX2J1ZiwKICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCAqX19yZXN0 cmljdCBfX3Jlc3VsdCkgdGhyb3cgKCk7CgpleHRlcm4gaW50IHNyYW5kb21fciAodW5zaWduZWQg aW50IF9fc2VlZCwgc3RydWN0IHJhbmRvbV9kYXRhICpfX2J1ZikgdGhyb3cgKCk7CgpleHRlcm4g aW50IGluaXRzdGF0ZV9yICh1bnNpZ25lZCBpbnQgX19zZWVkLCBjaGFyICpfX3Jlc3RyaWN0IF9f c3RhdGVidWYsCiAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX3N0YXRlbGVuLAogICAg ICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcmFuZG9tX2RhdGEgKl9fcmVzdHJpY3QgX19idWYp IHRocm93ICgpOwoKZXh0ZXJuIGludCBzZXRzdGF0ZV9yIChjaGFyICpfX3Jlc3RyaWN0IF9fc3Rh dGVidWYsCiAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHJhbmRvbV9kYXRhICpfX3Jlc3Ry aWN0IF9fYnVmKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IHJhbmQgKHZvaWQpIHRocm93ICgp OwoKZXh0ZXJuIHZvaWQgc3JhbmQgKHVuc2lnbmVkIGludCBfX3NlZWQpIHRocm93ICgpOwoKCgpl eHRlcm4gaW50IHJhbmRfciAodW5zaWduZWQgaW50ICpfX3NlZWQpIHRocm93ICgpOwoKCgoKCgoK ZXh0ZXJuIGRvdWJsZSBkcmFuZDQ4ICh2b2lkKSB0aHJvdyAoKTsKZXh0ZXJuIGRvdWJsZSBlcmFu ZDQ4ICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVszXSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGxv bmcgaW50IGxyYW5kNDggKHZvaWQpIHRocm93ICgpOwpleHRlcm4gbG9uZyBpbnQgbnJhbmQ0OCAo dW5zaWduZWQgc2hvcnQgaW50IF9feHN1YmlbM10pIHRocm93ICgpOwoKCmV4dGVybiBsb25nIGlu dCBtcmFuZDQ4ICh2b2lkKSB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcgaW50IGpyYW5kNDggKHVuc2ln bmVkIHNob3J0IGludCBfX3hzdWJpWzNdKSB0aHJvdyAoKTsKCgpleHRlcm4gdm9pZCBzcmFuZDQ4 IChsb25nIGludCBfX3NlZWR2YWwpIHRocm93ICgpOwpleHRlcm4gdW5zaWduZWQgc2hvcnQgaW50 ICpzZWVkNDggKHVuc2lnbmVkIHNob3J0IGludCBfX3NlZWQxNnZbM10pIHRocm93ICgpOwpleHRl cm4gdm9pZCBsY29uZzQ4ICh1bnNpZ25lZCBzaG9ydCBpbnQgX19wYXJhbVs3XSkgdGhyb3cgKCk7 CgoKCgoKc3RydWN0IGRyYW5kNDhfZGF0YQogIHsKICAgIHVuc2lnbmVkIHNob3J0IGludCBfX3hb M107CiAgICB1bnNpZ25lZCBzaG9ydCBpbnQgX19vbGRfeFszXTsKICAgIHVuc2lnbmVkIHNob3J0 IGludCBfX2M7CiAgICB1bnNpZ25lZCBzaG9ydCBpbnQgX19pbml0OwogICAgdW5zaWduZWQgbG9u ZyBsb25nIGludCBfX2E7CiAgfTsKCgpleHRlcm4gaW50IGRyYW5kNDhfciAoc3RydWN0IGRyYW5k NDhfZGF0YSAqX19yZXN0cmljdCBfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgIGRvdWJs ZSAqX19yZXN0cmljdCBfX3Jlc3VsdCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgZXJhbmQ0OF9yICh1 bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVszXSwKICAgICAgICAgICAgICAgICAgICAgIHN0cnVj dCBkcmFuZDQ4X2RhdGEgKl9fcmVzdHJpY3QgX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAg ICBkb3VibGUgKl9fcmVzdHJpY3QgX19yZXN1bHQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgbHJh bmQ0OF9yIChzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmZmVyLAogICAgICAg ICAgICAgICAgICAgICAgbG9uZyBpbnQgKl9fcmVzdHJpY3QgX19yZXN1bHQpIHRocm93ICgpOwpl eHRlcm4gaW50IG5yYW5kNDhfciAodW5zaWduZWQgc2hvcnQgaW50IF9feHN1YmlbM10sCiAgICAg ICAgICAgICAgICAgICAgICBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmZmVy LAogICAgICAgICAgICAgICAgICAgICAgbG9uZyBpbnQgKl9fcmVzdHJpY3QgX19yZXN1bHQpIHRo cm93ICgpOwoKCmV4dGVybiBpbnQgbXJhbmQ0OF9yIChzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX3Jl c3RyaWN0IF9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgbG9uZyBpbnQgKl9fcmVzdHJp Y3QgX19yZXN1bHQpIHRocm93ICgpOwpleHRlcm4gaW50IGpyYW5kNDhfciAodW5zaWduZWQgc2hv cnQgaW50IF9feHN1YmlbM10sCiAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZHJhbmQ0OF9k YXRhICpfX3Jlc3RyaWN0IF9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgbG9uZyBpbnQg Kl9fcmVzdHJpY3QgX19yZXN1bHQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgc3JhbmQ0OF9yIChs b25nIGludCBfX3NlZWR2YWwsIHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fYnVmZmVyKQogICAgIHRo cm93ICgpOwoKZXh0ZXJuIGludCBzZWVkNDhfciAodW5zaWduZWQgc2hvcnQgaW50IF9fc2VlZDE2 dlszXSwKICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19idWZmZXIp IHRocm93ICgpOwoKZXh0ZXJuIGludCBsY29uZzQ4X3IgKHVuc2lnbmVkIHNob3J0IGludCBfX3Bh cmFtWzddLAogICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19idWZm ZXIpIHRocm93ICgpOwojIDUyNyAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzIDQKZXh0ZXJuIHZv aWQgKm1hbGxvYyAoc2l6ZV90IF9fc2l6ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbWFs bG9jX18pKTsKCmV4dGVybiB2b2lkICpjYWxsb2MgKHNpemVfdCBfX25tZW1iLCBzaXplX3QgX19z aXplKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7CgoKCgoKZXh0 ZXJuIHZvaWQgKnJlYWxsb2MgKHZvaWQgKl9fcHRyLCBzaXplX3QgX19zaXplKSB0aHJvdyAoKSBf X2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwoKZXh0ZXJuIHZvaWQgZnJlZSAodm9pZCAqX19w dHIpIHRocm93ICgpOwoKCgpleHRlcm4gdm9pZCBjZnJlZSAodm9pZCAqX19wdHIpIHRocm93ICgp OwoKCgojIDEgIi91c3IvaW5jbHVkZS9hbGxvY2EuaCIgMSAzIDQKIyAyNSAiL3Vzci9pbmNsdWRl L2FsbG9jYS5oIiAzIDQKIyAxICIvbm90bmZzL2ZjaGUvQlVJTEQtZ2NjLW11ZGZsYXAvSU5TVC9s aWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjUtdHJlZS1zc2EvaW5jbHVkZS9zdGRkZWYu aCIgMSAzIDQKIyAyNiAiL3Vzci9pbmNsdWRlL2FsbG9jYS5oIiAyIDMgNAoKZXh0ZXJuICJDIiB7 CgoKCgoKZXh0ZXJuIHZvaWQgKmFsbG9jYSAoc2l6ZV90IF9fc2l6ZSkgdGhyb3cgKCk7CgoKCgoK fQojIDU0NyAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAyIDMgNAoKCgoKZXh0ZXJuIHZvaWQgKnZh bGxvYyAoc2l6ZV90IF9fc2l6ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18p KTsKCgoKCmV4dGVybiBpbnQgcG9zaXhfbWVtYWxpZ24gKHZvaWQgKipfX21lbXB0ciwgc2l6ZV90 IF9fYWxpZ25tZW50LCBzaXplX3QgX19zaXplKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18g KChfX21hbGxvY19fKSk7CgoKCmV4dGVybiB2b2lkIGFib3J0ICh2b2lkKSB0aHJvdyAoKSBfX2F0 dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CgoKCmV4dGVybiBpbnQgYXRleGl0ICh2b2lkICgq X19mdW5jKSAodm9pZCkpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBvbl9leGl0ICh2b2lkICgq X19mdW5jKSAoaW50IF9fc3RhdHVzLCB2b2lkICpfX2FyZyksIHZvaWQgKl9fYXJnKQogICAgIHRo cm93ICgpOwoKCgoKCmV4dGVybiB2b2lkIGV4aXQgKGludCBfX3N0YXR1cykgdGhyb3cgKCkgX19h dHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKCgoKZXh0ZXJuIHZvaWQgX0V4aXQgKGludCBf X3N0YXR1cykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKCgoKZXh0 ZXJuIGNoYXIgKmdldGVudiAoX19jb25zdCBjaGFyICpfX25hbWUpIHRocm93ICgpOwoKCgpleHRl cm4gY2hhciAqX19zZWN1cmVfZ2V0ZW52IChfX2NvbnN0IGNoYXIgKl9fbmFtZSkgdGhyb3cgKCk7 CgoKCgoKZXh0ZXJuIGludCBwdXRlbnYgKGNoYXIgKl9fc3RyaW5nKSB0aHJvdyAoKTsKCgoKCgpl eHRlcm4gaW50IHNldGVudiAoX19jb25zdCBjaGFyICpfX25hbWUsIF9fY29uc3QgY2hhciAqX192 YWx1ZSwgaW50IF9fcmVwbGFjZSkKICAgICB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHVuc2V0ZW52 IChfX2NvbnN0IGNoYXIgKl9fbmFtZSkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgY2xlYXJl bnYgKHZvaWQpIHRocm93ICgpOwojIDYyMyAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzIDQKZXh0 ZXJuIGNoYXIgKm1rdGVtcCAoY2hhciAqX190ZW1wbGF0ZSkgdGhyb3cgKCk7CgoKCgoKCgpleHRl cm4gaW50IG1rc3RlbXAgKGNoYXIgKl9fdGVtcGxhdGUpIHRocm93ICgpOwojIDY0MCAiL3Vzci9p bmNsdWRlL3N0ZGxpYi5oIiAzIDQKZXh0ZXJuIGludCBta3N0ZW1wNjQgKGNoYXIgKl9fdGVtcGxh dGUpIHRocm93ICgpOwojIDY1MCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzIDQKZXh0ZXJuIGNo YXIgKm1rZHRlbXAgKGNoYXIgKl9fdGVtcGxhdGUpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBz eXN0ZW0gKF9fY29uc3QgY2hhciAqX19jb21tYW5kKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGNo YXIgKmNhbm9uaWNhbGl6ZV9maWxlX25hbWUgKF9fY29uc3QgY2hhciAqX19uYW1lKSB0aHJvdyAo KTsKIyA2NzIgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMyA0CmV4dGVybiBjaGFyICpyZWFscGF0 aCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbmFtZSwKICAgICAgICAgICAgICAgICAgICAg ICBjaGFyICpfX3Jlc3RyaWN0IF9fcmVzb2x2ZWQpIHRocm93ICgpOwoKCgoKCgp0eXBlZGVmIGlu dCAoKl9fY29tcGFyX2ZuX3QpIChfX2NvbnN0IHZvaWQgKiwgX19jb25zdCB2b2lkICopOwoKCnR5 cGVkZWYgX19jb21wYXJfZm5fdCBjb21wYXJpc29uX2ZuX3Q7CgoKCgoKZXh0ZXJuIHZvaWQgKmJz ZWFyY2ggKF9fY29uc3Qgdm9pZCAqX19rZXksIF9fY29uc3Qgdm9pZCAqX19iYXNlLAogICAgICAg ICAgICAgICAgICAgICAgc2l6ZV90IF9fbm1lbWIsIHNpemVfdCBfX3NpemUsIF9fY29tcGFyX2Zu X3QgX19jb21wYXIpOwoKCgpleHRlcm4gdm9pZCBxc29ydCAodm9pZCAqX19iYXNlLCBzaXplX3Qg X19ubWVtYiwgc2l6ZV90IF9fc2l6ZSwKICAgICAgICAgICAgICAgICAgIF9fY29tcGFyX2ZuX3Qg X19jb21wYXIpOwoKCgpleHRlcm4gaW50IGFicyAoaW50IF9feCkgdGhyb3cgKCkgX19hdHRyaWJ1 dGVfXyAoKF9fY29uc3RfXykpOwpleHRlcm4gbG9uZyBpbnQgbGFicyAobG9uZyBpbnQgX194KSB0 aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgpfX2V4dGVuc2lvbl9fIGV4dGVy biBsb25nIGxvbmcgaW50IGxsYWJzIChsb25nIGxvbmcgaW50IF9feCkKICAgICB0aHJvdyAoKSBf X2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgoKCmV4dGVybiBkaXZfdCBkaXYgKGludCBf X251bWVyLCBpbnQgX19kZW5vbSkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25z dF9fKSk7CmV4dGVybiBsZGl2X3QgbGRpdiAobG9uZyBpbnQgX19udW1lciwgbG9uZyBpbnQgX19k ZW5vbSkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgpfX2V4dGVu c2lvbl9fIGV4dGVybiBsbGRpdl90IGxsZGl2IChsb25nIGxvbmcgaW50IF9fbnVtZXIsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgbG9uZyBpbnQgX19kZW5vbSkKICAg ICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CiMgNzI4ICIvdXNyL2luY2x1 ZGUvc3RkbGliLmgiIDMgNApleHRlcm4gY2hhciAqZWN2dCAoZG91YmxlIF9fdmFsdWUsIGludCBf X25kaWdpdCwgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsCiAgICAgICAgICAgICAgICAgICBpbnQg Kl9fcmVzdHJpY3QgX19zaWduKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBjaGFyICpmY3Z0IChkb3Vi bGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LCBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwKICAgICAg ICAgICAgICAgICAgIGludCAqX19yZXN0cmljdCBfX3NpZ24pIHRocm93ICgpOwoKCgoKZXh0ZXJu IGNoYXIgKmdjdnQgKGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsIGNoYXIgKl9fYnVmKSB0 aHJvdyAoKTsKCgoKCmV4dGVybiBjaGFyICpxZWN2dCAobG9uZyBkb3VibGUgX192YWx1ZSwgaW50 IF9fbmRpZ2l0LAogICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0cmljdCBfX2RlY3B0LCBp bnQgKl9fcmVzdHJpY3QgX19zaWduKSB0aHJvdyAoKTsKZXh0ZXJuIGNoYXIgKnFmY3Z0IChsb25n IGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsCiAgICAgICAgICAgICAgICAgICAgaW50ICpf X3Jlc3RyaWN0IF9fZGVjcHQsIGludCAqX19yZXN0cmljdCBfX3NpZ24pIHRocm93ICgpOwpleHRl cm4gY2hhciAqcWdjdnQgKGxvbmcgZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwgY2hhciAq X19idWYpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBlY3Z0X3IgKGRvdWJsZSBfX3ZhbHVlLCBp bnQgX19uZGlnaXQsIGludCAqX19yZXN0cmljdCBfX2RlY3B0LAogICAgICAgICAgICAgICAgICAg aW50ICpfX3Jlc3RyaWN0IF9fc2lnbiwgY2hhciAqX19yZXN0cmljdCBfX2J1ZiwKICAgICAgICAg ICAgICAgICAgIHNpemVfdCBfX2xlbikgdGhyb3cgKCk7CmV4dGVybiBpbnQgZmN2dF9yIChkb3Vi bGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LCBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwKICAgICAg ICAgICAgICAgICAgIGludCAqX19yZXN0cmljdCBfX3NpZ24sIGNoYXIgKl9fcmVzdHJpY3QgX19i dWYsCiAgICAgICAgICAgICAgICAgICBzaXplX3QgX19sZW4pIHRocm93ICgpOwoKZXh0ZXJuIGlu dCBxZWN2dF9yIChsb25nIGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsCiAgICAgICAgICAg ICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsIGludCAqX19yZXN0cmljdCBfX3NpZ24s CiAgICAgICAgICAgICAgICAgICAgY2hhciAqX19yZXN0cmljdCBfX2J1Ziwgc2l6ZV90IF9fbGVu KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBxZmN2dF9yIChsb25nIGRvdWJsZSBfX3ZhbHVlLCBpbnQg X19uZGlnaXQsCiAgICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsIGlu dCAqX19yZXN0cmljdCBfX3NpZ24sCiAgICAgICAgICAgICAgICAgICAgY2hhciAqX19yZXN0cmlj dCBfX2J1Ziwgc2l6ZV90IF9fbGVuKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCBtYmxlbiAo X19jb25zdCBjaGFyICpfX3MsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgbWJ0 b3djICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fcHdjLAogICAgICAgICAgICAgICAgICAgX19jb25z dCBjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKZXh0ZXJuIGlu dCB3Y3RvbWIgKGNoYXIgKl9fcywgd2NoYXJfdCBfX3djaGFyKSB0aHJvdyAoKTsKCgoKZXh0ZXJu IHNpemVfdCBtYnN0b3djcyAod2NoYXJfdCAqX19yZXN0cmljdCBfX3B3Y3MsCiAgICAgICAgICAg ICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3MsIHNpemVfdCBfX24pIHRo cm93ICgpOwoKZXh0ZXJuIHNpemVfdCB3Y3N0b21icyAoY2hhciAqX19yZXN0cmljdCBfX3MsCiAg ICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3B3Y3Ms IHNpemVfdCBfX24pCiAgICAgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gaW50IHJwbWF0Y2ggKF9f Y29uc3QgY2hhciAqX19yZXNwb25zZSkgdGhyb3cgKCk7CiMgODA4ICIvdXNyL2luY2x1ZGUvc3Rk bGliLmgiIDMgNApleHRlcm4gaW50IGdldHN1Ym9wdCAoY2hhciAqKl9fcmVzdHJpY3QgX19vcHRp b25wLAogICAgICAgICAgICAgICAgICAgICAgY2hhciAqX19jb25zdCAqX19yZXN0cmljdCBfX3Rv a2VucywKICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fdmFsdWVwKSB0 aHJvdyAoKTsKCgoKCgpleHRlcm4gdm9pZCBzZXRrZXkgKF9fY29uc3QgY2hhciAqX19rZXkpIHRo cm93ICgpOwoKCgoKCgoKZXh0ZXJuIGludCBwb3NpeF9vcGVucHQgKGludCBfX29mbGFnKSB0aHJv dyAoKTsKCgoKCgoKCmV4dGVybiBpbnQgZ3JhbnRwdCAoaW50IF9fZmQpIHRocm93ICgpOwoKCgpl eHRlcm4gaW50IHVubG9ja3B0IChpbnQgX19mZCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hhciAq cHRzbmFtZSAoaW50IF9fZmQpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50IHB0c25hbWVfciAo aW50IF9fZmQsIGNoYXIgKl9fYnVmLCBzaXplX3QgX19idWZsZW4pIHRocm93ICgpOwoKCmV4dGVy biBpbnQgZ2V0cHQgKHZvaWQpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50IGdldGxvYWRhdmcg KGRvdWJsZSBfX2xvYWRhdmdbXSwgaW50IF9fbmVsZW0pIHRocm93ICgpOwoKCgoKCn0KIyA1MyAi L25vdG5mcy9mY2hlL0JVSUxELWdjYy1tdWRmbGFwL0lOU1QvaW5jbHVkZS9jKysvMy41LXRyZWUt c3NhL2NzdGRsaWIiIDIgMwojIDg0ICIvbm90bmZzL2ZjaGUvQlVJTEQtZ2NjLW11ZGZsYXAvSU5T VC9pbmNsdWRlL2MrKy8zLjUtdHJlZS1zc2EvY3N0ZGxpYiIgMwpuYW1lc3BhY2Ugc3RkCnsKICB1 c2luZyA6OmRpdl90OwogIHVzaW5nIDo6bGRpdl90OwoKICB1c2luZyA6OmFib3J0OwogIHVzaW5n IDo6YWJzOwogIHVzaW5nIDo6YXRleGl0OwogIHVzaW5nIDo6YXRvZjsKICB1c2luZyA6OmF0b2k7 CiAgdXNpbmcgOjphdG9sOwogIHVzaW5nIDo6YnNlYXJjaDsKICB1c2luZyA6OmNhbGxvYzsKICB1 c2luZyA6OmRpdjsKICB1c2luZyA6OmV4aXQ7CiAgdXNpbmcgOjpmcmVlOwogIHVzaW5nIDo6Z2V0 ZW52OwogIHVzaW5nIDo6bGFiczsKICB1c2luZyA6OmxkaXY7CiAgdXNpbmcgOjptYWxsb2M7CiAg dXNpbmcgOjptYmxlbjsKICB1c2luZyA6Om1ic3Rvd2NzOwogIHVzaW5nIDo6bWJ0b3djOwogIHVz aW5nIDo6cXNvcnQ7CiAgdXNpbmcgOjpyYW5kOwogIHVzaW5nIDo6cmVhbGxvYzsKICB1c2luZyA6 OnNyYW5kOwogIHVzaW5nIDo6c3RydG9kOwogIHVzaW5nIDo6c3RydG9sOwogIHVzaW5nIDo6c3Ry dG91bDsKICB1c2luZyA6OnN5c3RlbTsKICB1c2luZyA6Ondjc3RvbWJzOwogIHVzaW5nIDo6d2N0 b21iOwoKICBpbmxpbmUgbG9uZwogIGFicyhsb25nIF9faSkgeyByZXR1cm4gbGFicyhfX2kpOyB9 CgogIGlubGluZSBsZGl2X3QKICBkaXYobG9uZyBfX2ksIGxvbmcgX19qKSB7IHJldHVybiBsZGl2 KF9faSwgX19qKTsgfQp9CiMgMTM2ICIvbm90bmZzL2ZjaGUvQlVJTEQtZ2NjLW11ZGZsYXAvSU5T VC9pbmNsdWRlL2MrKy8zLjUtdHJlZS1zc2EvY3N0ZGxpYiIgMwpuYW1lc3BhY2UgX19nbnVfY3h4 CnsKICB1c2luZyA6OmxsZGl2X3Q7CiAgdXNpbmcgOjpfRXhpdDsKCiAgaW5saW5lIGxvbmcgbG9u ZwogIGFicyhsb25nIGxvbmcgX194KSB7IHJldHVybiBfX3ggPj0gMCA/IF9feCA6IC1fX3g7IH0K CiAgaW5saW5lIGxvbmcgbG9uZwogIGxsYWJzKGxvbmcgbG9uZyBfX3gpIHsgcmV0dXJuIF9feCA+ PSAwID8gX194IDogLV9feDsgfQoKICBpbmxpbmUgbGxkaXZfdAogIGRpdihsb25nIGxvbmcgX19u LCBsb25nIGxvbmcgX19kKQogIHsgbGxkaXZfdCBfX3E7IF9fcS5xdW90ID0gX19uIC8gX19kOyBf X3EucmVtID0gX19uICUgX19kOyByZXR1cm4gX19xOyB9CgogIGlubGluZSBsbGRpdl90CiAgbGxk aXYobG9uZyBsb25nIF9fbiwgbG9uZyBsb25nIF9fZCkKICB7IGxsZGl2X3QgX19xOyBfX3EucXVv dCA9IF9fbiAvIF9fZDsgX19xLnJlbSA9IF9fbiAlIF9fZDsgcmV0dXJuIF9fcTsgfQoKICB1c2lu ZyA6OmF0b2xsOwogIHVzaW5nIDo6c3RydG9mOwogIHVzaW5nIDo6c3RydG9sbDsKICB1c2luZyA6 OnN0cnRvdWxsOwogIHVzaW5nIDo6c3RydG9sZDsKfQoKbmFtZXNwYWNlIHN0ZAp7CiAgdXNpbmcg X19nbnVfY3h4OjpsbGRpdl90OwogIHVzaW5nIF9fZ251X2N4eDo6X0V4aXQ7CiAgdXNpbmcgX19n bnVfY3h4OjphYnM7CiAgdXNpbmcgX19nbnVfY3h4OjpsbGFiczsKICB1c2luZyBfX2dudV9jeHg6 OmRpdjsKICB1c2luZyBfX2dudV9jeHg6OmxsZGl2OwogIHVzaW5nIF9fZ251X2N4eDo6YXRvbGw7 CiAgdXNpbmcgX19nbnVfY3h4OjpzdHJ0b2Y7CiAgdXNpbmcgX19nbnVfY3h4OjpzdHJ0b2xsOwog IHVzaW5nIF9fZ251X2N4eDo6c3RydG91bGw7CiAgdXNpbmcgX19nbnVfY3h4OjpzdHJ0b2xkOwp9 CiMgNjggIi9ub3RuZnMvZmNoZS9CVUlMRC1nY2MtbXVkZmxhcC9JTlNUL2luY2x1ZGUvYysrLzMu NS10cmVlLXNzYS9iaXRzL3N0bF9hbGdvYmFzZS5oIiAyIDMKCiMgMSAiL25vdG5mcy9mY2hlL0JV SUxELWdjYy1tdWRmbGFwL0lOU1QvaW5jbHVkZS9jKysvMy41LXRyZWUtc3NhL25ldyIgMSAzCiMg NDIgIi9ub3RuZnMvZmNoZS9CVUlMRC1nY2MtbXVkZmxhcC9JTlNUL2luY2x1ZGUvYysrLzMuNS10 cmVlLXNzYS9uZXciIDMKIyAxICIvbm90bmZzL2ZjaGUvQlVJTEQtZ2NjLW11ZGZsYXAvSU5TVC9p bmNsdWRlL2MrKy8zLjUtdHJlZS1zc2EvZXhjZXB0aW9uIiAxIDMKIyA0MCAiL25vdG5mcy9mY2hl L0JVSUxELWdjYy1tdWRmbGFwL0lOU1QvaW5jbHVkZS9jKysvMy41LXRyZWUtc3NhL2V4Y2VwdGlv biIgMwpleHRlcm4gIkMrKyIgewoKbmFtZXNwYWNlIHN0ZAp7CiMgNTIgIi9ub3RuZnMvZmNoZS9C VUlMRC1nY2MtbXVkZmxhcC9JTlNUL2luY2x1ZGUvYysrLzMuNS10cmVlLXNzYS9leGNlcHRpb24i IDMKICBjbGFzcyBleGNlcHRpb24KICB7CiAgcHVibGljOgogICAgZXhjZXB0aW9uKCkgdGhyb3co KSB7IH0KICAgIHZpcnR1YWwgfmV4Y2VwdGlvbigpIHRocm93KCk7CgoKICAgIHZpcnR1YWwgY29u c3QgY2hhciogd2hhdCgpIGNvbnN0IHRocm93KCk7CiAgfTsKCgoKICBjbGFzcyBiYWRfZXhjZXB0 aW9uIDogcHVibGljIGV4Y2VwdGlvbgogIHsKICBwdWJsaWM6CiAgICBiYWRfZXhjZXB0aW9uKCkg dGhyb3coKSB7IH0KCgogICAgdmlydHVhbCB+YmFkX2V4Y2VwdGlvbigpIHRocm93KCk7CiAgfTsK CgogIHR5cGVkZWYgdm9pZCAoKnRlcm1pbmF0ZV9oYW5kbGVyKSAoKTsKCiAgdHlwZWRlZiB2b2lk ICgqdW5leHBlY3RlZF9oYW5kbGVyKSAoKTsKCgogIHRlcm1pbmF0ZV9oYW5kbGVyIHNldF90ZXJt aW5hdGUodGVybWluYXRlX2hhbmRsZXIpIHRocm93KCk7CgoKICB2b2lkIHRlcm1pbmF0ZSgpIF9f YXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKCgogIHVuZXhwZWN0ZWRfaGFuZGxlciBzZXRf dW5leHBlY3RlZCh1bmV4cGVjdGVkX2hhbmRsZXIpIHRocm93KCk7CgoKICB2b2lkIHVuZXhwZWN0 ZWQoKSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CiMgMTAwICIvbm90bmZzL2ZjaGUv QlVJTEQtZ2NjLW11ZGZsYXAvSU5TVC9pbmNsdWRlL2MrKy8zLjUtdHJlZS1zc2EvZXhjZXB0aW9u IiAzCiAgYm9vbCB1bmNhdWdodF9leGNlcHRpb24oKSB0aHJvdygpOwp9CgpuYW1lc3BhY2UgX19n bnVfY3h4CnsKIyAxMTUgIi9ub3RuZnMvZmNoZS9CVUlMRC1nY2MtbXVkZmxhcC9JTlNUL2luY2x1 ZGUvYysrLzMuNS10cmVlLXNzYS9leGNlcHRpb24iIDMKICB2b2lkIF9fdmVyYm9zZV90ZXJtaW5h dGVfaGFuZGxlciAoKTsKfQoKfQojIDQzICIvbm90bmZzL2ZjaGUvQlVJTEQtZ2NjLW11ZGZsYXAv SU5TVC9pbmNsdWRlL2MrKy8zLjUtdHJlZS1zc2EvbmV3IiAyIDMKCmV4dGVybiAiQysrIiB7Cgpu YW1lc3BhY2Ugc3RkCnsKCgoKCgogIGNsYXNzIGJhZF9hbGxvYyA6IHB1YmxpYyBleGNlcHRpb24K ICB7CiAgcHVibGljOgogICAgYmFkX2FsbG9jKCkgdGhyb3coKSB7IH0KCgogICAgdmlydHVhbCB+ YmFkX2FsbG9jKCkgdGhyb3coKTsKICB9OwoKICBzdHJ1Y3Qgbm90aHJvd190IHsgfTsKICBleHRl cm4gY29uc3Qgbm90aHJvd190IG5vdGhyb3c7CgoKICB0eXBlZGVmIHZvaWQgKCpuZXdfaGFuZGxl cikoKTsKCiAgbmV3X2hhbmRsZXIgc2V0X25ld19oYW5kbGVyKG5ld19oYW5kbGVyKSB0aHJvdygp Owp9CiMgODIgIi9ub3RuZnMvZmNoZS9CVUlMRC1nY2MtbXVkZmxhcC9JTlNUL2luY2x1ZGUvYysr LzMuNS10cmVlLXNzYS9uZXciIDMKdm9pZCogb3BlcmF0b3IgbmV3KHN0ZDo6c2l6ZV90KSB0aHJv dyAoc3RkOjpiYWRfYWxsb2MpOwp2b2lkKiBvcGVyYXRvciBuZXdbXShzdGQ6OnNpemVfdCkgdGhy b3cgKHN0ZDo6YmFkX2FsbG9jKTsKdm9pZCBvcGVyYXRvciBkZWxldGUodm9pZCopIHRocm93KCk7 CnZvaWQgb3BlcmF0b3IgZGVsZXRlW10odm9pZCopIHRocm93KCk7CnZvaWQqIG9wZXJhdG9yIG5l dyhzdGQ6OnNpemVfdCwgY29uc3Qgc3RkOjpub3Rocm93X3QmKSB0aHJvdygpOwp2b2lkKiBvcGVy YXRvciBuZXdbXShzdGQ6OnNpemVfdCwgY29uc3Qgc3RkOjpub3Rocm93X3QmKSB0aHJvdygpOwp2 b2lkIG9wZXJhdG9yIGRlbGV0ZSh2b2lkKiwgY29uc3Qgc3RkOjpub3Rocm93X3QmKSB0aHJvdygp Owp2b2lkIG9wZXJhdG9yIGRlbGV0ZVtdKHZvaWQqLCBjb25zdCBzdGQ6Om5vdGhyb3dfdCYpIHRo cm93KCk7CgoKaW5saW5lIHZvaWQqIG9wZXJhdG9yIG5ldyhzdGQ6OnNpemVfdCwgdm9pZCogX19w KSB0aHJvdygpIHsgcmV0dXJuIF9fcDsgfQppbmxpbmUgdm9pZCogb3BlcmF0b3IgbmV3W10oc3Rk OjpzaXplX3QsIHZvaWQqIF9fcCkgdGhyb3coKSB7IHJldHVybiBfX3A7IH0KCgppbmxpbmUgdm9p ZCBvcGVyYXRvciBkZWxldGUgKHZvaWQqLCB2b2lkKikgdGhyb3coKSB7IH0KaW5saW5lIHZvaWQg b3BlcmF0b3IgZGVsZXRlW10odm9pZCosIHZvaWQqKSB0aHJvdygpIHsgfQoKfQojIDcwICIvbm90 bmZzL2ZjaGUvQlVJTEQtZ2NjLW11ZGZsYXAvSU5TVC9pbmNsdWRlL2MrKy8zLjUtdHJlZS1zc2Ev Yml0cy9zdGxfYWxnb2Jhc2UuaCIgMiAzCiMgMSAiL25vdG5mcy9mY2hlL0JVSUxELWdjYy1tdWRm bGFwL0lOU1QvaW5jbHVkZS9jKysvMy41LXRyZWUtc3NhL2lvc2Z3ZCIgMSAzCiMgNDQgIi9ub3Ru ZnMvZmNoZS9CVUlMRC1nY2MtbXVkZmxhcC9JTlNUL2luY2x1ZGUvYysrLzMuNS10cmVlLXNzYS9p b3Nmd2QiIDMKCgojIDEgIi9ub3RuZnMvZmNoZS9CVUlMRC1nY2MtbXVkZmxhcC9JTlNUL2luY2x1 ZGUvYysrLzMuNS10cmVlLXNzYS9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2MrK2xvY2FsZS5oIiAx IDMKIyA0MCAiL25vdG5mcy9mY2hlL0JVSUxELWdjYy1tdWRmbGFwL0lOU1QvaW5jbHVkZS9jKysv My41LXRyZWUtc3NhL2k2ODYtcGMtbGludXgtZ251L2JpdHMvYysrbG9jYWxlLmgiIDMKCiMgMSAi L25vdG5mcy9mY2hlL0JVSUxELWdjYy1tdWRmbGFwL0lOU1QvaW5jbHVkZS9jKysvMy41LXRyZWUt c3NhL2Nsb2NhbGUiIDEgMwojIDQ4ICIvbm90bmZzL2ZjaGUvQlVJTEQtZ2NjLW11ZGZsYXAvSU5T VC9pbmNsdWRlL2MrKy8zLjUtdHJlZS1zc2EvY2xvY2FsZSIgMwoKIyAxICIvdXNyL2luY2x1ZGUv bG9jYWxlLmgiIDEgMyA0CiMgMjkgIi91c3IvaW5jbHVkZS9sb2NhbGUuaCIgMyA0CiMgMSAiL25v dG5mcy9mY2hlL0JVSUxELWdjYy1tdWRmbGFwL0lOU1QvbGliL2djYy1saWIvaTY4Ni1wYy1saW51 eC1nbnUvMy41LXRyZWUtc3NhL2luY2x1ZGUvc3RkZGVmLmgiIDEgMyA0CiMgMzAgIi91c3IvaW5j bHVkZS9sb2NhbGUuaCIgMiAzIDQKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9sb2NhbGUuaCIgMSAz IDQKIyAyNyAiL3Vzci9pbmNsdWRlL2JpdHMvbG9jYWxlLmgiIDMgNAplbnVtCnsKICBfX0xDX0NU WVBFID0gMCwKICBfX0xDX05VTUVSSUMgPSAxLAogIF9fTENfVElNRSA9IDIsCiAgX19MQ19DT0xM QVRFID0gMywKICBfX0xDX01PTkVUQVJZID0gNCwKICBfX0xDX01FU1NBR0VTID0gNSwKICBfX0xD X0FMTCA9IDYsCiAgX19MQ19QQVBFUiA9IDcsCiAgX19MQ19OQU1FID0gOCwKICBfX0xDX0FERFJF U1MgPSA5LAogIF9fTENfVEVMRVBIT05FID0gMTAsCiAgX19MQ19NRUFTVVJFTUVOVCA9IDExLAog IF9fTENfSURFTlRJRklDQVRJT04gPSAxMgp9OwojIDMxICIvdXNyL2luY2x1ZGUvbG9jYWxlLmgi IDIgMyA0CgpleHRlcm4gIkMiIHsKIyA1MiAiL3Vzci9pbmNsdWRlL2xvY2FsZS5oIiAzIDQKc3Ry dWN0IGxjb252CnsKCgogIGNoYXIgKmRlY2ltYWxfcG9pbnQ7CiAgY2hhciAqdGhvdXNhbmRzX3Nl cDsKCgoKCgogIGNoYXIgKmdyb3VwaW5nOwoKCgoKCiAgY2hhciAqaW50X2N1cnJfc3ltYm9sOwog IGNoYXIgKmN1cnJlbmN5X3N5bWJvbDsKICBjaGFyICptb25fZGVjaW1hbF9wb2ludDsKICBjaGFy ICptb25fdGhvdXNhbmRzX3NlcDsKICBjaGFyICptb25fZ3JvdXBpbmc7CiAgY2hhciAqcG9zaXRp dmVfc2lnbjsKICBjaGFyICpuZWdhdGl2ZV9zaWduOwogIGNoYXIgaW50X2ZyYWNfZGlnaXRzOwog IGNoYXIgZnJhY19kaWdpdHM7CgogIGNoYXIgcF9jc19wcmVjZWRlczsKCiAgY2hhciBwX3NlcF9i eV9zcGFjZTsKCiAgY2hhciBuX2NzX3ByZWNlZGVzOwoKICBjaGFyIG5fc2VwX2J5X3NwYWNlOwoK CgoKCgogIGNoYXIgcF9zaWduX3Bvc247CiAgY2hhciBuX3NpZ25fcG9zbjsKCgogIGNoYXIgaW50 X3BfY3NfcHJlY2VkZXM7CgogIGNoYXIgaW50X3Bfc2VwX2J5X3NwYWNlOwoKICBjaGFyIGludF9u X2NzX3ByZWNlZGVzOwoKICBjaGFyIGludF9uX3NlcF9ieV9zcGFjZTsKCgoKCgoKICBjaGFyIGlu dF9wX3NpZ25fcG9zbjsKICBjaGFyIGludF9uX3NpZ25fcG9zbjsKIyAxMTkgIi91c3IvaW5jbHVk ZS9sb2NhbGUuaCIgMyA0Cn07CgoKCmV4dGVybiBjaGFyICpzZXRsb2NhbGUgKGludCBfX2NhdGVn b3J5LCBfX2NvbnN0IGNoYXIgKl9fbG9jYWxlKSB0aHJvdyAoKTsKCgpleHRlcm4gc3RydWN0IGxj b252ICpsb2NhbGVjb252ICh2b2lkKSB0aHJvdyAoKTsKIyAxNDkgIi91c3IvaW5jbHVkZS9sb2Nh bGUuaCIgMyA0CmV4dGVybiBfX2xvY2FsZV90IF9fbmV3bG9jYWxlIChpbnQgX19jYXRlZ29yeV9t YXNrLCBfX2NvbnN0IGNoYXIgKl9fbG9jYWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgX19sb2NhbGVfdCBfX2Jhc2UpIHRocm93ICgpOwoKCgpleHRlcm4gX19sb2NhbGVfdCBfX2R1 cGxvY2FsZSAoX19sb2NhbGVfdCBfX2RhdGFzZXQpIHRocm93ICgpOwoKCgpleHRlcm4gdm9pZCBf X2ZyZWVsb2NhbGUgKF9fbG9jYWxlX3QgX19kYXRhc2V0KSB0aHJvdyAoKTsKCgp9CiMgNTAgIi9u b3RuZnMvZmNoZS9CVUlMRC1nY2MtbXVkZmxhcC9JTlNUL2luY2x1ZGUvYysrLzMuNS10cmVlLXNz YS9jbG9jYWxlIiAyIDMKCgoKCgpuYW1lc3BhY2Ugc3RkCnsKICB1c2luZyA6Omxjb252OwogIHVz aW5nIDo6c2V0bG9jYWxlOwogIHVzaW5nIDo6bG9jYWxlY29udjsKfQojIDQyICIvbm90bmZzL2Zj aGUvQlVJTEQtZ2NjLW11ZGZsYXAvSU5TVC9pbmNsdWRlL2MrKy8zLjUtdHJlZS1zc2EvaTY4Ni1w Yy1saW51eC1nbnUvYml0cy9jKytsb2NhbGUuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2xhbmdp bmZvLmgiIDEgMyA0CiMgMjQgIi91c3IvaW5jbHVkZS9sYW5naW5mby5oIiAzIDQKIyAxICIvdXNy L2luY2x1ZGUvbmxfdHlwZXMuaCIgMSAzIDQKIyAzMSAiL3Vzci9pbmNsdWRlL25sX3R5cGVzLmgi IDMgNApleHRlcm4gIkMiIHsKCgp0eXBlZGVmIHZvaWQgKm5sX2NhdGQ7CgoKdHlwZWRlZiBpbnQg bmxfaXRlbTsKCgpleHRlcm4gbmxfY2F0ZCBjYXRvcGVuIChfX2NvbnN0IGNoYXIgKl9fY2F0X25h bWUsIGludCBfX2ZsYWcpIHRocm93ICgpOwoKCgpleHRlcm4gY2hhciAqY2F0Z2V0cyAobmxfY2F0 ZCBfX2NhdGFsb2csIGludCBfX3NldCwgaW50IF9fbnVtYmVyLAogICAgICAgICAgICAgICAgICAg ICAgX19jb25zdCBjaGFyICpfX3N0cmluZykgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBjYXRjbG9z ZSAobmxfY2F0ZCBfX2NhdGFsb2cpIHRocm93ICgpOwoKfQojIDI1ICIvdXNyL2luY2x1ZGUvbGFu Z2luZm8uaCIgMiAzIDQKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvbG9jYWxlLmgiIDEgMyA0CiMg MjcgIi91c3IvaW5jbHVkZS9sYW5naW5mby5oIiAyIDMgNAoKCmV4dGVybiAiQyIgewojIDQzICIv dXNyL2luY2x1ZGUvbGFuZ2luZm8uaCIgMyA0CmVudW0KewoKCgogIEFCREFZXzEgPSAoKChfX0xD X1RJTUUpIDw8IDE2KSB8ICgwKSksCgogIEFCREFZXzIsCgogIEFCREFZXzMsCgogIEFCREFZXzQs CgogIEFCREFZXzUsCgogIEFCREFZXzYsCgogIEFCREFZXzcsCgoKCiAgREFZXzEsCgogIERBWV8y LAoKICBEQVlfMywKCiAgREFZXzQsCgogIERBWV81LAoKICBEQVlfNiwKCiAgREFZXzcsCgoKCiAg QUJNT05fMSwKCiAgQUJNT05fMiwKCiAgQUJNT05fMywKCiAgQUJNT05fNCwKCiAgQUJNT05fNSwK CiAgQUJNT05fNiwKCiAgQUJNT05fNywKCiAgQUJNT05fOCwKCiAgQUJNT05fOSwKCiAgQUJNT05f MTAsCgogIEFCTU9OXzExLAoKICBBQk1PTl8xMiwKCgoKICBNT05fMSwKCiAgTU9OXzIsCgogIE1P Tl8zLAoKICBNT05fNCwKCiAgTU9OXzUsCgogIE1PTl82LAoKICBNT05fNywKCiAgTU9OXzgsCgog IE1PTl85LAoKICBNT05fMTAsCgogIE1PTl8xMSwKCiAgTU9OXzEyLAoKCiAgQU1fU1RSLAoKICBQ TV9TVFIsCgoKICBEX1RfRk1ULAoKICBEX0ZNVCwKCiAgVF9GTVQsCgogIFRfRk1UX0FNUE0sCgoK ICBFUkEsCgogIF9fRVJBX1lFQVIsCgoKCiAgRVJBX0RfRk1ULAoKICBBTFRfRElHSVRTLAoKICBF UkFfRF9UX0ZNVCwKCiAgRVJBX1RfRk1ULAoKCiAgX05MX1RJTUVfRVJBX05VTV9FTlRSSUVTLAog IF9OTF9USU1FX0VSQV9FTlRSSUVTLAoKICBfTkxfV0FCREFZXzEsCiAgX05MX1dBQkRBWV8yLAog IF9OTF9XQUJEQVlfMywKICBfTkxfV0FCREFZXzQsCiAgX05MX1dBQkRBWV81LAogIF9OTF9XQUJE QVlfNiwKICBfTkxfV0FCREFZXzcsCgoKICBfTkxfV0RBWV8xLAogIF9OTF9XREFZXzIsCiAgX05M X1dEQVlfMywKICBfTkxfV0RBWV80LAogIF9OTF9XREFZXzUsCiAgX05MX1dEQVlfNiwKICBfTkxf V0RBWV83LAoKCiAgX05MX1dBQk1PTl8xLAogIF9OTF9XQUJNT05fMiwKICBfTkxfV0FCTU9OXzMs CiAgX05MX1dBQk1PTl80LAogIF9OTF9XQUJNT05fNSwKICBfTkxfV0FCTU9OXzYsCiAgX05MX1dB Qk1PTl83LAogIF9OTF9XQUJNT05fOCwKICBfTkxfV0FCTU9OXzksCiAgX05MX1dBQk1PTl8xMCwK ICBfTkxfV0FCTU9OXzExLAogIF9OTF9XQUJNT05fMTIsCgoKICBfTkxfV01PTl8xLAogIF9OTF9X TU9OXzIsCiAgX05MX1dNT05fMywKICBfTkxfV01PTl80LAogIF9OTF9XTU9OXzUsCiAgX05MX1dN T05fNiwKICBfTkxfV01PTl83LAogIF9OTF9XTU9OXzgsCiAgX05MX1dNT05fOSwKICBfTkxfV01P Tl8xMCwKICBfTkxfV01PTl8xMSwKICBfTkxfV01PTl8xMiwKCiAgX05MX1dBTV9TVFIsCiAgX05M X1dQTV9TVFIsCgogIF9OTF9XRF9UX0ZNVCwKICBfTkxfV0RfRk1ULAogIF9OTF9XVF9GTVQsCiAg X05MX1dUX0ZNVF9BTVBNLAoKICBfTkxfV0VSQV9ZRUFSLAogIF9OTF9XRVJBX0RfRk1ULAogIF9O TF9XQUxUX0RJR0lUUywKICBfTkxfV0VSQV9EX1RfRk1ULAogIF9OTF9XRVJBX1RfRk1ULAoKICBf TkxfVElNRV9XRUVLX05EQVlTLAogIF9OTF9USU1FX1dFRUtfMVNUREFZLAogIF9OTF9USU1FX1dF RUtfMVNUV0VFSywKICBfTkxfVElNRV9GSVJTVF9XRUVLREFZLAogIF9OTF9USU1FX0ZJUlNUX1dP UktEQVksCiAgX05MX1RJTUVfQ0FMX0RJUkVDVElPTiwKICBfTkxfVElNRV9USU1FWk9ORSwKCiAg X0RBVEVfRk1ULAoKICBfTkxfV19EQVRFX0ZNVCwKCiAgX05MX1RJTUVfQ09ERVNFVCwKCiAgX05M X05VTV9MQ19USU1FLAoKCgoKICBfTkxfQ09MTEFURV9OUlVMRVMgPSAoKChfX0xDX0NPTExBVEUp IDw8IDE2KSB8ICgwKSksCiAgX05MX0NPTExBVEVfUlVMRVNFVFMsCiAgX05MX0NPTExBVEVfVEFC TEVNQiwKICBfTkxfQ09MTEFURV9XRUlHSFRNQiwKICBfTkxfQ09MTEFURV9FWFRSQU1CLAogIF9O TF9DT0xMQVRFX0lORElSRUNUTUIsCiAgX05MX0NPTExBVEVfR0FQMSwKICBfTkxfQ09MTEFURV9H QVAyLAogIF9OTF9DT0xMQVRFX0dBUDMsCiAgX05MX0NPTExBVEVfVEFCTEVXQywKICBfTkxfQ09M TEFURV9XRUlHSFRXQywKICBfTkxfQ09MTEFURV9FWFRSQVdDLAogIF9OTF9DT0xMQVRFX0lORElS RUNUV0MsCiAgX05MX0NPTExBVEVfU1lNQl9IQVNIX1NJWkVNQiwKICBfTkxfQ09MTEFURV9TWU1C X1RBQkxFTUIsCiAgX05MX0NPTExBVEVfU1lNQl9FWFRSQU1CLAogIF9OTF9DT0xMQVRFX0NPTExT RVFNQiwKICBfTkxfQ09MTEFURV9DT0xMU0VRV0MsCiAgX05MX0NPTExBVEVfQ09ERVNFVCwKICBf TkxfTlVNX0xDX0NPTExBVEUsCgoKCgogIF9OTF9DVFlQRV9DTEFTUyA9ICgoKF9fTENfQ1RZUEUp IDw8IDE2KSB8ICgwKSksCiAgX05MX0NUWVBFX1RPVVBQRVIsCiAgX05MX0NUWVBFX0dBUDEsCiAg X05MX0NUWVBFX1RPTE9XRVIsCiAgX05MX0NUWVBFX0dBUDIsCiAgX05MX0NUWVBFX0NMQVNTMzIs CiAgX05MX0NUWVBFX0dBUDMsCiAgX05MX0NUWVBFX0dBUDQsCiAgX05MX0NUWVBFX0dBUDUsCiAg X05MX0NUWVBFX0dBUDYsCiAgX05MX0NUWVBFX0NMQVNTX05BTUVTLAogIF9OTF9DVFlQRV9NQVBf TkFNRVMsCiAgX05MX0NUWVBFX1dJRFRILAogIF9OTF9DVFlQRV9NQl9DVVJfTUFYLAogIF9OTF9D VFlQRV9DT0RFU0VUX05BTUUsCiAgQ09ERVNFVCA9IF9OTF9DVFlQRV9DT0RFU0VUX05BTUUsCgog IF9OTF9DVFlQRV9UT1VQUEVSMzIsCiAgX05MX0NUWVBFX1RPTE9XRVIzMiwKICBfTkxfQ1RZUEVf Q0xBU1NfT0ZGU0VULAogIF9OTF9DVFlQRV9NQVBfT0ZGU0VULAogIF9OTF9DVFlQRV9JTkRJR0lU U19NQl9MRU4sCiAgX05MX0NUWVBFX0lORElHSVRTMF9NQiwKICBfTkxfQ1RZUEVfSU5ESUdJVFMx X01CLAogIF9OTF9DVFlQRV9JTkRJR0lUUzJfTUIsCiAgX05MX0NUWVBFX0lORElHSVRTM19NQiwK ICBfTkxfQ1RZUEVfSU5ESUdJVFM0X01CLAogIF9OTF9DVFlQRV9JTkRJR0lUUzVfTUIsCiAgX05M X0NUWVBFX0lORElHSVRTNl9NQiwKICBfTkxfQ1RZUEVfSU5ESUdJVFM3X01CLAogIF9OTF9DVFlQ RV9JTkRJR0lUUzhfTUIsCiAgX05MX0NUWVBFX0lORElHSVRTOV9NQiwKICBfTkxfQ1RZUEVfSU5E SUdJVFNfV0NfTEVOLAogIF9OTF9DVFlQRV9JTkRJR0lUUzBfV0MsCiAgX05MX0NUWVBFX0lORElH SVRTMV9XQywKICBfTkxfQ1RZUEVfSU5ESUdJVFMyX1dDLAogIF9OTF9DVFlQRV9JTkRJR0lUUzNf V0MsCiAgX05MX0NUWVBFX0lORElHSVRTNF9XQywKICBfTkxfQ1RZUEVfSU5ESUdJVFM1X1dDLAog IF9OTF9DVFlQRV9JTkRJR0lUUzZfV0MsCiAgX05MX0NUWVBFX0lORElHSVRTN19XQywKICBfTkxf Q1RZUEVfSU5ESUdJVFM4X1dDLAogIF9OTF9DVFlQRV9JTkRJR0lUUzlfV0MsCiAgX05MX0NUWVBF X09VVERJR0lUMF9NQiwKICBfTkxfQ1RZUEVfT1VURElHSVQxX01CLAogIF9OTF9DVFlQRV9PVVRE SUdJVDJfTUIsCiAgX05MX0NUWVBFX09VVERJR0lUM19NQiwKICBfTkxfQ1RZUEVfT1VURElHSVQ0 X01CLAogIF9OTF9DVFlQRV9PVVRESUdJVDVfTUIsCiAgX05MX0NUWVBFX09VVERJR0lUNl9NQiwK ICBfTkxfQ1RZUEVfT1VURElHSVQ3X01CLAogIF9OTF9DVFlQRV9PVVRESUdJVDhfTUIsCiAgX05M X0NUWVBFX09VVERJR0lUOV9NQiwKICBfTkxfQ1RZUEVfT1VURElHSVQwX1dDLAogIF9OTF9DVFlQ RV9PVVRESUdJVDFfV0MsCiAgX05MX0NUWVBFX09VVERJR0lUMl9XQywKICBfTkxfQ1RZUEVfT1VU RElHSVQzX1dDLAogIF9OTF9DVFlQRV9PVVRESUdJVDRfV0MsCiAgX05MX0NUWVBFX09VVERJR0lU NV9XQywKICBfTkxfQ1RZUEVfT1VURElHSVQ2X1dDLAogIF9OTF9DVFlQRV9PVVRESUdJVDdfV0Ms CiAgX05MX0NUWVBFX09VVERJR0lUOF9XQywKICBfTkxfQ1RZUEVfT1VURElHSVQ5X1dDLAogIF9O TF9DVFlQRV9UUkFOU0xJVF9UQUJfU0laRSwKICBfTkxfQ1RZUEVfVFJBTlNMSVRfRlJPTV9JRFgs CiAgX05MX0NUWVBFX1RSQU5TTElUX0ZST01fVEJMLAogIF9OTF9DVFlQRV9UUkFOU0xJVF9UT19J RFgsCiAgX05MX0NUWVBFX1RSQU5TTElUX1RPX1RCTCwKICBfTkxfQ1RZUEVfVFJBTlNMSVRfREVG QVVMVF9NSVNTSU5HX0xFTiwKICBfTkxfQ1RZUEVfVFJBTlNMSVRfREVGQVVMVF9NSVNTSU5HLAog IF9OTF9DVFlQRV9UUkFOU0xJVF9JR05PUkVfTEVOLAogIF9OTF9DVFlQRV9UUkFOU0xJVF9JR05P UkUsCiAgX05MX0NUWVBFX0VYVFJBX01BUF8xLAogIF9OTF9DVFlQRV9FWFRSQV9NQVBfMiwKICBf TkxfQ1RZUEVfRVhUUkFfTUFQXzMsCiAgX05MX0NUWVBFX0VYVFJBX01BUF80LAogIF9OTF9DVFlQ RV9FWFRSQV9NQVBfNSwKICBfTkxfQ1RZUEVfRVhUUkFfTUFQXzYsCiAgX05MX0NUWVBFX0VYVFJB X01BUF83LAogIF9OTF9DVFlQRV9FWFRSQV9NQVBfOCwKICBfTkxfQ1RZUEVfRVhUUkFfTUFQXzks CiAgX05MX0NUWVBFX0VYVFJBX01BUF8xMCwKICBfTkxfQ1RZUEVfRVhUUkFfTUFQXzExLAogIF9O TF9DVFlQRV9FWFRSQV9NQVBfMTIsCiAgX05MX0NUWVBFX0VYVFJBX01BUF8xMywKICBfTkxfQ1RZ UEVfRVhUUkFfTUFQXzE0LAogIF9OTF9OVU1fTENfQ1RZUEUsCgoKCgogIF9fSU5UX0NVUlJfU1lN Qk9MID0gKCgoX19MQ19NT05FVEFSWSkgPDwgMTYpIHwgKDApKSwKCgoKICBfX0NVUlJFTkNZX1NZ TUJPTCwKCgoKICBfX01PTl9ERUNJTUFMX1BPSU5ULAoKCgogIF9fTU9OX1RIT1VTQU5EU19TRVAs CgoKCiAgX19NT05fR1JPVVBJTkcsCgoKCiAgX19QT1NJVElWRV9TSUdOLAoKCgogIF9fTkVHQVRJ VkVfU0lHTiwKCgoKICBfX0lOVF9GUkFDX0RJR0lUUywKCgoKICBfX0ZSQUNfRElHSVRTLAoKCgog IF9fUF9DU19QUkVDRURFUywKCgoKICBfX1BfU0VQX0JZX1NQQUNFLAoKCgogIF9fTl9DU19QUkVD RURFUywKCgoKICBfX05fU0VQX0JZX1NQQUNFLAoKCgogIF9fUF9TSUdOX1BPU04sCgoKCiAgX19O X1NJR05fUE9TTiwKCgoKICBfTkxfTU9ORVRBUllfQ1JOQ1lTVFIsCgogIF9fSU5UX1BfQ1NfUFJF Q0VERVMsCgoKCiAgX19JTlRfUF9TRVBfQllfU1BBQ0UsCgoKCiAgX19JTlRfTl9DU19QUkVDRURF UywKCgoKICBfX0lOVF9OX1NFUF9CWV9TUEFDRSwKCgoKICBfX0lOVF9QX1NJR05fUE9TTiwKCgoK ICBfX0lOVF9OX1NJR05fUE9TTiwKCgoKICBfTkxfTU9ORVRBUllfRFVPX0lOVF9DVVJSX1NZTUJP TCwKICBfTkxfTU9ORVRBUllfRFVPX0NVUlJFTkNZX1NZTUJPTCwKICBfTkxfTU9ORVRBUllfRFVP X0lOVF9GUkFDX0RJR0lUUywKICBfTkxfTU9ORVRBUllfRFVPX0ZSQUNfRElHSVRTLAogIF9OTF9N T05FVEFSWV9EVU9fUF9DU19QUkVDRURFUywKICBfTkxfTU9ORVRBUllfRFVPX1BfU0VQX0JZX1NQ QUNFLAogIF9OTF9NT05FVEFSWV9EVU9fTl9DU19QUkVDRURFUywKICBfTkxfTU9ORVRBUllfRFVP X05fU0VQX0JZX1NQQUNFLAogIF9OTF9NT05FVEFSWV9EVU9fSU5UX1BfQ1NfUFJFQ0VERVMsCiAg X05MX01PTkVUQVJZX0RVT19JTlRfUF9TRVBfQllfU1BBQ0UsCiAgX05MX01PTkVUQVJZX0RVT19J TlRfTl9DU19QUkVDRURFUywKICBfTkxfTU9ORVRBUllfRFVPX0lOVF9OX1NFUF9CWV9TUEFDRSwK ICBfTkxfTU9ORVRBUllfRFVPX1BfU0lHTl9QT1NOLAogIF9OTF9NT05FVEFSWV9EVU9fTl9TSUdO X1BPU04sCiAgX05MX01PTkVUQVJZX0RVT19JTlRfUF9TSUdOX1BPU04sCiAgX05MX01PTkVUQVJZ X0RVT19JTlRfTl9TSUdOX1BPU04sCiAgX05MX01PTkVUQVJZX1VOT19WQUxJRF9GUk9NLAogIF9O TF9NT05FVEFSWV9VTk9fVkFMSURfVE8sCiAgX05MX01PTkVUQVJZX0RVT19WQUxJRF9GUk9NLAog IF9OTF9NT05FVEFSWV9EVU9fVkFMSURfVE8sCiAgX05MX01PTkVUQVJZX0NPTlZFUlNJT05fUkFU RSwKICBfTkxfTU9ORVRBUllfREVDSU1BTF9QT0lOVF9XQywKICBfTkxfTU9ORVRBUllfVEhPVVNB TkRTX1NFUF9XQywKICBfTkxfTU9ORVRBUllfQ09ERVNFVCwKICBfTkxfTlVNX0xDX01PTkVUQVJZ LAoKCgogIF9fREVDSU1BTF9QT0lOVCA9ICgoKF9fTENfTlVNRVJJQykgPDwgMTYpIHwgKDApKSwK CgoKICBSQURJWENIQVIgPSBfX0RFQ0lNQUxfUE9JTlQsCgogIF9fVEhPVVNBTkRTX1NFUCwKCgoK ICBUSE9VU0VQID0gX19USE9VU0FORFNfU0VQLAoKICBfX0dST1VQSU5HLAoKCgogIF9OTF9OVU1F UklDX0RFQ0lNQUxfUE9JTlRfV0MsCiAgX05MX05VTUVSSUNfVEhPVVNBTkRTX1NFUF9XQywKICBf TkxfTlVNRVJJQ19DT0RFU0VULAogIF9OTF9OVU1fTENfTlVNRVJJQywKCiAgX19ZRVNFWFBSID0g KCgoX19MQ19NRVNTQUdFUykgPDwgMTYpIHwgKDApKSwKCiAgX19OT0VYUFIsCgogIF9fWUVTU1RS LAoKCgogIF9fTk9TVFIsCgoKCiAgX05MX01FU1NBR0VTX0NPREVTRVQsCiAgX05MX05VTV9MQ19N RVNTQUdFUywKCiAgX05MX1BBUEVSX0hFSUdIVCA9ICgoKF9fTENfUEFQRVIpIDw8IDE2KSB8ICgw KSksCiAgX05MX1BBUEVSX1dJRFRILAogIF9OTF9QQVBFUl9DT0RFU0VULAogIF9OTF9OVU1fTENf UEFQRVIsCgogIF9OTF9OQU1FX05BTUVfRk1UID0gKCgoX19MQ19OQU1FKSA8PCAxNikgfCAoMCkp LAogIF9OTF9OQU1FX05BTUVfR0VOLAogIF9OTF9OQU1FX05BTUVfTVIsCiAgX05MX05BTUVfTkFN RV9NUlMsCiAgX05MX05BTUVfTkFNRV9NSVNTLAogIF9OTF9OQU1FX05BTUVfTVMsCiAgX05MX05B TUVfQ09ERVNFVCwKICBfTkxfTlVNX0xDX05BTUUsCgogIF9OTF9BRERSRVNTX1BPU1RBTF9GTVQg PSAoKChfX0xDX0FERFJFU1MpIDw8IDE2KSB8ICgwKSksCiAgX05MX0FERFJFU1NfQ09VTlRSWV9O QU1FLAogIF9OTF9BRERSRVNTX0NPVU5UUllfUE9TVCwKICBfTkxfQUREUkVTU19DT1VOVFJZX0FC MiwKICBfTkxfQUREUkVTU19DT1VOVFJZX0FCMywKICBfTkxfQUREUkVTU19DT1VOVFJZX0NBUiwK ICBfTkxfQUREUkVTU19DT1VOVFJZX05VTSwKICBfTkxfQUREUkVTU19DT1VOVFJZX0lTQk4sCiAg X05MX0FERFJFU1NfTEFOR19OQU1FLAogIF9OTF9BRERSRVNTX0xBTkdfQUIsCiAgX05MX0FERFJF U1NfTEFOR19URVJNLAogIF9OTF9BRERSRVNTX0xBTkdfTElCLAogIF9OTF9BRERSRVNTX0NPREVT RVQsCiAgX05MX05VTV9MQ19BRERSRVNTLAoKICBfTkxfVEVMRVBIT05FX1RFTF9JTlRfRk1UID0g KCgoX19MQ19URUxFUEhPTkUpIDw8IDE2KSB8ICgwKSksCiAgX05MX1RFTEVQSE9ORV9URUxfRE9N X0ZNVCwKICBfTkxfVEVMRVBIT05FX0lOVF9TRUxFQ1QsCiAgX05MX1RFTEVQSE9ORV9JTlRfUFJF RklYLAogIF9OTF9URUxFUEhPTkVfQ09ERVNFVCwKICBfTkxfTlVNX0xDX1RFTEVQSE9ORSwKCiAg X05MX01FQVNVUkVNRU5UX01FQVNVUkVNRU5UID0gKCgoX19MQ19NRUFTVVJFTUVOVCkgPDwgMTYp IHwgKDApKSwKICBfTkxfTUVBU1VSRU1FTlRfQ09ERVNFVCwKICBfTkxfTlVNX0xDX01FQVNVUkVN RU5ULAoKICBfTkxfSURFTlRJRklDQVRJT05fVElUTEUgPSAoKChfX0xDX0lERU5USUZJQ0FUSU9O KSA8PCAxNikgfCAoMCkpLAogIF9OTF9JREVOVElGSUNBVElPTl9TT1VSQ0UsCiAgX05MX0lERU5U SUZJQ0FUSU9OX0FERFJFU1MsCiAgX05MX0lERU5USUZJQ0FUSU9OX0NPTlRBQ1QsCiAgX05MX0lE RU5USUZJQ0FUSU9OX0VNQUlMLAogIF9OTF9JREVOVElGSUNBVElPTl9URUwsCiAgX05MX0lERU5U SUZJQ0FUSU9OX0ZBWCwKICBfTkxfSURFTlRJRklDQVRJT05fTEFOR1VBR0UsCiAgX05MX0lERU5U SUZJQ0FUSU9OX1RFUlJJVE9SWSwKICBfTkxfSURFTlRJRklDQVRJT05fQVVESUVOQ0UsCiAgX05M X0lERU5USUZJQ0FUSU9OX0FQUExJQ0FUSU9OLAogIF9OTF9JREVOVElGSUNBVElPTl9BQkJSRVZJ QVRJT04sCiAgX05MX0lERU5USUZJQ0FUSU9OX1JFVklTSU9OLAogIF9OTF9JREVOVElGSUNBVElP Tl9EQVRFLAogIF9OTF9JREVOVElGSUNBVElPTl9DQVRFR09SWSwKICBfTkxfSURFTlRJRklDQVRJ T05fQ09ERVNFVCwKICBfTkxfTlVNX0xDX0lERU5USUZJQ0FUSU9OLAoKCiAgX05MX05VTQp9Owoj IDU3NSAiL3Vzci9pbmNsdWRlL2xhbmdpbmZvLmgiIDMgNApleHRlcm4gY2hhciAqbmxfbGFuZ2lu Zm8gKG5sX2l0ZW0gX19pdGVtKSB0aHJvdyAoKTsKIyA1ODYgIi91c3IvaW5jbHVkZS9sYW5naW5m by5oIiAzIDQKZXh0ZXJuIGNoYXIgKl9fbmxfbGFuZ2luZm9fbCAobmxfaXRlbSBfX2l0ZW0sIF9f bG9jYWxlX3QgbCk7CgoKfQojIDQzICIvbm90bmZzL2ZjaGUvQlVJTEQtZ2NjLW11ZGZsYXAvSU5T VC9pbmNsdWRlL2MrKy8zLjUtdHJlZS1zc2EvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9jKytsb2Nh bGUuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2ljb252LmgiIDEgMyA0CiMgMjQgIi91c3IvaW5j bHVkZS9pY29udi5oIiAzIDQKIyAxICIvbm90bmZzL2ZjaGUvQlVJTEQtZ2NjLW11ZGZsYXAvSU5T VC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjUtdHJlZS1zc2EvaW5jbHVkZS9zdGRk ZWYuaCIgMSAzIDQKIyAyNSAiL3Vzci9pbmNsdWRlL2ljb252LmgiIDIgMyA0CgoKZXh0ZXJuICJD IiB7CgoKdHlwZWRlZiB2b2lkICppY29udl90OwoKCgoKZXh0ZXJuIGljb252X3QgaWNvbnZfb3Bl biAoX19jb25zdCBjaGFyICpfX3RvY29kZSwgX19jb25zdCBjaGFyICpfX2Zyb21jb2RlKQogICAg IHRocm93ICgpOwoKCgoKZXh0ZXJuIHNpemVfdCBpY29udiAoaWNvbnZfdCBfX2NkLCBjaGFyICoq X19yZXN0cmljdCBfX2luYnVmLAogICAgICAgICAgICAgICAgICAgICBzaXplX3QgKl9fcmVzdHJp Y3QgX19pbmJ5dGVzbGVmdCwKICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3Qg X19vdXRidWYsCiAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqX19yZXN0cmljdCBfX291dGJ5 dGVzbGVmdCk7CgoKZXh0ZXJuIGludCBpY29udl9jbG9zZSAoaWNvbnZfdCBfX2NkKSB0aHJvdyAo KTsKCn0KIyA0NCAiL25vdG5mcy9mY2hlL0JVSUxELWdjYy1tdWRmbGFwL0lOU1QvaW5jbHVkZS9j KysvMy41LXRyZWUtc3NhL2k2ODYtcGMtbGludXgtZ251L2JpdHMvYysrbG9jYWxlLmgiIDIgMwoj IDEgIi91c3IvaW5jbHVkZS9saWJpbnRsLmgiIDEgMyA0CiMgMzAgIi91c3IvaW5jbHVkZS9saWJp bnRsLmgiIDMgNApleHRlcm4gIkMiIHsKCgoKCmV4dGVybiBjaGFyICpnZXR0ZXh0IChfX2NvbnN0 IGNoYXIgKl9fbXNnaWQpIHRocm93ICgpOwoKCgpleHRlcm4gY2hhciAqZGdldHRleHQgKF9fY29u c3QgY2hhciAqX19kb21haW5uYW1lLCBfX2NvbnN0IGNoYXIgKl9fbXNnaWQpCiAgICAgdGhyb3cg KCk7CmV4dGVybiBjaGFyICpfX2RnZXR0ZXh0IChfX2NvbnN0IGNoYXIgKl9fZG9tYWlubmFtZSwg X19jb25zdCBjaGFyICpfX21zZ2lkKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2Zv cm1hdF9hcmdfXyAoMikpKTsKCgoKZXh0ZXJuIGNoYXIgKmRjZ2V0dGV4dCAoX19jb25zdCBjaGFy ICpfX2RvbWFpbm5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19t c2dpZCwgaW50IF9fY2F0ZWdvcnkpIHRocm93ICgpOwpleHRlcm4gY2hhciAqX19kY2dldHRleHQg KF9fY29uc3QgY2hhciAqX19kb21haW5uYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgIF9f Y29uc3QgY2hhciAqX19tc2dpZCwgaW50IF9fY2F0ZWdvcnkpCiAgICAgdGhyb3cgKCkgX19hdHRy aWJ1dGVfXyAoKF9fZm9ybWF0X2FyZ19fICgyKSkpOwoKCgoKZXh0ZXJuIGNoYXIgKm5nZXR0ZXh0 IChfX2NvbnN0IGNoYXIgKl9fbXNnaWQxLCBfX2NvbnN0IGNoYXIgKl9fbXNnaWQyLAogICAgICAg ICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgaW50IF9fbikKICAgICB0aHJvdyAoKSBfX2F0 dHJpYnV0ZV9fICgoX19mb3JtYXRfYXJnX18gKDEpKSkgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0 X2FyZ19fICgyKSkpOwoKCgpleHRlcm4gY2hhciAqZG5nZXR0ZXh0IChfX2NvbnN0IGNoYXIgKl9f ZG9tYWlubmFtZSwgX19jb25zdCBjaGFyICpfX21zZ2lkMSwKICAgICAgICAgICAgICAgICAgICAg ICAgX19jb25zdCBjaGFyICpfX21zZ2lkMiwgdW5zaWduZWQgbG9uZyBpbnQgX19uKQogICAgIHRo cm93ICgpIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9hcmdfXyAoMikpKSBfX2F0dHJpYnV0ZV9f ICgoX19mb3JtYXRfYXJnX18gKDMpKSk7CgoKCmV4dGVybiBjaGFyICpkY25nZXR0ZXh0IChfX2Nv bnN0IGNoYXIgKl9fZG9tYWlubmFtZSwgX19jb25zdCBjaGFyICpfX21zZ2lkMSwKICAgICAgICAg ICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19tc2dpZDIsIHVuc2lnbmVkIGxvbmcgaW50 IF9fbiwKICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2NhdGVnb3J5KQogICAgIHRocm93 ICgpIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9hcmdfXyAoMikpKSBfX2F0dHJpYnV0ZV9fICgo X19mb3JtYXRfYXJnX18gKDMpKSk7CgoKCgoKZXh0ZXJuIGNoYXIgKnRleHRkb21haW4gKF9fY29u c3QgY2hhciAqX19kb21haW5uYW1lKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGNoYXIgKmJpbmR0ZXh0 ZG9tYWluIChfX2NvbnN0IGNoYXIgKl9fZG9tYWlubmFtZSwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBfX2NvbnN0IGNoYXIgKl9fZGlybmFtZSkgdGhyb3cgKCk7CgoKCmV4dGVybiBjaGFy ICpiaW5kX3RleHRkb21haW5fY29kZXNldCAoX19jb25zdCBjaGFyICpfX2RvbWFpbm5hbWUsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX2NvZGVz ZXQpIHRocm93ICgpOwojIDExNSAiL3Vzci9pbmNsdWRlL2xpYmludGwuaCIgMyA0Cn0KIyA0NSAi L25vdG5mcy9mY2hlL0JVSUxELWdjYy1tdWRmbGFwL0lOU1QvaW5jbHVkZS9jKysvMy41LXRyZWUt c3NhL2k2ODYtcGMtbGludXgtZ251L2JpdHMvYysrbG9jYWxlLmgiIDIgMwojIDU3ICIvbm90bmZz L2ZjaGUvQlVJTEQtZ2NjLW11ZGZsYXAvSU5TVC9pbmNsdWRlL2MrKy8zLjUtdHJlZS1zc2EvaTY4 Ni1wYy1saW51eC1nbnUvYml0cy9jKytsb2NhbGUuaCIgMwpuYW1lc3BhY2Ugc3RkCnsKICB0eXBl ZGVmIF9fbG9jYWxlX3QgX19jX2xvY2FsZTsKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9Udj4K ICAgIGludAogICAgX19jb252ZXJ0X2Zyb21fdihjaGFyKiBfX291dCwgY29uc3QgaW50IF9fc2l6 ZSwgY29uc3QgY2hhciogX19mbXQsCgoKCgoKICAgICAgICAgICAgICAgICAgICAgX1R2IF9fdiwg Y29uc3QgX19jX2xvY2FsZSYsIGludCBfX3ByZWMgPSAtMSkKICAgIHsKICAgICAgY2hhciogX19v bGQgPSBzZXRsb2NhbGUoX19MQ19BTEwsIF9fbnVsbCk7CiAgICAgIGNoYXIqIF9fc2F2ID0gc3Rh dGljX2Nhc3Q8Y2hhcio+KG1hbGxvYyhzdHJsZW4oX19vbGQpICsgMSkpOwogICAgICBpZiAoX19z YXYpCiAgICAgICAgc3RyY3B5KF9fc2F2LCBfX29sZCk7CiAgICAgIHNldGxvY2FsZShfX0xDX0FM TCwgIkMiKTsKCgogICAgICBpbnQgX19yZXQ7CgogICAgICBpZiAoX19wcmVjID49IDApCiAgICAg ICAgX19yZXQgPSBzbnByaW50ZihfX291dCwgX19zaXplLCBfX2ZtdCwgX19wcmVjLCBfX3YpOwog ICAgICBlbHNlCiAgICAgICAgX19yZXQgPSBzbnByaW50ZihfX291dCwgX19zaXplLCBfX2ZtdCwg X192KTsKIyA5OCAiL25vdG5mcy9mY2hlL0JVSUxELWdjYy1tdWRmbGFwL0lOU1QvaW5jbHVkZS9j KysvMy41LXRyZWUtc3NhL2k2ODYtcGMtbGludXgtZ251L2JpdHMvYysrbG9jYWxlLmgiIDMKICAg ICAgc2V0bG9jYWxlKF9fTENfQUxMLCBfX3Nhdik7CiAgICAgIGZyZWUoX19zYXYpOwoKICAgICAg cmV0dXJuIF9fcmV0OwogICAgfQp9CiMgNDcgIi9ub3RuZnMvZmNoZS9CVUlMRC1nY2MtbXVkZmxh cC9JTlNUL2luY2x1ZGUvYysrLzMuNS10cmVlLXNzYS9pb3Nmd2QiIDIgMwojIDEgIi9ub3RuZnMv ZmNoZS9CVUlMRC1nY2MtbXVkZmxhcC9JTlNUL2luY2x1ZGUvYysrLzMuNS10cmVlLXNzYS9jY3R5 cGUiIDEgMwojIDQ3ICIvbm90bmZzL2ZjaGUvQlVJTEQtZ2NjLW11ZGZsYXAvSU5TVC9pbmNsdWRl L2MrKy8zLjUtdHJlZS1zc2EvY2N0eXBlIiAzCgoKIyAxICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIg MSAzIDQKIyAyOSAiL3Vzci9pbmNsdWRlL2N0eXBlLmgiIDMgNApleHRlcm4gIkMiIHsKIyA0NyAi L3Vzci9pbmNsdWRlL2N0eXBlLmgiIDMgNAplbnVtCnsKICBfSVN1cHBlciA9ICgoMCkgPCA4ID8g KCgxIDw8ICgwKSkgPDwgOCkgOiAoKDEgPDwgKDApKSA+PiA4KSksCiAgX0lTbG93ZXIgPSAoKDEp IDwgOCA/ICgoMSA8PCAoMSkpIDw8IDgpIDogKCgxIDw8ICgxKSkgPj4gOCkpLAogIF9JU2FscGhh ID0gKCgyKSA8IDggPyAoKDEgPDwgKDIpKSA8PCA4KSA6ICgoMSA8PCAoMikpID4+IDgpKSwKICBf SVNkaWdpdCA9ICgoMykgPCA4ID8gKCgxIDw8ICgzKSkgPDwgOCkgOiAoKDEgPDwgKDMpKSA+PiA4 KSksCiAgX0lTeGRpZ2l0ID0gKCg0KSA8IDggPyAoKDEgPDwgKDQpKSA8PCA4KSA6ICgoMSA8PCAo NCkpID4+IDgpKSwKICBfSVNzcGFjZSA9ICgoNSkgPCA4ID8gKCgxIDw8ICg1KSkgPDwgOCkgOiAo KDEgPDwgKDUpKSA+PiA4KSksCiAgX0lTcHJpbnQgPSAoKDYpIDwgOCA/ICgoMSA8PCAoNikpIDw8 IDgpIDogKCgxIDw8ICg2KSkgPj4gOCkpLAogIF9JU2dyYXBoID0gKCg3KSA8IDggPyAoKDEgPDwg KDcpKSA8PCA4KSA6ICgoMSA8PCAoNykpID4+IDgpKSwKICBfSVNibGFuayA9ICgoOCkgPCA4ID8g KCgxIDw8ICg4KSkgPDwgOCkgOiAoKDEgPDwgKDgpKSA+PiA4KSksCiAgX0lTY250cmwgPSAoKDkp IDwgOCA/ICgoMSA8PCAoOSkpIDw8IDgpIDogKCgxIDw8ICg5KSkgPj4gOCkpLAogIF9JU3B1bmN0 ID0gKCgxMCkgPCA4ID8gKCgxIDw8ICgxMCkpIDw8IDgpIDogKCgxIDw8ICgxMCkpID4+IDgpKSwK ICBfSVNhbG51bSA9ICgoMTEpIDwgOCA/ICgoMSA8PCAoMTEpKSA8PCA4KSA6ICgoMSA8PCAoMTEp KSA+PiA4KSkKfTsKIyA3NSAiL3Vzci9pbmNsdWRlL2N0eXBlLmgiIDMgNApleHRlcm4gX19jb25z dCB1bnNpZ25lZCBzaG9ydCBpbnQgKl9fY3R5cGVfYjsKZXh0ZXJuIF9fY29uc3QgX19pbnQzMl90 ICpfX2N0eXBlX3RvbG93ZXI7CmV4dGVybiBfX2NvbnN0IF9faW50MzJfdCAqX19jdHlwZV90b3Vw cGVyOwojIDkxICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIgMyA0CmV4dGVybiBpbnQgaXNhbG51bSAo aW50KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBpc2FscGhhIChpbnQpIHRocm93ICgpOwpleHRlcm4g aW50IGlzY250cmwgKGludCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgaXNkaWdpdCAoaW50KSB0aHJv dyAoKTsKZXh0ZXJuIGludCBpc2xvd2VyIChpbnQpIHRocm93ICgpOwpleHRlcm4gaW50IGlzZ3Jh cGggKGludCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgaXNwcmludCAoaW50KSB0aHJvdyAoKTsKZXh0 ZXJuIGludCBpc3B1bmN0IChpbnQpIHRocm93ICgpOwpleHRlcm4gaW50IGlzc3BhY2UgKGludCkg dGhyb3cgKCk7CmV4dGVybiBpbnQgaXN1cHBlciAoaW50KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBp c3hkaWdpdCAoaW50KSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IGlzYmxhbmsgKGludCkgdGhyb3cg KCk7CgoKCgpleHRlcm4gaW50IHRvbG93ZXIgKGludCBfX2MpIHRocm93ICgpOwoKCmV4dGVybiBp bnQgdG91cHBlciAoaW50IF9fYykgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgaXNhc2NpaSAo aW50IF9fYykgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgdG9hc2NpaSAoaW50IF9fYykgdGhyb3cg KCk7CgoKCmV4dGVybiBpbnQgX3RvdXBwZXIgKGludCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX3Rv bG93ZXIgKGludCkgdGhyb3cgKCk7CiMgMjIzICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIgMyA0CmV4 dGVybiBpbnQgX19pc2FsbnVtX2wgKGludCwgX19sb2NhbGVfdCkgdGhyb3cgKCk7CmV4dGVybiBp bnQgX19pc2FscGhhX2wgKGludCwgX19sb2NhbGVfdCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX19p c2NudHJsX2wgKGludCwgX19sb2NhbGVfdCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX19pc2RpZ2l0 X2wgKGludCwgX19sb2NhbGVfdCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX19pc2xvd2VyX2wgKGlu dCwgX19sb2NhbGVfdCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX19pc2dyYXBoX2wgKGludCwgX19s b2NhbGVfdCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX19pc3ByaW50X2wgKGludCwgX19sb2NhbGVf dCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX19pc3B1bmN0X2wgKGludCwgX19sb2NhbGVfdCkgdGhy b3cgKCk7CmV4dGVybiBpbnQgX19pc3NwYWNlX2wgKGludCwgX19sb2NhbGVfdCkgdGhyb3cgKCk7 CmV4dGVybiBpbnQgX19pc3VwcGVyX2wgKGludCwgX19sb2NhbGVfdCkgdGhyb3cgKCk7CmV4dGVy biBpbnQgX19pc3hkaWdpdF9sIChpbnQsIF9fbG9jYWxlX3QpIHRocm93ICgpOwoKZXh0ZXJuIGlu dCBfX2lzYmxhbmtfbCAoaW50LCBfX2xvY2FsZV90KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBf X3RvbG93ZXJfbCAoaW50IF9fYywgX19sb2NhbGVfdCBfX2wpIHRocm93ICgpOwoKCmV4dGVybiBp bnQgX190b3VwcGVyX2wgKGludCBfX2MsIF9fbG9jYWxlX3QgX19sKSB0aHJvdyAoKTsKIyAyNzYg Ii91c3IvaW5jbHVkZS9jdHlwZS5oIiAzIDQKfQojIDUwICIvbm90bmZzL2ZjaGUvQlVJTEQtZ2Nj LW11ZGZsYXAvSU5TVC9pbmNsdWRlL2MrKy8zLjUtdHJlZS1zc2EvY2N0eXBlIiAyIDMKIyA2NiAi L25vdG5mcy9mY2hlL0JVSUxELWdjYy1tdWRmbGFwL0lOU1QvaW5jbHVkZS9jKysvMy41LXRyZWUt c3NhL2NjdHlwZSIgMwpuYW1lc3BhY2Ugc3RkCnsKICB1c2luZyA6OmlzYWxudW07CiAgdXNpbmcg Ojppc2FscGhhOwogIHVzaW5nIDo6aXNjbnRybDsKICB1c2luZyA6OmlzZGlnaXQ7CiAgdXNpbmcg Ojppc2dyYXBoOwogIHVzaW5nIDo6aXNsb3dlcjsKICB1c2luZyA6OmlzcHJpbnQ7CiAgdXNpbmcg Ojppc3B1bmN0OwogIHVzaW5nIDo6aXNzcGFjZTsKICB1c2luZyA6OmlzdXBwZXI7CiAgdXNpbmcg Ojppc3hkaWdpdDsKICB1c2luZyA6OnRvbG93ZXI7CiAgdXNpbmcgOjp0b3VwcGVyOwp9CiMgNDgg Ii9ub3RuZnMvZmNoZS9CVUlMRC1nY2MtbXVkZmxhcC9JTlNUL2luY2x1ZGUvYysrLzMuNS10cmVl LXNzYS9pb3Nmd2QiIDIgMwojIDEgIi9ub3RuZnMvZmNoZS9CVUlMRC1nY2MtbXVkZmxhcC9JTlNU L2luY2x1ZGUvYysrLzMuNS10cmVlLXNzYS9iaXRzL3N0cmluZ2Z3ZC5oIiAxIDMKIyA0MyAiL25v dG5mcy9mY2hlL0JVSUxELWdjYy1tdWRmbGFwL0lOU1QvaW5jbHVkZS9jKysvMy41LXRyZWUtc3Nh L2JpdHMvc3RyaW5nZndkLmgiIDMKCgoKbmFtZXNwYWNlIHN0ZAp7CiAgdGVtcGxhdGU8dHlwZW5h bWUgX0FsbG9jPgogICAgY2xhc3MgYWxsb2NhdG9yOwoKICB0ZW1wbGF0ZTxjbGFzcyBfQ2hhclQ+ CiAgICBzdHJ1Y3QgY2hhcl90cmFpdHM7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw ZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4sCiAgICAgICAgICAgdHlwZW5hbWUg X0FsbG9jID0gYWxsb2NhdG9yPF9DaGFyVD4gPgogICAgY2xhc3MgYmFzaWNfc3RyaW5nOwoKICB0 ZW1wbGF0ZTw+IHN0cnVjdCBjaGFyX3RyYWl0czxjaGFyPjsKCiAgdHlwZWRlZiBiYXNpY19zdHJp bmc8Y2hhcj4gc3RyaW5nOwoKCiAgdGVtcGxhdGU8PiBzdHJ1Y3QgY2hhcl90cmFpdHM8d2NoYXJf dD47CgogIHR5cGVkZWYgYmFzaWNfc3RyaW5nPHdjaGFyX3Q+IHdzdHJpbmc7Cgp9CiMgNDkgIi9u b3RuZnMvZmNoZS9CVUlMRC1nY2MtbXVkZmxhcC9JTlNUL2luY2x1ZGUvYysrLzMuNS10cmVlLXNz YS9pb3Nmd2QiIDIgMwojIDEgIi9ub3RuZnMvZmNoZS9CVUlMRC1nY2MtbXVkZmxhcC9JTlNUL2lu Y2x1ZGUvYysrLzMuNS10cmVlLXNzYS9iaXRzL2Zwb3MuaCIgMSAzCiMgNDMgIi9ub3RuZnMvZmNo ZS9CVUlMRC1nY2MtbXVkZmxhcC9JTlNUL2luY2x1ZGUvYysrLzMuNS10cmVlLXNzYS9iaXRzL2Zw b3MuaCIgMwoKIyAxICIvbm90bmZzL2ZjaGUvQlVJTEQtZ2NjLW11ZGZsYXAvSU5TVC9pbmNsdWRl L2MrKy8zLjUtdHJlZS1zc2EvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9jKytpby5oIiAxIDMKIyAz NSAiL25vdG5mcy9mY2hlL0JVSUxELWdjYy1tdWRmbGFwL0lOU1QvaW5jbHVkZS9jKysvMy41LXRy ZWUtc3NhL2k2ODYtcGMtbGludXgtZ251L2JpdHMvYysraW8uaCIgMwojIDEgIi9ub3RuZnMvZmNo ZS9CVUlMRC1nY2MtbXVkZmxhcC9JTlNUL2luY2x1ZGUvYysrLzMuNS10cmVlLXNzYS9jc3RkaW8i IDEgMwojIDQ4ICIvbm90bmZzL2ZjaGUvQlVJTEQtZ2NjLW11ZGZsYXAvSU5TVC9pbmNsdWRlL2Mr Ky8zLjUtdHJlZS1zc2EvY3N0ZGlvIiAzCgoKCgojIDEgIi9ub3RuZnMvZmNoZS9CVUlMRC1nY2Mt bXVkZmxhcC9JTlNUL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuNS10cmVlLXNzYS9p bmNsdWRlL3N0ZGlvLmgiIDEgMyA0CiMgMzkgIi9ub3RuZnMvZmNoZS9CVUlMRC1nY2MtbXVkZmxh cC9JTlNUL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuNS10cmVlLXNzYS9pbmNsdWRl L3N0ZGlvLmgiIDMgNApleHRlcm4gIkMiIHsKCgoKIyAxICIvbm90bmZzL2ZjaGUvQlVJTEQtZ2Nj LW11ZGZsYXAvSU5TVC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjUtdHJlZS1zc2Ev aW5jbHVkZS9zdGRkZWYuaCIgMSAzIDQKIyA0NCAiL25vdG5mcy9mY2hlL0JVSUxELWdjYy1tdWRm bGFwL0lOU1QvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy41LXRyZWUtc3NhL2luY2x1 ZGUvc3RkaW8uaCIgMiAzIDQKIyA1NCAiL25vdG5mcy9mY2hlL0JVSUxELWdjYy1tdWRmbGFwL0lO U1QvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy41LXRyZWUtc3NhL2luY2x1ZGUvc3Rk aW8uaCIgMyA0CnR5cGVkZWYgc3RydWN0IF9JT19GSUxFIEZJTEU7CiMgNjQgIi9ub3RuZnMvZmNo ZS9CVUlMRC1nY2MtbXVkZmxhcC9JTlNUL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMu NS10cmVlLXNzYS9pbmNsdWRlL3N0ZGlvLmgiIDMgNAp0eXBlZGVmIHN0cnVjdCBfSU9fRklMRSBf X0ZJTEU7CiMgNzQgIi9ub3RuZnMvZmNoZS9CVUlMRC1nY2MtbXVkZmxhcC9JTlNUL2xpYi9nY2Mt bGliL2k2ODYtcGMtbGludXgtZ251LzMuNS10cmVlLXNzYS9pbmNsdWRlL3N0ZGlvLmgiIDMgNAoj IDEgIi91c3IvaW5jbHVkZS9saWJpby5oIiAxIDMgNAojIDMyICIvdXNyL2luY2x1ZGUvbGliaW8u aCIgMyA0CiMgMSAiL3Vzci9pbmNsdWRlL19HX2NvbmZpZy5oIiAxIDMgNAojIDE0ICIvdXNyL2lu Y2x1ZGUvX0dfY29uZmlnLmgiIDMgNAojIDEgIi9ub3RuZnMvZmNoZS9CVUlMRC1nY2MtbXVkZmxh cC9JTlNUL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuNS10cmVlLXNzYS9pbmNsdWRl L3N0ZGRlZi5oIiAxIDMgNAojIDM1NCAiL25vdG5mcy9mY2hlL0JVSUxELWdjYy1tdWRmbGFwL0lO U1QvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy41LXRyZWUtc3NhL2luY2x1ZGUvc3Rk ZGVmLmgiIDMgNAp0eXBlZGVmIHVuc2lnbmVkIGludCB3aW50X3Q7CiMgMTUgIi91c3IvaW5jbHVk ZS9fR19jb25maWcuaCIgMiAzIDQKIyAyNCAiL3Vzci9pbmNsdWRlL19HX2NvbmZpZy5oIiAzIDQK IyAxICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMSAzIDQKIyA0OCAiL3Vzci9pbmNsdWRlL3djaGFy LmgiIDMgNAojIDEgIi9ub3RuZnMvZmNoZS9CVUlMRC1nY2MtbXVkZmxhcC9JTlNUL2xpYi9nY2Mt bGliL2k2ODYtcGMtbGludXgtZ251LzMuNS10cmVlLXNzYS9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMg NAojIDQ5ICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMiAzIDQKCiMgMSAiL3Vzci9pbmNsdWRlL2Jp dHMvd2NoYXIuaCIgMSAzIDQKIyA1MSAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDIgMyA0CiMgNjcg Ii91c3IvaW5jbHVkZS93Y2hhci5oIiAzIDQKdHlwZWRlZiBzdHJ1Y3QKewogIGludCBfX2NvdW50 OwogIHVuaW9uCiAgewogICAgd2ludF90IF9fd2NoOwogICAgY2hhciBfX3djaGJbNF07CiAgfSBf X3ZhbHVlOwp9IF9fbWJzdGF0ZV90OwojIDI1ICIvdXNyL2luY2x1ZGUvX0dfY29uZmlnLmgiIDIg MyA0Cgp0eXBlZGVmIHN0cnVjdAp7CiAgX19vZmZfdCBfX3BvczsKICBfX21ic3RhdGVfdCBfX3N0 YXRlOwp9IF9HX2Zwb3NfdDsKdHlwZWRlZiBzdHJ1Y3QKewogIF9fb2ZmNjRfdCBfX3BvczsKICBf X21ic3RhdGVfdCBfX3N0YXRlOwp9IF9HX2Zwb3M2NF90OwojIDQ0ICIvdXNyL2luY2x1ZGUvX0df Y29uZmlnLmgiIDMgNAojIDEgIi91c3IvaW5jbHVkZS9nY29udi5oIiAxIDMgNAojIDI4ICIvdXNy L2luY2x1ZGUvZ2NvbnYuaCIgMyA0CiMgMSAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDEgMyA0CiMg NDggIi91c3IvaW5jbHVkZS93Y2hhci5oIiAzIDQKIyAxICIvbm90bmZzL2ZjaGUvQlVJTEQtZ2Nj LW11ZGZsYXAvSU5TVC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjUtdHJlZS1zc2Ev aW5jbHVkZS9zdGRkZWYuaCIgMSAzIDQKIyA0OSAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDIgMyA0 CiMgMjkgIi91c3IvaW5jbHVkZS9nY29udi5oIiAyIDMgNAoKCiMgMSAiL25vdG5mcy9mY2hlL0JV SUxELWdjYy1tdWRmbGFwL0lOU1QvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy41LXRy ZWUtc3NhL2luY2x1ZGUvc3RkZGVmLmgiIDEgMyA0CiMgMzIgIi91c3IvaW5jbHVkZS9nY29udi5o IiAyIDMgNAoKCgoKCmVudW0KewogIF9fR0NPTlZfT0sgPSAwLAogIF9fR0NPTlZfTk9DT05WLAog IF9fR0NPTlZfTk9EQiwKICBfX0dDT05WX05PTUVNLAoKICBfX0dDT05WX0VNUFRZX0lOUFVULAog IF9fR0NPTlZfRlVMTF9PVVRQVVQsCiAgX19HQ09OVl9JTExFR0FMX0lOUFVULAogIF9fR0NPTlZf SU5DT01QTEVURV9JTlBVVCwKCiAgX19HQ09OVl9JTExFR0FMX0RFU0NSSVBUT1IsCiAgX19HQ09O Vl9JTlRFUk5BTF9FUlJPUgp9OwoKCgplbnVtCnsKICBfX0dDT05WX0lTX0xBU1QgPSAweDAwMDEs CiAgX19HQ09OVl9JR05PUkVfRVJST1JTID0gMHgwMDAyCn07CgoKCnN0cnVjdCBfX2djb252X3N0 ZXA7CnN0cnVjdCBfX2djb252X3N0ZXBfZGF0YTsKc3RydWN0IF9fZ2NvbnZfbG9hZGVkX29iamVj dDsKc3RydWN0IF9fZ2NvbnZfdHJhbnNfZGF0YTsKCgoKdHlwZWRlZiBpbnQgKCpfX2djb252X2Zj dCkgKHN0cnVjdCBfX2djb252X3N0ZXAgKiwgc3RydWN0IF9fZ2NvbnZfc3RlcF9kYXRhICosCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKiosIF9fY29u c3QgdW5zaWduZWQgY2hhciAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQg Y2hhciAqKiwgc2l6ZV90ICosIGludCwgaW50KTsKCgp0eXBlZGVmIGludCAoKl9fZ2NvbnZfaW5p dF9mY3QpIChzdHJ1Y3QgX19nY29udl9zdGVwICopOwp0eXBlZGVmIHZvaWQgKCpfX2djb252X2Vu ZF9mY3QpIChzdHJ1Y3QgX19nY29udl9zdGVwICopOwoKCgp0eXBlZGVmIGludCAoKl9fZ2NvbnZf dHJhbnNfZmN0KSAoc3RydWN0IF9fZ2NvbnZfc3RlcCAqLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgc3RydWN0IF9fZ2NvbnZfc3RlcF9kYXRhICosIHZvaWQgKiwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgdW5zaWduZWQgY2hhciAqLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB1bnNpZ25lZCBjaGFyICoqLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB1bnNpZ25lZCBjaGFyICosIHVu c2lnbmVkIGNoYXIgKiosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qg Kik7CgoKdHlwZWRlZiBpbnQgKCpfX2djb252X3RyYW5zX2NvbnRleHRfZmN0KSAodm9pZCAqLCBf X2NvbnN0IHVuc2lnbmVkIGNoYXIgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgX19jb25zdCB1bnNpZ25lZCBjaGFyICosCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKiwgdW5zaWduZWQgY2hhciAqKTsKCgp0 eXBlZGVmIGludCAoKl9fZ2NvbnZfdHJhbnNfcXVlcnlfZmN0KSAoX19jb25zdCBjaGFyICosIF9f Y29uc3QgY2hhciAqKiosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz aXplX3QgKik7CgoKdHlwZWRlZiBpbnQgKCpfX2djb252X3RyYW5zX2luaXRfZmN0KSAodm9pZCAq KiwgY29uc3QgY2hhciAqKTsKdHlwZWRlZiB2b2lkICgqX19nY29udl90cmFuc19lbmRfZmN0KSAo dm9pZCAqKTsKCnN0cnVjdCBfX2djb252X3RyYW5zX2RhdGEKewoKICBfX2djb252X3RyYW5zX2Zj dCBfX3RyYW5zX2ZjdDsKICBfX2djb252X3RyYW5zX2NvbnRleHRfZmN0IF9fdHJhbnNfY29udGV4 dF9mY3Q7CiAgX19nY29udl90cmFuc19lbmRfZmN0IF9fdHJhbnNfZW5kX2ZjdDsKICB2b2lkICpf X2RhdGE7CiAgc3RydWN0IF9fZ2NvbnZfdHJhbnNfZGF0YSAqX19uZXh0Owp9OwoKCgpzdHJ1Y3Qg X19nY29udl9zdGVwCnsKICBzdHJ1Y3QgX19nY29udl9sb2FkZWRfb2JqZWN0ICpfX3NobGliX2hh bmRsZTsKICBfX2NvbnN0IGNoYXIgKl9fbW9kbmFtZTsKCiAgaW50IF9fY291bnRlcjsKCiAgY2hh ciAqX19mcm9tX25hbWU7CiAgY2hhciAqX190b19uYW1lOwoKICBfX2djb252X2ZjdCBfX2ZjdDsK ICBfX2djb252X2luaXRfZmN0IF9faW5pdF9mY3Q7CiAgX19nY29udl9lbmRfZmN0IF9fZW5kX2Zj dDsKCgoKICBpbnQgX19taW5fbmVlZGVkX2Zyb207CiAgaW50IF9fbWF4X25lZWRlZF9mcm9tOwog IGludCBfX21pbl9uZWVkZWRfdG87CiAgaW50IF9fbWF4X25lZWRlZF90bzsKCgogIGludCBfX3N0 YXRlZnVsOwoKICB2b2lkICpfX2RhdGE7Cn07CgoKCnN0cnVjdCBfX2djb252X3N0ZXBfZGF0YQp7 CiAgdW5zaWduZWQgY2hhciAqX19vdXRidWY7CiAgdW5zaWduZWQgY2hhciAqX19vdXRidWZlbmQ7 CgoKCiAgaW50IF9fZmxhZ3M7CgoKCiAgaW50IF9faW52b2NhdGlvbl9jb3VudGVyOwoKCgogIGlu dCBfX2ludGVybmFsX3VzZTsKCiAgX19tYnN0YXRlX3QgKl9fc3RhdGVwOwogIF9fbWJzdGF0ZV90 IF9fc3RhdGU7CgoKCiAgc3RydWN0IF9fZ2NvbnZfdHJhbnNfZGF0YSAqX190cmFuczsKfTsKCgoK dHlwZWRlZiBzdHJ1Y3QgX19nY29udl9pbmZvCnsKICBzaXplX3QgX19uc3RlcHM7CiAgc3RydWN0 IF9fZ2NvbnZfc3RlcCAqX19zdGVwczsKICBfX2V4dGVuc2lvbl9fIHN0cnVjdCBfX2djb252X3N0 ZXBfZGF0YSBfX2RhdGEgW107Cn0gKl9fZ2NvbnZfdDsKIyA0NSAiL3Vzci9pbmNsdWRlL19HX2Nv bmZpZy5oIiAyIDMgNAp0eXBlZGVmIHVuaW9uCnsKICBzdHJ1Y3QgX19nY29udl9pbmZvIF9fY2Q7 CiAgc3RydWN0CiAgewogICAgc3RydWN0IF9fZ2NvbnZfaW5mbyBfX2NkOwogICAgc3RydWN0IF9f Z2NvbnZfc3RlcF9kYXRhIF9fZGF0YTsKICB9IF9fY29tYmluZWQ7Cn0gX0dfaWNvbnZfdDsKCnR5 cGVkZWYgaW50IF9HX2ludDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX0hJX18pKSk7 CnR5cGVkZWYgaW50IF9HX2ludDMyX3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX1NJX18p KSk7CnR5cGVkZWYgdW5zaWduZWQgaW50IF9HX3VpbnQxNl90IF9fYXR0cmlidXRlX18gKChfX21v ZGVfXyAoX19ISV9fKSkpOwp0eXBlZGVmIHVuc2lnbmVkIGludCBfR191aW50MzJfdCBfX2F0dHJp YnV0ZV9fICgoX19tb2RlX18gKF9fU0lfXykpKTsKIyAzMyAiL3Vzci9pbmNsdWRlL2xpYmlvLmgi IDIgMyA0CiMgNTMgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzIDQKIyAxICIvbm90bmZzL2ZjaGUv QlVJTEQtZ2NjLW11ZGZsYXAvSU5TVC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjUt dHJlZS1zc2EvaW5jbHVkZS9zdGRhcmcuaCIgMSAzIDQKIyA0MyAiL25vdG5mcy9mY2hlL0JVSUxE LWdjYy1tdWRmbGFwL0lOU1QvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy41LXRyZWUt c3NhL2luY2x1ZGUvc3RkYXJnLmgiIDMgNAp0eXBlZGVmIF9fYnVpbHRpbl92YV9saXN0IF9fZ251 Y192YV9saXN0OwojIDU0ICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMiAzIDQKIyAxNjAgIi91c3Iv aW5jbHVkZS9saWJpby5oIiAzIDQKc3RydWN0IF9JT19qdW1wX3Q7IHN0cnVjdCBfSU9fRklMRTsK IyAxNzAgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzIDQKdHlwZWRlZiB2b2lkIF9JT19sb2NrX3Q7 CgoKCgoKc3RydWN0IF9JT19tYXJrZXIgewogIHN0cnVjdCBfSU9fbWFya2VyICpfbmV4dDsKICBz dHJ1Y3QgX0lPX0ZJTEUgKl9zYnVmOwoKCgogIGludCBfcG9zOwojIDE5MyAiL3Vzci9pbmNsdWRl L2xpYmlvLmgiIDMgNAp9OwoKCmVudW0gX19jb2RlY3Z0X3Jlc3VsdAp7CiAgX19jb2RlY3Z0X29r LAogIF9fY29kZWN2dF9wYXJ0aWFsLAogIF9fY29kZWN2dF9lcnJvciwKICBfX2NvZGVjdnRfbm9j b252Cn07CgoKCgpzdHJ1Y3QgX0lPX2NvZGVjdnQKewogIHZvaWQgKCpfX2NvZGVjdnRfZGVzdHIp IChzdHJ1Y3QgX0lPX2NvZGVjdnQgKik7CiAgZW51bSBfX2NvZGVjdnRfcmVzdWx0ICgqX19jb2Rl Y3Z0X2RvX291dCkgKHN0cnVjdCBfSU9fY29kZWN2dCAqLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBfX21ic3RhdGVfdCAqLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB3Y2hhcl90ICosCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHdjaGFyX3QgKiwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgd2NoYXJfdCAqKiwgY2hh ciAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICos IGNoYXIgKiopOwogIGVudW0gX19jb2RlY3Z0X3Jlc3VsdCAoKl9fY29kZWN2dF9kb191bnNoaWZ0 KSAoc3RydWN0IF9JT19jb2RlY3Z0ICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBfX21ic3RhdGVfdCAqLCBjaGFyICosCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICosIGNoYXIgKiopOwogIGVudW0g X19jb2RlY3Z0X3Jlc3VsdCAoKl9fY29kZWN2dF9kb19pbikgKHN0cnVjdCBfSU9fY29kZWN2dCAq LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbWJzdGF0ZV90 ICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hh ciAqLCBjb25zdCBjaGFyICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgY29uc3QgY2hhciAqKiwgd2NoYXJfdCAqLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKiwgd2NoYXJfdCAqKik7CiAgaW50ICgqX19jb2Rl Y3Z0X2RvX2VuY29kaW5nKSAoc3RydWN0IF9JT19jb2RlY3Z0ICopOwogIGludCAoKl9fY29kZWN2 dF9kb19hbHdheXNfbm9jb252KSAoc3RydWN0IF9JT19jb2RlY3Z0ICopOwogIGludCAoKl9fY29k ZWN2dF9kb19sZW5ndGgpIChzdHJ1Y3QgX0lPX2NvZGVjdnQgKiwgX19tYnN0YXRlX3QgKiwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIHNp emVfdCk7CiAgaW50ICgqX19jb2RlY3Z0X2RvX21heF9sZW5ndGgpIChzdHJ1Y3QgX0lPX2NvZGVj dnQgKik7CgogIF9HX2ljb252X3QgX19jZF9pbjsKICBfR19pY29udl90IF9fY2Rfb3V0Owp9OwoK CnN0cnVjdCBfSU9fd2lkZV9kYXRhCnsKICB3Y2hhcl90ICpfSU9fcmVhZF9wdHI7CiAgd2NoYXJf dCAqX0lPX3JlYWRfZW5kOwogIHdjaGFyX3QgKl9JT19yZWFkX2Jhc2U7CiAgd2NoYXJfdCAqX0lP X3dyaXRlX2Jhc2U7CiAgd2NoYXJfdCAqX0lPX3dyaXRlX3B0cjsKICB3Y2hhcl90ICpfSU9fd3Jp dGVfZW5kOwogIHdjaGFyX3QgKl9JT19idWZfYmFzZTsKICB3Y2hhcl90ICpfSU9fYnVmX2VuZDsK CiAgd2NoYXJfdCAqX0lPX3NhdmVfYmFzZTsKICB3Y2hhcl90ICpfSU9fYmFja3VwX2Jhc2U7Cgog IHdjaGFyX3QgKl9JT19zYXZlX2VuZDsKCiAgX19tYnN0YXRlX3QgX0lPX3N0YXRlOwogIF9fbWJz dGF0ZV90IF9JT19sYXN0X3N0YXRlOwogIHN0cnVjdCBfSU9fY29kZWN2dCBfY29kZWN2dDsKCiAg d2NoYXJfdCBfc2hvcnRidWZbMV07CgogIHN0cnVjdCBfSU9fanVtcF90ICpfd2lkZV92dGFibGU7 Cn07CgoKc3RydWN0IF9JT19GSUxFIHsKICBpbnQgX2ZsYWdzOwoKCgoKICBjaGFyKiBfSU9fcmVh ZF9wdHI7CiAgY2hhciogX0lPX3JlYWRfZW5kOwogIGNoYXIqIF9JT19yZWFkX2Jhc2U7CiAgY2hh ciogX0lPX3dyaXRlX2Jhc2U7CiAgY2hhciogX0lPX3dyaXRlX3B0cjsKICBjaGFyKiBfSU9fd3Jp dGVfZW5kOwogIGNoYXIqIF9JT19idWZfYmFzZTsKICBjaGFyKiBfSU9fYnVmX2VuZDsKCiAgY2hh ciAqX0lPX3NhdmVfYmFzZTsKICBjaGFyICpfSU9fYmFja3VwX2Jhc2U7CiAgY2hhciAqX0lPX3Nh dmVfZW5kOwoKICBzdHJ1Y3QgX0lPX21hcmtlciAqX21hcmtlcnM7CgogIHN0cnVjdCBfSU9fRklM RSAqX2NoYWluOwoKICBpbnQgX2ZpbGVubzsKICBpbnQgX2Jsa3NpemU7CiAgX19vZmZfdCBfb2xk X29mZnNldDsKCgoKICB1bnNpZ25lZCBzaG9ydCBfY3VyX2NvbHVtbjsKICBzaWduZWQgY2hhciBf dnRhYmxlX29mZnNldDsKICBjaGFyIF9zaG9ydGJ1ZlsxXTsKCgoKICBfSU9fbG9ja190ICpfbG9j azsKIyAzMDUgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzIDQKICBfX29mZjY0X3QgX29mZnNldDsK CgogIHN0cnVjdCBfSU9fY29kZWN2dCAqX2NvZGVjdnQ7CiAgc3RydWN0IF9JT193aWRlX2RhdGEg Kl93aWRlX2RhdGE7CgoKCgogIGludCBfbW9kZTsKCiAgY2hhciBfdW51c2VkMlsxNSAqIHNpemVv ZiAoaW50KSAtIDIgKiBzaXplb2YgKHZvaWQgKildOwoKfTsKCgoKCgpzdHJ1Y3QgX0lPX0ZJTEVf cGx1czsKCmV4dGVybiBzdHJ1Y3QgX0lPX0ZJTEVfcGx1cyBfSU9fMl8xX3N0ZGluXzsKZXh0ZXJu IHN0cnVjdCBfSU9fRklMRV9wbHVzIF9JT18yXzFfc3Rkb3V0XzsKZXh0ZXJuIHN0cnVjdCBfSU9f RklMRV9wbHVzIF9JT18yXzFfc3RkZXJyXzsKIyAzNDQgIi91c3IvaW5jbHVkZS9saWJpby5oIiAz IDQKdHlwZWRlZiBfX3NzaXplX3QgX19pb19yZWFkX2ZuICh2b2lkICpfX2Nvb2tpZSwgY2hhciAq X19idWYsIHNpemVfdCBfX25ieXRlcyk7CgoKCgoKCgp0eXBlZGVmIF9fc3NpemVfdCBfX2lvX3dy aXRlX2ZuICh2b2lkICpfX2Nvb2tpZSwgX19jb25zdCBjaGFyICpfX2J1ZiwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbik7CgoKCgoKCgp0eXBlZGVmIGludCBfX2lv X3NlZWtfZm4gKHZvaWQgKl9fY29va2llLCBfX29mZjY0X3QgKl9fcG9zLCBpbnQgX193KTsKCgp0 eXBlZGVmIGludCBfX2lvX2Nsb3NlX2ZuICh2b2lkICpfX2Nvb2tpZSk7CgoKCgp0eXBlZGVmIF9f aW9fcmVhZF9mbiBjb29raWVfcmVhZF9mdW5jdGlvbl90Owp0eXBlZGVmIF9faW9fd3JpdGVfZm4g Y29va2llX3dyaXRlX2Z1bmN0aW9uX3Q7CnR5cGVkZWYgX19pb19zZWVrX2ZuIGNvb2tpZV9zZWVr X2Z1bmN0aW9uX3Q7CnR5cGVkZWYgX19pb19jbG9zZV9mbiBjb29raWVfY2xvc2VfZnVuY3Rpb25f dDsKCgp0eXBlZGVmIHN0cnVjdAp7CiAgX19pb19yZWFkX2ZuICpyZWFkOwogIF9faW9fd3JpdGVf Zm4gKndyaXRlOwogIF9faW9fc2Vla19mbiAqc2VlazsKICBfX2lvX2Nsb3NlX2ZuICpjbG9zZTsK fSBfSU9fY29va2llX2lvX2Z1bmN0aW9uc190Owp0eXBlZGVmIF9JT19jb29raWVfaW9fZnVuY3Rp b25zX3QgY29va2llX2lvX2Z1bmN0aW9uc190OwoKc3RydWN0IF9JT19jb29raWVfZmlsZTsKCgpl eHRlcm4gdm9pZCBfSU9fY29va2llX2luaXQgKHN0cnVjdCBfSU9fY29va2llX2ZpbGUgKl9fY2Zp bGUsIGludCBfX3JlYWRfd3JpdGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAq X19jb29raWUsIF9JT19jb29raWVfaW9fZnVuY3Rpb25zX3QgX19mbnMpOwoKCgoKZXh0ZXJuICJD IiB7CgoKZXh0ZXJuIGludCBfX3VuZGVyZmxvdyAoX0lPX0ZJTEUgKikgdGhyb3cgKCk7CmV4dGVy biBpbnQgX191ZmxvdyAoX0lPX0ZJTEUgKikgdGhyb3cgKCk7CmV4dGVybiBpbnQgX19vdmVyZmxv dyAoX0lPX0ZJTEUgKiwgaW50KSB0aHJvdyAoKTsKZXh0ZXJuIHdpbnRfdCBfX3d1bmRlcmZsb3cg KF9JT19GSUxFICopIHRocm93ICgpOwpleHRlcm4gd2ludF90IF9fd3VmbG93IChfSU9fRklMRSAq KSB0aHJvdyAoKTsKZXh0ZXJuIHdpbnRfdCBfX3dvdmVyZmxvdyAoX0lPX0ZJTEUgKiwgd2ludF90 KSB0aHJvdyAoKTsKIyA0MjYgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzIDQKZXh0ZXJuIGludCBf SU9fZ2V0YyAoX0lPX0ZJTEUgKl9fZnApIHRocm93ICgpOwpleHRlcm4gaW50IF9JT19wdXRjIChp bnQgX19jLCBfSU9fRklMRSAqX19mcCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX0lPX2Zlb2YgKF9J T19GSUxFICpfX2ZwKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfSU9fZmVycm9yIChfSU9fRklMRSAq X19mcCkgdGhyb3cgKCk7CgpleHRlcm4gaW50IF9JT19wZWVrY19sb2NrZWQgKF9JT19GSUxFICpf X2ZwKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gdm9pZCBfSU9fZmxvY2tmaWxlIChfSU9fRklMRSAq KSB0aHJvdyAoKTsKZXh0ZXJuIHZvaWQgX0lPX2Z1bmxvY2tmaWxlIChfSU9fRklMRSAqKSB0aHJv dyAoKTsKZXh0ZXJuIGludCBfSU9fZnRyeWxvY2tmaWxlIChfSU9fRklMRSAqKSB0aHJvdyAoKTsK IyA0NTYgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzIDQKZXh0ZXJuIGludCBfSU9fdmZzY2FuZiAo X0lPX0ZJTEUgKiBfX3Jlc3RyaWN0LCBjb25zdCBjaGFyICogX19yZXN0cmljdCwKICAgICAgICAg ICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3QsIGludCAqX19yZXN0cmljdCkgdGhyb3cgKCk7 CmV4dGVybiBpbnQgX0lPX3ZmcHJpbnRmIChfSU9fRklMRSAqX19yZXN0cmljdCwgY29uc3QgY2hh ciAqX19yZXN0cmljdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0KSB0 aHJvdyAoKTsKZXh0ZXJuIF9fc3NpemVfdCBfSU9fcGFkbiAoX0lPX0ZJTEUgKiwgaW50LCBfX3Nz aXplX3QpIHRocm93ICgpOwpleHRlcm4gc2l6ZV90IF9JT19zZ2V0biAoX0lPX0ZJTEUgKiwgdm9p ZCAqLCBzaXplX3QpIHRocm93ICgpOwoKZXh0ZXJuIF9fb2ZmNjRfdCBfSU9fc2Vla29mZiAoX0lP X0ZJTEUgKiwgX19vZmY2NF90LCBpbnQsIGludCkgdGhyb3cgKCk7CmV4dGVybiBfX29mZjY0X3Qg X0lPX3NlZWtwb3MgKF9JT19GSUxFICosIF9fb2ZmNjRfdCwgaW50KSB0aHJvdyAoKTsKCmV4dGVy biB2b2lkIF9JT19mcmVlX2JhY2t1cF9hcmVhIChfSU9fRklMRSAqKSB0aHJvdyAoKTsKCgpleHRl cm4gd2ludF90IF9JT19nZXR3YyAoX0lPX0ZJTEUgKl9fZnApIHRocm93ICgpOwpleHRlcm4gd2lu dF90IF9JT19wdXR3YyAod2NoYXJfdCBfX3djLCBfSU9fRklMRSAqX19mcCkgdGhyb3cgKCk7CmV4 dGVybiBpbnQgX0lPX2Z3aWRlIChfSU9fRklMRSAqX19mcCwgaW50IF9fbW9kZSkgdGhyb3cgKCk7 CiMgNTA1ICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMyA0CmV4dGVybiBpbnQgX0lPX3Zmd3NjYW5m IChfSU9fRklMRSAqIF9fcmVzdHJpY3QsIGNvbnN0IHdjaGFyX3QgKiBfX3Jlc3RyaWN0LAogICAg ICAgICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3QsIGludCAqX19yZXN0cmljdCkgdGhy b3cgKCk7CmV4dGVybiBpbnQgX0lPX3Zmd3ByaW50ZiAoX0lPX0ZJTEUgKl9fcmVzdHJpY3QsIGNv bnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX19nbnVj X3ZhX2xpc3QpIHRocm93ICgpOwpleHRlcm4gX19zc2l6ZV90IF9JT193cGFkbiAoX0lPX0ZJTEUg Kiwgd2ludF90LCBfX3NzaXplX3QpIHRocm93ICgpOwpleHRlcm4gdm9pZCBfSU9fZnJlZV93YmFj a3VwX2FyZWEgKF9JT19GSUxFICopIHRocm93ICgpOwoKCgp9CiMgNzUgIi9ub3RuZnMvZmNoZS9C VUlMRC1nY2MtbXVkZmxhcC9JTlNUL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuNS10 cmVlLXNzYS9pbmNsdWRlL3N0ZGlvLmgiIDIgMyA0CgoKCgp0eXBlZGVmIF9fZ251Y192YV9saXN0 IF9fbm90X3ZhX2xpc3RfXzsKIyA4OSAiL25vdG5mcy9mY2hlL0JVSUxELWdjYy1tdWRmbGFwL0lO U1QvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy41LXRyZWUtc3NhL2luY2x1ZGUvc3Rk aW8uaCIgMyA0CnR5cGVkZWYgX0dfZnBvc190IGZwb3NfdDsKCgoKCnR5cGVkZWYgX0dfZnBvczY0 X3QgZnBvczY0X3Q7CiMgMTM4ICIvbm90bmZzL2ZjaGUvQlVJTEQtZ2NjLW11ZGZsYXAvSU5TVC9s aWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjUtdHJlZS1zc2EvaW5jbHVkZS9zdGRpby5o IiAzIDQKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9zdGRpb19saW0uaCIgMSAzIDQKIyAxMzkgIi9u b3RuZnMvZmNoZS9CVUlMRC1nY2MtbXVkZmxhcC9JTlNUL2xpYi9nY2MtbGliL2k2ODYtcGMtbGlu dXgtZ251LzMuNS10cmVlLXNzYS9pbmNsdWRlL3N0ZGlvLmgiIDIgMyA0CgoKCmV4dGVybiBGSUxF ICpzdGRpbjsKZXh0ZXJuIEZJTEUgKnN0ZG91dDsKZXh0ZXJuIEZJTEUgKnN0ZGVycjsKIyAxNTMg Ii9ub3RuZnMvZmNoZS9CVUlMRC1nY2MtbXVkZmxhcC9JTlNUL2xpYi9nY2MtbGliL2k2ODYtcGMt bGludXgtZ251LzMuNS10cmVlLXNzYS9pbmNsdWRlL3N0ZGlvLmgiIDMgNApleHRlcm4gaW50IHJl bW92ZSAoX19jb25zdCBjaGFyICpfX2ZpbGVuYW1lKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgcmVu YW1lIChfX2NvbnN0IGNoYXIgKl9fb2xkLCBfX2NvbnN0IGNoYXIgKl9fbmV3KSB0aHJvdyAoKTsK CgoKCmV4dGVybiBGSUxFICp0bXBmaWxlICh2b2lkKSB0aHJvdyAoKTsKIyAxNjkgIi9ub3RuZnMv ZmNoZS9CVUlMRC1nY2MtbXVkZmxhcC9JTlNUL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251 LzMuNS10cmVlLXNzYS9pbmNsdWRlL3N0ZGlvLmgiIDMgNApleHRlcm4gRklMRSAqdG1wZmlsZTY0 ICh2b2lkKSB0aHJvdyAoKTsKCgpleHRlcm4gY2hhciAqdG1wbmFtIChjaGFyICpfX3MpIHRocm93 ICgpOwoKCgoKZXh0ZXJuIGNoYXIgKnRtcG5hbV9yIChjaGFyICpfX3MpIHRocm93ICgpOwojIDE4 OSAiL25vdG5mcy9mY2hlL0JVSUxELWdjYy1tdWRmbGFwL0lOU1QvbGliL2djYy1saWIvaTY4Ni1w Yy1saW51eC1nbnUvMy41LXRyZWUtc3NhL2luY2x1ZGUvc3RkaW8uaCIgMyA0CmV4dGVybiBjaGFy ICp0ZW1wbmFtIChfX2NvbnN0IGNoYXIgKl9fZGlyLCBfX2NvbnN0IGNoYXIgKl9fcGZ4KQogICAg IHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7CgoKCgpleHRlcm4gaW50IGZj bG9zZSAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKZXh0ZXJuIGludCBmZmx1c2ggKEZJTEUg Kl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBmZmx1c2hfdW5sb2NrZWQgKEZJTEUg Kl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgZmNsb3NlYWxsICh2b2lkKSB0aHJv dyAoKTsKCgoKCgpleHRlcm4gRklMRSAqZm9wZW4gKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBf X2ZpbGVuYW1lLAogICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBf X21vZGVzKSB0aHJvdyAoKTsKCmV4dGVybiBGSUxFICpmcmVvcGVuIChfX2NvbnN0IGNoYXIgKl9f cmVzdHJpY3QgX19maWxlbmFtZSwKICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAq X19yZXN0cmljdCBfX21vZGVzLAogICAgICAgICAgICAgICAgICAgICAgRklMRSAqX19yZXN0cmlj dCBfX3N0cmVhbSkgdGhyb3cgKCk7CiMgMjMzICIvbm90bmZzL2ZjaGUvQlVJTEQtZ2NjLW11ZGZs YXAvSU5TVC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjUtdHJlZS1zc2EvaW5jbHVk ZS9zdGRpby5oIiAzIDQKZXh0ZXJuIEZJTEUgKmZvcGVuNjQgKF9fY29uc3QgY2hhciAqX19yZXN0 cmljdCBfX2ZpbGVuYW1lLAogICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jl c3RyaWN0IF9fbW9kZXMpIHRocm93ICgpOwpleHRlcm4gRklMRSAqZnJlb3BlbjY0IChfX2NvbnN0 IGNoYXIgKl9fcmVzdHJpY3QgX19maWxlbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgX19j b25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbW9kZXMsCiAgICAgICAgICAgICAgICAgICAgICAgIEZJ TEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIEZJTEUgKmZkb3Bl biAoaW50IF9fZmQsIF9fY29uc3QgY2hhciAqX19tb2RlcykgdGhyb3cgKCk7CgoKCgoKZXh0ZXJu IEZJTEUgKmZvcGVuY29va2llICh2b2lkICpfX3Jlc3RyaWN0IF9fbWFnaWNfY29va2llLAogICAg ICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX21vZGVzLAog ICAgICAgICAgICAgICAgICAgICAgICAgIF9JT19jb29raWVfaW9fZnVuY3Rpb25zX3QgX19pb19m dW5jcykgdGhyb3cgKCk7CgoKZXh0ZXJuIEZJTEUgKmZtZW1vcGVuICh2b2lkICpfX3MsIHNpemVf dCBfX2xlbiwgX19jb25zdCBjaGFyICpfX21vZGVzKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBGSUxF ICpvcGVuX21lbXN0cmVhbSAoY2hhciAqKl9fcmVzdHJpY3QgX19idWZsb2MsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgc2l6ZV90ICpfX3Jlc3RyaWN0IF9fc2l6ZWxvYykgdGhyb3cgKCk7 CgoKCgoKZXh0ZXJuIHZvaWQgc2V0YnVmIChGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLCBjaGFy ICpfX3Jlc3RyaWN0IF9fYnVmKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBzZXR2YnVmIChGSUxF ICpfX3Jlc3RyaWN0IF9fc3RyZWFtLCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLAogICAgICAgICAg ICAgICAgICAgIGludCBfX21vZGVzLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgoKCmV4dGVybiB2 b2lkIHNldGJ1ZmZlciAoRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSwgY2hhciAqX19yZXN0cmlj dCBfX2J1ZiwKICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19zaXplKSB0aHJvdyAoKTsK CgpleHRlcm4gdm9pZCBzZXRsaW5lYnVmIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgpl eHRlcm4gaW50IGZwcmludGYgKEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sCiAgICAgICAgICAg ICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pIHRocm93ICgp OwoKZXh0ZXJuIGludCBwcmludGYgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwg Li4uKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgc3ByaW50ZiAoY2hhciAqX19yZXN0cmljdCBfX3Ms CiAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAu Li4pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgdmZwcmludGYgKEZJTEUgKl9fcmVzdHJpY3QgX19z LCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAgICAg IF9fZ251Y192YV9saXN0IF9fYXJnKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgdnByaW50ZiAoX19j b25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAg ICB0aHJvdyAoKTsKCmV4dGVybiBpbnQgdnNwcmludGYgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBf X2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgIF9f Z251Y192YV9saXN0IF9fYXJnKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBzbnByaW50ZiAoY2hh ciAqX19yZXN0cmljdCBfX3MsIHNpemVfdCBfX21heGxlbiwKICAgICAgICAgICAgICAgICAgICAg X19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pCiAgICAgdGhyb3cgKCkgX19h dHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDMsIDQpKSk7CgpleHRlcm4gaW50 IHZzbnByaW50ZiAoY2hhciAqX19yZXN0cmljdCBfX3MsIHNpemVfdCBfX21heGxlbiwKICAgICAg ICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgX19nbnVj X3ZhX2xpc3QgX19hcmcpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18g KF9fcHJpbnRmX18sIDMsIDApKSk7CgoKCgoKZXh0ZXJuIGludCB2YXNwcmludGYgKGNoYXIgKipf X3Jlc3RyaWN0IF9fcHRyLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mLAogICAgICAgICAg ICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3QgX19hcmcpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1 dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDIsIDApKSk7CmV4dGVybiBpbnQgX19hc3By aW50ZiAoY2hhciAqKl9fcmVzdHJpY3QgX19wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgX19j b25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm10LCAuLi4pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1 dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDIsIDMpKSk7CmV4dGVybiBpbnQgYXNwcmlu dGYgKGNoYXIgKipfX3Jlc3RyaWN0IF9fcHRyLAogICAgICAgICAgICAgICAgICAgICBfX2NvbnN0 IGNoYXIgKl9fcmVzdHJpY3QgX19mbXQsIC4uLikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9f ICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMiwgMykpKTsKCgpleHRlcm4gaW50IHZkcHJpbnRm IChpbnQgX19mZCwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm10LAogICAgICAgICAgICAg ICAgICAgICBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9f ICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMiwgMCkpKTsKZXh0ZXJuIGludCBkcHJpbnRmIChp bnQgX19mZCwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm10LCAuLi4pCiAgICAgdGhyb3cg KCkgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDIsIDMpKSk7CgoKCgpl eHRlcm4gaW50IGZzY2FuZiAoRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSwKICAgICAgICAgICAg ICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKSB0aHJvdyAoKTsK CmV4dGVybiBpbnQgc2NhbmYgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4u KSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgc3NjYW5mIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3Qg X19zLAogICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0 LCAuLi4pIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHZmc2NhbmYgKEZJTEUgKl9fcmVzdHJpY3Qg X19zLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAg ICAgX19nbnVjX3ZhX2xpc3QgX19hcmcpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9f Zm9ybWF0X18gKF9fc2NhbmZfXywgMiwgMCkpKTsKCgpleHRlcm4gaW50IHZzY2FuZiAoX19jb25z dCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICB0 aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19zY2FuZl9fLCAxLCAwKSkpOwoK CmV4dGVybiBpbnQgdnNzY2FuZiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywKICAgICAg ICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIF9fZ251Y192 YV9saXN0IF9fYXJnKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChf X3NjYW5mX18sIDIsIDApKSk7CgoKCgpleHRlcm4gaW50IGZnZXRjIChGSUxFICpfX3N0cmVhbSkg dGhyb3cgKCk7CmV4dGVybiBpbnQgZ2V0YyAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCmV4 dGVybiBpbnQgZ2V0Y2hhciAodm9pZCkgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gaW50IGdldGNf dW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBnZXRjaGFyX3Vu bG9ja2VkICh2b2lkKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgZmdldGNfdW5sb2NrZWQgKEZJ TEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgZnB1dGMgKGludCBfX2MsIEZJ TEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBwdXRjIChpbnQgX19jLCBGSUxFICpf X3N0cmVhbSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdXRjaGFyIChpbnQgX19jKSB0aHJvdyAo KTsKCgoKCgoKCmV4dGVybiBpbnQgZnB1dGNfdW5sb2NrZWQgKGludCBfX2MsIEZJTEUgKl9fc3Ry ZWFtKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgcHV0Y191bmxvY2tlZCAoaW50IF9fYywgRklM RSAqX19zdHJlYW0pIHRocm93ICgpOwpleHRlcm4gaW50IHB1dGNoYXJfdW5sb2NrZWQgKGludCBf X2MpIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgZ2V0dyAoRklMRSAqX19zdHJlYW0pIHRocm93 ICgpOwoKCmV4dGVybiBpbnQgcHV0dyAoaW50IF9fdywgRklMRSAqX19zdHJlYW0pIHRocm93ICgp OwoKCgoKZXh0ZXJuIGNoYXIgKmZnZXRzIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgaW50IF9fbiwg RklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkKICAgICB0aHJvdyAoKTsKCgoKZXh0ZXJuIGNoYXIg KmZnZXRzX3VubG9ja2VkIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgaW50IF9fbiwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0aHJvdyAoKTsK CgoKCmV4dGVybiBjaGFyICpnZXRzIChjaGFyICpfX3MpIHRocm93ICgpOwojIDQzNyAiL25vdG5m cy9mY2hlL0JVSUxELWdjYy1tdWRmbGFwL0lOU1QvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1n bnUvMy41LXRyZWUtc3NhL2luY2x1ZGUvc3RkaW8uaCIgMyA0CmV4dGVybiBfX3NzaXplX3QgX19n ZXRkZWxpbSAoY2hhciAqKl9fcmVzdHJpY3QgX19saW5lcHRyLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgc2l6ZV90ICpfX3Jlc3RyaWN0IF9fbiwgaW50IF9fZGVsaW1pdGVyLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhy b3cgKCk7CmV4dGVybiBfX3NzaXplX3QgZ2V0ZGVsaW0gKGNoYXIgKipfX3Jlc3RyaWN0IF9fbGlu ZXB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKl9fcmVzdHJpY3QgX19u LCBpbnQgX19kZWxpbWl0ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRklMRSAqX19y ZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CgoKZXh0ZXJuIF9fc3NpemVfdCBnZXRsaW5lIChj aGFyICoqX19yZXN0cmljdCBfX2xpbmVwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBz aXplX3QgKl9fcmVzdHJpY3QgX19uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgRklMRSAq X19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGZwdXRzIChfX2Nv bnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zLCBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKQogICAg IHRocm93ICgpOwoKCgpleHRlcm4gaW50IGZwdXRzX3VubG9ja2VkIChfX2NvbnN0IGNoYXIgKl9f cmVzdHJpY3QgX19zLAogICAgICAgICAgICAgICAgICAgICAgICAgICBGSUxFICpfX3Jlc3RyaWN0 IF9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBwdXRzIChfX2NvbnN0IGNoYXIgKl9f cykgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgdW5nZXRjIChpbnQgX19jLCBGSUxFICpfX3N0cmVh bSkgdGhyb3cgKCk7CgoKCmV4dGVybiBzaXplX3QgZnJlYWQgKHZvaWQgKl9fcmVzdHJpY3QgX19w dHIsIHNpemVfdCBfX3NpemUsCiAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX24sIEZJTEUg Kl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwoKZXh0ZXJuIHNpemVfdCBmd3JpdGUgKF9f Y29uc3Qgdm9pZCAqX19yZXN0cmljdCBfX3B0ciwgc2l6ZV90IF9fc2l6ZSwKICAgICAgICAgICAg ICAgICAgICAgIHNpemVfdCBfX24sIEZJTEUgKl9fcmVzdHJpY3QgX19zKSB0aHJvdyAoKTsKCgoK ZXh0ZXJuIHNpemVfdCBmcmVhZF91bmxvY2tlZCAodm9pZCAqX19yZXN0cmljdCBfX3B0ciwgc2l6 ZV90IF9fc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbiwgRklM RSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVybiBzaXplX3QgZndyaXRlX3Vu bG9ja2VkIChfX2NvbnN0IHZvaWQgKl9fcmVzdHJpY3QgX19wdHIsIHNpemVfdCBfX3NpemUsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19uLCBGSUxFICpfX3Jlc3RyaWN0 IF9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgZnNlZWsgKEZJTEUgKl9fc3RyZWFt LCBsb25nIGludCBfX29mZiwgaW50IF9fd2hlbmNlKSB0aHJvdyAoKTsKCmV4dGVybiBsb25nIGlu dCBmdGVsbCAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKZXh0ZXJuIHZvaWQgcmV3aW5kIChG SUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CiMgNTAwICIvbm90bmZzL2ZjaGUvQlVJTEQtZ2NjLW11 ZGZsYXAvSU5TVC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjUtdHJlZS1zc2EvaW5j bHVkZS9zdGRpby5oIiAzIDQKZXh0ZXJuIGludCBmc2Vla28gKEZJTEUgKl9fc3RyZWFtLCBfX29m Zl90IF9fb2ZmLCBpbnQgX193aGVuY2UpIHRocm93ICgpOwoKZXh0ZXJuIF9fb2ZmX3QgZnRlbGxv IChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgZmdldHBvcyAoRklMRSAq X19yZXN0cmljdCBfX3N0cmVhbSwgZnBvc190ICpfX3Jlc3RyaWN0IF9fcG9zKQogICAgIHRocm93 ICgpOwoKZXh0ZXJuIGludCBmc2V0cG9zIChGSUxFICpfX3N0cmVhbSwgX19jb25zdCBmcG9zX3Qg Kl9fcG9zKSB0aHJvdyAoKTsKIyA1MzQgIi9ub3RuZnMvZmNoZS9CVUlMRC1nY2MtbXVkZmxhcC9J TlNUL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuNS10cmVlLXNzYS9pbmNsdWRlL3N0 ZGlvLmgiIDMgNApleHRlcm4gaW50IGZzZWVrbzY0IChGSUxFICpfX3N0cmVhbSwgX19vZmY2NF90 IF9fb2ZmLCBpbnQgX193aGVuY2UpIHRocm93ICgpOwpleHRlcm4gX19vZmY2NF90IGZ0ZWxsbzY0 IChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVybiBpbnQgZmdldHBvczY0IChGSUxFICpf X3Jlc3RyaWN0IF9fc3RyZWFtLCBmcG9zNjRfdCAqX19yZXN0cmljdCBfX3BvcykKICAgICB0aHJv dyAoKTsKZXh0ZXJuIGludCBmc2V0cG9zNjQgKEZJTEUgKl9fc3RyZWFtLCBfX2NvbnN0IGZwb3M2 NF90ICpfX3BvcykgdGhyb3cgKCk7CgoKCmV4dGVybiB2b2lkIGNsZWFyZXJyIChGSUxFICpfX3N0 cmVhbSkgdGhyb3cgKCk7CgpleHRlcm4gaW50IGZlb2YgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAo KTsKCmV4dGVybiBpbnQgZmVycm9yIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCmV4dGVy biB2b2lkIGNsZWFyZXJyX3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVy biBpbnQgZmVvZl91bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwpleHRlcm4gaW50 IGZlcnJvcl91bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIHZv aWQgcGVycm9yIChfX2NvbnN0IGNoYXIgKl9fcykgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IHN5 c19uZXJyOwpleHRlcm4gX19jb25zdCBjaGFyICpfX2NvbnN0IHN5c19lcnJsaXN0W107CgoKZXh0 ZXJuIGludCBfc3lzX25lcnI7CmV4dGVybiBfX2NvbnN0IGNoYXIgKl9fY29uc3QgX3N5c19lcnJs aXN0W107CgoKCgoKZXh0ZXJuIGludCBmaWxlbm8gKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsK CgoKCmV4dGVybiBpbnQgZmlsZW5vX3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7 CgoKCgoKCmV4dGVybiBGSUxFICpwb3BlbiAoX19jb25zdCBjaGFyICpfX2NvbW1hbmQsIF9fY29u c3QgY2hhciAqX19tb2RlcykgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwY2xvc2UgKEZJTEUgKl9f c3RyZWFtKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gY2hhciAqY3Rlcm1pZCAoY2hhciAqX19zKSB0 aHJvdyAoKTsKCgoKCgpleHRlcm4gY2hhciAqY3VzZXJpZCAoY2hhciAqX19zKSB0aHJvdyAoKTsK CgoKCnN0cnVjdCBvYnN0YWNrOwoKCmV4dGVybiBpbnQgb2JzdGFja19wcmludGYgKHN0cnVjdCBv YnN0YWNrICpfX3Jlc3RyaWN0IF9fb2JzdGFjaywKICAgICAgICAgICAgICAgICAgICAgICAgICAg X19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pIHRocm93ICgpOwpleHRlcm4g aW50IG9ic3RhY2tfdnByaW50ZiAoc3RydWN0IG9ic3RhY2sgKl9fcmVzdHJpY3QgX19vYnN0YWNr LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9f Zm9ybWF0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3QgX19hcmdz KSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiB2b2lkIGZsb2NrZmlsZSAoRklMRSAqX19zdHJlYW0p IHRocm93ICgpOwoKCgpleHRlcm4gaW50IGZ0cnlsb2NrZmlsZSAoRklMRSAqX19zdHJlYW0pIHRo cm93ICgpOwoKCmV4dGVybiB2b2lkIGZ1bmxvY2tmaWxlIChGSUxFICpfX3N0cmVhbSkgdGhyb3cg KCk7CiMgNjQ0ICIvbm90bmZzL2ZjaGUvQlVJTEQtZ2NjLW11ZGZsYXAvSU5TVC9saWIvZ2NjLWxp Yi9pNjg2LXBjLWxpbnV4LWdudS8zLjUtdHJlZS1zc2EvaW5jbHVkZS9zdGRpby5oIiAzIDQKfQoj IDUzICIvbm90bmZzL2ZjaGUvQlVJTEQtZ2NjLW11ZGZsYXAvSU5TVC9pbmNsdWRlL2MrKy8zLjUt dHJlZS1zc2EvY3N0ZGlvIiAyIDMKIyA5NyAiL25vdG5mcy9mY2hlL0JVSUxELWdjYy1tdWRmbGFw L0lOU1QvaW5jbHVkZS9jKysvMy41LXRyZWUtc3NhL2NzdGRpbyIgMwpuYW1lc3BhY2Ugc3RkCnsK ICB1c2luZyA6OkZJTEU7CiAgdXNpbmcgOjpmcG9zX3Q7CgogIHVzaW5nIDo6Y2xlYXJlcnI7CiAg dXNpbmcgOjpmY2xvc2U7CiAgdXNpbmcgOjpmZW9mOwogIHVzaW5nIDo6ZmVycm9yOwogIHVzaW5n IDo6ZmZsdXNoOwogIHVzaW5nIDo6ZmdldGM7CiAgdXNpbmcgOjpmZ2V0cG9zOwogIHVzaW5nIDo6 ZmdldHM7CiAgdXNpbmcgOjpmb3BlbjsKICB1c2luZyA6OmZwcmludGY7CiAgdXNpbmcgOjpmcHV0 YzsKICB1c2luZyA6OmZwdXRzOwogIHVzaW5nIDo6ZnJlYWQ7CiAgdXNpbmcgOjpmcmVvcGVuOwog IHVzaW5nIDo6ZnNjYW5mOwogIHVzaW5nIDo6ZnNlZWs7CiAgdXNpbmcgOjpmc2V0cG9zOwogIHVz aW5nIDo6ZnRlbGw7CiAgdXNpbmcgOjpmd3JpdGU7CiAgdXNpbmcgOjpnZXRjOwogIHVzaW5nIDo6 Z2V0Y2hhcjsKICB1c2luZyA6OmdldHM7CiAgdXNpbmcgOjpwZXJyb3I7CiAgdXNpbmcgOjpwcmlu dGY7CiAgdXNpbmcgOjpwdXRjOwogIHVzaW5nIDo6cHV0Y2hhcjsKICB1c2luZyA6OnB1dHM7CiAg dXNpbmcgOjpyZW1vdmU7CiAgdXNpbmcgOjpyZW5hbWU7CiAgdXNpbmcgOjpyZXdpbmQ7CiAgdXNp bmcgOjpzY2FuZjsKICB1c2luZyA6OnNldGJ1ZjsKICB1c2luZyA6OnNldHZidWY7CiAgdXNpbmcg OjpzcHJpbnRmOwogIHVzaW5nIDo6c3NjYW5mOwogIHVzaW5nIDo6dG1wZmlsZTsKICB1c2luZyA6 OnRtcG5hbTsKICB1c2luZyA6OnVuZ2V0YzsKICB1c2luZyA6OnZmcHJpbnRmOwogIHVzaW5nIDo6 dnByaW50ZjsKICB1c2luZyA6OnZzcHJpbnRmOwp9CiMgMTUzICIvbm90bmZzL2ZjaGUvQlVJTEQt Z2NjLW11ZGZsYXAvSU5TVC9pbmNsdWRlL2MrKy8zLjUtdHJlZS1zc2EvY3N0ZGlvIiAzCm5hbWVz cGFjZSBfX2dudV9jeHgKewogIHVzaW5nIDo6c25wcmludGY7CiAgdXNpbmcgOjp2ZnNjYW5mOwog IHVzaW5nIDo6dnNjYW5mOwogIHVzaW5nIDo6dnNucHJpbnRmOwogIHVzaW5nIDo6dnNzY2FuZjsK fQoKbmFtZXNwYWNlIHN0ZAp7CiAgdXNpbmcgX19nbnVfY3h4OjpzbnByaW50ZjsKICB1c2luZyBf X2dudV9jeHg6OnZmc2NhbmY7CiAgdXNpbmcgX19nbnVfY3h4Ojp2c2NhbmY7CiAgdXNpbmcgX19n bnVfY3h4Ojp2c25wcmludGY7CiAgdXNpbmcgX19nbnVfY3h4Ojp2c3NjYW5mOwp9CiMgMzYgIi9u b3RuZnMvZmNoZS9CVUlMRC1nY2MtbXVkZmxhcC9JTlNUL2luY2x1ZGUvYysrLzMuNS10cmVlLXNz YS9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2MrK2lvLmgiIDIgMwoKIyAxICIvbm90bmZzL2ZjaGUv QlVJTEQtZ2NjLW11ZGZsYXAvSU5TVC9pbmNsdWRlL2MrKy8zLjUtdHJlZS1zc2EvaTY4Ni1wYy1s aW51eC1nbnUvYml0cy9ndGhyLmgiIDEgMwojIDk2ICIvbm90bmZzL2ZjaGUvQlVJTEQtZ2NjLW11 ZGZsYXAvSU5TVC9pbmNsdWRlL2MrKy8zLjUtdHJlZS1zc2EvaTY4Ni1wYy1saW51eC1nbnUvYml0 cy9ndGhyLmgiIDMKIyAxICIvbm90bmZzL2ZjaGUvQlVJTEQtZ2NjLW11ZGZsYXAvSU5TVC9pbmNs dWRlL2MrKy8zLjUtdHJlZS1zc2EvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9ndGhyLWRlZmF1bHQu aCIgMSAzCiMgMzcgIi9ub3RuZnMvZmNoZS9CVUlMRC1nY2MtbXVkZmxhcC9JTlNUL2luY2x1ZGUv YysrLzMuNS10cmVlLXNzYS9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2d0aHItZGVmYXVsdC5oIiAz CiMgMSAiL25vdG5mcy9mY2hlL0JVSUxELWdjYy1tdWRmbGFwL0lOU1QvbGliL2djYy1saWIvaTY4 Ni1wYy1saW51eC1nbnUvMy41LXRyZWUtc3NhL2luY2x1ZGUvcHRocmVhZC5oIiAxIDMgNAojIDI5 ICIvbm90bmZzL2ZjaGUvQlVJTEQtZ2NjLW11ZGZsYXAvSU5TVC9saWIvZ2NjLWxpYi9pNjg2LXBj LWxpbnV4LWdudS8zLjUtdHJlZS1zc2EvaW5jbHVkZS9wdGhyZWFkLmgiIDMgNAojIDEgIi91c3Iv aW5jbHVkZS9zY2hlZC5oIiAxIDMgNAojIDI5ICIvdXNyL2luY2x1ZGUvc2NoZWQuaCIgMyA0CiMg MSAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMSAzIDQKIyAzMCAiL3Vzci9pbmNsdWRlL3NjaGVkLmgi IDIgMyA0CgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9zY2hlZC5oIiAxIDMgNAojIDQ3ICIvdXNy L2luY2x1ZGUvYml0cy9zY2hlZC5oIiAzIDQKc3RydWN0IHNjaGVkX3BhcmFtCiAgewogICAgaW50 IF9fc2NoZWRfcHJpb3JpdHk7CiAgfTsKCmV4dGVybiAiQyIgewoKCgpleHRlcm4gaW50IGNsb25l IChpbnQgKCpfX2ZuKSAodm9pZCAqX19hcmcpLCB2b2lkICpfX2NoaWxkX3N0YWNrLAogICAgICAg ICAgICAgICAgICBpbnQgX19mbGFncywgdm9pZCAqX19hcmcpIHRocm93ICgpOwoKCn0KIyAzMyAi L3Vzci9pbmNsdWRlL3NjaGVkLmgiIDIgMyA0CgoKCgpleHRlcm4gIkMiIHsKCgpleHRlcm4gaW50 IHNjaGVkX3NldHBhcmFtIChfX3BpZF90IF9fcGlkLCBfX2NvbnN0IHN0cnVjdCBzY2hlZF9wYXJh bSAqX19wYXJhbSkKICAgICB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHNjaGVkX2dldHBhcmFtIChf X3BpZF90IF9fcGlkLCBzdHJ1Y3Qgc2NoZWRfcGFyYW0gKl9fcGFyYW0pIHRocm93ICgpOwoKCmV4 dGVybiBpbnQgc2NoZWRfc2V0c2NoZWR1bGVyIChfX3BpZF90IF9fcGlkLCBpbnQgX19wb2xpY3ks CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHN0cnVjdCBzY2hlZF9wYXJh bSAqX19wYXJhbSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBzY2hlZF9nZXRzY2hlZHVsZXIgKF9f cGlkX3QgX19waWQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgc2NoZWRfeWllbGQgKHZvaWQpIHRo cm93ICgpOwoKCmV4dGVybiBpbnQgc2NoZWRfZ2V0X3ByaW9yaXR5X21heCAoaW50IF9fYWxnb3Jp dGhtKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHNjaGVkX2dldF9wcmlvcml0eV9taW4gKGludCBf X2FsZ29yaXRobSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBzY2hlZF9ycl9nZXRfaW50ZXJ2YWwg KF9fcGlkX3QgX19waWQsIHN0cnVjdCB0aW1lc3BlYyAqX190KSB0aHJvdyAoKTsKCn0KIyAzMCAi L25vdG5mcy9mY2hlL0JVSUxELWdjYy1tdWRmbGFwL0lOU1QvbGliL2djYy1saWIvaTY4Ni1wYy1s aW51eC1nbnUvMy41LXRyZWUtc3NhL2luY2x1ZGUvcHRocmVhZC5oIiAyIDMgNAojIDEgIi91c3Iv aW5jbHVkZS90aW1lLmgiIDEgMyA0CiMgMzAgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMgNApleHRl cm4gIkMiIHsKCgoKCgoKCiMgMSAiL25vdG5mcy9mY2hlL0JVSUxELWdjYy1tdWRmbGFwL0lOU1Qv bGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy41LXRyZWUtc3NhL2luY2x1ZGUvc3RkZGVm LmgiIDEgMyA0CiMgMzkgIi91c3IvaW5jbHVkZS90aW1lLmgiIDIgMyA0CgoKCiMgMSAiL3Vzci9p bmNsdWRlL2JpdHMvdGltZS5oIiAxIDMgNAojIDQzICIvdXNyL2luY2x1ZGUvdGltZS5oIiAyIDMg NAojIDExOCAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMyA0CnN0cnVjdCB0bQp7CiAgaW50IHRtX3Nl YzsKICBpbnQgdG1fbWluOwogIGludCB0bV9ob3VyOwogIGludCB0bV9tZGF5OwogIGludCB0bV9t b247CiAgaW50IHRtX3llYXI7CiAgaW50IHRtX3dkYXk7CiAgaW50IHRtX3lkYXk7CiAgaW50IHRt X2lzZHN0OwoKCiAgbG9uZyBpbnQgdG1fZ210b2ZmOwogIF9fY29uc3QgY2hhciAqdG1fem9uZTsK CgoKCn07CgoKCgpzdHJ1Y3QgaXRpbWVyc3BlYwogIHsKICAgIHN0cnVjdCB0aW1lc3BlYyBpdF9p bnRlcnZhbDsKICAgIHN0cnVjdCB0aW1lc3BlYyBpdF92YWx1ZTsKICB9OwoKCnN0cnVjdCBzaWdl dmVudDsKIyAxNjMgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMgNApleHRlcm4gY2xvY2tfdCBjbG9j ayAodm9pZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIHRpbWVfdCB0aW1lICh0aW1lX3QgKl9fdGltZXIp IHRocm93ICgpOwoKCmV4dGVybiBkb3VibGUgZGlmZnRpbWUgKHRpbWVfdCBfX3RpbWUxLCB0aW1l X3QgX190aW1lMCkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoK ZXh0ZXJuIHRpbWVfdCBta3RpbWUgKHN0cnVjdCB0bSAqX190cCkgdGhyb3cgKCk7CgoKCgoKZXh0 ZXJuIHNpemVfdCBzdHJmdGltZSAoY2hhciAqX19yZXN0cmljdCBfX3MsIHNpemVfdCBfX21heHNp emUsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zv cm1hdCwKICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBzdHJ1Y3QgdG0gKl9fcmVzdHJp Y3QgX190cCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hhciAqc3RycHRpbWUgKF9fY29uc3QgY2hh ciAqX19yZXN0cmljdCBfX3MsCiAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpf X3Jlc3RyaWN0IF9fZm10LCBzdHJ1Y3QgdG0gKl9fdHApCiAgICAgdGhyb3cgKCk7CgoKCgoKZXh0 ZXJuIHN0cnVjdCB0bSAqZ210aW1lIChfX2NvbnN0IHRpbWVfdCAqX190aW1lcikgdGhyb3cgKCk7 CgoKCmV4dGVybiBzdHJ1Y3QgdG0gKmxvY2FsdGltZSAoX19jb25zdCB0aW1lX3QgKl9fdGltZXIp IHRocm93ICgpOwoKCgoKZXh0ZXJuIHN0cnVjdCB0bSAqZ210aW1lX3IgKF9fY29uc3QgdGltZV90 ICpfX3Jlc3RyaWN0IF9fdGltZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qg dG0gKl9fcmVzdHJpY3QgX190cCkgdGhyb3cgKCk7CgoKCmV4dGVybiBzdHJ1Y3QgdG0gKmxvY2Fs dGltZV9yIChfX2NvbnN0IHRpbWVfdCAqX19yZXN0cmljdCBfX3RpbWVyLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgc3RydWN0IHRtICpfX3Jlc3RyaWN0IF9fdHApIHRocm93ICgpOwoK CgoKZXh0ZXJuIGNoYXIgKmFzY3RpbWUgKF9fY29uc3Qgc3RydWN0IHRtICpfX3RwKSB0aHJvdyAo KTsKCgpleHRlcm4gY2hhciAqY3RpbWUgKF9fY29uc3QgdGltZV90ICpfX3RpbWVyKSB0aHJvdyAo KTsKCgoKCgoKZXh0ZXJuIGNoYXIgKmFzY3RpbWVfciAoX19jb25zdCBzdHJ1Y3QgdG0gKl9fcmVz dHJpY3QgX190cCwKICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqX19yZXN0cmljdCBfX2J1 ZikgdGhyb3cgKCk7CgoKZXh0ZXJuIGNoYXIgKmN0aW1lX3IgKF9fY29uc3QgdGltZV90ICpfX3Jl c3RyaWN0IF9fdGltZXIsCiAgICAgICAgICAgICAgICAgICAgICBjaGFyICpfX3Jlc3RyaWN0IF9f YnVmKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBjaGFyICpfX3R6bmFtZVsyXTsKZXh0ZXJuIGludCBf X2RheWxpZ2h0OwpleHRlcm4gbG9uZyBpbnQgX190aW1lem9uZTsKCgoKCmV4dGVybiBjaGFyICp0 em5hbWVbMl07CgoKCmV4dGVybiB2b2lkIHR6c2V0ICh2b2lkKSB0aHJvdyAoKTsKCgoKZXh0ZXJu IGludCBkYXlsaWdodDsKZXh0ZXJuIGxvbmcgaW50IHRpbWV6b25lOwoKCgoKCmV4dGVybiBpbnQg c3RpbWUgKF9fY29uc3QgdGltZV90ICpfX3doZW4pIHRocm93ICgpOwojIDI3MSAiL3Vzci9pbmNs dWRlL3RpbWUuaCIgMyA0CmV4dGVybiB0aW1lX3QgdGltZWdtIChzdHJ1Y3QgdG0gKl9fdHApIHRo cm93ICgpOwoKCmV4dGVybiB0aW1lX3QgdGltZWxvY2FsIChzdHJ1Y3QgdG0gKl9fdHApIHRocm93 ICgpOwoKCmV4dGVybiBpbnQgZHlzaXplIChpbnQgX195ZWFyKSB0aHJvdyAoKSBfX2F0dHJpYnV0 ZV9fICgoX19jb25zdF9fKSk7CgoKCgoKZXh0ZXJuIGludCBuYW5vc2xlZXAgKF9fY29uc3Qgc3Ry dWN0IHRpbWVzcGVjICpfX3JlcXVlc3RlZF90aW1lLAogICAgICAgICAgICAgICAgICAgICAgc3Ry dWN0IHRpbWVzcGVjICpfX3JlbWFpbmluZykgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgY2xvY2tf Z2V0cmVzIChjbG9ja2lkX3QgX19jbG9ja19pZCwgc3RydWN0IHRpbWVzcGVjICpfX3JlcykgdGhy b3cgKCk7CgoKZXh0ZXJuIGludCBjbG9ja19nZXR0aW1lIChjbG9ja2lkX3QgX19jbG9ja19pZCwg c3RydWN0IHRpbWVzcGVjICpfX3RwKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IGNsb2NrX3NldHRp bWUgKGNsb2NraWRfdCBfX2Nsb2NrX2lkLCBfX2NvbnN0IHN0cnVjdCB0aW1lc3BlYyAqX190cCkK ICAgICB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBjbG9ja19uYW5vc2xlZXAgKGNsb2NraWRfdCBf X2Nsb2NrX2lkLCBpbnQgX19mbGFncywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29u c3Qgc3RydWN0IHRpbWVzcGVjICpfX3JlcSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0 cnVjdCB0aW1lc3BlYyAqX19yZW0pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgY2xvY2tfZ2V0Y3B1 Y2xvY2tpZCAocGlkX3QgX19waWQsIGNsb2NraWRfdCAqX19jbG9ja19pZCkgdGhyb3cgKCk7CgoK CgpleHRlcm4gaW50IHRpbWVyX2NyZWF0ZSAoY2xvY2tpZF90IF9fY2xvY2tfaWQsCiAgICAgICAg ICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2lnZXZlbnQgKl9fcmVzdHJpY3QgX19ldnAsCiAgICAg ICAgICAgICAgICAgICAgICAgICB0aW1lcl90ICpfX3Jlc3RyaWN0IF9fdGltZXJpZCkgdGhyb3cg KCk7CgoKZXh0ZXJuIGludCB0aW1lcl9kZWxldGUgKHRpbWVyX3QgX190aW1lcmlkKSB0aHJvdyAo KTsKCgpleHRlcm4gaW50IHRpbWVyX3NldHRpbWUgKHRpbWVyX3QgX190aW1lcmlkLCBpbnQgX19m bGFncywKICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHN0cnVjdCBpdGltZXJzcGVj ICpfX3Jlc3RyaWN0IF9fdmFsdWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGl0 aW1lcnNwZWMgKl9fcmVzdHJpY3QgX19vdmFsdWUpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgdGlt ZXJfZ2V0dGltZSAodGltZXJfdCBfX3RpbWVyaWQsIHN0cnVjdCBpdGltZXJzcGVjICpfX3ZhbHVl KQogICAgIHRocm93ICgpOwoKCmV4dGVybiBpbnQgdGltZXJfZ2V0b3ZlcnJ1biAodGltZXJfdCBf X3RpbWVyaWQpIHRocm93ICgpOwojIDM0MiAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMyA0CmV4dGVy biBpbnQgZ2V0ZGF0ZV9lcnI7CgoKCgoKZXh0ZXJuIHN0cnVjdCB0bSAqZ2V0ZGF0ZSAoX19jb25z dCBjaGFyICpfX3N0cmluZykgdGhyb3cgKCk7CiMgMzU3ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAz IDQKZXh0ZXJuIGludCBnZXRkYXRlX3IgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3N0cmlu ZywKICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB0bSAqX19yZXN0cmljdCBfX3Jlc2J1ZnAp IHRocm93ICgpOwoKCgp9CiMgMzEgIi9ub3RuZnMvZmNoZS9CVUlMRC1nY2MtbXVkZmxhcC9JTlNU L2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuNS10cmVlLXNzYS9pbmNsdWRlL3B0aHJl YWQuaCIgMiAzIDQKCgojIDEgIi91c3IvaW5jbHVkZS9zaWduYWwuaCIgMSAzIDQKIyAzMSAiL3Vz ci9pbmNsdWRlL3NpZ25hbC5oIiAzIDQKZXh0ZXJuICJDIiB7CgojIDEgIi91c3IvaW5jbHVkZS9i aXRzL3NpZ3NldC5oIiAxIDMgNAojIDM0ICIvdXNyL2luY2x1ZGUvc2lnbmFsLmgiIDIgMyA0CiMg MzcxICIvdXNyL2luY2x1ZGUvc2lnbmFsLmgiIDMgNAp9CiMgMzQgIi9ub3RuZnMvZmNoZS9CVUlM RC1nY2MtbXVkZmxhcC9JTlNUL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuNS10cmVl LXNzYS9pbmNsdWRlL3B0aHJlYWQuaCIgMiAzIDQKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9wdGhy ZWFkdHlwZXMuaCIgMSAzIDQKIyAzNSAiL25vdG5mcy9mY2hlL0JVSUxELWdjYy1tdWRmbGFwL0lO U1QvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy41LXRyZWUtc3NhL2luY2x1ZGUvcHRo cmVhZC5oIiAyIDMgNAojIDEgIi91c3IvaW5jbHVkZS9iaXRzL2luaXRzcGluLmgiIDEgMyA0CiMg MzYgIi9ub3RuZnMvZmNoZS9CVUlMRC1nY2MtbXVkZmxhcC9JTlNUL2xpYi9nY2MtbGliL2k2ODYt cGMtbGludXgtZ251LzMuNS10cmVlLXNzYS9pbmNsdWRlL3B0aHJlYWQuaCIgMiAzIDQKCgpleHRl cm4gIkMiIHsKIyA2OCAiL25vdG5mcy9mY2hlL0JVSUxELWdjYy1tdWRmbGFwL0lOU1QvbGliL2dj Yy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy41LXRyZWUtc3NhL2luY2x1ZGUvcHRocmVhZC5oIiAz IDQKZW51bQp7CiAgUFRIUkVBRF9DUkVBVEVfSk9JTkFCTEUsCgogIFBUSFJFQURfQ1JFQVRFX0RF VEFDSEVECgp9OwoKZW51bQp7CiAgUFRIUkVBRF9JTkhFUklUX1NDSEVELAoKICBQVEhSRUFEX0VY UExJQ0lUX1NDSEVECgp9OwoKZW51bQp7CiAgUFRIUkVBRF9TQ09QRV9TWVNURU0sCgogIFBUSFJF QURfU0NPUEVfUFJPQ0VTUwoKfTsKCmVudW0KewogIFBUSFJFQURfTVVURVhfVElNRURfTlAsCiAg UFRIUkVBRF9NVVRFWF9SRUNVUlNJVkVfTlAsCiAgUFRIUkVBRF9NVVRFWF9FUlJPUkNIRUNLX05Q LAogIFBUSFJFQURfTVVURVhfQURBUFRJVkVfTlAKCiAgLAogIFBUSFJFQURfTVVURVhfTk9STUFM ID0gUFRIUkVBRF9NVVRFWF9USU1FRF9OUCwKICBQVEhSRUFEX01VVEVYX1JFQ1VSU0lWRSA9IFBU SFJFQURfTVVURVhfUkVDVVJTSVZFX05QLAogIFBUSFJFQURfTVVURVhfRVJST1JDSEVDSyA9IFBU SFJFQURfTVVURVhfRVJST1JDSEVDS19OUCwKICBQVEhSRUFEX01VVEVYX0RFRkFVTFQgPSBQVEhS RUFEX01VVEVYX05PUk1BTAoKCgogICwgUFRIUkVBRF9NVVRFWF9GQVNUX05QID0gUFRIUkVBRF9N VVRFWF9BREFQVElWRV9OUAoKfTsKCmVudW0KewogIFBUSFJFQURfUFJPQ0VTU19QUklWQVRFLAoK ICBQVEhSRUFEX1BST0NFU1NfU0hBUkVECgp9OwoKCmVudW0KewogIFBUSFJFQURfUldMT0NLX1BS RUZFUl9SRUFERVJfTlAsCiAgUFRIUkVBRF9SV0xPQ0tfUFJFRkVSX1dSSVRFUl9OUCwKICBQVEhS RUFEX1JXTE9DS19QUkVGRVJfV1JJVEVSX05PTlJFQ1VSU0lWRV9OUCwKICBQVEhSRUFEX1JXTE9D S19ERUZBVUxUX05QID0gUFRIUkVBRF9SV0xPQ0tfUFJFRkVSX1dSSVRFUl9OUAp9OwojIDE0MCAi L25vdG5mcy9mY2hlL0JVSUxELWdjYy1tdWRmbGFwL0lOU1QvbGliL2djYy1saWIvaTY4Ni1wYy1s aW51eC1nbnUvMy41LXRyZWUtc3NhL2luY2x1ZGUvcHRocmVhZC5oIiAzIDQKc3RydWN0IF9wdGhy ZWFkX2NsZWFudXBfYnVmZmVyCnsKICB2b2lkICgqX19yb3V0aW5lKSAodm9pZCAqKTsKICB2b2lk ICpfX2FyZzsKICBpbnQgX19jYW5jZWx0eXBlOwogIHN0cnVjdCBfcHRocmVhZF9jbGVhbnVwX2J1 ZmZlciAqX19wcmV2Owp9OwoKCgplbnVtCnsKICBQVEhSRUFEX0NBTkNFTF9FTkFCTEUsCgogIFBU SFJFQURfQ0FOQ0VMX0RJU0FCTEUKCn07CmVudW0KewogIFBUSFJFQURfQ0FOQ0VMX0RFRkVSUkVE LAoKICBQVEhSRUFEX0NBTkNFTF9BU1lOQ0hST05PVVMKCn07CiMgMTcyICIvbm90bmZzL2ZjaGUv QlVJTEQtZ2NjLW11ZGZsYXAvSU5TVC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjUt dHJlZS1zc2EvaW5jbHVkZS9wdGhyZWFkLmgiIDMgNApleHRlcm4gaW50IHB0aHJlYWRfY3JlYXRl IChwdGhyZWFkX3QgKl9fcmVzdHJpY3QgX190aHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg IF9fY29uc3QgcHRocmVhZF9hdHRyX3QgKl9fcmVzdHJpY3QgX19hdHRyLAogICAgICAgICAgICAg ICAgICAgICAgICAgICB2b2lkICooKl9fc3RhcnRfcm91dGluZSkgKHZvaWQgKiksCiAgICAgICAg ICAgICAgICAgICAgICAgICAgIHZvaWQgKl9fcmVzdHJpY3QgX19hcmcpIHRocm93ICgpOwoKCmV4 dGVybiBwdGhyZWFkX3QgcHRocmVhZF9zZWxmICh2b2lkKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50 IHB0aHJlYWRfZXF1YWwgKHB0aHJlYWRfdCBfX3RocmVhZDEsIHB0aHJlYWRfdCBfX3RocmVhZDIp IHRocm93ICgpOwoKCmV4dGVybiB2b2lkIHB0aHJlYWRfZXhpdCAodm9pZCAqX19yZXR2YWwpCiAg ICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKCgoKZXh0ZXJuIGlu dCBwdGhyZWFkX2pvaW4gKHB0aHJlYWRfdCBfX3RoLCB2b2lkICoqX190aHJlYWRfcmV0dXJuKSB0 aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IHB0aHJlYWRfZGV0YWNoIChwdGhyZWFkX3QgX190aCkg dGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9pbml0IChwdGhyZWFkX2F0 dHJfdCAqX19hdHRyKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9kZXN0cm95 IChwdGhyZWFkX2F0dHJfdCAqX19hdHRyKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRf YXR0cl9zZXRkZXRhY2hzdGF0ZSAocHRocmVhZF9hdHRyX3QgKl9fYXR0ciwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2RldGFjaHN0YXRlKSB0aHJvdyAoKTsK CgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9nZXRkZXRhY2hzdGF0ZSAoX19jb25zdCBwdGhyZWFk X2F0dHJfdCAqX19hdHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg aW50ICpfX2RldGFjaHN0YXRlKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9z ZXRzY2hlZHBhcmFtIChwdGhyZWFkX2F0dHJfdCAqX19yZXN0cmljdCBfX2F0dHIsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgc3RydWN0IHNjaGVkX3BhcmFt ICpfX3Jlc3RyaWN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcGFy YW0pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2dldHNjaGVkcGFyYW0gKF9f Y29uc3QgcHRocmVhZF9hdHRyX3QgKl9fcmVzdHJpY3QKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgX19hdHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBzdHJ1Y3Qgc2NoZWRfcGFyYW0gKl9fcmVzdHJpY3QgX19wYXJhbSkKICAgICB0aHJvdyAo KTsKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9zZXRzY2hlZHBvbGljeSAocHRocmVhZF9hdHRy X3QgKl9fYXR0ciwgaW50IF9fcG9saWN5KQogICAgIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRo cmVhZF9hdHRyX2dldHNjaGVkcG9saWN5IChfX2NvbnN0IHB0aHJlYWRfYXR0cl90ICpfX3Jlc3Ry aWN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2F0dHIsIGludCAq X19yZXN0cmljdCBfX3BvbGljeSkKICAgICB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRf YXR0cl9zZXRpbmhlcml0c2NoZWQgKHB0aHJlYWRfYXR0cl90ICpfX2F0dHIsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9faW5oZXJpdCkgdGhyb3cgKCk7CgoK ZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfZ2V0aW5oZXJpdHNjaGVkIChfX2NvbnN0IHB0aHJlYWRf YXR0cl90ICpfX3Jlc3RyaWN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgX19hdHRyLCBpbnQgKl9fcmVzdHJpY3QgX19pbmhlcml0KQogICAgIHRocm93ICgpOwoKCmV4 dGVybiBpbnQgcHRocmVhZF9hdHRyX3NldHNjb3BlIChwdGhyZWFkX2F0dHJfdCAqX19hdHRyLCBp bnQgX19zY29wZSkKICAgICB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9nZXRz Y29wZSAoX19jb25zdCBwdGhyZWFkX2F0dHJfdCAqX19yZXN0cmljdCBfX2F0dHIsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19zY29wZSkgdGhyb3cg KCk7CgoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX3NldGd1YXJkc2l6ZSAocHRocmVhZF9hdHRy X3QgKl9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qg X19ndWFyZHNpemUpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2dldGd1YXJk c2l6ZSAoX19jb25zdCBwdGhyZWFkX2F0dHJfdCAqX19yZXN0cmljdAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIF9fYXR0ciwgc2l6ZV90ICpfX3Jlc3RyaWN0IF9fZ3VhcmRz aXplKQogICAgIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9zZXRzdGFj a2FkZHIgKHB0aHJlYWRfYXR0cl90ICpfX2F0dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgdm9pZCAqX19zdGFja2FkZHIpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRo cmVhZF9hdHRyX2dldHN0YWNrYWRkciAoX19jb25zdCBwdGhyZWFkX2F0dHJfdCAqX19yZXN0cmlj dAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYXR0ciwgdm9pZCAqKl9f cmVzdHJpY3QgX19zdGFja2FkZHIpCiAgICAgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBwdGhy ZWFkX2F0dHJfc2V0c3RhY2sgKHB0aHJlYWRfYXR0cl90ICpfX2F0dHIsIHZvaWQgKl9fc3RhY2th ZGRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fc3RhY2tzaXpl KSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9nZXRzdGFjayAoX19jb25zdCBw dGhyZWFkX2F0dHJfdCAqX19yZXN0cmljdCBfX2F0dHIsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB2b2lkICoqX19yZXN0cmljdCBfX3N0YWNrYWRkciwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHNpemVfdCAqX19yZXN0cmljdCBfX3N0YWNrc2l6ZSkgdGhyb3cg KCk7CgoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfc2V0c3RhY2tzaXplIChwdGhyZWFkX2F0 dHJfdCAqX19hdHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVf dCBfX3N0YWNrc2l6ZSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfZ2V0c3Rh Y2tzaXplIChfX2NvbnN0IHB0aHJlYWRfYXR0cl90ICpfX3Jlc3RyaWN0CiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgX19hdHRyLCBzaXplX3QgKl9fcmVzdHJpY3QgX19zdGFj a3NpemUpCiAgICAgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgcHRocmVhZF9nZXRhdHRyX25wIChw dGhyZWFkX3QgX190aCwgcHRocmVhZF9hdHRyX3QgKl9fYXR0cikgdGhyb3cgKCk7CgoKCgoKCmV4 dGVybiBpbnQgcHRocmVhZF9zZXRzY2hlZHBhcmFtIChwdGhyZWFkX3QgX190YXJnZXRfdGhyZWFk LCBpbnQgX19wb2xpY3ksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0 IHN0cnVjdCBzY2hlZF9wYXJhbSAqX19wYXJhbSkKICAgICB0aHJvdyAoKTsKCgpleHRlcm4gaW50 IHB0aHJlYWRfZ2V0c2NoZWRwYXJhbSAocHRocmVhZF90IF9fdGFyZ2V0X3RocmVhZCwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0cmljdCBfX3BvbGljeSwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzY2hlZF9wYXJhbSAqX19yZXN0 cmljdCBfX3BhcmFtKQogICAgIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHB0aHJlYWRfZ2V0Y29u Y3VycmVuY3kgKHZvaWQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9zZXRjb25jdXJy ZW5jeSAoaW50IF9fbGV2ZWwpIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX3lp ZWxkICh2b2lkKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX211dGV4X2luaXQg KHB0aHJlYWRfbXV0ZXhfdCAqX19yZXN0cmljdCBfX211dGV4LAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgX19jb25zdCBwdGhyZWFkX211dGV4YXR0cl90ICpfX3Jlc3RyaWN0CiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBfX211dGV4X2F0dHIpIHRocm93ICgpOwoKCmV4dGVy biBpbnQgcHRocmVhZF9tdXRleF9kZXN0cm95IChwdGhyZWFkX211dGV4X3QgKl9fbXV0ZXgpIHRo cm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9tdXRleF90cnlsb2NrIChwdGhyZWFkX211dGV4 X3QgKl9fbXV0ZXgpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9tdXRleF9sb2NrIChw dGhyZWFkX211dGV4X3QgKl9fbXV0ZXgpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHB0aHJlYWRf bXV0ZXhfdGltZWRsb2NrIChwdGhyZWFkX211dGV4X3QgKl9fcmVzdHJpY3QgX19tdXRleCwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBzdHJ1Y3QgdGltZXNwZWMg Kl9fcmVzdHJpY3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19hYnN0aW1l KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBwdGhyZWFkX211dGV4X3VubG9jayAocHRocmVhZF9t dXRleF90ICpfX211dGV4KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX211dGV4 YXR0cl9pbml0IChwdGhyZWFkX211dGV4YXR0cl90ICpfX2F0dHIpIHRocm93ICgpOwoKCmV4dGVy biBpbnQgcHRocmVhZF9tdXRleGF0dHJfZGVzdHJveSAocHRocmVhZF9tdXRleGF0dHJfdCAqX19h dHRyKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhhdHRyX2dldHBzaGFyZWQg KF9fY29uc3QgcHRocmVhZF9tdXRleGF0dHJfdCAqCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgX19yZXN0cmljdCBfX2F0dHIsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fcHNoYXJlZCkgdGhyb3cgKCk7CgoK ZXh0ZXJuIGludCBwdGhyZWFkX211dGV4YXR0cl9zZXRwc2hhcmVkIChwdGhyZWFkX211dGV4YXR0 cl90ICpfX2F0dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50 IF9fcHNoYXJlZCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX211dGV4YXR0cl9z ZXR0eXBlIChwdGhyZWFkX211dGV4YXR0cl90ICpfX2F0dHIsIGludCBfX2tpbmQpCiAgICAgdGhy b3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX211dGV4YXR0cl9nZXR0eXBlIChfX2NvbnN0IHB0 aHJlYWRfbXV0ZXhhdHRyX3QgKl9fcmVzdHJpY3QKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBfX2F0dHIsIGludCAqX19yZXN0cmljdCBfX2tpbmQpIHRocm93ICgpOwoKCgoK CgoKZXh0ZXJuIGludCBwdGhyZWFkX2NvbmRfaW5pdCAocHRocmVhZF9jb25kX3QgKl9fcmVzdHJp Y3QgX19jb25kLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHB0aHJlYWRf Y29uZGF0dHJfdCAqX19yZXN0cmljdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2Nv bmRfYXR0cikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2NvbmRfZGVzdHJveSAocHRo cmVhZF9jb25kX3QgKl9fY29uZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2NvbmRf c2lnbmFsIChwdGhyZWFkX2NvbmRfdCAqX19jb25kKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0 aHJlYWRfY29uZF9icm9hZGNhc3QgKHB0aHJlYWRfY29uZF90ICpfX2NvbmQpIHRocm93ICgpOwoK CgpleHRlcm4gaW50IHB0aHJlYWRfY29uZF93YWl0IChwdGhyZWFkX2NvbmRfdCAqX19yZXN0cmlj dCBfX2NvbmQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB0aHJlYWRfbXV0ZXhfdCAq X19yZXN0cmljdCBfX211dGV4KSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IHB0aHJlYWRfY29u ZF90aW1lZHdhaXQgKHB0aHJlYWRfY29uZF90ICpfX3Jlc3RyaWN0IF9fY29uZCwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBwdGhyZWFkX211dGV4X3QgKl9fcmVzdHJpY3QgX19t dXRleCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHN0cnVjdCB0 aW1lc3BlYyAqX19yZXN0cmljdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9f YWJzdGltZSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IHB0aHJlYWRfY29uZGF0dHJfaW5pdCAo cHRocmVhZF9jb25kYXR0cl90ICpfX2F0dHIpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVh ZF9jb25kYXR0cl9kZXN0cm95IChwdGhyZWFkX2NvbmRhdHRyX3QgKl9fYXR0cikgdGhyb3cgKCk7 CgoKZXh0ZXJuIGludCBwdGhyZWFkX2NvbmRhdHRyX2dldHBzaGFyZWQgKF9fY29uc3QgcHRocmVh ZF9jb25kYXR0cl90ICoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9f cmVzdHJpY3QgX19hdHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg aW50ICpfX3Jlc3RyaWN0IF9fcHNoYXJlZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFk X2NvbmRhdHRyX3NldHBzaGFyZWQgKHB0aHJlYWRfY29uZGF0dHJfdCAqX19hdHRyLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fcHNoYXJlZCkgdGhyb3cgKCk7 CgoKCgoKCgpleHRlcm4gaW50IHB0aHJlYWRfcndsb2NrX2luaXQgKHB0aHJlYWRfcndsb2NrX3Qg Kl9fcmVzdHJpY3QgX19yd2xvY2ssCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19j b25zdCBwdGhyZWFkX3J3bG9ja2F0dHJfdCAqX19yZXN0cmljdAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIF9fYXR0cikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9j a19kZXN0cm95IChwdGhyZWFkX3J3bG9ja190ICpfX3J3bG9jaykgdGhyb3cgKCk7CgoKZXh0ZXJu IGludCBwdGhyZWFkX3J3bG9ja19yZGxvY2sgKHB0aHJlYWRfcndsb2NrX3QgKl9fcndsb2NrKSB0 aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfcndsb2NrX3RyeXJkbG9jayAocHRocmVhZF9y d2xvY2tfdCAqX19yd2xvY2spIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHB0aHJlYWRfcndsb2Nr X3RpbWVkcmRsb2NrIChwdGhyZWFkX3J3bG9ja190ICpfX3Jlc3RyaWN0IF9fcndsb2NrLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHN0cnVjdCB0aW1lc3Bl YyAqX19yZXN0cmljdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2Fi c3RpbWUpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHB0aHJlYWRfcndsb2NrX3dybG9jayAocHRo cmVhZF9yd2xvY2tfdCAqX19yd2xvY2spIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9y d2xvY2tfdHJ5d3Jsb2NrIChwdGhyZWFkX3J3bG9ja190ICpfX3J3bG9jaykgdGhyb3cgKCk7CgoK CmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2tfdGltZWR3cmxvY2sgKHB0aHJlYWRfcndsb2NrX3Qg Kl9fcmVzdHJpY3QgX19yd2xvY2ssCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIF9fY29uc3Qgc3RydWN0IHRpbWVzcGVjICpfX3Jlc3RyaWN0CiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIF9fYWJzdGltZSkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQg cHRocmVhZF9yd2xvY2tfdW5sb2NrIChwdGhyZWFkX3J3bG9ja190ICpfX3J3bG9jaykgdGhyb3cg KCk7CgoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja2F0dHJfaW5pdCAocHRocmVhZF9yd2xv Y2thdHRyX3QgKl9fYXR0cikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja2F0 dHJfZGVzdHJveSAocHRocmVhZF9yd2xvY2thdHRyX3QgKl9fYXR0cikgdGhyb3cgKCk7CgoKZXh0 ZXJuIGludCBwdGhyZWFkX3J3bG9ja2F0dHJfZ2V0cHNoYXJlZCAoX19jb25zdCBwdGhyZWFkX3J3 bG9ja2F0dHJfdCAqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9f cmVzdHJpY3QgX19hdHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBpbnQgKl9fcmVzdHJpY3QgX19wc2hhcmVkKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJl YWRfcndsb2NrYXR0cl9zZXRwc2hhcmVkIChwdGhyZWFkX3J3bG9ja2F0dHJfdCAqX19hdHRyLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19wc2hhcmVkKSB0 aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfcndsb2NrYXR0cl9nZXRraW5kX25wIChfX2Nv bnN0IHB0aHJlYWRfcndsb2NrYXR0cl90ICpfX2F0dHIsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGludCAqX19wcmVmKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0 aHJlYWRfcndsb2NrYXR0cl9zZXRraW5kX25wIChwdGhyZWFkX3J3bG9ja2F0dHJfdCAqX19hdHRy LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19wcmVmKSB0 aHJvdyAoKTsKIyA1MTggIi9ub3RuZnMvZmNoZS9CVUlMRC1nY2MtbXVkZmxhcC9JTlNUL2xpYi9n Y2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuNS10cmVlLXNzYS9pbmNsdWRlL3B0aHJlYWQuaCIg MyA0CmV4dGVybiBpbnQgcHRocmVhZF9zcGluX2luaXQgKHB0aHJlYWRfc3BpbmxvY2tfdCAqX19s b2NrLCBpbnQgX19wc2hhcmVkKQogICAgIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9z cGluX2Rlc3Ryb3kgKHB0aHJlYWRfc3BpbmxvY2tfdCAqX19sb2NrKSB0aHJvdyAoKTsKCgpleHRl cm4gaW50IHB0aHJlYWRfc3Bpbl9sb2NrIChwdGhyZWFkX3NwaW5sb2NrX3QgKl9fbG9jaykgdGhy b3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX3NwaW5fdHJ5bG9jayAocHRocmVhZF9zcGlubG9j a190ICpfX2xvY2spIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9zcGluX3VubG9jayAo cHRocmVhZF9zcGlubG9ja190ICpfX2xvY2spIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBwdGhy ZWFkX2JhcnJpZXJfaW5pdCAocHRocmVhZF9iYXJyaWVyX3QgKl9fcmVzdHJpY3QgX19iYXJyaWVy LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHB0aHJlYWRfYmFycmll cmF0dHJfdCAqX19yZXN0cmljdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2F0 dHIsIHVuc2lnbmVkIGludCBfX2NvdW50KSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgcHRocmVhZF9i YXJyaWVyX2Rlc3Ryb3kgKHB0aHJlYWRfYmFycmllcl90ICpfX2JhcnJpZXIpIHRocm93ICgpOwoK ZXh0ZXJuIGludCBwdGhyZWFkX2JhcnJpZXJhdHRyX2luaXQgKHB0aHJlYWRfYmFycmllcmF0dHJf dCAqX19hdHRyKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgcHRocmVhZF9iYXJyaWVyYXR0cl9kZXN0 cm95IChwdGhyZWFkX2JhcnJpZXJhdHRyX3QgKl9fYXR0cikgdGhyb3cgKCk7CgpleHRlcm4gaW50 IHB0aHJlYWRfYmFycmllcmF0dHJfZ2V0cHNoYXJlZCAoX19jb25zdCBwdGhyZWFkX2JhcnJpZXJh dHRyX3QgKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19yZXN0 cmljdCBfX2F0dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp bnQgKl9fcmVzdHJpY3QgX19wc2hhcmVkKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgcHRocmVhZF9i YXJyaWVyYXR0cl9zZXRwc2hhcmVkIChwdGhyZWFkX2JhcnJpZXJhdHRyX3QgKl9fYXR0ciwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX3BzaGFyZWQpIHRo cm93ICgpOwoKZXh0ZXJuIGludCBwdGhyZWFkX2JhcnJpZXJfd2FpdCAocHRocmVhZF9iYXJyaWVy X3QgKl9fYmFycmllcikgdGhyb3cgKCk7CiMgNTY1ICIvbm90bmZzL2ZjaGUvQlVJTEQtZ2NjLW11 ZGZsYXAvSU5TVC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjUtdHJlZS1zc2EvaW5j bHVkZS9wdGhyZWFkLmgiIDMgNApleHRlcm4gaW50IHB0aHJlYWRfa2V5X2NyZWF0ZSAocHRocmVh ZF9rZXlfdCAqX19rZXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICgqX19k ZXN0cl9mdW5jdGlvbikgKHZvaWQgKikpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9r ZXlfZGVsZXRlIChwdGhyZWFkX2tleV90IF9fa2V5KSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0 aHJlYWRfc2V0c3BlY2lmaWMgKHB0aHJlYWRfa2V5X3QgX19rZXksCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgX19jb25zdCB2b2lkICpfX3BvaW50ZXIpIHRocm93ICgpOwoKCmV4dGVy biB2b2lkICpwdGhyZWFkX2dldHNwZWNpZmljIChwdGhyZWFkX2tleV90IF9fa2V5KSB0aHJvdyAo KTsKIyA1ODUgIi9ub3RuZnMvZmNoZS9CVUlMRC1nY2MtbXVkZmxhcC9JTlNUL2xpYi9nY2MtbGli L2k2ODYtcGMtbGludXgtZ251LzMuNS10cmVlLXNzYS9pbmNsdWRlL3B0aHJlYWQuaCIgMyA0CmV4 dGVybiBpbnQgcHRocmVhZF9vbmNlIChwdGhyZWFkX29uY2VfdCAqX19vbmNlX2NvbnRyb2wsCiAg ICAgICAgICAgICAgICAgICAgICAgICB2b2lkICgqX19pbml0X3JvdXRpbmUpICh2b2lkKSkgdGhy b3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9zZXRjYW5jZWxzdGF0ZSAoaW50IF9fc3Rh dGUsIGludCAqX19vbGRzdGF0ZSkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgcHRocmVhZF9zZXRj YW5jZWx0eXBlIChpbnQgX190eXBlLCBpbnQgKl9fb2xkdHlwZSkgdGhyb3cgKCk7CgoKZXh0ZXJu IGludCBwdGhyZWFkX2NhbmNlbCAocHRocmVhZF90IF9fdGhyKSB0aHJvdyAoKTsKCgoKCmV4dGVy biB2b2lkIHB0aHJlYWRfdGVzdGNhbmNlbCAodm9pZCkgdGhyb3cgKCk7CiMgNjE5ICIvbm90bmZz L2ZjaGUvQlVJTEQtZ2NjLW11ZGZsYXAvSU5TVC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdu dS8zLjUtdHJlZS1zc2EvaW5jbHVkZS9wdGhyZWFkLmgiIDMgNApleHRlcm4gdm9pZCBfcHRocmVh ZF9jbGVhbnVwX3B1c2ggKHN0cnVjdCBfcHRocmVhZF9jbGVhbnVwX2J1ZmZlciAqX19idWZmZXIs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAoKl9fcm91dGluZSkgKHZv aWQgKiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqX19hcmcpIHRo cm93ICgpOwoKCgoKCgoKZXh0ZXJuIHZvaWQgX3B0aHJlYWRfY2xlYW51cF9wb3AgKHN0cnVjdCBf cHRocmVhZF9jbGVhbnVwX2J1ZmZlciAqX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBpbnQgX19leGVjdXRlKSB0aHJvdyAoKTsKIyA2NDAgIi9ub3RuZnMvZmNoZS9C VUlMRC1nY2MtbXVkZmxhcC9JTlNUL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuNS10 cmVlLXNzYS9pbmNsdWRlL3B0aHJlYWQuaCIgMyA0CmV4dGVybiB2b2lkIF9wdGhyZWFkX2NsZWFu dXBfcHVzaF9kZWZlciAoc3RydWN0IF9wdGhyZWFkX2NsZWFudXBfYnVmZmVyICpfX2J1ZmZlciwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICgqX19yb3V0aW5l KSAodm9pZCAqKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lk ICpfX2FyZykgdGhyb3cgKCk7CiMgNjUxICIvbm90bmZzL2ZjaGUvQlVJTEQtZ2NjLW11ZGZsYXAv SU5TVC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjUtdHJlZS1zc2EvaW5jbHVkZS9w dGhyZWFkLmgiIDMgNApleHRlcm4gdm9pZCBfcHRocmVhZF9jbGVhbnVwX3BvcF9yZXN0b3JlIChz dHJ1Y3QgX3B0aHJlYWRfY2xlYW51cF9idWZmZXIgKl9fYnVmZmVyLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19leGVjdXRlKSB0aHJvdyAoKTsKCgoKCgpl eHRlcm4gaW50IHB0aHJlYWRfZ2V0Y3B1Y2xvY2tpZCAocHRocmVhZF90IF9fdGhyZWFkX2lkLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xvY2tpZF90ICpfX2Nsb2NrX2lkKSB0 aHJvdyAoKTsKCgoKCiMgMSAiL25vdG5mcy9mY2hlL0JVSUxELWdjYy1tdWRmbGFwL0lOU1QvbGli L2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy41LXRyZWUtc3NhL2luY2x1ZGUvYml0cy9zaWd0 aHJlYWQuaCIgMSAzIDQKIyA0MCAiL25vdG5mcy9mY2hlL0JVSUxELWdjYy1tdWRmbGFwL0lOU1Qv bGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy41LXRyZWUtc3NhL2luY2x1ZGUvYml0cy9z aWd0aHJlYWQuaCIgMyA0CmV4dGVybiBpbnQgcHRocmVhZF9zaWdtYXNrIChpbnQgX19ob3csCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IF9fc2lnc2V0X3QgKl9fcmVzdHJpY3Qg X19uZXdtYXNrLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zaWdzZXRfdCAqX19yZXN0 cmljdCBfX29sZG1hc2spdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2tpbGwgKHB0aHJl YWRfdCBfX3RociwgaW50IF9fc2lnbm8pIHRocm93ICgpOwojIDY2NSAiL25vdG5mcy9mY2hlL0JV SUxELWdjYy1tdWRmbGFwL0lOU1QvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy41LXRy ZWUtc3NhL2luY2x1ZGUvcHRocmVhZC5oIiAyIDMgNAojIDY4MCAiL25vdG5mcy9mY2hlL0JVSUxE LWdjYy1tdWRmbGFwL0lOU1QvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy41LXRyZWUt c3NhL2luY2x1ZGUvcHRocmVhZC5oIiAzIDQKZXh0ZXJuIGludCBwdGhyZWFkX2F0Zm9yayAodm9p ZCAoKl9fcHJlcGFyZSkgKHZvaWQpLAogICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICgq X19wYXJlbnQpICh2b2lkKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAoKl9fY2hp bGQpICh2b2lkKSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gdm9pZCBwdGhyZWFkX2tpbGxfb3RoZXJf dGhyZWFkc19ucCAodm9pZCkgdGhyb3cgKCk7Cgp9CiMgMzggIi9ub3RuZnMvZmNoZS9CVUlMRC1n Y2MtbXVkZmxhcC9JTlNUL2luY2x1ZGUvYysrLzMuNS10cmVlLXNzYS9pNjg2LXBjLWxpbnV4LWdu dS9iaXRzL2d0aHItZGVmYXVsdC5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDEg MyA0CiMgMjggIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMyA0CmV4dGVybiAiQyIgewojIDE3NSAi L3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAzIDQKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9wb3NpeF9v cHQuaCIgMSAzIDQKIyAxNzYgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMiAzIDQKCgoKIyAxICIv dXNyL2luY2x1ZGUvYml0cy9lbnZpcm9ubWVudHMuaCIgMSAzIDQKIyAyMyAiL3Vzci9pbmNsdWRl L2JpdHMvZW52aXJvbm1lbnRzLmgiIDMgNAojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3dvcmRzaXpl LmgiIDEgMyA0CiMgMjQgIi91c3IvaW5jbHVkZS9iaXRzL2Vudmlyb25tZW50cy5oIiAyIDMgNAoj IDE4MCAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAyIDMgNAojIDE5OSAiL3Vzci9pbmNsdWRlL3Vu aXN0ZC5oIiAzIDQKIyAxICIvbm90bmZzL2ZjaGUvQlVJTEQtZ2NjLW11ZGZsYXAvSU5TVC9saWIv Z2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjUtdHJlZS1zc2EvaW5jbHVkZS9zdGRkZWYuaCIg MSAzIDQKIyAyMDAgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMiAzIDQKIyAyNDAgIi91c3IvaW5j bHVkZS91bmlzdGQuaCIgMyA0CnR5cGVkZWYgX19pbnRwdHJfdCBpbnRwdHJfdDsKCgoKCgoKdHlw ZWRlZiBfX3NvY2tsZW5fdCBzb2NrbGVuX3Q7CiMgMjYwICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgi IDMgNApleHRlcm4gaW50IGFjY2VzcyAoX19jb25zdCBjaGFyICpfX25hbWUsIGludCBfX3R5cGUp IHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBldWlkYWNjZXNzIChfX2NvbnN0IGNoYXIgKl9fbmFt ZSwgaW50IF9fdHlwZSkgdGhyb3cgKCk7CiMgMjkwICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMg NApleHRlcm4gX19vZmZfdCBsc2VlayAoaW50IF9fZmQsIF9fb2ZmX3QgX19vZmZzZXQsIGludCBf X3doZW5jZSkgdGhyb3cgKCk7CiMgMzAyICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMgNApleHRl cm4gX19vZmY2NF90IGxzZWVrNjQgKGludCBfX2ZkLCBfX29mZjY0X3QgX19vZmZzZXQsIGludCBf X3doZW5jZSkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgY2xvc2UgKGludCBfX2ZkKSB0aHJvdyAo KTsKCgoKZXh0ZXJuIHNzaXplX3QgcmVhZCAoaW50IF9fZmQsIHZvaWQgKl9fYnVmLCBzaXplX3Qg X19uYnl0ZXMpIHRocm93ICgpOwoKCmV4dGVybiBzc2l6ZV90IHdyaXRlIChpbnQgX19mZCwgX19j b25zdCB2b2lkICpfX2J1Ziwgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCmV4dGVybiBzc2l6ZV90 IHByZWFkIChpbnQgX19mZCwgdm9pZCAqX19idWYsIHNpemVfdCBfX25ieXRlcywgX19vZmZfdCBf X29mZnNldCkKICAgICB0aHJvdyAoKTsKZXh0ZXJuIHNzaXplX3QgcHdyaXRlIChpbnQgX19mZCwg X19jb25zdCB2b2lkICpfX2J1Ziwgc2l6ZV90IF9fbiwKICAgICAgICAgICAgICAgICAgICAgICBf X29mZl90IF9fb2Zmc2V0KSB0aHJvdyAoKTsKIyAzNDAgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIg MyA0CmV4dGVybiBzc2l6ZV90IHByZWFkNjQgKGludCBfX2ZkLCB2b2lkICpfX2J1Ziwgc2l6ZV90 IF9fbmJ5dGVzLAogICAgICAgICAgICAgICAgICAgICAgICBfX29mZjY0X3QgX19vZmZzZXQpIHRo cm93ICgpOwoKCmV4dGVybiBzc2l6ZV90IHB3cml0ZTY0IChpbnQgX19mZCwgX19jb25zdCB2b2lk ICpfX2J1Ziwgc2l6ZV90IF9fbiwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fb2ZmNjRfdCBf X29mZnNldCkgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gaW50IHBpcGUgKGludCBfX3BpcGVkZXNb Ml0pIHRocm93ICgpOwojIDM2MiAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAzIDQKZXh0ZXJuIHVu c2lnbmVkIGludCBhbGFybSAodW5zaWduZWQgaW50IF9fc2Vjb25kcykgdGhyb3cgKCk7CiMgMzcx ICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMgNApleHRlcm4gdW5zaWduZWQgaW50IHNsZWVwICh1 bnNpZ25lZCBpbnQgX19zZWNvbmRzKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIF9fdXNlY29uZHNf dCB1YWxhcm0gKF9fdXNlY29uZHNfdCBfX3ZhbHVlLCBfX3VzZWNvbmRzX3QgX19pbnRlcnZhbCkK ICAgICB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCB1c2xlZXAgKF9fdXNlY29uZHNfdCBfX3VzZWNv bmRzKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IHBhdXNlICh2b2lkKSB0aHJvdyAoKTsKCgoK ZXh0ZXJuIGludCBjaG93biAoX19jb25zdCBjaGFyICpfX2ZpbGUsIF9fdWlkX3QgX19vd25lciwg X19naWRfdCBfX2dyb3VwKQogICAgIHRocm93ICgpOwoKCgpleHRlcm4gaW50IGZjaG93biAoaW50 IF9fZmQsIF9fdWlkX3QgX19vd25lciwgX19naWRfdCBfX2dyb3VwKSB0aHJvdyAoKTsKCgoKCmV4 dGVybiBpbnQgbGNob3duIChfX2NvbnN0IGNoYXIgKl9fZmlsZSwgX191aWRfdCBfX293bmVyLCBf X2dpZF90IF9fZ3JvdXApCiAgICAgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGNoZGlyIChfX2Nv bnN0IGNoYXIgKl9fcGF0aCkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgZmNoZGlyIChpbnQgX19m ZCkgdGhyb3cgKCk7CiMgNDIzICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMgNApleHRlcm4gY2hh ciAqZ2V0Y3dkIChjaGFyICpfX2J1Ziwgc2l6ZV90IF9fc2l6ZSkgdGhyb3cgKCk7CgoKCgoKZXh0 ZXJuIGNoYXIgKmdldF9jdXJyZW50X2Rpcl9uYW1lICh2b2lkKSB0aHJvdyAoKTsKCgoKCgoKZXh0 ZXJuIGNoYXIgKmdldHdkIChjaGFyICpfX2J1ZikgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGR1 cCAoaW50IF9fZmQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgZHVwMiAoaW50IF9fZmQsIGludCBf X2ZkMikgdGhyb3cgKCk7CgoKZXh0ZXJuIGNoYXIgKipfX2Vudmlyb247CgpleHRlcm4gY2hhciAq KmVudmlyb247CgoKCgoKZXh0ZXJuIGludCBleGVjdmUgKF9fY29uc3QgY2hhciAqX19wYXRoLCBj aGFyICpfX2NvbnN0IF9fYXJndltdLAogICAgICAgICAgICAgICAgICAgY2hhciAqX19jb25zdCBf X2VudnBbXSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGZleGVjdmUgKGludCBfX2ZkLCBjaGFy ICpfX2NvbnN0IF9fYXJndltdLCBjaGFyICpfX2NvbnN0IF9fZW52cFtdKQogICAgIHRocm93ICgp OwoKCgoKZXh0ZXJuIGludCBleGVjdiAoX19jb25zdCBjaGFyICpfX3BhdGgsIGNoYXIgKl9fY29u c3QgX19hcmd2W10pIHRocm93ICgpOwoKCgpleHRlcm4gaW50IGV4ZWNsZSAoX19jb25zdCBjaGFy ICpfX3BhdGgsIF9fY29uc3QgY2hhciAqX19hcmcsIC4uLikgdGhyb3cgKCk7CgoKCmV4dGVybiBp bnQgZXhlY2wgKF9fY29uc3QgY2hhciAqX19wYXRoLCBfX2NvbnN0IGNoYXIgKl9fYXJnLCAuLi4p IHRocm93ICgpOwoKCgpleHRlcm4gaW50IGV4ZWN2cCAoX19jb25zdCBjaGFyICpfX2ZpbGUsIGNo YXIgKl9fY29uc3QgX19hcmd2W10pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBleGVjbHAgKF9f Y29uc3QgY2hhciAqX19maWxlLCBfX2NvbnN0IGNoYXIgKl9fYXJnLCAuLi4pIHRocm93ICgpOwoK CgoKZXh0ZXJuIGludCBuaWNlIChpbnQgX19pbmMpIHRocm93ICgpOwoKCgoKZXh0ZXJuIHZvaWQg X2V4aXQgKGludCBfX3N0YXR1cykgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKCgoK CiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvY29uZm5hbWUuaCIgMSAzIDQKIyAyNSAiL3Vzci9pbmNs dWRlL2JpdHMvY29uZm5hbWUuaCIgMyA0CmVudW0KICB7CiAgICBfUENfTElOS19NQVgsCgogICAg X1BDX01BWF9DQU5PTiwKCiAgICBfUENfTUFYX0lOUFVULAoKICAgIF9QQ19OQU1FX01BWCwKCiAg ICBfUENfUEFUSF9NQVgsCgogICAgX1BDX1BJUEVfQlVGLAoKICAgIF9QQ19DSE9XTl9SRVNUUklD VEVELAoKICAgIF9QQ19OT19UUlVOQywKCiAgICBfUENfVkRJU0FCTEUsCgogICAgX1BDX1NZTkNf SU8sCgogICAgX1BDX0FTWU5DX0lPLAoKICAgIF9QQ19QUklPX0lPLAoKICAgIF9QQ19TT0NLX01B WEJVRiwKCiAgICBfUENfRklMRVNJWkVCSVRTLAoKICAgIF9QQ19SRUNfSU5DUl9YRkVSX1NJWkUs CgogICAgX1BDX1JFQ19NQVhfWEZFUl9TSVpFLAoKICAgIF9QQ19SRUNfTUlOX1hGRVJfU0laRSwK CiAgICBfUENfUkVDX1hGRVJfQUxJR04sCgogICAgX1BDX0FMTE9DX1NJWkVfTUlOLAoKICAgIF9Q Q19TWU1MSU5LX01BWAoKICB9OwoKCmVudW0KICB7CiAgICBfU0NfQVJHX01BWCwKCiAgICBfU0Nf Q0hJTERfTUFYLAoKICAgIF9TQ19DTEtfVENLLAoKICAgIF9TQ19OR1JPVVBTX01BWCwKCiAgICBf U0NfT1BFTl9NQVgsCgogICAgX1NDX1NUUkVBTV9NQVgsCgogICAgX1NDX1RaTkFNRV9NQVgsCgog ICAgX1NDX0pPQl9DT05UUk9MLAoKICAgIF9TQ19TQVZFRF9JRFMsCgogICAgX1NDX1JFQUxUSU1F X1NJR05BTFMsCgogICAgX1NDX1BSSU9SSVRZX1NDSEVEVUxJTkcsCgogICAgX1NDX1RJTUVSUywK CiAgICBfU0NfQVNZTkNIUk9OT1VTX0lPLAoKICAgIF9TQ19QUklPUklUSVpFRF9JTywKCiAgICBf U0NfU1lOQ0hST05JWkVEX0lPLAoKICAgIF9TQ19GU1lOQywKCiAgICBfU0NfTUFQUEVEX0ZJTEVT LAoKICAgIF9TQ19NRU1MT0NLLAoKICAgIF9TQ19NRU1MT0NLX1JBTkdFLAoKICAgIF9TQ19NRU1P UllfUFJPVEVDVElPTiwKCiAgICBfU0NfTUVTU0FHRV9QQVNTSU5HLAoKICAgIF9TQ19TRU1BUEhP UkVTLAoKICAgIF9TQ19TSEFSRURfTUVNT1JZX09CSkVDVFMsCgogICAgX1NDX0FJT19MSVNUSU9f TUFYLAoKICAgIF9TQ19BSU9fTUFYLAoKICAgIF9TQ19BSU9fUFJJT19ERUxUQV9NQVgsCgogICAg X1NDX0RFTEFZVElNRVJfTUFYLAoKICAgIF9TQ19NUV9PUEVOX01BWCwKCiAgICBfU0NfTVFfUFJJ T19NQVgsCgogICAgX1NDX1ZFUlNJT04sCgogICAgX1NDX1BBR0VTSVpFLAoKCiAgICBfU0NfUlRT SUdfTUFYLAoKICAgIF9TQ19TRU1fTlNFTVNfTUFYLAoKICAgIF9TQ19TRU1fVkFMVUVfTUFYLAoK ICAgIF9TQ19TSUdRVUVVRV9NQVgsCgogICAgX1NDX1RJTUVSX01BWCwKCgoKCiAgICBfU0NfQkNf QkFTRV9NQVgsCgogICAgX1NDX0JDX0RJTV9NQVgsCgogICAgX1NDX0JDX1NDQUxFX01BWCwKCiAg ICBfU0NfQkNfU1RSSU5HX01BWCwKCiAgICBfU0NfQ09MTF9XRUlHSFRTX01BWCwKCiAgICBfU0Nf RVFVSVZfQ0xBU1NfTUFYLAoKICAgIF9TQ19FWFBSX05FU1RfTUFYLAoKICAgIF9TQ19MSU5FX01B WCwKCiAgICBfU0NfUkVfRFVQX01BWCwKCiAgICBfU0NfQ0hBUkNMQVNTX05BTUVfTUFYLAoKCiAg ICBfU0NfMl9WRVJTSU9OLAoKICAgIF9TQ18yX0NfQklORCwKCiAgICBfU0NfMl9DX0RFViwKCiAg ICBfU0NfMl9GT1JUX0RFViwKCiAgICBfU0NfMl9GT1JUX1JVTiwKCiAgICBfU0NfMl9TV19ERVYs CgogICAgX1NDXzJfTE9DQUxFREVGLAoKCiAgICBfU0NfUElJLAoKICAgIF9TQ19QSUlfWFRJLAoK ICAgIF9TQ19QSUlfU09DS0VULAoKICAgIF9TQ19QSUlfSU5URVJORVQsCgogICAgX1NDX1BJSV9P U0ksCgogICAgX1NDX1BPTEwsCgogICAgX1NDX1NFTEVDVCwKCiAgICBfU0NfVUlPX01BWElPViwK CiAgICBfU0NfSU9WX01BWCA9IF9TQ19VSU9fTUFYSU9WLAoKICAgIF9TQ19QSUlfSU5URVJORVRf U1RSRUFNLAoKICAgIF9TQ19QSUlfSU5URVJORVRfREdSQU0sCgogICAgX1NDX1BJSV9PU0lfQ09U UywKCiAgICBfU0NfUElJX09TSV9DTFRTLAoKICAgIF9TQ19QSUlfT1NJX00sCgogICAgX1NDX1Rf SU9WX01BWCwKCgoKICAgIF9TQ19USFJFQURTLAoKICAgIF9TQ19USFJFQURfU0FGRV9GVU5DVElP TlMsCgogICAgX1NDX0dFVEdSX1JfU0laRV9NQVgsCgogICAgX1NDX0dFVFBXX1JfU0laRV9NQVgs CgogICAgX1NDX0xPR0lOX05BTUVfTUFYLAoKICAgIF9TQ19UVFlfTkFNRV9NQVgsCgogICAgX1ND X1RIUkVBRF9ERVNUUlVDVE9SX0lURVJBVElPTlMsCgogICAgX1NDX1RIUkVBRF9LRVlTX01BWCwK CiAgICBfU0NfVEhSRUFEX1NUQUNLX01JTiwKCiAgICBfU0NfVEhSRUFEX1RIUkVBRFNfTUFYLAoK ICAgIF9TQ19USFJFQURfQVRUUl9TVEFDS0FERFIsCgogICAgX1NDX1RIUkVBRF9BVFRSX1NUQUNL U0laRSwKCiAgICBfU0NfVEhSRUFEX1BSSU9SSVRZX1NDSEVEVUxJTkcsCgogICAgX1NDX1RIUkVB RF9QUklPX0lOSEVSSVQsCgogICAgX1NDX1RIUkVBRF9QUklPX1BST1RFQ1QsCgogICAgX1NDX1RI UkVBRF9QUk9DRVNTX1NIQVJFRCwKCgogICAgX1NDX05QUk9DRVNTT1JTX0NPTkYsCgogICAgX1ND X05QUk9DRVNTT1JTX09OTE4sCgogICAgX1NDX1BIWVNfUEFHRVMsCgogICAgX1NDX0FWUEhZU19Q QUdFUywKCiAgICBfU0NfQVRFWElUX01BWCwKCiAgICBfU0NfUEFTU19NQVgsCgoKICAgIF9TQ19Y T1BFTl9WRVJTSU9OLAoKICAgIF9TQ19YT1BFTl9YQ1VfVkVSU0lPTiwKCiAgICBfU0NfWE9QRU5f VU5JWCwKCiAgICBfU0NfWE9QRU5fQ1JZUFQsCgogICAgX1NDX1hPUEVOX0VOSF9JMThOLAoKICAg IF9TQ19YT1BFTl9TSE0sCgoKICAgIF9TQ18yX0NIQVJfVEVSTSwKCiAgICBfU0NfMl9DX1ZFUlNJ T04sCgogICAgX1NDXzJfVVBFLAoKCiAgICBfU0NfWE9QRU5fWFBHMiwKCiAgICBfU0NfWE9QRU5f WFBHMywKCiAgICBfU0NfWE9QRU5fWFBHNCwKCgogICAgX1NDX0NIQVJfQklULAoKICAgIF9TQ19D SEFSX01BWCwKCiAgICBfU0NfQ0hBUl9NSU4sCgogICAgX1NDX0lOVF9NQVgsCgogICAgX1NDX0lO VF9NSU4sCgogICAgX1NDX0xPTkdfQklULAoKICAgIF9TQ19XT1JEX0JJVCwKCiAgICBfU0NfTUJf TEVOX01BWCwKCiAgICBfU0NfTlpFUk8sCgogICAgX1NDX1NTSVpFX01BWCwKCiAgICBfU0NfU0NI QVJfTUFYLAoKICAgIF9TQ19TQ0hBUl9NSU4sCgogICAgX1NDX1NIUlRfTUFYLAoKICAgIF9TQ19T SFJUX01JTiwKCiAgICBfU0NfVUNIQVJfTUFYLAoKICAgIF9TQ19VSU5UX01BWCwKCiAgICBfU0Nf VUxPTkdfTUFYLAoKICAgIF9TQ19VU0hSVF9NQVgsCgoKICAgIF9TQ19OTF9BUkdNQVgsCgogICAg X1NDX05MX0xBTkdNQVgsCgogICAgX1NDX05MX01TR01BWCwKCiAgICBfU0NfTkxfTk1BWCwKCiAg ICBfU0NfTkxfU0VUTUFYLAoKICAgIF9TQ19OTF9URVhUTUFYLAoKCiAgICBfU0NfWEJTNV9JTFAz Ml9PRkYzMiwKCiAgICBfU0NfWEJTNV9JTFAzMl9PRkZCSUcsCgogICAgX1NDX1hCUzVfTFA2NF9P RkY2NCwKCiAgICBfU0NfWEJTNV9MUEJJR19PRkZCSUcsCgoKICAgIF9TQ19YT1BFTl9MRUdBQ1ks CgogICAgX1NDX1hPUEVOX1JFQUxUSU1FLAoKICAgIF9TQ19YT1BFTl9SRUFMVElNRV9USFJFQURT LAoKCiAgICBfU0NfQURWSVNPUllfSU5GTywKCiAgICBfU0NfQkFSUklFUlMsCgogICAgX1NDX0JB U0UsCgogICAgX1NDX0NfTEFOR19TVVBQT1JULAoKICAgIF9TQ19DX0xBTkdfU1VQUE9SVF9SLAoK ICAgIF9TQ19DTE9DS19TRUxFQ1RJT04sCgogICAgX1NDX0NQVVRJTUUsCgogICAgX1NDX1RIUkVB RF9DUFVUSU1FLAoKICAgIF9TQ19ERVZJQ0VfSU8sCgogICAgX1NDX0RFVklDRV9TUEVDSUZJQywK CiAgICBfU0NfREVWSUNFX1NQRUNJRklDX1IsCgogICAgX1NDX0ZEX01HTVQsCgogICAgX1NDX0ZJ Rk8sCgogICAgX1NDX1BJUEUsCgogICAgX1NDX0ZJTEVfQVRUUklCVVRFUywKCiAgICBfU0NfRklM RV9MT0NLSU5HLAoKICAgIF9TQ19GSUxFX1NZU1RFTSwKCiAgICBfU0NfTU9OT1RPTklDX0NMT0NL LAoKICAgIF9TQ19NVUxUSV9QUk9DRVNTLAoKICAgIF9TQ19TSU5HTEVfUFJPQ0VTUywKCiAgICBf U0NfTkVUV09SS0lORywKCiAgICBfU0NfUkVBREVSX1dSSVRFUl9MT0NLUywKCiAgICBfU0NfU1BJ Tl9MT0NLUywKCiAgICBfU0NfUkVHRVhQLAoKICAgIF9TQ19SRUdFWF9WRVJTSU9OLAoKICAgIF9T Q19TSEVMTCwKCiAgICBfU0NfU0lHTkFMUywKCiAgICBfU0NfU1BBV04sCgogICAgX1NDX1NQT1JB RElDX1NFUlZFUiwKCiAgICBfU0NfVEhSRUFEX1NQT1JBRElDX1NFUlZFUiwKCiAgICBfU0NfU1lT VEVNX0RBVEFCQVNFLAoKICAgIF9TQ19TWVNURU1fREFUQUJBU0VfUiwKCiAgICBfU0NfVElNRU9V VFMsCgogICAgX1NDX1RZUEVEX01FTU9SWV9PQkpFQ1RTLAoKICAgIF9TQ19VU0VSX0dST1VQUywK CiAgICBfU0NfVVNFUl9HUk9VUFNfUiwKCiAgICBfU0NfMl9QQlMsCgogICAgX1NDXzJfUEJTX0FD Q09VTlRJTkcsCgogICAgX1NDXzJfUEJTX0xPQ0FURSwKCiAgICBfU0NfMl9QQlNfTUVTU0FHRSwK CiAgICBfU0NfMl9QQlNfVFJBQ0ssCgogICAgX1NDX1NZTUxPT1BfTUFYLAoKICAgIF9TQ19TVFJF QU1TLAoKICAgIF9TQ18yX1BCU19DSEVDS1BPSU5ULAoKCiAgICBfU0NfVjZfSUxQMzJfT0ZGMzIs CgogICAgX1NDX1Y2X0lMUDMyX09GRkJJRywKCiAgICBfU0NfVjZfTFA2NF9PRkY2NCwKCiAgICBf U0NfVjZfTFBCSUdfT0ZGQklHLAoKCiAgICBfU0NfSE9TVF9OQU1FX01BWCwKCiAgICBfU0NfVFJB Q0UsCgogICAgX1NDX1RSQUNFX0VWRU5UX0ZJTFRFUiwKCiAgICBfU0NfVFJBQ0VfSU5IRVJJVCwK CiAgICBfU0NfVFJBQ0VfTE9HCgogIH07CgoKCgoKZW51bQogIHsKICAgIF9DU19QQVRILAoKCgoK ICAgIF9DU19MRlNfQ0ZMQUdTID0gMTAwMCwKCiAgICBfQ1NfTEZTX0xERkxBR1MsCgogICAgX0NT X0xGU19MSUJTLAoKICAgIF9DU19MRlNfTElOVEZMQUdTLAoKICAgIF9DU19MRlM2NF9DRkxBR1Ms CgogICAgX0NTX0xGUzY0X0xERkxBR1MsCgogICAgX0NTX0xGUzY0X0xJQlMsCgogICAgX0NTX0xG UzY0X0xJTlRGTEFHUywKCgoKCiAgICBfQ1NfWEJTNV9JTFAzMl9PRkYzMl9DRkxBR1MgPSAxMTAw LAoKICAgIF9DU19YQlM1X0lMUDMyX09GRjMyX0xERkxBR1MsCgogICAgX0NTX1hCUzVfSUxQMzJf T0ZGMzJfTElCUywKCiAgICBfQ1NfWEJTNV9JTFAzMl9PRkYzMl9MSU5URkxBR1MsCgogICAgX0NT X1hCUzVfSUxQMzJfT0ZGQklHX0NGTEFHUywKCiAgICBfQ1NfWEJTNV9JTFAzMl9PRkZCSUdfTERG TEFHUywKCiAgICBfQ1NfWEJTNV9JTFAzMl9PRkZCSUdfTElCUywKCiAgICBfQ1NfWEJTNV9JTFAz Ml9PRkZCSUdfTElOVEZMQUdTLAoKICAgIF9DU19YQlM1X0xQNjRfT0ZGNjRfQ0ZMQUdTLAoKICAg IF9DU19YQlM1X0xQNjRfT0ZGNjRfTERGTEFHUywKCiAgICBfQ1NfWEJTNV9MUDY0X09GRjY0X0xJ QlMsCgogICAgX0NTX1hCUzVfTFA2NF9PRkY2NF9MSU5URkxBR1MsCgogICAgX0NTX1hCUzVfTFBC SUdfT0ZGQklHX0NGTEFHUywKCiAgICBfQ1NfWEJTNV9MUEJJR19PRkZCSUdfTERGTEFHUywKCiAg ICBfQ1NfWEJTNV9MUEJJR19PRkZCSUdfTElCUywKCiAgICBfQ1NfWEJTNV9MUEJJR19PRkZCSUdf TElOVEZMQUdTLAoKCgogICAgX0NTX1BPU0lYX1Y2X0lMUDMyX09GRjMyX0NGTEFHUywKCiAgICBf Q1NfUE9TSVhfVjZfSUxQMzJfT0ZGMzJfTERGTEFHUywKCiAgICBfQ1NfUE9TSVhfVjZfSUxQMzJf T0ZGMzJfTElCUywKCiAgICBfQ1NfUE9TSVhfVjZfSUxQMzJfT0ZGMzJfTElOVEZMQUdTLAoKICAg IF9DU19QT1NJWF9WNl9JTFAzMl9PRkZCSUdfQ0ZMQUdTLAoKICAgIF9DU19QT1NJWF9WNl9JTFAz Ml9PRkZCSUdfTERGTEFHUywKCiAgICBfQ1NfUE9TSVhfVjZfSUxQMzJfT0ZGQklHX0xJQlMsCgog ICAgX0NTX1BPU0lYX1Y2X0lMUDMyX09GRkJJR19MSU5URkxBR1MsCgogICAgX0NTX1BPU0lYX1Y2 X0xQNjRfT0ZGNjRfQ0ZMQUdTLAoKICAgIF9DU19QT1NJWF9WNl9MUDY0X09GRjY0X0xERkxBR1Ms CgogICAgX0NTX1BPU0lYX1Y2X0xQNjRfT0ZGNjRfTElCUywKCiAgICBfQ1NfUE9TSVhfVjZfTFA2 NF9PRkY2NF9MSU5URkxBR1MsCgogICAgX0NTX1BPU0lYX1Y2X0xQQklHX09GRkJJR19DRkxBR1Ms CgogICAgX0NTX1BPU0lYX1Y2X0xQQklHX09GRkJJR19MREZMQUdTLAoKICAgIF9DU19QT1NJWF9W Nl9MUEJJR19PRkZCSUdfTElCUywKCiAgICBfQ1NfUE9TSVhfVjZfTFBCSUdfT0ZGQklHX0xJTlRG TEFHUywKCgoKICAgIF9DU19WNl9XSURUSF9SRVNUUklDVEVEX0VOVlMKCiAgfTsKIyA1MDEgIi91 c3IvaW5jbHVkZS91bmlzdGQuaCIgMiAzIDQKCgpleHRlcm4gbG9uZyBpbnQgcGF0aGNvbmYgKF9f Y29uc3QgY2hhciAqX19wYXRoLCBpbnQgX19uYW1lKSB0aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBp bnQgZnBhdGhjb25mIChpbnQgX19mZCwgaW50IF9fbmFtZSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGxv bmcgaW50IHN5c2NvbmYgKGludCBfX25hbWUpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2Nv bnN0X18pKTsKCgoKZXh0ZXJuIHNpemVfdCBjb25mc3RyIChpbnQgX19uYW1lLCBjaGFyICpfX2J1 Ziwgc2l6ZV90IF9fbGVuKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBfX3BpZF90IGdldHBpZCAodm9p ZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIF9fcGlkX3QgZ2V0cHBpZCAodm9pZCkgdGhyb3cgKCk7CgoK CgpleHRlcm4gX19waWRfdCBnZXRwZ3JwICh2b2lkKSB0aHJvdyAoKTsKIyA1MzYgIi91c3IvaW5j bHVkZS91bmlzdGQuaCIgMyA0CmV4dGVybiBfX3BpZF90IF9fZ2V0cGdpZCAoX19waWRfdCBfX3Bp ZCkgdGhyb3cgKCk7CgpleHRlcm4gX19waWRfdCBnZXRwZ2lkIChfX3BpZF90IF9fcGlkKSB0aHJv dyAoKTsKCgoKCgoKZXh0ZXJuIGludCBzZXRwZ2lkIChfX3BpZF90IF9fcGlkLCBfX3BpZF90IF9f cGdpZCkgdGhyb3cgKCk7CiMgNTYyICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMgNApleHRlcm4g aW50IHNldHBncnAgKHZvaWQpIHRocm93ICgpOwojIDU4MCAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5o IiAzIDQKZXh0ZXJuIF9fcGlkX3Qgc2V0c2lkICh2b2lkKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIF9f cGlkX3QgZ2V0c2lkIChfX3BpZF90IF9fcGlkKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIF9fdWlkX3Qg Z2V0dWlkICh2b2lkKSB0aHJvdyAoKTsKCgpleHRlcm4gX191aWRfdCBnZXRldWlkICh2b2lkKSB0 aHJvdyAoKTsKCgpleHRlcm4gX19naWRfdCBnZXRnaWQgKHZvaWQpIHRocm93ICgpOwoKCmV4dGVy biBfX2dpZF90IGdldGVnaWQgKHZvaWQpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBnZXRncm91 cHMgKGludCBfX3NpemUsIF9fZ2lkX3QgX19saXN0W10pIHRocm93ICgpOwoKCgpleHRlcm4gaW50 IGdyb3VwX21lbWJlciAoX19naWRfdCBfX2dpZCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQg c2V0dWlkIChfX3VpZF90IF9fdWlkKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgc2V0cmV1aWQg KF9fdWlkX3QgX19ydWlkLCBfX3VpZF90IF9fZXVpZCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50 IHNldGV1aWQgKF9fdWlkX3QgX191aWQpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50IHNldGdp ZCAoX19naWRfdCBfX2dpZCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IHNldHJlZ2lkIChfX2dp ZF90IF9fcmdpZCwgX19naWRfdCBfX2VnaWQpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBzZXRl Z2lkIChfX2dpZF90IF9fZ2lkKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIF9fcGlkX3QgZm9yayAo dm9pZCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBfX3BpZF90IHZmb3JrICh2b2lkKSB0aHJvdyAo KTsKCgoKCgpleHRlcm4gY2hhciAqdHR5bmFtZSAoaW50IF9fZmQpIHRocm93ICgpOwoKCgpleHRl cm4gaW50IHR0eW5hbWVfciAoaW50IF9fZmQsIGNoYXIgKl9fYnVmLCBzaXplX3QgX19idWZsZW4p IHRocm93ICgpOwoKCgpleHRlcm4gaW50IGlzYXR0eSAoaW50IF9fZmQpIHRocm93ICgpOwoKCgoK CmV4dGVybiBpbnQgdHR5c2xvdCAodm9pZCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGxpbmsg KF9fY29uc3QgY2hhciAqX19mcm9tLCBfX2NvbnN0IGNoYXIgKl9fdG8pIHRocm93ICgpOwoKCgpl eHRlcm4gaW50IHN5bWxpbmsgKF9fY29uc3QgY2hhciAqX19mcm9tLCBfX2NvbnN0IGNoYXIgKl9f dG8pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCByZWFkbGluayAoX19jb25zdCBjaGFyICpfX3Jl c3RyaWN0IF9fcGF0aCwgY2hhciAqX19yZXN0cmljdCBfX2J1ZiwKICAgICAgICAgICAgICAgICAg ICAgc2l6ZV90IF9fbGVuKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCB1bmxpbmsgKF9fY29uc3Qg Y2hhciAqX19uYW1lKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHJtZGlyIChfX2NvbnN0IGNoYXIg Kl9fcGF0aCkgdGhyb3cgKCk7CgoKCmV4dGVybiBfX3BpZF90IHRjZ2V0cGdycCAoaW50IF9fZmQp IHRocm93ICgpOwoKCmV4dGVybiBpbnQgdGNzZXRwZ3JwIChpbnQgX19mZCwgX19waWRfdCBfX3Bn cnBfaWQpIHRocm93ICgpOwoKCgpleHRlcm4gY2hhciAqZ2V0bG9naW4gKHZvaWQpIHRocm93ICgp OwoKCgoKZXh0ZXJuIGludCBnZXRsb2dpbl9yIChjaGFyICpfX25hbWUsIHNpemVfdCBfX25hbWVf bGVuKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgc2V0bG9naW4gKF9fY29uc3QgY2hhciAqX19u YW1lKSB0aHJvdyAoKTsKIyA3MjYgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMyA0CiMgMSAiL3Vz ci9pbmNsdWRlL2dldG9wdC5oIiAxIDMgNAojIDM4ICIvdXNyL2luY2x1ZGUvZ2V0b3B0LmgiIDMg NApleHRlcm4gIkMiIHsKIyA0NyAiL3Vzci9pbmNsdWRlL2dldG9wdC5oIiAzIDQKZXh0ZXJuIGNo YXIgKm9wdGFyZzsKIyA2MSAiL3Vzci9pbmNsdWRlL2dldG9wdC5oIiAzIDQKZXh0ZXJuIGludCBv cHRpbmQ7CgoKCgpleHRlcm4gaW50IG9wdGVycjsKCgoKZXh0ZXJuIGludCBvcHRvcHQ7CiMgMTQ1 ICIvdXNyL2luY2x1ZGUvZ2V0b3B0LmgiIDMgNApleHRlcm4gaW50IGdldG9wdCAoaW50IF9fX2Fy Z2MsIGNoYXIgKmNvbnN0ICpfX19hcmd2LCBjb25zdCBjaGFyICpfX3Nob3J0b3B0cyk7CiMgMTc1 ICIvdXNyL2luY2x1ZGUvZ2V0b3B0LmgiIDMgNAp9CiMgNzI3ICIvdXNyL2luY2x1ZGUvdW5pc3Rk LmgiIDIgMyA0CgoKCgoKCgpleHRlcm4gaW50IGdldGhvc3RuYW1lIChjaGFyICpfX25hbWUsIHNp emVfdCBfX2xlbikgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgc2V0aG9zdG5hbWUgKF9fY29u c3QgY2hhciAqX19uYW1lLCBzaXplX3QgX19sZW4pIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHNl dGhvc3RpZCAobG9uZyBpbnQgX19pZCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBnZXRkb21h aW5uYW1lIChjaGFyICpfX25hbWUsIHNpemVfdCBfX2xlbikgdGhyb3cgKCk7CmV4dGVybiBpbnQg c2V0ZG9tYWlubmFtZSAoX19jb25zdCBjaGFyICpfX25hbWUsIHNpemVfdCBfX2xlbikgdGhyb3cg KCk7CgoKCgoKZXh0ZXJuIGludCB2aGFuZ3VwICh2b2lkKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50 IHJldm9rZSAoX19jb25zdCBjaGFyICpfX2ZpbGUpIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIGlu dCBwcm9maWwgKHVuc2lnbmVkIHNob3J0IGludCAqX19zYW1wbGVfYnVmZmVyLCBzaXplX3QgX19z aXplLAogICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fb2Zmc2V0LCB1bnNpZ25lZCBpbnQgX19z Y2FsZSkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBhY2N0IChfX2NvbnN0IGNoYXIgKl9fbmFt ZSkgdGhyb3cgKCk7CgoKCmV4dGVybiBjaGFyICpnZXR1c2Vyc2hlbGwgKHZvaWQpIHRocm93ICgp OwpleHRlcm4gdm9pZCBlbmR1c2Vyc2hlbGwgKHZvaWQpIHRocm93ICgpOwpleHRlcm4gdm9pZCBz ZXR1c2Vyc2hlbGwgKHZvaWQpIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgZGFlbW9uIChpbnQg X19ub2NoZGlyLCBpbnQgX19ub2Nsb3NlKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCBjaHJv b3QgKF9fY29uc3QgY2hhciAqX19wYXRoKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGNoYXIgKmdldHBh c3MgKF9fY29uc3QgY2hhciAqX19wcm9tcHQpIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgZnN5 bmMgKGludCBfX2ZkKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGxvbmcgaW50IGdldGhvc3RpZCAo dm9pZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIHZvaWQgc3luYyAodm9pZCkgdGhyb3cgKCk7CgoKCgpl eHRlcm4gaW50IGdldHBhZ2VzaXplICh2b2lkKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19j b25zdF9fKSk7CgoKCgpleHRlcm4gaW50IHRydW5jYXRlIChfX2NvbnN0IGNoYXIgKl9fZmlsZSwg X19vZmZfdCBfX2xlbmd0aCkgdGhyb3cgKCk7CiMgODM2ICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgi IDMgNApleHRlcm4gaW50IHRydW5jYXRlNjQgKF9fY29uc3QgY2hhciAqX19maWxlLCBfX29mZjY0 X3QgX19sZW5ndGgpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBmdHJ1bmNhdGUgKGludCBfX2Zk LCBfX29mZl90IF9fbGVuZ3RoKSB0aHJvdyAoKTsKIyA4NTEgIi91c3IvaW5jbHVkZS91bmlzdGQu aCIgMyA0CmV4dGVybiBpbnQgZnRydW5jYXRlNjQgKGludCBfX2ZkLCBfX29mZjY0X3QgX19sZW5n dGgpIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgZ2V0ZHRhYmxlc2l6ZSAodm9pZCkgdGhyb3cg KCk7CiMgODY2ICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMgNApleHRlcm4gaW50IGJyayAodm9p ZCAqX19hZGRyKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gdm9pZCAqc2JyayAoaW50cHRyX3QgX19k ZWx0YSkgdGhyb3cgKCk7CiMgODg3ICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMgNApleHRlcm4g bG9uZyBpbnQgc3lzY2FsbCAobG9uZyBpbnQgX19zeXNubywgLi4uKSB0aHJvdyAoKTsKIyA5MDcg Ii91c3IvaW5jbHVkZS91bmlzdGQuaCIgMyA0CmV4dGVybiBpbnQgbG9ja2YgKGludCBfX2ZkLCBp bnQgX19jbWQsIF9fb2ZmX3QgX19sZW4pIHRocm93ICgpOwojIDkxNyAiL3Vzci9pbmNsdWRlL3Vu aXN0ZC5oIiAzIDQKZXh0ZXJuIGludCBsb2NrZjY0IChpbnQgX19mZCwgaW50IF9fY21kLCBfX29m ZjY0X3QgX19sZW4pIHRocm93ICgpOwojIDkzOCAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAzIDQK ZXh0ZXJuIGludCBmZGF0YXN5bmMgKGludCBfX2ZpbGRlcykgdGhyb3cgKCk7CgoKCgoKCgpleHRl cm4gY2hhciAqY3J5cHQgKF9fY29uc3QgY2hhciAqX19rZXksIF9fY29uc3QgY2hhciAqX19zYWx0 KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHZvaWQgZW5jcnlwdCAoY2hhciAqX19ibG9jaywgaW50IF9f ZWRmbGFnKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIHZvaWQgc3dhYiAoX19jb25zdCB2b2lkICpf X3Jlc3RyaWN0IF9fZnJvbSwgdm9pZCAqX19yZXN0cmljdCBfX3RvLAogICAgICAgICAgICAgICAg ICBzc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gY2hhciAqY3Rlcm1pZCAoY2hh ciAqX19zKSB0aHJvdyAoKTsKIyA5ODMgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMyA0CmV4dGVy biBpbnQgcHRocmVhZF9hdGZvcmsgKHZvaWQgKCpfX3ByZXBhcmUpICh2b2lkKSwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgdm9pZCAoKl9fcGFyZW50KSAodm9pZCksCiAgICAgICAgICAgICAg ICAgICAgICAgICAgIHZvaWQgKCpfX2NoaWxkKSAodm9pZCkpIHRocm93ICgpOwoKCn0KIyAzOSAi L25vdG5mcy9mY2hlL0JVSUxELWdjYy1tdWRmbGFwL0lOU1QvaW5jbHVkZS9jKysvMy41LXRyZWUt c3NhL2k2ODYtcGMtbGludXgtZ251L2JpdHMvZ3Roci1kZWZhdWx0LmgiIDIgMwoKdHlwZWRlZiBw dGhyZWFkX2tleV90IF9fZ3RocmVhZF9rZXlfdDsKdHlwZWRlZiBwdGhyZWFkX29uY2VfdCBfX2d0 aHJlYWRfb25jZV90Owp0eXBlZGVmIHB0aHJlYWRfbXV0ZXhfdCBfX2d0aHJlYWRfbXV0ZXhfdDsK CgoKCgoKI3ByYWdtYSB3ZWFrIHB0aHJlYWRfb25jZQojcHJhZ21hIHdlYWsgcHRocmVhZF9rZXlf Y3JlYXRlCiNwcmFnbWEgd2VhayBwdGhyZWFkX2tleV9kZWxldGUKI3ByYWdtYSB3ZWFrIHB0aHJl YWRfZ2V0c3BlY2lmaWMKI3ByYWdtYSB3ZWFrIHB0aHJlYWRfc2V0c3BlY2lmaWMKI3ByYWdtYSB3 ZWFrIHB0aHJlYWRfY3JlYXRlCgojcHJhZ21hIHdlYWsgcHRocmVhZF9tdXRleF9sb2NrCiNwcmFn bWEgd2VhayBwdGhyZWFkX211dGV4X3RyeWxvY2sKI3ByYWdtYSB3ZWFrIHB0aHJlYWRfbXV0ZXhf dW5sb2NrCiMgODcgIi9ub3RuZnMvZmNoZS9CVUlMRC1nY2MtbXVkZmxhcC9JTlNUL2luY2x1ZGUv YysrLzMuNS10cmVlLXNzYS9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2d0aHItZGVmYXVsdC5oIiAz CnN0YXRpYyBpbmxpbmUgaW50Cl9fZ3RocmVhZF9hY3RpdmVfcCAodm9pZCkKewogIHN0YXRpYyB2 b2lkICpjb25zdCBfX2d0aHJlYWRfYWN0aXZlX3B0ciA9ICh2b2lkICopICZwdGhyZWFkX2NyZWF0 ZTsKICByZXR1cm4gX19ndGhyZWFkX2FjdGl2ZV9wdHIgIT0gMDsKfQojIDQ0OSAiL25vdG5mcy9m Y2hlL0JVSUxELWdjYy1tdWRmbGFwL0lOU1QvaW5jbHVkZS9jKysvMy41LXRyZWUtc3NhL2k2ODYt cGMtbGludXgtZ251L2JpdHMvZ3Roci1kZWZhdWx0LmgiIDMKc3RhdGljIGlubGluZSBpbnQKX19n dGhyZWFkX29uY2UgKF9fZ3RocmVhZF9vbmNlX3QgKm9uY2UsIHZvaWQgKCpmdW5jKSAodm9pZCkp CnsKICBpZiAoX19ndGhyZWFkX2FjdGl2ZV9wICgpKQogICAgcmV0dXJuIHB0aHJlYWRfb25jZSAo b25jZSwgZnVuYyk7CiAgZWxzZQogICAgcmV0dXJuIC0xOwp9CgpzdGF0aWMgaW5saW5lIGludApf X2d0aHJlYWRfa2V5X2NyZWF0ZSAoX19ndGhyZWFkX2tleV90ICprZXksIHZvaWQgKCpkdG9yKSAo dm9pZCAqKSkKewogIHJldHVybiBwdGhyZWFkX2tleV9jcmVhdGUgKGtleSwgZHRvcik7Cn0KCnN0 YXRpYyBpbmxpbmUgaW50Cl9fZ3RocmVhZF9rZXlfZGVsZXRlIChfX2d0aHJlYWRfa2V5X3Qga2V5 KQp7CiAgcmV0dXJuIHB0aHJlYWRfa2V5X2RlbGV0ZSAoa2V5KTsKfQoKc3RhdGljIGlubGluZSB2 b2lkICoKX19ndGhyZWFkX2dldHNwZWNpZmljIChfX2d0aHJlYWRfa2V5X3Qga2V5KQp7CiAgcmV0 dXJuIHB0aHJlYWRfZ2V0c3BlY2lmaWMgKGtleSk7Cn0KCnN0YXRpYyBpbmxpbmUgaW50Cl9fZ3Ro cmVhZF9zZXRzcGVjaWZpYyAoX19ndGhyZWFkX2tleV90IGtleSwgY29uc3Qgdm9pZCAqcHRyKQp7 CiAgcmV0dXJuIHB0aHJlYWRfc2V0c3BlY2lmaWMgKGtleSwgcHRyKTsKfQoKc3RhdGljIGlubGlu ZSBpbnQKX19ndGhyZWFkX211dGV4X2xvY2sgKF9fZ3RocmVhZF9tdXRleF90ICptdXRleCkKewog IGlmIChfX2d0aHJlYWRfYWN0aXZlX3AgKCkpCiAgICByZXR1cm4gcHRocmVhZF9tdXRleF9sb2Nr IChtdXRleCk7CiAgZWxzZQogICAgcmV0dXJuIDA7Cn0KCnN0YXRpYyBpbmxpbmUgaW50Cl9fZ3Ro cmVhZF9tdXRleF90cnlsb2NrIChfX2d0aHJlYWRfbXV0ZXhfdCAqbXV0ZXgpCnsKICBpZiAoX19n dGhyZWFkX2FjdGl2ZV9wICgpKQogICAgcmV0dXJuIHB0aHJlYWRfbXV0ZXhfdHJ5bG9jayAobXV0 ZXgpOwogIGVsc2UKICAgIHJldHVybiAwOwp9CgpzdGF0aWMgaW5saW5lIGludApfX2d0aHJlYWRf bXV0ZXhfdW5sb2NrIChfX2d0aHJlYWRfbXV0ZXhfdCAqbXV0ZXgpCnsKICBpZiAoX19ndGhyZWFk X2FjdGl2ZV9wICgpKQogICAgcmV0dXJuIHB0aHJlYWRfbXV0ZXhfdW5sb2NrIChtdXRleCk7CiAg ZWxzZQogICAgcmV0dXJuIDA7Cn0KIyA5NyAiL25vdG5mcy9mY2hlL0JVSUxELWdjYy1tdWRmbGFw L0lOU1QvaW5jbHVkZS9jKysvMy41LXRyZWUtc3NhL2k2ODYtcGMtbGludXgtZ251L2JpdHMvZ3Ro ci5oIiAyIDMKIyAzOCAiL25vdG5mcy9mY2hlL0JVSUxELWdjYy1tdWRmbGFwL0lOU1QvaW5jbHVk ZS9jKysvMy41LXRyZWUtc3NhL2k2ODYtcGMtbGludXgtZ251L2JpdHMvYysraW8uaCIgMiAzCgpu YW1lc3BhY2Ugc3RkCnsKCiAgdHlwZWRlZiBsb25nIHN0cmVhbW9mZjsKICB0eXBlZGVmIHB0cmRp ZmZfdCBzdHJlYW1zaXplOwoKICB0eXBlZGVmIHB0cmRpZmZfdCB3c3RyZWFtc2l6ZTsKCiAgdHlw ZWRlZiBmcG9zX3QgX19jX3N0cmVhbXBvczsKCiAgdHlwZWRlZiBfX2d0aHJlYWRfbXV0ZXhfdCBf X2NfbG9jazsKCgogIHR5cGVkZWYgRklMRSBfX2NfZmlsZTsKCgogIHN0cnVjdCBfX2lvc19mbGFn cwogIHsKICAgIHR5cGVkZWYgc2hvcnQgX19pbnRfdHlwZTsKCiAgICBzdGF0aWMgY29uc3QgX19p bnRfdHlwZSBfU19ib29sYWxwaGEgPSAweDAwMDE7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlw ZSBfU19kZWMgPSAweDAwMDI7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19maXhlZCA9 IDB4MDAwNDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2hleCA9IDB4MDAwODsKICAg IHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2ludGVybmFsID0gMHgwMDEwOwogICAgc3RhdGlj IGNvbnN0IF9faW50X3R5cGUgX1NfbGVmdCA9IDB4MDAyMDsKICAgIHN0YXRpYyBjb25zdCBfX2lu dF90eXBlIF9TX29jdCA9IDB4MDA0MDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX3Jp Z2h0ID0gMHgwMDgwOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1Nfc2NpZW50aWZpYyA9 IDB4MDEwMDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX3Nob3diYXNlID0gMHgwMjAw OwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1Nfc2hvd3BvaW50ID0gMHgwNDAwOwogICAg c3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1Nfc2hvd3BvcyA9IDB4MDgwMDsKICAgIHN0YXRpYyBj b25zdCBfX2ludF90eXBlIF9TX3NraXB3cyA9IDB4MTAwMDsKICAgIHN0YXRpYyBjb25zdCBfX2lu dF90eXBlIF9TX3VuaXRidWYgPSAweDIwMDA7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBf U191cHBlcmNhc2UgPSAweDQwMDA7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19hZGp1 c3RmaWVsZCA9IDB4MDAyMCB8IDB4MDA4MCB8IDB4MDAxMDsKICAgIHN0YXRpYyBjb25zdCBfX2lu dF90eXBlIF9TX2Jhc2VmaWVsZCA9IDB4MDAwMiB8IDB4MDA0MCB8IDB4MDAwODsKICAgIHN0YXRp YyBjb25zdCBfX2ludF90eXBlIF9TX2Zsb2F0ZmllbGQgPSAweDAxMDAgfCAweDAwMDQ7CgoKICAg IHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2JhZGJpdCA9IDB4MDE7CiAgICBzdGF0aWMgY29u c3QgX19pbnRfdHlwZSBfU19lb2ZiaXQgPSAweDAyOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5 cGUgX1NfZmFpbGJpdCA9IDB4MDQ7CgoKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2Fw cCA9IDB4MDE7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19hdGUgPSAweDAyOwogICAg c3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfYmluID0gMHgwNDsKICAgIHN0YXRpYyBjb25zdCBf X2ludF90eXBlIF9TX2luID0gMHgwODsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX291 dCA9IDB4MTA7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU190cnVuYyA9IDB4MjA7CiAg fTsKfQojIDQ1ICIvbm90bmZzL2ZjaGUvQlVJTEQtZ2NjLW11ZGZsYXAvSU5TVC9pbmNsdWRlL2Mr Ky8zLjUtdHJlZS1zc2EvYml0cy9mcG9zLmgiIDIgMwojIDEgIi9ub3RuZnMvZmNoZS9CVUlMRC1n Y2MtbXVkZmxhcC9JTlNUL2luY2x1ZGUvYysrLzMuNS10cmVlLXNzYS9jd2NoYXIiIDEgMwojIDQ4 ICIvbm90bmZzL2ZjaGUvQlVJTEQtZ2NjLW11ZGZsYXAvSU5TVC9pbmNsdWRlL2MrKy8zLjUtdHJl ZS1zc2EvY3djaGFyIiAzCgoKCiMgMSAiL25vdG5mcy9mY2hlL0JVSUxELWdjYy1tdWRmbGFwL0lO U1QvaW5jbHVkZS9jKysvMy41LXRyZWUtc3NhL2N0aW1lIiAxIDMKIyA0OCAiL25vdG5mcy9mY2hl L0JVSUxELWdjYy1tdWRmbGFwL0lOU1QvaW5jbHVkZS9jKysvMy41LXRyZWUtc3NhL2N0aW1lIiAz CiMgNjQgIi9ub3RuZnMvZmNoZS9CVUlMRC1nY2MtbXVkZmxhcC9JTlNUL2luY2x1ZGUvYysrLzMu NS10cmVlLXNzYS9jdGltZSIgMwpuYW1lc3BhY2Ugc3RkCnsKICB1c2luZyA6OmNsb2NrX3Q7CiAg dXNpbmcgOjp0aW1lX3Q7CiAgdXNpbmcgOjp0bTsKCiAgdXNpbmcgOjpjbG9jazsKICB1c2luZyA6 OmRpZmZ0aW1lOwogIHVzaW5nIDo6bWt0aW1lOwogIHVzaW5nIDo6dGltZTsKICB1c2luZyA6OmFz Y3RpbWU7CiAgdXNpbmcgOjpjdGltZTsKICB1c2luZyA6OmdtdGltZTsKICB1c2luZyA6OmxvY2Fs dGltZTsKICB1c2luZyA6OnN0cmZ0aW1lOwp9CiMgNTIgIi9ub3RuZnMvZmNoZS9CVUlMRC1nY2Mt bXVkZmxhcC9JTlNUL2luY2x1ZGUvYysrLzMuNS10cmVlLXNzYS9jd2NoYXIiIDIgMwoKCiMgMSAi L3Vzci9pbmNsdWRlL3djaGFyLmgiIDEgMyA0CiMgNDAgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAz IDQKIyAxICIvbm90bmZzL2ZjaGUvQlVJTEQtZ2NjLW11ZGZsYXAvSU5TVC9saWIvZ2NjLWxpYi9p Njg2LXBjLWxpbnV4LWdudS8zLjUtdHJlZS1zc2EvaW5jbHVkZS9zdGRhcmcuaCIgMSAzIDQKIyA0 MSAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDIgMyA0CgoKCgoKCgojIDEgIi9ub3RuZnMvZmNoZS9C VUlMRC1nY2MtbXVkZmxhcC9JTlNUL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuNS10 cmVlLXNzYS9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMgNAojIDQ5ICIvdXNyL2luY2x1ZGUvd2NoYXIu aCIgMiAzIDQKIyA4NSAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDMgNAp0eXBlZGVmIF9fbWJzdGF0 ZV90IG1ic3RhdGVfdDsKIyAxMDUgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAzIDQKc3RydWN0IHRt OwoKCmV4dGVybiAiQyIgewoKCmV4dGVybiB3Y2hhcl90ICp3Y3NjcHkgKHdjaGFyX3QgKl9fcmVz dHJpY3QgX19kZXN0LAogICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9f cmVzdHJpY3QgX19zcmMpIHRocm93ICgpOwoKZXh0ZXJuIHdjaGFyX3QgKndjc25jcHkgKHdjaGFy X3QgKl9fcmVzdHJpY3QgX19kZXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB3 Y2hhcl90ICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKQogICAgIHRocm93ICgpOwoKCmV4 dGVybiB3Y2hhcl90ICp3Y3NjYXQgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19kZXN0LAogICAgICAg ICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zcmMpIHRocm93 ICgpOwoKZXh0ZXJuIHdjaGFyX3QgKndjc25jYXQgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19kZXN0 LAogICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9f c3JjLCBzaXplX3QgX19uKQogICAgIHRocm93ICgpOwoKCmV4dGVybiBpbnQgd2NzY21wIChfX2Nv bnN0IHdjaGFyX3QgKl9fczEsIF9fY29uc3Qgd2NoYXJfdCAqX19zMikKICAgICB0aHJvdyAoKSBf X2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBpbnQgd2NzbmNtcCAoX19jb25zdCB3 Y2hhcl90ICpfX3MxLCBfX2NvbnN0IHdjaGFyX3QgKl9fczIsIHNpemVfdCBfX24pCiAgICAgdGhy b3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCmV4dGVybiBpbnQgd2NzY2FzZWNt cCAoX19jb25zdCB3Y2hhcl90ICpfX3MxLCBfX2NvbnN0IHdjaGFyX3QgKl9fczIpIHRocm93ICgp OwoKCmV4dGVybiBpbnQgd2NzbmNhc2VjbXAgKF9fY29uc3Qgd2NoYXJfdCAqX19zMSwgX19jb25z dCB3Y2hhcl90ICpfX3MyLAogICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19uKSB0aHJv dyAoKTsKCgoKCgpleHRlcm4gaW50IF9fd2NzY2FzZWNtcF9sIChfX2NvbnN0IHdjaGFyX3QgKl9f czEsIF9fY29uc3Qgd2NoYXJfdCAqX19zMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX19s b2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7CgpleHRlcm4gaW50IF9fd2NzbmNhc2VjbXBfbCAoX19j b25zdCB3Y2hhcl90ICpfX3MxLCBfX2NvbnN0IHdjaGFyX3QgKl9fczIsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICBzaXplX3QgX19uLCBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKTsKCgoK CmV4dGVybiBpbnQgd2NzY29sbCAoX19jb25zdCB3Y2hhcl90ICpfX3MxLCBfX2NvbnN0IHdjaGFy X3QgKl9fczIpIHRocm93ICgpOwoKCgpleHRlcm4gc2l6ZV90IHdjc3hmcm0gKHdjaGFyX3QgKl9f cmVzdHJpY3QgX19zMSwKICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9f cmVzdHJpY3QgX19zMiwgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gaW50IF9f d2NzY29sbF9sIChfX2NvbnN0IHdjaGFyX3QgKl9fczEsIF9fY29uc3Qgd2NoYXJfdCAqX19zMiwK ICAgICAgICAgICAgICAgICAgICAgICAgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7CgoKCmV4 dGVybiBzaXplX3QgX193Y3N4ZnJtX2wgKHdjaGFyX3QgKl9fczEsIF9fY29uc3Qgd2NoYXJfdCAq X19zMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbiwgX19sb2NhbGVfdCBf X2xvYykgdGhyb3cgKCk7CgoKZXh0ZXJuIHdjaGFyX3QgKndjc2R1cCAoX19jb25zdCB3Y2hhcl90 ICpfX3MpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7CgoKCmV4dGVybiB3 Y2hhcl90ICp3Y3NjaHIgKF9fY29uc3Qgd2NoYXJfdCAqX193Y3MsIHdjaGFyX3QgX193YykKICAg ICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiB3Y2hhcl90ICp3 Y3NyY2hyIChfX2NvbnN0IHdjaGFyX3QgKl9fd2NzLCB3Y2hhcl90IF9fd2MpCiAgICAgdGhyb3cg KCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgpleHRlcm4gd2NoYXJfdCAqd2NzY2hy bnVsIChfX2NvbnN0IHdjaGFyX3QgKl9fcywgd2NoYXJfdCBfX3djKQogICAgIHRocm93ICgpIF9f YXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoKZXh0ZXJuIHNpemVfdCB3Y3Njc3BuIChfX2Nv bnN0IHdjaGFyX3QgKl9fd2NzLCBfX2NvbnN0IHdjaGFyX3QgKl9fcmVqZWN0KQogICAgIHRocm93 ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVybiBzaXplX3Qgd2Nzc3BuIChf X2NvbnN0IHdjaGFyX3QgKl9fd2NzLCBfX2NvbnN0IHdjaGFyX3QgKl9fYWNjZXB0KQogICAgIHRo cm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIHdjaGFyX3QgKndjc3Bi cmsgKF9fY29uc3Qgd2NoYXJfdCAqX193Y3MsIF9fY29uc3Qgd2NoYXJfdCAqX19hY2NlcHQpCiAg ICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gd2NoYXJfdCAq d2Nzc3RyIChfX2NvbnN0IHdjaGFyX3QgKl9faGF5c3RhY2ssIF9fY29uc3Qgd2NoYXJfdCAqX19u ZWVkbGUpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCmV4dGVy biB3Y2hhcl90ICp3Y3N3Y3MgKF9fY29uc3Qgd2NoYXJfdCAqX19oYXlzdGFjaywgX19jb25zdCB3 Y2hhcl90ICpfX25lZWRsZSkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18p KTsKCgoKZXh0ZXJuIHdjaGFyX3QgKndjc3RvayAod2NoYXJfdCAqX19yZXN0cmljdCBfX3MsCiAg ICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX2RlbGlt LAogICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX3B0cikgdGhy b3cgKCk7CgoKZXh0ZXJuIHNpemVfdCB3Y3NsZW4gKF9fY29uc3Qgd2NoYXJfdCAqX19zKSB0aHJv dyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKZXh0ZXJuIHNpemVfdCB3Y3NubGVu IChfX2NvbnN0IHdjaGFyX3QgKl9fcywgc2l6ZV90IF9fbWF4bGVuKQogICAgIHRocm93ICgpIF9f YXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoKZXh0ZXJuIHdjaGFyX3QgKndtZW1jaHIgKF9f Y29uc3Qgd2NoYXJfdCAqX19zLCB3Y2hhcl90IF9fYywgc2l6ZV90IF9fbikKICAgICB0aHJvdyAo KSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgpleHRlcm4gaW50IHdtZW1jbXAgKF9fY29u c3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3MxLAogICAgICAgICAgICAgICAgICAgIF9fY29uc3Qg d2NoYXJfdCAqX19yZXN0cmljdCBfX3MyLCBzaXplX3QgX19uKQogICAgIHRocm93ICgpIF9fYXR0 cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVybiB3Y2hhcl90ICp3bWVtY3B5ICh3Y2hhcl90 ICpfX3Jlc3RyaWN0IF9fczEsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFy X3QgKl9fcmVzdHJpY3QgX19zMiwgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCmV4dGVybiB3Y2hh cl90ICp3bWVtbW92ZSAod2NoYXJfdCAqX19zMSwgX19jb25zdCB3Y2hhcl90ICpfX3MyLCBzaXpl X3QgX19uKQogICAgIHRocm93ICgpOwoKCmV4dGVybiB3Y2hhcl90ICp3bWVtc2V0ICh3Y2hhcl90 ICpfX3MsIHdjaGFyX3QgX19jLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgoKCmV4dGVybiB3Y2hh cl90ICp3bWVtcGNweSAod2NoYXJfdCAqX19yZXN0cmljdCBfX3MxLAogICAgICAgICAgICAgICAg ICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3MyLCBzaXplX3QgX19uKQog ICAgIHRocm93ICgpOwoKCgoKCmV4dGVybiB3aW50X3QgYnRvd2MgKGludCBfX2MpIHRocm93ICgp OwoKCgpleHRlcm4gaW50IHdjdG9iICh3aW50X3QgX19jKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGlu dCBtYnNpbml0IChfX2NvbnN0IG1ic3RhdGVfdCAqX19wcykgdGhyb3cgKCkgX19hdHRyaWJ1dGVf XyAoKF9fcHVyZV9fKSk7CgoKCmV4dGVybiBzaXplX3QgbWJydG93YyAod2NoYXJfdCAqX19yZXN0 cmljdCBfX3B3YywKICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJp Y3QgX19zLCBzaXplX3QgX19uLAogICAgICAgICAgICAgICAgICAgICAgIG1ic3RhdGVfdCAqX19w KSB0aHJvdyAoKTsKCgpleHRlcm4gc2l6ZV90IHdjcnRvbWIgKGNoYXIgKl9fcmVzdHJpY3QgX19z LCB3Y2hhcl90IF9fd2MsCiAgICAgICAgICAgICAgICAgICAgICAgbWJzdGF0ZV90ICpfX3Jlc3Ry aWN0IF9fcHMpIHRocm93ICgpOwoKCmV4dGVybiBzaXplX3QgX19tYnJsZW4gKF9fY29uc3QgY2hh ciAqX19yZXN0cmljdCBfX3MsIHNpemVfdCBfX24sCiAgICAgICAgICAgICAgICAgICAgICAgIG1i c3RhdGVfdCAqX19yZXN0cmljdCBfX3BzKSB0aHJvdyAoKTsKZXh0ZXJuIHNpemVfdCBtYnJsZW4g KF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3MsIHNpemVfdCBfX24sCiAgICAgICAgICAgICAg ICAgICAgICBtYnN0YXRlX3QgKl9fcmVzdHJpY3QgX19wcykgdGhyb3cgKCk7CiMgMjk3ICIvdXNy L2luY2x1ZGUvd2NoYXIuaCIgMyA0CmV4dGVybiBzaXplX3QgbWJzcnRvd2NzICh3Y2hhcl90ICpf X3Jlc3RyaWN0IF9fZHN0LAogICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICoq X19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAg bWJzdGF0ZV90ICpfX3Jlc3RyaWN0IF9fcHMpIHRocm93ICgpOwoKCgpleHRlcm4gc2l6ZV90IHdj c3J0b21icyAoY2hhciAqX19yZXN0cmljdCBfX2RzdCwKICAgICAgICAgICAgICAgICAgICAgICAg IF9fY29uc3Qgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX2xlbiwKICAgICAg ICAgICAgICAgICAgICAgICAgIG1ic3RhdGVfdCAqX19yZXN0cmljdCBfX3BzKSB0aHJvdyAoKTsK CgoKCgpleHRlcm4gc2l6ZV90IG1ic25ydG93Y3MgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19kc3Qs CiAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICoqX19yZXN0cmljdCBfX3Ny Yywgc2l6ZV90IF9fbm1jLAogICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX2xlbiwg bWJzdGF0ZV90ICpfX3Jlc3RyaWN0IF9fcHMpIHRocm93ICgpOwoKCgpleHRlcm4gc2l6ZV90IHdj c25ydG9tYnMgKGNoYXIgKl9fcmVzdHJpY3QgX19kc3QsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgX19jb25zdCB3Y2hhcl90ICoqX19yZXN0cmljdCBfX3NyYywKICAgICAgICAgICAgICAgICAg ICAgICAgICBzaXplX3QgX19ud2MsIHNpemVfdCBfX2xlbiwKICAgICAgICAgICAgICAgICAgICAg ICAgICBtYnN0YXRlX3QgKl9fcmVzdHJpY3QgX19wcykgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBp bnQgd2N3aWR0aCAod2NoYXJfdCBfX2MpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHdjc3dpZHRo IChfX2NvbnN0IHdjaGFyX3QgKl9fcywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCgoKZXh0ZXJu IGRvdWJsZSB3Y3N0b2QgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAg ICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0cikgdGhyb3cgKCk7 CgoKCmV4dGVybiBmbG9hdCB3Y3N0b2YgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25w dHIsCiAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyKSB0 aHJvdyAoKTsKZXh0ZXJuIGxvbmcgZG91YmxlIHdjc3RvbGQgKF9fY29uc3Qgd2NoYXJfdCAqX19y ZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19y ZXN0cmljdCBfX2VuZHB0cikgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGxvbmcgaW50IHdjc3RvbCAo X19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAg ICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpIHRocm93ICgpOwoK CgpleHRlcm4gdW5zaWduZWQgbG9uZyBpbnQgd2NzdG91bCAoX19jb25zdCB3Y2hhcl90ICpfX3Jl c3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3Qg KipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKQogICAgIHRocm93ICgpOwoKCgoKX19l eHRlbnNpb25fXwpleHRlcm4gbG9uZyBsb25nIGludCB3Y3N0b3EgKF9fY29uc3Qgd2NoYXJfdCAq X19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAq Kl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpCiAgICAgdGhyb3cgKCk7CgoKCl9fZXh0 ZW5zaW9uX18KZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgd2NzdG91cSAoX19jb25zdCB3 Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGludCBfX2Jhc2UpIHRocm93ICgpOwoKCgoKCl9fZXh0ZW5z aW9uX18KZXh0ZXJuIGxvbmcgbG9uZyBpbnQgd2NzdG9sbCAoX19jb25zdCB3Y2hhcl90ICpfX3Jl c3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9f cmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpCiAgICAgdGhyb3cgKCk7CgoKCl9fZXh0ZW5z aW9uX18KZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgd2NzdG91bGwgKF9fY29uc3Qgd2No YXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGludCBfX2Jhc2UpIHRocm93ICgpOwojIDQxMCAiL3Vzci9p bmNsdWRlL3djaGFyLmgiIDMgNApleHRlcm4gbG9uZyBpbnQgX193Y3N0b2xfbCAoX19jb25zdCB3 Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdj aGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7CgpleHRlcm4gdW5zaWduZWQg bG9uZyBpbnQgX193Y3N0b3VsX2wgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJp Y3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9f YmFzZSwgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7CgpfX2V4dGVuc2lvbl9fCmV4dGVybiBs b25nIGxvbmcgaW50IF9fd2NzdG9sbF9sIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19u cHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJp Y3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNl LCBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKTsKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIHVuc2ln bmVkIGxvbmcgbG9uZyBpbnQgX193Y3N0b3VsbF9sIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJp Y3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdj aGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGludCBfX2Jhc2UsIF9fbG9jYWxlX3QgX19sb2MpCiAgICAgdGhyb3cg KCk7CgpleHRlcm4gZG91YmxlIF9fd2NzdG9kX2wgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmlj dCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3Qg X19lbmRwdHIsIF9fbG9jYWxlX3QgX19sb2MpCiAgICAgdGhyb3cgKCk7CgpleHRlcm4gZmxvYXQg X193Y3N0b2ZfbCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAg ICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBfX2xvY2FsZV90 IF9fbG9jKQogICAgIHRocm93ICgpOwoKZXh0ZXJuIGxvbmcgZG91YmxlIF9fd2NzdG9sZF9sIChf X2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoKCgoKCmV4dGVybiBk b3VibGUgX193Y3N0b2RfaW50ZXJuYWwgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25w dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0 IF9fZW5kcHRyLCBpbnQgX19ncm91cCkKICAgICB0aHJvdyAoKTsKZXh0ZXJuIGZsb2F0IF9fd2Nz dG9mX2ludGVybmFsIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBp bnQgX19ncm91cCkKICAgICB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcgZG91YmxlIF9fd2NzdG9sZF9p bnRlcm5hbCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2dyb3VwKSB0aHJv dyAoKTsKCgpleHRlcm4gbG9uZyBpbnQgX193Y3N0b2xfaW50ZXJuYWwgKF9fY29uc3Qgd2NoYXJf dCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg d2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgaW50IF9fYmFzZSwgaW50IF9fZ3JvdXApIHRocm93ICgpOwoKCgpleHRlcm4gdW5z aWduZWQgbG9uZyBpbnQgX193Y3N0b3VsX2ludGVybmFsIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVz dHJpY3QgX19ucHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNlLCBpbnQgX19ncm91cCkgdGhyb3cgKCk7CgoK Cl9fZXh0ZW5zaW9uX18KZXh0ZXJuIGxvbmcgbG9uZyBpbnQgX193Y3N0b2xsX2ludGVybmFsIChf X2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2Jhc2UsIGludCBfX2dyb3Vw KSB0aHJvdyAoKTsKCgoKX19leHRlbnNpb25fXwpleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGlu dCBfX3djc3RvdWxsX2ludGVybmFsIChfX2NvbnN0IHdjaGFyX3QgKgogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Jlc3RyaWN0IF9fbnB0ciwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAq KgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Jl c3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBpbnQgX19iYXNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBpbnQgX19ncm91cCkgdGhyb3cgKCk7CiMgNTI4ICIvdXNyL2luY2x1 ZGUvd2NoYXIuaCIgMyA0CmV4dGVybiB3Y2hhcl90ICp3Y3BjcHkgKHdjaGFyX3QgKl9fZGVzdCwg X19jb25zdCB3Y2hhcl90ICpfX3NyYykgdGhyb3cgKCk7CgoKCmV4dGVybiB3Y2hhcl90ICp3Y3Bu Y3B5ICh3Y2hhcl90ICpfX2Rlc3QsIF9fY29uc3Qgd2NoYXJfdCAqX19zcmMsIHNpemVfdCBfX24p CiAgICAgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gaW50IGZ3aWRlIChfX0ZJTEUgKl9fZnAsIGlu dCBfX21vZGUpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IGZ3cHJpbnRmIChfX0ZJTEUgKl9fcmVz dHJpY3QgX19zdHJlYW0sCiAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19y ZXN0cmljdCBfX2Zvcm1hdCwgLi4uKQogICAgIHRocm93ICgpIDsKCmV4dGVybiBpbnQgd3ByaW50 ZiAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pCiAgICAgdGhyb3cg KCkgOwoKZXh0ZXJuIGludCBzd3ByaW50ZiAod2NoYXJfdCAqX19yZXN0cmljdCBfX3MsIHNpemVf dCBfX24sCiAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBf X2Zvcm1hdCwgLi4uKQogICAgIHRocm93ICgpIDsKCgpleHRlcm4gaW50IHZmd3ByaW50ZiAoX19G SUxFICpfX3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJf dCAqX19yZXN0cmljdCBfX2Zvcm1hdCwKICAgICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9s aXN0IF9fYXJnKQogICAgIHRocm93ICgpIDsKCmV4dGVybiBpbnQgdndwcmludGYgKF9fY29uc3Qg d2NoYXJfdCAqX19yZXN0cmljdCBfX2Zvcm1hdCwKICAgICAgICAgICAgICAgICAgICAgX19nbnVj X3ZhX2xpc3QgX19hcmcpCiAgICAgdGhyb3cgKCkgOwoKCmV4dGVybiBpbnQgdnN3cHJpbnRmICh3 Y2hhcl90ICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbiwKICAgICAgICAgICAgICAgICAgICAg IF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX2Zvcm1hdCwKICAgICAgICAgICAgICAgICAg ICAgIF9fZ251Y192YV9saXN0IF9fYXJnKQogICAgIHRocm93ICgpIDsKCgoKZXh0ZXJuIGludCBm d3NjYW5mIChfX0ZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sCiAgICAgICAgICAgICAgICAgICAg X19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pCiAgICAgdGhyb3cgKCkg OwoKZXh0ZXJuIGludCB3c2NhbmYgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX2Zvcm1h dCwgLi4uKQogICAgIHRocm93ICgpIDsKCmV4dGVybiBpbnQgc3dzY2FuZiAoX19jb25zdCB3Y2hh cl90ICpfX3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3Qg Kl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikKICAgICB0aHJvdyAoKSA7CgoKCgpleHRlcm4gaW50 IHZmd3NjYW5mIChfX0ZJTEUgKl9fcmVzdHJpY3QgX19zLAogICAgICAgICAgICAgICAgICAgICBf X2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAgICAg IF9fZ251Y192YV9saXN0IF9fYXJnKQogICAgIHRocm93ICgpIDsKCmV4dGVybiBpbnQgdndzY2Fu ZiAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZm9ybWF0LAogICAgICAgICAgICAgICAg ICAgIF9fZ251Y192YV9saXN0IF9fYXJnKQogICAgIHRocm93ICgpIDsKCmV4dGVybiBpbnQgdnN3 c2NhbmYgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3MsCiAgICAgICAgICAgICAgICAg ICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX2Zvcm1hdCwKICAgICAgICAgICAgICAg ICAgICAgX19nbnVjX3ZhX2xpc3QgX19hcmcpCiAgICAgdGhyb3cgKCkgOwoKCgoKZXh0ZXJuIHdp bnRfdCBmZ2V0d2MgKF9fRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwpleHRlcm4gd2ludF90IGdl dHdjIChfX0ZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgpleHRlcm4gd2ludF90IGdldHdjaGFy ICh2b2lkKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHdpbnRfdCBmcHV0d2MgKHdjaGFyX3QgX193Yywg X19GSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVybiB3aW50X3QgcHV0d2MgKHdjaGFyX3Qg X193YywgX19GSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKZXh0ZXJuIHdpbnRfdCBwdXR3Y2hh ciAod2NoYXJfdCBfX3djKSB0aHJvdyAoKTsKCgoKCmV4dGVybiB3Y2hhcl90ICpmZ2V0d3MgKHdj aGFyX3QgKl9fcmVzdHJpY3QgX193cywgaW50IF9fbiwKICAgICAgICAgICAgICAgICAgICAgICAg X19GSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IGZwdXR3 cyAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fd3MsCiAgICAgICAgICAgICAgICAgICBf X0ZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwoKCgpleHRlcm4gd2ludF90IHVu Z2V0d2MgKHdpbnRfdCBfX3djLCBfX0ZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCgpleHRl cm4gd2ludF90IGdldHdjX3VubG9ja2VkIChfX0ZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKZXh0 ZXJuIHdpbnRfdCBnZXR3Y2hhcl91bmxvY2tlZCAodm9pZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIHdp bnRfdCBmZ2V0d2NfdW5sb2NrZWQgKF9fRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCmV4dGVy biB3aW50X3QgZnB1dHdjX3VubG9ja2VkICh3Y2hhcl90IF9fd2MsIF9fRklMRSAqX19zdHJlYW0p IHRocm93ICgpOwoKCgpleHRlcm4gd2ludF90IHB1dHdjX3VubG9ja2VkICh3Y2hhcl90IF9fd2Ms IF9fRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwpleHRlcm4gd2ludF90IHB1dHdjaGFyX3VubG9j a2VkICh3Y2hhcl90IF9fd2MpIHRocm93ICgpOwoKCgpleHRlcm4gd2NoYXJfdCAqZmdldHdzX3Vu bG9ja2VkICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fd3MsIGludCBfX24sCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIF9fRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7 CgoKZXh0ZXJuIGludCBmcHV0d3NfdW5sb2NrZWQgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmlj dCBfX3dzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX19GSUxFICpfX3Jlc3RyaWN0IF9f c3RyZWFtKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIHNpemVfdCB3Y3NmdGltZSAod2NoYXJfdCAq X19yZXN0cmljdCBfX3MsIHNpemVfdCBfX21heHNpemUsCiAgICAgICAgICAgICAgICAgICAgICAg IF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX2Zvcm1hdCwKICAgICAgICAgICAgICAgICAg ICAgICAgX19jb25zdCBzdHJ1Y3QgdG0gKl9fcmVzdHJpY3QgX190cCkgdGhyb3cgKCk7CiMgNjgw ICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMyA0Cn0KIyA1NSAiL25vdG5mcy9mY2hlL0JVSUxELWdj Yy1tdWRmbGFwL0lOU1QvaW5jbHVkZS9jKysvMy41LXRyZWUtc3NhL2N3Y2hhciIgMiAzCiMgNjkg Ii9ub3RuZnMvZmNoZS9CVUlMRC1nY2MtbXVkZmxhcC9JTlNUL2luY2x1ZGUvYysrLzMuNS10cmVl LXNzYS9jd2NoYXIiIDMKbmFtZXNwYWNlIHN0ZAp7CiAgdXNpbmcgOjptYnN0YXRlX3Q7Cn0KIyAx MzMgIi9ub3RuZnMvZmNoZS9CVUlMRC1nY2MtbXVkZmxhcC9JTlNUL2luY2x1ZGUvYysrLzMuNS10 cmVlLXNzYS9jd2NoYXIiIDMKbmFtZXNwYWNlIHN0ZAp7CiAgdXNpbmcgOjp3aW50X3Q7CgogIHVz aW5nIDo6YnRvd2M7CiAgdXNpbmcgOjpmZ2V0d2M7CiAgdXNpbmcgOjpmZ2V0d3M7CiAgdXNpbmcg OjpmcHV0d2M7CiAgdXNpbmcgOjpmcHV0d3M7CiAgdXNpbmcgOjpmd2lkZTsKICB1c2luZyA6OmZ3 cHJpbnRmOwogIHVzaW5nIDo6ZndzY2FuZjsKICB1c2luZyA6OmdldHdjOwogIHVzaW5nIDo6Z2V0 d2NoYXI7CiAgdXNpbmcgOjptYnJsZW47CiAgdXNpbmcgOjptYnJ0b3djOwogIHVzaW5nIDo6bWJz aW5pdDsKICB1c2luZyA6Om1ic3J0b3djczsKICB1c2luZyA6OnB1dHdjOwogIHVzaW5nIDo6cHV0 d2NoYXI7CiAgdXNpbmcgOjpzd3ByaW50ZjsKICB1c2luZyA6OnN3c2NhbmY7CiAgdXNpbmcgOjp1 bmdldHdjOwogIHVzaW5nIDo6dmZ3cHJpbnRmOwogIHVzaW5nIDo6dmZ3c2NhbmY7CiAgdXNpbmcg Ojp2c3dwcmludGY7CiAgdXNpbmcgOjp2c3dzY2FuZjsKICB1c2luZyA6OnZ3cHJpbnRmOwogIHVz aW5nIDo6dndzY2FuZjsKICB1c2luZyA6OndjcnRvbWI7CiAgdXNpbmcgOjp3Y3NjYXQ7CiAgdXNp bmcgOjp3Y3NjbXA7CiAgdXNpbmcgOjp3Y3Njb2xsOwogIHVzaW5nIDo6d2NzY3B5OwogIHVzaW5n IDo6d2NzY3NwbjsKICB1c2luZyA6Ondjc2Z0aW1lOwogIHVzaW5nIDo6d2NzbGVuOwogIHVzaW5n IDo6d2NzbmNhdDsKICB1c2luZyA6Ondjc25jbXA7CiAgdXNpbmcgOjp3Y3NuY3B5OwogIHVzaW5n IDo6d2NzcnRvbWJzOwogIHVzaW5nIDo6d2Nzc3BuOwogIHVzaW5nIDo6d2NzdG9kOwogIHVzaW5n IDo6d2NzdG9mOwogIHVzaW5nIDo6d2NzdG9rOwogIHVzaW5nIDo6d2NzdG9sOwogIHVzaW5nIDo6 d2NzdG91bDsKICB1c2luZyA6Ondjc3hmcm07CiAgdXNpbmcgOjp3Y3RvYjsKICB1c2luZyA6Ondt ZW1jbXA7CiAgdXNpbmcgOjp3bWVtY3B5OwogIHVzaW5nIDo6d21lbW1vdmU7CiAgdXNpbmcgOjp3 bWVtc2V0OwogIHVzaW5nIDo6d3ByaW50ZjsKICB1c2luZyA6OndzY2FuZjsKCiAgdXNpbmcgOjp3 Y3NjaHI7CgogIGlubGluZSB3Y2hhcl90KgogIHdjc2Nocih3Y2hhcl90KiBfX3AsIHdjaGFyX3Qg X19jKQogIHsgcmV0dXJuIHdjc2Nocihjb25zdF9jYXN0PGNvbnN0IHdjaGFyX3QqPihfX3ApLCBf X2MpOyB9CgogIHVzaW5nIDo6d2NzcGJyazsKCiAgaW5saW5lIHdjaGFyX3QqCiAgd2NzcGJyayh3 Y2hhcl90KiBfX3MxLCB3Y2hhcl90KiBfX3MyKQogIHsgcmV0dXJuIHdjc3BicmsoY29uc3RfY2Fz dDxjb25zdCB3Y2hhcl90Kj4oX19zMSksIF9fczIpOyB9CgogIHVzaW5nIDo6d2NzcmNocjsKCiAg aW5saW5lIHdjaGFyX3QqCiAgd2NzcmNocih3Y2hhcl90KiBfX3AsIHdjaGFyX3QgX19jKQogIHsg cmV0dXJuIHdjc3JjaHIoY29uc3RfY2FzdDxjb25zdCB3Y2hhcl90Kj4oX19wKSwgX19jKTsgfQoK ICB1c2luZyA6Ondjc3N0cjsKCiAgaW5saW5lIHdjaGFyX3QqCiAgd2Nzc3RyKHdjaGFyX3QqIF9f czEsIHdjaGFyX3QqIF9fczIpCiAgeyByZXR1cm4gd2Nzc3RyKGNvbnN0X2Nhc3Q8Y29uc3Qgd2No YXJfdCo+KF9fczEpLCBfX3MyKTsgfQoKICB1c2luZyA6OndtZW1jaHI7CgogIGlubGluZSB3Y2hh cl90KgogIHdtZW1jaHIod2NoYXJfdCogX19wLCB3Y2hhcl90IF9fYywgc2l6ZV90IF9fbikKICB7 IHJldHVybiB3bWVtY2hyKGNvbnN0X2Nhc3Q8Y29uc3Qgd2NoYXJfdCo+KF9fcCksIF9fYywgX19u KTsgfQp9CgoKCgoKCgpuYW1lc3BhY2UgX19nbnVfY3h4CnsKICB1c2luZyA6Ondjc3RvbGQ7CiAg dXNpbmcgOjp3Y3N0b2xsOwogIHVzaW5nIDo6d2NzdG91bGw7Cn0KCm5hbWVzcGFjZSBzdGQKewog IHVzaW5nIF9fZ251X2N4eDo6d2NzdG9sZDsKICB1c2luZyBfX2dudV9jeHg6Ondjc3RvbGw7CiAg dXNpbmcgX19nbnVfY3h4Ojp3Y3N0b3VsbDsKfQojIDQ2ICIvbm90bmZzL2ZjaGUvQlVJTEQtZ2Nj LW11ZGZsYXAvSU5TVC9pbmNsdWRlL2MrKy8zLjUtdHJlZS1zc2EvYml0cy9mcG9zLmgiIDIgMwoK bmFtZXNwYWNlIHN0ZAp7CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1N0YXRlVD4KICAgIGNs YXNzIGZwb3MKICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX1N0YXRlVCBfX3N0YXRl X3R5cGU7CgogICAgcHJpdmF0ZToKICAgICAgc3RyZWFtb2ZmIF9NX29mZjsKICAgICAgX19zdGF0 ZV90eXBlIF9NX3N0OwoKICAgIHB1YmxpYzoKICAgICAgX19zdGF0ZV90eXBlCiAgICAgIHN0YXRl KCkgY29uc3QgeyByZXR1cm4gX01fc3Q7IH0KCiAgICAgIHZvaWQKICAgICAgc3RhdGUoX19zdGF0 ZV90eXBlIF9fc3QpIHsgX01fc3QgPSBfX3N0OyB9CgoKCiAgICAgIGZwb3MoKTogX01fb2ZmKHN0 cmVhbW9mZigpKSwgX01fc3QoX19zdGF0ZV90eXBlKCkpIHsgfQoKICAgICAgZnBvcyhzdHJlYW1v ZmYgX19vZmYsIF9fc3RhdGVfdHlwZSBfX3N0ID0gX19zdGF0ZV90eXBlKCkpCiAgICAgIDogX01f b2ZmKF9fb2ZmKSwgX01fc3QoX19zdCkgeyB9CgogICAgICBvcGVyYXRvciBzdHJlYW1vZmYoKSBj b25zdCB7IHJldHVybiBfTV9vZmY7IH0KCiAgICAgIGZwb3MmCiAgICAgIG9wZXJhdG9yKz0oc3Ry ZWFtb2ZmIF9fb2ZmKSB7IF9NX29mZiArPSBfX29mZjsgcmV0dXJuICp0aGlzOyB9CgogICAgICBm cG9zJgogICAgICBvcGVyYXRvci09KHN0cmVhbW9mZiBfX29mZikgeyBfTV9vZmYgLT0gX19vZmY7 IHJldHVybiAqdGhpczsgfQoKICAgICAgZnBvcwogICAgICBvcGVyYXRvcisoc3RyZWFtb2ZmIF9f b2ZmKQogICAgICB7CiAgICAgICAgZnBvcyBfX3QoKnRoaXMpOwogICAgICAgIF9fdCArPSBfX29m ZjsKICAgICAgICByZXR1cm4gX190OwogICAgICB9CgogICAgICBmcG9zCiAgICAgIG9wZXJhdG9y LShzdHJlYW1vZmYgX19vZmYpCiAgICAgIHsKICAgICAgICBmcG9zIF9fdCgqdGhpcyk7CiAgICAg ICAgX190IC09IF9fb2ZmOwogICAgICAgIHJldHVybiBfX3Q7CiAgICAgIH0KCiAgICAgIGJvb2wK ICAgICAgb3BlcmF0b3I9PShjb25zdCBmcG9zJiBfX3BvcykgY29uc3QKICAgICAgeyByZXR1cm4g X01fb2ZmID09IF9fcG9zLl9NX29mZjsgfQoKICAgICAgYm9vbAogICAgICBvcGVyYXRvciE9KGNv bnN0IGZwb3MmIF9fcG9zKSBjb25zdAogICAgICB7IHJldHVybiBfTV9vZmYgIT0gX19wb3MuX01f b2ZmOyB9CgogICAgICBzdHJlYW1vZmYKICAgICAgX01fcG9zaXRpb24oKSBjb25zdCB7IHJldHVy biBfTV9vZmY7IH0KCiAgICAgIHZvaWQKICAgICAgX01fcG9zaXRpb24oc3RyZWFtb2ZmIF9fb2Zm KSB7IF9NX29mZiA9IF9fb2ZmOyB9CiAgICB9OwoKCiAgdHlwZWRlZiBmcG9zPG1ic3RhdGVfdD4g c3RyZWFtcG9zOwoKCiAgdHlwZWRlZiBmcG9zPG1ic3RhdGVfdD4gd3N0cmVhbXBvczsKCn0KIyA1 MCAiL25vdG5mcy9mY2hlL0JVSUxELWdjYy1tdWRmbGFwL0lOU1QvaW5jbHVkZS9jKysvMy41LXRy ZWUtc3NhL2lvc2Z3ZCIgMiAzCiMgMSAiL25vdG5mcy9mY2hlL0JVSUxELWdjYy1tdWRmbGFwL0lO U1QvaW5jbHVkZS9jKysvMy41LXRyZWUtc3NhL2JpdHMvZnVuY3RleGNlcHQuaCIgMSAzCiMgMzQg Ii9ub3RuZnMvZmNoZS9CVUlMRC1nY2MtbXVkZmxhcC9JTlNUL2luY2x1ZGUvYysrLzMuNS10cmVl LXNzYS9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDMKIyAxICIvbm90bmZzL2ZjaGUvQlVJTEQtZ2NjLW11 ZGZsYXAvSU5TVC9pbmNsdWRlL2MrKy8zLjUtdHJlZS1zc2EvZXhjZXB0aW9uX2RlZmluZXMuaCIg MSAzCiMgMzUgIi9ub3RuZnMvZmNoZS9CVUlMRC1nY2MtbXVkZmxhcC9JTlNUL2luY2x1ZGUvYysr LzMuNS10cmVlLXNzYS9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7Cgog IHZvaWQKICBfX3Rocm93X2JhZF9leGNlcHRpb24odm9pZCk7CgoKICB2b2lkCiAgX190aHJvd19i YWRfYWxsb2Modm9pZCk7CgoKICB2b2lkCiAgX190aHJvd19iYWRfY2FzdCh2b2lkKTsKCiAgdm9p ZAogIF9fdGhyb3dfYmFkX3R5cGVpZCh2b2lkKTsKCgogIHZvaWQKICBfX3Rocm93X2xvZ2ljX2Vy cm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X2RvbWFpbl9lcnJvcihjb25z dCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19pbnZhbGlkX2FyZ3VtZW50KGNvbnN0IGNo YXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X2xlbmd0aF9lcnJvcihjb25zdCBjaGFyKiBfX3Mp OwoKICB2b2lkCiAgX190aHJvd19vdXRfb2ZfcmFuZ2UoY29uc3QgY2hhciogX19zKTsKCiAgdm9p ZAogIF9fdGhyb3dfcnVudGltZV9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190 aHJvd19yYW5nZV9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19vdmVy Zmxvd19lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd191bmRlcmZsb3df ZXJyb3IoY29uc3QgY2hhciogX19zKTsKCgogIHZvaWQKICBfX3Rocm93X2lvc19mYWlsdXJlKGNv bnN0IGNoYXIqIF9fcyk7Cn0KIyA1MSAiL25vdG5mcy9mY2hlL0JVSUxELWdjYy1tdWRmbGFwL0lO U1QvaW5jbHVkZS9jKysvMy41LXRyZWUtc3NhL2lvc2Z3ZCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0 czxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX2lvczsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No YXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+CiAgICBjbGFzcyBi YXNpY19zdHJlYW1idWY7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry YWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgogICAgY2xhc3MgYmFzaWNfaXN0cmVhbTsKCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8 X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19vc3RyZWFtOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KICAgIGNsYXNz IGJhc2ljX2lvc3RyZWFtOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U cmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+LAogICAgICAgICAgICB0eXBlbmFtZSBfQWxsb2Mg PSBhbGxvY2F0b3I8X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19zdHJpbmdidWY7CgogIHRlbXBs YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFy VD4sCiAgICAgICAgICAgdHlwZW5hbWUgX0FsbG9jID0gYWxsb2NhdG9yPF9DaGFyVD4gPgogICAg Y2xhc3MgYmFzaWNfaXN0cmluZ3N0cmVhbTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0 eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiwKICAgICAgICAgICB0eXBlbmFt ZSBfQWxsb2MgPSBhbGxvY2F0b3I8X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19vc3RyaW5nc3Ry ZWFtOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFy X3RyYWl0czxfQ2hhclQ+LAogICAgICAgICAgIHR5cGVuYW1lIF9BbGxvYyA9IGFsbG9jYXRvcjxf Q2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX3N0cmluZ3N0cmVhbTsKCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+CiAgICBj bGFzcyBiYXNpY19maWxlYnVmOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l IF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX2lmc3RyZWFt OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3Ry YWl0czxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX29mc3RyZWFtOwoKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KICAg IGNsYXNzIGJhc2ljX2ZzdHJlYW07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h bWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgogICAgY2xhc3MgaXN0cmVhbWJ1Zl9p dGVyYXRvcjsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0g Y2hhcl90cmFpdHM8X0NoYXJUPiA+CiAgICBjbGFzcyBvc3RyZWFtYnVmX2l0ZXJhdG9yOwoKCgog IGNsYXNzIGlvc19iYXNlOwojIDEzNiAiL25vdG5mcy9mY2hlL0JVSUxELWdjYy1tdWRmbGFwL0lO U1QvaW5jbHVkZS9jKysvMy41LXRyZWUtc3NhL2lvc2Z3ZCIgMwogIHR5cGVkZWYgYmFzaWNfaW9z PGNoYXI+IGlvczsKICB0eXBlZGVmIGJhc2ljX3N0cmVhbWJ1ZjxjaGFyPiBzdHJlYW1idWY7CiAg dHlwZWRlZiBiYXNpY19pc3RyZWFtPGNoYXI+IGlzdHJlYW07CiAgdHlwZWRlZiBiYXNpY19vc3Ry ZWFtPGNoYXI+IG9zdHJlYW07CiAgdHlwZWRlZiBiYXNpY19pb3N0cmVhbTxjaGFyPiBpb3N0cmVh bTsKICB0eXBlZGVmIGJhc2ljX3N0cmluZ2J1ZjxjaGFyPiBzdHJpbmdidWY7CiAgdHlwZWRlZiBi YXNpY19pc3RyaW5nc3RyZWFtPGNoYXI+IGlzdHJpbmdzdHJlYW07CiAgdHlwZWRlZiBiYXNpY19v c3RyaW5nc3RyZWFtPGNoYXI+IG9zdHJpbmdzdHJlYW07CiAgdHlwZWRlZiBiYXNpY19zdHJpbmdz dHJlYW08Y2hhcj4gc3RyaW5nc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfZmlsZWJ1ZjxjaGFyPiBm aWxlYnVmOwogIHR5cGVkZWYgYmFzaWNfaWZzdHJlYW08Y2hhcj4gaWZzdHJlYW07CiAgdHlwZWRl ZiBiYXNpY19vZnN0cmVhbTxjaGFyPiBvZnN0cmVhbTsKICB0eXBlZGVmIGJhc2ljX2ZzdHJlYW08 Y2hhcj4gZnN0cmVhbTsKCgogIHR5cGVkZWYgYmFzaWNfaW9zPHdjaGFyX3Q+IHdpb3M7CiAgdHlw ZWRlZiBiYXNpY19zdHJlYW1idWY8d2NoYXJfdD4gd3N0cmVhbWJ1ZjsKICB0eXBlZGVmIGJhc2lj X2lzdHJlYW08d2NoYXJfdD4gd2lzdHJlYW07CiAgdHlwZWRlZiBiYXNpY19vc3RyZWFtPHdjaGFy X3Q+IHdvc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfaW9zdHJlYW08d2NoYXJfdD4gd2lvc3RyZWFt OwogIHR5cGVkZWYgYmFzaWNfc3RyaW5nYnVmPHdjaGFyX3Q+IHdzdHJpbmdidWY7CiAgdHlwZWRl ZiBiYXNpY19pc3RyaW5nc3RyZWFtPHdjaGFyX3Q+IHdpc3RyaW5nc3RyZWFtOwogIHR5cGVkZWYg YmFzaWNfb3N0cmluZ3N0cmVhbTx3Y2hhcl90PiB3b3N0cmluZ3N0cmVhbTsKICB0eXBlZGVmIGJh c2ljX3N0cmluZ3N0cmVhbTx3Y2hhcl90PiB3c3RyaW5nc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNf ZmlsZWJ1Zjx3Y2hhcl90PiB3ZmlsZWJ1ZjsKICB0eXBlZGVmIGJhc2ljX2lmc3RyZWFtPHdjaGFy X3Q+IHdpZnN0cmVhbTsKICB0eXBlZGVmIGJhc2ljX29mc3RyZWFtPHdjaGFyX3Q+IHdvZnN0cmVh bTsKICB0eXBlZGVmIGJhc2ljX2ZzdHJlYW08d2NoYXJfdD4gd2ZzdHJlYW07CgoKfQojIDcxICIv bm90bmZzL2ZjaGUvQlVJTEQtZ2NjLW11ZGZsYXAvSU5TVC9pbmNsdWRlL2MrKy8zLjUtdHJlZS1z c2EvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMiAzCiMgMSAiL25vdG5mcy9mY2hlL0JVSUxELWdjYy1t dWRmbGFwL0lOU1QvaW5jbHVkZS9jKysvMy41LXRyZWUtc3NhL2JpdHMvc3RsX3BhaXIuaCIgMSAz CiMgNjQgIi9ub3RuZnMvZmNoZS9CVUlMRC1nY2MtbXVkZmxhcC9JTlNUL2luY2x1ZGUvYysrLzMu NS10cmVlLXNzYS9iaXRzL3N0bF9wYWlyLmgiIDMKbmFtZXNwYWNlIHN0ZAp7CgoKdGVtcGxhdGUg PGNsYXNzIF9UMSwgY2xhc3MgX1QyPgpzdHJ1Y3QgcGFpciB7CiAgdHlwZWRlZiBfVDEgZmlyc3Rf dHlwZTsKICB0eXBlZGVmIF9UMiBzZWNvbmRfdHlwZTsKCiAgX1QxIGZpcnN0OwogIF9UMiBzZWNv bmQ7CgoKCgogIHBhaXIoKSA6IGZpcnN0KCksIHNlY29uZCgpIHt9CgoKCgogIHBhaXIoY29uc3Qg X1QxJiBfX2EsIGNvbnN0IF9UMiYgX19iKSA6IGZpcnN0KF9fYSksIHNlY29uZChfX2IpIHt9CgoK ICB0ZW1wbGF0ZSA8Y2xhc3MgX1UxLCBjbGFzcyBfVTI+CiAgcGFpcihjb25zdCBwYWlyPF9VMSwg X1UyPiYgX19wKSA6IGZpcnN0KF9fcC5maXJzdCksIHNlY29uZChfX3Auc2Vjb25kKSB7fQp9OwoK CnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4KaW5saW5lIGJvb2wgb3BlcmF0b3I9PShj b25zdCBwYWlyPF9UMSwgX1QyPiYgX194LCBjb25zdCBwYWlyPF9UMSwgX1QyPiYgX195KQp7CiAg cmV0dXJuIF9feC5maXJzdCA9PSBfX3kuZmlyc3QgJiYgX194LnNlY29uZCA9PSBfX3kuc2Vjb25k Owp9CgoKdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgppbmxpbmUgYm9vbCBvcGVyYXRv cjwoY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feCwgY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feSkK ewogIHJldHVybiBfX3guZmlyc3QgPCBfX3kuZmlyc3QgfHwKICAgICAgICAgKCEoX195LmZpcnN0 IDwgX194LmZpcnN0KSAmJiBfX3guc2Vjb25kIDwgX195LnNlY29uZCk7Cn0KCgp0ZW1wbGF0ZSA8 Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CmlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgcGFpcjxf VDEsIF9UMj4mIF9feCwgY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feSkgewogIHJldHVybiAhKF9f eCA9PSBfX3kpOwp9CgoKdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgppbmxpbmUgYm9v bCBvcGVyYXRvcj4oY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feCwgY29uc3QgcGFpcjxfVDEsIF9U Mj4mIF9feSkgewogIHJldHVybiBfX3kgPCBfX3g7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBj bGFzcyBfVDI+CmlubGluZSBib29sIG9wZXJhdG9yPD0oY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9f eCwgY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feSkgewogIHJldHVybiAhKF9feSA8IF9feCk7Cn0K Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CmlubGluZSBib29sIG9wZXJhdG9yPj0o Y29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feCwgY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feSkgewog IHJldHVybiAhKF9feCA8IF9feSk7Cn0KIyAxNDAgIi9ub3RuZnMvZmNoZS9CVUlMRC1nY2MtbXVk ZmxhcC9JTlNUL2luY2x1ZGUvYysrLzMuNS10cmVlLXNzYS9iaXRzL3N0bF9wYWlyLmgiIDMKdGVt cGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgoKCmlubGluZSBwYWlyPF9UMSwgX1QyPiBtYWtl X3BhaXIoX1QxIF9feCwgX1QyIF9feSkKCgoKewogIHJldHVybiBwYWlyPF9UMSwgX1QyPihfX3gs IF9feSk7Cn0KCn0KIyA3MiAiL25vdG5mcy9mY2hlL0JVSUxELWdjYy1tdWRmbGFwL0lOU1QvaW5j bHVkZS9jKysvMy41LXRyZWUtc3NhL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDIgMwojIDEgIi9ub3Ru ZnMvZmNoZS9CVUlMRC1nY2MtbXVkZmxhcC9JTlNUL2luY2x1ZGUvYysrLzMuNS10cmVlLXNzYS9i aXRzL3R5cGVfdHJhaXRzLmgiIDEgMwojIDUzICIvbm90bmZzL2ZjaGUvQlVJTEQtZ2NjLW11ZGZs YXAvSU5TVC9pbmNsdWRlL2MrKy8zLjUtdHJlZS1zc2EvYml0cy90eXBlX3RyYWl0cy5oIiAzCiMg OTAgIi9ub3RuZnMvZmNoZS9CVUlMRC1nY2MtbXVkZmxhcC9JTlNUL2luY2x1ZGUvYysrLzMuNS10 cmVlLXNzYS9iaXRzL3R5cGVfdHJhaXRzLmgiIDMKc3RydWN0IF9fdHJ1ZV90eXBlIHt9OwpzdHJ1 Y3QgX19mYWxzZV90eXBlIHt9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IF9fdHlwZV90 cmFpdHMgewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIHRoaXNfZHVtbXlfbWVtYmVyX211c3RfYmVf Zmlyc3Q7CiMgMTEzICIvbm90bmZzL2ZjaGUvQlVJTEQtZ2NjLW11ZGZsYXAvSU5TVC9pbmNsdWRl L2MrKy8zLjUtdHJlZS1zc2EvYml0cy90eXBlX3RyYWl0cy5oIiAzCiAgIHR5cGVkZWYgX19mYWxz ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX19mYWxz ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX19mYWxzZV90 eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX19mYWxzZV90 eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX19mYWxzZV90eXBlIGlzX1BP RF90eXBlOwp9OwoKCgoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czxib29sPiB7CiAg IHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAg dHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBl ZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVk ZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVf dHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8Y2hh cj4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0 b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsK ICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwog ICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYg X190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJh aXRzPHNpZ25lZCBjaGFyPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVm YXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5 X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1l bnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3Rv cjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gc3Ry dWN0IF9fdHlwZV90cmFpdHM8dW5zaWduZWQgY2hhcj4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBl IGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUg aGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNf dHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190 cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07 Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPHdjaGFyX3Q+IHsKICAgdHlwZWRlZiBf X3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9f dHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVl X3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVf dHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BP RF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czxzaG9ydD4gewogICB0 eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5 cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRl ZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVm IF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5 cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPHVuc2ln bmVkIHNob3J0PiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9j b25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0 cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3Bl cmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAg dHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9f dHlwZV90cmFpdHM8aW50PiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVm YXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5 X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1l bnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3Rv cjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gc3Ry dWN0IF9fdHlwZV90cmFpdHM8dW5zaWduZWQgaW50PiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUg aGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBo YXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190 cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3Ry aXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsK CnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8bG9uZz4gewogICB0eXBlZGVmIF9fdHJ1 ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVl X3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlw ZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBl IGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5 cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPHVuc2lnbmVkIGxvbmc+IHsK ICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwog ICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5 cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlw ZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1 ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czxs b25nIGxvbmc+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2Nv bnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3Ry dWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVy YXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0 eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190 eXBlX3RyYWl0czx1bnNpZ25lZCBsb25nIGxvbmc+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBo YXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhh c190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3Ry aXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJp dmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoK dGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czxmbG9hdD4gewogICB0eXBlZGVmIF9fdHJ1 ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVl X3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlw ZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBl IGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5 cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPGRvdWJsZT4gewogICB0eXBl ZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVk ZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBf X3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9f dHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUg aXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPGxvbmcgZG91 YmxlPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1 Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9y OwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7 CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRl ZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVj dCBfX3R5cGVfdHJhaXRzPF9UcCo+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlh bF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFs X2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNz aWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0 cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKCgoKCnRlbXBs YXRlIDxjbGFzcyBfVHA+IHN0cnVjdCBfSXNfaW50ZWdlciB7CiAgdHlwZWRlZiBfX2ZhbHNlX3R5 cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8Ym9vbD4gewog IHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lz X2ludGVnZXI8Y2hhcj4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVt cGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8c2lnbmVkIGNoYXI+IHsKICB0eXBlZGVmIF9fdHJ1 ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9Jc19pbnRlZ2VyPHVuc2ln bmVkIGNoYXI+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRl PD4gc3RydWN0IF9Jc19pbnRlZ2VyPHdjaGFyX3Q+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9J bnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9Jc19pbnRlZ2VyPHNob3J0PiB7CiAgdHlw ZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50 ZWdlcjx1bnNpZ25lZCBzaG9ydD4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9 OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8aW50PiB7CiAgdHlwZWRlZiBfX3RydWVf dHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjx1bnNpZ25l ZCBpbnQ+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4g c3RydWN0IF9Jc19pbnRlZ2VyPGxvbmc+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3Jh bDsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9Jc19pbnRlZ2VyPHVuc2lnbmVkIGxvbmc+IHsKICB0 eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9Jc19p bnRlZ2VyPGxvbmcgbG9uZz4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoK dGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8dW5zaWduZWQgbG9uZyBsb25nPiB7CiAgdHlw ZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IHN0 cnVjdCBfSXNfbm9ybWFsX2l0ZXJhdG9yIHsKICAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUgX05vcm1h bDsKfTsKCgpuYW1lc3BhY2UgX19nbnVfY3h4CnsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0 b3IsIHR5cGVuYW1lIF9Db250YWluZXI+IGNsYXNzIF9fbm9ybWFsX2l0ZXJhdG9yOwp9Cgp0ZW1w bGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3IsIHR5cGVuYW1lIF9Db250YWluZXI+CnN0cnVjdCBfSXNf bm9ybWFsX2l0ZXJhdG9yPCBfX2dudV9jeHg6Ol9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwg X0NvbnRhaW5lcj4gPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgX05vcm1hbDsKfTsKIyA3MyAi L25vdG5mcy9mY2hlL0JVSUxELWdjYy1tdWRmbGFwL0lOU1QvaW5jbHVkZS9jKysvMy41LXRyZWUt c3NhL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDIgMwojIDEgIi9ub3RuZnMvZmNoZS9CVUlMRC1nY2Mt bXVkZmxhcC9JTlNUL2luY2x1ZGUvYysrLzMuNS10cmVlLXNzYS9iaXRzL3N0bF9pdGVyYXRvcl9i YXNlX3R5cGVzLmgiIDEgMwojIDY4ICIvbm90bmZzL2ZjaGUvQlVJTEQtZ2NjLW11ZGZsYXAvSU5T VC9pbmNsdWRlL2MrKy8zLjUtdHJlZS1zc2EvYml0cy9zdGxfaXRlcmF0b3JfYmFzZV90eXBlcy5o IiAzCgpuYW1lc3BhY2Ugc3RkCnsKIyA4MCAiL25vdG5mcy9mY2hlL0JVSUxELWdjYy1tdWRmbGFw L0lOU1QvaW5jbHVkZS9jKysvMy41LXRyZWUtc3NhL2JpdHMvc3RsX2l0ZXJhdG9yX2Jhc2VfdHlw ZXMuaCIgMwogIHN0cnVjdCBpbnB1dF9pdGVyYXRvcl90YWcge307CgogIHN0cnVjdCBvdXRwdXRf aXRlcmF0b3JfdGFnIHt9OwoKICBzdHJ1Y3QgZm9yd2FyZF9pdGVyYXRvcl90YWcgOiBwdWJsaWMg aW5wdXRfaXRlcmF0b3JfdGFnIHt9OwoKICBzdHJ1Y3QgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90 YWcgOiBwdWJsaWMgZm9yd2FyZF9pdGVyYXRvcl90YWcge307CgogIHN0cnVjdCByYW5kb21fYWNj ZXNzX2l0ZXJhdG9yX3RhZyA6IHB1YmxpYyBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZyB7fTsK IyAxMDIgIi9ub3RuZnMvZmNoZS9CVUlMRC1nY2MtbXVkZmxhcC9JTlNUL2luY2x1ZGUvYysrLzMu NS10cmVlLXNzYS9iaXRzL3N0bF9pdGVyYXRvcl9iYXNlX3R5cGVzLmgiIDMKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfQ2F0ZWdvcnksIHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0Rpc3RhbmNlID0gcHRy ZGlmZl90LAogICAgICAgICAgIHR5cGVuYW1lIF9Qb2ludGVyID0gX1RwKiwgdHlwZW5hbWUgX1Jl ZmVyZW5jZSA9IF9UcCY+CiAgICBzdHJ1Y3QgaXRlcmF0b3IKICAgIHsKCiAgICAgIHR5cGVkZWYg X0NhdGVnb3J5IGl0ZXJhdG9yX2NhdGVnb3J5OwoKICAgICAgdHlwZWRlZiBfVHAgdmFsdWVfdHlw ZTsKCiAgICAgIHR5cGVkZWYgX0Rpc3RhbmNlIGRpZmZlcmVuY2VfdHlwZTsKCiAgICAgIHR5cGVk ZWYgX1BvaW50ZXIgcG9pbnRlcjsKCiAgICAgIHR5cGVkZWYgX1JlZmVyZW5jZSByZWZlcmVuY2U7 CiAgICB9OwoKCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3I+CiAgICBzdHJ1Y3Qg aXRlcmF0b3JfdHJhaXRzIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSXRlcmF0b3I6Oml0ZXJh dG9yX2NhdGVnb3J5IGl0ZXJhdG9yX2NhdGVnb3J5OwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9J dGVyYXRvcjo6dmFsdWVfdHlwZSB2YWx1ZV90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9J dGVyYXRvcjo6ZGlmZmVyZW5jZV90eXBlIGRpZmZlcmVuY2VfdHlwZTsKICAgICAgdHlwZWRlZiB0 eXBlbmFtZSBfSXRlcmF0b3I6OnBvaW50ZXIgcG9pbnRlcjsKICAgICAgdHlwZWRlZiB0eXBlbmFt ZSBfSXRlcmF0b3I6OnJlZmVyZW5jZSByZWZlcmVuY2U7CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfVHA+CiAgICBzdHJ1Y3QgaXRlcmF0b3JfdHJhaXRzPF9UcCo+IHsKICAgICAgdHlwZWRl ZiByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKICAgICAgdHlw ZWRlZiBfVHAgdmFsdWVfdHlwZTsKICAgICAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90 eXBlOwogICAgICB0eXBlZGVmIF9UcCogcG9pbnRlcjsKICAgICAgdHlwZWRlZiBfVHAmIHJlZmVy ZW5jZTsKICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIHN0cnVjdCBpdGVyYXRv cl90cmFpdHM8Y29uc3QgX1RwKj4gewogICAgICB0eXBlZGVmIHJhbmRvbV9hY2Nlc3NfaXRlcmF0 b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwogICAgICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBlOwog ICAgICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CiAgICAgIHR5cGVkZWYgY29u c3QgX1RwKiBwb2ludGVyOwogICAgICB0eXBlZGVmIGNvbnN0IF9UcCYgcmVmZXJlbmNlOwogICAg fTsKCgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXI+CiAgICBpbmxpbmUgdHlwZW5hbWUg aXRlcmF0b3JfdHJhaXRzPF9JdGVyPjo6aXRlcmF0b3JfY2F0ZWdvcnkKICAgIF9faXRlcmF0b3Jf Y2F0ZWdvcnkoY29uc3QgX0l0ZXImKQogICAgeyByZXR1cm4gdHlwZW5hbWUgaXRlcmF0b3JfdHJh aXRzPF9JdGVyPjo6aXRlcmF0b3JfY2F0ZWdvcnkoKTsgfQoKfQojIDc0ICIvbm90bmZzL2ZjaGUv QlVJTEQtZ2NjLW11ZGZsYXAvSU5TVC9pbmNsdWRlL2MrKy8zLjUtdHJlZS1zc2EvYml0cy9zdGxf YWxnb2Jhc2UuaCIgMiAzCiMgMSAiL25vdG5mcy9mY2hlL0JVSUxELWdjYy1tdWRmbGFwL0lOU1Qv aW5jbHVkZS9jKysvMy41LXRyZWUtc3NhL2JpdHMvc3RsX2l0ZXJhdG9yX2Jhc2VfZnVuY3MuaCIg MSAzCiMgNjggIi9ub3RuZnMvZmNoZS9CVUlMRC1nY2MtbXVkZmxhcC9JTlNUL2luY2x1ZGUvYysr LzMuNS10cmVlLXNzYS9iaXRzL3N0bF9pdGVyYXRvcl9iYXNlX2Z1bmNzLmgiIDMKIyAxICIvbm90 bmZzL2ZjaGUvQlVJTEQtZ2NjLW11ZGZsYXAvSU5TVC9pbmNsdWRlL2MrKy8zLjUtdHJlZS1zc2Ev Yml0cy9jb25jZXB0X2NoZWNrLmgiIDEgMwojIDM5ICIvbm90bmZzL2ZjaGUvQlVJTEQtZ2NjLW11 ZGZsYXAvSU5TVC9pbmNsdWRlL2MrKy8zLjUtdHJlZS1zc2EvYml0cy9jb25jZXB0X2NoZWNrLmgi IDMKIyA2OSAiL25vdG5mcy9mY2hlL0JVSUxELWdjYy1tdWRmbGFwL0lOU1QvaW5jbHVkZS9jKysv My41LXRyZWUtc3NhL2JpdHMvc3RsX2l0ZXJhdG9yX2Jhc2VfZnVuY3MuaCIgMiAzCgpuYW1lc3Bh Y2Ugc3RkCnsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcj4KICAgIGlubGluZSB0 eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUK ICAgIF9fZGlzdGFuY2UoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19s YXN0LAogICAgICAgICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcpCiAgICB7CgogICAgIAoKICAg ICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90 eXBlIF9fbiA9IDA7CiAgICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkgewogICAgICAgICsr X19maXJzdDsgKytfX247CiAgICAgIH0KICAgICAgcmV0dXJuIF9fbjsKICAgIH0KCiAgdGVtcGxh dGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPgogICAgaW5saW5lIHR5cGVuYW1lIGl0 ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUKICAg IF9fZGlzdGFuY2UoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJ dGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFn KQogICAgewoKICAgICAKICAgICAgcmV0dXJuIF9fbGFzdCAtIF9fZmlyc3Q7CiAgICB9CiMgMTA5 ICIvbm90bmZzL2ZjaGUvQlVJTEQtZ2NjLW11ZGZsYXAvSU5TVC9pbmNsdWRlL2MrKy8zLjUtdHJl ZS1zc2EvYml0cy9zdGxfaXRlcmF0b3JfYmFzZV9mdW5jcy5oIiAzCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0lucHV0SXRlcmF0b3I+CiAgICBpbmxpbmUgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9J bnB1dEl0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlCiAgICBkaXN0YW5jZShfSW5wdXRJdGVyYXRv ciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpCiAgICB7CgogICAgICByZXR1cm4gX19k aXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QsIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdCkpOwog ICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfRGlzdGFuY2U+ CiAgICBpbmxpbmUgdm9pZAogICAgX19hZHZhbmNlKF9JbnB1dEl0ZXImIF9faSwgX0Rpc3RhbmNl IF9fbiwgaW5wdXRfaXRlcmF0b3JfdGFnKQogICAgewoKICAgICAKICAgICAgd2hpbGUgKF9fbi0t KSArK19faTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyYXRv ciwgdHlwZW5hbWUgX0Rpc3RhbmNlPgogICAgaW5saW5lIHZvaWQKICAgIF9fYWR2YW5jZShfQmlk aXJlY3Rpb25hbEl0ZXJhdG9yJiBfX2ksIF9EaXN0YW5jZSBfX24sCiAgICAgICAgICAgICAgYmlk aXJlY3Rpb25hbF9pdGVyYXRvcl90YWcpCiAgICB7CgogICAgIAoKICAgICAgaWYgKF9fbiA+IDAp CiAgICAgICAgd2hpbGUgKF9fbi0tKSArK19faTsKICAgICAgZWxzZQogICAgICAgIHdoaWxlIChf X24rKykgLS1fX2k7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVy YXRvciwgdHlwZW5hbWUgX0Rpc3RhbmNlPgogICAgaW5saW5lIHZvaWQKICAgIF9fYWR2YW5jZShf UmFuZG9tQWNjZXNzSXRlcmF0b3ImIF9faSwgX0Rpc3RhbmNlIF9fbiwKICAgICAgICAgICAgICBy YW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykKICAgIHsKCiAgICAgCiAgICAgIF9faSArPSBfX247 CiAgICB9CiMgMTYyICIvbm90bmZzL2ZjaGUvQlVJTEQtZ2NjLW11ZGZsYXAvSU5TVC9pbmNsdWRl L2MrKy8zLjUtdHJlZS1zc2EvYml0cy9zdGxfaXRlcmF0b3JfYmFzZV9mdW5jcy5oIiAzCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3IsIHR5cGVuYW1lIF9EaXN0YW5jZT4KICAgIGlu bGluZSB2b2lkCiAgICBhZHZhbmNlKF9JbnB1dEl0ZXJhdG9yJiBfX2ksIF9EaXN0YW5jZSBfX24p CiAgICB7CgogICAgICBfX2FkdmFuY2UoX19pLCBfX24sIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19p KSk7CiAgICB9Cn0KIyA3NSAiL25vdG5mcy9mY2hlL0JVSUxELWdjYy1tdWRmbGFwL0lOU1QvaW5j bHVkZS9jKysvMy41LXRyZWUtc3NhL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDIgMwojIDEgIi9ub3Ru ZnMvZmNoZS9CVUlMRC1nY2MtbXVkZmxhcC9JTlNUL2luY2x1ZGUvYysrLzMuNS10cmVlLXNzYS9i aXRzL3N0bF9pdGVyYXRvci5oIiAxIDMKIyA2OCAiL25vdG5mcy9mY2hlL0JVSUxELWdjYy1tdWRm bGFwL0lOU1QvaW5jbHVkZS9jKysvMy41LXRyZWUtc3NhL2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDMK bmFtZXNwYWNlIHN0ZAp7CiMgODkgIi9ub3RuZnMvZmNoZS9CVUlMRC1nY2MtbXVkZmxhcC9JTlNU L2luY2x1ZGUvYysrLzMuNS10cmVlLXNzYS9iaXRzL3N0bF9pdGVyYXRvci5oIiAzCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0l0ZXJhdG9yPgogICAgY2xhc3MgcmV2ZXJzZV9pdGVyYXRvcgogICAgOiBw dWJsaWMgaXRlcmF0b3I8dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46Oml0ZXJh dG9yX2NhdGVnb3J5LAogICAgICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJh aXRzPF9JdGVyYXRvcj46OnZhbHVlX3R5cGUsCiAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFt ZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlLAogICAgICAgICAg ICAgICAgICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OnBvaW50ZXIs CiAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9y Pjo6cmVmZXJlbmNlPgogICAgewogICAgcHJvdGVjdGVkOgogICAgICBfSXRlcmF0b3IgY3VycmVu dDsKCiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgX0l0ZXJhdG9yIGl0ZXJhdG9yX3R5cGU7CiAg ICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OmRpZmZlcmVu Y2VfdHlwZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBkaWZmZXJlbmNlX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRl cmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OnJlZmVyZW5jZSByZWZlcmVuY2U7CiAgICAgIHR5cGVk ZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OnBvaW50ZXIgcG9pbnRlcjsK CiAgICBwdWJsaWM6CgoKCiAgICAgIHJldmVyc2VfaXRlcmF0b3IoKSB7IH0KCgoKCiAgICAgIGV4 cGxpY2l0CiAgICAgIHJldmVyc2VfaXRlcmF0b3IoaXRlcmF0b3JfdHlwZSBfX3gpIDogY3VycmVu dChfX3gpIHsgfQoKCgoKICAgICAgcmV2ZXJzZV9pdGVyYXRvcihjb25zdCByZXZlcnNlX2l0ZXJh dG9yJiBfX3gpCiAgICAgIDogY3VycmVudChfX3guY3VycmVudCkgeyB9CgoKCgoKICAgICAgdGVt cGxhdGU8dHlwZW5hbWUgX0l0ZXI+CiAgICAgICAgcmV2ZXJzZV9pdGVyYXRvcihjb25zdCByZXZl cnNlX2l0ZXJhdG9yPF9JdGVyPiYgX194KQogICAgICAgIDogY3VycmVudChfX3guYmFzZSgpKSB7 IH0KCgoKCiAgICAgIGl0ZXJhdG9yX3R5cGUKICAgICAgYmFzZSgpIGNvbnN0IHsgcmV0dXJuIGN1 cnJlbnQ7IH0KCgoKCgoKICAgICAgcmVmZXJlbmNlCiAgICAgIG9wZXJhdG9yKigpIGNvbnN0CiAg ICAgIHsKICAgICAgICBfSXRlcmF0b3IgX190bXAgPSBjdXJyZW50OwogICAgICAgIHJldHVybiAq LS1fX3RtcDsKICAgICAgfQoKCgoKCgogICAgICBwb2ludGVyCiAgICAgIG9wZXJhdG9yLT4oKSBj b25zdCB7IHJldHVybiAmKG9wZXJhdG9yKigpKTsgfQoKCgoKCgogICAgICByZXZlcnNlX2l0ZXJh dG9yJgogICAgICBvcGVyYXRvcisrKCkKICAgICAgewogICAgICAgIC0tY3VycmVudDsKICAgICAg ICByZXR1cm4gKnRoaXM7CiAgICAgIH0KCgoKCgoKICAgICAgcmV2ZXJzZV9pdGVyYXRvcgogICAg ICBvcGVyYXRvcisrKGludCkKICAgICAgewogICAgICAgIHJldmVyc2VfaXRlcmF0b3IgX190bXAg PSAqdGhpczsKICAgICAgICAtLWN1cnJlbnQ7CiAgICAgICAgcmV0dXJuIF9fdG1wOwogICAgICB9 CgoKCgoKCiAgICAgIHJldmVyc2VfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yLS0oKQogICAgICB7 CiAgICAgICAgKytjdXJyZW50OwogICAgICAgIHJldHVybiAqdGhpczsKICAgICAgfQoKCgoKCgog ICAgICByZXZlcnNlX2l0ZXJhdG9yIG9wZXJhdG9yLS0oaW50KQogICAgICB7CiAgICAgICAgcmV2 ZXJzZV9pdGVyYXRvciBfX3RtcCA9ICp0aGlzOwogICAgICAgICsrY3VycmVudDsKICAgICAgICBy ZXR1cm4gX190bXA7CiAgICAgIH0KCgoKCgoKICAgICAgcmV2ZXJzZV9pdGVyYXRvcgogICAgICBv cGVyYXRvcisoZGlmZmVyZW5jZV90eXBlIF9fbikgY29uc3QKICAgICAgeyByZXR1cm4gcmV2ZXJz ZV9pdGVyYXRvcihjdXJyZW50IC0gX19uKTsgfQoKCgoKCgogICAgICByZXZlcnNlX2l0ZXJhdG9y JgogICAgICBvcGVyYXRvcis9KGRpZmZlcmVuY2VfdHlwZSBfX24pCiAgICAgIHsKICAgICAgICBj dXJyZW50IC09IF9fbjsKICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgIH0KCgoKCgoKICAgICAg cmV2ZXJzZV9pdGVyYXRvcgogICAgICBvcGVyYXRvci0oZGlmZmVyZW5jZV90eXBlIF9fbikgY29u c3QKICAgICAgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihjdXJyZW50ICsgX19uKTsgfQoKCgoK CgogICAgICByZXZlcnNlX2l0ZXJhdG9yJgogICAgICBvcGVyYXRvci09KGRpZmZlcmVuY2VfdHlw ZSBfX24pCiAgICAgIHsKICAgICAgICBjdXJyZW50ICs9IF9fbjsKICAgICAgICByZXR1cm4gKnRo aXM7CiAgICAgIH0KCgoKCgoKICAgICAgcmVmZXJlbmNlCiAgICAgIG9wZXJhdG9yW10oZGlmZmVy ZW5jZV90eXBlIF9fbikgY29uc3QgeyByZXR1cm4gKigqdGhpcyArIF9fbik7IH0KICAgIH07CiMg MjY5ICIvbm90bmZzL2ZjaGUvQlVJTEQtZ2NjLW11ZGZsYXAvSU5TVC9pbmNsdWRlL2MrKy8zLjUt dHJlZS1zc2EvYml0cy9zdGxfaXRlcmF0b3IuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVy YXRvcj4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj09KGNvbnN0IHJldmVyc2VfaXRlcmF0 b3I8X0l0ZXJhdG9yPiYgX194LAogICAgICAgICAgICAgICBjb25zdCByZXZlcnNlX2l0ZXJhdG9y PF9JdGVyYXRvcj4mIF9feSkKICAgIHsgcmV0dXJuIF9feC5iYXNlKCkgPT0gX195LmJhc2UoKTsg fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3I+CiAgICBpbmxpbmUgYm9vbAogICAgb3Bl cmF0b3I8KGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX194LAogICAgICAgICAg ICAgIGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX195KQogICAgeyByZXR1cm4g X195LmJhc2UoKSA8IF9feC5iYXNlKCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9y PgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yIT0oY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxf SXRlcmF0b3I+JiBfX3gsCiAgICAgICAgICAgICAgIGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0 ZXJhdG9yPiYgX195KQogICAgeyByZXR1cm4gIShfX3ggPT0gX195KTsgfQoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfSXRlcmF0b3I+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I+KGNvbnN0IHJl dmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX194LAogICAgICAgICAgICAgIGNvbnN0IHJldmVy c2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX195KQogICAgeyByZXR1cm4gX195IDwgX194OyB9Cgog IHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvcj4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRv cjw9KGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX194LAogICAgICAgICAgICAg ICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3kpCiAgICB7IHJldHVybiAh KF9feSA8IF9feCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yPgogICAgaW5saW5l IGJvb2wKICAgIG9wZXJhdG9yPj0oY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBf X3gsCiAgICAgICAgICAgICAgIGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX195 KQogICAgeyByZXR1cm4gIShfX3ggPCBfX3kpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVy YXRvcj4KICAgIGlubGluZSB0eXBlbmFtZSByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj46OmRp ZmZlcmVuY2VfdHlwZQogICAgb3BlcmF0b3ItKGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJh dG9yPiYgX194LAogICAgICAgICAgICAgIGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9y PiYgX195KQogICAgeyByZXR1cm4gX195LmJhc2UoKSAtIF9feC5iYXNlKCk7IH0KCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0l0ZXJhdG9yPgogICAgaW5saW5lIHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJh dG9yPgogICAgb3BlcmF0b3IrKHR5cGVuYW1lIHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPjo6 ZGlmZmVyZW5jZV90eXBlIF9fbiwKICAgICAgICAgICAgICBjb25zdCByZXZlcnNlX2l0ZXJhdG9y PF9JdGVyYXRvcj4mIF9feCkKICAgIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9y PihfX3guYmFzZSgpIC0gX19uKTsgfQojIDMyOSAiL25vdG5mcy9mY2hlL0JVSUxELWdjYy1tdWRm bGFwL0lOU1QvaW5jbHVkZS9jKysvMy41LXRyZWUtc3NhL2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDMK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ29udGFpbmVyPgogICAgY2xhc3MgYmFja19pbnNlcnRfaXRl cmF0b3IKICAgIDogcHVibGljIGl0ZXJhdG9yPG91dHB1dF9pdGVyYXRvcl90YWcsIHZvaWQsIHZv aWQsIHZvaWQsIHZvaWQ+CiAgICB7CiAgICBwcm90ZWN0ZWQ6CiAgICAgIF9Db250YWluZXIqIGNv bnRhaW5lcjsKCiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9Db250YWluZXIgY29udGFpbmVy X3R5cGU7CgoKICAgICAgZXhwbGljaXQKICAgICAgYmFja19pbnNlcnRfaXRlcmF0b3IoX0NvbnRh aW5lciYgX194KSA6IGNvbnRhaW5lcigmX194KSB7IH0KIyAzNTUgIi9ub3RuZnMvZmNoZS9CVUlM RC1nY2MtbXVkZmxhcC9JTlNUL2luY2x1ZGUvYysrLzMuNS10cmVlLXNzYS9iaXRzL3N0bF9pdGVy YXRvci5oIiAzCiAgICAgIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yJgogICAgICBvcGVyYXRvcj0odHlw ZW5hbWUgX0NvbnRhaW5lcjo6Y29uc3RfcmVmZXJlbmNlIF9fdmFsdWUpCiAgICAgIHsKICAgICAg ICBjb250YWluZXItPnB1c2hfYmFjayhfX3ZhbHVlKTsKICAgICAgICByZXR1cm4gKnRoaXM7CiAg ICAgIH0KCgogICAgICBiYWNrX2luc2VydF9pdGVyYXRvciYKICAgICAgb3BlcmF0b3IqKCkgeyBy ZXR1cm4gKnRoaXM7IH0KCgogICAgICBiYWNrX2luc2VydF9pdGVyYXRvciYKICAgICAgb3BlcmF0 b3IrKygpIHsgcmV0dXJuICp0aGlzOyB9CgoKICAgICAgYmFja19pbnNlcnRfaXRlcmF0b3IKICAg ICAgb3BlcmF0b3IrKyhpbnQpIHsgcmV0dXJuICp0aGlzOyB9CiAgICB9OwojIDM4NiAiL25vdG5m cy9mY2hlL0JVSUxELWdjYy1tdWRmbGFwL0lOU1QvaW5jbHVkZS9jKysvMy41LXRyZWUtc3NhL2Jp dHMvc3RsX2l0ZXJhdG9yLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ29udGFpbmVyPgogICAg aW5saW5lIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+CiAgICBiYWNrX2luc2VydGVy KF9Db250YWluZXImIF9feCkKICAgIHsgcmV0dXJuIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yPF9Db250 YWluZXI+KF9feCk7IH0KIyA0MDEgIi9ub3RuZnMvZmNoZS9CVUlMRC1nY2MtbXVkZmxhcC9JTlNU L2luY2x1ZGUvYysrLzMuNS10cmVlLXNzYS9iaXRzL3N0bF9pdGVyYXRvci5oIiAzCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0NvbnRhaW5lcj4KICAgIGNsYXNzIGZyb250X2luc2VydF9pdGVyYXRvcgog ICAgOiBwdWJsaWMgaXRlcmF0b3I8b3V0cHV0X2l0ZXJhdG9yX3RhZywgdm9pZCwgdm9pZCwgdm9p ZCwgdm9pZD4KICAgIHsKICAgIHByb3RlY3RlZDoKICAgICAgX0NvbnRhaW5lciogY29udGFpbmVy OwoKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NvbnRhaW5lciBjb250YWluZXJfdHlwZTsK CgogICAgICBleHBsaWNpdCBmcm9udF9pbnNlcnRfaXRlcmF0b3IoX0NvbnRhaW5lciYgX194KSA6 IGNvbnRhaW5lcigmX194KSB7IH0KIyA0MjYgIi9ub3RuZnMvZmNoZS9CVUlMRC1nY2MtbXVkZmxh cC9JTlNUL2luY2x1ZGUvYysrLzMuNS10cmVlLXNzYS9iaXRzL3N0bF9pdGVyYXRvci5oIiAzCiAg ICAgIGZyb250X2luc2VydF9pdGVyYXRvciYKICAgICAgb3BlcmF0b3I9KHR5cGVuYW1lIF9Db250 YWluZXI6OmNvbnN0X3JlZmVyZW5jZSBfX3ZhbHVlKQogICAgICB7CiAgICAgICAgY29udGFpbmVy LT5wdXNoX2Zyb250KF9fdmFsdWUpOwogICAgICAgIHJldHVybiAqdGhpczsKICAgICAgfQoKCiAg ICAgIGZyb250X2luc2VydF9pdGVyYXRvciYKICAgICAgb3BlcmF0b3IqKCkgeyByZXR1cm4gKnRo aXM7IH0KCgogICAgICBmcm9udF9pbnNlcnRfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yKysoKSB7 IHJldHVybiAqdGhpczsgfQoKCiAgICAgIGZyb250X2luc2VydF9pdGVyYXRvcgogICAgICBvcGVy YXRvcisrKGludCkgeyByZXR1cm4gKnRoaXM7IH0KICAgIH07CiMgNDU3ICIvbm90bmZzL2ZjaGUv QlVJTEQtZ2NjLW11ZGZsYXAvSU5TVC9pbmNsdWRlL2MrKy8zLjUtdHJlZS1zc2EvYml0cy9zdGxf aXRlcmF0b3IuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Db250YWluZXI+CiAgICBpbmxpbmUg ZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+CiAgICBmcm9udF9pbnNlcnRlcihfQ29u dGFpbmVyJiBfX3gpCiAgICB7IHJldHVybiBmcm9udF9pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5l cj4oX194KTsgfQojIDQ3NiAiL25vdG5mcy9mY2hlL0JVSUxELWdjYy1tdWRmbGFwL0lOU1QvaW5j bHVkZS9jKysvMy41LXRyZWUtc3NhL2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDMKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfQ29udGFpbmVyPgogICAgY2xhc3MgaW5zZXJ0X2l0ZXJhdG9yCiAgICA6IHB1Ymxp YyBpdGVyYXRvcjxvdXRwdXRfaXRlcmF0b3JfdGFnLCB2b2lkLCB2b2lkLCB2b2lkLCB2b2lkPgog ICAgewogICAgcHJvdGVjdGVkOgogICAgICBfQ29udGFpbmVyKiBjb250YWluZXI7CiAgICAgIHR5 cGVuYW1lIF9Db250YWluZXI6Oml0ZXJhdG9yIGl0ZXI7CgogICAgcHVibGljOgoKICAgICAgdHlw ZWRlZiBfQ29udGFpbmVyIGNvbnRhaW5lcl90eXBlOwoKCgoKCiAgICAgIGluc2VydF9pdGVyYXRv cihfQ29udGFpbmVyJiBfX3gsIHR5cGVuYW1lIF9Db250YWluZXI6Oml0ZXJhdG9yIF9faSkKICAg ICAgOiBjb250YWluZXIoJl9feCksIGl0ZXIoX19pKSB7fQojIDUxOCAiL25vdG5mcy9mY2hlL0JV SUxELWdjYy1tdWRmbGFwL0lOU1QvaW5jbHVkZS9jKysvMy41LXRyZWUtc3NhL2JpdHMvc3RsX2l0 ZXJhdG9yLmgiIDMKICAgICAgaW5zZXJ0X2l0ZXJhdG9yJgogICAgICBvcGVyYXRvcj0oY29uc3Qg dHlwZW5hbWUgX0NvbnRhaW5lcjo6Y29uc3RfcmVmZXJlbmNlIF9fdmFsdWUpCiAgICAgIHsKICAg ICAgICBpdGVyID0gY29udGFpbmVyLT5pbnNlcnQoaXRlciwgX192YWx1ZSk7CiAgICAgICAgKytp dGVyOwogICAgICAgIHJldHVybiAqdGhpczsKICAgICAgfQoKCiAgICAgIGluc2VydF9pdGVyYXRv ciYKICAgICAgb3BlcmF0b3IqKCkgeyByZXR1cm4gKnRoaXM7IH0KCgogICAgICBpbnNlcnRfaXRl cmF0b3ImCiAgICAgIG9wZXJhdG9yKysoKSB7IHJldHVybiAqdGhpczsgfQoKCiAgICAgIGluc2Vy dF9pdGVyYXRvciYKICAgICAgb3BlcmF0b3IrKyhpbnQpIHsgcmV0dXJuICp0aGlzOyB9CiAgICB9 OwojIDU1MCAiL25vdG5mcy9mY2hlL0JVSUxELWdjYy1tdWRmbGFwL0lOU1QvaW5jbHVkZS9jKysv My41LXRyZWUtc3NhL2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf Q29udGFpbmVyLCB0eXBlbmFtZSBfSXRlcmF0b3I+CiAgICBpbmxpbmUgaW5zZXJ0X2l0ZXJhdG9y PF9Db250YWluZXI+CiAgICBpbnNlcnRlcihfQ29udGFpbmVyJiBfX3gsIF9JdGVyYXRvciBfX2kp CiAgICB7CiAgICAgIHJldHVybiBpbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4oX194LAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIF9Db250YWluZXI6 Oml0ZXJhdG9yKF9faSkpOwogICAgfQp9CgpuYW1lc3BhY2UgX19nbnVfY3h4CnsKCgoKCgoKCiAg dXNpbmcgc3RkOjppdGVyYXRvcl90cmFpdHM7CiAgdXNpbmcgc3RkOjppdGVyYXRvcjsKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3IsIHR5cGVuYW1lIF9Db250YWluZXI+CiAgICBjbGFzcyBf X25vcm1hbF9pdGVyYXRvcgogICAgICA6IHB1YmxpYyBpdGVyYXRvcjx0eXBlbmFtZSBpdGVyYXRv cl90cmFpdHM8X0l0ZXJhdG9yPjo6aXRlcmF0b3JfY2F0ZWdvcnksCiAgICAgICAgICAgICAgICAg ICAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+Ojp2YWx1ZV90eXBlLAog ICAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9y Pjo6ZGlmZmVyZW5jZV90eXBlLAogICAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBpdGVy YXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6cG9pbnRlciwKICAgICAgICAgICAgICAgICAgICAgICAg dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OnJlZmVyZW5jZT4KICAgIHsKICAg IHByb3RlY3RlZDoKICAgICAgX0l0ZXJhdG9yIF9NX2N1cnJlbnQ7CgogICAgcHVibGljOgogICAg ICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+OjpkaWZmZXJlbmNl X3R5cGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgZGlmZmVyZW5jZV90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJh dG9yX3RyYWl0czxfSXRlcmF0b3I+OjpyZWZlcmVuY2UgcmVmZXJlbmNlOwogICAgICB0eXBlZGVm IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+Ojpwb2ludGVyIHBvaW50ZXI7Cgog ICAgICBfX25vcm1hbF9pdGVyYXRvcigpIDogX01fY3VycmVudChfSXRlcmF0b3IoKSkgeyB9Cgog ICAgICBleHBsaWNpdAogICAgICBfX25vcm1hbF9pdGVyYXRvcihjb25zdCBfSXRlcmF0b3ImIF9f aSkgOiBfTV9jdXJyZW50KF9faSkgeyB9CgoKICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXI+ CiAgICAgIGlubGluZSBfX25vcm1hbF9pdGVyYXRvcihjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxf SXRlciwgX0NvbnRhaW5lcj4mIF9faSkKICAgICAgICA6IF9NX2N1cnJlbnQoX19pLmJhc2UoKSkg eyB9CgoKICAgICAgcmVmZXJlbmNlCiAgICAgIG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJuICpf TV9jdXJyZW50OyB9CgogICAgICBwb2ludGVyCiAgICAgIG9wZXJhdG9yLT4oKSBjb25zdCB7IHJl dHVybiBfTV9jdXJyZW50OyB9CgogICAgICBfX25vcm1hbF9pdGVyYXRvciYKICAgICAgb3BlcmF0 b3IrKygpIHsgKytfTV9jdXJyZW50OyByZXR1cm4gKnRoaXM7IH0KCiAgICAgIF9fbm9ybWFsX2l0 ZXJhdG9yCiAgICAgIG9wZXJhdG9yKysoaW50KSB7IHJldHVybiBfX25vcm1hbF9pdGVyYXRvcihf TV9jdXJyZW50KyspOyB9CgoKICAgICAgX19ub3JtYWxfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9y LS0oKSB7IC0tX01fY3VycmVudDsgcmV0dXJuICp0aGlzOyB9CgogICAgICBfX25vcm1hbF9pdGVy YXRvcgogICAgICBvcGVyYXRvci0tKGludCkgeyByZXR1cm4gX19ub3JtYWxfaXRlcmF0b3IoX01f Y3VycmVudC0tKTsgfQoKCiAgICAgIHJlZmVyZW5jZQogICAgICBvcGVyYXRvcltdKGNvbnN0IGRp ZmZlcmVuY2VfdHlwZSYgX19uKSBjb25zdAogICAgICB7IHJldHVybiBfTV9jdXJyZW50W19fbl07 IH0KCiAgICAgIF9fbm9ybWFsX2l0ZXJhdG9yJgogICAgICBvcGVyYXRvcis9KGNvbnN0IGRpZmZl cmVuY2VfdHlwZSYgX19uKQogICAgICB7IF9NX2N1cnJlbnQgKz0gX19uOyByZXR1cm4gKnRoaXM7 IH0KCiAgICAgIF9fbm9ybWFsX2l0ZXJhdG9yCiAgICAgIG9wZXJhdG9yKyhjb25zdCBkaWZmZXJl bmNlX3R5cGUmIF9fbikgY29uc3QKICAgICAgeyByZXR1cm4gX19ub3JtYWxfaXRlcmF0b3IoX01f Y3VycmVudCArIF9fbik7IH0KCiAgICAgIF9fbm9ybWFsX2l0ZXJhdG9yJgogICAgICBvcGVyYXRv ci09KGNvbnN0IGRpZmZlcmVuY2VfdHlwZSYgX19uKQogICAgICB7IF9NX2N1cnJlbnQgLT0gX19u OyByZXR1cm4gKnRoaXM7IH0KCiAgICAgIF9fbm9ybWFsX2l0ZXJhdG9yCiAgICAgIG9wZXJhdG9y LShjb25zdCBkaWZmZXJlbmNlX3R5cGUmIF9fbikgY29uc3QKICAgICAgeyByZXR1cm4gX19ub3Jt YWxfaXRlcmF0b3IoX01fY3VycmVudCAtIF9fbik7IH0KCiAgICAgIGNvbnN0IF9JdGVyYXRvciYK ICAgICAgYmFzZSgpIGNvbnN0IHsgcmV0dXJuIF9NX2N1cnJlbnQ7IH0KICAgIH07CiMgNjUxICIv bm90bmZzL2ZjaGUvQlVJTEQtZ2NjLW11ZGZsYXAvSU5TVC9pbmNsdWRlL2MrKy8zLjUtdHJlZS1z c2EvYml0cy9zdGxfaXRlcmF0b3IuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvckws IHR5cGVuYW1lIF9JdGVyYXRvclIsIHR5cGVuYW1lIF9Db250YWluZXI+CiAgaW5saW5lIGJvb2wK ICBvcGVyYXRvcj09KGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvckwsIF9Db250YWlu ZXI+JiBfX2xocywKICAgICAgICAgICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRv clIsIF9Db250YWluZXI+JiBfX3JocykKICB7IHJldHVybiBfX2xocy5iYXNlKCkgPT0gX19yaHMu YmFzZSgpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvciwgdHlwZW5hbWUgX0NvbnRh aW5lcj4KICBpbmxpbmUgYm9vbAogIG9wZXJhdG9yPT0oY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8 X0l0ZXJhdG9yLCBfQ29udGFpbmVyPiYgX19saHMsCiAgICAgICAgICAgICBjb25zdCBfX25vcm1h bF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWluZXI+JiBfX3JocykKICB7IHJldHVybiBfX2xo cy5iYXNlKCkgPT0gX19yaHMuYmFzZSgpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRv ckwsIHR5cGVuYW1lIF9JdGVyYXRvclIsIHR5cGVuYW1lIF9Db250YWluZXI+CiAgaW5saW5lIGJv b2wKICBvcGVyYXRvciE9KGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvckwsIF9Db250 YWluZXI+JiBfX2xocywKICAgICAgICAgICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVy YXRvclIsIF9Db250YWluZXI+JiBfX3JocykKICB7IHJldHVybiBfX2xocy5iYXNlKCkgIT0gX19y aHMuYmFzZSgpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvciwgdHlwZW5hbWUgX0Nv bnRhaW5lcj4KICBpbmxpbmUgYm9vbAogIG9wZXJhdG9yIT0oY29uc3QgX19ub3JtYWxfaXRlcmF0 b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPiYgX19saHMsCiAgICAgICAgICAgICBjb25zdCBfX25v cm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWluZXI+JiBfX3JocykKICB7IHJldHVybiBf X2xocy5iYXNlKCkgIT0gX19yaHMuYmFzZSgpOyB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRl cmF0b3JMLCB0eXBlbmFtZSBfSXRlcmF0b3JSLCB0eXBlbmFtZSBfQ29udGFpbmVyPgogIGlubGlu ZSBib29sCiAgb3BlcmF0b3I8KGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvckwsIF9D b250YWluZXI+JiBfX2xocywKICAgICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0 ZXJhdG9yUiwgX0NvbnRhaW5lcj4mIF9fcmhzKQogIHsgcmV0dXJuIF9fbGhzLmJhc2UoKSA8IF9f cmhzLmJhc2UoKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3IsIHR5cGVuYW1lIF9D b250YWluZXI+CiAgaW5saW5lIGJvb2wKICBvcGVyYXRvcjwoY29uc3QgX19ub3JtYWxfaXRlcmF0 b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPiYgX19saHMsCiAgICAgICAgICAgICBjb25zdCBfX25v cm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWluZXI+JiBfX3JocykKICB7IHJldHVybiBf X2xocy5iYXNlKCkgPCBfX3Jocy5iYXNlKCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJh dG9yTCwgdHlwZW5hbWUgX0l0ZXJhdG9yUiwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KICBpbmxpbmUg Ym9vbAogIG9wZXJhdG9yPihjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JMLCBfQ29u dGFpbmVyPiYgX19saHMsCiAgICAgICAgICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVy YXRvclIsIF9Db250YWluZXI+JiBfX3JocykKICB7IHJldHVybiBfX2xocy5iYXNlKCkgPiBfX3Jo cy5iYXNlKCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29u dGFpbmVyPgogIGlubGluZSBib29sCiAgb3BlcmF0b3I+KGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9y PF9JdGVyYXRvciwgX0NvbnRhaW5lcj4mIF9fbGhzLAogICAgICAgICAgICBjb25zdCBfX25vcm1h bF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWluZXI+JiBfX3JocykKICB7IHJldHVybiBfX2xo cy5iYXNlKCkgPiBfX3Jocy5iYXNlKCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9y TCwgdHlwZW5hbWUgX0l0ZXJhdG9yUiwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KICBpbmxpbmUgYm9v bAogIG9wZXJhdG9yPD0oY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yTCwgX0NvbnRh aW5lcj4mIF9fbGhzLAogICAgICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJh dG9yUiwgX0NvbnRhaW5lcj4mIF9fcmhzKQogIHsgcmV0dXJuIF9fbGhzLmJhc2UoKSA8PSBfX3Jo cy5iYXNlKCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29u dGFpbmVyPgogIGlubGluZSBib29sCiAgb3BlcmF0b3I8PShjb25zdCBfX25vcm1hbF9pdGVyYXRv cjxfSXRlcmF0b3IsIF9Db250YWluZXI+JiBfX2xocywKICAgICAgICAgICAgIGNvbnN0IF9fbm9y bWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwgX0NvbnRhaW5lcj4mIF9fcmhzKQogIHsgcmV0dXJuIF9f bGhzLmJhc2UoKSA8PSBfX3Jocy5iYXNlKCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJh dG9yTCwgdHlwZW5hbWUgX0l0ZXJhdG9yUiwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KICBpbmxpbmUg Ym9vbAogIG9wZXJhdG9yPj0oY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yTCwgX0Nv bnRhaW5lcj4mIF9fbGhzLAogICAgICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0 ZXJhdG9yUiwgX0NvbnRhaW5lcj4mIF9fcmhzKQogIHsgcmV0dXJuIF9fbGhzLmJhc2UoKSA+PSBf X3Jocy5iYXNlKCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yLCB0eXBlbmFtZSBf Q29udGFpbmVyPgogIGlubGluZSBib29sCiAgb3BlcmF0b3I+PShjb25zdCBfX25vcm1hbF9pdGVy YXRvcjxfSXRlcmF0b3IsIF9Db250YWluZXI+JiBfX2xocywKICAgICAgICAgICAgIGNvbnN0IF9f bm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwgX0NvbnRhaW5lcj4mIF9fcmhzKQogIHsgcmV0dXJu IF9fbGhzLmJhc2UoKSA+PSBfX3Jocy5iYXNlKCk7IH0KCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1l IF9JdGVyYXRvckwsIHR5cGVuYW1lIF9JdGVyYXRvclIsIHR5cGVuYW1lIF9Db250YWluZXI+CiAg aW5saW5lIHR5cGVuYW1lIF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvckwsIF9Db250YWluZXI+ OjpkaWZmZXJlbmNlX3R5cGUKICBvcGVyYXRvci0oY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0 ZXJhdG9yTCwgX0NvbnRhaW5lcj4mIF9fbGhzLAogICAgICAgICAgICAgY29uc3QgX19ub3JtYWxf aXRlcmF0b3I8X0l0ZXJhdG9yUiwgX0NvbnRhaW5lcj4mIF9fcmhzKQogIHsgcmV0dXJuIF9fbGhz LmJhc2UoKSAtIF9fcmhzLmJhc2UoKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3Is IHR5cGVuYW1lIF9Db250YWluZXI+CiAgaW5saW5lIF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRv ciwgX0NvbnRhaW5lcj4KICBvcGVyYXRvcisodHlwZW5hbWUgX19ub3JtYWxfaXRlcmF0b3I8X0l0 ZXJhdG9yLCBfQ29udGFpbmVyPjo6ZGlmZmVyZW5jZV90eXBlIF9fbiwKICAgICAgICAgICAgY29u c3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPiYgX19pKQogIHsgcmV0 dXJuIF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwgX0NvbnRhaW5lcj4oX19pLmJhc2UoKSAr IF9fbik7IH0KfQojIDc2ICIvbm90bmZzL2ZjaGUvQlVJTEQtZ2NjLW11ZGZsYXAvSU5TVC9pbmNs dWRlL2MrKy8zLjUtdHJlZS1zc2EvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMiAzCgoKbmFtZXNwYWNl IHN0ZAp7CiMgOTEgIi9ub3RuZnMvZmNoZS9CVUlMRC1nY2MtbXVkZmxhcC9JTlNUL2luY2x1ZGUv YysrLzMuNS10cmVlLXNzYS9iaXRzL3N0bF9hbGdvYmFzZS5oIiAzCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0ZvcndhcmRJdGVyMSwgdHlwZW5hbWUgX0ZvcndhcmRJdGVyMj4KICAgIGlubGluZSB2b2lk CiAgICBpdGVyX3N3YXAoX0ZvcndhcmRJdGVyMSBfX2EsIF9Gb3J3YXJkSXRlcjIgX19iKQogICAg ewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXIxPjo6 dmFsdWVfdHlwZSBfVmFsdWVUeXBlMTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90 cmFpdHM8X0ZvcndhcmRJdGVyMj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTI7CgoKICAgICAKICAg ICAKICAgICAKICAgICAKCiAgICAgIF9WYWx1ZVR5cGUxIF9fdG1wID0gKl9fYTsKICAgICAgKl9f YSA9ICpfX2I7CiAgICAgICpfX2IgPSBfX3RtcDsKICAgIH0KIyAxMTggIi9ub3RuZnMvZmNoZS9C VUlMRC1nY2MtbXVkZmxhcC9JTlNUL2luY2x1ZGUvYysrLzMuNS10cmVlLXNzYS9iaXRzL3N0bF9h bGdvYmFzZS5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW5saW5lIHZvaWQKICAg IHN3YXAoX1RwJiBfX2EsIF9UcCYgX19iKQogICAgewoKICAgICAKCiAgICAgIF9UcCBfX3RtcCA9 IF9fYTsKICAgICAgX19hID0gX19iOwogICAgICBfX2IgPSBfX3RtcDsKICAgIH0KIyAxNDYgIi9u b3RuZnMvZmNoZS9CVUlMRC1nY2MtbXVkZmxhcC9JTlNUL2luY2x1ZGUvYysrLzMuNS10cmVlLXNz YS9iaXRzL3N0bF9hbGdvYmFzZS5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW5s aW5lIGNvbnN0IF9UcCYKICAgIG1pbihjb25zdCBfVHAmIF9fYSwgY29uc3QgX1RwJiBfX2IpCiAg ICB7CgogICAgIAoKICAgICAgaWYgKF9fYiA8IF9fYSkgcmV0dXJuIF9fYjsgcmV0dXJuIF9fYTsK ICAgIH0KIyAxNjYgIi9ub3RuZnMvZmNoZS9CVUlMRC1nY2MtbXVkZmxhcC9JTlNUL2luY2x1ZGUv YysrLzMuNS10cmVlLXNzYS9iaXRzL3N0bF9hbGdvYmFzZS5oIiAzCiAgdGVtcGxhdGU8dHlwZW5h bWUgX1RwPgogICAgaW5saW5lIGNvbnN0IF9UcCYKICAgIG1heChjb25zdCBfVHAmIF9fYSwgY29u c3QgX1RwJiBfX2IpCiAgICB7CgogICAgIAoKICAgICAgaWYgKF9fYSA8IF9fYikgcmV0dXJuIF9f YjsgcmV0dXJuIF9fYTsKICAgIH0KIyAxODYgIi9ub3RuZnMvZmNoZS9CVUlMRC1nY2MtbXVkZmxh cC9JTlNUL2luY2x1ZGUvYysrLzMuNS10cmVlLXNzYS9iaXRzL3N0bF9hbGdvYmFzZS5oIiAzCiAg dGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIGlubGluZSBjb25z dCBfVHAmCiAgICBtaW4oY29uc3QgX1RwJiBfX2EsIGNvbnN0IF9UcCYgX19iLCBfQ29tcGFyZSBf X2NvbXApCiAgICB7CgogICAgICBpZiAoX19jb21wKF9fYiwgX19hKSkgcmV0dXJuIF9fYjsgcmV0 dXJuIF9fYTsKICAgIH0KIyAyMDQgIi9ub3RuZnMvZmNoZS9CVUlMRC1nY2MtbXVkZmxhcC9JTlNU L2luY2x1ZGUvYysrLzMuNS10cmVlLXNzYS9iaXRzL3N0bF9hbGdvYmFzZS5oIiAzCiAgdGVtcGxh dGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIGlubGluZSBjb25zdCBfVHAm CiAgICBtYXgoY29uc3QgX1RwJiBfX2EsIGNvbnN0IF9UcCYgX19iLCBfQ29tcGFyZSBfX2NvbXAp CiAgICB7CgogICAgICBpZiAoX19jb21wKF9fYSwgX19iKSkgcmV0dXJuIF9fYjsgcmV0dXJuIF9f YTsKICAgIH0KIyAyMjEgIi9ub3RuZnMvZmNoZS9CVUlMRC1nY2MtbXVkZmxhcC9JTlNUL2luY2x1 ZGUvYysrLzMuNS10cmVlLXNzYS9iaXRzL3N0bF9hbGdvYmFzZS5oIiAzCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXI+CiAgICBpbmxpbmUgX091dHB1 dEl0ZXIKICAgIF9fY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAog ICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LAogICAgICAgICAgIGlucHV0X2l0ZXJhdG9y X3RhZykKICAgIHsKICAgICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX3Jlc3VsdCwg KytfX2ZpcnN0KQogICAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0OwogICAgICByZXR1cm4gX19y ZXN1bHQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBl bmFtZSBfT3V0cHV0SXRlcj4KICAgIGlubGluZSBfT3V0cHV0SXRlcgogICAgX19jb3B5KF9SYW5k b21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAg ICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwKICAgICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9y X3RhZykKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRv bUFjY2Vzc0l0ZXI+OjpkaWZmZXJlbmNlX3R5cGUKICAgICAgICAgIF9EaXN0YW5jZTsKICAgICAg Zm9yIChfRGlzdGFuY2UgX19uID0gX19sYXN0IC0gX19maXJzdDsgX19uID4gMDsgLS1fX24pIHsK ICAgICAgICAqX19yZXN1bHQgPSAqX19maXJzdDsKICAgICAgICArK19fZmlyc3Q7CiAgICAgICAg KytfX3Jlc3VsdDsKICAgICAgfQogICAgICByZXR1cm4gX19yZXN1bHQ7CiAgICB9CgogIHRlbXBs YXRlPHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSBfVHAqCiAgICBfX2NvcHlfdHJpdmlhbChjb25z dCBfVHAqIF9fZmlyc3QsIGNvbnN0IF9UcCogX19sYXN0LCBfVHAqIF9fcmVzdWx0KQogICAgewog ICAgICBtZW1tb3ZlKF9fcmVzdWx0LCBfX2ZpcnN0LCBzaXplb2YoX1RwKSAqIChfX2xhc3QgLSBf X2ZpcnN0KSk7CiAgICAgIHJldHVybiBfX3Jlc3VsdCArIChfX2xhc3QgLSBfX2ZpcnN0KTsKICAg IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXI+ CiAgICBpbmxpbmUgX091dHB1dEl0ZXIKICAgIF9fY29weV9hdXgyKF9JbnB1dEl0ZXIgX19maXJz dCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3Vs dCwgX19mYWxzZV90eXBlKQogICAgeyByZXR1cm4gX19jb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19y ZXN1bHQsIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdCkpOyB9CgogIHRlbXBsYXRlPHR5cGVu YW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyPgogICAgaW5saW5lIF9PdXRwdXRJ dGVyCiAgICBfX2NvcHlfYXV4MihfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0 LAogICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9fdHJ1ZV90eXBlKQogICAg eyByZXR1cm4gX19jb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQsIF9faXRlcmF0b3JfY2F0 ZWdvcnkoX19maXJzdCkpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSBf VHAqCiAgICBfX2NvcHlfYXV4MihfVHAqIF9fZmlyc3QsIF9UcCogX19sYXN0LAogICAgICAgICAg ICAgICAgX1RwKiBfX3Jlc3VsdCwgX190cnVlX3R5cGUpCiAgICB7IHJldHVybiBfX2NvcHlfdHJp dmlhbChfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf VHA+CiAgICBpbmxpbmUgX1RwKgogICAgX19jb3B5X2F1eDIoY29uc3QgX1RwKiBfX2ZpcnN0LCBj b25zdCBfVHAqIF9fbGFzdCwKICAgICAgICAgICAgICAgIF9UcCogX19yZXN1bHQsIF9fdHJ1ZV90 eXBlKQogICAgeyByZXR1cm4gX19jb3B5X3RyaXZpYWwoX19maXJzdCwgX19sYXN0LCBfX3Jlc3Vs dCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX091dHB1dEl0 ZXI+CiAgICBpbmxpbmUgX091dHB1dEl0ZXIKICAgIF9fY29weV9uaTIoX0lucHV0SXRlciBfX2Zp cnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1 bHQsIF9fdHJ1ZV90eXBlKQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3Ry YWl0czxfSW5wdXRJdGVyPjo6dmFsdWVfdHlwZQogICAgICAgICAgX1ZhbHVlVHlwZTsKICAgICAg dHlwZWRlZiB0eXBlbmFtZSBfX3R5cGVfdHJhaXRzPF9WYWx1ZVR5cGU+OjpoYXNfdHJpdmlhbF9h c3NpZ25tZW50X29wZXJhdG9yCiAgICAgICAgICBfVHJpdmlhbDsKICAgICAgcmV0dXJuIF9PdXRw dXRJdGVyKF9fY29weV9hdXgyKF9fZmlyc3QsIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIF9fcmVzdWx0LmJhc2UoKSwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIF9Ucml2aWFsKCkpKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lu cHV0SXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXI+CiAgICBpbmxpbmUgX091dHB1dEl0ZXIKICAg IF9fY29weV9uaTIoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAg ICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9fZmFsc2VfdHlwZSkKICAgIHsKICAgICAg dHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcj46OnZhbHVlX3R5cGUK ICAgICAgICAgIF9WYWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX190eXBlX3RyYWl0 czxfVmFsdWVUeXBlPjo6aGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcgogICAgICAgICAg X1RyaXZpYWw7CiAgICAgIHJldHVybiBfX2NvcHlfYXV4MihfX2ZpcnN0LCBfX2xhc3QsCiAgICAg ICAgICAgICAgICAgICAgICAgICBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9U cml2aWFsKCkpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFt ZSBfT3V0cHV0SXRlcj4KICAgIGlubGluZSBfT3V0cHV0SXRlcgogICAgX19jb3B5X25pMShfSW5w dXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICBfT3V0cHV0 SXRlciBfX3Jlc3VsdCwgX190cnVlX3R5cGUpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUg X0lzX25vcm1hbF9pdGVyYXRvcjxfT3V0cHV0SXRlcj46Ol9Ob3JtYWwgX19Ob3JtYWw7CiAgICAg IHJldHVybiBfX2NvcHlfbmkyKF9fZmlyc3QuYmFzZSgpLCBfX2xhc3QuYmFzZSgpLCBfX3Jlc3Vs dCwgX19Ob3JtYWwoKSk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5 cGVuYW1lIF9PdXRwdXRJdGVyPgogICAgaW5saW5lIF9PdXRwdXRJdGVyCiAgICBfX2NvcHlfbmkx KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgIF9P dXRwdXRJdGVyIF9fcmVzdWx0LCBfX2ZhbHNlX3R5cGUpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlw ZW5hbWUgX0lzX25vcm1hbF9pdGVyYXRvcjxfT3V0cHV0SXRlcj46Ol9Ob3JtYWwgX19Ob3JtYWw7 CiAgICAgIHJldHVybiBfX2NvcHlfbmkyKF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQsIF9fTm9y bWFsKCkpOwogICAgfQojIDMzOSAiL25vdG5mcy9mY2hlL0JVSUxELWdjYy1tdWRmbGFwL0lOU1Qv aW5jbHVkZS9jKysvMy41LXRyZWUtc3NhL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4KICAgIGlubGluZSBf T3V0cHV0SXRlcgogICAgY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0 LCBfT3V0cHV0SXRlciBfX3Jlc3VsdCkKICAgIHsKCiAgICAgCiAgICAgCgoKICAgICAgIHR5cGVk ZWYgdHlwZW5hbWUgX0lzX25vcm1hbF9pdGVyYXRvcjxfSW5wdXRJdGVyPjo6X05vcm1hbCBfX05v cm1hbDsKICAgICAgIHJldHVybiBfX2NvcHlfbmkxKF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQs IF9fTm9ybWFsKCkpOwogICAgfQoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25h bEl0ZXIxLCB0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIyPgogICAgaW5saW5lIF9CaWRpcmVj dGlvbmFsSXRlcjIKICAgIF9fY29weV9iYWNrd2FyZChfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fZmly c3QsIF9CaWRpcmVjdGlvbmFsSXRlcjEgX19sYXN0LAogICAgICAgICAgICAgICAgICAgIF9CaWRp cmVjdGlvbmFsSXRlcjIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgYmlkaXJlY3Rpb25h bF9pdGVyYXRvcl90YWcpCiAgICB7CiAgICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkKICAg ICAgICAqLS1fX3Jlc3VsdCA9ICotLV9fbGFzdDsKICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAg fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX0JpZGly ZWN0aW9uYWxJdGVyPgogICAgaW5saW5lIF9CaWRpcmVjdGlvbmFsSXRlcgogICAgX19jb3B5X2Jh Y2t3YXJkKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFz dCwKICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19yZXN1bHQsCiAgICAg ICAgICAgICAgICAgICAgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpCiAgICB7CiAgICAgIHR5 cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OmRpZmZlcmVuY2VfdHlw ZSBfX247CiAgICAgIGZvciAoX19uID0gX19sYXN0IC0gX19maXJzdDsgX19uID4gMDsgLS1fX24p CiAgICAgICAgKi0tX19yZXN1bHQgPSAqLS1fX2xhc3Q7CiAgICAgIHJldHVybiBfX3Jlc3VsdDsK ICAgIH0KCgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyMSwgdHlw ZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyMiwKICAgICAgICAgICB0eXBlbmFtZSBfQm9vbFR5cGU+ CiAgICBzdHJ1Y3QgX19jb3B5X2JhY2t3YXJkX2Rpc3BhdGNoCiAgICB7CiAgICAgIHN0YXRpYyBf QmlkaXJlY3Rpb25hbEl0ZXIyCiAgICAgIGNvcHkoX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2ZpcnN0 LCBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fbGFzdCwKICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0 ZXIyIF9fcmVzdWx0KQogICAgICB7CiAgICAgICAgcmV0dXJuIF9fY29weV9iYWNrd2FyZChfX2Zp cnN0LCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Jlc3VsdCwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdCkp OwogICAgICB9CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBzdHJ1Y3QgX19j b3B5X2JhY2t3YXJkX2Rpc3BhdGNoPF9UcCosIF9UcCosIF9fdHJ1ZV90eXBlPgogICAgewogICAg ICBzdGF0aWMgX1RwKgogICAgICBjb3B5KGNvbnN0IF9UcCogX19maXJzdCwgY29uc3QgX1RwKiBf X2xhc3QsIF9UcCogX19yZXN1bHQpCiAgICAgIHsKICAgICAgICBjb25zdCBwdHJkaWZmX3QgX051 bSA9IF9fbGFzdCAtIF9fZmlyc3Q7CiAgICAgICAgbWVtbW92ZShfX3Jlc3VsdCAtIF9OdW0sIF9f Zmlyc3QsIHNpemVvZihfVHApICogX051bSk7CiAgICAgICAgcmV0dXJuIF9fcmVzdWx0IC0gX051 bTsKICAgICAgfQogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgc3RydWN0IF9f Y29weV9iYWNrd2FyZF9kaXNwYXRjaDxjb25zdCBfVHAqLCBfVHAqLCBfX3RydWVfdHlwZT4KICAg IHsKICAgICAgc3RhdGljIF9UcCoKICAgICAgY29weShjb25zdCBfVHAqIF9fZmlyc3QsIGNvbnN0 IF9UcCogX19sYXN0LCBfVHAqIF9fcmVzdWx0KQogICAgICB7CiAgICAgICAgcmV0dXJuIF9fY29w eV9iYWNrd2FyZF9kaXNwYXRjaDxfVHAqLCBfVHAqLCBfX3RydWVfdHlwZT4KICAgICAgICAgIDo6 Y29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KTsKICAgICAgfQogICAgfTsKCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0JJMSwgdHlwZW5hbWUgX0JJMj4KICAgIGlubGluZSBfQkkyCiAgICBfX2Nv cHlfYmFja3dhcmRfYXV4KF9CSTEgX19maXJzdCwgX0JJMSBfX2xhc3QsIF9CSTIgX19yZXN1bHQp CiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX190eXBlX3RyYWl0czx0eXBlbmFtZSBpdGVy YXRvcl90cmFpdHM8X0JJMj46OnZhbHVlX3R5cGU+CiAgICAgICAgICAgICAgICAgICAgICAgICAg ICA6Omhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3IgX1RyaXZpYWw7CiAgICAgIHJldHVy biBfX2NvcHlfYmFja3dhcmRfZGlzcGF0Y2g8X0JJMSwgX0JJMiwgX1RyaXZpYWw+CiAgICAgICAg ICAgICAgICAgIDo6Y29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KTsKICAgIH0KCiAgdGVt cGxhdGUgPHR5cGVuYW1lIF9CSTEsIHR5cGVuYW1lIF9CSTI+CiAgICBpbmxpbmUgX0JJMgogICAg X19jb3B5X2JhY2t3YXJkX291dHB1dF9ub3JtYWxfaXRlcmF0b3IoX0JJMSBfX2ZpcnN0LCBfQkkx IF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CSTIg X19yZXN1bHQsIF9fdHJ1ZV90eXBlKQogICAgeyByZXR1cm4gX0JJMihfX2NvcHlfYmFja3dhcmRf YXV4KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQuYmFzZSgpKSk7IH0KCiAgdGVtcGxhdGUgPHR5 cGVuYW1lIF9CSTEsIHR5cGVuYW1lIF9CSTI+CiAgICBpbmxpbmUgX0JJMgogICAgX19jb3B5X2Jh Y2t3YXJkX291dHB1dF9ub3JtYWxfaXRlcmF0b3IoX0JJMSBfX2ZpcnN0LCBfQkkxIF9fbGFzdCwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CSTIgX19yZXN1bHQs IF9fZmFsc2VfdHlwZSkKICAgIHsgcmV0dXJuIF9fY29weV9iYWNrd2FyZF9hdXgoX19maXJzdCwg X19sYXN0LCBfX3Jlc3VsdCk7IH0KCiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9CSTEsIHR5cGVuYW1l IF9CSTI+CiAgICBpbmxpbmUgX0JJMgogICAgX19jb3B5X2JhY2t3YXJkX2lucHV0X25vcm1hbF9p dGVyYXRvcihfQkkxIF9fZmlyc3QsIF9CSTEgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBfQkkyIF9fcmVzdWx0LCBfX3RydWVfdHlwZSkKICAgIHsKICAg ICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfbm9ybWFsX2l0ZXJhdG9yPF9CSTI+OjpfTm9ybWFsIF9f Tm9ybWFsOwogICAgICByZXR1cm4gX19jb3B5X2JhY2t3YXJkX291dHB1dF9ub3JtYWxfaXRlcmF0 b3IoX19maXJzdC5iYXNlKCksIF9fbGFzdC5iYXNlKCksCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Jlc3VsdCwgX19Ob3JtYWwoKSk7CiAgICB9 CgogIHRlbXBsYXRlIDx0eXBlbmFtZSBfQkkxLCB0eXBlbmFtZSBfQkkyPgogICAgaW5saW5lIF9C STIKICAgIF9fY29weV9iYWNrd2FyZF9pbnB1dF9ub3JtYWxfaXRlcmF0b3IoX0JJMSBfX2ZpcnN0 LCBfQkkxIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg X0JJMiBfX3Jlc3VsdCwgX19mYWxzZV90eXBlKQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1l IF9Jc19ub3JtYWxfaXRlcmF0b3I8X0JJMj46Ol9Ob3JtYWwgX19Ob3JtYWw7CiAgICAgIHJldHVy biBfX2NvcHlfYmFja3dhcmRfb3V0cHV0X25vcm1hbF9pdGVyYXRvcihfX2ZpcnN0LCBfX2xhc3Qs IF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgX19Ob3JtYWwoKSk7CiAgICB9CiMgNDc3ICIvbm90bmZzL2ZjaGUvQlVJTEQtZ2NjLW11 ZGZsYXAvSU5TVC9pbmNsdWRlL2MrKy8zLjUtdHJlZS1zc2EvYml0cy9zdGxfYWxnb2Jhc2UuaCIg MwogIHRlbXBsYXRlIDx0eXBlbmFtZSBfQkkxLCB0eXBlbmFtZSBfQkkyPgogICAgaW5saW5lIF9C STIKICAgIGNvcHlfYmFja3dhcmQoX0JJMSBfX2ZpcnN0LCBfQkkxIF9fbGFzdCwgX0JJMiBfX3Jl c3VsdCkKICAgIHsKCiAgICAgCiAgICAgCiAgICAgCgoKCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUg X0lzX25vcm1hbF9pdGVyYXRvcjxfQkkxPjo6X05vcm1hbCBfX05vcm1hbDsKICAgICAgcmV0dXJu IF9fY29weV9iYWNrd2FyZF9pbnB1dF9ub3JtYWxfaXRlcmF0b3IoX19maXJzdCwgX19sYXN0LCBf X3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgX19Ob3JtYWwoKSk7CiAgICB9CiMgNTA5ICIvbm90bmZzL2ZjaGUvQlVJTEQtZ2NjLW11ZGZs YXAvSU5TVC9pbmNsdWRlL2MrKy8zLjUtdHJlZS1zc2EvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwog IHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1RwPgogICAgdm9pZAog ICAgZmlsbChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwgY29uc3Qg X1RwJiBfX3ZhbHVlKQogICAgewoKICAgICAKCiAgICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xh c3Q7ICsrX19maXJzdCkKICAgICAgICAqX19maXJzdCA9IF9fdmFsdWU7CiAgICB9CiMgNTMxICIv bm90bmZzL2ZjaGUvQlVJTEQtZ2NjLW11ZGZsYXAvSU5TVC9pbmNsdWRlL2MrKy8zLjUtdHJlZS1z c2EvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9PdXRwdXRJdGVy LCB0eXBlbmFtZSBfU2l6ZSwgdHlwZW5hbWUgX1RwPgogICAgX091dHB1dEl0ZXIKICAgIGZpbGxf bihfT3V0cHV0SXRlciBfX2ZpcnN0LCBfU2l6ZSBfX24sIGNvbnN0IF9UcCYgX192YWx1ZSkKICAg IHsKCiAgICAgCgogICAgICBmb3IgKCA7IF9fbiA+IDA7IC0tX19uLCArK19fZmlyc3QpCiAgICAg ICAgKl9fZmlyc3QgPSBfX3ZhbHVlOwogICAgICByZXR1cm4gX19maXJzdDsKICAgIH0KCgoKICBp bmxpbmUgdm9pZAogIGZpbGwodW5zaWduZWQgY2hhciogX19maXJzdCwgdW5zaWduZWQgY2hhciog X19sYXN0LCBjb25zdCB1bnNpZ25lZCBjaGFyJiBfX2MpCiAgewogICAgdW5zaWduZWQgY2hhciBf X3RtcCA9IF9fYzsKICAgIG1lbXNldChfX2ZpcnN0LCBfX3RtcCwgX19sYXN0IC0gX19maXJzdCk7 CiAgfQoKICBpbmxpbmUgdm9pZAogIGZpbGwoc2lnbmVkIGNoYXIqIF9fZmlyc3QsIHNpZ25lZCBj aGFyKiBfX2xhc3QsIGNvbnN0IHNpZ25lZCBjaGFyJiBfX2MpCiAgewogICAgc2lnbmVkIGNoYXIg X190bXAgPSBfX2M7CiAgICBtZW1zZXQoX19maXJzdCwgc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hh cj4oX190bXApLCBfX2xhc3QgLSBfX2ZpcnN0KTsKICB9CgogIGlubGluZSB2b2lkCiAgZmlsbChj aGFyKiBfX2ZpcnN0LCBjaGFyKiBfX2xhc3QsIGNvbnN0IGNoYXImIF9fYykKICB7CiAgICBjaGFy IF9fdG1wID0gX19jOwogICAgbWVtc2V0KF9fZmlyc3QsIHN0YXRpY19jYXN0PHVuc2lnbmVkIGNo YXI+KF9fdG1wKSwgX19sYXN0IC0gX19maXJzdCk7CiAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf U2l6ZT4KICAgIGlubGluZSB1bnNpZ25lZCBjaGFyKgogICAgZmlsbF9uKHVuc2lnbmVkIGNoYXIq IF9fZmlyc3QsIF9TaXplIF9fbiwgY29uc3QgdW5zaWduZWQgY2hhciYgX19jKQogICAgewogICAg ICBmaWxsKF9fZmlyc3QsIF9fZmlyc3QgKyBfX24sIF9fYyk7CiAgICAgIHJldHVybiBfX2ZpcnN0 ICsgX19uOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfU2l6ZT4KICAgIGlubGluZSBzaWdu ZWQgY2hhcioKICAgIGZpbGxfbihjaGFyKiBfX2ZpcnN0LCBfU2l6ZSBfX24sIGNvbnN0IHNpZ25l ZCBjaGFyJiBfX2MpCiAgICB7CiAgICAgIGZpbGwoX19maXJzdCwgX19maXJzdCArIF9fbiwgX19j KTsKICAgICAgcmV0dXJuIF9fZmlyc3QgKyBfX247CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1l IF9TaXplPgogICAgaW5saW5lIGNoYXIqCiAgICBmaWxsX24oY2hhciogX19maXJzdCwgX1NpemUg X19uLCBjb25zdCBjaGFyJiBfX2MpCiAgICB7CiAgICAgIGZpbGwoX19maXJzdCwgX19maXJzdCAr IF9fbiwgX19jKTsKICAgICAgcmV0dXJuIF9fZmlyc3QgKyBfX247CiAgICB9CiMgNjA2ICIvbm90 bmZzL2ZjaGUvQlVJTEQtZ2NjLW11ZGZsYXAvSU5TVC9pbmNsdWRlL2MrKy8zLjUtdHJlZS1zc2Ev Yml0cy9zdGxfYWxnb2Jhc2UuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0 eXBlbmFtZSBfSW5wdXRJdGVyMj4KICAgIHBhaXI8X0lucHV0SXRlcjEsIF9JbnB1dEl0ZXIyPgog ICAgbWlzbWF0Y2goX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAg ICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MikKICAgIHsKCiAgICAgCiAgICAgCiAgICAg CgogICAgIAoKCiAgICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmICpfX2ZpcnN0MSA9 PSAqX19maXJzdDIpIHsKICAgICAgICArK19fZmlyc3QxOwogICAgICAgICsrX19maXJzdDI7CiAg ICAgIH0KICAgICAgcmV0dXJuIHBhaXI8X0lucHV0SXRlcjEsIF9JbnB1dEl0ZXIyPihfX2ZpcnN0 MSwgX19maXJzdDIpOwogICAgfQojIDY0MCAiL25vdG5mcy9mY2hlL0JVSUxELWdjYy1tdWRmbGFw L0lOU1QvaW5jbHVkZS9jKysvMy41LXRyZWUtc3NhL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0SXRlcjIsIHR5cGVu YW1lIF9CaW5hcnlQcmVkaWNhdGU+CiAgICBwYWlyPF9JbnB1dEl0ZXIxLCBfSW5wdXRJdGVyMj4K ICAgIG1pc21hdGNoKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAog ICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsCiAgICAgICAgICAgICBfQmluYXJ5UHJl ZGljYXRlIF9fYmluYXJ5X3ByZWQpCiAgICB7CgogICAgIAogICAgIAoKICAgICAgd2hpbGUgKF9f Zmlyc3QxICE9IF9fbGFzdDEgJiYgX19iaW5hcnlfcHJlZCgqX19maXJzdDEsICpfX2ZpcnN0Mikp IHsKICAgICAgICArK19fZmlyc3QxOwogICAgICAgICsrX19maXJzdDI7CiAgICAgIH0KICAgICAg cmV0dXJuIHBhaXI8X0lucHV0SXRlcjEsIF9JbnB1dEl0ZXIyPihfX2ZpcnN0MSwgX19maXJzdDIp OwogICAgfQojIDY2OCAiL25vdG5mcy9mY2hlL0JVSUxELWdjYy1tdWRmbGFwL0lOU1QvaW5jbHVk ZS9jKysvMy41LXRyZWUtc3NhL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0SXRlcjI+CiAgICBpbmxpbmUgYm9vbAog ICAgZXF1YWwoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAg ICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MikKICAgIHsKCiAgICAgCiAgICAgCiAgICAgCgoKCiAg ICAgIGZvciAoIDsgX19maXJzdDEgIT0gX19sYXN0MTsgKytfX2ZpcnN0MSwgKytfX2ZpcnN0MikK ICAgICAgICBpZiAoISgqX19maXJzdDEgPT0gKl9fZmlyc3QyKSkKICAgICAgICAgIHJldHVybiBm YWxzZTsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiMgNjk5ICIvbm90bmZzL2ZjaGUvQlVJTEQt Z2NjLW11ZGZsYXAvSU5TVC9pbmNsdWRlL2MrKy8zLjUtdHJlZS1zc2EvYml0cy9zdGxfYWxnb2Jh c2UuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJ dGVyMiwgdHlwZW5hbWUgX0JpbmFyeVByZWRpY2F0ZT4KICAgIGlubGluZSBib29sCiAgICBlcXVh bChfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgIF9J bnB1dEl0ZXIyIF9fZmlyc3QyLAogICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2JpbmFyeV9w cmVkKQogICAgewoKICAgICAKICAgICAKCiAgICAgIGZvciAoIDsgX19maXJzdDEgIT0gX19sYXN0 MTsgKytfX2ZpcnN0MSwgKytfX2ZpcnN0MikKICAgICAgICBpZiAoIV9fYmluYXJ5X3ByZWQoKl9f Zmlyc3QxLCAqX19maXJzdDIpKQogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICByZXR1cm4g dHJ1ZTsKICAgIH0KIyA3MzIgIi9ub3RuZnMvZmNoZS9CVUlMRC1nY2MtbXVkZmxhcC9JTlNUL2lu Y2x1ZGUvYysrLzMuNS10cmVlLXNzYS9iaXRzL3N0bF9hbGdvYmFzZS5oIiAzCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0lucHV0SXRlcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXIyPgogICAgYm9vbAogICAg bGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmUoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIx IF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0 MiwgX0lucHV0SXRlcjIgX19sYXN0MikKICAgIHsKCiAgICAgCiAgICAgCiAgICAgCgogICAgIAoK CiAgICAgIGZvciAoIDsgX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3Qy CiAgICAgICAgICAgIDsgKytfX2ZpcnN0MSwgKytfX2ZpcnN0MikgewogICAgICAgIGlmICgqX19m aXJzdDEgPCAqX19maXJzdDIpCiAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICBpZiAoKl9f Zmlyc3QyIDwgKl9fZmlyc3QxKQogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICAg IHJldHVybiBfX2ZpcnN0MSA9PSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDI7CiAgICB9 CiMgNzY3ICIvbm90bmZzL2ZjaGUvQlVJTEQtZ2NjLW11ZGZsYXAvSU5TVC9pbmNsdWRlL2MrKy8z LjUtdHJlZS1zc2EvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9J bnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJdGVyMiwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBi b29sCiAgICBsZXhpY29ncmFwaGljYWxfY29tcGFyZShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lu cHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIy IF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgX0NvbXBhcmUgX19jb21wKQogICAgewoKICAgICAKICAgICAKCiAgICAgIGZvciAoIDsgX19m aXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyCiAgICAgICAgICAgIDsgKytf X2ZpcnN0MSwgKytfX2ZpcnN0MikgewogICAgICAgIGlmIChfX2NvbXAoKl9fZmlyc3QxLCAqX19m aXJzdDIpKQogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgaWYgKF9fY29tcCgqX19maXJz dDIsICpfX2ZpcnN0MSkpCiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgICAgcmV0 dXJuIF9fZmlyc3QxID09IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MjsKICAgIH0KCiAg aW5saW5lIGJvb2wKICBsZXhpY29ncmFwaGljYWxfY29tcGFyZShjb25zdCB1bnNpZ25lZCBjaGFy KiBfX2ZpcnN0MSwgY29uc3QgdW5zaWduZWQgY2hhciogX19sYXN0MSwKICAgICAgICAgICAgICAg ICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBfX2ZpcnN0MiwgY29uc3QgdW5zaWduZWQg Y2hhciogX19sYXN0MikKICB7CiAgICBjb25zdCBzaXplX3QgX19sZW4xID0gX19sYXN0MSAtIF9f Zmlyc3QxOwogICAgY29uc3Qgc2l6ZV90IF9fbGVuMiA9IF9fbGFzdDIgLSBfX2ZpcnN0MjsKICAg IGNvbnN0IGludCBfX3Jlc3VsdCA9IG1lbWNtcChfX2ZpcnN0MSwgX19maXJzdDIsIHN0ZDo6bWlu KF9fbGVuMSwgX19sZW4yKSk7CiAgICByZXR1cm4gX19yZXN1bHQgIT0gMCA/IF9fcmVzdWx0IDwg MCA6IF9fbGVuMSA8IF9fbGVuMjsKICB9CgogIGlubGluZSBib29sCiAgbGV4aWNvZ3JhcGhpY2Fs X2NvbXBhcmUoY29uc3QgY2hhciogX19maXJzdDEsIGNvbnN0IGNoYXIqIF9fbGFzdDEsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogX19maXJzdDIsIGNvbnN0IGNoYXIqIF9f bGFzdDIpCiAgewoKICAgIHJldHVybiBsZXhpY29ncmFwaGljYWxfY29tcGFyZSgoY29uc3Qgc2ln bmVkIGNoYXIqKSBfX2ZpcnN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo Y29uc3Qgc2lnbmVkIGNoYXIqKSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIChjb25zdCBzaWduZWQgY2hhciopIF9fZmlyc3QyLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIChjb25zdCBzaWduZWQgY2hhciopIF9fbGFzdDIpOwoKCgoKCgogIH0K Cn0KIyA4NyAiL25vdG5mcy9mY2hlL0JVSUxELWdjYy1tdWRmbGFwL0lOU1QvaW5jbHVkZS9jKysv My41LXRyZWUtc3NhL2JpdHMvc3RsX3RyZWUuaCIgMiAzCiMgMSAiL25vdG5mcy9mY2hlL0JVSUxE LWdjYy1tdWRmbGFwL0lOU1QvaW5jbHVkZS9jKysvMy41LXRyZWUtc3NhL2JpdHMvc3RsX2FsbG9j LmgiIDEgMwojIDg0ICIvbm90bmZzL2ZjaGUvQlVJTEQtZ2NjLW11ZGZsYXAvSU5TVC9pbmNsdWRl L2MrKy8zLjUtdHJlZS1zc2EvYml0cy9zdGxfYWxsb2MuaCIgMwojIDEgIi9ub3RuZnMvZmNoZS9C VUlMRC1nY2MtbXVkZmxhcC9JTlNUL2luY2x1ZGUvYysrLzMuNS10cmVlLXNzYS9jYXNzZXJ0IiAx IDMKIyA0NyAiL25vdG5mcy9mY2hlL0JVSUxELWdjYy1tdWRmbGFwL0lOU1QvaW5jbHVkZS9jKysv My41LXRyZWUtc3NhL2Nhc3NlcnQiIDMKCiMgMSAiL3Vzci9pbmNsdWRlL2Fzc2VydC5oIiAxIDMg NAojIDY1ICIvdXNyL2luY2x1ZGUvYXNzZXJ0LmgiIDMgNApleHRlcm4gIkMiIHsKCgpleHRlcm4g dm9pZCBfX2Fzc2VydF9mYWlsIChfX2NvbnN0IGNoYXIgKl9fYXNzZXJ0aW9uLCBfX2NvbnN0IGNo YXIgKl9fZmlsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IF9fbGlu ZSwgX19jb25zdCBjaGFyICpfX2Z1bmN0aW9uKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18g KChfX25vcmV0dXJuX18pKTsKCgpleHRlcm4gdm9pZCBfX2Fzc2VydF9wZXJyb3JfZmFpbCAoaW50 IF9fZXJybnVtLCBfX2NvbnN0IGNoYXIgKl9fZmlsZSwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHVuc2lnbmVkIGludCBfX2xpbmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBfX2NvbnN0IGNoYXIgKl9fZnVuY3Rpb24pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1 dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKCgoKZXh0ZXJuIHZvaWQgX19hc3NlcnQgKGNvbnN0IGNo YXIgKl9fYXNzZXJ0aW9uLCBjb25zdCBjaGFyICpfX2ZpbGUsIGludCBfX2xpbmUpCiAgICAgdGhy b3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKCn0KIyA0OSAiL25vdG5mcy9m Y2hlL0JVSUxELWdjYy1tdWRmbGFwL0lOU1QvaW5jbHVkZS9jKysvMy41LXRyZWUtc3NhL2Nhc3Nl cnQiIDIgMwojIDg1ICIvbm90bmZzL2ZjaGUvQlVJTEQtZ2NjLW11ZGZsYXAvSU5TVC9pbmNsdWRl L2MrKy8zLjUtdHJlZS1zc2EvYml0cy9zdGxfYWxsb2MuaCIgMiAzCiMgMSAiL25vdG5mcy9mY2hl L0JVSUxELWdjYy1tdWRmbGFwL0lOU1QvaW5jbHVkZS9jKysvMy41LXRyZWUtc3NhL2JpdHMvZnVu Y3RleGNlcHQuaCIgMSAzCiMgMzQgIi9ub3RuZnMvZmNoZS9CVUlMRC1nY2MtbXVkZmxhcC9JTlNU L2luY2x1ZGUvYysrLzMuNS10cmVlLXNzYS9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDMKIyAxICIvbm90 bmZzL2ZjaGUvQlVJTEQtZ2NjLW11ZGZsYXAvSU5TVC9pbmNsdWRlL2MrKy8zLjUtdHJlZS1zc2Ev ZXhjZXB0aW9uX2RlZmluZXMuaCIgMSAzCiMgMzUgIi9ub3RuZnMvZmNoZS9CVUlMRC1nY2MtbXVk ZmxhcC9JTlNUL2luY2x1ZGUvYysrLzMuNS10cmVlLXNzYS9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDIg MwoKbmFtZXNwYWNlIHN0ZAp7CgogIHZvaWQKICBfX3Rocm93X2JhZF9leGNlcHRpb24odm9pZCk7 CgoKICB2b2lkCiAgX190aHJvd19iYWRfYWxsb2Modm9pZCk7CgoKICB2b2lkCiAgX190aHJvd19i YWRfY2FzdCh2b2lkKTsKCiAgdm9pZAogIF9fdGhyb3dfYmFkX3R5cGVpZCh2b2lkKTsKCgogIHZv aWQKICBfX3Rocm93X2xvZ2ljX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Ro cm93X2RvbWFpbl9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19pbnZh bGlkX2FyZ3VtZW50KGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X2xlbmd0aF9l cnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19vdXRfb2ZfcmFuZ2UoY29u c3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfcnVudGltZV9lcnJvcihjb25zdCBjaGFy KiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19yYW5nZV9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoK ICB2b2lkCiAgX190aHJvd19vdmVyZmxvd19lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lk CiAgX190aHJvd191bmRlcmZsb3dfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCgogIHZvaWQKICBf X3Rocm93X2lvc19mYWlsdXJlKGNvbnN0IGNoYXIqIF9fcyk7Cn0KIyA4NiAiL25vdG5mcy9mY2hl L0JVSUxELWdjYy1tdWRmbGFwL0lOU1QvaW5jbHVkZS9jKysvMy41LXRyZWUtc3NhL2JpdHMvc3Rs X2FsbG9jLmgiIDIgMwojIDEgIi9ub3RuZnMvZmNoZS9CVUlMRC1nY2MtbXVkZmxhcC9JTlNUL2lu Y2x1ZGUvYysrLzMuNS10cmVlLXNzYS9iaXRzL3N0bF90aHJlYWRzLmgiIDEgMwojIDU0ICIvbm90 bmZzL2ZjaGUvQlVJTEQtZ2NjLW11ZGZsYXAvSU5TVC9pbmNsdWRlL2MrKy8zLjUtdHJlZS1zc2Ev Yml0cy9zdGxfdGhyZWFkcy5oIiAzCm5hbWVzcGFjZSBzdGQKewoKCgoKICBzdHJ1Y3QgX1JlZmNv dW50X0Jhc2UKICB7CgogICAgdHlwZWRlZiBzaXplX3QgX1JDX3Q7CgoKICAgIHZvbGF0aWxlIF9S Q190IF9NX3JlZl9jb3VudDsKCgogICAgX19ndGhyZWFkX211dGV4X3QgX01fcmVmX2NvdW50X2xv Y2s7CgogICAgX1JlZmNvdW50X0Jhc2UoX1JDX3QgX19uKSA6IF9NX3JlZl9jb3VudChfX24pCiAg ICB7CgogICAgICBfX2d0aHJlYWRfbXV0ZXhfdCBfX3RtcCA9IHswLCAwLCAwLCBQVEhSRUFEX01V VEVYX1RJTUVEX05QLCB7IDAsIDAgfX07CiAgICAgIF9NX3JlZl9jb3VudF9sb2NrID0gX190bXA7 CgoKCgoKICAgIH0KCiAgICB2b2lkCiAgICBfTV9pbmNyKCkKICAgIHsKICAgICAgX19ndGhyZWFk X211dGV4X2xvY2soJl9NX3JlZl9jb3VudF9sb2NrKTsKICAgICAgKytfTV9yZWZfY291bnQ7CiAg ICAgIF9fZ3RocmVhZF9tdXRleF91bmxvY2soJl9NX3JlZl9jb3VudF9sb2NrKTsKICAgIH0KCiAg ICBfUkNfdAogICAgX01fZGVjcigpCiAgICB7CiAgICAgIF9fZ3RocmVhZF9tdXRleF9sb2NrKCZf TV9yZWZfY291bnRfbG9jayk7CiAgICAgIHZvbGF0aWxlIF9SQ190IF9fdG1wID0gLS1fTV9yZWZf Y291bnQ7CiAgICAgIF9fZ3RocmVhZF9tdXRleF91bmxvY2soJl9NX3JlZl9jb3VudF9sb2NrKTsK ICAgICAgcmV0dXJuIF9fdG1wOwogICAgfQogIH07CiMgMTA5ICIvbm90bmZzL2ZjaGUvQlVJTEQt Z2NjLW11ZGZsYXAvSU5TVC9pbmNsdWRlL2MrKy8zLjUtdHJlZS1zc2EvYml0cy9zdGxfdGhyZWFk cy5oIiAzCiAgdGVtcGxhdGU8aW50IF9fZHVtbXk+CiAgICBzdHJ1Y3QgX1N3YXBfbG9ja19zdHJ1 Y3QKICAgIHsgc3RhdGljIF9fZ3RocmVhZF9tdXRleF90IF9TX3N3YXBfbG9jazsgfTsKCiAgdGVt cGxhdGU8aW50IF9fZHVtbXk+CiAgICBfX2d0aHJlYWRfbXV0ZXhfdAogICAgX1N3YXBfbG9ja19z dHJ1Y3Q8X19kdW1teT46Ol9TX3N3YXBfbG9jayA9IHswLCAwLCAwLCBQVEhSRUFEX01VVEVYX1RJ TUVEX05QLCB7IDAsIDAgfX07CgoKCiAgaW5saW5lIHVuc2lnbmVkIGxvbmcKICBfQXRvbWljX3N3 YXAodW5zaWduZWQgbG9uZyAqIF9fcCwgdW5zaWduZWQgbG9uZyBfX3EpCiAgewogICAgX19ndGhy ZWFkX211dGV4X2xvY2soJl9Td2FwX2xvY2tfc3RydWN0PDA+OjpfU19zd2FwX2xvY2spOwogICAg dW5zaWduZWQgbG9uZyBfX3Jlc3VsdCA9ICpfX3A7CiAgICAqX19wID0gX19xOwogICAgX19ndGhy ZWFkX211dGV4X3VubG9jaygmX1N3YXBfbG9ja19zdHJ1Y3Q8MD46Ol9TX3N3YXBfbG9jayk7CiAg ICByZXR1cm4gX19yZXN1bHQ7CiAgfQoKfQojIDE1NSAiL25vdG5mcy9mY2hlL0JVSUxELWdjYy1t dWRmbGFwL0lOU1QvaW5jbHVkZS9jKysvMy41LXRyZWUtc3NhL2JpdHMvc3RsX3RocmVhZHMuaCIg MwpuYW1lc3BhY2Ugc3RkCnsKICBzdHJ1Y3QgX1NUTF9tdXRleF9sb2NrCiAgewoKCgoKCiAgICBf X2d0aHJlYWRfbXV0ZXhfdCBfTV9sb2NrOwoKICAgIHZvaWQKICAgIF9NX2luaXRpYWxpemUoKQog ICAgewojIDE5MiAiL25vdG5mcy9mY2hlL0JVSUxELWdjYy1tdWRmbGFwL0lOU1QvaW5jbHVkZS9j KysvMy41LXRyZWUtc3NhL2JpdHMvc3RsX3RocmVhZHMuaCIgMwogICAgfQoKICAgIHZvaWQKICAg IF9NX2FjcXVpcmVfbG9jaygpCiAgICB7CgoKCiAgICAgIF9fZ3RocmVhZF9tdXRleF9sb2NrKCZf TV9sb2NrKTsKICAgIH0KCiAgICB2b2lkCiAgICBfTV9yZWxlYXNlX2xvY2soKQogICAgewoKCgog ICAgICBfX2d0aHJlYWRfbXV0ZXhfdW5sb2NrKCZfTV9sb2NrKTsKICAgIH0KICB9OwojIDIyOCAi L25vdG5mcy9mY2hlL0JVSUxELWdjYy1tdWRmbGFwL0lOU1QvaW5jbHVkZS9jKysvMy41LXRyZWUt c3NhL2JpdHMvc3RsX3RocmVhZHMuaCIgMwogIHN0cnVjdCBfU1RMX2F1dG9fbG9jawogIHsKICAg IF9TVExfbXV0ZXhfbG9jayYgX01fbG9jazsKCiAgICBfU1RMX2F1dG9fbG9jayhfU1RMX211dGV4 X2xvY2smIF9fbG9jaykgOiBfTV9sb2NrKF9fbG9jaykKICAgIHsgX01fbG9jay5fTV9hY3F1aXJl X2xvY2soKTsgfQoKICAgIH5fU1RMX2F1dG9fbG9jaygpIHsgX01fbG9jay5fTV9yZWxlYXNlX2xv Y2soKTsgfQoKICBwcml2YXRlOgogICAgdm9pZCBvcGVyYXRvcj0oY29uc3QgX1NUTF9hdXRvX2xv Y2smKTsKICAgIF9TVExfYXV0b19sb2NrKGNvbnN0IF9TVExfYXV0b19sb2NrJik7CiAgfTsKCn0K IyA4NyAiL25vdG5mcy9mY2hlL0JVSUxELWdjYy1tdWRmbGFwL0lOU1QvaW5jbHVkZS9jKysvMy41 LXRyZWUtc3NhL2JpdHMvc3RsX2FsbG9jLmgiIDIgMwoKIyAxICIvbm90bmZzL2ZjaGUvQlVJTEQt Z2NjLW11ZGZsYXAvSU5TVC9pbmNsdWRlL2MrKy8zLjUtdHJlZS1zc2EvaTY4Ni1wYy1saW51eC1n bnUvYml0cy9hdG9taWNpdHkuaCIgMSAzCiMgMzMgIi9ub3RuZnMvZmNoZS9CVUlMRC1nY2MtbXVk ZmxhcC9JTlNUL2luY2x1ZGUvYysrLzMuNS10cmVlLXNzYS9pNjg2LXBjLWxpbnV4LWdudS9iaXRz L2F0b21pY2l0eS5oIiAzCnR5cGVkZWYgaW50IF9BdG9taWNfd29yZDsKCnN0YXRpYyBpbmxpbmUg X0F0b21pY193b3JkCl9fYXR0cmlidXRlX18gKChfX3VudXNlZF9fKSkKX19leGNoYW5nZV9hbmRf YWRkICh2b2xhdGlsZSBfQXRvbWljX3dvcmQgKl9fbWVtLCBpbnQgX192YWwpCnsKICByZWdpc3Rl ciBfQXRvbWljX3dvcmQgX19yZXN1bHQ7CiAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJsb2NrOyB4 YWRkbCAlMCwlMSIKICAgICAgICAgICAgICAgICAgICAgICAgOiAiPXIiIChfX3Jlc3VsdCksICIr bSIgKCpfX21lbSkKICAgICAgICAgICAgICAgICAgICAgICAgOiAiMCIgKF9fdmFsKQogICAgICAg ICAgICAgICAgICAgICAgICA6ICJtZW1vcnkiKTsKICByZXR1cm4gX19yZXN1bHQ7Cn0KCnN0YXRp YyBpbmxpbmUgdm9pZApfX2F0dHJpYnV0ZV9fICgoX191bnVzZWRfXykpCl9fYXRvbWljX2FkZCAo dm9sYXRpbGUgX0F0b21pY193b3JkKiBfX21lbSwgaW50IF9fdmFsKQp7CiAgX19hc21fXyBfX3Zv bGF0aWxlX18gKCJsb2NrOyBhZGRsICUxLCUwIgogICAgICAgICAgICAgICAgICAgICAgICA6ICIr bSIgKCpfX21lbSkgOiAiaXIiIChfX3ZhbCkgOiAibWVtb3J5Iik7Cn0KIyA4OSAiL25vdG5mcy9m Y2hlL0JVSUxELWdjYy1tdWRmbGFwL0lOU1QvaW5jbHVkZS9jKysvMy41LXRyZWUtc3NhL2JpdHMv c3RsX2FsbG9jLmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CiMgMTAwICIvbm90bmZzL2ZjaGUvQlVJ TEQtZ2NjLW11ZGZsYXAvSU5TVC9pbmNsdWRlL2MrKy8zLjUtdHJlZS1zc2EvYml0cy9zdGxfYWxs b2MuaCIgMwogIGNsYXNzIF9fbmV3X2FsbG9jCiAgewogIHB1YmxpYzoKICAgIHN0YXRpYyB2b2lk KgogICAgYWxsb2NhdGUoc2l6ZV90IF9fbikKICAgIHsgcmV0dXJuIDo6b3BlcmF0b3IgbmV3KF9f bik7IH0KCiAgICBzdGF0aWMgdm9pZAogICAgZGVhbGxvY2F0ZSh2b2lkKiBfX3AsIHNpemVfdCkK ICAgIHsgOjpvcGVyYXRvciBkZWxldGUoX19wKTsgfQogIH07CiMgMTIzICIvbm90bmZzL2ZjaGUv QlVJTEQtZ2NjLW11ZGZsYXAvSU5TVC9pbmNsdWRlL2MrKy8zLjUtdHJlZS1zc2EvYml0cy9zdGxf YWxsb2MuaCIgMwogIHRlbXBsYXRlPGludCBfX2luc3Q+CiAgICBjbGFzcyBfX21hbGxvY19hbGxv YwogICAgewogICAgcHJpdmF0ZToKICAgICAgc3RhdGljIHZvaWQqIF9TX29vbV9tYWxsb2Moc2l6 ZV90KTsKICAgICAgc3RhdGljIHZvaWQgKCogX19tYWxsb2NfYWxsb2Nfb29tX2hhbmRsZXIpKCk7 CgogICAgcHVibGljOgogICAgICBzdGF0aWMgdm9pZCoKICAgICAgYWxsb2NhdGUoc2l6ZV90IF9f bikKICAgICAgewogICAgICAgIHZvaWQqIF9fcmVzdWx0ID0gbWFsbG9jKF9fbik7CiAgICAgICAg aWYgKF9fYnVpbHRpbl9leHBlY3QoX19yZXN1bHQgPT0gMCwgMCkpCiAgICAgICAgICBfX3Jlc3Vs dCA9IF9TX29vbV9tYWxsb2MoX19uKTsKICAgICAgICByZXR1cm4gX19yZXN1bHQ7CiAgICAgIH0K CiAgICAgIHN0YXRpYyB2b2lkCiAgICAgIGRlYWxsb2NhdGUodm9pZCogX19wLCBzaXplX3QgKQog ICAgICB7IGZyZWUoX19wKTsgfQoKICAgICAgc3RhdGljIHZvaWQgKCogX19zZXRfbWFsbG9jX2hh bmRsZXIodm9pZCAoKl9fZikoKSkpKCkKICAgICAgewogICAgICAgIHZvaWQgKCogX19vbGQpKCkg PSBfX21hbGxvY19hbGxvY19vb21faGFuZGxlcjsKICAgICAgICBfX21hbGxvY19hbGxvY19vb21f aGFuZGxlciA9IF9fZjsKICAgICAgICByZXR1cm4gX19vbGQ7CiAgICAgIH0KICAgIH07CgoKICB0 ZW1wbGF0ZTxpbnQgX19pbnN0PgogICAgdm9pZCAoKiBfX21hbGxvY19hbGxvYzxfX2luc3Q+Ojpf X21hbGxvY19hbGxvY19vb21faGFuZGxlcikoKSA9IDA7CgogIHRlbXBsYXRlPGludCBfX2luc3Q+ CiAgICB2b2lkKgogICAgX19tYWxsb2NfYWxsb2M8X19pbnN0Pjo6CiAgICBfU19vb21fbWFsbG9j KHNpemVfdCBfX24pCiAgICB7CiAgICAgIHZvaWQgKCogX19teV9tYWxsb2NfaGFuZGxlcikoKTsK ICAgICAgdm9pZCogX19yZXN1bHQ7CgogICAgICBmb3IgKDs7KQogICAgICAgIHsKICAgICAgICAg IF9fbXlfbWFsbG9jX2hhbmRsZXIgPSBfX21hbGxvY19hbGxvY19vb21faGFuZGxlcjsKICAgICAg ICAgIGlmIChfX2J1aWx0aW5fZXhwZWN0KF9fbXlfbWFsbG9jX2hhbmRsZXIgPT0gMCwgMCkpCiAg ICAgICAgICAgIF9fdGhyb3dfYmFkX2FsbG9jKCk7CiAgICAgICAgICAoKl9fbXlfbWFsbG9jX2hh bmRsZXIpKCk7CiAgICAgICAgICBfX3Jlc3VsdCA9IG1hbGxvYyhfX24pOwogICAgICAgICAgaWYg KF9fcmVzdWx0KQogICAgICAgICAgICByZXR1cm4gX19yZXN1bHQ7CiAgICAgICAgfQogICAgfQoK CiAgdHlwZWRlZiBfX25ld19hbGxvYyBfX21lbV9pbnRlcmZhY2U7CiMgMTkwICIvbm90bmZzL2Zj aGUvQlVJTEQtZ2NjLW11ZGZsYXAvSU5TVC9pbmNsdWRlL2MrKy8zLjUtdHJlZS1zc2EvYml0cy9z dGxfYWxsb2MuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgog ICAgY2xhc3MgX19zaW1wbGVfYWxsb2MKICAgIHsKICAgIHB1YmxpYzoKICAgICAgc3RhdGljIF9U cCoKICAgICAgYWxsb2NhdGUoc2l6ZV90IF9fbikKICAgICAgewogICAgICAgIF9UcCogX19yZXQg PSAwOwogICAgICAgIGlmIChfX24pCiAgICAgICAgICBfX3JldCA9IHN0YXRpY19jYXN0PF9UcCo+ KF9BbGxvYzo6YWxsb2NhdGUoX19uICogc2l6ZW9mKF9UcCkpKTsKICAgICAgICByZXR1cm4gX19y ZXQ7CiAgICAgIH0KCiAgICAgIHN0YXRpYyBfVHAqCiAgICAgIGFsbG9jYXRlKCkKICAgICAgeyBy ZXR1cm4gKF9UcCopIF9BbGxvYzo6YWxsb2NhdGUoc2l6ZW9mIChfVHApKTsgfQoKICAgICAgc3Rh dGljIHZvaWQKICAgICAgZGVhbGxvY2F0ZShfVHAqIF9fcCwgc2l6ZV90IF9fbikKICAgICAgeyBp ZiAoMCAhPSBfX24pIF9BbGxvYzo6ZGVhbGxvY2F0ZShfX3AsIF9fbiAqIHNpemVvZiAoX1RwKSk7 IH0KCiAgICAgIHN0YXRpYyB2b2lkCiAgICAgIGRlYWxsb2NhdGUoX1RwKiBfX3ApCiAgICAgIHsg X0FsbG9jOjpkZWFsbG9jYXRlKF9fcCwgc2l6ZW9mIChfVHApKTsgfQogICAgfTsKIyAyMzEgIi9u b3RuZnMvZmNoZS9CVUlMRC1nY2MtbXVkZmxhcC9JTlNUL2luY2x1ZGUvYysrLzMuNS10cmVlLXNz YS9iaXRzL3N0bF9hbGxvYy5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0FsbG9jPgogICAgY2xh c3MgX19kZWJ1Z19hbGxvYwogICAgewogICAgcHJpdmF0ZToKCgogICAgICBlbnVtIHtfU19leHRy YSA9IDh9OwoKICAgIHB1YmxpYzoKICAgICAgc3RhdGljIHZvaWQqCiAgICAgIGFsbG9jYXRlKHNp emVfdCBfX24pCiAgICAgIHsKICAgICAgICBjaGFyKiBfX3Jlc3VsdCA9IChjaGFyKilfQWxsb2M6 OmFsbG9jYXRlKF9fbiArIChpbnQpIF9TX2V4dHJhKTsKICAgICAgICAqKHNpemVfdCopX19yZXN1 bHQgPSBfX247CiAgICAgICAgcmV0dXJuIF9fcmVzdWx0ICsgKGludCkgX1NfZXh0cmE7CiAgICAg IH0KCiAgICAgIHN0YXRpYyB2b2lkCiAgICAgIGRlYWxsb2NhdGUodm9pZCogX19wLCBzaXplX3Qg X19uKQogICAgICB7CiAgICAgICAgY2hhciogX19yZWFsX3AgPSAoY2hhciopX19wIC0gKGludCkg X1NfZXh0cmE7CiAgICAgICAgKHN0YXRpY19jYXN0PHZvaWQ+ICgoKihzaXplX3QqKV9fcmVhbF9w ID09IF9fbikgPyAwIDogKF9fYXNzZXJ0X2ZhaWwgKCIqKHNpemVfdCopX19yZWFsX3AgPT0gX19u IiwgIi9ub3RuZnMvZmNoZS9CVUlMRC1nY2MtbXVkZmxhcC9JTlNUL2luY2x1ZGUvYysrLzMuNS10 cmVlLXNzYS9iaXRzL3N0bF9hbGxvYy5oIiwgMjUyLCBfX1BSRVRUWV9GVU5DVElPTl9fKSwgMCkp KTsKICAgICAgICBfQWxsb2M6OmRlYWxsb2NhdGUoX19yZWFsX3AsIF9fbiArIChpbnQpIF9TX2V4 dHJhKTsKICAgICAgfQogICAgfTsKIyAyODggIi9ub3RuZnMvZmNoZS9CVUlMRC1nY2MtbXVkZmxh cC9JTlNUL2luY2x1ZGUvYysrLzMuNS10cmVlLXNzYS9iaXRzL3N0bF9hbGxvYy5oIiAzCiAgdGVt cGxhdGU8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+CiAgICBjbGFzcyBfX3Bvb2xfYWxsb2MK ICAgIHsKICAgIHByaXZhdGU6CiAgICAgIGVudW0ge19BTElHTiA9IDh9OwogICAgICBlbnVtIHtf TUFYX0JZVEVTID0gMTI4fTsKICAgICAgZW51bSB7X05GUkVFTElTVFMgPSBfTUFYX0JZVEVTIC8g X0FMSUdOfTsKCiAgICAgIHVuaW9uIF9PYmoKICAgICAgewogICAgICAgIHVuaW9uIF9PYmoqIF9N X2ZyZWVfbGlzdF9saW5rOwogICAgICAgIGNoYXIgX01fY2xpZW50X2RhdGFbMV07CiAgICAgIH07 CgogICAgICBzdGF0aWMgX09iaiogdm9sYXRpbGUgX1NfZnJlZV9saXN0W19ORlJFRUxJU1RTXTsK CgogICAgICBzdGF0aWMgY2hhciogX1Nfc3RhcnRfZnJlZTsKICAgICAgc3RhdGljIGNoYXIqIF9T X2VuZF9mcmVlOwogICAgICBzdGF0aWMgc2l6ZV90IF9TX2hlYXBfc2l6ZTsKCiAgICAgIHN0YXRp YyBfU1RMX211dGV4X2xvY2sgX1NfbG9jazsKICAgICAgc3RhdGljIF9BdG9taWNfd29yZCBfU19m b3JjZV9uZXc7CgogICAgICBzdGF0aWMgc2l6ZV90CiAgICAgIF9TX3JvdW5kX3VwKHNpemVfdCBf X2J5dGVzKQogICAgICB7IHJldHVybiAoKChfX2J5dGVzKSArIChzaXplX3QpIF9BTElHTi0xKSAm IH4oKHNpemVfdCkgX0FMSUdOIC0gMSkpOyB9CgogICAgICBzdGF0aWMgc2l6ZV90CiAgICAgIF9T X2ZyZWVsaXN0X2luZGV4KHNpemVfdCBfX2J5dGVzKQogICAgICB7IHJldHVybiAoKChfX2J5dGVz KSArIChzaXplX3QpX0FMSUdOIC0gMSkvKHNpemVfdClfQUxJR04gLSAxKTsgfQoKCgogICAgICBz dGF0aWMgdm9pZCoKICAgICAgX1NfcmVmaWxsKHNpemVfdCBfX24pOwoKCgogICAgICBzdGF0aWMg Y2hhcioKICAgICAgX1NfY2h1bmtfYWxsb2Moc2l6ZV90IF9fc2l6ZSwgaW50JiBfX25vYmpzKTsK CgoKICAgICAgc3RydWN0IF9Mb2NrCiAgICAgIHsKICAgICAgICBfTG9jaygpIHsgaWYgKF9fdGhy ZWFkcykgX1NfbG9jay5fTV9hY3F1aXJlX2xvY2soKTsgfQogICAgICAgIH5fTG9jaygpIHsgaWYg KF9fdGhyZWFkcykgX1NfbG9jay5fTV9yZWxlYXNlX2xvY2soKTsgfQogICAgICB9IF9fYXR0cmli dXRlX18gKChfX3VudXNlZF9fKSk7CiAgICAgIGZyaWVuZCBzdHJ1Y3QgX0xvY2s7CgogICAgcHVi bGljOgoKICAgICAgc3RhdGljIHZvaWQqCiAgICAgIGFsbG9jYXRlKHNpemVfdCBfX24pCiAgICAg IHsKICAgICAgICB2b2lkKiBfX3JldCA9IDA7CgoKCgogICAgICAgIGlmIChfU19mb3JjZV9uZXcg PT0gMCkKICAgICAgICAgIHsKICAgICAgICAgICAgaWYgKGdldGVudigiR0xJQkNQUF9GT1JDRV9O RVciKSkKICAgICAgICAgICAgICBfX2F0b21pY19hZGQoJl9TX2ZvcmNlX25ldywgMSk7CiAgICAg ICAgICAgIGVsc2UKICAgICAgICAgICAgICBfX2F0b21pY19hZGQoJl9TX2ZvcmNlX25ldywgLTEp OwoKICAgICAgICAgICAgKHN0YXRpY19jYXN0PHZvaWQ+ICgoX1NfZm9yY2VfbmV3ICE9IDApID8g MCA6IChfX2Fzc2VydF9mYWlsICgiX1NfZm9yY2VfbmV3ICE9IDAiLCAiL25vdG5mcy9mY2hlL0JV SUxELWdjYy1tdWRmbGFwL0lOU1QvaW5jbHVkZS9jKysvMy41LXRyZWUtc3NhL2JpdHMvc3RsX2Fs bG9jLmgiLCAzNTYsIF9fUFJFVFRZX0ZVTkNUSU9OX18pLCAwKSkpOwogICAgICAgICAgfQoKICAg ICAgICBpZiAoKF9fbiA+IChzaXplX3QpIF9NQVhfQllURVMpIHx8IChfU19mb3JjZV9uZXcgPiAw KSkKICAgICAgICAgIF9fcmV0ID0gX19uZXdfYWxsb2M6OmFsbG9jYXRlKF9fbik7CiAgICAgICAg ZWxzZQogICAgICAgICAgewogICAgICAgICAgICBfT2JqKiB2b2xhdGlsZSogX19teV9mcmVlX2xp c3QgPSBfU19mcmVlX2xpc3QKICAgICAgICAgICAgICArIF9TX2ZyZWVsaXN0X2luZGV4KF9fbik7 CgoKCiAgICAgICAgICAgIF9Mb2NrIF9fbG9ja19pbnN0YW5jZTsKICAgICAgICAgICAgX09iaiog X19yZXN0cmljdF9fIF9fcmVzdWx0ID0gKl9fbXlfZnJlZV9saXN0OwogICAgICAgICAgICBpZiAo X19idWlsdGluX2V4cGVjdChfX3Jlc3VsdCA9PSAwLCAwKSkKICAgICAgICAgICAgICBfX3JldCA9 IF9TX3JlZmlsbChfU19yb3VuZF91cChfX24pKTsKICAgICAgICAgICAgZWxzZQogICAgICAgICAg ICAgIHsKICAgICAgICAgICAgICAgICpfX215X2ZyZWVfbGlzdCA9IF9fcmVzdWx0IC0+IF9NX2Zy ZWVfbGlzdF9saW5rOwogICAgICAgICAgICAgICAgX19yZXQgPSBfX3Jlc3VsdDsKICAgICAgICAg ICAgICB9CiAgICAgICAgICAgIGlmIChfX2J1aWx0aW5fZXhwZWN0KF9fcmV0ID09IDAsIDApKQog ICAgICAgICAgICAgIF9fdGhyb3dfYmFkX2FsbG9jKCk7CiAgICAgICAgICB9CiAgICAgICAgcmV0 dXJuIF9fcmV0OwogICAgICB9CgoKICAgICAgc3RhdGljIHZvaWQKICAgICAgZGVhbGxvY2F0ZSh2 b2lkKiBfX3AsIHNpemVfdCBfX24pCiAgICAgIHsKICAgICAgICBpZiAoKF9fbiA+IChzaXplX3Qp IF9NQVhfQllURVMpIHx8IChfU19mb3JjZV9uZXcgPiAwKSkKICAgICAgICAgIF9fbmV3X2FsbG9j OjpkZWFsbG9jYXRlKF9fcCwgX19uKTsKICAgICAgICBlbHNlCiAgICAgICAgICB7CiAgICAgICAg ICAgIF9PYmoqIHZvbGF0aWxlKiBfX215X2ZyZWVfbGlzdCA9IF9TX2ZyZWVfbGlzdAogICAgICAg ICAgICAgICsgX1NfZnJlZWxpc3RfaW5kZXgoX19uKTsKICAgICAgICAgICAgX09iaiogX19xID0g KF9PYmoqKV9fcDsKCgoKCiAgICAgICAgICAgIF9Mb2NrIF9fbG9ja19pbnN0YW5jZTsKICAgICAg ICAgICAgX19xIC0+IF9NX2ZyZWVfbGlzdF9saW5rID0gKl9fbXlfZnJlZV9saXN0OwogICAgICAg ICAgICAqX19teV9mcmVlX2xpc3QgPSBfX3E7CiAgICAgICAgICB9CiAgICAgIH0KICAgIH07Cgog IHRlbXBsYXRlPGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0PiBfQXRvbWljX3dvcmQKICBfX3Bv b2xfYWxsb2M8X190aHJlYWRzLCBfX2luc3Q+OjpfU19mb3JjZV9uZXcgPSAwOwoKICB0ZW1wbGF0 ZTxib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRv cj09KGNvbnN0IF9fcG9vbF9hbGxvYzxfX3RocmVhZHMsX19pbnN0PiYsCiAgICAgICAgICAgICAg IGNvbnN0IF9fcG9vbF9hbGxvYzxfX3RocmVhZHMsX19pbnN0PiYpCiAgICB7IHJldHVybiB0cnVl OyB9CgogIHRlbXBsYXRlPGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0PgogICAgaW5saW5lIGJv b2wKICAgIG9wZXJhdG9yIT0oY29uc3QgX19wb29sX2FsbG9jPF9fdGhyZWFkcyxfX2luc3Q+JiwK ICAgICAgICAgICAgICAgY29uc3QgX19wb29sX2FsbG9jPF9fdGhyZWFkcyxfX2luc3Q+JikKICAg IHsgcmV0dXJuIGZhbHNlOyB9CgoKCgoKICB0ZW1wbGF0ZTxib29sIF9fdGhyZWFkcywgaW50IF9f aW5zdD4KICAgIGNoYXIqCiAgICBfX3Bvb2xfYWxsb2M8X190aHJlYWRzLCBfX2luc3Q+OjoKICAg IF9TX2NodW5rX2FsbG9jKHNpemVfdCBfX3NpemUsIGludCYgX19ub2JqcykKICAgIHsKICAgICAg Y2hhciogX19yZXN1bHQ7CiAgICAgIHNpemVfdCBfX3RvdGFsX2J5dGVzID0gX19zaXplICogX19u b2JqczsKICAgICAgc2l6ZV90IF9fYnl0ZXNfbGVmdCA9IF9TX2VuZF9mcmVlIC0gX1Nfc3RhcnRf ZnJlZTsKCiAgICAgIGlmIChfX2J5dGVzX2xlZnQgPj0gX190b3RhbF9ieXRlcykKICAgICAgICB7 CiAgICAgICAgICBfX3Jlc3VsdCA9IF9TX3N0YXJ0X2ZyZWU7CiAgICAgICAgICBfU19zdGFydF9m cmVlICs9IF9fdG90YWxfYnl0ZXM7CiAgICAgICAgICByZXR1cm4gX19yZXN1bHQgOwogICAgICAg IH0KICAgICAgZWxzZSBpZiAoX19ieXRlc19sZWZ0ID49IF9fc2l6ZSkKICAgICAgICB7CiAgICAg ICAgICBfX25vYmpzID0gKGludCkoX19ieXRlc19sZWZ0L19fc2l6ZSk7CiAgICAgICAgICBfX3Rv dGFsX2J5dGVzID0gX19zaXplICogX19ub2JqczsKICAgICAgICAgIF9fcmVzdWx0ID0gX1Nfc3Rh cnRfZnJlZTsKICAgICAgICAgIF9TX3N0YXJ0X2ZyZWUgKz0gX190b3RhbF9ieXRlczsKICAgICAg ICAgIHJldHVybiBfX3Jlc3VsdDsKICAgICAgICB9CiAgICAgIGVsc2UKICAgICAgICB7CiAgICAg ICAgICBzaXplX3QgX19ieXRlc190b19nZXQgPQogICAgICAgICAgICAyICogX190b3RhbF9ieXRl cyArIF9TX3JvdW5kX3VwKF9TX2hlYXBfc2l6ZSA+PiA0KTsKCiAgICAgICAgICBpZiAoX19ieXRl c19sZWZ0ID4gMCkKICAgICAgICAgICAgewogICAgICAgICAgICAgIF9PYmoqIHZvbGF0aWxlKiBf X215X2ZyZWVfbGlzdCA9CiAgICAgICAgICAgICAgICBfU19mcmVlX2xpc3QgKyBfU19mcmVlbGlz dF9pbmRleChfX2J5dGVzX2xlZnQpOwoKICAgICAgICAgICAgICAoKF9PYmoqKV9TX3N0YXJ0X2Zy ZWUpIC0+IF9NX2ZyZWVfbGlzdF9saW5rID0gKl9fbXlfZnJlZV9saXN0OwogICAgICAgICAgICAg ICpfX215X2ZyZWVfbGlzdCA9IChfT2JqKilfU19zdGFydF9mcmVlOwogICAgICAgICAgICB9CiAg ICAgICAgICBfU19zdGFydF9mcmVlID0gKGNoYXIqKSBfX25ld19hbGxvYzo6YWxsb2NhdGUoX19i eXRlc190b19nZXQpOwogICAgICAgICAgaWYgKF9TX3N0YXJ0X2ZyZWUgPT0gMCkKICAgICAgICAg ICAgewogICAgICAgICAgICAgIHNpemVfdCBfX2k7CiAgICAgICAgICAgICAgX09iaiogdm9sYXRp bGUqIF9fbXlfZnJlZV9saXN0OwogICAgICAgICAgICAgIF9PYmoqIF9fcDsKCgoKICAgICAgICAg ICAgICBfX2kgPSBfX3NpemU7CiAgICAgICAgICAgICAgZm9yICg7IF9faSA8PSAoc2l6ZV90KSBf TUFYX0JZVEVTOyBfX2kgKz0gKHNpemVfdCkgX0FMSUdOKQogICAgICAgICAgICAgICAgewogICAg ICAgICAgICAgICAgICBfX215X2ZyZWVfbGlzdCA9IF9TX2ZyZWVfbGlzdCArIF9TX2ZyZWVsaXN0 X2luZGV4KF9faSk7CiAgICAgICAgICAgICAgICAgIF9fcCA9ICpfX215X2ZyZWVfbGlzdDsKICAg ICAgICAgICAgICAgICAgaWYgKF9fcCAhPSAwKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAg ICAgICAgICAgICAgICAgICpfX215X2ZyZWVfbGlzdCA9IF9fcCAtPiBfTV9mcmVlX2xpc3RfbGlu azsKICAgICAgICAgICAgICAgICAgICAgIF9TX3N0YXJ0X2ZyZWUgPSAoY2hhciopX19wOwogICAg ICAgICAgICAgICAgICAgICAgX1NfZW5kX2ZyZWUgPSBfU19zdGFydF9mcmVlICsgX19pOwogICAg ICAgICAgICAgICAgICAgICAgcmV0dXJuIF9TX2NodW5rX2FsbG9jKF9fc2l6ZSwgX19ub2Jqcyk7 CgoKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg X1NfZW5kX2ZyZWUgPSAwOwogICAgICAgICAgICAgIF9TX3N0YXJ0X2ZyZWUgPSAoY2hhciopX19u ZXdfYWxsb2M6OmFsbG9jYXRlKF9fYnl0ZXNfdG9fZ2V0KTsKCgogICAgICAgICAgICB9CiAgICAg ICAgICBfU19oZWFwX3NpemUgKz0gX19ieXRlc190b19nZXQ7CiAgICAgICAgICBfU19lbmRfZnJl ZSA9IF9TX3N0YXJ0X2ZyZWUgKyBfX2J5dGVzX3RvX2dldDsKICAgICAgICAgIHJldHVybiBfU19j aHVua19hbGxvYyhfX3NpemUsIF9fbm9ianMpOwogICAgICAgIH0KICAgIH0KCgoKCgogIHRlbXBs YXRlPGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0PgogICAgdm9pZCoKICAgIF9fcG9vbF9hbGxv YzxfX3RocmVhZHMsIF9faW5zdD46Ol9TX3JlZmlsbChzaXplX3QgX19uKQogICAgewogICAgICBp bnQgX19ub2JqcyA9IDIwOwogICAgICBjaGFyKiBfX2NodW5rID0gX1NfY2h1bmtfYWxsb2MoX19u LCBfX25vYmpzKTsKICAgICAgX09iaiogdm9sYXRpbGUqIF9fbXlfZnJlZV9saXN0OwogICAgICBf T2JqKiBfX3Jlc3VsdDsKICAgICAgX09iaiogX19jdXJyZW50X29iajsKICAgICAgX09iaiogX19u ZXh0X29iajsKICAgICAgaW50IF9faTsKCiAgICAgIGlmICgxID09IF9fbm9ianMpCiAgICAgICAg cmV0dXJuIF9fY2h1bms7CiAgICAgIF9fbXlfZnJlZV9saXN0ID0gX1NfZnJlZV9saXN0ICsgX1Nf ZnJlZWxpc3RfaW5kZXgoX19uKTsKCgogICAgICBfX3Jlc3VsdCA9IChfT2JqKilfX2NodW5rOwog ICAgICAqX19teV9mcmVlX2xpc3QgPSBfX25leHRfb2JqID0gKF9PYmoqKShfX2NodW5rICsgX19u KTsKICAgICAgZm9yIChfX2kgPSAxOyA7IF9faSsrKQogICAgICAgIHsKICAgICAgICAgIF9fY3Vy cmVudF9vYmogPSBfX25leHRfb2JqOwogICAgICAgICAgX19uZXh0X29iaiA9IChfT2JqKikoKGNo YXIqKV9fbmV4dF9vYmogKyBfX24pOwogICAgICAgICAgaWYgKF9fbm9ianMgLSAxID09IF9faSkK ICAgICAgICAgICAgewogICAgICAgICAgICAgIF9fY3VycmVudF9vYmogLT4gX01fZnJlZV9saXN0 X2xpbmsgPSAwOwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICBl bHNlCiAgICAgICAgICAgIF9fY3VycmVudF9vYmogLT4gX01fZnJlZV9saXN0X2xpbmsgPSBfX25l eHRfb2JqOwogICAgICAgIH0KICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAgfQoKCiAgdGVtcGxh dGU8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+CiAgICBfU1RMX211dGV4X2xvY2sKICAgIF9f cG9vbF9hbGxvYzxfX3RocmVhZHMsX19pbnN0Pjo6X1NfbG9jayA9IHsgezAsIDAsIDAsIFBUSFJF QURfTVVURVhfVElNRURfTlAsIHsgMCwgMCB9fSB9OwoKICB0ZW1wbGF0ZTxib29sIF9fdGhyZWFk cywgaW50IF9faW5zdD4KICAgIGNoYXIqIF9fcG9vbF9hbGxvYzxfX3RocmVhZHMsX19pbnN0Pjo6 X1Nfc3RhcnRfZnJlZSA9IDA7CgogIHRlbXBsYXRlPGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0 PgogICAgY2hhciogX19wb29sX2FsbG9jPF9fdGhyZWFkcyxfX2luc3Q+OjpfU19lbmRfZnJlZSA9 IDA7CgogIHRlbXBsYXRlPGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0PgogICAgc2l6ZV90IF9f cG9vbF9hbGxvYzxfX3RocmVhZHMsX19pbnN0Pjo6X1NfaGVhcF9zaXplID0gMDsKCiAgdGVtcGxh dGU8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+CiAgICB0eXBlbmFtZSBfX3Bvb2xfYWxsb2M8 X190aHJlYWRzLF9faW5zdD46Ol9PYmoqIHZvbGF0aWxlCiAgICBfX3Bvb2xfYWxsb2M8X190aHJl YWRzLF9faW5zdD46Ol9TX2ZyZWVfbGlzdFtfTkZSRUVMSVNUU107CgogIHR5cGVkZWYgX19wb29s X2FsbG9jPHRydWUsMD4gX19hbGxvYzsKICB0eXBlZGVmIF9fcG9vbF9hbGxvYzxmYWxzZSwwPiBf X3NpbmdsZV9jbGllbnRfYWxsb2M7CiMgNTY5ICIvbm90bmZzL2ZjaGUvQlVJTEQtZ2NjLW11ZGZs YXAvSU5TVC9pbmNsdWRlL2MrKy8zLjUtdHJlZS1zc2EvYml0cy9zdGxfYWxsb2MuaCIgMwogIHRl bXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGNsYXNzIGFsbG9jYXRvcgogICAgewogICAgICB0eXBl ZGVmIF9fYWxsb2MgX0FsbG9jOwogICAgcHVibGljOgogICAgICB0eXBlZGVmIHNpemVfdCBzaXpl X3R5cGU7CiAgICAgIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsKICAgICAgdHlw ZWRlZiBfVHAqIHBvaW50ZXI7CiAgICAgIHR5cGVkZWYgY29uc3QgX1RwKiBjb25zdF9wb2ludGVy OwogICAgICB0eXBlZGVmIF9UcCYgcmVmZXJlbmNlOwogICAgICB0eXBlZGVmIGNvbnN0IF9UcCYg Y29uc3RfcmVmZXJlbmNlOwogICAgICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBlOwoKICAgICAgdGVt cGxhdGU8dHlwZW5hbWUgX1RwMT4KICAgICAgICBzdHJ1Y3QgcmViaW5kCiAgICAgICAgeyB0eXBl ZGVmIGFsbG9jYXRvcjxfVHAxPiBvdGhlcjsgfTsKCiAgICAgIGFsbG9jYXRvcigpIHRocm93KCkg e30KICAgICAgYWxsb2NhdG9yKGNvbnN0IGFsbG9jYXRvciYpIHRocm93KCkge30KICAgICAgdGVt cGxhdGU8dHlwZW5hbWUgX1RwMT4KICAgICAgICBhbGxvY2F0b3IoY29uc3QgYWxsb2NhdG9yPF9U cDE+JikgdGhyb3coKSB7fQogICAgICB+YWxsb2NhdG9yKCkgdGhyb3coKSB7fQoKICAgICAgcG9p bnRlcgogICAgICBhZGRyZXNzKHJlZmVyZW5jZSBfX3gpIGNvbnN0IHsgcmV0dXJuICZfX3g7IH0K CiAgICAgIGNvbnN0X3BvaW50ZXIKICAgICAgYWRkcmVzcyhjb25zdF9yZWZlcmVuY2UgX194KSBj b25zdCB7IHJldHVybiAmX194OyB9CgoKCiAgICAgIF9UcCoKICAgICAgYWxsb2NhdGUoc2l6ZV90 eXBlIF9fbiwgY29uc3Qgdm9pZCogPSAwKQogICAgICB7CiAgICAgICAgX1RwKiBfX3JldCA9IDA7 CiAgICAgICAgaWYgKF9fbikKICAgICAgICAgIHsKICAgICAgICAgICAgaWYgKF9fbiA8PSB0aGlz LT5tYXhfc2l6ZSgpKQogICAgICAgICAgICAgIF9fcmV0ID0gc3RhdGljX2Nhc3Q8X1RwKj4oX0Fs bG9jOjphbGxvY2F0ZShfX24gKiBzaXplb2YoX1RwKSkpOwogICAgICAgICAgICBlbHNlCiAgICAg ICAgICAgICAgX190aHJvd19iYWRfYWxsb2MoKTsKICAgICAgICAgIH0KICAgICAgICByZXR1cm4g X19yZXQ7CiAgICAgIH0KCgogICAgICB2b2lkCiAgICAgIGRlYWxsb2NhdGUocG9pbnRlciBfX3As IHNpemVfdHlwZSBfX24pCiAgICAgIHsgX0FsbG9jOjpkZWFsbG9jYXRlKF9fcCwgX19uICogc2l6 ZW9mKF9UcCkpOyB9CgogICAgICBzaXplX3R5cGUKICAgICAgbWF4X3NpemUoKSBjb25zdCB0aHJv dygpIHsgcmV0dXJuIHNpemVfdCgtMSkgLyBzaXplb2YoX1RwKTsgfQoKICAgICAgdm9pZCBjb25z dHJ1Y3QocG9pbnRlciBfX3AsIGNvbnN0IF9UcCYgX192YWwpIHsgbmV3KF9fcCkgX1RwKF9fdmFs KTsgfQogICAgICB2b2lkIGRlc3Ryb3kocG9pbnRlciBfX3ApIHsgX19wLT5+X1RwKCk7IH0KICAg IH07CgogIHRlbXBsYXRlPD4KICAgIGNsYXNzIGFsbG9jYXRvcjx2b2lkPgogICAgewogICAgcHVi bGljOgogICAgICB0eXBlZGVmIHNpemVfdCBzaXplX3R5cGU7CiAgICAgIHR5cGVkZWYgcHRyZGlm Zl90IGRpZmZlcmVuY2VfdHlwZTsKICAgICAgdHlwZWRlZiB2b2lkKiBwb2ludGVyOwogICAgICB0 eXBlZGVmIGNvbnN0IHZvaWQqIGNvbnN0X3BvaW50ZXI7CiAgICAgIHR5cGVkZWYgdm9pZCB2YWx1 ZV90eXBlOwoKICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwMT4KICAgICAgICBzdHJ1Y3QgcmVi aW5kCiAgICAgICAgeyB0eXBlZGVmIGFsbG9jYXRvcjxfVHAxPiBvdGhlcjsgfTsKICAgIH07CgoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVDEsIHR5cGVuYW1lIF9UMj4KICAgIGlubGluZSBib29sCiAg ICBvcGVyYXRvcj09KGNvbnN0IGFsbG9jYXRvcjxfVDE+JiwgY29uc3QgYWxsb2NhdG9yPF9UMj4m KQogICAgeyByZXR1cm4gdHJ1ZTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVDEsIHR5cGVuYW1l IF9UMj4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvciE9KGNvbnN0IGFsbG9jYXRvcjxfVDE+ JiwgY29uc3QgYWxsb2NhdG9yPF9UMj4mKQogICAgeyByZXR1cm4gZmFsc2U7IH0KIyA2NjUgIi9u b3RuZnMvZmNoZS9CVUlMRC1nY2MtbXVkZmxhcC9JTlNUL2luY2x1ZGUvYysrLzMuNS10cmVlLXNz YS9iaXRzL3N0bF9hbGxvYy5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBf QWxsb2M+CiAgICBzdHJ1Y3QgX19hbGxvY2F0b3IKICAgIHsKICAgICAgX0FsbG9jIF9fdW5kZXJs eWluZ19hbGxvYzsKCiAgICAgIHR5cGVkZWYgc2l6ZV90IHNpemVfdHlwZTsKICAgICAgdHlwZWRl ZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwogICAgICB0eXBlZGVmIF9UcCogcG9pbnRlcjsK ICAgICAgdHlwZWRlZiBjb25zdCBfVHAqIGNvbnN0X3BvaW50ZXI7CiAgICAgIHR5cGVkZWYgX1Rw JiByZWZlcmVuY2U7CiAgICAgIHR5cGVkZWYgY29uc3QgX1RwJiBjb25zdF9yZWZlcmVuY2U7CiAg ICAgIHR5cGVkZWYgX1RwIHZhbHVlX3R5cGU7CgogICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAx PgogICAgICAgIHN0cnVjdCByZWJpbmQKICAgICAgICB7IHR5cGVkZWYgX19hbGxvY2F0b3I8X1Rw MSwgX0FsbG9jPiBvdGhlcjsgfTsKCiAgICAgIF9fYWxsb2NhdG9yKCkgdGhyb3coKSB7fQogICAg ICBfX2FsbG9jYXRvcihjb25zdCBfX2FsbG9jYXRvciYgX19hKSB0aHJvdygpCiAgICAgIDogX191 bmRlcmx5aW5nX2FsbG9jKF9fYS5fX3VuZGVybHlpbmdfYWxsb2MpIHt9CgogICAgICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfVHAxPgogICAgICAgIF9fYWxsb2NhdG9yKGNvbnN0IF9fYWxsb2NhdG9yPF9U cDEsIF9BbGxvYz4mIF9fYSkgdGhyb3coKQogICAgICAgIDogX191bmRlcmx5aW5nX2FsbG9jKF9f YS5fX3VuZGVybHlpbmdfYWxsb2MpIHt9CgogICAgICB+X19hbGxvY2F0b3IoKSB0aHJvdygpIHt9 CgogICAgICBwb2ludGVyCiAgICAgIGFkZHJlc3MocmVmZXJlbmNlIF9feCkgY29uc3QgeyByZXR1 cm4gJl9feDsgfQoKICAgICAgY29uc3RfcG9pbnRlcgogICAgICBhZGRyZXNzKGNvbnN0X3JlZmVy ZW5jZSBfX3gpIGNvbnN0IHsgcmV0dXJuICZfX3g7IH0KCgoKICAgICAgX1RwKgogICAgICBhbGxv Y2F0ZShzaXplX3R5cGUgX19uLCBjb25zdCB2b2lkKiA9IDApCiAgICAgIHsKICAgICAgICBfVHAq IF9fcmV0ID0gMDsKICAgICAgICBpZiAoX19uKQogICAgICAgICAgX19yZXQgPSBzdGF0aWNfY2Fz dDxfVHAqPihfQWxsb2M6OmFsbG9jYXRlKF9fbiAqIHNpemVvZihfVHApKSk7CiAgICAgICAgcmV0 dXJuIF9fcmV0OwogICAgICB9CgoKICAgICAgdm9pZAogICAgICBkZWFsbG9jYXRlKHBvaW50ZXIg X19wLCBzaXplX3R5cGUgX19uKQogICAgICB7IF9fdW5kZXJseWluZ19hbGxvYy5kZWFsbG9jYXRl KF9fcCwgX19uICogc2l6ZW9mKF9UcCkpOyB9CgogICAgICBzaXplX3R5cGUKICAgICAgbWF4X3Np emUoKSBjb25zdCB0aHJvdygpIHsgcmV0dXJuIHNpemVfdCgtMSkgLyBzaXplb2YoX1RwKTsgfQoK ICAgICAgdm9pZAogICAgICBjb25zdHJ1Y3QocG9pbnRlciBfX3AsIGNvbnN0IF9UcCYgX192YWwp IHsgbmV3KF9fcCkgX1RwKF9fdmFsKTsgfQoKICAgICAgdm9pZAogICAgICBkZXN0cm95KHBvaW50 ZXIgX19wKSB7IF9fcC0+fl9UcCgpOyB9CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQWxs b2M+CiAgICBzdHJ1Y3QgX19hbGxvY2F0b3I8dm9pZCwgX0FsbG9jPgogICAgewogICAgICB0eXBl ZGVmIHNpemVfdCBzaXplX3R5cGU7CiAgICAgIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2Vf dHlwZTsKICAgICAgdHlwZWRlZiB2b2lkKiBwb2ludGVyOwogICAgICB0eXBlZGVmIGNvbnN0IHZv aWQqIGNvbnN0X3BvaW50ZXI7CiAgICAgIHR5cGVkZWYgdm9pZCB2YWx1ZV90eXBlOwoKICAgICAg dGVtcGxhdGU8dHlwZW5hbWUgX1RwMT4KICAgICAgICBzdHJ1Y3QgcmViaW5kCiAgICAgICAgeyB0 eXBlZGVmIF9fYWxsb2NhdG9yPF9UcDEsIF9BbGxvYz4gb3RoZXI7IH07CiAgICB9OwoKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBv cGVyYXRvcj09KGNvbnN0IF9fYWxsb2NhdG9yPF9UcCxfQWxsb2M+JiBfX2ExLAogICAgICAgICAg ICAgICBjb25zdCBfX2FsbG9jYXRvcjxfVHAsX0FsbG9jPiYgX19hMikKICAgIHsgcmV0dXJuIF9f YTEuX191bmRlcmx5aW5nX2FsbG9jID09IF9fYTIuX191bmRlcmx5aW5nX2FsbG9jOyB9CgogIHRl bXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAg IG9wZXJhdG9yIT0oY29uc3QgX19hbGxvY2F0b3I8X1RwLCBfQWxsb2M+JiBfX2ExLAogICAgICAg ICAgICAgICBjb25zdCBfX2FsbG9jYXRvcjxfVHAsIF9BbGxvYz4mIF9fYTIpCiAgICB7IHJldHVy biBfX2ExLl9fdW5kZXJseWluZ19hbGxvYyAhPSBfX2EyLl9fdW5kZXJseWluZ19hbGxvYzsgfQoK CgoKCgoKICB0ZW1wbGF0ZTxpbnQgaW5zdD4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj09 KGNvbnN0IF9fbWFsbG9jX2FsbG9jPGluc3Q+JiwKICAgICAgICAgICAgICAgY29uc3QgX19tYWxs b2NfYWxsb2M8aW5zdD4mKQogICAgeyByZXR1cm4gdHJ1ZTsgfQoKICB0ZW1wbGF0ZTxpbnQgX19p bnN0PgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yIT0oY29uc3QgX19tYWxsb2NfYWxsb2M8 X19pbnN0PiYsCiAgICAgICAgICAgICAgIGNvbnN0IF9fbWFsbG9jX2FsbG9jPF9faW5zdD4mKQog ICAgeyByZXR1cm4gZmFsc2U7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0FsbG9jPgogICAgaW5s aW5lIGJvb2wKICAgIG9wZXJhdG9yPT0oY29uc3QgX19kZWJ1Z19hbGxvYzxfQWxsb2M+JiwgY29u c3QgX19kZWJ1Z19hbGxvYzxfQWxsb2M+JikKICAgIHsgcmV0dXJuIHRydWU7IH0KCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yIT0oY29uc3Qg X19kZWJ1Z19hbGxvYzxfQWxsb2M+JiwgY29uc3QgX19kZWJ1Z19hbGxvYzxfQWxsb2M+JikKICAg IHsgcmV0dXJuIGZhbHNlOyB9CiMgODE4ICIvbm90bmZzL2ZjaGUvQlVJTEQtZ2NjLW11ZGZsYXAv SU5TVC9pbmNsdWRlL2MrKy8zLjUtdHJlZS1zc2EvYml0cy9zdGxfYWxsb2MuaCIgMwogIHRlbXBs YXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jYXRvcj4KICAgIHN0cnVjdCBfQWxsb2Nf dHJhaXRzCiAgICB7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIF9TX2luc3RhbmNlbGVzcyA9IGZh bHNlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvY2F0b3I6OnRlbXBsYXRlIHJlYmluZDxf VHA+OjpvdGhlciBhbGxvY2F0b3JfdHlwZTsKICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9U cCwgdHlwZW5hbWUgX0FsbG9jYXRvcj4KICAgIGNvbnN0IGJvb2wgX0FsbG9jX3RyYWl0czxfVHAs IF9BbGxvY2F0b3I+OjpfU19pbnN0YW5jZWxlc3M7CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAs IHR5cGVuYW1lIF9UcDE+CiAgICBzdHJ1Y3QgX0FsbG9jX3RyYWl0czxfVHAsIGFsbG9jYXRvcjxf VHAxPiA+CiAgICB7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIF9TX2luc3RhbmNlbGVzcyA9IHRy dWU7CiAgICAgIHR5cGVkZWYgX19zaW1wbGVfYWxsb2M8X1RwLCBfX2FsbG9jPiBfQWxsb2NfdHlw ZTsKICAgICAgdHlwZWRlZiBhbGxvY2F0b3I8X1RwPiBhbGxvY2F0b3JfdHlwZTsKICAgIH07CgoK CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgaW50IF9faW5zdD4KICAgIHN0cnVjdCBfQWxsb2Nf dHJhaXRzPF9UcCwgX19tYWxsb2NfYWxsb2M8X19pbnN0PiA+CiAgICB7CiAgICAgIHN0YXRpYyBj b25zdCBib29sIF9TX2luc3RhbmNlbGVzcyA9IHRydWU7CiAgICAgIHR5cGVkZWYgX19zaW1wbGVf YWxsb2M8X1RwLCBfX21hbGxvY19hbGxvYzxfX2luc3Q+ID4gX0FsbG9jX3R5cGU7CiAgICAgIHR5 cGVkZWYgX19hbGxvY2F0b3I8X1RwLCBfX21hbGxvY19hbGxvYzxfX2luc3Q+ID4gYWxsb2NhdG9y X3R5cGU7CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIGJvb2wgX190aHJlYWRzLCBp bnQgX19pbnN0PgogICAgc3RydWN0IF9BbGxvY190cmFpdHM8X1RwLCBfX3Bvb2xfYWxsb2M8X190 aHJlYWRzLCBfX2luc3Q+ID4KICAgIHsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5zdGFu Y2VsZXNzID0gdHJ1ZTsKICAgICAgdHlwZWRlZiBfX3NpbXBsZV9hbGxvYzxfVHAsIF9fcG9vbF9h bGxvYzxfX3RocmVhZHMsIF9faW5zdD4gPgogICAgICBfQWxsb2NfdHlwZTsKICAgICAgdHlwZWRl ZiBfX2FsbG9jYXRvcjxfVHAsIF9fcG9vbF9hbGxvYzxfX3RocmVhZHMsIF9faW5zdD4gPgogICAg ICBhbGxvY2F0b3JfdHlwZTsKICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5h bWUgX0FsbG9jPgogICAgc3RydWN0IF9BbGxvY190cmFpdHM8X1RwLCBfX2RlYnVnX2FsbG9jPF9B bGxvYz4gPgogICAgewogICAgICBzdGF0aWMgY29uc3QgYm9vbCBfU19pbnN0YW5jZWxlc3MgPSB0 cnVlOwogICAgICB0eXBlZGVmIF9fc2ltcGxlX2FsbG9jPF9UcCwgX19kZWJ1Z19hbGxvYzxfQWxs b2M+ID4gX0FsbG9jX3R5cGU7CiAgICAgIHR5cGVkZWYgX19hbGxvY2F0b3I8X1RwLCBfX2RlYnVn X2FsbG9jPF9BbGxvYz4gPiBhbGxvY2F0b3JfdHlwZTsKICAgIH07CgoKCgoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9UcDEsIGludCBfX2luc3Q+CiAgICBzdHJ1Y3QgX0FsbG9j X3RyYWl0czxfVHAsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2FsbG9jYXRvcjxfVHAxLCBf X21hbGxvY19hbGxvYzxfX2luc3Q+ID4gPgogICAgewogICAgICBzdGF0aWMgY29uc3QgYm9vbCBf U19pbnN0YW5jZWxlc3MgPSB0cnVlOwogICAgICB0eXBlZGVmIF9fc2ltcGxlX2FsbG9jPF9UcCwg X19tYWxsb2NfYWxsb2M8X19pbnN0PiA+IF9BbGxvY190eXBlOwogICAgICB0eXBlZGVmIF9fYWxs b2NhdG9yPF9UcCwgX19tYWxsb2NfYWxsb2M8X19pbnN0PiA+IGFsbG9jYXRvcl90eXBlOwogICAg fTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfVHAxLCBib29sIF9fdGhyLCBp bnQgX19pbnN0PgogICAgc3RydWN0IF9BbGxvY190cmFpdHM8X1RwLCBfX2FsbG9jYXRvcjxfVHAx LCBfX3Bvb2xfYWxsb2M8X190aHIsIF9faW5zdD4gPiA+CiAgICB7CiAgICAgIHN0YXRpYyBjb25z dCBib29sIF9TX2luc3RhbmNlbGVzcyA9IHRydWU7CiAgICAgIHR5cGVkZWYgX19zaW1wbGVfYWxs b2M8X1RwLCBfX3Bvb2xfYWxsb2M8X190aHIsX19pbnN0PiA+CiAgICAgIF9BbGxvY190eXBlOwog ICAgICB0eXBlZGVmIF9fYWxsb2NhdG9yPF9UcCwgX19wb29sX2FsbG9jPF9fdGhyLF9faW5zdD4g PgogICAgICBhbGxvY2F0b3JfdHlwZTsKICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwg dHlwZW5hbWUgX1RwMSwgdHlwZW5hbWUgX0FsbG9jPgogICAgc3RydWN0IF9BbGxvY190cmFpdHM8 X1RwLCBfX2FsbG9jYXRvcjxfVHAxLCBfX2RlYnVnX2FsbG9jPF9BbGxvYz4gPiA+CiAgICB7CiAg ICAgIHN0YXRpYyBjb25zdCBib29sIF9TX2luc3RhbmNlbGVzcyA9IHRydWU7CiAgICAgIHR5cGVk ZWYgX19zaW1wbGVfYWxsb2M8X1RwLCBfX2RlYnVnX2FsbG9jPF9BbGxvYz4gPiBfQWxsb2NfdHlw ZTsKICAgICAgdHlwZWRlZiBfX2FsbG9jYXRvcjxfVHAsIF9fZGVidWdfYWxsb2M8X0FsbG9jPiA+ IGFsbG9jYXRvcl90eXBlOwogICAgfTsKCgoKCgogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBhbGxv Y2F0b3I8Y2hhcj47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIGFsbG9jYXRvcjx3Y2hhcl90PjsK ICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgX19wb29sX2FsbG9jPHRydWUsMD47Cn0KIyA4OCAiL25v dG5mcy9mY2hlL0JVSUxELWdjYy1tdWRmbGFwL0lOU1QvaW5jbHVkZS9jKysvMy41LXRyZWUtc3Nh L2JpdHMvc3RsX3RyZWUuaCIgMiAzCiMgMSAiL25vdG5mcy9mY2hlL0JVSUxELWdjYy1tdWRmbGFw L0lOU1QvaW5jbHVkZS9jKysvMy41LXRyZWUtc3NhL2JpdHMvc3RsX2NvbnN0cnVjdC5oIiAxIDMK IyA2NyAiL25vdG5mcy9mY2hlL0JVSUxELWdjYy1tdWRmbGFwL0lOU1QvaW5jbHVkZS9jKysvMy41 LXRyZWUtc3NhL2JpdHMvc3RsX2NvbnN0cnVjdC5oIiAzCm5hbWVzcGFjZSBzdGQKewoKCgoKCgog IHRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4KICAgIGlubGluZSB2b2lkCiAgICBfQ29u c3RydWN0KF9UMSogX19wLCBjb25zdCBfVDImIF9fdmFsdWUpCiAgICB7IG5ldyAoc3RhdGljX2Nh c3Q8dm9pZCo+KF9fcCkpIF9UMShfX3ZhbHVlKTsgfQoKCgoKCgoKICB0ZW1wbGF0ZSA8Y2xhc3Mg X1QxPgogICAgaW5saW5lIHZvaWQKICAgIF9Db25zdHJ1Y3QoX1QxKiBfX3ApCiAgICB7IG5ldyAo c3RhdGljX2Nhc3Q8dm9pZCo+KF9fcCkpIF9UMSgpOyB9CiMgOTggIi9ub3RuZnMvZmNoZS9CVUlM RC1nY2MtbXVkZmxhcC9JTlNUL2luY2x1ZGUvYysrLzMuNS10cmVlLXNzYS9iaXRzL3N0bF9jb25z dHJ1Y3QuaCIgMwogIHRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgogICAgaW5saW5l IHZvaWQKICAgIF9fZGVzdHJveV9hdXgoX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2Fy ZEl0ZXJhdG9yIF9fbGFzdCwgX19mYWxzZV90eXBlKQogICAgeyBmb3IgKCA7IF9fZmlyc3QgIT0g X19sYXN0OyArK19fZmlyc3QpIF9EZXN0cm95KCYqX19maXJzdCk7IH0KIyAxMTIgIi9ub3RuZnMv ZmNoZS9CVUlMRC1nY2MtbXVkZmxhcC9JTlNUL2luY2x1ZGUvYysrLzMuNS10cmVlLXNzYS9iaXRz L3N0bF9jb25zdHJ1Y3QuaCIgMwogIHRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgog ICAgaW5saW5lIHZvaWQKICAgIF9fZGVzdHJveV9hdXgoX0ZvcndhcmRJdGVyYXRvciwgX0Zvcndh cmRJdGVyYXRvciwgX190cnVlX3R5cGUpCiAgICB7IH0KCgoKCgoKICB0ZW1wbGF0ZSA8Y2xhc3Mg X1RwPgogICAgaW5saW5lIHZvaWQKICAgIF9EZXN0cm95KF9UcCogX19wb2ludGVyKQogICAgeyBf X3BvaW50ZXItPn5fVHAoKTsgfQojIDEzNCAiL25vdG5mcy9mY2hlL0JVSUxELWdjYy1tdWRmbGFw L0lOU1QvaW5jbHVkZS9jKysvMy41LXRyZWUtc3NhL2JpdHMvc3RsX2NvbnN0cnVjdC5oIiAzCiAg dGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CiAgICBpbmxpbmUgdm9pZAogICAgX0Rl c3Ryb3koX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCkK ICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVy YXRvcj46OnZhbHVlX3R5cGUKICAgICAgICAgICAgICAgICAgICAgICBfVmFsdWVfdHlwZTsKICAg ICAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5cGVfdHJhaXRzPF9WYWx1ZV90eXBlPjo6aGFzX3RyaXZp YWxfZGVzdHJ1Y3RvcgogICAgICAgICAgICAgICAgICAgICAgIF9IYXNfdHJpdmlhbF9kZXN0cnVj dG9yOwoKICAgICAgX19kZXN0cm95X2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9IYXNfdHJpdmlhbF9k ZXN0cnVjdG9yKCkpOwogICAgfQp9CiMgODkgIi9ub3RuZnMvZmNoZS9CVUlMRC1nY2MtbXVkZmxh cC9JTlNUL2luY2x1ZGUvYysrLzMuNS10cmVlLXNzYS9iaXRzL3N0bF90cmVlLmgiIDIgMwojIDEg Ii9ub3RuZnMvZmNoZS9CVUlMRC1nY2MtbXVkZmxhcC9JTlNUL2luY2x1ZGUvYysrLzMuNS10cmVl LXNzYS9iaXRzL3N0bF9mdW5jdGlvbi5oIiAxIDMKIyA2NCAiL25vdG5mcy9mY2hlL0JVSUxELWdj Yy1tdWRmbGFwL0lOU1QvaW5jbHVkZS9jKysvMy41LXRyZWUtc3NhL2JpdHMvc3RsX2Z1bmN0aW9u LmgiIDMKbmFtZXNwYWNlIHN0ZAp7CiMgMTAxICIvbm90bmZzL2ZjaGUvQlVJTEQtZ2NjLW11ZGZs YXAvSU5TVC9pbmNsdWRlL2MrKy8zLjUtdHJlZS1zc2EvYml0cy9zdGxfZnVuY3Rpb24uaCIgMwp0 ZW1wbGF0ZSA8Y2xhc3MgX0FyZywgY2xhc3MgX1Jlc3VsdD4Kc3RydWN0IHVuYXJ5X2Z1bmN0aW9u IHsKICB0eXBlZGVmIF9BcmcgYXJndW1lbnRfdHlwZTsKICB0eXBlZGVmIF9SZXN1bHQgcmVzdWx0 X3R5cGU7Cn07CgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0FyZzEsIGNsYXNzIF9BcmcyLCBjbGFzcyBf UmVzdWx0PgpzdHJ1Y3QgYmluYXJ5X2Z1bmN0aW9uIHsKICB0eXBlZGVmIF9BcmcxIGZpcnN0X2Fy Z3VtZW50X3R5cGU7CiAgdHlwZWRlZiBfQXJnMiBzZWNvbmRfYXJndW1lbnRfdHlwZTsKICB0eXBl ZGVmIF9SZXN1bHQgcmVzdWx0X3R5cGU7Cn07CiMgMTI3ICIvbm90bmZzL2ZjaGUvQlVJTEQtZ2Nj LW11ZGZsYXAvSU5TVC9pbmNsdWRlL2MrKy8zLjUtdHJlZS1zc2EvYml0cy9zdGxfZnVuY3Rpb24u aCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgcGx1cyA6IHB1YmxpYyBiaW5hcnlfZnVu Y3Rpb248X1RwLF9UcCxfVHA+IHsKICBfVHAgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29u c3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCArIF9feTsgfQp9OwoKCnRlbXBsYXRlIDxj bGFzcyBfVHA+CnN0cnVjdCBtaW51cyA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxf VHA+IHsKICBfVHAgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNv bnN0IHsgcmV0dXJuIF9feCAtIF9feTsgfQp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVj dCBtdWx0aXBsaWVzIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLF9UcD4gewogIF9U cCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1 cm4gX194ICogX195OyB9Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IGRpdmlkZXMg OiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsX1RwPiB7CiAgX1RwIG9wZXJhdG9yKCko Y29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggLyBfX3k7 IH0KfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgbW9kdWx1cyA6IHB1YmxpYyBiaW5h cnlfZnVuY3Rpb248X1RwLF9UcCxfVHA+CnsKICBfVHAgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9f eCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCAlIF9feTsgfQp9OwoKCnRlbXBs YXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBuZWdhdGUgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X1Rw LF9UcD4KewogIF9UcCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194KSBjb25zdCB7IHJldHVybiAt X194OyB9Cn07CiMgMTczICIvbm90bmZzL2ZjaGUvQlVJTEQtZ2NjLW11ZGZsYXAvSU5TVC9pbmNs dWRlL2MrKy8zLjUtdHJlZS1zc2EvYml0cy9zdGxfZnVuY3Rpb24uaCIgMwp0ZW1wbGF0ZSA8Y2xh c3MgX1RwPgpzdHJ1Y3QgZXF1YWxfdG8gOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAs Ym9vbD4KewogIGJvb2wgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kp IGNvbnN0IHsgcmV0dXJuIF9feCA9PSBfX3k7IH0KfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpz dHJ1Y3Qgbm90X2VxdWFsX3RvIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLGJvb2w+ CnsKICBib29sIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25z dCB7IHJldHVybiBfX3ggIT0gX195OyB9Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0 IGdyZWF0ZXIgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsYm9vbD4KewogIGJvb2wg b3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJu IF9feCA+IF9feTsgfQp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBsZXNzIDogcHVi bGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLGJvb2w+CnsKICBib29sIG9wZXJhdG9yKCkoY29u c3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggPCBfX3k7IH0K fTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgZ3JlYXRlcl9lcXVhbCA6IHB1YmxpYyBi aW5hcnlfZnVuY3Rpb248X1RwLF9UcCxib29sPgp7CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IF9U cCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194ID49IF9feTsgfQp9OwoK CnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBsZXNzX2VxdWFsIDogcHVibGljIGJpbmFyeV9m dW5jdGlvbjxfVHAsX1RwLGJvb2w+CnsKICBib29sIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gs IGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggPD0gX195OyB9Cn07CiMgMjIyICIv bm90bmZzL2ZjaGUvQlVJTEQtZ2NjLW11ZGZsYXAvSU5TVC9pbmNsdWRlL2MrKy8zLjUtdHJlZS1z c2EvYml0cy9zdGxfZnVuY3Rpb24uaCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgbG9n aWNhbF9hbmQgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsYm9vbD4KewogIGJvb2wg b3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJu IF9feCAmJiBfX3k7IH0KfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgbG9naWNhbF9v ciA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxib29sPgp7CiAgYm9vbCBvcGVyYXRv cigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194IHx8 IF9feTsgfQp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBsb2dpY2FsX25vdCA6IHB1 YmxpYyB1bmFyeV9mdW5jdGlvbjxfVHAsYm9vbD4KewogIGJvb2wgb3BlcmF0b3IoKShjb25zdCBf VHAmIF9feCkgY29uc3QgeyByZXR1cm4gIV9feDsgfQp9OwojIDI3MSAiL25vdG5mcy9mY2hlL0JV SUxELWdjYy1tdWRmbGFwL0lOU1QvaW5jbHVkZS9jKysvMy41LXRyZWUtc3NhL2JpdHMvc3RsX2Z1 bmN0aW9uLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9QcmVkaWNhdGU+CmNsYXNzIHVuYXJ5X25lZ2F0 ZQogIDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPHR5cGVuYW1lIF9QcmVkaWNhdGU6OmFyZ3VtZW50 X3R5cGUsIGJvb2w+IHsKcHJvdGVjdGVkOgogIF9QcmVkaWNhdGUgX01fcHJlZDsKcHVibGljOgog IGV4cGxpY2l0IHVuYXJ5X25lZ2F0ZShjb25zdCBfUHJlZGljYXRlJiBfX3gpIDogX01fcHJlZChf X3gpIHt9CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IHR5cGVuYW1lIF9QcmVkaWNhdGU6OmFyZ3Vt ZW50X3R5cGUmIF9feCkgY29uc3QgewogICAgcmV0dXJuICFfTV9wcmVkKF9feCk7CiAgfQp9OwoK CnRlbXBsYXRlIDxjbGFzcyBfUHJlZGljYXRlPgppbmxpbmUgdW5hcnlfbmVnYXRlPF9QcmVkaWNh dGU+Cm5vdDEoY29uc3QgX1ByZWRpY2F0ZSYgX19wcmVkKQp7CiAgcmV0dXJuIHVuYXJ5X25lZ2F0 ZTxfUHJlZGljYXRlPihfX3ByZWQpOwp9CgoKdGVtcGxhdGUgPGNsYXNzIF9QcmVkaWNhdGU+CmNs YXNzIGJpbmFyeV9uZWdhdGUKICA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248dHlwZW5hbWUgX1By ZWRpY2F0ZTo6Zmlyc3RfYXJndW1lbnRfdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg dHlwZW5hbWUgX1ByZWRpY2F0ZTo6c2Vjb25kX2FyZ3VtZW50X3R5cGUsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgIGJvb2w+IHsKcHJvdGVjdGVkOgogIF9QcmVkaWNhdGUgX01fcHJlZDsKcHVi bGljOgogIGV4cGxpY2l0IGJpbmFyeV9uZWdhdGUoY29uc3QgX1ByZWRpY2F0ZSYgX194KSA6IF9N X3ByZWQoX194KSB7fQogIGJvb2wgb3BlcmF0b3IoKShjb25zdCB0eXBlbmFtZSBfUHJlZGljYXRl OjpmaXJzdF9hcmd1bWVudF90eXBlJiBfX3gsCiAgICAgICAgICAgICAgICAgIGNvbnN0IHR5cGVu YW1lIF9QcmVkaWNhdGU6OnNlY29uZF9hcmd1bWVudF90eXBlJiBfX3kpIGNvbnN0CiAgewogICAg cmV0dXJuICFfTV9wcmVkKF9feCwgX195KTsKICB9Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9QcmVk aWNhdGU+CmlubGluZSBiaW5hcnlfbmVnYXRlPF9QcmVkaWNhdGU+Cm5vdDIoY29uc3QgX1ByZWRp Y2F0ZSYgX19wcmVkKQp7CiAgcmV0dXJuIGJpbmFyeV9uZWdhdGU8X1ByZWRpY2F0ZT4oX19wcmVk KTsKfQojIDM0OSAiL25vdG5mcy9mY2hlL0JVSUxELWdjYy1tdWRmbGFwL0lOU1QvaW5jbHVkZS9j KysvMy41LXRyZWUtc3NhL2JpdHMvc3RsX2Z1bmN0aW9uLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9P cGVyYXRpb24+CmNsYXNzIGJpbmRlcjFzdAogIDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPHR5cGVu YW1lIF9PcGVyYXRpb246OnNlY29uZF9hcmd1bWVudF90eXBlLAogICAgICAgICAgICAgICAgICAg ICAgICAgIHR5cGVuYW1lIF9PcGVyYXRpb246OnJlc3VsdF90eXBlPiB7CnByb3RlY3RlZDoKICBf T3BlcmF0aW9uIG9wOwogIHR5cGVuYW1lIF9PcGVyYXRpb246OmZpcnN0X2FyZ3VtZW50X3R5cGUg dmFsdWU7CnB1YmxpYzoKICBiaW5kZXIxc3QoY29uc3QgX09wZXJhdGlvbiYgX194LAogICAgICAg ICAgICBjb25zdCB0eXBlbmFtZSBfT3BlcmF0aW9uOjpmaXJzdF9hcmd1bWVudF90eXBlJiBfX3kp CiAgICAgIDogb3AoX194KSwgdmFsdWUoX195KSB7fQogIHR5cGVuYW1lIF9PcGVyYXRpb246OnJl c3VsdF90eXBlCiAgb3BlcmF0b3IoKShjb25zdCB0eXBlbmFtZSBfT3BlcmF0aW9uOjpzZWNvbmRf YXJndW1lbnRfdHlwZSYgX194KSBjb25zdCB7CiAgICByZXR1cm4gb3AodmFsdWUsIF9feCk7CiAg fQoKCiAgdHlwZW5hbWUgX09wZXJhdGlvbjo6cmVzdWx0X3R5cGUKICBvcGVyYXRvcigpKHR5cGVu YW1lIF9PcGVyYXRpb246OnNlY29uZF9hcmd1bWVudF90eXBlJiBfX3gpIGNvbnN0IHsKICAgIHJl dHVybiBvcCh2YWx1ZSwgX194KTsKICB9Cgp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfT3BlcmF0aW9u LCBjbGFzcyBfVHA+CmlubGluZSBiaW5kZXIxc3Q8X09wZXJhdGlvbj4KYmluZDFzdChjb25zdCBf T3BlcmF0aW9uJiBfX2ZuLCBjb25zdCBfVHAmIF9feCkKewogIHR5cGVkZWYgdHlwZW5hbWUgX09w ZXJhdGlvbjo6Zmlyc3RfYXJndW1lbnRfdHlwZSBfQXJnMV90eXBlOwogIHJldHVybiBiaW5kZXIx c3Q8X09wZXJhdGlvbj4oX19mbiwgX0FyZzFfdHlwZShfX3gpKTsKfQoKCnRlbXBsYXRlIDxjbGFz cyBfT3BlcmF0aW9uPgpjbGFzcyBiaW5kZXIybmQKICA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjx0 eXBlbmFtZSBfT3BlcmF0aW9uOjpmaXJzdF9hcmd1bWVudF90eXBlLAogICAgICAgICAgICAgICAg ICAgICAgICAgIHR5cGVuYW1lIF9PcGVyYXRpb246OnJlc3VsdF90eXBlPiB7CnByb3RlY3RlZDoK ICBfT3BlcmF0aW9uIG9wOwogIHR5cGVuYW1lIF9PcGVyYXRpb246OnNlY29uZF9hcmd1bWVudF90 eXBlIHZhbHVlOwpwdWJsaWM6CiAgYmluZGVyMm5kKGNvbnN0IF9PcGVyYXRpb24mIF9feCwKICAg ICAgICAgICAgY29uc3QgdHlwZW5hbWUgX09wZXJhdGlvbjo6c2Vjb25kX2FyZ3VtZW50X3R5cGUm IF9feSkKICAgICAgOiBvcChfX3gpLCB2YWx1ZShfX3kpIHt9CiAgdHlwZW5hbWUgX09wZXJhdGlv bjo6cmVzdWx0X3R5cGUKICBvcGVyYXRvcigpKGNvbnN0IHR5cGVuYW1lIF9PcGVyYXRpb246OmZp cnN0X2FyZ3VtZW50X3R5cGUmIF9feCkgY29uc3QgewogICAgcmV0dXJuIG9wKF9feCwgdmFsdWUp OwogIH0KCgogIHR5cGVuYW1lIF9PcGVyYXRpb246OnJlc3VsdF90eXBlCiAgb3BlcmF0b3IoKSh0 eXBlbmFtZSBfT3BlcmF0aW9uOjpmaXJzdF9hcmd1bWVudF90eXBlJiBfX3gpIGNvbnN0IHsKICAg IHJldHVybiBvcChfX3gsIHZhbHVlKTsKICB9Cgp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfT3BlcmF0 aW9uLCBjbGFzcyBfVHA+CmlubGluZSBiaW5kZXIybmQ8X09wZXJhdGlvbj4KYmluZDJuZChjb25z dCBfT3BlcmF0aW9uJiBfX2ZuLCBjb25zdCBfVHAmIF9feCkKewogIHR5cGVkZWYgdHlwZW5hbWUg X09wZXJhdGlvbjo6c2Vjb25kX2FyZ3VtZW50X3R5cGUgX0FyZzJfdHlwZTsKICByZXR1cm4gYmlu ZGVyMm5kPF9PcGVyYXRpb24+KF9fZm4sIF9BcmcyX3R5cGUoX194KSk7Cn0KIyA0MzggIi9ub3Ru ZnMvZmNoZS9CVUlMRC1nY2MtbXVkZmxhcC9JTlNUL2luY2x1ZGUvYysrLzMuNS10cmVlLXNzYS9i aXRzL3N0bF9mdW5jdGlvbi5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfQXJnLCBjbGFzcyBfUmVzdWx0 PgpjbGFzcyBwb2ludGVyX3RvX3VuYXJ5X2Z1bmN0aW9uIDogcHVibGljIHVuYXJ5X2Z1bmN0aW9u PF9BcmcsIF9SZXN1bHQ+IHsKcHJvdGVjdGVkOgogIF9SZXN1bHQgKCpfTV9wdHIpKF9BcmcpOwpw dWJsaWM6CiAgcG9pbnRlcl90b191bmFyeV9mdW5jdGlvbigpIHt9CiAgZXhwbGljaXQgcG9pbnRl cl90b191bmFyeV9mdW5jdGlvbihfUmVzdWx0ICgqX194KShfQXJnKSkgOiBfTV9wdHIoX194KSB7 fQogIF9SZXN1bHQgb3BlcmF0b3IoKShfQXJnIF9feCkgY29uc3QgeyByZXR1cm4gX01fcHRyKF9f eCk7IH0KfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0FyZywgY2xhc3MgX1Jlc3VsdD4KaW5saW5lIHBv aW50ZXJfdG9fdW5hcnlfZnVuY3Rpb248X0FyZywgX1Jlc3VsdD4gcHRyX2Z1bihfUmVzdWx0ICgq X194KShfQXJnKSkKewogIHJldHVybiBwb2ludGVyX3RvX3VuYXJ5X2Z1bmN0aW9uPF9BcmcsIF9S ZXN1bHQ+KF9feCk7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX0FyZzEsIGNsYXNzIF9BcmcyLCBjbGFz cyBfUmVzdWx0PgpjbGFzcyBwb2ludGVyX3RvX2JpbmFyeV9mdW5jdGlvbiA6CiAgcHVibGljIGJp bmFyeV9mdW5jdGlvbjxfQXJnMSxfQXJnMixfUmVzdWx0PiB7CnByb3RlY3RlZDoKICAgIF9SZXN1 bHQgKCpfTV9wdHIpKF9BcmcxLCBfQXJnMik7CnB1YmxpYzoKICAgIHBvaW50ZXJfdG9fYmluYXJ5 X2Z1bmN0aW9uKCkge30KICAgIGV4cGxpY2l0IHBvaW50ZXJfdG9fYmluYXJ5X2Z1bmN0aW9uKF9S ZXN1bHQgKCpfX3gpKF9BcmcxLCBfQXJnMikpCiAgICAgIDogX01fcHRyKF9feCkge30KICAgIF9S ZXN1bHQgb3BlcmF0b3IoKShfQXJnMSBfX3gsIF9BcmcyIF9feSkgY29uc3QgewogICAgICByZXR1 cm4gX01fcHRyKF9feCwgX195KTsKICAgIH0KfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0FyZzEsIGNs YXNzIF9BcmcyLCBjbGFzcyBfUmVzdWx0PgppbmxpbmUgcG9pbnRlcl90b19iaW5hcnlfZnVuY3Rp b248X0FyZzEsX0FyZzIsX1Jlc3VsdD4KcHRyX2Z1bihfUmVzdWx0ICgqX194KShfQXJnMSwgX0Fy ZzIpKSB7CiAgcmV0dXJuIHBvaW50ZXJfdG9fYmluYXJ5X2Z1bmN0aW9uPF9BcmcxLF9BcmcyLF9S ZXN1bHQ+KF9feCk7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgX0lkZW50aXR5IDog cHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9UcCxfVHA+IHsKICBfVHAmIG9wZXJhdG9yKCkoX1RwJiBf X3gpIGNvbnN0IHsgcmV0dXJuIF9feDsgfQogIGNvbnN0IF9UcCYgb3BlcmF0b3IoKShjb25zdCBf VHAmIF9feCkgY29uc3QgeyByZXR1cm4gX194OyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1BhaXI+ CnN0cnVjdCBfU2VsZWN0MXN0IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9QYWlyLCB0eXBlbmFt ZSBfUGFpcjo6Zmlyc3RfdHlwZT4gewogIHR5cGVuYW1lIF9QYWlyOjpmaXJzdF90eXBlJiBvcGVy YXRvcigpKF9QYWlyJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBfX3guZmlyc3Q7CiAgfQogIGNv bnN0IHR5cGVuYW1lIF9QYWlyOjpmaXJzdF90eXBlJiBvcGVyYXRvcigpKGNvbnN0IF9QYWlyJiBf X3gpIGNvbnN0IHsKICAgIHJldHVybiBfX3guZmlyc3Q7CiAgfQp9OwoKdGVtcGxhdGUgPGNsYXNz IF9QYWlyPgpzdHJ1Y3QgX1NlbGVjdDJuZCA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfUGFpciwg dHlwZW5hbWUgX1BhaXI6OnNlY29uZF90eXBlPgp7CiAgdHlwZW5hbWUgX1BhaXI6OnNlY29uZF90 eXBlJiBvcGVyYXRvcigpKF9QYWlyJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBfX3guc2Vjb25k OwogIH0KICBjb25zdCB0eXBlbmFtZSBfUGFpcjo6c2Vjb25kX3R5cGUmIG9wZXJhdG9yKCkoY29u c3QgX1BhaXImIF9feCkgY29uc3QgewogICAgcmV0dXJuIF9feC5zZWNvbmQ7CiAgfQp9OwojIDUy OCAiL25vdG5mcy9mY2hlL0JVSUxELWdjYy1tdWRmbGFwL0lOU1QvaW5jbHVkZS9jKysvMy41LXRy ZWUtc3NhL2JpdHMvc3RsX2Z1bmN0aW9uLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNz IF9UcD4KY2xhc3MgbWVtX2Z1bl90IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9UcCosX1JldD4g ewpwdWJsaWM6CiAgZXhwbGljaXQgbWVtX2Z1bl90KF9SZXQgKF9UcDo6Kl9fcGYpKCkpIDogX01f ZihfX3BmKSB7fQogIF9SZXQgb3BlcmF0b3IoKShfVHAqIF9fcCkgY29uc3QgeyByZXR1cm4gKF9f cC0+Kl9NX2YpKCk7IH0KcHJpdmF0ZToKICBfUmV0IChfVHA6OipfTV9mKSgpOwp9OwoKCnRlbXBs YXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHA+CmNsYXNzIGNvbnN0X21lbV9mdW5fdCA6IHB1Ymxp YyB1bmFyeV9mdW5jdGlvbjxjb25zdCBfVHAqLF9SZXQ+IHsKcHVibGljOgogIGV4cGxpY2l0IGNv bnN0X21lbV9mdW5fdChfUmV0IChfVHA6OipfX3BmKSgpIGNvbnN0KSA6IF9NX2YoX19wZikge30K ICBfUmV0IG9wZXJhdG9yKCkoY29uc3QgX1RwKiBfX3ApIGNvbnN0IHsgcmV0dXJuIChfX3AtPipf TV9mKSgpOyB9CnByaXZhdGU6CiAgX1JldCAoX1RwOjoqX01fZikoKSBjb25zdDsKfTsKCgp0ZW1w bGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwPgpjbGFzcyBtZW1fZnVuX3JlZl90IDogcHVibGlj IHVuYXJ5X2Z1bmN0aW9uPF9UcCxfUmV0PiB7CnB1YmxpYzoKICBleHBsaWNpdCBtZW1fZnVuX3Jl Zl90KF9SZXQgKF9UcDo6Kl9fcGYpKCkpIDogX01fZihfX3BmKSB7fQogIF9SZXQgb3BlcmF0b3Io KShfVHAmIF9fcikgY29uc3QgeyByZXR1cm4gKF9fci4qX01fZikoKTsgfQpwcml2YXRlOgogIF9S ZXQgKF9UcDo6Kl9NX2YpKCk7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcD4K Y2xhc3MgY29uc3RfbWVtX2Z1bl9yZWZfdCA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfVHAsX1Jl dD4gewpwdWJsaWM6CiAgZXhwbGljaXQgY29uc3RfbWVtX2Z1bl9yZWZfdChfUmV0IChfVHA6Oipf X3BmKSgpIGNvbnN0KSA6IF9NX2YoX19wZikge30KICBfUmV0IG9wZXJhdG9yKCkoY29uc3QgX1Rw JiBfX3IpIGNvbnN0IHsgcmV0dXJuIChfX3IuKl9NX2YpKCk7IH0KcHJpdmF0ZToKICBfUmV0IChf VHA6OipfTV9mKSgpIGNvbnN0Owp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAs IGNsYXNzIF9Bcmc+CmNsYXNzIG1lbV9mdW4xX3QgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9U cCosX0FyZyxfUmV0PiB7CnB1YmxpYzoKICBleHBsaWNpdCBtZW1fZnVuMV90KF9SZXQgKF9UcDo6 Kl9fcGYpKF9BcmcpKSA6IF9NX2YoX19wZikge30KICBfUmV0IG9wZXJhdG9yKCkoX1RwKiBfX3As IF9BcmcgX194KSBjb25zdCB7IHJldHVybiAoX19wLT4qX01fZikoX194KTsgfQpwcml2YXRlOgog IF9SZXQgKF9UcDo6Kl9NX2YpKF9BcmcpOwp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFz cyBfVHAsIGNsYXNzIF9Bcmc+CmNsYXNzIGNvbnN0X21lbV9mdW4xX3QgOiBwdWJsaWMgYmluYXJ5 X2Z1bmN0aW9uPGNvbnN0IF9UcCosX0FyZyxfUmV0PiB7CnB1YmxpYzoKICBleHBsaWNpdCBjb25z dF9tZW1fZnVuMV90KF9SZXQgKF9UcDo6Kl9fcGYpKF9BcmcpIGNvbnN0KSA6IF9NX2YoX19wZikg e30KICBfUmV0IG9wZXJhdG9yKCkoY29uc3QgX1RwKiBfX3AsIF9BcmcgX194KSBjb25zdAogICAg eyByZXR1cm4gKF9fcC0+Kl9NX2YpKF9feCk7IH0KcHJpdmF0ZToKICBfUmV0IChfVHA6OipfTV9m KShfQXJnKSBjb25zdDsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwLCBjbGFz cyBfQXJnPgpjbGFzcyBtZW1fZnVuMV9yZWZfdCA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1Rw LF9BcmcsX1JldD4gewpwdWJsaWM6CiAgZXhwbGljaXQgbWVtX2Z1bjFfcmVmX3QoX1JldCAoX1Rw OjoqX19wZikoX0FyZykpIDogX01fZihfX3BmKSB7fQogIF9SZXQgb3BlcmF0b3IoKShfVHAmIF9f ciwgX0FyZyBfX3gpIGNvbnN0IHsgcmV0dXJuIChfX3IuKl9NX2YpKF9feCk7IH0KcHJpdmF0ZToK ICBfUmV0IChfVHA6OipfTV9mKShfQXJnKTsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xh c3MgX1RwLCBjbGFzcyBfQXJnPgpjbGFzcyBjb25zdF9tZW1fZnVuMV9yZWZfdCA6IHB1YmxpYyBi aW5hcnlfZnVuY3Rpb248X1RwLF9BcmcsX1JldD4gewpwdWJsaWM6CiAgZXhwbGljaXQgY29uc3Rf bWVtX2Z1bjFfcmVmX3QoX1JldCAoX1RwOjoqX19wZikoX0FyZykgY29uc3QpIDogX01fZihfX3Bm KSB7fQogIF9SZXQgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9fciwgX0FyZyBfX3gpIGNvbnN0IHsg cmV0dXJuIChfX3IuKl9NX2YpKF9feCk7IH0KcHJpdmF0ZToKICBfUmV0IChfVHA6OipfTV9mKShf QXJnKSBjb25zdDsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpjbGFzcyBtZW1fZnVuX3Q8dm9p ZCwgX1RwPiA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfVHAqLHZvaWQ+IHsKcHVibGljOgogIGV4 cGxpY2l0IG1lbV9mdW5fdCh2b2lkIChfVHA6OipfX3BmKSgpKSA6IF9NX2YoX19wZikge30KICB2 b2lkIG9wZXJhdG9yKCkoX1RwKiBfX3ApIGNvbnN0IHsgKF9fcC0+Kl9NX2YpKCk7IH0KcHJpdmF0 ZToKICB2b2lkIChfVHA6OipfTV9mKSgpOwp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CmNsYXNz IGNvbnN0X21lbV9mdW5fdDx2b2lkLCBfVHA+IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPGNvbnN0 IF9UcCosdm9pZD4gewpwdWJsaWM6CiAgZXhwbGljaXQgY29uc3RfbWVtX2Z1bl90KHZvaWQgKF9U cDo6Kl9fcGYpKCkgY29uc3QpIDogX01fZihfX3BmKSB7fQogIHZvaWQgb3BlcmF0b3IoKShjb25z dCBfVHAqIF9fcCkgY29uc3QgeyAoX19wLT4qX01fZikoKTsgfQpwcml2YXRlOgogIHZvaWQgKF9U cDo6Kl9NX2YpKCkgY29uc3Q7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4KY2xhc3MgbWVtX2Z1 bl9yZWZfdDx2b2lkLCBfVHA+IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9UcCx2b2lkPiB7CnB1 YmxpYzoKICBleHBsaWNpdCBtZW1fZnVuX3JlZl90KHZvaWQgKF9UcDo6Kl9fcGYpKCkpIDogX01f ZihfX3BmKSB7fQogIHZvaWQgb3BlcmF0b3IoKShfVHAmIF9fcikgY29uc3QgeyAoX19yLipfTV9m KSgpOyB9CnByaXZhdGU6CiAgdm9pZCAoX1RwOjoqX01fZikoKTsKfTsKCgp0ZW1wbGF0ZSA8Y2xh c3MgX1RwPgpjbGFzcyBjb25zdF9tZW1fZnVuX3JlZl90PHZvaWQsIF9UcD4gOiBwdWJsaWMgdW5h cnlfZnVuY3Rpb248X1RwLHZvaWQ+IHsKcHVibGljOgogIGV4cGxpY2l0IGNvbnN0X21lbV9mdW5f cmVmX3Qodm9pZCAoX1RwOjoqX19wZikoKSBjb25zdCkgOiBfTV9mKF9fcGYpIHt9CiAgdm9pZCBv cGVyYXRvcigpKGNvbnN0IF9UcCYgX19yKSBjb25zdCB7IChfX3IuKl9NX2YpKCk7IH0KcHJpdmF0 ZToKICB2b2lkIChfVHA6OipfTV9mKSgpIGNvbnN0Owp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHAs IGNsYXNzIF9Bcmc+CmNsYXNzIG1lbV9mdW4xX3Q8dm9pZCwgX1RwLCBfQXJnPiA6IHB1YmxpYyBi aW5hcnlfZnVuY3Rpb248X1RwKixfQXJnLHZvaWQ+IHsKcHVibGljOgogIGV4cGxpY2l0IG1lbV9m dW4xX3Qodm9pZCAoX1RwOjoqX19wZikoX0FyZykpIDogX01fZihfX3BmKSB7fQogIHZvaWQgb3Bl cmF0b3IoKShfVHAqIF9fcCwgX0FyZyBfX3gpIGNvbnN0IHsgKF9fcC0+Kl9NX2YpKF9feCk7IH0K cHJpdmF0ZToKICB2b2lkIChfVHA6OipfTV9mKShfQXJnKTsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3Mg X1RwLCBjbGFzcyBfQXJnPgpjbGFzcyBjb25zdF9tZW1fZnVuMV90PHZvaWQsIF9UcCwgX0FyZz4K ICA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248Y29uc3QgX1RwKixfQXJnLHZvaWQ+IHsKcHVibGlj OgogIGV4cGxpY2l0IGNvbnN0X21lbV9mdW4xX3Qodm9pZCAoX1RwOjoqX19wZikoX0FyZykgY29u c3QpIDogX01fZihfX3BmKSB7fQogIHZvaWQgb3BlcmF0b3IoKShjb25zdCBfVHAqIF9fcCwgX0Fy ZyBfX3gpIGNvbnN0IHsgKF9fcC0+Kl9NX2YpKF9feCk7IH0KcHJpdmF0ZToKICB2b2lkIChfVHA6 OipfTV9mKShfQXJnKSBjb25zdDsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQXJn PgpjbGFzcyBtZW1fZnVuMV9yZWZfdDx2b2lkLCBfVHAsIF9Bcmc+CiAgOiBwdWJsaWMgYmluYXJ5 X2Z1bmN0aW9uPF9UcCxfQXJnLHZvaWQ+IHsKcHVibGljOgogIGV4cGxpY2l0IG1lbV9mdW4xX3Jl Zl90KHZvaWQgKF9UcDo6Kl9fcGYpKF9BcmcpKSA6IF9NX2YoX19wZikge30KICB2b2lkIG9wZXJh dG9yKCkoX1RwJiBfX3IsIF9BcmcgX194KSBjb25zdCB7IChfX3IuKl9NX2YpKF9feCk7IH0KcHJp dmF0ZToKICB2b2lkIChfVHA6OipfTV9mKShfQXJnKTsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1Rw LCBjbGFzcyBfQXJnPgpjbGFzcyBjb25zdF9tZW1fZnVuMV9yZWZfdDx2b2lkLCBfVHAsIF9Bcmc+ CiAgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfQXJnLHZvaWQ+IHsKcHVibGljOgogIGV4 cGxpY2l0IGNvbnN0X21lbV9mdW4xX3JlZl90KHZvaWQgKF9UcDo6Kl9fcGYpKF9BcmcpIGNvbnN0 KSA6IF9NX2YoX19wZikge30KICB2b2lkIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3IsIF9Bcmcg X194KSBjb25zdCB7IChfX3IuKl9NX2YpKF9feCk7IH0KcHJpdmF0ZToKICB2b2lkIChfVHA6Oipf TV9mKShfQXJnKSBjb25zdDsKfTsKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1Rw PgppbmxpbmUgbWVtX2Z1bl90PF9SZXQsX1RwPiBtZW1fZnVuKF9SZXQgKF9UcDo6Kl9fZikoKSkK ICB7IHJldHVybiBtZW1fZnVuX3Q8X1JldCxfVHA+KF9fZik7IH0KCnRlbXBsYXRlIDxjbGFzcyBf UmV0LCBjbGFzcyBfVHA+CmlubGluZSBjb25zdF9tZW1fZnVuX3Q8X1JldCxfVHA+IG1lbV9mdW4o X1JldCAoX1RwOjoqX19mKSgpIGNvbnN0KQogIHsgcmV0dXJuIGNvbnN0X21lbV9mdW5fdDxfUmV0 LF9UcD4oX19mKTsgfQoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcD4KaW5saW5lIG1l bV9mdW5fcmVmX3Q8X1JldCxfVHA+IG1lbV9mdW5fcmVmKF9SZXQgKF9UcDo6Kl9fZikoKSkKICB7 IHJldHVybiBtZW1fZnVuX3JlZl90PF9SZXQsX1RwPihfX2YpOyB9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg X1JldCwgY2xhc3MgX1RwPgppbmxpbmUgY29uc3RfbWVtX2Z1bl9yZWZfdDxfUmV0LF9UcD4gbWVt X2Z1bl9yZWYoX1JldCAoX1RwOjoqX19mKSgpIGNvbnN0KQogIHsgcmV0dXJuIGNvbnN0X21lbV9m dW5fcmVmX3Q8X1JldCxfVHA+KF9fZik7IH0KCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBf VHAsIGNsYXNzIF9Bcmc+CmlubGluZSBtZW1fZnVuMV90PF9SZXQsX1RwLF9Bcmc+IG1lbV9mdW4o X1JldCAoX1RwOjoqX19mKShfQXJnKSkKICB7IHJldHVybiBtZW1fZnVuMV90PF9SZXQsX1RwLF9B cmc+KF9fZik7IH0KCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+ CmlubGluZSBjb25zdF9tZW1fZnVuMV90PF9SZXQsX1RwLF9Bcmc+IG1lbV9mdW4oX1JldCAoX1Rw OjoqX19mKShfQXJnKSBjb25zdCkKICB7IHJldHVybiBjb25zdF9tZW1fZnVuMV90PF9SZXQsX1Rw LF9Bcmc+KF9fZik7IH0KCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9B cmc+CmlubGluZSBtZW1fZnVuMV9yZWZfdDxfUmV0LF9UcCxfQXJnPiBtZW1fZnVuX3JlZihfUmV0 IChfVHA6OipfX2YpKF9BcmcpKQogIHsgcmV0dXJuIG1lbV9mdW4xX3JlZl90PF9SZXQsX1RwLF9B cmc+KF9fZik7IH0KCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+ CmlubGluZSBjb25zdF9tZW1fZnVuMV9yZWZfdDxfUmV0LF9UcCxfQXJnPgptZW1fZnVuX3JlZihf UmV0IChfVHA6OipfX2YpKF9BcmcpIGNvbnN0KQogIHsgcmV0dXJuIGNvbnN0X21lbV9mdW4xX3Jl Zl90PF9SZXQsX1RwLF9Bcmc+KF9fZik7IH0KCgoKfQojIDkwICIvbm90bmZzL2ZjaGUvQlVJTEQt Z2NjLW11ZGZsYXAvSU5TVC9pbmNsdWRlL2MrKy8zLjUtdHJlZS1zc2EvYml0cy9zdGxfdHJlZS5o IiAyIDMKCm5hbWVzcGFjZSBzdGQKewogIGVudW0gX1JiX3RyZWVfY29sb3IgeyBfTV9yZWQgPSBm YWxzZSwgX01fYmxhY2sgPSB0cnVlIH07CgogIHN0cnVjdCBfUmJfdHJlZV9ub2RlX2Jhc2UKICB7 CiAgICB0eXBlZGVmIF9SYl90cmVlX25vZGVfYmFzZSogX0Jhc2VfcHRyOwoKICAgIF9SYl90cmVl X2NvbG9yIF9NX2NvbG9yOwogICAgX0Jhc2VfcHRyIF9NX3BhcmVudDsKICAgIF9CYXNlX3B0ciBf TV9sZWZ0OwogICAgX0Jhc2VfcHRyIF9NX3JpZ2h0OwoKICAgIHN0YXRpYyBfQmFzZV9wdHIKICAg IF9TX21pbmltdW0oX0Jhc2VfcHRyIF9feCkKICAgIHsKICAgICAgd2hpbGUgKF9feC0+X01fbGVm dCAhPSAwKSBfX3ggPSBfX3gtPl9NX2xlZnQ7CiAgICAgIHJldHVybiBfX3g7CiAgICB9CgogICAg c3RhdGljIF9CYXNlX3B0cgogICAgX1NfbWF4aW11bShfQmFzZV9wdHIgX194KQogICAgewogICAg ICB3aGlsZSAoX194LT5fTV9yaWdodCAhPSAwKSBfX3ggPSBfX3gtPl9NX3JpZ2h0OwogICAgICBy ZXR1cm4gX194OwogICAgfQogIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9WYWw+CiAgICBzdHJ1 Y3QgX1JiX3RyZWVfbm9kZSA6IHB1YmxpYyBfUmJfdHJlZV9ub2RlX2Jhc2UKICAgIHsKICAgICAg dHlwZWRlZiBfUmJfdHJlZV9ub2RlPF9WYWw+KiBfTGlua190eXBlOwogICAgICBfVmFsIF9NX3Zh bHVlX2ZpZWxkOwogICAgfTsKCiAgc3RydWN0IF9SYl90cmVlX2Jhc2VfaXRlcmF0b3IKICB7CiAg ICB0eXBlZGVmIF9SYl90cmVlX25vZGVfYmFzZTo6X0Jhc2VfcHRyIF9CYXNlX3B0cjsKICAgIHR5 cGVkZWYgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgICB0 eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CgogICAgX0Jhc2VfcHRyIF9NX25vZGU7 CgogICAgdm9pZAogICAgX01faW5jcmVtZW50KCkKICAgIHsKICAgICAgaWYgKF9NX25vZGUtPl9N X3JpZ2h0ICE9IDApCiAgICAgICAgewogICAgICAgICAgX01fbm9kZSA9IF9NX25vZGUtPl9NX3Jp Z2h0OwogICAgICAgICAgd2hpbGUgKF9NX25vZGUtPl9NX2xlZnQgIT0gMCkKICAgICAgICAgICAg X01fbm9kZSA9IF9NX25vZGUtPl9NX2xlZnQ7CiAgICAgICAgfQogICAgICBlbHNlCiAgICAgICAg ewogICAgICAgICAgX0Jhc2VfcHRyIF9feSA9IF9NX25vZGUtPl9NX3BhcmVudDsKICAgICAgICAg IHdoaWxlIChfTV9ub2RlID09IF9feS0+X01fcmlnaHQpCiAgICAgICAgICAgIHsKICAgICAgICAg ICAgICBfTV9ub2RlID0gX195OwogICAgICAgICAgICAgIF9feSA9IF9feS0+X01fcGFyZW50Owog ICAgICAgICAgICB9CiAgICAgICAgICBpZiAoX01fbm9kZS0+X01fcmlnaHQgIT0gX195KQogICAg ICAgICAgICBfTV9ub2RlID0gX195OwogICAgICAgIH0KICAgIH0KCiAgICB2b2lkCiAgICBfTV9k ZWNyZW1lbnQoKQogICAgewogICAgICBpZiAoX01fbm9kZS0+X01fY29sb3IgPT0gX01fcmVkCiAg ICAgICAgICAmJiBfTV9ub2RlLT5fTV9wYXJlbnQtPl9NX3BhcmVudCA9PSBfTV9ub2RlKQogICAg ICAgIF9NX25vZGUgPSBfTV9ub2RlLT5fTV9yaWdodDsKICAgICAgZWxzZSBpZiAoX01fbm9kZS0+ X01fbGVmdCAhPSAwKQogICAgICAgIHsKICAgICAgICAgIF9CYXNlX3B0ciBfX3kgPSBfTV9ub2Rl LT5fTV9sZWZ0OwogICAgICAgICAgd2hpbGUgKF9feS0+X01fcmlnaHQgIT0gMCkKICAgICAgICAg ICAgX195ID0gX195LT5fTV9yaWdodDsKICAgICAgICAgIF9NX25vZGUgPSBfX3k7CiAgICAgICAg fQogICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgX0Jhc2VfcHRyIF9feSA9IF9NX25vZGUt Pl9NX3BhcmVudDsKICAgICAgICAgIHdoaWxlIChfTV9ub2RlID09IF9feS0+X01fbGVmdCkKICAg ICAgICAgICAgewogICAgICAgICAgICAgIF9NX25vZGUgPSBfX3k7CiAgICAgICAgICAgICAgX195 ID0gX195LT5fTV9wYXJlbnQ7CiAgICAgICAgICAgIH0KICAgICAgICAgIF9NX25vZGUgPSBfX3k7 CiAgICAgICAgfQogICAgfQogIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9WYWwsIHR5cGVuYW1l IF9SZWYsIHR5cGVuYW1lIF9QdHI+CiAgICBzdHJ1Y3QgX1JiX3RyZWVfaXRlcmF0b3IgOiBwdWJs aWMgX1JiX3RyZWVfYmFzZV9pdGVyYXRvcgogICAgewogICAgICB0eXBlZGVmIF9WYWwgdmFsdWVf dHlwZTsKICAgICAgdHlwZWRlZiBfUmVmIHJlZmVyZW5jZTsKICAgICAgdHlwZWRlZiBfUHRyIHBv aW50ZXI7CiAgICAgIHR5cGVkZWYgX1JiX3RyZWVfaXRlcmF0b3I8X1ZhbCwgX1ZhbCYsIF9WYWwq PiBpdGVyYXRvcjsKICAgICAgdHlwZWRlZiBfUmJfdHJlZV9pdGVyYXRvcjxfVmFsLCBjb25zdCBf VmFsJiwgY29uc3QgX1ZhbCo+CiAgICAgIGNvbnN0X2l0ZXJhdG9yOwogICAgICB0eXBlZGVmIF9S Yl90cmVlX2l0ZXJhdG9yPF9WYWwsIF9SZWYsIF9QdHI+IF9TZWxmOwogICAgICB0eXBlZGVmIF9S Yl90cmVlX25vZGU8X1ZhbD4qIF9MaW5rX3R5cGU7CgogICAgICBfUmJfdHJlZV9pdGVyYXRvcigp IHt9CiAgICAgIF9SYl90cmVlX2l0ZXJhdG9yKF9MaW5rX3R5cGUgX194KSB7IF9NX25vZGUgPSBf X3g7IH0KICAgICAgX1JiX3RyZWVfaXRlcmF0b3IoY29uc3QgaXRlcmF0b3ImIF9faXQpIHsgX01f bm9kZSA9IF9faXQuX01fbm9kZTsgfQoKICAgICAgcmVmZXJlbmNlCiAgICAgIG9wZXJhdG9yKigp IGNvbnN0IHsgcmV0dXJuIF9MaW5rX3R5cGUoX01fbm9kZSktPl9NX3ZhbHVlX2ZpZWxkOyB9Cgog ICAgICBwb2ludGVyCiAgICAgIG9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiAmKG9wZXJhdG9y KigpKTsgfQoKICAgICAgX1NlbGYmCiAgICAgIG9wZXJhdG9yKysoKQogICAgICB7CiAgICAgICAg X01faW5jcmVtZW50KCk7CiAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICB9CgogICAgICBfU2Vs ZgogICAgICBvcGVyYXRvcisrKGludCkKICAgICAgewogICAgICAgIF9TZWxmIF9fdG1wID0gKnRo aXM7CiAgICAgICAgX01faW5jcmVtZW50KCk7CiAgICAgICAgcmV0dXJuIF9fdG1wOwogICAgICB9 CgogICAgICBfU2VsZiYKICAgICAgb3BlcmF0b3ItLSgpIHsgX01fZGVjcmVtZW50KCk7IHJldHVy biAqdGhpczsgfQoKICAgICAgX1NlbGYKICAgICAgb3BlcmF0b3ItLShpbnQpCiAgICAgIHsKICAg ICAgICBfU2VsZiBfX3RtcCA9ICp0aGlzOwogICAgICAgIF9NX2RlY3JlbWVudCgpOwogICAgICAg IHJldHVybiBfX3RtcDsKICAgICAgfQogIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9WYWwsIHR5 cGVuYW1lIF9SZWYsIHR5cGVuYW1lIF9QdHI+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I9 PShjb25zdCBfUmJfdHJlZV9pdGVyYXRvcjxfVmFsLCBfUmVmLCBfUHRyPiYgX194LAogICAgICAg ICAgICAgICBjb25zdCBfUmJfdHJlZV9pdGVyYXRvcjxfVmFsLCBfUmVmLCBfUHRyPiYgX195KQog ICAgeyByZXR1cm4gX194Ll9NX25vZGUgPT0gX195Ll9NX25vZGU7IH0KCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX1ZhbD4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj09KGNvbnN0IF9SYl90cmVl X2l0ZXJhdG9yPF9WYWwsIGNvbnN0IF9WYWwmLCBjb25zdCBfVmFsKj4mIF9feCwKICAgICAgICAg ICAgICAgY29uc3QgX1JiX3RyZWVfaXRlcmF0b3I8X1ZhbCwgX1ZhbCYsIF9WYWwqPiYgX195KQog ICAgeyByZXR1cm4gX194Ll9NX25vZGUgPT0gX195Ll9NX25vZGU7IH0KCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX1ZhbD4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj09KGNvbnN0IF9SYl90cmVl X2l0ZXJhdG9yPF9WYWwsIF9WYWwmLCBfVmFsKj4mIF9feCwKICAgICAgICAgICAgICAgY29uc3Qg X1JiX3RyZWVfaXRlcmF0b3I8X1ZhbCwgY29uc3QgX1ZhbCYsIGNvbnN0IF9WYWwqPiYgX195KQog ICAgeyByZXR1cm4gX194Ll9NX25vZGUgPT0gX195Ll9NX25vZGU7IH0KCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX1JlZiwgdHlwZW5hbWUgX1B0cj4KICAgIGlubGluZSBib29s CiAgICBvcGVyYXRvciE9KGNvbnN0IF9SYl90cmVlX2l0ZXJhdG9yPF9WYWwsIF9SZWYsIF9QdHI+ JiBfX3gsCiAgICAgICAgICAgICAgIGNvbnN0IF9SYl90cmVlX2l0ZXJhdG9yPF9WYWwsIF9SZWYs IF9QdHI+JiBfX3kpCiAgICB7IHJldHVybiBfX3guX01fbm9kZSAhPSBfX3kuX01fbm9kZTsgfQoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVmFsPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yIT0o Y29uc3QgX1JiX3RyZWVfaXRlcmF0b3I8X1ZhbCwgY29uc3QgX1ZhbCYsIGNvbnN0IF9WYWwqPiYg X194LAogICAgICAgICAgICAgICBjb25zdCBfUmJfdHJlZV9pdGVyYXRvcjxfVmFsLCBfVmFsJiwg X1ZhbCo+JiBfX3kpCiAgICB7IHJldHVybiBfX3guX01fbm9kZSAhPSBfX3kuX01fbm9kZTsgfQoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVmFsPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yIT0o Y29uc3QgX1JiX3RyZWVfaXRlcmF0b3I8X1ZhbCwgX1ZhbCYsIF9WYWwqPiYgX194LAogICAgICAg ICAgICAgICBjb25zdCBfUmJfdHJlZV9pdGVyYXRvcjxfVmFsLCBjb25zdCBfVmFsJiwgY29uc3Qg X1ZhbCo+JiBfX3kpCiAgICB7IHJldHVybiBfX3guX01fbm9kZSAhPSBfX3kuX01fbm9kZTsgfQoK ICBpbmxpbmUgdm9pZAogIF9SYl90cmVlX3JvdGF0ZV9sZWZ0KF9SYl90cmVlX25vZGVfYmFzZSog X194LCBfUmJfdHJlZV9ub2RlX2Jhc2UqJiBfX3Jvb3QpCiAgewogICAgX1JiX3RyZWVfbm9kZV9i YXNlKiBfX3kgPSBfX3gtPl9NX3JpZ2h0OwogICAgX194LT5fTV9yaWdodCA9IF9feS0+X01fbGVm dDsKICAgIGlmIChfX3ktPl9NX2xlZnQgIT0wKQogICAgICBfX3ktPl9NX2xlZnQtPl9NX3BhcmVu dCA9IF9feDsKICAgIF9feS0+X01fcGFyZW50ID0gX194LT5fTV9wYXJlbnQ7CgogICAgaWYgKF9f eCA9PSBfX3Jvb3QpCiAgICAgIF9fcm9vdCA9IF9feTsKICAgIGVsc2UgaWYgKF9feCA9PSBfX3gt Pl9NX3BhcmVudC0+X01fbGVmdCkKICAgICAgX194LT5fTV9wYXJlbnQtPl9NX2xlZnQgPSBfX3k7 CiAgICBlbHNlCiAgICAgIF9feC0+X01fcGFyZW50LT5fTV9yaWdodCA9IF9feTsKICAgIF9feS0+ X01fbGVmdCA9IF9feDsKICAgIF9feC0+X01fcGFyZW50ID0gX195OwogIH0KCiAgaW5saW5lIHZv aWQKICBfUmJfdHJlZV9yb3RhdGVfcmlnaHQoX1JiX3RyZWVfbm9kZV9iYXNlKiBfX3gsIF9SYl90 cmVlX25vZGVfYmFzZSomIF9fcm9vdCkKICB7CiAgICBfUmJfdHJlZV9ub2RlX2Jhc2UqIF9feSA9 IF9feC0+X01fbGVmdDsKICAgIF9feC0+X01fbGVmdCA9IF9feS0+X01fcmlnaHQ7CiAgICBpZiAo X195LT5fTV9yaWdodCAhPSAwKQogICAgICBfX3ktPl9NX3JpZ2h0LT5fTV9wYXJlbnQgPSBfX3g7 CiAgICBfX3ktPl9NX3BhcmVudCA9IF9feC0+X01fcGFyZW50OwoKICAgIGlmIChfX3ggPT0gX19y b290KQogICAgICBfX3Jvb3QgPSBfX3k7CiAgICBlbHNlIGlmIChfX3ggPT0gX194LT5fTV9wYXJl bnQtPl9NX3JpZ2h0KQogICAgICBfX3gtPl9NX3BhcmVudC0+X01fcmlnaHQgPSBfX3k7CiAgICBl bHNlCiAgICAgIF9feC0+X01fcGFyZW50LT5fTV9sZWZ0ID0gX195OwogICAgX195LT5fTV9yaWdo dCA9IF9feDsKICAgIF9feC0+X01fcGFyZW50ID0gX195OwogIH0KCiAgaW5saW5lIHZvaWQKICBf UmJfdHJlZV9yZWJhbGFuY2UoX1JiX3RyZWVfbm9kZV9iYXNlKiBfX3gsIF9SYl90cmVlX25vZGVf YmFzZSomIF9fcm9vdCkKICB7CiAgICBfX3gtPl9NX2NvbG9yID0gX01fcmVkOwogICAgd2hpbGUg KF9feCAhPSBfX3Jvb3QKICAgICAgICAgICAmJiBfX3gtPl9NX3BhcmVudC0+X01fY29sb3IgPT0g X01fcmVkKQogICAgICB7CiAgICAgICAgaWYgKF9feC0+X01fcGFyZW50ID09IF9feC0+X01fcGFy ZW50LT5fTV9wYXJlbnQtPl9NX2xlZnQpCiAgICAgICAgICB7CiAgICAgICAgICAgIF9SYl90cmVl X25vZGVfYmFzZSogX195ID0gX194LT5fTV9wYXJlbnQtPl9NX3BhcmVudC0+X01fcmlnaHQ7CiAg ICAgICAgICAgIGlmIChfX3kgJiYgX195LT5fTV9jb2xvciA9PSBfTV9yZWQpCiAgICAgICAgICAg ICAgewogICAgICAgICAgICAgICAgX194LT5fTV9wYXJlbnQtPl9NX2NvbG9yID0gX01fYmxhY2s7 CiAgICAgICAgICAgICAgICBfX3ktPl9NX2NvbG9yID0gX01fYmxhY2s7CiAgICAgICAgICAgICAg ICBfX3gtPl9NX3BhcmVudC0+X01fcGFyZW50LT5fTV9jb2xvciA9IF9NX3JlZDsKICAgICAgICAg ICAgICAgIF9feCA9IF9feC0+X01fcGFyZW50LT5fTV9wYXJlbnQ7CiAgICAgICAgICAgICAgfQog ICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWYgKF9feCA9 PSBfX3gtPl9NX3BhcmVudC0+X01fcmlnaHQpCiAgICAgICAgICAgICAgICAgIHsKICAgICAgICAg ICAgICAgICAgICBfX3ggPSBfX3gtPl9NX3BhcmVudDsKICAgICAgICAgICAgICAgICAgICBfUmJf dHJlZV9yb3RhdGVfbGVmdChfX3gsIF9fcm9vdCk7CiAgICAgICAgICAgICAgICAgIH0KICAgICAg ICAgICAgICAgIF9feC0+X01fcGFyZW50LT5fTV9jb2xvciA9IF9NX2JsYWNrOwogICAgICAgICAg ICAgICAgX194LT5fTV9wYXJlbnQtPl9NX3BhcmVudC0+X01fY29sb3IgPSBfTV9yZWQ7CiAgICAg ICAgICAgICAgICBfUmJfdHJlZV9yb3RhdGVfcmlnaHQoX194LT5fTV9wYXJlbnQtPl9NX3BhcmVu dCwgX19yb290KTsKICAgICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgZWxzZQogICAg ICAgICAgewogICAgICAgICAgICBfUmJfdHJlZV9ub2RlX2Jhc2UqIF9feSA9IF9feC0+X01fcGFy ZW50LT5fTV9wYXJlbnQtPl9NX2xlZnQ7CiAgICAgICAgICAgIGlmIChfX3kgJiYgX195LT5fTV9j b2xvciA9PSBfTV9yZWQpCiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgX194LT5fTV9w YXJlbnQtPl9NX2NvbG9yID0gX01fYmxhY2s7CiAgICAgICAgICAgICAgICBfX3ktPl9NX2NvbG9y ID0gX01fYmxhY2s7CiAgICAgICAgICAgICAgICBfX3gtPl9NX3BhcmVudC0+X01fcGFyZW50LT5f TV9jb2xvciA9IF9NX3JlZDsKICAgICAgICAgICAgICAgIF9feCA9IF9feC0+X01fcGFyZW50LT5f TV9wYXJlbnQ7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAg ewogICAgICAgICAgICAgICAgaWYgKF9feCA9PSBfX3gtPl9NX3BhcmVudC0+X01fbGVmdCkKICAg ICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIF9feCA9IF9feC0+X01fcGFyZW50 OwogICAgICAgICAgICAgICAgICAgIF9SYl90cmVlX3JvdGF0ZV9yaWdodChfX3gsIF9fcm9vdCk7 CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIF9feC0+X01fcGFyZW50LT5fTV9j b2xvciA9IF9NX2JsYWNrOwogICAgICAgICAgICAgICAgX194LT5fTV9wYXJlbnQtPl9NX3BhcmVu dC0+X01fY29sb3IgPSBfTV9yZWQ7CiAgICAgICAgICAgICAgICBfUmJfdHJlZV9yb3RhdGVfbGVm dChfX3gtPl9NX3BhcmVudC0+X01fcGFyZW50LCBfX3Jvb3QpOwogICAgICAgICAgICAgIH0KICAg ICAgICAgIH0KICAgICAgfQogICAgX19yb290LT5fTV9jb2xvciA9IF9NX2JsYWNrOwogIH0KCiAg aW5saW5lIF9SYl90cmVlX25vZGVfYmFzZSoKICBfUmJfdHJlZV9yZWJhbGFuY2VfZm9yX2VyYXNl KF9SYl90cmVlX25vZGVfYmFzZSogX196LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg X1JiX3RyZWVfbm9kZV9iYXNlKiYgX19yb290LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgX1JiX3RyZWVfbm9kZV9iYXNlKiYgX19sZWZ0bW9zdCwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIF9SYl90cmVlX25vZGVfYmFzZSomIF9fcmlnaHRtb3N0KQogIHsKICAgIF9SYl90 cmVlX25vZGVfYmFzZSogX195ID0gX196OwogICAgX1JiX3RyZWVfbm9kZV9iYXNlKiBfX3ggPSAw OwogICAgX1JiX3RyZWVfbm9kZV9iYXNlKiBfX3hfcGFyZW50ID0gMDsKICAgIGlmIChfX3ktPl9N X2xlZnQgPT0gMCkKICAgICAgX194ID0gX195LT5fTV9yaWdodDsKICAgIGVsc2UKICAgICAgaWYg KF9feS0+X01fcmlnaHQgPT0gMCkKICAgICAgICBfX3ggPSBfX3ktPl9NX2xlZnQ7CiAgICAgIGVs c2UKICAgICAgICB7CgogICAgICAgICAgX195ID0gX195LT5fTV9yaWdodDsKICAgICAgICAgIHdo aWxlIChfX3ktPl9NX2xlZnQgIT0gMCkKICAgICAgICAgICAgX195ID0gX195LT5fTV9sZWZ0Owog ICAgICAgICAgX194ID0gX195LT5fTV9yaWdodDsKICAgICAgICB9CiAgICBpZiAoX195ICE9IF9f eikKICAgICAgewoKICAgICAgICBfX3otPl9NX2xlZnQtPl9NX3BhcmVudCA9IF9feTsKICAgICAg ICBfX3ktPl9NX2xlZnQgPSBfX3otPl9NX2xlZnQ7CiAgICAgICAgaWYgKF9feSAhPSBfX3otPl9N X3JpZ2h0KQogICAgICAgICAgewogICAgICAgICAgICBfX3hfcGFyZW50ID0gX195LT5fTV9wYXJl bnQ7CiAgICAgICAgICAgIGlmIChfX3gpIF9feC0+X01fcGFyZW50ID0gX195LT5fTV9wYXJlbnQ7 CiAgICAgICAgICAgIF9feS0+X01fcGFyZW50LT5fTV9sZWZ0ID0gX194OwogICAgICAgICAgICBf X3ktPl9NX3JpZ2h0ID0gX196LT5fTV9yaWdodDsKICAgICAgICAgICAgX196LT5fTV9yaWdodC0+ X01fcGFyZW50ID0gX195OwogICAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICAgIF9feF9w YXJlbnQgPSBfX3k7CiAgICAgICAgaWYgKF9fcm9vdCA9PSBfX3opCiAgICAgICAgICBfX3Jvb3Qg PSBfX3k7CiAgICAgICAgZWxzZSBpZiAoX196LT5fTV9wYXJlbnQtPl9NX2xlZnQgPT0gX196KQog ICAgICAgICAgX196LT5fTV9wYXJlbnQtPl9NX2xlZnQgPSBfX3k7CiAgICAgICAgZWxzZQogICAg ICAgICAgX196LT5fTV9wYXJlbnQtPl9NX3JpZ2h0ID0gX195OwogICAgICAgIF9feS0+X01fcGFy ZW50ID0gX196LT5fTV9wYXJlbnQ7CiAgICAgICAgc3RkOjpzd2FwKF9feS0+X01fY29sb3IsIF9f ei0+X01fY29sb3IpOwogICAgICAgIF9feSA9IF9fejsKCiAgICAgIH0KICAgIGVsc2UKICAgICAg ewogICAgICAgIF9feF9wYXJlbnQgPSBfX3ktPl9NX3BhcmVudDsKICAgICAgICBpZiAoX194KQog ICAgICAgICAgX194LT5fTV9wYXJlbnQgPSBfX3ktPl9NX3BhcmVudDsKICAgICAgICBpZiAoX19y b290ID09IF9feikKICAgICAgICAgIF9fcm9vdCA9IF9feDsKICAgICAgICBlbHNlCiAgICAgICAg ICBpZiAoX196LT5fTV9wYXJlbnQtPl9NX2xlZnQgPT0gX196KQogICAgICAgICAgICBfX3otPl9N X3BhcmVudC0+X01fbGVmdCA9IF9feDsKICAgICAgICAgIGVsc2UKICAgICAgICAgICAgX196LT5f TV9wYXJlbnQtPl9NX3JpZ2h0ID0gX194OwogICAgICAgIGlmIChfX2xlZnRtb3N0ID09IF9feikK ICAgICAgICAgIGlmIChfX3otPl9NX3JpZ2h0ID09IDApCiAgICAgICAgICAgIF9fbGVmdG1vc3Qg PSBfX3otPl9NX3BhcmVudDsKCiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIF9fbGVmdG1vc3Qg PSBfUmJfdHJlZV9ub2RlX2Jhc2U6Ol9TX21pbmltdW0oX194KTsKICAgICAgICBpZiAoX19yaWdo dG1vc3QgPT0gX196KQogICAgICAgICAgaWYgKF9fei0+X01fbGVmdCA9PSAwKQogICAgICAgICAg ICBfX3JpZ2h0bW9zdCA9IF9fei0+X01fcGFyZW50OwoKICAgICAgICAgIGVsc2UKICAgICAgICAg ICAgX19yaWdodG1vc3QgPSBfUmJfdHJlZV9ub2RlX2Jhc2U6Ol9TX21heGltdW0oX194KTsKICAg ICAgfQogICAgaWYgKF9feS0+X01fY29sb3IgIT0gX01fcmVkKQogICAgICB7CiAgICAgICAgd2hp bGUgKF9feCAhPSBfX3Jvb3QgJiYgKF9feCA9PSAwIHx8IF9feC0+X01fY29sb3IgPT0gX01fYmxh Y2spKQogICAgICAgICAgaWYgKF9feCA9PSBfX3hfcGFyZW50LT5fTV9sZWZ0KQogICAgICAgICAg ICB7CiAgICAgICAgICAgICAgX1JiX3RyZWVfbm9kZV9iYXNlKiBfX3cgPSBfX3hfcGFyZW50LT5f TV9yaWdodDsKICAgICAgICAgICAgICBpZiAoX193LT5fTV9jb2xvciA9PSBfTV9yZWQpCiAgICAg ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIF9fdy0+X01fY29sb3IgPSBfTV9ibGFjazsK ICAgICAgICAgICAgICAgICAgX194X3BhcmVudC0+X01fY29sb3IgPSBfTV9yZWQ7CiAgICAgICAg ICAgICAgICAgIF9SYl90cmVlX3JvdGF0ZV9sZWZ0KF9feF9wYXJlbnQsIF9fcm9vdCk7CiAgICAg ICAgICAgICAgICAgIF9fdyA9IF9feF9wYXJlbnQtPl9NX3JpZ2h0OwogICAgICAgICAgICAgICAg fQogICAgICAgICAgICAgIGlmICgoX193LT5fTV9sZWZ0ID09IDAgfHwKICAgICAgICAgICAgICAg ICAgIF9fdy0+X01fbGVmdC0+X01fY29sb3IgPT0gX01fYmxhY2spICYmCiAgICAgICAgICAgICAg ICAgIChfX3ctPl9NX3JpZ2h0ID09IDAgfHwKICAgICAgICAgICAgICAgICAgIF9fdy0+X01fcmln aHQtPl9NX2NvbG9yID09IF9NX2JsYWNrKSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAg ICAgICAgX193LT5fTV9jb2xvciA9IF9NX3JlZDsKICAgICAgICAgICAgICAgICAgX194ID0gX194 X3BhcmVudDsKICAgICAgICAgICAgICAgICAgX194X3BhcmVudCA9IF9feF9wYXJlbnQtPl9NX3Bh cmVudDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAg ICB7CiAgICAgICAgICAgICAgICAgIGlmIChfX3ctPl9NX3JpZ2h0ID09IDAKICAgICAgICAgICAg ICAgICAgICAgIHx8IF9fdy0+X01fcmlnaHQtPl9NX2NvbG9yID09IF9NX2JsYWNrKQogICAgICAg ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgIF9fdy0+X01fbGVmdC0+X01fY29s b3IgPSBfTV9ibGFjazsKICAgICAgICAgICAgICAgICAgICAgIF9fdy0+X01fY29sb3IgPSBfTV9y ZWQ7CiAgICAgICAgICAgICAgICAgICAgICBfUmJfdHJlZV9yb3RhdGVfcmlnaHQoX193LCBfX3Jv b3QpOwogICAgICAgICAgICAgICAgICAgICAgX193ID0gX194X3BhcmVudC0+X01fcmlnaHQ7CiAg ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBfX3ctPl9NX2NvbG9yID0gX194 X3BhcmVudC0+X01fY29sb3I7CiAgICAgICAgICAgICAgICAgIF9feF9wYXJlbnQtPl9NX2NvbG9y ID0gX01fYmxhY2s7CiAgICAgICAgICAgICAgICAgIGlmIChfX3ctPl9NX3JpZ2h0KQogICAgICAg ICAgICAgICAgICAgIF9fdy0+X01fcmlnaHQtPl9NX2NvbG9yID0gX01fYmxhY2s7CiAgICAgICAg ICAgICAgICAgIF9SYl90cmVlX3JvdGF0ZV9sZWZ0KF9feF9wYXJlbnQsIF9fcm9vdCk7CiAgICAg ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAg ICAgICBlbHNlCiAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgX1JiX3RyZWVfbm9kZV9iYXNl KiBfX3cgPSBfX3hfcGFyZW50LT5fTV9sZWZ0OwogICAgICAgICAgICAgIGlmIChfX3ctPl9NX2Nv bG9yID09IF9NX3JlZCkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgX193LT5f TV9jb2xvciA9IF9NX2JsYWNrOwogICAgICAgICAgICAgICAgICBfX3hfcGFyZW50LT5fTV9jb2xv ciA9IF9NX3JlZDsKICAgICAgICAgICAgICAgICAgX1JiX3RyZWVfcm90YXRlX3JpZ2h0KF9feF9w YXJlbnQsIF9fcm9vdCk7CiAgICAgICAgICAgICAgICAgIF9fdyA9IF9feF9wYXJlbnQtPl9NX2xl ZnQ7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgaWYgKChfX3ctPl9NX3JpZ2h0ID09 IDAgfHwKICAgICAgICAgICAgICAgICAgIF9fdy0+X01fcmlnaHQtPl9NX2NvbG9yID09IF9NX2Js YWNrKSAmJgogICAgICAgICAgICAgICAgICAoX193LT5fTV9sZWZ0ID09IDAgfHwKICAgICAgICAg ICAgICAgICAgIF9fdy0+X01fbGVmdC0+X01fY29sb3IgPT0gX01fYmxhY2spKQogICAgICAgICAg ICAgICAgewogICAgICAgICAgICAgICAgICBfX3ctPl9NX2NvbG9yID0gX01fcmVkOwogICAgICAg ICAgICAgICAgICBfX3ggPSBfX3hfcGFyZW50OwogICAgICAgICAgICAgICAgICBfX3hfcGFyZW50 ID0gX194X3BhcmVudC0+X01fcGFyZW50OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg IGVsc2UKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgaWYgKF9fdy0+X01fbGVm dCA9PSAwIHx8IF9fdy0+X01fbGVmdC0+X01fY29sb3IgPT0gX01fYmxhY2spCiAgICAgICAgICAg ICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgX193LT5fTV9yaWdodC0+X01fY29sb3Ig PSBfTV9ibGFjazsKICAgICAgICAgICAgICAgICAgICAgIF9fdy0+X01fY29sb3IgPSBfTV9yZWQ7 CiAgICAgICAgICAgICAgICAgICAgICBfUmJfdHJlZV9yb3RhdGVfbGVmdChfX3csIF9fcm9vdCk7 CiAgICAgICAgICAgICAgICAgICAgICBfX3cgPSBfX3hfcGFyZW50LT5fTV9sZWZ0OwogICAgICAg ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgX193LT5fTV9jb2xvciA9IF9feF9wYXJl bnQtPl9NX2NvbG9yOwogICAgICAgICAgICAgICAgICBfX3hfcGFyZW50LT5fTV9jb2xvciA9IF9N X2JsYWNrOwogICAgICAgICAgICAgICAgICBpZiAoX193LT5fTV9sZWZ0KQogICAgICAgICAgICAg ICAgICAgIF9fdy0+X01fbGVmdC0+X01fY29sb3IgPSBfTV9ibGFjazsKICAgICAgICAgICAgICAg ICAgX1JiX3RyZWVfcm90YXRlX3JpZ2h0KF9feF9wYXJlbnQsIF9fcm9vdCk7CiAgICAgICAgICAg ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgaWYg KF9feCkgX194LT5fTV9jb2xvciA9IF9NX2JsYWNrOwogICAgICB9CiAgICByZXR1cm4gX195Owog IH0KCgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2MsIGJvb2wg X1NfaW5zdGFuY2VsZXNzPgogICAgY2xhc3MgX1JiX3RyZWVfYWxsb2NfYmFzZQogICAgewogICAg cHVibGljOgogICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2NfdHJhaXRzPF9UcCwgX0FsbG9jPjo6 YWxsb2NhdG9yX3R5cGUgYWxsb2NhdG9yX3R5cGU7CgogICAgICBhbGxvY2F0b3JfdHlwZQogICAg ICBnZXRfYWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4gX01fbm9kZV9hbGxvY2F0b3I7IH0KCiAg ICAgIF9SYl90cmVlX2FsbG9jX2Jhc2UoY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSkKICAgICAg OiBfTV9ub2RlX2FsbG9jYXRvcihfX2EpLCBfTV9oZWFkZXIoMCkge30KCiAgICBwcm90ZWN0ZWQ6 CiAgICAgIHR5cGVuYW1lIF9BbGxvY190cmFpdHM8X1JiX3RyZWVfbm9kZTxfVHA+LCBfQWxsb2M+ OjphbGxvY2F0b3JfdHlwZQogICAgICBfTV9ub2RlX2FsbG9jYXRvcjsKCiAgICAgIF9SYl90cmVl X25vZGU8X1RwPiogX01faGVhZGVyOwoKICAgICAgX1JiX3RyZWVfbm9kZTxfVHA+KgogICAgICBf TV9nZXRfbm9kZSgpIHsgcmV0dXJuIF9NX25vZGVfYWxsb2NhdG9yLmFsbG9jYXRlKDEpOyB9Cgog ICAgICB2b2lkCiAgICAgIF9NX3B1dF9ub2RlKF9SYl90cmVlX25vZGU8X1RwPiogX19wKQogICAg ICB7IF9NX25vZGVfYWxsb2NhdG9yLmRlYWxsb2NhdGUoX19wLCAxKTsgfQogICAgfTsKCgogIHRl bXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgogICAgY2xhc3MgX1JiX3RyZWVf YWxsb2NfYmFzZTxfVHAsIF9BbGxvYywgdHJ1ZT4KICAgIHsKICAgIHB1YmxpYzoKICAgIHR5cGVk ZWYgdHlwZW5hbWUgX0FsbG9jX3RyYWl0czxfVHAsIF9BbGxvYz46OmFsbG9jYXRvcl90eXBlIGFs bG9jYXRvcl90eXBlOwogICAgICBhbGxvY2F0b3JfdHlwZSBnZXRfYWxsb2NhdG9yKCkgY29uc3Qg eyByZXR1cm4gYWxsb2NhdG9yX3R5cGUoKTsgfQoKICAgICAgX1JiX3RyZWVfYWxsb2NfYmFzZShj b25zdCBhbGxvY2F0b3JfdHlwZSYpIDogX01faGVhZGVyKDApIHt9CgogICAgcHJvdGVjdGVkOgog ICAgICBfUmJfdHJlZV9ub2RlPF9UcD4qIF9NX2hlYWRlcjsKCiAgICAgIHR5cGVkZWYgdHlwZW5h bWUgX0FsbG9jX3RyYWl0czxfUmJfdHJlZV9ub2RlPF9UcD4sIF9BbGxvYz46Ol9BbGxvY190eXBl CiAgICAgIF9BbGxvY190eXBlOwoKICAgICAgX1JiX3RyZWVfbm9kZTxfVHA+KgogICAgICBfTV9n ZXRfbm9kZSgpIHsgcmV0dXJuIF9BbGxvY190eXBlOjphbGxvY2F0ZSgxKTsgfQoKICAgICAgdm9p ZAogICAgICBfTV9wdXRfbm9kZShfUmJfdHJlZV9ub2RlPF9UcD4qIF9fcCkgeyBfQWxsb2NfdHlw ZTo6ZGVhbGxvY2F0ZShfX3AsIDEpOyB9CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAs IHR5cGVuYW1lIF9BbGxvYz4KICAgIHN0cnVjdCBfUmJfdHJlZV9iYXNlIDogcHVibGljIF9SYl90 cmVlX2FsbG9jX2Jhc2U8X1RwLCBfQWxsb2MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBfQWxsb2NfdHJhaXRzPF9UcCwgX0FsbG9jPjo6X1NfaW5zdGFuY2VsZXNzPgogICAgewog ICAgICB0eXBlZGVmIF9SYl90cmVlX2FsbG9jX2Jhc2U8X1RwLAogICAgICAgIF9BbGxvYywgX0Fs bG9jX3RyYWl0czxfVHAsIF9BbGxvYz46Ol9TX2luc3RhbmNlbGVzcz4gX0Jhc2U7CiAgICAgIHR5 cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmFsbG9jYXRvcl90eXBlIGFsbG9jYXRvcl90eXBlOwoKICAg ICAgX1JiX3RyZWVfYmFzZShjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hKQogICAgICA6IF9CYXNl KF9fYSkgeyB0aGlzLT5fTV9oZWFkZXIgPSBfTV9nZXRfbm9kZSgpOyB9CiAgICAgIH5fUmJfdHJl ZV9iYXNlKCkgeyBfTV9wdXRfbm9kZSh0aGlzLT5fTV9oZWFkZXIpOyB9CiAgICB9OwoKCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX0tleU9mVmFsdWUs CiAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYyA9IGFsbG9jYXRv cjxfVmFsPiA+CiAgICBjbGFzcyBfUmJfdHJlZSA6IHByb3RlY3RlZCBfUmJfdHJlZV9iYXNlPF9W YWwsIF9BbGxvYz4KICAgIHsKICAgICAgdHlwZWRlZiBfUmJfdHJlZV9iYXNlPF9WYWwsIF9BbGxv Yz4gX0Jhc2U7CgogICAgcHJvdGVjdGVkOgogICAgICB0eXBlZGVmIF9SYl90cmVlX25vZGVfYmFz ZSogX0Jhc2VfcHRyOwogICAgICB0eXBlZGVmIF9SYl90cmVlX25vZGU8X1ZhbD4gX1JiX3RyZWVf bm9kZTsKCiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgX0tleSBrZXlfdHlwZTsKICAgICAgdHlw ZWRlZiBfVmFsIHZhbHVlX3R5cGU7CiAgICAgIHR5cGVkZWYgdmFsdWVfdHlwZSogcG9pbnRlcjsK ICAgICAgdHlwZWRlZiBjb25zdCB2YWx1ZV90eXBlKiBjb25zdF9wb2ludGVyOwogICAgICB0eXBl ZGVmIHZhbHVlX3R5cGUmIHJlZmVyZW5jZTsKICAgICAgdHlwZWRlZiBjb25zdCB2YWx1ZV90eXBl JiBjb25zdF9yZWZlcmVuY2U7CiAgICAgIHR5cGVkZWYgX1JiX3RyZWVfbm9kZSogX0xpbmtfdHlw ZTsKICAgICAgdHlwZWRlZiBzaXplX3Qgc2l6ZV90eXBlOwogICAgICB0eXBlZGVmIHB0cmRpZmZf dCBkaWZmZXJlbmNlX3R5cGU7CgogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjphbGxvY2F0 b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsKICAgICAgYWxsb2NhdG9yX3R5cGUgZ2V0X2FsbG9jYXRv cigpIGNvbnN0IHsgcmV0dXJuIF9CYXNlOjpnZXRfYWxsb2NhdG9yKCk7IH0KCiAgICBwcm90ZWN0 ZWQ6CiAgICAgIHVzaW5nIF9CYXNlOjpfTV9nZXRfbm9kZTsKICAgICAgdXNpbmcgX0Jhc2U6Ol9N X3B1dF9ub2RlOwogICAgICB1c2luZyBfQmFzZTo6X01faGVhZGVyOwoKICAgICAgX0xpbmtfdHlw ZQogICAgICBfTV9jcmVhdGVfbm9kZShjb25zdCB2YWx1ZV90eXBlJiBfX3gpCiAgICAgIHsKICAg ICAgICBfTGlua190eXBlIF9fdG1wID0gX01fZ2V0X25vZGUoKTsKICAgICAgICB0cnkKICAgICAg ICAgIHsgX0NvbnN0cnVjdCgmX190bXAtPl9NX3ZhbHVlX2ZpZWxkLCBfX3gpOyB9CiAgICAgICAg Y2F0Y2goLi4uKQogICAgICAgICAgewogICAgICAgICAgX01fcHV0X25vZGUoX190bXApOwogICAg ICAgICAgdGhyb3c7CiAgICAgICAgICB9CiAgICAgICAgcmV0dXJuIF9fdG1wOwogICAgICB9Cgog ICAgICBfTGlua190eXBlCiAgICAgIF9NX2Nsb25lX25vZGUoX0xpbmtfdHlwZSBfX3gpCiAgICAg IHsKICAgICAgICBfTGlua190eXBlIF9fdG1wID0gX01fY3JlYXRlX25vZGUoX194LT5fTV92YWx1 ZV9maWVsZCk7CiAgICAgICAgX190bXAtPl9NX2NvbG9yID0gX194LT5fTV9jb2xvcjsKICAgICAg ICBfX3RtcC0+X01fbGVmdCA9IDA7CiAgICAgICAgX190bXAtPl9NX3JpZ2h0ID0gMDsKICAgICAg ICByZXR1cm4gX190bXA7CiAgICAgIH0KCiAgICAgIHZvaWQKICAgICAgZGVzdHJveV9ub2RlKF9M aW5rX3R5cGUgX19wKQogICAgICB7CiAgICAgICAgX0Rlc3Ryb3koJl9fcC0+X01fdmFsdWVfZmll bGQpOwogICAgICAgIF9NX3B1dF9ub2RlKF9fcCk7CiAgICAgIH0KCiAgICAgIHNpemVfdHlwZSBf TV9ub2RlX2NvdW50OwogICAgICBfQ29tcGFyZSBfTV9rZXlfY29tcGFyZTsKCiAgICAgIF9MaW5r X3R5cGUmCiAgICAgIF9NX3Jvb3QoKSBjb25zdCB7IHJldHVybiAoX0xpbmtfdHlwZSYpIHRoaXMt Pl9NX2hlYWRlci0+X01fcGFyZW50OyB9CgogICAgICBfTGlua190eXBlJgogICAgICBfTV9sZWZ0 bW9zdCgpIGNvbnN0IHsgcmV0dXJuIChfTGlua190eXBlJikgdGhpcy0+X01faGVhZGVyLT5fTV9s ZWZ0OyB9CgogICAgICBfTGlua190eXBlJgogICAgICBfTV9yaWdodG1vc3QoKSBjb25zdCB7IHJl dHVybiAoX0xpbmtfdHlwZSYpIHRoaXMtPl9NX2hlYWRlci0+X01fcmlnaHQ7IH0KCiAgICAgIHN0 YXRpYyBfTGlua190eXBlJgogICAgICBfU19sZWZ0KF9MaW5rX3R5cGUgX194KSB7IHJldHVybiAo X0xpbmtfdHlwZSYpKF9feC0+X01fbGVmdCk7IH0KCiAgICAgIHN0YXRpYyBfTGlua190eXBlJgog ICAgICBfU19yaWdodChfTGlua190eXBlIF9feCkgeyByZXR1cm4gKF9MaW5rX3R5cGUmKShfX3gt Pl9NX3JpZ2h0KTsgfQoKICAgICAgc3RhdGljIF9MaW5rX3R5cGUmCiAgICAgIF9TX3BhcmVudChf TGlua190eXBlIF9feCkgeyByZXR1cm4gKF9MaW5rX3R5cGUmKShfX3gtPl9NX3BhcmVudCk7IH0K CiAgICAgIHN0YXRpYyByZWZlcmVuY2UKICAgICAgX1NfdmFsdWUoX0xpbmtfdHlwZSBfX3gpIHsg cmV0dXJuIF9feC0+X01fdmFsdWVfZmllbGQ7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBfS2V5Jgog ICAgICBfU19rZXkoX0xpbmtfdHlwZSBfX3gpIHsgcmV0dXJuIF9LZXlPZlZhbHVlKCkoX1NfdmFs dWUoX194KSk7IH0KCiAgICAgIHN0YXRpYyBfUmJfdHJlZV9jb2xvciYKICAgICAgX1NfY29sb3Io X0xpbmtfdHlwZSBfX3gpIHsgcmV0dXJuIF9feC0+X01fY29sb3I7IH0KCiAgICAgIHN0YXRpYyBf TGlua190eXBlJgogICAgICBfU19sZWZ0KF9CYXNlX3B0ciBfX3gpIHsgcmV0dXJuIChfTGlua190 eXBlJikoX194LT5fTV9sZWZ0KTsgfQoKICAgICAgc3RhdGljIF9MaW5rX3R5cGUmCiAgICAgIF9T X3JpZ2h0KF9CYXNlX3B0ciBfX3gpIHsgcmV0dXJuIChfTGlua190eXBlJikoX194LT5fTV9yaWdo dCk7IH0KCiAgICAgIHN0YXRpYyBfTGlua190eXBlJgogICAgICBfU19wYXJlbnQoX0Jhc2VfcHRy IF9feCkgeyByZXR1cm4gKF9MaW5rX3R5cGUmKShfX3gtPl9NX3BhcmVudCk7IH0KCiAgICAgIHN0 YXRpYyByZWZlcmVuY2UKICAgICAgX1NfdmFsdWUoX0Jhc2VfcHRyIF9feCkgeyByZXR1cm4gKChf TGlua190eXBlKV9feCktPl9NX3ZhbHVlX2ZpZWxkOyB9CgogICAgICBzdGF0aWMgY29uc3QgX0tl eSYKICAgICAgX1Nfa2V5KF9CYXNlX3B0ciBfX3gpIHsgcmV0dXJuIF9LZXlPZlZhbHVlKCkoX1Nf dmFsdWUoX0xpbmtfdHlwZShfX3gpKSk7fQoKICAgICAgc3RhdGljIF9SYl90cmVlX2NvbG9yJgog ICAgICBfU19jb2xvcihfQmFzZV9wdHIgX194KSB7IHJldHVybiAoX0xpbmtfdHlwZShfX3gpLT5f TV9jb2xvcik7IH0KCiAgICAgIHN0YXRpYyBfTGlua190eXBlCiAgICAgIF9TX21pbmltdW0oX0xp bmtfdHlwZSBfX3gpCiAgICAgIHsgcmV0dXJuIChfTGlua190eXBlKSBfUmJfdHJlZV9ub2RlX2Jh c2U6Ol9TX21pbmltdW0oX194KTsgfQoKICAgICAgc3RhdGljIF9MaW5rX3R5cGUKICAgICAgX1Nf bWF4aW11bShfTGlua190eXBlIF9feCkKICAgICAgeyByZXR1cm4gKF9MaW5rX3R5cGUpIF9SYl90 cmVlX25vZGVfYmFzZTo6X1NfbWF4aW11bShfX3gpOyB9CgogICAgcHVibGljOgogICAgICB0eXBl ZGVmIF9SYl90cmVlX2l0ZXJhdG9yPHZhbHVlX3R5cGUsIHJlZmVyZW5jZSwgcG9pbnRlcj4gaXRl cmF0b3I7CiAgICAgIHR5cGVkZWYgX1JiX3RyZWVfaXRlcmF0b3I8dmFsdWVfdHlwZSwgY29uc3Rf cmVmZXJlbmNlLCBjb25zdF9wb2ludGVyPgogICAgICBjb25zdF9pdGVyYXRvcjsKCiAgICAgIHR5 cGVkZWYgc3RkOjpyZXZlcnNlX2l0ZXJhdG9yPGNvbnN0X2l0ZXJhdG9yPiBjb25zdF9yZXZlcnNl X2l0ZXJhdG9yOwogICAgICB0eXBlZGVmIHN0ZDo6cmV2ZXJzZV9pdGVyYXRvcjxpdGVyYXRvcj4g cmV2ZXJzZV9pdGVyYXRvcjsKCiAgICBwcml2YXRlOgogICAgICBpdGVyYXRvcgogICAgICBfTV9p bnNlcnQoX0Jhc2VfcHRyIF9feCwgX0Jhc2VfcHRyIF9feSwgY29uc3QgdmFsdWVfdHlwZSYgX192 KTsKCiAgICAgIF9MaW5rX3R5cGUKICAgICAgX01fY29weShfTGlua190eXBlIF9feCwgX0xpbmtf dHlwZSBfX3ApOwoKICAgICAgdm9pZAogICAgICBfTV9lcmFzZShfTGlua190eXBlIF9feCk7Cgog ICAgcHVibGljOgoKICAgICAgX1JiX3RyZWUoKQogICAgICAgIDogX0Jhc2UoYWxsb2NhdG9yX3R5 cGUoKSksIF9NX25vZGVfY291bnQoMCksIF9NX2tleV9jb21wYXJlKCkKICAgICAgeyBfTV9lbXB0 eV9pbml0aWFsaXplKCk7IH0KCiAgICAgIF9SYl90cmVlKGNvbnN0IF9Db21wYXJlJiBfX2NvbXAp CiAgICAgICAgOiBfQmFzZShhbGxvY2F0b3JfdHlwZSgpKSwgX01fbm9kZV9jb3VudCgwKSwgX01f a2V5X2NvbXBhcmUoX19jb21wKQogICAgICB7IF9NX2VtcHR5X2luaXRpYWxpemUoKTsgfQoKICAg ICAgX1JiX3RyZWUoY29uc3QgX0NvbXBhcmUmIF9fY29tcCwgY29uc3QgYWxsb2NhdG9yX3R5cGUm IF9fYSkKICAgICAgICA6IF9CYXNlKF9fYSksIF9NX25vZGVfY291bnQoMCksIF9NX2tleV9jb21w YXJlKF9fY29tcCkKICAgICAgeyBfTV9lbXB0eV9pbml0aWFsaXplKCk7IH0KCiAgICAgIF9SYl90 cmVlKGNvbnN0IF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+ JiBfX3gpCiAgICAgICAgOiBfQmFzZShfX3guZ2V0X2FsbG9jYXRvcigpKSwgX01fbm9kZV9jb3Vu dCgwKSwKICAgICAgICAgICAgICAgICBfTV9rZXlfY29tcGFyZShfX3guX01fa2V5X2NvbXBhcmUp CiAgICAgIHsKICAgICAgICBpZiAoX194Ll9NX3Jvb3QoKSA9PSAwKQogICAgICAgICAgX01fZW1w dHlfaW5pdGlhbGl6ZSgpOwogICAgICAgIGVsc2UKICAgICAgICAgIHsKICAgICAgICAgICAgX1Nf Y29sb3IodGhpcy0+X01faGVhZGVyKSA9IF9NX3JlZDsKICAgICAgICAgICAgX01fcm9vdCgpID0g X01fY29weShfX3guX01fcm9vdCgpLCB0aGlzLT5fTV9oZWFkZXIpOwogICAgICAgICAgICBfTV9s ZWZ0bW9zdCgpID0gX1NfbWluaW11bShfTV9yb290KCkpOwogICAgICAgICAgICBfTV9yaWdodG1v c3QoKSA9IF9TX21heGltdW0oX01fcm9vdCgpKTsKICAgICAgICAgIH0KICAgICAgICBfTV9ub2Rl X2NvdW50ID0gX194Ll9NX25vZGVfY291bnQ7CiAgICAgIH0KCiAgICAgIH5fUmJfdHJlZSgpIHsg Y2xlYXIoKTsgfQoKICAgICAgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJl LF9BbGxvYz4mCiAgICAgIG9wZXJhdG9yPShjb25zdCBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9m VmFsdWUsX0NvbXBhcmUsX0FsbG9jPiYgX194KTsKCiAgICBwcml2YXRlOgogICAgICB2b2lkIF9N X2VtcHR5X2luaXRpYWxpemUoKQogICAgICB7CiAgICAgICAgX1NfY29sb3IodGhpcy0+X01faGVh ZGVyKSA9IF9NX3JlZDsKCiAgICAgICAgX01fcm9vdCgpID0gMDsKICAgICAgICBfTV9sZWZ0bW9z dCgpID0gdGhpcy0+X01faGVhZGVyOwogICAgICAgIF9NX3JpZ2h0bW9zdCgpID0gdGhpcy0+X01f aGVhZGVyOwogICAgICB9CgogICAgcHVibGljOgoKICAgICAgX0NvbXBhcmUKICAgICAga2V5X2Nv bXAoKSBjb25zdCB7IHJldHVybiBfTV9rZXlfY29tcGFyZTsgfQoKICAgICAgaXRlcmF0b3IKICAg ICAgYmVnaW4oKSB7IHJldHVybiBfTV9sZWZ0bW9zdCgpOyB9CgogICAgICBjb25zdF9pdGVyYXRv cgogICAgICBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIF9NX2xlZnRtb3N0KCk7IH0KCiAgICAgIGl0 ZXJhdG9yCiAgICAgIGVuZCgpIHsgcmV0dXJuIHRoaXMtPl9NX2hlYWRlcjsgfQoKICAgICAgY29u c3RfaXRlcmF0b3IKICAgICAgZW5kKCkgY29uc3QgeyByZXR1cm4gdGhpcy0+X01faGVhZGVyOyB9 CgogICAgICByZXZlcnNlX2l0ZXJhdG9yCiAgICAgIHJiZWdpbigpIHsgcmV0dXJuIHJldmVyc2Vf aXRlcmF0b3IoZW5kKCkpOyB9CgogICAgICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yCiAgICAgIHJi ZWdpbigpIGNvbnN0IHsgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IoZW5kKCkpOyB9Cgog ICAgICByZXZlcnNlX2l0ZXJhdG9yCiAgICAgIHJlbmQoKSB7IHJldHVybiByZXZlcnNlX2l0ZXJh dG9yKGJlZ2luKCkpOyB9CgogICAgICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yCiAgICAgIHJlbmQo KSBjb25zdCB7IHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKGJlZ2luKCkpOyB9CgogICAg ICBib29sCiAgICAgIGVtcHR5KCkgY29uc3QgeyByZXR1cm4gX01fbm9kZV9jb3VudCA9PSAwOyB9 CgogICAgICBzaXplX3R5cGUKICAgICAgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIF9NX25vZGVfY291 bnQ7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBtYXhfc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIHNp emVfdHlwZSgtMSk7IH0KCiAgICAgIHZvaWQKICAgICAgc3dhcChfUmJfdHJlZTxfS2V5LF9WYWws X0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPiYgX190KQogICAgICB7CiAgICAgICAgc3RkOjpz d2FwKHRoaXMtPl9NX2hlYWRlciwgX190Ll9NX2hlYWRlcik7CiAgICAgICAgc3RkOjpzd2FwKF9N X25vZGVfY291bnQsIF9fdC5fTV9ub2RlX2NvdW50KTsKICAgICAgICBzdGQ6OnN3YXAoX01fa2V5 X2NvbXBhcmUsIF9fdC5fTV9rZXlfY29tcGFyZSk7CiAgICAgIH0KCgogICAgICBwYWlyPGl0ZXJh dG9yLGJvb2w+CiAgICAgIGluc2VydF91bmlxdWUoY29uc3QgdmFsdWVfdHlwZSYgX194KTsKCiAg ICAgIGl0ZXJhdG9yCiAgICAgIGluc2VydF9lcXVhbChjb25zdCB2YWx1ZV90eXBlJiBfX3gpOwoK ICAgICAgaXRlcmF0b3IKICAgICAgaW5zZXJ0X3VuaXF1ZShpdGVyYXRvciBfX3Bvc2l0aW9uLCBj b25zdCB2YWx1ZV90eXBlJiBfX3gpOwoKICAgICAgaXRlcmF0b3IKICAgICAgaW5zZXJ0X2VxdWFs KGl0ZXJhdG9yIF9fcG9zaXRpb24sIGNvbnN0IHZhbHVlX3R5cGUmIF9feCk7CgogICAgICB0ZW1w bGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcj4KICAgICAgdm9pZAogICAgICBpbnNlcnRfdW5p cXVlKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCk7CgogICAg ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcj4KICAgICAgdm9pZAogICAgICBpbnNl cnRfZXF1YWwoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KTsK CiAgICAgIHZvaWQKICAgICAgZXJhc2UoaXRlcmF0b3IgX19wb3NpdGlvbik7CgogICAgICBzaXpl X3R5cGUKICAgICAgZXJhc2UoY29uc3Qga2V5X3R5cGUmIF9feCk7CgogICAgICB2b2lkCiAgICAg IGVyYXNlKGl0ZXJhdG9yIF9fZmlyc3QsIGl0ZXJhdG9yIF9fbGFzdCk7CgogICAgICB2b2lkCiAg ICAgIGVyYXNlKGNvbnN0IGtleV90eXBlKiBfX2ZpcnN0LCBjb25zdCBrZXlfdHlwZSogX19sYXN0 KTsKCiAgICAgIHZvaWQKICAgICAgY2xlYXIoKQogICAgICB7CiAgICAgICAgaWYgKF9NX25vZGVf Y291bnQgIT0gMCkKICAgICAgICAgIHsKICAgICAgICAgICAgX01fZXJhc2UoX01fcm9vdCgpKTsK ICAgICAgICAgICAgX01fbGVmdG1vc3QoKSA9IHRoaXMtPl9NX2hlYWRlcjsKICAgICAgICAgICAg X01fcm9vdCgpID0gMDsKICAgICAgICAgICAgX01fcmlnaHRtb3N0KCkgPSB0aGlzLT5fTV9oZWFk ZXI7CiAgICAgICAgICAgIF9NX25vZGVfY291bnQgPSAwOwogICAgICAgICAgfQogICAgICB9CgoK ICAgICAgaXRlcmF0b3IKICAgICAgZmluZChjb25zdCBrZXlfdHlwZSYgX194KTsKCiAgICAgIGNv bnN0X2l0ZXJhdG9yCiAgICAgIGZpbmQoY29uc3Qga2V5X3R5cGUmIF9feCkgY29uc3Q7CgogICAg ICBzaXplX3R5cGUKICAgICAgY291bnQoY29uc3Qga2V5X3R5cGUmIF9feCkgY29uc3Q7CgogICAg ICBpdGVyYXRvcgogICAgICBsb3dlcl9ib3VuZChjb25zdCBrZXlfdHlwZSYgX194KTsKCiAgICAg IGNvbnN0X2l0ZXJhdG9yCiAgICAgIGxvd2VyX2JvdW5kKGNvbnN0IGtleV90eXBlJiBfX3gpIGNv bnN0OwoKICAgICAgaXRlcmF0b3IKICAgICAgdXBwZXJfYm91bmQoY29uc3Qga2V5X3R5cGUmIF9f eCk7CgogICAgICBjb25zdF9pdGVyYXRvcgogICAgICB1cHBlcl9ib3VuZChjb25zdCBrZXlfdHlw ZSYgX194KSBjb25zdDsKCiAgICAgIHBhaXI8aXRlcmF0b3IsaXRlcmF0b3I+CiAgICAgIGVxdWFs X3JhbmdlKGNvbnN0IGtleV90eXBlJiBfX3gpOwoKICAgICAgcGFpcjxjb25zdF9pdGVyYXRvciwg Y29uc3RfaXRlcmF0b3I+CiAgICAgIGVxdWFsX3JhbmdlKGNvbnN0IGtleV90eXBlJiBfX3gpIGNv bnN0OwoKCiAgICAgIGJvb2wKICAgICAgX19yYl92ZXJpZnkoKSBjb25zdDsKICAgIH07CgogIHRl bXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWwsIHR5cGVuYW1lIF9LZXlPZlZhbHVl LAogICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxp bmUgYm9vbAogICAgb3BlcmF0b3I9PShjb25zdCBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFs dWUsX0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAgICAgICAgICAgICBjb25zdCBfUmJfdHJlZTxf S2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPiYgX195KQogICAgewogICAgICBy ZXR1cm4gX194LnNpemUoKSA9PSBfX3kuc2l6ZSgpICYmCiAgICAgICAgZXF1YWwoX194LmJlZ2lu KCksIF9feC5lbmQoKSwgX195LmJlZ2luKCkpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf S2V5LCB0eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBfS2V5T2ZWYWx1ZSwKICAgICAgICAgICB0eXBl bmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJh dG9yPChjb25zdCBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9j PiYgX194LAogICAgICAgICAgICAgIGNvbnN0IF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1 ZSxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpCiAgICB7CiAgICAgIHJldHVybiBsZXhpY29ncmFwaGlj YWxfY29tcGFyZShfX3guYmVnaW4oKSwgX194LmVuZCgpLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgX195LmJlZ2luKCksIF9feS5lbmQoKSk7CiAgICB9CgogIHRlbXBsYXRl PHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWwsIHR5cGVuYW1lIF9LZXlPZlZhbHVlLAogICAg ICAgICAgIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9v bAogICAgb3BlcmF0b3IhPShjb25zdCBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0Nv bXBhcmUsX0FsbG9jPiYgX194LAogICAgICAgICAgICAgICBjb25zdCBfUmJfdHJlZTxfS2V5LF9W YWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPiYgX195KQogICAgeyByZXR1cm4gIShfX3gg PT0gX195KTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsLCB0eXBl bmFtZSBfS2V5T2ZWYWx1ZSwKICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUg X0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPihjb25zdCBfUmJfdHJlZTxfS2V5 LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAgICAgICAgICAgIGNv bnN0IF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+JiBfX3kp CiAgICB7IHJldHVybiBfX3kgPCBfX3g7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlw ZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX0tleU9mVmFsdWUsCiAgICAgICAgICAgdHlwZW5hbWUgX0Nv bXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcjw9KGNv bnN0IF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+JiBfX3gs CiAgICAgICAgICAgICAgIGNvbnN0IF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29t cGFyZSxfQWxsb2M+JiBfX3kpCiAgeyByZXR1cm4gIShfX3kgPCBfX3gpOyB9CgogIHRlbXBsYXRl PHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWwsIHR5cGVuYW1lIF9LZXlPZlZhbHVlLAogICAg ICAgICAgIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9v bAogICAgb3BlcmF0b3I+PShjb25zdCBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0Nv bXBhcmUsX0FsbG9jPiYgX194LAogICAgICAgICAgICAgICBjb25zdCBfUmJfdHJlZTxfS2V5LF9W YWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPiYgX195KQogIHsgcmV0dXJuICEoX194IDwg X195KTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsLCB0eXBlbmFt ZSBfS2V5T2ZWYWx1ZSwKICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0Fs bG9jPgogICAgaW5saW5lIHZvaWQKICAgIHN3YXAoX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZh bHVlLF9Db21wYXJlLF9BbGxvYz4mIF9feCwKICAgICAgICAgX1JiX3RyZWU8X0tleSxfVmFsLF9L ZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4mIF9feSkKICAgIHsgX194LnN3YXAoX195KTsgfQoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBfS2V5T2ZW YWx1ZSwKICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jPgogICAg X1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4mCiAgICBfUmJf dHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6CiAgICBvcGVyYXRv cj0oY29uc3QgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4m IF9feCkKICAgIHsKICAgICAgaWYgKHRoaXMgIT0gJl9feCkKICAgICAgICB7CgogICAgICAgICAg Y2xlYXIoKTsKICAgICAgICAgIF9NX25vZGVfY291bnQgPSAwOwogICAgICAgICAgX01fa2V5X2Nv bXBhcmUgPSBfX3guX01fa2V5X2NvbXBhcmU7CiAgICAgICAgICBpZiAoX194Ll9NX3Jvb3QoKSA9 PSAwKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX01fcm9vdCgpID0gMDsKICAgICAgICAg ICAgICBfTV9sZWZ0bW9zdCgpID0gdGhpcy0+X01faGVhZGVyOwogICAgICAgICAgICAgIF9NX3Jp Z2h0bW9zdCgpID0gdGhpcy0+X01faGVhZGVyOwogICAgICAgICAgICB9CiAgICAgICAgICBlbHNl CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfTV9yb290KCkgPSBfTV9jb3B5KF9feC5fTV9y b290KCksIHRoaXMtPl9NX2hlYWRlcik7CiAgICAgICAgICAgICAgX01fbGVmdG1vc3QoKSA9IF9T X21pbmltdW0oX01fcm9vdCgpKTsKICAgICAgICAgICAgICBfTV9yaWdodG1vc3QoKSA9IF9TX21h eGltdW0oX01fcm9vdCgpKTsKICAgICAgICAgICAgICBfTV9ub2RlX2NvdW50ID0gX194Ll9NX25v ZGVfY291bnQ7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAg IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX0tl eU9mVmFsdWUsCiAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4K ICAgIHR5cGVuYW1lIF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxs b2M+OjppdGVyYXRvcgogICAgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJl LF9BbGxvYz46OgogICAgX01faW5zZXJ0KF9CYXNlX3B0ciBfX3hfLCBfQmFzZV9wdHIgX195Xywg Y29uc3QgX1ZhbCYgX192KQogICAgewogICAgICBfTGlua190eXBlIF9feCA9IChfTGlua190eXBl KSBfX3hfOwogICAgICBfTGlua190eXBlIF9feSA9IChfTGlua190eXBlKSBfX3lfOwogICAgICBf TGlua190eXBlIF9fejsKCiAgICAgIGlmIChfX3kgPT0gdGhpcy0+X01faGVhZGVyIHx8IF9feCAh PSAwIHx8CiAgICAgICAgICBfTV9rZXlfY29tcGFyZShfS2V5T2ZWYWx1ZSgpKF9fdiksIF9TX2tl eShfX3kpKSkKICAgICAgICB7CiAgICAgICAgICBfX3ogPSBfTV9jcmVhdGVfbm9kZShfX3YpOwog ICAgICAgICAgX1NfbGVmdChfX3kpID0gX196OwoKICAgICAgICAgIGlmIChfX3kgPT0gdGhpcy0+ X01faGVhZGVyKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX01fcm9vdCgpID0gX196Owog ICAgICAgICAgICAgIF9NX3JpZ2h0bW9zdCgpID0gX196OwogICAgICAgICAgICB9CiAgICAgICAg ICBlbHNlIGlmIChfX3kgPT0gX01fbGVmdG1vc3QoKSkKICAgICAgICAgICAgX01fbGVmdG1vc3Qo KSA9IF9fejsKICAgICAgICB9CiAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICBfX3ogPSBf TV9jcmVhdGVfbm9kZShfX3YpOwogICAgICAgICAgX1NfcmlnaHQoX195KSA9IF9fejsKCiAgICAg ICAgICBpZiAoX195ID09IF9NX3JpZ2h0bW9zdCgpKQogICAgICAgICAgICBfTV9yaWdodG1vc3Qo KSA9IF9fejsKICAgICAgICB9CiAgICAgIF9TX3BhcmVudChfX3opID0gX195OwogICAgICBfU19s ZWZ0KF9feikgPSAwOwogICAgICBfU19yaWdodChfX3opID0gMDsKICAgICAgX1JiX3RyZWVfcmVi YWxhbmNlKF9feiwgdGhpcy0+X01faGVhZGVyLT5fTV9wYXJlbnQpOwogICAgICArK19NX25vZGVf Y291bnQ7CiAgICAgIHJldHVybiBpdGVyYXRvcihfX3opOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBfS2V5T2ZWYWx1ZSwKICAgICAgICAg ICB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jPgogICAgdHlwZW5hbWUgX1JiX3Ry ZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46Oml0ZXJhdG9yCiAgICBf UmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6CiAgICBpbnNl cnRfZXF1YWwoY29uc3QgX1ZhbCYgX192KQogICAgewogICAgICBfTGlua190eXBlIF9feSA9IHRo aXMtPl9NX2hlYWRlcjsKICAgICAgX0xpbmtfdHlwZSBfX3ggPSBfTV9yb290KCk7CiAgICAgIHdo aWxlIChfX3ggIT0gMCkKICAgICAgICB7CiAgICAgICAgICBfX3kgPSBfX3g7CiAgICAgICAgICBf X3ggPSBfTV9rZXlfY29tcGFyZShfS2V5T2ZWYWx1ZSgpKF9fdiksIF9TX2tleShfX3gpKSA/CiAg ICAgICAgICAgIF9TX2xlZnQoX194KSA6IF9TX3JpZ2h0KF9feCk7CiAgICAgICAgfQogICAgICBy ZXR1cm4gX01faW5zZXJ0KF9feCwgX195LCBfX3YpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfS2V5LCB0eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBfS2V5T2ZWYWx1ZSwKICAgICAgICAgICB0 eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jPgogICAgcGFpcjx0eXBlbmFtZSBfUmJf dHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6aXRlcmF0b3IsCiAg ICBib29sPgogICAgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxv Yz46OgogICAgaW5zZXJ0X3VuaXF1ZShjb25zdCBfVmFsJiBfX3YpCiAgICB7CiAgICAgIF9MaW5r X3R5cGUgX195ID0gdGhpcy0+X01faGVhZGVyOwogICAgICBfTGlua190eXBlIF9feCA9IF9NX3Jv b3QoKTsKICAgICAgYm9vbCBfX2NvbXAgPSB0cnVlOwogICAgICB3aGlsZSAoX194ICE9IDApCiAg ICAgICAgewogICAgICAgICAgX195ID0gX194OwogICAgICAgICAgX19jb21wID0gX01fa2V5X2Nv bXBhcmUoX0tleU9mVmFsdWUoKShfX3YpLCBfU19rZXkoX194KSk7CiAgICAgICAgICBfX3ggPSBf X2NvbXAgPyBfU19sZWZ0KF9feCkgOiBfU19yaWdodChfX3gpOwogICAgICAgIH0KICAgICAgaXRl cmF0b3IgX19qID0gaXRlcmF0b3IoX195KTsKICAgICAgaWYgKF9fY29tcCkKICAgICAgICBpZiAo X19qID09IGJlZ2luKCkpCiAgICAgICAgICByZXR1cm4gcGFpcjxpdGVyYXRvcixib29sPihfTV9p bnNlcnQoX194LCBfX3ksIF9fdiksIHRydWUpOwogICAgICAgIGVsc2UKICAgICAgICAgIC0tX19q OwogICAgICBpZiAoX01fa2V5X2NvbXBhcmUoX1Nfa2V5KF9fai5fTV9ub2RlKSwgX0tleU9mVmFs dWUoKShfX3YpKSkKICAgICAgICByZXR1cm4gcGFpcjxpdGVyYXRvcixib29sPihfTV9pbnNlcnQo X194LCBfX3ksIF9fdiksIHRydWUpOwogICAgICByZXR1cm4gcGFpcjxpdGVyYXRvcixib29sPihf X2osIGZhbHNlKTsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9W YWwsIHR5cGVuYW1lIF9LZXlPZlZhbHVlLAogICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlLCB0 eXBlbmFtZSBfQWxsb2M+CiAgICB0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LCBfVmFsLCBfS2V5T2ZW YWx1ZSwgX0NvbXBhcmUsIF9BbGxvYz46Oml0ZXJhdG9yCiAgICBfUmJfdHJlZTxfS2V5LCBfVmFs LCBfS2V5T2ZWYWx1ZSwgX0NvbXBhcmUsIF9BbGxvYz46OgogICAgaW5zZXJ0X3VuaXF1ZShpdGVy YXRvciBfX3Bvc2l0aW9uLCBjb25zdCBfVmFsJiBfX3YpCiAgICB7CiAgICAgIGlmIChfX3Bvc2l0 aW9uLl9NX25vZGUgPT0gdGhpcy0+X01faGVhZGVyLT5fTV9sZWZ0KQogICAgICAgIHsKCiAgICAg ICAgICBpZiAoc2l6ZSgpID4gMCAmJgogICAgICAgICAgICAgIF9NX2tleV9jb21wYXJlKF9LZXlP ZlZhbHVlKCkoX192KSwgX1Nfa2V5KF9fcG9zaXRpb24uX01fbm9kZSkpKQogICAgICAgICAgICBy ZXR1cm4gX01faW5zZXJ0KF9fcG9zaXRpb24uX01fbm9kZSwgX19wb3NpdGlvbi5fTV9ub2RlLCBf X3YpOwoKICAgICAgICAgIGVsc2UKICAgICAgICAgICAgcmV0dXJuIGluc2VydF91bmlxdWUoX192 KS5maXJzdDsKICAgICAgICB9CiAgICAgIGVsc2UgaWYgKF9fcG9zaXRpb24uX01fbm9kZSA9PSB0 aGlzLT5fTV9oZWFkZXIpCiAgICAgICAgewoKICAgICAgICAgIGlmIChfTV9rZXlfY29tcGFyZShf U19rZXkoX01fcmlnaHRtb3N0KCkpLCBfS2V5T2ZWYWx1ZSgpKF9fdikpKQogICAgICAgICAgICBy ZXR1cm4gX01faW5zZXJ0KDAsIF9NX3JpZ2h0bW9zdCgpLCBfX3YpOwogICAgICAgICAgZWxzZQog ICAgICAgICAgICByZXR1cm4gaW5zZXJ0X3VuaXF1ZShfX3YpLmZpcnN0OwogICAgICAgIH0KICAg ICAgZWxzZQogICAgICAgIHsKICAgICAgICAgIGl0ZXJhdG9yIF9fYmVmb3JlID0gX19wb3NpdGlv bjsKICAgICAgICAgIC0tX19iZWZvcmU7CiAgICAgICAgICBpZiAoX01fa2V5X2NvbXBhcmUoX1Nf a2V5KF9fYmVmb3JlLl9NX25vZGUpLCBfS2V5T2ZWYWx1ZSgpKF9fdikpCiAgICAgICAgICAgICAg JiYgX01fa2V5X2NvbXBhcmUoX0tleU9mVmFsdWUoKShfX3YpLF9TX2tleShfX3Bvc2l0aW9uLl9N X25vZGUpKSkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlmIChfU19yaWdodChfX2JlZm9y ZS5fTV9ub2RlKSA9PSAwKQogICAgICAgICAgICAgICAgcmV0dXJuIF9NX2luc2VydCgwLCBfX2Jl Zm9yZS5fTV9ub2RlLCBfX3YpOwogICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIHJl dHVybiBfTV9pbnNlcnQoX19wb3NpdGlvbi5fTV9ub2RlLCBfX3Bvc2l0aW9uLl9NX25vZGUsIF9f dik7CgogICAgICAgICAgICB9CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIHJldHVybiBpbnNl cnRfdW5pcXVlKF9fdikuZmlyc3Q7CiAgICAgICAgfQogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfS2V5LCB0eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBfS2V5T2ZWYWx1ZSwKICAgICAgICAgICB0 eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jPgogICAgdHlwZW5hbWUgX1JiX3RyZWU8 X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46Oml0ZXJhdG9yCiAgICBfUmJf dHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6CiAgICBpbnNlcnRf ZXF1YWwoaXRlcmF0b3IgX19wb3NpdGlvbiwgY29uc3QgX1ZhbCYgX192KQogICAgewogICAgICBp ZiAoX19wb3NpdGlvbi5fTV9ub2RlID09IHRoaXMtPl9NX2hlYWRlci0+X01fbGVmdCkKICAgICAg ICB7CgogICAgICAgICAgaWYgKHNpemUoKSA+IDAgJiYKICAgICAgICAgICAgICAhX01fa2V5X2Nv bXBhcmUoX1Nfa2V5KF9fcG9zaXRpb24uX01fbm9kZSksIF9LZXlPZlZhbHVlKCkoX192KSkpCiAg ICAgICAgICAgIHJldHVybiBfTV9pbnNlcnQoX19wb3NpdGlvbi5fTV9ub2RlLCBfX3Bvc2l0aW9u Ll9NX25vZGUsIF9fdik7CgogICAgICAgICAgZWxzZQogICAgICAgICAgICByZXR1cm4gaW5zZXJ0 X2VxdWFsKF9fdik7CiAgICAgICAgfQogICAgICBlbHNlIGlmIChfX3Bvc2l0aW9uLl9NX25vZGUg PT0gdGhpcy0+X01faGVhZGVyKQogICAgICAgIHsKCiAgICAgICAgICBpZiAoIV9NX2tleV9jb21w YXJlKF9LZXlPZlZhbHVlKCkoX192KSwgX1Nfa2V5KF9NX3JpZ2h0bW9zdCgpKSkpCiAgICAgICAg ICAgIHJldHVybiBfTV9pbnNlcnQoMCwgX01fcmlnaHRtb3N0KCksIF9fdik7CiAgICAgICAgICBl bHNlCiAgICAgICAgICAgIHJldHVybiBpbnNlcnRfZXF1YWwoX192KTsKICAgICAgICB9CiAgICAg IGVsc2UKICAgICAgICB7CiAgICAgICAgICBpdGVyYXRvciBfX2JlZm9yZSA9IF9fcG9zaXRpb247 CiAgICAgICAgICAtLV9fYmVmb3JlOwogICAgICAgICAgaWYgKCFfTV9rZXlfY29tcGFyZShfS2V5 T2ZWYWx1ZSgpKF9fdiksIF9TX2tleShfX2JlZm9yZS5fTV9ub2RlKSkKICAgICAgICAgICAgICAm JiAhX01fa2V5X2NvbXBhcmUoX1Nfa2V5KF9fcG9zaXRpb24uX01fbm9kZSksCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIF9LZXlPZlZhbHVlKCkoX192KSkpCiAgICAgICAgICAgIHsK ICAgICAgICAgICAgICBpZiAoX1NfcmlnaHQoX19iZWZvcmUuX01fbm9kZSkgPT0gMCkKICAgICAg ICAgICAgICAgIHJldHVybiBfTV9pbnNlcnQoMCwgX19iZWZvcmUuX01fbm9kZSwgX192KTsKICAg ICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICByZXR1cm4gX01faW5zZXJ0KF9fcG9zaXRp b24uX01fbm9kZSwgX19wb3NpdGlvbi5fTV9ub2RlLCBfX3YpOwoKICAgICAgICAgICAgfQogICAg ICAgICAgZWxzZQogICAgICAgICAgICByZXR1cm4gaW5zZXJ0X2VxdWFsKF9fdik7CiAgICAgICAg fQogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsLCB0eXBlbmFt ZSBfS29WLAogICAgICAgICAgIHR5cGVuYW1lIF9DbXAsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHRl bXBsYXRlPGNsYXNzIF9JST4KICAgICAgdm9pZAogICAgICBfUmJfdHJlZTxfS2V5LF9WYWwsX0tv VixfQ21wLF9BbGxvYz46OgogICAgICBpbnNlcnRfZXF1YWwoX0lJIF9fZmlyc3QsIF9JSSBfX2xh c3QpCiAgICAgIHsKICAgICAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3Qp CiAgICAgICAgICBpbnNlcnRfZXF1YWwoKl9fZmlyc3QpOwogICAgICB9CgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWwsIHR5cGVuYW1lIF9Lb1YsCiAgICAgICAgICAgdHlw ZW5hbWUgX0NtcCwgdHlwZW5hbWUgX0FsbG9jPgogICAgdGVtcGxhdGU8Y2xhc3MgX0lJPgogICAg dm9pZAogICAgX1JiX3RyZWU8X0tleSxfVmFsLF9Lb1YsX0NtcCxfQWxsb2M+OjoKICAgIGluc2Vy dF91bmlxdWUoX0lJIF9fZmlyc3QsIF9JSSBfX2xhc3QpCiAgICB7CiAgICAgIGZvciAoIDsgX19m aXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKICAgICAgICBpbnNlcnRfdW5pcXVlKCpfX2ZpcnN0 KTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbCwgdHlwZW5h bWUgX0tleU9mVmFsdWUsCiAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9B bGxvYz4KICAgIGlubGluZSB2b2lkCiAgICBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUs X0NvbXBhcmUsX0FsbG9jPjo6ZXJhc2UoaXRlcmF0b3IgX19wb3NpdGlvbikKICAgIHsKICAgICAg X0xpbmtfdHlwZSBfX3kgPQogICAgICAgIChfTGlua190eXBlKSBfUmJfdHJlZV9yZWJhbGFuY2Vf Zm9yX2VyYXNlKF9fcG9zaXRpb24uX01fbm9kZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB0aGlzLT5fTV9oZWFkZXItPl9NX3BhcmVudCwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLT5fTV9oZWFk ZXItPl9NX2xlZnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgdGhpcy0+X01faGVhZGVyLT5fTV9yaWdodCk7CiAgICAgIGRlc3Ryb3lfbm9kZShfX3kp OwogICAgICAtLV9NX25vZGVfY291bnQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXks IHR5cGVuYW1lIF9WYWwsIHR5cGVuYW1lIF9LZXlPZlZhbHVlLAogICAgICAgICAgIHR5cGVuYW1l IF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LF9W YWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6c2l6ZV90eXBlCiAgICBfUmJfdHJlZTxf S2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6ZXJhc2UoY29uc3QgX0tleSYg X194KQogICAgewogICAgICBwYWlyPGl0ZXJhdG9yLGl0ZXJhdG9yPiBfX3AgPSBlcXVhbF9yYW5n ZShfX3gpOwogICAgICBzaXplX3R5cGUgX19uID0gc3RkOjpkaXN0YW5jZShfX3AuZmlyc3QsIF9f cC5zZWNvbmQpOwogICAgICBlcmFzZShfX3AuZmlyc3QsIF9fcC5zZWNvbmQpOwogICAgICByZXR1 cm4gX19uOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsLCB0 eXBlbmFtZSBfS29WLAogICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxs b2M+CiAgICB0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LCBfVmFsLCBfS29WLCBfQ29tcGFyZSwgX0Fs bG9jPjo6X0xpbmtfdHlwZQogICAgX1JiX3RyZWU8X0tleSxfVmFsLF9Lb1YsX0NvbXBhcmUsX0Fs bG9jPjo6CiAgICBfTV9jb3B5KF9MaW5rX3R5cGUgX194LCBfTGlua190eXBlIF9fcCkKICAgIHsK CiAgICAgIF9MaW5rX3R5cGUgX190b3AgPSBfTV9jbG9uZV9ub2RlKF9feCk7CiAgICAgIF9fdG9w LT5fTV9wYXJlbnQgPSBfX3A7CgogICAgICB0cnkKICAgICAgICB7CiAgICAgICAgICBpZiAoX194 LT5fTV9yaWdodCkKICAgICAgICAgICAgX190b3AtPl9NX3JpZ2h0ID0gX01fY29weShfU19yaWdo dChfX3gpLCBfX3RvcCk7CiAgICAgICAgICBfX3AgPSBfX3RvcDsKICAgICAgICAgIF9feCA9IF9T X2xlZnQoX194KTsKCiAgICAgICAgICB3aGlsZSAoX194ICE9IDApCiAgICAgICAgICAgIHsKICAg ICAgICAgICAgICBfTGlua190eXBlIF9feSA9IF9NX2Nsb25lX25vZGUoX194KTsKICAgICAgICAg ICAgICBfX3AtPl9NX2xlZnQgPSBfX3k7CiAgICAgICAgICAgICAgX195LT5fTV9wYXJlbnQgPSBf X3A7CiAgICAgICAgICAgICAgaWYgKF9feC0+X01fcmlnaHQpCiAgICAgICAgICAgICAgICBfX3kt Pl9NX3JpZ2h0ID0gX01fY29weShfU19yaWdodChfX3gpLCBfX3kpOwogICAgICAgICAgICAgIF9f cCA9IF9feTsKICAgICAgICAgICAgICBfX3ggPSBfU19sZWZ0KF9feCk7CiAgICAgICAgICAgIH0K ICAgICAgICB9CiAgICAgIGNhdGNoKC4uLikKICAgICAgICB7CiAgICAgICAgICBfTV9lcmFzZShf X3RvcCk7CiAgICAgICAgICB0aHJvdzsKICAgICAgICB9CiAgICAgIHJldHVybiBfX3RvcDsKICAg IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX0tl eU9mVmFsdWUsCiAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4K ICAgIHZvaWQKICAgIF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxs b2M+OjpfTV9lcmFzZShfTGlua190eXBlIF9feCkKICAgIHsKCiAgICAgIHdoaWxlIChfX3ggIT0g MCkKICAgICAgICB7CiAgICAgICAgICBfTV9lcmFzZShfU19yaWdodChfX3gpKTsKICAgICAgICAg IF9MaW5rX3R5cGUgX195ID0gX1NfbGVmdChfX3gpOwogICAgICAgICAgZGVzdHJveV9ub2RlKF9f eCk7CiAgICAgICAgICBfX3ggPSBfX3k7CiAgICAgICAgfQogICAgfQoKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBfS2V5T2ZWYWx1ZSwKICAgICAgICAg ICB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jPgogICAgdm9pZAogICAgX1JiX3Ry ZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46OgogICAgZXJhc2UoaXRl cmF0b3IgX19maXJzdCwgaXRlcmF0b3IgX19sYXN0KQogICAgewogICAgICBpZiAoX19maXJzdCA9 PSBiZWdpbigpICYmIF9fbGFzdCA9PSBlbmQoKSkKICAgICAgICBjbGVhcigpOwogICAgICBlbHNl CiAgICAgICAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KSBlcmFzZShfX2ZpcnN0KyspOwogICAg fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBfS2V5 T2ZWYWx1ZSwKICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jPgog ICAgdm9pZAogICAgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxv Yz46OgogICAgZXJhc2UoY29uc3QgX0tleSogX19maXJzdCwgY29uc3QgX0tleSogX19sYXN0KQog ICAgewogICAgICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpCiAgICAgICAgZXJhc2UoKl9fZmly c3QrKyk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWwsIHR5 cGVuYW1lIF9LZXlPZlZhbHVlLAogICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFt ZSBfQWxsb2M+CiAgICB0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0Nv bXBhcmUsX0FsbG9jPjo6aXRlcmF0b3IKICAgIF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1 ZSxfQ29tcGFyZSxfQWxsb2M+OjpmaW5kKGNvbnN0IF9LZXkmIF9faykKICAgIHsKICAgICAgX0xp bmtfdHlwZSBfX3kKICAgICAgICA9IHRoaXMtPl9NX2hlYWRlcjsKICAgICAgX0xpbmtfdHlwZSBf X3ggPSBfTV9yb290KCk7CgogICAgICB3aGlsZSAoX194ICE9IDApCiAgICAgICAgaWYgKCFfTV9r ZXlfY29tcGFyZShfU19rZXkoX194KSwgX19rKSkKICAgICAgICAgIF9feSA9IF9feCwgX194ID0g X1NfbGVmdChfX3gpOwogICAgICAgIGVsc2UKICAgICAgICAgIF9feCA9IF9TX3JpZ2h0KF9feCk7 CgogICAgICBpdGVyYXRvciBfX2ogPSBpdGVyYXRvcihfX3kpOwogICAgICByZXR1cm4gKF9faiA9 PSBlbmQoKSB8fCBfTV9rZXlfY29tcGFyZShfX2ssIF9TX2tleShfX2ouX01fbm9kZSkpKSA/CiAg ICAgICAgZW5kKCkgOiBfX2o7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVu YW1lIF9WYWwsIHR5cGVuYW1lIF9LZXlPZlZhbHVlLAogICAgICAgICAgIHR5cGVuYW1lIF9Db21w YXJlLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LF9WYWwsX0tl eU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6Y29uc3RfaXRlcmF0b3IKICAgIF9SYl90cmVlPF9L ZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjoKICAgIGZpbmQoY29uc3QgX0tl eSYgX19rKSBjb25zdAogICAgewogICAgICBfTGlua190eXBlIF9feQogICAgICAgID0gdGhpcy0+ X01faGVhZGVyOwogICAgICBfTGlua190eXBlIF9feCA9IF9NX3Jvb3QoKTsKCiAgICAgd2hpbGUg KF9feCAhPSAwKQogICAgICAgewogICAgICAgICBpZiAoIV9NX2tleV9jb21wYXJlKF9TX2tleShf X3gpLCBfX2spKQogICAgICAgICAgIF9feSA9IF9feCwgX194ID0gX1NfbGVmdChfX3gpOwogICAg ICAgICBlbHNlCiAgICAgICAgICAgX194ID0gX1NfcmlnaHQoX194KTsKICAgICAgIH0KICAgICBj b25zdF9pdGVyYXRvciBfX2ogPSBjb25zdF9pdGVyYXRvcihfX3kpOwogICAgIHJldHVybiAoX19q ID09IGVuZCgpIHx8IF9NX2tleV9jb21wYXJlKF9faywgX1Nfa2V5KF9fai5fTV9ub2RlKSkpID8K ICAgICAgIGVuZCgpIDogX19qOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBl bmFtZSBfVmFsLCB0eXBlbmFtZSBfS2V5T2ZWYWx1ZSwKICAgICAgICAgICB0eXBlbmFtZSBfQ29t cGFyZSwgdHlwZW5hbWUgX0FsbG9jPgogICAgdHlwZW5hbWUgX1JiX3RyZWU8X0tleSxfVmFsLF9L ZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46OnNpemVfdHlwZQogICAgX1JiX3RyZWU8X0tleSxf VmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46OgogICAgY291bnQoY29uc3QgX0tleSYg X19rKSBjb25zdAogICAgewogICAgICBwYWlyPGNvbnN0X2l0ZXJhdG9yLCBjb25zdF9pdGVyYXRv cj4gX19wID0gZXF1YWxfcmFuZ2UoX19rKTsKICAgICAgc2l6ZV90eXBlIF9fbiA9IHN0ZDo6ZGlz dGFuY2UoX19wLmZpcnN0LCBfX3Auc2Vjb25kKTsKICAgICAgcmV0dXJuIF9fbjsKICAgIH0KCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX0tleU9mVmFs dWUsCiAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5 cGVuYW1lIF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+Ojpp dGVyYXRvcgogICAgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxv Yz46OgogICAgbG93ZXJfYm91bmQoY29uc3QgX0tleSYgX19rKQogICAgewogICAgICBfTGlua190 eXBlIF9feQogICAgICAgID0gdGhpcy0+X01faGVhZGVyOwogICAgICBfTGlua190eXBlIF9feCA9 IF9NX3Jvb3QoKTsKCiAgICAgIHdoaWxlIChfX3ggIT0gMCkKICAgICAgICBpZiAoIV9NX2tleV9j b21wYXJlKF9TX2tleShfX3gpLCBfX2spKQogICAgICAgICAgX195ID0gX194LCBfX3ggPSBfU19s ZWZ0KF9feCk7CiAgICAgICAgZWxzZQogICAgICAgICAgX194ID0gX1NfcmlnaHQoX194KTsKCiAg ICAgIHJldHVybiBpdGVyYXRvcihfX3kpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5 LCB0eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBfS2V5T2ZWYWx1ZSwKICAgICAgICAgICB0eXBlbmFt ZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jPgogICAgdHlwZW5hbWUgX1JiX3RyZWU8X0tleSxf VmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46OmNvbnN0X2l0ZXJhdG9yCiAgICBfUmJf dHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6CiAgICBsb3dlcl9i b3VuZChjb25zdCBfS2V5JiBfX2spIGNvbnN0CiAgICB7CiAgICAgIF9MaW5rX3R5cGUgX195CiAg ICAgICAgPSB0aGlzLT5fTV9oZWFkZXI7CiAgICAgIF9MaW5rX3R5cGUgX194ID0gX01fcm9vdCgp OwoKICAgICAgd2hpbGUgKF9feCAhPSAwKQogICAgICAgIGlmICghX01fa2V5X2NvbXBhcmUoX1Nf a2V5KF9feCksIF9faykpCiAgICAgICAgICBfX3kgPSBfX3gsIF9feCA9IF9TX2xlZnQoX194KTsK ICAgICAgICBlbHNlCiAgICAgICAgICBfX3ggPSBfU19yaWdodChfX3gpOwoKICAgICAgcmV0dXJu IGNvbnN0X2l0ZXJhdG9yKF9feSk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5 cGVuYW1lIF9WYWwsIHR5cGVuYW1lIF9LZXlPZlZhbHVlLAogICAgICAgICAgIHR5cGVuYW1lIF9D b21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LF9WYWws X0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6aXRlcmF0b3IKICAgIF9SYl90cmVlPF9LZXks X1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjoKICAgIHVwcGVyX2JvdW5kKGNvbnN0 IF9LZXkmIF9faykKICAgIHsKICAgICAgX0xpbmtfdHlwZSBfX3kKICAgICAgICA9IHRoaXMtPl9N X2hlYWRlcjsKICAgICAgX0xpbmtfdHlwZSBfX3ggPSBfTV9yb290KCk7CgogICAgICB3aGlsZSAo X194ICE9IDApCiAgICAgICAgaWYgKF9NX2tleV9jb21wYXJlKF9faywgX1Nfa2V5KF9feCkpKQog ICAgICAgICAgX195ID0gX194LCBfX3ggPSBfU19sZWZ0KF9feCk7CiAgICAgICAgZWxzZQogICAg ICAgICAgX194ID0gX1NfcmlnaHQoX194KTsKCiAgICAgIHJldHVybiBpdGVyYXRvcihfX3kpOwog ICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBf S2V5T2ZWYWx1ZSwKICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9j PgogICAgdHlwZW5hbWUgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9B bGxvYz46OmNvbnN0X2l0ZXJhdG9yCiAgICBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUs X0NvbXBhcmUsX0FsbG9jPjo6CiAgICB1cHBlcl9ib3VuZChjb25zdCBfS2V5JiBfX2spIGNvbnN0 CiAgICB7CiAgICAgIF9MaW5rX3R5cGUgX195CiAgICAgICAgPSB0aGlzLT5fTV9oZWFkZXI7CiAg ICAgIF9MaW5rX3R5cGUgX194ID0gX01fcm9vdCgpOwoKICAgICAgd2hpbGUgKF9feCAhPSAwKQog ICAgICAgIGlmIChfTV9rZXlfY29tcGFyZShfX2ssIF9TX2tleShfX3gpKSkKICAgICAgICAgIF9f eSA9IF9feCwgX194ID0gX1NfbGVmdChfX3gpOwogICAgICAgIGVsc2UKICAgICAgICAgIF9feCA9 IF9TX3JpZ2h0KF9feCk7CgogICAgICByZXR1cm4gY29uc3RfaXRlcmF0b3IoX195KTsKICAgIH0K CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX0tleU9m VmFsdWUsCiAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4KICAg IGlubGluZQogICAgcGFpcjx0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUs X0NvbXBhcmUsX0FsbG9jPjo6aXRlcmF0b3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBfUmJfdHJlZTxf S2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6aXRlcmF0b3I+CiAgICBfUmJf dHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6CiAgICBlcXVhbF9y YW5nZShjb25zdCBfS2V5JiBfX2spCiAgICB7IHJldHVybiBwYWlyPGl0ZXJhdG9yLCBpdGVyYXRv cj4obG93ZXJfYm91bmQoX19rKSwgdXBwZXJfYm91bmQoX19rKSk7IH0KCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX0tvViwKICAgICAgICAgICB0eXBl bmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jPgogIGlubGluZQogIHBhaXI8dHlwZW5hbWUg X1JiX3RyZWU8X0tleSwgX1ZhbCwgX0tvViwgX0NvbXBhcmUsIF9BbGxvYz46OmNvbnN0X2l0ZXJh dG9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgdHlwZW5hbWUgX1JiX3RyZWU8X0tleSwgX1ZhbCwgX0tvViwgX0NvbXBhcmUs IF9BbGxvYz46OmNvbnN0X2l0ZXJhdG9yPgogIF9SYl90cmVlPF9LZXksIF9WYWwsIF9Lb1YsIF9D b21wYXJlLCBfQWxsb2M+CiAgOjplcXVhbF9yYW5nZShjb25zdCBfS2V5JiBfX2spIGNvbnN0CiAg ewogICAgcmV0dXJuIHBhaXI8Y29uc3RfaXRlcmF0b3IsY29uc3RfaXRlcmF0b3I+KGxvd2VyX2Jv dW5kKF9fayksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg dXBwZXJfYm91bmQoX19rKSk7CiAgfQoKICBpbmxpbmUgaW50CiAgX19ibGFja19jb3VudChfUmJf dHJlZV9ub2RlX2Jhc2UqIF9fbm9kZSwgX1JiX3RyZWVfbm9kZV9iYXNlKiBfX3Jvb3QpCiAgewog ICAgaWYgKF9fbm9kZSA9PSAwKQogICAgICByZXR1cm4gMDsKICAgIGludCBfX3N1bSA9IDA7CiAg ICBkbwogICAgICB7CiAgICAgICAgaWYgKF9fbm9kZS0+X01fY29sb3IgPT0gX01fYmxhY2spCiAg ICAgICAgICArK19fc3VtOwogICAgICAgIGlmIChfX25vZGUgPT0gX19yb290KQogICAgICAgICAg YnJlYWs7CiAgICAgICAgX19ub2RlID0gX19ub2RlLT5fTV9wYXJlbnQ7CiAgICAgIH0KICAgIHdo aWxlICgxKTsKICAgIHJldHVybiBfX3N1bTsKICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXks IHR5cGVuYW1lIF9WYWwsIHR5cGVuYW1lIF9LZXlPZlZhbHVlLAogICAgICAgICAgIHR5cGVuYW1l IF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBib29sCiAgICBfUmJfdHJlZTxfS2V5LF9W YWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6X19yYl92ZXJpZnkoKSBjb25zdAogICAg ewogICAgaWYgKF9NX25vZGVfY291bnQgPT0gMCB8fCBiZWdpbigpID09IGVuZCgpKQogICAgICBy ZXR1cm4gX01fbm9kZV9jb3VudCA9PSAwICYmIGJlZ2luKCkgPT0gZW5kKCkgJiYKICAgICAgICB0 aGlzLT5fTV9oZWFkZXItPl9NX2xlZnQgPT0gdGhpcy0+X01faGVhZGVyCiAgICAgICAgJiYgdGhp cy0+X01faGVhZGVyLT5fTV9yaWdodCA9PSB0aGlzLT5fTV9oZWFkZXI7CgogICAgaW50IF9fbGVu ID0gX19ibGFja19jb3VudChfTV9sZWZ0bW9zdCgpLCBfTV9yb290KCkpOwogICAgZm9yIChjb25z dF9pdGVyYXRvciBfX2l0ID0gYmVnaW4oKTsgX19pdCAhPSBlbmQoKTsgKytfX2l0KQogICAgICB7 CiAgICAgICAgX0xpbmtfdHlwZSBfX3ggPSAoX0xpbmtfdHlwZSkgX19pdC5fTV9ub2RlOwogICAg ICAgIF9MaW5rX3R5cGUgX19MID0gX1NfbGVmdChfX3gpOwogICAgICAgIF9MaW5rX3R5cGUgX19S ID0gX1NfcmlnaHQoX194KTsKCiAgICAgICAgaWYgKF9feC0+X01fY29sb3IgPT0gX01fcmVkKQog ICAgICAgICAgaWYgKChfX0wgJiYgX19MLT5fTV9jb2xvciA9PSBfTV9yZWQpCiAgICAgICAgICAg ICAgfHwgKF9fUiAmJiBfX1ItPl9NX2NvbG9yID09IF9NX3JlZCkpCiAgICAgICAgICAgIHJldHVy biBmYWxzZTsKCiAgICAgICAgaWYgKF9fTCAmJiBfTV9rZXlfY29tcGFyZShfU19rZXkoX194KSwg X1Nfa2V5KF9fTCkpKQogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIGlmIChfX1IgJiYg X01fa2V5X2NvbXBhcmUoX1Nfa2V5KF9fUiksIF9TX2tleShfX3gpKSkKICAgICAgICAgIHJldHVy biBmYWxzZTsKCiAgICAgICAgaWYgKCFfX0wgJiYgIV9fUiAmJiBfX2JsYWNrX2NvdW50KF9feCwg X01fcm9vdCgpKSAhPSBfX2xlbikKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQoKICAg IGlmIChfTV9sZWZ0bW9zdCgpICE9IF9SYl90cmVlX25vZGVfYmFzZTo6X1NfbWluaW11bShfTV9y b290KCkpKQogICAgICByZXR1cm4gZmFsc2U7CiAgICBpZiAoX01fcmlnaHRtb3N0KCkgIT0gX1Ji X3RyZWVfbm9kZV9iYXNlOjpfU19tYXhpbXVtKF9NX3Jvb3QoKSkpCiAgICAgIHJldHVybiBmYWxz ZTsKICAgIHJldHVybiB0cnVlOwogICAgfQp9CiMgNjcgIi9ub3RuZnMvZmNoZS9CVUlMRC1nY2Mt bXVkZmxhcC9JTlNUL2luY2x1ZGUvYysrLzMuNS10cmVlLXNzYS9tYXAiIDIgMwojIDEgIi9ub3Ru ZnMvZmNoZS9CVUlMRC1nY2MtbXVkZmxhcC9JTlNUL2luY2x1ZGUvYysrLzMuNS10cmVlLXNzYS9i aXRzL3N0bF9tYXAuaCIgMSAzCiMgNjYgIi9ub3RuZnMvZmNoZS9CVUlMRC1nY2MtbXVkZmxhcC9J TlNUL2luY2x1ZGUvYysrLzMuNS10cmVlLXNzYS9iaXRzL3N0bF9tYXAuaCIgMwpuYW1lc3BhY2Ug c3RkCnsKIyA4OSAiL25vdG5mcy9mY2hlL0JVSUxELWdjYy1tdWRmbGFwL0lOU1QvaW5jbHVkZS9j KysvMy41LXRyZWUtc3NhL2JpdHMvc3RsX21hcC5oIiAzCiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9L ZXksIHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0NvbXBhcmUgPSBsZXNzPF9LZXk+LAogICAgICAg ICAgICB0eXBlbmFtZSBfQWxsb2MgPSBhbGxvY2F0b3I8cGFpcjxjb25zdCBfS2V5LCBfVHA+ID4g PgogICAgY2xhc3MgbWFwCiAgewoKICAgCiAgIAoKICBwdWJsaWM6CiAgICB0eXBlZGVmIF9LZXkg a2V5X3R5cGU7CiAgICB0eXBlZGVmIF9UcCBtYXBwZWRfdHlwZTsKICAgIHR5cGVkZWYgcGFpcjxj b25zdCBfS2V5LCBfVHA+IHZhbHVlX3R5cGU7CiAgICB0eXBlZGVmIF9Db21wYXJlIGtleV9jb21w YXJlOwoKICAgIGNsYXNzIHZhbHVlX2NvbXBhcmUKICAgICAgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0 aW9uPHZhbHVlX3R5cGUsIHZhbHVlX3R5cGUsIGJvb2w+CiAgICAgIHsKICAgICAgICBmcmllbmQg Y2xhc3MgbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz47CiAgICAgIHByb3RlY3RlZDoKICAg ICAgICBfQ29tcGFyZSBjb21wOwogICAgICAgIHZhbHVlX2NvbXBhcmUoX0NvbXBhcmUgX19jKSA6 IGNvbXAoX19jKSB7fQogICAgICBwdWJsaWM6CiAgICAgICAgYm9vbCBvcGVyYXRvcigpKGNvbnN0 IHZhbHVlX3R5cGUmIF9feCwgY29uc3QgdmFsdWVfdHlwZSYgX195KSBjb25zdAogICAgICAgIHsg cmV0dXJuIGNvbXAoX194LmZpcnN0LCBfX3kuZmlyc3QpOyB9CiAgICAgIH07CgogIHByaXZhdGU6 CgogICAgdHlwZWRlZiBfUmJfdHJlZTxrZXlfdHlwZSwgdmFsdWVfdHlwZSwKICAgICAgICAgICAg ICAgICAgICAgX1NlbGVjdDFzdDx2YWx1ZV90eXBlPiwga2V5X2NvbXBhcmUsIF9BbGxvYz4gX1Jl cF90eXBlOwoKICAgIF9SZXBfdHlwZSBfTV90OwoKICBwdWJsaWM6CgoKICAgIHR5cGVkZWYgdHlw ZW5hbWUgX1JlcF90eXBlOjphbGxvY2F0b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsKICAgIHR5cGVk ZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpyZWZlcmVuY2UgcmVmZXJlbmNlOwogICAgdHlwZWRlZiB0 eXBlbmFtZSBfUmVwX3R5cGU6OmNvbnN0X3JlZmVyZW5jZSBjb25zdF9yZWZlcmVuY2U7CiAgICB0 eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6aXRlcmF0b3IgaXRlcmF0b3I7CiAgICB0eXBlZGVm IHR5cGVuYW1lIF9SZXBfdHlwZTo6Y29uc3RfaXRlcmF0b3IgY29uc3RfaXRlcmF0b3I7CiAgICB0 eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6c2l6ZV90eXBlIHNpemVfdHlwZTsKICAgIHR5cGVk ZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpkaWZmZXJlbmNlX3R5cGUgZGlmZmVyZW5jZV90eXBlOwog ICAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OnBvaW50ZXIgcG9pbnRlcjsKICAgIHR5cGVk ZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpjb25zdF9wb2ludGVyIGNvbnN0X3BvaW50ZXI7CiAgICB0 eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6cmV2ZXJzZV9pdGVyYXRvciByZXZlcnNlX2l0ZXJh dG9yOwogICAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OmNvbnN0X3JldmVyc2VfaXRlcmF0 b3IgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcjsKIyAxNDQgIi9ub3RuZnMvZmNoZS9CVUlMRC1nY2Mt bXVkZmxhcC9JTlNUL2luY2x1ZGUvYysrLzMuNS10cmVlLXNzYS9iaXRzL3N0bF9tYXAuaCIgMwog ICAgbWFwKCkgOiBfTV90KF9Db21wYXJlKCksIGFsbG9jYXRvcl90eXBlKCkpIHsgfQoKCgoKCiAg ICBleHBsaWNpdAogICAgbWFwKGNvbnN0IF9Db21wYXJlJiBfX2NvbXAsIGNvbnN0IGFsbG9jYXRv cl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQogICAgICA6IF9NX3QoX19jb21wLCBfX2Ep IHsgfQojIDE2MSAiL25vdG5mcy9mY2hlL0JVSUxELWdjYy1tdWRmbGFwL0lOU1QvaW5jbHVkZS9j KysvMy41LXRyZWUtc3NhL2JpdHMvc3RsX21hcC5oIiAzCiAgICBtYXAoY29uc3QgbWFwJiBfX3gp CiAgICAgIDogX01fdChfX3guX01fdCkgeyB9CiMgMTczICIvbm90bmZzL2ZjaGUvQlVJTEQtZ2Nj LW11ZGZsYXAvSU5TVC9pbmNsdWRlL2MrKy8zLjUtdHJlZS1zc2EvYml0cy9zdGxfbWFwLmgiIDMK ICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcj4KICAgICAgbWFwKF9JbnB1dEl0 ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkKICAgICAgOiBfTV90KF9Db21w YXJlKCksIGFsbG9jYXRvcl90eXBlKCkpCiAgICAgIHsgX01fdC5pbnNlcnRfdW5pcXVlKF9fZmly c3QsIF9fbGFzdCk7IH0KIyAxODkgIi9ub3RuZnMvZmNoZS9CVUlMRC1nY2MtbXVkZmxhcC9JTlNU L2luY2x1ZGUvYysrLzMuNS10cmVlLXNzYS9iaXRzL3N0bF9tYXAuaCIgMwogICAgdGVtcGxhdGUg PHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yPgogICAgICBtYXAoX0lucHV0SXRlcmF0b3IgX19maXJz dCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgY29uc3QgX0NvbXBhcmUmIF9fY29t cCwgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCiAgICAgIDog X01fdChfX2NvbXAsIF9fYSkKICAgICAgeyBfTV90Lmluc2VydF91bmlxdWUoX19maXJzdCwgX19s YXN0KTsgfQojIDIxMSAiL25vdG5mcy9mY2hlL0JVSUxELWdjYy1tdWRmbGFwL0lOU1QvaW5jbHVk ZS9jKysvMy41LXRyZWUtc3NhL2JpdHMvc3RsX21hcC5oIiAzCiAgICBtYXAmCiAgICBvcGVyYXRv cj0oY29uc3QgbWFwJiBfX3gpCiAgICB7CiAgICAgIF9NX3QgPSBfX3guX01fdDsKICAgICAgcmV0 dXJuICp0aGlzOwogICAgfQoKCiAgICBhbGxvY2F0b3JfdHlwZQogICAgZ2V0X2FsbG9jYXRvcigp IGNvbnN0IHsgcmV0dXJuIF9NX3QuZ2V0X2FsbG9jYXRvcigpOyB9CgoKCgoKCiAgICBpdGVyYXRv cgogICAgYmVnaW4oKSB7IHJldHVybiBfTV90LmJlZ2luKCk7IH0KCgoKCgoKICAgIGNvbnN0X2l0 ZXJhdG9yCiAgICBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIF9NX3QuYmVnaW4oKTsgfQoKCgoKCiAg ICBpdGVyYXRvcgogICAgZW5kKCkgeyByZXR1cm4gX01fdC5lbmQoKTsgfQoKCgoKCgogICAgY29u c3RfaXRlcmF0b3IKICAgIGVuZCgpIGNvbnN0IHsgcmV0dXJuIF9NX3QuZW5kKCk7IH0KCgoKCgog ICAgcmV2ZXJzZV9pdGVyYXRvcgogICAgcmJlZ2luKCkgeyByZXR1cm4gX01fdC5yYmVnaW4oKTsg fQoKCgoKCgogICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcgogICAgcmJlZ2luKCkgY29uc3QgeyBy ZXR1cm4gX01fdC5yYmVnaW4oKTsgfQoKCgoKCgogICAgcmV2ZXJzZV9pdGVyYXRvcgogICAgcmVu ZCgpIHsgcmV0dXJuIF9NX3QucmVuZCgpOyB9CgoKCgoKCiAgICBjb25zdF9yZXZlcnNlX2l0ZXJh dG9yCiAgICByZW5kKCkgY29uc3QgeyByZXR1cm4gX01fdC5yZW5kKCk7IH0KCgoKICAgIGJvb2wK ICAgIGVtcHR5KCkgY29uc3QgeyByZXR1cm4gX01fdC5lbXB0eSgpOyB9CgoKICAgIHNpemVfdHlw ZQogICAgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIF9NX3Quc2l6ZSgpOyB9CgoKICAgIHNpemVfdHlw ZQogICAgbWF4X3NpemUoKSBjb25zdCB7IHJldHVybiBfTV90Lm1heF9zaXplKCk7IH0KIyAzMTAg Ii9ub3RuZnMvZmNoZS9CVUlMRC1nY2MtbXVkZmxhcC9JTlNUL2luY2x1ZGUvYysrLzMuNS10cmVl LXNzYS9iaXRzL3N0bF9tYXAuaCIgMwogICAgbWFwcGVkX3R5cGUmCiAgICBvcGVyYXRvcltdKGNv bnN0IGtleV90eXBlJiBfX2spCiAgICB7CgogICAgIAoKICAgICAgaXRlcmF0b3IgX19pID0gbG93 ZXJfYm91bmQoX19rKTsKCiAgICAgIGlmIChfX2kgPT0gZW5kKCkgfHwga2V5X2NvbXAoKShfX2ss ICgqX19pKS5maXJzdCkpCiAgICAgICAgX19pID0gaW5zZXJ0KF9faSwgdmFsdWVfdHlwZShfX2ss IG1hcHBlZF90eXBlKCkpKTsKICAgICAgcmV0dXJuICgqX19pKS5zZWNvbmQ7CiAgICB9CiMgMzM4 ICIvbm90bmZzL2ZjaGUvQlVJTEQtZ2NjLW11ZGZsYXAvSU5TVC9pbmNsdWRlL2MrKy8zLjUtdHJl ZS1zc2EvYml0cy9zdGxfbWFwLmgiIDMKICAgIHBhaXI8aXRlcmF0b3IsYm9vbD4KICAgIGluc2Vy dChjb25zdCB2YWx1ZV90eXBlJiBfX3gpCiAgICB7IHJldHVybiBfTV90Lmluc2VydF91bmlxdWUo X194KTsgfQojIDM2MiAiL25vdG5mcy9mY2hlL0JVSUxELWdjYy1tdWRmbGFwL0lOU1QvaW5jbHVk ZS9jKysvMy41LXRyZWUtc3NhL2JpdHMvc3RsX21hcC5oIiAzCiAgICBpdGVyYXRvcgogICAgaW5z ZXJ0KGl0ZXJhdG9yIHBvc2l0aW9uLCBjb25zdCB2YWx1ZV90eXBlJiBfX3gpCiAgICB7IHJldHVy biBfTV90Lmluc2VydF91bmlxdWUocG9zaXRpb24sIF9feCk7IH0KIyAzNzQgIi9ub3RuZnMvZmNo ZS9CVUlMRC1nY2MtbXVkZmxhcC9JTlNUL2luY2x1ZGUvYysrLzMuNS10cmVlLXNzYS9iaXRzL3N0 bF9tYXAuaCIgMwogICAgdGVtcGxhdGUgPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yPgogICAgICB2 b2lkCiAgICAgIGluc2VydChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBf X2xhc3QpCiAgICAgIHsgX01fdC5pbnNlcnRfdW5pcXVlKF9fZmlyc3QsIF9fbGFzdCk7IH0KIyAz ODggIi9ub3RuZnMvZmNoZS9CVUlMRC1nY2MtbXVkZmxhcC9JTlNUL2luY2x1ZGUvYysrLzMuNS10 cmVlLXNzYS9iaXRzL3N0bF9tYXAuaCIgMwogICAgdm9pZAogICAgZXJhc2UoaXRlcmF0b3IgX19w b3NpdGlvbikgeyBfTV90LmVyYXNlKF9fcG9zaXRpb24pOyB9CiMgNDAyICIvbm90bmZzL2ZjaGUv QlVJTEQtZ2NjLW11ZGZsYXAvSU5TVC9pbmNsdWRlL2MrKy8zLjUtdHJlZS1zc2EvYml0cy9zdGxf bWFwLmgiIDMKICAgIHNpemVfdHlwZQogICAgZXJhc2UoY29uc3Qga2V5X3R5cGUmIF9feCkgeyBy ZXR1cm4gX01fdC5lcmFzZShfX3gpOyB9CiMgNDE1ICIvbm90bmZzL2ZjaGUvQlVJTEQtZ2NjLW11 ZGZsYXAvSU5TVC9pbmNsdWRlL2MrKy8zLjUtdHJlZS1zc2EvYml0cy9zdGxfbWFwLmgiIDMKICAg IHZvaWQKICAgIGVyYXNlKGl0ZXJhdG9yIF9fZmlyc3QsIGl0ZXJhdG9yIF9fbGFzdCkgeyBfTV90 LmVyYXNlKF9fZmlyc3QsIF9fbGFzdCk7IH0KIyA0MjkgIi9ub3RuZnMvZmNoZS9CVUlMRC1nY2Mt bXVkZmxhcC9JTlNUL2luY2x1ZGUvYysrLzMuNS10cmVlLXNzYS9iaXRzL3N0bF9tYXAuaCIgMwog ICAgdm9pZAogICAgc3dhcChtYXAmIF9feCkgeyBfTV90LnN3YXAoX194Ll9NX3QpOyB9CgoKCgoK CgogICAgdm9pZAogICAgY2xlYXIoKSB7IF9NX3QuY2xlYXIoKTsgfQoKCgoKCiAgICBrZXlfY29t cGFyZQogICAga2V5X2NvbXAoKSBjb25zdCB7IHJldHVybiBfTV90LmtleV9jb21wKCk7IH0KCgoK CgogICAgdmFsdWVfY29tcGFyZQogICAgdmFsdWVfY29tcCgpIGNvbnN0IHsgcmV0dXJuIHZhbHVl X2NvbXBhcmUoX01fdC5rZXlfY29tcCgpKTsgfQojIDQ2NyAiL25vdG5mcy9mY2hlL0JVSUxELWdj Yy1tdWRmbGFwL0lOU1QvaW5jbHVkZS9jKysvMy41LXRyZWUtc3NhL2JpdHMvc3RsX21hcC5oIiAz CiAgICBpdGVyYXRvcgogICAgZmluZChjb25zdCBrZXlfdHlwZSYgX194KSB7IHJldHVybiBfTV90 LmZpbmQoX194KTsgfQojIDQ4MSAiL25vdG5mcy9mY2hlL0JVSUxELWdjYy1tdWRmbGFwL0lOU1Qv aW5jbHVkZS9jKysvMy41LXRyZWUtc3NhL2JpdHMvc3RsX21hcC5oIiAzCiAgICBjb25zdF9pdGVy YXRvcgogICAgZmluZChjb25zdCBrZXlfdHlwZSYgX194KSBjb25zdCB7IHJldHVybiBfTV90LmZp bmQoX194KTsgfQojIDQ5MiAiL25vdG5mcy9mY2hlL0JVSUxELWdjYy1tdWRmbGFwL0lOU1QvaW5j bHVkZS9jKysvMy41LXRyZWUtc3NhL2JpdHMvc3RsX21hcC5oIiAzCiAgICBzaXplX3R5cGUKICAg IGNvdW50KGNvbnN0IGtleV90eXBlJiBfX3gpIGNvbnN0CiAgICB7IHJldHVybiBfTV90LmZpbmQo X194KSA9PSBfTV90LmVuZCgpID8gMCA6IDE7IH0KIyA1MDcgIi9ub3RuZnMvZmNoZS9CVUlMRC1n Y2MtbXVkZmxhcC9JTlNUL2luY2x1ZGUvYysrLzMuNS10cmVlLXNzYS9iaXRzL3N0bF9tYXAuaCIg MwogICAgaXRlcmF0b3IKICAgIGxvd2VyX2JvdW5kKGNvbnN0IGtleV90eXBlJiBfX3gpIHsgcmV0 dXJuIF9NX3QubG93ZXJfYm91bmQoX194KTsgfQojIDUyMSAiL25vdG5mcy9mY2hlL0JVSUxELWdj Yy1tdWRmbGFwL0lOU1QvaW5jbHVkZS9jKysvMy41LXRyZWUtc3NhL2JpdHMvc3RsX21hcC5oIiAz CiAgICBjb25zdF9pdGVyYXRvcgogICAgbG93ZXJfYm91bmQoY29uc3Qga2V5X3R5cGUmIF9feCkg Y29uc3QgeyByZXR1cm4gX01fdC5sb3dlcl9ib3VuZChfX3gpOyB9CiMgNTMxICIvbm90bmZzL2Zj aGUvQlVJTEQtZ2NjLW11ZGZsYXAvSU5TVC9pbmNsdWRlL2MrKy8zLjUtdHJlZS1zc2EvYml0cy9z dGxfbWFwLmgiIDMKICAgIGl0ZXJhdG9yCiAgICB1cHBlcl9ib3VuZChjb25zdCBrZXlfdHlwZSYg X194KSB7IHJldHVybiBfTV90LnVwcGVyX2JvdW5kKF9feCk7IH0KIyA1NDIgIi9ub3RuZnMvZmNo ZS9CVUlMRC1nY2MtbXVkZmxhcC9JTlNUL2luY2x1ZGUvYysrLzMuNS10cmVlLXNzYS9iaXRzL3N0 bF9tYXAuaCIgMwogICAgY29uc3RfaXRlcmF0b3IKICAgIHVwcGVyX2JvdW5kKGNvbnN0IGtleV90 eXBlJiBfX3gpIGNvbnN0CiAgICB7IHJldHVybiBfTV90LnVwcGVyX2JvdW5kKF9feCk7IH0KIyA1 NjEgIi9ub3RuZnMvZmNoZS9CVUlMRC1nY2MtbXVkZmxhcC9JTlNUL2luY2x1ZGUvYysrLzMuNS10 cmVlLXNzYS9iaXRzL3N0bF9tYXAuaCIgMwogICAgcGFpcjxpdGVyYXRvcixpdGVyYXRvcj4KICAg IGVxdWFsX3JhbmdlKGNvbnN0IGtleV90eXBlJiBfX3gpCiAgICB7IHJldHVybiBfTV90LmVxdWFs X3JhbmdlKF9feCk7IH0KIyA1ODAgIi9ub3RuZnMvZmNoZS9CVUlMRC1nY2MtbXVkZmxhcC9JTlNU L2luY2x1ZGUvYysrLzMuNS10cmVlLXNzYS9iaXRzL3N0bF9tYXAuaCIgMwogICAgcGFpcjxjb25z dF9pdGVyYXRvcixjb25zdF9pdGVyYXRvcj4KICAgIGVxdWFsX3JhbmdlKGNvbnN0IGtleV90eXBl JiBfX3gpIGNvbnN0CiAgICB7IHJldHVybiBfTV90LmVxdWFsX3JhbmdlKF9feCk7IH0KCiAgICB0 ZW1wbGF0ZSA8dHlwZW5hbWUgX0sxLCB0eXBlbmFtZSBfVDEsIHR5cGVuYW1lIF9DMSwgdHlwZW5h bWUgX0ExPgogICAgZnJpZW5kIGJvb2wgb3BlcmF0b3I9PSAoY29uc3QgbWFwPF9LMSxfVDEsX0Mx LF9BMT4mLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWFwPF9LMSxfVDEsX0Mx LF9BMT4mKTsKICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBfSzEsIHR5cGVuYW1lIF9UMSwgdHlwZW5h bWUgX0MxLCB0eXBlbmFtZSBfQTE+CiAgICBmcmllbmQgYm9vbCBvcGVyYXRvcjwgKGNvbnN0IG1h cDxfSzEsX1QxLF9DMSxfQTE+JiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWFw PF9LMSxfVDEsX0MxLF9BMT4mKTsKICB9OwojIDYwMyAiL25vdG5mcy9mY2hlL0JVSUxELWdjYy1t dWRmbGFwL0lOU1QvaW5jbHVkZS9jKysvMy41LXRyZWUtc3NhL2JpdHMvc3RsX21hcC5oIiAzCiAg dGVtcGxhdGUgPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0NvbXBhcmUs IHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj09KGNvbnN0IG1h cDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3gsCiAgICAgICAgICAgICAgIGNvbnN0IG1h cDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpCiAgICB7IHJldHVybiBfX3guX01fdCA9 PSBfX3kuX01fdDsgfQojIDYyMCAiL25vdG5mcy9mY2hlL0JVSUxELWdjYy1tdWRmbGFwL0lOU1Qv aW5jbHVkZS9jKysvMy41LXRyZWUtc3NhL2JpdHMvc3RsX21hcC5oIiAzCiAgdGVtcGxhdGUgPHR5 cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9B bGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcjwoY29uc3QgbWFwPF9LZXksX1RwLF9D b21wYXJlLF9BbGxvYz4mIF9feCwKICAgICAgICAgICAgICBjb25zdCBtYXA8X0tleSxfVHAsX0Nv bXBhcmUsX0FsbG9jPiYgX195KQogICAgeyByZXR1cm4gX194Ll9NX3QgPCBfX3kuX01fdDsgfQoK CiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0NvbXBh cmUsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvciE9KGNvbnN0 IG1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3gsCiAgICAgICAgICAgICAgIGNvbnN0 IG1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpCiAgICB7IHJldHVybiAhKF9feCA9 PSBfX3kpOyB9CgoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1RwLCB0eXBl bmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJh dG9yPihjb25zdCBtYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAgICAgICAg ICAgIGNvbnN0IG1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpCiAgICB7IHJldHVy biBfX3kgPCBfX3g7IH0KCgogIHRlbXBsYXRlIDx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVHAs IHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAg b3BlcmF0b3I8PShjb25zdCBtYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAg ICAgICAgICAgICBjb25zdCBtYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX195KQogICAg eyByZXR1cm4gIShfX3kgPCBfX3gpOyB9CgoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0tleSwgdHlw ZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5l IGJvb2wKICAgIG9wZXJhdG9yPj0oY29uc3QgbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4m IF9feCwKICAgICAgICAgICAgICAgY29uc3QgbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4m IF9feSkKICAgIHsgcmV0dXJuICEoX194IDwgX195KTsgfQoKCiAgdGVtcGxhdGUgPHR5cGVuYW1l IF9LZXksIHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4K ICAgIGlubGluZSB2b2lkCiAgICBzd2FwKG1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBf X3gsIG1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpCiAgICB7IF9feC5zd2FwKF9f eSk7IH0KfQojIDY4ICIvbm90bmZzL2ZjaGUvQlVJTEQtZ2NjLW11ZGZsYXAvSU5TVC9pbmNsdWRl L2MrKy8zLjUtdHJlZS1zc2EvbWFwIiAyIDMKIyAxICIvbm90bmZzL2ZjaGUvQlVJTEQtZ2NjLW11 ZGZsYXAvSU5TVC9pbmNsdWRlL2MrKy8zLjUtdHJlZS1zc2EvYml0cy9zdGxfbXVsdGltYXAuaCIg MSAzCiMgNjYgIi9ub3RuZnMvZmNoZS9CVUlMRC1nY2MtbXVkZmxhcC9JTlNUL2luY2x1ZGUvYysr LzMuNS10cmVlLXNzYS9iaXRzL3N0bF9tdWx0aW1hcC5oIiAzCm5hbWVzcGFjZSBzdGQKewoKCiAg dGVtcGxhdGUgPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9UcCwKICAgICAgICAgICAgdHlwZW5h bWUgX0NvbXBhcmUgPSBsZXNzPF9LZXk+LAogICAgICAgICAgICB0eXBlbmFtZSBfQWxsb2MgPSBh bGxvY2F0b3I8cGFpcjxjb25zdCBfS2V5LCBfVHA+ID4gPgogIGNsYXNzIG11bHRpbWFwOwoKICB0 ZW1wbGF0ZSA8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ29tcGFyZSwg dHlwZW5hbWUgX0FsbG9jPgogIGlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgbXVsdGltYXA8 X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAgICAgICAgICAgICAgICAgICAgICAg Y29uc3QgbXVsdGltYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX195KTsKCiAgdGVtcGxh dGUgPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVu YW1lIF9BbGxvYz4KICBpbmxpbmUgYm9vbCBvcGVyYXRvcjwoY29uc3QgbXVsdGltYXA8X0tleSxf VHAsX0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBt dWx0aW1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpOwojIDEwNCAiL25vdG5mcy9m Y2hlL0JVSUxELWdjYy1tdWRmbGFwL0lOU1QvaW5jbHVkZS9jKysvMy41LXRyZWUtc3NhL2JpdHMv c3RsX211bHRpbWFwLmgiIDMKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1Rw LCB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jPgogICAgY2xhc3MgbXVsdGltYXAK ICB7CgogICAKICAgCgogIHB1YmxpYzoKICAgIHR5cGVkZWYgX0tleSBrZXlfdHlwZTsKICAgIHR5 cGVkZWYgX1RwIG1hcHBlZF90eXBlOwogICAgdHlwZWRlZiBwYWlyPGNvbnN0IF9LZXksIF9UcD4g dmFsdWVfdHlwZTsKICAgIHR5cGVkZWYgX0NvbXBhcmUga2V5X2NvbXBhcmU7CgogICAgY2xhc3Mg dmFsdWVfY29tcGFyZQogICAgICA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248dmFsdWVfdHlwZSwg dmFsdWVfdHlwZSwgYm9vbD4KICAgICAgewogICAgICAgIGZyaWVuZCBjbGFzcyBtdWx0aW1hcDxf S2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+OwogICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgX0NvbXBh cmUgY29tcDsKICAgICAgICB2YWx1ZV9jb21wYXJlKF9Db21wYXJlIF9fYykgOiBjb21wKF9fYykg e30KICAgICAgcHVibGljOgogICAgICAgIGJvb2wgb3BlcmF0b3IoKShjb25zdCB2YWx1ZV90eXBl JiBfX3gsIGNvbnN0IHZhbHVlX3R5cGUmIF9feSkgY29uc3QKICAgICAgICB7IHJldHVybiBjb21w KF9feC5maXJzdCwgX195LmZpcnN0KTsgfQogICAgfTsKCiAgcHJpdmF0ZToKCiAgICB0eXBlZGVm IF9SYl90cmVlPGtleV90eXBlLCB2YWx1ZV90eXBlLAogICAgICAgICAgICAgICAgICAgIF9TZWxl Y3Qxc3Q8dmFsdWVfdHlwZT4sIGtleV9jb21wYXJlLCBfQWxsb2M+IF9SZXBfdHlwZTsKCiAgICBf UmVwX3R5cGUgX01fdDsKCiAgcHVibGljOgoKCiAgICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlw ZTo6YWxsb2NhdG9yX3R5cGUgYWxsb2NhdG9yX3R5cGU7CiAgICB0eXBlZGVmIHR5cGVuYW1lIF9S ZXBfdHlwZTo6cmVmZXJlbmNlIHJlZmVyZW5jZTsKICAgIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90 eXBlOjpjb25zdF9yZWZlcmVuY2UgY29uc3RfcmVmZXJlbmNlOwogICAgdHlwZWRlZiB0eXBlbmFt ZSBfUmVwX3R5cGU6Oml0ZXJhdG9yIGl0ZXJhdG9yOwogICAgdHlwZWRlZiB0eXBlbmFtZSBfUmVw X3R5cGU6OmNvbnN0X2l0ZXJhdG9yIGNvbnN0X2l0ZXJhdG9yOwogICAgdHlwZWRlZiB0eXBlbmFt ZSBfUmVwX3R5cGU6OnNpemVfdHlwZSBzaXplX3R5cGU7CiAgICB0eXBlZGVmIHR5cGVuYW1lIF9S ZXBfdHlwZTo6ZGlmZmVyZW5jZV90eXBlIGRpZmZlcmVuY2VfdHlwZTsKICAgIHR5cGVkZWYgdHlw ZW5hbWUgX1JlcF90eXBlOjpwb2ludGVyIHBvaW50ZXI7CiAgICB0eXBlZGVmIHR5cGVuYW1lIF9S ZXBfdHlwZTo6Y29uc3RfcG9pbnRlciBjb25zdF9wb2ludGVyOwogICAgdHlwZWRlZiB0eXBlbmFt ZSBfUmVwX3R5cGU6OnJldmVyc2VfaXRlcmF0b3IgcmV2ZXJzZV9pdGVyYXRvcjsKICAgIHR5cGVk ZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIGNvbnN0X3JldmVy c2VfaXRlcmF0b3I7CgoKCgoKCgogICAgbXVsdGltYXAoKSA6IF9NX3QoX0NvbXBhcmUoKSwgYWxs b2NhdG9yX3R5cGUoKSkgeyB9CgoKCgoKICAgIGV4cGxpY2l0CiAgICBtdWx0aW1hcChjb25zdCBf Q29tcGFyZSYgX19jb21wLCBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5 cGUoKSkKICAgICAgOiBfTV90KF9fY29tcCwgX19hKSB7IH0KIyAxNzQgIi9ub3RuZnMvZmNoZS9C VUlMRC1nY2MtbXVkZmxhcC9JTlNUL2luY2x1ZGUvYysrLzMuNS10cmVlLXNzYS9iaXRzL3N0bF9t dWx0aW1hcC5oIiAzCiAgICBtdWx0aW1hcChjb25zdCBtdWx0aW1hcCYgX194KQogICAgICA6IF9N X3QoX194Ll9NX3QpIHsgfQojIDE4NiAiL25vdG5mcy9mY2hlL0JVSUxELWdjYy1tdWRmbGFwL0lO U1QvaW5jbHVkZS9jKysvMy41LXRyZWUtc3NhL2JpdHMvc3RsX211bHRpbWFwLmgiIDMKICAgIHRl bXBsYXRlIDx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcj4KICAgICAgbXVsdGltYXAoX0lucHV0SXRl cmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KQogICAgICAgIDogX01fdChfQ29t cGFyZSgpLCBhbGxvY2F0b3JfdHlwZSgpKQogICAgICAgIHsgX01fdC5pbnNlcnRfZXF1YWwoX19m aXJzdCwgX19sYXN0KTsgfQojIDIwMiAiL25vdG5mcy9mY2hlL0JVSUxELWdjYy1tdWRmbGFwL0lO U1QvaW5jbHVkZS9jKysvMy41LXRyZWUtc3NhL2JpdHMvc3RsX211bHRpbWFwLmgiIDMKICAgIHRl bXBsYXRlIDx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcj4KICAgICAgbXVsdGltYXAoX0lucHV0SXRl cmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICBjb25z dCBfQ29tcGFyZSYgX19jb21wLAogICAgICAgICAgICAgICBjb25zdCBhbGxvY2F0b3JfdHlwZSYg X19hID0gYWxsb2NhdG9yX3R5cGUoKSkKICAgICAgICA6IF9NX3QoX19jb21wLCBfX2EpCiAgICAg ICAgeyBfTV90Lmluc2VydF9lcXVhbChfX2ZpcnN0LCBfX2xhc3QpOyB9CiMgMjI1ICIvbm90bmZz L2ZjaGUvQlVJTEQtZ2NjLW11ZGZsYXAvSU5TVC9pbmNsdWRlL2MrKy8zLjUtdHJlZS1zc2EvYml0 cy9zdGxfbXVsdGltYXAuaCIgMwogICAgbXVsdGltYXAmCiAgICBvcGVyYXRvcj0oY29uc3QgbXVs dGltYXAmIF9feCkKICAgIHsKICAgICAgX01fdCA9IF9feC5fTV90OwogICAgICByZXR1cm4gKnRo aXM7CiAgICB9CgoKICAgIGFsbG9jYXRvcl90eXBlCiAgICBnZXRfYWxsb2NhdG9yKCkgY29uc3Qg eyByZXR1cm4gX01fdC5nZXRfYWxsb2NhdG9yKCk7IH0KCgoKCgoKICAgIGl0ZXJhdG9yCiAgICBi ZWdpbigpIHsgcmV0dXJuIF9NX3QuYmVnaW4oKTsgfQoKCgoKCgogICAgY29uc3RfaXRlcmF0b3IK ICAgIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gX01fdC5iZWdpbigpOyB9CgoKCgoKICAgIGl0ZXJh dG9yCiAgICBlbmQoKSB7IHJldHVybiBfTV90LmVuZCgpOyB9CgoKCgoKCiAgICBjb25zdF9pdGVy YXRvcgogICAgZW5kKCkgY29uc3QgeyByZXR1cm4gX01fdC5lbmQoKTsgfQoKCgoKCgogICAgcmV2 ZXJzZV9pdGVyYXRvcgogICAgcmJlZ2luKCkgeyByZXR1cm4gX01fdC5yYmVnaW4oKTsgfQoKCgoK CgogICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcgogICAgcmJlZ2luKCkgY29uc3QgeyByZXR1cm4g X01fdC5yYmVnaW4oKTsgfQoKCgoKCgogICAgcmV2ZXJzZV9pdGVyYXRvcgogICAgcmVuZCgpIHsg cmV0dXJuIF9NX3QucmVuZCgpOyB9CgoKCgoKCiAgICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yCiAg ICByZW5kKCkgY29uc3QgeyByZXR1cm4gX01fdC5yZW5kKCk7IH0KCgoKICAgIGJvb2wKICAgIGVt cHR5KCkgY29uc3QgeyByZXR1cm4gX01fdC5lbXB0eSgpOyB9CgoKICAgIHNpemVfdHlwZQogICAg c2l6ZSgpIGNvbnN0IHsgcmV0dXJuIF9NX3Quc2l6ZSgpOyB9CgoKICAgIHNpemVfdHlwZQogICAg bWF4X3NpemUoKSBjb25zdCB7IHJldHVybiBfTV90Lm1heF9zaXplKCk7IH0KIyAzMjUgIi9ub3Ru ZnMvZmNoZS9CVUlMRC1nY2MtbXVkZmxhcC9JTlNUL2luY2x1ZGUvYysrLzMuNS10cmVlLXNzYS9i aXRzL3N0bF9tdWx0aW1hcC5oIiAzCiAgICBpdGVyYXRvcgogICAgaW5zZXJ0KGNvbnN0IHZhbHVl X3R5cGUmIF9feCkgeyByZXR1cm4gX01fdC5pbnNlcnRfZXF1YWwoX194KTsgfQojIDM0OCAiL25v dG5mcy9mY2hlL0JVSUxELWdjYy1tdWRmbGFwL0lOU1QvaW5jbHVkZS9jKysvMy41LXRyZWUtc3Nh L2JpdHMvc3RsX211bHRpbWFwLmgiIDMKICAgIGl0ZXJhdG9yCiAgICBpbnNlcnQoaXRlcmF0b3Ig X19wb3NpdGlvbiwgY29uc3QgdmFsdWVfdHlwZSYgX194KQogICAgeyByZXR1cm4gX01fdC5pbnNl cnRfZXF1YWwoX19wb3NpdGlvbiwgX194KTsgfQojIDM2MCAiL25vdG5mcy9mY2hlL0JVSUxELWdj Yy1tdWRmbGFwL0lOU1QvaW5jbHVkZS9jKysvMy41LXRyZWUtc3NhL2JpdHMvc3RsX211bHRpbWFw LmgiIDMKICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcj4KICAgICAgdm9pZAog ICAgICBpbnNlcnQoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0 KQogICAgICB7IF9NX3QuaW5zZXJ0X2VxdWFsKF9fZmlyc3QsIF9fbGFzdCk7IH0KIyAzNzQgIi9u b3RuZnMvZmNoZS9CVUlMRC1nY2MtbXVkZmxhcC9JTlNUL2luY2x1ZGUvYysrLzMuNS10cmVlLXNz YS9iaXRzL3N0bF9tdWx0aW1hcC5oIiAzCiAgICB2b2lkCiAgICBlcmFzZShpdGVyYXRvciBfX3Bv c2l0aW9uKSB7IF9NX3QuZXJhc2UoX19wb3NpdGlvbik7IH0KIyAzODggIi9ub3RuZnMvZmNoZS9C VUlMRC1nY2MtbXVkZmxhcC9JTlNUL2luY2x1ZGUvYysrLzMuNS10cmVlLXNzYS9iaXRzL3N0bF9t dWx0aW1hcC5oIiAzCiAgICBzaXplX3R5cGUKICAgIGVyYXNlKGNvbnN0IGtleV90eXBlJiBfX3gp IHsgcmV0dXJuIF9NX3QuZXJhc2UoX194KTsgfQojIDQwMSAiL25vdG5mcy9mY2hlL0JVSUxELWdj Yy1tdWRmbGFwL0lOU1QvaW5jbHVkZS9jKysvMy41LXRyZWUtc3NhL2JpdHMvc3RsX211bHRpbWFw LmgiIDMKICAgIHZvaWQKICAgIGVyYXNlKGl0ZXJhdG9yIF9fZmlyc3QsIGl0ZXJhdG9yIF9fbGFz dCkgeyBfTV90LmVyYXNlKF9fZmlyc3QsIF9fbGFzdCk7IH0KIyA0MTUgIi9ub3RuZnMvZmNoZS9C VUlMRC1nY2MtbXVkZmxhcC9JTlNUL2luY2x1ZGUvYysrLzMuNS10cmVlLXNzYS9iaXRzL3N0bF9t dWx0aW1hcC5oIiAzCiAgICB2b2lkCiAgICBzd2FwKG11bHRpbWFwJiBfX3gpIHsgX01fdC5zd2Fw KF9feC5fTV90KTsgfQoKCgoKCgoKICAgIHZvaWQKICAgIGNsZWFyKCkgeyBfTV90LmNsZWFyKCk7 IH0KCgoKCgoKICAgIGtleV9jb21wYXJlCiAgICBrZXlfY29tcCgpIGNvbnN0IHsgcmV0dXJuIF9N X3Qua2V5X2NvbXAoKTsgfQoKCgoKCiAgICB2YWx1ZV9jb21wYXJlCiAgICB2YWx1ZV9jb21wKCkg Y29uc3QgeyByZXR1cm4gdmFsdWVfY29tcGFyZShfTV90LmtleV9jb21wKCkpOyB9CiMgNDU0ICIv bm90bmZzL2ZjaGUvQlVJTEQtZ2NjLW11ZGZsYXAvSU5TVC9pbmNsdWRlL2MrKy8zLjUtdHJlZS1z c2EvYml0cy9zdGxfbXVsdGltYXAuaCIgMwogICAgaXRlcmF0b3IKICAgIGZpbmQoY29uc3Qga2V5 X3R5cGUmIF9feCkgeyByZXR1cm4gX01fdC5maW5kKF9feCk7IH0KIyA0NjggIi9ub3RuZnMvZmNo ZS9CVUlMRC1nY2MtbXVkZmxhcC9JTlNUL2luY2x1ZGUvYysrLzMuNS10cmVlLXNzYS9iaXRzL3N0 bF9tdWx0aW1hcC5oIiAzCiAgICBjb25zdF9pdGVyYXRvcgogICAgZmluZChjb25zdCBrZXlfdHlw ZSYgX194KSBjb25zdCB7IHJldHVybiBfTV90LmZpbmQoX194KTsgfQoKCgoKCgogICAgc2l6ZV90 eXBlCiAgICBjb3VudChjb25zdCBrZXlfdHlwZSYgX194KSBjb25zdCB7IHJldHVybiBfTV90LmNv dW50KF9feCk7IH0KIyA0OTAgIi9ub3RuZnMvZmNoZS9CVUlMRC1nY2MtbXVkZmxhcC9JTlNUL2lu Y2x1ZGUvYysrLzMuNS10cmVlLXNzYS9iaXRzL3N0bF9tdWx0aW1hcC5oIiAzCiAgICBpdGVyYXRv cgogICAgbG93ZXJfYm91bmQoY29uc3Qga2V5X3R5cGUmIF9feCkgeyByZXR1cm4gX01fdC5sb3dl cl9ib3VuZChfX3gpOyB9CiMgNTA0ICIvbm90bmZzL2ZjaGUvQlVJTEQtZ2NjLW11ZGZsYXAvSU5T VC9pbmNsdWRlL2MrKy8zLjUtdHJlZS1zc2EvYml0cy9zdGxfbXVsdGltYXAuaCIgMwogICAgY29u c3RfaXRlcmF0b3IKICAgIGxvd2VyX2JvdW5kKGNvbnN0IGtleV90eXBlJiBfX3gpIGNvbnN0IHsg cmV0dXJuIF9NX3QubG93ZXJfYm91bmQoX194KTsgfQoKCgoKCgogICAgaXRlcmF0b3IKICAgIHVw cGVyX2JvdW5kKGNvbnN0IGtleV90eXBlJiBfX3gpIHsgcmV0dXJuIF9NX3QudXBwZXJfYm91bmQo X194KTsgfQoKCgoKCgoKICAgIGNvbnN0X2l0ZXJhdG9yCiAgICB1cHBlcl9ib3VuZChjb25zdCBr ZXlfdHlwZSYgX194KSBjb25zdCB7IHJldHVybiBfTV90LnVwcGVyX2JvdW5kKF9feCk7IH0KIyA1 MzcgIi9ub3RuZnMvZmNoZS9CVUlMRC1nY2MtbXVkZmxhcC9JTlNUL2luY2x1ZGUvYysrLzMuNS10 cmVlLXNzYS9iaXRzL3N0bF9tdWx0aW1hcC5oIiAzCiAgICBwYWlyPGl0ZXJhdG9yLGl0ZXJhdG9y PgogICAgZXF1YWxfcmFuZ2UoY29uc3Qga2V5X3R5cGUmIF9feCkgeyByZXR1cm4gX01fdC5lcXVh bF9yYW5nZShfX3gpOyB9CiMgNTUzICIvbm90bmZzL2ZjaGUvQlVJTEQtZ2NjLW11ZGZsYXAvSU5T VC9pbmNsdWRlL2MrKy8zLjUtdHJlZS1zc2EvYml0cy9zdGxfbXVsdGltYXAuaCIgMwogICAgcGFp cjxjb25zdF9pdGVyYXRvcixjb25zdF9pdGVyYXRvcj4KICAgIGVxdWFsX3JhbmdlKGNvbnN0IGtl eV90eXBlJiBfX3gpIGNvbnN0IHsgcmV0dXJuIF9NX3QuZXF1YWxfcmFuZ2UoX194KTsgfQoKICAg IHRlbXBsYXRlIDx0eXBlbmFtZSBfSzEsIHR5cGVuYW1lIF9UMSwgdHlwZW5hbWUgX0MxLCB0eXBl bmFtZSBfQTE+CiAgICBmcmllbmQgYm9vbCBvcGVyYXRvcj09IChjb25zdCBtdWx0aW1hcDxfSzEs X1QxLF9DMSxfQTE+JiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG11bHRpbWFw PF9LMSxfVDEsX0MxLF9BMT4mKTsKICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBfSzEsIHR5cGVuYW1l IF9UMSwgdHlwZW5hbWUgX0MxLCB0eXBlbmFtZSBfQTE+CiAgICBmcmllbmQgYm9vbCBvcGVyYXRv cjwgKGNvbnN0IG11bHRpbWFwPF9LMSxfVDEsX0MxLF9BMT4mLAogICAgICAgICAgICAgICAgICAg ICAgICAgICBjb25zdCBtdWx0aW1hcDxfSzEsX1QxLF9DMSxfQTE+Jik7CiAgfTsKIyA1NzUgIi9u b3RuZnMvZmNoZS9CVUlMRC1nY2MtbXVkZmxhcC9JTlNUL2luY2x1ZGUvYysrLzMuNS10cmVlLXNz YS9iaXRzL3N0bF9tdWx0aW1hcC5oIiAzCiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9LZXksIHR5cGVu YW1lIF9UcCwgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBi b29sCiAgICBvcGVyYXRvcj09KGNvbnN0IG11bHRpbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxv Yz4mIF9feCwKICAgICAgICAgICAgICAgY29uc3QgbXVsdGltYXA8X0tleSxfVHAsX0NvbXBhcmUs X0FsbG9jPiYgX195KQogICAgewogICAgICByZXR1cm4gX194Ll9NX3QgPT0gX195Ll9NX3Q7CiAg ICB9CiMgNTk0ICIvbm90bmZzL2ZjaGUvQlVJTEQtZ2NjLW11ZGZsYXAvSU5TVC9pbmNsdWRlL2Mr Ky8zLjUtdHJlZS1zc2EvYml0cy9zdGxfbXVsdGltYXAuaCIgMwogIHRlbXBsYXRlIDx0eXBlbmFt ZSBfS2V5LCB0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+ CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I8KGNvbnN0IG11bHRpbWFwPF9LZXksX1RwLF9D b21wYXJlLF9BbGxvYz4mIF9feCwKICAgICAgICAgICAgICBjb25zdCBtdWx0aW1hcDxfS2V5LF9U cCxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpCiAgICB7IHJldHVybiBfX3guX01fdCA8IF9feS5fTV90 OyB9CgoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBf Q29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yIT0o Y29uc3QgbXVsdGltYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAgICAgICAg ICAgICBjb25zdCBtdWx0aW1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpCiAgICB7 IHJldHVybiAhKF9feCA9PSBfX3kpOyB9CgoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0tleSwgdHlw ZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5l IGJvb2wKICAgIG9wZXJhdG9yPihjb25zdCBtdWx0aW1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxs b2M+JiBfX3gsCiAgICAgICAgICAgICAgY29uc3QgbXVsdGltYXA8X0tleSxfVHAsX0NvbXBhcmUs X0FsbG9jPiYgX195KQogICAgeyByZXR1cm4gX195IDwgX194OyB9CgoKICB0ZW1wbGF0ZSA8dHlw ZW5hbWUgX0tleSwgdHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0Fs bG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPD0oY29uc3QgbXVsdGltYXA8X0tleSxf VHAsX0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAgICAgICAgICAgICBjb25zdCBtdWx0aW1hcDxf S2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpCiAgICB7IHJldHVybiAhKF9feSA8IF9feCk7 IH0KCgogIHRlbXBsYXRlIDx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9D b21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I+PShj b25zdCBtdWx0aW1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3gsCiAgICAgICAgICAg ICAgIGNvbnN0IG11bHRpbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feSkKICAgIHsg cmV0dXJuICEoX194IDwgX195KTsgfQoKCiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9LZXksIHR5cGVu YW1lIF9UcCwgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSB2 b2lkCiAgICBzd2FwKG11bHRpbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feCwKICAg ICAgICAgbXVsdGltYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX195KQogICAgeyBfX3gu c3dhcChfX3kpOyB9Cn0KIyA2OSAiL25vdG5mcy9mY2hlL0JVSUxELWdjYy1tdWRmbGFwL0lOU1Qv aW5jbHVkZS9jKysvMy41LXRyZWUtc3NhL21hcCIgMiAzCiMgMiAiL2hvbWUvZmNoZS90bXAvZm9v Mi5jYyIgMgoKY2xhc3MgZm9vIHsKICBzdGF0aWMgc3RkOjptYXA8aW50LGludD4gYmFyOwp9Owpz dGQ6Om1hcDxpbnQsaW50PiBmb286OmJhcjsKCmNsYXNzIGZvbzIgewogIGludCB6OwogIGZvbzIg KCk7Cn07CgoKZm9vMjo6Zm9vMigpIHsKICBmb286OmJhclt6XSA9IDU7Cn0K