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 X-Spam-Level: X-Spam-Status: No, score=-8.3 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_SANE_1 autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 4FC59C31E40 for ; Fri, 9 Aug 2019 11:47:22 +0000 (UTC) Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 144082166E for ; Fri, 9 Aug 2019 11:47:22 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="Pu3/wknP"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=ti.com header.i=@ti.com header.b="fieDVVl6" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 144082166E Authentication-Results: mail.kernel.org; dmarc=fail (p=quarantine dis=none) header.from=ti.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-mtd-bounces+linux-mtd=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:Cc:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:In-Reply-To:MIME-Version:Date: Message-ID:From:References:To:Subject:Reply-To:Content-ID:Content-Description :Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=17+ApNnrWa332WBDQ7E7Q+dtLObh59j+VjluWvwuBJ4=; b=Pu3/wknPEACocH HsOQMmPrLmsClB/PpsxWnQY/dYk0horN0Rt04sSdCccfI6IO2lomG3mnWtRZAz5I7S+tPOKX1NUwq wiPlaT8Uwle0yQFENcoBnkf3mAXx7HJR8xLDmbIqqIheUdn+1KPg+xb4aJ2nsWnePEDk8t2+rELLr ii0sDBjWG/IbE5HzTY8L2ey0cv/gm5Bzv4H1gUYNZGE+/LiTiaRmFwebRoBaEgW6WYETRqiI9tiJB b4INKST5ScnGHZTsCB8Hn91uITliOrByqvGOaxkn561SlYuMbf6Glyiq7Hgazgc9AwdymSbEh5TJI RhjBR+V41EM+QJVoaH2Q==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92 #3 (Red Hat Linux)) id 1hw3MM-0000V2-P4; Fri, 09 Aug 2019 11:47:02 +0000 Received: from fllv0015.ext.ti.com ([198.47.19.141]) by bombadil.infradead.org with esmtps (Exim 4.92 #3 (Red Hat Linux)) id 1hw3MG-0000Ub-0Y for linux-mtd@lists.infradead.org; Fri, 09 Aug 2019 11:47:00 +0000 Received: from lelv0266.itg.ti.com ([10.180.67.225]) by fllv0015.ext.ti.com (8.15.2/8.15.2) with ESMTP id x79BkoIm030966; Fri, 9 Aug 2019 06:46:50 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ti.com; s=ti-com-17Q1; t=1565351210; bh=GpTvkwHyDxghgF8eAkYNAsKhLVqI6G7KQjlC91O3V6M=; h=Subject:To:CC:References:From:Date:In-Reply-To; b=fieDVVl6acX6O2gIgj5Ba3Ht9GuJ5qtoS4nDiD6Rn0br5Rz2s2Cy4oDqB9XSYA1Tw PzvoLwW3xOZCaW3oKCxWovlLQYcgnj6tMjJ9hL8cKLlPPlUU/yDYGRSOTuccS31v+j eM1DDcS0gsoMtiarX46+UZHqulEeaMOkkYdd8HBs= Received: from DFLE111.ent.ti.com (dfle111.ent.ti.com [10.64.6.32]) by lelv0266.itg.ti.com (8.15.2/8.15.2) with ESMTPS id x79Bkocd087325 (version=TLSv1.2 cipher=AES256-GCM-SHA384 bits=256 verify=FAIL); Fri, 9 Aug 2019 06:46:50 -0500 Received: from DFLE101.ent.ti.com (10.64.6.22) by DFLE111.ent.ti.com (10.64.6.32) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1713.5; Fri, 9 Aug 2019 06:46:50 -0500 Received: from lelv0326.itg.ti.com (10.180.67.84) by DFLE101.ent.ti.com (10.64.6.22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1713.5 via Frontend Transport; Fri, 9 Aug 2019 06:46:50 -0500 Received: from [172.24.145.136] (ileax41-snat.itg.ti.com [10.172.224.153]) by lelv0326.itg.ti.com (8.15.2/8.15.2) with ESMTP id x79Bkl62094730; Fri, 9 Aug 2019 06:46:48 -0500 Subject: Re: [PATCH v5 2/3] mtd: spi-nor: Move m25p80 code in spi-nor.c To: Tomer Maimon References: <20190806051041.3636-1-vigneshr@ti.com> <20190806051041.3636-3-vigneshr@ti.com> From: Vignesh Raghavendra Message-ID: Date: Fri, 9 Aug 2019 17:17:29 +0530 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.8.0 MIME-Version: 1.0 In-Reply-To: Content-Language: en-US X-EXCLAIMER-MD-CONFIG: e1e8a2fd-e40a-4ac6-ac9b-f7e9cc9ee180 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20190809_044656_189361_95412659 X-CRM114-Status: GOOD ( 37.45 ) X-BeenThere: linux-mtd@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Linux MTD discussion mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Tudor Ambarus , Richard Weinberger , Boris Brezillon , Linux Kernel Mailing List , Marek Vasut , linux-mtd@lists.infradead.org, Miquel Raynal Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-mtd" Errors-To: linux-mtd-bounces+linux-mtd=archiver.kernel.org@lists.infradead.org SGkgVG9tZXIsCgpPbiAwOC8wOC8xOSAzOjM1IFBNLCBUb21lciBNYWltb24gd3JvdGU6Cj4gCj4g SGkgVmlnbmVzaCwKPiAKPiBUaGFua3MgZm9yIHdvcmtpbmcgb24gdGhlIHNwaS1ub3IgcGF0Y2hl cy4KPiAKPiBJIGhhdmUgdGVzdGVkIHlvdXIgbGF0ZXN0IHBhdGNoZXMgd2l0aCBOUENNIEZJVSBk cml2ZXIgb24gdHdvIGRpZmZlcmVudAo+IEZsYXNoZXM6Cj4gCj4gMS7CoCBXaW5ib25kIHcyNXEy NTYgLSAzMk1CCj4gMi7CoCBNYWNyb25peCBteDI1bDMyMDVkLSA0TUIKPiAKPiBTb3JyeSBJIGdv aW5nIHRvIGEgdmFjYXRpb24gc29vbiAob24gdGlnaHQgc2NoZWR1bGUpIHNvIEkgaGF2ZW4ndCBo YWQgYQo+IHRpbWUgdG8gZG8gZnVsbCBzdHJlc3MgdGVzdCBvbiB0aGUgc3BpLW5vciBkcml2ZXIg KG9ubHkgZXJhc2Usd3JpdGUsIHJlYWQpLgo+IAoKVGhhbmtzIGZvciB0ZXN0aW5nIQoKPiBUaGVy ZSBpcyBhbiBpc3N1ZSB3aXRoIGVyYXNlIHNlY3RvciBmdW5jdGlvbiwgdGhlIGFkZHJlc3Mgc2hv dWxkIHNlbmQgYXMKPiBhIGRhdGEuIChzZWUgdGhlIG1vZGlmaWNhdGlvbiBiZWxvdykuCj4gCgpB cyBCb3JpcyBwb2ludGVkIG91dCwgRXJhc2Ugc2VxdWVuY2UgZG9lcyBub3QgaGF2ZSBkYXRhIHBo YXNlLCBzcGktbWVtCmNvbnRyb2xsZXIgZHJpdmVyIHNob3VsZCBoYW5kbGUgU1BJX01FTV9OT19E QVRBIGZsYWcgYWNjb3JkaW5nbHkuCkkgZ3Vlc3MgeW91IGhhdmUgZml4ZWQgdGhpcyBpbiB2MiBv ZiBOUENNIEZJVSBjb250cm9sbGVyIGRyaXZlciBzdXBwb3J0CnNlcmllc+KAiyBhbmQgdGhpcyBp cyBubyBsb25nZXIgYW4gaXNzdWUgcmlnaHQ/Cgo+IEFyZSB5b3UgaW50ZW5kIHRvIGFkZCBhIGRp cmVjdCBzcGktbWVtIHN1cHBvcnQgdG8gdGhlIHNwaS1ub3IgZHJpdmVyPwoKTWF5IG5vdCBiZSBm b3IgdGhpcyBtZXJnZSB3aW5kb3csIG1vcmVvdmVyIEkgZG9uJ3QgaGF2ZSBhIHNwaS1tZW0gZHJp dmVyCnRvIGV4ZXJjaXNlIHRoaXMgZGlybWFwIEFQSXMgKEkgYW0gaW4gdGhlIHByb2Nlc3Mgb2Yg Y29udmVydGluZyBvbmUpLgpCdXQsIGZlZWwgZnJlZSB0byBzdWJtaXQgYSBwYXRjaCBpZiB5b3Ug aGF2ZSBvbmUuCgpQbGVhc2Uga2VlcCBpbiBtaW5kIHRoZSBvZiBjaGFuZ2VzIGRvbmUgYnkgVHVk b3IgaGVyZToKaHR0cHM6Ly9wYXRjaHdvcmsub3psYWJzLm9yZy9wcm9qZWN0L2xpbnV4LW10ZC9s aXN0Lz9zZXJpZXM9MTIyNDIwCmh0dHBzOi8vcGF0Y2h3b3JrLm96bGFicy5vcmcvcHJvamVjdC9s aW51eC1tdGQvbGlzdC8/c2VyaWVzPTEyMjQyMwpodHRwczovL3BhdGNod29yay5vemxhYnMub3Jn L3Byb2plY3QvbGludXgtbXRkL2xpc3QvP3Nlcmllcz0xMjI0MjQKClRoZXJlIG1heSBiZSBwb3Rl bnRpYWwgY29uZmxpY3RzIGFuZCByZWJhc2luZyBuZWVkZWQuCgpSZWdhcmRzClZpZ25lc2gKCj4g Cj4gT24gVHVlLCA2IEF1ZyAyMDE5IGF0IDA4OjEwLCBWaWduZXNoIFJhZ2hhdmVuZHJhIDx2aWdu ZXNockB0aS5jb20KPiA8bWFpbHRvOnZpZ25lc2hyQHRpLmNvbT4+IHdyb3RlOgo+IAo+ICAgICBG cm9tOiBCb3JpcyBCcmV6aWxsb24gPGJvcmlzLmJyZXppbGxvbkBib290bGluLmNvbQo+ICAgICA8 bWFpbHRvOmJvcmlzLmJyZXppbGxvbkBib290bGluLmNvbT4+Cj4gCj4gICAgIFRoZSBtMjVwODAg ZHJpdmVyIGlzIGFjdHVhbGx5IGEgZ2VuZXJpYyB3cmFwcGVyIGFyb3VuZCB0aGUgc3BpLW1lbQo+ ICAgICBsYXllci4gTm90IG9ubHkgdGhlIGRyaXZlciBuYW1lIGlzIG1pc2xlYWRpbmcsIGJ1dCB3 ZSdkIGV4cGVjdCBzdWNoIGEKPiAgICAgY29tbW9uIGxvZ2ljIHRvIGJlIGRpcmVjdGx5IGF2YWls YWJsZSBpbiB0aGUgY29yZS4gQW5vdGhlciByZWFzb24gZm9yCj4gICAgIG1vdmluZyB0aGlzIGNv ZGUgaXMgdGhhdCBTUEkgTk9SIGNvbnRyb2xsZXIgZHJpdmVycyBzaG91bGQKPiAgICAgcHJvZ3Jl c3NpdmVseSBiZSByZXBsYWNlZCBieSBTUEkgY29udHJvbGxlciBkcml2ZXJzIGltcGxlbWVudGlu ZyB0aGUKPiAgICAgc3BpX21lbV9vcHMgaW50ZXJmYWNlLCBhbmQgd2hlbiB0aGUgY29udmVyc2lv biBpcyBkb25lLCB3ZSBzaG91bGQgaGF2ZQo+ICAgICBhIHNpbmdsZSBzcGktbm9yIGRyaXZlciBk aXJlY3RseSBpbnRlcmZhY2luZyB3aXRoIHRoZSBzcGktbWVtIGxheWVyLgo+IAo+ICAgICBXaGls ZSBtb3ZpbmcgdGhlIGNvZGUgd2UgYWxzbyBmaXggYSBsb25nc3RhbmRpbmcgaXNzdWUgd2hlbgo+ ICAgICBub24tRE1BLWFibGUgYnVmZmVycyBhcmUgcGFzc2VkIGJ5IHRoZSBNVEQgbGF5ZXIuCj4g Cj4gICAgIFNpZ25lZC1vZmYtYnk6IEJvcmlzIEJyZXppbGxvbiA8Ym9yaXMuYnJlemlsbG9uQGJv b3RsaW4uY29tCj4gICAgIDxtYWlsdG86Ym9yaXMuYnJlemlsbG9uQGJvb3RsaW4uY29tPj4KPiAg ICAgU2lnbmVkLW9mZi1ieTogVmlnbmVzaCBSYWdoYXZlbmRyYSA8dmlnbmVzaHJAdGkuY29tCj4g ICAgIDxtYWlsdG86dmlnbmVzaHJAdGkuY29tPj4KPiAgICAgLS0tCj4gICAgIHY1Ogo+ICAgICBG aXggY29tbWVudHMgYnkgVHVkb3IgaW4gc3BpX25vcl9zcGltZW1fcmVhZF9kYXRhKCkgYW5kCj4g ICAgIHNwaV9ub3JfcmVhZF9zcjIoKQo+IAo+ICAgICB2NDoKPiAgICAgRml4IGEgYnVnIGluIHdy aXRlX3NyKCkKPiAgICAgVXBkYXRlIGNvbW1lbnRzIGFyb3VuZCBhbGxvY2F0aW9uIG9mIGJvdW5j ZSBidWZmZXIKPiAKPiAgICAgdjM6Cj4gICAgIFNpbXBsaWZ5IHJlZ2lzdGVyIHJlYWQvd3JpdGUg YnkgZHJvcHBpbmcgc3BpX25vcl9leGVjX29wKCkgYW5kIHVzaW5nCj4gICAgIHNwaV9tZW1fZXhl Y19vcCgpIGRpcmVjdGx5Cj4gICAgIE1vZGlmeSBzcGlfbm9yX3NwaW1lbV94ZmVyX2RhdGEoKSB0 byBkcm9wICJlbnVtIHNwaV9ub3JfcHJvdG9jb2wgcHJvdG8iCj4gICAgIEZpeCBtaXNjIGNvZGlu ZyBzdHlsZSBjb21tZW50cyBieSBUdWRvcgo+IAo+ICAgICB2MjoKPiAgICAgQWRkIGRvY3MgZm9y IG5ldyBmdW5jdGlvbnMgYWRkZWQKPiAgICAgQWRkIHNwaV9ub3JfIHByZWZpeCB0byBuZXcgZnVu Y3Rpb25zCj4gICAgIEluY29ycG9yYXRlIEFuZHJleSdzIHBhdGNoZXMgaHR0cHM6Ly9sa21sLm9y Zy9sa21sLzIwMTkvNC8xLzMyCj4gICAgIHRvIGF2b2lkIGxvb3Bpbmcgc3BpX25vcl9zcGltZW1f KiBBUElzCj4gCj4gICAgIMKgZHJpdmVycy9tdGQvZGV2aWNlcy9LY29uZmlnwqAgwqB8wqAgMTgg LQo+ICAgICDCoGRyaXZlcnMvbXRkL2RldmljZXMvTWFrZWZpbGXCoCB8wqAgwqAxIC0KPiAgICAg wqBkcml2ZXJzL210ZC9kZXZpY2VzL20yNXA4MC5jwqAgfCAzNDcgLS0tLS0tLS0tLS0tLS0tLS0t LQo+ICAgICDCoGRyaXZlcnMvbXRkL3NwaS1ub3IvS2NvbmZpZ8KgIMKgfMKgIMKgMiArCj4gICAg IMKgZHJpdmVycy9tdGQvc3BpLW5vci9zcGktbm9yLmMgfCA2MjggKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKystLQo+ICAgICDCoGluY2x1ZGUvbGludXgvbXRkL3NwaS1ub3IuaMKgIMKg fMKgIMKgMyArCj4gICAgIMKgNiBmaWxlcyBjaGFuZ2VkLCA2MDUgaW5zZXJ0aW9ucygrKSwgMzk0 IGRlbGV0aW9ucygtKQo+ICAgICDCoGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL210ZC9kZXZp Y2VzL20yNXA4MC5jCj4gCj4gICAgIGRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9kZXZpY2VzL0tj b25maWcgYi9kcml2ZXJzL210ZC9kZXZpY2VzL0tjb25maWcKPiAgICAgaW5kZXggNDlhYmJjNTI0 NTdkLi5mOTYyODdjNGI3ODkgMTAwNjQ0Cj4gICAgIC0tLSBhL2RyaXZlcnMvbXRkL2RldmljZXMv S2NvbmZpZwo+ICAgICArKysgYi9kcml2ZXJzL210ZC9kZXZpY2VzL0tjb25maWcKPiAgICAgQEAg LTc5LDI0ICs3OSw2IEBAIGNvbmZpZyBNVERfREFUQUZMQVNIX09UUAo+ICAgICDCoCDCoCDCoCDC oCDCoCBvdGhlciBrZXkgcHJvZHVjdCBkYXRhLsKgIFRoZSBzZWNvbmQgaGFsZiBpcyBwcm9ncmFt bWVkIHdpdGggYQo+ICAgICDCoCDCoCDCoCDCoCDCoCB1bmlxdWUtdG8tZWFjaC1jaGlwIGJpdCBw YXR0ZXJuIGF0IHRoZSBmYWN0b3J5Lgo+IAo+ICAgICAtY29uZmlnIE1URF9NMjVQODAKPiAgICAg LcKgIMKgIMKgIMKgdHJpc3RhdGUgIlN1cHBvcnQgbW9zdCBTUEkgRmxhc2ggY2hpcHMgKEFUMjZE RiwgTTI1UCwgVzI1WCwKPiAgICAgLi4uKSIKPiAgICAgLcKgIMKgIMKgIMKgZGVwZW5kcyBvbiBT UElfTUFTVEVSICYmIE1URF9TUElfTk9SCj4gICAgIC3CoCDCoCDCoCDCoHNlbGVjdCBTUElfTUVN Cj4gICAgIC3CoCDCoCDCoCDCoGhlbHAKPiAgICAgLcKgIMKgIMKgIMKgIMKgVGhpcyBlbmFibGVz IGFjY2VzcyB0byBtb3N0IG1vZGVybiBTUEkgZmxhc2ggY2hpcHMsIHVzZWQgZm9yCj4gICAgIC3C oCDCoCDCoCDCoCDCoHByb2dyYW0gYW5kIGRhdGEgc3RvcmFnZS7CoCDCoFNlcmllcyBzdXBwb3J0 ZWQgaW5jbHVkZSBBdG1lbAo+ICAgICBBVDI2REYsCj4gICAgIC3CoCDCoCDCoCDCoCDCoFNwYW5z aW9uIFMyNVNMLCBTU1QgMjVWRiwgU1QgTTI1UCwgYW5kIFdpbmJvbmQgVzI1WC7CoAo+ICAgICBP dGhlciBjaGlwcwo+ICAgICAtwqAgwqAgwqAgwqAgwqBhcmUgc3VwcG9ydGVkIGFzIHdlbGwuwqAg U2VlIHRoZSBkcml2ZXIgc291cmNlIGZvciB0aGUKPiAgICAgY3VycmVudCBsaXN0LAo+ICAgICAt wqAgwqAgwqAgwqAgwqBvciB0byBhZGQgb3RoZXIgY2hpcHMuCj4gICAgIC0KPiAgICAgLcKgIMKg IMKgIMKgIMKgTm90ZSB0aGF0IHRoZSBvcmlnaW5hbCBEYXRhRmxhc2ggY2hpcHMgKEFUNDUgc2Vy aWVzLCBub3QKPiAgICAgQVQyNkRGKSwKPiAgICAgLcKgIMKgIMKgIMKgIMKgbmVlZCBhbiBlbnRp cmVseSBkaWZmZXJlbnQgZHJpdmVyLgo+ICAgICAtCj4gICAgIC3CoCDCoCDCoCDCoCDCoFNldCB1 cCB5b3VyIHNwaSBkZXZpY2VzIHdpdGggdGhlIHJpZ2h0IGJvYXJkLXNwZWNpZmljCj4gICAgIHBs YXRmb3JtIGRhdGEsCj4gICAgIC3CoCDCoCDCoCDCoCDCoGlmIHlvdSB3YW50IHRvIHNwZWNpZnkg ZGV2aWNlIHBhcnRpdGlvbmluZyBvciB0byB1c2UgYQo+ICAgICBkZXZpY2Ugd2hpY2gKPiAgICAg LcKgIMKgIMKgIMKgIMKgZG9lc24ndCBzdXBwb3J0IHRoZSBKRURFQyBJRCBpbnN0cnVjdGlvbi4K PiAgICAgLQo+ICAgICDCoGNvbmZpZyBNVERfTUNIUDIzSzI1Ngo+ICAgICDCoCDCoCDCoCDCoCB0 cmlzdGF0ZSAiTWljcm9jaGlwIDIzSzI1NiBTUkFNIgo+ICAgICDCoCDCoCDCoCDCoCBkZXBlbmRz IG9uIFNQSV9NQVNURVIKPiAgICAgZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL2RldmljZXMvTWFr ZWZpbGUgYi9kcml2ZXJzL210ZC9kZXZpY2VzL01ha2VmaWxlCj4gICAgIGluZGV4IDk0ODk1ZWFi MzA2Ni4uOTkxYzhkMTJjMDE2IDEwMDY0NAo+ICAgICAtLS0gYS9kcml2ZXJzL210ZC9kZXZpY2Vz L01ha2VmaWxlCj4gICAgICsrKyBiL2RyaXZlcnMvbXRkL2RldmljZXMvTWFrZWZpbGUKPiAgICAg QEAgLTEyLDcgKzEyLDYgQEAgb2JqLSQoQ09ORklHX01URF9NVERSQU0pwqAgwqAgwqAgKz0gbXRk cmFtLm8KPiAgICAgwqBvYmotJChDT05GSUdfTVREX0xBUlQpwqAgwqAgwqAgwqAgwqArPSBsYXJ0 Lm8KPiAgICAgwqBvYmotJChDT05GSUdfTVREX0JMT0NLMk1URCnCoCDCoCArPSBibG9jazJtdGQu bwo+ICAgICDCoG9iai0kKENPTkZJR19NVERfREFUQUZMQVNIKcKgIMKgICs9IG10ZF9kYXRhZmxh c2gubwo+ICAgICAtb2JqLSQoQ09ORklHX01URF9NMjVQODApwqAgwqAgwqAgwqArPSBtMjVwODAu bwo+ICAgICDCoG9iai0kKENPTkZJR19NVERfTUNIUDIzSzI1NinCoCDCoCs9IG1jaHAyM2syNTYu bwo+ICAgICDCoG9iai0kKENPTkZJR19NVERfU1BFQVJfU01JKcKgIMKgICs9IHNwZWFyX3NtaS5v Cj4gICAgIMKgb2JqLSQoQ09ORklHX01URF9TU1QyNUwpwqAgwqAgwqAgwqArPSBzc3QyNWwubwo+ ICAgICBkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvZGV2aWNlcy9tMjVwODAuYyBiL2RyaXZlcnMv bXRkL2RldmljZXMvbTI1cDgwLmMKPiAgICAgZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cj4gICAg IGluZGV4IGM1MDg4ODY3MDI1MC4uMDAwMDAwMDAwMDAwCj4gICAgIC0tLSBhL2RyaXZlcnMvbXRk L2RldmljZXMvbTI1cDgwLmMKPiAgICAgKysrIC9kZXYvbnVsbAo+ICAgICBAQCAtMSwzNDcgKzAs MCBAQAo+ICAgICAtLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQo+ICAg ICAtLyoKPiAgICAgLSAqIE1URCBTUEkgZHJpdmVyIGZvciBTVCBNMjVQeHggKGFuZCBzaW1pbGFy KSBzZXJpYWwgZmxhc2ggY2hpcHMKPiAgICAgLSAqCj4gICAgIC0gKiBBdXRob3I6IE1pa2UgTGF2 ZW5kZXIsIG1pa2VAc3Rlcm9pZG1pY3Jvcy5jb20KPiAgICAgPG1haWx0bzptaWtlQHN0ZXJvaWRt aWNyb3MuY29tPgo+ICAgICAtICoKPiAgICAgLSAqIENvcHlyaWdodCAoYykgMjAwNSwgSW50ZWMg QXV0b21hdGlvbiBJbmMuCj4gICAgIC0gKgo+ICAgICAtICogU29tZSBwYXJ0cyBhcmUgYmFzZWQg b24gbGFydC5jIGJ5IEFicmFoYW0gVmFuIERlciBNZXJ3ZQo+ICAgICAtICoKPiAgICAgLSAqIENs ZWFuZWQgdXAgYW5kIGdlbmVyYWxpemVkIGJhc2VkIG9uIG10ZF9kYXRhZmxhc2guYwo+ICAgICAt ICovCj4gICAgIC0KPiAgICAgLSNpbmNsdWRlIDxsaW51eC9lcnIuaD4KPiAgICAgLSNpbmNsdWRl IDxsaW51eC9lcnJuby5oPgo+ICAgICAtI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgo+ICAgICAt I2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgo+ICAgICAtCj4gICAgIC0jaW5jbHVkZSA8bGludXgv bXRkL210ZC5oPgo+ICAgICAtI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+Cj4gICAg IC0KPiAgICAgLSNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+Cj4gICAgIC0jaW5jbHVkZSA8bGlu dXgvc3BpL3NwaS1tZW0uaD4KPiAgICAgLSNpbmNsdWRlIDxsaW51eC9zcGkvZmxhc2guaD4KPiAg ICAgLSNpbmNsdWRlIDxsaW51eC9tdGQvc3BpLW5vci5oPgo+ICAgICAtCj4gICAgIC1zdHJ1Y3Qg bTI1cCB7Cj4gICAgIC3CoCDCoCDCoCDCoHN0cnVjdCBzcGlfbWVtwqAgwqAgwqAgwqAgwqAgKnNw aW1lbTsKPiAgICAgLcKgIMKgIMKgIMKgc3RydWN0IHNwaV9ub3LCoCDCoCDCoCDCoCDCoCBzcGlf bm9yOwo+ICAgICAtfTsKPiAgICAgLQo+ICAgICAtc3RhdGljIGludCBtMjVwODBfcmVhZF9yZWco c3RydWN0IHNwaV9ub3IgKm5vciwgdTggY29kZSwgdTggKnZhbCwKPiAgICAgaW50IGxlbikKPiAg ICAgLXsKPiAgICAgLcKgIMKgIMKgIMKgc3RydWN0IG0yNXAgKmZsYXNoID0gbm9yLT5wcml2Owo+ ICAgICAtwqAgwqAgwqAgwqBzdHJ1Y3Qgc3BpX21lbV9vcCBvcCA9IFNQSV9NRU1fT1AoU1BJX01F TV9PUF9DTUQoY29kZSwgMSksCj4gICAgIC3CoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoFNQSV9NRU1fT1BfTk9fQUREUiwKPiAgICAg LcKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgU1BJX01FTV9PUF9OT19EVU1NWSwKPiAgICAgLcKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgU1BJX01FTV9PUF9EQVRBX0lO KGxlbiwKPiAgICAgTlVMTCwgMSkpOwo+ICAgICAtwqAgwqAgwqAgwqB2b2lkICpzY3JhdGNoYnVm Owo+ICAgICAtwqAgwqAgwqAgwqBpbnQgcmV0Owo+ICAgICAtCj4gICAgIC3CoCDCoCDCoCDCoHNj cmF0Y2hidWYgPSBrbWFsbG9jKGxlbiwgR0ZQX0tFUk5FTCk7Cj4gICAgIC3CoCDCoCDCoCDCoGlm ICghc2NyYXRjaGJ1ZikKPiAgICAgLcKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgcmV0dXJuIC1FTk9N RU07Cj4gICAgIC0KPiAgICAgLcKgIMKgIMKgIMKgb3AuZGF0YS5idWYuaW4gPGh0dHA6Ly9vcC5k YXRhLmJ1Zi5pbj4gPSBzY3JhdGNoYnVmOwo+ICAgICAtwqAgwqAgwqAgwqByZXQgPSBzcGlfbWVt X2V4ZWNfb3AoZmxhc2gtPnNwaW1lbSwgJm9wKTsKPiAgICAgLcKgIMKgIMKgIMKgaWYgKHJldCA8 IDApCj4gICAgIC3CoCDCoCDCoCDCoCDCoCDCoCDCoCDCoGRldl9lcnIoJmZsYXNoLT5zcGltZW0t PnNwaS0+ZGV2LCAiZXJyb3IgJWQgcmVhZGluZwo+ICAgICAleFxuIiwgcmV0LAo+ICAgICAtwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBjb2RlKTsKPiAgICAgLcKgIMKgIMKgIMKg ZWxzZQo+ICAgICAtwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBtZW1jcHkodmFsLCBzY3JhdGNoYnVm LCBsZW4pOwo+ICAgICAtCj4gICAgIC3CoCDCoCDCoCDCoGtmcmVlKHNjcmF0Y2hidWYpOwo+ICAg ICAtCj4gICAgIC3CoCDCoCDCoCDCoHJldHVybiByZXQ7Cj4gICAgIC19Cj4gICAgIC0KPiAgICAg LXN0YXRpYyBpbnQgbTI1cDgwX3dyaXRlX3JlZyhzdHJ1Y3Qgc3BpX25vciAqbm9yLCB1OCBvcGNv ZGUsIHU4Cj4gICAgICpidWYsIGludCBsZW4pCj4gICAgIC17Cj4gICAgIC3CoCDCoCDCoCDCoHN0 cnVjdCBtMjVwICpmbGFzaCA9IG5vci0+cHJpdjsKPiAgICAgLcKgIMKgIMKgIMKgc3RydWN0IHNw aV9tZW1fb3Agb3AgPSBTUElfTUVNX09QKFNQSV9NRU1fT1BfQ01EKG9wY29kZSwgMSksCj4gICAg IC3CoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoFNQSV9NRU1fT1BfTk9fQUREUiwKPiAgICAgLcKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgU1BJX01FTV9PUF9OT19EVU1N WSwKPiAgICAgLcKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgU1BJX01FTV9PUF9EQVRBX09VVChsZW4sCj4gICAgIE5VTEwsIDEpKTsK PiAgICAgLcKgIMKgIMKgIMKgdm9pZCAqc2NyYXRjaGJ1ZjsKPiAgICAgLcKgIMKgIMKgIMKgaW50 IHJldDsKPiAgICAgLQo+ICAgICAtwqAgwqAgwqAgwqBzY3JhdGNoYnVmID0ga21lbWR1cChidWYs IGxlbiwgR0ZQX0tFUk5FTCk7Cj4gICAgIC3CoCDCoCDCoCDCoGlmICghc2NyYXRjaGJ1ZikKPiAg ICAgLcKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgcmV0dXJuIC1FTk9NRU07Cj4gICAgIC0KPiAgICAg LcKgIMKgIMKgIMKgb3AuZGF0YS5idWYub3V0ID0gc2NyYXRjaGJ1ZjsKPiAgICAgLcKgIMKgIMKg IMKgcmV0ID0gc3BpX21lbV9leGVjX29wKGZsYXNoLT5zcGltZW0sICZvcCk7Cj4gICAgIC3CoCDC oCDCoCDCoGtmcmVlKHNjcmF0Y2hidWYpOwo+ICAgICAtCj4gICAgIC3CoCDCoCDCoCDCoHJldHVy biByZXQ7Cj4gICAgIC19Cj4gICAgIC0KPiAgICAgLXN0YXRpYyBzc2l6ZV90IG0yNXA4MF93cml0 ZShzdHJ1Y3Qgc3BpX25vciAqbm9yLCBsb2ZmX3QgdG8sIHNpemVfdCBsZW4sCj4gICAgIC3CoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoGNvbnN0IHVfY2hhciAqYnVmKQo+ ICAgICAtewo+ICAgICAtwqAgwqAgwqAgwqBzdHJ1Y3QgbTI1cCAqZmxhc2ggPSBub3ItPnByaXY7 Cj4gICAgIC3CoCDCoCDCoCDCoHN0cnVjdCBzcGlfbWVtX29wIG9wID0KPiAgICAgLcKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgCj4gICAgIMKgU1BJX01FTV9PUChTUElfTUVNX09QX0NN RChub3ItPnByb2dyYW1fb3Bjb2RlLCAxKSwKPiAgICAgLcKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIFNQSV9NRU1fT1BfQUREUihub3ItPmFkZHJfd2lk dGgsCj4gICAgIHRvLCAxKSwKPiAgICAgLcKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIFNQSV9NRU1fT1BfTk9fRFVNTVksCj4gICAgIC3CoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBTUElfTUVNX09QX0RBVEFf T1VUKGxlbiwgYnVmLCAxKSk7Cj4gICAgIC3CoCDCoCDCoCDCoGludCByZXQ7Cj4gICAgIC0KPiAg ICAgLcKgIMKgIMKgIMKgLyogZ2V0IHRyYW5zZmVyIHByb3RvY29scy4gKi8KPiAgICAgLcKgIMKg IMKgIMKgb3AuY21kLmJ1c3dpZHRoID0KPiAgICAgc3BpX25vcl9nZXRfcHJvdG9jb2xfaW5zdF9u Yml0cyhub3ItPndyaXRlX3Byb3RvKTsKPiAgICAgLcKgIMKgIMKgIMKgb3AuYWRkci5idXN3aWR0 aCA9Cj4gICAgIHNwaV9ub3JfZ2V0X3Byb3RvY29sX2FkZHJfbmJpdHMobm9yLT53cml0ZV9wcm90 byk7Cj4gICAgIC3CoCDCoCDCoCDCoG9wLmRhdGEuYnVzd2lkdGggPQo+ICAgICBzcGlfbm9yX2dl dF9wcm90b2NvbF9kYXRhX25iaXRzKG5vci0+d3JpdGVfcHJvdG8pOwo+ICAgICAtCj4gICAgIC3C oCDCoCDCoCDCoGlmIChub3ItPnByb2dyYW1fb3Bjb2RlID09IFNQSU5PUl9PUF9BQUlfV1AgJiYK PiAgICAgbm9yLT5zc3Rfd3JpdGVfc2Vjb25kKQo+ICAgICAtwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqBvcC5hZGRyLm5ieXRlcyA9IDA7Cj4gICAgIC0KPiAgICAgLcKgIMKgIMKgIMKgcmV0ID0gc3Bp X21lbV9hZGp1c3Rfb3Bfc2l6ZShmbGFzaC0+c3BpbWVtLCAmb3ApOwo+ICAgICAtwqAgwqAgwqAg wqBpZiAocmV0KQo+ICAgICAtwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqByZXR1cm4gcmV0Owo+ICAg ICAtwqAgwqAgwqAgwqBvcC5kYXRhLm5ieXRlcyA9IGxlbiA8IG9wLmRhdGEubmJ5dGVzID8gbGVu IDogb3AuZGF0YS5uYnl0ZXM7Cj4gICAgIC0KPiAgICAgLcKgIMKgIMKgIMKgcmV0ID0gc3BpX21l bV9leGVjX29wKGZsYXNoLT5zcGltZW0sICZvcCk7Cj4gICAgIC3CoCDCoCDCoCDCoGlmIChyZXQp Cj4gICAgIC3CoCDCoCDCoCDCoCDCoCDCoCDCoCDCoHJldHVybiByZXQ7Cj4gICAgIC0KPiAgICAg LcKgIMKgIMKgIMKgcmV0dXJuIG9wLmRhdGEubmJ5dGVzOwo+ICAgICAtfQo+ICAgICAtCj4gICAg IC0vKgo+ICAgICAtICogUmVhZCBhbiBhZGRyZXNzIHJhbmdlIGZyb20gdGhlIG5vciBjaGlwLsKg IFRoZSBhZGRyZXNzIHJhbmdlCj4gICAgIC0gKiBtYXkgYmUgYW55IHNpemUgcHJvdmlkZWQgaXQg aXMgd2l0aGluIHRoZSBwaHlzaWNhbCBib3VuZGFyaWVzLgo+ICAgICAtICovCj4gICAgIC1zdGF0 aWMgc3NpemVfdCBtMjVwODBfcmVhZChzdHJ1Y3Qgc3BpX25vciAqbm9yLCBsb2ZmX3QgZnJvbSwg c2l6ZV90Cj4gICAgIGxlbiwKPiAgICAgLcKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIHVfY2hhciAqYnVmKQo+ICAgICAtewo+ICAgICAtwqAgwqAgwqAgwqBzdHJ1Y3QgbTI1 cCAqZmxhc2ggPSBub3ItPnByaXY7Cj4gICAgIC3CoCDCoCDCoCDCoHN0cnVjdCBzcGlfbWVtX29w IG9wID0KPiAgICAgLcKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgU1BJX01FTV9P UChTUElfTUVNX09QX0NNRChub3ItPnJlYWRfb3Bjb2RlLCAxKSwKPiAgICAgLcKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIFNQSV9NRU1fT1BfQUREUihu b3ItPmFkZHJfd2lkdGgsCj4gICAgIGZyb20sIDEpLAo+ICAgICAtwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgU1BJX01FTV9PUF9EVU1NWShub3ItPnJl YWRfZHVtbXksIDEpLAo+ICAgICAtwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgU1BJX01FTV9PUF9EQVRBX0lOKGxlbiwgYnVmLCAxKSk7Cj4gICAgIC3C oCDCoCDCoCDCoHNpemVfdCByZW1haW5pbmcgPSBsZW47Cj4gICAgIC3CoCDCoCDCoCDCoGludCBy ZXQ7Cj4gICAgIC0KPiAgICAgLcKgIMKgIMKgIMKgLyogZ2V0IHRyYW5zZmVyIHByb3RvY29scy4g Ki8KPiAgICAgLcKgIMKgIMKgIMKgb3AuY21kLmJ1c3dpZHRoID0KPiAgICAgc3BpX25vcl9nZXRf cHJvdG9jb2xfaW5zdF9uYml0cyhub3ItPnJlYWRfcHJvdG8pOwo+ICAgICAtwqAgwqAgwqAgwqBv cC5hZGRyLmJ1c3dpZHRoID0KPiAgICAgc3BpX25vcl9nZXRfcHJvdG9jb2xfYWRkcl9uYml0cyhu b3ItPnJlYWRfcHJvdG8pOwo+ICAgICAtwqAgwqAgwqAgwqBvcC5kdW1teS5idXN3aWR0aCA9IG9w LmFkZHIuYnVzd2lkdGg7Cj4gICAgIC3CoCDCoCDCoCDCoG9wLmRhdGEuYnVzd2lkdGggPQo+ICAg ICBzcGlfbm9yX2dldF9wcm90b2NvbF9kYXRhX25iaXRzKG5vci0+cmVhZF9wcm90byk7Cj4gICAg IC0KPiAgICAgLcKgIMKgIMKgIMKgLyogY29udmVydCB0aGUgZHVtbXkgY3ljbGVzIHRvIHRoZSBu dW1iZXIgb2YgYnl0ZXMgKi8KPiAgICAgLcKgIMKgIMKgIMKgb3AuZHVtbXkubmJ5dGVzID0gKG5v ci0+cmVhZF9kdW1teSAqIG9wLmR1bW15LmJ1c3dpZHRoKSAvIDg7Cj4gICAgIC0KPiAgICAgLcKg IMKgIMKgIMKgd2hpbGUgKHJlbWFpbmluZykgewo+ICAgICAtwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqBvcC5kYXRhLm5ieXRlcyA9IHJlbWFpbmluZyA8IFVJTlRfTUFYID8gcmVtYWluaW5nIDoKPiAg ICAgVUlOVF9NQVg7Cj4gICAgIC3CoCDCoCDCoCDCoCDCoCDCoCDCoCDCoHJldCA9IHNwaV9tZW1f YWRqdXN0X29wX3NpemUoZmxhc2gtPnNwaW1lbSwgJm9wKTsKPiAgICAgLcKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgaWYgKHJldCkKPiAgICAgLcKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgcmV0dXJuIHJldDsKPiAgICAgLQo+ICAgICAtwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqByZXQg PSBzcGlfbWVtX2V4ZWNfb3AoZmxhc2gtPnNwaW1lbSwgJm9wKTsKPiAgICAgLcKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgaWYgKHJldCkKPiAgICAgLcKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgcmV0dXJuIHJldDsKPiAgICAgLQo+ICAgICAtwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBv cC5hZGRyLnZhbCArPSBvcC5kYXRhLm5ieXRlczsKPiAgICAgLcKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgcmVtYWluaW5nIC09IG9wLmRhdGEubmJ5dGVzOwo+ICAgICAtwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqBvcC5kYXRhLmJ1Zi5pbiA8aHR0cDovL29wLmRhdGEuYnVmLmluPiArPQo+ICAgICBvcC5k YXRhLm5ieXRlczsKPiAgICAgLcKgIMKgIMKgIMKgfQo+ICAgICAtCj4gICAgIC3CoCDCoCDCoCDC oHJldHVybiBsZW47Cj4gICAgIC19Cj4gICAgIC0KPiAgICAgLS8qCj4gICAgIC0gKiBib2FyZCBz cGVjaWZpYyBzZXR1cCBzaG91bGQgaGF2ZSBlbnN1cmVkIHRoZSBTUEkgY2xvY2sgdXNlZCBoZXJl Cj4gICAgIC0gKiBtYXRjaGVzIHdoYXQgdGhlIFJFQUQgY29tbWFuZCBzdXBwb3J0cywgYXQgbGVh c3QgdW50aWwgdGhpcyBkcml2ZXIKPiAgICAgLSAqIHVuZGVyc3RhbmRzIEZBU1RfUkVBRCAoZm9y IGNsb2NrcyBvdmVyIDI1IE1IeikuCj4gICAgIC0gKi8KPiAgICAgLXN0YXRpYyBpbnQgbTI1cF9w cm9iZShzdHJ1Y3Qgc3BpX21lbSAqc3BpbWVtKQo+ICAgICAtewo+ICAgICAtwqAgwqAgwqAgwqBz dHJ1Y3Qgc3BpX2RldmljZSAqc3BpID0gc3BpbWVtLT5zcGk7Cj4gICAgIC3CoCDCoCDCoCDCoHN0 cnVjdCBmbGFzaF9wbGF0Zm9ybV9kYXRhwqAgwqAgwqAgKmRhdGE7Cj4gICAgIC3CoCDCoCDCoCDC oHN0cnVjdCBtMjVwICpmbGFzaDsKPiAgICAgLcKgIMKgIMKgIMKgc3RydWN0IHNwaV9ub3IgKm5v cjsKPiAgICAgLcKgIMKgIMKgIMKgc3RydWN0IHNwaV9ub3JfaHdjYXBzIGh3Y2FwcyA9IHsKPiAg ICAgLcKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgLm1hc2sgPSBTTk9SX0hXQ0FQU19SRUFEIHwKPiAg ICAgLcKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgU05PUl9IV0NBUFNfUkVBRF9G QVNUIHwKPiAgICAgLcKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgU05PUl9IV0NB UFNfUFAsCj4gICAgIC3CoCDCoCDCoCDCoH07Cj4gICAgIC3CoCDCoCDCoCDCoGNoYXIgKmZsYXNo X25hbWU7Cj4gICAgIC3CoCDCoCDCoCDCoGludCByZXQ7Cj4gICAgIC0KPiAgICAgLcKgIMKgIMKg IMKgZGF0YSA9IGRldl9nZXRfcGxhdGRhdGEoJnNwaW1lbS0+c3BpLT5kZXYpOwo+ICAgICAtCj4g ICAgIC3CoCDCoCDCoCDCoGZsYXNoID0gZGV2bV9remFsbG9jKCZzcGltZW0tPnNwaS0+ZGV2LCBz aXplb2YoKmZsYXNoKSwKPiAgICAgR0ZQX0tFUk5FTCk7Cj4gICAgIC3CoCDCoCDCoCDCoGlmICgh Zmxhc2gpCj4gICAgIC3CoCDCoCDCoCDCoCDCoCDCoCDCoCDCoHJldHVybiAtRU5PTUVNOwo+ICAg ICAtCj4gICAgIC3CoCDCoCDCoCDCoG5vciA9ICZmbGFzaC0+c3BpX25vcjsKPiAgICAgLQo+ICAg ICAtwqAgwqAgwqAgwqAvKiBpbnN0YWxsIHRoZSBob29rcyAqLwo+ICAgICAtwqAgwqAgwqAgwqBu b3ItPnJlYWQgPSBtMjVwODBfcmVhZDsKPiAgICAgLcKgIMKgIMKgIMKgbm9yLT53cml0ZSA9IG0y NXA4MF93cml0ZTsKPiAgICAgLcKgIMKgIMKgIMKgbm9yLT53cml0ZV9yZWcgPSBtMjVwODBfd3Jp dGVfcmVnOwo+ICAgICAtwqAgwqAgwqAgwqBub3ItPnJlYWRfcmVnID0gbTI1cDgwX3JlYWRfcmVn Owo+ICAgICAtCj4gICAgIC3CoCDCoCDCoCDCoG5vci0+ZGV2ID0gJnNwaW1lbS0+c3BpLT5kZXY7 Cj4gICAgIC3CoCDCoCDCoCDCoHNwaV9ub3Jfc2V0X2ZsYXNoX25vZGUobm9yLCBzcGktPmRldi5v Zl9ub2RlKTsKPiAgICAgLcKgIMKgIMKgIMKgbm9yLT5wcml2ID0gZmxhc2g7Cj4gICAgIC0KPiAg ICAgLcKgIMKgIMKgIMKgc3BpX21lbV9zZXRfZHJ2ZGF0YShzcGltZW0sIGZsYXNoKTsKPiAgICAg LcKgIMKgIMKgIMKgZmxhc2gtPnNwaW1lbSA9IHNwaW1lbTsKPiAgICAgLQo+ICAgICAtwqAgwqAg wqAgwqBpZiAoc3BpLT5tb2RlICYgU1BJX1JYX09DVEFMKSB7Cj4gICAgIC3CoCDCoCDCoCDCoCDC oCDCoCDCoCDCoGh3Y2Fwcy5tYXNrIHw9IFNOT1JfSFdDQVBTX1JFQURfMV8xXzg7Cj4gICAgIC0K PiAgICAgLcKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgaWYgKHNwaS0+bW9kZSAmIFNQSV9UWF9PQ1RB TCkKPiAgICAgLcKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgaHdjYXBzLm1hc2sg fD0gKFNOT1JfSFdDQVBTX1JFQURfMV84XzggfAo+ICAgICAtwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBTTk9SX0hXQ0FQU19QUF8xXzFf OCB8Cj4gICAgIC3CoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoFNOT1JfSFdDQVBTX1BQXzFfOF84KTsKPiAgICAgLcKgIMKgIMKgIMKgfSBl bHNlIGlmIChzcGktPm1vZGUgJiBTUElfUlhfUVVBRCkgewo+ICAgICAtwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqBod2NhcHMubWFzayB8PSBTTk9SX0hXQ0FQU19SRUFEXzFfMV80Owo+ICAgICAtCj4g ICAgIC3CoCDCoCDCoCDCoCDCoCDCoCDCoCDCoGlmIChzcGktPm1vZGUgJiBTUElfVFhfUVVBRCkK PiAgICAgLcKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgaHdjYXBzLm1hc2sgfD0g KFNOT1JfSFdDQVBTX1JFQURfMV80XzQgfAo+ICAgICAtwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBTTk9SX0hXQ0FQU19QUF8xXzFfNCB8 Cj4gICAgIC3CoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoFNOT1JfSFdDQVBTX1BQXzFfNF80KTsKPiAgICAgLcKgIMKgIMKgIMKgfSBlbHNl IGlmIChzcGktPm1vZGUgJiBTUElfUlhfRFVBTCkgewo+ICAgICAtwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqBod2NhcHMubWFzayB8PSBTTk9SX0hXQ0FQU19SRUFEXzFfMV8yOwo+ICAgICAtCj4gICAg IC3CoCDCoCDCoCDCoCDCoCDCoCDCoCDCoGlmIChzcGktPm1vZGUgJiBTUElfVFhfRFVBTCkKPiAg ICAgLcKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgaHdjYXBzLm1hc2sgfD0gU05P Ul9IV0NBUFNfUkVBRF8xXzJfMjsKPiAgICAgLcKgIMKgIMKgIMKgfQo+ICAgICAtCj4gICAgIC3C oCDCoCDCoCDCoGlmIChkYXRhICYmIGRhdGEtPm5hbWUpCj4gICAgIC3CoCDCoCDCoCDCoCDCoCDC oCDCoCDCoG5vci0+bXRkLm5hbWUgPGh0dHA6Ly9tdGQubmFtZT4gPSBkYXRhLT5uYW1lOwo+ICAg ICAtCj4gICAgIC3CoCDCoCDCoCDCoGlmICghbm9yLT5tdGQubmFtZSA8aHR0cDovL210ZC5uYW1l PikKPiAgICAgLcKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgbm9yLT5tdGQubmFtZSA8aHR0cDovL210 ZC5uYW1lPiA9Cj4gICAgIHNwaV9tZW1fZ2V0X25hbWUoc3BpbWVtKTsKPiAgICAgLQo+ICAgICAt wqAgwqAgwqAgwqAvKiBGb3Igc29tZSAoaGlzdG9yaWNhbD8pIHJlYXNvbiBtYW55IHBsYXRmb3Jt cyBwcm92aWRlIHR3bwo+ICAgICBkaWZmZXJlbnQKPiAgICAgLcKgIMKgIMKgIMKgICogbmFtZXMg aW4gZmxhc2hfcGxhdGZvcm1fZGF0YTogIm5hbWUiIGFuZCAidHlwZSIuIFF1aXRlCj4gICAgIG9m dGVuIG5hbWUgaXMKPiAgICAgLcKgIMKgIMKgIMKgICogc2V0IHRvICJtMjVwODAiIGFuZCB0aGVu ICJ0eXBlIiBwcm92aWRlcyBhIHJlYWwgY2hpcCBuYW1lLgo+ICAgICAtwqAgwqAgwqAgwqAgKiBJ ZiB0aGF0J3MgdGhlIGNhc2UsIHJlc3BlY3QgInR5cGUiIGFuZCBpZ25vcmUgYSAibmFtZSIuCj4g ICAgIC3CoCDCoCDCoCDCoCAqLwo+ICAgICAtwqAgwqAgwqAgwqBpZiAoZGF0YSAmJiBkYXRhLT50 eXBlKQo+ICAgICAtwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBmbGFzaF9uYW1lID0gZGF0YS0+dHlw ZTsKPiAgICAgLcKgIMKgIMKgIMKgZWxzZSBpZiAoIXN0cmNtcChzcGktPm1vZGFsaWFzLCAic3Bp LW5vciIpKQo+ICAgICAtwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBmbGFzaF9uYW1lID0gTlVMTDsg LyogYXV0by1kZXRlY3QgKi8KPiAgICAgLcKgIMKgIMKgIMKgZWxzZQo+ICAgICAtwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqBmbGFzaF9uYW1lID0gc3BpLT5tb2RhbGlhczsKPiAgICAgLQo+ICAgICAt wqAgwqAgwqAgwqByZXQgPSBzcGlfbm9yX3NjYW4obm9yLCBmbGFzaF9uYW1lLCAmaHdjYXBzKTsK PiAgICAgLcKgIMKgIMKgIMKgaWYgKHJldCkKPiAgICAgLcKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg cmV0dXJuIHJldDsKPiAgICAgLQo+ICAgICAtwqAgwqAgwqAgwqByZXR1cm4gbXRkX2RldmljZV9y ZWdpc3Rlcigmbm9yLT5tdGQsIGRhdGEgPyBkYXRhLT5wYXJ0cyA6IE5VTEwsCj4gICAgIC3CoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBkYXRhID8gZGF0 YS0+bnJfcGFydHMgOiAwKTsKPiAgICAgLX0KPiAgICAgLQo+ICAgICAtCj4gICAgIC1zdGF0aWMg aW50IG0yNXBfcmVtb3ZlKHN0cnVjdCBzcGlfbWVtICpzcGltZW0pCj4gICAgIC17Cj4gICAgIC3C oCDCoCDCoCDCoHN0cnVjdCBtMjVwwqAgwqAgwqAqZmxhc2ggPSBzcGlfbWVtX2dldF9kcnZkYXRh KHNwaW1lbSk7Cj4gICAgIC0KPiAgICAgLcKgIMKgIMKgIMKgc3BpX25vcl9yZXN0b3JlKCZmbGFz aC0+c3BpX25vcik7Cj4gICAgIC0KPiAgICAgLcKgIMKgIMKgIMKgLyogQ2xlYW4gdXAgTVREIHN0 dWZmLiAqLwo+ICAgICAtwqAgwqAgwqAgwqByZXR1cm4gbXRkX2RldmljZV91bnJlZ2lzdGVyKCZm bGFzaC0+c3BpX25vci5tdGQpOwo+ICAgICAtfQo+ICAgICAtCj4gICAgIC1zdGF0aWMgdm9pZCBt MjVwX3NodXRkb3duKHN0cnVjdCBzcGlfbWVtICpzcGltZW0pCj4gICAgIC17Cj4gICAgIC3CoCDC oCDCoCDCoHN0cnVjdCBtMjVwICpmbGFzaCA9IHNwaV9tZW1fZ2V0X2RydmRhdGEoc3BpbWVtKTsK PiAgICAgLQo+ICAgICAtwqAgwqAgwqAgwqBzcGlfbm9yX3Jlc3RvcmUoJmZsYXNoLT5zcGlfbm9y KTsKPiAgICAgLX0KPiAgICAgLS8qCj4gICAgIC0gKiBEbyBOT1QgYWRkIHRvIHRoaXMgYXJyYXkg d2l0aG91dCByZWFkaW5nIHRoZSBmb2xsb3dpbmc6Cj4gICAgIC0gKgo+ICAgICAtICogSGlzdG9y aWNhbGx5LCBtYW55IGZsYXNoIGRldmljZXMgYXJlIGJvdW5kIHRvIHRoaXMgZHJpdmVyIGJ5Cj4g ICAgIHRoZWlyIG5hbWUuIEJ1dAo+ICAgICAtICogc2luY2UgbW9zdCBvZiB0aGVzZSBmbGFzaCBh cmUgY29tcGF0aWJsZSB0byBzb21lIGV4dGVudCwgYW5kIHRoZWlyCj4gICAgIC0gKiBkaWZmZXJl bmNlcyBjYW4gb2Z0ZW4gYmUgZGlmZmVyZW50aWF0ZWQgYnkgdGhlIEpFREVDIHJlYWQtSUQKPiAg ICAgY29tbWFuZCwgd2UKPiAgICAgLSAqIGVuY291cmFnZSBuZXcgdXNlcnMgdG8gYWRkIHN1cHBv cnQgdG8gdGhlIHNwaS1ub3IgbGlicmFyeSwgYW5kCj4gICAgIHNpbXBseSBiaW5kCj4gICAgIC0g KiBhZ2FpbnN0IGEgZ2VuZXJpYyBzdHJpbmcgaGVyZSAoZS5nLiwgImplZGVjLHNwaS1ub3IiKS4K PiAgICAgLSAqCj4gICAgIC0gKiBNYW55IGZsYXNoIG5hbWVzIGFyZSBrZXB0IGhlcmUgaW4gdGhp cyBsaXN0IChhcyB3ZWxsIGFzIGluCj4gICAgIHNwaS1ub3IuYykgdG8KPiAgICAgLSAqIGtlZXAg dGhlbSBhdmFpbGFibGUgYXMgbW9kdWxlIGFsaWFzZXMgZm9yIGV4aXN0aW5nIHBsYXRmb3Jtcy4K PiAgICAgLSAqLwo+ICAgICAtc3RhdGljIGNvbnN0IHN0cnVjdCBzcGlfZGV2aWNlX2lkIG0yNXBf aWRzW10gPSB7Cj4gICAgIC3CoCDCoCDCoCDCoC8qCj4gICAgIC3CoCDCoCDCoCDCoCAqIEFsbG93 IG5vbi1EVCBwbGF0Zm9ybSBkZXZpY2VzIHRvIGJpbmQgdG8gdGhlICJzcGktbm9yIgo+ICAgICBt b2RhbGlhcywgYW5kCj4gICAgIC3CoCDCoCDCoCDCoCAqIGhhY2sgYXJvdW5kIHRoZSBmYWN0IHRo YXQgdGhlIFNQSSBjb3JlIGRvZXMgbm90IHByb3ZpZGUKPiAgICAgdWV2ZW50Cj4gICAgIC3CoCDC oCDCoCDCoCAqIG1hdGNoaW5nIGZvciAub2ZfbWF0Y2hfdGFibGUKPiAgICAgLcKgIMKgIMKgIMKg ICovCj4gICAgIC3CoCDCoCDCoCDCoHsic3BpLW5vciJ9LAo+ICAgICAtCj4gICAgIC3CoCDCoCDC oCDCoC8qCj4gICAgIC3CoCDCoCDCoCDCoCAqIEVudHJpZXMgbm90IHVzZWQgaW4gRFRzIHRoYXQg c2hvdWxkIGJlIHNhZmUgdG8gZHJvcCBhZnRlcgo+ICAgICByZXBsYWNpbmcKPiAgICAgLcKgIMKg IMKgIMKgICogdGhlbSB3aXRoICJzcGktbm9yIiBpbiBwbGF0Zm9ybSBkYXRhLgo+ICAgICAtwqAg wqAgwqAgwqAgKi8KPiAgICAgLcKgIMKgIMKgIMKgeyJzMjVzbDA2NGEifSzCoCB7IncyNXgxNiJ9 LMKgIMKgIMKgeyJtMjVwMTAifSzCoCDCoCDCoHsibTI1cHg2NCJ9LAo+ICAgICAtCj4gICAgIC3C oCDCoCDCoCDCoC8qCj4gICAgIC3CoCDCoCDCoCDCoCAqIEVudHJpZXMgdGhhdCB3ZXJlIHVzZWQg aW4gRFRzIHdpdGhvdXQgImplZGVjLHNwaS1ub3IiCj4gICAgIGZhbGxiYWNrIGFuZAo+ICAgICAt wqAgwqAgwqAgwqAgKiBzaG91bGQgYmUga2VwdCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4K PiAgICAgLcKgIMKgIMKgIMKgICovCj4gICAgIC3CoCDCoCDCoCDCoHsiYXQyNWRmMzIxYSJ9LCB7 ImF0MjVkZjY0MSJ9LMKgIHsiYXQyNmRmMDgxYSJ9LAo+ICAgICAtwqAgwqAgwqAgwqB7Im14MjVs NDAwNWEifSwgeyJteDI1bDE2MDZlIn0sIHsibXgyNWw2NDA1ZCJ9LCB7Im14MjVsMTI4MDVkIn0s Cj4gICAgIC3CoCDCoCDCoCDCoHsibXgyNWwyNTYzNWUifSx7Im14NjZsNTEyMzVsIn0sCj4gICAg IC3CoCDCoCDCoCDCoHsibjI1cTA2NCJ9LMKgIMKgIHsibjI1cTEyOGExMSJ9LCB7Im4yNXExMjhh MTMifSwgeyJuMjVxNTEyYSJ9LAo+ICAgICAtwqAgwqAgwqAgwqB7InMyNWZsMjU2czEifSwgeyJz MjVmbDUxMnMifSzCoCB7InMyNXNsMTI4MDEifSwgeyJzMjVmbDAwOGsifSwKPiAgICAgLcKgIMKg IMKgIMKgeyJzMjVmbDA2NGsifSwKPiAgICAgLcKgIMKgIMKgIMKgeyJzc3QyNXZmMDQwYiJ9LHsi c3N0MjV2ZjAxNmIifSx7InNzdDI1dmYwMzJiIn0seyJzc3QyNXdmMDQwIn0sCj4gICAgIC3CoCDC oCDCoCDCoHsibTI1cDQwIn0swqAgwqAgwqB7Im0yNXA4MCJ9LMKgIMKgIMKgeyJtMjVwMTYifSzC oCDCoCDCoHsibTI1cDMyIn0sCj4gICAgIC3CoCDCoCDCoCDCoHsibTI1cDY0In0swqAgwqAgwqB7 Im0yNXAxMjgifSwKPiAgICAgLcKgIMKgIMKgIMKgeyJ3MjV4ODAifSzCoCDCoCDCoHsidzI1eDMy In0swqAgwqAgwqB7IncyNXEzMiJ9LMKgIMKgIMKgeyJ3MjVxMzJkdyJ9LAo+ICAgICAtwqAgwqAg wqAgwqB7IncyNXE4MGJsIn0swqAgwqB7IncyNXExMjgifSzCoCDCoCB7IncyNXEyNTYifSwKPiAg ICAgLQo+ICAgICAtwqAgwqAgwqAgwqAvKiBGbGFzaGVzIHRoYXQgY2FuJ3QgYmUgZGV0ZWN0ZWQg dXNpbmcgSkVERUMgKi8KPiAgICAgLcKgIMKgIMKgIMKgeyJtMjVwMDUtbm9uamVkZWMifSzCoCDC oCB7Im0yNXAxMC1ub25qZWRlYyJ9LMKgIMKgCj4gICAgIHsibTI1cDIwLW5vbmplZGVjIn0sCj4g ICAgIC3CoCDCoCDCoCDCoHsibTI1cDQwLW5vbmplZGVjIn0swqAgwqAgeyJtMjVwODAtbm9uamVk ZWMifSzCoCDCoAo+ICAgICB7Im0yNXAxNi1ub25qZWRlYyJ9LAo+ICAgICAtwqAgwqAgwqAgwqB7 Im0yNXAzMi1ub25qZWRlYyJ9LMKgIMKgIHsibTI1cDY0LW5vbmplZGVjIn0swqAgwqAKPiAgICAg eyJtMjVwMTI4LW5vbmplZGVjIn0sCj4gICAgIC0KPiAgICAgLcKgIMKgIMKgIMKgLyogRXZlcnNw aW4gTVJBTXMgKG5vbi1KRURFQykgKi8KPiAgICAgLcKgIMKgIMKgIMKgeyAibXIyNWgxMjgiIH0s IC8qIDEyOCBLaWIsIDQwIE1IeiAqLwo+ICAgICAtwqAgwqAgwqAgwqB7ICJtcjI1aDI1NiIgfSwg LyogMjU2IEtpYiwgNDAgTUh6ICovCj4gICAgIC3CoCDCoCDCoCDCoHsgIm1yMjVoMTAiIH0swqAg LyrCoCDCoDEgTWliLCA0MCBNSHogKi8KPiAgICAgLcKgIMKgIMKgIMKgeyAibXIyNWg0MCIgfSzC oCAvKsKgIMKgNCBNaWIsIDQwIE1IeiAqLwo+ICAgICAtCj4gICAgIC3CoCDCoCDCoCDCoHsgfSwK PiAgICAgLX07Cj4gICAgIC1NT0RVTEVfREVWSUNFX1RBQkxFKHNwaSwgbTI1cF9pZHMpOwo+ICAg ICAtCj4gICAgIC1zdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBtMjVwX29mX3RhYmxl W10gPSB7Cj4gICAgIC3CoCDCoCDCoCDCoC8qCj4gICAgIC3CoCDCoCDCoCDCoCAqIEdlbmVyaWMg Y29tcGF0aWJpbGl0eSBmb3IgU1BJIE5PUiB0aGF0IGNhbiBiZSBpZGVudGlmaWVkCj4gICAgIGJ5 IHRoZQo+ICAgICAtwqAgwqAgwqAgwqAgKiBKRURFQyBSRUFEIElEIG9wY29kZSAoMHg5RikuIFVz ZSB0aGlzLCBpZiBwb3NzaWJsZS4KPiAgICAgLcKgIMKgIMKgIMKgICovCj4gICAgIC3CoCDCoCDC oCDCoHsgLmNvbXBhdGlibGUgPSAiamVkZWMsc3BpLW5vciIgfSwKPiAgICAgLcKgIMKgIMKgIMKg e30KPiAgICAgLX07Cj4gICAgIC1NT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBtMjVwX29mX3RhYmxl KTsKPiAgICAgLQo+ICAgICAtc3RhdGljIHN0cnVjdCBzcGlfbWVtX2RyaXZlciBtMjVwODBfZHJp dmVyID0gewo+ICAgICAtwqAgwqAgwqAgwqAuc3BpZHJ2ID0gewo+ICAgICAtwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAuZHJpdmVyID0gewo+ICAgICAtwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAubmFtZcKgIMKgPSAibTI1cDgwIiwKPiAgICAgLcKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgLm9mX21hdGNoX3RhYmxlID0gbTI1cF9vZl90YWJsZSwKPiAgICAgLcKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgfSwKPiAgICAgLcKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgLmlk X3RhYmxlwqAgwqAgwqAgwqA9IG0yNXBfaWRzLAo+ICAgICAtwqAgwqAgwqAgwqB9LAo+ICAgICAt wqAgwqAgwqAgwqAucHJvYmXCoCA9IG0yNXBfcHJvYmUsCj4gICAgIC3CoCDCoCDCoCDCoC5yZW1v dmUgPSBtMjVwX3JlbW92ZSwKPiAgICAgLcKgIMKgIMKgIMKgLnNodXRkb3duwqAgwqAgwqAgwqA9 IG0yNXBfc2h1dGRvd24sCj4gICAgIC0KPiAgICAgLcKgIMKgIMKgIMKgLyogUkVWSVNJVDogbWFu eSBvZiB0aGVzZSBjaGlwcyBoYXZlIGRlZXAgcG93ZXItZG93biBtb2RlcywKPiAgICAgd2hpY2gK PiAgICAgLcKgIMKgIMKgIMKgICogc2hvdWxkIGNsZWFybHkgYmUgZW50ZXJlZCBvbiBzdXNwZW5k KCkgdG8gbWluaW1pemUgcG93ZXIgdXNlLgo+ICAgICAtwqAgwqAgwqAgwqAgKiBBbmQgYWxzbyB3 aGVuIHRoZXkncmUgb3RoZXJ3aXNlIGlkbGUuLi4KPiAgICAgLcKgIMKgIMKgIMKgICovCj4gICAg IC19Owo+ICAgICAtCj4gICAgIC1tb2R1bGVfc3BpX21lbV9kcml2ZXIobTI1cDgwX2RyaXZlcik7 Cj4gICAgIC0KPiAgICAgLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKPiAgICAgLU1PRFVMRV9BVVRI T1IoIk1pa2UgTGF2ZW5kZXIiKTsKPiAgICAgLU1PRFVMRV9ERVNDUklQVElPTigiTVREIFNQSSBk cml2ZXIgZm9yIFNUIE0yNVB4eCBmbGFzaCBjaGlwcyIpOwo+ICAgICBkaWZmIC0tZ2l0IGEvZHJp dmVycy9tdGQvc3BpLW5vci9LY29uZmlnIGIvZHJpdmVycy9tdGQvc3BpLW5vci9LY29uZmlnCj4g ICAgIGluZGV4IDZkZTgzMjc3Y2U4Yi4uZjIzN2ZjZGY3Zjg2IDEwMDY0NAo+ICAgICAtLS0gYS9k cml2ZXJzL210ZC9zcGktbm9yL0tjb25maWcKPiAgICAgKysrIGIvZHJpdmVycy9tdGQvc3BpLW5v ci9LY29uZmlnCj4gICAgIEBAIC0yLDYgKzIsOCBAQAo+ICAgICDCoG1lbnVjb25maWcgTVREX1NQ SV9OT1IKPiAgICAgwqAgwqAgwqAgwqAgdHJpc3RhdGUgIlNQSS1OT1IgZGV2aWNlIHN1cHBvcnQi Cj4gICAgIMKgIMKgIMKgIMKgIGRlcGVuZHMgb24gTVRECj4gICAgICvCoCDCoCDCoCDCoGRlcGVu ZHMgb24gTVREICYmIFNQSV9NQVNURVIKPiAgICAgK8KgIMKgIMKgIMKgc2VsZWN0IFNQSV9NRU0K PiAgICAgwqAgwqAgwqAgwqAgaGVscAo+ICAgICDCoCDCoCDCoCDCoCDCoCBUaGlzIGlzIHRoZSBm cmFtZXdvcmsgZm9yIHRoZSBTUEkgTk9SIHdoaWNoIGNhbiBiZSB1c2VkIGJ5Cj4gICAgIHRoZSBT UEkKPiAgICAgwqAgwqAgwqAgwqAgwqAgZGV2aWNlIGRyaXZlcnMgYW5kIHRoZSBTUEktTk9SIGRl dmljZSBkcml2ZXIuCj4gICAgIGRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9zcGktbm9yL3NwaS1u b3IuYwo+ICAgICBiL2RyaXZlcnMvbXRkL3NwaS1ub3Ivc3BpLW5vci5jCj4gICAgIGluZGV4IDdm MDgzMWJlOTBhMC4uZGU5MDZhYjkwN2M3IDEwMDY0NAo+ICAgICAtLS0gYS9kcml2ZXJzL210ZC9z cGktbm9yL3NwaS1ub3IuYwo+ICAgICArKysgYi9kcml2ZXJzL210ZC9zcGktbm9yL3NwaS1ub3Iu Ywo+ICAgICBAQCAtMTksNiArMTksNyBAQAo+IAo+ICAgICDCoCNpbmNsdWRlIDxsaW51eC9tdGQv bXRkLmg+Cj4gICAgIMKgI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+Cj4gICAgICsjaW5j bHVkZSA8bGludXgvc2NoZWQvdGFza19zdGFjay5oPgo+ICAgICDCoCNpbmNsdWRlIDxsaW51eC9z cGkvZmxhc2guaD4KPiAgICAgwqAjaW5jbHVkZSA8bGludXgvbXRkL3NwaS1ub3IuaD4KPiAKPiAg ICAgQEAgLTI4OCw2ICsyODksMTU0IEBAIHN0cnVjdCBmbGFzaF9pbmZvIHsKPiAKPiAgICAgwqAj ZGVmaW5lIEpFREVDX01GUihpbmZvKcKgIMKgIMKgIMKgICgoaW5mbyktPmlkWzBdKQo+IAo+ICAg ICArLyoqCj4gICAgICsgKiBzcGlfbm9yX3NwaW1lbV94ZmVyX2RhdGEoKSAtIGhlbHBlciBmdW5j dGlvbiB0byByZWFkL3dyaXRlIGRhdGEgdG8KPiAgICAgKyAqwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgZmxhc2gncyBtZW1vcnkgcmVnaW9uCj4gICAgICsgKiBA bm9yOsKgIMKgIMKgIMKgIHBvaW50ZXIgdG8gJ3N0cnVjdCBzcGlfbm9yJwo+ICAgICArICogQG9w OsKgIMKgIMKgIMKgIMKgcG9pbnRlciB0byAnc3RydWN0IHNwaV9tZW1fb3AnIHRlbXBsYXRlIGZv ciB0cmFuc2Zlcgo+ICAgICArICoKPiAgICAgKyAqIFJldHVybjogbnVtYmVyIG9mIGJ5dGVzIHRy YW5zZmVycmVkIG9uIHN1Y2Nlc3MsIC1lcnJubyBvdGhlcndpc2UKPiAgICAgKyAqLwo+ICAgICAr c3RhdGljIHNzaXplX3Qgc3BpX25vcl9zcGltZW1feGZlcl9kYXRhKHN0cnVjdCBzcGlfbm9yICpu b3IsCj4gICAgICvCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoHN0cnVjdCBzcGlfbWVtX29wICpvcCkKPiAgICAgK3sKPiAgICAgK8KgIMKg IMKgIMKgYm9vbCB1c2Vib3VuY2VidWYgPSBmYWxzZTsKPiAgICAgK8KgIMKgIMKgIMKgdm9pZCAq cmRidWYgPSBOVUxMOwo+ICAgICArwqAgwqAgwqAgwqBjb25zdCB2b2lkICpidWY7Cj4gICAgICvC oCDCoCDCoCDCoGludCByZXQ7Cj4gICAgICsKPiAgICAgK8KgIMKgIMKgIMKgaWYgKG9wLT5kYXRh LmRpciA9PSBTUElfTUVNX0RBVEFfSU4pCj4gICAgICvCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoGJ1 ZiA9IG9wLT5kYXRhLmJ1Zi5pbiA8aHR0cDovL2RhdGEuYnVmLmluPjsKPiAgICAgK8KgIMKgIMKg IMKgZWxzZQo+ICAgICArwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBidWYgPSBvcC0+ZGF0YS5idWYu b3V0Owo+ICAgICArCj4gICAgICvCoCDCoCDCoCDCoGlmIChvYmplY3RfaXNfb25fc3RhY2soYnVm KSB8fCAhdmlydF9hZGRyX3ZhbGlkKGJ1ZikpCj4gICAgICvCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oHVzZWJvdW5jZWJ1ZiA9IHRydWU7Cj4gICAgICsKPiAgICAgK8KgIMKgIMKgIMKgaWYgKHVzZWJv dW5jZWJ1Zikgewo+ICAgICArwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBpZiAob3AtPmRhdGEubmJ5 dGVzID4gbm9yLT5ib3VuY2VidWZfc2l6ZSkKPiAgICAgK8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgb3AtPmRhdGEubmJ5dGVzID0gbm9yLT5ib3VuY2VidWZfc2l6ZTsKPiAgICAg Kwo+ICAgICArwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBpZiAob3AtPmRhdGEuZGlyID09IFNQSV9N RU1fREFUQV9JTikgewo+ICAgICArwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBy ZGJ1ZiA9IG9wLT5kYXRhLmJ1Zi5pbiA8aHR0cDovL2RhdGEuYnVmLmluPjsKPiAgICAgK8KgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgb3AtPmRhdGEuYnVmLmluIDxodHRwOi8vZGF0 YS5idWYuaW4+ID0KPiAgICAgbm9yLT5ib3VuY2VidWY7Cj4gICAgICvCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoH0gZWxzZSB7Cj4gICAgICvCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oG9wLT5kYXRhLmJ1Zi5vdXQgPSBub3ItPmJvdW5jZWJ1ZjsKPiAgICAgK8KgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgbWVtY3B5KG5vci0+Ym91bmNlYnVmLCBidWYsCj4gICAgICvC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBvcC0+ZGF0YS5uYnl0 ZXMpOwo+ICAgICArwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqB9Cj4gICAgICvCoCDCoCDCoCDCoH0K PiAgICAgKwo+ICAgICArwqAgwqAgwqAgwqByZXQgPSBzcGlfbWVtX2FkanVzdF9vcF9zaXplKG5v ci0+c3BpbWVtLCBvcCk7Cj4gICAgICvCoCDCoCDCoCDCoGlmIChyZXQpCj4gICAgICvCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoHJldHVybiByZXQ7Cj4gICAgICsKPiAgICAgK8KgIMKgIMKgIMKgcmV0 ID0gc3BpX21lbV9leGVjX29wKG5vci0+c3BpbWVtLCBvcCk7Cj4gICAgICvCoCDCoCDCoCDCoGlm IChyZXQpCj4gICAgICvCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoHJldHVybiByZXQ7Cj4gICAgICsK PiAgICAgK8KgIMKgIMKgIMKgaWYgKHVzZWJvdW5jZWJ1ZiAmJiBvcC0+ZGF0YS5kaXIgPT0gU1BJ X01FTV9EQVRBX0lOKQo+ICAgICArwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBtZW1jcHkocmRidWYs IG5vci0+Ym91bmNlYnVmLCBvcC0+ZGF0YS5uYnl0ZXMpOwo+ICAgICArCj4gICAgICvCoCDCoCDC oCDCoHJldHVybiBvcC0+ZGF0YS5uYnl0ZXM7Cj4gICAgICt9Cj4gICAgICsKPiAgICAgKy8qKgo+ ICAgICArICogc3BpX25vcl9zcGltZW1fcmVhZF9kYXRhKCkgLSByZWFkIGRhdGEgZnJvbSBmbGFz aCdzIG1lbW9yeQo+ICAgICByZWdpb24gdmlhCj4gICAgICsgKsKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHNwaS1tZW0KPiAgICAgKyAqIEBub3I6wqAgwqAgwqAg wqAgcG9pbnRlciB0byAnc3RydWN0IHNwaV9ub3InCj4gICAgICsgKiBAZnJvbTrCoCDCoCDCoCDC oG9mZnNldCB0byByZWFkIGZyb20KPiAgICAgKyAqIEBsZW46wqAgwqAgwqAgwqAgbnVtYmVyIG9m IGJ5dGVzIHRvIHJlYWQKPiAgICAgKyAqIEBidWY6wqAgwqAgwqAgwqAgcG9pbnRlciB0byBkc3Qg YnVmZmVyCj4gICAgICsgKgo+ICAgICArICogUmV0dXJuOiBudW1iZXIgb2YgYnl0ZXMgcmVhZCBz dWNjZXNzZnVsbHksIC1lcnJubyBvdGhlcndpc2UKPiAgICAgKyAqLwo+ICAgICArc3RhdGljIHNz aXplX3Qgc3BpX25vcl9zcGltZW1fcmVhZF9kYXRhKHN0cnVjdCBzcGlfbm9yICpub3IsIGxvZmZf dAo+ICAgICBmcm9tLAo+ICAgICArwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBzaXplX3QgbGVuLCB1OCAqYnVmKQo+ICAgICArewo+ICAg ICArwqAgwqAgwqAgwqBzdHJ1Y3Qgc3BpX21lbV9vcCBvcCA9Cj4gICAgICvCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoFNQSV9NRU1fT1AoU1BJX01FTV9PUF9DTUQobm9yLT5yZWFkX29wY29kZSwgMSks Cj4gICAgICvCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBTUElfTUVNX09Q X0FERFIobm9yLT5hZGRyX3dpZHRoLCBmcm9tLCAxKSwKPiAgICAgK8KgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIFNQSV9NRU1fT1BfRFVNTVkobm9yLT5yZWFkX2R1bW15LCAx KSwKPiAgICAgK8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIFNQSV9NRU1f T1BfREFUQV9JTihsZW4sIGJ1ZiwgMSkpOwo+ICAgICArCj4gICAgICvCoCDCoCDCoCDCoC8qIGdl dCB0cmFuc2ZlciBwcm90b2NvbHMuICovCj4gICAgICvCoCDCoCDCoCDCoG9wLmNtZC5idXN3aWR0 aCA9Cj4gICAgIHNwaV9ub3JfZ2V0X3Byb3RvY29sX2luc3RfbmJpdHMobm9yLT5yZWFkX3Byb3Rv KTsKPiAgICAgK8KgIMKgIMKgIMKgb3AuYWRkci5idXN3aWR0aCA9Cj4gICAgIHNwaV9ub3JfZ2V0 X3Byb3RvY29sX2FkZHJfbmJpdHMobm9yLT5yZWFkX3Byb3RvKTsKPiAgICAgK8KgIMKgIMKgIMKg b3AuZHVtbXkuYnVzd2lkdGggPSBvcC5hZGRyLmJ1c3dpZHRoOwo+ICAgICArwqAgwqAgwqAgwqBv cC5kYXRhLmJ1c3dpZHRoID0KPiAgICAgc3BpX25vcl9nZXRfcHJvdG9jb2xfZGF0YV9uYml0cyhu b3ItPnJlYWRfcHJvdG8pOwo+ICAgICArCj4gICAgICvCoCDCoCDCoCDCoC8qIGNvbnZlcnQgdGhl IGR1bW15IGN5Y2xlcyB0byB0aGUgbnVtYmVyIG9mIGJ5dGVzICovCj4gICAgICvCoCDCoCDCoCDC oG9wLmR1bW15Lm5ieXRlcyA9IChub3ItPnJlYWRfZHVtbXkgKiBvcC5kdW1teS5idXN3aWR0aCkg LyA4Owo+ICAgICArCj4gICAgICvCoCDCoCDCoCDCoHJldHVybiBzcGlfbm9yX3NwaW1lbV94ZmVy X2RhdGEobm9yLCAmb3ApOwo+ICAgICArfQo+ICAgICArCj4gICAgICsvKioKPiAgICAgKyAqIHNw aV9ub3JfcmVhZF9kYXRhKCkgLSByZWFkIGRhdGEgZnJvbSBmbGFzaCBtZW1vcnkKPiAgICAgKyAq IEBub3I6wqAgwqAgwqAgwqAgcG9pbnRlciB0byAnc3RydWN0IHNwaV9ub3InCj4gICAgICsgKiBA ZnJvbTrCoCDCoCDCoCDCoG9mZnNldCB0byByZWFkIGZyb20KPiAgICAgKyAqIEBsZW46wqAgwqAg wqAgwqAgbnVtYmVyIG9mIGJ5dGVzIHRvIHJlYWQKPiAgICAgKyAqIEBidWY6wqAgwqAgwqAgwqAg cG9pbnRlciB0byBkc3QgYnVmZmVyCj4gICAgICsgKgo+ICAgICArICogUmV0dXJuOiBudW1iZXIg b2YgYnl0ZXMgcmVhZCBzdWNjZXNzZnVsbHksIC1lcnJubyBvdGhlcndpc2UKPiAgICAgKyAqLwo+ ICAgICArc3RhdGljIHNzaXplX3Qgc3BpX25vcl9yZWFkX2RhdGEoc3RydWN0IHNwaV9ub3IgKm5v ciwgbG9mZl90IGZyb20sCj4gICAgIHNpemVfdCBsZW4sCj4gICAgICvCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCB1OCAqYnVmKQo+ICAgICArewo+ICAgICAr wqAgwqAgwqAgwqBpZiAobm9yLT5zcGltZW0pCj4gICAgICvCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oHJldHVybiBzcGlfbm9yX3NwaW1lbV9yZWFkX2RhdGEobm9yLCBmcm9tLCBsZW4sIGJ1Zik7Cj4g ICAgICsKPiAgICAgK8KgIMKgIMKgIMKgcmV0dXJuIG5vci0+cmVhZChub3IsIGZyb20sIGxlbiwg YnVmKTsKPiAgICAgK30KPiAgICAgKwo+ICAgICArLyoqCj4gICAgICsgKiBzcGlfbm9yX3NwaW1l bV93cml0ZV9kYXRhKCkgLSB3cml0ZSBkYXRhIHRvIGZsYXNoIG1lbW9yeSB2aWEKPiAgICAgKyAq wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBzcGktbWVtCj4g ICAgICsgKiBAbm9yOsKgIMKgIMKgIMKgIHBvaW50ZXIgdG8gJ3N0cnVjdCBzcGlfbm9yJwo+ICAg ICArICogQHRvOsKgIMKgIMKgIMKgIMKgb2Zmc2V0IHRvIHdyaXRlIHRvCj4gICAgICsgKiBAbGVu OsKgIMKgIMKgIMKgIG51bWJlciBvZiBieXRlcyB0byB3cml0ZQo+ICAgICArICogQGJ1ZjrCoCDC oCDCoCDCoCBwb2ludGVyIHRvIHNyYyBidWZmZXIKPiAgICAgKyAqCj4gICAgICsgKiBSZXR1cm46 IG51bWJlciBvZiBieXRlcyB3cml0dGVuIHN1Y2Nlc3NmdWxseSwgLWVycm5vIG90aGVyd2lzZQo+ ICAgICArICovCj4gICAgICtzdGF0aWMgc3NpemVfdCBzcGlfbm9yX3NwaW1lbV93cml0ZV9kYXRh KHN0cnVjdCBzcGlfbm9yICpub3IsCj4gICAgIGxvZmZfdCB0bywKPiAgICAgK8KgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHNpemVfdCBs ZW4sIGNvbnN0IHU4ICpidWYpCj4gICAgICt7Cj4gICAgICvCoCDCoCDCoCDCoHN0cnVjdCBzcGlf bWVtX29wIG9wID0KPiAgICAgK8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgU1BJX01FTV9PUChTUElf TUVNX09QX0NNRChub3ItPnByb2dyYW1fb3Bjb2RlLCAxKSwKPiAgICAgK8KgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIFNQSV9NRU1fT1BfQUREUihub3ItPmFkZHJfd2lkdGgs IHRvLCAxKSwKPiAgICAgK8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIFNQ SV9NRU1fT1BfTk9fRFVNTVksCj4gICAgICvCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCBTUElfTUVNX09QX0RBVEFfT1VUKGxlbiwgYnVmLCAxKSk7Cj4gICAgICsKPiAgICAg K8KgIMKgIMKgIMKgb3AuY21kLmJ1c3dpZHRoID0KPiAgICAgc3BpX25vcl9nZXRfcHJvdG9jb2xf aW5zdF9uYml0cyhub3ItPndyaXRlX3Byb3RvKTsKPiAgICAgK8KgIMKgIMKgIMKgb3AuYWRkci5i dXN3aWR0aCA9Cj4gICAgIHNwaV9ub3JfZ2V0X3Byb3RvY29sX2FkZHJfbmJpdHMobm9yLT53cml0 ZV9wcm90byk7Cj4gICAgICvCoCDCoCDCoCDCoG9wLmRhdGEuYnVzd2lkdGggPQo+ICAgICBzcGlf bm9yX2dldF9wcm90b2NvbF9kYXRhX25iaXRzKG5vci0+d3JpdGVfcHJvdG8pOwo+ICAgICArCj4g ICAgICvCoCDCoCDCoCDCoGlmIChub3ItPnByb2dyYW1fb3Bjb2RlID09IFNQSU5PUl9PUF9BQUlf V1AgJiYKPiAgICAgbm9yLT5zc3Rfd3JpdGVfc2Vjb25kKQo+ICAgICArwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqBvcC5hZGRyLm5ieXRlcyA9IDA7Cj4gICAgICsKPiAgICAgK8KgIMKgIMKgIMKgcmV0 dXJuIHNwaV9ub3Jfc3BpbWVtX3hmZXJfZGF0YShub3IsICZvcCk7Cj4gICAgICt9Cj4gICAgICsK PiAgICAgKy8qKgo+ICAgICArICogc3BpX25vcl93cml0ZV9kYXRhKCkgLSB3cml0ZSBkYXRhIHRv IGZsYXNoIG1lbW9yeQo+ICAgICArICogQG5vcjrCoCDCoCDCoCDCoCBwb2ludGVyIHRvICdzdHJ1 Y3Qgc3BpX25vcicKPiAgICAgKyAqIEB0bzrCoCDCoCDCoCDCoCDCoG9mZnNldCB0byB3cml0ZSB0 bwo+ICAgICArICogQGxlbjrCoCDCoCDCoCDCoCBudW1iZXIgb2YgYnl0ZXMgdG8gd3JpdGUKPiAg ICAgKyAqIEBidWY6wqAgwqAgwqAgwqAgcG9pbnRlciB0byBzcmMgYnVmZmVyCj4gICAgICsgKgo+ ICAgICArICogUmV0dXJuOiBudW1iZXIgb2YgYnl0ZXMgd3JpdHRlbiBzdWNjZXNzZnVsbHksIC1l cnJubyBvdGhlcndpc2UKPiAgICAgKyAqLwo+ICAgICArc3RhdGljIHNzaXplX3Qgc3BpX25vcl93 cml0ZV9kYXRhKHN0cnVjdCBzcGlfbm9yICpub3IsIGxvZmZfdCB0bywKPiAgICAgc2l6ZV90IGxl biwKPiAgICAgK8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgY29uc3QgdTggKmJ1ZikKPiAgICAgK3sKPiAgICAgK8KgIMKgIMKgIMKgaWYgKG5vci0+c3Bp bWVtKQo+ICAgICArwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqByZXR1cm4gc3BpX25vcl9zcGltZW1f d3JpdGVfZGF0YShub3IsIHRvLCBsZW4sIGJ1Zik7Cj4gICAgICsKPiAgICAgK8KgIMKgIMKgIMKg cmV0dXJuIG5vci0+d3JpdGUobm9yLCB0bywgbGVuLCBidWYpOwo+ICAgICArfQo+ICAgICArCj4g ICAgIMKgLyoKPiAgICAgwqAgKiBSZWFkIHRoZSBzdGF0dXMgcmVnaXN0ZXIsIHJldHVybmluZyBp dHMgdmFsdWUgaW4gdGhlIGxvY2F0aW9uCj4gICAgIMKgICogUmV0dXJuIHRoZSBzdGF0dXMgcmVn aXN0ZXIgdmFsdWUuCj4gICAgIEBAIC0yOTcsNyArNDQ2LDE4IEBAIHN0YXRpYyBpbnQgcmVhZF9z cihzdHJ1Y3Qgc3BpX25vciAqbm9yKQo+ICAgICDCoHsKPiAgICAgwqAgwqAgwqAgwqAgaW50IHJl dDsKPiAKPiAgICAgLcKgIMKgIMKgIMKgcmV0ID0gbm9yLT5yZWFkX3JlZyhub3IsIFNQSU5PUl9P UF9SRFNSLCBub3ItPmJvdW5jZWJ1ZiwgMSk7Cj4gICAgICvCoCDCoCDCoCDCoGlmIChub3ItPnNw aW1lbSkgewo+ICAgICArwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBzdHJ1Y3Qgc3BpX21lbV9vcCBv cCA9Cj4gICAgICvCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoFNQSV9NRU1fT1Ao U1BJX01FTV9PUF9DTUQoU1BJTk9SX09QX1JEU1IsIDEpLAo+ICAgICArwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgU1BJX01FTV9PUF9OT19BRERSLAo+ ICAgICArwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg U1BJX01FTV9PUF9OT19EVU1NWSwKPiAgICAgK8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIFNQSV9NRU1fT1BfREFUQV9JTigxLAo+ICAgICBub3ItPmJv dW5jZWJ1ZiwgMSkpOwo+ICAgICArCj4gICAgICvCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoHJldCA9 IHNwaV9tZW1fZXhlY19vcChub3ItPnNwaW1lbSwgJm9wKTsKPiAgICAgK8KgIMKgIMKgIMKgfSBl bHNlIHsKPiAgICAgK8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgcmV0ID0gbm9yLT5yZWFkX3JlZyhu b3IsIFNQSU5PUl9PUF9SRFNSLAo+ICAgICBub3ItPmJvdW5jZWJ1ZiwgMSk7Cj4gICAgICvCoCDC oCDCoCDCoH0KPiAgICAgKwo+ICAgICDCoCDCoCDCoCDCoCBpZiAocmV0IDwgMCkgewo+ICAgICDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBwcl9lcnIoImVycm9yICVkIHJlYWRpbmcgU1JcbiIsIChp bnQpIHJldCk7Cj4gICAgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHJldHVybiByZXQ7Cj4gICAg IEBAIC0zMTUsNyArNDc1LDE4IEBAIHN0YXRpYyBpbnQgcmVhZF9mc3Ioc3RydWN0IHNwaV9ub3Ig Km5vcikKPiAgICAgwqB7Cj4gICAgIMKgIMKgIMKgIMKgIGludCByZXQ7Cj4gCj4gICAgIC3CoCDC oCDCoCDCoHJldCA9IG5vci0+cmVhZF9yZWcobm9yLCBTUElOT1JfT1BfUkRGU1IsIG5vci0+Ym91 bmNlYnVmLCAxKTsKPiAgICAgK8KgIMKgIMKgIMKgaWYgKG5vci0+c3BpbWVtKSB7Cj4gICAgICvC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoHN0cnVjdCBzcGlfbWVtX29wIG9wID0KPiAgICAgK8KgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgU1BJX01FTV9PUChTUElfTUVNX09QX0NNRChT UElOT1JfT1BfUkRGU1IsIDEpLAo+ICAgICArwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgU1BJX01FTV9PUF9OT19BRERSLAo+ICAgICArwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgU1BJX01FTV9PUF9OT19E VU1NWSwKPiAgICAgK8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIFNQSV9NRU1fT1BfREFUQV9JTigxLAo+ICAgICBub3ItPmJvdW5jZWJ1ZiwgMSkpOwo+ ICAgICArCj4gICAgICvCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoHJldCA9IHNwaV9tZW1fZXhlY19v cChub3ItPnNwaW1lbSwgJm9wKTsKPiAgICAgK8KgIMKgIMKgIMKgfSBlbHNlIHsKPiAgICAgK8Kg IMKgIMKgIMKgIMKgIMKgIMKgIMKgcmV0ID0gbm9yLT5yZWFkX3JlZyhub3IsIFNQSU5PUl9PUF9S REZTUiwKPiAgICAgbm9yLT5ib3VuY2VidWYsIDEpOwo+ICAgICArwqAgwqAgwqAgwqB9Cj4gICAg ICsKPiAgICAgwqAgwqAgwqAgwqAgaWYgKHJldCA8IDApIHsKPiAgICAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgcHJfZXJyKCJlcnJvciAlZCByZWFkaW5nIEZTUlxuIiwgcmV0KTsKPiAgICAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgcmV0dXJuIHJldDsKPiAgICAgQEAgLTMzMyw3ICs1MDQsMTgg QEAgc3RhdGljIGludCByZWFkX2NyKHN0cnVjdCBzcGlfbm9yICpub3IpCj4gICAgIMKgewo+ICAg ICDCoCDCoCDCoCDCoCBpbnQgcmV0Owo+IAo+ICAgICAtwqAgwqAgwqAgwqByZXQgPSBub3ItPnJl YWRfcmVnKG5vciwgU1BJTk9SX09QX1JEQ1IsIG5vci0+Ym91bmNlYnVmLCAxKTsKPiAgICAgK8Kg IMKgIMKgIMKgaWYgKG5vci0+c3BpbWVtKSB7Cj4gICAgICvCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oHN0cnVjdCBzcGlfbWVtX29wIG9wID0KPiAgICAgK8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgU1BJX01FTV9PUChTUElfTUVNX09QX0NNRChTUElOT1JfT1BfUkRDUiwgMSksCj4g ICAgICvCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBT UElfTUVNX09QX05PX0FERFIsCj4gICAgICvCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCBTUElfTUVNX09QX05PX0RVTU1ZLAo+ICAgICArwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgU1BJX01FTV9PUF9EQVRB X0lOKDEsCj4gICAgIG5vci0+Ym91bmNlYnVmLCAxKSk7Cj4gICAgICsKPiAgICAgK8KgIMKgIMKg IMKgIMKgIMKgIMKgIMKgcmV0ID0gc3BpX21lbV9leGVjX29wKG5vci0+c3BpbWVtLCAmb3ApOwo+ ICAgICArwqAgwqAgwqAgwqB9IGVsc2Ugewo+ICAgICArwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBy ZXQgPSBub3ItPnJlYWRfcmVnKG5vciwgU1BJTk9SX09QX1JEQ1IsCj4gICAgIG5vci0+Ym91bmNl YnVmLCAxKTsKPiAgICAgK8KgIMKgIMKgIMKgfQo+ICAgICArCj4gICAgIMKgIMKgIMKgIMKgIGlm IChyZXQgPCAwKSB7Cj4gICAgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGRldl9lcnIobm9yLT5k ZXYsICJlcnJvciAlZCByZWFkaW5nIENSXG4iLCByZXQpOwo+ICAgICDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCByZXR1cm4gcmV0Owo+ICAgICBAQCAtMzQ5LDYgKzUzMSwxNiBAQCBzdGF0aWMgaW50 IHJlYWRfY3Ioc3RydWN0IHNwaV9ub3IgKm5vcikKPiAgICAgwqBzdGF0aWMgaW50IHdyaXRlX3Ny KHN0cnVjdCBzcGlfbm9yICpub3IsIHU4IHZhbCkKPiAgICAgwqB7Cj4gICAgIMKgIMKgIMKgIMKg IG5vci0+Ym91bmNlYnVmWzBdID0gdmFsOwo+ICAgICArwqAgwqAgwqAgwqBpZiAobm9yLT5zcGlt ZW0pIHsKPiAgICAgK8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgc3RydWN0IHNwaV9tZW1fb3Agb3Ag PQo+ICAgICArwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBTUElfTUVNX09QKFNQ SV9NRU1fT1BfQ01EKFNQSU5PUl9PUF9XUlNSLCAxKSwKPiAgICAgK8KgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIFNQSV9NRU1fT1BfTk9fQUREUiwKPiAg ICAgK8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIFNQ SV9NRU1fT1BfTk9fRFVNTVksCj4gICAgICvCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCBTUElfTUVNX09QX0RBVEFfSU4oMSwKPiAgICAgbm9yLT5ib3Vu Y2VidWYsIDEpKTsKPiAgICAgKwo+ICAgICArwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqByZXR1cm4g c3BpX21lbV9leGVjX29wKG5vci0+c3BpbWVtLCAmb3ApOwo+ICAgICArwqAgwqAgwqAgwqB9Cj4g ICAgICsKPiAgICAgwqAgwqAgwqAgwqAgcmV0dXJuIG5vci0+d3JpdGVfcmVnKG5vciwgU1BJTk9S X09QX1dSU1IsIG5vci0+Ym91bmNlYnVmLCAxKTsKPiAgICAgwqB9Cj4gCj4gICAgIEBAIC0zNTgs NiArNTUwLDE2IEBAIHN0YXRpYyBpbnQgd3JpdGVfc3Ioc3RydWN0IHNwaV9ub3IgKm5vciwgdTgg dmFsKQo+ICAgICDCoCAqLwo+ICAgICDCoHN0YXRpYyBpbnQgd3JpdGVfZW5hYmxlKHN0cnVjdCBz cGlfbm9yICpub3IpCj4gICAgIMKgewo+ICAgICArwqAgwqAgwqAgwqBpZiAobm9yLT5zcGltZW0p IHsKPiAgICAgK8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgc3RydWN0IHNwaV9tZW1fb3Agb3AgPQo+ ICAgICArwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBTUElfTUVNX09QKFNQSV9N RU1fT1BfQ01EKFNQSU5PUl9PUF9XUkVOLCAxKSwKPiAgICAgK8KgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIFNQSV9NRU1fT1BfTk9fQUREUiwKPiAgICAg K8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIFNQSV9N RU1fT1BfTk9fRFVNTVksCj4gICAgICvCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCBTUElfTUVNX09QX05PX0RBVEEpOwo+ICAgICArCj4gICAgICvCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoHJldHVybiBzcGlfbWVtX2V4ZWNfb3Aobm9yLT5zcGltZW0sICZv cCk7Cj4gICAgICvCoCDCoCDCoCDCoH0KPiAgICAgKwo+ICAgICDCoCDCoCDCoCDCoCByZXR1cm4g bm9yLT53cml0ZV9yZWcobm9yLCBTUElOT1JfT1BfV1JFTiwgTlVMTCwgMCk7Cj4gICAgIMKgfQo+ IAo+ICAgICBAQCAtMzY2LDYgKzU2OCwxNiBAQCBzdGF0aWMgaW50IHdyaXRlX2VuYWJsZShzdHJ1 Y3Qgc3BpX25vciAqbm9yKQo+ICAgICDCoCAqLwo+ICAgICDCoHN0YXRpYyBpbnQgd3JpdGVfZGlz YWJsZShzdHJ1Y3Qgc3BpX25vciAqbm9yKQo+ICAgICDCoHsKPiAgICAgK8KgIMKgIMKgIMKgaWYg KG5vci0+c3BpbWVtKSB7Cj4gICAgICvCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoHN0cnVjdCBzcGlf bWVtX29wIG9wID0KPiAgICAgK8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgU1BJ X01FTV9PUChTUElfTUVNX09QX0NNRChTUElOT1JfT1BfV1JESSwgMSksCj4gICAgICvCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBTUElfTUVNX09QX05P X0FERFIsCj4gICAgICvCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCBTUElfTUVNX09QX05PX0RVTU1ZLAo+ICAgICArwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgU1BJX01FTV9PUF9OT19EQVRBKTsKPiAgICAg Kwo+ICAgICArwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqByZXR1cm4gc3BpX21lbV9leGVjX29wKG5v ci0+c3BpbWVtLCAmb3ApOwo+ICAgICArwqAgwqAgwqAgwqB9Cj4gICAgICsKPiAgICAgwqAgwqAg wqAgwqAgcmV0dXJuIG5vci0+d3JpdGVfcmVnKG5vciwgU1BJTk9SX09QX1dSREksIE5VTEwsIDAp Owo+ICAgICDCoH0KPiAKPiAgICAgQEAgLTQ2NSwxMiArNjc3LDY0IEBAIHN0YXRpYyB2b2lkIHNw aV9ub3Jfc2V0XzRieXRlX29wY29kZXMoc3RydWN0Cj4gICAgIHNwaV9ub3IgKm5vcikKPiAgICAg wqAgwqAgwqAgwqAgfQo+ICAgICDCoH0KPiAKPiAgICAgK3N0YXRpYyBpbnQgbWFjcm9uaXhfc2V0 XzRieXRlKHN0cnVjdCBzcGlfbm9yICpub3IsIGJvb2wgZW5hYmxlKQo+ICAgICArewo+ICAgICAr wqAgwqAgwqAgwqBpZiAobm9yLT5zcGltZW0pIHsKPiAgICAgK8KgIMKgIMKgIMKgIMKgIMKgIMKg IMKgc3RydWN0IHNwaV9tZW1fb3Agb3AgPQo+ICAgICArwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqBTUElfTUVNX09QKFNQSV9NRU1fT1BfQ01EKGVuYWJsZSA/Cj4gICAgICvCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoFNQSU5PUl9PUF9FTjRCIDoKPiAgICAgK8KgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgU1BJ Tk9SX09QX0VYNEIsCj4gICAgICvCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoDEpLAo+ICAgICArwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBTUElfTUVNX09QX05PX0FE RFIsCj4gICAgICvCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoFNQSV9NRU1fT1BfTk9fRFVNTVksCj4gICAgICvCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoFNQSV9NRU1fT1BfTk9fREFUQSk7Cj4gICAgICsKPiAg ICAgK8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgcmV0dXJuIHNwaV9tZW1fZXhlY19vcChub3ItPnNw aW1lbSwgJm9wKTsKPiAgICAgK8KgIMKgIMKgIMKgfQo+ICAgICArCj4gICAgICvCoCDCoCDCoCDC oHJldHVybiBub3ItPndyaXRlX3JlZyhub3IsIGVuYWJsZSA/IFNQSU5PUl9PUF9FTjRCIDoKPiAg ICAgU1BJTk9SX09QX0VYNEIsCj4gICAgICvCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoE5VTEwsIDApOwo+ICAgICArfQo+ICAgICArCj4gICAgICtzdGF0aWMgaW50 IHNwYW5zaW9uX3NldF80Ynl0ZShzdHJ1Y3Qgc3BpX25vciAqbm9yLCBib29sIGVuYWJsZSkKPiAg ICAgK3sKPiAgICAgK8KgIMKgIMKgIMKgbm9yLT5ib3VuY2VidWZbMF0gPSBlbmFibGUgPDwgNzsK PiAgICAgKwo+ICAgICArwqAgwqAgwqAgwqBpZiAobm9yLT5zcGltZW0pIHsKPiAgICAgK8KgIMKg IMKgIMKgIMKgIMKgIMKgIMKgc3RydWN0IHNwaV9tZW1fb3Agb3AgPQo+ICAgICArwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBTUElfTUVNX09QKFNQSV9NRU1fT1BfQ01EKFNQSU5P Ul9PUF9CUldSLCAxKSwKPiAgICAgK8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIFNQSV9NRU1fT1BfTk9fQUREUiwKPiAgICAgK8KgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIFNQSV9NRU1fT1BfTk9fRFVNTVks Cj4gICAgICvCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCBTUElfTUVNX09QX0RBVEFfT1VUKDEsCj4gICAgIG5vci0+Ym91bmNlYnVmLCAxKSk7Cj4gICAg ICsKPiAgICAgK8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgcmV0dXJuIHNwaV9tZW1fZXhlY19vcChu b3ItPnNwaW1lbSwgJm9wKTsKPiAgICAgK8KgIMKgIMKgIMKgfQo+ICAgICArCj4gICAgICvCoCDC oCDCoCDCoHJldHVybiBub3ItPndyaXRlX3JlZyhub3IsIFNQSU5PUl9PUF9CUldSLCBub3ItPmJv dW5jZWJ1ZiwgMSk7Cj4gICAgICt9Cj4gICAgICsKPiAgICAgK3N0YXRpYyBpbnQgc3BpX25vcl93 cml0ZV9lYXIoc3RydWN0IHNwaV9ub3IgKm5vciwgdTggZWFyKQo+ICAgICArewo+ICAgICArwqAg wqAgwqAgwqBub3ItPmJvdW5jZWJ1ZlswXSA9IGVhcjsKPiAgICAgKwo+ICAgICArwqAgwqAgwqAg wqBpZiAobm9yLT5zcGltZW0pIHsKPiAgICAgK8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgc3RydWN0 IHNwaV9tZW1fb3Agb3AgPQo+ICAgICArwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqBTUElfTUVNX09QKFNQSV9NRU1fT1BfQ01EKFNQSU5PUl9PUF9XUkVBUiwgMSksCj4gICAgICvC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBTUElfTUVN X09QX05PX0FERFIsCj4gICAgICvCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCBTUElfTUVNX09QX05PX0RVTU1ZLAo+ICAgICArwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgU1BJX01FTV9PUF9EQVRBX09VVCgx LAo+ICAgICBub3ItPmJvdW5jZWJ1ZiwgMSkpOwo+ICAgICArCj4gICAgICvCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoHJldHVybiBzcGlfbWVtX2V4ZWNfb3Aobm9yLT5zcGltZW0sICZvcCk7Cj4gICAg ICvCoCDCoCDCoCDCoH0KPiAgICAgKwo+ICAgICArwqAgwqAgwqAgwqByZXR1cm4gbm9yLT53cml0 ZV9yZWcobm9yLCBTUElOT1JfT1BfV1JFQVIsIG5vci0+Ym91bmNlYnVmLCAxKTsKPiAgICAgK30K PiAgICAgKwo+ICAgICDCoC8qIEVuYWJsZS9kaXNhYmxlIDQtYnl0ZSBhZGRyZXNzaW5nIG1vZGUu ICovCj4gICAgIMKgc3RhdGljIGludCBzZXRfNGJ5dGUoc3RydWN0IHNwaV9ub3IgKm5vciwgYm9v bCBlbmFibGUpCj4gICAgIMKgewo+ICAgICDCoCDCoCDCoCDCoCBpbnQgc3RhdHVzOwo+ICAgICDC oCDCoCDCoCDCoCBib29sIG5lZWRfd3JlbiA9IGZhbHNlOwo+ICAgICAtwqAgwqAgwqAgwqB1OCBj bWQ7Cj4gCj4gICAgIMKgIMKgIMKgIMKgIHN3aXRjaCAoSkVERUNfTUZSKG5vci0+aW5mbykpIHsK PiAgICAgwqAgwqAgwqAgwqAgY2FzZSBTTk9SX01GUl9TVDoKPiAgICAgQEAgLTQ4Myw4ICs3NDcs NyBAQCBzdGF0aWMgaW50IHNldF80Ynl0ZShzdHJ1Y3Qgc3BpX25vciAqbm9yLCBib29sCj4gICAg IGVuYWJsZSkKPiAgICAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgaWYgKG5lZWRfd3JlbikKPiAg ICAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgd3JpdGVfZW5hYmxlKG5vcik7 Cj4gCj4gICAgIC3CoCDCoCDCoCDCoCDCoCDCoCDCoCDCoGNtZCA9IGVuYWJsZSA/IFNQSU5PUl9P UF9FTjRCIDogU1BJTk9SX09QX0VYNEI7Cj4gICAgIC3CoCDCoCDCoCDCoCDCoCDCoCDCoCDCoHN0 YXR1cyA9IG5vci0+d3JpdGVfcmVnKG5vciwgY21kLCBOVUxMLCAwKTsKPiAgICAgK8KgIMKgIMKg IMKgIMKgIMKgIMKgIMKgc3RhdHVzID0gbWFjcm9uaXhfc2V0XzRieXRlKG5vciwgZW5hYmxlKTsK PiAgICAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgaWYgKG5lZWRfd3JlbikKPiAgICAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgd3JpdGVfZGlzYWJsZShub3IpOwo+IAo+ICAg ICBAQCAtNDk3LDI1ICs3NjAsMzcgQEAgc3RhdGljIGludCBzZXRfNGJ5dGUoc3RydWN0IHNwaV9u b3IgKm5vciwgYm9vbAo+ICAgICBlbmFibGUpCj4gICAgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgKiBXZSBtdXN0IGNsZWFyIHRoZSByZWdpc3RlciB0byBlbmFibGUKPiAg ICAgbm9ybWFsIGJlaGF2aW9yLgo+ICAgICDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCovCj4gICAgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHdyaXRl X2VuYWJsZShub3IpOwo+ICAgICAtwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBu b3ItPmJvdW5jZWJ1ZlswXSA9IDA7Cj4gICAgIC3CoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoG5vci0+d3JpdGVfcmVnKG5vciwgU1BJTk9SX09QX1dSRUFSLAo+ICAgICAtwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgbm9yLT5i b3VuY2VidWYsIDEpOwo+ICAgICArwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBz cGlfbm9yX3dyaXRlX2Vhcihub3IsIDApOwo+ICAgICDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCB3cml0ZV9kaXNhYmxlKG5vcik7Cj4gICAgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIH0KPiAKPiAgICAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgcmV0dXJuIHN0YXR1czsKPiAg ICAgwqAgwqAgwqAgwqAgZGVmYXVsdDoKPiAgICAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgLyog U3BhbnNpb24gc3R5bGUgKi8KPiAgICAgLcKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgbm9yLT5ib3Vu Y2VidWZbMF0gPSBlbmFibGUgPDwgNzsKPiAgICAgLcKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgcmV0 dXJuIG5vci0+d3JpdGVfcmVnKG5vciwgU1BJTk9SX09QX0JSV1IsCj4gICAgIG5vci0+Ym91bmNl YnVmLCAxKTsKPiAgICAgK8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgcmV0dXJuIHNwYW5zaW9uX3Nl dF80Ynl0ZShub3IsIGVuYWJsZSk7Cj4gICAgIMKgIMKgIMKgIMKgIH0KPiAgICAgwqB9Cj4gCj4g ICAgICtzdGF0aWMgaW50IHNwaV9ub3JfeHJlYWRfc3Ioc3RydWN0IHNwaV9ub3IgKm5vciwgdTgg KnNyKQo+ICAgICArewo+ICAgICArwqAgwqAgwqAgwqBpZiAobm9yLT5zcGltZW0pIHsKPiAgICAg K8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgc3RydWN0IHNwaV9tZW1fb3Agb3AgPQo+ICAgICArwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBTUElfTUVNX09QKFNQSV9NRU1fT1BfQ01E KFNQSU5PUl9PUF9YUkRTUiwgMSksCj4gICAgICvCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBTUElfTUVNX09QX05PX0FERFIsCj4gICAgICvCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBTUElfTUVNX09QX05P X0RVTU1ZLAo+ICAgICArwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgU1BJX01FTV9PUF9EQVRBX0lOKDEsIHNyLCAxKSk7Cj4gICAgICsKPiAgICAgK8Kg IMKgIMKgIMKgIMKgIMKgIMKgIMKgcmV0dXJuIHNwaV9tZW1fZXhlY19vcChub3ItPnNwaW1lbSwg Jm9wKTsKPiAgICAgK8KgIMKgIMKgIMKgfQo+ICAgICArCj4gICAgICvCoCDCoCDCoCDCoHJldHVy biBub3ItPnJlYWRfcmVnKG5vciwgU1BJTk9SX09QX1hSRFNSLCBzciwgMSk7Cj4gICAgICt9Cj4g ICAgICsKPiAgICAgwqBzdGF0aWMgaW50IHMzYW5fc3JfcmVhZHkoc3RydWN0IHNwaV9ub3IgKm5v cikKPiAgICAgwqB7Cj4gICAgIMKgIMKgIMKgIMKgIGludCByZXQ7Cj4gCj4gICAgIC3CoCDCoCDC oCDCoHJldCA9IG5vci0+cmVhZF9yZWcobm9yLCBTUElOT1JfT1BfWFJEU1IsIG5vci0+Ym91bmNl YnVmLCAxKTsKPiAgICAgK8KgIMKgIMKgIMKgcmV0ID0gc3BpX25vcl94cmVhZF9zcihub3IsIG5v ci0+Ym91bmNlYnVmKTsKPiAgICAgwqAgwqAgwqAgwqAgaWYgKHJldCA8IDApIHsKPiAgICAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgZGV2X2Vycihub3ItPmRldiwgImVycm9yICVkIHJlYWRpbmcg WFJEU1JcbiIsIChpbnQpCj4gICAgIHJldCk7Cj4gICAgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IHJldHVybiByZXQ7Cj4gICAgIEBAIC01MjQsNiArNzk5LDIxIEBAIHN0YXRpYyBpbnQgczNhbl9z cl9yZWFkeShzdHJ1Y3Qgc3BpX25vciAqbm9yKQo+ICAgICDCoCDCoCDCoCDCoCByZXR1cm4gISEo bm9yLT5ib3VuY2VidWZbMF0gJiBYU1JfUkRZKTsKPiAgICAgwqB9Cj4gCj4gICAgICtzdGF0aWMg aW50IHNwaV9ub3JfY2xlYXJfc3Ioc3RydWN0IHNwaV9ub3IgKm5vcikKPiAgICAgK3sKPiAgICAg K8KgIMKgIMKgIMKgaWYgKG5vci0+c3BpbWVtKSB7Cj4gICAgICvCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoHN0cnVjdCBzcGlfbWVtX29wIG9wID0KPiAgICAgK8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgU1BJX01FTV9PUChTUElfTUVNX09QX0NNRChTUElOT1JfT1BfQ0xTUiwgMSks Cj4gICAgICvCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCBTUElfTUVNX09QX05PX0FERFIsCj4gICAgICvCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBTUElfTUVNX09QX05PX0RVTU1ZLAo+ICAgICArwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgU1BJX01FTV9PUF9O T19EQVRBKTsKPiAgICAgKwo+ICAgICArwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqByZXR1cm4gc3Bp X21lbV9leGVjX29wKG5vci0+c3BpbWVtLCAmb3ApOwo+ICAgICArwqAgwqAgwqAgwqB9Cj4gICAg ICsKPiAgICAgK8KgIMKgIMKgIMKgcmV0dXJuIG5vci0+d3JpdGVfcmVnKG5vciwgU1BJTk9SX09Q X0NMU1IsIE5VTEwsIDApOwo+ICAgICArfQo+ICAgICArCj4gICAgIMKgc3RhdGljIGludCBzcGlf bm9yX3NyX3JlYWR5KHN0cnVjdCBzcGlfbm9yICpub3IpCj4gICAgIMKgewo+ICAgICDCoCDCoCDC oCDCoCBpbnQgc3IgPSByZWFkX3NyKG5vcik7Cj4gICAgIEBAIC01MzYsMTMgKzgyNiwyOCBAQCBz dGF0aWMgaW50IHNwaV9ub3Jfc3JfcmVhZHkoc3RydWN0IHNwaV9ub3IgKm5vcikKPiAgICAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgZWxzZQo+ICAgICDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCBkZXZfZXJyKG5vci0+ZGV2LCAiUHJvZ3JhbW1pbmcgRXJyb3IKPiAgICAgb2Nj dXJyZWRcbiIpOwo+IAo+ICAgICAtwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBub3ItPndyaXRlX3Jl Zyhub3IsIFNQSU5PUl9PUF9DTFNSLCBOVUxMLCAwKTsKPiAgICAgK8KgIMKgIMKgIMKgIMKgIMKg IMKgIMKgc3BpX25vcl9jbGVhcl9zcihub3IpOwo+ICAgICDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCByZXR1cm4gLUVJTzsKPiAgICAgwqAgwqAgwqAgwqAgfQo+IAo+ICAgICDCoCDCoCDCoCDCoCBy ZXR1cm4gIShzciAmIFNSX1dJUCk7Cj4gICAgIMKgfQo+IAo+ICAgICArc3RhdGljIGludCBzcGlf bm9yX2NsZWFyX2ZzcihzdHJ1Y3Qgc3BpX25vciAqbm9yKQo+ICAgICArewo+ICAgICArwqAgwqAg wqAgwqBpZiAobm9yLT5zcGltZW0pIHsKPiAgICAgK8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgc3Ry dWN0IHNwaV9tZW1fb3Agb3AgPQo+ICAgICArwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqBTUElfTUVNX09QKFNQSV9NRU1fT1BfQ01EKFNQSU5PUl9PUF9DTEZTUiwgMSksCj4gICAg ICvCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBTUElf TUVNX09QX05PX0FERFIsCj4gICAgICvCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCBTUElfTUVNX09QX05PX0RVTU1ZLAo+ICAgICArwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgU1BJX01FTV9PUF9OT19EQVRB KTsKPiAgICAgKwo+ICAgICArwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqByZXR1cm4gc3BpX21lbV9l eGVjX29wKG5vci0+c3BpbWVtLCAmb3ApOwo+ICAgICArwqAgwqAgwqAgwqB9Cj4gICAgICsKPiAg ICAgK8KgIMKgIMKgIMKgcmV0dXJuIG5vci0+d3JpdGVfcmVnKG5vciwgU1BJTk9SX09QX0NMRlNS LCBOVUxMLCAwKTsKPiAgICAgK30KPiAgICAgKwo+ICAgICDCoHN0YXRpYyBpbnQgc3BpX25vcl9m c3JfcmVhZHkoc3RydWN0IHNwaV9ub3IgKm5vcikKPiAgICAgwqB7Cj4gICAgIMKgIMKgIMKgIMKg IGludCBmc3IgPSByZWFkX2Zzcihub3IpOwo+ICAgICBAQCAtNTU5LDcgKzg2NCw3IEBAIHN0YXRp YyBpbnQgc3BpX25vcl9mc3JfcmVhZHkoc3RydWN0IHNwaV9ub3IgKm5vcikKPiAgICAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgZGV2X2Vycihub3ItPmRldiwKPiAgICAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgIkF0dGVtcHRlZCB0byBtb2RpZnkgYSBw cm90ZWN0ZWQgc2VjdG9yLlxuIik7Cj4gCj4gICAgIC3CoCDCoCDCoCDCoCDCoCDCoCDCoCDCoG5v ci0+d3JpdGVfcmVnKG5vciwgU1BJTk9SX09QX0NMRlNSLCBOVUxMLCAwKTsKPiAgICAgK8KgIMKg IMKgIMKgIMKgIMKgIMKgIMKgc3BpX25vcl9jbGVhcl9mc3Iobm9yKTsKPiAgICAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgcmV0dXJuIC1FSU87Cj4gICAgIMKgIMKgIMKgIMKgIH0KPiAKPiAgICAg QEAgLTYyNyw2ICs5MzIsMTYgQEAgc3RhdGljIGludCBlcmFzZV9jaGlwKHN0cnVjdCBzcGlfbm9y ICpub3IpCj4gICAgIMKgewo+ICAgICDCoCDCoCDCoCDCoCBkZXZfZGJnKG5vci0+ZGV2LCAiICVs bGRLaUJcbiIsIChsb25nIGxvbmcpKG5vci0+bXRkLnNpemUgPj4KPiAgICAgMTApKTsKPiAKPiAg ICAgK8KgIMKgIMKgIMKgaWYgKG5vci0+c3BpbWVtKSB7Cj4gICAgICvCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoHN0cnVjdCBzcGlfbWVtX29wIG9wID0KPiAgICAgK8KgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgCj4gICAgIMKgU1BJX01FTV9PUChTUElfTUVNX09QX0NNRChTUElOT1JfT1Bf Q0hJUF9FUkFTRSwgMSksCj4gICAgICvCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCBTUElfTUVNX09QX05PX0FERFIsCj4gICAgICvCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBTUElfTUVNX09QX05PX0RVTU1Z LAo+ICAgICArwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgU1BJX01FTV9PUF9OT19EQVRBKTsKPiAgICAgKwo+ICAgICArwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqByZXR1cm4gc3BpX21lbV9leGVjX29wKG5vci0+c3BpbWVtLCAmb3ApOwo+ICAgICArwqAg wqAgwqAgwqB9Cj4gICAgICsKPiAgICAgwqAgwqAgwqAgwqAgcmV0dXJuIG5vci0+d3JpdGVfcmVn KG5vciwgU1BJTk9SX09QX0NISVBfRVJBU0UsIE5VTEwsIDApOwo+ICAgICDCoH3CoAo+IAo+ICAg ICBAQCAtNjg4LDYgKzEwMDMsMTYgQEAgc3RhdGljIGludCBzcGlfbm9yX2VyYXNlX3NlY3Rvcihz dHJ1Y3Qgc3BpX25vcgo+ICAgICAqbm9yLCB1MzIgYWRkcikKPiAgICAgwqAgwqAgwqAgwqAgaWYg KG5vci0+ZXJhc2UpCj4gICAgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHJldHVybiBub3ItPmVy YXNlKG5vciwgYWRkcik7Cj4gCj4gICAgICvCoCDCoCDCoCDCoGlmIChub3ItPnNwaW1lbSkgewo+ ICAgICArwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBzdHJ1Y3Qgc3BpX21lbV9vcCBvcCA9Cj4gICAg ICvCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoFNQSV9NRU1fT1AoU1BJX01FTV9P UF9DTUQobm9yLT5lcmFzZV9vcGNvZGUsIDEpLAo+ICAgICArwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgU1BJX01FTV9PUF9BRERSKG5vci0+YWRkcl93 aWR0aCwKPiAgICAgYWRkciwgMSksCj4gICAgICvCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBTUElfTUVNX09QX05PX0RVTU1ZLAo+ICAgICArwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgU1BJX01FTV9PUF9O T19EQVRBKTsKPiAgICAgKwo+ICAgICArwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqByZXR1cm4gc3Bp X21lbV9leGVjX29wKG5vci0+c3BpbWVtLCAmb3ApOwo+ICAgICArwqAgwqAgwqAgwqB9Cj4gICAg ICsKPiAKPiAKPiBzdGF0aWMgaW50IHNwaV9ub3JfZXJhc2Vfc2VjdG9yKHN0cnVjdCBzcGlfbm9y ICpub3IsIHUzMiBhZGRyKQo+IHsKPiAKPiAgICAgaW50IGk7Cj4gCj4gICAgIGlmIChub3ItPmZs YWdzICYgU05PUl9GX1MzQU5fQUREUl9ERUZBVUxUKQo+IAo+ICAgICAgICAgYWRkciA9IHNwaV9u b3JfczNhbl9hZGRyX2NvbnZlcnQobm9yLCBhZGRyKTsKPiAKPiAKPiAgICAgaWYgKG5vci0+ZXJh c2UpCj4gCj4gICAgICAgICByZXR1cm4gbm9yLT5lcmFzZShub3IsIGFkZHIpOwo+IAo+IAo+ICAg ICAvKgo+ICAgICAqIERlZmF1bHQgaW1wbGVtZW50YXRpb24sIGlmIGRyaXZlciBkb2Vzbid0IGhh dmUgYSBzcGVjaWFsaXplZCBIVwo+ICAgICAqIGNvbnRyb2wKPiAgICAgKi8KPiAgICAgZm9yIChp ID0gbm9yLT5hZGRyX3dpZHRoIC0gMTsgaSA+PSAwOyBpLS0pIHsKPiAKPiAgICAgICAgIG5vci0+ Ym91bmNlYnVmW2ldID0gYWRkciAmIDB4ZmY7Cj4gCj4gICAgICAgICBhZGRyID4+PSA4Owo+IAo+ ICAgICB9Cj4gCj4gICAgIGlmIChub3ItPnNwaW1lbSkgewo+IAo+ICAgICAgICAgc3RydWN0IHNw aV9tZW1fb3Agb3AgPQo+IAo+ICAgICAgICAgICAgIFNQSV9NRU1fT1AoU1BJX01FTV9PUF9DTUQo bm9yLT5lcmFzZV9vcGNvZGUsIDEpLAo+IAo+ICAgICAgICAgICAgIMKgIFNQSV9NRU1fT1BfTk9f QUREUiwKPiAKPiAgICAgICAgICAgICDCoCBTUElfTUVNX09QX05PX0RVTU1ZLAo+IAo+ICAgICAg ICAgICAgIMKgIFNQSV9NRU1fT1BfREFUQV9PVVQobm9yLT5hZGRyX3dpZHRoLAo+IAo+ICAgICAg ICAgICAgIMKgIMKgIMKgIG5vci0+Ym91bmNlYnVmLCAxKSk7Cj4gCj4gCj4gICAgICAgICByZXR1 cm4gc3BpX21lbV9leGVjX29wKG5vci0+c3BpbWVtLCAmb3ApOwo+IAo+ICAgICB9Cj4gCj4gICAg IHJldHVybiBub3ItPndyaXRlX3JlZyhub3IsIG5vci0+ZXJhc2Vfb3Bjb2RlLCBub3ItPmJvdW5j ZWJ1ZiwKPiAKPiAgICAgICAgICAgICAgICAgbm9yLT5hZGRyX3dpZHRoKTsKPiAKPiB9Cj4gwqAK PiAKPiAgICAgwqAgwqAgwqAgwqAgLyoKPiAgICAgwqAgwqAgwqAgwqAgwqAqIERlZmF1bHQgaW1w bGVtZW50YXRpb24sIGlmIGRyaXZlciBkb2Vzbid0IGhhdmUgYQo+ICAgICBzcGVjaWFsaXplZCBI Vwo+ICAgICDCoCDCoCDCoCDCoCDCoCogY29udHJvbAo+ICAgICBAQCAtMTQwMyw3ICsxNzI4LDE4 IEBAIHN0YXRpYyBpbnQgd3JpdGVfc3JfY3Ioc3RydWN0IHNwaV9ub3IgKm5vciwKPiAgICAgdTgg KnNyX2NyKQo+IAo+ICAgICDCoCDCoCDCoCDCoCB3cml0ZV9lbmFibGUobm9yKTsKPiAKPiAgICAg LcKgIMKgIMKgIMKgcmV0ID0gbm9yLT53cml0ZV9yZWcobm9yLCBTUElOT1JfT1BfV1JTUiwgc3Jf Y3IsIDIpOwo+ICAgICArwqAgwqAgwqAgwqBpZiAobm9yLT5zcGltZW0pIHsKPiAgICAgK8KgIMKg IMKgIMKgIMKgIMKgIMKgIMKgc3RydWN0IHNwaV9tZW1fb3Agb3AgPQo+ICAgICArwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBTUElfTUVNX09QKFNQSV9NRU1fT1BfQ01EKFNQSU5P Ul9PUF9XUlNSLCAxKSwKPiAgICAgK8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIFNQSV9NRU1fT1BfTk9fQUREUiwKPiAgICAgK8KgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIFNQSV9NRU1fT1BfTk9fRFVNTVks Cj4gICAgICvCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCBTUElfTUVNX09QX0RBVEFfT1VUKDIsIHNyX2NyLCAxKSk7Cj4gICAgICsKPiAgICAgK8KgIMKg IMKgIMKgIMKgIMKgIMKgIMKgcmV0ID0gc3BpX21lbV9leGVjX29wKG5vci0+c3BpbWVtLCAmb3Ap Owo+ICAgICArwqAgwqAgwqAgwqB9IGVsc2Ugewo+ICAgICArwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqByZXQgPSBub3ItPndyaXRlX3JlZyhub3IsIFNQSU5PUl9PUF9XUlNSLCBzcl9jciwgMik7Cj4g ICAgICvCoCDCoCDCoCDCoH0KPiAgICAgKwo+ICAgICDCoCDCoCDCoCDCoCBpZiAocmV0IDwgMCkg ewo+ICAgICDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBkZXZfZXJyKG5vci0+ZGV2LAo+ICAgICDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCAiZXJyb3Igd2hpbGUgd3JpdGluZyBj b25maWd1cmF0aW9uIHJlZ2lzdGVyXG4iKTsKPiAgICAgQEAgLTE1ODQsNiArMTkyMCwzNiBAQCBz dGF0aWMgaW50Cj4gICAgIHNwYW5zaW9uX3JlYWRfY3JfcXVhZF9lbmFibGUoc3RydWN0IHNwaV9u b3IgKm5vcikKPiAgICAgwqAgwqAgwqAgwqAgcmV0dXJuIDA7Cj4gICAgIMKgfQo+IAo+ICAgICAr c3RhdGljIGludCBzcGlfbm9yX3dyaXRlX3NyMihzdHJ1Y3Qgc3BpX25vciAqbm9yLCB1OCAqc3Iy KQo+ICAgICArewo+ICAgICArwqAgwqAgwqAgwqBpZiAobm9yLT5zcGltZW0pIHsKPiAgICAgK8Kg IMKgIMKgIMKgIMKgIMKgIMKgIMKgc3RydWN0IHNwaV9tZW1fb3Agb3AgPQo+ICAgICArwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBTUElfTUVNX09QKFNQSV9NRU1fT1BfQ01EKFNQ SU5PUl9PUF9XUlNSMiwgMSksCj4gICAgICvCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCBTUElfTUVNX09QX05PX0FERFIsCj4gICAgICvCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBTUElfTUVNX09QX05PX0RV TU1ZLAo+ICAgICArwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgU1BJX01FTV9PUF9EQVRBX09VVCgxLCBzcjIsIDEpKTsKPiAgICAgKwo+ICAgICArwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqByZXR1cm4gc3BpX21lbV9leGVjX29wKG5vci0+c3BpbWVtLCAm b3ApOwo+ICAgICArwqAgwqAgwqAgwqB9Cj4gICAgICsKPiAgICAgK8KgIMKgIMKgIMKgcmV0dXJu IG5vci0+d3JpdGVfcmVnKG5vciwgU1BJTk9SX09QX1dSU1IyLCBzcjIsIDEpOwo+ICAgICArfQo+ ICAgICArCj4gICAgICtzdGF0aWMgaW50IHNwaV9ub3JfcmVhZF9zcjIoc3RydWN0IHNwaV9ub3Ig Km5vciwgdTggKnNyMikKPiAgICAgK3sKPiAgICAgK8KgIMKgIMKgIMKgaWYgKG5vci0+c3BpbWVt KSB7Cj4gICAgICvCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoHN0cnVjdCBzcGlfbWVtX29wIG9wID0K PiAgICAgK8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgU1BJX01FTV9PUChTUElf TUVNX09QX0NNRChTUElOT1JfT1BfUkRTUjIsIDEpLAo+ICAgICArwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgU1BJX01FTV9PUF9OT19BRERSLAo+ICAg ICArwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgU1BJ X01FTV9PUF9OT19EVU1NWSwKPiAgICAgK8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIFNQSV9NRU1fT1BfREFUQV9JTigxLCBzcjIsIDEpKTsKPiAgICAg Kwo+ICAgICArwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqByZXR1cm4gc3BpX21lbV9leGVjX29wKG5v ci0+c3BpbWVtLCAmb3ApOwo+ICAgICArwqAgwqAgwqAgwqB9Cj4gICAgICsKPiAgICAgK8KgIMKg IMKgIMKgcmV0dXJuIG5vci0+cmVhZF9yZWcobm9yLCBTUElOT1JfT1BfUkRTUjIsIHNyMiwgMSk7 Cj4gICAgICt9Cj4gICAgICsKPiAgICAgwqAvKioKPiAgICAgwqAgKiBzcjJfYml0N19xdWFkX2Vu YWJsZSgpIC0gc2V0IFFFIGJpdCBpbiBTdGF0dXMgUmVnaXN0ZXIgMi4KPiAgICAgwqAgKiBAbm9y OsKgIMKgIMKgIMKgcG9pbnRlciB0byBhICdzdHJ1Y3Qgc3BpX25vcicKPiAgICAgQEAgLTE2MDIs NyArMTk2OCw3IEBAIHN0YXRpYyBpbnQgc3IyX2JpdDdfcXVhZF9lbmFibGUoc3RydWN0IHNwaV9u b3IKPiAgICAgKm5vcikKPiAgICAgwqAgwqAgwqAgwqAgaW50IHJldDsKPiAKPiAgICAgwqAgwqAg wqAgwqAgLyogQ2hlY2sgY3VycmVudCBRdWFkIEVuYWJsZSBiaXQgdmFsdWUuICovCj4gICAgIC3C oCDCoCDCoCDCoHJldCA9IG5vci0+cmVhZF9yZWcobm9yLCBTUElOT1JfT1BfUkRTUjIsIHNyMiwg MSk7Cj4gICAgICvCoCDCoCDCoCDCoHJldCA9IHNwaV9ub3JfcmVhZF9zcjIobm9yLCBzcjIpOwo+ ICAgICDCoCDCoCDCoCDCoCBpZiAocmV0KQo+ICAgICDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBy ZXR1cm4gcmV0Owo+ICAgICDCoCDCoCDCoCDCoCBpZiAoKnNyMiAmIFNSMl9RVUFEX0VOX0JJVDcp Cj4gICAgIEBAIC0xNjEzLDcgKzE5NzksNyBAQCBzdGF0aWMgaW50IHNyMl9iaXQ3X3F1YWRfZW5h YmxlKHN0cnVjdCBzcGlfbm9yCj4gICAgICpub3IpCj4gCj4gICAgIMKgIMKgIMKgIMKgIHdyaXRl X2VuYWJsZShub3IpOwo+IAo+ICAgICAtwqAgwqAgwqAgwqByZXQgPSBub3ItPndyaXRlX3JlZyhu b3IsIFNQSU5PUl9PUF9XUlNSMiwgc3IyLCAxKTsKPiAgICAgK8KgIMKgIMKgIMKgcmV0ID0gc3Bp X25vcl93cml0ZV9zcjIobm9yLCBzcjIpOwo+ICAgICDCoCDCoCDCoCDCoCBpZiAocmV0IDwgMCkg ewo+ICAgICDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBkZXZfZXJyKG5vci0+ZGV2LCAiZXJyb3Ig d2hpbGUgd3JpdGluZyBzdGF0dXMKPiAgICAgcmVnaXN0ZXIgMlxuIik7Cj4gICAgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIHJldHVybiAtRUlOVkFMOwo+ICAgICBAQCAtMTYyNiw3ICsxOTkyLDcg QEAgc3RhdGljIGludCBzcjJfYml0N19xdWFkX2VuYWJsZShzdHJ1Y3Qgc3BpX25vcgo+ICAgICAq bm9yKQo+ICAgICDCoCDCoCDCoCDCoCB9Cj4gCj4gICAgIMKgIMKgIMKgIMKgIC8qIFJlYWQgYmFj ayBhbmQgY2hlY2sgaXQuICovCj4gICAgIC3CoCDCoCDCoCDCoHJldCA9IG5vci0+cmVhZF9yZWco bm9yLCBTUElOT1JfT1BfUkRTUjIsIHNyMiwgMSk7Cj4gICAgICvCoCDCoCDCoCDCoHJldCA9IHNw aV9ub3JfcmVhZF9zcjIobm9yLCBzcjIpOwo+ICAgICDCoCDCoCDCoCDCoCBpZiAoIShyZXQgPiAw ICYmICgqc3IyICYgU1IyX1FVQURfRU5fQklUNykpKSB7Cj4gICAgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIGRldl9lcnIobm9yLT5kZXYsICJTUjIgUXVhZCBiaXQgbm90IHNldFxuIik7Cj4gICAg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHJldHVybiAtRUlOVkFMOwo+ICAgICBAQCAtMjE3OSw3 ICsyNTQ1LDE4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmxhc2hfaW5mbwo+ICAgICAqc3BpX25v cl9yZWFkX2lkKHN0cnVjdCBzcGlfbm9yICpub3IpCj4gICAgIMKgIMKgIMKgIMKgIHU4wqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgKmlkID0gbm9yLT5ib3VuY2VidWY7Cj4gICAgIMKg IMKgIMKgIMKgIGNvbnN0IHN0cnVjdCBmbGFzaF9pbmZvICppbmZvOwo+IAo+ICAgICAtwqAgwqAg wqAgwqB0bXAgPSBub3ItPnJlYWRfcmVnKG5vciwgU1BJTk9SX09QX1JESUQsIGlkLAo+ICAgICBT UElfTk9SX01BWF9JRF9MRU4pOwo+ICAgICArwqAgwqAgwqAgwqBpZiAobm9yLT5zcGltZW0pIHsK PiAgICAgK8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgc3RydWN0IHNwaV9tZW1fb3Agb3AgPQo+ICAg ICArwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBTUElfTUVNX09QKFNQSV9NRU1f T1BfQ01EKFNQSU5PUl9PUF9SRElELCAxKSwKPiAgICAgK8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIFNQSV9NRU1fT1BfTk9fQUREUiwKPiAgICAgK8Kg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIFNQSV9NRU1f T1BfTk9fRFVNTVksCj4gICAgICvCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoAo+ICAgICBTUElfTUVNX09QX0RBVEFfSU4oU1BJX05PUl9NQVhfSURfTEVO LCBpZCwgMSkpOwo+ICAgICArCj4gICAgICvCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoHRtcCA9IHNw aV9tZW1fZXhlY19vcChub3ItPnNwaW1lbSwgJm9wKTsKPiAgICAgK8KgIMKgIMKgIMKgfSBlbHNl IHsKPiAgICAgK8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgdG1wID0gbm9yLT5yZWFkX3JlZyhub3Is IFNQSU5PUl9PUF9SRElELCBpZCwKPiAgICAgK8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgU1BJX05PUl9NQVhfSURfTEVOKTsKPiAgICAgK8KgIMKg IMKgIMKgfQo+ICAgICDCoCDCoCDCoCDCoCBpZiAodG1wIDwgMCkgewo+ICAgICDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCBkZXZfZXJyKG5vci0+ZGV2LCAiZXJyb3IgJWQgcmVhZGluZyBKRURFQyBJ RFxuIiwgdG1wKTsKPiAgICAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgcmV0dXJuIEVSUl9QVFIo dG1wKTsKPiAgICAgQEAgLTIyMTUsNyArMjU5Miw3IEBAIHN0YXRpYyBpbnQgc3BpX25vcl9yZWFk KHN0cnVjdCBtdGRfaW5mbyAqbXRkLAo+ICAgICBsb2ZmX3QgZnJvbSwgc2l6ZV90IGxlbiwKPiAg ICAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgaWYgKG5vci0+ZmxhZ3MgJiBTTk9SX0ZfUzNBTl9B RERSX0RFRkFVTFQpCj4gICAgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGFk ZHIgPSBzcGlfbm9yX3MzYW5fYWRkcl9jb252ZXJ0KG5vciwgYWRkcik7Cj4gCj4gICAgIC3CoCDC oCDCoCDCoCDCoCDCoCDCoCDCoHJldCA9IG5vci0+cmVhZChub3IsIGFkZHIsIGxlbiwgYnVmKTsK PiAgICAgK8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgcmV0ID0gc3BpX25vcl9yZWFkX2RhdGEobm9y LCBhZGRyLCBsZW4sIGJ1Zik7Cj4gICAgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGlmIChyZXQg PT0gMCkgewo+ICAgICDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCAvKiBXZSBz aG91bGRuJ3Qgc2VlIDAtbGVuZ3RoIHJlYWRzICovCj4gICAgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIHJldCA9IC1FSU87Cj4gICAgIEBAIC0yMjYwLDcgKzI2MzcsNyBAQCBz dGF0aWMgaW50IHNzdF93cml0ZShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwKPiAgICAgbG9mZl90IHRv LCBzaXplX3QgbGVuLAo+ICAgICDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBub3ItPnByb2dyYW1f b3Bjb2RlID0gU1BJTk9SX09QX0JQOwo+IAo+ICAgICDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCAv KiB3cml0ZSBvbmUgYnl0ZS4gKi8KPiAgICAgLcKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgcmV0ID0g bm9yLT53cml0ZShub3IsIHRvLCAxLCBidWYpOwo+ICAgICArwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqByZXQgPSBzcGlfbm9yX3dyaXRlX2RhdGEobm9yLCB0bywgMSwgYnVmKTsKPiAgICAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgaWYgKHJldCA8IDApCj4gICAgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIGdvdG8gc3N0X3dyaXRlX2VycjsKPiAgICAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgV0FSTihyZXQgIT0gMSwgIldoaWxlIHdyaXRpbmcgMSBieXRlIHdyaXR0ZW4gJWkK PiAgICAgYnl0ZXNcbiIsCj4gICAgIEBAIC0yMjc2LDcgKzI2NTMsNyBAQCBzdGF0aWMgaW50IHNz dF93cml0ZShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwKPiAgICAgbG9mZl90IHRvLCBzaXplX3QgbGVu LAo+ICAgICDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBub3ItPnByb2dyYW1fb3Bjb2RlID0gU1BJ Tk9SX09QX0FBSV9XUDsKPiAKPiAgICAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgLyogd3JpdGUg dHdvIGJ5dGVzLiAqLwo+ICAgICAtwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqByZXQgPSBub3ItPndy aXRlKG5vciwgdG8sIDIsIGJ1ZiArIGFjdHVhbCk7Cj4gICAgICvCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoHJldCA9IHNwaV9ub3Jfd3JpdGVfZGF0YShub3IsIHRvLCAyLCBidWYgKyBhY3R1YWwpOwo+ ICAgICDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBpZiAocmV0IDwgMCkKPiAgICAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgZ290byBzc3Rfd3JpdGVfZXJyOwo+ICAgICDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCBXQVJOKHJldCAhPSAyLCAiV2hpbGUgd3JpdGluZyAyIGJ5dGVz IHdyaXR0ZW4gJWkKPiAgICAgYnl0ZXNcbiIsCj4gICAgIEBAIC0yMjk5LDcgKzI2NzYsNyBAQCBz dGF0aWMgaW50IHNzdF93cml0ZShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwKPiAgICAgbG9mZl90IHRv LCBzaXplX3QgbGVuLAo+ICAgICDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCB3cml0ZV9lbmFibGUo bm9yKTsKPiAKPiAgICAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgbm9yLT5wcm9ncmFtX29wY29k ZSA9IFNQSU5PUl9PUF9CUDsKPiAgICAgLcKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgcmV0ID0gbm9y LT53cml0ZShub3IsIHRvLCAxLCBidWYgKyBhY3R1YWwpOwo+ICAgICArwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqByZXQgPSBzcGlfbm9yX3dyaXRlX2RhdGEobm9yLCB0bywgMSwgYnVmICsgYWN0dWFs KTsKPiAgICAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgaWYgKHJldCA8IDApCj4gICAgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGdvdG8gc3N0X3dyaXRlX2VycjsKPiAgICAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgV0FSTihyZXQgIT0gMSwgIldoaWxlIHdyaXRpbmcgMSBi eXRlIHdyaXR0ZW4gJWkKPiAgICAgYnl0ZXNcbiIsCj4gICAgIEBAIC0yMzYxLDcgKzI3MzgsNyBA QCBzdGF0aWMgaW50IHNwaV9ub3Jfd3JpdGUoc3RydWN0IG10ZF9pbmZvICptdGQsCj4gICAgIGxv ZmZfdCB0bywgc2l6ZV90IGxlbiwKPiAgICAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgYWRkciA9IHNwaV9ub3JfczNhbl9hZGRyX2NvbnZlcnQobm9yLCBhZGRyKTsKPiAKPiAg ICAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgd3JpdGVfZW5hYmxlKG5vcik7Cj4gICAgIC3CoCDC oCDCoCDCoCDCoCDCoCDCoCDCoHJldCA9IG5vci0+d3JpdGUobm9yLCBhZGRyLCBwYWdlX3JlbWFp biwgYnVmICsgaSk7Cj4gICAgICvCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoHJldCA9IHNwaV9ub3Jf d3JpdGVfZGF0YShub3IsIGFkZHIsIHBhZ2VfcmVtYWluLCBidWYKPiAgICAgKyBpKTsKPiAgICAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgaWYgKHJldCA8IDApCj4gICAgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIGdvdG8gd3JpdGVfZXJyOwo+ICAgICDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCB3cml0dGVuID0gcmV0Owo+ICAgICBAQCAtMjM4MCw4ICsyNzU3LDEwIEBAIHN0 YXRpYyBpbnQgc3BpX25vcl93cml0ZShzdHJ1Y3QgbXRkX2luZm8KPiAgICAgKm10ZCwgbG9mZl90 IHRvLCBzaXplX3QgbGVuLAo+IAo+ICAgICDCoHN0YXRpYyBpbnQgc3BpX25vcl9jaGVjayhzdHJ1 Y3Qgc3BpX25vciAqbm9yKQo+ICAgICDCoHsKPiAgICAgLcKgIMKgIMKgIMKgaWYgKCFub3ItPmRl diB8fCAhbm9yLT5yZWFkIHx8ICFub3ItPndyaXRlIHx8Cj4gICAgIC3CoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCFub3ItPnJlYWRfcmVnIHx8ICFub3ItPndyaXRlX3JlZykgewo+ICAgICArwqAgwqAg wqAgwqBpZiAoIW5vci0+ZGV2IHx8Cj4gICAgICvCoCDCoCDCoCDCoCDCoCDCoCghbm9yLT5zcGlt ZW0gJiYKPiAgICAgK8KgIMKgIMKgIMKgIMKgIMKgKCFub3ItPnJlYWQgfHwgIW5vci0+d3JpdGUg fHwgIW5vci0+cmVhZF9yZWcgfHwKPiAgICAgK8KgIMKgIMKgIMKgIMKgIMKgIMKgIW5vci0+d3Jp dGVfcmVnKSkpIHsKPiAgICAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgcHJfZXJyKCJzcGktbm9y OiBwbGVhc2UgZmlsbCBhbGwgdGhlIG5lY2Vzc2FyeQo+ICAgICBmaWVsZHMhXG4iKTsKPiAgICAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgcmV0dXJuIC1FSU5WQUw7Cj4gICAgIMKgIMKgIMKgIMKg IH0KPiAgICAgQEAgLTIzOTMsNyArMjc3Miw3IEBAIHN0YXRpYyBpbnQgczNhbl9ub3Jfc2Nhbihz dHJ1Y3Qgc3BpX25vciAqbm9yKQo+ICAgICDCoHsKPiAgICAgwqAgwqAgwqAgwqAgaW50IHJldDsK PiAKPiAgICAgLcKgIMKgIMKgIMKgcmV0ID0gbm9yLT5yZWFkX3JlZyhub3IsIFNQSU5PUl9PUF9Y UkRTUiwgbm9yLT5ib3VuY2VidWYsIDEpOwo+ICAgICArwqAgwqAgwqAgwqByZXQgPSBzcGlfbm9y X3hyZWFkX3NyKG5vciwgbm9yLT5ib3VuY2VidWYpOwo+ICAgICDCoCDCoCDCoCDCoCBpZiAocmV0 IDwgMCkgewo+ICAgICDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBkZXZfZXJyKG5vci0+ZGV2LCAi ZXJyb3IgJWQgcmVhZGluZyBYUkRTUlxuIiwgKGludCkKPiAgICAgcmV0KTsKPiAgICAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgcmV0dXJuIHJldDsKPiAgICAgQEAgLTI1MjMsNyArMjkwMiw3IEBA IHN0YXRpYyBpbnQgc3BpX25vcl9yZWFkX3JhdyhzdHJ1Y3Qgc3BpX25vcgo+ICAgICAqbm9yLCB1 MzIgYWRkciwgc2l6ZV90IGxlbiwgdTggKmJ1ZikKPiAgICAgwqAgwqAgwqAgwqAgaW50IHJldDsK PiAKPiAgICAgwqAgwqAgwqAgwqAgd2hpbGUgKGxlbikgewo+ICAgICAtwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqByZXQgPSBub3ItPnJlYWQobm9yLCBhZGRyLCBsZW4sIGJ1Zik7Cj4gICAgICvCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoHJldCA9IHNwaV9ub3JfcmVhZF9kYXRhKG5vciwgYWRkciwgbGVu LCBidWYpOwo+ICAgICDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBpZiAoIXJldCB8fCByZXQgPiBs ZW4pCj4gICAgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHJldHVybiAtRUlP Owo+ICAgICDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBpZiAocmV0IDwgMCkKPiAgICAgQEAgLTQx MjIsNiArNDUwMSwxMCBAQCBpbnQgc3BpX25vcl9zY2FuKHN0cnVjdCBzcGlfbm9yICpub3IsIGNv bnN0Cj4gICAgIGNoYXIgKm5hbWUsCj4gICAgIMKgIMKgIMKgIMKgIC8qCj4gICAgIMKgIMKgIMKg IMKgIMKgKiBXZSBuZWVkIHRoZSBib3VuY2UgYnVmZmVyIGVhcmx5IHRvIHJlYWQvd3JpdGUgcmVn aXN0ZXJzCj4gICAgIHdoZW4gZ29pbmcKPiAgICAgwqAgwqAgwqAgwqAgwqAqIHRocm91Z2ggdGhl IHNwaS1tZW0gbGF5ZXIgKGJ1ZmZlcnMgaGF2ZSB0byBiZSBETUEtYWJsZSkuCj4gICAgICvCoCDC oCDCoCDCoCAqIEZvciBzcGktbWVtIGRyaXZlcnMsIHdlJ2xsIHJlYWxsb2NhdGUgYSBuZXcgYnVm ZmVyIGlmCj4gICAgICvCoCDCoCDCoCDCoCAqIG5vci0+cGFnZV9zaXplIHR1cm5zIG91dCB0byBi ZSBncmVhdGVyIHRoYW4gUEFHRV9TSVpFICh3aGljaAo+ICAgICArwqAgwqAgwqAgwqAgKiBzaG91 bGRuJ3QgaGFwcGVuIGJlZm9yZSBsb25nIHNpbmNlIE5PUiBwYWdlcyBhcmUgdXN1YWxseSBsZXNz Cj4gICAgICvCoCDCoCDCoCDCoCAqIHRoYW4gMUtCKSBhZnRlciBzcGlfbm9yX3NjYW4oKSByZXR1 cm5zLgo+ICAgICDCoCDCoCDCoCDCoCDCoCovCj4gICAgIMKgIMKgIMKgIMKgIG5vci0+Ym91bmNl YnVmX3NpemUgPSBQQUdFX1NJWkU7Cj4gICAgIMKgIMKgIMKgIMKgIG5vci0+Ym91bmNlYnVmID0g ZGV2bV9rbWFsbG9jKGRldiwgbm9yLT5ib3VuY2VidWZfc2l6ZSwKPiAgICAgQEAgLTQzMjQsNiAr NDcwNywxOTUgQEAgaW50IHNwaV9ub3Jfc2NhbihzdHJ1Y3Qgc3BpX25vciAqbm9yLCBjb25zdAo+ ICAgICBjaGFyICpuYW1lLAo+ICAgICDCoH0KPiAgICAgwqBFWFBPUlRfU1lNQk9MX0dQTChzcGlf bm9yX3NjYW4pOwo+IAo+ICAgICArc3RhdGljIGludCBzcGlfbm9yX3Byb2JlKHN0cnVjdCBzcGlf bWVtICpzcGltZW0pCj4gICAgICt7Cj4gICAgICvCoCDCoCDCoCDCoHN0cnVjdCBzcGlfZGV2aWNl ICpzcGkgPSBzcGltZW0tPnNwaTsKPiAgICAgK8KgIMKgIMKgIMKgc3RydWN0IGZsYXNoX3BsYXRm b3JtX2RhdGEgKmRhdGEgPSBkZXZfZ2V0X3BsYXRkYXRhKCZzcGktPmRldik7Cj4gICAgICvCoCDC oCDCoCDCoHN0cnVjdCBzcGlfbm9yICpub3I7Cj4gICAgICvCoCDCoCDCoCDCoHN0cnVjdCBzcGlf bm9yX2h3Y2FwcyBod2NhcHMgPSB7Cj4gICAgICvCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoC5tYXNr ID0gU05PUl9IV0NBUFNfUkVBRCB8Cj4gICAgICvCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoFNOT1JfSFdDQVBTX1JFQURfRkFTVCB8Cj4gICAgICvCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoFNOT1JfSFdDQVBTX1BQLAo+ICAgICArwqAgwqAgwqAgwqB9Owo+ICAg ICArwqAgwqAgwqAgwqBjaGFyICpmbGFzaF9uYW1lOwo+ICAgICArwqAgwqAgwqAgwqBpbnQgcmV0 Owo+ICAgICArCj4gICAgICvCoCDCoCDCoCDCoG5vciA9IGRldm1fa3phbGxvYygmc3BpLT5kZXYs IHNpemVvZigqbm9yKSwgR0ZQX0tFUk5FTCk7Cj4gICAgICvCoCDCoCDCoCDCoGlmICghbm9yKQo+ ICAgICArwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqByZXR1cm4gLUVOT01FTTsKPiAgICAgKwo+ICAg ICArwqAgwqAgwqAgwqBub3ItPnNwaW1lbSA9IHNwaW1lbTsKPiAgICAgK8KgIMKgIMKgIMKgbm9y LT5kZXYgPSAmc3BpLT5kZXY7Cj4gICAgICvCoCDCoCDCoCDCoHNwaV9ub3Jfc2V0X2ZsYXNoX25v ZGUobm9yLCBzcGktPmRldi5vZl9ub2RlKTsKPiAgICAgKwo+ICAgICArwqAgwqAgwqAgwqBzcGlf bWVtX3NldF9kcnZkYXRhKHNwaW1lbSwgbm9yKTsKPiAgICAgKwo+ICAgICArwqAgwqAgwqAgwqBp ZiAoc3BpLT5tb2RlICYgU1BJX1JYX09DVEFMKSB7Cj4gICAgICvCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoGh3Y2Fwcy5tYXNrIHw9IFNOT1JfSFdDQVBTX1JFQURfMV8xXzg7Cj4gICAgICsKPiAgICAg K8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgaWYgKHNwaS0+bW9kZSAmIFNQSV9UWF9PQ1RBTCkKPiAg ICAgK8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgaHdjYXBzLm1hc2sgfD0gKFNO T1JfSFdDQVBTX1JFQURfMV84XzggfAo+ICAgICArwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBTTk9SX0hXQ0FQU19QUF8xXzFfOCB8Cj4g ICAgICvCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoFNOT1JfSFdDQVBTX1BQXzFfOF84KTsKPiAgICAgK8KgIMKgIMKgIMKgfSBlbHNlIGlm IChzcGktPm1vZGUgJiBTUElfUlhfUVVBRCkgewo+ICAgICArwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqBod2NhcHMubWFzayB8PSBTTk9SX0hXQ0FQU19SRUFEXzFfMV80Owo+ICAgICArCj4gICAgICvC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoGlmIChzcGktPm1vZGUgJiBTUElfVFhfUVVBRCkKPiAgICAg K8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgaHdjYXBzLm1hc2sgfD0gKFNOT1Jf SFdDQVBTX1JFQURfMV80XzQgfAo+ICAgICArwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBTTk9SX0hXQ0FQU19QUF8xXzFfNCB8Cj4gICAg ICvCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoFNOT1JfSFdDQVBTX1BQXzFfNF80KTsKPiAgICAgK8KgIMKgIMKgIMKgfSBlbHNlIGlmIChz cGktPm1vZGUgJiBTUElfUlhfRFVBTCkgewo+ICAgICArwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBo d2NhcHMubWFzayB8PSBTTk9SX0hXQ0FQU19SRUFEXzFfMV8yOwo+ICAgICArCj4gICAgICvCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoGlmIChzcGktPm1vZGUgJiBTUElfVFhfRFVBTCkKPiAgICAgK8Kg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgaHdjYXBzLm1hc2sgfD0gU05PUl9IV0NB UFNfUkVBRF8xXzJfMjsKPiAgICAgK8KgIMKgIMKgIMKgfQo+ICAgICArCj4gICAgICvCoCDCoCDC oCDCoGlmIChkYXRhICYmIGRhdGEtPm5hbWUpCj4gICAgICvCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oG5vci0+bXRkLm5hbWUgPGh0dHA6Ly9tdGQubmFtZT4gPSBkYXRhLT5uYW1lOwo+ICAgICArCj4g ICAgICvCoCDCoCDCoCDCoGlmICghbm9yLT5tdGQubmFtZSA8aHR0cDovL210ZC5uYW1lPikKPiAg ICAgK8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgbm9yLT5tdGQubmFtZSA8aHR0cDovL210ZC5uYW1l PiA9Cj4gICAgIHNwaV9tZW1fZ2V0X25hbWUoc3BpbWVtKTsKPiAgICAgKwo+ICAgICArwqAgwqAg wqAgwqAvKgo+ICAgICArwqAgwqAgwqAgwqAgKiBGb3Igc29tZSAoaGlzdG9yaWNhbD8pIHJlYXNv biBtYW55IHBsYXRmb3JtcyBwcm92aWRlIHR3bwo+ICAgICBkaWZmZXJlbnQKPiAgICAgK8KgIMKg IMKgIMKgICogbmFtZXMgaW4gZmxhc2hfcGxhdGZvcm1fZGF0YTogIm5hbWUiIGFuZCAidHlwZSIu IFF1aXRlCj4gICAgIG9mdGVuIG5hbWUgaXMKPiAgICAgK8KgIMKgIMKgIMKgICogc2V0IHRvICJt MjVwODAiIGFuZCB0aGVuICJ0eXBlIiBwcm92aWRlcyBhIHJlYWwgY2hpcCBuYW1lLgo+ICAgICAr wqAgwqAgwqAgwqAgKiBJZiB0aGF0J3MgdGhlIGNhc2UsIHJlc3BlY3QgInR5cGUiIGFuZCBpZ25v cmUgYSAibmFtZSIuCj4gICAgICvCoCDCoCDCoCDCoCAqLwo+ICAgICArwqAgwqAgwqAgwqBpZiAo ZGF0YSAmJiBkYXRhLT50eXBlKQo+ICAgICArwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBmbGFzaF9u YW1lID0gZGF0YS0+dHlwZTsKPiAgICAgK8KgIMKgIMKgIMKgZWxzZSBpZiAoIXN0cmNtcChzcGkt Pm1vZGFsaWFzLCAic3BpLW5vciIpKQo+ICAgICArwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBmbGFz aF9uYW1lID0gTlVMTDsgLyogYXV0by1kZXRlY3QgKi8KPiAgICAgK8KgIMKgIMKgIMKgZWxzZQo+ ICAgICArwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBmbGFzaF9uYW1lID0gc3BpLT5tb2RhbGlhczsK PiAgICAgKwo+ICAgICArwqAgwqAgwqAgwqByZXQgPSBzcGlfbm9yX3NjYW4obm9yLCBmbGFzaF9u YW1lLCAmaHdjYXBzKTsKPiAgICAgK8KgIMKgIMKgIMKgaWYgKHJldCkKPiAgICAgK8KgIMKgIMKg IMKgIMKgIMKgIMKgIMKgcmV0dXJuIHJldDsKPiAgICAgKwo+ICAgICArwqAgwqAgwqAgwqAvKgo+ ICAgICArwqAgwqAgwqAgwqAgKiBOb25lIG9mIHRoZSBleGlzdGluZyBwYXJ0cyBoYXZlID4gNTEy QiBwYWdlcywgYnV0IGxldCdzCj4gICAgIHBsYXkgc2FmZQo+ICAgICArwqAgwqAgwqAgwqAgKiBh bmQgYWRkIHRoaXMgbG9naWMgc28gdGhhdCBpZiBhbnlvbmUgZXZlciBhZGRzIHN1cHBvcnQKPiAg ICAgZm9yIHN1Y2gKPiAgICAgK8KgIMKgIMKgIMKgICogYSBOT1Igd2UgZG9uJ3QgZW5kIHVwIHdp dGggYnVmZmVyIG92ZXJmbG93cy4KPiAgICAgK8KgIMKgIMKgIMKgICovCj4gICAgICvCoCDCoCDC oCDCoGlmIChub3ItPnBhZ2Vfc2l6ZSA+IFBBR0VfU0laRSkgewo+ICAgICArwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqBub3ItPmJvdW5jZWJ1Zl9zaXplID0gbm9yLT5wYWdlX3NpemU7Cj4gICAgICvC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoGRldm1fa2ZyZWUobm9yLT5kZXYsIG5vci0+Ym91bmNlYnVm KTsKPiAgICAgK8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgbm9yLT5ib3VuY2VidWYgPSBkZXZtX2tt YWxsb2Mobm9yLT5kZXYsCj4gICAgICvCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoG5vci0+Ym91bmNlYnVmX3NpemUsCj4g ICAgICvCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoEdGUF9LRVJORUwpOwo+ICAgICArwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqBpZiAoIW5vci0+Ym91bmNlYnVmKQo+ICAgICArwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqByZXR1cm4gLUVOT01FTTsKPiAgICAgK8KgIMKgIMKgIMKgfQo+ICAgICArCj4gICAg ICvCoCDCoCDCoCDCoHJldHVybiBtdGRfZGV2aWNlX3JlZ2lzdGVyKCZub3ItPm10ZCwgZGF0YSA/ IGRhdGEtPnBhcnRzIDogTlVMTCwKPiAgICAgK8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIGRhdGEgPyBkYXRhLT5ucl9wYXJ0cyA6IDApOwo+ICAgICAr fQo+ICAgICArCj4gICAgICtzdGF0aWMgaW50IHNwaV9ub3JfcmVtb3ZlKHN0cnVjdCBzcGlfbWVt ICpzcGltZW0pCj4gICAgICt7Cj4gICAgICvCoCDCoCDCoCDCoHN0cnVjdCBzcGlfbm9yICpub3Ig PSBzcGlfbWVtX2dldF9kcnZkYXRhKHNwaW1lbSk7Cj4gICAgICsKPiAgICAgK8KgIMKgIMKgIMKg c3BpX25vcl9yZXN0b3JlKG5vcik7Cj4gICAgICsKPiAgICAgK8KgIMKgIMKgIMKgLyogQ2xlYW4g dXAgTVREIHN0dWZmLiAqLwo+ICAgICArwqAgwqAgwqAgwqByZXR1cm4gbXRkX2RldmljZV91bnJl Z2lzdGVyKCZub3ItPm10ZCk7Cj4gICAgICt9Cj4gICAgICsKPiAgICAgK3N0YXRpYyB2b2lkIHNw aV9ub3Jfc2h1dGRvd24oc3RydWN0IHNwaV9tZW0gKnNwaW1lbSkKPiAgICAgK3sKPiAgICAgK8Kg IMKgIMKgIMKgc3RydWN0IHNwaV9ub3IgKm5vciA9IHNwaV9tZW1fZ2V0X2RydmRhdGEoc3BpbWVt KTsKPiAgICAgKwo+ICAgICArwqAgwqAgwqAgwqBzcGlfbm9yX3Jlc3RvcmUobm9yKTsKPiAgICAg K30KPiAgICAgKwo+ICAgICArLyoKPiAgICAgKyAqIERvIE5PVCBhZGQgdG8gdGhpcyBhcnJheSB3 aXRob3V0IHJlYWRpbmcgdGhlIGZvbGxvd2luZzoKPiAgICAgKyAqCj4gICAgICsgKiBIaXN0b3Jp Y2FsbHksIG1hbnkgZmxhc2ggZGV2aWNlcyBhcmUgYm91bmQgdG8gdGhpcyBkcml2ZXIgYnkKPiAg ICAgdGhlaXIgbmFtZS4gQnV0Cj4gICAgICsgKiBzaW5jZSBtb3N0IG9mIHRoZXNlIGZsYXNoIGFy ZSBjb21wYXRpYmxlIHRvIHNvbWUgZXh0ZW50LCBhbmQgdGhlaXIKPiAgICAgKyAqIGRpZmZlcmVu Y2VzIGNhbiBvZnRlbiBiZSBkaWZmZXJlbnRpYXRlZCBieSB0aGUgSkVERUMgcmVhZC1JRAo+ICAg ICBjb21tYW5kLCB3ZQo+ICAgICArICogZW5jb3VyYWdlIG5ldyB1c2VycyB0byBhZGQgc3VwcG9y dCB0byB0aGUgc3BpLW5vciBsaWJyYXJ5LCBhbmQKPiAgICAgc2ltcGx5IGJpbmQKPiAgICAgKyAq IGFnYWluc3QgYSBnZW5lcmljIHN0cmluZyBoZXJlIChlLmcuLCAiamVkZWMsc3BpLW5vciIpLgo+ ICAgICArICoKPiAgICAgKyAqIE1hbnkgZmxhc2ggbmFtZXMgYXJlIGtlcHQgaGVyZSBpbiB0aGlz IGxpc3QgKGFzIHdlbGwgYXMgaW4KPiAgICAgc3BpLW5vci5jKSB0bwo+ICAgICArICoga2VlcCB0 aGVtIGF2YWlsYWJsZSBhcyBtb2R1bGUgYWxpYXNlcyBmb3IgZXhpc3RpbmcgcGxhdGZvcm1zLgo+ ICAgICArICovCj4gICAgICtzdGF0aWMgY29uc3Qgc3RydWN0IHNwaV9kZXZpY2VfaWQgc3BpX25v cl9kZXZfaWRzW10gPSB7Cj4gICAgICvCoCDCoCDCoCDCoC8qCj4gICAgICvCoCDCoCDCoCDCoCAq IEFsbG93IG5vbi1EVCBwbGF0Zm9ybSBkZXZpY2VzIHRvIGJpbmQgdG8gdGhlICJzcGktbm9yIgo+ ICAgICBtb2RhbGlhcywgYW5kCj4gICAgICvCoCDCoCDCoCDCoCAqIGhhY2sgYXJvdW5kIHRoZSBm YWN0IHRoYXQgdGhlIFNQSSBjb3JlIGRvZXMgbm90IHByb3ZpZGUKPiAgICAgdWV2ZW50Cj4gICAg ICvCoCDCoCDCoCDCoCAqIG1hdGNoaW5nIGZvciAub2ZfbWF0Y2hfdGFibGUKPiAgICAgK8KgIMKg IMKgIMKgICovCj4gICAgICvCoCDCoCDCoCDCoHsic3BpLW5vciJ9LAo+ICAgICArCj4gICAgICvC oCDCoCDCoCDCoC8qCj4gICAgICvCoCDCoCDCoCDCoCAqIEVudHJpZXMgbm90IHVzZWQgaW4gRFRz IHRoYXQgc2hvdWxkIGJlIHNhZmUgdG8gZHJvcCBhZnRlcgo+ICAgICByZXBsYWNpbmcKPiAgICAg K8KgIMKgIMKgIMKgICogdGhlbSB3aXRoICJzcGktbm9yIiBpbiBwbGF0Zm9ybSBkYXRhLgo+ICAg ICArwqAgwqAgwqAgwqAgKi8KPiAgICAgK8KgIMKgIMKgIMKgeyJzMjVzbDA2NGEifSzCoCB7Incy NXgxNiJ9LMKgIMKgIMKgeyJtMjVwMTAifSzCoCDCoCDCoHsibTI1cHg2NCJ9LAo+ICAgICArCj4g ICAgICvCoCDCoCDCoCDCoC8qCj4gICAgICvCoCDCoCDCoCDCoCAqIEVudHJpZXMgdGhhdCB3ZXJl IHVzZWQgaW4gRFRzIHdpdGhvdXQgImplZGVjLHNwaS1ub3IiCj4gICAgIGZhbGxiYWNrIGFuZAo+ ICAgICArwqAgwqAgwqAgwqAgKiBzaG91bGQgYmUga2VwdCBmb3IgYmFja3dhcmQgY29tcGF0aWJp bGl0eS4KPiAgICAgK8KgIMKgIMKgIMKgICovCj4gICAgICvCoCDCoCDCoCDCoHsiYXQyNWRmMzIx YSJ9LCB7ImF0MjVkZjY0MSJ9LMKgIHsiYXQyNmRmMDgxYSJ9LAo+ICAgICArwqAgwqAgwqAgwqB7 Im14MjVsNDAwNWEifSwgeyJteDI1bDE2MDZlIn0sIHsibXgyNWw2NDA1ZCJ9LCB7Im14MjVsMTI4 MDVkIn0sCj4gICAgICvCoCDCoCDCoCDCoHsibXgyNWwyNTYzNWUifSx7Im14NjZsNTEyMzVsIn0s Cj4gICAgICvCoCDCoCDCoCDCoHsibjI1cTA2NCJ9LMKgIMKgIHsibjI1cTEyOGExMSJ9LCB7Im4y NXExMjhhMTMifSwgeyJuMjVxNTEyYSJ9LAo+ICAgICArwqAgwqAgwqAgwqB7InMyNWZsMjU2czEi fSwgeyJzMjVmbDUxMnMifSzCoCB7InMyNXNsMTI4MDEifSwgeyJzMjVmbDAwOGsifSwKPiAgICAg K8KgIMKgIMKgIMKgeyJzMjVmbDA2NGsifSwKPiAgICAgK8KgIMKgIMKgIMKgeyJzc3QyNXZmMDQw YiJ9LHsic3N0MjV2ZjAxNmIifSx7InNzdDI1dmYwMzJiIn0seyJzc3QyNXdmMDQwIn0sCj4gICAg ICvCoCDCoCDCoCDCoHsibTI1cDQwIn0swqAgwqAgwqB7Im0yNXA4MCJ9LMKgIMKgIMKgeyJtMjVw MTYifSzCoCDCoCDCoHsibTI1cDMyIn0sCj4gICAgICvCoCDCoCDCoCDCoHsibTI1cDY0In0swqAg wqAgwqB7Im0yNXAxMjgifSwKPiAgICAgK8KgIMKgIMKgIMKgeyJ3MjV4ODAifSzCoCDCoCDCoHsi dzI1eDMyIn0swqAgwqAgwqB7IncyNXEzMiJ9LMKgIMKgIMKgeyJ3MjVxMzJkdyJ9LAo+ICAgICAr wqAgwqAgwqAgwqB7IncyNXE4MGJsIn0swqAgwqB7IncyNXExMjgifSzCoCDCoCB7IncyNXEyNTYi fSwKPiAgICAgKwo+ICAgICArwqAgwqAgwqAgwqAvKiBGbGFzaGVzIHRoYXQgY2FuJ3QgYmUgZGV0 ZWN0ZWQgdXNpbmcgSkVERUMgKi8KPiAgICAgK8KgIMKgIMKgIMKgeyJtMjVwMDUtbm9uamVkZWMi fSzCoCDCoCB7Im0yNXAxMC1ub25qZWRlYyJ9LMKgIMKgCj4gICAgIHsibTI1cDIwLW5vbmplZGVj In0sCj4gICAgICvCoCDCoCDCoCDCoHsibTI1cDQwLW5vbmplZGVjIn0swqAgwqAgeyJtMjVwODAt bm9uamVkZWMifSzCoCDCoAo+ICAgICB7Im0yNXAxNi1ub25qZWRlYyJ9LAo+ICAgICArwqAgwqAg wqAgwqB7Im0yNXAzMi1ub25qZWRlYyJ9LMKgIMKgIHsibTI1cDY0LW5vbmplZGVjIn0swqAgwqAK PiAgICAgeyJtMjVwMTI4LW5vbmplZGVjIn0sCj4gICAgICsKPiAgICAgK8KgIMKgIMKgIMKgLyog RXZlcnNwaW4gTVJBTXMgKG5vbi1KRURFQykgKi8KPiAgICAgK8KgIMKgIMKgIMKgeyAibXIyNWgx MjgiIH0sIC8qIDEyOCBLaWIsIDQwIE1IeiAqLwo+ICAgICArwqAgwqAgwqAgwqB7ICJtcjI1aDI1 NiIgfSwgLyogMjU2IEtpYiwgNDAgTUh6ICovCj4gICAgICvCoCDCoCDCoCDCoHsgIm1yMjVoMTAi IH0swqAgLyrCoCDCoDEgTWliLCA0MCBNSHogKi8KPiAgICAgK8KgIMKgIMKgIMKgeyAibXIyNWg0 MCIgfSzCoCAvKsKgIMKgNCBNaWIsIDQwIE1IeiAqLwo+ICAgICArCj4gICAgICvCoCDCoCDCoCDC oHsgfSwKPiAgICAgK307Cj4gICAgICtNT0RVTEVfREVWSUNFX1RBQkxFKHNwaSwgc3BpX25vcl9k ZXZfaWRzKTsKPiAgICAgKwo+ICAgICArc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQg c3BpX25vcl9vZl90YWJsZVtdID0gewo+ICAgICArwqAgwqAgwqAgwqAvKgo+ICAgICArwqAgwqAg wqAgwqAgKiBHZW5lcmljIGNvbXBhdGliaWxpdHkgZm9yIFNQSSBOT1IgdGhhdCBjYW4gYmUgaWRl bnRpZmllZAo+ICAgICBieSB0aGUKPiAgICAgK8KgIMKgIMKgIMKgICogSkVERUMgUkVBRCBJRCBv cGNvZGUgKDB4OUYpLiBVc2UgdGhpcywgaWYgcG9zc2libGUuCj4gICAgICvCoCDCoCDCoCDCoCAq Lwo+ICAgICArwqAgwqAgwqAgwqB7IC5jb21wYXRpYmxlID0gImplZGVjLHNwaS1ub3IiIH0sCj4g ICAgICvCoCDCoCDCoCDCoHsgLyogc2VudGluZWwgKi8gfSwKPiAgICAgK307Cj4gICAgICtNT0RV TEVfREVWSUNFX1RBQkxFKG9mLCBzcGlfbm9yX29mX3RhYmxlKTsKPiAgICAgKwo+ICAgICArLyoK PiAgICAgKyAqIFJFVklTSVQ6IG1hbnkgb2YgdGhlc2UgY2hpcHMgaGF2ZSBkZWVwIHBvd2VyLWRv d24gbW9kZXMsIHdoaWNoCj4gICAgICsgKiBzaG91bGQgY2xlYXJseSBiZSBlbnRlcmVkIG9uIHN1 c3BlbmQoKSB0byBtaW5pbWl6ZSBwb3dlciB1c2UuCj4gICAgICsgKiBBbmQgYWxzbyB3aGVuIHRo ZXkncmUgb3RoZXJ3aXNlIGlkbGUuLi4KPiAgICAgKyAqLwo+ICAgICArc3RhdGljIHN0cnVjdCBz cGlfbWVtX2RyaXZlciBzcGlfbm9yX2RyaXZlciA9IHsKPiAgICAgK8KgIMKgIMKgIMKgLnNwaWRy diA9IHsKPiAgICAgK8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgLmRyaXZlciA9IHsKPiAgICAgK8Kg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgLm5hbWUgPSAic3BpLW5vciIsCj4gICAg ICvCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoC5vZl9tYXRjaF90YWJsZSA9IHNw aV9ub3Jfb2ZfdGFibGUsCj4gICAgICvCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoH0sCj4gICAgICvC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoC5pZF90YWJsZSA9IHNwaV9ub3JfZGV2X2lkcywKPiAgICAg K8KgIMKgIMKgIMKgfSwKPiAgICAgK8KgIMKgIMKgIMKgLnByb2JlID0gc3BpX25vcl9wcm9iZSwK PiAgICAgK8KgIMKgIMKgIMKgLnJlbW92ZSA9IHNwaV9ub3JfcmVtb3ZlLAo+ICAgICArwqAgwqAg wqAgwqAuc2h1dGRvd24gPSBzcGlfbm9yX3NodXRkb3duLAo+ICAgICArfTsKPiAgICAgK21vZHVs ZV9zcGlfbWVtX2RyaXZlcihzcGlfbm9yX2RyaXZlcik7Cj4gICAgICsKPiAgICAgwqBNT0RVTEVf TElDRU5TRSgiR1BMIHYyIik7Cj4gICAgIMKgTU9EVUxFX0FVVEhPUigiSHVhbmcgU2hpamllIDxz aGlqaWU4QGdtYWlsLmNvbQo+ICAgICA8bWFpbHRvOnNoaWppZThAZ21haWwuY29tPj4iKTsKPiAg ICAgwqBNT0RVTEVfQVVUSE9SKCJNaWtlIExhdmVuZGVyIik7Cj4gICAgIGRpZmYgLS1naXQgYS9p bmNsdWRlL2xpbnV4L210ZC9zcGktbm9yLmggYi9pbmNsdWRlL2xpbnV4L210ZC9zcGktbm9yLmgK PiAgICAgaW5kZXggNmI1OTU2YTdhNjVhLi40ZjM1YjE4Nzc4ODkgMTAwNjQ0Cj4gICAgIC0tLSBh L2luY2x1ZGUvbGludXgvbXRkL3NwaS1ub3IuaAo+ICAgICArKysgYi9pbmNsdWRlL2xpbnV4L210 ZC9zcGktbm9yLmgKPiAgICAgQEAgLTksNiArOSw3IEBACj4gICAgIMKgI2luY2x1ZGUgPGxpbnV4 L2JpdG9wcy5oPgo+ICAgICDCoCNpbmNsdWRlIDxsaW51eC9tdGQvY2ZpLmg+Cj4gICAgIMKgI2lu Y2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KPiAgICAgKyNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLW1l bS5oPgo+IAo+ICAgICDCoC8qCj4gICAgIMKgICogTWFudWZhY3R1cmVyIElEcwo+ICAgICBAQCAt MzQ0LDYgKzM0NSw3IEBAIHN0cnVjdCBmbGFzaF9pbmZvOwo+ICAgICDCoCAqIEBtdGQ6wqAgwqAg wqAgwqAgwqAgwqAgwqAgwqBwb2ludCB0byBhIG10ZF9pbmZvIHN0cnVjdHVyZQo+ICAgICDCoCAq IEBsb2NrOsKgIMKgIMKgIMKgIMKgIMKgIMKgIHRoZSBsb2NrIGZvciB0aGUKPiAgICAgcmVhZC93 cml0ZS9lcmFzZS9sb2NrL3VubG9jayBvcGVyYXRpb25zCj4gICAgIMKgICogQGRldjrCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoHBvaW50IHRvIGEgc3BpIGRldmljZSwgb3IgYSBzcGkgbm9yCj4gICAg IGNvbnRyb2xsZXIgZGV2aWNlLgo+ICAgICArICogQHNwaW1lbTrCoCDCoCDCoCDCoCDCoCDCoCBw b2ludCB0byB0aGUgc3BpIG1lbSBkZXZpY2UKPiAgICAgwqAgKiBAYm91bmNlYnVmOsKgIMKgIMKg IMKgIMKgYm91bmNlIGJ1ZmZlciB1c2VkIHdoZW4gdGhlIGJ1ZmZlciBwYXNzZWQgYnkKPiAgICAg dGhlIE1URAo+ICAgICDCoCAqwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgbGF5ZXIg aXMgbm90IERNQS1hYmxlCj4gICAgIMKgICogQGJvdW5jZWJ1Zl9zaXplOsKgIMKgIHNpemUgb2Yg dGhlIGJvdW5jZSBidWZmZXIKPiAgICAgQEAgLTM4NCw2ICszODYsNyBAQCBzdHJ1Y3Qgc3BpX25v ciB7Cj4gICAgIMKgIMKgIMKgIMKgIHN0cnVjdCBtdGRfaW5mb8KgIMKgIMKgIMKgIMKgbXRkOwo+ ICAgICDCoCDCoCDCoCDCoCBzdHJ1Y3QgbXV0ZXjCoCDCoCDCoCDCoCDCoCDCoCBsb2NrOwo+ICAg ICDCoCDCoCDCoCDCoCBzdHJ1Y3QgZGV2aWNlwqAgwqAgwqAgwqAgwqAgwqAqZGV2Owo+ICAgICAr wqAgwqAgwqAgwqBzdHJ1Y3Qgc3BpX21lbcKgIMKgIMKgIMKgIMKgICpzcGltZW07Cj4gICAgIMKg IMKgIMKgIMKgIHU4wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgKmJvdW5jZWJ1ZjsK PiAgICAgwqAgwqAgwqAgwqAgc2l6ZV90wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgYm91bmNl YnVmX3NpemU7Cj4gICAgIMKgIMKgIMKgIMKgIGNvbnN0IHN0cnVjdCBmbGFzaF9pbmZvICppbmZv Owo+ICAgICAtLSAKPiAgICAgMi4yMi4wCj4gCj4gCj4gVGhhbmtzLAo+IAo+IFRvbWVywqAKCi0t IApSZWdhcmRzClZpZ25lc2gKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fXwpMaW51eCBNVEQgZGlzY3Vzc2lvbiBtYWlsaW5nIGxpc3QKaHR0cDov L2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1tdGQvCg==