From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 50123 invoked by alias); 19 May 2017 05:12:54 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Received: (qmail 49594 invoked by uid 89); 19 May 2017 05:12:49 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.9 required=5.0 tests=BAYES_00,RCVD_IN_DNSWL_NONE,SPF_HELO_PASS,SPF_PASS autolearn=ham version=3.3.2 spammy=U*rth, Henderson, henderson, Hx-spam-relays-external:sk:mail-db X-HELO: EUR01-DB5-obe.outbound.protection.outlook.com Received: from mail-db5eur01on0084.outbound.protection.outlook.com (HELO EUR01-DB5-obe.outbound.protection.outlook.com) (104.47.2.84) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Fri, 19 May 2017 05:12:45 +0000 Received: from HE1PR0802MB2377.eurprd08.prod.outlook.com (10.172.129.19) by HE1PR0802MB2380.eurprd08.prod.outlook.com (10.172.129.22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1084.16; Fri, 19 May 2017 05:12:45 +0000 Received: from HE1PR0802MB2377.eurprd08.prod.outlook.com ([fe80::488f:32b:9c56:4080]) by HE1PR0802MB2377.eurprd08.prod.outlook.com ([fe80::488f:32b:9c56:4080%19]) with mapi id 15.01.1084.031; Fri, 19 May 2017 05:12:45 +0000 From: Michael Collison To: "gcc-patches@gcc.gnu.org" CC: nd Subject: [PATCH][Aarch64] Add support for overflow add and sub operations Date: Fri, 19 May 2017 06:27:00 -0000 Message-ID: authentication-results: gcc.gnu.org; dkim=none (message not signed) header.d=none;gcc.gnu.org; dmarc=none action=none header.from=arm.com; x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1;HE1PR0802MB2380;7:zm7lnbDBDtHn/8ZxsgE7m9jGv/6oA1anaYTy23LiX52K3rgimD3DUyZduqu4YA3tZETkbtDZm54Vw7LKrFuRBlzokhiBKHrAKJzhG+IQD9px/7CevVEwOHiZw2uJUbZA+eeyvgwxAzA3TZvGd0LWsTqn1fnhSI4GOCUMCERw3TvDTWC+X2Rj0WsiOb4Y17Gz/16UnNEKUEA2qGCjIFUTLMqIjE9RIIaXiCYfMF9yMP4F4xXl/h/72uVoMBxT8sG8mgcrev1MjiDkpY95bw6YHvbyLTK8RETCW8teaCV/pv3jBlF3ERTaNKTaTeY8/W1fudXDOBPfatBaWPlhieP8TA== x-ms-office365-filtering-correlation-id: d49ac978-3e44-4544-3c54-08d49e75af31 x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: UriScan:;BCL:0;PCL:0;RULEID:(22001)(2017030254075)(48565401081)(201703131423075)(201703031133081)(201702281549075);SRVR:HE1PR0802MB2380; nodisclaimer: True x-microsoft-antispam-prvs: x-exchange-antispam-report-test: UriScan:(180628864354917)(22074186197030)(183786458502308); x-exchange-antispam-report-cfa-test: BCL:0;PCL:0;RULEID:(102415395)(6040450)(601004)(2401047)(5005006)(8121501046)(93006095)(93001095)(3002001)(10201501046)(6055026)(6041248)(20161123564025)(20161123562025)(20161123558100)(20161123555025)(20161123560025)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(6072148);SRVR:HE1PR0802MB2380;BCL:0;PCL:0;RULEID:;SRVR:HE1PR0802MB2380; x-forefront-prvs: 031257FE13 x-forefront-antispam-report: SFV:NSPM;SFS:(10009020)(6009001)(39450400003)(39860400002)(39840400002)(39410400002)(39850400002)(39400400002)(377424004)(3280700002)(50986999)(2501003)(54356999)(3660700001)(8936002)(99936001)(86362001)(74316002)(7696004)(5250100002)(81166006)(8676002)(110136004)(4326008)(189998001)(53936002)(38730400002)(6436002)(7736002)(25786009)(6506006)(3846002)(102836003)(6116002)(9686003)(6306002)(55016002)(72206003)(66066001)(2900100001)(99286003)(5660300001)(966005)(478600001)(33656002)(6916009)(305945005)(2351001);DIR:OUT;SFP:1101;SCL:1;SRVR:HE1PR0802MB2380;H:HE1PR0802MB2377.eurprd08.prod.outlook.com;FPR:;SPF:None;MLV:sfv;LANG:en; spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM Content-Type: multipart/mixed; boundary="_002_HE1PR0802MB237772D3163E8EFE89EFD8DD95E50HE1PR0802MB2377_" MIME-Version: 1.0 X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-originalarrivaltime: 19 May 2017 05:12:45.0421 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: f34e5979-57d9-4aaa-ad4d-b122a662184d X-MS-Exchange-Transport-CrossTenantHeadersStamped: HE1PR0802MB2380 X-SW-Source: 2017-05/txt/msg01513.txt.bz2 --_002_HE1PR0802MB237772D3163E8EFE89EFD8DD95E50HE1PR0802MB2377_ Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Content-length: 3047 Hi, This patch improves code generations for builtin arithmetic overflow operat= ions for the aarch64 backend. As an example for a simple test case such as: Sure for a simple test case such as: int f (int x, int y, int *ovf) { int res; *ovf =3D __builtin_sadd_overflow (x, y, &res); return res; } Current trunk at -O2 generates f: mov w3, w0 mov w4, 0 add w0, w0, w1 tbnz w1, #31, .L4 cmp w0, w3 blt .L3 .L2: str w4, [x2] ret .p2align 3 .L4: cmp w0, w3 ble .L2 .L3: mov w4, 1 b .L2 With the patch this now generates: f: adds w0, w0, w1 cset w1, vs str w1, [x2] ret Original patch from Richard Henderson: https://gcc.gnu.org/ml/gcc-patches/2016-01/msg01903.html Okay for trunk? 2017-05-17 Michael Collison Richard Henderson * config/aarch64/aarch64-modes.def (CC_V): New. * config/aarch64/aarch64-protos.h (aarch64_add_128bit_scratch_regs): Declare (aarch64_add_128bit_scratch_regs): Declare. (aarch64_expand_subvti): Declare. (aarch64_gen_unlikely_cbranch): Declare * config/aarch64/aarch64.c (aarch64_select_cc_mode): Test for signed overflow using CC_Vmode. (aarch64_get_condition_code_1): Handle CC_Vmode. (aarch64_gen_unlikely_cbranch): New function. (aarch64_add_128bit_scratch_regs): New function. (aarch64_subv_128bit_scratch_regs): New function. (aarch64_expand_subvti): New function. * config/aarch64/aarch64.md (addv4, uaddv4): New. (addti3): Create simpler code if low part is already known to be 0. (addvti4, uaddvti4): New. (*add3_compareC_cconly_imm): New. (*add3_compareC_cconly): New. (*add3_compareC_imm): New. (*add3_compareC): Rename from add3_compare1; do not handle constants within this pattern. (*add3_compareV_cconly_imm): New. (*add3_compareV_cconly): New. (*add3_compareV_imm): New. (add3_compareV): New. (add3_carryinC, add3_carryinV): New. (*add3_carryinC_zero, *add3_carryinV_zero): New. (*add3_carryinC, *add3_carryinV): New. (subv4, usubv4): New. (subti): Handle op1 zero. (subvti4, usub4ti4): New. (*sub3_compare1_imm): New. (sub3_carryinCV): New. (*sub3_carryinCV_z1_z2, *sub3_carryinCV_z1): New. (*sub3_carryinCV_z2, *sub3_carryinCV): New. * testsuite/gcc.target/arm/builtin_sadd_128.c: New testcase. * testsuite/gcc.target/arm/builtin_saddl.c: New testcase. * testsuite/gcc.target/arm/builtin_saddll.c: New testcase. * testsuite/gcc.target/arm/builtin_uadd_128.c: New testcase. * testsuite/gcc.target/arm/builtin_uaddl.c: New testcase. * testsuite/gcc.target/arm/builtin_uaddll.c: New testcase. * testsuite/gcc.target/arm/builtin_ssub_128.c: New testcase. * testsuite/gcc.target/arm/builtin_ssubl.c: New testcase. * testsuite/gcc.target/arm/builtin_ssubll.c: New testcase. * testsuite/gcc.target/arm/builtin_usub_128.c: New testcase. * testsuite/gcc.target/arm/builtin_usubl.c: New testcase. * testsuite/gcc.target/arm/builtin_usubll.c: New testcase. --_002_HE1PR0802MB237772D3163E8EFE89EFD8DD95E50HE1PR0802MB2377_ Content-Type: application/octet-stream; name="PR6308.patch" Content-Description: PR6308.patch Content-Disposition: attachment; filename="PR6308.patch"; size=29469; creation-date="Fri, 19 May 2017 05:06:45 GMT"; modification-date="Fri, 19 May 2017 05:06:45 GMT" Content-Transfer-Encoding: base64 Content-length: 39947 ZGlmZiAtLWdpdCBhL2djYy9jb25maWcvYWFyY2g2NC9hYXJjaDY0LW1vZGVz LmRlZiBiL2djYy9jb25maWcvYWFyY2g2NC9hYXJjaDY0LW1vZGVzLmRlZgpp bmRleCA0NWY3YTQ0Li4yNDRlNDkwIDEwMDY0NAotLS0gYS9nY2MvY29uZmln L2FhcmNoNjQvYWFyY2g2NC1tb2Rlcy5kZWYKKysrIGIvZ2NjL2NvbmZpZy9h YXJjaDY0L2FhcmNoNjQtbW9kZXMuZGVmCkBAIC0yNCw2ICsyNCw3IEBAIEND X01PREUgKENDX1NXUCk7CiBDQ19NT0RFIChDQ19OWik7ICAgIC8qIE9ubHkg TiBhbmQgWiBiaXRzIG9mIGNvbmRpdGlvbiBmbGFncyBhcmUgdmFsaWQuICAq LwogQ0NfTU9ERSAoQ0NfWik7ICAgICAvKiBPbmx5IFogYml0IG9mIGNvbmRp dGlvbiBmbGFncyBpcyB2YWxpZC4gICovCiBDQ19NT0RFIChDQ19DKTsgICAg IC8qIE9ubHkgQyBiaXQgb2YgY29uZGl0aW9uIGZsYWdzIGlzIHZhbGlkLiAg Ki8KK0NDX01PREUgKENDX1YpOyAgICAgLyogT25seSBWIGJpdCBvZiBjb25k aXRpb24gZmxhZ3MgaXMgdmFsaWQuICAqLwogCiAvKiBIYWxmLXByZWNpc2lv biBmbG9hdGluZyBwb2ludCBmb3IgX19mcDE2LiAgKi8KIEZMT0FUX01PREUg KEhGLCAyLCAwKTsKZGlmZiAtLWdpdCBhL2djYy9jb25maWcvYWFyY2g2NC9h YXJjaDY0LXByb3Rvcy5oIGIvZ2NjL2NvbmZpZy9hYXJjaDY0L2FhcmNoNjQt cHJvdG9zLmgKaW5kZXggZjU1ZDRiYS4uZjM4YjJiOCAxMDA2NDQKLS0tIGEv Z2NjL2NvbmZpZy9hYXJjaDY0L2FhcmNoNjQtcHJvdG9zLmgKKysrIGIvZ2Nj L2NvbmZpZy9hYXJjaDY0L2FhcmNoNjQtcHJvdG9zLmgKQEAgLTM4OCw2ICsz ODgsMTggQEAgdm9pZCBhYXJjaDY0X3JlbGF5b3V0X3NpbWRfdHlwZXMgKHZv aWQpOwogdm9pZCBhYXJjaDY0X3Jlc2V0X3ByZXZpb3VzX2ZuZGVjbCAodm9p ZCk7CiBib29sIGFhcmNoNjRfcmV0dXJuX2FkZHJlc3Nfc2lnbmluZ19lbmFi bGVkICh2b2lkKTsKIHZvaWQgYWFyY2g2NF9zYXZlX3Jlc3RvcmVfdGFyZ2V0 X2dsb2JhbHMgKHRyZWUpOwordm9pZCBhYXJjaDY0X2FkZF8xMjhiaXRfc2Ny YXRjaF9yZWdzIChydHggb3AxLCBydHggb3AyLCBydHggKmxvd19kZXN0LAor CQkJCSAgICAgIHJ0eCAqbG93X2luMSwgcnR4ICpsb3dfaW4yLAorCQkJCSAg ICAgIHJ0eCAqaGlnaF9kZXN0LCBydHggKmhpZ2hfaW4xLAorCQkJCSAgICAg IHJ0eCAqaGlnaF9pbjIpOwordm9pZCBhYXJjaDY0X3N1YnZfMTI4Yml0X3Nj cmF0Y2hfcmVncyAocnR4IG9wMSwgcnR4IG9wMiwgcnR4ICpsb3dfZGVzdCwK KwkJCQkgICAgICAgcnR4ICpsb3dfaW4xLCBydHggKmxvd19pbjIsCisJCQkJ ICAgICAgIHJ0eCAqaGlnaF9kZXN0LCBydHggKmhpZ2hfaW4xLAorCQkJCSAg ICAgICBydHggKmhpZ2hfaW4yKTsKK3ZvaWQgYWFyY2g2NF9leHBhbmRfc3Vi dnRpIChydHggb3AwLCBydHggbG93X2Rlc3QsIHJ0eCBsb3dfaW4xLAorCQkJ ICAgIHJ0eCBsb3dfaW4yLCBydHggaGlnaF9kZXN0LCBydHggaGlnaF9pbjEs CisJCQkgICAgcnR4IGhpZ2hfaW4yKTsKKwogCiAvKiBJbml0aWFsaXplIGJ1 aWx0aW5zIGZvciBTSU1EIGludHJpbnNpY3MuICAqLwogdm9pZCBpbml0X2Fh cmNoNjRfc2ltZF9idWlsdGlucyAodm9pZCk7CkBAIC00MTIsNiArNDI0LDgg QEAgYm9vbCBhYXJjaDY0X2Zsb2F0X2NvbnN0X3JlcHJlc2VudGFibGVfcCAo cnR4KTsKIAogI2lmIGRlZmluZWQgKFJUWF9DT0RFKQogCit2b2lkIGFhcmNo NjRfZ2VuX3VubGlrZWx5X2NicmFuY2ggKGVudW0gcnR4X2NvZGUsIG1hY2hp bmVfbW9kZSBjY19tb2RlLAorCQkJCSAgIHJ0eCBsYWJlbF9yZWYpOwogYm9v bCBhYXJjaDY0X2xlZ2l0aW1hdGVfYWRkcmVzc19wIChtYWNoaW5lX21vZGUs IHJ0eCwgUlRYX0NPREUsIGJvb2wpOwogbWFjaGluZV9tb2RlIGFhcmNoNjRf c2VsZWN0X2NjX21vZGUgKFJUWF9DT0RFLCBydHgsIHJ0eCk7CiBydHggYWFy Y2g2NF9nZW5fY29tcGFyZV9yZWcgKFJUWF9DT0RFLCBydHgsIHJ0eCk7CmRp ZmYgLS1naXQgYS9nY2MvY29uZmlnL2FhcmNoNjQvYWFyY2g2NC5jIGIvZ2Nj L2NvbmZpZy9hYXJjaDY0L2FhcmNoNjQuYwppbmRleCBmMzQzZDkyLi43MWE2 NTFjIDEwMDY0NAotLS0gYS9nY2MvY29uZmlnL2FhcmNoNjQvYWFyY2g2NC5j CisrKyBiL2djYy9jb25maWcvYWFyY2g2NC9hYXJjaDY0LmMKQEAgLTQ3MTYs NiArNDcxNiwxMyBAQCBhYXJjaDY0X3NlbGVjdF9jY19tb2RlIChSVFhfQ09E RSBjb2RlLCBydHggeCwgcnR4IHkpCiAgICAgICAmJiBHRVRfQ09ERSAoeSkg PT0gWkVST19FWFRFTkQpCiAgICAgcmV0dXJuIENDX0Ntb2RlOwogCisgIC8q IEEgdGVzdCBmb3Igc2lnbmVkIG92ZXJmbG93LiAgKi8KKyAgaWYgKChHRVRf TU9ERSAoeCkgPT0gREltb2RlIHx8IEdFVF9NT0RFICh4KSA9PSBUSW1vZGUp CisgICAgICAmJiBjb2RlID09IE5FCisgICAgICAmJiBHRVRfQ09ERSAoeCkg PT0gUExVUworICAgICAgJiYgR0VUX0NPREUgKHkpID09IFNJR05fRVhURU5E KQorICAgIHJldHVybiBDQ19WbW9kZTsKKwogICAvKiBGb3IgZXZlcnl0aGlu ZyBlbHNlLCByZXR1cm4gQ0Ntb2RlLiAgKi8KICAgcmV0dXJuIENDbW9kZTsK IH0KQEAgLTQ4MjIsNiArNDgyOSwxNSBAQCBhYXJjaDY0X2dldF9jb25kaXRp b25fY29kZV8xIChlbnVtIG1hY2hpbmVfbW9kZSBtb2RlLCBlbnVtIHJ0eF9j b2RlIGNvbXBfY29kZSkKIAl9CiAgICAgICBicmVhazsKIAorICAgIGNhc2Ug Q0NfVm1vZGU6CisgICAgICBzd2l0Y2ggKGNvbXBfY29kZSkKKwl7CisJY2Fz ZSBORTogcmV0dXJuIEFBUkNINjRfVlM7CisJY2FzZSBFUTogcmV0dXJuIEFB UkNINjRfVkM7CisJZGVmYXVsdDogcmV0dXJuIC0xOworCX0KKyAgICAgIGJy ZWFrOworCiAgICAgZGVmYXVsdDoKICAgICAgIHJldHVybiAtMTsKICAgICB9 CkBAIC0xMzYzMCw2ICsxMzY0Niw4OCBAQCBhYXJjaDY0X3NwbGl0X2RpbW9k ZV9jb25zdF9zdG9yZSAocnR4IGRzdCwgcnR4IHNyYykKICAgcmV0dXJuIHRy dWU7CiB9CiAKKy8qIEdlbmVyYXRlIFJUTCBmb3IgYSBjb25kaXRpb25hbCBi cmFuY2ggd2l0aCBydHggY29tcGFyaXNvbiBDT0RFIGluCisgICBtb2RlIEND X01PREUuICBUaGUgZGVzdGluYXRpb24gb2YgdGhlIHVubGlrZWx5IGNvbmRp dGlvbmFsIGJyYW5jaAorICAgaXMgTEFCRUxfUkVGLiAgKi8KKwordm9pZAor YWFyY2g2NF9nZW5fdW5saWtlbHlfY2JyYW5jaCAoZW51bSBydHhfY29kZSBj b2RlLCBtYWNoaW5lX21vZGUgY2NfbW9kZSwKKwkJCSAgICAgIHJ0eCBsYWJl bF9yZWYpCit7CisgIHJ0eCB4OworICB4ID0gZ2VuX3J0eF9mbXRfZWUgKGNv ZGUsIFZPSURtb2RlLAorCQkgICAgICBnZW5fcnR4X1JFRyAoY2NfbW9kZSwg Q0NfUkVHTlVNKSwKKwkJICAgICAgY29uc3QwX3J0eCk7CisKKyAgeCA9IGdl bl9ydHhfSUZfVEhFTl9FTFNFIChWT0lEbW9kZSwgeCwKKwkJCSAgICBnZW5f cnR4X0xBQkVMX1JFRiAoVk9JRG1vZGUsIGxhYmVsX3JlZiksCisJCQkgICAg cGNfcnR4KTsKKyAgYWFyY2g2NF9lbWl0X3VubGlrZWx5X2p1bXAgKGdlbl9y dHhfU0VUIChwY19ydHgsIHgpKTsKK30KKwordm9pZCBhYXJjaDY0X2FkZF8x MjhiaXRfc2NyYXRjaF9yZWdzIChydHggb3AxLCBydHggb3AyLCBydHggKmxv d19kZXN0LAorCQkJCSAgICAgIHJ0eCAqbG93X2luMSwgcnR4ICpsb3dfaW4y LAorCQkJCSAgICAgIHJ0eCAqaGlnaF9kZXN0LCBydHggKmhpZ2hfaW4xLAor CQkJCSAgICAgIHJ0eCAqaGlnaF9pbjIpCit7CisgICpsb3dfZGVzdCA9IGdl bl9yZWdfcnR4IChESW1vZGUpOworICAqbG93X2luMSA9IGdlbl9sb3dwYXJ0 IChESW1vZGUsIG9wMSk7CisgICpsb3dfaW4yID0gc2ltcGxpZnlfZ2VuX3N1 YnJlZyAoREltb2RlLCBvcDIsIFRJbW9kZSwKKwkJCQkgIHN1YnJlZ19sb3dw YXJ0X29mZnNldCAoREltb2RlLCBUSW1vZGUpKTsKKyAgKmhpZ2hfZGVzdCA9 IGdlbl9yZWdfcnR4IChESW1vZGUpOworICAqaGlnaF9pbjEgPSBnZW5faGln aHBhcnQgKERJbW9kZSwgb3AxKTsKKyAgKmhpZ2hfaW4yID0gc2ltcGxpZnlf Z2VuX3N1YnJlZyAoREltb2RlLCBvcDIsIFRJbW9kZSwKKwkJCQkgICBzdWJy ZWdfaGlnaHBhcnRfb2Zmc2V0IChESW1vZGUsIFRJbW9kZSkpOworfQorCit2 b2lkIGFhcmNoNjRfc3Vidl8xMjhiaXRfc2NyYXRjaF9yZWdzIChydHggb3Ax LCBydHggb3AyLCBydHggKmxvd19kZXN0LAorCQkJCSAgICAgICBydHggKmxv d19pbjEsIHJ0eCAqbG93X2luMiwKKwkJCQkgICAgICAgcnR4ICpoaWdoX2Rl c3QsIHJ0eCAqaGlnaF9pbjEsCisJCQkJICAgICAgIHJ0eCAqaGlnaF9pbjIp Cit7CisgICpsb3dfZGVzdCA9IGdlbl9yZWdfcnR4IChESW1vZGUpOworICAq bG93X2luMSA9IHNpbXBsaWZ5X2dlbl9zdWJyZWcgKERJbW9kZSwgb3AxLCBU SW1vZGUsCisJCQkJICBzdWJyZWdfbG93cGFydF9vZmZzZXQgKERJbW9kZSwg VEltb2RlKSk7CisgICpsb3dfaW4yID0gc2ltcGxpZnlfZ2VuX3N1YnJlZyAo REltb2RlLCBvcDIsIFRJbW9kZSwKKwkJCQkgIHN1YnJlZ19sb3dwYXJ0X29m ZnNldCAoREltb2RlLCBUSW1vZGUpKTsKKyAgKmhpZ2hfZGVzdCA9IGdlbl9y ZWdfcnR4IChESW1vZGUpOworICAqaGlnaF9pbjEgPSBzaW1wbGlmeV9nZW5f c3VicmVnIChESW1vZGUsIG9wMSwgVEltb2RlLAorCQkJCSAgIHN1YnJlZ19o aWdocGFydF9vZmZzZXQgKERJbW9kZSwgVEltb2RlKSk7CisgICpoaWdoX2lu MiA9IHNpbXBsaWZ5X2dlbl9zdWJyZWcgKERJbW9kZSwgb3AyLCBUSW1vZGUs CisJCQkJICAgc3VicmVnX2hpZ2hwYXJ0X29mZnNldCAoREltb2RlLCBUSW1v ZGUpKTsKKworfQorCit2b2lkIGFhcmNoNjRfZXhwYW5kX3N1YnZ0aSAocnR4 IG9wMCwgcnR4IGxvd19kZXN0LCBydHggbG93X2luMSwKKwkJCSAgICBydHgg bG93X2luMiwgcnR4IGhpZ2hfZGVzdCwgcnR4IGhpZ2hfaW4xLAorCQkJICAg IHJ0eCBoaWdoX2luMikKK3sKKyAgaWYgKGxvd19pbjIgPT0gY29uc3QwX3J0 eCkKKyAgICB7CisgICAgICBsb3dfZGVzdCA9IGxvd19pbjE7CisgICAgICBl bWl0X2luc24gKGdlbl9zdWJkaTNfY29tcGFyZTEgKGhpZ2hfZGVzdCwgaGln aF9pbjEsCisJCQkJICAgICAgZm9yY2VfcmVnIChESW1vZGUsIGhpZ2hfaW4y KSkpOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIGlmIChDT05TVF9J TlRfUCAobG93X2luMikpCisJeworCSAgbG93X2luMiA9IGZvcmNlX3JlZyAo REltb2RlLCBHRU5fSU5UICgtVUlOVFZBTCAobG93X2luMikpKTsKKwkgIGhp Z2hfaW4yID0gZm9yY2VfcmVnIChESW1vZGUsIGhpZ2hfaW4yKTsKKwkgIGVt aXRfaW5zbiAoZ2VuX2FkZGRpM19jb21wYXJlQyAobG93X2Rlc3QsIGxvd19p bjEsIGxvd19pbjIpKTsKKwl9CisgICAgICBlbHNlCisJZW1pdF9pbnNuIChn ZW5fc3ViZGkzX2NvbXBhcmUxIChsb3dfZGVzdCwgbG93X2luMSwgbG93X2lu MikpOworICAgICAgZW1pdF9pbnNuIChnZW5fc3ViZGkzX2NhcnJ5aW5DViAo aGlnaF9kZXN0LAorCQkJCSAgICAgICBmb3JjZV9yZWcgKERJbW9kZSwgaGln aF9pbjEpLAorCQkJCSAgICAgICBoaWdoX2luMikpOworICAgIH0KKworICBl bWl0X21vdmVfaW5zbiAoZ2VuX2xvd3BhcnQgKERJbW9kZSwgb3AwKSwgbG93 X2Rlc3QpOworICBlbWl0X21vdmVfaW5zbiAoZ2VuX2hpZ2hwYXJ0IChESW1v ZGUsIG9wMCksIGhpZ2hfZGVzdCk7CisKK30KKwogLyogSW1wbGVtZW50IHRo ZSBUQVJHRVRfQVNBTl9TSEFET1dfT0ZGU0VUIGhvb2suICAqLwogCiBzdGF0 aWMgdW5zaWduZWQgSE9TVF9XSURFX0lOVApkaWZmIC0tZ2l0IGEvZ2NjL2Nv bmZpZy9hYXJjaDY0L2FhcmNoNjQubWQgYi9nY2MvY29uZmlnL2FhcmNoNjQv YWFyY2g2NC5tZAppbmRleCBhNjkzYTNiLi4zOTc2ZWNiIDEwMDY0NAotLS0g YS9nY2MvY29uZmlnL2FhcmNoNjQvYWFyY2g2NC5tZAorKysgYi9nY2MvY29u ZmlnL2FhcmNoNjQvYWFyY2g2NC5tZApAQCAtMTcxMSwyNSArMTcxMSwxMjMg QEAKICAgfQogKQogCisoZGVmaW5lX2V4cGFuZCAiYWRkdjxtb2RlPjQiCisg IFsobWF0Y2hfb3BlcmFuZDpHUEkgMCAicmVnaXN0ZXJfb3BlcmFuZCIpCisg ICAobWF0Y2hfb3BlcmFuZDpHUEkgMSAicmVnaXN0ZXJfb3BlcmFuZCIpCisg ICAobWF0Y2hfb3BlcmFuZDpHUEkgMiAicmVnaXN0ZXJfb3BlcmFuZCIpCisg ICAobWF0Y2hfb3BlcmFuZCAzICIiKV0KKyAgIiIKK3sKKyAgZW1pdF9pbnNu IChnZW5fYWRkPG1vZGU+M19jb21wYXJlViAob3BlcmFuZHNbMF0sIG9wZXJh bmRzWzFdLCBvcGVyYW5kc1syXSkpOworICBhYXJjaDY0X2dlbl91bmxpa2Vs eV9jYnJhbmNoIChORSwgQ0NfVm1vZGUsIG9wZXJhbmRzWzNdKTsKKworICBE T05FOworfSkKKworKGRlZmluZV9leHBhbmQgInVhZGR2PG1vZGU+NCIKKyAg WyhtYXRjaF9vcGVyYW5kOkdQSSAwICJyZWdpc3Rlcl9vcGVyYW5kIikKKyAg IChtYXRjaF9vcGVyYW5kOkdQSSAxICJyZWdpc3Rlcl9vcGVyYW5kIikKKyAg IChtYXRjaF9vcGVyYW5kOkdQSSAyICJyZWdpc3Rlcl9vcGVyYW5kIikKKyAg IChtYXRjaF9vcGVyYW5kIDMgIiIpXQorICAiIgoreworICBlbWl0X2luc24g KGdlbl9hZGQ8bW9kZT4zX2NvbXBhcmVDIChvcGVyYW5kc1swXSwgb3BlcmFu ZHNbMV0sIG9wZXJhbmRzWzJdKSk7CisgIGFhcmNoNjRfZ2VuX3VubGlrZWx5 X2NicmFuY2ggKE5FLCBDQ19DbW9kZSwgb3BlcmFuZHNbM10pOworCisgIERP TkU7Cit9KQorCisKIChkZWZpbmVfZXhwYW5kICJhZGR0aTMiCiAgIFsoc2V0 IChtYXRjaF9vcGVyYW5kOlRJIDAgInJlZ2lzdGVyX29wZXJhbmQiICIiKQog CShwbHVzOlRJIChtYXRjaF9vcGVyYW5kOlRJIDEgInJlZ2lzdGVyX29wZXJh bmQiICIiKQotCQkgKG1hdGNoX29wZXJhbmQ6VEkgMiAicmVnaXN0ZXJfb3Bl cmFuZCIgIiIpKSldCisJCSAobWF0Y2hfb3BlcmFuZDpUSSAyICJhYXJjaDY0 X3JlZ19vcl9pbW0iICIiKSkpXQogICAiIgogewotICBydHggbG93ID0gZ2Vu X3JlZ19ydHggKERJbW9kZSk7Ci0gIGVtaXRfaW5zbiAoZ2VuX2FkZGRpM19j b21wYXJlQyAobG93LCBnZW5fbG93cGFydCAoREltb2RlLCBvcGVyYW5kc1sx XSksCi0JCQkJICBnZW5fbG93cGFydCAoREltb2RlLCBvcGVyYW5kc1syXSkp KTsKKyAgcnR4IGwwLGwxLGwyLGgwLGgxLGgyOwogCi0gIHJ0eCBoaWdoID0g Z2VuX3JlZ19ydHggKERJbW9kZSk7Ci0gIGVtaXRfaW5zbiAoZ2VuX2FkZGRp M19jYXJyeWluIChoaWdoLCBnZW5faGlnaHBhcnQgKERJbW9kZSwgb3BlcmFu ZHNbMV0pLAotCQkJCSBnZW5faGlnaHBhcnQgKERJbW9kZSwgb3BlcmFuZHNb Ml0pKSk7CisgIGFhcmNoNjRfYWRkXzEyOGJpdF9zY3JhdGNoX3JlZ3MgKG9w ZXJhbmRzWzFdLCBvcGVyYW5kc1syXSwKKwkJCQkgICAmbDAsICZsMSwgJmwy LCAmaDAsICZoMSwgJmgyKTsKKworICBpZiAobDIgPT0gY29uc3QwX3J0eCkK KyAgICB7CisgICAgICBsMCA9IGwxOworICAgICAgaWYgKCFhYXJjaDY0X3Bs dXNsb25nX29wZXJhbmQgKGgyLCBESW1vZGUpKQorCWgyID0gZm9yY2VfcmVn IChESW1vZGUsIGgyKTsKKyAgICAgIGVtaXRfaW5zbiAoZ2VuX2FkZGRpMyAo aDAsIGgxLCBoMikpOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIGVt aXRfaW5zbiAoZ2VuX2FkZGRpM19jb21wYXJlQyAobDAsIGwxLCBmb3JjZV9y ZWcgKERJbW9kZSwgbDIpKSk7CisgICAgICBlbWl0X2luc24gKGdlbl9hZGRk aTNfY2FycnlpbiAoaDAsIGgxLCBmb3JjZV9yZWcgKERJbW9kZSwgaDIpKSk7 CisgICAgfQorCisgIGVtaXRfbW92ZV9pbnNuIChnZW5fbG93cGFydCAoRElt b2RlLCBvcGVyYW5kc1swXSksIGwwKTsKKyAgZW1pdF9tb3ZlX2luc24gKGdl bl9oaWdocGFydCAoREltb2RlLCBvcGVyYW5kc1swXSksIGgwKTsKIAotICBl bWl0X21vdmVfaW5zbiAoZ2VuX2xvd3BhcnQgKERJbW9kZSwgb3BlcmFuZHNb MF0pLCBsb3cpOwotICBlbWl0X21vdmVfaW5zbiAoZ2VuX2hpZ2hwYXJ0IChE SW1vZGUsIG9wZXJhbmRzWzBdKSwgaGlnaCk7CiAgIERPTkU7CiB9KQogCiso ZGVmaW5lX2V4cGFuZCAiYWRkdnRpNCIKKyAgWyhtYXRjaF9vcGVyYW5kOlRJ IDAgInJlZ2lzdGVyX29wZXJhbmQiICIiKQorICAgKG1hdGNoX29wZXJhbmQ6 VEkgMSAicmVnaXN0ZXJfb3BlcmFuZCIgIiIpCisgICAobWF0Y2hfb3BlcmFu ZDpUSSAyICJhYXJjaDY0X3JlZ19vcl9pbW0iICIiKQorICAgKG1hdGNoX29w ZXJhbmQgMyAiIildCisgICIiCit7CisgIHJ0eCBsMCxsMSxsMixoMCxoMSxo MjsKKworICBhYXJjaDY0X2FkZF8xMjhiaXRfc2NyYXRjaF9yZWdzIChvcGVy YW5kc1sxXSwgb3BlcmFuZHNbMl0sCisJCQkJICAgJmwwLCAmbDEsICZsMiwg JmgwLCAmaDEsICZoMik7CisKKyAgaWYgKGwyID09IGNvbnN0MF9ydHgpCisg ICAgeworICAgICAgbDAgPSBsMTsKKyAgICAgIGVtaXRfaW5zbiAoZ2VuX2Fk ZGRpM19jb21wYXJlViAoaDAsIGgxLCBmb3JjZV9yZWcgKERJbW9kZSwgaDIp KSk7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgZW1pdF9pbnNuIChn ZW5fYWRkZGkzX2NvbXBhcmVDIChsMCwgbDEsIGZvcmNlX3JlZyAoREltb2Rl LCBsMikpKTsKKyAgICAgIGVtaXRfaW5zbiAoZ2VuX2FkZGRpM19jYXJyeWlu ViAoaDAsIGgxLCBmb3JjZV9yZWcgKERJbW9kZSwgaDIpKSk7CisgICAgfQor CisgIGVtaXRfbW92ZV9pbnNuIChnZW5fbG93cGFydCAoREltb2RlLCBvcGVy YW5kc1swXSksIGwwKTsKKyAgZW1pdF9tb3ZlX2luc24gKGdlbl9oaWdocGFy dCAoREltb2RlLCBvcGVyYW5kc1swXSksIGgwKTsKKworICBhYXJjaDY0X2dl bl91bmxpa2VseV9jYnJhbmNoIChORSwgQ0NfVm1vZGUsIG9wZXJhbmRzWzNd KTsKKyAgRE9ORTsKK30pCisKKyhkZWZpbmVfZXhwYW5kICJ1YWRkdnRpNCIK KyAgWyhtYXRjaF9vcGVyYW5kOlRJIDAgInJlZ2lzdGVyX29wZXJhbmQiICIi KQorICAgKG1hdGNoX29wZXJhbmQ6VEkgMSAicmVnaXN0ZXJfb3BlcmFuZCIg IiIpCisgICAobWF0Y2hfb3BlcmFuZDpUSSAyICJhYXJjaDY0X3JlZ19vcl9p bW0iICIiKQorICAgKG1hdGNoX29wZXJhbmQgMyAiIildCisgICIiCit7Cisg IHJ0eCBsMCxsMSxsMixoMCxoMSxoMjsKKworICBhYXJjaDY0X2FkZF8xMjhi aXRfc2NyYXRjaF9yZWdzIChvcGVyYW5kc1sxXSwgb3BlcmFuZHNbMl0sCisJ CQkJICAgJmwwLCAmbDEsICZsMiwgJmgwLCAmaDEsICZoMik7CisKKyAgaWYg KGwyID09IGNvbnN0MF9ydHgpCisgICAgeworICAgICAgbDAgPSBsMTsKKyAg ICAgIGVtaXRfaW5zbiAoZ2VuX2FkZGRpM19jb21wYXJlQyAoaDAsIGgxLCBm b3JjZV9yZWcgKERJbW9kZSwgaDIpKSk7CisgICAgfQorICBlbHNlCisgICAg eworICAgICAgZW1pdF9pbnNuIChnZW5fYWRkZGkzX2NvbXBhcmVDIChsMCwg bDEsIGZvcmNlX3JlZyAoREltb2RlLCBsMikpKTsKKyAgICAgIGVtaXRfaW5z biAoZ2VuX2FkZGRpM19jYXJyeWluQyAoaDAsIGgxLCBmb3JjZV9yZWcgKERJ bW9kZSwgaDIpKSk7CisgICAgfQorCisgIGVtaXRfbW92ZV9pbnNuIChnZW5f bG93cGFydCAoREltb2RlLCBvcGVyYW5kc1swXSksIGwwKTsKKyAgZW1pdF9t b3ZlX2luc24gKGdlbl9oaWdocGFydCAoREltb2RlLCBvcGVyYW5kc1swXSks IGgwKTsKKworICBhYXJjaDY0X2dlbl91bmxpa2VseV9jYnJhbmNoIChORSwg Q0NfQ21vZGUsIG9wZXJhbmRzWzNdKTsKKyAgRE9ORTsKKyB9KQorCiAoZGVm aW5lX2luc24gImFkZDxtb2RlPjNfY29tcGFyZTAiCiAgIFsoc2V0IChyZWc6 Q0NfTlogQ0NfUkVHTlVNKQogCShjb21wYXJlOkNDX05aCkBAIC0xODI4LDEw ICsxOTI2LDcwIEBACiAgIFsoc2V0X2F0dHIgInR5cGUiICJhbHVzX3NyZWci KV0KICkKIAorOzsgTm90ZSB0aGF0IHNpbmNlIHdlJ3JlIHNpZ24tZXh0ZW5k aW5nLCBtYXRjaCB0aGUgaW1tZWRpYXRlIGluIEdQSQorOzsgcmF0aGVyIHRo YW4gaW4gRFdJLiAgU2luY2UgQ09OU1RfSU5UIGlzIG1vZGVsZXNzLCB0aGlz IHdvcmtzIGZpbmUuCisoZGVmaW5lX2luc24gIiphZGQ8bW9kZT4zX2NvbXBh cmVWX2Njb25seV9pbW0iCisgIFsoc2V0IChyZWc6Q0NfViBDQ19SRUdOVU0p CisJKG5lOkNDX1YKKwkgIChwbHVzOjxEV0k+CisJICAgIChzaWduX2V4dGVu ZDo8RFdJPiAobWF0Y2hfb3BlcmFuZDpHUEkgMCAicmVnaXN0ZXJfb3BlcmFu ZCIgInIsciIpKQorCSAgICAobWF0Y2hfb3BlcmFuZDpHUEkgMSAiYWFyY2g2 NF9wbHVzX2ltbWVkaWF0ZSIgIkksSiIpKQorCSAgKHNpZ25fZXh0ZW5kOjxE V0k+IChwbHVzOkdQSSAobWF0Y2hfZHVwIDApIChtYXRjaF9kdXAgMSkpKSkp XQorICAiIgorICAiQAorICBjbW5cXHQlPHc+MCwgJTx3PjEKKyAgY21wXFx0 JTx3PjAsICMlbjEiCisgIFsoc2V0X2F0dHIgInR5cGUiICJhbHVzX2ltbSIp XQorKQorCisoZGVmaW5lX2luc24gIiphZGQ8bW9kZT4zX2NvbXBhcmVWX2Nj b25seSIKKyAgWyhzZXQgKHJlZzpDQ19WIENDX1JFR05VTSkKKwkobmU6Q0Nf VgorCSAgKHBsdXM6PERXST4KKwkgICAgKHNpZ25fZXh0ZW5kOjxEV0k+ICht YXRjaF9vcGVyYW5kOkdQSSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiciIpKQor CSAgICAoc2lnbl9leHRlbmQ6PERXST4gKG1hdGNoX29wZXJhbmQ6R1BJIDEg InJlZ2lzdGVyX29wZXJhbmQiICJyIikpKQorCSAgKHNpZ25fZXh0ZW5kOjxE V0k+IChwbHVzOkdQSSAobWF0Y2hfZHVwIDApIChtYXRjaF9kdXAgMSkpKSkp XQorICAiIgorICAiY21uXFx0JTx3PjAsICU8dz4xIgorICBbKHNldF9hdHRy ICJ0eXBlIiAiYWx1c19zcmVnIildCispCisKKyhkZWZpbmVfaW5zbiAiKmFk ZDxtb2RlPjNfY29tcGFyZVZfaW1tIgorICBbKHNldCAocmVnOkNDX1YgQ0Nf UkVHTlVNKQorCShuZTpDQ19WCisJICAocGx1czo8RFdJPgorCSAgICAoc2ln bl9leHRlbmQ6PERXST4KKwkgICAgICAobWF0Y2hfb3BlcmFuZDpHUEkgMSAi cmVnaXN0ZXJfb3BlcmFuZCIgInIsciIpKQorCSAgICAobWF0Y2hfb3BlcmFu ZDpHUEkgMiAiYWFyY2g2NF9wbHVzX2ltbWVkaWF0ZSIgIkksSiIpKQorCSAg KHNpZ25fZXh0ZW5kOjxEV0k+CisJICAgIChwbHVzOkdQSSAobWF0Y2hfZHVw IDEpIChtYXRjaF9kdXAgMikpKSkpCisgICAoc2V0IChtYXRjaF9vcGVyYW5k OkdQSSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiPXIsciIpCisJKHBsdXM6R1BJ IChtYXRjaF9kdXAgMSkgKG1hdGNoX2R1cCAyKSkpXQorICAgIiIKKyAgICJA CisgICBhZGRzXFx0JTx3PjAsICU8dz4xLCAlPHc+MgorICAgc3Vic1xcdCU8 dz4wLCAlPHc+MSwgIyVuMiIKKyAgWyhzZXRfYXR0ciAidHlwZSIgImFsdXNf aW1tLGFsdXNfaW1tIildCispCisKKyhkZWZpbmVfaW5zbiAiYWRkPG1vZGU+ M19jb21wYXJlViIKKyAgWyhzZXQgKHJlZzpDQ19WIENDX1JFR05VTSkKKwko bmU6Q0NfVgorCSAgKHBsdXM6PERXST4KKwkgICAgKHNpZ25fZXh0ZW5kOjxE V0k+IChtYXRjaF9vcGVyYW5kOkdQSSAxICJyZWdpc3Rlcl9vcGVyYW5kIiAi ciIpKQorCSAgICAoc2lnbl9leHRlbmQ6PERXST4gKG1hdGNoX29wZXJhbmQ6 R1BJIDIgInJlZ2lzdGVyX29wZXJhbmQiICJyIikpKQorCSAgKHNpZ25fZXh0 ZW5kOjxEV0k+IChwbHVzOkdQSSAobWF0Y2hfZHVwIDEpIChtYXRjaF9kdXAg MikpKSkpCisgICAoc2V0IChtYXRjaF9vcGVyYW5kOkdQSSAwICJyZWdpc3Rl cl9vcGVyYW5kIiAiPXIiKQorCShwbHVzOkdQSSAobWF0Y2hfZHVwIDEpICht YXRjaF9kdXAgMikpKV0KKyAgIiIKKyAgImFkZHNcXHQlPHc+MCwgJTx3PjEs ICU8dz4yIgorICBbKHNldF9hdHRyICJ0eXBlIiAiYWx1c19zcmVnIildCisp CisKIChkZWZpbmVfaW5zbiAiKmFkZHNfc2hpZnRfaW1tXzxtb2RlPiIKICAg WyhzZXQgKHJlZzpDQ19OWiBDQ19SRUdOVU0pCiAJKGNvbXBhcmU6Q0NfTloK LQkgKHBsdXM6R1BJIChBU0hJRlQ6R1BJIAorCSAocGx1czpHUEkgKEFTSElG VDpHUEkKIAkJICAgIChtYXRjaF9vcGVyYW5kOkdQSSAxICJyZWdpc3Rlcl9v cGVyYW5kIiAiciIpCiAJCSAgICAobWF0Y2hfb3BlcmFuZDpRSSAyICJhYXJj aDY0X3NoaWZ0X2ltbV88bW9kZT4iICJuIikpCiAJCSAgIChtYXRjaF9vcGVy YW5kOkdQSSAzICJyZWdpc3Rlcl9vcGVyYW5kIiAiciIpKQpAQCAtMjE4Nyw2 ICsyMzQ1LDEzOCBAQAogICBbKHNldF9hdHRyICJ0eXBlIiAiYWRjX3JlZyIp XQogKQogCisoZGVmaW5lX2V4cGFuZCAiYWRkPG1vZGU+M19jYXJyeWluQyIK KyAgWyhwYXJhbGxlbAorICAgICBbKHNldCAobWF0Y2hfZHVwIDMpCisJICAg KG5lOkNDX0MKKwkgICAgIChwbHVzOjxEV0k+CisJICAgICAgIChwbHVzOjxE V0k+CisJCSAobWF0Y2hfZHVwIDQpCisJCSAoemVyb19leHRlbmQ6PERXST4K KwkJICAgKG1hdGNoX29wZXJhbmQ6R1BJIDEgInJlZ2lzdGVyX29wZXJhbmQi ICJyIikpKQorCSAgICAgICAoemVyb19leHRlbmQ6PERXST4KKwkJIChtYXRj aF9vcGVyYW5kOkdQSSAyICJyZWdpc3Rlcl9vcGVyYW5kIiAiciIpKSkKKwkg ICAoemVyb19leHRlbmQ6PERXST4KKwkgICAgIChwbHVzOkdQSQorCSAgICAg ICAocGx1czpHUEkgKG1hdGNoX2R1cCA1KSAobWF0Y2hfZHVwIDEpKQorCSAg ICAgICAobWF0Y2hfZHVwIDIpKSkpKQorICAgICAgKHNldCAobWF0Y2hfb3Bl cmFuZDpHUEkgMCAicmVnaXN0ZXJfb3BlcmFuZCIpCisJICAgKHBsdXM6R1BJ CisJICAgICAocGx1czpHUEkgKG1hdGNoX2R1cCA1KSAobWF0Y2hfZHVwIDEp KQorCSAgICAgKG1hdGNoX2R1cCAyKSkpXSldCisgICAiIgoreworICBvcGVy YW5kc1szXSA9IGdlbl9ydHhfUkVHIChDQ19DbW9kZSwgQ0NfUkVHTlVNKTsK KyAgb3BlcmFuZHNbNF0gPSBnZW5fcnR4X05FICg8RFdJPm1vZGUsIG9wZXJh bmRzWzNdLCBjb25zdDBfcnR4KTsKKyAgb3BlcmFuZHNbNV0gPSBnZW5fcnR4 X05FICg8TU9ERT5tb2RlLCBvcGVyYW5kc1szXSwgY29uc3QwX3J0eCk7Cit9 KQorCisoZGVmaW5lX2luc24gIiphZGQ8bW9kZT4zX2NhcnJ5aW5DX3plcm8i CisgIFsoc2V0IChyZWc6Q0NfQyBDQ19SRUdOVU0pCisJKG5lOkNDX0MKKwkg IChwbHVzOjxEV0k+CisJICAgIChtYXRjaF9vcGVyYW5kOjxEV0k+IDIgImFh cmNoNjRfY2Fycnlfb3BlcmF0aW9uIiAiIikKKwkgICAgKHplcm9fZXh0ZW5k OjxEV0k+IChtYXRjaF9vcGVyYW5kOkdQSSAxICJyZWdpc3Rlcl9vcGVyYW5k IiAiciIpKSkKKwkgICh6ZXJvX2V4dGVuZDo8RFdJPgorCSAgICAocGx1czpH UEkKKwkgICAgICAobWF0Y2hfb3BlcmFuZDpHUEkgMyAiYWFyY2g2NF9jYXJy eV9vcGVyYXRpb24iICIiKQorCSAgICAgIChtYXRjaF9kdXAgMSkpKSkpCisg ICAoc2V0IChtYXRjaF9vcGVyYW5kOkdQSSAwICJyZWdpc3Rlcl9vcGVyYW5k IikKKwkocGx1czpHUEkgKG1hdGNoX2R1cCAzKSAobWF0Y2hfZHVwIDEpKSld CisgICAiIgorICAgImFkY3NcXHQlPHc+MCwgJTx3PjEsIDx3PnpyIgorICBb KHNldF9hdHRyICJ0eXBlIiAiYWRjX3JlZyIpXQorKQorCisoZGVmaW5lX2lu c24gIiphZGQ8bW9kZT4zX2NhcnJ5aW5DIgorICBbKHNldCAocmVnOkNDX0Mg Q0NfUkVHTlVNKQorCShuZTpDQ19DCisJICAocGx1czo8RFdJPgorCSAgICAo cGx1czo8RFdJPgorCSAgICAgIChtYXRjaF9vcGVyYW5kOjxEV0k+IDMgImFh cmNoNjRfY2Fycnlfb3BlcmF0aW9uIiAiIikKKwkgICAgICAoemVyb19leHRl bmQ6PERXST4gKG1hdGNoX29wZXJhbmQ6R1BJIDEgInJlZ2lzdGVyX29wZXJh bmQiICJyIikpKQorCSAgICAoemVyb19leHRlbmQ6PERXST4gKG1hdGNoX29w ZXJhbmQ6R1BJIDIgInJlZ2lzdGVyX29wZXJhbmQiICJyIikpKQorCSAgKHpl cm9fZXh0ZW5kOjxEV0k+CisJICAgIChwbHVzOkdQSQorCSAgICAgIChwbHVz OkdQSQorCQkobWF0Y2hfb3BlcmFuZDpHUEkgNCAiYWFyY2g2NF9jYXJyeV9v cGVyYXRpb24iICIiKQorCQkobWF0Y2hfZHVwIDEpKQorCSAgICAgIChtYXRj aF9kdXAgMikpKSkpCisgICAoc2V0IChtYXRjaF9vcGVyYW5kOkdQSSAwICJy ZWdpc3Rlcl9vcGVyYW5kIikKKwkocGx1czpHUEkKKwkgIChwbHVzOkdQSSAo bWF0Y2hfZHVwIDQpIChtYXRjaF9kdXAgMSkpCisJICAobWF0Y2hfZHVwIDIp KSldCisgICAiIgorICAgImFkY3NcXHQlPHc+MCwgJTx3PjEsICU8dz4yIgor ICBbKHNldF9hdHRyICJ0eXBlIiAiYWRjX3JlZyIpXQorKQorCisoZGVmaW5l X2V4cGFuZCAiYWRkPG1vZGU+M19jYXJyeWluViIKKyAgWyhwYXJhbGxlbAor ICAgICBbKHNldCAocmVnOkNDX1YgQ0NfUkVHTlVNKQorCSAgIChuZTpDQ19W CisJICAgICAocGx1czo8RFdJPgorCSAgICAgICAocGx1czo8RFdJPgorCQkg KG1hdGNoX2R1cCAzKQorCQkgKHNpZ25fZXh0ZW5kOjxEV0k+CisJCSAgICht YXRjaF9vcGVyYW5kOkdQSSAxICJyZWdpc3Rlcl9vcGVyYW5kIiAiciIpKSkK KwkgICAgICAgKHNpZ25fZXh0ZW5kOjxEV0k+CisJCSAobWF0Y2hfb3BlcmFu ZDpHUEkgMiAicmVnaXN0ZXJfb3BlcmFuZCIgInIiKSkpCisJICAgKHNpZ25f ZXh0ZW5kOjxEV0k+CisJICAgICAocGx1czpHUEkKKwkgICAgICAgKHBsdXM6 R1BJIChtYXRjaF9kdXAgNCkgKG1hdGNoX2R1cCAxKSkKKwkgICAgICAgKG1h dGNoX2R1cCAyKSkpKSkKKyAgICAgIChzZXQgKG1hdGNoX29wZXJhbmQ6R1BJ IDAgInJlZ2lzdGVyX29wZXJhbmQiKQorCSAgIChwbHVzOkdQSQorCSAgICAg KHBsdXM6R1BJIChtYXRjaF9kdXAgNCkgKG1hdGNoX2R1cCAxKSkKKwkgICAg IChtYXRjaF9kdXAgMikpKV0pXQorICAgIiIKK3sKKyAgcnR4IGNjID0gZ2Vu X3J0eF9SRUcgKENDX0Ntb2RlLCBDQ19SRUdOVU0pOworICBvcGVyYW5kc1sz XSA9IGdlbl9ydHhfTkUgKDxEV0k+bW9kZSwgY2MsIGNvbnN0MF9ydHgpOwor ICBvcGVyYW5kc1s0XSA9IGdlbl9ydHhfTkUgKDxNT0RFPm1vZGUsIGNjLCBj b25zdDBfcnR4KTsKK30pCisKKyhkZWZpbmVfaW5zbiAiKmFkZDxtb2RlPjNf Y2FycnlpblZfemVybyIKKyAgWyhzZXQgKHJlZzpDQ19WIENDX1JFR05VTSkK KwkobmU6Q0NfVgorCSAgKHBsdXM6PERXST4KKwkgICAgKG1hdGNoX29wZXJh bmQ6PERXST4gMiAiYWFyY2g2NF9jYXJyeV9vcGVyYXRpb24iICIiKQorCSAg ICAoc2lnbl9leHRlbmQ6PERXST4gKG1hdGNoX29wZXJhbmQ6R1BJIDEgInJl Z2lzdGVyX29wZXJhbmQiICJyIikpKQorCSAgKHNpZ25fZXh0ZW5kOjxEV0k+ CisJICAgIChwbHVzOkdQSQorCSAgICAgIChtYXRjaF9vcGVyYW5kOkdQSSAz ICJhYXJjaDY0X2NhcnJ5X29wZXJhdGlvbiIgIiIpCisJICAgICAgKG1hdGNo X2R1cCAxKSkpKSkKKyAgIChzZXQgKG1hdGNoX29wZXJhbmQ6R1BJIDAgInJl Z2lzdGVyX29wZXJhbmQiKQorCShwbHVzOkdQSSAobWF0Y2hfZHVwIDMpICht YXRjaF9kdXAgMSkpKV0KKyAgICIiCisgICAiYWRjc1xcdCU8dz4wLCAlPHc+ MSwgPHc+enIiCisgIFsoc2V0X2F0dHIgInR5cGUiICJhZGNfcmVnIildCisp CisKKyhkZWZpbmVfaW5zbiAiKmFkZDxtb2RlPjNfY2FycnlpblYiCisgIFso c2V0IChyZWc6Q0NfViBDQ19SRUdOVU0pCisJKG5lOkNDX1YKKwkgIChwbHVz OjxEV0k+CisJICAgIChwbHVzOjxEV0k+CisJICAgICAgKG1hdGNoX29wZXJh bmQ6PERXST4gMyAiYWFyY2g2NF9jYXJyeV9vcGVyYXRpb24iICIiKQorCSAg ICAgIChzaWduX2V4dGVuZDo8RFdJPiAobWF0Y2hfb3BlcmFuZDpHUEkgMSAi cmVnaXN0ZXJfb3BlcmFuZCIgInIiKSkpCisJICAgIChzaWduX2V4dGVuZDo8 RFdJPiAobWF0Y2hfb3BlcmFuZDpHUEkgMiAicmVnaXN0ZXJfb3BlcmFuZCIg InIiKSkpCisJICAoc2lnbl9leHRlbmQ6PERXST4KKwkgICAgKHBsdXM6R1BJ CisJICAgICAgKHBsdXM6R1BJCisJCShtYXRjaF9vcGVyYW5kOkdQSSA0ICJh YXJjaDY0X2NhcnJ5X29wZXJhdGlvbiIgIiIpCisJCShtYXRjaF9kdXAgMSkp CisJICAgICAgKG1hdGNoX2R1cCAyKSkpKSkKKyAgIChzZXQgKG1hdGNoX29w ZXJhbmQ6R1BJIDAgInJlZ2lzdGVyX29wZXJhbmQiKQorCShwbHVzOkdQSQor CSAgKHBsdXM6R1BJIChtYXRjaF9kdXAgNCkgKG1hdGNoX2R1cCAxKSkKKwkg IChtYXRjaF9kdXAgMikpKV0KKyAgICIiCisgICAiYWRjc1xcdCU8dz4wLCAl PHc+MSwgJTx3PjIiCisgIFsoc2V0X2F0dHIgInR5cGUiICJhZGNfcmVnIild CispCisKIChkZWZpbmVfaW5zbiAiKmFkZF91eHQ8bW9kZT5fc2hpZnQyIgog ICBbKHNldCAobWF0Y2hfb3BlcmFuZDpHUEkgMCAicmVnaXN0ZXJfb3BlcmFu ZCIgIj1yayIpCiAJKHBsdXM6R1BJIChhbmQ6R1BJCkBAIC0yMjgzLDIyICsy NTczLDg2IEBACiAgICAoc2V0X2F0dHIgInNpbWQiICIqLHllcyIpXQogKQog CisoZGVmaW5lX2V4cGFuZCAic3Vidjxtb2RlPjQiCisgIFsobWF0Y2hfb3Bl cmFuZDpHUEkgMCAicmVnaXN0ZXJfb3BlcmFuZCIpCisgICAobWF0Y2hfb3Bl cmFuZDpHUEkgMSAiYWFyY2g2NF9yZWdfb3JfemVybyIpCisgICAobWF0Y2hf b3BlcmFuZDpHUEkgMiAiYWFyY2g2NF9yZWdfb3JfemVybyIpCisgICAobWF0 Y2hfb3BlcmFuZCAzICIiKV0KKyAgIiIKK3sKKyAgZW1pdF9pbnNuIChnZW5f c3ViPG1vZGU+M19jb21wYXJlMSAob3BlcmFuZHNbMF0sIG9wZXJhbmRzWzFd LCBvcGVyYW5kc1syXSkpOworICBhYXJjaDY0X2dlbl91bmxpa2VseV9jYnJh bmNoIChORSwgQ0NfVm1vZGUsIG9wZXJhbmRzWzNdKTsKKworICBET05FOwor fSkKKworKGRlZmluZV9leHBhbmQgInVzdWJ2PG1vZGU+NCIKKyAgWyhtYXRj aF9vcGVyYW5kOkdQSSAwICJyZWdpc3Rlcl9vcGVyYW5kIikKKyAgIChtYXRj aF9vcGVyYW5kOkdQSSAxICJhYXJjaDY0X3JlZ19vcl96ZXJvIikKKyAgICht YXRjaF9vcGVyYW5kOkdQSSAyICJhYXJjaDY0X3JlZ19vcl96ZXJvIikKKyAg IChtYXRjaF9vcGVyYW5kIDMgIiIpXQorICAiIgoreworICBlbWl0X2luc24g KGdlbl9zdWI8bW9kZT4zX2NvbXBhcmUxIChvcGVyYW5kc1swXSwgb3BlcmFu ZHNbMV0sIG9wZXJhbmRzWzJdKSk7CisgIGFhcmNoNjRfZ2VuX3VubGlrZWx5 X2NicmFuY2ggKExUVSwgQ0Ntb2RlLCBvcGVyYW5kc1szXSk7CisKKyAgRE9O RTsKK30pCisKIChkZWZpbmVfZXhwYW5kICJzdWJ0aTMiCiAgIFsoc2V0ICht YXRjaF9vcGVyYW5kOlRJIDAgInJlZ2lzdGVyX29wZXJhbmQiICIiKQotCSht aW51czpUSSAobWF0Y2hfb3BlcmFuZDpUSSAxICJyZWdpc3Rlcl9vcGVyYW5k IiAiIikKKwkobWludXM6VEkgKG1hdGNoX29wZXJhbmQ6VEkgMSAiYWFyY2g2 NF9yZWdfb3JfemVybyIgIiIpCiAJCSAgKG1hdGNoX29wZXJhbmQ6VEkgMiAi cmVnaXN0ZXJfb3BlcmFuZCIgIiIpKSldCiAgICIiCiB7Ci0gIHJ0eCBsb3cg PSBnZW5fcmVnX3J0eCAoREltb2RlKTsKLSAgZW1pdF9pbnNuIChnZW5fc3Vi ZGkzX2NvbXBhcmUxIChsb3csIGdlbl9sb3dwYXJ0IChESW1vZGUsIG9wZXJh bmRzWzFdKSwKLQkJCQkgIGdlbl9sb3dwYXJ0IChESW1vZGUsIG9wZXJhbmRz WzJdKSkpOworICBydHggbDAgPSBnZW5fcmVnX3J0eCAoREltb2RlKTsKKyAg cnR4IGwxID0gc2ltcGxpZnlfZ2VuX3N1YnJlZyAoREltb2RlLCBvcGVyYW5k c1sxXSwgVEltb2RlLAorCQkJCXN1YnJlZ19sb3dwYXJ0X29mZnNldCAoRElt b2RlLCBUSW1vZGUpKTsKKyAgcnR4IGwyID0gZ2VuX2xvd3BhcnQgKERJbW9k ZSwgb3BlcmFuZHNbMl0pOworICBydHggaDAgPSBnZW5fcmVnX3J0eCAoRElt b2RlKTsKKyAgcnR4IGgxID0gc2ltcGxpZnlfZ2VuX3N1YnJlZyAoREltb2Rl LCBvcGVyYW5kc1sxXSwgVEltb2RlLAorCQkJCXN1YnJlZ19oaWdocGFydF9v ZmZzZXQgKERJbW9kZSwgVEltb2RlKSk7CisgIHJ0eCBoMiA9IGdlbl9oaWdo cGFydCAoREltb2RlLCBvcGVyYW5kc1syXSk7CiAKLSAgcnR4IGhpZ2ggPSBn ZW5fcmVnX3J0eCAoREltb2RlKTsKLSAgZW1pdF9pbnNuIChnZW5fc3ViZGkz X2NhcnJ5aW4gKGhpZ2gsIGdlbl9oaWdocGFydCAoREltb2RlLCBvcGVyYW5k c1sxXSksCi0JCQkJIGdlbl9oaWdocGFydCAoREltb2RlLCBvcGVyYW5kc1sy XSkpKTsKKyAgZW1pdF9pbnNuIChnZW5fc3ViZGkzX2NvbXBhcmUxIChsMCwg bDEsIGwyKSk7CisgIGVtaXRfaW5zbiAoZ2VuX3N1YmRpM19jYXJyeWluICho MCwgaDEsIGgyKSk7CiAKLSAgZW1pdF9tb3ZlX2luc24gKGdlbl9sb3dwYXJ0 IChESW1vZGUsIG9wZXJhbmRzWzBdKSwgbG93KTsKLSAgZW1pdF9tb3ZlX2lu c24gKGdlbl9oaWdocGFydCAoREltb2RlLCBvcGVyYW5kc1swXSksIGhpZ2gp OworICBlbWl0X21vdmVfaW5zbiAoZ2VuX2xvd3BhcnQgKERJbW9kZSwgb3Bl cmFuZHNbMF0pLCBsMCk7CisgIGVtaXRfbW92ZV9pbnNuIChnZW5faGlnaHBh cnQgKERJbW9kZSwgb3BlcmFuZHNbMF0pLCBoMCk7CisgIERPTkU7Cit9KQor CisoZGVmaW5lX2V4cGFuZCAic3VidnRpNCIKKyAgWyhtYXRjaF9vcGVyYW5k OlRJIDAgInJlZ2lzdGVyX29wZXJhbmQiKQorICAgKG1hdGNoX29wZXJhbmQ6 VEkgMSAiYWFyY2g2NF9yZWdfb3JfemVybyIpCisgICAobWF0Y2hfb3BlcmFu ZDpUSSAyICJhYXJjaDY0X3JlZ19vcl9pbW0iKQorICAgKG1hdGNoX29wZXJh bmQgMyAiIildCisgICIiCit7CisgIHJ0eCBsMCxsMSxsMixoMCxoMSxoMjsK KworICBhYXJjaDY0X3N1YnZfMTI4Yml0X3NjcmF0Y2hfcmVncyAob3BlcmFu ZHNbMV0sIG9wZXJhbmRzWzJdLAorCQkJCSAgICAmbDAsICZsMSwgJmwyLCAm aDAsICZoMSwgJmgyKTsKKyAgYWFyY2g2NF9leHBhbmRfc3VidnRpIChvcGVy YW5kc1swXSwgbDAsIGwxLCBsMiwgaDAsIGgxLCBoMik7CisKKyAgYWFyY2g2 NF9nZW5fdW5saWtlbHlfY2JyYW5jaCAoTkUsIENDX1Ztb2RlLCBvcGVyYW5k c1szXSk7CisgIERPTkU7Cit9KQorCisoZGVmaW5lX2V4cGFuZCAidXN1YnZ0 aTQiCisgIFsobWF0Y2hfb3BlcmFuZDpUSSAwICJyZWdpc3Rlcl9vcGVyYW5k IikKKyAgIChtYXRjaF9vcGVyYW5kOlRJIDEgImFhcmNoNjRfcmVnX29yX3pl cm8iKQorICAgKG1hdGNoX29wZXJhbmQ6VEkgMiAiYWFyY2g2NF9yZWdfb3Jf aW1tIikKKyAgIChtYXRjaF9vcGVyYW5kIDMgIiIpXQorICAiIgoreworICBy dHggbDAsbDEsbDIsaDAsaDEsaDI7CisKKyAgYWFyY2g2NF9zdWJ2XzEyOGJp dF9zY3JhdGNoX3JlZ3MgKG9wZXJhbmRzWzFdLCBvcGVyYW5kc1syXSwKKwkJ CQkgICAgJmwwLCAmbDEsICZsMiwgJmgwLCAmaDEsICZoMik7CisgIGFhcmNo NjRfZXhwYW5kX3N1YnZ0aSAob3BlcmFuZHNbMF0sIGwwLCBsMSwgbDIsIGgw LCBoMSwgaDIpOworCisgIGFhcmNoNjRfZ2VuX3VubGlrZWx5X2NicmFuY2gg KExUVSwgQ0Ntb2RlLCBvcGVyYW5kc1szXSk7CiAgIERPTkU7CiB9KQogCkBA IC0yMzI3LDYgKzI2ODEsMjIgQEAKICAgWyhzZXRfYXR0ciAidHlwZSIgImFs dXNfc3JlZyIpXQogKQogCisoZGVmaW5lX2luc24gIipzdWI8bW9kZT4zX2Nv bXBhcmUxX2ltbSIKKyAgWyhzZXQgKHJlZzpDQyBDQ19SRUdOVU0pCisJKGNv bXBhcmU6Q0MKKwkgIChtYXRjaF9vcGVyYW5kOkdQSSAxICJhYXJjaDY0X3Jl Z19vcl96ZXJvIiAicloscloiKQorCSAgKG1hdGNoX29wZXJhbmQ6R1BJIDIg ImFhcmNoNjRfcGx1c19pbW1lZGlhdGUiICJJLEoiKSkpCisgICAoc2V0ICht YXRjaF9vcGVyYW5kOkdQSSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiPXIsciIp CisJKHBsdXM6R1BJCisJICAobWF0Y2hfZHVwIDEpCisJICAobWF0Y2hfb3Bl cmFuZDpHUEkgMyAiYWFyY2g2NF9wbHVzX2ltbWVkaWF0ZSIgIkosSSIpKSld CisgICJVSU5UVkFMIChvcGVyYW5kc1syXSkgPT0gLVVJTlRWQUwgKG9wZXJh bmRzWzNdKSIKKyAgIkAKKyAgc3Vic1xcdCU8dz4wLCAlPHc+MSwgJTx3PjIK KyAgYWRkc1xcdCU8dz4wLCAlPHc+MSwgJTx3PjMiCisgIFsoc2V0X2F0dHIg InR5cGUiICJhbHVzX2ltbSIpXQorKQorCiAoZGVmaW5lX2luc24gInN1Yjxt b2RlPjNfY29tcGFyZTEiCiAgIFsoc2V0IChyZWc6Q0MgQ0NfUkVHTlVNKQog CShjb21wYXJlOkNDCkBAIC0yNTU0LDYgKzI5MjQsODUgQEAKICAgWyhzZXRf YXR0ciAidHlwZSIgImFkY19yZWciKV0KICkKIAorKGRlZmluZV9leHBhbmQg InN1Yjxtb2RlPjNfY2FycnlpbkNWIgorICBbKHBhcmFsbGVsCisgICAgIFso c2V0IChyZWc6Q0MgQ0NfUkVHTlVNKQorCSAgIChjb21wYXJlOkNDCisJICAg ICAoc2lnbl9leHRlbmQ6PERXST4KKwkgICAgICAgKG1hdGNoX29wZXJhbmQ6 R1BJIDEgImFhcmNoNjRfcmVnX29yX3plcm8iICJyWiIpKQorCSAgICAgKHBs dXM6PERXST4KKwkgICAgICAgKHNpZ25fZXh0ZW5kOjxEV0k+CisJCSAobWF0 Y2hfb3BlcmFuZDpHUEkgMiAicmVnaXN0ZXJfb3BlcmFuZCIgInIiKSkKKwkg ICAgICAgKGx0dTo8RFdJPiAocmVnOkNDIENDX1JFR05VTSkgKGNvbnN0X2lu dCAwKSkpKSkKKyAgICAgIChzZXQgKG1hdGNoX29wZXJhbmQ6R1BJIDAgInJl Z2lzdGVyX29wZXJhbmQiICI9ciIpCisJICAgKG1pbnVzOkdQSQorCSAgICAg KG1pbnVzOkdQSSAobWF0Y2hfZHVwIDEpIChtYXRjaF9kdXAgMikpCisJICAg ICAobHR1OkdQSSAocmVnOkNDIENDX1JFR05VTSkgKGNvbnN0X2ludCAwKSkp KV0pXQorICAgIiIKKykKKworKGRlZmluZV9pbnNuICIqc3ViPG1vZGU+M19j YXJyeWluQ1ZfejFfejIiCisgIFsoc2V0IChyZWc6Q0MgQ0NfUkVHTlVNKQor CShjb21wYXJlOkNDCisJICAoY29uc3RfaW50IDApCisJICAobWF0Y2hfb3Bl cmFuZDo8RFdJPiAyICJhYXJjaDY0X2JvcnJvd19vcGVyYXRpb24iICIiKSkp CisgICAoc2V0IChtYXRjaF9vcGVyYW5kOkdQSSAwICJyZWdpc3Rlcl9vcGVy YW5kIiAiPXIiKQorCShuZWc6R1BJIChtYXRjaF9vcGVyYW5kOkdQSSAxICJh YXJjaDY0X2JvcnJvd19vcGVyYXRpb24iICIiKSkpXQorICAgIiIKKyAgICJz YmNzXFx0JTx3PjAsIDx3PnpyLCA8dz56ciIKKyAgWyhzZXRfYXR0ciAidHlw ZSIgImFkY19yZWciKV0KKykKKworKGRlZmluZV9pbnNuICIqc3ViPG1vZGU+ M19jYXJyeWluQ1ZfejEiCisgIFsoc2V0IChyZWc6Q0MgQ0NfUkVHTlVNKQor CShjb21wYXJlOkNDCisJICAoY29uc3RfaW50IDApCisJICAocGx1czo8RFdJ PgorCSAgICAoc2lnbl9leHRlbmQ6PERXST4KKwkgICAgICAobWF0Y2hfb3Bl cmFuZDpHUEkgMSAicmVnaXN0ZXJfb3BlcmFuZCIgInIiKSkKKwkgICAgKG1h dGNoX29wZXJhbmQ6PERXST4gMiAiYWFyY2g2NF9ib3Jyb3dfb3BlcmF0aW9u IiAiIikpKSkKKyAgIChzZXQgKG1hdGNoX29wZXJhbmQ6R1BJIDAgInJlZ2lz dGVyX29wZXJhbmQiICI9ciIpCisJKG1pbnVzOkdQSQorCSAgKG5lZzpHUEkg KG1hdGNoX2R1cCAxKSkKKwkgIChtYXRjaF9vcGVyYW5kOkdQSSAzICJhYXJj aDY0X2JvcnJvd19vcGVyYXRpb24iICIiKSkpXQorICAgIiIKKyAgICJzYmNz XFx0JTx3PjAsIDx3PnpyLCAlPHc+MSIKKyAgWyhzZXRfYXR0ciAidHlwZSIg ImFkY19yZWciKV0KKykKKworKGRlZmluZV9pbnNuICIqc3ViPG1vZGU+M19j YXJyeWluQ1ZfejIiCisgIFsoc2V0IChyZWc6Q0MgQ0NfUkVHTlVNKQorCShj b21wYXJlOkNDCisJICAoc2lnbl9leHRlbmQ6PERXST4KKwkgICAgKG1hdGNo X29wZXJhbmQ6R1BJIDEgInJlZ2lzdGVyX29wZXJhbmQiICJyIikpCisJICAo bWF0Y2hfb3BlcmFuZDo8RFdJPiAyICJhYXJjaDY0X2JvcnJvd19vcGVyYXRp b24iICIiKSkpCisgICAoc2V0IChtYXRjaF9vcGVyYW5kOkdQSSAwICJyZWdp c3Rlcl9vcGVyYW5kIiAiPXIiKQorCShtaW51czpHUEkKKwkgIChtYXRjaF9k dXAgMSkKKwkgIChtYXRjaF9vcGVyYW5kOkdQSSAzICJhYXJjaDY0X2JvcnJv d19vcGVyYXRpb24iICIiKSkpXQorICAgIiIKKyAgICJzYmNzXFx0JTx3PjAs ICU8dz4xLCA8dz56ciIKKyAgWyhzZXRfYXR0ciAidHlwZSIgImFkY19yZWci KV0KKykKKworKGRlZmluZV9pbnNuICIqc3ViPG1vZGU+M19jYXJyeWluQ1Yi CisgIFsoc2V0IChyZWc6Q0MgQ0NfUkVHTlVNKQorCShjb21wYXJlOkNDCisJ ICAoc2lnbl9leHRlbmQ6PERXST4KKwkgICAgKG1hdGNoX29wZXJhbmQ6R1BJ IDEgInJlZ2lzdGVyX29wZXJhbmQiICJyIikpCisJICAocGx1czo8RFdJPgor CSAgICAoc2lnbl9leHRlbmQ6PERXST4KKwkgICAgICAobWF0Y2hfb3BlcmFu ZDpHUEkgMiAicmVnaXN0ZXJfb3BlcmFuZCIgInIiKSkKKwkgICAgKG1hdGNo X29wZXJhbmQ6PERXST4gMyAiYWFyY2g2NF9ib3Jyb3dfb3BlcmF0aW9uIiAi IikpKSkKKyAgIChzZXQgKG1hdGNoX29wZXJhbmQ6R1BJIDAgInJlZ2lzdGVy X29wZXJhbmQiICI9ciIpCisJKG1pbnVzOkdQSQorCSAgKG1pbnVzOkdQSSAo bWF0Y2hfZHVwIDEpIChtYXRjaF9kdXAgMikpCisJICAobWF0Y2hfb3BlcmFu ZDpHUEkgNCAiYWFyY2g2NF9ib3Jyb3dfb3BlcmF0aW9uIiAiIikpKV0KKyAg ICIiCisgICAic2Jjc1xcdCU8dz4wLCAlPHc+MSwgJTx3PjIiCisgIFsoc2V0 X2F0dHIgInR5cGUiICJhZGNfcmVnIildCispCisKIChkZWZpbmVfaW5zbiAi KnN1Yl91eHQ8bW9kZT5fc2hpZnQyIgogICBbKHNldCAobWF0Y2hfb3BlcmFu ZDpHUEkgMCAicmVnaXN0ZXJfb3BlcmFuZCIgIj1yayIpCiAJKG1pbnVzOkdQ SSAobWF0Y2hfb3BlcmFuZDpHUEkgNCAicmVnaXN0ZXJfb3BlcmFuZCIgInJr IikKZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9hYXJj aDY0L2J1aWx0aW5fc2FkZF8xMjguYyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRh cmdldC9hYXJjaDY0L2J1aWx0aW5fc2FkZF8xMjguYwpuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZDg0YmI2Ci0tLSAvZGV2L251bGwK KysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2FhcmNoNjQvYnVpbHRp bl9zYWRkXzEyOC5jCkBAIC0wLDAgKzEsMTggQEAKKy8qIHsgZGctZG8gY29t cGlsZSB9ICovCisvKiB7IGRnLW9wdGlvbnMgIi1PMiIgfSAgKi8KKworZXh0 ZXJuIHZvaWQgb3ZlcmZsb3dfaGFuZGxlciAoKTsKKworX19pbnQxMjggb3Zl cmZsb3dfYWRkIChfX2ludDEyOCB4LCBfX2ludDEyOCB5KQoreworICBfX2lu dDEyOCByOworCisgIGludCBvdnIgPSBfX2J1aWx0aW5fYWRkX292ZXJmbG93 ICh4LCB5LCAmcik7CisgIGlmIChvdnIpCisgICAgb3ZlcmZsb3dfaGFuZGxl ciAoKTsKKworICByZXR1cm4gcjsKK30KKworLyogeyBkZy1maW5hbCB7IHNj YW4tYXNzZW1ibGVyICJhZGRzIiB9IH0gKi8KKy8qIHsgZGctZmluYWwgeyBz Y2FuLWFzc2VtYmxlciAiYWRkY3MiIH0gfSAqLwpkaWZmIC0tZ2l0IGEvZ2Nj L3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2FhcmNoNjQvYnVpbHRpbl9zYWRkbC5j IGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2FhcmNoNjQvYnVpbHRpbl9z YWRkbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3 NjhhOTgKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2djYy50 YXJnZXQvYWFyY2g2NC9idWlsdGluX3NhZGRsLmMKQEAgLTAsMCArMSwxNyBA QAorLyogeyBkZy1kbyBjb21waWxlIH0gKi8KKy8qIHsgZGctb3B0aW9ucyAi LU8yIiB9ICAqLworCitleHRlcm4gdm9pZCBvdmVyZmxvd19oYW5kbGVyICgp OworCitsb25nIG92ZXJmbG93X2FkZCAobG9uZyB4LCBsb25nIHkpCit7Cisg IGxvbmcgcjsKKworICBpbnQgb3ZyID0gX19idWlsdGluX3NhZGRsX292ZXJm bG93ICh4LCB5LCAmcik7CisgIGlmIChvdnIpCisgICAgb3ZlcmZsb3dfaGFu ZGxlciAoKTsKKworICByZXR1cm4gcjsKK30KKworLyogeyBkZy1maW5hbCB7 IHNjYW4tYXNzZW1ibGVyICJhZGRzIiB9IH0gKi8KZGlmZiAtLWdpdCBhL2dj Yy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9hYXJjaDY0L2J1aWx0aW5fc2FkZGxs LmMgYi9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvYWFyY2g2NC9idWlsdGlu X3NhZGRsbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu LjEyNmE1MjYKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2dj Yy50YXJnZXQvYWFyY2g2NC9idWlsdGluX3NhZGRsbC5jCkBAIC0wLDAgKzEs MTggQEAKKy8qIHsgZGctZG8gY29tcGlsZSB9ICovCisvKiB7IGRnLW9wdGlv bnMgIi1PMiIgfSAgKi8KKworZXh0ZXJuIHZvaWQgb3ZlcmZsb3dfaGFuZGxl ciAoKTsKKworbG9uZyBsb25nIG92ZXJmbG93X2FkZCAobG9uZyBsb25nIHgs IGxvbmcgbG9uZyB5KQoreworICBsb25nIGxvbmcgcjsKKworICBpbnQgb3Zy ID0gX19idWlsdGluX3NhZGRsbF9vdmVyZmxvdyAoeCwgeSwgJnIpOworICBp ZiAob3ZyKQorICAgIG92ZXJmbG93X2hhbmRsZXIgKCk7CisKKyAgcmV0dXJu IHI7Cit9CisKKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlciAiYWRk cyIgfSB9ICovCisKZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLnRh cmdldC9hYXJjaDY0L2J1aWx0aW5fc3N1Yl8xMjguYyBiL2djYy90ZXN0c3Vp dGUvZ2NjLnRhcmdldC9hYXJjaDY0L2J1aWx0aW5fc3N1Yl8xMjguYwpuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMTI2MWUzCi0tLSAv ZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2FhcmNo NjQvYnVpbHRpbl9zc3ViXzEyOC5jCkBAIC0wLDAgKzEsMTggQEAKKy8qIHsg ZGctZG8gY29tcGlsZSB9ICovCisvKiB7IGRnLW9wdGlvbnMgIi1PMiIgfSAg Ki8KKworZXh0ZXJuIHZvaWQgb3ZlcmZsb3dfaGFuZGxlciAoKTsKKworX19p bnQxMjggb3ZlcmZsb3dfc3ViIChfX2ludDEyOCB4LCBfX2ludDEyOCB5KQor eworICBfX2ludDEyOCByOworCisgIGludCBvdnIgPSBfX2J1aWx0aW5fc3Vi X292ZXJmbG93ICh4LCB5LCAmcik7CisgIGlmIChvdnIpCisgICAgb3ZlcmZs b3dfaGFuZGxlciAoKTsKKworICByZXR1cm4gcjsKK30KKworLyogeyBkZy1m aW5hbCB7IHNjYW4tYXNzZW1ibGVyICJzdWJzIiB9IH0gKi8KKy8qIHsgZGct ZmluYWwgeyBzY2FuLWFzc2VtYmxlciAic2JjcyIgfSB9ICovCmRpZmYgLS1n aXQgYS9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvYWFyY2g2NC9idWlsdGlu X3NzdWJsLmMgYi9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvYWFyY2g2NC9i dWlsdGluX3NzdWJsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMC4uMTA0MDQ2NAotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3Vp dGUvZ2NjLnRhcmdldC9hYXJjaDY0L2J1aWx0aW5fc3N1YmwuYwpAQCAtMCww ICsxLDE3IEBACisvKiB7IGRnLWRvIGNvbXBpbGUgfSAqLworLyogeyBkZy1v cHRpb25zICItTzIiIH0gICovCisKK2V4dGVybiB2b2lkIG92ZXJmbG93X2hh bmRsZXIgKCk7CisKK2xvbmcgb3ZlcmZsb3dfc3ViIChsb25nIHgsIGxvbmcg eSkKK3sKKyAgbG9uZyByOworCisgIGludCBvdnIgPSBfX2J1aWx0aW5fc3N1 Ymxfb3ZlcmZsb3cgKHgsIHksICZyKTsKKyAgaWYgKG92cikKKyAgICBvdmVy Zmxvd19oYW5kbGVyICgpOworCisgIHJldHVybiByOworfQorCisvKiB7IGRn LWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXIgInN1YnMiIH0gfSAqLwpkaWZmIC0t Z2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2FhcmNoNjQvYnVpbHRp bl9zc3VibGwuYyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9hYXJjaDY0 L2J1aWx0aW5fc3N1YmxsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMC4uYTAzZGY4OAotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0 c3VpdGUvZ2NjLnRhcmdldC9hYXJjaDY0L2J1aWx0aW5fc3N1YmxsLmMKQEAg LTAsMCArMSwxOCBAQAorLyogeyBkZy1kbyBjb21waWxlIH0gKi8KKy8qIHsg ZGctb3B0aW9ucyAiLU8yIiB9ICAqLworCitleHRlcm4gdm9pZCBvdmVyZmxv d19oYW5kbGVyICgpOworCitsb25nIGxvbmcgb3ZlcmZsb3dfc3ViIChsb25n IGxvbmcgeCwgbG9uZyBsb25nIHkpCit7CisgIGxvbmcgbG9uZyByOworCisg IGludCBvdnIgPSBfX2J1aWx0aW5fc3N1YmxsX292ZXJmbG93ICh4LCB5LCAm cik7CisgIGlmIChvdnIpCisgICAgb3ZlcmZsb3dfaGFuZGxlciAoKTsKKwor ICByZXR1cm4gcjsKK30KKworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1i bGVyICJzdWJzIiB9IH0gKi8KKwpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0 ZS9nY2MudGFyZ2V0L2FhcmNoNjQvYnVpbHRpbl91YWRkXzEyOC5jIGIvZ2Nj L3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2FhcmNoNjQvYnVpbHRpbl91YWRkXzEy OC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjN2M5 OTgKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2djYy50YXJn ZXQvYWFyY2g2NC9idWlsdGluX3VhZGRfMTI4LmMKQEAgLTAsMCArMSwxOCBA QAorLyogeyBkZy1kbyBjb21waWxlIH0gKi8KKy8qIHsgZGctb3B0aW9ucyAi LU8yIiB9ICAqLworCitleHRlcm4gdm9pZCBvdmVyZmxvd19oYW5kbGVyICgp OworCit1bnNpZ25lZCBfX2ludDEyOCBvdmVyZmxvd19hZGQgKHVuc2lnbmVk IF9faW50MTI4IHgsIHVuc2lnbmVkIF9faW50MTI4IHkpCit7CisgIHVuc2ln bmVkIF9faW50MTI4IHI7CisKKyAgaW50IG92ciA9IF9fYnVpbHRpbl9hZGRf b3ZlcmZsb3cgKHgsIHksICZyKTsKKyAgaWYgKG92cikKKyAgICBvdmVyZmxv d19oYW5kbGVyICgpOworCisgIHJldHVybiByOworfQorCisvKiB7IGRnLWZp bmFsIHsgc2Nhbi1hc3NlbWJsZXIgImFkZHMiIH0gfSAqLworLyogeyBkZy1m aW5hbCB7IHNjYW4tYXNzZW1ibGVyICJhZGRjcyIgfSB9ICovCmRpZmYgLS1n aXQgYS9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvYWFyY2g2NC9idWlsdGlu X3VhZGRsLmMgYi9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvYWFyY2g2NC9i dWlsdGluX3VhZGRsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMC4uZTMyNTU5MQotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3Vp dGUvZ2NjLnRhcmdldC9hYXJjaDY0L2J1aWx0aW5fdWFkZGwuYwpAQCAtMCww ICsxLDE3IEBACisvKiB7IGRnLWRvIGNvbXBpbGUgfSAqLworLyogeyBkZy1v cHRpb25zICItTzIiIH0gICovCisKK2V4dGVybiB2b2lkIG92ZXJmbG93X2hh bmRsZXIgKCk7CisKK3Vuc2lnbmVkIGxvbmcgb3ZlcmZsb3dfYWRkICh1bnNp Z25lZCBsb25nIHgsIHVuc2lnbmVkIGxvbmcgeSkKK3sKKyAgdW5zaWduZWQg bG9uZyByOworCisgIGludCBvdnIgPSBfX2J1aWx0aW5fdWFkZGxfb3ZlcmZs b3cgKHgsIHksICZyKTsKKyAgaWYgKG92cikKKyAgICBvdmVyZmxvd19oYW5k bGVyICgpOworCisgIHJldHVybiByOworfQorCisvKiB7IGRnLWZpbmFsIHsg c2Nhbi1hc3NlbWJsZXIgImFkZHMiIH0gfSAqLwpkaWZmIC0tZ2l0IGEvZ2Nj L3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2FhcmNoNjQvYnVpbHRpbl91YWRkbGwu YyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9hYXJjaDY0L2J1aWx0aW5f dWFkZGxsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u NWY0Mjg4NgotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvZ2Nj LnRhcmdldC9hYXJjaDY0L2J1aWx0aW5fdWFkZGxsLmMKQEAgLTAsMCArMSwx OCBAQAorLyogeyBkZy1kbyBjb21waWxlIH0gKi8KKy8qIHsgZGctb3B0aW9u cyAiLU8yIiB9ICAqLworCitleHRlcm4gdm9pZCBvdmVyZmxvd19oYW5kbGVy ICgpOworCit1bnNpZ25lZCBsb25nIGxvbmcgb3ZlcmZsb3dfYWRkICh1bnNp Z25lZCBsb25nIGxvbmcgeCwgdW5zaWduZWQgbG9uZyBsb25nIHkpCit7Cisg IHVuc2lnbmVkIGxvbmcgbG9uZyByOworCisgIGludCBvdnIgPSBfX2J1aWx0 aW5fdWFkZGxsX292ZXJmbG93ICh4LCB5LCAmcik7CisgIGlmIChvdnIpCisg ICAgb3ZlcmZsb3dfaGFuZGxlciAoKTsKKworICByZXR1cm4gcjsKK30KKwor LyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyICJhZGRzIiB9IH0gKi8K KwpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2FhcmNo NjQvYnVpbHRpbl91c3ViXzEyOC5jIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFy Z2V0L2FhcmNoNjQvYnVpbHRpbl91c3ViXzEyOC5jCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4NGY0YTQKLS0tIC9kZXYvbnVsbAor KysgYi9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvYWFyY2g2NC9idWlsdGlu X3VzdWJfMTI4LmMKQEAgLTAsMCArMSwxOCBAQAorLyogeyBkZy1kbyBjb21w aWxlIH0gKi8KKy8qIHsgZGctb3B0aW9ucyAiLU8yIiB9ICAqLworCitleHRl cm4gdm9pZCBvdmVyZmxvd19oYW5kbGVyICgpOworCit1bnNpZ25lZCBfX2lu dDEyOCBvdmVyZmxvd19zdWIgKHVuc2lnbmVkIF9faW50MTI4IHgsIHVuc2ln bmVkIF9faW50MTI4IHkpCit7CisgIHVuc2lnbmVkIF9faW50MTI4IHI7CisK KyAgaW50IG92ciA9IF9fYnVpbHRpbl9zdWJfb3ZlcmZsb3cgKHgsIHksICZy KTsKKyAgaWYgKG92cikKKyAgICBvdmVyZmxvd19oYW5kbGVyICgpOworCisg IHJldHVybiByOworfQorCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJs ZXIgInN1YnMiIH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1i bGVyICJzYmNzIiB9IH0gKi8KZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUv Z2NjLnRhcmdldC9hYXJjaDY0L2J1aWx0aW5fdXN1YmwuYyBiL2djYy90ZXN0 c3VpdGUvZ2NjLnRhcmdldC9hYXJjaDY0L2J1aWx0aW5fdXN1YmwuYwpuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZDAzM2RhCi0tLSAv ZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2FhcmNo NjQvYnVpbHRpbl91c3VibC5jCkBAIC0wLDAgKzEsMTcgQEAKKy8qIHsgZGct ZG8gY29tcGlsZSB9ICovCisvKiB7IGRnLW9wdGlvbnMgIi1PMiIgfSAgKi8K KworZXh0ZXJuIHZvaWQgb3ZlcmZsb3dfaGFuZGxlciAoKTsKKwordW5zaWdu ZWQgbG9uZyBvdmVyZmxvd19zdWIgKHVuc2lnbmVkIGxvbmcgeCwgdW5zaWdu ZWQgbG9uZyB5KQoreworICB1bnNpZ25lZCBsb25nIHI7CisKKyAgaW50IG92 ciA9IF9fYnVpbHRpbl91c3VibF9vdmVyZmxvdyAoeCwgeSwgJnIpOworICBp ZiAob3ZyKQorICAgIG92ZXJmbG93X2hhbmRsZXIgKCk7CisKKyAgcmV0dXJu IHI7Cit9CisKKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlciAic3Vi cyIgfSB9ICovCmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy50YXJn ZXQvYWFyY2g2NC9idWlsdGluX3VzdWJsbC5jIGIvZ2NjL3Rlc3RzdWl0ZS9n Y2MudGFyZ2V0L2FhcmNoNjQvYnVpbHRpbl91c3VibGwuYwpuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNzQyZjBjCi0tLSAvZGV2L251 bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2FhcmNoNjQvYnVp bHRpbl91c3VibGwuYwpAQCAtMCwwICsxLDE4IEBACisvKiB7IGRnLWRvIGNv bXBpbGUgfSAqLworLyogeyBkZy1vcHRpb25zICItTzIiIH0gICovCisKK2V4 dGVybiB2b2lkIG92ZXJmbG93X2hhbmRsZXIgKCk7CisKK3Vuc2lnbmVkIGxv bmcgbG9uZyBvdmVyZmxvd19zdWIgKHVuc2lnbmVkIGxvbmcgbG9uZyB4LCB1 bnNpZ25lZCBsb25nIGxvbmcgeSkKK3sKKyAgdW5zaWduZWQgbG9uZyBsb25n IHI7CisKKyAgaW50IG92ciA9IF9fYnVpbHRpbl91c3VibGxfb3ZlcmZsb3cg KHgsIHksICZyKTsKKyAgaWYgKG92cikKKyAgICBvdmVyZmxvd19oYW5kbGVy ICgpOworCisgIHJldHVybiByOworfQorCisvKiB7IGRnLWZpbmFsIHsgc2Nh bi1hc3NlbWJsZXIgInN1YnMiIH0gfSAqLworCi0tIAoxLjkuMQoK --_002_HE1PR0802MB237772D3163E8EFE89EFD8DD95E50HE1PR0802MB2377_--