From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from 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 smtp.lore.kernel.org (Postfix) with ESMTPS id 44933C7EE23 for ; Mon, 22 May 2023 14:15:04 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-ID:Subject:Cc:To:From:Date:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=QEvDkCGyohxy7OBmCcOMG0eARer4nJU7CzzwZiVVgWQ=; b=plXf8Werx8khNS NHKod5lLz4rw/iIh+zTFVPVXEtRLULOqN09v4PCSB2DHcD8uoTUdQ+ibRzlxB2c1TiwqZEKVSL+oX 3a17bcqHcWmceFdpmVljipuODybOv0VQS/Zttoa9qzgxLfHWL4AETMRcLTG23ouEpJieZw22fJ4mV xSpwof8G/TP1dmUWyIUrLUdzRn/kPaXuTJzXN18uYrlV/gjn6VCq4Tj3UHXpU2WVSlTkD/YtdRaEH hyVY/mTx2x8ozRXU87DYgPfL4bmSWrsIn6rdnLOjo5+1dQhpKMp9SxjzIa4UM5eJ61VKWuameAZTg /V4Jf7ChwO13ZdI18YRw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1q16JO-006nBS-04; Mon, 22 May 2023 14:14:58 +0000 Received: from relay2-d.mail.gandi.net ([2001:4b98:dc4:8::222]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1q16JJ-006n9E-1z for linux-mtd@lists.infradead.org; Mon, 22 May 2023 14:14:55 +0000 Received: (Authenticated sender: miquel.raynal@bootlin.com) by mail.gandi.net (Postfix) with ESMTPSA id E517440004; Mon, 22 May 2023 14:14:46 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=gm1; t=1684764889; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=e73NFB0LH5KzeW3SzDSh0SMfVYWak5UGN49zHTPP/gM=; b=LyUnlyWMLMc8Ho+cynrdVXFNrQBEcIXG4ktfDDyu392QRLvpkYLL9s8o06RyEXqw1ZvRJF OloNNsifgs7dWMb6pvdCkkyEIBPbcZksDFRrdQoSLJaYW6Dq8Uuc+UPBdn3Nrh+4A6SDV+ gQMlcaic5ce1lo+fOPgRyIOKUIPazAHnL1x63Zty5yHrgcBtbIT/r3Y8pHAHBrIAJ7DlpP F8v89mmB1YnkpiypBcZvpoBG80fnGZCvHnpJ0SM5pbQpmj81HSviJdijJif+vdBikLSLNc R4SOGctawrmzXZwbl99mCt4yXTbqCAHIoLmY3rS9IgYMmVPJquNJLuqvA6h4+Q== Date: Mon, 22 May 2023 16:14:46 +0200 From: Miquel Raynal To: Arseniy Krasnov Cc: Richard Weinberger , Vignesh Raghavendra , Sumit Semwal , Christian =?UTF-8?B?S8O2bmln?= , , , , , , , , Mason Yang , Boris Brezillon , Jaime Liao , Jaime Liao Subject: Re: [RESEND PATCH v3] mtd: rawnand: macronix: OTP access for MX30LFxG18AC Message-ID: <20230522161446.16d1f307@xps-13> In-Reply-To: References: <20230511152120.3297853-1-AVKrasnov@sberdevices.ru> Organization: Bootlin X-Mailer: Claws Mail 4.0.0 (GTK+ 3.24.33; x86_64-pc-linux-gnu) MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20230522_071453_955624_A00A135D X-CRM114-Status: GOOD ( 27.50 ) X-BeenThere: linux-mtd@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: Linux MTD discussion mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , 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 SGkgQXJzZW5peSwKCmF2a3Jhc25vdkBzYmVyZGV2aWNlcy5ydSB3cm90ZSBvbiBNb24sIDE1IE1h eSAyMDIzIDEyOjQ5OjUwICswMzAwOgoKPiBIZWxsbyBATWlxdWVsIQo+IAo+IFNvcnJ5LCBidXQg d2hvIGNvdWxkIHJldmlldyB0aGlzIHBhdGNoPyA6KSBJSVVDIHRoaXMgbG9naWMgaXMgdmVyeSBo dyBzcGVjaWZpYyBhbmQgd2UgbmVlZAo+IHNvbWVvbmUgd2hvIGtub3dzIGl0IHdlbGw/IEkgdGVz dGVkIHRoaXMgcGF0Y2ggb24gb3VyIGRldmljZXMgKHdpdGggYWxyZWFkeSBrbm93biBNZXNvbiBO QU5ECj4gY29udHJvbGxlcikuCgorIEphaW1lLCB3aG8gbWlnaHQgdGVzdAoKPiAKPiBUaGFua3Ms IEFyc2VuaXkKPiAKPiBPbiAxMS4wNS4yMDIzIDIxOjIxLCBBcnNlbml5IEtyYXNub3Ygd3JvdGU6 Cj4gPiBDYzogTWFzb24gWWFuZyA8bWFzb25jY3lhbmdAbXhpYy5jb20udHc+IGFuZCBCb3JpcyBC cmV6aWxsb24gPGJvcmlzLmJyZXppbGxvbkBjb2xsYWJvcmEuY29tPgo+ID4gCj4gPiBPbiAxMS4w NS4yMDIzIDE4OjIxLCBBcnNlbml5IEtyYXNub3Ygd3JvdGU6ICAKPiA+PiBUaGlzIGFkZHMgc3Vw cG9ydCBmb3IgT1RQIGFyZWEgYWNjZXNzIG9uIE1YMzBMRnhHMThBQyBjaGlwIHNlcmllcy4KPiA+ Pgo+ID4+IENoYW5nZWxvZzoKPiA+PiAgIHYxIC0+IHYyOgo+ID4+ICAgKiBBZGQgc2xhYi5oIGlu Y2x1ZGUgZHVlIHRvIGtlcm5lbCB0ZXN0IHJvYm90IGVycm9yLgo+ID4+ICAgdjIgLT4gdjM6Cj4g Pj4gICAqIFVzZSAndWludDY0X3QnIGFzIGlucHV0IGFyZ3VtZW50IGZvciAnZG9fZGl2KCknIGlu c3RlYWQKPiA+PiAgICAgb2YgJ3Vuc2lnbmVkIGxvbmcnIGR1ZSB0byBrZXJuZWwgdGVzdCByb2Jv dCBlcnJvci4KPiA+Pgo+ID4+IFNpZ25lZC1vZmYtYnk6IEFyc2VuaXkgS3Jhc25vdiA8QVZLcmFz bm92QHNiZXJkZXZpY2VzLnJ1Pgo+ID4+IC0tLQo+ID4+ICBkcml2ZXJzL210ZC9uYW5kL3Jhdy9u YW5kX21hY3Jvbml4LmMgfCAyMTMgKysrKysrKysrKysrKysrKysrKysrKysrKysrCj4gPj4gIDEg ZmlsZSBjaGFuZ2VkLCAyMTMgaW5zZXJ0aW9ucygrKQo+ID4+Cj4gPj4gZGlmZiAtLWdpdCBhL2Ry aXZlcnMvbXRkL25hbmQvcmF3L25hbmRfbWFjcm9uaXguYyBiL2RyaXZlcnMvbXRkL25hbmQvcmF3 L25hbmRfbWFjcm9uaXguYwo+ID4+IGluZGV4IDE0NzJmOTI1ZjM4Ni4uMjMwMWY5OTA2NzhlIDEw MDY0NAo+ID4+IC0tLSBhL2RyaXZlcnMvbXRkL25hbmQvcmF3L25hbmRfbWFjcm9uaXguYwo+ID4+ ICsrKyBiL2RyaXZlcnMvbXRkL25hbmQvcmF3L25hbmRfbWFjcm9uaXguYwo+ID4+IEBAIC02LDYg KzYsNyBAQAo+ID4+ICAgKiBBdXRob3I6IEJvcmlzIEJyZXppbGxvbiA8Ym9yaXMuYnJlemlsbG9u QGZyZWUtZWxlY3Ryb25zLmNvbT4KPiA+PiAgICovCj4gPj4gIAo+ID4+ICsjaW5jbHVkZSA8bGlu dXgvc2xhYi5oPgo+ID4+ICAjaW5jbHVkZSAibGludXgvZGVsYXkuaCIKPiA+PiAgI2luY2x1ZGUg ImludGVybmFscy5oIgo+ID4+ICAKPiA+PiBAQCAtMzEsNiArMzIsMjAgQEAKPiA+PiAgCj4gPj4g ICNkZWZpbmUgTVhJQ19DTURfUE9XRVJfRE9XTiAweEI5Cj4gPj4gIAo+ID4+ICsjZGVmaW5lIE9O RklfRkVBVFVSRV9BRERSXzMwTEZYRzE4QUNfT1RQCTB4OTAKPiA+PiArI2RlZmluZSBNQUNST05J WF8zMExGWEcxOEFDX09UUF9TVEFSVF9QQUdFCTAKPiA+PiArI2RlZmluZSBNQUNST05JWF8zMExG WEcxOEFDX09UUF9QQUdFUwkJMzAKPiA+PiArI2RlZmluZSBNQUNST05JWF8zMExGWEcxOEFDX09U UF9QQUdFX1NJWkUJMjExMgo+ID4+ICsjZGVmaW5lIE1BQ1JPTklYXzMwTEZYRzE4QUNfT1RQX1NU QVJUX0JZVEUJXAo+ID4+ICsJKE1BQ1JPTklYXzMwTEZYRzE4QUNfT1RQX1NUQVJUX1BBR0UgKglc Cj4gPj4gKwkgTUFDUk9OSVhfMzBMRlhHMThBQ19PVFBfUEFHRV9TSVpFKQo+ID4+ICsjZGVmaW5l IE1BQ1JPTklYXzMwTEZYRzE4QUNfT1RQX1NJWkVfQllURVMJXAo+ID4+ICsJKE1BQ1JPTklYXzMw TEZYRzE4QUNfT1RQX1BBR0VTICoJXAo+ID4+ICsJIE1BQ1JPTklYXzMwTEZYRzE4QUNfT1RQX1BB R0VfU0laRSkKPiA+PiArCj4gPj4gKyNkZWZpbmUgTUFDUk9OSVhfMzBMRlhHMThBQ19PVFBfRU4J CUJJVCgwKQo+ID4+ICsjZGVmaW5lIE1BQ1JPTklYXzMwTEZYRzE4QUNfT1RQX0xPQ0tFRAkJQklU KDEpCj4gPj4gKwo+ID4+ICBzdHJ1Y3QgbmFuZF9vbmZpX3ZlbmRvcl9tYWNyb25peCB7Cj4gPj4g IAl1OCByZXNlcnZlZDsKPiA+PiAgCXU4IHJlbGlhYmlsaXR5X2Z1bmM7Cj4gPj4gQEAgLTMxNiw2 ICszMzEsMjAzIEBAIHN0YXRpYyB2b2lkIG1hY3Jvbml4X25hbmRfZGVlcF9wb3dlcl9kb3duX3N1 cHBvcnQoc3RydWN0IG5hbmRfY2hpcCAqY2hpcCkKPiA+PiAgCWNoaXAtPm9wcy5yZXN1bWUgPSBt eGljX25hbmRfcmVzdW1lOwo+ID4+ICB9Cj4gPj4gIAo+ID4+ICtzdGF0aWMgaW50IG1hY3Jvbml4 XzMwbGZ4ZzE4YWNfZ2V0X290cF9pbmZvKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBzaXplX3QgbGVu LAo+ID4+ICsJCQkJCSAgICBzaXplX3QgKnJldGxlbiwKPiA+PiArCQkJCQkgICAgc3RydWN0IG90 cF9pbmZvICpidWYpCj4gPj4gK3sKPiA+PiArCWlmIChsZW4gPCBzaXplb2YoKmJ1ZikpCj4gPj4g KwkJcmV0dXJuIC1FSU5WQUw7Cj4gPj4gKwo+ID4+ICsJLyogRG9uJ3Qga25vdyBob3cgdG8gY2hl Y2sgdGhhdCBPVFAgaXMgbG9ja2VkLiAqLwoKSmFpbWUsIGFueSBpZGVhPwoKPiA+PiArCWJ1Zi0+ bG9ja2VkID0gMDsKPiA+PiArCWJ1Zi0+c3RhcnQgPSBNQUNST05JWF8zMExGWEcxOEFDX09UUF9T VEFSVF9CWVRFOwo+ID4+ICsJYnVmLT5sZW5ndGggPSBNQUNST05JWF8zMExGWEcxOEFDX09UUF9T SVpFX0JZVEVTOwo+ID4+ICsKPiA+PiArCSpyZXRsZW4gPSBzaXplb2YoKmJ1Zik7Cj4gPj4gKwo+ ID4+ICsJcmV0dXJuIDA7Cj4gPj4gK30KPiA+PiArCj4gPj4gK3N0YXRpYyBpbnQgbWFjcm9uaXhf MzBsZnhnMThhY19vdHBfZW5hYmxlKHN0cnVjdCBuYW5kX2NoaXAgKm5hbmQpCj4gPj4gK3sKPiA+ PiArCXVpbnQ4X3QgZmVhdHVyZV9idWZbT05GSV9TVUJGRUFUVVJFX1BBUkFNX0xFTl0gPSB7IDAg fTsKPiA+PiArCj4gPj4gKwlmZWF0dXJlX2J1ZlswXSA9IE1BQ1JPTklYXzMwTEZYRzE4QUNfT1RQ X0VOOwo+ID4+ICsJcmV0dXJuIG5hbmRfc2V0X2ZlYXR1cmVzKG5hbmQsIE9ORklfRkVBVFVSRV9B RERSXzMwTEZYRzE4QUNfT1RQLAo+ID4+ICsJCQkJIGZlYXR1cmVfYnVmKTsKPiA+PiArfQo+ID4+ ICsKPiA+PiArc3RhdGljIGludCBtYWNyb25peF8zMGxmeGcxOGFjX290cF9kaXNhYmxlKHN0cnVj dCBuYW5kX2NoaXAgKm5hbmQpCj4gPj4gK3sKPiA+PiArCXVpbnQ4X3QgZmVhdHVyZV9idWZbT05G SV9TVUJGRUFUVVJFX1BBUkFNX0xFTl0gPSB7IDAgfTsKPiA+PiArCj4gPj4gKwlyZXR1cm4gbmFu ZF9zZXRfZmVhdHVyZXMobmFuZCwgT05GSV9GRUFUVVJFX0FERFJfMzBMRlhHMThBQ19PVFAsCj4g Pj4gKwkJCQkgZmVhdHVyZV9idWYpOwo+ID4+ICt9Cj4gPj4gKwo+ID4+ICtzdGF0aWMgaW50IF9f bWFjcm9uaXhfMzBsZnhnMThhY19yd19vdHAoc3RydWN0IG10ZF9pbmZvICptdGQsCj4gPj4gKwkJ CQkJbG9mZl90IG9mZnNfaW5fZmxhc2gsCj4gPj4gKwkJCQkJc2l6ZV90IGxlbiwgc2l6ZV90ICpy ZXRsZW4sCj4gPj4gKwkJCQkJdV9jaGFyICpidWYsIGJvb2wgd3JpdGUpCj4gPj4gK3sKPiA+PiAr CXN0cnVjdCBuYW5kX2NoaXAgKm5hbmQ7Cj4gPj4gKwlzaXplX3QgYnl0ZXNfaGFuZGxlZDsKPiA+ PiArCW9mZl90IG9mZnNfaW5fcGFnZTsKPiA+PiArCXVpbnQ2NF90IHBhZ2U7Cj4gPj4gKwl2b2lk ICpkbWFfYnVmOwo+ID4+ICsJaW50IHJldDsKPiA+PiArCj4gPj4gKwkvKiAnbmFuZF9wcm9nL3Jl YWRfcGFnZV9vcCgpJyBtYXkgdXNlICdidWYnIGFzIERNQSBidWZmZXIsCj4gPj4gKwkgKiBzbyBh bGxvY2F0ZSBwcm9wZXJseSBhbGlnbmVkIG1lbW9yeSBmb3IgaXQuIFRoaXMgaXMKPiA+PiArCSAq IG5lZWRlZCBiZWNhdXNlIGNyb3NzIHBhZ2UgYWNjZXNzZXMgbWF5IGxlYWQgdG8gdW5hbGlnbmVk Cj4gPj4gKwkgKiBidWZmZXIgYWRkcmVzcyBmb3IgRE1BLgo+ID4+ICsJICovCj4gPj4gKwlkbWFf YnVmID0ga21hbGxvYyhNQUNST05JWF8zMExGWEcxOEFDX09UUF9QQUdFX1NJWkUsIEdGUF9LRVJO RUwpOwo+ID4+ICsJaWYgKCFkbWFfYnVmKQo+ID4+ICsJCXJldHVybiAtRU5PTUVNOwo+ID4+ICsK PiA+PiArCW5hbmQgPSBtdGRfdG9fbmFuZChtdGQpOwo+ID4+ICsJbmFuZF9zZWxlY3RfdGFyZ2V0 KG5hbmQsIDApOwo+ID4+ICsKPiA+PiArCXJldCA9IG1hY3Jvbml4XzMwbGZ4ZzE4YWNfb3RwX2Vu YWJsZShuYW5kKTsKPiA+PiArCWlmIChyZXQpCj4gPj4gKwkJZ290byBvdXRfb3RwOwo+ID4+ICsK PiA+PiArCXBhZ2UgPSBvZmZzX2luX2ZsYXNoOwo+ID4+ICsJLyogJ3BhZ2UnIHdpbGwgYmUgcmVz dWx0IG9mIGRpdmlzaW9uLiAqLwo+ID4+ICsJb2Zmc19pbl9wYWdlID0gZG9fZGl2KHBhZ2UsIE1B Q1JPTklYXzMwTEZYRzE4QUNfT1RQX1BBR0VfU0laRSk7Cj4gPj4gKwlieXRlc19oYW5kbGVkID0g MDsKPiA+PiArCj4gPj4gKwl3aGlsZSAoYnl0ZXNfaGFuZGxlZCA8IGxlbiAmJgo+ID4+ICsJICAg ICAgIHBhZ2UgPCBNQUNST05JWF8zMExGWEcxOEFDX09UUF9QQUdFUykgewo+ID4+ICsJCXNpemVf dCBieXRlc190b19oYW5kbGU7Cj4gPj4gKwo+ID4+ICsJCWJ5dGVzX3RvX2hhbmRsZSA9IG1pbl90 KHNpemVfdCwgbGVuIC0gYnl0ZXNfaGFuZGxlZCwKPiA+PiArCQkJCQlNQUNST05JWF8zMExGWEcx OEFDX09UUF9QQUdFX1NJWkUgLQo+ID4+ICsJCQkJCW9mZnNfaW5fcGFnZSk7Cj4gPj4gKwo+ID4+ ICsJCWlmICh3cml0ZSkgewo+ID4+ICsJCQltZW1jcHkoZG1hX2J1ZiwgJmJ1ZltieXRlc19oYW5k bGVkXSwgYnl0ZXNfdG9faGFuZGxlKTsKPiA+PiArCQkJcmV0ID0gbmFuZF9wcm9nX3BhZ2Vfb3Ao bmFuZCwgcGFnZSwgb2Zmc19pbl9wYWdlLAo+ID4+ICsJCQkJCQlkbWFfYnVmLCBieXRlc190b19o YW5kbGUpOwo+ID4+ICsJCX0gZWxzZSB7Cj4gPj4gKwkJCXJldCA9IG5hbmRfcmVhZF9wYWdlX29w KG5hbmQsIHBhZ2UsIG9mZnNfaW5fcGFnZSwKPiA+PiArCQkJCQkJZG1hX2J1ZiwgYnl0ZXNfdG9f aGFuZGxlKTsKPiA+PiArCQkJaWYgKCFyZXQpCj4gPj4gKwkJCQltZW1jcHkoJmJ1ZltieXRlc19o YW5kbGVkXSwgZG1hX2J1ZiwKPiA+PiArCQkJCSAgICAgICBieXRlc190b19oYW5kbGUpOwo+ID4+ ICsJCX0KPiA+PiArCQlpZiAocmV0KQo+ID4+ICsJCQlnb3RvIG91dF9vdHA7Cj4gPj4gKwo+ID4+ ICsJCWJ5dGVzX2hhbmRsZWQgKz0gYnl0ZXNfdG9faGFuZGxlOwo+ID4+ICsJCW9mZnNfaW5fcGFn ZSA9IDA7Cj4gPj4gKwkJcGFnZSsrOwo+ID4+ICsJfQo+ID4+ICsKPiA+PiArCSpyZXRsZW4gPSBi eXRlc19oYW5kbGVkOwo+ID4+ICsKPiA+PiArb3V0X290cDoKPiA+PiArCWlmIChyZXQpCj4gPj4g KwkJZGV2X2VycigmbXRkLT5kZXYsICJmYWlsZWQgdG8gcGVyZm9ybSBPVFAgSU86ICVpXG4iLCBy ZXQpOwo+ID4+ICsKPiA+PiArCXJldCA9IG1hY3Jvbml4XzMwbGZ4ZzE4YWNfb3RwX2Rpc2FibGUo bmFuZCk7Cj4gPj4gKwlXQVJOKHJldCwgImZhaWxlZCB0byBsZWF2ZSBPVFAgbW9kZSBhZnRlciAl c1xuIiwKPiA+PiArCSAgICAgd3JpdGUgPyAid3JpdGUiIDogInJlYWQiKTsKCkxldCdzIGF2b2lk IFdBUk4oKSBjYWxscyAobm9uZSBpbiB0aGlzIGRyaXZlciBhcmUgcmVsZXZhbnQgSU1ITykuIEp1 c3QgYQpkZXZfZXJyKCkgc2hvdWxkIGJlIGVub3VnaC4KCj4gPj4gKwluYW5kX2Rlc2VsZWN0X3Rh cmdldChuYW5kKTsKPiA+PiArCWtmcmVlKGRtYV9idWYpOwo+ID4+ICsKPiA+PiArCXJldHVybiBy ZXQ7Cj4gPj4gK30KPiA+PiArCj4gPj4gK3N0YXRpYyBpbnQgbWFjcm9uaXhfMzBsZnhnMThhY193 cml0ZV9vdHAoc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCB0bywKPiA+PiArCQkJCQkgc2l6 ZV90IGxlbiwgc2l6ZV90ICpybGVuLAo+ID4+ICsJCQkJCSBjb25zdCB1X2NoYXIgKmJ1ZikKPiA+ PiArewo+ID4+ICsJcmV0dXJuIF9fbWFjcm9uaXhfMzBsZnhnMThhY19yd19vdHAobXRkLCB0bywg bGVuLCBybGVuLCAodV9jaGFyICopYnVmLAo+ID4+ICsJCQkJCSAgICB0cnVlKTsKPiA+PiArfQo+ ID4+ICsKPiA+PiArc3RhdGljIGludCBtYWNyb25peF8zMGxmeGcxOGFjX3JlYWRfb3RwKHN0cnVj dCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3QgZnJvbSwKPiA+PiArCQkJCQlzaXplX3QgbGVuLCBzaXpl X3QgKnJsZW4sCj4gPj4gKwkJCQkJdV9jaGFyICpidWYpCj4gPj4gK3sKPiA+PiArCXJldHVybiBf X21hY3Jvbml4XzMwbGZ4ZzE4YWNfcndfb3RwKG10ZCwgZnJvbSwgbGVuLCBybGVuLCBidWYsIGZh bHNlKTsKPiA+PiArfQo+ID4+ICsKPiA+PiArc3RhdGljIGludCBtYWNyb25peF8zMGxmeGcxOGFj X2xvY2tfb3RwKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3QgZnJvbSwKPiA+PiArCQkJCQlz aXplX3QgbGVuKQo+ID4+ICt7Cj4gPj4gKwl1aW50OF90IGZlYXR1cmVfYnVmW09ORklfU1VCRkVB VFVSRV9QQVJBTV9MRU5dID0geyAwIH07Cj4gPj4gKwlzdHJ1Y3QgbmFuZF9jaGlwICpuYW5kOwo+ ID4+ICsJaW50IHJldDsKPiA+PiArCj4gPj4gKwlpZiAoZnJvbSAhPSBNQUNST05JWF8zMExGWEcx OEFDX09UUF9TVEFSVF9CWVRFIHx8Cj4gPj4gKwkgICAgbGVuICE9IE1BQ1JPTklYXzMwTEZYRzE4 QUNfT1RQX1NJWkVfQllURVMpCj4gPj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gPj4gKwo+ID4+ICsJ ZGV2X2RiZygmbXRkLT5kZXYsICJsb2NraW5nIE9UUFxuIik7Cj4gPj4gKwo+ID4+ICsJbmFuZCA9 IG10ZF90b19uYW5kKG10ZCk7Cj4gPj4gKwluYW5kX3NlbGVjdF90YXJnZXQobmFuZCwgMCk7Cj4g Pj4gKwo+ID4+ICsJZmVhdHVyZV9idWZbMF0gPSBNQUNST05JWF8zMExGWEcxOEFDX09UUF9FTiB8 Cj4gPj4gKwkJCSBNQUNST05JWF8zMExGWEcxOEFDX09UUF9MT0NLRUQ7Cj4gPj4gKwlyZXQgPSBu YW5kX3NldF9mZWF0dXJlcyhuYW5kLCBPTkZJX0ZFQVRVUkVfQUREUl8zMExGWEcxOEFDX09UUCwK PiA+PiArCQkJCWZlYXR1cmVfYnVmKTsKPiA+PiArCWlmIChyZXQpIHsKPiA+PiArCQlkZXZfZXJy KCZtdGQtPmRldiwKPiA+PiArCQkJImZhaWxlZCB0byBsb2NrIE9UUCAoc2V0IGZlYXR1cmVzKTog JWlcbiIsIHJldCk7Cj4gPj4gKwkJbmFuZF9kZXNlbGVjdF90YXJnZXQobmFuZCk7Cj4gPj4gKwkJ cmV0dXJuIHJldDsKPiA+PiArCX0KPiA+PiArCj4gPj4gKwkvKiBEbyBkdW1teSBwYWdlIHByb2cg d2l0aCB6ZXJvIGFkZHJlc3MuICovCj4gPj4gKwlmZWF0dXJlX2J1ZlswXSA9IDA7Cj4gPj4gKwly ZXQgPSBuYW5kX3Byb2dfcGFnZV9vcChuYW5kLCAwLCAwLCBmZWF0dXJlX2J1ZiwgMSk7Cj4gPj4g KwlpZiAocmV0KQo+ID4+ICsJCWRldl9lcnIoJm10ZC0+ZGV2LAo+ID4+ICsJCQkiZmFpbGVkIHRv IGxvY2sgT1RQIChwYWdlIHByb2cpOiAlaVxuIiwgcmV0KTsKPiA+PiArCj4gPj4gKwlyZXQgPSBt YWNyb25peF8zMGxmeGcxOGFjX290cF9kaXNhYmxlKG5hbmQpOwo+ID4+ICsJV0FSTihyZXQsICJm YWlsZWQgdG8gbGVhdmUgT1RQIG1vZGUgYWZ0ZXIgbG9ja1xuIik7Cj4gPj4gKwo+ID4+ICsJbmFu ZF9kZXNlbGVjdF90YXJnZXQobmFuZCk7Cj4gPj4gKwo+ID4+ICsJcmV0dXJuIHJldDsKPiA+PiAr fQo+ID4+ICsKPiA+PiArc3RhdGljIHZvaWQgbWFjcm9uaXhfbmFuZF9zZXR1cF9vdHAoc3RydWN0 IG5hbmRfY2hpcCAqY2hpcCkKPiA+PiArewo+ID4+ICsJc3RhdGljIGNvbnN0IGNoYXIgKiBjb25z dCBzdXBwb3J0ZWRfb3RwX21vZGVsc1tdID0gewo+ID4+ICsJCSJNWDMwTEYxRzE4QUMiLAo+ID4+ ICsJCSJNWDMwTEYyRzE4QUMiLAo+ID4+ICsJCSJNWDMwTEY0RzE4QUMiLAo+ID4+ICsJfTsKPiA+ PiArCXN0cnVjdCBtdGRfaW5mbyAqbXRkOwo+ID4+ICsKPiA+PiArCWlmICghY2hpcC0+cGFyYW1l dGVycy5zdXBwb3J0c19zZXRfZ2V0X2ZlYXR1cmVzKQo+ID4+ICsJCXJldHVybjsKPiA+PiArCj4g Pj4gKwlpZiAobWF0Y2hfc3RyaW5nKHN1cHBvcnRlZF9vdHBfbW9kZWxzLAo+ID4+ICsJCQkgQVJS QVlfU0laRShzdXBwb3J0ZWRfb3RwX21vZGVscyksCj4gPj4gKwkJCSBjaGlwLT5wYXJhbWV0ZXJz Lm1vZGVsKSA8IDApCj4gPj4gKwkJcmV0dXJuOwoKSSB3b3VsZCBzdGFydCBieSBjaGVja2luZyB0 aGUgbW9kZWwsIHRoZW4gaXQncyBsaXN0IG9mIHN1cHBvcnRlZCBvcHMuCgo+ID4+ICsKPiA+PiAr CWJpdG1hcF9zZXQoY2hpcC0+cGFyYW1ldGVycy5nZXRfZmVhdHVyZV9saXN0LAo+ID4+ICsJCSAg IE9ORklfRkVBVFVSRV9BRERSXzMwTEZYRzE4QUNfT1RQLCAxKTsKPiA+PiArCWJpdG1hcF9zZXQo Y2hpcC0+cGFyYW1ldGVycy5zZXRfZmVhdHVyZV9saXN0LAo+ID4+ICsJCSAgIE9ORklfRkVBVFVS RV9BRERSXzMwTEZYRzE4QUNfT1RQLCAxKTsKPiA+PiArCj4gPj4gKwltdGQgPSBuYW5kX3RvX210 ZChjaGlwKTsKPiA+PiArCW10ZC0+X2dldF9mYWN0X3Byb3RfaW5mbyA9IG1hY3Jvbml4XzMwbGZ4 ZzE4YWNfZ2V0X290cF9pbmZvOwo+ID4+ICsJbXRkLT5fcmVhZF9mYWN0X3Byb3RfcmVnID0gbWFj cm9uaXhfMzBsZnhnMThhY19yZWFkX290cDsKPiA+PiArCW10ZC0+X2dldF91c2VyX3Byb3RfaW5m byA9IG1hY3Jvbml4XzMwbGZ4ZzE4YWNfZ2V0X290cF9pbmZvOwo+ID4+ICsJbXRkLT5fcmVhZF91 c2VyX3Byb3RfcmVnID0gbWFjcm9uaXhfMzBsZnhnMThhY19yZWFkX290cDsKPiA+PiArCW10ZC0+ X3dyaXRlX3VzZXJfcHJvdF9yZWcgPSBtYWNyb25peF8zMGxmeGcxOGFjX3dyaXRlX290cDsKPiA+ PiArCW10ZC0+X2xvY2tfdXNlcl9wcm90X3JlZyA9IG1hY3Jvbml4XzMwbGZ4ZzE4YWNfbG9ja19v dHA7Cj4gPj4gK30KPiA+PiArCj4gPj4gIHN0YXRpYyBpbnQgbWFjcm9uaXhfbmFuZF9pbml0KHN0 cnVjdCBuYW5kX2NoaXAgKmNoaXApCj4gPj4gIHsKPiA+PiAgCWlmIChuYW5kX2lzX3NsYyhjaGlw KSkKPiA+PiBAQCAtMzI1LDYgKzUzNyw3IEBAIHN0YXRpYyBpbnQgbWFjcm9uaXhfbmFuZF9pbml0 KHN0cnVjdCBuYW5kX2NoaXAgKmNoaXApCj4gPj4gIAltYWNyb25peF9uYW5kX29uZmlfaW5pdChj aGlwKTsKPiA+PiAgCW1hY3Jvbml4X25hbmRfYmxvY2tfcHJvdGVjdGlvbl9zdXBwb3J0KGNoaXAp Owo+ID4+ICAJbWFjcm9uaXhfbmFuZF9kZWVwX3Bvd2VyX2Rvd25fc3VwcG9ydChjaGlwKTsKPiA+ PiArCW1hY3Jvbml4X25hbmRfc2V0dXBfb3RwKGNoaXApOwo+ID4+ICAKPiA+PiAgCXJldHVybiAw Owo+ID4+ICB9ICAKCgpUaGFua3MsCk1pcXXDqGwKCl9fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fXwpMaW51eCBNVEQgZGlzY3Vzc2lvbiBtYWlsaW5n IGxpc3QKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1t dGQvCg==