From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 14978 invoked by alias); 10 Dec 2010 14:49:44 -0000 Received: (qmail 14963 invoked by uid 22791); 10 Dec 2010 14:49:43 -0000 X-SWARE-Spam-Status: No, hits=-1.9 required=5.0 tests=BAYES_00 X-Spam-Check-By: sourceware.org Received: from tx2ehsobe001.messaging.microsoft.com (HELO TX2EHSOBE001.bigfish.com) (65.55.88.11) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Fri, 10 Dec 2010 14:49:36 +0000 Received: from mail25-tx2-R.bigfish.com (10.9.14.254) by TX2EHSOBE001.bigfish.com (10.9.40.21) with Microsoft SMTP Server id 14.1.225.8; Fri, 10 Dec 2010 14:49:34 +0000 Received: from mail25-tx2 (localhost.localdomain [127.0.0.1]) by mail25-tx2-R.bigfish.com (Postfix) with ESMTP id ED6B53D080E; Fri, 10 Dec 2010 14:49:33 +0000 (UTC) X-SpamScore: -8 X-BigFish: VPS-8(zz936eK1432Nzz1202hzz8275bhz32i2a8h668h34h61h) X-Spam-TCS-SCL: 0:0 X-Forefront-Antispam-Report: KIP:(null);UIP:(null);IPVD:NLI;H:kcinpunhjhc02.kpit.com;RD:none;EFVD:NLI Received: from mail25-tx2 (localhost.localdomain [127.0.0.1]) by mail25-tx2 (MessageSwitch) id 1291992573394770_20920; Fri, 10 Dec 2010 14:49:33 +0000 (UTC) Received: from TX2EHSMHS022.bigfish.com (unknown [10.9.14.251]) by mail25-tx2.bigfish.com (Postfix) with ESMTP id 5B1801F0050; Fri, 10 Dec 2010 14:49:33 +0000 (UTC) Received: from kcinpunhjhc02.kpit.com (220.225.38.51) by TX2EHSMHS022.bigfish.com (10.9.99.122) with Microsoft SMTP Server (TLS) id 14.1.225.8; Fri, 10 Dec 2010 14:49:31 +0000 Received: from Kcinpunhjcms01.kpit.com ([172.10.16.121]) by kcinpunhjhc02.kpit.com ([172.10.16.124]) with mapi; Fri, 10 Dec 2010 20:19:27 +0530 From: Rathish C To: "gdb-patches@sourceware.org" CC: "kevinb@redhat.com" , Gina Verlekar Date: Fri, 10 Dec 2010 14:49:00 -0000 Subject: [PATCH, V850] Add support for V850E2 and V850E2V3 Message-ID: <371569CBCFB2E745B891DBB88B2DFDDD19E7B32E2D@KCINPUNHJCMS01.kpit.com> Content-Type: multipart/mixed; boundary="_002_371569CBCFB2E745B891DBB88B2DFDDD19E7B32E2DKCINPUNHJCMS0_" MIME-Version: 1.0 X-OriginatorOrg: kpitcummins.com Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org X-SW-Source: 2010-12/txt/msg00138.txt.bz2 --_002_371569CBCFB2E745B891DBB88B2DFDDD19E7B32E2DKCINPUNHJCMS0_ Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Content-length: 3187 Hi, Thank you for the review comments. I have updated the patch based on the review comments from Kevin Buettner. Please find the updated patch "v850-gdb-v850e2-v850e2v3-support.patch". > > Why are you changing the register number for E_PC_REGNUM? I > assume you've already changed gcc so that the dwarf2 return address > column ends up being this new number. Won't this make it impossible > to use an old compiler with a new debugger and vice versa? > I have updated the patch to have the same value for the E_PC_REGNUM.=20 The enum members for the new registers for E2V3 are added at the end=20 of the enum. > > Does the original v850 really have all of these new registers? (The > v850 manual that I looked at does not show them...) > No, the registers are not available for v850 target. It is only=20 available in E2 targets. The patch has been modified accordingly. The patch adds support for new target variants of V850 i.e. V850E2 and V850= E2V3. These processors are upwardly compatible with earlier V850 targets al= ready supported in the current binutils port. V850E2V3 target supports floa= ting point operations. Hence, those instructions along with registers suppo= rted by V850E2V3 are defined in the current patch. The GCC, Binutils and Newlib part of the support have been posted and accep= ted. Please review the patch and let me know if there should be any modification= s in it.=20 2010-12-10 Rathish.C =09 * gdb/v850-tdep.c: Add the enum values for mpu and fpu registers (v850_register_name): Add the mpu and fpu register names. (v850e_register_name): Add the mpu and fpu register names. (v850e2_register_name): New function. (v850_gdbarch_init): Add case for bfd_mach_v850e2 and=20 bfd_mach_v850e2v3. * sim/common/sim-trace.c: Update the function prototype of=20 save_data_size. Move the enum data_fmt from here * sim/common/sim-trace.h: to here. Add function prototype of save_data * sim/v850/sim-main.h: Update the struct _v850_regs to include mpu and fpu system registers. Define the macros to access the mpu and fpu system registers. (SEXT3): Define. (TRACE_FP_INPUT_FPU1, TRACE_FP_INPUT_FPU2, TRACE_FP_INPUT_FPU3): Define. (TRACE_FP_INPUT_BOOL1_FPU2): Define. (TRACE_FP_INPUT_WORD2): Define. (TRACE_FP_RESULT_WORD1, TRACE_FP_RESULT_WORD2): Define. * sim/v850/simops.c: Update the function prototype of Add32 (update_fpsr): New function. (SignalException): New function. (SignalExceptionFPE): New function. (check_invalid_snan): New function. (v850_float_compare): New function. (v850_div): New function. (v850_divu): New function. (v850_sar): New function. (v850_shl): New function. (v850_shr): New function. (v850_satadd): New function. (v850_satsub): New function. (load_data_mem): New function. (store_data_mem): New function. (mpu_load_mem_test): New function. (mpu_store_mem_test): New function. * sim/v850/simops.h: Add function prototype for above mentioned functions. (check_cvt_fi, check_cvt_if, check_cvt_ff): Define. * sim/v850/v850-dc: Add entry for v850e2 and v850e2v3. * sim/v850/v850.igen: Add support for v850e2 and v850e2v3 Thanks & Regards, Rathish.C --_002_371569CBCFB2E745B891DBB88B2DFDDD19E7B32E2DKCINPUNHJCMS0_ Content-Type: application/octet-stream; name="v850-gdb-v850e2-v850e2v3-support.patch" Content-Description: v850-gdb-v850e2-v850e2v3-support.patch Content-Disposition: attachment; filename="v850-gdb-v850e2-v850e2v3-support.patch"; size=94612; creation-date="Tue, 21 Sep 2010 12:25:57 GMT"; modification-date="Fri, 10 Dec 2010 18:57:33 GMT" Content-Transfer-Encoding: base64 Content-length: 128255 ZGlmZiAtdXBOciBnZGItNy4yLjUwLW9yaWdpbmFsL2dkYi92ODUwLXRkZXAu YyBnZGItNy4yLjUwLW1vZGlmaWVkL2dkYi92ODUwLXRkZXAuYwotLS0gZ2Ri LTcuMi41MC1vcmlnaW5hbC9nZGIvdjg1MC10ZGVwLmMJMjAxMC0wOS0xMCAw NDozNDo0Ni4wMDAwMDAwMDAgKzA1MzAKKysrIGdkYi03LjIuNTAtbW9kaWZp ZWQvZ2RiL3Y4NTAtdGRlcC5jCTIwMTAtMTItMDkgMTg6MTY6MDMuMDAwMDAw MDAwICswNTMwCkBAIC0xMDEsNyArMTAxLDk3IEBAIGVudW0KICAgICBFX1I2 Ml9SRUdOVU0sCiAgICAgRV9SNjNfUkVHTlVNLAogICAgIEVfUjY0X1JFR05V TSwgRV9QQ19SRUdOVU0gPSBFX1I2NF9SRUdOVU0sCi0gICAgRV9SNjVfUkVH TlVNLAorICAgIEVfUjY1X1JFR05VTSwgRV9OVU1fT0ZfVjg1MF9SRUdTID0g RV9SNjVfUkVHTlVNLCBFX05VTV9PRl9WODUwRV9SRUdTID0gRV9SNjVfUkVH TlVNLAorCisgICAgLyogbXB1MCBzeXN0ZW0gcmVnaXN0ZXJzICovCisgICAg RV9SNjZfUkVHTlVNLAorICAgIEVfUjY3X1JFR05VTSwKKyAgICBFX1I2OF9S RUdOVU0sCisgICAgRV9SNjlfUkVHTlVNLAorICAgIEVfUjcwX1JFR05VTSwK KyAgICBFX1I3MV9SRUdOVU0sCisgICAgRV9SNzJfUkVHTlVNLAorICAgIEVf UjczX1JFR05VTSwKKyAgICBFX1I3NF9SRUdOVU0sCisgICAgRV9SNzVfUkVH TlVNLAorICAgIEVfUjc2X1JFR05VTSwKKyAgICBFX1I3N19SRUdOVU0sCisg ICAgRV9SNzhfUkVHTlVNLAorICAgIEVfUjc5X1JFR05VTSwKKyAgICBFX1I4 MF9SRUdOVU0sCisgICAgRV9SODFfUkVHTlVNLAorICAgIEVfUjgyX1JFR05V TSwKKyAgICBFX1I4M19SRUdOVU0sCisgICAgRV9SODRfUkVHTlVNLAorICAg IEVfUjg1X1JFR05VTSwKKyAgICBFX1I4Nl9SRUdOVU0sCisgICAgRV9SODdf UkVHTlVNLAorICAgIEVfUjg4X1JFR05VTSwKKyAgICBFX1I4OV9SRUdOVU0s CisgICAgRV9SOTBfUkVHTlVNLAorICAgIEVfUjkxX1JFR05VTSwKKyAgICBF X1I5Ml9SRUdOVU0sCisgICAgRV9SOTNfUkVHTlVNLAorCisgICAgLyogbXB1 MSBzeXN0ZW0gcmVnaXN0ZXJzICovCisKKyAgICBFX1I5NF9SRUdOVU0sCisg ICAgRV9SOTVfUkVHTlVNLAorICAgIEVfUjk2X1JFR05VTSwKKyAgICBFX1I5 N19SRUdOVU0sCisgICAgRV9SOThfUkVHTlVNLAorICAgIEVfUjk5X1JFR05V TSwKKyAgICBFX1IxMDBfUkVHTlVNLAorICAgIEVfUjEwMV9SRUdOVU0sCisg ICAgRV9SMTAyX1JFR05VTSwKKyAgICBFX1IxMDNfUkVHTlVNLAorICAgIEVf UjEwNF9SRUdOVU0sCisgICAgRV9SMTA1X1JFR05VTSwKKyAgICBFX1IxMDZf UkVHTlVNLAorICAgIEVfUjEwN19SRUdOVU0sCisgICAgRV9SMTA4X1JFR05V TSwKKyAgICBFX1IxMDlfUkVHTlVNLAorICAgIEVfUjExMF9SRUdOVU0sCisg ICAgRV9SMTExX1JFR05VTSwKKyAgICBFX1IxMTJfUkVHTlVNLAorICAgIEVf UjExM19SRUdOVU0sCisgICAgRV9SMTE0X1JFR05VTSwKKyAgICBFX1IxMTVf UkVHTlVNLAorICAgIEVfUjExNl9SRUdOVU0sCisgICAgRV9SMTE3X1JFR05V TSwKKyAgICBFX1IxMThfUkVHTlVNLAorICAgIEVfUjExOV9SRUdOVU0sCisg ICAgRV9SMTIwX1JFR05VTSwKKyAgICBFX1IxMjFfUkVHTlVNLAorCisgICAg LyogZnB1IHN5c3RlbSByZWdpc3RlcnMgKi8KKyAgICBFX1IxMjJfUkVHTlVN LAorICAgIEVfUjEyM19SRUdOVU0sCisgICAgRV9SMTI0X1JFR05VTSwKKyAg ICBFX1IxMjVfUkVHTlVNLAorICAgIEVfUjEyNl9SRUdOVU0sCisgICAgRV9S MTI3X1JFR05VTSwKKyAgICBFX1IxMjhfUkVHTlVNLCBFX0ZQU1JfUkVHTlVN ID0gRV9SMTI4X1JFR05VTSwKKyAgICBFX1IxMjlfUkVHTlVNLCBFX0ZQRVBD X1JFR05VTSA9IEVfUjEyOV9SRUdOVU0sCisgICAgRV9SMTMwX1JFR05VTSwg RV9GUFNUX1JFR05VTSA9IEVfUjEzMF9SRUdOVU0sCisgICAgRV9SMTMxX1JF R05VTSwgRV9GUENDX1JFR05VTSA9IEVfUjEzMV9SRUdOVU0sCisgICAgRV9S MTMyX1JFR05VTSwgRV9GUENGR19SRUdOVU0gPSBFX1IxMzJfUkVHTlVNLAor ICAgIEVfUjEzM19SRUdOVU0sCisgICAgRV9SMTM0X1JFR05VTSwKKyAgICBF X1IxMzVfUkVHTlVNLAorICAgIEVfUjEzNl9SRUdOVU0sCisgICAgRV9SMTM3 X1JFR05VTSwKKyAgICBFX1IxMzhfUkVHTlVNLAorICAgIEVfUjEzOV9SRUdO VU0sCisgICAgRV9SMTQwX1JFR05VTSwKKyAgICBFX1IxNDFfUkVHTlVNLAor ICAgIEVfUjE0Ml9SRUdOVU0sCisgICAgRV9SMTQzX1JFR05VTSwKKyAgICBF X1IxNDRfUkVHTlVNLAorICAgIEVfUjE0NV9SRUdOVU0sCisgICAgRV9SMTQ2 X1JFR05VTSwKKyAgICBFX1IxNDdfUkVHTlVNLAorICAgIEVfUjE0OF9SRUdO VU0sCiAgICAgRV9OVU1fUkVHUwogICB9OwogCkBAIC0xNTIsNyArMjQyLDcg QEAgdjg1MF9yZWdpc3Rlcl9uYW1lIChzdHJ1Y3QgZ2RiYXJjaCAqZ2RiYQog ICAgICJzcjI0IiwgInNyMjUiLCAic3IyNiIsICJzcjI3IiwgInNyMjgiLCAi c3IyOSIsICJzcjMwIiwgInNyMzEiLAogICAgICJwYyIsICJmcCIKICAgfTsK LSAgaWYgKHJlZ251bSA8IDAgfHwgcmVnbnVtID49IEVfTlVNX1JFR1MpCisg IGlmIChyZWdudW0gPCAwIHx8IHJlZ251bSA+IEVfTlVNX09GX1Y4NTBfUkVH UykKICAgICByZXR1cm4gTlVMTDsKICAgcmV0dXJuIHY4NTBfcmVnX25hbWVz W3JlZ251bV07CiB9CkBAIC0xNzIsMTEgKzI2Miw1MCBAQCB2ODUwZV9yZWdp c3Rlcl9uYW1lIChzdHJ1Y3QgZ2RiYXJjaCAqZ2RiCiAgICAgInNyMjQiLCAi c3IyNSIsICJzcjI2IiwgInNyMjciLCAic3IyOCIsICJzcjI5IiwgInNyMzAi LCAic3IzMSIsCiAgICAgInBjIiwgImZwIgogICB9OwotICBpZiAocmVnbnVt IDwgMCB8fCByZWdudW0gPj0gRV9OVU1fUkVHUykKKyAgaWYgKHJlZ251bSA8 IDAgfHwgcmVnbnVtID4gRV9OVU1fT0ZfVjg1MEVfUkVHUykKICAgICByZXR1 cm4gTlVMTDsKICAgcmV0dXJuIHY4NTBlX3JlZ19uYW1lc1tyZWdudW1dOwog fQogCitzdGF0aWMgY29uc3QgY2hhciAqCit2ODUwZTJfcmVnaXN0ZXJfbmFt ZSAoc3RydWN0IGdkYmFyY2ggKmdkYmFyY2gsIGludCByZWdudW0pCit7Cisg IHN0YXRpYyBjb25zdCBjaGFyICp2ODUwZTJfcmVnX25hbWVzW10gPQorICB7 CisgICAgInIwIiwgInIxIiwgInIyIiwgInIzIiwgInI0IiwgInI1IiwgInI2 IiwgInI3IiwKKyAgICAicjgiLCAicjkiLCAicjEwIiwgInIxMSIsICJyMTIi LCAicjEzIiwgInIxNCIsICJyMTUiLAorICAgICJyMTYiLCAicjE3IiwgInIx OCIsICJyMTkiLCAicjIwIiwgInIyMSIsICJyMjIiLCAicjIzIiwKKyAgICAi cjI0IiwgInIyNSIsICJyMjYiLCAicjI3IiwgInIyOCIsICJyMjkiLCAicjMw IiwgInIzMSIsCisKKyAgICAiZWlwYyIsICJlaXBzdyIsICJmZXBjIiwgImZl cHN3IiwgImVjciIsICJwc3ciLCAic3I2IiwgInNyNyIsCisgICAgInNyOCIs ICJzcjkiLCAic3IxMCIsICJzcjExIiwgInNyMTIiLCAic3IxMyIsICJzcjE0 IiwgInNyMTUiLAorICAgICJjdHBjIiwgImN0cHN3IiwgImRicGMiLCAiZGJw c3ciLCAiY3RicCIsICJzcjIxIiwgInNyMjIiLCAic3IyMyIsCisgICAgInNy MjQiLCAic3IyNSIsICJzcjI2IiwgInNyMjciLCAic3IyOCIsICJzcjI5Iiwg InNyMzAiLCAic3IzMSIsCisgICAgInBjIiwgImZwIgorCisgICAgLyogbXB1 MCBzeXN0ZW0gcmVnaXN0ZXJzICovCisgICAgInZpcCIsICJzcjMzIiwgInNy MzQiLCAic3IzNSIsICJ2bWVjciIsICJ2bXRpZCIsICJ2bWFkciIsICJzcjM5 IiwKKyAgICAidnBlY3IiLCAidnB0aWQiLCAidnBhZHIiLCAic3I0MyIsICJ2 ZGVjciIsICJ2ZHRpZCIsICJzcjQ2IiwgInNyNDciLAorICAgICJzcjQ4Iiwg InNyNDkiLCAic3I1MCIsICJzcjUxIiwgInNyNTIiLCAic3I1MyIsICJzcjU0 IiwgInNyNTUiLAorICAgICJzcjU2IiwgInNyNTciLCAic3I1OCIsICJzcjU5 IiwKKworICAgIC8qIG1wdTEgc3lzdGVtIHJlZ2lzdGVycyAqLworICAgICJt cG0iLCAibXBjIiwgInRpZCIsICJwcGEiLCAicHBtIiwgInBwYyIsICJkY2Mi LCAiZGN2MCIsCisgICAgImRjdjEiLCAic3I2OSIsICJzcGFsIiwgInNwYXUi LCAiaXBhMGwiLCAiaXBhMHUiLCAiaXBhMWwiLCAiaXBhMXUiLAorICAgICJp YXAybCIsICJpcGEydSIsICJpcGEzbCIsICJpcGEzdSIsICJkcGEwbCIsICJk cGEwdSIsICJkcGExbCIsICJkcGExdSIsCisgICAgImRwYTJsIiwgImRwYTJ1 IiwgImRwYTNsIiwgImRwYTN1IiwKKworICAgIC8qIGZwdSBzeXN0ZW0gcmVn aXN0ZXJzICovCisgICAgInNyODgiLCAic3I4OSIsICJzcjkwIiwgInNyOTEi LCAic3I5MiIsICJzcjkzIiwgImZwc3IiLCAiZnBlcGMiLAorICAgICJmcHN0 IiwgImZwY2MiLCAiZnBjZmciLCAic3I5OSIsICJzcjEwMCIsICJzcjEwMSIs ICJzcjEwMiIsICJzcjEwMyIsCisgICAgInNyMTA0IiwgInNyMTA1IiwgInNy MTA2IiwgInNyMTA3IiwgInNyMTA4IiwgInNyMTA5IiwgInNyMTEwIiwgInNy MTExIiwKKyAgICAic3IxMTIiLCAic3IxMTMiLCAic3IxMTQiLCAic3IxMTUi CisgIH07CisgIGlmIChyZWdudW0gPCAwIHx8IHJlZ251bSA+PSBFX05VTV9S RUdTKQorICAgIHJldHVybiBOVUxMOworICByZXR1cm4gdjg1MGUyX3JlZ19u YW1lc1tyZWdudW1dOworfQorCiAvKiBSZXR1cm5zIHRoZSBkZWZhdWx0IHR5 cGUgZm9yIHJlZ2lzdGVyIE4uICAqLwogCiBzdGF0aWMgc3RydWN0IHR5cGUg KgpAQCAtOTk2LDYgKzExMjUsMTAgQEAgdjg1MF9nZGJhcmNoX2luaXQgKHN0 cnVjdCBnZGJhcmNoX2luZm8gaQogICAgIGNhc2UgYmZkX21hY2hfdjg1MGUx OgogICAgICAgc2V0X2dkYmFyY2hfcmVnaXN0ZXJfbmFtZSAoZ2RiYXJjaCwg djg1MGVfcmVnaXN0ZXJfbmFtZSk7CiAgICAgICBicmVhazsKKyAgICBjYXNl IGJmZF9tYWNoX3Y4NTBlMjoKKyAgICBjYXNlIGJmZF9tYWNoX3Y4NTBlMnYz OgorICAgICAgc2V0X2dkYmFyY2hfcmVnaXN0ZXJfbmFtZSAoZ2RiYXJjaCwg djg1MGUyX3JlZ2lzdGVyX25hbWUpOworICAgICAgYnJlYWs7CiAgICAgfQog CiAgIHNldF9nZGJhcmNoX251bV9yZWdzIChnZGJhcmNoLCBFX05VTV9SRUdT KTsKZGlmZiAtdXBOciBnZGItNy4yLjUwLW9yaWdpbmFsL3NpbS9jb21tb24v c2ltLXRyYWNlLmMgZ2RiLTcuMi41MC1tb2RpZmllZC9zaW0vY29tbW9uL3Np bS10cmFjZS5jCi0tLSBnZGItNy4yLjUwLW9yaWdpbmFsL3NpbS9jb21tb24v c2ltLXRyYWNlLmMJMjAxMC0wNC0xMiAyMjoyMzozMy4wMDAwMDAwMDAgKzA1 MzAKKysrIGdkYi03LjIuNTAtbW9kaWZpZWQvc2ltL2NvbW1vbi9zaW0tdHJh Y2UuYwkyMDEwLTEyLTA4IDE0OjM3OjU3LjAwMDAwMDAwMCArMDUzMApAQCAt NDg2LDE3ICs0ODYsNiBAQCB0cmFjZV91bmluc3RhbGwgKFNJTV9ERVNDIHNk KQogICAgIH0KIH0KIAwKLXR5cGVkZWYgZW51bSB7Ci0gIHRyYWNlX2ZtdF9p bnZhbGlkLAotICB0cmFjZV9mbXRfd29yZCwKLSAgdHJhY2VfZm10X2ZwLAot ICB0cmFjZV9mbXRfZnB1LAotICB0cmFjZV9mbXRfc3RyaW5nLAotICB0cmFj ZV9mbXRfYm9vbCwKLSAgdHJhY2VfZm10X2FkZHIsCi0gIHRyYWNlX2ZtdF9p bnN0cnVjdGlvbl9pbmNvbXBsZXRlLAotfSBkYXRhX2ZtdDsKLQogLyogY29t cHV0ZSB0aGUgbnIgb2YgdHJhY2UgZGF0YSB1bml0cyBjb25zdW1lZCBieSBk YXRhICovCiBzdGF0aWMgaW50CiBzYXZlX2RhdGFfc2l6ZSAoVFJBQ0VfREFU QSAqZGF0YSwKQEAgLTUwOCw3ICs0OTcsNyBAQCBzYXZlX2RhdGFfc2l6ZSAo VFJBQ0VfREFUQSAqZGF0YSwKIAogCiAvKiBBcmNoaXZlIERBVEEgaW50byB0 aGUgdHJhY2UgYnVmZmVyICovCi1zdGF0aWMgdm9pZAordm9pZAogc2F2ZV9k YXRhIChTSU1fREVTQyBzZCwKIAkgICBUUkFDRV9EQVRBICpkYXRhLAogCSAg IGRhdGFfZm10IGZtdCwKZGlmZiAtdXBOciBnZGItNy4yLjUwLW9yaWdpbmFs L3NpbS9jb21tb24vc2ltLXRyYWNlLmggZ2RiLTcuMi41MC1tb2RpZmllZC9z aW0vY29tbW9uL3NpbS10cmFjZS5oCi0tLSBnZGItNy4yLjUwLW9yaWdpbmFs L3NpbS9jb21tb24vc2ltLXRyYWNlLmgJMjAxMC0wMS0wMSAxNTozMzoyNy4w MDAwMDAwMDAgKzA1MzAKKysrIGdkYi03LjIuNTAtbW9kaWZpZWQvc2ltL2Nv bW1vbi9zaW0tdHJhY2UuaAkyMDEwLTEyLTA4IDE0OjM3OjU5LjAwMDAwMDAw MCArMDUzMApAQCAtMjQzLDkgKzI0MywyNiBAQCBleHRlcm4gdm9pZCB0cmFj ZV9nZW5lcmljIFBBUkFNUyAoKFNJTV9ECiAJCQkJICAgLi4uKSkKICAgICAg X19hdHRyaWJ1dGVfXygoZm9ybWF0IChwcmludGYsIDQsIDUpKSk7CiAKK3R5 cGVkZWYgZW51bSB7CisgIHRyYWNlX2ZtdF9pbnZhbGlkLAorICB0cmFjZV9m bXRfd29yZCwKKyAgdHJhY2VfZm10X2ZwLAorICB0cmFjZV9mbXRfZnB1LAor ICB0cmFjZV9mbXRfc3RyaW5nLAorICB0cmFjZV9mbXRfYm9vbCwKKyAgdHJh Y2VfZm10X2FkZHIsCisgIHRyYWNlX2ZtdF9pbnN0cnVjdGlvbl9pbmNvbXBs ZXRlLAorfSBkYXRhX2ZtdDsKKwogLyogVHJhY2UgYSB2YXJ5aW5nIG51bWJl ciBvZiB3b3JkIHNpemVkIGlucHV0cy9vdXRwdXRzLiAgdHJhY2VfcmVzdWx0 KgogICAgbXVzdCBiZSBjYWxsZWQgdG8gY2xvc2UgdGhlIHRyYWNlIG9wZXJh dGlvbi4gKi8KIAorZXh0ZXJuIHZvaWQgc2F2ZV9kYXRhIFBBUkFNUyAoKFNJ TV9ERVNDIHNkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRS QUNFX0RBVEEgKmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgZGF0YV9mbXQgZm10LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGxvbmcgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBjb25zdCB2b2lkICpidWYpKTsKKwogZXh0ZXJuIHZvaWQgdHJhY2VfaW5w dXQwIFBBUkFNUyAoKFNJTV9ERVNDIHNkLAogCQkJCSAgc2ltX2NwdSAqY3B1 LAogCQkJCSAgaW50IHRyYWNlX2lkeCkpOwpkaWZmIC11cE5yIGdkYi03LjIu NTAtb3JpZ2luYWwvc2ltL3Y4NTAvc2ltLW1haW4uaCBnZGItNy4yLjUwLW1v ZGlmaWVkL3NpbS92ODUwL3NpbS1tYWluLmgKLS0tIGdkYi03LjIuNTAtb3Jp Z2luYWwvc2ltL3Y4NTAvc2ltLW1haW4uaAkyMDAyLTExLTMwIDIzOjMxOjMw LjAwMDAwMDAwMCArMDUzMAorKysgZ2RiLTcuMi41MC1tb2RpZmllZC9zaW0v djg1MC9zaW0tbWFpbi5oCTIwMTAtMTItMDggMTQ6NTI6NDAuMDAwMDAwMDAw ICswNTMwCkBAIC0xNSw2ICsxNSw3IEBACiAKICNpbmNsdWRlICJzaW0tYmFz aWNzLmgiCiAjaW5jbHVkZSAic2ltLXNpZ25hbC5oIgorI2luY2x1ZGUgInNp bS1mcHUuaCIKIAogdHlwZWRlZiBhZGRyZXNzX3dvcmQgc2ltX2NpYTsKIApA QCAtMzksNyArNDAsMTAgQEAgdHlwZWRlZiBzdHJ1Y3QgX3Y4NTBfcmVncyB7 CiAgIHJlZ190IHJlZ3NbMzJdOwkJLyogZ2VuZXJhbC1wdXJwb3NlIHJlZ2lz dGVycyAqLwogICByZWdfdCBzcmVnc1szMl07CQkvKiBzeXN0ZW0gcmVnaXN0 ZXJzLCBpbmNsdWRpbmcgcHN3ICovCiAgIHJlZ190IHBjOwotICBpbnQgZHVt bXlfbWVtOwkJLyogd2hlcmUgaW52YWxpZCBhY2Nlc3NlcyBnbyAqLworICBp bnQgZHVtbXlfbWVtOyAgICAgICAgICAgICAgICAvKiB3aGVyZSBpbnZhbGlk IGFjY2Vzc2VzIGdvICovCisgIHJlZ190IG1wdTBfc3JlZ3NbMjhdOyAgICAg ICAgIC8qIG1wdTAgc3lzdGVtIHJlZ2lzdGVycyAqLworICByZWdfdCBtcHUx X3NyZWdzWzI4XTsgICAgICAgICAvKiBtcHUxIHN5c3RlbSByZWdpc3RlcnMg Ki8KKyAgcmVnX3QgZnB1X3NyZWdzWzI4XTsgICAgICAgICAgLyogZnB1IHN5 c3RlbSByZWdpc3RlcnMgKi8KIH0gdjg1MF9yZWdzOwogCiBzdHJ1Y3QgX3Np bV9jcHUKQEAgLTYxLDYgKzY1LDcgQEAgc3RydWN0IHNpbV9zdGF0ZSB7CiAj ZGVmaW5lIFNUQVRFX0NQVShzZCxuKSAoJihzZCktPmNwdVtuXSkKICNlbHNl CiAjZGVmaW5lIFNUQVRFX0NQVShzZCxuKSAoJihzZCktPmNwdVswXSkKKyNk ZWZpbmUgQ1BVIChTVEFURV9DUFUgKHNkLCAwKSkKICNlbmRpZgogI2lmIDAK ICAgU0lNX0FERFIgcm9tX3NpemU7CkBAIC0xMjIsMTEgKzEyNywxNSBAQCBu aWEgPSBQQwogLyogbmV3ICovCiAjZGVmaW5lIEdSICAoKENQVSktPnJlZy5y ZWdzKQogI2RlZmluZSBTUiAgKChDUFUpLT5yZWcuc3JlZ3MpCisjZGVmaW5l IE1QVTBfU1IgICgoQ1BVKS0+cmVnLm1wdTBfc3JlZ3MpCisjZGVmaW5lIE1Q VTFfU1IgICgoQ1BVKS0+cmVnLm1wdTFfc3JlZ3MpCisjZGVmaW5lIEZQVV9T UiAgICgoQ1BVKS0+cmVnLmZwdV9zcmVncykKIAogLyogb2xkICovCiAjZGVm aW5lIFN0YXRlICAgIChTVEFURV9DUFUgKHNpbXVsYXRvciwgMCktPnJlZykK ICNkZWZpbmUgUEMJKFN0YXRlLnBjKQotI2RlZmluZSBTUAkoU3RhdGUucmVn c1szXSkKKyNkZWZpbmUgU1BfUkVHTk8gICAgICAgIDMKKyNkZWZpbmUgU1Ag ICAgICAoU3RhdGUucmVnc1tTUF9SRUdOT10pCiAjZGVmaW5lIEVQCShTdGF0 ZS5yZWdzWzMwXSkKIAogI2RlZmluZSBFSVBDICAoU3RhdGUuc3JlZ3NbMF0p CkBAIC0xMzUsMTEgKzE0NCwyMCBAQCBuaWEgPSBQQwogI2RlZmluZSBGRVBT VyAoU3RhdGUuc3JlZ3NbM10pCiAjZGVmaW5lIEVDUiAgIChTdGF0ZS5zcmVn c1s0XSkKICNkZWZpbmUgUFNXICAgKFN0YXRlLnNyZWdzWzVdKQorI2RlZmlu ZSBQU1dfUkVHTk8gICA1CisjZGVmaW5lIEVJSUMgIChTUlsxM10pCisjZGVm aW5lIEZFSUMgIChTUlsxNF0pCisjZGVmaW5lIERCSUMgIChTUlsxNV0pCiAj ZGVmaW5lIENUUEMgIChTUlsxNl0pCiAjZGVmaW5lIENUUFNXIChTUlsxN10p CiAjZGVmaW5lIERCUEMgIChTdGF0ZS5zcmVnc1sxOF0pCiAjZGVmaW5lIERC UFNXIChTdGF0ZS5zcmVnc1sxOV0pCiAjZGVmaW5lIENUQlAgIChTdGF0ZS5z cmVnc1syMF0pCisjZGVmaW5lIERJUiAgIChTUlsyMV0pCisjZGVmaW5lIEVJ V1IgIChTUlsyOF0pCisjZGVmaW5lIEZFV1IgIChTUlsyOV0pCisjZGVmaW5l IERCV1IgIChTUlszMF0pCisjZGVmaW5lIEJTRUwgIChTUlszMV0pCiAKICNk ZWZpbmUgUFNXX1VTIEJJVDMyICg4KQogI2RlZmluZSBQU1dfTlAgMHg4MApA QCAtMTUxLDYgKzE2OSwyMTAgQEAgbmlhID0gUEMKICNkZWZpbmUgUFNXX1Mg MHgyCiAjZGVmaW5lIFBTV19aIDB4MQogCisjZGVmaW5lIFBTV19OUFYJKDE8 PDE4KQorI2RlZmluZSBQU1dfRE1QCSgxPDwxNykKKyNkZWZpbmUgUFNXX0lN UAkoMTw8MTYpCisKKyNkZWZpbmUgRUNSX0VJQ0MgMHgwMDAwZmZmZgorI2Rl ZmluZSBFQ1JfRkVDQyAweGZmZmYwMDAwCisKKy8qIEZQVSAqLworCisjZGVm aW5lIEZQU1IgIChGUFVfU1JbNl0pCisjZGVmaW5lIEZQU1JfUkVHTk8gNgor I2RlZmluZSBGUEVQQyAoRlBVX1NSWzddKQorI2RlZmluZSBGUFNUICAoRlBV X1NSWzhdKQorI2RlZmluZSBGUFNUX1JFR05PIDgKKyNkZWZpbmUgRlBDQyAg KEZQVV9TUls5XSkKKyNkZWZpbmUgRlBDRkcgKEZQVV9TUlsxMF0pCisjZGVm aW5lIEZQQ0ZHX1JFR05PIDEwCisKKyNkZWZpbmUgRlBTUl9ERU0gIDB4MDAy MDAwMDAKKyNkZWZpbmUgRlBTUl9TRU0gIDB4MDAxMDAwMDAKKyNkZWZpbmUg RlBTUl9STSAgIDB4MDAwYzAwMDAKKyNkZWZpbmUgRlBTUl9STiAgIDB4MDAw MDAwMDAKKyNkZWZpbmUgRlBTUl9GUyAgIDB4MDAwMjAwMDAKKyNkZWZpbmUg RlBTUl9QUiAgIDB4MDAwMTAwMDAKKworI2RlZmluZSBGUFNSX1hDICAgMHgw MDAwZmMwMAorI2RlZmluZSBGUFNSX1hDRSAgMHgwMDAwODAwMAorI2RlZmlu ZSBGUFNSX1hDViAgMHgwMDAwNDAwMAorI2RlZmluZSBGUFNSX1hDWiAgMHgw MDAwMjAwMAorI2RlZmluZSBGUFNSX1hDTyAgMHgwMDAwMTAwMAorI2RlZmlu ZSBGUFNSX1hDVSAgMHgwMDAwMDgwMAorI2RlZmluZSBGUFNSX1hDSSAgMHgw MDAwMDQwMAorCisjZGVmaW5lIEZQU1JfWEUgICAweDAwMDAwM2UwCisjZGVm aW5lIEZQU1JfWEVWICAweDAwMDAwMjAwCisjZGVmaW5lIEZQU1JfWEVaICAw eDAwMDAwMTAwCisjZGVmaW5lIEZQU1JfWEVPICAweDAwMDAwMDgwCisjZGVm aW5lIEZQU1JfWEVVICAweDAwMDAwMDQwCisjZGVmaW5lIEZQU1JfWEVJICAw eDAwMDAwMDIwCisKKyNkZWZpbmUgRlBTUl9YUCAgIDB4MDAwMDAwMWYKKyNk ZWZpbmUgRlBTUl9YUFYgIDB4MDAwMDAwMTAKKyNkZWZpbmUgRlBTUl9YUFog IDB4MDAwMDAwMDgKKyNkZWZpbmUgRlBTUl9YUE8gIDB4MDAwMDAwMDQKKyNk ZWZpbmUgRlBTUl9YUFUgIDB4MDAwMDAwMDIKKyNkZWZpbmUgRlBTUl9YUEkg IDB4MDAwMDAwMDEKKworI2RlZmluZSBGUFNUX1BSICAgMHgwMDAwODAwMCAK KyNkZWZpbmUgRlBTVF9YQ0UgIDB4MDAwMDIwMDAgCisjZGVmaW5lIEZQU1Rf WENWICAweDAwMDAxMDAwIAorI2RlZmluZSBGUFNUX1hDWiAgMHgwMDAwMDgw MCAKKyNkZWZpbmUgRlBTVF9YQ08gIDB4MDAwMDA0MDAgCisjZGVmaW5lIEZQ U1RfWENVICAweDAwMDAwMjAwIAorI2RlZmluZSBGUFNUX1hDSSAgMHgwMDAw MDEwMCAKKworI2RlZmluZSBGUFNUX1hQViAgMHgwMDAwMDAxMCAKKyNkZWZp bmUgRlBTVF9YUFogIDB4MDAwMDAwMDggCisjZGVmaW5lIEZQU1RfWFBPICAw eDAwMDAwMDA0IAorI2RlZmluZSBGUFNUX1hQVSAgMHgwMDAwMDAwMiAKKyNk ZWZpbmUgRlBTVF9YUEkgIDB4MDAwMDAwMDEgCisKKyNkZWZpbmUgRlBDRkdf Uk0gICAweDAwMDAwMTgwIAorI2RlZmluZSBGUENGR19YRVYgIDB4MDAwMDAw MTAgCisjZGVmaW5lIEZQQ0ZHX1hFWiAgMHgwMDAwMDAwOCAKKyNkZWZpbmUg RlBDRkdfWEVPICAweDAwMDAwMDA0IAorI2RlZmluZSBGUENGR19YRVUgIDB4 MDAwMDAwMDIgCisjZGVmaW5lIEZQQ0ZHX1hFSSAgMHgwMDAwMDAwMSAKKwor I2RlZmluZSBHRVRfRlBDQygpXAorICgoRlBTUiA+PiAyNCkgJjB4ZikKKwor I2RlZmluZSBDTEVBUl9GUENDKGJiYilcCisgIChGUFNSICY9IH4oMSA8PCAo YmJiKzI0KSkpCisKKyNkZWZpbmUgU0VUX0ZQQ0MoYmJiKVwKKyAoRlBTUiB8 PSAxIDw8IChiYmIrMjQpKQorCisjZGVmaW5lIFRFU1RfRlBDQyhiYmIpXAor ICAoKEZQU1IgJiAoMSA8PCAoYmJiKzI0KSkpICE9IDApCisKKyNkZWZpbmUg RlBTUl9HRVRfUk9VTkQoKQkJCQkJXAorICAoKChGUFNSICYgRlBTUl9STSkg PT0gRlBTUl9STikgPyBzaW1fZnB1X3JvdW5kX25lYXIJCVwKKyAgIDogKChG UFNSICYgRlBTUl9STSkgPT0gMHgwMDA0MDAwMCkgPyBzaW1fZnB1X3JvdW5k X3VwCVwKKyAgIDogKChGUFNSICYgRlBTUl9STSkgPT0gMHgwMDA4MDAwMCkg PyBzaW1fZnB1X3JvdW5kX2Rvd24JXAorICAgOiBzaW1fZnB1X3JvdW5kX3pl cm8pCisKKworZW51bSBGUFVfQ09NUEFSRSB7CisgIEZQVV9DTVBfRiA9IDAs CisgIEZQVV9DTVBfVU4sCisgIEZQVV9DTVBfRVEsCisgIEZQVV9DTVBfVUVR LAorICBGUFVfQ01QX09MVCwKKyAgRlBVX0NNUF9VTFQsCisgIEZQVV9DTVBf T0xFLAorICBGUFVfQ01QX1VMRSwKKyAgRlBVX0NNUF9TRiwKKyAgRlBVX0NN UF9OR0xFLAorICBGUFVfQ01QX1NFUSwKKyAgRlBVX0NNUF9OR0wsCisgIEZQ VV9DTVBfTFQsCisgIEZQVV9DTVBfTkdFLAorICBGUFVfQ01QX0xFLAorICBG UFVfQ01QX05HVAorfTsKKworCisvKiBNUFUgKi8KKyNkZWZpbmUgTVBNCShN UFUxX1NSWzBdKQorI2RlZmluZSBNUEMJKE1QVTFfU1JbMV0pCisjZGVmaW5l IE1QQ19SRUdOTyAxCisjZGVmaW5lIFRJRAkoTVBVMV9TUlsyXSkKKyNkZWZp bmUgUFBBCShNUFUxX1NSWzNdKQorI2RlZmluZSBQUE0JKE1QVTFfU1JbNF0p CisjZGVmaW5lIFBQQwkoTVBVMV9TUls1XSkKKyNkZWZpbmUgRENDCShNUFUx X1NSWzZdKQorI2RlZmluZSBEQ1YwCShNUFUxX1NSWzddKQorI2RlZmluZSBE Q1YxCShNUFUxX1NSWzhdKQorI2RlZmluZSBTUEFMCShNUFUxX1NSWzEwXSkK KyNkZWZpbmUgU1BBVQkoTVBVMV9TUlsxMV0pCisjZGVmaW5lIElQQTBMCShN UFUxX1NSWzEyXSkKKyNkZWZpbmUgSVBBMFUJKE1QVTFfU1JbMTNdKQorI2Rl ZmluZSBJUEExTAkoTVBVMV9TUlsxNF0pCisjZGVmaW5lIElQQTFVCShNUFUx X1NSWzE1XSkKKyNkZWZpbmUgSVBBMkwJKE1QVTFfU1JbMTZdKQorI2RlZmlu ZSBJUEEyVQkoTVBVMV9TUlsxN10pCisjZGVmaW5lIElQQTNMCShNUFUxX1NS WzE4XSkKKyNkZWZpbmUgSVBBM1UJKE1QVTFfU1JbMTldKQorI2RlZmluZSBE UEEwTAkoTVBVMV9TUlsyMF0pCisjZGVmaW5lIERQQTBVCShNUFUxX1NSWzIx XSkKKyNkZWZpbmUgRFBBMUwJKE1QVTFfU1JbMjJdKQorI2RlZmluZSBEUEEx VQkoTVBVMV9TUlsyM10pCisjZGVmaW5lIERQQTJMCShNUFUxX1NSWzI0XSkK KyNkZWZpbmUgRFBBMlUJKE1QVTFfU1JbMjVdKQorI2RlZmluZSBEUEEzTAko TVBVMV9TUlsyNl0pCisjZGVmaW5lIERQQTNVCShNUFUxX1NSWzI3XSkKKwor I2RlZmluZSBQUENfUFBFIDB4MQorI2RlZmluZSBTUEFMX1NQRSAweDEKKyNk ZWZpbmUgU1BBTF9TUFMgMHgxMAorCisjZGVmaW5lIFZJUAkoTVBVMF9TUlsw XSkKKyNkZWZpbmUgVk1FQ1IJKE1QVTBfU1JbNF0pCisjZGVmaW5lIFZNVElE CShNUFUwX1NSWzVdKQorI2RlZmluZSBWTUFEUgkoTVBVMF9TUls2XSkKKyNk ZWZpbmUgVlBFQ1IJKE1QVTBfU1JbOF0pCisjZGVmaW5lIFZQVElECShNUFUw X1NSWzldKQorI2RlZmluZSBWUEFEUgkoTVBVMF9TUlsxMF0pCisjZGVmaW5l IFZERUNSCShNUFUwX1NSWzEyXSkKKyNkZWZpbmUgVkRUSUQJKE1QVTBfU1Jb MTNdKQorCisjZGVmaW5lIE1QTV9BVUUJMHgyCisjZGVmaW5lIE1QTV9NUEUJ MHgxCisKKyNkZWZpbmUgVk1FQ1JfVk1YICAgMHgyCisjZGVmaW5lIFZNRUNS X1ZNUiAgIDB4NAorI2RlZmluZSBWTUVDUl9WTVcgICAweDgKKyNkZWZpbmUg Vk1FQ1JfVk1TICAgMHgxMAorI2RlZmluZSBWTUVDUl9WTVJNVyAweDIwCisj ZGVmaW5lIFZNRUNSX1ZNTVMgIDB4NDAKKworI2RlZmluZSBJUEEyQUREUihJ UEEpCSgoSVBBKSAmIDB4MWZmZmZmODApCisjZGVmaW5lIElQQV9JUEUJMHgx IAorI2RlZmluZSBJUEFfSVBYCTB4MiAKKyNkZWZpbmUgSVBBX0lQUgkweDQg CisjZGVmaW5lIElQRTAJKElQQTBMICYgSVBBX0lQRSkKKyNkZWZpbmUgSVBF MQkoSVBBMUwgJiBJUEFfSVBFKQorI2RlZmluZSBJUEUyCShJUEEyTCAmIElQ QV9JUEUpCisjZGVmaW5lIElQRTMJKElQQTNMICYgSVBBX0lQRSkKKyNkZWZp bmUgSVBYMAkoSVBBMEwgJiBJUEFfSVBYKQorI2RlZmluZSBJUFgxCShJUEEx TCAmIElQQV9JUFgpCisjZGVmaW5lIElQWDIJKElQQTJMICYgSVBBX0lQWCkK KyNkZWZpbmUgSVBYMwkoSVBBM0wgJiBJUEFfSVBYKQorI2RlZmluZSBJUFIw CShJUEEwTCAmIElQQV9JUFIpCisjZGVmaW5lIElQUjEJKElQQTFMICYgSVBB X0lQUikKKyNkZWZpbmUgSVBSMgkoSVBBMkwgJiBJUEFfSVBSKQorI2RlZmlu ZSBJUFIzCShJUEEzTCAmIElQQV9JUFIpCisKKyNkZWZpbmUgRFBBMkFERFIo RFBBKQkoKERQQSkgJiAweDFmZmZmZjgwKQorI2RlZmluZSBEUEFfRFBFIDB4 MQkKKyNkZWZpbmUgRFBBX0RQUiAweDQJCisjZGVmaW5lIERQQV9EUFcgMHg4 CQorI2RlZmluZSBEUEUwCShEUEEwTCAmIERQQV9EUEUpCisjZGVmaW5lIERQ RTEJKERQQTFMICYgRFBBX0RQRSkKKyNkZWZpbmUgRFBFMgkoRFBBMkwgJiBE UEFfRFBFKQorI2RlZmluZSBEUEUzCShEUEEzTCAmIERQQV9EUEUpCisjZGVm aW5lIERQUjAJKERQQTBMICYgRFBBX0RQUikKKyNkZWZpbmUgRFBSMQkoRFBB MUwgJiBEUEFfRFBSKQorI2RlZmluZSBEUFIyCShEUEEyTCAmIERQQV9EUFIp CisjZGVmaW5lIERQUjMJKERQQTNMICYgRFBBX0RQUikKKyNkZWZpbmUgRFBX MAkoRFBBMEwgJiBEUEFfRFBXKQorI2RlZmluZSBEUFcxCShEUEExTCAmIERQ QV9EUFcpCisjZGVmaW5lIERQVzIJKERQQTJMICYgRFBBX0RQVykKKyNkZWZp bmUgRFBXMwkoRFBBM0wgJiBEUEFfRFBXKQorCisjZGVmaW5lIERDQ19EQ0Uw IDB4MQorI2RlZmluZSBEQ0NfRENFMSAweDEwMDAwCisKKyNkZWZpbmUgUFBB MkFERFIoUFBBKQkoKFBQQSkgJiAweDFmZmZmZjgwKSAKKyNkZWZpbmUgUFBD X1BQQyAweGZmZmZmZmZlCisjZGVmaW5lIFBQQ19QUEUgMHgxCisjZGVmaW5l IFBQQ19QUE0gMHgwMDAwZmZmOAorCisKICNkZWZpbmUgU0VYVDMoeCkJKCgo KHgpJjB4NyleKH4weDMpKSsweDQpCQogCiAvKiBzaWduLWV4dGVuZCBhIDQt Yml0IG51bWJlciAqLwpAQCAtMzQ0LDYgKzU2Niw3OSBAQCBkbyB7IFwKICAg fSBcCiB9IHdoaWxlICgwKQogCisjZGVmaW5lIFRSQUNFX0ZQX0lOUFVUX0ZQ VTEoVjApCVwKK2RvIHsgXAorICBpZiAoVFJBQ0VfRlBVX1AgKENQVSkpIFwK KyAgICB7IFwKKyAgICAgIHVuc2lnbmVkNjQgZjA7IFwKKyAgICAgIHNpbV9m cHVfdG82NCAoJmYwLCAoVjApKTsgXAorICAgICAgdHJhY2VfaW5wdXRfZnAx IChTRCwgQ1BVLCBUUkFDRV9GUFVfSURYLCBmMCk7IFwKKyAgICB9IFwKK30g d2hpbGUgKDApCisKKyNkZWZpbmUgVFJBQ0VfRlBfSU5QVVRfRlBVMihWMCwg VjEpIFwKK2RvIHsgXAorICBpZiAoVFJBQ0VfRlBVX1AgKENQVSkpIFwKKyAg ICB7IFwKKyAgICAgIHVuc2lnbmVkNjQgZjAsIGYxOyBcCisgICAgICBzaW1f ZnB1X3RvNjQgKCZmMCwgKFYwKSk7IFwKKyAgICAgIHNpbV9mcHVfdG82NCAo JmYxLCAoVjEpKTsgXAorICAgICAgdHJhY2VfaW5wdXRfZnAyIChTRCwgQ1BV LCBUUkFDRV9GUFVfSURYLCBmMCwgZjEpOwlcCisgICAgfSBcCit9IHdoaWxl ICgwKQorCisjZGVmaW5lIFRSQUNFX0ZQX0lOUFVUX0ZQVTMoVjAsIFYxLCBW MikgXAorZG8geyBcCisgIGlmIChUUkFDRV9GUFVfUCAoQ1BVKSkgXAorICAg IHsgXAorICAgICAgdW5zaWduZWQ2NCBmMCwgZjEsIGYyOyBcCisgICAgICBz aW1fZnB1X3RvNjQgKCZmMCwgKFYwKSk7IFwKKyAgICAgIHNpbV9mcHVfdG82 NCAoJmYxLCAoVjEpKTsgXAorICAgICAgc2ltX2ZwdV90bzY0ICgmZjIsIChW MikpOyBcCisgICAgICB0cmFjZV9pbnB1dF9mcDMgKFNELCBDUFUsIFRSQUNF X0ZQVV9JRFgsIGYwLCBmMSwgZjIpOyBcCisgICAgfSBcCit9IHdoaWxlICgw KQorCisjZGVmaW5lIFRSQUNFX0ZQX0lOUFVUX0JPT0wxX0ZQVTIoVjAsIFYx LCBWMikgXAorZG8geyBcCisgIGlmIChUUkFDRV9GUFVfUCAoQ1BVKSkgXAor ICAgIHsgXAorICAgICAgaW50IGQwID0gKFYwKTsgXAorICAgICAgdW5zaWdu ZWQ2NCBmMSwgZjI7IFwKKyAgICAgIFRSQUNFX0RBVEEgKmRhdGEgPSBDUFVf VFJBQ0VfREFUQSAoQ1BVKTsgXAorICAgICAgVFJBQ0VfSURYIChkYXRhKSA9 IFRSQUNFX0ZQVV9JRFg7CVwKKyAgICAgIHNpbV9mcHVfdG82NCAoJmYxLCAo VjEpKTsgXAorICAgICAgc2ltX2ZwdV90bzY0ICgmZjIsIChWMikpOyBcCisg ICAgICBzYXZlX2RhdGEgKFNELCBkYXRhLCB0cmFjZV9mbXRfYm9vbCwgc2l6 ZW9mIChkMCksICZkMCk7IFwKKyAgICAgIHNhdmVfZGF0YSAoU0QsIGRhdGEs IHRyYWNlX2ZtdF9mcCwgc2l6ZW9mIChmcF93b3JkKSwgJmYxKTsgXAorICAg ICAgc2F2ZV9kYXRhIChTRCwgZGF0YSwgdHJhY2VfZm10X2ZwLCBzaXplb2Yg KGZwX3dvcmQpLCAmZjIpOyBcCisgICAgfSBcCit9IHdoaWxlICgwKQorCisj ZGVmaW5lIFRSQUNFX0ZQX0lOUFVUX1dPUkQyKFYwLCBWMSkgXAorZG8geyBc CisgIGlmIChUUkFDRV9GUFVfUCAoQ1BVKSkgXAorICAgIHRyYWNlX2lucHV0 X3dvcmQyIChTRCwgQ1BVLCBUUkFDRV9GUFVfSURYLCAoVjApLCAoVjEpKTsg XAorfSB3aGlsZSAoMCkKKworI2RlZmluZSBUUkFDRV9GUF9SRVNVTFRfRlBV MShSMCkgXAorZG8geyBcCisgIGlmIChUUkFDRV9GUFVfUCAoQ1BVKSkgXAor ICAgIHsgXAorICAgICAgdW5zaWduZWQ2NCBmMDsgXAorICAgICAgc2ltX2Zw dV90bzY0ICgmZjAsIChSMCkpOwlcCisgICAgICB0cmFjZV9yZXN1bHRfZnAx IChTRCwgQ1BVLCBUUkFDRV9GUFVfSURYLCBmMCk7IFwKKyAgICB9IFwKK30g d2hpbGUgKDApCisKKyNkZWZpbmUgVFJBQ0VfRlBfUkVTVUxUX1dPUkQxKFIw KSBUUkFDRV9GUF9SRVNVTFRfV09SRChSMCkKKworI2RlZmluZSBUUkFDRV9G UF9SRVNVTFRfV09SRDIoUjAsIFIxKSBcCitkbyB7IFwKKyAgaWYgKFRSQUNF X0ZQVV9QIChDUFUpKSBcCisgICAgdHJhY2VfcmVzdWx0X3dvcmQyIChTRCwg Q1BVLCBUUkFDRV9GUFVfSURYLCAoUjApLCAoUjEpKTsgXAorfSB3aGlsZSAo MCkKKwogI2Vsc2UKICNkZWZpbmUgdHJhY2VfaW5wdXQoTkFNRSwgSU4xLCBJ TjIpCiAjZGVmaW5lIHRyYWNlX291dHB1dChSRVNVTFQpCmRpZmYgLXVwTnIg Z2RiLTcuMi41MC1vcmlnaW5hbC9zaW0vdjg1MC9zaW1vcHMuYyBnZGItNy4y LjUwLW1vZGlmaWVkL3NpbS92ODUwL3NpbW9wcy5jCi0tLSBnZGItNy4yLjUw LW9yaWdpbmFsL3NpbS92ODUwL3NpbW9wcy5jCTIwMDgtMDItMDYgMTA6MTE6 MjYuMDAwMDAwMDAwICswNTMwCisrKyBnZGItNy4yLjUwLW1vZGlmaWVkL3Np bS92ODUwL3NpbW9wcy5jCTIwMTAtMTItMDggMTQ6NTI6NTQuMDAwMDAwMDAw ICswNTMwCkBAIC0zMjAsNyArMzIwLDcgQEAgY29uZGl0aW9uX21ldCAodW5z aWduZWQgY29kZSkKICAgcmV0dXJuIDE7CiB9CiAKLXN0YXRpYyB1bnNpZ25l ZCBsb25nCit1bnNpZ25lZCBsb25nCiBBZGQzMiAodW5zaWduZWQgbG9uZyBh MSwgdW5zaWduZWQgbG9uZyBhMiwgaW50ICogY2FycnkpCiB7CiAgIHVuc2ln bmVkIGxvbmcgcmVzdWx0ID0gKGExICsgYTIpOwpAQCAtMjc2MSwzICsyNzYx LDcxNyBAQCBPUF8zMDdFMCAodm9pZCkKICAgcmV0dXJuIDQ7CiB9CiAKKy8q IFY4NTBFMlIgRlBVIGZ1bmN0aW9ucyAqLworLyoKKyAgc2ltX2ZwdV9zdGF0 dXNfaW52YWxpZF9zbmFuID0gMSwJCQkJLVYtLS0gKHNpbSBzcGVjLikKKyAg c2ltX2ZwdV9zdGF0dXNfaW52YWxpZF9xbmFuID0gMiwJCQkJLS0tLS0gKHNp bSBzcGVjLikKKyAgc2ltX2ZwdV9zdGF0dXNfaW52YWxpZF9pc2kgPSA0LCAo aW5mIC0gaW5mKQkJCS1WLS0tCisgIHNpbV9mcHVfc3RhdHVzX2ludmFsaWRf aWRpID0gOCwgKGluZiAvIGluZikJCQktVi0tLQorICBzaW1fZnB1X3N0YXR1 c19pbnZhbGlkX3pkeiA9IDE2LCAoMCAvIDApCQkJLVYtLS0KKyAgc2ltX2Zw dV9zdGF0dXNfaW52YWxpZF9pbXogPSAzMiwgKGluZiAqIDApCQkJLVYtLS0K KyAgc2ltX2ZwdV9zdGF0dXNfaW52YWxpZF9jdmkgPSA2NCwgY29udmVydCB0 byBpbnRlZ2VyCQktVi0tLQorICBzaW1fZnB1X3N0YXR1c19pbnZhbGlkX2Rp djAgPSAxMjgsIChYIC8gMCkJCQktLVotLQorICBzaW1fZnB1X3N0YXR1c19p bnZhbGlkX2NtcCA9IDI1NiwgY29tcGFyZQkJCS0tLS0tIChzaW0gc3BlYy4p CisgIHNpbV9mcHVfc3RhdHVzX2ludmFsaWRfc3FydCA9IDUxMiwJCQkJLVYt LS0KKyAgc2ltX2ZwdV9zdGF0dXNfcm91bmRlZCA9IDEwMjQsCQkJCUktLS0t CisgIHNpbV9mcHVfc3RhdHVzX2luZXhhY3QgPSAyMDQ4LAkJCQlJLS0tLSAo c2ltIHNwZWMuKQorICBzaW1fZnB1X3N0YXR1c19vdmVyZmxvdyA9IDQwOTYs CQkJCUktLU8tCisgIHNpbV9mcHVfc3RhdHVzX3VuZGVyZmxvdyA9IDgxOTIs CQkJCUktLS1VCisgIHNpbV9mcHVfc3RhdHVzX2Rlbm9ybSA9IDE2Mzg0LAkJ CQktLS0tVSAoc2ltIHNwZWMuKQorKi8gIAorICAgIAordm9pZCB1cGRhdGVf ZnBzciAoU0lNX0RFU0Mgc2QsIHNpbV9mcHVfc3RhdHVzIHN0YXR1cywgdW5z aWduZWQgaW50IG1hc2ssIHVuc2lnbmVkIGludCBkb3VibGVfb3BfcCkKK3sK KyAgdW5zaWduZWQgaW50IGZwc3IgPSBGUFNSICYgbWFzazsKKworICB1bnNp Z25lZCBpbnQgZmxhZ3MgPSAwOworCisgIGlmIChmcHNyICYgRlBTUl9YRUkK KyAgICAgICYmICgoc3RhdHVzICYgKHNpbV9mcHVfc3RhdHVzX3JvdW5kZWQK KwkJICAgICB8IHNpbV9mcHVfc3RhdHVzX292ZXJmbG93CisJCSAgICAgfCBz aW1fZnB1X3N0YXR1c19pbmV4YWN0KSkKKwkgIHx8IChzdGF0dXMgJiBzaW1f ZnB1X3N0YXR1c191bmRlcmZsb3cKKwkgICAgICAmJiAoZnBzciAmIChGUFNS X1hFVSB8IEZQU1JfWEVJKSkgPT0gMAorCSAgICAgICYmIGZwc3IgJiBGUFNS X0ZTKSkpCisgICAgeworICAgICAgZmxhZ3MgfD0gRlBTUl9YQ0kgfCBGUFNS X1hQSTsKKyAgICB9CisKKyAgaWYgKGZwc3IgJiBGUFNSX1hFVgorICAgICAg JiYgKHN0YXR1cyAmIChzaW1fZnB1X3N0YXR1c19pbnZhbGlkX2lzaQorCQkg ICAgfCBzaW1fZnB1X3N0YXR1c19pbnZhbGlkX2ltegorCQkgICAgfCBzaW1f ZnB1X3N0YXR1c19pbnZhbGlkX3pkegorCQkgICAgfCBzaW1fZnB1X3N0YXR1 c19pbnZhbGlkX2lkaQorCQkgICAgfCBzaW1fZnB1X3N0YXR1c19pbnZhbGlk X2N2aQorCQkgICAgfCBzaW1fZnB1X3N0YXR1c19pbnZhbGlkX3NxcnQKKwkJ ICAgIHwgc2ltX2ZwdV9zdGF0dXNfaW52YWxpZF9zbmFuKSkpCisgICAgewor ICAgICAgZmxhZ3MgfD0gRlBTUl9YQ1YgfCBGUFNSX1hQVjsKKyAgICB9CisK KyAgaWYgKGZwc3IgJiBGUFNSX1hFWgorICAgICAgJiYgKHN0YXR1cyAmIHNp bV9mcHVfc3RhdHVzX2ludmFsaWRfZGl2MCkpCisgICAgeworICAgICAgZmxh Z3MgfD0gRlBTUl9YQ1YgfCBGUFNSX1hQVjsKKyAgICB9CisKKyAgaWYgKGZw c3IgJiBGUFNSX1hFTworICAgICAgJiYgKHN0YXR1cyAmIHNpbV9mcHVfc3Rh dHVzX292ZXJmbG93KSkKKyAgICB7CisgICAgICBmbGFncyB8PSBGUFNSX1hD TyB8IEZQU1JfWFBPOworICAgIH0KKyAgICAgIAorICBpZiAoKChmcHNyICYg RlBTUl9YRVUpIHx8IChmcHNyICYgRlBTUl9GUykgPT0gMCkKKyAgICAgICYm IChzdGF0dXMgJiAoc2ltX2ZwdV9zdGF0dXNfdW5kZXJmbG93CisJCSAgICB8 IHNpbV9mcHVfc3RhdHVzX2Rlbm9ybSkpKQorICAgIHsKKyAgICAgIGZsYWdz IHw9IEZQU1JfWENVIHwgRlBTUl9YUFU7CisgICAgfQorCisgIGlmIChmbGFn cykKKyAgICB7CisgICAgICBGUFNSICY9IH5GUFNSX1hDOworICAgICAgRlBT UiB8PSBmbGFnczsKKworICAgICAgU2lnbmFsRXhjZXB0aW9uRlBFKHNkLCBk b3VibGVfb3BfcCk7CisgICAgfQorfQorCisvKgorICBleGNlcHRpb24KKyov CisKK3ZvaWQgIFNpZ25hbEV4Y2VwdGlvbihTSU1fREVTQyBzZCkKK3sKKyAg aWYgKE1QTSAmIE1QTV9BVUUpCisgICAgeworICAgICAgUFNXID0gUFNXICYg fihQU1dfTlBWIHwgUFNXX0RNUCB8IFBTV19JTVApOworICAgIH0KK30KKwor dm9pZCBTaWduYWxFeGNlcHRpb25GUEUoU0lNX0RFU0Mgc2QsIHVuc2lnbmVk IGludCBkb3VibGVfb3BfcCkKK3sJCQkJCQkJCQorICBpZiAoKChQU1cgJiAo UFNXX05QfFBTV19JRCkpID09IDApCisgICAgICB8fCAhKEZQU1IgJiAoZG91 YmxlX29wX3AgPyBGUFNSX0RFTSA6IEZQU1JfU0VNKSkpCQkKKyAgICB7CQkJ CQkJCQkKKyAgICAgIEVJUEMgPSBQQzsJCQkJCQkJCisgICAgICBFSVBTVyA9 IFBTVzsJCQkJCQkKKyAgICAgIEVJSUMgPSAoRlBTUiAmIChkb3VibGVfb3Bf cCA/IEZQU1JfREVNIDogRlBTUl9TRU0pKSAJCisJPyAweDcxIDogMHg3MjsJ CQkJCQkKKyAgICAgIFBTVyB8PSAoUFNXX0VQIHwgUFNXX0lEKTsKKyAgICAg IFBDID0gMHg3MDsKKworICAgICAgU2lnbmFsRXhjZXB0aW9uKHNkKTsKKyAg ICB9CQkJCQkJCQkKK30KKworCit2b2lkIGNoZWNrX2ludmFsaWRfc25hbihT SU1fREVTQyBzZCwgc2ltX2ZwdV9zdGF0dXMgc3RhdHVzLCB1bnNpZ25lZCBp bnQgZG91YmxlX29wX3ApCit7CisgIGlmICgoRlBTUiAmIEZQU1JfWEVJKQor ICAgICAgJiYgKHN0YXR1cyAmIHNpbV9mcHVfc3RhdHVzX2ludmFsaWRfc25h bikpCisgICAgeworICAgICAgRlBTUiAmPSB+RlBTUl9YQzsKKyAgICAgIEZQ U1IgfD0gRlBTUl9YQ1Y7CisgICAgICBGUFNSIHw9IEZQU1JfWFBWOworICAg ICAgU2lnbmFsRXhjZXB0aW9uRlBFKHNkLCBkb3VibGVfb3BfcCk7CisgICAg fQorfQorCitpbnQgdjg1MF9mbG9hdF9jb21wYXJlKFNJTV9ERVNDIHNkLCBp bnQgY21wLCBzaW1fZnB1IHdvcDEsIHNpbV9mcHUgd29wMiwgaW50IGRvdWJs ZV9vcF9wKQoreworICBpbnQgcmVzdWx0ID0gLTE7CisgIAorICBpZiAoc2lt X2ZwdV9pc19uYW4oJndvcDEpIHx8IHNpbV9mcHVfaXNfbmFuKCZ3b3AyKSkK KyAgICB7CisgICAgICBpZiAoY21wICYgMHg4KQorCXsKKwkgIGlmIChGUFNS ICYgRlBTUl9YRVYpCisJICAgIHsKKwkgICAgICBGUFNSIHw9IEZQU1JfWENW IHwgRlBTUl9YUFY7CisJICAgICAgU2lnbmFsRXhjZXB0aW9uRlBFKHNkLCBk b3VibGVfb3BfcCk7CisJICAgIH0KKwl9CisKKyAgICAgIHN3aXRjaCAoY21w KQorCXsKKwljYXNlIEZQVV9DTVBfRjoKKwkgIHJlc3VsdCA9IDA7CisJICBi cmVhazsKKwljYXNlIEZQVV9DTVBfVU46CisJICByZXN1bHQgPSAxOworCSAg YnJlYWs7CisJY2FzZSBGUFVfQ01QX0VROgorCSAgcmVzdWx0ID0gMDsKKwkg IGJyZWFrOworCWNhc2UgRlBVX0NNUF9VRVE6CisJICByZXN1bHQgPSAxOwor CSAgYnJlYWs7CisJY2FzZSBGUFVfQ01QX09MVDoKKwkgIHJlc3VsdCA9IDA7 CisJICBicmVhazsKKwljYXNlIEZQVV9DTVBfVUxUOgorCSAgcmVzdWx0ID0g MTsKKwkgIGJyZWFrOworCWNhc2UgRlBVX0NNUF9PTEU6CisJICByZXN1bHQg PSAwOworCSAgYnJlYWs7CisJY2FzZSBGUFVfQ01QX1VMRToKKwkgIHJlc3Vs dCA9IDE7CisJICBicmVhazsKKwljYXNlIEZQVV9DTVBfU0Y6CisJICByZXN1 bHQgPSAwOworCSAgYnJlYWs7CisJY2FzZSBGUFVfQ01QX05HTEU6CisJICBy ZXN1bHQgPSAxOworCSAgYnJlYWs7CisJY2FzZSBGUFVfQ01QX1NFUToKKwkg IHJlc3VsdCA9IDA7CisJICBicmVhazsKKwljYXNlIEZQVV9DTVBfTkdMOgor CSAgcmVzdWx0ID0gMTsKKwkgIGJyZWFrOworCWNhc2UgRlBVX0NNUF9MVDoK KwkgIHJlc3VsdCA9IDA7CisJICBicmVhazsKKwljYXNlIEZQVV9DTVBfTkdF OgorCSAgcmVzdWx0ID0gMTsKKwkgIGJyZWFrOworCWNhc2UgRlBVX0NNUF9M RToKKwkgIHJlc3VsdCA9IDA7CisJICBicmVhazsKKwljYXNlIEZQVV9DTVBf TkdUOgorCSAgcmVzdWx0ID0gMTsKKwkgIGJyZWFrOworCWRlZmF1bHQ6CisJ ICBhYm9ydCgpOworCX0KKyAgICB9CisgIGVsc2UgaWYgKHNpbV9mcHVfaXNf aW5maW5pdHkoJndvcDEpICYmIHNpbV9mcHVfaXNfaW5maW5pdHkoJndvcDIp CisJICAgJiYgc2ltX2ZwdV9zaWduKCZ3b3AxKSA9PSBzaW1fZnB1X3NpZ24o JndvcDIpKQorICAgIHsKKyAgICAgIHN3aXRjaCAoY21wKQorCXsKKwljYXNl IEZQVV9DTVBfRjoKKwkgIHJlc3VsdCA9IDA7CisJICBicmVhazsKKwljYXNl IEZQVV9DTVBfVU46CisJICByZXN1bHQgPSAwOworCSAgYnJlYWs7CisJY2Fz ZSBGUFVfQ01QX0VROgorCSAgcmVzdWx0ID0gMTsKKwkgIGJyZWFrOworCWNh c2UgRlBVX0NNUF9VRVE6CisJICByZXN1bHQgPSAxOworCSAgYnJlYWs7CisJ Y2FzZSBGUFVfQ01QX09MVDoKKwkgIHJlc3VsdCA9IDA7CisJICBicmVhazsK KwljYXNlIEZQVV9DTVBfVUxUOgorCSAgcmVzdWx0ID0gMDsKKwkgIGJyZWFr OworCWNhc2UgRlBVX0NNUF9PTEU6CisJICByZXN1bHQgPSAxOworCSAgYnJl YWs7CisJY2FzZSBGUFVfQ01QX1VMRToKKwkgIHJlc3VsdCA9IDE7CisJICBi cmVhazsKKwljYXNlIEZQVV9DTVBfU0Y6CisJICByZXN1bHQgPSAwOworCSAg YnJlYWs7CisJY2FzZSBGUFVfQ01QX05HTEU6CisJICByZXN1bHQgPSAwOwor CSAgYnJlYWs7CisJY2FzZSBGUFVfQ01QX1NFUToKKwkgIHJlc3VsdCA9IDE7 CisJICBicmVhazsKKwljYXNlIEZQVV9DTVBfTkdMOgorCSAgcmVzdWx0ID0g MTsKKwkgIGJyZWFrOworCWNhc2UgRlBVX0NNUF9MVDoKKwkgIHJlc3VsdCA9 IDA7CisJICBicmVhazsKKwljYXNlIEZQVV9DTVBfTkdFOgorCSAgcmVzdWx0 ID0gMDsKKwkgIGJyZWFrOworCWNhc2UgRlBVX0NNUF9MRToKKwkgIHJlc3Vs dCA9IDE7CisJICBicmVhazsKKwljYXNlIEZQVV9DTVBfTkdUOgorCSAgcmVz dWx0ID0gMTsKKwkgIGJyZWFrOworCWRlZmF1bHQ6CisJICBhYm9ydCgpOwor CX0KKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBpbnQgZ3QgPSAwLGx0 ID0gMCxlcSA9IDAsIHN0YXR1czsKKworICAgICAgc3RhdHVzID0gc2ltX2Zw dV9jbXAoICZ3b3AxLCAmd29wMiApOworCisgICAgICBzd2l0Y2ggKHN0YXR1 cykgeworICAgICAgY2FzZSBTSU1fRlBVX0lTX1NOQU46CisgICAgICBjYXNl IFNJTV9GUFVfSVNfUU5BTjoKKwlhYm9ydCgpOworCWJyZWFrOworCisgICAg ICBjYXNlIFNJTV9GUFVfSVNfTklORjoKKwlsdCA9IDE7CisJYnJlYWs7Cisg ICAgICBjYXNlIFNJTV9GUFVfSVNfUElORjoKKwlndCA9IDE7CisJYnJlYWs7 CisgICAgICBjYXNlIFNJTV9GUFVfSVNfTk5VTUJFUjoKKwlsdCA9IDE7CisJ YnJlYWs7CisgICAgICBjYXNlIFNJTV9GUFVfSVNfUE5VTUJFUjoKKwlndCA9 IDE7CisJYnJlYWs7CisgICAgICBjYXNlIFNJTV9GUFVfSVNfTkRFTk9STToK KwlsdCA9IDE7CisJYnJlYWs7CisgICAgICBjYXNlIFNJTV9GUFVfSVNfUERF Tk9STToKKwlndCA9IDE7CisJYnJlYWs7CisgICAgICBjYXNlIFNJTV9GUFVf SVNfTlpFUk86CisgICAgICBjYXNlIFNJTV9GUFVfSVNfUFpFUk86CisJZXEg PSAxOworCWJyZWFrOworICAgICAgfQorICAKKyAgICAgIHN3aXRjaCAoY21w KQorCXsKKwljYXNlIEZQVV9DTVBfRjoKKwkgIHJlc3VsdCA9IDA7CisJICBi cmVhazsKKwljYXNlIEZQVV9DTVBfVU46CisJICByZXN1bHQgPSAwOworCSAg YnJlYWs7CisJY2FzZSBGUFVfQ01QX0VROgorCSAgcmVzdWx0ID0gZXE7CisJ ICBicmVhazsKKwljYXNlIEZQVV9DTVBfVUVROgorCSAgcmVzdWx0ID0gZXE7 CisJICBicmVhazsKKwljYXNlIEZQVV9DTVBfT0xUOgorCSAgcmVzdWx0ID0g bHQ7CisJICBicmVhazsKKwljYXNlIEZQVV9DTVBfVUxUOgorCSAgcmVzdWx0 ID0gbHQ7CisJICBicmVhazsKKwljYXNlIEZQVV9DTVBfT0xFOgorCSAgcmVz dWx0ID0gbHQgfHwgZXE7CisJICBicmVhazsKKwljYXNlIEZQVV9DTVBfVUxF OgorCSAgcmVzdWx0ID0gbHQgfHwgZXE7CisJICBicmVhazsKKwljYXNlIEZQ VV9DTVBfU0Y6CisJICByZXN1bHQgPSAwOworCSAgYnJlYWs7CisJY2FzZSBG UFVfQ01QX05HTEU6CisJICByZXN1bHQgPSAwOworCSAgYnJlYWs7CisJY2Fz ZSBGUFVfQ01QX1NFUToKKwkgIHJlc3VsdCA9IGVxOworCSAgYnJlYWs7CisJ Y2FzZSBGUFVfQ01QX05HTDoKKwkgIHJlc3VsdCA9IGVxOworCSAgYnJlYWs7 CisJY2FzZSBGUFVfQ01QX0xUOgorCSAgcmVzdWx0ID0gbHQ7CisJICBicmVh azsKKwljYXNlIEZQVV9DTVBfTkdFOgorCSAgcmVzdWx0ID0gbHQ7CisJICBi cmVhazsKKwljYXNlIEZQVV9DTVBfTEU6CisJICByZXN1bHQgPSBsdCB8fCBl cTsKKwkgIGJyZWFrOworCWNhc2UgRlBVX0NNUF9OR1Q6CisJICByZXN1bHQg PSBsdCB8fCBlcTsKKwkgIGJyZWFrOworCX0KKyAgICB9CisKKyAgQVNTRVJU KHJlc3VsdCAhPSAtMSk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQg djg1MF9kaXYoU0lNX0RFU0Mgc2QsIHVuc2lnbmVkIGludCBvcDAsIHVuc2ln bmVkIGludCBvcDEsIHVuc2lnbmVkIGludCAqb3AycCwgdW5zaWduZWQgaW50 ICpvcDNwKQoreworICBzaWduZWQgbG9uZyBpbnQgcXVvdGllbnQ7CisgIHNp Z25lZCBsb25nIGludCByZW1haW5kZXI7CisgIHNpZ25lZCBsb25nIGludCBk aXZpZGVfYnk7CisgIHNpZ25lZCBsb25nIGludCBkaXZpZGVfdGhpczsKKyAg YmZkX2Jvb2xlYW4gICAgIG92ZXJmbG93ID0gRkFMU0U7CisgIAorICAvKiBD b21wdXRlIHRoZSByZXN1bHQuICAqLworICBkaXZpZGVfYnkgICA9IG9wMDsK KyAgZGl2aWRlX3RoaXMgPSBvcDE7CisgIAorICBpZiAoZGl2aWRlX2J5ID09 IDAgfHwgKGRpdmlkZV9ieSA9PSAtMSAmJiBkaXZpZGVfdGhpcyA9PSAoMSA8 PCAzMSkpKQorICAgIHsKKyAgICAgIG92ZXJmbG93ICA9IFRSVUU7CisgICAg ICBkaXZpZGVfYnkgPSAxOworICAgIH0KKyAgCisgIHF1b3RpZW50ICA9IGRp dmlkZV90aGlzIC8gZGl2aWRlX2J5OworICByZW1haW5kZXIgPSBkaXZpZGVf dGhpcyAlIGRpdmlkZV9ieTsKKyAgCisgIC8qIFNldCBjb25kaXRpb24gY29k ZXMuICAqLworICBQU1cgJj0gfihQU1dfWiB8IFBTV19TIHwgUFNXX09WKTsK KyAgCisgIGlmIChvdmVyZmxvdykgICAgICBQU1cgfD0gUFNXX09WOworICBp ZiAocXVvdGllbnQgPT0gMCkgUFNXIHw9IFBTV19aOworICBpZiAocXVvdGll bnQgPCAgMCkgUFNXIHw9IFBTV19TOworICAKKyAgKm9wMnAgPSBxdW90aWVu dDsKKyAgKm9wM3AgPSByZW1haW5kZXI7Cit9CisKK3ZvaWQgdjg1MF9kaXZ1 KFNJTV9ERVNDIHNkLCB1bnNpZ25lZCBpbnQgb3AwLCB1bnNpZ25lZCBpbnQg b3AxLCB1bnNpZ25lZCBpbnQgKm9wMnAsIHVuc2lnbmVkIGludCAqb3AzcCkK K3sKKyAgdW5zaWduZWQgbG9uZyBpbnQgcXVvdGllbnQ7CisgIHVuc2lnbmVk IGxvbmcgaW50IHJlbWFpbmRlcjsKKyAgdW5zaWduZWQgbG9uZyBpbnQgZGl2 aWRlX2J5OworICB1bnNpZ25lZCBsb25nIGludCBkaXZpZGVfdGhpczsKKyAg YmZkX2Jvb2xlYW4gICAgICAgb3ZlcmZsb3cgPSBGQUxTRTsKKyAgCisgIC8q IENvbXB1dGUgdGhlIHJlc3VsdC4gICovCisgIAorICBkaXZpZGVfYnkgICA9 IG9wMDsKKyAgZGl2aWRlX3RoaXMgPSBvcDE7CisgIAorICBpZiAoZGl2aWRl X2J5ID09IDApCisgICAgeworICAgICAgb3ZlcmZsb3cgPSBUUlVFOworICAg ICAgZGl2aWRlX2J5ICA9IDE7CisgICAgfQorICAKKyAgcXVvdGllbnQgID0g ZGl2aWRlX3RoaXMgLyBkaXZpZGVfYnk7CisgIHJlbWFpbmRlciA9IGRpdmlk ZV90aGlzICUgZGl2aWRlX2J5OworICAKKyAgLyogU2V0IGNvbmRpdGlvbiBj b2Rlcy4gICovCisgIFBTVyAmPSB+KFBTV19aIHwgUFNXX1MgfCBQU1dfT1Yp OworICAKKyAgaWYgKG92ZXJmbG93KSAgICAgIFBTVyB8PSBQU1dfT1Y7Cisg IGlmIChxdW90aWVudCA9PSAwKSBQU1cgfD0gUFNXX1o7CisgIGlmIChxdW90 aWVudCAmIDB4ODAwMDAwMDApIFBTVyB8PSBQU1dfUzsKKyAgCisgICpvcDJw ID0gcXVvdGllbnQ7CisgICpvcDNwID0gcmVtYWluZGVyOworfQorCisKK3Zv aWQgdjg1MF9zYXIoU0lNX0RFU0Mgc2QsIHVuc2lnbmVkIGludCBvcDAsIHVu c2lnbmVkIGludCBvcDEsIHVuc2lnbmVkIGludCAqb3AycCkKK3sKKyAgdW5z aWduZWQgaW50IHJlc3VsdCwgeiwgcywgY3k7CisKKyAgb3AwICY9IDB4MWY7 CisgIHJlc3VsdCA9IChzaWduZWQpb3AxID4+IG9wMDsKKworICAvKiBDb21w dXRlIHRoZSBjb25kaXRpb24gY29kZXMuICAqLworICB6ID0gKHJlc3VsdCA9 PSAwKTsKKyAgcyA9IChyZXN1bHQgJiAweDgwMDAwMDAwKTsKKyAgY3kgPSAo b3AxICYgKDEgPDwgKG9wMCAtIDEpKSk7CisKKyAgLyogU3RvcmUgdGhlIHJl c3VsdCBhbmQgY29uZGl0aW9uIGNvZGVzLiAgKi8KKyAgUFNXICY9IH4oUFNX X1ogfCBQU1dfUyB8IFBTV19PViB8IFBTV19DWSk7CisgIFBTVyB8PSAoKHog PyBQU1dfWiA6IDApIHwgKHMgPyBQU1dfUyA6IDApCisJCXwgKGN5ID8gUFNX X0NZIDogMCkpOworCisgICpvcDJwID0gcmVzdWx0OworfQorCit2b2lkIHY4 NTBfc2hsKFNJTV9ERVNDIHNkLCB1bnNpZ25lZCBpbnQgb3AwLCB1bnNpZ25l ZCBpbnQgb3AxLCB1bnNpZ25lZCBpbnQgKm9wMnApCit7CisgIHVuc2lnbmVk IGludCByZXN1bHQsIHosIHMsIGN5OworCisgIG9wMCAmPSAweDFmOworICBy ZXN1bHQgPSBvcDEgPDwgb3AwOworCisgIC8qIENvbXB1dGUgdGhlIGNvbmRp dGlvbiBjb2Rlcy4gICovCisgIHogPSAocmVzdWx0ID09IDApOworICBzID0g KHJlc3VsdCAmIDB4ODAwMDAwMDApOworICBjeSA9IChvcDEgJiAoMSA8PCAo MzIgLSBvcDApKSk7CisKKyAgLyogU3RvcmUgdGhlIHJlc3VsdCBhbmQgY29u ZGl0aW9uIGNvZGVzLiAgKi8KKyAgUFNXICY9IH4oUFNXX1ogfCBQU1dfUyB8 IFBTV19PViB8IFBTV19DWSk7CisgIFBTVyB8PSAoKHogPyBQU1dfWiA6IDAp IHwgKHMgPyBQU1dfUyA6IDApCisJCXwgKGN5ID8gUFNXX0NZIDogMCkpOwor CisgICpvcDJwID0gcmVzdWx0OworfQorCit2b2lkIHY4NTBfc2hyKFNJTV9E RVNDIHNkLCB1bnNpZ25lZCBpbnQgb3AwLCB1bnNpZ25lZCBpbnQgb3AxLCB1 bnNpZ25lZCBpbnQgKm9wMnApCit7CisgIHVuc2lnbmVkIGludCByZXN1bHQs IHosIHMsIGN5OworCisgIG9wMCAmPSAgMHgxZjsKKyAgcmVzdWx0ID0gb3Ax ID4+IG9wMDsKKworICAvKiBDb21wdXRlIHRoZSBjb25kaXRpb24gY29kZXMu ICAqLworICB6ID0gKHJlc3VsdCA9PSAwKTsKKyAgcyA9IChyZXN1bHQgJiAw eDgwMDAwMDAwKTsKKyAgY3kgPSAob3AxICYgKDEgPDwgKG9wMCAtIDEpKSk7 CisKKyAgLyogU3RvcmUgdGhlIHJlc3VsdCBhbmQgY29uZGl0aW9uIGNvZGVz LiAgKi8KKyAgUFNXICY9IH4oUFNXX1ogfCBQU1dfUyB8IFBTV19PViB8IFBT V19DWSk7CisgIFBTVyB8PSAoKHogPyBQU1dfWiA6IDApIHwgKHMgPyBQU1df UyA6IDApCisJCXwgKGN5ID8gUFNXX0NZIDogMCkpOworCisgICpvcDJwID0g cmVzdWx0OworfQorCit2b2lkIHY4NTBfc2F0YWRkKFNJTV9ERVNDIHNkLCB1 bnNpZ25lZCBpbnQgb3AwLCB1bnNpZ25lZCBpbnQgb3AxLCB1bnNpZ25lZCBp bnQgKm9wMnApCit7CisgIHVuc2lnbmVkIGludCByZXN1bHQsIHosIHMsIGN5 LCBvdiwgc2F0OworCisgIHJlc3VsdCA9IG9wMCArIG9wMTsKKyAgCisgIC8q IENvbXB1dGUgdGhlIGNvbmRpdGlvbiBjb2Rlcy4gICovCisgIHogPSAocmVz dWx0ID09IDApOworICBzID0gKHJlc3VsdCAmIDB4ODAwMDAwMDApOworICBj eSA9IChyZXN1bHQgPCBvcDAgfHwgcmVzdWx0IDwgb3AxKTsKKyAgb3YgPSAo KG9wMCAmIDB4ODAwMDAwMDApID09IChvcDEgJiAweDgwMDAwMDAwKQorCSYm IChvcDAgJiAweDgwMDAwMDAwKSAhPSAocmVzdWx0ICYgMHg4MDAwMDAwMCkp OworICBzYXQgPSBvdjsKKyAgCisgIC8qIFN0b3JlIHRoZSByZXN1bHQgYW5k IGNvbmRpdGlvbiBjb2Rlcy4gICovCisgIFBTVyAmPSB+KFBTV19aIHwgUFNX X1MgfCBQU1dfQ1kgfCBQU1dfT1YpOworICBQU1cgfD0gKCh6ID8gUFNXX1og OiAwKSB8IChzID8gUFNXX1MgOiAwKQorCSAgfCAoY3kgPyBQU1dfQ1kgOiAw KSB8IChvdiA/IFBTV19PViA6IDApCisJICB8IChzYXQgPyBQU1dfU0FUIDog MCkpOworICAKKyAgLyogSGFuZGxlIHNhdHVyYXRlZCByZXN1bHRzLiAgKi8K KyAgaWYgKHNhdCAmJiBzKQorICAgIHsKKyAgICAgIHJlc3VsdCA9IDB4N2Zm ZmZmZmY7CisgICAgICBQU1cgJj0gflBTV19TOworICAgIH0KKyAgZWxzZSBp ZiAoc2F0KQorICAgIHsKKyAgICAgIHJlc3VsdCA9IDB4ODAwMDAwMDA7Cisg ICAgICBQU1cgfD0gUFNXX1M7CisgICAgfQorCisgICpvcDJwID0gcmVzdWx0 OworfQorCit2b2lkIHY4NTBfc2F0c3ViKFNJTV9ERVNDIHNkLCB1bnNpZ25l ZCBpbnQgb3AwLCB1bnNpZ25lZCBpbnQgb3AxLCB1bnNpZ25lZCBpbnQgKm9w MnApCit7CisgIHVuc2lnbmVkIGludCByZXN1bHQsIHosIHMsIGN5LCBvdiwg c2F0OworCisgIC8qIENvbXB1dGUgdGhlIHJlc3VsdC4gICovCisgIHJlc3Vs dCA9IG9wMSAtIG9wMDsKKyAgCisgIC8qIENvbXB1dGUgdGhlIGNvbmRpdGlv biBjb2Rlcy4gICovCisgIHogPSAocmVzdWx0ID09IDApOworICBzID0gKHJl c3VsdCAmIDB4ODAwMDAwMDApOworICBjeSA9IChvcDEgPCBvcDApOworICBv diA9ICgob3AxICYgMHg4MDAwMDAwMCkgIT0gKG9wMCAmIDB4ODAwMDAwMDAp CisJJiYgKG9wMSAmIDB4ODAwMDAwMDApICE9IChyZXN1bHQgJiAweDgwMDAw MDAwKSk7CisgIHNhdCA9IG92OworICAKKyAgLyogU3RvcmUgdGhlIHJlc3Vs dCBhbmQgY29uZGl0aW9uIGNvZGVzLiAgKi8KKyAgUFNXICY9IH4oUFNXX1og fCBQU1dfUyB8IFBTV19DWSB8IFBTV19PVik7CisgIFBTVyB8PSAoKHogPyBQ U1dfWiA6IDApIHwgKHMgPyBQU1dfUyA6IDApCisJICB8IChjeSA/IFBTV19D WSA6IDApIHwgKG92ID8gUFNXX09WIDogMCkKKwkgIHwgKHNhdCA/IFBTV19T QVQgOiAwKSk7CisKKyAgLyogSGFuZGxlIHNhdHVyYXRlZCByZXN1bHRzLiAg Ki8KKyAgaWYgKHNhdCAmJiBzKQorICAgIHsKKyAgICAgIHJlc3VsdCA9IDB4 N2ZmZmZmZmY7CisgICAgICBQU1cgJj0gflBTV19TOworICAgIH0KKyAgZWxz ZSBpZiAoc2F0KQorICAgIHsKKyAgICAgIHJlc3VsdCA9IDB4ODAwMDAwMDA7 CisgICAgICBQU1cgfD0gUFNXX1M7CisgICAgfQorCisgICpvcDJwID0gcmVz dWx0OworfQorCit1bnNpZ25lZDMyCitsb2FkX2RhdGFfbWVtKHNkLCBhZGRy LCBsZW4pCisgICAgIFNJTV9ERVNDIHNkOworICAgICBTSU1fQUREUiBhZGRy OworICAgICBpbnQgbGVuOworeworICB1aW50MzIgZGF0YTsKKworICBzd2l0 Y2ggKGxlbikKKyAgICB7CisgICAgY2FzZSAxOgorICAgICAgZGF0YSA9IHNp bV9jb3JlX3JlYWRfdW5hbGlnbmVkXzEgKFNUQVRFX0NQVSAoc2QsIDApLCAK KwkJCQkJUEMsIHJlYWRfbWFwLCBhZGRyKTsKKyAgICAgIGJyZWFrOworICAg IGNhc2UgMjoKKyAgICAgIGRhdGEgPSBzaW1fY29yZV9yZWFkX3VuYWxpZ25l ZF8yIChTVEFURV9DUFUgKHNkLCAwKSwgCisJCQkJCVBDLCByZWFkX21hcCwg YWRkcik7CisgICAgICBicmVhazsKKyAgICBjYXNlIDQ6CisgICAgICBkYXRh ID0gc2ltX2NvcmVfcmVhZF91bmFsaWduZWRfNCAoU1RBVEVfQ1BVIChzZCwg MCksIAorCQkJCQlQQywgcmVhZF9tYXAsIGFkZHIpOworICAgICAgYnJlYWs7 CisgICAgZGVmYXVsdDoKKyAgICAgIGFib3J0ICgpOworICAgIH0KKyAgcmV0 dXJuIGRhdGE7Cit9CisKK3ZvaWQKK3N0b3JlX2RhdGFfbWVtKHNkLCBhZGRy LCBsZW4sIGRhdGEpCisgICAgIFNJTV9ERVNDIHNkOworICAgICBTSU1fQURE UiBhZGRyOworICAgICBpbnQgbGVuOworICAgICB1bnNpZ25lZDMyIGRhdGE7 Cit7CisgIHN3aXRjaCAobGVuKQorICAgIHsKKyAgICBjYXNlIDE6CisgICAg ICBzdG9yZV9tZW0oYWRkciwgMSwgZGF0YSk7CisgICAgICBicmVhazsKKyAg ICBjYXNlIDI6CisgICAgICBzdG9yZV9tZW0oYWRkciwgMiwgZGF0YSk7Cisg ICAgICBicmVhazsKKyAgICBjYXNlIDQ6CisgICAgICBzdG9yZV9tZW0oYWRk ciwgNCwgZGF0YSk7CisgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAg ICAgYWJvcnQgKCk7CisgICAgfQorfQorCitpbnQgbXB1X2xvYWRfbWVtX3Rl c3QoU0lNX0RFU0Mgc2QsIHVuc2lnbmVkIGludCBhZGRyLCBpbnQgc2l6ZSwg aW50IGJhc2VfcmVnKQoreworICBpbnQgcmVzdWx0ID0gMTsKKworICBpZiAo UFNXICYgUFNXX0RNUCkKKyAgICB7CisgICAgICBpZiAoSVBFMCAmJiBhZGRy ID49IElQQTJBRERSKElQQTBMKSAmJiBhZGRyIDw9IElQQTJBRERSKElQQTBM KSAmJiBJUFIwKQorCXsKKwkgIC8qIHRleHQgYXJlYSAqLworCX0KKyAgICAg IGVsc2UgaWYgKElQRTEgJiYgYWRkciA+PSBJUEEyQUREUihJUEExTCkgJiYg YWRkciA8PSBJUEEyQUREUihJUEExTCkgJiYgSVBSMSkKKwl7CisJICAvKiB0 ZXh0IGFyZWEgKi8KKwl9CisgICAgICBlbHNlIGlmIChJUEUyICYmIGFkZHIg Pj0gSVBBMkFERFIoSVBBMkwpICYmIGFkZHIgPD0gSVBBMkFERFIoSVBBMkwp ICYmIElQUjIpCisJeworCSAgLyogdGV4dCBhcmVhICovCisJfQorICAgICAg ZWxzZSBpZiAoSVBFMyAmJiBhZGRyID49IElQQTJBRERSKElQQTNMKSAmJiBh ZGRyIDw9IElQQTJBRERSKElQQTNMKSAmJiBJUFIzKQorCXsKKwkgIC8qIHRl eHQgYXJlYSAqLworCX0KKyAgICAgIGVsc2UgaWYgKGFkZHIgPj0gUFBBMkFE RFIoUFBBICYgflBQTSkgJiYgYWRkciA8PSBEUEEyQUREUihQUEEgfCBQUE0p KQorCXsKKwkgIC8qIHByZWlmYXJhbGxlbCBhcmVhICovCisJfQorICAgICAg ZWxzZSBpZiAoYWRkciA+PSBQUEEyQUREUihTUEFMKSAmJiBhZGRyIDw9IERQ QTJBRERSKFNQQVUpKQorCXsKKwkgIC8qIHN0YWNrIGFyZWEgKi8KKwl9Cisg ICAgICBlbHNlIGlmIChEUEUwICYmIGFkZHIgPj0gRFBBMkFERFIoRFBBMEwp ICYmIGFkZHIgPD0gRFBBMkFERFIoRFBBMEwpICYmIERQUjAKKwkgICAgICAg JiYgKChTUEFMICYgU1BBTF9TUFMpID8gYmFzZV9yZWcgPT0gU1BfUkVHTk8g OiAxKSkKKwl7CisJICAvKiBkYXRhIGFyZWEgKi8KKwl9CisgICAgICBlbHNl IGlmIChEUEUxICYmIGFkZHIgPj0gRFBBMkFERFIoRFBBMUwpICYmIGFkZHIg PD0gRFBBMkFERFIoRFBBMUwpICYmIERQUjEKKwkgICAgICAgJiYgKChTUEFM ICYgU1BBTF9TUFMpID8gYmFzZV9yZWcgPT0gU1BfUkVHTk8gOiAxKSkKKwl7 CisJICAvKiBkYXRhIGFyZWEgKi8KKwl9CisgICAgICBlbHNlIGlmIChEUEUy ICYmIGFkZHIgPj0gRFBBMkFERFIoRFBBMkwpICYmIGFkZHIgPD0gRFBBMkFE RFIoRFBBMkwpICYmIERQUjIKKwkgICAgICAgJiYgKChTUEFMICYgU1BBTF9T UFMpID8gYmFzZV9yZWcgPT0gU1BfUkVHTk8gOiAxKSkKKwl7CisJICAvKiBk YXRhIGFyZWEgKi8KKwl9CisgICAgICBlbHNlIGlmIChEUEUzICYmIGFkZHIg Pj0gRFBBMkFERFIoRFBBM0wpICYmIGFkZHIgPD0gRFBBMkFERFIoRFBBM0wp ICYmIERQUjMKKwkgICAgICAgJiYgKChTUEFMICYgU1BBTF9TUFMpID8gYmFz ZV9yZWcgPT0gU1BfUkVHTk8gOiAxKSkKKwl7CisJICAvKiBkYXRhIGFyZWEg Ki8KKwl9CisgICAgICBlbHNlCisJeworCSAgVk1FQ1IgJj0gfihWTUVDUl9W TVcgfCBWTUVDUl9WTVgpOworCSAgVk1FQ1IgfD0gVk1FQ1JfVk1SOworCSAg Vk1BRFIgPSBhZGRyOworCSAgVk1USUQgPSBUSUQ7CisJICBGRUlDID0gMHg0 MzE7CisKKwkgIFBDID0gMHgzMDsKKworCSAgU2lnbmFsRXhjZXB0aW9uKHNk KTsKKwkgIHJlc3VsdCA9IDA7CisJfQorICAgIH0KKworICByZXR1cm4gcmVz dWx0OworfQorCitpbnQgbXB1X3N0b3JlX21lbV90ZXN0KFNJTV9ERVNDIHNk LCB1bnNpZ25lZCBpbnQgYWRkciwgaW50IHNpemUsIGludCBiYXNlX3JlZykK K3sKKyAgaW50IHJlc3VsdCA9IDE7CisKKyAgaWYgKFBTVyAmIFBTV19ETVAp CisgICAgeworICAgICAgaWYgKGFkZHIgPj0gUFBBMkFERFIoUFBBICYgflBQ TSkgJiYgYWRkciA8PSBEUEEyQUREUihQUEEgfCBQUE0pKQorCXsKKwkgIC8q IHByZWlmYXJhbGxlbCBhcmVhICovCisJfQorICAgICAgZWxzZSBpZiAoYWRk ciA+PSBQUEEyQUREUihTUEFMKSAmJiBhZGRyIDw9IERQQTJBRERSKFNQQVUp KQorCXsKKwkgIC8qIHN0YWNrIGFyZWEgKi8KKwl9CisgICAgICBlbHNlIGlm IChEUEUwICYmIGFkZHIgPj0gRFBBMkFERFIoRFBBMEwpICYmIGFkZHIgPD0g RFBBMkFERFIoRFBBMEwpICYmIERQVzAKKwkgICAgICAgJiYgKChTUEFMICYg U1BBTF9TUFMpID8gYmFzZV9yZWcgPT0gU1BfUkVHTk8gOiAxKSkKKwl7CisJ ICAvKiBkYXRhIGFyZWEgKi8KKwl9CisgICAgICBlbHNlIGlmIChEUEUxICYm IGFkZHIgPj0gRFBBMkFERFIoRFBBMUwpICYmIGFkZHIgPD0gRFBBMkFERFIo RFBBMUwpICYmIERQVzEKKwkgICAgICAgJiYgKChTUEFMICYgU1BBTF9TUFMp ID8gYmFzZV9yZWcgPT0gU1BfUkVHTk8gOiAxKSkKKwl7CisJICAvKiBkYXRh IGFyZWEgKi8KKwl9CisgICAgICBlbHNlIGlmIChEUEUyICYmIGFkZHIgPj0g RFBBMkFERFIoRFBBMkwpICYmIGFkZHIgPD0gRFBBMkFERFIoRFBBMkwpICYm IERQVzIKKwkgICAgICAgJiYgKChTUEFMICYgU1BBTF9TUFMpID8gYmFzZV9y ZWcgPT0gU1BfUkVHTk8gOiAxKSkKKwl7CisJICAvKiBkYXRhIGFyZWEgKi8K Kwl9CisgICAgICBlbHNlIGlmIChEUEUzICYmIGFkZHIgPj0gRFBBMkFERFIo RFBBM0wpICYmIGFkZHIgPD0gRFBBMkFERFIoRFBBM0wpICYmIERQVzMKKwkg ICAgICAgJiYgKChTUEFMICYgU1BBTF9TUFMpID8gYmFzZV9yZWcgPT0gU1Bf UkVHTk8gOiAxKSkKKwl7CisJICAvKiBkYXRhIGFyZWEgKi8KKwl9CisgICAg ICBlbHNlCisJeworCSAgaWYgKGFkZHIgPj0gUFBBMkFERFIoUFBBICYgflBQ TSkgJiYgYWRkciA8PSBEUEEyQUREUihQUEEgfCBQUE0pKQorCSAgICB7CisJ ICAgICAgRkVJQyA9IDB4NDMyOworCSAgICAgIFZQVElEID0gVElEOworCSAg ICAgIFZQQURSID0gUEM7CisjaWZkZWYgTk9UX1lFVAorCSAgICAgIFZJUF9Q UDsKKwkgICAgICBWUEVDUjsKKyNlbmRpZgkgICAgICAKKwkgICAgfQorCSAg ZWxzZQorCSAgICB7CisJICAgICAgRkVJQyA9IDB4NDMxOworCSAgICAgIFZN VElEID0gVElEOworCSAgICAgIFZNQURSID0gVk1FQ1I7CisJICAgICAgVk1F Q1IgJj0gfihWTUVDUl9WTVcgfCBWTUVDUl9WTVgpOworCSAgICAgIFZNRUNS IHw9IFZNRUNSX1ZNUjsKKwkgICAgICBQQyA9IDB4MzA7CisJICAgIH0KKwkg IHJlc3VsdCA9IDA7CisJfQorICAgIH0KKworICByZXR1cm4gcmVzdWx0Owor fQorCmRpZmYgLXVwTnIgZ2RiLTcuMi41MC1vcmlnaW5hbC9zaW0vdjg1MC9z aW1vcHMuaCBnZGItNy4yLjUwLW1vZGlmaWVkL3NpbS92ODUwL3NpbW9wcy5o Ci0tLSBnZGItNy4yLjUwLW9yaWdpbmFsL3NpbS92ODUwL3NpbW9wcy5oCTIw MDMtMDQtMDYgMTQ6MjE6MDQuMDAwMDAwMDAwICswNTMwCisrKyBnZGItNy4y LjUwLW1vZGlmaWVkL3NpbS92ODUwL3NpbW9wcy5oCTIwMTAtMTItMDggMTQ6 NTI6NTYuMDAwMDAwMDAwICswNTMwCkBAIC03NSw0ICs3NSw1MSBAQCBpbnQg T1BfMjIwMDdFMCAodm9pZCk7CiBpbnQgT1BfMzA3RjAgKHZvaWQpOwogaW50 IE9QXzEwN0YwICh2b2lkKTsKIGludCBPUF8zMDdFMCAodm9pZCk7CisKK2lu dCB2ODUwX2Zsb2F0X2NvbXBhcmUoU0lNX0RFU0Mgc2QsIGludCBjbXAsIHNp bV9mcHUgd29wMSwgc2ltX2ZwdSB3b3AyLCBpbnQgZG91YmxlX29wX3ApOwor CisvKiBNRU1PUlkgQUNDRVNTICovCit1bnNpZ25lZDMyIGxvYWRfZGF0YV9t ZW0oU0lNX0RFU0Mgc2QsIFNJTV9BRERSIGFkZHIsIGludCBsZW4pOwordm9p ZCBzdG9yZV9kYXRhX21lbShTSU1fREVTQyBzZCwgU0lNX0FERFIgYWRkciwg aW50IGxlbiwgdW5zaWduZWQzMiBkYXRhKTsKKwordW5zaWduZWQgbG9uZyBB ZGQzMiAodW5zaWduZWQgbG9uZyBhMSwgdW5zaWduZWQgbG9uZyBhMiwgaW50 ICogY2FycnkpOworCisvKiBGUFUgKi8KKworLyoKKyAgRlBVOiB1cGRhdGUg RlBTUiBmbGFncworICBpbnZhbGlkLCBpbmV4YWN0LCBvdmVyZmxvdywgdW5k ZXJmbG93CisgKi8KKworZXh0ZXJuIHZvaWQgY2hlY2tfaW52YWxpZF9zbmFu IChTSU1fREVTQyBzZCwgc2ltX2ZwdV9zdGF0dXMsIHVuc2lnbmVkIGludCk7 CisKKyNkZWZpbmUgY2hlY2tfY3Z0X2ZpKHNkLCBzdGF0dXMsIGRvdWJsZV9v cF9wKSAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHVwZGF0ZV9mcHNy IChzZCwgc3RhdHVzLCBGUFNSX1hFViB8IEZQU1JfWEVJLCBkb3VibGVfb3Bf cCkKKworI2RlZmluZSBjaGVja19jdnRfaWYoc2QsIHN0YXR1cywgZG91Ymxl X29wX3ApICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgdXBkYXRlX2Zw c3IgKHNkLCBzdGF0dXMsIEZQU1JfWEVJLCBkb3VibGVfb3BfcCkKKworI2Rl ZmluZSBjaGVja19jdnRfZmYoc2QsIHN0YXR1cywgZG91YmxlX29wX3ApICAg ICAgICAgICAgICAgICAgIFwKKyAgICAgICAgdXBkYXRlX2Zwc3IgKHNkLCBz dGF0dXMsIEZQU1JfWEVWIHwgRlBTUl9YRUkgfCBGUFNSX1hFTyB8IEZQU1Jf WEVVLCBkb3VibGVfb3BfcCkKKworZXh0ZXJuIHZvaWQgdXBkYXRlX2Zwc3Ig KFNJTV9ERVNDIHNkLCBzaW1fZnB1X3N0YXR1cywgdW5zaWduZWQgaW50LCB1 bnNpZ25lZCBpbnQpOworCisKKy8qCisgIEV4Y2VwdGlvbiAKKyAqLwordm9p ZCAgU2lnbmFsRXhjZXB0aW9uIChTSU1fREVTQyBzZCk7Cit2b2lkICBTaWdu YWxFeGNlcHRpb25GUEUgKFNJTV9ERVNDIHNkLCB1bnNpZ25lZCBpbnQgZG91 YmxlX29wX3ApOworCitpbnQgbXB1X2xvYWRfbWVtX3Rlc3QgKFNJTV9ERVND IHNkLCB1bnNpZ25lZCBpbnQgYWRkciwgaW50IGxlbiwgaW50IGJhc2VfcmVn KTsKK2ludCBtcHVfc3RvcmVfbWVtX3Rlc3QgKFNJTV9ERVNDIHNkLCB1bnNp Z25lZCBpbnQgYWRkciwgaW50IGxlbiwgaW50IGJhc2VfcmVnKTsKKwordm9p ZCB2ODUwX3NhciAoU0lNX0RFU0Mgc2QsIHVuc2lnbmVkIGludCBvcDAsIHVu c2lnbmVkIGludCBvcDEsIHVuc2lnbmVkIGludCAqb3AycCk7Cit2b2lkIHY4 NTBfc2hsIChTSU1fREVTQyBzZCwgdW5zaWduZWQgaW50IG9wMCwgdW5zaWdu ZWQgaW50IG9wMSwgdW5zaWduZWQgaW50ICpvcDJwKTsKK3ZvaWQgdjg1MF9z aHIgKFNJTV9ERVNDIHNkLCB1bnNpZ25lZCBpbnQgb3AwLCB1bnNpZ25lZCBp bnQgb3AxLCB1bnNpZ25lZCBpbnQgKm9wMnApOwordm9pZCB2ODUwX3NhdGFk ZCAoU0lNX0RFU0Mgc2QsIHVuc2lnbmVkIGludCBvcDAsIHVuc2lnbmVkIGlu dCBvcDEsIHVuc2lnbmVkIGludCAqb3AycCk7Cit2b2lkIHY4NTBfc2F0c3Vi IChTSU1fREVTQyBzZCwgdW5zaWduZWQgaW50IG9wMCwgdW5zaWduZWQgaW50 IG9wMSwgdW5zaWduZWQgaW50ICpvcDJwKTsKK3ZvaWQgdjg1MF9kaXYgKFNJ TV9ERVNDIHNkLCB1bnNpZ25lZCBpbnQgb3AwLCB1bnNpZ25lZCBpbnQgb3Ax LCB1bnNpZ25lZCBpbnQgKm9wMnAsIHVuc2lnbmVkIGludCAqb3AzcCk7Cit2 b2lkIHY4NTBfZGl2dSAoU0lNX0RFU0Mgc2QsIHVuc2lnbmVkIGludCBvcDAs IHVuc2lnbmVkIGludCBvcDEsIHVuc2lnbmVkIGludCAqb3AycCwgdW5zaWdu ZWQgaW50ICpvcDNwKTsKKwogI2VuZGlmCmRpZmYgLXVwTnIgZ2RiLTcuMi41 MC1vcmlnaW5hbC9zaW0vdjg1MC92ODUwLWRjIGdkYi03LjIuNTAtbW9kaWZp ZWQvc2ltL3Y4NTAvdjg1MC1kYwotLS0gZ2RiLTcuMi41MC1vcmlnaW5hbC9z aW0vdjg1MC92ODUwLWRjCTIwMDMtMDktMDUgMjM6MTY6NTIuMDAwMDAwMDAw ICswNTMwCisrKyBnZGItNy4yLjUwLW1vZGlmaWVkL3NpbS92ODUwL3Y4NTAt ZGMJMjAxMC0xMi0wOCAxNDo1MzoxMS4wMDAwMDAwMDAgKzA1MzAKQEAgLTEy LDcgKzEyLDkgQEAKICAgc3dpdGNoLGNvbWJpbmUgICAgICAgIDogICA0IDog ICAwIDogICAgOiAgICA6ICAgIDogICAgMSA6IFYsVklJICAgICAgIDoKICAg c3dpdGNoLGNvbWJpbmUgICAgICAgIDogICA0IDogICAwIDogICAgOiAgICA6 ICAgIDogICAgMSA6IFYsWElJSSAgICAgIDogdjg1MGUKICAgc3dpdGNoLGNv bWJpbmUgICAgICAgIDogICA0IDogICAwIDogICAgOiAgICA6ICAgIDogICAg MSA6IFYsWElJSSAgICAgIDogdjg1MGUxCi0KKyAgc3dpdGNoLGNvbWJpbmUg ICAgICAgIDogICA0IDogICAwIDogICAgOiAgICA6ICAgIDogICAgMSA6IFYs WElJSSAgICAgIDogdjg1MGUyCisgIHN3aXRjaCxjb21iaW5lICAgICAgICA6 ICAgNCA6ICAgMCA6ICAgIDogICAgOiAgICA6ICAgIDEgOiBWLFhJSUkgICAg ICA6IHY4NTBlMnYzCisgIHN3aXRjaCxjb21iaW5lICAgICAgICA6ICAxMCA6 ICAgNSA6ICAgIDogICAgOiAgICA6ICAgIDAgOiBGX0kgICAgICAgICA6IHY4 NTBlMnYzCiAKICMgZm9yIG9wY29kZSA2MywgMTI3LCAxMDg3IGV0LmFsLgog CkBAIC0yNywzICsyOSwyOCBAQAogIyBmb3Igb3Bjb2RlIDY2IC0gZGl2aC9i cmVhawogCiAgIHN3aXRjaCxjb21iaW5lICAgICAgICA6ICAgNCA6ICAgMCA6 ICAgIDogICAgOiAgICA6ICAgIDAgOiBJICAgICAgICAgICA6CisKKyMgZm9y IGlsZ29wLCBtYWN1CisgIHN3aXRjaCxjb21iaW5lICAgICAgICA6ICAxMCA6 ICAgOSA6ICAgIDogICAgOiAgICA6ICAgIDEgOiBYLFhJICAgICAgICA6IHY4 NTBlMgorICBzd2l0Y2gsY29tYmluZSAgICAgICAgOiAgMTAgOiAgIDkgOiAg ICA6ICAgIDogICAgOiAgICAxIDogWCxYSSAgICAgICAgOiB2ODUwZTJ2Mwor CisjZm9yIGNtb3ZmLnMsIHNldGYKKyAgc3dpdGNoLGNvbWJpbmUgICAgICAg IDogIDEwIDogICAxMCA6ICAgIDogICAgOiAgICA6ICAgIDEgOkZfSSxJWCAg ICAgIDogdjg1MGUydjMKKyAgCisjIGZvciBjbW92Zi5zIHRyZnNyCisgIHN3 aXRjaCxjb21iaW5lICAgICAgICA6ICAxNSA6ICAgMTEgOiAgICA6ICAgIDog ICAgOiAgICAxIDpGX0kgICAgICAgICA6IHY4NTBlMnYzCisKKyMgZm9yIHRy bmNmLnN3LCBjdnRmLnN3CisgIHN3aXRjaCxjb21iaW5lICAgICAgICA6ICAg MCA6ICAgIDAgOiAgICA6ICAgIDogICAgOiAgICAwIDpGX0kgICAgICAgICA6 IHY4NTBlMnYzCisgIHN3aXRjaCxjb21iaW5lICAgICAgICA6ICAgMyA6ICAg IDMgOiAgICA6ICAgIDogICAgOiAgICAwIDpGX0kgICAgICAgICA6IHY4NTBl MnYzCisKKyMgZm9yIHJzcXJ0Zi5zLCBzcXJ0Zi5zCisgIHN3aXRjaCxjb21i aW5lICAgICAgICA6ICAgMSA6ICAgIDEgOiAgICA6ICAgIDogICAgOiAgICAw IDpGX0kgICAgICAgICA6IHY4NTBlMnYzCisKKyMgZm9yIG1hZGRmLnMsIHRy YXAgCisgIHN3aXRjaCxjb21iaW5lICAgICAgICA6ICAgOCA6ICAgIDggOiAg ICA6ICAgIDogICAgOiAgICAxIDpGX0ksWCAgICAgICA6IHY4NTBlMnYzCisg IHN3aXRjaCxjb21iaW5lICAgICAgICA6ICAxMCA6ICAgMTAgOiAgICA6ICAg IDogICAgOiAgICAxIDpGX0ksWCAgICAgICA6IHY4NTBlMnYzCisKKyMgZm9y IGpyMzIgamFybDMyCisgIHN3aXRjaCxjb21iaW5lICAgICAgICA6ICA0IDog ICAwIDogICAgOiAgICA6ICAgIDogICAgMCA6VkkgICAgICAgICAgICA6IHY4 NTBlMgorICBzd2l0Y2gsY29tYmluZSAgICAgICAgOiAgNCA6ICAgMCA6ICAg IDogICAgOiAgICA6ICAgIDAgOlZJICAgICAgICAgICAgOiB2ODUwZTJ2Mwpk aWZmIC11cE5yIGdkYi03LjIuNTAtb3JpZ2luYWwvc2ltL3Y4NTAvdjg1MC5p Z2VuIGdkYi03LjIuNTAtbW9kaWZpZWQvc2ltL3Y4NTAvdjg1MC5pZ2VuCi0t LSBnZGItNy4yLjUwLW9yaWdpbmFsL3NpbS92ODUwL3Y4NTAuaWdlbgkyMDA4 LTAyLTA2IDEwOjExOjI2LjAwMDAwMDAwMCArMDUzMAorKysgZ2RiLTcuMi41 MC1tb2RpZmllZC9zaW0vdjg1MC92ODUwLmlnZW4JMjAxMC0xMi0wOCAxNzoz MzowOS4wMDAwMDAwMDAgKzA1MzAKQEAgLTYsNiArNiw3IEBACiA6b3B0aW9u Ojo6Zm9ybWF0LW5hbWVzOlhJLFhJSSxYSUlJCiA6b3B0aW9uOjo6Zm9ybWF0 LW5hbWVzOlhJVixYVgogOm9wdGlvbjo6OmZvcm1hdC1uYW1lczpaCis6b3B0 aW9uOjo6Zm9ybWF0LW5hbWVzOkZfSQogCiAKIDptb2RlbDo6OnY4NTA6djg1 MDoKQEAgLTE0LDEyICsxNSwyMiBAQAogOm1vZGVsOjo6djg1MGU6djg1MGU6 CiA6b3B0aW9uOjo6bXVsdGktc2ltOnRydWUKIDptb2RlbDo6OnY4NTBlMTp2 ODUwZTE6Cis6b3B0aW9uOjo6bXVsdGktc2ltOnRydWUKKzptb2RlbDo6OnY4 NTBlMjp2ODUwZTI6Cis6b3B0aW9uOjo6bXVsdGktc2ltOnRydWUKKzptb2Rl bDo6OnY4NTBlMnYzOnY4NTBlMnYzOgogCiAvLyBDYWNoZSBtYWNyb3MKIAog OmNhY2hlOjo6dW5zaWduZWQ6cmVnMTpSUlJSUjooUlJSUlIpCiA6Y2FjaGU6 Ojp1bnNpZ25lZDpyZWcyOnJycnJyOihycnJycikKIDpjYWNoZTo6OnVuc2ln bmVkOnJlZzM6d3d3d3c6KHd3d3d3KQorOmNhY2hlOjo6dW5zaWduZWQ6cmVn NDpXLFdXV1c6KChXIDw8IDQpICsgV1dXVykKKworOmNhY2hlOjo6dW5zaWdu ZWQ6cmVnMWU6UlJSUjooUlJSUiA8PCAxKQorOmNhY2hlOjo6dW5zaWduZWQ6 cmVnMmU6cnJycjoocnJyciA8PCAxKQorOmNhY2hlOjo6dW5zaWduZWQ6cmVn M2U6d3d3dzood3d3dyA8PCAxKQorOmNhY2hlOjo6dW5zaWduZWQ6cmVnNGU6 bW1tbToobW1tbSA8PCAxKQogCiA6Y2FjaGU6Ojp1bnNpZ25lZDpkaXNwNDpk ZGRkOihkZGRkKQogOmNhY2hlOjo6dW5zaWduZWQ6ZGlzcDU6ZGRkZDooZGRk ZCA8PCAxKQpAQCAtMjksNyArNDAsMTAgQEAKIDpjYWNoZTo6OnVuc2lnbmVk OmRpc3A5OmRkZGRkLGRkZDpTRVhUMzIgKChkZGRkZCA8PCA0KSArIChkZGQg PDwgMSksIDkgLSAxKQogOmNhY2hlOjo6dW5zaWduZWQ6ZGlzcDE2OmRkZGRk ZGRkZGRkZGRkZGQ6RVhURU5EMTYgKGRkZGRkZGRkZGRkZGRkZGQpCiA6Y2Fj aGU6Ojp1bnNpZ25lZDpkaXNwMTY6ZGRkZGRkZGRkZGRkZGRkOiBFWFRFTkQx NiAoZGRkZGRkZGRkZGRkZGRkIDw8IDEpCis6Y2FjaGU6Ojp1bnNpZ25lZDpk aXNwMTc6ZCxkZGRkZGRkZGRkZGRkZGQ6U0VYVDMyICgoKGQgPDwxNikgKyAo ZGRkZGRkZGRkZGRkZGRkIDw8IDEpKSwgMTcgLSAxKQogOmNhY2hlOjo6dW5z aWduZWQ6ZGlzcDIyOmRkZGRkZCxkZGRkZGRkZGRkZGRkZGQ6IFNFWFQzMiAo KGRkZGRkZCA8PCAxNikgKyAoZGRkZGRkZGRkZGRkZGRkIDw8IDEpLCAyMiAt IDEpCis6Y2FjaGU6Ojp1bnNpZ25lZDpkaXNwMjM6ZGRkZGRkZCxkZGRkZGRk ZGRkZGRkZGRkOiBTRVhUMzIgKChkZGRkZGRkKSArIChkZGRkZGRkZGRkZGRk ZGRkIDw8IDcpLCAyMyAtIDEpCis6Y2FjaGU6Ojp1bnNpZ25lZDpkaXNwMjM6 ZGRkZGRkLGRkZGRkZGRkZGRkZGRkZGQ6IFNFWFQzMiAoKGRkZGRkZCA8PCAx KSArIChkZGRkZGRkZGRkZGRkZGRkIDw8IDcpLCAyMyAtIDEpCiAKIDpjYWNo ZTo6OnVuc2lnbmVkOmltbTU6aWlpaWk6U0VYVDMyIChpaWlpaSwgNCkKIDpj YWNoZTo6OnVuc2lnbmVkOmltbTY6aWlpaWlpOmlpaWlpaQpAQCAtNDYsNiAr NjAsNyBAQAogOmNhY2hlOjo6dW5zaWduZWQ6bGlzdDE4OkxMTEwsTExMTExM TExMTExMOigoTExMTCA8PCAxMikgKyBMTExMTExMTExMTEwpCiAKIDpjYWNo ZTo6OnVuc2lnbmVkOmJpdDM6YmJiOmJiYgorOmNhY2hlOjo6dW5zaWduZWQ6 Yml0NDpiYmJiOmJiYmIKIAogCiAvLyBXaGF0IGRvIHdlIGRvIHdpdGggYW4g aWxsZWdhbCBpbnN0cnVjdGlvbj8KQEAgLTU4LDggKzczLDcgQEAKIAogCiAK LS8vIEFkZAotCisvLyBBREQKIHJycnJyLDAwMTExMCxSUlJSUjpJOjo6YWRk CiAiYWRkIHI8cmVnMT4sIHI8cmVnMj4iCiB7CkBAIC04Myw2ICs5NywyMCBA QCBycnJyciwxMTAwMDAsUlJSUlIgKyBpaWlpaWlpaWlpaWlpaWlpOlZJCiAK IAogCisvLyBBREYKK3JycnJyLDExMTExMSxSUlJSUiArIHd3d3d3LDAxMTEw MSxjY2NjITEzLDA6WEk6OjphZGYKKyp2ODUwZTIKKyp2ODUwZTJ2MworImFk ZiAlczxjY2NjPiwgcjxyZWcxPiwgcjxyZWcyPiwgcjxyZWczPiIKK3sKKyAg aW50IGNvbmQgPSBjb25kaXRpb25fbWV0IChjY2NjKTsKKyAgVFJBQ0VfQUxV X0lOUFVUMyAoY29uZCwgR1JbcmVnMV0sIEdSW3JlZzJdKTsKKyAgR1JbcmVn M10gPSBHUltyZWcxXSArIEdSW3JlZzJdICsgKGNvbmQgPyAxIDogMCk7Cisg IFRSQUNFX0FMVV9SRVNVTFQxIChHUltyZWczXSk7Cit9CisKKworCiAvLyBB TkQKIHJycnJyLDAwMTAxMCxSUlJSUjpJOjo6YW5kCiAiYW5kIHI8cmVnMT4s IHI8cmVnMj4iCkBAIC0xNTMsMTIgKzE4MSwyNyBAQCBkZGRkZCwxMDExLGRk ZCxjY2NjOklJSTo6OkJjb25kCiAgIH0KIH0KIAorMDAwMDAxMTExMTEsZCxj Y2NjICsgZGRkZGRkZGRkZGRkZGRkLDE6VklJOjo6QmNvbmQKKyJicmVha3Bv aW50IjooKGRpc3AxNyA9PSAwKSAmJiAoY2NjYyA9PSAweDA1KSkKKyJiJXM8 Y2NjYz4gPGRpc3AxNz4iCisqdjg1MGUydjMKK3sKKyAgaW50IGNvbmQ7Cisg IGNvbmQgPSBjb25kaXRpb25fbWV0IChjY2NjKTsKKyAgaWYgKGNvbmQpCisg ICAgbmlhID0gY2lhICsgZGlzcDE3OworICBUUkFDRV9CUkFOQ0hfSU5QVVQx IChjb25kKTsKKyAgVFJBQ0VfQlJBTkNIX1JFU1VMVCAobmlhKTsKK30KKwog CiAKIC8vIEJTSAogcnJycnIsMTExMTExMDAwMDAgKyB3d3d3dywwMTEwMTAw MDAxMDpYSUk6Ojpic2gKICp2ODUwZQogKnY4NTBlMQorKnY4NTBlMgorKnY4 NTBlMnYzCiAiYnNoIHI8cmVnMj4sIHI8cmVnMz4iCiB7CiAgIHVuc2lnbmVk MzIgdmFsdWU7CkBAIC0xNzgsMTAgKzIyMSwxNCBAQCBycnJyciwxMTExMTEw MDAwMCArIHd3d3d3LDAxMTAxMDAwMDEwOlhJCiAgIFRSQUNFX0FMVV9SRVNV TFQgKEdSW3JlZzNdKTsKIH0KIAorCisKIC8vIEJTVwogcnJycnIsMTExMTEx MDAwMDAgKyB3d3d3dywwMTEwMTAwMDAwMDpYSUk6Ojpic3cKICp2ODUwZQog KnY4NTBlMQorKnY4NTBlMgorKnY4NTBlMnYzCiAiYnN3IHI8cmVnMj4sIHI8 cmVnMz4iCiB7CiAjZGVmaW5lIFdPUkRIQVNOVUxMQllURSh4KSAoKCh4KSAt IDB4MDEwMTAxMDEpICYgfih4KSYweDgwODA4MDgwKQpAQCAtMjA0LDEwICsy NTEsMTQgQEAgcnJycnIsMTExMTExMDAwMDAgKyB3d3d3dywwMTEwMTAwMDAw MDpYSQogICBUUkFDRV9BTFVfUkVTVUxUIChHUltyZWczXSk7CiB9CiAKKwor CiAvLyBDQUxMVAogMDAwMDAwMTAwMCxpaWlpaWk6SUk6OjpjYWxsdAogKnY4 NTBlCiAqdjg1MGUxCisqdjg1MGUyCisqdjg1MGUydjMKICJjYWxsdCA8aW1t Nj4iCiB7CiAgIHVuc2lnbmVkMzIgYWRyOwpAQCAtMjIxLDYgKzI3Miw1NSBA QCBycnJyciwxMTExMTEwMDAwMCArIHd3d3d3LDAxMTAxMDAwMDAwOlhJCiB9 CiAKIAorCisvLyBDQVhJCitycnJyciwxMTExMTEsUlJSUlIgKyB3d3d3dyww MDAxMTEwMTExMDpJWDo6OmNheGkKKyp2ODUwZTIKKyp2ODUwZTJ2MworImNh eGkgW3JlZzFdLCByZWcyLCByZWczIgoreworICB1bnNpZ25lZCBpbnQgeixz LGN5LG92OworICB1bnNpZ25lZDMyIGFkZHI7CisgIHVuc2lnbmVkMzIgdG9r ZW4scmVzdWx0OworCisgIGFkZHIgPSBHUltyZWcxXTsKKworICBpZiAobXB1 X2xvYWRfbWVtX3Rlc3Qoc2QsIGFkZHIsIDQsIHJlZzEpIAorICAgICAgJiYg bXB1X3N0b3JlX21lbV90ZXN0KHNkLCBhZGRyLCA0LCByZWcxKSkKKyAgICB7 CisgICAgICB0b2tlbiA9IGxvYWRfZGF0YV9tZW0gKHNkLCBhZGRyLCA0KTsK KworICAgICAgVFJBQ0VfQUxVX0lOUFVUMiAodG9rZW4sIEdSW3JlZzJdKTsK KworICAgICAgcmVzdWx0ID0gR1JbcmVnMl0gLSB0b2tlbjsKKworICAgICAg eiA9IChyZXN1bHQgPT0gMCk7CisgICAgICBzID0gKHJlc3VsdCAmIDB4ODAw MDAwMDApOworICAgICAgY3kgPSAoR1JbcmVnMl0gPCB0b2tlbik7CisgICAg ICBvdiA9ICgoR1JbcmVnMl0gJiAweDgwMDAwMDAwKSAhPSAodG9rZW4gJiAw eDgwMDAwMDAwKQorCSAgICAmJiAoR1JbcmVnMl0gJiAweDgwMDAwMDAwKSAh PSAocmVzdWx0ICYgMHg4MDAwMDAwMCkpOworCisgICAgICBpZiAocmVzdWx0 ID09IDApCisJeworCSAgc3RvcmVfZGF0YV9tZW0gKHNkLCBhZGRyLCA0LCBH UltyZWczXSk7CisJICBHUltyZWczXSA9IHRva2VuOworCX0KKyAgICAgIGVs c2UKKwl7CisJICBzdG9yZV9kYXRhX21lbSAoc2QsIGFkZHIsIDQsIHRva2Vu KTsKKwkgIEdSW3JlZzNdID0gdG9rZW47CisJfQorICAKKyAgICAgIC8qIFNl dCBjb25kaXRpb24gY29kZXMuICAqLworICAgICAgUFNXICY9IH4oUFNXX1og fCBQU1dfUyB8IFBTV19DWSB8IFBTV19PVik7CisgICAgICBQU1cgfD0gKCh6 ID8gUFNXX1ogOiAwKSB8IChzID8gUFNXX1MgOiAwKQorCSAgICAgIHwgKGN5 ID8gUFNXX0NZIDogMCkgfCAob3YgPyBQU1dfT1YgOiAwKSk7CisKKyAgICAg IFRSQUNFX0FMVV9SRVNVTFQxIChHUltyZWczXSk7CisgICAgfQorfQorCisK IC8vIENMUjEKIDEwLGJiYiwxMTExMTAsUlJSUlIgKyBkZGRkZGRkZGRkZGRk ZGRkOlZJSUk6OjpjbHIxCiAiY2xyMSA8Yml0Mz4sIDxkaXNwMTY+W3I8cmVn MT5dIgpAQCAtMjMxLDE2ICszMzEsMjEgQEAgcnJycnIsMTExMTExMDAwMDAg KyB3d3d3dywwMTEwMTAwMDAwMDpYSQogcnJycnIsMTExMTExLFJSUlJSICsg MDAwMDAwMDAxMTEwMDEwMDpJWDo6OmNscjEKICp2ODUwZQogKnY4NTBlMQor KnY4NTBlMgorKnY4NTBlMnYzCiAiY2xyMSByPHJlZzI+LCBbcjxyZWcxPl0i CiB7CiAgIENPTVBBVF8yIChPUF9FNDA3RTAgKCkpOwogfQogCiAKKwogLy8g Q1RSRVQKIDAwMDAwMTExMTExMDAwMDAgKyAwMDAwMDAwMTAxMDAwMTAwOlg6 OjpjdHJldAogKnY4NTBlCiAqdjg1MGUxCisqdjg1MGUyCisqdjg1MGUydjMK ICJjdHJldCIKIHsKICAgbmlhICA9IChDVFBDICYgfjEpOwpAQCAtMjQ4LDEw ICszNTMsMTQgQEAgcnJycnIsMTExMTExLFJSUlJSICsgMDAwMDAwMDAxMTEw MDEwMDpJWAogICBUUkFDRV9CUkFOQ0gxIChQU1cpOwogfQogCisKKwogLy8g Q01PVgogcnJycnIsMTExMTExLFJSUlJSICsgd3d3d3csMDExMDAxLGNjY2Ms MDpYSTo6OmNtb3YKICp2ODUwZQogKnY4NTBlMQorKnY4NTBlMgorKnY4NTBl MnYzCiAiY21vdiAlczxjY2NjPiwgcjxyZWcxPiwgcjxyZWcyPiwgcjxyZWcz PiIKIHsKICAgaW50IGNvbmQgPSBjb25kaXRpb25fbWV0IChjY2NjKTsKQEAg LTI2Myw2ICszNzIsOCBAQCBycnJyciwxMTExMTEsUlJSUlIgKyB3d3d3dyww MTEwMDEsY2NjYywwCiBycnJyciwxMTExMTEsaWlpaWkgKyB3d3d3dywwMTEw MDAsY2NjYywwOlhJSTo6OmNtb3YKICp2ODUwZQogKnY4NTBlMQorKnY4NTBl MgorKnY4NTBlMnYzCiAiY21vdiAlczxjY2NjPiwgPGltbTU+LCByPHJlZzI+ LCByPHJlZzM+IgogewogICBpbnQgY29uZCA9IGNvbmRpdGlvbl9tZXQgKGNj Y2MpOwpAQCAtMjcxLDYgKzM4Miw4IEBAIHJycnJyLDExMTExMSxpaWlpaSAr IHd3d3d3LDAxMTAwMCxjY2NjLDAKICAgVFJBQ0VfQUxVX1JFU1VMVCAoR1Jb cmVnM10pOwogfQogCisKKwogLy8gQ01QCiBycnJyciwwMDExMTEsUlJSUlI6 STo6OmNtcAogImNtcCByPHJlZzE+LCByPHJlZzI+IgpAQCAtMzAxLDYgKzQx NCw4IEBAIHJycnJyLDAxMDAxMSxpaWlpaTpJSTo6OmNtcAogMDAwMDAxMTAw MSxpaWlpaSxMICsgTExMTExMTExMTEwsUlJSUlI6WElJSTo6OmRpc3Bvc2UK ICp2ODUwZQogKnY4NTBlMQorKnY4NTBlMgorKnY4NTBlMnYzCiAiZGlzcG9z ZSA8aW1tNT4sIDxsaXN0MTI+IjpSUlJSUiA9PSAwCiAiZGlzcG9zZSA8aW1t NT4sIDxsaXN0MTI+LCBbcmVnMV0iCiB7CkBAIC0zMjksMTAgKzQ0NCwxMyBA QCBycnJyciwwMTAwMTEsaWlpaWk6SUk6OjpjbXAKIH0KIAogCisKIC8vIERJ VgogcnJycnIsMTExMTExLFJSUlJSICsgd3d3d3csMDEwMTEwMDAwMDA6WEk6 OjpkaXYKICp2ODUwZQogKnY4NTBlMQorKnY4NTBlMgorKnY4NTBlMnYzCiAi ZGl2IHI8cmVnMT4sIHI8cmVnMj4sIHI8cmVnMz4iCiB7CiAgIENPTVBBVF8y IChPUF8yQzAwN0UwICgpKTsKQEAgLTM5MCw2ICs1MDgsOCBAQCBycnJyciEw LDAwMDAxMCxSUlJSUiEwOkk6OjpkaXZoCiBycnJyciwxMTExMTEsUlJSUlIg KyB3d3d3dywwMTAxMDAwMDAwMDpYSTo6OmRpdmgKICp2ODUwZQogKnY4NTBl MQorKnY4NTBlMgorKnY4NTBlMnYzCiAiZGl2aCByPHJlZzE+LCByPHJlZzI+ LCByPHJlZzM+IgogewogICBDT01QQVRfMiAoT1BfMjgwMDdFMCAoKSk7CkBA IC00MDAsNiArNTIwLDggQEAgcnJycnIsMTExMTExLFJSUlJSICsgd3d3d3cs MDEwMTAwMDAwMDA6WAogcnJycnIsMTExMTExLFJSUlJSICsgd3d3d3csMDEw MTAwMDAwMTA6WEk6OjpkaXZodQogKnY4NTBlCiAqdjg1MGUxCisqdjg1MGUy Cisqdjg1MGUydjMKICJkaXZodSByPHJlZzE+LCByPHJlZzI+LCByPHJlZzM+ IgogewogICBDT01QQVRfMiAoT1BfMjgyMDdFMCAoKSk7CkBAIC00MTAsMTIg KzUzMiw2MCBAQCBycnJyciwxMTExMTEsUlJSUlIgKyB3d3d3dywwMTAxMDAw MDAxMDpYCiBycnJyciwxMTExMTEsUlJSUlIgKyB3d3d3dywwMTAxMTAwMDAx MDpYSTo6OmRpdnUKICp2ODUwZQogKnY4NTBlMQorKnY4NTBlMgorKnY4NTBl MnYzCiAiZGl2dSByPHJlZzE+LCByPHJlZzI+LCByPHJlZzM+IgogewogICBD T01QQVRfMiAoT1BfMkMyMDdFMCAoKSk7CiB9CiAKIAorLy8gRElWUQorcnJy cnIsMTExMTExLFJSUlJSICsgd3d3d3csMDEwMTExMTExMDA6WEk6OjpkaXZx Cisqdjg1MGUyCisqdjg1MGUydjMKKyJkaXZxIHI8cmVnMT4sIHI8cmVnMj4s IHI8cmVnMz4iCit7CisgIHVuc2lnbmVkIGludCBxdW90aWVudDsKKyAgdW5z aWduZWQgaW50IHJlbWFpbmRlcjsKKyAgdW5zaWduZWQgaW50IGRpdmlkZV9i eTsKKyAgdW5zaWduZWQgaW50IGRpdmlkZV90aGlzOworCisgIFRSQUNFX0FM VV9JTlBVVDIgKEdSW3JlZzFdLCBHUltyZWcyXSk7CisKKyAgZGl2aWRlX2J5 ICAgPSBHUltyZWcxXTsKKyAgZGl2aWRlX3RoaXMgPSBHUltyZWcyXTsKKyAg djg1MF9kaXYgKHNkLCBkaXZpZGVfYnksIGRpdmlkZV90aGlzLCAmcXVvdGll bnQsICZyZW1haW5kZXIpOworICBHUltyZWcyXSA9IHF1b3RpZW50OworICBH UltyZWczXSA9IHJlbWFpbmRlcjsKKworICBUUkFDRV9BTFVfUkVTVUxUMiAo R1JbcmVnMl0sIEdSW3JlZzNdKTsKK30KKworCisvLyBESVZRVQorcnJycnIs MTExMTExLFJSUlJSICsgd3d3d3csMDEwMTExMTExMTA6WEk6OjpkaXZxdQor KnY4NTBlMgorKnY4NTBlMnYzCisiZGl2cSByPHJlZzE+LCByPHJlZzI+LCBy PHJlZzM+IgoreworICB1bnNpZ25lZCBpbnQgcXVvdGllbnQ7CisgIHVuc2ln bmVkIGludCByZW1haW5kZXI7CisgIHVuc2lnbmVkIGludCBkaXZpZGVfYnk7 CisgIHVuc2lnbmVkIGludCBkaXZpZGVfdGhpczsKKworICBUUkFDRV9BTFVf SU5QVVQyIChHUltyZWcxXSwgR1JbcmVnMl0pOworICAKKyAgZGl2aWRlX2J5 ICAgPSBHUltyZWcxXTsKKyAgZGl2aWRlX3RoaXMgPSBHUltyZWcyXTsKKyAg djg1MF9kaXZ1IChzZCwgZGl2aWRlX2J5LCBkaXZpZGVfdGhpcywgJnF1b3Rp ZW50LCAmcmVtYWluZGVyKTsKKyAgR1JbcmVnMl0gPSBxdW90aWVudDsKKyAg R1JbcmVnM10gPSByZW1haW5kZXI7CisKKyAgVFJBQ0VfQUxVX1JFU1VMVDIg KEdSW3JlZzJdLCBHUltyZWczXSk7Cit9CisKKwogLy8gRUkKIDEwMDAwMTEx MTExMDAwMDAgKyAwMDAwMDAwMTAxMTAwMDAwOlg6OjplaQogImVpIgpAQCAt NDI1LDYgKzU5NSw3NiBAQCBycnJyciwxMTExMTEsUlJSUlIgKyB3d3d3dyww MTAxMTAwMDAxMDpYCiAKIAogCisvLyBFSVJFVAorMDAwMDAxMTExMTEwMDAw MCArIDAwMDAwMDAxMDEwMDEwMDA6WDo6OmVpcmV0CisiZWlyZXQiCisqdjg1 MGUyCisqdjg1MGUydjMKK3sKKyAgVFJBQ0VfQUxVX0lOUFVUMSAoTVBNICYg TVBNX0FVRSk7CisKKyAgbmlhID0gRUlQQzsJLyogbmV4dCBQQyAqLworICBp ZiAoTVBNICYgTVBNX0FVRSkKKyAgICB7CisgICAgICBQU1cgPSBFSVBTVzsK KyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBQU1cgPSAoUFNXICYgKFBT V19OUFYgfCBQU1dfRE1QIHwgUFNXX0lNUCkpCisJfCAoRUlQU1cgJiB+KFBT V19OUFYgfCBQU1dfRE1QIHwgUFNXX0lNUCkpOworICAgIH0KKworICBUUkFD RV9BTFVfUkVTVUxUMSAoUFNXKTsKKyAgVFJBQ0VfQlJBTkNIX1JFU1VMVCAo bmlhKTsKK30KKworCisKKy8vIEZFUkVUCiswMDAwMDExMTExMTAwMDAwICsg MDAwMDAwMDEwMTAwMTAxMDpYOjo6ZmVyZXQKKyJmZXJldCIKKyp2ODUwZTIK Kyp2ODUwZTJ2MworeworICBUUkFDRV9BTFVfSU5QVVQxIChNUE0gJiBNUE1f QVVFKTsKKworICBuaWEgPSBGRVBDOwkvKiBuZXh0IFBDICovCisgIGlmIChN UE0gJiBNUE1fQVVFKQorICAgIHsKKyAgICAgIFBTVyA9IEZFUFNXOworICAg IH0KKyAgZWxzZQorICAgIHsKKyAgICAgIFBTVyA9IChQU1cgJiAoUFNXX05Q ViB8IFBTV19ETVAgfCBQU1dfSU1QKSkKKwl8IChGRVBTVyAmIH4oUFNXX05Q ViB8IFBTV19ETVAgfCBQU1dfSU1QKSk7CisgICAgfQorCisgIFRSQUNFX0FM VV9SRVNVTFQxIChQU1cpOworICBUUkFDRV9CUkFOQ0hfUkVTVUxUIChuaWEp OworfQorCisKKy8vIEZFVFJBUAorMCxiYmJiITAsMDAwMDEwMDAwMDA6STo6 OmZldHJhcAorImZldHJhcCIKKyp2ODUwZTIKKyp2ODUwZTJ2MworeworICBU UkFDRV9BTFVfSU5QVVQwICgpOworCisgIEZFUEMgPSBQQyArIDI7CisgIEZF UFNXID0gUFNXOworICBFQ1IgJj0gfkVDUl9GRUNDOworICBFQ1IgfD0gKDB4 MzAgKyBiaXQ0KSA8PCAxNjsKKyAgRkVJQyA9IDB4MzAgKyBiaXQ0OworICBQ U1cgfD0gUFNXX0VQIHwgUFNXX0lEIHwgUFNXX05QOworICBuaWEgPSAweDMw OwkvKiBuZXh0IFBDICovCisKKyAgVFJBQ0VfQUxVX1JFU1VMVDEgKFBTVyk7 CisgIFRSQUNFX0JSQU5DSF9SRVNVTFQgKG5pYSk7Cit9CisKKwogLy8gSEFM VAogMDAwMDAxMTExMTEwMDAwMCArIDAwMDAwMDAxMDAxMDAwMDA6WDo6Omhh bHQKICJoYWx0IgpAQCAtNDM0LDEwICs2NzQsMzMgQEAgcnJycnIsMTExMTEx LFJSUlJSICsgd3d3d3csMDEwMTEwMDAwMTA6WAogCiAKIAorLy8gSFNICity cnJyciwxMTExMTEwMDAwMCArIHd3d3d3LDAxMTAxMDAwMTEwOlhJSTo6Omhz aAorKnY4NTBlMgorKnY4NTBlMnYzCisiaHNoIHI8cmVnMj4sIHI8cmVnMz4i Cit7CisgIHVuc2lnbmVkMzIgdmFsdWU7CisgIFRSQUNFX0FMVV9JTlBVVDEg KEdSW3JlZzJdKTsKKworICB2YWx1ZSA9IDB4ZmZmZiAmIEdSW3JlZzJdOwor ICBHUltyZWczXSA9IEdSW3JlZzJdOworCisgIFBTVyAmPSB+KFBTV19aIHwg UFNXX1MgfCBQU1dfQ1kgfCBQU1dfT1YpOworCisgIGlmICh2YWx1ZSA9PSAw KSB7IFBTVyB8PSBQU1dfWjsgUFNXIHw9IFBTV19DWTsgfQorICBpZiAodmFs dWUgJiAweDgwMDAwMDAwKSBQU1cgfD0gUFNXX1M7CisKKyAgVFJBQ0VfQUxV X1JFU1VMVDEgKEdSW3JlZzNdKTsKK30KKworCiAvLyBIU1cKIHJycnJyLDEx MTExMTAwMDAwICsgd3d3d3csMDExMDEwMDAxMDA6WElJOjo6aHN3CiAqdjg1 MGUKICp2ODUwZTEKKyp2ODUwZTIKKyp2ODUwZTJ2MwogImhzdyByPHJlZzI+ LCByPHJlZzM+IgogewogICB1bnNpZ25lZDMyIHZhbHVlOwpAQCAtNDY5LDYg KzczMiwxNiBAQCBycnJyciEwLDExMTEwLGRkZGRkZCArIGRkZGRkZGRkZGRk ZGRkZCwwCiAgIFRSQUNFX0JSQU5DSDEgKEdSW3JlZzJdKTsKIH0KIAorMDAw MDAwMTAxMTEsUlJSUlIhMCArIGlpaWlpaWlpaWlpaWlpaWkgKyBJSUlJSUlJ SUlJSUlJSUlJOlZJOjo6amFybDMyCisqdjg1MGUyCisqdjg1MGUydjMKKyJq YXJsIDxpbW0zMj4sIHI8cmVnMT4iCit7CisgIEdSW3JlZzFdID0gbmlhOwor ICBuaWEgPSAoY2lhICsgaW1tMzIpICYgfjE7CisKKyAgVFJBQ0VfQlJBTkNI X1JFU1VMVCAobmlhKTsKK30KIAogCiAvLyBKTVAKQEAgLTQ3OSw2ICs3NTIs MTUgQEAgcnJycnIhMCwxMTExMCxkZGRkZGQgKyBkZGRkZGRkZGRkZGRkZGQs MAogICBUUkFDRV9CUkFOQ0gwICgpOwogfQogCiswMDAwMDExMDExMSxSUlJS UiArIGlpaWlpaWlpaWlpaWlpaWkgKyBJSUlJSUlJSUlJSUlJSUlJOlZJOjo6 am1wMzIKKyp2ODUwZTIKKyp2ODUwZTJ2MworImptcCA8aW1tMzI+W3I8cmVn MT5dIgoreworICBuaWEgPSAoR1JbcmVnMV0gKyBpbW0zMikgJiB+MTsKKwor ICBUUkFDRV9CUkFOQ0hfUkVTVUxUIChuaWEpOworfQogCiAKIC8vIEpSCkBA IC00OTAsNiArNzcyLDE3IEBAIHJycnJyITAsMTExMTAsZGRkZGRkICsgZGRk ZGRkZGRkZGRkZGRkLDAKIH0KIAogCisvLyBKUjMyCiswMDAwMDAxMDExMSww MDAwMCArIGlpaWlpaWlpaWlpaWlpaWkgKyBJSUlJSUlJSUlJSUlJSUlJOlZJ Ojo6anIzMgorKnY4NTBlMgorKnY4NTBlMnYzCisianIgPGltbTMyPiIKK3sK KyAgbmlhID0gKGNpYSArIGltbTMyKSAmIH4xOworCisgIFRSQUNFX0JSQU5D SF9SRVNVTFQgKG5pYSk7Cit9CisKIAogLy8gTEQKIHJycnJyLDExMTAwMCxS UlJSUiArIGRkZGRkZGRkZGRkZGRkZGQ6VklJOjo6bGQuYgpAQCAtNDk4LDQ3 ICs3OTEsMzY4IEBAIHJycnJyLDExMTAwMCxSUlJSUiArIGRkZGRkZGRkZGRk ZGRkZGQ6VkkKICAgQ09NUEFUXzIgKE9QXzcwMCAoKSk7CiB9CiAKKzAwMDAw MTExMTAwLFJSUlJSK3d3d3d3LGRkZGRkZGQsMDEwMStkZGRkZGRkZGRkZGRk ZGRkOlhJVjo6OmxkLmIKKyJsZC5iIDxkaXNwMjM+W3I8cmVnMT5dLCByPHJl ZzM+IgorKnY4NTBlMnYzCit7CisgIHVuc2lnbmVkMzIgYWRkciA9IEdSW3Jl ZzFdICsgZGlzcDIzOworICB1bnNpZ25lZDMyIHJlc3VsdCA9IEVYVEVORDgg KGxvYWRfZGF0YV9tZW0gKHNkLCBhZGRyLCAxKSk7CisgIEdSW3JlZzNdID0g cmVzdWx0OworICBUUkFDRV9MRCAoYWRkciwgcmVzdWx0KTsKK30KKwogcnJy cnIsMTExMDAxLFJSUlJSICsgZGRkZGRkZGRkZGRkZGRkLDA6VklJOjo6bGQu aAogImxkLmggPGRpc3AxNj5bcjxyZWcxPl0sIHI8cmVnMj4iCiB7CiAgIENP TVBBVF8yIChPUF83MjAgKCkpOwogfQogCiswMDAwMDExMTEwMCxSUlJSUit3 d3d3dyxkZGRkZGQsMDAxMTErZGRkZGRkZGRkZGRkZGRkZDpYSVY6OjpsZC5o Cisqdjg1MGUydjMKKyJsZC5oIDxkaXNwMjM+W3I8cmVnMT5dLCByPHJlZzM+ IgoreworICB1bnNpZ25lZDMyIGFkZHIgPSBHUltyZWcxXSArIGRpc3AyMzsK KyAgdW5zaWduZWQzMiByZXN1bHQgPSBFWFRFTkQxNiAobG9hZF9kYXRhX21l bSAoc2QsIGFkZHIsIDIpKTsKKyAgR1JbcmVnM10gPSByZXN1bHQ7CisgIFRS QUNFX0xEIChhZGRyLCByZXN1bHQpOworfQorCiBycnJyciwxMTEwMDEsUlJS UlIgKyBkZGRkZGRkZGRkZGRkZGQsMTpWSUk6OjpsZC53CiAibGQudyA8ZGlz cDE2PltyPHJlZzE+XSwgcjxyZWcyPiIKIHsKICAgQ09NUEFUXzIgKE9QXzEw NzIwICgpKTsKIH0KIAorMDAwMDAxMTExMDAsUlJSUlIrd3d3d3csZGRkZGRk LDAxMDAxK2RkZGRkZGRkZGRkZGRkZGQ6WElWOjo6bGQudworKnY4NTBlMnYz CisibGQudyA8ZGlzcDIzPltyPHJlZzE+XSwgcjxyZWczPiIKK3sKKyAgdW5z aWduZWQzMiBhZGRyID0gR1JbcmVnMV0gKyBkaXNwMjM7CisgIHVuc2lnbmVk MzIgcmVzdWx0ID0gbG9hZF9kYXRhX21lbSAoc2QsIGFkZHIsIDQpOworICBH UltyZWczXSA9IHJlc3VsdDsKKyAgVFJBQ0VfTEQgKGFkZHIsIHJlc3VsdCk7 Cit9CisKIHJycnJyITAsMTExMTAsYixSUlJSUiArIGRkZGRkZGRkZGRkZGRk ZCwxOlZJSTo6OmxkLmJ1CiAqdjg1MGUKICp2ODUwZTEKKyp2ODUwZTIKKyp2 ODUwZTJ2MwogImxkLmJ1IDxkaXNwMTY+W3I8cmVnMT5dLCByPHJlZzI+Igog ewogICBDT01QQVRfMiAoT1BfMTA3ODAgKCkpOwogfQogCiswMDAwMDExMTEw MSxSUlJSUit3d3d3dyxkZGRkZGRkLDAxMDErZGRkZGRkZGRkZGRkZGRkZDpY SVY6OjpsZC5idQorKnY4NTBlMnYzCisibGQuYnUgPGRpc3AyMz5bcjxyZWcx Pl0sIHI8cmVnMz4iCit7IAorICB1bnNpZ25lZDMyIGFkZHIgPSBHUltyZWcx XSArIGRpc3AyMzsKKyAgdW5zaWduZWQzMiByZXN1bHQgPSBsb2FkX2RhdGFf bWVtIChzZCwgYWRkciwgMSk7CisgIEdSW3JlZzNdID0gcmVzdWx0OworICBU UkFDRV9MRCAoYWRkciwgcmVzdWx0KTsKK30KKwogcnJycnIhMCwxMTExMTEs UlJSUlIgKyBkZGRkZGRkZGRkZGRkZGQsMTpWSUk6OjpsZC5odQogKnY4NTBl CiAqdjg1MGUxCisqdjg1MGUyCisqdjg1MGUydjMKICJsZC5odSA8ZGlzcDE2 PltyPHJlZzE+XSwgcjxyZWcyPiIKIHsKICAgQ09NUEFUXzIgKE9QXzEwN0Uw ICgpKTsKIH0KIAorMDAwMDAxMTExMDEsUlJSUlIrd3d3d3csZGRkZGRkLDAw MTExK2RkZGRkZGRkZGRkZGRkZGQ6WElWOjo6bGQuaHUKKyp2ODUwZTJ2Mwor ImxkLmh1IDxkaXNwMjM+W3I8cmVnMT5dLCByPHJlZzM+IgoreworICB1bnNp Z25lZDMyIGFkZHIgPSBHUltyZWcxXSArIGRpc3AyMzsKKyAgdW5zaWduZWQz MiByZXN1bHQgPSBsb2FkX2RhdGFfbWVtIChzZCwgYWRkciwgMik7CisgIEdS W3JlZzNdID0gcmVzdWx0OworICBUUkFDRV9MRCAoYWRkciwgcmVzdWx0KTsK K30KKworCiAKIC8vIExEU1IKIHJlZ0lELDExMTExMSxSUlJSUiArIDAwMDAw MDAwMDAxMDAwMDA6SVg6OjpsZHNyCiAibGRzciByPHJlZzE+LCBzPHJlZ0lE PiIKIHsKKyAgdWludDMyIHNyZWcgPSBHUltyZWcxXTsKICAgVFJBQ0VfQUxV X0lOUFVUMSAoR1JbcmVnMV0pOwogICAKLSAgaWYgKCZQU1cgPT0gJlNSW3Jl Z0lEXSkKLSAgICBQU1cgPSAoR1JbcmVnMV0gJiAoQ1BVKS0+cHN3X21hc2sp OworICAgaWYgKChpZGVjb2RlX2lzc3VlID09IGlkZWNvZGVfdjg1MGUyX2lz c3VlCisgICAgICAgfHwgaWRlY29kZV9pc3N1ZSA9PSBpZGVjb2RlX3Y4NTBl MnYzX2lzc3VlKQorICAgICAgJiYgcmVnSUQgPCAyOCkKKyAgICB7CisgICAg ICBpbnQgcHJvdGVjdF9wID0gKFBTVyAmIFBTV19OUFYpID8gMSA6IDA7CisK KyAgICAgIAorICAgICAgc3dpdGNoIChCU0VMICYgMHhmZmZmKQorCXsKKwlj YXNlIDB4MDAwMDoKKwkgIGlmICgoUFNXICYgUFNXX05QVikKKwkgICAgICAm JiAoKHJlZ0lEID49IDggJiYgcmVnSUQgPD0gMTIpCisJCSAgfHwgKHJlZ0lE ID49IDIyICYmIHJlZ0lEIDw9IDI3KQorCQkgIHx8IHJlZ0lEID09IFBTV19S RUdOTykpCisJICAgIHsKKwkgICAgICBwcm90ZWN0X3AgPSAwOworCSAgICB9 CisJICBicmVhazsKKwljYXNlIDB4MTAwMDoJLyogTVBVMCAqLworCSAgYnJl YWs7CisJY2FzZSAweDEwMDE6CS8qIE1QVTEgKi8KKwkgIGJyZWFrOworCWNh c2UgMHgyMDAwOgkvKiBGUFUgKi8KKwkgIGlmICgoUFNXICYgUFNXX05QVikK KwkgICAgICAmJiAoKC8qIHJlZ0lEID49IDAgJiYgKi8gcmVnSUQgPD0gNSkK KwkJICB8fCByZWdJRCA9PSA4IAorCQkgIHx8IHJlZ0lEID09IDkgCisJCSAg fHwgcmVnSUQgPT0gMTAgCisJCSAgfHwgKHJlZ0lEID49IDExICYmIHJlZ0lE IDw9IDI2KSkpCisJICAgIHsKKwkgICAgICBwcm90ZWN0X3AgPSAwOworCSAg ICB9CisJICBicmVhazsKKwljYXNlIDB4ZmYwMDoKKwkgIGlmICgoUFNXICYg UFNXX05QVikKKwkgICAgICAgJiYgKHJlZ0lEID09IDYgCisJCSAgIHx8IHJl Z0lEID09IDcgCisJCSAgIHx8IHJlZ0lEID09IDggCisJCSAgIHx8IHJlZ0lE ID09IDkgCisJCSAgIHx8IHJlZ0lEID09IDEwIAorCQkgICB8fCAocmVnSUQg Pj0gMTEgJiYgcmVnSUQgPD0gMTUpCisJCSAgIHx8IHJlZ0lEID09IDE4IAor CQkgICB8fCByZWdJRCA9PSAxOSAKKwkJICAgfHwgKHJlZ0lEID49IDIxICYm IHJlZ0lEIDw9IDI3KSkpCisJICAgIHsKKwkgICAgICBwcm90ZWN0X3AgPSAw OworCSAgICB9CisJICBicmVhazsKKwljYXNlIDB4ZmZmZjoKKwkgIGlmICgo UFNXICYgUFNXX05QVikKKwkgICAgICAgJiYgKHJlZ0lEID09IDYgCisJCSAg IHx8IHJlZ0lEID09IDcgCisJCSAgIHx8IHJlZ0lEID09IDggCisJCSAgIHx8 IHJlZ0lEID09IDkgCisJCSAgIHx8IHJlZ0lEID09IDEwIAorCQkgICB8fCBy ZWdJRCA9PSAxMSAKKwkJICAgfHwgcmVnSUQgPT0gMTIgCisJCSAgIHx8IHJl Z0lEID09IDE1IAorCQkgICB8fCByZWdJRCA9PSAxOCAKKwkJICAgfHwgcmVn SUQgPT0gMTkgCisJCSAgIHx8IChyZWdJRCA+PSAyMSAmJiByZWdJRCA8PSAy NykpKQorCSAgICB7CisJICAgICAgcHJvdGVjdF9wID0gMDsKKwkgICAgfQor CSAgYnJlYWs7CisJfQorCisgICAgICBpZiAoIXByb3RlY3RfcCkKKwl7CisJ ICBzd2l0Y2ggKEJTRUwgJiAweGZmZmYpCisJICAgIHsKKwkgICAgY2FzZSAw eDAwMDA6CisJICAgIGNhc2UgMHhmZjAwOgkvKiB1c2VyMCBiYW5rICovCisJ ICAgIGNhc2UgMHhmZmZmOgkvKiB1c2VyMSBiYW5rICovCisJICAgICAgaWYo cmVnSUQgPT0gUFNXX1JFR05PKQorCQl7CisJCSAgU1JbcmVnSURdID0gc3Jl ZyAmICgoUFNXICYgUFNXX05QVikgPyAweGYgOiB+MCk7CisJCX0KKwkgICAg ICBlbHNlCisJCXsKKwkJICBTUltyZWdJRF0gPSBzcmVnOworCQl9CisJICAg ICAgYnJlYWs7CisJICAgIGNhc2UgMHgxMDAwOgorCSAgICAgIE1QVTBfU1Jb cmVnSURdID0gc3JlZzsKKwkgICAgICBicmVhazsKKwkgICAgY2FzZSAweDEw MDE6CisJICAgICAgaWYgKHJlZ0lEID09IE1QQ19SRUdOTykKKwkJeworCQkg IFBQQyAmPSB+UFBDX1BQRTsKKwkJICBTUEFMICY9IH5TUEFMX1NQRTsKKwkJ ICBJUEEwTCAmPSB+SVBBX0lQRTsKKwkJICBJUEExTCAmPSB+SVBBX0lQRTsK KwkJICBJUEEyTCAmPSB+SVBBX0lQRTsKKwkJICBJUEEzTCAmPSB+SVBBX0lQ RTsKKwkJICBEUEEwTCAmPSB+RFBBX0RQRTsKKwkJICBEUEExTCAmPSB+RFBB X0RQRTsKKwkJICBEQ0MgJj0gfihEQ0NfRENFMCB8IERDQ19EQ0UxKTsKKwkJ fQorCSAgICAgIGVsc2UKKwkJeworCQkgIE1QVTFfU1JbcmVnSURdID0gc3Jl ZzsKKwkJfQorCSAgICAgIGJyZWFrOworCSAgICBjYXNlIDB4MjAwMDoJLyog RlBVICovCisJICAgICAgaWYgKHJlZ0lEID09IEZQU1RfUkVHTk8pCisJCXsK KwkJICB1bnNpZ25lZCBpbnQgdmFsID0gRlBTUiAmIH4oRlBTUl9QUiB8IEZQ U1JfWEMgfCBGUFNSX1hQKTsKKwkgICAgICAKKwkJICB2YWwgfD0gKChzcmVn ICYgRlBTVF9QUikgPyBGUFNSX1BSIDogMCkKKwkJICAgIHwgKChzcmVnICYg RlBTVF9YQ0UpID8gRlBTUl9YQ0UgOiAwKQorCQkgICAgfCAoKHNyZWcgJiBG UFNUX1hDVikgPyBGUFNSX1hDViA6IDApCisJCSAgICB8ICgoc3JlZyAmIEZQ U1RfWENaKSA/IEZQU1JfWENaIDogMCkKKwkJICAgIHwgKChzcmVnICYgRlBT VF9YQ08pID8gRlBTUl9YQ08gOiAwKQorCQkgICAgfCAoKHNyZWcgJiBGUFNU X1hDVSkgPyBGUFNSX1hDVSA6IDApCisJCSAgICB8ICgoc3JlZyAmIEZQU1Rf WENJKSA/IEZQU1JfWENJIDogMCkKKwkJICAgIHwgKChzcmVnICYgRlBTVF9Y UFYpID8gRlBTUl9YUFYgOiAwKQorCQkgICAgfCAoKHNyZWcgJiBGUFNUX1hQ WikgPyBGUFNSX1hQWiA6IDApCisJCSAgICB8ICgoc3JlZyAmIEZQU1RfWFBP KSA/IEZQU1JfWFBPIDogMCkKKwkJICAgIHwgKChzcmVnICYgRlBTVF9YUFUp ID8gRlBTUl9YUFUgOiAwKQorCQkgICAgfCAoKHNyZWcgJiBGUFNUX1hQSSkg PyBGUFNSX1hQSSA6IDApOworCQkgIEZQU1IgPSB2YWw7CisJCX0KKwkgICAg ICBlbHNlIGlmIChyZWdJRCA9PSBGUENGR19SRUdOTykKKwkJeworCQkgIHVu c2lnbmVkIGludCB2YWwgPSBGUFNSICYgfihGUFNSX1JNIHwgRlBTUl9YRSk7 CisKKwkJICB2YWwgfD0gKCgoc3JlZyAmIEZQQ0ZHX1JNKSA+PiA3KSA8PCAx OCkKKwkJICAgIHwgKChzcmVnICYgRlBDRkdfWEVWKSA/IEZQU1JfWEVWIDog MCkKKwkJICAgIHwgKChzcmVnICYgRlBDRkdfWEVaKSA/IEZQU1JfWEVaIDog MCkKKwkJICAgIHwgKChzcmVnICYgRlBDRkdfWEVPKSA/IEZQU1JfWEVPIDog MCkKKwkJICAgIHwgKChzcmVnICYgRlBDRkdfWEVVKSA/IEZQU1JfWEVVIDog MCkKKwkJICAgIHwgKChzcmVnICYgRlBDRkdfWEVJKSA/IEZQU1JfWEVJIDog MCk7CisJCSAgRlBTUiA9IHZhbDsKKwkJfQorCisJICAgICAgRlBVX1NSW3Jl Z0lEXSA9IHNyZWc7CisJICAgICAgYnJlYWs7CisJICAgIH0KKwl9CisgICAg fQogICBlbHNlCi0gICAgU1JbcmVnSURdID0gR1JbcmVnMV07CisgICAgewor ICAgICAgU1JbcmVnSURdID0gc3JlZzsKKyAgICB9CisgCisgIFRSQUNFX0FM VV9SRVNVTFQgKHNyZWcpOworfQorCisKKworLy8gTUFDCitycnJyciwxMTEx MTEsUlJSUlIgKyB3d3d3LDAwMTExMTAsbW1tbSwwOlhJOjo6bWFjCisqdjg1 MGUyCisqdjg1MGUydjMKKyJtYWMgcjxyZWcxPiwgcjxyZWcyPiwgcjxyZWcz ZT4sIHI8cmVnNGU+IgoreworICB1bnNpZ25lZCBsb25nIG9wMDsKKyAgdW5z aWduZWQgbG9uZyBvcDE7CisgIHVuc2lnbmVkIGxvbmcgb3AyOworICB1bnNp Z25lZCBsb25nIG9wMmhpOworICB1bnNpZ25lZCBsb25nIGxvOworICB1bnNp Z25lZCBsb25nIG1pZDE7CisgIHVuc2lnbmVkIGxvbmcgbWlkMjsKKyAgdW5z aWduZWQgbG9uZyBoaTsKKyAgdW5zaWduZWQgbG9uZyBSZExvOworICB1bnNp Z25lZCBsb25nIFJkSGk7CisgIGludCAgICAgICAgICAgY2Fycnk7CisgIGJm ZF9ib29sZWFuIHNpZ247CisKKyAgb3AwID0gR1JbcmVnMV07CisgIG9wMSA9 IEdSW3JlZzJdOworICBvcDIgPSBHUltyZWczZV07CisgIG9wMmhpID0gR1Jb cmVnM2UrMV07CisKKyAgVFJBQ0VfQUxVX0lOUFVUNCAob3AwLCBvcDEsIG9w Miwgb3AyaGkpOworCisgIHNpZ24gPSAob3AwIF4gb3AxKSAmIDB4ODAwMDAw MDA7CisJICAKKyAgaWYgKCgoc2lnbmVkIGxvbmcpIG9wMCkgPCAwKQorICAg IG9wMCA9IC0gb3AwOworCSAgCisgIGlmICgoKHNpZ25lZCBsb25nKSBvcDEp IDwgMCkKKyAgICBvcDEgPSAtIG9wMTsKKyAgICAgIAorICAvKiBXZSBjYW4g c3BsaXQgdGhlIDMyeDMyIGludG8gZm91ciAxNngxNiBvcGVyYXRpb25zLiBU aGlzIGVuc3VyZXMKKyAgICAgdGhhdCB3ZSBkbyBub3QgbG9zZSBwcmVjaXNp b24gb24gMzJiaXQgb25seSBob3N0czogKi8KKyAgbG8gICA9ICggKG9wMCAg ICAgICAgJiAweEZGRkYpICogIChvcDEgICAgICAgICYgMHhGRkZGKSk7Cisg IG1pZDEgPSAoIChvcDAgICAgICAgICYgMHhGRkZGKSAqICgob3AxID4+IDE2 KSAmIDB4RkZGRikpOworICBtaWQyID0gKCgob3AwID4+IDE2KSAmIDB4RkZG RikgKiAgKG9wMSAgICAgICAgJiAweEZGRkYpKTsKKyAgaGkgICA9ICgoKG9w MCA+PiAxNikgJiAweEZGRkYpICogKChvcDEgPj4gMTYpICYgMHhGRkZGKSk7 CisgIAorICAvKiBXZSBub3cgbmVlZCB0byBhZGQgYWxsIG9mIHRoZXNlIHJl c3VsdHMgdG9nZXRoZXIsIHRha2luZyBjYXJlCisgICAgIHRvIHByb3BvZ2F0 ZSB0aGUgY2FycmllcyBmcm9tIHRoZSBhZGRpdGlvbnM6ICovCisgIFJkTG8g PSBBZGQzMiAobG8sIChtaWQxIDw8IDE2KSwgJiBjYXJyeSk7CisgIFJkSGkg PSBjYXJyeTsKKyAgUmRMbyA9IEFkZDMyIChSZExvLCAobWlkMiA8PCAxNiks ICYgY2FycnkpOworICBSZEhpICs9IChjYXJyeSArICgobWlkMSA+PiAxNikg JiAweEZGRkYpICsgKChtaWQyID4+IDE2KSAmIDB4RkZGRikgKyBoaSk7CisK KyAgaWYgKHNpZ24pCisgICAgeworICAgICAgUmRMbyA9IH4gUmRMbzsKKyAg ICAgIFJkSGkgPSB+IFJkSGk7CisgICAgICBpZiAoUmRMbyA9PSAweEZGRkZG RkZGKQorCXsKKwkgIFJkTG8gPSAwOworCSAgUmRIaSArPSAxOworCX0KKyAg ICAgIGVsc2UKKwlSZExvICs9IDE7CisgICAgfQorCisgIFJkTG8gPSBBZGQz MiAoUmRMbywgb3AyLCAmIGNhcnJ5KTsKKyAgUmRIaSArPSBjYXJyeSArIG9w MmhpOyAKKworICAvKiBTdG9yZSB0aGUgcmVzdWx0IGFuZCBjb25kaXRpb24g Y29kZXMuICAqLworICBHUltyZWc0ZV0gPSBSZExvOworICBHUltyZWc0ZSAr IDEgXSA9IFJkSGk7CisKKyAgVFJBQ0VfQUxVX1JFU1VMVDIgKFJkTG8sIFJk SGkpOworfQorCisKKworLy8gTUFDVQorcnJycnIsMTExMTExLFJSUlJSICsg d3d3dywwMDExMTExLG1tbW0sMDpYSTo6Om1hY3UKKyp2ODUwZTIKKyp2ODUw ZTJ2MworIm1hY3UgcjxyZWcxPiwgcjxyZWcyPiwgcjxyZWczZT4sIHI8cmVn NGU+IgoreworICB1bnNpZ25lZCBsb25nIG9wMDsKKyAgdW5zaWduZWQgbG9u ZyBvcDE7CisgIHVuc2lnbmVkIGxvbmcgb3AyOworICB1bnNpZ25lZCBsb25n IG9wMmhpOworICB1bnNpZ25lZCBsb25nIGxvOworICB1bnNpZ25lZCBsb25n IG1pZDE7CisgIHVuc2lnbmVkIGxvbmcgbWlkMjsKKyAgdW5zaWduZWQgbG9u ZyBoaTsKKyAgdW5zaWduZWQgbG9uZyBSZExvOworICB1bnNpZ25lZCBsb25n IFJkSGk7CisgIGludCAgICAgICAgICAgY2Fycnk7CisgIAorICBvcDAgPSBH UltyZWcxXTsKKyAgb3AxID0gR1JbcmVnMl07CisgIG9wMiA9IEdSW3JlZzNl XTsKKyAgb3AyaGkgPSBHUltyZWczZSArIDFdOworCisgIFRSQUNFX0FMVV9J TlBVVDQgKG9wMCwgb3AxLCBvcDIsIG9wMmhpKTsKKworICAvKiBXZSBjYW4g c3BsaXQgdGhlIDMyeDMyIGludG8gZm91ciAxNngxNiBvcGVyYXRpb25zLiBU aGlzIGVuc3VyZXMKKyAgICAgdGhhdCB3ZSBkbyBub3QgbG9zZSBwcmVjaXNp b24gb24gMzJiaXQgb25seSBob3N0czogKi8KKyAgbG8gICA9ICggKG9wMCAg ICAgICAgJiAweEZGRkYpICogIChvcDEgICAgICAgICYgMHhGRkZGKSk7Cisg IG1pZDEgPSAoIChvcDAgICAgICAgICYgMHhGRkZGKSAqICgob3AxID4+IDE2 KSAmIDB4RkZGRikpOworICBtaWQyID0gKCgob3AwID4+IDE2KSAmIDB4RkZG RikgKiAgKG9wMSAgICAgICAgJiAweEZGRkYpKTsKKyAgaGkgICA9ICgoKG9w MCA+PiAxNikgJiAweEZGRkYpICogKChvcDEgPj4gMTYpICYgMHhGRkZGKSk7 CiAgIAotICBUUkFDRV9BTFVfUkVTVUxUIChTUltyZWdJRF0pOworICAvKiBX ZSBub3cgbmVlZCB0byBhZGQgYWxsIG9mIHRoZXNlIHJlc3VsdHMgdG9nZXRo ZXIsIHRha2luZyBjYXJlCisgICAgIHRvIHByb3BvZ2F0ZSB0aGUgY2Fycmll cyBmcm9tIHRoZSBhZGRpdGlvbnM6ICovCisgIFJkTG8gPSBBZGQzMiAobG8s IChtaWQxIDw8IDE2KSwgJiBjYXJyeSk7CisgIFJkSGkgPSBjYXJyeTsKKyAg UmRMbyA9IEFkZDMyIChSZExvLCAobWlkMiA8PCAxNiksICYgY2FycnkpOwor ICBSZEhpICs9IChjYXJyeSArICgobWlkMSA+PiAxNikgJiAweEZGRkYpICsg KChtaWQyID4+IDE2KSAmIDB4RkZGRikgKyBoaSk7CisKKyAgUmRMbyA9IEFk ZDMyIChSZExvLCBvcDIsICYgY2FycnkpOworICBSZEhpICs9IGNhcnJ5ICsg b3AyaGk7IAorCisgIC8qIFN0b3JlIHRoZSByZXN1bHQgYW5kIGNvbmRpdGlv biBjb2Rlcy4gICovCisgIEdSW3JlZzRlXSA9IFJkTG87CisgIEdSW3JlZzRl KzFdID0gUmRIaTsKKworICBUUkFDRV9BTFVfUkVTVUxUMiAoUmRMbywgUmRI aSk7CiB9CiAKIApAQCAtNTUyLDcgKzExNjYsNiBAQCBycnJyciEwLDAwMDAw MCxSUlJSUjpJOjo6bW92CiAgIFRSQUNFX0FMVV9SRVNVTFQgKEdSW3JlZzJd KTsKIH0KIAotCiBycnJyciEwLDAxMDAwMCxpaWlpaTpJSTo6Om1vdgogIm1v diA8aW1tNT4sIHI8cmVnMj4iCiB7CkBAIC01NjIsNiArMTE3NSw4IEBAIHJy cnJyITAsMDEwMDAwLGlpaWlpOklJOjo6bW92CiAwMDAwMDExMDAwMSxSUlJS UiArIGlpaWlpaWlpaWlpaWlpaWkgKyBJSUlJSUlJSUlJSUlJSUlJOlZJOjo6 bW92CiAqdjg1MGUKICp2ODUwZTEKKyp2ODUwZTIKKyp2ODUwZTJ2MwogIm1v diA8aW1tMzI+LCByPHJlZzE+IgogewogICBTQVZFXzI7CkBAIC01OTYsNiAr MTIxMSw4IEBAIHJycnJyITAsMTEwMDEwLFJSUlJSICsgaWlpaWlpaWlpaWlp aWlpaToKIHJycnJyLDExMTExMSxSUlJSUiArIHd3d3d3LDAxMDAwMTAwMDAw OlhJOjo6bXVsCiAqdjg1MGUKICp2ODUwZTEKKyp2ODUwZTIKKyp2ODUwZTJ2 MwogIm11bCByPHJlZzE+LCByPHJlZzI+LCByPHJlZzM+IgogewogICBDT01Q QVRfMiAoT1BfMjIwMDdFMCAoKSk7CkBAIC02MDQsNiArMTIyMSw4IEBAIHJy cnJyLDExMTExMSxSUlJSUiArIHd3d3d3LDAxMDAwMTAwMDAwOlgKIHJycnJy LDExMTExMSxpaWlpaSArIHd3d3d3LDAxMDAxLElJSUksMDA6WElJOjo6bXVs CiAqdjg1MGUKICp2ODUwZTEKKyp2ODUwZTIKKyp2ODUwZTJ2MwogIm11bCA8 aW1tOT4sIHI8cmVnMj4sIHI8cmVnMz4iCiB7CiAgIENPTVBBVF8yIChPUF8y NDAwN0UwICgpKTsKQEAgLTYzOCw2ICsxMjU3LDggQEAgcnJycnIhMCwxMTAx MTEsUlJSUlIgKyBpaWlpaWlpaWlpaWlpaWlpOgogcnJycnIsMTExMTExLFJS UlJSICsgd3d3d3csMDEwMDAxMDAwMTA6WEk6OjptdWx1CiAqdjg1MGUKICp2 ODUwZTEKKyp2ODUwZTIKKyp2ODUwZTJ2MwogIm11bHUgcjxyZWcxPiwgcjxy ZWcyPiwgcjxyZWczPiIKIHsKICAgQ09NUEFUXzIgKE9QXzIyMjA3RTAgKCkp OwpAQCAtNjQ2LDYgKzEyNjcsOCBAQCBycnJyciwxMTExMTEsUlJSUlIgKyB3 d3d3dywwMTAwMDEwMDAxMDpYCiBycnJyciwxMTExMTEsaWlpaWkgKyB3d3d3 dywwMTAwMSxJSUlJLDEwOlhJSTo6Om11bHUKICp2ODUwZQogKnY4NTBlMQor KnY4NTBlMgorKnY4NTBlMnYzCiAibXVsdSA8aW1tOT4sIHI8cmVnMj4sIHI8 cmVnMz4iCiB7CiAgIENPTVBBVF8yIChPUF8yNDIwN0UwICgpKTsKQEAgLTY4 MSw2ICsxMzA0LDggQEAgcnJycnIsMDAwMDAxLFJSUlJSOkk6Ojpub3QKIHJy cnJyLDExMTExMSxSUlJSUiArIDAwMDAwMDAwMTExMDAwMTA6SVg6Ojpub3Qx CiAqdjg1MGUKICp2ODUwZTEKKyp2ODUwZTIKKyp2ODUwZTJ2MwogIm5vdDEg cjxyZWcyPiwgcjxyZWcxPiIKIHsKICAgQ09NUEFUXzIgKE9QX0UyMDdFMCAo KSk7CkBAIC03MTAsNiArMTMzNSw4IEBAIHJycnJyLDExMDEwMCxSUlJSUiAr IGlpaWlpaWlpaWlpaWlpaWk6VkkKIDAwMDAwMTExMTAsaWlpaWksTCArIExM TExMTExMTExMLDAwMDAxOlhJSUk6OjpwcmVwYXJlCiAqdjg1MGUKICp2ODUw ZTEKKyp2ODUwZTIKKyp2ODUwZTJ2MwogInByZXBhcmUgPGxpc3QxMj4sIDxp bW01PiIKIHsKICAgaW50ICBpOwpAQCAtNzM1LDYgKzEzNjIsOCBAQCBycnJy ciwxMTAxMDAsUlJSUlIgKyBpaWlpaWlpaWlpaWlpaWlpOlZJCiAwMDAwMDEx MTEwLGlpaWlpLEwgKyBMTExMTExMTExMTCwwMDAxMTpYSUlJOjo6cHJlcGFy ZTAwCiAqdjg1MGUKICp2ODUwZTEKKyp2ODUwZTIKKyp2ODUwZTJ2MwogInBy ZXBhcmUgPGxpc3QxMj4sIDxpbW01Piwgc3AiCiB7CiAgIENPTVBBVF8yIChP UF8zMDc4MCAoKSk7CkBAIC03NDMsNiArMTM3Miw4IEBAIHJycnJyLDExMDEw MCxSUlJSUiArIGlpaWlpaWlpaWlpaWlpaWk6VkkKIDAwMDAwMTExMTAsaWlp aWksTCArIExMTExMTExMTExMLDAxMDExICsgaWlpaWlpaWlpaWlpaWlpaTpY SUlJOjo6cHJlcGFyZTAxCiAqdjg1MGUKICp2ODUwZTEKKyp2ODUwZTIKKyp2 ODUwZTJ2MwogInByZXBhcmUgPGxpc3QxMj4sIDxpbW01PiwgPHVpbW0xNj4i CiB7CiAgIENPTVBBVF8yIChPUF9CMDc4MCAoKSk7CkBAIC03NTEsNiArMTM4 Miw4IEBAIHJycnJyLDExMDEwMCxSUlJSUiArIGlpaWlpaWlpaWlpaWlpaWk6 VkkKIDAwMDAwMTExMTAsaWlpaWksTCArIExMTExMTExMTExMLDEwMDExICsg aWlpaWlpaWlpaWlpaWlpaTpYSUlJOjo6cHJlcGFyZTEwCiAqdjg1MGUKICp2 ODUwZTEKKyp2ODUwZTIKKyp2ODUwZTJ2MwogInByZXBhcmUgPGxpc3QxMj4s IDxpbW01PiwgPHVpbW0xNj4iCiB7CiAgIENPTVBBVF8yIChPUF8xMzA3ODAg KCkpOwpAQCAtNzU5LDYgKzEzOTIsOCBAQCBycnJyciwxMTAxMDAsUlJSUlIg KyBpaWlpaWlpaWlpaWlpaWlpOlZJCiAwMDAwMDExMTEwLGlpaWlpLEwgKyBM TExMTExMTExMTCwxMTAxMSArIGlpaWlpaWlpaWlpaWlpaWkgKyBkZGRkZGRk ZGRkZGRkZGRkOlhJSUk6OjpwcmVwYXJlMTEKICp2ODUwZQogKnY4NTBlMQor KnY4NTBlMgorKnY4NTBlMnYzCiAicHJlcGFyZSA8bGlzdDEyPiwgPGltbTU+ LCA8dWltbTMyPiIKIHsKICAgQ09NUEFUXzIgKE9QXzFCMDc4MCAoKSk7CkBA IC04MDMsMTIgKzE0MzgsMjMgQEAgcnJycnIsMDEwMTAxLGlpaWlpOklJOjo6 c2FyCiAgIENPTVBBVF8xIChPUF8yQTAgKCkpOwogfQogCitycnJyciwxMTEx MTEsUlJSUlIgKyB3d3d3dywwMDAxMDEwMDAxMDpYSTo6OnNhcgorKnY4NTBl MgorKnY4NTBlMnYzCisic2FyIHI8cmVnMT4sIHI8cmVnMj4sIHI8cmVnMz4i Cit7CisgIFRSQUNFX0FMVV9JTlBVVDIgKEdSW3JlZzFdLCBHUltyZWcyXSk7 CisgIHY4NTBfc2FyKHNkLCBHUltyZWcxXSwgR1JbcmVnMl0sICZHUltyZWcz XSk7IAorICBUUkFDRV9BTFVfUkVTVUxUMSAoR1JbcmVnM10pOworfQogCiAK IC8vIFNBU0YKIHJycnJyLDExMTExMTAsY2NjYyArIDAwMDAwMDEwMDAwMDAw MDA6SVg6OjpzYXNmCiAqdjg1MGUKICp2ODUwZTEKKyp2ODUwZTIKKyp2ODUw ZTJ2MwogInNhc2YgJXM8Y2NjYz4sIHI8cmVnMj4iCiB7CiAgIENPTVBBVF8y IChPUF8yMDAwN0UwICgpKTsKQEAgLTgxNiw3ICsxNDYyLDYgQEAgcnJycnIs MTExMTExMCxjY2NjICsgMDAwMDAwMTAwMDAwMDAwMDpJWAogCiAKIAotCiAv LyBTQVRBREQKIHJycnJyITAsMDAwMTEwLFJSUlJSOkk6OjpzYXRhZGQKICJz YXRhZGQgcjxyZWcxPiwgcjxyZWcyPiIKQEAgLTgzMCw2ICsxNDc1LDE2IEBA IHJycnJyITAsMDEwMDAxLGlpaWlpOklJOjo6c2F0YWRkCiAgIENPTVBBVF8x IChPUF8yMjAgKCkpOwogfQogCitycnJyciwxMTExMTEsUlJSUlIgKyB3d3d3 dywwMTExMDExMTAxMDpYSTo6OnNhdGFkZAorKnY4NTBlMgorKnY4NTBlMnYz Cisic2F0YWRkIHI8cmVnMT4sIHI8cmVnMj4sIHI8cmVnMz4iCit7CisgIFRS QUNFX0FMVV9JTlBVVDIgKEdSW3JlZzFdLCBHUltyZWcyXSk7CisgIHY4NTBf c2F0YWRkIChzZCwgR1JbcmVnMV0sIEdSW3JlZzJdLCAmR1JbcmVnM10pOwor ICBUUkFDRV9BTFVfUkVTVUxUMSAoR1JbcmVnM10pOworfQorCiAKIAogLy8g U0FUU1VCCkBAIC04MzksNiArMTQ5NCwxNiBAQCBycnJyciEwLDAwMDEwMSxS UlJSUjpJOjo6c2F0c3ViCiAgIENPTVBBVF8xIChPUF9BMCAoKSk7CiB9CiAK K3JycnJyLDExMTExMSxSUlJSUiArIHd3d3d3LDAxMTEwMDExMDEwOlhJOjo6 c2F0c3ViCisqdjg1MGUyCisqdjg1MGUydjMKKyJzYXRzdWIgcjxyZWcxPiwg cjxyZWcyPiwgcjxyZWczPiIKK3sKKyAgVFJBQ0VfQUxVX0lOUFVUMiAoR1Jb cmVnMV0sIEdSW3JlZzJdKTsKKyAgdjg1MF9zYXRzdWIgKHNkLCBHUltyZWcx XSwgR1JbcmVnMl0sICZHUltyZWczXSk7CisgIFRSQUNFX0FMVV9SRVNVTFQx IChHUltyZWczXSk7Cit9CisKIAogCiAvLyBTQVRTVUJJCkBAIC04NTksNiAr MTUyNCwyMzQgQEAgcnJycnIhMCwwMDAxMDAsUlJSUlI6STo6OnNhdHN1YnIK IAogCiAKKy8vU0JGCitycnJyciwxMTExMTEsUlJSUlIgKyB3d3d3dywwMTEx MDAsY2NjYyExMywwOlhJOjo6c2JmCisqdjg1MGUyCisqdjg1MGUydjMKKyJz YmYgJXM8Y2NjYz4sIHI8cmVnMT4sIHI8cmVnMj4sIHI8cmVnMz4iCit7Cisg IGludCBjb25kID0gY29uZGl0aW9uX21ldCAoY2NjYyk7CisgIFRSQUNFX0FM VV9JTlBVVDMgKGNvbmQsIEdSW3JlZzFdLCBHUltyZWcyXSk7CisgIEdSW3Jl ZzNdID0gR1JbcmVnMl0gLSBHUltyZWcxXSAtIChjb25kID8gMSA6IDApOwor ICBUUkFDRV9BTFVfUkVTVUxUMSAoR1JbcmVnM10pOworfQorCisKKworLy8g U0NIMEwKK3JycnJyLDExMTExMTAwMDAwICsgd3d3d3csMDExMDExMDAxMDA6 SVg6OjpzY2gwbAorKnY4NTBlMgorKnY4NTBlMnYzCisic2NoMGwgcjxyZWcy PiwgcjxyZWczPiIKK3sKKyAgdW5zaWduZWQgaW50IHBvcywgb3AwOworCisg IFRSQUNFX0FMVV9JTlBVVDEgKEdSW3JlZzJdKTsKKworICBvcDAgPSBHUlty ZWcyXTsKKworICBpZiAob3AwID09IDB4ZmZmZmZmZmYpCisgICAgeworICAg ICAgUFNXICY9IH5QU1dfQ1k7CisgICAgICBQU1cgJj0gflBTV19PVjsKKyAg ICAgIFBTVyAmPSB+UFNXX1M7CisgICAgICBQU1cgfD0gUFNXX1o7CisgICAg ICBwb3MgPSAwOworICAgIH0KKyAgZWxzZSBpZiAob3AwID09IDB4ZmZmZmZm ZmUpCisgICAgeworICAgICAgUFNXIHw9IFBTV19DWTsKKyAgICAgIFBTVyAm PSB+UFNXX09WOworICAgICAgUFNXICY9IH5QU1dfUzsKKyAgICAgIFBTVyAm PSB+UFNXX1o7CisgICAgICBwb3MgPSAzMjsKKyAgICB9CisgIGVsc2UKKyAg ICB7CisgICAgICBwb3MgPSAxOworICAgICAgd2hpbGUgKG9wMCAmIDB4ODAw MDAwMDApIAorCXsKKwkgIG9wMCA8PD0gMTsgCisJICBwb3MrKzsKKwl9Cisg ICAgICBQU1cgJj0gflBTV19DWTsKKyAgICAgIFBTVyAmPSB+UFNXX09WOwor ICAgICAgUFNXICY9IH5QU1dfUzsKKyAgICAgIFBTVyAmPSB+UFNXX1o7Cisg ICAgfQorCisgIEdSW3JlZzNdID0gcG9zOworCisgIFRSQUNFX0FMVV9SRVNV TFQxIChHUltyZWczXSk7Cit9CisKKworCisvLyBTQ0gwUgorcnJycnIsMTEx MTExMDAwMDAgKyB3d3d3dywwMTEwMTEwMDAwMDpJWDo6OnNjaDByCisqdjg1 MGUyCisqdjg1MGUydjMKKyJzY2gwciByPHJlZzI+LCByPHJlZzM+Igorewor ICB1bnNpZ25lZCBpbnQgcG9zLCBvcDA7CisKKyAgVFJBQ0VfQUxVX0lOUFVU MSAoR1JbcmVnMl0pOworCisgIG9wMCA9IEdSW3JlZzJdOworCisgIGlmIChv cDAgPT0gMHhmZmZmZmZmZikKKyAgICB7CisgICAgICBQU1cgJj0gflBTV19D WTsKKyAgICAgIFBTVyAmPSB+UFNXX09WOworICAgICAgUFNXICY9IH5QU1df UzsKKyAgICAgIFBTVyB8PSBQU1dfWjsKKyAgICAgIHBvcyA9IDA7CisgICAg fQorICBlbHNlIGlmIChvcDAgPT0gMHg3ZmZmZmZmZikKKyAgICB7CisgICAg ICBQU1cgfD0gUFNXX0NZOworICAgICAgUFNXICY9IH5QU1dfT1Y7CisgICAg ICBQU1cgJj0gflBTV19TOworICAgICAgUFNXICY9IH5QU1dfWjsKKyAgICAg IHBvcyA9IDMyOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIHBvcyA9 IDE7CisgICAgICB3aGlsZSAob3AwICYgMHgwMDAwMDAwMSkgCisJeworCSAg b3AwID4+PSAxOyAKKwkgIHBvcysrOworCX0KKyAgICAgIFBTVyAmPSB+UFNX X0NZOworICAgICAgUFNXICY9IH5QU1dfT1Y7CisgICAgICBQU1cgJj0gflBT V19TOworICAgICAgUFNXICY9IH5QU1dfWjsKKyAgICB9CisKKyAgR1JbcmVn M10gPSBwb3M7CisKKyAgVFJBQ0VfQUxVX1JFU1VMVDEgKEdSW3JlZzNdKTsK K30KKworLy8gU0NIMUwKK3JycnJyLDExMTExMTAwMDAwICsgd3d3d3csMDEx MDExMDAxMTA6SVg6OjpzY2gxbAorKnY4NTBlMgorKnY4NTBlMnYzCisic2No MWwgcjxyZWcyPiwgcjxyZWczPiIKK3sKKyAgdW5zaWduZWQgaW50IHBvcywg b3AwOworCisgIFRSQUNFX0FMVV9JTlBVVDEgKEdSW3JlZzJdKTsKKworICBv cDAgPSBHUltyZWcyXTsKKworICBpZiAob3AwID09IDB4MDAwMDAwMDApCisg ICAgeworICAgICAgUFNXICY9IH5QU1dfQ1k7CisgICAgICBQU1cgJj0gflBT V19PVjsKKyAgICAgIFBTVyAmPSB+UFNXX1M7CisgICAgICBQU1cgfD0gUFNX X1o7CisgICAgICBwb3MgPSAwOworICAgIH0KKyAgZWxzZSBpZiAob3AwID09 IDB4MDAwMDAwMDEpCisgICAgeworICAgICAgUFNXIHw9IFBTV19DWTsKKyAg ICAgIFBTVyAmPSB+UFNXX09WOworICAgICAgUFNXICY9IH5QU1dfUzsKKyAg ICAgIFBTVyAmPSB+UFNXX1o7CisgICAgICBwb3MgPSAzMjsKKyAgICB9Cisg IGVsc2UKKyAgICB7CisgICAgICBwb3MgPSAxOworICAgICAgd2hpbGUgKCEo b3AwICYgMHg4MDAwMDAwMCkpIAorCXsKKwkgIG9wMCA8PD0gMTsgCisJICBw b3MrKzsKKwl9CisgICAgICBQU1cgJj0gflBTV19DWTsKKyAgICAgIFBTVyAm PSB+UFNXX09WOworICAgICAgUFNXICY9IH5QU1dfUzsKKyAgICAgIFBTVyAm PSB+UFNXX1o7CisgICAgfQorCisgIEdSW3JlZzNdID0gcG9zOworCisgIFRS QUNFX0FMVV9SRVNVTFQxIChHUltyZWczXSk7Cit9CisKKy8vIFNDSDFSCity cnJyciwxMTExMTEwMDAwMCArIHd3d3d3LDAxMTAxMTAwMDEwOklYOjo6c2No MXIKKyp2ODUwZTIKKyp2ODUwZTJ2MworInNjaDFyIHI8cmVnMj4sIHI8cmVn Mz4iCit7CisgIHVuc2lnbmVkIGludCBwb3MsIG9wMDsKKworICBUUkFDRV9B TFVfSU5QVVQxIChHUltyZWcyXSk7CisKKyAgb3AwID0gR1JbcmVnMl07CisK KyAgaWYgKG9wMCA9PSAweDAwMDAwMDAwKQorICAgIHsKKyAgICAgIFBTVyAm PSB+UFNXX0NZOworICAgICAgUFNXICY9IH5QU1dfT1Y7CisgICAgICBQU1cg Jj0gflBTV19TOworICAgICAgUFNXIHw9IFBTV19aOworICAgICAgcG9zID0g MDsKKyAgICB9CisgIGVsc2UgaWYgKG9wMCA9PSAweDgwMDAwMDAwKQorICAg IHsKKyAgICAgIFBTVyB8PSBQU1dfQ1k7CisgICAgICBQU1cgJj0gflBTV19P VjsKKyAgICAgIFBTVyAmPSB+UFNXX1M7CisgICAgICBQU1cgJj0gflBTV19a OworICAgICAgcG9zID0gMzI7CisgICAgfQorICBlbHNlCisgICAgeworICAg ICAgcG9zID0gMTsKKyAgICAgIHdoaWxlICghKG9wMCAmIDB4MDAwMDAwMDEp KSAKKwl7CisJICBvcDAgPj49IDE7CisJICBwb3MrKzsKKwl9CisgICAgICBQ U1cgJj0gflBTV19DWTsKKyAgICAgIFBTVyAmPSB+UFNXX09WOworICAgICAg UFNXICY9IH5QU1dfUzsKKyAgICAgIFBTVyAmPSB+UFNXX1o7CisgICAgfQor CisgIEdSW3JlZzNdID0gcG9zOworCisgIFRSQUNFX0FMVV9SRVNVTFQxIChH UltyZWczXSk7Cit9CisKKy8vU0hMCitycnJyciwxMTExMTEsUlJSUlIgKyB3 d3d3dywwMDAxMTAwMDAxMDpYSTo6OnNobAorKnY4NTBlMgorKnY4NTBlMnYz Cisic2hsIHI8cmVnMT4sIHI8cmVnMj4sIHI8cmVnMz4iCit7CisgIFRSQUNF X0FMVV9JTlBVVDIgKEdSW3JlZzFdLCBHUltyZWcyXSk7CisgIHY4NTBfc2hs KHNkLCBHUltyZWcxXSwgR1JbcmVnMl0sICZHUltyZWczXSk7CisgIFRSQUNF X0FMVV9SRVNVTFQxIChHUltyZWczXSk7Cit9CisKKy8vU0hSCitycnJyciwx MTExMTEsUlJSUlIgKyB3d3d3dywwMDAxMDAwMDAxMDpYSTo6OnNocgorKnY4 NTBlMgorKnY4NTBlMnYzCisic2hyIHI8cmVnMT4sIHI8cmVnMj4sIHI8cmVn Mz4iCit7CisgIFRSQUNFX0FMVV9JTlBVVDIgKEdSW3JlZzFdLCBHUltyZWcy XSk7CisgIHY4NTBfc2hyKHNkLCBHUltyZWcxXSwgR1JbcmVnMl0sICZHUlty ZWczXSk7CisgIFRSQUNFX0FMVV9SRVNVTFQxIChHUltyZWczXSk7Cit9CisK KworCiAvLyBTRVRGCiBycnJyciwxMTExMTEwLGNjY2MgKyAwMDAwMDAwMDAw MDAwMDAwOklYOjo6c2V0ZgogInNldGYgJXM8Y2NjYz4sIHI8cmVnMj4iCkBA IC04NzgsNiArMTc3MSw4IEBAIHJycnJyLDExMTExMTAsY2NjYyArIDAwMDAw MDAwMDAwMDAwMDA6SVgKIHJycnJyLDExMTExMSxSUlJSUiArIDAwMDAwMDAw MTExMDAwMDA6SVg6OjpzZXQxCiAqdjg1MGUKICp2ODUwZTEKKyp2ODUwZTIK Kyp2ODUwZTJ2MwogInNldDEgcjxyZWcyPiwgW3I8cmVnMT5dIgogewogICBD T01QQVRfMiAoT1BfRTAwN0UwICgpKTsKQEAgLTk2Niw2ICsxODYxLDggQEAg cnJycnIsMTAxMCxkZGRkZGQsMDpJVjo6OnNsZC53CiBycnJyciEwLDAwMDAx MTAsZGRkZDpJVjo6OnNsZC5idQogKnY4NTBlCiAqdjg1MGUxCisqdjg1MGUy Cisqdjg1MGUydjMKICJzbGQuYiA8ZGlzcDQ+W2VwXSwgcjxyZWcyPiI6KFBT VyAmIFBTV19VUykKICJzbGQuYnUgPGRpc3A0PltlcF0sIHI8cmVnMj4iCiB7 CkBAIC05ODcsNiArMTg4NCw4IEBAIHJycnJyITAsMDAwMDExMCxkZGRkOklW Ojo6c2xkLmJ1CiBycnJyciEwLDAwMDAxMTEsZGRkZDpJVjo6OnNsZC5odQog KnY4NTBlCiAqdjg1MGUxCisqdjg1MGUyCisqdjg1MGUydjMKICJzbGQuaCA8 ZGlzcDU+W2VwXSwgcjxyZWcyPiI6KFBTVyAmIFBTV19VUykKICJzbGQuaHUg PGRpc3A1PltlcF0sIHI8cmVnMj4iCiB7CkBAIC0xMDA1LDYgKzE5MDQsOCBA QCBycnJyciEwLDAwMDAxMTEsZGRkZDpJVjo6OnNsZC5odQogICAgIH0KIH0K IAorCisKIC8vIFNTVAogcnJycnIsMDExMSxkZGRkZGRkOklWOjo6c3N0LmIK ICJzc3QuYiByPHJlZzI+LCA8ZGlzcDc+W2VwXSIKQEAgLTEwMzEsMjkgKzE5 MzIsMTEzIEBAIHJycnJyLDExMTAxMCxSUlJSUiArIGRkZGRkZGRkZGRkZGRk ZGQ6VkkKICAgQ09NUEFUXzIgKE9QXzc0MCAoKSk7CiB9CiAKKzAwMDAwMTEx MTAwLFJSUlJSICsgd3d3d3csZGRkZGRkZCwxMTAxICsgZGRkZGRkZGRkZGRk ZGRkZDpYSVY6OjpzdC5iCisqdjg1MGUydjMKKyJzdC5iIHI8cmVnMz4sIDxk aXNwMjM+W3I8cmVnMT5dIgoreworICB1bnNpZ25lZDMyIGFkZHIgPSBHUlty ZWcxXSArIGRpc3AyMzsKKyAgc3RvcmVfZGF0YV9tZW0gKHNkLCBhZGRyLCAx LCBHUltyZWczXSk7CisgIFRSQUNFX1NUIChhZGRyLCBHUltyZWczXSk7Cit9 CisKIHJycnJyLDExMTAxMSxSUlJSUiArIGRkZGRkZGRkZGRkZGRkZCwwOlZJ STo6OnN0LmgKICJzdC5oIHI8cmVnMj4sIDxkaXNwMTY+W3I8cmVnMT5dIgog ewogICBDT01QQVRfMiAoT1BfNzYwICgpKTsKIH0KIAorMDAwMDAxMTExMDEs UlJSUlIrd3d3d3csZGRkZGRkLDAxMTAxK2RkZGRkZGRkZGRkZGRkZGQ6WElW Ojo6c3QuaAorKnY4NTBlMnYzCisic3QuaCByPHJlZzM+LCA8ZGlzcDIzPlty PHJlZzE+XSIKK3sKKyAgdW5zaWduZWQzMiBhZGRyID0gR1JbcmVnMV0gKyBk aXNwMjM7CisgIHN0b3JlX2RhdGFfbWVtIChzZCwgYWRkciwgMiwgR1JbcmVn M10pOworICBUUkFDRV9TVCAoYWRkciwgR1JbcmVnM10pOworfQorCiBycnJy ciwxMTEwMTEsUlJSUlIgKyBkZGRkZGRkZGRkZGRkZGQsMTpWSUk6OjpzdC53 CiAic3QudyByPHJlZzI+LCA8ZGlzcDE2PltyPHJlZzE+XSIKIHsKICAgQ09N UEFUXzIgKE9QXzEwNzYwICgpKTsKIH0KIAorMDAwMDAxMTExMDAsUlJSUlIr d3d3d3csZGRkZGRkLDAxMTExK2RkZGRkZGRkZGRkZGRkZGQ6WElWOjo6c3Qu dworKnY4NTBlMnYzCisic3QudyByPHJlZzM+LCA8ZGlzcDIzPltyPHJlZzE+ XSIKK3sKKyAgdW5zaWduZWQzMiBhZGRyID0gR1JbcmVnMV0gKyBkaXNwMjM7 CisgIHN0b3JlX2RhdGFfbWVtIChzZCwgYWRkciwgNCwgR1JbcmVnM10pOwor ICBUUkFDRV9TVCAoYWRkciwgR1JbcmVnM10pOworfQorCisKIC8vIFNUU1IK IHJycnJyLDExMTExMSxyZWdJRCArIDAwMDAwMDAwMDEwMDAwMDA6SVg6Ojpz dHNyCiAic3RzciBzPHJlZ0lEPiwgcjxyZWcyPiIKIHsKLSAgVFJBQ0VfQUxV X0lOUFVUMSAoU1JbcmVnSURdKTsKLSAgR1JbcmVnMl0gPSBTUltyZWdJRF07 Ci0gIFRSQUNFX0FMVV9SRVNVTFQgKEdSW3JlZzJdKTsKLX0KKyAgdWludDMy IHNyZWcgPSAwOwogCi0vLyBTVUIKLXJycnJyLDAwMTEwMSxSUlJSUjpJOjo6 c3ViCisgIGlmICgoaWRlY29kZV9pc3N1ZSA9PSBpZGVjb2RlX3Y4NTBlMl9p c3N1ZQorICAgICAgIHx8IGlkZWNvZGVfaXNzdWUgPT0gaWRlY29kZV92ODUw ZTJ2M19pc3N1ZSkKKyAgICAgICYmIHJlZ0lEIDwgMjgpCisgICAgeworICAg ICAgc3dpdGNoIChCU0VMICYgMHhmZmZmKQorCXsKKwljYXNlIDB4MDAwMDoK KwljYXNlIDB4ZmYwMDoJLyogVVNFUiAwICovCisJY2FzZSAweGZmZmY6CS8q IFVTRVIgMSAqLworCSAgc3JlZyA9IFNSW3JlZ0lEXTsKKwkgIGJyZWFrOwor CWNhc2UgMHgxMDAwOgorCSAgc3JlZyA9IE1QVTBfU1JbcmVnSURdOworCSAg YnJlYWs7CisJY2FzZSAweDEwMDE6CisJICBzcmVnID0gTVBVMV9TUltyZWdJ RF07CisJICBicmVhazsKKwljYXNlIDB4MjAwMDoKKwkgIGlmIChyZWdJRCA9 PSBGUFNUX1JFR05PKQorCSAgICB7CisJICAgICAgc3JlZyA9ICgoRlBTUiAm IEZQU1JfUFIpID8gRlBTVF9QUiA6IDApCisJCXwgKChGUFNSICYgRlBTUl9Y Q0UpID8gRlBTVF9YQ0UgOiAwKQorCQl8ICgoRlBTUiAmIEZQU1JfWENWKSA/ IEZQU1RfWENWIDogMCkKKwkJfCAoKEZQU1IgJiBGUFNSX1hDWikgPyBGUFNU X1hDWiA6IDApCisJCXwgKChGUFNSICYgRlBTUl9YQ08pID8gRlBTVF9YQ08g OiAwKQorCQl8ICgoRlBTUiAmIEZQU1JfWENVKSA/IEZQU1RfWENVIDogMCkK KwkJfCAoKEZQU1IgJiBGUFNSX1hDSSkgPyBGUFNUX1hDSSA6IDApCisJCXwg KChGUFNSICYgRlBTUl9YUFYpID8gRlBTVF9YUFYgOiAwKQorCQl8ICgoRlBT UiAmIEZQU1JfWFBaKSA/IEZQU1RfWFBaIDogMCkKKwkJfCAoKEZQU1IgJiBG UFNSX1hQTykgPyBGUFNUX1hQTyA6IDApCisJCXwgKChGUFNSICYgRlBTUl9Y UFUpID8gRlBTVF9YUFUgOiAwKQorCQl8ICgoRlBTUiAmIEZQU1JfWFBJKSA/ IEZQU1RfWFBJIDogMCk7CisJICAgIH0KKwkgIGVsc2UgaWYgKHJlZ0lEID09 IEZQQ0ZHX1JFR05PKQorCSAgICB7CisJICAgICAgc3JlZyA9ICgoKEZQU1Ig JiBGUFNSX1JNKSA+PiAxOCkgPDwgNykKKwkJfCAoKEZQU1IgJiBGUFNSX1hF VikgPyBGUENGR19YRVYgOiAwKQorCQl8ICgoRlBTUiAmIEZQU1JfWEVaKSA/ IEZQQ0ZHX1hFWiA6IDApCisJCXwgKChGUFNSICYgRlBTUl9YRU8pID8gRlBD RkdfWEVPIDogMCkKKwkJfCAoKEZQU1IgJiBGUFNSX1hFVSkgPyBGUENGR19Y RVUgOiAwKQorCQl8ICgoRlBTUiAmIEZQU1JfWEVJKSA/IEZQQ0ZHX1hFSSA6 IDApOworCSAgICB9CisJICBlbHNlCisJICAgIHsKKwkgICAgICBzcmVnID0g RlBVX1NSW3JlZ0lEXTsKKwkgICAgfQorCSAgYnJlYWs7CisJfQorICAgIH0K KyAgZWxzZQorICAgIHsKKyAgICAgIHNyZWcgPSBTUltyZWdJRF07CisgICAg fQorCisgIFRSQUNFX0FMVV9JTlBVVDEgKHNyZWcpOworICBHUltyZWcyXSA9 IHNyZWc7CisgIFRSQUNFX0FMVV9SRVNVTFQgKEdSW3JlZzJdKTsKK30KKwor Ly8gU1VCCitycnJyciwwMDExMDEsUlJSUlI6STo6OnN1YgogInN1YiByPHJl ZzE+LCByPHJlZzI+IgogewogICBDT01QQVRfMSAoT1BfMUEwICgpKTsKQEAg LTEwNzAsNiArMjA1NSw4IEBAIHJycnJyLDAwMTEwMCxSUlJSUjpJOjo6c3Vi cgogMDAwMDAwMDAwMTAsUlJSUlI6STo6OnN3aXRjaAogKnY4NTBlCiAqdjg1 MGUxCisqdjg1MGUyCisqdjg1MGUydjMKICJzd2l0Y2ggcjxyZWcxPiIKIHsK ICAgdW5zaWduZWQgbG9uZyBhZHI7CkBAIC0xMDg0LDYgKzIwNzEsOCBAQCBy cnJyciwwMDExMDAsUlJSUlI6STo6OnN1YnIKIDAwMDAwMDAwMTAxLFJSUlJS Okk6OjpzeGIKICp2ODUwZQogKnY4NTBlMQorKnY4NTBlMgorKnY4NTBlMnYz CiAic3hiIHI8cmVnMT4iCiB7CiAgIFRSQUNFX0FMVV9JTlBVVDEgKEdSW3Jl ZzFdKTsKQEAgLTEwOTUsNiArMjA4NCw4IEBAIHJycnJyLDAwMTEwMCxSUlJS UjpJOjo6c3VicgogMDAwMDAwMDAxMTEsUlJSUlI6STo6OnN4aAogKnY4NTBl CiAqdjg1MGUxCisqdjg1MGUyCisqdjg1MGUydjMKICJzeGggcjxyZWcxPiIK IHsKICAgVFJBQ0VfQUxVX0lOUFVUMSAoR1JbcmVnMV0pOwpAQCAtMTEyNiw2 ICsyMTE3LDggQEAgcnJycnIsMDAxMDExLFJSUlJSOkk6Ojp0c3QKIHJycnJy LDExMTExMSxSUlJSUiArIDAwMDAwMDAwMTExMDAxMTA6SVg6Ojp0c3QxCiAq djg1MGUKICp2ODUwZTEKKyp2ODUwZTIKKyp2ODUwZTJ2MwogInRzdDEgcjxy ZWcyPiwgW3I8cmVnMT5dIgogewogICBDT01QQVRfMiAoT1BfRTYwN0UwICgp KTsKQEAgLTExNDksNiArMjE0Miw4IEBAIHJycnJyLDExMDEwMSxSUlJSUiAr IGlpaWlpaWlpaWlpaWlpaWk6VkkKIDAwMDAwMDAwMTAwLFJSUlJSOkk6Ojp6 eGIKICp2ODUwZQogKnY4NTBlMQorKnY4NTBlMgorKnY4NTBlMnYzCiAienhi IHI8cmVnMT4iCiB7CiAgIFRSQUNFX0FMVV9JTlBVVDEgKEdSW3JlZzFdKTsK QEAgLTExNjAsNiArMjE1NSw4IEBAIHJycnJyLDExMDEwMSxSUlJSUiArIGlp aWlpaWlpaWlpaWlpaWk6VkkKIDAwMDAwMDAwMTEwLFJSUlJSOkk6Ojp6eGgK ICp2ODUwZQogKnY4NTBlMQorKnY4NTBlMgorKnY4NTBlMnYzCiAienhoIHI8 cmVnMT4iCiB7CiAgIFRSQUNFX0FMVV9JTlBVVDEgKEdSW3JlZzFdKTsKQEAg LTExNzgsNiArMjE3NSw4IEBAIHJycnJyLDExMDEwMSxSUlJSUiArIGlpaWlp aWlpaWlpaWlpaWk6VkkKIAogMTExMTEsMDAwMDEwLDAwMDAwOkk6OjpkYnRy YXAKICp2ODUwZTEKKyp2ODUwZTIKKyp2ODUwZTJ2MwogImRidHJhcCIKIHsK ICAgREJQQyA9IGNpYSArIDI7CkBAIC0xMTk3LDkgKzIxOTYsMTA2OSBAQCBy cnJyciwxMTAxMDEsUlJSUlIgKyBpaWlpaWlpaWlpaWlpaWlpOlZJCiAvLyBS ZXR1cm4gZnJvbSBkZWJ1ZyB0cmFwOiAweDE0NjAwN2UwCiAwMDAwMDExMTEx MTAwMDAwICsgMDAwMDAwMDEwMTAwMDExMDpYOjo6ZGJyZXQKICp2ODUwZTEK Kyp2ODUwZTIKKyp2ODUwZTJ2MwogImRicmV0IgogewogICBuaWEgPSBEQlBD OwogICBQU1cgPSBEQlBTVzsKICAgVFJBQ0VfQlJBTkNIMSAoUFNXKTsKIH0K KworCisvLworLy8gRkxPQVQKKy8vCisKKy8vIE1hcCBjb25kaXRpb24gY29k ZSB0byBhIHN0cmluZworOiVzOjo6OkZGRkY6aW50IEZGRkYKK3sKKyAgc3dp dGNoIChGRkZGKQorICAgIHsKKyAgICBjYXNlIDA6IHJldHVybiAiZiI7Cisg ICAgY2FzZSAxOiByZXR1cm4gInVuIjsKKyAgICBjYXNlIDI6IHJldHVybiAi ZXEiOworICAgIGNhc2UgMzogcmV0dXJuICJ1ZXEiOworICAgIGNhc2UgNDog cmV0dXJuICJvbHQiOworICAgIGNhc2UgNTogcmV0dXJuICJ1bHQiOworICAg IGNhc2UgNjogcmV0dXJuICJvbGUiOworICAgIGNhc2UgNzogcmV0dXJuICJ1 bGUiOworICAgIGNhc2UgODogcmV0dXJuICJzZiI7CisgICAgY2FzZSA5OiBy ZXR1cm4gIm5nbGUiOworICAgIGNhc2UgMTA6IHJldHVybiAic2VxIjsKKyAg ICBjYXNlIDExOiByZXR1cm4gIm5nbCI7CisgICAgY2FzZSAxMjogcmV0dXJu ICJsdCI7CisgICAgY2FzZSAxMzogcmV0dXJuICJuZ2UiOworICAgIGNhc2Ug MTQ6IHJldHVybiAibGUiOworICAgIGNhc2UgMTU6IHJldHVybiAibmd0IjsK KyAgICB9CisgIHJldHVybiAiKG51bGwpIjsKK30KKworLy8gQUJTRi5ECity cnJyLDAxMTExMTEwMDAwMCArIHd3d3csMDEwMDAxMDExMDAwOkZfSTo6OmFi c2ZfZAorKnY4NTBlMnYzCisiYWJzZi5kIHI8cmVnMmU+LCByPHJlZzNlPiIK K3sKKyAgc2ltX2ZwdSBhbnMsIHdvcDsKKyAgc2ltX2ZwdV9zdGF0dXMgc3Rh dHVzOworCisgIHNpbV9mcHVfMjMydG8gKCZ3b3AsIEdSW3JlZzJlKzFdLCBH UltyZWcyZV0pOworICBUUkFDRV9GUF9JTlBVVF9GUFUxICgmd29wKTsKKwor ICBzdGF0dXMgPSBzaW1fZnB1X2FicyAoJmFucywgJndvcCk7CisgIGNoZWNr X2ludmFsaWRfc25hbihzZCwgc3RhdHVzLCAxKTsKKworICBzaW1fZnB1X3Rv MjMyICgmR1JbcmVnM2UrMV0sICZHUltyZWczZV0sICZhbnMpOworCisgIFRS QUNFX0ZQX1JFU1VMVF9GUFUxICgmYW5zKTsKK30KKworLy8gQUJTRi5TCity cnJyciwxMTExMTEwMDAwMCArIHd3d3d3LDEwMDAxMDAxMDAwOkZfSTo6OmFi c2ZfcworKnY4NTBlMnYzCisiYWJzZi5zIHI8cmVnMj4sIHI8cmVnMz4iCit7 CisgIHNpbV9mcHUgYW5zLCB3b3A7CisgIHNpbV9mcHVfc3RhdHVzIHN0YXR1 czsKKworICBzaW1fZnB1XzMydG8gKCZ3b3AsIEdSW3JlZzJdKTsKKyAgVFJB Q0VfRlBfSU5QVVRfRlBVMSAoJndvcCk7CisKKyAgc3RhdHVzID0gc2ltX2Zw dV9hYnMgKCZhbnMsICZ3b3ApOworICBjaGVja19pbnZhbGlkX3NuYW4oc2Qs IHN0YXR1cywgMCk7CisKKyAgc2ltX2ZwdV90bzMyICgmR1JbcmVnM10sICZh bnMpOworICBUUkFDRV9GUF9SRVNVTFRfRlBVMSAoJmFucyk7Cit9CisKKy8v IEFEREYuRAorcnJyciwwMTExMTExLFJSUlIsMCArIHd3d3csMDEwMDAxMTEw MDAwOkZfSTo6OmFkZGZfZAorKnY4NTBlMnYzCisiYWRkZi5kIHI8cmVnMWU+ LCByPHJlZzJlPiwgcjxyZWczZT4iCit7CisgIHNpbV9mcHUgYW5zLCB3b3Ax LCB3b3AyOworICBzaW1fZnB1X3N0YXR1cyBzdGF0dXM7CisKKyAgc2ltX2Zw dV8yMzJ0byAoJndvcDEsIEdSW3JlZzFlKzFdLCBHUltyZWcxZV0pOworICBz aW1fZnB1XzIzMnRvICgmd29wMiwgR1JbcmVnMmUrMV0sIEdSW3JlZzJlXSk7 CisgIFRSQUNFX0ZQX0lOUFVUX0ZQVTIgKCZ3b3AxLCAmd29wMik7CisKKyAg c3RhdHVzID0gc2ltX2ZwdV9hZGQgKCZhbnMsICZ3b3AxLCAmd29wMik7Cisg IHN0YXR1cyB8PSBzaW1fZnB1X3JvdW5kXzY0ICgmYW5zLCBGUFNSX0dFVF9S T1VORCgpLCBzaW1fZnB1X2Rlbm9ybV91bmRlcmZsb3dfaW5leGFjdCk7CisK KyAgdXBkYXRlX2Zwc3IgKHNkLCBzdGF0dXMsIEZQU1JfWEVWIHwgRlBTUl9Y RUkgfCBGUFNSX1hFTyB8IEZQU1JfWEVVLCAxKTsKKworICBzaW1fZnB1X3Rv MjMyICgmR1JbcmVnM2UrMV0sICZHUltyZWczZV0sICZhbnMpOworICBUUkFD RV9GUF9SRVNVTFRfRlBVMSAoJmFucyk7Cit9CisKKy8vIEFEREYuUworcnJy cnIsMTExMTExLFJSUlJSICsgd3d3d3csMTAwMDExMDAwMDA6Rl9JOjo6YWRk Zl9zCisqdjg1MGUydjMKKyJhZGRmLnMgcjxyZWcxPiwgcjxyZWcyPiwgcjxy ZWczPiIKK3sKKyAgc2ltX2ZwdSBhbnMsIHdvcDEsIHdvcDI7CisgIHNpbV9m cHVfc3RhdHVzIHN0YXR1czsKKworICBzaW1fZnB1XzMydG8gKCZ3b3AxLCBH UltyZWcxXSk7CisgIHNpbV9mcHVfMzJ0byAoJndvcDIsIEdSW3JlZzJdKTsK KyAgVFJBQ0VfRlBfSU5QVVRfRlBVMiAoJndvcDEsICZ3b3AyKTsKKworICBz dGF0dXMgPSBzaW1fZnB1X2FkZCAoJmFucywgJndvcDEsICZ3b3AyKTsKKyAg c3RhdHVzIHw9IHNpbV9mcHVfcm91bmRfMzIgKCZhbnMsIEZQU1JfR0VUX1JP VU5EKCksIHNpbV9mcHVfZGVub3JtX3VuZGVyZmxvd19pbmV4YWN0KTsKKwor ICB1cGRhdGVfZnBzciAoc2QsIHN0YXR1cywgRlBTUl9YRVYgfCBGUFNSX1hF SSB8IEZQU1JfWEVPIHwgRlBTUl9YRVUsIDApOworCisgIHNpbV9mcHVfdG8z MiAoJkdSW3JlZzNdLCAmYW5zKTsKKyAgVFJBQ0VfRlBfUkVTVUxUX0ZQVTEg KCZhbnMpOworfQorCisvLyBDTU9WRi5ECitycnJyLDAxMTExMTEsUlJSUiww ICsgd3d3dyEwLDAxMDAwMDAxLGJiYiwwOkZfSTo6OmNtb3ZmX2QKKyp2ODUw ZTJ2MworImNtb3ZmLmQgPGJiYj4sIHI8cmVnMWU+LCByPHJlZzJlPiwgcjxy ZWczZT4iCit7CisgIHVuc2lnbmVkIGludCBvcGhpLG9wbG93OworICBzaW1f ZnB1IGFucywgd29wMSwgd29wMjsKKworICBzaW1fZnB1XzIzMnRvICgmd29w MSwgR1JbcmVnMWUrMV0sIEdSW3JlZzFlXSk7CisgIHNpbV9mcHVfMjMydG8g KCZ3b3AyLCBHUltyZWcyZSsxXSwgR1JbcmVnMmVdKTsKKyAgVFJBQ0VfRlBf SU5QVVRfQk9PTDFfRlBVMiAoVEVTVF9GUENDKGJiYiksICZ3b3AxLCAmd29w Mik7CisKKyAgaWYgKFRFU1RfRlBDQyhiYmIpKSAKKyAgICB7CisgICAgICBv cGhpID0gR1JbcmVnMWUrMV07CisgICAgICBvcGxvdyA9IEdSW3JlZzFlXTsK KyAgICAgIGFucyA9IHdvcDE7CisgICAgfQorICBlbHNlCisgICAgeworICAg ICAgb3BoaSA9IEdSW3JlZzJlKzFdOworICAgICAgb3Bsb3cgPSBHUltyZWcy ZV07CisgICAgICBhbnMgPSB3b3AyOworICAgIH0KKworICBHUltyZWczZSsx XSA9IG9waGk7CisgIEdSW3JlZzNlXSA9IG9wbG93OworICBUUkFDRV9GUF9S RVNVTFRfRlBVMSAoJmFucyk7OworfQorCisvLyBDTU9WRi5TCitycnJyciwx MTExMTEsUlJSUlIgKyB3d3d3dyEwLDEwMDAwMDAsYmJiLDA6Rl9JOjo6Y21v dmZfcworKnY4NTBlMnYzCisiY21vdmYuZCA8YmJiPiwgcjxyZWcxPiwgcjxy ZWcyPiwgcjxyZWczPiIKK3sKKyAgdW5zaWduZWQgaW50IG9wOworICBzaW1f ZnB1IGFucywgd29wMSwgd29wMjsKKworICBzaW1fZnB1XzMydG8gKCZ3b3Ax LCBHUltyZWcxXSk7CisgIHNpbV9mcHVfMzJ0byAoJndvcDIsIEdSW3JlZzJd KTsKKyAgVFJBQ0VfRlBfSU5QVVRfQk9PTDFfRlBVMiAoVEVTVF9GUENDKGJi YiksICZ3b3AxLCAmd29wMik7CisKKyAgaWYgKFRFU1RfRlBDQyhiYmIpKSAK KyAgeworICAgIG9wID0gR1JbcmVnMV07CisgICAgYW5zID0gd29wMTsKKyAg fQorICBlbHNlCisgIHsKKyAgICBvcCA9IEdSW3JlZzJdOworICAgIGFucyA9 IHdvcDI7CisgIH0KKworICBHUltyZWczXSA9IG9wOworICBUUkFDRV9GUF9S RVNVTFRfRlBVMSAoJmFucyk7Cit9CisKKy8vIENNUEYuRAorcnJyciwwMTEx MTExLFJSUlIsMCArIDAsRkZGRiwxMDAwMDExLGJiYiwwOkZfSTo6OmNtcGZf ZAorKnY4NTBlMnYzCisiY21wZi5kICVzPEZGRkY+LCByPHJlZzFlPiwgcjxy ZWcyZT4iOihiYmIgPT0gMCkKKyJjbXBmLmQgJXM8RkZGRj4sIHI8cmVnMWU+ LCByPHJlZzJlPiwgPGJiYj4iCit7CisgIGludCByZXN1bHQ7CisgIHNpbV9m cHUgd29wMTsKKyAgc2ltX2ZwdSB3b3AyOworICAKKyAgc2ltX2ZwdV8yMzJ0 byAoJndvcDEsIEdSW3JlZzFlKzFdLCBHUltyZWcxZV0pOworICBzaW1fZnB1 XzIzMnRvICgmd29wMiwgR1JbcmVnMmUrMV0sIEdSW3JlZzJlXSk7CisgIFRS QUNFX0ZQX0lOUFVUX0ZQVTIgKCZ3b3AxLCAmd29wMik7CisKKyAgcmVzdWx0 ID0gdjg1MF9mbG9hdF9jb21wYXJlKHNkLCBGRkZGLCB3b3AxLCB3b3AyLCAx KTsKKworICBpZiAocmVzdWx0KSAgCisgICAgU0VUX0ZQQ0MoYmJiKTsKKyAg ZWxzZQorICAgIENMRUFSX0ZQQ0MoYmJiKTsKKworICBUUkFDRV9GUF9SRVNV TFRfQk9PTCAocmVzdWx0KTsKK30KKworLy8gQ01QRi5TCitycnJyciwxMTEx MTEsUlJSUlIgKyAwLEZGRkYsMTAwMDAxMCxiYmIsMDpGX0k6OjpjbXBmX3MK Kyp2ODUwZTJ2MworImNtcGYucyAlczxGRkZGPiwgcjxyZWcxPiwgcjxyZWcy PiI6KGJiYiA9PSAwKQorImNtcGYucyAlczxGRkZGPiwgcjxyZWcxPiwgcjxy ZWcyPiwgPGJiYj4iCit7CisgIGludCByZXN1bHQ7IAorICBzaW1fZnB1IHdv cDE7CisgIHNpbV9mcHUgd29wMjsKKworICBzaW1fZnB1XzMydG8oICZ3b3Ax LCBHUltyZWcxXSApOworICBzaW1fZnB1XzMydG8oICZ3b3AyLCBHUltyZWcy XSApOworICBUUkFDRV9GUF9JTlBVVF9GUFUyICgmd29wMSwgJndvcDIpOwor CisgIHJlc3VsdCA9IHY4NTBfZmxvYXRfY29tcGFyZShzZCwgRkZGRiwgd29w MSwgd29wMiwgMCk7CisKKyAgaWYgKHJlc3VsdCkgIAorICAgIFNFVF9GUEND KGJiYik7CisgIGVsc2UKKyAgICBDTEVBUl9GUENDKGJiYik7CisKKyAgVFJB Q0VfRlBfUkVTVUxUX0JPT0wgKHJlc3VsdCk7Cit9CisKKy8vIENWVEYuREwK K3JycnIsMDExMTExMTAwMTAwICsgd3d3dywwMTAwMDEwMTAxMDA6Rl9JOjo6 Y3Z0Zl9kbAorKnY4NTBlMnYzCisiY3Z0Zi5kbCByPHJlZzJlPiwgcjxyZWcz ZT4iCit7CisgIHVuc2lnbmVkNjQgYW5zOworICBzaW1fZnB1IHdvcDsKKyAg c2ltX2ZwdV9zdGF0dXMgc3RhdHVzOworCisgIHNpbV9mcHVfMjMydG8gKCZ3 b3AsIEdSW3JlZzJlKzFdLCBHUltyZWcyZV0pOworICBUUkFDRV9GUF9JTlBV VF9GUFUxICgmd29wKTsKKworICBzdGF0dXMgPSBzaW1fZnB1X3JvdW5kXzY0 ICgmd29wLCBGUFNSX0dFVF9ST1VORCgpLCBzaW1fZnB1X2Rlbm9ybV96ZXJv KTsKKyAgc3RhdHVzIHw9IHNpbV9mcHVfdG82NGkgKCZhbnMsICZ3b3AsIEZQ U1JfR0VUX1JPVU5EKCkpOworCisgIGNoZWNrX2N2dF9maShzZCwgc3RhdHVz LCAxKTsKKworICBHUltyZWczZV0gPSBhbnM7CisgIEdSW3JlZzNlKzFdID0g YW5zPj4zMkw7CisgIFRSQUNFX0ZQX1JFU1VMVF9XT1JEMiAoR1JbcmVnM2Vd LCBHUltyZWczZSsxXSk7Cit9CisKKy8vIENWVEYuRFMKK3JycnIsMDExMTEx MTAwMDExICsgd3d3d3csMTAwMDEwMTAwMTA6Rl9JOjo6Y3Z0Zl9kcworKnY4 NTBlMnYzCisiY3Z0Zi5kcyByPHJlZzJlPiwgcjxyZWczPiIKK3sKKyAgc2lt X2ZwdSB3b3A7CisgIHNpbV9mcHVfc3RhdHVzIHN0YXR1czsKKworICBzaW1f ZnB1XzIzMnRvICgmd29wLCBHUltyZWcyZSsxXSwgR1JbcmVnMmVdKTsKKyAg VFJBQ0VfRlBfSU5QVVRfRlBVMSAoJndvcCk7CisKKyAgc3RhdHVzID0gc2lt X2ZwdV9yb3VuZF8zMiAoJndvcCwgRlBTUl9HRVRfUk9VTkQoKSwgc2ltX2Zw dV9kZW5vcm1fdW5kZXJmbG93X2luZXhhY3QpOworCisgIGNoZWNrX2N2dF9m aShzZCwgc3RhdHVzLCAwKTsKKworICBzaW1fZnB1X3RvMzIgKCZHUltyZWcz XSwgJndvcCk7CisgIFRSQUNFX0ZQX1JFU1VMVF9GUFUxICgmd29wKTsKK30K KworLy8gQ1ZURi5EVworcnJyciwwMTExMTExMDAxMDAgKyB3d3d3dywxMDAw MTAxMDAwMDpGX0k6OjpjdnRmX2R3Cisqdjg1MGUydjMKKyJjdnRmLmR3IHI8 cmVnMmU+LCByPHJlZzM+IgoreworICB1aW50MzIgYW5zOworICBzaW1fZnB1 IHdvcDsKKyAgc2ltX2ZwdV9zdGF0dXMgc3RhdHVzOworCisgIHNpbV9mcHVf MjMydG8gKCZ3b3AsIEdSW3JlZzJlKzFdLCBHUltyZWcyZV0pOworICBUUkFD RV9GUF9JTlBVVF9GUFUxICgmd29wKTsKKworICBzdGF0dXMgPSBzaW1fZnB1 X3JvdW5kXzMyICgmd29wLCBGUFNSX0dFVF9ST1VORCgpLCBzaW1fZnB1X2Rl bm9ybV96ZXJvKTsKKyAgc3RhdHVzIHw9IHNpbV9mcHVfdG8zMmkgKCZhbnMs ICZ3b3AsIEZQU1JfR0VUX1JPVU5EKCkpOworCisgIGNoZWNrX2N2dF9maShz ZCwgc3RhdHVzLCAxKTsKKworICBHUltyZWczXSA9IGFuczsKKyAgVFJBQ0Vf RlBfUkVTVUxUX1dPUkQxIChhbnMpOworfQorCisvLyBDVlRGLkxECitycnJy LDAxMTExMTEwMDAwMSArIHd3d3csMDEwMDAxMDEwMDEwOkZfSTo6OmN2dGZf bGQKKyp2ODUwZTJ2MworImN2dGYubGQgcjxyZWcyZT4sIHI8cmVnM2U+Igor eworICBzaWduZWQ2NCBvcDsKKyAgc2ltX2ZwdSB3b3A7CisgIHNpbV9mcHVf c3RhdHVzIHN0YXR1czsKKworICBvcCA9ICgoc2lnbmVkNjQpR1JbcmVnMmUr MV0gPDwgMzJMKSB8IEdSW3JlZzJlXTsKKyAgVFJBQ0VfRlBfSU5QVVRfV09S RDIgKEdSW3JlZzJlXSwgR1JbcmVnMmUrMV0pOworCisgIHNpbV9mcHVfaTY0 dG8gKCZ3b3AsIG9wLCBGUFNSX0dFVF9ST1VORCgpKTsKKyAgc3RhdHVzID0g c2ltX2ZwdV9yb3VuZF82NCAoJndvcCwgRlBTUl9HRVRfUk9VTkQoKSwgc2lt X2ZwdV9kZW5vcm1femVybyk7CisKKyAgY2hlY2tfY3Z0X2lmKHNkLCBzdGF0 dXMsIDEpOworCisgIHNpbV9mcHVfdG8yMzIgKCZHUltyZWczZSsxXSwgJkdS W3JlZzNlXSwgJndvcCk7CisgIFRSQUNFX0ZQX1JFU1VMVF9GUFUxICgmd29w KTsKK30KKworLy8gQ1ZURi5MUworcnJyciwwMTExMTExMDAwMDEgKyB3d3d3 dywxMDAwMTAwMDAxMDpGX0k6OjpjdnRmX2xzCisqdjg1MGUydjMKKyJjdnRm LmxzIHI8cmVnMmU+LCByPHJlZzM+IgoreworICBzaWduZWQ2NCBvcDsKKyAg c2ltX2ZwdSB3b3A7CisgIHNpbV9mcHVfc3RhdHVzIHN0YXR1czsKKworICBv cCA9ICgoc2lnbmVkNjQpR1JbcmVnMmUrMV0gPDwgMzJMKSB8IEdSW3JlZzJl XTsKKyAgVFJBQ0VfRlBfSU5QVVRfV09SRDIgKEdSW3JlZzJlXSwgR1JbcmVn MmUrMV0pOworCisgIHNpbV9mcHVfaTY0dG8gKCZ3b3AsIG9wLCBGUFNSX0dF VF9ST1VORCgpKTsKKyAgc3RhdHVzID0gc2ltX2ZwdV9yb3VuZF8zMiAoJndv cCwgRlBTUl9HRVRfUk9VTkQoKSwgc2ltX2ZwdV9kZW5vcm1femVybyk7CisK KyAgY2hlY2tfY3Z0X2lmKHNkLCBzdGF0dXMsIDApOworCisgIHNpbV9mcHVf dG8zMiAoJkdSW3JlZzNdLCAmd29wKTsKKyAgVFJBQ0VfRlBfUkVTVUxUX0ZQ VTEgKCZ3b3ApOworfQorCisvLyBDVlRGLlNECitycnJyciwxMTExMTEwMDAx MCArIHd3d3csMDEwMDAxMDEwMDEwOkZfSTo6OmN2dGZfc2QKKyp2ODUwZTJ2 MworImN2dGYuc2QgcjxyZWcyPiwgcjxyZWczZT4iCit7CisgIHNpbV9mcHUg d29wOworICBzaW1fZnB1X3N0YXR1cyBzdGF0dXM7CisKKyAgc2ltX2ZwdV8z MnRvICgmd29wLCBHUltyZWcyXSk7CisgIFRSQUNFX0ZQX0lOUFVUX0ZQVTEg KCZ3b3ApOworICBzdGF0dXMgPSBzaW1fZnB1X3JvdW5kXzY0ICgmd29wLCBG UFNSX0dFVF9ST1VORCgpLCBzaW1fZnB1X2Rlbm9ybV91bmRlcmZsb3dfaW5l eGFjdCk7CisKKyAgY2hlY2tfY3Z0X2ZmKHNkLCBzdGF0dXMsIDEpOworCisg IHNpbV9mcHVfdG8yMzIgKCZHUltyZWczZSsxXSwgJkdSW3JlZzNlXSwgJndv cCk7CisgIFRSQUNFX0ZQX1JFU1VMVF9GUFUxICgmd29wKTsKK30KKworLy8g Q1ZURi5TTAorcnJycnIsMTExMTExMDAxMDAgKyB3d3d3LDAxMDAwMTAwMDEw MDpGX0k6OjpjdnRmX3NsCisqdjg1MGUydjMKKyJjdnRmLnNsIHI8cmVnMj4s IHI8cmVnM2U+IgoreworICBzaWduZWQ2NCBhbnM7CisgIHNpbV9mcHUgd29w OworICBzaW1fZnB1X3N0YXR1cyBzdGF0dXM7CisKKyAgc2ltX2ZwdV8zMnRv ICgmd29wLCBHUltyZWcyXSk7CisgIFRSQUNFX0ZQX0lOUFVUX0ZQVTEgKCZ3 b3ApOworCisgIHN0YXR1cyA9IHNpbV9mcHVfcm91bmRfNjQgKCZ3b3AsIEZQ U1JfR0VUX1JPVU5EKCksIHNpbV9mcHVfZGVub3JtX3plcm8pOworICBzdGF0 dXMgfD0gc2ltX2ZwdV90bzY0aSAoJmFucywgJndvcCwgRlBTUl9HRVRfUk9V TkQoKSk7CisKKyAgY2hlY2tfY3Z0X2ZpKHNkLCBzdGF0dXMsIDApOworCisg IEdSW3JlZzNlXSA9IGFuczsKKyAgR1JbcmVnM2UrMV0gPSBhbnMgPj4gMzJM OworICBUUkFDRV9GUF9SRVNVTFRfV09SRDIgKEdSW3JlZzNlXSwgR1JbcmVn M2UrMV0pOworfQorCisvLyBDVlRGLlNXCitycnJyciwxMTExMTEwMDEwMCAr IHd3d3d3LDEwMDAxMDAwMDAwOkZfSTo6OmN2dGZfc3cKKyp2ODUwZTJ2Mwor ImN2dGYuc3cgcjxyZWcyPiwgcjxyZWczPiIKK3sKKyAgdWludDMyIGFuczsK KyAgc2ltX2ZwdSB3b3A7CisgIHNpbV9mcHVfc3RhdHVzIHN0YXR1czsKKwor ICBzaW1fZnB1XzMydG8gKCZ3b3AsIEdSW3JlZzJdKTsKKyAgVFJBQ0VfRlBf SU5QVVRfRlBVMSAoJndvcCk7CisKKyAgc3RhdHVzID0gc2ltX2ZwdV9yb3Vu ZF8zMiAoJndvcCwgRlBTUl9HRVRfUk9VTkQoKSwgc2ltX2ZwdV9kZW5vcm1f emVybyk7CisgIHN0YXR1cyB8PSBzaW1fZnB1X3RvMzJpICgmYW5zLCAmd29w LCBzaW1fZnB1X3JvdW5kX3plcm8pOworCisgIGNoZWNrX2N2dF9maShzZCwg c3RhdHVzLCAwKTsKKworICBHUltyZWczXSA9IGFuczsKKyAgVFJBQ0VfRlBf UkVTVUxUX1dPUkQxIChhbnMpOworfQorCisvLyBDVlRGLldECitycnJyciwx MTExMTEwMDAwMCArIHd3d3csMDEwMDAxMDEwMDEwOkZfSTo6OmN2dGZfd2QK Kyp2ODUwZTJ2MworImN2dGYud2QgcjxyZWcyPiwgcjxyZWczZT4iCit7Cisg IHNpbV9mcHUgd29wOworICBzaW1fZnB1X3N0YXR1cyBzdGF0dXM7CisKKyAg VFJBQ0VfRlBfSU5QVVRfV09SRDEgKEdSW3JlZzJdKTsKKyAgc2ltX2ZwdV9p MzJ0byAoJndvcCwgR1JbcmVnMl0sIEZQU1JfR0VUX1JPVU5EKCkpOworICBz dGF0dXMgPSBzaW1fZnB1X3JvdW5kXzY0ICgmd29wLCBGUFNSX0dFVF9ST1VO RCgpLCBzaW1fZnB1X2Rlbm9ybV96ZXJvKTsKKworICBjaGVja19jdnRfaWYo c2QsIHN0YXR1cywgMSk7CisKKyAgc2ltX2ZwdV90bzIzMiAoJkdSW3JlZzNl KzFdLCAmR1JbcmVnM2VdLCAmd29wKTsKKyAgVFJBQ0VfRlBfUkVTVUxUX0ZQ VTEgKCZ3b3ApOworfQorCisvLyBDVlRGLldTCitycnJyciwxMTExMTEwMDAw MCArIHd3d3d3LDEwMDAxMDAwMDEwOkZfSTo6OmN2dGZfd3MKKyp2ODUwZTJ2 MworImN2dGYud3MgcjxyZWcyPiwgcjxyZWczPiIKK3sKKyAgc2ltX2ZwdSB3 b3A7CisgIHNpbV9mcHVfc3RhdHVzIHN0YXR1czsKKworICBUUkFDRV9GUF9J TlBVVF9XT1JEMSAoR1JbcmVnMl0pOworICBzaW1fZnB1X2kzMnRvICgmd29w LCBHUltyZWcyXSwgRlBTUl9HRVRfUk9VTkQoKSk7CisgIHN0YXR1cyA9IHNp bV9mcHVfcm91bmRfMzIgKCZ3b3AsIEZQU1JfR0VUX1JPVU5EKCksIHNpbV9m cHVfZGVub3JtX3plcm8pOworCisgIGNoZWNrX2N2dF9pZihzZCwgc3RhdHVz LCAwKTsKKworICBzaW1fZnB1X3RvMzIgKCZHUltyZWczXSwgJndvcCk7Cisg IFRSQUNFX0ZQX1JFU1VMVF9GUFUxICgmd29wKTsKK30KKworLy8gRElWRi5E CitycnJyLDAxMTExMTEsUlJSUiwwICsgd3d3dywwMTAwMDExMTExMTA6Rl9J Ojo6ZGl2Zl9kCisqdjg1MGUydjMKKyJkaXZmLmQgcjxyZWcxZT4sIHI8cmVn MmU+LCByPHJlZzNlPiIKK3sKKyAgc2ltX2ZwdSBhbnMsIHdvcDEsIHdvcDI7 CisgIHNpbV9mcHVfc3RhdHVzIHN0YXR1czsKKworICBzaW1fZnB1XzIzMnRv ICgmd29wMSwgR1JbcmVnMWUrMV0sIEdSW3JlZzFlXSk7CisgIHNpbV9mcHVf MjMydG8gKCZ3b3AyLCBHUltyZWcyZSsxXSwgR1JbcmVnMmVdKTsKKyAgVFJB Q0VfRlBfSU5QVVRfRlBVMiAoJndvcDEsICZ3b3AyKTsKKworICBzdGF0dXMg PSBzaW1fZnB1X2RpdiAoJmFucywgJndvcDIsICZ3b3AxKTsKKyAgc3RhdHVz IHw9IHNpbV9mcHVfcm91bmRfNjQgKCZhbnMsIEZQU1JfR0VUX1JPVU5EKCks IHNpbV9mcHVfZGVub3JtX3VuZGVyZmxvd19pbmV4YWN0KTsKKworICB1cGRh dGVfZnBzciAoc2QsIHN0YXR1cywgRlBTUl9YRVYgfCBGUFNSX1hFWiB8IEZQ U1JfWEVJIHwgRlBTUl9YRU8gfCBGUFNSX1hFVSwgMSk7CisKKyAgc2ltX2Zw dV90bzIzMiAoJkdSW3JlZzNlKzFdLCAmR1JbcmVnM2VdLCAmYW5zKTsKKyAg VFJBQ0VfRlBfUkVTVUxUX0ZQVTEgKCZhbnMpOworfQorCisvLyBESVZGLlMK K3JycnJyLDExMTExMSxSUlJSUiArIHd3d3d3LDEwMDAxMTAxMTEwOkZfSTo6 OmRpdmZfcworKnY4NTBlMnYzCisiZGl2Zi5zIHI8cmVnMT4sIHI8cmVnMj4s IHI8cmVnMz4iCit7CisgIHNpbV9mcHUgYW5zLCB3b3AxLCB3b3AyOworICBz aW1fZnB1X3N0YXR1cyBzdGF0dXM7CisKKyAgc2ltX2ZwdV8zMnRvICgmd29w MSwgR1JbcmVnMV0pOworICBzaW1fZnB1XzMydG8gKCZ3b3AyLCBHUltyZWcy XSk7CisgIFRSQUNFX0ZQX0lOUFVUX0ZQVTIgKCZ3b3AxLCAmd29wMik7CisK KyAgc3RhdHVzID0gc2ltX2ZwdV9kaXYgKCZhbnMsICZ3b3AyLCAmd29wMSk7 CisgIHN0YXR1cyB8PSBzaW1fZnB1X3JvdW5kXzMyICgmYW5zLCBGUFNSX0dF VF9ST1VORCgpLCBzaW1fZnB1X2Rlbm9ybV91bmRlcmZsb3dfaW5leGFjdCk7 CisKKyAgdXBkYXRlX2Zwc3IgKHNkLCBzdGF0dXMsIEZQU1JfWEVWIHwgRlBT Ul9YRVogfCBGUFNSX1hFSSB8IEZQU1JfWEVPIHwgRlBTUl9YRVUsIDApOwor CisgIHNpbV9mcHVfdG8zMiAoJkdSW3JlZzNdLCAmYW5zKTsKKyAgVFJBQ0Vf RlBfUkVTVUxUX0ZQVTEgKCZhbnMpOworfQorCisvLyBNQURERi5TCitycnJy ciwxMTExMTEsUlJSUlIgKyB3d3d3dywxMDEsVywwMCxXV1dXLDA6Rl9JOjo6 bWFkZGZfcworKnY4NTBlMnYzCisibWFkZGYucyByPHJlZzE+LCByPHJlZzI+ LCByPHJlZzM+LCByPHJlZzQ+IgoreworICBzaW1fZnB1IGFucywgd29wMSwg d29wMiwgd29wMzsKKyAgc2ltX2ZwdV9zdGF0dXMgc3RhdHVzOworCisgIHNp bV9mcHVfMzJ0byAoJndvcDEsIEdSW3JlZzFdKTsKKyAgc2ltX2ZwdV8zMnRv ICgmd29wMiwgR1JbcmVnMl0pOworICBzaW1fZnB1XzMydG8gKCZ3b3AzLCBH UltyZWczXSk7CisgIFRSQUNFX0ZQX0lOUFVUX0ZQVTMgKCZ3b3AxLCAmd29w MiwgJndvcDMpOworCisgIHN0YXR1cyA9IHNpbV9mcHVfbXVsICgmYW5zLCAm d29wMSwgJndvcDIpOworICBzdGF0dXMgfD0gc2ltX2ZwdV9yb3VuZF82NCAo JmFucywgRlBTUl9HRVRfUk9VTkQoKSwgc2ltX2ZwdV9kZW5vcm1fdW5kZXJm bG93X2luZXhhY3QpOworICB3b3AxID0gYW5zOworICBzdGF0dXMgfD0gc2lt X2ZwdV9hZGQgKCZhbnMsICZ3b3AxLCAmd29wMyk7CisgIHN0YXR1cyB8PSBz aW1fZnB1X3JvdW5kXzY0ICgmYW5zLCBGUFNSX0dFVF9ST1VORCgpLCBzaW1f ZnB1X2Rlbm9ybV91bmRlcmZsb3dfaW5leGFjdCk7CisKKyAgdXBkYXRlX2Zw c3IgKHNkLCBzdGF0dXMsIEZQU1JfWEVWIHwgRlBTUl9YRUkgfCBGUFNSX1hF TyB8IEZQU1JfWEVVLCAwKTsKKworICBzaW1fZnB1X3RvMzIgKCZHUltyZWc0 XSwgJmFucyk7CisgIFRSQUNFX0ZQX1JFU1VMVF9GUFUxICgmYW5zKTsKK30K KworLy8gTUFYRi5ECitycnJyLDAxMTExMTEsUlJSUiwwICsgd3d3dywwMTAw MDExMTEwMDA6Rl9JOjo6bWF4Zl9kCisqdjg1MGUydjMKKyJtYXhmLmQgcjxy ZWcxZT4sIHI8cmVnMmU+LCByPHJlZzNlPiIKK3sKKyAgc2ltX2ZwdSBhbnMs IHdvcDEsIHdvcDI7CisKKyAgc2ltX2ZwdV8yMzJ0byAoJndvcDEsIEdSW3Jl ZzFlKzFdLCBHUltyZWcxZV0pOworICBzaW1fZnB1XzIzMnRvICgmd29wMiwg R1JbcmVnMmUrMV0sIEdSW3JlZzJlXSk7CisgIFRSQUNFX0ZQX0lOUFVUX0ZQ VTIgKCZ3b3AxLCAmd29wMik7CisKKyAgaWYgKHNpbV9mcHVfaXNfbmFuKCZ3 b3AxKSB8fCBzaW1fZnB1X2lzX25hbigmd29wMikpCisgICAgeworICAgICAg aWYgKEZQU1IgJiBGUFNSX1hFVikKKwl7CisJICBTaWduYWxFeGNlcHRpb25G UEUoc2QsIDEpOworCX0KKyAgICAgIGVsc2UKKwl7CisJICBhbnMgPSBzaW1f ZnB1X3FuYW47CisJfQorICAgIH0KKyAgZWxzZSBpZiAoRlBTUiAmIEZQU1Jf RlMKKwkgICAmJiAoKHNpbV9mcHVfaXNfemVybyAoJndvcDEpIHx8IHNpbV9m cHVfaXNfZGVub3JtICgmd29wMSkpCisJICAgICAgICYmIChzaW1fZnB1X2lz X3plcm8gKCZ3b3AyKSB8fCBzaW1fZnB1X2lzX2Rlbm9ybSAoJndvcDIpKSkp IAorICAgIHsKKyAgICAgIGFucyA9IHNpbV9mcHVfemVybzsKKyAgICB9Cisg IGVsc2UKKyAgICB7CisgICAgICBzaW1fZnB1X21heCAoJmFucywgJndvcDEs ICZ3b3AyKTsKKyAgICB9CisgIAorICBzaW1fZnB1X3RvMjMyICgmR1JbcmVn M2UrMV0sICZHUltyZWczZV0sICZhbnMpOworICBUUkFDRV9GUF9SRVNVTFRf RlBVMSAoJmFucyk7Cit9CisKKy8vIE1BWEYuUworcnJycnIsMTExMTExLFJS UlJSICsgd3d3d3csMTAwMDExMDEwMDA6Rl9JOjo6bWF4Zl9zCisqdjg1MGUy djMKKyJtYXhmLnMgcjxyZWcxPiwgcjxyZWcyPiwgcjxyZWczPiIKK3sKKyAg c2ltX2ZwdSBhbnMsIHdvcDEsIHdvcDI7CisKKyAgc2ltX2ZwdV8zMnRvICgm d29wMSwgR1JbcmVnMV0pOworICBzaW1fZnB1XzMydG8gKCZ3b3AyLCBHUlty ZWcyXSk7CisgIFRSQUNFX0ZQX0lOUFVUX0ZQVTIgKCZ3b3AxLCAmd29wMik7 CisKKyAgaWYgKHNpbV9mcHVfaXNfbmFuKCZ3b3AxKSB8fCBzaW1fZnB1X2lz X25hbigmd29wMikpCisgICAgeworICAgICAgaWYgKEZQU1IgJiBGUFNSX1hF VikKKwl7CisJICBTaWduYWxFeGNlcHRpb25GUEUoc2QsIDApOworCX0KKyAg ICAgIGVsc2UKKwl7CisJICBhbnMgPSBzaW1fZnB1X3FuYW47CisJfQorICAg IH0KKyAgZWxzZSBpZiAoKEZQU1IgJiBGUFNSX0ZTKQorCSAgICYmICgoc2lt X2ZwdV9pc196ZXJvICgmd29wMSkgfHwgc2ltX2ZwdV9pc19kZW5vcm0gKCZ3 b3AxKSkKKwkgICAgICAgJiYgKHNpbV9mcHVfaXNfemVybyAoJndvcDIpfHwg c2ltX2ZwdV9pc19kZW5vcm0gKCZ3b3AyKSkpKQorICAgIHsKKyAgICAgIGFu cyA9IHNpbV9mcHVfemVybzsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAg ICBzaW1fZnB1X21heCAoJmFucywgJndvcDEsICZ3b3AyKTsKKyAgICB9Cisg IAorICBzaW1fZnB1X3RvMzIgKCZHUltyZWczXSwgJmFucyk7CisgIFRSQUNF X0ZQX1JFU1VMVF9GUFUxICgmYW5zKTsKK30KKworLy8gTUlORi5ECitycnJy LDAxMTExMTEsUlJSUiwwICsgd3d3dywwMTAwMDExMTEwMTA6Rl9JOjo6bWlu Zl9kCisqdjg1MGUydjMKKyJtaW5mLmQgcjxyZWcxZT4sIHI8cmVnMmU+LCBy PHJlZzNlPiIKK3sKKyAgc2ltX2ZwdSBhbnMsIHdvcDEsIHdvcDI7CisKKyAg c2ltX2ZwdV8yMzJ0byAoJndvcDEsIEdSW3JlZzFlKzFdLCBHUltyZWcxZV0p OworICBzaW1fZnB1XzIzMnRvICgmd29wMiwgR1JbcmVnMmUrMV0sIEdSW3Jl ZzJlXSk7CisgIFRSQUNFX0ZQX0lOUFVUX0ZQVTIgKCZ3b3AxLCAmd29wMik7 CisKKyAgaWYgKHNpbV9mcHVfaXNfbmFuKCZ3b3AxKSB8fCBzaW1fZnB1X2lz X25hbigmd29wMikpCisgICAgeworICAgICAgaWYgKEZQU1IgJiBGUFNSX1hF VikKKwl7CisJICBTaWduYWxFeGNlcHRpb25GUEUoc2QsIDEpOworCX0KKyAg ICAgIGVsc2UKKwl7CisJICBhbnMgPSBzaW1fZnB1X3FuYW47CisJfQorICAg IH0KKyAgZWxzZSBpZiAoRlBTUiAmIEZQU1JfRlMKKwkgICAmJiAoKHNpbV9m cHVfaXNfemVybyAoJndvcDEpIHx8IHNpbV9mcHVfaXNfZGVub3JtICgmd29w MSkpCisJICAgICAgICYmIChzaW1fZnB1X2lzX3plcm8gKCZ3b3AyKSB8fCBz aW1fZnB1X2lzX2Rlbm9ybSAoJndvcDIpKSkpIAorICAgIHsKKyAgICAgIGFu cyA9IHNpbV9mcHVfemVybzsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAg ICBzaW1fZnB1X21pbiAoJmFucywgJndvcDEsICZ3b3AyKTsKKyAgICB9Cisg IAorICBzaW1fZnB1X3RvMjMyICgmR1JbcmVnM2UrMV0sICZHUltyZWczZV0s ICZhbnMpOworICBUUkFDRV9GUF9SRVNVTFRfRlBVMSAoJmFucyk7Cit9CisK Ky8vIE1JTkYuUworcnJycnIsMTExMTExLFJSUlJSICsgd3d3d3csMTAwMDEx MDEwMTA6Rl9JOjo6bWluZl9zCisqdjg1MGUydjMKKyJtaW5mLnMgcjxyZWcx PiwgcjxyZWcyPiwgcjxyZWczPiIKK3sKKyAgc2ltX2ZwdSBhbnMsIHdvcDEs IHdvcDI7CisKKyAgc2ltX2ZwdV8zMnRvICgmd29wMSwgR1JbcmVnMV0pOwor ICBzaW1fZnB1XzMydG8gKCZ3b3AyLCBHUltyZWcyXSk7CisgIFRSQUNFX0ZQ X0lOUFVUX0ZQVTIgKCZ3b3AxLCAmd29wMik7CisKKyAgaWYgKHNpbV9mcHVf aXNfbmFuKCZ3b3AxKSB8fCBzaW1fZnB1X2lzX25hbigmd29wMikpCisgICAg eworICAgICAgaWYgKEZQU1IgJiBGUFNSX1hFVikKKwl7CisJICBTaWduYWxF eGNlcHRpb25GUEUoc2QsIDApOworCX0KKyAgICAgIGVsc2UKKwl7CisJICBh bnMgPSBzaW1fZnB1X3FuYW47CisJfQorICAgIH0KKyAgZWxzZSBpZiAoRlBT UiAmIEZQU1JfRlMKKwkgICAmJiAoKHNpbV9mcHVfaXNfemVybyAoJndvcDEp IHx8IHNpbV9mcHVfaXNfZGVub3JtICgmd29wMSkpCisJICAgICAgICYmIChz aW1fZnB1X2lzX3plcm8gKCZ3b3AyKSB8fCBzaW1fZnB1X2lzX2Rlbm9ybSAo JndvcDIpKSkpCisgICAgeworICAgICAgYW5zID0gc2ltX2ZwdV96ZXJvOwor ICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIHNpbV9mcHVfbWluICgmYW5z LCAmd29wMSwgJndvcDIpOworICAgIH0KKyAgCisgIHNpbV9mcHVfdG8zMiAo JkdSW3JlZzNdLCAmYW5zKTsKKyAgVFJBQ0VfRlBfUkVTVUxUX0ZQVTEgKCZh bnMpOworfQorCisvLyBNU1VCRi5TCitycnJyciwxMTExMTEsUlJSUlIgKyB3 d3d3dywxMDEsVywwMSxXV1dXLDA6Rl9JOjo6bXN1YmZfcworKnY4NTBlMnYz CisibXN1YmYucyByPHJlZzE+LCByPHJlZzI+LCByPHJlZzM+LCByPHJlZzQ+ IgoreworICBzaW1fZnB1IGFucywgd29wMSwgd29wMiwgd29wMzsKKyAgc2lt X2ZwdV9zdGF0dXMgc3RhdHVzOworCisgIHNpbV9mcHVfMzJ0byAoJndvcDEs IEdSW3JlZzFdKTsKKyAgc2ltX2ZwdV8zMnRvICgmd29wMiwgR1JbcmVnMl0p OworICBzaW1fZnB1XzMydG8gKCZ3b3AzLCBHUltyZWczXSk7CisgIFRSQUNF X0ZQX0lOUFVUX0ZQVTMgKCZ3b3AxLCAmd29wMiwgJndvcDMpOworCisgIHN0 YXR1cyA9IHNpbV9mcHVfbXVsICgmYW5zLCAmd29wMSwgJndvcDIpOworICBz dGF0dXMgfD0gc2ltX2ZwdV9yb3VuZF82NCAoJmFucywgRlBTUl9HRVRfUk9V TkQoKSwgc2ltX2ZwdV9kZW5vcm1fdW5kZXJmbG93X2luZXhhY3QpOworICB3 b3AxID0gYW5zOworICBzdGF0dXMgfD0gc2ltX2ZwdV9zdWIgKCZhbnMsICZ3 b3AxLCAmd29wMyk7CisgIHN0YXR1cyB8PSBzaW1fZnB1X3JvdW5kXzY0ICgm YW5zLCBGUFNSX0dFVF9ST1VORCgpLCBzaW1fZnB1X2Rlbm9ybV91bmRlcmZs b3dfaW5leGFjdCk7CisKKyAgdXBkYXRlX2Zwc3IgKHNkLCBzdGF0dXMsIEZQ U1JfWEVWIHwgRlBTUl9YRUkgfCBGUFNSX1hFTyB8IEZQU1JfWEVVLCAwKTsK KworICBzaW1fZnB1X3RvMzIgKCZHUltyZWc0XSwgJmFucyk7CisgIFRSQUNF X0ZQX1JFU1VMVF9GUFUxICgmYW5zKTsKK30KKworLy8gTVVMRi5ECitycnJy LDAxMTExMTEsUlJSUiwwICsgd3d3dywwMTAwMDExMTAxMDA6Rl9JOjo6bXVs Zl9kCisqdjg1MGUydjMKKyJtdWxmLmQgcjxyZWcxZT4sIHI8cmVnMmU+LCBy PHJlZzNlPiIKK3sKKyAgc2ltX2ZwdSBhbnMsIHdvcDEsIHdvcDI7CisgIHNp bV9mcHVfc3RhdHVzIHN0YXR1czsKKworICBzaW1fZnB1XzIzMnRvICgmd29w MSwgR1JbcmVnMWUrMV0sIEdSW3JlZzFlXSk7CisgIHNpbV9mcHVfMjMydG8g KCZ3b3AyLCBHUltyZWcyZSsxXSwgR1JbcmVnMmVdKTsKKyAgVFJBQ0VfRlBf SU5QVVRfRlBVMiAoJndvcDEsICZ3b3AyKTsKKworICBzdGF0dXMgPSBzaW1f ZnB1X211bCAoJmFucywgJndvcDEsICZ3b3AyKTsKKyAgc3RhdHVzIHw9IHNp bV9mcHVfcm91bmRfNjQgKCZhbnMsIEZQU1JfR0VUX1JPVU5EKCksIHNpbV9m cHVfZGVub3JtX3VuZGVyZmxvd19pbmV4YWN0KTsKKworICB1cGRhdGVfZnBz ciAoc2QsIHN0YXR1cywgRlBTUl9YRVYgfCBGUFNSX1hFSSB8IEZQU1JfWEVP IHwgRlBTUl9YRVUsIDEpOworCisgIHNpbV9mcHVfdG8yMzIgKCZHUltyZWcz ZSsxXSwgJkdSW3JlZzNlXSwgJmFucyk7CisgIFRSQUNFX0ZQX1JFU1VMVF9G UFUxICgmYW5zKTsKK30KKworLy8gTVVMRi5TCitycnJyciwxMTExMTEsUlJS UlIgKyB3d3d3dywxMDAwMTEwMDEwMDpGX0k6OjptdWxmX3MKKyp2ODUwZTJ2 MworIm11bGYucyByPHJlZzE+LCByPHJlZzI+LCByPHJlZzM+IgoreworICBz aW1fZnB1IGFucywgd29wMSwgd29wMjsKKyAgc2ltX2ZwdV9zdGF0dXMgc3Rh dHVzOworCisgIHNpbV9mcHVfMzJ0byAoJndvcDEsIEdSW3JlZzFdKTsKKyAg c2ltX2ZwdV8zMnRvICgmd29wMiwgR1JbcmVnMl0pOworICBUUkFDRV9GUF9J TlBVVF9GUFUyICgmd29wMSwgJndvcDIpOworCisgIHN0YXR1cyA9IHNpbV9m cHVfbXVsICgmYW5zLCAmd29wMSwgJndvcDIpOworICBzdGF0dXMgfD0gc2lt X2ZwdV9yb3VuZF8zMiAoJmFucywgRlBTUl9HRVRfUk9VTkQoKSwgc2ltX2Zw dV9kZW5vcm1fdW5kZXJmbG93X2luZXhhY3QpOworCisgIHVwZGF0ZV9mcHNy IChzZCwgc3RhdHVzLCBGUFNSX1hFViB8IEZQU1JfWEVJIHwgRlBTUl9YRU8g fCBGUFNSX1hFVSwgMCk7CisKKyAgc2ltX2ZwdV90bzMyICgmR1JbcmVnM10s ICZhbnMpOworICBUUkFDRV9GUF9SRVNVTFRfRlBVMSAoJmFucyk7Cit9CisK Ky8vIE5FR0YuRAorcnJyciwwMTExMTExMDAwMDEgKyB3d3d3LDAxMDAwMTAx MTAwMDpGX0k6OjpuZWdmX2QKKyp2ODUwZTJ2MworIm5lZ2YuZCByPHJlZzJl PiwgcjxyZWczZT4iCit7CisgIHNpbV9mcHUgYW5zLCB3b3A7CisgIHNpbV9m cHVfc3RhdHVzIHN0YXR1czsKKworICBzaW1fZnB1XzIzMnRvICgmd29wLCBH UltyZWcyZSsxXSwgR1JbcmVnMmVdKTsKKyAgVFJBQ0VfRlBfSU5QVVRfRlBV MSAoJndvcCk7CisKKyAgc3RhdHVzID0gc2ltX2ZwdV9uZWcgKCZhbnMsICZ3 b3ApOworCisgIGNoZWNrX2ludmFsaWRfc25hbihzZCwgc3RhdHVzLCAxKTsK KworICBzaW1fZnB1X3RvMjMyICgmR1JbcmVnM2UrMV0sICZHUltyZWczZV0s ICZhbnMpOworICBUUkFDRV9GUF9SRVNVTFRfRlBVMSAoJmFucyk7Cit9CisK Ky8vIE5FR0YuUworcnJycnIsMTExMTExMDAwMDEgKyB3d3d3dywxMDAwMTAw MTAwMDpGX0k6OjpuZWdmX3MKKyp2ODUwZTJ2MworIm5lZ2YucyByPHJlZzI+ LCByPHJlZzM+IgoreworICBzaW1fZnB1IGFucywgd29wOworICBzaW1fZnB1 X3N0YXR1cyBzdGF0dXM7CisKKyAgc2ltX2ZwdV8zMnRvICgmd29wLCBHUlty ZWcyXSk7CisgIFRSQUNFX0ZQX0lOUFVUX0ZQVTEgKCZ3b3ApOworCisgIHN0 YXR1cyA9IHNpbV9mcHVfbmVnICgmYW5zLCAmd29wKTsKKworICBjaGVja19p bnZhbGlkX3NuYW4oc2QsIHN0YXR1cywgMCk7CisKKyAgc2ltX2ZwdV90bzMy ICgmR1JbcmVnM10sICZhbnMpOworICBUUkFDRV9GUF9SRVNVTFRfRlBVMSAo JmFucyk7Cit9CisKKy8vIE5NQURERi5TCitycnJyciwxMTExMTEsUlJSUlIg KyB3d3d3dywxMDEsVywxMCxXV1dXLDA6Rl9JOjo6bm1hZGRmX3MKKyp2ODUw ZTJ2MworIm5tYWRkZi5zIHI8cmVnMT4sIHI8cmVnMj4sIHI8cmVnMz4sIHI8 cmVnND4iCit7CisgIHNpbV9mcHUgYW5zLCB3b3AxLCB3b3AyLCB3b3AzOwor ICBzaW1fZnB1X3N0YXR1cyBzdGF0dXM7CisKKyAgc2ltX2ZwdV8zMnRvICgm d29wMSwgR1JbcmVnMV0pOworICBzaW1fZnB1XzMydG8gKCZ3b3AyLCBHUlty ZWcyXSk7CisgIHNpbV9mcHVfMzJ0byAoJndvcDMsIEdSW3JlZzNdKTsKKyAg VFJBQ0VfRlBfSU5QVVRfRlBVMyAoJndvcDEsICZ3b3AyLCAmd29wMyk7CisK KyAgc3RhdHVzID0gc2ltX2ZwdV9tdWwgKCZhbnMsICZ3b3AxLCAmd29wMik7 CisgIHN0YXR1cyB8PSBzaW1fZnB1X3JvdW5kXzY0ICgmYW5zLCBGUFNSX0dF VF9ST1VORCgpLCBzaW1fZnB1X2Rlbm9ybV91bmRlcmZsb3dfaW5leGFjdCk7 CisgIHdvcDEgPSBhbnM7CisgIHN0YXR1cyB8PSBzaW1fZnB1X2FkZCAoJmFu cywgJndvcDEsICZ3b3AzKTsKKyAgc3RhdHVzIHw9IHNpbV9mcHVfcm91bmRf NjQgKCZhbnMsIEZQU1JfR0VUX1JPVU5EKCksIHNpbV9mcHVfZGVub3JtX3Vu ZGVyZmxvd19pbmV4YWN0KTsKKyAgd29wMSA9IGFuczsKKyAgc3RhdHVzIHw9 IHNpbV9mcHVfbmVnICgmYW5zLCAmd29wMSk7CisKKyAgdXBkYXRlX2Zwc3Ig KHNkLCBzdGF0dXMsIEZQU1JfWEVWIHwgRlBTUl9YRUkgfCBGUFNSX1hFTyB8 IEZQU1JfWEVVLCAwKTsKKworICBzaW1fZnB1X3RvMzIgKCZHUltyZWc0XSwg JmFucyk7CisgIFRSQUNFX0ZQX1JFU1VMVF9GUFUxICgmYW5zKTsKK30KKwor Ly8gTk1TVUJGLlMKK3JycnJyLDExMTExMSxSUlJSUiArIHd3d3d3LDEwMSxX LDExLFdXV1csMDpGX0k6OjpubXN1YmZfcworKnY4NTBlMnYzCisibm1zdWJm LnMgcjxyZWcxPiwgcjxyZWcyPiwgcjxyZWczPiwgcjxyZWc0PiIKK3sKKyAg c2ltX2ZwdSBhbnMsIHdvcDEsIHdvcDIsIHdvcDM7CisgIHNpbV9mcHVfc3Rh dHVzIHN0YXR1czsKKworICBzaW1fZnB1XzMydG8gKCZ3b3AxLCBHUltyZWcx XSk7CisgIHNpbV9mcHVfMzJ0byAoJndvcDIsIEdSW3JlZzJdKTsKKyAgc2lt X2ZwdV8zMnRvICgmd29wMywgR1JbcmVnM10pOworICBUUkFDRV9GUF9JTlBV VF9GUFUzICgmd29wMSwgJndvcDIsICZ3b3AzKTsKKworICBzdGF0dXMgPSBz aW1fZnB1X211bCAoJmFucywgJndvcDEsICZ3b3AyKTsKKyAgc3RhdHVzIHw9 IHNpbV9mcHVfcm91bmRfNjQgKCZhbnMsIEZQU1JfR0VUX1JPVU5EKCksIHNp bV9mcHVfZGVub3JtX3VuZGVyZmxvd19pbmV4YWN0KTsKKyAgd29wMSA9IGFu czsKKyAgc3RhdHVzIHw9IHNpbV9mcHVfc3ViICgmYW5zLCAmd29wMSwgJndv cDMpOworICBzdGF0dXMgfD0gc2ltX2ZwdV9yb3VuZF82NCAoJmFucywgRlBT Ul9HRVRfUk9VTkQoKSwgc2ltX2ZwdV9kZW5vcm1fdW5kZXJmbG93X2luZXhh Y3QpOworICB3b3AxID0gYW5zOworICBzdGF0dXMgfD0gc2ltX2ZwdV9uZWcg KCZhbnMsICZ3b3AxKTsKKworICB1cGRhdGVfZnBzciAoc2QsIHN0YXR1cywg RlBTUl9YRVYgfCBGUFNSX1hFSSB8IEZQU1JfWEVPIHwgRlBTUl9YRVUsIDAp OworCisgIHNpbV9mcHVfdG8zMiAoJkdSW3JlZzRdLCAmYW5zKTsKKyAgVFJB Q0VfRlBfUkVTVUxUX0ZQVTEgKCZhbnMpOworfQorCisvLyBSRUNJUEYuRAor cnJyciwwMTExMTExMDAwMDEgKyB3d3d3LDAxMDAwMTAxMTExMDpGX0k6Ojpy ZWNpcGYuZAorKnY4NTBlMnYzCisicmVjaXBmLmQgcjxyZWcyZT4sIHI8cmVn M2U+IgoreworICBzaW1fZnB1IGFucywgd29wOworICBzaW1fZnB1X3N0YXR1 cyBzdGF0dXM7CisKKyAgc2ltX2ZwdV8yMzJ0byAoJndvcCwgR1JbcmVnMmUr MV0sIEdSW3JlZzJlXSk7CisgIFRSQUNFX0ZQX0lOUFVUX0ZQVTEgKCZ3b3Ap OworCisgIHN0YXR1cyA9IHNpbV9mcHVfZGl2ICgmYW5zLCAmc2ltX2ZwdV9v bmUsICZ3b3ApOworICBzdGF0dXMgfD0gc2ltX2ZwdV9yb3VuZF82NCAoJmFu cywgRlBTUl9HRVRfUk9VTkQoKSwgc2ltX2ZwdV9kZW5vcm1fdW5kZXJmbG93 X2luZXhhY3QpOworCisgIHVwZGF0ZV9mcHNyIChzZCwgc3RhdHVzLCBGUFNS X1hFViB8IEZQU1JfWEVaIHwgRlBTUl9YRUkgfCBGUFNSX1hFTyB8IEZQU1Jf WEVVLCAxKTsKKworICBzaW1fZnB1X3RvMjMyICgmR1JbcmVnM2UrMV0sICZH UltyZWczZV0sICZhbnMpOworICBUUkFDRV9GUF9SRVNVTFRfRlBVMSAoJmFu cyk7Cit9CisKKy8vIFJFQ0lQRi5TCitycnJyciwxMTExMTEwMDAwMSArIHd3 d3d3LDEwMDAxMDAxMTEwOkZfSTo6OnJlY2lwZi5zCisqdjg1MGUydjMKKyJy ZWNpcGYucyByPHJlZzI+LCByPHJlZzM+IgoreworICBzaW1fZnB1IGFucywg d29wOworICBzaW1fZnB1X3N0YXR1cyBzdGF0dXM7CisKKyAgc2ltX2ZwdV8z MnRvICgmd29wLCBHUltyZWcyXSk7CisgIFRSQUNFX0ZQX0lOUFVUX0ZQVTEg KCZ3b3ApOworCisgIHN0YXR1cyA9IHNpbV9mcHVfZGl2ICgmYW5zLCAmc2lt X2ZwdV9vbmUsICZ3b3ApOworICBzdGF0dXMgfD0gc2ltX2ZwdV9yb3VuZF82 NCAoJmFucywgRlBTUl9HRVRfUk9VTkQoKSwgc2ltX2ZwdV9kZW5vcm1fdW5k ZXJmbG93X2luZXhhY3QpOworCisgIHVwZGF0ZV9mcHNyIChzZCwgc3RhdHVz LCBGUFNSX1hFViB8IEZQU1JfWEVaIHwgRlBTUl9YRUkgfCBGUFNSX1hFTyB8 IEZQU1JfWEVVLCAwKTsKKworICBzaW1fZnB1X3RvMzIgKCZHUltyZWczXSwg JmFucyk7CisgIFRSQUNFX0ZQX1JFU1VMVF9GUFUxICgmYW5zKTsKK30KKwor Ly8gUlNRUlRGLkQKK3JycnIsMDExMTExMTAwMDEwICsgd3d3dywwMTAwMDEw MTExMTA6Rl9JOjo6cnNxcnRmLmQKKyp2ODUwZTJ2MworInJzcXJ0Zi5kIHI8 cmVnMmU+LCByPHJlZzNlPiIKK3sKKyAgc2ltX2ZwdSBhbnMsIHdvcDsKKyAg c2ltX2ZwdV9zdGF0dXMgc3RhdHVzOworCisgIHNpbV9mcHVfMjMydG8gKCZ3 b3AsIEdSW3JlZzJlKzFdLCBHUltyZWcyZV0pOworICBUUkFDRV9GUF9JTlBV VF9GUFUxICgmd29wKTsKKworICBzdGF0dXMgPSBzaW1fZnB1X3NxcnQgKCZh bnMsICZ3b3ApOworICBzdGF0dXMgfD0gc2ltX2ZwdV9yb3VuZF82NCAoJmFu cywgRlBTUl9HRVRfUk9VTkQoKSwgc2ltX2ZwdV9kZW5vcm1fdW5kZXJmbG93 X2luZXhhY3QpOworICB3b3AgPSBhbnM7CisgIHN0YXR1cyA9IHNpbV9mcHVf ZGl2ICgmYW5zLCAmc2ltX2ZwdV9vbmUsICZ3b3ApOworICBzdGF0dXMgfD0g c2ltX2ZwdV9yb3VuZF82NCAoJmFucywgRlBTUl9HRVRfUk9VTkQoKSwgc2lt X2ZwdV9kZW5vcm1fdW5kZXJmbG93X2luZXhhY3QpOworCisgIHVwZGF0ZV9m cHNyIChzZCwgc3RhdHVzLCBGUFNSX1hFViB8IEZQU1JfWEVaIHwgRlBTUl9Y RUkgfCBGUFNSX1hFTyB8IEZQU1JfWEVVLCAxKTsKKworICBzaW1fZnB1X3Rv MjMyICgmR1JbcmVnM2UrMV0sICZHUltyZWczZV0sICZhbnMpOworICBUUkFD RV9GUF9SRVNVTFRfRlBVMSAoJmFucyk7Cit9CisKKy8vIFJTUVJURi5TCity cnJyciwxMTExMTEwMDAxMCArIHd3d3d3LDEwMDAxMDAxMTEwOkZfSTo6OnJz cXJ0Zi5zCisqdjg1MGUydjMKKyJyc3FydGYucyByPHJlZzI+LCByPHJlZzM+ IgoreworICBzaW1fZnB1IGFucywgd29wOworICBzaW1fZnB1X3N0YXR1cyBz dGF0dXM7CisKKyAgc2ltX2ZwdV8zMnRvICgmd29wLCBHUltyZWcyXSk7Cisg IFRSQUNFX0ZQX0lOUFVUX0ZQVTEgKCZ3b3ApOworCisgIHN0YXR1cyA9IHNp bV9mcHVfc3FydCAoJmFucywgJndvcCk7CisgIHN0YXR1cyB8PSBzaW1fZnB1 X3JvdW5kXzMyICgmYW5zLCBGUFNSX0dFVF9ST1VORCgpLCBzaW1fZnB1X2Rl bm9ybV91bmRlcmZsb3dfaW5leGFjdCk7CisgIHdvcCA9IGFuczsKKyAgc3Rh dHVzID0gc2ltX2ZwdV9kaXYgKCZhbnMsICZzaW1fZnB1X29uZSwgJndvcCk7 CisgIHN0YXR1cyB8PSBzaW1fZnB1X3JvdW5kXzMyICgmYW5zLCBGUFNSX0dF VF9ST1VORCgpLCBzaW1fZnB1X2Rlbm9ybV91bmRlcmZsb3dfaW5leGFjdCk7 CisKKyAgdXBkYXRlX2Zwc3IgKHNkLCBzdGF0dXMsIEZQU1JfWEVWIHwgRlBT Ul9YRVogfCBGUFNSX1hFSSB8IEZQU1JfWEVPIHwgRlBTUl9YRVUsIDApOwor CisgIHNpbV9mcHVfdG8zMiAoJkdSW3JlZzNdLCAmYW5zKTsKKyAgVFJBQ0Vf RlBfUkVTVUxUX0ZQVTEgKCZhbnMpOworfQorCisvLyBTUVJURi5ECitycnJy LDAxMTExMTEwMDAwMCArIHd3d3csMDEwMDAxMDExMTEwOkZfSTo6OnNxcnRm LmQKKyp2ODUwZTJ2MworInNxcnRmLmQgcjxyZWcyZT4sIHI8cmVnM2U+Igor eworICBzaW1fZnB1IGFucywgd29wOworICBzaW1fZnB1X3N0YXR1cyBzdGF0 dXM7CisKKyAgc2ltX2ZwdV8yMzJ0byAoJndvcCwgR1JbcmVnMmUrMV0sIEdS W3JlZzJlXSk7CisgIFRSQUNFX0ZQX0lOUFVUX0ZQVTEgKCZ3b3ApOworCisg IHN0YXR1cyA9IHNpbV9mcHVfc3FydCAoJmFucywgJndvcCk7CisgIHN0YXR1 cyB8PSBzaW1fZnB1X3JvdW5kXzY0ICgmYW5zLCBGUFNSX0dFVF9ST1VORCgp LCBzaW1fZnB1X2Rlbm9ybV91bmRlcmZsb3dfaW5leGFjdCk7CisKKyAgdXBk YXRlX2Zwc3IgKHNkLCBzdGF0dXMsIEZQU1JfWEVWIHwgRlBTUl9YRUksIDEp OworCisgIHNpbV9mcHVfdG8yMzIgKCZHUltyZWczZSsxXSwgJkdSW3JlZzNl XSwgJmFucyk7CisgIFRSQUNFX0ZQX1JFU1VMVF9GUFUxICgmYW5zKTsKK30K KworLy8gU1FSVEYuUworcnJycnIsMTExMTExMDAwMDAgKyB3d3d3dywxMDAw MTAwMTExMDpGX0k6OjpzcXJ0Zi5zCisqdjg1MGUydjMKKyJzcXJ0Zi5zIHI8 cmVnMj4sIHI8cmVnMz4iCit7CisgIHNpbV9mcHUgYW5zLCB3b3A7CisgIHNp bV9mcHVfc3RhdHVzIHN0YXR1czsKKworICBzaW1fZnB1XzMydG8gKCZ3b3As IEdSW3JlZzJdKTsKKyAgVFJBQ0VfRlBfSU5QVVRfRlBVMSAoJndvcCk7CisK KyAgc3RhdHVzID0gc2ltX2ZwdV9zcXJ0ICgmYW5zLCAmd29wKTsKKyAgc3Rh dHVzIHw9IHNpbV9mcHVfcm91bmRfMzIgKCZhbnMsIEZQU1JfR0VUX1JPVU5E KCksIHNpbV9mcHVfZGVub3JtX3VuZGVyZmxvd19pbmV4YWN0KTsKKworICB1 cGRhdGVfZnBzciAoc2QsIHN0YXR1cywgRlBTUl9YRVYgfCBGUFNSX1hFSSwg MCk7CisKKyAgc2ltX2ZwdV90bzMyICgmR1JbcmVnM10sICZhbnMpOworICBU UkFDRV9GUF9SRVNVTFRfRlBVMSAoJmFucyk7Cit9CisKKy8vIFNVQkYuRAor cnJyciwwMTExMTExLFJSUlIsMCArIHd3d3csMDEwMDAxMTEwMDEwOkZfSTo6 OnN1YmYuZAorKnY4NTBlMnYzCisic3ViZi5kIHI8cmVnMWU+LCByPHJlZzJl PiwgcjxyZWczZT4iCit7CisgIHNpbV9mcHUgYW5zLCB3b3AxLCB3b3AyOwor ICBzaW1fZnB1X3N0YXR1cyBzdGF0dXM7CisKKyAgc2ltX2ZwdV8yMzJ0byAo JndvcDEsIEdSW3JlZzFlKzFdLCBHUltyZWcxZV0pOworICBzaW1fZnB1XzIz MnRvICgmd29wMiwgR1JbcmVnMmUrMV0sIEdSW3JlZzJlXSk7CisgIFRSQUNF X0ZQX0lOUFVUX0ZQVTIgKCZ3b3AxLCAmd29wMik7CisKKyAgc3RhdHVzID0g c2ltX2ZwdV9zdWIgKCZhbnMsICZ3b3AyLCAmd29wMSk7CisgIHN0YXR1cyB8 PSBzaW1fZnB1X3JvdW5kXzY0ICgmYW5zLCBGUFNSX0dFVF9ST1VORCgpLCBz aW1fZnB1X2Rlbm9ybV91bmRlcmZsb3dfaW5leGFjdCk7CisKKyAgdXBkYXRl X2Zwc3IgKHNkLCBzdGF0dXMsIEZQU1JfWEVWIHwgRlBTUl9YRUkgfCBGUFNS X1hFTyB8IEZQU1JfWEVVLCAxKTsKKworICBzaW1fZnB1X3RvMjMyICgmR1Jb cmVnM2UrMV0sICZHUltyZWczZV0sICZhbnMpOworICBUUkFDRV9GUF9SRVNV TFRfRlBVMSAoJmFucyk7Cit9CisKKy8vIFNVQkYuUworcnJycnIsMTExMTEx LFJSUlJSICsgd3d3d3csMTAwMDExMDAwMTA6Rl9JOjo6c3ViZi5zCisqdjg1 MGUydjMKKyJzdWJmLnMgcjxyZWcxPiwgcjxyZWcyPiwgcjxyZWczPiIKK3sK KyAgc2ltX2ZwdSBhbnMsIHdvcDEsIHdvcDI7CisgIHNpbV9mcHVfc3RhdHVz IHN0YXR1czsKKworICBzaW1fZnB1XzMydG8gKCZ3b3AxLCBHUltyZWcxXSk7 CisgIHNpbV9mcHVfMzJ0byAoJndvcDIsIEdSW3JlZzJdKTsKKyAgVFJBQ0Vf RlBfSU5QVVRfRlBVMiAoJndvcDEsICZ3b3AyKTsKKworICBzdGF0dXMgPSBz aW1fZnB1X3N1YiAoJmFucywgJndvcDIsICZ3b3AxKTsKKyAgc3RhdHVzIHw9 IHNpbV9mcHVfcm91bmRfMzIgKCZhbnMsIEZQU1JfR0VUX1JPVU5EKCksIHNp bV9mcHVfZGVub3JtX3VuZGVyZmxvd19pbmV4YWN0KTsKKworICB1cGRhdGVf ZnBzciAoc2QsIHN0YXR1cywgRlBTUl9YRVYgfCBGUFNSX1hFSSB8IEZQU1Jf WEVPIHwgRlBTUl9YRVUsIDApOworCisgIHNpbV9mcHVfdG8zMiAoJkdSW3Jl ZzNdLCAmYW5zKTsKKyAgVFJBQ0VfRlBfUkVTVUxUX0ZQVTEgKCZhbnMpOwor fQorCisvLyBUUkZTUgorMDAwMDAxMTExMTEwMDAwMCArIDAwMDAwMTAwMDAw MCxiYmIsMDpGX0k6Ojp0cmZzcgorKnY4NTBlMnYzCisidHJmc3IiOihiYmIg PT0gMCkKKyJ0cmZzciA8YmJiPiIKK3sKKyAgVFJBQ0VfQUxVX0lOUFVUMSAo R0VUX0ZQQ0MoKSk7CisKKyAgaWYgKFRFU1RfRlBDQyAoYmJiKSkKKyAgICBQ U1cgfD0gUFNXX1o7CisgIGVsc2UgCisgICAgUFNXICY9IH5QU1dfWjsgIAor CisgIFRSQUNFX0FMVV9SRVNVTFQxIChQU1cpOworfQorCisvLyBUUk5DRi5E TAorcnJyciwwMTExMTExMDAwMDEgKyB3d3d3LDAxMDAwMTAxMDEwMDpGX0k6 Ojp0cm5jZl9kbAorKnY4NTBlMnYzCisidHJuY2YuZGwgcjxyZWcyZT4sIHI8 cmVnM2U+IgoreworICBzaWduZWQ2NCBhbnM7CisgIHNpbV9mcHUgd29wOwor ICBzaW1fZnB1X3N0YXR1cyBzdGF0dXM7CisKKyAgc2ltX2ZwdV8yMzJ0byAo JndvcCwgR1JbcmVnMmUrMV0sIEdSW3JlZzJlXSk7CisgIFRSQUNFX0ZQX0lO UFVUX0ZQVTEgKCZ3b3ApOworCisgIHN0YXR1cyA9IHNpbV9mcHVfcm91bmRf NjQgKCZ3b3AsIHNpbV9mcHVfcm91bmRfemVybywgc2ltX2ZwdV9kZW5vcm1f emVybyk7CisgIHN0YXR1cyB8PSBzaW1fZnB1X3RvNjRpICgmYW5zLCAmd29w LCBzaW1fZnB1X3JvdW5kX3plcm8pOworCisgIGNoZWNrX2N2dF9maShzZCwg c3RhdHVzLCAxKTsKKworICBHUltyZWczZV0gPSBhbnM7CisgIEdSW3JlZzNl KzFdID0gYW5zPj4zMkw7CisgIFRSQUNFX0ZQX1JFU1VMVF9XT1JEMiAoR1Jb cmVnM2VdLCBHUltyZWczZSsxXSk7Cit9CisKKy8vIFRSTkNGLkRXCitycnJy LDAxMTExMTEwMDAwMSArIHd3d3d3LDEwMDAxMDEwMDAwOkZfSTo6OnRybmNm X2R3Cisqdjg1MGUydjMKKyJ0cm5jZi5kdyByPHJlZzJlPiwgcjxyZWczPiIK K3sKKyAgdWludDMyIGFuczsKKyAgc2ltX2ZwdSB3b3A7CisgIHNpbV9mcHVf c3RhdHVzIHN0YXR1czsKKworICBzaW1fZnB1XzIzMnRvICgmd29wLCBHUlty ZWcyZSsxXSwgR1JbcmVnMmVdKTsKKyAgVFJBQ0VfRlBfSU5QVVRfRlBVMSAo JndvcCk7CisKKyAgc3RhdHVzID0gc2ltX2ZwdV9yb3VuZF8zMiAoJndvcCwg c2ltX2ZwdV9yb3VuZF96ZXJvLCBzaW1fZnB1X2Rlbm9ybV96ZXJvKTsKKyAg c3RhdHVzIHw9IHNpbV9mcHVfdG8zMmkgKCZhbnMsICZ3b3AsIHNpbV9mcHVf cm91bmRfemVybyk7CisKKyAgY2hlY2tfY3Z0X2ZpKHNkLCBzdGF0dXMsIDEp OworCisgIEdSW3JlZzNdID0gYW5zOworICBUUkFDRV9GUF9SRVNVTFRfV09S RDEgKGFucyk7Cit9CisKKy8vIFRSTkNGLlNMCitycnJyciwxMTExMTEwMDAw MSArIHd3d3csMDEwMDAxMDAwMTAwOkZfSTo6OnRybmNmX3NsCisqdjg1MGUy djMKKyJ0cm5jZi5zbCByPHJlZzI+LCByPHJlZzNlPiIKK3sKKyAgc2lnbmVk NjQgYW5zOworICBzaW1fZnB1IHdvcDsKKyAgc2ltX2ZwdV9zdGF0dXMgc3Rh dHVzOworCisgIHNpbV9mcHVfMzJ0byAoJndvcCwgR1JbcmVnMl0pOworICBU UkFDRV9GUF9JTlBVVF9GUFUxICgmd29wKTsKKworICBzdGF0dXMgPSBzaW1f ZnB1X3JvdW5kXzY0ICgmd29wLCBzaW1fZnB1X3JvdW5kX3plcm8sIHNpbV9m cHVfZGVub3JtX3plcm8pOworICBzdGF0dXMgfD0gc2ltX2ZwdV90bzY0aSAo JmFucywgJndvcCwgc2ltX2ZwdV9yb3VuZF96ZXJvKTsKKworICBHUltyZWcz ZV0gPSBhbnM7CisgIEdSW3JlZzNlKzFdID0gYW5zID4+IDMyTDsKKyAgVFJB Q0VfRlBfUkVTVUxUX1dPUkQyIChHUltyZWczZV0sIEdSW3JlZzNlKzFdKTsK K30KKworLy8gVFJOQ0YuU1cKK3JycnJyLDExMTExMTAwMDAxICsgd3d3d3cs MTAwMDEwMDAwMDA6Rl9JOjo6dHJuY2Zfc3cKKyp2ODUwZTJ2MworInRybmNm LnN3IHI8cmVnMj4sIHI8cmVnMz4iCit7CisgIHVpbnQzMiBhbnM7CisgIHNp bV9mcHUgd29wOworICBzaW1fZnB1X3N0YXR1cyBzdGF0dXM7CisKKyAgc2lt X2ZwdV8zMnRvICgmd29wLCBHUltyZWcyXSk7CisgIFRSQUNFX0ZQX0lOUFVU X0ZQVTEgKCZ3b3ApOworCisgIHN0YXR1cyA9IHNpbV9mcHVfcm91bmRfMzIg KCZ3b3AsIHNpbV9mcHVfcm91bmRfemVybywgc2ltX2ZwdV9kZW5vcm1femVy byk7CisgIHN0YXR1cyB8PSBzaW1fZnB1X3RvMzJpICgmYW5zLCAmd29wLCBz aW1fZnB1X3JvdW5kX3plcm8pOworCisgIGNoZWNrX2N2dF9maShzZCwgc3Rh dHVzLCAwKTsKKworICBHUltyZWczXSA9IGFuczsKKyAgVFJBQ0VfRlBfUkVT VUxUX1dPUkQxIChhbnMpOworfQorCg== --_002_371569CBCFB2E745B891DBB88B2DFDDD19E7B32E2DKCINPUNHJCMS0_--