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,USER_AGENT_SANE_2 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 BA21CC28CBC for ; Sun, 3 May 2020 16:36:47 +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 8062520663 for ; Sun, 3 May 2020 16:36:47 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="t0u/3ceA" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 8062520663 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=bootlin.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:MIME-Version:References:In-Reply-To: Message-ID:Subject: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=PHYVXpuuaE5+7k/pyJf7gfLBcTtWcqL1fNwI6HTEGCw=; b=t0u/3ceAmexOmH Ba2J4H8qL4nQCJikIlzVP/eK2nJ05xSEu73FtFrO12+DtyjRchmalHt45Lkw+mcy4bq7Th8I76Mt3 N/Sfn6gB3Z4lP0sYb1PiHb1gtkiddUCFy2ETezYmUFuvKJDLXPd255gR4Sdtm+vyBcFnUr+TKLDf6 +fDiawHFUWvmDr8pgBbFVBczpoGBktg23amKy+TqF0W1LrlC28bdGXiis+33sEQZRpIgKAF/PPSbw kNZKhfE3VYNRcRvoKRsEtYng825Kjk90+6iq0c2PhII/+CNMxPu7oJ0I4mFv0g5MZqsm9IdBi9epy 86AM2j2LR22Xq7cYLW/w==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1jVHbO-0000xW-DC; Sun, 03 May 2020 16:36:26 +0000 Received: from relay9-d.mail.gandi.net ([217.70.183.199]) by bombadil.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1jVHbK-0000wA-Mr for linux-mtd@lists.infradead.org; Sun, 03 May 2020 16:36:24 +0000 X-Originating-IP: 91.224.148.103 Received: from xps13 (unknown [91.224.148.103]) (Authenticated sender: miquel.raynal@bootlin.com) by relay9-d.mail.gandi.net (Postfix) with ESMTPSA id 89F85FF803; Sun, 3 May 2020 16:36:17 +0000 (UTC) Date: Sun, 3 May 2020 18:36:16 +0200 From: Miquel Raynal To: Steve deRosier Subject: Re: [PATCH v2 3/3] mtd: rawnand: micron: Address the shallow erase issue Message-ID: <20200503183616.2a8a8d6a@xps13> In-Reply-To: References: <20200503114029.30257-1-miquel.raynal@bootlin.com> <20200503114029.30257-4-miquel.raynal@bootlin.com> Organization: Bootlin X-Mailer: Claws Mail 3.17.4 (GTK+ 2.24.32; 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-20200503_093623_019901_034F134F X-CRM114-Status: GOOD ( 38.32 ) 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: Vignesh Raghavendra , Tudor Ambarus , Richard Weinberger , Zoltan Szubbocsev , linux-mtd , Thomas Petazzoni , Boris Brezillon , tglx@linutronix.de, Piotr Wojtaszczyk , Bean Huo 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 SGkgU3RldmUsCgpTdGV2ZSBkZVJvc2llciA8ZGVyb3NpZXJAZ21haWwuY29tPiB3cm90ZSBvbiBT dW4sIDMgTWF5IDIwMjAgMDk6MTA6MTUKLTA3MDA6Cgo+IE9uIFN1biwgTWF5IDMsIDIwMjAgYXQg NDo0MSBBTSBNaXF1ZWwgUmF5bmFsIDxtaXF1ZWwucmF5bmFsQGJvb3RsaW4uY29tPiB3cm90ZToK PiA+Cj4gPiBXaXRoIHJlY2VudCBTTEMgTkFORHMsIE1pY3JvbiBhZG1pdHMgdGhhdCBhICJzaGFs bG93IGVyYXNlIiBpc3N1ZSBtYXkKPiA+IGJlIG9ic2VydmFibGUuIEl0IGlzIGFjdHVhbGx5IHRo ZSBjaGlwIGl0c2VsZiBub3QgZG9pbmcgYSBjb3JyZWN0Cj4gPiBlcmFzZSBvcGVyYXRpb24gYmVj YXVzZSBvZiBpdHMgaW50ZXJuYWwgbWFjaGluZXJ5IHN0YXRpbmcgdGhhdCB0aGUKPiA+IHBhZ2Vz IGhhdmUgbm90IGJlZW4gcHJvZ3JhbW1lZC4gTWljcm9uIHRvbGQgdXMgdGhhdCB0aGVyZSBpcyBh IHdheSB0bwo+ID4gd29ya2Fyb3VuZCB0aGlzIGlzc3VlOiBlbnN1cmUgdGhhdCBhbGwgdGhlIG9k ZCBwYWdlcyBpbiB0aGUgMTYgZmlyc3QKPiA+IG9uZXMgb2YgZWFjaCBibG9jayB0byBlcmFzZSBo YXZlIGJlZW4gZnVsbHkgd3JpdHRlbi4KPiA+Cj4gPiBUbyBhdm9pZCBhIHZlcnkgYmlnIHBlcmZv cm1hbmNlIGRyYXdiYWNrIGJ5IHJlLXdyaXR0aW5nIGFsbCB0aGUgcGFnZXMKPiA+IGZvciBlYWNo IGVyYXNlIG9wZXJhdGlvbiwgdGhlIGZpeCBwcm9wb3NlZCBoZXJlIG92ZXJsb2FkcyB0aGUgLT5l cmFzZQo+ID4gYW5kIC0+d3JpdGVfb29iIGhvb2tzIHRvIGNvdW50IHRoZSBwYWdlcyBhY3R1YWxs eSB3cml0dGVuIGF0IHJ1bnRpbWUKPiA+IGFuZCBhdm9pZCByZS13cml0dGluZyB0aGVtIGlmIG5v dCBuZWVkZWQuCj4gPgo+ID4gU2lnbmVkLW9mZi1ieTogTWlxdWVsIFJheW5hbCA8bWlxdWVsLnJh eW5hbEBib290bGluLmNvbT4KPiA+IC0tLQo+ID4gIGRyaXZlcnMvbXRkL25hbmQvcmF3L25hbmRf bWljcm9uLmMgfCAxMjEgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKPiA+ICAxIGZpbGUg Y2hhbmdlZCwgMTIxIGluc2VydGlvbnMoKykKPiA+Cj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9t dGQvbmFuZC9yYXcvbmFuZF9taWNyb24uYyBiL2RyaXZlcnMvbXRkL25hbmQvcmF3L25hbmRfbWlj cm9uLmMKPiA+IGluZGV4IDU2NjU0MDMwZWM3Zi4uYTlhZmQxYjlhOWU4IDEwMDY0NAo+ID4gLS0t IGEvZHJpdmVycy9tdGQvbmFuZC9yYXcvbmFuZF9taWNyb24uYwo+ID4gKysrIGIvZHJpdmVycy9t dGQvbmFuZC9yYXcvbmFuZF9taWNyb24uYwo+ID4gQEAgLTM2LDYgKzM2LDE1IEBACj4gPiAgI2Rl ZmluZSBOQU5EX0VDQ19TVEFUVVNfMV8zX0NPUlJFQ1RFRCAgQklUKDQpCj4gPiAgI2RlZmluZSBO QU5EX0VDQ19TVEFUVVNfN184X0NPUlJFQ1RFRCAgKEJJVCg0KSB8IEJJVCgzKSkKPiA+Cj4gPiAr LyoKPiA+ICsgKiBNaWNyb24gU0xDIGNoaXBzIGFyZSBzdWJqZWN0IHRvIGEgc2hhbGxvdyBlcmFz ZSBpc3N1ZTogaWYgdGhlIGZpcnN0Cj4gPiArICogcGFnZXMgb2YgYSBibG9jayBoYXZlIG5vdCBl bm91Z2ggYnl0ZXMgcHJvZ3JhbW1lZCwgdGhlIGludGVybmFsCj4gPiArICogbWFjaGluZXJ5IG1p Z2h0IGRlY2xhcmUgdGhlIGJsb2NrIGVtcHR5IGFuZCBza2lwIHRoZSBhY3R1YWwgZXJhc2UKPiA+ ICsgKiBvcGVyYXRpb24uIFRoaXMgaXMgdGhlIG51bWJlciBvZiBwYWdlcyB3ZSBjaGVjayBieSBz b2Z0d2FyZS4KPiA+ICsgKi8KPiA+ICsjZGVmaW5lIE1JQ1JPTl9TSEFMTE9XX0VSQVNFX01JTl9Q QUdFIDE2Cj4gPiArI2RlZmluZSBNSUNST05fUEFHRV9NQVNLX1RSSUdHRVIgR0VOTUFTSyhNSUNS T05fU0hBTExPV19FUkFTRV9NSU5fUEFHRSwgMCkKPiA+ICsKPiA+ICBzdHJ1Y3QgbmFuZF9vbmZp X3ZlbmRvcl9taWNyb24gewo+ID4gICAgICAgICB1OCB0d29fcGxhbmVfcmVhZDsKPiA+ICAgICAg ICAgdTggcmVhZF9jYWNoZTsKPiA+IEBAIC02NCw2ICs3Myw3IEBAIHN0cnVjdCBtaWNyb25fb25f ZGllX2VjYyB7Cj4gPgo+ID4gIHN0cnVjdCBtaWNyb25fbmFuZCB7Cj4gPiAgICAgICAgIHN0cnVj dCBtaWNyb25fb25fZGllX2VjYyBlY2M7Cj4gPiArICAgICAgIHUxNiAqd3JpdHRlbnA7Cj4gPiAg fTsKPiA+Cj4gPiAgc3RhdGljIGludCBtaWNyb25fbmFuZF9zZXR1cF9yZWFkX3JldHJ5KHN0cnVj dCBuYW5kX2NoaXAgKmNoaXAsIGludCByZXRyeV9tb2RlKQo+ID4gQEAgLTQyOSw2ICs0MzksMTA2 IEBAIHN0YXRpYyBpbnQgbWljcm9uX3N1cHBvcnRzX29uX2RpZV9lY2Moc3RydWN0IG5hbmRfY2hp cCAqY2hpcCkKPiA+ICAgICAgICAgcmV0dXJuIE1JQ1JPTl9PTl9ESUVfU1VQUE9SVEVEOwo+ID4g IH0KPiA+Cj4gPiArc3RhdGljIGludCBtaWNyb25fbmFuZF9hdm9pZF9zaGFsbG93X2VyYXNlKHN0 cnVjdCBuYW5kX2NoaXAgKmNoaXAsCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgdW5zaWduZWQgaW50IGViKQo+ID4gK3sKPiA+ICsgICAgICAgc3RydWN0IG1p Y3Jvbl9uYW5kICptaWNyb24gPSBuYW5kX2dldF9tYW51ZmFjdHVyZXJfZGF0YShjaGlwKTsKPiA+ ICsgICAgICAgdW5zaWduZWQgaW50IHBhZ2UgPSBlYiAqIG5hbmRkZXZfcGFnZXNfcGVyX2VyYXNl YmxvY2soJmNoaXAtPmJhc2UpOwo+ID4gKyAgICAgICB1OCAqZGF0YWJ1ZiA9IG5hbmRfZ2V0X2Rh dGFfYnVmKGNoaXApOwo+ID4gKyAgICAgICBpbnQgcmV0LCBpOwo+ID4gKwo+ID4gKyAgICAgICBt ZW1zZXQoZGF0YWJ1ZiwgMHgwMCwgbmFuZGRldl9wYWdlX3NpemUoJmNoaXAtPmJhc2UpKTsKPiA+ ICsKPiA+ICsgICAgICAgLyogTWljcm9uIGFkdmlzZXMgdG8gb25seSB3cml0ZSB0aGUgZmlyc3Qg OCBvZGQgcGFnZXMsIGNvdW50aW5nIGZyb20gMSAqLwo+ID4gKyAgICAgICBmb3IgKGkgPSAwOyBp IDwgTUlDUk9OX1NIQUxMT1dfRVJBU0VfTUlOX1BBR0U7IGkgKz0gMiwgcGFnZSArPSAyKSB7Cj4g PiArICAgICAgICAgICAgICAgaWYgKCEobWljcm9uLT53cml0dGVucFtlYl0gJiBCSVQoaSkpKSB7 Cj4gPiArICAgICAgICAgICAgICAgICAgICAgICByZXQgPSBuYW5kX3dyaXRlX3BhZ2VfcmF3KGNo aXAsIGRhdGFidWYsIGZhbHNlLCBwYWdlKTsKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIGlm IChyZXQpCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXQ7Cj4g PiArICAgICAgICAgICAgICAgfQo+ID4gKyAgICAgICB9Cj4gPiArCj4gPiArICAgICAgIHJldHVy biAwOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgaW50IG1pY3Jvbl9uYW5kX2VyYXNlKHN0cnVj dCBuYW5kX2NoaXAgKmNoaXAsIHN0cnVjdCBlcmFzZV9pbmZvICppbnN0ciwKPiA+ICsgICAgICAg ICAgICAgICAgICAgICAgIGludCBhbGxvd2JidCkKPiA+ICt7Cj4gPiArICAgICAgIHN0cnVjdCBt aWNyb25fbmFuZCAqbWljcm9uID0gbmFuZF9nZXRfbWFudWZhY3R1cmVyX2RhdGEoY2hpcCk7Cj4g PiArICAgICAgIHVuc2lnbmVkIGludCBlYl9zeiA9IG5hbmRkZXZfZXJhc2VibG9ja19zaXplKCZj aGlwLT5iYXNlKTsKPiA+ICsgICAgICAgdW5zaWduZWQgaW50IGZpcnN0X2ViID0gRElWX1JPVU5E X0RPV05fVUxMKGluc3RyLT5hZGRyLCBlYl9zeik7Cj4gPiArICAgICAgIHVuc2lnbmVkIGludCBu Yl9lYiA9IERJVl9ST1VORF9VUF9VTEwoaW5zdHItPmxlbiwgZWJfc3opOwo+ID4gKyAgICAgICB1 bnNpZ25lZCBpbnQgZWI7Cj4gPiArCj4gPiArICAgICAgIGlmICghbWljcm9uKQo+ID4gKyAgICAg ICAgICAgICAgIHJldHVybiAtRUlOVkFMOwo+ID4gKwo+ID4gKyAgICAgICAvKgo+ID4gKyAgICAg ICAgKiBDaGVjayB0aGF0IGVub3VnaCBwYWdlcyBoYXZlIGJlZW4gd3JpdHRlbiBpbiBlYWNoIGJs b2NrLgo+ID4gKyAgICAgICAgKiBJZiBub3QsIHdyaXRlIHRoZW0gYmVmb3JlIGFjdHVhbGx5IGVy YXNpbmcuCj4gPiArICAgICAgICAqLwo+ID4gKyAgICAgICBmb3IgKGViID0gZmlyc3RfZWI7IGVi IDwgZmlyc3RfZWIgKyBuYl9lYjsgZWIrKykgewo+ID4gKyAgICAgICAgICAgICAgIC8qIElsIGFs bCB0aGUgZmlyc3QgcGFnZXMgYXJlIG5vdCB3cml0dGVuIHlldCwgZG8gaXQgKi8KPiA+ICsgICAg ICAgICAgICAgICBpZiAobWljcm9uLT53cml0dGVucFtlYl0gIT0gTUlDUk9OX1BBR0VfTUFTS19U UklHR0VSKQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgbWljcm9uX25hbmRfYXZvaWRfc2hh bGxvd19lcmFzZShjaGlwLCBlYik7Cj4gPiArCj4gPiArICAgICAgICAgICAgICAgbWljcm9uLT53 cml0dGVucFtlYl0gPSAwOwo+ID4gKyAgICAgICB9Cj4gPiArCj4gPiArICAgICAgIHJldHVybiBu YW5kX2VyYXNlX25hbmQoY2hpcCwgaW5zdHIsIGFsbG93YmJ0KTsKPiA+ICt9Cj4gPiArc3RhdGlj IGludCBtaWNyb25fbmFuZF93cml0ZV9vb2Ioc3RydWN0IG5hbmRfY2hpcCAqY2hpcCwgbG9mZl90 IHRvLAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IG10ZF9vb2Jf b3BzICpvcHMpCj4gPiArewo+ID4gKyAgICAgICBzdHJ1Y3QgbWljcm9uX25hbmQgKm1pY3JvbiA9 IG5hbmRfZ2V0X21hbnVmYWN0dXJlcl9kYXRhKGNoaXApOwo+ID4gKyAgICAgICB1bnNpZ25lZCBp bnQgZWJfc3ogPSBuYW5kZGV2X2VyYXNlYmxvY2tfc2l6ZSgmY2hpcC0+YmFzZSk7Cj4gPiArICAg ICAgIHVuc2lnbmVkIGludCBwX3N6ID0gbmFuZGRldl9wYWdlX3NpemUoJmNoaXAtPmJhc2UpOwo+ ID4gKyAgICAgICB1bnNpZ25lZCBpbnQgcHBlYiA9IG5hbmRkZXZfcGFnZXNfcGVyX2VyYXNlYmxv Y2soJmNoaXAtPmJhc2UpOwo+ID4gKyAgICAgICB1bnNpZ25lZCBpbnQgbmJfcF90b3QgPSBvcHMt PmxlbiAvIHBfc3o7Cj4gPiArICAgICAgIHVuc2lnbmVkIGludCBmaXJzdF9lYiA9IERJVl9ST1VO RF9ET1dOX1VMTCh0bywgZWJfc3opOwo+ID4gKyAgICAgICB1bnNpZ25lZCBpbnQgZmlyc3RfcCA9 IERJVl9ST1VORF9VUF9VTEwodG8gLSAoZmlyc3RfZWIgKiBlYl9zeiksIHBfc3opOwo+ID4gKyAg ICAgICB1bnNpZ25lZCBpbnQgbmJfZWIgPSBESVZfUk9VTkRfVVBfVUxMKGZpcnN0X3AgKyBuYl9w X3RvdCwgcHBlYik7Cj4gPiArICAgICAgIHVuc2lnbmVkIGludCByZW1haW5pbmdfcCwgZWIsIG5i X3A7Cj4gPiArICAgICAgIGludCByZXQ7Cj4gPiArCj4gPiArICAgICAgIHJldCA9IG5hbmRfd3Jp dGVfb29iX25hbmQoY2hpcCwgdG8sIG9wcyk7Cj4gPiArICAgICAgIGlmIChyZXQgfHwgKG9wcy0+ bGVuICE9IG9wcy0+cmV0bGVuKSkKPiA+ICsgICAgICAgICAgICAgICByZXR1cm4gcmV0Owo+ID4g Kwo+ID4gKyAgICAgICAvKiBNYXJrIHRoZSBsYXN0IHBhZ2VzIG9mIHRoZSBmaXJzdCBlcmFzZSBi bG9jayB0byB3cml0ZSAqLwo+ID4gKyAgICAgICBuYl9wID0gbWluKG5iX3BfdG90LCBwcGViIC0g Zmlyc3RfcCk7Cj4gPiArICAgICAgIG1pY3Jvbi0+d3JpdHRlbnBbZmlyc3RfZWJdIHw9IEdFTk1B U0soZmlyc3RfcCArIG5iX3AsIGZpcnN0X3ApICYKPiA+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgTUlDUk9OX1BBR0VfTUFTS19UUklHR0VSOwo+ID4gKyAgICAgICByZW1h aW5pbmdfcCA9IG5iX3BfdG90IC0gbmJfcDsKPiA+ICsKPiA+ICsgICAgICAgLyogTWFyayBhbGwg dGhlIHBhZ2VzIG9mIGFsbCAiaW4tdGhlLW1pZGRsZSIgZXJhc2UgYmxvY2tzICovCj4gPiArICAg ICAgIGZvciAoZWIgPSBmaXJzdF9lYiArIDE7IGViIDwgZmlyc3RfZWIgKyBuYl9lYiAtIDE7IGVi KyspIHsKPiA+ICsgICAgICAgICAgICAgICBtaWNyb24tPndyaXR0ZW5wW2ViXSB8PSBNSUNST05f UEFHRV9NQVNLX1RSSUdHRVI7Cj4gPiArICAgICAgICAgICAgICAgcmVtYWluaW5nX3AgLT0gcHBl YjsKPiA+ICsgICAgICAgfQo+ID4gKwo+ID4gKyAgICAgICAvKiBNYXJrIHRoZSBmaXJzdCBwYWdl cyBvZiB0aGUgbGFzdCBlcmFzZSBibG9jayB0byB3cml0ZSAqLwo+ID4gKyAgICAgICBpZiAocmVt YWluaW5nX3ApCj4gPiArICAgICAgICAgICAgICAgbWljcm9uLT53cml0dGVucFtlYl0gfD0gR0VO TUFTSyhyZW1haW5pbmdfcCAtIDEsIDApICYKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBNSUNST05fUEFHRV9NQVNLX1RSSUdHRVI7Cj4gPiArCj4gPiArICAgICAg IHJldHVybiAwOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgYm9vbCBtaWNyb25fbmFuZF93aXRo X3NoYWxsb3dfZXJhc2VfaXNzdWUoc3RydWN0IG5hbmRfY2hpcCAqY2hpcCkKPiA+ICt7Cj4gPiAr ICAgICAgIC8qCj4gPiArICAgICAgICAqIFRoZSBzaGFsbG93IGVyYXNlIGlzc3VlIGhhcyBiZWVu IG9ic2VydmVkIHdpdGggTVQyOUYqRypBCj4gPiArICAgICAgICAqIHBhcnRzIGJ1dCBNaWNyb24g c3VzcGVjdHMgdGhhdCB0aGUgaXNzdWUgY2FuIGhhcHBlbiB3aXRoCj4gPiArICAgICAgICAqIGFs bW9zdCBhbGwgcmVjZW50IFNMQyBidXQgYXQgc3VjaCBhIGxvdyBwcm9iYWJpbGl0eSB0aGF0IGl0 Cj4gPiArICAgICAgICAqIGlzIGFsbW9zdCBpbnZpc2libGUuIE5ldmVydGhlbGVzcywgYXMgd2Ug bWl0aWdhdGUgdGhlCj4gPiArICAgICAgICAqIHBlcmZvcm1hbmNlIHBlbmFsdHkgYXQgcnVudGlt ZSBieSBmb2xsb3dpbmcgdGhlIG51bWJlciBvZgo+ID4gKyAgICAgICAgKiB3cml0dGVuIHBhZ2Vz IGluIGEgYmxvY2sgYmVmb3JlIGVyYXNpbmcgaXQsIHdlIG1heSB3YW50IHRvCj4gPiArICAgICAg ICAqIGVuYWJsZSB0aGlzIGZpeCBieSBkZWZhdWx0Lgo+ID4gKyAgICAgICAgKi8KPiA+ICsgICAg ICAgcmV0dXJuIG5hbmRfaXNfc2xjKGNoaXApOwo+ID4gK30gIAo+IAo+IAo+IFdob2EsIGxldCdz IGhvbGQgb3VyIGhvcnNlcyBoZXJlISAgImFsbW9zdCBhbGwgcmVjZW50IiB3b3VsZCBpbXBseQo+ IHRoYXQgb2xkZXIgU0xDcyBhcmVuJ3QgYWZmZWN0ZWQuIEFuZCB0aGUgbGlrZWx5aG9vZCB0aGF0 IE1pY3JvbiB3aWxsCj4gZml4IG5ld2VyIHBhcnRzIGlzIGhpZ2ggLSBiZWNhdXNlIHdoeSAgd291 bGQgdGhleSBsZWF2ZSBpbiBhIG1ham9yIGJ1Zwo+IGxpa2UgdGhhdCBpbiB0aGUgbmV4dCBtYXNr PyBTbywgd2hhdCB5b3UncmUgc2F5aW5nIGlzIHdoZW4gc29tZW9uZQo+IGdvZXMgdG8gdXBncmFk ZSB0aGVpciBvbGRlciBkZXZpY2UncyBMaW51eCB0aGV5J3JlIGdvaW5nIHRvIHRha2UgYQo+IG1h am9yIGZpbGVzeXN0ZW0gcGVyZm9ybWFuY2UgaGl0IHdpdGhvdXQga25vd2luZyBpdCAoYmVjYXVz ZQo+IHJlYWxpc3RpY2FsbHkgd2hvIHJlYWRzIDEwLDAwMHMgb2YgcGF0Y2hlcyBiZWZvcmUgdXBn cmFkaW5nKSB3aGVuCj4gdGhlaXIgY2hpcCBkb2Vzbid0IG5lZWQgaXQuIEJlY2F1c2Ugd2UncmUg dG9vIGxhenkgdG8gZ2V0IHRoZSBsaXN0Cj4gZnJvbSBNaWNyb24gYW5kIGNvZGUgdGhhdCB1Z2xp bmVzcz8KCldlbGwsIHRoYXQncyB3aGVyZSBJIHN0cm9uZ2x5IGRpc2FncmVlLiBJIGtub3cgYWJv dXQgdGhpcyBmb3IKYWxtb3N0IHRocmVlIHllYXJzIG5vdy4gSXQgdG9vayB1cyB0aGlzIHRpbWUg dG8gZmlndXJlIG91dDoKMS0gd2hhdCBpcyBpbXBhY3RlZAoyLSB3aHkKMy0gd2hhdCBjb3VsZCB3 b3JrLWFyb3VuZCBpdAoKQXMgeW91IGNhbiBzZWUsIHdlIGZhaWxlZCBpbiAjMSBhbmQgdHJ1c3Qg bWUsIHdlIHRyaWVkLiBCeSBlLW1haWwsCklSQywgSVJMLiBXZSB0cmllZCBoYXJkLiBCZWFuIGFu ZCBab2x0YW4gaW4gY29weSBrbm93IGFib3V0IHRoZQppc3N1ZSBhbmQgdGhleSB0cmllZCB0byBt aW5pbWl6ZSBhbmQgaGlkZSBpdCBhcyBtdWNoIGFzIHRoZXkgY291bGQsCmx5aW5nIHNoYW1lbGVz c2x5IHRvIHVzIHNldmVyYWwgdGltZXMuIFBsZWFzZSBkbyBub3QgY2FsbCB0aGlzCmxhemluZXNz LgoKPiBXZSBwdXQgdGhpcyBpbiBhbmQgdGhlIHJlc3VsdGluZyBkaXNjdXNzaW9ucyBmb3IgZW1i ZWRkZWQgc3lzdGVtcwo+IGRlc2lnbmVycyBmb3IgdGhlIG5leHQgZGVjYWRlIGFyZSBnb2luZyB0 byBiZSBvbmUgb2YgdHdvIHRoaW5nczoKPiAqIE9oLCB5b3Ugd2FudCB0byB1c2UgdGhhdCBTTEMg TkFORCBmcm9tIE1pY3Jvbj8gV2VsbCB0aGVuIGRvbid0IHVzZQo+IExpbnV4IGJlY2F1c2UgaXQg cGVyZm9ybXMgY3JhcHB5IG9uIE1pY3JvbiBTTEMgTkFORHMuCj4gT1IKPiAqIE9oLCB5b3Ugd2Fu dCB0byB1c2UgTGludXg/IFdlbGwsIGRvbid0IHVzZSBhIE1pY3JvbiBTTEMgTkFORCB0aGVuCj4g YmVjYXVzZSB0aGV5IHBlcmZvcm0gY3JhcHB5IG9uIExpbnV4Lgo+IAo+IExldCdzIGdldCBhIGxp c3Qgb2YgYWxsIGNoaXAgdGhhdCBoYXZlIHRoaXMgYnVnIChhbmQgbGV0J3MgYmUgY2xlYXIgLQo+ IGl0J3MgYSBidWcsIG5vdCBhICJxdWlyayIpIGFuZCBlbmFibGUgaXQgZm9yIHRob3NlIGNoaXBz IHNwZWNpZmljYWxseS4KPiBFdmVuIGJldHRlciBpZiB0aGVyZSB3YXMgc29tZXRoaW5nIGluIHRo ZSBjaGlwaW5mbyBpdHNlbGYgdGhhdCBtYWRlIGl0Cj4gb2J2aW91cyB3aGljaCBvbmVzIGhhZCB0 aGUgcHJvYmxlbSAoYmVjYXVzZSByZWFsaXN0aWNhbGx5IGl0J3MKPiBwcm9iYWJseSBzcGVjaWZp YyB0byBhIHBhcnRpY3VsYXIgZ2VvbWV0cnkpLiBJbiBhbnkgY2FzZSwgaXQncyBpbiB0aGUKPiBi ZXN0IGludGVyZXN0IG9mIE1pY3JvbiB0byBpZGVudGlmeSB0byB1cyBleGFjdGx5IHdoaWNoIGNo aXBzIGhhdmUgb3IKPiBhcmUgbGlrZWx5IHRvIGhhdmUgdGhpcyBpc3N1ZSBhbmQgZm9yIHVzIHRv IGJlIHNwZWNpZmljIG9uIHdoaWNoIGdldAo+IGFzc2lnbmVkIHRoaXMgcXVpcmsuIEl0IGlzIHBy b2JhYmx5IGxpc3RlZCBpbiBhbiBlcnJhdGEgYXBwLW5vdGUsIGFuZAo+IGlmIG5vdCBpdCBzaG91 bGQgYmUuCj4gCj4gU3Ryb25nIE5BSyB0byBkZWZhdWx0aW5nIGFsbCBNaWNyb24gU0xDIE5BTkRz IHRvIHRoaXMgLSB1bmxlc3MgaXQKPiB0cnVseSBpcyB0aGUgY2FzZSB0aGF0IF9hbGxfIE1pY3Jv biBTTEMgTkFORHMgaW4gdGhlIHBhc3QgYW5kIGluIHRoZQo+IGZ1dHVyZSBsaWtlbHkgaGF2ZSB0 aGlzIHByb2JsZW0uCgpJIGFtIG9wZW4gdG8gYWx0ZXJuYXRpdmVzLgoKVGhhbmtzLApNaXF1w6hs CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K TGludXggTVREIGRpc2N1c3Npb24gbWFpbGluZyBsaXN0Cmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQu b3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtbXRkLwo=