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 08BCFC369DC for ; Tue, 29 Apr 2025 08:17:42 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:List-Subscribe:List-Help :List-Post:List-Archive:List-Unsubscribe:List-Id:Content-Transfer-Encoding: Content-Type:MIME-Version:Message-ID:Date:References:In-Reply-To:Subject:Cc: To:From:Reply-To:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=0jWn/KFVD/PhQGEeRPiIgFZV9yfIp5BQEz26X19uNxE=; b=pkAzreXU2nHMom+MQShu0ZoJIU vxhAfOCpc8ayKOzG6fbp/vS5OK9ExNYgjq9Nvj9MMPS7c8Cftj67CTr+bvNdl0BG6qNbbYNLmnDy3 W2zs6IlKVGzzbtYNxrtfFP172ZoCkpJ9L2QTW+VPRjcNRpwsV1zuJu1dTQLn7uD8PvEMR7stOxrvg TdobfqLIRfpvlCUOHLUHJ92vI5jmERQQZNdmkiBc/Vkb0qeZSthHM/eDlweGoNvRyq3ZfUMFK7Tfh rarhsW9KDLSLXk3aXgVAcYH+5Y1adw2ljjs8vLVkVo8mLACkHRaxL3dP++QLE02MMmholQTfR0X0B d/XevGBg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98.2 #2 (Red Hat Linux)) id 1u9g9h-00000008tXg-2soI; Tue, 29 Apr 2025 08:17:29 +0000 Received: from relay4-d.mail.gandi.net ([217.70.183.196]) by bombadil.infradead.org with esmtps (Exim 4.98.2 #2 (Red Hat Linux)) id 1u9g7l-00000008tCk-23Fz; Tue, 29 Apr 2025 08:15:31 +0000 Received: by mail.gandi.net (Postfix) with ESMTPSA id F1C05433E9; Tue, 29 Apr 2025 08:15:23 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=gm1; t=1745914526; 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=0jWn/KFVD/PhQGEeRPiIgFZV9yfIp5BQEz26X19uNxE=; b=bdKVEWzHLtdV3g3fdHtJap4AYJ1a1U05TI+3nB2J2c6TtDHHUShrhrQ3Vsno/vAbdiitaA iXo3tfhRNNVunDzPDxRSBIxWkZELCxpy6/rW6Nd5AidH/UFQ0i6s4MpI/bdG46R5Yok6FS 4C5VtaUGiu4ZKO0KBaMeHi8QZx7DwpNwoS6zCffudJYeJENdmm/jnfHyxOjmzMJ4RdmLlM QmRMKWo35M/8PBLDsvl7ZfhEDm3Llpn8JhH2VbJrwHsArXQsR0X93oIbE6ry7uTgWB/5S2 WxEfF+4r6xVXzbVdEfctZYhmDMfXALNH8yd/uIxYFVvz5VgA6J7HM6k3iknoDw== From: Miquel Raynal To: Chuanhong Guo Cc: Sky Huang , Matthias Brugger , AngeloGioacchino Del Regno , Richard Weinberger , Vignesh Raghavendra , Daniel Golle , Chia-Lin Kao , Cheng Ming Lin , Christophe JAILLET , Pratyush Yadav , linux-kernel@vger.kernel.org, linux-mtd@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-mediatek@lists.infradead.org, Steven Liu Subject: Re: [PATCH nand/next] mtd: nand: spi: Use write_cache first and then update_cache in write operation In-Reply-To: (Chuanhong Guo's message of "Tue, 22 Apr 2025 09:38:26 +0800") References: <20241119093949.3014-1-SkyLake.Huang@mediatek.com> <871pymtab3.fsf@bootlin.com> User-Agent: mu4e 1.12.7; emacs 29.4 Date: Tue, 29 Apr 2025 10:15:22 +0200 Message-ID: <87bjsfv0x1.fsf@bootlin.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-GND-State: clean X-GND-Score: -100 X-GND-Cause: gggruggvucftvghtrhhoucdtuddrgeefvddrtddtgddvieeffeduucetufdoteggodetrfdotffvucfrrhhofhhilhgvmecuifetpfffkfdpucggtfgfnhhsuhgsshgtrhhisggvnecuuegrihhlohhuthemuceftddunecusecvtfgvtghiphhivghnthhsucdlqddutddtmdenucfjughrpefhvfevufgjfhgffffkgggtgfesthhqredttderjeenucfhrhhomhepofhiqhhuvghlucftrgihnhgrlhcuoehmihhquhgvlhdrrhgrhihnrghlsegsohhothhlihhnrdgtohhmqeenucggtffrrghtthgvrhhnpeffgefhjedtfeeigeduudekudejkedtiefhleelueeiueevheekvdeludehiedvfeenucfkphepledvrddukeegrddutdekrddvheehnecuvehluhhsthgvrhfuihiivgeptdenucfrrghrrghmpehinhgvthepledvrddukeegrddutdekrddvheehpdhhvghloheplhhotggrlhhhohhsthdpmhgrihhlfhhrohhmpehmihhquhgvlhdrrhgrhihnrghlsegsohhothhlihhnrdgtohhmpdhnsggprhgtphhtthhopeduiedprhgtphhtthhopehgtghhleekuddvudefsehgmhgrihhlrdgtohhmpdhrtghpthhtohepufhkhifnrghkvgdrjfhurghnghesmhgvughirghtvghkrdgtohhmpdhrtghpthhtohepmhgrthhthhhirghsrdgsghhgsehgmhgrihhlrdgtohhmpdhrtghpthhtoheprghnghgvlhhoghhiohgrtggthhhinhhordguvghlrhgvghhnohestgholhhlrggsohhrrgdrtghomhdprhgtphhtthhopehri hgthhgrrhgusehnohgurdgrthdprhgtphhtthhopehvihhgnhgvshhhrhesthhirdgtohhmpdhrtghpthhtohepuggrnhhivghlsehmrghkrhhothhophhirgdrohhrghdprhgtphhtthhopegrtggvlhgrnhdrkhgrohestggrnhhonhhitggrlhdrtghomh X-GND-Sasl: miquel.raynal@bootlin.com X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250429_011529_656412_99C40FE3 X-CRM114-Status: GOOD ( 19.49 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org Hello, On 22/04/2025 at 09:38:26 +08, Chuanhong Guo wrote: > Hello! > =E5=9C=A8 2024/12/5 23:32, Miquel Raynal =E5=86=99=E9=81=93: >> Hello, >> On 19/11/2024 at 17:39:49 +08, Sky Huang >> wrote: >>=20 >>> From: Sky Huang >>> >>> According to discussion with Miquel Raynal >>> and Chuanhong Guo on FORESEE F35SQA002G patch, >>> Chuanhong recommmends that we can use the following sequence in >>> spinand_write_to_cache_op(): >>> >>> x1 mode: >>> 02H(program data load) -> 84H(random program data load) -> 84H ... >>> >>> x4 mode: >>> 32H(program data load x4) -> 34H(random program data load x4) -> 34H ... >>> >>> 02H or 32H commands will clear cache buffer on SPI-NAND and load >>> data to it. For those SPI controllers which can't finish transmission >>> in single step, 84H or 34H will be triggered for the rest data. >>> >>> We observe that some current SPI-NANDs, including FORESEE F35SQA001G and >>> F35SQA002G, must use 02H or 32H to reset cache buffer in flash before >>> using 84H or 34H. Or users may encounter program failure issue. This is= sue >>> is not always reproducible, but it may occur and cause system instabili= ty. >>> >>> This sequence should work on all SPI-NANDs nowadays. I also check with >>> Foresee that the sequence can solve the above program failure issue. >>> >>> On my test platform (MT7988), SPI driver is drivers/spi/spi-mt65xx.c. >>> And I limit MTK_SPI_IPM_PACKET_SIZE to SZ_1K to simulate lightweight SPI >>> controller which can only transmit 1024 bytes. >>> >>> The test step is the following: >>> - mtd erase /dev/mtd2 >>> - dd if=3D/dev/zero bs=3D2048 count=3D1 | tr '\0' '\xA5' > output.bin >>> - mtd write output.bin /dev/mtd2 >>> >>> Before applying this patch, write operation uses only 34H(update_cache): >>> [78.937720] OP code: 0x34, addr val: 0x0, data nbytes: 1020, data 1st b= yte: 0xa5 >>> [78.945297] OP code: 0x34, addr val: 0x3fc, data nbytes: 1020, data 1st= byte: 0xa5 >>> [78.954251] OP code: 0x34, addr val: 0x7f8, data nbytes: 72, data 1st b= yte: 0xa5 >>> [78.962966] OP code: 0x10, addr val: 0x300 >>> [78.968816] OP code: 0x34, addr val: 0x0, data nbytes: 1020, data 1st b= yte: 0xff >>> [78.977233] OP code: 0x34, addr val: 0x3fc, data nbytes: 1020, data 1st= byte: 0xff >>> [78.985124] OP code: 0x34, addr val: 0x7f8, data nbytes: 72, data 1st b= yte: 0xff >>> [78.992527] OP code: 0x10, addr val: 0x301 >>> [78.996981] OP code: 0x34, addr val: 0x0, data nbytes: 1020, data 1st b= yte: 0xff >>> [79.004416] OP code: 0x34, addr val: 0x3fc, data nbytes: 1020, data 1st= byte: 0xff >>> [79.012031] OP code: 0x34, addr val: 0x7f8, data nbytes: 72, data 1st b= yte: 0xff >>> [79.019435] OP code: 0x10, addr val: 0x302 >> I am sorry but above you said that we should not perform: >> 0x32, 0x32, 0x32... >> because the second time it would clear the cache again. And here >> you tell us that actually the core already handles that by performing >> instead: >> 0x34, 0x34, 0x34... >> So what is the problem? >> Or maybe I misunderstood the issue, but I think Chuanhong raised an >> issue that is already solved? Isn't it? >>=20 > > The issue is that the FORESEE NANDs require the first cache writing > instruction to be WRITE_CACHE instead of UPDATE_CACHE. i.e. it needs a > command sequence of: > 0x32, 0x34, 0x34, 0x34... So Foresee NANDs do not support update_cache, why are they advertised in the first place? Could you we have a less impacting solution for the other NANDs? > This patch does exactly that, making the first instruction issued 0x32. > It should be applied to fix the issue above. My understanding is that this is very specific to FORESEE NANDs and you are changing this for all NANDs. I have fears that it will break everywhere else. Overall I understand the problem, but I disagree with the fix. Could you propose something less impacting as hinted above? Thanks and sorry for the delay. Miqu=C3=A8l 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 36864C3ABA9 for ; Tue, 29 Apr 2025 08:17:34 +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:Message-ID:Date:References :In-Reply-To:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=Y1amUMVkI0OhT3epM3v5CO36OGYJ7+OFCBPo05nNokw=; b=pgswMUPWy3cF7+ NM/7OhDlWy71dkyqWt2k8p8kH0v4XURYGsoWXlUv7oSA+WdVKMJAXD9Ic34jeHUaeZMIFOuXL1Uq7 oX1d+/HOPi/7QgcKN7FrTCWzTzkQ2dFniKD2TKIZ3En0pJOIZdiiIeBVtFC8X9FYCAiudoCvy5JYC H66yNgqPyxE3zj8jHCZWBNzzsMK7dygmt1xXRs3cIMFht0M3FLWu8HLigqJKlfoK3RQ/4663Xsfpo 8PGVMctMESAbaGJRblyuW/g9xwtzl6/Gn2jCrJ18b90D00sOtJqR7XHkMGJOvDQuoIlQa7Ml4k6VH mfX/QplG7ZHzSt8VvDWA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98.2 #2 (Red Hat Linux)) id 1u9g9i-00000008tYY-33Ot; Tue, 29 Apr 2025 08:17:30 +0000 Received: from relay4-d.mail.gandi.net ([217.70.183.196]) by bombadil.infradead.org with esmtps (Exim 4.98.2 #2 (Red Hat Linux)) id 1u9g7l-00000008tCk-23Fz; Tue, 29 Apr 2025 08:15:31 +0000 Received: by mail.gandi.net (Postfix) with ESMTPSA id F1C05433E9; Tue, 29 Apr 2025 08:15:23 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=gm1; t=1745914526; 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=0jWn/KFVD/PhQGEeRPiIgFZV9yfIp5BQEz26X19uNxE=; b=bdKVEWzHLtdV3g3fdHtJap4AYJ1a1U05TI+3nB2J2c6TtDHHUShrhrQ3Vsno/vAbdiitaA iXo3tfhRNNVunDzPDxRSBIxWkZELCxpy6/rW6Nd5AidH/UFQ0i6s4MpI/bdG46R5Yok6FS 4C5VtaUGiu4ZKO0KBaMeHi8QZx7DwpNwoS6zCffudJYeJENdmm/jnfHyxOjmzMJ4RdmLlM QmRMKWo35M/8PBLDsvl7ZfhEDm3Llpn8JhH2VbJrwHsArXQsR0X93oIbE6ry7uTgWB/5S2 WxEfF+4r6xVXzbVdEfctZYhmDMfXALNH8yd/uIxYFVvz5VgA6J7HM6k3iknoDw== From: Miquel Raynal To: Chuanhong Guo Cc: Sky Huang , Matthias Brugger , AngeloGioacchino Del Regno , Richard Weinberger , Vignesh Raghavendra , Daniel Golle , Chia-Lin Kao , Cheng Ming Lin , Christophe JAILLET , Pratyush Yadav , linux-kernel@vger.kernel.org, linux-mtd@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-mediatek@lists.infradead.org, Steven Liu Subject: Re: [PATCH nand/next] mtd: nand: spi: Use write_cache first and then update_cache in write operation In-Reply-To: (Chuanhong Guo's message of "Tue, 22 Apr 2025 09:38:26 +0800") References: <20241119093949.3014-1-SkyLake.Huang@mediatek.com> <871pymtab3.fsf@bootlin.com> User-Agent: mu4e 1.12.7; emacs 29.4 Date: Tue, 29 Apr 2025 10:15:22 +0200 Message-ID: <87bjsfv0x1.fsf@bootlin.com> MIME-Version: 1.0 X-GND-State: clean X-GND-Score: -100 X-GND-Cause: gggruggvucftvghtrhhoucdtuddrgeefvddrtddtgddvieeffeduucetufdoteggodetrfdotffvucfrrhhofhhilhgvmecuifetpfffkfdpucggtfgfnhhsuhgsshgtrhhisggvnecuuegrihhlohhuthemuceftddunecusecvtfgvtghiphhivghnthhsucdlqddutddtmdenucfjughrpefhvfevufgjfhgffffkgggtgfesthhqredttderjeenucfhrhhomhepofhiqhhuvghlucftrgihnhgrlhcuoehmihhquhgvlhdrrhgrhihnrghlsegsohhothhlihhnrdgtohhmqeenucggtffrrghtthgvrhhnpeffgefhjedtfeeigeduudekudejkedtiefhleelueeiueevheekvdeludehiedvfeenucfkphepledvrddukeegrddutdekrddvheehnecuvehluhhsthgvrhfuihiivgeptdenucfrrghrrghmpehinhgvthepledvrddukeegrddutdekrddvheehpdhhvghloheplhhotggrlhhhohhsthdpmhgrihhlfhhrohhmpehmihhquhgvlhdrrhgrhihnrghlsegsohhothhlihhnrdgtohhmpdhnsggprhgtphhtthhopeduiedprhgtphhtthhopehgtghhleekuddvudefsehgmhgrihhlrdgtohhmpdhrtghpthhtohepufhkhifnrghkvgdrjfhurghnghesmhgvughirghtvghkrdgtohhmpdhrtghpthhtohepmhgrthhthhhirghsrdgsghhgsehgmhgrihhlrdgtohhmpdhrtghpthhtoheprghnghgvlhhoghhiohgrtggthhhinhhordguvghlrhgvghhnohestgholhhlrggsohhrrgdrtghomhdprhgtphhtthhopehri hgthhgrrhgusehnohgurdgrthdprhgtphhtthhopehvihhgnhgvshhhrhesthhirdgtohhmpdhrtghpthhtohepuggrnhhivghlsehmrghkrhhothhophhirgdrohhrghdprhgtphhtthhopegrtggvlhgrnhdrkhgrohestggrnhhonhhitggrlhdrtghomh X-GND-Sasl: miquel.raynal@bootlin.com X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250429_011529_656412_99C40FE3 X-CRM114-Status: GOOD ( 19.49 ) 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 SGVsbG8sCgpPbiAyMi8wNC8yMDI1IGF0IDA5OjM4OjI2ICswOCwgQ2h1YW5ob25nIEd1byA8Z2No OTgxMjEzQGdtYWlsLmNvbT4gd3JvdGU6Cgo+IEhlbGxvIQo+IOWcqCAyMDI0LzEyLzUgMjM6MzIs IE1pcXVlbCBSYXluYWwg5YaZ6YGTOgo+PiBIZWxsbywKPj4gT24gMTkvMTEvMjAyNCBhdCAxNzoz OTo0OSArMDgsIFNreSBIdWFuZyA8U2t5TGFrZS5IdWFuZ0BtZWRpYXRlay5jb20+Cj4+IHdyb3Rl Ogo+PiAKPj4+IEZyb206IFNreSBIdWFuZyA8c2t5bGFrZS5odWFuZ0BtZWRpYXRlay5jb20+Cj4+ Pgo+Pj4gQWNjb3JkaW5nIHRvIGRpc2N1c3Npb24gd2l0aCBNaXF1ZWwgUmF5bmFsIDxtaXF1ZWwu cmF5bmFsQGJvb3RsaW4uY29tPgo+Pj4gYW5kIENodWFuaG9uZyBHdW8gPGdjaDk4MTIxM0BnbWFp bC5jb20+IG9uIEZPUkVTRUUgRjM1U1FBMDAyRyBwYXRjaCwKPj4+IENodWFuaG9uZyByZWNvbW1t ZW5kcyB0aGF0IHdlIGNhbiB1c2UgdGhlIGZvbGxvd2luZyBzZXF1ZW5jZSBpbgo+Pj4gc3BpbmFu ZF93cml0ZV90b19jYWNoZV9vcCgpOgo+Pj4KPj4+IHgxIG1vZGU6Cj4+PiAwMkgocHJvZ3JhbSBk YXRhIGxvYWQpIC0+IDg0SChyYW5kb20gcHJvZ3JhbSBkYXRhIGxvYWQpIC0+IDg0SCAuLi4KPj4+ Cj4+PiB4NCBtb2RlOgo+Pj4gMzJIKHByb2dyYW0gZGF0YSBsb2FkIHg0KSAtPiAzNEgocmFuZG9t IHByb2dyYW0gZGF0YSBsb2FkIHg0KSAtPiAzNEggLi4uCj4+Pgo+Pj4gMDJIIG9yIDMySCBjb21t YW5kcyB3aWxsIGNsZWFyIGNhY2hlIGJ1ZmZlciBvbiBTUEktTkFORCBhbmQgbG9hZAo+Pj4gZGF0 YSB0byBpdC4gRm9yIHRob3NlIFNQSSBjb250cm9sbGVycyB3aGljaCBjYW4ndCBmaW5pc2ggdHJh bnNtaXNzaW9uCj4+PiBpbiBzaW5nbGUgc3RlcCwgODRIIG9yIDM0SCB3aWxsIGJlIHRyaWdnZXJl ZCBmb3IgdGhlIHJlc3QgZGF0YS4KPj4+Cj4+PiBXZSBvYnNlcnZlIHRoYXQgc29tZSBjdXJyZW50 IFNQSS1OQU5EcywgaW5jbHVkaW5nIEZPUkVTRUUgRjM1U1FBMDAxRyBhbmQKPj4+IEYzNVNRQTAw MkcsIG11c3QgdXNlIDAySCBvciAzMkggdG8gcmVzZXQgY2FjaGUgYnVmZmVyIGluIGZsYXNoIGJl Zm9yZQo+Pj4gdXNpbmcgODRIIG9yIDM0SC4gT3IgdXNlcnMgbWF5IGVuY291bnRlciBwcm9ncmFt IGZhaWx1cmUgaXNzdWUuIFRoaXMgaXNzdWUKPj4+IGlzIG5vdCBhbHdheXMgcmVwcm9kdWNpYmxl LCBidXQgaXQgbWF5IG9jY3VyIGFuZCBjYXVzZSBzeXN0ZW0gaW5zdGFiaWxpdHkuCj4+Pgo+Pj4g VGhpcyBzZXF1ZW5jZSBzaG91bGQgd29yayBvbiBhbGwgU1BJLU5BTkRzIG5vd2FkYXlzLiBJIGFs c28gY2hlY2sgd2l0aAo+Pj4gRm9yZXNlZSB0aGF0IHRoZSBzZXF1ZW5jZSBjYW4gc29sdmUgdGhl IGFib3ZlIHByb2dyYW0gZmFpbHVyZSBpc3N1ZS4KPj4+Cj4+PiBPbiBteSB0ZXN0IHBsYXRmb3Jt IChNVDc5ODgpLCBTUEkgZHJpdmVyIGlzIGRyaXZlcnMvc3BpL3NwaS1tdDY1eHguYy4KPj4+IEFu ZCBJIGxpbWl0IE1US19TUElfSVBNX1BBQ0tFVF9TSVpFIHRvIFNaXzFLIHRvIHNpbXVsYXRlIGxp Z2h0d2VpZ2h0IFNQSQo+Pj4gY29udHJvbGxlciB3aGljaCBjYW4gb25seSB0cmFuc21pdCAxMDI0 IGJ5dGVzLgo+Pj4KPj4+IFRoZSB0ZXN0IHN0ZXAgaXMgdGhlIGZvbGxvd2luZzoKPj4+IC0gbXRk IGVyYXNlIC9kZXYvbXRkMgo+Pj4gLSBkZCBpZj0vZGV2L3plcm8gYnM9MjA0OCBjb3VudD0xIHwg dHIgJ1wwJyAnXHhBNScgPiBvdXRwdXQuYmluCj4+PiAtIG10ZCB3cml0ZSBvdXRwdXQuYmluIC9k ZXYvbXRkMgo+Pj4KPj4+IEJlZm9yZSBhcHBseWluZyB0aGlzIHBhdGNoLCB3cml0ZSBvcGVyYXRp b24gdXNlcyBvbmx5IDM0SCh1cGRhdGVfY2FjaGUpOgo+Pj4gWzc4LjkzNzcyMF0gT1AgY29kZTog MHgzNCwgYWRkciB2YWw6IDB4MCwgZGF0YSBuYnl0ZXM6IDEwMjAsIGRhdGEgMXN0IGJ5dGU6IDB4 YTUKPj4+IFs3OC45NDUyOTddIE9QIGNvZGU6IDB4MzQsIGFkZHIgdmFsOiAweDNmYywgZGF0YSBu Ynl0ZXM6IDEwMjAsIGRhdGEgMXN0IGJ5dGU6IDB4YTUKPj4+IFs3OC45NTQyNTFdIE9QIGNvZGU6 IDB4MzQsIGFkZHIgdmFsOiAweDdmOCwgZGF0YSBuYnl0ZXM6IDcyLCBkYXRhIDFzdCBieXRlOiAw eGE1Cj4+PiBbNzguOTYyOTY2XSBPUCBjb2RlOiAweDEwLCBhZGRyIHZhbDogMHgzMDAKPj4+IFs3 OC45Njg4MTZdIE9QIGNvZGU6IDB4MzQsIGFkZHIgdmFsOiAweDAsIGRhdGEgbmJ5dGVzOiAxMDIw LCBkYXRhIDFzdCBieXRlOiAweGZmCj4+PiBbNzguOTc3MjMzXSBPUCBjb2RlOiAweDM0LCBhZGRy IHZhbDogMHgzZmMsIGRhdGEgbmJ5dGVzOiAxMDIwLCBkYXRhIDFzdCBieXRlOiAweGZmCj4+PiBb NzguOTg1MTI0XSBPUCBjb2RlOiAweDM0LCBhZGRyIHZhbDogMHg3ZjgsIGRhdGEgbmJ5dGVzOiA3 MiwgZGF0YSAxc3QgYnl0ZTogMHhmZgo+Pj4gWzc4Ljk5MjUyN10gT1AgY29kZTogMHgxMCwgYWRk ciB2YWw6IDB4MzAxCj4+PiBbNzguOTk2OTgxXSBPUCBjb2RlOiAweDM0LCBhZGRyIHZhbDogMHgw LCBkYXRhIG5ieXRlczogMTAyMCwgZGF0YSAxc3QgYnl0ZTogMHhmZgo+Pj4gWzc5LjAwNDQxNl0g T1AgY29kZTogMHgzNCwgYWRkciB2YWw6IDB4M2ZjLCBkYXRhIG5ieXRlczogMTAyMCwgZGF0YSAx c3QgYnl0ZTogMHhmZgo+Pj4gWzc5LjAxMjAzMV0gT1AgY29kZTogMHgzNCwgYWRkciB2YWw6IDB4 N2Y4LCBkYXRhIG5ieXRlczogNzIsIGRhdGEgMXN0IGJ5dGU6IDB4ZmYKPj4+IFs3OS4wMTk0MzVd IE9QIGNvZGU6IDB4MTAsIGFkZHIgdmFsOiAweDMwMgo+PiBJIGFtIHNvcnJ5IGJ1dCBhYm92ZSB5 b3Ugc2FpZCB0aGF0IHdlIHNob3VsZCBub3QgcGVyZm9ybToKPj4gICAgICAweDMyLCAweDMyLCAw eDMyLi4uCj4+IGJlY2F1c2UgdGhlIHNlY29uZCB0aW1lIGl0IHdvdWxkIGNsZWFyIHRoZSBjYWNo ZSBhZ2Fpbi4gQW5kIGhlcmUKPj4geW91IHRlbGwgdXMgdGhhdCBhY3R1YWxseSB0aGUgY29yZSBh bHJlYWR5IGhhbmRsZXMgdGhhdCBieSBwZXJmb3JtaW5nCj4+IGluc3RlYWQ6Cj4+ICAgICAgMHgz NCwgMHgzNCwgMHgzNC4uLgo+PiBTbyB3aGF0IGlzIHRoZSBwcm9ibGVtPwo+PiBPciBtYXliZSBJ IG1pc3VuZGVyc3Rvb2QgdGhlIGlzc3VlLCBidXQgSSB0aGluayBDaHVhbmhvbmcgcmFpc2VkIGFu Cj4+IGlzc3VlIHRoYXQgaXMgYWxyZWFkeSBzb2x2ZWQ/IElzbid0IGl0Pwo+PiAKPgo+IFRoZSBp c3N1ZSBpcyB0aGF0IHRoZSBGT1JFU0VFIE5BTkRzIHJlcXVpcmUgdGhlIGZpcnN0IGNhY2hlIHdy aXRpbmcKPiBpbnN0cnVjdGlvbiB0byBiZSBXUklURV9DQUNIRSBpbnN0ZWFkIG9mIFVQREFURV9D QUNIRS4gaS5lLiBpdCBuZWVkcyBhCj4gY29tbWFuZCBzZXF1ZW5jZSBvZjoKPiAgICAgMHgzMiwg MHgzNCwgMHgzNCwgMHgzNC4uLgoKU28gRm9yZXNlZSBOQU5EcyBkbyBub3Qgc3VwcG9ydCB1cGRh dGVfY2FjaGUsIHdoeSBhcmUgdGhleSBhZHZlcnRpc2VkIGluCnRoZSBmaXJzdCBwbGFjZT8gQ291 bGQgeW91IHdlIGhhdmUgYSBsZXNzIGltcGFjdGluZyBzb2x1dGlvbiBmb3IgdGhlCm90aGVyIE5B TkRzPwoKPiBUaGlzIHBhdGNoIGRvZXMgZXhhY3RseSB0aGF0LCBtYWtpbmcgdGhlIGZpcnN0IGlu c3RydWN0aW9uIGlzc3VlZCAweDMyLgo+IEl0IHNob3VsZCBiZSBhcHBsaWVkIHRvIGZpeCB0aGUg aXNzdWUgYWJvdmUuCgpNeSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgdGhpcyBpcyB2ZXJ5IHNwZWNp ZmljIHRvIEZPUkVTRUUgTkFORHMgYW5kIHlvdQphcmUgY2hhbmdpbmcgdGhpcyBmb3IgYWxsIE5B TkRzLiBJIGhhdmUgZmVhcnMgdGhhdCBpdCB3aWxsIGJyZWFrCmV2ZXJ5d2hlcmUgZWxzZS4KCk92 ZXJhbGwgSSB1bmRlcnN0YW5kIHRoZSBwcm9ibGVtLCBidXQgSSBkaXNhZ3JlZSB3aXRoIHRoZSBm aXguIENvdWxkIHlvdQpwcm9wb3NlIHNvbWV0aGluZyBsZXNzIGltcGFjdGluZyBhcyBoaW50ZWQg YWJvdmU/CgpUaGFua3MgYW5kIHNvcnJ5IGZvciB0aGUgZGVsYXkuCk1pcXXDqGwKCl9fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpMaW51eCBNVEQg ZGlzY3Vzc2lvbiBtYWlsaW5nIGxpc3QKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1h bi9saXN0aW5mby9saW51eC1tdGQvCg==