From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mo4-p01-ob.smtp.rzone.de (mo4-p01-ob.smtp.rzone.de [85.215.255.53]) by sourceware.org (Postfix) with ESMTPS id ADAE33858D28 for ; Fri, 19 May 2023 08:49:14 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org ADAE33858D28 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=gjlay.de Authentication-Results: sourceware.org; spf=none smtp.mailfrom=gjlay.de ARC-Seal: i=1; a=rsa-sha256; t=1684486147; cv=none; d=strato.com; s=strato-dkim-0002; b=ZnZhFSg20VNfg90ev0DQfpcW8IMYEWgCseMTQiwxH7uSfEBhMz+oDp8EoUU5zuwf/7 DnxNdj/L15BvQmyDgRgkP6EFWy4xSJadxx8n7oYqzmSA7zVA9oCLZzXDHOChVVSBrrKb ckgNQyw6x1cPkHoYqlBuDj6pvR6gQZIlMmdMYRbj93jV1gEOqJIqw5nwXtvgM8ZWyPnO qY/+KqXqdt1gYlnXmOEHwLmG8sr3HjKMq0RVuaRnPDBLFBQIW0l90HQLcYeJY3XjU/uZ 5Sf4U5quRfTjBGHRVqGsViaP0mVMNsbzLVDaaeeWG/S1DeGHqLseKwdAbPiz5GW91ZQA N0xQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; t=1684486147; s=strato-dkim-0002; d=strato.com; h=In-Reply-To:References:Cc:To:Subject:From:Date:Message-ID:Cc:Date: From:Subject:Sender; bh=iNw7F0UoFGVJ5tsK2l4/keigo8U04DM4nAFF+FYh0LU=; b=s0cQ/W5zULlUuIMC0cbIpsO8n9f0s096y2kdj23ttMsqLFzs/OYUGX/zeWBqA6Wcg4 dNQWvCdDRyi7+isqAJn6rXp19IYgSU/ydsZNpeu+XUlfgw6hVFhXNoLgr1lp9Fyvt/K0 B7wXg53J9xkjX5HrVjGMuGTj0DfTPMTDBoFaSFD1w8WCIbIw/TRfA2/+oh6LqxhpyR3k bfqko5oQYf6dX+eWpppDwWnGm3dPqwCpHiOdeFT/rvRUzTMyjavjRAUKQVQUTs9zpHWZ IWcxS/wPVwZf4lEXBL+cqJ1ZKEMQ9r8nTo5KGhjKwiuVYNl8Zt/zUhSYSm33pW4jyo36 7ZXg== ARC-Authentication-Results: i=1; strato.com; arc=none; dkim=none X-RZG-CLASS-ID: mo01 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1684486147; s=strato-dkim-0002; d=gjlay.de; h=In-Reply-To:References:Cc:To:Subject:From:Date:Message-ID:Cc:Date: From:Subject:Sender; bh=iNw7F0UoFGVJ5tsK2l4/keigo8U04DM4nAFF+FYh0LU=; b=dzuS2dLzuUPQRrJA+T/JRTtLYCsJXCD5VOp2TQ16Pw9SulqhdNO44wkVEthfy8Uvs+ 3vwZLUJEqzK78QBWIoxsmpux5IExI+a8dWYJVHYtmdL758jVQFh5UA0H1FNn3GJS5m+j bmdWP9kJy55iBwuNKLm41HpsZJKz2+TsnBVHiIRfx6aRA5eUDz+xrc500FVGeCdkz6Ju w2y5SIivLLGIngoUzS1TDeaHsVVo2M85JArk4v9CXpdRfseJzo5d7XJC7+UpOOKfhEx5 NQ0YDq8X30vLxdGbCupG1/4gGFESuzzPgjhqlBqgnXg15pP9q++7axT1pjJ/YNvbp14A Q6Ww== DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; t=1684486147; s=strato-dkim-0003; d=gjlay.de; h=In-Reply-To:References:Cc:To:Subject:From:Date:Message-ID:Cc:Date: From:Subject:Sender; bh=iNw7F0UoFGVJ5tsK2l4/keigo8U04DM4nAFF+FYh0LU=; b=mDazk2gfF40JK82Y+/vfOnhXCWed+Gn82KAlitbxUJB09+u81xgLQrU2wFuLT9vSJX 8U3SknnII4DZC8pdm+Cg== X-RZG-AUTH: ":LXoWVUeid/7A29J/hMvvT3koxZnKT7Qq0xotTetVnKkRmM69o2y+LiO3MutATA==" Received: from [192.168.2.102] by smtp.strato.de (RZmta 49.4.0 DYNA|AUTH) with ESMTPSA id z691f1z4J8n6O1l (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256 bits)) (Client did not present a certificate); Fri, 19 May 2023 10:49:06 +0200 (CEST) Content-Type: multipart/mixed; boundary="------------XkpGvOEZjLLfflK5vnvlkUr3" Message-ID: Date: Fri, 19 May 2023 10:49:05 +0200 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.9.0 From: Georg-Johann Lay Subject: Re: [patch,avr] Fix PR109650 wrong code To: gcc-patches@gcc.gnu.org Cc: Jeff Law , Denis Chertykov , Senthil Kumar Selvaraj References: <48369cc7-884d-9eef-2e16-9bc2bfe825f1@gjlay.de> Content-Language: en-US In-Reply-To: <48369cc7-884d-9eef-2e16-9bc2bfe825f1@gjlay.de> Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-10.1 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,GIT_PATCH_0,NICE_REPLY_A,RCVD_IN_DNSWL_NONE,SPF_HELO_PASS,SPF_NONE,TXREP,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: This is a multi-part message in MIME format. --------------XkpGvOEZjLLfflK5vnvlkUr3 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit ...Ok, and now with the patch attached... Here is a revised version of the patch. The difference to the previous one is that it adds some combine patterns for *cbranch insns that were lost in the PR92729 transition. The post-reload part of the patterns were still there. The new patterns are slightly more general in that they also handle fixed-point modes. Apart from that, the patch behaves the same: Am 15.05.23 um 20:05 schrieb Georg-Johann Lay: > This patch fixes a wrong-code bug in the wake of PR92729, the transition > that turned the AVR backend from cc0 to CCmode.  In cc0, the insn that > uses cc0 like a conditional branch always follows the cc0 setter, which > is no more the case with CCmode where set and use of REG_CC might be in > different basic blocks. > > This patch removes the machine-dependent reorg pass in avr_reorg entirely. > > It is replaced by a new, AVR specific mini-pass that runs prior to > split2. Canonicalization of comparisons away from the "difficult" > codes GT[U] and LE[U] is now mostly performed by implementing > TARGET_CANONICALIZE_COMPARISON. > > Moreover: > > * Text peephole conditions get "dead_or_set_regno_p (*, REG_CC)" as > needed. > > * RTL peephole conditions get "peep2_regno_dead_p (*, REG_CC)" as > needed. > > * Conditional branches no more clobber REG_CC. > > * insn output for compares looks ahead to determine the branch mode in > use. This needs also "dead_or_set_regno_p (*, REG_CC)". > > * Add RTL peepholes for decrement-and-branch detection. > > Finally, it fixes some of the many indentation glitches left over from > PR92729. > > Ok? > > I'd also backport this one because all of v12+ is affected by the wrong > code. Johann -- gcc/ PR target/109650 PR target/92729 * config/avr/avr-passes.def (avr_pass_ifelse): Insert new pass. * config/avr/avr.cc (avr_pass_ifelse): New RTL pass. (avr_pass_data_ifelse): New pass_data for it. (make_avr_pass_ifelse, avr_redundant_compare, avr_cbranch_cost) (avr_canonicalize_comparison, avr_out_plus_set_ZN) (avr_out_cmp_ext): New functions. (compare_condtition): Make sure REG_CC dies in the branch insn. (avr_rtx_costs_1): Add computation of cbranch costs. (avr_adjust_insn_length) [ADJUST_LEN_ADD_SET_ZN, ADJUST_LEN_CMP_ZEXT]: [ADJUST_LEN_CMP_SEXT]Handle them. (TARGET_CANONICALIZE_COMPARISON): New define. (avr_simplify_comparison_p, compare_diff_p, avr_compare_pattern) (avr_reorg_remove_redundant_compare, avr_reorg): Remove functions. (TARGET_MACHINE_DEPENDENT_REORG): Remove define. * avr-protos.h (avr_simplify_comparison_p): Remove proto. (make_avr_pass_ifelse, avr_out_plus_set_ZN, cc_reg_rtx) (avr_out_cmp_zext): New Protos * config/avr/avr.md (branch, difficult_branch): Don't split insns. (*cbranchhi.zero-extend.0", *cbranchhi.zero-extend.1") (*swapped_tst, *add.for.eqne.): New insns. (*cbranch4): Rename to cbranch4_insn. (define_peephole): Add dead_or_set_regno_p(insn,REG_CC) as needed. (define_deephole2): Add peep2_regno_dead_p(*,REG_CC) as needed. Add new RTL peepholes for decrement-and-branch and *swapped_tst. Rework signtest-and-branch peepholes for *sbrx_branch. (adjust_len) [add_set_ZN, cmp_zext]: New. (QIPSI): New mode iterator. (ALLs1, ALLs2, ALLs4, ALLs234): New mode iterators. (gelt): New code iterator. (gelt_eqne): New code attribute. (rvbranch, *rvbranch, difficult_rvbranch, *difficult_rvbranch) (branch_unspec, *negated_tst, *reversed_tst) (*cmpqi_sign_extend): Remove insns. (define_c_enum "unspec") [UNSPEC_IDENTITY]: Remove. * config/avr/avr-dimode.md (cbranch4): Canonicalize comparisons. * config/avr/predicates.md (scratch_or_d_register_operand): New. * config/avr/contraints.md (Yxx): New constraint. gcc/testsuite/ PR target/109650 * config/avr/torture/pr109650-1.c: New test. * config/avr/torture/pr109650-2.c: New test. --------------XkpGvOEZjLLfflK5vnvlkUr3 Content-Type: text/x-patch; charset=UTF-8; name="pr109650-v4.diff" Content-Disposition: attachment; filename="pr109650-v4.diff" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL2djYy9jb25maWcvYXZyL2F2ci1kaW1vZGUubWQgYi9nY2MvY29uZmln L2F2ci9hdnItZGltb2RlLm1kCmluZGV4IGMwYmIwNGZmOWUwLi45MWYwZDM5NTc2MSAxMDA2 NDQKLS0tIGEvZ2NjL2NvbmZpZy9hdnIvYXZyLWRpbW9kZS5tZAorKysgYi9nY2MvY29uZmln L2F2ci9hdnItZGltb2RlLm1kCkBAIC00NTUsMTIgKzQ1NSwxOCBAQCAoZGVmaW5lX2V4cGFu ZCAiY29uZGl0aW9uYWxfanVtcCIKIChkZWZpbmVfZXhwYW5kICJjYnJhbmNoPG1vZGU+NCIK ICAgWyhzZXQgKHBjKQogICAgICAgICAoaWZfdGhlbl9lbHNlIChtYXRjaF9vcGVyYXRvciAw ICJvcmRlcmVkX2NvbXBhcmlzb25fb3BlcmF0b3IiCi0gICAgICAgICAgICAgICAgICAgICAg ICBbKG1hdGNoX29wZXJhbmQ6QUxMOCAxICJyZWdpc3Rlcl9vcGVyYW5kIiAgIiIpCi0gICAg ICAgICAgICAgICAgICAgICAgICAgKG1hdGNoX29wZXJhbmQ6QUxMOCAyICJub25tZW1vcnlf b3BlcmFuZCIgIiIpXSkKLSAgICAgICAgIChsYWJlbF9yZWYgKG1hdGNoX29wZXJhbmQgMyAi IiAiIikpCi0gICAgICAgICAocGMpKSldCisgICAgICAgICAgICAgICAgICAgICAgICBbKG1h dGNoX29wZXJhbmQ6QUxMOCAxICJyZWdpc3Rlcl9vcGVyYW5kIikKKyAgICAgICAgICAgICAg ICAgICAgICAgICAobWF0Y2hfb3BlcmFuZDpBTEw4IDIgIm5vbm1lbW9yeV9vcGVyYW5kIild KQorICAgICAgICAgICAgICAgICAgICAgIChsYWJlbF9yZWYgKG1hdGNoX29wZXJhbmQgMykp CisgICAgICAgICAgICAgICAgICAgICAgKHBjKSkpXQogICAiYXZyX2hhdmVfZGltb2RlIgog ICAgeworICAgIGludCBpY29kZSA9IChpbnQpIEdFVF9DT0RFIChvcGVyYW5kc1swXSk7CisK KyAgICB0YXJnZXRtLmNhbm9uaWNhbGl6ZV9jb21wYXJpc29uICgmaWNvZGUsICZvcGVyYW5k c1sxXSwgJm9wZXJhbmRzWzJdLCBmYWxzZSk7CisgICAgb3BlcmFuZHNbMF0gPSBnZW5fcnR4 X2ZtdF9lZSAoKGVudW0gcnR4X2NvZGUpIGljb2RlLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFZPSURtb2RlLCBvcGVyYW5kc1sxXSwgb3BlcmFuZHNbMl0pOworCiAg ICAgcnR4IGFjY19hID0gZ2VuX3J0eF9SRUcgKDxNT0RFPm1vZGUsIEFDQ19BKTsKIAogICAg IGF2cl9maXhfaW5wdXRzIChvcGVyYW5kcywgMSA8PCAyLCByZWdtYXNrICg8TU9ERT5tb2Rl LCBBQ0NfQSkpOwpAQCAtNDkwLDggKzQ5Niw4IEBAIChkZWZpbmVfaW5zbl9hbmRfc3BsaXQg ImNicmFuY2hfPG1vZGU+Ml9zcGxpdCIKICAgICAgICAgKGlmX3RoZW5fZWxzZSAobWF0Y2hf b3BlcmF0b3IgMCAib3JkZXJlZF9jb21wYXJpc29uX29wZXJhdG9yIgogICAgICAgICAgICAg ICAgICAgICAgICAgWyhyZWc6QUxMOCBBQ0NfQSkKICAgICAgICAgICAgICAgICAgICAgICAg ICAocmVnOkFMTDggQUNDX0IpXSkKLSAgICAgICAgIChsYWJlbF9yZWYgKG1hdGNoX29wZXJh bmQgMSAiIiAiIikpCi0gICAgICAgICAocGMpKSldCisgICAgICAgICAgICAgICAgICAgICAg KGxhYmVsX3JlZiAobWF0Y2hfb3BlcmFuZCAxKSkKKyAgICAgICAgICAgICAgICAgICAgICAo cGMpKSldCiAgICJhdnJfaGF2ZV9kaW1vZGUiCiAgICIjIgogICAiJiYgcmVsb2FkX2NvbXBs ZXRlZCIKQEAgLTU0NCw4ICs1NTAsOCBAQCAoZGVmaW5lX2luc25fYW5kX3NwbGl0ICJjYnJh bmNoX2NvbnN0Xzxtb2RlPjJfc3BsaXQiCiAgICAgICAgIChpZl90aGVuX2Vsc2UgKG1hdGNo X29wZXJhdG9yIDAgIm9yZGVyZWRfY29tcGFyaXNvbl9vcGVyYXRvciIKICAgICAgICAgICAg ICAgICAgICAgICAgIFsocmVnOkFMTDggQUNDX0EpCiAgICAgICAgICAgICAgICAgICAgICAg ICAgKG1hdGNoX29wZXJhbmQ6QUxMOCAxICJjb25zdF9vcGVyYW5kIiAibiBZbm4iKV0pCi0g ICAgICAgICAobGFiZWxfcmVmIChtYXRjaF9vcGVyYW5kIDIgIiIgIiIpKQotICAgICAgICAg KHBjKSkpCisgICAgICAgICAgICAgICAgICAgICAgKGxhYmVsX3JlZiAobWF0Y2hfb3BlcmFu ZCAyICIiICIiKSkKKyAgICAgICAgICAgICAgICAgICAgICAocGMpKSkKICAgIChjbG9iYmVy IChtYXRjaF9zY3JhdGNoOlFJIDMgIj0mZCIpKV0KICAgImF2cl9oYXZlX2RpbW9kZQogICAg JiYgIXM4X29wZXJhbmQgKG9wZXJhbmRzWzFdLCBWT0lEbW9kZSkiCmRpZmYgLS1naXQgYS9n Y2MvY29uZmlnL2F2ci9hdnItcGFzc2VzLmRlZiBiL2djYy9jb25maWcvYXZyL2F2ci1wYXNz ZXMuZGVmCmluZGV4IDAyY2E3MzdkZWVlLi45ZmY5YjIzZjYyYyAxMDA2NDQKLS0tIGEvZ2Nj L2NvbmZpZy9hdnIvYXZyLXBhc3Nlcy5kZWYKKysrIGIvZ2NjL2NvbmZpZy9hdnIvYXZyLXBh c3Nlcy5kZWYKQEAgLTQzLDMgKzQzLDIzIEBAIElOU0VSVF9QQVNTX0JFRk9SRSAocGFzc19m cmVlX2NmZywgMSwgYXZyX3Bhc3NfcmVjb21wdXRlX25vdGVzKTsKICAgIGluc25zIHdpdGhh b3V0IGFueSBpbnNucyBpbiBiZXR3ZWVuLiAgKi8KIAogSU5TRVJUX1BBU1NfQUZURVIgKHBh c3NfZXhwYW5kLCAxLCBhdnJfcGFzc19jYXNlc2kpOworCisvKiBJZi1lbHNlIGRlY2lzaW9u IHRyZWVzIGdlbmVyYXRlZCBmb3Igc3dpdGNoIC8gY2FzZSBtYXkgcHJvZHVjZSBzZXF1ZW5j ZXMKKyAgIGxpa2UKKworICAgICAgU1JFRyA9IGNvbXBhcmUgKHJlZywgdmFsKTsKKwkgIGlm IChTUkVHID09IDApICBnb3RvIGxhYmVsMTsKKyAgICAgIFNSRUcgPSBjb21wYXJlIChyZWcs IDEgKyB2YWwpOworCSAgaWYgKFNSRUcgPj0gMCkgIGdvdG8gbGFiZWwyOworCisgICB3aGlj aCBjYW4gYmUgb3B0aW1pemVkIHRvCisKKyAgICAgIFNSRUcgPSBjb21wYXJlIChyZWcsIHZh bCk7CisJICBpZiAoU1JFRyA9PSAwKSAgZ290byBsYWJlbDE7CisJICBpZiAoU1JFRyA+PSAw KSAgZ290byBsYWJlbDI7CisKKyAgIFRoZSBvcHRpbWFsIHBsYWNlIGZvciBzdWNoIGEgcGFz cyB3b3VsZCBiZSBkaXJlY3RseSBhZnRlciBleHBhbmQsIGJ1dAorICAgaXQncyBub3QgcG9z c2libGUgZm9yIGEganVtcCBpbnNuIHRvIHRhcmdldCBtb3JlIHRoYW4gb25lIGNvZGUgbGFi ZWwuCisgICBIZW5jZSwgcnVuIGEgbWluaSBwYXNzIHJpZ2h0IGJlZm9yZSBzcGxpdDIgd2hp Y2ggaW50cm9kdWNlcyBSRUdfQ0MuICAqLworCitJTlNFUlRfUEFTU19CRUZPUkUgKHBhc3Nf c3BsaXRfYWZ0ZXJfcmVsb2FkLCAxLCBhdnJfcGFzc19pZmVsc2UpOwpkaWZmIC0tZ2l0IGEv Z2NjL2NvbmZpZy9hdnIvYXZyLXByb3Rvcy5oIGIvZ2NjL2NvbmZpZy9hdnIvYXZyLXByb3Rv cy5oCmluZGV4IGVjOTZmZDQ1ODY1Li5lYmE2ZjlmZWY0NiAxMDA2NDQKLS0tIGEvZ2NjL2Nv bmZpZy9hdnIvYXZyLXByb3Rvcy5oCisrKyBiL2djYy9jb25maWcvYXZyL2F2ci1wcm90b3Mu aApAQCAtNTgsNiArNTgsOCBAQCBleHRlcm4gY29uc3QgY2hhciAqcmV0X2NvbmRfYnJhbmNo IChydHggeCwgaW50IGxlbiwgaW50IHJldmVyc2UpOwogZXh0ZXJuIGNvbnN0IGNoYXIgKmF2 cl9vdXRfbW92cHNpIChydHhfaW5zbiAqLCBydHgqLCBpbnQqKTsKIGV4dGVybiBjb25zdCBj aGFyICphdnJfb3V0X3NpZ25fZXh0ZW5kIChydHhfaW5zbiAqLCBydHgqLCBpbnQqKTsKIGV4 dGVybiBjb25zdCBjaGFyICphdnJfb3V0X2luc2VydF9ub3RiaXQgKHJ0eF9pbnNuICosIHJ0 eCosIHJ0eCwgaW50Kik7CitleHRlcm4gY29uc3QgY2hhciAqYXZyX291dF9wbHVzX3NldF9a TiAocnR4KiwgaW50Kik7CitleHRlcm4gY29uc3QgY2hhciAqYXZyX291dF9jbXBfZXh0IChy dHgqLCBlbnVtIHJ0eF9jb2RlLCBpbnQqKTsKIAogZXh0ZXJuIGNvbnN0IGNoYXIgKmFzaGxx aTNfb3V0IChydHhfaW5zbiAqaW5zbiwgcnR4IG9wZXJhbmRzW10sIGludCAqbGVuKTsKIGV4 dGVybiBjb25zdCBjaGFyICphc2hsaGkzX291dCAocnR4X2luc24gKmluc24sIHJ0eCBvcGVy YW5kc1tdLCBpbnQgKmxlbik7CkBAIC0xMTIsOCArMTE0LDYgQEAgZXh0ZXJuIGludCBqdW1w X292ZXJfb25lX2luc25fcCAocnR4X2luc24gKmluc24sIHJ0eCBkZXN0KTsKIAogZXh0ZXJu IHZvaWQgYXZyX2ZpbmFsX3ByZXNjYW5faW5zbiAocnR4X2luc24gKmluc24sIHJ0eCAqb3Bl cmFuZCwKIAkJCQkgICAgaW50IG51bV9vcGVyYW5kcyk7Ci1leHRlcm4gaW50IGF2cl9zaW1w bGlmeV9jb21wYXJpc29uX3AgKG1hY2hpbmVfbW9kZSBtb2RlLAotCQkJCSAgICAgIFJUWF9D T0RFIG9wLCBydHggeCk7CiBleHRlcm4gUlRYX0NPREUgYXZyX25vcm1hbGl6ZV9jb25kaXRp b24gKFJUWF9DT0RFIGNvbmRpdGlvbik7CiBleHRlcm4gdm9pZCBvdXRfc2hpZnRfd2l0aF9j bnQgKGNvbnN0IGNoYXIgKnRlbXBsLCBydHhfaW5zbiAqaW5zbiwKIAkJCQlydHggb3BlcmFu ZHNbXSwgaW50ICpsZW4sIGludCB0X2xlbik7CkBAIC0xNDUsNiArMTQ1LDcgQEAgZXh0ZXJu IHJ0eCB0bXBfcmVnX3J0eDsKIGV4dGVybiBydHggemVyb19yZWdfcnR4OwogZXh0ZXJuIHJ0 eCBhbGxfcmVnc19ydHhbMzJdOwogZXh0ZXJuIHJ0eCByYW1wel9ydHg7CitleHRlcm4gcnR4 IGNjX3JlZ19ydHg7CiAKICNlbmRpZiAvKiBSVFhfQ09ERSAqLwogCkBAIC0xNjAsNiArMTYx LDcgQEAgY2xhc3MgcnRsX29wdF9wYXNzOwogZXh0ZXJuIHJ0bF9vcHRfcGFzcyAqbWFrZV9h dnJfcGFzc19wcmVfcHJvZXAgKGdjYzo6Y29udGV4dCAqKTsKIGV4dGVybiBydGxfb3B0X3Bh c3MgKm1ha2VfYXZyX3Bhc3NfcmVjb21wdXRlX25vdGVzIChnY2M6OmNvbnRleHQgKik7CiBl eHRlcm4gcnRsX29wdF9wYXNzICptYWtlX2F2cl9wYXNzX2Nhc2VzaSAoZ2NjOjpjb250ZXh0 ICopOworZXh0ZXJuIHJ0bF9vcHRfcGFzcyAqbWFrZV9hdnJfcGFzc19pZmVsc2UgKGdjYzo6 Y29udGV4dCAqKTsKIAogLyogRnJvbSBhdnItbG9nLmNjICovCiAKZGlmZiAtLWdpdCBhL2dj Yy9jb25maWcvYXZyL2F2ci5jYyBiL2djYy9jb25maWcvYXZyL2F2ci5jYwppbmRleCBjMTkz NDMwY2YwNy4uYThiNjNjMmE5MDkgMTAwNjQ0Ci0tLSBhL2djYy9jb25maWcvYXZyL2F2ci5j YworKysgYi9nY2MvY29uZmlnL2F2ci9hdnIuY2MKQEAgLTM1OSw2ICszNTksNDEgQEAgcHVi bGljOgogICB9CiB9OyAvLyBhdnJfcGFzc19jYXNlc2kKIAorCitzdGF0aWMgY29uc3QgcGFz c19kYXRhIGF2cl9wYXNzX2RhdGFfaWZlbHNlID0KK3sKKyAgUlRMX1BBU1MsICAgICAgLy8g dHlwZQorICAiIiwgICAgICAgICAgICAvLyBuYW1lICh3aWxsIGJlIHBhdGNoZWQpCisgIE9Q VEdST1VQX05PTkUsIC8vIG9wdGluZm9fZmxhZ3MKKyAgVFZfREZfU0NBTiwgICAgLy8gdHZf aWQKKyAgMCwgICAgICAgICAgICAgLy8gcHJvcGVydGllc19yZXF1aXJlZAorICAwLCAgICAg ICAgICAgICAvLyBwcm9wZXJ0aWVzX3Byb3ZpZGVkCisgIDAsICAgICAgICAgICAgIC8vIHBy b3BlcnRpZXNfZGVzdHJveWVkCisgIDAsICAgICAgICAgICAgIC8vIHRvZG9fZmxhZ3Nfc3Rh cnQKKyAgVE9ET19kZl9maW5pc2ggfCBUT0RPX2RmX3ZlcmlmeSAvLyB0b2RvX2ZsYWdzX2Zp bmlzaAorfTsKKworY2xhc3MgYXZyX3Bhc3NfaWZlbHNlIDogcHVibGljIHJ0bF9vcHRfcGFz cworeworcHVibGljOgorICBhdnJfcGFzc19pZmVsc2UgKGdjYzo6Y29udGV4dCAqY3R4dCwg Y29uc3QgY2hhciAqbmFtZSkKKyAgICA6IHJ0bF9vcHRfcGFzcyAoYXZyX3Bhc3NfZGF0YV9p ZmVsc2UsIGN0eHQpCisgIHsKKyAgICB0aGlzLT5uYW1lID0gbmFtZTsKKyAgfQorCisgIHZv aWQgYXZyX3Jlc3Rfb2ZfaGFuZGxlX2lmZWxzZSAoZnVuY3Rpb24qKTsKKworICB2aXJ0dWFs IGJvb2wgZ2F0ZSAoZnVuY3Rpb24qKSB7IHJldHVybiBvcHRpbWl6ZSA+IDA7IH0KKworICB2 aXJ0dWFsIHVuc2lnbmVkIGludCBleGVjdXRlIChmdW5jdGlvbiAqZnVuYykKKyAgeworICAg IGF2cl9yZXN0X29mX2hhbmRsZV9pZmVsc2UgKGZ1bmMpOworCisgICAgcmV0dXJuIDA7Cisg IH0KK307IC8vIGF2cl9wYXNzX2lmZWxzZQorCiB9IC8vIGFub24gbmFtZXNwYWNlCiAKIHJ0 bF9vcHRfcGFzcyoKQEAgLTM3Myw2ICs0MDgsMTIgQEAgbWFrZV9hdnJfcGFzc19jYXNlc2kg KGdjYzo6Y29udGV4dCAqY3R4dCkKICAgcmV0dXJuIG5ldyBhdnJfcGFzc19jYXNlc2kgKGN0 eHQsICJhdnItY2FzZXNpIik7CiB9CiAKK3J0bF9vcHRfcGFzcyoKK21ha2VfYXZyX3Bhc3Nf aWZlbHNlIChnY2M6OmNvbnRleHQgKmN0eHQpCit7CisgIHJldHVybiBuZXcgYXZyX3Bhc3Nf aWZlbHNlIChjdHh0LCAiYXZyLWlmZWxzZSIpOworfQorCiAKIC8qIE1ha2Ugb25lIHBhcmFs bGVsIGluc24gd2l0aCBhbGwgdGhlIHBhdHRlcm5zIGZyb20gaW5zbnMgaVswXS4uaVs1XS4g ICovCiAKQEAgLTY4Niw2ICs3MjcsMzA0IEBAIGF2cl9wYXNzX2Nhc2VzaTo6YXZyX3Jlc3Rf b2ZfaGFuZGxlX2Nhc2VzaSAoZnVuY3Rpb24gKmZ1bmMpCiB9CiAKIAorLyogQSBoZWxwZXIg Zm9yIHRoZSBuZXh0IG1ldGhvZC4gIFN1cHBvc2Ugd2UgaGF2ZSB0d28gY29uZGl0aW9uYWwg YnJhbmNoZXMKKworICAgICAgaWYgKHJlZyA8Y29uZDE+IHh2YWwxKSBnb3RvIGxhYmVsMTsK KyAgICAgIGlmIChyZWcgPGNvbmQyPiB4dmFsMikgZ290byBsYWJlbDI7CisKKyAgIElmIHRo ZSBzZWNvbmQgY29tcGFyaXNvbiBpcyByZWR1bmRhbnQgYW5kIHRoZXJlIGlzIGEgY29kZSA8 Y29uZD4gc3VjaAorICAgdGhhdCB0aGUgc2VxdWVuY2UgY2FuIGJlIHBlcmZvcm1lZCBhcwor CisgICAgICBSRUdfQ0MgPSBjb21wYXJlIChyZWcsIHh2YWwxKTsKKyAgICAgIGlmIChSRUdf Q0MgPGNvbmQxPiAwKSAgZ290byBsYWJlbDE7CisgICAgICBpZiAoUkVHX0NDIDxjb25kPiAw KSAgIGdvdG8gbGFiZWwyOworCisgICB0aGVuIHJldHVybiA8Y29uZD4uICBPdGhlcndpc2Us IHJldHVybiBVTktOT1dOLgorICAgeHZhbDEgYW5kIHh2YWwyIGFyZSBDT05TVF9JTlQsIGFu ZCBtb2RlIGlzIHRoZSBzY2FsYXIgaW50IG1vZGUgaW4gd2hpY2gKKyAgIHRoZSBjb21wYXJp c29uIHdpbGwgYmUgY2FycmllZCBvdXQuICByZXZlcnNlX2NvbmQxIGNhbiBiZSBzZXQgdG8g cmV2ZXJzZQorICAgY29uZGl0aW9uIGNvbmQxLiAgVGhpcyBpcyB1c2VmdWwgaWYgdGhlIHNl Y29uZCBjb21wYXJpc29uIGRvZXMgbm90IGZvbGxvdworICAgdGhlIGZpcnN0IG9uZSwgYnV0 IGlzIGxvY2F0ZWQgYWZ0ZXIgbGFiZWwxIGxpa2UgaW46CisKKyAgICAgIGlmIChyZWcgPGNv bmQxPiB4dmFsMSkgZ290byBsYWJlbDE7CisgICAgICAuLi4KKyAgICAgIGxhYmVsMToKKyAg ICAgIGlmIChyZWcgPGNvbmQyPiB4dmFsMikgZ290byBsYWJlbDI7ICAqLworCitzdGF0aWMg ZW51bSBydHhfY29kZQorYXZyX3JlZHVuZGFudF9jb21wYXJlIChlbnVtIHJ0eF9jb2RlIGNv bmQxLCBydHggeHZhbDEsCisJCSAgICAgICBlbnVtIHJ0eF9jb2RlIGNvbmQyLCBydHggeHZh bDIsCisJCSAgICAgICBtYWNoaW5lX21vZGUgbW9kZSwgYm9vbCByZXZlcnNlX2NvbmQxKQor eworICBIT1NUX1dJREVfSU5UIGl2YWwxID0gSU5UVkFMICh4dmFsMSk7CisgIEhPU1RfV0lE RV9JTlQgaXZhbDIgPSBJTlRWQUwgKHh2YWwyKTsKKworICB1bnNpZ25lZCBIT1NUX1dJREVf SU5UIG1hc2sgPSBHRVRfTU9ERV9NQVNLIChtb2RlKTsKKyAgdW5zaWduZWQgSE9TVF9XSURF X0lOVCB1dmFsMSA9IG1hc2sgJiBVSU5UVkFMICh4dmFsMSk7CisgIHVuc2lnbmVkIEhPU1Rf V0lERV9JTlQgdXZhbDIgPSBtYXNrICYgVUlOVFZBTCAoeHZhbDIpOworCisgIGlmIChyZXZl cnNlX2NvbmQxKQorICAgIGNvbmQxID0gcmV2ZXJzZV9jb25kaXRpb24gKGNvbmQxKTsKKwor ICBpZiAoY29uZDEgPT0gRVEpCisgICAgeworICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisgICAgICAvLyBBIHNlcXVlbmNlIGxpa2UK KyAgICAgIC8vICAgIGlmIChyZWcgPT0gdmFsKSAgZ290byBsYWJlbDE7CisgICAgICAvLyAg ICBpZiAocmVnID4gdmFsKSAgIGdvdG8gbGFiZWwyOworICAgICAgLy8gY2FuIGJlIHJlLXdy aXR0ZW4gdXNpbmcgdGhlIHNhbWUsIHNpbXBsZSBjb21wYXJpc29uIGxpa2UgaW46CisgICAg ICAvLyAgICBSRUdfQ0MgPSBjb21wYXJlIChyZWcsIHZhbCkKKyAgICAgIC8vICAgIGlmIChS RUdfQ0MgPT0gMCkgIGdvdG8gbGFiZWwxOworICAgICAgLy8gICAgaWYgKFJFR19DQyA+PSAw KSAgZ290byBsYWJlbDI7CisgICAgICBpZiAoaXZhbDEgPT0gaXZhbDIKKwkgICYmIChjb25k MiA9PSBHVCB8fCBjb25kMiA9PSBHVFUpKQorCXJldHVybiBhdnJfbm9ybWFsaXplX2NvbmRp dGlvbiAoY29uZDIpOworCisgICAgICAvLyBTaW1pbGFyLCBidXQgdGhlIGlucHV0IHNlcXVl bmNlIGlzIGxpa2UKKyAgICAgIC8vICAgIGlmIChyZWcgPT0gdmFsKSAgZ290byBsYWJlbDE7 CisgICAgICAvLyAgICBpZiAocmVnID49IHZhbCkgIGdvdG8gbGFiZWwyOworICAgICAgaWYg KGl2YWwxID09IGl2YWwyCisJICAmJiAoY29uZDIgPT0gR0UgfHwgY29uZDIgPT0gR0VVKSkK KwlyZXR1cm4gY29uZDI7CisKKyAgICAgIC8vIFNpbWlsYXIsIGJ1dCB0aGUgaW5wdXQgc2Vx dWVuY2UgaXMgbGlrZQorICAgICAgLy8gICAgaWYgKHJlZyA9PSB2YWwpICAgICAgZ290byBs YWJlbDE7CisgICAgICAvLyAgICBpZiAocmVnID49IHZhbCArIDEpICBnb3RvIGxhYmVsMjsK KyAgICAgIGlmICgoY29uZDIgPT0gR0UgJiYgaXZhbDIgPT0gMSArIGl2YWwxKQorCSAgfHwg KGNvbmQyID09IEdFVSAmJiB1dmFsMiA9PSAxICsgdXZhbDEpKQorCXJldHVybiBjb25kMjsK KworICAgICAgLy8gU2ltaWxhciwgYnV0IHRoZSBpbnB1dCBzZXF1ZW5jZSBpcyBsaWtlCisg ICAgICAvLyAgICBpZiAocmVnID09IHZhbCkgICAgICBnb3RvIGxhYmVsMTsKKyAgICAgIC8v ICAgIGlmIChyZWcgPiAgdmFsIC0gMSkgIGdvdG8gbGFiZWwyOworICAgICAgaWYgKChjb25k MiA9PSBHVCAmJiBpdmFsMiA9PSBpdmFsMSAtIDEpCisJICB8fCAoY29uZDIgPT0gR1RVICYm IHV2YWwyID09IHV2YWwxIC0gMSkpCisJcmV0dXJuIGF2cl9ub3JtYWxpemVfY29uZGl0aW9u IChjb25kMik7CisKKyAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLworICAgICAgLy8gQSBzZXF1ZW5jZSBsaWtlCisgICAg ICAvLyAgICBpZiAocmVnID09IHZhbCkgICAgICBnb3RvIGxhYmVsMTsKKyAgICAgIC8vICAg IGlmIChyZWcgPCAxICsgdmFsKSAgIGdvdG8gbGFiZWwyOworICAgICAgLy8gY2FuIGJlIHJl LXdyaXR0ZW4gYXMKKyAgICAgIC8vICAgIFJFR19DQyA9IGNvbXBhcmUgKHJlZywgdmFsKQor ICAgICAgLy8gICAgaWYgKFJFR19DQyA9PSAwKSAgZ290byBsYWJlbDE7CisgICAgICAvLyAg ICBpZiAoUkVHX0NDIDwgMCkgICBnb3RvIGxhYmVsMjsKKyAgICAgIGlmICgoY29uZDIgPT0g TFQgJiYgaXZhbDIgPT0gMSArIGl2YWwxKQorCSAgfHwgKGNvbmQyID09IExUVSAmJiB1dmFs MiA9PSAxICsgdXZhbDEpKQorCXJldHVybiBjb25kMjsKKworICAgICAgLy8gU2ltaWxhciwg YnV0IHdpdGggYW4gaW5wdXQgc2VxdWVuY2UgbGlrZQorICAgICAgLy8gICAgaWYgKHJlZyA9 PSB2YWwpICAgZ290byBsYWJlbDE7CisgICAgICAvLyAgICBpZiAocmVnIDw9IHZhbCkgICBn b3RvIGxhYmVsMjsKKyAgICAgIGlmIChpdmFsMSA9PSBpdmFsMgorCSAgJiYgKGNvbmQyID09 IExFIHx8IGNvbmQyID09IExFVSkpCisJcmV0dXJuIGF2cl9ub3JtYWxpemVfY29uZGl0aW9u IChjb25kMik7CisKKyAgICAgIC8vIFNpbWlsYXIsIGJ1dCB3aXRoIGFuIGlucHV0IHNlcXVl bmNlIGxpa2UKKyAgICAgIC8vICAgIGlmIChyZWcgPT0gdmFsKSAgZ290byBsYWJlbDE7Cisg ICAgICAvLyAgICBpZiAocmVnIDwgdmFsKSAgIGdvdG8gbGFiZWwyOworICAgICAgaWYgKGl2 YWwxID09IGl2YWwyCisJICAmJiAoY29uZDIgPT0gTFQgfHwgY29uZDIgPT0gTFRVKSkKKwly ZXR1cm4gY29uZDI7CisKKyAgICAgIC8vIFNpbWlsYXIsIGJ1dCB3aXRoIGFuIGlucHV0IHNl cXVlbmNlIGxpa2UKKyAgICAgIC8vICAgIGlmIChyZWcgPT0gdmFsKSAgICAgIGdvdG8gbGFi ZWwxOworICAgICAgLy8gICAgaWYgKHJlZyA8PSB2YWwgLSAxKSAgZ290byBsYWJlbDI7Cisg ICAgICBpZiAoKGNvbmQyID09IExFICYmIGl2YWwyID09IGl2YWwxIC0gMSkKKwkgIHx8IChj b25kMiA9PSBMRVUgJiYgdXZhbDIgPT0gdXZhbDEgLSAxKSkKKwlyZXR1cm4gYXZyX25vcm1h bGl6ZV9jb25kaXRpb24gKGNvbmQyKTsKKworICAgIH0gLy8gY29uZDEgPT0gRVEKKworICBy ZXR1cm4gVU5LTk9XTjsKK30KKworCisvKiBJZi1lbHNlIGRlY2lzaW9uIHRyZWVzIGdlbmVy YXRlZCBmb3Igc3dpdGNoIC8gY2FzZSBtYXkgcHJvZHVjZSBzZXF1ZW5jZXMKKyAgIGxpa2UK KworICAgICAgU1JFRyA9IGNvbXBhcmUgKHJlZywgdmFsKTsKKwkgIGlmIChTUkVHID09IDAp ICBnb3RvIGxhYmVsMTsKKyAgICAgIFNSRUcgPSBjb21wYXJlIChyZWcsIDEgKyB2YWwpOwor CSAgaWYgKFNSRUcgPj0gMCkgIGdvdG8gbGFiZWwyOworCisgICB3aGljaCBjYW4gYmUgb3B0 aW1pemVkIHRvCisKKyAgICAgIFNSRUcgPSBjb21wYXJlIChyZWcsIHZhbCk7CisJICBpZiAo U1JFRyA9PSAwKSAgZ290byBsYWJlbDE7CisJICBpZiAoU1JFRyA+PSAwKSAgZ290byBsYWJl bDI7CisKKyAgIFRoZSBvcHRpbWFsIHBsYWNlIGZvciBzdWNoIGEgcGFzcyB3b3VsZCBiZSBk aXJlY3RseSBhZnRlciBleHBhbmQsIGJ1dAorICAgaXQncyBub3QgcG9zc2libGUgZm9yIGEg anVtcCBpbnNuIHRvIHRhcmdldCBtb3JlIHRoYW4gb25lIGNvZGUgbGFiZWwuCisgICBIZW5j ZSwgcnVuIGEgbWluaSBwYXNzIHJpZ2h0IGJlZm9yZSBzcGxpdDIgd2hpY2ggaW50cm9kdWNl cyBSRUdfQ0MuICAqLworCit2b2lkCithdnJfcGFzc19pZmVsc2U6OmF2cl9yZXN0X29mX2hh bmRsZV9pZmVsc2UgKGZ1bmN0aW9uKikKK3sKKyAgcnR4X2luc24gKm5leHRfaW5zbjsKKwor ICBmb3IgKHJ0eF9pbnNuICppbnNuID0gZ2V0X2luc25zKCk7IGluc247IGluc24gPSBuZXh0 X2luc24pCisgICAgeworICAgICAgbmV4dF9pbnNuID0gbmV4dF9ub25ub3RlX25vbmRlYnVn X2luc24gKGluc24pOworCisgICAgICBpZiAoISBuZXh0X2luc24pCisJYnJlYWs7CisKKyAg ICAgIC8vIFNlYXJjaCBmb3IgdHdvIGNicmFuY2ggaW5zbnMuICBUaGUgZmlyc3Qgb25lIGlz IGEgY2JyYW5jaC4KKyAgICAgIC8vIEZpbHRlciBmb3IgImNicmFuY2g8bW9kZT40X2luc24i IHdpdGggbW9kZSBpbiBRSSwgSEksIFBTSSwgU0kuCisKKyAgICAgIGlmICghIEpVTVBfUCAo aW5zbikpCisJY29udGludWU7CisKKyAgICAgIGludCBpY29kZTEgPSByZWNvZ19tZW1vaXpl ZCAoaW5zbik7CisKKyAgICAgIGlmIChpY29kZTEgIT0gQ09ERV9GT1JfY2JyYW5jaHFpNF9p bnNuCisJICAmJiBpY29kZTEgIT0gQ09ERV9GT1JfY2JyYW5jaGhpNF9pbnNuCisJICAmJiBp Y29kZTEgIT0gQ09ERV9GT1JfY2JyYW5jaHBzaTRfaW5zbgorCSAgJiYgaWNvZGUxICE9IENP REVfRk9SX2NicmFuY2hzaTRfaW5zbikKKwljb250aW51ZTsKKworICAgICAgcnR4X2p1bXBf aW5zbiAqaW5zbjEgPSBhc19hPHJ0eF9qdW1wX2luc24gKj4gKGluc24pOworICAgICAgcnR4 X2p1bXBfaW5zbiAqaW5zbjIgPSBudWxscHRyOworICAgICAgYm9vbCBmb2xsb3dfbGFiZWwx ID0gZmFsc2U7CisKKyAgICAgIC8vIEV4dHJhY3QgdGhlIG9wZXJhbmRzIG9mIHRoZSBmaXJz dCBpbnNuOgorICAgICAgLy8gJDAgPSBjb21wYXJpc29uIG9wZXJhdG9yICgkMSwgJDIpCisg ICAgICAvLyAkMSA9IHJlZworICAgICAgLy8gJDIgPSByZWcgb3IgY29uc3RfaW50CisgICAg ICAvLyAkMyA9IGNvZGVfbGFiZWwKKyAgICAgIC8vICQ0ID0gb3B0aW9uYWwgU0NSQVRDSCBm b3IgSEksIFBTSSwgU0kgY2FzZXMuCisKKyAgICAgIGNvbnN0IGF1dG8gJm9wID0gcmVjb2df ZGF0YS5vcGVyYW5kOworCisgICAgICBleHRyYWN0X2luc24gKGluc24xKTsKKyAgICAgIHJ0 eCB4b3AxWzVdID0geyBvcFswXSwgb3BbMV0sIG9wWzJdLCBvcFszXSwgb3BbNF0gfTsKKyAg ICAgIGludCBuX29wZXJhbmRzID0gcmVjb2dfZGF0YS5uX29wZXJhbmRzOworCisgICAgICAv LyBGb3Igbm93LCB3ZSBjYW4gb3B0aW1pemUgY2JyYW5jaGVzIHRoYXQgZm9sbG93IGFuIEVR IGNicmFuY2gsCisgICAgICAvLyBhbmQgY2JyYW5jaGVzIHRoYXQgZm9sbG93IHRoZSBsYWJl bCBvZiBhIE5FIGNicmFuY2guCisKKyAgICAgIGlmIChHRVRfQ09ERSAoeG9wMVswXSkgPT0g RVEKKwkgICYmIEpVTVBfUCAobmV4dF9pbnNuKQorCSAgJiYgcmVjb2dfbWVtb2l6ZWQgKG5l eHRfaW5zbikgPT0gaWNvZGUxKQorCXsKKwkgIC8vIFRoZSAybmQgY2JyYW5jaCBpbnNuIGZv bGxvd3MgaW5zbjEsIGkuZS4gaXMgbG9jYXRlZCBpbiB0aGUKKwkgIC8vIGZhbGx0aHJvdWdo IHBhdGggb2YgaW5zbjEuCisKKwkgIGluc24yID0gYXNfYTxydHhfanVtcF9pbnNuICo+IChu ZXh0X2luc24pOworCX0KKyAgICAgIGVsc2UgaWYgKEdFVF9DT0RFICh4b3AxWzBdKSA9PSBO RSkKKwl7CisJICAvLyBpbnNuMSBtaWdodCBicmFuY2ggdG8gYSBsYWJlbCBmb2xsb3dlZCBi eSBhIGNicmFuY2guCisKKwkgIHJ0eCB0YXJnZXQxID0gSlVNUF9MQUJFTCAoaW5zbjEpOwor CSAgcnR4X2luc24gKmNvZGVfbGFiZWwxID0gSlVNUF9MQUJFTF9BU19JTlNOIChpbnNuMSk7 CisJICBydHhfaW5zbiAqbmV4dCA9IG5leHRfbm9ubm90ZV9ub25kZWJ1Z19pbnNuIChjb2Rl X2xhYmVsMSk7CisJICBydHhfaW5zbiAqYmFycmllciA9IHByZXZfbm9ubm90ZV9ub25kZWJ1 Z19pbnNuIChjb2RlX2xhYmVsMSk7CisKKwkgIGlmICgvLyBUYXJnZXQgbGFiZWwgb2YgaW5z bjEgaXMgdXNlZCBleGFjdGx5IG9uY2UgYW5kCisJICAgICAgLy8gaXMgbm90IGEgZmFsbHRo cnUsIGkuZS4gaXMgcHJlY2VkZWQgYnkgYSBiYXJyaWVyLgorCSAgICAgIExBQkVMX05VU0VT ICh0YXJnZXQxKSA9PSAxCisJICAgICAgJiYgYmFycmllcgorCSAgICAgICYmIEJBUlJJRVJf UCAoYmFycmllcikKKwkgICAgICAvLyBGb2xsb3dpbmcgdGhlIHRhcmdldCBsYWJlbCBpcyBh IGNicmFuY2ggb2YgdGhlIHNhbWUga2luZC4KKwkgICAgICAmJiBuZXh0CisJICAgICAgJiYg SlVNUF9QIChuZXh0KQorCSAgICAgICYmIHJlY29nX21lbW9pemVkIChuZXh0KSA9PSBpY29k ZTEpCisJICAgIHsKKwkgICAgICBmb2xsb3dfbGFiZWwxID0gdHJ1ZTsKKwkgICAgICBpbnNu MiA9IGFzX2E8cnR4X2p1bXBfaW5zbiAqPiAobmV4dCk7CisJICAgIH0KKwl9CisKKyAgICAg IGlmICghIGluc24yKQorCWNvbnRpbnVlOworCisgICAgICAvLyBBbHNvIGV4dHJhY3Qgb3Bl cmFuZHMgb2YgaW5zbjIsIGFuZCBmaWx0ZXIgZm9yIFJFRyArIENPTlNUX0lOVAorICAgICAg Ly8gY29tcGFyc29ucyBhZ2FpbnN0IHRoZSBzYW1lIHJlZ2lzdGVyLgorCisgICAgICBleHRy YWN0X2luc24gKGluc24yKTsKKyAgICAgIHJ0eCB4b3AyWzVdID0geyBvcFswXSwgb3BbMV0s IG9wWzJdLCBvcFszXSwgb3BbNF0gfTsKKworICAgICAgaWYgKCEgcnR4X2VxdWFsX3AgKHhv cDFbMV0sIHhvcDJbMV0pCisJICB8fCAhIENPTlNUX0lOVF9QICh4b3AxWzJdKQorCSAgfHwg ISBDT05TVF9JTlRfUCAoeG9wMlsyXSkpCisJY29udGludWU7CisKKyAgICAgIG1hY2hpbmVf bW9kZSBtb2RlID0gR0VUX01PREUgKHhvcDFbMV0pOworICAgICAgZW51bSBydHhfY29kZSBj b2RlMSA9IEdFVF9DT0RFICh4b3AxWzBdKTsKKyAgICAgIGVudW0gcnR4X2NvZGUgY29kZTIg PSBHRVRfQ09ERSAoeG9wMlswXSk7CisKKyAgICAgIGNvZGUyID0gYXZyX3JlZHVuZGFudF9j b21wYXJlIChjb2RlMSwgeG9wMVsyXSwgY29kZTIsIHhvcDJbMl0sCisJCQkJICAgICBtb2Rl LCBmb2xsb3dfbGFiZWwxKTsKKyAgICAgIGlmIChjb2RlMiA9PSBVTktOT1dOKQorCWNvbnRp bnVlOworCisgICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8KKyAgICAgIC8vIEZvdW5kIGEgcmVwbGFjZW1lbnQuCisKKyAgICAg IGlmIChkdW1wX2ZpbGUpCisJeworCSAgZnByaW50ZiAoZHVtcF9maWxlLCAiXG47OyBGb3Vu ZCBjaGFpbiBvZiBqdW1wX2luc24gJWQgYW5kIgorCQkgICAiIGp1bXBfaW5zbiAlZCwgZm9s bG93X2xhYmVsMT0lZDpcbiIsCisJCSAgIElOU05fVUlEIChpbnNuMSksIElOU05fVUlEIChp bnNuMiksIGZvbGxvd19sYWJlbDEpOworCSAgcHJpbnRfcnRsX3NpbmdsZSAoZHVtcF9maWxl LCBQQVRURVJOIChpbnNuMSkpOworCSAgcHJpbnRfcnRsX3NpbmdsZSAoZHVtcF9maWxlLCBQ QVRURVJOIChpbnNuMikpOworCX0KKworICAgICAgaWYgKCEgZm9sbG93X2xhYmVsMSkKKwlu ZXh0X2luc24gPSBuZXh0X25vbm5vdGVfbm9uZGVidWdfaW5zbiAoaW5zbjIpOworCisgICAg ICAvLyBQb3AgdGhlIG5ldyBicmFuY2ggY29uZGl0aW9ucyBhbmQgdGhlIG5ldyBjb21wYXJp c29uLgorICAgICAgLy8gUHJlbWF0dXJlbHkgc3BsaXQgaW50byBjb21wYXJlICsgYnJhbmNo IHNvIHRoYXQgd2UgY2FuIGRyb3AKKyAgICAgIC8vIHRoZSAybmQgY29tcGFyaXNvbi4gIFRo ZSBmb2xsb3dpbmcgcGFzcywgc3BsaXQyLCBzcGxpdHMgYWxsCisgICAgICAvLyBpbnNucyBm b3IgUkVHX0NDLCBhbmQgaXQgc2hvdWxkIHN0aWxsIHdvcmsgYXMgdXN1YWwgZXZlbiB3aGVu CisgICAgICAvLyB0aGVyZSBhcmUgYWxyZWFkeSBzb21lIFJFR19DQyBpbnNucyBhcm91bmQu CisKKyAgICAgIHJ0eCB4Y29uZDEgPSBnZW5fcnR4X2ZtdF9lZSAoY29kZTEsIFZPSURtb2Rl LCBjY19yZWdfcnR4LCBjb25zdDBfcnR4KTsKKyAgICAgIHJ0eCB4Y29uZDIgPSBnZW5fcnR4 X2ZtdF9lZSAoY29kZTIsIFZPSURtb2RlLCBjY19yZWdfcnR4LCBjb25zdDBfcnR4KTsKKyAg ICAgIHJ0eCB4cGF0MSA9IGdlbl9icmFuY2ggKHhvcDFbM10sIHhjb25kMSk7CisgICAgICBy dHggeHBhdDIgPSBnZW5fYnJhbmNoICh4b3AyWzNdLCB4Y29uZDIpOworICAgICAgcnR4IHhj b21wYXJlID0gTlVMTF9SVFg7CisKKyAgICAgIGlmIChtb2RlID09IFFJbW9kZSkKKwl7CisJ ICBnY2NfYXNzZXJ0IChuX29wZXJhbmRzID09IDQpOworCSAgeGNvbXBhcmUgPSBnZW5fY21w cWkzICh4b3AxWzFdLCB4b3AxWzJdKTsKKwl9CisgICAgICBlbHNlCisJeworCSAgZ2NjX2Fz c2VydCAobl9vcGVyYW5kcyA9PSA1KTsKKwkgIHJ0eCAoKmdlbl9jbXApKHJ0eCxydHgscnR4 KQorCSAgICA9IG1vZGUgPT0gSEltb2RlICA/IGdlbl9nZW5fY29tcGFyZWhpCisJICAgIDog bW9kZSA9PSBQU0ltb2RlID8gZ2VuX2dlbl9jb21wYXJlcHNpCisJICAgIDogZ2VuX2dlbl9j b21wYXJlc2k7IC8vIFNJbW9kZQorCSAgeGNvbXBhcmUgPSBnZW5fY21wICh4b3AxWzFdLCB4 b3AxWzJdLCB4b3AxWzRdKTsKKwl9CisKKyAgICAgIC8vIEVtaXQgdGhhdCBzdHVmZi4KKwor ICAgICAgcnR4X2luc24gKmNtcCA9IGVtaXRfaW5zbl9iZWZvcmUgKHhjb21wYXJlLCBpbnNu MSk7CisgICAgICBydHhfanVtcF9pbnNuICpicmFuY2gxID0gZW1pdF9qdW1wX2luc25fYmVm b3JlICh4cGF0MSwgaW5zbjEpOworICAgICAgcnR4X2p1bXBfaW5zbiAqYnJhbmNoMiA9IGVt aXRfanVtcF9pbnNuX2JlZm9yZSAoeHBhdDIsIGluc24yKTsKKworICAgICAgSlVNUF9MQUJF TCAoYnJhbmNoMSkgPSB4b3AxWzNdOworICAgICAgSlVNUF9MQUJFTCAoYnJhbmNoMikgPSB4 b3AyWzNdOworICAgICAgLy8gZGVsZXRlX2luc24oKSBkZWNyZW1lbnRzIExBQkVMX05VU0VT IHdoZW4gZGVsZXRpbmcgYSBKVU1QX0lOU04sIGJ1dAorICAgICAgLy8gd2hlbiB3ZSBwb3Ag YSBuZXcgSlVNUF9JTlNOLCBkbyBpdCBieSBoYW5kLgorICAgICAgKytMQUJFTF9OVVNFUyAo eG9wMVszXSk7CisgICAgICArK0xBQkVMX05VU0VTICh4b3AyWzNdKTsKKworICAgICAgZGVs ZXRlX2luc24gKGluc24xKTsKKyAgICAgIGRlbGV0ZV9pbnNuIChpbnNuMik7CisKKyAgICAg IC8vIEFzIGEgc2lkZSBlZmZlY3QsIGFsc28gcmVjb2cgdGhlIG5ldyBpbnNucy4KKyAgICAg IGdjY19hc3NlcnQgKHZhbGlkX2luc25fcCAoY21wKSk7CisgICAgICBnY2NfYXNzZXJ0ICh2 YWxpZF9pbnNuX3AgKGJyYW5jaDEpKTsKKyAgICAgIGdjY19hc3NlcnQgKHZhbGlkX2luc25f cCAoYnJhbmNoMikpOworICAgIH0gLy8gbG9vcCBpbnNucworfQorCisKIC8qIFNldCBgYXZy X2FyY2gnIGFzIHNwZWNpZmllZCBieSBgLW1tY3U9Jy4KICAgIFJldHVybiB0cnVlIG9uIHN1 Y2Nlc3MuICAqLwogCkBAIC0zMTczLDI4ICszNTEyLDYgQEAgYXZyX2FzbV9maW5hbF9wb3N0 c2Nhbl9pbnNuIChGSUxFICpzdHJlYW0sIHJ0eF9pbnNuICppbnNuLCBydHgqLCBpbnQpCiB9 CiAKIAotLyogUmV0dXJuIDAgaWYgdW5kZWZpbmVkLCAxIGlmIGFsd2F5cyB0cnVlIG9yIGFs d2F5cyBmYWxzZS4gICovCi0KLWludAotYXZyX3NpbXBsaWZ5X2NvbXBhcmlzb25fcCAobWFj aGluZV9tb2RlIG1vZGUsIFJUWF9DT0RFIG9wLCBydHggeCkKLXsKLSAgdW5zaWduZWQgaW50 IG1heCA9IChtb2RlID09IFFJbW9kZSA/IDB4ZmYgOgotICAgICAgICAgICAgICAgICAgICAg IG1vZGUgPT0gSEltb2RlID8gMHhmZmZmIDoKLSAgICAgICAgICAgICAgICAgICAgICBtb2Rl ID09IFBTSW1vZGUgPyAweGZmZmZmZiA6Ci0gICAgICAgICAgICAgICAgICAgICAgbW9kZSA9 PSBTSW1vZGUgPyAweGZmZmZmZmZmIDogMCk7Ci0gIGlmIChtYXggJiYgb3AgJiYgQ09OU1Rf SU5UX1AgKHgpKQotICAgIHsKLSAgICAgIGlmICh1bnNpZ25lZF9jb25kaXRpb24gKG9wKSAh PSBvcCkKLSAgICAgICAgbWF4ID4+PSAxOwotCi0gICAgICBpZiAobWF4ICE9IChJTlRWQUwg KHgpICYgbWF4KQotICAgICAgICAgICYmIElOVFZBTCAoeCkgIT0gMHhmZikKLSAgICAgICAg cmV0dXJuIDE7Ci0gICAgfQotICByZXR1cm4gMDsKLX0KLQotCiAvKiBXb3JrZXIgZnVuY3Rp b24gZm9yIGBGVU5DVElPTl9BUkdfUkVHTk9fUCcuICAqLwogLyogUmV0dXJucyBub256ZXJv IGlmIFJFR05PIGlzIHRoZSBudW1iZXIgb2YgYSBoYXJkCiAgICByZWdpc3RlciBpbiB3aGlj aCBmdW5jdGlvbiBhcmd1bWVudHMgYXJlIHNvbWV0aW1lcyBwYXNzZWQuICAqLwpAQCAtNTY3 NywyOSArNTk5NCwzNiBAQCBhdnJfZnJhbWVfcG9pbnRlcl9yZXF1aXJlZF9wICh2b2lkKQog ICAgICAgICAgIHx8IGdldF9mcmFtZV9zaXplICgpID4gMCk7CiB9CiAKLS8qIFJldHVybnMg dGhlIGNvbmRpdGlvbiBvZiBjb21wYXJlIGluc24gSU5TTiwgb3IgVU5LTk9XTi4gICovCisK Ky8qIFJldHVybnMgdGhlIGNvbmRpdGlvbiBvZiB0aGUgYnJhbmNoIGZvbGxvd2luZyBJTlNO LCB3aGVyZSBJTlNOIGlzIHNvbWUKKyAgIGNvbXBhcmlzb24uICBJZiB0aGUgbmV4dCBpbnNu IGlzIG5vdCBhIGJyYW5jaCBvciB0aGUgY29uZGl0aW9uIGNvZGUgc2V0CisgICBieSBJTlNO IG1pZ2h0IGJlIHVzZWQgYnkgbW9yZSBpbnNucyB0aGFuIHRoZSBuZXh0IG9uZSwgcmV0dXJu IFVOS05PV04uCisgICBGb3Igbm93LCBqdXN0IGxvb2sgYXQgdGhlIG5leHQgaW5zbiwgd2hp Y2ggbWlzc2VzIHNvbWUgb3Bwb3J0dW5pdGllcyBsaWtlCisgICBmb2xsb3dpbmcganVtcHMu ICAqLwogCiBzdGF0aWMgUlRYX0NPREUKIGNvbXBhcmVfY29uZGl0aW9uIChydHhfaW5zbiAq aW5zbikKIHsKLSAgcnR4X2luc24gKm5leHQgPSBuZXh0X3JlYWxfaW5zbiAoaW5zbik7Cisg IHJ0eCBzZXQ7CisgIHJ0eF9pbnNuICpuZXh0ID0gbmV4dF9yZWFsX25vbmRlYnVnX2luc24g KGluc24pOwogCi0gIGlmIChuZXh0ICYmIEpVTVBfUCAobmV4dCkpCisgIGlmIChuZXh0Cisg ICAgICAmJiBKVU1QX1AgKG5leHQpCisgICAgICAvLyBJZiBTUkVHIGRvZXMgbm90IGRpZSBp biB0aGUgbmV4dCBpbnNuLCBpdCBpcyB1c2VkIGluIG1vcmUgdGhhbiBvbmUKKyAgICAgIC8v IGJyYW5jaC4gIFRoaXMgY2FuIGhhcHBlbiBkdWUgdG8gcGFzcyAuYXZyLWlmZWxzZSBvcHRp bWl6YXRpb25zLgorICAgICAgJiYgZGVhZF9vcl9zZXRfcmVnbm9fcCAobmV4dCwgUkVHX0ND KQorICAgICAgLy8gQnJhbmNoZXMgYXJlIChzZXQgKHBjKSAoaWZfdGhlbl9lbHNlIChDT05E ICguLi4pKSkpLgorICAgICAgJiYgKHNldCA9IHNpbmdsZV9zZXQgKG5leHQpKQorICAgICAg JiYgR0VUX0NPREUgKFNFVF9TUkMgKHNldCkpID09IElGX1RIRU5fRUxTRSkKICAgICB7Ci0g ICAgICBydHggcGF0ID0gUEFUVEVSTiAobmV4dCk7Ci0gICAgICBpZiAoR0VUX0NPREUgKHBh dCkgPT0gUEFSQUxMRUwpCi0gICAgICAgIHBhdCA9IFhWRUNFWFAgKHBhdCwgMCwgMCk7Ci0g ICAgICBydHggc3JjID0gU0VUX1NSQyAocGF0KTsKLQotICAgICAgaWYgKElGX1RIRU5fRUxT RSA9PSBHRVRfQ09ERSAoc3JjKSkKLSAgICAgICAgcmV0dXJuIEdFVF9DT0RFIChYRVhQIChz cmMsIDApKTsKKyAgICAgIHJldHVybiBHRVRfQ09ERSAoWEVYUCAoU0VUX1NSQyAoc2V0KSwg MCkpOwogICAgIH0KIAogICByZXR1cm4gVU5LTk9XTjsKIH0KIAogCi0vKiBSZXR1cm5zIHRy dWUgaWZmIElOU04gaXMgYSB0c3QgaW5zbiB0aGF0IG9ubHkgdGVzdHMgdGhlIHNpZ24uICAq LworLyogUmV0dXJucyB0cnVlIGlmIElOU04gaXMgYSB0c3QgaW5zbiB0aGF0IG9ubHkgdGVz dHMgdGhlIHNpZ24uICAqLwogCiBzdGF0aWMgYm9vbAogY29tcGFyZV9zaWduX3AgKHJ0eF9p bnNuICppbnNuKQpAQCAtNTcwOSwyMyArNjAzMyw5NSBAQCBjb21wYXJlX3NpZ25fcCAocnR4 X2luc24gKmluc24pCiB9CiAKIAotLyogUmV0dXJucyB0cnVlIGlmZiB0aGUgbmV4dCBpbnNu IGlzIGEgSlVNUF9JTlNOIHdpdGggYSBjb25kaXRpb24KLSAgIHRoYXQgbmVlZHMgdG8gYmUg c3dhcHBlZCAoR1QsIEdUVSwgTEUsIExFVSkuICAqLworLyogUmV0dXJucyB0cnVlIGlmIElO U04gaXMgYSBjb21wYXJlIGluc24gd2l0aCB0aGUgRVEgb3IgTkUgY29uZGl0aW9uLiAgKi8K IAogc3RhdGljIGJvb2wKLWNvbXBhcmVfZGlmZl9wIChydHhfaW5zbiAqaW5zbikKK2NvbXBh cmVfZXFfcCAocnR4X2luc24gKmluc24pCiB7CiAgIFJUWF9DT0RFIGNvbmQgPSBjb21wYXJl X2NvbmRpdGlvbiAoaW5zbik7Ci0gIHJldHVybiAoY29uZCA9PSBHVCB8fCBjb25kID09IEdU VSB8fCBjb25kID09IExFIHx8IGNvbmQgPT0gTEVVKSA/IGNvbmQgOiAwOworICByZXR1cm4g KGNvbmQgPT0gRVEgfHwgY29uZCA9PSBORSk7CiB9CiAKLS8qIFJldHVybnMgdHJ1ZSBpZmYg SU5TTiBpcyBhIGNvbXBhcmUgaW5zbiB3aXRoIHRoZSBFUSBvciBORSBjb25kaXRpb24uICAq LwogCi1zdGF0aWMgYm9vbAotY29tcGFyZV9lcV9wIChydHhfaW5zbiAqaW5zbikKKy8qIElt cGxlbWVudCBgVEFSR0VUX0NBTk9OSUNBTElaRV9DT01QQVJJU09OJy4gICovCisvKiBCYXNp Y2FsbHkgdHJpZXMgdG8gY29udmVydCAiZGlmZmljdWx0IiBjb21wYXJpc29ucyBsaWtlIEdU W1VdCisgICBhbmQgTEVbVV0gdG8gc2ltcGxlIG9uZXMuICBTb21lIGFzeW1tZXRyaWMgY29t cGFyaXNvbnMgY2FuIGJlCisgICB0cmFuc2Zvcm1lZCB0byBFUSBvciBORSBhZ2FpbnN0IHpl cm8uICAqLworCitzdGF0aWMgdm9pZAorYXZyX2Nhbm9uaWNhbGl6ZV9jb21wYXJpc29uIChp bnQgKmljb2RlLCBydHggKm9wMCwgcnR4ICpvcDEsIGJvb2wgb3AwX2ZpeGVkKQogewotICBS VFhfQ09ERSBjb25kID0gY29tcGFyZV9jb25kaXRpb24gKGluc24pOwotICByZXR1cm4gKGNv bmQgPT0gRVEgfHwgY29uZCA9PSBORSk7CisgIGVudW0gcnR4X2NvZGUgY29kZSA9IChlbnVt IHJ0eF9jb2RlKSAqaWNvZGU7CisgIG1hY2hpbmVfbW9kZSBtb2RlID0gR0VUX01PREUgKCpv cDApOworCisgIGJvb2wgc2lnbmVkX3AgPSBjb2RlID09IEdUIHx8IGNvZGUgPT0gTEU7Cisg IGJvb2wgdW5zaWduZWRfcCA9IGNvZGUgPT0gR1RVIHx8IGNvZGUgPT0gTEVVOworICBib29s IGRpZmZpY3VsdF9wID0gc2lnbmVkX3AgfHwgdW5zaWduZWRfcDsKKworICBpZiAoLy8gT25s eSBkbyBpbnRlZ2VycyBhbmQgZml4ZWQtcG9pbnRzLgorICAgICAgKCEgU0NBTEFSX0lOVF9N T0RFX1AgKG1vZGUpCisgICAgICAgJiYgISBBTExfU0NBTEFSX0ZJWEVEX1BPSU5UX01PREVf UCAobW9kZSkpCisgICAgICAvLyBPbmx5IGRvIGNvbXBhcmlzb25zIGFnYWluc3QgYSByZWdp c3Rlci4KKyAgICAgIHx8ICEgcmVnaXN0ZXJfb3BlcmFuZCAoKm9wMCwgbW9kZSkpCisgICAg cmV0dXJuOworCisgIC8vIENhbm9uaWNhbGl6ZSAiZGlmZmljdWx0IiByZWctcmVnIGNvbXBh cmlzb25zLgorCisgIGlmICghIG9wMF9maXhlZAorICAgICAgJiYgZGlmZmljdWx0X3AKKyAg ICAgICYmIHJlZ2lzdGVyX29wZXJhbmQgKCpvcDEsIG1vZGUpKQorICAgIHsKKyAgICAgIHN0 ZDo6c3dhcCAoKm9wMCwgKm9wMSk7CisgICAgICAqaWNvZGUgPSAoaW50KSBzd2FwX2NvbmRp dGlvbiAoY29kZSk7CisgICAgICByZXR1cm47CisgICAgfQorCisgIC8vIENhbm9uaWNhbGl6 ZSBjb21wYXJpc29ucyBhZ2FpbnN0IGNvbXBpbGUtdGltZSBjb25zdGFudHMuCisKKyAgaWYg KENPTlNUX0lOVF9QICgqb3AxKQorICAgICAgfHwgQ09OU1RfRklYRURfUCAoKm9wMSkpCisg ICAgeworICAgICAgLy8gSU5UX01PREUgb2YgdGhlIHNhbWUgc2l6ZS4KKyAgICAgIHNjYWxh cl9pbnRfbW9kZSBpbW9kZSA9IGludF9tb2RlX2Zvcl9tb2RlIChtb2RlKS5yZXF1aXJlICgp OworCisgICAgICB1bnNpZ25lZCBIT1NUX1dJREVfSU5UIG1hc2sgPSBHRVRfTU9ERV9NQVNL IChpbW9kZSk7CisgICAgICB1bnNpZ25lZCBIT1NUX1dJREVfSU5UIG1heHZhbCA9IHNpZ25l ZF9wID8gbWFzayA+PiAxIDogbWFzazsKKworICAgICAgLy8gQ29udmVydCB2YWx1ZSAqb3Ax IHRvIGltb2RlLgorICAgICAgcnR4IHh2YWwgPSBzaW1wbGlmeV9nZW5fc3VicmVnIChpbW9k ZSwgKm9wMSwgbW9kZSwgMCk7CisKKyAgICAgIC8vIENhbm9uaWNhbGl6ZSBkaWZmaWN1bHQg Y29tcGFyaXNvbnMgYWdhaW5zdCBjb25zdC4KKyAgICAgIGlmIChkaWZmaWN1bHRfcAorCSAg JiYgKFVJTlRWQUwgKHh2YWwpICYgbWFzaykgIT0gbWF4dmFsKQorCXsKKwkgIC8vIENvbnZl cnQgKm9wMCA+ICpvcDEgIHRvICpvcDAgPj0gMSArICpvcDEuCisJICAvLyBDb252ZXJ0ICpv cDAgPD0gKm9wMSB0byAqb3AwIDwgIDEgKyAqb3AxLgorCSAgeHZhbCA9IHNpbXBsaWZ5X2Jp bmFyeV9vcGVyYXRpb24gKFBMVVMsIGltb2RlLCB4dmFsLCBjb25zdDFfcnR4KTsKKworCSAg Ly8gQ29udmVydCB2YWx1ZSBiYWNrIHRvIGl0cyBvcmlnaW5hbCBtb2RlLgorCSAgKm9wMSA9 IHNpbXBsaWZ5X2dlbl9zdWJyZWcgKG1vZGUsIHh2YWwsIGltb2RlLCAwKTsKKworCSAgLy8g TWFwICA+ICB0byAgPj0gIGFuZCAgPD0gIHRvICA8LgorCSAgKmljb2RlID0gKGludCkgYXZy X25vcm1hbGl6ZV9jb25kaXRpb24gKGNvZGUpOworCisJICByZXR1cm47CisJfQorCisgICAg ICAvLyBTb21lIGFzeW1tZXRyaWMgY29tcGFyaXNvbnMgY2FuIGJlIHR1cm5lZCBpbnRvIEVR IG9yIE5FLgorICAgICAgaWYgKGNvZGUgPT0gTFRVICYmIHh2YWwgPT0gY29uc3QxX3J0eCkK Kwl7CisJICAqaWNvZGUgPSAoaW50KSBFUTsKKwkgICpvcDEgPSBDT05TVDBfUlRYIChtb2Rl KTsKKwkgIHJldHVybjsKKwl9CisKKyAgICAgIGlmIChjb2RlID09IEdFVSAmJiB4dmFsID09 IGNvbnN0MV9ydHgpCisJeworCSAgKmljb2RlID0gKGludCkgTkU7CisJICAqb3AxID0gQ09O U1QwX1JUWCAobW9kZSk7CisJICByZXR1cm47CisJfQorICAgIH0KIH0KIAogCkBAIC02MDE4 LDYgKzY0MTQsNjggQEAgYXZyX291dF90c3RzaSAocnR4X2luc24gKmluc24sIHJ0eCAqb3As IGludCAqcGxlbikKIH0KIAogCisvKiBPdXRwdXQgYSBjb21wYXJpc29uIG9mIGEgemVyby0g b3Igc2lnbi1leHRlbmRlZCByZWdpc3RlciBhZ2FpbnN0IGEKKyAgIHBsYWluIHJlZ2lzdGVy LiAgQ09ERSBpcyBTSUdOX0VYVEVORCBvciBaRVJPX0VYVEVORC4gIFJldHVybiAiIi4KKwor ICAgUExFTiAhPSAwOiBTZXQgKlBMRU4gdG8gdGhlIGNvZGUgbGVuZ3RoIGluIHdvcmRzLiBE b24ndCBvdXRwdXQgYW55dGhpbmcuCisgICBQTEVOID09IDA6IFByaW50IGluc3RydWN0aW9u cy4gICovCisKK2NvbnN0IGNoYXIqCithdnJfb3V0X2NtcF9leHQgKHJ0eCB4b3BbXSwgZW51 bSBydHhfY29kZSBjb2RlLCBpbnQgKnBsZW4pCit7CisgIC8vIFRoZSBzbWFsbGVyIHJlZyBp cyB0aGUgb25lIHRoYXQncyB0byBiZSBleHRlbmRlZC4gIEdldCBpdHMgaW5kZXggYXMgei4K KyAgaW50IHogPSBHRVRfTU9ERV9TSVpFIChHRVRfTU9ERSAoeG9wWzFdKSkgPCBHRVRfTU9E RV9TSVpFIChHRVRfTU9ERSAoeG9wWzBdKSk7CisgIHJ0eCB6cmVnID0geG9wW3pdOworICBy dHggcmVnID0geG9wWzEgLSB6XTsKKyAgbWFjaGluZV9tb2RlIG1vZGUgPSBHRVRfTU9ERSAo cmVnKTsKKyAgbWFjaGluZV9tb2RlIHptb2RlID0gR0VUX01PREUgKHpyZWcpOworICBydHgg emV4OworCisgIGlmIChwbGVuKQorICAgICpwbGVuID0gMDsKKworICAvLyB6ZXggaG9sZHMg dGhlIGV4dGVuZGVkIGJ5dGVzIGFib3ZlIHpyZWcuICBUaGlzIGlzIDAgZm9yIFpFUk9fRVhU RU5ELAorICAvLyBhbmQgMCBvciAtMSBmb3IgU0lHTl9FWFRFTkQuCisKKyAgaWYgKGNvZGUg PT0gU0lHTl9FWFRFTkQpCisgICAgeworICAgICAgLy8gU2lnbi1leHRlbmQgdGhlIGhpZ2gt Ynl0ZSBvZiB6cmVnIHRvIHRtcF9yZWcuCisgICAgICBpbnQgem1zYiA9IEdFVF9NT0RFX1NJ WkUgKHptb2RlKSAtIDE7CisgICAgICBydHggeHptc2IgPSBzaW1wbGlmeV9nZW5fc3VicmVn IChRSW1vZGUsIHpyZWcsIHptb2RlLCB6bXNiKTsKKworICAgICAgYXZyX2FzbV9sZW4gKCJt b3YgX190bXBfcmVnX18sJTAiIENSX1RBQgorCQkgICAicm9sIF9fdG1wX3JlZ19fIiAgICBD Ul9UQUIKKwkJICAgInNiYyBfX3RtcF9yZWdfXyxfX3RtcF9yZWdfXyIsICZ4em1zYiwgcGxl biwgMyk7CisgICAgICB6ZXggPSB0bXBfcmVnX3J0eDsKKyAgICB9CisgIGVsc2UgaWYgKGNv ZGUgPT0gWkVST19FWFRFTkQpCisgICAgeworICAgICAgemV4ID0gemVyb19yZWdfcnR4Owor ICAgIH0KKyAgZWxzZQorICAgIGdjY191bnJlYWNoYWJsZSgpOworCisgIC8vIE5vdyBvdXRw dXQgbl9ieXRlcyBieXRlcyBvZiB0aGUgdmVyeSBjb21wYXJpc29uLgorCisgIGludCBuX2J5 dGVzID0gR0VUX01PREVfU0laRSAobW9kZSk7CisKKyAgYXZyX2FzbV9sZW4gKCJjcCAlMCwl MSIsIHhvcCwgcGxlbiwgMSk7CisKKyAgZm9yIChpbnQgYiA9IDE7IGIgPCBuX2J5dGVzOyAr K2IpCisgICAgeworICAgICAgcnR4IHJlZ3NbMl07CisgICAgICByZWdzWzEgLSB6XSA9IHNp bXBsaWZ5X2dlbl9zdWJyZWcgKFFJbW9kZSwgcmVnLCBtb2RlLCBiKTsKKyAgICAgIHJlZ3Nb el0gPSAoYiA8IEdFVF9NT0RFX1NJWkUgKHptb2RlKQorCQkgPyBzaW1wbGlmeV9nZW5fc3Vi cmVnIChRSW1vZGUsIHpyZWcsIHptb2RlLCBiKQorCQkgOiB6ZXgpOworCisgICAgICBhdnJf YXNtX2xlbiAoImNwYyAlMCwlMSIsIHJlZ3MsIHBsZW4sIDEpOworICAgIH0KKworICByZXR1 cm4gIiI7Cit9CisKKwogLyogR2VuZXJhdGUgYXNtIGVxdWl2YWxlbnQgZm9yIHZhcmlvdXMg c2hpZnRzLiAgVGhpcyBvbmx5IGhhbmRsZXMgY2FzZXMKICAgIHRoYXQgYXJlIG5vdCBhbHJl YWR5IGNhcmVmdWxseSBoYW5kLW9wdGltaXplZCBpbiA/c2g/P2kzX291dC4KIApAQCAtODE2 MCw2ICs4NjE4LDEyMiBAQCBhdnJfb3V0X3BsdXMgKHJ0eCBpbnNuLCBydHggKnhvcCwgaW50 ICpwbGVuLCBpbnQgKnBjYywgYm9vbCBvdXRfbGFiZWwpCiB9CiAKIAorLyogT3V0cHV0IGFu IGluc3RydWN0aW9uIHNlcXVlbmNlIGZvciBhZGRpdGlvbiBvZiBSRUcgaW4gWE9QWzBdIGFu ZCBDT05TVF9JTlQKKyAgIGluIFhPUFsxXSBpbiBzdWNoIGEgd2F5IHRoYXQgU1JFRy5aIGFu ZCBTUkVHLk4gYXJlIHNldCBhY2NvcmRpbmcgdG8gdGhlCisgICByZXN1bHQuICBYT1BbMl0g bWlnaHQgYmUgYSBkLXJlZ3MgY2xvYmJlciByZWdpc3Rlci4gIElmIFhPUFsyXSBpcyBTQ1JB VENILAorICAgdGhlbiB0aGUgYWRkaXRpb24gY2FuIGJlIHBlcmZvcm1lZCB3aXRob3V0IGEg Y2xvYmJlciByZWcuICBSZXR1cm4gIiIuCisKKyAgIElmIFBMRU4gPT0gTlVMTCwgdGhlbiBv dXRwdXQgdGhlIGluc3RydWN0aW9ucy4KKyAgIElmIFBMRU4gIT0gTlVMTCwgdGhlbiBzZXQg KlBMRU4gdG8gdGhlIGxlbmd0aCBvZiB0aGUgc2VxdWVuY2UgaW4gd29yZHMuICovCisKK2Nv bnN0IGNoYXIqCithdnJfb3V0X3BsdXNfc2V0X1pOIChydHggKnhvcCwgaW50ICpwbGVuKQor eworICBpZiAocGxlbikKKyAgICAqcGxlbiA9IDA7CisKKyAgLy8gUmVnaXN0ZXIgdG8gY29t cGFyZSBhbmQgdmFsdWUgdG8gY29tcGFyZSBhZ2FpbnN0LgorICBydHggeHJlZyA9IHhvcFsw XTsKKyAgcnR4IHh2YWwgPSB4b3BbMV07CisKKyAgbWFjaGluZV9tb2RlIG1vZGUgPSBHRVRf TU9ERSAoeHJlZyk7CisKKyAgLy8gTnVtYmVyIG9mIGJ5dGVzIHRvIG9wZXJhdGUgb24uCisg IGludCBuX2J5dGVzID0gR0VUX01PREVfU0laRSAobW9kZSk7CisKKyAgaWYgKG5fYnl0ZXMg PT0gMSkKKyAgICB7CisgICAgICBpZiAoSU5UVkFMICh4dmFsKSA9PSAxKQorCXJldHVybiBh dnJfYXNtX2xlbiAoImluYyAlMCIsIHhvcCwgcGxlbiwgMSk7CisKKyAgICAgIGlmIChJTlRW QUwgKHh2YWwpID09IC0xKQorCXJldHVybiBhdnJfYXNtX2xlbiAoImRlYyAlMCIsIHhvcCwg cGxlbiwgMSk7CisgICAgfQorCisgIGlmIChuX2J5dGVzID09IDIKKyAgICAgICYmIHRlc3Rf aGFyZF9yZWdfY2xhc3MgKEFERFdfUkVHUywgeHJlZykKKyAgICAgICYmIElOX1JBTkdFIChJ TlRWQUwgKHh2YWwpLCAxLCA2MykpCisgICAgeworICAgICAgLy8gQWRkIDE2LWJpdCB2YWx1 ZSBpbiBbMS4uNjNdIHRvIGEgdyByZWdpc3Rlci4KKyAgICAgIHJldHVybiBhdnJfYXNtX2xl biAoImFkaXcgJTAsICUxIiwgeG9wLCBwbGVuLCAxKTsKKyAgICB9CisKKyAgLy8gQWRkaXRp b24gd29uJ3Qgd29yazsgc3VidHJhY3QgdGhlIG5lZ2F0aXZlIG9mIFhWQUwgaW5zdGVhZC4K KyAgeHZhbCA9IHNpbXBsaWZ5X3VuYXJ5X29wZXJhdGlvbiAoTkVHLCBtb2RlLCB4dmFsLCBt b2RlKTsKKworICAvLyBWYWx1ZSAoMC4uMHhmZikgaGVsZCBpbiBjbG9iYmVyIHJlZ2lzdGVy IHhvcFsyXSBvciAtMSBpZiB1bmtub3duLgorICBpbnQgY2xvYmJlcl92YWwgPSAtMTsKKwor ICAvLyBbMF0gPSBDdXJyZW50IHN1Yi1yZWdpc3Rlci4KKyAgLy8gWzFdID0gQ3VycmVudCBw YXJ0aWFsIHh2YWwuCisgIC8vIFsyXSA9IDgtYml0IGNsb2JiZXIgZC1yZWdpc3RlciBvciBT Q1JBVENILgorICBydHggb3BbM107CisgIG9wWzJdID0geG9wWzJdOworCisgIC8vIFdvcmsg Ynl0ZS13aXNlIGZyb20gTFNCIHRvIE1TQi4gIFRoZSBsb3dlciB0d28gYnl0ZXMgbWlnaHQg YmUKKyAgLy8gU0JJVydlZCBpbiBvbmUgZ28uCisgIGZvciAoaW50IGkgPSAwOyBpIDwgbl9i eXRlczsgKytpKQorICAgIHsKKyAgICAgIG9wWzBdID0gc2ltcGxpZnlfZ2VuX3N1YnJlZyAo UUltb2RlLCB4cmVnLCBtb2RlLCBpKTsKKworICAgICAgaWYgKGkgPT0gMAorCSAgJiYgbl9i eXRlcyA+PSAyCisJICAmJiB0ZXN0X2hhcmRfcmVnX2NsYXNzIChBRERXX1JFR1MsIG9wWzBd KSkKKwl7CisJICBvcFsxXSA9IHNpbXBsaWZ5X2dlbl9zdWJyZWcgKEhJbW9kZSwgeHZhbCwg bW9kZSwgMCk7CisJICBpZiAoSU5fUkFOR0UgKElOVFZBTCAob3BbMV0pLCAwLCA2MykpCisJ ICAgIHsKKwkgICAgICAvLyBTQklXIGNhbiBoYW5kbGUgdGhlIGxvd2VyIDE2IGJpdHMuCisJ ICAgICAgYXZyX2FzbV9sZW4gKCJzYml3ICUwLCAlMSIsIG9wLCBwbGVuLCAxKTsKKworCSAg ICAgIC8vIE5leHQgYnl0ZSBoYXMgYWxyZWFkeSBiZWVuIGhhbmRsZWQ6IFNraXAgaXQuCisJ ICAgICAgKytpOworCSAgICAgIGNvbnRpbnVlOworCSAgICB9CisJfQorCisgICAgICBvcFsx XSA9IHNpbXBsaWZ5X2dlbl9zdWJyZWcgKFFJbW9kZSwgeHZhbCwgbW9kZSwgaSk7CisKKyAg ICAgIGlmICh0ZXN0X2hhcmRfcmVnX2NsYXNzIChMRF9SRUdTLCBvcFswXSkpCisJeworCSAg Ly8gZC1yZWdzIGNhbiBzdWJ0cmFjdCBpbW1lZGlhdGVzLgorCSAgYXZyX2FzbV9sZW4gKGkg PT0gMAorCQkgICAgICAgPyAic3ViaSAlMCwgJTEiCisJCSAgICAgICA6ICJzYmNpICUwLCAl MSIsIG9wLCBwbGVuLCAxKTsKKwl9CisgICAgICBlbHNlCisJeworCSAgaW50IHZhbDggPSAw eGZmICYgSU5UVkFMIChvcFsxXSk7CisJICBpZiAodmFsOCA9PSAwKQorCSAgICB7CisJICAg ICAgLy8gQW55IHJlZ2lzdGVyIGNhbiBzdWJ0cmFjdCAwLgorCSAgICAgIGF2cl9hc21fbGVu IChpID09IDAKKwkJCSAgID8gInN1YiAlMCwgX196ZXJvX3JlZ19fIgorCQkJICAgOiAic2Jj ICUwLCBfX3plcm9fcmVnX18iLCBvcCwgcGxlbiwgMSk7CisJICAgIH0KKwkgIGVsc2UKKwkg ICAgeworCSAgICAgIC8vIFVzZSBkLXJlZ2lzdGVyIHRvIGhvbGQgcGFydGlhbCB4dmFsLgor CisJICAgICAgaWYgKHZhbDggIT0gY2xvYmJlcl92YWwpCisJCXsKKwkJICAvLyBMb2FkIHBh cnRpYWwgeHZhbCB0byBRSSBjbG9iYmVyIHJlZyBhbmQgbWVtb2l6ZSBmb3IgbGF0ZXIuCisJ CSAgZ2NjX2Fzc2VydCAoUkVHX1AgKG9wWzJdKSk7CisJCSAgYXZyX2FzbV9sZW4gKCJsZGkg JTIsICUxIiwgb3AsIHBsZW4sIDEpOworCQkgIGNsb2JiZXJfdmFsID0gdmFsODsKKwkJfQor CisJICAgICAgYXZyX2FzbV9sZW4gKGkgPT0gMAorCQkJICAgPyAic3ViICUwLCAlMiIKKwkJ CSAgIDogInNiYyAlMCwgJTIiLCBvcCwgcGxlbiwgMSk7CisJICAgIH0KKwl9CisgICAgfSAv LyBMb29wIGJ5dGVzLgorCisgIHJldHVybiAiIjsKK30KKworCiAvKiBPdXRwdXQgYml0IG9w ZXJhdGlvbiAoSU9SLCBBTkQsIFhPUikgd2l0aCByZWdpc3RlciBYT1BbMF0gYW5kIGNvbXBp bGUKICAgIHRpbWUgY29uc3RhbnQgWE9QWzJdOgogCkBAIC05MjkxLDYgKzk4NjUsOCBAQCBh dnJfYWRqdXN0X2luc25fbGVuZ3RoIChydHhfaW5zbiAqaW5zbiwgaW50IGxlbikKICAgICBj YXNlIEFESlVTVF9MRU5fVFNUU0k6IGF2cl9vdXRfdHN0c2kgKGluc24sIG9wLCAmbGVuKTsg YnJlYWs7CiAgICAgY2FzZSBBREpVU1RfTEVOX0NPTVBBUkU6IGF2cl9vdXRfY29tcGFyZSAo aW5zbiwgb3AsICZsZW4pOyBicmVhazsKICAgICBjYXNlIEFESlVTVF9MRU5fQ09NUEFSRTY0 OiBhdnJfb3V0X2NvbXBhcmU2NCAoaW5zbiwgb3AsICZsZW4pOyBicmVhazsKKyAgICBjYXNl IEFESlVTVF9MRU5fQ01QX1VFWFQ6IGF2cl9vdXRfY21wX2V4dCAob3AsIFpFUk9fRVhURU5E LCAmbGVuKTsgYnJlYWs7CisgICAgY2FzZSBBREpVU1RfTEVOX0NNUF9TRVhUOiBhdnJfb3V0 X2NtcF9leHQgKG9wLCBTSUdOX0VYVEVORCwgJmxlbik7IGJyZWFrOwogCiAgICAgY2FzZSBB REpVU1RfTEVOX0xTSFJRSTogbHNocnFpM19vdXQgKGluc24sIG9wLCAmbGVuKTsgYnJlYWs7 CiAgICAgY2FzZSBBREpVU1RfTEVOX0xTSFJISTogbHNocmhpM19vdXQgKGluc24sIG9wLCAm bGVuKTsgYnJlYWs7CkBAIC05MzExLDYgKzk4ODcsNyBAQCBhdnJfYWRqdXN0X2luc25fbGVu Z3RoIChydHhfaW5zbiAqaW5zbiwgaW50IGxlbikKICAgICBjYXNlIEFESlVTVF9MRU5fQ0FM TDogbGVuID0gQVZSX0hBVkVfSk1QX0NBTEwgPyAyIDogMTsgYnJlYWs7CiAKICAgICBjYXNl IEFESlVTVF9MRU5fSU5TRVJUX0JJVFM6IGF2cl9vdXRfaW5zZXJ0X2JpdHMgKG9wLCAmbGVu KTsgYnJlYWs7CisgICAgY2FzZSBBREpVU1RfTEVOX0FERF9TRVRfWk46IGF2cl9vdXRfcGx1 c19zZXRfWk4gKG9wLCAmbGVuKTsgYnJlYWs7CiAKICAgICBjYXNlIEFESlVTVF9MRU5fSU5T Vl9OT1RCSVQ6CiAgICAgICBhdnJfb3V0X2luc2VydF9ub3RiaXQgKGluc24sIG9wLCBOVUxM X1JUWCwgJmxlbik7CkBAIC0xMDYwNyw2ICsxMTE4NCw1OCBAQCBhdnJfbXVsX2hpZ2hwYXJ0 X2Nvc3QgKHJ0eCB4LCBpbnQpCiB9CiAKIAorLyogUmV0dXJuIHRoZSBleHBlY3RlZCBjb3N0 IG9mIGEgY29uZGl0aW9uYWwgYnJhbmNoIGxpa2UKKyAgIChzZXQgKHBjKQorCShpZl90aGVu X2Vsc2UgKFgpCisJCSAgICAgIChsYWJlbF9yZWYgKikKKwkJICAgICAgKHBjKSkpCisgICB3 aGVyZSBYIGlzIHNvbWUgY29tcGFyaXNvbiBvcGVyYXRvci4gICovCisKK3N0YXRpYyBpbnQK K2F2cl9jYnJhbmNoX2Nvc3QgKHJ0eCB4KQoreworICBib29sIGRpZmZpY3VsdF9wID0gZGlm ZmljdWx0X2NvbXBhcmlzb25fb3BlcmF0b3IgKHgsIFZPSURtb2RlKTsKKworICBpZiAocmVs b2FkX2NvbXBsZXRlZCkKKyAgICB7CisgICAgICAvLyBBZnRlciByZWxvYWQsIHdlIGJhc2lj YWxseSBqdXN0IGhhdmUgcGxhaW4gYnJhbmNoZXMuCisgICAgICByZXR1cm4gQ09TVFNfTl9J TlNOUyAoMSArIGRpZmZpY3VsdF9wKTsKKyAgICB9CisKKyAgcnR4IHhyZWcgPSBYRVhQICh4 LCAwKTsKKyAgcnR4IHh2YWwgPSBYRVhQICh4LCAxKTsKKyAgbWFjaGluZV9tb2RlIG1vZGUg PSBHRVRfTU9ERSAoeHJlZyk7CisgIGlmIChtb2RlID09IFZPSURtb2RlKQorICAgIG1vZGUg PSBHRVRfTU9ERSAoeHZhbCk7CisgIGludCBzaXplID0gR0VUX01PREVfU0laRSAobW9kZSk7 CisKKyAgaWYgKEdFVF9DT0RFICh4cmVnKSA9PSBaRVJPX0VYVEVORAorICAgICAgfHwgR0VU X0NPREUgKHh2YWwpID09IFpFUk9fRVhURU5EKQorICAgIHsKKyAgICAgIC8vICpjYnJhbmNo PEhJU0k6bW9kZT4uPGNvZGU+PFFJUFNJOm1vZGU+LjAvMSwgY29kZSA9IHplcm9fZXh0ZW5k LgorICAgICAgcmV0dXJuIENPU1RTX05fSU5TTlMgKHNpemUgKyAxKTsKKyAgICB9CisKKyAg aWYgKEdFVF9DT0RFICh4cmVnKSA9PSBTSUdOX0VYVEVORAorICAgICAgfHwgR0VUX0NPREUg KHh2YWwpID09IFNJR05fRVhURU5EKQorICAgIHsKKyAgICAgIC8vICpjYnJhbmNoPEhJU0k6 bW9kZT4uPGNvZGU+PFFJUFNJOm1vZGU+LjAvMSwgY29kZSA9IHNpZ25fZXh0ZW5kLgorICAg ICAgLy8gTWFrZSBpdCBhIGJpdCBjaGVhcGVyIHRoYW4gaXQgYWN0dWFsbHkgaXMgKGxlc3Mg cmVnIHByZXNzdXJlKS4KKyAgICAgIHJldHVybiBDT1NUU19OX0lOU05TIChzaXplICsgMSAr IDEpOworICAgIH0KKworICBib29sIHJlZ19wID0gcmVnaXN0ZXJfb3BlcmFuZCAoeHJlZywg bW9kZSk7CisgIGJvb2wgcmVnX29yXzBfcCA9IHJlZ19vcl8wX29wZXJhbmQgKHh2YWwsIG1v ZGUpOworCisgIHJldHVybiBDT1NUU19OX0lOU05TIChzaXplCisJCQkvLyBGb3IgdGhlIGJy YW5jaAorCQkJKyAxICsgZGlmZmljdWx0X3AKKwkJCS8vIENvbWJpbmUgbWlnaHQgcHJvcGFn YXRlIGNvbnN0YW50cyBvdGhlciB0aGFuIHplcm8KKwkJCS8vIGludG8gdGhlIDJuZCBvcGVy YW5kLiAgTWFrZSB0aGF0IG1vcmUgZXhwZW5zaXZlLgorCQkJKyAxICogKCFyZWdfcCB8fCAh cmVnX29yXzBfcCkpOworfQorCisKIC8qIE11dHVhbGx5IHJlY3Vyc2l2ZSBzdWJyb3V0aW5l IG9mIGF2cl9ydHhfY29zdCBmb3IgY2FsY3VsYXRpbmcgdGhlCiAgICBjb3N0IG9mIGFuIFJU WCBvcGVyYW5kIGdpdmVuIGl0cyBjb250ZXh0LiAgWCBpcyB0aGUgcnR4IG9mIHRoZQogICAg b3BlcmFuZCwgTU9ERSBpcyBpdHMgbW9kZSwgYW5kIE9VVEVSIGlzIHRoZSBydHhfY29kZSBv ZiB0aGlzCkBAIC0xMTQ5MCw2ICsxMjExOSwxNSBAQCBhdnJfcnR4X2Nvc3RzXzEgKHJ0eCB4 LCBtYWNoaW5lX21vZGUgbW9kZSwgaW50IG91dGVyX2NvZGUsCiAgICAgICAgIH0KICAgICAg IGJyZWFrOwogCisgICAgY2FzZSBJRl9USEVOX0VMU0U6CisgICAgICBpZiAob3V0ZXJfY29k ZSA9PSBTRVQKKwkgICYmIFhFWFAgKHgsIDIpID09IHBjX3J0eAorCSAgJiYgb3JkZXJlZF9j b21wYXJpc29uX29wZXJhdG9yIChYRVhQICh4LCAwKSwgVk9JRG1vZGUpKQorCXsKKwkgICp0 b3RhbCA9IGF2cl9jYnJhbmNoX2Nvc3QgKFhFWFAgKHgsIDApKTsKKwkgIHJldHVybiB0cnVl OworCX0KKwogICAgIGRlZmF1bHQ6CiAgICAgICBicmVhazsKICAgICB9CkBAIC0xMTYwMiwy ODEgKzEyMjQwLDYgQEAgYXZyX25vcm1hbGl6ZV9jb25kaXRpb24gKFJUWF9DT0RFIGNvbmRp dGlvbikKICAgICB9CiB9CiAKLS8qIEhlbHBlciBmdW5jdGlvbiBmb3IgYGF2cl9yZW9yZycu ICAqLwotCi1zdGF0aWMgcnR4Ci1hdnJfY29tcGFyZV9wYXR0ZXJuIChydHhfaW5zbiAqaW5z bikKLXsKLSAgcnR4IHBhdHRlcm4gPSBzaW5nbGVfc2V0IChpbnNuKTsKLQotICBpZiAocGF0 dGVybgotICAgICAgJiYgTk9OSlVNUF9JTlNOX1AgKGluc24pCi0gICAgICAmJiBSRUdfUCAo U0VUX0RFU1QgKHBhdHRlcm4pKQotICAgICAgJiYgUkVHTk8gKFNFVF9ERVNUIChwYXR0ZXJu KSkgPT0gUkVHX0NDCi0gICAgICAmJiBHRVRfQ09ERSAoU0VUX1NSQyAocGF0dGVybikpID09 IENPTVBBUkUpCi0gICAgewotICAgICAgbWFjaGluZV9tb2RlIG1vZGUwID0gR0VUX01PREUg KFhFWFAgKFNFVF9TUkMgKHBhdHRlcm4pLCAwKSk7Ci0gICAgICBtYWNoaW5lX21vZGUgbW9k ZTEgPSBHRVRfTU9ERSAoWEVYUCAoU0VUX1NSQyAocGF0dGVybiksIDEpKTsKLQotICAgICAg LyogVGhlIDY0LWJpdCBjb21wYXJpc29ucyBoYXZlIGZpeGVkIG9wZXJhbmRzIEFDQ19BIGFu ZCBBQ0NfQi4KLSAgICAgICAgIFRoZXkgbXVzdCBub3QgYmUgc3dhcHBlZCwgdGh1cyBza2lw IHRoZW0uICAqLwotCi0gICAgICBpZiAoKG1vZGUwID09IFZPSURtb2RlIHx8IEdFVF9NT0RF X1NJWkUgKG1vZGUwKSA8PSA0KQotICAgICAgICAgICYmIChtb2RlMSA9PSBWT0lEbW9kZSB8 fCBHRVRfTU9ERV9TSVpFIChtb2RlMSkgPD0gNCkpCi0gICAgICAgIHJldHVybiBwYXR0ZXJu OwotICAgIH0KLQotICByZXR1cm4gTlVMTF9SVFg7Ci19Ci0KLS8qIEhlbHBlciBmdW5jdGlv biBmb3IgYGF2cl9yZW9yZycuICAqLwotCi0vKiBFeHBhbnNpb24gb2Ygc3dpdGNoL2Nhc2Ug ZGVjaXNpb24gdHJlZXMgbGVhZHMgdG8gY29kZSBsaWtlCi0KLSAgICAgICBSRUdfQ0MgPSBj b21wYXJlIChSZWcsIE51bSkKLSAgICAgICBpZiAoUkVHX0NDID09IDApCi0gICAgICAgICBn b3RvIEwxCi0KLSAgICAgICBSRUdfQ0MgPSBjb21wYXJlIChSZWcsIE51bSkKLSAgICAgICBp ZiAoUkVHX0NDID4gMCkKLSAgICAgICAgIGdvdG8gTDIKLQotICAgVGhlIHNlY29uZCBjb21w YXJpc29uIGlzIHN1cGVyZmx1b3VzIGFuZCBjYW4gYmUgZGVsZXRlZC4KLSAgIFRoZSBzZWNv bmQganVtcCBjb25kaXRpb24gY2FuIGJlIHRyYW5zZm9ybWVkIGZyb20gYQotICAgImRpZmZp Y3VsdCIgb25lIHRvIGEgInNpbXBsZSIgb25lIGJlY2F1c2UgIlJFR19DQyA+IDAiIGFuZAot ICAgIlJFR19DQyA+PSAwIiB3aWxsIGhhdmUgdGhlIHNhbWUgZWZmZWN0IGhlcmUuCi0KLSAg IFRoaXMgZnVuY3Rpb24gcmVsaWVzIG9uIHRoZSB3YXkgc3dpdGNoL2Nhc2UgaXMgYmVpbmcg ZXhwYW5lZAotICAgYXMgYmluYXJ5IGRlY2lzaW9uIHRyZWUuICBGb3IgZXhhbXBsZSBjb2Rl IHNlZSBQUiA0OTkwMy4KLQotICAgUmV0dXJuIFRSVUUgaWYgb3B0aW1pemF0aW9uIHBlcmZv cm1lZC4KLSAgIFJldHVybiBGQUxTRSBpZiBub3RoaW5nIGNoYW5nZWQuCi0KLSAgIElOU04x IGlzIGEgY29tcGFyaXNvbiwgaS5lLiBhdnJfY29tcGFyZV9wYXR0ZXJuICE9IDAuCi0KLSAg IFdlIGRvbid0IHdhbnQgdG8gZG8gdGhpcyBpbiB0ZXh0IHBlZXBob2xlIGJlY2F1c2UgaXQg aXMKLSAgIHRlZGlvdXMgdG8gd29yayBvdXQganVtcCBvZmZzZXRzIHRoZXJlIGFuZCB0aGUg c2Vjb25kIGNvbXBhcmlzb24KLSAgIG1pZ2h0IGhhdmUgYmVlbiB0cmFuc29ybWVkIGJ5IGBh dnJfcmVvcmcnLgotCi0gICBSVEwgcGVlcGhvbGUgd29uJ3QgZG8gYmVjYXVzZSBwZWVwaG9s ZTIgZG9lcyBub3Qgc2NhbiBhY3Jvc3MKLSAgIGJhc2ljIGJsb2Nrcy4gICovCi0KLXN0YXRp YyBib29sCi1hdnJfcmVvcmdfcmVtb3ZlX3JlZHVuZGFudF9jb21wYXJlIChydHhfaW5zbiAq aW5zbjEpCi17Ci0gIHJ0eCBjb21wMSwgaWZlbHNlMSwgeGNvbmQxOwotICBydHhfaW5zbiAq YnJhbmNoMTsKLSAgcnR4IGNvbXAyLCBpZmVsc2UyLCB4Y29uZDI7Ci0gIHJ0eF9pbnNuICpi cmFuY2gyLCAqaW5zbjI7Ci0gIGVudW0gcnR4X2NvZGUgY29kZTsKLSAgcnR4X2luc24gKmp1 bXA7Ci0gIHJ0eCB0YXJnZXQsIGNvbmQ7Ci0KLSAgLyogTG9vayBvdXQgZm9yOiAgY29tcGFy ZTEgLSBicmFuY2gxIC0gY29tcGFyZTIgLSBicmFuY2gyICAqLwotCi0gIGJyYW5jaDEgPSBu ZXh0X25vbm5vdGVfbm9uZGVidWdfaW5zbiAoaW5zbjEpOwotICBpZiAoIWJyYW5jaDEgfHwg IUpVTVBfUCAoYnJhbmNoMSkpCi0gICAgcmV0dXJuIGZhbHNlOwotCi0gIGluc24yID0gbmV4 dF9ub25ub3RlX25vbmRlYnVnX2luc24gKGJyYW5jaDEpOwotICBpZiAoIWluc24yIHx8ICFh dnJfY29tcGFyZV9wYXR0ZXJuIChpbnNuMikpCi0gICAgcmV0dXJuIGZhbHNlOwotCi0gIGJy YW5jaDIgPSBuZXh0X25vbm5vdGVfbm9uZGVidWdfaW5zbiAoaW5zbjIpOwotICBpZiAoIWJy YW5jaDIgfHwgIUpVTVBfUCAoYnJhbmNoMikpCi0gICAgcmV0dXJuIGZhbHNlOwotCi0gIGNv bXAxID0gYXZyX2NvbXBhcmVfcGF0dGVybiAoaW5zbjEpOwotICBjb21wMiA9IGF2cl9jb21w YXJlX3BhdHRlcm4gKGluc24yKTsKLSAgeGNvbmQxID0gc2luZ2xlX3NldCAoYnJhbmNoMSk7 Ci0gIHhjb25kMiA9IHNpbmdsZV9zZXQgKGJyYW5jaDIpOwotCi0gIGlmICghY29tcDEgfHwg IWNvbXAyCi0gICAgICB8fCAhcnR4X2VxdWFsX3AgKGNvbXAxLCBjb21wMikKLSAgICAgIHx8 ICF4Y29uZDEgfHwgU0VUX0RFU1QgKHhjb25kMSkgIT0gcGNfcnR4Ci0gICAgICB8fCAheGNv bmQyIHx8IFNFVF9ERVNUICh4Y29uZDIpICE9IHBjX3J0eAotICAgICAgfHwgSUZfVEhFTl9F TFNFICE9IEdFVF9DT0RFIChTRVRfU1JDICh4Y29uZDEpKQotICAgICAgfHwgSUZfVEhFTl9F TFNFICE9IEdFVF9DT0RFIChTRVRfU1JDICh4Y29uZDIpKSkKLSAgICB7Ci0gICAgICByZXR1 cm4gZmFsc2U7Ci0gICAgfQotCi0gIGNvbXAxID0gU0VUX1NSQyAoY29tcDEpOwotICBpZmVs c2UxID0gU0VUX1NSQyAoeGNvbmQxKTsKLSAgaWZlbHNlMiA9IFNFVF9TUkMgKHhjb25kMik7 Ci0KLSAgLyogY29tcDxuPiBpcyBDT01QQVJFIG5vdyBhbmQgaWZlbHNlPG4+IGlzIElGX1RI RU5fRUxTRS4gICovCi0KLSAgaWYgKEVRICE9IEdFVF9DT0RFIChYRVhQIChpZmVsc2UxLCAw KSkKLSAgICAgIHx8ICFSRUdfUCAoWEVYUCAoY29tcDEsIDApKQotICAgICAgfHwgIUNPTlNU X0lOVF9QIChYRVhQIChjb21wMSwgMSkpCi0gICAgICB8fCBYRVhQIChpZmVsc2UxLCAyKSAh PSBwY19ydHgKLSAgICAgIHx8IFhFWFAgKGlmZWxzZTIsIDIpICE9IHBjX3J0eAotICAgICAg fHwgTEFCRUxfUkVGICE9IEdFVF9DT0RFIChYRVhQIChpZmVsc2UxLCAxKSkKLSAgICAgIHx8 IExBQkVMX1JFRiAhPSBHRVRfQ09ERSAoWEVYUCAoaWZlbHNlMiwgMSkpCi0gICAgICB8fCAh Q09NUEFSSVNPTl9QIChYRVhQIChpZmVsc2UyLCAwKSkKLSAgICAgIHx8IFJFR19DQyAhPSBS RUdOTyAoWEVYUCAoWEVYUCAoaWZlbHNlMSwgMCksIDApKQotICAgICAgfHwgUkVHX0NDICE9 IFJFR05PIChYRVhQIChYRVhQIChpZmVsc2UyLCAwKSwgMCkpCi0gICAgICB8fCBjb25zdDBf cnR4ICE9IFhFWFAgKFhFWFAgKGlmZWxzZTEsIDApLCAxKQotICAgICAgfHwgY29uc3QwX3J0 eCAhPSBYRVhQIChYRVhQIChpZmVsc2UyLCAwKSwgMSkpCi0gICAgewotICAgICAgcmV0dXJu IGZhbHNlOwotICAgIH0KLQotICAvKiBXZSBmaWx0ZXJlZCB0aGUgaW5zbiBzZXF1ZW5jZSB0 byBsb29rIGxpa2UKLQotICAgICAgICAoc2V0IChyZWc6Q0MgY2MpCi0gICAgICAgICAgICAg KGNvbXBhcmUgKHJlZzpNIE4pCi0gICAgICAgICAgICAgICAgICAgICAgKGNvbnN0X2ludCBW QUwpKSkKLSAgICAgICAgKHNldCAocGMpCi0gICAgICAgICAgICAgKGlmX3RoZW5fZWxzZSAo ZXEgKHJlZzpDQyBjYykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3Rf aW50IDApKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxhYmVsX3JlZiBMMSkKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgIChwYykpKQotCi0gICAgICAgIChzZXQgKHJlZzpD QyBjYykKLSAgICAgICAgICAgICAoY29tcGFyZSAocmVnOk0gTikKLSAgICAgICAgICAgICAg ICAgICAgICAoY29uc3RfaW50IFZBTCkpKQotICAgICAgICAoc2V0IChwYykKLSAgICAgICAg ICAgICAoaWZfdGhlbl9lbHNlIChDT0RFIChyZWc6Q0MgY2MpCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAoY29uc3RfaW50IDApKQotICAgICAgICAgICAgICAgICAgICAg ICAgICAgKGxhYmVsX3JlZiBMMikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIChwYykp KQotICAqLwotCi0gIGNvZGUgPSBHRVRfQ09ERSAoWEVYUCAoaWZlbHNlMiwgMCkpOwotCi0g IC8qIE1hcCBHVC9HVFUgdG8gR0UvR0VVIHdoaWNoIGlzIGVhc2llciBmb3IgQVZSLgotICAg ICBUaGUgZmlyc3QgdHdvIGluc3RydWN0aW9ucyBjb21wYXJlL2JyYW5jaCBvbiBFUQotICAg ICBzbyB3ZSBtYXkgcmVwbGFjZSB0aGUgZGlmZmljdWx0Ci0KLSAgICAgICAgaWYgKHggPT0g VkFMKSAgIGdvdG8gTDE7Ci0gICAgICAgIGlmICh4ID4gVkFMKSAgICBnb3RvIEwyOwotCi0g ICAgIHdpdGggZWFzeQotCi0gICAgICAgICBpZiAoeCA9PSBWQUwpICAgZ290byBMMTsKLSAg ICAgICAgIGlmICh4ID49IFZBTCkgICBnb3RvIEwyOwotCi0gICAgIFNpbWlsYXJseSwgcmVw bGFjZSBMRS9MRVUgYnkgTFQvTFRVLiAgKi8KLQotICBzd2l0Y2ggKGNvZGUpCi0gICAgewot ICAgIGNhc2UgRVE6Ci0gICAgY2FzZSBMVDogIGNhc2UgTFRVOgotICAgIGNhc2UgR0U6ICBj YXNlIEdFVToKLSAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBMRTogIGNhc2UgTEVVOgotICAg IGNhc2UgR1Q6ICBjYXNlIEdUVToKLSAgICAgIGNvZGUgPSBhdnJfbm9ybWFsaXplX2NvbmRp dGlvbiAoY29kZSk7Ci0gICAgICBicmVhazsKLQotICAgIGRlZmF1bHQ6Ci0gICAgICByZXR1 cm4gZmFsc2U7Ci0gICAgfQotCi0gIC8qIFdyYXAgdGhlIGJyYW5jaGVzIGludG8gVU5TUEVD cyBzbyB0aGV5IHdvbid0IGJlIGNoYW5nZWQgb3IKLSAgICAgb3B0aW1pemVkIGluIHRoZSBy ZW1haW5kZXIuICAqLwotCi0gIHRhcmdldCA9IFhFWFAgKFhFWFAgKGlmZWxzZTEsIDEpLCAw KTsKLSAgY29uZCA9IFhFWFAgKGlmZWxzZTEsIDApOwotICBqdW1wID0gZW1pdF9qdW1wX2lu c25fYWZ0ZXIgKGdlbl9icmFuY2hfdW5zcGVjICh0YXJnZXQsIGNvbmQpLCBpbnNuMSk7Ci0K LSAgSlVNUF9MQUJFTCAoanVtcCkgPSBKVU1QX0xBQkVMIChicmFuY2gxKTsKLQotICB0YXJn ZXQgPSBYRVhQIChYRVhQIChpZmVsc2UyLCAxKSwgMCk7Ci0gIGNvbmQgPSBnZW5fcnR4X2Zt dF9lZSAoY29kZSwgVk9JRG1vZGUsIGNjX3JlZ19ydHgsIGNvbnN0MF9ydHgpOwotICBqdW1w ID0gZW1pdF9qdW1wX2luc25fYWZ0ZXIgKGdlbl9icmFuY2hfdW5zcGVjICh0YXJnZXQsIGNv bmQpLCBpbnNuMik7Ci0KLSAgSlVNUF9MQUJFTCAoanVtcCkgPSBKVU1QX0xBQkVMIChicmFu Y2gyKTsKLQotICAvKiBUaGUgY29tcGFyaXNvbnMgaW4gaW5zbjEgYW5kIGluc24yIGFyZSBl eGFjdGx5IHRoZSBzYW1lOwotICAgICBpbnNuMiBpcyBzdXBlcmZsdW91cyBzbyBkZWxldGUg aXQuICAqLwotCi0gIGRlbGV0ZV9pbnNuIChpbnNuMik7Ci0gIGRlbGV0ZV9pbnNuIChicmFu Y2gxKTsKLSAgZGVsZXRlX2luc24gKGJyYW5jaDIpOwotCi0gIHJldHVybiB0cnVlOwotfQot Ci0KLS8qIEltcGxlbWVudCBgVEFSR0VUX01BQ0hJTkVfREVQRU5ERU5UX1JFT1JHJy4gICov Ci0vKiBPcHRpbWl6ZSBjb25kaXRpb25hbCBqdW1wcy4gICovCi0KLXN0YXRpYyB2b2lkCi1h dnJfcmVvcmcgKHZvaWQpCi17Ci0gIHJ0eF9pbnNuICppbnNuID0gZ2V0X2luc25zKCk7Ci0K LSAgZm9yIChpbnNuID0gbmV4dF9yZWFsX2luc24gKGluc24pOyBpbnNuOyBpbnNuID0gbmV4 dF9yZWFsX2luc24gKGluc24pKQotICAgIHsKLSAgICAgIHJ0eCBwYXR0ZXJuID0gYXZyX2Nv bXBhcmVfcGF0dGVybiAoaW5zbik7Ci0KLSAgICAgIGlmICghcGF0dGVybikKLSAgICAgICAg Y29udGludWU7Ci0KLSAgICAgIGlmIChvcHRpbWl6ZQotICAgICAgICAgICYmIGF2cl9yZW9y Z19yZW1vdmVfcmVkdW5kYW50X2NvbXBhcmUgKGluc24pKQotICAgICAgICB7Ci0gICAgICAg ICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgaWYgKGNvbXBhcmVfZGlmZl9wIChp bnNuKSkKLQl7Ci0gICAgICAgICAgLyogTm93IHdlIHdvcmsgdW5kZXIgY29tcGFyZSBpbnNu IHdpdGggZGlmZmljdWx0IGJyYW5jaC4gICovCi0KLQkgIHJ0eF9pbnNuICpuZXh0ID0gbmV4 dF9yZWFsX2luc24gKGluc24pOwotICAgICAgICAgIHJ0eCBwYXQgPSBQQVRURVJOIChuZXh0 KTsKLSAgICAgICAgICBpZiAoR0VUX0NPREUgKHBhdCkgPT0gUEFSQUxMRUwpCi0gICAgICAg ICAgICBwYXQgPSBYVkVDRVhQIChwYXQsIDAsIDApOwotCi0gICAgICAgICAgcGF0dGVybiA9 IFNFVF9TUkMgKHBhdHRlcm4pOwotCi0gICAgICAgICAgaWYgKHRydWVfcmVnbnVtIChYRVhQ IChwYXR0ZXJuLCAwKSkgPj0gMAotICAgICAgICAgICAgICAmJiB0cnVlX3JlZ251bSAoWEVY UCAocGF0dGVybiwgMSkpID49IDApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIHJ0 eCB4ID0gWEVYUCAocGF0dGVybiwgMCk7Ci0gICAgICAgICAgICAgIHJ0eCBzcmMgPSBTRVRf U1JDIChwYXQpOwotICAgICAgICAgICAgICBydHggdCA9IFhFWFAgKHNyYywgMCk7Ci0gICAg ICAgICAgICAgIFBVVF9DT0RFICh0LCBzd2FwX2NvbmRpdGlvbiAoR0VUX0NPREUgKHQpKSk7 Ci0gICAgICAgICAgICAgIFhFWFAgKHBhdHRlcm4sIDApID0gWEVYUCAocGF0dGVybiwgMSk7 Ci0gICAgICAgICAgICAgIFhFWFAgKHBhdHRlcm4sIDEpID0geDsKLSAgICAgICAgICAgICAg SU5TTl9DT0RFIChuZXh0KSA9IC0xOwotICAgICAgICAgICAgfQotICAgICAgICAgIGVsc2Ug aWYgKHRydWVfcmVnbnVtIChYRVhQIChwYXR0ZXJuLCAwKSkgPj0gMAotICAgICAgICAgICAg ICAgICAgICYmIFhFWFAgKHBhdHRlcm4sIDEpID09IGNvbnN0MF9ydHgpCi0gICAgICAgICAg ICB7Ci0gICAgICAgICAgICAgIC8qIFRoaXMgaXMgYSB0c3QgaW5zbiwgd2UgY2FuIHJldmVy c2UgaXQuICAqLwotICAgICAgICAgICAgICBydHggc3JjID0gU0VUX1NSQyAocGF0KTsKLSAg ICAgICAgICAgICAgcnR4IHQgPSBYRVhQIChzcmMsIDApOwotCi0gICAgICAgICAgICAgIFBV VF9DT0RFICh0LCBzd2FwX2NvbmRpdGlvbiAoR0VUX0NPREUgKHQpKSk7Ci0gICAgICAgICAg ICAgIFhFWFAgKHBhdHRlcm4sIDEpID0gWEVYUCAocGF0dGVybiwgMCk7Ci0gICAgICAgICAg ICAgIFhFWFAgKHBhdHRlcm4sIDApID0gY29uc3QwX3J0eDsKLSAgICAgICAgICAgICAgSU5T Tl9DT0RFIChuZXh0KSA9IC0xOwotICAgICAgICAgICAgICBJTlNOX0NPREUgKGluc24pID0g LTE7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgZWxzZSBpZiAodHJ1ZV9yZWdudW0gKFhF WFAgKHBhdHRlcm4sIDApKSA+PSAwCi0gICAgICAgICAgICAgICAgICAgJiYgQ09OU1RfSU5U X1AgKFhFWFAgKHBhdHRlcm4sIDEpKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg cnR4IHggPSBYRVhQIChwYXR0ZXJuLCAxKTsKLSAgICAgICAgICAgICAgcnR4IHNyYyA9IFNF VF9TUkMgKHBhdCk7Ci0gICAgICAgICAgICAgIHJ0eCB0ID0gWEVYUCAoc3JjLCAwKTsKLSAg ICAgICAgICAgICAgbWFjaGluZV9tb2RlIG1vZGUgPSBHRVRfTU9ERSAoWEVYUCAocGF0dGVy biwgMCkpOwotCi0gICAgICAgICAgICAgIGlmIChhdnJfc2ltcGxpZnlfY29tcGFyaXNvbl9w IChtb2RlLCBHRVRfQ09ERSAodCksIHgpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAg ICAgICAgICAgIFhFWFAgKHBhdHRlcm4sIDEpID0gZ2VuX2ludF9tb2RlIChJTlRWQUwgKHgp ICsgMSwgbW9kZSk7Ci0gICAgICAgICAgICAgICAgICBQVVRfQ09ERSAodCwgYXZyX25vcm1h bGl6ZV9jb25kaXRpb24gKEdFVF9DT0RFICh0KSkpOwotICAgICAgICAgICAgICAgICAgSU5T Tl9DT0RFIChuZXh0KSA9IC0xOwotICAgICAgICAgICAgICAgICAgSU5TTl9DT0RFIChpbnNu KSA9IC0xOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot ICAgIH0KLX0KIAogLyogUmV0dXJucyByZWdpc3RlciBudW1iZXIgZm9yIGZ1bmN0aW9uIHJl dHVybiB2YWx1ZS4qLwogCkBAIC0xNDU4MCw4ICsxNDk0Myw2IEBAIGF2cl9mbG9hdF9saWJf Y29tcGFyZV9yZXR1cm5zX2Jvb2wgKG1hY2hpbmVfbW9kZSBtb2RlLCBlbnVtIHJ0eF9jb2Rl KQogI2RlZmluZSBUQVJHRVRfUlRYX0NPU1RTIGF2cl9ydHhfY29zdHMKICN1bmRlZiAgVEFS R0VUX0FERFJFU1NfQ09TVAogI2RlZmluZSBUQVJHRVRfQUREUkVTU19DT1NUIGF2cl9hZGRy ZXNzX2Nvc3QKLSN1bmRlZiAgVEFSR0VUX01BQ0hJTkVfREVQRU5ERU5UX1JFT1JHCi0jZGVm aW5lIFRBUkdFVF9NQUNISU5FX0RFUEVOREVOVF9SRU9SRyBhdnJfcmVvcmcKICN1bmRlZiAg VEFSR0VUX0ZVTkNUSU9OX0FSRwogI2RlZmluZSBUQVJHRVRfRlVOQ1RJT05fQVJHIGF2cl9m dW5jdGlvbl9hcmcKICN1bmRlZiAgVEFSR0VUX0ZVTkNUSU9OX0FSR19BRFZBTkNFCkBAIC0x NDcxMSw2ICsxNTA3Miw5IEBAIGF2cl9mbG9hdF9saWJfY29tcGFyZV9yZXR1cm5zX2Jvb2wg KG1hY2hpbmVfbW9kZSBtb2RlLCBlbnVtIHJ0eF9jb2RlKQogI3VuZGVmICBUQVJHRVRfTURf QVNNX0FESlVTVAogI2RlZmluZSBUQVJHRVRfTURfQVNNX0FESlVTVCBhdnJfbWRfYXNtX2Fk anVzdAogCisjdW5kZWYgIFRBUkdFVF9DQU5PTklDQUxJWkVfQ09NUEFSSVNPTgorI2RlZmlu ZSBUQVJHRVRfQ0FOT05JQ0FMSVpFX0NPTVBBUklTT04gYXZyX2Nhbm9uaWNhbGl6ZV9jb21w YXJpc29uCisKIHN0cnVjdCBnY2NfdGFyZ2V0IHRhcmdldG0gPSBUQVJHRVRfSU5JVElBTEla RVI7CiAKIAwKZGlmZiAtLWdpdCBhL2djYy9jb25maWcvYXZyL2F2ci5tZCBiL2djYy9jb25m aWcvYXZyL2F2ci5tZAppbmRleCA0M2I3NTA0NjM4NC4uNjlmOGE0NTEzYjcgMTAwNjQ0Ci0t LSBhL2djYy9jb25maWcvYXZyL2F2ci5tZAorKysgYi9nY2MvY29uZmlnL2F2ci9hdnIubWQK QEAgLTc3LDcgKzc3LDYgQEAgKGRlZmluZV9jX2VudW0gInVuc3BlYyIKICAgIFVOU1BFQ19G TVVMUwogICAgVU5TUEVDX0ZNVUxTVQogICAgVU5TUEVDX0NPUFlTSUdOCi0gICBVTlNQRUNf SURFTlRJVFkKICAgIFVOU1BFQ19JTlNFUlRfQklUUwogICAgVU5TUEVDX1JPVU5ECiAgICBd KQpAQCAtMTY1LDYgKzE2NCw3IEBAIChkZWZpbmVfYXR0ciAiYWRqdXN0X2xlbiIKICAgIGFz aGxzaSwgYXNocnNpLCBsc2hyc2ksCiAgICBhc2hscHNpLCBhc2hycHNpLCBsc2hycHNpLAog ICAgaW5zZXJ0X2JpdHMsIGluc3Zfbm90Yml0LCBpbnN2X25vdGJpdF8wLCBpbnN2X25vdGJp dF83LAorICAgYWRkX3NldF9aTiwgY21wX3VleHQsIGNtcF9zZXh0LAogICAgbm8iCiAgIChj b25zdF9zdHJpbmcgIm5vIikpCiAKQEAgLTI1MSwxMSArMjUxLDIzIEBAIChkZWZpbmVfbW9k ZV9pdGVyYXRvciBRSUhJICBbUUkgSEldKQogKGRlZmluZV9tb2RlX2l0ZXJhdG9yIFFJSEky IFtRSSBISV0pCiAoZGVmaW5lX21vZGVfaXRlcmF0b3IgUUlTSSAgW1FJIEhJIFBTSSBTSV0p CiAoZGVmaW5lX21vZGVfaXRlcmF0b3IgUUlESSAgW1FJIEhJIFBTSSBTSSBESV0pCisoZGVm aW5lX21vZGVfaXRlcmF0b3IgUUlQU0kgW1FJIEhJIFBTSV0pCiAoZGVmaW5lX21vZGVfaXRl cmF0b3IgSElTSSAgW0hJIFBTSSBTSV0pCiAKKzs7IE9yZGVyZWQgaW50ZWdyYWwgYW5kIGZp eGVkLXBvaW50IG1vZGVzIG9mIHNwZWNpZmljIHNpemVzLgogKGRlZmluZV9tb2RlX2l0ZXJh dG9yIEFMTDEgW1FJIFFRIFVRUV0pCiAoZGVmaW5lX21vZGVfaXRlcmF0b3IgQUxMMiBbSEkg SFEgVUhRIEhBIFVIQV0pCiAoZGVmaW5lX21vZGVfaXRlcmF0b3IgQUxMNCBbU0kgU1EgVVNR IFNBIFVTQV0pCisoZGVmaW5lX21vZGVfaXRlcmF0b3IgQUxMMjM0IFtISSBTSSBQU0kKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhRIFVIUSBIQSBVSEEKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFNRIFVTUSBTQSBVU0FdKQorCis7OyBPcmRlcmVkIHNpZ25l ZCBpbnRlZ3JhbCBhbmQgc2lnbmVkIGZpeGVkLXBvaW50IG1vZGVzIG9mIHNwZWNpZmljIHNp emVzLgorKGRlZmluZV9tb2RlX2l0ZXJhdG9yIEFMTHMxIFtRSSBRUV0pCisoZGVmaW5lX21v ZGVfaXRlcmF0b3IgQUxMczIgW0hJIEhRIEhBXSkKKyhkZWZpbmVfbW9kZV9pdGVyYXRvciBB TExzNCBbU0kgU1EgU0FdKQorKGRlZmluZV9tb2RlX2l0ZXJhdG9yIEFMTHMyMzQgW0hJIFNJ IFBTSQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhRIEhBIFNRIFNBXSkKIAog OzsgQWxsIHN1cHBvcnRlZCBtb3ZlLW1vZGVzCiAoZGVmaW5lX21vZGVfaXRlcmF0b3IgTU9W TU9ERSBbUUkgUVEgVVFRCkBAIC0yNjMsMTEgKzI3NSw2IEBAIChkZWZpbmVfbW9kZV9pdGVy YXRvciBNT1ZNT0RFIFtRSSBRUSBVUVEKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBTSSBTUSBVU1EgU0EgVVNBCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0Yg UFNJXSkKIAotOzsgU3VwcG9ydGVkIG9yZGVyZWQgbW9kZXMgdGhhdCBhcmUgMiwgMywgNCBi eXRlcyB3aWRlCi0oZGVmaW5lX21vZGVfaXRlcmF0b3IgT1JERVJFRDIzNCBbSEkgU0kgUFNJ Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSFEgVUhRIEhBIFVIQQotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNRIFVTUSBTQSBVU0FdKQotCiA7OyBQ b3N0LXJlbG9hZCBzcGxpdCBvZiAzLCA0IGJ5dGVzIHdpZGUgbW92ZXMuCiAoZGVmaW5lX21v ZGVfaXRlcmF0b3IgU1BMSVQzNCBbU0kgU0YgUFNJCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgU1EgVVNRIFNBIFVTQV0pCkBAIC0yODIsNiArMjg5LDcgQEAgKGRlZmluZV9j b2RlX2l0ZXJhdG9yIGFueV9zaGlmdHJ0IFtsc2hpZnRydCBhc2hpZnRydF0pCiAoZGVmaW5l X2NvZGVfaXRlcmF0b3IgYml0b3AgW3hvciBpb3IgYW5kXSkKIChkZWZpbmVfY29kZV9pdGVy YXRvciB4aW9yIFt4b3IgaW9yXSkKIChkZWZpbmVfY29kZV9pdGVyYXRvciBlcW5lIFtlcSBu ZV0pCisoZGVmaW5lX2NvZGVfaXRlcmF0b3IgZ2VsdCBbZ2UgbHRdKQogCiAoZGVmaW5lX2Nv ZGVfaXRlcmF0b3Igc3NfYWRkc3ViIFtzc19wbHVzIHNzX21pbnVzXSkKIChkZWZpbmVfY29k ZV9pdGVyYXRvciB1c19hZGRzdWIgW3VzX3BsdXMgdXNfbWludXNdKQpAQCAtMzA5LDYgKzMx NywxMCBAQCAoZGVmaW5lX2NvZGVfYXR0ciBhYmVsaWFuCiAgIFsoc3NfbWludXMgIiIpICh1 c19taW51cyAiIikKICAgIChzc19wbHVzICIlIikgKHVzX3BsdXMgIiUiKV0pCiAKKyhkZWZp bmVfY29kZV9hdHRyIGdlbHRfZXFuZQorICBbKGdlICJlcSIpCisgICAobHQgIm5lIildKQor CiA7OyBNYXAgUlRYIGNvZGUgdG8gaXRzIHN0YW5kYXJkIGluc24gbmFtZQogKGRlZmluZV9j b2RlX2F0dHIgY29kZV9zdGRuYW1lCiAgIFsoYXNoaWZ0ICAgImFzaGwiKQpAQCAtNjQ0OCw4 MCArNjQ2MCw0MSBAQCAoZGVmaW5lX2luc25fYW5kX3NwbGl0ICJ6ZXJvX2V4dGVuZHNpZGky IgogOzs8PT48PT48PT48PT48PT48PT48PT48PT48PT48PT48PT48PT48PT48PT48PT48PT48 PT48PT48PT48PT48PT48PT48PT48PT48PT4KIDs7IGNvbXBhcmUKIAotOyBPcHRpbWl6ZSBu ZWdhdGVkIHRlc3RzIGludG8gcmV2ZXJzZSBjb21wYXJlIGlmIG92ZXJmbG93IGlzIHVuZGVm aW5lZC4KLShkZWZpbmVfaW5zbiAiKm5lZ2F0ZWRfdHN0cWkiCi0gIFsoc2V0IChyZWc6Q0Mg UkVHX0NDKQotICAgICAgICAoY29tcGFyZTpDQyAobmVnOlFJIChtYXRjaF9vcGVyYW5kOlFJ IDAgInJlZ2lzdGVyX29wZXJhbmQiICJyIikpCi0gICAgICAgICAgICAgICAgIChjb25zdF9p bnQgMCkpKV0KLSAgInJlbG9hZF9jb21wbGV0ZWQgJiYgIWZsYWdfd3JhcHYgJiYgIWZsYWdf dHJhcHYiCi0gICJjcCBfX3plcm9fcmVnX18sJTAiCi0gIFsoc2V0X2F0dHIgImxlbmd0aCIg IjEiKV0pCi0KLShkZWZpbmVfaW5zbiAiKnJldmVyc2VkX3RzdHFpIgorOzsgIipzd2FwcGVk X3RzdHFpIiAgIipzd2FwcGVkX3RzdHFxIgorKGRlZmluZV9pbnNuICIqc3dhcHBlZF90c3Q8 bW9kZT4iCiAgIFsoc2V0IChyZWc6Q0MgUkVHX0NDKQotICAgICAgICAoY29tcGFyZTpDQyAo Y29uc3RfaW50IDApCi0gICAgICAgICAgICAgICAgIChtYXRjaF9vcGVyYW5kOlFJIDAgInJl Z2lzdGVyX29wZXJhbmQiICJyIikpKV0KKyAgICAgICAgKGNvbXBhcmU6Q0MgKG1hdGNoX29w ZXJhbmQ6QUxMczEgMCAiY29uc3QwX29wZXJhbmQiICAgIlkwMCIpCisgICAgICAgICAgICAg ICAgICAgIChtYXRjaF9vcGVyYW5kOkFMTHMxIDEgInJlZ2lzdGVyX29wZXJhbmQiICJyIikp KV0KICAgInJlbG9hZF9jb21wbGV0ZWQiCi0gICJjcCBfX3plcm9fcmVnX18sJTAiCi1bKHNl dF9hdHRyICJsZW5ndGgiICIyIildKQorICAiY3AgX196ZXJvX3JlZ19fLCUxIgorWyhzZXRf YXR0ciAibGVuZ3RoIiAiMSIpXSkKIAotKGRlZmluZV9pbnNuICIqbmVnYXRlZF90c3RoaSIK LSAgWyhzZXQgKHJlZzpDQyBSRUdfQ0MpCi0gICAgICAgIChjb21wYXJlOkNDIChuZWc6SEkg KG1hdGNoX29wZXJhbmQ6SEkgMCAicmVnaXN0ZXJfb3BlcmFuZCIgInIiKSkKLSAgICAgICAg ICAgICAgICAgKGNvbnN0X2ludCAwKSkpXQotICAicmVsb2FkX2NvbXBsZXRlZCAmJiAhZmxh Z193cmFwdiAmJiAhZmxhZ190cmFwdiIKLSAgImNwIF9femVyb19yZWdfXywlQTAKLQljcGMg X196ZXJvX3JlZ19fLCVCMCIKLVsoc2V0X2F0dHIgImxlbmd0aCIgIjIiKV0pCi0KLTs7IExl YXZlIGhlcmUgdGhlIGNsb2JiZXIgdXNlZCBieSB0aGUgY21waGkgcGF0dGVybiBmb3Igc2lt cGxpY2l0eSwgZXZlbgotOzsgdGhvdWdoIGl0IGlzIHVudXNlZCwgYmVjYXVzZSB0aGlzIHBh dHRlcm4gaXMgc3ludGhlc2l6ZWQgYnkgYXZyX3Jlb3JnLgotKGRlZmluZV9pbnNuICIqcmV2 ZXJzZWRfdHN0aGkiCisKKzs7ICIqc3dhcHBlZF90c3RoaSIgICIqc3dhcHBlZF90c3RocSIg ICIqc3dhcHBlZF90c3RoYSIKKyhkZWZpbmVfaW5zbiAiKnN3YXBwZWRfdHN0PG1vZGU+Igog ICBbKHNldCAocmVnOkNDIFJFR19DQykKLSAgICAgICAgKGNvbXBhcmU6Q0MgKGNvbnN0X2lu dCAwKQotICAgICAgICAgICAgICAgICAobWF0Y2hfb3BlcmFuZDpISSAwICJyZWdpc3Rlcl9v cGVyYW5kIiAiciIpKSkKLSAgIChjbG9iYmVyIChtYXRjaF9zY3JhdGNoOlFJIDEgIj1YIikp XQorICAgICAgICAoY29tcGFyZTpDQyAobWF0Y2hfb3BlcmFuZDpBTExzMiAwICJjb25zdDBf b3BlcmFuZCIgICAiWTAwIikKKyAgICAgICAgICAgICAgICAgICAgKG1hdGNoX29wZXJhbmQ6 QUxMczIgMSAicmVnaXN0ZXJfb3BlcmFuZCIgInIiKSkpXQogICAicmVsb2FkX2NvbXBsZXRl ZCIKLSAgImNwIF9femVyb19yZWdfXywlQTAKLQljcGMgX196ZXJvX3JlZ19fLCVCMCIKLVso c2V0X2F0dHIgImxlbmd0aCIgIjIiKV0pCisgICJjcCBfX3plcm9fcmVnX18sJUExCisJY3Bj IF9femVyb19yZWdfXywlQjEiCisgIFsoc2V0X2F0dHIgImxlbmd0aCIgIjIiKV0pCiAKLShk ZWZpbmVfaW5zbiAiKm5lZ2F0ZWRfdHN0cHNpIgotICBbKHNldCAocmVnOkNDIFJFR19DQykK LSAgICAgICAgKGNvbXBhcmU6Q0MgKG5lZzpQU0kgKG1hdGNoX29wZXJhbmQ6UFNJIDAgInJl Z2lzdGVyX29wZXJhbmQiICJyIikpCi0gICAgICAgICAgICAgICAgIChjb25zdF9pbnQgMCkp KV0KLSAgInJlbG9hZF9jb21wbGV0ZWQgJiYgIWZsYWdfd3JhcHYgJiYgIWZsYWdfdHJhcHYi Ci0gICJjcCBfX3plcm9fcmVnX18sJUEwXDtjcGMgX196ZXJvX3JlZ19fLCVCMFw7Y3BjIF9f emVyb19yZWdfXywlQzAiCi0gIFsoc2V0X2F0dHIgImxlbmd0aCIgIjMiKV0pCiAKLShkZWZp bmVfaW5zbiAiKnJldmVyc2VkX3RzdHBzaSIKKyhkZWZpbmVfaW5zbiAiKnN3YXBwZWRfdHN0 cHNpIgogICBbKHNldCAocmVnOkNDIFJFR19DQykKICAgICAgICAgKGNvbXBhcmU6Q0MgKGNv bnN0X2ludCAwKQotICAgICAgICAgICAgICAgICAobWF0Y2hfb3BlcmFuZDpQU0kgMCAicmVn aXN0ZXJfb3BlcmFuZCIgInIiKSkpCi0gICAoY2xvYmJlciAobWF0Y2hfc2NyYXRjaDpRSSAx ICI9WCIpKV0KKyAgICAgICAgICAgICAgICAgICAgKG1hdGNoX29wZXJhbmQ6UFNJIDAgInJl Z2lzdGVyX29wZXJhbmQiICJyIikpKV0KICAgInJlbG9hZF9jb21wbGV0ZWQiCiAgICJjcCBf X3plcm9fcmVnX18sJUEwXDtjcGMgX196ZXJvX3JlZ19fLCVCMFw7Y3BjIF9femVyb19yZWdf XywlQzAiCiAgIFsoc2V0X2F0dHIgImxlbmd0aCIgIjMiKV0pCiAKLShkZWZpbmVfaW5zbiAi Km5lZ2F0ZWRfdHN0c2kiCi0gIFsoc2V0IChyZWc6Q0MgUkVHX0NDKQotICAgICAgICAoY29t cGFyZTpDQyAobmVnOlNJIChtYXRjaF9vcGVyYW5kOlNJIDAgInJlZ2lzdGVyX29wZXJhbmQi ICJyIikpCi0gICAgICAgICAgICAgICAgIChjb25zdF9pbnQgMCkpKV0KLSAgInJlbG9hZF9j b21wbGV0ZWQgJiYgIWZsYWdfd3JhcHYgJiYgIWZsYWdfdHJhcHYiCi0gICJjcCBfX3plcm9f cmVnX18sJUEwCi0JY3BjIF9femVyb19yZWdfXywlQjAKLQljcGMgX196ZXJvX3JlZ19fLCVD MAotCWNwYyBfX3plcm9fcmVnX18sJUQwIgotICBbKHNldF9hdHRyICJsZW5ndGgiICI0Iild KQogCi07OyAiKnJldmVyc2VkX3RzdHNpIgotOzsgIipyZXZlcnNlZF90c3RzcSIgIipyZXZl cnNlZF90c3R1c3EiCi07OyAiKnJldmVyc2VkX3RzdHNhIiAiKnJldmVyc2VkX3RzdHVzYSIK LShkZWZpbmVfaW5zbiAiKnJldmVyc2VkX3RzdDxtb2RlPiIKKzs7ICIqc3dhcHBlZF90c3Rz aSIgICIqc3dhcHBlZF90c3RzcSIgICIqc3dhcHBlZF90c3RzYSIKKyhkZWZpbmVfaW5zbiAi KnN3YXBwZWRfdHN0PG1vZGU+IgogICBbKHNldCAocmVnOkNDIFJFR19DQykKLSAgICAgICAg KGNvbXBhcmU6Q0MgKG1hdGNoX29wZXJhbmQ6QUxMNCAwICJjb25zdDBfb3BlcmFuZCIgICAi WTAwIikKLSAgICAgICAgICAgICAgICAgKG1hdGNoX29wZXJhbmQ6QUxMNCAxICJyZWdpc3Rl cl9vcGVyYW5kIiAiciIpKSkKLSAgIChjbG9iYmVyIChtYXRjaF9zY3JhdGNoOlFJIDIgIj1Y IikpXQorICAgICAgICAoY29tcGFyZTpDQyAobWF0Y2hfb3BlcmFuZDpBTExzNCAwICJjb25z dDBfb3BlcmFuZCIgICAiWTAwIikKKyAgICAgICAgICAgICAgICAgICAgKG1hdGNoX29wZXJh bmQ6QUxMczQgMSAicmVnaXN0ZXJfb3BlcmFuZCIgInIiKSkpXQogICAicmVsb2FkX2NvbXBs ZXRlZCIKICAgImNwIF9femVyb19yZWdfXywlQTEKIAljcGMgX196ZXJvX3JlZ19fLCVCMQpA QCAtNjUzNSwzOCArNjUwOCw0MCBAQCAoZGVmaW5lX2luc24gIipyZXZlcnNlZF90c3Q8bW9k ZT4iCiAoZGVmaW5lX2luc24gImNtcDxtb2RlPjMiCiAgIFsoc2V0IChyZWc6Q0MgUkVHX0ND KQogICAgICAgICAoY29tcGFyZTpDQyAobWF0Y2hfb3BlcmFuZDpBTEwxIDAgInJlZ2lzdGVy X29wZXJhbmQiICAiciAgLHIsZCIpCi0gICAgICAgICAgICAgICAgIChtYXRjaF9vcGVyYW5k OkFMTDEgMSAibm9ubWVtb3J5X29wZXJhbmQiICJZMDAscixpIikpKV0KKyAgICAgICAgICAg ICAgICAgICAgKG1hdGNoX29wZXJhbmQ6QUxMMSAxICJub25tZW1vcnlfb3BlcmFuZCIgIlkw MCxyLGkiKSkpXQogICAicmVsb2FkX2NvbXBsZXRlZCIKICAgIkAKLQl0c3QgJTAKKwljcCAl MCwgX196ZXJvX3JlZ19fCiAJY3AgJTAsJTEKIAljcGkgJTAsbG84KCUxKSIKICAgWyhzZXRf YXR0ciAibGVuZ3RoIiAiMSwxLDEiKV0pCiAKLShkZWZpbmVfaW5zbiAiKmNtcHFpX3NpZ25f ZXh0ZW5kIgotICBbKHNldCAocmVnOkNDIFJFR19DQykKLSAgICAgICAgKGNvbXBhcmU6Q0Mg KHNpZ25fZXh0ZW5kOkhJIChtYXRjaF9vcGVyYW5kOlFJIDAgInJlZ2lzdGVyX29wZXJhbmQi ICJkIikpCi0gICAgICAgICAgICAgICAgIChtYXRjaF9vcGVyYW5kOkhJIDEgInM4X29wZXJh bmQiICAgICAgICAgICAgICAgICAgICAgICAibiIpKSldCi0gICJyZWxvYWRfY29tcGxldGVk IgotICAiY3BpICUwLGxvOCglMSkiCi0gIFsoc2V0X2F0dHIgImxlbmd0aCIgIjEiKV0pCi0K IAotKGRlZmluZV9pbnNuICIqY21waGkuemVyby1leHRlbmQuMCIKKzs7IE1heSBiZSBnZW5l cmF0ZWQgYnkgIipjYnJhbmNoPEhJU0k6bW9kZT4uPGNvZGU+PFFJUFNJOm1vZGU+LjAvMSIu CisoZGVmaW5lX2luc24gIipjbXA8SElTSTptb2RlPi48Y29kZT48UUlQU0k6bW9kZT4uMCIK ICAgWyhzZXQgKHJlZzpDQyBSRUdfQ0MpCi0gICAgICAgIChjb21wYXJlOkNDICh6ZXJvX2V4 dGVuZDpISSAobWF0Y2hfb3BlcmFuZDpRSSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiciIpKQot ICAgICAgICAgICAgICAgICAobWF0Y2hfb3BlcmFuZDpISSAxICJyZWdpc3Rlcl9vcGVyYW5k IiAiciIpKSldCi0gICJyZWxvYWRfY29tcGxldGVkIgotICAiY3AgJTAsJUExXDtjcGMgX196 ZXJvX3JlZ19fLCVCMSIKLSAgWyhzZXRfYXR0ciAibGVuZ3RoIiAiMiIpXSkKKyAgICAgICAg KGNvbXBhcmU6Q0MgKGFueV9leHRlbmQ6SElTSSAobWF0Y2hfb3BlcmFuZDpRSVBTSSAwICJy ZWdpc3Rlcl9vcGVyYW5kIiAiciIpKQorICAgICAgICAgICAgICAgICAgICAobWF0Y2hfb3Bl cmFuZDpISVNJIDEgInJlZ2lzdGVyX29wZXJhbmQiICJyIikpKV0KKyAgInJlbG9hZF9jb21w bGV0ZWQKKyAgICYmIEdFVF9NT0RFX1NJWkUgKDxISVNJOk1PREU+bW9kZSkgPiBHRVRfTU9E RV9TSVpFICg8UUlQU0k6TU9ERT5tb2RlKSIKKyAgeworICAgIHJldHVybiBhdnJfb3V0X2Nt cF9leHQgKG9wZXJhbmRzLCA8Q09ERT4sIG51bGxwdHIpOworICB9CisgIFsoc2V0X2F0dHIg ImFkanVzdF9sZW4iICJjbXBfPGV4dGVuZF9zdT5leHQiKV0pCiAKLShkZWZpbmVfaW5zbiAi KmNtcGhpLnplcm8tZXh0ZW5kLjEiCis7OyBTd2FwcGVkIHZlcnNpb24gb2YgdGhlIGFib3Zl LgorOzsgTWF5IGJlIGdlbmVyYXRlZCBieSAiKmNicmFuY2g8SElTSTptb2RlPi48Y29kZT48 UUlQU0k6bW9kZT4uMC8xIi4KKyhkZWZpbmVfaW5zbiAiKmNtcDxISVNJOm1vZGU+Ljxjb2Rl PjxRSVBTSTptb2RlPi4xIgogICBbKHNldCAocmVnOkNDIFJFR19DQykKLSAgICAgICAgKGNv bXBhcmU6Q0MgKG1hdGNoX29wZXJhbmQ6SEkgMCAicmVnaXN0ZXJfb3BlcmFuZCIgInIiKQot ICAgICAgICAgICAgICAgICAoemVyb19leHRlbmQ6SEkgKG1hdGNoX29wZXJhbmQ6UUkgMSAi cmVnaXN0ZXJfb3BlcmFuZCIgInIiKSkpKV0KLSAgInJlbG9hZF9jb21wbGV0ZWQiCi0gICJj cCAlQTAsJTFcO2NwYyAlQjAsX196ZXJvX3JlZ19fIgotICBbKHNldF9hdHRyICJsZW5ndGgi ICIyIildKQorICAgICAgICAoY29tcGFyZTpDQyAobWF0Y2hfb3BlcmFuZDpISVNJIDAgInJl Z2lzdGVyX29wZXJhbmQiICJyIikKKyAgICAgICAgICAgICAgICAgICAgKGFueV9leHRlbmQ6 SElTSSAobWF0Y2hfb3BlcmFuZDpRSVBTSSAxICJyZWdpc3Rlcl9vcGVyYW5kIiAiciIpKSkp XQorICAicmVsb2FkX2NvbXBsZXRlZAorICAgJiYgR0VUX01PREVfU0laRSAoPEhJU0k6TU9E RT5tb2RlKSA+IEdFVF9NT0RFX1NJWkUgKDxRSVBTSTpNT0RFPm1vZGUpIgorICB7CisgICAg cmV0dXJuIGF2cl9vdXRfY21wX2V4dCAob3BlcmFuZHMsIDxDT0RFPiwgbnVsbHB0cik7Cisg IH0KKyAgWyhzZXRfYXR0ciAiYWRqdXN0X2xlbiIgImNtcF88ZXh0ZW5kX3N1PmV4dCIpXSkK KwogCiA7OyAiY21waGkzIgogOzsgImNtcGhxMyIgImNtcHVocTMiCkBAIC02NTc0LDggKzY1 NDksOCBAQCAoZGVmaW5lX2luc24gIipjbXBoaS56ZXJvLWV4dGVuZC4xIgogKGRlZmluZV9p bnNuICJjbXA8bW9kZT4zIgogICBbKHNldCAocmVnOkNDIFJFR19DQykKICAgICAgICAgKGNv bXBhcmU6Q0MgKG1hdGNoX29wZXJhbmQ6QUxMMiAwICJyZWdpc3Rlcl9vcGVyYW5kIiAgIiF3 ICAsciAgLHIsZCAsciAgLGQsciIpCi0gICAgICAgICAgICAgICAgIChtYXRjaF9vcGVyYW5k OkFMTDIgMSAibm9ubWVtb3J5X29wZXJhbmQiICAiWTAwLFkwMCxyLHMgLHMgICxNLG4gWW5u IikpKQotICAgKGNsb2JiZXIgKG1hdGNoX3NjcmF0Y2g6UUkgMiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAiPVggICxYICAsWCwmZCwmZCAsWCwmZCIpKV0KKyAgICAgICAgICAgICAg ICAgICAgKG1hdGNoX29wZXJhbmQ6QUxMMiAxICJub25tZW1vcnlfb3BlcmFuZCIgICJZMDAs WTAwLHIscyAscyAgLE0sbiBZbm4iKSkpCisgICAoY2xvYmJlciAobWF0Y2hfc2NyYXRjaDpR SSAyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI9WCAgLFggICxYLCZkLCZkICxY LCZkIikpXQogICAicmVsb2FkX2NvbXBsZXRlZCIKICAgewogICAgIHN3aXRjaCAod2hpY2hf YWx0ZXJuYXRpdmUpCkBAIC02NjAyLDE0ICs2NTc3LDE0IEBAIChkZWZpbmVfaW5zbiAiY21w PG1vZGU+MyIKIAogICAgIHJldHVybiBhdnJfb3V0X2NvbXBhcmUgKGluc24sIG9wZXJhbmRz LCBOVUxMKTsKICAgfQotICBbKHNldF9hdHRyICJsZW5ndGgiICIxLDIsMiwzLDQsMiw0IikK KyAgWyhzZXRfYXR0ciAibGVuZ3RoIiAiMiwyLDIsMyw0LDIsNCIpCiAgICAoc2V0X2F0dHIg ImFkanVzdF9sZW4iICJ0c3RoaSx0c3RoaSwqLCosKixjb21wYXJlLGNvbXBhcmUiKV0pCiAK IChkZWZpbmVfaW5zbiAiKmNtcHBzaSIKICAgWyhzZXQgKHJlZzpDQyBSRUdfQ0MpCiAgICAg ICAgIChjb21wYXJlOkNDIChtYXRjaF9vcGVyYW5kOlBTSSAwICJyZWdpc3Rlcl9vcGVyYW5k IiAgInIscixkICxyICAsZCxyIikKLSAgICAgICAgICAgICAgICAgKG1hdGNoX29wZXJhbmQ6 UFNJIDEgIm5vbm1lbW9yeV9vcGVyYW5kIiAiTCxyLHMgLHMgICxNLG4iKSkpCi0gICAoY2xv YmJlciAobWF0Y2hfc2NyYXRjaDpRSSAyICAgICAgICAgICAgICAgICAgICAgICAgICAiPVgs WCwmZCwmZCAsWCwmZCIpKV0KKyAgICAgICAgICAgICAgICAgICAgKG1hdGNoX29wZXJhbmQ6 UFNJIDEgIm5vbm1lbW9yeV9vcGVyYW5kIiAiTCxyLHMgLHMgICxNLG4iKSkpCisgICAoY2xv YmJlciAobWF0Y2hfc2NyYXRjaDpRSSAyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi PVgsWCwmZCwmZCAsWCwmZCIpKV0KICAgInJlbG9hZF9jb21wbGV0ZWQiCiAgIHsKICAgICBz d2l0Y2ggKHdoaWNoX2FsdGVybmF0aXZlKQpAQCAtNjY0MCw4ICs2NjE1LDggQEAgKGRlZmlu ZV9pbnNuICIqY21wcHNpIgogKGRlZmluZV9pbnNuICIqY21wPG1vZGU+IgogICBbKHNldCAo cmVnOkNDIFJFR19DQykKICAgICAgICAgKGNvbXBhcmU6Q0MgKG1hdGNoX29wZXJhbmQ6QUxM NCAwICJyZWdpc3Rlcl9vcGVyYW5kIiAgInIgICxyICxkLHIgLHIiKQotICAgICAgICAgICAg ICAgICAobWF0Y2hfb3BlcmFuZDpBTEw0IDEgIm5vbm1lbW9yeV9vcGVyYW5kIiAiWTAwLHIg LE0sTSAsbiBZbm4iKSkpCi0gICAoY2xvYmJlciAobWF0Y2hfc2NyYXRjaDpRSSAyICAgICAg ICAgICAgICAgICAgICAgICAgICAgIj1YICAsWCAsWCwmZCwmZCIpKV0KKyAgICAgICAgICAg ICAgICAgICAgKG1hdGNoX29wZXJhbmQ6QUxMNCAxICJub25tZW1vcnlfb3BlcmFuZCIgIlkw MCxyICxNLE0gLG4gWW5uIikpKQorICAgKGNsb2JiZXIgKG1hdGNoX3NjcmF0Y2g6UUkgMiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICI9WCAgLFggLFgsJmQsJmQiKSldCiAgICJy ZWxvYWRfY29tcGxldGVkIgogICB7CiAgICAgaWYgKDAgPT0gd2hpY2hfYWx0ZXJuYXRpdmUp CkBAIC02NjU1LDYgKzY2MzAsMTMgQEAgKGRlZmluZV9pbnNuICIqY21wPG1vZGU+IgogICAg KHNldF9hdHRyICJhZGp1c3RfbGVuIiAidHN0c2ksKixjb21wYXJlLGNvbXBhcmUsY29tcGFy ZSIpXSkKIAogCis7OyBBIGhlbHBlciBmb3IgYXZyX3Bhc3NfaWZlbHNlOjphdnJfcmVzdF9v Zl9oYW5kbGVfaWZlbHNlKCkuCisoZGVmaW5lX2V4cGFuZCAiZ2VuX2NvbXBhcmU8bW9kZT4i CisgIFsocGFyYWxsZWwgWyhzZXQgKHJlZzpDQyBSRUdfQ0MpCisgICAgICAgICAgICAgICAg ICAgKGNvbXBhcmU6Q0MgKG1hdGNoX29wZXJhbmQ6SElTSSAwICJyZWdpc3Rlcl9vcGVyYW5k IikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobWF0Y2hfb3BlcmFuZDpISVNJ IDEgImNvbnN0X2ludF9vcGVyYW5kIikpKQorICAgICAgICAgICAgICAoY2xvYmJlciAobWF0 Y2hfb3BlcmFuZDpRSSAyICJzY3JhdGNoX29wZXJhbmQiKSldKV0pCisKIDs7IC0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KIDs7IEpVTVAgSU5TVFJVQ1RJT05TCiA7OyAtLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBA IC02NjYzLDUzICs2NjQ1LDY3IEBAIChkZWZpbmVfaW5zbiAiKmNtcDxtb2RlPiIKIChkZWZp bmVfZXhwYW5kICJjYnJhbmNoPG1vZGU+NCIKICAgWyhzZXQgKHBjKQogICAgICAgICAoaWZf dGhlbl9lbHNlIChtYXRjaF9vcGVyYXRvciAwICJvcmRlcmVkX2NvbXBhcmlzb25fb3BlcmF0 b3IiCi0gICAgICAgICAgICAgICAgICAgICAgICBbKG1hdGNoX29wZXJhbmQ6QUxMMSAxICJy ZWdpc3Rlcl9vcGVyYW5kIiAiIikKLSAgICAgICAgICAgICAgICAgICAgICAgICAobWF0Y2hf b3BlcmFuZDpBTEwxIDIgIm5vbm1lbW9yeV9vcGVyYW5kIiAiIildKQotICAgICAgICAgKGxh YmVsX3JlZiAobWF0Y2hfb3BlcmFuZCAzICIiICIiKSkKLSAgICAgICAgIChwYykpKV0pCisg ICAgICAgICAgICAgICAgICAgICAgICBbKG1hdGNoX29wZXJhbmQ6QUxMMSAxICJyZWdpc3Rl cl9vcGVyYW5kIikKKyAgICAgICAgICAgICAgICAgICAgICAgICAobWF0Y2hfb3BlcmFuZDpB TEwxIDIgIm5vbm1lbW9yeV9vcGVyYW5kIildKQorICAgICAgICAgICAgICAgICAgICAgIChs YWJlbF9yZWYgKG1hdGNoX29wZXJhbmQgMykpCisgICAgICAgICAgICAgICAgICAgICAgKHBj KSkpXQorICAiIgorICB7CisgICAgaW50IGljb2RlID0gKGludCkgR0VUX0NPREUgKG9wZXJh bmRzWzBdKTsKKworICAgIHRhcmdldG0uY2Fub25pY2FsaXplX2NvbXBhcmlzb24gKCZpY29k ZSwgJm9wZXJhbmRzWzFdLCAmb3BlcmFuZHNbMl0sIGZhbHNlKTsKKyAgICBQVVRfQ09ERSAo b3BlcmFuZHNbMF0sIChlbnVtIHJ0eF9jb2RlKSBpY29kZSk7CisgIH0pCiAKIChkZWZpbmVf ZXhwYW5kICJjYnJhbmNoPG1vZGU+NCIKICAgWyhwYXJhbGxlbAogICAgICBbKHNldCAocGMp Ci0gICAgICAgICAgIChpZl90aGVuX2Vsc2UKLSAgICAgICAgICAgICAobWF0Y2hfb3BlcmF0 b3IgMCAib3JkZXJlZF9jb21wYXJpc29uX29wZXJhdG9yIgotICAgICAgICAgICAgICAgWyht YXRjaF9vcGVyYW5kOk9SREVSRUQyMzQgMSAicmVnaXN0ZXJfb3BlcmFuZCIgIiIpCi0gICAg ICAgICAgICAgICAgKG1hdGNoX29wZXJhbmQ6T1JERVJFRDIzNCAyICJub25tZW1vcnlfb3Bl cmFuZCIgIiIpXSkKLSAgICAgICAgICAgICAobGFiZWxfcmVmIChtYXRjaF9vcGVyYW5kIDMg IiIgIiIpKQotICAgICAgICAgICAgIChwYykpKQotICAgICAgKGNsb2JiZXIgKG1hdGNoX3Nj cmF0Y2g6UUkgNCAiIikpXSldKQotCi07OyAiKmNicmFuY2hxaTQiCi07OyAiKmNicmFuY2hx cTQiICAiKmNicmFuY2h1cXE0IgotKGRlZmluZV9pbnNuX2FuZF9zcGxpdCAiKmNicmFuY2g8 bW9kZT40IgorICAgICAgICAgICAoaWZfdGhlbl9lbHNlIChtYXRjaF9vcGVyYXRvciAwICJv cmRlcmVkX2NvbXBhcmlzb25fb3BlcmF0b3IiCisgICAgICAgICAgICAgICAgICAgICAgICAg ICBbKG1hdGNoX29wZXJhbmQ6QUxMMjM0IDEgInJlZ2lzdGVyX29wZXJhbmQiKQorICAgICAg ICAgICAgICAgICAgICAgICAgICAgIChtYXRjaF9vcGVyYW5kOkFMTDIzNCAyICJub25tZW1v cnlfb3BlcmFuZCIpXSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAobGFiZWxfcmVmICht YXRjaF9vcGVyYW5kIDMpKQorICAgICAgICAgICAgICAgICAgICAgICAgIChwYykpKQorICAg ICAgKGNsb2JiZXIgKG1hdGNoX3NjcmF0Y2g6UUkgNCkpXSldCisgICIiCisgIHsKKyAgICBp bnQgaWNvZGUgPSAoaW50KSBHRVRfQ09ERSAob3BlcmFuZHNbMF0pOworCisgICAgdGFyZ2V0 bS5jYW5vbmljYWxpemVfY29tcGFyaXNvbiAoJmljb2RlLCAmb3BlcmFuZHNbMV0sICZvcGVy YW5kc1syXSwgZmFsc2UpOworICAgIFBVVF9DT0RFIChvcGVyYW5kc1swXSwgKGVudW0gcnR4 X2NvZGUpIGljb2RlKTsKKyAgfSkKKworCis7OyAiY2JyYW5jaHFpNF9pbnNuIgorOzsgImNi cmFuY2hxcTRfaW5zbiIgICJjYnJhbmNodXFxNF9pbnNuIgorKGRlZmluZV9pbnNuX2FuZF9z cGxpdCAiY2JyYW5jaDxtb2RlPjRfaW5zbiIKICAgWyhzZXQgKHBjKQogICAgICAgICAoaWZf dGhlbl9lbHNlIChtYXRjaF9vcGVyYXRvciAwICJvcmRlcmVkX2NvbXBhcmlzb25fb3BlcmF0 b3IiCi0gICAgICAgICAgICAgICAgICAgICAgICBbKG1hdGNoX29wZXJhbmQ6QUxMMSAxICJy ZWdpc3Rlcl9vcGVyYW5kIiAiciAgLHIsZCIpCisgICAgICAgICAgICAgICAgICAgICAgICBb KG1hdGNoX29wZXJhbmQ6QUxMMSAxICJyZWdpc3Rlcl9vcGVyYW5kIiAgInIgICxyLGQiKQog ICAgICAgICAgICAgICAgICAgICAgICAgIChtYXRjaF9vcGVyYW5kOkFMTDEgMiAibm9ubWVt b3J5X29wZXJhbmQiICJZMDAscixpIildKQotICAgICAgICAgKGxhYmVsX3JlZiAobWF0Y2hf b3BlcmFuZCAzICIiICIiKSkKLSAgICAgICAgIChwYykpKV0KKyAgICAgICAgICAgICAgICAg ICAgICAobGFiZWxfcmVmIChtYXRjaF9vcGVyYW5kIDMpKQorICAgICAgICAgICAgICAgICAg ICAgIChwYykpKV0KICAgICIiCiAgICAiIyIKICAgICJyZWxvYWRfY29tcGxldGVkIgogICAg WyhzZXQgKHJlZzpDQyBSRUdfQ0MpCi0gICAgICAgICAgICAgICAgICAgIChjb21wYXJlOkND IChtYXRjaF9kdXAgMSkgKG1hdGNoX2R1cCAyKSkpCisgICAgICAgICAoY29tcGFyZTpDQyAo bWF0Y2hfZHVwIDEpIChtYXRjaF9kdXAgMikpKQogICAgIChzZXQgKHBjKQogICAgICAgICAg KGlmX3RoZW5fZWxzZSAobWF0Y2hfb3BfZHVwIDAKICAgICAgICAgICAgICAgICAgICAgICAg ICBbKHJlZzpDQyBSRUdfQ0MpIChjb25zdF9pbnQgMCldKQogICAgICAgICAgICAgICAgICAg ICAgICAobGFiZWxfcmVmIChtYXRjaF9kdXAgMykpCi0gICAgICAgICAgICAgICAgICAgICAg IChwYykpKV0KLSAgICIiKQorICAgICAgICAgICAgICAgICAgICAgICAocGMpKSldKQogCi07 OyAiKmNicmFuY2hzaTQiICAiKmNicmFuY2hzcTQiICAiKmNicmFuY2h1c3E0IiAgIipjYnJh bmNoc2E0IiAgIipjYnJhbmNodXNhNCIKLShkZWZpbmVfaW5zbl9hbmRfc3BsaXQgIipjYnJh bmNoPG1vZGU+NCIKKzs7ICJjYnJhbmNoc2k0X2luc24iCis7OyAiY2JyYW5jaHNxNF9pbnNu IiAgImNicmFuY2h1c3E0X2luc24iICAiY2JyYW5jaHNhNF9pbnNuIiAgImNicmFuY2h1c2E0 X2luc24iCisoZGVmaW5lX2luc25fYW5kX3NwbGl0ICJjYnJhbmNoPG1vZGU+NF9pbnNuIgog ICBbKHNldCAocGMpCi0gICAgICAgICAgIChpZl90aGVuX2Vsc2UKLSAgICAgICAgICAgICAo bWF0Y2hfb3BlcmF0b3IgMCAib3JkZXJlZF9jb21wYXJpc29uX29wZXJhdG9yIgotICAgICAg ICAgICAgICAgWyhtYXRjaF9vcGVyYW5kOkFMTDQgMSAicmVnaXN0ZXJfb3BlcmFuZCIgInIg ICxyICxkLHIgLHIiKQotICAgICAgICAgICAgICAgIChtYXRjaF9vcGVyYW5kOkFMTDQgMiAi bm9ubWVtb3J5X29wZXJhbmQiICJZMDAsciAsTSxNICxuIFlubiIpXSkKLSAgICAgICAgICAg ICAobGFiZWxfcmVmIChtYXRjaF9vcGVyYW5kIDMgIiIgIiIpKQotICAgICAgICAgICAgIChw YykpKQotICAgKGNsb2JiZXIgKG1hdGNoX3NjcmF0Y2g6UUkgNCAiPVggICxYICxYLCZkLCZk IikpXQorICAgICAgICAoaWZfdGhlbl9lbHNlCisgICAgICAgICAobWF0Y2hfb3BlcmF0b3Ig MCAib3JkZXJlZF9jb21wYXJpc29uX29wZXJhdG9yIgorICAgICAgICAgICBbKG1hdGNoX29w ZXJhbmQ6QUxMNCAxICJyZWdpc3Rlcl9vcGVyYW5kIiAgInIgICxyLGQsciAsciIpCisgICAg ICAgICAgICAobWF0Y2hfb3BlcmFuZDpBTEw0IDIgIm5vbm1lbW9yeV9vcGVyYW5kIiAiWTAw LHIsTSxNICxuIFlubiIpXSkKKyAgICAgICAgIChsYWJlbF9yZWYgKG1hdGNoX29wZXJhbmQg MykpCisgICAgICAgICAocGMpKSkKKyAgIChjbG9iYmVyIChtYXRjaF9zY3JhdGNoOlFJIDQg ICAgICAgICAgICAgICAgICAgICAgIj1YICAsWCxYLCZkLCZkIikpXQogICAgIiIKICAgICIj IgogICAgInJlbG9hZF9jb21wbGV0ZWQiCkBAIC02NzIwLDE5ICs2NzE2LDE4IEBAIChkZWZp bmVfaW5zbl9hbmRfc3BsaXQgIipjYnJhbmNoPG1vZGU+NCIKICAgICAgICAgIChpZl90aGVu X2Vsc2UgKG1hdGNoX29wX2R1cCAwCiAgICAgICAgICAgICAgICAgICAgICAgICAgWyhyZWc6 Q0MgUkVHX0NDKSAoY29uc3RfaW50IDApXSkKICAgICAgICAgICAgICAgICAgICAgICAgKGxh YmVsX3JlZiAobWF0Y2hfZHVwIDMpKQotICAgICAgICAgICAgICAgICAgICAgICAocGMpKSld Ci0gICAiIikKKyAgICAgICAgICAgICAgICAgICAgICAgKHBjKSkpXSkKIAotOzsgIipjYnJh bmNocHNpNCIKLShkZWZpbmVfaW5zbl9hbmRfc3BsaXQgIipjYnJhbmNocHNpNCIKKzs7ICJj YnJhbmNocHNpNF9pbnNuIgorKGRlZmluZV9pbnNuX2FuZF9zcGxpdCAiY2JyYW5jaHBzaTRf aW5zbiIKICAgWyhzZXQgKHBjKQotICAgICAgICAgICAoaWZfdGhlbl9lbHNlCi0gICAgICAg ICAgICAgKG1hdGNoX29wZXJhdG9yIDAgIm9yZGVyZWRfY29tcGFyaXNvbl9vcGVyYXRvciIK LSAgICAgICAgICAgICAgIFsobWF0Y2hfb3BlcmFuZDpQU0kgMSAicmVnaXN0ZXJfb3BlcmFu ZCIgInIscixkICxyICAsZCxyIikKLSAgICAgICAgICAgICAgICAobWF0Y2hfb3BlcmFuZDpQ U0kgMiAibm9ubWVtb3J5X29wZXJhbmQiICJMLHIscyAscyAgLE0sbiIpXSkKLSAgICAgICAg ICAgICAobGFiZWxfcmVmIChtYXRjaF9vcGVyYW5kIDMgIiIgIiIpKQotICAgICAgICAgICAg IChwYykpKQotICAgKGNsb2JiZXIgKG1hdGNoX3NjcmF0Y2g6UUkgNCAiPVgsWCwmZCwmZCAs WCwmZCIpKV0KKyAgICAgICAgKGlmX3RoZW5fZWxzZQorICAgICAgICAgKG1hdGNoX29wZXJh dG9yIDAgIm9yZGVyZWRfY29tcGFyaXNvbl9vcGVyYXRvciIKKyAgICAgICAgICAgWyhtYXRj aF9vcGVyYW5kOlBTSSAxICJyZWdpc3Rlcl9vcGVyYW5kIiAgInIscixkICxyICxkLHIiKQor ICAgICAgICAgICAgKG1hdGNoX29wZXJhbmQ6UFNJIDIgIm5vbm1lbW9yeV9vcGVyYW5kIiAi TCxyLHMgLHMgLE0sbiIpXSkKKyAgICAgICAgIChsYWJlbF9yZWYgKG1hdGNoX29wZXJhbmQg MykpCisgICAgICAgICAocGMpKSkKKyAgIChjbG9iYmVyIChtYXRjaF9zY3JhdGNoOlFJIDQg ICAgICAgICAgICAgICAgICAgICAiPVgsWCwmZCwmZCxYLCZkIikpXQogICAgIiIKICAgICIj IgogICAgInJlbG9hZF9jb21wbGV0ZWQiCkBAIC02NzQzLDE5ICs2NzM4LDE5IEBAIChkZWZp bmVfaW5zbl9hbmRfc3BsaXQgIipjYnJhbmNocHNpNCIKICAgICAgICAgIChpZl90aGVuX2Vs c2UgKG1hdGNoX29wX2R1cCAwCiAgICAgICAgICAgICAgICAgICAgICAgICAgWyhyZWc6Q0Mg UkVHX0NDKSAoY29uc3RfaW50IDApXSkKICAgICAgICAgICAgICAgICAgICAgICAgKGxhYmVs X3JlZiAobWF0Y2hfZHVwIDMpKQotICAgICAgICAgICAgICAgICAgICAgICAocGMpKSldCi0g ICAiIikKKyAgICAgICAgICAgICAgICAgICAgICAgKHBjKSkpXSkKIAotOzsgIipjYnJhbmNo aGk0IiAgIipjYnJhbmNoaHE0IiAgIipjYnJhbmNodWhxNCIgICIqY2JyYW5jaGhhNCIgICIq Y2JyYW5jaHVoYTQiCi0oZGVmaW5lX2luc25fYW5kX3NwbGl0ICIqY2JyYW5jaDxtb2RlPjQi Cis7OyAiY2JyYW5jaGhpNF9pbnNuIgorOzsgImNicmFuY2hocTRfaW5zbiIgICJjYnJhbmNo dWhxNF9pbnNuIiAgImNicmFuY2hoYTRfaW5zbiIgICJjYnJhbmNodWhhNF9pbnNuIgorKGRl ZmluZV9pbnNuX2FuZF9zcGxpdCAiY2JyYW5jaDxtb2RlPjRfaW5zbiIKICAgWyhzZXQgKHBj KQotICAgICAgICAgICAoaWZfdGhlbl9lbHNlCi0gICAgICAgICAgICAgKG1hdGNoX29wZXJh dG9yIDAgIm9yZGVyZWRfY29tcGFyaXNvbl9vcGVyYXRvciIKLSAgICAgICAgICAgICAgIFso bWF0Y2hfb3BlcmFuZDpBTEwyIDEgInJlZ2lzdGVyX29wZXJhbmQiICIhdyAgLHIgICxyLGQg LHIgICxkLHIiKQotICAgICAgICAgICAgICAgIChtYXRjaF9vcGVyYW5kOkFMTDIgMiAibm9u bWVtb3J5X29wZXJhbmQiICJZMDAsWTAwLHIscyAscyAgLE0sbiBZbm4iKV0pCi0gICAgICAg ICAgICAgKGxhYmVsX3JlZiAobWF0Y2hfb3BlcmFuZCAzICIiICIiKSkKLSAgICAgICAgICAg ICAocGMpKSkKLSAgIChjbG9iYmVyIChtYXRjaF9zY3JhdGNoOlFJIDQgIj1YICAsWCAgLFgs JmQsJmQgLFgsJmQiKSldCisgICAgICAgIChpZl90aGVuX2Vsc2UKKyAgICAgICAgIChtYXRj aF9vcGVyYXRvciAwICJvcmRlcmVkX2NvbXBhcmlzb25fb3BlcmF0b3IiCisgICAgICAgICAg IFsobWF0Y2hfb3BlcmFuZDpBTEwyIDEgInJlZ2lzdGVyX29wZXJhbmQiICIhdyAgLHIgICxy LGQgLHIgLGQsciIpCisgICAgICAgICAgICAobWF0Y2hfb3BlcmFuZDpBTEwyIDIgIm5vbm1l bW9yeV9vcGVyYW5kIiAiWTAwLFkwMCxyLHMgLHMgLE0sbiBZbm4iKV0pCisgICAgICAgICAo bGFiZWxfcmVmIChtYXRjaF9vcGVyYW5kIDMpKQorICAgICAgICAgKHBjKSkpCisgICAoY2xv YmJlciAobWF0Y2hfc2NyYXRjaDpRSSA0ICAgICAgICAgICAgICAgICAgICAgICI9WCAgLFgg ICxYLCZkLCZkLFgsJmQiKSldCiAgICAiIgogICAgIiMiCiAgICAicmVsb2FkX2NvbXBsZXRl ZCIKQEAgLTY3NjYsOCArNjc2MSw3MSBAQCAoZGVmaW5lX2luc25fYW5kX3NwbGl0ICIqY2Jy YW5jaDxtb2RlPjQiCiAgICAgICAgICAoaWZfdGhlbl9lbHNlIChtYXRjaF9vcF9kdXAgMAog ICAgICAgICAgICAgICAgICAgICAgICAgIFsocmVnOkNDIFJFR19DQykgKGNvbnN0X2ludCAw KV0pCiAgICAgICAgICAgICAgICAgICAgICAgIChsYWJlbF9yZWYgKG1hdGNoX2R1cCAzKSkK LSAgICAgICAgICAgICAgICAgICAgICAgKHBjKSkpXQotICAgIiIpCisgICAgICAgICAgICAg ICAgICAgICAgIChwYykpKV0pCisKKzs7IENvbWJpbmVyIHBhdHRlcm4gdG8gY29tcGFyZSBz aWduLSBvciB6ZXJvLWV4dGVuZGVkIHJlZ2lzdGVyIGFnYWluc3QKKzs7IGEgd2lkZXIgcmVn aXN0ZXIsIGxpa2UgY29tcGFyaW5nIHVpbnQ4X3QgYWdhaW5zdCB1aW50MTZfdC4KKyhkZWZp bmVfaW5zbl9hbmRfc3BsaXQgIipjYnJhbmNoPEhJU0k6bW9kZT4uPGNvZGU+PFFJUFNJOm1v ZGU+LjAiCisgIFsoc2V0IChwYykKKyAgICAgICAgKGlmX3RoZW5fZWxzZSAobWF0Y2hfb3Bl cmF0b3IgMCAib3JkZXJlZF9jb21wYXJpc29uX29wZXJhdG9yIgorICAgICAgICAgICAgICAg ICAgICAgICAgWyhhbnlfZXh0ZW5kOkhJU0kgKG1hdGNoX29wZXJhbmQ6UUlQU0kgMSAicmVn aXN0ZXJfb3BlcmFuZCIgInIiKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAobWF0Y2hf b3BlcmFuZDpISVNJIDIgInJlZ2lzdGVyX29wZXJhbmQiICJyIildKQorICAgICAgICAgICAg ICAgICAgICAgIChsYWJlbF9yZWYgKG1hdGNoX29wZXJhbmQgMykpCisgICAgICAgICAgICAg ICAgICAgICAgKHBjKSkpXQorICAib3B0aW1pemUKKyAgICYmIEdFVF9NT0RFX1NJWkUgKDxI SVNJOk1PREU+bW9kZSkgPiBHRVRfTU9ERV9TSVpFICg8UUlQU0k6TU9ERT5tb2RlKSIKKyAg IiMiCisgICImJiByZWxvYWRfY29tcGxldGVkIgorICBbOyAiKmNtcDxISVNJOm1vZGU+Ljxj b2RlPjxRSVBTSTptb2RlPi4wIgorICAgKHNldCAocmVnOkNDIFJFR19DQykKKyAgICAgICAg KGNvbXBhcmU6Q0MgKG1hdGNoX2R1cCAxKQorICAgICAgICAgICAgICAgICAgICAobWF0Y2hf ZHVwIDIpKSkKKyAgIDsgImJyYW5jaCIKKyAgIChzZXQgKHBjKQorICAgICAgICAoaWZfdGhl bl9lbHNlIChtYXRjaF9vcF9kdXAgMCBbKHJlZzpDQyBSRUdfQ0MpCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3RfaW50IDApXSkKKyAgICAgICAgICAg ICAgICAgICAgICAobGFiZWxfcmVmIChtYXRjaF9kdXAgMykpCisgICAgICAgICAgICAgICAg ICAgICAgKHBjKSkpXQorICB7CisgICAgb3BlcmFuZHNbMV0gPSBnZW5fcnR4XzxDT0RFPiAo PEhJU0k6TU9ERT5tb2RlLCBvcGVyYW5kc1sxXSk7CisgICAgaWYgKGRpZmZpY3VsdF9jb21w YXJpc29uX29wZXJhdG9yIChvcGVyYW5kc1swXSwgVk9JRG1vZGUpKQorICAgICAgeworICAg ICAgICBQVVRfQ09ERSAob3BlcmFuZHNbMF0sIHN3YXBfY29uZGl0aW9uIChHRVRfQ09ERSAo b3BlcmFuZHNbMF0pKSk7CisgICAgICAgIHN0ZDo6c3dhcCAob3BlcmFuZHNbMV0sIG9wZXJh bmRzWzJdKTsKKyAgICAgIH0KKyAgfSkKKworOzsgU2FtZSBjb21iaW5lciBwYXR0ZXJuLCBi dXQgd2l0aCBzd2FwcGVkIG9wZXJhbmRzLgorKGRlZmluZV9pbnNuX2FuZF9zcGxpdCAiKmNi cmFuY2g8SElTSTptb2RlPi48Y29kZT48UUlQU0k6bW9kZT4uMCIKKyAgWyhzZXQgKHBjKQor ICAgICAgICAoaWZfdGhlbl9lbHNlIChtYXRjaF9vcGVyYXRvciAwICJvcmRlcmVkX2NvbXBh cmlzb25fb3BlcmF0b3IiCisgICAgICAgICAgICAgICAgICAgICAgICBbKG1hdGNoX29wZXJh bmQ6SElTSSAxICJyZWdpc3Rlcl9vcGVyYW5kIiAiciIpCisgICAgICAgICAgICAgICAgICAg ICAgICAgKGFueV9leHRlbmQ6SElTSSAobWF0Y2hfb3BlcmFuZDpRSVBTSSAyICJyZWdpc3Rl cl9vcGVyYW5kIiAiciIpKV0pCisgICAgICAgICAgICAgICAgICAgICAgKGxhYmVsX3JlZiAo bWF0Y2hfb3BlcmFuZCAzKSkKKyAgICAgICAgICAgICAgICAgICAgICAocGMpKSldCisgICJv cHRpbWl6ZQorICAgJiYgR0VUX01PREVfU0laRSAoPEhJU0k6TU9ERT5tb2RlKSA+IEdFVF9N T0RFX1NJWkUgKDxRSVBTSTpNT0RFPm1vZGUpIgorICAiIyIKKyAgIiYmIHJlbG9hZF9jb21w bGV0ZWQiCisgIFs7ICIqY21wPEhJU0k6bW9kZT4uPGNvZGU+PFFJUFNJOm1vZGU+LjAiCisg ICAoc2V0IChyZWc6Q0MgUkVHX0NDKQorICAgICAgICAoY29tcGFyZTpDQyAobWF0Y2hfZHVw IDEpCisgICAgICAgICAgICAgICAgICAgIChtYXRjaF9kdXAgMikpKQorICAgOyAiYnJhbmNo IgorICAgKHNldCAocGMpCisgICAgICAgIChpZl90aGVuX2Vsc2UgKG1hdGNoX29wX2R1cCAw IFsocmVnOkNDIFJFR19DQykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIChjb25zdF9pbnQgMCldKQorICAgICAgICAgICAgICAgICAgICAgIChsYWJlbF9yZWYg KG1hdGNoX2R1cCAzKSkKKyAgICAgICAgICAgICAgICAgICAgICAocGMpKSldCisgIHsKKyAg ICBvcGVyYW5kc1syXSA9IGdlbl9ydHhfPENPREU+ICg8SElTSTpNT0RFPm1vZGUsIG9wZXJh bmRzWzJdKTsKKyAgICBpZiAoZGlmZmljdWx0X2NvbXBhcmlzb25fb3BlcmF0b3IgKG9wZXJh bmRzWzBdLCBWT0lEbW9kZSkpCisgICAgICB7CisgICAgICAgIFBVVF9DT0RFIChvcGVyYW5k c1swXSwgc3dhcF9jb25kaXRpb24gKEdFVF9DT0RFIChvcGVyYW5kc1swXSkpKTsKKyAgICAg ICAgc3RkOjpzd2FwIChvcGVyYW5kc1sxXSwgb3BlcmFuZHNbMl0pOworICAgICAgfQorICB9 KQorCiAKIDs7IFRlc3QgYSBzaW5nbGUgYml0IGluIGEgUUkvSEkvU0ltb2RlIHJlZ2lzdGVy LgogOzsgQ29tYmluZSB3aWxsIGNyZWF0ZSB6ZXJvIGV4dHJhY3QgcGF0dGVybnMgZm9yIHNp bmdsZSBiaXQgdGVzdHMuCkBAIC02ODQxLDE0ICs2ODk5LDExIEBAIChkZWZpbmVfaW5zbl9h bmRfc3BsaXQgIipzYnJ4X2FuZF9icmFuY2g8bW9kZT5fc3BsaXQiCiAgICIjIgogICAiJiYg cmVsb2FkX2NvbXBsZXRlZCIKICAgWyhwYXJhbGxlbCBbKHNldCAocGMpCi0gICAgICAgICAg ICAgICAgICAgKGlmX3RoZW5fZWxzZQotICAgICAgICAgICAgICAgICAgIChtYXRjaF9vcF9k dXAgMAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhhbmQ6UUlTSQotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobWF0Y2hfZHVwIDEpCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtYXRjaF9kdXAgMikpCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0X2ludCAwKV0pCi0gICAgICAgICAgICAg ICAgICAgKGxhYmVsX3JlZiAobWF0Y2hfZHVwIDMpKQotICAgICAgICAgICAgICAgICAgIChw YykpKQorICAgICAgICAgICAgICAgICAgIChpZl90aGVuX2Vsc2UgKG1hdGNoX29wX2R1cCAw IFsoYW5kOlFJU0kgKG1hdGNoX2R1cCAxKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1hdGNoX2R1cCAyKSkKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0X2lu dCAwKV0pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGFiZWxfcmVmICht YXRjaF9kdXAgMykpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocGMpKSkK ICAgICAgICAgICAgICAgKGNsb2JiZXIgKHJlZzpDQyBSRUdfQ0MpKV0pXSkKIAogKGRlZmlu ZV9pbnNuICIqc2JyeF9hbmRfYnJhbmNoPG1vZGU+IgpAQCAtNjg3NywxNjMgKzY5MzIsNzcg QEAgKGRlZmluZV9pbnNuICIqc2JyeF9hbmRfYnJhbmNoPG1vZGU+IgogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0X2ludCAyKQogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKGNvbnN0X2ludCA0KSkpKV0pCiAKLTs7IENvbnZlcnQg c2lnbiB0ZXN0cyB0byBiaXQgNy8xNS8zMSB0ZXN0cyB0aGF0IG1hdGNoIHRoZSBhYm92ZSBp bnNucy4KLShkZWZpbmVfcGVlcGhvbGUyCi0gIFsoc2V0IChyZWc6Q0MgUkVHX0NDKSAoY29t cGFyZTpDQyAobWF0Y2hfb3BlcmFuZDpRSSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiIikKLSAg ICAgICAgICAgICAgICAgICAgICAgKGNvbnN0X2ludCAwKSkpCi0gICAocGFyYWxsZWwgWyhz ZXQgKHBjKSAoaWZfdGhlbl9lbHNlIChnZSAocmVnOkNDIFJFR19DQykgKGNvbnN0X2ludCAw KSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxhYmVsX3JlZiAo bWF0Y2hfb3BlcmFuZCAxICIiICIiKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKHBjKSkpCi0gICAgICAgICAgICAgIChjbG9iYmVyIChyZWc6Q0MgUkVHX0ND KSldKV0KLSAgIiIKLSAgWyhwYXJhbGxlbCBbKHNldCAocGMpIChpZl90aGVuX2Vsc2UgKGVx ICh6ZXJvX2V4dHJhY3Q6SEkgKG1hdGNoX2R1cCAwKQotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3RfaW50IDEpCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIChjb25zdF9pbnQgNykpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAoY29uc3RfaW50IDApKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAobGFiZWxfcmVmIChtYXRjaF9kdXAgMSkpCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIChwYykpKQotICAgICAgICAgICAgICAoY2xvYmJlciAocmVn OkNDIFJFR19DQykpXSldKQotCi0oZGVmaW5lX3BlZXBob2xlMgotICBbKHNldCAocmVnOkND IFJFR19DQykgKGNvbXBhcmU6Q0MgKG1hdGNoX29wZXJhbmQ6UUkgMCAicmVnaXN0ZXJfb3Bl cmFuZCIgIiIpCi0gICAgICAgICAgICAgICAgICAgICAgIChjb25zdF9pbnQgMCkpKQotICAg KHBhcmFsbGVsIFsoc2V0IChwYykgKGlmX3RoZW5fZWxzZSAobHQgKHJlZzpDQyBSRUdfQ0Mp IChjb25zdF9pbnQgMCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IChsYWJlbF9yZWYgKG1hdGNoX29wZXJhbmQgMSAiIiAiIikpCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIChwYykpKQotICAgICAgICAgICAgICAoY2xvYmJlciAo cmVnOkNDIFJFR19DQykpXSldCi0gICIiCi0gIFsocGFyYWxsZWwgWyhzZXQgKHBjKSAoaWZf dGhlbl9lbHNlIChuZSAoemVyb19leHRyYWN0OkhJIChtYXRjaF9kdXAgMCkKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNv bnN0X2ludCAxKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAoY29uc3RfaW50IDcpKQotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKGNvbnN0X2ludCAwKSkKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKGxhYmVsX3JlZiAobWF0Y2hfZHVwIDEpKQotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocGMpKSkKLSAgICAgICAgICAgICAg KGNsb2JiZXIgKHJlZzpDQyBSRUdfQ0MpKV0pXSkKLQotKGRlZmluZV9wZWVwaG9sZTIKLSAg WyhwYXJhbGxlbCBbKHNldCAocmVnOkNDIFJFR19DQykgKGNvbXBhcmU6Q0MgKG1hdGNoX29w ZXJhbmQ6SEkgMCAicmVnaXN0ZXJfb3BlcmFuZCIgIiIpCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKGNvbnN0X2ludCAwKSkpCi0gICAgICAgICAgICAgIChjbG9iYmVy IChtYXRjaF9vcGVyYW5kOkhJIDIgIiIpKV0pCi0gICAocGFyYWxsZWwgWyhzZXQgKHBjKSAo aWZfdGhlbl9lbHNlIChnZSAocmVnOkNDIFJFR19DQykgKGNvbnN0X2ludCAwKSkKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxhYmVsX3JlZiAobWF0Y2hfb3Bl cmFuZCAxICIiICIiKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KHBjKSkpCi0gICAgICAgICAgICAgIChjbG9iYmVyIChyZWc6Q0MgUkVHX0NDKSldKV0KLSAg IiIKLSAgWyhwYXJhbGxlbCBbKHNldCAocGMpIChpZl90aGVuX2Vsc2UgKGVxIChhbmQ6SEkg KG1hdGNoX2R1cCAwKSAoY29uc3RfaW50IC0zMjc2OCkpCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAoY29uc3RfaW50IDApKQotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAobGFiZWxfcmVmIChtYXRjaF9kdXAgMSkpCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwYykpKQotICAgICAgICAgICAg ICAoY2xvYmJlciAocmVnOkNDIFJFR19DQykpXSldKQogCi0oZGVmaW5lX3BlZXBob2xlMgot ICBbKHBhcmFsbGVsIFsoc2V0IChyZWc6Q0MgUkVHX0NDKSAoY29tcGFyZTpDQyAobWF0Y2hf b3BlcmFuZDpISSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiIikKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAoY29uc3RfaW50IDApKSkKLSAgICAgICAgICAgICAgKGNsb2Ji ZXIgKG1hdGNoX29wZXJhbmQ6SEkgMiAiIikpXSkKLSAgIChwYXJhbGxlbCBbKHNldCAocGMp IChpZl90aGVuX2Vsc2UgKGx0IChyZWc6Q0MgUkVHX0NDKSAoY29uc3RfaW50IDApKQotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGFiZWxfcmVmIChtYXRjaF9v cGVyYW5kIDEgIiIgIiIpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAocGMpKSkKKzs7IENvbnZlcnQgc2lnbiB0ZXN0cyB0byBiaXQgNyB0ZXN0cyB0aGF0IG1h dGNoIHRoZSBhYm92ZSBpbnNucy4KKyhkZWZpbmVfcGVlcGhvbGUyIDsgIipzYnJ4X2JyYW5j aDxtb2RlPiIKKyAgWyhzZXQgKHJlZzpDQyBSRUdfQ0MpCisgICAgICAgIChjb21wYXJlOkND IChtYXRjaF9vcGVyYW5kOkFMTHMxIDAgInJlZ2lzdGVyX29wZXJhbmQiKQorICAgICAgICAg ICAgICAgICAgICAobWF0Y2hfb3BlcmFuZDpBTExzMSAxICJjb25zdDBfb3BlcmFuZCIpKSkK KyAgIChzZXQgKHBjKQorICAgICAgICAoaWZfdGhlbl9lbHNlIChnZWx0IChyZWc6Q0MgUkVH X0NDKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdF9pbnQgMCkpCisgICAg ICAgICAgICAgICAgICAgICAgKGxhYmVsX3JlZiAobWF0Y2hfb3BlcmFuZCAyKSkKKyAgICAg ICAgICAgICAgICAgICAgICAocGMpKSldCisgICJwZWVwMl9yZWdub19kZWFkX3AgKDIsIFJF R19DQykiCisgIFsocGFyYWxsZWwgWyhzZXQgKHBjKQorICAgICAgICAgICAgICAgICAgIChp Zl90aGVuX2Vsc2UgKDxnZWx0X2VxbmU+ICh6ZXJvX2V4dHJhY3Q6SEkgKG1hdGNoX2R1cCAw KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKGNvbnN0X2ludCAxKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1hdGNoX2R1cCAxKSkKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3RfaW50 IDApKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxhYmVsX3JlZiAobWF0 Y2hfZHVwIDIpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBjKSkpCiAg ICAgICAgICAgICAgIChjbG9iYmVyIChyZWc6Q0MgUkVHX0NDKSldKV0KLSAgIiIKLSAgWyhw YXJhbGxlbCBbKHNldCAocGMpIChpZl90aGVuX2Vsc2UgKG5lIChhbmQ6SEkgKG1hdGNoX2R1 cCAwKSAoY29uc3RfaW50IC0zMjc2OCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAoY29uc3RfaW50IDApKQotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAobGFiZWxfcmVmIChtYXRjaF9kdXAgMSkpCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIChwYykpKQotICAgICAgICAgICAgICAoY2xvYmJl ciAocmVnOkNDIFJFR19DQykpXSldKQorICB7CisgICAgb3BlcmFuZHNbMF0gPSBhdnJfdG9f aW50X21vZGUgKG9wZXJhbmRzWzBdKTsKKyAgICBvcGVyYW5kc1sxXSA9IEdFTl9JTlQgKEdF VF9NT0RFX0JJVFNJWkUgKDxNT0RFPm1vZGUpIC0gMSk7CisgIH0pCiAKLShkZWZpbmVfcGVl cGhvbGUyCi0gIFsocGFyYWxsZWwgWyhzZXQgKHJlZzpDQyBSRUdfQ0MpIChjb21wYXJlOkND IChtYXRjaF9vcGVyYW5kOlNJIDAgInJlZ2lzdGVyX29wZXJhbmQiICIiKQotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdF9pbnQgMCkpKQotICAgICAgICAgICAg ICAoY2xvYmJlciAobWF0Y2hfb3BlcmFuZDpTSSAyICIiKSldKQotICAgKHBhcmFsbGVsIFso c2V0IChwYykgKGlmX3RoZW5fZWxzZSAoZ2UgKHJlZzpDQyBSRUdfQ0MpIChjb25zdF9pbnQg MCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsYWJlbF9yZWYg KG1hdGNoX29wZXJhbmQgMSAiIiAiIikpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIChwYykpKQotICAgICAgICAgICAgICAoY2xvYmJlciAocmVnOkNDIFJFR19D QykpXSldCi0gICIiCi0gIFsocGFyYWxsZWwgWyhzZXQgKHBjKSAoaWZfdGhlbl9lbHNlIChl cSAoYW5kOlNJIChtYXRjaF9kdXAgMCkgKG1hdGNoX2R1cCAyKSkKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdF9pbnQgMCkpCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsYWJlbF9yZWYgKG1hdGNoX2R1cCAxKSkK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBjKSkpCis7OyBDb252 ZXJ0IHNpZ24gdGVzdHMgdG8gYml0IDE1LzIzLzMxIHRlc3RzIHRoYXQgbWF0Y2ggdGhlIGFi b3ZlIGluc25zLgorKGRlZmluZV9wZWVwaG9sZTIgOyAiKnNicnhfYnJhbmNoPG1vZGU+Igor ICBbKHBhcmFsbGVsIFsoc2V0IChyZWc6Q0MgUkVHX0NDKQorICAgICAgICAgICAgICAgICAg IChjb21wYXJlOkNDIChtYXRjaF9vcGVyYW5kOkFMTHMyMzQgMCAicmVnaXN0ZXJfb3BlcmFu ZCIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1hdGNoX29wZXJhbmQ6QUxM czIzNCAxICJjb25zdDBfb3BlcmFuZCIpKSkKKyAgICAgICAgICAgICAgKGNsb2JiZXIgKG1h dGNoX29wZXJhbmQ6UUkgMyAic2NyYXRjaF9vcGVyYW5kIikpXSkKKyAgIChzZXQgKHBjKQor ICAgICAgICAoaWZfdGhlbl9lbHNlIChnZWx0IChyZWc6Q0MgUkVHX0NDKQorICAgICAgICAg ICAgICAgICAgICAgICAgICAgIChjb25zdF9pbnQgMCkpCisgICAgICAgICAgICAgICAgICAg ICAgKGxhYmVsX3JlZiAobWF0Y2hfb3BlcmFuZCAyKSkKKyAgICAgICAgICAgICAgICAgICAg ICAocGMpKSldCisgICJwZWVwMl9yZWdub19kZWFkX3AgKDIsIFJFR19DQykiCisgIFsocGFy YWxsZWwgWyhzZXQgKHBjKQorICAgICAgICAgICAgICAgICAgIChpZl90aGVuX2Vsc2UgKDxn ZWx0X2VxbmU+ICh6ZXJvX2V4dHJhY3Q6SEkgKG1hdGNoX2R1cCAwKQorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNv bnN0X2ludCAxKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKG1hdGNoX2R1cCAxKSkKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3RfaW50IDApKQorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKGxhYmVsX3JlZiAobWF0Y2hfZHVwIDIpKQorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBjKSkpCiAgICAgICAgICAgICAgIChj bG9iYmVyIChyZWc6Q0MgUkVHX0NDKSldKV0KLSAgIm9wZXJhbmRzWzJdID0gZ2VuX2ludF9t b2RlICgtMjE0NzQ4MzY0NyAtIDEsIFNJbW9kZSk7IikKKyAgeworICAgIG9wZXJhbmRzWzBd ID0gYXZyX3RvX2ludF9tb2RlIChvcGVyYW5kc1swXSk7CisgICAgb3BlcmFuZHNbMV0gPSBH RU5fSU5UIChHRVRfTU9ERV9CSVRTSVpFICg8TU9ERT5tb2RlKSAtIDEpOworICB9KQogCi0o ZGVmaW5lX3BlZXBob2xlMgotICBbKHBhcmFsbGVsIFsoc2V0IChyZWc6Q0MgUkVHX0NDKSAo Y29tcGFyZTpDQyAobWF0Y2hfb3BlcmFuZDpTSSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiIikK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3RfaW50IDApKSkKLSAg ICAgICAgICAgICAgKGNsb2JiZXIgKG1hdGNoX29wZXJhbmQ6U0kgMiAiIikpXSkKLSAgIChw YXJhbGxlbCBbKHNldCAocGMpIChpZl90aGVuX2Vsc2UgKGx0IChyZWc6Q0MgUkVHX0NDKSAo Y29uc3RfaW50IDApKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo bGFiZWxfcmVmIChtYXRjaF9vcGVyYW5kIDEgIiIgIiIpKQotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAocGMpKSkKLSAgICAgICAgICAgICAgKGNsb2JiZXIgKHJl ZzpDQyBSRUdfQ0MpKV0pXQotICAiIgotICBbKHBhcmFsbGVsIFsoc2V0IChwYykgKGlmX3Ro ZW5fZWxzZSAobmUgKGFuZDpTSSAobWF0Y2hfZHVwIDApIChtYXRjaF9kdXAgMikpCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3RfaW50IDApKQot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGFiZWxfcmVmIChtYXRj aF9kdXAgMSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwYykp KQotICAgICAgICAgICAgICAoY2xvYmJlciAocmVnOkNDIFJFR19DQykpXSldCi0gICJvcGVy YW5kc1syXSA9IGdlbl9pbnRfbW9kZSAoLTIxNDc0ODM2NDcgLSAxLCBTSW1vZGUpOyIpCiAK IDs7ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKgogOzsgSW1wbGVtZW50YXRpb24gb2YgY29uZGl0aW9u YWwganVtcHMgaGVyZS4KIDs7ICBDb21wYXJlIHdpdGggMCAodGVzdCkganVtcHMKIDs7ICoq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKgogCi0oZGVmaW5lX2luc25fYW5kX3NwbGl0ICJicmFuY2giCiso ZGVmaW5lX2luc24gImJyYW5jaCIKICAgWyhzZXQgKHBjKQogICAgICAgICAoaWZfdGhlbl9l bHNlIChtYXRjaF9vcGVyYXRvciAxICJzaW1wbGVfY29tcGFyaXNvbl9vcGVyYXRvciIKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhyZWc6Q0MgUkVHX0NDKQot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0X2ludCAwKV0p Ci0gICAgICAgICAgICAgICAgICAgICAgKGxhYmVsX3JlZiAobWF0Y2hfb3BlcmFuZCAwICIi ICIiKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIFsocmVnOkNDIFJFR19DQykKKyAgICAg ICAgICAgICAgICAgICAgICAgICAoY29uc3RfaW50IDApXSkKKyAgICAgICAgICAgICAgICAg ICAgICAobGFiZWxfcmVmIChtYXRjaF9vcGVyYW5kIDApKQogICAgICAgICAgICAgICAgICAg ICAgIChwYykpKV0KICAgInJlbG9hZF9jb21wbGV0ZWQiCi0gICIjIgotICAiJiYgcmVsb2Fk X2NvbXBsZXRlZCIKLSAgWyhwYXJhbGxlbCBbKHNldCAocGMpCi0gICAgICAgICAgICAgICAg ICAgKGlmX3RoZW5fZWxzZSAobWF0Y2hfb3BfZHVwIDEKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhyZWc6Q0MgUkVHX0NDKQotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0X2ludCAwKV0p Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGFiZWxfcmVmIChtYXRjaF9k dXAgMCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocGMpKSkKLSAgICAg ICAgICAgICAgKGNsb2JiZXIgKHJlZzpDQyBSRUdfQ0MpKV0pXSkKLQotKGRlZmluZV9pbnNu ICIqYnJhbmNoIgotICBbKHNldCAocGMpCi0gICAgICAgIChpZl90aGVuX2Vsc2UgKG1hdGNo X29wZXJhdG9yIDEgInNpbXBsZV9jb21wYXJpc29uX29wZXJhdG9yIgotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBbKHJlZzpDQyBSRUdfQ0MpCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3RfaW50IDApXSkKLSAgICAgICAg ICAgICAgICAgICAgICAobGFiZWxfcmVmIChtYXRjaF9vcGVyYW5kIDAgIiIgIiIpKQotICAg ICAgICAgICAgICAgICAgICAgIChwYykpKQotICAgKGNsb2JiZXIgKHJlZzpDQyBSRUdfQ0Mp KV0KLSAgInJlbG9hZF9jb21wbGV0ZWQiCiAgIHsKICAgICByZXR1cm4gcmV0X2NvbmRfYnJh bmNoIChvcGVyYW5kc1sxXSwgYXZyX2p1bXBfbW9kZSAob3BlcmFuZHNbMF0sIGluc24pLCAw KTsKICAgfQogICBbKHNldF9hdHRyICJ0eXBlIiAiYnJhbmNoIildKQogCiAKLTs7IFNhbWUg YXMgYWJvdmUgYnV0IHdyYXAgU0VUX1NSQyBzbyB0aGF0IHRoaXMgYnJhbmNoIHdvbid0IGJl IHRyYW5zZm9ybWVkCi07OyBvciBvcHRpbWl6ZWQgaW4gdGhlIHJlbWFpbmRlci4KLQotKGRl ZmluZV9pbnNuICJicmFuY2hfdW5zcGVjIgotICBbKHNldCAocGMpCi0gICAgICAgICh1bnNw ZWMgWyhpZl90aGVuX2Vsc2UgKG1hdGNoX29wZXJhdG9yIDEgInNpbXBsZV9jb21wYXJpc29u X29wZXJhdG9yIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBbKHJlZzpDQyBSRUdfQ0MpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAoY29uc3RfaW50IDApXSkKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAobGFiZWxfcmVmIChtYXRjaF9vcGVyYW5kIDAgIiIgIiIpKQotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIChwYykpCi0gICAgICAgICAgICAgICAgIF0gVU5T UEVDX0lERU5USVRZKSkKLSAgIChjbG9iYmVyIChyZWc6Q0MgUkVHX0NDKSldCi0gICJyZWxv YWRfY29tcGxldGVkIgotICB7Ci0gICAgcmV0dXJuIHJldF9jb25kX2JyYW5jaCAob3BlcmFu ZHNbMV0sIGF2cl9qdW1wX21vZGUgKG9wZXJhbmRzWzBdLCBpbnNuKSwgMCk7Ci0gIH0KLSAg WyhzZXRfYXR0ciAidHlwZSIgImJyYW5jaCIpXSkKLQotOzsgKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotOzsgQVZS IGRvZXMgbm90IGhhdmUgZm9sbG93aW5nIGNvbmRpdGlvbmFsIGp1bXBzOiBMRSxMRVUsR1Qs R1RVLgotOzsgQ29udmVydCB0aGVtIGFsbCB0byBwcm9wZXIganVtcHMuCi07OyAqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqLwotCi0oZGVmaW5lX2luc25fYW5kX3NwbGl0ICJkaWZmaWN1bHRfYnJhbmNoIgorKGRl ZmluZV9pbnNuICJkaWZmaWN1bHRfYnJhbmNoIgogICBbKHNldCAocGMpCiAgICAgICAgIChp Zl90aGVuX2Vsc2UgKG1hdGNoX29wZXJhdG9yIDEgImRpZmZpY3VsdF9jb21wYXJpc29uX29w ZXJhdG9yIgogICAgICAgICAgICAgICAgICAgICAgICAgWyhyZWc6Q0MgUkVHX0NDKQpAQCAt NzA0MSw5NSArNzAxMCwxMSBAQCAoZGVmaW5lX2luc25fYW5kX3NwbGl0ICJkaWZmaWN1bHRf YnJhbmNoIgogICAgICAgICAgICAgICAgICAgICAgIChsYWJlbF9yZWYgKG1hdGNoX29wZXJh bmQgMCAiIiAiIikpCiAgICAgICAgICAgICAgICAgICAgICAgKHBjKSkpXQogICAicmVsb2Fk X2NvbXBsZXRlZCIKLSAgIiMiCi0gICImJiByZWxvYWRfY29tcGxldGVkIgotICBbKHBhcmFs bGVsIFsoc2V0IChwYykKLSAgICAgICAgICAgICAgICAgICAoaWZfdGhlbl9lbHNlIChtYXRj aF9vcF9kdXAgMQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKHJlZzpD QyBSRUdfQ0MpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3Rf aW50IDApXSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsYWJlbF9yZWYg KG1hdGNoX2R1cCAwKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwYykp KQotICAgICAgICAgICAgICAoY2xvYmJlciAocmVnOkNDIFJFR19DQykpXSldKQotCi0oZGVm aW5lX2luc24gIipkaWZmaWN1bHRfYnJhbmNoIgotICBbKHNldCAocGMpCi0gICAgICAgIChp Zl90aGVuX2Vsc2UgKG1hdGNoX29wZXJhdG9yIDEgImRpZmZpY3VsdF9jb21wYXJpc29uX29w ZXJhdG9yIgotICAgICAgICAgICAgICAgICAgICAgICAgWyhyZWc6Q0MgUkVHX0NDKQotICAg ICAgICAgICAgICAgICAgICAgICAgIChjb25zdF9pbnQgMCldKQotICAgICAgICAgICAgICAg ICAgICAgIChsYWJlbF9yZWYgKG1hdGNoX29wZXJhbmQgMCAiIiAiIikpCi0gICAgICAgICAg ICAgICAgICAgICAgKHBjKSkpCi0gICAoY2xvYmJlciAocmVnOkNDIFJFR19DQykpXQotICAi cmVsb2FkX2NvbXBsZXRlZCIKICAgewogICAgIHJldHVybiByZXRfY29uZF9icmFuY2ggKG9w ZXJhbmRzWzFdLCBhdnJfanVtcF9tb2RlIChvcGVyYW5kc1swXSwgaW5zbiksIDApOwogICB9 CiAgIFsoc2V0X2F0dHIgInR5cGUiICJicmFuY2gxIildKQogCi07OyByZXZlcnMgYnJhbmNo Ci0KLShkZWZpbmVfaW5zbl9hbmRfc3BsaXQgInJ2YnJhbmNoIgotICBbKHNldCAocGMpCi0g ICAgICAgIChpZl90aGVuX2Vsc2UgKG1hdGNoX29wZXJhdG9yIDEgInNpbXBsZV9jb21wYXJp c29uX29wZXJhdG9yIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBb KHJlZzpDQyBSRUdfQ0MpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAoY29uc3RfaW50IDApXSkKLSAgICAgICAgICAgICAgICAgICAgICAocGMpCi0gICAgICAg ICAgICAgICAgICAgICAgKGxhYmVsX3JlZiAobWF0Y2hfb3BlcmFuZCAwICIiICIiKSkpKV0K LSAgInJlbG9hZF9jb21wbGV0ZWQiCi0gICIjIgotICAiJiYgcmVsb2FkX2NvbXBsZXRlZCIK LSAgWyhwYXJhbGxlbCBbKHNldCAocGMpCi0gICAgICAgICAgICAgICAgICAgKGlmX3RoZW5f ZWxzZSAobWF0Y2hfb3BfZHVwIDEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgWyhyZWc6Q0MgUkVHX0NDKQotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0X2ludCAwKV0pCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAocGMpCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAobGFiZWxfcmVmIChtYXRjaF9kdXAgMCkpKSkKLSAgICAgICAgICAgICAgKGNs b2JiZXIgKHJlZzpDQyBSRUdfQ0MpKV0pXSkKLQotKGRlZmluZV9pbnNuICIqcnZicmFuY2gi Ci0gIFsoc2V0IChwYykKLSAgICAgICAgKGlmX3RoZW5fZWxzZSAobWF0Y2hfb3BlcmF0b3Ig MSAic2ltcGxlX2NvbXBhcmlzb25fb3BlcmF0b3IiCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFsocmVnOkNDIFJFR19DQykKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIChjb25zdF9pbnQgMCldKQotICAgICAgICAgICAgICAgICAg ICAgIChwYykKLSAgICAgICAgICAgICAgICAgICAgICAobGFiZWxfcmVmIChtYXRjaF9vcGVy YW5kIDAgIiIgIiIpKSkpCi0gICAoY2xvYmJlciAocmVnOkNDIFJFR19DQykpXQotICAicmVs b2FkX2NvbXBsZXRlZCIKLSAgewotICAgIHJldHVybiByZXRfY29uZF9icmFuY2ggKG9wZXJh bmRzWzFdLCBhdnJfanVtcF9tb2RlIChvcGVyYW5kc1swXSwgaW5zbiksIDEpOwotICB9Ci0g IFsoc2V0X2F0dHIgInR5cGUiICJicmFuY2gxIildKQotCi0oZGVmaW5lX2luc25fYW5kX3Nw bGl0ICJkaWZmaWN1bHRfcnZicmFuY2giCi0gIFsoc2V0IChwYykKLSAgICAgICAgKGlmX3Ro ZW5fZWxzZSAobWF0Y2hfb3BlcmF0b3IgMSAiZGlmZmljdWx0X2NvbXBhcmlzb25fb3BlcmF0 b3IiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsocmVnOkNDIFJF R19DQykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdF9p bnQgMCldKQotICAgICAgICAgICAgICAgICAgICAgIChwYykKLSAgICAgICAgICAgICAgICAg ICAgICAobGFiZWxfcmVmIChtYXRjaF9vcGVyYW5kIDAgIiIgIiIpKSkpXQotICAicmVsb2Fk X2NvbXBsZXRlZCIKLSAgIiMiCi0gICImJiByZWxvYWRfY29tcGxldGVkIgotICBbKHBhcmFs bGVsIFsoc2V0IChwYykKLSAgICAgICAgICAgICAgICAgICAoaWZfdGhlbl9lbHNlIChtYXRj aF9vcF9kdXAgMQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBbKHJlZzpDQyBSRUdfQ0MpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAoY29uc3RfaW50IDApXSkKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIChwYykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChs YWJlbF9yZWYgKG1hdGNoX2R1cCAwKSkpKQotICAgICAgICAgICAgICAoY2xvYmJlciAocmVn OkNDIFJFR19DQykpXSldKQotCi0oZGVmaW5lX2luc24gIipkaWZmaWN1bHRfcnZicmFuY2gi Ci0gIFsoc2V0IChwYykKLSAgICAgICAgKGlmX3RoZW5fZWxzZSAobWF0Y2hfb3BlcmF0b3Ig MSAiZGlmZmljdWx0X2NvbXBhcmlzb25fb3BlcmF0b3IiCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFsocmVnOkNDIFJFR19DQykKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIChjb25zdF9pbnQgMCldKQotICAgICAgICAgICAgICAg ICAgICAgIChwYykKLSAgICAgICAgICAgICAgICAgICAgICAobGFiZWxfcmVmIChtYXRjaF9v cGVyYW5kIDAgIiIgIiIpKSkpCi0gICAoY2xvYmJlciAocmVnOkNDIFJFR19DQykpXQotICAi cmVsb2FkX2NvbXBsZXRlZCIKLSAgewotICAgIHJldHVybiByZXRfY29uZF9icmFuY2ggKG9w ZXJhbmRzWzFdLCBhdnJfanVtcF9tb2RlIChvcGVyYW5kc1swXSwgaW5zbiksIDEpOwotICB9 Ci0gIFsoc2V0X2F0dHIgInR5cGUiICJicmFuY2giKV0pCiAKIDs7ICoqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqCiA7OyBVbmNvbmRpdGlvbmFsIGFuZCBvdGhlciBqdW1wIGluc3RydWN0aW9ucy4K QEAgLTc2NTUsMTUgKzc1NDAsMTQgQEAgKGRlZmluZV9wZWVwaG9sZSA7ICIqZGVjLWFuZC1i cmFuY2hzaSE9LTEuZC5jbG9iYmVyIgogICAgICAgICAgICAgICAoY2xvYmJlciAocmVnOkND IFJFR19DQykpXSkKICAgIChwYXJhbGxlbCBbKHNldCAocmVnOkNDIFJFR19DQykKICAgICAg ICAgICAgICAgICAgICAoY29tcGFyZTpDQyAobWF0Y2hfZHVwIDApCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgKGNvbnN0X2ludCAtMSkpKQotICAgICAgICAgICAgICAoY2xvYmJl ciAobWF0Y2hfb3BlcmFuZDpRSSAxICJkX3JlZ2lzdGVyX29wZXJhbmQiICIiKSldKQotICAg KHBhcmFsbGVsIFsoc2V0IChwYykKLSAgICAgICAgICAgICAgICAgICAoaWZfdGhlbl9lbHNl IChlcW5lIChyZWc6Q0MgUkVHX0NDKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKGNvbnN0X2ludCAwKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIChsYWJlbF9yZWYgKG1hdGNoX29wZXJhbmQgMiAiIiAiIikpCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAocGMpKSkKLSAgICAgICAgICAgICAgKGNsb2JiZXIgKHJl ZzpDQyBSRUdfQ0MpKV0pXQotICAiIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IChjb25zdF9pbnQgLTEpKSkKKyAgICAgICAgICAgICAgKGNsb2JiZXIgKG1hdGNoX29wZXJh bmQ6UUkgMSAic2NyYXRjaF9vcl9kX3JlZ2lzdGVyX29wZXJhbmQiKSldKQorICAgKHNldCAo cGMpCisgICAgICAgIChpZl90aGVuX2Vsc2UgKGVxbmUgKHJlZzpDQyBSRUdfQ0MpCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0X2ludCAwKSkKKyAgICAgICAgICAgICAg ICAgICAgICAobGFiZWxfcmVmIChtYXRjaF9vcGVyYW5kIDIpKQorICAgICAgICAgICAgICAg ICAgICAgIChwYykpKV0KKyAgImRlYWRfb3Jfc2V0X3JlZ25vX3AgKGluc24sIFJFR19DQyki CiAgIHsKICAgICBjb25zdCBjaGFyICpvcDsKICAgICBpbnQganVtcF9tb2RlOwpAQCAtNzY5 OSwxNSArNzU4MywxNCBAQCAoZGVmaW5lX3BlZXBob2xlIDsgIipkZWMtYW5kLWJyYW5jaGhp IT0tMSIKICAgICAgICAgICAgICAgKGNsb2JiZXIgKHJlZzpDQyBSRUdfQ0MpKV0pCiAgICAo cGFyYWxsZWwgWyhzZXQgKHJlZzpDQyBSRUdfQ0MpCiAgICAgICAgICAgICAgICAgICAgKGNv bXBhcmU6Q0MgKG1hdGNoX2R1cCAwKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIChj b25zdF9pbnQgLTEpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3Rf aW50IC0xKSkpCiAgICAgICAgICAgICAgIChjbG9iYmVyIChtYXRjaF9vcGVyYW5kOlFJIDEg ImRfcmVnaXN0ZXJfb3BlcmFuZCIgIiIpKV0pCi0gICAocGFyYWxsZWwgWyhzZXQgKHBjKQot ICAgICAgICAgICAgICAgICAgIChpZl90aGVuX2Vsc2UgKGVxbmUgKHJlZzpDQyBSRUdfQ0Mp Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3RfaW50IDAp KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxhYmVsX3JlZiAobWF0Y2hf b3BlcmFuZCAyICIiICIiKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChw YykpKQotICAgICAgICAgICAgICAoY2xvYmJlciAocmVnOkNDIFJFR19DQykpXSldCi0gICIi CisgICAoc2V0IChwYykKKyAgICAgICAgKGlmX3RoZW5fZWxzZSAoZXFuZSAocmVnOkNDIFJF R19DQykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3RfaW50IDApKQorICAg ICAgICAgICAgICAgICAgICAgIChsYWJlbF9yZWYgKG1hdGNoX29wZXJhbmQgMikpCisgICAg ICAgICAgICAgICAgICAgICAgKHBjKSkpXQorICAiZGVhZF9vcl9zZXRfcmVnbm9fcCAoaW5z biwgUkVHX0NDKSIKICAgewogICAgIGNvbnN0IGNoYXIgKm9wOwogICAgIGludCBqdW1wX21v ZGU7CkBAIC03NzQxLDE1ICs3NjI0LDE0IEBAIChkZWZpbmVfcGVlcGhvbGUgOyAiKmRlYy1h bmQtYnJhbmNoaGkhPS0xLmQuY2xvYmJlciIKICAgICAgICAgICAgICAgKGNsb2JiZXIgKHJl ZzpDQyBSRUdfQ0MpKV0pCiAgICAocGFyYWxsZWwgWyhzZXQgKHJlZzpDQyBSRUdfQ0MpCiAg ICAgICAgICAgICAgICAgICAgKGNvbXBhcmU6Q0MgKG1hdGNoX2R1cCAwKQotICAgICAgICAg ICAgICAgICAgICAgICAgICAgIChjb25zdF9pbnQgLTEpKSkKLSAgICAgICAgICAgICAgKGNs b2JiZXIgKG1hdGNoX29wZXJhbmQ6UUkgMSAiZF9yZWdpc3Rlcl9vcGVyYW5kIiAiIikpXSkK LSAgIChwYXJhbGxlbCBbKHNldCAocGMpCi0gICAgICAgICAgICAgICAgICAgKGlmX3RoZW5f ZWxzZSAoZXFuZSAocmVnOkNDIFJFR19DQykKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIChjb25zdF9pbnQgMCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAobGFiZWxfcmVmIChtYXRjaF9vcGVyYW5kIDIgIiIgIiIpKQotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKHBjKSkpCi0gICAgICAgICAgICAgIChjbG9iYmVy IChyZWc6Q0MgUkVHX0NDKSldKV0KLSAgIiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAoY29uc3RfaW50IC0xKSkpCisgICAgICAgICAgICAgIChjbG9iYmVyIChtYXRjaF9v cGVyYW5kOlFJIDEgInNjcmF0Y2hfb3JfZF9yZWdpc3Rlcl9vcGVyYW5kIikpXSkKKyAgIChz ZXQgKHBjKQorICAgICAgICAoaWZfdGhlbl9lbHNlIChlcW5lIChyZWc6Q0MgUkVHX0NDKQor ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdF9pbnQgMCkpCisgICAgICAgICAg ICAgICAgICAgICAgKGxhYmVsX3JlZiAobWF0Y2hfb3BlcmFuZCAyKSkKKyAgICAgICAgICAg ICAgICAgICAgICAocGMpKSldCisgICJkZWFkX29yX3NldF9yZWdub19wIChpbnNuLCBSRUdf Q0MpIgogICB7CiAgICAgY29uc3QgY2hhciAqb3A7CiAgICAgaW50IGp1bXBfbW9kZTsKQEAg LTc3ODMsMTUgKzc2NjUsMTQgQEAgKGRlZmluZV9wZWVwaG9sZSA7ICIqZGVjLWFuZC1icmFu Y2hoaSE9LTEubC5jbG9iYmVyIgogICAgICAgICAgICAgICAoY2xvYmJlciAocmVnOkNDIFJF R19DQykpXSkKICAgIChwYXJhbGxlbCBbKHNldCAocmVnOkNDIFJFR19DQykKICAgICAgICAg ICAgICAgICAgICAoY29tcGFyZTpDQyAobWF0Y2hfZHVwIDApCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgKGNvbnN0X2ludCAtMSkpKQorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIChjb25zdF9pbnQgLTEpKSkKICAgICAgICAgICAgICAgKGNsb2JiZXIgKG1hdGNo X29wZXJhbmQ6UUkgMSAiZF9yZWdpc3Rlcl9vcGVyYW5kIiAiIikpXSkKLSAgIChwYXJhbGxl bCBbKHNldCAocGMpCi0gICAgICAgICAgICAgICAgICAgKGlmX3RoZW5fZWxzZSAoZXFuZSAo cmVnOkNDIFJFR19DQykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IChjb25zdF9pbnQgMCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGFi ZWxfcmVmIChtYXRjaF9vcGVyYW5kIDIgIiIgIiIpKQotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKHBjKSkpCi0gICAgICAgICAgICAgIChjbG9iYmVyIChyZWc6Q0MgUkVH X0NDKSldKV0KLSAgIiIKKyAgIChzZXQgKHBjKQorICAgICAgICAoaWZfdGhlbl9lbHNlIChl cW5lIChyZWc6Q0MgUkVHX0NDKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25z dF9pbnQgMCkpCisgICAgICAgICAgICAgICAgICAgICAgKGxhYmVsX3JlZiAobWF0Y2hfb3Bl cmFuZCAyKSkKKyAgICAgICAgICAgICAgICAgICAgICAocGMpKSldCisgICJkZWFkX29yX3Nl dF9yZWdub19wIChpbnNuLCBSRUdfQ0MpIgogICB7CiAgICAgY29uc3QgY2hhciAqb3A7CiAg ICAgaW50IGp1bXBfbW9kZTsKQEAgLTc4MjEsMTQgKzc3MDIsMTMgQEAgKGRlZmluZV9wZWVw aG9sZSA7ICIqZGVjLWFuZC1icmFuY2hxaSE9LTEiCiAgICAgICAgICAgICAgIChjbG9iYmVy IChyZWc6Q0MgUkVHX0NDKSldKQogICAgKHNldCAocmVnOkNDIFJFR19DQykKICAgICAgICAg KGNvbXBhcmU6Q0MgKG1hdGNoX2R1cCAwKQotICAgICAgICAgICAgICAgICAoY29uc3RfaW50 IC0xKSkpCi0gICAocGFyYWxsZWwgWyhzZXQgKHBjKQotICAgICAgICAgICAgICAgICAgIChp Zl90aGVuX2Vsc2UgKGVxbmUgKHJlZzpDQyBSRUdfQ0MpCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAoY29uc3RfaW50IDApKQotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKGxhYmVsX3JlZiAobWF0Y2hfb3BlcmFuZCAxICIiICIiKSkKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwYykpKQotICAgICAgICAgICAgICAo Y2xvYmJlciAocmVnOkNDIFJFR19DQykpXSldCi0gICIiCisgICAgICAgICAgICAgICAgICAg IChjb25zdF9pbnQgLTEpKSkKKyAgIChzZXQgKHBjKQorICAgICAgICAoaWZfdGhlbl9lbHNl IChlcW5lIChyZWc6Q0MgUkVHX0NDKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChj b25zdF9pbnQgMCkpCisgICAgICAgICAgICAgICAgICAgICAgKGxhYmVsX3JlZiAobWF0Y2hf b3BlcmFuZCAxKSkKKyAgICAgICAgICAgICAgICAgICAgICAocGMpKSldCisgICJkZWFkX29y X3NldF9yZWdub19wIChpbnNuLCBSRUdfQ0MpIgogICB7CiAgICAgY29uc3QgY2hhciAqb3A7 CiAgICAgaW50IGp1bXBfbW9kZTsKQEAgLTc4NTQsMTQgKzc3MzQsMTQgQEAgKGRlZmluZV9w ZWVwaG9sZSA7ICIqZGVjLWFuZC1icmFuY2hxaSE9LTEiCiAoZGVmaW5lX3BlZXBob2xlIDsg IipjcHNlLmVxIgogICBbKHNldCAocmVnOkNDIFJFR19DQykKICAgICAgICAgKGNvbXBhcmU6 Q0MgKG1hdGNoX29wZXJhbmQ6QUxMMSAxICJyZWdpc3Rlcl9vcGVyYW5kIiAicixyIikKLSAg ICAgICAgICAgICAgICAgKG1hdGNoX29wZXJhbmQ6QUxMMSAyICJyZWdfb3JfMF9vcGVyYW5k IiAicixZMDAiKSkpCi0gICAocGFyYWxsZWwgWyhzZXQgKHBjKQotICAgICAgICAgICAgICAg ICAgIChpZl90aGVuX2Vsc2UgKGVxIChyZWc6Q0MgUkVHX0NDKQotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIChjb25zdF9pbnQgMCkpCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAobGFiZWxfcmVmIChtYXRjaF9vcGVyYW5kIDAgIiIgIiIpKQot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBjKSkpCi0gICAgICAgICAgICAg IChjbG9iYmVyIChyZWc6Q0MgUkVHX0NDKSldKV0KLSAgImp1bXBfb3Zlcl9vbmVfaW5zbl9w IChpbnNuLCBvcGVyYW5kc1swXSkiCisgICAgICAgICAgICAgICAgICAgIChtYXRjaF9vcGVy YW5kOkFMTDEgMiAicmVnX29yXzBfb3BlcmFuZCIgInIsWTAwIikpKQorICAgKHNldCAocGMp CisgICAgICAgIChpZl90aGVuX2Vsc2UgKGVxIChyZWc6Q0MgUkVHX0NDKQorICAgICAgICAg ICAgICAgICAgICAgICAgICAoY29uc3RfaW50IDApKQorICAgICAgICAgICAgICAgICAgICAg IChsYWJlbF9yZWYgKG1hdGNoX29wZXJhbmQgMCkpCisgICAgICAgICAgICAgICAgICAgICAg KHBjKSkpXQorICAianVtcF9vdmVyX29uZV9pbnNuX3AgKGluc24sIG9wZXJhbmRzWzBdKQor ICAgJiYgZGVhZF9vcl9zZXRfcmVnbm9fcCAoaW5zbiwgUkVHX0NDKSIKICAgIkAKIAljcHNl ICUxLCUyCiAJY3BzZSAlMSxfX3plcm9fcmVnX18iKQpAQCAtNzg4OSwxNiArNzc2OSwxNiBA QCAoZGVmaW5lX3BlZXBob2xlIDsgIipjcHNlLmVxIgogCiAoZGVmaW5lX3BlZXBob2xlIDsg IipjcHNlLm5lIgogICBbKHNldCAocmVnOkNDIFJFR19DQykKLSAgICAgICAgKGNvbXBhcmU6 Q0MgKG1hdGNoX29wZXJhbmQ6QUxMMSAxICJyZWdpc3Rlcl9vcGVyYW5kIiAiIikKLSAgICAg ICAgICAgICAgICAgKG1hdGNoX29wZXJhbmQ6QUxMMSAyICJyZWdfb3JfMF9vcGVyYW5kIiAi IikpKQotICAgKHBhcmFsbGVsIFsoc2V0IChwYykKLSAgICAgICAgICAgICAgICAgICAoaWZf dGhlbl9lbHNlIChuZSAocmVnOkNDIFJFR19DQykKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAoY29uc3RfaW50IDApKQotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKGxhYmVsX3JlZiAobWF0Y2hfb3BlcmFuZCAwICIiICIiKSkKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIChwYykpKQotICAgICAgICAgICAgICAoY2xvYmJl ciAocmVnOkNDIFJFR19DQykpXSldCi0gICIhQVZSX0hBVkVfSk1QX0NBTEwKLSAgIHx8ICFU QVJHRVRfU0tJUF9CVUciCisgICAgICAgIChjb21wYXJlOkNDIChtYXRjaF9vcGVyYW5kOkFM TDEgMSAicmVnaXN0ZXJfb3BlcmFuZCIpCisgICAgICAgICAgICAgICAgICAgIChtYXRjaF9v cGVyYW5kOkFMTDEgMiAicmVnX29yXzBfb3BlcmFuZCIpKSkKKyAgIChzZXQgKHBjKQorICAg ICAgICAoaWZfdGhlbl9lbHNlIChuZSAocmVnOkNDIFJFR19DQykKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgKGNvbnN0X2ludCAwKSkKKyAgICAgICAgICAgICAgICAgICAgICAobGFi ZWxfcmVmIChtYXRjaF9vcGVyYW5kIDApKQorICAgICAgICAgICAgICAgICAgICAgIChwYykp KV0KKyAgIighQVZSX0hBVkVfSk1QX0NBTEwKKyAgICB8fCAhVEFSR0VUX1NLSVBfQlVHKQor ICAgJiYgZGVhZF9vcl9zZXRfcmVnbm9fcCAoaW5zbiwgUkVHX0NDKSIKICAgewogICAgIGlm IChvcGVyYW5kc1syXSA9PSBDT05TVDBfUlRYICg8TU9ERT5tb2RlKSkKICAgICAgIG9wZXJh bmRzWzJdID0gemVyb19yZWdfcnR4OwpAQCAtODA5Myw3ICs3OTczLDcgQEAgKGRlZmluZV9p bnNuX2FuZF9zcGxpdCAiZGVsYXlfY3ljbGVzXzEiCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIChjb25zdF9pbnQgMSldCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgVU5TUEVDVl9ERUxBWV9DWUNMRVMpCiAgICAgICAgICAgICAgIChzZXQgKG1hdGNoX2R1 cCAxKQotICAgICAgICAgICAgICAgKHVuc3BlY192b2xhdGlsZTpCTEsgWyhtYXRjaF9kdXAg MSldIFVOU1BFQ1ZfTUVNT1JZX0JBUlJJRVIpKQorICAgICAgICAgICAgICAgICAgICh1bnNw ZWNfdm9sYXRpbGU6QkxLIFsobWF0Y2hfZHVwIDEpXSBVTlNQRUNWX01FTU9SWV9CQVJSSUVS KSkKICAgICAgICAgICAgICAgKGNsb2JiZXIgKG1hdGNoX2R1cCAyKSkKICAgICAgICAgICAg ICAgKGNsb2JiZXIgKHJlZzpDQyBSRUdfQ0MpKV0pXSkKIApAQCAtODEyNSw3ICs4MDA1LDcg QEAgKGRlZmluZV9pbnNuX2FuZF9zcGxpdCAiZGVsYXlfY3ljbGVzXzIiCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIChjb25zdF9pbnQgMildCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgVU5TUEVDVl9ERUxBWV9DWUNMRVMpCiAgICAgICAgICAgICAgIChz ZXQgKG1hdGNoX2R1cCAxKQotICAgICAgICAgICAgICAgKHVuc3BlY192b2xhdGlsZTpCTEsg WyhtYXRjaF9kdXAgMSldIFVOU1BFQ1ZfTUVNT1JZX0JBUlJJRVIpKQorICAgICAgICAgICAg ICAgICAgICh1bnNwZWNfdm9sYXRpbGU6QkxLIFsobWF0Y2hfZHVwIDEpXSBVTlNQRUNWX01F TU9SWV9CQVJSSUVSKSkKICAgICAgICAgICAgICAgKGNsb2JiZXIgKG1hdGNoX2R1cCAyKSkK ICAgICAgICAgICAgICAgKGNsb2JiZXIgKHJlZzpDQyBSRUdfQ0MpKV0pXQogICAiIgpAQCAt ODE2Miw3ICs4MDQyLDcgQEAgKGRlZmluZV9pbnNuX2FuZF9zcGxpdCAiZGVsYXlfY3ljbGVz XzMiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdF9pbnQgMyldCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVU5TUEVDVl9ERUxBWV9DWUNMRVMpCiAg ICAgICAgICAgICAgIChzZXQgKG1hdGNoX2R1cCAxKQotICAgICAgICAgICAgICAgKHVuc3Bl Y192b2xhdGlsZTpCTEsgWyhtYXRjaF9kdXAgMSldIFVOU1BFQ1ZfTUVNT1JZX0JBUlJJRVIp KQorICAgICAgICAgICAgICAgICAgICh1bnNwZWNfdm9sYXRpbGU6QkxLIFsobWF0Y2hfZHVw IDEpXSBVTlNQRUNWX01FTU9SWV9CQVJSSUVSKSkKICAgICAgICAgICAgICAgKGNsb2JiZXIg KG1hdGNoX2R1cCAyKSkKICAgICAgICAgICAgICAgKGNsb2JiZXIgKG1hdGNoX2R1cCAzKSkK ICAgICAgICAgICAgICAgKGNsb2JiZXIgKG1hdGNoX2R1cCA0KSkKQEAgLTgyMDUsNyArODA4 NSw3IEBAIChkZWZpbmVfaW5zbl9hbmRfc3BsaXQgImRlbGF5X2N5Y2xlc180IgogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3RfaW50IDQpXQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFVOU1BFQ1ZfREVMQVlfQ1lDTEVTKQogICAgICAgICAgICAg ICAoc2V0IChtYXRjaF9kdXAgMSkKLSAgICAgICAgICAgICAgICh1bnNwZWNfdm9sYXRpbGU6 QkxLIFsobWF0Y2hfZHVwIDEpXSBVTlNQRUNWX01FTU9SWV9CQVJSSUVSKSkKKyAgICAgICAg ICAgICAgICAgICAodW5zcGVjX3ZvbGF0aWxlOkJMSyBbKG1hdGNoX2R1cCAxKV0gVU5TUEVD Vl9NRU1PUllfQkFSUklFUikpCiAgICAgICAgICAgICAgIChjbG9iYmVyIChtYXRjaF9kdXAg MikpCiAgICAgICAgICAgICAgIChjbG9iYmVyIChtYXRjaF9kdXAgMykpCiAgICAgICAgICAg ICAgIChjbG9iYmVyIChtYXRjaF9kdXAgNCkpCkBAIC05NDg4LDYgKzkzNjgsMjU4IEBAIChk ZWZpbmVfcGVlcGhvbGUyCiAgICAgICAgICAgICAgIChjbG9iYmVyIChyZWc6Q0MgUkVHX0ND KSldKV0pCiAKIAorOzsgVHJ5IG9wdGltaXplIGRlY3JlbWVudC1hbmQtYnJhbmNoLiAgV2hl biB3ZSBoYXZlIGFuIGFkZGl0aW9uIGZvbGxvd2VkCis7OyBieSBhIGNvbXBhcmlzb24gb2Yg dGhlIHJlc3VsdCBhZ2FpbnN0IHplcm8sIHdlIGNhbiBvdXRwdXQgdGhlIGFkZGl0aW9uCis7 OyBpbiBzdWNoIGEgd2F5IHRoYXQgU1JFRy5OIGFuZCBTUkVHLlogYXJlIHNldCBhY2NvcmRp bmcgdG8gdGhlIHJlc3VsdC4KKworOzsgeyAtMSwgKzEgfSBmb3IgUUltb2RlLCBvdGhlcndp c2UgdGhlIGVtcHR5IHNldC4KKyhkZWZpbmVfbW9kZV9hdHRyIHAxbTEgWyhRSSAiTiBQIikK KyAgICAgICAgICAgICAgICAgICAgICAgIChISSAiWXh4IikgKFBTSSAiWXh4IikgKFNJICJZ eHgiKV0pCisKKzs7IEZJWE1FOiByZWxvYWQxLmNjOjpkb19vdXRwdXRfcmVsb2FkKCkgZG9l cyBub3Qgc3VwcG9ydCBvdXRwdXQgcmVsb2FkcworOzsgZm9yIEpVTVBfSU5TTnMsIGhlbmNl IGxldHRpbmcgY29tYmluZSBkb2luZyBkZWNyZW1lbnQtYW5kLWJyYW5jaCBsaWtlCis7OyB0 aGUgZm9sbG93aW5nIG1pZ2h0IHJ1biBpbnRvIElDRS4gIERvaW5nIHJlbG9hZHMgYnkgaGFu ZCBpcyB0b28gcGFpbmZ1bC4uLgorOworOyAoZGVmaW5lX2luc25fYW5kX3NwbGl0ICIqYWRk LmZvci5lcW5lLjxtb2RlPi5jYnJhbmNoIgorOyAgIFsoc2V0IChwYykKKzsgICAgICAgICAo aWZfdGhlbl9lbHNlIChlcW5lIChtYXRjaF9vcGVyYW5kOlFJU0kgMSAicmVnaXN0ZXJfb3Bl cmFuZCIgICIwIikKKzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtYXRjaF9vcGVy YW5kOlFJU0kgMiAiY29uc3RfaW50X29wZXJhbmQiICJuIikpCis7ICAgICAgICAgICAgICAg ICAgICAgICAobGFiZWxfcmVmIChtYXRjaF9vcGVyYW5kIDQpKQorOyAgICAgICAgICAgICAg ICAgICAgICAgKHBjKSkpCis7ICAgIChzZXQgKG1hdGNoX29wZXJhbmQ6UUlTSSAwICJyZWdp c3Rlcl9vcGVyYW5kIiAiPXIiKQorOyAgICAgICAgIChwbHVzOlFJU0kgKG1hdGNoX2R1cCAx KQorOyAgICAgICAgICAgICAgICAgICAgKG1hdGNoX29wZXJhbmQ6UUlTSSAzICJjb25zdF9p bnRfb3BlcmFuZCIgIm4iKSkpXQorOyAgIDs7IE5vIGNsb2JiZXIgZm9yIG5vdyBhcyBjb21i aW5lIG1pZ2h0IG5vdCBoYXZlIG9uZSBoYW5keS4KKzsgICA7OyBXZSBwb3AgYSBzY2F0Y2gg aW4gc3BsaXQxLgorOyAgICIhcmVsb2FkX2NvbXBsZXRlZAorOyAgICAmJiBjb25zdDBfcnR4 ID09IHNpbXBsaWZ5X2JpbmFyeV9vcGVyYXRpb24gKFBMVVMsIDxNT0RFPm1vZGUsCis7ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmFuZHNb Ml0sIG9wZXJhbmRzWzNdKSIKKzsgICB7IGdjY191bnJlYWNoYWJsZSgpOyB9Cis7ICAgIiYm IDEiCis7ICAgWyhwYXJhbGxlbCBbKHNldCAocGMpCis7ICAgICAgICAgICAgICAgICAgICAo aWZfdGhlbl9lbHNlIChlcW5lIChtYXRjaF9kdXAgMSkKKzsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKG1hdGNoX2R1cCAyKSkKKzsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKGxhYmVsX3JlZiAobWF0Y2hfZHVwIDQpKQorOyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAocGMpKSkKKzsgICAgICAgICAgICAgICAoc2V0 IChtYXRjaF9kdXAgMCkKKzsgICAgICAgICAgICAgICAgICAgIChwbHVzOlFJU0kgKG1hdGNo X2R1cCAxKQorOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobWF0Y2hfZHVwIDMp KSkKKzsgICAgICAgICAgICAgICAoY2xvYmJlciAoc2NyYXRjaDpRSSkpXSldKQorOworOzsg Li4uSGVuY2UsIHN0aWNrIHdpdGggUlRMIHBlZXBob2xlcyBmb3Igbm93LiAgVW5mb3J0dW5h dGVseSwgdGhlcmUgaXMgbm8KKzs7IGNhbm9uaWNhbCBmb3JtLCBhbmQgaWYgcmVsb2FkIHNo dWZmbGVzIHJlZ2lzdGVycyBhcm91bmQsIHdlIG1pZ2h0IG1pc3MKKzs7IG9wcG9ydHVuaXRp ZXMgdG8gbWF0Y2ggYSBkZWNyZW1lbnQtYW5kLWJyYW5jaC4KKzs7IGRvbG9vcF9lbmQgZG9l c24ndCByZWxvYWQgZWl0aGVyLCBzbyBkb2xvb3BfZW5kIGFsc28gd29uJ3Qgd29yay4KKwor KGRlZmluZV9leHBhbmQgImdlbl9hZGRfZm9yXzxjb2RlPl88bW9kZT4iCisgIDsgIiphZGQu Zm9yLmVxbmUuPG1vZGU+IgorICBbKHBhcmFsbGVsIFsoc2V0IChyZWc6Q0MgUkVHX0NDKQor ICAgICAgICAgICAgICAgICAgIChjb21wYXJlOkNDIChwbHVzOlFJU0kgKG1hdGNoX29wZXJh bmQ6UUlTSSAwICJyZWdpc3Rlcl9vcGVyYW5kIikKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIChtYXRjaF9vcGVyYW5kOlFJU0kgMSAiY29uc3RfaW50X29w ZXJhbmQiKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3RfaW50IDAp KSkKKyAgICAgICAgICAgICAgKHNldCAobWF0Y2hfZHVwIDApCisgICAgICAgICAgICAgICAg ICAgKHBsdXM6UUlTSSAobWF0Y2hfZHVwIDApCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAobWF0Y2hfZHVwIDEpKSkKKyAgICAgICAgICAgICAgKGNsb2JiZXIgKG1hdGNoX29w ZXJhbmQ6UUkgMykpXSkKKyAgIDsgImJyYW5jaCIKKyAgIChzZXQgKHBjKQorICAgICAgICAo aWZfdGhlbl9lbHNlIChlcW5lIChyZWc6Q0MgUkVHX0NDKQorICAgICAgICAgICAgICAgICAg ICAgICAgICAgIChjb25zdF9pbnQgMCkpCisgICAgICAgICAgICAgICAgICAgICAgKGxhYmVs X3JlZiAobWF0Y2hfZHVwIDIpKQorICAgICAgICAgICAgICAgICAgICAgIChwYykpKV0pCisK KworOzsgMS8zOiBBIHZlcnNpb24gd2l0aG91dCBjbG9iYmVyOiBkLXJlZyBvciA4LWJpdCBh ZGRzICsvLTEuCisoZGVmaW5lX3BlZXBob2xlMgorICBbKHBhcmFsbGVsIFsoc2V0IChtYXRj aF9vcGVyYW5kOlFJU0kgMCAicmVnaXN0ZXJfb3BlcmFuZCIpCisgICAgICAgICAgICAgICAg ICAgKHBsdXM6UUlTSSAobWF0Y2hfZHVwIDApCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAobWF0Y2hfb3BlcmFuZDpRSVNJIDEgImNvbnN0X2ludF9vcGVyYW5kIikpKQorICAg ICAgICAgICAgICAoY2xvYmJlciAocmVnOkNDIFJFR19DQykpXSkKKyAgIChzZXQgKHJlZzpD QyBSRUdfQ0MpCisgICAgICAgIChjb21wYXJlOkNDIChtYXRjaF9kdXAgMCkKKyAgICAgICAg ICAgICAgICAgICAgKGNvbnN0X2ludCAwKSkpCisgICAoc2V0IChwYykKKyAgICAgICAgKGlm X3RoZW5fZWxzZSAoZXFuZSAocmVnOkNDIFJFR19DQykKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAoY29uc3RfaW50IDApKQorICAgICAgICAgICAgICAgICAgICAgIChsYWJlbF9y ZWYgKG1hdGNoX29wZXJhbmQgMikpCisgICAgICAgICAgICAgICAgICAgICAgKHBjKSkpXQor ICAicGVlcDJfcmVnbm9fZGVhZF9wICgzLCBSRUdfQ0MpCisgICAmJiAoZF9yZWdpc3Rlcl9v cGVyYW5kIChvcGVyYW5kc1swXSwgPE1PREU+bW9kZSkKKyAgICAgICB8fCAoPE1PREU+bW9k ZSA9PSBRSW1vZGUKKyAgICAgICAgICAgJiYgKElOVFZBTCAob3BlcmFuZHNbMV0pID09IDEK KyAgICAgICAgICAgICAgIHx8IElOVFZBTCAob3BlcmFuZHNbMV0pID09IC0xKSkpIgorICBb KHNjcmF0Y2gpXQorICB7CisgICAgZW1pdCAoZ2VuX2dlbl9hZGRfZm9yXzxjb2RlPl88bW9k ZT4gKG9wZXJhbmRzWzBdLCBvcGVyYW5kc1sxXSwgb3BlcmFuZHNbMl0sCisgICAgICAgICAg Z2VuX3J0eF9TQ1JBVENIIChRSW1vZGUpKSk7CisgICAgRE9ORTsKKyAgfSkKKworOzsgMi8z OiBBIHZlcnNpb24gd2l0aCBjbG9iYmVyIGZyb20gdGhlIGluc24uCisoZGVmaW5lX3BlZXBo b2xlMgorICBbKHBhcmFsbGVsIFsoc2V0IChtYXRjaF9vcGVyYW5kOlFJU0kgMCAicmVnaXN0 ZXJfb3BlcmFuZCIpCisgICAgICAgICAgICAgICAgICAgKHBsdXM6UUlTSSAobWF0Y2hfZHVw IDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobWF0Y2hfb3BlcmFuZDpRSVNJ IDEgImNvbnN0X2ludF9vcGVyYW5kIikpKQorICAgICAgICAgICAgICAoY2xvYmJlciAobWF0 Y2hfb3BlcmFuZDpRSSAzICJzY3JhdGNoX29yX2RfcmVnaXN0ZXJfb3BlcmFuZCIpKQorICAg ICAgICAgICAgICAoY2xvYmJlciAocmVnOkNDIFJFR19DQykpXSkKKyAgIChwYXJhbGxlbCBb KHNldCAocmVnOkNDIFJFR19DQykKKyAgICAgICAgICAgICAgICAgICAoY29tcGFyZTpDQyAo bWF0Y2hfZHVwIDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0X2lu dCAwKSkpCisgICAgICAgICAgICAgIChjbG9iYmVyIChtYXRjaF9vcGVyYW5kOlFJIDQgInNj cmF0Y2hfb3JfZF9yZWdpc3Rlcl9vcGVyYW5kIikpXSkKKyAgIChzZXQgKHBjKQorICAgICAg ICAoaWZfdGhlbl9lbHNlIChlcW5lIChyZWc6Q0MgUkVHX0NDKQorICAgICAgICAgICAgICAg ICAgICAgICAgICAgIChjb25zdF9pbnQgMCkpCisgICAgICAgICAgICAgICAgICAgICAgKGxh YmVsX3JlZiAobWF0Y2hfb3BlcmFuZCAyKSkKKyAgICAgICAgICAgICAgICAgICAgICAocGMp KSldCisgICJwZWVwMl9yZWdub19kZWFkX3AgKDMsIFJFR19DQykiCisgIFsoc2NyYXRjaCld CisgIHsKKyAgICBydHggc2NyYXRjaCA9IFJFR19QIChvcGVyYW5kc1szXSkgPyBvcGVyYW5k c1szXSA6IG9wZXJhbmRzWzRdOworCisgICAgLy8gV2UgbmVlZCBlaXRoZXIgYSBkLXJlZ2lz dGVyIG9yIGEgc2NyYXRjaCByZWdpc3RlciB0byBjbG9iYmVyLgorICAgIGlmICghIFJFR19Q IChzY3JhdGNoKQorICAgICAgICAmJiAhIGRfcmVnaXN0ZXJfb3BlcmFuZCAob3BlcmFuZHNb MF0sIDxNT0RFPm1vZGUpCisgICAgICAgICYmICEgKFFJbW9kZSA9PSA8TU9ERT5tb2RlCisg ICAgICAgICAgICAgICYmIChJTlRWQUwgKG9wZXJhbmRzWzFdKSA9PSAxCisgICAgICAgICAg ICAgICAgICB8fCBJTlRWQUwgKG9wZXJhbmRzWzFdKSA9PSAtMSkpKQorICAgICAgeworICAg ICAgICBGQUlMOworICAgICAgfQorICAgIGVtaXQgKGdlbl9nZW5fYWRkX2Zvcl88Y29kZT5f PG1vZGU+IChvcGVyYW5kc1swXSwgb3BlcmFuZHNbMV0sIG9wZXJhbmRzWzJdLAorICAgICAg ICAgIHNjcmF0Y2gpKTsKKyAgICBET05FOworICB9KQorCis7OyAzLzMgQSB2ZXJzaW9uIHdp dGggYSBjbG9iYmVyIGZyb20gcGVlcGhvbGUyLgorKGRlZmluZV9wZWVwaG9sZTIKKyAgWyht YXRjaF9zY3JhdGNoOlFJIDMgImQiKQorICAgKHBhcmFsbGVsIFsoc2V0IChtYXRjaF9vcGVy YW5kOlFJU0kgMCAicmVnaXN0ZXJfb3BlcmFuZCIpCisgICAgICAgICAgICAgICAgICAgKHBs dXM6UUlTSSAobWF0Y2hfZHVwIDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo bWF0Y2hfb3BlcmFuZDpRSVNJIDEgImNvbnN0X2ludF9vcGVyYW5kIikpKQorICAgICAgICAg ICAgICAoY2xvYmJlciAocmVnOkNDIFJFR19DQykpXSkKKyAgIChzZXQgKHJlZzpDQyBSRUdf Q0MpCisgICAgICAgIChjb21wYXJlOkNDIChtYXRjaF9kdXAgMCkKKyAgICAgICAgICAgICAg ICAgICAgKGNvbnN0X2ludCAwKSkpCisgICAoc2V0IChwYykKKyAgICAgICAgKGlmX3RoZW5f ZWxzZSAoZXFuZSAocmVnOkNDIFJFR19DQykKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAoY29uc3RfaW50IDApKQorICAgICAgICAgICAgICAgICAgICAgIChsYWJlbF9yZWYgKG1h dGNoX29wZXJhbmQgMikpCisgICAgICAgICAgICAgICAgICAgICAgKHBjKSkpXQorICAicGVl cDJfcmVnbm9fZGVhZF9wICgzLCBSRUdfQ0MpIgorICBbKHNjcmF0Y2gpXQorICB7CisgICAg ZW1pdCAoZ2VuX2dlbl9hZGRfZm9yXzxjb2RlPl88bW9kZT4gKG9wZXJhbmRzWzBdLCBvcGVy YW5kc1sxXSwgb3BlcmFuZHNbMl0sCisgICAgICAgICAgb3BlcmFuZHNbM10pKTsKKyAgICBE T05FOworICB9KQorCis7OyBSZXN1bHQgb2YgdGhlIGFib3ZlIHRocmVlIHBlZXBob2xlcyBp cyBhbiBhZGRpdGlvbiB0aGF0IGFsc28KKzs7IHBlcmZvcm1zIGFuIEVRIG9yIE5FIGNvbXBh cmlzb24gKG9mIHRoZSByZXN1bHQpIGFnYWluc3QgemVyby4KKzs7IEZJWE1FOiBVc2luZyAo bWF0Y2hfZHVwIDApIGluc3RlYWQgb2Ygb3BlcmFuZHNbMy80XSBtYWtlcyBybnJlZ3MKKzs7 IGJhcmYgaW4gcmVncmVuYW1lLmNjOjptZXJnZV9vdmVybGFwcGluZ19yZWdzKCkuICBGb3Ig bm93LCB1c2UgdGhlCis7OyBmaXggZnJvbSBQUjUwNzg4OiBDb25zdHJhaW4gYXMgIjAiLgor KGRlZmluZV9pbnNuICIqYWRkLmZvci5lcW5lLjxtb2RlPiIKKyAgWyhzZXQgKHJlZzpDQyBS RUdfQ0MpCisgICAgICAgIChjb21wYXJlOkNDCisgICAgICAgICAocGx1czpRSVNJIChtYXRj aF9vcGVyYW5kOlFJU0kgMyAicmVnaXN0ZXJfb3BlcmFuZCIgICIwLDAgICAgICwwIikKKyAg ICAgICAgICAgICAgICAgICAgKG1hdGNoX29wZXJhbmQ6UUlTSSAxICJjb25zdF9pbnRfb3Bl cmFuZCIgIm4sPHAxbTE+LG4iKSkKKyAgICAgICAgIChjb25zdF9pbnQgMCkpKQorICAgKHNl dCAobWF0Y2hfb3BlcmFuZDpRSVNJIDAgInJlZ2lzdGVyX29wZXJhbmQiICAgICAgICAgICAg ICI9ZCwqciAgICAsciIpCisgICAgICAgIChwbHVzOlFJU0kgKG1hdGNoX29wZXJhbmQ6UUlT SSA0ICJyZWdpc3Rlcl9vcGVyYW5kIiAgICIwLDAgICAgICwwIikKKyAgICAgICAgICAgICAg ICAgICAobWF0Y2hfZHVwIDEpKSkKKyAgIChjbG9iYmVyIChtYXRjaF9zY3JhdGNoOlFJIDIg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPVgsWCAgICAgLCZkIikpXQorICAicmVs b2FkX2NvbXBsZXRlZCIKKyAgeworICAgIHJldHVybiBhdnJfb3V0X3BsdXNfc2V0X1pOIChv cGVyYW5kcywgbnVsbHB0cik7CisgIH0KKyAgWyhzZXRfYXR0ciAiYWRqdXN0X2xlbiIgImFk ZF9zZXRfWk4iKV0pCisKKworOzsgU3dhcHBpbmcgYm90aCBjb21wYXJpc29uIGFuZCBicmFu Y2ggY29uZGl0aW9uLiAgVGhpcyBjYW4gdHVybiBkaWZmaWN1bHQKKzs7IGJyYW5jaGVzIHRv IGVhc3kgb25lcy4gIEFuZCBpbiBzb21lIGNhc2VzLCBhIGNvbXBhcmlzb24gYWdhaW5zdCBv bmUgY2FuCis7OyBiZSB0dXJuZWQgaW50byBhIGNvbXBhcmlzb24gYWdhaW5zdCB6ZXJvLgor CisoZGVmaW5lX3BlZXBob2xlMiA7ICIqc3dhcHBlZF90c3Q8bW9kZT4iCisgIFsocGFyYWxs ZWwgWyhzZXQgKHJlZzpDQyBSRUdfQ0MpCisgICAgICAgICAgICAgICAgICAgKGNvbXBhcmU6 Q0MgKG1hdGNoX29wZXJhbmQ6QUxMczIzNCAxICJyZWdpc3Rlcl9vcGVyYW5kIikKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAobWF0Y2hfb3BlcmFuZDpBTExzMjM0IDIgImNv bnN0X29wZXJhbmQiKSkpCisgICAgICAgICAgICAgIChjbG9iYmVyIChtYXRjaF9vcGVyYW5k OlFJIDMgInNjcmF0Y2hfb3BlcmFuZCIpKV0pCisgICAoc2V0IChwYykKKyAgICAgICAgKGlm X3RoZW5fZWxzZSAobWF0Y2hfb3BlcmF0b3IgMCAib3JkZXJlZF9jb21wYXJpc29uX29wZXJh dG9yIgorICAgICAgICAgICAgICAgICAgICAgICAgWyhyZWc6Q0MgUkVHX0NDKQorICAgICAg ICAgICAgICAgICAgICAgICAgIChjb25zdF9pbnQgMCldKQorICAgICAgICAgICAgICAgICAg ICAgIChsYWJlbF9yZWYgKG1hdGNoX29wZXJhbmQgNCkpCisgICAgICAgICAgICAgICAgICAg ICAgKHBjKSkpXQorICAicGVlcDJfcmVnbm9fZGVhZF9wICgyLCBSRUdfQ0MpIgorICBbKHNl dCAocmVnOkNDIFJFR19DQykKKyAgICAgICAgKGNvbXBhcmU6Q0MgKG1hdGNoX2R1cCAyKQor ICAgICAgICAgICAgICAgICAgICAobWF0Y2hfZHVwIDEpKSkKKyAgIDsgImJyYW5jaCIKKyAg IChzZXQgKHBjKQorICAgICAgICAoaWZfdGhlbl9lbHNlIChtYXRjaF9vcF9kdXAgMCBbKHJl ZzpDQyBSRUdfQ0MpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo Y29uc3RfaW50IDApXSkKKyAgICAgICAgICAgICAgICAgICAgICAobGFiZWxfcmVmIChtYXRj aF9kdXAgNCkpCisgICAgICAgICAgICAgICAgICAgICAgKHBjKSkpXQorICB7CisgICAgcnR4 IHh2YWwgPSBhdnJfdG9faW50X21vZGUgKG9wZXJhbmRzWzJdKTsKKyAgICBlbnVtIHJ0eF9j b2RlIGNvZGUgPSBHRVRfQ09ERSAob3BlcmFuZHNbMF0pOworCisgICAgaWYgKGNvZGUgPT0g R1QgJiYgeHZhbCA9PSBjb25zdDBfcnR4KQorICAgICAgY29kZSA9IExUOworICAgIGVsc2Ug aWYgKGNvZGUgPT0gR0UgJiYgeHZhbCA9PSBjb25zdDFfcnR4KQorICAgICAgY29kZSA9IExU OworICAgIGVsc2UgaWYgKGNvZGUgPT0gTEUgJiYgeHZhbCA9PSBjb25zdDBfcnR4KQorICAg ICAgY29kZSA9IEdFOworICAgIGVsc2UgaWYgKGNvZGUgPT0gTFQgJiYgeHZhbCA9PSBjb25z dDFfcnR4KQorICAgICAgY29kZSA9IEdFOworICAgIGVsc2UKKyAgICAgIEZBSUw7CisKKyAg ICBvcGVyYW5kc1syXSA9IENPTlNUMF9SVFggKDxNT0RFPm1vZGUpOworICAgIFBVVF9DT0RF IChvcGVyYW5kc1swXSwgY29kZSk7CisgIH0pCisKKzs7IFNhbWUsIGJ1dCBmb3IgOC1iaXQg bW9kZXMgd2hpY2ggaGF2ZSBubyBzY3JhdGNoIHJlZy4KKyhkZWZpbmVfcGVlcGhvbGUyIDsg Iipzd2FwcGVkX3RzdDxtb2RlPiIKKyAgWyhzZXQgKHJlZzpDQyBSRUdfQ0MpCisgICAgICAg IChjb21wYXJlOkNDIChtYXRjaF9vcGVyYW5kOkFMTHMxIDEgInJlZ2lzdGVyX29wZXJhbmQi KQorICAgICAgICAgICAgICAgICAgICAobWF0Y2hfb3BlcmFuZDpBTExzMSAyICJjb25zdF9v cGVyYW5kIikpKQorICAgKHNldCAocGMpCisgICAgICAgIChpZl90aGVuX2Vsc2UgKG1hdGNo X29wZXJhdG9yIDAgIm9yZGVyZWRfY29tcGFyaXNvbl9vcGVyYXRvciIKKyAgICAgICAgICAg ICAgICAgICAgICAgIFsocmVnOkNDIFJFR19DQykKKyAgICAgICAgICAgICAgICAgICAgICAg ICAoY29uc3RfaW50IDApXSkKKyAgICAgICAgICAgICAgICAgICAgICAobGFiZWxfcmVmICht YXRjaF9vcGVyYW5kIDQpKQorICAgICAgICAgICAgICAgICAgICAgIChwYykpKV0KKyAgInBl ZXAyX3JlZ25vX2RlYWRfcCAoMiwgUkVHX0NDKSIKKyAgWyhzZXQgKHJlZzpDQyBSRUdfQ0Mp CisgICAgICAgIChjb21wYXJlOkNDIChtYXRjaF9kdXAgMikKKyAgICAgICAgICAgICAgICAg ICAgKG1hdGNoX2R1cCAxKSkpCisgICA7ICJicmFuY2giCisgICAoc2V0IChwYykKKyAgICAg ICAgKGlmX3RoZW5fZWxzZSAobWF0Y2hfb3BfZHVwIDAgWyhyZWc6Q0MgUkVHX0NDKQorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0X2ludCAwKV0pCisg ICAgICAgICAgICAgICAgICAgICAgKGxhYmVsX3JlZiAobWF0Y2hfZHVwIDQpKQorICAgICAg ICAgICAgICAgICAgICAgIChwYykpKV0KKyAgeworICAgIHJ0eCB4dmFsID0gYXZyX3RvX2lu dF9tb2RlIChvcGVyYW5kc1syXSk7CisgICAgZW51bSBydHhfY29kZSBjb2RlID0gR0VUX0NP REUgKG9wZXJhbmRzWzBdKTsKKworICAgIGlmIChjb2RlID09IEdUICYmIHh2YWwgPT0gY29u c3QwX3J0eCkKKyAgICAgIGNvZGUgPSBMVDsKKyAgICBlbHNlIGlmIChjb2RlID09IEdFICYm IHh2YWwgPT0gY29uc3QxX3J0eCkKKyAgICAgIGNvZGUgPSBMVDsKKyAgICBlbHNlIGlmIChj b2RlID09IExFICYmIHh2YWwgPT0gY29uc3QwX3J0eCkKKyAgICAgIGNvZGUgPSBHRTsKKyAg ICBlbHNlIGlmIChjb2RlID09IExUICYmIHh2YWwgPT0gY29uc3QxX3J0eCkKKyAgICAgIGNv ZGUgPSBHRTsKKyAgICBlbHNlCisgICAgICBGQUlMOworCisgICAgb3BlcmFuZHNbMl0gPSBD T05TVDBfUlRYICg8TU9ERT5tb2RlKTsKKyAgICBQVVRfQ09ERSAob3BlcmFuZHNbMF0sIGNv ZGUpOworICB9KQorCisKIChkZWZpbmVfZXhwYW5kICJleHR6diIKICAgWyhzZXQgKG1hdGNo X29wZXJhbmQ6UUkgMCAicmVnaXN0ZXJfb3BlcmFuZCIgIiIpCiAgICAgICAgICh6ZXJvX2V4 dHJhY3Q6UUkgKG1hdGNoX29wZXJhbmQ6UUkgMSAicmVnaXN0ZXJfb3BlcmFuZCIgICIiKQpk aWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZy9hdnIvY29uc3RyYWludHMubWQgYi9nY2MvY29uZmln L2F2ci9jb25zdHJhaW50cy5tZAppbmRleCBhYzQzNjc4ODcyZC4uZjg0MGMwMTE0YTAgMTAw NjQ0Ci0tLSBhL2djYy9jb25maWcvYXZyL2NvbnN0cmFpbnRzLm1kCisrKyBiL2djYy9jb25m aWcvYXZyL2NvbnN0cmFpbnRzLm1kCkBAIC0yNDUsNiArMjQ1LDExIEBAIChkZWZpbmVfY29u c3RyYWludCAiWW0yIgogCSAgICAobWF0Y2hfdGVzdCAiSU5UVkFMIChhdnJfdG9faW50X21v ZGUgKG9wKSkgPT0gLTIiKSkKICAgICAgICAobWF0Y2hfdGVzdCAic2F0aXNmaWVzX2NvbnN0 cmFpbnRfQ20yIChvcCkiKSkpCiAKKzs7IENvbnN0cmFpbnQgdGhhdCdzIHRoZSBlbXB0eSBz ZXQuICBVc2VmdWwgd2l0aCBtb2RlIGFuZCBjb2RlIGl0ZXJhdG9ycy4KKyhkZWZpbmVfY29u c3RyYWludCAiWXh4IgorICAiQSBjb25zdHJhaW50cyB0aGF0IGlzIGFsd2F5cyBmYWxzZSIK KyAgKG1hdGNoX3Rlc3QgImZhbHNlIikpCisKIChkZWZpbmVfY29uc3RyYWludCAiWXgyIgog ICAiRml4ZWQtcG9pbnQgb3IgaW50ZWdlciBjb25zdGFudCBub3QgaW4gdGhlIHJhbmdlIEBt aW51c3t9MiBAZG90c3t9IDIiCiAgIChhbmQgKGlvciAobWF0Y2hfY29kZSAiY29uc3RfaW50 IikKZGlmZiAtLWdpdCBhL2djYy9jb25maWcvYXZyL3ByZWRpY2F0ZXMubWQgYi9nY2MvY29u ZmlnL2F2ci9wcmVkaWNhdGVzLm1kCmluZGV4IGUzNTIzMjY0NjZmLi5mNGVlNDJhZjI3NCAx MDA2NDQKLS0tIGEvZ2NjL2NvbmZpZy9hdnIvcHJlZGljYXRlcy5tZAorKysgYi9nY2MvY29u ZmlnL2F2ci9wcmVkaWNhdGVzLm1kCkBAIC0yNyw2ICsyNywxMSBAQCAoZGVmaW5lX3ByZWRp Y2F0ZSAiZF9yZWdpc3Rlcl9vcGVyYW5kIgogICAoYW5kIChtYXRjaF9jb2RlICJyZWciKQog ICAgICAgIChtYXRjaF90ZXN0ICJSRUdOTyAob3ApID49IDE2ICYmIFJFR05PIChvcCkgPD0g MzEiKSkpCiAKKyhkZWZpbmVfcHJlZGljYXRlICJzY3JhdGNoX29yX2RfcmVnaXN0ZXJfb3Bl cmFuZCIKKyAgKGlvciAobWF0Y2hfb3BlcmFuZCAwICJkX3JlZ2lzdGVyX29wZXJhbmQiKQor ICAgICAgIChhbmQgKG1hdGNoX2NvZGUgKCJzY3JhdGNoIikpCisgICAgICAgICAgICAobWF0 Y2hfb3BlcmFuZCAwICJzY3JhdGNoX29wZXJhbmQiKSkpKQorCiAoZGVmaW5lX3ByZWRpY2F0 ZSAiZXZlbl9yZWdpc3Rlcl9vcGVyYW5kIgogICAoYW5kIChtYXRjaF9jb2RlICJyZWciKQog ICAgICAgIChhbmQgKG1hdGNoX3Rlc3QgIlJFR05PIChvcCkgPD0gMzEiKQpkaWZmIC0tZ2l0 IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2F2ci90b3J0dXJlL3ByMTA5NjUwLTEuYyBi L2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9hdnIvdG9ydHVyZS9wcjEwOTY1MC0xLmMKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjkwMzBkYjAwZmRlCi0tLSAv ZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2F2ci90b3J0dXJlL3By MTA5NjUwLTEuYwpAQCAtMCwwICsxLDYzIEBACisvKiB7IGRnLWRvIHJ1biB9ICovCisvKiB7 IGRnLW9wdGlvbnMgeyAtc3RkPWM5OSB9IH0gKi8KKwordHlwZWRlZiBfQm9vbCBib29sOwor dHlwZWRlZiBfX1VJTlQ4X1RZUEVfXyB1aW50OF90OworCitzdGF0aWMgaW5saW5lIF9fYXR0 cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKK2Jvb2wgZnVuYzFhIChib29sIHAxLCB1 aW50OF90IHAyKQoreworICBpZiAocDEpCisgICAgcmV0dXJuIHAyIDw9IDg7CisgIHJldHVy biBwMiA8PSAyOworfQorCitfX2F0dHJpYnV0ZV9fKChfX25vaW5saW5lX18sIF9fbm9jbG9u ZV9fKSkKK2Jvb2wgZnVuYzFiIChib29sIHAxLCB1aW50OF90IHAyKQoreworICByZXR1cm4g ZnVuYzFhIChwMSwgcDIpOworfQorCitzdGF0aWMgaW5saW5lIF9fYXR0cmlidXRlX18oKF9f YWx3YXlzX2lubGluZV9fKSkKK2Jvb2wgZnVuYzJhIChib29sIHAxLCB1bnNpZ25lZCBwMikK K3sKKyAgaWYgKHAxKQorICAgIHJldHVybiBwMiA8PSA4OworICByZXR1cm4gcDIgPD0gMjsK K30KKworX19hdHRyaWJ1dGVfXygoX19ub2lubGluZV9fLCBfX25vY2xvbmVfXykpCitib29s IGZ1bmMyYiAoYm9vbCBwMSwgdW5zaWduZWQgcDIpCit7CisgIHJldHVybiBmdW5jMmEgKHAx LCBwMik7Cit9CisKK3ZvaWQgdGVzdDEgKHZvaWQpCit7CisgIGlmIChmdW5jMWEgKDAsIDEp ICE9IGZ1bmMxYiAoMCwgMSkpIF9fYnVpbHRpbl9hYm9ydCgpOworICBpZiAoZnVuYzFhICgw LCAyKSAhPSBmdW5jMWIgKDAsIDIpKSBfX2J1aWx0aW5fYWJvcnQoKTsKKyAgaWYgKGZ1bmMx YSAoMCwgMykgIT0gZnVuYzFiICgwLCAzKSkgX19idWlsdGluX2Fib3J0KCk7CisKKyAgaWYg KGZ1bmMxYSAoMSwgNykgIT0gZnVuYzFiICgxLCA3KSkgX19idWlsdGluX2Fib3J0KCk7Cisg IGlmIChmdW5jMWEgKDEsIDgpICE9IGZ1bmMxYiAoMSwgOCkpIF9fYnVpbHRpbl9hYm9ydCgp OworICBpZiAoZnVuYzFhICgxLCA5KSAhPSBmdW5jMWIgKDEsIDkpKSBfX2J1aWx0aW5fYWJv cnQoKTsKK30KKwordm9pZCB0ZXN0MiAodm9pZCkKK3sKKyAgaWYgKGZ1bmMyYSAoMCwgMSkg IT0gZnVuYzJiICgwLCAxKSkgX19idWlsdGluX2Fib3J0KCk7CisgIGlmIChmdW5jMmEgKDAs IDIpICE9IGZ1bmMyYiAoMCwgMikpIF9fYnVpbHRpbl9hYm9ydCgpOworICBpZiAoZnVuYzJh ICgwLCAzKSAhPSBmdW5jMmIgKDAsIDMpKSBfX2J1aWx0aW5fYWJvcnQoKTsKKworICBpZiAo ZnVuYzJhICgxLCA3KSAhPSBmdW5jMmIgKDEsIDcpKSBfX2J1aWx0aW5fYWJvcnQoKTsKKyAg aWYgKGZ1bmMyYSAoMSwgOCkgIT0gZnVuYzJiICgxLCA4KSkgX19idWlsdGluX2Fib3J0KCk7 CisgIGlmIChmdW5jMmEgKDEsIDkpICE9IGZ1bmMyYiAoMSwgOSkpIF9fYnVpbHRpbl9hYm9y dCgpOworfQorCitpbnQgbWFpbiAodm9pZCkKK3sKKyAgdGVzdDEoKTsKKyAgdGVzdDIoKTsK KworICBfX2J1aWx0aW5fZXhpdCAoMCk7Cit9CmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRl L2djYy50YXJnZXQvYXZyL3RvcnR1cmUvcHIxMDk2NTAtMi5jIGIvZ2NjL3Rlc3RzdWl0ZS9n Y2MudGFyZ2V0L2F2ci90b3J0dXJlL3ByMTA5NjUwLTIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwMDAwMC4uMzg2ZGMzMjJhZmEKLS0tIC9kZXYvbnVsbAorKysgYi9n Y2MvdGVzdHN1aXRlL2djYy50YXJnZXQvYXZyL3RvcnR1cmUvcHIxMDk2NTAtMi5jCkBAIC0w LDAgKzEsNzkgQEAKKy8qIHsgZGctZG8gcnVuIH0gKi8KKwordHlwZWRlZiBfX1VJTlQ4X1RZ UEVfXyB1aW50OF90OworCisjZGVmaW5lIEFJIHN0YXRpYyBfX2lubGluZV9fIF9fYXR0cmli dXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKKyNkZWZpbmUgTkkgX19hdHRyaWJ1dGVfXygo X19ub2lubGluZV9fLF9fbm9jbG9uZV9fKSkKKworQUkgdWludDhfdCBmdW5jMV9lcSAodWlu dDhfdCBjLCB1bnNpZ25lZCB4KQoreworICBpZiAoeCA9PSBjKQorICAgIHJldHVybiAxOwor ICByZXR1cm4gMDsKK30KKworQUkgdWludDhfdCBmdW5jMV9uZSAodWludDhfdCBjLCB1bnNp Z25lZCB4KQoreworICBpZiAoeCAhPSBjKQorICAgIHJldHVybiAxOworICByZXR1cm4gMDsK K30KKworQUkgdWludDhfdCBmdW5jMV9sdHUgKHVpbnQ4X3QgYywgdW5zaWduZWQgeCkKK3sK KyAgaWYgKHggPCBjKQorICAgIHJldHVybiAxOworICByZXR1cm4gMDsKK30KKworQUkgdWlu dDhfdCBmdW5jMV9sZXUgKHVpbnQ4X3QgYywgdW5zaWduZWQgeCkKK3sKKyAgaWYgKHggPD0g YykKKyAgICByZXR1cm4gMTsKKyAgcmV0dXJuIDA7Cit9CisKK0FJIHVpbnQ4X3QgZnVuYzFf Z3R1ICh1aW50OF90IGMsIHVuc2lnbmVkIHgpCit7CisgIGlmICh4ID4gYykKKyAgICByZXR1 cm4gMTsKKyAgcmV0dXJuIDA7Cit9CisKK0FJIHVpbnQ4X3QgZnVuYzFfZ2V1ICh1aW50OF90 IGMsIHVuc2lnbmVkIHgpCit7CisgIGlmICh4ID49IGMpCisgICAgcmV0dXJuIDE7CisgIHJl dHVybiAwOworfQorCitOSSB1aW50OF90IGZ1bmMyX2VxICh1aW50OF90IGMsIHVuc2lnbmVk IHgpIHsgcmV0dXJuIGZ1bmMxX2VxIChjLCB4KTsgfQorTkkgdWludDhfdCBmdW5jMl9uZSAo dWludDhfdCBjLCB1bnNpZ25lZCB4KSB7IHJldHVybiBmdW5jMV9uZSAoYywgeCk7IH0KK05J IHVpbnQ4X3QgZnVuYzJfbHR1ICh1aW50OF90IGMsIHVuc2lnbmVkIHgpIHsgcmV0dXJuIGZ1 bmMxX2x0dSAoYywgeCk7IH0KK05JIHVpbnQ4X3QgZnVuYzJfbGV1ICh1aW50OF90IGMsIHVu c2lnbmVkIHgpIHsgcmV0dXJuIGZ1bmMxX2xldSAoYywgeCk7IH0KK05JIHVpbnQ4X3QgZnVu YzJfZ3R1ICh1aW50OF90IGMsIHVuc2lnbmVkIHgpIHsgcmV0dXJuIGZ1bmMxX2d0dSAoYywg eCk7IH0KK05JIHVpbnQ4X3QgZnVuYzJfZ2V1ICh1aW50OF90IGMsIHVuc2lnbmVkIHgpIHsg cmV0dXJuIGZ1bmMxX2dldSAoYywgeCk7IH0KKworQUkgdm9pZCB0ZXN0NCAodWludDhfdCBj LCB1bnNpZ25lZCB4KQoreworICBpZiAoZnVuYzJfZXEgKGMsIHgpICE9IGZ1bmMxX2VxIChj LCB4KSkgX19idWlsdGluX2Fib3J0KCk7CisgIGlmIChmdW5jMl9uZSAoYywgeCkgIT0gZnVu YzFfbmUgKGMsIHgpKSBfX2J1aWx0aW5fYWJvcnQoKTsKKyAgaWYgKGZ1bmMyX2x0dSAoYywg eCkgIT0gZnVuYzFfbHR1IChjLCB4KSkgX19idWlsdGluX2Fib3J0KCk7CisgIGlmIChmdW5j Ml9sZXUgKGMsIHgpICE9IGZ1bmMxX2xldSAoYywgeCkpIF9fYnVpbHRpbl9hYm9ydCgpOwor ICBpZiAoZnVuYzJfZ3R1IChjLCB4KSAhPSBmdW5jMV9ndHUgKGMsIHgpKSBfX2J1aWx0aW5f YWJvcnQoKTsKKyAgaWYgKGZ1bmMyX2dldSAoYywgeCkgIT0gZnVuYzFfZ2V1IChjLCB4KSkg X19idWlsdGluX2Fib3J0KCk7Cit9CisKK2ludCBtYWluICh2b2lkKQoreworICB0ZXN0NCAo MTI3LCAxMjcpOworICB0ZXN0NCAoMTI3LCAxMjgpOworICB0ZXN0NCAoMTI4LCAxMjcpOwor CisgIHRlc3Q0ICgweDQyLCAweDE0Mik7CisgIHRlc3Q0ICgweDAsIDB4MTAwKTsKKyAgdGVz dDQgKDB4MCwgMHgwKTsKKyAgdGVzdDQgKDB4MCwgMHgxKTsKKworICBfX2J1aWx0aW5fZXhp dCAoMCk7Cit9Cg== --------------XkpGvOEZjLLfflK5vnvlkUr3--