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 23246C2D0DB for ; Mon, 20 Jan 2020 10:03:43 +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 DB5DE2087E for ; Mon, 20 Jan 2020 10:03:42 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="X2KMp0UI" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org DB5DE2087E 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=bdK1UtOtVH7GS6rN6kUMN7HPIhvbLkERz6X6lApR95o=; b=X2KMp0UI4zLBnT OfyNhR/RjenYI6E64EvrEEhNsBydeT3Gabi9H8+Ip4JrVe1HaAmqvi5RXpq8UEKDD0wCSe52b7EAp O8d+IUnWlVNfc9DDTzs+WSjTq2nV3Whpq4MOTyRvbarM/2/jxVrSecGf414r8p2j1Ad5RdQzvaj7M 4E+A63EYPy5Xqo2ePt6lJSTAthD8u3LbhYJ7JISrtjvjxGFlovS27fWmwBgpy8kn+ZZ8y29ryMUCD q1+rEjJ03BO7bwG1ATDhr9YOGR/4qf4sc9YkCfbnvWyj9UTsA/zWe4hYFw4BSqtHpWFiKzYdkXjss P5/eyIKRIxrLoT4MUudQ==; 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 1itTu5-00058A-D0; Mon, 20 Jan 2020 10:03:29 +0000 Received: from relay5-d.mail.gandi.net ([217.70.183.197]) by bombadil.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1itTty-0004yF-2R for linux-mtd@lists.infradead.org; Mon, 20 Jan 2020 10:03:28 +0000 X-Originating-IP: 90.76.211.102 Received: from xps13 (lfbn-tou-1-1151-102.w90-76.abo.wanadoo.fr [90.76.211.102]) (Authenticated sender: miquel.raynal@bootlin.com) by relay5-d.mail.gandi.net (Postfix) with ESMTPSA id 3C40A1C001A; Mon, 20 Jan 2020 10:03:06 +0000 (UTC) Date: Mon, 20 Jan 2020 11:03:06 +0100 From: Miquel Raynal To: WeiXiong Liao Subject: Re: [PATCH v1 11/11] mtd: new support oops logger based on pstore/blk Message-ID: <20200120110306.32e53fd8@xps13> In-Reply-To: <1579482233-2672-12-git-send-email-liaoweixiong@allwinnertech.com> References: <1579482233-2672-1-git-send-email-liaoweixiong@allwinnertech.com> <1579482233-2672-12-git-send-email-liaoweixiong@allwinnertech.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-20200120_020322_411326_75980F92 X-CRM114-Status: GOOD ( 36.97 ) 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: Rob Herring , Tony Luck , Kees Cook , Jonathan Corbet , Richard Weinberger , Anton Vorontsov , linux-doc@vger.kernel.org, Greg Kroah-Hartman , linux-kernel@vger.kernel.org, linux-mtd@lists.infradead.org, Jonathan Cameron , Colin Cross , Mauro Carvalho Chehab , "David S. Miller" , Vignesh Raghavendra 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 SGkgV2VpWGlvbmcsCgpXZWlYaW9uZyBMaWFvIDxsaWFvd2VpeGlvbmdAYWxsd2lubmVydGVjaC5j b20+IHdyb3RlIG9uIE1vbiwgMjAgSmFuCjIwMjAgMDk6MDM6NTMgKzA4MDA6Cgo+IEl0J3MgdGhl IGxhc3Qgb25lIG9mIGEgc2VyaWVzIG9mIHBhdGNoZXMgZm9yIGFkYXB0aXZlIHRvIE1URCBkZXZp Y2UuCj4gCj4gVGhlIG10ZHBzdG9yZSBpcyBzaW1pbGFyIHRvIG10ZG9vcHMgYnV0IG1vcmUgcG93 ZXJmdWwuIEl0IGJhc2VzIG9uCj4gcHN0b3JlL2JsaywgYWltcyB0byBzdG9yZSBwYW5pYyBhbmQg b29wcyBsb2cgdG8gYSBmbGFzaCBwYXJ0aXRpb24sCgogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgbG9ncz8KCj4gd2hlcmUgaXQgY2FuIGJlIHJlYWQgYmFjayBhcyBm aWxlcyBhZnRlciBtb3VudGluZyBwc3RvcmUgZmlsZXN5c3RlbS4KPiAKPiBUaGUgcHN0b3JlL2Js ayBhbmQgYmxrb29wcywgYSB3cmFwcGVyIGZvciBwc3RvcmUvYmxrLCBhcmUgZGVzaWduZWQgZm9y Cj4gYmxvY2sgZGV2aWNlIGF0IHRoZSB2ZXJ5IGJlZ2lubmluZywgYnV0IG5vdywgY29tcGF0aWJs ZSB0byBub3Qgb25seQo+IGJsb2NrIGRldmljZS4gQWZ0ZXIgdGhpcyBzZXJpZXMgb2YgcGF0Y2hl cywgcHN0b3JlL2JsayBjYW4gYWxzbyB3b3JrCj4gZm9yIE1URCBkZXZpY2UuIFRvIG1ha2UgaXQg d29yaywgJ2Jsa2Rldicgb24ga2NvbmZpZyBvciBtb2R1bGUKPiBwYXJhbWV0ZXIgb2YgYmxrb29w cyBzaG91bGQgYmUgc2V0IGFzIG10ZCBkZXZpY2UgbmFtZSBvciBtdGQgbnVtYmVyLgo+IFNlZSBt b3JlIGFib3V0IHBzdG9yZS9ibGsgYW5kIGJsa29vcHMgb246Cj4gICAgIERvY3VtZW50YXRpb24v YWRtaW4tZ3VpZGUvcHN0b3JlLWJsb2NrLnJzdAo+IAo+IFdoeSBkbyB3ZSBuZWVkIG10ZHBzdG9y ZT8KPiAxLiByZXBldGl0aXZlIGpvYnMgYmV0d2VlbiBwc3RvcmUgYW5kIG10ZG9vcHMKPiAgICBC b3RoIG9mIHBzdG9yZSBhbmQgbXRkb29wcyBkbyB0aGUgc2FtZSBqb2JzIHRoYXQgc3RvcmUgcGFu aWMvb29wcyBsb2cuCj4gICAgVGhleSBoYXZlIG11Y2ggc2ltaWxhciBsb2dpYyB0aGF0IHJlZ2lz dGVyIHRvIGttc2cgZHVtcGVyIGFuZCBzdG9yZQo+ICAgIGxvZyB0byBzZXZlcmFsIGNodW5rcyBv bmUgYnkgb25lLgo+IDIuIGRvIHdoYXQgYSBkcml2ZXIgc2hvdWxkIGRvCj4gICAgVG8gbWUsIGEg ZHJpdmVyIHNob3VsZCBwcm92aWRlIG1ldGhvZHMgaW5zdGVhZCBvZiBwb2xpY2llcy4gV2hhdCBN VEQKPiAgICBzaG91bGQgZG8gaXMgdG8gcHJvdmlkZSByZWFkL3dyaXRlL2VyYXNlIG9wZXJhdGlv bnMsIGdldGluZyByaWQgb2YgY29kZXMKPiAgICBhYm91dCBjaHVuayBtYW5hZ2VtZW50LCBrbXNn IGR1bXBlciBhbmQgY29uZmlndXJhdGlvbi4KPiAzLiBlbmhhbmNlZCBmZWF0dXJlCj4gICAgTm90 IG9ubHkgc3RvcmUgbG9nLCBidXQgYWxzbyBzaG93IGl0IGFzIGZpbGVzLgo+ICAgIE5vdCBvbmx5 IGxvZywgYnV0IGFsc28gdHJpZ2dlciB0aW1lIGFuZCB0cmlnZ2VyIGNvdW50Lgo+ICAgIE5vdCBv bmx5IHBhbmljL29vcHMgbG9nLCBidXQgYWxzbyBsb2cgcmVjb3JkZXIgZm9yIHBtc2csIGNvbnNv bGUgYW5kCj4gICAgZnRyYWNlIGluIHRoZSBmdXR1cmUuCj4gCj4gU2lnbmVkLW9mZi1ieTogV2Vp WGlvbmcgTGlhbyA8bGlhb3dlaXhpb25nQGFsbHdpbm5lcnRlY2guY29tPgo+IFJlcG9ydGVkLWJ5 OiBrYnVpbGQgdGVzdCByb2JvdCA8bGtwQGludGVsLmNvbT4KCkkgZG9uJ3QgdGhpbmcgdGhlIHRl c3Qgcm9ib3QgaGFzIGEgbWVhbmluZyBoZXJlLgoKPiAtLS0KPiAgZHJpdmVycy9tdGQvS2NvbmZp ZyAgICAgfCAgMTAgKwo+ICBkcml2ZXJzL210ZC9NYWtlZmlsZSAgICB8ICAgMSArCj4gIGRyaXZl cnMvbXRkL210ZHBzdG9yZS5jIHwgNTMwICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKwo+ICAzIGZpbGVzIGNoYW5nZWQsIDU0MSBpbnNlcnRpb25zKCspCj4g IGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL210ZC9tdGRwc3RvcmUuYwo+IAo+IGRpZmYgLS1n aXQgYS9kcml2ZXJzL210ZC9LY29uZmlnIGIvZHJpdmVycy9tdGQvS2NvbmZpZwo+IGluZGV4IDQy ZDQwMWVhNjBlZS4uYTZlNTk0OTVhNzM4IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvbXRkL0tjb25m aWcKPiArKysgYi9kcml2ZXJzL210ZC9LY29uZmlnCj4gQEAgLTE3MCw2ICsxNzAsMTYgQEAgY29u ZmlnIE1URF9PT1BTCj4gIAkgIGJ1ZmZlciBpbiBhIGZsYXNoIHBhcnRpdGlvbiB3aGVyZSBpdCBj YW4gYmUgcmVhZCBiYWNrIGF0IHNvbWUKPiAgCSAgbGF0ZXIgcG9pbnQuCj4gIAo+ICtjb25maWcg TVREX1BTVE9SRQo+ICsJdHJpc3RhdGUgIkxvZyBwYW5pYy9vb3BzIHRvIGFuIE1URCBidWZmZXIg YmFzZSBvbiBwc3RvcmUiCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGJhc2VkCgo+ICsJZGVwZW5kcyBvbiBQU1RPUkVfQkxLT09QUwo+ICsJaGVscAo+ ICsJICBUaGlzIGVuYWJsZXMgcGFuaWMgYW5kIG9vcHMgbWVzc2FnZXMgdG8gYmUgbG9nZ2VkIHRv IGEgY2lyY3VsYXIKPiArCSAgYnVmZmVyIGluIGEgZmxhc2ggcGFydGl0aW9uIHdoZXJlIGl0IGNh biBiZSByZWFkIGJhY2sgYXMgZmlsZXMgYWZ0ZXIKPiArCSAgbW91bnRpbmcgcHN0b3JlIGZpbGVz eXN0ZW0uCj4gKwo+ICsJICBJZiB1bnN1cmUsIHNheSBOLgo+ICsKPiAgY29uZmlnIE1URF9TV0FQ Cj4gIAl0cmlzdGF0ZSAiU3dhcCBvbiBNVEQgZGV2aWNlIHN1cHBvcnQiCj4gIAlkZXBlbmRzIG9u IE1URCAmJiBTV0FQCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL01ha2VmaWxlIGIvZHJpdmVy cy9tdGQvTWFrZWZpbGUKPiBpbmRleCA1NmNjNjBjY2M0NzcuLjU5M2QwNTkzYTAzOCAxMDA2NDQK PiAtLS0gYS9kcml2ZXJzL210ZC9NYWtlZmlsZQo+ICsrKyBiL2RyaXZlcnMvbXRkL01ha2VmaWxl Cj4gQEAgLTIwLDYgKzIwLDcgQEAgb2JqLSQoQ09ORklHX1JGRF9GVEwpCQkrPSByZmRfZnRsLm8K PiAgb2JqLSQoQ09ORklHX1NTRkRDKQkJKz0gc3NmZGMubwo+ICBvYmotJChDT05GSUdfU01fRlRM KQkJKz0gc21fZnRsLm8KPiAgb2JqLSQoQ09ORklHX01URF9PT1BTKQkJKz0gbXRkb29wcy5vCj4g K29iai0kKENPTkZJR19NVERfUFNUT1JFKQkrPSBtdGRwc3RvcmUubwo+ICBvYmotJChDT05GSUdf TVREX1NXQVApCQkrPSBtdGRzd2FwLm8KPiAgCj4gIG5mdGwtb2JqcwkJOj0gbmZ0bGNvcmUubyBu ZnRsbW91bnQubwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tdGRwc3RvcmUuYyBiL2RyaXZl cnMvbXRkL210ZHBzdG9yZS5jCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAw MDAwMDAuLmFiNGFjZDNhOTAxMQo+IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJzL210ZC9t dGRwc3RvcmUuYwo+IEBAIC0wLDAgKzEsNTMwIEBACj4gKy8vIFNQRFgtTGljZW5zZS1JZGVudGlm aWVyOiBHUEwtMi4wCj4gKy8qCj4gKyAqIE1URCBPb3BzL1BhbmljIGxvZ2VyIGZvciBwc3RvcmUv YmxrCj4gKyAqCj4gKyAqIENvcHlyaWdodCAoQykgMjAxOSBXZWlYaW9uZyBMaWFvIDxsaWFvd2Vp eGlvbmdAZ2FsbHdpbm5lcnRlY2guY29tPgo+ICsgKgo+ICsgKiBUaGlzIHByb2dyYW0gaXMgZnJl ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQo+ICsgKiBp dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNp b24gMiBhcwo+ICsgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4K PiArICoKPiArICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg aXQgd2lsbCBiZSB1c2VmdWwsCj4gKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91 dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCj4gKyAqIE1FUkNIQU5UQUJJTElUWSBvciBG SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZQo+ICsgKiBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgoKVGhlIGxpY2Vuc2UgdGV4dCBpcyBu b3QgbmVlZGVkIHNpbmNlIHlvdSBhZGRlZCBTUERYIHRhZy4KCj4gKyAqCj4gKyAqLwo+ICsjZGVm aW5lIHByX2ZtdChmbXQpICJtdGRvb3BzLXBzdG9yZTogIiBmbXQKPiArCj4gKyNpbmNsdWRlIDxs aW51eC9rZXJuZWwuaD4KPiArI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgo+ICsjaW5jbHVkZSA8 bGludXgvYmxrb29wcy5oPgo+ICsjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgo+ICsjaW5jbHVk ZSA8bGludXgvYml0b3BzLmg+Cj4gKwo+ICsvKiBNYXhpbXVtIE1URCBwYXJ0aXRpb24gc2l6ZSAq Lwo+ICsjZGVmaW5lIE1URFBTVE9SRV9NQVhfTVREX1NJWkUgKDggKiAxMDI0ICogMTAyNCkKCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTWl84TQoKPiArCj4gK3N0YXRpYyBzdHJ1 Y3QgbXRkcHN0b3JlX2NvbnRleHQgewo+ICsJaW50IGluZGV4Owo+ICsJc3RydWN0IGJsa29vcHNf aW5mbyBib19pbmZvOwo+ICsJc3RydWN0IGJsa29vcHNfZGV2aWNlIGJvX2RldjsKPiArCXN0cnVj dCBtdGRfaW5mbyAqbXRkOwo+ICsJdW5zaWduZWQgbG9uZyAqcm1tYXA7CQkvKiByZW1vdmVkIGJp dCBtYXAgKi8KPiArCXVuc2lnbmVkIGxvbmcgKnVzZWRtYXA7CQkvKiB1c2VkIGJpdCBtYXAgKi8K PiArCS8qCj4gKwkgKiB1c2VkIGZvciBwYW5pYyB3cml0ZQo+ICsJICogQXMgdGhlcmUgYXJlIG5v IGJsb2NrX2lzYmFkIGZvciBwYW5pYyBjYXNlLCB3ZSBzaG91bGQga2VlcCB0aGlzCj4gKwkgKiBz dGF0dXMgYmVmb3JlIHBhbmljIHRvIGVuc3VyZSBwYW5pY193cml0ZSBub3QgZmFpbGVkLgo+ICsJ ICovCj4gKwl1bnNpZ25lZCBsb25nICpiYWRtYXA7CQkvKiBiYWQgYmxvY2sgYml0IG1hcCAqLwo+ ICt9IG9vcHNfY3h0Owo+ICsKPiArc3RhdGljIGludCBtdGRwc3RvcmVfYmxvY2tfaXNiYWQoc3Ry dWN0IG10ZHBzdG9yZV9jb250ZXh0ICpjeHQsIGxvZmZfdCBvZmYpCj4gK3sKPiArCWludCByZXQ7 Cj4gKwlzdHJ1Y3QgbXRkX2luZm8gKm10ZCA9IGN4dC0+bXRkOwo+ICsJdTY0IGJsa251bSA9IGRp dl91NjQob2ZmLCBtdGQtPmVyYXNlc2l6ZSk7Cj4gKwo+ICsJaWYgKHRlc3RfYml0KGJsa251bSwg Y3h0LT5iYWRtYXApKQo+ICsJCXJldHVybiB0cnVlOwo+ICsJcmV0ID0gbXRkX2Jsb2NrX2lzYmFk KG10ZCwgb2ZmKTsKPiArCWlmIChyZXQgPCAwKSB7Cj4gKwkJcHJfZXJyKCJtdGRfYmxvY2tfaXNi YWQgZmFpbGVkLCBhYm9ydGluZ1xuIik7Cj4gKwkJcmV0dXJuIHJldDsKPiArCX0gZWxzZSBpZiAo cmV0ID4gMCkgewo+ICsJCXNldF9iaXQoYmxrbnVtLCBjeHQtPmJhZG1hcCk7Cj4gKwkJcmV0dXJu IHRydWU7Cj4gKwl9Cj4gKwlyZXR1cm4gZmFsc2U7Cj4gK30KPiArCj4gK3N0YXRpYyBpbmxpbmUg aW50IG10ZHBzdG9yZV9wYW5pY19ibG9ja19pc2JhZChzdHJ1Y3QgbXRkcHN0b3JlX2NvbnRleHQg KmN4dCwKPiArCQlsb2ZmX3Qgb2ZmKQo+ICt7Cj4gKwlzdHJ1Y3QgbXRkX2luZm8gKm10ZCA9IGN4 dC0+bXRkOwo+ICsJdTY0IGJsa251bSA9IGRpdl91NjQob2ZmLCBtdGQtPmVyYXNlc2l6ZSk7Cj4g Kwo+ICsJcmV0dXJuIHRlc3RfYml0KGJsa251bSwgY3h0LT5iYWRtYXApOwo+ICt9Cj4gKwo+ICtz dGF0aWMgaW5saW5lIHZvaWQgbXRkcHN0b3JlX21hcmtfdXNlZChzdHJ1Y3QgbXRkcHN0b3JlX2Nv bnRleHQgKmN4dCwKPiArCQlsb2ZmX3Qgb2ZmKQo+ICt7Cj4gKwl1NjQgem9uZW51bSA9IGRpdl91 NjQob2ZmLCBjeHQtPmJvX2luZm8uZG1lc2dfc2l6ZSk7Cj4gKwo+ICsJcHJfZGVidWcoIm1hcmsg em9uZSAlbGx1IHVzZWRcbiIsIHpvbmVudW0pOwo+ICsJc2V0X2JpdCh6b25lbnVtLCBjeHQtPnVz ZWRtYXApOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW5saW5lIHZvaWQgbXRkcHN0b3JlX21hcmtfdW51 c2VkKHN0cnVjdCBtdGRwc3RvcmVfY29udGV4dCAqY3h0LAo+ICsJCWxvZmZfdCBvZmYpCj4gK3sK PiArCXU2NCB6b25lbnVtID0gZGl2X3U2NChvZmYsIGN4dC0+Ym9faW5mby5kbWVzZ19zaXplKTsK PiArCj4gKwlwcl9kZWJ1ZygibWFyayB6b25lICVsbHUgdW51c2VkXG4iLCB6b25lbnVtKTsKPiAr CWNsZWFyX2JpdCh6b25lbnVtLCBjeHQtPnVzZWRtYXApOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW5s aW5lIHZvaWQgbXRkcHN0b3JlX2Jsb2NrX21hcmtfdW51c2VkKHN0cnVjdCBtdGRwc3RvcmVfY29u dGV4dCAqY3h0LAo+ICsJCWxvZmZfdCBvZmYpCj4gK3sKPiArCXU2NCB6b25lbnVtID0gZGl2X3U2 NChvZmYsIGN4dC0+Ym9faW5mby5kbWVzZ19zaXplKTsKPiArCXUzMiB6b25lY250ID0gY3h0LT5t dGQtPmVyYXNlc2l6ZSAvIGN4dC0+Ym9faW5mby5kbWVzZ19zaXplOwo+ICsKPiArCXdoaWxlICh6 b25lY250ID4gMCkgewo+ICsJCXByX2RlYnVnKCJtYXJrIHpvbmUgJWxsdSB1bnVzZWRcbiIsIHpv bmVudW0pOwo+ICsJCWNsZWFyX2JpdCh6b25lbnVtLCBjeHQtPnVzZWRtYXApOwo+ICsJCXpvbmVu dW0rKzsKPiArCQl6b25lY250LS07Cj4gKwl9Cj4gK30KPiArCj4gK3N0YXRpYyBpbmxpbmUgaW50 IG10ZHBzdG9yZV9pc191c2VkKHN0cnVjdCBtdGRwc3RvcmVfY29udGV4dCAqY3h0LCBsb2ZmX3Qg b2ZmKQo+ICt7Cj4gKwl1NjQgem9uZW51bSA9IGRpdl91NjQob2ZmLCBjeHQtPmJvX2luZm8uZG1l c2dfc2l6ZSk7Cj4gKwl1NjQgYmxrbnVtID0gZGl2X3U2NChvZmYsIGN4dC0+bXRkLT5lcmFzZXNp emUpOwo+ICsKPiArCWlmICh0ZXN0X2JpdChibGtudW0sIGN4dC0+YmFkbWFwKSkKPiArCQlyZXR1 cm4gdHJ1ZTsKPiArCXJldHVybiB0ZXN0X2JpdCh6b25lbnVtLCBjeHQtPnVzZWRtYXApOwo+ICt9 Cj4gKwo+ICtzdGF0aWMgaW50IG10ZHBzdG9yZV9ibG9ja19pc191c2VkKHN0cnVjdCBtdGRwc3Rv cmVfY29udGV4dCAqY3h0LAo+ICsJCWxvZmZfdCBvZmYpCj4gK3sKPiArCXU2NCB6b25lbnVtID0g ZGl2X3U2NChvZmYsIGN4dC0+Ym9faW5mby5kbWVzZ19zaXplKTsKPiArCXUzMiB6b25lY250ID0g Y3h0LT5tdGQtPmVyYXNlc2l6ZSAvIGN4dC0+Ym9faW5mby5kbWVzZ19zaXplOwo+ICsKPiArCXdo aWxlICh6b25lY250ID4gMCkgewo+ICsJCWlmICh0ZXN0X2JpdCh6b25lbnVtLCBjeHQtPnVzZWRt YXApKQo+ICsJCQlyZXR1cm4gdHJ1ZTsKPiArCQl6b25lbnVtKys7Cj4gKwkJem9uZWNudC0tOwo+ ICsJfQo+ICsJcmV0dXJuIGZhbHNlOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IG10ZHBzdG9yZV9p c19lbXB0eShzdHJ1Y3QgbXRkcHN0b3JlX2NvbnRleHQgKmN4dCwgY2hhciAqYnVmLAo+ICsJCXNp emVfdCBzaXplKQo+ICt7Cj4gKwlzdHJ1Y3QgbXRkX2luZm8gKm10ZCA9IGN4dC0+bXRkOwo+ICsJ c2l6ZV90IHN6Owo+ICsJaW50IGk7Cj4gKwo+ICsJc3ogPSBtaW5fdCh1aW50MzJfdCwgc2l6ZSwg bXRkLT53cml0ZXNpemUgLyA0KTsKPiArCWZvciAoaSA9IDA7IGkgPCBzejsgaSsrKSB7Cj4gKwkJ aWYgKGJ1ZltpXSAhPSAoY2hhcikweEZGKQo+ICsJCQlyZXR1cm4gZmFsc2U7Cj4gKwl9Cj4gKwly ZXR1cm4gdHJ1ZTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgbXRkcHN0b3JlX21hcmtfcmVtb3Zl ZChzdHJ1Y3QgbXRkcHN0b3JlX2NvbnRleHQgKmN4dCwgbG9mZl90IG9mZikKPiArewo+ICsJdTY0 IHpvbmVudW0gPSBkaXZfdTY0KG9mZiwgY3h0LT5ib19pbmZvLmRtZXNnX3NpemUpOwo+ICsKPiAr CXByX2RlYnVnKCJtYXJrIHpvbmUgJWxsdSByZW1vdmVkXG4iLCB6b25lbnVtKTsKPiArCXNldF9i aXQoem9uZW51bSwgY3h0LT5ybW1hcCk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIG10ZHBzdG9y ZV9ibG9ja19jbGVhcl9yZW1vdmVkKHN0cnVjdCBtdGRwc3RvcmVfY29udGV4dCAqY3h0LAo+ICsJ CWxvZmZfdCBvZmYpCj4gK3sKPiArCXU2NCB6b25lbnVtID0gZGl2X3U2NChvZmYsIGN4dC0+Ym9f aW5mby5kbWVzZ19zaXplKTsKPiArCXUzMiB6b25lY250ID0gY3h0LT5tdGQtPmVyYXNlc2l6ZSAv IGN4dC0+Ym9faW5mby5kbWVzZ19zaXplOwo+ICsKPiArCXdoaWxlICh6b25lY250ID4gMCkgewo+ ICsJCWNsZWFyX2JpdCh6b25lbnVtLCBjeHQtPnJtbWFwKTsKPiArCQl6b25lbnVtKys7Cj4gKwkJ em9uZWNudC0tOwo+ICsJfQo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IG10ZHBzdG9yZV9ibG9ja19p c19yZW1vdmVkKHN0cnVjdCBtdGRwc3RvcmVfY29udGV4dCAqY3h0LAo+ICsJCWxvZmZfdCBvZmYp Cj4gK3sKPiArCXU2NCB6b25lbnVtID0gZGl2X3U2NChvZmYsIGN4dC0+Ym9faW5mby5kbWVzZ19z aXplKTsKPiArCXUzMiB6b25lY250ID0gY3h0LT5tdGQtPmVyYXNlc2l6ZSAvIGN4dC0+Ym9faW5m by5kbWVzZ19zaXplOwo+ICsKPiArCXdoaWxlICh6b25lY250ID4gMCkgewo+ICsJCWlmICh0ZXN0 X2JpdCh6b25lbnVtLCBjeHQtPnJtbWFwKSkKPiArCQkJcmV0dXJuIHRydWU7Cj4gKwkJem9uZW51 bSsrOwo+ICsJCXpvbmVjbnQtLTsKPiArCX0KPiArCXJldHVybiBmYWxzZTsKPiArfQo+ICsKPiAr c3RhdGljIGludCBtdGRwc3RvcmVfZXJhc2VfZG8oc3RydWN0IG10ZHBzdG9yZV9jb250ZXh0ICpj eHQsIGxvZmZfdCBvZmYpCj4gK3sKPiArCXN0cnVjdCBlcmFzZV9pbmZvIGVyYXNlOwo+ICsJaW50 IHJldDsKPiArCj4gKwlwcl9kZWJ1ZygidHJ5IHRvIGVyYXNlIG9mZiAweCVsbHhcbiIsIG9mZik7 Cj4gKwllcmFzZS5sZW4gPSBjeHQtPm10ZC0+ZXJhc2VzaXplOwo+ICsJZXJhc2UuYWRkciA9IG9m ZjsKPiArCXJldCA9IG10ZF9lcmFzZShjeHQtPm10ZCwgJmVyYXNlKTsKPiArCWlmICghcmV0KQo+ ICsJCW10ZHBzdG9yZV9ibG9ja19jbGVhcl9yZW1vdmVkKGN4dCwgb2ZmKTsKPiArCWVsc2UKPiAr CQlwcl9lcnIoImVyYXNlIG9mIHJlZ2lvbiBbMHglbGx4LCAweCVsbHhdIG9uIFwiJXNcIiBmYWls ZWRcbiIsCj4gKwkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpZXJhc2UuYWRkciwKPiArCQkg ICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZyllcmFzZS5sZW4sIGN4dC0+Ym9faW5mby5kZXZpY2Up Owo+ICsJcmV0dXJuIHJldDsKPiArfQo+ICsKPiArLyoKPiArICogY2FsbGVkIHdoaWxlIHJlbW92 aW5nIGZpbGUKPiArICoKPiArICogQXZvaWRpbmcgb3ZlciBlcmFzaW5nLCBkbyBlcmFzZSBvbmx5 IHdoZW4gYWxsIHpvbmVzIGFyZSByZW1vdmVkIG9yIHVudXNlZC4KPiArICogRW5zdXJlIHRvIHJl bW92ZSB3aGVuIHVucmVnaXN0ZXIgYnkgcmVhZGluZywgZXJhc2luZyBhbmQgd3J0aWluZyBiYWNr Lgo+ICsgKi8KPiArc3RhdGljIHNzaXplX3QgbXRkcHN0b3JlX2VyYXNlKHNpemVfdCBzaXplLCBs b2ZmX3Qgb2ZmKQo+ICt7Cj4gKwlzdHJ1Y3QgbXRkcHN0b3JlX2NvbnRleHQgKmN4dCA9ICZvb3Bz X2N4dDsKPiArCj4gKwlpZiAobXRkcHN0b3JlX2Jsb2NrX2lzYmFkKGN4dCwgb2ZmKSkKPiArCQly ZXR1cm4gLUVJTzsKPiArCj4gKwltdGRwc3RvcmVfbWFya191bnVzZWQoY3h0LCBvZmYpOwo+ICsK PiArCWlmIChsaWtlbHkobXRkcHN0b3JlX2Jsb2NrX2lzX3VzZWQoY3h0LCBvZmYpKSkgewo+ICsJ CW10ZHBzdG9yZV9tYXJrX3JlbW92ZWQoY3h0LCBvZmYpOwo+ICsJCXJldHVybiAwOwo+ICsJfQo+ ICsKPiArCS8qIGFsbCB6b25lcyBhcmUgdW51c2VkLCBlcmFzZSBpdCAqLwo+ICsJb2ZmID0gQUxJ R05fRE9XTihvZmYsIGN4dC0+bXRkLT5lcmFzZXNpemUpOwo+ICsJcmV0dXJuIG10ZHBzdG9yZV9l cmFzZV9kbyhjeHQsIG9mZik7Cj4gK30KPiArCj4gKy8qCj4gKyAqIFdoYXQgaXMgc2VjdXJldHkg Zm9yIG10ZHBzdG9yZT8KCiAgICAgICAgICAgICAgc2VjdXJpdHkKCj4gKyAqIEFzIHRoZXJlIGlz IG5vIGVyYXNlIGZvciBwYW5pYyBjYXNlLCB3ZSBzaG91bGQgZW5zdXJlIGF0IGxlYXN0IG9uZSB6 b25lCj4gKyAqIGlzIHdyaXRhYmxlLiBPdGhlcndpc2UsIHBhbmljIHdyaXRlIHdpbGwgYmUgZmFp bGVkLgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lsbCBmYWls LgoKPiArICogSWYgem9uZSBpcyB1c2VkLCB3cml0ZSBvcGVyYXRpb24gd2lsbCByZXR1cm4gLUVO RVhULCB3aGljaCBtZWFucyB0aGF0Cj4gKyAqIHBzdG9yZS9ibGsgd2lsbCB0cnkgb25lIGJ5IG9u ZSB1bnRpbCBnZXQgYSBlbXB0eSB6b25lLiBTbywgaXQncyBubyBuZWVkCgogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXQgZ2V0cyBhbiBlbXB0eSB6b25lLiBTbyBp dAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgbm90IG5lZWRl ZCB0byAuLi4KICAgIAo+ICsgKiB0byBlbnN1cmUgbmV4dCB6b25lIGlzIGVtcHR5LCBidXQgYXQg bGVhc3Qgb25lLgoKICAgICAgICAgICAgICAgdGhlCgo+ICsgKi8KPiArc3RhdGljIGludCBtdGRw c3RvcmVfc2VjdXJpdHkoc3RydWN0IG10ZHBzdG9yZV9jb250ZXh0ICpjeHQsIGxvZmZfdCBvZmYp Cj4gK3sKPiArCWludCByZXQgPSAwLCBpOwo+ICsJdTMyIHpvbmVudW0gPSAodTMyKWRpdl91NjQo b2ZmLCBjeHQtPmJvX2luZm8uZG1lc2dfc2l6ZSk7Cj4gKwl1MzIgem9uZWNudCA9ICh1MzIpZGl2 X3U2NChjeHQtPm10ZC0+c2l6ZSwgY3h0LT5ib19pbmZvLmRtZXNnX3NpemUpOwo+ICsJdTMyIGJs a2NudCA9ICh1MzIpZGl2X3U2NChjeHQtPm10ZC0+c2l6ZSwgY3h0LT5tdGQtPmVyYXNlc2l6ZSk7 Cj4gKwl1MzIgZXJhc2VzaXplID0gY3h0LT5tdGQtPmVyYXNlc2l6ZTsKPiArCj4gKwlmb3IgKGkg PSAwOyBpIDwgem9uZWNudDsgaSsrKSB7Cj4gKwkJdTMyIG51bSA9ICh6b25lbnVtICsgaSkgJSB6 b25lY250Owo+ICsKPiArCQkvKiBmb3VuZCBlbXB0eSB6b25lICovCj4gKwkJaWYgKCF0ZXN0X2Jp dChudW0sIGN4dC0+dXNlZG1hcCkpCj4gKwkJCXJldHVybiAwOwo+ICsJfQo+ICsKPiArCS8qIElm IHRoZXJlIGlzIG5vIGFueSBlbXB0eSB6b25lLCB3ZSBoYXZlIG5vIHdheSBidXQgdG8gZG8gZXJh c2UgKi8KPiArCW9mZiA9IEFMSUdOX0RPV04ob2ZmLCBlcmFzZXNpemUpOwo+ICsJd2hpbGUgKGJs a2NudC0tKSB7Cj4gKwkJZGl2NjRfdTY0X3JlbShvZmYgKyBlcmFzZXNpemUsIGN4dC0+bXRkLT5z aXplLCAodTY0ICopJm9mZik7Cj4gKwo+ICsJCWlmIChtdGRwc3RvcmVfYmxvY2tfaXNiYWQoY3h0 LCBvZmYpKQo+ICsJCQljb250aW51ZTsKPiArCj4gKwkJcmV0ID0gbXRkcHN0b3JlX2VyYXNlX2Rv KGN4dCwgb2ZmKTsKPiArCQlpZiAoIXJldCkgewo+ICsJCQltdGRwc3RvcmVfYmxvY2tfbWFya191 bnVzZWQoY3h0LCBvZmYpOwo+ICsJCQlicmVhazsKPiArCQl9Cj4gKwl9Cj4gKwo+ICsJaWYgKHJl dCkKPiArCQlwcl9lcnIoImFsbCBibG9ja3MgYmFkIVxuIik7Cj4gKwlwcl9kZWJ1ZygiZW5kIHNl Y3VyaXR5XG4iKTsKPiArCXJldHVybiByZXQ7Cj4gK30KPiArCj4gK3N0YXRpYyBzc2l6ZV90IG10 ZHBzdG9yZV93cml0ZShjb25zdCBjaGFyICpidWYsIHNpemVfdCBzaXplLCBsb2ZmX3Qgb2ZmKQo+ ICt7Cj4gKwlzdHJ1Y3QgbXRkcHN0b3JlX2NvbnRleHQgKmN4dCA9ICZvb3BzX2N4dDsKPiArCXNp emVfdCByZXRsZW47Cj4gKwlpbnQgcmV0Owo+ICsKPiArCWlmIChtdGRwc3RvcmVfYmxvY2tfaXNi YWQoY3h0LCBvZmYpKQo+ICsJCXJldHVybiAtRU5FWFQ7Cj4gKwo+ICsJLyogem9uZSBpcyB1c2Vk LCBwbGVhc2UgdHJ5IG5leHQgb25lICovCj4gKwlpZiAobXRkcHN0b3JlX2lzX3VzZWQoY3h0LCBv ZmYpKQo+ICsJCXJldHVybiAtRU5FWFQ7Cj4gKwo+ICsJcHJfZGVidWcoInRyeSB0byB3cml0ZSBv ZmYgMHglbGx4IHNpemUgJXp1XG4iLCBvZmYsIHNpemUpOwo+ICsJcmV0ID0gbXRkX3dyaXRlKGN4 dC0+bXRkLCBvZmYsIHNpemUsICZyZXRsZW4sICh1X2NoYXIgKilidWYpOwo+ICsJaWYgKHJldCA8 IDAgfHwgcmV0bGVuICE9IHNpemUpIHsKPiArCQlwcl9lcnIoIndyaXRlIGZhaWx1cmUgYXQgJWxs ZCAoJXp1IG9mICV6dSB3cml0dGVuKSwgZXJyICVkXG4iLAo+ICsJCQkJb2ZmLCByZXRsZW4sIHNp emUsIHJldCk7Cj4gKwkJcmV0dXJuIC1FSU87Cj4gKwl9Cj4gKwltdGRwc3RvcmVfbWFya191c2Vk KGN4dCwgb2ZmKTsKPiArCj4gKwltdGRwc3RvcmVfc2VjdXJpdHkoY3h0LCBvZmYpOwo+ICsJcmV0 dXJuIHJldGxlbjsKPiArfQo+ICsKPiArLyoKPiArICogQWxsIHpvbmVzIHdpbGwgYmUgcmVhZCBh cyBwc3RvcmUvYmxrIHdpbGwgcmVhZCB6b25lIG9uZSBieSBvbmUgd2hlbiBkbwo+ICsgKiByZWNv dmVyLgo+ICsgKi8KPiArc3RhdGljIHNzaXplX3QgbXRkcHN0b3JlX3JlYWQoY2hhciAqYnVmLCBz aXplX3Qgc2l6ZSwgbG9mZl90IG9mZikKPiArewo+ICsJc3RydWN0IG10ZHBzdG9yZV9jb250ZXh0 ICpjeHQgPSAmb29wc19jeHQ7Cj4gKwlzaXplX3QgcmV0bGVuOwo+ICsJaW50IHJldDsKPiArCj4g KwlpZiAobXRkcHN0b3JlX2Jsb2NrX2lzYmFkKGN4dCwgb2ZmKSkKPiArCQlyZXR1cm4gLUVORVhU Owo+ICsKPiArCXByX2RlYnVnKCJ0cnkgdG8gcmVhZCBvZmYgMHglbGx4IHNpemUgJXp1XG4iLCBv ZmYsIHNpemUpOwo+ICsJcmV0ID0gbXRkX3JlYWQoY3h0LT5tdGQsIG9mZiwgc2l6ZSwgJnJldGxl biwgKHVfY2hhciAqKWJ1Zik7Cj4gKwlpZiAoKHJldCA8IDAgJiYgIW10ZF9pc19iaXRmbGlwKHJl dCkpIHx8IHNpemUgIT0gcmV0bGVuKSAgewoKSUlSQyBzaXplICE9IHJldGxlbiBkb2VzIG5vdCBt ZWFuIGl0IGZhaWxlZCwgYnV0IHRoYXQgeW91IHNob3VsZApjb250aW51ZSByZWFkaW5nIGFmdGVy IHJldGxlbiBieXRlcywgbm8/CgpBbHNvLCBtdGRfaXNfYml0ZmxpcCgpIGRvZXMgbm90IG1lYW4g dGhhdCB5b3UgYXJlIHJlYWRpbmcgYSBmYWxzZQpidWZmZXIsIGJ1dCB0aGF0IHRoZSBkYXRhIGhh cyBiZWVuIGNvcnJlY3RlZCBhcyBpdCBjb250YWluZWQgYml0ZmxpcHMuCm10ZF9pc19lY2NlcnIo KSBob3dldmVyLCB3b3VsZCBiZSBtZWFuaW5nZnVsLgoKPiArCQlwcl9lcnIoInJlYWQgZmFpbHVy ZSBhdCAlbGxkICglenUgb2YgJXp1IHJlYWQpLCBlcnIgJWRcbiIsCj4gKwkJCQlvZmYsIHJldGxl biwgc2l6ZSwgcmV0KTsKPiArCQlyZXR1cm4gLUVJTzsKPiArCX0KPiArCj4gKwlpZiAobXRkcHN0 b3JlX2lzX2VtcHR5KGN4dCwgYnVmLCBzaXplKSkKPiArCQltdGRwc3RvcmVfbWFya191bnVzZWQo Y3h0LCBvZmYpOwo+ICsJZWxzZQo+ICsJCW10ZHBzdG9yZV9tYXJrX3VzZWQoY3h0LCBvZmYpOwo+ ICsKPiArCW10ZHBzdG9yZV9zZWN1cml0eShjeHQsIG9mZik7Cj4gKwlyZXR1cm4gcmV0bGVuOwo+ ICt9Cj4gKwo+ICtzdGF0aWMgc3NpemVfdCBtdGRwc3RvcmVfcGFuaWNfd3JpdGUoY29uc3QgY2hh ciAqYnVmLCBzaXplX3Qgc2l6ZSwgbG9mZl90IG9mZikKPiArewo+ICsJc3RydWN0IG10ZHBzdG9y ZV9jb250ZXh0ICpjeHQgPSAmb29wc19jeHQ7Cj4gKwlzaXplX3QgcmV0bGVuOwo+ICsJaW50IHJl dDsKPiArCj4gKwlpZiAobXRkcHN0b3JlX3BhbmljX2Jsb2NrX2lzYmFkKGN4dCwgb2ZmKSkKPiAr CQlyZXR1cm4gLUVORVhUOwo+ICsKPiArCS8qIHpvbmUgaXMgdXNlZCwgcGxlYXNlIHRyeSBuZXh0 IG9uZSAqLwo+ICsJaWYgKG10ZHBzdG9yZV9pc191c2VkKGN4dCwgb2ZmKSkKPiArCQlyZXR1cm4g LUVORVhUOwo+ICsKPiArCXJldCA9IG10ZF9wYW5pY193cml0ZShjeHQtPm10ZCwgb2ZmLCBzaXpl LCAmcmV0bGVuLCAodV9jaGFyICopYnVmKTsKPiArCWlmIChyZXQgPCAwIHx8IHNpemUgIT0gcmV0 bGVuKSB7Cj4gKwkJcHJfZXJyKCJwYW5pYyB3cml0ZSBmYWlsdXJlIGF0ICVsbGQgKCV6dSBvZiAl enUgcmVhZCksIGVyciAlZFxuIiwKPiArCQkJCW9mZiwgcmV0bGVuLCBzaXplLCByZXQpOwo+ICsJ CXJldHVybiAtRUlPOwo+ICsJfQo+ICsJbXRkcHN0b3JlX21hcmtfdXNlZChjeHQsIG9mZik7Cj4g Kwo+ICsJcmV0dXJuIHJldGxlbjsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgbXRkcHN0b3JlX25v dGlmeV9hZGQoc3RydWN0IG10ZF9pbmZvICptdGQpCj4gK3sKPiArCWludCByZXQ7Cj4gKwlzdHJ1 Y3QgbXRkcHN0b3JlX2NvbnRleHQgKmN4dCA9ICZvb3BzX2N4dDsKPiArCXN0cnVjdCBibGtvb3Bz X2luZm8gKmluZm8gPSAmY3h0LT5ib19pbmZvOwo+ICsJdW5zaWduZWQgbG9uZyBsb25nY250Owo+ ICsKPiArCWlmICghc3RyY21wKG10ZC0+bmFtZSwgaW5mby0+ZGV2aWNlKSkKPiArCQljeHQtPmlu ZGV4ID0gbXRkLT5pbmRleDsKPiArCj4gKwlpZiAobXRkLT5pbmRleCAhPSBjeHQtPmluZGV4IHx8 IGN4dC0+aW5kZXggPCAwKQo+ICsJCXJldHVybjsKPiArCj4gKwlwcl9kZWJ1ZygiZm91bmQgbWF0 Y2hpbmcgTVREIGRldmljZSAlc1xuIiwgbXRkLT5uYW1lKTsKPiArCj4gKwlpZiAobXRkLT5zaXpl IDwgaW5mby0+ZG1lc2dfc2l6ZSAqIDIpIHsKPiArCQlwcl9lcnIoIk1URCBwYXJ0aXRpb24gJWQg bm90IGJpZyBlbm91Z2hcbiIsIG10ZC0+aW5kZXgpOwo+ICsJCXJldHVybjsKPiArCX0KPiArCWlm IChtdGQtPmVyYXNlc2l6ZSA8IGluZm8tPmRtZXNnX3NpemUpIHsKPiArCQlwcl9lcnIoImVyYXNl YmxvY2sgc2l6ZSBvZiBNVEQgcGFydGl0aW9uICVkIHRvbyBzbWFsbFxuIiwKPiArCQkJCW10ZC0+ aW5kZXgpOwoKV2hhdCBpcyB0aGUgdXN1YWwgc2l6ZSBvZiBkbWVzZz8gQ291bGQgdGhpcyBjaGVj ayBiZSB0b28gbGltaXRpbmc/Cgo+ICsJCXJldHVybjsKPiArCX0KPiArCWlmICh1bmxpa2VseShp bmZvLT5kbWVzZ19zaXplICUgbXRkLT53cml0ZXNpemUpKSB7Cj4gKwkJcHJfZXJyKCJyZWNvcmQg c2l6ZSAlbHUgS0IgbXVzdCBhbGlnbiB0byB3cml0ZSBzaXplICVkIEtCXG4iLAo+ICsJCQkJaW5m by0+ZG1lc2dfc2l6ZSAvIDEwMjQsCj4gKwkJCQltdGQtPndyaXRlc2l6ZSAvIDEwMjQpOwoKVGhp cyBjb25kaXRpb24gaXMgd2VpcmQsIHdoeSB3b3VsZCB5b3UgY2hlY2sgdGhpcz8KCj4gKwkJcmV0 dXJuOwo+ICsJfQo+ICsJaWYgKHVubGlrZWx5KG10ZC0+c2l6ZSA+IE1URFBTVE9SRV9NQVhfTVRE X1NJWkUpKSB7Cj4gKwkJcHJfZXJyKCJtdGQlZCBpcyB0b28gbGFyZ2UgKGxpbWl0IGlzICVkIE1p QilcbiIsCj4gKwkJCQltdGQtPmluZGV4LAo+ICsJCQkJTVREUFNUT1JFX01BWF9NVERfU0laRSAv IDEwMjQgLyAxMDI0KTsKClNhbWUgcXVlc3Rpb24/IEkgY291bGQgdW5kZXJzdGFuZCB0aGF0IGl0 IGlzIGVhc2llciB0byBtYW5hZ2UgYmxvY2tzCmtub3dpbmcgdGhlaXIgbWF4aW11bSBudW1iZXIg dGhvdWdoLgoKPiArCQlyZXR1cm47Cj4gKwl9Cj4gKwo+ICsJbG9uZ2NudCA9IEJJVFNfVE9fTE9O R1MoZGl2X3U2NChtdGQtPnNpemUsIGluZm8tPmRtZXNnX3NpemUpKTsKPiArCWN4dC0+cm1tYXAg PSBrY2FsbG9jKGxvbmdjbnQsIHNpemVvZihsb25nKSwgR0ZQX0tFUk5FTCk7Cj4gKwljeHQtPnVz ZWRtYXAgPSBrY2FsbG9jKGxvbmdjbnQsIHNpemVvZihsb25nKSwgR0ZQX0tFUk5FTCk7Cj4gKwo+ ICsJbG9uZ2NudCA9IEJJVFNfVE9fTE9OR1MoZGl2X3U2NChtdGQtPnNpemUsIG10ZC0+ZXJhc2Vz aXplKSk7Cj4gKwljeHQtPmJhZG1hcCA9IGtjYWxsb2MobG9uZ2NudCwgc2l6ZW9mKGxvbmcpLCBH RlBfS0VSTkVMKTsKPiArCj4gKwljeHQtPmJvX2Rldi50b3RhbF9zaXplID0gbXRkLT5zaXplOwo+ ICsJLyoganVzdCBzdXBwb3J0IGRtZXNnIHJpZ2h0IG5vdyAqLwo+ICsJY3h0LT5ib19kZXYuZmxh Z3MgPSBCTEtPT1BTX0RFVl9TVVBQT1JUX0RNRVNHOwo+ICsJY3h0LT5ib19kZXYucmVhZCA9IG10 ZHBzdG9yZV9yZWFkOwo+ICsJY3h0LT5ib19kZXYud3JpdGUgPSBtdGRwc3RvcmVfd3JpdGU7Cj4g KwljeHQtPmJvX2Rldi5lcmFzZSA9IG10ZHBzdG9yZV9lcmFzZTsKPiArCWN4dC0+Ym9fZGV2LnBh bmljX3dyaXRlID0gbXRkcHN0b3JlX3BhbmljX3dyaXRlOwo+ICsKPiArCXJldCA9IGJsa29vcHNf cmVnaXN0ZXJfZGV2aWNlKCZjeHQtPmJvX2Rldik7Cj4gKwlpZiAocmV0KSB7Cj4gKwkJcHJfZXJy KCJtdGQlZCByZWdpc3RlciB0byBibGtvb3BzIGZhaWxlZFxuIiwgbXRkLT5pbmRleCk7Cj4gKwkJ cmV0dXJuOwo+ICsJfQo+ICsJY3h0LT5tdGQgPSBtdGQ7Cj4gKwlwcl9pbmZvKCJBdHRhY2hlZCB0 byBNVEQgZGV2aWNlICVkXG4iLCBtdGQtPmluZGV4KTsKPiArfQo+ICsKPiArc3RhdGljIGludCBt dGRwc3RvcmVfZmx1c2hfcmVtb3ZlZF9kbyhzdHJ1Y3QgbXRkcHN0b3JlX2NvbnRleHQgKmN4dCwK PiArCQlsb2ZmX3Qgb2ZmLCBzaXplX3Qgc2l6ZSkKPiArewo+ICsJc3RydWN0IG10ZF9pbmZvICpt dGQgPSBjeHQtPm10ZDsKPiArCXVfY2hhciAqYnVmOwo+ICsJaW50IHJldDsKPiArCXNpemVfdCBy ZXRsZW47Cj4gKwlzdHJ1Y3QgZXJhc2VfaW5mbyBlcmFzZTsKPiArCj4gKwlidWYgPSBrbWFsbG9j KG10ZC0+ZXJhc2VzaXplLCBHRlBfS0VSTkVMKTsKPiArCWlmICghYnVmKQo+ICsJCXJldHVybiAt RU5PTUVNOwo+ICsKPiArCS8qIDFzdC4gcmVhZCB0byBjYWNoZSAqLwo+ICsJcmV0ID0gbXRkX3Jl YWQobXRkLCBvZmYsIG10ZC0+ZXJhc2VzaXplLCAmcmV0bGVuLCBidWYpOwo+ICsJaWYgKHJldCB8 fCByZXRsZW4gIT0gbXRkLT5lcmFzZXNpemUpCj4gKwkJZ290byBmcmVlOwo+ICsKPiArCS8qIDJu ZC4gZXJhc2UgYmxvY2sgKi8KPiArCWVyYXNlLmxlbiA9IG10ZC0+ZXJhc2VzaXplOwo+ICsJZXJh c2UuYWRkciA9IG9mZjsKPiArCXJldCA9IG10ZF9lcmFzZShtdGQsICZlcmFzZSk7Cj4gKwlpZiAo cmV0KQo+ICsJCWdvdG8gZnJlZTsKPiArCj4gKwkvKiAzcmQuIHdyaXRlIGJhY2sgKi8KPiArCXdo aWxlIChzaXplKSB7Cj4gKwkJdW5zaWduZWQgaW50IHpvbmVzaXplID0gY3h0LT5ib19pbmZvLmRt ZXNnX3NpemU7Cj4gKwo+ICsJCS8qIHJlbW92ZSBtdXN0IGNsZWFyIHVzZWQgYml0ICovCj4gKwkJ aWYgKG10ZHBzdG9yZV9pc191c2VkKGN4dCwgb2ZmKSkKPiArCQkJbXRkX3dyaXRlKG10ZCwgb2Zm LCB6b25lc2l6ZSwgJnJldGxlbiwgYnVmKTsKCkJlc2lkZXMgdGhlIGZhY3QgdGhhdCBzaG91bGQg ZGVmaW5pdGVseSBjaGVjayB0aGUgd3JpdGUgcmV0dXJuIGNvZGUsIEkKZG9uJ3QgdW5kZXJzdGFu ZCB3aGF0IHlvdSBkbyBpbiB0aGlzIGZ1bmN0aW9uLiBXaGF0IGRvZXMKZmx1c2hfcmVtb3ZlZF9k byBtZWFuPwoKPiArCj4gKwkJb2ZmICs9IHpvbmVzaXplOwo+ICsJCXNpemUgLT0gbWluX3QodW5z aWduZWQgaW50LCB6b25lc2l6ZSwgc2l6ZSk7Cj4gKwl9Cj4gKwo+ICtmcmVlOgo+ICsJa2ZyZWUo YnVmKTsKPiArCXJldHVybiByZXQ7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgbXRkcHN0b3JlX2Zs dXNoX3JlbW92ZWQoc3RydWN0IG10ZHBzdG9yZV9jb250ZXh0ICpjeHQpCj4gK3sKPiArCXN0cnVj dCBtdGRfaW5mbyAqbXRkID0gY3h0LT5tdGQ7Cj4gKwlpbnQgcmV0Owo+ICsJbG9mZl90IG9mZjsK PiArCXUzMiBibGtjbnQgPSAodTMyKWRpdl91NjQobXRkLT5zaXplLCBtdGQtPmVyYXNlc2l6ZSk7 Cj4gKwo+ICsJZm9yIChvZmYgPSAwOyBibGtjbnQgPiAwOyBibGtjbnQtLSwgb2ZmICs9IG10ZC0+ ZXJhc2VzaXplKSB7Cj4gKwkJcmV0ID0gbXRkcHN0b3JlX2Jsb2NrX2lzX3JlbW92ZWQoY3h0LCBv ZmYpOwo+ICsJCWlmICghcmV0KSB7Cj4gKwkJCW9mZiArPSBtdGQtPmVyYXNlc2l6ZTsKPiArCQkJ Y29udGludWU7Cj4gKwkJfQo+ICsKPiArCQlyZXQgPSBtdGRwc3RvcmVfZmx1c2hfcmVtb3ZlZF9k byhjeHQsIG9mZiwgbXRkLT5lcmFzZXNpemUpOwo+ICsJCWlmIChyZXQpCj4gKwkJCXJldHVybiBy ZXQ7Cj4gKwl9Cj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgbXRkcHN0b3Jl X25vdGlmeV9yZW1vdmUoc3RydWN0IG10ZF9pbmZvICptdGQpCj4gK3sKPiArCXN0cnVjdCBtdGRw c3RvcmVfY29udGV4dCAqY3h0ID0gJm9vcHNfY3h0Owo+ICsKPiArCWlmIChtdGQtPmluZGV4ICE9 IGN4dC0+aW5kZXggfHwgY3h0LT5pbmRleCA8IDApCj4gKwkJcmV0dXJuOwo+ICsKPiArCW10ZHBz dG9yZV9mbHVzaF9yZW1vdmVkKGN4dCk7Cj4gKwo+ICsJYmxrb29wc191bnJlZ2lzdGVyX2Rldmlj ZSgmY3h0LT5ib19kZXYpOwo+ICsJa2ZyZWUoY3h0LT5iYWRtYXApOwo+ICsJa2ZyZWUoY3h0LT51 c2VkbWFwKTsKPiArCWtmcmVlKGN4dC0+cm1tYXApOwo+ICsJY3h0LT5tdGQgPSBOVUxMOwo+ICsJ Y3h0LT5pbmRleCA9IC0xOwo+ICt9Cj4gKwo+ICtzdGF0aWMgc3RydWN0IG10ZF9ub3RpZmllciBt dGRwc3RvcmVfbm90aWZpZXIgPSB7Cj4gKwkuYWRkCT0gbXRkcHN0b3JlX25vdGlmeV9hZGQsCj4g KwkucmVtb3ZlCT0gbXRkcHN0b3JlX25vdGlmeV9yZW1vdmUsCj4gK307Cj4gKwo+ICtzdGF0aWMg aW50IF9faW5pdCBtdGRwc3RvcmVfaW5pdCh2b2lkKQo+ICt7Cj4gKwlpbnQgcmV0Owo+ICsJc3Ry dWN0IG10ZHBzdG9yZV9jb250ZXh0ICpjeHQgPSAmb29wc19jeHQ7Cj4gKwlzdHJ1Y3QgYmxrb29w c19pbmZvICppbmZvID0gJmN4dC0+Ym9faW5mbzsKPiArCj4gKwlyZXQgPSBibGtvb3BzX2luZm8o aW5mbyk7Cj4gKwlpZiAodW5saWtlbHkocmV0KSkKPiArCQlyZXR1cm4gcmV0Owo+ICsKPiArCWlm IChzdHJsZW4oaW5mby0+ZGV2aWNlKSA9PSAwKSB7Cj4gKwkJcHJfZXJyKCJtdGQgZGV2aWNlIG11 c3QgYmUgc3VwcGxpZWRcbiIpOwo+ICsJCXJldHVybiAtRUlOVkFMOwo+ICsJfQo+ICsJaWYgKCFp bmZvLT5kbWVzZ19zaXplKSB7Cj4gKwkJcHJfZXJyKCJubyByZWNvcmRlciBlbmFibGVkXG4iKTsK PiArCQlyZXR1cm4gLUVJTlZBTDsKPiArCX0KPiArCj4gKwkvKiBTZXR1cCB0aGUgTVREIGRldmlj ZSB0byB1c2UgKi8KPiArCXJldCA9IGtzdHJ0b2ludCgoY2hhciAqKWluZm8tPmRldmljZSwgMCwg JmN4dC0+aW5kZXgpOwo+ICsJaWYgKHJldCkKPiArCQljeHQtPmluZGV4ID0gLTE7Cj4gKwo+ICsJ cmVnaXN0ZXJfbXRkX3VzZXIoJm10ZHBzdG9yZV9ub3RpZmllcik7Cj4gKwlyZXR1cm4gMDsKPiAr fQo+ICttb2R1bGVfaW5pdChtdGRwc3RvcmVfaW5pdCk7Cj4gKwo+ICtzdGF0aWMgdm9pZCBfX2V4 aXQgbXRkcHN0b3JlX2V4aXQodm9pZCkKPiArewo+ICsJdW5yZWdpc3Rlcl9tdGRfdXNlcigmbXRk cHN0b3JlX25vdGlmaWVyKTsKPiArfQo+ICttb2R1bGVfZXhpdChtdGRwc3RvcmVfZXhpdCk7Cj4g Kwo+ICtNT0RVTEVfTElDRU5TRSgiR1BMIik7Cj4gK01PRFVMRV9BVVRIT1IoIldlaVhpb25nIExp YW8gPGxpYW93ZWl4aW9uZ0BhbGx3aW5uZXJ0ZWNoLmNvbT4iKTsKPiArTU9EVUxFX0RFU0NSSVBU SU9OKCJNVEQgT29wcy9QYW5pYyBjb25zb2xlIGxvZ2dlci9kcml2ZXIiKTsKCgoKClRoYW5rcywK TWlxdcOobAoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fCkxpbnV4IE1URCBkaXNjdXNzaW9uIG1haWxpbmcgbGlzdApodHRwOi8vbGlzdHMuaW5m cmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LW10ZC8K