From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 19190 invoked by alias); 22 Feb 2003 19:06:00 -0000 Mailing-List: contact gcc-prs-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-prs-owner@gcc.gnu.org Received: (qmail 19173 invoked by uid 71); 22 Feb 2003 19:06:00 -0000 Resent-Date: 22 Feb 2003 19:06:00 -0000 Resent-Message-ID: <20030222190600.19171.qmail@sources.redhat.com> Resent-From: gcc-gnats@gcc.gnu.org (GNATS Filer) Resent-Cc: gcc-prs@gcc.gnu.org, gcc-bugs@gcc.gnu.org Resent-Reply-To: gcc-gnats@gcc.gnu.org, tilps@hotmail.com Received: (qmail 18746 invoked by uid 48); 22 Feb 2003 19:02:58 -0000 Message-Id: <20030222190258.18745.qmail@sources.redhat.com> Date: Sat, 22 Feb 2003 19:06:00 -0000 From: tilps@hotmail.com Reply-To: tilps@hotmail.com To: gcc-gnats@gcc.gnu.org X-Send-Pr-Version: gnatsweb-2.9.3 (1.1.1.1.2.31) Subject: optimization/9805: optimisation of largish array constant containing strings takes forever(?) and consumes very large amounts of memory X-SW-Source: 2003-02/txt/msg01124.txt.bz2 List-Id: >Number: 9805 >Category: optimization >Synopsis: optimisation of largish array constant containing strings takes forever(?) and consumes very large amounts of memory >Confidential: no >Severity: serious >Priority: medium >Responsible: unassigned >State: open >Class: sw-bug >Submitter-Id: net >Arrival-Date: Sat Feb 22 19:06:00 UTC 2003 >Closed-Date: >Last-Modified: >Originator: tilps@hotmail.com >Release: gcc 3.4 - 20030222 >Organization: >Environment: $ gcctesting/bin/g++ -v Reading specs from /home/Administrator/gcctesting/bin/../lib/gcc-lib/i686-pc-cyg win/3.4/specs Configured with: ../gcc/configure --prefix=~/gcctesting/ --enable-version-specif ic-runtime-libs --enable-threads=posix --enable-shared : (reconfigured) ../gcc/c onfigure --prefix=/home/Administrator/gcctesting/ --enable-version-specific-runt ime-libs --enable-threads=posix --enable-shared Thread model: posix gcc version 3.4 20030222 (experimental) >Description: uses ~300meg - and i wasnt patient enough to see if it ever completed. Without optimisation compiles rapidly. also duplicated on redhat 8 - running same date gcc mainline. also duplicated with redhat 8 default compiler (3.2) - and cygwin default compiler (3.2 - cygwin branch) preprocessed source isnt exactly minimised - but its smaller then it was. (60% smaller - not to bad considering >90% of this one is in the first line) >How-To-Repeat: g++ -O constants.ii or -O2 ... >Fix: workarounds. reduce the size of the array (only having 2 of the 9 first level entries in the array compiles quite reasonably) change sstring_t title_m; to const char* title_m; in the titles class. >Release-Note: >Audit-Trail: >Unformatted: ----gnatsweb-attachment---- Content-Type: application/octet-stream; name="constants.ii" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="constants.ii" IyAxICJjb25zdGFudHMuY2MiCiMgMSAiPGJ1aWx0LWluPiIKIyAxICI8Y29tbWFuZCBsaW5lPiIK IyAxICJjb25zdGFudHMuY2MiCiMgMSAiL2hvbWUvQWRtaW5pc3RyYXRvci9nY2N0ZXN0aW5nL2xp Yi9nY2MtbGliL2k2ODYtcGMtY3lnd2luLzMuNC9pbmNsdWRlL2MrKy9zdHJpbmciIDEgMwojIDQ0 ICIvaG9tZS9BZG1pbmlzdHJhdG9yL2djY3Rlc3RpbmcvbGliL2djYy1saWIvaTY4Ni1wYy1jeWd3 aW4vMy40L2luY2x1ZGUvYysrL3N0cmluZyIgMwoKIyAxICIvaG9tZS9BZG1pbmlzdHJhdG9yL2dj Y3Rlc3RpbmcvbGliL2djYy1saWIvaTY4Ni1wYy1jeWd3aW4vMy40L2luY2x1ZGUvYysrL2k2ODYt cGMtY3lnd2luL2JpdHMvYysrY29uZmlnLmgiIDEgMwojIDM1ICIvaG9tZS9BZG1pbmlzdHJhdG9y L2djY3Rlc3RpbmcvbGliL2djYy1saWIvaTY4Ni1wYy1jeWd3aW4vMy40L2luY2x1ZGUvYysrL2k2 ODYtcGMtY3lnd2luL2JpdHMvYysrY29uZmlnLmgiIDMKIyAxICIvaG9tZS9BZG1pbmlzdHJhdG9y L2djY3Rlc3RpbmcvbGliL2djYy1saWIvaTY4Ni1wYy1jeWd3aW4vMy40L2luY2x1ZGUvYysrL2k2 ODYtcGMtY3lnd2luL2JpdHMvb3NfZGVmaW5lcy5oIiAxIDMKIyAzNiAiL2hvbWUvQWRtaW5pc3Ry YXRvci9nY2N0ZXN0aW5nL2xpYi9nY2MtbGliL2k2ODYtcGMtY3lnd2luLzMuNC9pbmNsdWRlL2Mr Ky9pNjg2LXBjLWN5Z3dpbi9iaXRzL2MrK2NvbmZpZy5oIiAyIDMKIyA0NiAiL2hvbWUvQWRtaW5p c3RyYXRvci9nY2N0ZXN0aW5nL2xpYi9nY2MtbGliL2k2ODYtcGMtY3lnd2luLzMuNC9pbmNsdWRl L2MrKy9zdHJpbmciIDIgMwojIDEgIi9ob21lL0FkbWluaXN0cmF0b3IvZ2NjdGVzdGluZy9saWIv Z2NjLWxpYi9pNjg2LXBjLWN5Z3dpbi8zLjQvaW5jbHVkZS9jKysvYml0cy9zdHJpbmdmd2QuaCIg MSAzCiMgNDMgIi9ob21lL0FkbWluaXN0cmF0b3IvZ2NjdGVzdGluZy9saWIvZ2NjLWxpYi9pNjg2 LXBjLWN5Z3dpbi8zLjQvaW5jbHVkZS9jKysvYml0cy9zdHJpbmdmd2QuaCIgMwoKCgpuYW1lc3Bh Y2Ugc3RkCnsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQWxsb2M+CiAgICBjbGFzcyBhbGxvY2F0b3I7 CgogIHRlbXBsYXRlPGNsYXNzIF9DaGFyVD4KICAgIHN0cnVjdCBjaGFyX3RyYWl0czsKCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0No YXJUPiwKICAgICAgICAgICB0eXBlbmFtZSBfQWxsb2MgPSBhbGxvY2F0b3I8X0NoYXJUPiA+CiAg ICBjbGFzcyBiYXNpY19zdHJpbmc7CgogIHRlbXBsYXRlPD4gc3RydWN0IGNoYXJfdHJhaXRzPGNo YXI+OwoKICB0eXBlZGVmIGJhc2ljX3N0cmluZzxjaGFyPiBzdHJpbmc7CgoKCgoKCn0KIyA0NyAi L2hvbWUvQWRtaW5pc3RyYXRvci9nY2N0ZXN0aW5nL2xpYi9nY2MtbGliL2k2ODYtcGMtY3lnd2lu LzMuNC9pbmNsdWRlL2MrKy9zdHJpbmciIDIgMwojIDEgIi9ob21lL0FkbWluaXN0cmF0b3IvZ2Nj dGVzdGluZy9saWIvZ2NjLWxpYi9pNjg2LXBjLWN5Z3dpbi8zLjQvaW5jbHVkZS9jKysvYml0cy9j aGFyX3RyYWl0cy5oIiAxIDMKIyA0NCAiL2hvbWUvQWRtaW5pc3RyYXRvci9nY2N0ZXN0aW5nL2xp Yi9nY2MtbGliL2k2ODYtcGMtY3lnd2luLzMuNC9pbmNsdWRlL2MrKy9iaXRzL2NoYXJfdHJhaXRz LmgiIDMKCiMgMSAiL2hvbWUvQWRtaW5pc3RyYXRvci9nY2N0ZXN0aW5nL2xpYi9nY2MtbGliL2k2 ODYtcGMtY3lnd2luLzMuNC9pbmNsdWRlL2MrKy9jc3RyaW5nIiAxIDMKIyA0OCAiL2hvbWUvQWRt aW5pc3RyYXRvci9nY2N0ZXN0aW5nL2xpYi9nY2MtbGliL2k2ODYtcGMtY3lnd2luLzMuNC9pbmNs dWRlL2MrKy9jc3RyaW5nIiAzCgojIDEgIi9ob21lL0FkbWluaXN0cmF0b3IvZ2NjdGVzdGluZy9s aWIvZ2NjLWxpYi9pNjg2LXBjLWN5Z3dpbi8zLjQvaW5jbHVkZS9jKysvY3N0ZGRlZiIgMSAzCiMg NDcgIi9ob21lL0FkbWluaXN0cmF0b3IvZ2NjdGVzdGluZy9saWIvZ2NjLWxpYi9pNjg2LXBjLWN5 Z3dpbi8zLjQvaW5jbHVkZS9jKysvY3N0ZGRlZiIgMwoKIyAxICIvaG9tZS9BZG1pbmlzdHJhdG9y L2djY3Rlc3RpbmcvbGliL2djYy1saWIvaTY4Ni1wYy1jeWd3aW4vMy40L2luY2x1ZGUvc3RkZGVm LmgiIDEgMyA0CiMgMTUxICIvaG9tZS9BZG1pbmlzdHJhdG9yL2djY3Rlc3RpbmcvbGliL2djYy1s aWIvaTY4Ni1wYy1jeWd3aW4vMy40L2luY2x1ZGUvc3RkZGVmLmgiIDMgNAp0eXBlZGVmIGludCBw dHJkaWZmX3Q7CiMgMjEzICIvaG9tZS9BZG1pbmlzdHJhdG9yL2djY3Rlc3RpbmcvbGliL2djYy1s aWIvaTY4Ni1wYy1jeWd3aW4vMy40L2luY2x1ZGUvc3RkZGVmLmgiIDMgNAp0eXBlZGVmIHVuc2ln bmVkIGludCBzaXplX3Q7CiMgNDkgIi9ob21lL0FkbWluaXN0cmF0b3IvZ2NjdGVzdGluZy9saWIv Z2NjLWxpYi9pNjg2LXBjLWN5Z3dpbi8zLjQvaW5jbHVkZS9jKysvY3N0ZGRlZiIgMiAzCgpuYW1l c3BhY2Ugc3RkCnsKICB1c2luZyA6OnB0cmRpZmZfdDsKICB1c2luZyA6OnNpemVfdDsKfQojIDUw ICIvaG9tZS9BZG1pbmlzdHJhdG9yL2djY3Rlc3RpbmcvbGliL2djYy1saWIvaTY4Ni1wYy1jeWd3 aW4vMy40L2luY2x1ZGUvYysrL2NzdHJpbmciIDIgMwoKIyAxICIvdXNyL2luY2x1ZGUvc3RyaW5n LmgiIDEgMyA0CiMgMTAgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMyA0CiMgMSAiL3Vzci9pbmNs dWRlL19hbnNpLmgiIDEgMyA0CiMgMTUgIi91c3IvaW5jbHVkZS9fYW5zaS5oIiAzIDQKIyAxICIv dXNyL2luY2x1ZGUvbmV3bGliLmgiIDEgMyA0CiMgMTYgIi91c3IvaW5jbHVkZS9fYW5zaS5oIiAy IDMgNAojIDEgIi91c3IvaW5jbHVkZS9zeXMvY29uZmlnLmgiIDEgMyA0CgoKCiMgMSAiL3Vzci9p bmNsdWRlL21hY2hpbmUvaWVlZWZwLmgiIDEgMyA0CiMgNSAiL3Vzci9pbmNsdWRlL3N5cy9jb25m aWcuaCIgMiAzIDQKIyAxNyAiL3Vzci9pbmNsdWRlL19hbnNpLmgiIDIgMyA0CiMgMTEgIi91c3Iv aW5jbHVkZS9zdHJpbmcuaCIgMiAzIDQKIyAxICIvdXNyL2luY2x1ZGUvc3lzL3JlZW50LmgiIDEg MyA0CiMgOSAiL3Vzci9pbmNsdWRlL3N5cy9yZWVudC5oIiAzIDQKZXh0ZXJuICJDIiB7CgoKCgoj IDEgIi91c3IvaW5jbHVkZS9zeXMvX3R5cGVzLmgiIDEgMyA0CiMgMTIgIi91c3IvaW5jbHVkZS9z eXMvX3R5cGVzLmgiIDMgNAp0eXBlZGVmIGxvbmcgX29mZl90OwpfX2V4dGVuc2lvbl9fIHR5cGVk ZWYgbG9uZyBsb25nIF9vZmY2NF90OwoKCnR5cGVkZWYgaW50IF9zc2l6ZV90OwoKCgoKCiMgMSAi L2hvbWUvQWRtaW5pc3RyYXRvci9nY2N0ZXN0aW5nL2xpYi9nY2MtbGliL2k2ODYtcGMtY3lnd2lu LzMuNC9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMgNAojIDM1NCAiL2hvbWUvQWRtaW5pc3RyYXRvci9n Y2N0ZXN0aW5nL2xpYi9nY2MtbGliL2k2ODYtcGMtY3lnd2luLzMuNC9pbmNsdWRlL3N0ZGRlZi5o IiAzIDQKdHlwZWRlZiB1bnNpZ25lZCBpbnQgd2ludF90OwojIDIzICIvdXNyL2luY2x1ZGUvc3lz L190eXBlcy5oIiAyIDMgNAoKCnR5cGVkZWYgc3RydWN0CnsKICBpbnQgX19jb3VudDsKICB1bmlv bgogIHsKICAgIHdpbnRfdCBfX3djaDsKICAgIHVuc2lnbmVkIGNoYXIgX193Y2hiWzRdOwogIH0g X192YWx1ZTsKfSBfbWJzdGF0ZV90OwoKdHlwZWRlZiBpbnQgX2Zsb2NrX3Q7CiMgMTUgIi91c3Iv aW5jbHVkZS9zeXMvcmVlbnQuaCIgMiAzIDQKCgoKCnR5cGVkZWYgdW5zaWduZWQgbG9uZyBfX1VM b25nOwojIDQwICIvdXNyL2luY2x1ZGUvc3lzL3JlZW50LmgiIDMgNApzdHJ1Y3QgX0JpZ2ludAp7 CiAgc3RydWN0IF9CaWdpbnQgKl9uZXh0OwogIGludCBfaywgX21heHdkcywgX3NpZ24sIF93ZHM7 CiAgX19VTG9uZyBfeFsxXTsKfTsKCgpzdHJ1Y3QgX190bQp7CiAgaW50IF9fdG1fc2VjOwogIGlu dCBfX3RtX21pbjsKICBpbnQgX190bV9ob3VyOwogIGludCBfX3RtX21kYXk7CiAgaW50IF9fdG1f bW9uOwogIGludCBfX3RtX3llYXI7CiAgaW50IF9fdG1fd2RheTsKICBpbnQgX190bV95ZGF5Owog IGludCBfX3RtX2lzZHN0Owp9OwojIDY4ICIvdXNyL2luY2x1ZGUvc3lzL3JlZW50LmgiIDMgNApz dHJ1Y3QgX2F0ZXhpdCB7CiAgICAgICAgc3RydWN0IF9hdGV4aXQgKl9uZXh0OwogICAgICAgIGlu dCBfaW5kOwogICAgICAgIHZvaWQgKCpfZm5zWzMyXSkodm9pZCk7CiAgICAgICAgdm9pZCAqX2Zu YXJnc1szMl07CiAgICAgICAgX19VTG9uZyBfZm50eXBlczsKfTsKIyA5MSAiL3Vzci9pbmNsdWRl L3N5cy9yZWVudC5oIiAzIDQKc3RydWN0IF9fc2J1ZiB7CiAgICAgICAgdW5zaWduZWQgY2hhciAq X2Jhc2U7CiAgICAgICAgaW50IF9zaXplOwp9OwoKCgoKCgp0eXBlZGVmIGxvbmcgX2Zwb3NfdDsK IyAxNTYgIi91c3IvaW5jbHVkZS9zeXMvcmVlbnQuaCIgMyA0CnN0cnVjdCBfX3NGSUxFIHsKICB1 bnNpZ25lZCBjaGFyICpfcDsKICBpbnQgX3I7CiAgaW50IF93OwogIHNob3J0IF9mbGFnczsKICBz aG9ydCBfZmlsZTsKICBzdHJ1Y3QgX19zYnVmIF9iZjsKICBpbnQgX2xiZnNpemU7CgoKCgoKCiAg dm9pZCAqIF9jb29raWU7CgogIF9zc2l6ZV90IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpICgq X3JlYWQpICh2b2lkICogX2Nvb2tpZSwgY2hhciAqX2J1ZiwgaW50IF9uKTsKICBfc3NpemVfdCBf X2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSAoKl93cml0ZSkgKHZvaWQgKiBfY29va2llLCBjb25z dCBjaGFyICpfYnVmLCBpbnQgX24pOwoKICBfZnBvc190IF9fYXR0cmlidXRlX18oKF9fY2RlY2xf XykpICgqX3NlZWspICh2b2lkICogX2Nvb2tpZSwgX2Zwb3NfdCBfb2Zmc2V0LCBpbnQgX3doZW5j ZSk7CiAgaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpICgqX2Nsb3NlKSAodm9pZCAqIF9j b29raWUpOwoKCiAgc3RydWN0IF9fc2J1ZiBfdWI7CiAgdW5zaWduZWQgY2hhciAqX3VwOwogIGlu dCBfdXI7CgoKICB1bnNpZ25lZCBjaGFyIF91YnVmWzNdOwogIHVuc2lnbmVkIGNoYXIgX25idWZb MV07CgoKICBzdHJ1Y3QgX19zYnVmIF9sYjsKCgogIGludCBfYmxrc2l6ZTsKICBpbnQgX29mZnNl dDsKCgogIHN0cnVjdCBfcmVlbnQgKl9kYXRhOwoKCgogIF9mbG9ja190IF9sb2NrOwoKfTsKIyAy NDkgIi91c3IvaW5jbHVkZS9zeXMvcmVlbnQuaCIgMyA0CnR5cGVkZWYgc3RydWN0IF9fc0ZJTEUg X19GSUxFOwoKCnN0cnVjdCBfZ2x1ZQp7CiAgc3RydWN0IF9nbHVlICpfbmV4dDsKICBpbnQgX25p b2JzOwogIF9fRklMRSAqX2lvYnM7Cn07CiMgMjgwICIvdXNyL2luY2x1ZGUvc3lzL3JlZW50Lmgi IDMgNApzdHJ1Y3QgX3JhbmQ0OCB7CiAgdW5zaWduZWQgc2hvcnQgX3NlZWRbM107CiAgdW5zaWdu ZWQgc2hvcnQgX211bHRbM107CiAgdW5zaWduZWQgc2hvcnQgX2FkZDsKCgoKCn07CiMgNTMyICIv dXNyL2luY2x1ZGUvc3lzL3JlZW50LmgiIDMgNApzdHJ1Y3QgX3JlZW50CnsKICBpbnQgX2Vycm5v OwoKCgoKICBfX0ZJTEUgKl9zdGRpbiwgKl9zdGRvdXQsICpfc3RkZXJyOwoKICBpbnQgX2luYzsK ICBjaGFyIF9lbWVyZ2VuY3lbMjVdOwoKICBpbnQgX2N1cnJlbnRfY2F0ZWdvcnk7CiAgY29uc3Qg Y2hhciAqX2N1cnJlbnRfbG9jYWxlOwoKICBpbnQgX19zZGlkaW5pdDsKCiAgdm9pZCBfX2F0dHJp YnV0ZV9fKChfX2NkZWNsX18pKSAoKl9fY2xlYW51cCkgKHN0cnVjdCBfcmVlbnQgKik7CgoKICBz dHJ1Y3QgX0JpZ2ludCAqX3Jlc3VsdDsKICBpbnQgX3Jlc3VsdF9rOwogIHN0cnVjdCBfQmlnaW50 ICpfcDVzOwogIHN0cnVjdCBfQmlnaW50ICoqX2ZyZWVsaXN0OwoKCiAgaW50IF9jdnRsZW47CiAg Y2hhciAqX2N2dGJ1ZjsKCiAgdW5pb24KICAgIHsKICAgICAgc3RydWN0CiAgICAgICAgewogICAg ICAgICAgdW5zaWduZWQgaW50IF91bnVzZWRfcmFuZDsKICAgICAgICAgIGNoYXIgKiBfc3RydG9r X2xhc3Q7CiAgICAgICAgICBjaGFyIF9hc2N0aW1lX2J1ZlsyNl07CiAgICAgICAgICBzdHJ1Y3Qg X190bSBfbG9jYWx0aW1lX2J1ZjsKICAgICAgICAgIGludCBfZ2FtbWFfc2lnbmdhbTsKICAgICAg ICAgIF9fZXh0ZW5zaW9uX18gdW5zaWduZWQgbG9uZyBsb25nIF9yYW5kX25leHQ7CiAgICAgICAg ICBzdHJ1Y3QgX3JhbmQ0OCBfcjQ4OwogICAgICAgICAgX21ic3RhdGVfdCBfbWJsZW5fc3RhdGU7 CiAgICAgICAgICBfbWJzdGF0ZV90IF9tYnRvd2Nfc3RhdGU7CiAgICAgICAgICBfbWJzdGF0ZV90 IF93Y3RvbWJfc3RhdGU7CiAgICAgICAgICBjaGFyIF9sNjRhX2J1Zls4XTsKICAgICAgICAgIGNo YXIgX3NpZ25hbF9idWZbMjRdOwogICAgICAgICAgaW50IF9nZXRkYXRlX2VycjsKICAgICAgICAg IF9tYnN0YXRlX3QgX21icmxlbl9zdGF0ZTsKICAgICAgICAgIF9tYnN0YXRlX3QgX21icnRvd2Nf c3RhdGU7CiAgICAgICAgICBfbWJzdGF0ZV90IF9tYnNydG93Y3Nfc3RhdGU7CiAgICAgICAgICBf bWJzdGF0ZV90IF93Y3J0b21iX3N0YXRlOwogICAgICAgICAgX21ic3RhdGVfdCBfd2NzcnRvbWJz X3N0YXRlOwogICAgICAgIH0gX3JlZW50OwoKCgogICAgICBzdHJ1Y3QKICAgICAgICB7CgogICAg ICAgICAgdW5zaWduZWQgY2hhciAqIF9uZXh0ZlszMF07CiAgICAgICAgICB1bnNpZ25lZCBpbnQg X25tYWxsb2NbMzBdOwogICAgICAgIH0gX3VudXNlZDsKICAgIH0gX25ldzsKCgogIHN0cnVjdCBf YXRleGl0ICpfYXRleGl0OwogIHN0cnVjdCBfYXRleGl0IF9hdGV4aXQwOwoKCiAgdm9pZCAoKioo X3NpZ19mdW5jKSkoaW50KTsKCgoKCiAgc3RydWN0IF9nbHVlIF9fc2dsdWU7CiAgX19GSUxFIF9f c2ZbM107Cn07CiMgNzI4ICIvdXNyL2luY2x1ZGUvc3lzL3JlZW50LmgiIDMgNApleHRlcm4gc3Ry dWN0IF9yZWVudCAqX2ltcHVyZV9wdHIgOwoKdm9pZCBfcmVjbGFpbV9yZWVudCAoc3RydWN0IF9y ZWVudCAqKTsKIyA3NDYgIi91c3IvaW5jbHVkZS9zeXMvcmVlbnQuaCIgMyA0Cn0KIyAxMiAiL3Vz ci9pbmNsdWRlL3N0cmluZy5oIiAyIDMgNAoKCiMgMSAiL2hvbWUvQWRtaW5pc3RyYXRvci9nY2N0 ZXN0aW5nL2xpYi9nY2MtbGliL2k2ODYtcGMtY3lnd2luLzMuNC9pbmNsdWRlL3N0ZGRlZi5oIiAx IDMgNAojIDE1ICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDIgMyA0CgoKCgoKZXh0ZXJuICJDIiB7 Cgp2b2lkICogX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgbWVtY2hyIChjb25zdCB2b2lkICos IGludCwgc2l6ZV90KTsKaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIG1lbWNtcCAoY29u c3Qgdm9pZCAqLCBjb25zdCB2b2lkICosIHNpemVfdCk7CnZvaWQgKiBfX2F0dHJpYnV0ZV9fKChf X2NkZWNsX18pKSBtZW1jcHkgKHZvaWQgKiwgY29uc3Qgdm9pZCAqLCBzaXplX3QpOwp2b2lkICog X19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgbWVtbW92ZSAodm9pZCAqLCBjb25zdCB2b2lkICos IHNpemVfdCk7CnZvaWQgKiBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBtZW1zZXQgKHZvaWQg KiwgaW50LCBzaXplX3QpOwpjaGFyICpfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBzdHJjYXQg KGNoYXIgKiwgY29uc3QgY2hhciAqKTsKY2hhciAqX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkg c3RyY2hyIChjb25zdCBjaGFyICosIGludCk7CmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18p KSBzdHJjbXAgKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKaW50IF9fYXR0cmlidXRlX18o KF9fY2RlY2xfXykpIHN0cmNvbGwgKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKY2hhciAq X19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgc3RyY3B5IChjaGFyICosIGNvbnN0IGNoYXIgKik7 CnNpemVfdCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBzdHJjc3BuIChjb25zdCBjaGFyICos IGNvbnN0IGNoYXIgKik7CmNoYXIgKl9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHN0cmVycm9y IChpbnQpOwpzaXplX3QgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgc3RybGVuIChjb25zdCBj aGFyICopOwpjaGFyICpfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBzdHJuY2F0IChjaGFyICos IGNvbnN0IGNoYXIgKiwgc2l6ZV90KTsKaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHN0 cm5jbXAgKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBzaXplX3QpOwpjaGFyICpfX2F0dHJp YnV0ZV9fKChfX2NkZWNsX18pKSBzdHJuY3B5IChjaGFyICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90 KTsKY2hhciAqX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgc3RycGJyayAoY29uc3QgY2hhciAq LCBjb25zdCBjaGFyICopOwpjaGFyICpfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBzdHJyY2hy IChjb25zdCBjaGFyICosIGludCk7CnNpemVfdCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBz dHJzcG4gKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKY2hhciAqX19hdHRyaWJ1dGVfXygo X19jZGVjbF9fKSkgc3Ryc3RyIChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CgoKY2hhciAq X19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgc3RydG9rIChjaGFyICosIGNvbnN0IGNoYXIgKik7 CgoKc2l6ZV90IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHN0cnhmcm0gKGNoYXIgKiwgY29u c3QgY2hhciAqLCBzaXplX3QpOwoKCmNoYXIgKl9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHN0 cnRva19yIChjaGFyICosIGNvbnN0IGNoYXIgKiwgY2hhciAqKik7CgppbnQgX19hdHRyaWJ1dGVf XygoX19jZGVjbF9fKSkgYmNtcCAoY29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICosIHNpemVfdCk7 CnZvaWQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgYmNvcHkgKGNvbnN0IHZvaWQgKiwgdm9p ZCAqLCBzaXplX3QpOwp2b2lkIF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGJ6ZXJvICh2b2lk ICosIHNpemVfdCk7CmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBmZnMgKGludCk7CmNo YXIgKl9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGluZGV4IChjb25zdCBjaGFyICosIGludCk7 CnZvaWQgKiBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBtZW1jY3B5ICh2b2lkICosIGNvbnN0 IHZvaWQgKiwgaW50LCBzaXplX3QpOwp2b2lkICogX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkg bWVtcGNweSAodm9pZCAqLCBjb25zdCB2b2lkICosIHNpemVfdCk7CmNoYXIgKl9fYXR0cmlidXRl X18oKF9fY2RlY2xfXykpIHJpbmRleCAoY29uc3QgY2hhciAqLCBpbnQpOwppbnQgX19hdHRyaWJ1 dGVfXygoX19jZGVjbF9fKSkgc3RyY2FzZWNtcCAoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICop OwpjaGFyICpfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBzdHJkdXAgKGNvbnN0IGNoYXIgKik7 CmNoYXIgKl9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIF9zdHJkdXBfciAoc3RydWN0IF9yZWVu dCAqLCBjb25zdCBjaGFyICopOwpjaGFyICpfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBzdHJu ZHVwIChjb25zdCBjaGFyICosIHNpemVfdCk7CmNoYXIgKl9fYXR0cmlidXRlX18oKF9fY2RlY2xf XykpIF9zdHJuZHVwX3IgKHN0cnVjdCBfcmVlbnQgKiwgY29uc3QgY2hhciAqLCBzaXplX3QpOwpj aGFyICpfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBzdHJlcnJvcl9yIChpbnQsIGNoYXIgKiwg c2l6ZV90KTsKc2l6ZV90IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHN0cmxjYXQgKGNoYXIg KiwgY29uc3QgY2hhciAqLCBzaXplX3QpOwpzaXplX3QgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9f KSkgc3RybGNweSAoY2hhciAqLCBjb25zdCBjaGFyICosIHNpemVfdCk7CmludCBfX2F0dHJpYnV0 ZV9fKChfX2NkZWNsX18pKSBzdHJuY2FzZWNtcCAoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICos IHNpemVfdCk7CnNpemVfdCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBzdHJubGVuIChjb25z dCBjaGFyICosIHNpemVfdCk7CmNoYXIgKl9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHN0cnNl cCAoY2hhciAqKiwgY29uc3QgY2hhciAqKTsKY2hhciAqX19hdHRyaWJ1dGVfXygoX19jZGVjbF9f KSkgc3RybHdyIChjaGFyICopOwpjaGFyICpfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBzdHJ1 cHIgKGNoYXIgKik7CgoKY29uc3QgY2hhciAqX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgc3Ry c2lnbmFsIChpbnQgX19zaWdubyk7CgppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgc3Ry dG9zaWdubyAoY29uc3QgY2hhciAqX19uYW1lKTsKIyA5OCAiL3Vzci9pbmNsdWRlL3N0cmluZy5o IiAzIDQKfQojIDUyICIvaG9tZS9BZG1pbmlzdHJhdG9yL2djY3Rlc3RpbmcvbGliL2djYy1saWIv aTY4Ni1wYy1jeWd3aW4vMy40L2luY2x1ZGUvYysrL2NzdHJpbmciIDIgMwojIDc3ICIvaG9tZS9B ZG1pbmlzdHJhdG9yL2djY3Rlc3RpbmcvbGliL2djYy1saWIvaTY4Ni1wYy1jeWd3aW4vMy40L2lu Y2x1ZGUvYysrL2NzdHJpbmciIDMKbmFtZXNwYWNlIHN0ZAp7CiAgdXNpbmcgOjptZW1jcHk7CiAg dXNpbmcgOjptZW1tb3ZlOwogIHVzaW5nIDo6c3RyY3B5OwogIHVzaW5nIDo6c3RybmNweTsKICB1 c2luZyA6OnN0cmNhdDsKICB1c2luZyA6OnN0cm5jYXQ7CiAgdXNpbmcgOjptZW1jbXA7CiAgdXNp bmcgOjpzdHJjbXA7CiAgdXNpbmcgOjpzdHJjb2xsOwogIHVzaW5nIDo6c3RybmNtcDsKICB1c2lu ZyA6OnN0cnhmcm07CiAgdXNpbmcgOjpzdHJjc3BuOwogIHVzaW5nIDo6c3Ryc3BuOwogIHVzaW5n IDo6c3RydG9rOwogIHVzaW5nIDo6bWVtc2V0OwogIHVzaW5nIDo6c3RyZXJyb3I7CiAgdXNpbmcg OjpzdHJsZW47CgogIHVzaW5nIDo6bWVtY2hyOwoKICBpbmxpbmUgdm9pZCoKICBtZW1jaHIodm9p ZCogX19wLCBpbnQgX19jLCBzaXplX3QgX19uKQogIHsgcmV0dXJuIG1lbWNocihjb25zdF9jYXN0 PGNvbnN0IHZvaWQqPihfX3ApLCBfX2MsIF9fbik7IH0KCiAgdXNpbmcgOjpzdHJjaHI7CgogIGlu bGluZSBjaGFyKgogIHN0cmNocihjaGFyKiBfX3MxLCBpbnQgX19uKQogIHsgcmV0dXJuIF9fYnVp bHRpbl9zdHJjaHIoY29uc3RfY2FzdDxjb25zdCBjaGFyKj4oX19zMSksIF9fbik7IH0KCiAgdXNp bmcgOjpzdHJwYnJrOwoKICBpbmxpbmUgY2hhcioKICBzdHJwYnJrKGNoYXIqIF9fczEsIGNvbnN0 IGNoYXIqIF9fczIpCiAgeyByZXR1cm4gX19idWlsdGluX3N0cnBicmsoY29uc3RfY2FzdDxjb25z dCBjaGFyKj4oX19zMSksIF9fczIpOyB9CgogIHVzaW5nIDo6c3RycmNocjsKCiAgaW5saW5lIGNo YXIqCiAgc3RycmNocihjaGFyKiBfX3MxLCBpbnQgX19uKQogIHsgcmV0dXJuIF9fYnVpbHRpbl9z dHJyY2hyKGNvbnN0X2Nhc3Q8Y29uc3QgY2hhcio+KF9fczEpLCBfX24pOyB9CgogIHVzaW5nIDo6 c3Ryc3RyOwoKICBpbmxpbmUgY2hhcioKICBzdHJzdHIoY2hhciogX19zMSwgY29uc3QgY2hhciog X19zMikKICB7IHJldHVybiBfX2J1aWx0aW5fc3Ryc3RyKGNvbnN0X2Nhc3Q8Y29uc3QgY2hhcio+ KF9fczEpLCBfX3MyKTsgfQp9CiMgNDYgIi9ob21lL0FkbWluaXN0cmF0b3IvZ2NjdGVzdGluZy9s aWIvZ2NjLWxpYi9pNjg2LXBjLWN5Z3dpbi8zLjQvaW5jbHVkZS9jKysvYml0cy9jaGFyX3RyYWl0 cy5oIiAyIDMKIyAxICIvaG9tZS9BZG1pbmlzdHJhdG9yL2djY3Rlc3RpbmcvbGliL2djYy1saWIv aTY4Ni1wYy1jeWd3aW4vMy40L2luY2x1ZGUvYysrL2JpdHMvZnBvcy5oIiAxIDMKIyA0MyAiL2hv bWUvQWRtaW5pc3RyYXRvci9nY2N0ZXN0aW5nL2xpYi9nY2MtbGliL2k2ODYtcGMtY3lnd2luLzMu NC9pbmNsdWRlL2MrKy9iaXRzL2Zwb3MuaCIgMwoKIyAxICIvaG9tZS9BZG1pbmlzdHJhdG9yL2dj Y3Rlc3RpbmcvbGliL2djYy1saWIvaTY4Ni1wYy1jeWd3aW4vMy40L2luY2x1ZGUvYysrL2k2ODYt cGMtY3lnd2luL2JpdHMvYysraW8uaCIgMSAzCiMgMzUgIi9ob21lL0FkbWluaXN0cmF0b3IvZ2Nj dGVzdGluZy9saWIvZ2NjLWxpYi9pNjg2LXBjLWN5Z3dpbi8zLjQvaW5jbHVkZS9jKysvaTY4Ni1w Yy1jeWd3aW4vYml0cy9jKytpby5oIiAzCiMgMSAiL2hvbWUvQWRtaW5pc3RyYXRvci9nY2N0ZXN0 aW5nL2xpYi9nY2MtbGliL2k2ODYtcGMtY3lnd2luLzMuNC9pbmNsdWRlL2MrKy9jc3RkaW8iIDEg MwojIDQ4ICIvaG9tZS9BZG1pbmlzdHJhdG9yL2djY3Rlc3RpbmcvbGliL2djYy1saWIvaTY4Ni1w Yy1jeWd3aW4vMy40L2luY2x1ZGUvYysrL2NzdGRpbyIgMwoKCgoKIyAxICIvdXNyL2luY2x1ZGUv c3RkaW8uaCIgMSAzIDQKIyAzNCAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDMgNAojIDEgIi9ob21l L0FkbWluaXN0cmF0b3IvZ2NjdGVzdGluZy9saWIvZ2NjLWxpYi9pNjg2LXBjLWN5Z3dpbi8zLjQv aW5jbHVkZS9zdGRkZWYuaCIgMSAzIDQKIyAzNSAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDIgMyA0 CgoKIyAxICIvaG9tZS9BZG1pbmlzdHJhdG9yL2djY3Rlc3RpbmcvbGliL2djYy1saWIvaTY4Ni1w Yy1jeWd3aW4vMy40L2luY2x1ZGUvc3RkYXJnLmgiIDEgMyA0CiMgNDMgIi9ob21lL0FkbWluaXN0 cmF0b3IvZ2NjdGVzdGluZy9saWIvZ2NjLWxpYi9pNjg2LXBjLWN5Z3dpbi8zLjQvaW5jbHVkZS9z dGRhcmcuaCIgMyA0CnR5cGVkZWYgX19idWlsdGluX3ZhX2xpc3QgX19nbnVjX3ZhX2xpc3Q7CiMg MzggIi91c3IvaW5jbHVkZS9zdGRpby5oIiAyIDMgNAojIDQ2ICIvdXNyL2luY2x1ZGUvc3RkaW8u aCIgMyA0CiMgMSAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAxIDMgNAojIDI0ICIvdXNyL2lu Y2x1ZGUvc3lzL3R5cGVzLmgiIDMgNAp0eXBlZGVmIHNob3J0IGludCBfX2ludDE2X3Q7CnR5cGVk ZWYgdW5zaWduZWQgc2hvcnQgaW50IF9fdWludDE2X3Q7CgoKCgoKdHlwZWRlZiBpbnQgX19pbnQz Ml90Owp0eXBlZGVmIHVuc2lnbmVkIGludCBfX3VpbnQzMl90OwoKCgoKCgpfX2V4dGVuc2lvbl9f IHR5cGVkZWYgbG9uZyBsb25nIF9faW50NjRfdDsKX19leHRlbnNpb25fXyB0eXBlZGVmIHVuc2ln bmVkIGxvbmcgbG9uZyBfX3VpbnQ2NF90OwojIDU5ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgi IDMgNAojIDEgIi9ob21lL0FkbWluaXN0cmF0b3IvZ2NjdGVzdGluZy9saWIvZ2NjLWxpYi9pNjg2 LXBjLWN5Z3dpbi8zLjQvaW5jbHVkZS9zdGRkZWYuaCIgMSAzIDQKIyA2MCAiL3Vzci9pbmNsdWRl L3N5cy90eXBlcy5oIiAyIDMgNAojIDEgIi91c3IvaW5jbHVkZS9tYWNoaW5lL3R5cGVzLmgiIDEg MyA0CiMgMzYgIi91c3IvaW5jbHVkZS9tYWNoaW5lL3R5cGVzLmgiIDMgNAp0eXBlZGVmIGxvbmcg aW50IF9fb2ZmX3Q7CnR5cGVkZWYgaW50IF9fcGlkX3Q7CgpfX2V4dGVuc2lvbl9fIHR5cGVkZWYg bG9uZyBsb25nIGludCBfX2xvZmZfdDsKIyA2MSAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAy IDMgNAojIDgyICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMgNAp0eXBlZGVmIHVuc2lnbmVk IGNoYXIgdV9jaGFyOwp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IHVfc2hvcnQ7CnR5cGVkZWYgdW5z aWduZWQgaW50IHVfaW50Owp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgdV9sb25nOwoKCgp0eXBlZGVm IHVuc2lnbmVkIHNob3J0IHVzaG9ydDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdWludDsKCgoKdHlw ZWRlZiB1bnNpZ25lZCBsb25nIGNsb2NrX3Q7CgoKCgp0eXBlZGVmIGxvbmcgdGltZV90OwoKCgoK c3RydWN0IHRpbWVzcGVjIHsKICB0aW1lX3QgdHZfc2VjOwogIGxvbmcgdHZfbnNlYzsKfTsKCnN0 cnVjdCBpdGltZXJzcGVjIHsKICBzdHJ1Y3QgdGltZXNwZWMgaXRfaW50ZXJ2YWw7CiAgc3RydWN0 IHRpbWVzcGVjIGl0X3ZhbHVlOwp9OwoKCnR5cGVkZWYgbG9uZyBkYWRkcl90Owp0eXBlZGVmIGNo YXIgKiBjYWRkcl90OwoKCnR5cGVkZWYgdW5zaWduZWQgbG9uZyBpbm9fdDsKIyAxMzAgIi91c3Iv aW5jbHVkZS9zeXMvdHlwZXMuaCIgMyA0CnR5cGVkZWYgdW5zaWduZWQgbG9uZyB2bV9vZmZzZXRf dDsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIHZtX3NpemVfdDsKCgoKdHlwZWRlZiBjaGFyIGludDhf dDsKdHlwZWRlZiB1bnNpZ25lZCBjaGFyIHVfaW50OF90Owp0eXBlZGVmIHNob3J0IGludDE2X3Q7 CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgdV9pbnQxNl90Owp0eXBlZGVmIGludCBpbnQzMl90Owp0 eXBlZGVmIHVuc2lnbmVkIGludCB1X2ludDMyX3Q7CnR5cGVkZWYgbG9uZyBsb25nIGludDY0X3Q7 CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIHVfaW50NjRfdDsKdHlwZWRlZiBpbnQzMl90IHJl Z2lzdGVyX3Q7CiMgMTY5ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMgNAp0eXBlZGVmIGlu dCBwaWRfdDsKdHlwZWRlZiBsb25nIGtleV90Owp0eXBlZGVmIF9zc2l6ZV90IHNzaXplX3Q7CgoK dHlwZWRlZiBjaGFyICogYWRkcl90Owp0eXBlZGVmIGludCBtb2RlX3Q7CiMgMTg4ICIvdXNyL2lu Y2x1ZGUvc3lzL3R5cGVzLmgiIDMgNAp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IG5saW5rX3Q7CiMg MjEwICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMgNAp0eXBlZGVmIGxvbmcgZmRfbWFzazsK CgoKCgoKCnR5cGVkZWYgc3RydWN0IF90eXBlc19mZF9zZXQgewogICAgICAgIGZkX21hc2sgZmRz X2JpdHNbKCgoNjQpKygoKHNpemVvZiAoZmRfbWFzaykgKiA4KSktMSkpLygoc2l6ZW9mIChmZF9t YXNrKSAqIDgpKSldOwp9IF90eXBlc19mZF9zZXQ7CiMgMjQ2ICIvdXNyL2luY2x1ZGUvc3lzL3R5 cGVzLmgiIDMgNAp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgY2xvY2tpZF90OwoKCgoKdHlwZWRlZiB1 bnNpZ25lZCBsb25nIHRpbWVyX3Q7CgoKCgp0eXBlZGVmIGxvbmcgdXNlY29uZHNfdDsKCgojIDEg Ii91c3IvaW5jbHVkZS9zeXMvZmVhdHVyZXMuaCIgMSAzIDQKIyAyNSAiL3Vzci9pbmNsdWRlL3N5 cy9mZWF0dXJlcy5oIiAzIDQKZXh0ZXJuICJDIiB7CiMgOTMgIi91c3IvaW5jbHVkZS9zeXMvZmVh dHVyZXMuaCIgMyA0Cn0KIyAyNjAgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMiAzIDQKIyAz NjQgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMyA0CiMgMSAiL3Vzci9pbmNsdWRlL2N5Z3dp bi90eXBlcy5oIiAxIDMgNAojIDEzICIvdXNyL2luY2x1ZGUvY3lnd2luL3R5cGVzLmgiIDMgNApl eHRlcm4gIkMiCnsKCgoKCgojIDEgIi91c3IvaW5jbHVkZS9zeXMvc3lzbWFjcm9zLmgiIDEgMyA0 CiMgMjEgIi91c3IvaW5jbHVkZS9jeWd3aW4vdHlwZXMuaCIgMiAzIDQKCnR5cGVkZWYgc3RydWN0 IHRpbWVzcGVjIHRpbWVzcGVjX3QsIHRpbWVzdHJ1Y190OwoKdHlwZWRlZiBsb25nIF9fb2ZmMzJf dDsKdHlwZWRlZiBsb25nIGxvbmcgX19vZmY2NF90OwoKCgp0eXBlZGVmIF9fb2ZmMzJfdCBvZmZf dDsKCgp0eXBlZGVmIHNob3J0IF9fZGV2MTZfdDsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIF9fZGV2 MzJfdDsKCgoKdHlwZWRlZiBfX2RldjE2X3QgZGV2X3Q7CgoKdHlwZWRlZiBsb25nIGJsa3NpemVf dDsKCnR5cGVkZWYgbG9uZyBfX2Jsa2NudDMyX3Q7CnR5cGVkZWYgbG9uZyBsb25nIF9fYmxrY250 NjRfdDsKCgoKdHlwZWRlZiBfX2Jsa2NudDMyX3QgYmxrY250X3Q7CgoKdHlwZWRlZiB1bnNpZ25l ZCBzaG9ydCBfX3VpZDE2X3Q7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgX19naWQxNl90Owp0eXBl ZGVmIHVuc2lnbmVkIGxvbmcgX191aWQzMl90Owp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgX19naWQz Ml90OwoKCgoKdHlwZWRlZiBfX3VpZDE2X3QgdWlkX3Q7CnR5cGVkZWYgX19naWQxNl90IGdpZF90 OwoKCgoKdHlwZWRlZiBzdHJ1Y3QgX19wdGhyZWFkX3Qge2NoYXIgX19kdW1teTt9ICpwdGhyZWFk X3Q7CnR5cGVkZWYgc3RydWN0IF9fcHRocmVhZF9tdXRleF90IHtjaGFyIF9fZHVtbXk7fSAqcHRo cmVhZF9tdXRleF90OwoKdHlwZWRlZiBzdHJ1Y3QgX19wdGhyZWFkX2tleV90IHtjaGFyIF9fZHVt bXk7fSAqcHRocmVhZF9rZXlfdDsKdHlwZWRlZiBzdHJ1Y3QgX19wdGhyZWFkX2F0dHJfdCB7Y2hh ciBfX2R1bW15O30gKnB0aHJlYWRfYXR0cl90Owp0eXBlZGVmIHN0cnVjdCBfX3B0aHJlYWRfbXV0 ZXhhdHRyX3Qge2NoYXIgX19kdW1teTt9ICpwdGhyZWFkX211dGV4YXR0cl90Owp0eXBlZGVmIHN0 cnVjdCBfX3B0aHJlYWRfY29uZGF0dHJfdCB7Y2hhciBfX2R1bW15O30gKnB0aHJlYWRfY29uZGF0 dHJfdDsKdHlwZWRlZiBzdHJ1Y3QgX19wdGhyZWFkX2NvbmRfdCB7Y2hhciBfX2R1bW15O30gKnB0 aHJlYWRfY29uZF90OwoKCnR5cGVkZWYgc3RydWN0CnsKICBwdGhyZWFkX211dGV4X3QgbXV0ZXg7 CiAgaW50IHN0YXRlOwp9CnB0aHJlYWRfb25jZV90Owp0eXBlZGVmIHN0cnVjdCBfX3B0aHJlYWRf cndsb2NrX3Qge2NoYXIgX19kdW1teTt9ICpwdGhyZWFkX3J3bG9ja190Owp0eXBlZGVmIHN0cnVj dCBfX3B0aHJlYWRfcndsb2NrYXR0cl90IHtjaGFyIF9fZHVtbXk7fSAqcHRocmVhZF9yd2xvY2th dHRyX3Q7CiMgMTA0ICIvdXNyL2luY2x1ZGUvY3lnd2luL3R5cGVzLmgiIDMgNAp9CiMgMzY1ICIv dXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMyA0CiMgNDcgIi91c3IvaW5jbHVkZS9zdGRpby5o IiAyIDMgNAoKZXh0ZXJuICJDIiB7Cgp0eXBlZGVmIF9mcG9zX3QgZnBvc190Owp0eXBlZGVmIF9f RklMRSBGSUxFOwoKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9zdGRpby5oIiAxIDMgNAojIDU4 ICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIgMiAzIDQKIyAxNjIgIi91c3IvaW5jbHVkZS9zdGRpby5o IiAzIDQKRklMRSAqIF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHRtcGZpbGUgKHZvaWQpOwpj aGFyICogX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgdG1wbmFtIChjaGFyICopOwppbnQgX19h dHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgZmNsb3NlIChGSUxFICopOwppbnQgX19hdHRyaWJ1dGVf XygoX19jZGVjbF9fKSkgZmZsdXNoIChGSUxFICopOwpGSUxFICogX19hdHRyaWJ1dGVfXygoX19j ZGVjbF9fKSkgZnJlb3BlbiAoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIEZJTEUgKik7CnZv aWQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgc2V0YnVmIChGSUxFICosIGNoYXIgKik7Cmlu dCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBzZXR2YnVmIChGSUxFICosIGNoYXIgKiwgaW50 LCBzaXplX3QpOwppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgZnByaW50ZiAoRklMRSAq LCBjb25zdCBjaGFyICosIC4uLik7CmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBmc2Nh bmYgKEZJTEUgKiwgY29uc3QgY2hhciAqLCAuLi4pOwppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVj bF9fKSkgcHJpbnRmIChjb25zdCBjaGFyICosIC4uLik7CmludCBfX2F0dHJpYnV0ZV9fKChfX2Nk ZWNsX18pKSBzY2FuZiAoY29uc3QgY2hhciAqLCAuLi4pOwppbnQgX19hdHRyaWJ1dGVfXygoX19j ZGVjbF9fKSkgc3NjYW5mIChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgLi4uKTsKaW50IF9f YXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHZmcHJpbnRmIChGSUxFICosIGNvbnN0IGNoYXIgKiwg X19nbnVjX3ZhX2xpc3QpOwppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgdnByaW50ZiAo Y29uc3QgY2hhciAqLCBfX2dudWNfdmFfbGlzdCk7CmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNs X18pKSB2c3ByaW50ZiAoY2hhciAqLCBjb25zdCBjaGFyICosIF9fZ251Y192YV9saXN0KTsKaW50 IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGZnZXRjIChGSUxFICopOwpjaGFyICogX19hdHRy aWJ1dGVfXygoX19jZGVjbF9fKSkgZmdldHMgKGNoYXIgKiwgaW50LCBGSUxFICopOwppbnQgX19h dHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgZnB1dGMgKGludCwgRklMRSAqKTsKaW50IF9fYXR0cmli dXRlX18oKF9fY2RlY2xfXykpIGZwdXRzIChjb25zdCBjaGFyICosIEZJTEUgKik7CmludCBfX2F0 dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBnZXRjIChGSUxFICopOwppbnQgX19hdHRyaWJ1dGVfXygo X19jZGVjbF9fKSkgZ2V0Y2hhciAodm9pZCk7CmNoYXIgKiBfX2F0dHJpYnV0ZV9fKChfX2NkZWNs X18pKSBnZXRzIChjaGFyICopOwppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgcHV0YyAo aW50LCBGSUxFICopOwppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgcHV0Y2hhciAoaW50 KTsKaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHB1dHMgKGNvbnN0IGNoYXIgKik7Cmlu dCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSB1bmdldGMgKGludCwgRklMRSAqKTsKc2l6ZV90 IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGZyZWFkICh2b2lkICosIHNpemVfdCBfc2l6ZSwg c2l6ZV90IF9uLCBGSUxFICopOwpzaXplX3QgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgZndy aXRlIChjb25zdCB2b2lkICogLCBzaXplX3QgX3NpemUsIHNpemVfdCBfbiwgRklMRSAqKTsKaW50 IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGZnZXRwb3MgKEZJTEUgKiwgZnBvc190ICopOwpp bnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgZnNlZWsgKEZJTEUgKiwgbG9uZywgaW50KTsK aW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGZzZXRwb3MgKEZJTEUgKiwgY29uc3QgZnBv c190ICopOwpsb25nIF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGZ0ZWxsICggRklMRSAqKTsK dm9pZCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSByZXdpbmQgKEZJTEUgKik7CnZvaWQgX19h dHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgY2xlYXJlcnIgKEZJTEUgKik7CmludCBfX2F0dHJpYnV0 ZV9fKChfX2NkZWNsX18pKSBmZW9mIChGSUxFICopOwppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVj bF9fKSkgZmVycm9yIChGSUxFICopOwp2b2lkIF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHBl cnJvciAoY29uc3QgY2hhciAqKTsKCkZJTEUgKiBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBm b3BlbiAoY29uc3QgY2hhciAqX25hbWUsIGNvbnN0IGNoYXIgKl90eXBlKTsKaW50IF9fYXR0cmli dXRlX18oKF9fY2RlY2xfXykpIHNwcmludGYgKGNoYXIgKiwgY29uc3QgY2hhciAqLCAuLi4pOwpp bnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgcmVtb3ZlIChjb25zdCBjaGFyICopOwppbnQg X19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgcmVuYW1lIChjb25zdCBjaGFyICosIGNvbnN0IGNo YXIgKik7CgoKaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGFzcHJpbnRmIChjaGFyICoq LCBjb25zdCBjaGFyICosIC4uLik7CmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBmc2Vl a28gKEZJTEUgKiwgb2ZmX3QsIGludCk7Cm9mZl90IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykp IGZ0ZWxsbyAoIEZJTEUgKik7CmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSB2Zmlwcmlu dGYgKEZJTEUgKiwgY29uc3QgY2hhciAqLCBfX2dudWNfdmFfbGlzdCk7CmludCBfX2F0dHJpYnV0 ZV9fKChfX2NkZWNsX18pKSBpcHJpbnRmIChjb25zdCBjaGFyICosIC4uLik7CmludCBfX2F0dHJp YnV0ZV9fKChfX2NkZWNsX18pKSBmaXByaW50ZiAoRklMRSAqLCBjb25zdCBjaGFyICosIC4uLik7 CmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBzaXByaW50ZiAoY2hhciAqLCBjb25zdCBj aGFyICosIC4uLik7CmNoYXIgKiBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSB0ZW1wbmFtIChj b25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18p KSB2YXNwcmludGYgKGNoYXIgKiosIGNvbnN0IGNoYXIgKiwgX19nbnVjX3ZhX2xpc3QpOwppbnQg X19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgdnNucHJpbnRmIChjaGFyICosIHNpemVfdCwgY29u c3QgY2hhciAqLCBfX2dudWNfdmFfbGlzdCk7CmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18p KSB2ZnNjYW5mIChGSUxFICosIGNvbnN0IGNoYXIgKiwgX19nbnVjX3ZhX2xpc3QpOwppbnQgX19h dHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgdnNjYW5mIChjb25zdCBjaGFyICosIF9fZ251Y192YV9s aXN0KTsKaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHZzc2NhbmYgKGNvbnN0IGNoYXIg KiwgY29uc3QgY2hhciAqLCBfX2dudWNfdmFfbGlzdCk7CgppbnQgX19hdHRyaWJ1dGVfXygoX19j ZGVjbF9fKSkgZmNsb3NlYWxsICh2b2lkKTsKaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykp IHNucHJpbnRmIChjaGFyICosIHNpemVfdCwgY29uc3QgY2hhciAqLCAuLi4pOwojIDIzMSAiL3Vz ci9pbmNsdWRlL3N0ZGlvLmgiIDMgNApGSUxFICogX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkg ZmRvcGVuIChpbnQsIGNvbnN0IGNoYXIgKik7CgppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9f KSkgZmlsZW5vIChGSUxFICopOwppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgZ2V0dyAo RklMRSAqKTsKaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHBjbG9zZSAoRklMRSAqKTsK RklMRSAqIF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHBvcGVuIChjb25zdCBjaGFyICosIGNv bnN0IGNoYXIgKik7CmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBwdXR3IChpbnQsIEZJ TEUgKik7CnZvaWQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgc2V0YnVmZmVyIChGSUxFICos IGNoYXIgKiwgaW50KTsKaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHNldGxpbmVidWYg KEZJTEUgKik7CmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBnZXRjX3VubG9ja2VkIChG SUxFICopOwppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgZ2V0Y2hhcl91bmxvY2tlZCAo dm9pZCk7CnZvaWQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgZmxvY2tmaWxlIChGSUxFICop OwppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgZnRyeWxvY2tmaWxlIChGSUxFICopOwp2 b2lkIF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGZ1bmxvY2tmaWxlIChGSUxFICopOwppbnQg X19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgcHV0Y191bmxvY2tlZCAoaW50LCBGSUxFICopOwpp bnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgcHV0Y2hhcl91bmxvY2tlZCAoaW50KTsKCgoK CgoKaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIF9hc3ByaW50Zl9yIChzdHJ1Y3QgX3Jl ZW50ICosIGNoYXIgKiosIGNvbnN0IGNoYXIgKiwgLi4uKTsKaW50IF9fYXR0cmlidXRlX18oKF9f Y2RlY2xfXykpIF9mY2xvc2VhbGxfciAoc3RydWN0IF9yZWVudCAqKTsKRklMRSAqIF9fYXR0cmli dXRlX18oKF9fY2RlY2xfXykpIF9mZG9wZW5fciAoc3RydWN0IF9yZWVudCAqLCBpbnQsIGNvbnN0 IGNoYXIgKik7CkZJTEUgKiBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBfZm9wZW5fciAoc3Ry dWN0IF9yZWVudCAqLCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CmludCBfX2F0dHJpYnV0 ZV9fKChfX2NkZWNsX18pKSBfZnNjYW5mX3IgKHN0cnVjdCBfcmVlbnQgKiwgRklMRSAqLCBjb25z dCBjaGFyICosIC4uLik7CmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBfZ2V0Y2hhcl9y IChzdHJ1Y3QgX3JlZW50ICopOwpjaGFyICogX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgX2dl dHNfciAoc3RydWN0IF9yZWVudCAqLCBjaGFyICopOwppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVj bF9fKSkgX2lwcmludGZfciAoc3RydWN0IF9yZWVudCAqLCBjb25zdCBjaGFyICosIC4uLik7Cmlu dCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBfbWtzdGVtcF9yIChzdHJ1Y3QgX3JlZW50ICos IGNoYXIgKik7CmNoYXIgKiBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBfbWt0ZW1wX3IgKHN0 cnVjdCBfcmVlbnQgKiwgY2hhciAqKTsKdm9pZCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBf cGVycm9yX3IgKHN0cnVjdCBfcmVlbnQgKiwgY29uc3QgY2hhciAqKTsKaW50IF9fYXR0cmlidXRl X18oKF9fY2RlY2xfXykpIF9wcmludGZfciAoc3RydWN0IF9yZWVudCAqLCBjb25zdCBjaGFyICos IC4uLik7CmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBfcHV0Y2hhcl9yIChzdHJ1Y3Qg X3JlZW50ICosIGludCk7CmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBfcHV0c19yIChz dHJ1Y3QgX3JlZW50ICosIGNvbnN0IGNoYXIgKik7CmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNs X18pKSBfcmVtb3ZlX3IgKHN0cnVjdCBfcmVlbnQgKiwgY29uc3QgY2hhciAqKTsKaW50IF9fYXR0 cmlidXRlX18oKF9fY2RlY2xfXykpIF9yZW5hbWVfciAoc3RydWN0IF9yZWVudCAqLCBjb25zdCBj aGFyICpfb2xkLCBjb25zdCBjaGFyICpfbmV3KTsKCmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNs X18pKSBfc2NhbmZfciAoc3RydWN0IF9yZWVudCAqLCBjb25zdCBjaGFyICosIC4uLik7CmludCBf X2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBfc3ByaW50Zl9yIChzdHJ1Y3QgX3JlZW50ICosIGNo YXIgKiwgY29uc3QgY2hhciAqLCAuLi4pOwppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkg X3NucHJpbnRmX3IgKHN0cnVjdCBfcmVlbnQgKiwgY2hhciAqLCBzaXplX3QsIGNvbnN0IGNoYXIg KiwgLi4uKTsKaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIF9zc2NhbmZfciAoc3RydWN0 IF9yZWVudCAqLCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgLi4uKTsKY2hhciAqIF9fYXR0 cmlidXRlX18oKF9fY2RlY2xfXykpIF90ZW1wbmFtX3IgKHN0cnVjdCBfcmVlbnQgKiwgY29uc3Qg Y2hhciAqLCBjb25zdCBjaGFyICopOwpGSUxFICogX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkg X3RtcGZpbGVfciAoc3RydWN0IF9yZWVudCAqKTsKY2hhciAqIF9fYXR0cmlidXRlX18oKF9fY2Rl Y2xfXykpIF90bXBuYW1fciAoc3RydWN0IF9yZWVudCAqLCBjaGFyICopOwppbnQgX19hdHRyaWJ1 dGVfXygoX19jZGVjbF9fKSkgX3Zhc3ByaW50Zl9yIChzdHJ1Y3QgX3JlZW50ICosIGNoYXIgKios IGNvbnN0IGNoYXIgKiwgX19nbnVjX3ZhX2xpc3QpOwppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVj bF9fKSkgX3ZmcHJpbnRmX3IgKHN0cnVjdCBfcmVlbnQgKiwgRklMRSAqLCBjb25zdCBjaGFyICos IF9fZ251Y192YV9saXN0KTsKaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIF92cHJpbnRm X3IgKHN0cnVjdCBfcmVlbnQgKiwgY29uc3QgY2hhciAqLCBfX2dudWNfdmFfbGlzdCk7CmludCBf X2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBfdnNwcmludGZfciAoc3RydWN0IF9yZWVudCAqLCBj aGFyICosIGNvbnN0IGNoYXIgKiwgX19nbnVjX3ZhX2xpc3QpOwppbnQgX19hdHRyaWJ1dGVfXygo X19jZGVjbF9fKSkgX3ZzbnByaW50Zl9yIChzdHJ1Y3QgX3JlZW50ICosIGNoYXIgKiwgc2l6ZV90 LCBjb25zdCBjaGFyICosIF9fZ251Y192YV9saXN0KTsKaW50IF9fYXR0cmlidXRlX18oKF9fY2Rl Y2xfXykpIF92ZnNjYW5mX3IgKHN0cnVjdCBfcmVlbnQgKiwgRklMRSAqLCBjb25zdCBjaGFyICos IF9fZ251Y192YV9saXN0KTsKaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIF92c2NhbmZf ciAoc3RydWN0IF9yZWVudCAqLCBjb25zdCBjaGFyICosIF9fZ251Y192YV9saXN0KTsKaW50IF9f YXR0cmlidXRlX18oKF9fY2RlY2xfXykpIF92c3NjYW5mX3IgKHN0cnVjdCBfcmVlbnQgKiwgY29u c3QgY2hhciAqLCBjb25zdCBjaGFyICosIF9fZ251Y192YV9saXN0KTsKCnNzaXplX3QgX19hdHRy aWJ1dGVfXygoX19jZGVjbF9fKSkgX19nZXRkZWxpbSAoY2hhciAqKiwgc2l6ZV90ICosIGludCwg RklMRSAqKTsKc3NpemVfdCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBfX2dldGxpbmUgKGNo YXIgKiosIHNpemVfdCAqLCBGSUxFICopOwojIDMwOSAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDMg NAppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgX19zcmdldCAoRklMRSAqKTsKaW50IF9f YXR0cmlidXRlX18oKF9fY2RlY2xfXykpIF9fc3didWYgKGludCwgRklMRSAqKTsKCgoKCgoKRklM RSAqX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgZnVub3BlbiAoY29uc3Qgdm9pZCAqIF9jb29r aWUsIGludCAoKnJlYWRmbikodm9pZCAqIF9jb29raWUsIGNoYXIgKl9idWYsIGludCBfbiksIGlu dCAoKndyaXRlZm4pKHZvaWQgKiBfY29va2llLCBjb25zdCBjaGFyICpfYnVmLCBpbnQgX24pLCBm cG9zX3QgKCpzZWVrZm4pKHZvaWQgKiBfY29va2llLCBmcG9zX3QgX29mZiwgaW50IF93aGVuY2Up LCBpbnQgKCpjbG9zZWZuKSh2b2lkICogX2Nvb2tpZSkpOwojIDMzNCAiL3Vzci9pbmNsdWRlL3N0 ZGlvLmgiIDMgNApzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19zZ2V0YyhGSUxFICpfX3ApCiAgewog ICAgaW50IF9fYyA9ICgtLShfX3ApLT5fciA8IDAgPyBfX3NyZ2V0KF9fcCkgOiAoaW50KSgqKF9f cCktPl9wKyspKTsKICAgIGlmICgoX19wLT5fZmxhZ3MgJiAweDQwMDApICYmIChfX2MgPT0gJ1xy JykpCiAgICAgIHsKICAgICAgaW50IF9fYzIgPSAoLS0oX19wKS0+X3IgPCAwID8gX19zcmdldChf X3ApIDogKGludCkoKihfX3ApLT5fcCsrKSk7CiAgICAgIGlmIChfX2MyID09ICdcbicpCiAgICAg ICAgX19jID0gX19jMjsKICAgICAgZWxzZQogICAgICAgIHVuZ2V0YyhfX2MyLCBfX3ApOwogICAg ICB9CiAgICByZXR1cm4gX19jOwogIH0KIyA0MTYgIi91c3IvaW5jbHVkZS9zdGRpby5oIiAzIDQK fQojIDUzICIvaG9tZS9BZG1pbmlzdHJhdG9yL2djY3Rlc3RpbmcvbGliL2djYy1saWIvaTY4Ni1w Yy1jeWd3aW4vMy40L2luY2x1ZGUvYysrL2NzdGRpbyIgMiAzCiMgOTcgIi9ob21lL0FkbWluaXN0 cmF0b3IvZ2NjdGVzdGluZy9saWIvZ2NjLWxpYi9pNjg2LXBjLWN5Z3dpbi8zLjQvaW5jbHVkZS9j KysvY3N0ZGlvIiAzCm5hbWVzcGFjZSBzdGQKewogIHVzaW5nIDo6RklMRTsKICB1c2luZyA6OmZw b3NfdDsKCiAgdXNpbmcgOjpjbGVhcmVycjsKICB1c2luZyA6OmZjbG9zZTsKICB1c2luZyA6OmZl b2Y7CiAgdXNpbmcgOjpmZXJyb3I7CiAgdXNpbmcgOjpmZmx1c2g7CiAgdXNpbmcgOjpmZ2V0YzsK ICB1c2luZyA6OmZnZXRwb3M7CiAgdXNpbmcgOjpmZ2V0czsKICB1c2luZyA6OmZvcGVuOwogIHVz aW5nIDo6ZnByaW50ZjsKICB1c2luZyA6OmZwdXRjOwogIHVzaW5nIDo6ZnB1dHM7CiAgdXNpbmcg OjpmcmVhZDsKICB1c2luZyA6OmZyZW9wZW47CiAgdXNpbmcgOjpmc2NhbmY7CiAgdXNpbmcgOjpm c2VlazsKICB1c2luZyA6OmZzZXRwb3M7CiAgdXNpbmcgOjpmdGVsbDsKICB1c2luZyA6OmZ3cml0 ZTsKICB1c2luZyA6OmdldGM7CiAgdXNpbmcgOjpnZXRjaGFyOwogIHVzaW5nIDo6Z2V0czsKICB1 c2luZyA6OnBlcnJvcjsKICB1c2luZyA6OnByaW50ZjsKICB1c2luZyA6OnB1dGM7CiAgdXNpbmcg OjpwdXRjaGFyOwogIHVzaW5nIDo6cHV0czsKICB1c2luZyA6OnJlbW92ZTsKICB1c2luZyA6OnJl bmFtZTsKICB1c2luZyA6OnJld2luZDsKICB1c2luZyA6OnNjYW5mOwogIHVzaW5nIDo6c2V0YnVm OwogIHVzaW5nIDo6c2V0dmJ1ZjsKICB1c2luZyA6OnNwcmludGY7CiAgdXNpbmcgOjpzc2NhbmY7 CiAgdXNpbmcgOjp0bXBmaWxlOwogIHVzaW5nIDo6dG1wbmFtOwogIHVzaW5nIDo6dW5nZXRjOwog IHVzaW5nIDo6dmZwcmludGY7CiAgdXNpbmcgOjp2cHJpbnRmOwogIHVzaW5nIDo6dnNwcmludGY7 Cn0KIyAzNiAiL2hvbWUvQWRtaW5pc3RyYXRvci9nY2N0ZXN0aW5nL2xpYi9nY2MtbGliL2k2ODYt cGMtY3lnd2luLzMuNC9pbmNsdWRlL2MrKy9pNjg2LXBjLWN5Z3dpbi9iaXRzL2MrK2lvLmgiIDIg MwoKIyAxICIvaG9tZS9BZG1pbmlzdHJhdG9yL2djY3Rlc3RpbmcvbGliL2djYy1saWIvaTY4Ni1w Yy1jeWd3aW4vMy40L2luY2x1ZGUvYysrL2k2ODYtcGMtY3lnd2luL2JpdHMvZ3Roci5oIiAxIDMK IyA5NiAiL2hvbWUvQWRtaW5pc3RyYXRvci9nY2N0ZXN0aW5nL2xpYi9nY2MtbGliL2k2ODYtcGMt Y3lnd2luLzMuNC9pbmNsdWRlL2MrKy9pNjg2LXBjLWN5Z3dpbi9iaXRzL2d0aHIuaCIgMwojIDEg Ii9ob21lL0FkbWluaXN0cmF0b3IvZ2NjdGVzdGluZy9saWIvZ2NjLWxpYi9pNjg2LXBjLWN5Z3dp bi8zLjQvaW5jbHVkZS9jKysvaTY4Ni1wYy1jeWd3aW4vYml0cy9ndGhyLWRlZmF1bHQuaCIgMSAz CiMgMzcgIi9ob21lL0FkbWluaXN0cmF0b3IvZ2NjdGVzdGluZy9saWIvZ2NjLWxpYi9pNjg2LXBj LWN5Z3dpbi8zLjQvaW5jbHVkZS9jKysvaTY4Ni1wYy1jeWd3aW4vYml0cy9ndGhyLWRlZmF1bHQu aCIgMwojIDEgIi91c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDEgMyA0CiMgMTQgIi91c3IvaW5jbHVk ZS9wdGhyZWFkLmgiIDMgNAojIDEgIi91c3IvaW5jbHVkZS9zaWduYWwuaCIgMSAzIDQKCgoKCiMg MSAiL3Vzci9pbmNsdWRlL3N5cy9zaWduYWwuaCIgMSAzIDQKCgoKCgoKZXh0ZXJuICJDIiB7CiMg MTkgIi91c3IvaW5jbHVkZS9zeXMvc2lnbmFsLmgiIDMgNAp0eXBlZGVmIHVuc2lnbmVkIGxvbmcg c2lnc2V0X3Q7CiMgMTA5ICIvdXNyL2luY2x1ZGUvc3lzL3NpZ25hbC5oIiAzIDQKdHlwZWRlZiB2 b2lkICgqX3NpZ19mdW5jX3B0cikoaW50KTsKCnN0cnVjdCBzaWdhY3Rpb24KewogICAgICAgIF9z aWdfZnVuY19wdHIgc2FfaGFuZGxlcjsKICAgICAgICBzaWdzZXRfdCBzYV9tYXNrOwogICAgICAg IGludCBzYV9mbGFnczsKfTsKIyAxMzkgIi91c3IvaW5jbHVkZS9zeXMvc2lnbmFsLmgiIDMgNApp bnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgc2lncHJvY21hc2sgKGludCBob3csIGNvbnN0 IHNpZ3NldF90ICpzZXQsIHNpZ3NldF90ICpvc2V0KTsKCgppbnQgX19hdHRyaWJ1dGVfXygoX19j ZGVjbF9fKSkgcHRocmVhZF9zaWdtYXNrIChpbnQgaG93LCBjb25zdCBzaWdzZXRfdCAqc2V0LCBz aWdzZXRfdCAqb3NldCk7CiMgMTUzICIvdXNyL2luY2x1ZGUvc3lzL3NpZ25hbC5oIiAzIDQKaW50 IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGtpbGwgKGludCwgaW50KTsKaW50IF9fYXR0cmli dXRlX18oKF9fY2RlY2xfXykpIGtpbGxwZyAocGlkX3QsIGludCk7CmludCBfX2F0dHJpYnV0ZV9f KChfX2NkZWNsX18pKSBzaWdhY3Rpb24gKGludCwgY29uc3Qgc3RydWN0IHNpZ2FjdGlvbiAqLCBz dHJ1Y3Qgc2lnYWN0aW9uICopOwppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgc2lnYWRk c2V0IChzaWdzZXRfdCAqLCBjb25zdCBpbnQpOwppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9f KSkgc2lnZGVsc2V0IChzaWdzZXRfdCAqLCBjb25zdCBpbnQpOwppbnQgX19hdHRyaWJ1dGVfXygo X19jZGVjbF9fKSkgc2lnaXNtZW1iZXIgKGNvbnN0IHNpZ3NldF90ICosIGludCk7CmludCBfX2F0 dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBzaWdmaWxsc2V0IChzaWdzZXRfdCAqKTsKaW50IF9fYXR0 cmlidXRlX18oKF9fY2RlY2xfXykpIHNpZ2VtcHR5c2V0IChzaWdzZXRfdCAqKTsKaW50IF9fYXR0 cmlidXRlX18oKF9fY2RlY2xfXykpIHNpZ3BlbmRpbmcgKHNpZ3NldF90ICopOwppbnQgX19hdHRy aWJ1dGVfXygoX19jZGVjbF9fKSkgc2lnc3VzcGVuZCAoY29uc3Qgc2lnc2V0X3QgKik7CmludCBf X2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBzaWdwYXVzZSAoaW50KTsKCgoKCgoKCmludCBfX2F0 dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBwdGhyZWFkX2tpbGwgKHB0aHJlYWRfdCB0aHJlYWQsIGlu dCBzaWcpOwojIDM0MCAiL3Vzci9pbmNsdWRlL3N5cy9zaWduYWwuaCIgMyA0Cn0KIyA2ICIvdXNy L2luY2x1ZGUvc2lnbmFsLmgiIDIgMyA0CgpleHRlcm4gIkMiIHsKCnR5cGVkZWYgaW50IHNpZ19h dG9taWNfdDsKCgoKCgpzdHJ1Y3QgX3JlZW50OwoKX3NpZ19mdW5jX3B0ciBfX2F0dHJpYnV0ZV9f KChfX2NkZWNsX18pKSBfc2lnbmFsX3IgKHN0cnVjdCBfcmVlbnQgKiwgaW50LCBfc2lnX2Z1bmNf cHRyKTsKaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIF9yYWlzZV9yIChzdHJ1Y3QgX3Jl ZW50ICosIGludCk7CgoKX3NpZ19mdW5jX3B0ciBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBz aWduYWwgKGludCwgX3NpZ19mdW5jX3B0cik7CmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18p KSByYWlzZSAoaW50KTsKCgp9CiMgMTUgIi91c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDIgMyA0CiMg MSAiL3Vzci9pbmNsdWRlL3NjaGVkLmgiIDEgMyA0CiMgMTcgIi91c3IvaW5jbHVkZS9zY2hlZC5o IiAzIDQKIyAxICIvdXNyL2luY2x1ZGUvdGltZS5oIiAxIDMgNAojIDE4ICIvdXNyL2luY2x1ZGUv dGltZS5oIiAzIDQKIyAxICIvdXNyL2luY2x1ZGUvbWFjaGluZS90aW1lLmgiIDEgMyA0CiMgMTkg Ii91c3IvaW5jbHVkZS90aW1lLmgiIDIgMyA0CiMgMjcgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMg NAojIDEgIi9ob21lL0FkbWluaXN0cmF0b3IvZ2NjdGVzdGluZy9saWIvZ2NjLWxpYi9pNjg2LXBj LWN5Z3dpbi8zLjQvaW5jbHVkZS9zdGRkZWYuaCIgMSAzIDQKIyAyOCAiL3Vzci9pbmNsdWRlL3Rp bWUuaCIgMiAzIDQKCgoKZXh0ZXJuICJDIiB7CgpzdHJ1Y3QgdG0KewogIGludCB0bV9zZWM7CiAg aW50IHRtX21pbjsKICBpbnQgdG1faG91cjsKICBpbnQgdG1fbWRheTsKICBpbnQgdG1fbW9uOwog IGludCB0bV95ZWFyOwogIGludCB0bV93ZGF5OwogIGludCB0bV95ZGF5OwogIGludCB0bV9pc2Rz dDsKfTsKCmNsb2NrX3QgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgY2xvY2sgKHZvaWQpOwpk b3VibGUgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgZGlmZnRpbWUgKHRpbWVfdCBfdGltZTIs IHRpbWVfdCBfdGltZTEpOwp0aW1lX3QgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgbWt0aW1l IChzdHJ1Y3QgdG0gKl90aW1lcHRyKTsKdGltZV90IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykp IHRpbWUgKHRpbWVfdCAqX3RpbWVyKTsKCmNoYXIgKl9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykp IGFzY3RpbWUgKGNvbnN0IHN0cnVjdCB0bSAqX3RibG9jayk7CmNoYXIgKl9fYXR0cmlidXRlX18o KF9fY2RlY2xfXykpIGN0aW1lIChjb25zdCB0aW1lX3QgKl90aW1lKTsKc3RydWN0IHRtICpfX2F0 dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBnbXRpbWUgKGNvbnN0IHRpbWVfdCAqX3RpbWVyKTsKc3Ry dWN0IHRtICpfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBsb2NhbHRpbWUgKGNvbnN0IHRpbWVf dCAqX3RpbWVyKTsKCnNpemVfdCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBzdHJmdGltZSAo Y2hhciAqX3MsIHNpemVfdCBfbWF4c2l6ZSwgY29uc3QgY2hhciAqX2ZtdCwgY29uc3Qgc3RydWN0 IHRtICpfdCk7CgpjaGFyICpfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBhc2N0aW1lX3IgKGNv bnN0IHN0cnVjdCB0bSAqLCBjaGFyICopOwpjaGFyICpfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18p KSBjdGltZV9yIChjb25zdCB0aW1lX3QgKiwgY2hhciAqKTsKc3RydWN0IHRtICpfX2F0dHJpYnV0 ZV9fKChfX2NkZWNsX18pKSBnbXRpbWVfciAoY29uc3QgdGltZV90ICosIHN0cnVjdCB0bSAqKTsK c3RydWN0IHRtICpfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBsb2NhbHRpbWVfciAoY29uc3Qg dGltZV90ICosIHN0cnVjdCB0bSAqKTsKCn0KCgpleHRlcm4gIkMiIHsKCgoKY2hhciAqX19hdHRy aWJ1dGVfXygoX19jZGVjbF9fKSkgc3RycHRpbWUgKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAq LCBzdHJ1Y3QgdG0gKik7CnZvaWQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgdHpzZXQgKHZv aWQpOwp2b2lkIF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIF90enNldF9yIChzdHJ1Y3QgX3Jl ZW50ICopOwojIDk4ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzIDQKZXh0ZXJuIF9fYXR0cmlidXRl X18oKGRsbGltcG9ydCkpIHRpbWVfdCBfdGltZXpvbmU7CmV4dGVybiBfX2F0dHJpYnV0ZV9fKChk bGxpbXBvcnQpKSBpbnQgX2RheWxpZ2h0OwpleHRlcm4gX19hdHRyaWJ1dGVfXygoZGxsaW1wb3J0 KSkgY2hhciAqX3R6bmFtZVsyXTsKIyAxMTcgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMgNApjaGFy ICpfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSB0aW1lem9uZSAodm9pZCk7CgoKCgoKfQojIDE2 OSAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMyA0CmV4dGVybiAiQyIgewoKaW50IF9fYXR0cmlidXRl X18oKF9fY2RlY2xfXykpIG5hbm9zbGVlcCAoY29uc3Qgc3RydWN0IHRpbWVzcGVjICpycXRwLCBz dHJ1Y3QgdGltZXNwZWMgKnJtdHApOwoKfQoKCgoKCmV4dGVybiAiQyIgewojIDI0NyAiL3Vzci9p bmNsdWRlL3RpbWUuaCIgMyA0Cn0KIyAxOCAiL3Vzci9pbmNsdWRlL3NjaGVkLmgiIDIgMyA0CgoK CgoKCnN0cnVjdCBzY2hlZF9wYXJhbQp7CiAgaW50IHNjaGVkX3ByaW9yaXR5Owp9OwoKCmV4dGVy biAiQyIgewoKCgppbnQgc2NoZWRfZ2V0X3ByaW9yaXR5X21heCAoaW50KTsKCmludCBzY2hlZF9n ZXRfcHJpb3JpdHlfbWluIChpbnQpOwoKaW50IHNjaGVkX2dldHBhcmFtIChwaWRfdCwgc3RydWN0 IHNjaGVkX3BhcmFtICopOwoKaW50IHNjaGVkX2dldHNjaGVkdWxlciAocGlkX3QpOwoKaW50IHNj aGVkX3JyX2dldF9pbnRlcnZhbCAocGlkX3QsIHN0cnVjdCB0aW1lc3BlYyAqKTsKCmludCBzY2hl ZF9zZXRwYXJhbSAocGlkX3QsIGNvbnN0IHN0cnVjdCBzY2hlZF9wYXJhbSAqKTsKCmludCBzY2hl ZF9zZXRzY2hlZHVsZXIgKHBpZF90LCBpbnQsIGNvbnN0IHN0cnVjdCBzY2hlZF9wYXJhbSAqKTsK CmludCBzY2hlZF95aWVsZCAodm9pZCk7CiMgNjIgIi91c3IvaW5jbHVkZS9zY2hlZC5oIiAzIDQK fQojIDE2ICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAyIDMgNAoKCgoKCmV4dGVybiAiQyIKewoj IDcxICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAzIDQKaW50IHB0aHJlYWRfYXR0cl9kZXN0cm95 IChwdGhyZWFkX2F0dHJfdCAqKTsKaW50IHB0aHJlYWRfYXR0cl9nZXRkZXRhY2hzdGF0ZSAoY29u c3QgcHRocmVhZF9hdHRyX3QgKiwgaW50ICopOwppbnQgcHRocmVhZF9hdHRyX2dldGluaGVyaXRz Y2hlZCAoY29uc3QgcHRocmVhZF9hdHRyX3QgKiwgaW50ICopOwppbnQgcHRocmVhZF9hdHRyX2dl dHNjaGVkcGFyYW0gKGNvbnN0IHB0aHJlYWRfYXR0cl90ICosIHN0cnVjdCBzY2hlZF9wYXJhbSAq KTsKaW50IHB0aHJlYWRfYXR0cl9nZXRzY2hlZHBvbGljeSAoY29uc3QgcHRocmVhZF9hdHRyX3Qg KiwgaW50ICopOwppbnQgcHRocmVhZF9hdHRyX2dldHNjb3BlIChjb25zdCBwdGhyZWFkX2F0dHJf dCAqLCBpbnQgKik7CmludCBwdGhyZWFkX2F0dHJfaW5pdCAocHRocmVhZF9hdHRyX3QgKik7Cmlu dCBwdGhyZWFkX2F0dHJfc2V0ZGV0YWNoc3RhdGUgKHB0aHJlYWRfYXR0cl90ICosIGludCk7Cmlu dCBwdGhyZWFkX2F0dHJfc2V0aW5oZXJpdHNjaGVkIChwdGhyZWFkX2F0dHJfdCAqLCBpbnQpOwpp bnQgcHRocmVhZF9hdHRyX3NldHNjaGVkcGFyYW0gKHB0aHJlYWRfYXR0cl90ICosIGNvbnN0IHN0 cnVjdCBzY2hlZF9wYXJhbSAqKTsKaW50IHB0aHJlYWRfYXR0cl9zZXRzY2hlZHBvbGljeSAocHRo cmVhZF9hdHRyX3QgKiwgaW50KTsKaW50IHB0aHJlYWRfYXR0cl9zZXRzY29wZSAocHRocmVhZF9h dHRyX3QgKiwgaW50KTsKIyA5NCAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMyA0CmludCBwdGhy ZWFkX2F0dHJfZ2V0c3RhY2tzaXplIChjb25zdCBwdGhyZWFkX2F0dHJfdCAqLCBzaXplX3QgKik7 CmludCBwdGhyZWFkX2F0dHJfc2V0c3RhY2tzaXplIChwdGhyZWFkX2F0dHJfdCAqLCBzaXplX3Qp OwoKCmludCBwdGhyZWFkX2NhbmNlbCAocHRocmVhZF90KTsKCgoKCgp0eXBlZGVmIHZvaWQgKCpf X2NsZWFudXBfcm91dGluZV90eXBlKSAodm9pZCAqKTsKdHlwZWRlZiBzdHJ1Y3QgX3B0aHJlYWRf Y2xlYW51cF9oYW5kbGVyCnsKICBfX2NsZWFudXBfcm91dGluZV90eXBlIGZ1bmN0aW9uOwogIHZv aWQgKmFyZzsKICBzdHJ1Y3QgX3B0aHJlYWRfY2xlYW51cF9oYW5kbGVyICpuZXh0Owp9IF9fcHRo cmVhZF9jbGVhbnVwX2hhbmRsZXI7Cgp2b2lkIF9wdGhyZWFkX2NsZWFudXBfcHVzaCAoX19wdGhy ZWFkX2NsZWFudXBfaGFuZGxlciAqaGFuZGxlcik7CnZvaWQgX3B0aHJlYWRfY2xlYW51cF9wb3Ag KGludCBleGVjdXRlKTsKCgoKCgoKCmludCBwdGhyZWFkX2NvbmRfYnJvYWRjYXN0IChwdGhyZWFk X2NvbmRfdCAqKTsKaW50IHB0aHJlYWRfY29uZF9kZXN0cm95IChwdGhyZWFkX2NvbmRfdCAqKTsK aW50IHB0aHJlYWRfY29uZF9pbml0IChwdGhyZWFkX2NvbmRfdCAqLCBjb25zdCBwdGhyZWFkX2Nv bmRhdHRyX3QgKik7CmludCBwdGhyZWFkX2NvbmRfc2lnbmFsIChwdGhyZWFkX2NvbmRfdCAqKTsK aW50IHB0aHJlYWRfY29uZF90aW1lZHdhaXQgKHB0aHJlYWRfY29uZF90ICosCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICBwdGhyZWFkX211dGV4X3QgKiwgY29uc3Qgc3RydWN0IHRpbWVzcGVj ICopOwppbnQgcHRocmVhZF9jb25kX3dhaXQgKHB0aHJlYWRfY29uZF90ICosIHB0aHJlYWRfbXV0 ZXhfdCAqKTsKaW50IHB0aHJlYWRfY29uZGF0dHJfZGVzdHJveSAocHRocmVhZF9jb25kYXR0cl90 ICopOwppbnQgcHRocmVhZF9jb25kYXR0cl9nZXRwc2hhcmVkIChjb25zdCBwdGhyZWFkX2NvbmRh dHRyX3QgKiwgaW50ICopOwppbnQgcHRocmVhZF9jb25kYXR0cl9pbml0IChwdGhyZWFkX2NvbmRh dHRyX3QgKik7CmludCBwdGhyZWFkX2NvbmRhdHRyX3NldHBzaGFyZWQgKHB0aHJlYWRfY29uZGF0 dHJfdCAqLCBpbnQpOwoKaW50IHB0aHJlYWRfY3JlYXRlIChwdGhyZWFkX3QgKiwgY29uc3QgcHRo cmVhZF9hdHRyX3QgKiwKICAgICAgICAgICAgICAgICAgICB2b2lkICooKikodm9pZCAqKSwgdm9p ZCAqKTsKaW50IHB0aHJlYWRfZGV0YWNoIChwdGhyZWFkX3QpOwppbnQgcHRocmVhZF9lcXVhbCAo cHRocmVhZF90LCBwdGhyZWFkX3QpOwp2b2lkIHB0aHJlYWRfZXhpdCAodm9pZCAqKTsKaW50IHB0 aHJlYWRfZ2V0c2NoZWRwYXJhbSAocHRocmVhZF90LCBpbnQgKiwgc3RydWN0IHNjaGVkX3BhcmFt ICopOwp2b2lkICpwdGhyZWFkX2dldHNwZWNpZmljIChwdGhyZWFkX2tleV90KTsKaW50IHB0aHJl YWRfam9pbiAocHRocmVhZF90LCB2b2lkICoqKTsKaW50IHB0aHJlYWRfa2V5X2NyZWF0ZSAocHRo cmVhZF9rZXlfdCAqLCB2b2lkICgqKSh2b2lkICopKTsKaW50IHB0aHJlYWRfa2V5X2RlbGV0ZSAo cHRocmVhZF9rZXlfdCk7CgoKaW50IHB0aHJlYWRfbXV0ZXhfZGVzdHJveSAocHRocmVhZF9tdXRl eF90ICopOwppbnQgcHRocmVhZF9tdXRleF9nZXRwcmlvY2VpbGluZyAoY29uc3QgcHRocmVhZF9t dXRleF90ICosIGludCAqKTsKaW50IHB0aHJlYWRfbXV0ZXhfaW5pdCAocHRocmVhZF9tdXRleF90 ICosIGNvbnN0IHB0aHJlYWRfbXV0ZXhhdHRyX3QgKik7CmludCBwdGhyZWFkX211dGV4X2xvY2sg KHB0aHJlYWRfbXV0ZXhfdCAqKTsKaW50IHB0aHJlYWRfbXV0ZXhfc2V0cHJpb2NlaWxpbmcgKHB0 aHJlYWRfbXV0ZXhfdCAqLCBpbnQsIGludCAqKTsKaW50IHB0aHJlYWRfbXV0ZXhfdHJ5bG9jayAo cHRocmVhZF9tdXRleF90ICopOwppbnQgcHRocmVhZF9tdXRleF91bmxvY2sgKHB0aHJlYWRfbXV0 ZXhfdCAqKTsKaW50IHB0aHJlYWRfbXV0ZXhhdHRyX2Rlc3Ryb3kgKHB0aHJlYWRfbXV0ZXhhdHRy X3QgKik7CmludCBwdGhyZWFkX211dGV4YXR0cl9nZXRwcmlvY2VpbGluZyAoY29uc3QgcHRocmVh ZF9tdXRleGF0dHJfdCAqLCBpbnQgKik7CmludCBwdGhyZWFkX211dGV4YXR0cl9nZXRwcm90b2Nv bCAoY29uc3QgcHRocmVhZF9tdXRleGF0dHJfdCAqLCBpbnQgKik7CmludCBwdGhyZWFkX211dGV4 YXR0cl9nZXRwc2hhcmVkIChjb25zdCBwdGhyZWFkX211dGV4YXR0cl90ICosIGludCAqKTsKaW50 IHB0aHJlYWRfbXV0ZXhhdHRyX2dldHR5cGUgKGNvbnN0IHB0aHJlYWRfbXV0ZXhhdHRyX3QgKiwg aW50ICopOwppbnQgcHRocmVhZF9tdXRleGF0dHJfaW5pdCAocHRocmVhZF9tdXRleGF0dHJfdCAq KTsKaW50IHB0aHJlYWRfbXV0ZXhhdHRyX3NldHByaW9jZWlsaW5nIChwdGhyZWFkX211dGV4YXR0 cl90ICosIGludCk7CmludCBwdGhyZWFkX211dGV4YXR0cl9zZXRwcm90b2NvbCAocHRocmVhZF9t dXRleGF0dHJfdCAqLCBpbnQpOwppbnQgcHRocmVhZF9tdXRleGF0dHJfc2V0cHNoYXJlZCAocHRo cmVhZF9tdXRleGF0dHJfdCAqLCBpbnQpOwppbnQgcHRocmVhZF9tdXRleGF0dHJfc2V0dHlwZSAo cHRocmVhZF9tdXRleGF0dHJfdCAqLCBpbnQpOwoKaW50IHB0aHJlYWRfb25jZSAocHRocmVhZF9v bmNlX3QgKiwgdm9pZCAoKikodm9pZCkpOwoKCmludCBwdGhyZWFkX2dldGNvbmN1cnJlbmN5ICh2 b2lkKTsKaW50IHB0aHJlYWRfc2V0Y29uY3VycmVuY3kgKGludCk7CgoKcHRocmVhZF90IHB0aHJl YWRfc2VsZiAodm9pZCk7CmludCBwdGhyZWFkX3NldGNhbmNlbHN0YXRlIChpbnQsIGludCAqKTsK aW50IHB0aHJlYWRfc2V0Y2FuY2VsdHlwZSAoaW50LCBpbnQgKik7CmludCBwdGhyZWFkX3NldHNj aGVkcGFyYW0gKHB0aHJlYWRfdCwgaW50LCBjb25zdCBzdHJ1Y3Qgc2NoZWRfcGFyYW0gKik7Cmlu dCBwdGhyZWFkX3NldHNwZWNpZmljIChwdGhyZWFkX2tleV90LCBjb25zdCB2b2lkICopOwp2b2lk IHB0aHJlYWRfdGVzdGNhbmNlbCAodm9pZCk7CgoKCmludCBwdGhyZWFkX3N1c3BlbmQgKHB0aHJl YWRfdCk7CmludCBwdGhyZWFkX2NvbnRpbnVlIChwdGhyZWFkX3QpOwoKCn0KIyAzOCAiL2hvbWUv QWRtaW5pc3RyYXRvci9nY2N0ZXN0aW5nL2xpYi9nY2MtbGliL2k2ODYtcGMtY3lnd2luLzMuNC9p bmNsdWRlL2MrKy9pNjg2LXBjLWN5Z3dpbi9iaXRzL2d0aHItZGVmYXVsdC5oIiAyIDMKIyAxICIv dXNyL2luY2x1ZGUvdW5pc3RkLmgiIDEgMyA0CgoKCgoKIyAxICIvdXNyL2luY2x1ZGUvc3lzL3Vu aXN0ZC5oIiAxIDMgNAoKCgoKZXh0ZXJuICJDIiB7CgoKCgoKCgojIDEgIi9ob21lL0FkbWluaXN0 cmF0b3IvZ2NjdGVzdGluZy9saWIvZ2NjLWxpYi9pNjg2LXBjLWN5Z3dpbi8zLjQvaW5jbHVkZS9z dGRkZWYuaCIgMSAzIDQKIyAxNCAiL3Vzci9pbmNsdWRlL3N5cy91bmlzdGQuaCIgMiAzIDQKCmV4 dGVybiBjaGFyICoqZW52aXJvbjsKCnZvaWQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgX2V4 aXQgKGludCBfX3N0YXR1cyApIF9fYXR0cmlidXRlX18gKChub3JldHVybikpOwoKaW50IF9fYXR0 cmlidXRlX18oKF9fY2RlY2xfXykpIGFjY2VzcyAoY29uc3QgY2hhciAqX19wYXRoLCBpbnQgX19h bW9kZSApOwp1bnNpZ25lZCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBhbGFybSAodW5zaWdu ZWQgX19zZWNzICk7CmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBjaGRpciAoY29uc3Qg Y2hhciAqX19wYXRoICk7CmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBjaG1vZCAoY29u c3QgY2hhciAqX19wYXRoLCBtb2RlX3QgX19tb2RlICk7CmludCBfX2F0dHJpYnV0ZV9fKChfX2Nk ZWNsX18pKSBjaG93biAoY29uc3QgY2hhciAqX19wYXRoLCB1aWRfdCBfX293bmVyLCBnaWRfdCBf X2dyb3VwICk7CgppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgY2hyb290IChjb25zdCBj aGFyICpfX3BhdGggKTsKCmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBjbG9zZSAoaW50 IF9fZmlsZGVzICk7CmNoYXIgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgKmN0ZXJtaWQgKGNo YXIgKl9fcyApOwpjaGFyIF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpICpjdXNlcmlkIChjaGFy ICpfX3MgKTsKaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGR1cCAoaW50IF9fZmlsZGVz ICk7CmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBkdXAyIChpbnQgX19maWxkZXMsIGlu dCBfX2ZpbGRlczIgKTsKCnZvaWQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgZW5kdXNlcnNo ZWxsICh2b2lkKTsKCmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBleGVjbCAoY29uc3Qg Y2hhciAqX19wYXRoLCBjb25zdCBjaGFyICosIC4uLiApOwppbnQgX19hdHRyaWJ1dGVfXygoX19j ZGVjbF9fKSkgZXhlY2xlIChjb25zdCBjaGFyICpfX3BhdGgsIGNvbnN0IGNoYXIgKiwgLi4uICk7 CmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBleGVjbHAgKGNvbnN0IGNoYXIgKl9fZmls ZSwgY29uc3QgY2hhciAqLCAuLi4gKTsKaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGV4 ZWN2IChjb25zdCBjaGFyICpfX3BhdGgsIGNoYXIgKiBjb25zdCBfX2FyZ3ZbXSApOwppbnQgX19h dHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgZXhlY3ZlIChjb25zdCBjaGFyICpfX3BhdGgsIGNoYXIg KiBjb25zdCBfX2FyZ3ZbXSwgY2hhciAqIGNvbnN0IF9fZW52cFtdICk7CmludCBfX2F0dHJpYnV0 ZV9fKChfX2NkZWNsX18pKSBleGVjdnAgKGNvbnN0IGNoYXIgKl9fZmlsZSwgY2hhciAqIGNvbnN0 IF9fYXJndltdICk7CgppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgZmNoZGlyIChpbnQg X19maWxkZXMpOwoKaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGZjaG1vZCAoaW50IF9f ZmlsZGVzLCBtb2RlX3QgX19tb2RlICk7CmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBm Y2hvd24gKGludCBfX2ZpbGRlcywgdWlkX3QgX19vd25lciwgZ2lkX3QgX19ncm91cCApOwpwaWRf dCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBmb3JrICh2b2lkICk7CmxvbmcgX19hdHRyaWJ1 dGVfXygoX19jZGVjbF9fKSkgZnBhdGhjb25mIChpbnQgX19mZCwgaW50IF9fbmFtZSApOwppbnQg X19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgZnN5bmMgKGludCBfX2ZkKTsKY2hhciBfX2F0dHJp YnV0ZV9fKChfX2NkZWNsX18pKSAqZ2V0Y3dkIChjaGFyICpfX2J1Ziwgc2l6ZV90IF9fc2l6ZSAp OwoKaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGdldGRvbWFpbm5hbWUgKGNoYXIgKl9f bmFtZSwgc2l6ZV90IF9fbGVuKTsKCmdpZF90IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGdl dGVnaWQgKHZvaWQgKTsKdWlkX3QgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgZ2V0ZXVpZCAo dm9pZCApOwpnaWRfdCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBnZXRnaWQgKHZvaWQgKTsK aW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGdldGdyb3VwcyAoaW50IF9fZ2lkc2V0c2l6 ZSwgZ2lkX3QgX19ncm91cGxpc3RbXSApOwpjaGFyIF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykp ICpnZXRsb2dpbiAodm9pZCApOwoKaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGdldGxv Z2luX3IgKGNoYXIgKm5hbWUsIHNpemVfdCBuYW1lc2l6ZSk7CgpjaGFyIF9fYXR0cmlidXRlX18o KF9fY2RlY2xfXykpICpnZXRwYXNzIChfX2NvbnN0IGNoYXIgKl9fcHJvbXB0KTsKc2l6ZV90IF9f YXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGdldHBhZ2VzaXplICh2b2lkKTsKcGlkX3QgX19hdHRy aWJ1dGVfXygoX19jZGVjbF9fKSkgZ2V0cGdpZCAocGlkX3QpOwpwaWRfdCBfX2F0dHJpYnV0ZV9f KChfX2NkZWNsX18pKSBnZXRwZ3JwICh2b2lkICk7CnBpZF90IF9fYXR0cmlidXRlX18oKF9fY2Rl Y2xfXykpIGdldHBpZCAodm9pZCApOwpwaWRfdCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBn ZXRwcGlkICh2b2lkICk7CgpwaWRfdCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBnZXRzaWQg KHBpZF90KTsKCnVpZF90IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGdldHVpZCAodm9pZCAp OwoKY2hhciAqIF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGdldHVzZXJzaGVsbCAodm9pZCk7 CmNoYXIgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgKmdldHdkIChjaGFyICpfX2J1ZiApOwpp bnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgaXJ1c2Vyb2sgKHVuc2lnbmVkIGxvbmcgcmFk ZHIsIGludCBzdXBlcnVzZXIsIGNvbnN0IGNoYXIgKnJ1c2VyLCBjb25zdCBjaGFyICpsdXNlcik7 CgppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgaXNhdHR5IChpbnQgX19maWxkZXMgKTsK aW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGxjaG93biAoY29uc3QgY2hhciAqX19wYXRo LCB1aWRfdCBfX293bmVyLCBnaWRfdCBfX2dyb3VwICk7CmludCBfX2F0dHJpYnV0ZV9fKChfX2Nk ZWNsX18pKSBsaW5rIChjb25zdCBjaGFyICpfX3BhdGgxLCBjb25zdCBjaGFyICpfX3BhdGgyICk7 CmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBuaWNlIChpbnQgX19uaWNlX3ZhbHVlICk7 Cm9mZl90IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGxzZWVrIChpbnQgX19maWxkZXMsIG9m Zl90IF9fb2Zmc2V0LCBpbnQgX193aGVuY2UgKTsKbG9uZyBfX2F0dHJpYnV0ZV9fKChfX2NkZWNs X18pKSBwYXRoY29uZiAoY29uc3QgY2hhciAqX19wYXRoLCBpbnQgX19uYW1lICk7CmludCBfX2F0 dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBwYXVzZSAodm9pZCApOwoKaW50IF9fYXR0cmlidXRlX18o KF9fY2RlY2xfXykpIHB0aHJlYWRfYXRmb3JrICh2b2lkICgqKSh2b2lkKSwgdm9pZCAoKikodm9p ZCksIHZvaWQgKCopKHZvaWQpKTsKCmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBwaXBl IChpbnQgX19maWxkZXNbMl0gKTsKc3NpemVfdCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBw cmVhZCAoaW50IF9fZmQsIHZvaWQgKl9fYnVmLCBzaXplX3QgX19uYnl0ZXMsIG9mZl90IF9fb2Zm c2V0KTsKc3NpemVfdCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBwd3JpdGUgKGludCBfX2Zk LCBjb25zdCB2b2lkICpfX2J1Ziwgc2l6ZV90IF9fbmJ5dGVzLCBvZmZfdCBfX29mZnNldCk7Cl9z c2l6ZV90IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHJlYWQgKGludCBfX2ZkLCB2b2lkICpf X2J1Ziwgc2l6ZV90IF9fbmJ5dGUgKTsKCmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBy cmVzdnBvcnQgKGludCAqX19hbHBvcnQpOwppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkg cmV2b2tlIChjaGFyICpfX3BhdGgpOwoKaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHJt ZGlyIChjb25zdCBjaGFyICpfX3BhdGggKTsKCmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18p KSBydXNlcm9rIChjb25zdCBjaGFyICpyaG9zdCwgaW50IHN1cGVydXNlciwgY29uc3QgY2hhciAq cnVzZXIsIGNvbnN0IGNoYXIgKmx1c2VyKTsKCnZvaWQgKiBfX2F0dHJpYnV0ZV9fKChfX2NkZWNs X18pKSBzYnJrIChwdHJkaWZmX3QgX19pbmNyKTsKCmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNs X18pKSBzZXRlZ2lkIChnaWRfdCBfX2dpZCApOwppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9f KSkgc2V0ZXVpZCAodWlkX3QgX191aWQgKTsKCmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18p KSBzZXRnaWQgKGdpZF90IF9fZ2lkICk7CgppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkg c2V0Z3JvdXBzIChpbnQgbmdyb3VwcywgY29uc3QgZ2lkX3QgKmdyb3VwbGlzdCApOwoKaW50IF9f YXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHNldHBnaWQgKHBpZF90IF9fcGlkLCBwaWRfdCBfX3Bn aWQgKTsKaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHNldHBncnAgKHZvaWQgKTsKCmlu dCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBzZXRyZWdpZCAoZ2lkX3QgX19yZ2lkLCBnaWRf dCBfX2VnaWQpOwppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgc2V0cmV1aWQgKHVpZF90 IF9fcnVpZCwgdWlkX3QgX19ldWlkKTsKCnBpZF90IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykp IHNldHNpZCAodm9pZCApOwppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgc2V0dWlkICh1 aWRfdCBfX3VpZCApOwoKdm9pZCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBzZXR1c2Vyc2hl bGwgKHZvaWQpOwoKdW5zaWduZWQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgc2xlZXAgKHVu c2lnbmVkIGludCBfX3NlY29uZHMgKTsKdm9pZCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBz d2FiIChjb25zdCB2b2lkICosIHZvaWQgKiwgc3NpemVfdCk7CmxvbmcgX19hdHRyaWJ1dGVfXygo X19jZGVjbF9fKSkgc3lzY29uZiAoaW50IF9fbmFtZSApOwpwaWRfdCBfX2F0dHJpYnV0ZV9fKChf X2NkZWNsX18pKSB0Y2dldHBncnAgKGludCBfX2ZpbGRlcyApOwppbnQgX19hdHRyaWJ1dGVfXygo X19jZGVjbF9fKSkgdGNzZXRwZ3JwIChpbnQgX19maWxkZXMsIHBpZF90IF9fcGdycF9pZCApOwpj aGFyIF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpICp0dHluYW1lIChpbnQgX19maWxkZXMgKTsK aW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHVubGluayAoY29uc3QgY2hhciAqX19wYXRo ICk7CmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSB2aGFuZ3VwICh2b2lkICk7Cl9zc2l6 ZV90IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHdyaXRlIChpbnQgX19mZCwgY29uc3Qgdm9p ZCAqX19idWYsIHNpemVfdCBfX25ieXRlICk7CgoKIyAxICIvdXNyL2luY2x1ZGUvZ2V0b3B0Lmgi IDEgMyA0CiMgMzggIi91c3IvaW5jbHVkZS9nZXRvcHQuaCIgMyA0CmV4dGVybiAiQyIgewoKCmV4 dGVybiBpbnQgb3B0ZXJyOwpleHRlcm4gaW50IG9wdGluZDsKZXh0ZXJuIGludCBvcHRvcHQ7CmV4 dGVybiBpbnQgb3B0cmVzZXQ7CmV4dGVybiBjaGFyICpvcHRhcmc7CgppbnQgZ2V0b3B0IChpbnQs IGNoYXIgKiBjb25zdCAqLCBjb25zdCBjaGFyICopOwoKCn0KIyA2MCAiL3Vzci9pbmNsdWRlL2dl dG9wdC5oIiAzIDQKZXh0ZXJuICJDIiB7CgoKc3RydWN0IG9wdGlvbiB7CiAgICAgICAgY29uc3Qg Y2hhciAqbmFtZTsKICAgICAgICBpbnQgaGFzX2FyZzsKICAgICAgICBpbnQgKmZsYWc7CiAgICAg ICAgaW50IHZhbDsKfTsKCmludCBnZXRvcHRfbG9uZyAoaW50LCBjaGFyICpjb25zdCAqLCBjb25z dCBjaGFyICosIGNvbnN0IHN0cnVjdCBvcHRpb24gKiwgaW50ICopOwojIDgwICIvdXNyL2luY2x1 ZGUvZ2V0b3B0LmgiIDMgNAp9CiMgMTMwICIvdXNyL2luY2x1ZGUvc3lzL3VuaXN0ZC5oIiAyIDMg NAojIDEzOCAiL3Vzci9pbmNsdWRlL3N5cy91bmlzdGQuaCIgMyA0CnBpZF90IF9fYXR0cmlidXRl X18oKF9fY2RlY2xfXykpIHZmb3JrICh2b2lkICk7CgpleHRlcm4gY2hhciAqc3Vib3B0YXJnOwpp bnQgZ2V0c3Vib3B0KGNoYXIgKiosIGNoYXIgKiBjb25zdCAqLCBjaGFyICoqKTsKCgoKCmludCBf X2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBfY2xvc2UgKGludCBfX2ZpbGRlcyApOwpwaWRfdCBf X2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBfZm9yayAodm9pZCApOwpwaWRfdCBfX2F0dHJpYnV0 ZV9fKChfX2NkZWNsX18pKSBfZ2V0cGlkICh2b2lkICk7CmludCBfX2F0dHJpYnV0ZV9fKChfX2Nk ZWNsX18pKSBfbGluayAoY29uc3QgY2hhciAqX19wYXRoMSwgY29uc3QgY2hhciAqX19wYXRoMiAp OwpvZmZfdCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBfbHNlZWsgKGludCBfX2ZpbGRlcywg b2ZmX3QgX19vZmZzZXQsIGludCBfX3doZW5jZSApOwpfc3NpemVfdCBfX2F0dHJpYnV0ZV9fKChf X2NkZWNsX18pKSBfcmVhZCAoaW50IF9fZmQsIHZvaWQgKl9fYnVmLCBzaXplX3QgX19uYnl0ZSAp Owp2b2lkICogX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgX3NicmsgKHB0cmRpZmZfdCBfX2lu Y3IpOwppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgX3VubGluayAoY29uc3QgY2hhciAq X19wYXRoICk7Cl9zc2l6ZV90IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIF93cml0ZSAoaW50 IF9fZmQsIGNvbnN0IHZvaWQgKl9fYnVmLCBzaXplX3QgX19uYnl0ZSApOwppbnQgX19hdHRyaWJ1 dGVfXygoX19jZGVjbF9fKSkgX2V4ZWN2ZSAoY29uc3QgY2hhciAqX19wYXRoLCBjaGFyICogY29u c3QgX19hcmd2W10sIGNoYXIgKiBjb25zdCBfX2VudnBbXSApOwoKCmludCBfX2F0dHJpYnV0ZV9f KChfX2NkZWNsX18pKSBnZXRkdGFibGVzaXplICh2b2lkKTsKaW50IF9fYXR0cmlidXRlX18oKF9f Y2RlY2xfXykpIHNldGR0YWJsZXNpemUgKGludCk7CnVzZWNvbmRzX3QgX19hdHRyaWJ1dGVfXygo X19jZGVjbF9fKSkgdWFsYXJtICh1c2Vjb25kc190IF9fdXNlY29uZHMsIHVzZWNvbmRzX3QgX19p bnRlcnZhbCk7CnVuc2lnbmVkIF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHVzbGVlcCAodW5z aWduZWQgaW50IF9fdXNlY29uZHMpOwppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgZnRy dW5jYXRlIChpbnQgX19mZCwgb2ZmX3QgX19sZW5ndGgpOwppbnQgX19hdHRyaWJ1dGVfXygoX19j ZGVjbF9fKSkgdHJ1bmNhdGUgKGNvbnN0IGNoYXIgKiwgb2ZmX3QgX19sZW5ndGgpOwoKCiBpbnQg X19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgZ2V0aG9zdG5hbWUgKGNoYXIgKl9fbmFtZSwgc2l6 ZV90IF9fbGVuKTsKCmNoYXIgKiBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBta3RlbXAgKGNo YXIgKik7CmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBzeW5jICh2b2lkKTsKaW50IF9f YXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHJlYWRsaW5rIChjb25zdCBjaGFyICpfX3BhdGgsIGNo YXIgKl9fYnVmLCBpbnQgX19idWZsZW4pOwppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkg c3ltbGluayAoY29uc3QgY2hhciAqX19uYW1lMSwgY29uc3QgY2hhciAqX19uYW1lMik7CiMgMjk0 ICIvdXNyL2luY2x1ZGUvc3lzL3VuaXN0ZC5oIiAzIDQKfQojIDcgIi91c3IvaW5jbHVkZS91bmlz dGQuaCIgMiAzIDQKCiMgMSAiL3Vzci9pbmNsdWRlL2dldG9wdC5oIiAxIDMgNAojIDkgIi91c3Iv aW5jbHVkZS91bmlzdGQuaCIgMiAzIDQKIyAzOSAiL2hvbWUvQWRtaW5pc3RyYXRvci9nY2N0ZXN0 aW5nL2xpYi9nY2MtbGliL2k2ODYtcGMtY3lnd2luLzMuNC9pbmNsdWRlL2MrKy9pNjg2LXBjLWN5 Z3dpbi9iaXRzL2d0aHItZGVmYXVsdC5oIiAyIDMKCnR5cGVkZWYgcHRocmVhZF9rZXlfdCBfX2d0 aHJlYWRfa2V5X3Q7CnR5cGVkZWYgcHRocmVhZF9vbmNlX3QgX19ndGhyZWFkX29uY2VfdDsKdHlw ZWRlZiBwdGhyZWFkX211dGV4X3QgX19ndGhyZWFkX211dGV4X3Q7CgoKCgoKCiNwcmFnbWEgd2Vh ayBwdGhyZWFkX29uY2UKI3ByYWdtYSB3ZWFrIHB0aHJlYWRfa2V5X2NyZWF0ZQojcHJhZ21hIHdl YWsgcHRocmVhZF9rZXlfZGVsZXRlCiNwcmFnbWEgd2VhayBwdGhyZWFkX2dldHNwZWNpZmljCiNw cmFnbWEgd2VhayBwdGhyZWFkX3NldHNwZWNpZmljCiNwcmFnbWEgd2VhayBwdGhyZWFkX2NyZWF0 ZQoKI3ByYWdtYSB3ZWFrIHB0aHJlYWRfbXV0ZXhfbG9jawojcHJhZ21hIHdlYWsgcHRocmVhZF9t dXRleF90cnlsb2NrCiNwcmFnbWEgd2VhayBwdGhyZWFkX211dGV4X3VubG9jawojIDg3ICIvaG9t ZS9BZG1pbmlzdHJhdG9yL2djY3Rlc3RpbmcvbGliL2djYy1saWIvaTY4Ni1wYy1jeWd3aW4vMy40 L2luY2x1ZGUvYysrL2k2ODYtcGMtY3lnd2luL2JpdHMvZ3Roci1kZWZhdWx0LmgiIDMKc3RhdGlj IGlubGluZSBpbnQKX19ndGhyZWFkX2FjdGl2ZV9wICh2b2lkKQp7CiAgc3RhdGljIHZvaWQgKmNv bnN0IF9fZ3RocmVhZF9hY3RpdmVfcHRyID0gKHZvaWQgKikgJnB0aHJlYWRfY3JlYXRlOwogIHJl dHVybiBfX2d0aHJlYWRfYWN0aXZlX3B0ciAhPSAwOwp9CiMgNDQ5ICIvaG9tZS9BZG1pbmlzdHJh dG9yL2djY3Rlc3RpbmcvbGliL2djYy1saWIvaTY4Ni1wYy1jeWd3aW4vMy40L2luY2x1ZGUvYysr L2k2ODYtcGMtY3lnd2luL2JpdHMvZ3Roci1kZWZhdWx0LmgiIDMKc3RhdGljIGlubGluZSBpbnQK X19ndGhyZWFkX29uY2UgKF9fZ3RocmVhZF9vbmNlX3QgKm9uY2UsIHZvaWQgKCpmdW5jKSAodm9p ZCkpCnsKICBpZiAoX19ndGhyZWFkX2FjdGl2ZV9wICgpKQogICAgcmV0dXJuIHB0aHJlYWRfb25j ZSAob25jZSwgZnVuYyk7CiAgZWxzZQogICAgcmV0dXJuIC0xOwp9CgpzdGF0aWMgaW5saW5lIGlu dApfX2d0aHJlYWRfa2V5X2NyZWF0ZSAoX19ndGhyZWFkX2tleV90ICprZXksIHZvaWQgKCpkdG9y KSAodm9pZCAqKSkKewogIHJldHVybiBwdGhyZWFkX2tleV9jcmVhdGUgKGtleSwgZHRvcik7Cn0K CnN0YXRpYyBpbmxpbmUgaW50Cl9fZ3RocmVhZF9rZXlfZGVsZXRlIChfX2d0aHJlYWRfa2V5X3Qg a2V5KQp7CiAgcmV0dXJuIHB0aHJlYWRfa2V5X2RlbGV0ZSAoa2V5KTsKfQoKc3RhdGljIGlubGlu ZSB2b2lkICoKX19ndGhyZWFkX2dldHNwZWNpZmljIChfX2d0aHJlYWRfa2V5X3Qga2V5KQp7CiAg cmV0dXJuIHB0aHJlYWRfZ2V0c3BlY2lmaWMgKGtleSk7Cn0KCnN0YXRpYyBpbmxpbmUgaW50Cl9f Z3RocmVhZF9zZXRzcGVjaWZpYyAoX19ndGhyZWFkX2tleV90IGtleSwgY29uc3Qgdm9pZCAqcHRy KQp7CiAgcmV0dXJuIHB0aHJlYWRfc2V0c3BlY2lmaWMgKGtleSwgcHRyKTsKfQoKc3RhdGljIGlu bGluZSBpbnQKX19ndGhyZWFkX211dGV4X2xvY2sgKF9fZ3RocmVhZF9tdXRleF90ICptdXRleCkK ewogIGlmIChfX2d0aHJlYWRfYWN0aXZlX3AgKCkpCiAgICByZXR1cm4gcHRocmVhZF9tdXRleF9s b2NrIChtdXRleCk7CiAgZWxzZQogICAgcmV0dXJuIDA7Cn0KCnN0YXRpYyBpbmxpbmUgaW50Cl9f Z3RocmVhZF9tdXRleF90cnlsb2NrIChfX2d0aHJlYWRfbXV0ZXhfdCAqbXV0ZXgpCnsKICBpZiAo X19ndGhyZWFkX2FjdGl2ZV9wICgpKQogICAgcmV0dXJuIHB0aHJlYWRfbXV0ZXhfdHJ5bG9jayAo bXV0ZXgpOwogIGVsc2UKICAgIHJldHVybiAwOwp9CgpzdGF0aWMgaW5saW5lIGludApfX2d0aHJl YWRfbXV0ZXhfdW5sb2NrIChfX2d0aHJlYWRfbXV0ZXhfdCAqbXV0ZXgpCnsKICBpZiAoX19ndGhy ZWFkX2FjdGl2ZV9wICgpKQogICAgcmV0dXJuIHB0aHJlYWRfbXV0ZXhfdW5sb2NrIChtdXRleCk7 CiAgZWxzZQogICAgcmV0dXJuIDA7Cn0KIyA5NyAiL2hvbWUvQWRtaW5pc3RyYXRvci9nY2N0ZXN0 aW5nL2xpYi9nY2MtbGliL2k2ODYtcGMtY3lnd2luLzMuNC9pbmNsdWRlL2MrKy9pNjg2LXBjLWN5 Z3dpbi9iaXRzL2d0aHIuaCIgMiAzCiMgMzggIi9ob21lL0FkbWluaXN0cmF0b3IvZ2NjdGVzdGlu Zy9saWIvZ2NjLWxpYi9pNjg2LXBjLWN5Z3dpbi8zLjQvaW5jbHVkZS9jKysvaTY4Ni1wYy1jeWd3 aW4vYml0cy9jKytpby5oIiAyIDMKCm5hbWVzcGFjZSBzdGQKewoKICB0eXBlZGVmIGxvbmcgc3Ry ZWFtb2ZmOwogIHR5cGVkZWYgcHRyZGlmZl90IHN0cmVhbXNpemU7CgoKCiAgdHlwZWRlZiBmcG9z X3QgX19jX3N0cmVhbXBvczsKCiAgdHlwZWRlZiBfX2d0aHJlYWRfbXV0ZXhfdCBfX2NfbG9jazsK CgogIHR5cGVkZWYgRklMRSBfX2NfZmlsZTsKCgogIHN0cnVjdCBfX2lvc19mbGFncwogIHsKICAg IHR5cGVkZWYgc2hvcnQgX19pbnRfdHlwZTsKCiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBf U19ib29sYWxwaGEgPSAweDAwMDE7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19kZWMg PSAweDAwMDI7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19maXhlZCA9IDB4MDAwNDsK ICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2hleCA9IDB4MDAwODsKICAgIHN0YXRpYyBj b25zdCBfX2ludF90eXBlIF9TX2ludGVybmFsID0gMHgwMDEwOwogICAgc3RhdGljIGNvbnN0IF9f aW50X3R5cGUgX1NfbGVmdCA9IDB4MDAyMDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9T X29jdCA9IDB4MDA0MDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX3JpZ2h0ID0gMHgw MDgwOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1Nfc2NpZW50aWZpYyA9IDB4MDEwMDsK ICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX3Nob3diYXNlID0gMHgwMjAwOwogICAgc3Rh dGljIGNvbnN0IF9faW50X3R5cGUgX1Nfc2hvd3BvaW50ID0gMHgwNDAwOwogICAgc3RhdGljIGNv bnN0IF9faW50X3R5cGUgX1Nfc2hvd3BvcyA9IDB4MDgwMDsKICAgIHN0YXRpYyBjb25zdCBfX2lu dF90eXBlIF9TX3NraXB3cyA9IDB4MTAwMDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9T X3VuaXRidWYgPSAweDIwMDA7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU191cHBlcmNh c2UgPSAweDQwMDA7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19hZGp1c3RmaWVsZCA9 IDB4MDAyMCB8IDB4MDA4MCB8IDB4MDAxMDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9T X2Jhc2VmaWVsZCA9IDB4MDAwMiB8IDB4MDA0MCB8IDB4MDAwODsKICAgIHN0YXRpYyBjb25zdCBf X2ludF90eXBlIF9TX2Zsb2F0ZmllbGQgPSAweDAxMDAgfCAweDAwMDQ7CgoKICAgIHN0YXRpYyBj b25zdCBfX2ludF90eXBlIF9TX2JhZGJpdCA9IDB4MDE7CiAgICBzdGF0aWMgY29uc3QgX19pbnRf dHlwZSBfU19lb2ZiaXQgPSAweDAyOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfZmFp bGJpdCA9IDB4MDQ7CgoKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2FwcCA9IDB4MDE7 CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19hdGUgPSAweDAyOwogICAgc3RhdGljIGNv bnN0IF9faW50X3R5cGUgX1NfYmluID0gMHgwNDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBl IF9TX2luID0gMHgwODsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX291dCA9IDB4MTA7 CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU190cnVuYyA9IDB4MjA7CiAgfTsKfQojIDQ1 ICIvaG9tZS9BZG1pbmlzdHJhdG9yL2djY3Rlc3RpbmcvbGliL2djYy1saWIvaTY4Ni1wYy1jeWd3 aW4vMy40L2luY2x1ZGUvYysrL2JpdHMvZnBvcy5oIiAyIDMKIyAxICIvaG9tZS9BZG1pbmlzdHJh dG9yL2djY3Rlc3RpbmcvbGliL2djYy1saWIvaTY4Ni1wYy1jeWd3aW4vMy40L2luY2x1ZGUvYysr L2N3Y2hhciIgMSAzCiMgNDggIi9ob21lL0FkbWluaXN0cmF0b3IvZ2NjdGVzdGluZy9saWIvZ2Nj LWxpYi9pNjg2LXBjLWN5Z3dpbi8zLjQvaW5jbHVkZS9jKysvY3djaGFyIiAzCgoKCiMgMSAiL2hv bWUvQWRtaW5pc3RyYXRvci9nY2N0ZXN0aW5nL2xpYi9nY2MtbGliL2k2ODYtcGMtY3lnd2luLzMu NC9pbmNsdWRlL2MrKy9jdGltZSIgMSAzCiMgNDggIi9ob21lL0FkbWluaXN0cmF0b3IvZ2NjdGVz dGluZy9saWIvZ2NjLWxpYi9pNjg2LXBjLWN5Z3dpbi8zLjQvaW5jbHVkZS9jKysvY3RpbWUiIDMK IyA2NCAiL2hvbWUvQWRtaW5pc3RyYXRvci9nY2N0ZXN0aW5nL2xpYi9nY2MtbGliL2k2ODYtcGMt Y3lnd2luLzMuNC9pbmNsdWRlL2MrKy9jdGltZSIgMwpuYW1lc3BhY2Ugc3RkCnsKICB1c2luZyA6 OmNsb2NrX3Q7CiAgdXNpbmcgOjp0aW1lX3Q7CiAgdXNpbmcgOjp0bTsKCiAgdXNpbmcgOjpjbG9j azsKICB1c2luZyA6OmRpZmZ0aW1lOwogIHVzaW5nIDo6bWt0aW1lOwogIHVzaW5nIDo6dGltZTsK ICB1c2luZyA6OmFzY3RpbWU7CiAgdXNpbmcgOjpjdGltZTsKICB1c2luZyA6OmdtdGltZTsKICB1 c2luZyA6OmxvY2FsdGltZTsKICB1c2luZyA6OnN0cmZ0aW1lOwp9CiMgNTIgIi9ob21lL0FkbWlu aXN0cmF0b3IvZ2NjdGVzdGluZy9saWIvZ2NjLWxpYi9pNjg2LXBjLWN5Z3dpbi8zLjQvaW5jbHVk ZS9jKysvY3djaGFyIiAyIDMKCgojIDEgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAxIDMgNAojIDkg Ii91c3IvaW5jbHVkZS93Y2hhci5oIiAzIDQKIyAxICIvaG9tZS9BZG1pbmlzdHJhdG9yL2djY3Rl c3RpbmcvbGliL2djYy1saWIvaTY4Ni1wYy1jeWd3aW4vMy40L2luY2x1ZGUvc3RkZGVmLmgiIDEg MyA0CiMgMTAgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAyIDMgNAojIDM0ICIvdXNyL2luY2x1ZGUv d2NoYXIuaCIgMyA0CmV4dGVybiAiQyIgewoKCgp0eXBlZGVmIF9tYnN0YXRlX3QgbWJzdGF0ZV90 OwoKCndpbnRfdCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBidG93YyAoaW50KTsKaW50IF9f YXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHdjdG9iICh3aW50X3QpOwpzaXplX3QgX19hdHRyaWJ1 dGVfXygoX19jZGVjbF9fKSkgbWJybGVuIChjb25zdCBjaGFyICogLCBzaXplX3QsIG1ic3RhdGVf dCAqKTsKc2l6ZV90IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIG1icnRvd2MgKHdjaGFyX3Qg KiAsIGNvbnN0IGNoYXIgKiAsIHNpemVfdCwgbWJzdGF0ZV90ICopOwppbnQgX19hdHRyaWJ1dGVf XygoX19jZGVjbF9fKSkgbWJzaW5pdCAoY29uc3QgbWJzdGF0ZV90ICopOwpzaXplX3QgX19hdHRy aWJ1dGVfXygoX19jZGVjbF9fKSkgbWJzcnRvd2NzICh3Y2hhcl90ICogLCBjb25zdCBjaGFyICoq ICwgc2l6ZV90LCBtYnN0YXRlX3QgKik7CnNpemVfdCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18p KSB3Y3J0b21iIChjaGFyICogLCB3Y2hhcl90LCBtYnN0YXRlX3QgKik7CnNpemVfdCBfX2F0dHJp YnV0ZV9fKChfX2NkZWNsX18pKSB3Y3NydG9tYnMgKGNoYXIgKiAsIGNvbnN0IHdjaGFyX3QgKiog LCBzaXplX3QsIG1ic3RhdGVfdCAqKTsKd2NoYXJfdCAqX19hdHRyaWJ1dGVfXygoX19jZGVjbF9f KSkgd2NzY2F0ICh3Y2hhcl90ICogLCBjb25zdCB3Y2hhcl90ICopOwp3Y2hhcl90ICpfX2F0dHJp YnV0ZV9fKChfX2NkZWNsX18pKSB3Y3NjaHIgKGNvbnN0IHdjaGFyX3QgKiwgd2NoYXJfdCk7Cmlu dCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSB3Y3NjbXAgKGNvbnN0IHdjaGFyX3QgKiwgY29u c3Qgd2NoYXJfdCAqKTsKd2NoYXJfdCAqX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgd2NzY3B5 ICh3Y2hhcl90ICogLCBjb25zdCB3Y2hhcl90ICopOwpzaXplX3QgX19hdHRyaWJ1dGVfXygoX19j ZGVjbF9fKSkgd2NzY3NwbiAoY29uc3Qgd2NoYXJfdCAqLCBjb25zdCB3Y2hhcl90ICopOwpzaXpl X3QgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgd2NzbGNhdCAod2NoYXJfdCAqLCBjb25zdCB3 Y2hhcl90ICosIHNpemVfdCk7CnNpemVfdCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSB3Y3Ns Y3B5ICh3Y2hhcl90ICosIGNvbnN0IHdjaGFyX3QgKiwgc2l6ZV90KTsKc2l6ZV90IF9fYXR0cmli dXRlX18oKF9fY2RlY2xfXykpIHdjc2xlbiAoY29uc3Qgd2NoYXJfdCAqKTsKd2NoYXJfdCAqX19h dHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgd2NzbmNhdCAod2NoYXJfdCAqICwgY29uc3Qgd2NoYXJf dCAqICwgc2l6ZV90KTsKaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHdjc25jbXAgKGNv bnN0IHdjaGFyX3QgKiwgY29uc3Qgd2NoYXJfdCAqLCBzaXplX3QpOwp3Y2hhcl90ICpfX2F0dHJp YnV0ZV9fKChfX2NkZWNsX18pKSB3Y3NuY3B5ICh3Y2hhcl90ICogLCBjb25zdCB3Y2hhcl90ICog LCBzaXplX3QpOwp3Y2hhcl90ICpfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSB3Y3NwYnJrIChj b25zdCB3Y2hhcl90ICosIGNvbnN0IHdjaGFyX3QgKik7CndjaGFyX3QgKl9fYXR0cmlidXRlX18o KF9fY2RlY2xfXykpIHdjc3JjaHIgKGNvbnN0IHdjaGFyX3QgKiwgd2NoYXJfdCk7CnNpemVfdCBf X2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSB3Y3NzcG4gKGNvbnN0IHdjaGFyX3QgKiwgY29uc3Qg d2NoYXJfdCAqKTsKd2NoYXJfdCAqX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgd2Nzc3RyIChj b25zdCB3Y2hhcl90ICosIGNvbnN0IHdjaGFyX3QgKik7CndjaGFyX3QgKl9fYXR0cmlidXRlX18o KF9fY2RlY2xfXykpIHdtZW1jaHIgKGNvbnN0IHdjaGFyX3QgKiwgd2NoYXJfdCwgc2l6ZV90KTsK aW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHdtZW1jbXAgKGNvbnN0IHdjaGFyX3QgKiwg Y29uc3Qgd2NoYXJfdCAqLCBzaXplX3QpOwp3Y2hhcl90ICpfX2F0dHJpYnV0ZV9fKChfX2NkZWNs X18pKSB3bWVtY3B5ICh3Y2hhcl90ICogLCBjb25zdCB3Y2hhcl90ICogLCBzaXplX3QpOwp3Y2hh cl90ICpfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSB3bWVtbW92ZSAod2NoYXJfdCAqLCBjb25z dCB3Y2hhcl90ICosIHNpemVfdCk7CndjaGFyX3QgKl9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykp IHdtZW1zZXQgKHdjaGFyX3QgKiwgd2NoYXJfdCwgc2l6ZV90KTsKCn0KIyA1NSAiL2hvbWUvQWRt aW5pc3RyYXRvci9nY2N0ZXN0aW5nL2xpYi9nY2MtbGliL2k2ODYtcGMtY3lnd2luLzMuNC9pbmNs dWRlL2MrKy9jd2NoYXIiIDIgMwojIDY5ICIvaG9tZS9BZG1pbmlzdHJhdG9yL2djY3Rlc3Rpbmcv bGliL2djYy1saWIvaTY4Ni1wYy1jeWd3aW4vMy40L2luY2x1ZGUvYysrL2N3Y2hhciIgMwpuYW1l c3BhY2Ugc3RkCnsKICB1c2luZyA6Om1ic3RhdGVfdDsKfQojIDQ2ICIvaG9tZS9BZG1pbmlzdHJh dG9yL2djY3Rlc3RpbmcvbGliL2djYy1saWIvaTY4Ni1wYy1jeWd3aW4vMy40L2luY2x1ZGUvYysr L2JpdHMvZnBvcy5oIiAyIDMKCm5hbWVzcGFjZSBzdGQKewoKCgoKCgogIHRlbXBsYXRlPHR5cGVu YW1lIF9TdGF0ZVQ+CiAgICBjbGFzcyBmcG9zCiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBl ZGVmIF9TdGF0ZVQgX19zdGF0ZV90eXBlOwoKICAgIHByaXZhdGU6CiAgICAgIHN0cmVhbW9mZiBf TV9vZmY7CiAgICAgIF9fc3RhdGVfdHlwZSBfTV9zdDsKCiAgICBwdWJsaWM6CiAgICAgIF9fc3Rh dGVfdHlwZQogICAgICBzdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIF9NX3N0OyB9CgogICAgICB2b2lk CiAgICAgIHN0YXRlKF9fc3RhdGVfdHlwZSBfX3N0KSB7IF9NX3N0ID0gX19zdDsgfQoKCgogICAg ICBmcG9zKCk6IF9NX29mZihzdHJlYW1vZmYoKSksIF9NX3N0KF9fc3RhdGVfdHlwZSgpKSB7IH0K CiAgICAgIGZwb3Moc3RyZWFtb2ZmIF9fb2ZmLCBfX3N0YXRlX3R5cGUgX19zdCA9IF9fc3RhdGVf dHlwZSgpKQogICAgICA6IF9NX29mZihfX29mZiksIF9NX3N0KF9fc3QpIHsgfQoKICAgICAgb3Bl cmF0b3Igc3RyZWFtb2ZmKCkgY29uc3QgeyByZXR1cm4gX01fb2ZmOyB9CgogICAgICBmcG9zJgog ICAgICBvcGVyYXRvcis9KHN0cmVhbW9mZiBfX29mZikgeyBfTV9vZmYgKz0gX19vZmY7IHJldHVy biAqdGhpczsgfQoKICAgICAgZnBvcyYKICAgICAgb3BlcmF0b3ItPShzdHJlYW1vZmYgX19vZmYp IHsgX01fb2ZmIC09IF9fb2ZmOyByZXR1cm4gKnRoaXM7IH0KCiAgICAgIGZwb3MKICAgICAgb3Bl cmF0b3IrKHN0cmVhbW9mZiBfX29mZikKICAgICAgewogICAgICAgIGZwb3MgX190KCp0aGlzKTsK ICAgICAgICBfX3QgKz0gX19vZmY7CiAgICAgICAgcmV0dXJuIF9fdDsKICAgICAgfQoKICAgICAg ZnBvcwogICAgICBvcGVyYXRvci0oc3RyZWFtb2ZmIF9fb2ZmKQogICAgICB7CiAgICAgICAgZnBv cyBfX3QoKnRoaXMpOwogICAgICAgIF9fdCAtPSBfX29mZjsKICAgICAgICByZXR1cm4gX190Owog ICAgICB9CgogICAgICBib29sCiAgICAgIG9wZXJhdG9yPT0oY29uc3QgZnBvcyYgX19wb3MpIGNv bnN0CiAgICAgIHsgcmV0dXJuIF9NX29mZiA9PSBfX3Bvcy5fTV9vZmY7IH0KCiAgICAgIGJvb2wK ICAgICAgb3BlcmF0b3IhPShjb25zdCBmcG9zJiBfX3BvcykgY29uc3QKICAgICAgeyByZXR1cm4g X01fb2ZmICE9IF9fcG9zLl9NX29mZjsgfQoKICAgICAgc3RyZWFtb2ZmCiAgICAgIF9NX3Bvc2l0 aW9uKCkgY29uc3QgeyByZXR1cm4gX01fb2ZmOyB9CgogICAgICB2b2lkCiAgICAgIF9NX3Bvc2l0 aW9uKHN0cmVhbW9mZiBfX29mZikgeyBfTV9vZmYgPSBfX29mZjsgfQogICAgfTsKCgogIHR5cGVk ZWYgZnBvczxtYnN0YXRlX3Q+IHN0cmVhbXBvczsKCgoKCn0KIyA0NyAiL2hvbWUvQWRtaW5pc3Ry YXRvci9nY2N0ZXN0aW5nL2xpYi9nY2MtbGliL2k2ODYtcGMtY3lnd2luLzMuNC9pbmNsdWRlL2Mr Ky9iaXRzL2NoYXJfdHJhaXRzLmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CiMgNjEgIi9ob21lL0Fk bWluaXN0cmF0b3IvZ2NjdGVzdGluZy9saWIvZ2NjLWxpYi9pNjg2LXBjLWN5Z3dpbi8zLjQvaW5j bHVkZS9jKysvYml0cy9jaGFyX3RyYWl0cy5oIiAzCiAgdGVtcGxhdGU8Y2xhc3MgX0NoYXJUPgog ICAgc3RydWN0IGNoYXJfdHJhaXRzCiAgICB7CiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlw ZTsKCiAgICAgIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBpbnRfdHlwZTsKICAgICAgdHlwZWRlZiBz dHJlYW1wb3MgcG9zX3R5cGU7CiAgICAgIHR5cGVkZWYgc3RyZWFtb2ZmIG9mZl90eXBlOwogICAg ICB0eXBlZGVmIG1ic3RhdGVfdCBzdGF0ZV90eXBlOwoKICAgICAgc3RhdGljIHZvaWQKICAgICAg YXNzaWduKGNoYXJfdHlwZSYgX19jMSwgY29uc3QgY2hhcl90eXBlJiBfX2MyKTsKCiAgICAgIHN0 YXRpYyBib29sCiAgICAgIGVxKGNvbnN0IGNoYXJfdHlwZSYgX19jMSwgY29uc3QgY2hhcl90eXBl JiBfX2MyKTsKCiAgICAgIHN0YXRpYyBib29sCiAgICAgIGx0KGNvbnN0IGNoYXJfdHlwZSYgX19j MSwgY29uc3QgY2hhcl90eXBlJiBfX2MyKTsKCiAgICAgIHN0YXRpYyBpbnQKICAgICAgY29tcGFy ZShjb25zdCBjaGFyX3R5cGUqIF9fczEsIGNvbnN0IGNoYXJfdHlwZSogX19zMiwgc2l6ZV90IF9f bik7CgogICAgICBzdGF0aWMgc2l6ZV90CiAgICAgIGxlbmd0aChjb25zdCBjaGFyX3R5cGUqIF9f cyk7CgogICAgICBzdGF0aWMgY29uc3QgY2hhcl90eXBlKgogICAgICBmaW5kKGNvbnN0IGNoYXJf dHlwZSogX19zLCBzaXplX3QgX19uLCBjb25zdCBjaGFyX3R5cGUmIF9fYSk7CgogICAgICBzdGF0 aWMgY2hhcl90eXBlKgogICAgICBtb3ZlKGNoYXJfdHlwZSogX19zMSwgY29uc3QgY2hhcl90eXBl KiBfX3MyLCBzaXplX3QgX19uKTsKCiAgICAgIHN0YXRpYyBjaGFyX3R5cGUqCiAgICAgIGNvcHko Y2hhcl90eXBlKiBfX3MxLCBjb25zdCBjaGFyX3R5cGUqIF9fczIsIHNpemVfdCBfX24pOwoKICAg ICAgc3RhdGljIGNoYXJfdHlwZSoKICAgICAgYXNzaWduKGNoYXJfdHlwZSogX19zLCBzaXplX3Qg X19uLCBjaGFyX3R5cGUgX19hKTsKCiAgICAgIHN0YXRpYyBjaGFyX3R5cGUKICAgICAgdG9fY2hh cl90eXBlKGNvbnN0IGludF90eXBlJiBfX2MpOwoKICAgICAgc3RhdGljIGludF90eXBlCiAgICAg IHRvX2ludF90eXBlKGNvbnN0IGNoYXJfdHlwZSYgX19jKTsKCiAgICAgIHN0YXRpYyBib29sCiAg ICAgIGVxX2ludF90eXBlKGNvbnN0IGludF90eXBlJiBfX2MxLCBjb25zdCBpbnRfdHlwZSYgX19j Mik7CgogICAgICBzdGF0aWMgaW50X3R5cGUKICAgICAgZW9mKCk7CgogICAgICBzdGF0aWMgaW50 X3R5cGUKICAgICAgbm90X2VvZihjb25zdCBpbnRfdHlwZSYgX19jKTsKICAgIH07CgoKCiAgdGVt cGxhdGU8PgogICAgc3RydWN0IGNoYXJfdHJhaXRzPGNoYXI+CiAgICB7CiAgICAgIHR5cGVkZWYg Y2hhciBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgaW50IGludF90eXBlOwogICAgICB0eXBlZGVm IHN0cmVhbXBvcyBwb3NfdHlwZTsKICAgICAgdHlwZWRlZiBzdHJlYW1vZmYgb2ZmX3R5cGU7CiAg ICAgIHR5cGVkZWYgbWJzdGF0ZV90IHN0YXRlX3R5cGU7CgogICAgICBzdGF0aWMgdm9pZAogICAg ICBhc3NpZ24oY2hhcl90eXBlJiBfX2MxLCBjb25zdCBjaGFyX3R5cGUmIF9fYzIpCiAgICAgIHsg X19jMSA9IF9fYzI7IH0KCiAgICAgIHN0YXRpYyBib29sCiAgICAgIGVxKGNvbnN0IGNoYXJfdHlw ZSYgX19jMSwgY29uc3QgY2hhcl90eXBlJiBfX2MyKQogICAgICB7IHJldHVybiBfX2MxID09IF9f YzI7IH0KCiAgICAgIHN0YXRpYyBib29sCiAgICAgIGx0KGNvbnN0IGNoYXJfdHlwZSYgX19jMSwg Y29uc3QgY2hhcl90eXBlJiBfX2MyKQogICAgICB7IHJldHVybiBfX2MxIDwgX19jMjsgfQoKICAg ICAgc3RhdGljIGludAogICAgICBjb21wYXJlKGNvbnN0IGNoYXJfdHlwZSogX19zMSwgY29uc3Qg Y2hhcl90eXBlKiBfX3MyLCBzaXplX3QgX19uKQogICAgICB7IHJldHVybiBtZW1jbXAoX19zMSwg X19zMiwgX19uKTsgfQoKICAgICAgc3RhdGljIHNpemVfdAogICAgICBsZW5ndGgoY29uc3QgY2hh cl90eXBlKiBfX3MpCiAgICAgIHsgcmV0dXJuIHN0cmxlbihfX3MpOyB9CgogICAgICBzdGF0aWMg Y29uc3QgY2hhcl90eXBlKgogICAgICBmaW5kKGNvbnN0IGNoYXJfdHlwZSogX19zLCBzaXplX3Qg X19uLCBjb25zdCBjaGFyX3R5cGUmIF9fYSkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Y29u c3QgY2hhcl90eXBlKj4obWVtY2hyKF9fcywgX19hLCBfX24pKTsgfQoKICAgICAgc3RhdGljIGNo YXJfdHlwZSoKICAgICAgbW92ZShjaGFyX3R5cGUqIF9fczEsIGNvbnN0IGNoYXJfdHlwZSogX19z Miwgc2l6ZV90IF9fbikKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Y2hhcl90eXBlKj4obWVt bW92ZShfX3MxLCBfX3MyLCBfX24pKTsgfQoKICAgICAgc3RhdGljIGNoYXJfdHlwZSoKICAgICAg Y29weShjaGFyX3R5cGUqIF9fczEsIGNvbnN0IGNoYXJfdHlwZSogX19zMiwgc2l6ZV90IF9fbikK ICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Y2hhcl90eXBlKj4obWVtY3B5KF9fczEsIF9fczIs IF9fbikpOyB9CgogICAgICBzdGF0aWMgY2hhcl90eXBlKgogICAgICBhc3NpZ24oY2hhcl90eXBl KiBfX3MsIHNpemVfdCBfX24sIGNoYXJfdHlwZSBfX2EpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19j YXN0PGNoYXJfdHlwZSo+KG1lbXNldChfX3MsIF9fYSwgX19uKSk7IH0KCiAgICAgIHN0YXRpYyBj aGFyX3R5cGUKICAgICAgdG9fY2hhcl90eXBlKGNvbnN0IGludF90eXBlJiBfX2MpCiAgICAgIHsg cmV0dXJuIHN0YXRpY19jYXN0PGNoYXJfdHlwZT4oX19jKTsgfQoKCgogICAgICBzdGF0aWMgaW50 X3R5cGUKICAgICAgdG9faW50X3R5cGUoY29uc3QgY2hhcl90eXBlJiBfX2MpCiAgICAgIHsgcmV0 dXJuIHN0YXRpY19jYXN0PGludF90eXBlPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihfX2Mp KTsgfQoKICAgICAgc3RhdGljIGJvb2wKICAgICAgZXFfaW50X3R5cGUoY29uc3QgaW50X3R5cGUm IF9fYzEsIGNvbnN0IGludF90eXBlJiBfX2MyKQogICAgICB7IHJldHVybiBfX2MxID09IF9fYzI7 IH0KCiAgICAgIHN0YXRpYyBpbnRfdHlwZQogICAgICBlb2YoKSB7IHJldHVybiBzdGF0aWNfY2Fz dDxpbnRfdHlwZT4oKC0xKSk7IH0KCiAgICAgIHN0YXRpYyBpbnRfdHlwZQogICAgICBub3RfZW9m KGNvbnN0IGludF90eXBlJiBfX2MpCiAgICAgIHsgcmV0dXJuIChfX2MgPT0gZW9mKCkpID8gMCA6 IF9fYzsgfQogIH07CiMgMjUwICIvaG9tZS9BZG1pbmlzdHJhdG9yL2djY3Rlc3RpbmcvbGliL2dj Yy1saWIvaTY4Ni1wYy1jeWd3aW4vMy40L2luY2x1ZGUvYysrL2JpdHMvY2hhcl90cmFpdHMuaCIg MwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIHN0cnVj dCBfQ2hhcl90cmFpdHNfbWF0Y2gKICAgIHsKICAgICAgX0NoYXJUIF9NX2M7CiAgICAgIF9DaGFy X3RyYWl0c19tYXRjaChfQ2hhclQgY29uc3QmIF9fYykgOiBfTV9jKF9fYykgeyB9CgogICAgICBi b29sCiAgICAgIG9wZXJhdG9yKCkoX0NoYXJUIGNvbnN0JiBfX2EpIHsgcmV0dXJuIF9UcmFpdHM6 OmVxKF9NX2MsIF9fYSk7IH0KICAgIH07Cn0KIyA0OCAiL2hvbWUvQWRtaW5pc3RyYXRvci9nY2N0 ZXN0aW5nL2xpYi9nY2MtbGliL2k2ODYtcGMtY3lnd2luLzMuNC9pbmNsdWRlL2MrKy9zdHJpbmci IDIgMwojIDEgIi9ob21lL0FkbWluaXN0cmF0b3IvZ2NjdGVzdGluZy9saWIvZ2NjLWxpYi9pNjg2 LXBjLWN5Z3dpbi8zLjQvaW5jbHVkZS9jKysvbWVtb3J5IiAxIDMKIyA1MyAiL2hvbWUvQWRtaW5p c3RyYXRvci9nY2N0ZXN0aW5nL2xpYi9nY2MtbGliL2k2ODYtcGMtY3lnd2luLzMuNC9pbmNsdWRl L2MrKy9tZW1vcnkiIDMKCiMgMSAiL2hvbWUvQWRtaW5pc3RyYXRvci9nY2N0ZXN0aW5nL2xpYi9n Y2MtbGliL2k2ODYtcGMtY3lnd2luLzMuNC9pbmNsdWRlL2MrKy9iaXRzL3N0bF9hbGdvYmFzZS5o IiAxIDMKIyA2NiAiL2hvbWUvQWRtaW5pc3RyYXRvci9nY2N0ZXN0aW5nL2xpYi9nY2MtbGliL2k2 ODYtcGMtY3lnd2luLzMuNC9pbmNsdWRlL2MrKy9iaXRzL3N0bF9hbGdvYmFzZS5oIiAzCiMgMSAi L2hvbWUvQWRtaW5pc3RyYXRvci9nY2N0ZXN0aW5nL2xpYi9nY2MtbGliL2k2ODYtcGMtY3lnd2lu LzMuNC9pbmNsdWRlL2MrKy9jbGltaXRzIiAxIDMKIyA0OCAiL2hvbWUvQWRtaW5pc3RyYXRvci9n Y2N0ZXN0aW5nL2xpYi9nY2MtbGliL2k2ODYtcGMtY3lnd2luLzMuNC9pbmNsdWRlL2MrKy9jbGlt aXRzIiAzCgojIDEgIi9ob21lL0FkbWluaXN0cmF0b3IvZ2NjdGVzdGluZy9saWIvZ2NjLWxpYi9p Njg2LXBjLWN5Z3dpbi8zLjQvaW5jbHVkZS9saW1pdHMuaCIgMSAzIDQKIyAxMSAiL2hvbWUvQWRt aW5pc3RyYXRvci9nY2N0ZXN0aW5nL2xpYi9nY2MtbGliL2k2ODYtcGMtY3lnd2luLzMuNC9pbmNs dWRlL2xpbWl0cy5oIiAzIDQKIyAxICIvaG9tZS9BZG1pbmlzdHJhdG9yL2djY3Rlc3RpbmcvbGli L2djYy1saWIvaTY4Ni1wYy1jeWd3aW4vMy40L2luY2x1ZGUvc3lzbGltaXRzLmgiIDEgMyA0CgoK CgoKCiMgMSAiL2hvbWUvQWRtaW5pc3RyYXRvci9nY2N0ZXN0aW5nL2xpYi9nY2MtbGliL2k2ODYt cGMtY3lnd2luLzMuNC9pbmNsdWRlL2xpbWl0cy5oIiAxIDMgNAojIDEyMiAiL2hvbWUvQWRtaW5p c3RyYXRvci9nY2N0ZXN0aW5nL2xpYi9nY2MtbGliL2k2ODYtcGMtY3lnd2luLzMuNC9pbmNsdWRl L2xpbWl0cy5oIiAzIDQKIyAxICIvdXNyL2luY2x1ZGUvbGltaXRzLmgiIDEgMyA0CiMgMTIzICIv aG9tZS9BZG1pbmlzdHJhdG9yL2djY3Rlc3RpbmcvbGliL2djYy1saWIvaTY4Ni1wYy1jeWd3aW4v My40L2luY2x1ZGUvbGltaXRzLmgiIDIgMyA0CiMgOCAiL2hvbWUvQWRtaW5pc3RyYXRvci9nY2N0 ZXN0aW5nL2xpYi9nY2MtbGliL2k2ODYtcGMtY3lnd2luLzMuNC9pbmNsdWRlL3N5c2xpbWl0cy5o IiAyIDMgNAojIDEyICIvaG9tZS9BZG1pbmlzdHJhdG9yL2djY3Rlc3RpbmcvbGliL2djYy1saWIv aTY4Ni1wYy1jeWd3aW4vMy40L2luY2x1ZGUvbGltaXRzLmgiIDIgMyA0CiMgNTAgIi9ob21lL0Fk bWluaXN0cmF0b3IvZ2NjdGVzdGluZy9saWIvZ2NjLWxpYi9pNjg2LXBjLWN5Z3dpbi8zLjQvaW5j bHVkZS9jKysvY2xpbWl0cyIgMiAzCiMgNjcgIi9ob21lL0FkbWluaXN0cmF0b3IvZ2NjdGVzdGlu Zy9saWIvZ2NjLWxpYi9pNjg2LXBjLWN5Z3dpbi8zLjQvaW5jbHVkZS9jKysvYml0cy9zdGxfYWxn b2Jhc2UuaCIgMiAzCiMgMSAiL2hvbWUvQWRtaW5pc3RyYXRvci9nY2N0ZXN0aW5nL2xpYi9nY2Mt bGliL2k2ODYtcGMtY3lnd2luLzMuNC9pbmNsdWRlL2MrKy9jc3RkbGliIiAxIDMKIyA0OCAiL2hv bWUvQWRtaW5pc3RyYXRvci9nY2N0ZXN0aW5nL2xpYi9nY2MtbGliL2k2ODYtcGMtY3lnd2luLzMu NC9pbmNsdWRlL2MrKy9jc3RkbGliIiAzCgoKCgojIDEgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIg MSAzIDQKIyAxNCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzIDQKIyAxICIvaG9tZS9BZG1pbmlz dHJhdG9yL2djY3Rlc3RpbmcvbGliL2djYy1saWIvaTY4Ni1wYy1jeWd3aW4vMy40L2luY2x1ZGUv c3RkZGVmLmgiIDEgMyA0CiMgMTUgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMiAzIDQKCgojIDEg Ii91c3IvaW5jbHVkZS9tYWNoaW5lL3N0ZGxpYi5oIiAxIDMgNAojIDE4ICIvdXNyL2luY2x1ZGUv c3RkbGliLmgiIDIgMyA0CgojIDEgIi91c3IvaW5jbHVkZS9hbGxvY2EuaCIgMSAzIDQKIyAyMCAi L3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAyIDMgNAoKCmV4dGVybiAiQyIgewoKdHlwZWRlZiBzdHJ1 Y3QKewogIGludCBxdW90OwogIGludCByZW07Cn0gZGl2X3Q7Cgp0eXBlZGVmIHN0cnVjdAp7CiAg bG9uZyBxdW90OwogIGxvbmcgcmVtOwp9IGxkaXZfdDsKIyA0NSAiL3Vzci9pbmNsdWRlL3N0ZGxp Yi5oIiAzIDQKZXh0ZXJuIF9fYXR0cmlidXRlX18oKGRsbGltcG9ydCkpIGludCBfX21iX2N1cl9t YXg7CgoKCnZvaWQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgYWJvcnQgKHZvaWQpIF9fYXR0 cmlidXRlX18gKChub3JldHVybikpOwppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgYWJz IChpbnQpOwppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgYXRleGl0ICh2b2lkICgqX19m dW5jKSh2b2lkKSk7CmRvdWJsZSBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBhdG9mIChjb25z dCBjaGFyICpfX25wdHIpOwoKZmxvYXQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgYXRvZmYg KGNvbnN0IGNoYXIgKl9fbnB0cik7CgppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgYXRv aSAoY29uc3QgY2hhciAqX19ucHRyKTsKbG9uZyBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBh dG9sIChjb25zdCBjaGFyICpfX25wdHIpOwp2b2lkICogX19hdHRyaWJ1dGVfXygoX19jZGVjbF9f KSkgYnNlYXJjaCAoY29uc3Qgdm9pZCAqIF9fa2V5LCBjb25zdCB2b2lkICogX19iYXNlLCBzaXpl X3QgX19ubWVtYiwgc2l6ZV90IF9fc2l6ZSwgaW50ICgqIF9fYXR0cmlidXRlX18oKF9fY2RlY2xf XykpIF9jb21wYXIpIChjb25zdCB2b2lkICosIGNvbnN0IHZvaWQgKikpOwoKCgoKdm9pZCAqIF9f YXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGNhbGxvYyAoc2l6ZV90IF9fbm1lbWIsIHNpemVfdCBf X3NpemUpOwpkaXZfdCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBkaXYgKGludCBfX251bWVy LCBpbnQgX19kZW5vbSk7CnZvaWQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgZXhpdCAoaW50 IF9fc3RhdHVzKSBfX2F0dHJpYnV0ZV9fICgobm9yZXR1cm4pKTsKdm9pZCBfX2F0dHJpYnV0ZV9f KChfX2NkZWNsX18pKSBmcmVlICh2b2lkICopOwpjaGFyICogX19hdHRyaWJ1dGVfXygoX19jZGVj bF9fKSkgZ2V0ZW52IChjb25zdCBjaGFyICpfX3N0cmluZyk7CmNoYXIgKiBfX2F0dHJpYnV0ZV9f KChfX2NkZWNsX18pKSBfZ2V0ZW52X3IgKHN0cnVjdCBfcmVlbnQgKiwgY29uc3QgY2hhciAqX19z dHJpbmcpOwpjaGFyICogX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgX2ZpbmRlbnYgKGNvbnN0 IGNoYXIgKiwgaW50ICopOwpjaGFyICogX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgX2ZpbmRl bnZfciAoc3RydWN0IF9yZWVudCAqLCBjb25zdCBjaGFyICosIGludCAqKTsKbG9uZyBfX2F0dHJp YnV0ZV9fKChfX2NkZWNsX18pKSBsYWJzIChsb25nKTsKbGRpdl90IF9fYXR0cmlidXRlX18oKF9f Y2RlY2xfXykpIGxkaXYgKGxvbmcgX19udW1lciwgbG9uZyBfX2Rlbm9tKTsKdm9pZCAqIF9fYXR0 cmlidXRlX18oKF9fY2RlY2xfXykpIG1hbGxvYyAoc2l6ZV90IF9fc2l6ZSk7CmludCBfX2F0dHJp YnV0ZV9fKChfX2NkZWNsX18pKSBtYmxlbiAoY29uc3QgY2hhciAqLCBzaXplX3QpOwppbnQgX19h dHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgX21ibGVuX3IgKHN0cnVjdCBfcmVlbnQgKiwgY29uc3Qg Y2hhciAqLCBzaXplX3QsIF9tYnN0YXRlX3QgKik7CmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNs X18pKSBtYnRvd2MgKHdjaGFyX3QgKiwgY29uc3QgY2hhciAqLCBzaXplX3QpOwppbnQgX19hdHRy aWJ1dGVfXygoX19jZGVjbF9fKSkgX21idG93Y19yIChzdHJ1Y3QgX3JlZW50ICosIHdjaGFyX3Qg KiwgY29uc3QgY2hhciAqLCBzaXplX3QsIF9tYnN0YXRlX3QgKik7CmludCBfX2F0dHJpYnV0ZV9f KChfX2NkZWNsX18pKSB3Y3RvbWIgKGNoYXIgKiwgd2NoYXJfdCk7CmludCBfX2F0dHJpYnV0ZV9f KChfX2NkZWNsX18pKSBfd2N0b21iX3IgKHN0cnVjdCBfcmVlbnQgKiwgY2hhciAqLCB3Y2hhcl90 LCBfbWJzdGF0ZV90ICopOwpzaXplX3QgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgbWJzdG93 Y3MgKHdjaGFyX3QgKiwgY29uc3QgY2hhciAqLCBzaXplX3QpOwpzaXplX3QgX19hdHRyaWJ1dGVf XygoX19jZGVjbF9fKSkgX21ic3Rvd2NzX3IgKHN0cnVjdCBfcmVlbnQgKiwgd2NoYXJfdCAqLCBj b25zdCBjaGFyICosIHNpemVfdCwgX21ic3RhdGVfdCAqKTsKc2l6ZV90IF9fYXR0cmlidXRlX18o KF9fY2RlY2xfXykpIHdjc3RvbWJzIChjaGFyICosIGNvbnN0IHdjaGFyX3QgKiwgc2l6ZV90KTsK c2l6ZV90IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIF93Y3N0b21ic19yIChzdHJ1Y3QgX3Jl ZW50ICosIGNoYXIgKiwgY29uc3Qgd2NoYXJfdCAqLCBzaXplX3QsIF9tYnN0YXRlX3QgKik7CgoK aW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIG1rc3RlbXAgKGNoYXIgKik7CmNoYXIgKiBf X2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBta3RlbXAgKGNoYXIgKik7CgoKdm9pZCBfX2F0dHJp YnV0ZV9fKChfX2NkZWNsX18pKSBxc29ydCAodm9pZCAqIF9fYmFzZSwgc2l6ZV90IF9fbm1lbWIs IHNpemVfdCBfX3NpemUsIGludCgqX2NvbXBhcikoY29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICop KTsKaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHJhbmQgKHZvaWQpOwp2b2lkICogX19h dHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgcmVhbGxvYyAodm9pZCAqIF9fciwgc2l6ZV90IF9fc2l6 ZSk7CnZvaWQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgc3JhbmQgKHVuc2lnbmVkIF9fc2Vl ZCk7CmRvdWJsZSBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBzdHJ0b2QgKGNvbnN0IGNoYXIg Kl9fbiwgY2hhciAqKl9fZW5kX1BUUik7CmRvdWJsZSBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18p KSBfc3RydG9kX3IgKHN0cnVjdCBfcmVlbnQgKixjb25zdCBjaGFyICpfX24sIGNoYXIgKipfX2Vu ZF9QVFIpOwpmbG9hdCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBzdHJ0b2YgKGNvbnN0IGNo YXIgKl9fbiwgY2hhciAqKl9fZW5kX1BUUik7CgoKCgoKCmxvbmcgX19hdHRyaWJ1dGVfXygoX19j ZGVjbF9fKSkgc3RydG9sIChjb25zdCBjaGFyICpfX24sIGNoYXIgKipfX2VuZF9QVFIsIGludCBf X2Jhc2UpOwpsb25nIF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIF9zdHJ0b2xfciAoc3RydWN0 IF9yZWVudCAqLGNvbnN0IGNoYXIgKl9fbiwgY2hhciAqKl9fZW5kX1BUUiwgaW50IF9fYmFzZSk7 CnVuc2lnbmVkIGxvbmcgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgc3RydG91bCAoY29uc3Qg Y2hhciAqX19uLCBjaGFyICoqX19lbmRfUFRSLCBpbnQgX19iYXNlKTsKdW5zaWduZWQgbG9uZyBf X2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBfc3RydG91bF9yIChzdHJ1Y3QgX3JlZW50ICosY29u c3QgY2hhciAqX19uLCBjaGFyICoqX19lbmRfUFRSLCBpbnQgX19iYXNlKTsKCmludCBfX2F0dHJp YnV0ZV9fKChfX2NkZWNsX18pKSBzeXN0ZW0gKGNvbnN0IGNoYXIgKl9fc3RyaW5nKTsKCgpsb25n IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGE2NGwgKGNvbnN0IGNoYXIgKl9faW5wdXQpOwpj aGFyICogX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgbDY0YSAobG9uZyBfX2lucHV0KTsKY2hh ciAqIF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIF9sNjRhX3IgKHN0cnVjdCBfcmVlbnQgKixs b25nIF9faW5wdXQpOwppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgb25fZXhpdCAodm9p ZCAoKl9fZnVuYykoaW50LCB2b2lkICopLHZvaWQgKiBfX2FyZyk7CnZvaWQgX19hdHRyaWJ1dGVf XygoX19jZGVjbF9fKSkgX0V4aXQgKGludCBfX3N0YXR1cykgX19hdHRyaWJ1dGVfXyAoKG5vcmV0 dXJuKSk7CmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBwdXRlbnYgKGNvbnN0IGNoYXIg Kl9fc3RyaW5nKTsKaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIF9wdXRlbnZfciAoc3Ry dWN0IF9yZWVudCAqLCBjb25zdCBjaGFyICpfX3N0cmluZyk7CmludCBfX2F0dHJpYnV0ZV9fKChf X2NkZWNsX18pKSBzZXRlbnYgKGNvbnN0IGNoYXIgKl9fc3RyaW5nLCBjb25zdCBjaGFyICpfX3Zh bHVlLCBpbnQgX19vdmVyd3JpdGUpOwppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgX3Nl dGVudl9yIChzdHJ1Y3QgX3JlZW50ICosIGNvbnN0IGNoYXIgKl9fc3RyaW5nLCBjb25zdCBjaGFy ICpfX3ZhbHVlLCBpbnQgX19vdmVyd3JpdGUpOwoKY2hhciAqIF9fYXR0cmlidXRlX18oKF9fY2Rl Y2xfXykpIGdjdnQgKGRvdWJsZSxpbnQsY2hhciAqKTsKY2hhciAqIF9fYXR0cmlidXRlX18oKF9f Y2RlY2xfXykpIGdjdnRmIChmbG9hdCxpbnQsY2hhciAqKTsKY2hhciAqIF9fYXR0cmlidXRlX18o KF9fY2RlY2xfXykpIGZjdnQgKGRvdWJsZSxpbnQsaW50ICosaW50ICopOwpjaGFyICogX19hdHRy aWJ1dGVfXygoX19jZGVjbF9fKSkgZmN2dGYgKGZsb2F0LGludCxpbnQgKixpbnQgKik7CmNoYXIg KiBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBlY3Z0IChkb3VibGUsaW50LGludCAqLGludCAq KTsKY2hhciAqIF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGVjdnRidWYgKGRvdWJsZSwgaW50 LCBpbnQqLCBpbnQqLCBjaGFyICopOwpjaGFyICogX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkg ZmN2dGJ1ZiAoZG91YmxlLCBpbnQsIGludCosIGludCosIGNoYXIgKik7CmNoYXIgKiBfX2F0dHJp YnV0ZV9fKChfX2NkZWNsX18pKSBlY3Z0ZiAoZmxvYXQsaW50LGludCAqLGludCAqKTsKY2hhciAq IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGR0b2EgKGRvdWJsZSwgaW50LCBpbnQsIGludCAq LCBpbnQqLCBjaGFyKiopOwppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgcmFuZF9yICh1 bnNpZ25lZCAqX19zZWVkKTsKCmRvdWJsZSBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBkcmFu ZDQ4ICh2b2lkKTsKZG91YmxlIF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIF9kcmFuZDQ4X3Ig KHN0cnVjdCBfcmVlbnQgKik7CmRvdWJsZSBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBlcmFu ZDQ4ICh1bnNpZ25lZCBzaG9ydCBbM10pOwpkb3VibGUgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9f KSkgX2VyYW5kNDhfciAoc3RydWN0IF9yZWVudCAqLCB1bnNpZ25lZCBzaG9ydCBbM10pOwpsb25n IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGpyYW5kNDggKHVuc2lnbmVkIHNob3J0IFszXSk7 CmxvbmcgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgX2pyYW5kNDhfciAoc3RydWN0IF9yZWVu dCAqLCB1bnNpZ25lZCBzaG9ydCBbM10pOwp2b2lkIF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykp IGxjb25nNDggKHVuc2lnbmVkIHNob3J0IFs3XSk7CnZvaWQgX19hdHRyaWJ1dGVfXygoX19jZGVj bF9fKSkgX2xjb25nNDhfciAoc3RydWN0IF9yZWVudCAqLCB1bnNpZ25lZCBzaG9ydCBbN10pOwps b25nIF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGxyYW5kNDggKHZvaWQpOwpsb25nIF9fYXR0 cmlidXRlX18oKF9fY2RlY2xfXykpIF9scmFuZDQ4X3IgKHN0cnVjdCBfcmVlbnQgKik7Cmxvbmcg X19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgbXJhbmQ0OCAodm9pZCk7CmxvbmcgX19hdHRyaWJ1 dGVfXygoX19jZGVjbF9fKSkgX21yYW5kNDhfciAoc3RydWN0IF9yZWVudCAqKTsKbG9uZyBfX2F0 dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBucmFuZDQ4ICh1bnNpZ25lZCBzaG9ydCBbM10pOwpsb25n IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIF9ucmFuZDQ4X3IgKHN0cnVjdCBfcmVlbnQgKiwg dW5zaWduZWQgc2hvcnQgWzNdKTsKdW5zaWduZWQgc2hvcnQgKgogICAgICAgX19hdHRyaWJ1dGVf XygoX19jZGVjbF9fKSkgc2VlZDQ4ICh1bnNpZ25lZCBzaG9ydCBbM10pOwp1bnNpZ25lZCBzaG9y dCAqCiAgICAgICBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBfc2VlZDQ4X3IgKHN0cnVjdCBf cmVlbnQgKiwgdW5zaWduZWQgc2hvcnQgWzNdKTsKdm9pZCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNs X18pKSBzcmFuZDQ4IChsb25nKTsKdm9pZCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBfc3Jh bmQ0OF9yIChzdHJ1Y3QgX3JlZW50ICosIGxvbmcpOwpsb25nIGxvbmcgX19hdHRyaWJ1dGVfXygo X19jZGVjbF9fKSkgc3RydG9sbCAoY29uc3QgY2hhciAqX19uLCBjaGFyICoqX19lbmRfUFRSLCBp bnQgX19iYXNlKTsKbG9uZyBsb25nIF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIF9zdHJ0b2xs X3IgKHN0cnVjdCBfcmVlbnQgKiwgY29uc3QgY2hhciAqX19uLCBjaGFyICoqX19lbmRfUFRSLCBp bnQgX19iYXNlKTsKdW5zaWduZWQgbG9uZyBsb25nIF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykp IHN0cnRvdWxsIChjb25zdCBjaGFyICpfX24sIGNoYXIgKipfX2VuZF9QVFIsIGludCBfX2Jhc2Up Owp1bnNpZ25lZCBsb25nIGxvbmcgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgX3N0cnRvdWxs X3IgKHN0cnVjdCBfcmVlbnQgKiwgY29uc3QgY2hhciAqX19uLCBjaGFyICoqX19lbmRfUFRSLCBp bnQgX19iYXNlKTsKCgoKCmNoYXIgKiBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSByZWFscGF0 aCAoY29uc3QgY2hhciAqLCBjaGFyICopOwp2b2lkIF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykp IHVuc2V0ZW52IChjb25zdCBjaGFyICpfX3N0cmluZyk7CnZvaWQgX19hdHRyaWJ1dGVfXygoX19j ZGVjbF9fKSkgX3Vuc2V0ZW52X3IgKHN0cnVjdCBfcmVlbnQgKiwgY29uc3QgY2hhciAqX19zdHJp bmcpOwppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgcmFuZG9tICh2b2lkKTsKbG9uZyBf X2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBzcmFuZG9tICh1bnNpZ25lZCBfX3NlZWQpOwpjaGFy ICogX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgcHRzbmFtZSAoaW50KTsKaW50IF9fYXR0cmli dXRlX18oKF9fY2RlY2xfXykpIGdyYW50cHQgKGludCk7CmludCBfX2F0dHJpYnV0ZV9fKChfX2Nk ZWNsX18pKSB1bmxvY2twdCAoaW50KTsKCgoKCmNoYXIgKiBfX2F0dHJpYnV0ZV9fKChfX2NkZWNs X18pKSBfZHRvYV9yIChzdHJ1Y3QgX3JlZW50ICosIGRvdWJsZSwgaW50LCBpbnQsIGludCAqLCBp bnQqLCBjaGFyKiopOwoKCgoKCgoKaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIF9zeXN0 ZW1fciAoc3RydWN0IF9yZWVudCAqLCBjb25zdCBjaGFyICopOwoKdm9pZCBfX2F0dHJpYnV0ZV9f KChfX2NkZWNsX18pKSBfX2VwcmludGYgKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCB1bnNp Z25lZCBpbnQsIGNvbnN0IGNoYXIgKik7CiMgMjEzICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMg NAp9CiMgNTMgIi9ob21lL0FkbWluaXN0cmF0b3IvZ2NjdGVzdGluZy9saWIvZ2NjLWxpYi9pNjg2 LXBjLWN5Z3dpbi8zLjQvaW5jbHVkZS9jKysvY3N0ZGxpYiIgMiAzCiMgODQgIi9ob21lL0FkbWlu aXN0cmF0b3IvZ2NjdGVzdGluZy9saWIvZ2NjLWxpYi9pNjg2LXBjLWN5Z3dpbi8zLjQvaW5jbHVk ZS9jKysvY3N0ZGxpYiIgMwpuYW1lc3BhY2Ugc3RkCnsKICB1c2luZyA6OmRpdl90OwogIHVzaW5n IDo6bGRpdl90OwoKICB1c2luZyA6OmFib3J0OwogIHVzaW5nIDo6YWJzOwogIHVzaW5nIDo6YXRl eGl0OwogIHVzaW5nIDo6YXRvZjsKICB1c2luZyA6OmF0b2k7CiAgdXNpbmcgOjphdG9sOwogIHVz aW5nIDo6YnNlYXJjaDsKICB1c2luZyA6OmNhbGxvYzsKICB1c2luZyA6OmRpdjsKICB1c2luZyA6 OmV4aXQ7CiAgdXNpbmcgOjpmcmVlOwogIHVzaW5nIDo6Z2V0ZW52OwogIHVzaW5nIDo6bGFiczsK ICB1c2luZyA6OmxkaXY7CiAgdXNpbmcgOjptYWxsb2M7CiAgdXNpbmcgOjptYmxlbjsKICB1c2lu ZyA6Om1ic3Rvd2NzOwogIHVzaW5nIDo6bWJ0b3djOwogIHVzaW5nIDo6cXNvcnQ7CiAgdXNpbmcg OjpyYW5kOwogIHVzaW5nIDo6cmVhbGxvYzsKICB1c2luZyA6OnNyYW5kOwogIHVzaW5nIDo6c3Ry dG9kOwogIHVzaW5nIDo6c3RydG9sOwogIHVzaW5nIDo6c3RydG91bDsKICB1c2luZyA6OnN5c3Rl bTsKICB1c2luZyA6Ondjc3RvbWJzOwogIHVzaW5nIDo6d2N0b21iOwoKICBpbmxpbmUgbG9uZwog IGFicyhsb25nIF9faSkgeyByZXR1cm4gbGFicyhfX2kpOyB9CgogIGlubGluZSBsZGl2X3QKICBk aXYobG9uZyBfX2ksIGxvbmcgX19qKSB7IHJldHVybiBsZGl2KF9faSwgX19qKTsgfQp9CiMgNjgg Ii9ob21lL0FkbWluaXN0cmF0b3IvZ2NjdGVzdGluZy9saWIvZ2NjLWxpYi9pNjg2LXBjLWN5Z3dp bi8zLjQvaW5jbHVkZS9jKysvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMiAzCgojIDEgIi9ob21lL0Fk bWluaXN0cmF0b3IvZ2NjdGVzdGluZy9saWIvZ2NjLWxpYi9pNjg2LXBjLWN5Z3dpbi8zLjQvaW5j bHVkZS9jKysvbmV3IiAxIDMKIyA0MiAiL2hvbWUvQWRtaW5pc3RyYXRvci9nY2N0ZXN0aW5nL2xp Yi9nY2MtbGliL2k2ODYtcGMtY3lnd2luLzMuNC9pbmNsdWRlL2MrKy9uZXciIDMKIyAxICIvaG9t ZS9BZG1pbmlzdHJhdG9yL2djY3Rlc3RpbmcvbGliL2djYy1saWIvaTY4Ni1wYy1jeWd3aW4vMy40 L2luY2x1ZGUvYysrL2V4Y2VwdGlvbiIgMSAzCiMgNDAgIi9ob21lL0FkbWluaXN0cmF0b3IvZ2Nj dGVzdGluZy9saWIvZ2NjLWxpYi9pNjg2LXBjLWN5Z3dpbi8zLjQvaW5jbHVkZS9jKysvZXhjZXB0 aW9uIiAzCmV4dGVybiAiQysrIiB7CgpuYW1lc3BhY2Ugc3RkCnsKIyA1MiAiL2hvbWUvQWRtaW5p c3RyYXRvci9nY2N0ZXN0aW5nL2xpYi9nY2MtbGliL2k2ODYtcGMtY3lnd2luLzMuNC9pbmNsdWRl L2MrKy9leGNlcHRpb24iIDMKICBjbGFzcyBleGNlcHRpb24KICB7CiAgcHVibGljOgogICAgZXhj ZXB0aW9uKCkgdGhyb3coKSB7IH0KICAgIHZpcnR1YWwgfmV4Y2VwdGlvbigpIHRocm93KCk7CgoK ICAgIHZpcnR1YWwgY29uc3QgY2hhciogd2hhdCgpIGNvbnN0IHRocm93KCk7CiAgfTsKCgoKICBj bGFzcyBiYWRfZXhjZXB0aW9uIDogcHVibGljIGV4Y2VwdGlvbgogIHsKICBwdWJsaWM6CiAgICBi YWRfZXhjZXB0aW9uKCkgdGhyb3coKSB7IH0KCgogICAgdmlydHVhbCB+YmFkX2V4Y2VwdGlvbigp IHRocm93KCk7CiAgfTsKCgogIHR5cGVkZWYgdm9pZCAoKnRlcm1pbmF0ZV9oYW5kbGVyKSAoKTsK CiAgdHlwZWRlZiB2b2lkICgqdW5leHBlY3RlZF9oYW5kbGVyKSAoKTsKCgogIHRlcm1pbmF0ZV9o YW5kbGVyIHNldF90ZXJtaW5hdGUodGVybWluYXRlX2hhbmRsZXIpIHRocm93KCk7CgoKICB2b2lk IHRlcm1pbmF0ZSgpIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKCgogIHVuZXhwZWN0 ZWRfaGFuZGxlciBzZXRfdW5leHBlY3RlZCh1bmV4cGVjdGVkX2hhbmRsZXIpIHRocm93KCk7CgoK ICB2b2lkIHVuZXhwZWN0ZWQoKSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CiMgMTAw ICIvaG9tZS9BZG1pbmlzdHJhdG9yL2djY3Rlc3RpbmcvbGliL2djYy1saWIvaTY4Ni1wYy1jeWd3 aW4vMy40L2luY2x1ZGUvYysrL2V4Y2VwdGlvbiIgMwogIGJvb2wgdW5jYXVnaHRfZXhjZXB0aW9u KCkgdGhyb3coKTsKfQoKbmFtZXNwYWNlIF9fZ251X2N4eAp7CiMgMTE1ICIvaG9tZS9BZG1pbmlz dHJhdG9yL2djY3Rlc3RpbmcvbGliL2djYy1saWIvaTY4Ni1wYy1jeWd3aW4vMy40L2luY2x1ZGUv YysrL2V4Y2VwdGlvbiIgMwogIHZvaWQgX192ZXJib3NlX3Rlcm1pbmF0ZV9oYW5kbGVyICgpOwp9 Cgp9CiMgNDMgIi9ob21lL0FkbWluaXN0cmF0b3IvZ2NjdGVzdGluZy9saWIvZ2NjLWxpYi9pNjg2 LXBjLWN5Z3dpbi8zLjQvaW5jbHVkZS9jKysvbmV3IiAyIDMKCmV4dGVybiAiQysrIiB7CgpuYW1l c3BhY2Ugc3RkCnsKCgoKCgogIGNsYXNzIGJhZF9hbGxvYyA6IHB1YmxpYyBleGNlcHRpb24KICB7 CiAgcHVibGljOgogICAgYmFkX2FsbG9jKCkgdGhyb3coKSB7IH0KCgogICAgdmlydHVhbCB+YmFk X2FsbG9jKCkgdGhyb3coKTsKICB9OwoKICBzdHJ1Y3Qgbm90aHJvd190IHsgfTsKICBleHRlcm4g Y29uc3Qgbm90aHJvd190IG5vdGhyb3c7CgoKICB0eXBlZGVmIHZvaWQgKCpuZXdfaGFuZGxlciko KTsKCiAgbmV3X2hhbmRsZXIgc2V0X25ld19oYW5kbGVyKG5ld19oYW5kbGVyKSB0aHJvdygpOwp9 CiMgODIgIi9ob21lL0FkbWluaXN0cmF0b3IvZ2NjdGVzdGluZy9saWIvZ2NjLWxpYi9pNjg2LXBj LWN5Z3dpbi8zLjQvaW5jbHVkZS9jKysvbmV3IiAzCnZvaWQqIG9wZXJhdG9yIG5ldyhzdGQ6OnNp emVfdCkgdGhyb3cgKHN0ZDo6YmFkX2FsbG9jKTsKdm9pZCogb3BlcmF0b3IgbmV3W10oc3RkOjpz aXplX3QpIHRocm93IChzdGQ6OmJhZF9hbGxvYyk7CnZvaWQgb3BlcmF0b3IgZGVsZXRlKHZvaWQq KSB0aHJvdygpOwp2b2lkIG9wZXJhdG9yIGRlbGV0ZVtdKHZvaWQqKSB0aHJvdygpOwp2b2lkKiBv cGVyYXRvciBuZXcoc3RkOjpzaXplX3QsIGNvbnN0IHN0ZDo6bm90aHJvd190JikgdGhyb3coKTsK dm9pZCogb3BlcmF0b3IgbmV3W10oc3RkOjpzaXplX3QsIGNvbnN0IHN0ZDo6bm90aHJvd190Jikg dGhyb3coKTsKdm9pZCBvcGVyYXRvciBkZWxldGUodm9pZCosIGNvbnN0IHN0ZDo6bm90aHJvd190 JikgdGhyb3coKTsKdm9pZCBvcGVyYXRvciBkZWxldGVbXSh2b2lkKiwgY29uc3Qgc3RkOjpub3Ro cm93X3QmKSB0aHJvdygpOwoKCmlubGluZSB2b2lkKiBvcGVyYXRvciBuZXcoc3RkOjpzaXplX3Qs IHZvaWQqIF9fcCkgdGhyb3coKSB7IHJldHVybiBfX3A7IH0KaW5saW5lIHZvaWQqIG9wZXJhdG9y IG5ld1tdKHN0ZDo6c2l6ZV90LCB2b2lkKiBfX3ApIHRocm93KCkgeyByZXR1cm4gX19wOyB9CgoK aW5saW5lIHZvaWQgb3BlcmF0b3IgZGVsZXRlICh2b2lkKiwgdm9pZCopIHRocm93KCkgeyB9Cmlu bGluZSB2b2lkIG9wZXJhdG9yIGRlbGV0ZVtdKHZvaWQqLCB2b2lkKikgdGhyb3coKSB7IH0KCn0K IyA3MCAiL2hvbWUvQWRtaW5pc3RyYXRvci9nY2N0ZXN0aW5nL2xpYi9nY2MtbGliL2k2ODYtcGMt Y3lnd2luLzMuNC9pbmNsdWRlL2MrKy9iaXRzL3N0bF9hbGdvYmFzZS5oIiAyIDMKIyAxICIvaG9t ZS9BZG1pbmlzdHJhdG9yL2djY3Rlc3RpbmcvbGliL2djYy1saWIvaTY4Ni1wYy1jeWd3aW4vMy40 L2luY2x1ZGUvYysrL2lvc2Z3ZCIgMSAzCiMgNDQgIi9ob21lL0FkbWluaXN0cmF0b3IvZ2NjdGVz dGluZy9saWIvZ2NjLWxpYi9pNjg2LXBjLWN5Z3dpbi8zLjQvaW5jbHVkZS9jKysvaW9zZndkIiAz CgoKIyAxICIvaG9tZS9BZG1pbmlzdHJhdG9yL2djY3Rlc3RpbmcvbGliL2djYy1saWIvaTY4Ni1w Yy1jeWd3aW4vMy40L2luY2x1ZGUvYysrL2k2ODYtcGMtY3lnd2luL2JpdHMvYysrbG9jYWxlLmgi IDEgMwojIDQwICIvaG9tZS9BZG1pbmlzdHJhdG9yL2djY3Rlc3RpbmcvbGliL2djYy1saWIvaTY4 Ni1wYy1jeWd3aW4vMy40L2luY2x1ZGUvYysrL2k2ODYtcGMtY3lnd2luL2JpdHMvYysrbG9jYWxl LmgiIDMKCiMgMSAiL2hvbWUvQWRtaW5pc3RyYXRvci9nY2N0ZXN0aW5nL2xpYi9nY2MtbGliL2k2 ODYtcGMtY3lnd2luLzMuNC9pbmNsdWRlL2MrKy9jbG9jYWxlIiAxIDMKIyA0OCAiL2hvbWUvQWRt aW5pc3RyYXRvci9nY2N0ZXN0aW5nL2xpYi9nY2MtbGliL2k2ODYtcGMtY3lnd2luLzMuNC9pbmNs dWRlL2MrKy9jbG9jYWxlIiAzCgojIDEgIi91c3IvaW5jbHVkZS9sb2NhbGUuaCIgMSAzIDQKIyAy NCAiL3Vzci9pbmNsdWRlL2xvY2FsZS5oIiAzIDQKZXh0ZXJuICJDIiB7CgpzdHJ1Y3QgbGNvbnYK ewogIGNoYXIgKmRlY2ltYWxfcG9pbnQ7CiAgY2hhciAqdGhvdXNhbmRzX3NlcDsKICBjaGFyICpn cm91cGluZzsKICBjaGFyICppbnRfY3Vycl9zeW1ib2w7CiAgY2hhciAqY3VycmVuY3lfc3ltYm9s OwogIGNoYXIgKm1vbl9kZWNpbWFsX3BvaW50OwogIGNoYXIgKm1vbl90aG91c2FuZHNfc2VwOwog IGNoYXIgKm1vbl9ncm91cGluZzsKICBjaGFyICpwb3NpdGl2ZV9zaWduOwogIGNoYXIgKm5lZ2F0 aXZlX3NpZ247CiAgY2hhciBpbnRfZnJhY19kaWdpdHM7CiAgY2hhciBmcmFjX2RpZ2l0czsKICBj aGFyIHBfY3NfcHJlY2VkZXM7CiAgY2hhciBwX3NlcF9ieV9zcGFjZTsKICBjaGFyIG5fY3NfcHJl Y2VkZXM7CiAgY2hhciBuX3NlcF9ieV9zcGFjZTsKICBjaGFyIHBfc2lnbl9wb3NuOwogIGNoYXIg bl9zaWduX3Bvc247Cn07CgoKY2hhciAqX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgc2V0bG9j YWxlIChpbnQgY2F0ZWdvcnksIGNvbnN0IGNoYXIgKmxvY2FsZSk7CnN0cnVjdCBsY29udiAqX19h dHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgbG9jYWxlY29udiAodm9pZCk7CgoKc3RydWN0IF9yZWVu dDsKY2hhciAqX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgX3NldGxvY2FsZV9yIChzdHJ1Y3Qg X3JlZW50ICosIGludCBjYXRlZ29yeSwgY29uc3QgY2hhciAqbG9jYWxlKTsKc3RydWN0IGxjb252 ICpfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBfbG9jYWxlY29udl9yIChzdHJ1Y3QgX3JlZW50 ICopOwoKfQojIDUwICIvaG9tZS9BZG1pbmlzdHJhdG9yL2djY3Rlc3RpbmcvbGliL2djYy1saWIv aTY4Ni1wYy1jeWd3aW4vMy40L2luY2x1ZGUvYysrL2Nsb2NhbGUiIDIgMwoKCgoKCm5hbWVzcGFj ZSBzdGQKewogIHVzaW5nIDo6bGNvbnY7CiAgdXNpbmcgOjpzZXRsb2NhbGU7CiAgdXNpbmcgOjps b2NhbGVjb252Owp9CiMgNDIgIi9ob21lL0FkbWluaXN0cmF0b3IvZ2NjdGVzdGluZy9saWIvZ2Nj LWxpYi9pNjg2LXBjLWN5Z3dpbi8zLjQvaW5jbHVkZS9jKysvaTY4Ni1wYy1jeWd3aW4vYml0cy9j Kytsb2NhbGUuaCIgMiAzCgoKCm5hbWVzcGFjZSBzdGQKewogIHR5cGVkZWYgaW50KiBfX2NfbG9j YWxlOwoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1R2PgogICAgaW50CiAgICBfX2NvbnZlcnRf ZnJvbV92KGNoYXIqIF9fb3V0LCBjb25zdCBpbnQgX19zaXplLCBjb25zdCBjaGFyKiBfX2ZtdCwK ICAgICAgICAgICAgICAgICAgICAgX1R2IF9fdiwgY29uc3QgX19jX2xvY2FsZSYsIGludCBfX3By ZWMgPSAtMSkKICAgIHsKICAgICAgY2hhciogX19vbGQgPSBzZXRsb2NhbGUoMCwgX19udWxsKTsK ICAgICAgY2hhciogX19zYXYgPSBzdGF0aWNfY2FzdDxjaGFyKj4obWFsbG9jKHN0cmxlbihfX29s ZCkgKyAxKSk7CiAgICAgIGlmIChfX3NhdikKICAgICAgICBzdHJjcHkoX19zYXYsIF9fb2xkKTsK ICAgICAgc2V0bG9jYWxlKDAsICJDIik7CgogICAgICBpbnQgX19yZXQ7CgoKCgoKCiAgICAgIGlm IChfX3ByZWMgPj0gMCkKICAgICAgICBfX3JldCA9IHNwcmludGYoX19vdXQsIF9fZm10LCBfX3By ZWMsIF9fdik7CiAgICAgIGVsc2UKICAgICAgICBfX3JldCA9IHNwcmludGYoX19vdXQsIF9fZm10 LCBfX3YpOwoKICAgICAgc2V0bG9jYWxlKDAsIF9fc2F2KTsKICAgICAgZnJlZShfX3Nhdik7CiAg ICAgIHJldHVybiBfX3JldDsKICAgIH0KfQojIDQ3ICIvaG9tZS9BZG1pbmlzdHJhdG9yL2djY3Rl c3RpbmcvbGliL2djYy1saWIvaTY4Ni1wYy1jeWd3aW4vMy40L2luY2x1ZGUvYysrL2lvc2Z3ZCIg MiAzCiMgMSAiL2hvbWUvQWRtaW5pc3RyYXRvci9nY2N0ZXN0aW5nL2xpYi9nY2MtbGliL2k2ODYt cGMtY3lnd2luLzMuNC9pbmNsdWRlL2MrKy9jY3R5cGUiIDEgMwojIDQ3ICIvaG9tZS9BZG1pbmlz dHJhdG9yL2djY3Rlc3RpbmcvbGliL2djYy1saWIvaTY4Ni1wYy1jeWd3aW4vMy40L2luY2x1ZGUv YysrL2NjdHlwZSIgMwoKCiMgMSAiL3Vzci9pbmNsdWRlL2N0eXBlLmgiIDEgMyA0CgoKCgoKZXh0 ZXJuICJDIiB7CgppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgaXNhbG51bSAoaW50IF9f Yyk7CmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBpc2FscGhhIChpbnQgX19jKTsKaW50 IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGlzY250cmwgKGludCBfX2MpOwppbnQgX19hdHRy aWJ1dGVfXygoX19jZGVjbF9fKSkgaXNkaWdpdCAoaW50IF9fYyk7CmludCBfX2F0dHJpYnV0ZV9f KChfX2NkZWNsX18pKSBpc2dyYXBoIChpbnQgX19jKTsKaW50IF9fYXR0cmlidXRlX18oKF9fY2Rl Y2xfXykpIGlzbG93ZXIgKGludCBfX2MpOwppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkg aXNwcmludCAoaW50IF9fYyk7CmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBpc3B1bmN0 IChpbnQgX19jKTsKaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGlzc3BhY2UgKGludCBf X2MpOwppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgaXN1cHBlciAoaW50IF9fYyk7Cmlu dCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBpc3hkaWdpdCAoaW50IF9fYyk7CmludCBfX2F0 dHJpYnV0ZV9fKChfX2NkZWNsX18pKSB0b2xvd2VyIChpbnQgX19jKTsKaW50IF9fYXR0cmlidXRl X18oKF9fY2RlY2xfXykpIHRvdXBwZXIgKGludCBfX2MpOwoKCmludCBfX2F0dHJpYnV0ZV9fKChf X2NkZWNsX18pKSBpc2JsYW5rIChpbnQgX19jKTsKaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xf XykpIGlzYXNjaWkgKGludCBfX2MpOwppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgdG9h c2NpaSAoaW50IF9fYyk7CmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBfdG9sb3dlciAo aW50IF9fYyk7CmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBfdG91cHBlciAoaW50IF9f Yyk7CiMgMzkgIi91c3IvaW5jbHVkZS9jdHlwZS5oIiAzIDQKZXh0ZXJuIF9fYXR0cmlidXRlX18o KGRsbGltcG9ydCkpIGNvbnN0IGNoYXIgX2N0eXBlX1tdOwojIDY4ICIvdXNyL2luY2x1ZGUvY3R5 cGUuaCIgMyA0Cn0KIyA1MCAiL2hvbWUvQWRtaW5pc3RyYXRvci9nY2N0ZXN0aW5nL2xpYi9nY2Mt bGliL2k2ODYtcGMtY3lnd2luLzMuNC9pbmNsdWRlL2MrKy9jY3R5cGUiIDIgMwojIDY2ICIvaG9t ZS9BZG1pbmlzdHJhdG9yL2djY3Rlc3RpbmcvbGliL2djYy1saWIvaTY4Ni1wYy1jeWd3aW4vMy40 L2luY2x1ZGUvYysrL2NjdHlwZSIgMwpuYW1lc3BhY2Ugc3RkCnsKICB1c2luZyA6OmlzYWxudW07 CiAgdXNpbmcgOjppc2FscGhhOwogIHVzaW5nIDo6aXNjbnRybDsKICB1c2luZyA6OmlzZGlnaXQ7 CiAgdXNpbmcgOjppc2dyYXBoOwogIHVzaW5nIDo6aXNsb3dlcjsKICB1c2luZyA6OmlzcHJpbnQ7 CiAgdXNpbmcgOjppc3B1bmN0OwogIHVzaW5nIDo6aXNzcGFjZTsKICB1c2luZyA6OmlzdXBwZXI7 CiAgdXNpbmcgOjppc3hkaWdpdDsKICB1c2luZyA6OnRvbG93ZXI7CiAgdXNpbmcgOjp0b3VwcGVy Owp9CiMgNDggIi9ob21lL0FkbWluaXN0cmF0b3IvZ2NjdGVzdGluZy9saWIvZ2NjLWxpYi9pNjg2 LXBjLWN5Z3dpbi8zLjQvaW5jbHVkZS9jKysvaW9zZndkIiAyIDMKCgojIDEgIi9ob21lL0FkbWlu aXN0cmF0b3IvZ2NjdGVzdGluZy9saWIvZ2NjLWxpYi9pNjg2LXBjLWN5Z3dpbi8zLjQvaW5jbHVk ZS9jKysvYml0cy9mdW5jdGV4Y2VwdC5oIiAxIDMKIyAzNCAiL2hvbWUvQWRtaW5pc3RyYXRvci9n Y2N0ZXN0aW5nL2xpYi9nY2MtbGliL2k2ODYtcGMtY3lnd2luLzMuNC9pbmNsdWRlL2MrKy9iaXRz L2Z1bmN0ZXhjZXB0LmgiIDMKIyAxICIvaG9tZS9BZG1pbmlzdHJhdG9yL2djY3Rlc3RpbmcvbGli L2djYy1saWIvaTY4Ni1wYy1jeWd3aW4vMy40L2luY2x1ZGUvYysrL2V4Y2VwdGlvbl9kZWZpbmVz LmgiIDEgMwojIDM1ICIvaG9tZS9BZG1pbmlzdHJhdG9yL2djY3Rlc3RpbmcvbGliL2djYy1saWIv aTY4Ni1wYy1jeWd3aW4vMy40L2luY2x1ZGUvYysrL2JpdHMvZnVuY3RleGNlcHQuaCIgMiAzCgpu YW1lc3BhY2Ugc3RkCnsKCiAgdm9pZAogIF9fdGhyb3dfYmFkX2V4Y2VwdGlvbih2b2lkKTsKCgog IHZvaWQKICBfX3Rocm93X2JhZF9hbGxvYyh2b2lkKTsKCgogIHZvaWQKICBfX3Rocm93X2JhZF9j YXN0KHZvaWQpOwoKICB2b2lkCiAgX190aHJvd19iYWRfdHlwZWlkKHZvaWQpOwoKCiAgdm9pZAog IF9fdGhyb3dfbG9naWNfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3df ZG9tYWluX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X2ludmFsaWRf YXJndW1lbnQoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfbGVuZ3RoX2Vycm9y KGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X291dF9vZl9yYW5nZShjb25zdCBj aGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19ydW50aW1lX2Vycm9yKGNvbnN0IGNoYXIqIF9f cyk7CgogIHZvaWQKICBfX3Rocm93X3JhbmdlX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZv aWQKICBfX3Rocm93X292ZXJmbG93X2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBf X3Rocm93X3VuZGVyZmxvd19lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKCiAgdm9pZAogIF9fdGhy b3dfaW9zX2ZhaWx1cmUoY29uc3QgY2hhciogX19zKTsKfQojIDUxICIvaG9tZS9BZG1pbmlzdHJh dG9yL2djY3Rlc3RpbmcvbGliL2djYy1saWIvaTY4Ni1wYy1jeWd3aW4vMy40L2luY2x1ZGUvYysr L2lvc2Z3ZCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs IHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2lj X2lvczsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hh cl90cmFpdHM8X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19zdHJlYW1idWY7CgogIHRlbXBsYXRl PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4g PgogICAgY2xhc3MgYmFzaWNfaXN0cmVhbTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0 eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19v c3RyZWFtOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBj aGFyX3RyYWl0czxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX2lvc3RyZWFtOwoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ LAogICAgICAgICAgICB0eXBlbmFtZSBfQWxsb2MgPSBhbGxvY2F0b3I8X0NoYXJUPiA+CiAgICBj bGFzcyBiYXNpY19zdHJpbmdidWY7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h bWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4sCiAgICAgICAgICAgdHlwZW5hbWUgX0Fs bG9jID0gYWxsb2NhdG9yPF9DaGFyVD4gPgogICAgY2xhc3MgYmFzaWNfaXN0cmluZ3N0cmVhbTsK CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFp dHM8X0NoYXJUPiwKICAgICAgICAgICB0eXBlbmFtZSBfQWxsb2MgPSBhbGxvY2F0b3I8X0NoYXJU PiA+CiAgICBjbGFzcyBiYXNpY19vc3RyaW5nc3RyZWFtOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+LAogICAgICAgICAg IHR5cGVuYW1lIF9BbGxvYyA9IGFsbG9jYXRvcjxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX3N0 cmluZ3N0cmVhbTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz ID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19maWxlYnVmOwoKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hh clQ+ID4KICAgIGNsYXNzIGJhc2ljX2lmc3RyZWFtOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh clQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KICAgIGNsYXNzIGJh c2ljX29mc3RyZWFtOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp dHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX2ZzdHJlYW07CgogIHRl bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9D aGFyVD4gPgogICAgY2xhc3MgaXN0cmVhbWJ1Zl9pdGVyYXRvcjsKCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+CiAgICBj bGFzcyBvc3RyZWFtYnVmX2l0ZXJhdG9yOwoKCgogIGNsYXNzIGlvc19iYXNlOwojIDEzNiAiL2hv bWUvQWRtaW5pc3RyYXRvci9nY2N0ZXN0aW5nL2xpYi9nY2MtbGliL2k2ODYtcGMtY3lnd2luLzMu NC9pbmNsdWRlL2MrKy9pb3Nmd2QiIDMKICB0eXBlZGVmIGJhc2ljX2lvczxjaGFyPiBpb3M7CiAg dHlwZWRlZiBiYXNpY19zdHJlYW1idWY8Y2hhcj4gc3RyZWFtYnVmOwogIHR5cGVkZWYgYmFzaWNf aXN0cmVhbTxjaGFyPiBpc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfb3N0cmVhbTxjaGFyPiBvc3Ry ZWFtOwogIHR5cGVkZWYgYmFzaWNfaW9zdHJlYW08Y2hhcj4gaW9zdHJlYW07CiAgdHlwZWRlZiBi YXNpY19zdHJpbmdidWY8Y2hhcj4gc3RyaW5nYnVmOwogIHR5cGVkZWYgYmFzaWNfaXN0cmluZ3N0 cmVhbTxjaGFyPiBpc3RyaW5nc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfb3N0cmluZ3N0cmVhbTxj aGFyPiBvc3RyaW5nc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfc3RyaW5nc3RyZWFtPGNoYXI+IHN0 cmluZ3N0cmVhbTsKICB0eXBlZGVmIGJhc2ljX2ZpbGVidWY8Y2hhcj4gZmlsZWJ1ZjsKICB0eXBl ZGVmIGJhc2ljX2lmc3RyZWFtPGNoYXI+IGlmc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfb2ZzdHJl YW08Y2hhcj4gb2ZzdHJlYW07CiAgdHlwZWRlZiBiYXNpY19mc3RyZWFtPGNoYXI+IGZzdHJlYW07 CiMgMTY2ICIvaG9tZS9BZG1pbmlzdHJhdG9yL2djY3Rlc3RpbmcvbGliL2djYy1saWIvaTY4Ni1w Yy1jeWd3aW4vMy40L2luY2x1ZGUvYysrL2lvc2Z3ZCIgMwp9CiMgNzEgIi9ob21lL0FkbWluaXN0 cmF0b3IvZ2NjdGVzdGluZy9saWIvZ2NjLWxpYi9pNjg2LXBjLWN5Z3dpbi8zLjQvaW5jbHVkZS9j KysvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMiAzCiMgMSAiL2hvbWUvQWRtaW5pc3RyYXRvci9nY2N0 ZXN0aW5nL2xpYi9nY2MtbGliL2k2ODYtcGMtY3lnd2luLzMuNC9pbmNsdWRlL2MrKy9iaXRzL3N0 bF9wYWlyLmgiIDEgMwojIDY0ICIvaG9tZS9BZG1pbmlzdHJhdG9yL2djY3Rlc3RpbmcvbGliL2dj Yy1saWIvaTY4Ni1wYy1jeWd3aW4vMy40L2luY2x1ZGUvYysrL2JpdHMvc3RsX3BhaXIuaCIgMwpu YW1lc3BhY2Ugc3RkCnsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CnN0cnVjdCBw YWlyIHsKICB0eXBlZGVmIF9UMSBmaXJzdF90eXBlOwogIHR5cGVkZWYgX1QyIHNlY29uZF90eXBl OwoKICBfVDEgZmlyc3Q7CiAgX1QyIHNlY29uZDsKCgoKCiAgcGFpcigpIDogZmlyc3QoKSwgc2Vj b25kKCkge30KCgoKCiAgcGFpcihjb25zdCBfVDEmIF9fYSwgY29uc3QgX1QyJiBfX2IpIDogZmly c3QoX19hKSwgc2Vjb25kKF9fYikge30KCgogIHRlbXBsYXRlIDxjbGFzcyBfVTEsIGNsYXNzIF9V Mj4KICBwYWlyKGNvbnN0IHBhaXI8X1UxLCBfVTI+JiBfX3ApIDogZmlyc3QoX19wLmZpcnN0KSwg c2Vjb25kKF9fcC5zZWNvbmQpIHt9Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1Qy PgppbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3gsIGNvbnN0 IHBhaXI8X1QxLCBfVDI+JiBfX3kpCnsKICByZXR1cm4gX194LmZpcnN0ID09IF9feS5maXJzdCAm JiBfX3guc2Vjb25kID09IF9feS5zZWNvbmQ7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFz cyBfVDI+CmlubGluZSBib29sIG9wZXJhdG9yPChjb25zdCBwYWlyPF9UMSwgX1QyPiYgX194LCBj b25zdCBwYWlyPF9UMSwgX1QyPiYgX195KQp7CiAgcmV0dXJuIF9feC5maXJzdCA8IF9feS5maXJz dCB8fAogICAgICAgICAoIShfX3kuZmlyc3QgPCBfX3guZmlyc3QpICYmIF9feC5zZWNvbmQgPCBf X3kuc2Vjb25kKTsKfQoKCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4KaW5saW5lIGJv b2wgb3BlcmF0b3IhPShjb25zdCBwYWlyPF9UMSwgX1QyPiYgX194LCBjb25zdCBwYWlyPF9UMSwg X1QyPiYgX195KSB7CiAgcmV0dXJuICEoX194ID09IF9feSk7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3Mg X1QxLCBjbGFzcyBfVDI+CmlubGluZSBib29sIG9wZXJhdG9yPihjb25zdCBwYWlyPF9UMSwgX1Qy PiYgX194LCBjb25zdCBwYWlyPF9UMSwgX1QyPiYgX195KSB7CiAgcmV0dXJuIF9feSA8IF9feDsK fQoKCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4KaW5saW5lIGJvb2wgb3BlcmF0b3I8 PShjb25zdCBwYWlyPF9UMSwgX1QyPiYgX194LCBjb25zdCBwYWlyPF9UMSwgX1QyPiYgX195KSB7 CiAgcmV0dXJuICEoX195IDwgX194KTsKfQoKCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9U Mj4KaW5saW5lIGJvb2wgb3BlcmF0b3I+PShjb25zdCBwYWlyPF9UMSwgX1QyPiYgX194LCBjb25z dCBwYWlyPF9UMSwgX1QyPiYgX195KSB7CiAgcmV0dXJuICEoX194IDwgX195KTsKfQojIDE0MCAi L2hvbWUvQWRtaW5pc3RyYXRvci9nY2N0ZXN0aW5nL2xpYi9nY2MtbGliL2k2ODYtcGMtY3lnd2lu LzMuNC9pbmNsdWRlL2MrKy9iaXRzL3N0bF9wYWlyLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9UMSwg Y2xhc3MgX1QyPgoKCmlubGluZSBwYWlyPF9UMSwgX1QyPiBtYWtlX3BhaXIoX1QxIF9feCwgX1Qy IF9feSkKCgoKewogIHJldHVybiBwYWlyPF9UMSwgX1QyPihfX3gsIF9feSk7Cn0KCn0KIyA3MiAi L2hvbWUvQWRtaW5pc3RyYXRvci9nY2N0ZXN0aW5nL2xpYi9nY2MtbGliL2k2ODYtcGMtY3lnd2lu LzMuNC9pbmNsdWRlL2MrKy9iaXRzL3N0bF9hbGdvYmFzZS5oIiAyIDMKIyAxICIvaG9tZS9BZG1p bmlzdHJhdG9yL2djY3Rlc3RpbmcvbGliL2djYy1saWIvaTY4Ni1wYy1jeWd3aW4vMy40L2luY2x1 ZGUvYysrL2JpdHMvdHlwZV90cmFpdHMuaCIgMSAzCiMgNTMgIi9ob21lL0FkbWluaXN0cmF0b3Iv Z2NjdGVzdGluZy9saWIvZ2NjLWxpYi9pNjg2LXBjLWN5Z3dpbi8zLjQvaW5jbHVkZS9jKysvYml0 cy90eXBlX3RyYWl0cy5oIiAzCiMgOTAgIi9ob21lL0FkbWluaXN0cmF0b3IvZ2NjdGVzdGluZy9s aWIvZ2NjLWxpYi9pNjg2LXBjLWN5Z3dpbi8zLjQvaW5jbHVkZS9jKysvYml0cy90eXBlX3RyYWl0 cy5oIiAzCnN0cnVjdCBfX3RydWVfdHlwZSB7fTsKc3RydWN0IF9fZmFsc2VfdHlwZSB7fTsKCnRl bXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBfX3R5cGVfdHJhaXRzIHsKICAgdHlwZWRlZiBfX3Ry dWVfdHlwZSB0aGlzX2R1bW15X21lbWJlcl9tdXN0X2JlX2ZpcnN0OwojIDExMyAiL2hvbWUvQWRt aW5pc3RyYXRvci9nY2N0ZXN0aW5nL2xpYi9nY2MtbGliL2k2ODYtcGMtY3lnd2luLzMuNC9pbmNs dWRlL2MrKy9iaXRzL3R5cGVfdHJhaXRzLmgiIDMKICAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUgaGFz X3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUgaGFz X3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUgaGFzX3Ry aXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUgaGFzX3Ry aXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUgaXNfUE9EX3R5cGU7Cn07 CgoKCgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPGJvb2w+IHsKICAgdHlwZWRlZiBf X3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9f dHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVl X3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVf dHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BP RF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czxjaGFyPiB7CiAgIHR5 cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlw ZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVm IF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYg X190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlw ZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8c2lnbmVk IGNoYXI+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0 cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0 b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRv cjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBl ZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBl X3RyYWl0czx1bnNpZ25lZCBjaGFyPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZp YWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlh bF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fz c2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVz dHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRl PD4gc3RydWN0IF9fdHlwZV90cmFpdHM8d2NoYXJfdD4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBl IGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUg aGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNf dHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190 cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07 Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPHNob3J0PiB7CiAgIHR5cGVkZWYgX190 cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3Ry dWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90 eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5 cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0Rf dHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8dW5zaWduZWQgc2hvcnQ+ IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9y OwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAg IHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAg dHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9f dHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0 czxpbnQ+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0 cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0 b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRv cjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBl ZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBl X3RyYWl0czx1bnNpZ25lZCBpbnQ+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlh bF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFs X2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNz aWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0 cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8 PiBzdHJ1Y3QgX190eXBlX3RyYWl0czxsb25nPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFz X3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNf dHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2 aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZp YWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRl bXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8dW5zaWduZWQgbG9uZz4gewogICB0eXBlZGVm IF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYg X190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3Ry dWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1 ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNf UE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPGxvbmcgbG9uZz4g ewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7 CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAg dHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0 eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190 cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRz PHVuc2lnbmVkIGxvbmcgbG9uZz4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFs X2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxf Y29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3Np Z25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3Ry dWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+ IHN0cnVjdCBfX3R5cGVfdHJhaXRzPGZsb2F0PiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFz X3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNf dHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2 aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZp YWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRl bXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8ZG91YmxlPiB7CiAgIHR5cGVkZWYgX190cnVl X3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVf dHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBl IGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUg aGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlw ZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8bG9uZyBkb3VibGU+IHsKICAg dHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0 eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVk ZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRl ZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90 eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IF9fdHlwZV90 cmFpdHM8X1RwKj4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRf Y29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25z dHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29w ZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAg IHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07CgoKCgoKdGVtcGxhdGUgPGNsYXNz IF9UcD4gc3RydWN0IF9Jc19pbnRlZ2VyIHsKICB0eXBlZGVmIF9fZmFsc2VfdHlwZSBfSW50ZWdy YWw7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjxib29sPiB7CiAgdHlwZWRlZiBf X3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjxj aGFyPiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+IHN0 cnVjdCBfSXNfaW50ZWdlcjxzaWduZWQgY2hhcj4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0lu dGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8dW5zaWduZWQgY2hhcj4g ewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3Qg X0lzX2ludGVnZXI8d2NoYXJfdD4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9 OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8c2hvcnQ+IHsKICB0eXBlZGVmIF9fdHJ1 ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9Jc19pbnRlZ2VyPHVuc2ln bmVkIHNob3J0PiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0 ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjxpbnQ+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRl Z3JhbDsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9Jc19pbnRlZ2VyPHVuc2lnbmVkIGludD4gewog IHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lz X2ludGVnZXI8bG9uZz4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVt cGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8dW5zaWduZWQgbG9uZz4gewogIHR5cGVkZWYgX190 cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8bG9u ZyBsb25nPiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+ IHN0cnVjdCBfSXNfaW50ZWdlcjx1bnNpZ25lZCBsb25nIGxvbmc+IHsKICB0eXBlZGVmIF9fdHJ1 ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gc3RydWN0IF9Jc19u b3JtYWxfaXRlcmF0b3IgewogICB0eXBlZGVmIF9fZmFsc2VfdHlwZSBfTm9ybWFsOwp9OwoKCm5h bWVzcGFjZSBfX2dudV9jeHgKewogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvciwgdHlwZW5h bWUgX0NvbnRhaW5lcj4gY2xhc3MgX19ub3JtYWxfaXRlcmF0b3I7Cn0KCnRlbXBsYXRlPHR5cGVu YW1lIF9JdGVyYXRvciwgdHlwZW5hbWUgX0NvbnRhaW5lcj4Kc3RydWN0IF9Jc19ub3JtYWxfaXRl cmF0b3I8IF9fZ251X2N4eDo6X19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVy PiA+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBfTm9ybWFsOwp9OwojIDczICIvaG9tZS9BZG1p bmlzdHJhdG9yL2djY3Rlc3RpbmcvbGliL2djYy1saWIvaTY4Ni1wYy1jeWd3aW4vMy40L2luY2x1 ZGUvYysrL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDIgMwojIDEgIi9ob21lL0FkbWluaXN0cmF0b3Iv Z2NjdGVzdGluZy9saWIvZ2NjLWxpYi9pNjg2LXBjLWN5Z3dpbi8zLjQvaW5jbHVkZS9jKysvYml0 cy9zdGxfaXRlcmF0b3JfYmFzZV90eXBlcy5oIiAxIDMKIyA2OCAiL2hvbWUvQWRtaW5pc3RyYXRv ci9nY2N0ZXN0aW5nL2xpYi9nY2MtbGliL2k2ODYtcGMtY3lnd2luLzMuNC9pbmNsdWRlL2MrKy9i aXRzL3N0bF9pdGVyYXRvcl9iYXNlX3R5cGVzLmgiIDMKCm5hbWVzcGFjZSBzdGQKewojIDgwICIv aG9tZS9BZG1pbmlzdHJhdG9yL2djY3Rlc3RpbmcvbGliL2djYy1saWIvaTY4Ni1wYy1jeWd3aW4v My40L2luY2x1ZGUvYysrL2JpdHMvc3RsX2l0ZXJhdG9yX2Jhc2VfdHlwZXMuaCIgMwogIHN0cnVj dCBpbnB1dF9pdGVyYXRvcl90YWcge307CgogIHN0cnVjdCBvdXRwdXRfaXRlcmF0b3JfdGFnIHt9 OwoKICBzdHJ1Y3QgZm9yd2FyZF9pdGVyYXRvcl90YWcgOiBwdWJsaWMgaW5wdXRfaXRlcmF0b3Jf dGFnIHt9OwoKICBzdHJ1Y3QgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcgOiBwdWJsaWMgZm9y d2FyZF9pdGVyYXRvcl90YWcge307CgogIHN0cnVjdCByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3Rh ZyA6IHB1YmxpYyBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZyB7fTsKIyAxMDIgIi9ob21lL0Fk bWluaXN0cmF0b3IvZ2NjdGVzdGluZy9saWIvZ2NjLWxpYi9pNjg2LXBjLWN5Z3dpbi8zLjQvaW5j bHVkZS9jKysvYml0cy9zdGxfaXRlcmF0b3JfYmFzZV90eXBlcy5oIiAzCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0NhdGVnb3J5LCB0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9EaXN0YW5jZSA9IHB0cmRp ZmZfdCwKICAgICAgICAgICB0eXBlbmFtZSBfUG9pbnRlciA9IF9UcCosIHR5cGVuYW1lIF9SZWZl cmVuY2UgPSBfVHAmPgogICAgc3RydWN0IGl0ZXJhdG9yCiAgICB7CgogICAgICB0eXBlZGVmIF9D YXRlZ29yeSBpdGVyYXRvcl9jYXRlZ29yeTsKCiAgICAgIHR5cGVkZWYgX1RwIHZhbHVlX3R5cGU7 CgogICAgICB0eXBlZGVmIF9EaXN0YW5jZSBkaWZmZXJlbmNlX3R5cGU7CgogICAgICB0eXBlZGVm IF9Qb2ludGVyIHBvaW50ZXI7CgogICAgICB0eXBlZGVmIF9SZWZlcmVuY2UgcmVmZXJlbmNlOwog ICAgfTsKCgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yPgogICAgc3RydWN0IGl0 ZXJhdG9yX3RyYWl0cyB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0l0ZXJhdG9yOjppdGVyYXRv cl9jYXRlZ29yeSBpdGVyYXRvcl9jYXRlZ29yeTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSXRl cmF0b3I6OnZhbHVlX3R5cGUgdmFsdWVfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSXRl cmF0b3I6OmRpZmZlcmVuY2VfdHlwZSBkaWZmZXJlbmNlX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlw ZW5hbWUgX0l0ZXJhdG9yOjpwb2ludGVyIHBvaW50ZXI7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUg X0l0ZXJhdG9yOjpyZWZlcmVuY2UgcmVmZXJlbmNlOwogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5h bWUgX1RwPgogICAgc3RydWN0IGl0ZXJhdG9yX3RyYWl0czxfVHAqPiB7CiAgICAgIHR5cGVkZWYg cmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgICAgIHR5cGVk ZWYgX1RwIHZhbHVlX3R5cGU7CiAgICAgIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2VfdHlw ZTsKICAgICAgdHlwZWRlZiBfVHAqIHBvaW50ZXI7CiAgICAgIHR5cGVkZWYgX1RwJiByZWZlcmVu Y2U7CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBzdHJ1Y3QgaXRlcmF0b3Jf dHJhaXRzPGNvbnN0IF9UcCo+IHsKICAgICAgdHlwZWRlZiByYW5kb21fYWNjZXNzX2l0ZXJhdG9y X3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKICAgICAgdHlwZWRlZiBfVHAgdmFsdWVfdHlwZTsKICAg ICAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwogICAgICB0eXBlZGVmIGNvbnN0 IF9UcCogcG9pbnRlcjsKICAgICAgdHlwZWRlZiBjb25zdCBfVHAmIHJlZmVyZW5jZTsKICAgIH07 CgoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyPgogICAgaW5saW5lIHR5cGVuYW1lIGl0 ZXJhdG9yX3RyYWl0czxfSXRlcj46Oml0ZXJhdG9yX2NhdGVnb3J5CiAgICBfX2l0ZXJhdG9yX2Nh dGVnb3J5KGNvbnN0IF9JdGVyJikKICAgIHsgcmV0dXJuIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0 czxfSXRlcj46Oml0ZXJhdG9yX2NhdGVnb3J5KCk7IH0KCn0KIyA3NCAiL2hvbWUvQWRtaW5pc3Ry YXRvci9nY2N0ZXN0aW5nL2xpYi9nY2MtbGliL2k2ODYtcGMtY3lnd2luLzMuNC9pbmNsdWRlL2Mr Ky9iaXRzL3N0bF9hbGdvYmFzZS5oIiAyIDMKIyAxICIvaG9tZS9BZG1pbmlzdHJhdG9yL2djY3Rl c3RpbmcvbGliL2djYy1saWIvaTY4Ni1wYy1jeWd3aW4vMy40L2luY2x1ZGUvYysrL2JpdHMvc3Rs X2l0ZXJhdG9yX2Jhc2VfZnVuY3MuaCIgMSAzCiMgNjggIi9ob21lL0FkbWluaXN0cmF0b3IvZ2Nj dGVzdGluZy9saWIvZ2NjLWxpYi9pNjg2LXBjLWN5Z3dpbi8zLjQvaW5jbHVkZS9jKysvYml0cy9z dGxfaXRlcmF0b3JfYmFzZV9mdW5jcy5oIiAzCiMgMSAiL2hvbWUvQWRtaW5pc3RyYXRvci9nY2N0 ZXN0aW5nL2xpYi9nY2MtbGliL2k2ODYtcGMtY3lnd2luLzMuNC9pbmNsdWRlL2MrKy9iaXRzL2Nv bmNlcHRfY2hlY2suaCIgMSAzCiMgMzkgIi9ob21lL0FkbWluaXN0cmF0b3IvZ2NjdGVzdGluZy9s aWIvZ2NjLWxpYi9pNjg2LXBjLWN5Z3dpbi8zLjQvaW5jbHVkZS9jKysvYml0cy9jb25jZXB0X2No ZWNrLmgiIDMKIyA2OSAiL2hvbWUvQWRtaW5pc3RyYXRvci9nY2N0ZXN0aW5nL2xpYi9nY2MtbGli L2k2ODYtcGMtY3lnd2luLzMuNC9pbmNsdWRlL2MrKy9iaXRzL3N0bF9pdGVyYXRvcl9iYXNlX2Z1 bmNzLmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRl cmF0b3I+CiAgICBpbmxpbmUgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXJhdG9y Pjo6ZGlmZmVyZW5jZV90eXBlCiAgICBfX2Rpc3RhbmNlKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3Qs IF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFn KQogICAgewoKICAgICAKCiAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVy YXRvcj46OmRpZmZlcmVuY2VfdHlwZSBfX24gPSAwOwogICAgICB3aGlsZSAoX19maXJzdCAhPSBf X2xhc3QpIHsKICAgICAgICArK19fZmlyc3Q7ICsrX19uOwogICAgICB9CiAgICAgIHJldHVybiBf X247CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvcj4KICAg IGlubGluZSB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6 ZGlmZmVyZW5jZV90eXBlCiAgICBfX2Rpc3RhbmNlKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2Zp cnN0LCBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICByYW5kb21f YWNjZXNzX2l0ZXJhdG9yX3RhZykKICAgIHsKCiAgICAgCiAgICAgIHJldHVybiBfX2xhc3QgLSBf X2ZpcnN0OwogICAgfQojIDEwOSAiL2hvbWUvQWRtaW5pc3RyYXRvci9nY2N0ZXN0aW5nL2xpYi9n Y2MtbGliL2k2ODYtcGMtY3lnd2luLzMuNC9pbmNsdWRlL2MrKy9iaXRzL3N0bF9pdGVyYXRvcl9i YXNlX2Z1bmNzLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcj4KICAgIGlu bGluZSB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcmF0b3I+OjpkaWZmZXJlbmNl X3R5cGUKICAgIGRpc3RhbmNlKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9y IF9fbGFzdCkKICAgIHsKCiAgICAgIHJldHVybiBfX2Rpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCwg X19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1l IF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9EaXN0YW5jZT4KICAgIGlubGluZSB2b2lkCiAgICBfX2Fk dmFuY2UoX0lucHV0SXRlciYgX19pLCBfRGlzdGFuY2UgX19uLCBpbnB1dF9pdGVyYXRvcl90YWcp CiAgICB7CgogICAgIAogICAgICB3aGlsZSAoX19uLS0pICsrX19pOwogICAgfQoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yLCB0eXBlbmFtZSBfRGlzdGFuY2U+CiAg ICBpbmxpbmUgdm9pZAogICAgX19hZHZhbmNlKF9CaWRpcmVjdGlvbmFsSXRlcmF0b3ImIF9faSwg X0Rpc3RhbmNlIF9fbiwKICAgICAgICAgICAgICBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZykK ICAgIHsKCiAgICAgCgogICAgICBpZiAoX19uID4gMCkKICAgICAgICB3aGlsZSAoX19uLS0pICsr X19pOwogICAgICBlbHNlCiAgICAgICAgd2hpbGUgKF9fbisrKSAtLV9faTsKICAgIH0KCiAgdGVt cGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCB0eXBlbmFtZSBfRGlzdGFuY2U+ CiAgICBpbmxpbmUgdm9pZAogICAgX19hZHZhbmNlKF9SYW5kb21BY2Nlc3NJdGVyYXRvciYgX19p LCBfRGlzdGFuY2UgX19uLAogICAgICAgICAgICAgIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFn KQogICAgewoKICAgICAKICAgICAgX19pICs9IF9fbjsKICAgIH0KIyAxNjIgIi9ob21lL0FkbWlu aXN0cmF0b3IvZ2NjdGVzdGluZy9saWIvZ2NjLWxpYi9pNjg2LXBjLWN5Z3dpbi8zLjQvaW5jbHVk ZS9jKysvYml0cy9zdGxfaXRlcmF0b3JfYmFzZV9mdW5jcy5oIiAzCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0lucHV0SXRlcmF0b3IsIHR5cGVuYW1lIF9EaXN0YW5jZT4KICAgIGlubGluZSB2b2lkCiAg ICBhZHZhbmNlKF9JbnB1dEl0ZXJhdG9yJiBfX2ksIF9EaXN0YW5jZSBfX24pCiAgICB7CgogICAg ICBfX2FkdmFuY2UoX19pLCBfX24sIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19pKSk7CiAgICB9Cn0K IyA3NSAiL2hvbWUvQWRtaW5pc3RyYXRvci9nY2N0ZXN0aW5nL2xpYi9nY2MtbGliL2k2ODYtcGMt Y3lnd2luLzMuNC9pbmNsdWRlL2MrKy9iaXRzL3N0bF9hbGdvYmFzZS5oIiAyIDMKIyAxICIvaG9t ZS9BZG1pbmlzdHJhdG9yL2djY3Rlc3RpbmcvbGliL2djYy1saWIvaTY4Ni1wYy1jeWd3aW4vMy40 L2luY2x1ZGUvYysrL2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDEgMwojIDY4ICIvaG9tZS9BZG1pbmlz dHJhdG9yL2djY3Rlc3RpbmcvbGliL2djYy1saWIvaTY4Ni1wYy1jeWd3aW4vMy40L2luY2x1ZGUv YysrL2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDMKbmFtZXNwYWNlIHN0ZAp7CiMgODkgIi9ob21lL0Fk bWluaXN0cmF0b3IvZ2NjdGVzdGluZy9saWIvZ2NjLWxpYi9pNjg2LXBjLWN5Z3dpbi8zLjQvaW5j bHVkZS9jKysvYml0cy9zdGxfaXRlcmF0b3IuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVy YXRvcj4KICAgIGNsYXNzIHJldmVyc2VfaXRlcmF0b3IKICAgIDogcHVibGljIGl0ZXJhdG9yPHR5 cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+OjppdGVyYXRvcl9jYXRlZ29yeSwKICAg ICAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+Ojp2 YWx1ZV90eXBlLAogICAgICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRz PF9JdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZSwKICAgICAgICAgICAgICAgICAgICAgIHR5cGVu YW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+Ojpwb2ludGVyLAogICAgICAgICAgICAgICAg ICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OnJlZmVyZW5jZT4KICAg IHsKICAgIHByb3RlY3RlZDoKICAgICAgX0l0ZXJhdG9yIGN1cnJlbnQ7CgogICAgcHVibGljOgog ICAgICB0eXBlZGVmIF9JdGVyYXRvciBpdGVyYXRvcl90eXBlOwogICAgICB0eXBlZGVmIHR5cGVu YW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlm ZmVyZW5jZV90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRl cmF0b3I+OjpyZWZlcmVuY2UgcmVmZXJlbmNlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJh dG9yX3RyYWl0czxfSXRlcmF0b3I+Ojpwb2ludGVyIHBvaW50ZXI7CgogICAgcHVibGljOgoKCgog ICAgICByZXZlcnNlX2l0ZXJhdG9yKCkgeyB9CgoKCgogICAgICBleHBsaWNpdAogICAgICByZXZl cnNlX2l0ZXJhdG9yKGl0ZXJhdG9yX3R5cGUgX194KSA6IGN1cnJlbnQoX194KSB7IH0KCgoKCiAg ICAgIHJldmVyc2VfaXRlcmF0b3IoY29uc3QgcmV2ZXJzZV9pdGVyYXRvciYgX194KQogICAgICA6 IGN1cnJlbnQoX194LmN1cnJlbnQpIHsgfQoKCgoKCiAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9J dGVyPgogICAgICAgIHJldmVyc2VfaXRlcmF0b3IoY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRl cj4mIF9feCkKICAgICAgICA6IGN1cnJlbnQoX194LmJhc2UoKSkgeyB9CgoKCgogICAgICBpdGVy YXRvcl90eXBlCiAgICAgIGJhc2UoKSBjb25zdCB7IHJldHVybiBjdXJyZW50OyB9CgoKCgoKCiAg ICAgIHJlZmVyZW5jZQogICAgICBvcGVyYXRvciooKSBjb25zdAogICAgICB7CiAgICAgICAgX0l0 ZXJhdG9yIF9fdG1wID0gY3VycmVudDsKICAgICAgICByZXR1cm4gKi0tX190bXA7CiAgICAgIH0K CgoKCgoKICAgICAgcG9pbnRlcgogICAgICBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4gJihv cGVyYXRvciooKSk7IH0KCgoKCgoKICAgICAgcmV2ZXJzZV9pdGVyYXRvciYKICAgICAgb3BlcmF0 b3IrKygpCiAgICAgIHsKICAgICAgICAtLWN1cnJlbnQ7CiAgICAgICAgcmV0dXJuICp0aGlzOwog ICAgICB9CgoKCgoKCiAgICAgIHJldmVyc2VfaXRlcmF0b3IKICAgICAgb3BlcmF0b3IrKyhpbnQp CiAgICAgIHsKICAgICAgICByZXZlcnNlX2l0ZXJhdG9yIF9fdG1wID0gKnRoaXM7CiAgICAgICAg LS1jdXJyZW50OwogICAgICAgIHJldHVybiBfX3RtcDsKICAgICAgfQoKCgoKCgogICAgICByZXZl cnNlX2l0ZXJhdG9yJgogICAgICBvcGVyYXRvci0tKCkKICAgICAgewogICAgICAgICsrY3VycmVu dDsKICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgIH0KCgoKCgoKICAgICAgcmV2ZXJzZV9pdGVy YXRvciBvcGVyYXRvci0tKGludCkKICAgICAgewogICAgICAgIHJldmVyc2VfaXRlcmF0b3IgX190 bXAgPSAqdGhpczsKICAgICAgICArK2N1cnJlbnQ7CiAgICAgICAgcmV0dXJuIF9fdG1wOwogICAg ICB9CgoKCgoKCiAgICAgIHJldmVyc2VfaXRlcmF0b3IKICAgICAgb3BlcmF0b3IrKGRpZmZlcmVu Y2VfdHlwZSBfX24pIGNvbnN0CiAgICAgIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IoY3VycmVu dCAtIF9fbik7IH0KCgoKCgoKICAgICAgcmV2ZXJzZV9pdGVyYXRvciYKICAgICAgb3BlcmF0b3Ir PShkaWZmZXJlbmNlX3R5cGUgX19uKQogICAgICB7CiAgICAgICAgY3VycmVudCAtPSBfX247CiAg ICAgICAgcmV0dXJuICp0aGlzOwogICAgICB9CgoKCgoKCiAgICAgIHJldmVyc2VfaXRlcmF0b3IK ICAgICAgb3BlcmF0b3ItKGRpZmZlcmVuY2VfdHlwZSBfX24pIGNvbnN0CiAgICAgIHsgcmV0dXJu IHJldmVyc2VfaXRlcmF0b3IoY3VycmVudCArIF9fbik7IH0KCgoKCgoKICAgICAgcmV2ZXJzZV9p dGVyYXRvciYKICAgICAgb3BlcmF0b3ItPShkaWZmZXJlbmNlX3R5cGUgX19uKQogICAgICB7CiAg ICAgICAgY3VycmVudCArPSBfX247CiAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICB9CgoKCgoK CiAgICAgIHJlZmVyZW5jZQogICAgICBvcGVyYXRvcltdKGRpZmZlcmVuY2VfdHlwZSBfX24pIGNv bnN0IHsgcmV0dXJuICooKnRoaXMgKyBfX24pOyB9CiAgICB9OwojIDI2OSAiL2hvbWUvQWRtaW5p c3RyYXRvci9nY2N0ZXN0aW5nL2xpYi9nY2MtbGliL2k2ODYtcGMtY3lnd2luLzMuNC9pbmNsdWRl L2MrKy9iaXRzL3N0bF9pdGVyYXRvci5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9y PgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPT0oY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxf SXRlcmF0b3I+JiBfX3gsCiAgICAgICAgICAgICAgIGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0 ZXJhdG9yPiYgX195KQogICAgeyByZXR1cm4gX194LmJhc2UoKSA9PSBfX3kuYmFzZSgpOyB9Cgog IHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvcj4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRv cjwoY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3gsCiAgICAgICAgICAgICAg Y29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3kpCiAgICB7IHJldHVybiBfX3ku YmFzZSgpIDwgX194LmJhc2UoKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3I+CiAg ICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3IhPShjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVy YXRvcj4mIF9feCwKICAgICAgICAgICAgICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0 b3I+JiBfX3kpCiAgICB7IHJldHVybiAhKF9feCA9PSBfX3kpOyB9CgogIHRlbXBsYXRlPHR5cGVu YW1lIF9JdGVyYXRvcj4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj4oY29uc3QgcmV2ZXJz ZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3gsCiAgICAgICAgICAgICAgY29uc3QgcmV2ZXJzZV9p dGVyYXRvcjxfSXRlcmF0b3I+JiBfX3kpCiAgICB7IHJldHVybiBfX3kgPCBfX3g7IH0KCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPD0o Y29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3gsCiAgICAgICAgICAgICAgICBj b25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feSkKICAgIHsgcmV0dXJuICEoX195 IDwgX194KTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3I+CiAgICBpbmxpbmUgYm9v bAogICAgb3BlcmF0b3I+PShjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feCwK ICAgICAgICAgICAgICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3kpCiAg ICB7IHJldHVybiAhKF9feCA8IF9feSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9y PgogICAgaW5saW5lIHR5cGVuYW1lIHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPjo6ZGlmZmVy ZW5jZV90eXBlCiAgICBvcGVyYXRvci0oY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+ JiBfX3gsCiAgICAgICAgICAgICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBf X3kpCiAgICB7IHJldHVybiBfX3kuYmFzZSgpIC0gX194LmJhc2UoKTsgfQoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfSXRlcmF0b3I+CiAgICBpbmxpbmUgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+ CiAgICBvcGVyYXRvcisodHlwZW5hbWUgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+OjpkaWZm ZXJlbmNlX3R5cGUgX19uLAogICAgICAgICAgICAgIGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0 ZXJhdG9yPiYgX194KQogICAgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+KF9f eC5iYXNlKCkgLSBfX24pOyB9CiMgMzI5ICIvaG9tZS9BZG1pbmlzdHJhdG9yL2djY3Rlc3Rpbmcv bGliL2djYy1saWIvaTY4Ni1wYy1jeWd3aW4vMy40L2luY2x1ZGUvYysrL2JpdHMvc3RsX2l0ZXJh dG9yLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ29udGFpbmVyPgogICAgY2xhc3MgYmFja19p bnNlcnRfaXRlcmF0b3IKICAgIDogcHVibGljIGl0ZXJhdG9yPG91dHB1dF9pdGVyYXRvcl90YWcs IHZvaWQsIHZvaWQsIHZvaWQsIHZvaWQ+CiAgICB7CiAgICBwcm90ZWN0ZWQ6CiAgICAgIF9Db250 YWluZXIqIGNvbnRhaW5lcjsKCiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9Db250YWluZXIg Y29udGFpbmVyX3R5cGU7CgoKICAgICAgZXhwbGljaXQKICAgICAgYmFja19pbnNlcnRfaXRlcmF0 b3IoX0NvbnRhaW5lciYgX194KSA6IGNvbnRhaW5lcigmX194KSB7IH0KIyAzNTUgIi9ob21lL0Fk bWluaXN0cmF0b3IvZ2NjdGVzdGluZy9saWIvZ2NjLWxpYi9pNjg2LXBjLWN5Z3dpbi8zLjQvaW5j bHVkZS9jKysvYml0cy9zdGxfaXRlcmF0b3IuaCIgMwogICAgICBiYWNrX2luc2VydF9pdGVyYXRv ciYKICAgICAgb3BlcmF0b3I9KHR5cGVuYW1lIF9Db250YWluZXI6OmNvbnN0X3JlZmVyZW5jZSBf X3ZhbHVlKQogICAgICB7CiAgICAgICAgY29udGFpbmVyLT5wdXNoX2JhY2soX192YWx1ZSk7CiAg ICAgICAgcmV0dXJuICp0aGlzOwogICAgICB9CgoKICAgICAgYmFja19pbnNlcnRfaXRlcmF0b3Im CiAgICAgIG9wZXJhdG9yKigpIHsgcmV0dXJuICp0aGlzOyB9CgoKICAgICAgYmFja19pbnNlcnRf aXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yKysoKSB7IHJldHVybiAqdGhpczsgfQoKCiAgICAgIGJh Y2tfaW5zZXJ0X2l0ZXJhdG9yCiAgICAgIG9wZXJhdG9yKysoaW50KSB7IHJldHVybiAqdGhpczsg fQogICAgfTsKIyAzODYgIi9ob21lL0FkbWluaXN0cmF0b3IvZ2NjdGVzdGluZy9saWIvZ2NjLWxp Yi9pNjg2LXBjLWN5Z3dpbi8zLjQvaW5jbHVkZS9jKysvYml0cy9zdGxfaXRlcmF0b3IuaCIgMwog IHRlbXBsYXRlPHR5cGVuYW1lIF9Db250YWluZXI+CiAgICBpbmxpbmUgYmFja19pbnNlcnRfaXRl cmF0b3I8X0NvbnRhaW5lcj4KICAgIGJhY2tfaW5zZXJ0ZXIoX0NvbnRhaW5lciYgX194KQogICAg eyByZXR1cm4gYmFja19pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4oX194KTsgfQojIDQwMSAi L2hvbWUvQWRtaW5pc3RyYXRvci9nY2N0ZXN0aW5nL2xpYi9nY2MtbGliL2k2ODYtcGMtY3lnd2lu LzMuNC9pbmNsdWRlL2MrKy9iaXRzL3N0bF9pdGVyYXRvci5oIiAzCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0NvbnRhaW5lcj4KICAgIGNsYXNzIGZyb250X2luc2VydF9pdGVyYXRvcgogICAgOiBwdWJs aWMgaXRlcmF0b3I8b3V0cHV0X2l0ZXJhdG9yX3RhZywgdm9pZCwgdm9pZCwgdm9pZCwgdm9pZD4K ICAgIHsKICAgIHByb3RlY3RlZDoKICAgICAgX0NvbnRhaW5lciogY29udGFpbmVyOwoKICAgIHB1 YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NvbnRhaW5lciBjb250YWluZXJfdHlwZTsKCgogICAgICBl eHBsaWNpdCBmcm9udF9pbnNlcnRfaXRlcmF0b3IoX0NvbnRhaW5lciYgX194KSA6IGNvbnRhaW5l cigmX194KSB7IH0KIyA0MjYgIi9ob21lL0FkbWluaXN0cmF0b3IvZ2NjdGVzdGluZy9saWIvZ2Nj LWxpYi9pNjg2LXBjLWN5Z3dpbi8zLjQvaW5jbHVkZS9jKysvYml0cy9zdGxfaXRlcmF0b3IuaCIg MwogICAgICBmcm9udF9pbnNlcnRfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yPSh0eXBlbmFtZSBf Q29udGFpbmVyOjpjb25zdF9yZWZlcmVuY2UgX192YWx1ZSkKICAgICAgewogICAgICAgIGNvbnRh aW5lci0+cHVzaF9mcm9udChfX3ZhbHVlKTsKICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgIH0K CgogICAgICBmcm9udF9pbnNlcnRfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yKigpIHsgcmV0dXJu ICp0aGlzOyB9CgoKICAgICAgZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yJgogICAgICBvcGVyYXRvcisr KCkgeyByZXR1cm4gKnRoaXM7IH0KCgogICAgICBmcm9udF9pbnNlcnRfaXRlcmF0b3IKICAgICAg b3BlcmF0b3IrKyhpbnQpIHsgcmV0dXJuICp0aGlzOyB9CiAgICB9OwojIDQ1NyAiL2hvbWUvQWRt aW5pc3RyYXRvci9nY2N0ZXN0aW5nL2xpYi9nY2MtbGliL2k2ODYtcGMtY3lnd2luLzMuNC9pbmNs dWRlL2MrKy9iaXRzL3N0bF9pdGVyYXRvci5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NvbnRh aW5lcj4KICAgIGlubGluZSBmcm9udF9pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4KICAgIGZy b250X2luc2VydGVyKF9Db250YWluZXImIF9feCkKICAgIHsgcmV0dXJuIGZyb250X2luc2VydF9p dGVyYXRvcjxfQ29udGFpbmVyPihfX3gpOyB9CiMgNDc2ICIvaG9tZS9BZG1pbmlzdHJhdG9yL2dj Y3Rlc3RpbmcvbGliL2djYy1saWIvaTY4Ni1wYy1jeWd3aW4vMy40L2luY2x1ZGUvYysrL2JpdHMv c3RsX2l0ZXJhdG9yLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ29udGFpbmVyPgogICAgY2xh c3MgaW5zZXJ0X2l0ZXJhdG9yCiAgICA6IHB1YmxpYyBpdGVyYXRvcjxvdXRwdXRfaXRlcmF0b3Jf dGFnLCB2b2lkLCB2b2lkLCB2b2lkLCB2b2lkPgogICAgewogICAgcHJvdGVjdGVkOgogICAgICBf Q29udGFpbmVyKiBjb250YWluZXI7CiAgICAgIHR5cGVuYW1lIF9Db250YWluZXI6Oml0ZXJhdG9y IGl0ZXI7CgogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfQ29udGFpbmVyIGNvbnRhaW5lcl90 eXBlOwoKCgoKCiAgICAgIGluc2VydF9pdGVyYXRvcihfQ29udGFpbmVyJiBfX3gsIHR5cGVuYW1l IF9Db250YWluZXI6Oml0ZXJhdG9yIF9faSkKICAgICAgOiBjb250YWluZXIoJl9feCksIGl0ZXIo X19pKSB7fQojIDUxOCAiL2hvbWUvQWRtaW5pc3RyYXRvci9nY2N0ZXN0aW5nL2xpYi9nY2MtbGli L2k2ODYtcGMtY3lnd2luLzMuNC9pbmNsdWRlL2MrKy9iaXRzL3N0bF9pdGVyYXRvci5oIiAzCiAg ICAgIGluc2VydF9pdGVyYXRvciYKICAgICAgb3BlcmF0b3I9KGNvbnN0IHR5cGVuYW1lIF9Db250 YWluZXI6OmNvbnN0X3JlZmVyZW5jZSBfX3ZhbHVlKQogICAgICB7CiAgICAgICAgaXRlciA9IGNv bnRhaW5lci0+aW5zZXJ0KGl0ZXIsIF9fdmFsdWUpOwogICAgICAgICsraXRlcjsKICAgICAgICBy ZXR1cm4gKnRoaXM7CiAgICAgIH0KCgogICAgICBpbnNlcnRfaXRlcmF0b3ImCiAgICAgIG9wZXJh dG9yKigpIHsgcmV0dXJuICp0aGlzOyB9CgoKICAgICAgaW5zZXJ0X2l0ZXJhdG9yJgogICAgICBv cGVyYXRvcisrKCkgeyByZXR1cm4gKnRoaXM7IH0KCgogICAgICBpbnNlcnRfaXRlcmF0b3ImCiAg ICAgIG9wZXJhdG9yKysoaW50KSB7IHJldHVybiAqdGhpczsgfQogICAgfTsKIyA1NTAgIi9ob21l L0FkbWluaXN0cmF0b3IvZ2NjdGVzdGluZy9saWIvZ2NjLWxpYi9pNjg2LXBjLWN5Z3dpbi8zLjQv aW5jbHVkZS9jKysvYml0cy9zdGxfaXRlcmF0b3IuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9D b250YWluZXIsIHR5cGVuYW1lIF9JdGVyYXRvcj4KICAgIGlubGluZSBpbnNlcnRfaXRlcmF0b3I8 X0NvbnRhaW5lcj4KICAgIGluc2VydGVyKF9Db250YWluZXImIF9feCwgX0l0ZXJhdG9yIF9faSkK ICAgIHsKICAgICAgcmV0dXJuIGluc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPihfX3gsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgX0NvbnRhaW5lcjo6 aXRlcmF0b3IoX19pKSk7CiAgICB9Cn0KCm5hbWVzcGFjZSBfX2dudV9jeHgKewoKCgoKCgoKICB1 c2luZyBzdGQ6Oml0ZXJhdG9yX3RyYWl0czsKICB1c2luZyBzdGQ6Oml0ZXJhdG9yOwogIHRlbXBs YXRlPHR5cGVuYW1lIF9JdGVyYXRvciwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KICAgIGNsYXNzIF9f bm9ybWFsX2l0ZXJhdG9yCiAgICAgIDogcHVibGljIGl0ZXJhdG9yPHR5cGVuYW1lIGl0ZXJhdG9y X3RyYWl0czxfSXRlcmF0b3I+OjppdGVyYXRvcl9jYXRlZ29yeSwKICAgICAgICAgICAgICAgICAg ICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OnZhbHVlX3R5cGUsCiAg ICAgICAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+ OjpkaWZmZXJlbmNlX3R5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIGl0ZXJh dG9yX3RyYWl0czxfSXRlcmF0b3I+Ojpwb2ludGVyLAogICAgICAgICAgICAgICAgICAgICAgICB0 eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6cmVmZXJlbmNlPgogICAgewogICAg cHJvdGVjdGVkOgogICAgICBfSXRlcmF0b3IgX01fY3VycmVudDsKCiAgICBwdWJsaWM6CiAgICAg IHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OmRpZmZlcmVuY2Vf dHlwZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBkaWZmZXJlbmNlX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0 b3JfdHJhaXRzPF9JdGVyYXRvcj46OnJlZmVyZW5jZSByZWZlcmVuY2U7CiAgICAgIHR5cGVkZWYg dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OnBvaW50ZXIgcG9pbnRlcjsKCiAg ICAgIF9fbm9ybWFsX2l0ZXJhdG9yKCkgOiBfTV9jdXJyZW50KF9JdGVyYXRvcigpKSB7IH0KCiAg ICAgIGV4cGxpY2l0CiAgICAgIF9fbm9ybWFsX2l0ZXJhdG9yKGNvbnN0IF9JdGVyYXRvciYgX19p KSA6IF9NX2N1cnJlbnQoX19pKSB7IH0KCgogICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcj4K ICAgICAgaW5saW5lIF9fbm9ybWFsX2l0ZXJhdG9yKGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9J dGVyLCBfQ29udGFpbmVyPiYgX19pKQogICAgICAgIDogX01fY3VycmVudChfX2kuYmFzZSgpKSB7 IH0KCgogICAgICByZWZlcmVuY2UKICAgICAgb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4gKl9N X2N1cnJlbnQ7IH0KCiAgICAgIHBvaW50ZXIKICAgICAgb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0 dXJuIF9NX2N1cnJlbnQ7IH0KCiAgICAgIF9fbm9ybWFsX2l0ZXJhdG9yJgogICAgICBvcGVyYXRv cisrKCkgeyArK19NX2N1cnJlbnQ7IHJldHVybiAqdGhpczsgfQoKICAgICAgX19ub3JtYWxfaXRl cmF0b3IKICAgICAgb3BlcmF0b3IrKyhpbnQpIHsgcmV0dXJuIF9fbm9ybWFsX2l0ZXJhdG9yKF9N X2N1cnJlbnQrKyk7IH0KCgogICAgICBfX25vcm1hbF9pdGVyYXRvciYKICAgICAgb3BlcmF0b3It LSgpIHsgLS1fTV9jdXJyZW50OyByZXR1cm4gKnRoaXM7IH0KCiAgICAgIF9fbm9ybWFsX2l0ZXJh dG9yCiAgICAgIG9wZXJhdG9yLS0oaW50KSB7IHJldHVybiBfX25vcm1hbF9pdGVyYXRvcihfTV9j dXJyZW50LS0pOyB9CgoKICAgICAgcmVmZXJlbmNlCiAgICAgIG9wZXJhdG9yW10oY29uc3QgZGlm ZmVyZW5jZV90eXBlJiBfX24pIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX2N1cnJlbnRbX19uXTsg fQoKICAgICAgX19ub3JtYWxfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yKz0oY29uc3QgZGlmZmVy ZW5jZV90eXBlJiBfX24pCiAgICAgIHsgX01fY3VycmVudCArPSBfX247IHJldHVybiAqdGhpczsg fQoKICAgICAgX19ub3JtYWxfaXRlcmF0b3IKICAgICAgb3BlcmF0b3IrKGNvbnN0IGRpZmZlcmVu Y2VfdHlwZSYgX19uKSBjb25zdAogICAgICB7IHJldHVybiBfX25vcm1hbF9pdGVyYXRvcihfTV9j dXJyZW50ICsgX19uKTsgfQoKICAgICAgX19ub3JtYWxfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9y LT0oY29uc3QgZGlmZmVyZW5jZV90eXBlJiBfX24pCiAgICAgIHsgX01fY3VycmVudCAtPSBfX247 IHJldHVybiAqdGhpczsgfQoKICAgICAgX19ub3JtYWxfaXRlcmF0b3IKICAgICAgb3BlcmF0b3It KGNvbnN0IGRpZmZlcmVuY2VfdHlwZSYgX19uKSBjb25zdAogICAgICB7IHJldHVybiBfX25vcm1h bF9pdGVyYXRvcihfTV9jdXJyZW50IC0gX19uKTsgfQoKICAgICAgY29uc3QgX0l0ZXJhdG9yJgog ICAgICBiYXNlKCkgY29uc3QgeyByZXR1cm4gX01fY3VycmVudDsgfQogICAgfTsKIyA2NTEgIi9o b21lL0FkbWluaXN0cmF0b3IvZ2NjdGVzdGluZy9saWIvZ2NjLWxpYi9pNjg2LXBjLWN5Z3dpbi8z LjQvaW5jbHVkZS9jKysvYml0cy9zdGxfaXRlcmF0b3IuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1l IF9JdGVyYXRvckwsIHR5cGVuYW1lIF9JdGVyYXRvclIsIHR5cGVuYW1lIF9Db250YWluZXI+CiAg aW5saW5lIGJvb2wKICBvcGVyYXRvcj09KGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRv ckwsIF9Db250YWluZXI+JiBfX2xocywKICAgICAgICAgICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJh dG9yPF9JdGVyYXRvclIsIF9Db250YWluZXI+JiBfX3JocykKICB7IHJldHVybiBfX2xocy5iYXNl KCkgPT0gX19yaHMuYmFzZSgpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvciwgdHlw ZW5hbWUgX0NvbnRhaW5lcj4KICBpbmxpbmUgYm9vbAogIG9wZXJhdG9yPT0oY29uc3QgX19ub3Jt YWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPiYgX19saHMsCiAgICAgICAgICAgICBj b25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWluZXI+JiBfX3JocykKICB7 IHJldHVybiBfX2xocy5iYXNlKCkgPT0gX19yaHMuYmFzZSgpOyB9CgogIHRlbXBsYXRlPHR5cGVu YW1lIF9JdGVyYXRvckwsIHR5cGVuYW1lIF9JdGVyYXRvclIsIHR5cGVuYW1lIF9Db250YWluZXI+ CiAgaW5saW5lIGJvb2wKICBvcGVyYXRvciE9KGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVy YXRvckwsIF9Db250YWluZXI+JiBfX2xocywKICAgICAgICAgICAgIGNvbnN0IF9fbm9ybWFsX2l0 ZXJhdG9yPF9JdGVyYXRvclIsIF9Db250YWluZXI+JiBfX3JocykKICB7IHJldHVybiBfX2xocy5i YXNlKCkgIT0gX19yaHMuYmFzZSgpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvciwg dHlwZW5hbWUgX0NvbnRhaW5lcj4KICBpbmxpbmUgYm9vbAogIG9wZXJhdG9yIT0oY29uc3QgX19u b3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPiYgX19saHMsCiAgICAgICAgICAg ICBjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWluZXI+JiBfX3JocykK ICB7IHJldHVybiBfX2xocy5iYXNlKCkgIT0gX19yaHMuYmFzZSgpOyB9CgoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfSXRlcmF0b3JMLCB0eXBlbmFtZSBfSXRlcmF0b3JSLCB0eXBlbmFtZSBfQ29udGFp bmVyPgogIGlubGluZSBib29sCiAgb3BlcmF0b3I8KGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9J dGVyYXRvckwsIF9Db250YWluZXI+JiBfX2xocywKICAgICAgICAgICAgY29uc3QgX19ub3JtYWxf aXRlcmF0b3I8X0l0ZXJhdG9yUiwgX0NvbnRhaW5lcj4mIF9fcmhzKQogIHsgcmV0dXJuIF9fbGhz LmJhc2UoKSA8IF9fcmhzLmJhc2UoKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3Is IHR5cGVuYW1lIF9Db250YWluZXI+CiAgaW5saW5lIGJvb2wKICBvcGVyYXRvcjwoY29uc3QgX19u b3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPiYgX19saHMsCiAgICAgICAgICAg ICBjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWluZXI+JiBfX3JocykK ICB7IHJldHVybiBfX2xocy5iYXNlKCkgPCBfX3Jocy5iYXNlKCk7IH0KCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0l0ZXJhdG9yTCwgdHlwZW5hbWUgX0l0ZXJhdG9yUiwgdHlwZW5hbWUgX0NvbnRhaW5l cj4KICBpbmxpbmUgYm9vbAogIG9wZXJhdG9yPihjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRl cmF0b3JMLCBfQ29udGFpbmVyPiYgX19saHMsCiAgICAgICAgICAgIGNvbnN0IF9fbm9ybWFsX2l0 ZXJhdG9yPF9JdGVyYXRvclIsIF9Db250YWluZXI+JiBfX3JocykKICB7IHJldHVybiBfX2xocy5i YXNlKCkgPiBfX3Jocy5iYXNlKCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yLCB0 eXBlbmFtZSBfQ29udGFpbmVyPgogIGlubGluZSBib29sCiAgb3BlcmF0b3I+KGNvbnN0IF9fbm9y bWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwgX0NvbnRhaW5lcj4mIF9fbGhzLAogICAgICAgICAgICBj b25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWluZXI+JiBfX3JocykKICB7 IHJldHVybiBfX2xocy5iYXNlKCkgPiBfX3Jocy5iYXNlKCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0l0ZXJhdG9yTCwgdHlwZW5hbWUgX0l0ZXJhdG9yUiwgdHlwZW5hbWUgX0NvbnRhaW5lcj4K ICBpbmxpbmUgYm9vbAogIG9wZXJhdG9yPD0oY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJh dG9yTCwgX0NvbnRhaW5lcj4mIF9fbGhzLAogICAgICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRl cmF0b3I8X0l0ZXJhdG9yUiwgX0NvbnRhaW5lcj4mIF9fcmhzKQogIHsgcmV0dXJuIF9fbGhzLmJh c2UoKSA8PSBfX3Jocy5iYXNlKCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yLCB0 eXBlbmFtZSBfQ29udGFpbmVyPgogIGlubGluZSBib29sCiAgb3BlcmF0b3I8PShjb25zdCBfX25v cm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWluZXI+JiBfX2xocywKICAgICAgICAgICAg IGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwgX0NvbnRhaW5lcj4mIF9fcmhzKQog IHsgcmV0dXJuIF9fbGhzLmJhc2UoKSA8PSBfX3Jocy5iYXNlKCk7IH0KCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0l0ZXJhdG9yTCwgdHlwZW5hbWUgX0l0ZXJhdG9yUiwgdHlwZW5hbWUgX0NvbnRhaW5l cj4KICBpbmxpbmUgYm9vbAogIG9wZXJhdG9yPj0oY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0 ZXJhdG9yTCwgX0NvbnRhaW5lcj4mIF9fbGhzLAogICAgICAgICAgICAgY29uc3QgX19ub3JtYWxf aXRlcmF0b3I8X0l0ZXJhdG9yUiwgX0NvbnRhaW5lcj4mIF9fcmhzKQogIHsgcmV0dXJuIF9fbGhz LmJhc2UoKSA+PSBfX3Jocy5iYXNlKCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9y LCB0eXBlbmFtZSBfQ29udGFpbmVyPgogIGlubGluZSBib29sCiAgb3BlcmF0b3I+PShjb25zdCBf X25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWluZXI+JiBfX2xocywKICAgICAgICAg ICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwgX0NvbnRhaW5lcj4mIF9fcmhz KQogIHsgcmV0dXJuIF9fbGhzLmJhc2UoKSA+PSBfX3Jocy5iYXNlKCk7IH0KCgoKCgogIHRlbXBs YXRlPHR5cGVuYW1lIF9JdGVyYXRvckwsIHR5cGVuYW1lIF9JdGVyYXRvclIsIHR5cGVuYW1lIF9D b250YWluZXI+CiAgaW5saW5lIHR5cGVuYW1lIF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvckws IF9Db250YWluZXI+OjpkaWZmZXJlbmNlX3R5cGUKICBvcGVyYXRvci0oY29uc3QgX19ub3JtYWxf aXRlcmF0b3I8X0l0ZXJhdG9yTCwgX0NvbnRhaW5lcj4mIF9fbGhzLAogICAgICAgICAgICAgY29u c3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yUiwgX0NvbnRhaW5lcj4mIF9fcmhzKQogIHsg cmV0dXJuIF9fbGhzLmJhc2UoKSAtIF9fcmhzLmJhc2UoKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfSXRlcmF0b3IsIHR5cGVuYW1lIF9Db250YWluZXI+CiAgaW5saW5lIF9fbm9ybWFsX2l0ZXJh dG9yPF9JdGVyYXRvciwgX0NvbnRhaW5lcj4KICBvcGVyYXRvcisodHlwZW5hbWUgX19ub3JtYWxf aXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPjo6ZGlmZmVyZW5jZV90eXBlIF9fbiwKICAg ICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPiYg X19pKQogIHsgcmV0dXJuIF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwgX0NvbnRhaW5lcj4o X19pLmJhc2UoKSArIF9fbik7IH0KfQojIDc2ICIvaG9tZS9BZG1pbmlzdHJhdG9yL2djY3Rlc3Rp bmcvbGliL2djYy1saWIvaTY4Ni1wYy1jeWd3aW4vMy40L2luY2x1ZGUvYysrL2JpdHMvc3RsX2Fs Z29iYXNlLmgiIDIgMwoKCm5hbWVzcGFjZSBzdGQKewojIDkxICIvaG9tZS9BZG1pbmlzdHJhdG9y L2djY3Rlc3RpbmcvbGliL2djYy1saWIvaTY4Ni1wYy1jeWd3aW4vMy40L2luY2x1ZGUvYysrL2Jp dHMvc3RsX2FsZ29iYXNlLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIxLCB0 eXBlbmFtZSBfRm9yd2FyZEl0ZXIyPgogICAgaW5saW5lIHZvaWQKICAgIGl0ZXJfc3dhcChfRm9y d2FyZEl0ZXIxIF9fYSwgX0ZvcndhcmRJdGVyMiBfX2IpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlw ZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcjE+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5 cGUxOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXIy Pjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlMjsKCgogICAgIAogICAgIAogICAgIAogICAgIAoKICAg ICAgX1ZhbHVlVHlwZTEgX190bXAgPSAqX19hOwogICAgICAqX19hID0gKl9fYjsKICAgICAgKl9f YiA9IF9fdG1wOwogICAgfQojIDExOCAiL2hvbWUvQWRtaW5pc3RyYXRvci9nY2N0ZXN0aW5nL2xp Yi9nY2MtbGliL2k2ODYtcGMtY3lnd2luLzMuNC9pbmNsdWRlL2MrKy9iaXRzL3N0bF9hbGdvYmFz ZS5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW5saW5lIHZvaWQKICAgIHN3YXAo X1RwJiBfX2EsIF9UcCYgX19iKQogICAgewoKICAgICAKCiAgICAgIF9UcCBfX3RtcCA9IF9fYTsK ICAgICAgX19hID0gX19iOwogICAgICBfX2IgPSBfX3RtcDsKICAgIH0KIyAxNDYgIi9ob21lL0Fk bWluaXN0cmF0b3IvZ2NjdGVzdGluZy9saWIvZ2NjLWxpYi9pNjg2LXBjLWN5Z3dpbi8zLjQvaW5j bHVkZS9jKysvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4K ICAgIGlubGluZSBjb25zdCBfVHAmCiAgICBtaW4oY29uc3QgX1RwJiBfX2EsIGNvbnN0IF9UcCYg X19iKQogICAgewoKICAgICAKCiAgICAgIGlmIChfX2IgPCBfX2EpIHJldHVybiBfX2I7IHJldHVy biBfX2E7CiAgICB9CiMgMTY2ICIvaG9tZS9BZG1pbmlzdHJhdG9yL2djY3Rlc3RpbmcvbGliL2dj Yy1saWIvaTY4Ni1wYy1jeWd3aW4vMy40L2luY2x1ZGUvYysrL2JpdHMvc3RsX2FsZ29iYXNlLmgi IDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUgY29uc3QgX1RwJgogICAgbWF4 KGNvbnN0IF9UcCYgX19hLCBjb25zdCBfVHAmIF9fYikKICAgIHsKCiAgICAgCgogICAgICBpZiAo X19hIDwgX19iKSByZXR1cm4gX19iOyByZXR1cm4gX19hOwogICAgfQojIDE4NiAiL2hvbWUvQWRt aW5pc3RyYXRvci9nY2N0ZXN0aW5nL2xpYi9nY2MtbGliL2k2ODYtcGMtY3lnd2luLzMuNC9pbmNs dWRlL2MrKy9iaXRzL3N0bF9hbGdvYmFzZS5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0 eXBlbmFtZSBfQ29tcGFyZT4KICAgIGlubGluZSBjb25zdCBfVHAmCiAgICBtaW4oY29uc3QgX1Rw JiBfX2EsIGNvbnN0IF9UcCYgX19iLCBfQ29tcGFyZSBfX2NvbXApCiAgICB7CgogICAgICBpZiAo X19jb21wKF9fYiwgX19hKSkgcmV0dXJuIF9fYjsgcmV0dXJuIF9fYTsKICAgIH0KIyAyMDQgIi9o b21lL0FkbWluaXN0cmF0b3IvZ2NjdGVzdGluZy9saWIvZ2NjLWxpYi9pNjg2LXBjLWN5Z3dpbi8z LjQvaW5jbHVkZS9jKysvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1l IF9UcCwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBpbmxpbmUgY29uc3QgX1RwJgogICAgbWF4KGNv bnN0IF9UcCYgX19hLCBjb25zdCBfVHAmIF9fYiwgX0NvbXBhcmUgX19jb21wKQogICAgewoKICAg ICAgaWYgKF9fY29tcChfX2EsIF9fYikpIHJldHVybiBfX2I7IHJldHVybiBfX2E7CiAgICB9CiMg MjIxICIvaG9tZS9BZG1pbmlzdHJhdG9yL2djY3Rlc3RpbmcvbGliL2djYy1saWIvaTY4Ni1wYy1j eWd3aW4vMy40L2luY2x1ZGUvYysrL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4KICAgIGlubGluZSBfT3V0 cHV0SXRlcgogICAgX19jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3Qs CiAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgaW5wdXRfaXRlcmF0 b3JfdGFnKQogICAgewogICAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fcmVzdWx0 LCArK19fZmlyc3QpCiAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3Q7CiAgICAgIHJldHVybiBf X3Jlc3VsdDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5 cGVuYW1lIF9PdXRwdXRJdGVyPgogICAgaW5saW5lIF9PdXRwdXRJdGVyCiAgICBfX2NvcHkoX1Jh bmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAg ICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LAogICAgICAgICAgIHJhbmRvbV9hY2Nlc3NfaXRlcmF0 b3JfdGFnKQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFu ZG9tQWNjZXNzSXRlcj46OmRpZmZlcmVuY2VfdHlwZQogICAgICAgICAgX0Rpc3RhbmNlOwogICAg ICBmb3IgKF9EaXN0YW5jZSBfX24gPSBfX2xhc3QgLSBfX2ZpcnN0OyBfX24gPiAwOyAtLV9fbikg ewogICAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0OwogICAgICAgICsrX19maXJzdDsKICAgICAg ICArK19fcmVzdWx0OwogICAgICB9CiAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgIH0KCiAgdGVt cGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW5saW5lIF9UcCoKICAgIF9fY29weV90cml2aWFsKGNv bnN0IF9UcCogX19maXJzdCwgY29uc3QgX1RwKiBfX2xhc3QsIF9UcCogX19yZXN1bHQpCiAgICB7 CiAgICAgIG1lbW1vdmUoX19yZXN1bHQsIF9fZmlyc3QsIHNpemVvZihfVHApICogKF9fbGFzdCAt IF9fZmlyc3QpKTsKICAgICAgcmV0dXJuIF9fcmVzdWx0ICsgKF9fbGFzdCAtIF9fZmlyc3QpOwog ICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRl cj4KICAgIGlubGluZSBfT3V0cHV0SXRlcgogICAgX19jb3B5X2F1eDIoX0lucHV0SXRlciBfX2Zp cnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVz dWx0LCBfX2ZhbHNlX3R5cGUpCiAgICB7IHJldHVybiBfX2NvcHkoX19maXJzdCwgX19sYXN0LCBf X3Jlc3VsdCwgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7IH0KCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXI+CiAgICBpbmxpbmUgX091dHB1 dEl0ZXIKICAgIF9fY29weV9hdXgyKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xh c3QsCiAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX190cnVlX3R5cGUpCiAg ICB7IHJldHVybiBfX2NvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwgX19pdGVyYXRvcl9j YXRlZ29yeShfX2ZpcnN0KSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW5saW5l IF9UcCoKICAgIF9fY29weV9hdXgyKF9UcCogX19maXJzdCwgX1RwKiBfX2xhc3QsCiAgICAgICAg ICAgICAgICBfVHAqIF9fcmVzdWx0LCBfX3RydWVfdHlwZSkKICAgIHsgcmV0dXJuIF9fY29weV90 cml2aWFsKF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1l IF9UcD4KICAgIGlubGluZSBfVHAqCiAgICBfX2NvcHlfYXV4Mihjb25zdCBfVHAqIF9fZmlyc3Qs IGNvbnN0IF9UcCogX19sYXN0LAogICAgICAgICAgICAgICAgX1RwKiBfX3Jlc3VsdCwgX190cnVl X3R5cGUpCiAgICB7IHJldHVybiBfX2NvcHlfdHJpdmlhbChfX2ZpcnN0LCBfX2xhc3QsIF9fcmVz dWx0KTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0 SXRlcj4KICAgIGlubGluZSBfT3V0cHV0SXRlcgogICAgX19jb3B5X25pMihfSW5wdXRJdGVyIF9f Zmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jl c3VsdCwgX190cnVlX3R5cGUpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3Jf dHJhaXRzPF9JbnB1dEl0ZXI+Ojp2YWx1ZV90eXBlCiAgICAgICAgICBfVmFsdWVUeXBlOwogICAg ICB0eXBlZGVmIHR5cGVuYW1lIF9fdHlwZV90cmFpdHM8X1ZhbHVlVHlwZT46Omhhc190cml2aWFs X2Fzc2lnbm1lbnRfb3BlcmF0b3IKICAgICAgICAgIF9Ucml2aWFsOwogICAgICByZXR1cm4gX091 dHB1dEl0ZXIoX19jb3B5X2F1eDIoX19maXJzdCwgX19sYXN0LAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgX19yZXN1bHQuYmFzZSgpLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgX1RyaXZpYWwoKSkpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf SW5wdXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4KICAgIGlubGluZSBfT3V0cHV0SXRlcgog ICAgX19jb3B5X25pMihfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAg ICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX19mYWxzZV90eXBlKQogICAgewogICAg ICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyPjo6dmFsdWVfdHlw ZQogICAgICAgICAgX1ZhbHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5cGVfdHJh aXRzPF9WYWx1ZVR5cGU+OjpoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yCiAgICAgICAg ICBfVHJpdmlhbDsKICAgICAgcmV0dXJuIF9fY29weV9hdXgyKF9fZmlyc3QsIF9fbGFzdCwKICAg ICAgICAgICAgICAgICAgICAgICAgIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAg X1RyaXZpYWwoKSk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVu YW1lIF9PdXRwdXRJdGVyPgogICAgaW5saW5lIF9PdXRwdXRJdGVyCiAgICBfX2NvcHlfbmkxKF9J bnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgIF9PdXRw dXRJdGVyIF9fcmVzdWx0LCBfX3RydWVfdHlwZSkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFt ZSBfSXNfbm9ybWFsX2l0ZXJhdG9yPF9PdXRwdXRJdGVyPjo6X05vcm1hbCBfX05vcm1hbDsKICAg ICAgcmV0dXJuIF9fY29weV9uaTIoX19maXJzdC5iYXNlKCksIF9fbGFzdC5iYXNlKCksIF9fcmVz dWx0LCBfX05vcm1hbCgpKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwg dHlwZW5hbWUgX091dHB1dEl0ZXI+CiAgICBpbmxpbmUgX091dHB1dEl0ZXIKICAgIF9fY29weV9u aTEoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAg X091dHB1dEl0ZXIgX19yZXN1bHQsIF9fZmFsc2VfdHlwZSkKICAgIHsKICAgICAgdHlwZWRlZiB0 eXBlbmFtZSBfSXNfbm9ybWFsX2l0ZXJhdG9yPF9PdXRwdXRJdGVyPjo6X05vcm1hbCBfX05vcm1h bDsKICAgICAgcmV0dXJuIF9fY29weV9uaTIoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwgX19O b3JtYWwoKSk7CiAgICB9CiMgMzM5ICIvaG9tZS9BZG1pbmlzdHJhdG9yL2djY3Rlc3RpbmcvbGli L2djYy1saWIvaTY4Ni1wYy1jeWd3aW4vMy40L2luY2x1ZGUvYysrL2JpdHMvc3RsX2FsZ29iYXNl LmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRl cj4KICAgIGlubGluZSBfT3V0cHV0SXRlcgogICAgY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9J bnB1dEl0ZXIgX19sYXN0LCBfT3V0cHV0SXRlciBfX3Jlc3VsdCkKICAgIHsKCiAgICAgCiAgICAg CgoKICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0lzX25vcm1hbF9pdGVyYXRvcjxfSW5wdXRJdGVy Pjo6X05vcm1hbCBfX05vcm1hbDsKICAgICAgIHJldHVybiBfX2NvcHlfbmkxKF9fZmlyc3QsIF9f bGFzdCwgX19yZXN1bHQsIF9fTm9ybWFsKCkpOwogICAgfQoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQmlkaXJlY3Rpb25hbEl0ZXIxLCB0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIyPgogICAg aW5saW5lIF9CaWRpcmVjdGlvbmFsSXRlcjIKICAgIF9fY29weV9iYWNrd2FyZChfQmlkaXJlY3Rp b25hbEl0ZXIxIF9fZmlyc3QsIF9CaWRpcmVjdGlvbmFsSXRlcjEgX19sYXN0LAogICAgICAgICAg ICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAg ICAgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcpCiAgICB7CiAgICAgIHdoaWxlIChfX2ZpcnN0 ICE9IF9fbGFzdCkKICAgICAgICAqLS1fX3Jlc3VsdCA9ICotLV9fbGFzdDsKICAgICAgcmV0dXJu IF9fcmVzdWx0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwg dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyPgogICAgaW5saW5lIF9CaWRpcmVjdGlvbmFsSXRl cgogICAgX19jb3B5X2JhY2t3YXJkKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21B Y2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIg X19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcp CiAgICB7CiAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46 OmRpZmZlcmVuY2VfdHlwZSBfX247CiAgICAgIGZvciAoX19uID0gX19sYXN0IC0gX19maXJzdDsg X19uID4gMDsgLS1fX24pCiAgICAgICAgKi0tX19yZXN1bHQgPSAqLS1fX2xhc3Q7CiAgICAgIHJl dHVybiBfX3Jlc3VsdDsKICAgIH0KCgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0 aW9uYWxJdGVyMSwgdHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyMiwKICAgICAgICAgICB0eXBl bmFtZSBfQm9vbFR5cGU+CiAgICBzdHJ1Y3QgX19jb3B5X2JhY2t3YXJkX2Rpc3BhdGNoCiAgICB7 CiAgICAgIHN0YXRpYyBfQmlkaXJlY3Rpb25hbEl0ZXIyCiAgICAgIGNvcHkoX0JpZGlyZWN0aW9u YWxJdGVyMSBfX2ZpcnN0LCBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fbGFzdCwKICAgICAgICAgICBf QmlkaXJlY3Rpb25hbEl0ZXIyIF9fcmVzdWx0KQogICAgICB7CiAgICAgICAgcmV0dXJuIF9fY29w eV9iYWNrd2FyZChfX2ZpcnN0LCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9faXRlcmF0b3JfY2F0 ZWdvcnkoX19maXJzdCkpOwogICAgICB9CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+ CiAgICBzdHJ1Y3QgX19jb3B5X2JhY2t3YXJkX2Rpc3BhdGNoPF9UcCosIF9UcCosIF9fdHJ1ZV90 eXBlPgogICAgewogICAgICBzdGF0aWMgX1RwKgogICAgICBjb3B5KGNvbnN0IF9UcCogX19maXJz dCwgY29uc3QgX1RwKiBfX2xhc3QsIF9UcCogX19yZXN1bHQpCiAgICAgIHsKICAgICAgICBjb25z dCBwdHJkaWZmX3QgX051bSA9IF9fbGFzdCAtIF9fZmlyc3Q7CiAgICAgICAgbWVtbW92ZShfX3Jl c3VsdCAtIF9OdW0sIF9fZmlyc3QsIHNpemVvZihfVHApICogX051bSk7CiAgICAgICAgcmV0dXJu IF9fcmVzdWx0IC0gX051bTsKICAgICAgfQogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1Rw PgogICAgc3RydWN0IF9fY29weV9iYWNrd2FyZF9kaXNwYXRjaDxjb25zdCBfVHAqLCBfVHAqLCBf X3RydWVfdHlwZT4KICAgIHsKICAgICAgc3RhdGljIF9UcCoKICAgICAgY29weShjb25zdCBfVHAq IF9fZmlyc3QsIGNvbnN0IF9UcCogX19sYXN0LCBfVHAqIF9fcmVzdWx0KQogICAgICB7CiAgICAg ICAgcmV0dXJuIF9fY29weV9iYWNrd2FyZF9kaXNwYXRjaDxfVHAqLCBfVHAqLCBfX3RydWVfdHlw ZT4KICAgICAgICAgIDo6Y29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KTsKICAgICAgfQog ICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JJMSwgdHlwZW5hbWUgX0JJMj4KICAgIGlubGlu ZSBfQkkyCiAgICBfX2NvcHlfYmFja3dhcmRfYXV4KF9CSTEgX19maXJzdCwgX0JJMSBfX2xhc3Qs IF9CSTIgX19yZXN1bHQpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX190eXBlX3RyYWl0 czx0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0JJMj46OnZhbHVlX3R5cGU+CiAgICAgICAgICAg ICAgICAgICAgICAgICAgICA6Omhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3IgX1RyaXZp YWw7CiAgICAgIHJldHVybiBfX2NvcHlfYmFja3dhcmRfZGlzcGF0Y2g8X0JJMSwgX0JJMiwgX1Ry aXZpYWw+CiAgICAgICAgICAgICAgICAgIDo6Y29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0 KTsKICAgIH0KCiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9CSTEsIHR5cGVuYW1lIF9CSTI+CiAgICBp bmxpbmUgX0JJMgogICAgX19jb3B5X2JhY2t3YXJkX291dHB1dF9ub3JtYWxfaXRlcmF0b3IoX0JJ MSBfX2ZpcnN0LCBfQkkxIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIF9CSTIgX19yZXN1bHQsIF9fdHJ1ZV90eXBlKQogICAgeyByZXR1cm4gX0JJMihf X2NvcHlfYmFja3dhcmRfYXV4KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQuYmFzZSgpKSk7IH0K CiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9CSTEsIHR5cGVuYW1lIF9CSTI+CiAgICBpbmxpbmUgX0JJ MgogICAgX19jb3B5X2JhY2t3YXJkX291dHB1dF9ub3JtYWxfaXRlcmF0b3IoX0JJMSBfX2ZpcnN0 LCBfQkkxIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IF9CSTIgX19yZXN1bHQsIF9fZmFsc2VfdHlwZSkKICAgIHsgcmV0dXJuIF9fY29weV9iYWNrd2Fy ZF9hdXgoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCk7IH0KCiAgdGVtcGxhdGUgPHR5cGVuYW1l IF9CSTEsIHR5cGVuYW1lIF9CSTI+CiAgICBpbmxpbmUgX0JJMgogICAgX19jb3B5X2JhY2t3YXJk X2lucHV0X25vcm1hbF9pdGVyYXRvcihfQkkxIF9fZmlyc3QsIF9CSTEgX19sYXN0LAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQkkyIF9fcmVzdWx0LCBfX3RydWVf dHlwZSkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfbm9ybWFsX2l0ZXJhdG9yPF9C STI+OjpfTm9ybWFsIF9fTm9ybWFsOwogICAgICByZXR1cm4gX19jb3B5X2JhY2t3YXJkX291dHB1 dF9ub3JtYWxfaXRlcmF0b3IoX19maXJzdC5iYXNlKCksIF9fbGFzdC5iYXNlKCksCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Jlc3VsdCwgX19O b3JtYWwoKSk7CiAgICB9CgogIHRlbXBsYXRlIDx0eXBlbmFtZSBfQkkxLCB0eXBlbmFtZSBfQkky PgogICAgaW5saW5lIF9CSTIKICAgIF9fY29weV9iYWNrd2FyZF9pbnB1dF9ub3JtYWxfaXRlcmF0 b3IoX0JJMSBfX2ZpcnN0LCBfQkkxIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgX0JJMiBfX3Jlc3VsdCwgX19mYWxzZV90eXBlKQogICAgewogICAgICB0 eXBlZGVmIHR5cGVuYW1lIF9Jc19ub3JtYWxfaXRlcmF0b3I8X0JJMj46Ol9Ob3JtYWwgX19Ob3Jt YWw7CiAgICAgIHJldHVybiBfX2NvcHlfYmFja3dhcmRfb3V0cHV0X25vcm1hbF9pdGVyYXRvcihf X2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgX19Ob3JtYWwoKSk7CiAgICB9CiMgNDc3ICIvaG9tZS9BZG1p bmlzdHJhdG9yL2djY3Rlc3RpbmcvbGliL2djYy1saWIvaTY4Ni1wYy1jeWd3aW4vMy40L2luY2x1 ZGUvYysrL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0JJMSwg dHlwZW5hbWUgX0JJMj4KICAgIGlubGluZSBfQkkyCiAgICBjb3B5X2JhY2t3YXJkKF9CSTEgX19m aXJzdCwgX0JJMSBfX2xhc3QsIF9CSTIgX19yZXN1bHQpCiAgICB7CgogICAgIAogICAgIAogICAg IAoKCgogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19ub3JtYWxfaXRlcmF0b3I8X0JJMT46Ol9O b3JtYWwgX19Ob3JtYWw7CiAgICAgIHJldHVybiBfX2NvcHlfYmFja3dhcmRfaW5wdXRfbm9ybWFs X2l0ZXJhdG9yKF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fTm9ybWFsKCkpOwogICAgfQojIDUwOSAi L2hvbWUvQWRtaW5pc3RyYXRvci9nY2N0ZXN0aW5nL2xpYi9nY2MtbGliL2k2ODYtcGMtY3lnd2lu LzMuNC9pbmNsdWRlL2MrKy9iaXRzL3N0bF9hbGdvYmFzZS5oIiAzCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfVHA+CiAgICB2b2lkCiAgICBmaWxsKF9Gb3J3YXJk SXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LCBjb25zdCBfVHAmIF9fdmFsdWUpCiAg ICB7CgogICAgIAoKICAgICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQog ICAgICAgICpfX2ZpcnN0ID0gX192YWx1ZTsKICAgIH0KIyA1MzEgIi9ob21lL0FkbWluaXN0cmF0 b3IvZ2NjdGVzdGluZy9saWIvZ2NjLWxpYi9pNjg2LXBjLWN5Z3dpbi8zLjQvaW5jbHVkZS9jKysv Yml0cy9zdGxfYWxnb2Jhc2UuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9PdXRwdXRJdGVyLCB0 eXBlbmFtZSBfU2l6ZSwgdHlwZW5hbWUgX1RwPgogICAgX091dHB1dEl0ZXIKICAgIGZpbGxfbihf T3V0cHV0SXRlciBfX2ZpcnN0LCBfU2l6ZSBfX24sIGNvbnN0IF9UcCYgX192YWx1ZSkKICAgIHsK CiAgICAgCgogICAgICBmb3IgKCA7IF9fbiA+IDA7IC0tX19uLCArK19fZmlyc3QpCiAgICAgICAg Kl9fZmlyc3QgPSBfX3ZhbHVlOwogICAgICByZXR1cm4gX19maXJzdDsKICAgIH0KCgoKICBpbmxp bmUgdm9pZAogIGZpbGwodW5zaWduZWQgY2hhciogX19maXJzdCwgdW5zaWduZWQgY2hhciogX19s YXN0LCBjb25zdCB1bnNpZ25lZCBjaGFyJiBfX2MpCiAgewogICAgdW5zaWduZWQgY2hhciBfX3Rt cCA9IF9fYzsKICAgIG1lbXNldChfX2ZpcnN0LCBfX3RtcCwgX19sYXN0IC0gX19maXJzdCk7CiAg fQoKICBpbmxpbmUgdm9pZAogIGZpbGwoc2lnbmVkIGNoYXIqIF9fZmlyc3QsIHNpZ25lZCBjaGFy KiBfX2xhc3QsIGNvbnN0IHNpZ25lZCBjaGFyJiBfX2MpCiAgewogICAgc2lnbmVkIGNoYXIgX190 bXAgPSBfX2M7CiAgICBtZW1zZXQoX19maXJzdCwgc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4o X190bXApLCBfX2xhc3QgLSBfX2ZpcnN0KTsKICB9CgogIGlubGluZSB2b2lkCiAgZmlsbChjaGFy KiBfX2ZpcnN0LCBjaGFyKiBfX2xhc3QsIGNvbnN0IGNoYXImIF9fYykKICB7CiAgICBjaGFyIF9f dG1wID0gX19jOwogICAgbWVtc2V0KF9fZmlyc3QsIHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+ KF9fdG1wKSwgX19sYXN0IC0gX19maXJzdCk7CiAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfU2l6 ZT4KICAgIGlubGluZSB1bnNpZ25lZCBjaGFyKgogICAgZmlsbF9uKHVuc2lnbmVkIGNoYXIqIF9f Zmlyc3QsIF9TaXplIF9fbiwgY29uc3QgdW5zaWduZWQgY2hhciYgX19jKQogICAgewogICAgICBm aWxsKF9fZmlyc3QsIF9fZmlyc3QgKyBfX24sIF9fYyk7CiAgICAgIHJldHVybiBfX2ZpcnN0ICsg X19uOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfU2l6ZT4KICAgIGlubGluZSBzaWduZWQg Y2hhcioKICAgIGZpbGxfbihjaGFyKiBfX2ZpcnN0LCBfU2l6ZSBfX24sIGNvbnN0IHNpZ25lZCBj aGFyJiBfX2MpCiAgICB7CiAgICAgIGZpbGwoX19maXJzdCwgX19maXJzdCArIF9fbiwgX19jKTsK ICAgICAgcmV0dXJuIF9fZmlyc3QgKyBfX247CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9T aXplPgogICAgaW5saW5lIGNoYXIqCiAgICBmaWxsX24oY2hhciogX19maXJzdCwgX1NpemUgX19u LCBjb25zdCBjaGFyJiBfX2MpCiAgICB7CiAgICAgIGZpbGwoX19maXJzdCwgX19maXJzdCArIF9f biwgX19jKTsKICAgICAgcmV0dXJuIF9fZmlyc3QgKyBfX247CiAgICB9CiMgNjA2ICIvaG9tZS9B ZG1pbmlzdHJhdG9yL2djY3Rlc3RpbmcvbGliL2djYy1saWIvaTY4Ni1wYy1jeWd3aW4vMy40L2lu Y2x1ZGUvYysrL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5w dXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0SXRlcjI+CiAgICBwYWlyPF9JbnB1dEl0ZXIxLCBfSW5w dXRJdGVyMj4KICAgIG1pc21hdGNoKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBf X2xhc3QxLAogICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIpCiAgICB7CgogICAgIAog ICAgIAogICAgIAoKICAgICAKCgogICAgICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiAq X19maXJzdDEgPT0gKl9fZmlyc3QyKSB7CiAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgICArK19f Zmlyc3QyOwogICAgICB9CiAgICAgIHJldHVybiBwYWlyPF9JbnB1dEl0ZXIxLCBfSW5wdXRJdGVy Mj4oX19maXJzdDEsIF9fZmlyc3QyKTsKICAgIH0KIyA2NDAgIi9ob21lL0FkbWluaXN0cmF0b3Iv Z2NjdGVzdGluZy9saWIvZ2NjLWxpYi9pNjg2LXBjLWN5Z3dpbi8zLjQvaW5jbHVkZS9jKysvYml0 cy9zdGxfYWxnb2Jhc2UuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBl bmFtZSBfSW5wdXRJdGVyMiwgdHlwZW5hbWUgX0JpbmFyeVByZWRpY2F0ZT4KICAgIHBhaXI8X0lu cHV0SXRlcjEsIF9JbnB1dEl0ZXIyPgogICAgbWlzbWF0Y2goX0lucHV0SXRlcjEgX19maXJzdDEs IF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwK ICAgICAgICAgICAgIF9CaW5hcnlQcmVkaWNhdGUgX19iaW5hcnlfcHJlZCkKICAgIHsKCiAgICAg CiAgICAgCgogICAgICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2JpbmFyeV9wcmVk KCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkgewogICAgICAgICsrX19maXJzdDE7CiAgICAgICAgKytf X2ZpcnN0MjsKICAgICAgfQogICAgICByZXR1cm4gcGFpcjxfSW5wdXRJdGVyMSwgX0lucHV0SXRl cjI+KF9fZmlyc3QxLCBfX2ZpcnN0Mik7CiAgICB9CiMgNjY4ICIvaG9tZS9BZG1pbmlzdHJhdG9y L2djY3Rlc3RpbmcvbGliL2djYy1saWIvaTY4Ni1wYy1jeWd3aW4vMy40L2luY2x1ZGUvYysrL2Jp dHMvc3RsX2FsZ29iYXNlLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlw ZW5hbWUgX0lucHV0SXRlcjI+CiAgICBpbmxpbmUgYm9vbAogICAgZXF1YWwoX0lucHV0SXRlcjEg X19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICBfSW5wdXRJdGVyMiBfX2Zp cnN0MikKICAgIHsKCiAgICAgCiAgICAgCiAgICAgCgoKCiAgICAgIGZvciAoIDsgX19maXJzdDEg IT0gX19sYXN0MTsgKytfX2ZpcnN0MSwgKytfX2ZpcnN0MikKICAgICAgICBpZiAoISgqX19maXJz dDEgPT0gKl9fZmlyc3QyKSkKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgcmV0dXJuIHRy dWU7CiAgICB9CiMgNjk5ICIvaG9tZS9BZG1pbmlzdHJhdG9yL2djY3Rlc3RpbmcvbGliL2djYy1s aWIvaTY4Ni1wYy1jeWd3aW4vMy40L2luY2x1ZGUvYysrL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0SXRlcjIsIHR5 cGVuYW1lIF9CaW5hcnlQcmVkaWNhdGU+CiAgICBpbmxpbmUgYm9vbAogICAgZXF1YWwoX0lucHV0 SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICBfSW5wdXRJdGVy MiBfX2ZpcnN0MiwKICAgICAgICAgIF9CaW5hcnlQcmVkaWNhdGUgX19iaW5hcnlfcHJlZCkKICAg IHsKCiAgICAgCiAgICAgCgogICAgICBmb3IgKCA7IF9fZmlyc3QxICE9IF9fbGFzdDE7ICsrX19m aXJzdDEsICsrX19maXJzdDIpCiAgICAgICAgaWYgKCFfX2JpbmFyeV9wcmVkKCpfX2ZpcnN0MSwg Kl9fZmlyc3QyKSkKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgcmV0dXJuIHRydWU7CiAg ICB9CiMgNzMyICIvaG9tZS9BZG1pbmlzdHJhdG9yL2djY3Rlc3RpbmcvbGliL2djYy1saWIvaTY4 Ni1wYy1jeWd3aW4vMy40L2luY2x1ZGUvYysrL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0SXRlcjI+CiAgICBib29s CiAgICBsZXhpY29ncmFwaGljYWxfY29tcGFyZShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0 SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9f Zmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyKQogICAgewoKICAgICAKICAgICAKICAgICAKCiAg ICAgCgoKICAgICAgZm9yICggOyBfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9f bGFzdDIKICAgICAgICAgICAgOyArK19fZmlyc3QxLCArK19fZmlyc3QyKSB7CiAgICAgICAgaWYg KCpfX2ZpcnN0MSA8ICpfX2ZpcnN0MikKICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIGlm ICgqX19maXJzdDIgPCAqX19maXJzdDEpCiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0K ICAgICAgcmV0dXJuIF9fZmlyc3QxID09IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MjsK ICAgIH0KIyA3NjcgIi9ob21lL0FkbWluaXN0cmF0b3IvZ2NjdGVzdGluZy9saWIvZ2NjLWxpYi9p Njg2LXBjLWN5Z3dpbi8zLjQvaW5jbHVkZS9jKysvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwogIHRl bXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJdGVyMiwgdHlwZW5h bWUgX0NvbXBhcmU+CiAgICBib29sCiAgICBsZXhpY29ncmFwaGljYWxfY29tcGFyZShfSW5wdXRJ dGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQogICAgewoKICAgICAKICAgICAK CiAgICAgIGZvciAoIDsgX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3Qy CiAgICAgICAgICAgIDsgKytfX2ZpcnN0MSwgKytfX2ZpcnN0MikgewogICAgICAgIGlmIChfX2Nv bXAoKl9fZmlyc3QxLCAqX19maXJzdDIpKQogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAg aWYgKF9fY29tcCgqX19maXJzdDIsICpfX2ZpcnN0MSkpCiAgICAgICAgICByZXR1cm4gZmFsc2U7 CiAgICAgIH0KICAgICAgcmV0dXJuIF9fZmlyc3QxID09IF9fbGFzdDEgJiYgX19maXJzdDIgIT0g X19sYXN0MjsKICAgIH0KCiAgaW5saW5lIGJvb2wKICBsZXhpY29ncmFwaGljYWxfY29tcGFyZShj b25zdCB1bnNpZ25lZCBjaGFyKiBfX2ZpcnN0MSwgY29uc3QgdW5zaWduZWQgY2hhciogX19sYXN0 MSwKICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBfX2ZpcnN0 MiwgY29uc3QgdW5zaWduZWQgY2hhciogX19sYXN0MikKICB7CiAgICBjb25zdCBzaXplX3QgX19s ZW4xID0gX19sYXN0MSAtIF9fZmlyc3QxOwogICAgY29uc3Qgc2l6ZV90IF9fbGVuMiA9IF9fbGFz dDIgLSBfX2ZpcnN0MjsKICAgIGNvbnN0IGludCBfX3Jlc3VsdCA9IG1lbWNtcChfX2ZpcnN0MSwg X19maXJzdDIsIHN0ZDo6bWluKF9fbGVuMSwgX19sZW4yKSk7CiAgICByZXR1cm4gX19yZXN1bHQg IT0gMCA/IF9fcmVzdWx0IDwgMCA6IF9fbGVuMSA8IF9fbGVuMjsKICB9CgogIGlubGluZSBib29s CiAgbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmUoY29uc3QgY2hhciogX19maXJzdDEsIGNvbnN0IGNo YXIqIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogX19maXJz dDIsIGNvbnN0IGNoYXIqIF9fbGFzdDIpCiAgewoKICAgIHJldHVybiBsZXhpY29ncmFwaGljYWxf Y29tcGFyZSgoY29uc3Qgc2lnbmVkIGNoYXIqKSBfX2ZpcnN0MSwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAoY29uc3Qgc2lnbmVkIGNoYXIqKSBfX2xhc3QxLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBzaWduZWQgY2hhciopIF9fZmlyc3QyLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBzaWduZWQgY2hhciopIF9f bGFzdDIpOwoKCgoKCgogIH0KCn0KIyA1NSAiL2hvbWUvQWRtaW5pc3RyYXRvci9nY2N0ZXN0aW5n L2xpYi9nY2MtbGliL2k2ODYtcGMtY3lnd2luLzMuNC9pbmNsdWRlL2MrKy9tZW1vcnkiIDIgMwoj IDEgIi9ob21lL0FkbWluaXN0cmF0b3IvZ2NjdGVzdGluZy9saWIvZ2NjLWxpYi9pNjg2LXBjLWN5 Z3dpbi8zLjQvaW5jbHVkZS9jKysvYml0cy9zdGxfYWxsb2MuaCIgMSAzCiMgODQgIi9ob21lL0Fk bWluaXN0cmF0b3IvZ2NjdGVzdGluZy9saWIvZ2NjLWxpYi9pNjg2LXBjLWN5Z3dpbi8zLjQvaW5j bHVkZS9jKysvYml0cy9zdGxfYWxsb2MuaCIgMwojIDEgIi9ob21lL0FkbWluaXN0cmF0b3IvZ2Nj dGVzdGluZy9saWIvZ2NjLWxpYi9pNjg2LXBjLWN5Z3dpbi8zLjQvaW5jbHVkZS9jKysvYml0cy9m dW5jdGV4Y2VwdC5oIiAxIDMKIyAzNCAiL2hvbWUvQWRtaW5pc3RyYXRvci9nY2N0ZXN0aW5nL2xp Yi9nY2MtbGliL2k2ODYtcGMtY3lnd2luLzMuNC9pbmNsdWRlL2MrKy9iaXRzL2Z1bmN0ZXhjZXB0 LmgiIDMKIyAxICIvaG9tZS9BZG1pbmlzdHJhdG9yL2djY3Rlc3RpbmcvbGliL2djYy1saWIvaTY4 Ni1wYy1jeWd3aW4vMy40L2luY2x1ZGUvYysrL2V4Y2VwdGlvbl9kZWZpbmVzLmgiIDEgMwojIDM1 ICIvaG9tZS9BZG1pbmlzdHJhdG9yL2djY3Rlc3RpbmcvbGliL2djYy1saWIvaTY4Ni1wYy1jeWd3 aW4vMy40L2luY2x1ZGUvYysrL2JpdHMvZnVuY3RleGNlcHQuaCIgMiAzCgpuYW1lc3BhY2Ugc3Rk CnsKCiAgdm9pZAogIF9fdGhyb3dfYmFkX2V4Y2VwdGlvbih2b2lkKTsKCgogIHZvaWQKICBfX3Ro cm93X2JhZF9hbGxvYyh2b2lkKTsKCgogIHZvaWQKICBfX3Rocm93X2JhZF9jYXN0KHZvaWQpOwoK ICB2b2lkCiAgX190aHJvd19iYWRfdHlwZWlkKHZvaWQpOwoKCiAgdm9pZAogIF9fdGhyb3dfbG9n aWNfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfZG9tYWluX2Vycm9y KGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X2ludmFsaWRfYXJndW1lbnQoY29u c3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfbGVuZ3RoX2Vycm9yKGNvbnN0IGNoYXIq IF9fcyk7CgogIHZvaWQKICBfX3Rocm93X291dF9vZl9yYW5nZShjb25zdCBjaGFyKiBfX3MpOwoK ICB2b2lkCiAgX190aHJvd19ydW50aW1lX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQK ICBfX3Rocm93X3JhbmdlX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93 X292ZXJmbG93X2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X3VuZGVy Zmxvd19lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKCiAgdm9pZAogIF9fdGhyb3dfaW9zX2ZhaWx1 cmUoY29uc3QgY2hhciogX19zKTsKfQojIDg1ICIvaG9tZS9BZG1pbmlzdHJhdG9yL2djY3Rlc3Rp bmcvbGliL2djYy1saWIvaTY4Ni1wYy1jeWd3aW4vMy40L2luY2x1ZGUvYysrL2JpdHMvc3RsX2Fs bG9jLmgiIDIgMwojIDEgIi9ob21lL0FkbWluaXN0cmF0b3IvZ2NjdGVzdGluZy9saWIvZ2NjLWxp Yi9pNjg2LXBjLWN5Z3dpbi8zLjQvaW5jbHVkZS9jKysvYml0cy9zdGxfdGhyZWFkcy5oIiAxIDMK IyA1NCAiL2hvbWUvQWRtaW5pc3RyYXRvci9nY2N0ZXN0aW5nL2xpYi9nY2MtbGliL2k2ODYtcGMt Y3lnd2luLzMuNC9pbmNsdWRlL2MrKy9iaXRzL3N0bF90aHJlYWRzLmgiIDMKbmFtZXNwYWNlIHN0 ZAp7CgoKCgogIHN0cnVjdCBfUmVmY291bnRfQmFzZQogIHsKCiAgICB0eXBlZGVmIHNpemVfdCBf UkNfdDsKCgogICAgdm9sYXRpbGUgX1JDX3QgX01fcmVmX2NvdW50OwoKCiAgICBfX2d0aHJlYWRf bXV0ZXhfdCBfTV9yZWZfY291bnRfbG9jazsKCiAgICBfUmVmY291bnRfQmFzZShfUkNfdCBfX24p IDogX01fcmVmX2NvdW50KF9fbikKICAgIHsKCiAgICAgIF9fZ3RocmVhZF9tdXRleF90IF9fdG1w ID0gKHB0aHJlYWRfbXV0ZXhfdCkyMDsKICAgICAgX01fcmVmX2NvdW50X2xvY2sgPSBfX3RtcDsK CgoKCgogICAgfQoKICAgIHZvaWQKICAgIF9NX2luY3IoKQogICAgewogICAgICBfX2d0aHJlYWRf bXV0ZXhfbG9jaygmX01fcmVmX2NvdW50X2xvY2spOwogICAgICArK19NX3JlZl9jb3VudDsKICAg ICAgX19ndGhyZWFkX211dGV4X3VubG9jaygmX01fcmVmX2NvdW50X2xvY2spOwogICAgfQoKICAg IF9SQ190CiAgICBfTV9kZWNyKCkKICAgIHsKICAgICAgX19ndGhyZWFkX211dGV4X2xvY2soJl9N X3JlZl9jb3VudF9sb2NrKTsKICAgICAgdm9sYXRpbGUgX1JDX3QgX190bXAgPSAtLV9NX3JlZl9j b3VudDsKICAgICAgX19ndGhyZWFkX211dGV4X3VubG9jaygmX01fcmVmX2NvdW50X2xvY2spOwog ICAgICByZXR1cm4gX190bXA7CiAgICB9CiAgfTsKIyAxMDkgIi9ob21lL0FkbWluaXN0cmF0b3Iv Z2NjdGVzdGluZy9saWIvZ2NjLWxpYi9pNjg2LXBjLWN5Z3dpbi8zLjQvaW5jbHVkZS9jKysvYml0 cy9zdGxfdGhyZWFkcy5oIiAzCiAgdGVtcGxhdGU8aW50IF9fZHVtbXk+CiAgICBzdHJ1Y3QgX1N3 YXBfbG9ja19zdHJ1Y3QKICAgIHsgc3RhdGljIF9fZ3RocmVhZF9tdXRleF90IF9TX3N3YXBfbG9j azsgfTsKCiAgdGVtcGxhdGU8aW50IF9fZHVtbXk+CiAgICBfX2d0aHJlYWRfbXV0ZXhfdAogICAg X1N3YXBfbG9ja19zdHJ1Y3Q8X19kdW1teT46Ol9TX3N3YXBfbG9jayA9IChwdGhyZWFkX211dGV4 X3QpMjA7CgoKCiAgaW5saW5lIHVuc2lnbmVkIGxvbmcKICBfQXRvbWljX3N3YXAodW5zaWduZWQg bG9uZyAqIF9fcCwgdW5zaWduZWQgbG9uZyBfX3EpCiAgewogICAgX19ndGhyZWFkX211dGV4X2xv Y2soJl9Td2FwX2xvY2tfc3RydWN0PDA+OjpfU19zd2FwX2xvY2spOwogICAgdW5zaWduZWQgbG9u ZyBfX3Jlc3VsdCA9ICpfX3A7CiAgICAqX19wID0gX19xOwogICAgX19ndGhyZWFkX211dGV4X3Vu bG9jaygmX1N3YXBfbG9ja19zdHJ1Y3Q8MD46Ol9TX3N3YXBfbG9jayk7CiAgICByZXR1cm4gX19y ZXN1bHQ7CiAgfQoKfQojIDE1NSAiL2hvbWUvQWRtaW5pc3RyYXRvci9nY2N0ZXN0aW5nL2xpYi9n Y2MtbGliL2k2ODYtcGMtY3lnd2luLzMuNC9pbmNsdWRlL2MrKy9iaXRzL3N0bF90aHJlYWRzLmgi IDMKbmFtZXNwYWNlIHN0ZAp7CiAgc3RydWN0IF9TVExfbXV0ZXhfbG9jawogIHsKCgoKCgogICAg X19ndGhyZWFkX211dGV4X3QgX01fbG9jazsKCiAgICB2b2lkCiAgICBfTV9pbml0aWFsaXplKCkK ICAgIHsKIyAxOTIgIi9ob21lL0FkbWluaXN0cmF0b3IvZ2NjdGVzdGluZy9saWIvZ2NjLWxpYi9p Njg2LXBjLWN5Z3dpbi8zLjQvaW5jbHVkZS9jKysvYml0cy9zdGxfdGhyZWFkcy5oIiAzCiAgICB9 CgogICAgdm9pZAogICAgX01fYWNxdWlyZV9sb2NrKCkKICAgIHsKCgoKICAgICAgX19ndGhyZWFk X211dGV4X2xvY2soJl9NX2xvY2spOwogICAgfQoKICAgIHZvaWQKICAgIF9NX3JlbGVhc2VfbG9j aygpCiAgICB7CgoKCiAgICAgIF9fZ3RocmVhZF9tdXRleF91bmxvY2soJl9NX2xvY2spOwogICAg fQogIH07CiMgMjI4ICIvaG9tZS9BZG1pbmlzdHJhdG9yL2djY3Rlc3RpbmcvbGliL2djYy1saWIv aTY4Ni1wYy1jeWd3aW4vMy40L2luY2x1ZGUvYysrL2JpdHMvc3RsX3RocmVhZHMuaCIgMwogIHN0 cnVjdCBfU1RMX2F1dG9fbG9jawogIHsKICAgIF9TVExfbXV0ZXhfbG9jayYgX01fbG9jazsKCiAg ICBfU1RMX2F1dG9fbG9jayhfU1RMX211dGV4X2xvY2smIF9fbG9jaykgOiBfTV9sb2NrKF9fbG9j aykKICAgIHsgX01fbG9jay5fTV9hY3F1aXJlX2xvY2soKTsgfQoKICAgIH5fU1RMX2F1dG9fbG9j aygpIHsgX01fbG9jay5fTV9yZWxlYXNlX2xvY2soKTsgfQoKICBwcml2YXRlOgogICAgdm9pZCBv cGVyYXRvcj0oY29uc3QgX1NUTF9hdXRvX2xvY2smKTsKICAgIF9TVExfYXV0b19sb2NrKGNvbnN0 IF9TVExfYXV0b19sb2NrJik7CiAgfTsKCn0KIyA4NiAiL2hvbWUvQWRtaW5pc3RyYXRvci9nY2N0 ZXN0aW5nL2xpYi9nY2MtbGliL2k2ODYtcGMtY3lnd2luLzMuNC9pbmNsdWRlL2MrKy9iaXRzL3N0 bF9hbGxvYy5oIiAyIDMKCiMgMSAiL2hvbWUvQWRtaW5pc3RyYXRvci9nY2N0ZXN0aW5nL2xpYi9n Y2MtbGliL2k2ODYtcGMtY3lnd2luLzMuNC9pbmNsdWRlL2MrKy9pNjg2LXBjLWN5Z3dpbi9iaXRz L2F0b21pY2l0eS5oIiAxIDMKIyAzMyAiL2hvbWUvQWRtaW5pc3RyYXRvci9nY2N0ZXN0aW5nL2xp Yi9nY2MtbGliL2k2ODYtcGMtY3lnd2luLzMuNC9pbmNsdWRlL2MrKy9pNjg2LXBjLWN5Z3dpbi9i aXRzL2F0b21pY2l0eS5oIiAzCnR5cGVkZWYgaW50IF9BdG9taWNfd29yZDsKCnN0YXRpYyBpbmxp bmUgX0F0b21pY193b3JkCl9fYXR0cmlidXRlX18gKChfX3VudXNlZF9fKSkKX19leGNoYW5nZV9h bmRfYWRkICh2b2xhdGlsZSBfQXRvbWljX3dvcmQgKl9fbWVtLCBpbnQgX192YWwpCnsKICByZWdp c3RlciBfQXRvbWljX3dvcmQgX19yZXN1bHQ7CiAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJsb2Nr OyB4YWRkbCAlMCwlMSIKICAgICAgICAgICAgICAgICAgICAgICAgOiAiPXIiIChfX3Jlc3VsdCks ICIrbSIgKCpfX21lbSkKICAgICAgICAgICAgICAgICAgICAgICAgOiAiMCIgKF9fdmFsKQogICAg ICAgICAgICAgICAgICAgICAgICA6ICJtZW1vcnkiKTsKICByZXR1cm4gX19yZXN1bHQ7Cn0KCnN0 YXRpYyBpbmxpbmUgdm9pZApfX2F0dHJpYnV0ZV9fICgoX191bnVzZWRfXykpCl9fYXRvbWljX2Fk ZCAodm9sYXRpbGUgX0F0b21pY193b3JkKiBfX21lbSwgaW50IF9fdmFsKQp7CiAgX19hc21fXyBf X3ZvbGF0aWxlX18gKCJsb2NrOyBhZGRsICUxLCUwIgogICAgICAgICAgICAgICAgICAgICAgICA6 ICIrbSIgKCpfX21lbSkgOiAiaXIiIChfX3ZhbCkgOiAibWVtb3J5Iik7Cn0KIyA4OCAiL2hvbWUv QWRtaW5pc3RyYXRvci9nY2N0ZXN0aW5nL2xpYi9nY2MtbGliL2k2ODYtcGMtY3lnd2luLzMuNC9p bmNsdWRlL2MrKy9iaXRzL3N0bF9hbGxvYy5oIiAyIDMKCm5hbWVzcGFjZSBzdGQKewojIDk5ICIv aG9tZS9BZG1pbmlzdHJhdG9yL2djY3Rlc3RpbmcvbGliL2djYy1saWIvaTY4Ni1wYy1jeWd3aW4v My40L2luY2x1ZGUvYysrL2JpdHMvc3RsX2FsbG9jLmgiIDMKICBjbGFzcyBfX25ld19hbGxvYwog IHsKICBwdWJsaWM6CiAgICBzdGF0aWMgdm9pZCoKICAgIGFsbG9jYXRlKHNpemVfdCBfX24pCiAg ICB7IHJldHVybiA6Om9wZXJhdG9yIG5ldyhfX24pOyB9CgogICAgc3RhdGljIHZvaWQKICAgIGRl YWxsb2NhdGUodm9pZCogX19wLCBzaXplX3QpCiAgICB7IDo6b3BlcmF0b3IgZGVsZXRlKF9fcCk7 IH0KICB9OwojIDEyMiAiL2hvbWUvQWRtaW5pc3RyYXRvci9nY2N0ZXN0aW5nL2xpYi9nY2MtbGli L2k2ODYtcGMtY3lnd2luLzMuNC9pbmNsdWRlL2MrKy9iaXRzL3N0bF9hbGxvYy5oIiAzCiAgdGVt cGxhdGU8aW50IF9faW5zdD4KICAgIGNsYXNzIF9fbWFsbG9jX2FsbG9jCiAgICB7CiAgICBwcml2 YXRlOgogICAgICBzdGF0aWMgdm9pZCogX1Nfb29tX21hbGxvYyhzaXplX3QpOwogICAgICBzdGF0 aWMgdm9pZCAoKiBfX21hbGxvY19hbGxvY19vb21faGFuZGxlcikoKTsKCiAgICBwdWJsaWM6CiAg ICAgIHN0YXRpYyB2b2lkKgogICAgICBhbGxvY2F0ZShzaXplX3QgX19uKQogICAgICB7CiAgICAg ICAgdm9pZCogX19yZXN1bHQgPSBtYWxsb2MoX19uKTsKICAgICAgICBpZiAoX19idWlsdGluX2V4 cGVjdChfX3Jlc3VsdCA9PSAwLCAwKSkKICAgICAgICAgIF9fcmVzdWx0ID0gX1Nfb29tX21hbGxv YyhfX24pOwogICAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgICAgfQoKICAgICAgc3RhdGljIHZv aWQKICAgICAgZGVhbGxvY2F0ZSh2b2lkKiBfX3AsIHNpemVfdCApCiAgICAgIHsgZnJlZShfX3Ap OyB9CgogICAgICBzdGF0aWMgdm9pZCAoKiBfX3NldF9tYWxsb2NfaGFuZGxlcih2b2lkICgqX19m KSgpKSkoKQogICAgICB7CiAgICAgICAgdm9pZCAoKiBfX29sZCkoKSA9IF9fbWFsbG9jX2FsbG9j X29vbV9oYW5kbGVyOwogICAgICAgIF9fbWFsbG9jX2FsbG9jX29vbV9oYW5kbGVyID0gX19mOwog ICAgICAgIHJldHVybiBfX29sZDsKICAgICAgfQogICAgfTsKCgogIHRlbXBsYXRlPGludCBfX2lu c3Q+CiAgICB2b2lkICgqIF9fbWFsbG9jX2FsbG9jPF9faW5zdD46Ol9fbWFsbG9jX2FsbG9jX29v bV9oYW5kbGVyKSgpID0gMDsKCiAgdGVtcGxhdGU8aW50IF9faW5zdD4KICAgIHZvaWQqCiAgICBf X21hbGxvY19hbGxvYzxfX2luc3Q+OjoKICAgIF9TX29vbV9tYWxsb2Moc2l6ZV90IF9fbikKICAg IHsKICAgICAgdm9pZCAoKiBfX215X21hbGxvY19oYW5kbGVyKSgpOwogICAgICB2b2lkKiBfX3Jl c3VsdDsKCiAgICAgIGZvciAoOzspCiAgICAgICAgewogICAgICAgICAgX19teV9tYWxsb2NfaGFu ZGxlciA9IF9fbWFsbG9jX2FsbG9jX29vbV9oYW5kbGVyOwogICAgICAgICAgaWYgKF9fYnVpbHRp bl9leHBlY3QoX19teV9tYWxsb2NfaGFuZGxlciA9PSAwLCAwKSkKICAgICAgICAgICAgX190aHJv d19iYWRfYWxsb2MoKTsKICAgICAgICAgICgqX19teV9tYWxsb2NfaGFuZGxlcikoKTsKICAgICAg ICAgIF9fcmVzdWx0ID0gbWFsbG9jKF9fbik7CiAgICAgICAgICBpZiAoX19yZXN1bHQpCiAgICAg ICAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgICAgICB9CiAgICB9CgoKICB0eXBlZGVmIF9fbmV3 X2FsbG9jIF9fbWVtX2ludGVyZmFjZTsKIyAxODkgIi9ob21lL0FkbWluaXN0cmF0b3IvZ2NjdGVz dGluZy9saWIvZ2NjLWxpYi9pNjg2LXBjLWN5Z3dpbi8zLjQvaW5jbHVkZS9jKysvYml0cy9zdGxf YWxsb2MuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgogICAg Y2xhc3MgX19zaW1wbGVfYWxsb2MKICAgIHsKICAgIHB1YmxpYzoKICAgICAgc3RhdGljIF9UcCoK ICAgICAgYWxsb2NhdGUoc2l6ZV90IF9fbikKICAgICAgewogICAgICAgIF9UcCogX19yZXQgPSAw OwogICAgICAgIGlmIChfX24pCiAgICAgICAgICBfX3JldCA9IHN0YXRpY19jYXN0PF9UcCo+KF9B bGxvYzo6YWxsb2NhdGUoX19uICogc2l6ZW9mKF9UcCkpKTsKICAgICAgICByZXR1cm4gX19yZXQ7 CiAgICAgIH0KCiAgICAgIHN0YXRpYyBfVHAqCiAgICAgIGFsbG9jYXRlKCkKICAgICAgeyByZXR1 cm4gKF9UcCopIF9BbGxvYzo6YWxsb2NhdGUoc2l6ZW9mIChfVHApKTsgfQoKICAgICAgc3RhdGlj IHZvaWQKICAgICAgZGVhbGxvY2F0ZShfVHAqIF9fcCwgc2l6ZV90IF9fbikKICAgICAgeyBpZiAo MCAhPSBfX24pIF9BbGxvYzo6ZGVhbGxvY2F0ZShfX3AsIF9fbiAqIHNpemVvZiAoX1RwKSk7IH0K CiAgICAgIHN0YXRpYyB2b2lkCiAgICAgIGRlYWxsb2NhdGUoX1RwKiBfX3ApCiAgICAgIHsgX0Fs bG9jOjpkZWFsbG9jYXRlKF9fcCwgc2l6ZW9mIChfVHApKTsgfQogICAgfTsKIyAyMjcgIi9ob21l L0FkbWluaXN0cmF0b3IvZ2NjdGVzdGluZy9saWIvZ2NjLWxpYi9pNjg2LXBjLWN5Z3dpbi8zLjQv aW5jbHVkZS9jKysvYml0cy9zdGxfYWxsb2MuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9BbGxv Yz4KICAgIGNsYXNzIF9fZGVidWdfYWxsb2MKICAgIHsKICAgIHByaXZhdGU6CgoKICAgICAgZW51 bSB7X1NfZXh0cmEgPSA4fTsKCiAgICBwdWJsaWM6CiAgICAgIHN0YXRpYyB2b2lkKgogICAgICBh bGxvY2F0ZShzaXplX3QgX19uKQogICAgICB7CiAgICAgICAgY2hhciogX19yZXN1bHQgPSAoY2hh ciopX0FsbG9jOjphbGxvY2F0ZShfX24gKyAoaW50KSBfU19leHRyYSk7CiAgICAgICAgKihzaXpl X3QqKV9fcmVzdWx0ID0gX19uOwogICAgICAgIHJldHVybiBfX3Jlc3VsdCArIChpbnQpIF9TX2V4 dHJhOwogICAgICB9CgogICAgICBzdGF0aWMgdm9pZAogICAgICBkZWFsbG9jYXRlKHZvaWQqIF9f cCwgc2l6ZV90IF9fbikKICAgICAgewogICAgICAgIGNoYXIqIF9fcmVhbF9wID0gKGNoYXIqKV9f cCAtIChpbnQpIF9TX2V4dHJhOwogICAgICAgIGlmICgqKHNpemVfdCopX19yZWFsX3AgIT0gX19u KQogICAgICAgICAgYWJvcnQoKTsKICAgICAgICBfQWxsb2M6OmRlYWxsb2NhdGUoX19yZWFsX3As IF9fbiArIChpbnQpIF9TX2V4dHJhKTsKICAgICAgfQogICAgfTsKIyAyODUgIi9ob21lL0FkbWlu aXN0cmF0b3IvZ2NjdGVzdGluZy9saWIvZ2NjLWxpYi9pNjg2LXBjLWN5Z3dpbi8zLjQvaW5jbHVk ZS9jKysvYml0cy9zdGxfYWxsb2MuaCIgMwogIHRlbXBsYXRlPGJvb2wgX190aHJlYWRzLCBpbnQg X19pbnN0PgogICAgY2xhc3MgX19wb29sX2FsbG9jCiAgICB7CiAgICBwcml2YXRlOgogICAgICBl bnVtIHtfQUxJR04gPSA4fTsKICAgICAgZW51bSB7X01BWF9CWVRFUyA9IDEyOH07CiAgICAgIGVu dW0ge19ORlJFRUxJU1RTID0gX01BWF9CWVRFUyAvIF9BTElHTn07CgogICAgICB1bmlvbiBfT2Jq CiAgICAgIHsKICAgICAgICB1bmlvbiBfT2JqKiBfTV9mcmVlX2xpc3RfbGluazsKICAgICAgICBj aGFyIF9NX2NsaWVudF9kYXRhWzFdOwogICAgICB9OwoKICAgICAgc3RhdGljIF9PYmoqIHZvbGF0 aWxlIF9TX2ZyZWVfbGlzdFtfTkZSRUVMSVNUU107CgoKICAgICAgc3RhdGljIGNoYXIqIF9TX3N0 YXJ0X2ZyZWU7CiAgICAgIHN0YXRpYyBjaGFyKiBfU19lbmRfZnJlZTsKICAgICAgc3RhdGljIHNp emVfdCBfU19oZWFwX3NpemU7CgogICAgICBzdGF0aWMgX1NUTF9tdXRleF9sb2NrIF9TX2xvY2s7 CiAgICAgIHN0YXRpYyBfQXRvbWljX3dvcmQgX1NfZm9yY2VfbmV3OwoKICAgICAgc3RhdGljIHNp emVfdAogICAgICBfU19yb3VuZF91cChzaXplX3QgX19ieXRlcykKICAgICAgeyByZXR1cm4gKCgo X19ieXRlcykgKyAoc2l6ZV90KSBfQUxJR04tMSkgJiB+KChzaXplX3QpIF9BTElHTiAtIDEpKTsg fQoKICAgICAgc3RhdGljIHNpemVfdAogICAgICBfU19mcmVlbGlzdF9pbmRleChzaXplX3QgX19i eXRlcykKICAgICAgeyByZXR1cm4gKCgoX19ieXRlcykgKyAoc2l6ZV90KV9BTElHTiAtIDEpLyhz aXplX3QpX0FMSUdOIC0gMSk7IH0KCgoKICAgICAgc3RhdGljIHZvaWQqCiAgICAgIF9TX3JlZmls bChzaXplX3QgX19uKTsKCgoKICAgICAgc3RhdGljIGNoYXIqCiAgICAgIF9TX2NodW5rX2FsbG9j KHNpemVfdCBfX3NpemUsIGludCYgX19ub2Jqcyk7CgoKCiAgICAgIHN0cnVjdCBfTG9jawogICAg ICB7CiAgICAgICAgX0xvY2soKSB7IGlmIChfX3RocmVhZHMpIF9TX2xvY2suX01fYWNxdWlyZV9s b2NrKCk7IH0KICAgICAgICB+X0xvY2soKSB7IGlmIChfX3RocmVhZHMpIF9TX2xvY2suX01fcmVs ZWFzZV9sb2NrKCk7IH0KICAgICAgfSBfX2F0dHJpYnV0ZV9fICgoX191bnVzZWRfXykpOwogICAg ICBmcmllbmQgc3RydWN0IF9Mb2NrOwoKICAgIHB1YmxpYzoKCiAgICAgIHN0YXRpYyB2b2lkKgog ICAgICBhbGxvY2F0ZShzaXplX3QgX19uKQogICAgICB7CiAgICAgICAgdm9pZCogX19yZXQgPSAw OwoKCgoKICAgICAgICBpZiAoX1NfZm9yY2VfbmV3ID09IDApCiAgICAgICAgICB7CiAgICAgICAg ICAgIGlmIChnZXRlbnYoIkdMSUJDUFBfRk9SQ0VfTkVXIikpCiAgICAgICAgICAgICAgX19hdG9t aWNfYWRkKCZfU19mb3JjZV9uZXcsIDEpOwogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAg X19hdG9taWNfYWRkKCZfU19mb3JjZV9uZXcsIC0xKTsKICAgICAgICAgIH0KCiAgICAgICAgaWYg KChfX24gPiAoc2l6ZV90KSBfTUFYX0JZVEVTKSB8fCAoX1NfZm9yY2VfbmV3ID4gMCkpCiAgICAg ICAgICBfX3JldCA9IF9fbmV3X2FsbG9jOjphbGxvY2F0ZShfX24pOwogICAgICAgIGVsc2UKICAg ICAgICAgIHsKICAgICAgICAgICAgX09iaiogdm9sYXRpbGUqIF9fbXlfZnJlZV9saXN0ID0gX1Nf ZnJlZV9saXN0CiAgICAgICAgICAgICAgKyBfU19mcmVlbGlzdF9pbmRleChfX24pOwoKCgogICAg ICAgICAgICBfTG9jayBfX2xvY2tfaW5zdGFuY2U7CiAgICAgICAgICAgIF9PYmoqIF9fcmVzdHJp Y3RfXyBfX3Jlc3VsdCA9ICpfX215X2ZyZWVfbGlzdDsKICAgICAgICAgICAgaWYgKF9fYnVpbHRp bl9leHBlY3QoX19yZXN1bHQgPT0gMCwgMCkpCiAgICAgICAgICAgICAgX19yZXQgPSBfU19yZWZp bGwoX1Nfcm91bmRfdXAoX19uKSk7CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICB7CiAg ICAgICAgICAgICAgICAqX19teV9mcmVlX2xpc3QgPSBfX3Jlc3VsdCAtPiBfTV9mcmVlX2xpc3Rf bGluazsKICAgICAgICAgICAgICAgIF9fcmV0ID0gX19yZXN1bHQ7CiAgICAgICAgICAgICAgfQog ICAgICAgICAgICBpZiAoX19idWlsdGluX2V4cGVjdChfX3JldCA9PSAwLCAwKSkKICAgICAgICAg ICAgICBfX3Rocm93X2JhZF9hbGxvYygpOwogICAgICAgICAgfQogICAgICAgIHJldHVybiBfX3Jl dDsKICAgICAgfQoKCiAgICAgIHN0YXRpYyB2b2lkCiAgICAgIGRlYWxsb2NhdGUodm9pZCogX19w LCBzaXplX3QgX19uKQogICAgICB7CiAgICAgICAgaWYgKChfX24gPiAoc2l6ZV90KSBfTUFYX0JZ VEVTKSB8fCAoX1NfZm9yY2VfbmV3ID4gMCkpCiAgICAgICAgICBfX25ld19hbGxvYzo6ZGVhbGxv Y2F0ZShfX3AsIF9fbik7CiAgICAgICAgZWxzZQogICAgICAgICAgewogICAgICAgICAgICBfT2Jq KiB2b2xhdGlsZSogX19teV9mcmVlX2xpc3QgPSBfU19mcmVlX2xpc3QKICAgICAgICAgICAgICAr IF9TX2ZyZWVsaXN0X2luZGV4KF9fbik7CiAgICAgICAgICAgIF9PYmoqIF9fcSA9IChfT2JqKilf X3A7CgoKCgogICAgICAgICAgICBfTG9jayBfX2xvY2tfaW5zdGFuY2U7CiAgICAgICAgICAgIF9f cSAtPiBfTV9mcmVlX2xpc3RfbGluayA9ICpfX215X2ZyZWVfbGlzdDsKICAgICAgICAgICAgKl9f bXlfZnJlZV9saXN0ID0gX19xOwogICAgICAgICAgfQogICAgICB9CiAgICB9OwoKICB0ZW1wbGF0 ZTxib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4gX0F0b21pY193b3JkCiAgX19wb29sX2FsbG9j PF9fdGhyZWFkcywgX19pbnN0Pjo6X1NfZm9yY2VfbmV3ID0gMDsKCiAgdGVtcGxhdGU8Ym9vbCBf X3RocmVhZHMsIGludCBfX2luc3Q+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I9PShjb25z dCBfX3Bvb2xfYWxsb2M8X190aHJlYWRzLF9faW5zdD4mLAogICAgICAgICAgICAgICBjb25zdCBf X3Bvb2xfYWxsb2M8X190aHJlYWRzLF9faW5zdD4mKQogICAgeyByZXR1cm4gdHJ1ZTsgfQoKICB0 ZW1wbGF0ZTxib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4KICAgIGlubGluZSBib29sCiAgICBv cGVyYXRvciE9KGNvbnN0IF9fcG9vbF9hbGxvYzxfX3RocmVhZHMsX19pbnN0PiYsCiAgICAgICAg ICAgICAgIGNvbnN0IF9fcG9vbF9hbGxvYzxfX3RocmVhZHMsX19pbnN0PiYpCiAgICB7IHJldHVy biBmYWxzZTsgfQoKCgoKCiAgdGVtcGxhdGU8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+CiAg ICBjaGFyKgogICAgX19wb29sX2FsbG9jPF9fdGhyZWFkcywgX19pbnN0Pjo6CiAgICBfU19jaHVu a19hbGxvYyhzaXplX3QgX19zaXplLCBpbnQmIF9fbm9ianMpCiAgICB7CiAgICAgIGNoYXIqIF9f cmVzdWx0OwogICAgICBzaXplX3QgX190b3RhbF9ieXRlcyA9IF9fc2l6ZSAqIF9fbm9ianM7CiAg ICAgIHNpemVfdCBfX2J5dGVzX2xlZnQgPSBfU19lbmRfZnJlZSAtIF9TX3N0YXJ0X2ZyZWU7Cgog ICAgICBpZiAoX19ieXRlc19sZWZ0ID49IF9fdG90YWxfYnl0ZXMpCiAgICAgICAgewogICAgICAg ICAgX19yZXN1bHQgPSBfU19zdGFydF9mcmVlOwogICAgICAgICAgX1Nfc3RhcnRfZnJlZSArPSBf X3RvdGFsX2J5dGVzOwogICAgICAgICAgcmV0dXJuIF9fcmVzdWx0IDsKICAgICAgICB9CiAgICAg IGVsc2UgaWYgKF9fYnl0ZXNfbGVmdCA+PSBfX3NpemUpCiAgICAgICAgewogICAgICAgICAgX19u b2JqcyA9IChpbnQpKF9fYnl0ZXNfbGVmdC9fX3NpemUpOwogICAgICAgICAgX190b3RhbF9ieXRl cyA9IF9fc2l6ZSAqIF9fbm9ianM7CiAgICAgICAgICBfX3Jlc3VsdCA9IF9TX3N0YXJ0X2ZyZWU7 CiAgICAgICAgICBfU19zdGFydF9mcmVlICs9IF9fdG90YWxfYnl0ZXM7CiAgICAgICAgICByZXR1 cm4gX19yZXN1bHQ7CiAgICAgICAgfQogICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgc2l6 ZV90IF9fYnl0ZXNfdG9fZ2V0ID0KICAgICAgICAgICAgMiAqIF9fdG90YWxfYnl0ZXMgKyBfU19y b3VuZF91cChfU19oZWFwX3NpemUgPj4gNCk7CgogICAgICAgICAgaWYgKF9fYnl0ZXNfbGVmdCA+ IDApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfT2JqKiB2b2xhdGlsZSogX19teV9mcmVl X2xpc3QgPQogICAgICAgICAgICAgICAgX1NfZnJlZV9saXN0ICsgX1NfZnJlZWxpc3RfaW5kZXgo X19ieXRlc19sZWZ0KTsKCiAgICAgICAgICAgICAgKChfT2JqKilfU19zdGFydF9mcmVlKSAtPiBf TV9mcmVlX2xpc3RfbGluayA9ICpfX215X2ZyZWVfbGlzdDsKICAgICAgICAgICAgICAqX19teV9m cmVlX2xpc3QgPSAoX09iaiopX1Nfc3RhcnRfZnJlZTsKICAgICAgICAgICAgfQogICAgICAgICAg X1Nfc3RhcnRfZnJlZSA9IChjaGFyKikgX19uZXdfYWxsb2M6OmFsbG9jYXRlKF9fYnl0ZXNfdG9f Z2V0KTsKICAgICAgICAgIGlmIChfU19zdGFydF9mcmVlID09IDApCiAgICAgICAgICAgIHsKICAg ICAgICAgICAgICBzaXplX3QgX19pOwogICAgICAgICAgICAgIF9PYmoqIHZvbGF0aWxlKiBfX215 X2ZyZWVfbGlzdDsKICAgICAgICAgICAgICBfT2JqKiBfX3A7CgoKCiAgICAgICAgICAgICAgX19p ID0gX19zaXplOwogICAgICAgICAgICAgIGZvciAoOyBfX2kgPD0gKHNpemVfdCkgX01BWF9CWVRF UzsgX19pICs9IChzaXplX3QpIF9BTElHTikKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAg ICAgICAgX19teV9mcmVlX2xpc3QgPSBfU19mcmVlX2xpc3QgKyBfU19mcmVlbGlzdF9pbmRleChf X2kpOwogICAgICAgICAgICAgICAgICBfX3AgPSAqX19teV9mcmVlX2xpc3Q7CiAgICAgICAgICAg ICAgICAgIGlmIChfX3AgIT0gMCkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAg ICAgICAgICAqX19teV9mcmVlX2xpc3QgPSBfX3AgLT4gX01fZnJlZV9saXN0X2xpbms7CiAgICAg ICAgICAgICAgICAgICAgICBfU19zdGFydF9mcmVlID0gKGNoYXIqKV9fcDsKICAgICAgICAgICAg ICAgICAgICAgIF9TX2VuZF9mcmVlID0gX1Nfc3RhcnRfZnJlZSArIF9faTsKICAgICAgICAgICAg ICAgICAgICAgIHJldHVybiBfU19jaHVua19hbGxvYyhfX3NpemUsIF9fbm9ianMpOwoKCiAgICAg ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIF9TX2VuZF9m cmVlID0gMDsKICAgICAgICAgICAgICBfU19zdGFydF9mcmVlID0gKGNoYXIqKV9fbmV3X2FsbG9j OjphbGxvY2F0ZShfX2J5dGVzX3RvX2dldCk7CgoKICAgICAgICAgICAgfQogICAgICAgICAgX1Nf aGVhcF9zaXplICs9IF9fYnl0ZXNfdG9fZ2V0OwogICAgICAgICAgX1NfZW5kX2ZyZWUgPSBfU19z dGFydF9mcmVlICsgX19ieXRlc190b19nZXQ7CiAgICAgICAgICByZXR1cm4gX1NfY2h1bmtfYWxs b2MoX19zaXplLCBfX25vYmpzKTsKICAgICAgICB9CiAgICB9CgoKCgoKICB0ZW1wbGF0ZTxib29s IF9fdGhyZWFkcywgaW50IF9faW5zdD4KICAgIHZvaWQqCiAgICBfX3Bvb2xfYWxsb2M8X190aHJl YWRzLCBfX2luc3Q+OjpfU19yZWZpbGwoc2l6ZV90IF9fbikKICAgIHsKICAgICAgaW50IF9fbm9i anMgPSAyMDsKICAgICAgY2hhciogX19jaHVuayA9IF9TX2NodW5rX2FsbG9jKF9fbiwgX19ub2Jq cyk7CiAgICAgIF9PYmoqIHZvbGF0aWxlKiBfX215X2ZyZWVfbGlzdDsKICAgICAgX09iaiogX19y ZXN1bHQ7CiAgICAgIF9PYmoqIF9fY3VycmVudF9vYmo7CiAgICAgIF9PYmoqIF9fbmV4dF9vYmo7 CiAgICAgIGludCBfX2k7CgogICAgICBpZiAoMSA9PSBfX25vYmpzKQogICAgICAgIHJldHVybiBf X2NodW5rOwogICAgICBfX215X2ZyZWVfbGlzdCA9IF9TX2ZyZWVfbGlzdCArIF9TX2ZyZWVsaXN0 X2luZGV4KF9fbik7CgoKICAgICAgX19yZXN1bHQgPSAoX09iaiopX19jaHVuazsKICAgICAgKl9f bXlfZnJlZV9saXN0ID0gX19uZXh0X29iaiA9IChfT2JqKikoX19jaHVuayArIF9fbik7CiAgICAg IGZvciAoX19pID0gMTsgOyBfX2krKykKICAgICAgICB7CiAgICAgICAgICBfX2N1cnJlbnRfb2Jq ID0gX19uZXh0X29iajsKICAgICAgICAgIF9fbmV4dF9vYmogPSAoX09iaiopKChjaGFyKilfX25l eHRfb2JqICsgX19uKTsKICAgICAgICAgIGlmIChfX25vYmpzIC0gMSA9PSBfX2kpCiAgICAgICAg ICAgIHsKICAgICAgICAgICAgICBfX2N1cnJlbnRfb2JqIC0+IF9NX2ZyZWVfbGlzdF9saW5rID0g MDsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgZWxzZQogICAg ICAgICAgICBfX2N1cnJlbnRfb2JqIC0+IF9NX2ZyZWVfbGlzdF9saW5rID0gX19uZXh0X29iajsK ICAgICAgICB9CiAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgIH0KCgogIHRlbXBsYXRlPGJvb2wg X190aHJlYWRzLCBpbnQgX19pbnN0PgogICAgX1NUTF9tdXRleF9sb2NrCiAgICBfX3Bvb2xfYWxs b2M8X190aHJlYWRzLF9faW5zdD46Ol9TX2xvY2sgPSB7IChwdGhyZWFkX211dGV4X3QpMjAgfTsK CiAgdGVtcGxhdGU8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+CiAgICBjaGFyKiBfX3Bvb2xf YWxsb2M8X190aHJlYWRzLF9faW5zdD46Ol9TX3N0YXJ0X2ZyZWUgPSAwOwoKICB0ZW1wbGF0ZTxi b29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4KICAgIGNoYXIqIF9fcG9vbF9hbGxvYzxfX3RocmVh ZHMsX19pbnN0Pjo6X1NfZW5kX2ZyZWUgPSAwOwoKICB0ZW1wbGF0ZTxib29sIF9fdGhyZWFkcywg aW50IF9faW5zdD4KICAgIHNpemVfdCBfX3Bvb2xfYWxsb2M8X190aHJlYWRzLF9faW5zdD46Ol9T X2hlYXBfc2l6ZSA9IDA7CgogIHRlbXBsYXRlPGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0Pgog ICAgdHlwZW5hbWUgX19wb29sX2FsbG9jPF9fdGhyZWFkcyxfX2luc3Q+OjpfT2JqKiB2b2xhdGls ZQogICAgX19wb29sX2FsbG9jPF9fdGhyZWFkcyxfX2luc3Q+OjpfU19mcmVlX2xpc3RbX05GUkVF TElTVFNdOwoKICB0eXBlZGVmIF9fcG9vbF9hbGxvYzx0cnVlLDA+IF9fYWxsb2M7CiAgdHlwZWRl ZiBfX3Bvb2xfYWxsb2M8ZmFsc2UsMD4gX19zaW5nbGVfY2xpZW50X2FsbG9jOwojIDU2NCAiL2hv bWUvQWRtaW5pc3RyYXRvci9nY2N0ZXN0aW5nL2xpYi9nY2MtbGliL2k2ODYtcGMtY3lnd2luLzMu NC9pbmNsdWRlL2MrKy9iaXRzL3N0bF9hbGxvYy5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1Rw PgogICAgY2xhc3MgYWxsb2NhdG9yCiAgICB7CiAgICAgIHR5cGVkZWYgX19hbGxvYyBfQWxsb2M7 CiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgc2l6ZV90IHNpemVfdHlwZTsKICAgICAgdHlwZWRl ZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwogICAgICB0eXBlZGVmIF9UcCogcG9pbnRlcjsK ICAgICAgdHlwZWRlZiBjb25zdCBfVHAqIGNvbnN0X3BvaW50ZXI7CiAgICAgIHR5cGVkZWYgX1Rw JiByZWZlcmVuY2U7CiAgICAgIHR5cGVkZWYgY29uc3QgX1RwJiBjb25zdF9yZWZlcmVuY2U7CiAg ICAgIHR5cGVkZWYgX1RwIHZhbHVlX3R5cGU7CgogICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAx PgogICAgICAgIHN0cnVjdCByZWJpbmQKICAgICAgICB7IHR5cGVkZWYgYWxsb2NhdG9yPF9UcDE+ IG90aGVyOyB9OwoKICAgICAgYWxsb2NhdG9yKCkgdGhyb3coKSB7fQogICAgICBhbGxvY2F0b3Io Y29uc3QgYWxsb2NhdG9yJikgdGhyb3coKSB7fQogICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAx PgogICAgICAgIGFsbG9jYXRvcihjb25zdCBhbGxvY2F0b3I8X1RwMT4mKSB0aHJvdygpIHt9CiAg ICAgIH5hbGxvY2F0b3IoKSB0aHJvdygpIHt9CgogICAgICBwb2ludGVyCiAgICAgIGFkZHJlc3Mo cmVmZXJlbmNlIF9feCkgY29uc3QgeyByZXR1cm4gJl9feDsgfQoKICAgICAgY29uc3RfcG9pbnRl cgogICAgICBhZGRyZXNzKGNvbnN0X3JlZmVyZW5jZSBfX3gpIGNvbnN0IHsgcmV0dXJuICZfX3g7 IH0KCgoKICAgICAgX1RwKgogICAgICBhbGxvY2F0ZShzaXplX3R5cGUgX19uLCBjb25zdCB2b2lk KiA9IDApCiAgICAgIHsKICAgICAgICBfVHAqIF9fcmV0ID0gMDsKICAgICAgICBpZiAoX19uKQog ICAgICAgICAgewogICAgICAgICAgICBpZiAoX19uIDw9IHRoaXMtPm1heF9zaXplKCkpCiAgICAg ICAgICAgICAgX19yZXQgPSBzdGF0aWNfY2FzdDxfVHAqPihfQWxsb2M6OmFsbG9jYXRlKF9fbiAq IHNpemVvZihfVHApKSk7CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICBfX3Rocm93X2Jh ZF9hbGxvYygpOwogICAgICAgICAgfQogICAgICAgIHJldHVybiBfX3JldDsKICAgICAgfQoKCiAg ICAgIHZvaWQKICAgICAgZGVhbGxvY2F0ZShwb2ludGVyIF9fcCwgc2l6ZV90eXBlIF9fbikKICAg ICAgeyBfQWxsb2M6OmRlYWxsb2NhdGUoX19wLCBfX24gKiBzaXplb2YoX1RwKSk7IH0KCiAgICAg IHNpemVfdHlwZQogICAgICBtYXhfc2l6ZSgpIGNvbnN0IHRocm93KCkgeyByZXR1cm4gc2l6ZV90 KC0xKSAvIHNpemVvZihfVHApOyB9CgogICAgICB2b2lkIGNvbnN0cnVjdChwb2ludGVyIF9fcCwg Y29uc3QgX1RwJiBfX3ZhbCkgeyBuZXcoX19wKSBfVHAoX192YWwpOyB9CiAgICAgIHZvaWQgZGVz dHJveShwb2ludGVyIF9fcCkgeyBfX3AtPn5fVHAoKTsgfQogICAgfTsKCiAgdGVtcGxhdGU8Pgog ICAgY2xhc3MgYWxsb2NhdG9yPHZvaWQ+CiAgICB7CiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYg c2l6ZV90IHNpemVfdHlwZTsKICAgICAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBl OwogICAgICB0eXBlZGVmIHZvaWQqIHBvaW50ZXI7CiAgICAgIHR5cGVkZWYgY29uc3Qgdm9pZCog Y29uc3RfcG9pbnRlcjsKICAgICAgdHlwZWRlZiB2b2lkIHZhbHVlX3R5cGU7CgogICAgICB0ZW1w bGF0ZTx0eXBlbmFtZSBfVHAxPgogICAgICAgIHN0cnVjdCByZWJpbmQKICAgICAgICB7IHR5cGVk ZWYgYWxsb2NhdG9yPF9UcDE+IG90aGVyOyB9OwogICAgfTsKCgogIHRlbXBsYXRlPHR5cGVuYW1l IF9UMSwgdHlwZW5hbWUgX1QyPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPT0oY29uc3Qg YWxsb2NhdG9yPF9UMT4mLCBjb25zdCBhbGxvY2F0b3I8X1QyPiYpCiAgICB7IHJldHVybiB0cnVl OyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UMSwgdHlwZW5hbWUgX1QyPgogICAgaW5saW5lIGJv b2wKICAgIG9wZXJhdG9yIT0oY29uc3QgYWxsb2NhdG9yPF9UMT4mLCBjb25zdCBhbGxvY2F0b3I8 X1QyPiYpCiAgICB7IHJldHVybiBmYWxzZTsgfQojIDY2MCAiL2hvbWUvQWRtaW5pc3RyYXRvci9n Y2N0ZXN0aW5nL2xpYi9nY2MtbGliL2k2ODYtcGMtY3lnd2luLzMuNC9pbmNsdWRlL2MrKy9iaXRz L3N0bF9hbGxvYy5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+ CiAgICBzdHJ1Y3QgX19hbGxvY2F0b3IKICAgIHsKICAgICAgX0FsbG9jIF9fdW5kZXJseWluZ19h bGxvYzsKCiAgICAgIHR5cGVkZWYgc2l6ZV90IHNpemVfdHlwZTsKICAgICAgdHlwZWRlZiBwdHJk aWZmX3QgZGlmZmVyZW5jZV90eXBlOwogICAgICB0eXBlZGVmIF9UcCogcG9pbnRlcjsKICAgICAg dHlwZWRlZiBjb25zdCBfVHAqIGNvbnN0X3BvaW50ZXI7CiAgICAgIHR5cGVkZWYgX1RwJiByZWZl cmVuY2U7CiAgICAgIHR5cGVkZWYgY29uc3QgX1RwJiBjb25zdF9yZWZlcmVuY2U7CiAgICAgIHR5 cGVkZWYgX1RwIHZhbHVlX3R5cGU7CgogICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAxPgogICAg ICAgIHN0cnVjdCByZWJpbmQKICAgICAgICB7IHR5cGVkZWYgX19hbGxvY2F0b3I8X1RwMSwgX0Fs bG9jPiBvdGhlcjsgfTsKCiAgICAgIF9fYWxsb2NhdG9yKCkgdGhyb3coKSB7fQogICAgICBfX2Fs bG9jYXRvcihjb25zdCBfX2FsbG9jYXRvciYgX19hKSB0aHJvdygpCiAgICAgIDogX191bmRlcmx5 aW5nX2FsbG9jKF9fYS5fX3VuZGVybHlpbmdfYWxsb2MpIHt9CgogICAgICB0ZW1wbGF0ZTx0eXBl bmFtZSBfVHAxPgogICAgICAgIF9fYWxsb2NhdG9yKGNvbnN0IF9fYWxsb2NhdG9yPF9UcDEsIF9B bGxvYz4mIF9fYSkgdGhyb3coKQogICAgICAgIDogX191bmRlcmx5aW5nX2FsbG9jKF9fYS5fX3Vu ZGVybHlpbmdfYWxsb2MpIHt9CgogICAgICB+X19hbGxvY2F0b3IoKSB0aHJvdygpIHt9CgogICAg ICBwb2ludGVyCiAgICAgIGFkZHJlc3MocmVmZXJlbmNlIF9feCkgY29uc3QgeyByZXR1cm4gJl9f eDsgfQoKICAgICAgY29uc3RfcG9pbnRlcgogICAgICBhZGRyZXNzKGNvbnN0X3JlZmVyZW5jZSBf X3gpIGNvbnN0IHsgcmV0dXJuICZfX3g7IH0KCgoKICAgICAgX1RwKgogICAgICBhbGxvY2F0ZShz aXplX3R5cGUgX19uLCBjb25zdCB2b2lkKiA9IDApCiAgICAgIHsKICAgICAgICBfVHAqIF9fcmV0 ID0gMDsKICAgICAgICBpZiAoX19uKQogICAgICAgICAgX19yZXQgPSBzdGF0aWNfY2FzdDxfVHAq PihfQWxsb2M6OmFsbG9jYXRlKF9fbiAqIHNpemVvZihfVHApKSk7CiAgICAgICAgcmV0dXJuIF9f cmV0OwogICAgICB9CgoKICAgICAgdm9pZAogICAgICBkZWFsbG9jYXRlKHBvaW50ZXIgX19wLCBz aXplX3R5cGUgX19uKQogICAgICB7IF9fdW5kZXJseWluZ19hbGxvYy5kZWFsbG9jYXRlKF9fcCwg X19uICogc2l6ZW9mKF9UcCkpOyB9CgogICAgICBzaXplX3R5cGUKICAgICAgbWF4X3NpemUoKSBj b25zdCB0aHJvdygpIHsgcmV0dXJuIHNpemVfdCgtMSkgLyBzaXplb2YoX1RwKTsgfQoKICAgICAg dm9pZAogICAgICBjb25zdHJ1Y3QocG9pbnRlciBfX3AsIGNvbnN0IF9UcCYgX192YWwpIHsgbmV3 KF9fcCkgX1RwKF9fdmFsKTsgfQoKICAgICAgdm9pZAogICAgICBkZXN0cm95KHBvaW50ZXIgX19w KSB7IF9fcC0+fl9UcCgpOyB9CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQWxsb2M+CiAg ICBzdHJ1Y3QgX19hbGxvY2F0b3I8dm9pZCwgX0FsbG9jPgogICAgewogICAgICB0eXBlZGVmIHNp emVfdCBzaXplX3R5cGU7CiAgICAgIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsK ICAgICAgdHlwZWRlZiB2b2lkKiBwb2ludGVyOwogICAgICB0eXBlZGVmIGNvbnN0IHZvaWQqIGNv bnN0X3BvaW50ZXI7CiAgICAgIHR5cGVkZWYgdm9pZCB2YWx1ZV90eXBlOwoKICAgICAgdGVtcGxh dGU8dHlwZW5hbWUgX1RwMT4KICAgICAgICBzdHJ1Y3QgcmViaW5kCiAgICAgICAgeyB0eXBlZGVm IF9fYWxsb2NhdG9yPF9UcDEsIF9BbGxvYz4gb3RoZXI7IH07CiAgICB9OwoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRv cj09KGNvbnN0IF9fYWxsb2NhdG9yPF9UcCxfQWxsb2M+JiBfX2ExLAogICAgICAgICAgICAgICBj b25zdCBfX2FsbG9jYXRvcjxfVHAsX0FsbG9jPiYgX19hMikKICAgIHsgcmV0dXJuIF9fYTEuX191 bmRlcmx5aW5nX2FsbG9jID09IF9fYTIuX191bmRlcmx5aW5nX2FsbG9jOyB9CgogIHRlbXBsYXRl PHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJh dG9yIT0oY29uc3QgX19hbGxvY2F0b3I8X1RwLCBfQWxsb2M+JiBfX2ExLAogICAgICAgICAgICAg ICBjb25zdCBfX2FsbG9jYXRvcjxfVHAsIF9BbGxvYz4mIF9fYTIpCiAgICB7IHJldHVybiBfX2Ex Ll9fdW5kZXJseWluZ19hbGxvYyAhPSBfX2EyLl9fdW5kZXJseWluZ19hbGxvYzsgfQoKCgoKCgoK ICB0ZW1wbGF0ZTxpbnQgaW5zdD4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj09KGNvbnN0 IF9fbWFsbG9jX2FsbG9jPGluc3Q+JiwKICAgICAgICAgICAgICAgY29uc3QgX19tYWxsb2NfYWxs b2M8aW5zdD4mKQogICAgeyByZXR1cm4gdHJ1ZTsgfQoKICB0ZW1wbGF0ZTxpbnQgX19pbnN0Pgog ICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yIT0oY29uc3QgX19tYWxsb2NfYWxsb2M8X19pbnN0 PiYsCiAgICAgICAgICAgICAgIGNvbnN0IF9fbWFsbG9jX2FsbG9jPF9faW5zdD4mKQogICAgeyBy ZXR1cm4gZmFsc2U7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJv b2wKICAgIG9wZXJhdG9yPT0oY29uc3QgX19kZWJ1Z19hbGxvYzxfQWxsb2M+JiwgY29uc3QgX19k ZWJ1Z19hbGxvYzxfQWxsb2M+JikKICAgIHsgcmV0dXJuIHRydWU7IH0KCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yIT0oY29uc3QgX19kZWJ1 Z19hbGxvYzxfQWxsb2M+JiwgY29uc3QgX19kZWJ1Z19hbGxvYzxfQWxsb2M+JikKICAgIHsgcmV0 dXJuIGZhbHNlOyB9CiMgODEzICIvaG9tZS9BZG1pbmlzdHJhdG9yL2djY3Rlc3RpbmcvbGliL2dj Yy1saWIvaTY4Ni1wYy1jeWd3aW4vMy40L2luY2x1ZGUvYysrL2JpdHMvc3RsX2FsbG9jLmgiIDMK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvY2F0b3I+CiAgICBzdHJ1Y3Qg X0FsbG9jX3RyYWl0cwogICAgewogICAgICBzdGF0aWMgY29uc3QgYm9vbCBfU19pbnN0YW5jZWxl c3MgPSBmYWxzZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2NhdG9yOjp0ZW1wbGF0ZSBy ZWJpbmQ8X1RwPjo6b3RoZXIgYWxsb2NhdG9yX3R5cGU7CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvY2F0b3I+CiAgICBjb25zdCBib29sIF9BbGxvY190cmFp dHM8X1RwLCBfQWxsb2NhdG9yPjo6X1NfaW5zdGFuY2VsZXNzOwoKCiAgdGVtcGxhdGU8dHlwZW5h bWUgX1RwLCB0eXBlbmFtZSBfVHAxPgogICAgc3RydWN0IF9BbGxvY190cmFpdHM8X1RwLCBhbGxv Y2F0b3I8X1RwMT4gPgogICAgewogICAgICBzdGF0aWMgY29uc3QgYm9vbCBfU19pbnN0YW5jZWxl c3MgPSB0cnVlOwogICAgICB0eXBlZGVmIF9fc2ltcGxlX2FsbG9jPF9UcCwgX19hbGxvYz4gX0Fs bG9jX3R5cGU7CiAgICAgIHR5cGVkZWYgYWxsb2NhdG9yPF9UcD4gYWxsb2NhdG9yX3R5cGU7CiAg ICB9OwoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIGludCBfX2luc3Q+CiAgICBzdHJ1Y3Qg X0FsbG9jX3RyYWl0czxfVHAsIF9fbWFsbG9jX2FsbG9jPF9faW5zdD4gPgogICAgewogICAgICBz dGF0aWMgY29uc3QgYm9vbCBfU19pbnN0YW5jZWxlc3MgPSB0cnVlOwogICAgICB0eXBlZGVmIF9f c2ltcGxlX2FsbG9jPF9UcCwgX19tYWxsb2NfYWxsb2M8X19pbnN0PiA+IF9BbGxvY190eXBlOwog ICAgICB0eXBlZGVmIF9fYWxsb2NhdG9yPF9UcCwgX19tYWxsb2NfYWxsb2M8X19pbnN0PiA+IGFs bG9jYXRvcl90eXBlOwogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCBib29sIF9fdGhy ZWFkcywgaW50IF9faW5zdD4KICAgIHN0cnVjdCBfQWxsb2NfdHJhaXRzPF9UcCwgX19wb29sX2Fs bG9jPF9fdGhyZWFkcywgX19pbnN0PiA+CiAgICB7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIF9T X2luc3RhbmNlbGVzcyA9IHRydWU7CiAgICAgIHR5cGVkZWYgX19zaW1wbGVfYWxsb2M8X1RwLCBf X3Bvb2xfYWxsb2M8X190aHJlYWRzLCBfX2luc3Q+ID4KICAgICAgX0FsbG9jX3R5cGU7CiAgICAg IHR5cGVkZWYgX19hbGxvY2F0b3I8X1RwLCBfX3Bvb2xfYWxsb2M8X190aHJlYWRzLCBfX2luc3Q+ ID4KICAgICAgYWxsb2NhdG9yX3R5cGU7CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAs IHR5cGVuYW1lIF9BbGxvYz4KICAgIHN0cnVjdCBfQWxsb2NfdHJhaXRzPF9UcCwgX19kZWJ1Z19h bGxvYzxfQWxsb2M+ID4KICAgIHsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5zdGFuY2Vs ZXNzID0gdHJ1ZTsKICAgICAgdHlwZWRlZiBfX3NpbXBsZV9hbGxvYzxfVHAsIF9fZGVidWdfYWxs b2M8X0FsbG9jPiA+IF9BbGxvY190eXBlOwogICAgICB0eXBlZGVmIF9fYWxsb2NhdG9yPF9UcCwg X19kZWJ1Z19hbGxvYzxfQWxsb2M+ID4gYWxsb2NhdG9yX3R5cGU7CiAgICB9OwoKCgoKCiAgdGVt cGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfVHAxLCBpbnQgX19pbnN0PgogICAgc3RydWN0 IF9BbGxvY190cmFpdHM8X1RwLAogICAgICAgICAgICAgICAgICAgICAgICAgX19hbGxvY2F0b3I8 X1RwMSwgX19tYWxsb2NfYWxsb2M8X19pbnN0PiA+ID4KICAgIHsKICAgICAgc3RhdGljIGNvbnN0 IGJvb2wgX1NfaW5zdGFuY2VsZXNzID0gdHJ1ZTsKICAgICAgdHlwZWRlZiBfX3NpbXBsZV9hbGxv YzxfVHAsIF9fbWFsbG9jX2FsbG9jPF9faW5zdD4gPiBfQWxsb2NfdHlwZTsKICAgICAgdHlwZWRl ZiBfX2FsbG9jYXRvcjxfVHAsIF9fbWFsbG9jX2FsbG9jPF9faW5zdD4gPiBhbGxvY2F0b3JfdHlw ZTsKICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX1RwMSwgYm9vbCBf X3RociwgaW50IF9faW5zdD4KICAgIHN0cnVjdCBfQWxsb2NfdHJhaXRzPF9UcCwgX19hbGxvY2F0 b3I8X1RwMSwgX19wb29sX2FsbG9jPF9fdGhyLCBfX2luc3Q+ID4gPgogICAgewogICAgICBzdGF0 aWMgY29uc3QgYm9vbCBfU19pbnN0YW5jZWxlc3MgPSB0cnVlOwogICAgICB0eXBlZGVmIF9fc2lt cGxlX2FsbG9jPF9UcCwgX19wb29sX2FsbG9jPF9fdGhyLF9faW5zdD4gPgogICAgICBfQWxsb2Nf dHlwZTsKICAgICAgdHlwZWRlZiBfX2FsbG9jYXRvcjxfVHAsIF9fcG9vbF9hbGxvYzxfX3Rocixf X2luc3Q+ID4KICAgICAgYWxsb2NhdG9yX3R5cGU7CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfVHAsIHR5cGVuYW1lIF9UcDEsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHN0cnVjdCBfQWxsb2Nf dHJhaXRzPF9UcCwgX19hbGxvY2F0b3I8X1RwMSwgX19kZWJ1Z19hbGxvYzxfQWxsb2M+ID4gPgog ICAgewogICAgICBzdGF0aWMgY29uc3QgYm9vbCBfU19pbnN0YW5jZWxlc3MgPSB0cnVlOwogICAg ICB0eXBlZGVmIF9fc2ltcGxlX2FsbG9jPF9UcCwgX19kZWJ1Z19hbGxvYzxfQWxsb2M+ID4gX0Fs bG9jX3R5cGU7CiAgICAgIHR5cGVkZWYgX19hbGxvY2F0b3I8X1RwLCBfX2RlYnVnX2FsbG9jPF9B bGxvYz4gPiBhbGxvY2F0b3JfdHlwZTsKICAgIH07CgoKCgoKCiAgZXh0ZXJuIHRlbXBsYXRlIGNs YXNzIGFsbG9jYXRvcjxjaGFyPjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgYWxsb2NhdG9yPHdj aGFyX3Q+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBfX3Bvb2xfYWxsb2M8dHJ1ZSwwPjsKCn0K IyA1NiAiL2hvbWUvQWRtaW5pc3RyYXRvci9nY2N0ZXN0aW5nL2xpYi9nY2MtbGliL2k2ODYtcGMt Y3lnd2luLzMuNC9pbmNsdWRlL2MrKy9tZW1vcnkiIDIgMwojIDEgIi9ob21lL0FkbWluaXN0cmF0 b3IvZ2NjdGVzdGluZy9saWIvZ2NjLWxpYi9pNjg2LXBjLWN5Z3dpbi8zLjQvaW5jbHVkZS9jKysv Yml0cy9zdGxfY29uc3RydWN0LmgiIDEgMwojIDY3ICIvaG9tZS9BZG1pbmlzdHJhdG9yL2djY3Rl c3RpbmcvbGliL2djYy1saWIvaTY4Ni1wYy1jeWd3aW4vMy40L2luY2x1ZGUvYysrL2JpdHMvc3Rs X2NvbnN0cnVjdC5oIiAzCm5hbWVzcGFjZSBzdGQKewoKCgoKCgogIHRlbXBsYXRlIDxjbGFzcyBf VDEsIGNsYXNzIF9UMj4KICAgIGlubGluZSB2b2lkCiAgICBfQ29uc3RydWN0KF9UMSogX19wLCBj b25zdCBfVDImIF9fdmFsdWUpCiAgICB7IG5ldyAoc3RhdGljX2Nhc3Q8dm9pZCo+KF9fcCkpIF9U MShfX3ZhbHVlKTsgfQoKCgoKCgoKICB0ZW1wbGF0ZSA8Y2xhc3MgX1QxPgogICAgaW5saW5lIHZv aWQKICAgIF9Db25zdHJ1Y3QoX1QxKiBfX3ApCiAgICB7IG5ldyAoc3RhdGljX2Nhc3Q8dm9pZCo+ KF9fcCkpIF9UMSgpOyB9CiMgOTggIi9ob21lL0FkbWluaXN0cmF0b3IvZ2NjdGVzdGluZy9saWIv Z2NjLWxpYi9pNjg2LXBjLWN5Z3dpbi8zLjQvaW5jbHVkZS9jKysvYml0cy9zdGxfY29uc3RydWN0 LmgiIDMKICB0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4KICAgIGlubGluZSB2b2lk CiAgICBfX2Rlc3Ryb3lfYXV4KF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVy YXRvciBfX2xhc3QsIF9fZmFsc2VfdHlwZSkKICAgIHsgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFz dDsgKytfX2ZpcnN0KSBfRGVzdHJveSgmKl9fZmlyc3QpOyB9CiMgMTEyICIvaG9tZS9BZG1pbmlz dHJhdG9yL2djY3Rlc3RpbmcvbGliL2djYy1saWIvaTY4Ni1wYy1jeWd3aW4vMy40L2luY2x1ZGUv YysrL2JpdHMvc3RsX2NvbnN0cnVjdC5oIiAzCiAgdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRl cmF0b3I+CiAgICBpbmxpbmUgdm9pZAogICAgX19kZXN0cm95X2F1eChfRm9yd2FyZEl0ZXJhdG9y LCBfRm9yd2FyZEl0ZXJhdG9yLCBfX3RydWVfdHlwZSkKICAgIHsgfQoKCgoKCgogIHRlbXBsYXRl IDxjbGFzcyBfVHA+CiAgICBpbmxpbmUgdm9pZAogICAgX0Rlc3Ryb3koX1RwKiBfX3BvaW50ZXIp CiAgICB7IF9fcG9pbnRlci0+fl9UcCgpOyB9CiMgMTM0ICIvaG9tZS9BZG1pbmlzdHJhdG9yL2dj Y3Rlc3RpbmcvbGliL2djYy1saWIvaTY4Ni1wYy1jeWd3aW4vMy40L2luY2x1ZGUvYysrL2JpdHMv c3RsX2NvbnN0cnVjdC5oIiAzCiAgdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CiAg ICBpbmxpbmUgdm9pZAogICAgX0Rlc3Ryb3koX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9y d2FyZEl0ZXJhdG9yIF9fbGFzdCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRv cl90cmFpdHM8X0ZvcndhcmRJdGVyYXRvcj46OnZhbHVlX3R5cGUKICAgICAgICAgICAgICAgICAg ICAgICBfVmFsdWVfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5cGVfdHJhaXRzPF9W YWx1ZV90eXBlPjo6aGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcgogICAgICAgICAgICAgICAgICAgICAg IF9IYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwoKICAgICAgX19kZXN0cm95X2F1eChfX2ZpcnN0LCBf X2xhc3QsIF9IYXNfdHJpdmlhbF9kZXN0cnVjdG9yKCkpOwogICAgfQp9CiMgNTcgIi9ob21lL0Fk bWluaXN0cmF0b3IvZ2NjdGVzdGluZy9saWIvZ2NjLWxpYi9pNjg2LXBjLWN5Z3dpbi8zLjQvaW5j bHVkZS9jKysvbWVtb3J5IiAyIDMKCiMgMSAiL2hvbWUvQWRtaW5pc3RyYXRvci9nY2N0ZXN0aW5n L2xpYi9nY2MtbGliL2k2ODYtcGMtY3lnd2luLzMuNC9pbmNsdWRlL2MrKy9iaXRzL3N0bF91bmlu aXRpYWxpemVkLmgiIDEgMwojIDY2ICIvaG9tZS9BZG1pbmlzdHJhdG9yL2djY3Rlc3RpbmcvbGli L2djYy1saWIvaTY4Ni1wYy1jeWd3aW4vMy40L2luY2x1ZGUvYysrL2JpdHMvc3RsX3VuaW5pdGlh bGl6ZWQuaCIgMwpuYW1lc3BhY2Ugc3RkCnsKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJ dGVyLCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXI+CiAgICBpbmxpbmUgX0ZvcndhcmRJdGVyCiAgICBf X3VuaW5pdGlhbGl6ZWRfY29weV9hdXgoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9f bGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX190cnVlX3R5cGUpCiAgICB7IHJldHVybiBj b3B5KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9J bnB1dEl0ZXIsIHR5cGVuYW1lIF9Gb3J3YXJkSXRlcj4KICAgIF9Gb3J3YXJkSXRlcgogICAgX191 bmluaXRpYWxpemVkX2NvcHlfYXV4KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xh c3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0LAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZmFsc2VfdHlwZSkKICAgIHsKICAgICAgX0Zv cndhcmRJdGVyIF9fY3VyID0gX19yZXN1bHQ7CiAgICAgIHRyeSB7CiAgICAgICAgZm9yICggOyBf X2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0LCArK19fY3VyKQogICAgICAgICAgX0NvbnN0cnVj dCgmKl9fY3VyLCAqX19maXJzdCk7CiAgICAgICAgcmV0dXJuIF9fY3VyOwogICAgICB9CiAgICAg IGNhdGNoKC4uLikKICAgICAgICB7CiAgICAgICAgICBfRGVzdHJveShfX3Jlc3VsdCwgX19jdXIp OwogICAgICAgICAgdGhyb3c7CiAgICAgICAgfQogICAgfQojIDEwNiAiL2hvbWUvQWRtaW5pc3Ry YXRvci9nY2N0ZXN0aW5nL2xpYi9nY2MtbGliL2k2ODYtcGMtY3lnd2luLzMuNC9pbmNsdWRlL2Mr Ky9iaXRzL3N0bF91bmluaXRpYWxpemVkLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJ dGVyLCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXI+CiAgICBpbmxpbmUgX0ZvcndhcmRJdGVyCiAgICB1 bmluaXRpYWxpemVkX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwg X0ZvcndhcmRJdGVyIF9fcmVzdWx0KQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJh dG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CiAgICAgIHR5 cGVkZWYgdHlwZW5hbWUgX190eXBlX3RyYWl0czxfVmFsdWVUeXBlPjo6aXNfUE9EX3R5cGUgX0lz X1BPRDsKICAgICAgcmV0dXJuIF9fdW5pbml0aWFsaXplZF9jb3B5X2F1eChfX2ZpcnN0LCBfX2xh c3QsIF9fcmVzdWx0LCBfSXNfUE9EKCkpOwogICAgfQoKICBpbmxpbmUgY2hhcioKICB1bmluaXRp YWxpemVkX2NvcHkoY29uc3QgY2hhciogX19maXJzdCwgY29uc3QgY2hhciogX19sYXN0LCBjaGFy KiBfX3Jlc3VsdCkKICB7CiAgICBtZW1tb3ZlKF9fcmVzdWx0LCBfX2ZpcnN0LCBfX2xhc3QgLSBf X2ZpcnN0KTsKICAgIHJldHVybiBfX3Jlc3VsdCArIChfX2xhc3QgLSBfX2ZpcnN0KTsKICB9Cgog IGlubGluZSB3Y2hhcl90KgogIHVuaW5pdGlhbGl6ZWRfY29weShjb25zdCB3Y2hhcl90KiBfX2Zp cnN0LCBjb25zdCB3Y2hhcl90KiBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3Qq IF9fcmVzdWx0KQogIHsKICAgIG1lbW1vdmUoX19yZXN1bHQsIF9fZmlyc3QsIHNpemVvZih3Y2hh cl90KSAqIChfX2xhc3QgLSBfX2ZpcnN0KSk7CiAgICByZXR1cm4gX19yZXN1bHQgKyAoX19sYXN0 IC0gX19maXJzdCk7CiAgfQoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlw ZW5hbWUgX1RwPgogICAgaW5saW5lIHZvaWQKICAgIF9fdW5pbml0aWFsaXplZF9maWxsX2F1eChf Rm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjb25zdCBfVHAmIF9feCwgX190cnVlX3R5cGUpCiAgICB7IGZpbGwoX19m aXJzdCwgX19sYXN0LCBfX3gpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwg dHlwZW5hbWUgX1RwPgogICAgdm9pZAogICAgX191bmluaXRpYWxpemVkX2ZpbGxfYXV4KF9Gb3J3 YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNvbnN0IF9UcCYgX194LCBfX2ZhbHNlX3R5cGUpCiAgICB7CiAgICAgIF9Gb3J3 YXJkSXRlciBfX2N1ciA9IF9fZmlyc3Q7CiAgICAgIHRyeSB7CiAgICAgICAgZm9yICggOyBfX2N1 ciAhPSBfX2xhc3Q7ICsrX19jdXIpCiAgICAgICAgICBfQ29uc3RydWN0KCYqX19jdXIsIF9feCk7 CiAgICAgIH0KICAgICAgY2F0Y2goLi4uKQogICAgICAgIHsKICAgICAgICAgIF9EZXN0cm95KF9f Zmlyc3QsIF9fY3VyKTsKICAgICAgICAgIHRocm93OwogICAgICAgIH0KICAgIH0KIyAxNjQgIi9o b21lL0FkbWluaXN0cmF0b3IvZ2NjdGVzdGluZy9saWIvZ2NjLWxpYi9pNjg2LXBjLWN5Z3dpbi8z LjQvaW5jbHVkZS9jKysvYml0cy9zdGxfdW5pbml0aWFsaXplZC5oIiAzCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUgdm9pZAogICAgdW5p bml0aWFsaXplZF9maWxsKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0 LCBjb25zdCBfVHAmIF9feCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90 cmFpdHM8X0ZvcndhcmRJdGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOwogICAgICB0eXBlZGVm IHR5cGVuYW1lIF9fdHlwZV90cmFpdHM8X1ZhbHVlVHlwZT46OmlzX1BPRF90eXBlIF9Jc19QT0Q7 CiAgICAgIF9fdW5pbml0aWFsaXplZF9maWxsX2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9feCwgX0lz X1BPRCgpKTsKICAgIH0KCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVu YW1lIF9TaXplLCB0eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUgX0ZvcndhcmRJdGVyCiAgICBfX3Vu aW5pdGlhbGl6ZWRfZmlsbF9uX2F1eChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX1NpemUgX19uLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3gsIF9fdHJ1ZV90eXBl KQogICAgewogICAgICByZXR1cm4gZmlsbF9uKF9fZmlyc3QsIF9fbiwgX194KTsKICAgIH0KCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfU2l6ZSwgdHlwZW5hbWUg X1RwPgogICAgX0ZvcndhcmRJdGVyCiAgICBfX3VuaW5pdGlhbGl6ZWRfZmlsbF9uX2F1eChfRm9y d2FyZEl0ZXIgX19maXJzdCwgX1NpemUgX19uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgY29uc3QgX1RwJiBfX3gsIF9fZmFsc2VfdHlwZSkKICAgIHsKICAgICAgX0ZvcndhcmRJdGVy IF9fY3VyID0gX19maXJzdDsKICAgICAgdHJ5IHsKICAgICAgICBmb3IgKCA7IF9fbiA+IDA7IC0t X19uLCArK19fY3VyKQogICAgICAgICAgX0NvbnN0cnVjdCgmKl9fY3VyLCBfX3gpOwogICAgICAg IHJldHVybiBfX2N1cjsKICAgICAgfQogICAgICBjYXRjaCguLi4pCiAgICAgICAgewogICAgICAg ICAgX0Rlc3Ryb3koX19maXJzdCwgX19jdXIpOwogICAgICAgICAgdGhyb3c7CiAgICAgICAgfQog ICAgfQojIDIxMCAiL2hvbWUvQWRtaW5pc3RyYXRvci9nY2N0ZXN0aW5nL2xpYi9nY2MtbGliL2k2 ODYtcGMtY3lnd2luLzMuNC9pbmNsdWRlL2MrKy9iaXRzL3N0bF91bmluaXRpYWxpemVkLmgiIDMK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9TaXplLCB0eXBlbmFt ZSBfVHA+CiAgICBpbmxpbmUgX0ZvcndhcmRJdGVyCiAgICB1bmluaXRpYWxpemVkX2ZpbGxfbihf Rm9yd2FyZEl0ZXIgX19maXJzdCwgX1NpemUgX19uLCBjb25zdCBfVHAmIF9feCkKICAgIHsKICAg ICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6dmFsdWVf dHlwZSBfVmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fdHlwZV90cmFpdHM8X1Zh bHVlVHlwZT46OmlzX1BPRF90eXBlIF9Jc19QT0Q7CiAgICAgIHJldHVybiBfX3VuaW5pdGlhbGl6 ZWRfZmlsbF9uX2F1eChfX2ZpcnN0LCBfX24sIF9feCwgX0lzX1BPRCgpKTsKICAgIH0KIyAyMjcg Ii9ob21lL0FkbWluaXN0cmF0b3IvZ2NjdGVzdGluZy9saWIvZ2NjLWxpYi9pNjg2LXBjLWN5Z3dp bi8zLjQvaW5jbHVkZS9jKysvYml0cy9zdGxfdW5pbml0aWFsaXplZC5oIiAzCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0lucHV0SXRlcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXIyLCB0eXBlbmFtZSBfRm9y d2FyZEl0ZXI+CiAgICBpbmxpbmUgX0ZvcndhcmRJdGVyCiAgICBfX3VuaW5pdGlhbGl6ZWRfY29w eV9jb3B5KF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIg X19sYXN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fcmVz dWx0KQogICAgewogICAgICBfRm9yd2FyZEl0ZXIgX19taWQgPSB1bmluaXRpYWxpemVkX2NvcHko X19maXJzdDEsIF9fbGFzdDEsIF9fcmVzdWx0KTsKICAgICAgdHJ5IHsKICAgICAgICByZXR1cm4g dW5pbml0aWFsaXplZF9jb3B5KF9fZmlyc3QyLCBfX2xhc3QyLCBfX21pZCk7CiAgICAgIH0KICAg ICAgY2F0Y2goLi4uKQogICAgICAgIHsKICAgICAgICAgIF9EZXN0cm95KF9fcmVzdWx0LCBfX21p ZCk7CiAgICAgICAgICB0aHJvdzsKICAgICAgICB9CiAgICB9CgoKCgogIHRlbXBsYXRlPHR5cGVu YW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfSW5wdXRJdGVyPgogICAg aW5saW5lIF9Gb3J3YXJkSXRlcgogICAgX191bmluaXRpYWxpemVkX2ZpbGxfY29weShfRm9yd2Fy ZEl0ZXIgX19yZXN1bHQsIF9Gb3J3YXJkSXRlciBfX21pZCwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY29uc3QgX1RwJiBfX3gsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9J bnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QpCiAgICB7CiAgICAgIHVuaW5pdGlh bGl6ZWRfZmlsbChfX3Jlc3VsdCwgX19taWQsIF9feCk7CiAgICAgIHRyeSB7CiAgICAgICAgcmV0 dXJuIHVuaW5pdGlhbGl6ZWRfY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fbWlkKTsKICAgICAgfQog ICAgICBjYXRjaCguLi4pCiAgICAgICAgewogICAgICAgICAgX0Rlc3Ryb3koX19yZXN1bHQsIF9f bWlkKTsKICAgICAgICAgIHRocm93OwogICAgICAgIH0KICAgIH0KCgoKCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfVHA+CiAg ICBpbmxpbmUgdm9pZAogICAgX191bmluaXRpYWxpemVkX2NvcHlfZmlsbChfSW5wdXRJdGVyIF9f Zmlyc3QxLCBfSW5wdXRJdGVyIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IF9Gb3J3YXJkSXRlciBfX2ZpcnN0MiwgX0ZvcndhcmRJdGVyIF9fbGFzdDIsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX194KQogICAgewogICAgICBfRm9yd2FyZEl0 ZXIgX19taWQyID0gdW5pbml0aWFsaXplZF9jb3B5KF9fZmlyc3QxLCBfX2xhc3QxLCBfX2ZpcnN0 Mik7CiAgICAgIHRyeSB7CiAgICAgICAgdW5pbml0aWFsaXplZF9maWxsKF9fbWlkMiwgX19sYXN0 MiwgX194KTsKICAgICAgfQogICAgICBjYXRjaCguLi4pCiAgICAgICAgewogICAgICAgICAgX0Rl c3Ryb3koX19maXJzdDIsIF9fbWlkMik7CiAgICAgICAgICB0aHJvdzsKICAgICAgICB9CiAgICB9 Cgp9CiMgNTkgIi9ob21lL0FkbWluaXN0cmF0b3IvZ2NjdGVzdGluZy9saWIvZ2NjLWxpYi9pNjg2 LXBjLWN5Z3dpbi8zLjQvaW5jbHVkZS9jKysvbWVtb3J5IiAyIDMKIyAxICIvaG9tZS9BZG1pbmlz dHJhdG9yL2djY3Rlc3RpbmcvbGliL2djYy1saWIvaTY4Ni1wYy1jeWd3aW4vMy40L2luY2x1ZGUv YysrL2JpdHMvc3RsX3Jhd19zdG9yYWdlX2l0ZXIuaCIgMSAzCiMgNjQgIi9ob21lL0FkbWluaXN0 cmF0b3IvZ2NjdGVzdGluZy9saWIvZ2NjLWxpYi9pNjg2LXBjLWN5Z3dpbi8zLjQvaW5jbHVkZS9j KysvYml0cy9zdGxfcmF3X3N0b3JhZ2VfaXRlci5oIiAzCm5hbWVzcGFjZSBzdGQKewoKCgoKICB0 ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvciwgY2xhc3MgX1RwPgogIGNsYXNzIHJhd19z dG9yYWdlX2l0ZXJhdG9yCiAgICA6IHB1YmxpYyBpdGVyYXRvcjxvdXRwdXRfaXRlcmF0b3JfdGFn LCB2b2lkLCB2b2lkLCB2b2lkLCB2b2lkPgogICAgewogICAgcHJvdGVjdGVkOgogICAgICBfRm9y d2FyZEl0ZXJhdG9yIF9NX2l0ZXI7CgogICAgcHVibGljOgogICAgICBleHBsaWNpdAogICAgICBy YXdfc3RvcmFnZV9pdGVyYXRvcihfRm9yd2FyZEl0ZXJhdG9yIF9feCkgOiBfTV9pdGVyKF9feCkg e30KCiAgICAgIHJhd19zdG9yYWdlX2l0ZXJhdG9yJgogICAgICBvcGVyYXRvciooKSB7IHJldHVy biAqdGhpczsgfQoKICAgICAgcmF3X3N0b3JhZ2VfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yPShj b25zdCBfVHAmIF9fZWxlbWVudCkKICAgICAgewogICAgICAgIF9Db25zdHJ1Y3QoJipfTV9pdGVy LCBfX2VsZW1lbnQpOwogICAgICAgIHJldHVybiAqdGhpczsKICAgICAgfQoKICAgICAgcmF3X3N0 b3JhZ2VfaXRlcmF0b3I8X0ZvcndhcmRJdGVyYXRvciwgX1RwPiYKICAgICAgb3BlcmF0b3IrKygp CiAgICAgIHsKICAgICAgICArK19NX2l0ZXI7CiAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICB9 CgogICAgICByYXdfc3RvcmFnZV9pdGVyYXRvcjxfRm9yd2FyZEl0ZXJhdG9yLCBfVHA+CiAgICAg IG9wZXJhdG9yKysoaW50KQogICAgICB7CiAgICAgICAgcmF3X3N0b3JhZ2VfaXRlcmF0b3I8X0Zv cndhcmRJdGVyYXRvciwgX1RwPiBfX3RtcCA9ICp0aGlzOwogICAgICAgICsrX01faXRlcjsKICAg ICAgICByZXR1cm4gX190bXA7CiAgICAgIH0KICAgIH07Cn0KIyA2MCAiL2hvbWUvQWRtaW5pc3Ry YXRvci9nY2N0ZXN0aW5nL2xpYi9nY2MtbGliL2k2ODYtcGMtY3lnd2luLzMuNC9pbmNsdWRlL2Mr Ky9tZW1vcnkiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CiMgNzEgIi9ob21lL0FkbWluaXN0cmF0b3Iv Z2NjdGVzdGluZy9saWIvZ2NjLWxpYi9pNjg2LXBjLWN5Z3dpbi8zLjQvaW5jbHVkZS9jKysvbWVt b3J5IiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgcGFpcjxfVHAqLCBwdHJkaWZmX3Q+ CiAgICBfX2dldF90ZW1wb3JhcnlfYnVmZmVyKHB0cmRpZmZfdCBfX2xlbiwgX1RwKikKICAgIHsK ICAgICAgaWYgKF9fbGVuID4gcHRyZGlmZl90KDIxNDc0ODM2NDcgLyBzaXplb2YoX1RwKSkpCiAg ICAgICAgX19sZW4gPSAyMTQ3NDgzNjQ3IC8gc2l6ZW9mKF9UcCk7CgogICAgICB3aGlsZSAoX19s ZW4gPiAwKQogICAgICAgIHsKICAgICAgICAgIF9UcCogX190bXAgPSAoX1RwKikgc3RkOjptYWxs b2MoKHN0ZDo6c2l6ZV90KV9fbGVuICogc2l6ZW9mKF9UcCkpOwogICAgICAgICAgaWYgKF9fdG1w ICE9IDApCiAgICAgICAgICAgIHJldHVybiBwYWlyPF9UcCosIHB0cmRpZmZfdD4oX190bXAsIF9f bGVuKTsKICAgICAgICAgIF9fbGVuIC89IDI7CiAgICAgICAgfQogICAgICByZXR1cm4gcGFpcjxf VHAqLCBwdHJkaWZmX3Q+KChfVHAqKTAsIDApOwogICAgfQojIDEwMyAiL2hvbWUvQWRtaW5pc3Ry YXRvci9nY2N0ZXN0aW5nL2xpYi9nY2MtbGliL2k2ODYtcGMtY3lnd2luLzMuNC9pbmNsdWRlL2Mr Ky9tZW1vcnkiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUgcGFpcjxfVHAq LHB0cmRpZmZfdD4KICAgIGdldF90ZW1wb3JhcnlfYnVmZmVyKHB0cmRpZmZfdCBfX2xlbikKICAg IHsgcmV0dXJuIF9fZ2V0X3RlbXBvcmFyeV9idWZmZXIoX19sZW4sIChfVHAqKSAwKTsgfQojIDEx NSAiL2hvbWUvQWRtaW5pc3RyYXRvci9nY2N0ZXN0aW5nL2xpYi9nY2MtbGliL2k2ODYtcGMtY3ln d2luLzMuNC9pbmNsdWRlL2MrKy9tZW1vcnkiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAg ICB2b2lkCiAgICByZXR1cm5fdGVtcG9yYXJ5X2J1ZmZlcihfVHAqIF9fcCkKICAgIHsgc3RkOjpm cmVlKF9fcCk7IH0KIyAxMjcgIi9ob21lL0FkbWluaXN0cmF0b3IvZ2NjdGVzdGluZy9saWIvZ2Nj LWxpYi9pNjg2LXBjLWN5Z3dpbi8zLjQvaW5jbHVkZS9jKysvbWVtb3J5IiAzCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX1RwMT4KICAgIHN0cnVjdCBhdXRvX3B0cl9yZWYKICAgIHsKICAgICAgX1RwMSog X01fcHRyOwoKICAgICAgZXhwbGljaXQKICAgICAgYXV0b19wdHJfcmVmKF9UcDEqIF9fcCk6IF9N X3B0cihfX3ApIHsgfQogICAgfTsKIyAxNjYgIi9ob21lL0FkbWluaXN0cmF0b3IvZ2NjdGVzdGlu Zy9saWIvZ2NjLWxpYi9pNjg2LXBjLWN5Z3dpbi8zLjQvaW5jbHVkZS9jKysvbWVtb3J5IiAzCiAg dGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgY2xhc3MgYXV0b19wdHIKICAgIHsKICAgIHByaXZh dGU6CiAgICAgIF9UcCogX01fcHRyOwoKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX1RwIGVs ZW1lbnRfdHlwZTsKCgoKCgoKCiAgICAgIGV4cGxpY2l0CiAgICAgIGF1dG9fcHRyKGVsZW1lbnRf dHlwZSogX19wID0gMCkgdGhyb3coKSA6IF9NX3B0cihfX3ApIHsgfQojIDE5MiAiL2hvbWUvQWRt aW5pc3RyYXRvci9nY2N0ZXN0aW5nL2xpYi9nY2MtbGliL2k2ODYtcGMtY3lnd2luLzMuNC9pbmNs dWRlL2MrKy9tZW1vcnkiIDMKICAgICAgYXV0b19wdHIoYXV0b19wdHImIF9fYSkgdGhyb3coKSA6 IF9NX3B0cihfX2EucmVsZWFzZSgpKSB7IH0KIyAyMDMgIi9ob21lL0FkbWluaXN0cmF0b3IvZ2Nj dGVzdGluZy9saWIvZ2NjLWxpYi9pNjg2LXBjLWN5Z3dpbi8zLjQvaW5jbHVkZS9jKysvbWVtb3J5 IiAzCiAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcDE+CiAgICAgICAgYXV0b19wdHIoYXV0b19w dHI8X1RwMT4mIF9fYSkgdGhyb3coKSA6IF9NX3B0cihfX2EucmVsZWFzZSgpKSB7IH0KIyAyMTQg Ii9ob21lL0FkbWluaXN0cmF0b3IvZ2NjdGVzdGluZy9saWIvZ2NjLWxpYi9pNjg2LXBjLWN5Z3dp bi8zLjQvaW5jbHVkZS9jKysvbWVtb3J5IiAzCiAgICAgIGF1dG9fcHRyJgogICAgICBvcGVyYXRv cj0oYXV0b19wdHImIF9fYSkgdGhyb3coKQogICAgICB7CiAgICAgICAgcmVzZXQoX19hLnJlbGVh c2UoKSk7CiAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICB9CiMgMjMxICIvaG9tZS9BZG1pbmlz dHJhdG9yL2djY3Rlc3RpbmcvbGliL2djYy1saWIvaTY4Ni1wYy1jeWd3aW4vMy40L2luY2x1ZGUv YysrL21lbW9yeSIgMwogICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAxPgogICAgICAgIGF1dG9f cHRyJgogICAgICAgIG9wZXJhdG9yPShhdXRvX3B0cjxfVHAxPiYgX19hKSB0aHJvdygpCiAgICAg ICAgewogICAgICAgICAgcmVzZXQoX19hLnJlbGVhc2UoKSk7CiAgICAgICAgICByZXR1cm4gKnRo aXM7CiAgICAgICAgfQojIDI1MSAiL2hvbWUvQWRtaW5pc3RyYXRvci9nY2N0ZXN0aW5nL2xpYi9n Y2MtbGliL2k2ODYtcGMtY3lnd2luLzMuNC9pbmNsdWRlL2MrKy9tZW1vcnkiIDMKICAgICAgfmF1 dG9fcHRyKCkgeyBkZWxldGUgX01fcHRyOyB9CiMgMjYxICIvaG9tZS9BZG1pbmlzdHJhdG9yL2dj Y3Rlc3RpbmcvbGliL2djYy1saWIvaTY4Ni1wYy1jeWd3aW4vMy40L2luY2x1ZGUvYysrL21lbW9y eSIgMwogICAgICBlbGVtZW50X3R5cGUmCiAgICAgIG9wZXJhdG9yKigpIGNvbnN0IHRocm93KCkg eyByZXR1cm4gKl9NX3B0cjsgfQoKCgoKCgoKICAgICAgZWxlbWVudF90eXBlKgogICAgICBvcGVy YXRvci0+KCkgY29uc3QgdGhyb3coKSB7IHJldHVybiBfTV9wdHI7IH0KIyAyODMgIi9ob21lL0Fk bWluaXN0cmF0b3IvZ2NjdGVzdGluZy9saWIvZ2NjLWxpYi9pNjg2LXBjLWN5Z3dpbi8zLjQvaW5j bHVkZS9jKysvbWVtb3J5IiAzCiAgICAgIGVsZW1lbnRfdHlwZSoKICAgICAgZ2V0KCkgY29uc3Qg dGhyb3coKSB7IHJldHVybiBfTV9wdHI7IH0KIyAyOTcgIi9ob21lL0FkbWluaXN0cmF0b3IvZ2Nj dGVzdGluZy9saWIvZ2NjLWxpYi9pNjg2LXBjLWN5Z3dpbi8zLjQvaW5jbHVkZS9jKysvbWVtb3J5 IiAzCiAgICAgIGVsZW1lbnRfdHlwZSoKICAgICAgcmVsZWFzZSgpIHRocm93KCkKICAgICAgewog ICAgICAgIGVsZW1lbnRfdHlwZSogX190bXAgPSBfTV9wdHI7CiAgICAgICAgX01fcHRyID0gMDsK ICAgICAgICByZXR1cm4gX190bXA7CiAgICAgIH0KIyAzMTIgIi9ob21lL0FkbWluaXN0cmF0b3Iv Z2NjdGVzdGluZy9saWIvZ2NjLWxpYi9pNjg2LXBjLWN5Z3dpbi8zLjQvaW5jbHVkZS9jKysvbWVt b3J5IiAzCiAgICAgIHZvaWQKICAgICAgcmVzZXQoZWxlbWVudF90eXBlKiBfX3AgPSAwKSB0aHJv dygpCiAgICAgIHsKICAgICAgICBpZiAoX19wICE9IF9NX3B0cikKICAgICAgICAgIHsKICAgICAg ICAgICAgZGVsZXRlIF9NX3B0cjsKICAgICAgICAgICAgX01fcHRyID0gX19wOwogICAgICAgICAg fQogICAgICB9CiMgMzMzICIvaG9tZS9BZG1pbmlzdHJhdG9yL2djY3Rlc3RpbmcvbGliL2djYy1s aWIvaTY4Ni1wYy1jeWd3aW4vMy40L2luY2x1ZGUvYysrL21lbW9yeSIgMwogICAgICBhdXRvX3B0 cihhdXRvX3B0cl9yZWY8ZWxlbWVudF90eXBlPiBfX3JlZikgdGhyb3coKQogICAgICA6IF9NX3B0 cihfX3JlZi5fTV9wdHIpIHsgfQoKICAgICAgYXV0b19wdHImCiAgICAgIG9wZXJhdG9yPShhdXRv X3B0cl9yZWY8ZWxlbWVudF90eXBlPiBfX3JlZikgdGhyb3coKQogICAgICB7CiAgICAgICAgaWYg KF9fcmVmLl9NX3B0ciAhPSB0aGlzLT5nZXQoKSkKICAgICAgICAgIHsKICAgICAgICAgICAgZGVs ZXRlIF9NX3B0cjsKICAgICAgICAgICAgX01fcHRyID0gX19yZWYuX01fcHRyOwogICAgICAgICAg fQogICAgICAgIHJldHVybiAqdGhpczsKICAgICAgfQoKICAgICAgdGVtcGxhdGU8dHlwZW5hbWUg X1RwMT4KICAgICAgICBvcGVyYXRvciBhdXRvX3B0cl9yZWY8X1RwMT4oKSB0aHJvdygpCiAgICAg ICAgeyByZXR1cm4gYXV0b19wdHJfcmVmPF9UcDE+KHRoaXMtPnJlbGVhc2UoKSk7IH0KCiAgICAg IHRlbXBsYXRlPHR5cGVuYW1lIF9UcDE+CiAgICAgICAgb3BlcmF0b3IgYXV0b19wdHI8X1RwMT4o KSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gYXV0b19wdHI8X1RwMT4odGhpcy0+cmVsZWFzZSgp KTsgfQoKICB9Owp9CiMgNDkgIi9ob21lL0FkbWluaXN0cmF0b3IvZ2NjdGVzdGluZy9saWIvZ2Nj LWxpYi9pNjg2LXBjLWN5Z3dpbi8zLjQvaW5jbHVkZS9jKysvc3RyaW5nIiAyIDMKCgoKIyAxICIv aG9tZS9BZG1pbmlzdHJhdG9yL2djY3Rlc3RpbmcvbGliL2djYy1saWIvaTY4Ni1wYy1jeWd3aW4v My40L2luY2x1ZGUvYysrL2JpdHMvc3RsX2Z1bmN0aW9uLmgiIDEgMwojIDY0ICIvaG9tZS9BZG1p bmlzdHJhdG9yL2djY3Rlc3RpbmcvbGliL2djYy1saWIvaTY4Ni1wYy1jeWd3aW4vMy40L2luY2x1 ZGUvYysrL2JpdHMvc3RsX2Z1bmN0aW9uLmgiIDMKbmFtZXNwYWNlIHN0ZAp7CiMgMTAxICIvaG9t ZS9BZG1pbmlzdHJhdG9yL2djY3Rlc3RpbmcvbGliL2djYy1saWIvaTY4Ni1wYy1jeWd3aW4vMy40 L2luY2x1ZGUvYysrL2JpdHMvc3RsX2Z1bmN0aW9uLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9Bcmcs IGNsYXNzIF9SZXN1bHQ+CnN0cnVjdCB1bmFyeV9mdW5jdGlvbiB7CiAgdHlwZWRlZiBfQXJnIGFy Z3VtZW50X3R5cGU7CiAgdHlwZWRlZiBfUmVzdWx0IHJlc3VsdF90eXBlOwp9OwoKCgoKdGVtcGxh dGUgPGNsYXNzIF9BcmcxLCBjbGFzcyBfQXJnMiwgY2xhc3MgX1Jlc3VsdD4Kc3RydWN0IGJpbmFy eV9mdW5jdGlvbiB7CiAgdHlwZWRlZiBfQXJnMSBmaXJzdF9hcmd1bWVudF90eXBlOwogIHR5cGVk ZWYgX0FyZzIgc2Vjb25kX2FyZ3VtZW50X3R5cGU7CiAgdHlwZWRlZiBfUmVzdWx0IHJlc3VsdF90 eXBlOwp9OwojIDEyNyAiL2hvbWUvQWRtaW5pc3RyYXRvci9nY2N0ZXN0aW5nL2xpYi9nY2MtbGli L2k2ODYtcGMtY3lnd2luLzMuNC9pbmNsdWRlL2MrKy9iaXRzL3N0bF9mdW5jdGlvbi5oIiAzCnRl bXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBwbHVzIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxf VHAsX1RwLF9UcD4gewogIF9UcCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAm IF9feSkgY29uc3QgeyByZXR1cm4gX194ICsgX195OyB9Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9U cD4Kc3RydWN0IG1pbnVzIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLF9UcD4gewog IF9UcCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyBy ZXR1cm4gX194IC0gX195OyB9Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IG11bHRp cGxpZXMgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsX1RwPiB7CiAgX1RwIG9wZXJh dG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3gg KiBfX3k7IH0KfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgZGl2aWRlcyA6IHB1Ymxp YyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxfVHA+IHsKICBfVHAgb3BlcmF0b3IoKShjb25zdCBf VHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCAvIF9feTsgfQp9OwoK CnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBtb2R1bHVzIDogcHVibGljIGJpbmFyeV9mdW5j dGlvbjxfVHAsX1RwLF9UcD4KewogIF9UcCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25z dCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194ICUgX195OyB9Cn07CgoKdGVtcGxhdGUgPGNs YXNzIF9UcD4Kc3RydWN0IG5lZ2F0ZSA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfVHAsX1RwPgp7 CiAgX1RwIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gpIGNvbnN0IHsgcmV0dXJuIC1fX3g7IH0K fTsKIyAxNzMgIi9ob21lL0FkbWluaXN0cmF0b3IvZ2NjdGVzdGluZy9saWIvZ2NjLWxpYi9pNjg2 LXBjLWN5Z3dpbi8zLjQvaW5jbHVkZS9jKysvYml0cy9zdGxfZnVuY3Rpb24uaCIgMwp0ZW1wbGF0 ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgZXF1YWxfdG8gOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9U cCxfVHAsYm9vbD4KewogIGJvb2wgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1Rw JiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCA9PSBfX3k7IH0KfTsKCgp0ZW1wbGF0ZSA8Y2xhc3Mg X1RwPgpzdHJ1Y3Qgbm90X2VxdWFsX3RvIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1Rw LGJvb2w+CnsKICBib29sIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195 KSBjb25zdCB7IHJldHVybiBfX3ggIT0gX195OyB9Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4K c3RydWN0IGdyZWF0ZXIgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsYm9vbD4Kewog IGJvb2wgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsg cmV0dXJuIF9feCA+IF9feTsgfQp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBsZXNz IDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLGJvb2w+CnsKICBib29sIG9wZXJhdG9y KCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggPCBf X3k7IH0KfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgZ3JlYXRlcl9lcXVhbCA6IHB1 YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxib29sPgp7CiAgYm9vbCBvcGVyYXRvcigpKGNv bnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194ID49IF9feTsg fQp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBsZXNzX2VxdWFsIDogcHVibGljIGJp bmFyeV9mdW5jdGlvbjxfVHAsX1RwLGJvb2w+CnsKICBib29sIG9wZXJhdG9yKCkoY29uc3QgX1Rw JiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggPD0gX195OyB9Cn07CiMg MjIyICIvaG9tZS9BZG1pbmlzdHJhdG9yL2djY3Rlc3RpbmcvbGliL2djYy1saWIvaTY4Ni1wYy1j eWd3aW4vMy40L2luY2x1ZGUvYysrL2JpdHMvc3RsX2Z1bmN0aW9uLmgiIDMKdGVtcGxhdGUgPGNs YXNzIF9UcD4Kc3RydWN0IGxvZ2ljYWxfYW5kIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAs X1RwLGJvb2w+CnsKICBib29sIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYg X195KSBjb25zdCB7IHJldHVybiBfX3ggJiYgX195OyB9Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9U cD4Kc3RydWN0IGxvZ2ljYWxfb3IgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsYm9v bD4KewogIGJvb2wgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNv bnN0IHsgcmV0dXJuIF9feCB8fCBfX3k7IH0KfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1 Y3QgbG9naWNhbF9ub3QgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X1RwLGJvb2w+CnsKICBib29s IG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gpIGNvbnN0IHsgcmV0dXJuICFfX3g7IH0KfTsKIyAy NzEgIi9ob21lL0FkbWluaXN0cmF0b3IvZ2NjdGVzdGluZy9saWIvZ2NjLWxpYi9pNjg2LXBjLWN5 Z3dpbi8zLjQvaW5jbHVkZS9jKysvYml0cy9zdGxfZnVuY3Rpb24uaCIgMwp0ZW1wbGF0ZSA8Y2xh c3MgX1ByZWRpY2F0ZT4KY2xhc3MgdW5hcnlfbmVnYXRlCiAgOiBwdWJsaWMgdW5hcnlfZnVuY3Rp b248dHlwZW5hbWUgX1ByZWRpY2F0ZTo6YXJndW1lbnRfdHlwZSwgYm9vbD4gewpwcm90ZWN0ZWQ6 CiAgX1ByZWRpY2F0ZSBfTV9wcmVkOwpwdWJsaWM6CiAgZXhwbGljaXQgdW5hcnlfbmVnYXRlKGNv bnN0IF9QcmVkaWNhdGUmIF9feCkgOiBfTV9wcmVkKF9feCkge30KICBib29sIG9wZXJhdG9yKCko Y29uc3QgdHlwZW5hbWUgX1ByZWRpY2F0ZTo6YXJndW1lbnRfdHlwZSYgX194KSBjb25zdCB7CiAg ICByZXR1cm4gIV9NX3ByZWQoX194KTsKICB9Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9QcmVkaWNh dGU+CmlubGluZSB1bmFyeV9uZWdhdGU8X1ByZWRpY2F0ZT4Kbm90MShjb25zdCBfUHJlZGljYXRl JiBfX3ByZWQpCnsKICByZXR1cm4gdW5hcnlfbmVnYXRlPF9QcmVkaWNhdGU+KF9fcHJlZCk7Cn0K Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1ByZWRpY2F0ZT4KY2xhc3MgYmluYXJ5X25lZ2F0ZQogIDogcHVi bGljIGJpbmFyeV9mdW5jdGlvbjx0eXBlbmFtZSBfUHJlZGljYXRlOjpmaXJzdF9hcmd1bWVudF90 eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBfUHJlZGljYXRlOjpzZWNv bmRfYXJndW1lbnRfdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbD4gewpwcm90 ZWN0ZWQ6CiAgX1ByZWRpY2F0ZSBfTV9wcmVkOwpwdWJsaWM6CiAgZXhwbGljaXQgYmluYXJ5X25l Z2F0ZShjb25zdCBfUHJlZGljYXRlJiBfX3gpIDogX01fcHJlZChfX3gpIHt9CiAgYm9vbCBvcGVy YXRvcigpKGNvbnN0IHR5cGVuYW1lIF9QcmVkaWNhdGU6OmZpcnN0X2FyZ3VtZW50X3R5cGUmIF9f eCwKICAgICAgICAgICAgICAgICAgY29uc3QgdHlwZW5hbWUgX1ByZWRpY2F0ZTo6c2Vjb25kX2Fy Z3VtZW50X3R5cGUmIF9feSkgY29uc3QKICB7CiAgICByZXR1cm4gIV9NX3ByZWQoX194LCBfX3kp OwogIH0KfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1ByZWRpY2F0ZT4KaW5saW5lIGJpbmFyeV9uZWdh dGU8X1ByZWRpY2F0ZT4Kbm90Mihjb25zdCBfUHJlZGljYXRlJiBfX3ByZWQpCnsKICByZXR1cm4g YmluYXJ5X25lZ2F0ZTxfUHJlZGljYXRlPihfX3ByZWQpOwp9CiMgMzQ5ICIvaG9tZS9BZG1pbmlz dHJhdG9yL2djY3Rlc3RpbmcvbGliL2djYy1saWIvaTY4Ni1wYy1jeWd3aW4vMy40L2luY2x1ZGUv YysrL2JpdHMvc3RsX2Z1bmN0aW9uLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9PcGVyYXRpb24+CmNs YXNzIGJpbmRlcjFzdAogIDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPHR5cGVuYW1lIF9PcGVyYXRp b246OnNlY29uZF9hcmd1bWVudF90eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVu YW1lIF9PcGVyYXRpb246OnJlc3VsdF90eXBlPiB7CnByb3RlY3RlZDoKICBfT3BlcmF0aW9uIG9w OwogIHR5cGVuYW1lIF9PcGVyYXRpb246OmZpcnN0X2FyZ3VtZW50X3R5cGUgdmFsdWU7CnB1Ymxp YzoKICBiaW5kZXIxc3QoY29uc3QgX09wZXJhdGlvbiYgX194LAogICAgICAgICAgICBjb25zdCB0 eXBlbmFtZSBfT3BlcmF0aW9uOjpmaXJzdF9hcmd1bWVudF90eXBlJiBfX3kpCiAgICAgIDogb3Ao X194KSwgdmFsdWUoX195KSB7fQogIHR5cGVuYW1lIF9PcGVyYXRpb246OnJlc3VsdF90eXBlCiAg b3BlcmF0b3IoKShjb25zdCB0eXBlbmFtZSBfT3BlcmF0aW9uOjpzZWNvbmRfYXJndW1lbnRfdHlw ZSYgX194KSBjb25zdCB7CiAgICByZXR1cm4gb3AodmFsdWUsIF9feCk7CiAgfQoKCiAgdHlwZW5h bWUgX09wZXJhdGlvbjo6cmVzdWx0X3R5cGUKICBvcGVyYXRvcigpKHR5cGVuYW1lIF9PcGVyYXRp b246OnNlY29uZF9hcmd1bWVudF90eXBlJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBvcCh2YWx1 ZSwgX194KTsKICB9Cgp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfT3BlcmF0aW9uLCBjbGFzcyBfVHA+ CmlubGluZSBiaW5kZXIxc3Q8X09wZXJhdGlvbj4KYmluZDFzdChjb25zdCBfT3BlcmF0aW9uJiBf X2ZuLCBjb25zdCBfVHAmIF9feCkKewogIHR5cGVkZWYgdHlwZW5hbWUgX09wZXJhdGlvbjo6Zmly c3RfYXJndW1lbnRfdHlwZSBfQXJnMV90eXBlOwogIHJldHVybiBiaW5kZXIxc3Q8X09wZXJhdGlv bj4oX19mbiwgX0FyZzFfdHlwZShfX3gpKTsKfQoKCnRlbXBsYXRlIDxjbGFzcyBfT3BlcmF0aW9u PgpjbGFzcyBiaW5kZXIybmQKICA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjx0eXBlbmFtZSBfT3Bl cmF0aW9uOjpmaXJzdF9hcmd1bWVudF90eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgIHR5 cGVuYW1lIF9PcGVyYXRpb246OnJlc3VsdF90eXBlPiB7CnByb3RlY3RlZDoKICBfT3BlcmF0aW9u IG9wOwogIHR5cGVuYW1lIF9PcGVyYXRpb246OnNlY29uZF9hcmd1bWVudF90eXBlIHZhbHVlOwpw dWJsaWM6CiAgYmluZGVyMm5kKGNvbnN0IF9PcGVyYXRpb24mIF9feCwKICAgICAgICAgICAgY29u c3QgdHlwZW5hbWUgX09wZXJhdGlvbjo6c2Vjb25kX2FyZ3VtZW50X3R5cGUmIF9feSkKICAgICAg OiBvcChfX3gpLCB2YWx1ZShfX3kpIHt9CiAgdHlwZW5hbWUgX09wZXJhdGlvbjo6cmVzdWx0X3R5 cGUKICBvcGVyYXRvcigpKGNvbnN0IHR5cGVuYW1lIF9PcGVyYXRpb246OmZpcnN0X2FyZ3VtZW50 X3R5cGUmIF9feCkgY29uc3QgewogICAgcmV0dXJuIG9wKF9feCwgdmFsdWUpOwogIH0KCgogIHR5 cGVuYW1lIF9PcGVyYXRpb246OnJlc3VsdF90eXBlCiAgb3BlcmF0b3IoKSh0eXBlbmFtZSBfT3Bl cmF0aW9uOjpmaXJzdF9hcmd1bWVudF90eXBlJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBvcChf X3gsIHZhbHVlKTsKICB9Cgp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfT3BlcmF0aW9uLCBjbGFzcyBf VHA+CmlubGluZSBiaW5kZXIybmQ8X09wZXJhdGlvbj4KYmluZDJuZChjb25zdCBfT3BlcmF0aW9u JiBfX2ZuLCBjb25zdCBfVHAmIF9feCkKewogIHR5cGVkZWYgdHlwZW5hbWUgX09wZXJhdGlvbjo6 c2Vjb25kX2FyZ3VtZW50X3R5cGUgX0FyZzJfdHlwZTsKICByZXR1cm4gYmluZGVyMm5kPF9PcGVy YXRpb24+KF9fZm4sIF9BcmcyX3R5cGUoX194KSk7Cn0KIyA0MzggIi9ob21lL0FkbWluaXN0cmF0 b3IvZ2NjdGVzdGluZy9saWIvZ2NjLWxpYi9pNjg2LXBjLWN5Z3dpbi8zLjQvaW5jbHVkZS9jKysv Yml0cy9zdGxfZnVuY3Rpb24uaCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX0FyZywgY2xhc3MgX1Jlc3Vs dD4KY2xhc3MgcG9pbnRlcl90b191bmFyeV9mdW5jdGlvbiA6IHB1YmxpYyB1bmFyeV9mdW5jdGlv bjxfQXJnLCBfUmVzdWx0PiB7CnByb3RlY3RlZDoKICBfUmVzdWx0ICgqX01fcHRyKShfQXJnKTsK cHVibGljOgogIHBvaW50ZXJfdG9fdW5hcnlfZnVuY3Rpb24oKSB7fQogIGV4cGxpY2l0IHBvaW50 ZXJfdG9fdW5hcnlfZnVuY3Rpb24oX1Jlc3VsdCAoKl9feCkoX0FyZykpIDogX01fcHRyKF9feCkg e30KICBfUmVzdWx0IG9wZXJhdG9yKCkoX0FyZyBfX3gpIGNvbnN0IHsgcmV0dXJuIF9NX3B0cihf X3gpOyB9Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9BcmcsIGNsYXNzIF9SZXN1bHQ+CmlubGluZSBw b2ludGVyX3RvX3VuYXJ5X2Z1bmN0aW9uPF9BcmcsIF9SZXN1bHQ+IHB0cl9mdW4oX1Jlc3VsdCAo Kl9feCkoX0FyZykpCnsKICByZXR1cm4gcG9pbnRlcl90b191bmFyeV9mdW5jdGlvbjxfQXJnLCBf UmVzdWx0PihfX3gpOwp9CgoKdGVtcGxhdGUgPGNsYXNzIF9BcmcxLCBjbGFzcyBfQXJnMiwgY2xh c3MgX1Jlc3VsdD4KY2xhc3MgcG9pbnRlcl90b19iaW5hcnlfZnVuY3Rpb24gOgogIHB1YmxpYyBi aW5hcnlfZnVuY3Rpb248X0FyZzEsX0FyZzIsX1Jlc3VsdD4gewpwcm90ZWN0ZWQ6CiAgICBfUmVz dWx0ICgqX01fcHRyKShfQXJnMSwgX0FyZzIpOwpwdWJsaWM6CiAgICBwb2ludGVyX3RvX2JpbmFy eV9mdW5jdGlvbigpIHt9CiAgICBleHBsaWNpdCBwb2ludGVyX3RvX2JpbmFyeV9mdW5jdGlvbihf UmVzdWx0ICgqX194KShfQXJnMSwgX0FyZzIpKQogICAgICA6IF9NX3B0cihfX3gpIHt9CiAgICBf UmVzdWx0IG9wZXJhdG9yKCkoX0FyZzEgX194LCBfQXJnMiBfX3kpIGNvbnN0IHsKICAgICAgcmV0 dXJuIF9NX3B0cihfX3gsIF9feSk7CiAgICB9Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9BcmcxLCBj bGFzcyBfQXJnMiwgY2xhc3MgX1Jlc3VsdD4KaW5saW5lIHBvaW50ZXJfdG9fYmluYXJ5X2Z1bmN0 aW9uPF9BcmcxLF9BcmcyLF9SZXN1bHQ+CnB0cl9mdW4oX1Jlc3VsdCAoKl9feCkoX0FyZzEsIF9B cmcyKSkgewogIHJldHVybiBwb2ludGVyX3RvX2JpbmFyeV9mdW5jdGlvbjxfQXJnMSxfQXJnMixf UmVzdWx0PihfX3gpOwp9CgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IF9JZGVudGl0eSA6 IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfVHAsX1RwPiB7CiAgX1RwJiBvcGVyYXRvcigpKF9UcCYg X194KSBjb25zdCB7IHJldHVybiBfX3g7IH0KICBjb25zdCBfVHAmIG9wZXJhdG9yKCkoY29uc3Qg X1RwJiBfX3gpIGNvbnN0IHsgcmV0dXJuIF9feDsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9QYWly PgpzdHJ1Y3QgX1NlbGVjdDFzdCA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfUGFpciwgdHlwZW5h bWUgX1BhaXI6OmZpcnN0X3R5cGU+IHsKICB0eXBlbmFtZSBfUGFpcjo6Zmlyc3RfdHlwZSYgb3Bl cmF0b3IoKShfUGFpciYgX194KSBjb25zdCB7CiAgICByZXR1cm4gX194LmZpcnN0OwogIH0KICBj b25zdCB0eXBlbmFtZSBfUGFpcjo6Zmlyc3RfdHlwZSYgb3BlcmF0b3IoKShjb25zdCBfUGFpciYg X194KSBjb25zdCB7CiAgICByZXR1cm4gX194LmZpcnN0OwogIH0KfTsKCnRlbXBsYXRlIDxjbGFz cyBfUGFpcj4Kc3RydWN0IF9TZWxlY3QybmQgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X1BhaXIs IHR5cGVuYW1lIF9QYWlyOjpzZWNvbmRfdHlwZT4KewogIHR5cGVuYW1lIF9QYWlyOjpzZWNvbmRf dHlwZSYgb3BlcmF0b3IoKShfUGFpciYgX194KSBjb25zdCB7CiAgICByZXR1cm4gX194LnNlY29u ZDsKICB9CiAgY29uc3QgdHlwZW5hbWUgX1BhaXI6OnNlY29uZF90eXBlJiBvcGVyYXRvcigpKGNv bnN0IF9QYWlyJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBfX3guc2Vjb25kOwogIH0KfTsKIyA1 MjggIi9ob21lL0FkbWluaXN0cmF0b3IvZ2NjdGVzdGluZy9saWIvZ2NjLWxpYi9pNjg2LXBjLWN5 Z3dpbi8zLjQvaW5jbHVkZS9jKysvYml0cy9zdGxfZnVuY3Rpb24uaCIgMwp0ZW1wbGF0ZSA8Y2xh c3MgX1JldCwgY2xhc3MgX1RwPgpjbGFzcyBtZW1fZnVuX3QgOiBwdWJsaWMgdW5hcnlfZnVuY3Rp b248X1RwKixfUmV0PiB7CnB1YmxpYzoKICBleHBsaWNpdCBtZW1fZnVuX3QoX1JldCAoX1RwOjoq X19wZikoKSkgOiBfTV9mKF9fcGYpIHt9CiAgX1JldCBvcGVyYXRvcigpKF9UcCogX19wKSBjb25z dCB7IHJldHVybiAoX19wLT4qX01fZikoKTsgfQpwcml2YXRlOgogIF9SZXQgKF9UcDo6Kl9NX2Yp KCk7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcD4KY2xhc3MgY29uc3RfbWVt X2Z1bl90IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPGNvbnN0IF9UcCosX1JldD4gewpwdWJsaWM6 CiAgZXhwbGljaXQgY29uc3RfbWVtX2Z1bl90KF9SZXQgKF9UcDo6Kl9fcGYpKCkgY29uc3QpIDog X01fZihfX3BmKSB7fQogIF9SZXQgb3BlcmF0b3IoKShjb25zdCBfVHAqIF9fcCkgY29uc3QgeyBy ZXR1cm4gKF9fcC0+Kl9NX2YpKCk7IH0KcHJpdmF0ZToKICBfUmV0IChfVHA6OipfTV9mKSgpIGNv bnN0Owp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHA+CmNsYXNzIG1lbV9mdW5f cmVmX3QgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X1RwLF9SZXQ+IHsKcHVibGljOgogIGV4cGxp Y2l0IG1lbV9mdW5fcmVmX3QoX1JldCAoX1RwOjoqX19wZikoKSkgOiBfTV9mKF9fcGYpIHt9CiAg X1JldCBvcGVyYXRvcigpKF9UcCYgX19yKSBjb25zdCB7IHJldHVybiAoX19yLipfTV9mKSgpOyB9 CnByaXZhdGU6CiAgX1JldCAoX1RwOjoqX01fZikoKTsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1Jl dCwgY2xhc3MgX1RwPgpjbGFzcyBjb25zdF9tZW1fZnVuX3JlZl90IDogcHVibGljIHVuYXJ5X2Z1 bmN0aW9uPF9UcCxfUmV0PiB7CnB1YmxpYzoKICBleHBsaWNpdCBjb25zdF9tZW1fZnVuX3JlZl90 KF9SZXQgKF9UcDo6Kl9fcGYpKCkgY29uc3QpIDogX01fZihfX3BmKSB7fQogIF9SZXQgb3BlcmF0 b3IoKShjb25zdCBfVHAmIF9fcikgY29uc3QgeyByZXR1cm4gKF9fci4qX01fZikoKTsgfQpwcml2 YXRlOgogIF9SZXQgKF9UcDo6Kl9NX2YpKCkgY29uc3Q7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9S ZXQsIGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4KY2xhc3MgbWVtX2Z1bjFfdCA6IHB1YmxpYyBiaW5h cnlfZnVuY3Rpb248X1RwKixfQXJnLF9SZXQ+IHsKcHVibGljOgogIGV4cGxpY2l0IG1lbV9mdW4x X3QoX1JldCAoX1RwOjoqX19wZikoX0FyZykpIDogX01fZihfX3BmKSB7fQogIF9SZXQgb3BlcmF0 b3IoKShfVHAqIF9fcCwgX0FyZyBfX3gpIGNvbnN0IHsgcmV0dXJuIChfX3AtPipfTV9mKShfX3gp OyB9CnByaXZhdGU6CiAgX1JldCAoX1RwOjoqX01fZikoX0FyZyk7Cn07CgoKdGVtcGxhdGUgPGNs YXNzIF9SZXQsIGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4KY2xhc3MgY29uc3RfbWVtX2Z1bjFfdCA6 IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248Y29uc3QgX1RwKixfQXJnLF9SZXQ+IHsKcHVibGljOgog IGV4cGxpY2l0IGNvbnN0X21lbV9mdW4xX3QoX1JldCAoX1RwOjoqX19wZikoX0FyZykgY29uc3Qp IDogX01fZihfX3BmKSB7fQogIF9SZXQgb3BlcmF0b3IoKShjb25zdCBfVHAqIF9fcCwgX0FyZyBf X3gpIGNvbnN0CiAgICB7IHJldHVybiAoX19wLT4qX01fZikoX194KTsgfQpwcml2YXRlOgogIF9S ZXQgKF9UcDo6Kl9NX2YpKF9BcmcpIGNvbnN0Owp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBj bGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmNsYXNzIG1lbV9mdW4xX3JlZl90IDogcHVibGljIGJpbmFy eV9mdW5jdGlvbjxfVHAsX0FyZyxfUmV0PiB7CnB1YmxpYzoKICBleHBsaWNpdCBtZW1fZnVuMV9y ZWZfdChfUmV0IChfVHA6OipfX3BmKShfQXJnKSkgOiBfTV9mKF9fcGYpIHt9CiAgX1JldCBvcGVy YXRvcigpKF9UcCYgX19yLCBfQXJnIF9feCkgY29uc3QgeyByZXR1cm4gKF9fci4qX01fZikoX194 KTsgfQpwcml2YXRlOgogIF9SZXQgKF9UcDo6Kl9NX2YpKF9BcmcpOwp9OwoKCnRlbXBsYXRlIDxj bGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmNsYXNzIGNvbnN0X21lbV9mdW4xX3Jl Zl90IDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX0FyZyxfUmV0PiB7CnB1YmxpYzoKICBl eHBsaWNpdCBjb25zdF9tZW1fZnVuMV9yZWZfdChfUmV0IChfVHA6OipfX3BmKShfQXJnKSBjb25z dCkgOiBfTV9mKF9fcGYpIHt9CiAgX1JldCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX19yLCBfQXJn IF9feCkgY29uc3QgeyByZXR1cm4gKF9fci4qX01fZikoX194KTsgfQpwcml2YXRlOgogIF9SZXQg KF9UcDo6Kl9NX2YpKF9BcmcpIGNvbnN0Owp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CmNsYXNz IG1lbV9mdW5fdDx2b2lkLCBfVHA+IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9UcCosdm9pZD4g ewpwdWJsaWM6CiAgZXhwbGljaXQgbWVtX2Z1bl90KHZvaWQgKF9UcDo6Kl9fcGYpKCkpIDogX01f ZihfX3BmKSB7fQogIHZvaWQgb3BlcmF0b3IoKShfVHAqIF9fcCkgY29uc3QgeyAoX19wLT4qX01f ZikoKTsgfQpwcml2YXRlOgogIHZvaWQgKF9UcDo6Kl9NX2YpKCk7Cn07CgoKdGVtcGxhdGUgPGNs YXNzIF9UcD4KY2xhc3MgY29uc3RfbWVtX2Z1bl90PHZvaWQsIF9UcD4gOiBwdWJsaWMgdW5hcnlf ZnVuY3Rpb248Y29uc3QgX1RwKix2b2lkPiB7CnB1YmxpYzoKICBleHBsaWNpdCBjb25zdF9tZW1f ZnVuX3Qodm9pZCAoX1RwOjoqX19wZikoKSBjb25zdCkgOiBfTV9mKF9fcGYpIHt9CiAgdm9pZCBv cGVyYXRvcigpKGNvbnN0IF9UcCogX19wKSBjb25zdCB7IChfX3AtPipfTV9mKSgpOyB9CnByaXZh dGU6CiAgdm9pZCAoX1RwOjoqX01fZikoKSBjb25zdDsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1Rw PgpjbGFzcyBtZW1fZnVuX3JlZl90PHZvaWQsIF9UcD4gOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248 X1RwLHZvaWQ+IHsKcHVibGljOgogIGV4cGxpY2l0IG1lbV9mdW5fcmVmX3Qodm9pZCAoX1RwOjoq X19wZikoKSkgOiBfTV9mKF9fcGYpIHt9CiAgdm9pZCBvcGVyYXRvcigpKF9UcCYgX19yKSBjb25z dCB7IChfX3IuKl9NX2YpKCk7IH0KcHJpdmF0ZToKICB2b2lkIChfVHA6OipfTV9mKSgpOwp9OwoK CnRlbXBsYXRlIDxjbGFzcyBfVHA+CmNsYXNzIGNvbnN0X21lbV9mdW5fcmVmX3Q8dm9pZCwgX1Rw PiA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfVHAsdm9pZD4gewpwdWJsaWM6CiAgZXhwbGljaXQg Y29uc3RfbWVtX2Z1bl9yZWZfdCh2b2lkIChfVHA6OipfX3BmKSgpIGNvbnN0KSA6IF9NX2YoX19w Zikge30KICB2b2lkIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3IpIGNvbnN0IHsgKF9fci4qX01f ZikoKTsgfQpwcml2YXRlOgogIHZvaWQgKF9UcDo6Kl9NX2YpKCkgY29uc3Q7Cn07CgoKdGVtcGxh dGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4KY2xhc3MgbWVtX2Z1bjFfdDx2b2lkLCBfVHAsIF9B cmc+IDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAqLF9Bcmcsdm9pZD4gewpwdWJsaWM6CiAg ZXhwbGljaXQgbWVtX2Z1bjFfdCh2b2lkIChfVHA6OipfX3BmKShfQXJnKSkgOiBfTV9mKF9fcGYp IHt9CiAgdm9pZCBvcGVyYXRvcigpKF9UcCogX19wLCBfQXJnIF9feCkgY29uc3QgeyAoX19wLT4q X01fZikoX194KTsgfQpwcml2YXRlOgogIHZvaWQgKF9UcDo6Kl9NX2YpKF9BcmcpOwp9OwoKCnRl bXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmNsYXNzIGNvbnN0X21lbV9mdW4xX3Q8dm9p ZCwgX1RwLCBfQXJnPgogIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxjb25zdCBfVHAqLF9Bcmcs dm9pZD4gewpwdWJsaWM6CiAgZXhwbGljaXQgY29uc3RfbWVtX2Z1bjFfdCh2b2lkIChfVHA6Oipf X3BmKShfQXJnKSBjb25zdCkgOiBfTV9mKF9fcGYpIHt9CiAgdm9pZCBvcGVyYXRvcigpKGNvbnN0 IF9UcCogX19wLCBfQXJnIF9feCkgY29uc3QgeyAoX19wLT4qX01fZikoX194KTsgfQpwcml2YXRl OgogIHZvaWQgKF9UcDo6Kl9NX2YpKF9BcmcpIGNvbnN0Owp9OwoKCnRlbXBsYXRlIDxjbGFzcyBf VHAsIGNsYXNzIF9Bcmc+CmNsYXNzIG1lbV9mdW4xX3JlZl90PHZvaWQsIF9UcCwgX0FyZz4KICA6 IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9Bcmcsdm9pZD4gewpwdWJsaWM6CiAgZXhwbGlj aXQgbWVtX2Z1bjFfcmVmX3Qodm9pZCAoX1RwOjoqX19wZikoX0FyZykpIDogX01fZihfX3BmKSB7 fQogIHZvaWQgb3BlcmF0b3IoKShfVHAmIF9fciwgX0FyZyBfX3gpIGNvbnN0IHsgKF9fci4qX01f ZikoX194KTsgfQpwcml2YXRlOgogIHZvaWQgKF9UcDo6Kl9NX2YpKF9BcmcpOwp9OwoKCnRlbXBs YXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmNsYXNzIGNvbnN0X21lbV9mdW4xX3JlZl90PHZv aWQsIF9UcCwgX0FyZz4KICA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9Bcmcsdm9pZD4g ewpwdWJsaWM6CiAgZXhwbGljaXQgY29uc3RfbWVtX2Z1bjFfcmVmX3Qodm9pZCAoX1RwOjoqX19w ZikoX0FyZykgY29uc3QpIDogX01fZihfX3BmKSB7fQogIHZvaWQgb3BlcmF0b3IoKShjb25zdCBf VHAmIF9fciwgX0FyZyBfX3gpIGNvbnN0IHsgKF9fci4qX01fZikoX194KTsgfQpwcml2YXRlOgog IHZvaWQgKF9UcDo6Kl9NX2YpKF9BcmcpIGNvbnN0Owp9OwoKCgoKCnRlbXBsYXRlIDxjbGFzcyBf UmV0LCBjbGFzcyBfVHA+CmlubGluZSBtZW1fZnVuX3Q8X1JldCxfVHA+IG1lbV9mdW4oX1JldCAo X1RwOjoqX19mKSgpKQogIHsgcmV0dXJuIG1lbV9mdW5fdDxfUmV0LF9UcD4oX19mKTsgfQoKdGVt cGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcD4KaW5saW5lIGNvbnN0X21lbV9mdW5fdDxfUmV0 LF9UcD4gbWVtX2Z1bihfUmV0IChfVHA6OipfX2YpKCkgY29uc3QpCiAgeyByZXR1cm4gY29uc3Rf bWVtX2Z1bl90PF9SZXQsX1RwPihfX2YpOyB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3Mg X1RwPgppbmxpbmUgbWVtX2Z1bl9yZWZfdDxfUmV0LF9UcD4gbWVtX2Z1bl9yZWYoX1JldCAoX1Rw OjoqX19mKSgpKQogIHsgcmV0dXJuIG1lbV9mdW5fcmVmX3Q8X1JldCxfVHA+KF9fZik7IH0KCnRl bXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHA+CmlubGluZSBjb25zdF9tZW1fZnVuX3JlZl90 PF9SZXQsX1RwPiBtZW1fZnVuX3JlZihfUmV0IChfVHA6OipfX2YpKCkgY29uc3QpCiAgeyByZXR1 cm4gY29uc3RfbWVtX2Z1bl9yZWZfdDxfUmV0LF9UcD4oX19mKTsgfQoKdGVtcGxhdGUgPGNsYXNz IF9SZXQsIGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4KaW5saW5lIG1lbV9mdW4xX3Q8X1JldCxfVHAs X0FyZz4gbWVtX2Z1bihfUmV0IChfVHA6OipfX2YpKF9BcmcpKQogIHsgcmV0dXJuIG1lbV9mdW4x X3Q8X1JldCxfVHAsX0FyZz4oX19mKTsgfQoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9U cCwgY2xhc3MgX0FyZz4KaW5saW5lIGNvbnN0X21lbV9mdW4xX3Q8X1JldCxfVHAsX0FyZz4gbWVt X2Z1bihfUmV0IChfVHA6OipfX2YpKF9BcmcpIGNvbnN0KQogIHsgcmV0dXJuIGNvbnN0X21lbV9m dW4xX3Q8X1JldCxfVHAsX0FyZz4oX19mKTsgfQoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNz IF9UcCwgY2xhc3MgX0FyZz4KaW5saW5lIG1lbV9mdW4xX3JlZl90PF9SZXQsX1RwLF9Bcmc+IG1l bV9mdW5fcmVmKF9SZXQgKF9UcDo6Kl9fZikoX0FyZykpCiAgeyByZXR1cm4gbWVtX2Z1bjFfcmVm X3Q8X1JldCxfVHAsX0FyZz4oX19mKTsgfQoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9U cCwgY2xhc3MgX0FyZz4KaW5saW5lIGNvbnN0X21lbV9mdW4xX3JlZl90PF9SZXQsX1RwLF9Bcmc+ Cm1lbV9mdW5fcmVmKF9SZXQgKF9UcDo6Kl9fZikoX0FyZykgY29uc3QpCiAgeyByZXR1cm4gY29u c3RfbWVtX2Z1bjFfcmVmX3Q8X1JldCxfVHAsX0FyZz4oX19mKTsgfQoKCgp9CiMgNTMgIi9ob21l L0FkbWluaXN0cmF0b3IvZ2NjdGVzdGluZy9saWIvZ2NjLWxpYi9pNjg2LXBjLWN5Z3dpbi8zLjQv aW5jbHVkZS9jKysvc3RyaW5nIiAyIDMKIyAxICIvaG9tZS9BZG1pbmlzdHJhdG9yL2djY3Rlc3Rp bmcvbGliL2djYy1saWIvaTY4Ni1wYy1jeWd3aW4vMy40L2luY2x1ZGUvYysrL2JpdHMvYmFzaWNf c3RyaW5nLmgiIDEgMwojIDQ0ICIvaG9tZS9BZG1pbmlzdHJhdG9yL2djY3Rlc3RpbmcvbGliL2dj Yy1saWIvaTY4Ni1wYy1jeWd3aW4vMy40L2luY2x1ZGUvYysrL2JpdHMvYmFzaWNfc3RyaW5nLmgi IDMKCgoKbmFtZXNwYWNlIHN0ZAp7CiMgMTA4ICIvaG9tZS9BZG1pbmlzdHJhdG9yL2djY3Rlc3Rp bmcvbGliL2djYy1saWIvaTY4Ni1wYy1jeWd3aW4vMy40L2luY2x1ZGUvYysrL2JpdHMvYmFzaWNf c3RyaW5nLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMs IHR5cGVuYW1lIF9BbGxvYz4KICAgIGNsYXNzIGJhc2ljX3N0cmluZwogICAgewoKICAgIHB1Ymxp YzoKICAgICAgdHlwZWRlZiBfVHJhaXRzIHRyYWl0c190eXBlOwogICAgICB0eXBlZGVmIHR5cGVu YW1lIF9UcmFpdHM6OmNoYXJfdHlwZSB2YWx1ZV90eXBlOwogICAgICB0eXBlZGVmIF9BbGxvYyBh bGxvY2F0b3JfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2M6OnNpemVfdHlwZSBz aXplX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjpkaWZmZXJlbmNlX3R5cGUg ZGlmZmVyZW5jZV90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6cmVmZXJlbmNl IHJlZmVyZW5jZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2M6OmNvbnN0X3JlZmVyZW5j ZSBjb25zdF9yZWZlcmVuY2U7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjpwb2ludGVy IHBvaW50ZXI7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjpjb25zdF9wb2ludGVyIGNv bnN0X3BvaW50ZXI7CiAgICAgIHR5cGVkZWYgX19nbnVfY3h4OjpfX25vcm1hbF9pdGVyYXRvcjxw b2ludGVyLCBiYXNpY19zdHJpbmc+IGl0ZXJhdG9yOwogICAgICB0eXBlZGVmIF9fZ251X2N4eDo6 X19ub3JtYWxfaXRlcmF0b3I8Y29uc3RfcG9pbnRlciwgYmFzaWNfc3RyaW5nPgogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdF9p dGVyYXRvcjsKICAgICAgdHlwZWRlZiBzdGQ6OnJldmVyc2VfaXRlcmF0b3I8Y29uc3RfaXRlcmF0 b3I+IGNvbnN0X3JldmVyc2VfaXRlcmF0b3I7CiAgICAgIHR5cGVkZWYgc3RkOjpyZXZlcnNlX2l0 ZXJhdG9yPGl0ZXJhdG9yPiByZXZlcnNlX2l0ZXJhdG9yOwoKICAgIHByaXZhdGU6CiMgMTQzICIv aG9tZS9BZG1pbmlzdHJhdG9yL2djY3Rlc3RpbmcvbGliL2djYy1saWIvaTY4Ni1wYy1jeWd3aW4v My40L2luY2x1ZGUvYysrL2JpdHMvYmFzaWNfc3RyaW5nLmgiIDMKICAgICAgc3RydWN0IF9SZXAK ICAgICAgewoKICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6dGVtcGxhdGUgcmViaW5k PGNoYXI+OjpvdGhlciBfUmF3X2J5dGVzX2FsbG9jOwojIDE2MSAiL2hvbWUvQWRtaW5pc3RyYXRv ci9nY2N0ZXN0aW5nL2xpYi9nY2MtbGliL2k2ODYtcGMtY3lnd2luLzMuNC9pbmNsdWRlL2MrKy9i aXRzL2Jhc2ljX3N0cmluZy5oIiAzCiAgICAgICAgc3RhdGljIGNvbnN0IHNpemVfdHlwZSBfU19t YXhfc2l6ZTsKICAgICAgICBzdGF0aWMgY29uc3QgX0NoYXJUIF9TX3Rlcm1pbmFsOwoKICAgICAg ICBzaXplX3R5cGUgX01fbGVuZ3RoOwogICAgICAgIHNpemVfdHlwZSBfTV9jYXBhY2l0eTsKICAg ICAgICBfQXRvbWljX3dvcmQgX01fcmVmZXJlbmNlczsKCiAgICAgICAgYm9vbAogICAgICAgIF9N X2lzX2xlYWtlZCgpIGNvbnN0CiAgICAgICAgeyByZXR1cm4gX01fcmVmZXJlbmNlcyA8IDA7IH0K CiAgICAgICAgYm9vbAogICAgICAgIF9NX2lzX3NoYXJlZCgpIGNvbnN0CiAgICAgICAgeyByZXR1 cm4gX01fcmVmZXJlbmNlcyA+IDA7IH0KCiAgICAgICAgdm9pZAogICAgICAgIF9NX3NldF9sZWFr ZWQoKQogICAgICAgIHsgX01fcmVmZXJlbmNlcyA9IC0xOyB9CgogICAgICAgIHZvaWQKICAgICAg ICBfTV9zZXRfc2hhcmFibGUoKQogICAgICAgIHsgX01fcmVmZXJlbmNlcyA9IDA7IH0KCiAgICAg ICAgX0NoYXJUKgogICAgICAgIF9NX3JlZmRhdGEoKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4g cmVpbnRlcnByZXRfY2FzdDxfQ2hhclQqPih0aGlzICsgMSk7IH0KCiAgICAgICAgX0NoYXJUJgog ICAgICAgIG9wZXJhdG9yW10oc2l6ZV90IF9fcykgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIF9N X3JlZmRhdGEoKSBbX19zXTsgfQoKICAgICAgICBfQ2hhclQqCiAgICAgICAgX01fZ3JhYihjb25z dCBfQWxsb2MmIF9fYWxsb2MxLCBjb25zdCBfQWxsb2MmIF9fYWxsb2MyKQogICAgICAgIHsKICAg ICAgICAgIHJldHVybiAoIV9NX2lzX2xlYWtlZCgpICYmIF9fYWxsb2MxID09IF9fYWxsb2MyKQog ICAgICAgICAgICAgICAgICA/IF9NX3JlZmNvcHkoKSA6IF9NX2Nsb25lKF9fYWxsb2MxKTsKICAg ICAgICB9CgoKICAgICAgICBzdGF0aWMgX1JlcCoKICAgICAgICBfU19jcmVhdGUoc2l6ZV90LCBj b25zdCBfQWxsb2MmKTsKCiAgICAgICAgdm9pZAogICAgICAgIF9NX2Rpc3Bvc2UoY29uc3QgX0Fs bG9jJiBfX2EpCiAgICAgICAgewogICAgICAgICAgaWYgKF9fZXhjaGFuZ2VfYW5kX2FkZCgmX01f cmVmZXJlbmNlcywgLTEpIDw9IDApCiAgICAgICAgICAgIF9NX2Rlc3Ryb3koX19hKTsKICAgICAg ICB9CgogICAgICAgIHZvaWQKICAgICAgICBfTV9kZXN0cm95KGNvbnN0IF9BbGxvYyYpIHRocm93 KCk7CgogICAgICAgIF9DaGFyVCoKICAgICAgICBfTV9yZWZjb3B5KCkgdGhyb3coKQogICAgICAg IHsKICAgICAgICAgIF9fYXRvbWljX2FkZCgmX01fcmVmZXJlbmNlcywgMSk7CiAgICAgICAgICBy ZXR1cm4gX01fcmVmZGF0YSgpOwogICAgICAgIH0KCiAgICAgICAgX0NoYXJUKgogICAgICAgIF9N X2Nsb25lKGNvbnN0IF9BbGxvYyYsIHNpemVfdHlwZSBfX3JlcyA9IDApOwogICAgICB9OwoKCiAg ICAgIHN0cnVjdCBfQWxsb2NfaGlkZXIgOiBfQWxsb2MKICAgICAgewogICAgICAgIF9BbGxvY19o aWRlcihfQ2hhclQqIF9fZGF0LCBjb25zdCBfQWxsb2MmIF9fYSkKICAgICAgICA6IF9BbGxvYyhf X2EpLCBfTV9wKF9fZGF0KSB7IH0KCiAgICAgICAgX0NoYXJUKiBfTV9wOwogICAgICB9OwoKICAg IHB1YmxpYzoKCgoKICAgICAgc3RhdGljIGNvbnN0IHNpemVfdHlwZSBucG9zID0gc3RhdGljX2Nh c3Q8c2l6ZV90eXBlPigtMSk7CgogICAgcHJpdmF0ZToKCiAgICAgIG11dGFibGUgX0FsbG9jX2hp ZGVyIF9NX2RhdGFwbHVzOwoKCgogICAgICBzdGF0aWMgc2l6ZV90eXBlIF9TX2VtcHR5X3JlcF9z dG9yYWdlWyhzaXplb2YoX1JlcCkgKyBzaXplb2YoX0NoYXJUKSArIHNpemVvZihzaXplX3R5cGUp IC0gMSkvc2l6ZW9mKHNpemVfdHlwZSldOwoKICAgICAgX0NoYXJUKgogICAgICBfTV9kYXRhKCkg Y29uc3QKICAgICAgeyByZXR1cm4gX01fZGF0YXBsdXMuX01fcDsgfQoKICAgICAgX0NoYXJUKgog ICAgICBfTV9kYXRhKF9DaGFyVCogX19wKQogICAgICB7IHJldHVybiAoX01fZGF0YXBsdXMuX01f cCA9IF9fcCk7IH0KCiAgICAgIF9SZXAqCiAgICAgIF9NX3JlcCgpIGNvbnN0CiAgICAgIHsgcmV0 dXJuICYoKHJlaW50ZXJwcmV0X2Nhc3Q8X1JlcCo+IChfTV9kYXRhKCkpKVstMV0pOyB9CgoKCiAg ICAgIGl0ZXJhdG9yCiAgICAgIF9NX2liZWdpbigpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKF9N X2RhdGEoKSk7IH0KCiAgICAgIGl0ZXJhdG9yCiAgICAgIF9NX2llbmQoKSBjb25zdCB7IHJldHVy biBpdGVyYXRvcihfTV9kYXRhKCkgKyB0aGlzLT5zaXplKCkpOyB9CgogICAgICB2b2lkCiAgICAg IF9NX2xlYWsoKQogICAgICB7CiAgICAgICAgaWYgKCFfTV9yZXAoKS0+X01faXNfbGVha2VkKCkp CiAgICAgICAgICBfTV9sZWFrX2hhcmQoKTsKICAgICAgfQoKICAgICAgaXRlcmF0b3IKICAgICAg X01fY2hlY2soc2l6ZV90eXBlIF9fcG9zKSBjb25zdAogICAgICB7CiAgICAgICAgaWYgKF9fcG9z ID4gdGhpcy0+c2l6ZSgpKQogICAgICAgICAgX190aHJvd19vdXRfb2ZfcmFuZ2UoImJhc2ljX3N0 cmluZzo6X01fY2hlY2siKTsKICAgICAgICByZXR1cm4gX01faWJlZ2luKCkgKyBfX3BvczsKICAg ICAgfQoKCiAgICAgIGl0ZXJhdG9yCiAgICAgIF9NX2ZvbGQoc2l6ZV90eXBlIF9fcG9zLCBzaXpl X3R5cGUgX19vZmYpIGNvbnN0CiAgICAgIHsKICAgICAgICBib29sIF9fdGVzdG9mZiA9IF9fb2Zm IDwgdGhpcy0+c2l6ZSgpIC0gX19wb3M7CiAgICAgICAgc2l6ZV90eXBlIF9fbmV3b2ZmID0gX190 ZXN0b2ZmID8gX19vZmYgOiB0aGlzLT5zaXplKCkgLSBfX3BvczsKICAgICAgICByZXR1cm4gKF9N X2liZWdpbigpICsgX19wb3MgKyBfX25ld29mZik7CiAgICAgIH0KCgoKICAgICAgdGVtcGxhdGU8 Y2xhc3MgX0l0ZXJhdG9yPgogICAgICAgIHN0YXRpYyB2b2lkCiAgICAgICAgX1NfY29weV9jaGFy cyhfQ2hhclQqIF9fcCwgX0l0ZXJhdG9yIF9fazEsIF9JdGVyYXRvciBfX2syKQogICAgICAgIHsK ICAgICAgICAgIGZvciAoOyBfX2sxICE9IF9fazI7ICsrX19rMSwgKytfX3ApCiAgICAgICAgICAg IHRyYWl0c190eXBlOjphc3NpZ24oKl9fcCwgKl9fazEpOwogICAgICAgIH0KCiAgICAgIHN0YXRp YyB2b2lkCiAgICAgIF9TX2NvcHlfY2hhcnMoX0NoYXJUKiBfX3AsIGl0ZXJhdG9yIF9fazEsIGl0 ZXJhdG9yIF9fazIpCiAgICAgIHsgX1NfY29weV9jaGFycyhfX3AsIF9fazEuYmFzZSgpLCBfX2sy LmJhc2UoKSk7IH0KCiAgICAgIHN0YXRpYyB2b2lkCiAgICAgIF9TX2NvcHlfY2hhcnMoX0NoYXJU KiBfX3AsIGNvbnN0X2l0ZXJhdG9yIF9fazEsIGNvbnN0X2l0ZXJhdG9yIF9fazIpCiAgICAgIHsg X1NfY29weV9jaGFycyhfX3AsIF9fazEuYmFzZSgpLCBfX2syLmJhc2UoKSk7IH0KCiAgICAgIHN0 YXRpYyB2b2lkCiAgICAgIF9TX2NvcHlfY2hhcnMoX0NoYXJUKiBfX3AsIF9DaGFyVCogX19rMSwg X0NoYXJUKiBfX2syKQogICAgICB7IHRyYWl0c190eXBlOjpjb3B5KF9fcCwgX19rMSwgX19rMiAt IF9fazEpOyB9CgogICAgICBzdGF0aWMgdm9pZAogICAgICBfU19jb3B5X2NoYXJzKF9DaGFyVCog X19wLCBjb25zdCBfQ2hhclQqIF9fazEsIGNvbnN0IF9DaGFyVCogX19rMikKICAgICAgeyB0cmFp dHNfdHlwZTo6Y29weShfX3AsIF9fazEsIF9fazIgLSBfX2sxKTsgfQoKICAgICAgdm9pZAogICAg ICBfTV9tdXRhdGUoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19sZW4xLCBzaXplX3R5cGUg X19sZW4yKTsKCiAgICAgIHZvaWQKICAgICAgX01fbGVha19oYXJkKCk7CgogICAgICBzdGF0aWMg X1JlcCYKICAgICAgX1NfZW1wdHlfcmVwKCkKICAgICAgeyByZXR1cm4gKnJlaW50ZXJwcmV0X2Nh c3Q8X1JlcCo+KCZfU19lbXB0eV9yZXBfc3RvcmFnZSk7IH0KCiAgICBwdWJsaWM6CgoKCgogICAg ICBpbmxpbmUKICAgICAgYmFzaWNfc3RyaW5nKCk7CgogICAgICBleHBsaWNpdAogICAgICBiYXNp Y19zdHJpbmcoY29uc3QgX0FsbG9jJiBfX2EpOwoKCiAgICAgIGJhc2ljX3N0cmluZyhjb25zdCBi YXNpY19zdHJpbmcmIF9fc3RyKTsKICAgICAgYmFzaWNfc3RyaW5nKGNvbnN0IGJhc2ljX3N0cmlu ZyYgX19zdHIsIHNpemVfdHlwZSBfX3BvcywKICAgICAgICAgICAgICAgICAgIHNpemVfdHlwZSBf X24gPSBucG9zKTsKICAgICAgYmFzaWNfc3RyaW5nKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIs IHNpemVfdHlwZSBfX3BvcywKICAgICAgICAgICAgICAgICAgIHNpemVfdHlwZSBfX24sIGNvbnN0 IF9BbGxvYyYgX19hKTsKCiAgICAgIGJhc2ljX3N0cmluZyhjb25zdCBfQ2hhclQqIF9fcywgc2l6 ZV90eXBlIF9fbiwKICAgICAgICAgICAgICAgICAgIGNvbnN0IF9BbGxvYyYgX19hID0gX0FsbG9j KCkpOwogICAgICBiYXNpY19zdHJpbmcoY29uc3QgX0NoYXJUKiBfX3MsIGNvbnN0IF9BbGxvYyYg X19hID0gX0FsbG9jKCkpOwogICAgICBiYXNpY19zdHJpbmcoc2l6ZV90eXBlIF9fbiwgX0NoYXJU IF9fYywgY29uc3QgX0FsbG9jJiBfX2EgPSBfQWxsb2MoKSk7CgogICAgICB0ZW1wbGF0ZTxjbGFz cyBfSW5wdXRJdGVyYXRvcj4KICAgICAgICBiYXNpY19zdHJpbmcoX0lucHV0SXRlcmF0b3IgX19i ZWcsIF9JbnB1dEl0ZXJhdG9yIF9fZW5kLAogICAgICAgICAgICAgICAgICAgICBjb25zdCBfQWxs b2MmIF9fYSA9IF9BbGxvYygpKTsKCiAgICAgIH5iYXNpY19zdHJpbmcoKQogICAgICB7IF9NX3Jl cCgpLT5fTV9kaXNwb3NlKHRoaXMtPmdldF9hbGxvY2F0b3IoKSk7IH0KCiAgICAgIGJhc2ljX3N0 cmluZyYKICAgICAgb3BlcmF0b3I9KGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIpIHsgcmV0dXJu IHRoaXMtPmFzc2lnbihfX3N0cik7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgb3BlcmF0 b3I9KGNvbnN0IF9DaGFyVCogX19zKSB7IHJldHVybiB0aGlzLT5hc3NpZ24oX19zKTsgfQoKICAg ICAgYmFzaWNfc3RyaW5nJgogICAgICBvcGVyYXRvcj0oX0NoYXJUIF9fYykgeyByZXR1cm4gdGhp cy0+YXNzaWduKDEsIF9fYyk7IH0KCgogICAgICBpdGVyYXRvcgogICAgICBiZWdpbigpCiAgICAg IHsKICAgICAgICBfTV9sZWFrKCk7CiAgICAgICAgcmV0dXJuIGl0ZXJhdG9yKF9NX2RhdGEoKSk7 CiAgICAgIH0KCiAgICAgIGNvbnN0X2l0ZXJhdG9yCiAgICAgIGJlZ2luKCkgY29uc3QKICAgICAg eyByZXR1cm4gY29uc3RfaXRlcmF0b3IoX01fZGF0YSgpKTsgfQoKICAgICAgaXRlcmF0b3IKICAg ICAgZW5kKCkKICAgICAgewogICAgICAgICBfTV9sZWFrKCk7CiAgICAgICAgIHJldHVybiBpdGVy YXRvcihfTV9kYXRhKCkgKyB0aGlzLT5zaXplKCkpOwogICAgICB9CgogICAgICBjb25zdF9pdGVy YXRvcgogICAgICBlbmQoKSBjb25zdAogICAgICB7IHJldHVybiBjb25zdF9pdGVyYXRvcihfTV9k YXRhKCkgKyB0aGlzLT5zaXplKCkpOyB9CgogICAgICByZXZlcnNlX2l0ZXJhdG9yCiAgICAgIHJi ZWdpbigpCiAgICAgIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IodGhpcy0+ZW5kKCkpOyB9Cgog ICAgICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yCiAgICAgIHJiZWdpbigpIGNvbnN0CiAgICAgIHsg cmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IodGhpcy0+ZW5kKCkpOyB9CgogICAgICByZXZl cnNlX2l0ZXJhdG9yCiAgICAgIHJlbmQoKQogICAgICB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9y KHRoaXMtPmJlZ2luKCkpOyB9CgogICAgICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yCiAgICAgIHJl bmQoKSBjb25zdAogICAgICB7IHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKHRoaXMtPmJl Z2luKCkpOyB9CgogICAgcHVibGljOgoKICAgICAgc2l6ZV90eXBlCiAgICAgIHNpemUoKSBjb25z dCB7IHJldHVybiBfTV9yZXAoKS0+X01fbGVuZ3RoOyB9CgogICAgICBzaXplX3R5cGUKICAgICAg bGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gX01fcmVwKCktPl9NX2xlbmd0aDsgfQoKICAgICAgc2l6 ZV90eXBlCiAgICAgIG1heF9zaXplKCkgY29uc3QgeyByZXR1cm4gX1JlcDo6X1NfbWF4X3NpemU7 IH0KCiAgICAgIHZvaWQKICAgICAgcmVzaXplKHNpemVfdHlwZSBfX24sIF9DaGFyVCBfX2MpOwoK ICAgICAgdm9pZAogICAgICByZXNpemUoc2l6ZV90eXBlIF9fbikgeyB0aGlzLT5yZXNpemUoX19u LCBfQ2hhclQoKSk7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBjYXBhY2l0eSgpIGNvbnN0IHsg cmV0dXJuIF9NX3JlcCgpLT5fTV9jYXBhY2l0eTsgfQoKICAgICAgdm9pZAogICAgICByZXNlcnZl KHNpemVfdHlwZSBfX3Jlc19hcmcgPSAwKTsKCiAgICAgIHZvaWQKICAgICAgY2xlYXIoKSB7IF9N X211dGF0ZSgwLCB0aGlzLT5zaXplKCksIDApOyB9CgogICAgICBib29sCiAgICAgIGVtcHR5KCkg Y29uc3QgeyByZXR1cm4gdGhpcy0+c2l6ZSgpID09IDA7IH0KCgogICAgICBjb25zdF9yZWZlcmVu Y2UKICAgICAgb3BlcmF0b3JbXSAoc2l6ZV90eXBlIF9fcG9zKSBjb25zdAogICAgICB7IHJldHVy biBfTV9kYXRhKClbX19wb3NdOyB9CgogICAgICByZWZlcmVuY2UKICAgICAgb3BlcmF0b3JbXShz aXplX3R5cGUgX19wb3MpCiAgICAgIHsKICAgICAgICBfTV9sZWFrKCk7CiAgICAgICAgcmV0dXJu IF9NX2RhdGEoKVtfX3Bvc107CiAgICAgIH0KCiAgICAgIGNvbnN0X3JlZmVyZW5jZQogICAgICBh dChzaXplX3R5cGUgX19uKSBjb25zdAogICAgICB7CiAgICAgICAgaWYgKF9fbiA+PSB0aGlzLT5z aXplKCkpCiAgICAgICAgICBfX3Rocm93X291dF9vZl9yYW5nZSgiYmFzaWNfc3RyaW5nOjphdCIp OwogICAgICAgIHJldHVybiBfTV9kYXRhKClbX19uXTsKICAgICAgfQoKICAgICAgcmVmZXJlbmNl CiAgICAgIGF0KHNpemVfdHlwZSBfX24pCiAgICAgIHsKICAgICAgICBpZiAoX19uID49IHNpemUo KSkKICAgICAgICAgIF9fdGhyb3dfb3V0X29mX3JhbmdlKCJiYXNpY19zdHJpbmc6OmF0Iik7CiAg ICAgICAgX01fbGVhaygpOwogICAgICAgIHJldHVybiBfTV9kYXRhKClbX19uXTsKICAgICAgfQoK CiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgb3BlcmF0b3IrPShjb25zdCBiYXNpY19zdHJpbmcm IF9fc3RyKSB7IHJldHVybiB0aGlzLT5hcHBlbmQoX19zdHIpOyB9CgogICAgICBiYXNpY19zdHJp bmcmCiAgICAgIG9wZXJhdG9yKz0oY29uc3QgX0NoYXJUKiBfX3MpIHsgcmV0dXJuIHRoaXMtPmFw cGVuZChfX3MpOyB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIG9wZXJhdG9yKz0oX0NoYXJU IF9fYykgeyByZXR1cm4gdGhpcy0+YXBwZW5kKHNpemVfdHlwZSgxKSwgX19jKTsgfQoKICAgICAg YmFzaWNfc3RyaW5nJgogICAgICBhcHBlbmQoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cik7Cgog ICAgICBiYXNpY19zdHJpbmcmCiAgICAgIGFwcGVuZChjb25zdCBiYXNpY19zdHJpbmcmIF9fc3Ry LCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24pOwoKICAgICAgYmFzaWNfc3RyaW5nJgog ICAgICBhcHBlbmQoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX24pOwoKICAgICAgYmFz aWNfc3RyaW5nJgogICAgICBhcHBlbmQoY29uc3QgX0NoYXJUKiBfX3MpCiAgICAgIHsgcmV0dXJu IHRoaXMtPmFwcGVuZChfX3MsIHRyYWl0c190eXBlOjpsZW5ndGgoX19zKSk7IH0KCiAgICAgIGJh c2ljX3N0cmluZyYKICAgICAgYXBwZW5kKHNpemVfdHlwZSBfX24sIF9DaGFyVCBfX2MpOwoKICAg ICAgdGVtcGxhdGU8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgICAgICAgYmFzaWNfc3RyaW5nJgog ICAgICAgIGFwcGVuZChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xh c3QpCiAgICAgICAgeyByZXR1cm4gdGhpcy0+cmVwbGFjZShfTV9pZW5kKCksIF9NX2llbmQoKSwg X19maXJzdCwgX19sYXN0KTsgfQoKICAgICAgdm9pZAogICAgICBwdXNoX2JhY2soX0NoYXJUIF9f YykKICAgICAgeyB0aGlzLT5yZXBsYWNlKF9NX2llbmQoKSwgX01faWVuZCgpLCAxLCBfX2MpOyB9 CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIGFzc2lnbihjb25zdCBiYXNpY19zdHJpbmcmIF9f c3RyKTsKCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgYXNzaWduKGNvbnN0IGJhc2ljX3N0cmlu ZyYgX19zdHIsIHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikKICAgICAgewogICAgICAg IGNvbnN0IHNpemVfdHlwZSBfX3N0cnNpemUgPSBfX3N0ci5zaXplKCk7CiAgICAgICAgaWYgKF9f cG9zID4gX19zdHJzaXplKQogICAgICAgICAgX190aHJvd19vdXRfb2ZfcmFuZ2UoImJhc2ljX3N0 cmluZzo6YXNzaWduIik7CiAgICAgICAgY29uc3QgYm9vbCBfX3Rlc3RuID0gX19uIDwgX19zdHJz aXplIC0gX19wb3M7CiAgICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fbmV3c2l6ZSA9IF9fdGVzdG4g PyBfX24gOiBfX3N0cnNpemUgLSBfX3BvczsKICAgICAgICByZXR1cm4gdGhpcy0+YXNzaWduKF9f c3RyLl9NX2RhdGEoKSArIF9fcG9zLCBfX25ld3NpemUpOwogICAgICB9CgogICAgICBiYXNpY19z dHJpbmcmCiAgICAgIGFzc2lnbihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fbikKICAg ICAgewogICAgICAgIGlmIChfX24gPiB0aGlzLT5tYXhfc2l6ZSgpKQogICAgICAgICAgX190aHJv d19sZW5ndGhfZXJyb3IoImJhc2ljX3N0cmluZzo6YXNzaWduIik7CiAgICAgICAgaWYgKF9NX3Jl cCgpLT5fTV9pc19zaGFyZWQoKSB8fCBsZXNzPGNvbnN0IF9DaGFyVCo+KCkoX19zLCBfTV9kYXRh KCkpCiAgICAgICAgICAgIHx8IGxlc3M8Y29uc3QgX0NoYXJUKj4oKShfTV9kYXRhKCkgKyB0aGlz LT5zaXplKCksIF9fcykpCiAgICAgICAgICByZXR1cm4gX01fcmVwbGFjZV9zYWZlKF9NX2liZWdp bigpLCBfTV9pZW5kKCksIF9fcywgX19zICsgX19uKTsKICAgICAgICBlbHNlCiAgICAgICAgICB7 CgogICAgICAgICAgICBjb25zdCBzaXplX3R5cGUgX19wb3MgPSBfX3MgLSBfTV9kYXRhKCk7CiAg ICAgICAgICAgIGlmIChfX3BvcyA+PSBfX24pCiAgICAgICAgICAgICAgdHJhaXRzX3R5cGU6OmNv cHkoX01fZGF0YSgpLCBfX3MsIF9fbik7CiAgICAgICAgICAgIGVsc2UgaWYgKF9fcG9zKQogICAg ICAgICAgICAgIHRyYWl0c190eXBlOjptb3ZlKF9NX2RhdGEoKSwgX19zLCBfX24pOwogICAgICAg ICAgICBfTV9yZXAoKS0+X01fbGVuZ3RoID0gX19uOwogICAgICAgICAgICBfTV9kYXRhKClbX19u XSA9IF9SZXA6Ol9TX3Rlcm1pbmFsOwogICAgICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgICAg ICB9CiAgICAgIH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgYXNzaWduKGNvbnN0IF9DaGFy VCogX19zKQogICAgICB7IHJldHVybiB0aGlzLT5hc3NpZ24oX19zLCB0cmFpdHNfdHlwZTo6bGVu Z3RoKF9fcykpOyB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIGFzc2lnbihzaXplX3R5cGUg X19uLCBfQ2hhclQgX19jKQogICAgICB7IHJldHVybiB0aGlzLT5yZXBsYWNlKF9NX2liZWdpbigp LCBfTV9pZW5kKCksIF9fbiwgX19jKTsgfQoKICAgICAgdGVtcGxhdGU8Y2xhc3MgX0lucHV0SXRl cmF0b3I+CiAgICAgICAgYmFzaWNfc3RyaW5nJgogICAgICAgIGFzc2lnbihfSW5wdXRJdGVyYXRv ciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpCiAgICAgICAgeyByZXR1cm4gdGhpcy0+ cmVwbGFjZShfTV9pYmVnaW4oKSwgX01faWVuZCgpLCBfX2ZpcnN0LCBfX2xhc3QpOyB9CgogICAg ICB2b2lkCiAgICAgIGluc2VydChpdGVyYXRvciBfX3AsIHNpemVfdHlwZSBfX24sIF9DaGFyVCBf X2MpCiAgICAgIHsgdGhpcy0+cmVwbGFjZShfX3AsIF9fcCwgX19uLCBfX2MpOyB9CgogICAgICB0 ZW1wbGF0ZTxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICAgICAgICB2b2lkIGluc2VydChpdGVyYXRv ciBfX3AsIF9JbnB1dEl0ZXJhdG9yIF9fYmVnLCBfSW5wdXRJdGVyYXRvciBfX2VuZCkKICAgICAg ICB7IHRoaXMtPnJlcGxhY2UoX19wLCBfX3AsIF9fYmVnLCBfX2VuZCk7IH0KCiAgICAgIGJhc2lj X3N0cmluZyYKICAgICAgaW5zZXJ0KHNpemVfdHlwZSBfX3BvczEsIGNvbnN0IGJhc2ljX3N0cmlu ZyYgX19zdHIpCiAgICAgIHsgcmV0dXJuIHRoaXMtPmluc2VydChfX3BvczEsIF9fc3RyLCAwLCBf X3N0ci5zaXplKCkpOyB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIGluc2VydChzaXplX3R5 cGUgX19wb3MxLCBjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLAogICAgICAgICAgICAgc2l6ZV90 eXBlIF9fcG9zMiwgc2l6ZV90eXBlIF9fbikKICAgICAgewogICAgICAgIGNvbnN0IHNpemVfdHlw ZSBfX3N0cnNpemUgPSBfX3N0ci5zaXplKCk7CiAgICAgICAgaWYgKF9fcG9zMiA+IF9fc3Ryc2l6 ZSkKICAgICAgICAgIF9fdGhyb3dfb3V0X29mX3JhbmdlKCJiYXNpY19zdHJpbmc6Omluc2VydCIp OwogICAgICAgIGNvbnN0IGJvb2wgX190ZXN0biA9IF9fbiA8IF9fc3Ryc2l6ZSAtIF9fcG9zMjsK ICAgICAgICBjb25zdCBzaXplX3R5cGUgX19uZXdzaXplID0gX190ZXN0biA/IF9fbiA6IF9fc3Ry c2l6ZSAtIF9fcG9zMjsKICAgICAgICByZXR1cm4gdGhpcy0+aW5zZXJ0KF9fcG9zMSwgX19zdHIu X01fZGF0YSgpICsgX19wb3MyLCBfX25ld3NpemUpOwogICAgICB9CgogICAgICBiYXNpY19zdHJp bmcmCiAgICAgIGluc2VydChzaXplX3R5cGUgX19wb3MsIGNvbnN0IF9DaGFyVCogX19zLCBzaXpl X3R5cGUgX19uKQogICAgICB7CiAgICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMt PnNpemUoKTsKICAgICAgICBpZiAoX19wb3MgPiBfX3NpemUpCiAgICAgICAgICBfX3Rocm93X291 dF9vZl9yYW5nZSgiYmFzaWNfc3RyaW5nOjppbnNlcnQiKTsKICAgICAgICBpZiAoX19zaXplID4g dGhpcy0+bWF4X3NpemUoKSAtIF9fbikKICAgICAgICAgIF9fdGhyb3dfbGVuZ3RoX2Vycm9yKCJi YXNpY19zdHJpbmc6Omluc2VydCIpOwogICAgICAgIGlmIChfTV9yZXAoKS0+X01faXNfc2hhcmVk KCkgfHwgbGVzczxjb25zdCBfQ2hhclQqPigpKF9fcywgX01fZGF0YSgpKQogICAgICAgICAgICB8 fCBsZXNzPGNvbnN0IF9DaGFyVCo+KCkoX01fZGF0YSgpICsgX19zaXplLCBfX3MpKQogICAgICAg ICAgcmV0dXJuIF9NX3JlcGxhY2Vfc2FmZShfTV9pYmVnaW4oKSArIF9fcG9zLCBfTV9pYmVnaW4o KSArIF9fcG9zLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3MsIF9fcyArIF9f bik7CiAgICAgICAgZWxzZQogICAgICAgICAgewoKCgogICAgICAgICAgICBjb25zdCBzaXplX3R5 cGUgX19vZmYgPSBfX3MgLSBfTV9kYXRhKCk7CiAgICAgICAgICAgIF9NX211dGF0ZShfX3Bvcywg MCwgX19uKTsKICAgICAgICAgICAgX19zID0gX01fZGF0YSgpICsgX19vZmY7CiAgICAgICAgICAg IF9DaGFyVCogX19wID0gX01fZGF0YSgpICsgX19wb3M7CiAgICAgICAgICAgIGlmIChfX3MgKyBf X24gPD0gX19wKQogICAgICAgICAgICAgIHRyYWl0c190eXBlOjpjb3B5KF9fcCwgX19zLCBfX24p OwogICAgICAgICAgICBlbHNlIGlmIChfX3MgPj0gX19wKQogICAgICAgICAgICAgIHRyYWl0c190 eXBlOjpjb3B5KF9fcCwgX19zICsgX19uLCBfX24pOwogICAgICAgICAgICBlbHNlCiAgICAgICAg ICAgICAgewogICAgICAgICAgICAgICAgdHJhaXRzX3R5cGU6OmNvcHkoX19wLCBfX3MsIF9fcCAt IF9fcyk7CiAgICAgICAgICAgICAgICB0cmFpdHNfdHlwZTo6Y29weShfX3AgKyAoX19wIC0gX19z KSwgX19wICsgX19uLCBfX24gLSAoX19wIC0gX19zKSk7CiAgICAgICAgICAgICAgfQogICAgICAg ICAgICByZXR1cm4gKnRoaXM7CiAgICAgICAgICB9CiAgICAgICB9CgogICAgICBiYXNpY19zdHJp bmcmCiAgICAgIGluc2VydChzaXplX3R5cGUgX19wb3MsIGNvbnN0IF9DaGFyVCogX19zKQogICAg ICB7IHJldHVybiB0aGlzLT5pbnNlcnQoX19wb3MsIF9fcywgdHJhaXRzX3R5cGU6Omxlbmd0aChf X3MpKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBpbnNlcnQoc2l6ZV90eXBlIF9fcG9z LCBzaXplX3R5cGUgX19uLCBfQ2hhclQgX19jKQogICAgICB7CiAgICAgICAgdGhpcy0+aW5zZXJ0 KF9NX2NoZWNrKF9fcG9zKSwgX19uLCBfX2MpOwogICAgICAgIHJldHVybiAqdGhpczsKICAgICAg fQoKICAgICAgaXRlcmF0b3IKICAgICAgaW5zZXJ0KGl0ZXJhdG9yIF9fcCwgX0NoYXJUIF9fYyA9 IF9DaGFyVCgpKQogICAgICB7CiAgICAgICAgc2l6ZV90eXBlIF9fcG9zID0gX19wIC0gX01faWJl Z2luKCk7CiAgICAgICAgdGhpcy0+aW5zZXJ0KF9NX2NoZWNrKF9fcG9zKSwgc2l6ZV90eXBlKDEp LCBfX2MpOwogICAgICAgIF9NX3JlcCgpLT5fTV9zZXRfbGVha2VkKCk7CiAgICAgICAgcmV0dXJu IHRoaXMtPl9NX2liZWdpbigpICsgX19wb3M7CiAgICAgIH0KCiAgICAgIGJhc2ljX3N0cmluZyYK ICAgICAgZXJhc2Uoc2l6ZV90eXBlIF9fcG9zID0gMCwgc2l6ZV90eXBlIF9fbiA9IG5wb3MpCiAg ICAgIHsKICAgICAgICByZXR1cm4gdGhpcy0+cmVwbGFjZShfTV9jaGVjayhfX3BvcyksIF9NX2Zv bGQoX19wb3MsIF9fbiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01fZGF0YSgpLCBf TV9kYXRhKCkpOwogICAgICB9CgogICAgICBpdGVyYXRvcgogICAgICBlcmFzZShpdGVyYXRvciBf X3Bvc2l0aW9uKQogICAgICB7CiAgICAgICAgc2l6ZV90eXBlIF9faSA9IF9fcG9zaXRpb24gLSBf TV9pYmVnaW4oKTsKICAgICAgICB0aGlzLT5yZXBsYWNlKF9fcG9zaXRpb24sIF9fcG9zaXRpb24g KyAxLCBfTV9kYXRhKCksIF9NX2RhdGEoKSk7CiAgICAgICAgX01fcmVwKCktPl9NX3NldF9sZWFr ZWQoKTsKICAgICAgICByZXR1cm4gX01faWJlZ2luKCkgKyBfX2k7CiAgICAgIH0KCiAgICAgIGl0 ZXJhdG9yCiAgICAgIGVyYXNlKGl0ZXJhdG9yIF9fZmlyc3QsIGl0ZXJhdG9yIF9fbGFzdCkKICAg ICAgewogICAgICAgIHNpemVfdHlwZSBfX2kgPSBfX2ZpcnN0IC0gX01faWJlZ2luKCk7CiAgICAg ICAgdGhpcy0+cmVwbGFjZShfX2ZpcnN0LCBfX2xhc3QsIF9NX2RhdGEoKSwgX01fZGF0YSgpKTsK ICAgICAgICBfTV9yZXAoKS0+X01fc2V0X2xlYWtlZCgpOwogICAgICAgcmV0dXJuIF9NX2liZWdp bigpICsgX19pOwogICAgICB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIHJlcGxhY2Uoc2l6 ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uLCBjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyKQog ICAgICB7IHJldHVybiB0aGlzLT5yZXBsYWNlKF9fcG9zLCBfX24sIF9fc3RyLl9NX2RhdGEoKSwg X19zdHIuc2l6ZSgpKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICByZXBsYWNlKHNpemVf dHlwZSBfX3BvczEsIHNpemVfdHlwZSBfX24xLCBjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLAog ICAgICAgICAgICAgIHNpemVfdHlwZSBfX3BvczIsIHNpemVfdHlwZSBfX24yKTsKCiAgICAgIGJh c2ljX3N0cmluZyYKICAgICAgcmVwbGFjZShzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24x LCBjb25zdCBfQ2hhclQqIF9fcywKICAgICAgICAgICAgICBzaXplX3R5cGUgX19uMikKICAgICAg ewogICAgICAgIGNvbnN0IHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CiAgICAgICAg aWYgKF9fcG9zID4gX19zaXplKQogICAgICAgICAgX190aHJvd19vdXRfb2ZfcmFuZ2UoImJhc2lj X3N0cmluZzo6cmVwbGFjZSIpOwogICAgICAgIGNvbnN0IGJvb2wgX190ZXN0bjEgPSBfX24xIDwg X19zaXplIC0gX19wb3M7CiAgICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fZm9sZG4xID0gX190ZXN0 bjEgPyBfX24xIDogX19zaXplIC0gX19wb3M7CiAgICAgICAgaWYgKF9fc2l6ZSAtIF9fZm9sZG4x ID4gdGhpcy0+bWF4X3NpemUoKSAtIF9fbjIpCiAgICAgICAgICBfX3Rocm93X2xlbmd0aF9lcnJv cigiYmFzaWNfc3RyaW5nOjpyZXBsYWNlIik7CiAgICAgICAgaWYgKF9NX3JlcCgpLT5fTV9pc19z aGFyZWQoKSB8fCBsZXNzPGNvbnN0IF9DaGFyVCo+KCkoX19zLCBfTV9kYXRhKCkpCiAgICAgICAg ICAgIHx8IGxlc3M8Y29uc3QgX0NoYXJUKj4oKShfTV9kYXRhKCkgKyBfX3NpemUsIF9fcykpCiAg ICAgICAgICByZXR1cm4gX01fcmVwbGFjZV9zYWZlKF9NX2liZWdpbigpICsgX19wb3MsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NX2liZWdpbigpICsgX19wb3MgKyBfX2ZvbGRu MSwgX19zLCBfX3MgKyBfX24yKTsKCiAgICAgICAgZWxzZSByZXR1cm4KICAgICAgICAgICAgICAg X01fcmVwbGFjZShfTV9pYmVnaW4oKSArIF9fcG9zLCBfTV9pYmVnaW4oKSArIF9fcG9zICsgX19m b2xkbjEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX19zLCBfX3MgKyBfX24yLAogICAgICAg ICAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxjb25zdCBfQ2hhclQq Pjo6aXRlcmF0b3JfY2F0ZWdvcnkoKSk7CiAgICAgIH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAg ICAgcmVwbGFjZShzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24xLCBjb25zdCBfQ2hhclQq IF9fcykKICAgICAgeyByZXR1cm4gdGhpcy0+cmVwbGFjZShfX3BvcywgX19uMSwgX19zLCB0cmFp dHNfdHlwZTo6bGVuZ3RoKF9fcykpOyB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIHJlcGxh Y2Uoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uMSwgc2l6ZV90eXBlIF9fbjIsIF9DaGFy VCBfX2MpCiAgICAgIHsgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX01fY2hlY2soX19wb3MpLCBfTV9m b2xkKF9fcG9zLCBfX24xKSwgX19uMiwgX19jKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAg ICByZXBsYWNlKGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9yIF9faTIsIGNvbnN0IGJhc2ljX3N0cmlu ZyYgX19zdHIpCiAgICAgIHsgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX19pMSwgX19pMiwgX19zdHIu X01fZGF0YSgpLCBfX3N0ci5zaXplKCkpOyB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIHJl cGxhY2UoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX24pCiAgICAgIHsgcmV0dXJuIHRo aXMtPnJlcGxhY2UoX19pMSAtIF9NX2liZWdpbigpLCBfX2kyIC0gX19pMSwgX19zLCBfX24pOyB9 CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIHJlcGxhY2UoaXRlcmF0b3IgX19pMSwgaXRlcmF0 b3IgX19pMiwgY29uc3QgX0NoYXJUKiBfX3MpCiAgICAgIHsgcmV0dXJuIHRoaXMtPnJlcGxhY2Uo X19pMSwgX19pMiwgX19zLCB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcykpOyB9CgogICAgICBiYXNp Y19zdHJpbmcmCiAgICAgIHJlcGxhY2UoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwgc2l6 ZV90eXBlIF9fbiwgX0NoYXJUIF9fYyk7CgogICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW5wdXRJdGVy YXRvcj4KICAgICAgICBiYXNpY19zdHJpbmcmCiAgICAgICAgcmVwbGFjZShpdGVyYXRvciBfX2kx LCBpdGVyYXRvciBfX2kyLAogICAgICAgICAgICAgICAgX0lucHV0SXRlcmF0b3IgX19rMSwgX0lu cHV0SXRlcmF0b3IgX19rMikKICAgICAgICB7IHJldHVybiBfTV9yZXBsYWNlKF9faTEsIF9faTIs IF9fazEsIF9fazIsCiAgICAgICAgICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0 SXRlcmF0b3I+OjppdGVyYXRvcl9jYXRlZ29yeSgpKTsgfQoKCgogICAgICBiYXNpY19zdHJpbmcm CiAgICAgIHJlcGxhY2UoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwgX0NoYXJUKiBfX2sx LCBfQ2hhclQqIF9fazIpCiAgICAgICAgeyByZXR1cm4gdGhpcy0+cmVwbGFjZShfX2kxIC0gX01f aWJlZ2luKCksIF9faTIgLSBfX2kxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19r MSwgX19rMiAtIF9fazEpOyB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIHJlcGxhY2UoaXRl cmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwgY29uc3QgX0NoYXJUKiBfX2sxLCBjb25zdCBfQ2hh clQqIF9fazIpCiAgICAgICAgeyByZXR1cm4gdGhpcy0+cmVwbGFjZShfX2kxIC0gX01faWJlZ2lu KCksIF9faTIgLSBfX2kxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19rMSwgX19r MiAtIF9fazEpOyB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIHJlcGxhY2UoaXRlcmF0b3Ig X19pMSwgaXRlcmF0b3IgX19pMiwgaXRlcmF0b3IgX19rMSwgaXRlcmF0b3IgX19rMikKICAgICAg ICB7IHJldHVybiB0aGlzLT5yZXBsYWNlKF9faTEgLSBfTV9pYmVnaW4oKSwgX19pMiAtIF9faTEs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2sxLmJhc2UoKSwgX19rMiAtIF9fazEp OwogICAgICAgIH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgcmVwbGFjZShpdGVyYXRvciBf X2kxLCBpdGVyYXRvciBfX2kyLCBjb25zdF9pdGVyYXRvciBfX2sxLCBjb25zdF9pdGVyYXRvciBf X2syKQogICAgICAgIHsgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX19pMSAtIF9NX2liZWdpbigpLCBf X2kyIC0gX19pMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fazEuYmFzZSgpLCBf X2syIC0gX19rMSk7CiAgICAgICAgfQoKICAgIHByaXZhdGU6CiAgICAgIHRlbXBsYXRlPGNsYXNz IF9JbnB1dEl0ZXJhdG9yPgogICAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgICBfTV9yZXBsYWNl KGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9yIF9faTIsIF9JbnB1dEl0ZXJhdG9yIF9fazEsCiAgICAg ICAgICAgICAgICAgICBfSW5wdXRJdGVyYXRvciBfX2syLCBpbnB1dF9pdGVyYXRvcl90YWcpOwoK ICAgICAgdGVtcGxhdGU8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4KICAgICAgICBiYXNpY19zdHJp bmcmCiAgICAgICAgX01fcmVwbGFjZV9zYWZlKGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9yIF9faTIs IF9Gb3J3YXJkSXRlcmF0b3IgX19rMSwKICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcmF0 b3IgX19rMik7CgoKCiAgICAgIHRlbXBsYXRlPGNsYXNzIF9Jbkl0ZXI+CiAgICAgICAgc3RhdGlj IF9DaGFyVCoKICAgICAgICBfU19jb25zdHJ1Y3RfYXV4KF9Jbkl0ZXIgX19iZWcsIF9Jbkl0ZXIg X19lbmQsIGNvbnN0IF9BbGxvYyYgX19hLAogICAgICAgICAgICAgICAgICAgICAgICAgX19mYWxz ZV90eXBlKQogICAgICAgIHsKICAgICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJh aXRzPF9Jbkl0ZXI+OjppdGVyYXRvcl9jYXRlZ29yeSBfVGFnOwogICAgICAgICAgcmV0dXJuIF9T X2NvbnN0cnVjdChfX2JlZywgX19lbmQsIF9fYSwgX1RhZygpKTsKICAgICAgICB9CgogICAgICB0 ZW1wbGF0ZTxjbGFzcyBfSW5JdGVyPgogICAgICAgIHN0YXRpYyBfQ2hhclQqCiAgICAgICAgX1Nf Y29uc3RydWN0X2F1eChfSW5JdGVyIF9fYmVnLCBfSW5JdGVyIF9fZW5kLCBjb25zdCBfQWxsb2Mm IF9fYSwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fdHJ1ZV90eXBlKQogICAgICAgIHsKICAg ICAgICAgIHJldHVybiBfU19jb25zdHJ1Y3Qoc3RhdGljX2Nhc3Q8c2l6ZV90eXBlPihfX2JlZyks CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PHZhbHVlX3R5cGU+KF9f ZW5kKSwgX19hKTsKICAgICAgICB9CgogICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW5JdGVyPgogICAg ICAgIHN0YXRpYyBfQ2hhclQqCiAgICAgICAgX1NfY29uc3RydWN0KF9Jbkl0ZXIgX19iZWcsIF9J bkl0ZXIgX19lbmQsIGNvbnN0IF9BbGxvYyYgX19hKQogICAgICAgIHsKICAgICAgICAgIHR5cGVk ZWYgdHlwZW5hbWUgX0lzX2ludGVnZXI8X0luSXRlcj46Ol9JbnRlZ3JhbCBfSW50ZWdyYWw7CiAg ICAgICAgICByZXR1cm4gX1NfY29uc3RydWN0X2F1eChfX2JlZywgX19lbmQsIF9fYSwgX0ludGVn cmFsKCkpOwogICAgICAgIH0KCgogICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW5JdGVyPgogICAgICAg IHN0YXRpYyBfQ2hhclQqCiAgICAgICAgIF9TX2NvbnN0cnVjdChfSW5JdGVyIF9fYmVnLCBfSW5J dGVyIF9fZW5kLCBjb25zdCBfQWxsb2MmIF9fYSwKICAgICAgICAgICAgICAgICAgICAgIGlucHV0 X2l0ZXJhdG9yX3RhZyk7CgoKCiAgICAgIHRlbXBsYXRlPGNsYXNzIF9Gd2RJdGVyPgogICAgICAg IHN0YXRpYyBfQ2hhclQqCiAgICAgICAgX1NfY29uc3RydWN0KF9Gd2RJdGVyIF9fYmVnLCBfRndk SXRlciBfX2VuZCwgY29uc3QgX0FsbG9jJiBfX2EsCiAgICAgICAgICAgICAgICAgICAgIGZvcndh cmRfaXRlcmF0b3JfdGFnKTsKCiAgICAgIHN0YXRpYyBfQ2hhclQqCiAgICAgIF9TX2NvbnN0cnVj dChzaXplX3R5cGUgX19yZXEsIF9DaGFyVCBfX2MsIGNvbnN0IF9BbGxvYyYgX19hKTsKCiAgICBw dWJsaWM6CgogICAgICBzaXplX3R5cGUKICAgICAgY29weShfQ2hhclQqIF9fcywgc2l6ZV90eXBl IF9fbiwgc2l6ZV90eXBlIF9fcG9zID0gMCkgY29uc3Q7CgogICAgICB2b2lkCiAgICAgIHN3YXAo YmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19zKTsKCgogICAgICBjb25z dCBfQ2hhclQqCiAgICAgIGNfc3RyKCkgY29uc3QKICAgICAgewoKICAgICAgICBzaXplX3R5cGUg X19uID0gdGhpcy0+c2l6ZSgpOwogICAgICAgIHRyYWl0c190eXBlOjphc3NpZ24oX01fZGF0YSgp W19fbl0sIF9SZXA6Ol9TX3Rlcm1pbmFsKTsKICAgICAgICByZXR1cm4gX01fZGF0YSgpOwogICAg ICB9CgogICAgICBjb25zdCBfQ2hhclQqCiAgICAgIGRhdGEoKSBjb25zdCB7IHJldHVybiBfTV9k YXRhKCk7IH0KCiAgICAgIGFsbG9jYXRvcl90eXBlCiAgICAgIGdldF9hbGxvY2F0b3IoKSBjb25z dCB7IHJldHVybiBfTV9kYXRhcGx1czsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmQoY29u c3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikgY29uc3Q7Cgog ICAgICBzaXplX3R5cGUKICAgICAgZmluZChjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLCBzaXpl X3R5cGUgX19wb3MgPSAwKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5maW5kKF9fc3RyLmRh dGEoKSwgX19wb3MsIF9fc3RyLnNpemUoKSk7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBmaW5k KGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MgPSAwKSBjb25zdAogICAgICB7IHJl dHVybiB0aGlzLT5maW5kKF9fcywgX19wb3MsIHRyYWl0c190eXBlOjpsZW5ndGgoX19zKSk7IH0K CiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kKF9DaGFyVCBfX2MsIHNpemVfdHlwZSBfX3BvcyA9 IDApIGNvbnN0OwoKICAgICAgc2l6ZV90eXBlCiAgICAgIHJmaW5kKGNvbnN0IGJhc2ljX3N0cmlu ZyYgX19zdHIsIHNpemVfdHlwZSBfX3BvcyA9IG5wb3MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRo aXMtPnJmaW5kKF9fc3RyLmRhdGEoKSwgX19wb3MsIF9fc3RyLnNpemUoKSk7IH0KCiAgICAgIHNp emVfdHlwZQogICAgICByZmluZChjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zLCBz aXplX3R5cGUgX19uKSBjb25zdDsKCiAgICAgIHNpemVfdHlwZQogICAgICByZmluZChjb25zdCBf Q2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zID0gbnBvcykgY29uc3QKICAgICAgeyByZXR1cm4g dGhpcy0+cmZpbmQoX19zLCBfX3BvcywgdHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpKTsgfQoKICAg ICAgc2l6ZV90eXBlCiAgICAgIHJmaW5kKF9DaGFyVCBfX2MsIHNpemVfdHlwZSBfX3BvcyA9IG5w b3MpIGNvbnN0OwoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmRfZmlyc3Rfb2YoY29uc3QgYmFz aWNfc3RyaW5nJiBfX3N0ciwgc2l6ZV90eXBlIF9fcG9zID0gMCkgY29uc3QKICAgICAgeyByZXR1 cm4gdGhpcy0+ZmluZF9maXJzdF9vZihfX3N0ci5kYXRhKCksIF9fcG9zLCBfX3N0ci5zaXplKCkp OyB9CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZF9maXJzdF9vZihjb25zdCBfQ2hhclQqIF9f cywgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKSBjb25zdDsKCiAgICAgIHNpemVfdHlw ZQogICAgICBmaW5kX2ZpcnN0X29mKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3Mg PSAwKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5maW5kX2ZpcnN0X29mKF9fcywgX19wb3Ms IHRyYWl0c190eXBlOjpsZW5ndGgoX19zKSk7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBmaW5k X2ZpcnN0X29mKF9DaGFyVCBfX2MsIHNpemVfdHlwZSBfX3BvcyA9IDApIGNvbnN0CiAgICAgIHsg cmV0dXJuIHRoaXMtPmZpbmQoX19jLCBfX3Bvcyk7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBm aW5kX2xhc3Rfb2YoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwgc2l6ZV90eXBlIF9fcG9zID0g bnBvcykgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZmluZF9sYXN0X29mKF9fc3RyLmRhdGEo KSwgX19wb3MsIF9fc3RyLnNpemUoKSk7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kX2xh c3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikg Y29uc3Q7CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZF9sYXN0X29mKGNvbnN0IF9DaGFyVCog X19zLCBzaXplX3R5cGUgX19wb3MgPSBucG9zKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5m aW5kX2xhc3Rfb2YoX19zLCBfX3BvcywgdHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpKTsgfQoKICAg ICAgc2l6ZV90eXBlCiAgICAgIGZpbmRfbGFzdF9vZihfQ2hhclQgX19jLCBzaXplX3R5cGUgX19w b3MgPSBucG9zKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5yZmluZChfX2MsIF9fcG9zKTsg fQoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmRfZmlyc3Rfbm90X29mKGNvbnN0IGJhc2ljX3N0 cmluZyYgX19zdHIsIHNpemVfdHlwZSBfX3BvcyA9IDApIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRo aXMtPmZpbmRfZmlyc3Rfbm90X29mKF9fc3RyLmRhdGEoKSwgX19wb3MsIF9fc3RyLnNpemUoKSk7 IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kX2ZpcnN0X25vdF9vZihjb25zdCBfQ2hhclQq IF9fcywgc2l6ZV90eXBlIF9fcG9zLAogICAgICAgICAgICAgICAgICAgICAgICBzaXplX3R5cGUg X19uKSBjb25zdDsKCiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kX2ZpcnN0X25vdF9vZihjb25z dCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zID0gMCkgY29uc3QKICAgICAgeyByZXR1cm4g dGhpcy0+ZmluZF9maXJzdF9ub3Rfb2YoX19zLCBfX3BvcywgdHJhaXRzX3R5cGU6Omxlbmd0aChf X3MpKTsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmRfZmlyc3Rfbm90X29mKF9DaGFyVCBf X2MsIHNpemVfdHlwZSBfX3BvcyA9IDApIGNvbnN0OwoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZp bmRfbGFzdF9ub3Rfb2YoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwgc2l6ZV90eXBlIF9fcG9z ID0gbnBvcykgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZmluZF9sYXN0X25vdF9vZihfX3N0 ci5kYXRhKCksIF9fcG9zLCBfX3N0ci5zaXplKCkpOyB9CgogICAgICBzaXplX3R5cGUKICAgICAg ZmluZF9sYXN0X25vdF9vZihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zLAogICAg ICAgICAgICAgICAgICAgICAgIHNpemVfdHlwZSBfX24pIGNvbnN0OwogICAgICBzaXplX3R5cGUK ICAgICAgZmluZF9sYXN0X25vdF9vZihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9z ID0gbnBvcykgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZmluZF9sYXN0X25vdF9vZihfX3Ms IF9fcG9zLCB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcykpOyB9CgogICAgICBzaXplX3R5cGUKICAg ICAgZmluZF9sYXN0X25vdF9vZihfQ2hhclQgX19jLCBzaXplX3R5cGUgX19wb3MgPSBucG9zKSBj b25zdDsKCiAgICAgIGJhc2ljX3N0cmluZwogICAgICBzdWJzdHIoc2l6ZV90eXBlIF9fcG9zID0g MCwgc2l6ZV90eXBlIF9fbiA9IG5wb3MpIGNvbnN0CiAgICAgIHsKICAgICAgICBpZiAoX19wb3Mg PiB0aGlzLT5zaXplKCkpCiAgICAgICAgICBfX3Rocm93X291dF9vZl9yYW5nZSgiYmFzaWNfc3Ry aW5nOjpzdWJzdHIiKTsKICAgICAgICByZXR1cm4gYmFzaWNfc3RyaW5nKCp0aGlzLCBfX3Bvcywg X19uKTsKICAgICAgfQoKICAgICAgaW50CiAgICAgIGNvbXBhcmUoY29uc3QgYmFzaWNfc3RyaW5n JiBfX3N0cikgY29uc3QKICAgICAgewogICAgICAgIHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5z aXplKCk7CiAgICAgICAgc2l6ZV90eXBlIF9fb3NpemUgPSBfX3N0ci5zaXplKCk7CiAgICAgICAg c2l6ZV90eXBlIF9fbGVuID0gc3RkOjptaW4oX19zaXplLCBfX29zaXplKTsKCiAgICAgICAgaW50 IF9fciA9IHRyYWl0c190eXBlOjpjb21wYXJlKF9NX2RhdGEoKSwgX19zdHIuZGF0YSgpLCBfX2xl bik7CiAgICAgICAgaWYgKCFfX3IpCiAgICAgICAgICBfX3IgPSBfX3NpemUgLSBfX29zaXplOwog ICAgICAgIHJldHVybiBfX3I7CiAgICAgIH0KCiAgICAgIGludAogICAgICBjb21wYXJlKHNpemVf dHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbiwgY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cikgY29u c3Q7CgogICAgICBpbnQKICAgICAgY29tcGFyZShzaXplX3R5cGUgX19wb3MxLCBzaXplX3R5cGUg X19uMSwgY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwKICAgICAgICAgICAgICBzaXplX3R5cGUg X19wb3MyLCBzaXplX3R5cGUgX19uMikgY29uc3Q7CgogICAgICBpbnQKICAgICAgY29tcGFyZShj b25zdCBfQ2hhclQqIF9fcykgY29uc3Q7CgoKCiAgICAgIGludAogICAgICBjb21wYXJlKHNpemVf dHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbjEsIGNvbnN0IF9DaGFyVCogX19zKSBjb25zdDsKCiAg ICAgIGludAogICAgICBjb21wYXJlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbjEsIGNv bnN0IF9DaGFyVCogX19zLAogICAgICAgICAgICAgIHNpemVfdHlwZSBfX24yKSBjb25zdDsKICB9 OwoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFt ZSBfQWxsb2M+CiAgICBpbmxpbmUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9j Pjo6CiAgICBiYXNpY19zdHJpbmcoKQogICAgOiBfTV9kYXRhcGx1cyhfU19lbXB0eV9yZXAoKS5f TV9yZWZjb3B5KCksIF9BbGxvYygpKSB7IH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg dHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFy VCwgX1RyYWl0cywgX0FsbG9jPgogICAgb3BlcmF0b3IrKGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hh clQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhzLAogICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0 cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcmhzKQogICAgewogICAgICBiYXNpY19z dHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+IF9fc3RyKF9fbGhzKTsKICAgICAgX19zdHIu YXBwZW5kKF9fcmhzKTsKICAgICAgcmV0dXJuIF9fc3RyOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2lj X3N0cmluZzxfQ2hhclQsX1RyYWl0cyxfQWxsb2M+CiAgICBvcGVyYXRvcisoY29uc3QgX0NoYXJU KiBfX2xocywKICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMs X0FsbG9jPiYgX19yaHMpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U cmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsX1RyYWl0cyxf QWxsb2M+CiAgICBvcGVyYXRvcisoX0NoYXJUIF9fbGhzLCBjb25zdCBiYXNpY19zdHJpbmc8X0No YXJULF9UcmFpdHMsX0FsbG9jPiYgX19yaHMpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs IHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBiYXNpY19zdHJp bmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+CiAgICBvcGVyYXRvcisoY29uc3QgYmFzaWNfc3Ry aW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsCiAgICAgICAgICAgICBjb25zdCBf Q2hhclQqIF9fcmhzKQogICAgewogICAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBf QWxsb2M+IF9fc3RyKF9fbGhzKTsKICAgICAgX19zdHIuYXBwZW5kKF9fcmhzKTsKICAgICAgcmV0 dXJuIF9fc3RyOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U cmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBiYXNpY19zdHJpbmc8X0NoYXJULCBf VHJhaXRzLCBfQWxsb2M+CiAgICBvcGVyYXRvcisoY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwg X1RyYWl0cywgX0FsbG9jPiYgX19saHMsIF9DaGFyVCBfX3JocykKICAgIHsKICAgICAgdHlwZWRl ZiBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+IF9fc3RyaW5nX3R5cGU7CiAg ICAgIHR5cGVkZWYgdHlwZW5hbWUgX19zdHJpbmdfdHlwZTo6c2l6ZV90eXBlIF9fc2l6ZV90eXBl OwogICAgICBfX3N0cmluZ190eXBlIF9fc3RyKF9fbGhzKTsKICAgICAgX19zdHIuYXBwZW5kKF9f c2l6ZV90eXBlKDEpLCBfX3Jocyk7CiAgICAgIHJldHVybiBfX3N0cjsKICAgIH0KCgogIHRlbXBs YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgog ICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPT0oY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwg X1RyYWl0cywgX0FsbG9jPiYgX19saHMsCiAgICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmlu ZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcmhzKQogICAgeyByZXR1cm4gX19saHMuY29t cGFyZShfX3JocykgPT0gMDsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l IF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj09 KGNvbnN0IF9DaGFyVCogX19saHMsCiAgICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxf Q2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcmhzKQogICAgeyByZXR1cm4gX19yaHMuY29tcGFy ZShfX2xocykgPT0gMDsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U cmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj09KGNv bnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhzLAogICAgICAg ICAgICAgICBjb25zdCBfQ2hhclQqIF9fcmhzKQogICAgeyByZXR1cm4gX19saHMuY29tcGFyZShf X3JocykgPT0gMDsgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh aXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3IhPShjb25z dCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywKICAgICAgICAg ICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMp CiAgICB7IHJldHVybiBfX3Jocy5jb21wYXJlKF9fbGhzKSAhPSAwOyB9CgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5s aW5lIGJvb2wKICAgIG9wZXJhdG9yIT0oY29uc3QgX0NoYXJUKiBfX2xocywKICAgICAgICAgICAg ICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAg ICB7IHJldHVybiBfX3Jocy5jb21wYXJlKF9fbGhzKSAhPSAwOyB9CgogIHRlbXBsYXRlPHR5cGVu YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5l IGJvb2wKICAgIG9wZXJhdG9yIT0oY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywg X0FsbG9jPiYgX19saHMsCiAgICAgICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19yaHMpCiAgICB7 IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSAhPSAwOyB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBi b29sCiAgICBvcGVyYXRvcjwoY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0Fs bG9jPiYgX19saHMsCiAgICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1Ry YWl0cywgX0FsbG9jPiYgX19yaHMpCiAgICB7IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSA8 IDA7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBl bmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I8KGNvbnN0IGJhc2ljX3N0 cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhzLAogICAgICAgICAgICAgIGNvbnN0 IF9DaGFyVCogX19yaHMpCiAgICB7IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSA8IDA7IH0K CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBf QWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I8KGNvbnN0IF9DaGFyVCogX19saHMs CiAgICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9j PiYgX19yaHMpCiAgICB7IHJldHVybiBfX3Jocy5jb21wYXJlKF9fbGhzKSA+IDA7IH0KCgogIHRl bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9j PgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPihjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJU LCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywKICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJp bmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3JocykKICAgIHsgcmV0dXJuIF9fbGhzLmNv bXBhcmUoX19yaHMpID4gMDsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l IF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj4o Y29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsCiAgICAg ICAgICAgICAgY29uc3QgX0NoYXJUKiBfX3JocykKICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUo X19yaHMpID4gMDsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp dHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj4oY29uc3Qg X0NoYXJUKiBfX2xocywKICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBf VHJhaXRzLCBfQWxsb2M+JiBfX3JocykKICAgIHsgcmV0dXJuIF9fcmhzLmNvbXBhcmUoX19saHMp IDwgMDsgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0 eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I8PShjb25zdCBiYXNp Y19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywKICAgICAgICAgICAgICAg Y29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAgICB7 IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSA8PSAwOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1l IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJv b2wKICAgIG9wZXJhdG9yPD0oY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0Fs bG9jPiYgX19saHMsCiAgICAgICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19yaHMpCiAgICB7IHJl dHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSA8PSAwOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D aGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wK ICAgIG9wZXJhdG9yPD0oY29uc3QgX0NoYXJUKiBfX2xocywKICAgICAgICAgICAgICAgY29uc3Qg YmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAgeyByZXR1cm4g X19yaHMuY29tcGFyZShfX2xocykgPj0gMDsgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU LCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAg b3BlcmF0b3I+PShjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBf X2xocywKICAgICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywg X0FsbG9jPiYgX19yaHMpCiAgICB7IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSA+PSAwOyB9 CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUg X0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPj0oY29uc3QgYmFzaWNfc3RyaW5n PF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsCiAgICAgICAgICAgICAgIGNvbnN0IF9D aGFyVCogX19yaHMpCiAgICB7IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSA+PSAwOyB9Cgog IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0Fs bG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPj0oY29uc3QgX0NoYXJUKiBfX2xocywK ICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4m IF9fcmhzKQogICAgeyByZXR1cm4gX19yaHMuY29tcGFyZShfX2xocykgPD0gMDsgfQoKCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+ CiAgICBpbmxpbmUgdm9pZAogICAgc3dhcChiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBf QWxsb2M+JiBfX2xocywKICAgICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0Fs bG9jPiYgX19yaHMpCiAgICB7IF9fbGhzLnN3YXAoX19yaHMpOyB9CgogIHRlbXBsYXRlPHR5cGVu YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNf aXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I+PihiYXNpY19pc3RyZWFtPF9D aGFyVCwgX1RyYWl0cz4mIF9faXMsCiAgICAgICAgICAgICAgIGJhc2ljX3N0cmluZzxfQ2hhclQs IF9UcmFpdHMsIF9BbGxvYz4mIF9fc3RyKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0 eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFy VCwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRz PiYgX19vcywKICAgICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0 cywgX0FsbG9jPiYgX19zdHIpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l IF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULF9UcmFp dHM+JgogICAgZ2V0bGluZShiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faXMsCiAg ICAgICAgICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fc3RyLCBf Q2hhclQgX19kZWxpbSk7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry YWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJhc2ljX2lzdHJlYW08X0NoYXJULF9U cmFpdHM+JgogICAgZ2V0bGluZShiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faXMs CiAgICAgICAgICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fc3Ry KTsKfQojIDU0ICIvaG9tZS9BZG1pbmlzdHJhdG9yL2djY3Rlc3RpbmcvbGliL2djYy1saWIvaTY4 Ni1wYy1jeWd3aW4vMy40L2luY2x1ZGUvYysrL3N0cmluZyIgMiAzCgoKIyAxICIvaG9tZS9BZG1p bmlzdHJhdG9yL2djY3Rlc3RpbmcvbGliL2djYy1saWIvaTY4Ni1wYy1jeWd3aW4vMy40L2luY2x1 ZGUvYysrL2FsZ29yaXRobSIgMSAzCiMgNjUgIi9ob21lL0FkbWluaXN0cmF0b3IvZ2NjdGVzdGlu Zy9saWIvZ2NjLWxpYi9pNjg2LXBjLWN5Z3dpbi8zLjQvaW5jbHVkZS9jKysvYWxnb3JpdGhtIiAz CgoKCgojIDEgIi9ob21lL0FkbWluaXN0cmF0b3IvZ2NjdGVzdGluZy9saWIvZ2NjLWxpYi9pNjg2 LXBjLWN5Z3dpbi8zLjQvaW5jbHVkZS9jKysvYml0cy9zdGxfYWxnby5oIiAxIDMKIyA2NCAiL2hv bWUvQWRtaW5pc3RyYXRvci9nY2N0ZXN0aW5nL2xpYi9nY2MtbGliL2k2ODYtcGMtY3lnd2luLzMu NC9pbmNsdWRlL2MrKy9iaXRzL3N0bF9hbGdvLmgiIDMKIyAxICIvaG9tZS9BZG1pbmlzdHJhdG9y L2djY3Rlc3RpbmcvbGliL2djYy1saWIvaTY4Ni1wYy1jeWd3aW4vMy40L2luY2x1ZGUvYysrL2Jp dHMvc3RsX2hlYXAuaCIgMSAzCiMgNjMgIi9ob21lL0FkbWluaXN0cmF0b3IvZ2NjdGVzdGluZy9s aWIvZ2NjLWxpYi9pNjg2LXBjLWN5Z3dpbi8zLjQvaW5jbHVkZS9jKysvYml0cy9zdGxfaGVhcC5o IiAzCm5hbWVzcGFjZSBzdGQKewoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJ dGVyYXRvciwgdHlwZW5hbWUgX0Rpc3RhbmNlLCB0eXBlbmFtZSBfVHA+CiAgICB2b2lkCiAgICBf X3B1c2hfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwKICAgICAgICAgICAgICAg IF9EaXN0YW5jZSBfX2hvbGVJbmRleCwgX0Rpc3RhbmNlIF9fdG9wSW5kZXgsIF9UcCBfX3ZhbHVl KQogICAgewogICAgICBfRGlzdGFuY2UgX19wYXJlbnQgPSAoX19ob2xlSW5kZXggLSAxKSAvIDI7 CiAgICAgIHdoaWxlIChfX2hvbGVJbmRleCA+IF9fdG9wSW5kZXggJiYgKihfX2ZpcnN0ICsgX19w YXJlbnQpIDwgX192YWx1ZSkgewogICAgICAgICooX19maXJzdCArIF9faG9sZUluZGV4KSA9ICoo X19maXJzdCArIF9fcGFyZW50KTsKICAgICAgICBfX2hvbGVJbmRleCA9IF9fcGFyZW50OwogICAg ICAgIF9fcGFyZW50ID0gKF9faG9sZUluZGV4IC0gMSkgLyAyOwogICAgICB9CiAgICAgICooX19m aXJzdCArIF9faG9sZUluZGV4KSA9IF9fdmFsdWU7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1l IF9SYW5kb21BY2Nlc3NJdGVyYXRvcj4KICAgIGlubGluZSB2b2lkCiAgICBwdXNoX2hlYXAoX1Jh bmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3Qp CiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nl c3NJdGVyYXRvcj46OnZhbHVlX3R5cGUKICAgICAgICAgIF9WYWx1ZVR5cGU7CiAgICAgIHR5cGVk ZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyYXRvcj46OmRpZmZl cmVuY2VfdHlwZQogICAgICAgICAgX0Rpc3RhbmNlVHlwZTsKCgogICAgIAoKICAgICAKCiAgICAg IF9fcHVzaF9oZWFwKF9fZmlyc3QsIF9EaXN0YW5jZVR5cGUoKF9fbGFzdCAtIF9fZmlyc3QpIC0g MSksIF9EaXN0YW5jZVR5cGUoMCksCiAgICAgICAgICAgICAgICAgIF9WYWx1ZVR5cGUoKihfX2xh c3QgLSAxKSkpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0 b3IsIHR5cGVuYW1lIF9EaXN0YW5jZSwgdHlwZW5hbWUgX1RwLAogICAgICAgICAgICB0eXBlbmFt ZSBfQ29tcGFyZT4KICAgIHZvaWQKICAgIF9fcHVzaF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRv ciBfX2ZpcnN0LCBfRGlzdGFuY2UgX19ob2xlSW5kZXgsCiAgICAgICAgICAgICAgICBfRGlzdGFu Y2UgX190b3BJbmRleCwgX1RwIF9fdmFsdWUsIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAg X0Rpc3RhbmNlIF9fcGFyZW50ID0gKF9faG9sZUluZGV4IC0gMSkgLyAyOwogICAgICB3aGlsZSAo X19ob2xlSW5kZXggPiBfX3RvcEluZGV4ICYmIF9fY29tcCgqKF9fZmlyc3QgKyBfX3BhcmVudCks IF9fdmFsdWUpKSB7CiAgICAgICAgKihfX2ZpcnN0ICsgX19ob2xlSW5kZXgpID0gKihfX2ZpcnN0 ICsgX19wYXJlbnQpOwogICAgICAgIF9faG9sZUluZGV4ID0gX19wYXJlbnQ7CiAgICAgICAgX19w YXJlbnQgPSAoX19ob2xlSW5kZXggLSAxKSAvIDI7CiAgICAgIH0KICAgICAgKihfX2ZpcnN0ICsg X19ob2xlSW5kZXgpID0gX192YWx1ZTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRv bUFjY2Vzc0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIGlubGluZSB2b2lkCiAgICBw dXNoX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVy YXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQogICAgewogICAgICB0 eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0b3I+Ojp2 YWx1ZV90eXBlCiAgICAgICAgICBfVmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0 ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUKICAg ICAgICAgIF9EaXN0YW5jZVR5cGU7CgoKICAgICAKCgogICAgICBfX3B1c2hfaGVhcChfX2ZpcnN0 LCBfRGlzdGFuY2VUeXBlKChfX2xhc3QgLSBfX2ZpcnN0KSAtIDEpLCBfRGlzdGFuY2VUeXBlKDAp LAogICAgICAgICAgICAgICAgICBfVmFsdWVUeXBlKCooX19sYXN0IC0gMSkpLCBfX2NvbXApOwog ICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIHR5cGVuYW1l IF9EaXN0YW5jZSwgdHlwZW5hbWUgX1RwPgogICAgdm9pZAogICAgX19hZGp1c3RfaGVhcChfUmFu ZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX0Rpc3RhbmNlIF9faG9sZUluZGV4LAogICAgICAg ICAgICAgICAgICBfRGlzdGFuY2UgX19sZW4sIF9UcCBfX3ZhbHVlKQogICAgewogICAgICBfRGlz dGFuY2UgX190b3BJbmRleCA9IF9faG9sZUluZGV4OwogICAgICBfRGlzdGFuY2UgX19zZWNvbmRD aGlsZCA9IDIgKiBfX2hvbGVJbmRleCArIDI7CiAgICAgIHdoaWxlIChfX3NlY29uZENoaWxkIDwg X19sZW4pIHsKICAgICAgICBpZiAoKihfX2ZpcnN0ICsgX19zZWNvbmRDaGlsZCkgPCAqKF9fZmly c3QgKyAoX19zZWNvbmRDaGlsZCAtIDEpKSkKICAgICAgICAgIF9fc2Vjb25kQ2hpbGQtLTsKICAg ICAgICAqKF9fZmlyc3QgKyBfX2hvbGVJbmRleCkgPSAqKF9fZmlyc3QgKyBfX3NlY29uZENoaWxk KTsKICAgICAgICBfX2hvbGVJbmRleCA9IF9fc2Vjb25kQ2hpbGQ7CiAgICAgICAgX19zZWNvbmRD aGlsZCA9IDIgKiAoX19zZWNvbmRDaGlsZCArIDEpOwogICAgICB9CiAgICAgIGlmIChfX3NlY29u ZENoaWxkID09IF9fbGVuKSB7CiAgICAgICAgKihfX2ZpcnN0ICsgX19ob2xlSW5kZXgpID0gKihf X2ZpcnN0ICsgKF9fc2Vjb25kQ2hpbGQgLSAxKSk7CiAgICAgICAgX19ob2xlSW5kZXggPSBfX3Nl Y29uZENoaWxkIC0gMTsKICAgICAgfQogICAgICBfX3B1c2hfaGVhcChfX2ZpcnN0LCBfX2hvbGVJ bmRleCwgX190b3BJbmRleCwgX192YWx1ZSk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9S YW5kb21BY2Nlc3NJdGVyYXRvciwgdHlwZW5hbWUgX1RwPgogICAgaW5saW5lIHZvaWQKICAgIF9f cG9wX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVy YXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX3Jlc3Vs dCwgX1RwIF9fdmFsdWUpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJh aXRzPF9SYW5kb21BY2Nlc3NJdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZSBfRGlzdGFuY2U7CiAg ICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0OwogICAgICBfX2FkanVzdF9oZWFwKF9fZmlyc3QsIF9E aXN0YW5jZSgwKSwgX0Rpc3RhbmNlKF9fbGFzdCAtIF9fZmlyc3QpLCBfX3ZhbHVlKTsKICAgIH0K CiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPgogICAgaW5saW5lIHZv aWQKICAgIHBvcF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfUmFuZG9tQWNj ZXNzSXRlcmF0b3IgX19sYXN0KQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9y X3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0b3I+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CgoK ICAgICAKCiAgICAgCgogICAgICBfX3BvcF9oZWFwKF9fZmlyc3QsIF9fbGFzdCAtIDEsIF9fbGFz dCAtIDEsIF9WYWx1ZVR5cGUoKihfX2xhc3QgLSAxKSkpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIHR5cGVuYW1lIF9EaXN0YW5jZSwKICAgICAgICAg ICB0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgdm9pZAogICAgX19hZGp1c3Rf aGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX0Rpc3RhbmNlIF9faG9sZUluZGV4 LAogICAgICAgICAgICAgICAgICBfRGlzdGFuY2UgX19sZW4sIF9UcCBfX3ZhbHVlLCBfQ29tcGFy ZSBfX2NvbXApCiAgICB7CiAgICAgIF9EaXN0YW5jZSBfX3RvcEluZGV4ID0gX19ob2xlSW5kZXg7 CiAgICAgIF9EaXN0YW5jZSBfX3NlY29uZENoaWxkID0gMiAqIF9faG9sZUluZGV4ICsgMjsKICAg ICAgd2hpbGUgKF9fc2Vjb25kQ2hpbGQgPCBfX2xlbikgewogICAgICAgIGlmIChfX2NvbXAoKihf X2ZpcnN0ICsgX19zZWNvbmRDaGlsZCksICooX19maXJzdCArIChfX3NlY29uZENoaWxkIC0gMSkp KSkKICAgICAgICAgIF9fc2Vjb25kQ2hpbGQtLTsKICAgICAgICAqKF9fZmlyc3QgKyBfX2hvbGVJ bmRleCkgPSAqKF9fZmlyc3QgKyBfX3NlY29uZENoaWxkKTsKICAgICAgICBfX2hvbGVJbmRleCA9 IF9fc2Vjb25kQ2hpbGQ7CiAgICAgICAgX19zZWNvbmRDaGlsZCA9IDIgKiAoX19zZWNvbmRDaGls ZCArIDEpOwogICAgICB9CiAgICAgIGlmIChfX3NlY29uZENoaWxkID09IF9fbGVuKSB7CiAgICAg ICAgKihfX2ZpcnN0ICsgX19ob2xlSW5kZXgpID0gKihfX2ZpcnN0ICsgKF9fc2Vjb25kQ2hpbGQg LSAxKSk7CiAgICAgICAgX19ob2xlSW5kZXggPSBfX3NlY29uZENoaWxkIC0gMTsKICAgICAgfQog ICAgICBfX3B1c2hfaGVhcChfX2ZpcnN0LCBfX2hvbGVJbmRleCwgX190b3BJbmRleCwgX192YWx1 ZSwgX19jb21wKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJh dG9yLCB0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgaW5saW5lIHZvaWQKICAg IF9fcG9wX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJ dGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX3Jl c3VsdCwgX1RwIF9fdmFsdWUsIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgdHlwZWRlZiB0 eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6ZGlmZmVyZW5j ZV90eXBlIF9EaXN0YW5jZTsKICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3Q7CiAgICAgIF9fYWRq dXN0X2hlYXAoX19maXJzdCwgX0Rpc3RhbmNlKDApLCBfRGlzdGFuY2UoX19sYXN0IC0gX19maXJz dCksCiAgICAgICAgICAgICAgICAgICAgX192YWx1ZSwgX19jb21wKTsKICAgIH0KCiAgdGVtcGxh dGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAg IGlubGluZSB2b2lkCiAgICBwb3BfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwK ICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsIF9Db21wYXJlIF9fY29t cCkKICAgIHsKCiAgICAgCgoKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8 X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOwogICAgICBfX3Bv cF9oZWFwKF9fZmlyc3QsIF9fbGFzdCAtIDEsIF9fbGFzdCAtIDEsIF9WYWx1ZVR5cGUoKihfX2xh c3QgLSAxKSksIF9fY29tcCk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nl c3NJdGVyYXRvcj4KICAgIHZvaWQKICAgIG1ha2VfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3Ig X19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCkKICAgIHsKICAgICAgdHlwZWRl ZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6dmFsdWVf dHlwZQogICAgICAgICAgX1ZhbHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRv cl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlCiAgICAgICAg ICBfRGlzdGFuY2VUeXBlOwoKCiAgICAgCgogICAgIAoKICAgICAgaWYgKF9fbGFzdCAtIF9fZmly c3QgPCAyKSByZXR1cm47CiAgICAgIF9EaXN0YW5jZVR5cGUgX19sZW4gPSBfX2xhc3QgLSBfX2Zp cnN0OwogICAgICBfRGlzdGFuY2VUeXBlIF9fcGFyZW50ID0gKF9fbGVuIC0gMikvMjsKCiAgICAg IHdoaWxlICh0cnVlKSB7CiAgICAgICAgX19hZGp1c3RfaGVhcChfX2ZpcnN0LCBfX3BhcmVudCwg X19sZW4sIF9WYWx1ZVR5cGUoKihfX2ZpcnN0ICsgX19wYXJlbnQpKSk7CiAgICAgICAgaWYgKF9f cGFyZW50ID09IDApIHJldHVybjsKICAgICAgICBfX3BhcmVudC0tOwogICAgICB9CiAgICB9Cgog IHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgdHlwZW5hbWUgX0NvbXBh cmU+CiAgICBpbmxpbmUgdm9pZAogICAgbWFrZV9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBf X2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgIF9Db21w YXJlIF9fY29tcCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8 X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6dmFsdWVfdHlwZQogICAgICAgICAgX1ZhbHVlVHlwZTsK ICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJh dG9yPjo6ZGlmZmVyZW5jZV90eXBlCiAgICAgICAgICBfRGlzdGFuY2VUeXBlOwoKCiAgICAgCgoK ICAgICAgaWYgKF9fbGFzdCAtIF9fZmlyc3QgPCAyKSByZXR1cm47CiAgICAgIF9EaXN0YW5jZVR5 cGUgX19sZW4gPSBfX2xhc3QgLSBfX2ZpcnN0OwogICAgICBfRGlzdGFuY2VUeXBlIF9fcGFyZW50 ID0gKF9fbGVuIC0gMikvMjsKCiAgICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgX19hZGp1c3Rf aGVhcChfX2ZpcnN0LCBfX3BhcmVudCwgX19sZW4sCiAgICAgICAgICAgICAgICAgICAgICBfVmFs dWVUeXBlKCooX19maXJzdCArIF9fcGFyZW50KSksIF9fY29tcCk7CiAgICAgICAgaWYgKF9fcGFy ZW50ID09IDApIHJldHVybjsKICAgICAgICBfX3BhcmVudC0tOwogICAgICB9CiAgICB9CgogIHRl bXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvcj4KICAgIHZvaWQKICAgIHNvcnRf aGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9y IF9fbGFzdCkKICAgIHsKCiAgICAgCgogICAgIAoKCiAgICAgIHdoaWxlIChfX2xhc3QgLSBfX2Zp cnN0ID4gMSkKICAgICAgICBwb3BfaGVhcChfX2ZpcnN0LCBfX2xhc3QtLSk7CiAgICB9CgogIHRl bXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgdHlwZW5hbWUgX0NvbXBhcmU+ CiAgICB2b2lkCiAgICBzb3J0X2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9S YW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21w KQogICAgewoKICAgICAKCgogICAgICB3aGlsZSAoX19sYXN0IC0gX19maXJzdCA+IDEpCiAgICAg ICAgcG9wX2hlYXAoX19maXJzdCwgX19sYXN0LS0sIF9fY29tcCk7CiAgICB9Cgp9CiMgNjUgIi9o b21lL0FkbWluaXN0cmF0b3IvZ2NjdGVzdGluZy9saWIvZ2NjLWxpYi9pNjg2LXBjLWN5Z3dpbi8z LjQvaW5jbHVkZS9jKysvYml0cy9zdGxfYWxnby5oIiAyIDMKIyAxICIvaG9tZS9BZG1pbmlzdHJh dG9yL2djY3Rlc3RpbmcvbGliL2djYy1saWIvaTY4Ni1wYy1jeWd3aW4vMy40L2luY2x1ZGUvYysr L2JpdHMvc3RsX3RlbXBidWYuaCIgMSAzCiMgNjQgIi9ob21lL0FkbWluaXN0cmF0b3IvZ2NjdGVz dGluZy9saWIvZ2NjLWxpYi9pNjg2LXBjLWN5Z3dpbi8zLjQvaW5jbHVkZS9jKysvYml0cy9zdGxf dGVtcGJ1Zi5oIiAzCm5hbWVzcGFjZSBzdGQKewojIDc0ICIvaG9tZS9BZG1pbmlzdHJhdG9yL2dj Y3Rlc3RpbmcvbGliL2djYy1saWIvaTY4Ni1wYy1jeWd3aW4vMy40L2luY2x1ZGUvYysrL2JpdHMv c3RsX3RlbXBidWYuaCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvciwgY2xhc3Mg X1RwPgogIGNsYXNzIF9UZW1wb3JhcnlfYnVmZmVyCnsKCiAKCiAgcHRyZGlmZl90IF9NX29yaWdp bmFsX2xlbjsKICBwdHJkaWZmX3QgX01fbGVuOwogIF9UcCogX01fYnVmZmVyOwoKCiAgdm9pZCBf TV9hbGxvY2F0ZV9idWZmZXIoKSB7CiAgICBfTV9vcmlnaW5hbF9sZW4gPSBfTV9sZW47CiAgICBf TV9idWZmZXIgPSAwOwoKICAgIGlmIChfTV9sZW4gPiAocHRyZGlmZl90KSgyMTQ3NDgzNjQ3IC8g c2l6ZW9mKF9UcCkpKQogICAgICBfTV9sZW4gPSAyMTQ3NDgzNjQ3IC8gc2l6ZW9mKF9UcCk7Cgog ICAgd2hpbGUgKF9NX2xlbiA+IDApIHsKICAgICAgX01fYnVmZmVyID0gKF9UcCopIG1hbGxvYyhf TV9sZW4gKiBzaXplb2YoX1RwKSk7CiAgICAgIGlmIChfTV9idWZmZXIpCiAgICAgICAgYnJlYWs7 CiAgICAgIF9NX2xlbiAvPSAyOwogICAgfQogIH0KCiAgdm9pZCBfTV9pbml0aWFsaXplX2J1ZmZl cihjb25zdCBfVHAmLCBfX3RydWVfdHlwZSkge30KICB2b2lkIF9NX2luaXRpYWxpemVfYnVmZmVy KGNvbnN0IF9UcCYgdmFsLCBfX2ZhbHNlX3R5cGUpIHsKICAgIHVuaW5pdGlhbGl6ZWRfZmlsbF9u KF9NX2J1ZmZlciwgX01fbGVuLCB2YWwpOwogIH0KCnB1YmxpYzoKCiAgcHRyZGlmZl90IHNpemUo KSBjb25zdCB7IHJldHVybiBfTV9sZW47IH0KCiAgcHRyZGlmZl90IHJlcXVlc3RlZF9zaXplKCkg Y29uc3QgeyByZXR1cm4gX01fb3JpZ2luYWxfbGVuOyB9CgogIF9UcCogYmVnaW4oKSB7IHJldHVy biBfTV9idWZmZXI7IH0KCiAgX1RwKiBlbmQoKSB7IHJldHVybiBfTV9idWZmZXIgKyBfTV9sZW47 IH0KCiAgX1RlbXBvcmFyeV9idWZmZXIoX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2Fy ZEl0ZXJhdG9yIF9fbGFzdCkgewoKICAgIHR5cGVkZWYgdHlwZW5hbWUgX190eXBlX3RyYWl0czxf VHA+OjpoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yCiAgICAgICAgICAgIF9Ucml2aWFs OwoKICAgIHRyeSB7CiAgICAgIF9NX2xlbiA9IHN0ZDo6ZGlzdGFuY2UoX19maXJzdCwgX19sYXN0 KTsKICAgICAgX01fYWxsb2NhdGVfYnVmZmVyKCk7CiAgICAgIGlmIChfTV9sZW4gPiAwKQogICAg ICAgIF9NX2luaXRpYWxpemVfYnVmZmVyKCpfX2ZpcnN0LCBfVHJpdmlhbCgpKTsKICAgIH0KICAg IGNhdGNoKC4uLikKICAgICAgewogICAgICAgIGZyZWUoX01fYnVmZmVyKTsKICAgICAgICBfTV9i dWZmZXIgPSAwOwogICAgICAgIF9NX2xlbiA9IDA7CiAgICAgICAgdGhyb3c7CiAgICAgIH0KICB9 CgogIH5fVGVtcG9yYXJ5X2J1ZmZlcigpIHsKICAgIF9EZXN0cm95KF9NX2J1ZmZlciwgX01fYnVm ZmVyICsgX01fbGVuKTsKICAgIGZyZWUoX01fYnVmZmVyKTsKICB9Cgpwcml2YXRlOgoKICBfVGVt cG9yYXJ5X2J1ZmZlcihjb25zdCBfVGVtcG9yYXJ5X2J1ZmZlciYpIHt9CiAgdm9pZCBvcGVyYXRv cj0oY29uc3QgX1RlbXBvcmFyeV9idWZmZXImKSB7fQp9OwoKfQojIDY2ICIvaG9tZS9BZG1pbmlz dHJhdG9yL2djY3Rlc3RpbmcvbGliL2djYy1saWIvaTY4Ni1wYy1jeWd3aW4vMy40L2luY2x1ZGUv YysrL2JpdHMvc3RsX2FsZ28uaCIgMiAzCgoKCm5hbWVzcGFjZSBzdGQKewojIDg0ICIvaG9tZS9B ZG1pbmlzdHJhdG9yL2djY3Rlc3RpbmcvbGliL2djYy1saWIvaTY4Ni1wYy1jeWd3aW4vMy40L2lu Y2x1ZGUvYysrL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICBp bmxpbmUgY29uc3QgX1RwJgogICAgX19tZWRpYW4oY29uc3QgX1RwJiBfX2EsIGNvbnN0IF9UcCYg X19iLCBjb25zdCBfVHAmIF9fYykKICAgIHsKCiAgICAgCiAgICAgIGlmIChfX2EgPCBfX2IpCiAg ICAgICAgaWYgKF9fYiA8IF9fYykKICAgICAgICAgIHJldHVybiBfX2I7CiAgICAgICAgZWxzZSBp ZiAoX19hIDwgX19jKQogICAgICAgICAgcmV0dXJuIF9fYzsKICAgICAgICBlbHNlCiAgICAgICAg ICByZXR1cm4gX19hOwogICAgICBlbHNlIGlmIChfX2EgPCBfX2MpCiAgICAgICAgcmV0dXJuIF9f YTsKICAgICAgZWxzZSBpZiAoX19iIDwgX19jKQogICAgICAgIHJldHVybiBfX2M7CiAgICAgIGVs c2UKICAgICAgICByZXR1cm4gX19iOwogICAgfQojIDExOCAiL2hvbWUvQWRtaW5pc3RyYXRvci9n Y2N0ZXN0aW5nL2xpYi9nY2MtbGliL2k2ODYtcGMtY3lnd2luLzMuNC9pbmNsdWRlL2MrKy9iaXRz L3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9Db21wYXJl PgogICAgaW5saW5lIGNvbnN0IF9UcCYKICAgIF9fbWVkaWFuKGNvbnN0IF9UcCYgX19hLCBjb25z dCBfVHAmIF9fYiwgY29uc3QgX1RwJiBfX2MsIF9Db21wYXJlIF9fY29tcCkKICAgIHsKCiAgICAg CiAgICAgIGlmIChfX2NvbXAoX19hLCBfX2IpKQogICAgICAgIGlmIChfX2NvbXAoX19iLCBfX2Mp KQogICAgICAgICAgcmV0dXJuIF9fYjsKICAgICAgICBlbHNlIGlmIChfX2NvbXAoX19hLCBfX2Mp KQogICAgICAgICAgcmV0dXJuIF9fYzsKICAgICAgICBlbHNlCiAgICAgICAgICByZXR1cm4gX19h OwogICAgICBlbHNlIGlmIChfX2NvbXAoX19hLCBfX2MpKQogICAgICAgIHJldHVybiBfX2E7CiAg ICAgIGVsc2UgaWYgKF9fY29tcChfX2IsIF9fYykpCiAgICAgICAgcmV0dXJuIF9fYzsKICAgICAg ZWxzZQogICAgICAgIHJldHVybiBfX2I7CiAgICB9CiMgMTUwICIvaG9tZS9BZG1pbmlzdHJhdG9y L2djY3Rlc3RpbmcvbGliL2djYy1saWIvaTY4Ni1wYy1jeWd3aW4vMy40L2luY2x1ZGUvYysrL2Jp dHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1l IF9GdW5jdGlvbj4KICAgIF9GdW5jdGlvbgogICAgZm9yX2VhY2goX0lucHV0SXRlciBfX2ZpcnN0 LCBfSW5wdXRJdGVyIF9fbGFzdCwgX0Z1bmN0aW9uIF9fZikKICAgIHsKCiAgICAgCiAgICAgIGZv ciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKICAgICAgICBfX2YoKl9fZmlyc3Qp OwogICAgICByZXR1cm4gX19mOwogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1 dEl0ZXIsIHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSBfSW5wdXRJdGVyCiAgICBmaW5kKF9JbnB1 dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgIGNvbnN0IF9UcCYgX192 YWwsCiAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZykKICAgIHsKICAgICAgd2hpbGUgKF9fZmly c3QgIT0gX19sYXN0ICYmICEoKl9fZmlyc3QgPT0gX192YWwpKQogICAgICAgICsrX19maXJzdDsK ICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lu cHV0SXRlciwgdHlwZW5hbWUgX1ByZWRpY2F0ZT4KICAgIGlubGluZSBfSW5wdXRJdGVyCiAgICBm aW5kX2lmKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAg IF9QcmVkaWNhdGUgX19wcmVkLAogICAgICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcpCiAgICB7 CiAgICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCAmJiAhX19wcmVkKCpfX2ZpcnN0KSkKICAg ICAgICArK19fZmlyc3Q7CiAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgfQoKCgoKCgogIHRlbXBs YXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfVHA+CiAgICBfUmFuZG9t QWNjZXNzSXRlcgogICAgZmluZChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNj ZXNzSXRlciBfX2xhc3QsCiAgICAgICAgIGNvbnN0IF9UcCYgX192YWwsCiAgICAgICAgIHJhbmRv bV9hY2Nlc3NfaXRlcmF0b3JfdGFnKQogICAgewogICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFp dHM8X1JhbmRvbUFjY2Vzc0l0ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX190cmlwX2NvdW50CiAgICAg ICAgPSAoX19sYXN0IC0gX19maXJzdCkgPj4gMjsKCiAgICAgIGZvciAoIDsgX190cmlwX2NvdW50 ID4gMCA7IC0tX190cmlwX2NvdW50KSB7CiAgICAgICAgaWYgKCpfX2ZpcnN0ID09IF9fdmFsKSBy ZXR1cm4gX19maXJzdDsKICAgICAgICArK19fZmlyc3Q7CgogICAgICAgIGlmICgqX19maXJzdCA9 PSBfX3ZhbCkgcmV0dXJuIF9fZmlyc3Q7CiAgICAgICAgKytfX2ZpcnN0OwoKICAgICAgICBpZiAo Kl9fZmlyc3QgPT0gX192YWwpIHJldHVybiBfX2ZpcnN0OwogICAgICAgICsrX19maXJzdDsKCiAg ICAgICAgaWYgKCpfX2ZpcnN0ID09IF9fdmFsKSByZXR1cm4gX19maXJzdDsKICAgICAgICArK19f Zmlyc3Q7CiAgICAgIH0KCiAgICAgIHN3aXRjaChfX2xhc3QgLSBfX2ZpcnN0KSB7CiAgICAgIGNh c2UgMzoKICAgICAgICBpZiAoKl9fZmlyc3QgPT0gX192YWwpIHJldHVybiBfX2ZpcnN0OwogICAg ICAgICsrX19maXJzdDsKICAgICAgY2FzZSAyOgogICAgICAgIGlmICgqX19maXJzdCA9PSBfX3Zh bCkgcmV0dXJuIF9fZmlyc3Q7CiAgICAgICAgKytfX2ZpcnN0OwogICAgICBjYXNlIDE6CiAgICAg ICAgaWYgKCpfX2ZpcnN0ID09IF9fdmFsKSByZXR1cm4gX19maXJzdDsKICAgICAgICArK19fZmly c3Q7CiAgICAgIGNhc2UgMDoKICAgICAgZGVmYXVsdDoKICAgICAgICByZXR1cm4gX19sYXN0Owog ICAgICB9CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIs IHR5cGVuYW1lIF9QcmVkaWNhdGU+CiAgICBfUmFuZG9tQWNjZXNzSXRlcgogICAgZmluZF9pZihf UmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAg ICAgICAgIF9QcmVkaWNhdGUgX19wcmVkLAogICAgICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJh dG9yX3RhZykKICAgIHsKICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nl c3NJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9fdHJpcF9jb3VudAogICAgICAgID0gKF9fbGFzdCAt IF9fZmlyc3QpID4+IDI7CgogICAgICBmb3IgKCA7IF9fdHJpcF9jb3VudCA+IDAgOyAtLV9fdHJp cF9jb3VudCkgewogICAgICAgIGlmIChfX3ByZWQoKl9fZmlyc3QpKSByZXR1cm4gX19maXJzdDsK ICAgICAgICArK19fZmlyc3Q7CgogICAgICAgIGlmIChfX3ByZWQoKl9fZmlyc3QpKSByZXR1cm4g X19maXJzdDsKICAgICAgICArK19fZmlyc3Q7CgogICAgICAgIGlmIChfX3ByZWQoKl9fZmlyc3Qp KSByZXR1cm4gX19maXJzdDsKICAgICAgICArK19fZmlyc3Q7CgogICAgICAgIGlmIChfX3ByZWQo Kl9fZmlyc3QpKSByZXR1cm4gX19maXJzdDsKICAgICAgICArK19fZmlyc3Q7CiAgICAgIH0KCiAg ICAgIHN3aXRjaChfX2xhc3QgLSBfX2ZpcnN0KSB7CiAgICAgIGNhc2UgMzoKICAgICAgICBpZiAo X19wcmVkKCpfX2ZpcnN0KSkgcmV0dXJuIF9fZmlyc3Q7CiAgICAgICAgKytfX2ZpcnN0OwogICAg ICBjYXNlIDI6CiAgICAgICAgaWYgKF9fcHJlZCgqX19maXJzdCkpIHJldHVybiBfX2ZpcnN0Owog ICAgICAgICsrX19maXJzdDsKICAgICAgY2FzZSAxOgogICAgICAgIGlmIChfX3ByZWQoKl9fZmly c3QpKSByZXR1cm4gX19maXJzdDsKICAgICAgICArK19fZmlyc3Q7CiAgICAgIGNhc2UgMDoKICAg ICAgZGVmYXVsdDoKICAgICAgICByZXR1cm4gX19sYXN0OwogICAgICB9CiAgICB9CiMgMjg5ICIv aG9tZS9BZG1pbmlzdHJhdG9yL2djY3Rlc3RpbmcvbGliL2djYy1saWIvaTY4Ni1wYy1jeWd3aW4v My40L2luY2x1ZGUvYysrL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9J bnB1dEl0ZXIsIHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSBfSW5wdXRJdGVyCiAgICBmaW5kKF9J bnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgIGNvbnN0IF9UcCYg X192YWwpCiAgICB7CgogICAgIAogICAgIAoKICAgICAgcmV0dXJuIGZpbmQoX19maXJzdCwgX19s YXN0LCBfX3ZhbCwgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7CiAgICB9CiMgMzA5ICIv aG9tZS9BZG1pbmlzdHJhdG9yL2djY3Rlc3RpbmcvbGliL2djYy1saWIvaTY4Ni1wYy1jeWd3aW4v My40L2luY2x1ZGUvYysrL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9J bnB1dEl0ZXIsIHR5cGVuYW1lIF9QcmVkaWNhdGU+CiAgICBpbmxpbmUgX0lucHV0SXRlcgogICAg ZmluZF9pZihfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAg ICBfUHJlZGljYXRlIF9fcHJlZCkKICAgIHsKCiAgICAgCiAgICAgCgogICAgICByZXR1cm4gZmlu ZF9pZihfX2ZpcnN0LCBfX2xhc3QsIF9fcHJlZCwgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0 KSk7CiAgICB9CiMgMzI5ICIvaG9tZS9BZG1pbmlzdHJhdG9yL2djY3Rlc3RpbmcvbGliL2djYy1s aWIvaTY4Ni1wYy1jeWd3aW4vMy40L2luY2x1ZGUvYysrL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRl bXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcj4KICAgIF9Gb3J3YXJkSXRlcgogICAgYWRqYWNl bnRfZmluZChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCkKICAgIHsK CiAgICAgCiAgICAgCgogICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpCiAgICAgICAgcmV0dXJu IF9fbGFzdDsKICAgICAgX0ZvcndhcmRJdGVyIF9fbmV4dCA9IF9fZmlyc3Q7CiAgICAgIHdoaWxl KCsrX19uZXh0ICE9IF9fbGFzdCkgewogICAgICAgIGlmICgqX19maXJzdCA9PSAqX19uZXh0KQog ICAgICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICAgICAgX19maXJzdCA9IF9fbmV4dDsKICAgICAg fQogICAgICByZXR1cm4gX19sYXN0OwogICAgfQojIDM1OCAiL2hvbWUvQWRtaW5pc3RyYXRvci9n Y2N0ZXN0aW5nL2xpYi9nY2MtbGliL2k2ODYtcGMtY3lnd2luLzMuNC9pbmNsdWRlL2MrKy9iaXRz L3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1l IF9CaW5hcnlQcmVkaWNhdGU+CiAgICBfRm9yd2FyZEl0ZXIKICAgIGFkamFjZW50X2ZpbmQoX0Zv cndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAg IF9CaW5hcnlQcmVkaWNhdGUgX19iaW5hcnlfcHJlZCkKICAgIHsKCiAgICAgCiAgICAgCgoKICAg ICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQogICAgICAgIHJldHVybiBfX2xhc3Q7CiAgICAgIF9G b3J3YXJkSXRlciBfX25leHQgPSBfX2ZpcnN0OwogICAgICB3aGlsZSgrK19fbmV4dCAhPSBfX2xh c3QpIHsKICAgICAgICBpZiAoX19iaW5hcnlfcHJlZCgqX19maXJzdCwgKl9fbmV4dCkpCiAgICAg ICAgICByZXR1cm4gX19maXJzdDsKICAgICAgICBfX2ZpcnN0ID0gX19uZXh0OwogICAgICB9CiAg ICAgIHJldHVybiBfX2xhc3Q7CiAgICB9CiMgMzg3ICIvaG9tZS9BZG1pbmlzdHJhdG9yL2djY3Rl c3RpbmcvbGliL2djYy1saWIvaTY4Ni1wYy1jeWd3aW4vMy40L2luY2x1ZGUvYysrL2JpdHMvc3Rs X2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9UcD4K ICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyPjo6ZGlmZmVyZW5jZV90eXBl CiAgICBjb3VudChfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LCBjb25zdCBf VHAmIF9fdmFsdWUpCiAgICB7CgogICAgIAogICAgIAoKICAgICAKICAgICAgdHlwZW5hbWUgaXRl cmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX19uID0gMDsKICAgICAg Zm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgICAgIGlmICgqX19maXJz dCA9PSBfX3ZhbHVlKQogICAgICAgICAgKytfX247CiAgICAgIHJldHVybiBfX247CiAgICB9CiMg NDExICIvaG9tZS9BZG1pbmlzdHJhdG9yL2djY3Rlc3RpbmcvbGliL2djYy1saWIvaTY4Ni1wYy1j eWd3aW4vMy40L2luY2x1ZGUvYysrL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVu YW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9QcmVkaWNhdGU+CiAgICB0eXBlbmFtZSBpdGVyYXRv cl90cmFpdHM8X0lucHV0SXRlcj46OmRpZmZlcmVuY2VfdHlwZQogICAgY291bnRfaWYoX0lucHV0 SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwgX1ByZWRpY2F0ZSBfX3ByZWQpCiAgICB7 CgogICAgIAogICAgIAoKICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+ OjpkaWZmZXJlbmNlX3R5cGUgX19uID0gMDsKICAgICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFz dDsgKytfX2ZpcnN0KQogICAgICAgIGlmIChfX3ByZWQoKl9fZmlyc3QpKQogICAgICAgICAgKytf X247CiAgICAgIHJldHVybiBfX247CiAgICB9CiMgNDUwICIvaG9tZS9BZG1pbmlzdHJhdG9yL2dj Y3Rlc3RpbmcvbGliL2djYy1saWIvaTY4Ni1wYy1jeWd3aW4vMy40L2luY2x1ZGUvYysrL2JpdHMv c3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcjEsIHR5cGVuYW1l IF9Gb3J3YXJkSXRlcjI+CiAgICBfRm9yd2FyZEl0ZXIxCiAgICBzZWFyY2goX0ZvcndhcmRJdGVy MSBfX2ZpcnN0MSwgX0ZvcndhcmRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgIF9Gb3J3YXJkSXRl cjIgX19maXJzdDIsIF9Gb3J3YXJkSXRlcjIgX19sYXN0MikKICAgIHsKCiAgICAgCiAgICAgCiAg ICAgCgoKCgogICAgICBpZiAoX19maXJzdDEgPT0gX19sYXN0MSB8fCBfX2ZpcnN0MiA9PSBfX2xh c3QyKQogICAgICAgIHJldHVybiBfX2ZpcnN0MTsKCgogICAgICBfRm9yd2FyZEl0ZXIyIF9fdG1w KF9fZmlyc3QyKTsKICAgICAgKytfX3RtcDsKICAgICAgaWYgKF9fdG1wID09IF9fbGFzdDIpCiAg ICAgICAgcmV0dXJuIGZpbmQoX19maXJzdDEsIF9fbGFzdDEsICpfX2ZpcnN0Mik7CgoKCiAgICAg IF9Gb3J3YXJkSXRlcjIgX19wMSwgX19wOwoKICAgICAgX19wMSA9IF9fZmlyc3QyOyArK19fcDE7 CgogICAgICBfRm9yd2FyZEl0ZXIxIF9fY3VycmVudCA9IF9fZmlyc3QxOwoKICAgICAgd2hpbGUg KF9fZmlyc3QxICE9IF9fbGFzdDEpIHsKICAgICAgICBfX2ZpcnN0MSA9IGZpbmQoX19maXJzdDEs IF9fbGFzdDEsICpfX2ZpcnN0Mik7CiAgICAgICAgaWYgKF9fZmlyc3QxID09IF9fbGFzdDEpCiAg ICAgICAgICByZXR1cm4gX19sYXN0MTsKCiAgICAgICAgX19wID0gX19wMTsKICAgICAgICBfX2N1 cnJlbnQgPSBfX2ZpcnN0MTsKICAgICAgICBpZiAoKytfX2N1cnJlbnQgPT0gX19sYXN0MSkKICAg ICAgICAgIHJldHVybiBfX2xhc3QxOwoKICAgICAgICB3aGlsZSAoKl9fY3VycmVudCA9PSAqX19w KSB7CiAgICAgICAgICBpZiAoKytfX3AgPT0gX19sYXN0MikKICAgICAgICAgICAgcmV0dXJuIF9f Zmlyc3QxOwogICAgICAgICAgaWYgKCsrX19jdXJyZW50ID09IF9fbGFzdDEpCiAgICAgICAgICAg IHJldHVybiBfX2xhc3QxOwogICAgICAgIH0KCiAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgfQog ICAgICByZXR1cm4gX19maXJzdDE7CiAgICB9CiMgNTIyICIvaG9tZS9BZG1pbmlzdHJhdG9yL2dj Y3Rlc3RpbmcvbGliL2djYy1saWIvaTY4Ni1wYy1jeWd3aW4vMy40L2luY2x1ZGUvYysrL2JpdHMv c3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcjEsIHR5cGVuYW1l IF9Gb3J3YXJkSXRlcjIsIHR5cGVuYW1lIF9CaW5hcnlQcmVkPgogICAgX0ZvcndhcmRJdGVyMQog ICAgc2VhcmNoKF9Gb3J3YXJkSXRlcjEgX19maXJzdDEsIF9Gb3J3YXJkSXRlcjEgX19sYXN0MSwK ICAgICAgICAgICBfRm9yd2FyZEl0ZXIyIF9fZmlyc3QyLCBfRm9yd2FyZEl0ZXIyIF9fbGFzdDIs CiAgICAgICAgICAgX0JpbmFyeVByZWQgX19wcmVkaWNhdGUpCiAgICB7CgogICAgIAogICAgIAog ICAgIAoKCgoKICAgICAgaWYgKF9fZmlyc3QxID09IF9fbGFzdDEgfHwgX19maXJzdDIgPT0gX19s YXN0MikKICAgICAgICByZXR1cm4gX19maXJzdDE7CgoKICAgICAgX0ZvcndhcmRJdGVyMiBfX3Rt cChfX2ZpcnN0Mik7CiAgICAgICsrX190bXA7CiAgICAgIGlmIChfX3RtcCA9PSBfX2xhc3QyKSB7 CiAgICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgIV9fcHJlZGljYXRlKCpfX2Zp cnN0MSwgKl9fZmlyc3QyKSkKICAgICAgICAgICsrX19maXJzdDE7CiAgICAgICAgcmV0dXJuIF9f Zmlyc3QxOwogICAgICB9CgoKCiAgICAgIF9Gb3J3YXJkSXRlcjIgX19wMSwgX19wOwoKICAgICAg X19wMSA9IF9fZmlyc3QyOyArK19fcDE7CgogICAgICBfRm9yd2FyZEl0ZXIxIF9fY3VycmVudCA9 IF9fZmlyc3QxOwoKICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEpIHsKICAgICAgICB3 aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSkgewogICAgICAgICAgaWYgKF9fcHJlZGljYXRlKCpf X2ZpcnN0MSwgKl9fZmlyc3QyKSkKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICArK19fZmly c3QxOwogICAgICAgIH0KICAgICAgICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiAhX19w cmVkaWNhdGUoKl9fZmlyc3QxLCAqX19maXJzdDIpKQogICAgICAgICAgKytfX2ZpcnN0MTsKICAg ICAgICBpZiAoX19maXJzdDEgPT0gX19sYXN0MSkKICAgICAgICAgIHJldHVybiBfX2xhc3QxOwoK ICAgICAgICBfX3AgPSBfX3AxOwogICAgICAgIF9fY3VycmVudCA9IF9fZmlyc3QxOwogICAgICAg IGlmICgrK19fY3VycmVudCA9PSBfX2xhc3QxKSByZXR1cm4gX19sYXN0MTsKCiAgICAgICAgd2hp bGUgKF9fcHJlZGljYXRlKCpfX2N1cnJlbnQsICpfX3ApKSB7CiAgICAgICAgICBpZiAoKytfX3Ag PT0gX19sYXN0MikKICAgICAgICAgICAgcmV0dXJuIF9fZmlyc3QxOwogICAgICAgICAgaWYgKCsr X19jdXJyZW50ID09IF9fbGFzdDEpCiAgICAgICAgICAgIHJldHVybiBfX2xhc3QxOwogICAgICAg IH0KCiAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgfQogICAgICByZXR1cm4gX19maXJzdDE7CiAg ICB9CiMgNTk2ICIvaG9tZS9BZG1pbmlzdHJhdG9yL2djY3Rlc3RpbmcvbGliL2djYy1saWIvaTY4 Ni1wYy1jeWd3aW4vMy40L2luY2x1ZGUvYysrL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRl PHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX0ludGVnZXIsIHR5cGVuYW1lIF9UcD4K ICAgIF9Gb3J3YXJkSXRlcgogICAgc2VhcmNoX24oX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3 YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICBfSW50ZWdlciBfX2NvdW50LCBjb25zdCBfVHAm IF9fdmFsKQogICAgewoKICAgICAKICAgICAKCiAgICAgCgogICAgICBpZiAoX19jb3VudCA8PSAw KQogICAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgICBlbHNlIHsKICAgICAgICBfX2ZpcnN0ID0g ZmluZChfX2ZpcnN0LCBfX2xhc3QsIF9fdmFsKTsKICAgICAgICB3aGlsZSAoX19maXJzdCAhPSBf X2xhc3QpIHsKICAgICAgICAgIF9JbnRlZ2VyIF9fbiA9IF9fY291bnQgLSAxOwogICAgICAgICAg X0ZvcndhcmRJdGVyIF9faSA9IF9fZmlyc3Q7CiAgICAgICAgICArK19faTsKICAgICAgICAgIHdo aWxlIChfX2kgIT0gX19sYXN0ICYmIF9fbiAhPSAwICYmICpfX2kgPT0gX192YWwpIHsKICAgICAg ICAgICAgKytfX2k7CiAgICAgICAgICAgIC0tX19uOwogICAgICAgICAgfQogICAgICAgICAgaWYg KF9fbiA9PSAwKQogICAgICAgICAgICByZXR1cm4gX19maXJzdDsKICAgICAgICAgIGVsc2UKICAg ICAgICAgICAgX19maXJzdCA9IGZpbmQoX19pLCBfX2xhc3QsIF9fdmFsKTsKICAgICAgICB9CiAg ICAgICAgcmV0dXJuIF9fbGFzdDsKICAgICAgfQogICAgfQojIDY0MyAiL2hvbWUvQWRtaW5pc3Ry YXRvci9nY2N0ZXN0aW5nL2xpYi9nY2MtbGliL2k2ODYtcGMtY3lnd2luLzMuNC9pbmNsdWRlL2Mr Ky9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5 cGVuYW1lIF9JbnRlZ2VyLCB0eXBlbmFtZSBfVHAsCiAgICAgICAgICAgdHlwZW5hbWUgX0JpbmFy eVByZWQ+CiAgICBfRm9yd2FyZEl0ZXIKICAgIHNlYXJjaF9uKF9Gb3J3YXJkSXRlciBfX2ZpcnN0 LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgX0ludGVnZXIgX19jb3VudCwgY29u c3QgX1RwJiBfX3ZhbCwKICAgICAgICAgICAgIF9CaW5hcnlQcmVkIF9fYmluYXJ5X3ByZWQpCiAg ICB7CgogICAgIAogICAgIAoKCiAgICAgIGlmIChfX2NvdW50IDw9IDApCiAgICAgICAgcmV0dXJu IF9fZmlyc3Q7CiAgICAgIGVsc2UgewogICAgICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkg ewogICAgICAgICAgaWYgKF9fYmluYXJ5X3ByZWQoKl9fZmlyc3QsIF9fdmFsKSkKICAgICAgICAg ICAgYnJlYWs7CiAgICAgICAgICArK19fZmlyc3Q7CiAgICAgICAgfQogICAgICAgIHdoaWxlIChf X2ZpcnN0ICE9IF9fbGFzdCkgewogICAgICAgICAgX0ludGVnZXIgX19uID0gX19jb3VudCAtIDE7 CiAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19pID0gX19maXJzdDsKICAgICAgICAgICsrX19pOwog ICAgICAgICAgd2hpbGUgKF9faSAhPSBfX2xhc3QgJiYgX19uICE9IDAgJiYgX19iaW5hcnlfcHJl ZCgqX19pLCBfX3ZhbCkpIHsKICAgICAgICAgICAgKytfX2k7CiAgICAgICAgICAgIC0tX19uOwog ICAgICAgICAgfQogICAgICAgICAgaWYgKF9fbiA9PSAwKQogICAgICAgICAgICByZXR1cm4gX19m aXJzdDsKICAgICAgICAgIGVsc2UgewogICAgICAgICAgICB3aGlsZSAoX19pICE9IF9fbGFzdCkg ewogICAgICAgICAgICAgIGlmIChfX2JpbmFyeV9wcmVkKCpfX2ksIF9fdmFsKSkKICAgICAgICAg ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICsrX19pOwogICAgICAgICAgICB9CiAgICAgICAg ICAgIF9fZmlyc3QgPSBfX2k7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBf X2xhc3Q7CiAgICAgIH0KICAgIH0KIyA2OTcgIi9ob21lL0FkbWluaXN0cmF0b3IvZ2NjdGVzdGlu Zy9saWIvZ2NjLWxpYi9pNjg2LXBjLWN5Z3dpbi8zLjQvaW5jbHVkZS9jKysvYml0cy9zdGxfYWxn by5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyMSwgdHlwZW5hbWUgX0Zvcndh cmRJdGVyMj4KICAgIF9Gb3J3YXJkSXRlcjIKICAgIHN3YXBfcmFuZ2VzKF9Gb3J3YXJkSXRlcjEg X19maXJzdDEsIF9Gb3J3YXJkSXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgIF9Gb3J3YXJk SXRlcjIgX19maXJzdDIpCiAgICB7CgogICAgIAogICAgIAogICAgIAoKCiAgICAgCgoKCiAgICAg IGZvciAoIDsgX19maXJzdDEgIT0gX19sYXN0MTsgKytfX2ZpcnN0MSwgKytfX2ZpcnN0MikKICAg ICAgICBpdGVyX3N3YXAoX19maXJzdDEsIF9fZmlyc3QyKTsKICAgICAgcmV0dXJuIF9fZmlyc3Qy OwogICAgfQojIDczMiAiL2hvbWUvQWRtaW5pc3RyYXRvci9nY2N0ZXN0aW5nL2xpYi9nY2MtbGli L2k2ODYtcGMtY3lnd2luLzMuNC9pbmNsdWRlL2MrKy9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlciwgdHlwZW5hbWUg X1VuYXJ5T3BlcmF0aW9uPgogICAgX091dHB1dEl0ZXIKICAgIHRyYW5zZm9ybShfSW5wdXRJdGVy IF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9f cmVzdWx0LCBfVW5hcnlPcGVyYXRpb24gX191bmFyeV9vcCkKICAgIHsKCiAgICAgCiAgICAgCgoK CiAgICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCwgKytfX3Jlc3VsdCkK ICAgICAgICAqX19yZXN1bHQgPSBfX3VuYXJ5X29wKCpfX2ZpcnN0KTsKICAgICAgcmV0dXJuIF9f cmVzdWx0OwogICAgfQojIDc2NSAiL2hvbWUvQWRtaW5pc3RyYXRvci9nY2N0ZXN0aW5nL2xpYi9n Y2MtbGliL2k2ODYtcGMtY3lnd2luLzMuNC9pbmNsdWRlL2MrKy9iaXRzL3N0bF9hbGdvLmgiIDMK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0SXRlcjIsIHR5 cGVuYW1lIF9PdXRwdXRJdGVyLAogICAgICAgICAgIHR5cGVuYW1lIF9CaW5hcnlPcGVyYXRpb24+ CiAgICBfT3V0cHV0SXRlcgogICAgdHJhbnNmb3JtKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5w dXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfT3V0 cHV0SXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICBfQmluYXJ5T3BlcmF0aW9uIF9fYmluYXJ5 X29wKQogICAgewoKICAgICAKICAgICAKICAgICAKCgoKICAgICAgZm9yICggOyBfX2ZpcnN0MSAh PSBfX2xhc3QxOyArK19fZmlyc3QxLCArK19fZmlyc3QyLCArK19fcmVzdWx0KQogICAgICAgICpf X3Jlc3VsdCA9IF9fYmluYXJ5X29wKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKTsKICAgICAgcmV0dXJu IF9fcmVzdWx0OwogICAgfQojIDc5NiAiL2hvbWUvQWRtaW5pc3RyYXRvci9nY2N0ZXN0aW5nL2xp Yi9nY2MtbGliL2k2ODYtcGMtY3lnd2luLzMuNC9pbmNsdWRlL2MrKy9iaXRzL3N0bF9hbGdvLmgi IDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9UcD4KICAgIHZv aWQKICAgIHJlcGxhY2UoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3Qs CiAgICAgICAgICAgIGNvbnN0IF9UcCYgX19vbGRfdmFsdWUsIGNvbnN0IF9UcCYgX19uZXdfdmFs dWUpCiAgICB7CgogICAgIAogICAgIAoKICAgICAKCgogICAgICBmb3IgKCA7IF9fZmlyc3QgIT0g X19sYXN0OyArK19fZmlyc3QpCiAgICAgICAgaWYgKCpfX2ZpcnN0ID09IF9fb2xkX3ZhbHVlKQog ICAgICAgICAgKl9fZmlyc3QgPSBfX25ld192YWx1ZTsKICAgIH0KIyA4MjUgIi9ob21lL0FkbWlu aXN0cmF0b3IvZ2NjdGVzdGluZy9saWIvZ2NjLWxpYi9pNjg2LXBjLWN5Z3dpbi8zLjQvaW5jbHVk ZS9jKysvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVy LCB0eXBlbmFtZSBfUHJlZGljYXRlLCB0eXBlbmFtZSBfVHA+CiAgICB2b2lkCiAgICByZXBsYWNl X2lmKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAg ICAgICBfUHJlZGljYXRlIF9fcHJlZCwgY29uc3QgX1RwJiBfX25ld192YWx1ZSkKICAgIHsKCiAg ICAgCiAgICAgCgogICAgIAoKCiAgICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19m aXJzdCkKICAgICAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkKICAgICAgICAgICpfX2ZpcnN0ID0g X19uZXdfdmFsdWU7CiAgICB9CiMgODU2ICIvaG9tZS9BZG1pbmlzdHJhdG9yL2djY3Rlc3Rpbmcv bGliL2djYy1saWIvaTY4Ni1wYy1jeWd3aW4vMy40L2luY2x1ZGUvYysrL2JpdHMvc3RsX2FsZ28u aCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVy LCB0eXBlbmFtZSBfVHA+CiAgICBfT3V0cHV0SXRlcgogICAgcmVwbGFjZV9jb3B5KF9JbnB1dEl0 ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgX091dHB1dEl0 ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX29sZF92YWx1ZSwgY29u c3QgX1RwJiBfX25ld192YWx1ZSkKICAgIHsKCiAgICAgCiAgICAgCgogICAgIAoKCiAgICAgIGZv ciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCwgKytfX3Jlc3VsdCkKICAgICAgICAq X19yZXN1bHQgPSAqX19maXJzdCA9PSBfX29sZF92YWx1ZSA/IF9fbmV3X3ZhbHVlIDogKl9fZmly c3Q7CiAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgIH0KIyA4ODggIi9ob21lL0FkbWluaXN0cmF0 b3IvZ2NjdGVzdGluZy9saWIvZ2NjLWxpYi9pNjg2LXBjLWN5Z3dpbi8zLjQvaW5jbHVkZS9jKysv Yml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5h bWUgX091dHB1dEl0ZXIsIHR5cGVuYW1lIF9QcmVkaWNhdGUsCiAgICAgICAgICAgdHlwZW5hbWUg X1RwPgogICAgX091dHB1dEl0ZXIKICAgIHJlcGxhY2VfY29weV9pZihfSW5wdXRJdGVyIF9fZmly c3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9f cmVzdWx0LAogICAgICAgICAgICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVkLCBjb25zdCBfVHAm IF9fbmV3X3ZhbHVlKQogICAgewoKICAgICAKICAgICAKCiAgICAgCgoKICAgICAgZm9yICggOyBf X2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0LCArK19fcmVzdWx0KQogICAgICAgICpfX3Jlc3Vs dCA9IF9fcHJlZCgqX19maXJzdCkgPyBfX25ld192YWx1ZSA6ICpfX2ZpcnN0OwogICAgICByZXR1 cm4gX19yZXN1bHQ7CiAgICB9CiMgOTE4ICIvaG9tZS9BZG1pbmlzdHJhdG9yL2djY3Rlc3Rpbmcv bGliL2djYy1saWIvaTY4Ni1wYy1jeWd3aW4vMy40L2luY2x1ZGUvYysrL2JpdHMvc3RsX2FsZ28u aCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX0dlbmVyYXRv cj4KICAgIHZvaWQKICAgIGdlbmVyYXRlKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0 ZXIgX19sYXN0LCBfR2VuZXJhdG9yIF9fZ2VuKQogICAgewoKICAgICAKICAgICAKCgogICAgICBm b3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAgICAgICAgKl9fZmlyc3QgPSBf X2dlbigpOwogICAgfQojIDk0MiAiL2hvbWUvQWRtaW5pc3RyYXRvci9nY2N0ZXN0aW5nL2xpYi9n Y2MtbGliL2k2ODYtcGMtY3lnd2luLzMuNC9pbmNsdWRlL2MrKy9iaXRzL3N0bF9hbGdvLmgiIDMK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfT3V0cHV0SXRlciwgdHlwZW5hbWUgX1NpemUsIHR5cGVuYW1l IF9HZW5lcmF0b3I+CiAgICBfT3V0cHV0SXRlcgogICAgZ2VuZXJhdGVfbihfT3V0cHV0SXRlciBf X2ZpcnN0LCBfU2l6ZSBfX24sIF9HZW5lcmF0b3IgX19nZW4pCiAgICB7CgogICAgIAoKCgogICAg ICBmb3IgKCA7IF9fbiA+IDA7IC0tX19uLCArK19fZmlyc3QpCiAgICAgICAgKl9fZmlyc3QgPSBf X2dlbigpOwogICAgICByZXR1cm4gX19maXJzdDsKICAgIH0KIyA5NjkgIi9ob21lL0FkbWluaXN0 cmF0b3IvZ2NjdGVzdGluZy9saWIvZ2NjLWxpYi9pNjg2LXBjLWN5Z3dpbi8zLjQvaW5jbHVkZS9j KysvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlw ZW5hbWUgX091dHB1dEl0ZXIsIHR5cGVuYW1lIF9UcD4KICAgIF9PdXRwdXRJdGVyCiAgICByZW1v dmVfY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAg ICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIGNvbnN0IF9UcCYgX192YWx1ZSkKICAgIHsKCiAg ICAgCiAgICAgCgogICAgIAoKCiAgICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19m aXJzdCkKICAgICAgICBpZiAoISgqX19maXJzdCA9PSBfX3ZhbHVlKSkgewogICAgICAgICAgKl9f cmVzdWx0ID0gKl9fZmlyc3Q7CiAgICAgICAgICArK19fcmVzdWx0OwogICAgICAgIH0KICAgICAg cmV0dXJuIF9fcmVzdWx0OwogICAgfQojIDEwMDMgIi9ob21lL0FkbWluaXN0cmF0b3IvZ2NjdGVz dGluZy9saWIvZ2NjLWxpYi9pNjg2LXBjLWN5Z3dpbi8zLjQvaW5jbHVkZS9jKysvYml0cy9zdGxf YWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX091dHB1 dEl0ZXIsIHR5cGVuYW1lIF9QcmVkaWNhdGU+CiAgICBfT3V0cHV0SXRlcgogICAgcmVtb3ZlX2Nv cHlfaWYoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAg ICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBfUHJlZGljYXRlIF9fcHJlZCkKICAgIHsKCiAg ICAgCiAgICAgCgogICAgIAoKCiAgICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19m aXJzdCkKICAgICAgICBpZiAoIV9fcHJlZCgqX19maXJzdCkpIHsKICAgICAgICAgICpfX3Jlc3Vs dCA9ICpfX2ZpcnN0OwogICAgICAgICAgKytfX3Jlc3VsdDsKICAgICAgICB9CiAgICAgIHJldHVy biBfX3Jlc3VsdDsKICAgIH0KIyAxMDM5ICIvaG9tZS9BZG1pbmlzdHJhdG9yL2djY3Rlc3Rpbmcv bGliL2djYy1saWIvaTY4Ni1wYy1jeWd3aW4vMy40L2luY2x1ZGUvYysrL2JpdHMvc3RsX2FsZ28u aCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1RwPgogICAg X0ZvcndhcmRJdGVyCiAgICByZW1vdmUoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRl ciBfX2xhc3QsCiAgICAgICAgICAgY29uc3QgX1RwJiBfX3ZhbHVlKQogICAgewoKICAgICAKICAg ICAKCiAgICAgCgoKICAgICAgX19maXJzdCA9IGZpbmQoX19maXJzdCwgX19sYXN0LCBfX3ZhbHVl KTsKICAgICAgX0ZvcndhcmRJdGVyIF9faSA9IF9fZmlyc3Q7CiAgICAgIHJldHVybiBfX2ZpcnN0 ID09IF9fbGFzdCA/IF9fZmlyc3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogcmVt b3ZlX2NvcHkoKytfX2ksIF9fbGFzdCwgX19maXJzdCwgX192YWx1ZSk7CiAgICB9CiMgMTA3MyAi L2hvbWUvQWRtaW5pc3RyYXRvci9nY2N0ZXN0aW5nL2xpYi9nY2MtbGliL2k2ODYtcGMtY3lnd2lu LzMuNC9pbmNsdWRlL2MrKy9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf Rm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9QcmVkaWNhdGU+CiAgICBfRm9yd2FyZEl0ZXIKICAgIHJl bW92ZV9pZihfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAg ICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCkKICAgIHsKCiAgICAgCiAgICAgCgoKICAgICAgX19m aXJzdCA9IGZpbmRfaWYoX19maXJzdCwgX19sYXN0LCBfX3ByZWQpOwogICAgICBfRm9yd2FyZEl0 ZXIgX19pID0gX19maXJzdDsKICAgICAgcmV0dXJuIF9fZmlyc3QgPT0gX19sYXN0ID8gX19maXJz dAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiByZW1vdmVfY29weV9pZigrK19faSwg X19sYXN0LCBfX2ZpcnN0LCBfX3ByZWQpOwogICAgfQoKCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4KICAgIF9PdXRwdXRJdGVyCiAgICBf X3VuaXF1ZV9jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAg ICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICBvdXRw dXRfaXRlcmF0b3JfdGFnKQogICAgewoKICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9J bnB1dEl0ZXI+Ojp2YWx1ZV90eXBlIF9fdmFsdWUgPSAqX19maXJzdDsKICAgICAgKl9fcmVzdWx0 ID0gX192YWx1ZTsKICAgICAgd2hpbGUgKCsrX19maXJzdCAhPSBfX2xhc3QpCiAgICAgICAgaWYg KCEoX192YWx1ZSA9PSAqX19maXJzdCkpIHsKICAgICAgICAgIF9fdmFsdWUgPSAqX19maXJzdDsK ICAgICAgICAgICorK19fcmVzdWx0ID0gX192YWx1ZTsKICAgICAgICB9CiAgICAgIHJldHVybiAr K19fcmVzdWx0OwogICAgfQoKCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0 eXBlbmFtZSBfRm9yd2FyZEl0ZXI+CiAgICBfRm9yd2FyZEl0ZXIKICAgIF9fdW5pcXVlX2NvcHko X0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAg X0ZvcndhcmRJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9y X3RhZykKICAgIHsKCiAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0OwogICAgICB3aGlsZSAoKytf X2ZpcnN0ICE9IF9fbGFzdCkKICAgICAgICBpZiAoISgqX19yZXN1bHQgPT0gKl9fZmlyc3QpKQog ICAgICAgICAgKisrX19yZXN1bHQgPSAqX19maXJzdDsKICAgICAgcmV0dXJuICsrX19yZXN1bHQ7 CiAgICB9CiMgMTE0NSAiL2hvbWUvQWRtaW5pc3RyYXRvci9nY2N0ZXN0aW5nL2xpYi9nY2MtbGli L2k2ODYtcGMtY3lnd2luLzMuNC9pbmNsdWRlL2MrKy9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4KICAgIGlubGlu ZSBfT3V0cHV0SXRlcgogICAgdW5pcXVlX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJ dGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0KQogICAgewoK ICAgICAKICAgICAKCiAgICAgCgoKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFp dHM8X091dHB1dEl0ZXI+OjppdGVyYXRvcl9jYXRlZ29yeSBfSXRlclR5cGU7CgogICAgICBpZiAo X19maXJzdCA9PSBfX2xhc3QpIHJldHVybiBfX3Jlc3VsdDsKICAgICAgcmV0dXJuIF9fdW5pcXVl X2NvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwgX0l0ZXJUeXBlKCkpOwogICAgfQojIDEx NzAgIi9ob21lL0FkbWluaXN0cmF0b3IvZ2NjdGVzdGluZy9saWIvZ2NjLWxpYi9pNjg2LXBjLWN5 Z3dpbi8zLjQvaW5jbHVkZS9jKysvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXIsIHR5cGVuYW1lIF9CaW5hcnlQcmVk aWNhdGU+CiAgICBfT3V0cHV0SXRlcgogICAgX191bmlxdWVfY29weShfSW5wdXRJdGVyIF9fZmly c3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jl c3VsdCwKICAgICAgICAgICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2JpbmFyeV9wcmVkLAog ICAgICAgICAgICAgICAgICBvdXRwdXRfaXRlcmF0b3JfdGFnKQogICAgewoKICAgICAKCgoKICAg ICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+Ojp2YWx1ZV90eXBlIF9fdmFs dWUgPSAqX19maXJzdDsKICAgICAgKl9fcmVzdWx0ID0gX192YWx1ZTsKICAgICAgd2hpbGUgKCsr X19maXJzdCAhPSBfX2xhc3QpCiAgICAgICAgaWYgKCFfX2JpbmFyeV9wcmVkKF9fdmFsdWUsICpf X2ZpcnN0KSkgewogICAgICAgICAgX192YWx1ZSA9ICpfX2ZpcnN0OwogICAgICAgICAgKisrX19y ZXN1bHQgPSBfX3ZhbHVlOwogICAgICAgIH0KICAgICAgcmV0dXJuICsrX19yZXN1bHQ7CiAgICB9 CiMgMTE5OSAiL2hvbWUvQWRtaW5pc3RyYXRvci9nY2N0ZXN0aW5nL2xpYi9nY2MtbGliL2k2ODYt cGMtY3lnd2luLzMuNC9pbmNsdWRlL2MrKy9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9CaW5h cnlQcmVkaWNhdGU+CiAgICBfRm9yd2FyZEl0ZXIKICAgIF9fdW5pcXVlX2NvcHkoX0lucHV0SXRl ciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJ dGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICBfQmluYXJ5UHJlZGljYXRlIF9fYmluYXJ5 X3ByZWQsCiAgICAgICAgICAgICAgICAgIGZvcndhcmRfaXRlcmF0b3JfdGFnKQogICAgewoKICAg ICAKCgoKICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3Q7CiAgICAgIHdoaWxlICgrK19fZmlyc3Qg IT0gX19sYXN0KQogICAgICAgIGlmICghX19iaW5hcnlfcHJlZCgqX19yZXN1bHQsICpfX2ZpcnN0 KSkgKisrX19yZXN1bHQgPSAqX19maXJzdDsKICAgICAgcmV0dXJuICsrX19yZXN1bHQ7CiAgICB9 CiMgMTIzMiAiL2hvbWUvQWRtaW5pc3RyYXRvci9nY2N0ZXN0aW5nL2xpYi9nY2MtbGliL2k2ODYt cGMtY3lnd2luLzMuNC9pbmNsdWRlL2MrKy9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlciwgdHlwZW5hbWUgX0JpbmFy eVByZWRpY2F0ZT4KICAgIGlubGluZSBfT3V0cHV0SXRlcgogICAgdW5pcXVlX2NvcHkoX0lucHV0 SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgIF9PdXRwdXRJ dGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2JpbmFyeV9w cmVkKQogICAgewoKICAgICAKICAgICAKCgogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9y X3RyYWl0czxfT3V0cHV0SXRlcj46Oml0ZXJhdG9yX2NhdGVnb3J5IF9JdGVyVHlwZTsKCiAgICAg IGlmIChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuIF9fcmVzdWx0OwogICAgICByZXR1cm4gX191 bmlxdWVfY29weShfX2ZpcnN0LCBfX2xhc3QsCl9fcmVzdWx0LCBfX2JpbmFyeV9wcmVkLCBfSXRl clR5cGUoKSk7CiAgICB9CiMgMTI2MyAiL2hvbWUvQWRtaW5pc3RyYXRvci9nY2N0ZXN0aW5nL2xp Yi9nY2MtbGliL2k2ODYtcGMtY3lnd2luLzMuNC9pbmNsdWRlL2MrKy9iaXRzL3N0bF9hbGdvLmgi IDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXI+CiAgICBfRm9yd2FyZEl0ZXIKICAg IHVuaXF1ZShfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCkKICAgIHsK CiAgICAgICAgIAogICAgICAgICAKCgogICAgICAgICAgX19maXJzdCA9IGFkamFjZW50X2ZpbmQo X19maXJzdCwgX19sYXN0KTsKICAgICAgICAgIHJldHVybiB1bmlxdWVfY29weShfX2ZpcnN0LCBf X2xhc3QsIF9fZmlyc3QpOwogICAgfQojIDEyOTAgIi9ob21lL0FkbWluaXN0cmF0b3IvZ2NjdGVz dGluZy9saWIvZ2NjLWxpYi9pNjg2LXBjLWN5Z3dpbi8zLjQvaW5jbHVkZS9jKysvYml0cy9zdGxf YWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfQmlu YXJ5UHJlZGljYXRlPgogICAgX0ZvcndhcmRJdGVyCiAgICB1bmlxdWUoX0ZvcndhcmRJdGVyIF9f Zmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBf X2JpbmFyeV9wcmVkKQogICAgewoKICAgICAKICAgICAKCgoKICAgICAgX19maXJzdCA9IGFkamFj ZW50X2ZpbmQoX19maXJzdCwgX19sYXN0LCBfX2JpbmFyeV9wcmVkKTsKICAgICAgcmV0dXJuIHVu aXF1ZV9jb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19maXJzdCwgX19iaW5hcnlfcHJlZCk7CiAgICB9 CgoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcj4KICAgIHZvaWQK ICAgIF9fcmV2ZXJzZShfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwgX0JpZGlyZWN0aW9uYWxJ dGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICBiaWRpcmVjdGlvbmFsX2l0ZXJh dG9yX3RhZykKICAgIHsKICAgICAgICAgIHdoaWxlICh0cnVlKQogICAgICAgICAgICBpZiAoX19m aXJzdCA9PSBfX2xhc3QgfHwgX19maXJzdCA9PSAtLV9fbGFzdCkKICAgICAgICAgICAgICAgICAg cmV0dXJuOwogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgIGl0ZXJfc3dhcChfX2Zp cnN0KyssIF9fbGFzdCk7CiAgICB9CgoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21B Y2Nlc3NJdGVyPgogICAgdm9pZAogICAgX19yZXZlcnNlKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmly c3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICBy YW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykKICAgIHsKICAgICAgICAgIHdoaWxlIChfX2ZpcnN0 IDwgX19sYXN0KQogICAgICAgICAgICBpdGVyX3N3YXAoX19maXJzdCsrLCAtLV9fbGFzdCk7CiAg ICB9CiMgMTM0OSAiL2hvbWUvQWRtaW5pc3RyYXRvci9nY2N0ZXN0aW5nL2xpYi9nY2MtbGliL2k2 ODYtcGMtY3lnd2luLzMuNC9pbmNsdWRlL2MrKy9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXI+CiAgICBpbmxpbmUgdm9pZAogICAgcmV2ZXJz ZShfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCkK ICAgIHsKCiAgICAgICAgIAoKICAgICAgICAgIF9fcmV2ZXJzZShfX2ZpcnN0LCBfX2xhc3QsIF9f aXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdCkpOwogICAgfQojIDEzNzQgIi9ob21lL0FkbWluaXN0 cmF0b3IvZ2NjdGVzdGluZy9saWIvZ2NjLWxpYi9pNjg2LXBjLWN5Z3dpbi8zLjQvaW5jbHVkZS9j KysvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJ dGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4KICAgIF9PdXRwdXRJdGVyCiAgICByZXZlcnNlX2Nv cHkoX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3Qs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQpCiAgICB7 CgogICAgIAogICAgIAoKCiAgICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkgewogICAgICAg IC0tX19sYXN0OwogICAgICAgICpfX3Jlc3VsdCA9ICpfX2xhc3Q7CiAgICAgICAgKytfX3Jlc3Vs dDsKICAgICAgfQogICAgICByZXR1cm4gX19yZXN1bHQ7CiAgICB9CiMgMTM5OSAiL2hvbWUvQWRt aW5pc3RyYXRvci9nY2N0ZXN0aW5nL2xpYi9nY2MtbGliL2k2ODYtcGMtY3lnd2luLzMuNC9pbmNs dWRlL2MrKy9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRXVjbGlkZWFu UmluZ0VsZW1lbnQ+CiAgICBfRXVjbGlkZWFuUmluZ0VsZW1lbnQKICAgIF9fZ2NkKF9FdWNsaWRl YW5SaW5nRWxlbWVudCBfX20sIF9FdWNsaWRlYW5SaW5nRWxlbWVudCBfX24pCiAgICB7CiAgICAg IHdoaWxlIChfX24gIT0gMCkgewogICAgICAgIF9FdWNsaWRlYW5SaW5nRWxlbWVudCBfX3QgPSBf X20gJSBfX247CiAgICAgICAgX19tID0gX19uOwogICAgICAgIF9fbiA9IF9fdDsKICAgICAgfQog ICAgICByZXR1cm4gX19tOwogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJk SXRlcj4KICAgIHZvaWQKICAgIF9fcm90YXRlKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LAogICAgICAg ICAgICAgX0ZvcndhcmRJdGVyIF9fbWlkZGxlLAogICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9f bGFzdCwKICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZykKICAgIHsKICAgICAgaWYg KChfX2ZpcnN0ID09IF9fbWlkZGxlKSB8fCAoX19sYXN0ID09IF9fbWlkZGxlKSkKICAgICAgICBy ZXR1cm47CgogICAgICBfRm9yd2FyZEl0ZXIgX19maXJzdDIgPSBfX21pZGRsZTsKICAgICAgZG8g ewogICAgICAgIHN3YXAoKl9fZmlyc3QrKywgKl9fZmlyc3QyKyspOwogICAgICAgIGlmIChfX2Zp cnN0ID09IF9fbWlkZGxlKQogICAgICAgICAgX19taWRkbGUgPSBfX2ZpcnN0MjsKICAgICAgfSB3 aGlsZSAoX19maXJzdDIgIT0gX19sYXN0KTsKCiAgICAgIF9fZmlyc3QyID0gX19taWRkbGU7Cgog ICAgICB3aGlsZSAoX19maXJzdDIgIT0gX19sYXN0KSB7CiAgICAgICAgc3dhcCgqX19maXJzdCsr LCAqX19maXJzdDIrKyk7CiAgICAgICAgaWYgKF9fZmlyc3QgPT0gX19taWRkbGUpCiAgICAgICAg ICBfX21pZGRsZSA9IF9fZmlyc3QyOwogICAgICAgIGVsc2UgaWYgKF9fZmlyc3QyID09IF9fbGFz dCkKICAgICAgICAgIF9fZmlyc3QyID0gX19taWRkbGU7CiAgICAgIH0KICAgIH0KCgoKCgoKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXI+CiAgICB2b2lkCiAgICBfX3JvdGF0 ZShfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwKICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFs SXRlciBfX21pZGRsZSwKICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QsCiAg ICAgICAgICAgICAgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcpCiAgICB7CgogICAgIAoKCiAg ICAgIGlmICgoX19maXJzdCA9PSBfX21pZGRsZSkgfHwgKF9fbGFzdCA9PSBfX21pZGRsZSkpCiAg ICAgICAgcmV0dXJuOwoKICAgICAgX19yZXZlcnNlKF9fZmlyc3QsIF9fbWlkZGxlLCBiaWRpcmVj dGlvbmFsX2l0ZXJhdG9yX3RhZygpKTsKICAgICAgX19yZXZlcnNlKF9fbWlkZGxlLCBfX2xhc3Qs IGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnKCkpOwoKICAgICAgd2hpbGUgKF9fZmlyc3QgIT0g X19taWRkbGUgJiYgX19taWRkbGUgIT0gX19sYXN0KQogICAgICAgIHN3YXAgKCpfX2ZpcnN0Kyss ICotLV9fbGFzdCk7CgogICAgICBpZiAoX19maXJzdCA9PSBfX21pZGRsZSkgewogICAgICAgIF9f cmV2ZXJzZShfX21pZGRsZSwgX19sYXN0LCBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZygpKTsK ICAgICAgfQogICAgICBlbHNlIHsKICAgICAgICBfX3JldmVyc2UoX19maXJzdCwgX19taWRkbGUs IGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnKCkpOwogICAgICB9CiAgICB9CgoKCgoKCiAgdGVt cGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXI+CiAgICB2b2lkCiAgICBfX3JvdGF0ZShf UmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIg X19taWRkbGUsCiAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAg ICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykKICAgIHsKCiAgICAgCgoKICAgICAgaWYg KChfX2ZpcnN0ID09IF9fbWlkZGxlKSB8fCAoX19sYXN0ID09IF9fbWlkZGxlKSkKICAgICAgICBy ZXR1cm47CgogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNj ZXNzSXRlcj46OmRpZmZlcmVuY2VfdHlwZSBfRGlzdGFuY2U7CiAgICAgIHR5cGVkZWYgdHlwZW5h bWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVU eXBlOwoKICAgICAgX0Rpc3RhbmNlIF9fbiA9IF9fbGFzdCAtIF9fZmlyc3Q7CiAgICAgIF9EaXN0 YW5jZSBfX2sgPSBfX21pZGRsZSAtIF9fZmlyc3Q7CiAgICAgIF9EaXN0YW5jZSBfX2wgPSBfX24g LSBfX2s7CgogICAgICBpZiAoX19rID09IF9fbCkgewogICAgICAgIHN3YXBfcmFuZ2VzKF9fZmly c3QsIF9fbWlkZGxlLCBfX21pZGRsZSk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CgogICAgICBf RGlzdGFuY2UgX19kID0gX19nY2QoX19uLCBfX2spOwoKICAgICAgZm9yIChfRGlzdGFuY2UgX19p ID0gMDsgX19pIDwgX19kOyBfX2krKykgewogICAgICAgIF9WYWx1ZVR5cGUgX190bXAgPSAqX19m aXJzdDsKICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX3AgPSBfX2ZpcnN0OwoKICAgICAgICBp ZiAoX19rIDwgX19sKSB7CiAgICAgICAgICBmb3IgKF9EaXN0YW5jZSBfX2ogPSAwOyBfX2ogPCBf X2wvX19kOyBfX2orKykgewogICAgICAgICAgICBpZiAoX19wID4gX19maXJzdCArIF9fbCkgewog ICAgICAgICAgICAgICpfX3AgPSAqKF9fcCAtIF9fbCk7CiAgICAgICAgICAgICAgX19wIC09IF9f bDsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgKl9fcCA9ICooX19wICsgX19rKTsKICAgICAg ICAgICAgX19wICs9IF9fazsKICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGVsc2Ugewog ICAgICAgICAgZm9yIChfRGlzdGFuY2UgX19qID0gMDsgX19qIDwgX19rL19fZCAtIDE7IF9faiAr KykgewogICAgICAgICAgICBpZiAoX19wIDwgX19sYXN0IC0gX19rKSB7CiAgICAgICAgICAgICAg Kl9fcCA9ICooX19wICsgX19rKTsKICAgICAgICAgICAgICBfX3AgKz0gX19rOwogICAgICAgICAg ICB9CgogICAgICAgICAgICAqX19wID0gKiAoX19wIC0gX19sKTsKICAgICAgICAgICAgX19wIC09 IF9fbDsKICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICpfX3AgPSBfX3RtcDsKICAgICAg ICArK19fZmlyc3Q7CiAgICAgIH0KICAgIH0KIyAxNTYxICIvaG9tZS9BZG1pbmlzdHJhdG9yL2dj Y3Rlc3RpbmcvbGliL2djYy1saWIvaTY4Ni1wYy1jeWd3aW4vMy40L2luY2x1ZGUvYysrL2JpdHMv c3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcj4KICAgIGlubGlu ZSB2b2lkCiAgICByb3RhdGUoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX21p ZGRsZSwgX0ZvcndhcmRJdGVyIF9fbGFzdCkKICAgIHsKCiAgICAgCgogICAgICB0eXBlZGVmIHR5 cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+OjppdGVyYXRvcl9jYXRlZ29yeSBf SXRlclR5cGU7CiAgICAgIF9fcm90YXRlKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsIF9JdGVy VHlwZSgpKTsKICAgIH0KIyAxNTg5ICIvaG9tZS9BZG1pbmlzdHJhdG9yL2djY3Rlc3RpbmcvbGli L2djYy1saWIvaTY4Ni1wYy1jeWd3aW4vMy40L2luY2x1ZGUvYysrL2JpdHMvc3RsX2FsZ28uaCIg MwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXI+ CiAgICBfT3V0cHV0SXRlcgogICAgcm90YXRlX2NvcHkoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9G b3J3YXJkSXRlciBfX21pZGRsZSwKICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX2xhc3Qs IF9PdXRwdXRJdGVyIF9fcmVzdWx0KQogICAgewoKICAgICAKICAgICAKCgogICAgICByZXR1cm4g Y29weShfX2ZpcnN0LCBfX21pZGRsZSwgY29weShfX21pZGRsZSwgX19sYXN0LCBfX3Jlc3VsdCkp OwogICAgfQojIDE2MTIgIi9ob21lL0FkbWluaXN0cmF0b3IvZ2NjdGVzdGluZy9saWIvZ2NjLWxp Yi9pNjg2LXBjLWN5Z3dpbi8zLjQvaW5jbHVkZS9jKysvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0Rpc3RhbmNlPgogICAgaW5saW5lIF9EaXN0YW5jZQogICAgX19yYW5k b21fbnVtYmVyKF9EaXN0YW5jZSBfX24pCiAgICB7CgogICAgICByZXR1cm4gbHJhbmQ0OCgpICUg X19uOwoKCgogICAgfQojIDE2MzQgIi9ob21lL0FkbWluaXN0cmF0b3IvZ2NjdGVzdGluZy9saWIv Z2NjLWxpYi9pNjg2LXBjLWN5Z3dpbi8zLjQvaW5jbHVkZS9jKysvYml0cy9zdGxfYWxnby5oIiAz CiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXI+CiAgICBpbmxpbmUgdm9pZAog ICAgcmFuZG9tX3NodWZmbGUoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vz c0l0ZXIgX19sYXN0KQogICAgewoKICAgICAKCgogICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3Qp IHJldHVybjsKICAgICAgZm9yIChfUmFuZG9tQWNjZXNzSXRlciBfX2kgPSBfX2ZpcnN0ICsgMTsg X19pICE9IF9fbGFzdDsgKytfX2kpCiAgICAgICAgaXRlcl9zd2FwKF9faSwgX19maXJzdCArIF9f cmFuZG9tX251bWJlcigoX19pIC0gX19maXJzdCkgKyAxKSk7CiAgICB9CiMgMTY2MCAiL2hvbWUv QWRtaW5pc3RyYXRvci9nY2N0ZXN0aW5nL2xpYi9nY2MtbGliL2k2ODYtcGMtY3lnd2luLzMuNC9p bmNsdWRlL2MrKy9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9t QWNjZXNzSXRlciwgdHlwZW5hbWUgX1JhbmRvbU51bWJlckdlbmVyYXRvcj4KICAgIHZvaWQKICAg IHJhbmRvbV9zaHVmZmxlKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJ dGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgIF9SYW5kb21OdW1iZXJHZW5lcmF0b3ImIF9f cmFuZCkKICAgIHsKCiAgICAgCgoKICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KSByZXR1cm47 CiAgICAgIGZvciAoX1JhbmRvbUFjY2Vzc0l0ZXIgX19pID0gX19maXJzdCArIDE7IF9faSAhPSBf X2xhc3Q7ICsrX19pKQogICAgICAgIGl0ZXJfc3dhcChfX2ksIF9fZmlyc3QgKyBfX3JhbmQoKF9f aSAtIF9fZmlyc3QpICsgMSkpOwogICAgfQoKCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9y d2FyZEl0ZXIsIHR5cGVuYW1lIF9QcmVkaWNhdGU+CiAgICBfRm9yd2FyZEl0ZXIKICAgIF9fcGFy dGl0aW9uKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAg ICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQsCiAgICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJh dG9yX3RhZykKICAgIHsKICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KSByZXR1cm4gX19maXJz dDsKCiAgICAgIHdoaWxlIChfX3ByZWQoKl9fZmlyc3QpKQogICAgICAgIGlmICgrK19fZmlyc3Qg PT0gX19sYXN0KSByZXR1cm4gX19maXJzdDsKCiAgICAgIF9Gb3J3YXJkSXRlciBfX25leHQgPSBf X2ZpcnN0OwoKICAgICAgd2hpbGUgKCsrX19uZXh0ICE9IF9fbGFzdCkKICAgICAgICBpZiAoX19w cmVkKCpfX25leHQpKSB7CiAgICAgICAgICBzd2FwKCpfX2ZpcnN0LCAqX19uZXh0KTsKICAgICAg ICAgICsrX19maXJzdDsKICAgICAgICB9CgogICAgICByZXR1cm4gX19maXJzdDsKICAgIH0KCgoK CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIsIHR5cGVuYW1lIF9QcmVk aWNhdGU+CiAgICBfQmlkaXJlY3Rpb25hbEl0ZXIKICAgIF9fcGFydGl0aW9uKF9CaWRpcmVjdGlv bmFsSXRlciBfX2ZpcnN0LCBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0LAogICAgICAgICAgICAg ICAgX1ByZWRpY2F0ZSBfX3ByZWQsCiAgICAgICAgICAgICAgICBiaWRpcmVjdGlvbmFsX2l0ZXJh dG9yX3RhZykKICAgIHsKICAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICB3aGlsZSAodHJ1ZSkK ICAgICAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkKICAgICAgICAgICAgcmV0dXJuIF9fZmly c3Q7CiAgICAgICAgICBlbHNlIGlmIChfX3ByZWQoKl9fZmlyc3QpKQogICAgICAgICAgICArK19f Zmlyc3Q7CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIC0tX19sYXN0 OwogICAgICAgIHdoaWxlICh0cnVlKQogICAgICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQog ICAgICAgICAgICByZXR1cm4gX19maXJzdDsKICAgICAgICAgIGVsc2UgaWYgKCFfX3ByZWQoKl9f bGFzdCkpCiAgICAgICAgICAgIC0tX19sYXN0OwogICAgICAgICAgZWxzZQogICAgICAgICAgICBi cmVhazsKICAgICAgICBpdGVyX3N3YXAoX19maXJzdCwgX19sYXN0KTsKICAgICAgICArK19fZmly c3Q7CiAgICAgIH0KICAgIH0KIyAxNzQ4ICIvaG9tZS9BZG1pbmlzdHJhdG9yL2djY3Rlc3Rpbmcv bGliL2djYy1saWIvaTY4Ni1wYy1jeWd3aW4vMy40L2luY2x1ZGUvYysrL2JpdHMvc3RsX2FsZ28u aCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1ByZWRpY2F0 ZT4KICAgIGlubGluZSBfRm9yd2FyZEl0ZXIKICAgIHBhcnRpdGlvbihfRm9yd2FyZEl0ZXIgX19m aXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJl ZCkKICAgIHsKCiAgICAgCiAgICAgCgoKICAgICAgcmV0dXJuIF9fcGFydGl0aW9uKF9fZmlyc3Qs IF9fbGFzdCwgX19wcmVkLCBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsKICAgIH0KCgoK CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfUHJlZGljYXRl LCB0eXBlbmFtZSBfRGlzdGFuY2U+CiAgICBfRm9yd2FyZEl0ZXIKICAgIF9faW5wbGFjZV9zdGFi bGVfcGFydGl0aW9uKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQsIF9EaXN0YW5j ZSBfX2xlbikKICAgIHsKICAgICAgaWYgKF9fbGVuID09IDEpCiAgICAgICAgcmV0dXJuIF9fcHJl ZCgqX19maXJzdCkgPyBfX2xhc3QgOiBfX2ZpcnN0OwogICAgICBfRm9yd2FyZEl0ZXIgX19taWRk bGUgPSBfX2ZpcnN0OwogICAgICBhZHZhbmNlKF9fbWlkZGxlLCBfX2xlbiAvIDIpOwogICAgICBf Rm9yd2FyZEl0ZXIgX19iZWdpbiA9IF9faW5wbGFjZV9zdGFibGVfcGFydGl0aW9uKF9fZmlyc3Qs IF9fbWlkZGxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIF9fcHJlZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBfX2xlbiAvIDIpOwogICAgICBfRm9yd2FyZEl0ZXIgX19lbmQgPSBf X2lucGxhY2Vfc3RhYmxlX3BhcnRpdGlvbihfX21pZGRsZSwgX19sYXN0LAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3ByZWQsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGVuIC0gX19s ZW4gLyAyKTsKICAgICAgcm90YXRlKF9fYmVnaW4sIF9fbWlkZGxlLCBfX2VuZCk7CiAgICAgIGFk dmFuY2UoX19iZWdpbiwgc3RkOjpkaXN0YW5jZShfX21pZGRsZSwgX19lbmQpKTsKICAgICAgcmV0 dXJuIF9fYmVnaW47CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVy LCB0eXBlbmFtZSBfUG9pbnRlciwgdHlwZW5hbWUgX1ByZWRpY2F0ZSwKICAgICAgICAgICB0eXBl bmFtZSBfRGlzdGFuY2U+CiAgICBfRm9yd2FyZEl0ZXIKICAgIF9fc3RhYmxlX3BhcnRpdGlvbl9h ZGFwdGl2ZShfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCwgX0Rpc3RhbmNlIF9f bGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Qb2ludGVyIF9fYnVmZmVyLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSBfX2J1ZmZlcl9zaXplKQog ICAgewogICAgICBpZiAoX19sZW4gPD0gX19idWZmZXJfc2l6ZSkgewogICAgICAgIF9Gb3J3YXJk SXRlciBfX3Jlc3VsdDEgPSBfX2ZpcnN0OwogICAgICAgIF9Qb2ludGVyIF9fcmVzdWx0MiA9IF9f YnVmZmVyOwogICAgICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3QgOyArK19fZmlyc3QpCiAg ICAgICAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkgewogICAgICAgICAgICAqX19yZXN1bHQxID0g Kl9fZmlyc3Q7CiAgICAgICAgICAgICsrX19yZXN1bHQxOwogICAgICAgICAgfQogICAgICAgICAg ZWxzZSB7CiAgICAgICAgICAgICpfX3Jlc3VsdDIgPSAqX19maXJzdDsKICAgICAgICAgICAgKytf X3Jlc3VsdDI7CiAgICAgICAgICB9CiAgICAgICAgY29weShfX2J1ZmZlciwgX19yZXN1bHQyLCBf X3Jlc3VsdDEpOwogICAgICAgIHJldHVybiBfX3Jlc3VsdDE7CiAgICAgIH0KICAgICAgZWxzZSB7 CiAgICAgICAgX0ZvcndhcmRJdGVyIF9fbWlkZGxlID0gX19maXJzdDsKICAgICAgICBhZHZhbmNl KF9fbWlkZGxlLCBfX2xlbiAvIDIpOwogICAgICAgIF9Gb3J3YXJkSXRlciBfX2JlZ2luID0gX19z dGFibGVfcGFydGl0aW9uX2FkYXB0aXZlKF9fZmlyc3QsIF9fbWlkZGxlLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcHJlZCwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf X2xlbiAvIDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgX19idWZmZXIsIF9fYnVmZmVyX3NpemUpOwogICAgICAgIF9Gb3J3YXJkSXRl ciBfX2VuZCA9IF9fc3RhYmxlX3BhcnRpdGlvbl9hZGFwdGl2ZSggX19taWRkbGUsIF9fbGFzdCwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IF9fcHJlZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIF9fbGVuIC0gX19sZW4gLyAyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19idWZmZXIsIF9fYnVmZmVyX3NpemUpOwog ICAgICAgIHJvdGF0ZShfX2JlZ2luLCBfX21pZGRsZSwgX19lbmQpOwogICAgICAgIGFkdmFuY2Uo X19iZWdpbiwgc3RkOjpkaXN0YW5jZShfX21pZGRsZSwgX19lbmQpKTsKICAgICAgICByZXR1cm4g X19iZWdpbjsKICAgICAgfQogICAgfQojIDE4NDggIi9ob21lL0FkbWluaXN0cmF0b3IvZ2NjdGVz dGluZy9saWIvZ2NjLWxpYi9pNjg2LXBjLWN5Z3dpbi8zLjQvaW5jbHVkZS9jKysvYml0cy9zdGxf YWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfUHJl ZGljYXRlPgogICAgX0ZvcndhcmRJdGVyCiAgICBzdGFibGVfcGFydGl0aW9uKF9Gb3J3YXJkSXRl ciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICBfUHJl ZGljYXRlIF9fcHJlZCkKICAgIHsKCiAgICAgCiAgICAgCgoKICAgICAgaWYgKF9fZmlyc3QgPT0g X19sYXN0KQogICAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgICBlbHNlCiAgICAgIHsKICAgICAg ICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+Ojp2YWx1ZV90 eXBlIF9WYWx1ZVR5cGU7CiAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8 X0ZvcndhcmRJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9EaXN0YW5jZVR5cGU7CgogICAgICAgIF9U ZW1wb3JhcnlfYnVmZmVyPF9Gb3J3YXJkSXRlciwgX1ZhbHVlVHlwZT4gX19idWYoX19maXJzdCwg X19sYXN0KTsKICAgICAgICBpZiAoX19idWYuc2l6ZSgpID4gMCkKICAgICAgICAgIHJldHVybiBf X3N0YWJsZV9wYXJ0aXRpb25fYWRhcHRpdmUoX19maXJzdCwgX19sYXN0LCBfX3ByZWQsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZVR5cGUoX19i dWYucmVxdWVzdGVkX3NpemUoKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIF9fYnVmLmJlZ2luKCksIF9fYnVmLnNpemUoKSk7CiAgICAgICAgZWxzZQogICAg ICAgICAgcmV0dXJuIF9faW5wbGFjZV9zdGFibGVfcGFydGl0aW9uKF9fZmlyc3QsIF9fbGFzdCwg X19wcmVkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9EaXN0 YW5jZVR5cGUoX19idWYucmVxdWVzdGVkX3NpemUoKSkpOwogICAgICB9CiAgICB9CgoKCgoKCiAg dGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9UcD4KICAgIF9S YW5kb21BY2Nlc3NJdGVyCiAgICBfX3VuZ3VhcmRlZF9wYXJ0aXRpb24oX1JhbmRvbUFjY2Vzc0l0 ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAg ICAgICAgIF9UcCBfX3Bpdm90KQogICAgewogICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAgIHdo aWxlICgqX19maXJzdCA8IF9fcGl2b3QpCiAgICAgICAgICArK19fZmlyc3Q7CiAgICAgICAgLS1f X2xhc3Q7CiAgICAgICAgd2hpbGUgKF9fcGl2b3QgPCAqX19sYXN0KQogICAgICAgICAgLS1fX2xh c3Q7CiAgICAgICAgaWYgKCEoX19maXJzdCA8IF9fbGFzdCkpCiAgICAgICAgICByZXR1cm4gX19m aXJzdDsKICAgICAgICBpdGVyX3N3YXAoX19maXJzdCwgX19sYXN0KTsKICAgICAgICArK19fZmly c3Q7CiAgICAgIH0KICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNz SXRlciwgdHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIF9SYW5kb21BY2Nlc3NJ dGVyCiAgICBfX3VuZ3VhcmRlZF9wYXJ0aXRpb24oX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwg X1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgIF9UcCBf X3Bpdm90LCBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAgIHdoaWxlICh0cnVlKSB7CiAgICAg ICAgd2hpbGUgKF9fY29tcCgqX19maXJzdCwgX19waXZvdCkpCiAgICAgICAgICArK19fZmlyc3Q7 CiAgICAgICAgLS1fX2xhc3Q7CiAgICAgICAgd2hpbGUgKF9fY29tcChfX3Bpdm90LCAqX19sYXN0 KSkKICAgICAgICAgIC0tX19sYXN0OwogICAgICAgIGlmICghKF9fZmlyc3QgPCBfX2xhc3QpKQog ICAgICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICAgICAgaXRlcl9zd2FwKF9fZmlyc3QsIF9fbGFz dCk7CiAgICAgICAgKytfX2ZpcnN0OwogICAgICB9CiAgICB9CiMgMTkyOSAiL2hvbWUvQWRtaW5p c3RyYXRvci9nY2N0ZXN0aW5nL2xpYi9nY2MtbGliL2k2ODYtcGMtY3lnd2luLzMuNC9pbmNsdWRl L2MrKy9iaXRzL3N0bF9hbGdvLmgiIDMKICBlbnVtIHsgX01fdGhyZXNob2xkID0gMTYgfTsKCgoK CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX1RwPgog ICAgdm9pZAogICAgX191bmd1YXJkZWRfbGluZWFyX2luc2VydChfUmFuZG9tQWNjZXNzSXRlciBf X2xhc3QsIF9UcCBfX3ZhbCkKICAgIHsKICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19uZXh0ID0g X19sYXN0OwogICAgICAtLV9fbmV4dDsKICAgICAgd2hpbGUgKF9fdmFsIDwgKl9fbmV4dCkgewog ICAgICAgICpfX2xhc3QgPSAqX19uZXh0OwogICAgICAgIF9fbGFzdCA9IF9fbmV4dDsKICAgICAg ICAtLV9fbmV4dDsKICAgICAgfQogICAgICAqX19sYXN0ID0gX192YWw7CiAgICB9CgoKCgoKCiAg dGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9UcCwgdHlwZW5h bWUgX0NvbXBhcmU+CiAgICB2b2lkCiAgICBfX3VuZ3VhcmRlZF9saW5lYXJfaW5zZXJ0KF9SYW5k b21BY2Nlc3NJdGVyIF9fbGFzdCwgX1RwIF9fdmFsLCBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAg ICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbmV4dCA9IF9fbGFzdDsKICAgICAgLS1fX25leHQ7CiAg ICAgIHdoaWxlIChfX2NvbXAoX192YWwsICpfX25leHQpKSB7CiAgICAgICAgKl9fbGFzdCA9ICpf X25leHQ7CiAgICAgICAgX19sYXN0ID0gX19uZXh0OwogICAgICAgIC0tX19uZXh0OwogICAgICB9 CiAgICAgICpfX2xhc3QgPSBfX3ZhbDsKICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf UmFuZG9tQWNjZXNzSXRlcj4KICAgIHZvaWQKICAgIF9faW5zZXJ0aW9uX3NvcnQoX1JhbmRvbUFj Y2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0KQogICAgewogICAgICBp ZiAoX19maXJzdCA9PSBfX2xhc3QpIHJldHVybjsKCiAgICAgIGZvciAoX1JhbmRvbUFjY2Vzc0l0 ZXIgX19pID0gX19maXJzdCArIDE7IF9faSAhPSBfX2xhc3Q7ICsrX19pKQogICAgICB7CiAgICAg ICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6dmFsdWVfdHlw ZSBfX3ZhbCA9ICpfX2k7CiAgICAgICAgaWYgKF9fdmFsIDwgKl9fZmlyc3QpIHsKICAgICAgICAg IGNvcHlfYmFja3dhcmQoX19maXJzdCwgX19pLCBfX2kgKyAxKTsKICAgICAgICAgICpfX2ZpcnN0 ID0gX192YWw7CiAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICAgIF9fdW5ndWFyZGVkX2xp bmVhcl9pbnNlcnQoX19pLCBfX3ZhbCk7CiAgICAgIH0KICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICB2b2lkCiAg ICBfX2luc2VydGlvbl9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nl c3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQogICAg ewogICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpIHJldHVybjsKCiAgICAgIGZvciAoX1JhbmRv bUFjY2Vzc0l0ZXIgX19pID0gX19maXJzdCArIDE7IF9faSAhPSBfX2xhc3Q7ICsrX19pKQogICAg ICB7CiAgICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6 dmFsdWVfdHlwZSBfX3ZhbCA9ICpfX2k7CiAgICAgICAgaWYgKF9fY29tcChfX3ZhbCwgKl9fZmly c3QpKSB7CiAgICAgICAgICBjb3B5X2JhY2t3YXJkKF9fZmlyc3QsIF9faSwgX19pICsgMSk7CiAg ICAgICAgICAqX19maXJzdCA9IF9fdmFsOwogICAgICAgIH0KICAgICAgICBlbHNlCiAgICAgICAg ICBfX3VuZ3VhcmRlZF9saW5lYXJfaW5zZXJ0KF9faSwgX192YWwsIF9fY29tcCk7CiAgICAgIH0K ICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcj4KICAgIGlu bGluZSB2b2lkCiAgICBfX3VuZ3VhcmRlZF9pbnNlcnRpb25fc29ydChfUmFuZG9tQWNjZXNzSXRl ciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QpCiAgICB7CiAgICAgIHR5cGVkZWYg dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6dmFsdWVfdHlwZSBf VmFsdWVUeXBlOwoKICAgICAgZm9yIChfUmFuZG9tQWNjZXNzSXRlciBfX2kgPSBfX2ZpcnN0OyBf X2kgIT0gX19sYXN0OyArK19faSkKICAgICAgICBfX3VuZ3VhcmRlZF9saW5lYXJfaW5zZXJ0KF9f aSwgX1ZhbHVlVHlwZSgqX19pKSk7CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1Jh bmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgaW5saW5lIHZvaWQKICAgIF9f dW5ndWFyZGVkX2luc2VydGlvbl9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5k b21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Db21w YXJlIF9fY29tcCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8 X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CgogICAgICBmb3IgKF9S YW5kb21BY2Nlc3NJdGVyIF9faSA9IF9fZmlyc3Q7IF9faSAhPSBfX2xhc3Q7ICsrX19pKQogICAg ICAgIF9fdW5ndWFyZGVkX2xpbmVhcl9pbnNlcnQoX19pLCBfVmFsdWVUeXBlKCpfX2kpLCBfX2Nv bXApOwogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyPgog ICAgdm9pZAogICAgX19maW5hbF9pbnNlcnRpb25fc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2Zp cnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QpCiAgICB7CiAgICAgIGlmIChfX2xhc3QgLSBf X2ZpcnN0ID4gX01fdGhyZXNob2xkKSB7CiAgICAgICAgX19pbnNlcnRpb25fc29ydChfX2ZpcnN0 LCBfX2ZpcnN0ICsgX01fdGhyZXNob2xkKTsKICAgICAgICBfX3VuZ3VhcmRlZF9pbnNlcnRpb25f c29ydChfX2ZpcnN0ICsgX01fdGhyZXNob2xkLCBfX2xhc3QpOwogICAgICB9CiAgICAgIGVsc2UK ICAgICAgICBfX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFzdCk7CiAgICB9CgoKCgoKCiAg dGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9Db21wYXJlPgog ICAgdm9pZAogICAgX19maW5hbF9pbnNlcnRpb25fc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2Zp cnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAg IF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgaWYgKF9fbGFzdCAtIF9fZmlyc3QgPiBfTV90 aHJlc2hvbGQpIHsKICAgICAgICBfX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fZmlyc3QgKyBf TV90aHJlc2hvbGQsIF9fY29tcCk7CiAgICAgICAgX191bmd1YXJkZWRfaW5zZXJ0aW9uX3NvcnQo X19maXJzdCArIF9NX3RocmVzaG9sZCwgX19sYXN0LCBfX2NvbXApOwogICAgICB9CiAgICAgIGVs c2UKICAgICAgICBfX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFzdCwgX19jb21wKTsKICAg IH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfU2l6ZT4KICAgIGlubGluZSBfU2l6ZQogICAg X19sZyhfU2l6ZSBfX24pCiAgICB7CiAgICAgIF9TaXplIF9fazsKICAgICAgZm9yIChfX2sgPSAw OyBfX24gIT0gMTsgX19uID4+PSAxKSArK19fazsKICAgICAgcmV0dXJuIF9fazsKICAgIH0KCgoK CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX1NpemU+ CiAgICB2b2lkCiAgICBfX2ludHJvc29ydF9sb29wKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3Qs IF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgX1NpemUgX19k ZXB0aF9saW1pdCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8 X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CgogICAgICB3aGlsZSAo X19sYXN0IC0gX19maXJzdCA+IF9NX3RocmVzaG9sZCkgewogICAgICAgIGlmIChfX2RlcHRoX2xp bWl0ID09IDApIHsKICAgICAgICAgIHBhcnRpYWxfc29ydChfX2ZpcnN0LCBfX2xhc3QsIF9fbGFz dCk7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIC0tX19kZXB0aF9saW1pdDsK ICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2N1dCA9CiAgICAgICAgICBfX3VuZ3VhcmRlZF9w YXJ0aXRpb24oX19maXJzdCwgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IF9WYWx1ZVR5cGUoX19tZWRpYW4oKl9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAqKF9fZmlyc3QgKyAoX19sYXN0IC0gX19maXJzdCkv MiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAq KF9fbGFzdCAtIDEpKSkpOwogICAgICAgIF9faW50cm9zb3J0X2xvb3AoX19jdXQsIF9fbGFzdCwg X19kZXB0aF9saW1pdCk7CiAgICAgICAgX19sYXN0ID0gX19jdXQ7CiAgICAgIH0KICAgIH0KCgoK CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX1NpemUs IHR5cGVuYW1lIF9Db21wYXJlPgogICAgdm9pZAogICAgX19pbnRyb3NvcnRfbG9vcChfUmFuZG9t QWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAg ICAgICAgICAgIF9TaXplIF9fZGVwdGhfbGltaXQsIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAg ICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2 YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CgogICAgICB3aGlsZSAoX19sYXN0IC0gX19maXJzdCA+IF9N X3RocmVzaG9sZCkgewogICAgICAgIGlmIChfX2RlcHRoX2xpbWl0ID09IDApIHsKICAgICAgICAg IHBhcnRpYWxfc29ydChfX2ZpcnN0LCBfX2xhc3QsIF9fbGFzdCwgX19jb21wKTsKICAgICAgICAg IHJldHVybjsKICAgICAgICB9CiAgICAgICAgLS1fX2RlcHRoX2xpbWl0OwogICAgICAgIF9SYW5k b21BY2Nlc3NJdGVyIF9fY3V0ID0KICAgICAgICAgIF9fdW5ndWFyZGVkX3BhcnRpdGlvbihfX2Zp cnN0LCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1ZhbHVlVHlwZShf X21lZGlhbigqX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICooX19maXJzdCArIChfX2xhc3QgLSBfX2ZpcnN0KS8yKSwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICooX19sYXN0IC0gMSks IF9fY29tcCkpLAogICAgICAgICAgIF9fY29tcCk7CiAgICAgICAgX19pbnRyb3NvcnRfbG9vcChf X2N1dCwgX19sYXN0LCBfX2RlcHRoX2xpbWl0LCBfX2NvbXApOwogICAgICAgIF9fbGFzdCA9IF9f Y3V0OwogICAgICB9CiAgICB9CiMgMjE2NiAiL2hvbWUvQWRtaW5pc3RyYXRvci9nY2N0ZXN0aW5n L2xpYi9nY2MtbGliL2k2ODYtcGMtY3lnd2luLzMuNC9pbmNsdWRlL2MrKy9iaXRzL3N0bF9hbGdv LmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcj4KICAgIGlubGluZSB2 b2lkCiAgICBzb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVy IF9fbGFzdCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1Jh bmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CgoKICAgICAKCiAgICAgCgog ICAgICBpZiAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAgICAgICBfX2ludHJvc29ydF9sb29wKF9f Zmlyc3QsIF9fbGFzdCwgX19sZyhfX2xhc3QgLSBfX2ZpcnN0KSAqIDIpOwogICAgICAgIF9fZmlu YWxfaW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0KTsKICAgICAgfQogICAgfQojIDIxOTcg Ii9ob21lL0FkbWluaXN0cmF0b3IvZ2NjdGVzdGluZy9saWIvZ2NjLWxpYi9pNjg2LXBjLWN5Z3dp bi8zLjQvaW5jbHVkZS9jKysvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUg X1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgaW5saW5lIHZvaWQKICAg IHNvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0 LCBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3Jf dHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOwoKCiAgICAg CgogICAgIAoKICAgICAgaWYgKF9fZmlyc3QgIT0gX19sYXN0KSB7CiAgICAgICAgX19pbnRyb3Nv cnRfbG9vcChfX2ZpcnN0LCBfX2xhc3QsIF9fbGcoX19sYXN0IC0gX19maXJzdCkgKiAyLCBfX2Nv bXApOwogICAgICAgIF9fZmluYWxfaW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0LCBfX2Nv bXApOwogICAgICB9CiAgICB9CgoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nl c3NJdGVyPgogICAgdm9pZAogICAgX19pbnBsYWNlX3N0YWJsZV9zb3J0KF9SYW5kb21BY2Nlc3NJ dGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCkKICAgIHsKICAgICAgaWYgKF9f bGFzdCAtIF9fZmlyc3QgPCAxNSkgewogICAgICAgIF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwg X19sYXN0KTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIg X19taWRkbGUgPSBfX2ZpcnN0ICsgKF9fbGFzdCAtIF9fZmlyc3QpIC8gMjsKICAgICAgX19pbnBs YWNlX3N0YWJsZV9zb3J0KF9fZmlyc3QsIF9fbWlkZGxlKTsKICAgICAgX19pbnBsYWNlX3N0YWJs ZV9zb3J0KF9fbWlkZGxlLCBfX2xhc3QpOwogICAgICBfX21lcmdlX3dpdGhvdXRfYnVmZmVyKF9f Zmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19t aWRkbGUgLSBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGFzdCAtIF9f bWlkZGxlKTsKICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRl ciwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICB2b2lkCiAgICBfX2lucGxhY2Vfc3RhYmxlX3NvcnQo X1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAg ICAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgaWYgKF9f bGFzdCAtIF9fZmlyc3QgPCAxNSkgewogICAgICAgIF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwg X19sYXN0LCBfX2NvbXApOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBfUmFuZG9tQWNj ZXNzSXRlciBfX21pZGRsZSA9IF9fZmlyc3QgKyAoX19sYXN0IC0gX19maXJzdCkgLyAyOwogICAg ICBfX2lucGxhY2Vfc3RhYmxlX3NvcnQoX19maXJzdCwgX19taWRkbGUsIF9fY29tcCk7CiAgICAg IF9faW5wbGFjZV9zdGFibGVfc29ydChfX21pZGRsZSwgX19sYXN0LCBfX2NvbXApOwogICAgICBf X21lcmdlX3dpdGhvdXRfYnVmZmVyKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgX19taWRkbGUgLSBfX2ZpcnN0LAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgIF9fbGFzdCAtIF9fbWlkZGxlLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgIF9fY29tcCk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVy MSwgdHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIyLAogICAgICAgICAgIHR5cGVuYW1lIF9EaXN0 YW5jZT4KICAgIHZvaWQKICAgIF9fbWVyZ2Vfc29ydF9sb29wKF9SYW5kb21BY2Nlc3NJdGVyMSBf X2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcjEgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAg X1JhbmRvbUFjY2Vzc0l0ZXIyIF9fcmVzdWx0LCBfRGlzdGFuY2UgX19zdGVwX3NpemUpCiAgICB7 CiAgICAgIF9EaXN0YW5jZSBfX3R3b19zdGVwID0gMiAqIF9fc3RlcF9zaXplOwoKICAgICAgd2hp bGUgKF9fbGFzdCAtIF9fZmlyc3QgPj0gX190d29fc3RlcCkgewogICAgICAgIF9fcmVzdWx0ID0g bWVyZ2UoX19maXJzdCwgX19maXJzdCArIF9fc3RlcF9zaXplLAogICAgICAgICAgICAgICAgICAg ICAgICAgX19maXJzdCArIF9fc3RlcF9zaXplLCBfX2ZpcnN0ICsgX190d29fc3RlcCwKICAgICAg ICAgICAgICAgICAgICAgICAgIF9fcmVzdWx0KTsKICAgICAgICBfX2ZpcnN0ICs9IF9fdHdvX3N0 ZXA7CiAgICAgIH0KCiAgICAgIF9fc3RlcF9zaXplID0gc3RkOjptaW4oX0Rpc3RhbmNlKF9fbGFz dCAtIF9fZmlyc3QpLCBfX3N0ZXBfc2l6ZSk7CiAgICAgIG1lcmdlKF9fZmlyc3QsIF9fZmlyc3Qg KyBfX3N0ZXBfc2l6ZSwgX19maXJzdCArIF9fc3RlcF9zaXplLCBfX2xhc3QsCiAgICAgICAgICAg IF9fcmVzdWx0KTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIx LCB0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcjIsCiAgICAgICAgICAgdHlwZW5hbWUgX0Rpc3Rh bmNlLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIHZvaWQKICAgIF9fbWVyZ2Vfc29ydF9sb29wKF9S YW5kb21BY2Nlc3NJdGVyMSBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcjEgX19sYXN0LAogICAg ICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIyIF9fcmVzdWx0LCBfRGlzdGFuY2Ug X19zdGVwX3NpemUsCiAgICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCiAgICB7 CiAgICAgIF9EaXN0YW5jZSBfX3R3b19zdGVwID0gMiAqIF9fc3RlcF9zaXplOwoKICAgICAgd2hp bGUgKF9fbGFzdCAtIF9fZmlyc3QgPj0gX190d29fc3RlcCkgewogICAgICAgIF9fcmVzdWx0ID0g bWVyZ2UoX19maXJzdCwgX19maXJzdCArIF9fc3RlcF9zaXplLAogICAgICAgICAgICAgICAgICAg ICAgICAgX19maXJzdCArIF9fc3RlcF9zaXplLCBfX2ZpcnN0ICsgX190d29fc3RlcCwKICAgICAg ICAgICAgICAgICAgICAgICAgIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgX19j b21wKTsKICAgICAgICBfX2ZpcnN0ICs9IF9fdHdvX3N0ZXA7CiAgICAgIH0KICAgICAgX19zdGVw X3NpemUgPSBzdGQ6Om1pbihfRGlzdGFuY2UoX19sYXN0IC0gX19maXJzdCksIF9fc3RlcF9zaXpl KTsKCiAgICAgIG1lcmdlKF9fZmlyc3QsIF9fZmlyc3QgKyBfX3N0ZXBfc2l6ZSwKICAgICAgICAg ICAgX19maXJzdCArIF9fc3RlcF9zaXplLCBfX2xhc3QsCiAgICAgICAgICAgIF9fcmVzdWx0LAog ICAgICAgICAgICBfX2NvbXApOwogICAgfQoKICBlbnVtIHsgX01fY2h1bmtfc2l6ZSA9IDcgfTsK CiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9EaXN0YW5j ZT4KICAgIHZvaWQKICAgIF9fY2h1bmtfaW5zZXJ0aW9uX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIg X19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAg ICAgICBfRGlzdGFuY2UgX19jaHVua19zaXplKQogICAgewogICAgICB3aGlsZSAoX19sYXN0IC0g X19maXJzdCA+PSBfX2NodW5rX3NpemUpIHsKICAgICAgICBfX2luc2VydGlvbl9zb3J0KF9fZmly c3QsIF9fZmlyc3QgKyBfX2NodW5rX3NpemUpOwogICAgICAgIF9fZmlyc3QgKz0gX19jaHVua19z aXplOwogICAgICB9CiAgICAgIF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0KTsKICAg IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9EaXN0 YW5jZSwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICB2b2lkCiAgICBfX2NodW5rX2luc2VydGlvbl9z b3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlIF9fY2h1bmtfc2l6ZSwgX0NvbXBh cmUgX19jb21wKQogICAgewogICAgICB3aGlsZSAoX19sYXN0IC0gX19maXJzdCA+PSBfX2NodW5r X3NpemUpIHsKICAgICAgICBfX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fZmlyc3QgKyBfX2No dW5rX3NpemUsIF9fY29tcCk7CiAgICAgICAgX19maXJzdCArPSBfX2NodW5rX3NpemU7CiAgICAg IH0KICAgICAgX19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xhc3QsIF9fY29tcCk7CiAgICB9 CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfUG9pbnRl cj4KICAgIHZvaWQKICAgIF9fbWVyZ2Vfc29ydF93aXRoX2J1ZmZlcihfUmFuZG9tQWNjZXNzSXRl ciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgX1BvaW50ZXIgX19idWZmZXIpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUg aXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9EaXN0 YW5jZTsKCiAgICAgIF9EaXN0YW5jZSBfX2xlbiA9IF9fbGFzdCAtIF9fZmlyc3Q7CiAgICAgIF9Q b2ludGVyIF9fYnVmZmVyX2xhc3QgPSBfX2J1ZmZlciArIF9fbGVuOwoKICAgICAgX0Rpc3RhbmNl IF9fc3RlcF9zaXplID0gX01fY2h1bmtfc2l6ZTsKICAgICAgX19jaHVua19pbnNlcnRpb25fc29y dChfX2ZpcnN0LCBfX2xhc3QsIF9fc3RlcF9zaXplKTsKCiAgICAgIHdoaWxlIChfX3N0ZXBfc2l6 ZSA8IF9fbGVuKSB7CiAgICAgICAgX19tZXJnZV9zb3J0X2xvb3AoX19maXJzdCwgX19sYXN0LCBf X2J1ZmZlciwgX19zdGVwX3NpemUpOwogICAgICAgIF9fc3RlcF9zaXplICo9IDI7CiAgICAgICAg X19tZXJnZV9zb3J0X2xvb3AoX19idWZmZXIsIF9fYnVmZmVyX2xhc3QsIF9fZmlyc3QsIF9fc3Rl cF9zaXplKTsKICAgICAgICBfX3N0ZXBfc2l6ZSAqPSAyOwogICAgICB9CiAgICB9CgogIHRlbXBs YXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfUG9pbnRlciwgdHlwZW5h bWUgX0NvbXBhcmU+CiAgICB2b2lkCiAgICBfX21lcmdlX3NvcnRfd2l0aF9idWZmZXIoX1JhbmRv bUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgIF9Qb2ludGVyIF9fYnVmZmVyLCBfQ29tcGFyZSBfX2NvbXApCiAg ICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJ dGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9EaXN0YW5jZTsKCiAgICAgIF9EaXN0YW5jZSBfX2xlbiA9 IF9fbGFzdCAtIF9fZmlyc3Q7CiAgICAgIF9Qb2ludGVyIF9fYnVmZmVyX2xhc3QgPSBfX2J1ZmZl ciArIF9fbGVuOwoKICAgICAgX0Rpc3RhbmNlIF9fc3RlcF9zaXplID0gX01fY2h1bmtfc2l6ZTsK ICAgICAgX19jaHVua19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xhc3QsIF9fc3RlcF9zaXpl LCBfX2NvbXApOwoKICAgICAgd2hpbGUgKF9fc3RlcF9zaXplIDwgX19sZW4pIHsKICAgICAgICBf X21lcmdlX3NvcnRfbG9vcChfX2ZpcnN0LCBfX2xhc3QsIF9fYnVmZmVyLCBfX3N0ZXBfc2l6ZSwg X19jb21wKTsKICAgICAgICBfX3N0ZXBfc2l6ZSAqPSAyOwogICAgICAgIF9fbWVyZ2Vfc29ydF9s b29wKF9fYnVmZmVyLCBfX2J1ZmZlcl9sYXN0LCBfX2ZpcnN0LCBfX3N0ZXBfc2l6ZSwgX19jb21w KTsKICAgICAgICBfX3N0ZXBfc2l6ZSAqPSAyOwogICAgICB9CiAgICB9CgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfUG9pbnRlciwgdHlwZW5hbWUgX0Rp c3RhbmNlPgogICAgdm9pZAogICAgX19zdGFibGVfc29ydF9hZGFwdGl2ZShfUmFuZG9tQWNjZXNz SXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgIF9Qb2ludGVyIF9fYnVmZmVyLCBfRGlzdGFuY2UgX19idWZmZXJfc2l6ZSkKICAg IHsKICAgICAgX0Rpc3RhbmNlIF9fbGVuID0gKF9fbGFzdCAtIF9fZmlyc3QgKyAxKSAvIDI7CiAg ICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbWlkZGxlID0gX19maXJzdCArIF9fbGVuOwogICAgICBp ZiAoX19sZW4gPiBfX2J1ZmZlcl9zaXplKSB7CiAgICAgICAgX19zdGFibGVfc29ydF9hZGFwdGl2 ZShfX2ZpcnN0LCBfX21pZGRsZSwgX19idWZmZXIsIF9fYnVmZmVyX3NpemUpOwogICAgICAgIF9f c3RhYmxlX3NvcnRfYWRhcHRpdmUoX19taWRkbGUsIF9fbGFzdCwgX19idWZmZXIsIF9fYnVmZmVy X3NpemUpOwogICAgICB9CiAgICAgIGVsc2UgewogICAgICAgIF9fbWVyZ2Vfc29ydF93aXRoX2J1 ZmZlcihfX2ZpcnN0LCBfX21pZGRsZSwgX19idWZmZXIpOwogICAgICAgIF9fbWVyZ2Vfc29ydF93 aXRoX2J1ZmZlcihfX21pZGRsZSwgX19sYXN0LCBfX2J1ZmZlcik7CiAgICAgIH0KICAgICAgX19t ZXJnZV9hZGFwdGl2ZShfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0LCBfRGlzdGFuY2UoX19taWRk bGUgLSBfX2ZpcnN0KSwKICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UoX19sYXN0IC0g X19taWRkbGUpLCBfX2J1ZmZlciwgX19idWZmZXJfc2l6ZSk7CiAgICB9CgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfUG9pbnRlciwgdHlwZW5hbWUgX0Rp c3RhbmNlLAogICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlPgogICAgdm9pZAogICAgX19zdGFi bGVfc29ydF9hZGFwdGl2ZShfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNz SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Qb2ludGVyIF9fYnVmZmVy LCBfRGlzdGFuY2UgX19idWZmZXJfc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Nv bXBhcmUgX19jb21wKQogICAgewogICAgICBfRGlzdGFuY2UgX19sZW4gPSAoX19sYXN0IC0gX19m aXJzdCArIDEpIC8gMjsKICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19taWRkbGUgPSBfX2ZpcnN0 ICsgX19sZW47CiAgICAgIGlmIChfX2xlbiA+IF9fYnVmZmVyX3NpemUpIHsKICAgICAgICBfX3N0 YWJsZV9zb3J0X2FkYXB0aXZlKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2J1ZmZlciwgX19idWZmZXJf c2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7CiAgICAgICAgX19z dGFibGVfc29ydF9hZGFwdGl2ZShfX21pZGRsZSwgX19sYXN0LCBfX2J1ZmZlciwgX19idWZmZXJf c2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7CiAgICAgIH0KICAg ICAgZWxzZSB7CiAgICAgICAgX19tZXJnZV9zb3J0X3dpdGhfYnVmZmVyKF9fZmlyc3QsIF9fbWlk ZGxlLCBfX2J1ZmZlciwgX19jb21wKTsKICAgICAgICBfX21lcmdlX3NvcnRfd2l0aF9idWZmZXIo X19taWRkbGUsIF9fbGFzdCwgX19idWZmZXIsIF9fY29tcCk7CiAgICAgIH0KICAgICAgX19tZXJn ZV9hZGFwdGl2ZShfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0LCBfRGlzdGFuY2UoX19taWRkbGUg LSBfX2ZpcnN0KSwKICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UoX19sYXN0IC0gX19t aWRkbGUpLCBfX2J1ZmZlciwgX19idWZmZXJfc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICBf X2NvbXApOwogICAgfQojIDI0MzAgIi9ob21lL0FkbWluaXN0cmF0b3IvZ2NjdGVzdGluZy9saWIv Z2NjLWxpYi9pNjg2LXBjLWN5Z3dpbi8zLjQvaW5jbHVkZS9jKysvYml0cy9zdGxfYWxnby5oIiAz CiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXI+CiAgICBpbmxpbmUgdm9pZAog ICAgc3RhYmxlX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0 ZXIgX19sYXN0KQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxf UmFuZG9tQWNjZXNzSXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKICAgICAgdHlwZWRlZiB0 eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+OjpkaWZmZXJlbmNlX3R5 cGUgX0Rpc3RhbmNlVHlwZTsKCgogICAgIAoKICAgICAKCiAgICAgIF9UZW1wb3JhcnlfYnVmZmVy PF9SYW5kb21BY2Nlc3NJdGVyLCBfVmFsdWVUeXBlPiBidWYoX19maXJzdCwgX19sYXN0KTsKICAg ICAgaWYgKGJ1Zi5iZWdpbigpID09IDApCiAgICAgICAgX19pbnBsYWNlX3N0YWJsZV9zb3J0KF9f Zmlyc3QsIF9fbGFzdCk7CiAgICAgIGVsc2UKICAgICAgICBfX3N0YWJsZV9zb3J0X2FkYXB0aXZl KF9fZmlyc3QsIF9fbGFzdCwgYnVmLmJlZ2luKCksIF9EaXN0YW5jZVR5cGUoYnVmLnNpemUoKSkp OwogICAgfQojIDI0NjYgIi9ob21lL0FkbWluaXN0cmF0b3IvZ2NjdGVzdGluZy9saWIvZ2NjLWxp Yi9pNjg2LXBjLWN5Z3dpbi8zLjQvaW5jbHVkZS9jKysvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVt cGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9Db21wYXJlPgogICAg aW5saW5lIHZvaWQKICAgIHN0YWJsZV9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9S YW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgX0NvbXBhcmUgX19jb21wKQogICAgewogICAgICB0eXBl ZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OnZhbHVlX3R5 cGUgX1ZhbHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1Jh bmRvbUFjY2Vzc0l0ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX0Rpc3RhbmNlVHlwZTsKCgogICAgIAoK ICAgICAKCgogICAgICBfVGVtcG9yYXJ5X2J1ZmZlcjxfUmFuZG9tQWNjZXNzSXRlciwgX1ZhbHVl VHlwZT4gYnVmKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgIGlmIChidWYuYmVnaW4oKSA9PSAwKQog ICAgICAgIF9faW5wbGFjZV9zdGFibGVfc29ydChfX2ZpcnN0LCBfX2xhc3QsIF9fY29tcCk7CiAg ICAgIGVsc2UKICAgICAgICBfX3N0YWJsZV9zb3J0X2FkYXB0aXZlKF9fZmlyc3QsIF9fbGFzdCwg YnVmLmJlZ2luKCksIF9EaXN0YW5jZVR5cGUoYnVmLnNpemUoKSksCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBfX2NvbXApOwogICAgfQojIDI1MDIgIi9ob21lL0FkbWluaXN0cmF0b3Iv Z2NjdGVzdGluZy9saWIvZ2NjLWxpYi9pNjg2LXBjLWN5Z3dpbi8zLjQvaW5jbHVkZS9jKysvYml0 cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXI+CiAg ICB2b2lkCiAgICBwYXJ0aWFsX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAg ICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX21pZGRsZSwKICAgICAgICAgICAgICAgICBf UmFuZG9tQWNjZXNzSXRlciBfX2xhc3QpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRl cmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOwoK CiAgICAgCgogICAgIAoKICAgICAgbWFrZV9oZWFwKF9fZmlyc3QsIF9fbWlkZGxlKTsKICAgICAg Zm9yIChfUmFuZG9tQWNjZXNzSXRlciBfX2kgPSBfX21pZGRsZTsgX19pIDwgX19sYXN0OyArK19f aSkKICAgICAgICBpZiAoKl9faSA8ICpfX2ZpcnN0KQogICAgICAgICAgX19wb3BfaGVhcChfX2Zp cnN0LCBfX21pZGRsZSwgX19pLCBfVmFsdWVUeXBlKCpfX2kpKTsKICAgICAgc29ydF9oZWFwKF9f Zmlyc3QsIF9fbWlkZGxlKTsKICAgIH0KIyAyNTQwICIvaG9tZS9BZG1pbmlzdHJhdG9yL2djY3Rl c3RpbmcvbGliL2djYy1saWIvaTY4Ni1wYy1jeWd3aW4vMy40L2luY2x1ZGUvYysrL2JpdHMvc3Rs X2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFt ZSBfQ29tcGFyZT4KICAgIHZvaWQKICAgIHBhcnRpYWxfc29ydChfUmFuZG9tQWNjZXNzSXRlciBf X2ZpcnN0LAogICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbWlkZGxlLAogICAg ICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICBf Q29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJh aXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOwoKCiAgICAgCgog ICAgIAoKCiAgICAgIG1ha2VfaGVhcChfX2ZpcnN0LCBfX21pZGRsZSwgX19jb21wKTsKICAgICAg Zm9yIChfUmFuZG9tQWNjZXNzSXRlciBfX2kgPSBfX21pZGRsZTsgX19pIDwgX19sYXN0OyArK19f aSkKICAgICAgICBpZiAoX19jb21wKCpfX2ksICpfX2ZpcnN0KSkKICAgICAgICAgIF9fcG9wX2hl YXAoX19maXJzdCwgX19taWRkbGUsIF9faSwgX1ZhbHVlVHlwZSgqX19pKSwgX19jb21wKTsKICAg ICAgc29ydF9oZWFwKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2NvbXApOwogICAgfQojIDI1NzkgIi9o b21lL0FkbWluaXN0cmF0b3IvZ2NjdGVzdGluZy9saWIvZ2NjLWxpYi9pNjg2LXBjLWN5Z3dpbi8z LjQvaW5jbHVkZS9jKysvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lu cHV0SXRlciwgdHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXI+CiAgICBfUmFuZG9tQWNjZXNzSXRl cgogICAgcGFydGlhbF9zb3J0X2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9f bGFzdCwKICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fcmVzdWx0X2Zp cnN0LAogICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19yZXN1bHRfbGFz dCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRl cj46OnZhbHVlX3R5cGUgX0lucHV0VmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0 ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OnZhbHVlX3R5cGUgX091dHB1dFZhbHVl VHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vz c0l0ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX0Rpc3RhbmNlVHlwZTsKCgogICAgIAogICAgIAogICAg IAogICAgIAoKICAgICAgaWYgKF9fcmVzdWx0X2ZpcnN0ID09IF9fcmVzdWx0X2xhc3QpIHJldHVy biBfX3Jlc3VsdF9sYXN0OwogICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX3Jlc3VsdF9yZWFsX2xh c3QgPSBfX3Jlc3VsdF9maXJzdDsKICAgICAgd2hpbGUoX19maXJzdCAhPSBfX2xhc3QgJiYgX19y ZXN1bHRfcmVhbF9sYXN0ICE9IF9fcmVzdWx0X2xhc3QpIHsKICAgICAgICAqX19yZXN1bHRfcmVh bF9sYXN0ID0gKl9fZmlyc3Q7CiAgICAgICAgKytfX3Jlc3VsdF9yZWFsX2xhc3Q7CiAgICAgICAg KytfX2ZpcnN0OwogICAgICB9CiAgICAgIG1ha2VfaGVhcChfX3Jlc3VsdF9maXJzdCwgX19yZXN1 bHRfcmVhbF9sYXN0KTsKICAgICAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KSB7CiAgICAgICAg aWYgKCpfX2ZpcnN0IDwgKl9fcmVzdWx0X2ZpcnN0KQogICAgICAgICAgX19hZGp1c3RfaGVhcChf X3Jlc3VsdF9maXJzdCwgX0Rpc3RhbmNlVHlwZSgwKSwKICAgICAgICAgICAgICAgICAgICAgICAg X0Rpc3RhbmNlVHlwZShfX3Jlc3VsdF9yZWFsX2xhc3QgLSBfX3Jlc3VsdF9maXJzdCksCiAgICAg ICAgICAgICAgICAgICAgICAgIF9JbnB1dFZhbHVlVHlwZSgqX19maXJzdCkpOwogICAgICAgICsr X19maXJzdDsKICAgICAgfQogICAgICBzb3J0X2hlYXAoX19yZXN1bHRfZmlyc3QsIF9fcmVzdWx0 X3JlYWxfbGFzdCk7CiAgICAgIHJldHVybiBfX3Jlc3VsdF9yZWFsX2xhc3Q7CiAgICB9CiMgMjYz MyAiL2hvbWUvQWRtaW5pc3RyYXRvci9nY2N0ZXN0aW5nL2xpYi9nY2MtbGliL2k2ODYtcGMtY3ln d2luLzMuNC9pbmNsdWRlL2MrKy9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX0NvbXBh cmU+CiAgICBfUmFuZG9tQWNjZXNzSXRlcgogICAgcGFydGlhbF9zb3J0X2NvcHkoX0lucHV0SXRl ciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgIF9SYW5k b21BY2Nlc3NJdGVyIF9fcmVzdWx0X2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgX1JhbmRv bUFjY2Vzc0l0ZXIgX19yZXN1bHRfbGFzdCwKICAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJl IF9fY29tcCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lu cHV0SXRlcj46OnZhbHVlX3R5cGUgX0lucHV0VmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVu YW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OnZhbHVlX3R5cGUgX091dHB1 dFZhbHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRv bUFjY2Vzc0l0ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX0Rpc3RhbmNlVHlwZTsKCgogICAgIAogICAg IAogICAgIAogICAgIAoKCiAgICAgIGlmIChfX3Jlc3VsdF9maXJzdCA9PSBfX3Jlc3VsdF9sYXN0 KSByZXR1cm4gX19yZXN1bHRfbGFzdDsKICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19yZXN1bHRf cmVhbF9sYXN0ID0gX19yZXN1bHRfZmlyc3Q7CiAgICAgIHdoaWxlKF9fZmlyc3QgIT0gX19sYXN0 ICYmIF9fcmVzdWx0X3JlYWxfbGFzdCAhPSBfX3Jlc3VsdF9sYXN0KSB7CiAgICAgICAgKl9fcmVz dWx0X3JlYWxfbGFzdCA9ICpfX2ZpcnN0OwogICAgICAgICsrX19yZXN1bHRfcmVhbF9sYXN0Owog ICAgICAgICsrX19maXJzdDsKICAgICAgfQogICAgICBtYWtlX2hlYXAoX19yZXN1bHRfZmlyc3Qs IF9fcmVzdWx0X3JlYWxfbGFzdCwgX19jb21wKTsKICAgICAgd2hpbGUgKF9fZmlyc3QgIT0gX19s YXN0KSB7CiAgICAgICAgaWYgKF9fY29tcCgqX19maXJzdCwgKl9fcmVzdWx0X2ZpcnN0KSkKICAg ICAgICAgIF9fYWRqdXN0X2hlYXAoX19yZXN1bHRfZmlyc3QsIF9EaXN0YW5jZVR5cGUoMCksCiAg ICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZVR5cGUoX19yZXN1bHRfcmVhbF9sYXN0IC0g X19yZXN1bHRfZmlyc3QpLAogICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRWYWx1ZVR5cGUo Kl9fZmlyc3QpLAogICAgICAgICAgICAgICAgICAgICAgICBfX2NvbXApOwogICAgICAgICsrX19m aXJzdDsKICAgICAgfQogICAgICBzb3J0X2hlYXAoX19yZXN1bHRfZmlyc3QsIF9fcmVzdWx0X3Jl YWxfbGFzdCwgX19jb21wKTsKICAgICAgcmV0dXJuIF9fcmVzdWx0X3JlYWxfbGFzdDsKICAgIH0K IyAyNjg2ICIvaG9tZS9BZG1pbmlzdHJhdG9yL2djY3Rlc3RpbmcvbGliL2djYy1saWIvaTY4Ni1w Yy1jeWd3aW4vMy40L2luY2x1ZGUvYysrL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5 cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyPgogICAgdm9pZAogICAgbnRoX2VsZW1lbnQoX1JhbmRv bUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9f bnRoLAogICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0KQogICAgewogICAg ICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OnZh bHVlX3R5cGUgX1ZhbHVlVHlwZTsKCgogICAgIAogICAgIAoKICAgICAgd2hpbGUgKF9fbGFzdCAt IF9fZmlyc3QgPiAzKSB7CiAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19jdXQgPQogICAgICAg ICAgX191bmd1YXJkZWRfcGFydGl0aW9uKF9fZmlyc3QsIF9fbGFzdCwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBfVmFsdWVUeXBlKF9fbWVkaWFuKCpfX2ZpcnN0LAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKihfX2ZpcnN0ICsgKF9f bGFzdCAtIF9fZmlyc3QpLzIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKihfX2xhc3QgLSAxKSkpKTsKICAgICAgICBpZiAoX19jdXQgPD0gX19u dGgpCiAgICAgICAgICBfX2ZpcnN0ID0gX19jdXQ7CiAgICAgICAgZWxzZQogICAgICAgICAgX19s YXN0ID0gX19jdXQ7CiAgICAgIH0KICAgICAgX19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xh c3QpOwogICAgfQojIDI3MjggIi9ob21lL0FkbWluaXN0cmF0b3IvZ2NjdGVzdGluZy9saWIvZ2Nj LWxpYi9pNjg2LXBjLWN5Z3dpbi8zLjQvaW5jbHVkZS9jKysvYml0cy9zdGxfYWxnby5oIiAzCiAg dGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9Db21wYXJlPgog ICAgdm9pZAogICAgbnRoX2VsZW1lbnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAg ICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbnRoLAogICAgICAgICAgICAgICAgX1JhbmRv bUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX0NvbXBhcmUg X19jb21wKQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFu ZG9tQWNjZXNzSXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKCgogICAgIAogICAgIAoKCiAg ICAgIHdoaWxlIChfX2xhc3QgLSBfX2ZpcnN0ID4gMykgewogICAgICAgIF9SYW5kb21BY2Nlc3NJ dGVyIF9fY3V0ID0KICAgICAgICAgIF9fdW5ndWFyZGVkX3BhcnRpdGlvbihfX2ZpcnN0LCBfX2xh c3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1ZhbHVlVHlwZShfX21lZGlhbigq X19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICooX19maXJzdCArIChfX2xhc3QgLSBfX2ZpcnN0KS8yKSwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICooX19sYXN0IC0gMSksCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbXApKSwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbXApOwogICAgICAgIGlmIChfX2N1dCA8 PSBfX250aCkKICAgICAgICAgIF9fZmlyc3QgPSBfX2N1dDsKICAgICAgICBlbHNlCiAgICAgICAg ICBfX2xhc3QgPSBfX2N1dDsKICAgICAgfQogICAgICBfX2luc2VydGlvbl9zb3J0KF9fZmlyc3Qs IF9fbGFzdCwgX19jb21wKTsKICAgIH0KIyAyNzY4ICIvaG9tZS9BZG1pbmlzdHJhdG9yL2djY3Rl c3RpbmcvbGliL2djYy1saWIvaTY4Ni1wYy1jeWd3aW4vMy40L2luY2x1ZGUvYysrL2JpdHMvc3Rs X2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1Rw PgogICAgX0ZvcndhcmRJdGVyCiAgICBsb3dlcl9ib3VuZChfRm9yd2FyZEl0ZXIgX19maXJzdCwg X0ZvcndhcmRJdGVyIF9fbGFzdCwgY29uc3QgX1RwJiBfX3ZhbCkKICAgIHsKICAgICAgdHlwZWRl ZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6dmFsdWVfdHlwZSBfVmFs dWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0 ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX0Rpc3RhbmNlVHlwZTsKCgoKCgoKICAgICAKICAgICAKICAg ICAKCiAgICAgIF9EaXN0YW5jZVR5cGUgX19sZW4gPSBzdGQ6OmRpc3RhbmNlKF9fZmlyc3QsIF9f bGFzdCk7CiAgICAgIF9EaXN0YW5jZVR5cGUgX19oYWxmOwogICAgICBfRm9yd2FyZEl0ZXIgX19t aWRkbGU7CgogICAgICB3aGlsZSAoX19sZW4gPiAwKSB7CiAgICAgICAgX19oYWxmID0gX19sZW4g Pj4gMTsKICAgICAgICBfX21pZGRsZSA9IF9fZmlyc3Q7CiAgICAgICAgYWR2YW5jZShfX21pZGRs ZSwgX19oYWxmKTsKICAgICAgICBpZiAoKl9fbWlkZGxlIDwgX192YWwpIHsKICAgICAgICAgIF9f Zmlyc3QgPSBfX21pZGRsZTsKICAgICAgICAgICsrX19maXJzdDsKICAgICAgICAgIF9fbGVuID0g X19sZW4gLSBfX2hhbGYgLSAxOwogICAgICAgIH0KICAgICAgICBlbHNlCiAgICAgICAgICBfX2xl biA9IF9faGFsZjsKICAgICAgfQogICAgICByZXR1cm4gX19maXJzdDsKICAgIH0KIyAyODE2ICIv aG9tZS9BZG1pbmlzdHJhdG9yL2djY3Rlc3RpbmcvbGliL2djYy1saWIvaTY4Ni1wYy1jeWd3aW4v My40L2luY2x1ZGUvYysrL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9G b3J3YXJkSXRlciwgdHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIF9Gb3J3YXJk SXRlcgogICAgbG93ZXJfYm91bmQoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBf X2xhc3QsCiAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9fdmFsLCBfQ29tcGFyZSBfX2NvbXAp CiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRl cj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRv cl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9EaXN0YW5jZVR5cGU7CgoK ICAgICAKICAgICAKCiAgICAgIF9EaXN0YW5jZVR5cGUgX19sZW4gPSBzdGQ6OmRpc3RhbmNlKF9f Zmlyc3QsIF9fbGFzdCk7CiAgICAgIF9EaXN0YW5jZVR5cGUgX19oYWxmOwogICAgICBfRm9yd2Fy ZEl0ZXIgX19taWRkbGU7CgogICAgICB3aGlsZSAoX19sZW4gPiAwKSB7CiAgICAgICAgX19oYWxm ID0gX19sZW4gPj4gMTsKICAgICAgICBfX21pZGRsZSA9IF9fZmlyc3Q7CiAgICAgICAgYWR2YW5j ZShfX21pZGRsZSwgX19oYWxmKTsKICAgICAgICBpZiAoX19jb21wKCpfX21pZGRsZSwgX192YWwp KSB7CiAgICAgICAgICBfX2ZpcnN0ID0gX19taWRkbGU7CiAgICAgICAgICArK19fZmlyc3Q7CiAg ICAgICAgICBfX2xlbiA9IF9fbGVuIC0gX19oYWxmIC0gMTsKICAgICAgICB9CiAgICAgICAgZWxz ZQogICAgICAgICAgX19sZW4gPSBfX2hhbGY7CiAgICAgIH0KICAgICAgcmV0dXJuIF9fZmlyc3Q7 CiAgICB9CiMgMjg1NiAiL2hvbWUvQWRtaW5pc3RyYXRvci9nY2N0ZXN0aW5nL2xpYi9nY2MtbGli L2k2ODYtcGMtY3lnd2luLzMuNC9pbmNsdWRlL2MrKy9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9UcD4KICAgIF9Gb3J3YXJkSXRl cgogICAgdXBwZXJfYm91bmQoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xh c3QsIGNvbnN0IF9UcCYgX192YWwpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0 b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKICAgICAgdHlw ZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6ZGlmZmVyZW5jZV90 eXBlIF9EaXN0YW5jZVR5cGU7CgoKCiAgICAgCiAgICAgCiAgICAgCgogICAgICBfRGlzdGFuY2VU eXBlIF9fbGVuID0gc3RkOjpkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QpOwogICAgICBfRGlzdGFu Y2VUeXBlIF9faGFsZjsKICAgICAgX0ZvcndhcmRJdGVyIF9fbWlkZGxlOwoKICAgICAgd2hpbGUg KF9fbGVuID4gMCkgewogICAgICAgIF9faGFsZiA9IF9fbGVuID4+IDE7CiAgICAgICAgX19taWRk bGUgPSBfX2ZpcnN0OwogICAgICAgIGFkdmFuY2UoX19taWRkbGUsIF9faGFsZik7CiAgICAgICAg aWYgKF9fdmFsIDwgKl9fbWlkZGxlKQogICAgICAgICAgX19sZW4gPSBfX2hhbGY7CiAgICAgICAg ZWxzZSB7CiAgICAgICAgICBfX2ZpcnN0ID0gX19taWRkbGU7CiAgICAgICAgICArK19fZmlyc3Q7 CiAgICAgICAgICBfX2xlbiA9IF9fbGVuIC0gX19oYWxmIC0gMTsKICAgICAgICB9CiAgICAgIH0K ICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICB9CiMgMjkwMSAiL2hvbWUvQWRtaW5pc3RyYXRvci9n Y2N0ZXN0aW5nL2xpYi9nY2MtbGliL2k2ODYtcGMtY3lnd2luLzMuNC9pbmNsdWRlL2MrKy9iaXRz L3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1l IF9UcCwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBfRm9yd2FyZEl0ZXIKICAgIHVwcGVyX2JvdW5k KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAg ICAgY29uc3QgX1RwJiBfX3ZhbCwgX0NvbXBhcmUgX19jb21wKQogICAgewogICAgICB0eXBlZGVm IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1 ZVR5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRl cj46OmRpZmZlcmVuY2VfdHlwZSBfRGlzdGFuY2VUeXBlOwoKCiAgICAgCiAgICAgCgogICAgICBf RGlzdGFuY2VUeXBlIF9fbGVuID0gc3RkOjpkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QpOwogICAg ICBfRGlzdGFuY2VUeXBlIF9faGFsZjsKICAgICAgX0ZvcndhcmRJdGVyIF9fbWlkZGxlOwoKICAg ICAgd2hpbGUgKF9fbGVuID4gMCkgewogICAgICAgIF9faGFsZiA9IF9fbGVuID4+IDE7CiAgICAg ICAgX19taWRkbGUgPSBfX2ZpcnN0OwogICAgICAgIGFkdmFuY2UoX19taWRkbGUsIF9faGFsZik7 CiAgICAgICAgaWYgKF9fY29tcChfX3ZhbCwgKl9fbWlkZGxlKSkKICAgICAgICAgIF9fbGVuID0g X19oYWxmOwogICAgICAgIGVsc2UgewogICAgICAgICAgX19maXJzdCA9IF9fbWlkZGxlOwogICAg ICAgICAgKytfX2ZpcnN0OwogICAgICAgICAgX19sZW4gPSBfX2xlbiAtIF9faGFsZiAtIDE7CiAg ICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgfQojIDI5NDggIi9ob21l L0FkbWluaXN0cmF0b3IvZ2NjdGVzdGluZy9saWIvZ2NjLWxpYi9pNjg2LXBjLWN5Z3dpbi8zLjQv aW5jbHVkZS9jKysvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0Zvcndh cmRJdGVyLCB0eXBlbmFtZSBfVHA+CiAgICBwYWlyPF9Gb3J3YXJkSXRlciwgX0ZvcndhcmRJdGVy PgogICAgZXF1YWxfcmFuZ2UoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xh c3QsIGNvbnN0IF9UcCYgX192YWwpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0 b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKICAgICAgdHlw ZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6ZGlmZmVyZW5jZV90 eXBlIF9EaXN0YW5jZVR5cGU7CgoKCiAgICAgCiAgICAgCiAgICAgCgogICAgICBfRGlzdGFuY2VU eXBlIF9fbGVuID0gc3RkOjpkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QpOwogICAgICBfRGlzdGFu Y2VUeXBlIF9faGFsZjsKICAgICAgX0ZvcndhcmRJdGVyIF9fbWlkZGxlLCBfX2xlZnQsIF9fcmln aHQ7CgogICAgICB3aGlsZSAoX19sZW4gPiAwKSB7CiAgICAgICAgX19oYWxmID0gX19sZW4gPj4g MTsKICAgICAgICBfX21pZGRsZSA9IF9fZmlyc3Q7CiAgICAgICAgYWR2YW5jZShfX21pZGRsZSwg X19oYWxmKTsKICAgICAgICBpZiAoKl9fbWlkZGxlIDwgX192YWwpIHsKICAgICAgICAgIF9fZmly c3QgPSBfX21pZGRsZTsKICAgICAgICAgICsrX19maXJzdDsKICAgICAgICAgIF9fbGVuID0gX19s ZW4gLSBfX2hhbGYgLSAxOwogICAgICAgIH0KICAgICAgICBlbHNlIGlmIChfX3ZhbCA8ICpfX21p ZGRsZSkKICAgICAgICAgIF9fbGVuID0gX19oYWxmOwogICAgICAgIGVsc2UgewogICAgICAgICAg X19sZWZ0ID0gbG93ZXJfYm91bmQoX19maXJzdCwgX19taWRkbGUsIF9fdmFsKTsKICAgICAgICAg IGFkdmFuY2UoX19maXJzdCwgX19sZW4pOwogICAgICAgICAgX19yaWdodCA9IHVwcGVyX2JvdW5k KCsrX19taWRkbGUsIF9fZmlyc3QsIF9fdmFsKTsKICAgICAgICAgIHJldHVybiBwYWlyPF9Gb3J3 YXJkSXRlciwgX0ZvcndhcmRJdGVyPihfX2xlZnQsIF9fcmlnaHQpOwogICAgICAgIH0KICAgICAg fQogICAgICByZXR1cm4gcGFpcjxfRm9yd2FyZEl0ZXIsIF9Gb3J3YXJkSXRlcj4oX19maXJzdCwg X19maXJzdCk7CiAgICB9CiMgMzAwMyAiL2hvbWUvQWRtaW5pc3RyYXRvci9nY2N0ZXN0aW5nL2xp Yi9nY2MtbGliL2k2ODYtcGMtY3lnd2luLzMuNC9pbmNsdWRlL2MrKy9iaXRzL3N0bF9hbGdvLmgi IDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9UcCwgdHlwZW5h bWUgX0NvbXBhcmU+CiAgICBwYWlyPF9Gb3J3YXJkSXRlciwgX0ZvcndhcmRJdGVyPgogICAgZXF1 YWxfcmFuZ2UoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsIGNvbnN0 IF9UcCYgX192YWwsCiAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAg IHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OnZhbHVlX3R5 cGUgX1ZhbHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0Zv cndhcmRJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9EaXN0YW5jZVR5cGU7CgoKICAgICAKICAgICAK ICAgICAKCiAgICAgIF9EaXN0YW5jZVR5cGUgX19sZW4gPSBzdGQ6OmRpc3RhbmNlKF9fZmlyc3Qs IF9fbGFzdCk7CiAgICAgIF9EaXN0YW5jZVR5cGUgX19oYWxmOwogICAgICBfRm9yd2FyZEl0ZXIg X19taWRkbGUsIF9fbGVmdCwgX19yaWdodDsKCiAgICAgIHdoaWxlIChfX2xlbiA+IDApIHsKICAg ICAgICBfX2hhbGYgPSBfX2xlbiA+PiAxOwogICAgICAgIF9fbWlkZGxlID0gX19maXJzdDsKICAg ICAgICBhZHZhbmNlKF9fbWlkZGxlLCBfX2hhbGYpOwogICAgICAgIGlmIChfX2NvbXAoKl9fbWlk ZGxlLCBfX3ZhbCkpIHsKICAgICAgICAgIF9fZmlyc3QgPSBfX21pZGRsZTsKICAgICAgICAgICsr X19maXJzdDsKICAgICAgICAgIF9fbGVuID0gX19sZW4gLSBfX2hhbGYgLSAxOwogICAgICAgIH0K ICAgICAgICBlbHNlIGlmIChfX2NvbXAoX192YWwsICpfX21pZGRsZSkpCiAgICAgICAgICBfX2xl biA9IF9faGFsZjsKICAgICAgICBlbHNlIHsKICAgICAgICAgIF9fbGVmdCA9IGxvd2VyX2JvdW5k KF9fZmlyc3QsIF9fbWlkZGxlLCBfX3ZhbCwgX19jb21wKTsKICAgICAgICAgIGFkdmFuY2UoX19m aXJzdCwgX19sZW4pOwogICAgICAgICAgX19yaWdodCA9IHVwcGVyX2JvdW5kKCsrX19taWRkbGUs IF9fZmlyc3QsIF9fdmFsLCBfX2NvbXApOwogICAgICAgICAgcmV0dXJuIHBhaXI8X0ZvcndhcmRJ dGVyLCBfRm9yd2FyZEl0ZXI+KF9fbGVmdCwgX19yaWdodCk7CiAgICAgICAgfQogICAgICB9CiAg ICAgIHJldHVybiBwYWlyPF9Gb3J3YXJkSXRlciwgX0ZvcndhcmRJdGVyPihfX2ZpcnN0LCBfX2Zp cnN0KTsKICAgIH0KIyAzMDUyICIvaG9tZS9BZG1pbmlzdHJhdG9yL2djY3Rlc3RpbmcvbGliL2dj Yy1saWIvaTY4Ni1wYy1jeWd3aW4vMy40L2luY2x1ZGUvYysrL2JpdHMvc3RsX2FsZ28uaCIgMwog IHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1RwPgogICAgYm9vbAog ICAgYmluYXJ5X3NlYXJjaChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFz dCwKICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3ZhbCkKICAgIHsKCgogICAgIAogICAg IAoKICAgICAKCiAgICAgIF9Gb3J3YXJkSXRlciBfX2kgPSBsb3dlcl9ib3VuZChfX2ZpcnN0LCBf X2xhc3QsIF9fdmFsKTsKICAgICAgcmV0dXJuIF9faSAhPSBfX2xhc3QgJiYgIShfX3ZhbCA8ICpf X2kpOwogICAgfQojIDMwODMgIi9ob21lL0FkbWluaXN0cmF0b3IvZ2NjdGVzdGluZy9saWIvZ2Nj LWxpYi9pNjg2LXBjLWN5Z3dpbi8zLjQvaW5jbHVkZS9jKysvYml0cy9zdGxfYWxnby5oIiAzCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9D b21wYXJlPgogICAgYm9vbAogICAgYmluYXJ5X3NlYXJjaChfRm9yd2FyZEl0ZXIgX19maXJzdCwg X0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3ZhbCwg X0NvbXBhcmUgX19jb21wKQogICAgewoKICAgICAKICAgICAKCiAgICAgCgoKICAgICAgX0Zvcndh cmRJdGVyIF9faSA9IGxvd2VyX2JvdW5kKF9fZmlyc3QsIF9fbGFzdCwgX192YWwsIF9fY29tcCk7 CiAgICAgIHJldHVybiBfX2kgIT0gX19sYXN0ICYmICFfX2NvbXAoX192YWwsICpfX2kpOwogICAg fQojIDMxMTUgIi9ob21lL0FkbWluaXN0cmF0b3IvZ2NjdGVzdGluZy9saWIvZ2NjLWxpYi9pNjg2 LXBjLWN5Z3dpbi8zLjQvaW5jbHVkZS9jKysvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0lucHV0SXRlcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXIyLCB0eXBlbmFtZSBfT3V0 cHV0SXRlcj4KICAgIF9PdXRwdXRJdGVyCiAgICBtZXJnZShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwg X0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5w dXRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQpCiAgICB7Cgog ICAgIAogICAgIAogICAgIAoKICAgICAKCgogICAgIAoKCiAgICAgIHdoaWxlIChfX2ZpcnN0MSAh PSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpIHsKICAgICAgICBpZiAoKl9fZmlyc3Qy IDwgKl9fZmlyc3QxKSB7CiAgICAgICAgICAqX19yZXN1bHQgPSAqX19maXJzdDI7CiAgICAgICAg ICArK19fZmlyc3QyOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICpfX3Jlc3Vs dCA9ICpfX2ZpcnN0MTsKICAgICAgICAgICsrX19maXJzdDE7CiAgICAgICAgfQogICAgICAgICsr X19yZXN1bHQ7CiAgICAgIH0KICAgICAgcmV0dXJuIGNvcHkoX19maXJzdDIsIF9fbGFzdDIsIGNv cHkoX19maXJzdDEsIF9fbGFzdDEsIF9fcmVzdWx0KSk7CiAgICB9CiMgMzE2NiAiL2hvbWUvQWRt aW5pc3RyYXRvci9nY2N0ZXN0aW5nL2xpYi9nY2MtbGliL2k2ODYtcGMtY3lnd2luLzMuNC9pbmNs dWRlL2MrKy9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVy MSwgdHlwZW5hbWUgX0lucHV0SXRlcjIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyLAogICAgICAgICAg IHR5cGVuYW1lIF9Db21wYXJlPgogICAgX091dHB1dEl0ZXIKICAgIG1lcmdlKF9JbnB1dEl0ZXIx IF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgX0lucHV0SXRlcjIgX19m aXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3Vs dCwgX0NvbXBhcmUgX19jb21wKQogICAgewoKICAgICAKICAgICAKICAgICAKCgogICAgIAoKICAg ICAKCgoKICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19s YXN0MikgewogICAgICAgIGlmIChfX2NvbXAoKl9fZmlyc3QyLCAqX19maXJzdDEpKSB7CiAgICAg ICAgICAqX19yZXN1bHQgPSAqX19maXJzdDI7CiAgICAgICAgICArK19fZmlyc3QyOwogICAgICAg IH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsKICAgICAg ICAgICsrX19maXJzdDE7CiAgICAgICAgfQogICAgICAgICsrX19yZXN1bHQ7CiAgICAgIH0KICAg ICAgcmV0dXJuIGNvcHkoX19maXJzdDIsIF9fbGFzdDIsIGNvcHkoX19maXJzdDEsIF9fbGFzdDEs IF9fcmVzdWx0KSk7CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9u YWxJdGVyLCB0eXBlbmFtZSBfRGlzdGFuY2U+CiAgICB2b2lkCiAgICBfX21lcmdlX3dpdGhvdXRf YnVmZmVyKF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAg ICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19taWRkbGUsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAg IF9EaXN0YW5jZSBfX2xlbjEsIF9EaXN0YW5jZSBfX2xlbjIpCiAgICB7CiAgICAgIGlmIChfX2xl bjEgPT0gMCB8fCBfX2xlbjIgPT0gMCkKICAgICAgICByZXR1cm47CiAgICAgIGlmIChfX2xlbjEg KyBfX2xlbjIgPT0gMikgewogICAgICAgIGlmICgqX19taWRkbGUgPCAqX19maXJzdCkKICAgICAg ICAgICAgICBpdGVyX3N3YXAoX19maXJzdCwgX19taWRkbGUpOwogICAgICAgIHJldHVybjsKICAg ICAgfQogICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdF9jdXQgPSBfX2ZpcnN0OwogICAg ICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19zZWNvbmRfY3V0ID0gX19taWRkbGU7CiAgICAgIF9EaXN0 YW5jZSBfX2xlbjExID0gMDsKICAgICAgX0Rpc3RhbmNlIF9fbGVuMjIgPSAwOwogICAgICBpZiAo X19sZW4xID4gX19sZW4yKSB7CiAgICAgICAgX19sZW4xMSA9IF9fbGVuMSAvIDI7CiAgICAgICAg YWR2YW5jZShfX2ZpcnN0X2N1dCwgX19sZW4xMSk7CiAgICAgICAgX19zZWNvbmRfY3V0ID0gbG93 ZXJfYm91bmQoX19taWRkbGUsIF9fbGFzdCwgKl9fZmlyc3RfY3V0KTsKICAgICAgICBfX2xlbjIy ID0gc3RkOjpkaXN0YW5jZShfX21pZGRsZSwgX19zZWNvbmRfY3V0KTsKICAgICAgfQogICAgICBl bHNlIHsKICAgICAgICBfX2xlbjIyID0gX19sZW4yIC8gMjsKICAgICAgICBhZHZhbmNlKF9fc2Vj b25kX2N1dCwgX19sZW4yMik7CiAgICAgICAgX19maXJzdF9jdXQgPSB1cHBlcl9ib3VuZChfX2Zp cnN0LCBfX21pZGRsZSwgKl9fc2Vjb25kX2N1dCk7CiAgICAgICAgX19sZW4xMSA9IHN0ZDo6ZGlz dGFuY2UoX19maXJzdCwgX19maXJzdF9jdXQpOwogICAgICB9CiAgICAgIHJvdGF0ZShfX2ZpcnN0 X2N1dCwgX19taWRkbGUsIF9fc2Vjb25kX2N1dCk7CiAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBf X25ld19taWRkbGUgPSBfX2ZpcnN0X2N1dDsKICAgICAgYWR2YW5jZShfX25ld19taWRkbGUsIHN0 ZDo6ZGlzdGFuY2UoX19taWRkbGUsIF9fc2Vjb25kX2N1dCkpOwogICAgICBfX21lcmdlX3dpdGhv dXRfYnVmZmVyKF9fZmlyc3QsIF9fZmlyc3RfY3V0LCBfX25ld19taWRkbGUsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgX19sZW4xMSwgX19sZW4yMik7CiAgICAgIF9fbWVyZ2Vfd2l0aG91 dF9idWZmZXIoX19uZXdfbWlkZGxlLCBfX3NlY29uZF9jdXQsIF9fbGFzdCwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBfX2xlbjEgLSBfX2xlbjExLCBfX2xlbjIgLSBfX2xlbjIyKTsKICAg IH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIsIHR5cGVuYW1l IF9EaXN0YW5jZSwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICB2b2lkCiAgICBfX21lcmdlX3dpdGhv dXRfYnVmZmVyKF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAg ICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19taWRkbGUsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgIF9EaXN0YW5jZSBfX2xlbjEsIF9EaXN0YW5jZSBfX2xlbjIsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgaWYgKF9fbGVuMSA9PSAwIHx8 IF9fbGVuMiA9PSAwKQogICAgICAgIHJldHVybjsKICAgICAgaWYgKF9fbGVuMSArIF9fbGVuMiA9 PSAyKSB7CiAgICAgICAgaWYgKF9fY29tcCgqX19taWRkbGUsICpfX2ZpcnN0KSkKICAgICAgICAg ICAgICBpdGVyX3N3YXAoX19maXJzdCwgX19taWRkbGUpOwogICAgICAgIHJldHVybjsKICAgICAg fQogICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdF9jdXQgPSBfX2ZpcnN0OwogICAgICBf QmlkaXJlY3Rpb25hbEl0ZXIgX19zZWNvbmRfY3V0ID0gX19taWRkbGU7CiAgICAgIF9EaXN0YW5j ZSBfX2xlbjExID0gMDsKICAgICAgX0Rpc3RhbmNlIF9fbGVuMjIgPSAwOwogICAgICBpZiAoX19s ZW4xID4gX19sZW4yKSB7CiAgICAgICAgX19sZW4xMSA9IF9fbGVuMSAvIDI7CiAgICAgICAgYWR2 YW5jZShfX2ZpcnN0X2N1dCwgX19sZW4xMSk7CiAgICAgICAgX19zZWNvbmRfY3V0ID0gbG93ZXJf Ym91bmQoX19taWRkbGUsIF9fbGFzdCwgKl9fZmlyc3RfY3V0LCBfX2NvbXApOwogICAgICAgIF9f bGVuMjIgPSBzdGQ6OmRpc3RhbmNlKF9fbWlkZGxlLCBfX3NlY29uZF9jdXQpOwogICAgICB9CiAg ICAgIGVsc2UgewogICAgICAgIF9fbGVuMjIgPSBfX2xlbjIgLyAyOwogICAgICAgIGFkdmFuY2Uo X19zZWNvbmRfY3V0LCBfX2xlbjIyKTsKICAgICAgICBfX2ZpcnN0X2N1dCA9IHVwcGVyX2JvdW5k KF9fZmlyc3QsIF9fbWlkZGxlLCAqX19zZWNvbmRfY3V0LCBfX2NvbXApOwogICAgICAgIF9fbGVu MTEgPSBzdGQ6OmRpc3RhbmNlKF9fZmlyc3QsIF9fZmlyc3RfY3V0KTsKICAgICAgfQogICAgICBy b3RhdGUoX19maXJzdF9jdXQsIF9fbWlkZGxlLCBfX3NlY29uZF9jdXQpOwogICAgICBfQmlkaXJl Y3Rpb25hbEl0ZXIgX19uZXdfbWlkZGxlID0gX19maXJzdF9jdXQ7CiAgICAgIGFkdmFuY2UoX19u ZXdfbWlkZGxlLCBzdGQ6OmRpc3RhbmNlKF9fbWlkZGxlLCBfX3NlY29uZF9jdXQpKTsKICAgICAg X19tZXJnZV93aXRob3V0X2J1ZmZlcihfX2ZpcnN0LCBfX2ZpcnN0X2N1dCwgX19uZXdfbWlkZGxl LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGVuMTEsIF9fbGVuMjIsIF9fY29tcCk7 CiAgICAgIF9fbWVyZ2Vfd2l0aG91dF9idWZmZXIoX19uZXdfbWlkZGxlLCBfX3NlY29uZF9jdXQs IF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xlbjEgLSBfX2xlbjExLCBf X2xlbjIgLSBfX2xlbjIyLCBfX2NvbXApOwogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1l IF9CaWRpcmVjdGlvbmFsSXRlcjEsIHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcjIsCiAgICAg ICAgICAgdHlwZW5hbWUgX0Rpc3RhbmNlPgogICAgX0JpZGlyZWN0aW9uYWxJdGVyMQogICAgX19y b3RhdGVfYWRhcHRpdmUoX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2ZpcnN0LAogICAgICAgICAgICAg ICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMSBfX21pZGRsZSwKICAgICAgICAgICAgICAgICAg ICAgIF9CaWRpcmVjdGlvbmFsSXRlcjEgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgX0Rp c3RhbmNlIF9fbGVuMSwgX0Rpc3RhbmNlIF9fbGVuMiwKICAgICAgICAgICAgICAgICAgICAgIF9C aWRpcmVjdGlvbmFsSXRlcjIgX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFu Y2UgX19idWZmZXJfc2l6ZSkKICAgIHsKICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX2J1ZmZl cl9lbmQ7CiAgICAgIGlmIChfX2xlbjEgPiBfX2xlbjIgJiYgX19sZW4yIDw9IF9fYnVmZmVyX3Np emUpIHsKICAgICAgICBfX2J1ZmZlcl9lbmQgPSBjb3B5KF9fbWlkZGxlLCBfX2xhc3QsIF9fYnVm ZmVyKTsKICAgICAgICBjb3B5X2JhY2t3YXJkKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QpOwog ICAgICAgIHJldHVybiBjb3B5KF9fYnVmZmVyLCBfX2J1ZmZlcl9lbmQsIF9fZmlyc3QpOwogICAg ICB9CiAgICAgIGVsc2UgaWYgKF9fbGVuMSA8PSBfX2J1ZmZlcl9zaXplKSB7CiAgICAgICAgX19i dWZmZXJfZW5kID0gY29weShfX2ZpcnN0LCBfX21pZGRsZSwgX19idWZmZXIpOwogICAgICAgIGNv cHkoX19taWRkbGUsIF9fbGFzdCwgX19maXJzdCk7CiAgICAgICAgcmV0dXJuIGNvcHlfYmFja3dh cmQoX19idWZmZXIsIF9fYnVmZmVyX2VuZCwgX19sYXN0KTsKICAgICAgfQogICAgICBlbHNlIHsK ICAgICAgICByb3RhdGUoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCk7CiAgICAgICAgYWR2YW5j ZShfX2ZpcnN0LCBzdGQ6OmRpc3RhbmNlKF9fbWlkZGxlLCBfX2xhc3QpKTsKICAgICAgICByZXR1 cm4gX19maXJzdDsKICAgICAgfQogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRp cmVjdGlvbmFsSXRlcjEsIHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcjIsCiAgICAgICAgICAg dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyMz4KICAgIF9CaWRpcmVjdGlvbmFsSXRlcjMKICAg IF9fbWVyZ2VfYmFja3dhcmQoX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2ZpcnN0MSwgX0JpZGlyZWN0 aW9uYWxJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0 ZXIyIF9fZmlyc3QyLCBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAg ICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjMgX19yZXN1bHQpCiAgICB7CiAgICAgIGlmIChfX2Zp cnN0MSA9PSBfX2xhc3QxKQogICAgICAgIHJldHVybiBjb3B5X2JhY2t3YXJkKF9fZmlyc3QyLCBf X2xhc3QyLCBfX3Jlc3VsdCk7CiAgICAgIGlmIChfX2ZpcnN0MiA9PSBfX2xhc3QyKQogICAgICAg IHJldHVybiBjb3B5X2JhY2t3YXJkKF9fZmlyc3QxLCBfX2xhc3QxLCBfX3Jlc3VsdCk7CiAgICAg IC0tX19sYXN0MTsKICAgICAgLS1fX2xhc3QyOwogICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAg IGlmICgqX19sYXN0MiA8ICpfX2xhc3QxKSB7CiAgICAgICAgICAqLS1fX3Jlc3VsdCA9ICpfX2xh c3QxOwogICAgICAgICAgaWYgKF9fZmlyc3QxID09IF9fbGFzdDEpCiAgICAgICAgICAgIHJldHVy biBjb3B5X2JhY2t3YXJkKF9fZmlyc3QyLCArK19fbGFzdDIsIF9fcmVzdWx0KTsKICAgICAgICAg IC0tX19sYXN0MTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAqLS1fX3Jlc3Vs dCA9ICpfX2xhc3QyOwogICAgICAgICAgaWYgKF9fZmlyc3QyID09IF9fbGFzdDIpCiAgICAgICAg ICAgIHJldHVybiBjb3B5X2JhY2t3YXJkKF9fZmlyc3QxLCArK19fbGFzdDEsIF9fcmVzdWx0KTsK ICAgICAgICAgIC0tX19sYXN0MjsKICAgICAgICB9CiAgICAgIH0KICAgIH0KCgoKCgoKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIxLCB0eXBlbmFtZSBfQmlkaXJlY3Rpb25h bEl0ZXIyLAogICAgICAgICAgIHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcjMsIHR5cGVuYW1l IF9Db21wYXJlPgogICAgX0JpZGlyZWN0aW9uYWxJdGVyMwogICAgX19tZXJnZV9iYWNrd2FyZChf QmlkaXJlY3Rpb25hbEl0ZXIxIF9fZmlyc3QxLCBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fbGFzdDEs CiAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19maXJzdDIsIF9CaWRp cmVjdGlvbmFsSXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9u YWxJdGVyMyBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQog ICAgewogICAgICBpZiAoX19maXJzdDEgPT0gX19sYXN0MSkKICAgICAgICByZXR1cm4gY29weV9i YWNrd2FyZChfX2ZpcnN0MiwgX19sYXN0MiwgX19yZXN1bHQpOwogICAgICBpZiAoX19maXJzdDIg PT0gX19sYXN0MikKICAgICAgICByZXR1cm4gY29weV9iYWNrd2FyZChfX2ZpcnN0MSwgX19sYXN0 MSwgX19yZXN1bHQpOwogICAgICAtLV9fbGFzdDE7CiAgICAgIC0tX19sYXN0MjsKICAgICAgd2hp bGUgKHRydWUpIHsKICAgICAgICBpZiAoX19jb21wKCpfX2xhc3QyLCAqX19sYXN0MSkpIHsKICAg ICAgICAgICotLV9fcmVzdWx0ID0gKl9fbGFzdDE7CiAgICAgICAgICBpZiAoX19maXJzdDEgPT0g X19sYXN0MSkKICAgICAgICAgICAgcmV0dXJuIGNvcHlfYmFja3dhcmQoX19maXJzdDIsICsrX19s YXN0MiwgX19yZXN1bHQpOwogICAgICAgICAgLS1fX2xhc3QxOwogICAgICAgIH0KICAgICAgICBl bHNlIHsKICAgICAgICAgICotLV9fcmVzdWx0ID0gKl9fbGFzdDI7CiAgICAgICAgICBpZiAoX19m aXJzdDIgPT0gX19sYXN0MikKICAgICAgICAgICAgcmV0dXJuIGNvcHlfYmFja3dhcmQoX19maXJz dDEsICsrX19sYXN0MSwgX19yZXN1bHQpOwogICAgICAgICAgLS1fX2xhc3QyOwogICAgICAgIH0K ICAgICAgfQogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRl ciwgdHlwZW5hbWUgX0Rpc3RhbmNlLCB0eXBlbmFtZSBfUG9pbnRlcj4KICAgIHZvaWQKICAgIF9f bWVyZ2VfYWRhcHRpdmUoX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAg ICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX21pZGRsZSwKICAgICAgICAgICAgICAgICAgICAg X0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNl IF9fbGVuMSwgX0Rpc3RhbmNlIF9fbGVuMiwKICAgICAgICAgICAgICAgICAgICAgX1BvaW50ZXIg X19idWZmZXIsIF9EaXN0YW5jZSBfX2J1ZmZlcl9zaXplKQogICAgewogICAgICAgICAgaWYgKF9f bGVuMSA8PSBfX2xlbjIgJiYgX19sZW4xIDw9IF9fYnVmZmVyX3NpemUpIHsKICAgICAgICAgICAg X1BvaW50ZXIgX19idWZmZXJfZW5kID0gY29weShfX2ZpcnN0LCBfX21pZGRsZSwgX19idWZmZXIp OwogICAgICAgICAgICBtZXJnZShfX2J1ZmZlciwgX19idWZmZXJfZW5kLCBfX21pZGRsZSwgX19s YXN0LCBfX2ZpcnN0KTsKICAgICAgICAgIH0KICAgICAgICAgIGVsc2UgaWYgKF9fbGVuMiA8PSBf X2J1ZmZlcl9zaXplKSB7CiAgICAgICAgICAgIF9Qb2ludGVyIF9fYnVmZmVyX2VuZCA9IGNvcHko X19taWRkbGUsIF9fbGFzdCwgX19idWZmZXIpOwogICAgICAgICAgICBfX21lcmdlX2JhY2t3YXJk KF9fZmlyc3QsIF9fbWlkZGxlLCBfX2J1ZmZlciwgX19idWZmZXJfZW5kLCBfX2xhc3QpOwogICAg ICAgICAgfQogICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBf X2ZpcnN0X2N1dCA9IF9fZmlyc3Q7CiAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX3Nl Y29uZF9jdXQgPSBfX21pZGRsZTsKICAgICAgICAgICAgX0Rpc3RhbmNlIF9fbGVuMTEgPSAwOwog ICAgICAgICAgICBfRGlzdGFuY2UgX19sZW4yMiA9IDA7CiAgICAgICAgICAgIGlmIChfX2xlbjEg PiBfX2xlbjIpIHsKICAgICAgICAgICAgICAgICAgX19sZW4xMSA9IF9fbGVuMSAvIDI7CiAgICAg ICAgICAgICAgICAgIGFkdmFuY2UoX19maXJzdF9jdXQsIF9fbGVuMTEpOwogICAgICAgICAgICAg ICAgICBfX3NlY29uZF9jdXQgPSBsb3dlcl9ib3VuZChfX21pZGRsZSwgX19sYXN0LCAqX19maXJz dF9jdXQpOwogICAgICAgICAgICAgICAgICBfX2xlbjIyID0gc3RkOjpkaXN0YW5jZShfX21pZGRs ZSwgX19zZWNvbmRfY3V0KTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAg ICAgICAgICAgICAgX19sZW4yMiA9IF9fbGVuMiAvIDI7CiAgICAgICAgICAgICAgICAgIGFkdmFu Y2UoX19zZWNvbmRfY3V0LCBfX2xlbjIyKTsKICAgICAgICAgICAgICAgICAgX19maXJzdF9jdXQg PSB1cHBlcl9ib3VuZChfX2ZpcnN0LCBfX21pZGRsZSwgKl9fc2Vjb25kX2N1dCk7CiAgICAgICAg ICAgICAgICAgIF9fbGVuMTEgPSBzdGQ6OmRpc3RhbmNlKF9fZmlyc3QsIF9fZmlyc3RfY3V0KTsK ICAgICAgICAgICAgfQogICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19uZXdfbWlkZGxl ID0KICAgICAgICAgICAgICAgICAgX19yb3RhdGVfYWRhcHRpdmUoX19maXJzdF9jdXQsIF9fbWlk ZGxlLCBfX3NlY29uZF9jdXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9f bGVuMSAtIF9fbGVuMTEsIF9fbGVuMjIsIF9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBfX2J1ZmZlcl9zaXplKTsKICAgICAgICAgICAgX19tZXJnZV9hZGFwdGl2 ZShfX2ZpcnN0LCBfX2ZpcnN0X2N1dCwgX19uZXdfbWlkZGxlLCBfX2xlbjExLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgIF9fbGVuMjIsIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplKTsKICAg ICAgICAgICAgX19tZXJnZV9hZGFwdGl2ZShfX25ld19taWRkbGUsIF9fc2Vjb25kX2N1dCwgX19s YXN0LCBfX2xlbjEgLSBfX2xlbjExLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGVu MiAtIF9fbGVuMjIsIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplKTsKICAgICAgICAgIH0KICAgIH0K CgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIsIHR5cGVuYW1lIF9E aXN0YW5jZSwgdHlwZW5hbWUgX1BvaW50ZXIsCiAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmU+ CiAgICB2b2lkCiAgICBfX21lcmdlX2FkYXB0aXZlKF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0 LAogICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19taWRkbGUsCiAgICAg ICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAg ICAgICAgIF9EaXN0YW5jZSBfX2xlbjEsIF9EaXN0YW5jZSBfX2xlbjIsCiAgICAgICAgICAgICAg ICAgICAgIF9Qb2ludGVyIF9fYnVmZmVyLCBfRGlzdGFuY2UgX19idWZmZXJfc2l6ZSwKICAgICAg ICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQogICAgewogICAgICAgICAgaWYgKF9fbGVu MSA8PSBfX2xlbjIgJiYgX19sZW4xIDw9IF9fYnVmZmVyX3NpemUpIHsKICAgICAgICAgICAgX1Bv aW50ZXIgX19idWZmZXJfZW5kID0gY29weShfX2ZpcnN0LCBfX21pZGRsZSwgX19idWZmZXIpOwog ICAgICAgICAgICBtZXJnZShfX2J1ZmZlciwgX19idWZmZXJfZW5kLCBfX21pZGRsZSwgX19sYXN0 LCBfX2ZpcnN0LCBfX2NvbXApOwogICAgICAgICAgfQogICAgICAgICAgZWxzZSBpZiAoX19sZW4y IDw9IF9fYnVmZmVyX3NpemUpIHsKICAgICAgICAgICAgX1BvaW50ZXIgX19idWZmZXJfZW5kID0g Y29weShfX21pZGRsZSwgX19sYXN0LCBfX2J1ZmZlcik7CiAgICAgICAgICAgIF9fbWVyZ2VfYmFj a3dhcmQoX19maXJzdCwgX19taWRkbGUsIF9fYnVmZmVyLCBfX2J1ZmZlcl9lbmQsIF9fbGFzdCwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb21wKTsKICAg ICAgICAgIH0KICAgICAgICAgIGVsc2UgewogICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIg X19maXJzdF9jdXQgPSBfX2ZpcnN0OwogICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19z ZWNvbmRfY3V0ID0gX19taWRkbGU7CiAgICAgICAgICAgIF9EaXN0YW5jZSBfX2xlbjExID0gMDsK ICAgICAgICAgICAgX0Rpc3RhbmNlIF9fbGVuMjIgPSAwOwogICAgICAgICAgICBpZiAoX19sZW4x ID4gX19sZW4yKSB7CiAgICAgICAgICAgICAgICAgIF9fbGVuMTEgPSBfX2xlbjEgLyAyOwogICAg ICAgICAgICAgICAgICBhZHZhbmNlKF9fZmlyc3RfY3V0LCBfX2xlbjExKTsKICAgICAgICAgICAg ICAgICAgX19zZWNvbmRfY3V0ID0gbG93ZXJfYm91bmQoX19taWRkbGUsIF9fbGFzdCwgKl9fZmly c3RfY3V0LCBfX2NvbXApOwogICAgICAgICAgICAgICAgICBfX2xlbjIyID0gc3RkOjpkaXN0YW5j ZShfX21pZGRsZSwgX19zZWNvbmRfY3V0KTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNl IHsKICAgICAgICAgICAgICAgICAgX19sZW4yMiA9IF9fbGVuMiAvIDI7CiAgICAgICAgICAgICAg ICAgIGFkdmFuY2UoX19zZWNvbmRfY3V0LCBfX2xlbjIyKTsKICAgICAgICAgICAgICAgICAgX19m aXJzdF9jdXQgPSB1cHBlcl9ib3VuZChfX2ZpcnN0LCBfX21pZGRsZSwgKl9fc2Vjb25kX2N1dCwg X19jb21wKTsKICAgICAgICAgICAgICAgICAgX19sZW4xMSA9IHN0ZDo6ZGlzdGFuY2UoX19maXJz dCwgX19maXJzdF9jdXQpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFs SXRlciBfX25ld19taWRkbGUgPQogICAgICAgICAgICAgICAgICBfX3JvdGF0ZV9hZGFwdGl2ZShf X2ZpcnN0X2N1dCwgX19taWRkbGUsIF9fc2Vjb25kX2N1dCwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgX19sZW4xIC0gX19sZW4xMSwgX19sZW4yMiwgX19idWZmZXIsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYnVmZmVyX3NpemUpOwogICAgICAgICAg ICBfX21lcmdlX2FkYXB0aXZlKF9fZmlyc3QsIF9fZmlyc3RfY3V0LCBfX25ld19taWRkbGUsIF9f bGVuMTEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19sZW4yMiwgX19idWZmZXIsIF9f YnVmZmVyX3NpemUsIF9fY29tcCk7CiAgICAgICAgICAgIF9fbWVyZ2VfYWRhcHRpdmUoX19uZXdf bWlkZGxlLCBfX3NlY29uZF9jdXQsIF9fbGFzdCwgX19sZW4xIC0gX19sZW4xMSwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBfX2xlbjIgLSBfX2xlbjIyLCBfX2J1ZmZlciwgX19idWZmZXJf c2l6ZSwgX19jb21wKTsKICAgICAgICAgIH0KICAgIH0KIyAzNTA4ICIvaG9tZS9BZG1pbmlzdHJh dG9yL2djY3Rlc3RpbmcvbGliL2djYy1saWIvaTY4Ni1wYy1jeWd3aW4vMy40L2luY2x1ZGUvYysr L2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRl cj4KICAgIHZvaWQKICAgIGlucGxhY2VfbWVyZ2UoX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3Qs CiAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX21pZGRsZSwKICAgICAgICAg ICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCkKICAgIHsKICAgICAgdHlwZWRlZiB0 eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0JpZGlyZWN0aW9uYWxJdGVyPjo6dmFsdWVfdHlwZQog ICAgICAgICAgX1ZhbHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFp dHM8X0JpZGlyZWN0aW9uYWxJdGVyPjo6ZGlmZmVyZW5jZV90eXBlCiAgICAgICAgICBfRGlzdGFu Y2VUeXBlOwoKCiAgICAgCgogICAgIAoKICAgICAgaWYgKF9fZmlyc3QgPT0gX19taWRkbGUgfHwg X19taWRkbGUgPT0gX19sYXN0KQogICAgICAgIHJldHVybjsKCiAgICAgIF9EaXN0YW5jZVR5cGUg X19sZW4xID0gc3RkOjpkaXN0YW5jZShfX2ZpcnN0LCBfX21pZGRsZSk7CiAgICAgIF9EaXN0YW5j ZVR5cGUgX19sZW4yID0gc3RkOjpkaXN0YW5jZShfX21pZGRsZSwgX19sYXN0KTsKCiAgICAgIF9U ZW1wb3JhcnlfYnVmZmVyPF9CaWRpcmVjdGlvbmFsSXRlciwgX1ZhbHVlVHlwZT4gX19idWYoX19m aXJzdCwgX19sYXN0KTsKICAgICAgaWYgKF9fYnVmLmJlZ2luKCkgPT0gMCkKICAgICAgICBfX21l cmdlX3dpdGhvdXRfYnVmZmVyKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsIF9fbGVuMSwgX19s ZW4yKTsKICAgICAgZWxzZQogICAgICAgIF9fbWVyZ2VfYWRhcHRpdmUoX19maXJzdCwgX19taWRk bGUsIF9fbGFzdCwgX19sZW4xLCBfX2xlbjIsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2J1 Zi5iZWdpbigpLCBfRGlzdGFuY2VUeXBlKF9fYnVmLnNpemUoKSkpOwogICAgfQojIDM1NTkgIi9o b21lL0FkbWluaXN0cmF0b3IvZ2NjdGVzdGluZy9saWIvZ2NjLWxpYi9pNjg2LXBjLWN5Z3dpbi8z LjQvaW5jbHVkZS9jKysvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0Jp ZGlyZWN0aW9uYWxJdGVyLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIHZvaWQKICAgIGlucGxhY2Vf bWVyZ2UoX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgIF9CaWRp cmVjdGlvbmFsSXRlciBfX21pZGRsZSwKICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJ dGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQogICAgewogICAg ICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfQmlkaXJlY3Rpb25hbEl0ZXI+Ojp2 YWx1ZV90eXBlCiAgICAgICAgICBfVmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0 ZXJhdG9yX3RyYWl0czxfQmlkaXJlY3Rpb25hbEl0ZXI+OjpkaWZmZXJlbmNlX3R5cGUKICAgICAg ICAgIF9EaXN0YW5jZVR5cGU7CgoKICAgICAKCiAgICAgCgoKICAgICAgaWYgKF9fZmlyc3QgPT0g X19taWRkbGUgfHwgX19taWRkbGUgPT0gX19sYXN0KQogICAgICAgIHJldHVybjsKCiAgICAgIF9E aXN0YW5jZVR5cGUgX19sZW4xID0gc3RkOjpkaXN0YW5jZShfX2ZpcnN0LCBfX21pZGRsZSk7CiAg ICAgIF9EaXN0YW5jZVR5cGUgX19sZW4yID0gc3RkOjpkaXN0YW5jZShfX21pZGRsZSwgX19sYXN0 KTsKCiAgICAgIF9UZW1wb3JhcnlfYnVmZmVyPF9CaWRpcmVjdGlvbmFsSXRlciwgX1ZhbHVlVHlw ZT4gX19idWYoX19maXJzdCwgX19sYXN0KTsKICAgICAgaWYgKF9fYnVmLmJlZ2luKCkgPT0gMCkK ICAgICAgICBfX21lcmdlX3dpdGhvdXRfYnVmZmVyKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3Qs IF9fbGVuMSwgX19sZW4yLCBfX2NvbXApOwogICAgICBlbHNlCiAgICAgICAgX19tZXJnZV9hZGFw dGl2ZShfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0LCBfX2xlbjEsIF9fbGVuMiwKICAgICAgICAg ICAgICAgICAgICAgICAgIF9fYnVmLmJlZ2luKCksIF9EaXN0YW5jZVR5cGUoX19idWYuc2l6ZSgp KSwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7CiAgICB9CgoKCgoKCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0lucHV0SXRlcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXIyPgogICAgYm9vbAog ICAgaW5jbHVkZXMoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAg ICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MikKICAg IHsKCiAgICAgCiAgICAgCiAgICAgCgoKICAgICAKCgogICAgICB3aGlsZSAoX19maXJzdDEgIT0g X19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKQogICAgICAgIGlmICgqX19maXJzdDIgPCAq X19maXJzdDEpCiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgZWxzZSBpZigqX19maXJz dDEgPCAqX19maXJzdDIpCiAgICAgICAgICArK19fZmlyc3QxOwogICAgICAgIGVsc2UKICAgICAg ICAgICsrX19maXJzdDEsICsrX19maXJzdDI7CgogICAgICByZXR1cm4gX19maXJzdDIgPT0gX19s YXN0MjsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcjEsIHR5cGVuYW1lIF9J bnB1dEl0ZXIyLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIGJvb2wKICAgIGluY2x1ZGVzKF9JbnB1 dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgX0lucHV0 SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsIF9Db21wYXJlIF9fY29tcCkKICAg IHsKCiAgICAgCiAgICAgCiAgICAgCgoKICAgICAKCgoKICAgICAgd2hpbGUgKF9fZmlyc3QxICE9 IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikKICAgICAgICBpZiAoX19jb21wKCpfX2Zp cnN0MiwgKl9fZmlyc3QxKSkKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICBlbHNlIGlm KF9fY29tcCgqX19maXJzdDEsICpfX2ZpcnN0MikpCiAgICAgICAgICArK19fZmlyc3QxOwogICAg ICAgIGVsc2UKICAgICAgICAgICsrX19maXJzdDEsICsrX19maXJzdDI7CgogICAgICByZXR1cm4g X19maXJzdDIgPT0gX19sYXN0MjsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRl cjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXIyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4KICAgIF9PdXRw dXRJdGVyCiAgICBzZXRfdW5pb24oX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9f bGFzdDEsCiAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9f bGFzdDIsCiAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQpCiAgICB7CgogICAgIAog ICAgIAogICAgIAoKICAgICAKCgogICAgIAoKCiAgICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xh c3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpIHsKICAgICAgICBpZiAoKl9fZmlyc3QxIDwgKl9f Zmlyc3QyKSB7CiAgICAgICAgICAqX19yZXN1bHQgPSAqX19maXJzdDE7CiAgICAgICAgICArK19f Zmlyc3QxOwogICAgICAgIH0KICAgICAgICBlbHNlIGlmICgqX19maXJzdDIgPCAqX19maXJzdDEp IHsKICAgICAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MjsKICAgICAgICAgICsrX19maXJzdDI7 CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3Qx OwogICAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgICAgICsrX19maXJzdDI7CiAgICAgICAgfQog ICAgICAgICsrX19yZXN1bHQ7CiAgICAgIH0KICAgICAgcmV0dXJuIGNvcHkoX19maXJzdDIsIF9f bGFzdDIsIGNvcHkoX19maXJzdDEsIF9fbGFzdDEsIF9fcmVzdWx0KSk7CiAgICB9CgogIHRlbXBs YXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJdGVyMiwgdHlwZW5hbWUg X091dHB1dEl0ZXIsCiAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBfT3V0cHV0SXRl cgogICAgc2V0X3VuaW9uKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3Qx LAogICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3Qy LAogICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBfQ29tcGFyZSBfX2NvbXApCiAg ICB7CgogICAgIAogICAgIAogICAgIAoKCiAgICAgCgogICAgIAoKCgogICAgICB3aGlsZSAoX19m aXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKSB7CiAgICAgICAgaWYgKF9f Y29tcCgqX19maXJzdDEsICpfX2ZpcnN0MikpIHsKICAgICAgICAgICpfX3Jlc3VsdCA9ICpfX2Zp cnN0MTsKICAgICAgICAgICsrX19maXJzdDE7CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYgKF9f Y29tcCgqX19maXJzdDIsICpfX2ZpcnN0MSkpIHsKICAgICAgICAgICpfX3Jlc3VsdCA9ICpfX2Zp cnN0MjsKICAgICAgICAgICsrX19maXJzdDI7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAg ICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOwogICAgICAgICAgKytfX2ZpcnN0MTsKICAgICAg ICAgICsrX19maXJzdDI7CiAgICAgICAgfQogICAgICAgICsrX19yZXN1bHQ7CiAgICAgIH0KICAg ICAgcmV0dXJuIGNvcHkoX19maXJzdDIsIF9fbGFzdDIsIGNvcHkoX19maXJzdDEsIF9fbGFzdDEs IF9fcmVzdWx0KSk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBl bmFtZSBfSW5wdXRJdGVyMiwgdHlwZW5hbWUgX091dHB1dEl0ZXI+CiAgICBfT3V0cHV0SXRlcgog ICAgc2V0X2ludGVyc2VjdGlvbihfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19s YXN0MSwKICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0 ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0KQog ICAgewoKICAgICAKICAgICAKICAgICAKCiAgICAgCgoKICAgICAKCgogICAgICB3aGlsZSAoX19m aXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKQogICAgICAgIGlmICgqX19m aXJzdDEgPCAqX19maXJzdDIpCiAgICAgICAgICArK19fZmlyc3QxOwogICAgICAgIGVsc2UgaWYg KCpfX2ZpcnN0MiA8ICpfX2ZpcnN0MSkKICAgICAgICAgICsrX19maXJzdDI7CiAgICAgICAgZWxz ZSB7CiAgICAgICAgICAqX19yZXN1bHQgPSAqX19maXJzdDE7CiAgICAgICAgICArK19fZmlyc3Qx OwogICAgICAgICAgKytfX2ZpcnN0MjsKICAgICAgICAgICsrX19yZXN1bHQ7CiAgICAgICAgfQog ICAgICByZXR1cm4gX19yZXN1bHQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0 ZXIxLCB0eXBlbmFtZSBfSW5wdXRJdGVyMiwgdHlwZW5hbWUgX091dHB1dEl0ZXIsCiAgICAgICAg ICAgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBfT3V0cHV0SXRlcgogICAgc2V0X2ludGVyc2VjdGlv bihfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAg ICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsCiAgICAg ICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBfQ29tcGFyZSBfX2NvbXApCiAg ICB7CgogICAgIAogICAgIAogICAgIAoKCiAgICAgCgogICAgIAoKCgogICAgICB3aGlsZSAoX19m aXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKQogICAgICAgIGlmIChfX2Nv bXAoKl9fZmlyc3QxLCAqX19maXJzdDIpKQogICAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgICBl bHNlIGlmIChfX2NvbXAoKl9fZmlyc3QyLCAqX19maXJzdDEpKQogICAgICAgICAgKytfX2ZpcnN0 MjsKICAgICAgICBlbHNlIHsKICAgICAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsKICAgICAg ICAgICsrX19maXJzdDE7CiAgICAgICAgICArK19fZmlyc3QyOwogICAgICAgICAgKytfX3Jlc3Vs dDsKICAgICAgICB9CiAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgIH0KCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0lucHV0SXRlcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXIyLCB0eXBlbmFtZSBfT3V0cHV0 SXRlcj4KICAgIF9PdXRwdXRJdGVyCiAgICBzZXRfZGlmZmVyZW5jZShfSW5wdXRJdGVyMSBfX2Zp cnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIy IF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAgX091dHB1 dEl0ZXIgX19yZXN1bHQpCiAgICB7CgogICAgIAogICAgIAogICAgIAoKICAgICAKCgogICAgIAoK CiAgICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIp CiAgICAgICAgaWYgKCpfX2ZpcnN0MSA8ICpfX2ZpcnN0MikgewogICAgICAgICAgKl9fcmVzdWx0 ID0gKl9fZmlyc3QxOwogICAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgICAgICsrX19yZXN1bHQ7 CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYgKCpfX2ZpcnN0MiA8ICpfX2ZpcnN0MSkKICAgICAg ICAgICsrX19maXJzdDI7CiAgICAgICAgZWxzZSB7CiAgICAgICAgICArK19fZmlyc3QxOwogICAg ICAgICAgKytfX2ZpcnN0MjsKICAgICAgICB9CiAgICAgIHJldHVybiBjb3B5KF9fZmlyc3QxLCBf X2xhc3QxLCBfX3Jlc3VsdCk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIx LCB0eXBlbmFtZSBfSW5wdXRJdGVyMiwgdHlwZW5hbWUgX091dHB1dEl0ZXIsCiAgICAgICAgICAg dHlwZW5hbWUgX0NvbXBhcmU+CiAgICBfT3V0cHV0SXRlcgogICAgc2V0X2RpZmZlcmVuY2UoX0lu cHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAg ICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAgICAgICAg ICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBfQ29tcGFyZSBfX2NvbXApCiAgICB7CgogICAg IAogICAgIAogICAgIAoKCiAgICAgCgogICAgIAoKCgogICAgICB3aGlsZSAoX19maXJzdDEgIT0g X19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKQogICAgICAgIGlmIChfX2NvbXAoKl9fZmly c3QxLCAqX19maXJzdDIpKSB7CiAgICAgICAgICAqX19yZXN1bHQgPSAqX19maXJzdDE7CiAgICAg ICAgICArK19fZmlyc3QxOwogICAgICAgICAgKytfX3Jlc3VsdDsKICAgICAgICB9CiAgICAgICAg ZWxzZSBpZiAoX19jb21wKCpfX2ZpcnN0MiwgKl9fZmlyc3QxKSkKICAgICAgICAgICsrX19maXJz dDI7CiAgICAgICAgZWxzZSB7CiAgICAgICAgICArK19fZmlyc3QxOwogICAgICAgICAgKytfX2Zp cnN0MjsKICAgICAgICB9CiAgICAgIHJldHVybiBjb3B5KF9fZmlyc3QxLCBfX2xhc3QxLCBfX3Jl c3VsdCk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBf SW5wdXRJdGVyMiwgdHlwZW5hbWUgX091dHB1dEl0ZXI+CiAgICBfT3V0cHV0SXRlcgogICAgc2V0 X3N5bW1ldHJpY19kaWZmZXJlbmNlKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBf X2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3Qy LCBfSW5wdXRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRw dXRJdGVyIF9fcmVzdWx0KQogICAgewoKICAgICAKICAgICAKICAgICAKCiAgICAgCgoKICAgICAK CgogICAgICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3Qy KQogICAgICAgIGlmICgqX19maXJzdDEgPCAqX19maXJzdDIpIHsKICAgICAgICAgICpfX3Jlc3Vs dCA9ICpfX2ZpcnN0MTsKICAgICAgICAgICsrX19maXJzdDE7CiAgICAgICAgICArK19fcmVzdWx0 OwogICAgICAgIH0KICAgICAgICBlbHNlIGlmICgqX19maXJzdDIgPCAqX19maXJzdDEpIHsKICAg ICAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MjsKICAgICAgICAgICsrX19maXJzdDI7CiAgICAg ICAgICArK19fcmVzdWx0OwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICsrX19m aXJzdDE7CiAgICAgICAgICArK19fZmlyc3QyOwogICAgICAgIH0KICAgICAgcmV0dXJuIGNvcHko X19maXJzdDIsIF9fbGFzdDIsIGNvcHkoX19maXJzdDEsIF9fbGFzdDEsIF9fcmVzdWx0KSk7CiAg ICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJdGVy MiwgdHlwZW5hbWUgX091dHB1dEl0ZXIsCiAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmU+CiAg ICBfT3V0cHV0SXRlcgogICAgc2V0X3N5bW1ldHJpY19kaWZmZXJlbmNlKF9JbnB1dEl0ZXIxIF9f Zmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg IF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKICAgIHsKCiAgICAgCiAgICAgCiAgICAgCgoKICAg ICAKCiAgICAgCgoKCiAgICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3Qy ICE9IF9fbGFzdDIpCiAgICAgICAgaWYgKF9fY29tcCgqX19maXJzdDEsICpfX2ZpcnN0MikpIHsK ICAgICAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsKICAgICAgICAgICsrX19maXJzdDE7CiAg ICAgICAgICArK19fcmVzdWx0OwogICAgICAgIH0KICAgICAgICBlbHNlIGlmIChfX2NvbXAoKl9f Zmlyc3QyLCAqX19maXJzdDEpKSB7CiAgICAgICAgICAqX19yZXN1bHQgPSAqX19maXJzdDI7CiAg ICAgICAgICArK19fZmlyc3QyOwogICAgICAgICAgKytfX3Jlc3VsdDsKICAgICAgICB9CiAgICAg ICAgZWxzZSB7CiAgICAgICAgICArK19fZmlyc3QxOwogICAgICAgICAgKytfX2ZpcnN0MjsKICAg ICAgICB9CiAgICAgIHJldHVybiBjb3B5KF9fZmlyc3QyLCBfX2xhc3QyLCBjb3B5KF9fZmlyc3Qx LCBfX2xhc3QxLCBfX3Jlc3VsdCkpOwogICAgfQoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9y d2FyZEl0ZXI+CiAgICBfRm9yd2FyZEl0ZXIKICAgIG1heF9lbGVtZW50KF9Gb3J3YXJkSXRlciBf X2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0KQogICAgewoKICAgICAKICAgICAKCgogICAgICBp ZiAoX19maXJzdCA9PSBfX2xhc3QpIHJldHVybiBfX2ZpcnN0OwogICAgICBfRm9yd2FyZEl0ZXIg X19yZXN1bHQgPSBfX2ZpcnN0OwogICAgICB3aGlsZSAoKytfX2ZpcnN0ICE9IF9fbGFzdCkKICAg ICAgICBpZiAoKl9fcmVzdWx0IDwgKl9fZmlyc3QpCiAgICAgICAgICBfX3Jlc3VsdCA9IF9fZmly c3Q7CiAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0Zv cndhcmRJdGVyLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIF9Gb3J3YXJkSXRlcgogICAgbWF4X2Vs ZW1lbnQoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAg ICAgICAgICBfQ29tcGFyZSBfX2NvbXApCiAgICB7CgogICAgIAogICAgIAoKCgogICAgICBpZiAo X19maXJzdCA9PSBfX2xhc3QpIHJldHVybiBfX2ZpcnN0OwogICAgICBfRm9yd2FyZEl0ZXIgX19y ZXN1bHQgPSBfX2ZpcnN0OwogICAgICB3aGlsZSAoKytfX2ZpcnN0ICE9IF9fbGFzdCkKICAgICAg ICBpZiAoX19jb21wKCpfX3Jlc3VsdCwgKl9fZmlyc3QpKSBfX3Jlc3VsdCA9IF9fZmlyc3Q7CiAg ICAgIHJldHVybiBfX3Jlc3VsdDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJ dGVyPgogICAgX0ZvcndhcmRJdGVyCiAgICBtaW5fZWxlbWVudChfRm9yd2FyZEl0ZXIgX19maXJz dCwgX0ZvcndhcmRJdGVyIF9fbGFzdCkKICAgIHsKCiAgICAgCiAgICAgCgoKICAgICAgaWYgKF9f Zmlyc3QgPT0gX19sYXN0KSByZXR1cm4gX19maXJzdDsKICAgICAgX0ZvcndhcmRJdGVyIF9fcmVz dWx0ID0gX19maXJzdDsKICAgICAgd2hpbGUgKCsrX19maXJzdCAhPSBfX2xhc3QpCiAgICAgICAg aWYgKCpfX2ZpcnN0IDwgKl9fcmVzdWx0KQogICAgICAgICAgX19yZXN1bHQgPSBfX2ZpcnN0Owog ICAgICByZXR1cm4gX19yZXN1bHQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJk SXRlciwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBfRm9yd2FyZEl0ZXIKICAgIG1pbl9lbGVtZW50 KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAg ICAgX0NvbXBhcmUgX19jb21wKQogICAgewoKICAgICAKICAgICAKCgoKICAgICAgaWYgKF9fZmly c3QgPT0gX19sYXN0KSByZXR1cm4gX19maXJzdDsKICAgICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0 ID0gX19maXJzdDsKICAgICAgd2hpbGUgKCsrX19maXJzdCAhPSBfX2xhc3QpCiAgICAgICAgaWYg KF9fY29tcCgqX19maXJzdCwgKl9fcmVzdWx0KSkKICAgICAgICAgIF9fcmVzdWx0ID0gX19maXJz dDsKICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAgfQoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf QmlkaXJlY3Rpb25hbEl0ZXI+CiAgICBib29sCiAgICBuZXh0X3Blcm11dGF0aW9uKF9CaWRpcmVj dGlvbmFsSXRlciBfX2ZpcnN0LCBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0KQogICAgewoKICAg ICAKICAgICAKCgogICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpCiAgICAgICAgcmV0dXJuIGZh bHNlOwogICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19pID0gX19maXJzdDsKICAgICAgKytfX2k7 CiAgICAgIGlmIChfX2kgPT0gX19sYXN0KQogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgX19p ID0gX19sYXN0OwogICAgICAtLV9faTsKCiAgICAgIGZvcig7OykgewogICAgICAgIF9CaWRpcmVj dGlvbmFsSXRlciBfX2lpID0gX19pOwogICAgICAgIC0tX19pOwogICAgICAgIGlmICgqX19pIDwg Kl9faWkpIHsKICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2ogPSBfX2xhc3Q7CiAgICAg ICAgICB3aGlsZSAoISgqX19pIDwgKi0tX19qKSkKICAgICAgICAgICAge30KICAgICAgICAgIGl0 ZXJfc3dhcChfX2ksIF9faik7CiAgICAgICAgICByZXZlcnNlKF9faWksIF9fbGFzdCk7CiAgICAg ICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CiAgICAgICAgaWYgKF9faSA9PSBfX2ZpcnN0KSB7 CiAgICAgICAgICByZXZlcnNlKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgICAgICByZXR1cm4gZmFs c2U7CiAgICAgICAgfQogICAgICB9CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVj dGlvbmFsSXRlciwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBib29sCiAgICBuZXh0X3Blcm11dGF0 aW9uKF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LCBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0 LAogICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCiAgICB7CgogICAgIAogICAg IAoKCgogICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpCiAgICAgICAgcmV0dXJuIGZhbHNlOwog ICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19pID0gX19maXJzdDsKICAgICAgKytfX2k7CiAgICAg IGlmIChfX2kgPT0gX19sYXN0KQogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgX19pID0gX19s YXN0OwogICAgICAtLV9faTsKCiAgICAgIGZvcig7OykgewogICAgICAgIF9CaWRpcmVjdGlvbmFs SXRlciBfX2lpID0gX19pOwogICAgICAgIC0tX19pOwogICAgICAgIGlmIChfX2NvbXAoKl9faSwg Kl9faWkpKSB7CiAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19qID0gX19sYXN0OwogICAg ICAgICAgd2hpbGUgKCFfX2NvbXAoKl9faSwgKi0tX19qKSkKICAgICAgICAgICAge30KICAgICAg ICAgIGl0ZXJfc3dhcChfX2ksIF9faik7CiAgICAgICAgICByZXZlcnNlKF9faWksIF9fbGFzdCk7 CiAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CiAgICAgICAgaWYgKF9faSA9PSBfX2Zp cnN0KSB7CiAgICAgICAgICByZXZlcnNlKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgICAgICByZXR1 cm4gZmFsc2U7CiAgICAgICAgfQogICAgICB9CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9C aWRpcmVjdGlvbmFsSXRlcj4KICAgIGJvb2wKICAgIHByZXZfcGVybXV0YXRpb24oX0JpZGlyZWN0 aW9uYWxJdGVyIF9fZmlyc3QsIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QpCiAgICB7CgogICAg IAogICAgIAoKCiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkKICAgICAgICByZXR1cm4gZmFs c2U7CiAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2kgPSBfX2ZpcnN0OwogICAgICArK19faTsK ICAgICAgaWYgKF9faSA9PSBfX2xhc3QpCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICBfX2kg PSBfX2xhc3Q7CiAgICAgIC0tX19pOwoKICAgICAgZm9yKDs7KSB7CiAgICAgICAgX0JpZGlyZWN0 aW9uYWxJdGVyIF9faWkgPSBfX2k7CiAgICAgICAgLS1fX2k7CiAgICAgICAgaWYgKCpfX2lpIDwg Kl9faSkgewogICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9faiA9IF9fbGFzdDsKICAgICAg ICAgIHdoaWxlICghKCotLV9faiA8ICpfX2kpKQogICAgICAgICAgICB7fQogICAgICAgICAgaXRl cl9zd2FwKF9faSwgX19qKTsKICAgICAgICAgIHJldmVyc2UoX19paSwgX19sYXN0KTsKICAgICAg ICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KICAgICAgICBpZiAoX19pID09IF9fZmlyc3QpIHsK ICAgICAgICAgIHJldmVyc2UoX19maXJzdCwgX19sYXN0KTsKICAgICAgICAgIHJldHVybiBmYWxz ZTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0 aW9uYWxJdGVyLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIGJvb2wKICAgIHByZXZfcGVybXV0YXRp b24oX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3Qs CiAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKICAgIHsKCiAgICAgCiAgICAg CgoKCiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkKICAgICAgICByZXR1cm4gZmFsc2U7CiAg ICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2kgPSBfX2ZpcnN0OwogICAgICArK19faTsKICAgICAg aWYgKF9faSA9PSBfX2xhc3QpCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICBfX2kgPSBfX2xh c3Q7CiAgICAgIC0tX19pOwoKICAgICAgZm9yKDs7KSB7CiAgICAgICAgX0JpZGlyZWN0aW9uYWxJ dGVyIF9faWkgPSBfX2k7CiAgICAgICAgLS1fX2k7CiAgICAgICAgaWYgKF9fY29tcCgqX19paSwg Kl9faSkpIHsKICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2ogPSBfX2xhc3Q7CiAgICAg ICAgICB3aGlsZSAoIV9fY29tcCgqLS1fX2osICpfX2kpKQogICAgICAgICAgICB7fQogICAgICAg ICAgaXRlcl9zd2FwKF9faSwgX19qKTsKICAgICAgICAgIHJldmVyc2UoX19paSwgX19sYXN0KTsK ICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KICAgICAgICBpZiAoX19pID09IF9fZmly c3QpIHsKICAgICAgICAgIHJldmVyc2UoX19maXJzdCwgX19sYXN0KTsKICAgICAgICAgIHJldHVy biBmYWxzZTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf SW5wdXRJdGVyLCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXI+CiAgICBfSW5wdXRJdGVyCiAgICBmaW5k X2ZpcnN0X29mKF9JbnB1dEl0ZXIgX19maXJzdDEsIF9JbnB1dEl0ZXIgX19sYXN0MSwKICAgICAg ICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fZmlyc3QyLCBfRm9yd2FyZEl0ZXIgX19sYXN0MikK ICAgIHsKCiAgICAgCiAgICAgCiAgICAgCgoKCiAgICAgIGZvciAoIDsgX19maXJzdDEgIT0gX19s YXN0MTsgKytfX2ZpcnN0MSkKICAgICAgICBmb3IgKF9Gb3J3YXJkSXRlciBfX2l0ZXIgPSBfX2Zp cnN0MjsgX19pdGVyICE9IF9fbGFzdDI7ICsrX19pdGVyKQogICAgICAgICAgaWYgKCpfX2ZpcnN0 MSA9PSAqX19pdGVyKQogICAgICAgICAgICByZXR1cm4gX19maXJzdDE7CiAgICAgIHJldHVybiBf X2xhc3QxOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBf Rm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9CaW5hcnlQcmVkaWNhdGU+CiAgICBfSW5wdXRJdGVyCiAg ICBmaW5kX2ZpcnN0X29mKF9JbnB1dEl0ZXIgX19maXJzdDEsIF9JbnB1dEl0ZXIgX19sYXN0MSwK ICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fZmlyc3QyLCBfRm9yd2FyZEl0ZXIgX19s YXN0MiwKICAgICAgICAgICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2NvbXApCiAgICB7Cgog ICAgIAogICAgIAogICAgIAoKCiAgICAgCgoKCiAgICAgIGZvciAoIDsgX19maXJzdDEgIT0gX19s YXN0MTsgKytfX2ZpcnN0MSkKICAgICAgICBmb3IgKF9Gb3J3YXJkSXRlciBfX2l0ZXIgPSBfX2Zp cnN0MjsgX19pdGVyICE9IF9fbGFzdDI7ICsrX19pdGVyKQogICAgICAgICAgaWYgKF9fY29tcCgq X19maXJzdDEsICpfX2l0ZXIpKQogICAgICAgICAgICByZXR1cm4gX19maXJzdDE7CiAgICAgIHJl dHVybiBfX2xhc3QxOwogICAgfQojIDQyMDEgIi9ob21lL0FkbWluaXN0cmF0b3IvZ2NjdGVzdGlu Zy9saWIvZ2NjLWxpYi9pNjg2LXBjLWN5Z3dpbi8zLjQvaW5jbHVkZS9jKysvYml0cy9zdGxfYWxn by5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyMSwgdHlwZW5hbWUgX0Zvcndh cmRJdGVyMj4KICAgIF9Gb3J3YXJkSXRlcjEKICAgIF9fZmluZF9lbmQoX0ZvcndhcmRJdGVyMSBf X2ZpcnN0MSwgX0ZvcndhcmRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICBfRm9yd2FyZEl0 ZXIyIF9fZmlyc3QyLCBfRm9yd2FyZEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgIGZvcndh cmRfaXRlcmF0b3JfdGFnLCBmb3J3YXJkX2l0ZXJhdG9yX3RhZykKICAgIHsKICAgICAgaWYgKF9f Zmlyc3QyID09IF9fbGFzdDIpCiAgICAgICAgcmV0dXJuIF9fbGFzdDE7CiAgICAgIGVsc2Ugewog ICAgICAgIF9Gb3J3YXJkSXRlcjEgX19yZXN1bHQgPSBfX2xhc3QxOwogICAgICAgIHdoaWxlICgx KSB7CiAgICAgICAgICBfRm9yd2FyZEl0ZXIxIF9fbmV3X3Jlc3VsdAogICAgICAgICAgICA9IHNl YXJjaChfX2ZpcnN0MSwgX19sYXN0MSwgX19maXJzdDIsIF9fbGFzdDIpOwogICAgICAgICAgaWYg KF9fbmV3X3Jlc3VsdCA9PSBfX2xhc3QxKQogICAgICAgICAgICByZXR1cm4gX19yZXN1bHQ7CiAg ICAgICAgICBlbHNlIHsKICAgICAgICAgICAgX19yZXN1bHQgPSBfX25ld19yZXN1bHQ7CiAgICAg ICAgICAgIF9fZmlyc3QxID0gX19uZXdfcmVzdWx0OwogICAgICAgICAgICArK19fZmlyc3QxOwog ICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf Rm9yd2FyZEl0ZXIxLCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXIyLAogICAgICAgICAgIHR5cGVuYW1l IF9CaW5hcnlQcmVkaWNhdGU+CiAgICBfRm9yd2FyZEl0ZXIxCiAgICBfX2ZpbmRfZW5kKF9Gb3J3 YXJkSXRlcjEgX19maXJzdDEsIF9Gb3J3YXJkSXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAg X0ZvcndhcmRJdGVyMiBfX2ZpcnN0MiwgX0ZvcndhcmRJdGVyMiBfX2xhc3QyLAogICAgICAgICAg ICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZywgZm9yd2FyZF9pdGVyYXRvcl90YWcsCiAgICAgICAg ICAgICAgIF9CaW5hcnlQcmVkaWNhdGUgX19jb21wKQogICAgewogICAgICBpZiAoX19maXJzdDIg PT0gX19sYXN0MikKICAgICAgICByZXR1cm4gX19sYXN0MTsKICAgICAgZWxzZSB7CiAgICAgICAg X0ZvcndhcmRJdGVyMSBfX3Jlc3VsdCA9IF9fbGFzdDE7CiAgICAgICAgd2hpbGUgKDEpIHsKICAg ICAgICAgIF9Gb3J3YXJkSXRlcjEgX19uZXdfcmVzdWx0CiAgICAgICAgICAgID0gc2VhcmNoKF9f Zmlyc3QxLCBfX2xhc3QxLCBfX2ZpcnN0MiwgX19sYXN0MiwgX19jb21wKTsKICAgICAgICAgIGlm IChfX25ld19yZXN1bHQgPT0gX19sYXN0MSkKICAgICAgICAgICAgcmV0dXJuIF9fcmVzdWx0Owog ICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIF9fcmVzdWx0ID0gX19uZXdfcmVzdWx0OwogICAg ICAgICAgICBfX2ZpcnN0MSA9IF9fbmV3X3Jlc3VsdDsKICAgICAgICAgICAgKytfX2ZpcnN0MTsK ICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1l IF9CaWRpcmVjdGlvbmFsSXRlcjEsIHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcjI+CiAgICBf QmlkaXJlY3Rpb25hbEl0ZXIxCiAgICBfX2ZpbmRfZW5kKF9CaWRpcmVjdGlvbmFsSXRlcjEgX19m aXJzdDEsIF9CaWRpcmVjdGlvbmFsSXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgX0JpZGly ZWN0aW9uYWxJdGVyMiBfX2ZpcnN0MiwgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX2xhc3QyLAogICAg ICAgICAgICAgICBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZywgYmlkaXJlY3Rpb25hbF9pdGVy YXRvcl90YWcpCiAgICB7CgogICAgIAogICAgIAoKICAgICAgdHlwZWRlZiByZXZlcnNlX2l0ZXJh dG9yPF9CaWRpcmVjdGlvbmFsSXRlcjE+IF9SZXZJdGVyMTsKICAgICAgdHlwZWRlZiByZXZlcnNl X2l0ZXJhdG9yPF9CaWRpcmVjdGlvbmFsSXRlcjI+IF9SZXZJdGVyMjsKCiAgICAgIF9SZXZJdGVy MSBfX3JsYXN0MShfX2ZpcnN0MSk7CiAgICAgIF9SZXZJdGVyMiBfX3JsYXN0MihfX2ZpcnN0Mik7 CiAgICAgIF9SZXZJdGVyMSBfX3JyZXN1bHQgPSBzZWFyY2goX1Jldkl0ZXIxKF9fbGFzdDEpLCBf X3JsYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmV2SXRlcjIoX19s YXN0MiksIF9fcmxhc3QyKTsKCiAgICAgIGlmIChfX3JyZXN1bHQgPT0gX19ybGFzdDEpCiAgICAg ICAgcmV0dXJuIF9fbGFzdDE7CiAgICAgIGVsc2UgewogICAgICAgIF9CaWRpcmVjdGlvbmFsSXRl cjEgX19yZXN1bHQgPSBfX3JyZXN1bHQuYmFzZSgpOwogICAgICAgIGFkdmFuY2UoX19yZXN1bHQs IC1zdGQ6OmRpc3RhbmNlKF9fZmlyc3QyLCBfX2xhc3QyKSk7CiAgICAgICAgcmV0dXJuIF9fcmVz dWx0OwogICAgICB9CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRl cjEsIHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcjIsCiAgICAgICAgICAgdHlwZW5hbWUgX0Jp bmFyeVByZWRpY2F0ZT4KICAgIF9CaWRpcmVjdGlvbmFsSXRlcjEKICAgIF9fZmluZF9lbmQoX0Jp ZGlyZWN0aW9uYWxJdGVyMSBfX2ZpcnN0MSwgX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2xhc3QxLAog ICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fZmlyc3QyLCBfQmlkaXJlY3Rpb25h bEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFn LCBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZywKICAgICAgICAgICAgICAgX0JpbmFyeVByZWRp Y2F0ZSBfX2NvbXApCiAgICB7CgogICAgIAogICAgIAoKICAgICAgdHlwZWRlZiByZXZlcnNlX2l0 ZXJhdG9yPF9CaWRpcmVjdGlvbmFsSXRlcjE+IF9SZXZJdGVyMTsKICAgICAgdHlwZWRlZiByZXZl cnNlX2l0ZXJhdG9yPF9CaWRpcmVjdGlvbmFsSXRlcjI+IF9SZXZJdGVyMjsKCiAgICAgIF9SZXZJ dGVyMSBfX3JsYXN0MShfX2ZpcnN0MSk7CiAgICAgIF9SZXZJdGVyMiBfX3JsYXN0MihfX2ZpcnN0 Mik7CiAgICAgIF9SZXZJdGVyMSBfX3JyZXN1bHQgPSBzZWFyY2goX1Jldkl0ZXIxKF9fbGFzdDEp LCBfX3JsYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmV2SXRlcjIo X19sYXN0MiksIF9fcmxhc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9f Y29tcCk7CgogICAgICBpZiAoX19ycmVzdWx0ID09IF9fcmxhc3QxKQogICAgICAgIHJldHVybiBf X2xhc3QxOwogICAgICBlbHNlIHsKICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fcmVzdWx0 ID0gX19ycmVzdWx0LmJhc2UoKTsKICAgICAgICBhZHZhbmNlKF9fcmVzdWx0LCAtc3RkOjpkaXN0 YW5jZShfX2ZpcnN0MiwgX19sYXN0MikpOwogICAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgICAg fQogICAgfQoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcjEsIHR5cGVuYW1lIF9G b3J3YXJkSXRlcjI+CiAgICBpbmxpbmUgX0ZvcndhcmRJdGVyMQogICAgZmluZF9lbmQoX0Zvcndh cmRJdGVyMSBfX2ZpcnN0MSwgX0ZvcndhcmRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgX0Zv cndhcmRJdGVyMiBfX2ZpcnN0MiwgX0ZvcndhcmRJdGVyMiBfX2xhc3QyKQogICAgewoKICAgICAK ICAgICAKICAgICAKCgoKICAgICAgcmV0dXJuIF9fZmluZF9lbmQoX19maXJzdDEsIF9fbGFzdDEs IF9fZmlyc3QyLCBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAgICAgICBfX2l0ZXJhdG9yX2Nh dGVnb3J5KF9fZmlyc3QxKSwKICAgICAgICAgICAgICAgICAgICAgICAgX19pdGVyYXRvcl9jYXRl Z29yeShfX2ZpcnN0MikpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIx LCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXIyLAogICAgICAgICAgIHR5cGVuYW1lIF9CaW5hcnlQcmVk aWNhdGU+CiAgICBpbmxpbmUgX0ZvcndhcmRJdGVyMQogICAgZmluZF9lbmQoX0ZvcndhcmRJdGVy MSBfX2ZpcnN0MSwgX0ZvcndhcmRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgX0ZvcndhcmRJ dGVyMiBfX2ZpcnN0MiwgX0ZvcndhcmRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgX0JpbmFy eVByZWRpY2F0ZSBfX2NvbXApCiAgICB7CgogICAgIAogICAgIAogICAgIAoKCgogICAgICByZXR1 cm4gX19maW5kX2VuZChfX2ZpcnN0MSwgX19sYXN0MSwgX19maXJzdDIsIF9fbGFzdDIsCiAgICAg ICAgICAgICAgICAgICAgICAgIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdDEpLAogICAgICAg ICAgICAgICAgICAgICAgICBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QyKSwKICAgICAgICAg ICAgICAgICAgICAgICAgX19jb21wKTsKICAgIH0KCn0KIyA3MCAiL2hvbWUvQWRtaW5pc3RyYXRv ci9nY2N0ZXN0aW5nL2xpYi9nY2MtbGliL2k2ODYtcGMtY3lnd2luLzMuNC9pbmNsdWRlL2MrKy9h bGdvcml0aG0iIDIgMwojIDU3ICIvaG9tZS9BZG1pbmlzdHJhdG9yL2djY3Rlc3RpbmcvbGliL2dj Yy1saWIvaTY4Ni1wYy1jeWd3aW4vMy40L2luY2x1ZGUvYysrL3N0cmluZyIgMiAzCiMgMSAiL2hv bWUvQWRtaW5pc3RyYXRvci9nY2N0ZXN0aW5nL2xpYi9nY2MtbGliL2k2ODYtcGMtY3lnd2luLzMu NC9pbmNsdWRlL2MrKy9iaXRzL2Jhc2ljX3N0cmluZy50Y2MiIDEgMwojIDQ1ICIvaG9tZS9BZG1p bmlzdHJhdG9yL2djY3Rlc3RpbmcvbGliL2djYy1saWIvaTY4Ni1wYy1jeWd3aW4vMy40L2luY2x1 ZGUvYysrL2JpdHMvYmFzaWNfc3RyaW5nLnRjYyIgMwoKbmFtZXNwYWNlIHN0ZAp7CiAgdGVtcGxh dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAg ICBjb25zdCB0eXBlbmFtZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+Ojpz aXplX3R5cGUKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAg X1JlcDo6X1NfbWF4X3NpemUgPSAoKChucG9zIC0gc2l6ZW9mKF9SZXApKS9zaXplb2YoX0NoYXJU KSkgLSAxKSAvIDQ7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0 cywgdHlwZW5hbWUgX0FsbG9jPgogICAgY29uc3QgX0NoYXJUCiAgICBiYXNpY19zdHJpbmc8X0No YXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIF9SZXA6Ol9TX3Rlcm1pbmFsID0gX0NoYXJUKCk7 CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUg X0FsbG9jPgogICAgY29uc3QgdHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywg X0FsbG9jPjo6c2l6ZV90eXBlCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxs b2M+OjpucG9zOwoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0 cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1Ry YWl0cywgX0FsbG9jPjo6c2l6ZV90eXBlCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRz LCBfQWxsb2M+OjpfU19lbXB0eV9yZXBfc3RvcmFnZVsKICAgIChzaXplb2YoX1JlcCkgKyBzaXpl b2YoX0NoYXJUKSArIHNpemVvZihzaXplX3R5cGUpIC0gMSkvc2l6ZW9mKHNpemVfdHlwZSldOwoK CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFt ZSBfQWxsb2M+CiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5JdGVyPgogICAgICBfQ2hhclQqCiAg ICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgICBfU19jb25z dHJ1Y3QoX0luSXRlciBfX2JlZywgX0luSXRlciBfX2VuZCwgY29uc3QgX0FsbG9jJiBfX2EsCiAg ICAgICAgICAgICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcpCiAgICAgIHsKICAgICAgICBpZiAo X19iZWcgPT0gX19lbmQgJiYgX19hID09IF9BbGxvYygpKQogICAgICAgICAgcmV0dXJuIF9TX2Vt cHR5X3JlcCgpLl9NX3JlZmNvcHkoKTsKCiAgICAgICAgX0NoYXJUIF9fYnVmWzEwMF07CiAgICAg ICAgc2l6ZV90eXBlIF9faSA9IDA7CiAgICAgICAgd2hpbGUgKF9fYmVnICE9IF9fZW5kICYmIF9f aSA8IHNpemVvZihfX2J1ZikgLyBzaXplb2YoX0NoYXJUKSkKICAgICAgICAgIHsKICAgICAgICAg ICAgX19idWZbX19pKytdID0gKl9fYmVnOwogICAgICAgICAgICArK19fYmVnOwogICAgICAgICAg fQogICAgICAgIF9SZXAqIF9fciA9IF9SZXA6Ol9TX2NyZWF0ZShfX2ksIF9fYSk7CiAgICAgICAg dHJhaXRzX3R5cGU6OmNvcHkoX19yLT5fTV9yZWZkYXRhKCksIF9fYnVmLCBfX2kpOwogICAgICAg IF9fci0+X01fbGVuZ3RoID0gX19pOwogICAgICAgIHRyeQogICAgICAgICAgewoKCgogICAgICAg ICAgICBmb3IgKDs7KQogICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIF9DaGFyVCogX19w ID0gX19yLT5fTV9yZWZkYXRhKCkgKyBfX3ItPl9NX2xlbmd0aDsKICAgICAgICAgICAgICAgIF9D aGFyVCogX19sYXN0ID0gX19yLT5fTV9yZWZkYXRhKCkgKyBfX3ItPl9NX2NhcGFjaXR5OwogICAg ICAgICAgICAgICAgZm9yICg7OykKICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAg ICAgIGlmIChfX2JlZyA9PSBfX2VuZCkKICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAg ICAgICAgICAgICAgICAgX19yLT5fTV9sZW5ndGggPSBfX3AgLSBfX3ItPl9NX3JlZmRhdGEoKTsK ICAgICAgICAgICAgICAgICAgICAgICAgKl9fcCA9IF9SZXA6Ol9TX3Rlcm1pbmFsOwogICAgICAg ICAgICAgICAgICAgICAgICByZXR1cm4gX19yLT5fTV9yZWZkYXRhKCk7CiAgICAgICAgICAgICAg ICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgaWYgKF9fcCA9PSBfX2xhc3QpCiAgICAgICAg ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAqX19wKysgPSAqX19iZWc7 CiAgICAgICAgICAgICAgICAgICAgKytfX2JlZzsKICAgICAgICAgICAgICAgICAgfQoKICAgICAg ICAgICAgICAgIHNpemVfdHlwZSBfX2xlbiA9IF9fcCAtIF9fci0+X01fcmVmZGF0YSgpOwogICAg ICAgICAgICAgICAgX1JlcCogX19hbm90aGVyID0gX1JlcDo6X1NfY3JlYXRlKF9fbGVuICsgMSwg X19hKTsKICAgICAgICAgICAgICAgIHRyYWl0c190eXBlOjpjb3B5KF9fYW5vdGhlci0+X01fcmVm ZGF0YSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19yLT5fTV9yZWZkYXRh KCksIF9fbGVuKTsKICAgICAgICAgICAgICAgIF9fci0+X01fZGVzdHJveShfX2EpOwogICAgICAg ICAgICAgICAgX19yID0gX19hbm90aGVyOwogICAgICAgICAgICAgICAgX19yLT5fTV9sZW5ndGgg PSBfX2xlbjsKICAgICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgY2F0Y2goLi4uKQog ICAgICAgICAgewogICAgICAgICAgICBfX3ItPl9NX2Rlc3Ryb3koX19hKTsKICAgICAgICAgICAg dGhyb3c7CiAgICAgICAgICB9CiAgICAgICAgcmV0dXJuIDA7CiAgICAgIH0KCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0 ZW1wbGF0ZSA8Y2xhc3MgX0luSXRlcj4KICAgICAgX0NoYXJUKgogICAgICBiYXNpY19zdHJpbmc8 X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgICAgX1NfY29uc3RydWN0KF9Jbkl0ZXIgX19i ZWcsIF9Jbkl0ZXIgX19lbmQsIGNvbnN0IF9BbGxvYyYgX19hLAogICAgICAgICAgICAgICAgICAg Zm9yd2FyZF9pdGVyYXRvcl90YWcpCiAgICAgIHsKICAgICAgICBpZiAoX19iZWcgPT0gX19lbmQg JiYgX19hID09IF9BbGxvYygpKQogICAgICAgICAgcmV0dXJuIF9TX2VtcHR5X3JlcCgpLl9NX3Jl ZmNvcHkoKTsKCgogICAgICAgIGlmIChfX2J1aWx0aW5fZXhwZWN0KF9fYmVnID09IF9Jbkl0ZXIo KSwgMCkpCiAgICAgICAgICBfX3Rocm93X2xvZ2ljX2Vycm9yKCJhdHRlbXB0IHRvIGNyZWF0ZSBz dHJpbmcgd2l0aCBudWxsIHBvaW50ZXIiKTsKCiAgICAgICAgc2l6ZV90eXBlIF9fZG5ldyA9IHN0 YXRpY19jYXN0PHNpemVfdHlwZT4oc3RkOjpkaXN0YW5jZShfX2JlZywgX19lbmQpKTsKCgogICAg ICAgIF9SZXAqIF9fciA9IF9SZXA6Ol9TX2NyZWF0ZShfX2RuZXcsIF9fYSk7CiAgICAgICAgdHJ5 CiAgICAgICAgICB7IF9TX2NvcHlfY2hhcnMoX19yLT5fTV9yZWZkYXRhKCksIF9fYmVnLCBfX2Vu ZCk7IH0KICAgICAgICBjYXRjaCguLi4pCiAgICAgICAgICB7CiAgICAgICAgICAgIF9fci0+X01f ZGVzdHJveShfX2EpOwogICAgICAgICAgICB0aHJvdzsKICAgICAgICAgIH0KICAgICAgICBfX3It Pl9NX2xlbmd0aCA9IF9fZG5ldzsKCiAgICAgICAgX19yLT5fTV9yZWZkYXRhKClbX19kbmV3XSA9 IF9SZXA6Ol9TX3Rlcm1pbmFsOwogICAgICAgIHJldHVybiBfX3ItPl9NX3JlZmRhdGEoKTsKICAg ICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVu YW1lIF9BbGxvYz4KICAgIF9DaGFyVCoKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMs IF9BbGxvYz46OgogICAgX1NfY29uc3RydWN0KHNpemVfdHlwZSBfX24sIF9DaGFyVCBfX2MsIGNv bnN0IF9BbGxvYyYgX19hKQogICAgewogICAgICBpZiAoX19uID09IDAgJiYgX19hID09IF9BbGxv YygpKQogICAgICAgIHJldHVybiBfU19lbXB0eV9yZXAoKS5fTV9yZWZjb3B5KCk7CgoKICAgICAg X1JlcCogX19yID0gX1JlcDo6X1NfY3JlYXRlKF9fbiwgX19hKTsKICAgICAgdHJ5CiAgICAgICAg ewogICAgICAgICAgaWYgKF9fbikKICAgICAgICAgICAgdHJhaXRzX3R5cGU6OmFzc2lnbihfX3It Pl9NX3JlZmRhdGEoKSwgX19uLCBfX2MpOwogICAgICAgIH0KICAgICAgY2F0Y2goLi4uKQogICAg ICAgIHsKICAgICAgICAgIF9fci0+X01fZGVzdHJveShfX2EpOwogICAgICAgICAgdGhyb3c7CiAg ICAgICAgfQogICAgICBfX3ItPl9NX2xlbmd0aCA9IF9fbjsKICAgICAgX19yLT5fTV9yZWZkYXRh KClbX19uXSA9IF9SZXA6Ol9TX3Rlcm1pbmFsOwogICAgICByZXR1cm4gX19yLT5fTV9yZWZkYXRh KCk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywg dHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9j Pjo6CiAgICBiYXNpY19zdHJpbmcoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cikKICAgIDogX01f ZGF0YXBsdXMoX19zdHIuX01fcmVwKCktPl9NX2dyYWIoX0FsbG9jKCksIF9fc3RyLmdldF9hbGxv Y2F0b3IoKSksCiAgICAgICAgICAgICAgICAgX19zdHIuZ2V0X2FsbG9jYXRvcigpKQogICAgeyB9 CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUg X0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBi YXNpY19zdHJpbmcoY29uc3QgX0FsbG9jJiBfX2EpCiAgICA6IF9NX2RhdGFwbHVzKF9TX2NvbnN0 cnVjdChzaXplX3R5cGUoKSwgX0NoYXJUKCksIF9fYSksIF9fYSkKICAgIHsgfQoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAg IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgYmFzaWNfc3RyaW5n KGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsIHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9f bikKICAgIDogX01fZGF0YXBsdXMoX1NfY29uc3RydWN0KF9fc3RyLl9NX2NoZWNrKF9fcG9zKSwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fc3RyLl9NX2ZvbGQoX19wb3MsIF9fbiks IF9BbGxvYygpKSwgX0FsbG9jKCkpCiAgICB7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU LCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0No YXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGJhc2ljX3N0cmluZyhjb25zdCBiYXNpY19zdHJp bmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3MsCiAgICAgICAgICAgICAgICAgc2l6ZV90eXBlIF9f biwgY29uc3QgX0FsbG9jJiBfX2EpCiAgICA6IF9NX2RhdGFwbHVzKF9TX2NvbnN0cnVjdChfX3N0 ci5fTV9jaGVjayhfX3BvcyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3N0ci5f TV9mb2xkKF9fcG9zLCBfX24pLCBfX2EpLCBfX2EpCiAgICB7IH0KCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19z dHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGJhc2ljX3N0cmluZyhjb25zdCBf Q2hhclQqIF9fcywgc2l6ZV90eXBlIF9fbiwgY29uc3QgX0FsbG9jJiBfX2EpCiAgICA6IF9NX2Rh dGFwbHVzKF9TX2NvbnN0cnVjdChfX3MsIF9fcyArIF9fbiwgX19hKSwgX19hKQogICAgeyB9Cgog IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0Fs bG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBiYXNp Y19zdHJpbmcoY29uc3QgX0NoYXJUKiBfX3MsIGNvbnN0IF9BbGxvYyYgX19hKQogICAgOiBfTV9k YXRhcGx1cyhfU19jb25zdHJ1Y3QoX19zLCBfX3MgPyBfX3MgKyB0cmFpdHNfdHlwZTo6bGVuZ3Ro KF9fcykgOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zICsgbnBvcywgX19hKSwg X19hKQogICAgeyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0 cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0Fs bG9jPjo6CiAgICBiYXNpY19zdHJpbmcoc2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9fYywgY29uc3Qg X0FsbG9jJiBfX2EpCiAgICA6IF9NX2RhdGFwbHVzKF9TX2NvbnN0cnVjdChfX24sIF9fYywgX19h KSwgX19hKQogICAgeyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry YWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcj4K ICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgYmFzaWNfc3Ry aW5nKF9JbnB1dEl0ZXIgX19iZWcsIF9JbnB1dEl0ZXIgX19lbmQsIGNvbnN0IF9BbGxvYyYgX19h KQogICAgOiBfTV9kYXRhcGx1cyhfU19jb25zdHJ1Y3QoX19iZWcsIF9fZW5kLCBfX2EpLCBfX2Ep CiAgICB7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0 eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+ JgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6YXNzaWduKGNvbnN0 IGJhc2ljX3N0cmluZyYgX19zdHIpCiAgICB7CiAgICAgIGlmIChfTV9yZXAoKSAhPSBfX3N0ci5f TV9yZXAoKSkKICAgICAgICB7CgogICAgICAgICAgYWxsb2NhdG9yX3R5cGUgX19hID0gdGhpcy0+ Z2V0X2FsbG9jYXRvcigpOwogICAgICAgICAgX0NoYXJUKiBfX3RtcCA9IF9fc3RyLl9NX3JlcCgp LT5fTV9ncmFiKF9fYSwgX19zdHIuZ2V0X2FsbG9jYXRvcigpKTsKICAgICAgICAgIF9NX3JlcCgp LT5fTV9kaXNwb3NlKF9fYSk7CiAgICAgICAgICBfTV9kYXRhKF9fdG1wKTsKICAgICAgICB9CiAg ICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl bmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB2b2lkCiAgICBiYXNpY19zdHJpbmc8 X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpfUmVwOjoKICAgIF9NX2Rlc3Ryb3koY29uc3QgX0Fs bG9jJiBfX2EpIHRocm93ICgpCiAgICB7CiAgICAgIHNpemVfdHlwZSBfX3NpemUgPSBzaXplb2Yo X1JlcCkgKyAoX01fY2FwYWNpdHkgKyAxKSAqIHNpemVvZihfQ2hhclQpOwogICAgICBfUmF3X2J5 dGVzX2FsbG9jKF9fYSkuZGVhbGxvY2F0ZShyZWludGVycHJldF9jYXN0PGNoYXIqPih0aGlzKSwg X19zaXplKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh aXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB2b2lkCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBf VHJhaXRzLCBfQWxsb2M+OjpfTV9sZWFrX2hhcmQoKQogICAgewogICAgICBpZiAoX01fcmVwKCkt Pl9NX2lzX3NoYXJlZCgpKQogICAgICAgIF9NX211dGF0ZSgwLCAwLCAwKTsKICAgICAgX01fcmVw KCktPl9NX3NldF9sZWFrZWQoKTsKICAgIH0KCgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No YXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB2b2lkCiAgICBiYXNp Y19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIF9NX211dGF0ZShzaXplX3R5 cGUgX19wb3MsIHNpemVfdHlwZSBfX2xlbjEsIHNpemVfdHlwZSBfX2xlbjIpCiAgICB7CiAgICAg IHNpemVfdHlwZSBfX29sZF9zaXplID0gdGhpcy0+c2l6ZSgpOwogICAgICBjb25zdCBzaXplX3R5 cGUgX19uZXdfc2l6ZSA9IF9fb2xkX3NpemUgKyBfX2xlbjIgLSBfX2xlbjE7CiAgICAgIGNvbnN0 IF9DaGFyVCogX19zcmMgPSBfTV9kYXRhKCkgKyBfX3BvcyArIF9fbGVuMTsKICAgICAgY29uc3Qg c2l6ZV90eXBlIF9faG93X211Y2ggPSBfX29sZF9zaXplIC0gX19wb3MgLSBfX2xlbjE7CgogICAg ICBpZiAoX01fcmVwKCktPl9NX2lzX3NoYXJlZCgpIHx8IF9fbmV3X3NpemUgPiBjYXBhY2l0eSgp KQogICAgICAgIHsKCiAgICAgICAgICBhbGxvY2F0b3JfdHlwZSBfX2EgPSBnZXRfYWxsb2NhdG9y KCk7CgoKICAgICAgICAgIGNvbnN0IHNpemVfdHlwZSBfX3BhZ2VzaXplID0gNDA5NjsKICAgICAg ICAgIGNvbnN0IHNpemVfdHlwZSBfX21hbGxvY19oZWFkZXJfc2l6ZSA9IDQgKiBzaXplb2YgKHZv aWQqKTsKCiAgICAgICAgICBjb25zdCBzaXplX3R5cGUgX19wYWdlX2NhcGFjaXR5ID0gKF9fcGFn ZXNpemUgLSBfX21hbGxvY19oZWFkZXJfc2l6ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAtIHNpemVvZihfUmVwKSAtIHNpemVvZihfQ2hhclQpKQogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIHNpemVvZihfQ2hhclQpOwog ICAgICAgICAgX1JlcCogX19yOwogICAgICAgICAgaWYgKF9fbmV3X3NpemUgPiBjYXBhY2l0eSgp ICYmIF9fbmV3X3NpemUgPiBfX3BhZ2VfY2FwYWNpdHkpCgogICAgICAgICAgICBfX3IgPSBfUmVw OjpfU19jcmVhdGUoX19uZXdfc2l6ZSA+IDIqY2FwYWNpdHkoKSA/CiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBfX25ld19zaXplIDogMipjYXBhY2l0eSgpLCBfX2EpOwogICAgICAg ICAgZWxzZQogICAgICAgICAgICBfX3IgPSBfUmVwOjpfU19jcmVhdGUoX19uZXdfc2l6ZSwgX19h KTsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaWYgKF9fcG9zKQog ICAgICAgICAgICAgICAgdHJhaXRzX3R5cGU6OmNvcHkoX19yLT5fTV9yZWZkYXRhKCksIF9NX2Rh dGEoKSwgX19wb3MpOwogICAgICAgICAgICAgIGlmIChfX2hvd19tdWNoKQogICAgICAgICAgICAg ICAgdHJhaXRzX3R5cGU6OmNvcHkoX19yLT5fTV9yZWZkYXRhKCkgKyBfX3BvcyArIF9fbGVuMiwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fc3JjLCBfX2hvd19tdWNoKTsKICAg ICAgICAgICAgfQogICAgICAgICAgY2F0Y2goLi4uKQogICAgICAgICAgICB7CiAgICAgICAgICAg ICAgX19yLT5fTV9kaXNwb3NlKGdldF9hbGxvY2F0b3IoKSk7CiAgICAgICAgICAgICAgdGhyb3c7 CiAgICAgICAgICAgIH0KICAgICAgICAgIF9NX3JlcCgpLT5fTV9kaXNwb3NlKF9fYSk7CiAgICAg ICAgICBfTV9kYXRhKF9fci0+X01fcmVmZGF0YSgpKTsKICAgICAgfQogICAgICBlbHNlIGlmIChf X2hvd19tdWNoICYmIF9fbGVuMSAhPSBfX2xlbjIpCiAgICAgICAgewoKICAgICAgICAgIHRyYWl0 c190eXBlOjptb3ZlKF9NX2RhdGEoKSArIF9fcG9zICsgX19sZW4yLCBfX3NyYywgX19ob3dfbXVj aCk7CiAgICAgICAgfQogICAgICBfTV9yZXAoKS0+X01fc2V0X3NoYXJhYmxlKCk7CiAgICAgIF9N X3JlcCgpLT5fTV9sZW5ndGggPSBfX25ld19zaXplOwogICAgICBfTV9kYXRhKClbX19uZXdfc2l6 ZV0gPSBfUmVwOjpfU190ZXJtaW5hbDsKCiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy VCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdm9pZAogICAgYmFzaWNf c3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6cmVzZXJ2ZShzaXplX3R5cGUgX19yZXMp CiAgICB7CiAgICAgIGlmIChfX3JlcyA+IHRoaXMtPmNhcGFjaXR5KCkgfHwgX01fcmVwKCktPl9N X2lzX3NoYXJlZCgpKQogICAgICAgIHsKICAgICAgICAgIGlmIChfX3JlcyA+IHRoaXMtPm1heF9z aXplKCkpCiAgICAgICAgICAgIF9fdGhyb3dfbGVuZ3RoX2Vycm9yKCJiYXNpY19zdHJpbmc6OnJl c2VydmUiKTsKCiAgICAgICAgICBpZiAoX19yZXMgPCB0aGlzLT5zaXplKCkpCiAgICAgICAgICAg IF9fcmVzID0gdGhpcy0+c2l6ZSgpOwogICAgICAgICAgYWxsb2NhdG9yX3R5cGUgX19hID0gZ2V0 X2FsbG9jYXRvcigpOwogICAgICAgICAgX0NoYXJUKiBfX3RtcCA9IF9NX3JlcCgpLT5fTV9jbG9u ZShfX2EsIF9fcmVzIC0gdGhpcy0+c2l6ZSgpKTsKICAgICAgICAgIF9NX3JlcCgpLT5fTV9kaXNw b3NlKF9fYSk7CiAgICAgICAgICBfTV9kYXRhKF9fdG1wKTsKICAgICAgICB9CiAgICB9CgogIHRl bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9j PgogICAgdm9pZCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+Ojpzd2FwKGJh c2ljX3N0cmluZyYgX19zKQogICAgewogICAgICBpZiAoX01fcmVwKCktPl9NX2lzX2xlYWtlZCgp KQogICAgICAgIF9NX3JlcCgpLT5fTV9zZXRfc2hhcmFibGUoKTsKICAgICAgaWYgKF9fcy5fTV9y ZXAoKS0+X01faXNfbGVha2VkKCkpCiAgICAgICAgX19zLl9NX3JlcCgpLT5fTV9zZXRfc2hhcmFi bGUoKTsKICAgICAgaWYgKHRoaXMtPmdldF9hbGxvY2F0b3IoKSA9PSBfX3MuZ2V0X2FsbG9jYXRv cigpKQogICAgICAgIHsKICAgICAgICAgIF9DaGFyVCogX190bXAgPSBfTV9kYXRhKCk7CiAgICAg ICAgICBfTV9kYXRhKF9fcy5fTV9kYXRhKCkpOwogICAgICAgICAgX19zLl9NX2RhdGEoX190bXAp OwogICAgICAgIH0KCiAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICBiYXNpY19zdHJpbmcg X190bXAxKF9NX2liZWdpbigpLCBfTV9pZW5kKCksIF9fcy5nZXRfYWxsb2NhdG9yKCkpOwogICAg ICAgICAgYmFzaWNfc3RyaW5nIF9fdG1wMihfX3MuX01faWJlZ2luKCksIF9fcy5fTV9pZW5kKCks CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPmdldF9hbGxvY2F0b3IoKSk7CiAg ICAgICAgICAqdGhpcyA9IF9fdG1wMjsKICAgICAgICAgIF9fcyA9IF9fdG1wMTsKICAgICAgICB9 CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlw ZW5hbWUgX0FsbG9jPgogICAgdHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywg X0FsbG9jPjo6X1JlcCoKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46 Ol9SZXA6OgogICAgX1NfY3JlYXRlKHNpemVfdCBfX2NhcGFjaXR5LCBjb25zdCBfQWxsb2MmIF9f YWxsb2MpCiAgICB7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywg X0FsbG9jPiBfX3N0cmluZ190eXBlOwoKCiAgICAgIGlmIChfX2NhcGFjaXR5ID4gX1NfbWF4X3Np emUpCgoKCiAgICAgICAgX190aHJvd19sZW5ndGhfZXJyb3IoImJhc2ljX3N0cmluZzo6X1NfY3Jl YXRlIik7CgoKCgogICAgICBzaXplX3QgX19zaXplID0gKF9fY2FwYWNpdHkgKyAxKSAqIHNpemVv ZihfQ2hhclQpICsgc2l6ZW9mKF9SZXApOwojIDQyMSAiL2hvbWUvQWRtaW5pc3RyYXRvci9nY2N0 ZXN0aW5nL2xpYi9nY2MtbGliL2k2ODYtcGMtY3lnd2luLzMuNC9pbmNsdWRlL2MrKy9iaXRzL2Jh c2ljX3N0cmluZy50Y2MiIDMKICAgICAgY29uc3Qgc2l6ZV90IF9fcGFnZXNpemUgPSA0MDk2Owog ICAgICBjb25zdCBzaXplX3QgX19zdWJwYWdlc2l6ZSA9IDEyODsKICAgICAgY29uc3Qgc2l6ZV90 IF9fbWFsbG9jX2hlYWRlcl9zaXplID0gNCAqIHNpemVvZiAodm9pZCopOwogICAgICBpZiAoKF9f c2l6ZSArIF9fbWFsbG9jX2hlYWRlcl9zaXplKSA+IF9fcGFnZXNpemUpCiAgICAgICAgewogICAg ICAgICAgc2l6ZV90IF9fZXh0cmEgPQogICAgICAgICAgICAoX19wYWdlc2l6ZSAtICgoX19zaXpl ICsgX19tYWxsb2NfaGVhZGVyX3NpemUpICUgX19wYWdlc2l6ZSkpCiAgICAgICAgICAgICUgX19w YWdlc2l6ZTsKICAgICAgICAgIF9fY2FwYWNpdHkgKz0gX19leHRyYSAvIHNpemVvZihfQ2hhclQp OwogICAgICAgICAgX19zaXplID0gKF9fY2FwYWNpdHkgKyAxKSAqIHNpemVvZihfQ2hhclQpICsg c2l6ZW9mKF9SZXApOwogICAgICAgIH0KICAgICAgZWxzZSBpZiAoX19zaXplID4gX19zdWJwYWdl c2l6ZSkKICAgICAgICB7CiAgICAgICAgICBzaXplX3QgX19leHRyYSA9CiAgICAgICAgICAgIChf X3N1YnBhZ2VzaXplIC0gKChfX3NpemUgKyBfX21hbGxvY19oZWFkZXJfc2l6ZSkgJSBfX3N1YnBh Z2VzaXplKSkKICAgICAgICAgICAgJSBfX3N1YnBhZ2VzaXplOwogICAgICAgICAgX19jYXBhY2l0 eSArPSBfX2V4dHJhIC8gc2l6ZW9mKF9DaGFyVCk7CiAgICAgICAgICBfX3NpemUgPSAoX19jYXBh Y2l0eSArIDEpICogc2l6ZW9mKF9DaGFyVCkgKyBzaXplb2YoX1JlcCk7CiAgICAgICAgfQoKCgog ICAgICB2b2lkKiBfX3BsYWNlID0gX1Jhd19ieXRlc19hbGxvYyhfX2FsbG9jKS5hbGxvY2F0ZShf X3NpemUpOwogICAgICBfUmVwICpfX3AgPSBuZXcgKF9fcGxhY2UpIF9SZXA7CiAgICAgIF9fcC0+ X01fY2FwYWNpdHkgPSBfX2NhcGFjaXR5OwogICAgICBfX3AtPl9NX3NldF9zaGFyYWJsZSgpOwog ICAgICBfX3AtPl9NX2xlbmd0aCA9IDA7CiAgICAgIHJldHVybiBfX3A7CiAgICB9CgogIHRlbXBs YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgog ICAgX0NoYXJUKgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6X1Jl cDo6CiAgICBfTV9jbG9uZShjb25zdCBfQWxsb2MmIF9fYWxsb2MsIHNpemVfdHlwZSBfX3JlcykK ICAgIHsKCiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX3JlcXVlc3RlZF9jYXAgPSBfTV9sZW5ndGgg KyBfX3JlczsKCiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX3BhZ2VzaXplID0gNDA5NjsKICAgICAg Y29uc3Qgc2l6ZV90eXBlIF9fbWFsbG9jX2hlYWRlcl9zaXplID0gNCAqIHNpemVvZiAodm9pZCop OwoKICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fcGFnZV9jYXBhY2l0eSA9CiAgICAgICAgKF9fcGFn ZXNpemUgLSBfX21hbGxvY19oZWFkZXJfc2l6ZSAtIHNpemVvZihfUmVwKSAtIHNpemVvZihfQ2hh clQpKQogICAgICAgIC8gc2l6ZW9mKF9DaGFyVCk7CiAgICAgIF9SZXAqIF9fcjsKICAgICAgaWYg KF9fcmVxdWVzdGVkX2NhcCA+IF9NX2NhcGFjaXR5ICYmIF9fcmVxdWVzdGVkX2NhcCA+IF9fcGFn ZV9jYXBhY2l0eSkKCiAgICAgICAgX19yID0gX1JlcDo6X1NfY3JlYXRlKF9fcmVxdWVzdGVkX2Nh cCA+IDIqX01fY2FwYWNpdHkgPwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3JlcXVl c3RlZF9jYXAgOiAyKl9NX2NhcGFjaXR5LCBfX2FsbG9jKTsKICAgICAgZWxzZQogICAgICAgIF9f ciA9IF9SZXA6Ol9TX2NyZWF0ZShfX3JlcXVlc3RlZF9jYXAsIF9fYWxsb2MpOwoKICAgICAgaWYg KF9NX2xlbmd0aCkKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgeyB0cmFpdHNf dHlwZTo6Y29weShfX3ItPl9NX3JlZmRhdGEoKSwgX01fcmVmZGF0YSgpLCBfTV9sZW5ndGgpOyB9 CiAgICAgICAgICBjYXRjaCguLi4pCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfX3ItPl9N X2Rlc3Ryb3koX19hbGxvYyk7CiAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAg ICAgICB9CiAgICAgIF9fci0+X01fbGVuZ3RoID0gX01fbGVuZ3RoOwogICAgICByZXR1cm4gX19y LT5fTV9yZWZkYXRhKCk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h bWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdm9pZAogICAgYmFzaWNfc3RyaW5nPF9D aGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6cmVzaXplKHNpemVfdHlwZSBfX24sIF9DaGFyVCBfX2Mp CiAgICB7CiAgICAgIGlmIChfX24gPiBtYXhfc2l6ZSgpKQogICAgICAgIF9fdGhyb3dfbGVuZ3Ro X2Vycm9yKCJiYXNpY19zdHJpbmc6OnJlc2l6ZSIpOwogICAgICBzaXplX3R5cGUgX19zaXplID0g dGhpcy0+c2l6ZSgpOwogICAgICBpZiAoX19zaXplIDwgX19uKQogICAgICAgIHRoaXMtPmFwcGVu ZChfX24gLSBfX3NpemUsIF9fYyk7CiAgICAgIGVsc2UgaWYgKF9fbiA8IF9fc2l6ZSkKICAgICAg ICB0aGlzLT5lcmFzZShfX24pOwoKICAgIH0KCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU LCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfSW5wdXRJdGVyPgogICAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+ JgogICAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgICAgX01f cmVwbGFjZShpdGVyYXRvciBfX2kxLCBpdGVyYXRvciBfX2kyLCBfSW5wdXRJdGVyIF9fazEsCiAg ICAgICAgICAgICAgICAgX0lucHV0SXRlciBfX2syLCBpbnB1dF9pdGVyYXRvcl90YWcpCiAgICAg IHsKCiAgICAgICAgYmFzaWNfc3RyaW5nIF9fcyhfX2sxLCBfX2syKTsKICAgICAgICByZXR1cm4g X01fcmVwbGFjZV9zYWZlKF9faTEsIF9faTIsIF9fcy5fTV9pYmVnaW4oKSwgX19zLl9NX2llbmQo KSk7CiAgICAgIH0KCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh aXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXI+ CiAgICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mCiAgICAgIGJhc2lj X3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgICBfTV9yZXBsYWNlX3NhZmUo aXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwgX0ZvcndhcmRJdGVyIF9fazEsCiAgICAgICAg ICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19rMikKICAgICAgewogICAgICAgIHNpemVfdHlw ZSBfX2RuZXcgPSBzdGF0aWNfY2FzdDxzaXplX3R5cGU+KHN0ZDo6ZGlzdGFuY2UoX19rMSwgX19r MikpOwogICAgICAgIHNpemVfdHlwZSBfX2RvbGQgPSBfX2kyIC0gX19pMTsKICAgICAgICBzaXpl X3R5cGUgX19kbWF4ID0gdGhpcy0+bWF4X3NpemUoKTsKCiAgICAgICAgaWYgKF9fZG1heCA8PSBf X2RuZXcpCiAgICAgICAgICBfX3Rocm93X2xlbmd0aF9lcnJvcigiYmFzaWNfc3RyaW5nOjpfTV9y ZXBsYWNlIik7CiAgICAgICAgc2l6ZV90eXBlIF9fb2ZmID0gX19pMSAtIF9NX2liZWdpbigpOwog ICAgICAgIF9NX211dGF0ZShfX29mZiwgX19kb2xkLCBfX2RuZXcpOwoKCiAgICAgICAgaWYgKF9f ZG5ldykKICAgICAgICAgIF9TX2NvcHlfY2hhcnMoX01fZGF0YSgpICsgX19vZmYsIF9fazEsIF9f azIpOwoKICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJp bmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1Ry YWl0cywgX0FsbG9jPjo6CiAgICByZXBsYWNlKHNpemVfdHlwZSBfX3BvczEsIHNpemVfdHlwZSBf X24xLCBjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLAogICAgICAgICAgICBzaXplX3R5cGUgX19w b3MyLCBzaXplX3R5cGUgX19uMikKICAgIHsKICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fc3Ryc2l6 ZSA9IF9fc3RyLnNpemUoKTsKICAgICAgaWYgKF9fcG9zMiA+IF9fc3Ryc2l6ZSkKICAgICAgICBf X3Rocm93X291dF9vZl9yYW5nZSgiYmFzaWNfc3RyaW5nOjpyZXBsYWNlIik7CiAgICAgIGNvbnN0 IGJvb2wgX190ZXN0bjIgPSBfX24yIDwgX19zdHJzaXplIC0gX19wb3MyOwogICAgICBjb25zdCBz aXplX3R5cGUgX19mb2xkbjIgPSBfX3Rlc3RuMiA/IF9fbjIgOiBfX3N0cnNpemUgLSBfX3BvczI7 CiAgICAgIHJldHVybiB0aGlzLT5yZXBsYWNlKF9fcG9zMSwgX19uMSwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgX19zdHIuX01fZGF0YSgpICsgX19wb3MyLCBfX2ZvbGRuMik7CiAgICB9Cgog IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0Fs bG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYKICAgIGJhc2lj X3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgYXBwZW5kKGNvbnN0IGJhc2lj X3N0cmluZyYgX19zdHIpCiAgICB7CgoKCiAgICAgIHNpemVfdHlwZSBfX3NpemUgPSBfX3N0ci5z aXplKCk7CiAgICAgIHNpemVfdHlwZSBfX2xlbiA9IF9fc2l6ZSArIHRoaXMtPnNpemUoKTsKICAg ICAgaWYgKF9fbGVuID4gdGhpcy0+Y2FwYWNpdHkoKSkKICAgICAgICB0aGlzLT5yZXNlcnZlKF9f bGVuKTsKICAgICAgcmV0dXJuIF9NX3JlcGxhY2Vfc2FmZShfTV9pZW5kKCksIF9NX2llbmQoKSwg X19zdHIuX01faWJlZ2luKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zdHIuX01f aWVuZCgpKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh aXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBf QWxsb2M+JgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBh cHBlbmQoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5 cGUgX19uKQogICAgewoKCgogICAgICBzaXplX3R5cGUgX19sZW4gPSBzdGQ6Om1pbihfX3N0ci5z aXplKCkgLSBfX3BvcywgX19uKSArIHRoaXMtPnNpemUoKTsKICAgICAgaWYgKF9fbGVuID4gdGhp cy0+Y2FwYWNpdHkoKSkKICAgICAgICB0aGlzLT5yZXNlcnZlKF9fbGVuKTsKICAgICAgcmV0dXJu IF9NX3JlcGxhY2Vfc2FmZShfTV9pZW5kKCksIF9NX2llbmQoKSwgX19zdHIuX01fY2hlY2soX19w b3MpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fc3RyLl9NX2ZvbGQoX19wb3MsIF9f bikpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMs IHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxv Yz4mCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGFwcGVu ZChjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fbikKICAgIHsKICAgICAgc2l6ZV90eXBl IF9fbGVuID0gX19uICsgdGhpcy0+c2l6ZSgpOwogICAgICBpZiAoX19sZW4gPiB0aGlzLT5jYXBh Y2l0eSgpKQogICAgICAgIHRoaXMtPnJlc2VydmUoX19sZW4pOwogICAgICByZXR1cm4gX01fcmVw bGFjZV9zYWZlKF9NX2llbmQoKSwgX01faWVuZCgpLCBfX3MsIF9fcyArIF9fbik7CiAgICB9Cgog IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0Fs bG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYKICAgIGJhc2lj X3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgYXBwZW5kKHNpemVfdHlwZSBf X24sIF9DaGFyVCBfX2MpCiAgICB7CiAgICAgIHNpemVfdHlwZSBfX2xlbiA9IF9fbiArIHRoaXMt PnNpemUoKTsKICAgICAgaWYgKF9fbGVuID4gdGhpcy0+Y2FwYWNpdHkoKSkKICAgICAgICB0aGlz LT5yZXNlcnZlKF9fbGVuKTsKICAgICAgIHJldHVybiB0aGlzLT5yZXBsYWNlKF9NX2llbmQoKSwg X01faWVuZCgpLCBfX24sIF9fYyk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg dHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFy VCwgX1RyYWl0cywgX0FsbG9jPgogICAgb3BlcmF0b3IrKGNvbnN0IF9DaGFyVCogX19saHMsCiAg ICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYg X19yaHMpCiAgICB7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywg X0FsbG9jPiBfX3N0cmluZ190eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fc3RyaW5nX3R5 cGU6OnNpemVfdHlwZSBfX3NpemVfdHlwZTsKICAgICAgX19zaXplX3R5cGUgX19sZW4gPSBfVHJh aXRzOjpsZW5ndGgoX19saHMpOwogICAgICBfX3N0cmluZ190eXBlIF9fc3RyOwogICAgICBfX3N0 ci5yZXNlcnZlKF9fbGVuICsgX19yaHMuc2l6ZSgpKTsKICAgICAgX19zdHIuYXBwZW5kKF9fbGhz LCBfX2xocyArIF9fbGVuKTsKICAgICAgX19zdHIuYXBwZW5kKF9fcmhzKTsKICAgICAgcmV0dXJu IF9fc3RyOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp dHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9B bGxvYz4KICAgIG9wZXJhdG9yKyhfQ2hhclQgX19saHMsIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hh clQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcmhzKQogICAgewogICAgICB0eXBlZGVmIGJhc2ljX3N0 cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4gX19zdHJpbmdfdHlwZTsKICAgICAgdHlwZWRl ZiB0eXBlbmFtZSBfX3N0cmluZ190eXBlOjpzaXplX3R5cGUgX19zaXplX3R5cGU7CiAgICAgIF9f c3RyaW5nX3R5cGUgX19zdHI7CiAgICAgIF9fc2l6ZV90eXBlIF9fbGVuID0gX19yaHMuc2l6ZSgp OwogICAgICBfX3N0ci5yZXNlcnZlKF9fbGVuICsgMSk7CiAgICAgIF9fc3RyLmFwcGVuZChfX3Np emVfdHlwZSgxKSwgX19saHMpOwogICAgICBfX3N0ci5hcHBlbmQoX19yaHMpOwogICAgICByZXR1 cm4gX19zdHI7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry YWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywg X0FsbG9jPiYKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAg cmVwbGFjZShpdGVyYXRvciBfX2kxLCBpdGVyYXRvciBfX2kyLCBzaXplX3R5cGUgX19uMiwgX0No YXJUIF9fYykKICAgIHsKICAgICAgc2l6ZV90eXBlIF9fbjEgPSBfX2kyIC0gX19pMTsKICAgICAg c2l6ZV90eXBlIF9fb2ZmMSA9IF9faTEgLSBfTV9pYmVnaW4oKTsKICAgICAgaWYgKG1heF9zaXpl KCkgLSAodGhpcy0+c2l6ZSgpIC0gX19uMSkgPD0gX19uMikKICAgICAgICBfX3Rocm93X2xlbmd0 aF9lcnJvcigiYmFzaWNfc3RyaW5nOjpyZXBsYWNlIik7CiAgICAgIF9NX211dGF0ZSAoX19vZmYx LCBfX24xLCBfX24yKTsKCiAgICAgIGlmIChfX24yKQogICAgICAgIHRyYWl0c190eXBlOjphc3Np Z24oX01fZGF0YSgpICsgX19vZmYxLCBfX24yLCBfX2MpOwogICAgICByZXR1cm4gKnRoaXM7CiAg ICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5h bWUgX0FsbG9jPgogICAgdHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0Fs bG9jPjo6c2l6ZV90eXBlCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+ OjoKICAgIGNvcHkoX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX24sIHNpemVfdHlwZSBfX3Bvcykg Y29uc3QKICAgIHsKICAgICAgaWYgKF9fcG9zID4gdGhpcy0+c2l6ZSgpKQogICAgICAgIF9fdGhy b3dfb3V0X29mX3JhbmdlKCJiYXNpY19zdHJpbmc6OmNvcHkiKTsKCiAgICAgIGlmIChfX24gPiB0 aGlzLT5zaXplKCkgLSBfX3BvcykKICAgICAgICBfX24gPSB0aGlzLT5zaXplKCkgLSBfX3BvczsK CiAgICAgIHRyYWl0c190eXBlOjpjb3B5KF9fcywgX01fZGF0YSgpICsgX19wb3MsIF9fbik7Cgog ICAgICByZXR1cm4gX19uOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu YW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVuYW1lIGJhc2ljX3N0cmluZzxf Q2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQogICAgYmFzaWNfc3RyaW5nPF9DaGFy VCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBmaW5kKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5 cGUgX19wb3MsIHNpemVfdHlwZSBfX24pIGNvbnN0CiAgICB7CiAgICAgIHNpemVfdHlwZSBfX3Np emUgPSB0aGlzLT5zaXplKCk7CiAgICAgIHNpemVfdCBfX3hwb3MgPSBfX3BvczsKICAgICAgY29u c3QgX0NoYXJUKiBfX2RhdGEgPSBfTV9kYXRhKCk7CiAgICAgIGZvciAoOyBfX3hwb3MgKyBfX24g PD0gX19zaXplOyArK19feHBvcykKICAgICAgICBpZiAodHJhaXRzX3R5cGU6OmNvbXBhcmUoX19k YXRhICsgX194cG9zLCBfX3MsIF9fbikgPT0gMCkKICAgICAgICAgIHJldHVybiBfX3hwb3M7CiAg ICAgIHJldHVybiBucG9zOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu YW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVuYW1lIGJhc2ljX3N0cmluZzxf Q2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQogICAgYmFzaWNfc3RyaW5nPF9DaGFy VCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBmaW5kKF9DaGFyVCBfX2MsIHNpemVfdHlwZSBfX3Bv cykgY29uc3QKICAgIHsKICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsKICAg ICAgc2l6ZV90eXBlIF9fcmV0ID0gbnBvczsKICAgICAgaWYgKF9fcG9zIDwgX19zaXplKQogICAg ICAgIHsKICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19kYXRhID0gX01fZGF0YSgpOwogICAgICAg ICAgc2l6ZV90eXBlIF9fbiA9IF9fc2l6ZSAtIF9fcG9zOwogICAgICAgICAgY29uc3QgX0NoYXJU KiBfX3AgPSB0cmFpdHNfdHlwZTo6ZmluZChfX2RhdGEgKyBfX3BvcywgX19uLCBfX2MpOwogICAg ICAgICAgaWYgKF9fcCkKICAgICAgICAgICAgX19yZXQgPSBfX3AgLSBfX2RhdGE7CiAgICAgICAg fQogICAgICByZXR1cm4gX19yZXQ7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs IHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVuYW1lIGJhc2ljX3N0 cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQogICAgYmFzaWNfc3RyaW5n PF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICByZmluZChjb25zdCBfQ2hhclQqIF9fcywg c2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKSBjb25zdAogICAgewogICAgICBzaXplX3R5 cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOwogICAgICBpZiAoX19uIDw9IF9fc2l6ZSkKICAgICAg ICB7CiAgICAgICAgICBfX3BvcyA9IHN0ZDo6bWluKF9fc2l6ZSAtIF9fbiwgX19wb3MpOwogICAg ICAgICAgY29uc3QgX0NoYXJUKiBfX2RhdGEgPSBfTV9kYXRhKCk7CiAgICAgICAgICBkbwogICAg ICAgICAgICB7CiAgICAgICAgICAgICAgaWYgKHRyYWl0c190eXBlOjpjb21wYXJlKF9fZGF0YSAr IF9fcG9zLCBfX3MsIF9fbikgPT0gMCkKICAgICAgICAgICAgICAgIHJldHVybiBfX3BvczsKICAg ICAgICAgICAgfQogICAgICAgICAgd2hpbGUgKF9fcG9zLS0gPiAwKTsKICAgICAgICB9CiAgICAg IHJldHVybiBucG9zOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l IF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVuYW1lIGJhc2ljX3N0cmluZzxfQ2hh clQsIF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwg X1RyYWl0cywgX0FsbG9jPjo6CiAgICByZmluZChfQ2hhclQgX19jLCBzaXplX3R5cGUgX19wb3Mp IGNvbnN0CiAgICB7CiAgICAgIHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CiAgICAg IGlmIChfX3NpemUpCiAgICAgICAgewogICAgICAgICAgc2l6ZV90IF9feHBvcyA9IF9fc2l6ZSAt IDE7CiAgICAgICAgICBpZiAoX194cG9zID4gX19wb3MpCiAgICAgICAgICAgIF9feHBvcyA9IF9f cG9zOwoKICAgICAgICAgIGZvciAoKytfX3hwb3M7IF9feHBvcy0tID4gMDsgKQogICAgICAgICAg ICBpZiAodHJhaXRzX3R5cGU6OmVxKF9NX2RhdGEoKVtfX3hwb3NdLCBfX2MpKQogICAgICAgICAg ICAgIHJldHVybiBfX3hwb3M7CiAgICAgICAgfQogICAgICByZXR1cm4gbnBvczsKICAgIH0KCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxs b2M+CiAgICB0eXBlbmFtZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+Ojpz aXplX3R5cGUKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAg ZmluZF9maXJzdF9vZihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5 cGUgX19uKSBjb25zdAogICAgewogICAgICBmb3IgKDsgX19uICYmIF9fcG9zIDwgdGhpcy0+c2l6 ZSgpOyArK19fcG9zKQogICAgICAgIHsKICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19wID0gdHJh aXRzX3R5cGU6OmZpbmQoX19zLCBfX24sIF9NX2RhdGEoKVtfX3Bvc10pOwogICAgICAgICAgaWYg KF9fcCkKICAgICAgICAgICAgcmV0dXJuIF9fcG9zOwogICAgICAgIH0KICAgICAgcmV0dXJuIG5w b3M7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywg dHlwZW5hbWUgX0FsbG9jPgogICAgdHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0 cywgX0FsbG9jPjo6c2l6ZV90eXBlCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBf QWxsb2M+OjoKICAgIGZpbmRfbGFzdF9vZihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9f cG9zLCBzaXplX3R5cGUgX19uKSBjb25zdAogICAgewogICAgICBzaXplX3R5cGUgX19zaXplID0g dGhpcy0+c2l6ZSgpOwogICAgICBpZiAoX19zaXplICYmIF9fbikKICAgICAgICB7CiAgICAgICAg ICBpZiAoLS1fX3NpemUgPiBfX3BvcykKICAgICAgICAgICAgX19zaXplID0gX19wb3M7CiAgICAg ICAgICBkbwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaWYgKHRyYWl0c190eXBlOjpmaW5k KF9fcywgX19uLCBfTV9kYXRhKClbX19zaXplXSkpCiAgICAgICAgICAgICAgICByZXR1cm4gX19z aXplOwogICAgICAgICAgICB9CiAgICAgICAgICB3aGlsZSAoX19zaXplLS0gIT0gMCk7CiAgICAg ICAgfQogICAgICByZXR1cm4gbnBvczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU LCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0eXBlbmFtZSBiYXNpY19z dHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpzaXplX3R5cGUKICAgIGJhc2ljX3N0cmlu ZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgZmluZF9maXJzdF9ub3Rfb2YoY29uc3Qg X0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikgY29uc3QKICAgIHsK ICAgICAgc2l6ZV90IF9feHBvcyA9IF9fcG9zOwogICAgICBmb3IgKDsgX194cG9zIDwgdGhpcy0+ c2l6ZSgpOyArK19feHBvcykKICAgICAgICBpZiAoIXRyYWl0c190eXBlOjpmaW5kKF9fcywgX19u LCBfTV9kYXRhKClbX194cG9zXSkpCiAgICAgICAgICByZXR1cm4gX194cG9zOwogICAgICByZXR1 cm4gbnBvczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh aXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0eXBlbmFtZSBiYXNpY19zdHJpbmc8X0NoYXJULCBf VHJhaXRzLCBfQWxsb2M+OjpzaXplX3R5cGUKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFp dHMsIF9BbGxvYz46OgogICAgZmluZF9maXJzdF9ub3Rfb2YoX0NoYXJUIF9fYywgc2l6ZV90eXBl IF9fcG9zKSBjb25zdAogICAgewogICAgICBzaXplX3QgX194cG9zID0gX19wb3M7CiAgICAgIGZv ciAoOyBfX3hwb3MgPCB0aGlzLT5zaXplKCk7ICsrX194cG9zKQogICAgICAgIGlmICghdHJhaXRz X3R5cGU6OmVxKF9NX2RhdGEoKVtfX3hwb3NdLCBfX2MpKQogICAgICAgICAgcmV0dXJuIF9feHBv czsKICAgICAgcmV0dXJuIG5wb3M7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg dHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdHlwZW5hbWUgYmFzaWNfc3Ry aW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90eXBlCiAgICBiYXNpY19zdHJpbmc8 X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGZpbmRfbGFzdF9ub3Rfb2YoY29uc3QgX0No YXJUKiBfX3MsIHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikgY29uc3QKICAgIHsKICAg ICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsKICAgICAgaWYgKF9fc2l6ZSkKICAg ICAgICB7CiAgICAgICAgICBpZiAoLS1fX3NpemUgPiBfX3BvcykKICAgICAgICAgICAgX19zaXpl ID0gX19wb3M7CiAgICAgICAgICBkbwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaWYgKCF0 cmFpdHNfdHlwZTo6ZmluZChfX3MsIF9fbiwgX01fZGF0YSgpW19fc2l6ZV0pKQogICAgICAgICAg ICAgICAgcmV0dXJuIF9fc2l6ZTsKICAgICAgICAgICAgfQogICAgICAgICAgd2hpbGUgKF9fc2l6 ZS0tKTsKICAgICAgICB9CiAgICAgIHJldHVybiBucG9zOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVu YW1lIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQogICAg YmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBmaW5kX2xhc3Rfbm90 X29mKF9DaGFyVCBfX2MsIHNpemVfdHlwZSBfX3BvcykgY29uc3QKICAgIHsKICAgICAgc2l6ZV90 eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsKICAgICAgaWYgKF9fc2l6ZSkKICAgICAgICB7CiAg ICAgICAgICBpZiAoLS1fX3NpemUgPiBfX3BvcykKICAgICAgICAgICAgX19zaXplID0gX19wb3M7 CiAgICAgICAgICBkbwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaWYgKCF0cmFpdHNfdHlw ZTo6ZXEoX01fZGF0YSgpW19fc2l6ZV0sIF9fYykpCiAgICAgICAgICAgICAgICByZXR1cm4gX19z aXplOwogICAgICAgICAgICB9CiAgICAgICAgICB3aGlsZSAoX19zaXplLS0pOwogICAgICAgIH0K ICAgICAgcmV0dXJuIG5wb3M7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw ZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW50CiAgICBiYXNpY19zdHJpbmc8 X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGNvbXBhcmUoc2l6ZV90eXBlIF9fcG9zLCBz aXplX3R5cGUgX19uLCBjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyKSBjb25zdAogICAgewogICAg ICBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOwogICAgICBzaXplX3R5cGUgX19vc2l6 ZSA9IF9fc3RyLnNpemUoKTsKICAgICAgaWYgKF9fcG9zID4gX19zaXplKQogICAgICAgIF9fdGhy b3dfb3V0X29mX3JhbmdlKCJiYXNpY19zdHJpbmc6OmNvbXBhcmUiKTsKCiAgICAgIHNpemVfdHlw ZSBfX3JzaXplPSBzdGQ6Om1pbihfX3NpemUgLSBfX3BvcywgX19uKTsKICAgICAgc2l6ZV90eXBl IF9fbGVuID0gc3RkOjptaW4oX19yc2l6ZSwgX19vc2l6ZSk7CiAgICAgIGludCBfX3IgPSB0cmFp dHNfdHlwZTo6Y29tcGFyZShfTV9kYXRhKCkgKyBfX3BvcywgX19zdHIuZGF0YSgpLCBfX2xlbik7 CiAgICAgIGlmICghX19yKQogICAgICAgIF9fciA9IF9fcnNpemUgLSBfX29zaXplOwogICAgICBy ZXR1cm4gX19yOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U cmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGludAogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwg X1RyYWl0cywgX0FsbG9jPjo6CiAgICBjb21wYXJlKHNpemVfdHlwZSBfX3BvczEsIHNpemVfdHlw ZSBfX24xLCBjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLAogICAgICAgICAgICBzaXplX3R5cGUg X19wb3MyLCBzaXplX3R5cGUgX19uMikgY29uc3QKICAgIHsKICAgICAgc2l6ZV90eXBlIF9fc2l6 ZSA9IHRoaXMtPnNpemUoKTsKICAgICAgc2l6ZV90eXBlIF9fb3NpemUgPSBfX3N0ci5zaXplKCk7 CiAgICAgIGlmIChfX3BvczEgPiBfX3NpemUgfHwgX19wb3MyID4gX19vc2l6ZSkKICAgICAgICBf X3Rocm93X291dF9vZl9yYW5nZSgiYmFzaWNfc3RyaW5nOjpjb21wYXJlIik7CgogICAgICBzaXpl X3R5cGUgX19yc2l6ZSA9IHN0ZDo6bWluKF9fc2l6ZSAtIF9fcG9zMSwgX19uMSk7CiAgICAgIHNp emVfdHlwZSBfX3Jvc2l6ZSA9IHN0ZDo6bWluKF9fb3NpemUgLSBfX3BvczIsIF9fbjIpOwogICAg ICBzaXplX3R5cGUgX19sZW4gPSBzdGQ6Om1pbihfX3JzaXplLCBfX3Jvc2l6ZSk7CiAgICAgIGlu dCBfX3IgPSB0cmFpdHNfdHlwZTo6Y29tcGFyZShfTV9kYXRhKCkgKyBfX3BvczEsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3N0ci5kYXRhKCkgKyBfX3BvczIsIF9fbGVu KTsKICAgICAgaWYgKCFfX3IpCiAgICAgICAgX19yID0gX19yc2l6ZSAtIF9fcm9zaXplOwogICAg ICByZXR1cm4gX19yOwogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt ZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbnQKICAgIGJhc2ljX3N0cmluZzxfQ2hh clQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgY29tcGFyZShjb25zdCBfQ2hhclQqIF9fcykgY29u c3QKICAgIHsKICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsKICAgICAgc2l6 ZV90eXBlIF9fb3NpemUgPSB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcyk7CiAgICAgIHNpemVfdHlw ZSBfX2xlbiA9IHN0ZDo6bWluKF9fc2l6ZSwgX19vc2l6ZSk7CiAgICAgIGludCBfX3IgPSB0cmFp dHNfdHlwZTo6Y29tcGFyZShfTV9kYXRhKCksIF9fcywgX19sZW4pOwogICAgICBpZiAoIV9fcikK ICAgICAgICBfX3IgPSBfX3NpemUgLSBfX29zaXplOwogICAgICByZXR1cm4gX19yOwogICAgfQoK CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBf QWxsb2M+CiAgICBpbnQKICAgIGJhc2ljX3N0cmluZyA8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+ OjoKICAgIGNvbXBhcmUoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uMSwgY29uc3QgX0No YXJUKiBfX3MpIGNvbnN0CiAgICB7CiAgICAgIHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXpl KCk7CiAgICAgIGlmIChfX3BvcyA+IF9fc2l6ZSkKICAgICAgICBfX3Rocm93X291dF9vZl9yYW5n ZSgiYmFzaWNfc3RyaW5nOjpjb21wYXJlIik7CgogICAgICBzaXplX3R5cGUgX19vc2l6ZSA9IHRy YWl0c190eXBlOjpsZW5ndGgoX19zKTsKICAgICAgc2l6ZV90eXBlIF9fcnNpemUgPSBzdGQ6Om1p bihfX3NpemUgLSBfX3BvcywgX19uMSk7CiAgICAgIHNpemVfdHlwZSBfX2xlbiA9IHN0ZDo6bWlu KF9fcnNpemUsIF9fb3NpemUpOwogICAgICBpbnQgX19yID0gdHJhaXRzX3R5cGU6OmNvbXBhcmUo X01fZGF0YSgpICsgX19wb3MsIF9fcywgX19sZW4pOwogICAgICBpZiAoIV9fcikKICAgICAgICBf X3IgPSBfX3JzaXplIC0gX19vc2l6ZTsKICAgICAgcmV0dXJuIF9fcjsKICAgIH0KCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAg ICBpbnQKICAgIGJhc2ljX3N0cmluZyA8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGNv bXBhcmUoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uMSwgY29uc3QgX0NoYXJUKiBfX3Ms CiAgICAgICAgICAgIHNpemVfdHlwZSBfX24yKSBjb25zdAogICAgewogICAgICBzaXplX3R5cGUg X19zaXplID0gdGhpcy0+c2l6ZSgpOwogICAgICBpZiAoX19wb3MgPiBfX3NpemUpCiAgICAgICAg X190aHJvd19vdXRfb2ZfcmFuZ2UoImJhc2ljX3N0cmluZzo6Y29tcGFyZSIpOwoKICAgICAgc2l6 ZV90eXBlIF9fb3NpemUgPSBzdGQ6Om1pbih0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcyksIF9fbjIp OwogICAgICBzaXplX3R5cGUgX19yc2l6ZSA9IHN0ZDo6bWluKF9fc2l6ZSAtIF9fcG9zLCBfX24x KTsKICAgICAgc2l6ZV90eXBlIF9fbGVuID0gc3RkOjptaW4oX19yc2l6ZSwgX19vc2l6ZSk7CiAg ICAgIGludCBfX3IgPSB0cmFpdHNfdHlwZTo6Y29tcGFyZShfTV9kYXRhKCkgKyBfX3BvcywgX19z LCBfX2xlbik7CiAgICAgIGlmICghX19yKQogICAgICAgIF9fciA9IF9fcnNpemUgLSBfX29zaXpl OwogICAgICByZXR1cm4gX19yOwogICAgfQoKCgoKCiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIGJh c2ljX3N0cmluZzxjaGFyPjsKICBleHRlcm4gdGVtcGxhdGUKICAgIGJhc2ljX2lzdHJlYW08Y2hh cj4mCiAgICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08Y2hhcj4mLCBzdHJpbmcmKTsKICBleHRl cm4gdGVtcGxhdGUKICAgIGJhc2ljX29zdHJlYW08Y2hhcj4mCiAgICBvcGVyYXRvcjw8KGJhc2lj X29zdHJlYW08Y2hhcj4mLCBjb25zdCBzdHJpbmcmKTsKICBleHRlcm4gdGVtcGxhdGUKICAgIGJh c2ljX2lzdHJlYW08Y2hhcj4mCiAgICBnZXRsaW5lKGJhc2ljX2lzdHJlYW08Y2hhcj4mLCBzdHJp bmcmLCBjaGFyKTsKICBleHRlcm4gdGVtcGxhdGUKICAgIGJhc2ljX2lzdHJlYW08Y2hhcj4mCiAg ICBnZXRsaW5lKGJhc2ljX2lzdHJlYW08Y2hhcj4mLCBzdHJpbmcmKTsKIyA5NjcgIi9ob21lL0Fk bWluaXN0cmF0b3IvZ2NjdGVzdGluZy9saWIvZ2NjLWxpYi9pNjg2LXBjLWN5Z3dpbi8zLjQvaW5j bHVkZS9jKysvYml0cy9iYXNpY19zdHJpbmcudGNjIiAzCn0KIyA1OCAiL2hvbWUvQWRtaW5pc3Ry YXRvci9nY2N0ZXN0aW5nL2xpYi9nY2MtbGliL2k2ODYtcGMtY3lnd2luLzMuNC9pbmNsdWRlL2Mr Ky9zdHJpbmciIDIgMwojIDIgImNvbnN0YW50cy5jYyIgMgoKY2xhc3Mgc3N0cmluZ190IDogcHVi bGljIHN0ZDo6c3RyaW5nCnsKcHVibGljOgogICAgc3N0cmluZ190KHZvaWQpIDogc3RkOjpzdHJp bmcoKSB7fQogICAgc3N0cmluZ190KGNvbnN0IGNoYXIqIHNyYykgOiBzdGQ6OnN0cmluZyhzcmMp IHt9Cn07CgoKY2xhc3MgdGl0bGVfdHlwZQp7CnB1YmxpYzoKICAgIHNzdHJpbmdfdCB0aXRsZV9t OwoKcHVibGljOgogICAgdm9pZCBjbGVhcigpCiAgICB7CiAgICAgICAgdGl0bGVfbSA9ICIiOwog ICAgfQogICAgdGl0bGVfdHlwZSgpIHsgY2xlYXIoKTsgfQogICAgdGl0bGVfdHlwZShjb25zdCBj aGFyKiB0aXRsZV9tX2luLCBjb25zdCBjaGFyKiB0aXRsZV9mX2luLCBpbnQgZXhwX2luKQogICAg ewogICAgICAgIHRpdGxlX20gPSB0aXRsZV9tX2luOwogICAgfQp9OwpleHRlcm4gY29uc3QgdGl0 bGVfdHlwZSB0aXRsZXNbOCArMV1bMTI3XTsKIyAzOCAiY29uc3RhbnRzLmNjIgpjb25zdCB0aXRs ZV90eXBlIHRpdGxlc1s4ICsxXVsxMjddID0KICAgIHsKICAgICAgICB7CiAgICAgICAgICAgIHRp dGxlX3R5cGUoICJNYW4iLCAiV29tYW4iLCAwICksCiAgICAgICAgICAgIHRpdGxlX3R5cGUoICJB cHByZW50aWNlIiwgIkFwcHJlbnRpY2UiLCAxICksCiAgICAgICAgICAgIHRpdGxlX3R5cGUoICJT dHVkZW50IiwgIlN0dWRlbnQiLCAyNDk5ICksCiAgICAgICAgICAgIHRpdGxlX3R5cGUoICJTY2hv bGFyIiwgIlNjaG9sYXIiLCAyNTAwICksCiAgICAgICAgICAgIHRpdGxlX3R5cGUoICJUcmlja3N0 ZXIiLCAiVHJpY2tzdGVyIiwgNTAwMCApLAogICAgICAgICAgICB0aXRsZV90eXBlKCAiTWVkaXVt IiwgIkd5cHN5IiwgMTAwMDAgKSwKICAgICAgICAgICAgdGl0bGVfdHlwZSggIlNjcmliZSIsICJX aXRjaCIsIDIwMDAwICksCiAgICAgICAgICAgIHRpdGxlX3R5cGUoICJTZWVyIiwgIlNlZXJlc3Mi LCAyMDAwMCApLAogICAgICAgICAgICB0aXRsZV90eXBlKCAiU2FnZSIsICJTYWdlIiwgMzAwMDAg KSwKICAgICAgICAgICAgdGl0bGVfdHlwZSggIklsbHVzaW9uaXN0IiwgIklsbHVzaW9uaXN0Iiwg NTAwMDAgKSwKICAgICAgICAgICAgdGl0bGVfdHlwZSggIkFianVyZXIiLCAiQWJqdXJlc3MiLCAx MDAwMDAgKSwKICAgICAgICAgICAgdGl0bGVfdHlwZSggIkludm9rZXIiLCAiSW52b2tlciIsIDIw MDAwMCApLAogICAgICAgICAgICB0aXRsZV90eXBlKCAiRW5jaGFudGVyIiwgIkVuY2hhbnRyZXNz IiwgMzc1MDAwICksCiAgICAgICAgICAgIHRpdGxlX3R5cGUoICJDb25qdXJlciIsICJDb25qdXJl c3MiLCAzNzUwMDAgKSwKICAgICAgICAgICAgdGl0bGVfdHlwZSggIk1hZ2ljaWFuIiwgIk1hZ2lj aWFuIiwgMzc1MDAwICksCiAgICAgICAgICAgIHRpdGxlX3R5cGUoICJTcGVsbE1hc3RlciIsICJT cGVsbE1pc3RyZXNzIiwgMzc1MDAwICksCiAgICAgICAgICAgIHRpdGxlX3R5cGUoICJTYXZhbnQi LCAiU2F2YW50aSIsIDM3NTAwMCApLAogICAgICAgICAgICB0aXRsZV90eXBlKCAiTWFndXMiLCAi SW5jYW50cml4IiwgMzc1MDAwICksCiAgICAgICAgICAgIHRpdGxlX3R5cGUoICJXaXphcmQiLCAi V2l6YXJkIiwgMzc1MDAwICksCiAgICAgICAgICAgIHRpdGxlX3R5cGUoICJXYXJsb2NrIiwgIldh ciBXaXRjaCIsIDM3NTAwMCApLAogICAgICAgICAgICB0aXRsZV90eXBlKCAiR2VvbWFuY2VyIiwg Ikdlb21hbmNlcmVzcyIsIDM3NTAwMCApLAogICAgICAgICAgICB0aXRsZV90eXBlKCAiU3Bpcml0 bWFuIiwgIlNwaXJpdHdvbWFuIiwgMzc1MDAwICksCiAgICAgICAgICAgIHRpdGxlX3R5cGUoICJO ZWNyb21hbmNlciIsICJOZWNyb21hbmNlcmVzcyIsIDM3NTAwMCApLAogICAgICAgICAgICB0aXRs ZV90eXBlKCAiTWluZHJlYWRlciIsICJNaW5kcmVhZGVyIiwgMzc1MDAwICksCiAgICAgICAgICAg IHRpdGxlX3R5cGUoICJQb3NzZXNzb3IiLCAiUG9zc2Vzc29yZXNzIiwgMzc1MDAwICksCiAgICAg ICAgICAgIHRpdGxlX3R5cGUoICJGYWlyeSIsICJGYWlyeSIsIDM3NTAwMCApLAogICAgICAgICAg ICB0aXRsZV90eXBlKCAiQ2hhcm1lciIsICJDaGFybWVzcyIsIDM3NTAwMCApLAogICAgICAgICAg ICB0aXRsZV90eXBlKCAiTWVkaWNhc3RlciIsICJNZWRpY2FzdGVyIiwgMzc1MDAwICksCiAgICAg ICAgICAgIHRpdGxlX3R5cGUoICJWb29kb28iLCAiVm9vZG9vZXNzIiwgMzc1MDAwICksCiAgICAg ICAgICAgIHRpdGxlX3R5cGUoICJEb3dzZXIiLCAiRG93c2VyZXNzIiwgMzc1MDAwICksCiAgICAg ICAgICAgIHRpdGxlX3R5cGUoICJNZWRpY2luZU1hbiIsICJNZWRpY2luZVdvbWFuIiwgMzc1MDAw ICksCiAgICAgICAgICAgIHRpdGxlX3R5cGUoICJXaXRjaC1Eb2N0b3IiLCAiV2l0Y2gtRG9jdG9y IiwgMzc1MDAwICksCiAgICAgICAgICAgIHRpdGxlX3R5cGUoICJTaGFtYW4iLCAiU2hhbWFuZXNz IiwgMzc1MDAwICksCiAgICAgICAgICAgIHRpdGxlX3R5cGUoICJIeXBub3Rpc3QiLCAiSHlwbm90 aXN0IiwgMzc1MDAwICksCiAgICAgICAgICAgIHRpdGxlX3R5cGUoICJBc3Ryb2xvZ2VyIiwgIkFz dHJvbG9nZXNzIiwgMzc1MDAwICksCiAgICAgICAgICAgIHRpdGxlX3R5cGUoICJNYXN0ZXJtaW5k IiwgIk1hc3Rlcm1pbmQiLCAzNzUwMDAgKSwKICAgICAgICAgICAgdGl0bGVfdHlwZSggIlNwZWxs Y2FzdGVyIiwgIlNwZWxsY2FzdGVyIiwgMzc1MDAwICksCiAgICAgICAgICAgIHRpdGxlX3R5cGUo ICJEZW1vbnN0cmF0b3IiLCAiRGVtb25zdHJhdG9yIiwgMzc1MDAwICksCiAgICAgICAgICAgIHRp dGxlX3R5cGUoICJGYXNjaW5hdG9yIiwgIkZhc2NpbmF0b3IiLCAzNzUwMDAgKSwKICAgICAgICAg ICAgdGl0bGVfdHlwZSggIkZpcmV3b3JrZXIiLCAiRmlyZXdvcmtlc3MiLCAzNzUwMDAgKSwKICAg ICAgICAgICAgdGl0bGVfdHlwZSggIlN1bW1vbmVyIiwgIlN1bW1vbmVzcyIsIDM3NTAwMCApLAog ICAgICAgICAgICB0aXRsZV90eXBlKCAiR2VuaWUiLCAiR2VuaWUiLCAzNzUwMDAgKSwKICAgICAg ICAgICAgdGl0bGVfdHlwZSggIkZsYW1ldGhyb3dlciIsICJGbGFtZXRocm93ZXIiLCAzNzUwMDAg KSwKICAgICAgICAgICAgdGl0bGVfdHlwZSggIk9yYWNsZXIiLCAiT3JhY2xlc3MiLCAzNzUwMDAg KSwKICAgICAgICAgICAgdGl0bGVfdHlwZSggIlNvb3Roc2F5ZXIiLCAiU29vdGhzYXllciIsIDM3 NTAwMCApLAogICAgICAgICAgICB0aXRsZV90eXBlKCAiQXVndXIiLCAiQXVndXJlc3MiLCAzNzUw MDAgKSwKICAgICAgICAgICAgdGl0bGVfdHlwZSggIkZvcnR1bmV0ZWxsZXIiLCAiUGFsbXJlYWRl ciIsIDM3NTAwMCApLAogICAgICAgICAgICB0aXRsZV90eXBlKCAiT21lbiIsICJPbWVuZXNzIiwg Mzc1MDAwICksCiAgICAgICAgICAgIHRpdGxlX3R5cGUoICJTdGFyZ2F6ZXIiLCAiR2F6ZXIiLCAz NzUwMDAgKSwKICAgICAgICAgICAgdGl0bGVfdHlwZSggIlNvcmNlcmVyIiwgIlNvcmNlcmVyZXNz IiwgMzc1MDAwICksCiAgICAgICAgICAgIHRpdGxlX3R5cGUoICJHcmFuZCBTb3JjZXJlciIsICJH cmFuZCBTb3JjZXJlcmVzcyIsIDEwMDAwMDAgKSwKICAgICAgICAgICAgdGl0bGVfdHlwZSggIklt bW9ydGFsIFdhcmxvY2siLCAiSW1tb3J0YWwgRW5jaGFudHJlc3MiLCAxNTAwMDAwMDAgKSwKICAg ICAgICAgICAgdGl0bGVfdHlwZSggIkltbW9ydGFsIFdhcmxvY2siLCAiSW1tb3J0YWwgRW5jaGFu dHJlc3MiLCAxMDAwMDAwMCApLAogICAgICAgICAgICB0aXRsZV90eXBlKCAiSW1tb3J0YWwgV2Fy bG9jayIsICJJbW1vcnRhbCBFbmNoYW50cmVzcyIsIDEwMDAwMDAwICksCiAgICAgICAgICAgIHRp dGxlX3R5cGUoICJJbW1vcnRhbCBXYXJsb2NrIiwgIkltbW9ydGFsIEVuY2hhbnRyZXNzIiwgMTAw MDAwMDAgKSwKICAgICAgICAgICAgdGl0bGVfdHlwZSggIkltbW9ydGFsIFdhcmxvY2siLCAiSW1t b3J0YWwgRW5jaGFudHJlc3MiLCAxMDAwMDAwMCApLAogICAgICAgICAgICB0aXRsZV90eXBlKCAi SW1tb3J0YWwgV2FybG9jayIsICJJbW1vcnRhbCBFbmNoYW50cmVzcyIsIDEwMDAwMDAwICksCiAg ICAgICAgICAgIHRpdGxlX3R5cGUoICJBdmF0YXIgb2YgTWFnaWMiLCAiRW1wcmVzcyBvZiBNYWdp YyIsIDEwMDAwMDAwICksCiAgICAgICAgICAgIHRpdGxlX3R5cGUoICJHb2Qgb2YgTWFnaWMiLCAi R29kZGVzcyBvZiBNYWdpYyIsIDEwMDAwMDAwICksCiAgICAgICAgICAgIHRpdGxlX3R5cGUoICJJ bXBsZW1lbnRvciIsICJJbXBsZW1lbnRyaXgiLCAxMDAwMDAwMCApLAogICAgICAgICAgICB0aXRs ZV90eXBlKCAiSW1wbGVtZW50b3IiLCAiSW1wbGVtZW50cml4IiwgMTAwMDAwMDAgKQogICAgICAg IH0sCiAgICAgICAgewogICAgICAgICAgICB0aXRsZV90eXBlKCAiTWFuIiwgIldvbWFuIiwgMCAp LAogICAgICAgICAgICB0aXRsZV90eXBlKCAiQmVsaWV2ZXIiLCAiQmVsaWV2ZXIiLCAxICksCiAg ICAgICAgICAgIHRpdGxlX3R5cGUoICJBdHRlbmRhbnQiLCAiQXR0ZW5kYW50IiwgMTQ5OSApLAog ICAgICAgICAgICB0aXRsZV90eXBlKCAiQWNvbHl0ZSIsICJBY29seXRlIiwgMTUwMCApLAogICAg ICAgICAgICB0aXRsZV90eXBlKCAiTm92aWNlIiwgIk5vdmljZSIsIDMwMDAgKSwKICAgICAgICAg ICAgdGl0bGVfdHlwZSggIk1pc3Npb25hcnkiLCAiTWlzc2lvbmFyeSIsIDcwMDAgKSwKICAgICAg ICAgICAgdGl0bGVfdHlwZSggIkFkZXB0IiwgIkFkZXB0IiwgMTQ1MDAgKSwKICAgICAgICAgICAg dGl0bGVfdHlwZSggIkRlYWNvbiIsICJEZWFjb25lc3MiLCAyNzUwMCApLAogICAgICAgICAgICB0 aXRsZV90eXBlKCAiVmljYXIiLCAiVmljYXJlc3MiLCA1NTAwMCApLAogICAgICAgICAgICB0aXRs ZV90eXBlKCAiUHJpZXN0IiwgIlByaWVzdGVzcyIsIDExNTAwMCApLAogICAgICAgICAgICB0aXRs ZV90eXBlKCAiTWluaXN0ZXIiLCAiTGFkeSBNaW5pc3RlciIsIDMwMDAwMCApLAogICAgICAgICAg ICB0aXRsZV90eXBlKCAiQ2Fub24iLCAiQ2Fub24iLCAzMDAwMDAgKSwKICAgICAgICAgICAgdGl0 bGVfdHlwZSggIkxldml0ZSIsICJMZXZpdGVzcyIsIDMwMDAwMCApLAogICAgICAgICAgICB0aXRs ZV90eXBlKCAiQ3VyYXRlIiwgIkN1cmVzcyIsIDMwMDAwMCApLAogICAgICAgICAgICB0aXRsZV90 eXBlKCAiTW9uayIsICJOdW5uZSIsIDMwMDAwMCApLAogICAgICAgICAgICB0aXRsZV90eXBlKCAi SGVhbGVyIiwgIkhlYWxlciIsIDMwMDAwMCApLAogICAgICAgICAgICB0aXRsZV90eXBlKCAiQ2hh cGxhaW4iLCAiQ2hhcGxhaW4iLCAzMDAwMDAgKSwKICAgICAgICAgICAgdGl0bGVfdHlwZSggIkV4 cG9zaXRvciIsICJFeHBvc2l0cmVzcyIsIDMwMDAwMCApLAogICAgICAgICAgICB0aXRsZV90eXBl KCAiVXNoZXIiLCAiVXNoZXJlc3MiLCAzMDAwMDAgKSwKICAgICAgICAgICAgdGl0bGVfdHlwZSgg IlBhZ2UiLCAiUGFnZXNzIiwgMzAwMDAwICksCiAgICAgICAgICAgIHRpdGxlX3R5cGUoICJTcXVp cmUiLCAiU3F1aXJlc3MiLCAzMDAwMDAgKSwKICAgICAgICAgICAgdGl0bGVfdHlwZSggIlJlc3Vy cmVjdG9yIiwgIlJlc3VycmVjdGVzcyIsIDMwMDAwMCApLAogICAgICAgICAgICB0aXRsZV90eXBl KCAiQXBvc3RsZSIsICJIaWdoIFByaWVzdGVzcyIsIDMwMDAwMCApLAogICAgICAgICAgICB0aXRs ZV90eXBlKCAiSG9seSBGYXRoZXIiLCAiSG9seSBNb3RoZXIiLCAzMDAwMDAgKSwKICAgICAgICAg ICAgdGl0bGVfdHlwZSggIkFsdGFyYm95IiwgIkFsdGFyZ2lybCIsIDMwMDAwMCApLAogICAgICAg ICAgICB0aXRsZV90eXBlKCAiU2FuY3RvciIsICJTYW5jdG9yZXNzIiwgMzAwMDAwICksCiAgICAg ICAgICAgIHRpdGxlX3R5cGUoICJEZWFuIiwgIkRlYW5lc3MiLCAzMDAwMDAgKSwKICAgICAgICAg ICAgdGl0bGVfdHlwZSggIlBhc3RvciIsICJQYXN0b3Jlc3MiLCAzMDAwMDAgKSwKICAgICAgICAg ICAgdGl0bGVfdHlwZSggIkNvbmZlc3NvciIsICJDb25mZXNzb3Jlc3MiLCAzMDAwMDAgKSwKICAg ICAgICAgICAgdGl0bGVfdHlwZSggIkRpdmluZSIsICJEaXZpbmVzcyIsIDMwMDAwMCApLAogICAg ICAgICAgICB0aXRsZV90eXBlKCAiUHJlYWNoZXIiLCAiUHJlYWNoZXJlc3MiLCAzMDAwMDAgKSwK ICAgICAgICAgICAgdGl0bGVfdHlwZSggIlBvbnRpZmYiLCAiUG9udGlmZmVzcyIsIDMwMDAwMCAp LAogICAgICAgICAgICB0aXRsZV90eXBlKCAiUmVqdXZlbmF0b3IiLCAiUmVqdXZlbmF0b3IiLCAz MDAwMDAgKSwKICAgICAgICAgICAgdGl0bGVfdHlwZSggIlNhaW50IiwgIlNhaW50IiwgMzAwMDAw ICksCiAgICAgICAgICAgIHRpdGxlX3R5cGUoICJXb3JzaGlwZXIiLCAiV29yc2hpcGVzcyIsIDMw MDAwMCApLAogICAgICAgICAgICB0aXRsZV90eXBlKCAiQW5pbWF0b3IiLCAiQW5pbWF0b3Jlc3Mi LCAzMDAwMDAgKSwKICAgICAgICAgICAgdGl0bGVfdHlwZSggIkNob2lyYm95IiwgIkNob2lyZ2ly bCIsIDMwMDAwMCApLAogICAgICAgICAgICB0aXRsZV90eXBlKCAiR3VydSIsICJHdXJ1IiwgMzAw MDAwICksCiAgICAgICAgICAgIHRpdGxlX3R5cGUoICJDaHVyY2htYW4iLCAiQ2h1cmNobGFkeSIs IDMwMDAwMCApLAogICAgICAgICAgICB0aXRsZV90eXBlKCAiTGlmZXNhdmVyIiwgIkxpZmVzYXZl ciIsIDMwMDAwMCApLAogICAgICAgICAgICB0aXRsZV90eXBlKCAiUHJvcGhldCIsICJQcm9waGV0 ZXNzIiwgMzAwMDAwICksCiAgICAgICAgICAgIHRpdGxlX3R5cGUoICJCZWFkc21hbiIsICJCZWFk c3dvbWFuIiwgMzAwMDAwICksCiAgICAgICAgICAgIHRpdGxlX3R5cGUoICJTcGlyaXR1YWwgSGVh bGVyIiwgIlNwaXJpdHVhbCBIZWFsZXNzIiwgMzAwMDAwICksCiAgICAgICAgICAgIHRpdGxlX3R5 cGUoICJSZXBlbnRvciIsICJSZXBlbnRlc3MiLCAzMDAwMDAgKSwKICAgICAgICAgICAgdGl0bGVf dHlwZSggIkRpc2NpcGxlIiwgIkRpc2NpcGxlc3MiLCAzMDAwMDAgKSwKICAgICAgICAgICAgdGl0 bGVfdHlwZSggIkJpc2hvcCIsICJMYWR5IEJpc2hvcCIsIDMwMDAwMCApLAogICAgICAgICAgICB0 aXRsZV90eXBlKCAiQXJjaCBCaXNob3AiLCAiQXJjaGxhZHkgQmlzaG9wIiwgMzAwMDAwICksCiAg ICAgICAgICAgIHRpdGxlX3R5cGUoICJQYXRyaWFyY2giLCAiTWF0cmlhcmNoIiwgMzAwMDAwICks CiAgICAgICAgICAgIHRpdGxlX3R5cGUoICJBc3Npc3RhbnQgUG9wZSIsICJTaXN0ZXIiLCAzMDAw MDAgKSwKICAgICAgICAgICAgdGl0bGVfdHlwZSggIlBvcGUiLCAiR3JhbmQgTnVubmUiLCAzMDAw MDAgKSwKICAgICAgICAgICAgdGl0bGVfdHlwZSggIlN1cHJlbWUgUG9wZSIsICJNb3RoZXIgU3Vw ZXJpb3IiLCAxMDAwMDAwICksCiAgICAgICAgICAgIHRpdGxlX3R5cGUoICJJbW1vcnRhbCBDYXJk aW5hbCIsICJJbW1vcnRhbCBQcmllc3Rlc3MiLCAxNTAwMDAwMCApLAogICAgICAgICAgICB0aXRs ZV90eXBlKCAiSW1tb3J0YWwgQ2FyZGluYWwiLCAiSW1tb3J0YWwgUHJpZXN0ZXNzIiwgMTAwMDAw MCApLAogICAgICAgICAgICB0aXRsZV90eXBlKCAiSW1tb3J0YWwgQ2FyZGluYWwiLCAiSW1tb3J0 YWwgUHJpZXN0ZXNzIiwgMTAwMDAwMCApLAogICAgICAgICAgICB0aXRsZV90eXBlKCAiSW1tb3J0 YWwgQ2FyZGluYWwiLCAiSW1tb3J0YWwgUHJpZXN0ZXNzIiwgMTAwMDAwMCApLAogICAgICAgICAg ICB0aXRsZV90eXBlKCAiSW1tb3J0YWwgQ2FyZGluYWwiLCAiSW1tb3J0YWwgUHJpZXN0ZXNzIiwg MTAwMDAwMCApLAogICAgICAgICAgICB0aXRsZV90eXBlKCAiSW1tb3J0YWwgQ2FyZGluYWwiLCAi SW1tb3J0YWwgUHJpZXN0ZXNzIiwgMTAwMDAwMCApLAogICAgICAgICAgICB0aXRsZV90eXBlKCAi SW5xdWlzaXRvciIsICJJbnF1aXNpdHJlc3MiLCAxMDAwMDAwICksCiAgICAgICAgICAgIHRpdGxl X3R5cGUoICJHb2QiLCAiR29kZGVzcyIsIDEwMDAwMDAgKSwKICAgICAgICAgICAgdGl0bGVfdHlw ZSggIkltcGxlbWVudG9yIiwgIkltcGxlbWVudHJlc3MiLCAxMDAwMDAwICksCiAgICAgICAgICAg IHRpdGxlX3R5cGUoICJJbXBsZW1lbnRvciIsICJJbXBsZW1lbnRyZXNzIiwgMTAwMDAwMCApCiAg ICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIHRpdGxlX3R5cGUoICJNYW4iLCAiV29tYW4i LCAwICksCiAgICAgICAgICAgIHRpdGxlX3R5cGUoICJTd29yZHB1cGlsIiwgIlN3b3JkcHVwaWwi LCAxICksCiAgICAgICAgICAgIHRpdGxlX3R5cGUoICJSZWNydWl0IiwgIlJlY3J1aXQiLCAxOTk5 ICksCiAgICAgICAgICAgIHRpdGxlX3R5cGUoICJTZW50cnkiLCAiU2VudHJlc3MiLCAyMDAwICks CiAgICAgICAgICAgIHRpdGxlX3R5cGUoICJGaWdodGVyIiwgIkZpZ2h0ZXIiLCA0MDAwICksCiAg ICAgICAgICAgIHRpdGxlX3R5cGUoICJTb2xkaWVyIiwgIlNvbGRpZXIiLCA4MDAwICksCiAgICAg ICAgICAgIHRpdGxlX3R5cGUoICJXYXJyaW9yIiwgIldhcnJpb3IiLCAxNjAwMCApLAogICAgICAg ICAgICB0aXRsZV90eXBlKCAiVmV0ZXJhbiIsICJWZXRlcmFuIiwgMzIwMDAgKSwKICAgICAgICAg ICAgdGl0bGVfdHlwZSggIlN3b3Jkc21hbiIsICJTd29yZHN3b21hbiIsIDYxMDAwICksCiAgICAg ICAgICAgIHRpdGxlX3R5cGUoICJGZW5jZXIiLCAiRmVuY2VyZXNzIiwgMTI1MDAwICksCiAgICAg ICAgICAgIHRpdGxlX3R5cGUoICJDb21iYXRhbnQiLCAiQ29tYmF0cml4IiwgMjUwMDAwICksCiAg ICAgICAgICAgIHRpdGxlX3R5cGUoICJIZXJvIiwgIkhlcm9pbmUiLCAyNTAwMDAgKSwKICAgICAg ICAgICAgdGl0bGVfdHlwZSggIk15cm1pZG9uIiwgIk15cm1pZG9uIiwgMjUwMDAwICksCiAgICAg ICAgICAgIHRpdGxlX3R5cGUoICJTd2FzaGJ1Y2tsZXIiLCAiU3dhc2hidWNrbGVyZXNzIiwgMjUw MDAwICksCiAgICAgICAgICAgIHRpdGxlX3R5cGUoICJNZXJjZW5hcnkiLCAiTWVyY2VuYXJlc3Mi LCAyNTAwMDAgKSwKICAgICAgICAgICAgdGl0bGVfdHlwZSggIlN3b3JkbWFzdGVyIiwgIlN3b3Jk bWlzdHJlc3MiLCAyNTAwMDAgKSwKICAgICAgICAgICAgdGl0bGVfdHlwZSggIkNvbXBldGl0b3Ii LCAiQ29tcGV0aXRvcmVzcyIsIDI1MDAwMCApLAogICAgICAgICAgICB0aXRsZV90eXBlKCAiQ2hh bXBpb24iLCAiTGFkeSBDaGFtcGlvbiIsIDI1MDAwMCApLAogICAgICAgICAgICB0aXRsZV90eXBl KCAiRHJhZ29vbiIsICJMYWR5IERyYWdvb24iLCAyNTAwMDAgKSwKICAgICAgICAgICAgdGl0bGVf dHlwZSggIkNhdmFsaWVyIiwgIkNhdmFsaWVyIiwgMjUwMDAwICksCiAgICAgICAgICAgIHRpdGxl X3R5cGUoICJTYWJyZXVyIiwgIlNhYnJldXJlc3MiLCAzNTAwMDAgKSwKICAgICAgICAgICAgdGl0 bGVfdHlwZSggIkFzc2FpbGFudCIsICJBc3NhaWxhbnQiLCAzNTAwMDAgKSwKICAgICAgICAgICAg dGl0bGVfdHlwZSggIk1pbmktVGFuayIsICJNaW5pLVRhbmtlc3MiLCAzNTAwMDAgKSwKICAgICAg ICAgICAgdGl0bGVfdHlwZSggIlRyb29wZXIiLCAiTGFkeXRyb29wZXIiLCAzNTAwMDAgKSwKICAg ICAgICAgICAgdGl0bGVfdHlwZSggIk1haW1lciIsICJNYWltZXNzIiwgMzUwMDAwICksCiAgICAg ICAgICAgIHRpdGxlX3R5cGUoICJCdXRjaGVyIiwgIkJ1dGNoZXNzIiwgMzUwMDAwICksCiAgICAg ICAgICAgIHRpdGxlX3R5cGUoICJTbGF5ZXIiLCAiU2xheWVyIiwgMzUwMDAwICksCiAgICAgICAg ICAgIHRpdGxlX3R5cGUoICJHbGFkaWF0b3IiLCAiTGFkeSBHbGFkaWF0b3IiLCAzNTAwMDAgKSwK ICAgICAgICAgICAgdGl0bGVfdHlwZSggIkFtYXpvbiIsICJBbWF6b24iLCAzNTAwMDAgKSwKICAg ICAgICAgICAgdGl0bGVfdHlwZSggIlByaXZhdGUiLCAiUHJpdmF0ZSIsIDM1MDAwMCApLAogICAg ICAgICAgICB0aXRsZV90eXBlKCAiQnJ1aXNlciIsICJCcnVpc2VyIiwgMzUwMDAwICksCiAgICAg ICAgICAgIHRpdGxlX3R5cGUoICJPZmZpY2VyIiwgIk9mZmljZXIiLCAzNTAwMDAgKSwKICAgICAg ICAgICAgdGl0bGVfdHlwZSggIkxhbmNlciIsICJMYW5jZXIiLCAzNTAwMDAgKSwKICAgICAgICAg ICAgdGl0bGVfdHlwZSggIk11c2tldGVlciIsICJNdXNrZXRlc3MiLCAzNTAwMDAgKSwKICAgICAg ICAgICAgdGl0bGVfdHlwZSggIkd1bm5lciIsICJHdW5uZXNzIiwgMzUwMDAwICksCiAgICAgICAg ICAgIHRpdGxlX3R5cGUoICJUYW5rIiwgIlRhbmsiLCAzNTAwMDAgKSwKICAgICAgICAgICAgdGl0 bGVfdHlwZSggIkRlc3Ryb3llciIsICJEZXN0cm95ZXIiLCAzNTAwMDAgKSwKICAgICAgICAgICAg dGl0bGVfdHlwZSggIlNlcmdlYW50IiwgIlNlcmdlYW50IiwgMzUwMDAwICksCiAgICAgICAgICAg IHRpdGxlX3R5cGUoICJHdWFyZCIsICJHdWFyZCIsIDM1MDAwMCApLAogICAgICAgICAgICB0aXRs ZV90eXBlKCAiTGlldXRlbmFudCIsICJMaWV1dGVuYW50IiwgMzUwMDAwICksCiAgICAgICAgICAg IHRpdGxlX3R5cGUoICJTbWFzaGVyIiwgIlNtYXNoZXNzIiwgMzUwMDAwICksCiAgICAgICAgICAg IHRpdGxlX3R5cGUoICJLaWNrYm94ZXIiLCAiS2lja2JveGVyIiwgMzUwMDAwICksCiAgICAgICAg ICAgIHRpdGxlX3R5cGUoICJDcmVtYXRvciIsICJDcmVtYXRvciIsIDM1MDAwMCApLAogICAgICAg ICAgICB0aXRsZV90eXBlKCAiRXh0ZXJtaW5hdG9yIiwgIlNjcmF0Y2hlciIsIDM1MDAwMCApLAog ICAgICAgICAgICB0aXRsZV90eXBlKCAiQmFyYmFyaWFuIiwgIkJhcmJhcmlhbiBXb21hbiIsIDM1 MDAwMCApLAogICAgICAgICAgICB0aXRsZV90eXBlKCAiQ2FwdGFpbiIsICJDYXB0YWluIiwgMzUw MDAwICksCiAgICAgICAgICAgIHRpdGxlX3R5cGUoICJDb21tYW5kZXIiLCAiQ29tbWFuZGVyIiwg MzUwMDAwICksCiAgICAgICAgICAgIHRpdGxlX3R5cGUoICJLbmlnaHQgQXBwcmVudGljZSIsICJR dWVlbktvbmciLCAzNTAwMDAgKSwKICAgICAgICAgICAgdGl0bGVfdHlwZSggIldoaXRlIEtuaWdo dCIsICJCdXRjaCIsIDM1MDAwMCApLAogICAgICAgICAgICB0aXRsZV90eXBlKCAiQmxhY2sgS25p Z2h0IiwgIlByb3RlY3RvcmVzcyIsIDM1MDAwMCApLAogICAgICAgICAgICB0aXRsZV90eXBlKCAi R3JhbmQgS25pZ2h0IiwgIlByaW5jZXNzIiwgMTAwMDAwMCApLAogICAgICAgICAgICB0aXRsZV90 eXBlKCAiSW1tb3J0YWwiLCAiSW1tb3J0YWwiLCAxNTAwMDAwMDAgKSwKICAgICAgICAgICAgdGl0 bGVfdHlwZSggIkltbW9ydGFsIiwgIkltbW9ydGFsIiwgMTAwMDAwMCApLAogICAgICAgICAgICB0 aXRsZV90eXBlKCAiSW1tb3J0YWwiLCAiSW1tb3J0YWwiLCAxMDAwMDAwICksCiAgICAgICAgICAg IHRpdGxlX3R5cGUoICJJbW1vcnRhbCIsICJJbW1vcnRhbCIsIDEwMDAwMDAgKSwKICAgICAgICAg ICAgdGl0bGVfdHlwZSggIkltbW9ydGFsIiwgIkltbW9ydGFsIiwgMTAwMDAwMCApLAogICAgICAg ICAgICB0aXRsZV90eXBlKCAiSW1tb3J0YWwiLCAiSW1tb3J0YWwiLCAxMDAwMDAwICksCiAgICAg ICAgICAgIHRpdGxlX3R5cGUoICJFeHRpcnBhdG9yIiwgIlF1ZWVuIiwgMTAwMDAwMCApLAogICAg ICAgICAgICB0aXRsZV90eXBlKCAiR29kIiwgIkdvZGRlc3MiLCAxMDAwMDAwICksCiAgICAgICAg ICAgIHRpdGxlX3R5cGUoICJJbXBsZW1lbnRvciIsICJJbXBsZW1lbnRyZXNzIiwgMTAwMDAwMCAp LAogICAgICAgICAgICB0aXRsZV90eXBlKCAiSW1wbGVtZW50b3IiLCAiSW1wbGVtZW50cmVzcyIs IDEwMDAwMDAgKQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICB0aXRsZV90eXBlKCAi TWFuIiwgIldvbWFuIiwgMCApLAogICAgICAgICAgICB0aXRsZV90eXBlKCAiUGlsZmVyZXIiLCAi UGlsZmVyZXNzIiwgMSApLAogICAgICAgICAgICB0aXRsZV90eXBlKCAiRm9vdHBhZCIsICJGb290 cGFkIiwgMTI0OSApLAogICAgICAgICAgICB0aXRsZV90eXBlKCAiRmlsY2hlciIsICJGaWxjaGVy ZXNzIiwgMTI1MCApLAogICAgICAgICAgICB0aXRsZV90eXBlKCAiUGljay1Qb2NrZXQiLCAiUGlj ay1Qb2NrZXQiLCAyNTAwICksCiAgICAgICAgICAgIHRpdGxlX3R5cGUoICJTbmVhayIsICJTbmVh ayIsIDUwMDAgKSwKICAgICAgICAgICAgdGl0bGVfdHlwZSggIlBpbmNoZXIiLCAiUGluY2hlcmVz cyIsIDEwMDAwICksCiAgICAgICAgICAgIHRpdGxlX3R5cGUoICJDdXQtUHVyc2UiLCAiQ3V0LVB1 cnNlIiwgMTAwMDAgKSwKICAgICAgICAgICAgdGl0bGVfdHlwZSggIlNuYXRjaGVyIiwgIlNuYXRj aGVyZXNzIiwgMzAwMDAgKSwKICAgICAgICAgICAgdGl0bGVfdHlwZSggIlNoYXJwZXIiLCAiU2hh cnBlciIsIDQwMDAwICksCiAgICAgICAgICAgIHRpdGxlX3R5cGUoICJSb2d1ZSIsICJSb2d1ZSIs IDQwMDAwICksCiAgICAgICAgICAgIHRpdGxlX3R5cGUoICJSb2JiZXIiLCAiUm9iYmVyIiwgNjAw MDAgKSwKICAgICAgICAgICAgdGl0bGVfdHlwZSggIk1hZ3NtYW4iLCAiTWFnc3dvbWFuIiwgMTQw MDAwICksCiAgICAgICAgICAgIHRpdGxlX3R5cGUoICJIaWdod2F5bWFuIiwgIkhpZ2h3YXl3b21h biIsIDIyMDAwMCApLAogICAgICAgICAgICB0aXRsZV90eXBlKCAiQnVyZ2xhciIsICJCdXJnbGFy ZXNzIiwgMjIwMDAwICksCiAgICAgICAgICAgIHRpdGxlX3R5cGUoICJUaGllZiIsICJUaGllZiIs IDIyMDAwMCApLAogICAgICAgICAgICB0aXRsZV90eXBlKCAiS25pZmVyIiwgIktuaWZlciIsIDIw MDAwMCApLAogICAgICAgICAgICB0aXRsZV90eXBlKCAiUXVpY2stQmxhZGUiLCAiUXVpY2stQmxh ZGUiLCAzMDAwMDAgKSwKICAgICAgICAgICAgdGl0bGVfdHlwZSggIktpbGxlciIsICJNdXJkZXJl c3MiLCAzMDAwMDAgKSwKICAgICAgICAgICAgdGl0bGVfdHlwZSggIkJyaWdhbmQiLCAiQnJpZ2Fu ZCIsIDMwMDAwMCApLAogICAgICAgICAgICB0aXRsZV90eXBlKCAiQ3V0LVRocm9hdCIsICJDdXQt VGhyb2F0IiwgMzAwMDAwICksCiAgICAgICAgICAgIHRpdGxlX3R5cGUoICJTY291dCIsICJTY291 dGVzcyIsIDMwMDAwMCApLAogICAgICAgICAgICB0aXRsZV90eXBlKCAiU2hvcGxpZnRlciIsICJT aG9wbGlmdGVyIiwgMzAwMDAwICksCiAgICAgICAgICAgIHRpdGxlX3R5cGUoICJNYXJhdWRlciIs ICJNYXJhdWRlcmVzcyIsIDMwMDAwMCApLAogICAgICAgICAgICB0aXRsZV90eXBlKCAiUG9hY2hl ciIsICJQb2FjaGVzcyIsIDMwMDAwMCApLAogICAgICAgICAgICB0aXRsZV90eXBlKCAiU211Z2ds ZXIiLCAiU211Z2dsZXIiLCAzMDAwMDAgKSwKICAgICAgICAgICAgdGl0bGVfdHlwZSggIlN3aW5k bGVyIiwgIlN3aW5kbGVyIiwgMzAwMDAwICksCiAgICAgICAgICAgIHRpdGxlX3R5cGUoICJGYWxj b24iLCAiRmFsY29uZXNzIiwgMzAwMDAwICksCiAgICAgICAgICAgIHRpdGxlX3R5cGUoICJCYW5k aXQiLCAiTGFkeSBCYW5kaXQiLCAzMDAwMDAgKSwKICAgICAgICAgICAgdGl0bGVfdHlwZSggIlRo dWciLCAiVGh1Z2dlc3MiLCAzMDAwMDAgKSwKICAgICAgICAgICAgdGl0bGVfdHlwZSggIldlbGNo ZXIiLCAiV2VsY2hlciIsIDMwMDAwMCApLAogICAgICAgICAgICB0aXRsZV90eXBlKCAiQ3Jvb2si LCAiQ3Jvb2siLCAzMDAwMDAgKSwKICAgICAgICAgICAgdGl0bGVfdHlwZSggIkNvbi1hcnRpc3Qi LCAiQ29uLWFydGlzdCIsIDMwMDAwMCApLAogICAgICAgICAgICB0aXRsZV90eXBlKCAiRmVsb24i LCAiRmVsb24iLCAzMDAwMDAgKSwKICAgICAgICAgICAgdGl0bGVfdHlwZSggIlJ1bm5lciIsICJS dW5uZXIiLCAzMDAwMDAgKSwKICAgICAgICAgICAgdGl0bGVfdHlwZSggIkNvbmNlYWxlciIsICJD b25jZWFsZXNzIiwgMzAwMDAwICksCiAgICAgICAgICAgIHRpdGxlX3R5cGUoICJFc2NhcGVlIiwg IkVzY2FwZXNzIiwgMzAwMDAwICksCiAgICAgICAgICAgIHRpdGxlX3R5cGUoICJTd2l0Y2hibGFk ZSIsICJTd2l0Y2hibGFkZSIsIDMwMDAwMCApLAogICAgICAgICAgICB0aXRsZV90eXBlKCAiRnJh dWQiLCAiRnJhdWRlc3MiLCAzMDAwMDAgKSwKICAgICAgICAgICAgdGl0bGVfdHlwZSggIkZvcmdl ciIsICJGb3JnZXIiLCAzMDAwMDAgKSwKICAgICAgICAgICAgdGl0bGVfdHlwZSggIktpZG5hcHBl ciIsICJLaWRuYXBwZXIiLCAzMDAwMDAgKSwKICAgICAgICAgICAgdGl0bGVfdHlwZSggIlBpbGFn ZXIiLCAiUGlsYWdlciIsIDMwMDAwMCApLAogICAgICAgICAgICB0aXRsZV90eXBlKCAiQmxhY2tt YWlsZXIiLCAiQmxhY2ttYWlsZXIiLCAzMDAwMDAgKSwKICAgICAgICAgICAgdGl0bGVfdHlwZSgg IlBpcmF0ZSIsICJQaXJhdGVzcyIsIDMwMDAwMCApLAogICAgICAgICAgICB0aXRsZV90eXBlKCAi QnVjY2FuZWVyIiwgIkJ1Y2NhbmVlciIsIDMwMDAwMCApLAogICAgICAgICAgICB0aXRsZV90eXBl KCAiRGVhZGV5ZSIsICJEZWFkZXllIiwgMzAwMDAwICksCiAgICAgICAgICAgIHRpdGxlX3R5cGUo ICJFbWJlenpsZXIiLCAiRW1iZXp6bGVyIiwgMzAwMDAwICksCiAgICAgICAgICAgIHRpdGxlX3R5 cGUoICJSZW5lZ2FkZSIsICJSZW5lZ2FkZSIsIDMwMDAwMCApLAogICAgICAgICAgICB0aXRsZV90 eXBlKCAiTG9ja3NtaXRoIiwgIkxvY2tzbWl0aCIsIDMwMDAwMCApLAogICAgICAgICAgICB0aXRs ZV90eXBlKCAiQmFja3N0YWJiZXIiLCAiQmFja3N0YWJiZXIiLCAzMDAwMDAgKSwKICAgICAgICAg ICAgdGl0bGVfdHlwZSggIkdyYW5kIEFzc2Fzc2luIiwgIkdyYW5kIEFzc2Fzc2luIiwgMTAwMDAw MCApLAogICAgICAgICAgICB0aXRsZV90eXBlKCAiSW1tb3J0YWwgQXNzYXNpbiIsICJJbW1vcnRh bCBBc3Nhc2luIiwgMTUwMDAwMDAwICksCiAgICAgICAgICAgIHRpdGxlX3R5cGUoICJJbW1vcnRh bCBBc3Nhc2luIiwgIkltbW9ydGFsIEFzc2FzaW4iLCAxMDAwMDAwICksCiAgICAgICAgICAgIHRp dGxlX3R5cGUoICJJbW1vcnRhbCBBc3Nhc2luIiwgIkltbW9ydGFsIEFzc2FzaW4iLCAxMDAwMDAw ICksCiAgICAgICAgICAgIHRpdGxlX3R5cGUoICJJbW1vcnRhbCBBc3Nhc2luIiwgIkltbW9ydGFs IEFzc2FzaW4iLCAxMDAwMDAwICksCiAgICAgICAgICAgIHRpdGxlX3R5cGUoICJJbW1vcnRhbCBB c3Nhc2luIiwgIkltbW9ydGFsIEFzc2FzaW4iLCAxMDAwMDAwICksCiAgICAgICAgICAgIHRpdGxl X3R5cGUoICJJbW1vcnRhbCBBc3Nhc2luIiwgIkltbW9ydGFsIEFzc2FzaW4iLCAxMDAwMDAwICks CiAgICAgICAgICAgIHRpdGxlX3R5cGUoICJEZW1pIEdvZCIsICJEZW1pIEdvZGRlc3MiLCAxMDAw MDAwICksCiAgICAgICAgICAgIHRpdGxlX3R5cGUoICJHb2QiLCAiR29kZGVzcyIsIDEwMDAwMDAg KSwKICAgICAgICAgICAgdGl0bGVfdHlwZSggIkltcGxlbWVudG9yIiwgIkltcGxlbWVudHJpeCIs IDEwMDAwMDAgKSwKICAgICAgICAgICAgdGl0bGVfdHlwZSggIkltcGxlbWVudG9yIiwgIkltcGxl bWVudHJpeCIsIDEwMDAwMDAgKQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICB0aXRs ZV90eXBlKCAiTWFuIiwgIldvbWFuIiwgMCApLAogICAgICAgICAgICB0aXRsZV90eXBlKCAiSG9s eSBCZWxpZXZlciIsICJIb2x5IEJlbGlldmVyIiwgMSApLAogICAgICAgICAgICB0aXRsZV90eXBl KCAiUGFnZSIsICJQYWdlIiwgMzk5OSApLAogICAgICAgICAgICB0aXRsZV90eXBlKCAiR2FsbGFu dCIsICJHYWxsYW50IiwgNDAwMCApLAogICAgICAgICAgICB0aXRsZV90eXBlKCAiU3F1aXJlIiwg IlNxdWlyZSIsIDgwMDAgKSwKICAgICAgICAgICAgdGl0bGVfdHlwZSggIktlZXBlciIsICJLZWVw ZXIiLCAxNjAwMCApLAogICAgICAgICAgICB0aXRsZV90eXBlKCAiSG9seSBQYWdlIiwgIkhvbHkg UGFnZSIsIDMyMDAwICksCiAgICAgICAgICAgIHRpdGxlX3R5cGUoICJXYXJkZXIiLCAiV2FyZGVz cyIsIDY0MDAwICksCiAgICAgICAgICAgIHRpdGxlX3R5cGUoICJIb2x5IFNxdWlyZSIsICJIb2x5 IFNxdWlyZSIsIDEyMjAwMCApLAogICAgICAgICAgICB0aXRsZV90eXBlKCAiQ3Jvc3MgQmVhcmVy IiwgIkNyb3NzIEJlYXJlciIsIDI1MDAwMCApLAogICAgICAgICAgICB0aXRsZV90eXBlKCAiQXBw cmVudGljZSBLbmlnaHQiLCAiQXBwcmVudGljZSBLbmlnaHQiLCAzMDAwMDAgKSwKICAgICAgICAg ICAgdGl0bGVfdHlwZSggIkRyYWdvb24iLCAiRHJhZ29vbiIsIDMwMDAwMCApLAogICAgICAgICAg ICB0aXRsZV90eXBlKCAiTGFuY2VyIiwgIkxhbmNlciIsIDQwMDAwMCApLAogICAgICAgICAgICB0 aXRsZV90eXBlKCAiTG9jYWwgSGVybyIsICJMb2NhbCBIZXJvaW5lIiwgNDAwMDAwICksCiAgICAg ICAgICAgIHRpdGxlX3R5cGUoICJEZWZlbmRlciBvZiB0aGUgQ3Jvc3MiLAogICAgICAgICAgICAg ICJEZWZlbmRlciBvZiB0aGUgQ3Jvc3MiLCA0MDAwMDAgKSwKICAgICAgICAgICAgdGl0bGVfdHlw ZSggIkNodXJjaCBHdWFyZHNtYW4iLCAiQ2h1cmNoIEd1YXJkc3dvbWFuIiwgNDAwMDAwICksCiAg ICAgICAgICAgIHRpdGxlX3R5cGUoICJDaGFtcGlvbiBvZiB0aGUgQ3Jvc3MiLAogICAgICAgICAg ICAgICJDaGFtcGlvbiBvZiB0aGUgQ3Jvc3MiLCA0MDAwMDAgKSwKICAgICAgICAgICAgdGl0bGVf dHlwZSggIldhcnJpb3Igb2YgSnVzdGljZSIsICJXYXJyaW9yIG9mIEp1c3RpY2UiLCA0MDAwMDAg KSwKICAgICAgICAgICAgdGl0bGVfdHlwZSggIkNhdmFsaWVyIiwgIkNhdmFsaWVyZXNzIiwgNDAw MDAwICksCiAgICAgICAgICAgIHRpdGxlX3R5cGUoICJIb2x5IEhlcm8iLCAiSG9seSBIZXJvaW5l IiwgNDAwMDAwICksCiAgICAgICAgICAgIHRpdGxlX3R5cGUoICJKdXN0aWNhciIsICJKdXN0aWNh cmVzcyIsIDQwMDAwMCApLAogICAgICAgICAgICB0aXRsZV90eXBlKCAiU2VhcmNoZXIiLCAiU2Vh cmNoZXIiLCA0MDAwMDAgKSwKICAgICAgICAgICAgdGl0bGVfdHlwZSggIkhvbHkgV2FycmlvciIs ICJIb2x5IFdhcnJpb3IiLCA0MDAwMDAgKSwKICAgICAgICAgICAgdGl0bGVfdHlwZSggIkxhd2tl ZXBlciIsICJMYXdrZWVwZXIiLCA0MDAwMDAgKSwKICAgICAgICAgICAgdGl0bGVfdHlwZSggIktu aWdodCBvZiB0aGUgQ2h1cmNoIiwKICAgICAgICAgICAgICAiS25pZ2h0IG9mIHRoZSBDaHVyY2gi LCA0MDAwMDAgKSwKICAgICAgICAgICAgdGl0bGVfdHlwZSggIkhvbHkgQ29tYmF0YW50IiwgIkhv bHkgQ29tYmF0YW50IiwgNDAwMDAwICksCiAgICAgICAgICAgIHRpdGxlX3R5cGUoICJNeXJtaWRv biIsICJNeXJtaWRvbiIsIDQwMDAwMCApLAogICAgICAgICAgICB0aXRsZV90eXBlKCAiWmVhbG90 IiwgIlplYWxvdCIsIDQwMDAwMCApLAogICAgICAgICAgICB0aXRsZV90eXBlKCAiUGVhY2UgS2Vl cGVyIiwgIlBlYWNlIEtlZXBlciIsIDQwMDAwMCApLAogICAgICAgICAgICB0aXRsZV90eXBlKCAi S25pZ2h0IG9mIEp1c3RpY2UiLCAiS25pZ2h0IG9mIEp1c3RpY2UiLCA0MDAwMDAgKSwKICAgICAg ICAgICAgdGl0bGVfdHlwZSggIkNydXNhZG8iLCAiQ3J1c2FkbyIsIDQwMDAwMCApLAogICAgICAg ICAgICB0aXRsZV90eXBlKCAiS25pZ2h0IG9mIHRoZSBQZW9wbGUiLAogICAgICAgICAgICAgICJL bmlnaHQgb2YgdGhlIFBlb3BsZSIsIDQwMDAwMCApLAogICAgICAgICAgICB0aXRsZV90eXBlKCAi RHJhZ29uIFNsYXllciIsICJEcmFnb24gU2xheWVyIiwgNDAwMDAwICksCiAgICAgICAgICAgIHRp dGxlX3R5cGUoICJQZWFjZSBNYWtlciIsICJQZWFjZSBNYWtlciIsIDQwMDAwMCApLAogICAgICAg ICAgICB0aXRsZV90eXBlKCAiSG9seSBLbmlnaHQiLCAiSG9seSBLbmlnaHQiLCA0MDAwMDAgKSwK ICAgICAgICAgICAgdGl0bGVfdHlwZSggIldhcnJpb3Igb2YgdGhlIFByaWVzdHMiLAogICAgICAg ICAgICAgICJXYXJyaW9yIG9mIHRoZSBQcmllc3RzIiwgNDAwMDAwICksCiAgICAgICAgICAgIHRp dGxlX3R5cGUoICJRdWVzdG9yIiwgIlF1ZXN0b3IiLCA0MDAwMDAgKSwKICAgICAgICAgICAgdGl0 bGVfdHlwZSggIktuaWdodCBvZiB0aGUgUHJpZXN0cyIsCiAgICAgICAgICAgICAgIktuaWdodCBv ZiB0aGUgUHJpZXN0cyIsIDQwMDAwMCApLAogICAgICAgICAgICB0aXRsZV90eXBlKCAiTGF3Z2l2 ZXIiLCAiTGF3Z2l2ZXIiLCA0MDAwMDAgKSwKICAgICAgICAgICAgdGl0bGVfdHlwZSggIlZpY3Rv ciIsICJWaWN0b3IiLCA0MDAwMDAgKSwKICAgICAgICAgICAgdGl0bGVfdHlwZSggIlByb3RlY3Rv ciBvZiB0aGUgQ2h1cmNoIiwKICAgICAgICAgICAgICAiUHJvdGVjdG9yIG9mIHRoZSBDaHVyY2gi LCA0MDAwMDAgKSwKICAgICAgICAgICAgdGl0bGVfdHlwZSggIlByb3RlY3RvciBvZiB0aGUgUHJp ZXN0cyIsCiAgICAgICAgICAgICAgIlByb3RlY3RvciBvZiB0aGUgUHJpZXN0cyIsIDQwMDAwMCAp LAogICAgICAgICAgICB0aXRsZV90eXBlKCAiSG9seSBDcnVzYWRlciIsICJIb2x5IENydXNhZGVy IiwgNDAwMDAwICksCiAgICAgICAgICAgIHRpdGxlX3R5cGUoICJQYWxhZGluIiwgIlBhbGFkaW4i LCA0MDAwMDAgKSwKICAgICAgICAgICAgdGl0bGVfdHlwZSggIkdyYW5kIEtuaWdodCIsICJHcmFu ZCBLbmlnaHQiLCA0MDAwMDAgKSwKICAgICAgICAgICAgdGl0bGVfdHlwZSggIkdyYW5kIFByb3Rl Y3RvciIsICJHcmFuZCBQcm90ZWN0b3IiLCA0MDAwMDAgKSwKICAgICAgICAgICAgdGl0bGVfdHlw ZSggIkdyYW5kIFBhbGFkaW4iLCAiR3JhbmQgUGFsYWRpbiIsIDQwMDAwMCApLAogICAgICAgICAg ICB0aXRsZV90eXBlKCAiR3JhbmQgUGFsYWRpbiBvZiB0aGUgQ2h1cmNoIiwKICAgICAgICAgICAg ICAiR3JhbmQgUGFsYWRpbiBvZiB0aGUgQ2h1cmNoIiwgNDAwMDAwICksCiAgICAgICAgICAgIHRp dGxlX3R5cGUoICJHcmFuZCBQYWxhZGluIG9mIHRoZSBGYWl0aCIsCiAgICAgICAgICAgICAgIkdy YW5kIFBhbGFkaW4gb2YgdGhlIEZhaXRoIiwgNDAwMDAwICksCiAgICAgICAgICAgIHRpdGxlX3R5 cGUoICJHcmFuZCBQYWxhZGluIG9mIHRoZSBQcmllc3RzIiwKICAgICAgICAgICAgICAiR3JhbmQg UGFsYWRpbiBvZiB0aGUgUHJpZXN0cyIsIDQwMDAwMCApLAogICAgICAgICAgICB0aXRsZV90eXBl KCAiR3JhbmQgUGFsYWRpbiBvZiB0aGUgSG9seSBPcmRlciIsCiAgICAgICAgICAgICAgIkdyYW5k IFBhbGFkaW4gb2YgdGhlIEhvbHkgT3JkZXIiLCAxMDAwMDAwICksCiAgICAgICAgICAgIHRpdGxl X3R5cGUoICJJbW1vcnRhbCIsICJJbW1vcnRhbCIsIDE1MDAwMDAwMCApLAogICAgICAgICAgICB0 aXRsZV90eXBlKCAiSW1tb3J0YWwiLCAiSW1tb3J0YWwiLCAxMDAwMDAwICksCiAgICAgICAgICAg IHRpdGxlX3R5cGUoICJJbW1vcnRhbCIsICJJbW1vcnRhbCIsIDEwMDAwMDAgKSwKICAgICAgICAg ICAgdGl0bGVfdHlwZSggIkltbW9ydGFsIiwgIkltbW9ydGFsIiwgMTAwMDAwMCApLAogICAgICAg ICAgICB0aXRsZV90eXBlKCAiSW1tb3J0YWwiLCAiSW1tb3J0YWwiLCAxMDAwMDAwICksCiAgICAg ICAgICAgIHRpdGxlX3R5cGUoICJJbW1vcnRhbCIsICJJbW1vcnRhbCIsIDEwMDAwMDAgKSwKICAg ICAgICAgICAgdGl0bGVfdHlwZSggIlBhbGFkaW4gRXh0aXJwYXRvciIsICJQYWxhZGluIFF1ZWVu IiwgMTAwMDAwMCApLAogICAgICAgICAgICB0aXRsZV90eXBlKCAiR29kIiwgIkdvZGRlc3MiLCAx MDAwMDAwICksCiAgICAgICAgICAgIHRpdGxlX3R5cGUoICJJbXBsZW1lbnRvciIsICJJbXBsZW1l bnRyZXNzIiwgMTAwMDAwMCApLAogICAgICAgICAgICB0aXRsZV90eXBlKCAiSW1wbGVtZW50b3Ii LCAiSW1wbGVtZW50cmVzcyIsIDEwMDAwMDAgKQogICAgICAgIH0sCiAgICAgICAgewogICAgICAg ICAgICB0aXRsZV90eXBlKCAiTWFuIiwgIldvbWFuIiwgMCApLAogICAgICAgICAgICB0aXRsZV90 eXBlKCAiQmVsaWV2ZXIgb2YgTmF0dXJlIiwgIkJlbGlldmVyIG9mIE5hdHVyZSIsIDEgKSwKICAg ICAgICAgICAgdGl0bGVfdHlwZSggIkFzcGlyYW50IiwgIkFzcGlyYW50IiwgMzk5OSApLAogICAg ICAgICAgICB0aXRsZV90eXBlKCAiSGVyYiBHYXRoZXJlciIsICJIZXJiIEdhdGhlcmVyIiwgMzAw MCApLAogICAgICAgICAgICB0aXRsZV90eXBlKCAiU2hlcGhhcmQiLCAiU2hlcGhhcmRlc3MiLCA2 MDAwICksCiAgICAgICAgICAgIHRpdGxlX3R5cGUoICJOb3ZpY2UgU3RhcmdhemVyIiwgIk5vdmlj ZSBTdGFyZ2F6ZXIiLCAxNTAwMCApLAogICAgICAgICAgICB0aXRsZV90eXBlKCAiR2FyZGVuZXIg b2YgUGxhbnRzIiwgIkdhcmRlbmVyIG9mIFBsYW50cyIsIDMyMDAwICksCiAgICAgICAgICAgIHRp dGxlX3R5cGUoICJWb2ljZSBvZiB0aGUgQW5pbWFscyIsCiAgICAgICAgICAgICAgIlZvaWNlIG9m IHRoZSBBbmltYWxzIiwgNzAwMDAgKSwKICAgICAgICAgICAgdGl0bGVfdHlwZSggIk5vdmljZSBI ZXJiaWxpc3QiLCAiTm92aWNlIEhlcmJpbGlzdCIsIDE0MDAwMCApLAogICAgICAgICAgICB0aXRs ZV90eXBlKCAiQW5pbWFsIEhlYWxlciIsICJBbmltYWwgSGVhbGVyIiwgMjc1MDAwICksCiAgICAg ICAgICAgIHRpdGxlX3R5cGUoICJXZWF0aGVyIFdhdGNoZXIiLCAiV2VhdGhlciBXYXRjaGVyIiwg MzUwMDAwICksCiAgICAgICAgICAgIHRpdGxlX3R5cGUoICJDYXJldGFrZXIgb2YgTmF0dXJlIiwK ICAgICAgICAgICAgICAiQ2FyZXRha2VyIG9mIE5hdHVyZSIsIDM1MDAwMCApLAogICAgICAgICAg ICB0aXRsZV90eXBlKCAiSGVyYmlsaXN0IiwgIkhlcmJpbGlzdCIsIDM1MDAwMCApLAogICAgICAg ICAgICB0aXRsZV90eXBlKCAiTW9vbndhdGNoZXIiLCAiTW9vbndhdGNoZXIiLCAzNTAwMDAgKSwK ICAgICAgICAgICAgdGl0bGVfdHlwZSggIlRyZWUgU3VyZ2VvbiIsICJUcmVlIFN1cmdlb24iLCAz NTAwMDAgKSwKICAgICAgICAgICAgdGl0bGVfdHlwZSggIlNlbmlvciBIZXJiaWxpc3QiLCAiU2Vu aW9yIEhlcmJpbGlzdCIsIDM1MDAwMCApLAogICAgICAgICAgICB0aXRsZV90eXBlKCAiQ2FyZXRh a2VyIG9mIHRoZSBTYWNyZWQgR3JvdmUiLAogICAgICAgICAgICAgICJDYXJldGFrZXIgb2YgdGhl IFNhY3JlZCBHcm92ZSIsIDM1MDAwMCApLAogICAgICAgICAgICB0aXRsZV90eXBlKCAiTWFzdGVy IEhlcmJpbGlzdCIsICJNYXN0ZXIgSGVyYmlsaXN0IiwgMzUwMDAwICksCiAgICAgICAgICAgIHRp dGxlX3R5cGUoICJXb3JzaGlwcGVyIG9mIEZpcmUiLCAiV29yc2hpcHBlciBvZiBGaXJlIiwgMzUw MDAwICksCiAgICAgICAgICAgIHRpdGxlX3R5cGUoICJXb3JzaGlwcGVyIG9mIFdhdGVyIiwKICAg ICAgICAgICAgICAiV29yc2hpcHBlciBvZiBXYXRlciIsIDM1MDAwMCApLAogICAgICAgICAgICB0 aXRsZV90eXBlKCAiV29yc2hpcHBlciBvZiBFYXJ0aCIsCiAgICAgICAgICAgICAgIldvcnNoaXBw ZXIgb2YgRWFydGgiLCAzNTAwMDAgKSwKICAgICAgICAgICAgdGl0bGVfdHlwZSggIldvcnNoaXBw ZXIgb2YgQWlyIiwgIldvcnNoaXBwZXIgb2YgQWlyIiwgMzUwMDAwICksCiAgICAgICAgICAgIHRp dGxlX3R5cGUoICJEcnVpZCBvZiB0aGUgTmlnaHQiLCAiRHJ1aWQgb2YgdGhlIE5pZ2h0IiwgMzUw MDAwICksCiAgICAgICAgICAgIHRpdGxlX3R5cGUoICJEcnVpZCBvZiB0aGUgRGF5IiwgIkRydWlk IG9mIHRoZSBEYXkiLCAzNTAwMDAgKSwKICAgICAgICAgICAgdGl0bGVfdHlwZSggIkRydWlkIG9m IEJpcnRoIiwgIkRydWlkIG9mIEJpcnRoIiwgMzUwMDAwICksCiAgICAgICAgICAgIHRpdGxlX3R5 cGUoICJEcnVpZCBvZiBHcm93dGgiLCAiRHJ1aWQgb2YgR3Jvd3RoIiwgMzUwMDAwICksCiAgICAg ICAgICAgIHRpdGxlX3R5cGUoICJEcnVpZCBvZiBEZWF0aCIsICJEcnVpZCBvZiBEZWF0aCIsIDM1 MDAwMCApLAogICAgICAgICAgICB0aXRsZV90eXBlKCAiRHJ1aWQgb2YgUmViaXJ0aCIsICJEcnVp ZCBvZiBSZWJpcnRoIiwgMzUwMDAwICksCiAgICAgICAgICAgIHRpdGxlX3R5cGUoICJEcnVpZCBv ZiB0aGUgT2FrIiwgIkRydWlkIG9mIHRoZSBPYWsiLCAzNTAwMDAgKSwKICAgICAgICAgICAgdGl0 bGVfdHlwZSggIkRydWlkIG9mIHRoZSBBc2giLCAiRHJ1aWQgb2YgdGhlIEFzaCIsIDM1MDAwMCAp LAogICAgICAgICAgICB0aXRsZV90eXBlKCAiRHJ1aWQgb2YgdGhlIE1vb24iLCAiRHJ1aWQgb2Yg dGhlIE1vb24iLCAzNTAwMDAgKSwKICAgICAgICAgICAgdGl0bGVfdHlwZSggIkRydWlkIG9mIHRo ZSBTdW4iLCAiRHJ1aWQgb2YgdGhlIFN1biIsIDM1MDAwMCApLAogICAgICAgICAgICB0aXRsZV90 eXBlKCAiRmF0aGVyIG9mIFdpbnRlciIsICJNb3RoZXIgb2YgV2ludGVyIiwgMzUwMDAwICksCiAg ICAgICAgICAgIHRpdGxlX3R5cGUoICJGYXRoZXIgb2YgU3VtbWVyIiwgIk1vdGhlciBvZiBTdW1t ZXIiLCAzNTAwMDAgKSwKICAgICAgICAgICAgdGl0bGVfdHlwZSggIkZhdGhlciBvZiBGYWxsIiwg Ik1vdGhlciBvZiBGYWxsIiwgMzUwMDAwICksCiAgICAgICAgICAgIHRpdGxlX3R5cGUoICJGYXRo ZXIgb2YgU3ByaW5nIiwgIk1vdGhlciBvZiBTcHJpbmciLCAzNTAwMDAgKSwKICAgICAgICAgICAg dGl0bGVfdHlwZSggIkRydWlkIG9mIHRoZSBXaGl0ZSBSb2JlcyIsCiAgICAgICAgICAgICAgIkRy dWlkIG9mIHRoZSBXaGl0ZSBSb2JlcyIsIDM1MDAwMCApLAogICAgICAgICAgICB0aXRsZV90eXBl KCAiRHJ1aWQgb2YgdGhlIEJsYWNrIFJvYmVzIiwKICAgICAgICAgICAgICAiRHJ1aWQgb2YgdGhl IEJsYWNrIFJvYmVzIiwgMzUwMDAwICksCiAgICAgICAgICAgIHRpdGxlX3R5cGUoICJEcnVpZCBv ZiB0aGUgR3JleSBSb2JlcyIsCiAgICAgICAgICAgICAgIkRydWlkIG9mIHRoZSBHcmV5IFJvYmVz IiwgMzUwMDAwICksCiAgICAgICAgICAgIHRpdGxlX3R5cGUoICJJbml0aWF0ZSBvZiB0aGUgRmly c3QgQ2lyY2xlIiwKICAgICAgICAgICAgICAiSW5pdGlhdGUgb2YgdGhlIEZpcnN0IENpcmNsZSIs IDM1MDAwMCApLAogICAgICAgICAgICB0aXRsZV90eXBlKCAiSW5pdGlhdGUgb2YgdGhlIFNlY29u ZCBDaXJjbGUiLAogICAgICAgICAgICAgICJJbml0aWF0ZSBvZiB0aGUgU2Vjb25kIENpcmNsZSIs IDM1MDAwMCApLAogICAgICAgICAgICB0aXRsZV90eXBlKCAiSW5pdGlhdGUgb2YgdGhlIFRoaXJk IENpcmNsZSIsCiAgICAgICAgICAgICAgIkluaXRpYXRlIG9mIHRoZSBUaGlyZCBDaXJjbGUiLCAz NTAwMDAgKSwKICAgICAgICAgICAgdGl0bGVfdHlwZSggIkluaXRpYXRlIG9mIHRoZSBGb3VydGgg Q2lyY2xlIiwKICAgICAgICAgICAgICAiSW5pdGlhdGUgb2YgdGhlIEZvdXJ0aCBDaXJjbGUiLCAz NTAwMDAgKSwKICAgICAgICAgICAgdGl0bGVfdHlwZSggIkluaXRpYXRlIG9mIHRoZSBGaWZ0aCBD aXJjbGUiLAogICAgICAgICAgICAgICJJbml0aWF0ZSBvZiB0aGUgRmlmdGggQ2lyY2xlIiwgMzUw MDAwICksCiAgICAgICAgICAgIHRpdGxlX3R5cGUoICJJbml0aWF0ZSBvZiB0aGUgU2l4dGggQ2ly Y2xlIiwKICAgICAgICAgICAgICAiSW5pdGlhdGUgb2YgdGhlIFNpeHRoIENpcmNsZSIsIDM1MDAw MCApLAogICAgICAgICAgICB0aXRsZV90eXBlKCAiSW5pdGlhdGUgb2YgdGhlIFNldmVudGggQ2ly Y2xlIiwKICAgICAgICAgICAgICAiSW5pdGlhdGUgb2YgdGhlIFNldmVudGggQ2lyY2xlIiwgMzUw MDAwICksCiAgICAgICAgICAgIHRpdGxlX3R5cGUoICJJbml0aWF0ZSBvZiB0aGUgRWlnaHRoIENp cmNsZSIsCiAgICAgICAgICAgICAgIkluaXRpYXRlIG9mIHRoZSBFaWdodGggQ2lyY2xlIiwgMzUw MDAwICksCiAgICAgICAgICAgIHRpdGxlX3R5cGUoICJJbml0aWF0ZSBvZiB0aGUgTmludGggQ2ly Y2xlIiwKICAgICAgICAgICAgICAiSW5pdGlhdGUgb2YgdGhlIE5pbnRoIENpcmNsZSIsIDM1MDAw MCApLAogICAgICAgICAgICB0aXRsZV90eXBlKCAiRHJ1aWQiLCAiRHJ1aWQiLCAzNTAwMDAgKSwK ICAgICAgICAgICAgdGl0bGVfdHlwZSggIkFyY2ggRHJ1aWQiLCAiQXJjaCBEcnVpZCIsIDM1MDAw MCApLAogICAgICAgICAgICB0aXRsZV90eXBlKCAiVGhlIEdyZWF0IERydWlkIiwgIlRoZSBHcmVh dCBEcnVpZCIsIDEwMDAwMDAgKSwKICAgICAgICAgICAgdGl0bGVfdHlwZSggIkltbW9ydGFsIERy dWlkIiwgIkltbW9ydGFsIERydWlkIiwgMTUwMDAwMDAwICksCiAgICAgICAgICAgIHRpdGxlX3R5 cGUoICJJbW1vcnRhbCBEcnVpZCIsICJJbW1vcnRhbCBEcnVpZCIsIDEwMDAwMDAgKSwKICAgICAg ICAgICAgdGl0bGVfdHlwZSggIkltbW9ydGFsIERydWlkIiwgIkltbW9ydGFsIERydWlkIiwgMTAw MDAwMCApLAogICAgICAgICAgICB0aXRsZV90eXBlKCAiSW1tb3J0YWwgRHJ1aWQiLCAiSW1tb3J0 YWwgRHJ1aWQiLCAxMDAwMDAwICksCiAgICAgICAgICAgIHRpdGxlX3R5cGUoICJJbW1vcnRhbCBE cnVpZCIsICJJbW1vcnRhbCBEcnVpZCIsIDEwMDAwMDAgKSwKICAgICAgICAgICAgdGl0bGVfdHlw ZSggIkltbW9ydGFsIERydWlkIiwgIkltbW9ydGFsIERydWlkIiwgMTAwMDAwMCApLAogICAgICAg ICAgICB0aXRsZV90eXBlKCAiRHJ1aWQgR29kIiwgIkRydWlkIEdvZGRlc3MiLCAxMDAwMDAwICks CiAgICAgICAgICAgIHRpdGxlX3R5cGUoICJHb2QiLCAiR29kZGVzcyIsIDEwMDAwMDAgKSwKICAg ICAgICAgICAgdGl0bGVfdHlwZSggIkltcGxlbWVudG9yIiwgIkltcGxlbWVudHJlc3MiLCAxMDAw MDAwICksCiAgICAgICAgICAgIHRpdGxlX3R5cGUoICJJbXBsZW1lbnRvciIsICJJbXBsZW1lbnRy ZXNzIiwgMTAwMDAwMCApCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIHRpdGxlX3R5 cGUoICJNYW4iLCAiV29tYW4iLCAwICksCiAgICAgICAgICAgIHRpdGxlX3R5cGUoICJJbml0aWF0 ZSIsICJJbml0aWF0ZSIsIDEgKSwKICAgICAgICAgICAgdGl0bGVfdHlwZSggIkxlYXJuZXIiLCAi TGVhcm5lciIsIDQ5OTkgKSwKICAgICAgICAgICAgdGl0bGVfdHlwZSggIk1lbnRhbCBNaWRnZXQi LCAiTWVudGFsIE1pZGdldCIsIDUwMDAgKSwKICAgICAgICAgICAgdGl0bGVfdHlwZSggIkJyYWlu IFRlYXNlciIsICJCcmFpbiBUZWFzZXIiLCAxMDAwMCApLAogICAgICAgICAgICB0aXRsZV90eXBl KCAiU21va2VyIiwgIlNtb2tlciIsIDIwMDAwICksCiAgICAgICAgICAgIHRpdGxlX3R5cGUoICJT dHVkZW50IiwgIlN0dWRlbnQiLCA0MDAwMCApLAogICAgICAgICAgICB0aXRsZV90eXBlKCAiQXNz YXlpc3QiLCAiQXNzYXlpc3QiLCA4MDAwMCApLAogICAgICAgICAgICB0aXRsZV90eXBlKCAiSHlw bm90aXN0IiwgIkh5cG5vdGlzdCIsIDE2MDAwMCApLAogICAgICAgICAgICB0aXRsZV90eXBlKCAi U2Vuc29yIiwgIlNlbnNvciIsIDMyMDAwMCApLAogICAgICAgICAgICB0aXRsZV90eXBlKCAiUG9u ZGVyZXIiLCAiUG9uZGVyZXIiLCA0MDAwMDAgKSwKICAgICAgICAgICAgdGl0bGVfdHlwZSggIkRv c2VyIiwgIkRvc2VyIiwgNDAwMDAwICksCiAgICAgICAgICAgIHRpdGxlX3R5cGUoICJUZWxlcGF0 aCIsICJUZWxlcGF0aCIsIDQwMDAwMCApLAogICAgICAgICAgICB0aXRsZV90eXBlKCAiRVNQIElu aXRpYXRlIiwgIkVTUCBJbml0aWF0ZSIsIDQwMDAwMCApLAogICAgICAgICAgICB0aXRsZV90eXBl KCAiUGFsbXJlYWRlciIsICJQYWxtcmVhZGVyIiwgNDAwMDAwICksCiAgICAgICAgICAgIHRpdGxl X3R5cGUoICJQc3ljaGljIiwgIlBzeWNoaWMiLCA0MDAwMDAgKSwKICAgICAgICAgICAgdGl0bGVf dHlwZSggIk1lZGl0YXRvciIsICJNZWRpdGF0b3IiLCA0MDAwMDAgKSwKICAgICAgICAgICAgdGl0 bGVfdHlwZSggIlBzaW9uaWNpc3QiLCAiUHNpb25pY2lzdCIsIDQwMDAwMCApLAogICAgICAgICAg ICB0aXRsZV90eXBlKCAiUHJvYmVyIiwgIlByb2JlciIsIDQwMDAwMCApLAogICAgICAgICAgICB0 aXRsZV90eXBlKCAiUmVkYWN0b3IiLCAiUmVkYWN0b3IiLCA0MDAwMDAgKSwKICAgICAgICAgICAg dGl0bGVfdHlwZSggIk1pbmQgRml4ZXIiLCAiTWluZCBGaXhlciIsIDQwMDAwMCApLAogICAgICAg ICAgICB0aXRsZV90eXBlKCAiTWlyYWdpc3QiLCAiTWlyYWdpc3QiLCA0MDAwMDAgKSwKICAgICAg ICAgICAgdGl0bGVfdHlwZSggIk1pbmQgU3RpbXVsYXRvciIsICJNaW5kIFN0aW11bGF0b3IiLCA0 MDAwMDAgKSwKICAgICAgICAgICAgdGl0bGVfdHlwZSggIk1pbmQgQmVuZGVyIiwgIk1pbmQgQmVu ZGVyIiwgNDAwMDAwICksCiAgICAgICAgICAgIHRpdGxlX3R5cGUoICJNZW50YWwgQ3JhbXBlciIs ICJNZW50YWwgQ3JhbXBlciIsIDQwMDAwMCApLAogICAgICAgICAgICB0aXRsZV90eXBlKCAiS25v d2xlZGdlIEdpdmVyIiwgIktub3dsZWRnZSBHaXZlciIsIDQwMDAwMCApLAogICAgICAgICAgICB0 aXRsZV90eXBlKCAiU2VlciIsICJTZWVyZXNzIiwgNDAwMDAwICksCiAgICAgICAgICAgIHRpdGxl X3R5cGUoICJIYWxsdWNpbmF0b3IiLCAiSGFsbHVjaW5hdG9yIiwgNDAwMDAwICksCiAgICAgICAg ICAgIHRpdGxlX3R5cGUoICJUaG91Z2h0IEJsYXN0ZXIiLCAiVGhvdWdodCBCbGFzdGVyIiwgNDAw MDAwICksCiAgICAgICAgICAgIHRpdGxlX3R5cGUoICJEb21pbmF0b3IiLCAiRG9taW5hdHJpeCIs IDQwMDAwMCApLAogICAgICAgICAgICB0aXRsZV90eXBlKCAiQ29udHJvbGxlciIsICJDb250cm9s bGVyIiwgNDAwMDAwICksCiAgICAgICAgICAgIHRpdGxlX3R5cGUoICJDb2VyY2VyIiwgIkNvZXJj ZXIiLCA0MDAwMDAgKSwKICAgICAgICAgICAgdGl0bGVfdHlwZSggIkV4cGFuZGVyIiwgIkV4cGFu ZGVyIiwgNDAwMDAwICksCiAgICAgICAgICAgIHRpdGxlX3R5cGUoICJHZW5pdXMiLCAiR2VuaXVz IiwgNDAwMDAwICksCiAgICAgICAgICAgIHRpdGxlX3R5cGUoICJNaW5kIFJlYWRlciIsICJNaW5k IFJlYWRlciIsIDQwMDAwMCApLAogICAgICAgICAgICB0aXRsZV90eXBlKCAiRGlzcnVwdGVyIiwg IkRpc3J1cHRlciIsIDQwMDAwMCApLAogICAgICAgICAgICB0aXRsZV90eXBlKCAiTWlncmFpbmVy IiwgIk1pZ3JhaW5lciIsIDQwMDAwMCApLAogICAgICAgICAgICB0aXRsZV90eXBlKCAiTWluZCBD cnVzaGVyIiwgIk1pbmQgQ3J1c2hlciIsIDQwMDAwMCApLAogICAgICAgICAgICB0aXRsZV90eXBl KCAiVGVsZWtpbmV0aWMiLCAiVGVsZWtpbmV0aWMiLCA0MDAwMDAgKSwKICAgICAgICAgICAgdGl0 bGVfdHlwZSggIk1pbmQgTGlua2VyIiwgIk1pbmQgTGlua2VyIiwgNDAwMDAwICksCiAgICAgICAg ICAgIHRpdGxlX3R5cGUoICJUaG91Z2h0IFN0ZWFsZXIiLCAiVGhvdWdodCBTdGVhbGVyIiwgNDAw MDAwICksCiAgICAgICAgICAgIHRpdGxlX3R5cGUoICJNaW5kIE1hc3RlciIsICJNaW5kIE1hc3Rl ciIsIDQwMDAwMCApLAogICAgICAgICAgICB0aXRsZV90eXBlKCAiTWVudGFsIEdpYW50IiwgIk1l bnRhbCBHaWFudCIsIDQwMDAwMCApLAogICAgICAgICAgICB0aXRsZV90eXBlKCAiR2VuaXVzIEV4 dHJvZGluYWlycmUiLAogICAgICAgICAgICAgICJHZW5pdXMgRXh0cm9kaW5haXJyZSIsIDQwMDAw MCApLAogICAgICAgICAgICB0aXRsZV90eXBlKCAiTWFnbmlmaWNlbnQiLCAiTWFnbmlmaWNlbnQi LCA0MDAwMDAgKSwKICAgICAgICAgICAgdGl0bGVfdHlwZSggIk1lbnRhbGlzdCIsICJNZW50YWxp c3QiLCA0MDAwMDAgKSwKICAgICAgICAgICAgdGl0bGVfdHlwZSggIkhpZ2ggTWVudGFsaXN0Iiwg IkhpZ2ggTWVudGFsaXN0IiwgNDAwMDAwICksCiAgICAgICAgICAgIHRpdGxlX3R5cGUoICJNZW50 YXQiLCAiTWVudGF0IiwgNDAwMDAwICksCiAgICAgICAgICAgIHRpdGxlX3R5cGUoICJMb3cgTWVu dGF0IiwgIkxvdyBNZW50YXQiLCA0MDAwMDAgKSwKICAgICAgICAgICAgdGl0bGVfdHlwZSggIkhp Z2ggTWVudGF0IiwgIkhpZ2ggTWVudGF0IiwgNDAwMDAwICksCiAgICAgICAgICAgIHRpdGxlX3R5 cGUoICJNYXN0ZXIgTWVudGF0IiwgIk1hc3RlciBNZW50YXQiLCAxMDAwMDAwICksCiAgICAgICAg ICAgIHRpdGxlX3R5cGUoICJJbW1vcnRhbCBQc2lvbmljaXN0IiwKICAgICAgICAgICAgICAiSW1t b3J0YWwgUHNpb25pY2lzdCIsIDE1MDAwMDAwMCApLAogICAgICAgICAgICB0aXRsZV90eXBlKCAi SW1tb3J0YWwgUHNpb25pY2lzdCIsCiAgICAgICAgICAgICAgIkltbW9ydGFsIFBzaW9uaWNpc3Qi LCAxMDAwMDAwICksCiAgICAgICAgICAgIHRpdGxlX3R5cGUoICJJbW1vcnRhbCBQc2lvbmljaXN0 IiwKICAgICAgICAgICAgICAiSW1tb3J0YWwgUHNpb25pY2lzdCIsIDEwMDAwMDAgKSwKICAgICAg ICAgICAgdGl0bGVfdHlwZSggIkltbW9ydGFsIFBzaW9uaWNpc3QiLAogICAgICAgICAgICAgICJJ bW1vcnRhbCBQc2lvbmljaXN0IiwgMTAwMDAwMCApLAogICAgICAgICAgICB0aXRsZV90eXBlKCAi SW1tb3J0YWwgUHNpb25pY2lzdCIsCiAgICAgICAgICAgICAgIkltbW9ydGFsIFBzaW9uaWNpc3Qi LCAxMDAwMDAwICksCiAgICAgICAgICAgIHRpdGxlX3R5cGUoICJJbW1vcnRhbCBQc2lvbmljaXN0 IiwKICAgICAgICAgICAgICAiSW1tb3J0YWwgUHNpb25pY2lzdCIsIDEwMDAwMDAgKSwKICAgICAg ICAgICAgdGl0bGVfdHlwZSggIkF2YXRhciBvZiB0aGUgTWluZCIsICJFbXByZXNzIG9mIHRoZSBN aW5kIiwgMTAwMDAwMCApLAogICAgICAgICAgICB0aXRsZV90eXBlKCAiR29kIG9mIHRoZSBNaW5k IiwgIkdvZGRlc3Mgb2YgdGhlIE1pbmQiLCAxMDAwMDAwICksCiAgICAgICAgICAgIHRpdGxlX3R5 cGUoICJJbXBsZW1lbnRvciIsICJJbXBsZW1lbnRyaXgiLCAxMDAwMDAwICksCiAgICAgICAgICAg IHRpdGxlX3R5cGUoICJJbXBsZW1lbnRvciIsICJJbXBsZW1lbnRyaXgiLCAxMDAwMDAwICkKICAg ICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgdGl0bGVfdHlwZSggIk1hbiIsICJXb21hbiIs IDAgKSwKICAgICAgICAgICAgdGl0bGVfdHlwZSggIkZvcmVzdCBSZWNydWl0IiwgIkZvcmVzdCBS ZWNydWl0IiwgMSApLAogICAgICAgICAgICB0aXRsZV90eXBlKCAiUnVubmVyIiwgIlJ1bm5lciIs IDM5OTkgKSwKICAgICAgICAgICAgdGl0bGVfdHlwZSggIkZvcmFnZXIiLCAiRm9yYWdlciIsIDQw MDAgKSwKICAgICAgICAgICAgdGl0bGVfdHlwZSggIkp1bmlvciBUcmFja2VyIiwgIkp1bmlvciBU cmFja2VyIiwgODAwMCApLAogICAgICAgICAgICB0aXRsZV90eXBlKCAiRmxldGNoZXIiLCAiRmxl dGNoZXIiLCAxNjAwMCApLAogICAgICAgICAgICB0aXRsZV90eXBlKCAiUGF0aGZpbmRlciIsICJQ YXRoZmluZGVyIiwgMzIwMDAgKSwKICAgICAgICAgICAgdGl0bGVfdHlwZSggIkp1bmlvciBXb29k c21hbiIsICJKdW5pb3IgV29vZHN3b21hbiIsIDY0MDAwICksCiAgICAgICAgICAgIHRpdGxlX3R5 cGUoICJPdXRkb29yc21hbiIsICJPdXRkb29yc3dvbWFuIiwgMTI4MDAwICksCiAgICAgICAgICAg IHRpdGxlX3R5cGUoICJKdW5pb3IgRm9yZXN0ZXIiLCAiSnVuaW9yIEZvcmVzdGVyIiwgMjUwMDAw ICksCiAgICAgICAgICAgIHRpdGxlX3R5cGUoICJOb3ZpY2UgQXJjaGVyIiwgIk5vdmljZSBBcmNo ZXIiLCA1MDAwMDAgKSwKICAgICAgICAgICAgdGl0bGVfdHlwZSggIlRyYXBwZXIiLCAiVHJhcHBl ciIsIDQwMDAwMCApLAogICAgICAgICAgICB0aXRsZV90eXBlKCAiTm92aWNlIFNjb3V0IiwgIk5v dmljZSBTY291dCIsIDQwMDAwMCApLAogICAgICAgICAgICB0aXRsZV90eXBlKCAiU3RyaWRlciIs ICJTdHJpZGVyIiwgNDAwMDAwICksCiAgICAgICAgICAgIHRpdGxlX3R5cGUoICJUcmFpbCBCbGF6 ZXIiLCAiVHJhaWwgQmxhemVyIiwgNDAwMDAwICksCiAgICAgICAgICAgIHRpdGxlX3R5cGUoICJI dW50ZXIiLCAiSHVudHJlc3MiLCA0MDAwMDAgKSwKICAgICAgICAgICAgdGl0bGVfdHlwZSggIkd1 aWRlIiwgIkd1aWRlIiwgNDAwMDAwICksCiAgICAgICAgICAgIHRpdGxlX3R5cGUoICJBcmNoZXIi LCAiQXJjaGVyIiwgNDAwMDAwICksCiAgICAgICAgICAgIHRpdGxlX3R5cGUoICJUcmFja2VyIiwg IlRyYWNrZXIiLCA0MDAwMDAgKSwKICAgICAgICAgICAgdGl0bGVfdHlwZSggIkNvdXJzZXIiLCAi Q291cnNlciIsIDQwMDAwMCApLAogICAgICAgICAgICB0aXRsZV90eXBlKCAiV29vZHNtYW4iLCAi V29vZHN3b21hbiIsIDQwMDAwMCApLAogICAgICAgICAgICB0aXRsZV90eXBlKCAiRXhwbG9yZXIi LCAiRXhwbG9yZXIiLCA0MDAwMDAgKSwKICAgICAgICAgICAgdGl0bGVfdHlwZSggIlNlbmlvciBU cmFja2VyIiwgIlNlbmlvciBUcmFja2VyIiwgNDAwMDAwICksCiAgICAgICAgICAgIHRpdGxlX3R5 cGUoICJGb3Jlc3RlciIsICJGb3Jlc3RlciIsIDQwMDAwMCApLAogICAgICAgICAgICB0aXRsZV90 eXBlKCAiV29vZGxhbmQgRmlnaHRlciIsICJXb29kbGFuZCBGaWdodGVyIiwgNDAwMDAwICksCiAg ICAgICAgICAgIHRpdGxlX3R5cGUoICJTZW5pb3IgU2NvdXQiLCAiU2VuaW9yIFNjb3V0IiwgNDAw MDAwICksCiAgICAgICAgICAgIHRpdGxlX3R5cGUoICJTd29yZHNtYW4gb2YgdGhlIFdvb2RzIiwK ICAgICAgICAgICAgICAiU3dvcmRzd29tYW4gb2YgdGhlIFdvb2RzIiwgNDAwMDAwICksCiAgICAg ICAgICAgIHRpdGxlX3R5cGUoICJTZW5pb3IgRm9yZXN0ZXIiLCAiU2VuaW9yIEZvcmVzdGVyIiwg NDAwMDAwICksCiAgICAgICAgICAgIHRpdGxlX3R5cGUoICJGb3Jlc3QgU2VudHJ5IiwgIkZvcmVz dCBTZW50cnkiLCA0MDAwMDAgKSwKICAgICAgICAgICAgdGl0bGVfdHlwZSggIkJvdW50eSBIdW50 ZXIiLCAiQm91bnR5IEh1bnRyZXNzIiwgNDAwMDAwICksCiAgICAgICAgICAgIHRpdGxlX3R5cGUo ICJWb3lhZ2VyIiwgIlZveWFnZXIiLCA0MDAwMDAgKSwKICAgICAgICAgICAgdGl0bGVfdHlwZSgg Ik1hc3RlciBBcmNoZXIiLCAiTWFzdGVyIEFyY2hlciIsIDQwMDAwMCApLAogICAgICAgICAgICB0 aXRsZV90eXBlKCAiU2VuaW9yIEh1bnRlciIsICJTZW5pb3IgSHVudHJlc3MiLCA0MDAwMDAgKSwK ICAgICAgICAgICAgdGl0bGVfdHlwZSggIldvb2RsYW5kIEhlcm8iLCAiV29vZGxhbmQgSGVybyIs IDQwMDAwMCApLAogICAgICAgICAgICB0aXRsZV90eXBlKCAiV29vZGxhbmQgU2NvdXQiLCAiV29v ZGxhbmQgU2NvdXQiLCA0MDAwMDAgKSwKICAgICAgICAgICAgdGl0bGVfdHlwZSggIlN3b3JkbWFz dGVyIG9mIHRoZSBXb29kcyIsCiAgICAgICAgICAgICAgIlN3b3JkbWlzdHJlc3Mgb2YgdGhlIFdv b2RzIiwgNDAwMDAwICksCiAgICAgICAgICAgIHRpdGxlX3R5cGUoICJXb29kbGFuZCBDaGFtcGlv biIsICJXb29kbGFuZCBDaGFtcGlvbiIsIDQwMDAwMCApLAogICAgICAgICAgICB0aXRsZV90eXBl KCAiTWFzdGVyIFRyYWNrZXIiLCAiTWFzdGVyIFRyYWNrZXIiLCA0MDAwMDAgKSwKICAgICAgICAg ICAgdGl0bGVfdHlwZSggIlNjb3V0IE1hc3RlciIsICJTY291dCBNaXN0cmVzcyIsIDQwMDAwMCAp LAogICAgICAgICAgICB0aXRsZV90eXBlKCAiTWFzdGVyIFdvb2RzbWFuIiwgIk1hc3RlciBXb29k c3dvbWFuIiwgNDAwMDAwICksCiAgICAgICAgICAgIHRpdGxlX3R5cGUoICJNYXN0ZXIgRm9yZXN0 ZXIiLCAiTWFzdGVyIEZvcmVzdGVyIiwgNDAwMDAwICksCiAgICAgICAgICAgIHRpdGxlX3R5cGUo ICJEZWZlbmRlciBvZiB0aGUgRm9yZXN0IiwKICAgICAgICAgICAgICAiRGVmZW5kZXIgb2YgdGhl IEZvcmVzdCIsIDQwMDAwMCApLAogICAgICAgICAgICB0aXRsZV90eXBlKCAiUHJvdGVjdG9yIG9m IHRoZSBXb29kcyIsCiAgICAgICAgICAgICAgIlByb3RlY3RvciBvZiB0aGUgV29vZHMiLCA0MDAw MDAgKSwKICAgICAgICAgICAgdGl0bGVfdHlwZSggIlJhbmdlciIsICJSYW5nZXIiLCA0MDAwMDAg KSwKICAgICAgICAgICAgdGl0bGVfdHlwZSggIlJhbmdlciBvZiB0aGUgRmlyc3QgT3JkZXIiLAog ICAgICAgICAgICAgICJSYW5nZXIgb2YgdGhlIEZpcnN0IE9yZGVyIiwgNDAwMDAwICksCiAgICAg ICAgICAgIHRpdGxlX3R5cGUoICJSYW5nZXIgb2YgdGhlIFNlY29uZCBPcmRlciIsCiAgICAgICAg ICAgICAgIlJhbmdlciBvZiB0aGUgU2Vjb25kIE9yZGVyIiwgNDAwMDAwICksCiAgICAgICAgICAg IHRpdGxlX3R5cGUoICJSYW5nZXIgb2YgdGhlIFRoaXJkIE9yZGVyIiwKICAgICAgICAgICAgICAi UmFuZ2VyIG9mIHRoZSBUaGlyZCBPcmRlciIsIDQwMDAwMCApLAogICAgICAgICAgICB0aXRsZV90 eXBlKCAiUmFuZ2VyIG9mIHRoZSBGb3VydGggT3JkZXIiLAogICAgICAgICAgICAgICJSYW5nZXIg b2YgdGhlIEZvdXJ0aCBPcmRlciIsIDQwMDAwMCApLAogICAgICAgICAgICB0aXRsZV90eXBlKCAi UmFuZ2VyIEtuaWdodCIsICJSYW5nZXIgRGFtc2VsIiwgNDAwMDAwICksCiAgICAgICAgICAgIHRp dGxlX3R5cGUoICJSYW5nZXIgTG9yZCIsICJSYW5nZXIgTGFkeSIsIDQwMDAwMCApLAogICAgICAg ICAgICB0aXRsZV90eXBlKCAiR3JhbmQgS25pZ2h0IG9mIHRoZSBGb3Jlc3QiLAogICAgICAgICAg ICAgICJQcmluY2VzcyBvZiB0aGUgRm9yZXN0IiwgMTAwMDAwMCApLAogICAgICAgICAgICB0aXRs ZV90eXBlKCAiSW1tb3J0YWwiLCAiSW1tb3J0YWwiLCAxNTAwMDAwMDAgKSwKICAgICAgICAgICAg dGl0bGVfdHlwZSggIkltbW9ydGFsIiwgIkltbW9ydGFsIiwgMTAwMDAwMCApLAogICAgICAgICAg ICB0aXRsZV90eXBlKCAiSW1tb3J0YWwiLCAiSW1tb3J0YWwiLCAxMDAwMDAwICksCiAgICAgICAg ICAgIHRpdGxlX3R5cGUoICJJbW1vcnRhbCIsICJJbW1vcnRhbCIsIDEwMDAwMDAgKSwKICAgICAg ICAgICAgdGl0bGVfdHlwZSggIkltbW9ydGFsIiwgIkltbW9ydGFsIiwgMTAwMDAwMCApLAogICAg ICAgICAgICB0aXRsZV90eXBlKCAiSW1tb3J0YWwiLCAiSW1tb3J0YWwiLCAxMDAwMDAwICksCiAg ICAgICAgICAgIHRpdGxlX3R5cGUoICJSYW5nZXIgRXh0aXJwYXRvciIsICJSYW5nZXIgUXVlZW4i LCAxMDAwMDAwICksCiAgICAgICAgICAgIHRpdGxlX3R5cGUoICJHb2QiLCAiR29kZGVzcyIsIDEw MDAwMDAgKSwKICAgICAgICAgICAgdGl0bGVfdHlwZSggIkltcGxlbWVudG9yIiwgIkltcGxlbWVu dHJlc3MiLCAxMDAwMDAwICksCiAgICAgICAgICAgIHRpdGxlX3R5cGUoICJJbXBsZW1lbnRvciIs ICJJbXBsZW1lbnRyZXNzIiwgMTAwMDAwMCApCiAgICAgICAgfSwKICAgICAgICB7IHRpdGxlX3R5 cGUoIk1hbiIsICJXb21hbiIsIDApLAogICAgICAgICAgdGl0bGVfdHlwZSgiU2hhcGVzaGlmdGVy IEluaXRpYXRlIiwgIlNoYXBlc2hpZnRlciBJbml0aWF0ZSIsIDEpLAogICAgICAgICAgdGl0bGVf dHlwZSgiRm9ybWVyIiwgIkZvcm1lciIsIDI0OTkpLAogICAgICAgICAgdGl0bGVfdHlwZSgiRmFr ZXIiLCAiRmFrZXIiLCAyNTAwKSwKICAgICAgICAgIHRpdGxlX3R5cGUoIkRhYmJsZXIiLCAiRGFi YmxlciIsIDUwMDApLAogICAgICAgICAgdGl0bGVfdHlwZSgiUmVnZW5lcmF0b3IiLCAiUmVnZW5l cmF0b3IiLCAxMDAwMCksCiAgICAgICAgICB0aXRsZV90eXBlKCJSZW5ld2lzdCIsICJSZW5ld2lz dCIsIDIwMDAwKSwKICAgICAgICAgIHRpdGxlX3R5cGUoIlJlanV2ZW5hdG9yIiwgIlJlanV2ZW5h dG9yIiwgMjAwMDApLAogICAgICAgICAgdGl0bGVfdHlwZSgiUmV2aXZlciIsICJSZXZpdmVyIiwg MzAwMDApLAogICAgICAgICAgdGl0bGVfdHlwZSgiQW5vbWFseSIsICJBbm9tYWx5IiwgNTAwMDAp LAogICAgICAgICAgdGl0bGVfdHlwZSgiU2hhcGVzaGlmdGVyIG9mIHRoZSBGaXJzdCBPcmRlciIs ICJTaGFwZXNoaWZ0ZXIgb2YgdGhlIEZpcnN0IE9yZGVyIiwgMTAwMDAwKSwKICAgICAgICAgIHRp dGxlX3R5cGUoIkNoYW1lbGVvbiIsICJDaGFtZWxlb24iLCAyMDAwMDApLAogICAgICAgICAgdGl0 bGVfdHlwZSgiQ29uY2VhbGVyIiwgIkNvbmNlYWxlc3MiLCAzNzUwMDApLAogICAgICAgICAgdGl0 bGVfdHlwZSgiTWVsZGVyIiwgIk1lbGRlciIsIDM3NTAwMCksCiAgICAgICAgICB0aXRsZV90eXBl KCJDYW1vdWZsYWdlIEFydGlzdCIsICJDYW1vdWZsYWdlIEFydGlzdCIsIDM3NTAwMCksCiAgICAg ICAgICB0aXRsZV90eXBlKCJTaGFwZSBDaGFuZ2VyIiwgIlNoYXBlIENoYW5nZXIiLCAzNzUwMDAp LAogICAgICAgICAgdGl0bGVfdHlwZSgiQ2hhbmdsaW5nIiwgIkNoYW5nbGluZyIsIDM3NTAwMCks CiAgICAgICAgICB0aXRsZV90eXBlKCJQaGFzZXIiLCAiUGhhc2VyIiwgMzc1MDAwKSwKICAgICAg ICAgIHRpdGxlX3R5cGUoIlRyYW5zZm9ybWVyIiwgIlRyYW5zZm9ybWVyIiwgMzc1MDAwKSwKICAg ICAgICAgIHRpdGxlX3R5cGUoIk11dGF0ZXIiLCAiTXV0YXRlciIsIDM3NTAwMCksCiAgICAgICAg ICB0aXRsZV90eXBlKCJTaGFwZXNoaWZ0ZXIgb2YgU2Vjb25kIE9yZGVyIiwgIlNoYXBlc2hpZnRl ciBvZiB0aGUgU2Vjb25kIE9yZGVyIiwgMzc1MDAwKSwKICAgICAgICAgIHRpdGxlX3R5cGUoIkJp bmRlciIsICJCaW5kZXIiLCAzNzUwMDApLAogICAgICAgICAgdGl0bGVfdHlwZSgiUmVzdHJpY3Rl ciIsICJSZXN0cmljdGVyIiwgMzc1MDAwKSwKICAgICAgICAgIHRpdGxlX3R5cGUoIkNvbnN0cmlj dGVyIiwgIkNvbnN0cmljdGVyIiwgMzc1MDAwKSwKICAgICAgICAgIHRpdGxlX3R5cGUoIlJlc3Ry YWluZXIiLCAiUmVzdHJhaW5lciIsIDM3NTAwMCksCiAgICAgICAgICB0aXRsZV90eXBlKCJDb250 cmFjdGVyIiwgIkNvbnRyYWN0ZXIiLCAzNzUwMDApLAogICAgICAgICAgdGl0bGVfdHlwZSgiRGV2 aWFudCIsICJEZXZpYW50IiwgMzc1MDAwKSwKICAgICAgICAgIHRpdGxlX3R5cGUoIkZ1c2VyIiwg IkZ1c2VyIiwgMzc1MDAwKSwKICAgICAgICAgIHRpdGxlX3R5cGUoIlJlY29uc3RydWN0b3IiLCAi UmVjb25zdHJ1Y3RvciIsIDM3NTAwMCksCiAgICAgICAgICB0aXRsZV90eXBlKCJKdW5pb3IgTW9y cGhlciIsICJKdW5pb3IgTW9ycGhlciIsIDM3NTAwMCksCiAgICAgICAgICB0aXRsZV90eXBlKCJT aGFwZXNoaWZ0ZXIgb2YgdGhlIFRoaXJkIE9yZGVyIiwgIlNoYXBlc2hpZnRlciBvZiB0aGUgVGhp cmQgT3JkZXIiLCAzNzUwMDApLAogICAgICAgICAgdGl0bGVfdHlwZSgiTWVsZCBQcmFjdGljaW9u ZXIiLCAiTWVsZCBQcmFjdGljaW9uZXIiLCAzNzUwMDApLAogICAgICAgICAgdGl0bGVfdHlwZSgi U2hpZnRlciIsICJTaGlmdGVyIiwgMzc1MDAwKSwKICAgICAgICAgIHRpdGxlX3R5cGUoIlNpbXVs YXRvciIsICJTaW11bGF0b3IiLCAzNzUwMDApLAogICAgICAgICAgdGl0bGVfdHlwZSgiSW1pdGF0 b3IiLCAiSW1pdGF0b3IiLCAzNzUwMDApLAogICAgICAgICAgdGl0bGVfdHlwZSgiRG9wcGxlZ2Fu Z2VyIiwgIkRvcHBsZWdhbmdlciIsIDM3NTAwMCksCiAgICAgICAgICB0aXRsZV90eXBlKCJDbG9u ZSBBcnRpc3QiLCAiQ2xvbmUgQXJ0aXN0IiwgMzc1MDAwKSwKICAgICAgICAgIHRpdGxlX3R5cGUo IlJlcGxpY2FudCIsICJSZXBsaWNhbnQiLCAzNzUwMDApLAogICAgICAgICAgdGl0bGVfdHlwZSgi TWlycm9yIiwgIk1pcnJvciIsIDM3NTAwMCksCiAgICAgICAgICB0aXRsZV90eXBlKCJTZW5pb3Ig TW9ycGhlciIsICJTZW5pb3IgTW9ycGhlciIsIDM3NTAwMCksCiAgICAgICAgICB0aXRsZV90eXBl KCJTaGFwZXNoaWZ0ZXIgb2YgdGhlIEZvdXJ0aCBPcmRlciIsICJTaGFwZXNoaWZ0ZXIgb2YgdGhl IEZvdXJ0aCBPcmRlciIsIDM3NTAwMCksCiAgICAgICAgICB0aXRsZV90eXBlKCJJbWFnZXIiLCAi SW1hZ2VyIiwgMzc1MDAwKSwKICAgICAgICAgIHRpdGxlX3R5cGUoIlN3aXRjaGVyIiwgIlN3aXRj aGVyIiwgMzc1MDAwKSwKICAgICAgICAgIHRpdGxlX3R5cGUoIkRlZm9ybWVyIiwgIkRlZm9ybWVy IiwgMzc1MDAwKSwKICAgICAgICAgIHRpdGxlX3R5cGUoIlJlZm9ybWVyIiwgIlJlZm9ybWVyIiwg Mzc1MDAwKSwKICAgICAgICAgIHRpdGxlX3R5cGUoIlNoYWRvdyIsICJTaGFkb3ciLCAxMDAwMDAw KSwKICAgICAgICAgIHRpdGxlX3R5cGUoIk1lbHRlciIsICJNZWx0ZXIiLCAxMDAwMDAwKSwKICAg ICAgICAgIHRpdGxlX3R5cGUoIkFueW9uZSIsICJBbnlvbmUiLCAxMDAwMDAwKSwKICAgICAgICAg IHRpdGxlX3R5cGUoIlJlcHJvZHVjZXIiLCAiUmVwcm9kdWNlciIsIDEwMDAwMDApLAogICAgICAg ICAgdGl0bGVfdHlwZSgiTW9ycGggTG9yZCIsICJNb3JwaCBMb3JkIiwgMTAwMDAwMCksCiAgICAg ICAgICB0aXRsZV90eXBlKCJHcmFuZCBTaGFwZXNoaWZ0ZXIgb2YgdGhlIEZpZnRoIE9yZGVyIiwg IkdyYW5kIFNoYXBlc2hpZnRlciBvZiB0aGUgRmlmdGggT3JkZXIiLCAxMDAwMDAwKSwKICAgICAg ICAgIHRpdGxlX3R5cGUoIkltbW9ydGFsIiwgIkltbW9ydGFsIiwgMTUwMDAwMDAwKSwKICAgICAg ICAgIHRpdGxlX3R5cGUoIkltbW9ydGFsIiwgIkltbW9ydGFsIiwgMTAwMDAwMDApLAogICAgICAg ICAgdGl0bGVfdHlwZSgiSW1tb3J0YWwiLCAiSW1tb3J0YWwiLCAxMDAwMDAwMCksCiAgICAgICAg ICB0aXRsZV90eXBlKCJJbW1vcnRhbCIsICJJbW1vcnRhbCIsIDEwMDAwMDAwKSwKICAgICAgICAg IHRpdGxlX3R5cGUoIkltbW9ydGFsIiwgIkltbW9ydGFsIiwgMTAwMDAwMDApLAogICAgICAgICAg dGl0bGVfdHlwZSgiSW1tb3J0YWwiLCAiSW1tb3J0YWwiLCAxMDAwMDAwMCksCiAgICAgICAgICB0 aXRsZV90eXBlKCJJbW1vcnRhbCIsICJJbW1vcnRhbCIsIDEwMDAwMDAwKSwKICAgICAgICAgIHRp dGxlX3R5cGUoIkdvZCIsICJHb2RkZXNzIiwgMTAwMDAwMDApLAogICAgICAgICAgdGl0bGVfdHlw ZSgiSW1wbGVtZW50b3IiLCJJbXBsZW1lbnRyZXNzIiwgMTAwMDAwMDApLAogICAgICAgICAgdGl0 bGVfdHlwZSgiSW1wbGVtZW50b3IiLCJJbXBsZW1lbnRyZXNzIiwgMTAwMDAwMDApCiAgICAgICAg fQogICAgfTsK