From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 1886 invoked by alias); 26 Jun 2017 12:49:41 -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 129976 invoked by uid 89); 26 Jun 2017 12:49:37 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-26.9 required=5.0 tests=BAYES_00,GIT_PATCH_0,GIT_PATCH_1,GIT_PATCH_2,GIT_PATCH_3,RP_MATCHES_RCVD,SPF_HELO_PASS,SPF_PASS autolearn=ham version=3.3.2 spammy= X-HELO: mailout4.w1.samsung.com Received: from mailout4.w1.samsung.com (HELO mailout4.w1.samsung.com) (210.118.77.14) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Mon, 26 Jun 2017 12:49:31 +0000 Received: from eucas1p1.samsung.com (unknown [182.198.249.206]) by mailout4.w1.samsung.com (Oracle Communications Messaging Server 7.0.5.31.0 64bit (built May 5 2014)) with ESMTP id <0OS5002WENMEWL40@mailout4.w1.samsung.com> for gcc-patches@gcc.gnu.org; Mon, 26 Jun 2017 13:49:26 +0100 (BST) Received: from eusmges2.samsung.com (unknown [203.254.199.241]) by eucas1p2.samsung.com (KnoxPortal) with ESMTP id 20170626124926eucas1p26869c9913141c6a6160d7e34dd1dd434~LrN0L8nxD0061600616eucas1p2o; Mon, 26 Jun 2017 12:49:26 +0000 (GMT) Received: from eucas1p2.samsung.com ( [182.198.249.207]) by eusmges2.samsung.com (EUCPMTA) with SMTP id 90.E6.04459.6D201595; Mon, 26 Jun 2017 13:49:26 +0100 (BST) Received: from eusmgms2.samsung.com (unknown [182.198.249.180]) by eucas1p1.samsung.com (KnoxPortal) with ESMTP id 20170626124925eucas1p18c56742a07db5bb2dabbedd0e894aa0e~LrNzXDHIG1394013940eucas1p1v; Mon, 26 Jun 2017 12:49:25 +0000 (GMT) Received: from eusync4.samsung.com ( [203.254.199.214]) by eusmgms2.samsung.com (EUCPMTA) with SMTP id 09.20.20206.5D201595; Mon, 26 Jun 2017 13:49:25 +0100 (BST) Received: from [106.109.129.18] by eusync4.samsung.com (Oracle Communications Messaging Server 7.0.5.31.0 64bit (built May 5 2014)) with ESMTPA id <0OS500D2RNMC4190@eusync4.samsung.com>; Mon, 26 Jun 2017 13:49:25 +0100 (BST) From: Maxim Ostapenko Subject: =?UTF-8?Q?[PATCH_v2][ASAN]_Implement_dynamic_allocas/VLAs_sanitizat?= =?UTF-8?B?aW9uLuKAiw==?= To: GCC Patches Cc: Jakub Jelinek , Richard Biener , Yuri Gribov Message-id: <595102D3.3070603@samsung.com> Date: Mon, 26 Jun 2017 12:49:00 -0000 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.5.1 MIME-version: 1.0 Content-type: multipart/mixed; boundary=------------040607080305020701070605 X-MTR: 20000000000000000@CPGS X-CMS-MailID: 20170626124925eucas1p18c56742a07db5bb2dabbedd0e894aa0e X-Msg-Generator: CA X-Sender-IP: 182.198.249.180 X-Local-Sender: =?UTF-8?B?TWFrc2ltIE9zdGFwZW5rbxtTUlItU1cgVG9vbHMgTGFiGw==?= =?UTF-8?B?7IK87ISx7KCE7J6QG0VuZ2luZWVy?= X-Global-Sender: =?UTF-8?B?TWF4aW0gT3N0YXBlbmtvG1NSUi1TVyBUb29scyBMYWIbU2Ft?= =?UTF-8?B?c3VuZ8KgRWxlY3Ryb25pY3MbRW5naW5lZXI=?= X-Sender-Code: =?UTF-8?B?QzEwG0NJU0hRG0MxMEdEMDFHRDAxMDE1Nw==?= CMS-TYPE: 201P X-HopCount: 7 X-CMS-RootMailID: 20170626124925eucas1p18c56742a07db5bb2dabbedd0e894aa0e X-RootMTR: 20170626124925eucas1p18c56742a07db5bb2dabbedd0e894aa0e References: X-IsSubscribed: yes X-SW-Source: 2017-06/txt/msg01923.txt.bz2 This is a multi-part message in MIME format. --------------040607080305020701070605 Content-Type: text/plain; charset="utf-8"; format="flowed" Content-Transfer-Encoding: 7bit Content-length: 1342 Hi, I'm sorry for a long delay. Here an updated patch. Following Jakub's suggestion from previous review, I've added a get_nonzero_bits stuff into handle_builtin_alloca in order to avoid redundant redzone size calculations in case we know that alloca has alignment >= ASAN_RED_ZONE_SIZE. Thus, for the following code: struct __attribute__((aligned (N))) S { char s[N]; }; void bar (struct S *, struct S *); void foo (int x) { struct S a; { struct S b[x]; bar (&a, &b[0]); } { struct S b[x + 4]; bar (&a, &b[0]); } } void baz (int x) { struct S a; struct S b[x]; bar (&a, &b[0]); } compiled with -O2 -fsanitize=address -DN=64, we have expected _2 = (sizetype) x_1(D); _8 = _2 * 64; _14 = _8 + 96; _15 = __builtin_alloca_with_align (_14, 512); _16 = _15 + 64; __builtin___asan_alloca_poison (_16, _8); instead of previous _1 = (sizetype) x_4(D); _2 = _1 * 64; _24 = _2 & 31; _19 = _2 + 128; _27 = _19 - _24; _28 = __builtin_alloca_with_align (_27, 512); _29 = _28 + 64; __builtin___asan_alloca_poison (_29, _2); Also, I've added a simple pattern for X & C -> 0 if we know that corresponding bits are zero, but I'm not sure this pattern has a practical value. Tested and bootstrapped on x86_64-unknown-linux-gnu. Could you take a look? -Maxim --------------040607080305020701070605 Content-Type: text/x-diff; name="alloca-gcc-10.diff" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="alloca-gcc-10.diff" Content-length: 34075 Z2NjL0NoYW5nZUxvZzoNCg0KMjAxNy0wNi0yNiAgTWF4aW0gT3N0YXBlbmtv ICA8bS5vc3RhcGVua29Ac2Ftc3VuZy5jb20+DQoNCgkqIGFzYW4uYzogSW5j bHVkZSBnaW1wbGUtZm9sZC5oLg0KCShnZXRfbGFzdF9hbGxvY2FfYWRkcik6 IE5ldyBmdW5jdGlvbi4NCgkoaGFuZGxlX2J1aWx0aW5fc3RhY2tyZXN0b3Jl KTogTGlrZXdpc2UuDQoJKGhhbmRsZV9idWlsdGluX2FsbG9jYSk6IExpa2V3 aXNlLg0KCShhc2FuX2VtaXRfYWxsb2Nhc191bnBvaXNvbik6IExpa2V3aXNl Lg0KCShnZXRfbWVtX3JlZnNfb2ZfYnVpbHRpbl9jYWxsKTogQWRkIG5ldyBw YXJhbWV0ZXIsIHJlbW92ZSBjb25zdA0KCXF1YWxsaWZpZXIgZnJvbSBmaXJz dCBwYXJhbWVyZXIuIEhhbmRsZSBCVUlMVF9JTl9BTExPQ0EsDQoJQlVJTFRf SU5fQUxMT0NBX1dJVEhfQUxJR04gYW5kIEJVSUxUX0lOX1NUQUNLX1JFU1RP UkUgYnVpbHRpbnMuDQoJKGluc3RydW1lbnRfYnVpbHRpbl9jYWxsKTogUGFz cyBnaW1wbGUgaXRlcmF0b3IgdG8NCglnZXRfbWVtX3JlZnNfb2ZfYnVpbHRp bl9jYWxsLg0KCShsYXN0X2FsbG9jYV9hZGRyKTogTmV3IGdsb2JhbC4NCgkq IGFzYW4uaCAoYXNhbl9lbWl0X2FsbG9jYXNfdW5wb2lzb24pOiBEZWNsYXJl Lg0KCSogYnVpbHRpbnMuYyAoZXhwYW5kX2FzYW5fZW1pdF9hbGxvY2FzX3Vu cG9pc29uKTogTmV3IGZ1bmN0aW9uLg0KCShleHBhbmRfYnVpbHRpbik6IEhh bmRsZSBCVUlMVF9JTl9BU0FOX0FMTE9DQVNfVU5QT0lTT04uDQoJKiBjZmdl eHBhbmQuYyAoZXhwYW5kX3VzZWRfdmFycyk6IENhbGwgYXNhbl9lbWl0X2Fs bG9jYXNfdW5wb2lzb24NCglpZiBmdW5jdGlvbiBjYWxscyBhbGxvY2EuDQoJ KiBnaW1wbGUtZm9sZC5jIChyZXBsYWNlX2NhbGxfd2l0aF92YWx1ZSk6IFJl bW92ZSBzdGF0aWMga2V5d29yZC4NCgkqIGdpbXBsZS1mb2xkLmggKHJlcGxh Y2VfY2FsbF93aXRoX3ZhbHVlKTogRGVjbGFyZS4NCgkqIGludGVybmFsLWZu LmM6IEluY2x1ZGUgYXNhbi5oLg0KCSogc2FuaXRpemVyLmRlZiAoQlVJTFRf SU5fQVNBTl9BTExPQ0FfUE9JU09OLA0KCUJVSUxUX0lOX0FTQU5fQUxMT0NB U19VTlBPSVNPTik6IE5ldyBidWlsdGlucy4NCgkqIG1hdGNoLnBkOiBBZGQg bmV3IHBhdHRlcm4uDQoNCmdjYy90ZXN0c3VpdGUvQ2hhbmdlTG9nOg0KDQoy MDE3LTA2LTI2ICBNYXhpbSBPc3RhcGVua28gIDxtLm9zdGFwZW5rb0BzYW1z dW5nLmNvbT4NCg0KCSogYy1jKystY29tbW9uL2FzYW4vYWxsb2NhX2JpZ19h bGlnbm1lbnQuYzogTmV3IHRlc3QuDQoJKiBjLWMrKy1jb21tb24vYXNhbi9h bGxvY2FfZGV0ZWN0X2N1c3RvbV9zaXplLmM6IExpa2V3aXNlLg0KCSogYy1j KystY29tbW9uL2FzYW4vYWxsb2NhX2luc3RydW1lbnRzX2FsbF9wYWRkaW5n cy5jOiBMaWtld2lzZS4NCgkqIGMtYysrLWNvbW1vbi9hc2FuL2FsbG9jYV9s b29wX3VucG9pc29uaW5nLmM6IExpa2V3aXNlLg0KCSogYy1jKystY29tbW9u L2FzYW4vYWxsb2NhX292ZXJmbG93X3BhcnRpYWwuYzogTGlrZXdpc2UuDQoJ KiBjLWMrKy1jb21tb24vYXNhbi9hbGxvY2Ffb3ZlcmZsb3dfcmlnaHQuYzog TGlrZXdpc2UuDQoJKiBjLWMrKy1jb21tb24vYXNhbi9hbGxvY2Ffc2FmZV9h Y2Nlc3MuYzogTGlrZXdpc2UuDQoJKiBjLWMrKy1jb21tb24vYXNhbi9hbGxv Y2FfdW5kZXJmbG93X2xlZnQuYzogTGlrZXdpc2UuDQoNCmRpZmYgLS1naXQg YS9nY2MvYXNhbi5jIGIvZ2NjL2FzYW4uYw0KaW5kZXggZTczMDUzMC4uNmQ3 YTVlYyAxMDA2NDQNCi0tLSBhL2djYy9hc2FuLmMNCisrKyBiL2djYy9hc2Fu LmMNCkBAIC01NSw2ICs1NSw3IEBAIGFsb25nIHdpdGggR0NDOyBzZWUgdGhl IGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlDQogI2luY2x1ZGUgImxhbmdo b29rcy5oIg0KICNpbmNsdWRlICJjZmdsb29wLmgiDQogI2luY2x1ZGUgImdp bXBsZS1idWlsZGVyLmgiDQorI2luY2x1ZGUgImdpbXBsZS1mb2xkLmgiDQog I2luY2x1ZGUgInVic2FuLmgiDQogI2luY2x1ZGUgInBhcmFtcy5oIg0KICNp bmNsdWRlICJidWlsdGlucy5oIg0KQEAgLTI0NSw2ICsyNDYsNyBAQCBhbG9u ZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNl ZQ0KIHN0YXRpYyB1bnNpZ25lZCBIT1NUX1dJREVfSU5UIGFzYW5fc2hhZG93 X29mZnNldF92YWx1ZTsNCiBzdGF0aWMgYm9vbCBhc2FuX3NoYWRvd19vZmZz ZXRfY29tcHV0ZWQ7DQogc3RhdGljIHZlYzxjaGFyICo+IHNhbml0aXplZF9z ZWN0aW9uczsNCitzdGF0aWMgdHJlZSBsYXN0X2FsbG9jYV9hZGRyID0gTlVM TF9UUkVFOw0KIA0KIC8qIFNldCBvZiB2YXJpYWJsZSBkZWNsYXJhdGlvbnMg dGhhdCBhcmUgZ29pbmcgdG8gYmUgZ3VhcmRlZCBieQ0KICAgIHVzZS1hZnRl ci1zY29wZSBzYW5pdGl6ZXIuICAqLw0KQEAgLTUyOSwxMSArNTMxLDE4MyBA QCBnZXRfbWVtX3JlZl9vZl9hc3NpZ25tZW50IChjb25zdCBnYXNzaWduICph c3NpZ25tZW50LA0KICAgcmV0dXJuIHRydWU7DQogfQ0KIA0KKy8qIFJldHVy biBhZGRyZXNzIG9mIGxhc3QgYWxsb2NhdGVkIGR5bmFtaWMgYWxsb2NhLiAg Ki8NCisNCitzdGF0aWMgdHJlZQ0KK2dldF9sYXN0X2FsbG9jYV9hZGRyICgp DQorew0KKyAgaWYgKGxhc3RfYWxsb2NhX2FkZHIpDQorICAgIHJldHVybiBs YXN0X2FsbG9jYV9hZGRyOw0KKw0KKyAgZ2ltcGxlX3NlcSBzZXEgPSBOVUxM Ow0KKyAgZ2Fzc2lnbiAqZzsNCisNCisgIGxhc3RfYWxsb2NhX2FkZHIgPSBj cmVhdGVfdG1wX3JlZyAocHRyX3R5cGVfbm9kZSwgImxhc3RfYWxsb2NhX2Fk ZHIiKTsNCisgIGcgPSBnaW1wbGVfYnVpbGRfYXNzaWduIChsYXN0X2FsbG9j YV9hZGRyLCBOT1BfRVhQUiwNCisJCQkgICBidWlsZF9pbnRfY3N0IChwdHJf dHlwZV9ub2RlLCAwKSk7DQorICBnaW1wbGVfc2VxX2FkZF9zdG10X3dpdGhv dXRfdXBkYXRlICgmc2VxLCBnKTsNCisNCisgIGVkZ2UgZSA9IHNpbmdsZV9z dWNjX2VkZ2UgKEVOVFJZX0JMT0NLX1BUUl9GT1JfRk4gKGNmdW4pKTsNCisg IGdzaV9pbnNlcnRfc2VxX29uX2VkZ2VfaW1tZWRpYXRlIChlLCBzZXEpOw0K KyAgcmV0dXJuIGxhc3RfYWxsb2NhX2FkZHI7DQorfQ0KKw0KKy8qIEluc2Vy dCBfX2FzYW5fYWxsb2Nhc191bnBvaXNvbiAodG9wLCBib3R0b20pIGNhbGwg YWZ0ZXINCisgICBfX2J1aWx0aW5fc3RhY2tfcmVzdG9yZSAobmV3X3NwKSBj YWxsLg0KKyAgIFRoZSBwc2V1ZG9jb2RlIG9mIHRoaXMgcm91dGluZSBzaG91 bGQgbG9vayBsaWtlIHRoaXM6DQorICAgICBfX2J1aWx0aW5fc3RhY2tfcmVz dG9yZSAobmV3X3NwKTsNCisgICAgIHRvcCA9IGxhc3RfYWxsb2NhX2FkZHI7 DQorICAgICBib3QgPSB2aXJ0dWFsX2R5bmFtaWNfc3RhY2tfcnR4Ow0KKyAg ICAgX19hc2FuX2FsbG9jYXNfdW5wb2lzb24gKHRvcCwgYm90dG9tKTsNCisg ICAgIGxhc3RfYWxsb2NhX2FkZHIgPSBuZXdfc3A7DQorICAgV2UgZG9uJ3Qg dXNlIG5ld19zcCBhcyBib3QgcGFyYW1ldGVyIGJlY2F1c2Ugb24gc29tZSBh cmNoaXRlY3R1cmVzDQorICAgU1AgaGFzIG5vbiB6ZXJvIG9mZnNldCBmcm9t IGR5bmFtaWMgc3RhY2sgYXJlYS4gIE1vcmVvdmVyLCBvbiBzb21lDQorICAg YXJjaGl0ZWN0dXJlcyB0aGlzIG9mZnNldCAoU1RBQ0tfRFlOQU1JQ19PRkZT RVQpIGJlY29tZXMga25vd24gZm9yIGVhY2gNCisgICBwYXJ0aWN1bGFyIGZ1 bmN0aW9uIG9ubHkgYWZ0ZXIgYWxsIGNhbGxlZXMgd2VyZSBleHBhbmRlZCB0 byBydGwuDQorICAgVGhlIG1vc3Qgbm90aWNhYmxlIGV4YW1wbGUgaXMgUG93 ZXJQQ3ssNjR9LCBzZWUNCisgICBodHRwOi8vcmVmc3BlY3MubGludXhmb3Vu ZGF0aW9uLm9yZy9FTEYvcHBjNjQvUFBDLWVsZjY0YWJpLmh0bWwjRFlOQU0t U1RBQ0suDQorKi8NCisNCitzdGF0aWMgdm9pZA0KK2hhbmRsZV9idWlsdGlu X3N0YWNrX3Jlc3RvcmUgKGdjYWxsICpjYWxsLCBnaW1wbGVfc3RtdF9pdGVy YXRvciAqaXRlcikNCit7DQorICBpZiAoIWl0ZXIpDQorICAgIHJldHVybjsN CisNCisgIGdpbXBsZV9zdG10X2l0ZXJhdG9yIGdzaSA9ICppdGVyOw0KKyAg Z2ltcGxlX3NlcSBzZXEgPSBOVUxMOw0KKyAgdHJlZSBsYXN0X2FsbG9jYV9h ZGRyID0gZ2V0X2xhc3RfYWxsb2NhX2FkZHIgKCk7DQorICB0cmVlIHJlc3Rv cmVkX3N0YWNrID0gZ2ltcGxlX2NhbGxfYXJnIChjYWxsLCAwKTsNCisgIHRy ZWUgZm4gPSBidWlsdGluX2RlY2xfaW1wbGljaXQgKEJVSUxUX0lOX0FTQU5f QUxMT0NBU19VTlBPSVNPTik7DQorICBnaW1wbGUgKmcgPSBnaW1wbGVfYnVp bGRfY2FsbCAoZm4sIDIsIGxhc3RfYWxsb2NhX2FkZHIsIHJlc3RvcmVkX3N0 YWNrKTsNCisgIGdpbXBsZV9zZXFfYWRkX3N0bXRfd2l0aG91dF91cGRhdGUg KCZzZXEsIGcpOw0KKyAgZyA9IGdpbXBsZV9idWlsZF9hc3NpZ24gKGxhc3Rf YWxsb2NhX2FkZHIsIE5PUF9FWFBSLCByZXN0b3JlZF9zdGFjayk7DQorICBn aW1wbGVfc2VxX2FkZF9zdG10X3dpdGhvdXRfdXBkYXRlICgmc2VxLCBnKTsN CisgIGdzaV9pbnNlcnRfc2VxX2FmdGVyICgmZ3NpLCBzZXEsIEdTSV9TQU1F X1NUTVQpOw0KK30NCisNCisvKiBEZXBsb3kgYW5kIHBvaXNvbiByZWR6b25l cyBhcm91bmQgX19idWlsdGluX2FsbG9jYSBjYWxsLiAgVG8gZG8gdGhpcywg d2UNCisgICBzaG91bGQgcmVwbGFjZSB0aGlzIGNhbGwgd2l0aCBhbm90aGVy IG9uZSB3aXRoIGNoYW5nZWQgcGFyYW1ldGVycyBhbmQNCisgICByZXBsYWNl IGFsbCBpdHMgdXNlcyB3aXRoIG5ldyBhZGRyZXNzLCBzbw0KKyAgICAgYWRk ciA9IF9fYnVpbHRpbl9hbGxvY2EgKG9sZF9zaXplLCBhbGlnbik7DQorICAg aXMgcmVwbGFjZWQgYnkNCisgICAgIG5ld19zaXplID0gb2xkX3NpemUgKyBh ZGRpdGlvbmFsX3NpemU7DQorICAgICB0bXAgPSBfX2J1aWx0aW5fYWxsb2Nh IChuZXdfc2l6ZSwgbWF4IChhbGlnbiwgMzIpKQ0KKyAgICAgYWRkciA9IHRt cCArIDMyIChmaXJzdCAzMiBieXRlcyBhcmUgZm9yIHRoZSBsZWZ0IHJlZHpv bmUpOw0KKyAgIEFERElUSU9OQUxfU0laRSBpcyBhZGRlZCB0byBtYWtlIG5l dyBtZW1vcnkgYWxsb2NhdGlvbiBjb250YWluIG5vdCBvbmx5DQorICAgcmVx dWVzdGVkIG1lbW9yeSwgYnV0IGFsc28gbGVmdCwgcGFydGlhbCBhbmQgcmln aHQgcmVkem9uZXMgYXMgd2VsbCBhcyBzb21lDQorICAgYWRkaXRpb25hbCBz cGFjZSwgcmVxdWlyZWQgYnkgYWxpZ25tZW50LiAgKi8NCisNCitzdGF0aWMg dm9pZA0KK2hhbmRsZV9idWlsdGluX2FsbG9jYSAoZ2NhbGwgKmNhbGwsIGdp bXBsZV9zdG10X2l0ZXJhdG9yICppdGVyKQ0KK3sNCisgIGlmICghaXRlcikN CisgICAgcmV0dXJuOw0KKw0KKyAgZ2ltcGxlX3NlcSBzZXEgPSBOVUxMOw0K KyAgZ2Fzc2lnbiAqZzsNCisgIGdjYWxsICpnZzsNCisgIGdpbXBsZV9zdG10 X2l0ZXJhdG9yIGdzaSA9ICppdGVyOw0KKyAgY29uc3QgSE9TVF9XSURFX0lO VCByZWR6b25lX21hc2sgPSBBU0FOX1JFRF9aT05FX1NJWkUgLSAxOw0KKw0K KyAgdHJlZSBsYXN0X2FsbG9jYV9hZGRyID0gZ2V0X2xhc3RfYWxsb2NhX2Fk ZHIgKCk7DQorICB0cmVlIGNhbGxlZSA9IGdpbXBsZV9jYWxsX2ZuZGVjbCAo Y2FsbCk7DQorICB0cmVlIG9sZF9zaXplID0gZ2ltcGxlX2NhbGxfYXJnIChj YWxsLCAwKTsNCisgIHRyZWUgcHRyX3R5cGUgPSBnaW1wbGVfY2FsbF9saHMg KGNhbGwpID8gVFJFRV9UWVBFIChnaW1wbGVfY2FsbF9saHMgKGNhbGwpKQ0K KwkJCQkJIDogcHRyX3R5cGVfbm9kZTsNCisgIHRyZWUgcGFydGlhbF9zaXpl ID0gTlVMTF9UUkVFOw0KKyAgYm9vbCBhbGxvY2Ffd2l0aF9hbGlnbg0KKyAg ICA9IERFQ0xfRlVOQ1RJT05fQ09ERSAoY2FsbGVlKSA9PSBCVUlMVF9JTl9B TExPQ0FfV0lUSF9BTElHTjsNCisgIHVuc2lnbmVkIGludCBhbGlnbg0KKyAg ICA9IGFsbG9jYV93aXRoX2FsaWduID8gdHJlZV90b191aHdpIChnaW1wbGVf Y2FsbF9hcmcgKGNhbGwsIDEpKSA6IDA7DQorDQorICAvKiBJZiBBTElHTiA+ IEFTQU5fUkVEX1pPTkVfU0laRSwgd2UgZW1iZWQgbGVmdCByZWR6b25lIGlu dG8gZmlyc3QgQUxJR04NCisgICAgIGJ5dGVzIG9mIGFsbG9jYXRlZCBzcGFj ZS4gIE90aGVyd2lzZSwgYWxpZ24gYWxsb2NhIHRvIEFTQU5fUkVEX1pPTkVf U0laRQ0KKyAgICAgbWFudWFsbHkuICAqLw0KKyAgYWxpZ24gPSBNQVggKGFs aWduLCBBU0FOX1JFRF9aT05FX1NJWkUgKiBCSVRTX1BFUl9VTklUKTsNCisN CisgIHRyZWUgYWxsb2NhX3J6X21hc2sgPSBidWlsZF9pbnRfY3N0IChzaXpl X3R5cGVfbm9kZSwgcmVkem9uZV9tYXNrKTsNCisgIHRyZWUgcmVkem9uZV9z aXplID0gYnVpbGRfaW50X2NzdCAoc2l6ZV90eXBlX25vZGUsIEFTQU5fUkVE X1pPTkVfU0laRSk7DQorDQorICAvKiBFeHRyYWN0IGxvd2VyIGJpdHMgZnJv bSBvbGRfc2l6ZS4gICovDQorICB3aWRlX2ludCBzaXplX25vbnplcm9fYml0 cyA9IGdldF9ub256ZXJvX2JpdHMgKG9sZF9zaXplKTsNCisgIHdpZGVfaW50 IHJ6X21hc2sNCisgICAgPSB3aTo6dWh3aSAocmVkem9uZV9tYXNrLCB3aTo6 Z2V0X3ByZWNpc2lvbiAoc2l6ZV9ub256ZXJvX2JpdHMpKTsNCisgIHdpZGVf aW50IG9sZF9zaXplX2xvd2VyX2JpdHMgPSB3aTo6Yml0X2FuZCAoc2l6ZV9u b256ZXJvX2JpdHMsIHJ6X21hc2spOw0KKw0KKyAgLyogSWYgYWxsb2NhIHNp emUgaXMgYWxpZ25lZCB0byBBU0FOX1JFRF9aT05FX1NJWkUsIHdlIGRvbid0 IG5lZWQgcGFydGlhbA0KKyAgICAgcmVkem9uZS4gIE90aGVyd2lzZSwgY29t cHV0ZSBpdHMgc2l6ZSBoZXJlLiAgKi8NCisgIGlmICh3aTo6bmVfcCAob2xk X3NpemVfbG93ZXJfYml0cywgMCkpDQorICAgIHsNCisgICAgICAvKiBtaXNh bGlnbiA9IHNpemUgJiAoQVNBTl9SRURfWk9ORV9TSVpFIC0gMSkNCisgICAg ICAgICBwYXJ0aWFsX3NpemUgPSBBU0FOX1JFRF9aT05FX1NJWkUgLSBtaXNh bGlnbi4gICovDQorICAgICAgZyA9IGdpbXBsZV9idWlsZF9hc3NpZ24gKG1h a2Vfc3NhX25hbWUgKHNpemVfdHlwZV9ub2RlLCBOVUxMKSwNCisJCQkgICAg ICAgQklUX0FORF9FWFBSLCBvbGRfc2l6ZSwgYWxsb2NhX3J6X21hc2spOw0K KyAgICAgIGdpbXBsZV9zZXFfYWRkX3N0bXRfd2l0aG91dF91cGRhdGUgKCZz ZXEsIGcpOw0KKyAgICAgIHRyZWUgbWlzYWxpZ24gPSBnaW1wbGVfYXNzaWdu X2xocyAoZyk7DQorICAgICAgZyA9IGdpbXBsZV9idWlsZF9hc3NpZ24gKG1h a2Vfc3NhX25hbWUgKHNpemVfdHlwZV9ub2RlLCBOVUxMKSwgTUlOVVNfRVhQ UiwNCisJCQkgICAgICAgcmVkem9uZV9zaXplLCBtaXNhbGlnbik7DQorICAg ICAgZ2ltcGxlX3NlcV9hZGRfc3RtdF93aXRob3V0X3VwZGF0ZSAoJnNlcSwg Zyk7DQorICAgICAgcGFydGlhbF9zaXplID0gZ2ltcGxlX2Fzc2lnbl9saHMg KGcpOw0KKyAgICB9DQorDQorICAvKiBhZGRpdGlvbmFsX3NpemUgPSBhbGln biArIEFTQU5fUkVEX1pPTkVfU0laRS4gICovDQorICB0cmVlIGFkZGl0aW9u YWxfc2l6ZSA9IGJ1aWxkX2ludF9jc3QgKHNpemVfdHlwZV9ub2RlLCBhbGln biAvIEJJVFNfUEVSX1VOSVQNCisJCQkJCQkJKyBBU0FOX1JFRF9aT05FX1NJ WkUpOw0KKyAgLyogSWYgYWxsb2NhIGhhcyBwYXJ0aWFsIHJlZHpvbmUsIGlu Y2x1ZGUgaXQgdG8gYWRkaXRpb25hbF9zaXplIHRvby4gICovDQorICBpZiAo cGFydGlhbF9zaXplKQ0KKyAgICB7DQorICAgICAgLyogYWRkaXRpb25hbF9z aXplICs9IHBhcnRpYWxfc2l6ZS4gICovDQorICAgICAgZyA9IGdpbXBsZV9i dWlsZF9hc3NpZ24gKG1ha2Vfc3NhX25hbWUgKHNpemVfdHlwZV9ub2RlKSwg UExVU19FWFBSLA0KKwkJCSAgICAgICBwYXJ0aWFsX3NpemUsIGFkZGl0aW9u YWxfc2l6ZSk7DQorICAgICAgZ2ltcGxlX3NlcV9hZGRfc3RtdF93aXRob3V0 X3VwZGF0ZSAoJnNlcSwgZyk7DQorICAgICAgYWRkaXRpb25hbF9zaXplID0g Z2ltcGxlX2Fzc2lnbl9saHMgKGcpOw0KKyAgICB9DQorDQorICAvKiBuZXdf c2l6ZSA9IG9sZF9zaXplICsgYWRkaXRpb25hbF9zaXplLiAgKi8NCisgIGcg PSBnaW1wbGVfYnVpbGRfYXNzaWduIChtYWtlX3NzYV9uYW1lIChzaXplX3R5 cGVfbm9kZSksIFBMVVNfRVhQUiwgb2xkX3NpemUsDQorCQkJICAgYWRkaXRp b25hbF9zaXplKTsNCisgIGdpbXBsZV9zZXFfYWRkX3N0bXRfd2l0aG91dF91 cGRhdGUgKCZzZXEsIGcpOw0KKyAgdHJlZSBuZXdfc2l6ZSA9IGdpbXBsZV9h c3NpZ25fbGhzIChnKTsNCisNCisgIC8qIEJ1aWxkIG5ldyBfX2J1aWx0aW5f YWxsb2NhIGNhbGw6DQorICAgICAgIG5ld19hbGxvY2Ffd2l0aF9yeiA9IF9f YnVpbHRpbl9hbGxvY2EgKG5ld19zaXplLCBhbGlnbikuICAqLw0KKyAgdHJl ZSBmbiA9IGJ1aWx0aW5fZGVjbF9pbXBsaWNpdCAoQlVJTFRfSU5fQUxMT0NB X1dJVEhfQUxJR04pOw0KKyAgZ2cgPSBnaW1wbGVfYnVpbGRfY2FsbCAoZm4s IDIsIG5ld19zaXplLA0KKwkJCSAgYnVpbGRfaW50X2NzdCAoc2l6ZV90eXBl X25vZGUsIGFsaWduKSk7DQorICB0cmVlIG5ld19hbGxvY2Ffd2l0aF9yeiA9 IG1ha2Vfc3NhX25hbWUgKHB0cl90eXBlLCBnZyk7DQorICBnaW1wbGVfY2Fs bF9zZXRfbGhzIChnZywgbmV3X2FsbG9jYV93aXRoX3J6KTsNCisgIGdpbXBs ZV9zZXFfYWRkX3N0bXRfd2l0aG91dF91cGRhdGUgKCZzZXEsIGdnKTsNCisN CisgIC8qIG5ld19hbGxvY2EgPSBuZXdfYWxsb2NhX3dpdGhfcnogKyBhbGln bi4gICovDQorICBnID0gZ2ltcGxlX2J1aWxkX2Fzc2lnbiAobWFrZV9zc2Ff bmFtZSAocHRyX3R5cGUpLCBQT0lOVEVSX1BMVVNfRVhQUiwNCisJCQkgICBu ZXdfYWxsb2NhX3dpdGhfcnosDQorCQkJICAgYnVpbGRfaW50X2NzdCAoc2l6 ZV90eXBlX25vZGUsDQorCQkJCQkgIGFsaWduIC8gQklUU19QRVJfVU5JVCkp Ow0KKyAgZ2ltcGxlX3NlcV9hZGRfc3RtdF93aXRob3V0X3VwZGF0ZSAoJnNl cSwgZyk7DQorICB0cmVlIG5ld19hbGxvY2EgPSBnaW1wbGVfYXNzaWduX2xo cyAoZyk7DQorDQorICAvKiBSZXBsYWNlIG9sZCBhbGxvY2EgcHRyIHdpdGgg TkVXX0FMTE9DQS4gICovDQorICByZXBsYWNlX2NhbGxfd2l0aF92YWx1ZSAo JmdzaSwgbmV3X2FsbG9jYSk7DQorDQorICAvKiBQb2lzb24gbmV3bHkgY3Jl YXRlZCBhbGxvY2EgcmVkem9uZXM6DQorICAgICAgX19hc2FuX2FsbG9jYV9w b2lzb24gKG5ld19hbGxvY2EsIG9sZF9zaXplKS4gICovDQorICBmbiA9IGJ1 aWx0aW5fZGVjbF9pbXBsaWNpdCAoQlVJTFRfSU5fQVNBTl9BTExPQ0FfUE9J U09OKTsNCisgIGdnID0gZ2ltcGxlX2J1aWxkX2NhbGwgKGZuLCAyLCBuZXdf YWxsb2NhLCBvbGRfc2l6ZSk7DQorICBnaW1wbGVfc2VxX2FkZF9zdG10X3dp dGhvdXRfdXBkYXRlICgmc2VxLCBnZyk7DQorDQorICAvKiBTYXZlIG5ld19h bGxvY2Ffd2l0aF9yeiB2YWx1ZSBpbnRvIGxhc3RfYWxsb2NhX2FkZHIgdG8g dXNlIGl0IGR1cmluZw0KKyAgICAgYWxsb2NhcyB1bnBvaXNvbmluZy4gICov DQorICBnID0gZ2ltcGxlX2J1aWxkX2Fzc2lnbiAobGFzdF9hbGxvY2FfYWRk ciwgTk9QX0VYUFIsIG5ld19hbGxvY2Ffd2l0aF9yeik7DQorICBnaW1wbGVf c2VxX2FkZF9zdG10X3dpdGhvdXRfdXBkYXRlICgmc2VxLCBnKTsNCisgIGdz aV9pbnNlcnRfc2VxX2JlZm9yZSAoJmdzaSwgc2VxLCBHU0lfU0FNRV9TVE1U KTsNCit9DQorDQogLyogUmV0dXJuIHRoZSBtZW1vcnkgcmVmZXJlbmNlcyBj b250YWluZWQgaW4gYSBnaW1wbGUgc3RhdGVtZW50DQogICAgcmVwcmVzZW50 aW5nIGEgYnVpbHRpbiBjYWxsIHRoYXQgaGFzIHRvIGRvIHdpdGggbWVtb3J5 IGFjY2Vzcy4gICovDQogDQogc3RhdGljIGJvb2wNCi1nZXRfbWVtX3JlZnNf b2ZfYnVpbHRpbl9jYWxsIChjb25zdCBnY2FsbCAqY2FsbCwNCitnZXRfbWVt X3JlZnNfb2ZfYnVpbHRpbl9jYWxsIChnY2FsbCAqY2FsbCwNCiAJCQkgICAg ICBhc2FuX21lbV9yZWYgKnNyYzAsDQogCQkJICAgICAgdHJlZSAqc3JjMF9s ZW4sDQogCQkJICAgICAgYm9vbCAqc3JjMF9pc19zdG9yZSwNCkBAIC01NDQs NyArNzE4LDggQEAgZ2V0X21lbV9yZWZzX29mX2J1aWx0aW5fY2FsbCAoY29u c3QgZ2NhbGwgKmNhbGwsDQogCQkJICAgICAgdHJlZSAqZHN0X2xlbiwNCiAJ CQkgICAgICBib29sICpkc3RfaXNfc3RvcmUsDQogCQkJICAgICAgYm9vbCAq ZGVzdF9pc19kZXJlZiwNCi0JCQkgICAgICBib29sICppbnRlcmNlcHRlZF9w KQ0KKwkJCSAgICAgIGJvb2wgKmludGVyY2VwdGVkX3AsDQorCQkJICAgICAg Z2ltcGxlX3N0bXRfaXRlcmF0b3IgKml0ZXIgPSBOVUxMKQ0KIHsNCiAgIGdj Y19jaGVja2luZ19hc3NlcnQgKGdpbXBsZV9jYWxsX2J1aWx0aW5fcCAoY2Fs bCwgQlVJTFRfSU5fTk9STUFMKSk7DQogDQpAQCAtNjAzLDYgKzc3OCwxNCBA QCBnZXRfbWVtX3JlZnNfb2ZfYnVpbHRpbl9jYWxsIChjb25zdCBnY2FsbCAq Y2FsbCwNCiAgICAgICBsZW4gPSBnaW1wbGVfY2FsbF9saHMgKGNhbGwpOw0K ICAgICAgIGJyZWFrOw0KIA0KKyAgICBjYXNlIEJVSUxUX0lOX1NUQUNLX1JF U1RPUkU6DQorICAgICAgaGFuZGxlX2J1aWx0aW5fc3RhY2tfcmVzdG9yZSAo Y2FsbCwgaXRlcik7DQorICAgICAgYnJlYWs7DQorDQorICAgIGNhc2UgQlVJ TFRfSU5fQUxMT0NBX1dJVEhfQUxJR046DQorICAgIGNhc2UgQlVJTFRfSU5f QUxMT0NBOg0KKyAgICAgIGhhbmRsZV9idWlsdGluX2FsbG9jYSAoY2FsbCwg aXRlcik7DQorICAgICAgYnJlYWs7DQogICAgIC8qIEFuZCBub3cgdGhlIF9f YXRvbWljKiBhbmQgX19zeW5jIGJ1aWx0aW5zLg0KICAgICAgICBUaGVzZSBh cmUgaGFuZGxlZCBkaWZmZXJlbnRseSBmcm9tIHRoZSBjbGFzc2ljYWwgbWVt b3J5IG1lbW9yeQ0KICAgICAgICBhY2Nlc3MgYnVpbHRpbnMgYWJvdmUuICAq Lw0KQEAgLTEzNjYsNiArMTU0OSwyOCBAQCBhc2FuX2VtaXRfc3RhY2tfcHJv dGVjdGlvbiAocnR4IGJhc2UsIHJ0eCBwYmFzZSwgdW5zaWduZWQgaW50IGFs aWduYiwNCiAgIHJldHVybiBpbnNuczsNCiB9DQogDQorLyogRW1pdCBfX2Fz YW5fYWxsb2Nhc191bnBvaXNvbiAodG9wLCBib3QpIGNhbGwuICBUaGUgQkFT RSBwYXJhbWV0ZXIgY29ycmVzcG9uZHMNCisgICB0byBCT1QgYXJndW1lbnQs IGZvciBUT1AgdmlydHVhbF9zdGFja19keW5hbWljX3J0eCBpcyB1c2VkLiAg TkVXX1NFUVVFTkNFDQorICAgaW5kaWNhdGVzIHdoZXRoZXIgd2UncmUgZW1p dHRpbmcgbmV3IGluc3RydWN0aW9ucyBzZXF1ZW5jZSBvciBub3QuICAqLw0K Kw0KK3J0eF9pbnNuICoNCithc2FuX2VtaXRfYWxsb2Nhc191bnBvaXNvbiAo cnR4IHRvcCwgcnR4IGJvdCwgcnR4X2luc24gKmJlZm9yZSkNCit7DQorICBp ZiAoYmVmb3JlKQ0KKyAgICBwdXNoX3RvX3NlcXVlbmNlIChiZWZvcmUpOw0K KyAgZWxzZQ0KKyAgICBzdGFydF9zZXF1ZW5jZSAoKTsNCisgIHJ0eCByZXQg PSBpbml0X29uZV9saWJmdW5jICgiX19hc2FuX2FsbG9jYXNfdW5wb2lzb24i KTsNCisgIHJldCA9IGVtaXRfbGlicmFyeV9jYWxsX3ZhbHVlIChyZXQsIE5V TExfUlRYLCBMQ1RfTk9STUFMLCBwdHJfbW9kZSwgMiwgdG9wLA0KKwkJCQkg VFlQRV9NT0RFIChwb2ludGVyX3NpemVkX2ludF9ub2RlKSwgYm90LA0KKwkJ CQkgVFlQRV9NT0RFIChwb2ludGVyX3NpemVkX2ludF9ub2RlKSk7DQorDQor ICBkb19wZW5kaW5nX3N0YWNrX2FkanVzdCAoKTsNCisgIHJ0eF9pbnNuICpp bnNucyA9IGdldF9pbnNucyAoKTsNCisgIGVuZF9zZXF1ZW5jZSAoKTsNCisg IHJldHVybiBpbnNuczsNCit9DQorDQogLyogUmV0dXJuIHRydWUgaWYgREVD TCwgYSBnbG9iYWwgdmFyLCBtaWdodCBiZSBvdmVycmlkZGVuIGFuZCBuZWVk cw0KICAgIHRoZXJlZm9yZSBhIGxvY2FsIGFsaWFzLiAgKi8NCiANCkBAIC0y MDAwLDcgKzIyMDUsNyBAQCBpbnN0cnVtZW50X2J1aWx0aW5fY2FsbCAoZ2lt cGxlX3N0bXRfaXRlcmF0b3IgKml0ZXIpDQogCQkJCSAgICAmc3JjMCwgJnNy YzBfbGVuLCAmc3JjMF9pc19zdG9yZSwNCiAJCQkJICAgICZzcmMxLCAmc3Jj MV9sZW4sICZzcmMxX2lzX3N0b3JlLA0KIAkJCQkgICAgJmRlc3QsICZkZXN0 X2xlbiwgJmRlc3RfaXNfc3RvcmUsDQotCQkJCSAgICAmZGVzdF9pc19kZXJl ZiwgJmludGVyY2VwdGVkX3ApKQ0KKwkJCQkgICAgJmRlc3RfaXNfZGVyZWYs ICZpbnRlcmNlcHRlZF9wLCBpdGVyKSkNCiAgICAgew0KICAgICAgIGlmIChk ZXN0X2lzX2RlcmVmKQ0KIAl7DQpAQCAtMzE4Niw2ICszMzkxLDcgQEAgYXNh bl9pbnN0cnVtZW50ICh2b2lkKQ0KICAgaWYgKHNoYWRvd19wdHJfdHlwZXNb MF0gPT0gTlVMTF9UUkVFKQ0KICAgICBhc2FuX2luaXRfc2hhZG93X3B0cl90 eXBlcyAoKTsNCiAgIHRyYW5zZm9ybV9zdGF0ZW1lbnRzICgpOw0KKyAgbGFz dF9hbGxvY2FfYWRkciA9IE5VTExfVFJFRTsNCiAgIHJldHVybiAwOw0KIH0N CiANCmRpZmYgLS1naXQgYS9nY2MvYXNhbi5oIGIvZ2NjL2FzYW4uaA0KaW5k ZXggOTViYjg5ZS4uNGU4MTIwZSAxMDA2NDQNCi0tLSBhL2djYy9hc2FuLmgN CisrKyBiL2djYy9hc2FuLmgNCkBAIC0yNSw2ICsyNSw3IEBAIGV4dGVybiB2 b2lkIGFzYW5fZnVuY3Rpb25fc3RhcnQgKHZvaWQpOw0KIGV4dGVybiB2b2lk IGFzYW5fZmluaXNoX2ZpbGUgKHZvaWQpOw0KIGV4dGVybiBydHhfaW5zbiAq YXNhbl9lbWl0X3N0YWNrX3Byb3RlY3Rpb24gKHJ0eCwgcnR4LCB1bnNpZ25l ZCBpbnQsDQogCQkJCQkgICAgIEhPU1RfV0lERV9JTlQgKiwgdHJlZSAqLCBp bnQpOw0KK2V4dGVybiBydHhfaW5zbiAqYXNhbl9lbWl0X2FsbG9jYXNfdW5w b2lzb24gKHJ0eCwgcnR4LCBydHhfaW5zbiAqKTsNCiBleHRlcm4gYm9vbCBh c2FuX3Byb3RlY3RfZ2xvYmFsICh0cmVlKTsNCiBleHRlcm4gdm9pZCBpbml0 aWFsaXplX3Nhbml0aXplcl9idWlsdGlucyAodm9pZCk7DQogZXh0ZXJuIHRy ZWUgYXNhbl9keW5hbWljX2luaXRfY2FsbCAoYm9vbCk7DQpkaWZmIC0tZ2l0 IGEvZ2NjL2J1aWx0aW5zLmMgYi9nY2MvYnVpbHRpbnMuYw0KaW5kZXggN2U4 MjllZi4uYTk3MDBhMSAxMDA2NDQNCi0tLSBhL2djYy9idWlsdGlucy5jDQor KysgYi9nY2MvYnVpbHRpbnMuYw0KQEAgLTQ5NjIsNiArNDk2MiwyMCBAQCBl eHBhbmRfYnVpbHRpbl9hbGxvY2EgKHRyZWUgZXhwKQ0KICAgcmV0dXJuIHJl c3VsdDsNCiB9DQogDQorc3RhdGljIHJ0eA0KK2V4cGFuZF9hc2FuX2VtaXRf YWxsb2Nhc191bnBvaXNvbiAodHJlZSBleHApDQorew0KKyAgdHJlZSBhcmcw ID0gQ0FMTF9FWFBSX0FSRyAoZXhwLCAwKTsNCisgIHJ0eCB0b3AgPSBleHBh bmRfZXhwciAoYXJnMCwgTlVMTF9SVFgsIEdFVF9NT0RFICh2aXJ0dWFsX3N0 YWNrX2R5bmFtaWNfcnR4KSwNCisJCQkgRVhQQU5EX05PUk1BTCk7DQorICBy dHggcmV0ID0gaW5pdF9vbmVfbGliZnVuYyAoIl9fYXNhbl9hbGxvY2FzX3Vu cG9pc29uIik7DQorICByZXQgPSBlbWl0X2xpYnJhcnlfY2FsbF92YWx1ZSAo cmV0LCBOVUxMX1JUWCwgTENUX05PUk1BTCwgcHRyX21vZGUsIDIsIHRvcCwN CisJCQkJIFRZUEVfTU9ERSAocG9pbnRlcl9zaXplZF9pbnRfbm9kZSksDQor CQkJCSB2aXJ0dWFsX3N0YWNrX2R5bmFtaWNfcnR4LA0KKwkJCQkgVFlQRV9N T0RFIChwb2ludGVyX3NpemVkX2ludF9ub2RlKSk7DQorICByZXR1cm4gcmV0 Ow0KK30NCisNCiAvKiBFeHBhbmQgYSBjYWxsIHRvIGJzd2FwIGJ1aWx0aW4g aW4gRVhQLg0KICAgIFJldHVybiBOVUxMX1JUWCBpZiBhIG5vcm1hbCBjYWxs IHNob3VsZCBiZSBlbWl0dGVkIHJhdGhlciB0aGFuIGV4cGFuZGluZyB0aGUN CiAgICBmdW5jdGlvbiBpbi1saW5lLiAgSWYgY29udmVuaWVudCwgdGhlIHJl c3VsdCBzaG91bGQgYmUgcGxhY2VkIGluIFRBUkdFVC4NCkBAIC02NzYzLDYg KzY3NzcsMTIgQEAgZXhwYW5kX2J1aWx0aW4gKHRyZWUgZXhwLCBydHggdGFy Z2V0LCBydHggc3VidGFyZ2V0LCBtYWNoaW5lX21vZGUgbW9kZSwNCiAJcmV0 dXJuIHRhcmdldDsNCiAgICAgICBicmVhazsNCiANCisgICAgY2FzZSBCVUlM VF9JTl9BU0FOX0FMTE9DQVNfVU5QT0lTT046DQorICAgICAgdGFyZ2V0ID0g ZXhwYW5kX2FzYW5fZW1pdF9hbGxvY2FzX3VucG9pc29uIChleHApOw0KKyAg ICAgIGlmICh0YXJnZXQpDQorCXJldHVybiB0YXJnZXQ7DQorICAgICAgYnJl YWs7DQorDQogICAgIGNhc2UgQlVJTFRfSU5fU1RBQ0tfU0FWRToNCiAgICAg ICByZXR1cm4gZXhwYW5kX3N0YWNrX3NhdmUgKCk7DQogDQpkaWZmIC0tZ2l0 IGEvZ2NjL2NmZ2V4cGFuZC5jIGIvZ2NjL2NmZ2V4cGFuZC5jDQppbmRleCBj MWY4MDcyLi5iNDQ1MGQ0IDEwMDY0NA0KLS0tIGEvZ2NjL2NmZ2V4cGFuZC5j DQorKysgYi9nY2MvY2ZnZXhwYW5kLmMNCkBAIC0yMjQxLDYgKzIyNDEsMTEg QEAgZXhwYW5kX3VzZWRfdmFycyAodm9pZCkNCiAgICAgICBleHBhbmRfc3Rh Y2tfdmFycyAoTlVMTCwgJmRhdGEpOw0KICAgICB9DQogDQorICBpZiAoKGZs YWdfc2FuaXRpemUgJiBTQU5JVElaRV9BRERSRVNTKSAmJiBjZnVuLT5jYWxs c19hbGxvY2EpDQorICAgIHZhcl9lbmRfc2VxID0gYXNhbl9lbWl0X2FsbG9j YXNfdW5wb2lzb24gKHZpcnR1YWxfc3RhY2tfZHluYW1pY19ydHgsDQorCQkJ CQkgICAgICB2aXJ0dWFsX3N0YWNrX3ZhcnNfcnR4LA0KKwkJCQkJICAgICAg dmFyX2VuZF9zZXEpOw0KKw0KICAgZmluaV92YXJzX2V4cGFuc2lvbiAoKTsN CiANCiAgIC8qIElmIHRoZXJlIHdlcmUgYW55IGFydGlmaWNpYWwgbm9uLWln bm9yZWQgdmFycyB3aXRob3V0IHJ0bA0KZGlmZiAtLWdpdCBhL2djYy9naW1w bGUtZm9sZC5jIGIvZ2NjL2dpbXBsZS1mb2xkLmMNCmluZGV4IGEwMGMyYzgu Ljc1NzcwMTMgMTAwNjQ0DQotLS0gYS9nY2MvZ2ltcGxlLWZvbGQuYw0KKysr IGIvZ2NjL2dpbXBsZS1mb2xkLmMNCkBAIC01NzEsNyArNTcxLDcgQEAgZ2lt cGxpZnlfYW5kX3VwZGF0ZV9jYWxsX2Zyb21fdHJlZSAoZ2ltcGxlX3N0bXRf aXRlcmF0b3IgKnNpX3AsIHRyZWUgZXhwcikNCiANCiAvKiBSZXBsYWNlIHRo ZSBjYWxsIGF0ICpHU0kgd2l0aCB0aGUgZ2ltcGxlIHZhbHVlIFZBTC4gICov DQogDQotc3RhdGljIHZvaWQNCit2b2lkDQogcmVwbGFjZV9jYWxsX3dpdGhf dmFsdWUgKGdpbXBsZV9zdG10X2l0ZXJhdG9yICpnc2ksIHRyZWUgdmFsKQ0K IHsNCiAgIGdpbXBsZSAqc3RtdCA9IGdzaV9zdG10ICgqZ3NpKTsNCmRpZmYg LS1naXQgYS9nY2MvZ2ltcGxlLWZvbGQuaCBiL2djYy9naW1wbGUtZm9sZC5o DQppbmRleCBhZDBiMDBkLi4yY2VlMzg1IDEwMDY0NA0KLS0tIGEvZ2NjL2dp bXBsZS1mb2xkLmgNCisrKyBiL2djYy9naW1wbGUtZm9sZC5oDQpAQCAtNTgs NiArNTgsNyBAQCBleHRlcm4gYm9vbCBnaW1wbGVfZm9sZF9idWlsdGluX3Nw cmludGYgKGdpbXBsZV9zdG10X2l0ZXJhdG9yICopOw0KIGV4dGVybiBib29s IGdpbXBsZV9mb2xkX2J1aWx0aW5fc25wcmludGYgKGdpbXBsZV9zdG10X2l0 ZXJhdG9yICopOw0KIGV4dGVybiBib29sIGFyaXRoX2NvZGVfd2l0aF91bmRl ZmluZWRfc2lnbmVkX292ZXJmbG93ICh0cmVlX2NvZGUpOw0KIGV4dGVybiBn aW1wbGVfc2VxIHJld3JpdGVfdG9fZGVmaW5lZF9vdmVyZmxvdyAoZ2ltcGxl ICopOw0KK2V4dGVybiB2b2lkIHJlcGxhY2VfY2FsbF93aXRoX3ZhbHVlIChn aW1wbGVfc3RtdF9pdGVyYXRvciAqLCB0cmVlKTsNCiANCiAvKiBnaW1wbGVf YnVpbGQsIGZ1bmN0aW9uYWxseSBtYXRjaGluZyBmb2xkX2J1aWxkTiwgb3V0 cHV0cyBzdG10cw0KICAgIGludCB0aGUgcHJvdmlkZWQgc2VxdWVuY2UsIG1h dGNoaW5nIGFuZCBzaW1wbGlmeWluZyB0aGVtIG9uLXRoZS1mbHkuDQpkaWZm IC0tZ2l0IGEvZ2NjL2ludGVybmFsLWZuLmMgYi9nY2MvaW50ZXJuYWwtZm4u Yw0KaW5kZXggNzVmZTAyNy4uZWFhZmY5MCAxMDA2NDQNCi0tLSBhL2djYy9p bnRlcm5hbC1mbi5jDQorKysgYi9nY2MvaW50ZXJuYWwtZm4uYw0KQEAgLTM5 LDYgKzM5LDcgQEAgYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZ SU5HMy4gIElmIG5vdCBzZWUNCiAjaW5jbHVkZSAic3Rvci1sYXlvdXQuaCIN CiAjaW5jbHVkZSAiZG9qdW1wLmgiDQogI2luY2x1ZGUgImV4cHIuaCINCisj aW5jbHVkZSAiYXNhbi5oIg0KICNpbmNsdWRlICJ1YnNhbi5oIg0KICNpbmNs dWRlICJyZWNvZy5oIg0KICNpbmNsdWRlICJidWlsdGlucy5oIg0KZGlmZiAt LWdpdCBhL2djYy9tYXRjaC5wZCBiL2djYy9tYXRjaC5wZA0KaW5kZXggYTRj YWUxMS4uYTQ1MWI5YyAxMDA2NDQNCi0tLSBhL2djYy9tYXRjaC5wZA0KKysr IGIvZ2NjL21hdGNoLnBkDQpAQCAtNjY5LDYgKzY2OSwxNSBAQCBERUZJTkVf SU5UX0FORF9GTE9BVF9ST1VORF9GTiAoUklOVCkNCiAgIChiaXRvcCBAMCBA MCkNCiAgIChub25fbHZhbHVlIEAwKSkpDQogDQorLyogeCAmIEMgLT4gMCBp ZiB3ZSBrbm93IHRoYXQgY29ycmVzcG9uZGluZyBiaXRzIGFyZSB6ZXJvICov DQorI2lmIEdJTVBMRQ0KKyhzaW1wbGlmeQ0KKyAgKGJpdF9hbmQgU1NBX05B TUVAMCBJTlRFR0VSX0NTVEAxKQ0KKyAgKGlmIChJTlRFR1JBTF9UWVBFX1Ag KFRSRUVfVFlQRSAoQDApKQ0KKyAgICAgICAmJiAoZ2V0X25vbnplcm9fYml0 cyAoQDApICYgQDEpID09IDApDQorICB7IGJ1aWxkX3plcm9fY3N0ICh0eXBl KTsgfSkpDQorI2VuZGlmDQorDQogLyogeCAmIEMgLT4geCBpZiB3ZSBrbm93 IHRoYXQgeCAmIH5DID09IDAuICAqLw0KICNpZiBHSU1QTEUNCiAoc2ltcGxp ZnkNCmRpZmYgLS1naXQgYS9nY2Mvc2FuaXRpemVyLmRlZiBiL2djYy9zYW5p dGl6ZXIuZGVmDQppbmRleCA4YjRhY2ZjLi45MTc1OWE4IDEwMDY0NA0KLS0t IGEvZ2NjL3Nhbml0aXplci5kZWYNCisrKyBiL2djYy9zYW5pdGl6ZXIuZGVm DQpAQCAtMTcxLDYgKzE3MSwxMCBAQCBERUZfU0FOSVRJWkVSX0JVSUxUSU4o QlVJTFRfSU5fQVNBTl9QT0lTT05fU1RBQ0tfTUVNT1JZLA0KIERFRl9TQU5J VElaRVJfQlVJTFRJTihCVUlMVF9JTl9BU0FOX1VOUE9JU09OX1NUQUNLX01F TU9SWSwNCiAJCSAgICAgICJfX2FzYW5fdW5wb2lzb25fc3RhY2tfbWVtb3J5 IiwNCiAJCSAgICAgIEJUX0ZOX1ZPSURfUFRSX1BUUk1PREUsIEFUVFJfTk9U SFJPV19MRUFGX0xJU1QpDQorREVGX1NBTklUSVpFUl9CVUlMVElOKEJVSUxU X0lOX0FTQU5fQUxMT0NBX1BPSVNPTiwgIl9fYXNhbl9hbGxvY2FfcG9pc29u IiwNCisJCSAgICAgIEJUX0ZOX1ZPSURfUFRSX1BUUk1PREUsIEFUVFJfTk9U SFJPV19MRUFGX0xJU1QpDQorREVGX1NBTklUSVpFUl9CVUlMVElOKEJVSUxU X0lOX0FTQU5fQUxMT0NBU19VTlBPSVNPTiwgIl9fYXNhbl9hbGxvY2FzX3Vu cG9pc29uIiwNCisJCSAgICAgIEJUX0ZOX1ZPSURfUFRSX1BUUk1PREUsIEFU VFJfTk9USFJPV19MRUFGX0xJU1QpDQogDQogLyogVGhyZWFkIFNhbml0aXpl ciAqLw0KIERFRl9TQU5JVElaRVJfQlVJTFRJTihCVUlMVF9JTl9UU0FOX0lO SVQsICJfX3RzYW5faW5pdCIsIA0KZGlmZiAtLWdpdCBhL2djYy90ZXN0c3Vp dGUvYy1jKystY29tbW9uL2FzYW4vYWxsb2NhX2JpZ19hbGlnbm1lbnQuYyBi L2djYy90ZXN0c3VpdGUvYy1jKystY29tbW9uL2FzYW4vYWxsb2NhX2JpZ19h bGlnbm1lbnQuYw0KbmV3IGZpbGUgbW9kZSAxMDA2NDQNCmluZGV4IDAwMDAw MDAuLjU0ZjAzYjgNCi0tLSAvZGV2L251bGwNCisrKyBiL2djYy90ZXN0c3Vp dGUvYy1jKystY29tbW9uL2FzYW4vYWxsb2NhX2JpZ19hbGlnbm1lbnQuYw0K QEAgLTAsMCArMSwyMiBAQA0KKy8qIHsgZGctZG8gcnVuIH0gKi8NCisvKiB7 IGRnLXNob3VsZGZhaWwgImFzYW4iIH0gKi8NCisNCisjaW5jbHVkZSA8YXNz ZXJ0Lmg+DQorDQordm9sYXRpbGUgaW50IHRlbiA9IDEwOw0KKw0KK19fYXR0 cmlidXRlX18oKG5vaW5saW5lKSkgdm9pZCBmb28oaW50IGluZGV4LCBpbnQg bGVuKSB7DQorICB2b2xhdGlsZSBjaGFyIHN0cltsZW5dIF9fYXR0cmlidXRl X18oKGFsaWduZWQoMTI4KSkpOw0KKyAgYXNzZXJ0KCEoKGxvbmcpIHN0ciAm IDEyN0wpKTsNCisgIHN0cltpbmRleF0gPSAnMSc7IC8vIEJPT00NCit9DQor DQoraW50IG1haW4oKSB7DQorICBmb28odGVuLCB0ZW4pOw0KKyAgcmV0dXJu IDA7DQorfQ0KKw0KKy8qIHsgZGctb3V0cHV0ICJXUklURSBvZiBzaXplIDEg YXQgMHhcWzAtOWEtZlxdKyB0aHJlYWQgVDBcW15cblxyXSooXG58XHJcbnxc cikiIH0gKi8NCisvKiB7IGRnLW91dHB1dCAiICAgICMwIDB4XFswLTlhLWZc XSsgKyhpbiBfKmZvbyhcW15cblxyXSphbGxvY2FfYmlnX2FsaWdubWVudC5j OjExfFxbXlxuXHJdKjowKXxcWyhcXSkuKihcbnxcclxufFxyKSIgfSAqLw0K Ky8qIHsgZGctb3V0cHV0ICJcW15cblxyXSpBZGRyZXNzIDB4XFswLTlhLWZc XSsgaXMgbG9jYXRlZCBpbiBzdGFjayBvZiB0aHJlYWQgVDAuKihcbnxcclxu fFxyKSIgKi8NCisvKiB7IGRnLW91dHB1dCAiXFteXG5ccl0qaW4gZm9vLiph bGxvY2FfYmlnX2FsaWdubWVudC5jLiooXG58XHJcbnxccikiICovDQpkaWZm IC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9jLWMrKy1jb21tb24vYXNhbi9hbGxv Y2FfZGV0ZWN0X2N1c3RvbV9zaXplLmMgYi9nY2MvdGVzdHN1aXRlL2MtYysr LWNvbW1vbi9hc2FuL2FsbG9jYV9kZXRlY3RfY3VzdG9tX3NpemUuYw0KbmV3 IGZpbGUgbW9kZSAxMDA2NDQNCmluZGV4IDAwMDAwMDAuLjYwOWRhZmUNCi0t LSAvZGV2L251bGwNCisrKyBiL2djYy90ZXN0c3VpdGUvYy1jKystY29tbW9u L2FzYW4vYWxsb2NhX2RldGVjdF9jdXN0b21fc2l6ZS5jDQpAQCAtMCwwICsx LDI3IEBADQorLyogeyBkZy1kbyBydW4gfSAqLw0KKy8qIHsgZGctc2hvdWxk ZmFpbCAiYXNhbiIgfSAqLw0KKw0KKyNpbmNsdWRlIDxhc3NlcnQuaD4NCisN CitzdHJ1Y3QgQSB7DQorICBjaGFyIGFbM107DQorICBpbnQgYlszXTsNCit9 Ow0KKw0KK3ZvbGF0aWxlIGludCB0ZW4gPSAxMDsNCisNCitfX2F0dHJpYnV0 ZV9fKChub2lubGluZSkpIHZvaWQgZm9vKGludCBpbmRleCwgaW50IGxlbikg ew0KKyAgdm9sYXRpbGUgc3RydWN0IEEgc3RyW2xlbl0gX19hdHRyaWJ1dGVf XygoYWxpZ25lZCgzMikpKTsNCisgIGFzc2VydCghKChsb25nKSBzdHIgJiAz MUwpKTsNCisgIHN0cltpbmRleF0uYVswXSA9ICcxJzsgLy8gQk9PTQ0KK30N CisNCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpIHsNCisgIGZv byh0ZW4sIHRlbik7DQorICByZXR1cm4gMDsNCit9DQorDQorLyogeyBkZy1v dXRwdXQgIldSSVRFIG9mIHNpemUgMSBhdCAweFxbMC05YS1mXF0rIHRocmVh ZCBUMFxbXlxuXHJdKihcbnxcclxufFxyKSIgfSAqLw0KKy8qIHsgZGctb3V0 cHV0ICIgICAgIzAgMHhcWzAtOWEtZlxdKyArKGluIF8qZm9vKFxbXlxuXHJd KmFsbG9jYV9kZXRlY3RfY3VzdG9tX3NpemUuYzoxNnxcW15cblxyXSo6MCl8 XFsoXF0pLiooXG58XHJcbnxccikiIH0gKi8NCisvKiB7IGRnLW91dHB1dCAi XFteXG5ccl0qQWRkcmVzcyAweFxbMC05YS1mXF0rIGlzIGxvY2F0ZWQgaW4g c3RhY2sgb2YgdGhyZWFkIFQwLiooXG58XHJcbnxccikiICovDQorLyogeyBk Zy1vdXRwdXQgIlxbXlxuXHJdKmluIGZvby4qYWxsb2NhX2RldGVjdF9jdXN0 b21fc2l6ZS5jLiooXG58XHJcbnxccikiICovDQpkaWZmIC0tZ2l0IGEvZ2Nj L3Rlc3RzdWl0ZS9jLWMrKy1jb21tb24vYXNhbi9hbGxvY2FfaW5zdHJ1bWVu dHNfYWxsX3BhZGRpbmdzLmMgYi9nY2MvdGVzdHN1aXRlL2MtYysrLWNvbW1v bi9hc2FuL2FsbG9jYV9pbnN0cnVtZW50c19hbGxfcGFkZGluZ3MuYw0KbmV3 IGZpbGUgbW9kZSAxMDA2NDQNCmluZGV4IDAwMDAwMDAuLjZiMDhjMGINCi0t LSAvZGV2L251bGwNCisrKyBiL2djYy90ZXN0c3VpdGUvYy1jKystY29tbW9u L2FzYW4vYWxsb2NhX2luc3RydW1lbnRzX2FsbF9wYWRkaW5ncy5jDQpAQCAt MCwwICsxLDIxIEBADQorLyogeyBkZy1kbyBydW4gfSAqLw0KKw0KKyNpbmNs dWRlICJzYW5pdGl6ZXIvYXNhbl9pbnRlcmZhY2UuaCINCisjaW5jbHVkZSA8 YXNzZXJ0Lmg+DQorDQorX19hdHRyaWJ1dGVfXygobm9pbmxpbmUpKSB2b2lk IGZvbyhpbnQgaW5kZXgsIGludCBsZW4pIHsNCisgIHZvbGF0aWxlIGNoYXIg c3RyW2xlbl0gX19hdHRyaWJ1dGVfXygoYWxpZ25lZCgzMikpKTsNCisgIGFz c2VydCghKChsb25nKSBzdHIgJiAzMUwpKTsNCisgIGNoYXIgKnEgPSAoY2hh ciAqKV9fYXNhbl9yZWdpb25faXNfcG9pc29uZWQoKGNoYXIgKilzdHIsIDY0 KTsNCisgIGFzc2VydChxICYmICgocSAtIHN0cikgPT0gaW5kZXgpKTsNCit9 DQorDQoraW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KSB7DQorICBm b3IgKGludCBpID0gMTsgaSA8IDMzOyArK2kpDQorICAgIGZvbyhpLCBpKTsN CisNCisgIGZvciAoaW50IGkgPSAxOyBpIDwgMzM7ICsraSkNCisgICAgZm9v KGksIGkpOw0KKw0KKyAgcmV0dXJuIDA7DQorfQ0KZGlmZiAtLWdpdCBhL2dj Yy90ZXN0c3VpdGUvYy1jKystY29tbW9uL2FzYW4vYWxsb2NhX2xvb3BfdW5w b2lzb25pbmcuYyBiL2djYy90ZXN0c3VpdGUvYy1jKystY29tbW9uL2FzYW4v YWxsb2NhX2xvb3BfdW5wb2lzb25pbmcuYw0KbmV3IGZpbGUgbW9kZSAxMDA2 NDQNCmluZGV4IDAwMDAwMDAuLjBkZGFkYjkNCi0tLSAvZGV2L251bGwNCisr KyBiL2djYy90ZXN0c3VpdGUvYy1jKystY29tbW9uL2FzYW4vYWxsb2NhX2xv b3BfdW5wb2lzb25pbmcuYw0KQEAgLTAsMCArMSwzNCBAQA0KKy8qIHsgZGct ZG8gcnVuIH0gKi8NCisNCisvKiBUaGlzIHRlc3RjYXNlIGNoZWNrcyB0aGF0 IGFsbG9jYXMgYW5kIFZMQXMgaW5zaWRlIGxvb3AgYXJlIGNvcnJlY3RseSB1 bnBvaXNvbmVkLiAgKi8NCisNCisjaW5jbHVkZSA8YXNzZXJ0Lmg+DQorI2lu Y2x1ZGUgPHN0ZGludC5oPg0KKyNpbmNsdWRlIDxzdGRsaWIuaD4NCisjaW5j bHVkZSA8c3RkaW8uaD4NCisjaW5jbHVkZSAic2FuaXRpemVyL2FzYW5faW50 ZXJmYWNlLmgiDQorDQordm9pZCAqdG9wLCAqYm90Ow0KK3ZvbGF0aWxlIGlu dCB0aGlydHlfdHdvID0gMzI7DQorDQorX19hdHRyaWJ1dGVfXygobm9pbmxp bmUpKSB2b2lkIGZvbyhpbnQgbGVuKSB7DQorICBjaGFyIHg7DQorICB0b3Ag PSAmeDsNCisgIHZvbGF0aWxlIGNoYXIgYXJyYXlbbGVuXTsNCisgIGFzc2Vy dCghKCh1aW50cHRyX3QpIGFycmF5ICYgMzFMKSk7DQorICBhbGxvY2EobGVu KTsNCisgIGZvciAoaW50IGkgPSAwOyBpIDwgdGhpcnR5X3R3bzsgKytpKSB7 DQorICAgIGNoYXIgYXJyYXlbaV07DQorICAgIGJvdCA9IGFycmF5Ow0KKyAg ICAvKiBKdXN0IHRvIHByZXZlbnQgb3B0aW1pemF0aW9uLiAgKi8NCisgICAg cHJpbnRmKCIlcFxuIiwgYm90KTsNCisgICAgYXNzZXJ0KCEoKHVpbnRwdHJf dCkgYm90ICYgMzFMKSk7DQorICB9DQorfQ0KKw0KK2ludCBtYWluKGludCBh cmdjLCBjaGFyICoqYXJndikgew0KKyAgZm9vKHRoaXJ0eV90d28pOw0KKyAg dm9pZCAqcSA9IF9fYXNhbl9yZWdpb25faXNfcG9pc29uZWQoYm90LCAoY2hh ciAqKXRvcCAtIChjaGFyICopYm90KTsNCisgIGFzc2VydCghcSk7DQorICBy ZXR1cm4gMDsNCit9DQpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9jLWMr Ky1jb21tb24vYXNhbi9hbGxvY2Ffb3ZlcmZsb3dfcGFydGlhbC5jIGIvZ2Nj L3Rlc3RzdWl0ZS9jLWMrKy1jb21tb24vYXNhbi9hbGxvY2Ffb3ZlcmZsb3df cGFydGlhbC5jDQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAw MC4uOWY0ZDA3OA0KLS0tIC9kZXYvbnVsbA0KKysrIGIvZ2NjL3Rlc3RzdWl0 ZS9jLWMrKy1jb21tb24vYXNhbi9hbGxvY2Ffb3ZlcmZsb3dfcGFydGlhbC5j DQpAQCAtMCwwICsxLDIyIEBADQorLyogeyBkZy1kbyBydW4gfSAqLw0KKy8q IHsgZGctc2hvdWxkZmFpbCAiYXNhbiIgfSAqLw0KKw0KKyNpbmNsdWRlIDxh c3NlcnQuaD4NCisNCit2b2xhdGlsZSBjb25zdCBpbnQgdGVuID0gMTA7DQor DQorX19hdHRyaWJ1dGVfXygobm9pbmxpbmUpKSB2b2lkIGZvbyhpbnQgaW5k ZXgsIGludCBsZW4pIHsNCisgIHZvbGF0aWxlIGNoYXIgc3RyW2xlbl0gX19h dHRyaWJ1dGVfXygoYWxpZ25lZCgzMikpKTsNCisgIGFzc2VydCghKChsb25n KSBzdHIgJiAzMUwpKTsNCisgIHN0cltpbmRleF0gPSAnMSc7IC8vIEJPT00N Cit9DQorDQoraW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KSB7DQor ICBmb28odGVuLCB0ZW4pOw0KKyAgcmV0dXJuIDA7DQorfQ0KKw0KKy8qIHsg ZGctb3V0cHV0ICJXUklURSBvZiBzaXplIDEgYXQgMHhcWzAtOWEtZlxdKyB0 aHJlYWQgVDBcW15cblxyXSooXG58XHJcbnxccikiIH0gKi8NCisvKiB7IGRn LW91dHB1dCAiICAgICMwIDB4XFswLTlhLWZcXSsgKyhpbiBfKmZvbyhcW15c blxyXSphbGxvY2Ffb3ZlcmZsb3dfcGFydGlhbC5jOjExfFxbXlxuXHJdKjow KXxcWyhcXSkuKihcbnxcclxufFxyKSIgfSAqLw0KKy8qIHsgZGctb3V0cHV0 ICJcW15cblxyXSpBZGRyZXNzIDB4XFswLTlhLWZcXSsgaXMgbG9jYXRlZCBp biBzdGFjayBvZiB0aHJlYWQgVDAuKihcbnxcclxufFxyKSIgKi8NCisvKiB7 IGRnLW91dHB1dCAiXFteXG5ccl0qaW4gZm9vLiphbGxvY2Ffb3ZlcmZsb3df cGFydGlhbC5jLiooXG58XHJcbnxccikiICovDQpkaWZmIC0tZ2l0IGEvZ2Nj L3Rlc3RzdWl0ZS9jLWMrKy1jb21tb24vYXNhbi9hbGxvY2Ffb3ZlcmZsb3df cmlnaHQuYyBiL2djYy90ZXN0c3VpdGUvYy1jKystY29tbW9uL2FzYW4vYWxs b2NhX292ZXJmbG93X3JpZ2h0LmMNCm5ldyBmaWxlIG1vZGUgMTAwNjQ0DQpp bmRleCAwMDAwMDAwLi4wODVmZGFlDQotLS0gL2Rldi9udWxsDQorKysgYi9n Y2MvdGVzdHN1aXRlL2MtYysrLWNvbW1vbi9hc2FuL2FsbG9jYV9vdmVyZmxv d19yaWdodC5jDQpAQCAtMCwwICsxLDIyIEBADQorLyogeyBkZy1kbyBydW4g fSAqLw0KKy8qIHsgZGctc2hvdWxkZmFpbCAiYXNhbiIgfSAqLw0KKw0KKyNp bmNsdWRlIDxhc3NlcnQuaD4NCisNCit2b2xhdGlsZSBjb25zdCBpbnQgdGVu ID0gMTA7DQorDQorX19hdHRyaWJ1dGVfXygobm9pbmxpbmUpKSB2b2lkIGZv byhpbnQgaW5kZXgsIGludCBsZW4pIHsNCisgIHZvbGF0aWxlIGNoYXIgc3Ry W2xlbl0gX19hdHRyaWJ1dGVfXygoYWxpZ25lZCgzMikpKTsNCisgIGFzc2Vy dCghKChsb25nKSBzdHIgJiAzMUwpKTsNCisgIHN0cltpbmRleF0gPSAnMSc7 IC8vIEJPT00NCit9DQorDQoraW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiph cmd2KSB7DQorICBmb28oMzMsIHRlbik7DQorICByZXR1cm4gMDsNCit9DQor DQorLyogeyBkZy1vdXRwdXQgIldSSVRFIG9mIHNpemUgMSBhdCAweFxbMC05 YS1mXF0rIHRocmVhZCBUMFxbXlxuXHJdKihcbnxcclxufFxyKSIgfSAqLw0K Ky8qIHsgZGctb3V0cHV0ICIgICAgIzAgMHhcWzAtOWEtZlxdKyArKGluIF8q Zm9vKFxbXlxuXHJdKmFsbG9jYV9vdmVyZmxvd19yaWdodC5jOjExfFxbXlxu XHJdKjowKXxcWyhcXSkuKihcbnxcclxufFxyKSIgfSAqLw0KKy8qIHsgZGct b3V0cHV0ICJcW15cblxyXSpBZGRyZXNzIDB4XFswLTlhLWZcXSsgaXMgbG9j YXRlZCBpbiBzdGFjayBvZiB0aHJlYWQgVDAuKihcbnxcclxufFxyKSIgKi8N CisvKiB7IGRnLW91dHB1dCAiXFteXG5ccl0qaW4gZm9vLiphbGxvY2Ffb3Zl cmZsb3dfcmlnaHQuYy4qKFxufFxyXG58XHIpIiAqLw0KZGlmZiAtLWdpdCBh L2djYy90ZXN0c3VpdGUvYy1jKystY29tbW9uL2FzYW4vYWxsb2NhX3NhZmVf YWNjZXNzLmMgYi9nY2MvdGVzdHN1aXRlL2MtYysrLWNvbW1vbi9hc2FuL2Fs bG9jYV9zYWZlX2FjY2Vzcy5jDQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5k ZXggMDAwMDAwMC4uOTJkYTFiMg0KLS0tIC9kZXYvbnVsbA0KKysrIGIvZ2Nj L3Rlc3RzdWl0ZS9jLWMrKy1jb21tb24vYXNhbi9hbGxvY2Ffc2FmZV9hY2Nl c3MuYw0KQEAgLTAsMCArMSwxNSBAQA0KKy8qIHsgZGctZG8gcnVuIH0gKi8N CisNCisjaW5jbHVkZSA8YXNzZXJ0Lmg+DQorDQorX19hdHRyaWJ1dGVfXygo bm9pbmxpbmUpKSB2b2lkIGZvbyhpbnQgaW5kZXgsIGludCBsZW4pIHsNCisg IHZvbGF0aWxlIGNoYXIgc3RyW2xlbl0gX19hdHRyaWJ1dGVfXygoYWxpZ25l ZCgzMikpKTsNCisgIGFzc2VydCghKChsb25nKXN0ciAmIDMxTCkpOw0KKyAg c3RyW2luZGV4XSA9ICcxJzsNCit9DQorDQoraW50IG1haW4oaW50IGFyZ2Ms IGNoYXIgKiphcmd2KSB7DQorICBmb28oNCwgNSk7DQorICBmb28oMzksIDQw KTsNCisgIHJldHVybiAwOw0KK30NCmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1 aXRlL2MtYysrLWNvbW1vbi9hc2FuL2FsbG9jYV91bmRlcmZsb3dfbGVmdC5j IGIvZ2NjL3Rlc3RzdWl0ZS9jLWMrKy1jb21tb24vYXNhbi9hbGxvY2FfdW5k ZXJmbG93X2xlZnQuYw0KbmV3IGZpbGUgbW9kZSAxMDA2NDQNCmluZGV4IDAw MDAwMDAuLmZlMmFiZTENCi0tLSAvZGV2L251bGwNCisrKyBiL2djYy90ZXN0 c3VpdGUvYy1jKystY29tbW9uL2FzYW4vYWxsb2NhX3VuZGVyZmxvd19sZWZ0 LmMNCkBAIC0wLDAgKzEsMjIgQEANCisvKiB7IGRnLWRvIHJ1biB9ICovDQor LyogeyBkZy1zaG91bGRmYWlsICJhc2FuIiB9ICovDQorDQorI2luY2x1ZGUg PGFzc2VydC5oPg0KKw0KK3ZvbGF0aWxlIGNvbnN0IGludCB0ZW4gPSAxMDsN CisNCitfX2F0dHJpYnV0ZV9fKChub2lubGluZSkpIHZvaWQgZm9vKGludCBp bmRleCwgaW50IGxlbikgew0KKyAgdm9sYXRpbGUgY2hhciBzdHJbbGVuXSBf X2F0dHJpYnV0ZV9fKChhbGlnbmVkKDMyKSkpOw0KKyAgYXNzZXJ0KCEoKGxv bmcpIHN0ciAmIDMxTCkpOw0KKyAgc3RyW2luZGV4XSA9ICcxJzsgLy8gQk9P TQ0KK30NCisNCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpIHsN CisgIGZvbygtMSwgdGVuKTsNCisgIHJldHVybiAwOw0KK30NCisNCisvKiB7 IGRnLW91dHB1dCAiV1JJVEUgb2Ygc2l6ZSAxIGF0IDB4XFswLTlhLWZcXSsg dGhyZWFkIFQwXFteXG5ccl0qKFxufFxyXG58XHIpIiB9ICovDQorLyogeyBk Zy1vdXRwdXQgIiAgICAjMCAweFxbMC05YS1mXF0rICsoaW4gXypmb28oXFte XG5ccl0qYWxsb2NhX3VuZGVyZmxvd19sZWZ0LmM6MTF8XFteXG5ccl0qOjAp fFxbKFxdKS4qKFxufFxyXG58XHIpIiB9ICovDQorLyogeyBkZy1vdXRwdXQg IlxbXlxuXHJdKkFkZHJlc3MgMHhcWzAtOWEtZlxdKyBpcyBsb2NhdGVkIGlu IHN0YWNrIG9mIHRocmVhZCBUMC4qKFxufFxyXG58XHIpIiAqLw0KKy8qIHsg ZGctb3V0cHV0ICJcW15cblxyXSppbiBmb28uKmFsbG9jYV91bmRlcmZsb3df bGVmdC5jLiooXG58XHJcbnxccikiICovDQo= --------------040607080305020701070605--