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 6A81CC001DF for ; Fri, 20 Oct 2023 18:10:48 +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:In-Reply-To:MIME-Version:References: 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=EF7kLUp4xPDqQQGbm1+d4T6qHgWCi147fP4kBk11/hE=; b=E1bDQqOhnqpTXR UiKupblqqMIb9s9j/X7EaCPW1s8o9squQtRJW0R0S/TbldLIsKqJuWI8j0oM5a2UqGVDXdC04ijyP fNC8SK8b9LdAe4zbJB4rFYPx5mVtKWvCvDuVaRWBa7kvRId9mfHNcAH9ugIDIlqsPklXA4vxx/STV wZMwvNyshuSl2thj1EEW71apkGHk794AnyzkWBlenRYoUnJ6r8B59Ummd9wzjUgcDYMR0+DERraHi oEtcP7IpgOX42nMTiLKUyYroLGvvXVUBYQJAQWJd55q+jYCyYIXvRiYoBnY2ZZZhdisxj6T8E6bjt VHdA7JuQGd+sYSB5PS/w==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1qttx1-002poj-21; Fri, 20 Oct 2023 18:10:23 +0000 Received: from dfw.source.kernel.org ([2604:1380:4641:c500::1]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1qttwx-002po2-1Y for linux-arm-kernel@lists.infradead.org; Fri, 20 Oct 2023 18:10:22 +0000 Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by dfw.source.kernel.org (Postfix) with ESMTP id C27D6622C7; Fri, 20 Oct 2023 18:10:18 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 246B7C433C7; Fri, 20 Oct 2023 18:10:11 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1697825418; bh=huzjkmkK3JHtkojgquf10gotpxcSpKfROn6Vk0s6UKs=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=bRDohqWWICIqD+Z8T215e+YaaQO0mjoV0/uko24CyEIoiY3zbZU/OOJoyJ+KOjS84 pi5kDcXXVRt3EknjnnUqbj1nGrgUqgBPKXfcha7pvQAmMAmei6RI6pMNqK45u22imc HFUy/EG4LLNDNEVmHrOmp9V0eNPamwAKGTDx+6J1AIAhnrHVtZ0IYpZATlvFtbs0O4 VaS6wMo8qMF8giuRecyOp/UGQfuAwOWgZm4HJ1vSiD9oObvsoTkQigsC6UbsoRyRAl 90sozgQr4kv4ZCymqvTMB1wnmB1kIbcWSQv2ycEwU3zgyxsY/fPX6hrqLBUQneixBp VOF+6tdepMS4A== Date: Fri, 20 Oct 2023 23:40:08 +0530 From: Manivannan Sadhasivam To: Frank Li Cc: Manivannan Sadhasivam , aisheng.dong@nxp.com, bhelgaas@google.com, devicetree@vger.kernel.org, festevam@gmail.com, imx@lists.linux.dev, jdmason@kudzu.us, kernel@pengutronix.de, kishon@kernel.org, kw@linux.com, linux-arm-kernel@lists.infradead.org, linux-imx@nxp.com, linux-kernel@vger.kernel.org, linux-pci@vger.kernel.org, lorenzo.pieralisi@arm.com, lpieralisi@kernel.org, maz@kernel.org, s.hauer@pengutronix.de, shawnguo@kernel.org, tglx@linutronix.de Subject: Re: [PATCH v2 1/5] PCI: endpoint: Add RC-to-EP doorbell support using platform MSI controllery Message-ID: <20231020181008.GF46191@thinkpad> References: <20230911220920.1817033-1-Frank.Li@nxp.com> <20230911220920.1817033-2-Frank.Li@nxp.com> <20231017183722.GB137137@thinkpad> <20231019150441.GA7254@thinkpad> <20231019172347.GC7254@thinkpad> <20231020171215.GA46191@thinkpad> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20231020_111019_610138_21DB420D X-CRM114-Status: GOOD ( 64.12 ) 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: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org T24gRnJpLCBPY3QgMjAsIDIwMjMgYXQgMDI6MDA6MDZQTSAtMDQwMCwgRnJhbmsgTGkgd3JvdGU6 Cj4gT24gRnJpLCBPY3QgMjAsIDIwMjMgYXQgMTA6NDI6MTVQTSArMDUzMCwgTWFuaXZhbm5hbiBT YWRoYXNpdmFtIHdyb3RlOgo+ID4gT24gVGh1LCBPY3QgMTksIDIwMjMgYXQgMDI6MTE6MjJQTSAt MDQwMCwgRnJhbmsgTGkgd3JvdGU6Cj4gPiA+IE9uIFRodSwgT2N0IDE5LCAyMDIzIGF0IDEwOjUz OjQ3UE0gKzA1MzAsIE1hbml2YW5uYW4gU2FkaGFzaXZhbSB3cm90ZToKPiA+ID4gPiBPbiBUaHUs IE9jdCAxOSwgMjAyMyBhdCAxMjowMDoyMlBNIC0wNDAwLCBGcmFuayBMaSB3cm90ZToKPiA+ID4g PiA+IE9uIFRodSwgT2N0IDE5LCAyMDIzIGF0IDA4OjM0OjQxUE0gKzA1MzAsIE1hbml2YW5uYW4g U2FkaGFzaXZhbSB3cm90ZToKPiA+ID4gPiA+ID4gT24gVHVlLCBPY3QgMTcsIDIwMjMgYXQgMDI6 NTU6NTdQTSAtMDQwMCwgRnJhbmsgTGkgd3JvdGU6Cj4gPiA+ID4gPiA+ID4gT24gV2VkLCBPY3Qg MTgsIDIwMjMgYXQgMTI6MDc6MjJBTSArMDUzMCwgTWFuaXZhbm5hbiBTYWRoYXNpdmFtIHdyb3Rl Ogo+ID4gPiA+ID4gPiA+ID4gT24gTW9uLCBTZXAgMTEsIDIwMjMgYXQgMDY6MDk6MTZQTSAtMDQw MCwgRnJhbmsgTGkgd3JvdGU6Cj4gPiA+ID4gPiA+ID4gPiA+IFRoaXMgY29tbWl0IGludHJvZHVj ZXMgYSBjb21tb24gbWV0aG9kIGZvciBzZW5kaW5nIG1lc3NhZ2VzIGZyb20gdGhlIFJvb3QKPiA+ ID4gPiA+ID4gPiA+ID4gQ29tcGxleCAoUkMpIHRvIHRoZSBFbmRwb2ludCAoRVApIGJ5IHV0aWxp emluZyB0aGUgcGxhdGZvcm0gTVNJIGludGVycnVwdAo+ID4gPiA+ID4gPiA+ID4gPiBjb250cm9s bGVyLCBzdWNoIGFzIEFSTSBHSUMsIGFzIGFuIEVQIGRvb3JiZWxsLiBNYXBzIHRoZSBtZW1vcnkg YXNzaWduZWQKPiA+ID4gPiA+ID4gPiA+ID4gZm9yIHRoZSBCQVIgcmVnaW9uIGJ5IHRoZSBQQ0kg aG9zdCB0byB0aGUgbWVzc2FnZSBhZGRyZXNzIG9mIHRoZSBwbGF0Zm9ybQo+ID4gPiA+ID4gPiA+ ID4gPiBNU0kgaW50ZXJydXB0IGNvbnRyb2xsZXIgaW4gdGhlIFBDSSBFUC4gQXMgYSByZXN1bHQs IHdoZW4gdGhlIFBDSSBSQyB3cml0ZXMKPiA+ID4gPiA+ID4gPiA+IAo+ID4gPiA+ID4gPiA+ID4g IkRvb3JiZWxsIGZlYXR1cmUgaXMgaW1wbGVtZW50ZWQgYnkgbWFwcGluZyB0aGUgRVAncyBNU0kg aW50ZXJydXB0IGNvbnRyb2xsZXIKPiA+ID4gPiA+ID4gPiA+IG1lc3NhZ2UgYWRkcmVzcyB0byBh IGRlZGljYXRlZCBCQVIgaW4gdGhlIEVQQyBjb3JlLiBJdCBpcyB0aGUgcmVzcG9uc2liaWxpdHkK PiA+ID4gPiA+ID4gPiA+IG9mIHRoZSBFUEYgZHJpdmVyIHRvIHBhc3MgdGhlIGFjdHVhbCBtZXNz YWdlIGRhdGEgdG8gYmUgd3JpdHRlbiBieSB0aGUgaG9zdCB0bwo+ID4gPiA+ID4gPiA+ID4gdGhl IGRvb3JiZWxsIEJBUiByZWdpb24gdGhyb3VnaCBpdHMgb3duIGxvZ2ljLiIKPiA+ID4gPiA+ID4g PiA+IAo+ID4gPiA+ID4gPiA+ID4gPiB0byB0aGUgQkFSIHJlZ2lvbiwgaXQgdHJpZ2dlcnMgYW4g SVJRIGF0IHRoZSBFUC4gVGhpcyBpbXBsZW1lbnRhdGlvbiBzZXJ2ZXMKPiA+ID4gPiA+ID4gPiA+ ID4gYXMgYSBjb21tb24gbWV0aG9kIGZvciBhbGwgZW5kcG9pbnQgZnVuY3Rpb24gZHJpdmVycy4K PiA+ID4gPiA+ID4gPiA+ID4gCj4gPiA+ID4gPiA+ID4gPiA+IEhvd2V2ZXIsIGl0IGN1cnJlbnRs eSBzdXBwb3J0cyBvbmx5IG9uZSBFUCBwaHlzaWNhbCBmdW5jdGlvbiBkdWUgdG8KPiA+ID4gPiA+ ID4gPiA+ID4gbGltaXRhdGlvbnMgaW4gQVJNIE1TSS9JTVMgcmVhZGluZXNzLgo+ID4gPiA+ID4g PiA+ID4gPiAKPiA+ID4gPiA+ID4gPiA+ID4gU2lnbmVkLW9mZi1ieTogRnJhbmsgTGkgPEZyYW5r LkxpQG54cC5jb20+Cj4gPiA+ID4gPiA+ID4gPiA+IC0tLQo+ID4gPiA+ID4gPiA+ID4gPiAgZHJp dmVycy9wY2kvZW5kcG9pbnQvcGNpLWVwYy1jb3JlLmMgfCAxOTIgKysrKysrKysrKysrKysrKysr KysrKysrKysrKwo+ID4gPiA+ID4gPiA+ID4gPiAgZHJpdmVycy9wY2kvZW5kcG9pbnQvcGNpLWVw Zi1jb3JlLmMgfCAgNDQgKysrKysrKwo+ID4gPiA+ID4gPiA+ID4gPiAgaW5jbHVkZS9saW51eC9w Y2ktZXBjLmggICAgICAgICAgICAgfCAgIDYgKwo+ID4gPiA+ID4gPiA+ID4gPiAgaW5jbHVkZS9s aW51eC9wY2ktZXBmLmggICAgICAgICAgICAgfCAgIDcgKwo+ID4gPiA+ID4gPiA+ID4gPiAgNCBm aWxlcyBjaGFuZ2VkLCAyNDkgaW5zZXJ0aW9ucygrKQo+ID4gPiA+ID4gPiA+ID4gPiAKPiA+ID4g PiA+ID4gPiA+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2VuZHBvaW50L3BjaS1lcGMtY29y ZS5jIGIvZHJpdmVycy9wY2kvZW5kcG9pbnQvcGNpLWVwYy1jb3JlLmMKPiA+ID4gPiA+ID4gPiA+ ID4gaW5kZXggNWE0YThiMGJlNjI2Mi4uZDMzNmE5OWM2YTk0ZiAxMDA2NDQKPiA+ID4gPiA+ID4g PiA+ID4gLS0tIGEvZHJpdmVycy9wY2kvZW5kcG9pbnQvcGNpLWVwYy1jb3JlLmMKPiA+ID4gPiA+ ID4gPiA+ID4gKysrIGIvZHJpdmVycy9wY2kvZW5kcG9pbnQvcGNpLWVwYy1jb3JlLmMKPiA+ID4g PiA+ID4gPiA+ID4gQEAgLTEwLDYgKzEwLDcgQEAKPiA+ID4gPiA+ID4gPiA+ID4gICNpbmNsdWRl IDxsaW51eC9zbGFiLmg+Cj4gPiA+ID4gPiA+ID4gPiA+ICAjaW5jbHVkZSA8bGludXgvbW9kdWxl Lmg+Cj4gPiA+ID4gPiA+ID4gPiA+ICAKPiA+ID4gPiA+ID4gPiA+ID4gKyNpbmNsdWRlIDxsaW51 eC9tc2kuaD4KPiA+ID4gPiA+ID4gPiA+ID4gICNpbmNsdWRlIDxsaW51eC9wY2ktZXBjLmg+Cj4g PiA+ID4gPiA+ID4gPiA+ICAjaW5jbHVkZSA8bGludXgvcGNpLWVwZi5oPgo+ID4gPiA+ID4gPiA+ ID4gPiAgI2luY2x1ZGUgPGxpbnV4L3BjaS1lcC1jZnMuaD4KPiA+ID4gPiA+ID4gPiA+ID4gQEAg LTc4Myw2ICs3ODQsMTk3IEBAIHZvaWQgcGNpX2VwY19ibWVfbm90aWZ5KHN0cnVjdCBwY2lfZXBj ICplcGMpCj4gPiA+ID4gPiA+ID4gPiA+ICB9Cj4gPiA+ID4gPiA+ID4gPiA+ICBFWFBPUlRfU1lN Qk9MX0dQTChwY2lfZXBjX2JtZV9ub3RpZnkpOwo+ID4gPiA+ID4gPiA+ID4gPiAgCj4gPiA+ID4g PiA+ID4gPiA+ICsvKioKPiA+ID4gPiA+ID4gPiA+ID4gKyAqIHBjaV9lcGNfYWxsb2NfZG9vcmJl bGwoKSAtIGFsbG9jIGFuIGFkZHJlc3Mgc3BhY2UgdG8gbGV0IFJDIHRyaWdnZXIgRVAgc2lkZSBJ UlEgYnkgd3JpdGUgZGF0YSB0bwo+ID4gPiA+ID4gPiA+ID4gPiArICoJCQkgICAgICB0aGUgc3Bh Y2UuCj4gPiA+ID4gPiA+ID4gPiAKPiA+ID4gPiA+ID4gPiA+ICJBbGxvY2F0ZSBwbGF0Zm9ybSBz cGVjaWZpYyBkb29yYmVsbCBJUlFzIHRvIGJlIHVzZWQgYnkgdGhlIGhvc3QgdG8gdHJpZ2dlcgo+ ID4gPiA+ID4gPiA+ID4gZG9vcmJlbGxzIG9uIEVQLiIKPiA+ID4gPiA+ID4gPiA+IAo+ID4gPiA+ ID4gPiA+ID4gPiArICoKPiA+ID4gPiA+ID4gPiA+ID4gKyAqIEBlcGM6IHRoZSBFUEMgZGV2aWNl IHRoYXQgbmVlZCBkb29yYmVsbCBhZGRyZXNzIGFuZCBkYXRhIGZyb20gUkMuCj4gPiA+ID4gPiA+ ID4gPiAKPiA+ID4gPiA+ID4gPiA+IEVQQyBkZXZpY2UgZm9yIHdoaWNoIHRoZSBkb29yYmVsbCBu ZWVkcyB0byBiZSBhbGxvY2F0ZWQKPiA+ID4gPiA+ID4gPiA+IAo+ID4gPiA+ID4gPiA+ID4gPiAr ICogQGZ1bmNfbm86IHRoZSBwaHlzaWNhbCBlbmRwb2ludCBmdW5jdGlvbiBudW1iZXIgaW4gdGhl IEVQQyBkZXZpY2UuCj4gPiA+ID4gPiA+ID4gPiA+ICsgKiBAdmZ1bmNfbm86IHRoZSB2aXJ0dWFs IGVuZHBvaW50IGZ1bmN0aW9uIG51bWJlciBpbiB0aGUgcGh5c2ljYWwgZnVuY3Rpb24uCj4gPiA+ ID4gPiA+ID4gPiA+ICsgKiBAbnVtX21zZ3M6IHRoZSB0b3RhbCBudW1iZXIgb2YgZG9vcmJlbGwg bWVzc2FnZXMKPiA+ID4gPiA+ID4gPiA+IAo+ID4gPiA+ID4gPiA+ID4gcy9udW1fbXNncy9udW1f ZGIKPiA+ID4gPiA+ID4gPiA+IAo+ID4gPiA+ID4gPiA+ID4gPiArICoKPiA+ID4gPiA+ID4gPiA+ ID4gKyAqIFJldHVybjogMCBzdWNjZXNzLCBvdGhlciBpcyBmYWlsdXJlCj4gPiA+ID4gPiA+ID4g PiA+ICsgKi8KPiA+ID4gPiA+ID4gPiA+ID4gK2ludCBwY2lfZXBjX2FsbG9jX2Rvb3JiZWxsKHN0 cnVjdCBwY2lfZXBjICplcGMsIHU4IGZ1bmNfbm8sIHU4IHZmdW5jX25vLCBpbnQgbnVtX21zZ3Mp Cj4gPiA+ID4gPiA+ID4gPiA+ICt7Cj4gPiA+ID4gPiA+ID4gPiA+ICsJaW50IHJldDsKPiA+ID4g PiA+ID4gPiA+ID4gKwo+ID4gPiA+ID4gPiA+ID4gPiArCWlmIChJU19FUlJfT1JfTlVMTChlcGMp IHx8IGZ1bmNfbm8gPj0gZXBjLT5tYXhfZnVuY3Rpb25zKQo+ID4gPiA+ID4gPiA+ID4gPiArCQly ZXR1cm4gLUVJTlZBTDsKPiA+ID4gPiA+ID4gPiA+ID4gKwo+ID4gPiA+ID4gPiA+ID4gPiArCWlm ICh2ZnVuY19ubyA+IDAgJiYgKCFlcGMtPm1heF92ZnMgfHwgdmZ1bmNfbm8gPiBlcGMtPm1heF92 ZnNbZnVuY19ub10pKQo+ID4gPiA+ID4gPiA+ID4gPiArCQlyZXR1cm4gLUVJTlZBTDsKPiA+ID4g PiA+ID4gPiA+ID4gKwo+ID4gPiA+ID4gPiA+ID4gPiArCWlmICghZXBjLT5vcHMtPmFsbG9jX2Rv b3JiZWxsKQo+ID4gPiA+ID4gPiA+ID4gPiArCQlyZXR1cm4gMDsKPiA+ID4gPiA+ID4gPiA+IAo+ ID4gPiA+ID4gPiA+ID4gWW91IG1lbnRpb25lZCAwIGlzIGEgc3VjY2Vzcy4gU28gaWYgdGhlcmUg aXMgbm8gY2FsbGJhY2ssIHlvdSB3YW50IHRvIHJldHVybgo+ID4gPiA+ID4gPiA+ID4gc3VjY2Vz cz8KPiA+ID4gPiA+ID4gPiA+IAo+ID4gPiA+ID4gPiA+ID4gPiArCj4gPiA+ID4gPiA+ID4gPiA+ ICsJbXV0ZXhfbG9jaygmZXBjLT5sb2NrKTsKPiA+ID4gPiA+ID4gPiA+ID4gKwlyZXQgPSBlcGMt Pm9wcy0+YWxsb2NfZG9vcmJlbGwoZXBjLCBmdW5jX25vLCB2ZnVuY19ubywgbnVtX21zZ3MpOwo+ ID4gPiA+ID4gPiA+ID4gCj4gPiA+ID4gPiA+ID4gPiBXaHkgY2FuJ3QgeW91IGp1c3QgY2FsbCB0 aGUgZ2VuZXJpYyBmdW5jdGlvbiBoZXJlIGFuZCBpbiBvdGhlciBwbGFjZXMgaW5zdGVhZCBvZgo+ ID4gPiA+ID4gPiA+ID4gaW1wbGVtZW50aW5nIGNhbGxiYWNrcz8gSSBkbyBub3Qgc2VlIGEgbmVj ZXNzaXR5IGZvciBFUEMgc3BlY2lmaWMgY2FsbGJhY2tzLiBJZgo+ID4gPiA+ID4gPiA+ID4gdGhl cmUgaXMgb25lLCBwbGVhc2Ugc3BlY2lmeS4KPiA+ID4gPiA+ID4gPiAKPiA+ID4gPiA+ID4gPiAx LiBSZWZlciB2MSB5b3VyIGNvbW1lbnRzLgo+ID4gPiA+ID4gPiA+IGh0dHBzOi8vbG9yZS5rZXJu ZWwub3JnL2lteC8yMDIzMDkwNjE0NTIyNy5HQzU5MzBAdGhpbmtwYWQvCj4gPiA+ID4gPiA+IAo+ ID4gPiA+ID4gPiBJIGRvIG5vdCBmaW5kIHdoZXJlIEkgc3VnZ2VzdGVkIHRoZSBjYWxsYmFjayBh cHByb2FjaC4KPiA+ID4gPiA+IAo+ID4gPiA+ID4gCT4gPiA+IElmIHRoYXQsIEVhY2ggRVBGIGRy aXZlciBuZWVkIGRvIGR1cGxpY2F0ZSB3b3JrLiAKPiA+ID4gPiA+IAk+ID4gPiAKPiA+ID4gPiA+ IAk+ID4gCj4gPiA+ID4gPiAJPiA+IFllcywgYW5kIHRoYXQncyBob3cgaXQgc2hvdWxkIGJlLiBF UEYgY29yZSBoYXMgbm8gam9iIGluIHN1cHBseWluZyB0aGUgb2Zfbm9kZS4KPiA+ID4gPiA+IAk+ ID4gSXQgaXMgdGhlIHJlc3BvbnNpYmlsaXR5IG9mIHRoZSBFUEYgZHJpdmVycyBhcyB0aGV5IGRl cGVuZCBvbiBPRiBmb3IgcGxhdGZvcm0KPiA+ID4gPiA+IAk+ID4gc3VwcG9ydC4KPiA+ID4gPiA+ IAk+IAo+ID4gPiA+ID4gCT4gRVBGIGRyaXZlciBzdGlsbCBub3QgZGVwZW5kIG9uIE9GLiBzdWNo IHBjaS1lcGYtdGVzdCwgd2hpY2ggd2FzIHByb2JlZCBieQo+ID4gPiA+ID4gCT4gY29uZmlnZnMu Cj4gPiA+ID4gPiAJPiAKPiA+ID4gPiA+IAo+ID4gPiA+ID4gCUhtbSwgeWVhaC4gVGhlbiBpdCBz aG91bGQgYmUgcGFydCBvZiB0aGUgRVBDIGRyaXZlci4KPiA+ID4gPiA+IAo+ID4gPiA+ID4gCVNv cnJ5IGZvciB0aGUgY29uZnVzaW9uLgo+ID4gPiA+ID4gCj4gPiA+ID4gPiBIZXJlLCBhbGwgIkVQ RiIgc2hvdWxkIGJlICJFUEMiLiBUaGUga2V5IHByb2JsZW0gaXMgb2Zfbm9kZS4gRVBDIGNvcmUg aGF2ZQo+ID4gPiA+ID4gbm90IG9mX25vZGUsIEVQQyBjb3JlJ3MgcGFyZW50IGRyaXZlciAobGlr ZSBkd2MtZXAgZHJpdmVyKSBoYXZlIG9mX25vZGUuIAo+ID4gPiA+ID4gCj4gPiA+ID4gPiBwY2lf ZXBjX2dlbmVyaWNfYWxsb2NfZG9vcmJlbGwoZGV2KSwgZGV2IGlzIHByb2JlZCBieSBwbGF0Zm9y bSBkcml2ZXIsIHN1Y2gKPiA+ID4gPiA+IGFzIGR3Yy1lcCwgd2hpY2ggaGF2ZSBvZl9ub2RlLCAg RVBDIGNvcmUgd2lsbCBjcmVhdGUgY2hpbGQgZGV2aWNlLgo+ID4gPiA+ID4gCj4gPiA+ID4gPiBk d2MtZXAgZGV2aWNlCj4gPiA+ID4gPiAgfC0gZXBjIGNvcmUgZGV2aWNlCj4gPiA+ID4gPiAKPiA+ ID4gPiA+IHdlIGNhbiBkaXJlY3QgY2FsbCBwY2lfZXBjX2dlbmVyaWNfYWxsb2NfZG9vcmJlbGwo ZXBjLT5wYXJlbnQpIGhlcmUuCj4gPiA+ID4gPiAKPiA+ID4gPiA+IEkgbWF5IG1pc3MgdW5kZXJz dGFuZCB3aGF0IHlvdXIgbWVhbnMuIEkgdGhpbmsgeW91IHdhbnQgdG8gZHdjLWVwCj4gPiA+ID4g PiAod2l0aCBvZl9ub2RlKSBoYW5kbGUgdGhlc2UgYWxsb2MgZnVuY3Rpb25zLiAKPiA+ID4gPiA+ IAo+ID4gPiA+IAo+ID4gPiA+IE15IGNvbW1lbnQgd2FzIHRvIGhhdmUganVzdCBvbmUgZnVuY3Rp b24gZGVmaW5pdGlvbi4gQnV0IGxvb2tpbmcgYXQgaXQgYWdhaW4sIEkKPiA+ID4gPiB0aGluayBp dCBpcyBiZXR0ZXIgdG8gbW92ZSBhbGwgdGhlIChhbGxvYywgZnJlZSwgd3JpdGVfbXNnKSBkZWZp bml0aW9ucyB0bwo+ID4gPiA+IGR3Yy1lcCwgc2luY2UgdGhlIGNvbnRlbnRzIG9mIHRob3NlIGZ1 bmN0aW9ucyBhcmUgbm90IEVQQyBjb3JlIHNwZWNpZmljLgo+ID4gPiAKPiA+ID4gVGhlcmUgYXJl IHN0aWxsIHByb2JsZW0uIChhbGxvYywgZnJlZSwgd3JpdGVfbXNnKSBpcyBxdWl0ZSBjb21tb24g Zm9yIGFsbAo+ID4gPiBjb250cm9sbGVyIGFuZCB0aGUgc3lzdGVtIHdpdGggTVNJLgo+ID4gPiAK PiA+ID4gSWYgbW92ZSB0aGVzZSBpbnRvIGR3Yy1lcCwgIGNkbnMgb3Igb3RoZXIgY29udHJvbGxl ciBoYXZlIHRvIGR1cGxpY2F0ZSAKPiA+ID4gdGhlc2UgY29kZXMuCj4gPiA+IAo+ID4gPiBJZiB5 b3UgdGhpbmsgaXQgaXMgbm90IEVQQyBjb3JlIHNwZWNpZmljLCBob3cgYWJvdXQgY3JlYXRlIG5l dyBoZWxwIGZpbGVzPwo+ID4gPiAKPiA+IAo+ID4gSG1tLCB0aGF0IHNvdW5kcyBnb29kIHRvIG1l LiBJIHRoaW5rIHRoZSBiZXN0IHBsYWNlIHdvdWxkIGJlOgo+ID4gZHJpdmVycy9wY2kvZW5kcG9p bnQvcGNpLWVwLW1zaS5jCj4gCj4gSG93IGFib3V0IGhlYWRlciBmaWxlPwo+IAo+IGludCBwY2lf ZXBjX2dlbmVyaWNfYWxsb2NfZG9vcmJlbGwoc3RydWN0IHBjaV9lcGMgKmVwYywgdTggZnVuY19u bywgdTggdmZ1bmNfbm8sIGludCBudW1fbXNncyk7ICAgICAKPiB2b2lkIHBjaV9lcGNfZ2VuZXJp Y19mcmVlX2Rvb3JiZWxsKHN0cnVjdCBwY2lfZXBjICplcGMsIHU4IGZ1bmNfbm8sIHU4IHZmdW5j X25vKTsKPiAKPiBJcyBpdCBpbiBpbmNsdWRlL2xpbnV4L3BjaS1lcGMuaCwganVzdCAyIGxpbmVz Lgo+IAoKU29ycnksIEkgZG9uJ3QgdW5kZXJzdGFuZCB3aGF0IHlvdSBhcmUgc3VnZ2VzdGluZy4g Q2FuIHlvdSBlbGFib3JhdGU/CgpNeSBzdWdnZXN0aW9uIHdhcyB0byBwbGFjZSB0aGUgZnVuY3Rp b24gZGVmaW5pdGlvbnMgaW4KZHJpdmVycy9wY2kvZW5kcG9pbnQvcGNpLWVwLW1zaS5jLCBjcmVh dGUgYSBzZXBhcmF0ZSBoZWFkZXIKaW5jbHVkZS9saW51eC9wY2ktZXAtbXNpLmggYW5kIHBsYWNl IHRoZSBkZWNsYXJhdGlvbnMgdGhlcmUuIFRoZSBFUEMgZHJpdmVycwp3YW50IHRvIHVzZSBnZW5l cmljIE1TSSBzdXBwb3J0IHNob3VsZCBpbmNsdWRlIHRoaXMgaGVhZGVyLgoKLSBNYW5pCgo+IEZy YW5rCj4gPiAKPiA+IFJlYXNvbiBpcywgd2UgY2Fubm90IGhhdmUgdGhpcyBnZW5lcmljIGNvZGUg dW5kZXIgZHJpdmVycy9wY2kvY29udHJvbGxlci8gYXMgaXQKPiA+IGlzIG5vdCBhIHN0YW5kYWxv bmUgUENJIGNvbnRyb2xsZXIgYnV0IGEgcGxhdGZvcm0gTVNJIGNvbnRyb2xsZXIuIFNvIGhhdmlu ZyBpdAo+ID4gdW5kZXIgcGNpL2VuZHBvaW50LyBtYWtlcyBtdWNoIHNlbnNlIHRvIG1lLgo+ID4g Cj4gPiBBbmQgdGhpcyBpcyBub3Qgc3BlY2lmaWMgdG8gRVBGIGRyaXZlcnMgYXMgd2VsbCwgc28g d2UgY2Fubm90IGhhdmUgaXQgdW5kZXIKPiA+IHBjaS9lbmRwb2ludC9mdW5jdGlvbnMvLgo+ID4g Cj4gPiAtIE1hbmkKPiA+IAo+ID4gPiBGcmFuawo+ID4gPiAKPiA+ID4gPiAKPiA+ID4gPiBJbiB0 aGUgRVBDIGNvcmUsIHlvdSBjYW4gc3RpbGwgaGF2ZSB0aGUgY2FsbGJhY2tzIHNwZWNpZmljIHRv IGVhY2ggRVBDLiBUaGlzCj4gPiA+ID4gYWxzbyBzb2x2ZXMgeW91ciBvZl9ub2RlIHByb2JsZW0u Cj4gPiA+ID4gCj4gPiA+ID4gLSBNYW5pCj4gPiA+ID4gCj4gPiA+ID4gPiA+IAo+ID4gPiA+ID4g PiA+IDIuIE1heWJlIHNvbWUgZXAgY29udHJvbGxlciBoYXZlIGJ1aWx0LWluIGRvb3JiZWxsIHN1 cHBvcnQuIFdyaXRlIHRvIHNvbWUKPiA+ID4gPiA+ID4gPiBhZGRyZXNzIHRvIHRyaWdnZXIgZG9v cmJlbGwgaXJxLgo+ID4gPiA+ID4gPiA+IAo+ID4gPiA+ID4gPiAKPiA+ID4gPiA+ID4gV2Ugd2ls bCBoYW5kbGUgaXQgd2hlbmV2ZXIgc3VjaCBFUCBjb250cm9sbGVycyBhcnJpdmUuIFVudGlsIHRo ZW4sIGxldCdzIGtlZXAgaXQKPiA+ID4gPiA+ID4gc2ltcGxlLgo+ID4gPiA+ID4gPiAKPiA+ID4g PiA+ID4gLSBNYW5pCj4gPiA+ID4gPiA+IAo+ID4gPiA+ID4gPiA+IEZyYW5rCj4gPiA+ID4gPiA+ ID4gCj4gPiA+ID4gPiA+ID4gPiAKPiA+ID4gPiA+ID4gPiA+ID4gKwltdXRleF91bmxvY2soJmVw Yy0+bG9jayk7Cj4gPiA+ID4gPiA+ID4gPiA+ICsKPiA+ID4gPiA+ID4gPiA+ID4gKwlyZXR1cm4g cmV0Owo+ID4gPiA+ID4gPiA+ID4gPiArfQo+ID4gPiA+ID4gPiA+ID4gPiArRVhQT1JUX1NZTUJP TF9HUEwocGNpX2VwY19hbGxvY19kb29yYmVsbCk7Cj4gPiA+ID4gPiA+ID4gPiA+ICsKPiA+ID4g PiA+ID4gPiA+ID4gKy8qKgo+ID4gPiA+ID4gPiA+ID4gPiArICogcGNpX2VwY19mcmVlX2Rvb3Ji ZWxsKCkgLSBmcmVlIHJlc291cmNlIGFsbG9jYXRlZCBieSBwY2lfZXBjX2FsbG9jX2Rvb3JiZWxs KCkKPiA+ID4gPiA+ID4gPiA+ID4gKyAqCj4gPiA+ID4gPiA+ID4gPiA+ICsgKiBAZXBjOiB0aGUg RVBDIGRldmljZSB0aGF0IG5lZWQgZG9vcmJlbGwgYWRkcmVzcyBhbmQgZGF0YSBmcm9tIFJDLgo+ ID4gPiA+ID4gPiA+ID4gCj4gPiA+ID4gPiA+ID4gPiBTYW1lIGFzIGFib3ZlLgo+ID4gPiA+ID4g PiA+ID4gCj4gPiA+ID4gPiA+ID4gPiA+ICsgKiBAZnVuY19ubzogdGhlIHBoeXNpY2FsIGVuZHBv aW50IGZ1bmN0aW9uIG51bWJlciBpbiB0aGUgRVBDIGRldmljZS4KPiA+ID4gPiA+ID4gPiA+ID4g KyAqIEB2ZnVuY19ubzogdGhlIHZpcnR1YWwgZW5kcG9pbnQgZnVuY3Rpb24gbnVtYmVyIGluIHRo ZSBwaHlzaWNhbCBmdW5jdGlvbi4KPiA+ID4gPiA+ID4gPiA+ID4gKyAqCj4gPiA+ID4gPiA+ID4g PiA+ICsgKiBSZXR1cm46IDAgc3VjY2Vzcywgb3RoZXIgaXMgZmFpbHVyZQo+ID4gPiA+ID4gPiA+ ID4gPiArICovCj4gPiA+ID4gPiA+ID4gPiA+ICt2b2lkIHBjaV9lcGNfZnJlZV9kb29yYmVsbChz dHJ1Y3QgcGNpX2VwYyAqZXBjLCB1OCBmdW5jX25vLCB1OCB2ZnVuY19ubykKPiA+ID4gPiA+ID4g PiA+ID4gK3sKPiA+ID4gPiA+ID4gPiA+ID4gKwlpZiAoSVNfRVJSX09SX05VTEwoZXBjKSB8fCBm dW5jX25vID49IGVwYy0+bWF4X2Z1bmN0aW9ucykKPiA+ID4gPiA+ID4gPiA+ID4gKwkJcmV0dXJu Owo+ID4gPiA+ID4gPiA+ID4gPiArCj4gPiA+ID4gPiA+ID4gPiA+ICsJaWYgKHZmdW5jX25vID4g MCAmJiAoIWVwYy0+bWF4X3ZmcyB8fCB2ZnVuY19ubyA+IGVwYy0+bWF4X3Zmc1tmdW5jX25vXSkp Cj4gPiA+ID4gPiA+ID4gPiA+ICsJCXJldHVybjsKPiA+ID4gPiA+ID4gPiA+ID4gKwo+ID4gPiA+ ID4gPiA+ID4gPiArCWlmICghZXBjLT5vcHMtPmZyZWVfZG9vcmJlbGwpCj4gPiA+ID4gPiA+ID4g PiA+ICsJCXJldHVybjsKPiA+ID4gPiA+ID4gPiA+ID4gKwo+ID4gPiA+ID4gPiA+ID4gPiArCW11 dGV4X2xvY2soJmVwYy0+bG9jayk7Cj4gPiA+ID4gPiA+ID4gPiA+ICsJZXBjLT5vcHMtPmZyZWVf ZG9vcmJlbGwoZXBjLCBmdW5jX25vLCB2ZnVuY19ubyk7Cj4gPiA+ID4gPiA+ID4gPiAKPiA+ID4g PiA+ID4gPiA+IFNhbWUgYXMgc3VnZ2VzdGVkIGFib3ZlLgo+ID4gPiA+ID4gPiA+ID4gCj4gPiA+ ID4gPiA+ID4gPiA+ICsJbXV0ZXhfdW5sb2NrKCZlcGMtPmxvY2spOwo+ID4gPiA+ID4gPiA+ID4g PiArfQo+ID4gPiA+ID4gPiA+ID4gPiArRVhQT1JUX1NZTUJPTF9HUEwocGNpX2VwY19mcmVlX2Rv b3JiZWxsKTsKPiA+ID4gPiA+ID4gPiA+ID4gKwo+ID4gPiA+ID4gPiA+ID4gPiArc3RhdGljIGly cXJldHVybl90IHBjaV9lcGZfZ2VuZXJpY19kb29yYmVsbF9oYW5kbGVyKGludCBpcnEsIHZvaWQg KmRhdGEpCj4gPiA+ID4gPiA+ID4gPiA+ICt7Cj4gPiA+ID4gPiA+ID4gPiA+ICsJc3RydWN0IHBj aV9lcGYgKmVwZiA9IGRhdGE7Cj4gPiA+ID4gPiA+ID4gPiA+ICsKPiA+ID4gPiA+ID4gPiA+ID4g KwlpZiAoZXBmLT5ldmVudF9vcHMgJiYgZXBmLT5ldmVudF9vcHMtPmRvb3JiZWxsKQo+ID4gPiA+ ID4gPiA+ID4gPiArCQllcGYtPmV2ZW50X29wcy0+ZG9vcmJlbGwoZXBmLCBpcnEgLSBlcGYtPnZp cnFfYmFzZSk7Cj4gPiA+ID4gPiA+ID4gPiAKPiA+ID4gPiA+ID4gPiA+IFNhbWUgYXMgc3VnZ2Vz dGVkIGFib3ZlLgo+ID4gPiA+ID4gPiA+ID4gCj4gPiA+ID4gPiA+ID4gPiA+ICsKPiA+ID4gPiA+ ID4gPiA+ID4gKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cj4gPiA+ID4gPiA+ID4gPiA+ICt9Cj4gPiA+ ID4gPiA+ID4gPiA+ICsKPiA+ID4gPiA+ID4gPiA+ID4gK3N0YXRpYyB2b2lkIHBjaV9lcGNfZ2Vu ZXJpY193cml0ZV9tc2lfbXNnKHN0cnVjdCBtc2lfZGVzYyAqZGVzYywgc3RydWN0IG1zaV9tc2cg Km1zZykKPiA+ID4gPiA+ID4gPiA+ID4gK3sKPiA+ID4gPiA+ID4gPiA+ID4gKwlzdHJ1Y3QgcGNp X2VwYyAqZXBjID0gTlVMTDsKPiA+ID4gPiA+ID4gPiA+ID4gKwlzdHJ1Y3QgY2xhc3NfZGV2X2l0 ZXIgaXRlcjsKPiA+ID4gPiA+ID4gPiA+ID4gKwlzdHJ1Y3QgcGNpX2VwZiAqZXBmOwo+ID4gPiA+ ID4gPiA+ID4gPiArCXN0cnVjdCBkZXZpY2UgKmRldjsKPiA+ID4gPiA+ID4gPiA+ID4gKwo+ID4g PiA+ID4gPiA+ID4gPiArCWNsYXNzX2Rldl9pdGVyX2luaXQoJml0ZXIsIHBjaV9lcGNfY2xhc3Ms IE5VTEwsIE5VTEwpOwo+ID4gPiA+ID4gPiA+ID4gPiArCXdoaWxlICgoZGV2ID0gY2xhc3NfZGV2 X2l0ZXJfbmV4dCgmaXRlcikpKSB7Cj4gPiA+ID4gPiA+ID4gPiA+ICsJCWlmIChkZXYtPnBhcmVu dCAhPSBkZXNjLT5kZXYpCj4gPiA+ID4gPiA+ID4gPiA+ICsJCQljb250aW51ZTsKPiA+ID4gPiA+ ID4gPiA+ID4gKwo+ID4gPiA+ID4gPiA+ID4gPiArCQllcGMgPSB0b19wY2lfZXBjKGRldik7Cj4g PiA+ID4gPiA+ID4gPiA+ICsKPiA+ID4gPiA+ID4gPiA+ID4gKwkJY2xhc3NfZGV2X2l0ZXJfZXhp dCgmaXRlcik7Cj4gPiA+ID4gPiA+ID4gPiA+ICsJCWJyZWFrOwo+ID4gPiA+ID4gPiA+ID4gPiAr CX0KPiA+ID4gPiA+ID4gPiA+ID4gKwo+ID4gPiA+ID4gPiA+ID4gPiArCWlmICghZXBjKQo+ID4g PiA+ID4gPiA+ID4gPiArCQlyZXR1cm47Cj4gPiA+ID4gPiA+ID4gPiA+ICsKPiA+ID4gPiA+ID4g PiA+ID4gKwkvKiBPbmx5IHN1cHBvcnQgb25lIEVQRiBmb3IgZG9vcmJlbGwgKi8KPiA+ID4gPiA+ ID4gPiA+ID4gKwllcGYgPSBsaXN0X2ZpcnN0X2VudHJ5X29yX251bGwoJmVwYy0+cGNpX2VwZiwg c3RydWN0IHBjaV9lcGYsIGxpc3QpOwo+ID4gPiA+ID4gPiA+ID4gPiArCj4gPiA+ID4gPiA+ID4g PiAKPiA+ID4gPiA+ID4gPiA+IE5vIG5lZWQgb2YgdGhpcyBuZXdsaW5lCj4gPiA+ID4gPiA+ID4g PiAKPiA+ID4gPiA+ID4gPiA+ID4gKwlpZiAoIWVwZikKPiA+ID4gPiA+ID4gPiA+ID4gKwkJcmV0 dXJuOwo+ID4gPiA+ID4gPiA+ID4gPiArCj4gPiA+ID4gPiA+ID4gPiA+ICsJaWYgKGVwZi0+bXNn ICYmIGRlc2MtPm1zaV9pbmRleCA8IGVwZi0+bnVtX21zZ3MpCj4gPiA+ID4gPiA+ID4gPiA+ICsJ CWVwZi0+bXNnW2Rlc2MtPm1zaV9pbmRleF0gPSAqbXNnOwo+ID4gPiA+ID4gPiA+ID4gPiArfQo+ ID4gPiA+ID4gPiA+ID4gPiArCj4gPiA+ID4gPiA+ID4gPiA+ICsKPiA+ID4gPiA+ID4gPiA+IAo+ ID4gPiA+ID4gPiA+ID4gUmVtb3ZlIGV4dHJhIG5ld2xpbmUKPiA+ID4gPiA+ID4gPiA+IAo+ID4g PiA+ID4gPiA+ID4gPiArLyoqCj4gPiA+ID4gPiA+ID4gPiA+ICsgKiBwY2lfZXBjX2dlbmVyaWNf YWxsb2NfZG9vcmJlbGwoKSAtIENvbW1vbiBoZWxwIGZ1bmN0aW9uLiBBbGxvY2F0ZSBhZGRyZXNz IHNwYWNlIGZyb20gTVNJCj4gPiA+ID4gPiA+ID4gPiA+ICsgKiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGNvbnRyb2xsZXIKPiA+ID4gPiA+ID4gPiA+ID4gKyAqCj4gPiA+ID4g PiA+ID4gPiA+ICsgKiBAZXBjOiB0aGUgRVBDIGRldmljZSB0aGF0IG5lZWQgZG9vcmJlbGwgYWRk cmVzcyBhbmQgZGF0YSBmcm9tIFJDLgo+ID4gPiA+ID4gPiA+ID4gPiArICogQGZ1bmNfbm86IHRo ZSBwaHlzaWNhbCBlbmRwb2ludCBmdW5jdGlvbiBudW1iZXIgaW4gdGhlIEVQQyBkZXZpY2UuCj4g PiA+ID4gPiA+ID4gPiA+ICsgKiBAdmZ1bmNfbm86IHRoZSB2aXJ0dWFsIGVuZHBvaW50IGZ1bmN0 aW9uIG51bWJlciBpbiB0aGUgcGh5c2ljYWwgZnVuY3Rpb24uCj4gPiA+ID4gPiA+ID4gPiA+ICsg KiBAbnVtX21zZ3M6IHRoZSB0b3RhbCBudW1iZXIgb2YgZG9vcmJlbGwgbWVzc2FnZXMKPiA+ID4g PiA+ID4gPiA+ID4gKyAqCj4gPiA+ID4gPiA+ID4gPiAKPiA+ID4gPiA+ID4gPiA+IFNhbWUgY29t bWVudCBhcyBmb3IgcGNpX2VwY19hbGxvY19kb29yYmVsbCgpCj4gPiA+ID4gPiA+ID4gPiAKPiA+ ID4gPiA+ID4gPiA+ID4gKyAqIFJlbWFyazogdXNlIHRoaXMgZnVuY3Rpb24gb25seSBpZiBFUEMg ZHJpdmVyIGp1c3QgcmVnaXN0ZXIgb25lIEVQQyBkZXZpY2UuCj4gPiA+ID4gPiA+ID4gPiA+ICsg Kgo+ID4gPiA+ID4gPiA+ID4gPiArICogUmV0dXJuOiAwIHN1Y2Nlc3MsIG90aGVyIGlzIGZhaWx1 cmUKPiA+ID4gPiA+ID4gPiA+ID4gKyAqLwo+ID4gPiA+ID4gPiA+ID4gPiAraW50IHBjaV9lcGNf Z2VuZXJpY19hbGxvY19kb29yYmVsbChzdHJ1Y3QgcGNpX2VwYyAqZXBjLCB1OCBmdW5jX25vLCB1 OCB2ZnVuY19ubywgaW50IG51bV9tc2dzKQo+ID4gPiA+ID4gPiA+ID4gPiArewo+ID4gPiA+ID4g PiA+ID4gPiArCXN0cnVjdCBwY2lfZXBmICplcGY7Cj4gPiA+ID4gPiA+ID4gPiA+ICsJc3RydWN0 IGRldmljZSAqZGV2Owo+ID4gPiA+ID4gPiA+ID4gPiArCWludCB2aXJxLCBsYXN0Owo+ID4gPiA+ ID4gPiA+ID4gPiArCWludCByZXQ7Cj4gPiA+ID4gPiA+ID4gPiA+ICsJaW50IGk7Cj4gPiA+ID4g PiA+ID4gPiA+ICsKPiA+ID4gPiA+ID4gPiA+ID4gKwlpZiAoSVNfRVJSX09SX05VTEwoZXBjKSkK PiA+ID4gPiA+ID4gPiA+ID4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gPiA+ID4gPiA+ID4gPiA+ICsK PiA+ID4gPiA+ID4gPiA+ID4gKwkvKiBDdXJyZW50bHkgb25seSBzdXBwb3J0IG9uZSBmdW5jIGFu ZCBvbmUgdmZ1bmMgZm9yIGRvb3JiZWxsICovCj4gPiA+ID4gPiA+ID4gPiA+ICsJaWYgKGZ1bmNf bm8gfHwgdmZ1bmNfbm8pCj4gPiA+ID4gPiA+ID4gPiA+ICsJCXJldHVybiAtRUlOVkFMOwo+ID4g PiA+ID4gPiA+ID4gPiArCj4gPiA+ID4gPiA+ID4gPiA+ICsJZXBmID0gbGlzdF9maXJzdF9lbnRy eV9vcl9udWxsKCZlcGMtPnBjaV9lcGYsIHN0cnVjdCBwY2lfZXBmLCBsaXN0KTsKPiA+ID4gPiA+ ID4gPiA+ID4gKwlpZiAoIWVwZikKPiA+ID4gPiA+ID4gPiA+ID4gKwkJcmV0dXJuIC1FSU5WQUw7 Cj4gPiA+ID4gPiA+ID4gPiA+ICsKPiA+ID4gPiA+ID4gPiA+ID4gKwlkZXYgPSBlcGMtPmRldi5w YXJlbnQ7Cj4gPiA+ID4gPiA+ID4gPiA+ICsJcmV0ID0gcGxhdGZvcm1fbXNpX2RvbWFpbl9hbGxv Y19pcnFzKGRldiwgbnVtX21zZ3MsIHBjaV9lcGNfZ2VuZXJpY193cml0ZV9tc2lfbXNnKTsKPiA+ ID4gPiA+ID4gPiA+ID4gKwlpZiAocmV0KSB7Cj4gPiA+ID4gPiA+ID4gPiA+ICsJCWRldl9lcnIo ZGV2LCAiRmFpbGVkIHRvIGFsbG9jYXRlIE1TSVxuIik7Cj4gPiA+ID4gPiA+ID4gPiA+ICsJCXJl dHVybiAtRU5PTUVNOwo+ID4gPiA+ID4gPiA+ID4gPiArCX0KPiA+ID4gPiA+ID4gPiA+ID4gKwo+ ID4gPiA+ID4gPiA+ID4gPiArCWxhc3QgPSAtMTsKPiA+ID4gPiA+ID4gPiA+ID4gKwlmb3IgKGkg PSAwOyBpIDwgbnVtX21zZ3M7IGkrKykgewo+ID4gPiA+ID4gPiA+ID4gCj4gPiA+ID4gPiA+ID4g PiBZb3Ugc2hvdWxkIGl0ZXJhdGUgb3ZlciBtc2lfZGVzYyBhcyBiZWxvdzoKPiA+ID4gPiA+ID4g PiA+IAo+ID4gPiA+ID4gPiA+ID4gICAgICAgICBtc2lfbG9ja19kZXNjcyhkZXYpOwo+ID4gPiA+ ID4gPiA+ID4gICAgICAgICBtc2lfZm9yX2VhY2hfZGVzYyhkZXNjLCBkZXYsIE1TSV9ERVNDX0FM TCkgewo+ID4gPiA+ID4gPiA+ID4gCQkuLi4KPiA+ID4gPiA+ID4gPiA+IAl9Cj4gPiA+ID4gPiA+ ID4gPiAJbXNpX3VubG9ja19kZXNjcyhkZXYpOwo+ID4gPiA+ID4gPiA+ID4gCj4gPiA+ID4gPiA+ ID4gPiA+ICsJCXZpcnEgPSBtc2lfZ2V0X3ZpcnEoZGV2LCBpKTsKPiA+ID4gPiA+ID4gPiA+ID4g KwkJaWYgKGkgPT0gMCkKPiA+ID4gPiA+ID4gPiA+ID4gKwkJCWVwZi0+dmlycV9iYXNlID0gdmly cTsKPiA+ID4gPiA+ID4gPiA+ID4gKwo+ID4gPiA+ID4gPiA+ID4gPiArCQlyZXQgPSByZXF1ZXN0 X2lycSh2aXJxLCBwY2lfZXBmX2dlbmVyaWNfZG9vcmJlbGxfaGFuZGxlciwgMCwKPiA+ID4gPiA+ ID4gPiA+IAo+ID4gPiA+ID4gPiA+ID4gCXJlcXVlc3RfaXJxKGRlc2MtPmlycSwgLi4uKQo+ID4g PiA+ID4gPiA+ID4gCj4gPiA+ID4gPiA+ID4gPiA+ICsJCQkJICBrYXNwcmludGYoR0ZQX0tFUk5F TCwgInBjaS1lcGMtZG9vcmJlbGwlZCIsIGkpLCBlcGYpOwo+ID4gPiA+ID4gPiA+ID4gPiArCj4g PiA+ID4gPiA+ID4gPiA+ICsJCWlmIChyZXQpIHsKPiA+ID4gPiA+ID4gPiA+ID4gKwkJCWRldl9l cnIoZGV2LCAiRmFpbGVkIHRvIHJlcXVlc3QgZG9vcmJlbGxcbiIpOwo+ID4gPiA+ID4gPiA+ID4g PiArCQkJZ290byBlcnJfZnJlZV9pcnE7Cj4gPiA+ID4gPiA+ID4gPiA+ICsJCX0KPiA+ID4gPiA+ ID4gPiA+ID4gKwkJbGFzdCA9IGk7Cj4gPiA+ID4gPiA+ID4gPiA+ICsJfQo+ID4gPiA+ID4gPiA+ ID4gPiArCj4gPiA+ID4gPiA+ID4gPiA+ICsJcmV0dXJuIDA7Cj4gPiA+ID4gPiA+ID4gPiA+ICsK PiA+ID4gPiA+ID4gPiA+ID4gK2Vycl9mcmVlX2lycToKPiA+ID4gPiA+ID4gPiA+ID4gKwlmb3Ig KGkgPSAwOyBpIDwgbGFzdDsgaSsrKQo+ID4gPiA+ID4gPiA+ID4gPiArCQlrZnJlZShmcmVlX2ly cShlcGYtPnZpcnFfYmFzZSArIGksIGVwZikpOwo+ID4gPiA+ID4gPiA+ID4gPiArCXBsYXRmb3Jt X21zaV9kb21haW5fZnJlZV9pcnFzKGRldik7Cj4gPiA+ID4gPiA+ID4gPiA+ICsKPiA+ID4gPiA+ ID4gPiA+ID4gKwlyZXR1cm4gLUVJTlZBTDsKPiA+ID4gPiA+ID4gPiA+IAo+ID4gPiA+ID4gPiA+ ID4gCXJldHVybiByZXQ7Cj4gPiA+ID4gPiA+ID4gPiAKPiA+ID4gPiA+ID4gPiA+ID4gK30KPiA+ ID4gPiA+ID4gPiA+ID4gK0VYUE9SVF9TWU1CT0xfR1BMKHBjaV9lcGNfZ2VuZXJpY19hbGxvY19k b29yYmVsbCk7Cj4gPiA+ID4gPiA+ID4gPiA+ICsKPiA+ID4gPiA+ID4gPiA+IAo+ID4gPiA+ID4g PiA+ID4gWy4uLl0KPiA+ID4gPiA+ID4gPiA+IAo+ID4gPiA+ID4gPiA+ID4gPiBkaWZmIC0tZ2l0 IGEvaW5jbHVkZS9saW51eC9wY2ktZXBmLmggYi9pbmNsdWRlL2xpbnV4L3BjaS1lcGYuaAo+ID4g PiA+ID4gPiA+ID4gPiBpbmRleCAzZjQ0YjZhZWM0NzcwLi40ODVjMTQ2YTVlZmUyIDEwMDY0NAo+ ID4gPiA+ID4gPiA+ID4gPiAtLS0gYS9pbmNsdWRlL2xpbnV4L3BjaS1lcGYuaAo+ID4gPiA+ID4g PiA+ID4gPiArKysgYi9pbmNsdWRlL2xpbnV4L3BjaS1lcGYuaAo+ID4gPiA+ID4gPiA+ID4gPiBA QCAtNzksNiArNzksNyBAQCBzdHJ1Y3QgcGNpX2VwY19ldmVudF9vcHMgewo+ID4gPiA+ID4gPiA+ ID4gPiAgCWludCAoKmxpbmtfdXApKHN0cnVjdCBwY2lfZXBmICplcGYpOwo+ID4gPiA+ID4gPiA+ ID4gPiAgCWludCAoKmxpbmtfZG93bikoc3RydWN0IHBjaV9lcGYgKmVwZik7Cj4gPiA+ID4gPiA+ ID4gPiA+ICAJaW50ICgqYm1lKShzdHJ1Y3QgcGNpX2VwZiAqZXBmKTsKPiA+ID4gPiA+ID4gPiA+ ID4gKwlpbnQgKCpkb29yYmVsbCkoc3RydWN0IHBjaV9lcGYgKmVwZiwgaW50IGluZGV4KTsKPiA+ ID4gPiA+ID4gPiA+IAo+ID4gPiA+ID4gPiA+ID4ga2RvYyBtaXNzaW5nLgo+ID4gPiA+ID4gPiA+ ID4gCj4gPiA+ID4gPiA+ID4gPiA+ICB9Owo+ID4gPiA+ID4gPiA+ID4gPiAgCj4gPiA+ID4gPiA+ ID4gPiA+ICAvKioKPiA+ID4gPiA+ID4gPiA+ID4gQEAgLTE4MCw2ICsxODEsOSBAQCBzdHJ1Y3Qg cGNpX2VwZiB7Cj4gPiA+ID4gPiA+ID4gPiA+ICAJdW5zaWduZWQgbG9uZwkJdmZ1bmN0aW9uX251 bV9tYXA7Cj4gPiA+ID4gPiA+ID4gPiA+ICAJc3RydWN0IGxpc3RfaGVhZAlwY2lfdmVwZjsKPiA+ ID4gPiA+ID4gPiA+ID4gIAljb25zdCBzdHJ1Y3QgcGNpX2VwY19ldmVudF9vcHMgKmV2ZW50X29w czsKPiA+ID4gPiA+ID4gPiA+ID4gKwlzdHJ1Y3QgbXNpX21zZyAqbXNnOwo+ID4gPiA+ID4gPiA+ ID4gPiArCXUxNiBudW1fbXNnczsKPiA+ID4gPiA+ID4gPiA+IAo+ID4gPiA+ID4gPiA+ID4gbnVt X2RiCj4gPiA+ID4gPiA+ID4gPiAKPiA+ID4gPiA+ID4gPiA+IFlvdSBhbHNvIG5lZWQgdG8gYWRk IGtkb2MgZm9yIGVhY2ggbmV3IG1lbWJlci4KPiA+ID4gPiA+ID4gPiA+IAo+ID4gPiA+ID4gPiA+ ID4gLSBNYW5pCj4gPiA+ID4gPiA+ID4gPiAKPiA+ID4gPiA+ID4gPiA+IC0tIAo+ID4gPiA+ID4g PiA+ID4g4K6u4K6j4K6/4K614K6j4K+N4K6j4K6p4K+NIOCumuCupOCuvuCumuCuv+CuteCuruCv jQo+ID4gPiA+ID4gPiAKPiA+ID4gPiA+ID4gLS0gCj4gPiA+ID4gPiA+IOCuruCuo+Cuv+CuteCu o+CvjeCuo+CuqeCvjSDgrprgrqTgrr7grprgrr/grrXgrq7gr40KPiA+ID4gPiAKPiA+ID4gPiAt LSAKPiA+ID4gPiDgrq7grqPgrr/grrXgrqPgr43grqPgrqngr40g4K6a4K6k4K6+4K6a4K6/4K61 4K6u4K+NCj4gPiAKPiA+IC0tIAo+ID4g4K6u4K6j4K6/4K614K6j4K+N4K6j4K6p4K+NIOCumuCu pOCuvuCumuCuv+CuteCuruCvjQoKLS0gCuCuruCuo+Cuv+CuteCuo+CvjeCuo+CuqeCvjSDgrprg rqTgrr7grprgrr/grrXgrq7gr40KCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fCmxpbnV4LWFybS1rZXJuZWwgbWFpbGluZyBsaXN0CmxpbnV4LWFybS1rZXJu ZWxAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFu L2xpc3RpbmZvL2xpbnV4LWFybS1rZXJuZWwK