From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 31684 invoked by alias); 4 May 2002 10:56:07 -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 31630 invoked by uid 71); 4 May 2002 10:56:03 -0000 Resent-Date: 4 May 2002 10:56:02 -0000 Resent-Message-ID: <20020504105602.31629.qmail@sources.redhat.com> Resent-From: gcc-gnats@gcc.gnu.org (GNATS Filer) Resent-To: nobody@gcc.gnu.org Resent-Cc: gcc-prs@gcc.gnu.org, gcc-bugs@gcc.gnu.org Resent-Reply-To: gcc-gnats@gcc.gnu.org, georg.wild@gmx.de Received:(qmail 31276 invoked by uid 61); 4 May 2002 10:55:36 -0000 Message-Id:<20020504105536.31275.qmail@sources.redhat.com> Date: Sat, 04 May 2002 03:56:00 -0000 From: georg.wild@gmx.de Reply-To: georg.wild@gmx.de To: gcc-gnats@gcc.gnu.org X-Send-Pr-Version:gnatsweb-2.9.3 (1.1.1.1.2.31) Subject: c++/6557: ICE in insn_default_length, at insn-attrtab.c:223 X-SW-Source: 2002-05/txt/msg00112.txt.bz2 List-Id: >Number: 6557 >Category: c++ >Synopsis: ICE in insn_default_length, at insn-attrtab.c:223 >Confidential: no >Severity: serious >Priority: medium >Responsible: unassigned >State: open >Class: sw-bug >Submitter-Id: net >Arrival-Date: Sat May 04 03:56:01 PDT 2002 >Closed-Date: >Last-Modified: >Originator: georg.wild@gmx.de >Release: gcc-3.0.4 >Organization: >Environment: i686-pc-linux-gnu >Description: I get an ICE compiling the attachment in the following manor: > gcc BreakDown.i -lcrypt -ax In file included from BreakDown.c:31: headers/somefuncts.h: In function `addpw': headers/somefuncts.h:9: Unrecognizable insn: (call_insn 63 62 65 (call (mem:QI (symbol_ref ("__bb_trace_ret")) 0) (const_int 0 [0x0])) -1 (nil) (nil) (nil)) headers/somefuncts.h:9: Internal compiler error in insn_default_length, at insn-attrtab.c:223 Please submit a full bug report, with preprocessed source if appropriate. See for instructions. > >How-To-Repeat: gcc BreakDown.i -lcrypt -ax >Fix: >Release-Note: >Audit-Trail: >Unformatted: ----gnatsweb-attachment---- Content-Type: application/octet-stream; name="BreakDown.i" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="BreakDown.i" IyAxMiAiQnJlYWtEb3duLmMiCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL3N0ZGxpYi5oIiAxIDMK IyAyNSAiL3Vzci9sb2NhbC9pbmNsdWRlL3N0ZGxpYi5oIiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNs dWRlL2ZlYXR1cmVzLmgiIDEgMwojIDI4MyAiL3Vzci9sb2NhbC9pbmNsdWRlL2ZlYXR1cmVzLmgi IDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvc3lzL2NkZWZzLmgiIDEgMwojIDI4NCAiL3Vzci9s b2NhbC9pbmNsdWRlL2ZlYXR1cmVzLmgiIDIgMwojIDMxMiAiL3Vzci9sb2NhbC9pbmNsdWRlL2Zl YXR1cmVzLmgiIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZ251L3N0dWJzLmgiIDEgMwojIDMx MyAiL3Vzci9sb2NhbC9pbmNsdWRlL2ZlYXR1cmVzLmgiIDIgMwojIDI2ICIvdXNyL2xvY2FsL2lu Y2x1ZGUvc3RkbGliLmgiIDIgMwoKCgoKCgoKIyAxICIvdXNyL2xvY2FsL2djYy8zLjAuNC9saWIv Z2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAuNC9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAx OTkgIi91c3IvbG9jYWwvZ2NjLzMuMC40L2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMu MC40L2luY2x1ZGUvc3RkZGVmLmgiIDMKdHlwZWRlZiB1bnNpZ25lZCBpbnQgc2l6ZV90OwojIDI4 NyAiL3Vzci9sb2NhbC9nY2MvMy4wLjQvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4w LjQvaW5jbHVkZS9zdGRkZWYuaCIgMwp0eXBlZGVmIGxvbmcgaW50IHdjaGFyX3Q7CiMgMzQgIi91 c3IvbG9jYWwvaW5jbHVkZS9zdGRsaWIuaCIgMiAzCiMgOTQgIi91c3IvbG9jYWwvaW5jbHVkZS9z dGRsaWIuaCIgMwp0eXBlZGVmIHN0cnVjdAogIHsKICAgIGludCBxdW90OwogICAgaW50IHJlbTsK ICB9IGRpdl90OwoKCgp0eXBlZGVmIHN0cnVjdAogIHsKICAgIGxvbmcgaW50IHF1b3Q7CiAgICBs b25nIGludCByZW07CiAgfSBsZGl2X3Q7CiMgMTMzICIvdXNyL2xvY2FsL2luY2x1ZGUvc3RkbGli LmgiIDMKZXh0ZXJuIHNpemVfdCBfX2N0eXBlX2dldF9tYl9jdXJfbWF4ICh2b2lkKSA7CgoKCmV4 dGVybiBkb3VibGUgYXRvZiAoX19jb25zdCBjaGFyICpfX25wdHIpIF9fYXR0cmlidXRlX18gKChf X3B1cmVfXykpOwoKZXh0ZXJuIGludCBhdG9pIChfX2NvbnN0IGNoYXIgKl9fbnB0cikgX19hdHRy aWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gbG9uZyBpbnQgYXRvbCAoX19jb25zdCBjaGFy ICpfX25wdHIpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgpfX2V4dGVuc2lvbl9fIGV4 dGVybiBsb25nIGxvbmcgaW50IGF0b2xsIChfX2NvbnN0IGNoYXIgKl9fbnB0cikKICAgICAgICAg ICAgIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgpleHRlcm4gZG91YmxlIHN0cnRvZCAo X19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgIGNo YXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyKSA7CiMgMTYzICIvdXNyL2xvY2FsL2luY2x1ZGUvc3Rk bGliLmgiIDMKZXh0ZXJuIGxvbmcgaW50IHN0cnRvbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0 IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRw dHIsIGludCBfX2Jhc2UpIDsKCmV4dGVybiB1bnNpZ25lZCBsb25nIGludCBzdHJ0b3VsIChfX2Nv bnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpCiAgICAgICAgICAg IDsKCgoKX19leHRlbnNpb25fXwpleHRlcm4gbG9uZyBsb25nIGludCBzdHJ0b3EgKF9fY29uc3Qg Y2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hh ciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpIDsKCl9fZXh0ZW5zaW9uX18KZXh0 ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgc3RydG91cSAoX19jb25zdCBjaGFyICpfX3Jlc3Ry aWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAq Kl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpCiAgICAgICAgICAgIDsKCgoKCgoKX19l eHRlbnNpb25fXwpleHRlcm4gbG9uZyBsb25nIGludCBzdHJ0b2xsIChfX2NvbnN0IGNoYXIgKl9f cmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19y ZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkgOwoKX19leHRlbnNpb25fXwpleHRlcm4gdW5z aWduZWQgbG9uZyBsb25nIGludCBzdHJ0b3VsbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9f bnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jl c3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKQogICAgICAgICAgICA7CiMgMjUwICIvdXNyL2xv Y2FsL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIGRvdWJsZSBfX3N0cnRvZF9pbnRlcm5hbCAo X19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2dyb3VwKQogICAgICAg ICAgICA7CmV4dGVybiBmbG9hdCBfX3N0cnRvZl9pbnRlcm5hbCAoX19jb25zdCBjaGFyICpfX3Jl c3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19y ZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fZ3JvdXApCiAgICAgICAgICAgIDsKZXh0ZXJuIGxvbmcg ZG91YmxlIF9fc3RydG9sZF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0 ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJp Y3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBf X2dyb3VwKSA7CgpleHRlcm4gbG9uZyBpbnQgX19zdHJ0b2xfaW50ZXJuYWwgKF9fY29uc3QgY2hh ciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Y2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgaW50IF9fYmFzZSwgaW50IF9fZ3JvdXApIDsKCgoKZXh0ZXJuIHVuc2lnbmVkIGxvbmcg aW50IF9fc3RydG91bF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVz dHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGludCBfX2Jhc2UsIGludCBfX2dyb3VwKSA7CgoKCgpfX2V4dGVuc2lvbl9fCmV4dGVybiBs b25nIGxvbmcgaW50IF9fc3RydG9sbF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0 IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoq X19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBpbnQgX19iYXNlLCBpbnQgX19ncm91cCkgOwoKCgpfX2V4dGVuc2lvbl9fCmV4dGVybiB1 bnNpZ25lZCBsb25nIGxvbmcgaW50IF9fc3RydG91bGxfaW50ZXJuYWwgKF9fY29uc3QgY2hhciAq CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcmVz dHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYmFzZSwgaW50IF9fZ3JvdXApCiAg ICAgICAgICAgIDsKCgoKCgoKCmV4dGVybiBfX2lubGluZSBkb3VibGUKc3RydG9kIChfX2NvbnN0 IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLCBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0cikKewog IHJldHVybiBfX3N0cnRvZF9pbnRlcm5hbCAoX19ucHRyLCBfX2VuZHB0ciwgMCk7Cn0KZXh0ZXJu IF9faW5saW5lIGxvbmcgaW50CnN0cnRvbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0 ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgaW50IF9fYmFzZSkKewogIHJl dHVybiBfX3N0cnRvbF9pbnRlcm5hbCAoX19ucHRyLCBfX2VuZHB0ciwgX19iYXNlLCAwKTsKfQpl eHRlcm4gX19pbmxpbmUgdW5zaWduZWQgbG9uZyBpbnQKc3RydG91bCAoX19jb25zdCBjaGFyICpf X3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgIGlu dCBfX2Jhc2UpCnsKICByZXR1cm4gX19zdHJ0b3VsX2ludGVybmFsIChfX25wdHIsIF9fZW5kcHRy LCBfX2Jhc2UsIDApOwp9CiMgMzI1ICIvdXNyL2xvY2FsL2luY2x1ZGUvc3RkbGliLmgiIDMKX19l eHRlbnNpb25fXyBleHRlcm4gX19pbmxpbmUgbG9uZyBsb25nIGludApzdHJ0b3EgKF9fY29uc3Qg Y2hhciAqX19yZXN0cmljdCBfX25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAg ICAgIGludCBfX2Jhc2UpCnsKICByZXR1cm4gX19zdHJ0b2xsX2ludGVybmFsIChfX25wdHIsIF9f ZW5kcHRyLCBfX2Jhc2UsIDApOwp9Cl9fZXh0ZW5zaW9uX18gZXh0ZXJuIF9faW5saW5lIHVuc2ln bmVkIGxvbmcgbG9uZyBpbnQKc3RydG91cSAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0 ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgIGludCBfX2Jhc2UpCnsKICBy ZXR1cm4gX19zdHJ0b3VsbF9pbnRlcm5hbCAoX19ucHRyLCBfX2VuZHB0ciwgX19iYXNlLCAwKTsK fQoKCgpfX2V4dGVuc2lvbl9fIGV4dGVybiBfX2lubGluZSBsb25nIGxvbmcgaW50CnN0cnRvbGwg KF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5k cHRyLAogICAgICAgICBpbnQgX19iYXNlKQp7CiAgcmV0dXJuIF9fc3RydG9sbF9pbnRlcm5hbCAo X19ucHRyLCBfX2VuZHB0ciwgX19iYXNlLCAwKTsKfQpfX2V4dGVuc2lvbl9fIGV4dGVybiBfX2lu bGluZSB1bnNpZ25lZCBsb25nIGxvbmcgaW50CnN0cnRvdWxsIChfX2NvbnN0IGNoYXIgKiBfX3Jl c3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICBpbnQg X19iYXNlKQp7CiAgcmV0dXJuIF9fc3RydG91bGxfaW50ZXJuYWwgKF9fbnB0ciwgX19lbmRwdHIs IF9fYmFzZSwgMCk7Cn0KCgpleHRlcm4gX19pbmxpbmUgZG91YmxlCmF0b2YgKF9fY29uc3QgY2hh ciAqX19ucHRyKQp7CiAgcmV0dXJuIHN0cnRvZCAoX19ucHRyLCAoY2hhciAqKikgKCh2b2lkICop MCkpOwp9CmV4dGVybiBfX2lubGluZSBpbnQKYXRvaSAoX19jb25zdCBjaGFyICpfX25wdHIpCnsK ICByZXR1cm4gKGludCkgc3RydG9sIChfX25wdHIsIChjaGFyICoqKSAoKHZvaWQgKikwKSwgMTAp Owp9CmV4dGVybiBfX2lubGluZSBsb25nIGludAphdG9sIChfX2NvbnN0IGNoYXIgKl9fbnB0cikK ewogIHJldHVybiBzdHJ0b2wgKF9fbnB0ciwgKGNoYXIgKiopICgodm9pZCAqKTApLCAxMCk7Cn0K CgpfX2V4dGVuc2lvbl9fIGV4dGVybiBfX2lubGluZSBsb25nIGxvbmcgaW50CmF0b2xsIChfX2Nv bnN0IGNoYXIgKl9fbnB0cikKewogIHJldHVybiBzdHJ0b2xsIChfX25wdHIsIChjaGFyICoqKSAo KHZvaWQgKikwKSwgMTApOwp9CiMgMzg0ICIvdXNyL2xvY2FsL2luY2x1ZGUvc3RkbGliLmgiIDMK ZXh0ZXJuIGNoYXIgKmw2NGEgKGxvbmcgaW50IF9fbikgOwoKCmV4dGVybiBsb25nIGludCBhNjRs IChfX2NvbnN0IGNoYXIgKl9fcykgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKIyAxICIv dXNyL2xvY2FsL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDEgMwojIDI2ICIvdXNyL2xvY2FsL2luY2x1 ZGUvc3lzL3R5cGVzLmgiIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAz CiMgMjcgIi91c3IvbG9jYWwvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMiAzCgoKCiMgMSAiL3Vzci9s b2NhbC9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMSAzCiMgMjYgIi91c3IvbG9jYWwvaW5jbHVkZS9i aXRzL3R5cGVzLmgiIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMg MjcgIi91c3IvbG9jYWwvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDIgMwoKCiMgMSAiL3Vzci9sb2Nh bC9nY2MvMy4wLjQvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wLjQvaW5jbHVkZS9z dGRkZWYuaCIgMSAzCiMgMzAgIi91c3IvbG9jYWwvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDIgMwoK CnR5cGVkZWYgdW5zaWduZWQgY2hhciBfX3VfY2hhcjsKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBf X3Vfc2hvcnQ7CnR5cGVkZWYgdW5zaWduZWQgaW50IF9fdV9pbnQ7CnR5cGVkZWYgdW5zaWduZWQg bG9uZyBfX3VfbG9uZzsKCl9fZXh0ZW5zaW9uX18gdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcg aW50IF9fdV9xdWFkX3Q7Cl9fZXh0ZW5zaW9uX18gdHlwZWRlZiBsb25nIGxvbmcgaW50IF9fcXVh ZF90OwojIDQ5ICIvdXNyL2xvY2FsL2luY2x1ZGUvYml0cy90eXBlcy5oIiAzCnR5cGVkZWYgc2ln bmVkIGNoYXIgX19pbnQ4X3Q7CnR5cGVkZWYgdW5zaWduZWQgY2hhciBfX3VpbnQ4X3Q7CnR5cGVk ZWYgc2lnbmVkIHNob3J0IGludCBfX2ludDE2X3Q7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50 IF9fdWludDE2X3Q7CnR5cGVkZWYgc2lnbmVkIGludCBfX2ludDMyX3Q7CnR5cGVkZWYgdW5zaWdu ZWQgaW50IF9fdWludDMyX3Q7CgpfX2V4dGVuc2lvbl9fIHR5cGVkZWYgc2lnbmVkIGxvbmcgbG9u ZyBpbnQgX19pbnQ2NF90OwpfX2V4dGVuc2lvbl9fIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25n IGludCBfX3VpbnQ2NF90OwoKdHlwZWRlZiBfX3F1YWRfdCAqX19xYWRkcl90OwoKdHlwZWRlZiBf X3VfcXVhZF90IF9fZGV2X3Q7CnR5cGVkZWYgX191X2ludCBfX3VpZF90Owp0eXBlZGVmIF9fdV9p bnQgX19naWRfdDsKdHlwZWRlZiBfX3VfbG9uZyBfX2lub190Owp0eXBlZGVmIF9fdV9pbnQgX19t b2RlX3Q7CnR5cGVkZWYgX191X2ludCBfX25saW5rX3Q7CnR5cGVkZWYgbG9uZyBpbnQgX19vZmZf dDsKdHlwZWRlZiBfX3F1YWRfdCBfX2xvZmZfdDsKdHlwZWRlZiBpbnQgX19waWRfdDsKdHlwZWRl ZiBpbnQgX19zc2l6ZV90Owp0eXBlZGVmIF9fdV9sb25nIF9fcmxpbV90Owp0eXBlZGVmIF9fdV9x dWFkX3QgX19ybGltNjRfdDsKdHlwZWRlZiBfX3VfaW50IF9faWRfdDsKCnR5cGVkZWYgc3RydWN0 CiAgewogICAgaW50IF9fdmFsWzJdOwogIH0gX19mc2lkX3Q7CgoKdHlwZWRlZiBpbnQgX19kYWRk cl90Owp0eXBlZGVmIGNoYXIgKl9fY2FkZHJfdDsKdHlwZWRlZiBsb25nIGludCBfX3RpbWVfdDsK dHlwZWRlZiB1bnNpZ25lZCBpbnQgX191c2Vjb25kc190Owp0eXBlZGVmIGxvbmcgaW50IF9fc3Vz ZWNvbmRzX3Q7CnR5cGVkZWYgbG9uZyBpbnQgX19zd2Jsa190OwoKdHlwZWRlZiBsb25nIGludCBf X2Nsb2NrX3Q7CgoKdHlwZWRlZiBpbnQgX19jbG9ja2lkX3Q7CgoKdHlwZWRlZiBpbnQgX190aW1l cl90OwoKCgoKCgp0eXBlZGVmIGludCBfX2tleV90OwoKCnR5cGVkZWYgdW5zaWduZWQgc2hvcnQg aW50IF9faXBjX3BpZF90OwoKCgp0eXBlZGVmIGxvbmcgaW50IF9fYmxrc2l6ZV90OwoKCgoKdHlw ZWRlZiBsb25nIGludCBfX2Jsa2NudF90Owp0eXBlZGVmIF9fcXVhZF90IF9fYmxrY250NjRfdDsK Cgp0eXBlZGVmIF9fdV9sb25nIF9fZnNibGtjbnRfdDsKdHlwZWRlZiBfX3VfcXVhZF90IF9fZnNi bGtjbnQ2NF90OwoKCnR5cGVkZWYgX191X2xvbmcgX19mc2ZpbGNudF90Owp0eXBlZGVmIF9fdV9x dWFkX3QgX19mc2ZpbGNudDY0X3Q7CgoKdHlwZWRlZiBfX3VfcXVhZF90IF9faW5vNjRfdDsKCgp0 eXBlZGVmIF9fbG9mZl90IF9fb2ZmNjRfdDsKCgp0eXBlZGVmIGxvbmcgaW50IF9fdF9zY2FsYXJf dDsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCBfX3RfdXNjYWxhcl90OwoKCnR5cGVkZWYgaW50 IF9faW50cHRyX3Q7CgoKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX19zb2NrbGVuX3Q7CgoKCgojIDEg Ii91c3IvbG9jYWwvaW5jbHVkZS9iaXRzL3B0aHJlYWR0eXBlcy5oIiAxIDMKIyAyMyAiL3Vzci9s b2NhbC9pbmNsdWRlL2JpdHMvcHRocmVhZHR5cGVzLmgiIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1 ZGUvYml0cy9zY2hlZC5oIiAxIDMKIyA2OCAiL3Vzci9sb2NhbC9pbmNsdWRlL2JpdHMvc2NoZWQu aCIgMwpzdHJ1Y3QgX19zY2hlZF9wYXJhbQogIHsKICAgIGludCBfX3NjaGVkX3ByaW9yaXR5Owog IH07CiMgMjQgIi91c3IvbG9jYWwvaW5jbHVkZS9iaXRzL3B0aHJlYWR0eXBlcy5oIiAyIDMKCgpz dHJ1Y3QgX3B0aHJlYWRfZmFzdGxvY2sKewogIGxvbmcgaW50IF9fc3RhdHVzOwogIGludCBfX3Nw aW5sb2NrOwoKfTsKCgoKdHlwZWRlZiBzdHJ1Y3QgX3B0aHJlYWRfZGVzY3Jfc3RydWN0ICpfcHRo cmVhZF9kZXNjcjsKCgoKCgp0eXBlZGVmIHN0cnVjdCBfX3B0aHJlYWRfYXR0cl9zCnsKICBpbnQg X19kZXRhY2hzdGF0ZTsKICBpbnQgX19zY2hlZHBvbGljeTsKICBzdHJ1Y3QgX19zY2hlZF9wYXJh bSBfX3NjaGVkcGFyYW07CiAgaW50IF9faW5oZXJpdHNjaGVkOwogIGludCBfX3Njb3BlOwogIHNp emVfdCBfX2d1YXJkc2l6ZTsKICBpbnQgX19zdGFja2FkZHJfc2V0OwogIHZvaWQgKl9fc3RhY2th ZGRyOwogIHNpemVfdCBfX3N0YWNrc2l6ZTsKfSBwdGhyZWFkX2F0dHJfdDsKCgoKdHlwZWRlZiBz dHJ1Y3QKewogIHN0cnVjdCBfcHRocmVhZF9mYXN0bG9jayBfX2NfbG9jazsKICBfcHRocmVhZF9k ZXNjciBfX2Nfd2FpdGluZzsKfSBwdGhyZWFkX2NvbmRfdDsKCgoKdHlwZWRlZiBzdHJ1Y3QKewog IGludCBfX2R1bW15Owp9IHB0aHJlYWRfY29uZGF0dHJfdDsKCgp0eXBlZGVmIHVuc2lnbmVkIGlu dCBwdGhyZWFkX2tleV90OwoKCgoKCnR5cGVkZWYgc3RydWN0CnsKICBpbnQgX19tX3Jlc2VydmVk OwogIGludCBfX21fY291bnQ7CiAgX3B0aHJlYWRfZGVzY3IgX19tX293bmVyOwogIGludCBfX21f a2luZDsKICBzdHJ1Y3QgX3B0aHJlYWRfZmFzdGxvY2sgX19tX2xvY2s7Cn0gcHRocmVhZF9tdXRl eF90OwoKCgp0eXBlZGVmIHN0cnVjdAp7CiAgaW50IF9fbXV0ZXhraW5kOwp9IHB0aHJlYWRfbXV0 ZXhhdHRyX3Q7CgoKCnR5cGVkZWYgaW50IHB0aHJlYWRfb25jZV90OwojIDE0MCAiL3Vzci9sb2Nh bC9pbmNsdWRlL2JpdHMvcHRocmVhZHR5cGVzLmgiIDMKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGlu dCBwdGhyZWFkX3Q7CiMgMTQ0ICIvdXNyL2xvY2FsL2luY2x1ZGUvYml0cy90eXBlcy5oIiAyIDMK IyAzMSAiL3Vzci9sb2NhbC9pbmNsdWRlL3N5cy90eXBlcy5oIiAyIDMKCgoKdHlwZWRlZiBfX3Vf Y2hhciB1X2NoYXI7CnR5cGVkZWYgX191X3Nob3J0IHVfc2hvcnQ7CnR5cGVkZWYgX191X2ludCB1 X2ludDsKdHlwZWRlZiBfX3VfbG9uZyB1X2xvbmc7CnR5cGVkZWYgX19xdWFkX3QgcXVhZF90Owp0 eXBlZGVmIF9fdV9xdWFkX3QgdV9xdWFkX3Q7CnR5cGVkZWYgX19mc2lkX3QgZnNpZF90OwoKCgoK dHlwZWRlZiBfX2xvZmZfdCBsb2ZmX3Q7CgoKCnR5cGVkZWYgX19pbm9fdCBpbm9fdDsKIyA2MSAi L3Vzci9sb2NhbC9pbmNsdWRlL3N5cy90eXBlcy5oIiAzCnR5cGVkZWYgX19kZXZfdCBkZXZfdDsK CgoKCnR5cGVkZWYgX19naWRfdCBnaWRfdDsKCgoKCnR5cGVkZWYgX19tb2RlX3QgbW9kZV90OwoK CgoKdHlwZWRlZiBfX25saW5rX3QgbmxpbmtfdDsKCgoKCnR5cGVkZWYgX191aWRfdCB1aWRfdDsK CgoKCgp0eXBlZGVmIF9fb2ZmX3Qgb2ZmX3Q7CiMgOTkgIi91c3IvbG9jYWwvaW5jbHVkZS9zeXMv dHlwZXMuaCIgMwp0eXBlZGVmIF9fcGlkX3QgcGlkX3Q7CgoKCgp0eXBlZGVmIF9faWRfdCBpZF90 OwoKCgoKdHlwZWRlZiBfX3NzaXplX3Qgc3NpemVfdDsKCgoKCgp0eXBlZGVmIF9fZGFkZHJfdCBk YWRkcl90Owp0eXBlZGVmIF9fY2FkZHJfdCBjYWRkcl90OwoKCgoKCnR5cGVkZWYgX19rZXlfdCBr ZXlfdDsKIyAxMzIgIi91c3IvbG9jYWwvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMwojIDEgIi91c3Iv bG9jYWwvaW5jbHVkZS90aW1lLmgiIDEgMwojIDY3ICIvdXNyL2xvY2FsL2luY2x1ZGUvdGltZS5o IiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMSAzCiMgNjggIi91c3Iv bG9jYWwvaW5jbHVkZS90aW1lLmgiIDIgMwoKCnR5cGVkZWYgX190aW1lX3QgdGltZV90OwojIDc5 ICIvdXNyL2xvY2FsL2luY2x1ZGUvdGltZS5oIiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2Jp dHMvdHlwZXMuaCIgMSAzCiMgODAgIi91c3IvbG9jYWwvaW5jbHVkZS90aW1lLmgiIDIgMwoKCnR5 cGVkZWYgX19jbG9ja2lkX3QgY2xvY2tpZF90OwojIDkxICIvdXNyL2xvY2FsL2luY2x1ZGUvdGlt ZS5oIiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMSAzCiMgOTIgIi91 c3IvbG9jYWwvaW5jbHVkZS90aW1lLmgiIDIgMwoKCnR5cGVkZWYgX190aW1lcl90IHRpbWVyX3Q7 CiMgMTMzICIvdXNyL2xvY2FsL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMwojIDE0NiAiL3Vzci9s b2NhbC9pbmNsdWRlL3N5cy90eXBlcy5oIiAzCiMgMSAiL3Vzci9sb2NhbC9nY2MvMy4wLjQvbGli L2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wLjQvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMg MTQ3ICIvdXNyL2xvY2FsL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMwoKCgp0eXBlZGVmIHVuc2ln bmVkIGxvbmcgaW50IHVsb25nOwp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IGludCB1c2hvcnQ7CnR5 cGVkZWYgdW5zaWduZWQgaW50IHVpbnQ7CiMgMTkwICIvdXNyL2xvY2FsL2luY2x1ZGUvc3lzL3R5 cGVzLmgiIDMKdHlwZWRlZiBpbnQgaW50OF90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19R SV9fKSkpOwp0eXBlZGVmIGludCBpbnQxNl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19I SV9fKSkpOwp0eXBlZGVmIGludCBpbnQzMl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19T SV9fKSkpOwp0eXBlZGVmIGludCBpbnQ2NF90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19E SV9fKSkpOwoKCnR5cGVkZWYgdW5zaWduZWQgaW50IHVfaW50OF90IF9fYXR0cmlidXRlX18gKChf X21vZGVfXyAoX19RSV9fKSkpOwp0eXBlZGVmIHVuc2lnbmVkIGludCB1X2ludDE2X3QgX19hdHRy aWJ1dGVfXyAoKF9fbW9kZV9fIChfX0hJX18pKSk7CnR5cGVkZWYgdW5zaWduZWQgaW50IHVfaW50 MzJfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fU0lfXykpKTsKdHlwZWRlZiB1bnNpZ25l ZCBpbnQgdV9pbnQ2NF90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19ESV9fKSkpOwoKdHlw ZWRlZiBpbnQgcmVnaXN0ZXJfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fd29yZF9fKSkp OwojIDIxMiAiL3Vzci9sb2NhbC9pbmNsdWRlL3N5cy90eXBlcy5oIiAzCiMgMSAiL3Vzci9sb2Nh bC9pbmNsdWRlL2VuZGlhbi5oIiAxIDMKIyAyMiAiL3Vzci9sb2NhbC9pbmNsdWRlL2VuZGlhbi5o IiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2ZlYXR1cmVzLmgiIDEgMwojIDIzICIvdXNyL2xv Y2FsL2luY2x1ZGUvZW5kaWFuLmgiIDIgMwojIDM3ICIvdXNyL2xvY2FsL2luY2x1ZGUvZW5kaWFu LmgiIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvYml0cy9lbmRpYW4uaCIgMSAzCiMgMzggIi91 c3IvbG9jYWwvaW5jbHVkZS9lbmRpYW4uaCIgMiAzCiMgMjEzICIvdXNyL2xvY2FsL2luY2x1ZGUv c3lzL3R5cGVzLmgiIDIgMwoKCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL3N5cy9zZWxlY3QuaCIg MSAzCiMgMjUgIi91c3IvbG9jYWwvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDMKIyAxICIvdXNyL2xv Y2FsL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMjYgIi91c3IvbG9jYWwvaW5jbHVkZS9zeXMv c2VsZWN0LmgiIDIgMwoKCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMSAz CiMgMjkgIi91c3IvbG9jYWwvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDIgMwoKCiMgMSAiL3Vzci9s b2NhbC9pbmNsdWRlL2JpdHMvc2VsZWN0LmgiIDEgMwojIDMyICIvdXNyL2xvY2FsL2luY2x1ZGUv c3lzL3NlbGVjdC5oIiAyIDMKCgojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9iaXRzL3NpZ3NldC5o IiAxIDMKIyAyMyAiL3Vzci9sb2NhbC9pbmNsdWRlL2JpdHMvc2lnc2V0LmgiIDMKdHlwZWRlZiBp bnQgX19zaWdfYXRvbWljX3Q7CgoKCgp0eXBlZGVmIHN0cnVjdAogIHsKICAgIHVuc2lnbmVkIGxv bmcgaW50IF9fdmFsWygxMDI0IC8gKDggKiBzaXplb2YgKHVuc2lnbmVkIGxvbmcgaW50KSkpXTsK ICB9IF9fc2lnc2V0X3Q7CiMgMzUgIi91c3IvbG9jYWwvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDIg MwoKCgp0eXBlZGVmIF9fc2lnc2V0X3Qgc2lnc2V0X3Q7CgoKCgoKIyAxICIvdXNyL2xvY2FsL2lu Y2x1ZGUvdGltZS5oIiAxIDMKIyAxMDYgIi91c3IvbG9jYWwvaW5jbHVkZS90aW1lLmgiIDMKc3Ry dWN0IHRpbWVzcGVjCiAgewogICAgX190aW1lX3QgdHZfc2VjOwogICAgbG9uZyBpbnQgdHZfbnNl YzsKICB9OwojIDQ1ICIvdXNyL2xvY2FsL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAyIDMKCiMgMSAi L3Vzci9sb2NhbC9pbmNsdWRlL2JpdHMvdGltZS5oIiAxIDMKIyA2MyAiL3Vzci9sb2NhbC9pbmNs dWRlL2JpdHMvdGltZS5oIiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2JpdHMvdHlwZXMuaCIg MSAzCiMgNjQgIi91c3IvbG9jYWwvaW5jbHVkZS9iaXRzL3RpbWUuaCIgMiAzCgoKCnN0cnVjdCB0 aW1ldmFsCiAgewogICAgX190aW1lX3QgdHZfc2VjOwogICAgX19zdXNlY29uZHNfdCB0dl91c2Vj OwogIH07CiMgNDcgIi91c3IvbG9jYWwvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDIgMwoKCnR5cGVk ZWYgX19zdXNlY29uZHNfdCBzdXNlY29uZHNfdDsKCgoKCgp0eXBlZGVmIGxvbmcgaW50IF9fZmRf bWFzazsKCgoKCgoKCnR5cGVkZWYgc3RydWN0CiAgewoKCgoKCgogICAgX19mZF9tYXNrIF9fZmRz X2JpdHNbMTAyNCAvICg4ICogc2l6ZW9mIChfX2ZkX21hc2spKV07CgoKICB9IGZkX3NldDsKCgoK CgoKdHlwZWRlZiBfX2ZkX21hc2sgZmRfbWFzazsKIyAxMDIgIi91c3IvbG9jYWwvaW5jbHVkZS9z eXMvc2VsZWN0LmgiIDMKZXh0ZXJuIGludCBzZWxlY3QgKGludCBfX25mZHMsIGZkX3NldCAqX19y ZXN0cmljdCBfX3JlYWRmZHMsCiAgICAgICAgICAgICAgICAgICBmZF9zZXQgKl9fcmVzdHJpY3Qg X193cml0ZWZkcywKICAgICAgICAgICAgICAgICAgIGZkX3NldCAqX19yZXN0cmljdCBfX2V4Y2Vw dGZkcywKICAgICAgICAgICAgICAgICAgIHN0cnVjdCB0aW1ldmFsICpfX3Jlc3RyaWN0IF9fdGlt ZW91dCkgOwojIDIxNiAiL3Vzci9sb2NhbC9pbmNsdWRlL3N5cy90eXBlcy5oIiAyIDMKCgojIDEg Ii91c3IvbG9jYWwvaW5jbHVkZS9zeXMvc3lzbWFjcm9zLmgiIDEgMwojIDIxOSAiL3Vzci9sb2Nh bC9pbmNsdWRlL3N5cy90eXBlcy5oIiAyIDMKIyAyMzAgIi91c3IvbG9jYWwvaW5jbHVkZS9zeXMv dHlwZXMuaCIgMwp0eXBlZGVmIF9fYmxrY250X3QgYmxrY250X3Q7CgoKCnR5cGVkZWYgX19mc2Js a2NudF90IGZzYmxrY250X3Q7CgoKCnR5cGVkZWYgX19mc2ZpbGNudF90IGZzZmlsY250X3Q7CiMg MzkxICIvdXNyL2xvY2FsL2luY2x1ZGUvc3RkbGliLmgiIDIgMwoKCgoKCgpleHRlcm4gbG9uZyBp bnQgcmFuZG9tICh2b2lkKSA7CgoKZXh0ZXJuIHZvaWQgc3JhbmRvbSAodW5zaWduZWQgaW50IF9f c2VlZCkgOwoKCgoKCmV4dGVybiBjaGFyICppbml0c3RhdGUgKHVuc2lnbmVkIGludCBfX3NlZWQs IGNoYXIgKl9fc3RhdGVidWYsCiAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX3N0YXRl bGVuKSA7CgoKCmV4dGVybiBjaGFyICpzZXRzdGF0ZSAoY2hhciAqX19zdGF0ZWJ1ZikgOwoKCgoK CgoKc3RydWN0IHJhbmRvbV9kYXRhCiAgewogICAgaW50MzJfdCAqZnB0cjsKICAgIGludDMyX3Qg KnJwdHI7CiAgICBpbnQzMl90ICpzdGF0ZTsKICAgIGludCByYW5kX3R5cGU7CiAgICBpbnQgcmFu ZF9kZWc7CiAgICBpbnQgcmFuZF9zZXA7CiAgICBpbnQzMl90ICplbmRfcHRyOwogIH07CgpleHRl cm4gaW50IHJhbmRvbV9yIChzdHJ1Y3QgcmFuZG9tX2RhdGEgKl9fcmVzdHJpY3QgX19idWYsCiAg ICAgICAgICAgICAgICAgICAgIGludDMyX3QgKl9fcmVzdHJpY3QgX19yZXN1bHQpIDsKCmV4dGVy biBpbnQgc3JhbmRvbV9yICh1bnNpZ25lZCBpbnQgX19zZWVkLCBzdHJ1Y3QgcmFuZG9tX2RhdGEg Kl9fYnVmKSA7CgpleHRlcm4gaW50IGluaXRzdGF0ZV9yICh1bnNpZ25lZCBpbnQgX19zZWVkLCBj aGFyICpfX3Jlc3RyaWN0IF9fc3RhdGVidWYsCiAgICAgICAgICAgICAgICAgICAgICAgIHNpemVf dCBfX3N0YXRlbGVuLAogICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcmFuZG9tX2RhdGEg Kl9fcmVzdHJpY3QgX19idWYpIDsKCmV4dGVybiBpbnQgc2V0c3RhdGVfciAoY2hhciAqX19yZXN0 cmljdCBfX3N0YXRlYnVmLAogICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCByYW5kb21fZGF0 YSAqX19yZXN0cmljdCBfX2J1ZikgOwoKCgoKCmV4dGVybiBpbnQgcmFuZCAodm9pZCkgOwoKZXh0 ZXJuIHZvaWQgc3JhbmQgKHVuc2lnbmVkIGludCBfX3NlZWQpIDsKCgoKZXh0ZXJuIGludCByYW5k X3IgKHVuc2lnbmVkIGludCAqX19zZWVkKSA7CgoKCgoKCgpleHRlcm4gZG91YmxlIGRyYW5kNDgg KHZvaWQpIDsKZXh0ZXJuIGRvdWJsZSBlcmFuZDQ4ICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3Vi aVszXSkgOwoKCmV4dGVybiBsb25nIGludCBscmFuZDQ4ICh2b2lkKSA7CmV4dGVybiBsb25nIGlu dCBucmFuZDQ4ICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVszXSkgOwoKCmV4dGVybiBsb25n IGludCBtcmFuZDQ4ICh2b2lkKSA7CmV4dGVybiBsb25nIGludCBqcmFuZDQ4ICh1bnNpZ25lZCBz aG9ydCBpbnQgX194c3ViaVszXSkgOwoKCmV4dGVybiB2b2lkIHNyYW5kNDggKGxvbmcgaW50IF9f c2VlZHZhbCkgOwpleHRlcm4gdW5zaWduZWQgc2hvcnQgaW50ICpzZWVkNDggKHVuc2lnbmVkIHNo b3J0IGludCBfX3NlZWQxNnZbM10pIDsKZXh0ZXJuIHZvaWQgbGNvbmc0OCAodW5zaWduZWQgc2hv cnQgaW50IF9fcGFyYW1bN10pIDsKCgoKCgpzdHJ1Y3QgZHJhbmQ0OF9kYXRhCiAgewogICAgdW5z aWduZWQgc2hvcnQgaW50IF9feFszXTsKICAgIHVuc2lnbmVkIHNob3J0IGludCBfX29sZF94WzNd OwogICAgdW5zaWduZWQgc2hvcnQgaW50IF9fYzsKICAgIHVuc2lnbmVkIHNob3J0IGludCBfX2lu aXQ7CiAgICB1bnNpZ25lZCBsb25nIGxvbmcgaW50IF9fYTsKICB9OwoKCmV4dGVybiBpbnQgZHJh bmQ0OF9yIChzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmZmVyLAogICAgICAg ICAgICAgICAgICAgICAgZG91YmxlICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSA7CmV4dGVybiBpbnQg ZXJhbmQ0OF9yICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVszXSwKICAgICAgICAgICAgICAg ICAgICAgIHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fcmVzdHJpY3QgX19idWZmZXIsCiAgICAgICAg ICAgICAgICAgICAgICBkb3VibGUgKl9fcmVzdHJpY3QgX19yZXN1bHQpIDsKCgpleHRlcm4gaW50 IGxyYW5kNDhfciAoc3RydWN0IGRyYW5kNDhfZGF0YSAqX19yZXN0cmljdCBfX2J1ZmZlciwKICAg ICAgICAgICAgICAgICAgICAgIGxvbmcgaW50ICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSA7CmV4dGVy biBpbnQgbnJhbmQ0OF9yICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVszXSwKICAgICAgICAg ICAgICAgICAgICAgIHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fcmVzdHJpY3QgX19idWZmZXIsCiAg ICAgICAgICAgICAgICAgICAgICBsb25nIGludCAqX19yZXN0cmljdCBfX3Jlc3VsdCkgOwoKCmV4 dGVybiBpbnQgbXJhbmQ0OF9yIChzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX3Jlc3RyaWN0IF9fYnVm ZmVyLAogICAgICAgICAgICAgICAgICAgICAgbG9uZyBpbnQgKl9fcmVzdHJpY3QgX19yZXN1bHQp IDsKZXh0ZXJuIGludCBqcmFuZDQ4X3IgKHVuc2lnbmVkIHNob3J0IGludCBfX3hzdWJpWzNdLAog ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19yZXN0cmljdCBfX2J1 ZmZlciwKICAgICAgICAgICAgICAgICAgICAgIGxvbmcgaW50ICpfX3Jlc3RyaWN0IF9fcmVzdWx0 KSA7CgoKZXh0ZXJuIGludCBzcmFuZDQ4X3IgKGxvbmcgaW50IF9fc2VlZHZhbCwgc3RydWN0IGRy YW5kNDhfZGF0YSAqX19idWZmZXIpCiAgICAgICAgICAgIDsKCmV4dGVybiBpbnQgc2VlZDQ4X3Ig KHVuc2lnbmVkIHNob3J0IGludCBfX3NlZWQxNnZbM10sCiAgICAgICAgICAgICAgICAgICAgIHN0 cnVjdCBkcmFuZDQ4X2RhdGEgKl9fYnVmZmVyKSA7CgpleHRlcm4gaW50IGxjb25nNDhfciAodW5z aWduZWQgc2hvcnQgaW50IF9fcGFyYW1bN10sCiAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qg ZHJhbmQ0OF9kYXRhICpfX2J1ZmZlcikgOwojIDUyNyAiL3Vzci9sb2NhbC9pbmNsdWRlL3N0ZGxp Yi5oIiAzCmV4dGVybiB2b2lkICptYWxsb2MgKHNpemVfdCBfX3NpemUpIF9fYXR0cmlidXRlX18g KChfX21hbGxvY19fKSk7CgpleHRlcm4gdm9pZCAqY2FsbG9jIChzaXplX3QgX19ubWVtYiwgc2l6 ZV90IF9fc2l6ZSkKICAgICAgICAgICAgIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7CgoK CgoKZXh0ZXJuIHZvaWQgKnJlYWxsb2MgKHZvaWQgKl9fcHRyLCBzaXplX3QgX19zaXplKSBfX2F0 dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwoKZXh0ZXJuIHZvaWQgZnJlZSAodm9pZCAqX19wdHIp IDsKCgoKZXh0ZXJuIHZvaWQgY2ZyZWUgKHZvaWQgKl9fcHRyKSA7CgoKCiMgMSAiL3Vzci9sb2Nh bC9pbmNsdWRlL2FsbG9jYS5oIiAxIDMKIyAyMiAiL3Vzci9sb2NhbC9pbmNsdWRlL2FsbG9jYS5o IiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2ZlYXR1cmVzLmgiIDEgMwojIDIzICIvdXNyL2xv Y2FsL2luY2x1ZGUvYWxsb2NhLmgiIDIgMwoKCiMgMSAiL3Vzci9sb2NhbC9nY2MvMy4wLjQvbGli L2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wLjQvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMg MjYgIi91c3IvbG9jYWwvaW5jbHVkZS9hbGxvY2EuaCIgMiAzCgoKCgoKCgpleHRlcm4gdm9pZCAq YWxsb2NhIChzaXplX3QgX19zaXplKSA7CiMgNTQ3ICIvdXNyL2xvY2FsL2luY2x1ZGUvc3RkbGli LmgiIDIgMwoKCgoKZXh0ZXJuIHZvaWQgKnZhbGxvYyAoc2l6ZV90IF9fc2l6ZSkgX19hdHRyaWJ1 dGVfXyAoKF9fbWFsbG9jX18pKTsKIyA1NjEgIi91c3IvbG9jYWwvaW5jbHVkZS9zdGRsaWIuaCIg MwpleHRlcm4gdm9pZCBhYm9ydCAodm9pZCkgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykp OwoKCgpleHRlcm4gaW50IGF0ZXhpdCAodm9pZCAoKl9fZnVuYykgKHZvaWQpKSA7CgoKCgpleHRl cm4gaW50IG9uX2V4aXQgKHZvaWQgKCpfX2Z1bmMpIChpbnQgX19zdGF0dXMsIHZvaWQgKl9fYXJn KSwgdm9pZCAqX19hcmcpCiAgICAgICAgICAgIDsKCgoKCgpleHRlcm4gdm9pZCBleGl0IChpbnQg X19zdGF0dXMpIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKIyA1ODcgIi91c3IvbG9j YWwvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gY2hhciAqZ2V0ZW52IChfX2NvbnN0IGNoYXIg Kl9fbmFtZSkgOwoKCgpleHRlcm4gY2hhciAqX19zZWN1cmVfZ2V0ZW52IChfX2NvbnN0IGNoYXIg Kl9fbmFtZSkgOwoKCgoKCmV4dGVybiBpbnQgcHV0ZW52IChjaGFyICpfX3N0cmluZykgOwoKCgoK CmV4dGVybiBpbnQgc2V0ZW52IChfX2NvbnN0IGNoYXIgKl9fbmFtZSwgX19jb25zdCBjaGFyICpf X3ZhbHVlLCBpbnQgX19yZXBsYWNlKQogICAgICAgICAgICA7CgoKZXh0ZXJuIGludCB1bnNldGVu diAoX19jb25zdCBjaGFyICpfX25hbWUpIDsKCgoKCgoKZXh0ZXJuIGludCBjbGVhcmVudiAodm9p ZCkgOwojIDYyMyAiL3Vzci9sb2NhbC9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBjaGFyICpt a3RlbXAgKGNoYXIgKl9fdGVtcGxhdGUpIDsKCgoKCgoKCmV4dGVybiBpbnQgbWtzdGVtcCAoY2hh ciAqX190ZW1wbGF0ZSkgOwojIDY1MCAiL3Vzci9sb2NhbC9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4 dGVybiBjaGFyICpta2R0ZW1wIChjaGFyICpfX3RlbXBsYXRlKSA7CgoKCgpleHRlcm4gaW50IHN5 c3RlbSAoX19jb25zdCBjaGFyICpfX2NvbW1hbmQpIDsKIyA2NzIgIi91c3IvbG9jYWwvaW5jbHVk ZS9zdGRsaWIuaCIgMwpleHRlcm4gY2hhciAqcmVhbHBhdGggKF9fY29uc3QgY2hhciAqX19yZXN0 cmljdCBfX25hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqX19yZXN0cmljdCBfX3Jl c29sdmVkKSA7CgoKCgoKCnR5cGVkZWYgaW50ICgqX19jb21wYXJfZm5fdCkgKF9fY29uc3Qgdm9p ZCAqLCBfX2NvbnN0IHZvaWQgKik7CiMgNjg5ICIvdXNyL2xvY2FsL2luY2x1ZGUvc3RkbGliLmgi IDMKZXh0ZXJuIHZvaWQgKmJzZWFyY2ggKF9fY29uc3Qgdm9pZCAqX19rZXksIF9fY29uc3Qgdm9p ZCAqX19iYXNlLAogICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbm1lbWIsIHNpemVfdCBf X3NpemUsIF9fY29tcGFyX2ZuX3QgX19jb21wYXIpOwoKCgpleHRlcm4gdm9pZCBxc29ydCAodm9p ZCAqX19iYXNlLCBzaXplX3QgX19ubWVtYiwgc2l6ZV90IF9fc2l6ZSwKICAgICAgICAgICAgICAg ICAgIF9fY29tcGFyX2ZuX3QgX19jb21wYXIpOwoKCgpleHRlcm4gaW50IGFicyAoaW50IF9feCkg X19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwpleHRlcm4gbG9uZyBpbnQgbGFicyAobG9uZyBp bnQgX194KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CiMgNzEwICIvdXNyL2xvY2FsL2lu Y2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIGRpdl90IGRpdiAoaW50IF9fbnVtZXIsIGludCBfX2Rl bm9tKQogICAgICAgICAgICAgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwpleHRlcm4gbGRp dl90IGxkaXYgKGxvbmcgaW50IF9fbnVtZXIsIGxvbmcgaW50IF9fZGVub20pCiAgICAgICAgICAg ICBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CiMgNzI4ICIvdXNyL2xvY2FsL2luY2x1ZGUv c3RkbGliLmgiIDMKZXh0ZXJuIGNoYXIgKmVjdnQgKGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGln aXQsIGludCAqX19yZXN0cmljdCBfX2RlY3B0LAogICAgICAgICAgICAgICAgICAgaW50ICpfX3Jl c3RyaWN0IF9fc2lnbikgOwoKCgoKZXh0ZXJuIGNoYXIgKmZjdnQgKGRvdWJsZSBfX3ZhbHVlLCBp bnQgX19uZGlnaXQsIGludCAqX19yZXN0cmljdCBfX2RlY3B0LAogICAgICAgICAgICAgICAgICAg aW50ICpfX3Jlc3RyaWN0IF9fc2lnbikgOwoKCgoKZXh0ZXJuIGNoYXIgKmdjdnQgKGRvdWJsZSBf X3ZhbHVlLCBpbnQgX19uZGlnaXQsIGNoYXIgKl9fYnVmKSA7CgoKCgpleHRlcm4gY2hhciAqcWVj dnQgKGxvbmcgZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwKICAgICAgICAgICAgICAgICAg ICBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbikgOwpleHRl cm4gY2hhciAqcWZjdnQgKGxvbmcgZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwKICAgICAg ICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwgaW50ICpfX3Jlc3RyaWN0IF9f c2lnbikgOwpleHRlcm4gY2hhciAqcWdjdnQgKGxvbmcgZG91YmxlIF9fdmFsdWUsIGludCBfX25k aWdpdCwgY2hhciAqX19idWYpIDsKCgoKCmV4dGVybiBpbnQgZWN2dF9yIChkb3VibGUgX192YWx1 ZSwgaW50IF9fbmRpZ2l0LCBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwKICAgICAgICAgICAgICAg ICAgIGludCAqX19yZXN0cmljdCBfX3NpZ24sIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsCiAgICAg ICAgICAgICAgICAgICBzaXplX3QgX19sZW4pIDsKZXh0ZXJuIGludCBmY3Z0X3IgKGRvdWJsZSBf X3ZhbHVlLCBpbnQgX19uZGlnaXQsIGludCAqX19yZXN0cmljdCBfX2RlY3B0LAogICAgICAgICAg ICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbiwgY2hhciAqX19yZXN0cmljdCBfX2J1ZiwK ICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX2xlbikgOwoKZXh0ZXJuIGludCBxZWN2dF9yIChs b25nIGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsCiAgICAgICAgICAgICAgICAgICAgaW50 ICpfX3Jlc3RyaWN0IF9fZGVjcHQsIGludCAqX19yZXN0cmljdCBfX3NpZ24sCiAgICAgICAgICAg ICAgICAgICAgY2hhciAqX19yZXN0cmljdCBfX2J1Ziwgc2l6ZV90IF9fbGVuKSA7CmV4dGVybiBp bnQgcWZjdnRfciAobG9uZyBkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LAogICAgICAgICAg ICAgICAgICAgIGludCAqX19yZXN0cmljdCBfX2RlY3B0LCBpbnQgKl9fcmVzdHJpY3QgX19zaWdu LAogICAgICAgICAgICAgICAgICAgIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsIHNpemVfdCBfX2xl bikgOwoKCgoKCgpleHRlcm4gaW50IG1ibGVuIChfX2NvbnN0IGNoYXIgKl9fcywgc2l6ZV90IF9f bikgOwoKCmV4dGVybiBpbnQgbWJ0b3djICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fcHdjLAogICAg ICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbikg OwoKCmV4dGVybiBpbnQgd2N0b21iIChjaGFyICpfX3MsIHdjaGFyX3QgX193Y2hhcikgOwoKCgpl eHRlcm4gc2l6ZV90IG1ic3Rvd2NzICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fcHdjcywKICAgICAg ICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9f bikgOwoKZXh0ZXJuIHNpemVfdCB3Y3N0b21icyAoY2hhciAqX19yZXN0cmljdCBfX3MsCiAgICAg ICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3B3Y3MsIHNp emVfdCBfX24pCiAgICAgICAgICAgIDsKCgoKCgoKCmV4dGVybiBpbnQgcnBtYXRjaCAoX19jb25z dCBjaGFyICpfX3Jlc3BvbnNlKSA7CiMgODU4ICIvdXNyL2xvY2FsL2luY2x1ZGUvc3RkbGliLmgi IDMKZXh0ZXJuIGludCBnZXRsb2FkYXZnIChkb3VibGUgX19sb2FkYXZnW10sIGludCBfX25lbGVt KSA7CiMgMTMgIkJyZWFrRG93bi5jIiAyCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL3N0ZGlvLmgi IDEgMwojIDI4ICIvdXNyL2xvY2FsL2luY2x1ZGUvc3RkaW8uaCIgMwojIDEgIi91c3IvbG9jYWwv aW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAyOSAiL3Vzci9sb2NhbC9pbmNsdWRlL3N0ZGlvLmgi IDIgMwoKCgoKCiMgMSAiL3Vzci9sb2NhbC9nY2MvMy4wLjQvbGliL2djYy1saWIvaTY4Ni1wYy1s aW51eC1nbnUvMy4wLjQvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMzUgIi91c3IvbG9jYWwvaW5j bHVkZS9zdGRpby5oIiAyIDMKCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2JpdHMvdHlwZXMuaCIg MSAzCiMgMzcgIi91c3IvbG9jYWwvaW5jbHVkZS9zdGRpby5oIiAyIDMKIyA0NSAiL3Vzci9sb2Nh bC9pbmNsdWRlL3N0ZGlvLmgiIDMKdHlwZWRlZiBzdHJ1Y3QgX0lPX0ZJTEUgRklMRTsKIyA1NSAi L3Vzci9sb2NhbC9pbmNsdWRlL3N0ZGlvLmgiIDMKdHlwZWRlZiBzdHJ1Y3QgX0lPX0ZJTEUgX19G SUxFOwojIDY1ICIvdXNyL2xvY2FsL2luY2x1ZGUvc3RkaW8uaCIgMwojIDEgIi91c3IvbG9jYWwv aW5jbHVkZS9saWJpby5oIiAxIDMKIyAzMiAiL3Vzci9sb2NhbC9pbmNsdWRlL2xpYmlvLmgiIDMK IyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvX0dfY29uZmlnLmgiIDEgMwojIDkgIi91c3IvbG9jYWwv aW5jbHVkZS9fR19jb25maWcuaCIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9iaXRzL3R5cGVz LmgiIDEgMwojIDEwICIvdXNyL2xvY2FsL2luY2x1ZGUvX0dfY29uZmlnLmgiIDIgMwoKCgoKIyAx ICIvdXNyL2xvY2FsL2djYy8zLjAuNC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAu NC9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAzMTIgIi91c3IvbG9jYWwvZ2NjLzMuMC40L2xpYi9n Y2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC40L2luY2x1ZGUvc3RkZGVmLmgiIDMKdHlwZWRl ZiB1bnNpZ25lZCBpbnQgd2ludF90OwojIDE1ICIvdXNyL2xvY2FsL2luY2x1ZGUvX0dfY29uZmln LmgiIDIgMwojIDI0ICIvdXNyL2xvY2FsL2luY2x1ZGUvX0dfY29uZmlnLmgiIDMKIyAxICIvdXNy L2xvY2FsL2luY2x1ZGUvd2NoYXIuaCIgMSAzCiMgNDggIi91c3IvbG9jYWwvaW5jbHVkZS93Y2hh ci5oIiAzCiMgMSAiL3Vzci9sb2NhbC9nY2MvMy4wLjQvbGliL2djYy1saWIvaTY4Ni1wYy1saW51 eC1nbnUvMy4wLjQvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgNDkgIi91c3IvbG9jYWwvaW5jbHVk ZS93Y2hhci5oIiAyIDMKCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2JpdHMvd2NoYXIuaCIgMSAz CiMgNTEgIi91c3IvbG9jYWwvaW5jbHVkZS93Y2hhci5oIiAyIDMKIyA2NyAiL3Vzci9sb2NhbC9p bmNsdWRlL3djaGFyLmgiIDMKdHlwZWRlZiBzdHJ1Y3QKewogIGludCBfX2NvdW50OwogIHVuaW9u CiAgewogICAgd2ludF90IF9fd2NoOwogICAgY2hhciBfX3djaGJbNF07CiAgfSBfX3ZhbHVlOwp9 IF9fbWJzdGF0ZV90OwojIDI1ICIvdXNyL2xvY2FsL2luY2x1ZGUvX0dfY29uZmlnLmgiIDIgMwoK dHlwZWRlZiBzdHJ1Y3QKewogIF9fb2ZmX3QgX19wb3M7CiAgX19tYnN0YXRlX3QgX19zdGF0ZTsK fSBfR19mcG9zX3Q7CnR5cGVkZWYgc3RydWN0CnsKICBfX29mZjY0X3QgX19wb3M7CiAgX19tYnN0 YXRlX3QgX19zdGF0ZTsKfSBfR19mcG9zNjRfdDsKIyA0NCAiL3Vzci9sb2NhbC9pbmNsdWRlL19H X2NvbmZpZy5oIiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2djb252LmgiIDEgMwojIDI2ICIv dXNyL2xvY2FsL2luY2x1ZGUvZ2NvbnYuaCIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9mZWF0 dXJlcy5oIiAxIDMKIyAyNyAiL3Vzci9sb2NhbC9pbmNsdWRlL2djb252LmgiIDIgMwoKIyAxICIv dXNyL2xvY2FsL2luY2x1ZGUvd2NoYXIuaCIgMSAzCiMgNDggIi91c3IvbG9jYWwvaW5jbHVkZS93 Y2hhci5oIiAzCiMgMSAiL3Vzci9sb2NhbC9nY2MvMy4wLjQvbGliL2djYy1saWIvaTY4Ni1wYy1s aW51eC1nbnUvMy4wLjQvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgNDkgIi91c3IvbG9jYWwvaW5j bHVkZS93Y2hhci5oIiAyIDMKCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2JpdHMvd2NoYXIuaCIg MSAzCiMgNTEgIi91c3IvbG9jYWwvaW5jbHVkZS93Y2hhci5oIiAyIDMKIyAyOSAiL3Vzci9sb2Nh bC9pbmNsdWRlL2djb252LmgiIDIgMwoKCiMgMSAiL3Vzci9sb2NhbC9nY2MvMy4wLjQvbGliL2dj Yy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wLjQvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMzIg Ii91c3IvbG9jYWwvaW5jbHVkZS9nY29udi5oIiAyIDMKCgoKCgplbnVtCnsKICBfX0dDT05WX09L ID0gMCwKICBfX0dDT05WX05PQ09OViwKICBfX0dDT05WX05PREIsCiAgX19HQ09OVl9OT01FTSwK CiAgX19HQ09OVl9FTVBUWV9JTlBVVCwKICBfX0dDT05WX0ZVTExfT1VUUFVULAogIF9fR0NPTlZf SUxMRUdBTF9JTlBVVCwKICBfX0dDT05WX0lOQ09NUExFVEVfSU5QVVQsCgogIF9fR0NPTlZfSUxM RUdBTF9ERVNDUklQVE9SLAogIF9fR0NPTlZfSU5URVJOQUxfRVJST1IKfTsKCgoKZW51bQp7CiAg X19HQ09OVl9JU19MQVNUID0gMHgwMDAxLAogIF9fR0NPTlZfSUdOT1JFX0VSUk9SUyA9IDB4MDAw Mgp9OwoKCgpzdHJ1Y3QgX19nY29udl9zdGVwOwpzdHJ1Y3QgX19nY29udl9zdGVwX2RhdGE7CnN0 cnVjdCBfX2djb252X2xvYWRlZF9vYmplY3Q7CnN0cnVjdCBfX2djb252X3RyYW5zX2RhdGE7CgoK CnR5cGVkZWYgaW50ICgqX19nY29udl9mY3QpIChzdHJ1Y3QgX19nY29udl9zdGVwICosIHN0cnVj dCBfX2djb252X3N0ZXBfZGF0YSAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25z dCB1bnNpZ25lZCBjaGFyICoqLCBfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKiwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKiosIHNpemVfdCAqLCBpbnQsIGludCk7CgoK dHlwZWRlZiBpbnQgKCpfX2djb252X2luaXRfZmN0KSAoc3RydWN0IF9fZ2NvbnZfc3RlcCAqKTsK dHlwZWRlZiB2b2lkICgqX19nY29udl9lbmRfZmN0KSAoc3RydWN0IF9fZ2NvbnZfc3RlcCAqKTsK CgoKdHlwZWRlZiBpbnQgKCpfX2djb252X3RyYW5zX2ZjdCkgKHN0cnVjdCBfX2djb252X3N0ZXAg KiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBfX2djb252X3N0ZXBf ZGF0YSAqLCB2b2lkICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0 IHVuc2lnbmVkIGNoYXIgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29u c3QgdW5zaWduZWQgY2hhciAqKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9f Y29uc3QgdW5zaWduZWQgY2hhciAqLCB1bnNpZ25lZCBjaGFyICoqLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgc2l6ZV90ICopOwoKCnR5cGVkZWYgaW50ICgqX19nY29udl90cmFu c19jb250ZXh0X2ZjdCkgKHZvaWQgKiwgX19jb25zdCB1bnNpZ25lZCBjaGFyICosCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgdW5zaWduZWQgY2hhciAq LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFy ICosIHVuc2lnbmVkIGNoYXIgKik7CgoKdHlwZWRlZiBpbnQgKCpfX2djb252X3RyYW5zX3F1ZXJ5 X2ZjdCkgKF9fY29uc3QgY2hhciAqLCBfX2NvbnN0IGNoYXIgKioqLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICopOwoKCnR5cGVkZWYgaW50ICgqX19nY29u dl90cmFuc19pbml0X2ZjdCkgKHZvaWQgKiosIGNvbnN0IGNoYXIgKik7CnR5cGVkZWYgdm9pZCAo Kl9fZ2NvbnZfdHJhbnNfZW5kX2ZjdCkgKHZvaWQgKik7CgpzdHJ1Y3QgX19nY29udl90cmFuc19k YXRhCnsKCiAgX19nY29udl90cmFuc19mY3QgX190cmFuc19mY3Q7CiAgX19nY29udl90cmFuc19j b250ZXh0X2ZjdCBfX3RyYW5zX2NvbnRleHRfZmN0OwogIF9fZ2NvbnZfdHJhbnNfZW5kX2ZjdCBf X3RyYW5zX2VuZF9mY3Q7CiAgdm9pZCAqX19kYXRhOwogIHN0cnVjdCBfX2djb252X3RyYW5zX2Rh dGEgKl9fbmV4dDsKfTsKCgoKc3RydWN0IF9fZ2NvbnZfc3RlcAp7CiAgc3RydWN0IF9fZ2NvbnZf bG9hZGVkX29iamVjdCAqX19zaGxpYl9oYW5kbGU7CiAgX19jb25zdCBjaGFyICpfX21vZG5hbWU7 CgogIGludCBfX2NvdW50ZXI7CgogIGNoYXIgKl9fZnJvbV9uYW1lOwogIGNoYXIgKl9fdG9fbmFt ZTsKCiAgX19nY29udl9mY3QgX19mY3Q7CiAgX19nY29udl9pbml0X2ZjdCBfX2luaXRfZmN0Owog IF9fZ2NvbnZfZW5kX2ZjdCBfX2VuZF9mY3Q7CgoKCiAgaW50IF9fbWluX25lZWRlZF9mcm9tOwog IGludCBfX21heF9uZWVkZWRfZnJvbTsKICBpbnQgX19taW5fbmVlZGVkX3RvOwogIGludCBfX21h eF9uZWVkZWRfdG87CgoKICBpbnQgX19zdGF0ZWZ1bDsKCiAgdm9pZCAqX19kYXRhOwp9OwoKCgpz dHJ1Y3QgX19nY29udl9zdGVwX2RhdGEKewogIHVuc2lnbmVkIGNoYXIgKl9fb3V0YnVmOwogIHVu c2lnbmVkIGNoYXIgKl9fb3V0YnVmZW5kOwoKCgogIGludCBfX2ZsYWdzOwoKCgogIGludCBfX2lu dm9jYXRpb25fY291bnRlcjsKCgoKICBpbnQgX19pbnRlcm5hbF91c2U7CgogIF9fbWJzdGF0ZV90 ICpfX3N0YXRlcDsKICBfX21ic3RhdGVfdCBfX3N0YXRlOwoKCgogIHN0cnVjdCBfX2djb252X3Ry YW5zX2RhdGEgKl9fdHJhbnM7Cn07CgoKCnR5cGVkZWYgc3RydWN0IF9fZ2NvbnZfaW5mbwp7CiAg c2l6ZV90IF9fbnN0ZXBzOwogIHN0cnVjdCBfX2djb252X3N0ZXAgKl9fc3RlcHM7CiAgX19leHRl bnNpb25fXyBzdHJ1Y3QgX19nY29udl9zdGVwX2RhdGEgX19kYXRhIFtdOwp9ICpfX2djb252X3Q7 CiMgNDUgIi91c3IvbG9jYWwvaW5jbHVkZS9fR19jb25maWcuaCIgMiAzCnR5cGVkZWYgdW5pb24K ewogIHN0cnVjdCBfX2djb252X2luZm8gX19jZDsKICBzdHJ1Y3QKICB7CiAgICBzdHJ1Y3QgX19n Y29udl9pbmZvIF9fY2Q7CiAgICBzdHJ1Y3QgX19nY29udl9zdGVwX2RhdGEgX19kYXRhOwogIH0g X19jb21iaW5lZDsKfSBfR19pY29udl90OwoKdHlwZWRlZiBpbnQgX0dfaW50MTZfdCBfX2F0dHJp YnV0ZV9fICgoX19tb2RlX18gKF9fSElfXykpKTsKdHlwZWRlZiBpbnQgX0dfaW50MzJfdCBfX2F0 dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fU0lfXykpKTsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX0df dWludDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX0hJX18pKSk7CnR5cGVkZWYgdW5z aWduZWQgaW50IF9HX3VpbnQzMl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19TSV9fKSkp OwojIDMzICIvdXNyL2xvY2FsL2luY2x1ZGUvbGliaW8uaCIgMiAzCiMgNTMgIi91c3IvbG9jYWwv aW5jbHVkZS9saWJpby5oIiAzCiMgMSAiL3Vzci9sb2NhbC9nY2MvMy4wLjQvbGliL2djYy1saWIv aTY4Ni1wYy1saW51eC1nbnUvMy4wLjQvaW5jbHVkZS9zdGRhcmcuaCIgMSAzCiMgNDMgIi91c3Iv bG9jYWwvZ2NjLzMuMC40L2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC40L2luY2x1 ZGUvc3RkYXJnLmgiIDMKdHlwZWRlZiBfX2J1aWx0aW5fdmFfbGlzdCBfX2dudWNfdmFfbGlzdDsK IyA1NCAiL3Vzci9sb2NhbC9pbmNsdWRlL2xpYmlvLmgiIDIgMwojIDE2MCAiL3Vzci9sb2NhbC9p bmNsdWRlL2xpYmlvLmgiIDMKc3RydWN0IF9JT19qdW1wX3Q7IHN0cnVjdCBfSU9fRklMRTsKIyAx NzAgIi91c3IvbG9jYWwvaW5jbHVkZS9saWJpby5oIiAzCnR5cGVkZWYgdm9pZCBfSU9fbG9ja190 OwoKCgoKCnN0cnVjdCBfSU9fbWFya2VyIHsKICBzdHJ1Y3QgX0lPX21hcmtlciAqX25leHQ7CiAg c3RydWN0IF9JT19GSUxFICpfc2J1ZjsKCgoKICBpbnQgX3BvczsKIyAxOTMgIi91c3IvbG9jYWwv aW5jbHVkZS9saWJpby5oIiAzCn07CgoKZW51bSBfX2NvZGVjdnRfcmVzdWx0CnsKICBfX2NvZGVj dnRfb2ssCiAgX19jb2RlY3Z0X3BhcnRpYWwsCiAgX19jb2RlY3Z0X2Vycm9yLAogIF9fY29kZWN2 dF9ub2NvbnYKfTsKIyAyNjEgIi91c3IvbG9jYWwvaW5jbHVkZS9saWJpby5oIiAzCnN0cnVjdCBf SU9fRklMRSB7CiAgaW50IF9mbGFnczsKCgoKCiAgY2hhciogX0lPX3JlYWRfcHRyOwogIGNoYXIq IF9JT19yZWFkX2VuZDsKICBjaGFyKiBfSU9fcmVhZF9iYXNlOwogIGNoYXIqIF9JT193cml0ZV9i YXNlOwogIGNoYXIqIF9JT193cml0ZV9wdHI7CiAgY2hhciogX0lPX3dyaXRlX2VuZDsKICBjaGFy KiBfSU9fYnVmX2Jhc2U7CiAgY2hhciogX0lPX2J1Zl9lbmQ7CgogIGNoYXIgKl9JT19zYXZlX2Jh c2U7CiAgY2hhciAqX0lPX2JhY2t1cF9iYXNlOwogIGNoYXIgKl9JT19zYXZlX2VuZDsKCiAgc3Ry dWN0IF9JT19tYXJrZXIgKl9tYXJrZXJzOwoKICBzdHJ1Y3QgX0lPX0ZJTEUgKl9jaGFpbjsKCiAg aW50IF9maWxlbm87CiAgaW50IF9ibGtzaXplOwogIF9fb2ZmX3QgX29sZF9vZmZzZXQ7CgoKCiAg dW5zaWduZWQgc2hvcnQgX2N1cl9jb2x1bW47CiAgc2lnbmVkIGNoYXIgX3Z0YWJsZV9vZmZzZXQ7 CiAgY2hhciBfc2hvcnRidWZbMV07CgoKCiAgX0lPX2xvY2tfdCAqX2xvY2s7CiMgMzA1ICIvdXNy L2xvY2FsL2luY2x1ZGUvbGliaW8uaCIgMwogIF9fb2ZmNjRfdCBfb2Zmc2V0OwoKCgoKCiAgdm9p ZCAqX19wYWQxOwogIHZvaWQgKl9fcGFkMjsKCiAgaW50IF9tb2RlOwoKICBjaGFyIF91bnVzZWQy WzE1ICogc2l6ZW9mIChpbnQpIC0gMiAqIHNpemVvZiAodm9pZCAqKV07Cgp9OwoKCnR5cGVkZWYg c3RydWN0IF9JT19GSUxFIF9JT19GSUxFOwoKCnN0cnVjdCBfSU9fRklMRV9wbHVzOwoKZXh0ZXJu IHN0cnVjdCBfSU9fRklMRV9wbHVzIF9JT18yXzFfc3RkaW5fOwpleHRlcm4gc3RydWN0IF9JT19G SUxFX3BsdXMgX0lPXzJfMV9zdGRvdXRfOwpleHRlcm4gc3RydWN0IF9JT19GSUxFX3BsdXMgX0lP XzJfMV9zdGRlcnJfOwojIDM0NCAiL3Vzci9sb2NhbC9pbmNsdWRlL2xpYmlvLmgiIDMKdHlwZWRl ZiBfX3NzaXplX3QgX19pb19yZWFkX2ZuICh2b2lkICpfX2Nvb2tpZSwgY2hhciAqX19idWYsIHNp emVfdCBfX25ieXRlcyk7CgoKCgoKCgp0eXBlZGVmIF9fc3NpemVfdCBfX2lvX3dyaXRlX2ZuICh2 b2lkICpfX2Nvb2tpZSwgX19jb25zdCBjaGFyICpfX2J1ZiwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgc2l6ZV90IF9fbik7CgoKCgoKCgp0eXBlZGVmIGludCBfX2lvX3NlZWtfZm4g KHZvaWQgKl9fY29va2llLCBfX29mZjY0X3QgKl9fcG9zLCBpbnQgX193KTsKCgp0eXBlZGVmIGlu dCBfX2lvX2Nsb3NlX2ZuICh2b2lkICpfX2Nvb2tpZSk7CiMgMzk2ICIvdXNyL2xvY2FsL2luY2x1 ZGUvbGliaW8uaCIgMwpleHRlcm4gaW50IF9fdW5kZXJmbG93IChfSU9fRklMRSAqKSA7CmV4dGVy biBpbnQgX191ZmxvdyAoX0lPX0ZJTEUgKikgOwpleHRlcm4gaW50IF9fb3ZlcmZsb3cgKF9JT19G SUxFICosIGludCkgOwpleHRlcm4gd2ludF90IF9fd3VuZGVyZmxvdyAoX0lPX0ZJTEUgKikgOwpl eHRlcm4gd2ludF90IF9fd3VmbG93IChfSU9fRklMRSAqKSA7CmV4dGVybiB3aW50X3QgX193b3Zl cmZsb3cgKF9JT19GSUxFICosIHdpbnRfdCkgOwojIDQyNiAiL3Vzci9sb2NhbC9pbmNsdWRlL2xp YmlvLmgiIDMKZXh0ZXJuIGludCBfSU9fZ2V0YyAoX0lPX0ZJTEUgKl9fZnApIDsKZXh0ZXJuIGlu dCBfSU9fcHV0YyAoaW50IF9fYywgX0lPX0ZJTEUgKl9fZnApIDsKZXh0ZXJuIGludCBfSU9fZmVv ZiAoX0lPX0ZJTEUgKl9fZnApIDsKZXh0ZXJuIGludCBfSU9fZmVycm9yIChfSU9fRklMRSAqX19m cCkgOwoKZXh0ZXJuIGludCBfSU9fcGVla2NfbG9ja2VkIChfSU9fRklMRSAqX19mcCkgOwoKCgoK CmV4dGVybiB2b2lkIF9JT19mbG9ja2ZpbGUgKF9JT19GSUxFICopIDsKZXh0ZXJuIHZvaWQgX0lP X2Z1bmxvY2tmaWxlIChfSU9fRklMRSAqKSA7CmV4dGVybiBpbnQgX0lPX2Z0cnlsb2NrZmlsZSAo X0lPX0ZJTEUgKikgOwojIDQ1NiAiL3Vzci9sb2NhbC9pbmNsdWRlL2xpYmlvLmgiIDMKZXh0ZXJu IGludCBfSU9fdmZzY2FuZiAoX0lPX0ZJTEUgKiBfX3Jlc3RyaWN0LCBjb25zdCBjaGFyICogX19y ZXN0cmljdCwKICAgICAgICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3QsIGludCAqX19y ZXN0cmljdCkgOwpleHRlcm4gaW50IF9JT192ZnByaW50ZiAoX0lPX0ZJTEUgKl9fcmVzdHJpY3Qs IGNvbnN0IGNoYXIgKl9fcmVzdHJpY3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2dudWNf dmFfbGlzdCkgOwpleHRlcm4gX19zc2l6ZV90IF9JT19wYWRuIChfSU9fRklMRSAqLCBpbnQsIF9f c3NpemVfdCkgOwpleHRlcm4gc2l6ZV90IF9JT19zZ2V0biAoX0lPX0ZJTEUgKiwgdm9pZCAqLCBz aXplX3QpIDsKCmV4dGVybiBfX29mZjY0X3QgX0lPX3NlZWtvZmYgKF9JT19GSUxFICosIF9fb2Zm NjRfdCwgaW50LCBpbnQpIDsKZXh0ZXJuIF9fb2ZmNjRfdCBfSU9fc2Vla3BvcyAoX0lPX0ZJTEUg KiwgX19vZmY2NF90LCBpbnQpIDsKCmV4dGVybiB2b2lkIF9JT19mcmVlX2JhY2t1cF9hcmVhIChf SU9fRklMRSAqKSA7CiMgNjYgIi91c3IvbG9jYWwvaW5jbHVkZS9zdGRpby5oIiAyIDMKIyA4MCAi L3Vzci9sb2NhbC9pbmNsdWRlL3N0ZGlvLmgiIDMKdHlwZWRlZiBfR19mcG9zX3QgZnBvc190Owoj IDEyOSAiL3Vzci9sb2NhbC9pbmNsdWRlL3N0ZGlvLmgiIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1 ZGUvYml0cy9zdGRpb19saW0uaCIgMSAzCiMgMTMwICIvdXNyL2xvY2FsL2luY2x1ZGUvc3RkaW8u aCIgMiAzCgoKCmV4dGVybiBGSUxFICpzdGRpbjsKZXh0ZXJuIEZJTEUgKnN0ZG91dDsKZXh0ZXJu IEZJTEUgKnN0ZGVycjsKCgoKCgoKZXh0ZXJuIGludCByZW1vdmUgKF9fY29uc3QgY2hhciAqX19m aWxlbmFtZSkgOwoKZXh0ZXJuIGludCByZW5hbWUgKF9fY29uc3QgY2hhciAqX19vbGQsIF9fY29u c3QgY2hhciAqX19uZXcpIDsKCgoKCmV4dGVybiBGSUxFICp0bXBmaWxlICh2b2lkKSA7CiMgMTYx ICIvdXNyL2xvY2FsL2luY2x1ZGUvc3RkaW8uaCIgMwpleHRlcm4gY2hhciAqdG1wbmFtIChjaGFy ICpfX3MpIDsKCgoKCmV4dGVybiBjaGFyICp0bXBuYW1fciAoY2hhciAqX19zKSA7CiMgMTc4ICIv dXNyL2xvY2FsL2luY2x1ZGUvc3RkaW8uaCIgMwpleHRlcm4gY2hhciAqdGVtcG5hbSAoX19jb25z dCBjaGFyICpfX2RpciwgX19jb25zdCBjaGFyICpfX3BmeCkKICAgICAgICAgICAgIF9fYXR0cmli dXRlX18gKChfX21hbGxvY19fKSk7CgoKCgpleHRlcm4gaW50IGZjbG9zZSAoRklMRSAqX19zdHJl YW0pIDsKCmV4dGVybiBpbnQgZmZsdXNoIChGSUxFICpfX3N0cmVhbSkgOwoKCgpleHRlcm4gaW50 IGZmbHVzaF91bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pIDsKIyAyMDEgIi91c3IvbG9jYWwvaW5j bHVkZS9zdGRpby5oIiAzCmV4dGVybiBGSUxFICpmb3BlbiAoX19jb25zdCBjaGFyICpfX3Jlc3Ry aWN0IF9fZmlsZW5hbWUsCiAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3Ry aWN0IF9fbW9kZXMpIDsKCmV4dGVybiBGSUxFICpmcmVvcGVuIChfX2NvbnN0IGNoYXIgKl9fcmVz dHJpY3QgX19maWxlbmFtZSwKICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19y ZXN0cmljdCBfX21vZGVzLAogICAgICAgICAgICAgICAgICAgICAgRklMRSAqX19yZXN0cmljdCBf X3N0cmVhbSkgOwojIDIzMSAiL3Vzci9sb2NhbC9pbmNsdWRlL3N0ZGlvLmgiIDMKZXh0ZXJuIEZJ TEUgKmZkb3BlbiAoaW50IF9fZmQsIF9fY29uc3QgY2hhciAqX19tb2RlcykgOwojIDI1NCAiL3Vz ci9sb2NhbC9pbmNsdWRlL3N0ZGlvLmgiIDMKZXh0ZXJuIHZvaWQgc2V0YnVmIChGSUxFICpfX3Jl c3RyaWN0IF9fc3RyZWFtLCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmKSA7CgoKCmV4dGVybiBpbnQg c2V0dmJ1ZiAoRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSwgY2hhciAqX19yZXN0cmljdCBfX2J1 ZiwKICAgICAgICAgICAgICAgICAgICBpbnQgX19tb2Rlcywgc2l6ZV90IF9fbikgOwoKCgoKZXh0 ZXJuIHZvaWQgc2V0YnVmZmVyIChGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLCBjaGFyICpfX3Jl c3RyaWN0IF9fYnVmLAogICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX3NpemUpIDsKCgpl eHRlcm4gdm9pZCBzZXRsaW5lYnVmIChGSUxFICpfX3N0cmVhbSkgOwoKCgoKZXh0ZXJuIGludCBm cHJpbnRmIChGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLAogICAgICAgICAgICAgICAgICAgIF9f Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKSA7CgpleHRlcm4gaW50IHByaW50 ZiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pIDsKCmV4dGVybiBpbnQg c3ByaW50ZiAoY2hhciAqX19yZXN0cmljdCBfX3MsCiAgICAgICAgICAgICAgICAgICAgX19jb25z dCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pIDsKCgpleHRlcm4gaW50IHZmcHJpbnRm IChGSUxFICpfX3Jlc3RyaWN0IF9fcywgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0 LAogICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCBfX2FyZykgOwoKZXh0ZXJuIGlu dCB2cHJpbnRmIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIF9fZ251Y192YV9s aXN0IF9fYXJnKQogICAgICAgICAgICA7CgpleHRlcm4gaW50IHZzcHJpbnRmIChjaGFyICpfX3Jl c3RyaWN0IF9fcywgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LAogICAgICAgICAg ICAgICAgICAgICBfX2dudWNfdmFfbGlzdCBfX2FyZykgOwoKCgpleHRlcm4gaW50IHNucHJpbnRm IChjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbWF4bGVuLAogICAgICAgICAgICAgICAg ICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikKICAgICAgICAgICAg IF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAzLCA0KSkpOwoKZXh0ZXJu IGludCB2c25wcmludGYgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19tYXhsZW4sCiAg ICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIF9f Z251Y192YV9saXN0IF9fYXJnKQogICAgICAgICAgICAgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0 X18gKF9fcHJpbnRmX18sIDMsIDApKSk7CiMgMzI1ICIvdXNyL2xvY2FsL2luY2x1ZGUvc3RkaW8u aCIgMwpleHRlcm4gaW50IGZzY2FuZiAoRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSwKICAgICAg ICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKSA7Cgpl eHRlcm4gaW50IHNjYW5mIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikg OwoKZXh0ZXJuIGludCBzc2NhbmYgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3MsCiAgICAg ICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikgOwoj IDM1MSAiL3Vzci9sb2NhbC9pbmNsdWRlL3N0ZGlvLmgiIDMKZXh0ZXJuIGludCBmZ2V0YyAoRklM RSAqX19zdHJlYW0pIDsKZXh0ZXJuIGludCBnZXRjIChGSUxFICpfX3N0cmVhbSkgOwoKCmV4dGVy biBpbnQgZ2V0Y2hhciAodm9pZCkgOwoKCgoKCgoKZXh0ZXJuIGludCBnZXRjX3VubG9ja2VkIChG SUxFICpfX3N0cmVhbSkgOwpleHRlcm4gaW50IGdldGNoYXJfdW5sb2NrZWQgKHZvaWQpIDsKCgoK CmV4dGVybiBpbnQgZmdldGNfdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKSA7CgoKCgpleHRlcm4g aW50IGZwdXRjIChpbnQgX19jLCBGSUxFICpfX3N0cmVhbSkgOwpleHRlcm4gaW50IHB1dGMgKGlu dCBfX2MsIEZJTEUgKl9fc3RyZWFtKSA7CgoKZXh0ZXJuIGludCBwdXRjaGFyIChpbnQgX19jKSA7 CgoKCgoKCgpleHRlcm4gaW50IGZwdXRjX3VubG9ja2VkIChpbnQgX19jLCBGSUxFICpfX3N0cmVh bSkgOwoKCgoKZXh0ZXJuIGludCBwdXRjX3VubG9ja2VkIChpbnQgX19jLCBGSUxFICpfX3N0cmVh bSkgOwpleHRlcm4gaW50IHB1dGNoYXJfdW5sb2NrZWQgKGludCBfX2MpIDsKCgoKCgpleHRlcm4g aW50IGdldHcgKEZJTEUgKl9fc3RyZWFtKSA7CgoKZXh0ZXJuIGludCBwdXR3IChpbnQgX193LCBG SUxFICpfX3N0cmVhbSkgOwoKCgoKZXh0ZXJuIGNoYXIgKmZnZXRzIChjaGFyICpfX3Jlc3RyaWN0 IF9fcywgaW50IF9fbiwgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkKICAgICAgICAgICAgOwoj IDQxNyAiL3Vzci9sb2NhbC9pbmNsdWRlL3N0ZGlvLmgiIDMKZXh0ZXJuIGNoYXIgKmdldHMgKGNo YXIgKl9fcykgOwojIDQ0MSAiL3Vzci9sb2NhbC9pbmNsdWRlL3N0ZGlvLmgiIDMKZXh0ZXJuIGlu dCBmcHV0cyAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywgRklMRSAqX19yZXN0cmljdCBf X3N0cmVhbSkKICAgICAgICAgICAgOwojIDQ1MSAiL3Vzci9sb2NhbC9pbmNsdWRlL3N0ZGlvLmgi IDMKZXh0ZXJuIGludCBwdXRzIChfX2NvbnN0IGNoYXIgKl9fcykgOwoKCgpleHRlcm4gaW50IHVu Z2V0YyAoaW50IF9fYywgRklMRSAqX19zdHJlYW0pIDsKCgoKZXh0ZXJuIHNpemVfdCBmcmVhZCAo dm9pZCAqX19yZXN0cmljdCBfX3B0ciwgc2l6ZV90IF9fc2l6ZSwKICAgICAgICAgICAgICAgICAg ICAgc2l6ZV90IF9fbiwgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgOwoKZXh0ZXJuIHNpemVf dCBmd3JpdGUgKF9fY29uc3Qgdm9pZCAqX19yZXN0cmljdCBfX3B0ciwgc2l6ZV90IF9fc2l6ZSwK ICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX24sIEZJTEUgKl9fcmVzdHJpY3QgX19zKSA7 CgoKCmV4dGVybiBzaXplX3QgZnJlYWRfdW5sb2NrZWQgKHZvaWQgKl9fcmVzdHJpY3QgX19wdHIs IHNpemVfdCBfX3NpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX24s IEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIDsKZXh0ZXJuIHNpemVfdCBmd3JpdGVfdW5sb2Nr ZWQgKF9fY29uc3Qgdm9pZCAqX19yZXN0cmljdCBfX3B0ciwgc2l6ZV90IF9fc2l6ZSwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX24sIEZJTEUgKl9fcmVzdHJpY3QgX19z dHJlYW0pIDsKCgoKCmV4dGVybiBpbnQgZnNlZWsgKEZJTEUgKl9fc3RyZWFtLCBsb25nIGludCBf X29mZiwgaW50IF9fd2hlbmNlKSA7CgpleHRlcm4gbG9uZyBpbnQgZnRlbGwgKEZJTEUgKl9fc3Ry ZWFtKSA7CgpleHRlcm4gdm9pZCByZXdpbmQgKEZJTEUgKl9fc3RyZWFtKSA7CiMgNDk1ICIvdXNy L2xvY2FsL2luY2x1ZGUvc3RkaW8uaCIgMwpleHRlcm4gaW50IGZnZXRwb3MgKEZJTEUgKl9fcmVz dHJpY3QgX19zdHJlYW0sIGZwb3NfdCAqX19yZXN0cmljdCBfX3BvcykKICAgICAgICAgICAgOwoK ZXh0ZXJuIGludCBmc2V0cG9zIChGSUxFICpfX3N0cmVhbSwgX19jb25zdCBmcG9zX3QgKl9fcG9z KSA7CiMgNTMxICIvdXNyL2xvY2FsL2luY2x1ZGUvc3RkaW8uaCIgMwpleHRlcm4gdm9pZCBjbGVh cmVyciAoRklMRSAqX19zdHJlYW0pIDsKCmV4dGVybiBpbnQgZmVvZiAoRklMRSAqX19zdHJlYW0p IDsKCmV4dGVybiBpbnQgZmVycm9yIChGSUxFICpfX3N0cmVhbSkgOwoKCgpleHRlcm4gdm9pZCBj bGVhcmVycl91bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pIDsKZXh0ZXJuIGludCBmZW9mX3VubG9j a2VkIChGSUxFICpfX3N0cmVhbSkgOwpleHRlcm4gaW50IGZlcnJvcl91bmxvY2tlZCAoRklMRSAq X19zdHJlYW0pIDsKCgoKCmV4dGVybiB2b2lkIHBlcnJvciAoX19jb25zdCBjaGFyICpfX3MpIDsK CgoKCmV4dGVybiBpbnQgc3lzX25lcnI7CmV4dGVybiBfX2NvbnN0IGNoYXIgKl9fY29uc3Qgc3lz X2Vycmxpc3RbXTsKIyA1NjIgIi91c3IvbG9jYWwvaW5jbHVkZS9zdGRpby5oIiAzCmV4dGVybiBp bnQgZmlsZW5vIChGSUxFICpfX3N0cmVhbSkgOwoKCgoKZXh0ZXJuIGludCBmaWxlbm9fdW5sb2Nr ZWQgKEZJTEUgKl9fc3RyZWFtKSA7CgoKCgoKCmV4dGVybiBGSUxFICpwb3BlbiAoX19jb25zdCBj aGFyICpfX2NvbW1hbmQsIF9fY29uc3QgY2hhciAqX19tb2RlcykgOwoKCmV4dGVybiBpbnQgcGNs b3NlIChGSUxFICpfX3N0cmVhbSkgOwoKCgoKCmV4dGVybiBjaGFyICpjdGVybWlkIChjaGFyICpf X3MpIDsKIyA2MDkgIi91c3IvbG9jYWwvaW5jbHVkZS9zdGRpby5oIiAzCmV4dGVybiB2b2lkIGZs b2NrZmlsZSAoRklMRSAqX19zdHJlYW0pIDsKCgoKZXh0ZXJuIGludCBmdHJ5bG9ja2ZpbGUgKEZJ TEUgKl9fc3RyZWFtKSA7CgoKZXh0ZXJuIHZvaWQgZnVubG9ja2ZpbGUgKEZJTEUgKl9fc3RyZWFt KSA7CiMgNjMwICIvdXNyL2xvY2FsL2luY2x1ZGUvc3RkaW8uaCIgMwojIDEgIi91c3IvbG9jYWwv aW5jbHVkZS9iaXRzL3N0ZGlvLmgiIDEgMwojIDMzICIvdXNyL2xvY2FsL2luY2x1ZGUvYml0cy9z dGRpby5oIiAzCmV4dGVybiBfX2lubGluZSBpbnQKdnByaW50ZiAoX19jb25zdCBjaGFyICpfX3Jl c3RyaWN0IF9fZm10LCBfX2dudWNfdmFfbGlzdCBfX2FyZykKewogIHJldHVybiB2ZnByaW50ZiAo c3Rkb3V0LCBfX2ZtdCwgX19hcmcpOwp9CgoKZXh0ZXJuIF9faW5saW5lIGludApnZXRjaGFyICh2 b2lkKQp7CiAgcmV0dXJuIF9JT19nZXRjIChzdGRpbik7Cn0KCgoKCmV4dGVybiBfX2lubGluZSBp bnQKZ2V0Y191bmxvY2tlZCAoRklMRSAqX19mcCkKewogIHJldHVybiAoKF9fZnApLT5fSU9fcmVh ZF9wdHIgPj0gKF9fZnApLT5fSU9fcmVhZF9lbmQgPyBfX3VmbG93IChfX2ZwKSA6ICoodW5zaWdu ZWQgY2hhciAqKSAoX19mcCktPl9JT19yZWFkX3B0cisrKTsKfQoKCmV4dGVybiBfX2lubGluZSBp bnQKZ2V0Y2hhcl91bmxvY2tlZCAodm9pZCkKewogIHJldHVybiAoKHN0ZGluKS0+X0lPX3JlYWRf cHRyID49IChzdGRpbiktPl9JT19yZWFkX2VuZCA/IF9fdWZsb3cgKHN0ZGluKSA6ICoodW5zaWdu ZWQgY2hhciAqKSAoc3RkaW4pLT5fSU9fcmVhZF9wdHIrKyk7Cn0KCgoKCmV4dGVybiBfX2lubGlu ZSBpbnQKcHV0Y2hhciAoaW50IF9fYykKewogIHJldHVybiBfSU9fcHV0YyAoX19jLCBzdGRvdXQp Owp9CgoKCgpleHRlcm4gX19pbmxpbmUgaW50CmZwdXRjX3VubG9ja2VkIChpbnQgX19jLCBGSUxF ICpfX3N0cmVhbSkKewogIHJldHVybiAoKChfX3N0cmVhbSktPl9JT193cml0ZV9wdHIgPj0gKF9f c3RyZWFtKS0+X0lPX3dyaXRlX2VuZCkgPyBfX292ZXJmbG93IChfX3N0cmVhbSwgKHVuc2lnbmVk IGNoYXIpIChfX2MpKSA6ICh1bnNpZ25lZCBjaGFyKSAoKihfX3N0cmVhbSktPl9JT193cml0ZV9w dHIrKyA9IChfX2MpKSk7Cn0KCgoKCgpleHRlcm4gX19pbmxpbmUgaW50CnB1dGNfdW5sb2NrZWQg KGludCBfX2MsIEZJTEUgKl9fc3RyZWFtKQp7CiAgcmV0dXJuICgoKF9fc3RyZWFtKS0+X0lPX3dy aXRlX3B0ciA+PSAoX19zdHJlYW0pLT5fSU9fd3JpdGVfZW5kKSA/IF9fb3ZlcmZsb3cgKF9fc3Ry ZWFtLCAodW5zaWduZWQgY2hhcikgKF9fYykpIDogKHVuc2lnbmVkIGNoYXIpICgqKF9fc3RyZWFt KS0+X0lPX3dyaXRlX3B0cisrID0gKF9fYykpKTsKfQoKCmV4dGVybiBfX2lubGluZSBpbnQKcHV0 Y2hhcl91bmxvY2tlZCAoaW50IF9fYykKewogIHJldHVybiAoKChzdGRvdXQpLT5fSU9fd3JpdGVf cHRyID49IChzdGRvdXQpLT5fSU9fd3JpdGVfZW5kKSA/IF9fb3ZlcmZsb3cgKHN0ZG91dCwgKHVu c2lnbmVkIGNoYXIpIChfX2MpKSA6ICh1bnNpZ25lZCBjaGFyKSAoKihzdGRvdXQpLT5fSU9fd3Jp dGVfcHRyKysgPSAoX19jKSkpOwp9CiMgMTExICIvdXNyL2xvY2FsL2luY2x1ZGUvYml0cy9zdGRp by5oIiAzCmV4dGVybiBfX2lubGluZSBpbnQKZmVvZl91bmxvY2tlZCAoRklMRSAqX19zdHJlYW0p CnsKICByZXR1cm4gKCgoX19zdHJlYW0pLT5fZmxhZ3MgJiAweDEwKSAhPSAwKTsKfQoKCmV4dGVy biBfX2lubGluZSBpbnQKZmVycm9yX3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkKewogIHJldHVy biAoKChfX3N0cmVhbSktPl9mbGFncyAmIDB4MjApICE9IDApOwp9CiMgNjMxICIvdXNyL2xvY2Fs L2luY2x1ZGUvc3RkaW8uaCIgMiAzCiMgMTQgIkJyZWFrRG93bi5jIiAyCiMgMSAiL3Vzci9sb2Nh bC9pbmNsdWRlL3N0cmluZy5oIiAxIDMKIyAyNiAiL3Vzci9sb2NhbC9pbmNsdWRlL3N0cmluZy5o IiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2ZlYXR1cmVzLmgiIDEgMwojIDI3ICIvdXNyL2xv Y2FsL2luY2x1ZGUvc3RyaW5nLmgiIDIgMwoKCgoKCgojIDEgIi91c3IvbG9jYWwvZ2NjLzMuMC40 L2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC40L2luY2x1ZGUvc3RkZGVmLmgiIDEg MwojIDM0ICIvdXNyL2xvY2FsL2luY2x1ZGUvc3RyaW5nLmgiIDIgMwoKCgpleHRlcm4gdm9pZCAq bWVtY3B5ICh2b2lkICpfX3Jlc3RyaWN0IF9fZGVzdCwKICAgICAgICAgICAgICAgICAgICAgX19j b25zdCB2b2lkICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSA7CgoKZXh0ZXJuIHZvaWQg Km1lbW1vdmUgKHZvaWQgKl9fZGVzdCwgX19jb25zdCB2b2lkICpfX3NyYywgc2l6ZV90IF9fbikK ICAgICAgICAgICAgOwoKCgoKCmV4dGVybiB2b2lkICptZW1jY3B5ICh2b2lkICpfX3Jlc3RyaWN0 IF9fZGVzdCwgX19jb25zdCB2b2lkICpfX3Jlc3RyaWN0IF9fc3JjLAogICAgICAgICAgICAgICAg ICAgICAgaW50IF9fYywgc2l6ZV90IF9fbikKICAgICAgICAgICAgOwoKCgoKZXh0ZXJuIHZvaWQg Km1lbXNldCAodm9pZCAqX19zLCBpbnQgX19jLCBzaXplX3QgX19uKSA7CgoKZXh0ZXJuIGludCBt ZW1jbXAgKF9fY29uc3Qgdm9pZCAqX19zMSwgX19jb25zdCB2b2lkICpfX3MyLCBzaXplX3QgX19u KQogICAgICAgICAgICAgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIHZvaWQg Km1lbWNociAoX19jb25zdCB2b2lkICpfX3MsIGludCBfX2MsIHNpemVfdCBfX24pCiAgICAgICAg ICAgICAgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CiMgNzcgIi91c3IvbG9jYWwvaW5jbHVk ZS9zdHJpbmcuaCIgMwpleHRlcm4gY2hhciAqc3RyY3B5IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVz dCwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjKQogICAgICAgICAgICA7CgpleHRlcm4g Y2hhciAqc3RybmNweSAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsCiAgICAgICAgICAgICAgICAg ICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24pIDsKCgpleHRl cm4gY2hhciAqc3RyY2F0IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwgX19jb25zdCBjaGFyICpf X3Jlc3RyaWN0IF9fc3JjKQogICAgICAgICAgICA7CgpleHRlcm4gY2hhciAqc3RybmNhdCAoY2hh ciAqX19yZXN0cmljdCBfX2Rlc3QsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYywKICAg ICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX24pIDsKCgpleHRlcm4gaW50IHN0cmNtcCAoX19j b25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIpCiAgICAgICAgICAgICBfX2F0dHJp YnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBpbnQgc3RybmNtcCAoX19jb25zdCBjaGFyICpf X3MxLCBfX2NvbnN0IGNoYXIgKl9fczIsIHNpemVfdCBfX24pCiAgICAgICAgICAgICBfX2F0dHJp YnV0ZV9fICgoX19wdXJlX18pKTsKCgpleHRlcm4gaW50IHN0cmNvbGwgKF9fY29uc3QgY2hhciAq X19zMSwgX19jb25zdCBjaGFyICpfX3MyKQogICAgICAgICAgICAgX19hdHRyaWJ1dGVfXyAoKF9f cHVyZV9fKSk7CgpleHRlcm4gc2l6ZV90IHN0cnhmcm0gKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0 LAogICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYywg c2l6ZV90IF9fbikgOwojIDEyMCAiL3Vzci9sb2NhbC9pbmNsdWRlL3N0cmluZy5oIiAzCmV4dGVy biBjaGFyICpzdHJkdXAgKF9fY29uc3QgY2hhciAqX19zKSBfX2F0dHJpYnV0ZV9fICgoX19tYWxs b2NfXykpOwojIDE1NSAiL3Vzci9sb2NhbC9pbmNsdWRlL3N0cmluZy5oIiAzCmV4dGVybiBjaGFy ICpzdHJjaHIgKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19jKSBfX2F0dHJpYnV0ZV9fICgoX19w dXJlX18pKTsKCmV4dGVybiBjaGFyICpzdHJyY2hyIChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9f YykgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CiMgMTY3ICIvdXNyL2xvY2FsL2luY2x1ZGUv c3RyaW5nLmgiIDMKZXh0ZXJuIHNpemVfdCBzdHJjc3BuIChfX2NvbnN0IGNoYXIgKl9fcywgX19j b25zdCBjaGFyICpfX3JlamVjdCkKICAgICAgICAgICAgIF9fYXR0cmlidXRlX18gKChfX3B1cmVf XykpOwoKCmV4dGVybiBzaXplX3Qgc3Ryc3BuIChfX2NvbnN0IGNoYXIgKl9fcywgX19jb25zdCBj aGFyICpfX2FjY2VwdCkKICAgICAgICAgICAgIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoK ZXh0ZXJuIGNoYXIgKnN0cnBicmsgKF9fY29uc3QgY2hhciAqX19zLCBfX2NvbnN0IGNoYXIgKl9f YWNjZXB0KQogICAgICAgICAgICAgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4g Y2hhciAqc3Ryc3RyIChfX2NvbnN0IGNoYXIgKl9faGF5c3RhY2ssIF9fY29uc3QgY2hhciAqX19u ZWVkbGUpCiAgICAgICAgICAgICBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKIyAxODcgIi91 c3IvbG9jYWwvaW5jbHVkZS9zdHJpbmcuaCIgMwpleHRlcm4gY2hhciAqc3RydG9rIChjaGFyICpf X3Jlc3RyaWN0IF9fcywgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZGVsaW0pCiAgICAgICAg ICAgIDsKCgoKZXh0ZXJuIGNoYXIgKl9fc3RydG9rX3IgKGNoYXIgKl9fcmVzdHJpY3QgX19zLAog ICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZGVsaW0s CiAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX3NhdmVfcHRyKSA7 CgpleHRlcm4gY2hhciAqc3RydG9rX3IgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBfX2NvbnN0IGNo YXIgKl9fcmVzdHJpY3QgX19kZWxpbSwKICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19y ZXN0cmljdCBfX3NhdmVfcHRyKSA7CiMgMjE4ICIvdXNyL2xvY2FsL2luY2x1ZGUvc3RyaW5nLmgi IDMKZXh0ZXJuIHNpemVfdCBzdHJsZW4gKF9fY29uc3QgY2hhciAqX19zKSBfX2F0dHJpYnV0ZV9f ICgoX19wdXJlX18pKTsKIyAyMjkgIi91c3IvbG9jYWwvaW5jbHVkZS9zdHJpbmcuaCIgMwpleHRl cm4gY2hhciAqc3RyZXJyb3IgKGludCBfX2Vycm51bSkgOwoKCgpleHRlcm4gY2hhciAqc3RyZXJy b3JfciAoaW50IF9fZXJybnVtLCBjaGFyICpfX2J1Ziwgc2l6ZV90IF9fYnVmbGVuKSA7CgoKCgpl eHRlcm4gdm9pZCBfX2J6ZXJvICh2b2lkICpfX3MsIHNpemVfdCBfX24pIDsKCgoKZXh0ZXJuIHZv aWQgYmNvcHkgKF9fY29uc3Qgdm9pZCAqX19zcmMsIHZvaWQgKl9fZGVzdCwgc2l6ZV90IF9fbikg OwoKCmV4dGVybiB2b2lkIGJ6ZXJvICh2b2lkICpfX3MsIHNpemVfdCBfX24pIDsKCgpleHRlcm4g aW50IGJjbXAgKF9fY29uc3Qgdm9pZCAqX19zMSwgX19jb25zdCB2b2lkICpfX3MyLCBzaXplX3Qg X19uKQogICAgICAgICAgICAgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIGNo YXIgKmluZGV4IChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYykgX19hdHRyaWJ1dGVfXyAoKF9f cHVyZV9fKSk7CgoKZXh0ZXJuIGNoYXIgKnJpbmRleCAoX19jb25zdCBjaGFyICpfX3MsIGludCBf X2MpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgpleHRlcm4gaW50IGZmcyAoaW50IF9f aSkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwojIDI3MiAiL3Vzci9sb2NhbC9pbmNsdWRl L3N0cmluZy5oIiAzCmV4dGVybiBpbnQgc3RyY2FzZWNtcCAoX19jb25zdCBjaGFyICpfX3MxLCBf X2NvbnN0IGNoYXIgKl9fczIpCiAgICAgICAgICAgICBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18p KTsKCgpleHRlcm4gaW50IHN0cm5jYXNlY21wIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3Qg Y2hhciAqX19zMiwgc2l6ZV90IF9fbikKICAgICAgICAgICAgIF9fYXR0cmlidXRlX18gKChfX3B1 cmVfXykpOwojIDI5NCAiL3Vzci9sb2NhbC9pbmNsdWRlL3N0cmluZy5oIiAzCmV4dGVybiBjaGFy ICpzdHJzZXAgKGNoYXIgKipfX3Jlc3RyaWN0IF9fc3RyaW5ncCwKICAgICAgICAgICAgICAgICAg ICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZGVsaW0pIDsKIyAzNTcgIi91c3IvbG9jYWwv aW5jbHVkZS9zdHJpbmcuaCIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9iaXRzL3N0cmluZy5o IiAxIDMKIyAzNTggIi91c3IvbG9jYWwvaW5jbHVkZS9zdHJpbmcuaCIgMiAzCgoKIyAxICIvdXNy L2xvY2FsL2luY2x1ZGUvYml0cy9zdHJpbmcyLmgiIDEgMwojIDUyICIvdXNyL2xvY2FsL2luY2x1 ZGUvYml0cy9zdHJpbmcyLmgiIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZW5kaWFuLmgiIDEg MwojIDUzICIvdXNyL2xvY2FsL2luY2x1ZGUvYml0cy9zdHJpbmcyLmgiIDIgMwojIDEgIi91c3Iv bG9jYWwvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDEgMwojIDU0ICIvdXNyL2xvY2FsL2luY2x1ZGUv Yml0cy9zdHJpbmcyLmgiIDIgMwojIDM3NyAiL3Vzci9sb2NhbC9pbmNsdWRlL2JpdHMvc3RyaW5n Mi5oIiAzCmV4dGVybiB2b2lkICpfX3Jhd21lbWNociAoY29uc3Qgdm9pZCAqX19zLCBpbnQgX19j KTsKIyA0MDUgIi91c3IvbG9jYWwvaW5jbHVkZS9iaXRzL3N0cmluZzIuaCIgMwpleHRlcm4gX19p bmxpbmUgY2hhciAqX19zdHJjcHlfc21hbGwgKGNoYXIgKiwgX191aW50MTZfdCwgX191aW50MTZf dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3VpbnQzMl90LCBfX3Vp bnQzMl90LCBzaXplX3QpOwpleHRlcm4gX19pbmxpbmUgY2hhciAqCl9fc3RyY3B5X3NtYWxsIChj aGFyICpfX2Rlc3QsCiAgICAgICAgICAgICAgICBfX3VpbnQxNl90IF9fc3JjMF8yLCBfX3VpbnQx Nl90IF9fc3JjNF8yLAogICAgICAgICAgICAgICAgX191aW50MzJfdCBfX3NyYzBfNCwgX191aW50 MzJfdCBfX3NyYzRfNCwKICAgICAgICAgICAgICAgIHNpemVfdCBfX3NyY2xlbikKewogIHVuaW9u IHsKICAgIF9fdWludDMyX3QgX191aTsKICAgIF9fdWludDE2X3QgX191c2k7CiAgICB1bnNpZ25l ZCBjaGFyIF9fdWM7CiAgfSAqX191ID0gKHZvaWQgKikgX19kZXN0OwogIHN3aXRjaCAoKHVuc2ln bmVkIGludCkgX19zcmNsZW4pCiAgICB7CiAgICBjYXNlIDE6CiAgICAgIF9fdS0+X191YyA9ICdc MCc7CiAgICAgIGJyZWFrOwogICAgY2FzZSAyOgogICAgICBfX3UtPl9fdXNpID0gX19zcmMwXzI7 CiAgICAgIGJyZWFrOwogICAgY2FzZSAzOgogICAgICBfX3UtPl9fdXNpID0gX19zcmMwXzI7CiAg ICAgIF9fdSA9IF9fZXh0ZW5zaW9uX18gKCh2b2lkICopIF9fdSArIDIpOwogICAgICBfX3UtPl9f dWMgPSAnXDAnOwogICAgICBicmVhazsKICAgIGNhc2UgNDoKICAgICAgX191LT5fX3VpID0gX19z cmMwXzQ7CiAgICAgIGJyZWFrOwogICAgY2FzZSA1OgogICAgICBfX3UtPl9fdWkgPSBfX3NyYzBf NDsKICAgICAgX191ID0gX19leHRlbnNpb25fXyAoKHZvaWQgKikgX191ICsgNCk7CiAgICAgIF9f dS0+X191YyA9ICdcMCc7CiAgICAgIGJyZWFrOwogICAgY2FzZSA2OgogICAgICBfX3UtPl9fdWkg PSBfX3NyYzBfNDsKICAgICAgX191ID0gX19leHRlbnNpb25fXyAoKHZvaWQgKikgX191ICsgNCk7 CiAgICAgIF9fdS0+X191c2kgPSBfX3NyYzRfMjsKICAgICAgYnJlYWs7CiAgICBjYXNlIDc6CiAg ICAgIF9fdS0+X191aSA9IF9fc3JjMF80OwogICAgICBfX3UgPSBfX2V4dGVuc2lvbl9fICgodm9p ZCAqKSBfX3UgKyA0KTsKICAgICAgX191LT5fX3VzaSA9IF9fc3JjNF8yOwogICAgICBfX3UgPSBf X2V4dGVuc2lvbl9fICgodm9pZCAqKSBfX3UgKyAyKTsKICAgICAgX191LT5fX3VjID0gJ1wwJzsK ICAgICAgYnJlYWs7CiAgICBjYXNlIDg6CiAgICAgIF9fdS0+X191aSA9IF9fc3JjMF80OwogICAg ICBfX3UgPSBfX2V4dGVuc2lvbl9fICgodm9pZCAqKSBfX3UgKyA0KTsKICAgICAgX191LT5fX3Vp ID0gX19zcmM0XzQ7CiAgICAgIGJyZWFrOwogICAgfQogIHJldHVybiBfX2Rlc3Q7Cn0KIyA4OTMg Ii91c3IvbG9jYWwvaW5jbHVkZS9iaXRzL3N0cmluZzIuaCIgMwpleHRlcm4gX19pbmxpbmUgc2l6 ZV90IF9fc3RyY3Nwbl9jMSAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX3JlamVjdCk7CmV4dGVy biBfX2lubGluZSBzaXplX3QKX19zdHJjc3BuX2MxIChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9f cmVqZWN0KQp7CiAgcmVnaXN0ZXIgc2l6ZV90IF9fcmVzdWx0ID0gMDsKICB3aGlsZSAoX19zW19f cmVzdWx0XSAhPSAnXDAnICYmIF9fc1tfX3Jlc3VsdF0gIT0gX19yZWplY3QpCiAgICArK19fcmVz dWx0OwogIHJldHVybiBfX3Jlc3VsdDsKfQoKZXh0ZXJuIF9faW5saW5lIHNpemVfdCBfX3N0cmNz cG5fYzIgKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19yZWplY3QxLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgaW50IF9fcmVqZWN0Mik7CmV4dGVybiBfX2lubGluZSBzaXpl X3QKX19zdHJjc3BuX2MyIChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fcmVqZWN0MSwgaW50IF9f cmVqZWN0MikKewogIHJlZ2lzdGVyIHNpemVfdCBfX3Jlc3VsdCA9IDA7CiAgd2hpbGUgKF9fc1tf X3Jlc3VsdF0gIT0gJ1wwJyAmJiBfX3NbX19yZXN1bHRdICE9IF9fcmVqZWN0MQogICAgICAgICAm JiBfX3NbX19yZXN1bHRdICE9IF9fcmVqZWN0MikKICAgICsrX19yZXN1bHQ7CiAgcmV0dXJuIF9f cmVzdWx0Owp9CgpleHRlcm4gX19pbmxpbmUgc2l6ZV90IF9fc3RyY3Nwbl9jMyAoX19jb25zdCBj aGFyICpfX3MsIGludCBfX3JlamVjdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBpbnQgX19yZWplY3QyLCBpbnQgX19yZWplY3QzKTsKZXh0ZXJuIF9faW5saW5lIHNpemVf dApfX3N0cmNzcG5fYzMgKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19yZWplY3QxLCBpbnQgX19y ZWplY3QyLAogICAgICAgICAgICAgIGludCBfX3JlamVjdDMpCnsKICByZWdpc3RlciBzaXplX3Qg X19yZXN1bHQgPSAwOwogIHdoaWxlIChfX3NbX19yZXN1bHRdICE9ICdcMCcgJiYgX19zW19fcmVz dWx0XSAhPSBfX3JlamVjdDEKICAgICAgICAgJiYgX19zW19fcmVzdWx0XSAhPSBfX3JlamVjdDIg JiYgX19zW19fcmVzdWx0XSAhPSBfX3JlamVjdDMpCiAgICArK19fcmVzdWx0OwogIHJldHVybiBf X3Jlc3VsdDsKfQojIDk1MCAiL3Vzci9sb2NhbC9pbmNsdWRlL2JpdHMvc3RyaW5nMi5oIiAzCmV4 dGVybiBfX2lubGluZSBzaXplX3QgX19zdHJzcG5fYzEgKF9fY29uc3QgY2hhciAqX19zLCBpbnQg X19hY2NlcHQpOwpleHRlcm4gX19pbmxpbmUgc2l6ZV90Cl9fc3Ryc3BuX2MxIChfX2NvbnN0IGNo YXIgKl9fcywgaW50IF9fYWNjZXB0KQp7CiAgcmVnaXN0ZXIgc2l6ZV90IF9fcmVzdWx0ID0gMDsK CiAgd2hpbGUgKF9fc1tfX3Jlc3VsdF0gPT0gX19hY2NlcHQpCiAgICArK19fcmVzdWx0OwogIHJl dHVybiBfX3Jlc3VsdDsKfQoKZXh0ZXJuIF9faW5saW5lIHNpemVfdCBfX3N0cnNwbl9jMiAoX19j b25zdCBjaGFyICpfX3MsIGludCBfX2FjY2VwdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGludCBfX2FjY2VwdDIpOwpleHRlcm4gX19pbmxpbmUgc2l6ZV90Cl9fc3Ryc3Bu X2MyIChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYWNjZXB0MSwgaW50IF9fYWNjZXB0MikKewog IHJlZ2lzdGVyIHNpemVfdCBfX3Jlc3VsdCA9IDA7CgogIHdoaWxlIChfX3NbX19yZXN1bHRdID09 IF9fYWNjZXB0MSB8fCBfX3NbX19yZXN1bHRdID09IF9fYWNjZXB0MikKICAgICsrX19yZXN1bHQ7 CiAgcmV0dXJuIF9fcmVzdWx0Owp9CgpleHRlcm4gX19pbmxpbmUgc2l6ZV90IF9fc3Ryc3BuX2Mz IChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYWNjZXB0MSwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgaW50IF9fYWNjZXB0MiwgaW50IF9fYWNjZXB0Myk7CmV4dGVybiBfX2lu bGluZSBzaXplX3QKX19zdHJzcG5fYzMgKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19hY2NlcHQx LCBpbnQgX19hY2NlcHQyLCBpbnQgX19hY2NlcHQzKQp7CiAgcmVnaXN0ZXIgc2l6ZV90IF9fcmVz dWx0ID0gMDsKCiAgd2hpbGUgKF9fc1tfX3Jlc3VsdF0gPT0gX19hY2NlcHQxIHx8IF9fc1tfX3Jl c3VsdF0gPT0gX19hY2NlcHQyCiAgICAgICAgIHx8IF9fc1tfX3Jlc3VsdF0gPT0gX19hY2NlcHQz KQogICAgKytfX3Jlc3VsdDsKICByZXR1cm4gX19yZXN1bHQ7Cn0KIyAxMDA3ICIvdXNyL2xvY2Fs L2luY2x1ZGUvYml0cy9zdHJpbmcyLmgiIDMKZXh0ZXJuIF9faW5saW5lIGNoYXIgKl9fc3RycGJy a19jMiAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX2FjY2VwdDEsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBpbnQgX19hY2NlcHQyKTsKZXh0ZXJuIF9faW5saW5lIGNoYXIg KgpfX3N0cnBicmtfYzIgKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19hY2NlcHQxLCBpbnQgX19h Y2NlcHQyKQp7CgogIHdoaWxlICgqX19zICE9ICdcMCcgJiYgKl9fcyAhPSBfX2FjY2VwdDEgJiYg Kl9fcyAhPSBfX2FjY2VwdDIpCiAgICArK19fczsKICByZXR1cm4gKl9fcyA9PSAnXDAnID8gKCh2 b2lkICopMCkgOiAoY2hhciAqKSAoc2l6ZV90KSBfX3M7Cn0KCmV4dGVybiBfX2lubGluZSBjaGFy ICpfX3N0cnBicmtfYzMgKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19hY2NlcHQxLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYWNjZXB0MiwgaW50IF9fYWNjZXB0 Myk7CmV4dGVybiBfX2lubGluZSBjaGFyICoKX19zdHJwYnJrX2MzIChfX2NvbnN0IGNoYXIgKl9f cywgaW50IF9fYWNjZXB0MSwgaW50IF9fYWNjZXB0MiwKICAgICAgICAgICAgICBpbnQgX19hY2Nl cHQzKQp7CgogIHdoaWxlICgqX19zICE9ICdcMCcgJiYgKl9fcyAhPSBfX2FjY2VwdDEgJiYgKl9f cyAhPSBfX2FjY2VwdDIKICAgICAgICAgJiYgKl9fcyAhPSBfX2FjY2VwdDMpCiAgICArK19fczsK ICByZXR1cm4gKl9fcyA9PSAnXDAnID8gKCh2b2lkICopMCkgOiAoY2hhciAqKSAoc2l6ZV90KSBf X3M7Cn0KIyAxMDU5ICIvdXNyL2xvY2FsL2luY2x1ZGUvYml0cy9zdHJpbmcyLmgiIDMKZXh0ZXJu IF9faW5saW5lIGNoYXIgKl9fc3RydG9rX3JfMWMgKGNoYXIgKl9fcywgY2hhciBfX3NlcCwgY2hh ciAqKl9fbmV4dHApOwpleHRlcm4gX19pbmxpbmUgY2hhciAqCl9fc3RydG9rX3JfMWMgKGNoYXIg Kl9fcywgY2hhciBfX3NlcCwgY2hhciAqKl9fbmV4dHApCnsKICBjaGFyICpfX3Jlc3VsdDsKICBp ZiAoX19zID09ICgodm9pZCAqKTApKQogICAgX19zID0gKl9fbmV4dHA7CiAgd2hpbGUgKCpfX3Mg PT0gX19zZXApCiAgICArK19fczsKICBfX3Jlc3VsdCA9ICgodm9pZCAqKTApOwogIGlmICgqX19z ICE9ICdcMCcpCiAgICB7CiAgICAgIF9fcmVzdWx0ID0gX19zKys7CiAgICAgIHdoaWxlICgqX19z ICE9ICdcMCcpCiAgICAgICAgaWYgKCpfX3MrKyA9PSBfX3NlcCkKICAgICAgICAgIHsKICAgICAg ICAgICAgX19zWy0xXSA9ICdcMCc7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfQogICAg ICAqX19uZXh0cCA9IF9fczsKICAgIH0KICByZXR1cm4gX19yZXN1bHQ7Cn0KIyAxMDkxICIvdXNy L2xvY2FsL2luY2x1ZGUvYml0cy9zdHJpbmcyLmgiIDMKZXh0ZXJuIGNoYXIgKl9fc3Ryc2VwX2cg KGNoYXIgKipfX3N0cmluZ3AsIF9fY29uc3QgY2hhciAqX19kZWxpbSk7CiMgMTEwOSAiL3Vzci9s b2NhbC9pbmNsdWRlL2JpdHMvc3RyaW5nMi5oIiAzCmV4dGVybiBfX2lubGluZSBjaGFyICpfX3N0 cnNlcF8xYyAoY2hhciAqKl9fcywgY2hhciBfX3JlamVjdCk7CmV4dGVybiBfX2lubGluZSBjaGFy ICoKX19zdHJzZXBfMWMgKGNoYXIgKipfX3MsIGNoYXIgX19yZWplY3QpCnsKICByZWdpc3RlciBj aGFyICpfX3JldHZhbCA9ICpfX3M7CiAgaWYgKF9fcmV0dmFsICE9ICgodm9pZCAqKTApICYmICgq X19zID0gKF9fZXh0ZW5zaW9uX18gKF9fYnVpbHRpbl9jb25zdGFudF9wIChfX3JlamVjdCkgJiYg KF9fcmVqZWN0KSA9PSAnXDAnID8gKGNoYXIgKikgX19yYXdtZW1jaHIgKF9fcmV0dmFsLCBfX3Jl amVjdCkgOiBzdHJjaHIgKF9fcmV0dmFsLCBfX3JlamVjdCkpKSkgIT0gKCh2b2lkICopMCkpCiAg ICAqKCpfX3MpKysgPSAnXDAnOwogIHJldHVybiBfX3JldHZhbDsKfQoKZXh0ZXJuIF9faW5saW5l IGNoYXIgKl9fc3Ryc2VwXzJjIChjaGFyICoqX19zLCBjaGFyIF9fcmVqZWN0MSwgY2hhciBfX3Jl amVjdDIpOwpleHRlcm4gX19pbmxpbmUgY2hhciAqCl9fc3Ryc2VwXzJjIChjaGFyICoqX19zLCBj aGFyIF9fcmVqZWN0MSwgY2hhciBfX3JlamVjdDIpCnsKICByZWdpc3RlciBjaGFyICpfX3JldHZh bCA9ICpfX3M7CiAgaWYgKF9fcmV0dmFsICE9ICgodm9pZCAqKTApKQogICAgewogICAgICByZWdp c3RlciBjaGFyICpfX2NwID0gX19yZXR2YWw7CiAgICAgIHdoaWxlICgxKQogICAgICAgIHsKICAg ICAgICAgIGlmICgqX19jcCA9PSAnXDAnKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX19j cCA9ICgodm9pZCAqKTApOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAg IGlmICgqX19jcCA9PSBfX3JlamVjdDEgfHwgKl9fY3AgPT0gX19yZWplY3QyKQogICAgICAgICAg ICB7CiAgICAgICAgICAgICAgKl9fY3ArKyA9ICdcMCc7CiAgICAgICAgICAgICAgYnJlYWs7CiAg ICAgICAgICAgIH0KICAgICAgICAgICsrX19jcDsKICAgICAgICB9CiAgICAgICpfX3MgPSBfX2Nw OwogICAgfQogIHJldHVybiBfX3JldHZhbDsKfQoKZXh0ZXJuIF9faW5saW5lIGNoYXIgKl9fc3Ry c2VwXzNjIChjaGFyICoqX19zLCBjaGFyIF9fcmVqZWN0MSwgY2hhciBfX3JlamVjdDIsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciBfX3JlamVjdDMpOwpleHRlcm4gX19p bmxpbmUgY2hhciAqCl9fc3Ryc2VwXzNjIChjaGFyICoqX19zLCBjaGFyIF9fcmVqZWN0MSwgY2hh ciBfX3JlamVjdDIsIGNoYXIgX19yZWplY3QzKQp7CiAgcmVnaXN0ZXIgY2hhciAqX19yZXR2YWwg PSAqX19zOwogIGlmIChfX3JldHZhbCAhPSAoKHZvaWQgKikwKSkKICAgIHsKICAgICAgcmVnaXN0 ZXIgY2hhciAqX19jcCA9IF9fcmV0dmFsOwogICAgICB3aGlsZSAoMSkKICAgICAgICB7CiAgICAg ICAgICBpZiAoKl9fY3AgPT0gJ1wwJykKICAgICAgICAgICAgewogICAgICAgICAgICAgIF9fY3Ag PSAoKHZvaWQgKikwKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICBp ZiAoKl9fY3AgPT0gX19yZWplY3QxIHx8ICpfX2NwID09IF9fcmVqZWN0MiB8fCAqX19jcCA9PSBf X3JlamVjdDMpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAqX19jcCsrID0gJ1wwJzsKICAg ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgKytfX2NwOwogICAgICAg IH0KICAgICAgKl9fcyA9IF9fY3A7CiAgICB9CiAgcmV0dXJuIF9fcmV0dmFsOwp9CiMgMTE4NSAi L3Vzci9sb2NhbC9pbmNsdWRlL2JpdHMvc3RyaW5nMi5oIiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNs dWRlL3N0ZGxpYi5oIiAxIDMKIyAxMTg2ICIvdXNyL2xvY2FsL2luY2x1ZGUvYml0cy9zdHJpbmcy LmgiIDIgMwoKCgoKZXh0ZXJuIGNoYXIgKl9fc3RyZHVwIChfX2NvbnN0IGNoYXIgKl9fc3RyaW5n KSBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwojIDEyMDkgIi91c3IvbG9jYWwvaW5jbHVk ZS9iaXRzL3N0cmluZzIuaCIgMwpleHRlcm4gY2hhciAqX19zdHJuZHVwIChfX2NvbnN0IGNoYXIg Kl9fc3RyaW5nLCBzaXplX3QgX19uKQogICAgICAgICAgICAgX19hdHRyaWJ1dGVfXyAoKF9fbWFs bG9jX18pKTsKIyAzNjEgIi91c3IvbG9jYWwvaW5jbHVkZS9zdHJpbmcuaCIgMiAzCiMgMTUgIkJy ZWFrRG93bi5jIiAyCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2N0eXBlLmgiIDEgMwojIDI2ICIv dXNyL2xvY2FsL2luY2x1ZGUvY3R5cGUuaCIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9mZWF0 dXJlcy5oIiAxIDMKIyAyNyAiL3Vzci9sb2NhbC9pbmNsdWRlL2N0eXBlLmgiIDIgMwojIDEgIi91 c3IvbG9jYWwvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDEgMwojIDI4ICIvdXNyL2xvY2FsL2luY2x1 ZGUvY3R5cGUuaCIgMiAzCiMgNDAgIi91c3IvbG9jYWwvaW5jbHVkZS9jdHlwZS5oIiAzCiMgMSAi L3Vzci9sb2NhbC9pbmNsdWRlL2VuZGlhbi5oIiAxIDMKIyA0MSAiL3Vzci9sb2NhbC9pbmNsdWRl L2N0eXBlLmgiIDIgMwoKCgoKCgplbnVtCnsKICBfSVN1cHBlciA9ICgoMCkgPCA4ID8gKCgxIDw8 ICgwKSkgPDwgOCkgOiAoKDEgPDwgKDApKSA+PiA4KSksCiAgX0lTbG93ZXIgPSAoKDEpIDwgOCA/ ICgoMSA8PCAoMSkpIDw8IDgpIDogKCgxIDw8ICgxKSkgPj4gOCkpLAogIF9JU2FscGhhID0gKCgy KSA8IDggPyAoKDEgPDwgKDIpKSA8PCA4KSA6ICgoMSA8PCAoMikpID4+IDgpKSwKICBfSVNkaWdp dCA9ICgoMykgPCA4ID8gKCgxIDw8ICgzKSkgPDwgOCkgOiAoKDEgPDwgKDMpKSA+PiA4KSksCiAg X0lTeGRpZ2l0ID0gKCg0KSA8IDggPyAoKDEgPDwgKDQpKSA8PCA4KSA6ICgoMSA8PCAoNCkpID4+ IDgpKSwKICBfSVNzcGFjZSA9ICgoNSkgPCA4ID8gKCgxIDw8ICg1KSkgPDwgOCkgOiAoKDEgPDwg KDUpKSA+PiA4KSksCiAgX0lTcHJpbnQgPSAoKDYpIDwgOCA/ICgoMSA8PCAoNikpIDw8IDgpIDog KCgxIDw8ICg2KSkgPj4gOCkpLAogIF9JU2dyYXBoID0gKCg3KSA8IDggPyAoKDEgPDwgKDcpKSA8 PCA4KSA6ICgoMSA8PCAoNykpID4+IDgpKSwKICBfSVNibGFuayA9ICgoOCkgPCA4ID8gKCgxIDw8 ICg4KSkgPDwgOCkgOiAoKDEgPDwgKDgpKSA+PiA4KSksCiAgX0lTY250cmwgPSAoKDkpIDwgOCA/ ICgoMSA8PCAoOSkpIDw8IDgpIDogKCgxIDw8ICg5KSkgPj4gOCkpLAogIF9JU3B1bmN0ID0gKCgx MCkgPCA4ID8gKCgxIDw8ICgxMCkpIDw8IDgpIDogKCgxIDw8ICgxMCkpID4+IDgpKSwKICBfSVNh bG51bSA9ICgoMTEpIDwgOCA/ICgoMSA8PCAoMTEpKSA8PCA4KSA6ICgoMSA8PCAoMTEpKSA+PiA4 KSkKfTsKIyA3NSAiL3Vzci9sb2NhbC9pbmNsdWRlL2N0eXBlLmgiIDMKZXh0ZXJuIF9fY29uc3Qg dW5zaWduZWQgc2hvcnQgaW50ICpfX2N0eXBlX2I7CmV4dGVybiBfX2NvbnN0IF9faW50MzJfdCAq X19jdHlwZV90b2xvd2VyOwpleHRlcm4gX19jb25zdCBfX2ludDMyX3QgKl9fY3R5cGVfdG91cHBl cjsKIyA5MSAiL3Vzci9sb2NhbC9pbmNsdWRlL2N0eXBlLmgiIDMKZXh0ZXJuIGludCBpc2FsbnVt IChpbnQpIDsKZXh0ZXJuIGludCBpc2FscGhhIChpbnQpIDsKZXh0ZXJuIGludCBpc2NudHJsIChp bnQpIDsKZXh0ZXJuIGludCBpc2RpZ2l0IChpbnQpIDsKZXh0ZXJuIGludCBpc2xvd2VyIChpbnQp IDsKZXh0ZXJuIGludCBpc2dyYXBoIChpbnQpIDsKZXh0ZXJuIGludCBpc3ByaW50IChpbnQpIDsK ZXh0ZXJuIGludCBpc3B1bmN0IChpbnQpIDsKZXh0ZXJuIGludCBpc3NwYWNlIChpbnQpIDsKZXh0 ZXJuIGludCBpc3VwcGVyIChpbnQpIDsKZXh0ZXJuIGludCBpc3hkaWdpdCAoaW50KSA7CgoKCgoK CgpleHRlcm4gaW50IHRvbG93ZXIgKGludCBfX2MpIDsKCgpleHRlcm4gaW50IHRvdXBwZXIgKGlu dCBfX2MpIDsKCgoKCgoKZXh0ZXJuIGludCBpc2FzY2lpIChpbnQgX19jKSA7CgoKCmV4dGVybiBp bnQgdG9hc2NpaSAoaW50IF9fYykgOwoKCgpleHRlcm4gaW50IF90b3VwcGVyIChpbnQpIDsKZXh0 ZXJuIGludCBfdG9sb3dlciAoaW50KSA7CiMgMTY3ICIvdXNyL2xvY2FsL2luY2x1ZGUvY3R5cGUu aCIgMwpleHRlcm4gX19pbmxpbmUgaW50CnRvbG93ZXIgKGludCBfX2MpCnsKICByZXR1cm4gX19j ID49IC0xMjggJiYgX19jIDwgMjU2ID8gX19jdHlwZV90b2xvd2VyW19fY10gOiBfX2M7Cn0KCmV4 dGVybiBfX2lubGluZSBpbnQKdG91cHBlciAoaW50IF9fYykKewogIHJldHVybiBfX2MgPj0gLTEy OCAmJiBfX2MgPCAyNTYgPyBfX2N0eXBlX3RvdXBwZXJbX19jXSA6IF9fYzsKfQojIDE2ICJCcmVh a0Rvd24uYyIgMgojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9zaWduYWwuaCIgMSAzCiMgMjkgIi91 c3IvbG9jYWwvaW5jbHVkZS9zaWduYWwuaCIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9mZWF0 dXJlcy5oIiAxIDMKIyAzMCAiL3Vzci9sb2NhbC9pbmNsdWRlL3NpZ25hbC5oIiAyIDMKCgoKIyAx ICIvdXNyL2xvY2FsL2luY2x1ZGUvYml0cy9zaWdzZXQuaCIgMSAzCiMgMTAzICIvdXNyL2xvY2Fs L2luY2x1ZGUvYml0cy9zaWdzZXQuaCIgMwpleHRlcm4gaW50IF9fc2lnaXNtZW1iZXIgKF9fY29u c3QgX19zaWdzZXRfdCAqLCBpbnQpOwpleHRlcm4gaW50IF9fc2lnYWRkc2V0IChfX3NpZ3NldF90 ICosIGludCk7CmV4dGVybiBpbnQgX19zaWdkZWxzZXQgKF9fc2lnc2V0X3QgKiwgaW50KTsKIyAx MTcgIi91c3IvbG9jYWwvaW5jbHVkZS9iaXRzL3NpZ3NldC5oIiAzCmV4dGVybiBfX2lubGluZSBp bnQgX19zaWdpc21lbWJlciAoX19jb25zdCBfX3NpZ3NldF90ICpfX3NldCwgaW50IF9fc2lnKSB7 IHVuc2lnbmVkIGxvbmcgaW50IF9fbWFzayA9ICgoKHVuc2lnbmVkIGxvbmcgaW50KSAxKSA8PCAo KChfX3NpZykgLSAxKSAlICg4ICogc2l6ZW9mICh1bnNpZ25lZCBsb25nIGludCkpKSk7IHVuc2ln bmVkIGxvbmcgaW50IF9fd29yZCA9ICgoKF9fc2lnKSAtIDEpIC8gKDggKiBzaXplb2YgKHVuc2ln bmVkIGxvbmcgaW50KSkpOyByZXR1cm4gKF9fc2V0LT5fX3ZhbFtfX3dvcmRdICYgX19tYXNrKSA/ IDEgOiAwOyB9CmV4dGVybiBfX2lubGluZSBpbnQgX19zaWdhZGRzZXQgKCBfX3NpZ3NldF90ICpf X3NldCwgaW50IF9fc2lnKSB7IHVuc2lnbmVkIGxvbmcgaW50IF9fbWFzayA9ICgoKHVuc2lnbmVk IGxvbmcgaW50KSAxKSA8PCAoKChfX3NpZykgLSAxKSAlICg4ICogc2l6ZW9mICh1bnNpZ25lZCBs b25nIGludCkpKSk7IHVuc2lnbmVkIGxvbmcgaW50IF9fd29yZCA9ICgoKF9fc2lnKSAtIDEpIC8g KDggKiBzaXplb2YgKHVuc2lnbmVkIGxvbmcgaW50KSkpOyByZXR1cm4gKChfX3NldC0+X192YWxb X193b3JkXSB8PSBfX21hc2spLCAwKTsgfQpleHRlcm4gX19pbmxpbmUgaW50IF9fc2lnZGVsc2V0 ICggX19zaWdzZXRfdCAqX19zZXQsIGludCBfX3NpZykgeyB1bnNpZ25lZCBsb25nIGludCBfX21h c2sgPSAoKCh1bnNpZ25lZCBsb25nIGludCkgMSkgPDwgKCgoX19zaWcpIC0gMSkgJSAoOCAqIHNp emVvZiAodW5zaWduZWQgbG9uZyBpbnQpKSkpOyB1bnNpZ25lZCBsb25nIGludCBfX3dvcmQgPSAo KChfX3NpZykgLSAxKSAvICg4ICogc2l6ZW9mICh1bnNpZ25lZCBsb25nIGludCkpKTsgcmV0dXJu ICgoX19zZXQtPl9fdmFsW19fd29yZF0gJj0gfl9fbWFzayksIDApOyB9CiMgMzQgIi91c3IvbG9j YWwvaW5jbHVkZS9zaWduYWwuaCIgMiAzCgoKCgoKCnR5cGVkZWYgX19zaWdfYXRvbWljX3Qgc2ln X2F0b21pY190OwojIDU1ICIvdXNyL2xvY2FsL2luY2x1ZGUvc2lnbmFsLmgiIDMKIyAxICIvdXNy L2xvY2FsL2luY2x1ZGUvYml0cy90eXBlcy5oIiAxIDMKIyA1NiAiL3Vzci9sb2NhbC9pbmNsdWRl L3NpZ25hbC5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvYml0cy9zaWdudW0uaCIgMSAz CiMgNTcgIi91c3IvbG9jYWwvaW5jbHVkZS9zaWduYWwuaCIgMiAzCiMgNzEgIi91c3IvbG9jYWwv aW5jbHVkZS9zaWduYWwuaCIgMwp0eXBlZGVmIHZvaWQgKCpfX3NpZ2hhbmRsZXJfdCkgKGludCk7 CgoKCgpleHRlcm4gX19zaWdoYW5kbGVyX3QgX19zeXN2X3NpZ25hbCAoaW50IF9fc2lnLCBfX3Np Z2hhbmRsZXJfdCBfX2hhbmRsZXIpCiAgICAgICAgICAgIDsKIyA4NyAiL3Vzci9sb2NhbC9pbmNs dWRlL3NpZ25hbC5oIiAzCmV4dGVybiBfX3NpZ2hhbmRsZXJfdCBzaWduYWwgKGludCBfX3NpZywg X19zaWdoYW5kbGVyX3QgX19oYW5kbGVyKSA7CiMgMTEwICIvdXNyL2xvY2FsL2luY2x1ZGUvc2ln bmFsLmgiIDMKZXh0ZXJuIGludCBraWxsIChfX3BpZF90IF9fcGlkLCBpbnQgX19zaWcpIDsKCgoK CgoKZXh0ZXJuIGludCBraWxscGcgKF9fcGlkX3QgX19wZ3JwLCBpbnQgX19zaWcpIDsKCgoKZXh0 ZXJuIGludCByYWlzZSAoaW50IF9fc2lnKSA7CgoKCmV4dGVybiBfX3NpZ2hhbmRsZXJfdCBzc2ln bmFsIChpbnQgX19zaWcsIF9fc2lnaGFuZGxlcl90IF9faGFuZGxlcikgOwpleHRlcm4gaW50IGdz aWduYWwgKGludCBfX3NpZykgOwoKCgoKZXh0ZXJuIHZvaWQgcHNpZ25hbCAoaW50IF9fc2lnLCBf X2NvbnN0IGNoYXIgKl9fcykgOwojIDE0MCAiL3Vzci9sb2NhbC9pbmNsdWRlL3NpZ25hbC5oIiAz CmV4dGVybiBpbnQgX19zaWdwYXVzZSAoaW50IF9fc2lnX29yX21hc2ssIGludCBfX2lzX3NpZykg OwoKCgoKZXh0ZXJuIGludCBzaWdwYXVzZSAoaW50IF9fbWFzaykgOwojIDE2OCAiL3Vzci9sb2Nh bC9pbmNsdWRlL3NpZ25hbC5oIiAzCmV4dGVybiBpbnQgc2lnYmxvY2sgKGludCBfX21hc2spIDsK CgpleHRlcm4gaW50IHNpZ3NldG1hc2sgKGludCBfX21hc2spIDsKCgpleHRlcm4gaW50IHNpZ2dl dG1hc2sgKHZvaWQpIDsKIyAxODggIi91c3IvbG9jYWwvaW5jbHVkZS9zaWduYWwuaCIgMwp0eXBl ZGVmIF9fc2lnaGFuZGxlcl90IHNpZ190OwoKCgoKCgoKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUv dGltZS5oIiAxIDMKIyAxOTcgIi91c3IvbG9jYWwvaW5jbHVkZS9zaWduYWwuaCIgMiAzCgoKIyAx ICIvdXNyL2xvY2FsL2luY2x1ZGUvYml0cy9zaWdpbmZvLmgiIDEgMwojIDI1ICIvdXNyL2xvY2Fs L2luY2x1ZGUvYml0cy9zaWdpbmZvLmgiIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvYml0cy93 b3Jkc2l6ZS5oIiAxIDMKIyAyNiAiL3Vzci9sb2NhbC9pbmNsdWRlL2JpdHMvc2lnaW5mby5oIiAy IDMKCgoKCgoKCnR5cGVkZWYgdW5pb24gc2lndmFsCiAgewogICAgaW50IHNpdmFsX2ludDsKICAg IHZvaWQgKnNpdmFsX3B0cjsKICB9IHNpZ3ZhbF90OwojIDUxICIvdXNyL2xvY2FsL2luY2x1ZGUv Yml0cy9zaWdpbmZvLmgiIDMKdHlwZWRlZiBzdHJ1Y3Qgc2lnaW5mbwogIHsKICAgIGludCBzaV9z aWdubzsKICAgIGludCBzaV9lcnJubzsKCiAgICBpbnQgc2lfY29kZTsKCiAgICB1bmlvbgogICAg ICB7CiAgICAgICAgaW50IF9wYWRbKCgxMjggLyBzaXplb2YgKGludCkpIC0gMyldOwoKCiAgICAg ICAgc3RydWN0CiAgICAgICAgICB7CiAgICAgICAgICAgIF9fcGlkX3Qgc2lfcGlkOwogICAgICAg ICAgICBfX3VpZF90IHNpX3VpZDsKICAgICAgICAgIH0gX2tpbGw7CgoKICAgICAgICBzdHJ1Y3QK ICAgICAgICAgIHsKICAgICAgICAgICAgdW5zaWduZWQgaW50IF90aW1lcjE7CiAgICAgICAgICAg IHVuc2lnbmVkIGludCBfdGltZXIyOwogICAgICAgICAgfSBfdGltZXI7CgoKICAgICAgICBzdHJ1 Y3QKICAgICAgICAgIHsKICAgICAgICAgICAgX19waWRfdCBzaV9waWQ7CiAgICAgICAgICAgIF9f dWlkX3Qgc2lfdWlkOwogICAgICAgICAgICBzaWd2YWxfdCBzaV9zaWd2YWw7CiAgICAgICAgICB9 IF9ydDsKCgogICAgICAgIHN0cnVjdAogICAgICAgICAgewogICAgICAgICAgICBfX3BpZF90IHNp X3BpZDsKICAgICAgICAgICAgX191aWRfdCBzaV91aWQ7CiAgICAgICAgICAgIGludCBzaV9zdGF0 dXM7CiAgICAgICAgICAgIF9fY2xvY2tfdCBzaV91dGltZTsKICAgICAgICAgICAgX19jbG9ja190 IHNpX3N0aW1lOwogICAgICAgICAgfSBfc2lnY2hsZDsKCgogICAgICAgIHN0cnVjdAogICAgICAg ICAgewogICAgICAgICAgICB2b2lkICpzaV9hZGRyOwogICAgICAgICAgfSBfc2lnZmF1bHQ7CgoK ICAgICAgICBzdHJ1Y3QKICAgICAgICAgIHsKICAgICAgICAgICAgbG9uZyBpbnQgc2lfYmFuZDsK ICAgICAgICAgICAgaW50IHNpX2ZkOwogICAgICAgICAgfSBfc2lncG9sbDsKICAgICAgfSBfc2lm aWVsZHM7CiAgfSBzaWdpbmZvX3Q7CiMgMTI4ICIvdXNyL2xvY2FsL2luY2x1ZGUvYml0cy9zaWdp bmZvLmgiIDMKZW51bQp7CiAgU0lfQVNZTkNOTCA9IC02LAoKICBTSV9TSUdJTywKCiAgU0lfQVNZ TkNJTywKCiAgU0lfTUVTR1EsCgogIFNJX1RJTUVSLAoKICBTSV9RVUVVRSwKCiAgU0lfVVNFUiwK CiAgU0lfS0VSTkVMID0gMHg4MAoKfTsKCgoKZW51bQp7CiAgSUxMX0lMTE9QQyA9IDEsCgogIElM TF9JTExPUE4sCgogIElMTF9JTExBRFIsCgogIElMTF9JTExUUlAsCgogIElMTF9QUlZPUEMsCgog IElMTF9QUlZSRUcsCgogIElMTF9DT1BST0MsCgogIElMTF9CQURTVEsKCn07CgoKZW51bQp7CiAg RlBFX0lOVERJViA9IDEsCgogIEZQRV9JTlRPVkYsCgogIEZQRV9GTFRESVYsCgogIEZQRV9GTFRP VkYsCgogIEZQRV9GTFRVTkQsCgogIEZQRV9GTFRSRVMsCgogIEZQRV9GTFRJTlYsCgogIEZQRV9G TFRTVUIKCn07CgoKZW51bQp7CiAgU0VHVl9NQVBFUlIgPSAxLAoKICBTRUdWX0FDQ0VSUgoKfTsK CgplbnVtCnsKICBCVVNfQURSQUxOID0gMSwKCiAgQlVTX0FEUkVSUiwKCiAgQlVTX09CSkVSUgoK fTsKCgplbnVtCnsKICBUUkFQX0JSS1BUID0gMSwKCiAgVFJBUF9UUkFDRQoKfTsKCgplbnVtCnsK ICBDTERfRVhJVEVEID0gMSwKCiAgQ0xEX0tJTExFRCwKCiAgQ0xEX0RVTVBFRCwKCiAgQ0xEX1RS QVBQRUQsCgogIENMRF9TVE9QUEVELAoKICBDTERfQ09OVElOVUVECgp9OwoKCmVudW0KewogIFBP TExfSU4gPSAxLAoKICBQT0xMX09VVCwKCiAgUE9MTF9NU0csCgogIFBPTExfRVJSLAoKICBQT0xM X1BSSSwKCiAgUE9MTF9IVVAKCn07CiMgMjcxICIvdXNyL2xvY2FsL2luY2x1ZGUvYml0cy9zaWdp bmZvLmgiIDMKc3RydWN0IF9fcHRocmVhZF9hdHRyX3M7Cgp0eXBlZGVmIHN0cnVjdCBzaWdldmVu dAogIHsKICAgIHNpZ3ZhbF90IHNpZ2V2X3ZhbHVlOwogICAgaW50IHNpZ2V2X3NpZ25vOwogICAg aW50IHNpZ2V2X25vdGlmeTsKCiAgICB1bmlvbgogICAgICB7CiAgICAgICAgaW50IF9wYWRbKCg2 NCAvIHNpemVvZiAoaW50KSkgLSAzKV07CgogICAgICAgIHN0cnVjdAogICAgICAgICAgewogICAg ICAgICAgICB2b2lkICgqX2Z1bmN0aW9uKSAoc2lndmFsX3QpOwogICAgICAgICAgICBzdHJ1Y3Qg X19wdGhyZWFkX2F0dHJfcyAqX2F0dHJpYnV0ZTsKICAgICAgICAgIH0gX3NpZ2V2X3RocmVhZDsK ICAgICAgfSBfc2lnZXZfdW47CiAgfSBzaWdldmVudF90OwoKCgoKCgplbnVtCnsKICBTSUdFVl9T SUdOQUwgPSAwLAoKICBTSUdFVl9OT05FLAoKICBTSUdFVl9USFJFQUQKCn07CiMgMjAwICIvdXNy L2xvY2FsL2luY2x1ZGUvc2lnbmFsLmgiIDIgMwoKCgpleHRlcm4gaW50IHNpZ2VtcHR5c2V0IChz aWdzZXRfdCAqX19zZXQpIDsKCgpleHRlcm4gaW50IHNpZ2ZpbGxzZXQgKHNpZ3NldF90ICpfX3Nl dCkgOwoKCmV4dGVybiBpbnQgc2lnYWRkc2V0IChzaWdzZXRfdCAqX19zZXQsIGludCBfX3NpZ25v KSA7CgoKZXh0ZXJuIGludCBzaWdkZWxzZXQgKHNpZ3NldF90ICpfX3NldCwgaW50IF9fc2lnbm8p IDsKCgpleHRlcm4gaW50IHNpZ2lzbWVtYmVyIChfX2NvbnN0IHNpZ3NldF90ICpfX3NldCwgaW50 IF9fc2lnbm8pIDsKIyAyMzIgIi91c3IvbG9jYWwvaW5jbHVkZS9zaWduYWwuaCIgMwojIDEgIi91 c3IvbG9jYWwvaW5jbHVkZS9iaXRzL3NpZ2FjdGlvbi5oIiAxIDMKIyAyNSAiL3Vzci9sb2NhbC9p bmNsdWRlL2JpdHMvc2lnYWN0aW9uLmgiIDMKc3RydWN0IHNpZ2FjdGlvbgogIHsKCgogICAgdW5p b24KICAgICAgewoKICAgICAgICBfX3NpZ2hhbmRsZXJfdCBzYV9oYW5kbGVyOwoKICAgICAgICB2 b2lkICgqc2Ffc2lnYWN0aW9uKSAoaW50LCBzaWdpbmZvX3QgKiwgdm9pZCAqKTsKICAgICAgfQog ICAgX19zaWdhY3Rpb25faGFuZGxlcjsKCgoKCgoKCiAgICBfX3NpZ3NldF90IHNhX21hc2s7CgoK ICAgIGludCBzYV9mbGFnczsKCgogICAgdm9pZCAoKnNhX3Jlc3RvcmVyKSAodm9pZCk7CiAgfTsK IyAyMzMgIi91c3IvbG9jYWwvaW5jbHVkZS9zaWduYWwuaCIgMiAzCgoKZXh0ZXJuIGludCBzaWdw cm9jbWFzayAoaW50IF9faG93LCBfX2NvbnN0IHNpZ3NldF90ICpfX3Jlc3RyaWN0IF9fc2V0LAog ICAgICAgICAgICAgICAgICAgICAgICBzaWdzZXRfdCAqX19yZXN0cmljdCBfX29zZXQpIDsKCgoK ZXh0ZXJuIGludCBzaWdzdXNwZW5kIChfX2NvbnN0IHNpZ3NldF90ICpfX3NldCkgOwoKCmV4dGVy biBpbnQgc2lnYWN0aW9uIChpbnQgX19zaWcsIF9fY29uc3Qgc3RydWN0IHNpZ2FjdGlvbiAqX19y ZXN0cmljdCBfX2FjdCwKICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzaWdhY3Rpb24gKl9f cmVzdHJpY3QgX19vYWN0KSA7CgoKZXh0ZXJuIGludCBzaWdwZW5kaW5nIChzaWdzZXRfdCAqX19z ZXQpIDsKCgoKZXh0ZXJuIGludCBzaWd3YWl0IChfX2NvbnN0IHNpZ3NldF90ICpfX3Jlc3RyaWN0 IF9fc2V0LCBpbnQgKl9fcmVzdHJpY3QgX19zaWcpCiAgICAgICAgICAgIDsKCgoKZXh0ZXJuIGlu dCBzaWd3YWl0aW5mbyAoX19jb25zdCBzaWdzZXRfdCAqX19yZXN0cmljdCBfX3NldCwKICAgICAg ICAgICAgICAgICAgICAgICAgc2lnaW5mb190ICpfX3Jlc3RyaWN0IF9faW5mbykgOwoKCgpleHRl cm4gaW50IHNpZ3RpbWVkd2FpdCAoX19jb25zdCBzaWdzZXRfdCAqX19yZXN0cmljdCBfX3NldCwK ICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ2luZm9fdCAqX19yZXN0cmljdCBfX2luZm8sCiAg ICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHN0cnVjdCB0aW1lc3BlYyAqX19yZXN0cmlj dCBfX3RpbWVvdXQpCiAgICAgICAgICAgIDsKCgoKZXh0ZXJuIGludCBzaWdxdWV1ZSAoX19waWRf dCBfX3BpZCwgaW50IF9fc2lnLCBfX2NvbnN0IHVuaW9uIHNpZ3ZhbCBfX3ZhbCkKICAgICAgICAg ICAgOwojIDI3OCAiL3Vzci9sb2NhbC9pbmNsdWRlL3NpZ25hbC5oIiAzCmV4dGVybiBfX2NvbnN0 IGNoYXIgKl9fY29uc3QgX3N5c19zaWdsaXN0WzY0XTsKZXh0ZXJuIF9fY29uc3QgY2hhciAqX19j b25zdCBzeXNfc2lnbGlzdFs2NF07CgoKc3RydWN0IHNpZ3ZlYwogIHsKICAgIF9fc2lnaGFuZGxl cl90IHN2X2hhbmRsZXI7CiAgICBpbnQgc3ZfbWFzazsKCiAgICBpbnQgc3ZfZmxhZ3M7CgogIH07 CiMgMzAyICIvdXNyL2xvY2FsL2luY2x1ZGUvc2lnbmFsLmgiIDMKZXh0ZXJuIGludCBzaWd2ZWMg KGludCBfX3NpZywgX19jb25zdCBzdHJ1Y3Qgc2lndmVjICpfX3ZlYywKICAgICAgICAgICAgICAg ICAgIHN0cnVjdCBzaWd2ZWMgKl9fb3ZlYykgOwoKCgojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9i aXRzL3NpZ2NvbnRleHQuaCIgMSAzCiMgMjggIi91c3IvbG9jYWwvaW5jbHVkZS9iaXRzL3NpZ2Nv bnRleHQuaCIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9hc20vc2lnY29udGV4dC5oIiAxIDMK IyAxOCAiL3Vzci9sb2NhbC9pbmNsdWRlL2FzbS9zaWdjb250ZXh0LmgiIDMKc3RydWN0IF9mcHJl ZyB7CiAgICAgICAgdW5zaWduZWQgc2hvcnQgc2lnbmlmaWNhbmRbNF07CiAgICAgICAgdW5zaWdu ZWQgc2hvcnQgZXhwb25lbnQ7Cn07CgpzdHJ1Y3QgX2ZweHJlZyB7CiAgICAgICAgdW5zaWduZWQg c2hvcnQgc2lnbmlmaWNhbmRbNF07CiAgICAgICAgdW5zaWduZWQgc2hvcnQgZXhwb25lbnQ7CiAg ICAgICAgdW5zaWduZWQgc2hvcnQgcGFkZGluZ1szXTsKfTsKCnN0cnVjdCBfeG1tcmVnIHsKICAg ICAgICB1bnNpZ25lZCBsb25nIGVsZW1lbnRbNF07Cn07CgpzdHJ1Y3QgX2Zwc3RhdGUgewoKICAg ICAgICB1bnNpZ25lZCBsb25nIGN3OwogICAgICAgIHVuc2lnbmVkIGxvbmcgc3c7CiAgICAgICAg dW5zaWduZWQgbG9uZyB0YWc7CiAgICAgICAgdW5zaWduZWQgbG9uZyBpcG9mZjsKICAgICAgICB1 bnNpZ25lZCBsb25nIGNzc2VsOwogICAgICAgIHVuc2lnbmVkIGxvbmcgZGF0YW9mZjsKICAgICAg ICB1bnNpZ25lZCBsb25nIGRhdGFzZWw7CiAgICAgICAgc3RydWN0IF9mcHJlZyBfc3RbOF07CiAg ICAgICAgdW5zaWduZWQgc2hvcnQgc3RhdHVzOwogICAgICAgIHVuc2lnbmVkIHNob3J0IG1hZ2lj OwoKCiAgICAgICAgdW5zaWduZWQgbG9uZyBfZnhzcl9lbnZbNl07CiAgICAgICAgdW5zaWduZWQg bG9uZyBteGNzcjsKICAgICAgICB1bnNpZ25lZCBsb25nIHJlc2VydmVkOwogICAgICAgIHN0cnVj dCBfZnB4cmVnIF9meHNyX3N0WzhdOwogICAgICAgIHN0cnVjdCBfeG1tcmVnIF94bW1bOF07CiAg ICAgICAgdW5zaWduZWQgbG9uZyBwYWRkaW5nWzU2XTsKfTsKCgoKc3RydWN0IHNpZ2NvbnRleHQg ewogICAgICAgIHVuc2lnbmVkIHNob3J0IGdzLCBfX2dzaDsKICAgICAgICB1bnNpZ25lZCBzaG9y dCBmcywgX19mc2g7CiAgICAgICAgdW5zaWduZWQgc2hvcnQgZXMsIF9fZXNoOwogICAgICAgIHVu c2lnbmVkIHNob3J0IGRzLCBfX2RzaDsKICAgICAgICB1bnNpZ25lZCBsb25nIGVkaTsKICAgICAg ICB1bnNpZ25lZCBsb25nIGVzaTsKICAgICAgICB1bnNpZ25lZCBsb25nIGVicDsKICAgICAgICB1 bnNpZ25lZCBsb25nIGVzcDsKICAgICAgICB1bnNpZ25lZCBsb25nIGVieDsKICAgICAgICB1bnNp Z25lZCBsb25nIGVkeDsKICAgICAgICB1bnNpZ25lZCBsb25nIGVjeDsKICAgICAgICB1bnNpZ25l ZCBsb25nIGVheDsKICAgICAgICB1bnNpZ25lZCBsb25nIHRyYXBubzsKICAgICAgICB1bnNpZ25l ZCBsb25nIGVycjsKICAgICAgICB1bnNpZ25lZCBsb25nIGVpcDsKICAgICAgICB1bnNpZ25lZCBz aG9ydCBjcywgX19jc2g7CiAgICAgICAgdW5zaWduZWQgbG9uZyBlZmxhZ3M7CiAgICAgICAgdW5z aWduZWQgbG9uZyBlc3BfYXRfc2lnbmFsOwogICAgICAgIHVuc2lnbmVkIHNob3J0IHNzLCBfX3Nz aDsKICAgICAgICBzdHJ1Y3QgX2Zwc3RhdGUgKiBmcHN0YXRlOwogICAgICAgIHVuc2lnbmVkIGxv bmcgb2xkbWFzazsKICAgICAgICB1bnNpZ25lZCBsb25nIGNyMjsKfTsKIyAyOSAiL3Vzci9sb2Nh bC9pbmNsdWRlL2JpdHMvc2lnY29udGV4dC5oIiAyIDMKIyAzMDggIi91c3IvbG9jYWwvaW5jbHVk ZS9zaWduYWwuaCIgMiAzCgoKZXh0ZXJuIGludCBzaWdyZXR1cm4gKHN0cnVjdCBzaWdjb250ZXh0 ICpfX3NjcCkgOwojIDMyMCAiL3Vzci9sb2NhbC9pbmNsdWRlL3NpZ25hbC5oIiAzCmV4dGVybiBp bnQgc2lnaW50ZXJydXB0IChpbnQgX19zaWcsIGludCBfX2ludGVycnVwdCkgOwoKIyAxICIvdXNy L2xvY2FsL2luY2x1ZGUvYml0cy9zaWdzdGFjay5oIiAxIDMKIyAyNiAiL3Vzci9sb2NhbC9pbmNs dWRlL2JpdHMvc2lnc3RhY2suaCIgMwpzdHJ1Y3Qgc2lnc3RhY2sKICB7CiAgICB2b2lkICpzc19z cDsKICAgIGludCBzc19vbnN0YWNrOwogIH07CgoKCmVudW0KewogIFNTX09OU1RBQ0sgPSAxLAoK ICBTU19ESVNBQkxFCgp9OwojIDUwICIvdXNyL2xvY2FsL2luY2x1ZGUvYml0cy9zaWdzdGFjay5o IiAzCnR5cGVkZWYgc3RydWN0IHNpZ2FsdHN0YWNrCiAgewogICAgdm9pZCAqc3Nfc3A7CiAgICBp bnQgc3NfZmxhZ3M7CiAgICBzaXplX3Qgc3Nfc2l6ZTsKICB9IHN0YWNrX3Q7CiMgMzIzICIvdXNy L2xvY2FsL2luY2x1ZGUvc2lnbmFsLmgiIDIgMwoKCgoKCgoKZXh0ZXJuIGludCBzaWdzdGFjayAo c3RydWN0IHNpZ3N0YWNrICpfX3NzLCBzdHJ1Y3Qgc2lnc3RhY2sgKl9fb3NzKSA7CgoKCmV4dGVy biBpbnQgc2lnYWx0c3RhY2sgKF9fY29uc3Qgc3RydWN0IHNpZ2FsdHN0YWNrICpfX3Jlc3RyaWN0 IF9fc3MsCiAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzaWdhbHRzdGFjayAqX19yZXN0 cmljdCBfX29zcykgOwojIDM1OCAiL3Vzci9sb2NhbC9pbmNsdWRlL3NpZ25hbC5oIiAzCiMgMSAi L3Vzci9sb2NhbC9pbmNsdWRlL2JpdHMvc2lndGhyZWFkLmgiIDEgMwojIDMxICIvdXNyL2xvY2Fs L2luY2x1ZGUvYml0cy9zaWd0aHJlYWQuaCIgMwpleHRlcm4gaW50IHB0aHJlYWRfc2lnbWFzayAo aW50IF9faG93LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBfX3NpZ3NldF90 ICpfX3Jlc3RyaWN0IF9fbmV3bWFzaywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fc2ln c2V0X3QgKl9fcmVzdHJpY3QgX19vbGRtYXNrKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfa2lsbCAo cHRocmVhZF90IF9fdGhyZWFkLCBpbnQgX19zaWdubykgOwojIDM1OSAiL3Vzci9sb2NhbC9pbmNs dWRlL3NpZ25hbC5oIiAyIDMKCgoKCgoKZXh0ZXJuIGludCBfX2xpYmNfY3VycmVudF9zaWdydG1p biAodm9pZCkgOwoKZXh0ZXJuIGludCBfX2xpYmNfY3VycmVudF9zaWdydG1heCAodm9pZCkgOwoj IDE3ICJCcmVha0Rvd24uYyIgMgoKIyAxICJoZWFkZXJzL2RlZi5oIiAxCiMgMTkgIkJyZWFrRG93 bi5jIiAyCgoKIyAxICJoZWFkZXJzL2xpbnV4ZGVmLmgiIDEKIyAxICIvdXNyL2xvY2FsL2luY2x1 ZGUvcHdkLmgiIDEgMwojIDI2ICIvdXNyL2xvY2FsL2luY2x1ZGUvcHdkLmgiIDMKIyAxICIvdXNy L2xvY2FsL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMjcgIi91c3IvbG9jYWwvaW5jbHVkZS9w d2QuaCIgMiAzCgoKCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMSAzCiMg MzEgIi91c3IvbG9jYWwvaW5jbHVkZS9wd2QuaCIgMiAzCgoKIyAxICIvdXNyL2xvY2FsL2djYy8z LjAuNC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAuNC9pbmNsdWRlL3N0ZGRlZi5o IiAxIDMKIyAzNCAiL3Vzci9sb2NhbC9pbmNsdWRlL3B3ZC5oIiAyIDMKIyA1MCAiL3Vzci9sb2Nh bC9pbmNsdWRlL3B3ZC5oIiAzCnN0cnVjdCBwYXNzd2QKewogIGNoYXIgKnB3X25hbWU7CiAgY2hh ciAqcHdfcGFzc3dkOwogIF9fdWlkX3QgcHdfdWlkOwogIF9fZ2lkX3QgcHdfZ2lkOwogIGNoYXIg KnB3X2dlY29zOwogIGNoYXIgKnB3X2RpcjsKICBjaGFyICpwd19zaGVsbDsKfTsKCgoKCiMgMSAi L3Vzci9sb2NhbC9pbmNsdWRlL3N0ZGlvLmgiIDEgMwojIDY1ICIvdXNyL2xvY2FsL2luY2x1ZGUv cHdkLmgiIDIgMwoKCgoKCmV4dGVybiB2b2lkIHNldHB3ZW50ICh2b2lkKSA7CgoKZXh0ZXJuIHZv aWQgZW5kcHdlbnQgKHZvaWQpIDsKCgpleHRlcm4gc3RydWN0IHBhc3N3ZCAqZ2V0cHdlbnQgKHZv aWQpIDsKCgoKCmV4dGVybiBzdHJ1Y3QgcGFzc3dkICpmZ2V0cHdlbnQgKEZJTEUgKl9fc3RyZWFt KSA7CgoKZXh0ZXJuIGludCBwdXRwd2VudCAoX19jb25zdCBzdHJ1Y3QgcGFzc3dkICpfX3Jlc3Ry aWN0IF9fcCwKICAgICAgICAgICAgICAgICAgICAgRklMRSAqX19yZXN0cmljdCBfX2YpIDsKCgoK ZXh0ZXJuIHN0cnVjdCBwYXNzd2QgKmdldHB3dWlkIChfX3VpZF90IF9fdWlkKSA7CgoKZXh0ZXJu IHN0cnVjdCBwYXNzd2QgKmdldHB3bmFtIChfX2NvbnN0IGNoYXIgKl9fbmFtZSkgOwojIDExMSAi L3Vzci9sb2NhbC9pbmNsdWRlL3B3ZC5oIiAzCmV4dGVybiBpbnQgZ2V0cHdlbnRfciAoc3RydWN0 IHBhc3N3ZCAqX19yZXN0cmljdCBfX3Jlc3VsdGJ1ZiwKICAgICAgICAgICAgICAgICAgICAgICBj aGFyICpfX3Jlc3RyaWN0IF9fYnVmZmVyLCBzaXplX3QgX19idWZsZW4sCiAgICAgICAgICAgICAg ICAgICAgICAgc3RydWN0IHBhc3N3ZCAqKl9fcmVzdHJpY3QgX19yZXN1bHQpIDsKCgpleHRlcm4g aW50IGdldHB3dWlkX3IgKF9fdWlkX3QgX191aWQsCiAgICAgICAgICAgICAgICAgICAgICAgc3Ry dWN0IHBhc3N3ZCAqX19yZXN0cmljdCBfX3Jlc3VsdGJ1ZiwKICAgICAgICAgICAgICAgICAgICAg ICBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmZmVyLCBzaXplX3QgX19idWZsZW4sCiAgICAgICAgICAg ICAgICAgICAgICAgc3RydWN0IHBhc3N3ZCAqKl9fcmVzdHJpY3QgX19yZXN1bHQpIDsKCmV4dGVy biBpbnQgZ2V0cHduYW1fciAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbmFtZSwKICAgICAg ICAgICAgICAgICAgICAgICBzdHJ1Y3QgcGFzc3dkICpfX3Jlc3RyaWN0IF9fcmVzdWx0YnVmLAog ICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKl9fcmVzdHJpY3QgX19idWZmZXIsIHNpemVfdCBf X2J1ZmxlbiwKICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcGFzc3dkICoqX19yZXN0cmlj dCBfX3Jlc3VsdCkgOwoKCgoKCmV4dGVybiBpbnQgZmdldHB3ZW50X3IgKEZJTEUgKl9fcmVzdHJp Y3QgX19zdHJlYW0sCiAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBwYXNzd2QgKl9fcmVz dHJpY3QgX19yZXN1bHRidWYsCiAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKl9fcmVzdHJp Y3QgX19idWZmZXIsIHNpemVfdCBfX2J1ZmxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgc3Ry dWN0IHBhc3N3ZCAqKl9fcmVzdHJpY3QgX19yZXN1bHQpIDsKIyAyICJoZWFkZXJzL2xpbnV4ZGVm LmgiIDIKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvbGltaXRzLmgiIDEgMwojIDI2ICIvdXNyL2xv Y2FsL2luY2x1ZGUvbGltaXRzLmgiIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZmVhdHVyZXMu aCIgMSAzCiMgMjcgIi91c3IvbG9jYWwvaW5jbHVkZS9saW1pdHMuaCIgMiAzCiMgMTI0ICIvdXNy L2xvY2FsL2luY2x1ZGUvbGltaXRzLmgiIDMKIyAxICIvdXNyL2xvY2FsL2djYy8zLjAuNC9saWIv Z2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAuNC9pbmNsdWRlL2xpbWl0cy5oIiAxIDMKIyAx MjUgIi91c3IvbG9jYWwvaW5jbHVkZS9saW1pdHMuaCIgMiAzCiMgMTQ0ICIvdXNyL2xvY2FsL2lu Y2x1ZGUvbGltaXRzLmgiIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvYml0cy9wb3NpeDFfbGlt LmgiIDEgMwojIDEyNiAiL3Vzci9sb2NhbC9pbmNsdWRlL2JpdHMvcG9zaXgxX2xpbS5oIiAzCiMg MSAiL3Vzci9sb2NhbC9pbmNsdWRlL2JpdHMvbG9jYWxfbGltLmgiIDEgMwojIDM2ICIvdXNyL2xv Y2FsL2luY2x1ZGUvYml0cy9sb2NhbF9saW0uaCIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9s aW51eC9saW1pdHMuaCIgMSAzCiMgMzcgIi91c3IvbG9jYWwvaW5jbHVkZS9iaXRzL2xvY2FsX2xp bS5oIiAyIDMKIyAxMjcgIi91c3IvbG9jYWwvaW5jbHVkZS9iaXRzL3Bvc2l4MV9saW0uaCIgMiAz CiMgMTQ1ICIvdXNyL2xvY2FsL2luY2x1ZGUvbGltaXRzLmgiIDIgMwoKCgojIDEgIi91c3IvbG9j YWwvaW5jbHVkZS9iaXRzL3Bvc2l4Ml9saW0uaCIgMSAzCiMgMTQ5ICIvdXNyL2xvY2FsL2luY2x1 ZGUvbGltaXRzLmgiIDIgMwojIDMgImhlYWRlcnMvbGludXhkZWYuaCIgMgojIDEgIi91c3IvbG9j YWwvaW5jbHVkZS91bmlzdGQuaCIgMSAzCiMgMjYgIi91c3IvbG9jYWwvaW5jbHVkZS91bmlzdGQu aCIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAyNyAiL3Vzci9s b2NhbC9pbmNsdWRlL3VuaXN0ZC5oIiAyIDMKIyAxNzUgIi91c3IvbG9jYWwvaW5jbHVkZS91bmlz dGQuaCIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9iaXRzL3Bvc2l4X29wdC5oIiAxIDMKIyAx NzYgIi91c3IvbG9jYWwvaW5jbHVkZS91bmlzdGQuaCIgMiAzCiMgMTkwICIvdXNyL2xvY2FsL2lu Y2x1ZGUvdW5pc3RkLmgiIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvYml0cy90eXBlcy5oIiAx IDMKIyAxOTEgIi91c3IvbG9jYWwvaW5jbHVkZS91bmlzdGQuaCIgMiAzCiMgMTk5ICIvdXNyL2xv Y2FsL2luY2x1ZGUvdW5pc3RkLmgiIDMKIyAxICIvdXNyL2xvY2FsL2djYy8zLjAuNC9saWIvZ2Nj LWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAuNC9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAyMDAg Ii91c3IvbG9jYWwvaW5jbHVkZS91bmlzdGQuaCIgMiAzCiMgMjQwICIvdXNyL2xvY2FsL2luY2x1 ZGUvdW5pc3RkLmgiIDMKdHlwZWRlZiBfX2ludHB0cl90IGludHB0cl90OwoKCgoKCgp0eXBlZGVm IF9fc29ja2xlbl90IHNvY2tsZW5fdDsKIyAyNjAgIi91c3IvbG9jYWwvaW5jbHVkZS91bmlzdGQu aCIgMwpleHRlcm4gaW50IGFjY2VzcyAoX19jb25zdCBjaGFyICpfX25hbWUsIGludCBfX3R5cGUp IDsKIyAyOTAgIi91c3IvbG9jYWwvaW5jbHVkZS91bmlzdGQuaCIgMwpleHRlcm4gX19vZmZfdCBs c2VlayAoaW50IF9fZmQsIF9fb2ZmX3QgX19vZmZzZXQsIGludCBfX3doZW5jZSkgOwojIDMwNiAi L3Vzci9sb2NhbC9pbmNsdWRlL3VuaXN0ZC5oIiAzCmV4dGVybiBpbnQgY2xvc2UgKGludCBfX2Zk KSA7CgoKCmV4dGVybiBzc2l6ZV90IHJlYWQgKGludCBfX2ZkLCB2b2lkICpfX2J1Ziwgc2l6ZV90 IF9fbmJ5dGVzKSA7CgoKZXh0ZXJuIHNzaXplX3Qgd3JpdGUgKGludCBfX2ZkLCBfX2NvbnN0IHZv aWQgKl9fYnVmLCBzaXplX3QgX19uKSA7CiMgMzUzICIvdXNyL2xvY2FsL2luY2x1ZGUvdW5pc3Rk LmgiIDMKZXh0ZXJuIGludCBwaXBlIChpbnQgX19waXBlZGVzWzJdKSA7CiMgMzYyICIvdXNyL2xv Y2FsL2luY2x1ZGUvdW5pc3RkLmgiIDMKZXh0ZXJuIHVuc2lnbmVkIGludCBhbGFybSAodW5zaWdu ZWQgaW50IF9fc2Vjb25kcykgOwojIDM3MSAiL3Vzci9sb2NhbC9pbmNsdWRlL3VuaXN0ZC5oIiAz CmV4dGVybiB1bnNpZ25lZCBpbnQgc2xlZXAgKHVuc2lnbmVkIGludCBfX3NlY29uZHMpIDsKCgoK CgoKZXh0ZXJuIF9fdXNlY29uZHNfdCB1YWxhcm0gKF9fdXNlY29uZHNfdCBfX3ZhbHVlLCBfX3Vz ZWNvbmRzX3QgX19pbnRlcnZhbCkKICAgICAgICAgICAgOwoKCgpleHRlcm4gaW50IHVzbGVlcCAo X191c2Vjb25kc190IF9fdXNlY29uZHMpIDsKCgoKCgpleHRlcm4gaW50IHBhdXNlICh2b2lkKSA7 CgoKCmV4dGVybiBpbnQgY2hvd24gKF9fY29uc3QgY2hhciAqX19maWxlLCBfX3VpZF90IF9fb3du ZXIsIF9fZ2lkX3QgX19ncm91cCkKICAgICAgICAgICAgOwoKCgpleHRlcm4gaW50IGZjaG93biAo aW50IF9fZmQsIF9fdWlkX3QgX19vd25lciwgX19naWRfdCBfX2dyb3VwKSA7CgoKCgpleHRlcm4g aW50IGxjaG93biAoX19jb25zdCBjaGFyICpfX2ZpbGUsIF9fdWlkX3QgX19vd25lciwgX19naWRf dCBfX2dyb3VwKQogICAgICAgICAgICA7CgoKCgpleHRlcm4gaW50IGNoZGlyIChfX2NvbnN0IGNo YXIgKl9fcGF0aCkgOwoKCgpleHRlcm4gaW50IGZjaGRpciAoaW50IF9fZmQpIDsKIyA0MjMgIi91 c3IvbG9jYWwvaW5jbHVkZS91bmlzdGQuaCIgMwpleHRlcm4gY2hhciAqZ2V0Y3dkIChjaGFyICpf X2J1Ziwgc2l6ZV90IF9fc2l6ZSkgOwojIDQzNiAiL3Vzci9sb2NhbC9pbmNsdWRlL3VuaXN0ZC5o IiAzCmV4dGVybiBjaGFyICpnZXR3ZCAoY2hhciAqX19idWYpIDsKCgoKCmV4dGVybiBpbnQgZHVw IChpbnQgX19mZCkgOwoKCmV4dGVybiBpbnQgZHVwMiAoaW50IF9fZmQsIGludCBfX2ZkMikgOwoK CmV4dGVybiBjaGFyICoqX19lbnZpcm9uOwoKCgoKCgoKZXh0ZXJuIGludCBleGVjdmUgKF9fY29u c3QgY2hhciAqX19wYXRoLCBjaGFyICpfX2NvbnN0IF9fYXJndltdLAogICAgICAgICAgICAgICAg ICAgY2hhciAqX19jb25zdCBfX2VudnBbXSkgOwojIDQ2NyAiL3Vzci9sb2NhbC9pbmNsdWRlL3Vu aXN0ZC5oIiAzCmV4dGVybiBpbnQgZXhlY3YgKF9fY29uc3QgY2hhciAqX19wYXRoLCBjaGFyICpf X2NvbnN0IF9fYXJndltdKSA7CgoKCmV4dGVybiBpbnQgZXhlY2xlIChfX2NvbnN0IGNoYXIgKl9f cGF0aCwgX19jb25zdCBjaGFyICpfX2FyZywgLi4uKSA7CgoKCmV4dGVybiBpbnQgZXhlY2wgKF9f Y29uc3QgY2hhciAqX19wYXRoLCBfX2NvbnN0IGNoYXIgKl9fYXJnLCAuLi4pIDsKCgoKZXh0ZXJu IGludCBleGVjdnAgKF9fY29uc3QgY2hhciAqX19maWxlLCBjaGFyICpfX2NvbnN0IF9fYXJndltd KSA7CgoKCgpleHRlcm4gaW50IGV4ZWNscCAoX19jb25zdCBjaGFyICpfX2ZpbGUsIF9fY29uc3Qg Y2hhciAqX19hcmcsIC4uLikgOwoKCgoKZXh0ZXJuIGludCBuaWNlIChpbnQgX19pbmMpIDsKCgoK CmV4dGVybiB2b2lkIF9leGl0IChpbnQgX19zdGF0dXMpIF9fYXR0cmlidXRlX18gKChfX25vcmV0 dXJuX18pKTsKCgoKCgojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9iaXRzL2NvbmZuYW1lLmgiIDEg MwojIDI1ICIvdXNyL2xvY2FsL2luY2x1ZGUvYml0cy9jb25mbmFtZS5oIiAzCmVudW0KICB7CiAg ICBfUENfTElOS19NQVgsCgogICAgX1BDX01BWF9DQU5PTiwKCiAgICBfUENfTUFYX0lOUFVULAoK ICAgIF9QQ19OQU1FX01BWCwKCiAgICBfUENfUEFUSF9NQVgsCgogICAgX1BDX1BJUEVfQlVGLAoK ICAgIF9QQ19DSE9XTl9SRVNUUklDVEVELAoKICAgIF9QQ19OT19UUlVOQywKCiAgICBfUENfVkRJ U0FCTEUsCgogICAgX1BDX1NZTkNfSU8sCgogICAgX1BDX0FTWU5DX0lPLAoKICAgIF9QQ19QUklP X0lPLAoKICAgIF9QQ19TT0NLX01BWEJVRiwKCiAgICBfUENfRklMRVNJWkVCSVRTLAoKICAgIF9Q Q19SRUNfSU5DUl9YRkVSX1NJWkUsCgogICAgX1BDX1JFQ19NQVhfWEZFUl9TSVpFLAoKICAgIF9Q Q19SRUNfTUlOX1hGRVJfU0laRSwKCiAgICBfUENfUkVDX1hGRVJfQUxJR04sCgogICAgX1BDX0FM TE9DX1NJWkVfTUlOLAoKICAgIF9QQ19TWU1MSU5LX01BWAoKICB9OwoKCmVudW0KICB7CiAgICBf U0NfQVJHX01BWCwKCiAgICBfU0NfQ0hJTERfTUFYLAoKICAgIF9TQ19DTEtfVENLLAoKICAgIF9T Q19OR1JPVVBTX01BWCwKCiAgICBfU0NfT1BFTl9NQVgsCgogICAgX1NDX1NUUkVBTV9NQVgsCgog ICAgX1NDX1RaTkFNRV9NQVgsCgogICAgX1NDX0pPQl9DT05UUk9MLAoKICAgIF9TQ19TQVZFRF9J RFMsCgogICAgX1NDX1JFQUxUSU1FX1NJR05BTFMsCgogICAgX1NDX1BSSU9SSVRZX1NDSEVEVUxJ TkcsCgogICAgX1NDX1RJTUVSUywKCiAgICBfU0NfQVNZTkNIUk9OT1VTX0lPLAoKICAgIF9TQ19Q UklPUklUSVpFRF9JTywKCiAgICBfU0NfU1lOQ0hST05JWkVEX0lPLAoKICAgIF9TQ19GU1lOQywK CiAgICBfU0NfTUFQUEVEX0ZJTEVTLAoKICAgIF9TQ19NRU1MT0NLLAoKICAgIF9TQ19NRU1MT0NL X1JBTkdFLAoKICAgIF9TQ19NRU1PUllfUFJPVEVDVElPTiwKCiAgICBfU0NfTUVTU0FHRV9QQVNT SU5HLAoKICAgIF9TQ19TRU1BUEhPUkVTLAoKICAgIF9TQ19TSEFSRURfTUVNT1JZX09CSkVDVFMs CgogICAgX1NDX0FJT19MSVNUSU9fTUFYLAoKICAgIF9TQ19BSU9fTUFYLAoKICAgIF9TQ19BSU9f UFJJT19ERUxUQV9NQVgsCgogICAgX1NDX0RFTEFZVElNRVJfTUFYLAoKICAgIF9TQ19NUV9PUEVO X01BWCwKCiAgICBfU0NfTVFfUFJJT19NQVgsCgogICAgX1NDX1ZFUlNJT04sCgogICAgX1NDX1BB R0VTSVpFLAoKCiAgICBfU0NfUlRTSUdfTUFYLAoKICAgIF9TQ19TRU1fTlNFTVNfTUFYLAoKICAg IF9TQ19TRU1fVkFMVUVfTUFYLAoKICAgIF9TQ19TSUdRVUVVRV9NQVgsCgogICAgX1NDX1RJTUVS X01BWCwKCgoKCiAgICBfU0NfQkNfQkFTRV9NQVgsCgogICAgX1NDX0JDX0RJTV9NQVgsCgogICAg X1NDX0JDX1NDQUxFX01BWCwKCiAgICBfU0NfQkNfU1RSSU5HX01BWCwKCiAgICBfU0NfQ09MTF9X RUlHSFRTX01BWCwKCiAgICBfU0NfRVFVSVZfQ0xBU1NfTUFYLAoKICAgIF9TQ19FWFBSX05FU1Rf TUFYLAoKICAgIF9TQ19MSU5FX01BWCwKCiAgICBfU0NfUkVfRFVQX01BWCwKCiAgICBfU0NfQ0hB UkNMQVNTX05BTUVfTUFYLAoKCiAgICBfU0NfMl9WRVJTSU9OLAoKICAgIF9TQ18yX0NfQklORCwK CiAgICBfU0NfMl9DX0RFViwKCiAgICBfU0NfMl9GT1JUX0RFViwKCiAgICBfU0NfMl9GT1JUX1JV TiwKCiAgICBfU0NfMl9TV19ERVYsCgogICAgX1NDXzJfTE9DQUxFREVGLAoKCiAgICBfU0NfUElJ LAoKICAgIF9TQ19QSUlfWFRJLAoKICAgIF9TQ19QSUlfU09DS0VULAoKICAgIF9TQ19QSUlfSU5U RVJORVQsCgogICAgX1NDX1BJSV9PU0ksCgogICAgX1NDX1BPTEwsCgogICAgX1NDX1NFTEVDVCwK CiAgICBfU0NfVUlPX01BWElPViwKCiAgICBfU0NfSU9WX01BWCA9IF9TQ19VSU9fTUFYSU9WLAoK ICAgIF9TQ19QSUlfSU5URVJORVRfU1RSRUFNLAoKICAgIF9TQ19QSUlfSU5URVJORVRfREdSQU0s CgogICAgX1NDX1BJSV9PU0lfQ09UUywKCiAgICBfU0NfUElJX09TSV9DTFRTLAoKICAgIF9TQ19Q SUlfT1NJX00sCgogICAgX1NDX1RfSU9WX01BWCwKCgoKICAgIF9TQ19USFJFQURTLAoKICAgIF9T Q19USFJFQURfU0FGRV9GVU5DVElPTlMsCgogICAgX1NDX0dFVEdSX1JfU0laRV9NQVgsCgogICAg X1NDX0dFVFBXX1JfU0laRV9NQVgsCgogICAgX1NDX0xPR0lOX05BTUVfTUFYLAoKICAgIF9TQ19U VFlfTkFNRV9NQVgsCgogICAgX1NDX1RIUkVBRF9ERVNUUlVDVE9SX0lURVJBVElPTlMsCgogICAg X1NDX1RIUkVBRF9LRVlTX01BWCwKCiAgICBfU0NfVEhSRUFEX1NUQUNLX01JTiwKCiAgICBfU0Nf VEhSRUFEX1RIUkVBRFNfTUFYLAoKICAgIF9TQ19USFJFQURfQVRUUl9TVEFDS0FERFIsCgogICAg X1NDX1RIUkVBRF9BVFRSX1NUQUNLU0laRSwKCiAgICBfU0NfVEhSRUFEX1BSSU9SSVRZX1NDSEVE VUxJTkcsCgogICAgX1NDX1RIUkVBRF9QUklPX0lOSEVSSVQsCgogICAgX1NDX1RIUkVBRF9QUklP X1BST1RFQ1QsCgogICAgX1NDX1RIUkVBRF9QUk9DRVNTX1NIQVJFRCwKCgogICAgX1NDX05QUk9D RVNTT1JTX0NPTkYsCgogICAgX1NDX05QUk9DRVNTT1JTX09OTE4sCgogICAgX1NDX1BIWVNfUEFH RVMsCgogICAgX1NDX0FWUEhZU19QQUdFUywKCiAgICBfU0NfQVRFWElUX01BWCwKCiAgICBfU0Nf UEFTU19NQVgsCgoKICAgIF9TQ19YT1BFTl9WRVJTSU9OLAoKICAgIF9TQ19YT1BFTl9YQ1VfVkVS U0lPTiwKCiAgICBfU0NfWE9QRU5fVU5JWCwKCiAgICBfU0NfWE9QRU5fQ1JZUFQsCgogICAgX1ND X1hPUEVOX0VOSF9JMThOLAoKICAgIF9TQ19YT1BFTl9TSE0sCgoKICAgIF9TQ18yX0NIQVJfVEVS TSwKCiAgICBfU0NfMl9DX1ZFUlNJT04sCgogICAgX1NDXzJfVVBFLAoKCiAgICBfU0NfWE9QRU5f WFBHMiwKCiAgICBfU0NfWE9QRU5fWFBHMywKCiAgICBfU0NfWE9QRU5fWFBHNCwKCgogICAgX1ND X0NIQVJfQklULAoKICAgIF9TQ19DSEFSX01BWCwKCiAgICBfU0NfQ0hBUl9NSU4sCgogICAgX1ND X0lOVF9NQVgsCgogICAgX1NDX0lOVF9NSU4sCgogICAgX1NDX0xPTkdfQklULAoKICAgIF9TQ19X T1JEX0JJVCwKCiAgICBfU0NfTUJfTEVOX01BWCwKCiAgICBfU0NfTlpFUk8sCgogICAgX1NDX1NT SVpFX01BWCwKCiAgICBfU0NfU0NIQVJfTUFYLAoKICAgIF9TQ19TQ0hBUl9NSU4sCgogICAgX1ND X1NIUlRfTUFYLAoKICAgIF9TQ19TSFJUX01JTiwKCiAgICBfU0NfVUNIQVJfTUFYLAoKICAgIF9T Q19VSU5UX01BWCwKCiAgICBfU0NfVUxPTkdfTUFYLAoKICAgIF9TQ19VU0hSVF9NQVgsCgoKICAg IF9TQ19OTF9BUkdNQVgsCgogICAgX1NDX05MX0xBTkdNQVgsCgogICAgX1NDX05MX01TR01BWCwK CiAgICBfU0NfTkxfTk1BWCwKCiAgICBfU0NfTkxfU0VUTUFYLAoKICAgIF9TQ19OTF9URVhUTUFY LAoKCiAgICBfU0NfWEJTNV9JTFAzMl9PRkYzMiwKCiAgICBfU0NfWEJTNV9JTFAzMl9PRkZCSUcs CgogICAgX1NDX1hCUzVfTFA2NF9PRkY2NCwKCiAgICBfU0NfWEJTNV9MUEJJR19PRkZCSUcsCgoK ICAgIF9TQ19YT1BFTl9MRUdBQ1ksCgogICAgX1NDX1hPUEVOX1JFQUxUSU1FLAoKICAgIF9TQ19Y T1BFTl9SRUFMVElNRV9USFJFQURTLAoKCiAgICBfU0NfQURWSVNPUllfSU5GTywKCiAgICBfU0Nf QkFSUklFUlMsCgogICAgX1NDX0JBU0UsCgogICAgX1NDX0NfTEFOR19TVVBQT1JULAoKICAgIF9T Q19DX0xBTkdfU1VQUE9SVF9SLAoKICAgIF9TQ19DTE9DS19TRUxFQ1RJT04sCgogICAgX1NDX0NQ VVRJTUUsCgogICAgX1NDX1RIUkVBRF9DUFVUSU1FLAoKICAgIF9TQ19ERVZJQ0VfSU8sCgogICAg X1NDX0RFVklDRV9TUEVDSUZJQywKCiAgICBfU0NfREVWSUNFX1NQRUNJRklDX1IsCgogICAgX1ND X0ZEX01HTVQsCgogICAgX1NDX0ZJRk8sCgogICAgX1NDX1BJUEUsCgogICAgX1NDX0ZJTEVfQVRU UklCVVRFUywKCiAgICBfU0NfRklMRV9MT0NLSU5HLAoKICAgIF9TQ19GSUxFX1NZU1RFTSwKCiAg ICBfU0NfTU9OT1RPTklDX0NMT0NLLAoKICAgIF9TQ19NVUxUSV9QUk9DRVNTLAoKICAgIF9TQ19T SU5HTEVfUFJPQ0VTUywKCiAgICBfU0NfTkVUV09SS0lORywKCiAgICBfU0NfUkVBREVSX1dSSVRF Ul9MT0NLUywKCiAgICBfU0NfU1BJTl9MT0NLUywKCiAgICBfU0NfUkVHRVhQLAoKICAgIF9TQ19S RUdFWF9WRVJTSU9OLAoKICAgIF9TQ19TSEVMTCwKCiAgICBfU0NfU0lHTkFMUywKCiAgICBfU0Nf U1BBV04sCgogICAgX1NDX1NQT1JBRElDX1NFUlZFUiwKCiAgICBfU0NfVEhSRUFEX1NQT1JBRElD X1NFUlZFUiwKCiAgICBfU0NfU1lTVEVNX0RBVEFCQVNFLAoKICAgIF9TQ19TWVNURU1fREFUQUJB U0VfUiwKCiAgICBfU0NfVElNRU9VVFMsCgogICAgX1NDX1RZUEVEX01FTU9SWV9PQkpFQ1RTLAoK ICAgIF9TQ19VU0VSX0dST1VQUywKCiAgICBfU0NfVVNFUl9HUk9VUFNfUiwKCiAgICBfU0NfMl9Q QlMsCgogICAgX1NDXzJfUEJTX0FDQ09VTlRJTkcsCgogICAgX1NDXzJfUEJTX0xPQ0FURSwKCiAg ICBfU0NfMl9QQlNfTUVTU0FHRSwKCiAgICBfU0NfMl9QQlNfVFJBQ0ssCgogICAgX1NDX1NZTUxP T1BfTUFYLAoKICAgIF9TQ19TVFJFQU1TLAoKICAgIF9TQ18yX1BCU19DSEVDS1BPSU5ULAoKCiAg ICBfU0NfVjZfSUxQMzJfT0ZGMzIsCgogICAgX1NDX1Y2X0lMUDMyX09GRkJJRywKCiAgICBfU0Nf VjZfTFA2NF9PRkY2NCwKCiAgICBfU0NfVjZfTFBCSUdfT0ZGQklHLAoKCiAgICBfU0NfSE9TVF9O QU1FX01BWCwKCiAgICBfU0NfVFJBQ0UsCgogICAgX1NDX1RSQUNFX0VWRU5UX0ZJTFRFUiwKCiAg ICBfU0NfVFJBQ0VfSU5IRVJJVCwKCiAgICBfU0NfVFJBQ0VfTE9HCgogIH07CgoKCgoKZW51bQog IHsKICAgIF9DU19QQVRILAojIDU2MyAiL3Vzci9sb2NhbC9pbmNsdWRlL2JpdHMvY29uZm5hbWUu aCIgMwogICAgX0NTX1Y2X1dJRFRIX1JFU1RSSUNURURfRU5WUwoKICB9OwojIDUwMSAiL3Vzci9s b2NhbC9pbmNsdWRlL3VuaXN0ZC5oIiAyIDMKCgpleHRlcm4gbG9uZyBpbnQgcGF0aGNvbmYgKF9f Y29uc3QgY2hhciAqX19wYXRoLCBpbnQgX19uYW1lKSA7CgoKZXh0ZXJuIGxvbmcgaW50IGZwYXRo Y29uZiAoaW50IF9fZmQsIGludCBfX25hbWUpIDsKCgpleHRlcm4gbG9uZyBpbnQgc3lzY29uZiAo aW50IF9fbmFtZSkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgpleHRlcm4gc2l6ZV90 IGNvbmZzdHIgKGludCBfX25hbWUsIGNoYXIgKl9fYnVmLCBzaXplX3QgX19sZW4pIDsKCgoKCmV4 dGVybiBfX3BpZF90IGdldHBpZCAodm9pZCkgOwoKCmV4dGVybiBfX3BpZF90IGdldHBwaWQgKHZv aWQpIDsKCgoKCmV4dGVybiBfX3BpZF90IGdldHBncnAgKHZvaWQpIDsKIyA1MzYgIi91c3IvbG9j YWwvaW5jbHVkZS91bmlzdGQuaCIgMwpleHRlcm4gX19waWRfdCBfX2dldHBnaWQgKF9fcGlkX3Qg X19waWQpIDsKIyA1NDUgIi91c3IvbG9jYWwvaW5jbHVkZS91bmlzdGQuaCIgMwpleHRlcm4gaW50 IHNldHBnaWQgKF9fcGlkX3QgX19waWQsIF9fcGlkX3QgX19wZ2lkKSA7CiMgNTYyICIvdXNyL2xv Y2FsL2luY2x1ZGUvdW5pc3RkLmgiIDMKZXh0ZXJuIGludCBzZXRwZ3JwICh2b2lkKSA7CiMgNTgw ICIvdXNyL2xvY2FsL2luY2x1ZGUvdW5pc3RkLmgiIDMKZXh0ZXJuIF9fcGlkX3Qgc2V0c2lkICh2 b2lkKSA7CgoKCgoKCgpleHRlcm4gX191aWRfdCBnZXR1aWQgKHZvaWQpIDsKCgpleHRlcm4gX191 aWRfdCBnZXRldWlkICh2b2lkKSA7CgoKZXh0ZXJuIF9fZ2lkX3QgZ2V0Z2lkICh2b2lkKSA7CgoK ZXh0ZXJuIF9fZ2lkX3QgZ2V0ZWdpZCAodm9pZCkgOwoKCgoKZXh0ZXJuIGludCBnZXRncm91cHMg KGludCBfX3NpemUsIF9fZ2lkX3QgX19saXN0W10pIDsKIyA2MTMgIi91c3IvbG9jYWwvaW5jbHVk ZS91bmlzdGQuaCIgMwpleHRlcm4gaW50IHNldHVpZCAoX191aWRfdCBfX3VpZCkgOwoKCgoKZXh0 ZXJuIGludCBzZXRyZXVpZCAoX191aWRfdCBfX3J1aWQsIF9fdWlkX3QgX19ldWlkKSA7CgoKCgpl eHRlcm4gaW50IHNldGV1aWQgKF9fdWlkX3QgX191aWQpIDsKCgoKCgoKZXh0ZXJuIGludCBzZXRn aWQgKF9fZ2lkX3QgX19naWQpIDsKCgoKCmV4dGVybiBpbnQgc2V0cmVnaWQgKF9fZ2lkX3QgX19y Z2lkLCBfX2dpZF90IF9fZWdpZCkgOwoKCgoKZXh0ZXJuIGludCBzZXRlZ2lkIChfX2dpZF90IF9f Z2lkKSA7CgoKCgoKCmV4dGVybiBfX3BpZF90IGZvcmsgKHZvaWQpIDsKCgoKCgoKZXh0ZXJuIF9f cGlkX3QgdmZvcmsgKHZvaWQpIDsKCgoKCgpleHRlcm4gY2hhciAqdHR5bmFtZSAoaW50IF9fZmQp IDsKCgoKZXh0ZXJuIGludCB0dHluYW1lX3IgKGludCBfX2ZkLCBjaGFyICpfX2J1Ziwgc2l6ZV90 IF9fYnVmbGVuKSA7CgoKCmV4dGVybiBpbnQgaXNhdHR5IChpbnQgX19mZCkgOwoKCgoKCmV4dGVy biBpbnQgdHR5c2xvdCAodm9pZCkgOwoKCgoKZXh0ZXJuIGludCBsaW5rIChfX2NvbnN0IGNoYXIg Kl9fZnJvbSwgX19jb25zdCBjaGFyICpfX3RvKSA7CgoKCmV4dGVybiBpbnQgc3ltbGluayAoX19j b25zdCBjaGFyICpfX2Zyb20sIF9fY29uc3QgY2hhciAqX190bykgOwoKCgoKZXh0ZXJuIGludCBy ZWFkbGluayAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcGF0aCwgY2hhciAqX19yZXN0cmlj dCBfX2J1ZiwKICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbGVuKSA7CgoKCmV4dGVybiBp bnQgdW5saW5rIChfX2NvbnN0IGNoYXIgKl9fbmFtZSkgOwoKCmV4dGVybiBpbnQgcm1kaXIgKF9f Y29uc3QgY2hhciAqX19wYXRoKSA7CgoKCmV4dGVybiBfX3BpZF90IHRjZ2V0cGdycCAoaW50IF9f ZmQpIDsKCgpleHRlcm4gaW50IHRjc2V0cGdycCAoaW50IF9fZmQsIF9fcGlkX3QgX19wZ3JwX2lk KSA7CgoKCmV4dGVybiBjaGFyICpnZXRsb2dpbiAodm9pZCkgOwojIDcxNyAiL3Vzci9sb2NhbC9p bmNsdWRlL3VuaXN0ZC5oIiAzCmV4dGVybiBpbnQgc2V0bG9naW4gKF9fY29uc3QgY2hhciAqX19u YW1lKSA7CiMgNzI2ICIvdXNyL2xvY2FsL2luY2x1ZGUvdW5pc3RkLmgiIDMKIyAxICIvdXNyL2xv Y2FsL2luY2x1ZGUvZ2V0b3B0LmgiIDEgMwojIDQ3ICIvdXNyL2xvY2FsL2luY2x1ZGUvZ2V0b3B0 LmgiIDMKZXh0ZXJuIGNoYXIgKm9wdGFyZzsKIyA2MSAiL3Vzci9sb2NhbC9pbmNsdWRlL2dldG9w dC5oIiAzCmV4dGVybiBpbnQgb3B0aW5kOwoKCgoKZXh0ZXJuIGludCBvcHRlcnI7CgoKCmV4dGVy biBpbnQgb3B0b3B0OwojIDE0NSAiL3Vzci9sb2NhbC9pbmNsdWRlL2dldG9wdC5oIiAzCmV4dGVy biBpbnQgZ2V0b3B0IChpbnQgX19fYXJnYywgY2hhciAqY29uc3QgKl9fX2FyZ3YsIGNvbnN0IGNo YXIgKl9fc2hvcnRvcHRzKTsKIyA3MjcgIi91c3IvbG9jYWwvaW5jbHVkZS91bmlzdGQuaCIgMiAz CgoKCgoKCgpleHRlcm4gaW50IGdldGhvc3RuYW1lIChjaGFyICpfX25hbWUsIHNpemVfdCBfX2xl bikgOwoKCgoKCgpleHRlcm4gaW50IHNldGhvc3RuYW1lIChfX2NvbnN0IGNoYXIgKl9fbmFtZSwg c2l6ZV90IF9fbGVuKSA7CgoKCmV4dGVybiBpbnQgc2V0aG9zdGlkIChsb25nIGludCBfX2lkKSA7 CgoKCgoKZXh0ZXJuIGludCBnZXRkb21haW5uYW1lIChjaGFyICpfX25hbWUsIHNpemVfdCBfX2xl bikgOwpleHRlcm4gaW50IHNldGRvbWFpbm5hbWUgKF9fY29uc3QgY2hhciAqX19uYW1lLCBzaXpl X3QgX19sZW4pIDsKCgoKCgpleHRlcm4gaW50IHZoYW5ndXAgKHZvaWQpIDsKCgpleHRlcm4gaW50 IHJldm9rZSAoX19jb25zdCBjaGFyICpfX2ZpbGUpIDsKCgoKCgoKCmV4dGVybiBpbnQgcHJvZmls ICh1bnNpZ25lZCBzaG9ydCBpbnQgKl9fc2FtcGxlX2J1ZmZlciwgc2l6ZV90IF9fc2l6ZSwKICAg ICAgICAgICAgICAgICAgIHNpemVfdCBfX29mZnNldCwgdW5zaWduZWQgaW50IF9fc2NhbGUpIDsK CgoKCgpleHRlcm4gaW50IGFjY3QgKF9fY29uc3QgY2hhciAqX19uYW1lKSA7CgoKCmV4dGVybiBj aGFyICpnZXR1c2Vyc2hlbGwgKHZvaWQpIDsKZXh0ZXJuIHZvaWQgZW5kdXNlcnNoZWxsICh2b2lk KSA7CmV4dGVybiB2b2lkIHNldHVzZXJzaGVsbCAodm9pZCkgOwoKCgoKCmV4dGVybiBpbnQgZGFl bW9uIChpbnQgX19ub2NoZGlyLCBpbnQgX19ub2Nsb3NlKSA7CgoKCgoKCmV4dGVybiBpbnQgY2hy b290IChfX2NvbnN0IGNoYXIgKl9fcGF0aCkgOwoKCgpleHRlcm4gY2hhciAqZ2V0cGFzcyAoX19j b25zdCBjaGFyICpfX3Byb21wdCkgOwoKCgoKCmV4dGVybiBpbnQgZnN5bmMgKGludCBfX2ZkKSA7 CgoKCgoKCmV4dGVybiBsb25nIGludCBnZXRob3N0aWQgKHZvaWQpIDsKCgpleHRlcm4gdm9pZCBz eW5jICh2b2lkKSA7CgoKCgpleHRlcm4gaW50IGdldHBhZ2VzaXplICh2b2lkKSBfX2F0dHJpYnV0 ZV9fICgoX19jb25zdF9fKSk7CgoKCgpleHRlcm4gaW50IHRydW5jYXRlIChfX2NvbnN0IGNoYXIg Kl9fZmlsZSwgX19vZmZfdCBfX2xlbmd0aCkgOwojIDg0MSAiL3Vzci9sb2NhbC9pbmNsdWRlL3Vu aXN0ZC5oIiAzCmV4dGVybiBpbnQgZnRydW5jYXRlIChpbnQgX19mZCwgX19vZmZfdCBfX2xlbmd0 aCkgOwojIDg1NyAiL3Vzci9sb2NhbC9pbmNsdWRlL3VuaXN0ZC5oIiAzCmV4dGVybiBpbnQgZ2V0 ZHRhYmxlc2l6ZSAodm9pZCkgOwojIDg2NiAiL3Vzci9sb2NhbC9pbmNsdWRlL3VuaXN0ZC5oIiAz CmV4dGVybiBpbnQgYnJrICh2b2lkICpfX2FkZHIpIDsKCgoKCgpleHRlcm4gdm9pZCAqc2JyayAo aW50cHRyX3QgX19kZWx0YSkgOwojIDg4NyAiL3Vzci9sb2NhbC9pbmNsdWRlL3VuaXN0ZC5oIiAz CmV4dGVybiBsb25nIGludCBzeXNjYWxsIChsb25nIGludCBfX3N5c25vLCAuLi4pIDsKIyA5MDcg Ii91c3IvbG9jYWwvaW5jbHVkZS91bmlzdGQuaCIgMwpleHRlcm4gaW50IGxvY2tmIChpbnQgX19m ZCwgaW50IF9fY21kLCBfX29mZl90IF9fbGVuKSA7CiMgOTM4ICIvdXNyL2xvY2FsL2luY2x1ZGUv dW5pc3RkLmgiIDMKZXh0ZXJuIGludCBmZGF0YXN5bmMgKGludCBfX2ZpbGRlcykgOwojIDk4MyAi L3Vzci9sb2NhbC9pbmNsdWRlL3VuaXN0ZC5oIiAzCmV4dGVybiBpbnQgcHRocmVhZF9hdGZvcmsg KHZvaWQgKCpfX3ByZXBhcmUpICh2b2lkKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9p ZCAoKl9fcGFyZW50KSAodm9pZCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCpf X2NoaWxkKSAodm9pZCkpIDsKIyA0ICJoZWFkZXJzL2xpbnV4ZGVmLmgiIDIKIyAxICIvdXNyL2xv Y2FsL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDEgMwojIDUgImhlYWRlcnMvbGludXhkZWYuaCIgMgoK IyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvc3lzL3NvY2tldC5oIiAxIDMKIyAyMyAiL3Vzci9sb2Nh bC9pbmNsdWRlL3N5cy9zb2NrZXQuaCIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9mZWF0dXJl cy5oIiAxIDMKIyAyNCAiL3Vzci9sb2NhbC9pbmNsdWRlL3N5cy9zb2NrZXQuaCIgMiAzCgoKCiMg MSAiL3Vzci9sb2NhbC9pbmNsdWRlL3N5cy91aW8uaCIgMSAzCiMgMjIgIi91c3IvbG9jYWwvaW5j bHVkZS9zeXMvdWlvLmgiIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAz CiMgMjMgIi91c3IvbG9jYWwvaW5jbHVkZS9zeXMvdWlvLmgiIDIgMwoKIyAxICIvdXNyL2xvY2Fs L2luY2x1ZGUvc3lzL3R5cGVzLmgiIDEgMwojIDI1ICIvdXNyL2xvY2FsL2luY2x1ZGUvc3lzL3Vp by5oIiAyIDMKCgoKCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2JpdHMvdWlvLmgiIDEgMwojIDI0 ICIvdXNyL2xvY2FsL2luY2x1ZGUvYml0cy91aW8uaCIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVk ZS9zeXMvdHlwZXMuaCIgMSAzCiMgMjUgIi91c3IvbG9jYWwvaW5jbHVkZS9iaXRzL3Vpby5oIiAy IDMKIyA0MiAiL3Vzci9sb2NhbC9pbmNsdWRlL2JpdHMvdWlvLmgiIDMKc3RydWN0IGlvdmVjCiAg ewogICAgdm9pZCAqaW92X2Jhc2U7CiAgICBzaXplX3QgaW92X2xlbjsKICB9OwojIDMwICIvdXNy L2xvY2FsL2luY2x1ZGUvc3lzL3Vpby5oIiAyIDMKCgoKCgoKCmV4dGVybiBzc2l6ZV90IHJlYWR2 IChpbnQgX19mZCwgX19jb25zdCBzdHJ1Y3QgaW92ZWMgKl9fdmVjdG9yLCBpbnQgX19jb3VudCkK ICAgICAgICAgICAgOwoKCgoKCgpleHRlcm4gc3NpemVfdCB3cml0ZXYgKGludCBfX2ZkLCBfX2Nv bnN0IHN0cnVjdCBpb3ZlYyAqX192ZWN0b3IsIGludCBfX2NvdW50KQogICAgICAgICAgICA7CiMg MjggIi91c3IvbG9jYWwvaW5jbHVkZS9zeXMvc29ja2V0LmgiIDIgMwoKIyAxICIvdXNyL2xvY2Fs L2djYy8zLjAuNC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAuNC9pbmNsdWRlL3N0 ZGRlZi5oIiAxIDMKIyAzMCAiL3Vzci9sb2NhbC9pbmNsdWRlL3N5cy9zb2NrZXQuaCIgMiAzCgoK CgoKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvYml0cy9zb2NrZXQuaCIgMSAzCiMgMjkgIi91c3Iv bG9jYWwvaW5jbHVkZS9iaXRzL3NvY2tldC5oIiAzCiMgMSAiL3Vzci9sb2NhbC9nY2MvMy4wLjQv bGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wLjQvaW5jbHVkZS9zdGRkZWYuaCIgMSAz CiMgMzAgIi91c3IvbG9jYWwvaW5jbHVkZS9iaXRzL3NvY2tldC5oIiAyIDMKCiMgMSAiL3Vzci9s b2NhbC9pbmNsdWRlL2xpbWl0cy5oIiAxIDMKIyAxNDQgIi91c3IvbG9jYWwvaW5jbHVkZS9saW1p dHMuaCIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9iaXRzL3Bvc2l4MV9saW0uaCIgMSAzCiMg MTQ1ICIvdXNyL2xvY2FsL2luY2x1ZGUvbGltaXRzLmgiIDIgMwoKCgojIDEgIi91c3IvbG9jYWwv aW5jbHVkZS9iaXRzL3Bvc2l4Ml9saW0uaCIgMSAzCiMgMTQ5ICIvdXNyL2xvY2FsL2luY2x1ZGUv bGltaXRzLmgiIDIgMwojIDMyICIvdXNyL2xvY2FsL2luY2x1ZGUvYml0cy9zb2NrZXQuaCIgMiAz CiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL3N5cy90eXBlcy5oIiAxIDMKIyAzMyAiL3Vzci9sb2Nh bC9pbmNsdWRlL2JpdHMvc29ja2V0LmgiIDIgMwojIDQxICIvdXNyL2xvY2FsL2luY2x1ZGUvYml0 cy9zb2NrZXQuaCIgMwplbnVtIF9fc29ja2V0X3R5cGUKewogIFNPQ0tfU1RSRUFNID0gMSwKCgog IFNPQ0tfREdSQU0gPSAyLAoKCiAgU09DS19SQVcgPSAzLAoKICBTT0NLX1JETSA9IDQsCgogIFNP Q0tfU0VRUEFDS0VUID0gNSwKCgogIFNPQ0tfUEFDS0VUID0gMTAKCgoKfTsKIyAxNDIgIi91c3Iv bG9jYWwvaW5jbHVkZS9iaXRzL3NvY2tldC5oIiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2Jp dHMvc29ja2FkZHIuaCIgMSAzCiMgMjkgIi91c3IvbG9jYWwvaW5jbHVkZS9iaXRzL3NvY2thZGRy LmgiIDMKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBpbnQgc2FfZmFtaWx5X3Q7CiMgMTQzICIvdXNy L2xvY2FsL2luY2x1ZGUvYml0cy9zb2NrZXQuaCIgMiAzCgoKc3RydWN0IHNvY2thZGRyCiAgewog ICAgc2FfZmFtaWx5X3Qgc2FfZmFtaWx5OwogICAgY2hhciBzYV9kYXRhWzE0XTsKICB9OwojIDE2 MiAiL3Vzci9sb2NhbC9pbmNsdWRlL2JpdHMvc29ja2V0LmgiIDMKc3RydWN0IHNvY2thZGRyX3N0 b3JhZ2UKICB7CiAgICBzYV9mYW1pbHlfdCBzc19mYW1pbHk7CiAgICBfX3VpbnQzMl90IF9fc3Nf YWxpZ247CiAgICBjaGFyIF9fc3NfcGFkZGluZ1soMTI4IC0gKDIgKiBzaXplb2YgKF9fdWludDMy X3QpKSldOwogIH07CgoKCmVudW0KICB7CiAgICBNU0dfT09CID0gMHgwMSwKCiAgICBNU0dfUEVF SyA9IDB4MDIsCgogICAgTVNHX0RPTlRST1VURSA9IDB4MDQsCgoKCgoKCiAgICBNU0dfQ1RSVU5D ID0gMHgwOCwKCiAgICBNU0dfUFJPWFkgPSAweDEwLAoKICAgIE1TR19UUlVOQyA9IDB4MjAsCgog ICAgTVNHX0RPTlRXQUlUID0gMHg0MCwKCiAgICBNU0dfRU9SID0gMHg4MCwKCiAgICBNU0dfV0FJ VEFMTCA9IDB4MTAwLAoKICAgIE1TR19GSU4gPSAweDIwMCwKCiAgICBNU0dfU1lOID0gMHg0MDAs CgogICAgTVNHX0NPTkZJUk0gPSAweDgwMCwKCiAgICBNU0dfUlNUID0gMHgxMDAwLAoKICAgIE1T R19FUlJRVUVVRSA9IDB4MjAwMCwKCiAgICBNU0dfTk9TSUdOQUwgPSAweDQwMDAsCgogICAgTVNH X01PUkUgPSAweDgwMDAKCiAgfTsKCgoKCnN0cnVjdCBtc2doZHIKICB7CiAgICB2b2lkICptc2df bmFtZTsKICAgIHNvY2tsZW5fdCBtc2dfbmFtZWxlbjsKCiAgICBzdHJ1Y3QgaW92ZWMgKm1zZ19p b3Y7CiAgICBpbnQgbXNnX2lvdmxlbjsKCiAgICB2b2lkICptc2dfY29udHJvbDsKICAgIHNvY2ts ZW5fdCBtc2dfY29udHJvbGxlbjsKCiAgICBpbnQgbXNnX2ZsYWdzOwogIH07CgoKc3RydWN0IGNt c2doZHIKICB7CiAgICBzaXplX3QgY21zZ19sZW47CgogICAgaW50IGNtc2dfbGV2ZWw7CiAgICBp bnQgY21zZ190eXBlOwoKICAgIF9fZXh0ZW5zaW9uX18gdW5zaWduZWQgY2hhciBfX2Ntc2dfZGF0 YSBbXTsKCiAgfTsKIyAyNTcgIi91c3IvbG9jYWwvaW5jbHVkZS9iaXRzL3NvY2tldC5oIiAzCmV4 dGVybiBzdHJ1Y3QgY21zZ2hkciAqX19jbXNnX254dGhkciAoc3RydWN0IG1zZ2hkciAqX19taGRy LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjbXNnaGRyICpf X2Ntc2cpIDsKCgoKCmV4dGVybiBfX2lubGluZSBzdHJ1Y3QgY21zZ2hkciAqCl9fY21zZ19ueHRo ZHIgKHN0cnVjdCBtc2doZHIgKl9fbWhkciwgc3RydWN0IGNtc2doZHIgKl9fY21zZykKewogIGlm ICgoc2l6ZV90KSBfX2Ntc2ctPmNtc2dfbGVuIDwgc2l6ZW9mIChzdHJ1Y3QgY21zZ2hkcikpCgog ICAgcmV0dXJuIDA7CgogIF9fY21zZyA9IChzdHJ1Y3QgY21zZ2hkciAqKSAoKHVuc2lnbmVkIGNo YXIgKikgX19jbXNnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICgoKF9fY21zZy0+ Y21zZ19sZW4pICsgc2l6ZW9mIChzaXplX3QpIC0gMSkgJiAoc2l6ZV90KSB+KHNpemVvZiAoc2l6 ZV90KSAtIDEpKSk7CiAgaWYgKCh1bnNpZ25lZCBjaGFyICopIChfX2Ntc2cgKyAxKSA+ICgodW5z aWduZWQgY2hhciAqKSBfX21oZHItPm1zZ19jb250cm9sCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICArIF9fbWhkci0+bXNnX2NvbnRyb2xsZW4pCiAgICAgIHx8ICgodW5z aWduZWQgY2hhciAqKSBfX2Ntc2cgKyAoKChfX2Ntc2ctPmNtc2dfbGVuKSArIHNpemVvZiAoc2l6 ZV90KSAtIDEpICYgKHNpemVfdCkgfihzaXplb2YgKHNpemVfdCkgLSAxKSkKICAgICAgICAgID4g KCh1bnNpZ25lZCBjaGFyICopIF9fbWhkci0+bXNnX2NvbnRyb2wgKyBfX21oZHItPm1zZ19jb250 cm9sbGVuKSkpCgogICAgcmV0dXJuIDA7CiAgcmV0dXJuIF9fY21zZzsKfQoKCgoKZW51bQogIHsK ICAgIFNDTV9SSUdIVFMgPSAweDAxLAoKCiAgICBTQ01fQ1JFREVOVElBTFMgPSAweDAyLAoKCiAg ICBfX1NDTV9DT05ORUNUID0gMHgwMwogIH07CgoKCnN0cnVjdCB1Y3JlZAp7CiAgcGlkX3QgcGlk OwogIHVpZF90IHVpZDsKICBnaWRfdCBnaWQ7Cn07CgoKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUv YXNtL3NvY2tldC5oIiAxIDMKCgoKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvYXNtL3NvY2tpb3Mu aCIgMSAzCiMgNSAiL3Vzci9sb2NhbC9pbmNsdWRlL2FzbS9zb2NrZXQuaCIgMiAzCiMgMzA2ICIv dXNyL2xvY2FsL2luY2x1ZGUvYml0cy9zb2NrZXQuaCIgMiAzCgoKCnN0cnVjdCBsaW5nZXIKICB7 CiAgICBpbnQgbF9vbm9mZjsKICAgIGludCBsX2xpbmdlcjsKICB9OwojIDM2ICIvdXNyL2xvY2Fs L2luY2x1ZGUvc3lzL3NvY2tldC5oIiAyIDMKCgoKCnN0cnVjdCBvc29ja2FkZHIKICB7CiAgICB1 bnNpZ25lZCBzaG9ydCBpbnQgc2FfZmFtaWx5OwogICAgdW5zaWduZWQgY2hhciBzYV9kYXRhWzE0 XTsKICB9OwoKCgoKZW51bQp7CiAgU0hVVF9SRCA9IDAsCgogIFNIVVRfV1IsCgogIFNIVVRfUkRX UgoKfTsKIyAxMDAgIi91c3IvbG9jYWwvaW5jbHVkZS9zeXMvc29ja2V0LmgiIDMKZXh0ZXJuIGlu dCBzb2NrZXQgKGludCBfX2RvbWFpbiwgaW50IF9fdHlwZSwgaW50IF9fcHJvdG9jb2wpIDsKCgoK CgpleHRlcm4gaW50IHNvY2tldHBhaXIgKGludCBfX2RvbWFpbiwgaW50IF9fdHlwZSwgaW50IF9f cHJvdG9jb2wsCiAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fZmRzWzJdKSA7CgoKZXh0ZXJu IGludCBiaW5kIChpbnQgX19mZCwgX19jb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKiBfX2FkZHIsIHNv Y2tsZW5fdCBfX2xlbikKICAgICAgICAgICAgOwoKCmV4dGVybiBpbnQgZ2V0c29ja25hbWUgKGlu dCBfX2ZkLCBzdHJ1Y3Qgc29ja2FkZHIgKl9fcmVzdHJpY3QgX19hZGRyLAogICAgICAgICAgICAg ICAgICAgICAgICBzb2NrbGVuX3QgKl9fcmVzdHJpY3QgX19sZW4pIDsKCgoKCgpleHRlcm4gaW50 IGNvbm5lY3QgKGludCBfX2ZkLCBfX2NvbnN0IHN0cnVjdCBzb2NrYWRkciAqIF9fYWRkciwgc29j a2xlbl90IF9fbGVuKQogICAgICAgICAgICA7CgoKCmV4dGVybiBpbnQgZ2V0cGVlcm5hbWUgKGlu dCBfX2ZkLCBzdHJ1Y3Qgc29ja2FkZHIgKl9fcmVzdHJpY3QgX19hZGRyLAogICAgICAgICAgICAg ICAgICAgICAgICBzb2NrbGVuX3QgKl9fcmVzdHJpY3QgX19sZW4pIDsKCgoKZXh0ZXJuIHNzaXpl X3Qgc2VuZCAoaW50IF9fZmQsIF9fY29uc3Qgdm9pZCAqX19idWYsIHNpemVfdCBfX24sIGludCBf X2ZsYWdzKQogICAgICAgICAgICA7CgoKCmV4dGVybiBzc2l6ZV90IHJlY3YgKGludCBfX2ZkLCB2 b2lkICpfX2J1Ziwgc2l6ZV90IF9fbiwgaW50IF9fZmxhZ3MpCiAgICAgICAgICAgIDsKCgoKZXh0 ZXJuIHNzaXplX3Qgc2VuZHRvIChpbnQgX19mZCwgX19jb25zdCB2b2lkICpfX2J1Ziwgc2l6ZV90 IF9fbiwKICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19mbGFncywgX19jb25zdCBzdHJ1Y3Qg c29ja2FkZHIgKiBfX2FkZHIsCiAgICAgICAgICAgICAgICAgICAgICAgc29ja2xlbl90IF9fYWRk cl9sZW4pIDsKCgoKCgpleHRlcm4gc3NpemVfdCByZWN2ZnJvbSAoaW50IF9fZmQsIHZvaWQgKl9f cmVzdHJpY3QgX19idWYsIHNpemVfdCBfX24sIGludCBfX2ZsYWdzLAogICAgICAgICAgICAgICAg ICAgICAgICAgc3RydWN0IHNvY2thZGRyICpfX3Jlc3RyaWN0IF9fYWRkciwgc29ja2xlbl90ICpf X3Jlc3RyaWN0IF9fYWRkcl9sZW4pCiAgICAgICAgICAgIDsKCgoKCmV4dGVybiBzc2l6ZV90IHNl bmRtc2cgKGludCBfX2ZkLCBfX2NvbnN0IHN0cnVjdCBtc2doZHIgKl9fbWVzc2FnZSwgaW50IF9f ZmxhZ3MpCiAgICAgICAgICAgIDsKCgoKZXh0ZXJuIHNzaXplX3QgcmVjdm1zZyAoaW50IF9fZmQs IHN0cnVjdCBtc2doZHIgKl9fbWVzc2FnZSwgaW50IF9fZmxhZ3MpCiAgICAgICAgICAgIDsKCgoK CgpleHRlcm4gaW50IGdldHNvY2tvcHQgKGludCBfX2ZkLCBpbnQgX19sZXZlbCwgaW50IF9fb3B0 bmFtZSwKICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpfX3Jlc3RyaWN0IF9fb3B0dmFsLAog ICAgICAgICAgICAgICAgICAgICAgIHNvY2tsZW5fdCAqX19yZXN0cmljdCBfX29wdGxlbikgOwoK CgoKZXh0ZXJuIGludCBzZXRzb2Nrb3B0IChpbnQgX19mZCwgaW50IF9fbGV2ZWwsIGludCBfX29w dG5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB2b2lkICpfX29wdHZhbCwgc29j a2xlbl90IF9fb3B0bGVuKSA7CgoKCgoKZXh0ZXJuIGludCBsaXN0ZW4gKGludCBfX2ZkLCBpbnQg X19uKSA7CgoKCgoKCmV4dGVybiBpbnQgYWNjZXB0IChpbnQgX19mZCwgc3RydWN0IHNvY2thZGRy ICpfX3Jlc3RyaWN0IF9fYWRkciwKICAgICAgICAgICAgICAgICAgIHNvY2tsZW5fdCAqX19yZXN0 cmljdCBfX2FkZHJfbGVuKQogICAgICAgICAgICA7CgoKCgoKCgpleHRlcm4gaW50IHNodXRkb3du IChpbnQgX19mZCwgaW50IF9faG93KSA7CiMgMjEyICIvdXNyL2xvY2FsL2luY2x1ZGUvc3lzL3Nv Y2tldC5oIiAzCmV4dGVybiBpbnQgaXNmZHR5cGUgKGludCBfX2ZkLCBpbnQgX19mZHR5cGUpIDsK IyA3ICJoZWFkZXJzL2xpbnV4ZGVmLmgiIDIKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvbmV0aW5l dC9pbi5oIiAxIDMKIyAyMiAiL3Vzci9sb2NhbC9pbmNsdWRlL25ldGluZXQvaW4uaCIgMwojIDEg Ii91c3IvbG9jYWwvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAyMyAiL3Vzci9sb2NhbC9pbmNs dWRlL25ldGluZXQvaW4uaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL3N0ZGludC5oIiAx IDMKIyAyNiAiL3Vzci9sb2NhbC9pbmNsdWRlL3N0ZGludC5oIiAzCiMgMSAiL3Vzci9sb2NhbC9p bmNsdWRlL2ZlYXR1cmVzLmgiIDEgMwojIDI3ICIvdXNyL2xvY2FsL2luY2x1ZGUvc3RkaW50Lmgi IDIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9iaXRzL3djaGFyLmgiIDEgMwojIDI4ICIvdXNy L2xvY2FsL2luY2x1ZGUvc3RkaW50LmgiIDIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9iaXRz L3dvcmRzaXplLmgiIDEgMwojIDI5ICIvdXNyL2xvY2FsL2luY2x1ZGUvc3RkaW50LmgiIDIgMwoj IDQ5ICIvdXNyL2xvY2FsL2luY2x1ZGUvc3RkaW50LmgiIDMKdHlwZWRlZiB1bnNpZ25lZCBjaGFy IHVpbnQ4X3Q7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IHVpbnQxNl90OwoKdHlwZWRlZiB1 bnNpZ25lZCBpbnQgdWludDMyX3Q7CgoKCgoKX19leHRlbnNpb25fXwp0eXBlZGVmIHVuc2lnbmVk IGxvbmcgbG9uZyBpbnQgdWludDY0X3Q7CgoKCgoKCnR5cGVkZWYgc2lnbmVkIGNoYXIgaW50X2xl YXN0OF90Owp0eXBlZGVmIHNob3J0IGludCBpbnRfbGVhc3QxNl90Owp0eXBlZGVmIGludCBpbnRf bGVhc3QzMl90OwoKCgpfX2V4dGVuc2lvbl9fCnR5cGVkZWYgbG9uZyBsb25nIGludCBpbnRfbGVh c3Q2NF90OwoKCgp0eXBlZGVmIHVuc2lnbmVkIGNoYXIgdWludF9sZWFzdDhfdDsKdHlwZWRlZiB1 bnNpZ25lZCBzaG9ydCBpbnQgdWludF9sZWFzdDE2X3Q7CnR5cGVkZWYgdW5zaWduZWQgaW50IHVp bnRfbGVhc3QzMl90OwoKCgpfX2V4dGVuc2lvbl9fCnR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25n IGludCB1aW50X2xlYXN0NjRfdDsKCgoKCgoKdHlwZWRlZiBzaWduZWQgY2hhciBpbnRfZmFzdDhf dDsKCgoKCgp0eXBlZGVmIGludCBpbnRfZmFzdDE2X3Q7CnR5cGVkZWYgaW50IGludF9mYXN0MzJf dDsKX19leHRlbnNpb25fXwp0eXBlZGVmIGxvbmcgbG9uZyBpbnQgaW50X2Zhc3Q2NF90OwoKCgp0 eXBlZGVmIHVuc2lnbmVkIGNoYXIgdWludF9mYXN0OF90OwoKCgoKCnR5cGVkZWYgdW5zaWduZWQg aW50IHVpbnRfZmFzdDE2X3Q7CnR5cGVkZWYgdW5zaWduZWQgaW50IHVpbnRfZmFzdDMyX3Q7Cl9f ZXh0ZW5zaW9uX18KdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IHVpbnRfZmFzdDY0X3Q7 CiMgMTI5ICIvdXNyL2xvY2FsL2luY2x1ZGUvc3RkaW50LmgiIDMKdHlwZWRlZiB1bnNpZ25lZCBp bnQgdWludHB0cl90OwojIDEzOCAiL3Vzci9sb2NhbC9pbmNsdWRlL3N0ZGludC5oIiAzCl9fZXh0 ZW5zaW9uX18KdHlwZWRlZiBsb25nIGxvbmcgaW50IGludG1heF90OwpfX2V4dGVuc2lvbl9fCnR5 cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIGludCB1aW50bWF4X3Q7CiMgMjQgIi91c3IvbG9jYWwv aW5jbHVkZS9uZXRpbmV0L2luLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9iaXRzL3R5 cGVzLmgiIDEgMwojIDI1ICIvdXNyL2xvY2FsL2luY2x1ZGUvbmV0aW5ldC9pbi5oIiAyIDMKCgoK CgplbnVtCiAgewogICAgSVBQUk9UT19JUCA9IDAsCgogICAgSVBQUk9UT19IT1BPUFRTID0gMCwK CiAgICBJUFBST1RPX0lDTVAgPSAxLAoKICAgIElQUFJPVE9fSUdNUCA9IDIsCgogICAgSVBQUk9U T19JUElQID0gNCwKCiAgICBJUFBST1RPX1RDUCA9IDYsCgogICAgSVBQUk9UT19FR1AgPSA4LAoK ICAgIElQUFJPVE9fUFVQID0gMTIsCgogICAgSVBQUk9UT19VRFAgPSAxNywKCiAgICBJUFBST1RP X0lEUCA9IDIyLAoKICAgIElQUFJPVE9fVFAgPSAyOSwKCiAgICBJUFBST1RPX0lQVjYgPSA0MSwK CiAgICBJUFBST1RPX1JPVVRJTkcgPSA0MywKCiAgICBJUFBST1RPX0ZSQUdNRU5UID0gNDQsCgog ICAgSVBQUk9UT19SU1ZQID0gNDYsCgogICAgSVBQUk9UT19HUkUgPSA0NywKCiAgICBJUFBST1RP X0VTUCA9IDUwLAoKICAgIElQUFJPVE9fQUggPSA1MSwKCiAgICBJUFBST1RPX0lDTVBWNiA9IDU4 LAoKICAgIElQUFJPVE9fTk9ORSA9IDU5LAoKICAgIElQUFJPVE9fRFNUT1BUUyA9IDYwLAoKICAg IElQUFJPVE9fTVRQID0gOTIsCgogICAgSVBQUk9UT19FTkNBUCA9IDk4LAoKICAgIElQUFJPVE9f UElNID0gMTAzLAoKICAgIElQUFJPVE9fQ09NUCA9IDEwOCwKCiAgICBJUFBST1RPX1JBVyA9IDI1 NSwKCiAgICBJUFBST1RPX01BWAogIH07CgoKCnR5cGVkZWYgdWludDE2X3QgaW5fcG9ydF90OwoK CmVudW0KICB7CiAgICBJUFBPUlRfRUNITyA9IDcsCiAgICBJUFBPUlRfRElTQ0FSRCA9IDksCiAg ICBJUFBPUlRfU1lTVEFUID0gMTEsCiAgICBJUFBPUlRfREFZVElNRSA9IDEzLAogICAgSVBQT1JU X05FVFNUQVQgPSAxNSwKICAgIElQUE9SVF9GVFAgPSAyMSwKICAgIElQUE9SVF9URUxORVQgPSAy MywKICAgIElQUE9SVF9TTVRQID0gMjUsCiAgICBJUFBPUlRfVElNRVNFUlZFUiA9IDM3LAogICAg SVBQT1JUX05BTUVTRVJWRVIgPSA0MiwKICAgIElQUE9SVF9XSE9JUyA9IDQzLAogICAgSVBQT1JU X01UUCA9IDU3LAoKICAgIElQUE9SVF9URlRQID0gNjksCiAgICBJUFBPUlRfUkpFID0gNzcsCiAg ICBJUFBPUlRfRklOR0VSID0gNzksCiAgICBJUFBPUlRfVFRZTElOSyA9IDg3LAogICAgSVBQT1JU X1NVUERVUCA9IDk1LAoKCiAgICBJUFBPUlRfRVhFQ1NFUlZFUiA9IDUxMiwKICAgIElQUE9SVF9M T0dJTlNFUlZFUiA9IDUxMywKICAgIElQUE9SVF9DTURTRVJWRVIgPSA1MTQsCiAgICBJUFBPUlRf RUZTU0VSVkVSID0gNTIwLAoKCiAgICBJUFBPUlRfQklGRlVEUCA9IDUxMiwKICAgIElQUE9SVF9X SE9TRVJWRVIgPSA1MTMsCiAgICBJUFBPUlRfUk9VVEVTRVJWRVIgPSA1MjAsCgoKICAgIElQUE9S VF9SRVNFUlZFRCA9IDEwMjQsCgoKICAgIElQUE9SVF9VU0VSUkVTRVJWRUQgPSA1MDAwCiAgfTsK CgoKdHlwZWRlZiB1aW50MzJfdCBpbl9hZGRyX3Q7CnN0cnVjdCBpbl9hZGRyCiAgewogICAgaW5f YWRkcl90IHNfYWRkcjsKICB9OwojIDE5MCAiL3Vzci9sb2NhbC9pbmNsdWRlL25ldGluZXQvaW4u aCIgMwpzdHJ1Y3QgaW42X2FkZHIKICB7CiAgICB1bmlvbgogICAgICB7CiAgICAgICAgdWludDhf dCB1Nl9hZGRyOFsxNl07CiAgICAgICAgdWludDE2X3QgdTZfYWRkcjE2WzhdOwogICAgICAgIHVp bnQzMl90IHU2X2FkZHIzMls0XTsKICAgICAgfSBpbjZfdTsKCgoKICB9OwoKZXh0ZXJuIGNvbnN0 IHN0cnVjdCBpbjZfYWRkciBpbjZhZGRyX2FueTsKZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbjZfYWRk ciBpbjZhZGRyX2xvb3BiYWNrOwoKCgoKCgoKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvYml0cy9z b2NrZXQuaCIgMSAzCiMgMjEzICIvdXNyL2xvY2FsL2luY2x1ZGUvbmV0aW5ldC9pbi5oIiAyIDMK CgoKc3RydWN0IHNvY2thZGRyX2luCiAgewogICAgc2FfZmFtaWx5X3Qgc2luX2ZhbWlseTsKICAg IGluX3BvcnRfdCBzaW5fcG9ydDsKICAgIHN0cnVjdCBpbl9hZGRyIHNpbl9hZGRyOwoKCiAgICB1 bnNpZ25lZCBjaGFyIHNpbl96ZXJvW3NpemVvZiAoc3RydWN0IHNvY2thZGRyKSAtCiAgICAgICAg ICAgICAgICAgICAgICAgICAgIChzaXplb2YgKHVuc2lnbmVkIHNob3J0IGludCkpIC0KICAgICAg ICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mIChpbl9wb3J0X3QpIC0KICAgICAgICAgICAgICAg ICAgICAgICAgICAgc2l6ZW9mIChzdHJ1Y3QgaW5fYWRkcildOwogIH07CgoKc3RydWN0IHNvY2th ZGRyX2luNgogIHsKICAgIHNhX2ZhbWlseV90IHNpbjZfZmFtaWx5OwogICAgaW5fcG9ydF90IHNp bjZfcG9ydDsKICAgIHVpbnQzMl90IHNpbjZfZmxvd2luZm87CiAgICBzdHJ1Y3QgaW42X2FkZHIg c2luNl9hZGRyOwogICAgdWludDMyX3Qgc2luNl9zY29wZV9pZDsKICB9OwoKCnN0cnVjdCBpcHY2 X21yZXEKICB7CgogICAgc3RydWN0IGluNl9hZGRyIGlwdjZtcl9tdWx0aWFkZHI7CgoKICAgIHVu c2lnbmVkIGludCBpcHY2bXJfaW50ZXJmYWNlOwogIH07CgoKIyAxICIvdXNyL2xvY2FsL2luY2x1 ZGUvYml0cy9pbi5oIiAxIDMKIyA2NiAiL3Vzci9sb2NhbC9pbmNsdWRlL2JpdHMvaW4uaCIgMwpz dHJ1Y3QgaXBfb3B0cwogIHsKICAgIHN0cnVjdCBpbl9hZGRyIGlwX2RzdDsKICAgIGNoYXIgaXBf b3B0c1s0MF07CiAgfTsKCgpzdHJ1Y3QgaXBfbXJlcQogIHsKICAgIHN0cnVjdCBpbl9hZGRyIGlt cl9tdWx0aWFkZHI7CiAgICBzdHJ1Y3QgaW5fYWRkciBpbXJfaW50ZXJmYWNlOwogIH07CgoKc3Ry dWN0IGlwX21yZXFuCiAgewogICAgc3RydWN0IGluX2FkZHIgaW1yX211bHRpYWRkcjsKICAgIHN0 cnVjdCBpbl9hZGRyIGltcl9hZGRyZXNzOwogICAgaW50IGltcl9pZmluZGV4OwogIH07CgoKc3Ry dWN0IGluX3BrdGluZm8KICB7CiAgICBpbnQgaXBpX2lmaW5kZXg7CiAgICBzdHJ1Y3QgaW5fYWRk ciBpcGlfc3BlY19kc3Q7CiAgICBzdHJ1Y3QgaW5fYWRkciBpcGlfYWRkcjsKICB9OwojIDI1MSAi L3Vzci9sb2NhbC9pbmNsdWRlL25ldGluZXQvaW4uaCIgMiAzCiMgMjU5ICIvdXNyL2xvY2FsL2lu Y2x1ZGUvbmV0aW5ldC9pbi5oIiAzCmV4dGVybiB1aW50MzJfdCBudG9obCAodWludDMyX3QgX19u ZXRsb25nKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CmV4dGVybiB1aW50MTZfdCBudG9o cyAodWludDE2X3QgX19uZXRzaG9ydCkKICAgICAgICAgICAgIF9fYXR0cmlidXRlX18gKChfX2Nv bnN0X18pKTsKZXh0ZXJuIHVpbnQzMl90IGh0b25sICh1aW50MzJfdCBfX2hvc3Rsb25nKQogICAg ICAgICAgICAgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwpleHRlcm4gdWludDE2X3QgaHRv bnMgKHVpbnQxNl90IF9faG9zdHNob3J0KQogICAgICAgICAgICAgX19hdHRyaWJ1dGVfXyAoKF9f Y29uc3RfXykpOwoKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZW5kaWFuLmgiIDEgMwojIDI2OCAi L3Vzci9sb2NhbC9pbmNsdWRlL25ldGluZXQvaW4uaCIgMiAzCgoKIyAxICIvdXNyL2xvY2FsL2lu Y2x1ZGUvYml0cy9ieXRlc3dhcC5oIiAxIDMKIyAyNzEgIi91c3IvbG9jYWwvaW5jbHVkZS9uZXRp bmV0L2luLmgiIDIgMwojIDMzMyAiL3Vzci9sb2NhbC9pbmNsdWRlL25ldGluZXQvaW4uaCIgMwpl eHRlcm4gaW50IGJpbmRyZXN2cG9ydCAoaW50IF9fc29ja2ZkLCBzdHJ1Y3Qgc29ja2FkZHJfaW4g Kl9fc29ja19pbikgOwoKCmV4dGVybiBpbnQgYmluZHJlc3Zwb3J0NiAoaW50IF9fc29ja2ZkLCBz dHJ1Y3Qgc29ja2FkZHJfaW42ICpfX3NvY2tfaW4pCiAgICAgICAgICAgIDsKIyAzNjEgIi91c3Iv bG9jYWwvaW5jbHVkZS9uZXRpbmV0L2luLmgiIDMKc3RydWN0IGluNl9wa3RpbmZvCiAgewogICAg c3RydWN0IGluNl9hZGRyIGlwaTZfYWRkcjsKICAgIHVuc2lnbmVkIGludCBpcGk2X2lmaW5kZXg7 CiAgfTsKIyA4ICJoZWFkZXJzL2xpbnV4ZGVmLmgiIDIKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUv YXJwYS9pbmV0LmgiIDEgMwojIDIyICIvdXNyL2xvY2FsL2luY2x1ZGUvYXJwYS9pbmV0LmgiIDMK IyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMjMgIi91c3IvbG9jYWwv aW5jbHVkZS9hcnBhL2luZXQuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL25ldGluZXQv aW4uaCIgMSAzCiMgMjQgIi91c3IvbG9jYWwvaW5jbHVkZS9hcnBhL2luZXQuaCIgMiAzCiMgMzUg Ii91c3IvbG9jYWwvaW5jbHVkZS9hcnBhL2luZXQuaCIgMwpleHRlcm4gaW5fYWRkcl90IGluZXRf YWRkciAoX19jb25zdCBjaGFyICpfX2NwKSA7CgoKZXh0ZXJuIGluX2FkZHJfdCBpbmV0X2xuYW9m IChzdHJ1Y3QgaW5fYWRkciBfX2luKSA7CgoKCmV4dGVybiBzdHJ1Y3QgaW5fYWRkciBpbmV0X21h a2VhZGRyIChpbl9hZGRyX3QgX19uZXQsIGluX2FkZHJfdCBfX2hvc3QpCiAgICAgICAgICAgIDsK CgpleHRlcm4gaW5fYWRkcl90IGluZXRfbmV0b2YgKHN0cnVjdCBpbl9hZGRyIF9faW4pIDsKCgoK ZXh0ZXJuIGluX2FkZHJfdCBpbmV0X25ldHdvcmsgKF9fY29uc3QgY2hhciAqX19jcCkgOwoKCgpl eHRlcm4gY2hhciAqaW5ldF9udG9hIChzdHJ1Y3QgaW5fYWRkciBfX2luKSA7CgoKCgpleHRlcm4g aW50IGluZXRfcHRvbiAoaW50IF9fYWYsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2NwLAog ICAgICAgICAgICAgICAgICAgICAgdm9pZCAqX19yZXN0cmljdCBfX2J1ZikgOwoKCgoKZXh0ZXJu IF9fY29uc3QgY2hhciAqaW5ldF9udG9wIChpbnQgX19hZiwgX19jb25zdCB2b2lkICpfX3Jlc3Ry aWN0IF9fY3AsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqX19yZXN0cmlj dCBfX2J1Ziwgc29ja2xlbl90IF9fbGVuKQogICAgICAgICAgICA7CgoKCgoKCmV4dGVybiBpbl9h ZGRyX3QgaW5ldF9hdG9uIChfX2NvbnN0IGNoYXIgKl9fY3AsIHN0cnVjdCBpbl9hZGRyICpfX2lu cCkgOwoKCgpleHRlcm4gY2hhciAqaW5ldF9uZXRhIChpbl9hZGRyX3QgX19uZXQsIGNoYXIgKl9f YnVmLCBzaXplX3QgX19sZW4pIDsKCgoKCmV4dGVybiBjaGFyICppbmV0X25ldF9udG9wIChpbnQg X19hZiwgX19jb25zdCB2b2lkICpfX2NwLCBpbnQgX19iaXRzLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgY2hhciAqX19idWYsIHNpemVfdCBfX2xlbikgOwoKCgoKZXh0ZXJuIGludCBpbmV0 X25ldF9wdG9uIChpbnQgX19hZiwgX19jb25zdCBjaGFyICpfX2NwLAogICAgICAgICAgICAgICAg ICAgICAgICAgIHZvaWQgKl9fYnVmLCBzaXplX3QgX19sZW4pIDsKCgoKCmV4dGVybiB1bnNpZ25l ZCBpbnQgaW5ldF9uc2FwX2FkZHIgKF9fY29uc3QgY2hhciAqX19jcCwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqX19idWYsIGludCBfX2xlbikgOwoK CgpleHRlcm4gY2hhciAqaW5ldF9uc2FwX250b2EgKGludCBfX2xlbiwgX19jb25zdCB1bnNpZ25l ZCBjaGFyICpfX2NwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKl9fYnVmKSA7 CiMgOSAiaGVhZGVycy9saW51eGRlZi5oIiAyCgojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9mY250 bC5oIiAxIDMKIyAyNiAiL3Vzci9sb2NhbC9pbmNsdWRlL2ZjbnRsLmgiIDMKIyAxICIvdXNyL2xv Y2FsL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMjcgIi91c3IvbG9jYWwvaW5jbHVkZS9mY250 bC5oIiAyIDMKCgoKCgoKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvYml0cy9mY250bC5oIiAxIDMK IyAyNSAiL3Vzci9sb2NhbC9pbmNsdWRlL2JpdHMvZmNudGwuaCIgMwojIDEgIi91c3IvbG9jYWwv aW5jbHVkZS9zeXMvdHlwZXMuaCIgMSAzCiMgMjYgIi91c3IvbG9jYWwvaW5jbHVkZS9iaXRzL2Zj bnRsLmgiIDIgMwojIDEzNiAiL3Vzci9sb2NhbC9pbmNsdWRlL2JpdHMvZmNudGwuaCIgMwpzdHJ1 Y3QgZmxvY2sKICB7CiAgICBzaG9ydCBpbnQgbF90eXBlOwogICAgc2hvcnQgaW50IGxfd2hlbmNl OwoKICAgIF9fb2ZmX3QgbF9zdGFydDsKICAgIF9fb2ZmX3QgbF9sZW47CgoKCgogICAgX19waWRf dCBsX3BpZDsKICB9OwojIDM0ICIvdXNyL2xvY2FsL2luY2x1ZGUvZmNudGwuaCIgMiAzCiMgNjAg Ii91c3IvbG9jYWwvaW5jbHVkZS9mY250bC5oIiAzCmV4dGVybiBpbnQgZmNudGwgKGludCBfX2Zk LCBpbnQgX19jbWQsIC4uLikgOwoKCgoKCmV4dGVybiBpbnQgb3BlbiAoX19jb25zdCBjaGFyICpf X2ZpbGUsIGludCBfX29mbGFnLCAuLi4pIDsKIyA4MyAiL3Vzci9sb2NhbC9pbmNsdWRlL2ZjbnRs LmgiIDMKZXh0ZXJuIGludCBjcmVhdCAoX19jb25zdCBjaGFyICpfX2ZpbGUsIF9fbW9kZV90IF9f bW9kZSkgOwojIDExICJoZWFkZXJzL2xpbnV4ZGVmLmgiIDIKIyAxICIvdXNyL2xvY2FsL2luY2x1 ZGUvc3lzL2ZpbGUuaCIgMSAzCiMgMjIgIi91c3IvbG9jYWwvaW5jbHVkZS9zeXMvZmlsZS5oIiAz CiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2ZlYXR1cmVzLmgiIDEgMwojIDIzICIvdXNyL2xvY2Fs L2luY2x1ZGUvc3lzL2ZpbGUuaCIgMiAzCiMgNTEgIi91c3IvbG9jYWwvaW5jbHVkZS9zeXMvZmls ZS5oIiAzCmV4dGVybiBpbnQgZmxvY2sgKGludCBfX2ZkLCBpbnQgX19vcGVyYXRpb24pIDsKIyAx MiAiaGVhZGVycy9saW51eGRlZi5oIiAyCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL3N5cy9pb2N0 bC5oIiAxIDMKIyAyMiAiL3Vzci9sb2NhbC9pbmNsdWRlL3N5cy9pb2N0bC5oIiAzCiMgMSAiL3Vz ci9sb2NhbC9pbmNsdWRlL2ZlYXR1cmVzLmgiIDEgMwojIDIzICIvdXNyL2xvY2FsL2luY2x1ZGUv c3lzL2lvY3RsLmgiIDIgMwoKCgoKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvYml0cy9pb2N0bHMu aCIgMSAzCiMgMjQgIi91c3IvbG9jYWwvaW5jbHVkZS9iaXRzL2lvY3Rscy5oIiAzCiMgMSAiL3Vz ci9sb2NhbC9pbmNsdWRlL2FzbS9pb2N0bHMuaCIgMSAzCgoKCiMgMSAiL3Vzci9sb2NhbC9pbmNs dWRlL2FzbS9pb2N0bC5oIiAxIDMKIyA1ICIvdXNyL2xvY2FsL2luY2x1ZGUvYXNtL2lvY3Rscy5o IiAyIDMKIyAyNSAiL3Vzci9sb2NhbC9pbmNsdWRlL2JpdHMvaW9jdGxzLmgiIDIgMwojIDI4ICIv dXNyL2xvY2FsL2luY2x1ZGUvc3lzL2lvY3RsLmgiIDIgMwoKCiMgMSAiL3Vzci9sb2NhbC9pbmNs dWRlL2JpdHMvaW9jdGwtdHlwZXMuaCIgMSAzCiMgMjUgIi91c3IvbG9jYWwvaW5jbHVkZS9iaXRz L2lvY3RsLXR5cGVzLmgiIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvYXNtL2lvY3Rscy5oIiAx IDMKIyAyNiAiL3Vzci9sb2NhbC9pbmNsdWRlL2JpdHMvaW9jdGwtdHlwZXMuaCIgMiAzCgoKc3Ry dWN0IHdpbnNpemUKICB7CiAgICB1bnNpZ25lZCBzaG9ydCBpbnQgd3Nfcm93OwogICAgdW5zaWdu ZWQgc2hvcnQgaW50IHdzX2NvbDsKICAgIHVuc2lnbmVkIHNob3J0IGludCB3c194cGl4ZWw7CiAg ICB1bnNpZ25lZCBzaG9ydCBpbnQgd3NfeXBpeGVsOwogIH07CgoKc3RydWN0IHRlcm1pbwogIHsK ICAgIHVuc2lnbmVkIHNob3J0IGludCBjX2lmbGFnOwogICAgdW5zaWduZWQgc2hvcnQgaW50IGNf b2ZsYWc7CiAgICB1bnNpZ25lZCBzaG9ydCBpbnQgY19jZmxhZzsKICAgIHVuc2lnbmVkIHNob3J0 IGludCBjX2xmbGFnOwogICAgdW5zaWduZWQgY2hhciBjX2xpbmU7CiAgICB1bnNpZ25lZCBjaGFy IGNfY2NbOF07Cn07CiMgMzEgIi91c3IvbG9jYWwvaW5jbHVkZS9zeXMvaW9jdGwuaCIgMiAzCgoK CgoKCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL3N5cy90dHlkZWZhdWx0cy5oIiAxIDMKIyAzOCAi L3Vzci9sb2NhbC9pbmNsdWRlL3N5cy9pb2N0bC5oIiAyIDMKCgoKCmV4dGVybiBpbnQgaW9jdGwg KGludCBfX2ZkLCB1bnNpZ25lZCBsb25nIGludCBfX3JlcXVlc3QsIC4uLikgOwojIDEzICJoZWFk ZXJzL2xpbnV4ZGVmLmgiIDIKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvc3lzL3RpbWUuaCIgMSAz CiMgMjIgIi91c3IvbG9jYWwvaW5jbHVkZS9zeXMvdGltZS5oIiAzCiMgMSAiL3Vzci9sb2NhbC9p bmNsdWRlL2ZlYXR1cmVzLmgiIDEgMwojIDIzICIvdXNyL2xvY2FsL2luY2x1ZGUvc3lzL3RpbWUu aCIgMiAzCgojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDEgMwojIDI1ICIv dXNyL2xvY2FsL2luY2x1ZGUvc3lzL3RpbWUuaCIgMiAzCgojIDEgIi91c3IvbG9jYWwvaW5jbHVk ZS90aW1lLmgiIDEgMwojIDI3ICIvdXNyL2xvY2FsL2luY2x1ZGUvc3lzL3RpbWUuaCIgMiAzCgoj IDEgIi91c3IvbG9jYWwvaW5jbHVkZS9iaXRzL3RpbWUuaCIgMSAzCiMgMjkgIi91c3IvbG9jYWwv aW5jbHVkZS9zeXMvdGltZS5oIiAyIDMKCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL3N5cy9zZWxl Y3QuaCIgMSAzCiMgMzEgIi91c3IvbG9jYWwvaW5jbHVkZS9zeXMvdGltZS5oIiAyIDMKIyA1NiAi L3Vzci9sb2NhbC9pbmNsdWRlL3N5cy90aW1lLmgiIDMKc3RydWN0IHRpbWV6b25lCiAgewogICAg aW50IHR6X21pbnV0ZXN3ZXN0OwogICAgaW50IHR6X2RzdHRpbWU7CiAgfTsKCnR5cGVkZWYgc3Ry dWN0IHRpbWV6b25lICpfX3Jlc3RyaWN0IF9fdGltZXpvbmVfcHRyX3Q7CiMgNzIgIi91c3IvbG9j YWwvaW5jbHVkZS9zeXMvdGltZS5oIiAzCmV4dGVybiBpbnQgZ2V0dGltZW9mZGF5IChzdHJ1Y3Qg dGltZXZhbCAqX19yZXN0cmljdCBfX3R2LAogICAgICAgICAgICAgICAgICAgICAgICAgX190aW1l em9uZV9wdHJfdCBfX3R6KSA7CgoKCgpleHRlcm4gaW50IHNldHRpbWVvZmRheSAoX19jb25zdCBz dHJ1Y3QgdGltZXZhbCAqX190diwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgc3Ry dWN0IHRpbWV6b25lICpfX3R6KSA7CgoKCgoKZXh0ZXJuIGludCBhZGp0aW1lIChfX2NvbnN0IHN0 cnVjdCB0aW1ldmFsICpfX2RlbHRhLAogICAgICAgICAgICAgICAgICAgIHN0cnVjdCB0aW1ldmFs ICpfX29sZGRlbHRhKSA7CgoKCgplbnVtIF9faXRpbWVyX3doaWNoCiAgewoKICAgIElUSU1FUl9S RUFMID0gMCwKCgogICAgSVRJTUVSX1ZJUlRVQUwgPSAxLAoKCgogICAgSVRJTUVSX1BST0YgPSAy CgogIH07CgoKCnN0cnVjdCBpdGltZXJ2YWwKICB7CgogICAgc3RydWN0IHRpbWV2YWwgaXRfaW50 ZXJ2YWw7CgogICAgc3RydWN0IHRpbWV2YWwgaXRfdmFsdWU7CiAgfTsKCgoKCgoKdHlwZWRlZiBp bnQgX19pdGltZXJfd2hpY2hfdDsKCgoKCmV4dGVybiBpbnQgZ2V0aXRpbWVyIChfX2l0aW1lcl93 aGljaF90IF9fd2hpY2gsCiAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaXRpbWVydmFsICpf X3ZhbHVlKSA7CgoKCgpleHRlcm4gaW50IHNldGl0aW1lciAoX19pdGltZXJfd2hpY2hfdCBfX3do aWNoLAogICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBzdHJ1Y3QgaXRpbWVydmFsICpfX3Jl c3RyaWN0IF9fbmV3LAogICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGl0aW1lcnZhbCAqX19y ZXN0cmljdCBfX29sZCkgOwoKCgpleHRlcm4gaW50IHV0aW1lcyAoX19jb25zdCBjaGFyICpfX2Zp bGUsIF9fY29uc3Qgc3RydWN0IHRpbWV2YWwgX190dnBbMl0pCiAgICAgICAgICAgIDsKIyAxNCAi aGVhZGVycy9saW51eGRlZi5oIiAyCgoKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvc2hhZG93Lmgi IDEgMwojIDI0ICIvdXNyL2xvY2FsL2luY2x1ZGUvc2hhZG93LmgiIDMKIyAxICIvdXNyL2xvY2Fs L2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMjUgIi91c3IvbG9jYWwvaW5jbHVkZS9zaGFkb3cu aCIgMiAzCgojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9wYXRocy5oIiAxIDMKIyAyNyAiL3Vzci9s b2NhbC9pbmNsdWRlL3NoYWRvdy5oIiAyIDMKCgojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9zdGRp by5oIiAxIDMKIyAzMCAiL3Vzci9sb2NhbC9pbmNsdWRlL3NoYWRvdy5oIiAyIDMKCiMgMSAiL3Vz ci9sb2NhbC9nY2MvMy4wLjQvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wLjQvaW5j bHVkZS9zdGRkZWYuaCIgMSAzCiMgMzIgIi91c3IvbG9jYWwvaW5jbHVkZS9zaGFkb3cuaCIgMiAz CiMgNDAgIi91c3IvbG9jYWwvaW5jbHVkZS9zaGFkb3cuaCIgMwpzdHJ1Y3Qgc3B3ZAogIHsKICAg IGNoYXIgKnNwX25hbXA7CiAgICBjaGFyICpzcF9wd2RwOwogICAgbG9uZyBpbnQgc3BfbHN0Y2hn OwogICAgbG9uZyBpbnQgc3BfbWluOwogICAgbG9uZyBpbnQgc3BfbWF4OwogICAgbG9uZyBpbnQg c3Bfd2FybjsKCiAgICBsb25nIGludCBzcF9pbmFjdDsKCiAgICBsb25nIGludCBzcF9leHBpcmU7 CgogICAgdW5zaWduZWQgbG9uZyBpbnQgc3BfZmxhZzsKICB9OwoKCgpleHRlcm4gdm9pZCBzZXRz cGVudCAodm9pZCkgOwoKCmV4dGVybiB2b2lkIGVuZHNwZW50ICh2b2lkKSA7CgoKZXh0ZXJuIHN0 cnVjdCBzcHdkICpnZXRzcGVudCAodm9pZCkgOwoKCmV4dGVybiBzdHJ1Y3Qgc3B3ZCAqZ2V0c3Bu YW0gKF9fY29uc3QgY2hhciAqX19uYW1lKSA7CgoKZXh0ZXJuIHN0cnVjdCBzcHdkICpzZ2V0c3Bl bnQgKF9fY29uc3QgY2hhciAqX19zdHJpbmcpIDsKCgpleHRlcm4gc3RydWN0IHNwd2QgKmZnZXRz cGVudCAoRklMRSAqX19zdHJlYW0pIDsKCgpleHRlcm4gaW50IHB1dHNwZW50IChfX2NvbnN0IHN0 cnVjdCBzcHdkICpfX3AsIEZJTEUgKl9fc3RyZWFtKSA7CgoKCgpleHRlcm4gaW50IGdldHNwZW50 X3IgKHN0cnVjdCBzcHdkICpfX3Jlc3VsdF9idWYsIGNoYXIgKl9fYnVmZmVyLAogICAgICAgICAg ICAgICAgICAgICAgIHNpemVfdCBfX2J1Zmxlbiwgc3RydWN0IHNwd2QgKipfX3Jlc3VsdCkgOwoK ZXh0ZXJuIGludCBnZXRzcG5hbV9yIChfX2NvbnN0IGNoYXIgKl9fbmFtZSwgc3RydWN0IHNwd2Qg Kl9fcmVzdWx0X2J1ZiwKICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpfX2J1ZmZlciwgc2l6 ZV90IF9fYnVmbGVuLAogICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzcHdkICoqX19yZXN1 bHQpOwoKZXh0ZXJuIGludCBzZ2V0c3BlbnRfciAoX19jb25zdCBjaGFyICpfX3N0cmluZywgc3Ry dWN0IHNwd2QgKl9fcmVzdWx0X2J1ZiwKICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqX19i dWZmZXIsIHNpemVfdCBfX2J1ZmxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNw d2QgKipfX3Jlc3VsdCkgOwoKZXh0ZXJuIGludCBmZ2V0c3BlbnRfciAoRklMRSAqX19zdHJlYW0s IHN0cnVjdCBzcHdkICpfX3Jlc3VsdF9idWYsCiAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIg Kl9fYnVmZmVyLCBzaXplX3QgX19idWZsZW4sCiAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVj dCBzcHdkICoqX19yZXN1bHQpIDsKCgoKZXh0ZXJuIGludCBsY2twd2RmICh2b2lkKSA7CgoKZXh0 ZXJuIGludCB1bGNrcHdkZiAodm9pZCkgOwojIDE3ICJoZWFkZXJzL2xpbnV4ZGVmLmgiIDIKCgoK CgpjaGFyICpjcnlwdCAoKTsKCnVpZF90IGdldHVpZCAoKTsKIyAyMiAiQnJlYWtEb3duLmMiIDIK CgoKCgoKIyAxICJoZWFkZXJzL2dsb2JhbHZhcnMuaCIgMQoKaW50IHNob3dudW07CmNoYXIgZ2Vu ZXJhdGUgPSAwOwoKY2hhciBjcmFjayA9IDA7CmNoYXIgZGlzdHJpYnV0ZWQgPSAwOwpjaGFyIHN0 YXJ0ZGlzdHJpYnV0ZWQgPSAwOwpjaGFyIHN0YW5kYWxvbmUgPSAwOwpjaGFyIHJlc3VtZSA9IDA7 CmNoYXIgYW55YXR0YWNrID0gMDsKY2hhciBkaWN0YXR0YWNrID0gMDsKY2hhciBicnV0ZWZvcmNl ID0gMDsKY2hhciBnZXRjdXN0b21maWxlID0gMDsKY2hhciBnZXRwYXNzd2RmaWxlID0gMDsKY2hh ciBnZXRzaGFkb3dmaWxlID0gMDsKY2hhciBzcGVjaWZ5c2hhZG93ZmlsZSA9IDA7CmNoYXIgcGFy c2VhbGwgPSAwOwpjaGFyIGdldHVzZXJzID0gMDsKY2hhciBsb2djcmFja2VkdG9maWxlID0gMDsK Y2hhciBsb2djcmFja2VkdG9zY3JlZW4gPSAwOwpjaGFyIHdyaXRlZ2VudG9maWxlID0gMDsKY2hh ciBwcmludGdlbnRvc2NyZWVuID0gMDsKY2hhciB3cml0ZWFueXRvZmlsZSA9IDA7CgpjaGFyIHJ1 bmRpY3RhdHRhY2sgPSAwOwpjaGFyIHJ1bmJydXRlZm9yY2UgPSAwOwpjaGFyIHN0YXJ0YnJ1dGVm b3JjZSA9IDA7CmNoYXIgY3JhY2tpbmdoYXNzdGFydGVkID0gMDsKCmNoYXIgdXNlZHN0YXRpY3Bh ZGRyZXNzID0gMDsKY2hhciB1c2Vkc3RhdGljZGFkZHJlc3MgPSAwOwpjaGFyIG1vcmV0aGFub25l cGFzc3dvcmQgPSAwOwpjaGFyIG1vcmV0aGFub25lZHdvcmQgPSAwOwoKaW50IG1pbmxlbmd0aCA9 IDA7CmludCBtYXhsZW5ndGggPSAwOwoKaW50IFNMVkw9MDsKaW50IG15dWlkPS0xOwoKY2hhciBz ZXNzaW9uWzI1Nl0gPSAiXDAiOwpjaGFyIGluZmlsZW5hbWVbMjU2XSA9ICJcMCI7CmNoYXIgb3V0 ZmlsZW5hbWVbMjU2XSA9ICJcMCI7CmNoYXIgZGljdGluZmlsZW5hbWVbMjU2XSA9ICJcMCI7CmNo YXIgY3JhY2tlZGxvZ1syNTZdID0gIlwwIjsKY2hhciBsYXN0d29yZHRlc3RlZFsyNTZdID0gIlww IjsKCmNoYXIgdGVzdHBhc3NbMTYzODRdID0gIlwwIjsKY2hhciBwYXJzZWZpbGVbMjU2XSA9ICJc MCI7CgplbnVtIHN0YXR1cyB7aWdub3JlID0gLTEsIHVuY3JhY2tlZCA9IDAsIHBlbmRpbmcgPSAx LCBjcmFja2VkID0gMn07CgppbnQgZF9sZW5ndGggPSAwOwppbnQgZF9ibG9ja19zaXplID0gMDsK aW50IGRfYmxvY2tfbnVtID0gMDsKY2hhciBzZXJ2ZXJfaXBbMTZdOwppbnQgc2VydmVyX3BvcnQg PSAzMTEyMzsKaW50IGNsaWVudFNvY2s9MDsKIyAyOSAiQnJlYWtEb3duLmMiIDIKIyAxICJoZWFk ZXJzL3N0cnVjdHMuaCIgMQp0eXBlZGVmIHN0cnVjdCBzdG9yZXB3CnsKICAgICAgICBzdHJ1Y3Qg c3RvcmVwdyAqcHJldjsKICAgICAgICBjaGFyIGluZm9bODE5M107CiAgICAgICAgY2hhciBob3N0 bmFtZVs1MTNdOwogICAgICAgIGNoYXIgdXNlcm5hbWVbMTI4XTsKICAgICAgICBjaGFyIHN0b3Jl ZHB3b3JkWzI1N107CiAgICAgICAgY2hhciBjcmFja2VkcHdvcmRbMjU3XTsKICAgICAgICBpbnQg cHJpb3JpdHk7CiAgICAgICAgaW50IHNlY2x2bDsKICAgICAgICBpbnQgbWluLCBtYXg7CiAgICAg ICAgaW50IHRvdGFsYmxvY2tzOwogICAgICAgIGludCBjdXJyZW50bGV2ZWw7CiAgICAgICAgaW50 IG5leHRibG9jazsKICAgICAgICBlbnVtIHN0YXR1cyBzdGF0dXNhcnJheVsyNTVdOwogICAgICAg IGNoYXIgZGlzdHJpYnN0YXJ0WzEyOF07CiAgICAgICAgY2hhciBkaXN0cmliZW5kWzEyOF07CiAg ICAgICAgc3RydWN0IHN0b3JlcHcgKm5leHQ7Cn1zdG9yZXB3X3Q7CgpzdG9yZXB3X3QgcHdsaXN0 OwpzdGF0aWMgY29uc3Qgc3RvcmVwd190ICpwaGVhZCA9ICZwd2xpc3Q7CnN0b3JlcHdfdCAqcGN1 cnI7CnN0b3JlcHdfdCAqY3JhY2tlZF9hZGRyZXNzOwpzdG9yZXB3X3QgKnB0ZW1wOwoKc3RvcmVw d190IGRpc3RyaWJfcHdsaXN0OwpzdGF0aWMgY29uc3Qgc3RvcmVwd190ICpoX2Rpc3RyaWJfcHds aXN0ID0gJmRpc3RyaWJfcHdsaXN0OwoKdHlwZWRlZiBzdHJ1Y3QgRGljdGlvbmFyeQp7CiAgICAg ICAgc3RydWN0IERpY3Rpb25hcnkgKnByZXY7CiAgICAgICAgY2hhciB0ZXN0ZHdvcmRbMjU3XTsK ICAgICAgICBzdHJ1Y3QgRGljdGlvbmFyeSAqbmV4dDsKfWRpY3RfdDsKCmRpY3RfdCBteWRpY3Q7 CnN0YXRpYyBjb25zdCBkaWN0X3QgKmRoZWFkID0gJm15ZGljdDsKZGljdF90ICpkY3VycjsKZGlj dF90ICpkdGVtcDsKIyAzMCAiQnJlYWtEb3duLmMiIDIKIyAxICJoZWFkZXJzL3Byb3RvLmgiIDEK aW50IGNoZWNrZm9yYWxsY3JhY2tlZCgpOwp2b2lkIHBhcnNlcHdvcmRzIChjaGFyIGlucGZpbGVb MjU3XSk7CnZvaWQgcGFyc2Vkd29yZHMgKGNoYXIgaW5kZmlsZVsyNTddKTsKdm9pZCBhZGRwdyAo Y2hhciBwYXNzd29yZHRvYWRkWzI1Nl0pOwp2b2lkIGFkZGR3IChjaGFyIGR3b3JkdG9hZGRbMjU2 XSk7CnN0b3JlcHdfdCogTXlBbGxvY2F0ZSAoKTsKZGljdF90KiBNeUR3b3JkQWxsb2NhdGUgKCk7 CnZvaWQgc29ydHJhbmdlIChjaGFyIHJhbmdlWzE1XSk7CnZvaWQgc2hpZnRyaWdodCAodW5zaWdu ZWQgY2hhciAqIHRlbXApOwppbnQgZ2V0bmV4dHZhbGlkY2hhciAodW5zaWduZWQgY2hhciBvbGQp OwppbnQgYzJpIChjaGFyIGcpOwpjaGFyIGkyYyAoaW50IGcpOwp2b2lkIHNldHBhcmFtZXRlcnMg KCk7CmNoYXIgKkdldFNoYWRvd1Bhc3MgKGNoYXIgKnVzZXJuYW1lKTsKY2hhciAqR2V0Tm9ybWFs UGFzcyAoY2hhciAqdXNlcm5hbWUpOwppbnQgcHdvcmRleGlzdCAodW5zaWduZWQgY2hhciBuZXdw d1syNTZdKTsKaW50IGR3b3JkZXhpc3QgKHVuc2lnbmVkIGNoYXIgbmV3ZHdbMjU2XSk7CnZvaWQg c2V0c2lnbmFscyAoKTsKdm9pZCBzYXZlX2V4aXQgKGludCBzaWdudW0pOwp2b2lkIHNhdmVzZXNz aW9uICgpOwp2b2lkIHBhcnNlc2Vzc2lvbmZpbGUgKCk7CiMgMzEgIkJyZWFrRG93bi5jIiAyCiMg MSAiaGVhZGVycy9zb21lZnVuY3RzLmgiIDEKdm9pZCBhZGRwdyAoY2hhciBwYXNzd29yZHRvYWRk WzI1Nl0pCnsKICAgICAgICBwdGVtcCA9IHBjdXJyOwogICAgICAgIHBjdXJyLT5uZXh0ID0gTXlB bGxvY2F0ZSgpOwogICAgICAgIHBjdXJyID0gcGN1cnItPm5leHQ7CiAgICAgICAgKF9fZXh0ZW5z aW9uX18gKF9fYnVpbHRpbl9jb25zdGFudF9wIChwYXNzd29yZHRvYWRkKSA/ICgoKHNpemVfdCko Y29uc3Qgdm9pZCAqKSgocGFzc3dvcmR0b2FkZCkgKyAxKSAtIChzaXplX3QpKGNvbnN0IHZvaWQg KikocGFzc3dvcmR0b2FkZCkgPT0gMSkgJiYgc3RybGVuIChwYXNzd29yZHRvYWRkKSArIDEgPD0g OCA/IF9fc3RyY3B5X3NtYWxsIChwY3Vyci0+c3RvcmVkcHdvcmQsIF9fZXh0ZW5zaW9uX18gKCgo X19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKHBhc3N3b3JkdG9hZGQp KVswICsgMV0gPDwgOCB8ICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIg KikgKHBhc3N3b3JkdG9hZGQpKVswXSksIF9fZXh0ZW5zaW9uX18gKCgoX19jb25zdCB1bnNpZ25l ZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKHBhc3N3b3JkdG9hZGQpKVs0ICsgMV0gPDwgOCB8 ICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKHBhc3N3b3JkdG9h ZGQpKVs0XSksIF9fZXh0ZW5zaW9uX18gKCgoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9f Y29uc3QgY2hhciAqKSAocGFzc3dvcmR0b2FkZCkpWzAgKyAzXSA8PCA4IHwgKChfX2NvbnN0IHVu c2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAocGFzc3dvcmR0b2FkZCkpWzAgKyAyXSkg PDwgOCB8ICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKHBhc3N3 b3JkdG9hZGQpKVswICsgMV0pIDw8IDggfCAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19j b25zdCBjaGFyICopIChwYXNzd29yZHRvYWRkKSlbMF0pLCBfX2V4dGVuc2lvbl9fICgoKCgoX19j b25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKHBhc3N3b3JkdG9hZGQpKVs0 ICsgM10gPDwgOCB8ICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikg KHBhc3N3b3JkdG9hZGQpKVs0ICsgMl0pIDw8IDggfCAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAq KSAoX19jb25zdCBjaGFyICopIChwYXNzd29yZHRvYWRkKSlbNCArIDFdKSA8PCA4IHwgKChfX2Nv bnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAocGFzc3dvcmR0b2FkZCkpWzRd KSwgc3RybGVuIChwYXNzd29yZHRvYWRkKSArIDEpIDogKGNoYXIgKikgbWVtY3B5IChwY3Vyci0+ c3RvcmVkcHdvcmQsIHBhc3N3b3JkdG9hZGQsIHN0cmxlbiAocGFzc3dvcmR0b2FkZCkgKyAxKSkg OiBzdHJjcHkgKHBjdXJyLT5zdG9yZWRwd29yZCwgcGFzc3dvcmR0b2FkZCkpKTsKICAgICAgICBw Y3Vyci0+Y3JhY2tlZHB3b3JkWzBdID0gJ1wwJzsKICAgICAgICBwY3Vyci0+cHJldiA9IHB0ZW1w Owp9Cgp2b2lkIGFkZGR3IChjaGFyIGR3b3JkdG9hZGRbMjU2XSkKewogICAgICAgIGR0ZW1wID0g ZGN1cnI7CiAgICAgICAgZGN1cnItPm5leHQgPSBNeUR3b3JkQWxsb2NhdGUoKTsKICAgICAgICBk Y3VyciA9IGRjdXJyLT5uZXh0OwogICAgICAgIChfX2V4dGVuc2lvbl9fIChfX2J1aWx0aW5fY29u c3RhbnRfcCAoZHdvcmR0b2FkZCkgPyAoKChzaXplX3QpKGNvbnN0IHZvaWQgKikoKGR3b3JkdG9h ZGQpICsgMSkgLSAoc2l6ZV90KShjb25zdCB2b2lkICopKGR3b3JkdG9hZGQpID09IDEpICYmIHN0 cmxlbiAoZHdvcmR0b2FkZCkgKyAxIDw9IDggPyBfX3N0cmNweV9zbWFsbCAoZGN1cnItPnRlc3Rk d29yZCwgX19leHRlbnNpb25fXyAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3Qg Y2hhciAqKSAoZHdvcmR0b2FkZCkpWzAgKyAxXSA8PCA4IHwgKChfX2NvbnN0IHVuc2lnbmVkIGNo YXIgKikgKF9fY29uc3QgY2hhciAqKSAoZHdvcmR0b2FkZCkpWzBdKSwgX19leHRlbnNpb25fXyAo KChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoZHdvcmR0b2FkZCkp WzQgKyAxXSA8PCA4IHwgKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAq KSAoZHdvcmR0b2FkZCkpWzRdKSwgX19leHRlbnNpb25fXyAoKCgoKF9fY29uc3QgdW5zaWduZWQg Y2hhciAqKSAoX19jb25zdCBjaGFyICopIChkd29yZHRvYWRkKSlbMCArIDNdIDw8IDggfCAoKF9f Y29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChkd29yZHRvYWRkKSlbMCAr IDJdKSA8PCA4IHwgKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAo ZHdvcmR0b2FkZCkpWzAgKyAxXSkgPDwgOCB8ICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChf X2NvbnN0IGNoYXIgKikgKGR3b3JkdG9hZGQpKVswXSksIF9fZXh0ZW5zaW9uX18gKCgoKChfX2Nv bnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoZHdvcmR0b2FkZCkpWzQgKyAz XSA8PCA4IHwgKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoZHdv cmR0b2FkZCkpWzQgKyAyXSkgPDwgOCB8ICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2Nv bnN0IGNoYXIgKikgKGR3b3JkdG9hZGQpKVs0ICsgMV0pIDw8IDggfCAoKF9fY29uc3QgdW5zaWdu ZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChkd29yZHRvYWRkKSlbNF0pLCBzdHJsZW4gKGR3 b3JkdG9hZGQpICsgMSkgOiAoY2hhciAqKSBtZW1jcHkgKGRjdXJyLT50ZXN0ZHdvcmQsIGR3b3Jk dG9hZGQsIHN0cmxlbiAoZHdvcmR0b2FkZCkgKyAxKSkgOiBzdHJjcHkgKGRjdXJyLT50ZXN0ZHdv cmQsIGR3b3JkdG9hZGQpKSk7CiAgICAgICAgZGN1cnItPnByZXYgPSBkdGVtcDsKfQoKc3RvcmVw d190KiBNeUFsbG9jYXRlICgpCnsKICAgICAgICBzdG9yZXB3X3QgKm5ld05vZGU7CgoKICAgICAg ICBuZXdOb2RlID0gKHN0b3JlcHdfdCopbWFsbG9jKHNpemVvZihzdG9yZXB3X3QpKTsKCgogICAg ICAgIGlmIChuZXdOb2RlID09ICgodm9pZCAqKTApKQogICAgICAgICAgICAgICAge3ByaW50Zigi RXJyb3I6IFVuYWJsZSB0byBhbGxvY2F0ZSBuZXcgbm9kZS5cbiIpOyBleGl0KDApO30KICAgICAg ICBlbHNlCiAgICAgICAgICAgICAgICBuZXdOb2RlLT5uZXh0ID0gKCh2b2lkICopMCk7CgogICAg ICAgIHJldHVybiBuZXdOb2RlOwp9CgpkaWN0X3QqIE15RHdvcmRBbGxvY2F0ZSAoKQp7CiAgICAg ICAgZGljdF90ICpuZXdOb2RlOwoKCiAgICAgICAgbmV3Tm9kZSA9IChkaWN0X3QqKW1hbGxvYyhz aXplb2YoZGljdF90KSk7CgoKICAgICAgICBpZiAobmV3Tm9kZSA9PSAoKHZvaWQgKikwKSkKICAg ICAgICAgICAgICAgIHtwcmludGYoIkVycm9yOiBVbmFibGUgdG8gYWxsb2NhdGUgbmV3IG5vZGUu XG4iKTsgZXhpdCgwKTt9CiAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgbmV3Tm9kZS0+bmV4 dCA9ICgodm9pZCAqKTApOwoKICAgICAgICByZXR1cm4gbmV3Tm9kZTsKfQoKdm9pZCBzb3J0cmFu Z2UgKGNoYXIgcmFuZ2VbMTVdKQp7CiAgICAgICAgaW50IG9uZXM9MDsKICAgICAgICBpbnQgdGVu cz0wOwogICAgICAgIGludCBodW5zPTA7CiAgICAgICAgaW50IGk7CiAgICAgICAgaW50IGs7CiAg ICAgICAgaW50IGo7CgogICAgICAgIGludCBkYXNoY29vcmQgPSAtMTsKICAgICAgICBpbnQgcGxh Y2Vjb3VudGVyID0gMTsKCgogICAgICAgIGZvciAoaT1zdHJsZW4gKHJhbmdlKTsgaT4wOyBpLS0p CiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyYW5nZVtpXSA9 PSAnLScpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGFzaGNvb3JkID0gaTsKICAg ICAgICAgICAgICAgIH0KCiAgICAgICAgaWYgKGRhc2hjb29yZCAhPSAtMSkKICAgICAgICAgICAg ICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChqPWRhc2hjb29yZC0xOyBqPj0wOyBq LS0pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgaWYgKHBsYWNlY291bnRlciA9PSAxKQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25lcyA9IGMyaSAocmFuZ2Vbal0p OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHBsYWNlY291bnRlcisrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBpZiAocGxhY2Vjb3VudGVyID09IDIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB0ZW5zID0gYzJpIChyYW5nZVtqXSk7CiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vjb3VudGVyKys7CiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u dGludWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwbGFjZWNvdW50ZXIg PT0gMykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh1 bnMgPSBjMmkgKHJhbmdlW2pdKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBwbGFjZWNvdW50ZXIrKzsKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgbWlubGVuZ3RoID0gKG9uZXMpICsg KHRlbnMqMTApICsgKGh1bnMqMTAwKTsKICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vjb3Vu dGVyID0gMTsKICAgICAgICAgICAgICAgICAgICAgICAgb25lcz0wOwogICAgICAgICAgICAgICAg ICAgICAgICB0ZW5zPTA7CiAgICAgICAgICAgICAgICAgICAgICAgIGh1bnM9MDsKCiAgICAgICAg ICAgICAgICAgICAgICAgIGZvciAoaz1zdHJsZW4gKHJhbmdlKS0xOyBrPmRhc2hjb29yZDsgay0t KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGlmIChwbGFjZWNvdW50ZXIgPT0gMSkKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uZXMgPSBjMmkgKHJhbmdlW2tdKTsK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBw bGFjZWNvdW50ZXIrKzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg aWYgKHBsYWNlY291bnRlciA9PSAyKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgdGVucyA9IGMyaSAocmFuZ2Vba10pOwogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlY291bnRlcisrOwogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRp bnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGxhY2Vjb3VudGVyID09 IDMpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBodW5z ID0gYzJpIChyYW5nZVtrXSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgcGxhY2Vjb3VudGVyKys7CiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIG1heGxlbmd0aCA9IChvbmVzKSArICh0 ZW5zKjEwKSArIChodW5zKjEwMCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgZWxzZQogICAg ICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGs9c3RybGVuIChyYW5n ZSktMTsgaz49MDsgay0tKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwbGFjZWNvdW50ZXIgPT0gMSkK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uZXMgPSBj MmkgKHJhbmdlW2tdKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBwbGFjZWNvdW50ZXIrKzsKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgaWYgKHBsYWNlY291bnRlciA9PSAyKQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVucyA9IGMyaSAocmFuZ2Vba10pOwogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNl Y291bnRlcisrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo cGxhY2Vjb3VudGVyID09IDMpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBodW5zID0gYzJpIChyYW5nZVtrXSk7CiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vjb3VudGVyKys7CiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIG1pbmxlbmd0 aCA9IChvbmVzKSArICh0ZW5zKjEwKSArIChodW5zKjEwMCk7CiAgICAgICAgICAgICAgICAgICAg ICAgIG1heGxlbmd0aCA9IChvbmVzKSArICh0ZW5zKjEwKSArIChodW5zKjEwMCk7CiAgICAgICAg ICAgICAgICB9Cn0KCnZvaWQgc2hpZnRyaWdodCAodW5zaWduZWQgY2hhciAqIHRlbXApCnsKICAg ICAgICBpbnQgbnVtb2ZjaGFycyA9IDA7CiAgICAgICAgaW50IGNvb3JkbGFzdCA9IDA7CiAgICAg ICAgaW50IGNvb3JkdGVybSA9IDA7CgogICAgICAgIGludCBqOwoKICAgICAgICBuZXh0OjsKICAg ICAgICBpZiAodGVtcFtudW1vZmNoYXJzXSAhPSAnXDAnKQogICAgICAgICAgICAgICAgewogICAg ICAgICAgICAgICAgICAgICAgICBudW1vZmNoYXJzKys7CiAgICAgICAgICAgICAgICAgICAgICAg IGdvdG8gbmV4dDsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgY29vcmRsYXN0ID0gbnVtb2Zj aGFycyAtIDE7CiAgICAgICAgY29vcmR0ZXJtID0gbnVtb2ZjaGFyczsKCiAgICAgICAgZm9yIChq PWNvb3JkdGVybTsgaj49MDsgai0tKQogICAgICAgICAgICAgICAgewoKICAgICAgICAgICAgICAg ICAgICAgICAgdGVtcFtqKzFdID0gdGVtcFtqXTsKICAgICAgICAgICAgICAgIH0KICAgICAgICB0 ZW1wWzBdID0gJ1wwJzsKfQoKaW50IGdldG5leHR2YWxpZGNoYXIgKHVuc2lnbmVkIGNoYXIgb2xk KQp7CiAgICAgICAgaWYgKFNMVkwgPT0gMSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAg ICAgICAgICAgICAgaWYgKG9sZCA8IDQ4KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHJldHVybiA0ODsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChvbGQgPj0gNDgpICYmIChv bGQgPCA1NykpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9sZCsxOwog ICAgICAgICAgICAgICAgICAgICAgICBpZiAob2xkID49IDU3KQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgICAgICAgIH0KICAgICAgICBpZiAoU0xW TCA9PSAyKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAob2xk IDwgNjUpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDY1OwogICAgICAg ICAgICAgICAgICAgICAgICBpZiAoKG9sZCA+PSA2NSkgJiYgKG9sZCA8IDkwKSkKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2xkKzE7CiAgICAgICAgICAgICAgICAgICAg ICAgIGlmICgob2xkID49IDkwKSAmJiAob2xkIDwgOTcpKQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHJldHVybiA5NzsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChvbGQgPj0g OTcpICYmIChvbGQgPCAxMjIpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy biBvbGQrMTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9sZCA+PSAxMjIpCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICAgICAgICAgfQogICAg ICAgIGlmIChTTFZMID09IDMpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAg ICAgIGlmIChvbGQgPCA0OCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g NDg7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgob2xkID49IDQ4KSAmJiAob2xkIDwgNTcp KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvbGQrMTsKICAgICAgICAg ICAgICAgICAgICAgICAgaWYgKChvbGQgPj0gNTcpICYmIChvbGQgPCA2NSkpCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDY1OwogICAgICAgICAgICAgICAgICAgICAgICBp ZiAoKG9sZCA+PSA2NSkgJiYgKG9sZCA8IDkwKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICByZXR1cm4gb2xkKzE7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgob2xkID49IDkw KSAmJiAob2xkIDwgOTcpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiA5 NzsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChvbGQgPj0gOTcpICYmIChvbGQgPCAxMjIp KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvbGQrMTsKICAgICAgICAg ICAgICAgICAgICAgICAgaWYgKG9sZCA+PSAxMjIpCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgcmV0dXJuIC0xOwogICAgICAgICAgICAgICAgfQogICAgICAgIGlmIChTTFZMID09IDQp CiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvbGQgPCAzMykK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMzM7CiAgICAgICAgICAgICAg ICAgICAgICAgIGlmICgob2xkID49IDMzKSAmJiAob2xkIDwgMzUpKQogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHJldHVybiAzNTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChv bGQgPj0gMzUpICYmIChvbGQgPCAzOCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg cmV0dXJuIG9sZCsxOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoKG9sZCA+PTM4KSAmJiAo b2xkIDwgNDApKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiA0MDsKICAg ICAgICAgICAgICAgICAgICAgICAgaWYgKChvbGQgPj0gNDApICYmIChvbGQgPCA0MikpCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9sZCsxOwogICAgICAgICAgICAgICAg ICAgICAgICBpZiAoKG9sZCA+PSA0MikgJiYgKG9sZCA8IDQ4KSkKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICByZXR1cm4gNDg7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgob2xk ID49IDQ4KSAmJiAob2xkIDwgNTcpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl dHVybiBvbGQrMTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChvbGQgPj0gNTcpICYmIChv bGQgPCA2NCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDY0OwogICAg ICAgICAgICAgICAgICAgICAgICBpZiAoKG9sZCA+PSA2NCkgJiYgKG9sZCA8IDkwKSkKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2xkKzE7CiAgICAgICAgICAgICAgICAg ICAgICAgIGlmICgob2xkID49IDkwKSAmJiAob2xkIDwgOTQpKQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHJldHVybiA5NDsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChvbGQg Pj0gOTQpICYmIChvbGQgPCA5NikpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0 dXJuIDk2OwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoKG9sZCA+PSA5NikgJiYgKG9sZCA8 IDEyMikpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9sZCsxOwogICAg ICAgICAgICAgICAgICAgICAgICBpZiAoKG9sZCA+PSAxMjIpICYmIChvbGQgPCAxMjYpKQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAxMjY7CiAgICAgICAgICAgICAgICAg ICAgICAgIGlmIChvbGQgPj0gMTI2KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl dHVybiAtMTsKICAgICAgICAgICAgICAgIH0KICAgICAgICBpZiAoU0xWTCA9PSA1KQogICAgICAg ICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAob2xkIDwgMzIpCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDMyOwogICAgICAgICAgICAgICAgICAgICAg ICBpZiAoKG9sZCA+PSAzMikgJiYgKG9sZCA8IDEyNikpCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgcmV0dXJuIG9sZCsxOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAob2xkID49 IDEyNikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAg ICAgICAgICB9CiAgICAgICAgaWYgKFNMVkwgPT0gNikKICAgICAgICAgICAgICAgIHsKICAgICAg ICAgICAgICAgICAgICAgICAgaWYgKG9sZCA9PSAyNTUpCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHJldHVybiBv bGQrMTsKICAgICAgICAgICAgICAgIH0KfQoKaW50IGMyaSAoY2hhciBnKQp7CiAgICAgICAgaW50 IHJldG51bTsKICAgICAgICBpZiAoZz09JzAnKQogICAgICAgICAgICAgICAgcmV0bnVtID0gMDsK ICAgICAgICBpZiAoZz09JzEnKQogICAgICAgICAgICAgICAgcmV0bnVtID0gMTsKICAgICAgICBp ZiAoZz09JzInKQogICAgICAgICAgICAgICAgcmV0bnVtID0gMjsKICAgICAgICBpZiAoZz09JzMn KQogICAgICAgICAgICAgICAgcmV0bnVtID0gMzsKICAgICAgICBpZiAoZz09JzQnKQogICAgICAg ICAgICAgICAgcmV0bnVtID0gNDsKICAgICAgICBpZiAoZz09JzUnKQogICAgICAgICAgICAgICAg cmV0bnVtID0gNTsKICAgICAgICBpZiAoZz09JzYnKQogICAgICAgICAgICAgICAgcmV0bnVtID0g NjsKICAgICAgICBpZiAoZz09JzcnKQogICAgICAgICAgICAgICAgcmV0bnVtID0gNzsKICAgICAg ICBpZiAoZz09JzgnKQogICAgICAgICAgICAgICAgcmV0bnVtID0gODsKICAgICAgICBpZiAoZz09 JzknKQogICAgICAgICAgICAgICAgcmV0bnVtID0gOTsKICAgICAgICByZXR1cm4gcmV0bnVtOwp9 CgpjaGFyIGkyYyAoaW50IGcpCnsKICAgICAgICBpbnQgcmV0bnVtOwogICAgICAgIGlmIChnPT0w KQogICAgICAgICAgICAgICAgcmV0bnVtID0gJzAnOwogICAgICAgIGlmIChnPT0xKQogICAgICAg ICAgICAgICAgcmV0bnVtID0gJzEnOwogICAgICAgIGlmIChnPT0yKQogICAgICAgICAgICAgICAg cmV0bnVtID0gJzInOwogICAgICAgIGlmIChnPT0zKQogICAgICAgICAgICAgICAgcmV0bnVtID0g JzMnOwogICAgICAgIGlmIChnPT00KQogICAgICAgICAgICAgICAgcmV0bnVtID0gJzQnOwogICAg ICAgIGlmIChnPT01KQogICAgICAgICAgICAgICAgcmV0bnVtID0gJzUnOwogICAgICAgIGlmIChn PT02KQogICAgICAgICAgICAgICAgcmV0bnVtID0gJzYnOwogICAgICAgIGlmIChnPT03KQogICAg ICAgICAgICAgICAgcmV0bnVtID0gJzcnOwogICAgICAgIGlmIChnPT04KQogICAgICAgICAgICAg ICAgcmV0bnVtID0gJzgnOwogICAgICAgIGlmIChnPT05KQogICAgICAgICAgICAgICAgcmV0bnVt ID0gJzknOwogICAgICAgIHJldHVybiByZXRudW07Cn0KCgpjaGFyICpHZXRTaGFkb3dQYXNzIChj aGFyICp1c2VybmFtZSkKewogICAgICAgIHN0cnVjdCBzcHdkICpwd3M7CiAgICAgICAgcHdzID0g Z2V0c3BuYW0odXNlcm5hbWUpOwogICAgICAgIGlmICghcHdzKQogICAgICAgIHsKICAgICAgICAg ICAgcHJpbnRmKCJ1bmFibGUgdG8gZmlsbCB0aGUgcHdzIHN0cnVjdHVyZVxuIik7CiAgICAgICAg ICAgIHJldHVybiAoKHZvaWQgKikwKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHB3cy0+c3Bf cHdkcDsKfQoKCmNoYXIgKkdldE5vcm1hbFBhc3MgKGNoYXIgKnVzZXJuYW1lKQp7CiAgICAgICAg c3RydWN0IHBhc3N3ZCAqcHdzOwogICAgICAgIHB3cyA9IGdldHB3bmFtKHVzZXJuYW1lKTsKICAg IGlmICghcHdzKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBwcmludGYoInVuYWJsZSB0 byBmaWxsIHRoZSBwd3Mgc3RydWN0dXJlXG4iKTsKICAgICAgICAgICAgICAgIHJldHVybiAoKHZv aWQgKikwKTsKICAgICAgICAgICAgfQogICAgcmV0dXJuIHB3cy0+cHdfcGFzc3dkOwp9CgppbnQg cHdvcmRleGlzdCAodW5zaWduZWQgY2hhciBuZXdwd1syNTZdKQp7CiAgICAgICAgc3RvcmVwd190 ICpsb2NhbHBjdXJyID0gKHN0cnVjdCBzdG9yZXB3ICopcGhlYWQ7CiAgICAgICAgaW50IHJldG51 bSA9IDA7CgogICAgICAgIHN0YXJ0OgogICAgICAgIGlmIChfX2V4dGVuc2lvbl9fICh7IHNpemVf dCBfX3MxX2xlbiwgX19zMl9sZW47IChfX2J1aWx0aW5fY29uc3RhbnRfcCAobG9jYWxwY3Vyci0+ c3RvcmVkcHdvcmQpICYmIF9fYnVpbHRpbl9jb25zdGFudF9wIChuZXdwdykgJiYgKF9fczFfbGVu ID0gc3RybGVuIChsb2NhbHBjdXJyLT5zdG9yZWRwd29yZCksIF9fczJfbGVuID0gc3RybGVuIChu ZXdwdyksICghKChzaXplX3QpKGNvbnN0IHZvaWQgKikoKGxvY2FscGN1cnItPnN0b3JlZHB3b3Jk KSArIDEpIC0gKHNpemVfdCkoY29uc3Qgdm9pZCAqKShsb2NhbHBjdXJyLT5zdG9yZWRwd29yZCkg PT0gMSkgfHwgX19zMV9sZW4gPj0gNCkgJiYgKCEoKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgobmV3 cHcpICsgMSkgLSAoc2l6ZV90KShjb25zdCB2b2lkICopKG5ld3B3KSA9PSAxKSB8fCBfX3MyX2xl biA+PSA0KSkgPyBtZW1jbXAgKChfX2NvbnN0IGNoYXIgKikgKGxvY2FscGN1cnItPnN0b3JlZHB3 b3JkKSwgKF9fY29uc3QgY2hhciAqKSAobmV3cHcpLCAoX19zMV9sZW4gPCBfX3MyX2xlbiA/IF9f czFfbGVuIDogX19zMl9sZW4pICsgMSkgOiAoX19idWlsdGluX2NvbnN0YW50X3AgKGxvY2FscGN1 cnItPnN0b3JlZHB3b3JkKSAmJiAoKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgobG9jYWxwY3Vyci0+ c3RvcmVkcHdvcmQpICsgMSkgLSAoc2l6ZV90KShjb25zdCB2b2lkICopKGxvY2FscGN1cnItPnN0 b3JlZHB3b3JkKSA9PSAxKSAmJiAoX19zMV9sZW4gPSBzdHJsZW4gKGxvY2FscGN1cnItPnN0b3Jl ZHB3b3JkKSwgX19zMV9sZW4gPCA0KSA/IChfX2J1aWx0aW5fY29uc3RhbnRfcCAobmV3cHcpICYm ICgoc2l6ZV90KShjb25zdCB2b2lkICopKChuZXdwdykgKyAxKSAtIChzaXplX3QpKGNvbnN0IHZv aWQgKikobmV3cHcpID09IDEpID8gKF9fZXh0ZW5zaW9uX18gKHsgcmVnaXN0ZXIgaW50IF9fcmVz dWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKGxvY2Fs cGN1cnItPnN0b3JlZHB3b3JkKSlbMF0gLSAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19j b25zdCBjaGFyICopKG5ld3B3KSlbMF0pOyBpZiAoX19zMV9sZW4gPiAwICYmIF9fcmVzdWx0ID09 IDApIHsgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hh ciAqKSAobG9jYWxwY3Vyci0+c3RvcmVkcHdvcmQpKVsxXSAtICgoX19jb25zdCB1bnNpZ25lZCBj aGFyICopIChfX2NvbnN0IGNoYXIgKikgKG5ld3B3KSlbMV0pOyBpZiAoX19zMV9sZW4gPiAxICYm IF9fcmVzdWx0ID09IDApIHsgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikg KF9fY29uc3QgY2hhciAqKSAobG9jYWxwY3Vyci0+c3RvcmVkcHdvcmQpKVsyXSAtICgoX19jb25z dCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKG5ld3B3KSlbMl0pOyBpZiAoX19z MV9sZW4gPiAyICYmIF9fcmVzdWx0ID09IDApIF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25l ZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKGxvY2FscGN1cnItPnN0b3JlZHB3b3JkKSlbM10g LSAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChuZXdwdykpWzNd KTsgfSB9IF9fcmVzdWx0OyB9KSkgOiAoX19leHRlbnNpb25fXyAoeyBfX2NvbnN0IHVuc2lnbmVk IGNoYXIgKl9fczIgPSAoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikg KG5ld3B3KTsgcmVnaXN0ZXIgaW50IF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFy ICopIChfX2NvbnN0IGNoYXIgKikgKGxvY2FscGN1cnItPnN0b3JlZHB3b3JkKSlbMF0gLSBfX3My WzBdKTsgaWYgKF9fczFfbGVuID4gMCAmJiBfX3Jlc3VsdCA9PSAwKSB7IF9fcmVzdWx0ID0gKCgo X19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKGxvY2FscGN1cnItPnN0 b3JlZHB3b3JkKSlbMV0gLSBfX3MyWzFdKTsgaWYgKF9fczFfbGVuID4gMSAmJiBfX3Jlc3VsdCA9 PSAwKSB7IF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNo YXIgKikgKGxvY2FscGN1cnItPnN0b3JlZHB3b3JkKSlbMl0gLSBfX3MyWzJdKTsgaWYgKF9fczFf bGVuID4gMiAmJiBfX3Jlc3VsdCA9PSAwKSBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQg Y2hhciAqKSAoX19jb25zdCBjaGFyICopIChsb2NhbHBjdXJyLT5zdG9yZWRwd29yZCkpWzNdIC0g X19zMlszXSk7IH0gfSBfX3Jlc3VsdDsgfSkpKSA6IChfX2J1aWx0aW5fY29uc3RhbnRfcCAobmV3 cHcpICYmICgoc2l6ZV90KShjb25zdCB2b2lkICopKChuZXdwdykgKyAxKSAtIChzaXplX3QpKGNv bnN0IHZvaWQgKikobmV3cHcpID09IDEpICYmIChfX3MyX2xlbiA9IHN0cmxlbiAobmV3cHcpLCBf X3MyX2xlbiA8IDQpID8gKF9fYnVpbHRpbl9jb25zdGFudF9wIChsb2NhbHBjdXJyLT5zdG9yZWRw d29yZCkgJiYgKChzaXplX3QpKGNvbnN0IHZvaWQgKikoKGxvY2FscGN1cnItPnN0b3JlZHB3b3Jk KSArIDEpIC0gKHNpemVfdCkoY29uc3Qgdm9pZCAqKShsb2NhbHBjdXJyLT5zdG9yZWRwd29yZCkg PT0gMSkgPyAoX19leHRlbnNpb25fXyAoeyByZWdpc3RlciBpbnQgX19yZXN1bHQgPSAoKChfX2Nv bnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAobG9jYWxwY3Vyci0+c3RvcmVk cHdvcmQpKVswXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKiko bmV3cHcpKVswXSk7IGlmIChfX3MyX2xlbiA+IDAgJiYgX19yZXN1bHQgPT0gMCkgeyBfX3Jlc3Vs dCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChsb2NhbHBj dXJyLT5zdG9yZWRwd29yZCkpWzFdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29u c3QgY2hhciAqKSAobmV3cHcpKVsxXSk7IGlmIChfX3MyX2xlbiA+IDEgJiYgX19yZXN1bHQgPT0g MCkgeyBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFy ICopIChsb2NhbHBjdXJyLT5zdG9yZWRwd29yZCkpWzJdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNo YXIgKikgKF9fY29uc3QgY2hhciAqKSAobmV3cHcpKVsyXSk7IGlmIChfX3MyX2xlbiA+IDIgJiYg X19yZXN1bHQgPT0gMCkgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9f Y29uc3QgY2hhciAqKSAobG9jYWxwY3Vyci0+c3RvcmVkcHdvcmQpKVszXSAtICgoX19jb25zdCB1 bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKG5ld3B3KSlbM10pOyB9IH0gX19yZXN1 bHQ7IH0pKSA6IChfX2V4dGVuc2lvbl9fICh7IF9fY29uc3QgdW5zaWduZWQgY2hhciAqX19zMSA9 IChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAobG9jYWxwY3Vyci0+ c3RvcmVkcHdvcmQpOyByZWdpc3RlciBpbnQgX19yZXN1bHQgPSBfX3MxWzBdIC0gKChfX2NvbnN0 IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAobmV3cHcpKVswXTsgaWYgKF9fczJf bGVuID4gMCAmJiBfX3Jlc3VsdCA9PSAwKSB7IF9fcmVzdWx0ID0gKF9fczFbMV0gLSAoKF9fY29u c3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChuZXdwdykpWzFdKTsgaWYgKF9f czJfbGVuID4gMSAmJiBfX3Jlc3VsdCA9PSAwKSB7IF9fcmVzdWx0ID0gKF9fczFbMl0gLSAoKF9f Y29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChuZXdwdykpWzJdKTsgaWYg KF9fczJfbGVuID4gMiAmJiBfX3Jlc3VsdCA9PSAwKSBfX3Jlc3VsdCA9IChfX3MxWzNdIC0gKChf X2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAobmV3cHcpKVszXSk7IH0g fSBfX3Jlc3VsdDsgfSkpKSA6IHN0cmNtcCAobG9jYWxwY3Vyci0+c3RvcmVkcHdvcmQsIG5ld3B3 KSkpKTsgfSkgPT0gMCkKICAgICAgICAgICAgICAgIHJldG51bSA9IDE7CiAgICAgICAgaWYgKGxv Y2FscGN1cnItPm5leHQgIT0gKCh2b2lkICopMCkpCiAgICAgICAgICAgICAgICB7CiAgICAgICAg ICAgICAgICAgICAgICAgIGxvY2FscGN1cnIgPSBsb2NhbHBjdXJyLT5uZXh0OwogICAgICAgICAg ICAgICAgICAgICAgICBnb3RvIHN0YXJ0OwogICAgICAgICAgICAgICAgfQogICAgICAgIHJldHVy biByZXRudW07Cn0KCmludCBkd29yZGV4aXN0ICh1bnNpZ25lZCBjaGFyIG5ld2R3WzI1Nl0pCnsK ICAgICAgICBkaWN0X3QgKmxvY2FsZGN1cnIgPSAoc3RydWN0IHN0b3JlZHcgKilkaGVhZDsKICAg ICAgICBpbnQgcmV0bnVtID0gMDsKCiAgICAgICAgc3RhcnQ6CiAgICAgICAgaWYgKF9fZXh0ZW5z aW9uX18gKHsgc2l6ZV90IF9fczFfbGVuLCBfX3MyX2xlbjsgKF9fYnVpbHRpbl9jb25zdGFudF9w IChsb2NhbGRjdXJyLT50ZXN0ZHdvcmQpICYmIF9fYnVpbHRpbl9jb25zdGFudF9wIChuZXdkdykg JiYgKF9fczFfbGVuID0gc3RybGVuIChsb2NhbGRjdXJyLT50ZXN0ZHdvcmQpLCBfX3MyX2xlbiA9 IHN0cmxlbiAobmV3ZHcpLCAoISgoc2l6ZV90KShjb25zdCB2b2lkICopKChsb2NhbGRjdXJyLT50 ZXN0ZHdvcmQpICsgMSkgLSAoc2l6ZV90KShjb25zdCB2b2lkICopKGxvY2FsZGN1cnItPnRlc3Rk d29yZCkgPT0gMSkgfHwgX19zMV9sZW4gPj0gNCkgJiYgKCEoKHNpemVfdCkoY29uc3Qgdm9pZCAq KSgobmV3ZHcpICsgMSkgLSAoc2l6ZV90KShjb25zdCB2b2lkICopKG5ld2R3KSA9PSAxKSB8fCBf X3MyX2xlbiA+PSA0KSkgPyBtZW1jbXAgKChfX2NvbnN0IGNoYXIgKikgKGxvY2FsZGN1cnItPnRl c3Rkd29yZCksIChfX2NvbnN0IGNoYXIgKikgKG5ld2R3KSwgKF9fczFfbGVuIDwgX19zMl9sZW4g PyBfX3MxX2xlbiA6IF9fczJfbGVuKSArIDEpIDogKF9fYnVpbHRpbl9jb25zdGFudF9wIChsb2Nh bGRjdXJyLT50ZXN0ZHdvcmQpICYmICgoc2l6ZV90KShjb25zdCB2b2lkICopKChsb2NhbGRjdXJy LT50ZXN0ZHdvcmQpICsgMSkgLSAoc2l6ZV90KShjb25zdCB2b2lkICopKGxvY2FsZGN1cnItPnRl c3Rkd29yZCkgPT0gMSkgJiYgKF9fczFfbGVuID0gc3RybGVuIChsb2NhbGRjdXJyLT50ZXN0ZHdv cmQpLCBfX3MxX2xlbiA8IDQpID8gKF9fYnVpbHRpbl9jb25zdGFudF9wIChuZXdkdykgJiYgKChz aXplX3QpKGNvbnN0IHZvaWQgKikoKG5ld2R3KSArIDEpIC0gKHNpemVfdCkoY29uc3Qgdm9pZCAq KShuZXdkdykgPT0gMSkgPyAoX19leHRlbnNpb25fXyAoeyByZWdpc3RlciBpbnQgX19yZXN1bHQg PSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAobG9jYWxkY3Vy ci0+dGVzdGR3b3JkKSlbMF0gLSAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBj aGFyICopKG5ld2R3KSlbMF0pOyBpZiAoX19zMV9sZW4gPiAwICYmIF9fcmVzdWx0ID09IDApIHsg X19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAo bG9jYWxkY3Vyci0+dGVzdGR3b3JkKSlbMV0gLSAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAo X19jb25zdCBjaGFyICopIChuZXdkdykpWzFdKTsgaWYgKF9fczFfbGVuID4gMSAmJiBfX3Jlc3Vs dCA9PSAwKSB7IF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0 IGNoYXIgKikgKGxvY2FsZGN1cnItPnRlc3Rkd29yZCkpWzJdIC0gKChfX2NvbnN0IHVuc2lnbmVk IGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAobmV3ZHcpKVsyXSk7IGlmIChfX3MxX2xlbiA+IDIg JiYgX19yZXN1bHQgPT0gMCkgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikg KF9fY29uc3QgY2hhciAqKSAobG9jYWxkY3Vyci0+dGVzdGR3b3JkKSlbM10gLSAoKF9fY29uc3Qg dW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChuZXdkdykpWzNdKTsgfSB9IF9fcmVz dWx0OyB9KSkgOiAoX19leHRlbnNpb25fXyAoeyBfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKl9fczIg PSAoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKG5ld2R3KTsgcmVn aXN0ZXIgaW50IF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0 IGNoYXIgKikgKGxvY2FsZGN1cnItPnRlc3Rkd29yZCkpWzBdIC0gX19zMlswXSk7IGlmIChfX3Mx X2xlbiA+IDAgJiYgX19yZXN1bHQgPT0gMCkgeyBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5zaWdu ZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChsb2NhbGRjdXJyLT50ZXN0ZHdvcmQpKVsxXSAt IF9fczJbMV0pOyBpZiAoX19zMV9sZW4gPiAxICYmIF9fcmVzdWx0ID09IDApIHsgX19yZXN1bHQg PSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAobG9jYWxkY3Vy ci0+dGVzdGR3b3JkKSlbMl0gLSBfX3MyWzJdKTsgaWYgKF9fczFfbGVuID4gMiAmJiBfX3Jlc3Vs dCA9PSAwKSBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBj aGFyICopIChsb2NhbGRjdXJyLT50ZXN0ZHdvcmQpKVszXSAtIF9fczJbM10pOyB9IH0gX19yZXN1 bHQ7IH0pKSkgOiAoX19idWlsdGluX2NvbnN0YW50X3AgKG5ld2R3KSAmJiAoKHNpemVfdCkoY29u c3Qgdm9pZCAqKSgobmV3ZHcpICsgMSkgLSAoc2l6ZV90KShjb25zdCB2b2lkICopKG5ld2R3KSA9 PSAxKSAmJiAoX19zMl9sZW4gPSBzdHJsZW4gKG5ld2R3KSwgX19zMl9sZW4gPCA0KSA/IChfX2J1 aWx0aW5fY29uc3RhbnRfcCAobG9jYWxkY3Vyci0+dGVzdGR3b3JkKSAmJiAoKHNpemVfdCkoY29u c3Qgdm9pZCAqKSgobG9jYWxkY3Vyci0+dGVzdGR3b3JkKSArIDEpIC0gKHNpemVfdCkoY29uc3Qg dm9pZCAqKShsb2NhbGRjdXJyLT50ZXN0ZHdvcmQpID09IDEpID8gKF9fZXh0ZW5zaW9uX18gKHsg cmVnaXN0ZXIgaW50IF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2Nv bnN0IGNoYXIgKikgKGxvY2FsZGN1cnItPnRlc3Rkd29yZCkpWzBdIC0gKChfX2NvbnN0IHVuc2ln bmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKShuZXdkdykpWzBdKTsgaWYgKF9fczJfbGVuID4g MCAmJiBfX3Jlc3VsdCA9PSAwKSB7IF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFy ICopIChfX2NvbnN0IGNoYXIgKikgKGxvY2FsZGN1cnItPnRlc3Rkd29yZCkpWzFdIC0gKChfX2Nv bnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAobmV3ZHcpKVsxXSk7IGlmIChf X3MyX2xlbiA+IDEgJiYgX19yZXN1bHQgPT0gMCkgeyBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5z aWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChsb2NhbGRjdXJyLT50ZXN0ZHdvcmQpKVsy XSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKG5ld2R3KSlb Ml0pOyBpZiAoX19zMl9sZW4gPiAyICYmIF9fcmVzdWx0ID09IDApIF9fcmVzdWx0ID0gKCgoX19j b25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKGxvY2FsZGN1cnItPnRlc3Rk d29yZCkpWzNdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAo bmV3ZHcpKVszXSk7IH0gfSBfX3Jlc3VsdDsgfSkpIDogKF9fZXh0ZW5zaW9uX18gKHsgX19jb25z dCB1bnNpZ25lZCBjaGFyICpfX3MxID0gKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25z dCBjaGFyICopIChsb2NhbGRjdXJyLT50ZXN0ZHdvcmQpOyByZWdpc3RlciBpbnQgX19yZXN1bHQg PSBfX3MxWzBdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAo bmV3ZHcpKVswXTsgaWYgKF9fczJfbGVuID4gMCAmJiBfX3Jlc3VsdCA9PSAwKSB7IF9fcmVzdWx0 ID0gKF9fczFbMV0gLSAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICop IChuZXdkdykpWzFdKTsgaWYgKF9fczJfbGVuID4gMSAmJiBfX3Jlc3VsdCA9PSAwKSB7IF9fcmVz dWx0ID0gKF9fczFbMl0gLSAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFy ICopIChuZXdkdykpWzJdKTsgaWYgKF9fczJfbGVuID4gMiAmJiBfX3Jlc3VsdCA9PSAwKSBfX3Jl c3VsdCA9IChfX3MxWzNdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hh ciAqKSAobmV3ZHcpKVszXSk7IH0gfSBfX3Jlc3VsdDsgfSkpKSA6IHN0cmNtcCAobG9jYWxkY3Vy ci0+dGVzdGR3b3JkLCBuZXdkdykpKSk7IH0pID09IDApCiAgICAgICAgICAgICAgICByZXRudW0g PSAxOwogICAgICAgIGlmIChsb2NhbGRjdXJyLT5uZXh0ICE9ICgodm9pZCAqKTApKQogICAgICAg ICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBsb2NhbGRjdXJyID0gbG9jYWxkY3Vy ci0+bmV4dDsKICAgICAgICAgICAgICAgICAgICAgICAgZ290byBzdGFydDsKICAgICAgICAgICAg ICAgIH0KICAgICAgICByZXR1cm4gcmV0bnVtOwp9Cgp2b2lkIHNldHNpZ25hbHMgKCkKewogICAg ICAgIGlmIChzaWduYWwgKDIsICZzYXZlX2V4aXQpID09ICgoX19zaWdoYW5kbGVyX3QpIC0xKSkK ICAgICAgICAgICAgICAgIHByaW50ZiAoIlxuQ291bGRuJ3QgcmVnaXN0ZXIgc2lnbmFsIGhhbmRs ZXIuLi5cbiIpOwoKICAgICAgICBpZiAoc2lnbmFsICgxNSwgJnNhdmVfZXhpdCkgPT0gKChfX3Np Z2hhbmRsZXJfdCkgLTEpKQogICAgICAgICAgICAgICAgcHJpbnRmICgiXG5Db3VsZG4ndCByZWdp c3RlciBzaWduYWwgaGFuZGxlci4uLlxuIik7Cn0KCmludCBmaWxlZXhpc3RzIChjaGFyIGZpbGVu YW1lWzI1Nl0pCnsKICAgICAgICBGSUxFICp0ZXN0ZmlsZTsKICAgICAgICB0ZXN0ZmlsZSA9IGZv cGVuIChmaWxlbmFtZSwgInIiKTsKICAgICAgICBpZiAodGVzdGZpbGUgPT0gKCh2b2lkICopMCkp CiAgICAgICAgICAgICAgICB7CgogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAg ICAgICAgICAgICAgIH0KICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAg ICAgICAgICAgICAgIGZjbG9zZSAodGVzdGZpbGUpOwogICAgICAgICAgICAgICAgICAgICAgICBy ZXR1cm4gMTsKICAgICAgICAgICAgICAgIH0KfQojIDMyICJCcmVha0Rvd24uYyIgMgojIDEgImhl YWRlcnMvcGFyYW0uaCIgMQp2b2lkIHBfY2hvb3NlX2FjdGlvbiAoKQp7CiAgICAgICAgY2hhciBj aG9pY2VbNF07CgoKICAgICAgICByZWNob29zZWFjdGlvbjoKICAgICAgICBwcmludGYgKCJcblNo YWxsIHdlXG4iKTsKICAgICAgICBwcmludGYgKCIxKSBHZW5lcmF0ZSBTZXF1ZW5jZXNcbiIpOwog ICAgICAgIHByaW50ZiAoIjIpIENyYWNrIFBhc3N3b3Jkc1xuIik7CiAgICAgICAgcHJpbnRmICgi MykgUmVzdW1lIGEgUHJldmlvdXMgU2Vzc2lvblxuPyIpOwogICAgICAgIHNjYW5mICgiJXMiLCBj aG9pY2UpOwoKICAgICAgICBpZiAoY2hvaWNlWzBdID09ICcxJykKICAgICAgICAgICAgICAgIHsK ICAgICAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdGUgPSAxOwogICAgICAgICAgICAgICAgICAg ICAgICBzdGFuZGFsb25lID0gMTsKICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRicnV0ZWZv cmNlID0gMTsKICAgICAgICAgICAgICAgIH0KICAgICAgICBpZiAoY2hvaWNlWzBdID09ICcyJykK ICAgICAgICAgICAgICAgIGNyYWNrID0gMTsKICAgICAgICBpZiAoY2hvaWNlWzBdID09ICczJykK ICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmVzdW1lID0gMTsKICAg ICAgICAgICAgICAgICAgICAgICAgc3RhbmRhbG9uZSA9IDE7CiAgICAgICAgICAgICAgICB9Cgog ICAgICAgIGlmICgoIWdlbmVyYXRlKSAmJiAoIWNyYWNrKSAmJiAoIXJlc3VtZSkpCiAgICAgICAg ICAgICAgICBnb3RvIHJlY2hvb3NlYWN0aW9uOwp9Cgp2b2lkIHBfY2hvb3NlX2NsaWVudF9tb2Rl ICgpCnsKICAgICAgICBjaGFyIGNob2ljZVs0XTsKCgogICAgICAgIHJlY2hvb3NlY2xpZW50Ogog ICAgICAgIHByaW50ZiAoIlxuSG93IHNoYWxsIHdlIHByb2NlZWQ/XG4iKTsKICAgICAgICBwcmlu dGYgKCIxKSBEaXN0cmlidXRlZCBDcmFja2luZ1xuIik7CiAgICAgICAgcHJpbnRmICgiMikgU3Rh bmRhbG9uZVxuPyIpOwogICAgICAgIHNjYW5mICgiJXMiLCBjaG9pY2UpOwoKICAgICAgICBpZiAo Y2hvaWNlWzBdID09ICcxJykKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAg ICAgcHJpbnRmICgiXG5UaGlzIGZlYXR1cmUgd2lsbCBiZSBpbXBsZW1lbnRlZCB3aGVuIEkgZ2V0 IHRoZSBzZXJ2ZXIgd3JpdHRlblxuIik7CiAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gcmVj aG9vc2VjbGllbnQ7CiAgICAgICAgICAgICAgICB9CgogICAgICAgIGlmIChjaG9pY2VbMF0gPT0g JzInKQogICAgICAgICAgICAgICAgc3RhbmRhbG9uZSA9IDE7CgogICAgICAgIGlmICgoIWRpc3Ry aWJ1dGVkKSAmJiAoIXN0YW5kYWxvbmUpKQogICAgICAgICAgICAgICAgZ290byByZWNob29zZWNs aWVudDsKfQoKdm9pZCBwX2Nob29zZV9zZXJ2ZXIgKCkKewogICAgICAgIHJlY2hvb3NlcnNlcnZl cjoKICAgICAgICBwcmludGYgKCJcbldoYXQgaXMgdGhlIHNlcnZlciBpcDogIik7CiAgICAgICAg c2NhbmYgKCIlcyIsIHNlcnZlcl9pcCk7CiAgICAgICAgc2VydmVyX2lwWzE1XSA9ICdcMCc7CgoK CgoKCn0KCnZvaWQgcF9jaG9vc2VfcmVzdW1lX3Nlc3Npb24gKCkKewogICAgICAgIHJlY2hvb3Nl X3Jlc3VtZV9zZXNzaW9uOgogICAgICAgIHByaW50ZiAoIlxuRW50ZXIgYSBTZXNzaW9uIG5hbWUg dG8gcmVzdW1lOiAiKTsKICAgICAgICBzY2FuZiAoIiVzIiwgc2Vzc2lvbik7CiAgICAgICAgaWYg KCFmaWxlZXhpc3RzKHNlc3Npb24pKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAg ICAgICAgICBwcmludGYgKCJcblxuXHRTZXNzaW9uIGZpbGUgZG9lc24ndCBleGlzdCEiKTsKICAg ICAgICAgICAgICAgICAgICAgICAgZ290byByZWNob29zZV9yZXN1bWVfc2Vzc2lvbjsKICAgICAg ICAgICAgICAgIH0KfQoKdm9pZCBwX25ld19zZXNzaW9uICgpCnsKICAgICAgICByZWNob29zZV9u ZXdfc2Vzc2lvbnc6CiAgICAgICAgcHJpbnRmICgiXG5HaXZlIHRoaXMgc2Vzc2lvbiBhIHRpdGxl OiAiKTsKICAgICAgICBzY2FuZiAoIiVzIiwgc2Vzc2lvbik7CiAgICAgICAgaWYgKGZpbGVleGlz dHMoc2Vzc2lvbikpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIHBy aW50ZiAoIlxuXG5cdFNlc3Npb24gZmlsZSBleGlzdHMhIik7CiAgICAgICAgICAgICAgICAgICAg ICAgIGdvdG8gcmVjaG9vc2VfbmV3X3Nlc3Npb253OwogICAgICAgICAgICAgICAgfQoKICAgICAg ICBhbnlhdHRhY2sgPSAxOwp9Cgp2b2lkIHBfY2hvb3NlX2F0dGFjayAoKQp7CiAgICAgICAgY2hh ciBjaG9pY2VbNF07CiAgICAgICAgaW50IG9jb3VudGVyOwoKCiAgICAgICAgcmVjaG9vc2VhdHRh Y2s6CiAgICAgICAgcHJpbnRmICgiXG5XaGF0IEF0dGFjayhzKSBzaG91bGQgd2UgcnVuP1xuIik7 CiAgICAgICAgcHJpbnRmICgiMSkgRGljdGlvbmFyeSBBdHRhY2tcbiIpOwogICAgICAgIHByaW50 ZiAoIjIpIEJydXRlIEZvcmNlXG4iKTsKICAgICAgICBwcmludGYgKCIoWW91IG1heSB1c2UgYW55 IGNvbWJpbmF0aW9uIG9mIDEsIDIsIG9yIDEyIChpZSAxMiBmb3IgYm90aCkpPyIpOwogICAgICAg IHNjYW5mICgiJXMiLCBjaG9pY2UpOwoKICAgICAgICBvY291bnRlciA9IDA7CiAgICAgICAgd2hp bGUgKGNob2ljZVtvY291bnRlcl0gIT0gJ1wwJykKICAgICAgICB7CiAgICAgICAgICAgICAgICBp ZiAoY2hvaWNlW29jb3VudGVyXSA9PSAnMScpCiAgICAgICAgICAgICAgICAgICAgICAgIGRpY3Rh dHRhY2sgPSAxOwogICAgICAgICAgICAgICAgaWYgKGNob2ljZVtvY291bnRlcl0gPT0gJzInKQog ICAgICAgICAgICAgICAgICAgICAgICB7IGJydXRlZm9yY2UgPSAxOyBzdGFydGJydXRlZm9yY2Ug PSAxOyB9CiAgICAgICAgICAgICAgICBvY291bnRlcisrOwogICAgICAgIH0KCiAgICAgICAgaWYg KCghZGljdGF0dGFjaykgJiYgKCFicnV0ZWZvcmNlKSkKICAgICAgICAgICAgICAgIGdvdG8gcmVj aG9vc2VhdHRhY2s7CgogICAgICAgIGlmIChkaWN0YXR0YWNrKQogICAgICAgICAgICAgICAgewog ICAgICAgICAgICAgICAgICAgICAgICByZWNob29zZWRpY3RyOgogICAgICAgICAgICAgICAgICAg ICAgICBwcmludGYgKCJcbkNob29zZSBhIGRpY3Rpb25hcnkgZmlsZTogIik7CiAgICAgICAgICAg ICAgICAgICAgICAgIHNjYW5mICgiJXMiLCBkaWN0aW5maWxlbmFtZSk7CiAgICAgICAgICAgICAg ICAgICAgICAgIGlmICghZmlsZWV4aXN0cyhkaWN0aW5maWxlbmFtZSkpCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgcHJpbnRmICgiXG5cblx0RGljdGlvbmFyeSBmaWxlIGRvZXNuJ3QgZXhpc3QhIik7CiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIHJlY2hvb3NlZGljdHI7CiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQp9Cgp2b2lk IHBfY2hvb3NlX2lucHV0ICgpCnsKICAgICAgICBjaGFyIGNob2ljZVs0XTsKCgogICAgICAgIHJl Y2hvb3NlaW5wdXQ6CiAgICAgICAgcHJpbnRmICgiXG5TaGFsbCB3ZVxuIik7CiAgICAgICAgcHJp bnRmICgiMSkgR2V0IFBhc3N3b3JkcyBmcm9tIGEgY3VzdG9tIGZpbGVcbiIpOwogICAgICAgIGlm IChteXVpZCA9PSAwKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBp ZiAoITEpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmICgiMikgR2V0IFBh c3N3b3JkcyBmcm9tIC9ldGMvcGFzc3dkXG4iKTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYg KDEpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmICgiMikgR2V0IFBhc3N3 b3JkcyBmcm9tIC9ldGMvc2hhZG93XG4iKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICBlbHNl CiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZiAoIjIpIE9u bHkgcm9vdCBjYW4gcmVhZCB0aGUgcGFzc3dkIG9yIHNoYWRvdyBmaWxlc1xuIik7CiAgICAgICAg ICAgICAgICB9CiAgICAgICAgcHJpbnRmICgiMykgU3BlY2lmeSBhIHBhc3N3ZC9zaGFkb3cgaW4g YSBkaWZmZXJlbnQgbG9jYXRpb24gKGkuZS4gTk9UIC9ldGMvc2hhZG93KVxuPyIpOwogICAgICAg IHNjYW5mICgiJXMiLCBjaG9pY2UpOwoKICAgICAgICBpZiAoY2hvaWNlWzBdID09ICcxJykKICAg ICAgICAgICAgICAgIGdldGN1c3RvbWZpbGUgPSAxOwogICAgICAgIGlmIChjaG9pY2VbMF0gPT0g JzInKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAobXl1aWQg PT0gMCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBpZiAoITEpCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGdldHBhc3N3ZGZpbGUgPSAxOwogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKDEpCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGdldHNoYWRvd2ZpbGUgPSAxOwogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICBpZiAoY2hvaWNlWzBd ID09ICczJykKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgc3BlY2lm eXNoYWRvd2ZpbGUgPSAxOwogICAgICAgICAgICAgICAgICAgICAgICBwYXJzZWFsbCA9IDE7CiAg ICAgICAgICAgICAgICB9CgogICAgICAgIGlmICgoIWdldGN1c3RvbWZpbGUpICYmICghZ2V0cGFz c3dkZmlsZSkgJiYgKCFnZXRzaGFkb3dmaWxlKSAmJiAoIXNwZWNpZnlzaGFkb3dmaWxlKSkKICAg ICAgICAgICAgICAgIGdvdG8gcmVjaG9vc2VpbnB1dDsKCiAgICAgICAgaWYgKGdldHBhc3N3ZGZp bGUpCiAgICAgICAgICAgICAgICAoX19leHRlbnNpb25fXyAoX19idWlsdGluX2NvbnN0YW50X3Ag KCIvZXRjL3Bhc3N3ZCIpID8gKCgoc2l6ZV90KShjb25zdCB2b2lkICopKCgiL2V0Yy9wYXNzd2Qi KSArIDEpIC0gKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgiL2V0Yy9wYXNzd2QiKSA9PSAxKSAmJiBz dHJsZW4gKCIvZXRjL3Bhc3N3ZCIpICsgMSA8PSA4ID8gX19zdHJjcHlfc21hbGwgKHBhcnNlZmls ZSwgX19leHRlbnNpb25fXyAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hh ciAqKSAoIi9ldGMvcGFzc3dkIikpWzAgKyAxXSA8PCA4IHwgKChfX2NvbnN0IHVuc2lnbmVkIGNo YXIgKikgKF9fY29uc3QgY2hhciAqKSAoIi9ldGMvcGFzc3dkIikpWzBdKSwgX19leHRlbnNpb25f XyAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoIi9ldGMvcGFz c3dkIikpWzQgKyAxXSA8PCA4IHwgKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3Qg Y2hhciAqKSAoIi9ldGMvcGFzc3dkIikpWzRdKSwgX19leHRlbnNpb25fXyAoKCgoKF9fY29uc3Qg dW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopICgiL2V0Yy9wYXNzd2QiKSlbMCArIDNd IDw8IDggfCAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopICgiL2V0 Yy9wYXNzd2QiKSlbMCArIDJdKSA8PCA4IHwgKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9f Y29uc3QgY2hhciAqKSAoIi9ldGMvcGFzc3dkIikpWzAgKyAxXSkgPDwgOCB8ICgoX19jb25zdCB1 bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKCIvZXRjL3Bhc3N3ZCIpKVswXSksIF9f ZXh0ZW5zaW9uX18gKCgoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAq KSAoIi9ldGMvcGFzc3dkIikpWzQgKyAzXSA8PCA4IHwgKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIg KikgKF9fY29uc3QgY2hhciAqKSAoIi9ldGMvcGFzc3dkIikpWzQgKyAyXSkgPDwgOCB8ICgoX19j b25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKCIvZXRjL3Bhc3N3ZCIpKVs0 ICsgMV0pIDw8IDggfCAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICop ICgiL2V0Yy9wYXNzd2QiKSlbNF0pLCBzdHJsZW4gKCIvZXRjL3Bhc3N3ZCIpICsgMSkgOiAoY2hh ciAqKSBtZW1jcHkgKHBhcnNlZmlsZSwgIi9ldGMvcGFzc3dkIiwgc3RybGVuICgiL2V0Yy9wYXNz d2QiKSArIDEpKSA6IHN0cmNweSAocGFyc2VmaWxlLCAiL2V0Yy9wYXNzd2QiKSkpOwogICAgICAg IGlmIChnZXRzaGFkb3dmaWxlKQogICAgICAgICAgICAgICAgKF9fZXh0ZW5zaW9uX18gKF9fYnVp bHRpbl9jb25zdGFudF9wICgiL2V0Yy9zaGFkb3ciKSA/ICgoKHNpemVfdCkoY29uc3Qgdm9pZCAq KSgoIi9ldGMvc2hhZG93IikgKyAxKSAtIChzaXplX3QpKGNvbnN0IHZvaWQgKikoIi9ldGMvc2hh ZG93IikgPT0gMSkgJiYgc3RybGVuICgiL2V0Yy9zaGFkb3ciKSArIDEgPD0gOCA/IF9fc3RyY3B5 X3NtYWxsIChwYXJzZWZpbGUsIF9fZXh0ZW5zaW9uX18gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFy ICopIChfX2NvbnN0IGNoYXIgKikgKCIvZXRjL3NoYWRvdyIpKVswICsgMV0gPDwgOCB8ICgoX19j b25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKCIvZXRjL3NoYWRvdyIpKVsw XSksIF9fZXh0ZW5zaW9uX18gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNo YXIgKikgKCIvZXRjL3NoYWRvdyIpKVs0ICsgMV0gPDwgOCB8ICgoX19jb25zdCB1bnNpZ25lZCBj aGFyICopIChfX2NvbnN0IGNoYXIgKikgKCIvZXRjL3NoYWRvdyIpKVs0XSksIF9fZXh0ZW5zaW9u X18gKCgoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoIi9ldGMv c2hhZG93IikpWzAgKyAzXSA8PCA4IHwgKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29u c3QgY2hhciAqKSAoIi9ldGMvc2hhZG93IikpWzAgKyAyXSkgPDwgOCB8ICgoX19jb25zdCB1bnNp Z25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKCIvZXRjL3NoYWRvdyIpKVswICsgMV0pIDw8 IDggfCAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopICgiL2V0Yy9z aGFkb3ciKSlbMF0pLCBfX2V4dGVuc2lvbl9fICgoKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICop IChfX2NvbnN0IGNoYXIgKikgKCIvZXRjL3NoYWRvdyIpKVs0ICsgM10gPDwgOCB8ICgoX19jb25z dCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKCIvZXRjL3NoYWRvdyIpKVs0ICsg Ml0pIDw8IDggfCAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopICgi L2V0Yy9zaGFkb3ciKSlbNCArIDFdKSA8PCA4IHwgKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikg KF9fY29uc3QgY2hhciAqKSAoIi9ldGMvc2hhZG93IikpWzRdKSwgc3RybGVuICgiL2V0Yy9zaGFk b3ciKSArIDEpIDogKGNoYXIgKikgbWVtY3B5IChwYXJzZWZpbGUsICIvZXRjL3NoYWRvdyIsIHN0 cmxlbiAoIi9ldGMvc2hhZG93IikgKyAxKSkgOiBzdHJjcHkgKHBhcnNlZmlsZSwgIi9ldGMvc2hh ZG93IikpKTsKCiAgICAgICAgaWYgKGdldGN1c3RvbWZpbGUpCiAgICAgICAgICAgICAgICB7CiAg ICAgICAgICAgICAgICAgICAgICAgIHJlY2hvb3NlY3VzdG9tcjoKICAgICAgICAgICAgICAgICAg ICAgICAgcHJpbnRmICgiXG5DaG9vc2UgYW4gaW5wdXQgZmlsZTogIik7CiAgICAgICAgICAgICAg ICAgICAgICAgIHNjYW5mICgiJXMiLCBpbmZpbGVuYW1lKTsKICAgICAgICAgICAgICAgICAgICAg ICAgaWYgKCFmaWxlZXhpc3RzKGluZmlsZW5hbWUpKQogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZiAo IlxuXG5cdEN1c3RvbSBmaWxlIGRvZXNuJ3QgZXhpc3QhIik7CiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBnb3RvIHJlY2hvb3NlY3VzdG9tcjsKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgaWYgKHNwZWNpZnlz aGFkb3dmaWxlKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICByZWNo b29zZXBhcnNlcjoKICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmICgiXG5DaG9vc2UgYW4g aW5wdXQgZmlsZTogIik7CiAgICAgICAgICAgICAgICAgICAgICAgIHNjYW5mICgiJXMiLCBwYXJz ZWZpbGUpOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWZpbGVleGlzdHMocGFyc2VmaWxl KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBwcmludGYgKCJcblxuXHRUaGF0IGZpbGUgZG9lc24ndCBleGlz dCEiKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gcmVjaG9v c2VwYXJzZXI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg ICAgfQoKICAgICAgICBpZiAoIWdldGN1c3RvbWZpbGUgJiYgIXNwZWNpZnlzaGFkb3dmaWxlKQog ICAgICAgICAgICAgICAgewoKICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmICgiXG5TaGFs bCB3ZVxuIik7CiAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZiAoIjEpIFBhcnNlIG91dCB0 aGUgd2hvbGUgJXMgZmlsZVxuIiwgcGFyc2VmaWxlKTsKICAgICAgICAgICAgICAgICAgICAgICAg cHJpbnRmICgiMikgT25seSBncmFiIHNwZWNpZmljIHVzZXJzIHBhc3N3b3Jkc1xuPyIpOwogICAg ICAgICAgICAgICAgICAgICAgICBzY2FuZiAoIiVzIiwgY2hvaWNlKTsKCiAgICAgICAgICAgICAg ICAgICAgICAgIGlmIChjaG9pY2VbMF0gPT0gJzEnKQogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHBhcnNlYWxsID0gMTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNob2ljZVsw XSA9PSAnMicpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0dXNlcnMgPSAxOwog ICAgICAgICAgICAgICAgfQp9Cgp2b2lkIHBfY2hvb3NlX2xvZ2dpbmcgKCkKewogICAgICAgIGNo YXIgY2hvaWNlWzRdOwogICAgICAgIGludCBvY291bnRlcjsKICAgICAgICBjaGFyIG92ZXJ3cml0 ZVsyXTsKCgogICAgICAgIHJlY2hvb3NlY3JhY2tsb2c6CiAgICAgICAgcHJpbnRmICgiXG5XaGVy ZSBzaGFsbCB3ZSBsb2cgdGhlIGNyYWNrZWQgcGFzc3dvcmRzIHRvP1xuIik7CiAgICAgICAgcHJp bnRmICgiMSkgV3JpdGUgdG8gZmlsZVxuIik7CiAgICAgICAgcHJpbnRmICgiMikgUHJpbnQgdG8g U2NyZWVuXG4iKTsKICAgICAgICBwcmludGYgKCIoWW91IG1heSB1c2UgYW55IGNvbWJpbmF0aW9u IG9mIDEsIDIsIG9yIDEyIChpZSAxMiBmb3IgYm90aCkpPyIpOwogICAgICAgIHNjYW5mICgiJXMi LCBjaG9pY2UpOwoKICAgICAgICBvY291bnRlciA9IDA7CiAgICAgICAgd2hpbGUgKGNob2ljZVtv Y291bnRlcl0gIT0gJ1wwJykKICAgICAgICB7CiAgICAgICAgICAgICAgICBpZiAoY2hvaWNlW29j b3VudGVyXSA9PSAnMScpCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBsb2djcmFja2VkdG9maWxlID0gMTsKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB3cml0ZWFueXRvZmlsZSA9IDE7CiAgICAgICAgICAgICAgICAgICAgICAg IH0KICAgICAgICAgICAgICAgIGlmIChjaG9pY2Vbb2NvdW50ZXJdID09ICcyJykKICAgICAgICAg ICAgICAgICAgICAgICAgbG9nY3JhY2tlZHRvc2NyZWVuID0gMTsKICAgICAgICAgICAgICAgIG9j b3VudGVyKys7CiAgICAgICAgfQoKICAgICAgICBpZiAoKCFsb2djcmFja2VkdG9maWxlKSAmJiAo IWxvZ2NyYWNrZWR0b3NjcmVlbikpCiAgICAgICAgICAgICAgICBnb3RvIHJlY2hvb3NlY3JhY2ts b2c7CgogICAgICAgIGlmIChsb2djcmFja2VkdG9maWxlKQogICAgICAgICAgICAgICAgewogICAg ICAgICAgICAgICAgICAgICAgICByZWNob29zZW91dHB1dHc6CiAgICAgICAgICAgICAgICAgICAg ICAgIHByaW50ZiAoIlxuQ2hvb3NlIGFuIG91dHB1dCBmaWxlICh0eXBlIFwiZGVmXCIgdG8gdXNl IHRoZSBkZWZhdWx0IGZpbGUgXCJjcmFja2VkXCIpOiAiKTsKICAgICAgICAgICAgICAgICAgICAg ICAgc2NhbmYgKCIlcyIsIGNyYWNrZWRsb2cpOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAo X19leHRlbnNpb25fXyAoeyBzaXplX3QgX19zMV9sZW4sIF9fczJfbGVuOyAoX19idWlsdGluX2Nv bnN0YW50X3AgKGNyYWNrZWRsb2cpICYmIF9fYnVpbHRpbl9jb25zdGFudF9wICgiZGVmIikgJiYg KF9fczFfbGVuID0gc3RybGVuIChjcmFja2VkbG9nKSwgX19zMl9sZW4gPSBzdHJsZW4gKCJkZWYi KSwgKCEoKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgoY3JhY2tlZGxvZykgKyAxKSAtIChzaXplX3Qp KGNvbnN0IHZvaWQgKikoY3JhY2tlZGxvZykgPT0gMSkgfHwgX19zMV9sZW4gPj0gNCkgJiYgKCEo KHNpemVfdCkoY29uc3Qgdm9pZCAqKSgoImRlZiIpICsgMSkgLSAoc2l6ZV90KShjb25zdCB2b2lk ICopKCJkZWYiKSA9PSAxKSB8fCBfX3MyX2xlbiA+PSA0KSkgPyBtZW1jbXAgKChfX2NvbnN0IGNo YXIgKikgKGNyYWNrZWRsb2cpLCAoX19jb25zdCBjaGFyICopICgiZGVmIiksIChfX3MxX2xlbiA8 IF9fczJfbGVuID8gX19zMV9sZW4gOiBfX3MyX2xlbikgKyAxKSA6IChfX2J1aWx0aW5fY29uc3Rh bnRfcCAoY3JhY2tlZGxvZykgJiYgKChzaXplX3QpKGNvbnN0IHZvaWQgKikoKGNyYWNrZWRsb2cp ICsgMSkgLSAoc2l6ZV90KShjb25zdCB2b2lkICopKGNyYWNrZWRsb2cpID09IDEpICYmIChfX3Mx X2xlbiA9IHN0cmxlbiAoY3JhY2tlZGxvZyksIF9fczFfbGVuIDwgNCkgPyAoX19idWlsdGluX2Nv bnN0YW50X3AgKCJkZWYiKSAmJiAoKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgoImRlZiIpICsgMSkg LSAoc2l6ZV90KShjb25zdCB2b2lkICopKCJkZWYiKSA9PSAxKSA/IChfX2V4dGVuc2lvbl9fICh7 IHJlZ2lzdGVyIGludCBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19j b25zdCBjaGFyICopIChjcmFja2VkbG9nKSlbMF0gLSAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAq KSAoX19jb25zdCBjaGFyICopKCJkZWYiKSlbMF0pOyBpZiAoX19zMV9sZW4gPiAwICYmIF9fcmVz dWx0ID09IDApIHsgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29u c3QgY2hhciAqKSAoY3JhY2tlZGxvZykpWzFdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikg KF9fY29uc3QgY2hhciAqKSAoImRlZiIpKVsxXSk7IGlmIChfX3MxX2xlbiA+IDEgJiYgX19yZXN1 bHQgPT0gMCkgeyBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25z dCBjaGFyICopIChjcmFja2VkbG9nKSlbMl0gLSAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAo X19jb25zdCBjaGFyICopICgiZGVmIikpWzJdKTsgaWYgKF9fczFfbGVuID4gMiAmJiBfX3Jlc3Vs dCA9PSAwKSBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBj aGFyICopIChjcmFja2VkbG9nKSlbM10gLSAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19j b25zdCBjaGFyICopICgiZGVmIikpWzNdKTsgfSB9IF9fcmVzdWx0OyB9KSkgOiAoX19leHRlbnNp b25fXyAoeyBfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKl9fczIgPSAoX19jb25zdCB1bnNpZ25lZCBj aGFyICopIChfX2NvbnN0IGNoYXIgKikgKCJkZWYiKTsgcmVnaXN0ZXIgaW50IF9fcmVzdWx0ID0g KCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKGNyYWNrZWRsb2cp KVswXSAtIF9fczJbMF0pOyBpZiAoX19zMV9sZW4gPiAwICYmIF9fcmVzdWx0ID09IDApIHsgX19y ZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoY3Jh Y2tlZGxvZykpWzFdIC0gX19zMlsxXSk7IGlmIChfX3MxX2xlbiA+IDEgJiYgX19yZXN1bHQgPT0g MCkgeyBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFy ICopIChjcmFja2VkbG9nKSlbMl0gLSBfX3MyWzJdKTsgaWYgKF9fczFfbGVuID4gMiAmJiBfX3Jl c3VsdCA9PSAwKSBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25z dCBjaGFyICopIChjcmFja2VkbG9nKSlbM10gLSBfX3MyWzNdKTsgfSB9IF9fcmVzdWx0OyB9KSkp IDogKF9fYnVpbHRpbl9jb25zdGFudF9wICgiZGVmIikgJiYgKChzaXplX3QpKGNvbnN0IHZvaWQg KikoKCJkZWYiKSArIDEpIC0gKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgiZGVmIikgPT0gMSkgJiYg KF9fczJfbGVuID0gc3RybGVuICgiZGVmIiksIF9fczJfbGVuIDwgNCkgPyAoX19idWlsdGluX2Nv bnN0YW50X3AgKGNyYWNrZWRsb2cpICYmICgoc2l6ZV90KShjb25zdCB2b2lkICopKChjcmFja2Vk bG9nKSArIDEpIC0gKHNpemVfdCkoY29uc3Qgdm9pZCAqKShjcmFja2VkbG9nKSA9PSAxKSA/IChf X2V4dGVuc2lvbl9fICh7IHJlZ2lzdGVyIGludCBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5zaWdu ZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChjcmFja2VkbG9nKSlbMF0gLSAoKF9fY29uc3Qg dW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopKCJkZWYiKSlbMF0pOyBpZiAoX19zMl9s ZW4gPiAwICYmIF9fcmVzdWx0ID09IDApIHsgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVk IGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoY3JhY2tlZGxvZykpWzFdIC0gKChfX2NvbnN0IHVu c2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoImRlZiIpKVsxXSk7IGlmIChfX3MyX2xl biA+IDEgJiYgX19yZXN1bHQgPT0gMCkgeyBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQg Y2hhciAqKSAoX19jb25zdCBjaGFyICopIChjcmFja2VkbG9nKSlbMl0gLSAoKF9fY29uc3QgdW5z aWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopICgiZGVmIikpWzJdKTsgaWYgKF9fczJfbGVu ID4gMiAmJiBfX3Jlc3VsdCA9PSAwKSBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hh ciAqKSAoX19jb25zdCBjaGFyICopIChjcmFja2VkbG9nKSlbM10gLSAoKF9fY29uc3QgdW5zaWdu ZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopICgiZGVmIikpWzNdKTsgfSB9IF9fcmVzdWx0OyB9 KSkgOiAoX19leHRlbnNpb25fXyAoeyBfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKl9fczEgPSAoX19j b25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKGNyYWNrZWRsb2cpOyByZWdp c3RlciBpbnQgX19yZXN1bHQgPSBfX3MxWzBdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikg KF9fY29uc3QgY2hhciAqKSAoImRlZiIpKVswXTsgaWYgKF9fczJfbGVuID4gMCAmJiBfX3Jlc3Vs dCA9PSAwKSB7IF9fcmVzdWx0ID0gKF9fczFbMV0gLSAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAq KSAoX19jb25zdCBjaGFyICopICgiZGVmIikpWzFdKTsgaWYgKF9fczJfbGVuID4gMSAmJiBfX3Jl c3VsdCA9PSAwKSB7IF9fcmVzdWx0ID0gKF9fczFbMl0gLSAoKF9fY29uc3QgdW5zaWduZWQgY2hh ciAqKSAoX19jb25zdCBjaGFyICopICgiZGVmIikpWzJdKTsgaWYgKF9fczJfbGVuID4gMiAmJiBf X3Jlc3VsdCA9PSAwKSBfX3Jlc3VsdCA9IChfX3MxWzNdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNo YXIgKikgKF9fY29uc3QgY2hhciAqKSAoImRlZiIpKVszXSk7IH0gfSBfX3Jlc3VsdDsgfSkpKSA6 IHN0cmNtcCAoY3JhY2tlZGxvZywgImRlZiIpKSkpOyB9KSA9PSAwKQogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIChfX2V4dGVuc2lvbl9fIChfX2J1aWx0aW5fY29uc3RhbnRfcCAoImNy YWNrZWQiKSA/ICgoKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgoImNyYWNrZWQiKSArIDEpIC0gKHNp emVfdCkoY29uc3Qgdm9pZCAqKSgiY3JhY2tlZCIpID09IDEpICYmIHN0cmxlbiAoImNyYWNrZWQi KSArIDEgPD0gOCA/IF9fc3RyY3B5X3NtYWxsIChjcmFja2VkbG9nLCBfX2V4dGVuc2lvbl9fICgo KF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopICgiY3JhY2tlZCIpKVsw ICsgMV0gPDwgOCB8ICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikg KCJjcmFja2VkIikpWzBdKSwgX19leHRlbnNpb25fXyAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIg KikgKF9fY29uc3QgY2hhciAqKSAoImNyYWNrZWQiKSlbNCArIDFdIDw8IDggfCAoKF9fY29uc3Qg dW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopICgiY3JhY2tlZCIpKVs0XSksIF9fZXh0 ZW5zaW9uX18gKCgoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAo ImNyYWNrZWQiKSlbMCArIDNdIDw8IDggfCAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19j b25zdCBjaGFyICopICgiY3JhY2tlZCIpKVswICsgMl0pIDw8IDggfCAoKF9fY29uc3QgdW5zaWdu ZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopICgiY3JhY2tlZCIpKVswICsgMV0pIDw8IDggfCAo KF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopICgiY3JhY2tlZCIpKVsw XSksIF9fZXh0ZW5zaW9uX18gKCgoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3Qg Y2hhciAqKSAoImNyYWNrZWQiKSlbNCArIDNdIDw8IDggfCAoKF9fY29uc3QgdW5zaWduZWQgY2hh ciAqKSAoX19jb25zdCBjaGFyICopICgiY3JhY2tlZCIpKVs0ICsgMl0pIDw8IDggfCAoKF9fY29u c3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopICgiY3JhY2tlZCIpKVs0ICsgMV0p IDw8IDggfCAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopICgiY3Jh Y2tlZCIpKVs0XSksIHN0cmxlbiAoImNyYWNrZWQiKSArIDEpIDogKGNoYXIgKikgbWVtY3B5IChj cmFja2VkbG9nLCAiY3JhY2tlZCIsIHN0cmxlbiAoImNyYWNrZWQiKSArIDEpKSA6IHN0cmNweSAo Y3JhY2tlZGxvZywgImNyYWNrZWQiKSkpOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmls ZWV4aXN0cyhjcmFja2VkbG9nKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYgKCJcblx0VGhhdCBm aWxlIGV4aXN0cyFcbk92ZXJ3cml0ZSAlcyAoeS9uKT8iLCBjcmFja2VkbG9nKTsKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjYW5mICgiJXMiLCBvdmVyd3JpdGUpOwog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChfX2V4dGVuc2lvbl9f ICh7IGludCBfX3JlczsgaWYgKHNpemVvZiAob3ZlcndyaXRlWzBdKSA+IDEpIHsgaWYgKF9fYnVp bHRpbl9jb25zdGFudF9wIChvdmVyd3JpdGVbMF0pKSB7IGludCBfX2MgPSAob3ZlcndyaXRlWzBd KTsgX19yZXMgPSBfX2MgPCAtMTI4IHx8IF9fYyA+IDI1NSA/IF9fYyA6IF9fY3R5cGVfdG91cHBl cltfX2NdOyB9IGVsc2UgX19yZXMgPSB0b3VwcGVyIChvdmVyd3JpdGVbMF0pOyB9IGVsc2UgX19y ZXMgPSBfX2N0eXBlX3RvdXBwZXJbKGludCkgKG92ZXJ3cml0ZVswXSldOyBfX3JlczsgfSkpICE9 ICdZJykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290 byByZWNob29zZW91dHB1dHc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAg ICAgICAgICAgICAgfQp9Cgp2b2lkIHBfY2hvb3NlX2dlbl9vdXRwdXQgKCkKewogICAgICAgIGNo YXIgY2hvaWNlWzRdOwogICAgICAgIGludCBvY291bnRlcjsKICAgICAgICBjaGFyIG92ZXJ3cml0 ZVsyXTsKCgogICAgICAgIHJlY2hvb3Nlb3V0cHV0OgogICAgICAgIHByaW50ZiAoIlxuV2hlcmUg U2hhbGwgd2UgZGlyZWN0IHRoZSBvdXRwdXRcbiIpOwogICAgICAgIHByaW50ZiAoIjEpIFdyaXRl IHRvIGZpbGVcbiIpOwogICAgICAgIHByaW50ZiAoIjIpIFByaW50IHRvIHNjcmVlblxuIik7CiAg ICAgICAgcHJpbnRmICgiKFlvdSBtYXkgdXNlIGFueSBjb21iaW5hdGlvbiBvZiAxLCAyLCBvciAx MiAoaWUgMTIgZm9yIGJvdGgpKT8iKTsKICAgICAgICBzY2FuZiAoIiVzIiwgY2hvaWNlKTsKCiAg ICAgICAgb2NvdW50ZXIgPSAwOwogICAgICAgIHdoaWxlIChjaG9pY2Vbb2NvdW50ZXJdICE9ICdc MCcpCiAgICAgICAgewogICAgICAgICAgICAgICAgaWYgKGNob2ljZVtvY291bnRlcl0gPT0gJzEn KQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICB3cml0ZWdlbnRvZmls ZSA9IDE7CiAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlYW55dG9maWxlID0gMTsKICAgICAg ICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmIChjaG9pY2Vbb2NvdW50ZXJdID09ICcyJykK ICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRnZW50b3NjcmVlbiA9IDE7CiAgICAgICAgICAg ICAgICBvY291bnRlcisrOwogICAgICAgIH0KCiAgICAgICAgaWYgKCghd3JpdGVnZW50b2ZpbGUp ICYmICghcHJpbnRnZW50b3NjcmVlbikpCiAgICAgICAgICAgICAgICBnb3RvIHJlY2hvb3Nlb3V0 cHV0OwoKICAgICAgICBpZiAod3JpdGVnZW50b2ZpbGUpCiAgICAgICAgewogICAgICAgICAgICAg ICAgcmVjaG9vc2VnZW5vdXRwdXR3OgogICAgICAgICAgICAgICAgcHJpbnRmICgiXG5DaG9vc2Ug YW4gb3V0cHV0IGZpbGU6ICIpOwogICAgICAgICAgICAgICAgc2NhbmYgKCIlcyIsIG91dGZpbGVu YW1lKTsKICAgICAgICAgICAgICAgIGlmIChmaWxlZXhpc3RzKG91dGZpbGVuYW1lKSkKICAgICAg ICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmICgiXG5cdFRoYXQgZmls ZSBleGlzdHMhXG5PdmVyd3JpdGUgJXMgKHkvbik/Iiwgb3V0ZmlsZW5hbWUpOwogICAgICAgICAg ICAgICAgICAgICAgICBzY2FuZiAoIiVzIiwgb3ZlcndyaXRlKTsKICAgICAgICAgICAgICAgICAg ICAgICAgaWYgKChfX2V4dGVuc2lvbl9fICh7IGludCBfX3JlczsgaWYgKHNpemVvZiAob3Zlcndy aXRlWzBdKSA+IDEpIHsgaWYgKF9fYnVpbHRpbl9jb25zdGFudF9wIChvdmVyd3JpdGVbMF0pKSB7 IGludCBfX2MgPSAob3ZlcndyaXRlWzBdKTsgX19yZXMgPSBfX2MgPCAtMTI4IHx8IF9fYyA+IDI1 NSA/IF9fYyA6IF9fY3R5cGVfdG91cHBlcltfX2NdOyB9IGVsc2UgX19yZXMgPSB0b3VwcGVyIChv dmVyd3JpdGVbMF0pOyB9IGVsc2UgX19yZXMgPSBfX2N0eXBlX3RvdXBwZXJbKGludCkgKG92ZXJ3 cml0ZVswXSldOyBfX3JlczsgfSkpICE9ICdZJykKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBnb3RvIHJlY2hvb3NlZ2Vub3V0cHV0dzsKICAgICAgICAgICAgICAgIH0KICAgICAgICB9 Cn0KCnZvaWQgcF9jaG9vc2VfbGVuZ3RoICgpCnsKCiAgICAgICAgY2hhciByYW5nZVsxNV07CiAg ICAgICAgcmFuZ2VbMF0gPSAnXDAnOwogICAgICAgIHByaW50ZiAoIlxuSWYgeW91IGtub3cgdGhl IGxlbmd0aCBvZiB0aGUgcGFzc3dvcmQsIHR5cGUgdGhlIG51bWJlciBpZSA2LCBvdGhlcndpc2Ui KTsKICAgICAgICBwcmludGYgKCJcbkdpdmUgYSByYW5nZSBvZiBsZW5ndGhzIHRvIHRlc3Q6IGll IDItOCBvciA1LTIwXG4iKTsKCiAgICAgICAgcmVjaG9vc2U6cHJpbnRmICgiXG5UeXBlIHRoZSBu dW1iZXIgb2YgY2hhcmFjZXJzIHRvIHRyeTogIik7CiAgICAgICAgcmVjaG9vc2VyYW5nZTpzY2Fu ZiAoIiVzIiwgcmFuZ2UpOwogICAgICAgIGlmIChyYW5nZVswXSA9PSAnXDAnKQogICAgICAgICAg ICAgICAgZ290byByZWNob29zZXJhbmdlOwoKICAgICAgICBzb3J0cmFuZ2UgKHJhbmdlKTsKCiAg ICAgICAgcHJpbnRmICgiXG5taW5sZW5ndGg6ICVpIFxubWF4bGVuZ3RoOiAlaVxuIiwgbWlubGVu Z3RoLCBtYXhsZW5ndGgpOwoKICAgICAgICBpZiAobWlubGVuZ3RoID4gbWF4bGVuZ3RoKQogICAg ICAgICAgICAgICAgZ290byByZWNob29zZTsKICAgICAgICBpZiAoKG1pbmxlbmd0aCA8IDEpIHx8 IChtaW5sZW5ndGggPiAyNTYpKQogICAgICAgICAgICAgICAgZ290byByZWNob29zZTsKICAgICAg ICBpZiAoKG1heGxlbmd0aCA8IDEpIHx8IChtYXhsZW5ndGggPiAyNTYpKQogICAgICAgICAgICAg ICAgZ290byByZWNob29zZTsKfQoKdm9pZCBwX2Nob29zZV9zZWNsZXZlbCAoKQp7CiAgICAgICAg Y2hhciBjaG9pY2VbNF07CgoKICAgICAgICBTZWN1cml0eToKICAgICAgICBwcmludGYgKCJcblxu Q2hvb3NlIGEgc2VjdXJpdHkgbGV2ZWw6Iik7CiAgICAgICAgcHJpbnRmICgiXG4xKSAwLTkiKTsK ICAgICAgICBwcmludGYgKCJcbjIpIGEteiAmJiBBLVoiKTsKICAgICAgICBwcmludGYgKCJcbjMp IGEteiAmJiBBLVogJiYgMC05Iik7CiAgICAgICAgcHJpbnRmICgiXG40KSBhLXogJiYgQS1aICYm IDAtOSAmJiBTSElGVCAwLTkgJiYgYCAmJiB+Iik7CiAgICAgICAgcHJpbnRmICgiXG41KSBNb3N0 IE5vcm1hbCBDaGFyYWN0ZXJzIik7CiAgICAgICAgcHJpbnRmICgiXG42KSBBbGwgUG9zc2libGUg Q2hhcmFjdGVycyIpOwogICAgICAgIHByaW50ZiAoIlxuPyAiKTsKICAgICAgICBzY2FuZiAoIiVz IiwgY2hvaWNlKTsKICAgICAgICBTTFZMID0gYzJpIChjaG9pY2VbMF0pOwoKCiAgICAgICAgaWYg KChTTFZMICE9IDEpICYmIChTTFZMICE9IDIpICYmIChTTFZMICE9IDMpICYmIChTTFZMICE9IDQp ICYmIChTTFZMICE9IDUpICYmIChTTFZMICE9IDYpKQogICAgICAgICAgICAgICAgZ290byBTZWN1 cml0eTsKfQoKdm9pZCBzZXRwYXJhbWV0ZXJzICgpCnsKICAgICAgICBwX2Nob29zZV9hY3Rpb24g KCk7CgogICAgICAgIGlmIChyZXN1bWUpCiAgICAgICAgewogICAgICAgICAgICAgICAgcF9jaG9v c2VfcmVzdW1lX3Nlc3Npb24gKCk7CiAgICAgICAgfQoKICAgICAgICBpZiAoY3JhY2spCiAgICAg ICAgewogICAgICAgICAgICAgICAgcF9jaG9vc2VfY2xpZW50X21vZGUgKCk7CgogICAgICAgICAg ICAgICAgaWYgKGRpc3RyaWJ1dGVkKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAg ICAgICAgICBwX2Nob29zZV9zZXJ2ZXIgKCk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAg ICAgICAgaWYgKHN0YW5kYWxvbmUpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAg ICAgICAgIHBfbmV3X3Nlc3Npb24gKCk7CgogICAgICAgICAgICAgICAgICAgICAgICBwX2Nob29z ZV9hdHRhY2sgKCk7CgogICAgICAgICAgICAgICAgICAgICAgICBwX2Nob29zZV9pbnB1dCAoKTsK CiAgICAgICAgICAgICAgICAgICAgICAgIHBfY2hvb3NlX2xvZ2dpbmcgKCk7CgogICAgICAgICAg ICAgICAgICAgICAgICB3cml0ZWFueXRvZmlsZSA9IDE7CiAgICAgICAgICAgICAgICB9CiAgICAg ICAgfQoKICAgICAgICBpZiAoZ2VuZXJhdGUpCiAgICAgICAgewogICAgICAgICAgICAgICAgcF9j aG9vc2VfZ2VuX291dHB1dCAoKTsKICAgICAgICB9CgogICAgICAgIGlmIChnZW5lcmF0ZSB8fCAo YnJ1dGVmb3JjZSAmJiBzdGFuZGFsb25lKSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAg ICAgICAgICAgICAgcF9jaG9vc2VfbGVuZ3RoICgpOwoKICAgICAgICAgICAgICAgICAgICAgICAg cF9jaG9vc2Vfc2VjbGV2ZWwgKCk7CiAgICAgICAgICAgICAgICB9Cn0KIyAzMyAiQnJlYWtEb3du LmMiIDIKIyAxICJoZWFkZXJzL2Rpc3RyaWIuaCIgMQp2b2lkIHNlcnZpY2UgKGludCB2YWx1ZSk7 CnZvaWQgc2VuZF9yZXF1ZXN0IChpbnQgYnMpOwoKdm9pZCBjYWxjdWxhdGVfYmxvY2tfc2l6ZSAo KQp7CiAgICAgICAgZF9ibG9ja19zaXplID0gMjA7Cn0KCmNyZWF0ZV9jb25uZWN0aW9uICgpCnsK CgogICAgICAgIGludCBwZ3JwOwogICAgICAgIGludCBvcHQgPSAxOwogICAgICAgIHN0cnVjdCBz b2NrYWRkcl9pbiBzYWRkcjsKCiAgICAgICAgaWYgKHNpZ25hbCAoMjksIHNlcnZpY2UpKQogICAg ICAgIHsKICAgICAgICAgICAgICAgIHByaW50ZigiRXJyb3Igb24gc2V0dGluZyB1cCB0aGUgU0lH SU8gc2lnbmFsLi4uXG5FeGl0aW5nXG4iKTsKICAgICAgICAgICAgICAgIGV4aXQoMSk7CiAgICAg ICAgfQoKCiAgICAgICAgaWYgKChjbGllbnRTb2NrPXNvY2tldCgyLCBTT0NLX1NUUkVBTSwgMCkp ID09IC0xKQogICAgICAgIHsKICAgICAgICAgICAgICAgIHByaW50ZigiRXJyb3IgYWxsb2NhdGlu ZyBhIHNvY2tldC4uLlxuRXhpdGluZ1xuIik7CiAgICAgICAgICAgICAgICBleGl0KDEpOwogICAg ICAgIH0KCiAgICAgICAgc2FkZHIuc2luX2ZhbWlseSA9IDI7CiAgICAgICAgc2FkZHIuc2luX2Fk ZHIuc19hZGRyID0gaW5ldF9hZGRyKHNlcnZlcl9pcCk7CiAgICAgICAgc2FkZHIuc2luX3BvcnQg PSAoX19leHRlbnNpb25fXyAoeyByZWdpc3RlciB1bnNpZ25lZCBzaG9ydCBpbnQgX192OyBpZiAo X19idWlsdGluX2NvbnN0YW50X3AgKHNlcnZlcl9wb3J0KSkgX192ID0gKCgoKHNlcnZlcl9wb3J0 KSA+PiA4KSAmIDB4ZmYpIHwgKCgoc2VydmVyX3BvcnQpICYgMHhmZikgPDwgOCkpOyBlbHNlIF9f YXNtX18gX192b2xhdGlsZV9fICgicm9ydyAkOCwgJXcwIiA6ICI9ciIgKF9fdikgOiAiMCIgKCh1 bnNpZ25lZCBzaG9ydCBpbnQpIChzZXJ2ZXJfcG9ydCkpIDogImNjIik7IF9fdjsgfSkpOwoKCiAg ICAgICAgcGdycCA9IGdldHBpZCgpOwogICAgICAgIGlmIChpb2N0bCAoY2xpZW50U29jaywgMHg4 OTAyLCAoY2hhciAqKSYocGdycCkpIDwgMCkKICAgICAgICB7CiAgICAgICAgICAgICAgICBwcmlu dGYoIkVycm9yIGluIGlvY3RsIGZ1bmN0aW9uLi4uXG5FeGl0aW5nXG4iKTsKICAgICAgICAgICAg ICAgIGV4aXQoMSk7CiAgICAgICAgfQoKICAgICAgICBpZiAoZmNudGwgKGNsaWVudFNvY2ssIDgs IHBncnApIDwgMCkKICAgICAgICB7CiAgICAgICAgICAgICAgICBwcmludGYoIkVycm9yIGluIGZj bnRsIGZ1bmN0aW9uIChGX1NFVE9XTikuLi5cbkV4aXRpbmdcbiIpOwogICAgICAgICAgICAgICAg ZXhpdCgxKTsKICAgICAgICB9CgogICAgICAgIGlmIChmY250bCAoY2xpZW50U29jaywgNCwgMDIw MDAwKSA8IDApCiAgICAgICAgewogICAgICAgICAgICAgICAgcHJpbnRmKCJFcnJvciBmY250bCBm dW5jdGlvbiAoRl9TRVRGTCkuLi5cbkV4aXRpbmdcbiIpOwogICAgICAgICAgICAgICAgZXhpdCgx KTsKICAgICAgICB9CgogICAgICAgIGlmICgoc2V0c29ja29wdChjbGllbnRTb2NrLCAxLCAyLCAm b3B0LCBzaXplb2Yob3B0KSkgPCAwKSB8fCAoc2V0c29ja29wdChjbGllbnRTb2NrLCAxLCA5LCAm b3B0LCBzaXplb2Yob3B0KSkgPCAwKSkKICAgICAgICB7CiAgICAgICAgICAgICAgICBwcmludGYo IkVycm9yIGluIHNldHNvY2tvcHQuLi5cbkV4aXRpbmdcbiIpOwogICAgICAgICAgICAgICAgZXhp dCgxKTsKICAgICAgICB9CgogICAgICAgIGlmIChjb25uZWN0KGNsaWVudFNvY2ssJnNhZGRyLHNp emVvZihzYWRkcikpID09IC0xKQogICAgICAgIHsKICAgICAgICAgICAgICAgIHByaW50ZigiVW5h YmxlIHRvIGNvbm5lY3QgdG8gcmVtb3RlIGhvc3QuLi5cbkV4aXRpbmdcbiIpOwogICAgICAgICAg ICAgICAgZXhpdCgxKTsKICAgICAgICB9CgoKfQoKdm9pZCBzZW5kX3JlcXVlc3QgKGludCBicykK ewogICAgICAgIGNoYXIgcmVxdWVzdFsyXTsKCiAgICAgICAgcmVxdWVzdFswXSA9ICdyJzsKICAg ICAgICByZXF1ZXN0WzFdID0gYnM7CgogICAgICAgIHNlbmQoY2xpZW50U29jayxyZXF1ZXN0LDIs MCk7Cn0KCmNoZWNrX2Zvcl9hbGxfZGF0YSAoKQp7CgoKICAgICAgICBjaGFyIGFsbF9pc19yZWFk eTsKCgogICAgICAgIChfX2V4dGVuc2lvbl9fIChfX2J1aWx0aW5fY29uc3RhbnRfcCAoIiQxJDBr NlN2NzBoJGR5TWpVd1J0MFdBMnZKeUlWV0J4cTEiKSA/ICgoKHNpemVfdCkoY29uc3Qgdm9pZCAq KSgoIiQxJDBrNlN2NzBoJGR5TWpVd1J0MFdBMnZKeUlWV0J4cTEiKSArIDEpIC0gKHNpemVfdCko Y29uc3Qgdm9pZCAqKSgiJDEkMGs2U3Y3MGgkZHlNalV3UnQwV0Eydkp5SVZXQnhxMSIpID09IDEp ICYmIHN0cmxlbiAoIiQxJDBrNlN2NzBoJGR5TWpVd1J0MFdBMnZKeUlWV0J4cTEiKSArIDEgPD0g OCA/IF9fc3RyY3B5X3NtYWxsIChkaXN0cmliX3B3bGlzdC5zdG9yZWRwd29yZCwgX19leHRlbnNp b25fXyAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoIiQxJDBr NlN2NzBoJGR5TWpVd1J0MFdBMnZKeUlWV0J4cTEiKSlbMCArIDFdIDw8IDggfCAoKF9fY29uc3Qg dW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopICgiJDEkMGs2U3Y3MGgkZHlNalV3UnQw V0Eydkp5SVZXQnhxMSIpKVswXSksIF9fZXh0ZW5zaW9uX18gKCgoX19jb25zdCB1bnNpZ25lZCBj aGFyICopIChfX2NvbnN0IGNoYXIgKikgKCIkMSQwazZTdjcwaCRkeU1qVXdSdDBXQTJ2SnlJVldC eHExIikpWzQgKyAxXSA8PCA4IHwgKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3Qg Y2hhciAqKSAoIiQxJDBrNlN2NzBoJGR5TWpVd1J0MFdBMnZKeUlWV0J4cTEiKSlbNF0pLCBfX2V4 dGVuc2lvbl9fICgoKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikg KCIkMSQwazZTdjcwaCRkeU1qVXdSdDBXQTJ2SnlJVldCeHExIikpWzAgKyAzXSA8PCA4IHwgKChf X2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoIiQxJDBrNlN2NzBoJGR5 TWpVd1J0MFdBMnZKeUlWV0J4cTEiKSlbMCArIDJdKSA8PCA4IHwgKChfX2NvbnN0IHVuc2lnbmVk IGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoIiQxJDBrNlN2NzBoJGR5TWpVd1J0MFdBMnZKeUlW V0J4cTEiKSlbMCArIDFdKSA8PCA4IHwgKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29u c3QgY2hhciAqKSAoIiQxJDBrNlN2NzBoJGR5TWpVd1J0MFdBMnZKeUlWV0J4cTEiKSlbMF0pLCBf X2V4dGVuc2lvbl9fICgoKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIg KikgKCIkMSQwazZTdjcwaCRkeU1qVXdSdDBXQTJ2SnlJVldCeHExIikpWzQgKyAzXSA8PCA4IHwg KChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoIiQxJDBrNlN2NzBo JGR5TWpVd1J0MFdBMnZKeUlWV0J4cTEiKSlbNCArIDJdKSA8PCA4IHwgKChfX2NvbnN0IHVuc2ln bmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoIiQxJDBrNlN2NzBoJGR5TWpVd1J0MFdBMnZK eUlWV0J4cTEiKSlbNCArIDFdKSA8PCA4IHwgKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9f Y29uc3QgY2hhciAqKSAoIiQxJDBrNlN2NzBoJGR5TWpVd1J0MFdBMnZKeUlWV0J4cTEiKSlbNF0p LCBzdHJsZW4gKCIkMSQwazZTdjcwaCRkeU1qVXdSdDBXQTJ2SnlJVldCeHExIikgKyAxKSA6IChj aGFyICopIG1lbWNweSAoZGlzdHJpYl9wd2xpc3Quc3RvcmVkcHdvcmQsICIkMSQwazZTdjcwaCRk eU1qVXdSdDBXQTJ2SnlJVldCeHExIiwgc3RybGVuICgiJDEkMGs2U3Y3MGgkZHlNalV3UnQwV0Ey dkp5SVZXQnhxMSIpICsgMSkpIDogc3RyY3B5IChkaXN0cmliX3B3bGlzdC5zdG9yZWRwd29yZCwg IiQxJDBrNlN2NzBoJGR5TWpVd1J0MFdBMnZKeUlWV0J4cTEiKSkpOwogICAgICAgIGRfbGVuZ3Ro ID0gbWlubGVuZ3RoID0gbWF4bGVuZ3RoID0gNTsKICAgICAgICBkX2Jsb2NrX251bSA9IDQ7CiAg ICAgICAgU0xWTCA9IDI7CiAgICAgICAgKF9fZXh0ZW5zaW9uX18gKF9fYnVpbHRpbl9jb25zdGFu dF9wICgiYWFhYWEiKSA/ICgoKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgoImFhYWFhIikgKyAxKSAt IChzaXplX3QpKGNvbnN0IHZvaWQgKikoImFhYWFhIikgPT0gMSkgJiYgc3RybGVuICgiYWFhYWEi KSArIDEgPD0gOCA/IF9fc3RyY3B5X3NtYWxsIChkaXN0cmliX3B3bGlzdC5kaXN0cmlic3RhcnQs IF9fZXh0ZW5zaW9uX18gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIg KikgKCJhYWFhYSIpKVswICsgMV0gPDwgOCB8ICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChf X2NvbnN0IGNoYXIgKikgKCJhYWFhYSIpKVswXSksIF9fZXh0ZW5zaW9uX18gKCgoX19jb25zdCB1 bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKCJhYWFhYSIpKVs0ICsgMV0gPDwgOCB8 ICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKCJhYWFhYSIpKVs0 XSksIF9fZXh0ZW5zaW9uX18gKCgoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3Qg Y2hhciAqKSAoImFhYWFhIikpWzAgKyAzXSA8PCA4IHwgKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIg KikgKF9fY29uc3QgY2hhciAqKSAoImFhYWFhIikpWzAgKyAyXSkgPDwgOCB8ICgoX19jb25zdCB1 bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKCJhYWFhYSIpKVswICsgMV0pIDw8IDgg fCAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopICgiYWFhYWEiKSlb MF0pLCBfX2V4dGVuc2lvbl9fICgoKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0 IGNoYXIgKikgKCJhYWFhYSIpKVs0ICsgM10gPDwgOCB8ICgoX19jb25zdCB1bnNpZ25lZCBjaGFy ICopIChfX2NvbnN0IGNoYXIgKikgKCJhYWFhYSIpKVs0ICsgMl0pIDw8IDggfCAoKF9fY29uc3Qg dW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopICgiYWFhYWEiKSlbNCArIDFdKSA8PCA4 IHwgKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoImFhYWFhIikp WzRdKSwgc3RybGVuICgiYWFhYWEiKSArIDEpIDogKGNoYXIgKikgbWVtY3B5IChkaXN0cmliX3B3 bGlzdC5kaXN0cmlic3RhcnQsICJhYWFhYSIsIHN0cmxlbiAoImFhYWFhIikgKyAxKSkgOiBzdHJj cHkgKGRpc3RyaWJfcHdsaXN0LmRpc3RyaWJzdGFydCwgImFhYWFhIikpKTsKICAgICAgICAoX19l eHRlbnNpb25fXyAoX19idWlsdGluX2NvbnN0YW50X3AgKCJlYWFhYSIpID8gKCgoc2l6ZV90KShj b25zdCB2b2lkICopKCgiZWFhYWEiKSArIDEpIC0gKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgiZWFh YWEiKSA9PSAxKSAmJiBzdHJsZW4gKCJlYWFhYSIpICsgMSA8PSA4ID8gX19zdHJjcHlfc21hbGwg KGRpc3RyaWJfcHdsaXN0LmRpc3RyaWJlbmQsIF9fZXh0ZW5zaW9uX18gKCgoX19jb25zdCB1bnNp Z25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKCJlYWFhYSIpKVswICsgMV0gPDwgOCB8ICgo X19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKCJlYWFhYSIpKVswXSks IF9fZXh0ZW5zaW9uX18gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIg KikgKCJlYWFhYSIpKVs0ICsgMV0gPDwgOCB8ICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChf X2NvbnN0IGNoYXIgKikgKCJlYWFhYSIpKVs0XSksIF9fZXh0ZW5zaW9uX18gKCgoKChfX2NvbnN0 IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoImVhYWFhIikpWzAgKyAzXSA8PCA4 IHwgKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoImVhYWFhIikp WzAgKyAyXSkgPDwgOCB8ICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIg KikgKCJlYWFhYSIpKVswICsgMV0pIDw8IDggfCAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAo X19jb25zdCBjaGFyICopICgiZWFhYWEiKSlbMF0pLCBfX2V4dGVuc2lvbl9fICgoKCgoX19jb25z dCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKCJlYWFhYSIpKVs0ICsgM10gPDwg OCB8ICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKCJlYWFhYSIp KVs0ICsgMl0pIDw8IDggfCAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFy ICopICgiZWFhYWEiKSlbNCArIDFdKSA8PCA4IHwgKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikg KF9fY29uc3QgY2hhciAqKSAoImVhYWFhIikpWzRdKSwgc3RybGVuICgiZWFhYWEiKSArIDEpIDog KGNoYXIgKikgbWVtY3B5IChkaXN0cmliX3B3bGlzdC5kaXN0cmliZW5kLCAiZWFhYWEiLCBzdHJs ZW4gKCJlYWFhYSIpICsgMSkpIDogc3RyY3B5IChkaXN0cmliX3B3bGlzdC5kaXN0cmliZW5kLCAi ZWFhYWEiKSkpOwoKICAgICAgICBicnV0ZWZvcmNlID0gMTsKICAgICAgICBydW5icnV0ZWZvcmNl ID0gMTsKICAgICAgICBhbnlhdHRhY2sgPSAxOwogICAgICAgIHN0YXJ0ZGlzdHJpYnV0ZWQgPSAx OwoKCiAgICAgICAgcHJpbnRmICgiXG5XYWl0aW5nIGZvciBkYXRhIGZyb20gc2VydmVyLi4uIik7 CiAgICAgICAgZG8KICAgICAgICB7CiAgICAgICAgICAgICAgICBhbGxfaXNfcmVhZHkgPSAxOwoK ICAgICAgICAgICAgICAgIGlmIChkaXN0cmliX3B3bGlzdC5zdG9yZWRwd29yZFswXSA9PSAnXDAn KQogICAgICAgICAgICAgICAgICAgICAgICBhbGxfaXNfcmVhZHkgPSAwOwoKICAgICAgICAgICAg ICAgIGlmIChkX2xlbmd0aCA9PSAwKQogICAgICAgICAgICAgICAgICAgICAgICBhbGxfaXNfcmVh ZHkgPSAwOwoKICAgICAgICAgICAgICAgIGlmIChtaW5sZW5ndGggPT0gMCkKICAgICAgICAgICAg ICAgICAgICAgICAgYWxsX2lzX3JlYWR5ID0gMDsKCiAgICAgICAgICAgICAgICBpZiAobWF4bGVu Z3RoID09IDApCiAgICAgICAgICAgICAgICAgICAgICAgIGFsbF9pc19yZWFkeSA9IDA7CgogICAg ICAgICAgICAgICAgaWYgKGRfYmxvY2tfbnVtID09IDApCiAgICAgICAgICAgICAgICAgICAgICAg IGFsbF9pc19yZWFkeSA9IDA7CgogICAgICAgICAgICAgICAgaWYgKFNMVkwgPT0gMCkKICAgICAg ICAgICAgICAgICAgICAgICAgYWxsX2lzX3JlYWR5ID0gMDsKCiAgICAgICAgICAgICAgICBpZiAo ZGlzdHJpYl9wd2xpc3QuZGlzdHJpYnN0YXJ0WzBdID09ICdcMCcpCiAgICAgICAgICAgICAgICAg ICAgICAgIGFsbF9pc19yZWFkeSA9IDA7CgogICAgICAgICAgICAgICAgaWYgKGRpc3RyaWJfcHds aXN0LmRpc3RyaWJlbmRbMF0gPT0gJ1wwJykKICAgICAgICAgICAgICAgICAgICAgICAgYWxsX2lz X3JlYWR5ID0gMDsKCiAgICAgICAgfXdoaWxlKCFhbGxfaXNfcmVhZHkpOwogICAgICAgIHByaW50 ZiAoIlxuUmVhZHkhIik7Cn0KCnZvaWQgc2VydmljZSAoaW50IHZhbHVlKQp7CgoKICAgICAgICBj aGFyIHJlY3ZCdWZbMjU2XT0iIjsKICAgICAgICBpbnQgbiwgbTsKICAgICAgICBmZF9zZXQgcnNl dDsKICAgICAgICBzdHJ1Y3QgdGltZXZhbCAqdGltbzsKICAgICAgICBzdHJ1Y3QgdGltZXZhbCB0 aW1lb3V0OwogICAgICAgIHRpbW8gPSAmdGltZW91dDsKICAgICAgICB0aW1vLT50dl9zZWMgPSAw OwogICAgICAgIHRpbW8tPnR2X3VzZWMgPSAwOwoKCiAgICAgICAgZG8geyBpbnQgX19kMCwgX19k MTsgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJjbGQ7IHJlcDsgc3Rvc2wiIDogIj1jIiAoX19kMCks ICI9RCIgKF9fZDEpIDogImEiICgwKSwgIjAiIChzaXplb2YgKGZkX3NldCkgLyBzaXplb2YgKF9f ZmRfbWFzaykpLCAiMSIgKCYoKCZyc2V0KS0+X19mZHNfYml0cylbMF0pIDogIm1lbW9yeSIpOyB9 IHdoaWxlICgwKTsKICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImJ0c2wgJTEsJTAiIDog Ij1tIiAoKCgmcnNldCktPl9fZmRzX2JpdHMpWygoY2xpZW50U29jaykgLyAoOCAqIHNpemVvZiAo X19mZF9tYXNrKSkpXSkgOiAiciIgKCgoaW50KSAoY2xpZW50U29jaykpICUgKDggKiBzaXplb2Yg KF9fZmRfbWFzaykpKSA6ICJjYyIsIm1lbW9yeSIpOwoKCiAgICAgICAgaWYgKChuID0gc2VsZWN0 KGNsaWVudFNvY2srMSwgJnJzZXQsICgodm9pZCAqKTApLCAoKHZvaWQgKikwKSwgdGltbykpIDwg MCkKICAgICAgICB7CiAgICAgICAgICAgICAgICBwcmludGYoIkVycm9yIGluIGNhbGxpbmcgdGhl IHNlbGVjdCBmdW5jdGlvbi4uLlxuRXhpdGluZ1xuIik7CiAgICAgICAgICAgICAgICBleGl0KDEp OwogICAgICAgIH0KCiAgICAgICAgaWYgKG4gPiAwKQogICAgICAgIHsKICAgICAgICAgICAgICAg IGlmICgoX19leHRlbnNpb25fXyAoe3JlZ2lzdGVyIGNoYXIgX19yZXN1bHQ7IF9fYXNtX18gX192 b2xhdGlsZV9fICgiYnRsICUxLCUyIDsgc2V0Y2IgJWIwIiA6ICI9cSIgKF9fcmVzdWx0KSA6ICJy IiAoKChpbnQpIChjbGllbnRTb2NrKSkgJSAoOCAqIHNpemVvZiAoX19mZF9tYXNrKSkpLCAibSIg KCgoJnJzZXQpLT5fX2Zkc19iaXRzKVsoKGNsaWVudFNvY2spIC8gKDggKiBzaXplb2YgKF9fZmRf bWFzaykpKV0pIDogImNjIik7IF9fcmVzdWx0OyB9KSkpCiAgICAgICAgICAgICAgICB7CiAgICAg ICAgICAgICAgICAgICAgICAgIG0gPSByZWN2KGNsaWVudFNvY2sscmVjdkJ1ZiwyNTYsMCk7CiAg ICAgICAgICAgICAgICAgICAgICAgIGlmIChtID4gMCkKICAgICAgICAgICAgICAgICAgICAgICAg ewoKCiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZWxz ZSBpZiAobSA9PSAwKQogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgcHJpbnRmKCJcbkNvbm5lY3Rpb24gbG9zdCB0byByZW1vdGUgaG9zdC4u LlxuRXhpdGluZ1xuIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhpdCgxKTsK ICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgIH0KCgp9 CiMgMzQgIkJyZWFrRG93bi5jIiAyCgp2b2lkIHByaW50X3dlbGNvbWVfbWVzc2FnZSAoKQp7CiAg ICAgICAgcHJpbnRmICgiV2VsY29tZSB0byBCcmVha0Rvd24hXG4iKTsKICAgICAgICBwcmludGYg KCJCcm91Z2h0IHRvIHlvdSBieSBEZWVwIFNwYWNlIFByb2R1Y3Rpb25zIEluYy5cbiIpOwogICAg ICAgIHByaW50ZiAoIkF0IGh0dHA6Ly93d3cuZHNwaS5vcmdcbiIpOwogICAgICAgIHByaW50ZiAo IldyaXR0ZW4gYnkgJXNcbiIsICJCcmV0dCBLdXNraWUgJiYgQW50aG9ueSBNYWduZXIiKTsKICAg ICAgICBwcmludGYgKCJWZXJzaW9uOiAlcyAtLSBEQVRFOiAlc1xuIiwgIjEuNGIxIiwgIjMvMi8y MDAyIik7Cn0KCmludCBtYWluICgpCnsKICAgICAgICBpbnQgaTsKICAgICAgICBpbnQgazsKICAg ICAgICBpbnQgbDsKICAgICAgICBpbnQgY291bnRlcjsKCiAgICAgICAgY2hhciBjcmFja291dHN0 cmluZ1s4MTkyXTsKICAgICAgICBjaGFyIGdlbm91dHN0cmluZ1s4MTkyXTsKICAgICAgICBjaGFy IHBhc3NtYXRjaCA9IDA7CiAgICAgICAgaW50IHRlbXB1Y2hhcjsKICAgICAgICBjaGFyIGRvc2hp ZnQgPSAwOwogICAgICAgIGNoYXIgb2xkWzI1NV07CiAgICAgICAgY2hhciAqdW5lbmNyeXB0ZWRf cHRyLCAqZW5jcnlwdGVkX3B0cjsKICAgICAgICBjaGFyIGVuY1syNTVdOwogICAgICAgIGNoYXIg c2luZ2xlZW5jWzI1NV07CgogICAgICAgIGNoYXIgYWxsY3JhY2tlZCA9IDA7CiAgICAgICAgY2hh ciBkaWN0ZXh0aW5ndWlzaGVkID0gMDsKICAgICAgICBjaGFyIGNvbnRpbnVlbG9vcCA9IDE7Cgog ICAgICAgIEZJTEUgKndyaXRlY3JhY2tlZDsKICAgICAgICBGSUxFICp3cml0ZWdlbjsKCiAgICAg ICAgcHdsaXN0LnByZXYgPSAoKHZvaWQgKikwKTsKICAgICAgICBwd2xpc3QubmV4dCA9ICgodm9p ZCAqKTApOwogICAgICAgIHB3bGlzdC5zdG9yZWRwd29yZFswXSA9ICdcMCc7CiAgICAgICAgcHds aXN0LmNyYWNrZWRwd29yZFswXSA9ICdcMCc7CiAgICAgICAgcGN1cnIgPSAoc3RydWN0IHN0b3Jl cHcgKilwaGVhZDsKICAgICAgICBkY3VyciA9IChzdHJ1Y3Qgc3RvcmVkdyAqKWRoZWFkOwogICAg ICAgIG15ZGljdC5wcmV2ID0gKCh2b2lkICopMCk7CiAgICAgICAgbXlkaWN0Lm5leHQgPSAoKHZv aWQgKikwKTsKICAgICAgICBteWRpY3QudGVzdGR3b3JkWzBdID0gJ1wwJzsKCiAgICAgICAgaWYg KG15dWlkID09IC0xKQogICAgICAgIG15dWlkID0gZ2V0dWlkICgpOwoKICAgIHNldHNpZ25hbHMg KCk7CgogICAgICAgIHByaW50X3dlbGNvbWVfbWVzc2FnZSAoKTsKCiAgICAgICAgc2V0cGFyYW1l dGVycyAoKTsKCiAgICAgICAgaWYgKHN0YW5kYWxvbmUpCiAgICAgICAgewogICAgICAgICAgICAg ICAgaWYgKCFyZXN1bWUpCiAgICAgICAgICAgICAgICB7CgogICAgICAgICAgICAgICAgICAgICAg ICBpZiAoYW55YXR0YWNrKQogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgcHJpbnRmICgiXG5QYXJzaW5nIFBhc3N3b3JkcyAoTG9hZGluZyBp bnRvIFJBTSkuLi5cbiIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlcHdv cmRzIChpbmZpbGVuYW1lKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYg KCJcbkRvbmUhXG4iKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKCiAgICAgICAgICAgICAg ICAgICAgICAgIGlmIChkaWN0YXR0YWNrKQogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmICgiXG5QYXJzaW5nIERpY3Rpb25hcnkg KExvYWRpbmcgaW50byBSQU0pLi4uXG4iKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBwYXJzZWR3b3JkcyAoZGljdGluZmlsZW5hbWUpOwogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHJ1bmRpY3RhdHRhY2sgPSAxOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGRjdXJyID0gKHN0cnVjdCBzdG9yZWR3ICopZGhlYWQ7CiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgcHJpbnRmICgiXG5Eb25lIVxuIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgZmZsdXNoIChzdGRvdXQpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg ICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKHJlc3VtZSkKICAgICAgICAgICAgICAgIHsK ICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VzZXNzaW9uZmlsZSAoKTsKICAgICAgICAgICAg ICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoKCFkaWN0YXR0YWNrKSAmJiAoYnJ1dGVmb3JjZSkp CiAgICAgICAgICAgICAgICAgICAgICAgIHJ1bmJydXRlZm9yY2UgPSAxOwogICAgICAgIH0KCiAg ICAgICAgaWYgKGRpc3RyaWJ1dGVkKQogICAgICAgIHsKICAgICAgICAgICAgICAgIGNhbGN1bGF0 ZV9ibG9ja19zaXplICgpOwogICAgICAgICAgICAgICAgY3JlYXRlX2Nvbm5lY3Rpb24gKCk7CiAg ICAgICAgICAgICAgICBzZW5kX3JlcXVlc3QgKGRfYmxvY2tfc2l6ZSk7CiAgICAgICAgICAgICAg ICBjaGVja19mb3JfYWxsX2RhdGEgKCk7CiAgICAgICAgfQoKCgogICAgICAgIGlmICh3cml0ZWFu eXRvZmlsZSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxv Z2NyYWNrZWR0b2ZpbGUpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVjcmFja2VkID0gZm9wZW4gKGNy YWNrZWRsb2csICJhIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAg ICAgICAgICAgICAgICAgICAgaWYgKHdyaXRlZ2VudG9maWxlKQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdy aXRlZ2VuID0gZm9wZW4gKG91dGZpbGVuYW1lLCAidyIpOwogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgcHJpbnRmICgiXG5SdW5uaW5n Li4uXG4iKTsKCiAgICAgICAgaWYgKHN0YW5kYWxvbmUpCiAgICAgICAgewogICAgICAgICAgICAg ICAgaWYgKCFyZXN1bWUpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAg IGlmIChkaWN0YXR0YWNrKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZiAo IkNyYWNraW5nIERpY3Rpb25hcnkgZmlsZS4uLlxuIik7CiAgICAgICAgICAgICAgICB9CiAgICAg ICAgICAgICAgICBpZiAocmVzdW1lKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAg ICAgICAgICBpZiAocnVuZGljdGF0dGFjaykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBwcmludGYgKCJDb250aW51aW5nIENyYWNraW5nIERpY3Rpb25hcnkgZmlsZSBAICVzLi4uXG4i LCB0ZXN0cGFzcyk7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChydW5icnV0ZWZvcmNlKQog ICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg cHJpbnRmICgiQ29udGludWluZyBCcnV0ZSBGb3JjZS4uLlxuIik7CiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgcHJpbnRmICgiTnVtYmVyIG9mIENoYXJhY3RlcnMgaW4gdGVzdCBzdHJp bmc6ICVpXG4iLCBzdHJsZW4gKHRlc3RwYXNzKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgY291bnRlciA9IHN0cmxlbih0ZXN0cGFzcyktMTsKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBzdGFydGJydXRlZm9yY2UgPSAxOwogICAgICAgICAgICAgICAgICAgICAgICB9 CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBjcmFja2luZ2hhc3N0YXJ0ZWQg PSAxOwoKCiAgICAgICAgZG8KICAgICAgICB7CiAgICAgICAgICAgICAgICBjcmFja291dHN0cmlu Z1swXSA9ICdcMCc7CiAgICAgICAgICAgICAgICBnZW5vdXRzdHJpbmdbMF0gPSAnXDAnOwogICAg ICAgICAgICAgICAgcGFzc21hdGNoID0gMDsKCiAgICAgICAgICAgICAgICBpZiAocnVuZGljdGF0 dGFjaykKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgKF9fZXh0ZW5z aW9uX18gKF9fYnVpbHRpbl9jb25zdGFudF9wIChkY3Vyci0+dGVzdGR3b3JkKSA/ICgoKHNpemVf dCkoY29uc3Qgdm9pZCAqKSgoZGN1cnItPnRlc3Rkd29yZCkgKyAxKSAtIChzaXplX3QpKGNvbnN0 IHZvaWQgKikoZGN1cnItPnRlc3Rkd29yZCkgPT0gMSkgJiYgc3RybGVuIChkY3Vyci0+dGVzdGR3 b3JkKSArIDEgPD0gOCA/IF9fc3RyY3B5X3NtYWxsICh0ZXN0cGFzcywgX19leHRlbnNpb25fXyAo KChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoZGN1cnItPnRlc3Rk d29yZCkpWzAgKyAxXSA8PCA4IHwgKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3Qg Y2hhciAqKSAoZGN1cnItPnRlc3Rkd29yZCkpWzBdKSwgX19leHRlbnNpb25fXyAoKChfX2NvbnN0 IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoZGN1cnItPnRlc3Rkd29yZCkpWzQg KyAxXSA8PCA4IHwgKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAo ZGN1cnItPnRlc3Rkd29yZCkpWzRdKSwgX19leHRlbnNpb25fXyAoKCgoKF9fY29uc3QgdW5zaWdu ZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChkY3Vyci0+dGVzdGR3b3JkKSlbMCArIDNdIDw8 IDggfCAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChkY3Vyci0+ dGVzdGR3b3JkKSlbMCArIDJdKSA8PCA4IHwgKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9f Y29uc3QgY2hhciAqKSAoZGN1cnItPnRlc3Rkd29yZCkpWzAgKyAxXSkgPDwgOCB8ICgoX19jb25z dCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKGRjdXJyLT50ZXN0ZHdvcmQpKVsw XSksIF9fZXh0ZW5zaW9uX18gKCgoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3Qg Y2hhciAqKSAoZGN1cnItPnRlc3Rkd29yZCkpWzQgKyAzXSA8PCA4IHwgKChfX2NvbnN0IHVuc2ln bmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoZGN1cnItPnRlc3Rkd29yZCkpWzQgKyAyXSkg PDwgOCB8ICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKGRjdXJy LT50ZXN0ZHdvcmQpKVs0ICsgMV0pIDw8IDggfCAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAo X19jb25zdCBjaGFyICopIChkY3Vyci0+dGVzdGR3b3JkKSlbNF0pLCBzdHJsZW4gKGRjdXJyLT50 ZXN0ZHdvcmQpICsgMSkgOiAoY2hhciAqKSBtZW1jcHkgKHRlc3RwYXNzLCBkY3Vyci0+dGVzdGR3 b3JkLCBzdHJsZW4gKGRjdXJyLT50ZXN0ZHdvcmQpICsgMSkpIDogc3RyY3B5ICh0ZXN0cGFzcywg ZGN1cnItPnRlc3Rkd29yZCkpKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBp ZiAocnVuYnJ1dGVmb3JjZSB8fCBnZW5lcmF0ZSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAg ICAgICAgICAgICAgICAgaWYgKHN0YXJ0YnJ1dGVmb3JjZSkKICAgICAgICAgICAgICAgICAgICAg ICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bWUpCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGlmICh0ZXN0cGFzc1tjb3VudGVyXSAhPSAwKSB7IHRlc3RwYXNzW2NvdW50ZXJd LS07IH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdHJsZW4g KHRlc3RwYXNzKSAhPSAwKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBwcmludGYgKCJOdW1iZXIgb2YgQ2hhcmFjdGVycyBpbiB0ZXN0IHN0cmluZzogJWlc biIsIHN0cmxlbiAodGVzdHBhc3MpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9 CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Zm9yIChpPTA7IGk8MjU2OyBpKyspCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHRlc3RwYXNzW2ldID0gJ1wwJzsKCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjb3VudGVyID0gbWlubGVuZ3RoLTE7CiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBmb3IgKGw9Y291bnRlci0xOyBsPj0wOyBsLS0pCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHRlc3RwYXNzW2xdID0gZ2V0bmV4dHZhbGlkY2hhcih0ZXN0cGFzc1tsXSk7CiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydGJydXRlZm9yY2UgPSAw OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3dudW09MTsKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBwcmludGYgKCJTdGFydGluZyBCcnV0ZSBGb3JjZS4uLlxuIik7 CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChz dGFydGRpc3RyaWJ1dGVkKQogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgc3RhcnRkaXN0cmlidXRlZCA9IDA7CiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgY291bnRlciA9IG1pbmxlbmd0aC0xOwogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIChfX2V4dGVuc2lvbl9fIChfX2J1aWx0aW5fY29uc3RhbnRfcCAoZGlzdHJp Yl9wd2xpc3QuZGlzdHJpYnN0YXJ0KSA/ICgoKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgoZGlzdHJp Yl9wd2xpc3QuZGlzdHJpYnN0YXJ0KSArIDEpIC0gKHNpemVfdCkoY29uc3Qgdm9pZCAqKShkaXN0 cmliX3B3bGlzdC5kaXN0cmlic3RhcnQpID09IDEpICYmIHN0cmxlbiAoZGlzdHJpYl9wd2xpc3Qu ZGlzdHJpYnN0YXJ0KSArIDEgPD0gOCA/IF9fc3RyY3B5X3NtYWxsICh0ZXN0cGFzcywgX19leHRl bnNpb25fXyAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoZGlz dHJpYl9wd2xpc3QuZGlzdHJpYnN0YXJ0KSlbMCArIDFdIDw8IDggfCAoKF9fY29uc3QgdW5zaWdu ZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChkaXN0cmliX3B3bGlzdC5kaXN0cmlic3RhcnQp KVswXSksIF9fZXh0ZW5zaW9uX18gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0 IGNoYXIgKikgKGRpc3RyaWJfcHdsaXN0LmRpc3RyaWJzdGFydCkpWzQgKyAxXSA8PCA4IHwgKChf X2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoZGlzdHJpYl9wd2xpc3Qu ZGlzdHJpYnN0YXJ0KSlbNF0pLCBfX2V4dGVuc2lvbl9fICgoKCgoX19jb25zdCB1bnNpZ25lZCBj aGFyICopIChfX2NvbnN0IGNoYXIgKikgKGRpc3RyaWJfcHdsaXN0LmRpc3RyaWJzdGFydCkpWzAg KyAzXSA8PCA4IHwgKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAo ZGlzdHJpYl9wd2xpc3QuZGlzdHJpYnN0YXJ0KSlbMCArIDJdKSA8PCA4IHwgKChfX2NvbnN0IHVu c2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoZGlzdHJpYl9wd2xpc3QuZGlzdHJpYnN0 YXJ0KSlbMCArIDFdKSA8PCA4IHwgKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3Qg Y2hhciAqKSAoZGlzdHJpYl9wd2xpc3QuZGlzdHJpYnN0YXJ0KSlbMF0pLCBfX2V4dGVuc2lvbl9f ICgoKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKGRpc3RyaWJf cHdsaXN0LmRpc3RyaWJzdGFydCkpWzQgKyAzXSA8PCA4IHwgKChfX2NvbnN0IHVuc2lnbmVkIGNo YXIgKikgKF9fY29uc3QgY2hhciAqKSAoZGlzdHJpYl9wd2xpc3QuZGlzdHJpYnN0YXJ0KSlbNCAr IDJdKSA8PCA4IHwgKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAo ZGlzdHJpYl9wd2xpc3QuZGlzdHJpYnN0YXJ0KSlbNCArIDFdKSA8PCA4IHwgKChfX2NvbnN0IHVu c2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoZGlzdHJpYl9wd2xpc3QuZGlzdHJpYnN0 YXJ0KSlbNF0pLCBzdHJsZW4gKGRpc3RyaWJfcHdsaXN0LmRpc3RyaWJzdGFydCkgKyAxKSA6IChj aGFyICopIG1lbWNweSAodGVzdHBhc3MsIGRpc3RyaWJfcHdsaXN0LmRpc3RyaWJzdGFydCwgc3Ry bGVuIChkaXN0cmliX3B3bGlzdC5kaXN0cmlic3RhcnQpICsgMSkpIDogc3RyY3B5ICh0ZXN0cGFz cywgZGlzdHJpYl9wd2xpc3QuZGlzdHJpYnN0YXJ0KSkpOwogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHRlc3RwYXNzW2NvdW50ZXJdID0gJ1wwJzsKICAgICAgICAgICAgICAgICAgICAg ICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgdGVtcHVjaGFyID0gZ2V0bmV4dHZhbGlkY2hh cih0ZXN0cGFzc1tjb3VudGVyXSk7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ZW1wdWNo YXIgPT0gLTEpCiAgICAgICAgICAgICAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgaWYgKGNvdW50ZXIgPT0gMCkKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3NoaWZ0ID0g MTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RwYXNzWzBdID0g MDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RwYXNzWzBdID0g Z2V0bmV4dHZhbGlkY2hhcih0ZXN0cGFzc1swXSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBmb3IgKGs9Y291bnRlcjsgaz49MDsgay0tKQogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB0ZW1wdWNoYXIgPSBnZXRuZXh0dmFsaWRjaGFyKHRlc3RwYXNzW2tdKTsKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCh0ZW1wdWNoYXIg PT0gLTEpICYmIChrID09IDApKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgZG9zaGlmdCA9IDE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgdGVzdHBhc3Nba10gPSAwOwogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RwYXNzW2tdID0gZ2V0 bmV4dHZhbGlkY2hhciAodGVzdHBhc3Nba10pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGlmICh0ZW1wdWNoYXIgPT0gLTEpCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0cGFzc1trXSA9IDA7CiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdHBhc3Nb a10gPSBnZXRuZXh0dmFsaWRjaGFyICh0ZXN0cGFzc1trXSk7CiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdHBhc3Nba10gPSBnZXRuZXh0dmFsaWRjaGFy ICh0ZXN0cGFzc1trXSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGlmIChkb3NoaWZ0KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoaWZ0cmlnaHQgKHRlc3Rw YXNzKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50ZXIrKzsK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RwYXNzWzBdID0gMDsK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RwYXNzWzBdID0gZ2V0 bmV4dHZhbGlkY2hhciAodGVzdHBhc3NbMF0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgZG9zaGlmdCA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBzaG93bnVtPTE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAg ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0cGFzc1tjb3VudGVyXSA9IHRlbXB1Y2hhcjsK ICAgICAgICAgICAgICAgIH0KCgogICAgICAgICAgICAgICAgaWYgKChzaG93bnVtID09IDEpICYm ICh0ZXN0cGFzc1ttYXhsZW5ndGhdID09IDApKQogICAgICAgICAgICAgICAgewogICAgICAgICAg ICAgICAgICAgICAgICBwcmludGYgKCJOdW1iZXIgb2YgQ2hhcmFjdGVycyBpbiB0ZXN0IHN0cmlu ZzogJWlcbiIsIHN0cmxlbiAodGVzdHBhc3MpKTsKICAgICAgICAgICAgICAgICAgICAgICAgc2hv d251bT0wOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmIChhbnlhdHRhY2sp CiAgICAgICAgICAgICAgICB7CgogICAgICAgICAgICAgICAgICAgICAgICBjaGFyIGZpcnN0ID0g MTsKCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkaXN0cmlidXRlZCkKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBwY3VyciA9IChzdHJ1Y3Qgc3RvcmVwdyAqKWhfZGlzdHJpYl9w d2xpc3Q7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGFuZGFsb25lKQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHBjdXJyID0gKHN0cnVjdCBzdG9yZXB3ICopcGhlYWQ7CiAg ICAgICAgICAgICAgICAgICAgICAgIGRvCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmlyc3QpCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmly c3QgPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBwY3VyciA9IHBjdXJyLT5uZXh0OwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAoX19leHRlbnNpb25fXyAoX19idWlsdGluX2NvbnN0YW50X3AgKHBjdXJyLT5zdG9yZWRwd29y ZCkgPyAoKChzaXplX3QpKGNvbnN0IHZvaWQgKikoKHBjdXJyLT5zdG9yZWRwd29yZCkgKyAxKSAt IChzaXplX3QpKGNvbnN0IHZvaWQgKikocGN1cnItPnN0b3JlZHB3b3JkKSA9PSAxKSAmJiBzdHJs ZW4gKHBjdXJyLT5zdG9yZWRwd29yZCkgKyAxIDw9IDggPyBfX3N0cmNweV9zbWFsbCAob2xkLCBf X2V4dGVuc2lvbl9fICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICop IChwY3Vyci0+c3RvcmVkcHdvcmQpKVswICsgMV0gPDwgOCB8ICgoX19jb25zdCB1bnNpZ25lZCBj aGFyICopIChfX2NvbnN0IGNoYXIgKikgKHBjdXJyLT5zdG9yZWRwd29yZCkpWzBdKSwgX19leHRl bnNpb25fXyAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAocGN1 cnItPnN0b3JlZHB3b3JkKSlbNCArIDFdIDw8IDggfCAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAq KSAoX19jb25zdCBjaGFyICopIChwY3Vyci0+c3RvcmVkcHdvcmQpKVs0XSksIF9fZXh0ZW5zaW9u X18gKCgoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAocGN1cnIt PnN0b3JlZHB3b3JkKSlbMCArIDNdIDw8IDggfCAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAo X19jb25zdCBjaGFyICopIChwY3Vyci0+c3RvcmVkcHdvcmQpKVswICsgMl0pIDw8IDggfCAoKF9f Y29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChwY3Vyci0+c3RvcmVkcHdv cmQpKVswICsgMV0pIDw8IDggfCAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBj aGFyICopIChwY3Vyci0+c3RvcmVkcHdvcmQpKVswXSksIF9fZXh0ZW5zaW9uX18gKCgoKChfX2Nv bnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAocGN1cnItPnN0b3JlZHB3b3Jk KSlbNCArIDNdIDw8IDggfCAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFy ICopIChwY3Vyci0+c3RvcmVkcHdvcmQpKVs0ICsgMl0pIDw8IDggfCAoKF9fY29uc3QgdW5zaWdu ZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChwY3Vyci0+c3RvcmVkcHdvcmQpKVs0ICsgMV0p IDw8IDggfCAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChwY3Vy ci0+c3RvcmVkcHdvcmQpKVs0XSksIHN0cmxlbiAocGN1cnItPnN0b3JlZHB3b3JkKSArIDEpIDog KGNoYXIgKikgbWVtY3B5IChvbGQsIHBjdXJyLT5zdG9yZWRwd29yZCwgc3RybGVuIChwY3Vyci0+ c3RvcmVkcHdvcmQpICsgMSkpIDogc3RyY3B5IChvbGQsIHBjdXJyLT5zdG9yZWRwd29yZCkpKTsK CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5jcnlwdGVkX3B0ciA9IGNyeXB0ICh0 ZXN0cGFzcywgb2xkKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19leHRlbnNp b25fXyAoX19idWlsdGluX2NvbnN0YW50X3AgKGVuY3J5cHRlZF9wdHIpID8gKCgoc2l6ZV90KShj b25zdCB2b2lkICopKChlbmNyeXB0ZWRfcHRyKSArIDEpIC0gKHNpemVfdCkoY29uc3Qgdm9pZCAq KShlbmNyeXB0ZWRfcHRyKSA9PSAxKSAmJiBzdHJsZW4gKGVuY3J5cHRlZF9wdHIpICsgMSA8PSA4 ID8gX19zdHJjcHlfc21hbGwgKGVuYywgX19leHRlbnNpb25fXyAoKChfX2NvbnN0IHVuc2lnbmVk IGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoZW5jcnlwdGVkX3B0cikpWzAgKyAxXSA8PCA4IHwg KChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoZW5jcnlwdGVkX3B0 cikpWzBdKSwgX19leHRlbnNpb25fXyAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29u c3QgY2hhciAqKSAoZW5jcnlwdGVkX3B0cikpWzQgKyAxXSA8PCA4IHwgKChfX2NvbnN0IHVuc2ln bmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoZW5jcnlwdGVkX3B0cikpWzRdKSwgX19leHRl bnNpb25fXyAoKCgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChl bmNyeXB0ZWRfcHRyKSlbMCArIDNdIDw8IDggfCAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAo X19jb25zdCBjaGFyICopIChlbmNyeXB0ZWRfcHRyKSlbMCArIDJdKSA8PCA4IHwgKChfX2NvbnN0 IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoZW5jcnlwdGVkX3B0cikpWzAgKyAx XSkgPDwgOCB8ICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKGVu Y3J5cHRlZF9wdHIpKVswXSksIF9fZXh0ZW5zaW9uX18gKCgoKChfX2NvbnN0IHVuc2lnbmVkIGNo YXIgKikgKF9fY29uc3QgY2hhciAqKSAoZW5jcnlwdGVkX3B0cikpWzQgKyAzXSA8PCA4IHwgKChf X2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoZW5jcnlwdGVkX3B0cikp WzQgKyAyXSkgPDwgOCB8ICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIg KikgKGVuY3J5cHRlZF9wdHIpKVs0ICsgMV0pIDw8IDggfCAoKF9fY29uc3QgdW5zaWduZWQgY2hh ciAqKSAoX19jb25zdCBjaGFyICopIChlbmNyeXB0ZWRfcHRyKSlbNF0pLCBzdHJsZW4gKGVuY3J5 cHRlZF9wdHIpICsgMSkgOiAoY2hhciAqKSBtZW1jcHkgKGVuYywgZW5jcnlwdGVkX3B0ciwgc3Ry bGVuIChlbmNyeXB0ZWRfcHRyKSArIDEpKSA6IHN0cmNweSAoZW5jLCBlbmNyeXB0ZWRfcHRyKSkp OwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoX19leHRlbnNpb25fXyAoeyBz aXplX3QgX19zMV9sZW4sIF9fczJfbGVuOyAoX19idWlsdGluX2NvbnN0YW50X3AgKGVuY3J5cHRl ZF9wdHIpICYmIF9fYnVpbHRpbl9jb25zdGFudF9wIChvbGQpICYmIChfX3MxX2xlbiA9IHN0cmxl biAoZW5jcnlwdGVkX3B0ciksIF9fczJfbGVuID0gc3RybGVuIChvbGQpLCAoISgoc2l6ZV90KShj b25zdCB2b2lkICopKChlbmNyeXB0ZWRfcHRyKSArIDEpIC0gKHNpemVfdCkoY29uc3Qgdm9pZCAq KShlbmNyeXB0ZWRfcHRyKSA9PSAxKSB8fCBfX3MxX2xlbiA+PSA0KSAmJiAoISgoc2l6ZV90KShj b25zdCB2b2lkICopKChvbGQpICsgMSkgLSAoc2l6ZV90KShjb25zdCB2b2lkICopKG9sZCkgPT0g MSkgfHwgX19zMl9sZW4gPj0gNCkpID8gbWVtY21wICgoX19jb25zdCBjaGFyICopIChlbmNyeXB0 ZWRfcHRyKSwgKF9fY29uc3QgY2hhciAqKSAob2xkKSwgKF9fczFfbGVuIDwgX19zMl9sZW4gPyBf X3MxX2xlbiA6IF9fczJfbGVuKSArIDEpIDogKF9fYnVpbHRpbl9jb25zdGFudF9wIChlbmNyeXB0 ZWRfcHRyKSAmJiAoKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgoZW5jcnlwdGVkX3B0cikgKyAxKSAt IChzaXplX3QpKGNvbnN0IHZvaWQgKikoZW5jcnlwdGVkX3B0cikgPT0gMSkgJiYgKF9fczFfbGVu ID0gc3RybGVuIChlbmNyeXB0ZWRfcHRyKSwgX19zMV9sZW4gPCA0KSA/IChfX2J1aWx0aW5fY29u c3RhbnRfcCAob2xkKSAmJiAoKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgob2xkKSArIDEpIC0gKHNp emVfdCkoY29uc3Qgdm9pZCAqKShvbGQpID09IDEpID8gKF9fZXh0ZW5zaW9uX18gKHsgcmVnaXN0 ZXIgaW50IF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNo YXIgKikgKGVuY3J5cHRlZF9wdHIpKVswXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChf X2NvbnN0IGNoYXIgKikob2xkKSlbMF0pOyBpZiAoX19zMV9sZW4gPiAwICYmIF9fcmVzdWx0ID09 IDApIHsgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hh ciAqKSAoZW5jcnlwdGVkX3B0cikpWzFdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9f Y29uc3QgY2hhciAqKSAob2xkKSlbMV0pOyBpZiAoX19zMV9sZW4gPiAxICYmIF9fcmVzdWx0ID09 IDApIHsgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hh ciAqKSAoZW5jcnlwdGVkX3B0cikpWzJdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9f Y29uc3QgY2hhciAqKSAob2xkKSlbMl0pOyBpZiAoX19zMV9sZW4gPiAyICYmIF9fcmVzdWx0ID09 IDApIF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIg KikgKGVuY3J5cHRlZF9wdHIpKVszXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2Nv bnN0IGNoYXIgKikgKG9sZCkpWzNdKTsgfSB9IF9fcmVzdWx0OyB9KSkgOiAoX19leHRlbnNpb25f XyAoeyBfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKl9fczIgPSAoX19jb25zdCB1bnNpZ25lZCBjaGFy ICopIChfX2NvbnN0IGNoYXIgKikgKG9sZCk7IHJlZ2lzdGVyIGludCBfX3Jlc3VsdCA9ICgoKF9f Y29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChlbmNyeXB0ZWRfcHRyKSlb MF0gLSBfX3MyWzBdKTsgaWYgKF9fczFfbGVuID4gMCAmJiBfX3Jlc3VsdCA9PSAwKSB7IF9fcmVz dWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKGVuY3J5 cHRlZF9wdHIpKVsxXSAtIF9fczJbMV0pOyBpZiAoX19zMV9sZW4gPiAxICYmIF9fcmVzdWx0ID09 IDApIHsgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hh ciAqKSAoZW5jcnlwdGVkX3B0cikpWzJdIC0gX19zMlsyXSk7IGlmIChfX3MxX2xlbiA+IDIgJiYg X19yZXN1bHQgPT0gMCkgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9f Y29uc3QgY2hhciAqKSAoZW5jcnlwdGVkX3B0cikpWzNdIC0gX19zMlszXSk7IH0gfSBfX3Jlc3Vs dDsgfSkpKSA6IChfX2J1aWx0aW5fY29uc3RhbnRfcCAob2xkKSAmJiAoKHNpemVfdCkoY29uc3Qg dm9pZCAqKSgob2xkKSArIDEpIC0gKHNpemVfdCkoY29uc3Qgdm9pZCAqKShvbGQpID09IDEpICYm IChfX3MyX2xlbiA9IHN0cmxlbiAob2xkKSwgX19zMl9sZW4gPCA0KSA/IChfX2J1aWx0aW5fY29u c3RhbnRfcCAoZW5jcnlwdGVkX3B0cikgJiYgKChzaXplX3QpKGNvbnN0IHZvaWQgKikoKGVuY3J5 cHRlZF9wdHIpICsgMSkgLSAoc2l6ZV90KShjb25zdCB2b2lkICopKGVuY3J5cHRlZF9wdHIpID09 IDEpID8gKF9fZXh0ZW5zaW9uX18gKHsgcmVnaXN0ZXIgaW50IF9fcmVzdWx0ID0gKCgoX19jb25z dCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKGVuY3J5cHRlZF9wdHIpKVswXSAt ICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikob2xkKSlbMF0pOyBp ZiAoX19zMl9sZW4gPiAwICYmIF9fcmVzdWx0ID09IDApIHsgX19yZXN1bHQgPSAoKChfX2NvbnN0 IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoZW5jcnlwdGVkX3B0cikpWzFdIC0g KChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAob2xkKSlbMV0pOyBp ZiAoX19zMl9sZW4gPiAxICYmIF9fcmVzdWx0ID09IDApIHsgX19yZXN1bHQgPSAoKChfX2NvbnN0 IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoZW5jcnlwdGVkX3B0cikpWzJdIC0g KChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAob2xkKSlbMl0pOyBp ZiAoX19zMl9sZW4gPiAyICYmIF9fcmVzdWx0ID09IDApIF9fcmVzdWx0ID0gKCgoX19jb25zdCB1 bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKGVuY3J5cHRlZF9wdHIpKVszXSAtICgo X19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKG9sZCkpWzNdKTsgfSB9 IF9fcmVzdWx0OyB9KSkgOiAoX19leHRlbnNpb25fXyAoeyBfX2NvbnN0IHVuc2lnbmVkIGNoYXIg Kl9fczEgPSAoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKGVuY3J5 cHRlZF9wdHIpOyByZWdpc3RlciBpbnQgX19yZXN1bHQgPSBfX3MxWzBdIC0gKChfX2NvbnN0IHVu c2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAob2xkKSlbMF07IGlmIChfX3MyX2xlbiA+ IDAgJiYgX19yZXN1bHQgPT0gMCkgeyBfX3Jlc3VsdCA9IChfX3MxWzFdIC0gKChfX2NvbnN0IHVu c2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAob2xkKSlbMV0pOyBpZiAoX19zMl9sZW4g PiAxICYmIF9fcmVzdWx0ID09IDApIHsgX19yZXN1bHQgPSAoX19zMVsyXSAtICgoX19jb25zdCB1 bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKG9sZCkpWzJdKTsgaWYgKF9fczJfbGVu ID4gMiAmJiBfX3Jlc3VsdCA9PSAwKSBfX3Jlc3VsdCA9IChfX3MxWzNdIC0gKChfX2NvbnN0IHVu c2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAob2xkKSlbM10pOyB9IH0gX19yZXN1bHQ7 IH0pKSkgOiBzdHJjbXAgKGVuY3J5cHRlZF9wdHIsIG9sZCkpKSk7IH0pID09IDApCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgcGFzc21hdGNoKys7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAoX19leHRlbnNpb25fXyAoX19idWlsdGluX2NvbnN0YW50X3AgKHRlc3RwYXNzKSA/ICgo KHNpemVfdCkoY29uc3Qgdm9pZCAqKSgodGVzdHBhc3MpICsgMSkgLSAoc2l6ZV90KShjb25zdCB2 b2lkICopKHRlc3RwYXNzKSA9PSAxKSAmJiBzdHJsZW4gKHRlc3RwYXNzKSArIDEgPD0gOCA/IF9f c3RyY3B5X3NtYWxsIChwY3Vyci0+Y3JhY2tlZHB3b3JkLCBfX2V4dGVuc2lvbl9fICgoKF9fY29u c3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopICh0ZXN0cGFzcykpWzAgKyAxXSA8 PCA4IHwgKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAodGVzdHBh c3MpKVswXSksIF9fZXh0ZW5zaW9uX18gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2Nv bnN0IGNoYXIgKikgKHRlc3RwYXNzKSlbNCArIDFdIDw8IDggfCAoKF9fY29uc3QgdW5zaWduZWQg Y2hhciAqKSAoX19jb25zdCBjaGFyICopICh0ZXN0cGFzcykpWzRdKSwgX19leHRlbnNpb25fXyAo KCgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopICh0ZXN0cGFzcykp WzAgKyAzXSA8PCA4IHwgKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAq KSAodGVzdHBhc3MpKVswICsgMl0pIDw8IDggfCAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAo X19jb25zdCBjaGFyICopICh0ZXN0cGFzcykpWzAgKyAxXSkgPDwgOCB8ICgoX19jb25zdCB1bnNp Z25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKHRlc3RwYXNzKSlbMF0pLCBfX2V4dGVuc2lv bl9fICgoKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKHRlc3Rw YXNzKSlbNCArIDNdIDw8IDggfCAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBj aGFyICopICh0ZXN0cGFzcykpWzQgKyAyXSkgPDwgOCB8ICgoX19jb25zdCB1bnNpZ25lZCBjaGFy ICopIChfX2NvbnN0IGNoYXIgKikgKHRlc3RwYXNzKSlbNCArIDFdKSA8PCA4IHwgKChfX2NvbnN0 IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAodGVzdHBhc3MpKVs0XSksIHN0cmxl biAodGVzdHBhc3MpICsgMSkgOiAoY2hhciAqKSBtZW1jcHkgKHBjdXJyLT5jcmFja2VkcHdvcmQs IHRlc3RwYXNzLCBzdHJsZW4gKHRlc3RwYXNzKSArIDEpKSA6IHN0cmNweSAocGN1cnItPmNyYWNr ZWRwd29yZCwgdGVzdHBhc3MpKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBpZiAocGFzc21hdGNoID09IDEpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIChfX2V4dGVuc2lvbl9fIChfX2J1aWx0aW5fY29uc3RhbnRfcCAoZW5j KSA/ICgoKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgoZW5jKSArIDEpIC0gKHNpemVfdCkoY29uc3Qg dm9pZCAqKShlbmMpID09IDEpICYmIHN0cmxlbiAoZW5jKSArIDEgPD0gOCA/IF9fc3RyY3B5X3Nt YWxsIChzaW5nbGVlbmMsIF9fZXh0ZW5zaW9uX18gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICop IChfX2NvbnN0IGNoYXIgKikgKGVuYykpWzAgKyAxXSA8PCA4IHwgKChfX2NvbnN0IHVuc2lnbmVk IGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoZW5jKSlbMF0pLCBfX2V4dGVuc2lvbl9fICgoKF9f Y29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChlbmMpKVs0ICsgMV0gPDwg OCB8ICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKGVuYykpWzRd KSwgX19leHRlbnNpb25fXyAoKCgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBj aGFyICopIChlbmMpKVswICsgM10gPDwgOCB8ICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChf X2NvbnN0IGNoYXIgKikgKGVuYykpWzAgKyAyXSkgPDwgOCB8ICgoX19jb25zdCB1bnNpZ25lZCBj aGFyICopIChfX2NvbnN0IGNoYXIgKikgKGVuYykpWzAgKyAxXSkgPDwgOCB8ICgoX19jb25zdCB1 bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKGVuYykpWzBdKSwgX19leHRlbnNpb25f XyAoKCgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChlbmMpKVs0 ICsgM10gPDwgOCB8ICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikg KGVuYykpWzQgKyAyXSkgPDwgOCB8ICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0 IGNoYXIgKikgKGVuYykpWzQgKyAxXSkgPDwgOCB8ICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICop IChfX2NvbnN0IGNoYXIgKikgKGVuYykpWzRdKSwgc3RybGVuIChlbmMpICsgMSkgOiAoY2hhciAq KSBtZW1jcHkgKHNpbmdsZWVuYywgZW5jLCBzdHJsZW4gKGVuYykgKyAxKSkgOiBzdHJjcHkgKHNp bmdsZWVuYywgZW5jKSkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg aWYgKHN0YW5kYWxvbmUpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGFsbGNyYWNrZWQgPSBjaGVja2ZvcmFsbGNyYWNrZWQoKTsKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgYWxsY3JhY2tlZCA9IDE7CiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9d2hpbGUgKHBjdXJyLT5uZXh0 ICE9ICgodm9pZCAqKTApKTsKCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkaXN0cmlidXRl ZCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwY3VyciA9IChzdHJ1Y3Qgc3RvcmVw dyAqKWhfZGlzdHJpYl9wd2xpc3Q7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGFuZGFs b25lKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBjdXJyID0gKHN0cnVjdCBzdG9y ZXB3ICopcGhlYWQ7CiAgICAgICAgICAgICAgICB9CgoKICAgICAgICAgICAgICAgICAgcHJpbnRm KCIlc1xuIiwgdGVzdHBhc3MpOwoKCiAgICAgICAgICAgICAgICBpZiAoZ2VuZXJhdGUpCiAgICAg ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmNhdCAoZ2Vub3V0c3RyaW5n LCB0ZXN0cGFzcyk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKHBhc3Nt YXRjaCAhPSAwKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAo c3RhbmRhbG9uZSkKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGlmIChwYXNzbWF0Y2ggPT0gMSkKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJjYXQg KGNyYWNrb3V0c3RyaW5nLCB0ZXN0cGFzcyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBzdHJjYXQgKGNyYWNrb3V0c3RyaW5nLCAiOiIpOwogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgc3RyY2F0IChjcmFja291dHN0cmluZywgc2luZ2xlZW5j KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmNhdCAoY3JhY2tv dXRzdHJpbmcsICJcbiIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhc3NtYXRjaCA+IDEpCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgaW50IGZpcnN0ID0gMTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHBjdXJyID0gKHN0cnVjdCBzdG9yZXB3ICopcGhlYWQ7CiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBkbwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp ZiAoZmlyc3QgPT0gMSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGZpcnN0ID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgcGN1cnIgPSBwY3Vyci0+bmV4dDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgaWYgKHBjdXJyLT5jcmFja2VkcHdvcmRbMF0gIT0gJ1wwJykKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmNhdCAoY3Jh Y2tvdXRzdHJpbmcsIHBjdXJyLT5jcmFja2VkcHdvcmQpOwogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmNhdCAoY3JhY2tvdXRzdHJpbmcs ICI6Iik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgc3RyY2F0IChjcmFja291dHN0cmluZywgcGN1cnItPnN0b3JlZHB3b3JkKTsKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJjYXQg KGNyYWNrb3V0c3RyaW5nLCAiXG4iKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg fXdoaWxlIChwY3Vyci0+bmV4dCAhPSAoKHZvaWQgKikwKSk7CiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBwY3VyciA9IChzdHJ1Y3Qgc3RvcmVwdyAqKXBoZWFkOwogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQoK ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRpc3RyaWJ1dGVkKQogICAgICAgICAgICAgICAg ICAgICAgICB7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyYWNrb3V0c3RyaW5n WzBdID0gJ2MnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyYWNrb3V0c3RyaW5n WzBdID0gJzonOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmNhdCAoY3JhY2tv dXRzdHJpbmcsIHRlc3RwYXNzKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJj YXQgKGNyYWNrb3V0c3RyaW5nLCAiOiIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHN0cmNhdCAoY3JhY2tvdXRzdHJpbmcsIHNpbmdsZWVuYyk7CiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgc3RyY2F0IChjcmFja291dHN0cmluZywgIlwwIik7CiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgc2VuZCAoY2xpZW50U29jaywgY3JhY2tvdXRzdHJpbmcsIHN0cmxl bihjcmFja291dHN0cmluZyksIDApOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg ICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKHN0YW5kYWxvbmUpCiAgICAgICAgICAgICAg ICB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChnZW5lcmF0ZSkKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBzdHJjYXQgKGdlbm91dHN0cmluZywgIlxuIik7CgogICAgICAgICAg ICAgICAgICAgICAgICBpZiAod3JpdGVnZW50b2ZpbGUpCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZndyaXRl IChnZW5vdXRzdHJpbmcsIHN0cmxlbiAoZ2Vub3V0c3RyaW5nKSwgMSwgd3JpdGVnZW4pOwogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIGlm IChsb2djcmFja2VkdG9maWxlKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ3cml0ZSAoY3JhY2tvdXRzdHJp bmcsIHN0cmxlbiAoY3JhY2tvdXRzdHJpbmcpLCAxLCB3cml0ZWNyYWNrZWQpOwogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmZsdXNoKHdyaXRlY3JhY2tlZCk7CiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBpZiAo cHJpbnRnZW50b3NjcmVlbikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYg KCIlcyIsIGdlbm91dHN0cmluZyk7CgogICAgICAgICAgICAgICAgICAgICAgICBpZiAobG9nY3Jh Y2tlZHRvc2NyZWVuKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZiAoIiVz IiwgY3JhY2tvdXRzdHJpbmcpOwogICAgICAgICAgICAgICAgfQoKCiAgICAgICAgICAgICAgICBp ZiAocnVuZGljdGF0dGFjaykKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAg ICAgaWYgKGRjdXJyLT5uZXh0ICE9ICgodm9pZCAqKTApKQogICAgICAgICAgICAgICAgICAgICAg ICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGN1cnIgPSBkY3Vyci0+bmV4dDsK ICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBlbHNlCiAg ICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBk aWN0ZXh0aW5ndWlzaGVkID0gMTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo YnJ1dGVmb3JjZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBydW5kaWN0YXR0YWNrID0gMDsKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bmJydXRlZm9yY2UgPSAxOwogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRicnV0ZWZvcmNlID0gMTsKCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGk9MDsgaTwyNTY7IGkr KykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdHBh c3NbaV0gPSAnXDAnOwojIDQyOCAiQnJlYWtEb3duLmMiCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9Cgog ICAgICAgICAgICAgICAgaWYgKHN0YW5kYWxvbmUpCiAgICAgICAgICAgICAgICB7CiAgICAgICAg ICAgICAgICAgICAgICAgIGlmICghcnVuZGljdGF0dGFjayAmJiB0ZXN0cGFzc1ttYXhsZW5ndGhd ICE9IDApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWVsb29wID0gMDsK ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRpY3RhdHRhY2sgJiYgIWJydXRlZm9yY2UpCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgaWYgKGRpY3RleHRpbmd1aXNoZWQpCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlbG9vcCA9IDA7CiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoYnJ1dGVm b3JjZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYWxsY3JhY2tlZCkKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlbG9vcCA9IDA7CiAg ICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKGRpc3RyaWJ1dGVkKQogICAgICAg ICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIChfX2V4dGVuc2lvbl9fICh7 IHNpemVfdCBfX3MxX2xlbiwgX19zMl9sZW47IChfX2J1aWx0aW5fY29uc3RhbnRfcCAodGVzdHBh c3MpICYmIF9fYnVpbHRpbl9jb25zdGFudF9wIChkaXN0cmliX3B3bGlzdC5kaXN0cmliZW5kKSAm JiAoX19zMV9sZW4gPSBzdHJsZW4gKHRlc3RwYXNzKSwgX19zMl9sZW4gPSBzdHJsZW4gKGRpc3Ry aWJfcHdsaXN0LmRpc3RyaWJlbmQpLCAoISgoc2l6ZV90KShjb25zdCB2b2lkICopKCh0ZXN0cGFz cykgKyAxKSAtIChzaXplX3QpKGNvbnN0IHZvaWQgKikodGVzdHBhc3MpID09IDEpIHx8IF9fczFf bGVuID49IDQpICYmICghKChzaXplX3QpKGNvbnN0IHZvaWQgKikoKGRpc3RyaWJfcHdsaXN0LmRp c3RyaWJlbmQpICsgMSkgLSAoc2l6ZV90KShjb25zdCB2b2lkICopKGRpc3RyaWJfcHdsaXN0LmRp c3RyaWJlbmQpID09IDEpIHx8IF9fczJfbGVuID49IDQpKSA/IG1lbWNtcCAoKF9fY29uc3QgY2hh ciAqKSAodGVzdHBhc3MpLCAoX19jb25zdCBjaGFyICopIChkaXN0cmliX3B3bGlzdC5kaXN0cmli ZW5kKSwgKF9fczFfbGVuIDwgX19zMl9sZW4gPyBfX3MxX2xlbiA6IF9fczJfbGVuKSArIDEpIDog KF9fYnVpbHRpbl9jb25zdGFudF9wICh0ZXN0cGFzcykgJiYgKChzaXplX3QpKGNvbnN0IHZvaWQg KikoKHRlc3RwYXNzKSArIDEpIC0gKHNpemVfdCkoY29uc3Qgdm9pZCAqKSh0ZXN0cGFzcykgPT0g MSkgJiYgKF9fczFfbGVuID0gc3RybGVuICh0ZXN0cGFzcyksIF9fczFfbGVuIDwgNCkgPyAoX19i dWlsdGluX2NvbnN0YW50X3AgKGRpc3RyaWJfcHdsaXN0LmRpc3RyaWJlbmQpICYmICgoc2l6ZV90 KShjb25zdCB2b2lkICopKChkaXN0cmliX3B3bGlzdC5kaXN0cmliZW5kKSArIDEpIC0gKHNpemVf dCkoY29uc3Qgdm9pZCAqKShkaXN0cmliX3B3bGlzdC5kaXN0cmliZW5kKSA9PSAxKSA/IChfX2V4 dGVuc2lvbl9fICh7IHJlZ2lzdGVyIGludCBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQg Y2hhciAqKSAoX19jb25zdCBjaGFyICopICh0ZXN0cGFzcykpWzBdIC0gKChfX2NvbnN0IHVuc2ln bmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKShkaXN0cmliX3B3bGlzdC5kaXN0cmliZW5kKSlb MF0pOyBpZiAoX19zMV9sZW4gPiAwICYmIF9fcmVzdWx0ID09IDApIHsgX19yZXN1bHQgPSAoKChf X2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAodGVzdHBhc3MpKVsxXSAt ICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKGRpc3RyaWJfcHds aXN0LmRpc3RyaWJlbmQpKVsxXSk7IGlmIChfX3MxX2xlbiA+IDEgJiYgX19yZXN1bHQgPT0gMCkg eyBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICop ICh0ZXN0cGFzcykpWzJdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hh ciAqKSAoZGlzdHJpYl9wd2xpc3QuZGlzdHJpYmVuZCkpWzJdKTsgaWYgKF9fczFfbGVuID4gMiAm JiBfX3Jlc3VsdCA9PSAwKSBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAo X19jb25zdCBjaGFyICopICh0ZXN0cGFzcykpWzNdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIg KikgKF9fY29uc3QgY2hhciAqKSAoZGlzdHJpYl9wd2xpc3QuZGlzdHJpYmVuZCkpWzNdKTsgfSB9 IF9fcmVzdWx0OyB9KSkgOiAoX19leHRlbnNpb25fXyAoeyBfX2NvbnN0IHVuc2lnbmVkIGNoYXIg Kl9fczIgPSAoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKGRpc3Ry aWJfcHdsaXN0LmRpc3RyaWJlbmQpOyByZWdpc3RlciBpbnQgX19yZXN1bHQgPSAoKChfX2NvbnN0 IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAodGVzdHBhc3MpKVswXSAtIF9fczJb MF0pOyBpZiAoX19zMV9sZW4gPiAwICYmIF9fcmVzdWx0ID09IDApIHsgX19yZXN1bHQgPSAoKChf X2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAodGVzdHBhc3MpKVsxXSAt IF9fczJbMV0pOyBpZiAoX19zMV9sZW4gPiAxICYmIF9fcmVzdWx0ID09IDApIHsgX19yZXN1bHQg PSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAodGVzdHBhc3Mp KVsyXSAtIF9fczJbMl0pOyBpZiAoX19zMV9sZW4gPiAyICYmIF9fcmVzdWx0ID09IDApIF9fcmVz dWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKHRlc3Rw YXNzKSlbM10gLSBfX3MyWzNdKTsgfSB9IF9fcmVzdWx0OyB9KSkpIDogKF9fYnVpbHRpbl9jb25z dGFudF9wIChkaXN0cmliX3B3bGlzdC5kaXN0cmliZW5kKSAmJiAoKHNpemVfdCkoY29uc3Qgdm9p ZCAqKSgoZGlzdHJpYl9wd2xpc3QuZGlzdHJpYmVuZCkgKyAxKSAtIChzaXplX3QpKGNvbnN0IHZv aWQgKikoZGlzdHJpYl9wd2xpc3QuZGlzdHJpYmVuZCkgPT0gMSkgJiYgKF9fczJfbGVuID0gc3Ry bGVuIChkaXN0cmliX3B3bGlzdC5kaXN0cmliZW5kKSwgX19zMl9sZW4gPCA0KSA/IChfX2J1aWx0 aW5fY29uc3RhbnRfcCAodGVzdHBhc3MpICYmICgoc2l6ZV90KShjb25zdCB2b2lkICopKCh0ZXN0 cGFzcykgKyAxKSAtIChzaXplX3QpKGNvbnN0IHZvaWQgKikodGVzdHBhc3MpID09IDEpID8gKF9f ZXh0ZW5zaW9uX18gKHsgcmVnaXN0ZXIgaW50IF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25l ZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKHRlc3RwYXNzKSlbMF0gLSAoKF9fY29uc3QgdW5z aWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopKGRpc3RyaWJfcHdsaXN0LmRpc3RyaWJlbmQp KVswXSk7IGlmIChfX3MyX2xlbiA+IDAgJiYgX19yZXN1bHQgPT0gMCkgeyBfX3Jlc3VsdCA9ICgo KF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopICh0ZXN0cGFzcykpWzFd IC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoZGlzdHJpYl9w d2xpc3QuZGlzdHJpYmVuZCkpWzFdKTsgaWYgKF9fczJfbGVuID4gMSAmJiBfX3Jlc3VsdCA9PSAw KSB7IF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIg KikgKHRlc3RwYXNzKSlbMl0gLSAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBj aGFyICopIChkaXN0cmliX3B3bGlzdC5kaXN0cmliZW5kKSlbMl0pOyBpZiAoX19zMl9sZW4gPiAy ICYmIF9fcmVzdWx0ID09IDApIF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICop IChfX2NvbnN0IGNoYXIgKikgKHRlc3RwYXNzKSlbM10gLSAoKF9fY29uc3QgdW5zaWduZWQgY2hh ciAqKSAoX19jb25zdCBjaGFyICopIChkaXN0cmliX3B3bGlzdC5kaXN0cmliZW5kKSlbM10pOyB9 IH0gX19yZXN1bHQ7IH0pKSA6IChfX2V4dGVuc2lvbl9fICh7IF9fY29uc3QgdW5zaWduZWQgY2hh ciAqX19zMSA9IChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAodGVz dHBhc3MpOyByZWdpc3RlciBpbnQgX19yZXN1bHQgPSBfX3MxWzBdIC0gKChfX2NvbnN0IHVuc2ln bmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoZGlzdHJpYl9wd2xpc3QuZGlzdHJpYmVuZCkp WzBdOyBpZiAoX19zMl9sZW4gPiAwICYmIF9fcmVzdWx0ID09IDApIHsgX19yZXN1bHQgPSAoX19z MVsxXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKGRpc3Ry aWJfcHdsaXN0LmRpc3RyaWJlbmQpKVsxXSk7IGlmIChfX3MyX2xlbiA+IDEgJiYgX19yZXN1bHQg PT0gMCkgeyBfX3Jlc3VsdCA9IChfX3MxWzJdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikg KF9fY29uc3QgY2hhciAqKSAoZGlzdHJpYl9wd2xpc3QuZGlzdHJpYmVuZCkpWzJdKTsgaWYgKF9f czJfbGVuID4gMiAmJiBfX3Jlc3VsdCA9PSAwKSBfX3Jlc3VsdCA9IChfX3MxWzNdIC0gKChfX2Nv bnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoZGlzdHJpYl9wd2xpc3QuZGlz dHJpYmVuZCkpWzNdKTsgfSB9IF9fcmVzdWx0OyB9KSkpIDogc3RyY21wICh0ZXN0cGFzcywgZGlz dHJpYl9wd2xpc3QuZGlzdHJpYmVuZCkpKSk7IH0pID09IDApIHx8IChhbGxjcmFja2VkKSApCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWVsb29wID0gMDsKICAgICAgICAg ICAgICAgIH0KCiAgICAgICAgfXdoaWxlIChjb250aW51ZWxvb3ApOwoKICAgICAgICBpZiAod3Jp dGVhbnl0b2ZpbGUpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlm IChsb2djcmFja2VkdG9maWxlKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZjbG9zZSAod3JpdGVjcmFja2Vk KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAg ICAgICBpZiAod3JpdGVnZW50b2ZpbGUpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmNsb3NlICh3cml0ZWdl bik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoK ICAgICAgICBpZiAoYW55YXR0YWNrKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAg ICAgICAgICBpZiAoZGlzdHJpYnV0ZWQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg cGN1cnIgPSAoc3RydWN0IHN0b3JlcHcgKiloX2Rpc3RyaWJfcHdsaXN0OwogICAgICAgICAgICAg ICAgICAgICAgICBpZiAoc3RhbmRhbG9uZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBwY3VyciA9IChzdHJ1Y3Qgc3RvcmVwdyAqKXBoZWFkOwogICAgICAgICAgICAgICAgICAgICAg ICB3aGlsZSAocGN1cnItPm5leHQgIT0gKCh2b2lkICopMCkpCiAgICAgICAgICAgICAgICAgICAg ICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwY3VyciA9IHBjdXJyLT5uZXh0 OwogICAgICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgICAgICAgICB3aGls ZSAocGN1cnIgIT0gcGhlYWQpCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBwdGVtcCA9IHBjdXJyOwogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHBjdXJyID0gcGN1cnItPnByZXY7CiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgZnJlZSAocHRlbXApOwogICAgICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAg ICAgICAgfQoKICAgICAgICBpZiAoZGljdGF0dGFjaykKICAgICAgICAgICAgICAgIHsKICAgICAg ICAgICAgICAgICAgICAgICAgZGN1cnIgPSAoc3RydWN0IHN0b3JlZHcgKilkaGVhZDsKICAgICAg ICAgICAgICAgICAgICAgICAgd2hpbGUgKGRjdXJyLT5uZXh0ICE9ICgodm9pZCAqKTApKQogICAg ICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGN1 cnIgPSBkY3Vyci0+bmV4dDsKICAgICAgICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAg ICAgICAgICAgICAgd2hpbGUgKGRjdXJyICE9IGRoZWFkKQogICAgICAgICAgICAgICAgICAgICAg ICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHRlbXAgPSBkY3VycjsKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBkY3VyciA9IGRjdXJyLT5wcmV2OwogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGZyZWUgKGR0ZW1wKTsKICAgICAgICAgICAgICAgICAgICAg ICAgfTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgcHJpbnRmICgiXG5Eb25lIVxuIik7Cgog ICAgICAgIHJldHVybiAwOwp9CgppbnQgY2hlY2tmb3JhbGxjcmFja2VkKCkKewogICAgICAgIHN0 b3JlcHdfdCAqbG9jYWxwY3VyciA9IChzdHJ1Y3Qgc3RvcmVwdyAqKXBoZWFkOwogICAgICAgIGlu dCByZXRudW0gPSAwOwoKICAgICAgICBkbwogICAgICAgIHsKICAgICAgICAgICAgICAgIGlmIChs b2NhbHBjdXJyLT5jcmFja2VkcHdvcmRbMF0gPT0gJ1wwJykKICAgICAgICAgICAgICAgICAgICAg ICAgYnJlYWs7CiAgICAgICAgICAgICAgICBpZiAobG9jYWxwY3Vyci0+bmV4dCAhPSAoKHZvaWQg KikwKSkKICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxwY3VyciA9IGxvY2FscGN1cnItPm5l eHQ7CiAgICAgICAgfXdoaWxlIChsb2NhbHBjdXJyLT5uZXh0ICE9ICgodm9pZCAqKTApKTsKICAg ICAgICBpZiAoKGxvY2FscGN1cnItPm5leHQgPT0gKCh2b2lkICopMCkpICYmIChsb2NhbHBjdXJy LT5jcmFja2VkcHdvcmRbMF0gIT0gJ1wwJykpCiAgICAgICAgICAgICAgICByZXRudW0gPSAxOwog ICAgICAgIHJldHVybiByZXRudW07Cn0KCnZvaWQgcGFyc2Vwd29yZHMgKGNoYXIgaW5wZmlsZVsy NTddKQp7CiAgICAgICAgY2hhciBjaG9pY2VbMl07CiAgICAgICAgY2hhciBidWZmZXJbMjU2XTsK ICAgICAgICBjaGFyIGlucHV0Y2hhclsxXTsKICAgICAgICBjaGFyIHVzZXJuYW1lWzI1Nl07Cgog ICAgICAgIEZJTEUgKnJlYWQ7CiAgICAgICAgaW50IGNvdW50ZXI9MDsKICAgICAgICBpbnQgY29s b25jb3VudGVyID0gMDsKCiAgICAgICAgaWYgKGdldGN1c3RvbWZpbGUpCiAgICAgICAgICAgICAg ICB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJlYWQgPSBmb3BlbiAoaW5wZmlsZSwgInIiKTsK CiAgICAgICAgICAgICAgICAgICAgICAgIHBzdGFydG92ZXI6CiAgICAgICAgICAgICAgICAgICAg ICAgIGZyZWFkIChpbnB1dGNoYXIsIDEsIDEsIHJlYWQpOwogICAgICAgICAgICAgICAgICAgICAg ICBpZiAoZmVvZihyZWFkKSAhPSAwKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdv dG8gcGVuZDsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlucHV0Y2hhclswXSA9PSAnIycp CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgZG8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJl YWQgKGlucHV0Y2hhciwgMSwgMSwgcmVhZCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGlmIChmZW9mKHJlYWQpICE9IDApCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRjaGFyWzBdID0gMTM7 CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9d2hpbGUgKChpbnB1dGNo YXJbMF0gIT0gMTMpICYmIChpbnB1dGNoYXJbMF0gIT0gMTApKTsKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGdvdG8gcHN0YXJ0b3ZlcjsKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChmZW9mKHJlYWQp ID09IDApCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBidWZmZXJbY291bnRlcl0gPSBpbnB1dGNoYXJbMF07CiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgY291bnRlcisrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGZyZWFkIChpbnB1dGNoYXIsIDEsIDEsIHJlYWQpOwogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGlmIChpbnB1dGNoYXJbMF0gPT0gJyMnKQogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBkbwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgZnJlYWQgKGlucHV0Y2hhciwgMSwgMSwgcmVhZCk7CiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZlb2YocmVhZCkgIT0gMCkKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGlucHV0Y2hhclswXSA9IDEzOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB9d2hpbGUgKChpbnB1dGNoYXJbMF0gIT0gMTMpICYmIChpbnB1dGNoYXJb MF0gIT0gMTApKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGlucHV0Y2hhclswXSA9PSAxMykgfHwg KGlucHV0Y2hhclswXSA9PSAxMCkgfHwgZmVvZihyZWFkKSAhPSAwKQogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBidWZmZXJbY291bnRlcl0gPSAnXDAnOwogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXVzZWRzdGF0aWNwYWRkcmVzcykK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7 CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAoX19leHRlbnNpb25fXyAoX19idWlsdGluX2NvbnN0YW50X3AgKGJ1ZmZlcikgPyAo KChzaXplX3QpKGNvbnN0IHZvaWQgKikoKGJ1ZmZlcikgKyAxKSAtIChzaXplX3QpKGNvbnN0IHZv aWQgKikoYnVmZmVyKSA9PSAxKSAmJiBzdHJsZW4gKGJ1ZmZlcikgKyAxIDw9IDggPyBfX3N0cmNw eV9zbWFsbCAocGN1cnItPnN0b3JlZHB3b3JkLCBfX2V4dGVuc2lvbl9fICgoKF9fY29uc3QgdW5z aWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChidWZmZXIpKVswICsgMV0gPDwgOCB8ICgo X19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKGJ1ZmZlcikpWzBdKSwg X19leHRlbnNpb25fXyAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAq KSAoYnVmZmVyKSlbNCArIDFdIDw8IDggfCAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19j b25zdCBjaGFyICopIChidWZmZXIpKVs0XSksIF9fZXh0ZW5zaW9uX18gKCgoKChfX2NvbnN0IHVu c2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoYnVmZmVyKSlbMCArIDNdIDw8IDggfCAo KF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChidWZmZXIpKVswICsg Ml0pIDw8IDggfCAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChi dWZmZXIpKVswICsgMV0pIDw8IDggfCAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25z dCBjaGFyICopIChidWZmZXIpKVswXSksIF9fZXh0ZW5zaW9uX18gKCgoKChfX2NvbnN0IHVuc2ln bmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoYnVmZmVyKSlbNCArIDNdIDw8IDggfCAoKF9f Y29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChidWZmZXIpKVs0ICsgMl0p IDw8IDggfCAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChidWZm ZXIpKVs0ICsgMV0pIDw8IDggfCAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBj aGFyICopIChidWZmZXIpKVs0XSksIHN0cmxlbiAoYnVmZmVyKSArIDEpIDogKGNoYXIgKikgbWVt Y3B5IChwY3Vyci0+c3RvcmVkcHdvcmQsIGJ1ZmZlciwgc3RybGVuIChidWZmZXIpICsgMSkpIDog c3RyY3B5IChwY3Vyci0+c3RvcmVkcHdvcmQsIGJ1ZmZlcikpKTsKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZWRzdGF0aWNw YWRkcmVzcyA9IDE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgYWRkcHcgKGJ1ZmZlcik7CiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb3JldGhhbm9uZXBhc3N3 b3JkID0gMTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBjb3VudGVyID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgYnVmZmVyWzBdID0gJ1wwJzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgcHJlYWRhZ2FpbjoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgZnJlYWQgKGlucHV0Y2hhciwgMSwgMSwgcmVhZCk7CiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbnB1dGNoYXJbMF0g PT0gJyMnKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGRvCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyZWFkIChpbnB1dGNo YXIsIDEsIDEsIHJlYWQpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmVvZihyZWFkKSAhPSAwKQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGlucHV0Y2hhclswXSA9IDEzOwogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfXdoaWxlICgoaW5w dXRjaGFyWzBdICE9IDEzKSAmJiAoaW5wdXRjaGFyWzBdICE9IDEwKSk7CiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIHBy ZWFkYWdhaW47CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAg ICAgICAgICAgICAgICAgICAgICB9OwoKICAgICAgICAgICAgICAgICAgICAgICAgcGVuZDoKICAg ICAgICAgICAgICAgICAgICAgICAgaWYgKHBoZWFkLT5zdG9yZWRwd29yZFswXSA9PSAnXDAnKQog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHByaW50ZiAoIlxhXG5cdFRoZXJlIGFyZSBubyBwYXNzd29yZHMgdG8g Y3JhY2shIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGl0KDEp OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAg ICAgIGZjbG9zZSAocmVhZCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgaWYgKCFnZXRjdXN0 b21maWxlKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoZ2V0 dXNlcnMpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgZG8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50 ZiAoIlxuTmFtZSBvZiB0aGUgdXNlcjogIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBzY2FuZiAoIiVzIiwgdXNlcm5hbWUpOwogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgaWYgKGdldHBhc3N3ZGZpbGUpCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19leHRlbnNpb25fXyAoX19idWlsdGluX2Nv bnN0YW50X3AgKEdldE5vcm1hbFBhc3MgKHVzZXJuYW1lKSkgPyAoKChzaXplX3QpKGNvbnN0IHZv aWQgKikoKEdldE5vcm1hbFBhc3MgKHVzZXJuYW1lKSkgKyAxKSAtIChzaXplX3QpKGNvbnN0IHZv aWQgKikoR2V0Tm9ybWFsUGFzcyAodXNlcm5hbWUpKSA9PSAxKSAmJiBzdHJsZW4gKEdldE5vcm1h bFBhc3MgKHVzZXJuYW1lKSkgKyAxIDw9IDggPyBfX3N0cmNweV9zbWFsbCAoYnVmZmVyLCBfX2V4 dGVuc2lvbl9fICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChH ZXROb3JtYWxQYXNzICh1c2VybmFtZSkpKVswICsgMV0gPDwgOCB8ICgoX19jb25zdCB1bnNpZ25l ZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKEdldE5vcm1hbFBhc3MgKHVzZXJuYW1lKSkpWzBd KSwgX19leHRlbnNpb25fXyAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hh ciAqKSAoR2V0Tm9ybWFsUGFzcyAodXNlcm5hbWUpKSlbNCArIDFdIDw8IDggfCAoKF9fY29uc3Qg dW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChHZXROb3JtYWxQYXNzICh1c2VybmFt ZSkpKVs0XSksIF9fZXh0ZW5zaW9uX18gKCgoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9f Y29uc3QgY2hhciAqKSAoR2V0Tm9ybWFsUGFzcyAodXNlcm5hbWUpKSlbMCArIDNdIDw8IDggfCAo KF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChHZXROb3JtYWxQYXNz ICh1c2VybmFtZSkpKVswICsgMl0pIDw8IDggfCAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAo X19jb25zdCBjaGFyICopIChHZXROb3JtYWxQYXNzICh1c2VybmFtZSkpKVswICsgMV0pIDw8IDgg fCAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChHZXROb3JtYWxQ YXNzICh1c2VybmFtZSkpKVswXSksIF9fZXh0ZW5zaW9uX18gKCgoKChfX2NvbnN0IHVuc2lnbmVk IGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoR2V0Tm9ybWFsUGFzcyAodXNlcm5hbWUpKSlbNCAr IDNdIDw8IDggfCAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChH ZXROb3JtYWxQYXNzICh1c2VybmFtZSkpKVs0ICsgMl0pIDw8IDggfCAoKF9fY29uc3QgdW5zaWdu ZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChHZXROb3JtYWxQYXNzICh1c2VybmFtZSkpKVs0 ICsgMV0pIDw8IDggfCAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICop IChHZXROb3JtYWxQYXNzICh1c2VybmFtZSkpKVs0XSksIHN0cmxlbiAoR2V0Tm9ybWFsUGFzcyAo dXNlcm5hbWUpKSArIDEpIDogKGNoYXIgKikgbWVtY3B5IChidWZmZXIsIEdldE5vcm1hbFBhc3Mg KHVzZXJuYW1lKSwgc3RybGVuIChHZXROb3JtYWxQYXNzICh1c2VybmFtZSkpICsgMSkpIDogc3Ry Y3B5IChidWZmZXIsIEdldE5vcm1hbFBhc3MgKHVzZXJuYW1lKSkpKTsKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgaWYgKGdldHNoYWRvd2ZpbGUpCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19leHRlbnNpb25fXyAoX19idWlsdGluX2Nv bnN0YW50X3AgKEdldFNoYWRvd1Bhc3MgKHVzZXJuYW1lKSkgPyAoKChzaXplX3QpKGNvbnN0IHZv aWQgKikoKEdldFNoYWRvd1Bhc3MgKHVzZXJuYW1lKSkgKyAxKSAtIChzaXplX3QpKGNvbnN0IHZv aWQgKikoR2V0U2hhZG93UGFzcyAodXNlcm5hbWUpKSA9PSAxKSAmJiBzdHJsZW4gKEdldFNoYWRv d1Bhc3MgKHVzZXJuYW1lKSkgKyAxIDw9IDggPyBfX3N0cmNweV9zbWFsbCAoYnVmZmVyLCBfX2V4 dGVuc2lvbl9fICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChH ZXRTaGFkb3dQYXNzICh1c2VybmFtZSkpKVswICsgMV0gPDwgOCB8ICgoX19jb25zdCB1bnNpZ25l ZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKEdldFNoYWRvd1Bhc3MgKHVzZXJuYW1lKSkpWzBd KSwgX19leHRlbnNpb25fXyAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hh ciAqKSAoR2V0U2hhZG93UGFzcyAodXNlcm5hbWUpKSlbNCArIDFdIDw8IDggfCAoKF9fY29uc3Qg dW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChHZXRTaGFkb3dQYXNzICh1c2VybmFt ZSkpKVs0XSksIF9fZXh0ZW5zaW9uX18gKCgoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9f Y29uc3QgY2hhciAqKSAoR2V0U2hhZG93UGFzcyAodXNlcm5hbWUpKSlbMCArIDNdIDw8IDggfCAo KF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChHZXRTaGFkb3dQYXNz ICh1c2VybmFtZSkpKVswICsgMl0pIDw8IDggfCAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAo X19jb25zdCBjaGFyICopIChHZXRTaGFkb3dQYXNzICh1c2VybmFtZSkpKVswICsgMV0pIDw8IDgg fCAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChHZXRTaGFkb3dQ YXNzICh1c2VybmFtZSkpKVswXSksIF9fZXh0ZW5zaW9uX18gKCgoKChfX2NvbnN0IHVuc2lnbmVk IGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoR2V0U2hhZG93UGFzcyAodXNlcm5hbWUpKSlbNCAr IDNdIDw8IDggfCAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChH ZXRTaGFkb3dQYXNzICh1c2VybmFtZSkpKVs0ICsgMl0pIDw8IDggfCAoKF9fY29uc3QgdW5zaWdu ZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChHZXRTaGFkb3dQYXNzICh1c2VybmFtZSkpKVs0 ICsgMV0pIDw8IDggfCAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICop IChHZXRTaGFkb3dQYXNzICh1c2VybmFtZSkpKVs0XSksIHN0cmxlbiAoR2V0U2hhZG93UGFzcyAo dXNlcm5hbWUpKSArIDEpIDogKGNoYXIgKikgbWVtY3B5IChidWZmZXIsIEdldFNoYWRvd1Bhc3Mg KHVzZXJuYW1lKSwgc3RybGVuIChHZXRTaGFkb3dQYXNzICh1c2VybmFtZSkpICsgMSkpIDogc3Ry Y3B5IChidWZmZXIsIEdldFNoYWRvd1Bhc3MgKHVzZXJuYW1lKSkpKTsKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGlmIChidWZmZXJbMF0gPT0gJyonKQogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmICgiXG4lcyBoYWQgbm8gcGFz c3dvcmQsIGNhbm5vdCBsb2FkIiwgdXNlcm5hbWUpOwogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBpZiAoIXB3b3JkZXhpc3QoYnVmZmVyKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg KCF1c2Vkc3RhdGljcGFkZHJlc3MpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKF9fZXh0ZW5zaW9uX18gKF9fYnVpbHRpbl9jb25zdGFudF9w IChidWZmZXIpID8gKCgoc2l6ZV90KShjb25zdCB2b2lkICopKChidWZmZXIpICsgMSkgLSAoc2l6 ZV90KShjb25zdCB2b2lkICopKGJ1ZmZlcikgPT0gMSkgJiYgc3RybGVuIChidWZmZXIpICsgMSA8 PSA4ID8gX19zdHJjcHlfc21hbGwgKHBjdXJyLT5zdG9yZWRwd29yZCwgX19leHRlbnNpb25fXyAo KChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoYnVmZmVyKSlbMCAr IDFdIDw8IDggfCAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChi dWZmZXIpKVswXSksIF9fZXh0ZW5zaW9uX18gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChf X2NvbnN0IGNoYXIgKikgKGJ1ZmZlcikpWzQgKyAxXSA8PCA4IHwgKChfX2NvbnN0IHVuc2lnbmVk IGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoYnVmZmVyKSlbNF0pLCBfX2V4dGVuc2lvbl9fICgo KCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKGJ1ZmZlcikpWzAg KyAzXSA8PCA4IHwgKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAo YnVmZmVyKSlbMCArIDJdKSA8PCA4IHwgKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29u c3QgY2hhciAqKSAoYnVmZmVyKSlbMCArIDFdKSA8PCA4IHwgKChfX2NvbnN0IHVuc2lnbmVkIGNo YXIgKikgKF9fY29uc3QgY2hhciAqKSAoYnVmZmVyKSlbMF0pLCBfX2V4dGVuc2lvbl9fICgoKCgo X19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKGJ1ZmZlcikpWzQgKyAz XSA8PCA4IHwgKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoYnVm ZmVyKSlbNCArIDJdKSA8PCA4IHwgKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3Qg Y2hhciAqKSAoYnVmZmVyKSlbNCArIDFdKSA8PCA4IHwgKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIg KikgKF9fY29uc3QgY2hhciAqKSAoYnVmZmVyKSlbNF0pLCBzdHJsZW4gKGJ1ZmZlcikgKyAxKSA6 IChjaGFyICopIG1lbWNweSAocGN1cnItPnN0b3JlZHB3b3JkLCBidWZmZXIsIHN0cmxlbiAoYnVm ZmVyKSArIDEpKSA6IHN0cmNweSAocGN1cnItPnN0b3JlZHB3b3JkLCBidWZmZXIpKSk7CiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB1c2Vkc3RhdGljcGFkZHJlc3MgPSAxOwogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHB3IChidWZmZXIpOwogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9yZXRoYW5vbmVwYXNzd29yZCA9IDE7CiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYgKCJcbiVzIiwgYnVmZmVy KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZiAoIlRoYXQgcGFz c3dvcmQgYWxyZWFkeSBleGlzdCBpbiBtZW1vcnkuLi5cbiIpOwogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBwcmludGYgKCJcbkFub3RoZXIgKHkvbik/Iik7CiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2FuZiAoIiVzIiwgY2hvaWNlKTsK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH13aGlsZSAoKGNob2ljZVsw XSAhPSAnbicpICYmIChjaG9pY2VbMF0gIT0gJ04nKSk7CiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyc2VhbGwpCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY291bnRlcj0wOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgY29sb25jb3VudGVyID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGJ1ZmZlclswXSA9ICdcMCc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBpbnB1dGNoYXJbMF0gPSAnXDAnOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHJlYWQgPSBmb3BlbiAocGFyc2VmaWxlLCAiciIpOwoKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGZyZWFkIChpbnB1dGNoYXIsIDEsIDEsIHJlYWQpOwog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGZlb2YocmVhZCkg PT0gMCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbG9uY291bnRlciA9 PSAxKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGJ1ZmZlcltjb3VudGVyXSA9IGlucHV0Y2hhclswXTsKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50 ZXIrKzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZy ZWFkIChpbnB1dGNoYXIsIDEsIDEsIHJlYWQpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBpZiAoaW5wdXRjaGFyWzBdID09ICc6JykKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xv bmNvdW50ZXIrKzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGZyZWFkIChpbnB1dGNoYXIsIDEsIDEsIHJlYWQpOwogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg aWYgKGNvbG9uY291bnRlciA+IDEpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBkbwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGZyZWFkIChpbnB1dGNoYXIsIDEsIDEsIHJlYWQpOwogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgaWYgKGZlb2YocmVhZCkgIT0gMCkKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgaW5wdXRjaGFyWzBdID0gMTM7CiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg fXdoaWxlICgoaW5wdXRjaGFyWzBdICE9IDEzKSAmJiAoaW5wdXRjaGFyWzBdICE9IDEwKSk7CiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBpZiAoKGlucHV0Y2hhclswXSA9PSAxMykgfHwgKGlucHV0Y2hhclswXSA9PSAxMCkg fHwgZmVvZihyZWFkKSAhPSAwKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcltjb3VudGVyXSA9ICdcMCc7CiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBpZiAoYnVmZmVyWzBdID09ICcqJykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBza2lwOwogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg aWYgKCFwd29yZGV4aXN0KGJ1ZmZlcikpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBpZiAoIXVzZWRzdGF0aWNwYWRkcmVzcykKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fZXh0ZW5z aW9uX18gKF9fYnVpbHRpbl9jb25zdGFudF9wIChidWZmZXIpID8gKCgoc2l6ZV90KShjb25zdCB2 b2lkICopKChidWZmZXIpICsgMSkgLSAoc2l6ZV90KShjb25zdCB2b2lkICopKGJ1ZmZlcikgPT0g MSkgJiYgc3RybGVuIChidWZmZXIpICsgMSA8PSA4ID8gX19zdHJjcHlfc21hbGwgKHBjdXJyLT5z dG9yZWRwd29yZCwgX19leHRlbnNpb25fXyAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9f Y29uc3QgY2hhciAqKSAoYnVmZmVyKSlbMCArIDFdIDw8IDggfCAoKF9fY29uc3QgdW5zaWduZWQg Y2hhciAqKSAoX19jb25zdCBjaGFyICopIChidWZmZXIpKVswXSksIF9fZXh0ZW5zaW9uX18gKCgo X19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKGJ1ZmZlcikpWzQgKyAx XSA8PCA4IHwgKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoYnVm ZmVyKSlbNF0pLCBfX2V4dGVuc2lvbl9fICgoKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChf X2NvbnN0IGNoYXIgKikgKGJ1ZmZlcikpWzAgKyAzXSA8PCA4IHwgKChfX2NvbnN0IHVuc2lnbmVk IGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoYnVmZmVyKSlbMCArIDJdKSA8PCA4IHwgKChfX2Nv bnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoYnVmZmVyKSlbMCArIDFdKSA8 PCA4IHwgKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoYnVmZmVy KSlbMF0pLCBfX2V4dGVuc2lvbl9fICgoKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2Nv bnN0IGNoYXIgKikgKGJ1ZmZlcikpWzQgKyAzXSA8PCA4IHwgKChfX2NvbnN0IHVuc2lnbmVkIGNo YXIgKikgKF9fY29uc3QgY2hhciAqKSAoYnVmZmVyKSlbNCArIDJdKSA8PCA4IHwgKChfX2NvbnN0 IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoYnVmZmVyKSlbNCArIDFdKSA8PCA4 IHwgKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoYnVmZmVyKSlb NF0pLCBzdHJsZW4gKGJ1ZmZlcikgKyAxKSA6IChjaGFyICopIG1lbWNweSAocGN1cnItPnN0b3Jl ZHB3b3JkLCBidWZmZXIsIHN0cmxlbiAoYnVmZmVyKSArIDEpKSA6IHN0cmNweSAocGN1cnItPnN0 b3JlZHB3b3JkLCBidWZmZXIpKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHVzZWRzdGF0aWNwYWRkcmVzcyA9IDE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRwdyAoYnVm ZmVyKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9yZXRoYW5vbmVw YXNzd29yZCA9IDE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgcHJpbnRmICgiXG4lcyIsIGJ1ZmZlcik7CiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHNraXA6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBjb3VudGVyID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9uY291bnRlciA9IDA7CiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBidWZmZXJbMF0gPSAnXDAnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJlYWQgKGlucHV0Y2hhciwgMSwgMSwgcmVh ZCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9OwoK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmNsb3NlIChy ZWFkKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg ICAgICAgIH0KfQoKdm9pZCBwYXJzZWR3b3JkcyAoY2hhciBpbmRmaWxlWzI1N10pCnsKICAgICAg ICBGSUxFICpyZWFkOwogICAgICAgIGNoYXIgaW5wdXRjaGFyWzFdOwogICAgICAgIGNoYXIgYnVm ZmVyWzI1Nl07CiAgICAgICAgaW50IGNvdW50ZXI9MDsKCiAgICAgICAgcmVhZCA9IGZvcGVuIChp bmRmaWxlLCAiciIpOwoKICAgICAgICBkc3RhcnRvdmVyOgogICAgICAgIGZyZWFkIChpbnB1dGNo YXIsIDEsIDEsIHJlYWQpOwogICAgICAgIGlmIChmZW9mKHJlYWQpICE9IDApCiAgICAgICAgICAg ICAgICBnb3RvIGRlbmQ7CiAgICAgICAgaWYgKGlucHV0Y2hhclswXSA9PSAnIycpCiAgICAgICAg ICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIGRvCiAgICAgICAgICAgICAgICAgICAg ICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmVhZCAoaW5wdXRjaGFyLCAx LCAxLCByZWFkKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmVvZihyZWFk KSAhPSAwKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRjaGFy WzBdID0gMTM7CiAgICAgICAgICAgICAgICAgICAgICAgIH13aGlsZSAoKGlucHV0Y2hhclswXSAh PSAxMykgJiYgKGlucHV0Y2hhclswXSAhPSAxMCkpOwogICAgICAgICAgICAgICAgICAgICAgICBn b3RvIGRzdGFydG92ZXI7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgd2hpbGUgKGZlb2YocmVh ZCkgPT0gMCkKICAgICAgICB7CiAgICAgICAgICAgICAgICBidWZmZXJbY291bnRlcl0gPSBpbnB1 dGNoYXJbMF07CiAgICAgICAgICAgICAgICBjb3VudGVyKys7CiAgICAgICAgICAgICAgICBmcmVh ZCAoaW5wdXRjaGFyLCAxLCAxLCByZWFkKTsKICAgICAgICAgICAgICAgIGlmIChpbnB1dGNoYXJb MF0gPT0gJyMnKQogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgZG8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmVhZCAoaW5wdXRjaGFyLCAxLCAxLCBy ZWFkKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmZW9mKHJl YWQpICE9IDApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGlucHV0Y2hhclswXSA9IDEzOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH13aGls ZSAoKGlucHV0Y2hhclswXSAhPSAxMykgJiYgKGlucHV0Y2hhclswXSAhPSAxMCkpOwogICAgICAg ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoKGlucHV0Y2hhclswXSA9PSAx MykgfHwgKGlucHV0Y2hhclswXSA9PSAxMCkgfHwgZmVvZihyZWFkKSAhPSAwKQogICAgICAgICAg ICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyW2Nv dW50ZXJdID0gJ1wwJzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWR3b3Jk ZXhpc3QoYnVmZmVyKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF1c2Vk c3RhdGljZGFkZHJlc3MpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKF9fZXh0ZW5zaW9uX18gKF9fYnVpbHRpbl9jb25zdGFu dF9wIChidWZmZXIpID8gKCgoc2l6ZV90KShjb25zdCB2b2lkICopKChidWZmZXIpICsgMSkgLSAo c2l6ZV90KShjb25zdCB2b2lkICopKGJ1ZmZlcikgPT0gMSkgJiYgc3RybGVuIChidWZmZXIpICsg MSA8PSA4ID8gX19zdHJjcHlfc21hbGwgKGRjdXJyLT50ZXN0ZHdvcmQsIF9fZXh0ZW5zaW9uX18g KCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKGJ1ZmZlcikpWzAg KyAxXSA8PCA4IHwgKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAo YnVmZmVyKSlbMF0pLCBfX2V4dGVuc2lvbl9fICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAo X19jb25zdCBjaGFyICopIChidWZmZXIpKVs0ICsgMV0gPDwgOCB8ICgoX19jb25zdCB1bnNpZ25l ZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKGJ1ZmZlcikpWzRdKSwgX19leHRlbnNpb25fXyAo KCgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChidWZmZXIpKVsw ICsgM10gPDwgOCB8ICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikg KGJ1ZmZlcikpWzAgKyAyXSkgPDwgOCB8ICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2Nv bnN0IGNoYXIgKikgKGJ1ZmZlcikpWzAgKyAxXSkgPDwgOCB8ICgoX19jb25zdCB1bnNpZ25lZCBj aGFyICopIChfX2NvbnN0IGNoYXIgKikgKGJ1ZmZlcikpWzBdKSwgX19leHRlbnNpb25fXyAoKCgo KF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChidWZmZXIpKVs0ICsg M10gPDwgOCB8ICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKGJ1 ZmZlcikpWzQgKyAyXSkgPDwgOCB8ICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0 IGNoYXIgKikgKGJ1ZmZlcikpWzQgKyAxXSkgPDwgOCB8ICgoX19jb25zdCB1bnNpZ25lZCBjaGFy ICopIChfX2NvbnN0IGNoYXIgKikgKGJ1ZmZlcikpWzRdKSwgc3RybGVuIChidWZmZXIpICsgMSkg OiAoY2hhciAqKSBtZW1jcHkgKGRjdXJyLT50ZXN0ZHdvcmQsIGJ1ZmZlciwgc3RybGVuIChidWZm ZXIpICsgMSkpIDogc3RyY3B5IChkY3Vyci0+dGVzdGR3b3JkLCBidWZmZXIpKSk7CiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1 c2Vkc3RhdGljZGFkZHJlc3MgPSAxOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZGR3IChidWZmZXIpOwogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9yZXRo YW5vbmVkd29yZCA9IDE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudGVyID0gMDsKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBidWZmZXJbMF0gPSAnXDAnOwogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGRyZWFkYWdhaW46CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgZnJlYWQgKGlucHV0Y2hhciwgMSwgMSwgcmVhZCk7CiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgaWYgKGlucHV0Y2hhclswXSA9PSAnIycpCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGRvCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBmcmVhZCAoaW5wdXRjaGFyLCAxLCAxLCByZWFkKTsKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgfXdoaWxlICgoaW5wdXRjaGFyWzBdICE9IDEzKSAm JiAoaW5wdXRjaGFyWzBdICE9IDEwKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGdvdG8gZHJlYWRhZ2FpbjsKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgIH07Cgog ICAgICAgIGRlbmQ6CiAgICAgICAgaWYgKGRoZWFkLT50ZXN0ZHdvcmRbMF0gPT0gJ1wwJykKICAg ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmICgiXGFcblx0VGhl cmUgYXJlIG5vIGRpY3Rpb25hcnkgd29yZHMgdG8gdXNlISIpOwogICAgICAgICAgICAgICAgICAg ICAgICBleGl0KDEpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICBmY2xvc2UgKHJlYWQpOwp9 Cgp2b2lkIHNhdmVfZXhpdCAoaW50IHNpZ251bSkKewogICAgICAgIHByaW50ZiAoIlxuQ2F1Z2h0 IFNJR0lOVFxuIik7CiAgICAgICAgaWYgKGNyYWNraW5naGFzc3RhcnRlZCAmJiBzdGFuZGFsb25l ICYmICFnZW5lcmF0ZSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAg cHJpbnRmICgic2F2aW5nLi4uXG4iKTsKICAgICAgICAgICAgICAgICAgICAgICAgc2F2ZXNlc3Np b24gKCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgZXhpdCAoMCk7Cn0KCnZvaWQgc2F2ZXNl c3Npb24gKCkKewogICAgICAgIGNoYXIgb3V0c3RyWzI1Nl07CiAgICAgICAgY2hhciBjaFsyXTsK ICAgICAgICBpbnQgdGVtcCwgdGVtcDI7CiAgICAgICAgRklMRSAqd3JpdGVzZXM7CiAgICAgICAg c3RvcmVwd190ICpsb2NhbHBjdXJyOwogICAgICAgIGRpY3RfdCAqbG9jYWxkY3VycjsKICAgICAg ICBvdXRzdHJbMF0gPSAnXDAnOwogICAgICAgIGNoWzFdID0gJ1wwJzsKCiAgICAgICAgbG9jYWxw Y3VyciA9IChzdHJ1Y3Qgc3RvcmVwdyAqKXBoZWFkOwogICAgICAgIGxvY2FsZGN1cnIgPSAoc3Ry dWN0IHN0b3JlZHcgKilkaGVhZDsKICAgICAgICB3cml0ZXNlcyA9IGZvcGVuIChzZXNzaW9uLCAi dyIpOwoKICAgICAgICBpZiAoZGljdGF0dGFjaykKICAgICAgICAgICAgICAgIHN0cmNhdCAob3V0 c3RyLCAiZCIpOwogICAgICAgIGlmIChicnV0ZWZvcmNlKQogICAgICAgICAgICAgICAgc3RyY2F0 IChvdXRzdHIsICJiIik7CgoKICAgICAgICBpZiAoYnJ1dGVmb3JjZSkKICAgICAgICAgICAgICAg IHsKICAgICAgICAgICAgICAgICAgICAgICAgc3RyY2F0IChvdXRzdHIsICIvIik7CiMgODQxICJC cmVha0Rvd24uYyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXAg PSAoaW50KShtaW5sZW5ndGgvMTApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgdGVtcDIgPSBtaW5sZW5ndGggLSAodGVtcCoxMCk7CiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBjaFswXSA9IGkyYyAodGVtcCk7CiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBzdHJjYXQgKG91dHN0ciwgY2gpOwogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hbMF0gPSBpMmMgKHRlbXAyKTsKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmNhdCAob3V0c3RyLCBjaCk7CgoKICAg ICAgICAgICAgICAgICAgICAgICAgc3RyY2F0IChvdXRzdHIsICIvIik7CiMgODYxICJCcmVha0Rv d24uYyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXAgPSAoaW50 KShtYXhsZW5ndGgvMTApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg dGVtcDIgPSBtYXhsZW5ndGggLSAodGVtcCoxMCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjaFswXSA9IGkyYyAodGVtcCk7CiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBzdHJjYXQgKG91dHN0ciwgY2gpOwogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgY2hbMF0gPSBpMmMgKHRlbXAyKTsKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmNhdCAob3V0c3RyLCBjaCk7CgoKICAgICAgICAg ICAgICAgICAgICAgICAgc3RyY2F0IChvdXRzdHIsICIvIik7CiAgICAgICAgICAgICAgICAgICAg ICAgIGNoWzBdID0gaTJjIChTTFZMKTsKICAgICAgICAgICAgICAgICAgICAgICAgc3RyY2F0IChv dXRzdHIsIGNoKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICBzdHJjYXQgKG91dHN0ciwgIlxu Iik7CiAgICAgICAgZndyaXRlIChvdXRzdHIsIHN0cmxlbiAob3V0c3RyKSwgMSwgd3JpdGVzZXMp OwoKICAgICAgICBvdXRzdHJbMF0gPSAnXDAnOwogICAgICAgIGlmIChsb2djcmFja2VkdG9zY3Jl ZW4pCiAgICAgICAgICAgICAgICBzdHJjYXQgKG91dHN0ciwgInMiKTsKICAgICAgICBpZiAobG9n Y3JhY2tlZHRvZmlsZSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAg c3RyY2F0IChvdXRzdHIsICJmOiIpOwogICAgICAgICAgICAgICAgICAgICAgICBzdHJjYXQgKG91 dHN0ciwgY3JhY2tlZGxvZyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgc3RyY2F0IChvdXRz dHIsICJcbiIpOwogICAgICAgIGZ3cml0ZSAob3V0c3RyLCBzdHJsZW4gKG91dHN0ciksIDEsIHdy aXRlc2VzKTsKCiAgICAgICAgb3V0c3RyWzBdID0gJ1wwJzsKICAgICAgICBpZiAocnVuYnJ1dGVm b3JjZSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgc3RyY2F0IChv dXRzdHIsICJiIik7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgaWYgKHJ1bmRpY3RhdHRhY2sp CiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmNhdCAob3V0c3Ry LCAiZCIpOwogICAgICAgICAgICAgICAgfQogICAgICAgIHN0cmNhdCAob3V0c3RyLCAiXG4iKTsK ICAgICAgICBmd3JpdGUgKG91dHN0ciwgc3RybGVuIChvdXRzdHIpLCAxLCB3cml0ZXNlcyk7CiMg OTE0ICJCcmVha0Rvd24uYyIKICAgICAgICBvdXRzdHJbMF0gPSAnXDAnOwogICAgICAgIGlmIChk aWN0YXR0YWNrKQogICAgICAgICAgICAgICAgewoKICAgICAgICAgICAgICAgICAgICAgICAgZndy aXRlIChkaWN0aW5maWxlbmFtZSwgc3RybGVuIChkaWN0aW5maWxlbmFtZSksIDEsIHdyaXRlc2Vz KTsKICAgICAgICAgICAgICAgICAgICAgICAgZndyaXRlICgiXG4iLCAxLCAxLCB3cml0ZXNlcyk7 CiAgICAgICAgICAgICAgICB9CgogICAgICAgIGZ3cml0ZSAoIlBhc3N3b3JkczpcbiIsIHN0cmxl biAoIlBhc3N3b3JkczpcbiIpLCAxLCB3cml0ZXNlcyk7CiAgICAgICAgc3RhcnRwOgogICAgICAg IGZ3cml0ZSAobG9jYWxwY3Vyci0+c3RvcmVkcHdvcmQsIHN0cmxlbiAobG9jYWxwY3Vyci0+c3Rv cmVkcHdvcmQpLCAxLCB3cml0ZXNlcyk7CiAgICAgICAgZndyaXRlICgiXG4iLCAxLCAxLCB3cml0 ZXNlcyk7CiAgICAgICAgaWYgKGxvY2FscGN1cnItPm5leHQgIT0gKCh2b2lkICopMCkpCiAgICAg ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FscGN1cnIgPSBsb2NhbHBj dXJyLT5uZXh0OwogICAgICAgICAgICAgICAgICAgICAgICBnb3RvIHN0YXJ0cDsKICAgICAgICAg ICAgICAgIH0KCiAgICAgICAgZndyaXRlICgiTGFzdCBXb3JkOlxuIiwgc3RybGVuICgiTGFzdCBX b3JkOlxuIiksIDEsIHdyaXRlc2VzKTsKICAgICAgICBmd3JpdGUgKHRlc3RwYXNzLCBzdHJsZW4g KHRlc3RwYXNzKSwgMSwgd3JpdGVzZXMpOwoKICAgICAgICBmZmx1c2ggKHdyaXRlc2VzKTsKICAg ICAgICBmY2xvc2UgKHdyaXRlc2VzKTsKfQoKdm9pZCBwYXJzZXNlc3Npb25maWxlICgpCnsKICAg ICAgICBpbnQgY291bnRlciA9IDA7CiAgICAgICAgRklMRSAqcmVhZHNlczsKICAgICAgICBjaGFy IGlucHV0Y2hhclsxXTsKICAgICAgICBjaGFyIGJ1ZmZlclsyNTZdOwogICAgICAgIHN0b3JlcHdf dCAqbG9jYWxwY3VyciA9IChzdHJ1Y3Qgc3RvcmVwdyAqKXBoZWFkOwogICAgICAgIGRpY3RfdCAq bG9jYWxkY3VyciA9IChzdHJ1Y3Qgc3RvcmVkdyAqKWRoZWFkOwoKICAgICAgICBhbnlhdHRhY2sg PSAxOwoKICAgICAgICByZWFkc2VzID0gZm9wZW4gKHNlc3Npb24sICJyIik7CgogICAgICAgIGx2 bDE6CiAgICAgICAgZnJlYWQgKGlucHV0Y2hhciwgMSwgMSwgcmVhZHNlcyk7CiAgICAgICAgaWYg KGlucHV0Y2hhclswXSA9PSAnYicpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAg ICAgICAgIHByaW50ZiAoIlxuQnJ1dGVGb3JjZSBBdHRhY2sgPSB0cnVlIik7CiAgICAgICAgICAg ICAgICAgICAgICAgIGJydXRlZm9yY2UgPSAxOwogICAgICAgICAgICAgICAgICAgICAgICBzdGFy dGJydXRlZm9yY2UgPSAwOwogICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGx2bDE7CiAgICAg ICAgICAgICAgICB9CiAgICAgICAgaWYgKGlucHV0Y2hhclswXSA9PSAnZCcpCiAgICAgICAgICAg ICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZiAoIlxuRGljdG9uYXJ5IEF0dGFj ayA9IHRydWUiKTsKICAgICAgICAgICAgICAgICAgICAgICAgZGljdGF0dGFjayA9IDE7CiAgICAg ICAgICAgICAgICAgICAgICAgIGdvdG8gbHZsMTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAg Y291bnRlcj0wOwogICAgICAgIGx2bDI6CiAgICAgICAgaWYgKGJydXRlZm9yY2UpCiAgICAgICAg ICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIGZyZWFkIChpbnB1dGNoYXIsIDEsIDEs IHJlYWRzZXMpOwogICAgICAgICAgICAgICAgICAgICAgICBtaW5sZW5ndGggPSAxMCAqIGMyaSAo aW5wdXRjaGFyWzBdKTsKICAgICAgICAgICAgICAgICAgICAgICAgZnJlYWQgKGlucHV0Y2hhciwg MSwgMSwgcmVhZHNlcyk7CiAgICAgICAgICAgICAgICAgICAgICAgIG1pbmxlbmd0aCArPSBjMmkg KGlucHV0Y2hhclswXSk7CiAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZiAoIlxubWlubGVu Z3RoOiAlaSIsIG1pbmxlbmd0aCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGZyZWFkIChpbnB1 dGNoYXIsIDEsIDEsIHJlYWRzZXMpOwoKICAgICAgICAgICAgICAgICAgICAgICAgZnJlYWQgKGlu cHV0Y2hhciwgMSwgMSwgcmVhZHNlcyk7CiAgICAgICAgICAgICAgICAgICAgICAgIG1heGxlbmd0 aCA9IDEwICogYzJpIChpbnB1dGNoYXJbMF0pOwogICAgICAgICAgICAgICAgICAgICAgICBmcmVh ZCAoaW5wdXRjaGFyLCAxLCAxLCByZWFkc2VzKTsKICAgICAgICAgICAgICAgICAgICAgICAgbWF4 bGVuZ3RoICs9IGMyaSAoaW5wdXRjaGFyWzBdKTsKICAgICAgICAgICAgICAgICAgICAgICAgcHJp bnRmICgiXG5tYXhsZW5ndGg6ICVpIiwgbWF4bGVuZ3RoKTsKICAgICAgICAgICAgICAgICAgICAg ICAgZnJlYWQgKGlucHV0Y2hhciwgMSwgMSwgcmVhZHNlcyk7CgogICAgICAgICAgICAgICAgICAg ICAgICBmcmVhZCAoaW5wdXRjaGFyLCAxLCAxLCByZWFkc2VzKTsKICAgICAgICAgICAgICAgICAg ICAgICAgU0xWTCA9IGMyaSAoaW5wdXRjaGFyWzBdKTsKICAgICAgICAgICAgICAgICAgICAgICAg cHJpbnRmICgiXG5TZWN1cml0eSBMZXZlbDogJWkiLCBTTFZMKTsKICAgICAgICAgICAgICAgICAg ICAgICAgZnJlYWQgKGlucHV0Y2hhciwgMSwgMSwgcmVhZHNlcyk7CiAgICAgICAgICAgICAgICB9 CgogICAgICAgIGx2bDM6CiAgICAgICAgZnJlYWQgKGlucHV0Y2hhciwgMSwgMSwgcmVhZHNlcyk7 CiAgICAgICAgaWYgKGlucHV0Y2hhclswXSA9PSAncycpCiAgICAgICAgICAgICAgICB7CiAgICAg ICAgICAgICAgICAgICAgICAgIGxvZ2NyYWNrZWR0b3NjcmVlbiA9IDE7CiAgICAgICAgICAgICAg ICAgICAgICAgIHByaW50ZiAoIlxuTG9nIENyYWNrZWQgdG8gU2NyZWVuID0gdHJ1ZSIpOwogICAg ICAgICAgICAgICAgICAgICAgICBnb3RvIGx2bDM7CiAgICAgICAgICAgICAgICB9CiAgICAgICAg aWYgKGlucHV0Y2hhclswXSA9PSAnZicpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAg ICAgICAgICAgIHdyaXRlYW55dG9maWxlID0gMTsKICAgICAgICAgICAgICAgICAgICAgICAgbG9n Y3JhY2tlZHRvZmlsZSA9IDE7CiAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZiAoIlxuTG9n IENyYWtlZCB0byBmaWxlID0gdHJ1ZSIpOwogICAgICAgICAgICAgICAgICAgICAgICBmcmVhZCAo aW5wdXRjaGFyLCAxLCAxLCByZWFkc2VzKTsKICAgICAgICAgICAgICAgICAgICAgICAgZnJlYWQg KGlucHV0Y2hhciwgMSwgMSwgcmVhZHNlcyk7CiAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxl ICgoaW5wdXRjaGFyWzBdICE9IDEwKSAmJiAoaW5wdXRjaGFyWzBdICE9IDEzKSkKICAgICAgICAg ICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcltj b3VudGVyXSA9IGlucHV0Y2hhclswXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj b3VudGVyKys7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJlYWQgKGlucHV0Y2hh ciwgMSwgMSwgcmVhZHNlcyk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg ICAgICAgICAgICAgYnVmZmVyW2NvdW50ZXJdID0gJ1wwJzsKICAgICAgICAgICAgICAgICAgICAg ICAgKF9fZXh0ZW5zaW9uX18gKF9fYnVpbHRpbl9jb25zdGFudF9wIChidWZmZXIpID8gKCgoc2l6 ZV90KShjb25zdCB2b2lkICopKChidWZmZXIpICsgMSkgLSAoc2l6ZV90KShjb25zdCB2b2lkICop KGJ1ZmZlcikgPT0gMSkgJiYgc3RybGVuIChidWZmZXIpICsgMSA8PSA4ID8gX19zdHJjcHlfc21h bGwgKGNyYWNrZWRsb2csIF9fZXh0ZW5zaW9uX18gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICop IChfX2NvbnN0IGNoYXIgKikgKGJ1ZmZlcikpWzAgKyAxXSA8PCA4IHwgKChfX2NvbnN0IHVuc2ln bmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoYnVmZmVyKSlbMF0pLCBfX2V4dGVuc2lvbl9f ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChidWZmZXIpKVs0 ICsgMV0gPDwgOCB8ICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikg KGJ1ZmZlcikpWzRdKSwgX19leHRlbnNpb25fXyAoKCgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAq KSAoX19jb25zdCBjaGFyICopIChidWZmZXIpKVswICsgM10gPDwgOCB8ICgoX19jb25zdCB1bnNp Z25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKGJ1ZmZlcikpWzAgKyAyXSkgPDwgOCB8ICgo X19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKGJ1ZmZlcikpWzAgKyAx XSkgPDwgOCB8ICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKGJ1 ZmZlcikpWzBdKSwgX19leHRlbnNpb25fXyAoKCgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAo X19jb25zdCBjaGFyICopIChidWZmZXIpKVs0ICsgM10gPDwgOCB8ICgoX19jb25zdCB1bnNpZ25l ZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKGJ1ZmZlcikpWzQgKyAyXSkgPDwgOCB8ICgoX19j b25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKGJ1ZmZlcikpWzQgKyAxXSkg PDwgOCB8ICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKGJ1ZmZl cikpWzRdKSwgc3RybGVuIChidWZmZXIpICsgMSkgOiAoY2hhciAqKSBtZW1jcHkgKGNyYWNrZWRs b2csIGJ1ZmZlciwgc3RybGVuIChidWZmZXIpICsgMSkpIDogc3RyY3B5IChjcmFja2VkbG9nLCBi dWZmZXIpKSk7CiAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZiAoIlxuQ3JhY2tlZCBMb2cg ZmlsZSA9ICVzIiwgY3JhY2tlZGxvZyk7CiAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50ZXI9 MDsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgbHZsNDoKICAgICAgICBmcmVhZCAoaW5wdXRj aGFyLCAxLCAxLCByZWFkc2VzKTsKICAgICAgICBpZiAoaW5wdXRjaGFyWzBdID09ICdiJykKICAg ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmICgiXG5CcnV0ZUZv cmNlIEF0dGFjayB3YXMgaW4gc2Vzc2lvbiIpOwogICAgICAgICAgICAgICAgICAgICAgICBydW5i cnV0ZWZvcmNlID0gMTsKICAgICAgICAgICAgICAgICAgICAgICAgcnVuZGljdGF0dGFjayA9IDA7 CiAgICAgICAgICAgICAgICB9CiAgICAgICAgaWYgKGlucHV0Y2hhclswXSA9PSAnZCcpCiAgICAg ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZiAoIlxuRGljdG9uYXJ5 IEF0dGFjayB3YXMgaW4gc2Vzc2lvbiIpOwogICAgICAgICAgICAgICAgICAgICAgICBydW5kaWN0 YXR0YWNrID0gMTsKICAgICAgICAgICAgICAgICAgICAgICAgcnVuYnJ1dGVmb3JjZSA9IDA7CiAg ICAgICAgICAgICAgICB9CiAgICAgICAgZnJlYWQgKGlucHV0Y2hhciwgMSwgMSwgcmVhZHNlcyk7 CgogICAgICAgIGx2bDU6CgoKCiAgICAgICAgZnJlYWQgKGlucHV0Y2hhciwgMSwgMSwgcmVhZHNl cyk7CiAgICAgICAgd2hpbGUgKChpbnB1dGNoYXJbMF0gIT0gMTApICYmIChpbnB1dGNoYXJbMF0g IT0gMTMpKQogICAgICAgIHsKICAgICAgICAgICAgICAgIGJ1ZmZlcltjb3VudGVyXSA9IGlucHV0 Y2hhclswXTsKICAgICAgICAgICAgICAgIGNvdW50ZXIrKzsKICAgICAgICAgICAgICAgIGZyZWFk IChpbnB1dGNoYXIsIDEsIDEsIHJlYWRzZXMpOwogICAgICAgIH0KICAgICAgICBidWZmZXJbY291 bnRlcl0gPSAnXDAnOwoKICAgICAgICBpZiAoIWRpY3RhdHRhY2spCiAgICAgICAgICAgICAgICBw cmludGYgKCJcblxuJXMiLCBidWZmZXIpOwogICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIHsK ICAgICAgICAgICAgICAgICAgICAgICAgKF9fZXh0ZW5zaW9uX18gKF9fYnVpbHRpbl9jb25zdGFu dF9wIChidWZmZXIpID8gKCgoc2l6ZV90KShjb25zdCB2b2lkICopKChidWZmZXIpICsgMSkgLSAo c2l6ZV90KShjb25zdCB2b2lkICopKGJ1ZmZlcikgPT0gMSkgJiYgc3RybGVuIChidWZmZXIpICsg MSA8PSA4ID8gX19zdHJjcHlfc21hbGwgKGRpY3RpbmZpbGVuYW1lLCBfX2V4dGVuc2lvbl9fICgo KF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChidWZmZXIpKVswICsg MV0gPDwgOCB8ICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKGJ1 ZmZlcikpWzBdKSwgX19leHRlbnNpb25fXyAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9f Y29uc3QgY2hhciAqKSAoYnVmZmVyKSlbNCArIDFdIDw8IDggfCAoKF9fY29uc3QgdW5zaWduZWQg Y2hhciAqKSAoX19jb25zdCBjaGFyICopIChidWZmZXIpKVs0XSksIF9fZXh0ZW5zaW9uX18gKCgo KChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoYnVmZmVyKSlbMCAr IDNdIDw8IDggfCAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChi dWZmZXIpKVswICsgMl0pIDw8IDggfCAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25z dCBjaGFyICopIChidWZmZXIpKVswICsgMV0pIDw8IDggfCAoKF9fY29uc3QgdW5zaWduZWQgY2hh ciAqKSAoX19jb25zdCBjaGFyICopIChidWZmZXIpKVswXSksIF9fZXh0ZW5zaW9uX18gKCgoKChf X2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoYnVmZmVyKSlbNCArIDNd IDw8IDggfCAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChidWZm ZXIpKVs0ICsgMl0pIDw8IDggfCAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBj aGFyICopIChidWZmZXIpKVs0ICsgMV0pIDw8IDggfCAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAq KSAoX19jb25zdCBjaGFyICopIChidWZmZXIpKVs0XSksIHN0cmxlbiAoYnVmZmVyKSArIDEpIDog KGNoYXIgKikgbWVtY3B5IChkaWN0aW5maWxlbmFtZSwgYnVmZmVyLCBzdHJsZW4gKGJ1ZmZlcikg KyAxKSkgOiBzdHJjcHkgKGRpY3RpbmZpbGVuYW1lLCBidWZmZXIpKSk7CiAgICAgICAgICAgICAg ICAgICAgICAgIGNvdW50ZXI9MDsKCgogICAgICAgICAgICAgICAgICAgICAgICBmcmVhZCAoaW5w dXRjaGFyLCAxLCAxLCByZWFkc2VzKTsKICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKChp bnB1dGNoYXJbMF0gIT0gMTApICYmIChpbnB1dGNoYXJbMF0gIT0gMTMpKQogICAgICAgICAgICAg ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyW2NvdW50 ZXJdID0gaW5wdXRjaGFyWzBdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50 ZXIrKzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmVhZCAoaW5wdXRjaGFyLCAx LCAxLCByZWFkc2VzKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg ICAgICAgICBidWZmZXJbY291bnRlcl0gPSAnXDAnOwogICAgICAgICAgICAgICAgICAgICAgICBw cmludGYgKCJcblxuJXMiLCBidWZmZXIpOwogICAgICAgICAgICAgICAgfQogICAgICAgIGNvdW50 ZXI9MDsKCiAgICAgICAgaWYgKGRpY3RhdHRhY2spCiAgICAgICAgICAgICAgICB7CiAgICAgICAg ICAgICAgICAgICAgICAgIGlmIChydW5kaWN0YXR0YWNrKQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50 ZiAoIlxuUGFyc2luZyBEaWN0aW9uYXJ5IChMb2FkaW5nIGludG8gUkFNKS4uLlxuIik7CiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZWR3b3JkcyAoZGljdGluZmls ZW5hbWUpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRjdXJyID0g KHN0cnVjdCBzdG9yZWR3ICopZGhlYWQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBwcmludGYgKCJcbkRvbmUhXG4iKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGZmbHVzaCAoc3Rkb3V0KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB9CiMgMTExMSAiQnJlYWtEb3duLmMiCiAgICAgICAgICAgICAgICB9CgoKICAgICAgICBs dmw2OgogICAgICAgIHdoaWxlIChfX2V4dGVuc2lvbl9fICh7IHNpemVfdCBfX3MxX2xlbiwgX19z Ml9sZW47IChfX2J1aWx0aW5fY29uc3RhbnRfcCAoYnVmZmVyKSAmJiBfX2J1aWx0aW5fY29uc3Rh bnRfcCAoIkxhc3QgV29yZDoiKSAmJiAoX19zMV9sZW4gPSBzdHJsZW4gKGJ1ZmZlciksIF9fczJf bGVuID0gc3RybGVuICgiTGFzdCBXb3JkOiIpLCAoISgoc2l6ZV90KShjb25zdCB2b2lkICopKChi dWZmZXIpICsgMSkgLSAoc2l6ZV90KShjb25zdCB2b2lkICopKGJ1ZmZlcikgPT0gMSkgfHwgX19z MV9sZW4gPj0gNCkgJiYgKCEoKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgoIkxhc3QgV29yZDoiKSAr IDEpIC0gKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgiTGFzdCBXb3JkOiIpID09IDEpIHx8IF9fczJf bGVuID49IDQpKSA/IG1lbWNtcCAoKF9fY29uc3QgY2hhciAqKSAoYnVmZmVyKSwgKF9fY29uc3Qg Y2hhciAqKSAoIkxhc3QgV29yZDoiKSwgKF9fczFfbGVuIDwgX19zMl9sZW4gPyBfX3MxX2xlbiA6 IF9fczJfbGVuKSArIDEpIDogKF9fYnVpbHRpbl9jb25zdGFudF9wIChidWZmZXIpICYmICgoc2l6 ZV90KShjb25zdCB2b2lkICopKChidWZmZXIpICsgMSkgLSAoc2l6ZV90KShjb25zdCB2b2lkICop KGJ1ZmZlcikgPT0gMSkgJiYgKF9fczFfbGVuID0gc3RybGVuIChidWZmZXIpLCBfX3MxX2xlbiA8 IDQpID8gKF9fYnVpbHRpbl9jb25zdGFudF9wICgiTGFzdCBXb3JkOiIpICYmICgoc2l6ZV90KShj b25zdCB2b2lkICopKCgiTGFzdCBXb3JkOiIpICsgMSkgLSAoc2l6ZV90KShjb25zdCB2b2lkICop KCJMYXN0IFdvcmQ6IikgPT0gMSkgPyAoX19leHRlbnNpb25fXyAoeyByZWdpc3RlciBpbnQgX19y ZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoYnVm ZmVyKSlbMF0gLSAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopKCJM YXN0IFdvcmQ6IikpWzBdKTsgaWYgKF9fczFfbGVuID4gMCAmJiBfX3Jlc3VsdCA9PSAwKSB7IF9f cmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKGJ1 ZmZlcikpWzFdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAo Ikxhc3QgV29yZDoiKSlbMV0pOyBpZiAoX19zMV9sZW4gPiAxICYmIF9fcmVzdWx0ID09IDApIHsg X19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAo YnVmZmVyKSlbMl0gLSAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICop ICgiTGFzdCBXb3JkOiIpKVsyXSk7IGlmIChfX3MxX2xlbiA+IDIgJiYgX19yZXN1bHQgPT0gMCkg X19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAo YnVmZmVyKSlbM10gLSAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICop ICgiTGFzdCBXb3JkOiIpKVszXSk7IH0gfSBfX3Jlc3VsdDsgfSkpIDogKF9fZXh0ZW5zaW9uX18g KHsgX19jb25zdCB1bnNpZ25lZCBjaGFyICpfX3MyID0gKF9fY29uc3QgdW5zaWduZWQgY2hhciAq KSAoX19jb25zdCBjaGFyICopICgiTGFzdCBXb3JkOiIpOyByZWdpc3RlciBpbnQgX19yZXN1bHQg PSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoYnVmZmVyKSlb MF0gLSBfX3MyWzBdKTsgaWYgKF9fczFfbGVuID4gMCAmJiBfX3Jlc3VsdCA9PSAwKSB7IF9fcmVz dWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKGJ1ZmZl cikpWzFdIC0gX19zMlsxXSk7IGlmIChfX3MxX2xlbiA+IDEgJiYgX19yZXN1bHQgPT0gMCkgeyBf X3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChi dWZmZXIpKVsyXSAtIF9fczJbMl0pOyBpZiAoX19zMV9sZW4gPiAyICYmIF9fcmVzdWx0ID09IDAp IF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikg KGJ1ZmZlcikpWzNdIC0gX19zMlszXSk7IH0gfSBfX3Jlc3VsdDsgfSkpKSA6IChfX2J1aWx0aW5f Y29uc3RhbnRfcCAoIkxhc3QgV29yZDoiKSAmJiAoKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgoIkxh c3QgV29yZDoiKSArIDEpIC0gKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgiTGFzdCBXb3JkOiIpID09 IDEpICYmIChfX3MyX2xlbiA9IHN0cmxlbiAoIkxhc3QgV29yZDoiKSwgX19zMl9sZW4gPCA0KSA/ IChfX2J1aWx0aW5fY29uc3RhbnRfcCAoYnVmZmVyKSAmJiAoKHNpemVfdCkoY29uc3Qgdm9pZCAq KSgoYnVmZmVyKSArIDEpIC0gKHNpemVfdCkoY29uc3Qgdm9pZCAqKShidWZmZXIpID09IDEpID8g KF9fZXh0ZW5zaW9uX18gKHsgcmVnaXN0ZXIgaW50IF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNp Z25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKGJ1ZmZlcikpWzBdIC0gKChfX2NvbnN0IHVu c2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSgiTGFzdCBXb3JkOiIpKVswXSk7IGlmIChf X3MyX2xlbiA+IDAgJiYgX19yZXN1bHQgPT0gMCkgeyBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5z aWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChidWZmZXIpKVsxXSAtICgoX19jb25zdCB1 bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKCJMYXN0IFdvcmQ6IikpWzFdKTsgaWYg KF9fczJfbGVuID4gMSAmJiBfX3Jlc3VsdCA9PSAwKSB7IF9fcmVzdWx0ID0gKCgoX19jb25zdCB1 bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKGJ1ZmZlcikpWzJdIC0gKChfX2NvbnN0 IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoIkxhc3QgV29yZDoiKSlbMl0pOyBp ZiAoX19zMl9sZW4gPiAyICYmIF9fcmVzdWx0ID09IDApIF9fcmVzdWx0ID0gKCgoX19jb25zdCB1 bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKGJ1ZmZlcikpWzNdIC0gKChfX2NvbnN0 IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoIkxhc3QgV29yZDoiKSlbM10pOyB9 IH0gX19yZXN1bHQ7IH0pKSA6IChfX2V4dGVuc2lvbl9fICh7IF9fY29uc3QgdW5zaWduZWQgY2hh ciAqX19zMSA9IChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoYnVm ZmVyKTsgcmVnaXN0ZXIgaW50IF9fcmVzdWx0ID0gX19zMVswXSAtICgoX19jb25zdCB1bnNpZ25l ZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKCJMYXN0IFdvcmQ6IikpWzBdOyBpZiAoX19zMl9s ZW4gPiAwICYmIF9fcmVzdWx0ID09IDApIHsgX19yZXN1bHQgPSAoX19zMVsxXSAtICgoX19jb25z dCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKCJMYXN0IFdvcmQ6IikpWzFdKTsg aWYgKF9fczJfbGVuID4gMSAmJiBfX3Jlc3VsdCA9PSAwKSB7IF9fcmVzdWx0ID0gKF9fczFbMl0g LSAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopICgiTGFzdCBXb3Jk OiIpKVsyXSk7IGlmIChfX3MyX2xlbiA+IDIgJiYgX19yZXN1bHQgPT0gMCkgX19yZXN1bHQgPSAo X19zMVszXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKCJM YXN0IFdvcmQ6IikpWzNdKTsgfSB9IF9fcmVzdWx0OyB9KSkpIDogc3RyY21wIChidWZmZXIsICJM YXN0IFdvcmQ6IikpKSk7IH0pICE9IDApCiAgICAgICAgewogICAgICAgICAgICAgICAgZnJlYWQg KGlucHV0Y2hhciwgMSwgMSwgcmVhZHNlcyk7CiAgICAgICAgICAgICAgICB3aGlsZSAoKGlucHV0 Y2hhclswXSAhPSAxMCkgJiYgKGlucHV0Y2hhclswXSAhPSAxMykpCiAgICAgICAgICAgICAgICB7 CiAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcltjb3VudGVyXSA9IGlucHV0Y2hhclswXTsK ICAgICAgICAgICAgICAgICAgICAgICAgY291bnRlcisrOwogICAgICAgICAgICAgICAgICAgICAg ICBmcmVhZCAoaW5wdXRjaGFyLCAxLCAxLCByZWFkc2VzKTsKICAgICAgICAgICAgICAgIH0KICAg ICAgICAgICAgICAgIGJ1ZmZlcltjb3VudGVyXSA9ICdcMCc7CiAgICAgICAgICAgICAgICBpZiAo X19leHRlbnNpb25fXyAoeyBzaXplX3QgX19zMV9sZW4sIF9fczJfbGVuOyAoX19idWlsdGluX2Nv bnN0YW50X3AgKGJ1ZmZlcikgJiYgX19idWlsdGluX2NvbnN0YW50X3AgKCJMYXN0IFdvcmQ6Iikg JiYgKF9fczFfbGVuID0gc3RybGVuIChidWZmZXIpLCBfX3MyX2xlbiA9IHN0cmxlbiAoIkxhc3Qg V29yZDoiKSwgKCEoKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgoYnVmZmVyKSArIDEpIC0gKHNpemVf dCkoY29uc3Qgdm9pZCAqKShidWZmZXIpID09IDEpIHx8IF9fczFfbGVuID49IDQpICYmICghKChz aXplX3QpKGNvbnN0IHZvaWQgKikoKCJMYXN0IFdvcmQ6IikgKyAxKSAtIChzaXplX3QpKGNvbnN0 IHZvaWQgKikoIkxhc3QgV29yZDoiKSA9PSAxKSB8fCBfX3MyX2xlbiA+PSA0KSkgPyBtZW1jbXAg KChfX2NvbnN0IGNoYXIgKikgKGJ1ZmZlciksIChfX2NvbnN0IGNoYXIgKikgKCJMYXN0IFdvcmQ6 IiksIChfX3MxX2xlbiA8IF9fczJfbGVuID8gX19zMV9sZW4gOiBfX3MyX2xlbikgKyAxKSA6IChf X2J1aWx0aW5fY29uc3RhbnRfcCAoYnVmZmVyKSAmJiAoKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgo YnVmZmVyKSArIDEpIC0gKHNpemVfdCkoY29uc3Qgdm9pZCAqKShidWZmZXIpID09IDEpICYmIChf X3MxX2xlbiA9IHN0cmxlbiAoYnVmZmVyKSwgX19zMV9sZW4gPCA0KSA/IChfX2J1aWx0aW5fY29u c3RhbnRfcCAoIkxhc3QgV29yZDoiKSAmJiAoKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgoIkxhc3Qg V29yZDoiKSArIDEpIC0gKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgiTGFzdCBXb3JkOiIpID09IDEp ID8gKF9fZXh0ZW5zaW9uX18gKHsgcmVnaXN0ZXIgaW50IF9fcmVzdWx0ID0gKCgoX19jb25zdCB1 bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKGJ1ZmZlcikpWzBdIC0gKChfX2NvbnN0 IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSgiTGFzdCBXb3JkOiIpKVswXSk7IGlm IChfX3MxX2xlbiA+IDAgJiYgX19yZXN1bHQgPT0gMCkgeyBfX3Jlc3VsdCA9ICgoKF9fY29uc3Qg dW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChidWZmZXIpKVsxXSAtICgoX19jb25z dCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKCJMYXN0IFdvcmQ6IikpWzFdKTsg aWYgKF9fczFfbGVuID4gMSAmJiBfX3Jlc3VsdCA9PSAwKSB7IF9fcmVzdWx0ID0gKCgoX19jb25z dCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKGJ1ZmZlcikpWzJdIC0gKChfX2Nv bnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoIkxhc3QgV29yZDoiKSlbMl0p OyBpZiAoX19zMV9sZW4gPiAyICYmIF9fcmVzdWx0ID09IDApIF9fcmVzdWx0ID0gKCgoX19jb25z dCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKGJ1ZmZlcikpWzNdIC0gKChfX2Nv bnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoIkxhc3QgV29yZDoiKSlbM10p OyB9IH0gX19yZXN1bHQ7IH0pKSA6IChfX2V4dGVuc2lvbl9fICh7IF9fY29uc3QgdW5zaWduZWQg Y2hhciAqX19zMiA9IChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAo Ikxhc3QgV29yZDoiKTsgcmVnaXN0ZXIgaW50IF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25l ZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKGJ1ZmZlcikpWzBdIC0gX19zMlswXSk7IGlmIChf X3MxX2xlbiA+IDAgJiYgX19yZXN1bHQgPT0gMCkgeyBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5z aWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChidWZmZXIpKVsxXSAtIF9fczJbMV0pOyBp ZiAoX19zMV9sZW4gPiAxICYmIF9fcmVzdWx0ID09IDApIHsgX19yZXN1bHQgPSAoKChfX2NvbnN0 IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoYnVmZmVyKSlbMl0gLSBfX3MyWzJd KTsgaWYgKF9fczFfbGVuID4gMiAmJiBfX3Jlc3VsdCA9PSAwKSBfX3Jlc3VsdCA9ICgoKF9fY29u c3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChidWZmZXIpKVszXSAtIF9fczJb M10pOyB9IH0gX19yZXN1bHQ7IH0pKSkgOiAoX19idWlsdGluX2NvbnN0YW50X3AgKCJMYXN0IFdv cmQ6IikgJiYgKChzaXplX3QpKGNvbnN0IHZvaWQgKikoKCJMYXN0IFdvcmQ6IikgKyAxKSAtIChz aXplX3QpKGNvbnN0IHZvaWQgKikoIkxhc3QgV29yZDoiKSA9PSAxKSAmJiAoX19zMl9sZW4gPSBz dHJsZW4gKCJMYXN0IFdvcmQ6IiksIF9fczJfbGVuIDwgNCkgPyAoX19idWlsdGluX2NvbnN0YW50 X3AgKGJ1ZmZlcikgJiYgKChzaXplX3QpKGNvbnN0IHZvaWQgKikoKGJ1ZmZlcikgKyAxKSAtIChz aXplX3QpKGNvbnN0IHZvaWQgKikoYnVmZmVyKSA9PSAxKSA/IChfX2V4dGVuc2lvbl9fICh7IHJl Z2lzdGVyIGludCBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25z dCBjaGFyICopIChidWZmZXIpKVswXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2Nv bnN0IGNoYXIgKikoIkxhc3QgV29yZDoiKSlbMF0pOyBpZiAoX19zMl9sZW4gPiAwICYmIF9fcmVz dWx0ID09IDApIHsgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29u c3QgY2hhciAqKSAoYnVmZmVyKSlbMV0gLSAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19j b25zdCBjaGFyICopICgiTGFzdCBXb3JkOiIpKVsxXSk7IGlmIChfX3MyX2xlbiA+IDEgJiYgX19y ZXN1bHQgPT0gMCkgeyBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19j b25zdCBjaGFyICopIChidWZmZXIpKVsyXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChf X2NvbnN0IGNoYXIgKikgKCJMYXN0IFdvcmQ6IikpWzJdKTsgaWYgKF9fczJfbGVuID4gMiAmJiBf X3Jlc3VsdCA9PSAwKSBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19j b25zdCBjaGFyICopIChidWZmZXIpKVszXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChf X2NvbnN0IGNoYXIgKikgKCJMYXN0IFdvcmQ6IikpWzNdKTsgfSB9IF9fcmVzdWx0OyB9KSkgOiAo X19leHRlbnNpb25fXyAoeyBfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKl9fczEgPSAoX19jb25zdCB1 bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKGJ1ZmZlcik7IHJlZ2lzdGVyIGludCBf X3Jlc3VsdCA9IF9fczFbMF0gLSAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBj aGFyICopICgiTGFzdCBXb3JkOiIpKVswXTsgaWYgKF9fczJfbGVuID4gMCAmJiBfX3Jlc3VsdCA9 PSAwKSB7IF9fcmVzdWx0ID0gKF9fczFbMV0gLSAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAo X19jb25zdCBjaGFyICopICgiTGFzdCBXb3JkOiIpKVsxXSk7IGlmIChfX3MyX2xlbiA+IDEgJiYg X19yZXN1bHQgPT0gMCkgeyBfX3Jlc3VsdCA9IChfX3MxWzJdIC0gKChfX2NvbnN0IHVuc2lnbmVk IGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoIkxhc3QgV29yZDoiKSlbMl0pOyBpZiAoX19zMl9s ZW4gPiAyICYmIF9fcmVzdWx0ID09IDApIF9fcmVzdWx0ID0gKF9fczFbM10gLSAoKF9fY29uc3Qg dW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopICgiTGFzdCBXb3JkOiIpKVszXSk7IH0g fSBfX3Jlc3VsdDsgfSkpKSA6IHN0cmNtcCAoYnVmZmVyLCAiTGFzdCBXb3JkOiIpKSkpOyB9KSAh PSAwKQogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgaWYgKCF1c2Vkc3RhdGljcGFkZHJlc3MpCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIChfX2V4dGVuc2lvbl9fIChfX2J1aWx0aW5fY29uc3RhbnRfcCAoYnVmZmVyKSA/ICgo KHNpemVfdCkoY29uc3Qgdm9pZCAqKSgoYnVmZmVyKSArIDEpIC0gKHNpemVfdCkoY29uc3Qgdm9p ZCAqKShidWZmZXIpID09IDEpICYmIHN0cmxlbiAoYnVmZmVyKSArIDEgPD0gOCA/IF9fc3RyY3B5 X3NtYWxsIChsb2NhbHBjdXJyLT5zdG9yZWRwd29yZCwgX19leHRlbnNpb25fXyAoKChfX2NvbnN0 IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoYnVmZmVyKSlbMCArIDFdIDw8IDgg fCAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChidWZmZXIpKVsw XSksIF9fZXh0ZW5zaW9uX18gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNo YXIgKikgKGJ1ZmZlcikpWzQgKyAxXSA8PCA4IHwgKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikg KF9fY29uc3QgY2hhciAqKSAoYnVmZmVyKSlbNF0pLCBfX2V4dGVuc2lvbl9fICgoKCgoX19jb25z dCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKGJ1ZmZlcikpWzAgKyAzXSA8PCA4 IHwgKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoYnVmZmVyKSlb MCArIDJdKSA8PCA4IHwgKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAq KSAoYnVmZmVyKSlbMCArIDFdKSA8PCA4IHwgKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9f Y29uc3QgY2hhciAqKSAoYnVmZmVyKSlbMF0pLCBfX2V4dGVuc2lvbl9fICgoKCgoX19jb25zdCB1 bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKGJ1ZmZlcikpWzQgKyAzXSA8PCA4IHwg KChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoYnVmZmVyKSlbNCAr IDJdKSA8PCA4IHwgKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAo YnVmZmVyKSlbNCArIDFdKSA8PCA4IHwgKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29u c3QgY2hhciAqKSAoYnVmZmVyKSlbNF0pLCBzdHJsZW4gKGJ1ZmZlcikgKyAxKSA6IChjaGFyICop IG1lbWNweSAobG9jYWxwY3Vyci0+c3RvcmVkcHdvcmQsIGJ1ZmZlciwgc3RybGVuIChidWZmZXIp ICsgMSkpIDogc3RyY3B5IChsb2NhbHBjdXJyLT5zdG9yZWRwd29yZCwgYnVmZmVyKSkpOwogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2Vkc3RhdGljcGFk ZHJlc3MgPSAxOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgYWRkcHcgKGJ1ZmZlcik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIG1vcmV0aGFub25lcGFzc3dvcmQgPSAxOwogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAg ICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZiAoIlxuIik7CiAg ICAgICAgICAgICAgICBwcmludGYgKCJcbiVzIiwgYnVmZmVyKTsKICAgICAgICAgICAgICAgIGNv dW50ZXIgPSAwOwogICAgICAgIH0KCgogICAgICAgIGx2bDc6CiAgICAgICAgZnJlYWQgKGlucHV0 Y2hhciwgMSwgMSwgcmVhZHNlcyk7CiAgICAgICAgd2hpbGUgKChpbnB1dGNoYXJbMF0gIT0gMTAp ICYmIChpbnB1dGNoYXJbMF0gIT0gMTMpICYmIChmZW9mKHJlYWRzZXMpID09IDApKQogICAgICAg IHsKICAgICAgICAgICAgICAgIGJ1ZmZlcltjb3VudGVyXSA9IGlucHV0Y2hhclswXTsKICAgICAg ICAgICAgICAgIGNvdW50ZXIrKzsKICAgICAgICAgICAgICAgIGZyZWFkIChpbnB1dGNoYXIsIDEs IDEsIHJlYWRzZXMpOwogICAgICAgIH0KICAgICAgICBidWZmZXJbY291bnRlcl0gPSAnXDAnOwog ICAgICAgIHByaW50ZiAoIiVzIiwgYnVmZmVyKTsKICAgICAgICBpZiAocnVuYnJ1dGVmb3JjZSkK ICAgICAgICAgICAgICAgIChfX2V4dGVuc2lvbl9fIChfX2J1aWx0aW5fY29uc3RhbnRfcCAoYnVm ZmVyKSA/ICgoKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgoYnVmZmVyKSArIDEpIC0gKHNpemVfdCko Y29uc3Qgdm9pZCAqKShidWZmZXIpID09IDEpICYmIHN0cmxlbiAoYnVmZmVyKSArIDEgPD0gOCA/ IF9fc3RyY3B5X3NtYWxsICh0ZXN0cGFzcywgX19leHRlbnNpb25fXyAoKChfX2NvbnN0IHVuc2ln bmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoYnVmZmVyKSlbMCArIDFdIDw8IDggfCAoKF9f Y29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChidWZmZXIpKVswXSksIF9f ZXh0ZW5zaW9uX18gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikg KGJ1ZmZlcikpWzQgKyAxXSA8PCA4IHwgKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29u c3QgY2hhciAqKSAoYnVmZmVyKSlbNF0pLCBfX2V4dGVuc2lvbl9fICgoKCgoX19jb25zdCB1bnNp Z25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKGJ1ZmZlcikpWzAgKyAzXSA8PCA4IHwgKChf X2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoYnVmZmVyKSlbMCArIDJd KSA8PCA4IHwgKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoYnVm ZmVyKSlbMCArIDFdKSA8PCA4IHwgKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3Qg Y2hhciAqKSAoYnVmZmVyKSlbMF0pLCBfX2V4dGVuc2lvbl9fICgoKCgoX19jb25zdCB1bnNpZ25l ZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKGJ1ZmZlcikpWzQgKyAzXSA8PCA4IHwgKChfX2Nv bnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoYnVmZmVyKSlbNCArIDJdKSA8 PCA4IHwgKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoYnVmZmVy KSlbNCArIDFdKSA8PCA4IHwgKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hh ciAqKSAoYnVmZmVyKSlbNF0pLCBzdHJsZW4gKGJ1ZmZlcikgKyAxKSA6IChjaGFyICopIG1lbWNw eSAodGVzdHBhc3MsIGJ1ZmZlciwgc3RybGVuIChidWZmZXIpICsgMSkpIDogc3RyY3B5ICh0ZXN0 cGFzcywgYnVmZmVyKSkpOwogICAgICAgIGlmIChydW5kaWN0YXR0YWNrKQogICAgICAgICAgICAg ICAgewoKICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKF9fZXh0ZW5zaW9uX18gKHsgc2l6 ZV90IF9fczFfbGVuLCBfX3MyX2xlbjsgKF9fYnVpbHRpbl9jb25zdGFudF9wIChkY3Vyci0+dGVz dGR3b3JkKSAmJiBfX2J1aWx0aW5fY29uc3RhbnRfcCAoYnVmZmVyKSAmJiAoX19zMV9sZW4gPSBz dHJsZW4gKGRjdXJyLT50ZXN0ZHdvcmQpLCBfX3MyX2xlbiA9IHN0cmxlbiAoYnVmZmVyKSwgKCEo KHNpemVfdCkoY29uc3Qgdm9pZCAqKSgoZGN1cnItPnRlc3Rkd29yZCkgKyAxKSAtIChzaXplX3Qp KGNvbnN0IHZvaWQgKikoZGN1cnItPnRlc3Rkd29yZCkgPT0gMSkgfHwgX19zMV9sZW4gPj0gNCkg JiYgKCEoKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgoYnVmZmVyKSArIDEpIC0gKHNpemVfdCkoY29u c3Qgdm9pZCAqKShidWZmZXIpID09IDEpIHx8IF9fczJfbGVuID49IDQpKSA/IG1lbWNtcCAoKF9f Y29uc3QgY2hhciAqKSAoZGN1cnItPnRlc3Rkd29yZCksIChfX2NvbnN0IGNoYXIgKikgKGJ1ZmZl ciksIChfX3MxX2xlbiA8IF9fczJfbGVuID8gX19zMV9sZW4gOiBfX3MyX2xlbikgKyAxKSA6IChf X2J1aWx0aW5fY29uc3RhbnRfcCAoZGN1cnItPnRlc3Rkd29yZCkgJiYgKChzaXplX3QpKGNvbnN0 IHZvaWQgKikoKGRjdXJyLT50ZXN0ZHdvcmQpICsgMSkgLSAoc2l6ZV90KShjb25zdCB2b2lkICop KGRjdXJyLT50ZXN0ZHdvcmQpID09IDEpICYmIChfX3MxX2xlbiA9IHN0cmxlbiAoZGN1cnItPnRl c3Rkd29yZCksIF9fczFfbGVuIDwgNCkgPyAoX19idWlsdGluX2NvbnN0YW50X3AgKGJ1ZmZlcikg JiYgKChzaXplX3QpKGNvbnN0IHZvaWQgKikoKGJ1ZmZlcikgKyAxKSAtIChzaXplX3QpKGNvbnN0 IHZvaWQgKikoYnVmZmVyKSA9PSAxKSA/IChfX2V4dGVuc2lvbl9fICh7IHJlZ2lzdGVyIGludCBf X3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChk Y3Vyci0+dGVzdGR3b3JkKSlbMF0gLSAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25z dCBjaGFyICopKGJ1ZmZlcikpWzBdKTsgaWYgKF9fczFfbGVuID4gMCAmJiBfX3Jlc3VsdCA9PSAw KSB7IF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIg KikgKGRjdXJyLT50ZXN0ZHdvcmQpKVsxXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChf X2NvbnN0IGNoYXIgKikgKGJ1ZmZlcikpWzFdKTsgaWYgKF9fczFfbGVuID4gMSAmJiBfX3Jlc3Vs dCA9PSAwKSB7IF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0 IGNoYXIgKikgKGRjdXJyLT50ZXN0ZHdvcmQpKVsyXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFy ICopIChfX2NvbnN0IGNoYXIgKikgKGJ1ZmZlcikpWzJdKTsgaWYgKF9fczFfbGVuID4gMiAmJiBf X3Jlc3VsdCA9PSAwKSBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19j b25zdCBjaGFyICopIChkY3Vyci0+dGVzdGR3b3JkKSlbM10gLSAoKF9fY29uc3QgdW5zaWduZWQg Y2hhciAqKSAoX19jb25zdCBjaGFyICopIChidWZmZXIpKVszXSk7IH0gfSBfX3Jlc3VsdDsgfSkp IDogKF9fZXh0ZW5zaW9uX18gKHsgX19jb25zdCB1bnNpZ25lZCBjaGFyICpfX3MyID0gKF9fY29u c3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChidWZmZXIpOyByZWdpc3RlciBp bnQgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAq KSAoZGN1cnItPnRlc3Rkd29yZCkpWzBdIC0gX19zMlswXSk7IGlmIChfX3MxX2xlbiA+IDAgJiYg X19yZXN1bHQgPT0gMCkgeyBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAo X19jb25zdCBjaGFyICopIChkY3Vyci0+dGVzdGR3b3JkKSlbMV0gLSBfX3MyWzFdKTsgaWYgKF9f czFfbGVuID4gMSAmJiBfX3Jlc3VsdCA9PSAwKSB7IF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNp Z25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKGRjdXJyLT50ZXN0ZHdvcmQpKVsyXSAtIF9f czJbMl0pOyBpZiAoX19zMV9sZW4gPiAyICYmIF9fcmVzdWx0ID09IDApIF9fcmVzdWx0ID0gKCgo X19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKGRjdXJyLT50ZXN0ZHdv cmQpKVszXSAtIF9fczJbM10pOyB9IH0gX19yZXN1bHQ7IH0pKSkgOiAoX19idWlsdGluX2NvbnN0 YW50X3AgKGJ1ZmZlcikgJiYgKChzaXplX3QpKGNvbnN0IHZvaWQgKikoKGJ1ZmZlcikgKyAxKSAt IChzaXplX3QpKGNvbnN0IHZvaWQgKikoYnVmZmVyKSA9PSAxKSAmJiAoX19zMl9sZW4gPSBzdHJs ZW4gKGJ1ZmZlciksIF9fczJfbGVuIDwgNCkgPyAoX19idWlsdGluX2NvbnN0YW50X3AgKGRjdXJy LT50ZXN0ZHdvcmQpICYmICgoc2l6ZV90KShjb25zdCB2b2lkICopKChkY3Vyci0+dGVzdGR3b3Jk KSArIDEpIC0gKHNpemVfdCkoY29uc3Qgdm9pZCAqKShkY3Vyci0+dGVzdGR3b3JkKSA9PSAxKSA/ IChfX2V4dGVuc2lvbl9fICh7IHJlZ2lzdGVyIGludCBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5z aWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChkY3Vyci0+dGVzdGR3b3JkKSlbMF0gLSAo KF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopKGJ1ZmZlcikpWzBdKTsg aWYgKF9fczJfbGVuID4gMCAmJiBfX3Jlc3VsdCA9PSAwKSB7IF9fcmVzdWx0ID0gKCgoX19jb25z dCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKGRjdXJyLT50ZXN0ZHdvcmQpKVsx XSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKGJ1ZmZlcikp WzFdKTsgaWYgKF9fczJfbGVuID4gMSAmJiBfX3Jlc3VsdCA9PSAwKSB7IF9fcmVzdWx0ID0gKCgo X19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKGRjdXJyLT50ZXN0ZHdv cmQpKVsyXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKGJ1 ZmZlcikpWzJdKTsgaWYgKF9fczJfbGVuID4gMiAmJiBfX3Jlc3VsdCA9PSAwKSBfX3Jlc3VsdCA9 ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChkY3Vyci0+dGVz dGR3b3JkKSlbM10gLSAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICop IChidWZmZXIpKVszXSk7IH0gfSBfX3Jlc3VsdDsgfSkpIDogKF9fZXh0ZW5zaW9uX18gKHsgX19j b25zdCB1bnNpZ25lZCBjaGFyICpfX3MxID0gKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19j b25zdCBjaGFyICopIChkY3Vyci0+dGVzdGR3b3JkKTsgcmVnaXN0ZXIgaW50IF9fcmVzdWx0ID0g X19zMVswXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKGJ1 ZmZlcikpWzBdOyBpZiAoX19zMl9sZW4gPiAwICYmIF9fcmVzdWx0ID09IDApIHsgX19yZXN1bHQg PSAoX19zMVsxXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikg KGJ1ZmZlcikpWzFdKTsgaWYgKF9fczJfbGVuID4gMSAmJiBfX3Jlc3VsdCA9PSAwKSB7IF9fcmVz dWx0ID0gKF9fczFbMl0gLSAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFy ICopIChidWZmZXIpKVsyXSk7IGlmIChfX3MyX2xlbiA+IDIgJiYgX19yZXN1bHQgPT0gMCkgX19y ZXN1bHQgPSAoX19zMVszXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNo YXIgKikgKGJ1ZmZlcikpWzNdKTsgfSB9IF9fcmVzdWx0OyB9KSkpIDogc3RyY21wIChkY3Vyci0+ dGVzdGR3b3JkLCBidWZmZXIpKSkpOyB9KSAhPSAwKQogICAgICAgICAgICAgICAgICAgICAgICB7 CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGN1cnI9ZGN1cnItPm5leHQ7CiAgICAg ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgKF9fZXh0ZW5zaW9u X18gKF9fYnVpbHRpbl9jb25zdGFudF9wIChkY3Vyci0+dGVzdGR3b3JkKSA/ICgoKHNpemVfdCko Y29uc3Qgdm9pZCAqKSgoZGN1cnItPnRlc3Rkd29yZCkgKyAxKSAtIChzaXplX3QpKGNvbnN0IHZv aWQgKikoZGN1cnItPnRlc3Rkd29yZCkgPT0gMSkgJiYgc3RybGVuIChkY3Vyci0+dGVzdGR3b3Jk KSArIDEgPD0gOCA/IF9fc3RyY3B5X3NtYWxsICh0ZXN0cGFzcywgX19leHRlbnNpb25fXyAoKChf X2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoZGN1cnItPnRlc3Rkd29y ZCkpWzAgKyAxXSA8PCA4IHwgKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hh ciAqKSAoZGN1cnItPnRlc3Rkd29yZCkpWzBdKSwgX19leHRlbnNpb25fXyAoKChfX2NvbnN0IHVu c2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoZGN1cnItPnRlc3Rkd29yZCkpWzQgKyAx XSA8PCA4IHwgKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoZGN1 cnItPnRlc3Rkd29yZCkpWzRdKSwgX19leHRlbnNpb25fXyAoKCgoKF9fY29uc3QgdW5zaWduZWQg Y2hhciAqKSAoX19jb25zdCBjaGFyICopIChkY3Vyci0+dGVzdGR3b3JkKSlbMCArIDNdIDw8IDgg fCAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChkY3Vyci0+dGVz dGR3b3JkKSlbMCArIDJdKSA8PCA4IHwgKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29u c3QgY2hhciAqKSAoZGN1cnItPnRlc3Rkd29yZCkpWzAgKyAxXSkgPDwgOCB8ICgoX19jb25zdCB1 bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKGRjdXJyLT50ZXN0ZHdvcmQpKVswXSks IF9fZXh0ZW5zaW9uX18gKCgoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hh ciAqKSAoZGN1cnItPnRlc3Rkd29yZCkpWzQgKyAzXSA8PCA4IHwgKChfX2NvbnN0IHVuc2lnbmVk IGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoZGN1cnItPnRlc3Rkd29yZCkpWzQgKyAyXSkgPDwg OCB8ICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKGRjdXJyLT50 ZXN0ZHdvcmQpKVs0ICsgMV0pIDw8IDggfCAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19j b25zdCBjaGFyICopIChkY3Vyci0+dGVzdGR3b3JkKSlbNF0pLCBzdHJsZW4gKGRjdXJyLT50ZXN0 ZHdvcmQpICsgMSkgOiAoY2hhciAqKSBtZW1jcHkgKHRlc3RwYXNzLCBkY3Vyci0+dGVzdGR3b3Jk LCBzdHJsZW4gKGRjdXJyLT50ZXN0ZHdvcmQpICsgMSkpIDogc3RyY3B5ICh0ZXN0cGFzcywgZGN1 cnItPnRlc3Rkd29yZCkpKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICBjb3VudGVyPTA7CgoK CiAgICAgICAgZmZsdXNoIChyZWFkc2VzKTsKICAgICAgICBmY2xvc2UgKHJlYWRzZXMpOwoKfQo=