From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 53927 invoked by alias); 7 Dec 2015 13:25:53 -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 53917 invoked by uid 89); 7 Dec 2015 13:25:52 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=0.5 required=5.0 tests=AWL,BAYES_50,KAM_LAZY_DOMAIN_SECURITY,RCVD_IN_DNSWL_LOW,T_RP_MATCHES_RCVD autolearn=no version=3.3.2 X-HELO: smtprelay.synopsys.com Received: from smtprelay.synopsys.com (HELO smtprelay.synopsys.com) (198.182.47.9) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES256-GCM-SHA384 encrypted) ESMTPS; Mon, 07 Dec 2015 13:25:51 +0000 Received: from dc8secmta2.synopsys.com (dc8secmta2.synopsys.com [10.13.218.202]) by smtprelay.synopsys.com (Postfix) with ESMTP id 6C37A24E1EE2; Mon, 7 Dec 2015 05:25:48 -0800 (PST) Received: from dc8secmta2.internal.synopsys.com (dc8secmta2.internal.synopsys.com [127.0.0.1]) by dc8secmta2.internal.synopsys.com (Service) with ESMTP id 325C1A4124; Mon, 7 Dec 2015 05:25:48 -0800 (PST) Received: from mailhost.synopsys.com (mailhost1.synopsys.com [10.12.238.239]) by dc8secmta2.internal.synopsys.com (Service) with ESMTP id E9ACCA4123; Mon, 7 Dec 2015 05:25:47 -0800 (PST) Received: from mailhost.synopsys.com (localhost [127.0.0.1]) by mailhost.synopsys.com (Postfix) with ESMTP id CA927CC3; Mon, 7 Dec 2015 05:25:47 -0800 (PST) Received: from us01wehtc1.internal.synopsys.com (us01wehtc1-vip.internal.synopsys.com [10.12.239.236]) by mailhost.synopsys.com (Postfix) with ESMTP id 9563DCC0; Mon, 7 Dec 2015 05:25:47 -0800 (PST) Received: from DE02WEHTCB.internal.synopsys.com (10.225.19.94) by us01wehtc1.internal.synopsys.com (10.12.239.235) with Microsoft SMTP Server (TLS) id 14.3.195.1; Mon, 7 Dec 2015 05:25:47 -0800 Received: from DE02WEMBXA.internal.synopsys.com ([fe80::a014:7216:77d:d55c]) by DE02WEHTCB.internal.synopsys.com ([::1]) with mapi id 14.03.0195.001; Mon, 7 Dec 2015 14:25:41 +0100 From: Claudiu Zissulescu To: Joern Wolfgang Rennecke , "gcc-patches@gcc.gnu.org" CC: "Francois.Bedard@synopsys.com" , "jeremy.bennett@embecosm.com" Subject: RE: [PATCH] [ARC] Add support for atomic memory built-in. Date: Mon, 07 Dec 2015 13:25:00 -0000 Message-ID: <098ECE41A0A6114BB2A07F1EC238DE896616B15C@de02wembxa.internal.synopsys.com> References: <1447669119-17513-1-git-send-email-claziss@synopsys.com> <5660E7AC.5050007@amylaar.uk> In-Reply-To: <5660E7AC.5050007@amylaar.uk> Content-Type: multipart/mixed; boundary="_002_098ECE41A0A6114BB2A07F1EC238DE896616B15Cde02wembxainter_" MIME-Version: 1.0 X-SW-Source: 2015-12/txt/msg00735.txt.bz2 --_002_098ECE41A0A6114BB2A07F1EC238DE896616B15Cde02wembxainter_ Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Content-length: 835 Hi, > AFAICT, you use hardware synchronisation instruction for EMMODEL_SEQ, > and compiler memory barriers for all other memory models (except > MEMMODEL_RELAXED). That makes no sense; either the platform needs > explicit instructions for memory coherency, or it doesn't. Indeed, we on purpose misused the sync primitive to compensate for the lack= of data memory barrier (dmb) primitive in the early SMP-HS cores. Now, I'v= e checked and we can safely use the dmb primitive for all HS cores present = today (no old HS ip without dmb is out there). Hence, I've refurbish the pa= tch (attached) removing the old sync/software memory barrier combinations a= nd use the newer dmb instruction for it. Tested with dg.exp (when passing -matomic to gcc compiler line, the atomic = tests are also successfully executed). Thanks, Claudiu --_002_098ECE41A0A6114BB2A07F1EC238DE896616B15Cde02wembxainter_ Content-Type: application/octet-stream; name="0001-ARC-Add-support-for-atomic-memory-built-in.patch" Content-Description: 0001-ARC-Add-support-for-atomic-memory-built-in.patch Content-Disposition: attachment; filename="0001-ARC-Add-support-for-atomic-memory-built-in.patch"; size=26717; creation-date="Mon, 07 Dec 2015 13:21:14 GMT"; modification-date="Mon, 07 Dec 2015 13:13:05 GMT" Content-Transfer-Encoding: base64 Content-length: 36218 RnJvbSA3ODlhNTgzZDFhMmU4OThjYTcxMWQwMjQ4NjUzZWQ3NjllYTU4NDBk IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBDbGF1ZGl1IFppc3N1 bGVzY3UgPGNsYXppc3NAc3lub3BzeXMuY29tPgpEYXRlOiBUaHUsIDEyIE5v diAyMDE1IDE1OjI4OjQxICswMTAwClN1YmplY3Q6IFtQQVRDSF0gW0FSQ10g QWRkIHN1cHBvcnQgZm9yIGF0b21pYyBtZW1vcnkgYnVpbHQtaW4uCgpnY2Mv CgoyMDE1LTExLTEyICBDbGF1ZGl1IFppc3N1bGVzY3UgIDxjbGF6aXNzQHN5 bm9wc3lzLmNvbT4KCgkqIGNvbmZpZy9hcmMvYXJjLXByb3Rvcy5oIChhcmNf ZXhwYW5kX2F0b21pY19vcCk6IFByb3RvdHlwZS4KCShhcmNfc3BsaXRfY29t cGFyZV9hbmRfc3dhcCk6IExpa2V3aXNlLgoJKGFyY19leHBhbmRfY29tcGFy ZV9hbmRfc3dhcCk6IExpa2V3aXNlLgoJKiBjb25maWcvYXJjL2FyYy5jIChh cmNfaW5pdCk6IENoZWNrIHVzYWdlIGF0b21pYyBvcHRpb24uCgkoYXJjX3By ZV9hdG9taWNfYmFycmllcik6IE5ldyBmdW5jdGlvbi4KCShhcmNfcG9zdF9h dG9taWNfYmFycmllcik6IExpa2V3aXNlLgoJKGVtaXRfdW5saWtlbHlfanVt cCk6IExpa2V3aXNlLgoJKGFyY19leHBhbmRfY29tcGFyZV9hbmRfc3dhcF9x aCk6IExpa2V3aXNlLgoJKGFyY19leHBhbmRfY29tcGFyZV9hbmRfc3dhcCk6 IExpa2V3aXNlLgoJKGFyY19zcGxpdF9jb21wYXJlX2FuZF9zd2FwKTogTGlr ZXdpc2UuCgkoYXJjX2V4cGFuZF9hdG9taWNfb3ApOiBMaWtld2lzZS4KCSog Y29uZmlnL2FyYy9hcmMuaCAoVEFSR0VUX0NQVV9DUFBfQlVJTFRJTlMpOiBO ZXcgQyBtYWNyby4KCShBU01fU1BFQyk6IEVuYWJsZSBtbG9jayBvcHRpb24g d2hlbiBtYXRvbWljIGlzIHVzZWQuCgkqIGNvbmZpZy9hcmMvYXJjLm1kIChV TlNQRUNfQVJDX01FTUJBUik6IERlZmluZS4KCShWVU5TUEVDX0FSQ19DQVMp OiBMaWtld2lzZS4KCShWVU5TUEVDX0FSQ19MTCk6IExpa2V3aXNlLgoJKFZV TlNQRUNfQVJDX1NDKTogTGlrZXdpc2UuCgkoVlVOU1BFQ19BUkNfRVgpOiBM aWtld2lzZS4KCSogY29uZmlnL2FyYy9hcmMub3B0IChtYXRvbWljKTogTmV3 IG9wdGlvbi4KCSogY29uZmlnL2FyYy9jb25zdHJhaW50cy5tZCAoQVRPKTog TmV3IGNvbnN0cmFpbnQuCgkqIGNvbmZpZy9hcmMvcHJlZGljYXRlcy5tZCAo bWVtX25vb2ZzX29wZXJhbmQpOiBOZXcgcHJlZGljYXRlLgoJKiBkb2MvaW52 b2tlLnRleGk6IERvY3VtZW50IC1tYXRvbWljLgoJKiBjb25maWcvYXJjL2F0 b21pYy5tZDogTmV3IGZpbGUuCgpnY2MvdGVzdHN1aXRlCgoyMDE1LTExLTEy ICBDbGF1ZGl1IFppc3N1bGVzY3UgIDxjbGF6aXNzQHN5bm9wc3lzLmNvbT4K CgkqIGxpYi90YXJnZXQtc3VwcG9ydHMuZXhwIChjaGVja19lZmZlY3RpdmVf dGFyZ2V0X2FyY19hdG9taWMpOiBOZXcKCWZ1bmN0aW9uLgoJKGNoZWNrX2Vm ZmVjdGl2ZV90YXJnZXRfc3luY19pbnRfbG9uZyk6IEFkZCBjaGVja3MgZm9y IEFSQyBhdG9taWMKCWZlYXR1cmUuCgkoY2hlY2tfZWZmZWN0aXZlX3Rhcmdl dF9zeW5jX2NoYXJfc2hvcnQpOiBMaWtld2lzZS4KLS0tCiBnY2MvY29uZmln L2FyYy9hcmMtcHJvdG9zLmggICAgICAgICAgIHwgICA0ICsKIGdjYy9jb25m aWcvYXJjL2FyYy5jICAgICAgICAgICAgICAgICAgfCAzNTcgKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKwogZ2NjL2NvbmZpZy9hcmMvYXJj LmggICAgICAgICAgICAgICAgICB8ICAgNiArLQogZ2NjL2NvbmZpZy9hcmMv YXJjLm1kICAgICAgICAgICAgICAgICB8ICAgOSArCiBnY2MvY29uZmlnL2Fy Yy9hcmMub3B0ICAgICAgICAgICAgICAgIHwgICAzICsKIGdjYy9jb25maWcv YXJjL2F0b21pYy5tZCAgICAgICAgICAgICAgfCAyMTUgKysrKysrKysrKysr KysrKysrKysKIGdjYy9jb25maWcvYXJjL2NvbnN0cmFpbnRzLm1kICAgICAg ICAgfCAgIDYgKwogZ2NjL2NvbmZpZy9hcmMvcHJlZGljYXRlcy5tZCAgICAg ICAgICB8ICAgNCArCiBnY2MvZG9jL2ludm9rZS50ZXhpICAgICAgICAgICAg ICAgICAgIHwgICA4ICstCiBnY2MvdGVzdHN1aXRlL2xpYi90YXJnZXQtc3Vw cG9ydHMuZXhwIHwgIDExICsrCiAxMCBmaWxlcyBjaGFuZ2VkLCA2MjEgaW5z ZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0 NCBnY2MvY29uZmlnL2FyYy9hdG9taWMubWQKCmRpZmYgLS1naXQgYS9nY2Mv Y29uZmlnL2FyYy9hcmMtcHJvdG9zLmggYi9nY2MvY29uZmlnL2FyYy9hcmMt cHJvdG9zLmgKaW5kZXggNmUwNDM1MS4uMzU4MWJiMCAxMDA2NDQKLS0tIGEv Z2NjL2NvbmZpZy9hcmMvYXJjLXByb3Rvcy5oCisrKyBiL2djYy9jb25maWcv YXJjL2FyYy1wcm90b3MuaApAQCAtNDEsNiArNDEsMTAgQEAgZXh0ZXJuIGlu dCBhcmNfb3V0cHV0X2NvbW11dGF0aXZlX2NvbmRfZXhlYyAocnR4ICpvcGVy YW5kcywgYm9vbCk7CiBleHRlcm4gYm9vbCBhcmNfZXhwYW5kX21vdm1lbSAo cnR4ICpvcGVyYW5kcyk7CiBleHRlcm4gYm9vbCBwcmVwYXJlX21vdmVfb3Bl cmFuZHMgKHJ0eCAqb3BlcmFuZHMsIG1hY2hpbmVfbW9kZSBtb2RlKTsKIGV4 dGVybiB2b2lkIGVtaXRfc2hpZnQgKGVudW0gcnR4X2NvZGUsIHJ0eCwgcnR4 LCBydHgpOworZXh0ZXJuIHZvaWQgYXJjX2V4cGFuZF9hdG9taWNfb3AgKGVu dW0gcnR4X2NvZGUsIHJ0eCwgcnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVy biB2b2lkIGFyY19zcGxpdF9jb21wYXJlX2FuZF9zd2FwIChydHggKik7Citl eHRlcm4gdm9pZCBhcmNfZXhwYW5kX2NvbXBhcmVfYW5kX3N3YXAgKHJ0eCAq KTsKKwogI2VuZGlmIC8qIFJUWF9DT0RFICovCiAKICNpZmRlZiBUUkVFX0NP REUKZGlmZiAtLWdpdCBhL2djYy9jb25maWcvYXJjL2FyYy5jIGIvZ2NjL2Nv bmZpZy9hcmMvYXJjLmMKaW5kZXggOGJiMDk2OS4uNWJjMmJjZSAxMDA2NDQK LS0tIGEvZ2NjL2NvbmZpZy9hcmMvYXJjLmMKKysrIGIvZ2NjL2NvbmZpZy9h cmMvYXJjLmMKQEAgLTYxLDYgKzYxLDcgQEAgYWxvbmcgd2l0aCBHQ0M7IHNl ZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKICNpbmNsdWRlICJj b250ZXh0LmgiCiAjaW5jbHVkZSAiYnVpbHRpbnMuaCIKICNpbmNsdWRlICJy dGwtaXRlci5oIgorI2luY2x1ZGUgImFsaWFzLmgiCiAKIC8qIFdoaWNoIGNw dSB3ZSdyZSBjb21waWxpbmcgZm9yIChBUkM2MDAsIEFSQzYwMSwgQVJDNzAw KS4gICovCiBzdGF0aWMgY29uc3QgY2hhciAqYXJjX2NwdV9zdHJpbmcgPSAi IjsKQEAgLTg4NCw2ICs4ODUsOSBAQCBhcmNfaW5pdCAodm9pZCkKICAgICAg IGZsYWdfcGljID0gMDsKICAgICB9CiAKKyAgaWYgKFRBUkdFVF9BVE9NSUMg JiYgIShUQVJHRVRfQVJDNzAwIHx8IFRBUkdFVF9IUykpCisgICAgZXJyb3Ig KCItbWF0b21pYyBpcyBvbmx5IHN1cHBvcnRlZCBmb3IgQVJDNzAwIG9yIEFS QyBIUyBjb3JlcyIpOworCiAgIGFyY19pbml0X3JlZ190YWJsZXMgKCk7CiAK ICAgLyogSW5pdGlhbGl6ZSBhcnJheSBmb3IgUFJJTlRfT1BFUkFORF9QVU5D VF9WQUxJRF9QLiAgKi8KQEAgLTk2NTAsNiArOTY1NCwzNTkgQEAgYXJjX3Vz ZV9ieV9waWVjZXNfaW5mcmFzdHJ1Y3R1cmVfcCAodW5zaWduZWQgSE9TVF9X SURFX0lOVCBzaXplLAogICByZXR1cm4gZGVmYXVsdF91c2VfYnlfcGllY2Vz X2luZnJhc3RydWN0dXJlX3AgKHNpemUsIGFsaWduLCBvcCwgc3BlZWRfcCk7 CiB9CiAKKy8qIEVtaXQgYSAocHJlKSBtZW1vcnkgYmFycmllciBhcm91bmQg YW4gYXRvbWljIHNlcXVlbmNlIGFjY29yZGluZyB0bworICAgTU9ERUwuICAq LworCitzdGF0aWMgdm9pZAorYXJjX3ByZV9hdG9taWNfYmFycmllciAoZW51 bSBtZW1tb2RlbCBtb2RlbCkKK3sKKyAgaWYgKG5lZWRfYXRvbWljX2JhcnJp ZXJfcCAobW9kZWwsIHRydWUpKQorICAgIGVtaXRfaW5zbiAoZ2VuX21lbW9y eV9iYXJyaWVyICgpKTsKK30KKworLyogRW1pdCBhIChwb3N0KSBtZW1vcnkg YmFycmllciBhcm91bmQgYW4gYXRvbWljIHNlcXVlbmNlIGFjY29yZGluZyB0 bworICAgTU9ERUwuICAqLworCitzdGF0aWMgdm9pZAorYXJjX3Bvc3RfYXRv bWljX2JhcnJpZXIgKGVudW0gbWVtbW9kZWwgbW9kZWwpCit7CisgIGlmIChu ZWVkX2F0b21pY19iYXJyaWVyX3AgKG1vZGVsLCBmYWxzZSkpCisgICAgZW1p dF9pbnNuIChnZW5fbWVtb3J5X2JhcnJpZXIgKCkpOworfQorCisvKiBFeHBh bmQgYSBjb21wYXJlIGFuZCBzd2FwIHBhdHRlcm4uICAqLworCitzdGF0aWMg dm9pZAorZW1pdF91bmxpa2VseV9qdW1wIChydHggaW5zbikKK3sKKyAgaW50 IHZlcnlfdW5saWtlbHkgPSBSRUdfQlJfUFJPQl9CQVNFIC8gMTAwIC0gMTsK KworICBpbnNuID0gZW1pdF9qdW1wX2luc24gKGluc24pOworICBhZGRfaW50 X3JlZ19ub3RlIChpbnNuLCBSRUdfQlJfUFJPQiwgdmVyeV91bmxpa2VseSk7 Cit9CisKKy8qIEV4cGFuZCBjb2RlIHRvIHBlcmZvcm0gYSA4IG9yIDE2LWJp dCBjb21wYXJlIGFuZCBzd2FwIGJ5IGRvaW5nCisgICAzMi1iaXQgY29tcGFy ZSBhbmQgc3dhcCBvbiB0aGUgd29yZCBjb250YWluaW5nIHRoZSBieXRlIG9y CisgICBoYWxmLXdvcmQuICBUaGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGEgd2Vh ayBhbmQgYSBzdHJvbmcgQ0FTIGlzIHRoYXQKKyAgIHRoZSB3ZWFrIHZlcnNp b24gbWF5IHNpbXBseSBmYWlsLiAgVGhlIHN0cm9uZyB2ZXJzaW9uIHJlbGll cyBvbiB0d28KKyAgIGxvb3BzLCBvbmUgY2hlY2tzIGlmIHRoZSBTQ09ORCBv cCBpcyBzdWNjc2Z1bGx5IG9yIG5vdCwgdGhlIG90aGVyCisgICBjaGVja3Mg aWYgdGhlIDMyIGJpdCBhY2Nlc3NlZCBsb2NhdGlvbiB3aGljaCBjb250YWlu cyB0aGUgOCBvciAxNgorICAgYml0IGRhdHVtIGlzIG5vdCBjaGFuZ2VkIGJ5 IG90aGVyIHRocmVhZC4gIFRoZSBmaXJzdCBsb29wIGlzCisgICBpbXBsZW1l bnRlZCBieSB0aGUgYXRvbWljX2NvbXBhcmVfYW5kX3N3YXBzaV8xIHBhdHRl cm4uICBUaGUgc2Vjb25kCisgICBsb29wcyBpcyBpbXBsZW1lbnRlZCBieSB0 aGlzIHJvdXRpbmUuICAqLworCitzdGF0aWMgdm9pZAorYXJjX2V4cGFuZF9j b21wYXJlX2FuZF9zd2FwX3FoIChydHggYm9vbF9yZXN1bHQsIHJ0eCByZXN1 bHQsIHJ0eCBtZW0sCisJCQkJcnR4IG9sZHZhbCwgcnR4IG5ld3ZhbCwgcnR4 IHdlYWssCisJCQkJcnR4IG1vZF9zLCBydHggbW9kX2YpCit7CisgIHJ0eCBh ZGRyMSA9IGZvcmNlX3JlZyAoUG1vZGUsIFhFWFAgKG1lbSwgMCkpOworICBy dHggYWRkciA9IGdlbl9yZWdfcnR4IChQbW9kZSk7CisgIHJ0eCBvZmYgPSBn ZW5fcmVnX3J0eCAoU0ltb2RlKTsKKyAgcnR4IG9sZHYgPSBnZW5fcmVnX3J0 eCAoU0ltb2RlKTsKKyAgcnR4IG5ld3YgPSBnZW5fcmVnX3J0eCAoU0ltb2Rl KTsKKyAgcnR4IG9sZHZhbHVlID0gZ2VuX3JlZ19ydHggKFNJbW9kZSk7Cisg IHJ0eCBuZXd2YWx1ZSA9IGdlbl9yZWdfcnR4IChTSW1vZGUpOworICBydHgg cmVzID0gZ2VuX3JlZ19ydHggKFNJbW9kZSk7CisgIHJ0eCByZXN2ID0gZ2Vu X3JlZ19ydHggKFNJbW9kZSk7CisgIHJ0eCBtZW1zaSwgdmFsLCBtYXNrLCBl bmRfbGFiZWwsIGxvb3BfbGFiZWwsIGNjLCB4OworICBtYWNoaW5lX21vZGUg bW9kZTsKKyAgYm9vbCBpc193ZWFrID0gKHdlYWsgIT0gY29uc3QwX3J0eCk7 CisKKyAgLyogVHJ1bmNhdGUgdGhlIGFkZHJlc3MuICAqLworICBlbWl0X2lu c24gKGdlbl9ydHhfU0VUIChhZGRyLAorCQkJICBnZW5fcnR4X0FORCAoUG1v ZGUsIGFkZHIxLCBHRU5fSU5UICgtNCkpKSk7CisKKyAgLyogQ29tcHV0ZSB0 aGUgZGF0dW0gb2Zmc2V0LiAgKi8KKyAgZW1pdF9pbnNuIChnZW5fcnR4X1NF VCAob2ZmLAorCQkJICBnZW5fcnR4X0FORCAoU0ltb2RlLCBhZGRyMSwgR0VO X0lOVCAoMykpKSk7CisgIGlmIChUQVJHRVRfQklHX0VORElBTikKKyAgICBl bWl0X2luc24gKGdlbl9ydHhfU0VUIChvZmYsCisJCQkgICAgZ2VuX3J0eF9N SU5VUyAoU0ltb2RlLAorCQkJCQkgICAoR0VUX01PREUgKG1lbSkgPT0gUUlt b2RlKSA/CisJCQkJCSAgIEdFTl9JTlQgKDMpIDogR0VOX0lOVCAoMiksIG9m ZikpKTsKKworICAvKiBOb3JtYWwgcmVhZCBmcm9tIHRydW5jYXRlZCBhZGRy ZXNzLiAgKi8KKyAgbWVtc2kgPSBnZW5fcnR4X01FTSAoU0ltb2RlLCBhZGRy KTsKKyAgc2V0X21lbV9hbGlhc19zZXQgKG1lbXNpLCBBTElBU19TRVRfTUVN T1JZX0JBUlJJRVIpOworICBNRU1fVk9MQVRJTEVfUCAobWVtc2kpID0gTUVN X1ZPTEFUSUxFX1AgKG1lbSk7CisKKyAgdmFsID0gY29weV90b19yZWcgKG1l bXNpKTsKKworICAvKiBDb252ZXJ0IHRoZSBvZmZzZXQgaW4gYml0cy4gICov CisgIGVtaXRfaW5zbiAoZ2VuX3J0eF9TRVQgKG9mZiwKKwkJCSAgZ2VuX3J0 eF9BU0hJRlQgKFNJbW9kZSwgb2ZmLCBHRU5fSU5UICgzKSkpKTsKKworICAv KiBHZXQgdGhlIHByb3BlciBtYXNrLiAgKi8KKyAgaWYgKEdFVF9NT0RFICht ZW0pID09IFFJbW9kZSkKKyAgICBtYXNrID0gZm9yY2VfcmVnIChTSW1vZGUs IEdFTl9JTlQgKDB4ZmYpKTsKKyAgZWxzZQorICAgIG1hc2sgPSBmb3JjZV9y ZWcgKFNJbW9kZSwgR0VOX0lOVCAoMHhmZmZmKSk7CisKKyAgZW1pdF9pbnNu IChnZW5fcnR4X1NFVCAobWFzaywKKwkJCSAgZ2VuX3J0eF9BU0hJRlQgKFNJ bW9kZSwgbWFzaywgb2ZmKSkpOworCisgIC8qIFByZXBhcmUgdGhlIG9sZCBh bmQgbmV3IHZhbHVlcy4gICovCisgIGVtaXRfaW5zbiAoZ2VuX3J0eF9TRVQg KHZhbCwKKwkJCSAgZ2VuX3J0eF9BTkQgKFNJbW9kZSwgZ2VuX3J0eF9OT1Qg KFNJbW9kZSwgbWFzayksCisJCQkJICAgICAgIHZhbCkpKTsKKworICBvbGR2 YWwgPSBnZW5fbG93cGFydCAoU0ltb2RlLCBvbGR2YWwpOworICBlbWl0X2lu c24gKGdlbl9ydHhfU0VUIChvbGR2LAorCQkJICBnZW5fcnR4X0FTSElGVCAo U0ltb2RlLCBvbGR2YWwsIG9mZikpKTsKKworICBuZXd2YWwgPSBnZW5fbG93 cGFydF9jb21tb24gKFNJbW9kZSwgbmV3dmFsKTsKKyAgZW1pdF9pbnNuIChn ZW5fcnR4X1NFVCAobmV3diwKKwkJCSAgZ2VuX3J0eF9BU0hJRlQgKFNJbW9k ZSwgbmV3dmFsLCBvZmYpKSk7CisKKyAgZW1pdF9pbnNuIChnZW5fcnR4X1NF VCAob2xkdiwKKwkJCSAgZ2VuX3J0eF9BTkQgKFNJbW9kZSwgb2xkdiwgbWFz aykpKTsKKworICBlbWl0X2luc24gKGdlbl9ydHhfU0VUIChuZXd2LAorCQkJ ICBnZW5fcnR4X0FORCAoU0ltb2RlLCBuZXd2LCBtYXNrKSkpOworCisgIGlm ICghaXNfd2VhaykKKyAgICB7CisgICAgICBlbmRfbGFiZWwgPSBnZW5fbGFi ZWxfcnR4ICgpOworICAgICAgbG9vcF9sYWJlbCA9IGdlbl9sYWJlbF9ydHgg KCk7CisgICAgICBlbWl0X2xhYmVsIChsb29wX2xhYmVsKTsKKyAgICB9CisK KyAgLyogTWFrZSB0aGUgb2xkIGFuZCBuZXcgdmFsdWVzLiAgKi8KKyAgZW1p dF9pbnNuIChnZW5fcnR4X1NFVCAob2xkdmFsdWUsCisJCQkgIGdlbl9ydHhf SU9SIChTSW1vZGUsIG9sZHYsIHZhbCkpKTsKKworICBlbWl0X2luc24gKGdl bl9ydHhfU0VUIChuZXd2YWx1ZSwKKwkJCSAgZ2VuX3J0eF9JT1IgKFNJbW9k ZSwgbmV3diwgdmFsKSkpOworCisgIC8qIFRyeSBhbiAzMmJpdCBhdG9taWMg Y29tcGFyZSBhbmQgc3dhcC4gIEl0IGNsb2JiZXJzIHRoZSBDQworICAgICBy ZWdpc3Rlci4gICovCisgIGVtaXRfaW5zbiAoZ2VuX2F0b21pY19jb21wYXJl X2FuZF9zd2Fwc2lfMSAocmVzLCBtZW1zaSwgb2xkdmFsdWUsIG5ld3ZhbHVl LAorCQkJCQkgICAgICB3ZWFrLCBtb2RfcywgbW9kX2YpKTsKKworICAvKiBS ZWdhcmRsZXNzIG9mIHRoZSB3ZWFrbmVzcyBvZiB0aGUgb3BlcmF0aW9uLCBh IHByb3BlciBib29sZWFuCisgICAgIHJlc3VsdCBuZWVkcyB0byBiZSBwcm92 aWRlZC4gICovCisgIHggPSBnZW5fcnR4X1JFRyAoQ0NfWm1vZGUsIENDX1JF Ryk7CisgIHggPSBnZW5fcnR4X0VRIChTSW1vZGUsIHgsIGNvbnN0MF9ydHgp OworICBlbWl0X2luc24gKGdlbl9ydHhfU0VUIChib29sX3Jlc3VsdCwgeCkp OworCisgIGlmICghaXNfd2VhaykKKyAgICB7CisgICAgICAvKiBDaGVjayB0 aGUgcmVzdWx0czogaWYgdGhlIGF0b21pYyBvcCBpcyBzdWNjZXNzZnVsbHkg dGhlIGdvdG8KKwkgdG8gZW5kIGxhYmVsLiAgKi8KKyAgICAgIHggPSBnZW5f cnR4X1JFRyAoQ0NfWm1vZGUsIENDX1JFRyk7CisgICAgICB4ID0gZ2VuX3J0 eF9FUSAoVk9JRG1vZGUsIHgsIGNvbnN0MF9ydHgpOworICAgICAgeCA9IGdl bl9ydHhfSUZfVEhFTl9FTFNFIChWT0lEbW9kZSwgeCwKKwkJCQlnZW5fcnR4 X0xBQkVMX1JFRiAoUG1vZGUsIGVuZF9sYWJlbCksIHBjX3J0eCk7CisgICAg ICBlbWl0X2p1bXBfaW5zbiAoZ2VuX3J0eF9TRVQgKHBjX3J0eCwgeCkpOwor CisgICAgICAvKiBXYWl0IGZvciB0aGUgcmlnaHQgbW9tZW50IHdoZW4gdGhl IGFjY2Vzc2VkIDMyLWJpdCBsb2NhdGlvbgorCSBpcyBzdGFibGUuICAqLwor ICAgICAgZW1pdF9pbnNuIChnZW5fcnR4X1NFVCAocmVzdiwKKwkJCSAgICAg IGdlbl9ydHhfQU5EIChTSW1vZGUsIGdlbl9ydHhfTk9UIChTSW1vZGUsIG1h c2spLAorCQkJCQkgICByZXMpKSk7CisgICAgICBtb2RlID0gU0VMRUNUX0ND X01PREUgKE5FLCByZXN2LCB2YWwpOworICAgICAgY2MgPSBnZW5fcnR4X1JF RyAobW9kZSwgQ0NfUkVHKTsKKyAgICAgIGVtaXRfaW5zbiAoZ2VuX3J0eF9T RVQgKGNjLCBnZW5fcnR4X0NPTVBBUkUgKG1vZGUsIHJlc3YsIHZhbCkpKTsK KworICAgICAgLyogU2V0IHRoZSBuZXcgdmFsdWUgb2YgdGhlIDMyIGJpdCBs b2NhdGlvbiwgcHJvcGVyIG1hc2tlZC4gICovCisgICAgICBlbWl0X2luc24g KGdlbl9ydHhfU0VUICh2YWwsIHJlc3YpKTsKKworICAgICAgLyogVHJ5IGFn YWluIGlmIGxvY2F0aW9uIGlzIHVuc3RhYmxlLiAgRmFsbCB0aHJvdWdoIGlm IG9ubHkKKwkgc2NvbmQgb3AgZmFpbGVkLiAgKi8KKyAgICAgIHggPSBnZW5f cnR4X05FIChWT0lEbW9kZSwgY2MsIGNvbnN0MF9ydHgpOworICAgICAgeCA9 IGdlbl9ydHhfSUZfVEhFTl9FTFNFIChWT0lEbW9kZSwgeCwKKwkJCQlnZW5f cnR4X0xBQkVMX1JFRiAoUG1vZGUsIGxvb3BfbGFiZWwpLCBwY19ydHgpOwor ICAgICAgZW1pdF91bmxpa2VseV9qdW1wIChnZW5fcnR4X1NFVCAocGNfcnR4 LCB4KSk7CisKKyAgICAgIGVtaXRfbGFiZWwgKGVuZF9sYWJlbCk7CisgICAg fQorCisgIC8qIEVuZDogcHJvcGVyIHJldHVybiB0aGUgcmVzdWx0IGZvciB0 aGUgZ2l2ZW4gbW9kZS4gICovCisgIGVtaXRfaW5zbiAoZ2VuX3J0eF9TRVQg KHJlcywKKwkJCSAgZ2VuX3J0eF9BTkQgKFNJbW9kZSwgcmVzLCBtYXNrKSkp OworCisgIGVtaXRfaW5zbiAoZ2VuX3J0eF9TRVQgKHJlcywKKwkJCSAgZ2Vu X3J0eF9MU0hJRlRSVCAoU0ltb2RlLCByZXMsIG9mZikpKTsKKworICBlbWl0 X21vdmVfaW5zbiAocmVzdWx0LCBnZW5fbG93cGFydCAoR0VUX01PREUgKHJl c3VsdCksIHJlcykpOworfQorCisvKiBIZWxwZXIgZnVuY3Rpb24gdXNlZCBi eSAiYXRvbWljX2NvbXBhcmVfYW5kX3N3YXAiIGV4cGFuZAorICAgcGF0dGVy bi4gICovCisKK3ZvaWQKK2FyY19leHBhbmRfY29tcGFyZV9hbmRfc3dhcCAo cnR4IG9wZXJhbmRzW10pCit7CisgIHJ0eCBidmFsLCBydmFsLCBtZW0sIG9s ZHZhbCwgbmV3dmFsLCBpc193ZWFrLCBtb2RfcywgbW9kX2YsIHg7CisgIG1h Y2hpbmVfbW9kZSBtb2RlOworCisgIGJ2YWwgPSBvcGVyYW5kc1swXTsKKyAg cnZhbCA9IG9wZXJhbmRzWzFdOworICBtZW0gPSBvcGVyYW5kc1syXTsKKyAg b2xkdmFsID0gb3BlcmFuZHNbM107CisgIG5ld3ZhbCA9IG9wZXJhbmRzWzRd OworICBpc193ZWFrID0gb3BlcmFuZHNbNV07CisgIG1vZF9zID0gb3BlcmFu ZHNbNl07CisgIG1vZF9mID0gb3BlcmFuZHNbN107CisgIG1vZGUgPSBHRVRf TU9ERSAobWVtKTsKKworICBpZiAocmVnX292ZXJsYXBfbWVudGlvbmVkX3Ag KHJ2YWwsIG9sZHZhbCkpCisgICAgb2xkdmFsID0gY29weV90b19yZWcgKG9s ZHZhbCk7CisKKyAgaWYgKG1vZGUgPT0gU0ltb2RlKQorICAgIHsKKyAgICAg IGVtaXRfaW5zbiAoZ2VuX2F0b21pY19jb21wYXJlX2FuZF9zd2Fwc2lfMSAo cnZhbCwgbWVtLCBvbGR2YWwsIG5ld3ZhbCwKKwkJCQkJCSAgaXNfd2Vhaywg bW9kX3MsIG1vZF9mKSk7CisgICAgICB4ID0gZ2VuX3J0eF9SRUcgKENDX1pt b2RlLCBDQ19SRUcpOworICAgICAgeCA9IGdlbl9ydHhfRVEgKFNJbW9kZSwg eCwgY29uc3QwX3J0eCk7CisgICAgICBlbWl0X2luc24gKGdlbl9ydHhfU0VU IChidmFsLCB4KSk7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgYXJj X2V4cGFuZF9jb21wYXJlX2FuZF9zd2FwX3FoIChidmFsLCBydmFsLCBtZW0s IG9sZHZhbCwgbmV3dmFsLAorCQkJCSAgICAgIGlzX3dlYWssIG1vZF9zLCBt b2RfZik7CisgICAgfQorfQorCisvKiBIZWxwZXIgZnVuY3Rpb24gdXNlZCBi eSB0aGUgImF0b21pY19jb21wYXJlX2FuZF9zd2Fwc2lfMSIKKyAgIHBhdHRl cm4uICAqLworCit2b2lkCithcmNfc3BsaXRfY29tcGFyZV9hbmRfc3dhcCAo cnR4IG9wZXJhbmRzW10pCit7CisgIHJ0eCBydmFsLCBtZW0sIG9sZHZhbCwg bmV3dmFsOworICBtYWNoaW5lX21vZGUgbW9kZTsKKyAgZW51bSBtZW1tb2Rl bCBtb2RfcywgbW9kX2Y7CisgIGJvb2wgaXNfd2VhazsKKyAgcnR4IGxhYmVs MSwgbGFiZWwyLCB4LCBjb25kOworCisgIHJ2YWwgPSBvcGVyYW5kc1swXTsK KyAgbWVtID0gb3BlcmFuZHNbMV07CisgIG9sZHZhbCA9IG9wZXJhbmRzWzJd OworICBuZXd2YWwgPSBvcGVyYW5kc1szXTsKKyAgaXNfd2VhayA9IChvcGVy YW5kc1s0XSAhPSBjb25zdDBfcnR4KTsKKyAgbW9kX3MgPSAoZW51bSBtZW1t b2RlbCkgSU5UVkFMIChvcGVyYW5kc1s1XSk7CisgIG1vZF9mID0gKGVudW0g bWVtbW9kZWwpIElOVFZBTCAob3BlcmFuZHNbNl0pOworICBtb2RlID0gR0VU X01PREUgKG1lbSk7CisKKyAgLyogQVJDIGF0b21pYyBvcHMgd29yayBvbmx5 IHdpdGggMzItYml0IGFsaWduZWQgbWVtb3JpZXMuICAqLworICBnY2NfYXNz ZXJ0IChtb2RlID09IFNJbW9kZSk7CisKKyAgYXJjX3ByZV9hdG9taWNfYmFy cmllciAobW9kX3MpOworCisgIGxhYmVsMSA9IE5VTExfUlRYOworICBpZiAo IWlzX3dlYWspCisgICAgeworICAgICAgbGFiZWwxID0gZ2VuX2xhYmVsX3J0 eCAoKTsKKyAgICAgIGVtaXRfbGFiZWwgKGxhYmVsMSk7CisgICAgfQorICBs YWJlbDIgPSBnZW5fbGFiZWxfcnR4ICgpOworCisgIC8qIExvYWQgZXhjbHVz aXZlLiAgKi8KKyAgZW1pdF9pbnNuIChnZW5fYXJjX2xvYWRfZXhjbHVzaXZl c2kgKHJ2YWwsIG1lbSkpOworCisgIC8qIENoZWNrIGlmIGl0IGlzIG9sZHZh bC4gICovCisgIG1vZGUgPSBTRUxFQ1RfQ0NfTU9ERSAoTkUsIHJ2YWwsIG9s ZHZhbCk7CisgIGNvbmQgPSBnZW5fcnR4X1JFRyAobW9kZSwgQ0NfUkVHKTsK KyAgZW1pdF9pbnNuIChnZW5fcnR4X1NFVCAoY29uZCwgZ2VuX3J0eF9DT01Q QVJFIChtb2RlLCBydmFsLCBvbGR2YWwpKSk7CisKKyAgeCA9IGdlbl9ydHhf TkUgKFZPSURtb2RlLCBjb25kLCBjb25zdDBfcnR4KTsKKyAgeCA9IGdlbl9y dHhfSUZfVEhFTl9FTFNFIChWT0lEbW9kZSwgeCwKKwkJCSAgICBnZW5fcnR4 X0xBQkVMX1JFRiAoUG1vZGUsIGxhYmVsMiksIHBjX3J0eCk7CisgIGVtaXRf dW5saWtlbHlfanVtcCAoZ2VuX3J0eF9TRVQgKHBjX3J0eCwgeCkpOworCisg IC8qIEV4Y2x1c2l2ZWx5IHN0b3JlIG5ldyBpdGVtLiAgU3RvcmUgY2xvYmJl cnMgQ0MgcmVnLiAgKi8KKyAgZW1pdF9pbnNuIChnZW5fYXJjX3N0b3JlX2V4 Y2x1c2l2ZXNpIChtZW0sIG5ld3ZhbCkpOworCisgIGlmICghaXNfd2VhaykK KyAgICB7CisgICAgICAvKiBDaGVjayB0aGUgcmVzdWx0IG9mIHRoZSBzdG9y ZS4gICovCisgICAgICBjb25kID0gZ2VuX3J0eF9SRUcgKENDX1ptb2RlLCBD Q19SRUcpOworICAgICAgeCA9IGdlbl9ydHhfTkUgKFZPSURtb2RlLCBjb25k LCBjb25zdDBfcnR4KTsKKyAgICAgIHggPSBnZW5fcnR4X0lGX1RIRU5fRUxT RSAoVk9JRG1vZGUsIHgsCisJCQkJZ2VuX3J0eF9MQUJFTF9SRUYgKFBtb2Rl LCBsYWJlbDEpLCBwY19ydHgpOworICAgICAgZW1pdF91bmxpa2VseV9qdW1w IChnZW5fcnR4X1NFVCAocGNfcnR4LCB4KSk7CisgICAgfQorCisgIGlmICht b2RfZiAhPSBNRU1NT0RFTF9SRUxBWEVEKQorICAgIGVtaXRfbGFiZWwgKGxh YmVsMik7CisKKyAgYXJjX3Bvc3RfYXRvbWljX2JhcnJpZXIgKG1vZF9zKTsK KworICBpZiAobW9kX2YgPT0gTUVNTU9ERUxfUkVMQVhFRCkKKyAgICBlbWl0 X2xhYmVsIChsYWJlbDIpOworfQorCisvKiBFeHBhbmQgYW4gYXRvbWljIGZl dGNoLWFuZC1vcGVyYXRlIHBhdHRlcm4uICBDT0RFIGlzIHRoZSBiaW5hcnkg b3BlcmF0aW9uCisgICB0byBwZXJmb3JtLiAgTUVNIGlzIHRoZSBtZW1vcnkg b24gd2hpY2ggdG8gb3BlcmF0ZS4gIFZBTCBpcyB0aGUgc2Vjb25kCisgICBv cGVyYW5kIG9mIHRoZSBiaW5hcnkgb3BlcmF0b3IuICBCRUZPUkUgYW5kIEFG VEVSIGFyZSBvcHRpb25hbCBsb2NhdGlvbnMgdG8KKyAgIHJldHVybiB0aGUg dmFsdWUgb2YgTUVNIGVpdGhlciBiZWZvcmUgb2YgYWZ0ZXIgdGhlIG9wZXJh dGlvbi4gIE1PREVMX1JUWAorICAgaXMgYSBDT05TVF9JTlQgY29udGFpbmlu ZyB0aGUgbWVtb3J5IG1vZGVsIHRvIHVzZS4gICovCisKK3ZvaWQKK2FyY19l eHBhbmRfYXRvbWljX29wIChlbnVtIHJ0eF9jb2RlIGNvZGUsIHJ0eCBtZW0s IHJ0eCB2YWwsCisJCQkgcnR4IG9yaWdfYmVmb3JlLCBydHggb3JpZ19hZnRl ciwgcnR4IG1vZGVsX3J0eCkKK3sKKyAgZW51bSBtZW1tb2RlbCBtb2RlbCA9 IChlbnVtIG1lbW1vZGVsKSBJTlRWQUwgKG1vZGVsX3J0eCk7CisgIG1hY2hp bmVfbW9kZSBtb2RlID0gR0VUX01PREUgKG1lbSk7CisgIHJ0eCBsYWJlbCwg eCwgY29uZDsKKyAgcnR4IGJlZm9yZSA9IG9yaWdfYmVmb3JlLCBhZnRlciA9 IG9yaWdfYWZ0ZXI7CisKKyAgLyogQVJDIGF0b21pYyBvcHMgd29yayBvbmx5 IHdpdGggMzItYml0IGFsaWduZWQgbWVtb3JpZXMuICAqLworICBnY2NfYXNz ZXJ0IChtb2RlID09IFNJbW9kZSk7CisKKyAgYXJjX3ByZV9hdG9taWNfYmFy cmllciAobW9kZWwpOworCisgIGxhYmVsID0gZ2VuX2xhYmVsX3J0eCAoKTsK KyAgZW1pdF9sYWJlbCAobGFiZWwpOworICBsYWJlbCA9IGdlbl9ydHhfTEFC RUxfUkVGIChWT0lEbW9kZSwgbGFiZWwpOworCisgIGlmIChiZWZvcmUgPT0g TlVMTF9SVFgpCisgICAgYmVmb3JlID0gZ2VuX3JlZ19ydHggKG1vZGUpOwor CisgIGlmIChhZnRlciA9PSBOVUxMX1JUWCkKKyAgICBhZnRlciA9IGdlbl9y ZWdfcnR4IChtb2RlKTsKKworICAvKiBMb2FkIGV4Y2x1c2l2ZS4gICovCisg IGVtaXRfaW5zbiAoZ2VuX2FyY19sb2FkX2V4Y2x1c2l2ZXNpIChiZWZvcmUs IG1lbSkpOworCisgIHN3aXRjaCAoY29kZSkKKyAgICB7CisgICAgY2FzZSBO T1Q6CisgICAgICB4ID0gZ2VuX3J0eF9BTkQgKG1vZGUsIGJlZm9yZSwgdmFs KTsKKyAgICAgIGVtaXRfaW5zbiAoZ2VuX3J0eF9TRVQgKGFmdGVyLCB4KSk7 CisgICAgICB4ID0gZ2VuX3J0eF9OT1QgKG1vZGUsIGFmdGVyKTsKKyAgICAg IGVtaXRfaW5zbiAoZ2VuX3J0eF9TRVQgKGFmdGVyLCB4KSk7CisgICAgICBi cmVhazsKKworICAgIGNhc2UgTUlOVVM6CisgICAgICBpZiAoQ09OU1RfSU5U X1AgKHZhbCkpCisJeworCSAgdmFsID0gR0VOX0lOVCAoLUlOVFZBTCAodmFs KSk7CisJICBjb2RlID0gUExVUzsKKwl9CisKKyAgICAgIC8qIEZBTExUSFJV LiAgKi8KKyAgICBkZWZhdWx0OgorICAgICAgeCA9IGdlbl9ydHhfZm10X2Vl IChjb2RlLCBtb2RlLCBiZWZvcmUsIHZhbCk7CisgICAgICBlbWl0X2luc24g KGdlbl9ydHhfU0VUIChhZnRlciwgeCkpOworICAgICAgYnJlYWs7CisgICB9 CisKKyAgLyogRXhjbHVzaXZlbHkgc3RvcmUgbmV3IGl0ZW0uICBTdG9yZSBj bG9iYmVycyBDQyByZWcuICAqLworICBlbWl0X2luc24gKGdlbl9hcmNfc3Rv cmVfZXhjbHVzaXZlc2kgKG1lbSwgYWZ0ZXIpKTsKKworICAvKiBDaGVjayB0 aGUgcmVzdWx0IG9mIHRoZSBzdG9yZS4gICovCisgIGNvbmQgPSBnZW5fcnR4 X1JFRyAoQ0NfWm1vZGUsIENDX1JFRyk7CisgIHggPSBnZW5fcnR4X05FIChW T0lEbW9kZSwgY29uZCwgY29uc3QwX3J0eCk7CisgIHggPSBnZW5fcnR4X0lG X1RIRU5fRUxTRSAoVk9JRG1vZGUsIHgsCisJCQkgICAgbGFiZWwsIHBjX3J0 eCk7CisgIGVtaXRfdW5saWtlbHlfanVtcCAoZ2VuX3J0eF9TRVQgKHBjX3J0 eCwgeCkpOworCisgIGFyY19wb3N0X2F0b21pY19iYXJyaWVyIChtb2RlbCk7 Cit9CisKIHN0cnVjdCBnY2NfdGFyZ2V0IHRhcmdldG0gPSBUQVJHRVRfSU5J VElBTElaRVI7CiAKICNpbmNsdWRlICJndC1hcmMuaCIKZGlmZiAtLWdpdCBh L2djYy9jb25maWcvYXJjL2FyYy5oIGIvZ2NjL2NvbmZpZy9hcmMvYXJjLmgK aW5kZXggZDMxMmY5Zi4uYzg5NTcyNSAxMDA2NDQKLS0tIGEvZ2NjL2NvbmZp Zy9hcmMvYXJjLmgKKysrIGIvZ2NjL2NvbmZpZy9hcmMvYXJjLmgKQEAgLTg4 LDYgKzg4LDEwIEBAIGFsb25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUgQ09Q WUlORzMuICBJZiBub3Qgc2VlCiAgICAgICB7CQkJCQlcCiAJYnVpbHRpbl9k ZWZpbmUgKCJfX0hTX18iKTsJXAogICAgICAgfQkJCQkJXAorICAgIGlmIChU QVJHRVRfQVRPTUlDKQkJCVwKKyAgICAgIHsJCQkJCVwKKwlidWlsdGluX2Rl ZmluZSAoIl9fQVJDX0FUT01JQ19fIik7CVwKKyAgICAgIH0JCQkJCVwKICAg ICBpZiAoVEFSR0VUX05PUk0pCQkJXAogICAgICAgewkJCQkJXAogCWJ1aWx0 aW5fZGVmaW5lICgiX19BUkNfTk9STV9fIik7XApAQCAtMTUzLDcgKzE1Nyw3 IEBAIGFsb25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJ ZiBub3Qgc2VlCiAle21jcHU9QVJDNzAwfCFtY3B1PSo6JXttcnRzY319IFwK ICV7bWNwdT1BUkNIUzotbUhTfSBcCiAle21jcHU9QVJDRU06LW1FTX0gXAot IgorJXttYXRvbWljOi1tbG9ja30iCiAKICNpZiBERUZBVUxUX0xJQkMgPT0g TElCQ19VQ0xJQkMKIC8qIE5vdGUgdGhhdCB0aGUgZGVmYXVsdCBpcyB0byBs aW5rIGFnYWluc3QgZHluYW1pYyBsaWJyYXJpZXMsIGlmIHRoZXkgYXJlCmRp ZmYgLS1naXQgYS9nY2MvY29uZmlnL2FyYy9hcmMubWQgYi9nY2MvY29uZmln L2FyYy9hcmMubWQKaW5kZXggMWQwNzBhMy4uYWMxODFhOSAxMDA2NDQKLS0t IGEvZ2NjL2NvbmZpZy9hcmMvYXJjLm1kCisrKyBiL2djYy9jb25maWcvYXJj L2FyYy5tZApAQCAtMTI4LDYgKzEyOCwxMiBAQAogICAgKFZVTlNQRUNfVU5J TVBfUyAyOCkgOyBibG9ja2FnZSBpbnNuIGZvciB1bmltcF9zIGdlbmVyYXRp b24KICAgIChWVU5TUEVDX05PUCAyOSkgOyB2b2xhdGlsZSBOT1AKIAorICAg KFVOU1BFQ19BUkNfTUVNQkFSIDMwKQorICAgKFZVTlNQRUNfQVJDX0NBUyAz MSkKKyAgIChWVU5TUEVDX0FSQ19MTCAzMikKKyAgIChWVU5TUEVDX0FSQ19T QyAzMykKKyAgIChWVU5TUEVDX0FSQ19FWCAzNCkKKwogICAgKFIwX1JFRyAw KQogICAgKFIxX1JFRyAxKQogICAgKFIyX1JFRyAyKQpAQCAtNTUzMSwzICs1 NTM3LDYgQEAKIChpbmNsdWRlICJmcHgubWQiKQogCiAoaW5jbHVkZSAic2lt ZGV4dC5tZCIpCisKKzs7IGluY2x1ZGUgYXRvbWljIGV4dGVuc2lvbnMKKyhp bmNsdWRlICJhdG9taWMubWQiKQpkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZy9h cmMvYXJjLm9wdCBiL2djYy9jb25maWcvYXJjL2FyYy5vcHQKaW5kZXggMGMx MGM2Ny4uYzRkNzMwNiAxMDA2NDQKLS0tIGEvZ2NjL2NvbmZpZy9hcmMvYXJj Lm9wdAorKysgYi9nY2MvY29uZmlnL2FyYy9hcmMub3B0CkBAIC00MTQsMyAr NDE0LDYgQEAgVGFyZ2V0IEpvaW5lZAogbW1hY18KIFRhcmdldCBKb2luZWQK IAorbWF0b21pYworVGFyZ2V0IFJlcG9ydCBNYXNrKEFUT01JQykKK0VuYWJs ZSBhdG9taWMgaW5zdHJ1Y3Rpb25zLgpkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZp Zy9hcmMvYXRvbWljLm1kIGIvZ2NjL2NvbmZpZy9hcmMvYXRvbWljLm1kCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2ZWM5OTEKLS0t IC9kZXYvbnVsbAorKysgYi9nY2MvY29uZmlnL2FyYy9hdG9taWMubWQKQEAg LTAsMCArMSwyMTUgQEAKKzs7IEdDQyBtYWNoaW5lIGRlc2NyaXB0aW9uIGZv ciBBUkMgYXRvbWljIGluc3RydWN0aW9ucy4KKzs7IENvcHlyaWdodCAoQykg MjAxNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKzs7Cis7OyBU aGlzIGZpbGUgaXMgcGFydCBvZiBHQ0MuCis7OworOzsgR0NDIGlzIGZyZWUg c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2Rp ZnkKKzs7IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Cis7OyB0aGUgRnJlZSBT b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQg eW91ciBvcHRpb24pCis7OyBhbnkgbGF0ZXIgdmVyc2lvbi4KKzs7Cis7OyBH Q0MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl IHVzZWZ1bCwKKzs7IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91 dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCis7OyBNRVJDSEFOVEFC SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT ZWUgdGhlCis7OyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y ZSBkZXRhaWxzLgorOzsKKzs7IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh IGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCis7OyBh bG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90 IHNlZQorOzsgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCiso ZGVmaW5lX21vZGVfaXRlcmF0b3IgUUhTSSBbUUkgSEkgU0ldKQorKGRlZmlu ZV9jb2RlX2l0ZXJhdG9yIGF0b21pY29wIFtwbHVzIG1pbnVzIGlvciB4b3Ig YW5kXSkKKyhkZWZpbmVfY29kZV9hdHRyIGF0b21pY19vcHRhYgorICBbKGlv ciAib3IiKSAoeG9yICJ4b3IiKSAoYW5kICJhbmQiKSAocGx1cyAiYWRkIikg KG1pbnVzICJzdWIiKV0pCisKKyhkZWZpbmVfZXhwYW5kICJtZW1vcnlfYmFy cmllciIKKyAgWyhzZXQgKG1hdGNoX2R1cCAwKQorCSh1bnNwZWM6QkxLIFso bWF0Y2hfZHVwIDApXSBVTlNQRUNfQVJDX01FTUJBUikpXQorICAiIgorewor ICBvcGVyYW5kc1swXSA9IGdlbl9ydHhfTUVNIChCTEttb2RlLCBnZW5fcnR4 X1NDUkFUQ0ggKFBtb2RlKSk7CisgIE1FTV9WT0xBVElMRV9QIChvcGVyYW5k c1swXSkgPSAxOworfSkKKworOzsgQSBjb21waWxlci1vbmx5IG1lbW9yeSBi YXJyaWVyIGZvciBBUkM3MDAuICBHZW5lcmljIGNvZGUsIHdoZW4KKzs7IGNo ZWNraW5nIGZvciB0aGUgZXhpc3RlbmNlIG9mIHZhcmlvdXMgbmFtZWQgcGF0 dGVybnMsIHVzZXMKKzs7IGFzbSgiIjo6OiJtZW1vcnkiKSB3aGVuIHdlIGRv bid0IG5lZWQgYW4gYWN0dWFsIGluc3RydWN0aW9uLgorKGRlZmluZV9pbnNu ICIqbWVtb3J5X2JhcnJpZXIiCisgIFsoc2V0IChtYXRjaF9vcGVyYW5kOkJM SyAwICIiICIiKQorCSh1bnNwZWM6QkxLIFsobWF0Y2hfZHVwIDApXSBVTlNQ RUNfQVJDX01FTUJBUikpXQorICAiIgorICB7CisgICBpZiAoVEFSR0VUX0hT KQorICAgICAgeworICAgICAgIHJldHVybiAiZG1iIjsKKyAgICAgIH0KKyAg ICBlbHNlCisgICAgICB7CisgICAgICAgcmV0dXJuICIiOworICAgICAgfQor ICB9CisgIFsoc2V0X2F0dHIgInR5cGUiICJtdWx0aSIpCisgICAoc2V0X2F0 dHIgImxlbmd0aCIgIjQiKV0pCisKKyhkZWZpbmVfZXhwYW5kICJhdG9taWNf Y29tcGFyZV9hbmRfc3dhcDxtb2RlPiIKKyAgWyhtYXRjaF9vcGVyYW5kOlNJ IDAgInJlZ2lzdGVyX29wZXJhbmQiICIiKQk7OyBib29sIG91dAorICAgKG1h dGNoX29wZXJhbmQ6UUhTSSAxICJyZWdpc3Rlcl9vcGVyYW5kIiAiIikJOzsg dmFsIG91dAorICAgKG1hdGNoX29wZXJhbmQ6UUhTSSAyICJtZW1fbm9vZnNf b3BlcmFuZCIgIiIpOzsgbWVtb3J5CisgICAobWF0Y2hfb3BlcmFuZDpRSFNJ IDMgInJlZ2lzdGVyX29wZXJhbmQiICIiKQk7OyBleHBlY3RlZAorICAgKG1h dGNoX29wZXJhbmQ6UUhTSSA0ICJyZWdpc3Rlcl9vcGVyYW5kIiAiIikJOzsg ZGVzaXJlZAorICAgKG1hdGNoX29wZXJhbmQ6U0kgNSAiY29uc3RfaW50X29w ZXJhbmQiKQk7OyBpc193ZWFrCisgICAobWF0Y2hfb3BlcmFuZDpTSSA2ICJj b25zdF9pbnRfb3BlcmFuZCIpCTs7IG1vZF9zCisgICAobWF0Y2hfb3BlcmFu ZDpTSSA3ICJjb25zdF9pbnRfb3BlcmFuZCIpXQk7OyBtb2RfZgorICAiVEFS R0VUX0FUT01JQyIKK3sKKyAgYXJjX2V4cGFuZF9jb21wYXJlX2FuZF9zd2Fw IChvcGVyYW5kcyk7CisgIERPTkU7Cit9KQorCisoZGVmaW5lX2luc25fYW5k X3NwbGl0ICJhdG9taWNfY29tcGFyZV9hbmRfc3dhcHNpXzEiCisgIFsoc2V0 IChyZWc6Q0NfWiBDQ19SRUcpCQkJCQk7OyBib29sIG91dAorCSh1bnNwZWNf dm9sYXRpbGU6Q0NfWiBbKGNvbnN0X2ludCAwKV0gVlVOU1BFQ19BUkNfQ0FT KSkKKyAgIChzZXQgKG1hdGNoX29wZXJhbmQ6U0kgMCAicmVnaXN0ZXJfb3Bl cmFuZCIgICAgICAiPSZyIikJOzsgdmFsIG91dAorCShtYXRjaF9vcGVyYW5k OlNJIDEgIm1lbV9ub29mc19vcGVyYW5kIiAgICAgICIrQVRPIikpCTs7IG1l bW9yeQorICAgKHNldCAobWF0Y2hfZHVwIDEpCisJKHVuc3BlY192b2xhdGls ZTpTSQorCSAgWyhtYXRjaF9vcGVyYW5kOlNJIDIgInJlZ2lzdGVyX29wZXJh bmQiICAgICAiciIpIDs7IGV4cGVjdAorCSAgIChtYXRjaF9vcGVyYW5kOlNJ IDMgInJlZ2lzdGVyX29wZXJhbmQiICAgICAiciIpIDs7IGRlc2lyZWQKKwkg ICAobWF0Y2hfb3BlcmFuZDpTSSA0ICJjb25zdF9pbnRfb3BlcmFuZCIpCSAg IDs7IGlzX3dlYWsKKwkgICAobWF0Y2hfb3BlcmFuZDpTSSA1ICJjb25zdF9p bnRfb3BlcmFuZCIpCSAgIDs7IG1vZF9zCisJICAgKG1hdGNoX29wZXJhbmQ6 U0kgNiAiY29uc3RfaW50X29wZXJhbmQiKV0JICAgOzsgbW9kX2YKKwkgIFZV TlNQRUNfQVJDX0NBUykpXQorICAiVEFSR0VUX0FUT01JQyIKKyAgIiMiCisg ICImJiByZWxvYWRfY29tcGxldGVkIgorICBbKGNvbnN0X2ludCAwKV0KKyAg eworICAgIGFyY19zcGxpdF9jb21wYXJlX2FuZF9zd2FwIChvcGVyYW5kcyk7 CisgICAgRE9ORTsKKyAgfSkKKworKGRlZmluZV9pbnNuICJhcmNfbG9hZF9l eGNsdXNpdmVzaSIKKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6U0kgMCAicmVn aXN0ZXJfb3BlcmFuZCIgIj1yIikKKwkodW5zcGVjX3ZvbGF0aWxlOlNJCisJ ICBbKG1hdGNoX29wZXJhbmQ6U0kgMSAibWVtX25vb2ZzX29wZXJhbmQiICJB VE8iKV0KKwkgIFZVTlNQRUNfQVJDX0xMKSldCisgICJUQVJHRVRfQVRPTUlD IgorICAibGxvY2sgJTAsJTEiCisgIFsoc2V0X2F0dHIgInR5cGUiICJsb2Fk IikKKyAgIChzZXRfYXR0ciAiaXNjb21wYWN0IiAiZmFsc2UiKQorICAgKHNl dF9hdHRyICJwcmVkaWNhYmxlIiAibm8iKQorICAgKHNldF9hdHRyICJsZW5n dGgiICIqIildKQorCisoZGVmaW5lX2luc24gImFyY19zdG9yZV9leGNsdXNp dmVzaSIKKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6U0kgMCAibWVtX25vb2Zz X29wZXJhbmQiICAgICAiPUFUTyIpCisJKHVuc3BlY192b2xhdGlsZTpTSVso bWF0Y2hfb3BlcmFuZDpTSSAxICJyZWdpc3Rlcl9vcGVyYW5kIiAiciIpXQor CQkJICAgVlVOU1BFQ19BUkNfU0MpKQorICAgKGNsb2JiZXIgKHJlZzpDQ19a IENDX1JFRykpXQorICAiVEFSR0VUX0FUT01JQyIKKyAgInNjb25kICUxLCUw IgorICBbKHNldF9hdHRyICJ0eXBlIiAic3RvcmUiKQorICAgKHNldF9hdHRy ICJpc2NvbXBhY3QiICJmYWxzZSIpCisgICAoc2V0X2F0dHIgInByZWRpY2Fi bGUiICJubyIpCisgICAoc2V0X2F0dHIgImxlbmd0aCIgIioiKV0pCisKKyhk ZWZpbmVfZXhwYW5kICJhdG9taWNfZXhjaGFuZ2VzaSIKKyAgWyhtYXRjaF9v cGVyYW5kOlNJIDAgInJlZ2lzdGVyX29wZXJhbmQiICIiKQorICAgKG1hdGNo X29wZXJhbmQ6U0kgMSAibWVtX25vb2ZzX29wZXJhbmQiICIiKQorICAgKG1h dGNoX29wZXJhbmQ6U0kgMiAicmVnaXN0ZXJfb3BlcmFuZCIgIiIpCisgICAo bWF0Y2hfb3BlcmFuZDpTSSAzICJjb25zdF9pbnRfb3BlcmFuZCIgIiIpXQor ICAiVEFSR0VUX0FUT01JQyIKK3sKKyAgZW51bSBtZW1tb2RlbCBtb2RlbCA9 IChlbnVtIG1lbW1vZGVsKSBJTlRWQUwgKG9wZXJhbmRzWzNdKTsKKworICBp ZiAobW9kZWwgPT0gTUVNTU9ERUxfU0VRX0NTVCkKKyAgICBlbWl0X2luc24g KGdlbl9zeW5jIChjb25zdDFfcnR4KSk7CisgIGVtaXRfaW5zbiAoZ2VuX2V4 Y2hhbmdlc2kgKG9wZXJhbmRzWzBdLCBvcGVyYW5kc1sxXSwgb3BlcmFuZHNb Ml0pKTsKKyAgRE9ORTsKK30pCisKKyhkZWZpbmVfaW5zbiAiZXhjaGFuZ2Vz aSIKKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6U0kgMCAicmVnaXN0ZXJfb3Bl cmFuZCIgIj1yIikKKwkodW5zcGVjX3ZvbGF0aWxlOlNJIFsobWF0Y2hfb3Bl cmFuZDpTSSAxICJtZW1fbm9vZnNfb3BlcmFuZCIgIitBVE8iKV0KKwkJCSAg ICBWVU5TUEVDX0FSQ19FWCkpCisgICAoc2V0IChtYXRjaF9kdXAgMSkKKwko bWF0Y2hfb3BlcmFuZDpTSSAyICJyZWdpc3Rlcl9vcGVyYW5kIiAiMCIpKV0K KyAgIiIKKyAgImV4ICUwLCUxIgorICBbKHNldF9hdHRyICJ0eXBlIiAibG9h ZCIpCisgICAoc2V0X2F0dHIgImlzY29tcGFjdCIgImZhbHNlIikKKyAgIChz ZXRfYXR0ciAicHJlZGljYWJsZSIgIm5vIikKKyAgIChzZXRfYXR0ciAibGVu Z3RoIiAiKiIpXSkKKworKGRlZmluZV9leHBhbmQgImF0b21pY188YXRvbWlj X29wdGFiPnNpIgorICBbKG1hdGNoX29wZXJhbmQ6U0kgMCAibWVtX25vb2Zz X29wZXJhbmQiICIiKSAgOzsgbWVtb3J5CisgICAoYXRvbWljb3A6U0kgKG1h dGNoX2R1cCAwKQorCQkobWF0Y2hfb3BlcmFuZDpTSSAxICJyZWdpc3Rlcl9v cGVyYW5kIiAiIikpIDs7IG9wZXJhbmQKKyAgIChtYXRjaF9vcGVyYW5kOlNJ IDIgImNvbnN0X2ludF9vcGVyYW5kIiAiIildIDs7IG1vZGVsCisgICJUQVJH RVRfQVRPTUlDIgoreworICBhcmNfZXhwYW5kX2F0b21pY19vcCAoPENPREU+ LCBvcGVyYW5kc1swXSwgb3BlcmFuZHNbMV0sCisJCQkJTlVMTF9SVFgsIE5V TExfUlRYLCBvcGVyYW5kc1syXSk7CisgIERPTkU7Cit9KQorCisoZGVmaW5l X2V4cGFuZCAiYXRvbWljX25hbmRzaSIKKyAgWyhtYXRjaF9vcGVyYW5kOlNJ IDAgIm1lbV9ub29mc19vcGVyYW5kIiAiIikJOzsgbWVtb3J5CisgICAobWF0 Y2hfb3BlcmFuZDpTSSAxICJyZWdpc3Rlcl9vcGVyYW5kIiAiIikJOzsgb3Bl cmFuZAorICAgKG1hdGNoX29wZXJhbmQ6U0kgMiAiY29uc3RfaW50X29wZXJh bmQiICIiKV0JOzsgbW9kZWwKKyAgIlRBUkdFVF9BVE9NSUMiCit7CisgYXJj X2V4cGFuZF9hdG9taWNfb3AgKE5PVCwgb3BlcmFuZHNbMF0sIG9wZXJhbmRz WzFdLAorCQkJICAgIE5VTExfUlRYLCBOVUxMX1JUWCwgb3BlcmFuZHNbMl0p OworIERPTkU7Cit9KQorCisoZGVmaW5lX2V4cGFuZCAiYXRvbWljX2ZldGNo XzxhdG9taWNfb3B0YWI+c2kiCisgIFsobWF0Y2hfb3BlcmFuZDpTSSAwICJy ZWdpc3Rlcl9vcGVyYW5kIiAiIikJOzsgb3V0cHV0CisgICAobWF0Y2hfb3Bl cmFuZDpTSSAxICJtZW1fbm9vZnNfb3BlcmFuZCIgIiIpCTs7IG1lbW9yeQor ICAgKGF0b21pY29wOlNJIChtYXRjaF9kdXAgMSkKKwkJKG1hdGNoX29wZXJh bmQ6U0kgMiAicmVnaXN0ZXJfb3BlcmFuZCIgIiIpKSA7OyBvcGVyYW5kCisg ICAobWF0Y2hfb3BlcmFuZDpTSSAzICJjb25zdF9pbnRfb3BlcmFuZCIgIiIp XQk7OyBtb2RlbAorICAiVEFSR0VUX0FUT01JQyIKK3sKKyAgYXJjX2V4cGFu ZF9hdG9taWNfb3AgKDxDT0RFPiwgb3BlcmFuZHNbMV0sIG9wZXJhbmRzWzJd LAorCQkJCW9wZXJhbmRzWzBdLCBOVUxMX1JUWCwgb3BlcmFuZHNbM10pOwor ICBET05FOworfSkKKworKGRlZmluZV9leHBhbmQgImF0b21pY19mZXRjaF9u YW5kc2kiCisgIFsobWF0Y2hfb3BlcmFuZDpTSSAwICJyZWdpc3Rlcl9vcGVy YW5kIiAiIikJOzsgb3V0cHV0CisgICAobWF0Y2hfb3BlcmFuZDpTSSAxICJt ZW1fbm9vZnNfb3BlcmFuZCIgIiIpCTs7IG1lbW9yeQorICAgKG1hdGNoX29w ZXJhbmQ6U0kgMiAicmVnaXN0ZXJfb3BlcmFuZCIgIiIpCTs7IG9wZXJhbmQK KyAgIChtYXRjaF9vcGVyYW5kOlNJIDMgImNvbnN0X2ludF9vcGVyYW5kIiAi IildCTs7IG1vZGVsCisgICJUQVJHRVRfQVRPTUlDIgoreworICBhcmNfZXhw YW5kX2F0b21pY19vcCAoTk9ULCBvcGVyYW5kc1sxXSwgb3BlcmFuZHNbMl0s CisJCQkgICAgIG9wZXJhbmRzWzBdLCBOVUxMX1JUWCwgb3BlcmFuZHNbM10p OworICBET05FOworfSkKKworKGRlZmluZV9leHBhbmQgImF0b21pY188YXRv bWljX29wdGFiPl9mZXRjaHNpIgorICBbKG1hdGNoX29wZXJhbmQ6U0kgMCAi cmVnaXN0ZXJfb3BlcmFuZCIgIiIpCTs7IG91dHB1dAorICAgKG1hdGNoX29w ZXJhbmQ6U0kgMSAibWVtX25vb2ZzX29wZXJhbmQiICIiKQk7OyBtZW1vcnkK KyAgIChhdG9taWNvcDpTSSAobWF0Y2hfZHVwIDEpCisJCShtYXRjaF9vcGVy YW5kOlNJIDIgInJlZ2lzdGVyX29wZXJhbmQiICIiKSkgOzsgb3BlcmFuZAor ICAgKG1hdGNoX29wZXJhbmQ6U0kgMyAiY29uc3RfaW50X29wZXJhbmQiICIi KV0JOzsgbW9kZWwKKyAgIlRBUkdFVF9BVE9NSUMiCit7CisgIGFyY19leHBh bmRfYXRvbWljX29wICg8Q09ERT4sIG9wZXJhbmRzWzFdLCBvcGVyYW5kc1sy XSwKKwkJCQlOVUxMX1JUWCwgb3BlcmFuZHNbMF0sIG9wZXJhbmRzWzNdKTsK KyAgRE9ORTsKK30pCisKKyhkZWZpbmVfZXhwYW5kICJhdG9taWNfbmFuZF9m ZXRjaHNpIgorICBbKG1hdGNoX29wZXJhbmQ6U0kgMCAicmVnaXN0ZXJfb3Bl cmFuZCIgIiIpCTs7IG91dHB1dAorICAgKG1hdGNoX29wZXJhbmQ6U0kgMSAi bWVtX25vb2ZzX29wZXJhbmQiICIiKQk7OyBtZW1vcnkKKyAgIChtYXRjaF9v cGVyYW5kOlNJIDIgInJlZ2lzdGVyX29wZXJhbmQiICIiKQk7OyBvcGVyYW5k CisgICAobWF0Y2hfb3BlcmFuZDpTSSAzICJjb25zdF9pbnRfb3BlcmFuZCIg IiIpXQk7OyBtb2RlbAorICAiVEFSR0VUX0FUT01JQyIKK3sKKyAgYXJjX2V4 cGFuZF9hdG9taWNfb3AgKE5PVCwgb3BlcmFuZHNbMV0sIG9wZXJhbmRzWzJd LAorCQkJICAgICBOVUxMX1JUWCwgb3BlcmFuZHNbMF0sIG9wZXJhbmRzWzNd KTsKKyAgRE9ORTsKK30pCisKZGlmZiAtLWdpdCBhL2djYy9jb25maWcvYXJj L2NvbnN0cmFpbnRzLm1kIGIvZ2NjL2NvbmZpZy9hcmMvY29uc3RyYWludHMu bWQKaW5kZXggNjVlYTQ0YS4uMTgzMDljYyAxMDA2NDQKLS0tIGEvZ2NjL2Nv bmZpZy9hcmMvY29uc3RyYWludHMubWQKKysrIGIvZ2NjL2NvbmZpZy9hcmMv Y29uc3RyYWludHMubWQKQEAgLTQyMSwzICs0MjEsOSBAQAogICAgQW4gdW5z aWduZWQgNi1iaXQgaW50ZWdlciBjb25zdGFudCwgdXAgdG8gNjIuIgogICAo YW5kIChtYXRjaF9jb2RlICJjb25zdF9pbnQiKQogICAgICAgIChtYXRjaF90 ZXN0ICJVTlNJR05FRF9JTlQ2IChpdmFsIC0gMSkiKSkpCisKKzs7IE1lbW9y eSBjb25zdHJhaW50IHVzZWQgZm9yIGF0b21pYyBvcHMuCisoZGVmaW5lX21l bW9yeV9jb25zdHJhaW50ICJBVE8iCisgICJBIG1lbW9yeSB3aXRoIG9ubHkg YSBiYXNlIHJlZ2lzdGVyIgorICAobWF0Y2hfb3BlcmFuZCAwICJtZW1fbm9v ZnNfb3BlcmFuZCIpKQorCmRpZmYgLS1naXQgYS9nY2MvY29uZmlnL2FyYy9w cmVkaWNhdGVzLm1kIGIvZ2NjL2NvbmZpZy9hcmMvcHJlZGljYXRlcy5tZApp bmRleCA0M2Y5NDc0Li5kZTA3MzVhIDEwMDY0NAotLS0gYS9nY2MvY29uZmln L2FyYy9wcmVkaWNhdGVzLm1kCisrKyBiL2djYy9jb25maWcvYXJjL3ByZWRp Y2F0ZXMubWQKQEAgLTgxMywzICs4MTMsNyBAQAogKGRlZmluZV9wcmVkaWNh dGUgInNob3J0X2NvbnN0X2ludF9vcGVyYW5kIgogICAoYW5kIChtYXRjaF9v cGVyYW5kIDAgImNvbnN0X2ludF9vcGVyYW5kIikKICAgICAgICAobWF0Y2hf dGVzdCAic2F0aXNmaWVzX2NvbnN0cmFpbnRfQzE2IChvcCkiKSkpCisKKyhk ZWZpbmVfcHJlZGljYXRlICJtZW1fbm9vZnNfb3BlcmFuZCIKKyAgKGFuZCAo bWF0Y2hfY29kZSAibWVtIikKKyAgICAgICAobWF0Y2hfY29kZSAicmVnIiAi MCIpKSkKZGlmZiAtLWdpdCBhL2djYy9kb2MvaW52b2tlLnRleGkgYi9nY2Mv ZG9jL2ludm9rZS50ZXhpCmluZGV4IGZiOTA4YjMuLmMwYTk5ZDcgMTAwNjQ0 Ci0tLSBhL2djYy9kb2MvaW52b2tlLnRleGkKKysrIGIvZ2NjL2RvYy9pbnZv a2UudGV4aQpAQCAtNTM4LDcgKzUzOCw3IEBAIE9iamVjdGl2ZS1DIGFuZCBP YmplY3RpdmUtQysrIERpYWxlY3RzfS4KIEBnY2NvcHRsaXN0ey1tYmFycmVs LXNoaWZ0ZXIgQGdvbAogLW1jcHU9QHZhcntjcHV9IC1tQTYgLW1BUkM2MDAg LW1BNyAtbUFSQzcwMCBAZ29sCiAtbWRwZnAgLW1kcGZwLWNvbXBhY3QgLW1k cGZwLWZhc3QgLW1uby1kcGZwLWxyc3IgQGdvbAotLW1lYSAtbW5vLW1weSAt bW11bDMyeDE2IC1tbXVsNjQgQGdvbAorLW1lYSAtbW5vLW1weSAtbW11bDMy eDE2IC1tbXVsNjQgLW1hdG9taWMgQGdvbAogLW1ub3JtIC1tc3BmcCAtbXNw ZnAtY29tcGFjdCAtbXNwZnAtZmFzdCAtbXNpbWQgLW1zb2Z0LWZsb2F0IC1t c3dhcCBAZ29sCiAtbWNyYyAtbWRzcC1wYWNrYSAtbWR2YmYgLW1sb2NrIC1t bWFjLWQxNiAtbW1hYy0yNCAtbXJ0c2MgLW1zd2FwZSBAZ29sCiAtbXRlbGVw aG9ueSAtbXh5IC1taXNpemUgLW1hbm5vdGF0ZS1hbGlnbiAtbWFyY2xpbnV4 IC1tYXJjbGludXhfcHJvZiBAZ29sCkBAIC0xMjk0OCw2ICsxMjk0OCwxMiBA QCBjYW4gb3ZlcnJpZGRlbiBieSBGUFggb3B0aW9uczsgQHNhbXB7bXNwZnB9 LCBAc2FtcHttc3BmcC1jb21wYWN0fSwgb3IKIEBvcGluZGV4IG1zd2FwCiBH ZW5lcmF0ZSBzd2FwIGluc3RydWN0aW9ucy4KIAorQGl0ZW0gLW1hdG9taWMK K0BvcGluZGV4IG1hdG9taWMKK1RoaXMgZW5hYmxlcyBMb2NrZWQgTG9hZC9T dG9yZSBDb25kaXRpb25hbCBleHRlbnNpb24gdG8gaW1wbGVtZW50CithdG9t aWMgbWVtb3ByeSBidWlsdC1pbiBmdW5jdGlvbnMuICBOb3QgYXZhaWxhYmxl IGZvciBBUkMgNnh4IG9yIEFSQworRU0gY29yZXMuCisKIEBpdGVtIC1tZGl2 LXJlbQogQG9waW5kZXggbWRpdi1yZW0KIEVuYWJsZSBESVYvUkVNIGluc3Ry dWN0aW9ucyBmb3IgQVJDdjIgY29yZXMuCmRpZmYgLS1naXQgYS9nY2MvdGVz dHN1aXRlL2xpYi90YXJnZXQtc3VwcG9ydHMuZXhwIGIvZ2NjL3Rlc3RzdWl0 ZS9saWIvdGFyZ2V0LXN1cHBvcnRzLmV4cAppbmRleCA3NWQ1MDY4Li5jYzg0 N2VlIDEwMDY0NAotLS0gYS9nY2MvdGVzdHN1aXRlL2xpYi90YXJnZXQtc3Vw cG9ydHMuZXhwCisrKyBiL2djYy90ZXN0c3VpdGUvbGliL3RhcmdldC1zdXBw b3J0cy5leHAKQEAgLTI2MDIsNiArMjYwMiwxNSBAQCBwcm9jIGNoZWNrX2Vm ZmVjdGl2ZV90YXJnZXRfYWFyY2g2NF9saXR0bGVfZW5kaWFuIHsgfSB7CiAg ICAgfV0KIH0KIAorIyBSZXR1cm4gMSBpZiB0aGlzIGlzIGEgY29tcGlsZXIg c3VwcG9ydGluZyBBUkMgYXRvbWljIG9wZXJhdGlvbnMKK3Byb2MgY2hlY2tf ZWZmZWN0aXZlX3RhcmdldF9hcmNfYXRvbWljIHsgfSB7CisgICAgcmV0dXJu IFtjaGVja19ub19jb21waWxlcl9tZXNzYWdlcyBhcmNfYXRvbWljIGFzc2Vt Ymx5IHsKKwkjaWYgIWRlZmluZWQoX19BUkNfQVRPTUlDX18pCisJI2Vycm9y IEZPTworCSNlbmRpZgorICAgIH1dCit9CisKICMgUmV0dXJuIDEgaWYgdGhp cyBpcyBhbiBhcm0gdGFyZ2V0IHVzaW5nIDMyLWJpdCBpbnN0cnVjdGlvbnMK IHByb2MgY2hlY2tfZWZmZWN0aXZlX3RhcmdldF9hcm0zMiB7IH0gewogICAg IGlmIHsgIVtpc3RhcmdldCBhcm0qLSotKl0gfSB7CkBAIC01NTEzLDYgKzU1 MjIsNyBAQCBwcm9jIGNoZWNrX2VmZmVjdGl2ZV90YXJnZXRfc3luY19pbnRf bG9uZyB7IH0gewogCSAgICAgfHwgW2lzdGFyZ2V0IGNyaXN2MzItKi0qXSB8 fCBbaXN0YXJnZXQgY3Jpcy0qLSpdCiAJICAgICB8fCAoW2lzdGFyZ2V0IHNw YXJjKi0qLSpdICYmIFtjaGVja19lZmZlY3RpdmVfdGFyZ2V0X3NwYXJjX3Y5 XSkKIAkgICAgIHx8IFtpc3RhcmdldCBzcHUtKi0qXQorCSAgICAgfHwgKFtp c3RhcmdldCBhcmMqLSotKl0gJiYgW2NoZWNrX2VmZmVjdGl2ZV90YXJnZXRf YXJjX2F0b21pY10pCiAJICAgICB8fCBbY2hlY2tfZWZmZWN0aXZlX3Rhcmdl dF9taXBzX2xsc2NdIH0gewogICAgICAgICAgICBzZXQgZXRfc3luY19pbnRf bG9uZ19zYXZlZCAxCiAgICAgICAgIH0KQEAgLTU1NDQsNiArNTU1NCw3IEBA IHByb2MgY2hlY2tfZWZmZWN0aXZlX3RhcmdldF9zeW5jX2NoYXJfc2hvcnQg eyB9IHsKIAkgICAgIHx8IFtpc3RhcmdldCBjcmlzdjMyLSotKl0gfHwgW2lz dGFyZ2V0IGNyaXMtKi0qXQogCSAgICAgfHwgKFtpc3RhcmdldCBzcGFyYyot Ki0qXSAmJiBbY2hlY2tfZWZmZWN0aXZlX3RhcmdldF9zcGFyY192OV0pCiAJ ICAgICB8fCBbaXN0YXJnZXQgc3B1LSotKl0KKwkgICAgIHx8IChbaXN0YXJn ZXQgYXJjKi0qLSpdICYmIFtjaGVja19lZmZlY3RpdmVfdGFyZ2V0X2FyY19h dG9taWNdKQogCSAgICAgfHwgW2NoZWNrX2VmZmVjdGl2ZV90YXJnZXRfbWlw c19sbHNjXSB9IHsKICAgICAgICAgICAgc2V0IGV0X3N5bmNfY2hhcl9zaG9y dF9zYXZlZCAxCiAgICAgICAgIH0KLS0gCjEuOS4xCgo= --_002_098ECE41A0A6114BB2A07F1EC238DE896616B15Cde02wembxainter_--