From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 8F82FC433FE for ; Thu, 20 Oct 2022 14:03:52 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230080AbiJTODu (ORCPT ); Thu, 20 Oct 2022 10:03:50 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:34008 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229836AbiJTODr (ORCPT ); Thu, 20 Oct 2022 10:03:47 -0400 Received: from mail.savoirfairelinux.com (mail.savoirfairelinux.com [208.88.110.44]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 6AD3A1D4400 for ; Thu, 20 Oct 2022 07:03:44 -0700 (PDT) Received: from localhost (localhost [127.0.0.1]) by mail.savoirfairelinux.com (Postfix) with ESMTP id 4BD109C07AB; Thu, 20 Oct 2022 10:03:43 -0400 (EDT) Received: from mail.savoirfairelinux.com ([127.0.0.1]) by localhost (mail.savoirfairelinux.com [127.0.0.1]) (amavisd-new, port 10032) with ESMTP id kUdE-ujiFAEy; Thu, 20 Oct 2022 10:03:35 -0400 (EDT) Received: from localhost (localhost [127.0.0.1]) by mail.savoirfairelinux.com (Postfix) with ESMTP id A2EC19C079F; Thu, 20 Oct 2022 10:03:35 -0400 (EDT) DKIM-Filter: OpenDKIM Filter v2.10.3 mail.savoirfairelinux.com A2EC19C079F DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=savoirfairelinux.com; s=DFC430D2-D198-11EC-948E-34200CB392D2; t=1666274615; bh=2WTnRu9xkc+U9b+4rZrgl9qdaZeLICR6ubbEe3bRHfw=; h=Message-ID:From:To:Date:MIME-Version; b=ChU1GKO0AkePImbnCxOAyQvYwjvgO3OZlfmzR9NEPITYZW3uzrgDp9QKnAbcYox5B VNNoDr/YKGSFZxxNdh1PIjbC9ZssFTuqagjih39VwL/OHx/yVssHRzJfymhCEXUn9I neKdl69WmU0SdFEIFApjhc4JBi3HkyV1KXn1gC4R6wURhnTwC3YdrXk04kmG3u4ZVL aWRhYcAdxzB4tpwa5nmHJrTjby9hH/mALd4kc3VFdOLJGi8D87aAqGgCOM4BpxO8rd JKX0Y6Wkk2jY64K9RgLjjZbgM5YySpGGuNTVeuaCvnVAPFL825SHHC8GErirZxX1BL 7eHb89aWd7QKw== X-Virus-Scanned: amavisd-new at mail.savoirfairelinux.com Received: from mail.savoirfairelinux.com ([127.0.0.1]) by localhost (mail.savoirfairelinux.com [127.0.0.1]) (amavisd-new, port 10026) with ESMTP id fh9gO4nGDc9g; Thu, 20 Oct 2022 10:03:35 -0400 (EDT) Received: from [192.168.48.98] (unknown [192.168.51.254]) by mail.savoirfairelinux.com (Postfix) with ESMTPSA id 77B619C0785; Thu, 20 Oct 2022 10:03:35 -0400 (EDT) Message-ID: Subject: Re: [PATCH] irqchip: add TS7800v1 fpga based controller driver From: firas ashkar To: Marc Zyngier , Arnd Bergmann Cc: alex@digriz.org.uk, tglx@linutronix.de, linux-kernel@vger.kernel.org, inux-arm-kernel@lists.infradead.org Date: Thu, 20 Oct 2022 10:03:34 -0400 In-Reply-To: <868rldf5qx.wl-maz@kernel.org> References: <20221018133034.10442-1-firas.ashkar@savoirfairelinux.com> <868rldf5qx.wl-maz@kernel.org> Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: base64 User-Agent: Evolution 3.44.1-0ubuntu1 MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org dGhhbmsgeW91IGZvciB0aGUgY29tbWVudHMsIHBscyBjaGVjayBiZWxvdyBmb3IgcmVwbGllcyBh bmQgYWNrcwoKT24gVHVlLCAyMDIyLTEwLTE4IGF0IDE3OjM2ICswMTAwLCBNYXJjIFp5bmdpZXIg d3JvdGU6Cj4gK0FybmQKPiAKPiBPbiBUdWUsIDE4IE9jdCAyMDIyIDE0OjMwOjM0ICswMTAwLAo+ IEZpcmFzIEFzaGthciA8ZmlyYXMuYXNoa2FyQHNhdm9pcmZhaXJlbGludXguY29tPiB3cm90ZToK PiA+IAo+ID4gMS4gYWRkIFRTLTc4MDB2MSBmcGdhIGJhc2VkIGlycSBjb250cm9sbGVyIGRyaXZl ciwgYW5kCj4gPiAyLiBhZGQgcmVsYXRlZCBtZW1vcnkgYW5kIGlycSByZXNvdXJjZXMKPiA+IAo+ ID4gQnkgZGVmYXVsdCBvbmx5IG1hcHBlZCBGUEdBIGludGVycnVwdHMgd2lsbCBiZSBjaGFpbmVk L211bHRpcGxleGVkLAo+ID4gdGhlc2UKPiA+IGNoYWluZWQgaW50ZXJydXB0cyB3aWxsIHRoZW4g YmUgYXZhaWxhYmxlIHRvIG90aGVyIGRldmljZSBkcml2ZXJzCj4gPiB0bwo+ID4gcmVxdWVzdCB2 aWEgdGhlIGNvcnJlc3BvbmRpbmcgTGludXggSVJRcy4KPiA+IAo+ID4gJCBjYXQgL3Byb2MvY3B1 aW5mbwo+ID4gcHJvY2Vzc29ywqDCoMKgwqDCoMKgwqA6IDAKPiA+IG1vZGVsIG5hbWXCoMKgwqDC oMKgwqA6IEZlcm9jZW9uIHJldiAwICh2NWwpCj4gPiBCb2dvTUlQU8KgwqDCoMKgwqDCoMKgwqA6 IDMzMy4zMwo+ID4gRmVhdHVyZXPCoMKgwqDCoMKgwqDCoMKgOiBzd3AgaGFsZiB0aHVtYiBmYXN0 bXVsdCBlZHNwCj4gPiBDUFUgaW1wbGVtZW50ZXLCoDogMHg0MQo+ID4gQ1BVIGFyY2hpdGVjdHVy ZTogNVRFSgo+ID4gQ1BVIHZhcmlhbnTCoMKgwqDCoMKgOiAweDAKPiA+IENQVSBwYXJ0wqDCoMKg wqDCoMKgwqDCoDogMHg5MjYKPiA+IENQVSByZXZpc2lvbsKgwqDCoMKgOiAwCj4gPiAKPiA+IEhh cmR3YXJlwqDCoMKgwqDCoMKgwqDCoDogVGVjaG5vbG9naWMgU3lzdGVtcyBUUy03OHh4IFNCQwo+ ID4gUmV2aXNpb27CoMKgwqDCoMKgwqDCoMKgOiAwMDAwCj4gPiBTZXJpYWzCoMKgwqDCoMKgwqDC oMKgwqDCoDogMDAwMDAwMDAwMDAwMDAwMAo+ID4gJAo+ID4gCj4gPiAkIGNhdCAvcHJvYy9pbnRl cnJ1cHRzCj4gPiDCoMKgwqDCoMKgwqDCoMKgwqDCoCBDUFUwCj4gPiDCoCAxOsKgwqDCoMKgwqDC oMKgIDkwMsKgIG9yaW9uX2lyccKgwqDCoMKgIExldmVswqDCoMKgwqAgb3Jpb25fdGljawo+ID4g wqAgNDrCoMKgwqDCoMKgwqDCoCA3OTXCoCBvcmlvbl9pcnHCoMKgwqDCoCBMZXZlbMKgwqDCoMKg IHR0eVMwCj4gPiDCoDEzOsKgwqDCoMKgwqDCoMKgwqDCoCAwwqAgb3Jpb25faXJxwqDCoMKgwqAg TGV2ZWzCoMKgwqDCoCBlaGNpX2hjZDp1c2IyCj4gPiDCoDE4OsKgwqDCoMKgwqDCoMKgwqDCoCAw wqAgb3Jpb25faXJxwqDCoMKgwqAgTGV2ZWzCoMKgwqDCoCBlaGNpX2hjZDp1c2IxCj4gPiDCoDIy OsKgwqDCoMKgwqDCoMKgwqAgNjnCoCBvcmlvbl9pcnHCoMKgwqDCoCBMZXZlbMKgwqDCoMKgIGV0 aDAKPiA+IMKgMjM6wqDCoMKgwqDCoMKgwqAgMTcxwqAgb3Jpb25faXJxwqDCoMKgwqAgTGV2ZWzC oMKgwqDCoCBvcmlvbi1tZGlvCj4gPiDCoDI5OsKgwqDCoMKgwqDCoMKgwqDCoCAwwqAgb3Jpb25f aXJxwqDCoMKgwqAgTGV2ZWzCoMKgwqDCoCBtdl9jcnlwdG8KPiA+IMKgMzE6wqDCoMKgwqDCoMKg wqDCoMKgIDLCoCBvcmlvbl9pcnHCoMKgwqDCoCBMZXZlbMKgwqDCoMKgIG12X3hvci4wCj4gPiDC oDY1OsKgwqDCoMKgwqDCoMKgwqDCoCAxwqAgdHM3ODAwLWlycWPCoMKgIDAgRWRnZcKgwqDCoMKg wqAgdHMtZG1hYy1jcHVwY2kKPiA+IEVycjrCoMKgwqDCoMKgwqDCoMKgwqAgMAo+ID4gJAo+ID4g Cj4gPiAkIGNhdCAvcHJvYy9pb21lbQo+ID4gMDAwMDAwMDAtMDdmZmZmZmYgOiBTeXN0ZW0gUkFN Cj4gPiDCoCAwMDAwODAwMC0wMDk3OGZmZiA6IEtlcm5lbCBjb2RlCj4gPiDCoCAwMGQyMDAwMC0w MGU1NGY5NyA6IEtlcm5lbCBkYXRhCj4gPiBlODAwMDA0NC1lODAwMDA0NyA6IHRpbWVyaW9tZW1f cm5nCj4gPiDCoCBlODAwMDA0NC1lODAwMDA0NyA6IHRpbWVyaW9tZW1fcm5nIHRpbWVyaW9tZW1f cm5nCj4gPiBlODAwMDIwMC1lODAwMDJmZiA6IHRzX2lycWMKPiA+IMKgIGU4MDAwMjAwLWU4MDAw MmZmIDogdHM3ODAwLWlycWMgdHNfaXJxYwo+ID4gZTgwMDA0MDAtZTgwMDA0ZmYgOiB0c19kbWFj Cj4gPiDCoCBlODAwMDQwMC1lODAwMDRmZiA6IHRzNzgwMC1kbWFjIHRzX2RtYWMKPiA+IGU4MDAw ODA0LWU4MDAwODA3IDogZ2VuX25hbmQKPiA+IMKgIGU4MDAwODA0LWU4MDAwODA3IDogZ2VuX25h bmQgZ2VuX25hbmQKPiA+IGU4MDAwODA4LWU4MDAwODA4IDogcnRjLW00OHQ4Ngo+ID4gwqAgZTgw MDA4MDgtZTgwMDA4MDggOiBydGMtbTQ4dDg2IHJ0Yy1tNDh0ODYKPiA+IGU4MDAwODBjLWU4MDAw ODBjIDogcnRjLW00OHQ4Ngo+ID4gwqAgZTgwMDA4MGMtZTgwMDA4MGMgOiBydGMtbTQ4dDg2IHJ0 Yy1tNDh0ODYKPiA+IGYxMDEyMDAwLWYxMDEyMGZmIDogc2VyaWFsODI1MC4wCj4gPiDCoCBmMTAx MjAwMC1mMTAxMjAxZiA6IHNlcmlhbAo+ID4gZjEwMTIxMDAtZjEwMTIxZmYgOiBzZXJpYWw4MjUw LjEKPiA+IMKgIGYxMDEyMTAwLWYxMDEyMTFmIDogc2VyaWFsCj4gPiBmMTAyMDEwOC1mMTAyMDEw YiA6IG9yaW9uX3dkdAo+ID4gZjEwMjAzMDAtZjEwMjAzMDMgOiBvcmlvbl93ZHQKPiA+IGYxMDIw NDAwLWYxMDIwNDBmIDogdHNfYnJpZGdlCj4gPiDCoCBmMTAyMDQwMC1mMTAyMDQwZiA6IHRzNzgw MC1pcnFjIHRzX2JyaWRnZQo+ID4gZjEwNTAwMDAtZjEwNTBmZmYgOiBvcmlvbi1laGNpLjAKPiA+ IMKgIGYxMDUwMDAwLWYxMDUwZmZmIDogb3Jpb24tZWhjaS4wIG9yaW9uLWVoY2kuMAo+ID4gZjEw NjA5MDAtZjEwNjA5ZmYgOiB4b3IgMCBsb3cKPiA+IGYxMDYwYjAwLWYxMDYwYmZmIDogeG9yIDAg aGlnaAo+ID4gZjEwNzIwMDAtZjEwNzVmZmYgOiBnZTAwIGJhc2UKPiA+IMKgIGYxMDcyMDA0LWYx MDcyMDg3IDogZ2UwMCBtdm1kaW8gYmFzZQo+ID4gZjEwODAwMDAtZjEwODRmZmYgOiBzYXRhIGJh c2UKPiA+IGYxMDkwMDAwLWYxMDlmZmZmIDogcmVncwo+ID4gwqAgZjEwOTAwMDAtZjEwOWZmZmYg OiBtdl9jcnlwdG8gcmVncwo+ID4gZjEwYTAwMDAtZjEwYTBmZmYgOiBvcmlvbi1laGNpLjEKPiA+ IMKgIGYxMGEwMDAwLWYxMGEwZmZmIDogb3Jpb24tZWhjaS4xIG9yaW9uLWVoY2kuMQo+ID4gZjIy MDAwMDAtZjIyMDFmZmYgOiBzcmFtCj4gPiDCoCBmMjIwMDAwMC1mMjIwMWZmZiA6IG12X2NyeXB0 byBzcmFtCj4gPiAkCj4gPiAKPiA+ICQgdW5hbWUgLWEKPiA+IExpbnV4IHRzLTc4MDAgNi4xLjAt cmMxICMyIFBSRUVNUFQgTW9uIE9jdCAxNyAxMToxOToxMiBFRFQgMjAyMgo+ID4gYXJtdjV0ZWwK PiA+IMKgR05VL0xpbnV4Cj4gPiAkCj4gCj4gSSBkb24ndCBzZWUgaG93IHVzZWZ1bCB0aGlzIGlu Zm9ybWF0aW9uIGlzLiBQbGVhc2UgbGltaXQgdGhlIGNvbW1pdAo+IG1lc3NhZ2UgdG8gdGhlIHBy b3ZpZGVkIGZ1bmN0aW9uYWxpdHkuCmFjawo+IAo+ID4gCj4gPiBTaWduZWQtb2ZmLWJ5OiBGaXJh cyBBc2hrYXIgPGZpcmFzLmFzaGthckBzYXZvaXJmYWlyZWxpbnV4LmNvbT4KPiA+IC0tLQo+ID4g OjEwMDY0NCAxMDA2NDQgMmY0ZmUzY2E1YzFhIGVkODM3ODg5MzIwOCBNwqDCoMKgwqDCoMKgYXJj aC9hcm0vbWFjaC0KPiA+IG9yaW9uNXgvdHM3OHh4LWZwZ2EuaAo+ID4gOjEwMDY0NCAxMDA2NDQg YWY4MTBlN2NjZDc5IGQzMTlhNjhiNzE2MCBNwqDCoMKgwqDCoMKgYXJjaC9hcm0vbWFjaC0KPiA+ IG9yaW9uNXgvdHM3OHh4LXNldHVwLmMKPiA+IDoxMDA2NDQgMTAwNjQ0IDdlZjlmNWU2OTZkMyBk MTg0ZmI0MzVjNWQKPiA+IE3CoMKgwqDCoMKgwqBkcml2ZXJzL2lycWNoaXAvS2NvbmZpZwo+ID4g OjEwMDY0NCAxMDA2NDQgODdiNDlhMTA5NjJjIGIwMjJlZWNlMjA0Mgo+ID4gTcKgwqDCoMKgwqDC oGRyaXZlcnMvaXJxY2hpcC9NYWtlZmlsZQo+ID4gOjAwMDAwMCAxMDA2NDQgMDAwMDAwMDAwMDAw IDE3OGY0MzU0OGIyYQo+ID4gQcKgwqDCoMKgwqDCoGRyaXZlcnMvaXJxY2hpcC9pcnEtdHM3ODAw LmMKPiAKPiBIb3cgZGlkIHlvdSBnZW5lcmF0ZWQgdGhpcyBwYXRjaD8KJCBnaXQgZm9ybWF0LXBh dGNoIC0tc3RhdCAtcCAtLXJhdyAtLXNpZ25vZmYgLTEKCj4gCj4gPiDCoGFyY2gvYXJtL21hY2gt b3Jpb241eC90czc4eHgtZnBnYS5owqAgfMKgwqAgMSArCj4gPiDCoGFyY2gvYXJtL21hY2gtb3Jp b241eC90czc4eHgtc2V0dXAuYyB8wqAgNTUgKysrKysKPiA+IMKgZHJpdmVycy9pcnFjaGlwL0tj b25maWfCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB8wqAgMTIgKwo+ID4gwqBkcml2ZXJzL2ly cWNoaXAvTWFrZWZpbGXCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfMKgwqAgMSArCj4gPiDCoGRy aXZlcnMvaXJxY2hpcC9pcnEtdHM3ODAwLmPCoMKgwqDCoMKgwqDCoMKgIHwgMzE5Cj4gPiArKysr KysrKysrKysrKysrKysrKysrKysrKysKPiA+IMKgNSBmaWxlcyBjaGFuZ2VkLCAzODggaW5zZXJ0 aW9ucygrKQo+ID4gCj4gPiBkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L3RzNzh4 eC1mcGdhLmggYi9hcmNoL2FybS9tYWNoLQo+ID4gb3Jpb241eC90czc4eHgtZnBnYS5oCj4gPiBp bmRleCAyZjRmZTNjYTVjMWEuLmVkODM3ODg5MzIwOCAxMDA2NDQKPiA+IC0tLSBhL2FyY2gvYXJt L21hY2gtb3Jpb241eC90czc4eHgtZnBnYS5oCj4gPiArKysgYi9hcmNoL2FybS9tYWNoLW9yaW9u NXgvdHM3OHh4LWZwZ2EuaAo+ID4gQEAgLTMyLDYgKzMyLDcgQEAgc3RydWN0IGZwZ2FfZGV2aWNl cyB7Cj4gPiDCoMKgwqDCoMKgwqDCoMKgc3RydWN0IGZwZ2FfZGV2aWNlwqDCoMKgwqDCoMKgdHNf cnRjOwo+ID4gwqDCoMKgwqDCoMKgwqDCoHN0cnVjdCBmcGdhX2RldmljZcKgwqDCoMKgwqDCoHRz X25hbmQ7Cj4gPiDCoMKgwqDCoMKgwqDCoMKgc3RydWN0IGZwZ2FfZGV2aWNlwqDCoMKgwqDCoMKg dHNfcm5nOwo+ID4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGZwZ2FfZGV2aWNlwqDCoMKgwqDCoMKg dHNfaXJxYzsKPiA+IMKgfTsKPiA+IMKgCj4gPiDCoHN0cnVjdCB0czc4eHhfZnBnYV9kYXRhIHsK PiA+IGRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9yaW9uNXgvdHM3OHh4LXNldHVwLmMgYi9h cmNoL2FybS9tYWNoLQo+ID4gb3Jpb241eC90czc4eHgtc2V0dXAuYwo+ID4gaW5kZXggYWY4MTBl N2NjZDc5Li5kMzE5YTY4YjcxNjAgMTAwNjQ0Cj4gPiAtLS0gYS9hcmNoL2FybS9tYWNoLW9yaW9u NXgvdHM3OHh4LXNldHVwLmMKPiA+ICsrKyBiL2FyY2gvYXJtL21hY2gtb3Jpb241eC90czc4eHgt c2V0dXAuYwo+ID4gQEAgLTMyMiw2ICszMjIsNDkgQEAgc3RhdGljIHZvaWQgdHM3OHh4X3RzX3Ju Z191bmxvYWQodm9pZCkKPiA+IMKgwqDCoMKgwqDCoMKgwqBwbGF0Zm9ybV9kZXZpY2VfZGVsKCZ0 czc4eHhfdHNfcm5nX2RldmljZSk7Cj4gPiDCoH0KPiA+IMKgCj4gPiArLyoqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCj4gPiAq KioqKioqKioqKioKPiA+ICsgKiBmcGdhIGlycSBjb250cm9sbGVyCj4gPiArCj4gPiAqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqCj4gPiAqKioqKioqKiovCj4gPiArI2RlZmluZSBUU19JUlFDX0NUUkwgKFRTNzhYWF9GUEdB X1JFR1NfUEhZU19CQVNFICsgMHgyMDApCj4gPiArI2RlZmluZSBUU19CUklER0VfQ1RSTCAoT1JJ T041WF9SRUdTX1BIWVNfQkFTRSArIDB4MjA0MDApCj4gPiArI2RlZmluZSBUU19JUlFDX1BBUkVO VCAweDIKPiA+ICtzdGF0aWMgc3RydWN0IHJlc291cmNlIHRzX2lycWNfcmVzb3VyY2VzW10gPSB7 Cj4gPiArwqDCoMKgwqDCoMKgwqBERUZJTkVfUkVTX01FTV9OQU1FRChUU19JUlFDX0NUUkwsIDB4 MTAwLCAidHNfaXJxYyIpLAo+ID4gK8KgwqDCoMKgwqDCoMKgREVGSU5FX1JFU19NRU1fTkFNRUQo VFNfQlJJREdFX0NUUkwsIDB4MTAsICJ0c19icmlkZ2UiKSwKPiA+ICvCoMKgwqDCoMKgwqDCoERF RklORV9SRVNfSVJRX05BTUVEKFRTX0lSUUNfUEFSRU5ULCAidHNfaXJxY19wYXJlbnQiKSwKPiA+ ICt9Owo+ID4gKwo+ID4gK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHRzX2lycWNfZGV2 aWNlID0gewo+ID4gK8KgwqDCoMKgwqDCoMKgLm5hbWUgPSAidHM3ODAwLWlycWMiLAo+ID4gK8Kg wqDCoMKgwqDCoMKgLmlkID0gLTEsCj4gPiArwqDCoMKgwqDCoMKgwqAucmVzb3VyY2UgPSB0c19p cnFjX3Jlc291cmNlcywKPiA+ICvCoMKgwqDCoMKgwqDCoC5udW1fcmVzb3VyY2VzID0gQVJSQVlf U0laRSh0c19pcnFjX3Jlc291cmNlcyksCj4gPiArfTsKPiA+ICsKPiA+ICtzdGF0aWMgaW50IHRz X2lycWNfbG9hZCh2b2lkKQo+ID4gK3sKPiA+ICvCoMKgwqDCoMKgwqDCoGludCByYzsKPiA+ICsK PiA+ICvCoMKgwqDCoMKgwqDCoGlmICh0czc4eHhfZnBnYS5zdXBwb3J0cy50c19pcnFjLmluaXQg PT0gMCkgewo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJjID0gcGxhdGZvcm1f ZGV2aWNlX3JlZ2lzdGVyKCZ0c19pcnFjX2RldmljZSk7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgaWYgKCFyYykKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgdHM3OHh4X2ZwZ2Euc3VwcG9ydHMudHNfaXJxYy5pbml0ID0gMTsKPiA+ ICvCoMKgwqDCoMKgwqDCoH0gZWxzZSB7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgcmMgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkKCZ0c19pcnFjX2RldmljZSk7Cj4gPiArwqDCoMKg wqDCoMKgwqB9Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqBpZiAocmMpCj4gPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgcHJfaW5mbygiRlBHQSBiYXNlZCBJUlEgY29udHJvbGxlciBj b3VsZCBub3QgYmUKPiA+IHJlZ2lzdGVyZWQ6ICVkXG4iLAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByYyk7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKg wqByZXR1cm4gcmM7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyB2b2lkIHRzX2lycWNfdW5sb2Fk KHZvaWQpCj4gPiArewo+ID4gK8KgwqDCoMKgwqDCoMKgcGxhdGZvcm1fZGV2aWNlX2RlbCgmdHNf aXJxY19kZXZpY2UpOwo+ID4gK30KPiA+ICsKPiA+IMKgLyoqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCj4gPiAqKioqKioqKioq KioKPiA+IMKgICogRlBHQSAnaG90cGx1Zycgc3VwcG9ydCBjb2RlCj4gPiDCoAo+ID4gKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKgo+ID4gKioqKioqKioqLwo+ID4gQEAgLTMzMCw2ICszNzMsNyBAQCBzdGF0aWMgdm9pZCB0 czc4eHhfZnBnYV9kZXZpY2VzX3plcm9faW5pdCh2b2lkKQo+ID4gwqDCoMKgwqDCoMKgwqDCoHRz Nzh4eF9mcGdhLnN1cHBvcnRzLnRzX3J0Yy5pbml0ID0gMDsKPiA+IMKgwqDCoMKgwqDCoMKgwqB0 czc4eHhfZnBnYS5zdXBwb3J0cy50c19uYW5kLmluaXQgPSAwOwo+ID4gwqDCoMKgwqDCoMKgwqDC oHRzNzh4eF9mcGdhLnN1cHBvcnRzLnRzX3JuZy5pbml0ID0gMDsKPiA+ICvCoMKgwqDCoMKgwqDC oHRzNzh4eF9mcGdhLnN1cHBvcnRzLnRzX2lycWMuaW5pdCA9IDA7Cj4gPiDCoH0KPiA+IMKgCj4g PiDCoHN0YXRpYyB2b2lkIHRzNzh4eF9mcGdhX3N1cHBvcnRzKHZvaWQpCj4gPiBAQCAtMzQ4LDYg KzM5Miw3IEBAIHN0YXRpYyB2b2lkIHRzNzh4eF9mcGdhX3N1cHBvcnRzKHZvaWQpCj4gPiDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHRzNzh4eF9mcGdhLnN1cHBvcnRzLnRzX3J0Yy5w cmVzZW50ID0gMTsKPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgdHM3OHh4X2Zw Z2Euc3VwcG9ydHMudHNfbmFuZC5wcmVzZW50ID0gMTsKPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgdHM3OHh4X2ZwZ2Euc3VwcG9ydHMudHNfcm5nLnByZXNlbnQgPSAxOwo+ID4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHRzNzh4eF9mcGdhLnN1cHBvcnRzLnRzX2ly cWMucHJlc2VudCA9IDE7Cj4gPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGJyZWFr Owo+ID4gwqDCoMKgwqDCoMKgwqDCoGRlZmF1bHQ6Cj4gPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoC8qIGVuYWJsZSBkZXZpY2VzIGlmIG1hZ2ljIG1hdGNoZXMgKi8KPiA+IEBAIC0z NTgsMTEgKzQwMywxMyBAQCBzdGF0aWMgdm9pZCB0czc4eHhfZnBnYV9zdXBwb3J0cyh2b2lkKQo+ ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgdHM3OHh4 X2ZwZ2Euc3VwcG9ydHMudHNfcnRjLnByZXNlbnQgPSAxOwo+ID4gwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgdHM3OHh4X2ZwZ2Euc3VwcG9ydHMudHNfbmFu ZC5wcmVzZW50ID0gMTsKPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoHRzNzh4eF9mcGdhLnN1cHBvcnRzLnRzX3JuZy5wcmVzZW50ID0gMTsKPiA+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgdHM3OHh4X2ZwZ2Eu c3VwcG9ydHMudHNfaXJxYy5wcmVzZW50ID0gMTsKPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGJyZWFrOwo+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqBkZWZhdWx0Ogo+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgdHM3OHh4X2ZwZ2Euc3VwcG9ydHMudHNfcnRjLnByZXNlbnQgPSAwOwo+ ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgdHM3OHh4 X2ZwZ2Euc3VwcG9ydHMudHNfbmFuZC5wcmVzZW50ID0gMDsKPiA+IMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHRzNzh4eF9mcGdhLnN1cHBvcnRzLnRzX3Ju Zy5wcmVzZW50ID0gMDsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgdHM3OHh4X2ZwZ2Euc3VwcG9ydHMudHNfaXJxYy5wcmVzZW50ID0gMDsKPiA+IMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfQo+ID4gwqDCoMKgwqDCoMKgwqDCoH0KPiA+ IMKgfQo+ID4gQEAgLTM3MSw2ICs0MTgsMTIgQEAgc3RhdGljIGludCB0czc4eHhfZnBnYV9sb2Fk X2RldmljZXModm9pZCkKPiA+IMKgewo+ID4gwqDCoMKgwqDCoMKgwqDCoGludCB0bXAsIHJldCA9 IDA7Cj4gPiDCoAo+ID4gK8KgwqDCoMKgwqDCoMKgaWYgKHRzNzh4eF9mcGdhLnN1cHBvcnRzLnRz X2lycWMucHJlc2VudCA9PSAxKSB7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg dG1wID0gdHNfaXJxY19sb2FkKCk7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg aWYgKHRtcCkKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgdHM3OHh4X2ZwZ2Euc3VwcG9ydHMudHNfaXJxYy5wcmVzZW50ID0gMDsKPiA+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXQgfD0gdG1wOwo+ID4gK8KgwqDCoMKgwqDCoMKgfQo+ ID4gwqDCoMKgwqDCoMKgwqDCoGlmICh0czc4eHhfZnBnYS5zdXBwb3J0cy50c19ydGMucHJlc2Vu dCA9PSAxKSB7Cj4gPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHRtcCA9IHRzNzh4 eF90c19ydGNfbG9hZCgpOwo+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAo dG1wKQo+ID4gQEAgLTQwMiw2ICs0NTUsOCBAQCBzdGF0aWMgaW50IHRzNzh4eF9mcGdhX3VubG9h ZF9kZXZpY2VzKHZvaWQpCj4gPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHRzNzh4 eF90c19uYW5kX3VubG9hZCgpOwo+ID4gwqDCoMKgwqDCoMKgwqDCoGlmICh0czc4eHhfZnBnYS5z dXBwb3J0cy50c19ybmcucHJlc2VudCA9PSAxKQo+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqB0czc4eHhfdHNfcm5nX3VubG9hZCgpOwo+ID4gK8KgwqDCoMKgwqDCoMKgaWYgKHRz Nzh4eF9mcGdhLnN1cHBvcnRzLnRzX2lycWMucHJlc2VudCA9PSAxKQo+ID4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoHRzX2lycWNfdW5sb2FkKCk7Cj4gPiDCoAo+ID4gwqDCoMKgwqDC oMKgwqDCoHJldHVybiAwOwo+ID4gwqB9Cj4gCj4gSSBhbSBhYnNvbHV0ZWx5ICpOT1QqIGtlZW4g b24gYWRkaW5nIG1vcmUgbm9uLURUIHN0dWZmIGluIHRoaXMgZGF5Cj4gYW5kCj4gYWdlLiBUaGUg RFQgZWZmb3J0IGhhcyBiZWVuIGdvaW5nIG9uIGZvciBvdmVyIDEwIHllYXJzLCBhbmQgbWF5YmUg aXQKPiBpcyB0aW1lIHRoYXQgdGhpcyBib2FyZCBtYWtlcyB0aGUganVtcCBiZWZvcmUgd2UgYWRk IGFueXRoaW5nIG5ldyB0bwo+IGl0LCBzcGVjaWFsbHkgZ2l2ZW4gdGhhdCB0aGVyZSBpcyBhIERU IGJvYXJkIGZvciB0aGlzIHBsYXRmb3JtLgphY2ssIHRob3VnaCBhZGRpbmcgT0YgbG9naWMgc2hv dWxkIG5vdCBiZSBhIHByb2JsZW0KPiAKPiBBcm5kLCB3aGF0J3MgeW91ciBjYWxsIG9uIHRoaXM/ Cj4gCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9pcnFjaGlwL0tjb25maWcgYi9kcml2ZXJzL2ly cWNoaXAvS2NvbmZpZwo+ID4gaW5kZXggN2VmOWY1ZTY5NmQzLi5kMTg0ZmI0MzVjNWQgMTAwNjQ0 Cj4gPiAtLS0gYS9kcml2ZXJzL2lycWNoaXAvS2NvbmZpZwo+ID4gKysrIGIvZHJpdmVycy9pcnFj aGlwL0tjb25maWcKPiA+IEBAIC0yOTAsNiArMjkwLDE4IEBAIGNvbmZpZyBUUzQ4MDBfSVJRCj4g PiDCoMKgwqDCoMKgwqDCoMKgaGVscAo+ID4gwqDCoMKgwqDCoMKgwqDCoMKgIFN1cHBvcnQgZm9y IHRoZSBUUy00ODAwIEZQR0EgSVJRIGNvbnRyb2xsZXIKPiA+IMKgCj4gPiArY29uZmlnIFRTNzgw MF9JUlEKPiA+ICvCoMKgwqDCoMKgwqDCoHRyaXN0YXRlICJUUy03ODAwIElSUSBjb250cm9sbGVy Igo+ID4gK8KgwqDCoMKgwqDCoMKgc2VsZWN0IElSUV9ET01BSU4KPiA+ICvCoMKgwqDCoMKgwqDC oGRlcGVuZHMgb24gSEFTX0lPTUVNCj4gPiArwqDCoMKgwqDCoMKgwqBkZXBlbmRzIG9uIE1BQ0hf VFM3OFhYCj4gPiArwqDCoMKgwqDCoMKgwqBoZWxwCj4gPiArwqDCoMKgwqDCoMKgwqDCoCBTdXBw b3J0IGZvciBUUy03ODAwIEZQR0EgYmFzZWQgSVJRIGNvbnRyb2xsZXIuCj4gPiArwqDCoMKgwqDC oMKgwqDCoCBUaGlzIElSUSBjb250cm9sbGVyIGFjdHMgYXMgYSBtdWx0aXBsZXhlciBjaGFpbmlu ZyBtYXBwZWQKPiA+ICvCoMKgwqDCoMKgwqDCoMKgIEZQR0EgaW50ZXJydXB0cyB0byBhIHNpbmds ZSBzeXN0ZW0gYnJpZGdlIGludGVycnVwdC4KPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgIElm IHlvdSBoYXZlIGFuIEZQR0EgSVAgY29ycmVzcG9uZGluZyB0byB0aGlzIGRyaXZlciwgc2F5Cj4g PiBZIG9yIE0gaGVyZS4KPiA+ICsKPiAKPiBIb3cgY2FuIHRoZSB1c2VyIHRlbGwgdGhleSBoYXZl IHRoaXMgSVAgb3IgYW5vdGhlciBvbmU/ClRoaXMgRlBHQSBJUCwgaXMgcHJlc2VudCBvbiBFbWJl ZGRlZFRTIFRTNzgwMCBib2FyZHMsIGFzIGluZGljYXRlZCBpbgpodHRwczovL2RvY3MuZW1iZWRk ZWR0cy5jb20vVFMtNzgwMCNGUEdBX0lSUV9Db250cm9sbGVyCgo+IMKgQ2FuIHRoZXkKPiBmcmVl bHkgbG9hZCBpdD8gQ2FuIHRoZSBtYWtlICpjaGFuZ2VzKiB0byBpdD8KRlBHQSBieXRlIHN0cmVh bSBpcyBhdmFpbGFibGUgZnJvbSBFbWJlZGRlZFRTLCBidXQgbm90IHN1cmUgaWYgZW5kIHVzZXIK Y2FuL3Nob3VsZCBjaGFuZ2UgaXQKCj4gCj4gPiDCoGNvbmZpZyBWRVJTQVRJTEVfRlBHQV9JUlEK PiA+IMKgwqDCoMKgwqDCoMKgwqBib29sCj4gPiDCoMKgwqDCoMKgwqDCoMKgc2VsZWN0IElSUV9E T01BSU4KPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2lycWNoaXAvTWFrZWZpbGUgYi9kcml2ZXJz L2lycWNoaXAvTWFrZWZpbGUKPiA+IGluZGV4IDg3YjQ5YTEwOTYyYy4uYjAyMmVlY2UyMDQyIDEw MDY0NAo+ID4gLS0tIGEvZHJpdmVycy9pcnFjaGlwL01ha2VmaWxlCj4gPiArKysgYi9kcml2ZXJz L2lycWNoaXAvTWFrZWZpbGUKPiA+IEBAIC01OCw2ICs1OCw3IEBAIG9iai0kKENPTkZJR19BUkNI X1ZUODUwMCnCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCs9IGlycS0KPiA+IHZ0ODUwMC5vCj4g PiDCoG9iai0kKENPTkZJR19TVF9JUlFDSElQKcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCs9IGlycS1zdC5vCj4gPiDCoG9iai0kKENPTkZJR19UQjEwWF9JUlFDKcKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCs9IGlycS10YjEweC5vCj4gPiDCoG9iai0kKENPTkZJR19UUzQ4MDBf SVJRKcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCs9IGlycS10czQ4MDAubwo+ID4gK29i ai0kKENPTkZJR19UUzc4MDBfSVJRKcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCs9IGly cS10czc4MDAubwo+ID4gwqBvYmotJChDT05GSUdfWFRFTlNBKcKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgKz0gaXJxLXh0ZW5zYS1waWMubwo+ID4gwqBvYmotJChDT05GSUdf WFRFTlNBX01YKcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCs9IGlycS14dGVuc2EtbXgubwo+ID4gwqBvYmotJChDT05GSUdfWElMSU5YX0lOVEMpwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCs9IGlycS14aWxpbngtaW50Yy5vCj4gPiBkaWZmIC0tZ2l0 IGEvZHJpdmVycy9pcnFjaGlwL2lycS10czc4MDAuYyBiL2RyaXZlcnMvaXJxY2hpcC9pcnEtCj4g PiB0czc4MDAuYwo+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiA+IGluZGV4IDAwMDAwMDAwMDAw MC4uMTc4ZjQzNTQ4YjJhCj4gPiAtLS0gL2Rldi9udWxsCj4gPiArKysgYi9kcml2ZXJzL2lycWNo aXAvaXJxLXRzNzgwMC5jCj4gPiBAQCAtMCwwICsxLDMxOSBAQAo+ID4gKy8vIFNQRFgtTGljZW5z ZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKPiA+ICsvKgo+ID4gKyAqIEZQR0EgYmFzZWQgSVJR IGNvbnRvcmxsZXIgZHJpdmVyIGZvciBUUy03ODAwdjEKPiA+ICsgKgo+ID4gKyAqIENvcHlyaWdo dCAoQykgMjAyMiBTYXZvaXItZmFpcmUgTGludXggSW5jLgo+ID4gKyAqCj4gPiArICovCj4gPiAr Cj4gPiArI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgo+ID4gKyNpbmNsdWRlIDxsaW51eC9p by5oPgo+ID4gKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KPiA+ICsjaW5jbHVkZSA8bGludXgvaXJx Y2hpcC5oPgo+ID4gKyNpbmNsdWRlIDxsaW51eC9pcnFjaGlwL2NoYWluZWRfaXJxLmg+Cj4gPiAr I2luY2x1ZGUgPGxpbnV4L2lycWRvbWFpbi5oPgo+ID4gKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUu aD4KPiA+ICsjaW5jbHVkZSA8bGludXgvb2YuaD4KPiA+ICsjaW5jbHVkZSA8bGludXgvb2ZfYWRk cmVzcy5oPgo+ID4gKyNpbmNsdWRlIDxsaW51eC9vZl9pcnEuaD4KPiA+ICsjaW5jbHVkZSA8bGlu dXgvcGxhdGZvcm1fZGV2aWNlLmg+Cj4gPiArCj4gPiArI2RlZmluZSBEUklWRVJfTkFNRSAidHM3 ODAwLWlycWMiCj4gPiArCj4gPiArI2RlZmluZSBJUlFfTUFTS19SRUcgMHg0Cj4gPiArI2RlZmlu ZSBJUlFfU1RBVFVTX1JFRyAweDgKPiA+ICsjZGVmaW5lIFRTNzgwMF9JUlFfTlVNIDB4MjAKPiA+ ICsKPiA+ICsvKgo+ID4gKyAqIEZQR0EgSVJRIENvbnRyb2xsZXIsIGxpc3Qgb2YgYWxsIG1hcHBh YmxlL2NoYWluYWJsZSBpbnRlcnJ1cHRzCj4gPiArICoKPiA+ICsgKiBJUlHCoCBEZXNjcmlwdGlv bgo+ID4gKyAqIC0tLcKgIC0tLS0tLS0tLS0tCj4gPiArICogMHgwwqAgZG1hX2NwdV9wY2lfZGFj a19vCj4gPiArICogMHgxwqAgZG1hX2ZwZ2FfZGFja19vCj4gPiArICogMHgywqAgU0QgQnVzeSMK PiA+ICsgKiAweDPCoCBpc2FfaXJxMwo+ID4gKyAqIDB4NMKgIGlzYV9pcnE0Cj4gPiArICogMHg1 wqAgaXNhX2lycTUKPiA+ICsgKiAweDbCoCBpc2FfaXJxNgo+ID4gKyAqIDB4N8KgIGlzYV9pcnE3 Cj4gPiArICogMHg4wqAgUmVzZXJ2ZWQKPiA+ICsgKiAweDnCoCBpc2FfaXJxOQo+ID4gKyAqIDB4 YcKgIGlzYV9pcnExMAo+ID4gKyAqIDB4YsKgIGlzYV9pcnExMQo+ID4gKyAqIDB4Y8KgIGlzYV9p cnExMgo+ID4gKyAqIDB4ZMKgIGlzYV9pcnExNAo+ID4gKyAqIDB4ZcKgIGlzYV9pcnExNQo+ID4g KyAqIDB4MTA6MHgxOcKgIHRzdWFydF9pcnFzCj4gPiArICoKPiA+ICsgKiBUbyBtYXAgb3IgZW5h YmxlIGEgc3BlY2lmaWMgRlBHQSBpbnRlcnJ1cHQsIGFkZCBpdHMKPiA+IGNvcnJlc3BvbmRpbmcg bnVtYmVyIHRvICdlbmFibGVkX21hcHBpbmdzJy4KPiA+ICsgKiBFeGFtcGxlOgo+ID4gKyAqwqAg MS4gRm9yICdkbWFfY3B1X3BjaV9kYWNrX28nIChGUEdBIGJhc2VkIERNQSBjb250cm9sbGVyKSwg YWRkCj4gPiAweDAgdG8gJ2VuYWJsZWRfbWFwcGluZ3MnCj4gPiArICrCoCAyLiBGb3IgJ3RzdWFy dF9pcnFzJyAoRlBHQSBiYXNlZCBVQVJUcyksIGFkZCB0aGVpciBGUEdBCj4gPiBpbnRlcnJ1cHQg cmFuZ2Ugb2YgMHgxMC0weDE5Cj4gPiArICrCoMKgwqDCoCB0byAnZW5hYmxlZF9tYXBwaW5ncycK PiA+ICsgKgo+ID4gKyAqIEJ5IGRlZmF1bHQgb25seSBtYXBwZWQvZW5hYmxlZCBpbnRlcnJ1cHRz IHdpbGwgYmUKPiA+IGNoYWluZWQvbXVsdGlwbGV4ZWQsCj4gPiArICogdGhlc2UgY2hhaW5lZCBp bnRlcnJ1cHRzIHdpbGwgdGhlbiBiZSBhdmFpbGFibGUgdG8gb3RoZXIgZGV2aWNlCj4gPiBkcml2 ZXJzIHRvIHJlcXVlc3QgdmlhIHRoZQo+ID4gKyAqIGNvcnJlc3BvbmRpbmcgTGludXggSVJRcy4K PiA+ICsgKgo+ID4gKyAqIEVhY2ggbWFwcGVkIEZQR0EgaW50ZXJydXB0IHdpbGwgaGF2ZSBhIGNv cnJlc3BvbmRpbmcgTGludXggSVJRLAo+ID4gdGhpcyBuZXcgSVJRIHdpbGwgYmUgYXBwZW5kZWQK PiA+ICsgKiB0byB0aGUgc3lzdGVtJ3MgY3VycmVudCBsaXN0IG9mIExpbnV4IElSUXMsIG9uIFRT Nzh4eCwgdGhlCj4gPiBmaXJzdCBtYXBwZWQgRlBHQSBpbnRlcnJ1cHQgd2lsbCBoYXZlCj4gPiAr ICogYSBjb3JyZXNwb25kaW5nIG5ldyBMaW51eCBJUlEgc3RhcnRpbmcgYXQgNjUuIFRoZSBuZXh0 IG1hcHBlZAo+ID4gRlBHQSBpbnRlcnJ1cHQgd2lsbCBoYXZlIGEgTGludXgKPiA+ICsgKiBJUlEg b2YgNjYgYW5kIHNvIGZvcnRoLgo+ID4gKyAqCj4gPiArICogRXhhbXBsZS0xOgo+ID4gKyAqwqAg SW4gb3JkZXIgZm9yIGEgZGV2aWNlIGRyaXZlciwgc2F5IHRoZSBGUEdBIGJhc2VkIERNQQo+ID4g Y29udHJvbGxlciBkcml2ZXIgJ1RTLURNQUMnLAo+ID4gKyAqwqAgdG8gdXNlIGVpdGhlciBvZiB0 aGUgY29ycmVzcG9uZGluZyBGUEdBIGludGVycnVwdHMKPiA+ICdkbWFfY3B1X3BjaV9kYWNrX28n IGFuZCAnZG1hX2ZwZ2FfZGFja19vJywKPiA+ICsgKsKgIHRoZSAnVFMtRE1BQycgZHJpdmVyIGhh cyB0bzoKPiA+ICsgKsKgIDEuIGFkZCBGUEdBIGludGVycnVwdCBudW1iZXJzIDB4MCBhbmQgMHgx IHRvCj4gPiAnZW5hYmxlZF9tYXBwaW5ncycsIGluIHRoaXMgZmlsZSwgYW5kCj4gPiArICrCoCAy LiByZXF1ZXN0IHRoZSBjb3JyZXNwb25kaW5nIExpbnV4IElSUSBudW1iZXJzIDY1IGFuZCA2Ngo+ ID4gcmVzcGVjdGl2ZWx5IGluIGl0cyBpbXBsZW1lbnRhdGlvbi4KPiA+ICsgKgo+ID4gKyAqIEVh bXBsZS0yOgo+ID4gKyAqwqAgSW4gb3JkZXIgZm9yIGFub3RoZXIgZGV2aWNlIGRyaXZlciwgc2F5 IHRoZSBGUEdBIGJhc2VkCj4gPiAnVFNVQVJUJyBkcml2ZXIsIHRvIHVzZSB0aGUgcmVsYXRlZCBG UEdBCj4gPiArICrCoCBpbnRlcnJ1cHRzLCB0aGUgJ1RTVUFSVCcgZHJpdmVyIGhhcyB0bzoKPiA+ ICsgKsKgIDEuIGFwcGVuZCBGUEdBIGludGVycnVwdCBudW1iZXJzIDB4MTAsIDB4MTEsIDB4MTIs IDB4MTMsIDB4MTQsCj4gPiAweDE1LCAweDE2LCAweDE3LCAweDE4LCAweDE5IHRvCj4gPiArICrC oMKgwqDCoCAnZW5hYmxlZF9tYXBwaW5ncycsIGluIHRoaXMgZmlsZSwgYW5kCj4gPiArICrCoCAy LiByZXF1ZXN0IHRoZSBjb3JyZXNwb25kaW5nIExpbnV4IElSUSBudW1iZXJzLCB0aGVzZSBJUlFz Cj4gPiBjb3VsZCBzdGFydCBmcm9tIDY1IHRpbGwgNzQsIGlmIG5vCj4gPiArICrCoMKgwqDCoCBw cmV2aW91cyBGUEdBIGludGVycnVwdHMgd2hlcmUgbWFwcGVkLiBIb3dldmVyLCBpZiBvdGhlcgo+ ID4gRlBHQSBpbnRlcnJ1cHRzLCBzYXkgdGhvc2Ugb2YKPiA+ICsgKsKgwqDCoMKgICdUUy1ETUFD JyBpbiBFeGFtcGxlLTEgd2VyZSBhbHNvIG1hcHBlZC9lbmFibGVkLCB0aGVuIHRoZQo+ID4gY29y cmVjdCBjb3JyZXNwb25kaW5nIExpbnV4IElSUXMKPiA+ICsgKsKgwqDCoMKgIHdvdWxkIHN0YXJ0 IGZyb20gNjcgdGlsbCA3Ni4KPiA+ICsgKi8KPiAKPiBTZWUgd2h5IHRoaXMgcmVhbGx5IHNob3Vs ZCBiZSBhIERULWJhc2VkIGRyaXZlcj8KYWdyZWVkLCB0aG91Z2ggd2hlbiB0aGlzIGJvYXJkIHN0 YXJ0cyB1c2luZyBPcGVuIEZpcm13YXJlJ3MgRGV2aWNlLVRyZWUKc2NoZW1lLCB3aWxsIHBvcnQg dGhpcyBkcml2ZXIgYWNjb3JkaW5nbHkgCgo+IMKgQW5kIHBsZWFzZSBrZWVwCj4gY29tbWVudHMg dG8gbGVzcyB0aGFuIDgwIGNoYXJzIHBlciBsaW5lLgphY2sKPiAKPiA+ICsKPiA+ICtzdGF0aWMg aXJxX2h3X251bWJlcl90IGVuYWJsZWRfbWFwcGluZ3NbXSA9IHsgMHgwIH07Cj4gPiArCj4gPiAr c3RydWN0IHRzNzgwMF9pcnFfZGF0YSB7Cj4gPiArwqDCoMKgwqDCoMKgwqBpbnQgbXBwN192aXJx Owo+ID4gK8KgwqDCoMKgwqDCoMKgdm9pZCBfX2lvbWVtICpiYXNlOwo+ID4gK8KgwqDCoMKgwqDC oMKgdm9pZCBfX2lvbWVtICpicmlkZ2U7Cj4gPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgaXJxX2Rv bWFpbiAqZG9tYWluOwo+ID4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGlycV9jaGlwIGlycV9jaGlw Owo+ID4gK307Cj4gPiArCj4gPiArc3RhdGljIHZvaWQgdHM3ODAwX2lycV9tYXNrKHN0cnVjdCBp cnFfZGF0YSAqZCkKPiA+ICt7Cj4gPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgdHM3ODAwX2lycV9k YXRhICpkYXRhID0KPiA+IGlycV9kYXRhX2dldF9pcnFfY2hpcF9kYXRhKGQpOwo+ID4gK8KgwqDC oMKgwqDCoMKgdTMyIGZwZ2FfbWFza19yZWcgPSByZWFkbChkYXRhLT5iYXNlICsgSVJRX01BU0tf UkVHKTsKPiA+ICvCoMKgwqDCoMKgwqDCoHUzMiBtYXNrX2JpdHMgPSAxIDw8IGQtPmh3aXJxOwo+ ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgd3JpdGVsKGZwZ2FfbWFza19yZWcgJiB+bWFza19iaXRz LCBkYXRhLT5iYXNlICsKPiA+IElSUV9NQVNLX1JFRyk7Cj4gPiArwqDCoMKgwqDCoMKgwqB3cml0 ZWwoZnBnYV9tYXNrX3JlZyAmIH5tYXNrX2JpdHMsIGRhdGEtPmJyaWRnZSArCj4gPiBJUlFfTUFT S19SRUcpOwo+IAo+IEkga25vdyB5b3VyIEhXIGlzIFVQLCBidXQgc2VlaW5nIHRoZXNlIFJNVyBz ZXF1ZW5jZXMgd2l0aG91dCBhIGxvY2sKPiBtYWtlcyBtZSBqdW1wLiBZb3UgcHJvYmFibHkgd2Fu dCB0byBlaXRoZXIgZm9yYmlkIHRoaXMgZHJpdmVyIG9uIFNNUAo+IHN5c3RlbXMsIG9yIGFkZCB0 aGUgcmVxdWlyZWQgbG9ja3MuCnRoaXMgaXMgc2luZ2xlIENQVSwgbmV2ZXJ0aGVsZXNzIHdlJ2xs IGFkZCBsb2NraW5nCj4gCj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyB2b2lkIHRzNzgwMF9pcnFf dW5tYXNrKHN0cnVjdCBpcnFfZGF0YSAqZCkKPiA+ICt7Cj4gPiArwqDCoMKgwqDCoMKgwqBzdHJ1 Y3QgdHM3ODAwX2lycV9kYXRhICpkYXRhID0KPiA+IGlycV9kYXRhX2dldF9pcnFfY2hpcF9kYXRh KGQpOwo+ID4gK8KgwqDCoMKgwqDCoMKgdTMyIGZwZ2FfbWFza19yZWcgPSByZWFkbChkYXRhLT5i YXNlICsgSVJRX01BU0tfUkVHKTsKPiA+ICvCoMKgwqDCoMKgwqDCoHUzMiBtYXNrX2JpdHMgPSAx IDw8IGQtPmh3aXJxOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgd3JpdGVsKGZwZ2FfbWFza19y ZWcgfCBtYXNrX2JpdHMsIGRhdGEtPmJhc2UgKwo+ID4gSVJRX01BU0tfUkVHKTsKPiA+ICvCoMKg wqDCoMKgwqDCoHdyaXRlbChmcGdhX21hc2tfcmVnIHwgbWFza19iaXRzLCBkYXRhLT5icmlkZ2Ug Kwo+ID4gSVJRX01BU0tfUkVHKTsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIGludCB0czc4MDBf aXJxZG9tYWluX21hcChzdHJ1Y3QgaXJxX2RvbWFpbiAqZCwgdW5zaWduZWQgaW50Cj4gPiBpcnEs Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqBpcnFfaHdfbnVtYmVyX3QgaHdpcnEpCj4gPiArewo+ID4gK8KgwqDCoMKgwqDC oMKgc3RydWN0IHRzNzgwMF9pcnFfZGF0YSAqZGF0YSA9IGQtPmhvc3RfZGF0YTsKPiA+ICsKPiA+ ICvCoMKgwqDCoMKgwqDCoGlycV9zZXRfY2hpcF9hbmRfaGFuZGxlcihpcnEsICZkYXRhLT5pcnFf Y2hpcCwKPiA+IGhhbmRsZV9zaW1wbGVfaXJxKTsKPiAKPiBBcmUgeW91IHN1cmUgb2YgdGhpcz8g RWRnZSBhbmQgbGV2ZWwgaW50ZXJydXB0cyBoYXZlIHZlcnkgZGlmZmVyZW50Cj4gc2VtYW50aWNz LCBhbmQgaGFuZGxlX3NpbXBsZV9pcnEgc2VlbXMgbGlrZSBhIG1hc3NpdmUgY29wLW91dC4Kb2ss IHdlJ2xsIHVwZGF0ZSB0byAnaGFuZGxlX2VkZ2VfaXJxJyBhbmQgJ3RzNzgwMF9pcnFfYWNrJyBs b2dpYwppbnN0ZWFkCgo+IAo+ID4gK8KgwqDCoMKgwqDCoMKgaXJxX3NldF9jaGlwX2RhdGEoaXJx LCBkYXRhKTsKPiA+ICvCoMKgwqDCoMKgwqDCoGlycV9zZXRfbm9wcm9iZShpcnEpOwo+ID4gKwo+ ID4gK8KgwqDCoMKgwqDCoMKgcmV0dXJuIDA7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBjb25z dCBzdHJ1Y3QgaXJxX2RvbWFpbl9vcHMgdHM3ODAwX2ljX29wcyA9IHsKPiA+ICvCoMKgwqDCoMKg wqDCoC5tYXAgPSB0czc4MDBfaXJxZG9tYWluX21hcCwKPiA+ICvCoMKgwqDCoMKgwqDCoC54bGF0 ZSA9IGlycV9kb21haW5feGxhdGVfb25lY2VsbCwKPiAKPiBJIGRvbid0IHJlYWxseSBnZXQgdGhl IHVzYWdlIG1vZGVsIG9mIHRoaXMgdGhpbmcuIFdobyBwcm92aWRlcyB0aGUKPiBpbnRlcnJ1cHQg c3BlY2lmaWVyPwphY2ssIHRvIGJlIHJlbW92ZWQKPiAKPiA+ICt9Owo+ID4gKwo+ID4gK3N0YXRp YyB2b2lkIHRzNzgwMF9pY19jaGFpbmVkX2hhbmRsZV9pcnEoc3RydWN0IGlycV9kZXNjICpkZXNj KQo+ID4gK3sKPiA+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCB0czc4MDBfaXJxX2RhdGEgKmRhdGEg PQo+ID4gaXJxX2Rlc2NfZ2V0X2hhbmRsZXJfZGF0YShkZXNjKTsKPiA+ICvCoMKgwqDCoMKgwqDC oHN0cnVjdCBpcnFfY2hpcCAqY2hpcCA9IGlycV9kZXNjX2dldF9jaGlwKGRlc2MpOwo+ID4gK8Kg wqDCoMKgwqDCoMKgdTMyIG1hc2tfYml0cyA9IHJlYWRsKGRhdGEtPmJhc2UgKyBJUlFfU1RBVFVT X1JFRyk7Cj4gPiArwqDCoMKgwqDCoMKgwqB1MzIgc3RhdHVzID0gbWFza19iaXRzOwo+ID4gKwo+ ID4gK8KgwqDCoMKgwqDCoMKgY2hhaW5lZF9pcnFfZW50ZXIoY2hpcCwgZGVzYyk7Cj4gPiArCj4g PiArwqDCoMKgwqDCoMKgwqBpZiAodW5saWtlbHkoc3RhdHVzID09IDApKSB7Cj4gPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaGFuZGxlX2JhZF9pcnEoZGVzYyk7Cj4gPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZ290byBvdXQ7Cj4gPiArwqDCoMKgwqDCoMKgwqB9Cj4g PiArCj4gPiArwqDCoMKgwqDCoMKgwqBkbyB7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgdW5zaWduZWQgaW50IGJpdCA9IF9fZmZzKHN0YXR1cyk7Cj4gPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgaW50IGlycSA9IGlycV9maW5kX21hcHBpbmcoZGF0YS0+ZG9tYWlu LCBiaXQpOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHN0YXR1cyAm PSB+KDEgPDwgYml0KTsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBp ZiAoaXJxICYmIChtYXNrX2JpdHMgJiBCSVQoYml0KSkpIHsKPiA+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgdTMyIHgzMiA9IHJlYWRsKGRhdGEtPmJyaWRn ZSk7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoGdlbmVyaWNfaGFuZGxlX2lycShpcnEpOwo+IAo+IFBsZWFzZSB1c2UgZ2VuZXJpYyBoYW5k bGVfZG9wbWFpbl9pcnEoKS4KdGhpcyBpcyBhIGNoYWluZWQvbXVsdGlwbGV4ZWQgbG9naWMsIHN0 YXJ0cyB3aXRoICdjaGFpbmVkX2lycV9lbnRlcicKY2FsbHMgJ2dlbmVyaWNfaGFuZGxlX2lycScg YW5kIHRlcm1pbmF0ZXMgd2l0aCAnY2hhaW5lZF9pcnFfZXhpdCcsCndlIGZvbGxvd2VkIHNhbWUg bG9naWMgaW4gb3RoZXIgc2ltaWxhciBkcml2ZXJzLCAncWNvbS1pcnEtY29tYmluZXIuYycsCidl eHlub3MtY29tYmluZXIuYycsIGV0Ywo+IAo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB4MzIgJj0gfihtYXNrX2JpdHMgJiBCSVQoYml0KSk7 Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHdyaXRl bCh4MzIsIGRhdGEtPmJyaWRnZSk7Cj4gCj4gV2hhdCBkb2VzIHRoaXMgd3JpdGUgZG8/IElmIHRo aXMgaXMgYW4gQWNrIG9mIHRoZSBpbnRlcnJ1cHQsIHlvdSd2ZQo+IGp1c3QgbG9zdCBhbiBlZGdl Lgp0byBiZSByZW1vdmVkLCBhbmQgdXNlICd0czc4MDBfaXJxX2FjaycgbG9naWMgaW5zdGVhZAoK PiAKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9Cj4gPiArwqDCoMKgwqDCoMKg wqB9IHdoaWxlIChzdGF0dXMpOwo+ID4gKwo+ID4gK291dDoKPiA+ICvCoMKgwqDCoMKgwqDCoGNo YWluZWRfaXJxX2V4aXQoY2hpcCwgZGVzYyk7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBpbnQg dHM3ODAwX2ljX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCj4gPiArewo+ID4g K8KgwqDCoMKgwqDCoMKgc3RydWN0IHRzNzgwMF9pcnFfZGF0YSAqZGF0YSA9IE5VTEw7Cj4gPiAr wqDCoMKgwqDCoMKgwqBzdHJ1Y3QgaXJxX2NoaXAgKmlycV9jaGlwID0gTlVMTDsKPiA+ICvCoMKg wqDCoMKgwqDCoHN0cnVjdCByZXNvdXJjZSAqbWVtX3JlcyA9IE5VTEwsICpicmRnX3JlcyA9IE5V TEwsICppcnFfcmVzCj4gPiA9IE5VTEw7Cj4gPiArwqDCoMKgwqDCoMKgwqB1bnNpZ25lZCBpbnQg aXJxZG9tYWluOwo+ID4gK8KgwqDCoMKgwqDCoMKgaW50IGksIHJldDsKPiA+ICsKPiA+ICvCoMKg wqDCoMKgwqDCoGRhdGEgPSBkZXZtX2t6YWxsb2MoJnBkZXYtPmRldiwgc2l6ZW9mKCpkYXRhKSwg R0ZQX0tFUk5FTCk7Cj4gPiArwqDCoMKgwqDCoMKgwqBpZiAoSVNfRVJSX09SX05VTEwoZGF0YSkp IHsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkZXZfZXJyKCZwZGV2LT5kZXYs Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCJGYWls ZWQgdG8gYWxsb2NhdGUgVFM3ODAwIGRhdGEsIGVycm9yCj4gPiAlbGRcbiIsCj4gPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoFBUUl9FUlIoZGF0YSkpOwo+ ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldCA9IFBUUl9FUlIoZGF0YSk7Cj4g PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZ290byBkZXZtX2t6YWxsb2NfZXJyOwo+ ID4gK8KgwqDCoMKgwqDCoMKgfQo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgbWVtX3JlcyA9IHBs YXRmb3JtX2dldF9yZXNvdXJjZV9ieW5hbWUocGRldiwKPiA+IElPUkVTT1VSQ0VfTUVNLCAidHNf aXJxYyIpOwo+ID4gK8KgwqDCoMKgwqDCoMKgaWYgKElTX0VSUl9PUl9OVUxMKG1lbV9yZXMpKSB7 Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZGV2X2VycigmcGRldi0+ZGV2LAo+ ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAiRmFpbGVk IHRvIGdldCBwbGF0Zm9ybSBtZW1vcnkgcmVzb3VyY2UsCj4gPiBlcnJvciAlbGRcbiIsCj4gPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoFBUUl9FUlIobWVt X3JlcykpOwo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldCA9IFBUUl9FUlIo bWVtX3Jlcyk7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZ290byBwbHRmcm1f Z2V0X3Jlc19tZW1fZXJyOwo+ID4gK8KgwqDCoMKgwqDCoMKgfQo+ID4gKwo+ID4gK8KgwqDCoMKg wqDCoMKgZGF0YS0+YmFzZSA9IGRldm1faW9yZW1hcF9yZXNvdXJjZSgmcGRldi0+ZGV2LCBtZW1f cmVzKTsKPiA+ICvCoMKgwqDCoMKgwqDCoGlmIChJU19FUlJfT1JfTlVMTChkYXRhLT5iYXNlKSkg ewo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRldl9lcnIoJnBkZXYtPmRldiwK PiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIkZhaWxl ZCB0byBJTyBtYXAgbWVtLXJlZ2lvbiAlcywgZXJyb3IKPiA+ICVsZFxuIiwKPiA+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgbWVtX3Jlcy0+bmFtZSwgUFRS X0VSUihkYXRhLT5iYXNlKSk7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0 ID0gUFRSX0VSUihkYXRhLT5iYXNlKTsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqBnb3RvIGRldm1faW9yZW1hcF9yZXNfbWVtX2VycjsKPiA+ICvCoMKgwqDCoMKgwqDCoH0KPiA+ ICsKPiA+ICvCoMKgwqDCoMKgwqDCoGJyZGdfcmVzID0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqBwbGF0Zm9ybV9nZXRfcmVzb3VyY2VfYnluYW1lKHBkZXYsIElPUkVTT1VSQ0Vf TUVNLAo+ID4gInRzX2JyaWRnZSIpOwo+IAo+IERvbid0IGJyZWFrIGFzc2lnbm1lbnRzLgphY2sK PiAKPiA+ICvCoMKgwqDCoMKgwqDCoGlmIChJU19FUlJfT1JfTlVMTChicmRnX3JlcykpIHsKPiA+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkZXZfZXJyKCZwZGV2LT5kZXYsCj4gPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCJGYWlsZWQgdG8g Z2V0IHBsYXRmb3JtIGJyaWRnZSByZXNvdXJjZSwKPiA+IGVycm9yICVsZFxuIiwKPiA+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgUFRSX0VSUihicmRnX3Jl cykpOwo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldCA9IFBUUl9FUlIoYnJk Z19yZXMpOwo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGdvdG8gcGx0ZnJtX2dl dF9yZXNfYnJkZ19lcnI7Cj4gPiArwqDCoMKgwqDCoMKgwqB9Cj4gPiArCj4gPiArwqDCoMKgwqDC oMKgwqBkYXRhLT5icmlkZ2UgPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoJnBkZXYtPmRldiwgYnJk Z19yZXMpOwo+ID4gK8KgwqDCoMKgwqDCoMKgaWYgKElTX0VSUl9PUl9OVUxMKGRhdGEtPmJyaWRn ZSkpIHsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkZXZfZXJyKCZwZGV2LT5k ZXYsCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCJG YWlsZWQgdG8gSU8gbWFwIGJyaWRnZS1yZWdpb24gJXMsIGVycm9yCj4gPiAlbGRcbiIsCj4gPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoG1lbV9yZXMtPm5h bWUsIFBUUl9FUlIoZGF0YS0+YnJpZGdlKSk7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgcmV0ID0gUFRSX0VSUihkYXRhLT5icmlkZ2UpOwo+ID4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoGdvdG8gZGV2bV9pb3JlbWFwX3Jlc19icmRnZV9lcnI7Cj4gPiArwqDCoMKg wqDCoMKgwqB9Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqBpcnFfcmVzID0gcGxhdGZvcm1fZ2V0 X3Jlc291cmNlX2J5bmFtZShwZGV2LAo+ID4gSU9SRVNPVVJDRV9JUlEsCj4gPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICJ0c19pcnFjX3BhcmVudCIpOwo+ID4gK8KgwqDCoMKg wqDCoMKgaWYgKElTX0VSUl9PUl9OVUxMKGlycV9yZXMpKSB7Cj4gPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgZGV2X2VycigmcGRldi0+ZGV2LAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAiRmFpbGVkIHRvIGdldCBwbGF0Zm9ybSBwYXJl bnQgaXJxCj4gPiByZXNvdXJjZSwgZXJyb3IgJWxkXG4iLAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBQVFJfRVJSKGlycV9yZXMpKTsKPiA+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXQgPSBQVFJfRVJSKGlycV9yZXMpOwo+ID4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGdvdG8gcGx0ZnJtX2dldF9yZXNfaXJxX2VycjsK PiA+ICvCoMKgwqDCoMKgwqDCoH0KPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoGRhdGEtPm1wcDdf dmlycSA9IGlycV9yZXMtPnN0YXJ0Owo+ID4gK8KgwqDCoMKgwqDCoMKgd3JpdGVsKDB4MCwgZGF0 YS0+YmFzZSArIElSUV9NQVNLX1JFRyk7Cj4gPiArwqDCoMKgwqDCoMKgwqB3cml0ZWwoMHgwLCBk YXRhLT5icmlkZ2UgKyBJUlFfTUFTS19SRUcpOwo+ID4gK8KgwqDCoMKgwqDCoMKgd3JpdGVsKDB4 MCwgZGF0YS0+YnJpZGdlKTsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoGlycV9jaGlwID0gJmRh dGEtPmlycV9jaGlwOwo+ID4gK8KgwqDCoMKgwqDCoMKgaXJxX2NoaXAtPm5hbWUgPSBkZXZfbmFt ZSgmcGRldi0+ZGV2KTsKPiAKPiBOby4gV2UgZG9uJ3QgcHJldHR5LXByaW50IHRoZXNlIHRoaW5n cy4gQW5kIHJlYWxseSwgdGhlIGlycV9jaGlwCj4gc3RydWN0dXJlIHNob3VsZCBiZSBhcyBzdGF0 aWMgYXMgcG9zc2libGUgKGlmIHBvc3NpYmxlIGNvbnN0KS4KYWNrCj4gCj4gPiArwqDCoMKgwqDC oMKgwqBpcnFfY2hpcC0+aXJxX21hc2sgPSB0czc4MDBfaXJxX21hc2s7Cj4gPiArwqDCoMKgwqDC oMKgwqBpcnFfY2hpcC0+aXJxX3VubWFzayA9IHRzNzgwMF9pcnFfdW5tYXNrOwo+ID4gKwo+ID4g K8KgwqDCoMKgwqDCoMKgZGF0YS0+ZG9tYWluID0gaXJxX2RvbWFpbl9hZGRfbGluZWFyKHBkZXYt PmRldi5vZl9ub2RlLAo+ID4gVFM3ODAwX0lSUV9OVU0sCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgJnRzNzgwMF9pY19vcHMsIGRhdGEpOwo+ID4gK8KgwqDCoMKgwqDCoMKgaWYg KElTX0VSUl9PUl9OVUxMKGRhdGEtPmRvbWFpbikpIHsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqBkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW5ub3QgYWRkIElSUSBkb21haW5cbiIp Owo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldCA9IFBUUl9FUlIoZGF0YS0+ ZG9tYWluKTsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBnb3RvIGlycV9kb21h aW5fYWRkX2xpbmVhcl9lcnI7Cj4gPiArwqDCoMKgwqDCoMKgwqB9Cj4gPiArCj4gPiArwqDCoMKg wqDCoMKgwqBmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShlbmFibGVkX21hcHBpbmdzKTsgKytp KSB7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaXJxZG9tYWluID0KPiA+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaXJxX2NyZWF0ZV9t YXBwaW5nKGRhdGEtPmRvbWFpbiwKPiA+IGVuYWJsZWRfbWFwcGluZ3NbaV0pOwo+ID4gK8KgwqDC oMKgwqDCoMKgfQo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgaXJxX3NldF9jaGFpbmVkX2hhbmRs ZXJfYW5kX2RhdGEoZGF0YS0+bXBwN192aXJxLAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoAo+ ID4gdHM3ODAwX2ljX2NoYWluZWRfaGFuZGxlX2lycSwgZGF0YSk7Cj4gPiArCj4gPiArwqDCoMKg wqDCoMKgwqBpcnFfc2V0X3N0YXR1c19mbGFncyhkYXRhLT5tcHA3X3ZpcnEsCj4gPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIElSUV9ESVNB QkxFX1VOTEFaWSB8IElSUV9MRVZFTCB8Cj4gPiBJUlFfTk9QUk9CRSk7Cj4gCj4gV2h5IHRoZSBJ UlFfRElTQUJMRV9VTkxBWlkgZmxhZz8KYWNrLCB0byBiZSByZW1vdmVkCj4gCj4gPiArCj4gPiAr wqDCoMKgwqDCoMKgwqBwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBkYXRhKTsKPiA+ICsKPiA+ ICvCoMKgwqDCoMKgwqDCoHJldHVybiAwOwo+ID4gKwo+ID4gK2lycV9kb21haW5fYWRkX2xpbmVh cl9lcnI6Cj4gPiArcGx0ZnJtX2dldF9yZXNfaXJxX2VycjoKPiA+ICvCoMKgwqDCoMKgwqDCoGRl dm1faW91bm1hcCgmcGRldi0+ZGV2LCBkYXRhLT5icmlkZ2UpOwo+ID4gKwo+ID4gK2Rldm1faW9y ZW1hcF9yZXNfYnJkZ2VfZXJyOgo+ID4gK3BsdGZybV9nZXRfcmVzX2JyZGdfZXJyOgo+ID4gK8Kg wqDCoMKgwqDCoMKgZGV2bV9pb3VubWFwKCZwZGV2LT5kZXYsIGRhdGEtPmJhc2UpOwo+ID4gKwo+ ID4gK2Rldm1faW9yZW1hcF9yZXNfbWVtX2VycjoKPiA+ICtwbHRmcm1fZ2V0X3Jlc19tZW1fZXJy Ogo+ID4gK8KgwqDCoMKgwqDCoMKgZGV2bV9rZnJlZSgmcGRldi0+ZGV2LCBkYXRhKTsKPiA+ICsK PiA+ICtkZXZtX2t6YWxsb2NfZXJyOgo+ID4gK8KgwqDCoMKgwqDCoMKgcmV0dXJuIHJldDsKPiA+ ICt9Cj4gPiArCj4gPiArc3RhdGljIGludCB0czc4MDBfaWNfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9y bV9kZXZpY2UgKnBkZXYpCj4gPiArewo+ID4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IHRzNzgwMF9p cnFfZGF0YSAqZGF0YSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwo+ID4gK8KgwqDCoMKg wqDCoMKgaW50IGk7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqBpZiAoIUlTX0VSUl9PUl9OVUxM KGRhdGEpKSB7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaXJxX3NldF9jaGFp bmVkX2hhbmRsZXJfYW5kX2RhdGEoZGF0YS0+bXBwN192aXJxLAo+ID4gTlVMTCwgTlVMTCk7Cj4g PiArCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZm9yIChpID0gMDsgaSA8IEFS UkFZX1NJWkUoZW5hYmxlZF9tYXBwaW5ncyk7ICsraSkKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaXJxX2Rpc3Bvc2VfbWFwcGluZyhpcnFfZmluZF9t YXBwaW5nKAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgZGF0YS0+ZG9tYWluLAo+ID4gZW5hYmxlZF9tYXBwaW5nc1tpXSkp Owo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlycV9kb21haW5fcmVt b3ZlKGRhdGEtPmRvbWFpbik7Cj4gPiArwqDCoMKgwqDCoMKgwqB9Cj4gPiArCj4gPiArwqDCoMKg wqDCoMKgwqByZXR1cm4gMDsKPiA+ICt9Cj4gCj4gV2UgZG9uJ3QgcmVtb3ZlIGludGVycnVwdCBj b250cm9sbGVycy4gV2hhdCBoYXBwZW5zIGlmIHNvbWVvbmUgc3RpbGwKPiBoYWQgYSBtYXBwaW5n PwpiZWNvbWVzIHBlcm1hbmVudCAKCiMgbHNtb2QKTW9kdWxlIFNpemUgVXNlZCBieSBOb3QgdGFp bnRlZAp0czc4MDB2MV9zZG1tYyA0NTA1NiAwIAp0c19kbWFjIDI0NTc2IDEgCnZpcnRfZG1hIDE2 Mzg0IDEgdHNfZG1hYwppcnFfdHM3ODAwIDE2Mzg0IDAgW3Blcm1hbmVudF0KCiMgcm1tb2QgaXJx X3RzNzgwMApybW1vZDogY2FuJ3QgdW5sb2FkIG1vZHVsZSAnaXJxX3RzNzgwMCc6IERldmljZSBv ciByZXNvdXJjZSBidXN5CiMgCj4gCj4gPiArCj4gPiArc3RhdGljIGNvbnN0IHN0cnVjdCBwbGF0 Zm9ybV9kZXZpY2VfaWQgdHM3ODAwdjFfaWNfaWRzW10gPSB7Cj4gPiArwqDCoMKgwqDCoMKgwqB7 Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgLm5hbWUgPSBEUklWRVJfTkFNRSwK PiA+ICvCoMKgwqDCoMKgwqDCoH0sCj4gPiArwqDCoMKgwqDCoMKgwqB7Cj4gPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgLyogc2VudGluZWwgKi8KPiA+ICvCoMKgwqDCoMKgwqDCoH0K PiA+ICt9Owo+ID4gKwo+ID4gK01PRFVMRV9ERVZJQ0VfVEFCTEUocGxhdGZvcm0sIHRzNzgwMHYx X2ljX2lkcyk7Cj4gPiArCj4gPiArc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgdHM3ODAw X2ljX2RyaXZlciA9IHsKPiA+ICvCoMKgwqDCoMKgwqDCoC5wcm9iZcKgID0gdHM3ODAwX2ljX3By b2JlLAo+ID4gK8KgwqDCoMKgwqDCoMKgLnJlbW92ZSA9IHRzNzgwMF9pY19yZW1vdmUsCj4gPiAr wqDCoMKgwqDCoMKgwqAuaWRfdGFibGXCoMKgwqDCoMKgwqDCoD0gdHM3ODAwdjFfaWNfaWRzLAo+ ID4gK8KgwqDCoMKgwqDCoMKgLmRyaXZlciA9IHsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAubmFtZSA9IERSSVZFUl9OQU1FLAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoC5wcm9iZV90eXBlID0gUFJPQkVfUFJFRkVSX0FTWU5DSFJPTk9VUywKPiA+ICvCoMKg wqDCoMKgwqDCoH0sCj4gPiArfTsKPiA+ICttb2R1bGVfcGxhdGZvcm1fZHJpdmVyKHRzNzgwMF9p Y19kcml2ZXIpOwo+IAo+IFBsZWFzZSB1c2UgdGhlIGV4aXN0aW5nIGhlbHBlcnMuCmFjawo+IAo+ ID4gKwo+ID4gK01PRFVMRV9BTElBUygicGxhdGZvcm06dHM3ODAwLWlycWMiKTsKPiA+ICtNT0RV TEVfREVTQ1JJUFRJT04oIlRTLTc4MDB2MSBGUEdBIGJhc2VkIElSUSBjb250cm9sbGVyIERyaXZl ciIpOwo+ID4gK01PRFVMRV9BVVRIT1IoIkZpcmFzIEFzaGthciA8ZmlyYXMuYXNoa2FyQHNhdm9p cmZhaXJlbGludXguY29tPiIpOwo+ID4gK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKPiAKPiDCoMKg wqDCoMKgwqDCoMKgTS4KPiAK