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 C7894C433EF for ; Tue, 30 Nov 2021 20:16:52 +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:Cc:To:Subject:Message-ID:Date:From: In-Reply-To:References:MIME-Version:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=ZcI71oYpM4cb6obXcxFnjIDAJArKMpat4CcRA/6cVhM=; b=a9g93pujWBwO2U NNqBXaD0FVJs6996d3lecZqvXFuMovdiCin3sTUwWP26BjvyrYGc34Vd986E5dU3AwfNr9vBfa7yc 8UTcHybFqpU76N5T8ZszKBXY73ujS66WbuPPr8CHaNG0D4VNgCzrKHz7cw1e4V4s4wNfP0skKrWdc 65RZ6CDQ7CpIFdiMB795IcxI6E9gxhv6GxXuFBOd+3a+gfD/Z/s9SL4hUt5BI7P3WBN9yuiGOC0/x uGZSS0qtQL20HU800PreaUVid8btN4UoacxLwD21LhpI8bsjCQfELvdfZEudd/44JbhPbTsfYkU/f /FilFTNLo3AYUoWJQvUA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1ms9WY-006d7R-7g; Tue, 30 Nov 2021 20:14:46 +0000 Received: from mail-ed1-x529.google.com ([2a00:1450:4864:20::529]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1ms9WO-006d6J-V5 for linux-arm-kernel@lists.infradead.org; Tue, 30 Nov 2021 20:14:41 +0000 Received: by mail-ed1-x529.google.com with SMTP id w1so92021227edc.6 for ; Tue, 30 Nov 2021 12:14:35 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc:content-transfer-encoding; bh=7dcQVHZFEGjjeJS5Bhsc4CTqxKr5a8OvGvsYboBZ1wI=; b=YS46iymRYFrWW0jt8eTtLsEvblh+B2DJVVWVI17qcoO3lsTzQGOP9Zts0wrqEUJKrm 2mcHp31AS/ibo0M2IQjGlRntR6d+f0RoT5wBi42UsV0hPfadhywxYQw960TPwhNZVWd8 1dhwpB4NiHEqJOL9TJ/2H4FHLvIRf7bunCCcjybWs5Y9S0PZcXzn3+09aXiGvjYC/Ydh n851Te3Sqex1sASvYkVlBfBlYicarxA6i4b3SgWnuLgPZyIORU98rePSE5tTpT/hIYR/ R331YfXCWAD+06Glv/nzLC0ScOEBFvHtwzcRVRXnEgePS6rq8PneZGTAVgDDyquf/g6V SdDA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc:content-transfer-encoding; bh=7dcQVHZFEGjjeJS5Bhsc4CTqxKr5a8OvGvsYboBZ1wI=; b=rrE2/mNZyQHTuaw8ze7/439CL8yfeQpdn1vTlqCH8R/pEvP0cxb8zIO31k3ZibOWL0 ltda7QmnDj9rjCK/AQgDPAGvDlwTQjygEgl4XxoBvYFjocl5Ix4v9h5Xw+uJwKxlyNX/ +OiIdWpurYDIr3SdO+rU0ic1DIqew7VeAvWVP9t1gYkupXT5KGACkX/6kOGYEcI8pyFH isIg9e1NT7zq5KGIjXOovy5noDAw4hpF5zuwer0FrTaP+l94qh93+Hkfk3wYvyKfUdTi 8oTRGjQyQco5jxN6wjG9QDxw3KOg1N0+Ai/OjCstVcD7rKTZxdw26Ejxxc6cwsTAHsGk 3Lpw== X-Gm-Message-State: AOAM533Ft+HruDDstRmP/LEpemTMEInTz1Y72LsQfytaKbsIB+OaHjLO NnegQ7Vl2Pg0o+YiHNYhs0MvLmELo41dUipef9i+dA== X-Google-Smtp-Source: ABdhPJxi+3qUAqARzCGHfgOtWxfOxaR0KDTKUG75cA0Z5GpBhJFkgkKkNcsqmtVjx9/yQz8vqzqSSBB3mrIGxfjpx+8= X-Received: by 2002:a05:6402:4311:: with SMTP id m17mr1709868edc.103.1638303273851; Tue, 30 Nov 2021 12:14:33 -0800 (PST) MIME-Version: 1.0 References: <20211123062050.1442712-1-tanmay.shah@xilinx.com> <20211123062050.1442712-7-tanmay.shah@xilinx.com> <20211129184219.GC676889@p14s> <3d0b7062-12d4-bc58-9b37-931921881a1f@xilinx.com> In-Reply-To: <3d0b7062-12d4-bc58-9b37-931921881a1f@xilinx.com> From: Mathieu Poirier Date: Tue, 30 Nov 2021 13:14:21 -0700 Message-ID: Subject: Re: [PATCH v2 6/6] drivers: remoteproc: Add Xilinx r5 remoteproc driver To: Tanmay Shah Cc: Bjorn Andersson , Rob Herring , Michal Simek , Laurent Pinchart , Ben Levinsky , Bill Mills , Sergei Korneichuk , linux-remoteproc@vger.kernel.org, linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20211130_121437_077465_1A34E747 X-CRM114-Status: GOOD ( 54.35 ) 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 T24gVHVlLCAzMCBOb3YgMjAyMSBhdCAwMTowMSwgVGFubWF5IFNoYWggPHRhbm1heS5zaGFoQHhp bGlueC5jb20+IHdyb3RlOgo+Cj4KPiBPbiAxMS8zMC8yMSAxMjoxMiBBTSwgTWF0aGlldSBQb2ly aWVyIHdyb3RlOgo+ID4gT24gTW9uLCBOb3YgMjIsIDIwMjEgYXQgMTA6MjA6NTBQTSAtMDgwMCwg VGFubWF5IFNoYWggd3JvdGU6Cj4gPj4gVGhpcyBkcml2ZXIgZW5hYmxlcyByNWYgZHVhbCBjb3Jl IFJlYWwgdGltZSBQcm9jZXNzaW5nIFVuaXQgc3Vic3lzdGVtCj4gPj4gYXZhaWxhYmxlIG9uIFhp bGlueCBaeW5xIFVsdHJhc2NhbGUgTVBTb0MgUGxhdGZvcm0uIFJQVSBzdWJzeXN0ZW0KPiA+PiAo Y2x1c3RlcikgY2FuIGJlIGNvbmZpZ3VyZWQgaW4gZGlmZmVyZW50IG1vZGVzIGUuZy4gc3BsaXQg bW9kZSBpbiB3aGljaAo+ID4+IHR3byByNWYgY29yZXMgd29yayBpbmRlcGVuZGVudCBvZiBlYWNo IG90aGVyIGFuZCBsb2NrLXN0ZXAgbW9kZSBpbiB3aGljaAo+ID4+IGJvdGggcjVmIGNvcmVzIGV4 ZWN1dGUgc2FtZSBjb2RlIGNsb2NrLWZvci1jbG9jayBhbmQgbm90aWZ5IGlmIHRoZQo+ID4+IHJl c3VsdCBpcyBkaWZmZXJlbnQuCj4gPj4KPiA+PiBUaGUgWGlsaW54IHI1IFJlbW90ZXByb2MgRHJp dmVyIGJvb3RzIHRoZSBSUFUgY29yZXMgdmlhIGNhbGxzIHRvIHRoZSBYaWxpbngKPiA+PiBQbGF0 Zm9ybSBNYW5hZ2VtZW50IFVuaXQgdGhhdCBoYW5kbGVzIHRoZSBSNSBjb25maWd1cmF0aW9uLCBt ZW1vcnkgYWNjZXNzCj4gPj4gYW5kIFI1IGxpZmVjeWNsZSBtYW5hZ2VtZW50LiBUaGUgaW50ZXJm YWNlIHRvIHRoaXMgbWFuYWdlciBpcyBkb25lIGluIHRoaXMKPiA+PiBkcml2ZXIgdmlhIHp5bnFt cF9wbV8qIGZ1bmN0aW9uIGNhbGxzLgo+ID4+Cj4gPj4gU2lnbmVkLW9mZi1ieTogQmVuIExldmlu c2t5IDxiZW4ubGV2aW5za3lAeGlsaW54LmNvbT4KPiA+PiBTaWduZWQtb2ZmLWJ5OiBUYW5tYXkg U2hhaCA8dGFubWF5LnNoYWhAeGlsaW54LmNvbT4KPiA+PiAtLS0KPiA+PiAgIGRyaXZlcnMvcmVt b3RlcHJvYy9LY29uZmlnICAgICAgICAgICAgICB8ICAxMiArCj4gPj4gICBkcml2ZXJzL3JlbW90 ZXByb2MvTWFrZWZpbGUgICAgICAgICAgICAgfCAgIDEgKwo+ID4+ICAgZHJpdmVycy9yZW1vdGVw cm9jL3hsbnhfcjVfcmVtb3RlcHJvYy5jIHwgOTU5ICsrKysrKysrKysrKysrKysrKysrKysrKwo+ ID4+ICAgMyBmaWxlcyBjaGFuZ2VkLCA5NzIgaW5zZXJ0aW9ucygrKQo+ID4+ICAgY3JlYXRlIG1v ZGUgMTAwNjQ0IGRyaXZlcnMvcmVtb3RlcHJvYy94bG54X3I1X3JlbW90ZXByb2MuYwo+ID4gLi4u YW5kIHRoaXMgcGF0Y2ggZ2l2ZXMgbWUgY29tcGxhdGlvbiB3YXJuaW5nczoKPiA+Cj4gPiAgICBD QyAgICAgIGRyaXZlcnMvcmVtb3RlcHJvYy94bG54X3I1X3JlbW90ZXByb2Mubwo+ID4ga2VybmVs LXJldmlldy9kcml2ZXJzL3JlbW90ZXByb2MveGxueF9yNV9yZW1vdGVwcm9jLmM6IEluIGZ1bmN0 aW9uIOKAmGFkZF90Y21fY2FydmVvdXRfbG9ja3N0ZXBfbW9kZeKAmToKPiA+IGtlcm5lbC1yZXZp ZXcvZHJpdmVycy9yZW1vdGVwcm9jL3hsbnhfcjVfcmVtb3RlcHJvYy5jOjQxMjoyODogd2Fybmlu ZzogdW51c2VkIHZhcmlhYmxlIOKAmGNsdXN0ZXLigJkgWy1XdW51c2VkLXZhcmlhYmxlXQo+ID4g ICAgNDEyIHwgIHN0cnVjdCB6eW5xbXBfcjVfY2x1c3RlciAqY2x1c3RlcjsKPiA+ICAgICAgICB8 ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF5+fn5+fn4KPiA+IGtlcm5lbC1yZXZpZXcvZHJp dmVycy9yZW1vdGVwcm9jL3hsbnhfcjVfcmVtb3RlcHJvYy5jOjQxMToyNjogd2FybmluZzogdW51 c2VkIHZhcmlhYmxlIOKAmHBhcmVudF9wZGV24oCZIFstV3VudXNlZC12YXJpYWJsZV0KPiA+ICAg IDQxMSB8ICBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwYXJlbnRfcGRldjsKPiA+ICAgICAgICB8 ICAgICAgICAgICAgICAgICAgICAgICAgICBefn5+fn5+fn5+fgo+ID4KPiA+IFRoZSBhYm92ZSBs ZWFkcyBtZSB0byBiZWxpZXZlIHRoaXMgcGF0Y2hzZXQgd2FzIG5vdCBjb21waWxlZCBiZWZvcmUg aXQgd2FzIHNlbnQKPiA+IG91dC4KPgo+IFBsZWFzZSBkb24ndCBhc3N1bWUgdGhhdCB0aGlzIHBh dGNoLXNldCB3YXMgbm90IGNvbXBpbGVkLiAgVGhpcyBkcml2ZXIKPiB3YXMgY29tcGlsZWQgYW5k IHRlc3RlZCBvbiBYaWxpbnggUUVNVSBhbmQgenlucW1wIHBsYXRmb3JtIGZvciBpdHMKPiBmdW5j dGlvbmFsaXR5Lgo+Cj4gVGhpcyBkcml2ZXIgd2VudCB0aHJvdWdoIG11bHRpcGxlIGludGVybmFs IHJldmlld3MgYW5kIEkgaGFkIHRvCj4gcmUtYXJjaGl0ZWN0dXJlIGl0IG11bHRpcGxlIHRpbWVz LgoKQW5kIHlldCB0d28gdW51c2VkIHZhcmlhYmxlcyAod2hpY2ggIGlzIHByZXR0eSBlYXN5IHRv IHNwb3QpIGdvdCBieS4KCj4KPiBJIHNpbXBseSBtaXNzZWQgdG8gZml4IGFib3ZlIHdhcm5pbmdz IGJlZm9yZSBzdWJtaXR0aW5nIGRyaXZlci4gSSBoYXZlCj4gY29tcGlsZWQgZHJpdmVyIHdpdGgg Zm9sbG93aW5nIGNvbW1hbmQ6Cj4KPiAvL21ha2UgQVJDSD1hcm02NCBXPTEgQz0xIENST1NTX0NP TVBJTEU9ImFhcmNoNjQtbGludXgtZ251LSIgLWozMiAtUnIKPiBPPSR6eW5xbXBfa2VybmVsX2J1 aWxkL3Jwcm9jLW5leHQKPgo+IEkgZGlkIG15IGJlc3QgdG8gbWFrZSBzdXJlIGRyaXZlciBzdGF5 cyB3YXJuaW5nIGZyZWUsIGhvd2V2ZXIgZmV3Cj4gd2FybmluZ3Mgd2VyZSBzdGlsbCBtaXNzZWQu IFRoYXQgaXMgbm90IGludGVudGlvbmFsIGFuZCBieSBtaXN0YWtlLiBJCj4gZnVsbHkgaW50ZW5k IHRvIGNvbXBseSB3aXRoIExpbnV4IEtlcm5lbCBjb21tdW5pdHkgZ3VpZGVsaW5lIGFuZAo+IGNo ZWNrbGlzdCBiZWZvcmUgc3VibWl0dGluZyBwYXRjaGVzLgo+CgpJIGFtIHN1cmUgeW91IGRvLgoK PiBBcGFydCBmcm9tIGFib3ZlIHdhcm5pbmdzLCB0d28gbW9yZSB3YXJuaW5ncyBhcmUgdGhlcmUg aW4gdjIgaS5lLiBkdWUgdG8KPiB0eXBlY2FzdCBpc3N1ZSBiZXR3ZWVuICh2b2lkIF9faW9tZW0g KikgYW5kICh2b2lkICopLiBCdXQsIEkgaGFkIG5vdAo+IHNvbHV0aW9uIGJlZm9yZS4gQWxzbyB0 aGV5IHdlcmUgdXNlZCBiZWZvcmUgaW4gZGlmZmVyZW50IGRyaXZlciBzbywgSQo+IGNob3NlIHRv IHVzZSB0aGVtIGFueXdheS4KPgoKVGhlIHNwYXJzZSB3YXJuaW5ncyByZWxhdGVkIHRvIHRoZSAi X19pb21lbSAqIiBjYW4gYmUgaWdub3JlZC4gIEkgYWxzbwp0cmllZCB0byBmaW5kIGEgc29sdXRp b24gdG8gdGhvc2UgYnV0IHJlYWxpc2VkIGl0IHdhcyBtb3JlIGludm9sdmVkCnRoYW4gZXhwZWN0 ZWQuCgo+IEkganVzdCBmb3VuZCB0aGF0IHVzaW5nIG1lbXJlbWFwIHNldCBvZiBmdW5jdGlvbnMg d2lsbCBmaXggdGhlbS4gSSB3aWxsCj4gdXNlIHRob3NlIGZ1bmN0aW9ucyBpbiBuZXh0IHBhdGNo IHNldCBpbnN0ZWFkIG9mIGlvcmVtYXBfd2MgYXMgZXhwbGFpbmVkCj4gaW4gdGhpcyBhcnRpY2xl OiBodHRwczovL2x3bi5uZXQvQXJ0aWNsZXMvNjUzNTg1Lwo+CgpUaGlzIGlzIHZlcnkgaW50ZXJl c3RpbmcuLi4KCj4gPiBCZWluZyBuZXcgdG8gdGhpcyBJIGNhbiB1bmRlcnN0YW5kIHRoYXQgY2hl Y2twYXRjaC5wbCB3YXMgb21pdHRlZCAoYWxiZWl0IGFtcGx5Cj4gPiBkb2N1bWVudGVkKSBidXQg b2J2aW91cyBjb21waWxhdGlvbiB3YXJuaW5ncyBjYW4ndCBiZSBleGN1c2VkLiAgQXMgc3VjaCBJ Cj4gPiBhbSBkcm9wcGluZyB0aGlzIHNldCBhbmQgd2lsbCBub3QgcmV2aWV3IGFub3RoZXIgdmVy c2lvbiB1bnRpbCBKYW51YXJ5Lgo+Cj4KPiBJIHVuZGVyc3RhbmQgaGF2aW5nIHdhcm5pbmdzIGlu IGRyaXZlciBtYXkgbGVhZCB0byBmcnVzdHJhdGlvbiBhbmQgbWF5Cj4gY2F1c2UgdHJ1c3QgaXNz dWVzIGZvciB0aGUgcmVzdCBvZiB0aGUgY29kZSBhbmQgaXQgY2FuJ3QgYmUgZXhjdXNlZCBhdCBh bGwuCj4KClZlcnkgbXVjaCBzby4KCj4gSSBhbSBhd2FyZSBvZiBndWlkZWxpbmVzIG9mIHNlbmRp bmcgcGF0Y2hlcyB1cHN0cmVhbQo+IChodHRwczovL3d3dy5rZXJuZWwub3JnL2RvYy9odG1sL2xh dGVzdC9wcm9jZXNzL3N1Ym1pdHRpbmctcGF0Y2hlcy5odG1sKQo+IGFuZCBmdWxseSBpbnRlbmQg dG8gY29tcGx5IHdpdGggdGhhdCBhbmQgbGlrZSBJIHNhaWQsIGlmIEkgbWlzcwo+IHNvbWV0aGlu ZyBpdCBpcyBub3QgYnkgaW50ZW50aW9uIGJ1dCBodW1hbiBlcnJvci4KPgo+IEkgY29uc3RhbnRs eSB0cnkgdG8gaW1wcm92ZSBwcm9jZXNzZXMgdG8gdXBzdHJlYW0gcGF0Y2hlcyBzbyB3ZSBkb24n dAo+IGZhY2UgYWJvdmUgdHlwZSBvZiBpc3N1ZXMuCj4KPiBJIGRpZCBydW4gY2hlY2twYXRjaC5w bCBhcyBwZXIgYmVzdCBvZiBteSBrbm93bGVkZ2UgYW5kIGZpeGVkIGxvdCBvZgo+IHN0eWxlIHJl bGF0ZWQgd2FybmluZ3MgcmVwb3J0ZWQgYnkgaXQuIEFsc28gSSBlbmFibGVkIFc9MSBvcHRpb24g aW4gbXkKPiBjb21waWxhdGlvbiBjb21tYW5kIGFuZCBmaXhlZCBsb3RzIG9mIHdhcm5pbmdzIHJl cG9ydGVkIGJ5IGNvbXBpbGVyIHRvby4KPiBBcyBJIGV4cGxhaW5lZCBlYXJsaWVyLCBJIHdhc24n dCBhd2FyZSBvZiB1bnVzZWQtdmFyaWFibGUgd2FybmluZ3MsIGFuZAo+IHNvIEkgbWlzc2VkIHRv IGZpeCB0aGVtLgo+CgpPawoKPiBXaXRoIHRoaXMsIEkgcmVxdWVzdCB0byByZXZpZXcgZHJpdmVy IGZyb20gZnVuY3Rpb25hbGl0eSBwb2ludCBvZiB2aWV3Cj4gYXMgd2VsbCBhbG9uZyB3aXRoIHN0 eWxlIGVycm9ycy4gU28sIEkgY2FuIGFkZHJlc3MgbW9yZSBudW1iZXIgb2YKPiBjb21tZW50cyAv IGNvbmNlcm5zIGluIGxlc3MgbnVtYmVyIG9mIHBhdGNoZXMuIElmIHlvdSB3YW50IHRoZXNlCj4g d2FybmluZ3MgdG8gYmUgZml4ZWQsIEkgd2lsbCBzZW5kIHYzIGFuZCB5b3UgY2FuIHB1dCBtb3Jl IGNvbW1lbnRzIG9uCj4gdjMuIEhvd2V2ZXIsIEkgaGlnaGx5IGFwcHJlY2lhdGUgaWYgd2UgY2Fu IGNvbnRpbnVlIHJldmlld3MgYW5kIG5vdAo+IHBvc3Rwb25lIHRpbGwgSmFudWFyeS4gUGxlYXNl IGxldCBtZSBrbm93IHlvdXIgdGhvdWdodHMuCj4KCkkgd2lsbCBnaXZlIHRoaXMgcGF0Y2hzZXQg YW5vdGhlciBjaGFuY2UgbGF0ZXIgdGhpcyB3ZWVrLgoKPgo+IFRoYW5rcywKPgo+IFRhbm1heQo+ Cj4KPiA+IE1hdGhpZXUKPgo+Cj4gPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmVtb3RlcHJvYy9L Y29uZmlnIGIvZHJpdmVycy9yZW1vdGVwcm9jL0tjb25maWcKPiA+PiBpbmRleCBmMzBkMDBhM2Fh YmUuLjI3ZjY2OTEwZDhkMyAxMDA2NDQKPiA+PiAtLS0gYS9kcml2ZXJzL3JlbW90ZXByb2MvS2Nv bmZpZwo+ID4+ICsrKyBiL2RyaXZlcnMvcmVtb3RlcHJvYy9LY29uZmlnCj4gPj4gQEAgLTMxNSw2 ICszMTUsMTggQEAgY29uZmlnIFRJX0szX1I1X1JFTU9URVBST0MKPiA+PiAgICAgICAgSXQncyBz YWZlIHRvIHNheSBOIGhlcmUgaWYgeW91J3JlIG5vdCBpbnRlcmVzdGVkIGluIHV0aWxpemluZwo+ ID4+ICAgICAgICBhIHNsYXZlIHByb2Nlc3Nvci4KPiA+Pgo+ID4+ICtjb25maWcgWExOWF9SNV9S RU1PVEVQUk9DCj4gPj4gKyAgICB0cmlzdGF0ZSAiWGlsaW54IFI1IHJlbW90ZXByb2Mgc3VwcG9y dCIKPiA+PiArICAgIGRlcGVuZHMgb24gUE0gJiYgQVJDSF9aWU5RTVAKPiA+PiArICAgIGRlcGVu ZHMgb24gWllOUU1QX0ZJUk1XQVJFCj4gPj4gKyAgICBzZWxlY3QgUlBNU0dfVklSVElPCj4gPj4g KyAgICBzZWxlY3QgWllOUU1QX0lQSV9NQk9YCj4gPj4gKyAgICBoZWxwCj4gPj4gKyAgICAgIFNh eSB5IG9yIG0gaGVyZSB0byBzdXBwb3J0IFhpbGlueCBSNSByZW1vdGUgcHJvY2Vzc29ycyB2aWEg dGhlIHJlbW90ZQo+ID4+ICsgICAgICBwcm9jZXNzb3IgZnJhbWV3b3JrLgo+ID4+ICsKPiA+PiAr ICAgICAgSXQncyBzYWZlIHRvIHNheSBOIGlmIG5vdCBpbnRlcmVzdGVkIGluIHVzaW5nIFJQVSBy NWYgY29yZXMuCj4gPj4gKwo+ID4+ICAgZW5kaWYgIyBSRU1PVEVQUk9DCj4gPj4KPiA+PiAgIGVu ZG1lbnUKPiA+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9yZW1vdGVwcm9jL01ha2VmaWxlIGIvZHJp dmVycy9yZW1vdGVwcm9jL01ha2VmaWxlCj4gPj4gaW5kZXggYmIyNmM5ZTRlZjljLi4zMzRhOGJl ZDRjMTQgMTAwNjQ0Cj4gPj4gLS0tIGEvZHJpdmVycy9yZW1vdGVwcm9jL01ha2VmaWxlCj4gPj4g KysrIGIvZHJpdmVycy9yZW1vdGVwcm9jL01ha2VmaWxlCj4gPj4gQEAgLTM1LDMgKzM1LDQgQEAg b2JqLSQoQ09ORklHX1NUX1NMSU1fUkVNT1RFUFJPQykgICArPSBzdF9zbGltX3Jwcm9jLm8KPiA+ PiAgIG9iai0kKENPTkZJR19TVE0zMl9SUFJPQykgICAgICAgICAgKz0gc3RtMzJfcnByb2Mubwo+ ID4+ICAgb2JqLSQoQ09ORklHX1RJX0szX0RTUF9SRU1PVEVQUk9DKSArPSB0aV9rM19kc3BfcmVt b3RlcHJvYy5vCj4gPj4gICBvYmotJChDT05GSUdfVElfSzNfUjVfUkVNT1RFUFJPQykgICs9IHRp X2szX3I1X3JlbW90ZXByb2Mubwo+ID4+ICtvYmotJChDT05GSUdfWExOWF9SNV9SRU1PVEVQUk9D KSAgICArPSB4bG54X3I1X3JlbW90ZXByb2Mubwo+ID4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3Jl bW90ZXByb2MveGxueF9yNV9yZW1vdGVwcm9jLmMgYi9kcml2ZXJzL3JlbW90ZXByb2MveGxueF9y NV9yZW1vdGVwcm9jLmMKPiA+PiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+ID4+IGluZGV4IDAwMDAw MDAwMDAwMC4uYzIxNjdmZDM4NjlkCj4gPj4gLS0tIC9kZXYvbnVsbAo+ID4+ICsrKyBiL2RyaXZl cnMvcmVtb3RlcHJvYy94bG54X3I1X3JlbW90ZXByb2MuYwo+ID4+IEBAIC0wLDAgKzEsOTU5IEBA Cj4gPj4gKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCj4gPj4gKy8qCj4gPj4g KyAqIFp5bnFNUCBSNSBSZW1vdGUgUHJvY2Vzc29yIGRyaXZlcgo+ID4+ICsgKgo+ID4+ICsgKi8K PiA+PiArCj4gPj4gKyNpbmNsdWRlIDxkdC1iaW5kaW5ncy9wb3dlci94bG54LXp5bnFtcC1wb3dl ci5oPgo+ID4+ICsjaW5jbHVkZSA8bGludXgvZmlybXdhcmUveGxueC16eW5xbXAuaD4KPiA+PiAr I2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgo+ID4+ICsjaW5jbHVkZSA8bGludXgva2VybmVs Lmg+Cj4gPj4gKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+Cj4gPj4gKyNpbmNsdWRlIDxsaW51eC9t YWlsYm94X2NsaWVudC5oPgo+ID4+ICsjaW5jbHVkZSA8bGludXgvbWFpbGJveC96eW5xbXAtaXBp LW1lc3NhZ2UuaD4KPiA+PiArI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgo+ID4+ICsjaW5jbHVk ZSA8bGludXgvb2ZfYWRkcmVzcy5oPgo+ID4+ICsjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0u aD4KPiA+PiArI2luY2x1ZGUgPGxpbnV4L29mX3Jlc2VydmVkX21lbS5oPgo+ID4+ICsjaW5jbHVk ZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Cj4gPj4gKyNpbmNsdWRlIDxsaW51eC9yZW1vdGVw cm9jLmg+Cj4gPj4gKyNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KPiA+PiArI2luY2x1ZGUgPGxp bnV4L3N5c2ZzLmg+Cj4gPj4gKwo+ID4+ICsjaW5jbHVkZSAicmVtb3RlcHJvY19pbnRlcm5hbC5o Igo+ID4+ICsKPiA+PiArLyogc2V0dGluZ3MgZm9yIFJQVSBjbHVzdGVyIG1vZGUgKi8KPiA+PiAr ZW51bSB6eW5xbXBfcjVfY2x1c3Rlcl9tb2RlIHsKPiA+PiArICAgIFNQTElUX01PREUgPSAwLCAv LyBSUFUgY2x1c3RlciBtb2RlIHdoZW4gY29yZXMgcnVuIGFzIHNlcGFyYXRlIHByb2Nlc3Nvcgo+ ID4+ICsgICAgTE9DS1NURVBfTU9ERSA9IDEsIC8vIGNvcmVzIGV4ZWN1dGUgc2FtZSBjb2RlIGlu IGxvY2tzdGVwLGNsay1mb3ItY2xrCj4gPj4gKyAgICBTSU5HTEVfQ1BVX01PREUgPSAyLCAvLyBj b3JlMCBpcyBoZWxkIGluIHJlc2V0IGFuZCBvbmx5IGNvcmUxIHJ1bnMKPiA+PiArfTsKPiA+PiAr Cj4gPj4gKy8qKgo+ID4+ICsgKiBzdHJ1Y3QgbWVtX2JhbmtfZGF0YSAtIE1lbW9yeSBCYW5rIGRl c2NyaXB0aW9uCj4gPj4gKyAqCj4gPj4gKyAqIEBhZGRyOiBTdGFydCBhZGRyZXNzIG9mIG1lbW9y eSBiYW5rCj4gPj4gKyAqIEBzaXplOiBTaXplIG9mIE1lbW9yeSBiYW5rCj4gPj4gKyAqIEBwbV9k b21haW5faWQ6IFBvd2VyLWRvbWFpbnMgaWQgb2YgbWVtb3J5IGJhbmsgZm9yIGZpcm13YXJlIHRv IHR1cm4gb24vb2ZmCj4gPj4gKyAqIEBiYW5rX25hbWU6IG5hbWUgb2YgdGhlIGJhbmsgZm9yIHJl bW90ZXByb2MgZnJhbWV3b3JrCj4gPj4gKyAqLwo+ID4+ICtzdHJ1Y3QgbWVtX2JhbmtfZGF0YSB7 Cj4gPj4gKyAgICBwaHlzX2FkZHJfdCBhZGRyOwo+ID4+ICsgICAgc2l6ZV90IHNpemU7Cj4gPj4g KyAgICBlbnVtIHBtX25vZGVfaWQgcG1fZG9tYWluX2lkOwo+ID4+ICsgICAgY2hhciAqYmFua19u YW1lOwo+ID4+ICt9Owo+ID4+ICsKPiA+PiArc3RhdGljIGNvbnN0IHN0cnVjdCBtZW1fYmFua19k YXRhIHp5bnFtcF90Y21fYmFua3NbXSA9IHsKPiA+PiArICAgIHsweGZmZTAwMDAwVUwsIDB4MTAw MDBVTCwgUERfUjVfMF9BVENNLCAiYXRjbTAifSwgLyogVENNIDY0S0IgZWFjaCAqLwo+ID4+ICsg ICAgezB4ZmZlMjAwMDBVTCwgMHgxMDAwMFVMLCBQRF9SNV8wX0JUQ00sICJidGNtMCJ9LAo+ID4+ ICsgICAgezB4ZmZlOTAwMDBVTCwgMHgxMDAwMFVMLCBQRF9SNV8xX0FUQ00sICJhdGNtMSJ9LAo+ ID4+ICsgICAgezB4ZmZlYjAwMDBVTCwgMHgxMDAwMFVMLCBQRF9SNV8xX0JUQ00sICJidGNtMSJ9 LAo+ID4+ICt9Owo+ID4+ICsKPiA+PiArLyoqCj4gPj4gKyAqIHN0cnVjdCB6eW5xbXBfcjVfY29y ZSAtIFp5bnFNUCBSNSBjb3JlIHN0cnVjdHVyZQo+ID4+ICsgKgo+ID4+ICsgKiBAZGV2OiBkZXZp Y2Ugb2YgUlBVIGluc3RhbmNlCj4gPj4gKyAqIEBucDogZGV2aWNlIG5vZGUgb2YgUlBVIGluc3Rh bmNlCj4gPj4gKyAqIEB0Y21fYmFua19jb3VudDogbnVtYmVyIFRDTSBiYW5rcyBhY2Nlc3NpYmxl IHRvIHRoaXMgUlBVCj4gPj4gKyAqIEB0Y21fYmFua3M6IGFycmF5IG9mIGVhY2ggVENNIGJhbmsg ZGF0YQo+ID4+ICsgKiBAcmVzX21lbV9jb3VudDogbnVtYmVyIG9mIFJlc2VydmVkIE1lbW9yeSBy ZWdpb25zIHBlciBjb3JlCj4gPj4gKyAqIEByZXNfbWVtOiBhcnJheSBvZiByZXNlcnZlZCBtZW1v cnkgcmVnaW9ucwo+ID4+ICsgKiBAcnByb2M6IHJwcm9jIGhhbmRsZQo+ID4+ICsgKiBAcG1fZG9t YWluX2lkOiBSUFUgQ1BVIHBvd2VyIGRvbWFpbiBpZAo+ID4+ICsgKi8KPiA+PiArc3RydWN0IHp5 bnFtcF9yNV9jb3JlIHsKPiA+PiArICAgIHN0cnVjdCBkZXZpY2UgKmRldjsKPiA+PiArICAgIHN0 cnVjdCBkZXZpY2Vfbm9kZSAqbnA7Cj4gPj4gKyAgICBpbnQgdGNtX2JhbmtfY291bnQ7Cj4gPj4g KyAgICBzdHJ1Y3QgbWVtX2JhbmtfZGF0YSAqdGNtX2JhbmtzOwo+ID4+ICsgICAgaW50IHJlc19t ZW1fY291bnQ7Cj4gPj4gKyAgICBzdHJ1Y3QgcmVzZXJ2ZWRfbWVtICpyZXNfbWVtOwo+ID4+ICsg ICAgc3RydWN0IHJwcm9jICpycHJvYzsKPiA+PiArICAgIGVudW0gcG1fbm9kZV9pZCBwbV9kb21h aW5faWQ7Cj4gPj4gK307Cj4gPj4gKwo+ID4+ICsvKioKPiA+PiArICogc3RydWN0IHp5bnFtcF9y NV9jbHVzdGVyIC0gWnlucU1QIFI1IGNsdXN0ZXIgc3RydWN0dXJlCj4gPj4gKyAqCj4gPj4gKyAq IEBkZXY6IHI1ZiBzdWJzeXN0ZW0gY2x1c3RlciBkZXZpY2Ugbm9kZQo+ID4+ICsgKiBAbW9kZTog Y2x1c3RlciBtb2RlIG9mIHR5cGUgenlucW1wX3I1X2NsdXN0ZXJfbW9kZQo+ID4+ICsgKiBAY29y ZV9jb3VudDogbnVtYmVyIG9mIHI1IGNvcmVzIHVzZWQgZm9yIHRoaXMgY2x1c3RlciBtb2RlCj4g Pj4gKyAqIEByNV9jb3JlczogQXJyYXkgb2YgcjUgY29yZXMgb2YgdHlwZSBzdHJ1Y3QgenlucW1w X3I1X2NvcmUKPiA+PiArICovCj4gPj4gK3N0cnVjdCB6eW5xbXBfcjVfY2x1c3RlciB7Cj4gPj4g KyAgICBzdHJ1Y3QgZGV2aWNlICpkZXY7Cj4gPj4gKyAgICBlbnVtICB6eW5xbXBfcjVfY2x1c3Rl cl9tb2RlIG1vZGU7Cj4gPj4gKyAgICBpbnQgY29yZV9jb3VudDsKPiA+PiArICAgIHN0cnVjdCB6 eW5xbXBfcjVfY29yZSAqcjVfY29yZXM7Cj4gPj4gK307Cj4gPj4gKwo+ID4+ICsvKgo+ID4+ICsg KiB6eW5xbXBfcjVfc2V0X21vZGUgLSBzZXQgUlBVIG9wZXJhdGlvbiBtb2RlCj4gPj4gKyAqCj4g Pj4gKyAqIHNldCBSUFUgb3BlcmF0aW9uIG1vZGUKPiA+PiArICoKPiA+PiArICogUmV0dXJuOiAw IGZvciBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZSBmb3IgZmFpbHVyZQo+ID4+ICsgKi8KPiA+PiAr c3RhdGljIGludCB6eW5xbXBfcjVfc2V0X21vZGUoc3RydWN0IHp5bnFtcF9yNV9jb3JlICpyNV9j b3JlLAo+ID4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgIGVudW0genlucW1wX3I1X2NsdXN0 ZXJfbW9kZSBycHVfbW9kZSkKPiA+PiArewo+ID4+ICsgICAgZW51bSBycHVfdGNtX2NvbWIgdGNt X21vZGU7Cj4gPj4gKyAgICBpbnQgcmV0LCByZWdfdmFsOwo+ID4+ICsKPiA+PiArICAgIHJlZ192 YWwgPSAocnB1X21vZGUgPT0gTE9DS1NURVBfTU9ERSA/IDAgOiAxKTsKPiA+PiArCj4gPj4gKyAg ICByZXQgPSB6eW5xbXBfcG1fc2V0X3JwdV9tb2RlKHI1X2NvcmUtPnBtX2RvbWFpbl9pZCwgcmVn X3ZhbCk7Cj4gPj4gKyAgICBpZiAocmV0IDwgMCkgewo+ID4+ICsgICAgICAgICAgICBwcl9lcnIo ImZhaWxlZCB0byBzZXQgUlBVIG1vZGVcbiIpOwo+ID4+ICsgICAgICAgICAgICByZXR1cm4gcmV0 Owo+ID4+ICsgICAgfQo+ID4+ICsKPiA+PiArICAgIHRjbV9tb2RlID0gKHJwdV9tb2RlID09IExP Q0tTVEVQX01PREUpID8KPiA+PiArICAgICAgICAgICAgICAgIFBNX1JQVV9UQ01fQ09NQiA6IFBN X1JQVV9UQ01fU1BMSVQ7Cj4gPj4gKyAgICByZXQgPSB6eW5xbXBfcG1fc2V0X3RjbV9jb25maWco cjVfY29yZS0+cG1fZG9tYWluX2lkLCB0Y21fbW9kZSk7Cj4gPj4gKyAgICBpZiAocmV0IDwgMCkK PiA+PiArICAgICAgICAgICAgcHJfZXJyKCJmYWlsZWQgdG8gY29uZmlndXJlIFRDTVxuIik7Cj4g Pj4gKwo+ID4+ICsgICAgcmV0dXJuIHJldDsKPiA+PiArfQo+ID4+ICsKPiA+PiArLyoKPiA+PiAr ICogenlucW1wX3I1X3Jwcm9jX3N0YXJ0Cj4gPj4gKyAqIEBycHJvYzogc2luZ2xlIFI1IGNvcmUn cyBjb3JyZXNwb25kaW5nIHJwcm9jIGluc3RhbmNlCj4gPj4gKyAqCj4gPj4gKyAqIFN0YXJ0IFI1 IENvcmUgZnJvbSBkZXNpZ25hdGVkIGJvb3QgYWRkcmVzcy4KPiA+PiArICoKPiA+PiArICogcmV0 dXJuIDAgb24gc3VjY2Vzcywgb3RoZXJ3aXNlIG5vbi16ZXJvIHZhbHVlIG9uIGZhaWx1cmUKPiA+ PiArICovCj4gPj4gK3N0YXRpYyBpbnQgenlucW1wX3I1X3Jwcm9jX3N0YXJ0KHN0cnVjdCBycHJv YyAqcnByb2MpCj4gPj4gK3sKPiA+PiArICAgIHN0cnVjdCB6eW5xbXBfcjVfY29yZSAqcjVfY29y ZSA9IHJwcm9jLT5wcml2Owo+ID4+ICsgICAgZW51bSBycHVfYm9vdF9tZW0gYm9vdG1lbTsKPiA+ PiArICAgIGludCByZXQ7Cj4gPj4gKwo+ID4+ICsgICAgaWYgKCFyNV9jb3JlKSB7Cj4gPj4gKyAg ICAgICAgICAgIHByX2VycigiY2FuJ3QgZ2V0IHI1IGNvcmVcbiIpOwo+ID4+ICsgICAgICAgICAg ICByZXR1cm4gLUVJTlZBTDsKPiA+PiArICAgIH0KPiA+PiArCj4gPj4gKyAgICBib290bWVtID0g KHJwcm9jLT5ib290YWRkciA+PSAweEZGRkMwMDAwKSA/Cj4gPj4gKyAgICAgICAgICAgICAgIFBN X1JQVV9CT09UTUVNX0hJVkVDIDogUE1fUlBVX0JPT1RNRU1fTE9WRUM7Cj4gPj4gKwo+ID4+ICsg ICAgZGV2X2RiZyhyNV9jb3JlLT5kZXYsICJSUFUgYm9vdCBhZGRyIDB4JWxseCBmcm9tICVzLiIs IHJwcm9jLT5ib290YWRkciwKPiA+PiArICAgICAgICAgICAgYm9vdG1lbSA9PSBQTV9SUFVfQk9P VE1FTV9ISVZFQyA/ICJPQ00iIDogIlRDTSIpOwo+ID4+ICsKPiA+PiArICAgIHJldCA9IHp5bnFt cF9wbV9yZXF1ZXN0X3dha2UocjVfY29yZS0+cG1fZG9tYWluX2lkLCAxLAo+ID4+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBib290bWVtLCBaWU5RTVBfUE1fUkVRVUVTVF9BQ0tf Tk8pOwo+ID4+ICsgICAgaWYgKHJldCkKPiA+PiArICAgICAgICAgICAgcHJfZXJyKCJmYWlsZWQg dG8gc3RhcnQgUlBVID0gJWRcbiIsIHI1X2NvcmUtPnBtX2RvbWFpbl9pZCk7Cj4gPj4gKyAgICBy ZXR1cm4gcmV0Owo+ID4+ICt9Cj4gPj4gKwo+ID4+ICsvKgo+ID4+ICsgKiB6eW5xbXBfcjVfcnBy b2Nfc3RvcAo+ID4+ICsgKiBAcnByb2M6IHNpbmdsZSBSNSBjb3JlJ3MgY29ycmVzcG9uZGluZyBy cHJvYyBpbnN0YW5jZQo+ID4+ICsgKgo+ID4+ICsgKiBQb3dlciBkb3duICBSNSBDb3JlLgo+ID4+ ICsgKgo+ID4+ICsgKiByZXR1cm4gMCBvbiBzdWNjZXNzLCBvdGhlcndpc2Ugbm9uLXplcm8gdmFs dWUgb24gZmFpbHVyZQo+ID4+ICsgKi8KPiA+PiArc3RhdGljIGludCB6eW5xbXBfcjVfcnByb2Nf c3RvcChzdHJ1Y3QgcnByb2MgKnJwcm9jKQo+ID4+ICt7Cj4gPj4gKyAgICBzdHJ1Y3QgenlucW1w X3I1X2NvcmUgKnI1X2NvcmUgPSBycHJvYy0+cHJpdjsKPiA+PiArICAgIGludCByZXQ7Cj4gPj4g Kwo+ID4+ICsgICAgcmV0ID0genlucW1wX3BtX2ZvcmNlX3B3cmR3bihyNV9jb3JlLT5wbV9kb21h aW5faWQsCj4gPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFpZTlFNUF9QTV9S RVFVRVNUX0FDS19CTE9DS0lORyk7Cj4gPj4gKyAgICBpZiAocmV0KQo+ID4+ICsgICAgICAgICAg ICBwcl9lcnIoImZhaWxlZCB0byBzdG9wIHJlbW90ZXByb2MgUlBVICVkXG4iLCByZXQpOwo+ID4+ ICsKPiA+PiArICAgIHJldHVybiByZXQ7Cj4gPj4gK30KPiA+PiArCj4gPj4gKy8qCj4gPj4gKyAq IHp5bnFtcF9yNV9ycHJvY19tZW1fbWFwCj4gPj4gKyAqIEBycHJvYzogc2luZ2xlIFI1IGNvcmUn cyBjb3JyZXNwb25kaW5nIHJwcm9jIGluc3RhbmNlCj4gPj4gKyAqIEBtZW06IG1lbSBlbnRyeSB0 byBtYXAKPiA+PiArICoKPiA+PiArICogQ2FsbGJhY2sgdG8gbWFwIHZhIGZvciBtZW1vcnktcmVn aW9uJ3MgY2FydmVvdXQuCj4gPj4gKyAqCj4gPj4gKyAqIHJldHVybiAwIG9uIHN1Y2Nlc3MsIG90 aGVyd2lzZSBub24temVybyB2YWx1ZSBvbiBmYWlsdXJlCj4gPj4gKyAqLwo+ID4+ICtzdGF0aWMg aW50IHp5bnFtcF9yNV9ycHJvY19tZW1fbWFwKHN0cnVjdCBycHJvYyAqcnByb2MsCj4gPj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcnByb2NfbWVtX2VudHJ5ICptZW0p Cj4gPj4gK3sKPiA+PiArICAgIHZvaWQgX19pb21lbSAqdmE7Cj4gPj4gKwo+ID4+ICsgICAgdmEg PSBpb3JlbWFwX3djKG1lbS0+ZG1hLCBtZW0tPmxlbik7Cj4gPj4gKyAgICBpZiAoSVNfRVJSX09S X05VTEwodmEpKQo+ID4+ICsgICAgICAgICAgICByZXR1cm4gLUVOT01FTTsKPiA+PiArCj4gPj4g KyAgICBtZW0tPnZhID0gKHZvaWQgKil2YTsKPiA+PiArCj4gPj4gKyAgICByZXR1cm4gMDsKPiA+ PiArfQo+ID4+ICsKPiA+PiArLyoKPiA+PiArICogenlucW1wX3I1X3Jwcm9jX21lbV91bm1hcAo+ ID4+ICsgKiBAcnByb2M6IHNpbmdsZSBSNSBjb3JlJ3MgY29ycmVzcG9uZGluZyBycHJvYyBpbnN0 YW5jZQo+ID4+ICsgKiBAbWVtOiBtZW0gZW50cnkgdG8gdW5tYXAKPiA+PiArICoKPiA+PiArICog VW5tYXAgbWVtb3J5LXJlZ2lvbiBjYXJ2ZW91dAo+ID4+ICsgKgo+ID4+ICsgKiByZXR1cm4gMCBv biBzdWNjZXNzLCBvdGhlcndpc2Ugbm9uLXplcm8gdmFsdWUgb24gZmFpbHVyZQo+ID4+ICsgKi8K PiA+PiArc3RhdGljIGludCB6eW5xbXBfcjVfcnByb2NfbWVtX3VubWFwKHN0cnVjdCBycHJvYyAq cnByb2MsCj4gPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBycHJv Y19tZW1fZW50cnkgKm1lbSkKPiA+PiArewo+ID4+ICsgICAgaW91bm1hcCgodm9pZCBfX2lvbWVt ICopbWVtLT52YSk7Cj4gPj4gKyAgICByZXR1cm4gMDsKPiA+PiArfQo+ID4+ICsKPiA+PiArLyoK PiA+PiArICogYWRkX21lbV9yZWdpb25zCj4gPj4gKyAqIEBycHJvYzogc2luZ2xlIFI1IGNvcmUn cyBjb3JyZXNwb25kaW5nIHJwcm9jIGluc3RhbmNlCj4gPj4gKyAqCj4gPj4gKyAqIENvbnN0cnVj dCBycHJvYyBtZW0gY2FydmVvdXRzIGZyb20gY2FydmVvdXQgcHJvdmlkZWQgaW4KPiA+PiArICog bWVtb3J5LXJlZ2lvbiBwcm9wZXJ0eQo+ID4+ICsgKgo+ID4+ICsgKiByZXR1cm4gMCBvbiBzdWNj ZXNzLCBvdGhlcndpc2Ugbm9uLXplcm8gdmFsdWUgb24gZmFpbHVyZQo+ID4+ICsgKi8KPiA+PiAr c3RhdGljIGludCBhZGRfbWVtX3JlZ2lvbnMoc3RydWN0IHJwcm9jICpycHJvYykKPiA+PiArewo+ ID4+ICsgICAgc3RydWN0IGRldmljZSAqZGV2Owo+ID4+ICsgICAgc3RydWN0IHJwcm9jX21lbV9l bnRyeSAqbWVtOwo+ID4+ICsgICAgc3RydWN0IHJlc2VydmVkX21lbSAqcm1lbTsKPiA+PiArICAg IHN0cnVjdCB6eW5xbXBfcjVfY29yZSAqcjVfY29yZTsKPiA+PiArICAgIGludCBpOwo+ID4+ICsK PiA+PiArICAgIHI1X2NvcmUgPSBycHJvYy0+cHJpdjsKPiA+PiArICAgIGRldiA9IHI1X2NvcmUt PmRldjsKPiA+PiArCj4gPj4gKyAgICAvKiBSZWdpc3RlciBhc3NvY2lhdGVkIHJlc2VydmVkIG1l bW9yeSByZWdpb25zICovCj4gPj4gKyAgICBmb3IgKGkgPSAwOyBpIDwgcjVfY29yZS0+cmVzX21l bV9jb3VudDsgaSsrKSB7Cj4gPj4gKyAgICAgICAgICAgIHJtZW0gPSAmcjVfY29yZS0+cmVzX21l bVtpXTsKPiA+PiArICAgICAgICAgICAgbWVtID0gcnByb2NfbWVtX2VudHJ5X2luaXQoZGV2LCBO VUxMLAo+ID4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZG1hX2Fk ZHJfdClybWVtLT5iYXNlLAo+ID4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBybWVtLT5zaXplLCBybWVtLT5iYXNlLAo+ID4+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB6eW5xbXBfcjVfcnByb2NfbWVtX21hcCwKPiA+PiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgenlucW1wX3I1X3Jwcm9jX21lbV91bm1hcCwK PiA+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm1lbS0+bmFtZSk7 Cj4gPj4gKyAgICAgICAgICAgIGlmIChJU19FUlJfT1JfTlVMTChtZW0pKQo+ID4+ICsgICAgICAg ICAgICAgICAgICAgIHJldHVybiAtRU5PTUVNOwo+ID4+ICsKPiA+PiArICAgICAgICAgICAgcnBy b2NfYWRkX2NhcnZlb3V0KHJwcm9jLCBtZW0pOwo+ID4+ICsgICAgfQo+ID4+ICsKPiA+PiArICAg IHJldHVybiAwOwo+ID4+ICt9Cj4gPj4gKwo+ID4+ICsvKgo+ID4+ICsgKiB6eW5xbXBfcjVfcnBy b2NfbWVtX3VubWFwCj4gPj4gKyAqIEBycHJvYzogc2luZ2xlIFI1IGNvcmUncyBjb3JyZXNwb25k aW5nIHJwcm9jIGluc3RhbmNlCj4gPj4gKyAqIEBtZW06IG1lbSBlbnRyeSB0byB1bm1hcAo+ID4+ ICsgKgo+ID4+ICsgKiBVbm1hcCBUQ00gYmFua3Mgd2hlbiBwb3dlcmluZyBkb3duIFI1IGNvcmUu Cj4gPj4gKyAqCj4gPj4gKyAqIHJldHVybiAwIG9uIHN1Y2Nlc3MsIG90aGVyd2lzZSBub24temVy byB2YWx1ZSBvbiBmYWlsdXJlCj4gPj4gKyAqLwo+ID4+ICtzdGF0aWMgaW50IHRjbV9tZW1fdW5t YXAoc3RydWN0IHJwcm9jICpycHJvYywgc3RydWN0IHJwcm9jX21lbV9lbnRyeSAqbWVtKQo+ID4+ ICt7Cj4gPj4gKyAgICBzdHJ1Y3QgenlucW1wX3I1X2NvcmUgKnI1X2NvcmU7Cj4gPj4gKyAgICBp bnQgaTsKPiA+PiArICAgIGVudW0gcG1fbm9kZV9pZCBwbV9kb21haW5faWQ7Cj4gPj4gKwo+ID4+ ICsgICAgcjVfY29yZSA9IHJwcm9jLT5wcml2Owo+ID4+ICsgICAgaWYgKCFyNV9jb3JlKSB7Cj4g Pj4gKyAgICAgICAgICAgIHByX2VycigicjUgY29yZSBpcyBub3QgYXZhaWxhYmxlXG4iKTsKPiA+ PiArICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7Cj4gPj4gKyAgICB9Cj4gPj4gKwo+ID4+ICsg ICAgaW91bm1hcCgodm9pZCBfX2lvbWVtICopbWVtLT52YSk7Cj4gPj4gKwo+ID4+ICsgICAgZm9y IChpID0gMDsgaSA8IHI1X2NvcmUtPnRjbV9iYW5rX2NvdW50OyBpKyspIHsKPiA+PiArICAgICAg ICAgICAgcG1fZG9tYWluX2lkID0gcjVfY29yZS0+dGNtX2JhbmtzW2ldLnBtX2RvbWFpbl9pZDsK PiA+PiArICAgICAgICAgICAgaWYgKHp5bnFtcF9wbV9yZWxlYXNlX25vZGUocG1fZG9tYWluX2lk KSkKPiA+PiArICAgICAgICAgICAgICAgICAgICBwcl93YXJuKCJjYW4ndCB0dXJuIG9mZiBUQ00g YmFuayAlZCIsIHBtX2RvbWFpbl9pZCk7Cj4gPj4gKyAgICB9Cj4gPj4gKwo+ID4+ICsgICAgcmV0 dXJuIDA7Cj4gPj4gK30KPiA+PiArCj4gPj4gKy8qCj4gPj4gKyAqIHRjbV9tZW1fbWFwCj4gPj4g KyAqIEBycHJvYzogc2luZ2xlIFI1IGNvcmUncyBjb3JyZXNwb25kaW5nIHJwcm9jIGluc3RhbmNl Cj4gPj4gKyAqIEBtZW06IG1lbSBlbnRyeSB0byBpbml0aWFsaXplIHRoZSB2YSBhbmQgZGEgZmll bGRzIG9mCj4gPj4gKyAqCj4gPj4gKyAqIEdpdmVuIFRDTSBiYW5rIGVudHJ5LCB0aGlzIGNhbGxi YWNrIHdpbGwgc2V0IGRldmljZSBhZGRyZXNzIGZvciBSNQo+ID4+ICsgKiBydW5uaW5nIG9uIFRD TSBhbmQgYWxzbyBzZXR1cCB2aXJ0dWFsIGFkZHJlc3MgZm9yIFRDTSBiYW5rCj4gPj4gKyAqIHJl bW90ZXByb2MgY2FydmVvdXQuCj4gPj4gKyAqCj4gPj4gKyAqIHJldHVybiAwIG9uIHN1Y2Nlc3Ms IG90aGVyd2lzZSBub24temVybyB2YWx1ZSBvbiBmYWlsdXJlCj4gPj4gKyAqLwo+ID4+ICtzdGF0 aWMgaW50IHRjbV9tZW1fbWFwKHN0cnVjdCBycHJvYyAqcnByb2MsCj4gPj4gKyAgICAgICAgICAg ICAgICAgICAgIHN0cnVjdCBycHJvY19tZW1fZW50cnkgKm1lbSkKPiA+PiArewo+ID4+ICsgICAg dm9pZCBfX2lvbWVtICp2YTsKPiA+PiArCj4gPj4gKyAgICB2YSA9IGlvcmVtYXBfd2MobWVtLT5k bWEsIG1lbS0+bGVuKTsKPiA+PiArICAgIGlmIChJU19FUlJfT1JfTlVMTCh2YSkpCj4gPj4gKyAg ICAgICAgICAgIHJldHVybiAtRU5PTUVNOwo+ID4+ICsKPiA+PiArICAgIC8qIFVwZGF0ZSBtZW1v cnkgZW50cnkgdmEgKi8KPiA+PiArICAgIG1lbS0+dmEgPSAodm9pZCAqKXZhOwo+ID4+ICsKPiA+ PiArICAgIC8qIGNsZWFyIFRDTXMgKi8KPiA+PiArICAgIG1lbXNldF9pbyh2YSwgMCwgbWVtLT5s ZW4pOwo+ID4+ICsKPiA+PiArICAgIC8qCj4gPj4gKyAgICAgKiBUaGUgUjVzIGV4cGVjdCB0aGVp ciBUQ00gYmFua3MgdG8gYmUgYXQgYWRkcmVzcyAweDAgYW5kIDB4MjAwMCwKPiA+PiArICAgICAq IHdoaWxlIG9uIHRoZSBMaW51eCBzaWRlIHRoZXkgYXJlIGF0IDB4ZmZleHh4eHguCj4gPj4gKyAg ICAgKgo+ID4+ICsgICAgICogWmVybyBvdXQgdGhlIGhpZ2ggMTIgYml0cyBvZiB0aGUgYWRkcmVz cy4gVGhpcyB3aWxsIGdpdmUKPiA+PiArICAgICAqIGV4cGVjdGVkIHZhbHVlcyBmb3IgVENNIEJh bmtzIDBBIGFuZCAwQiAoMHgwIGFuZCAweDIwMDAwKS4KPiA+PiArICAgICAqLwo+ID4+ICsgICAg bWVtLT5kYSAmPSAweDAwMGZmZmZmOwo+ID4+ICsKPiA+PiArICAgIC8qCj4gPj4gKyAgICAgKiBU Q00gQmFua3MgMUEgYW5kIDFCIHN0aWxsIGhhdmUgdG8gYmUgdHJhbnNsYXRlZC4KPiA+PiArICAg ICAqCj4gPj4gKyAgICAgKiBCZWxvdyBoYW5kbGUgdGhlc2UgdHdvIGJhbmtzJyBhYnNvbHV0ZSBh ZGRyZXNzZXMgKDB4ZmZlOTAwMDAgYW5kCj4gPj4gKyAgICAgKiAweGZmZWIwMDAwKSBhbmQgY29u dmVydCB0byB0aGUgZXhwZWN0ZWQgcmVsYXRpdmUgYWRkcmVzc2VzCj4gPj4gKyAgICAgKiAoMHgw IGFuZCAweDIwMDAwKS4KPiA+PiArICAgICAqLwo+ID4+ICsgICAgaWYgKG1lbS0+ZGEgPT0gMHg5 MDAwMCB8fCBtZW0tPmRhID09IDB4QjAwMDApCj4gPj4gKyAgICAgICAgICAgIG1lbS0+ZGEgLT0g MHg5MDAwMDsKPiA+PiArCj4gPj4gKyAgICAvKiBpZiB0cmFuc2xhdGVkIFRDTSBiYW5rIGFkZHJl c3MgaXMgbm90IHZhbGlkIHJlcG9ydCBlcnJvciAqLwo+ID4+ICsgICAgaWYgKG1lbS0+ZGEgIT0g MHgwICYmIG1lbS0+ZGEgIT0gMHgyMDAwMCkgewo+ID4+ICsgICAgICAgICAgICBkZXZfZXJyKCZy cHJvYy0+ZGV2LCAiaW52YWxpZCBUQ00gYWRkcmVzczogJXhcbiIsIG1lbS0+ZGEpOwo+ID4+ICsg ICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKPiA+PiArICAgIH0KPiA+PiArICAgIHJldHVybiAw Owo+ID4+ICt9Cj4gPj4gKwo+ID4+ICtzdGF0aWMgaW50IGFkZF90Y21fY2FydmVvdXRfc3BsaXRf bW9kZShzdHJ1Y3QgcnByb2MgKnJwcm9jKQo+ID4+ICt7Cj4gPj4gKyAgICBpbnQgaSwgbnVtX2Jh bmtzLCByZXQ7Cj4gPj4gKyAgICBzdHJ1Y3QgcnByb2NfbWVtX2VudHJ5ICptZW07Cj4gPj4gKyAg ICBlbnVtIHBtX25vZGVfaWQgcG1fZG9tYWluX2lkOwo+ID4+ICsgICAgdTMyIGJhbmtfYWRkcjsK PiA+PiArICAgIHNpemVfdCBiYW5rX3NpemUgPSAwOwo+ID4+ICsgICAgY2hhciAqYmFua19uYW1l Owo+ID4+ICsgICAgc3RydWN0IGRldmljZSAqZGV2Owo+ID4+ICsgICAgc3RydWN0IHp5bnFtcF9y NV9jb3JlICpyNV9jb3JlOwo+ID4+ICsKPiA+PiArICAgIHI1X2NvcmUgPSAoc3RydWN0IHp5bnFt cF9yNV9jb3JlICopcnByb2MtPnByaXY7Cj4gPj4gKyAgICBpZiAoIXI1X2NvcmUpCj4gPj4gKyAg ICAgICAgICAgIHJldHVybiAtRUlOVkFMOwo+ID4+ICsKPiA+PiArICAgIGRldiA9IHI1X2NvcmUt PmRldjsKPiA+PiArCj4gPj4gKyAgICAvKiBnbyB0aHJvdWdoIHp5bnFtcCBiYW5rcyBmb3IgcjUg bm9kZSAqLwo+ID4+ICsgICAgbnVtX2JhbmtzID0gcjVfY29yZS0+dGNtX2JhbmtfY291bnQ7Cj4g Pj4gKyAgICBpZiAobnVtX2JhbmtzIDw9IDApIHsKPiA+PiArICAgICAgICAgICAgZGV2X2Vycihk ZXYsICJuZWVkIHRvIHNwZWNpZnkgVENNIGJhbmtzXG4iKTsKPiA+PiArICAgICAgICAgICAgcmV0 dXJuIC1FSU5WQUw7Cj4gPj4gKyAgICB9Cj4gPj4gKwo+ID4+ICsgICAgZm9yIChpID0gMDsgaSA8 IG51bV9iYW5rczsgaSsrKSB7Cj4gPj4gKyAgICAgICAgICAgIGJhbmtfYWRkciA9ICh1MzIpcjVf Y29yZS0+dGNtX2JhbmtzW2ldLmFkZHI7Cj4gPj4gKyAgICAgICAgICAgIGJhbmtfbmFtZSA9IHI1 X2NvcmUtPnRjbV9iYW5rc1tpXS5iYW5rX25hbWU7Cj4gPj4gKyAgICAgICAgICAgIGJhbmtfc2l6 ZSA9IHI1X2NvcmUtPnRjbV9iYW5rc1tpXS5zaXplOwo+ID4+ICsgICAgICAgICAgICBwbV9kb21h aW5faWQgPSByNV9jb3JlLT50Y21fYmFua3NbaV0ucG1fZG9tYWluX2lkOwo+ID4+ICsKPiA+PiAr ICAgICAgICAgICAgcmV0ID0genlucW1wX3BtX3JlcXVlc3Rfbm9kZShwbV9kb21haW5faWQsCj4g Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWllOUU1QX1BNX0NB UEFCSUxJVFlfQUNDRVNTLCAwLAo+ID4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFpZTlFNUF9QTV9SRVFVRVNUX0FDS19CTE9DS0lORyk7Cj4gPj4gKyAgICAgICAg ICAgIGlmIChyZXQgPCAwKSB7Cj4gPj4gKyAgICAgICAgICAgICAgICAgICAgZGV2X2VycihkZXYs ICJmYWlsZWQgdG8gdHVybiBvbiBUQ00gJWQiLCBwbV9kb21haW5faWQpOwo+ID4+ICsgICAgICAg ICAgICAgICAgICAgIHJldHVybiByZXQ7Cj4gPj4gKyAgICAgICAgICAgIH0KPiA+PiArCj4gPj4g KyAgICAgICAgICAgIGRldl9kYmcoZGV2LCAiVENNIGNhcnZlb3V0IHNwbGl0IG1vZGUgJXMgYWRk cj0leCwgc2l6ZT0weCVseCIsCj4gPj4gKyAgICAgICAgICAgICAgICAgICAgYmFua19uYW1lLCBi YW5rX2FkZHIsIGJhbmtfc2l6ZSk7Cj4gPj4gKwo+ID4+ICsgICAgICAgICAgICAvKiBhZGQgY2Fy dmVvdXQgKi8KPiA+PiArICAgICAgICAgICAgbWVtID0gcnByb2NfbWVtX2VudHJ5X2luaXQoZGV2 LCBOVUxMLCBiYW5rX2FkZHIsCj4gPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGJhbmtfc2l6ZSwgYmFua19hZGRyLAo+ID4+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB0Y21fbWVtX21hcCwgdGNtX21lbV91bm1hcCwKPiA+PiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFua19uYW1lKTsKPiA+PiArICAgICAg ICAgICAgaWYgKElTX0VSUl9PUl9OVUxMKG1lbSkpIHsKPiA+PiArICAgICAgICAgICAgICAgICAg ICAvKiBUdXJuIG9mZiBhbGwgVENNIGJhbmtzIHR1cm5lZCBvbiBiZWZvcmUgKi8KPiA+PiArICAg ICAgICAgICAgICAgICAgICBkbyB7Cj4gPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBw bV9kb21haW5faWQgPSByNV9jb3JlLT50Y21fYmFua3NbaV0ucG1fZG9tYWluX2lkOwo+ID4+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0genlucW1wX3BtX3JlbGVhc2Vfbm9kZSgo dTMyKXBtX2RvbWFpbl9pZCk7Cj4gPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo cmV0KQo+ID4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXZfd2Fybihk ZXYsCj4gPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJm YWlsIHRvIHJlbGVhc2Ugbm9kZTogJXgsICV4XG4iLAo+ID4+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAodTMyKXBtX2RvbWFpbl9pZCwgcmV0KTsKPiA+PiAr ICAgICAgICAgICAgICAgICAgICB9IHdoaWxlIChpLS0pOwo+ID4+ICsgICAgICAgICAgICAgICAg ICAgIHJldHVybiAtRU5PTUVNOwo+ID4+ICsgICAgICAgICAgICB9Cj4gPj4gKwo+ID4+ICsgICAg ICAgICAgICBycHJvY19hZGRfY2FydmVvdXQocnByb2MsIG1lbSk7Cj4gPj4gKyAgICB9Cj4gPj4g Kwo+ID4+ICsgICAgcmV0dXJuIDA7Cj4gPj4gK30KPiA+PiArCj4gPj4gK3N0YXRpYyBpbnQgYWRk X3RjbV9jYXJ2ZW91dF9sb2Nrc3RlcF9tb2RlKHN0cnVjdCBycHJvYyAqcnByb2MpCj4gPj4gK3sK PiA+PiArICAgIGludCBpLCBudW1fYmFua3MsIHJldDsKPiA+PiArICAgIHN0cnVjdCBycHJvY19t ZW1fZW50cnkgKm1lbTsKPiA+PiArICAgIGVudW0gcG1fbm9kZV9pZCBwbV9kb21haW5faWQ7Cj4g Pj4gKyAgICB1MzIgYmFua19hZGRyOwo+ID4+ICsgICAgc2l6ZV90IGJhbmtfc2l6ZSA9IDA7Cj4g Pj4gKyAgICBjaGFyICpiYW5rX25hbWU7Cj4gPj4gKyAgICBzdHJ1Y3QgZGV2aWNlICpkZXY7Cj4g Pj4gKyAgICBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwYXJlbnRfcGRldjsKPiA+PiArICAgIHN0 cnVjdCB6eW5xbXBfcjVfY2x1c3RlciAqY2x1c3RlcjsKPiA+PiArICAgIHN0cnVjdCB6eW5xbXBf cjVfY29yZSAqcjVfY29yZTsKPiA+PiArCj4gPj4gKyAgICByNV9jb3JlID0gKHN0cnVjdCB6eW5x bXBfcjVfY29yZSAqKXJwcm9jLT5wcml2Owo+ID4+ICsgICAgaWYgKCFyNV9jb3JlKQo+ID4+ICsg ICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKPiA+PiArCj4gPj4gKyAgICBkZXYgPSByNV9jb3Jl LT5kZXY7Cj4gPj4gKyAgICBpZiAoIWRldikgewo+ID4+ICsgICAgICAgICAgICBwcl9lcnIoInI1 IGNvcmUgZGV2aWNlIHVuYXZhaWxhYmxlXG4iKTsKPiA+PiArICAgICAgICAgICAgcmV0dXJuIC1F Tk9ERVY7Cj4gPj4gKyAgICB9Cj4gPj4gKwo+ID4+ICsgICAgLyogZ28gdGhyb3VnaCB6eW5xbXAg YmFua3MgZm9yIHI1IG5vZGUgKi8KPiA+PiArICAgIG51bV9iYW5rcyA9IHI1X2NvcmUtPnRjbV9i YW5rX2NvdW50Owo+ID4+ICsgICAgaWYgKG51bV9iYW5rcyA8PSAwKSB7Cj4gPj4gKyAgICAgICAg ICAgIGRldl9lcnIoZGV2LCAibmVlZCB0byBzcGVjaWZ5IFRDTSBiYW5rc1xuIik7Cj4gPj4gKyAg ICAgICAgICAgIHJldHVybiAtRUlOVkFMOwo+ID4+ICsgICAgfQo+ID4+ICsKPiA+PiArICAgIGJh bmtfYWRkciA9ICh1MzIpcjVfY29yZS0+dGNtX2JhbmtzWzBdLmFkZHI7Cj4gPj4gKyAgICBiYW5r X25hbWUgPSByNV9jb3JlLT50Y21fYmFua3NbMF0uYmFua19uYW1lOwo+ID4+ICsgICAgZm9yIChp ID0gMDsgaSA8IG51bV9iYW5rczsgaSsrKSB7Cj4gPj4gKyAgICAgICAgICAgIGJhbmtfc2l6ZSAr PSByNV9jb3JlLT50Y21fYmFua3NbaV0uc2l6ZTsKPiA+PiArICAgICAgICAgICAgcG1fZG9tYWlu X2lkID0gcjVfY29yZS0+dGNtX2JhbmtzW2ldLnBtX2RvbWFpbl9pZDsKPiA+PiArCj4gPj4gKyAg ICAgICAgICAgIHJldCA9IHp5bnFtcF9wbV9yZXF1ZXN0X25vZGUocG1fZG9tYWluX2lkLAo+ID4+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFpZTlFNUF9QTV9DQVBB QklMSVRZX0FDQ0VTUywgMCwKPiA+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBaWU5RTVBfUE1fUkVRVUVTVF9BQ0tfQkxPQ0tJTkcpOwo+ID4+ICsgICAgICAgICAg ICBpZiAocmV0IDwgMCkgewo+ID4+ICsgICAgICAgICAgICAgICAgICAgIGRldl9lcnIoZGV2LCAi ZmFpbGVkIHRvIHR1cm4gb24gVENNICVkIiwgcG1fZG9tYWluX2lkKTsKPiA+PiArICAgICAgICAg ICAgICAgICAgICByZXR1cm4gcmV0Owo+ID4+ICsgICAgICAgICAgICB9Cj4gPj4gKyAgICB9Cj4g Pj4gKwo+ID4+ICsgICAgZGV2X2RiZyhkZXYsICJUQ00gYWRkIGNhcnZlb3V0IGxvY2tzdGVwIG1v ZGUgJXMgYWRkcj0weCV4LCBzaXplPTB4JWx4IiwKPiA+PiArICAgICAgICAgICAgYmFua19uYW1l LCBiYW5rX2FkZHIsIGJhbmtfc2l6ZSk7Cj4gPj4gKwo+ID4+ICsgICAgLyogYWRkIGNhcnZlb3V0 ICovCj4gPj4gKyAgICBtZW0gPSBycHJvY19tZW1fZW50cnlfaW5pdChkZXYsIE5VTEwsIGJhbmtf YWRkciwKPiA+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhbmtfc2l6ZSwgYmFu a19hZGRyLAo+ID4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGNtX21lbV9tYXAs IHRjbV9tZW1fdW5tYXAsCj4gPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYW5r X25hbWUpOwo+ID4+ICsgICAgaWYgKElTX0VSUl9PUl9OVUxMKG1lbSkpIHsKPiA+PiArICAgICAg ICAgICAgZm9yIChpID0gMDsgaSA8IG51bV9iYW5rczsgaSsrKSB7Cj4gPj4gKyAgICAgICAgICAg ICAgICAgICAgcG1fZG9tYWluX2lkID0gcjVfY29yZS0+dGNtX2JhbmtzW2ldLnBtX2RvbWFpbl9p ZDsKPiA+PiArICAgICAgICAgICAgICAgICAgICByZXQgPSB6eW5xbXBfcG1fcmVsZWFzZV9ub2Rl KCh1MzIpcG1fZG9tYWluX2lkKTsKPiA+PiArICAgICAgICAgICAgICAgICAgICBpZiAocmV0KQo+ ID4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2X3dhcm4oZGV2LAo+ID4+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZhaWwgdG8gcmVsZWFzZSBub2RlOiAl eCByZXQ6ICV4XG4iLAo+ID4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KHUzMilwbV9kb21haW5faWQsIHJldCk7Cj4gPj4gKyAgICAgICAgICAgIH0KPiA+PiArICAgICAg ICAgICAgcmV0dXJuIC1FTk9NRU07Cj4gPj4gKyAgICB9Cj4gPj4gKwo+ID4+ICsgICAgcnByb2Nf YWRkX2NhcnZlb3V0KHJwcm9jLCBtZW0pOwo+ID4+ICsKPiA+PiArICAgIHJldHVybiAwOwo+ID4+ ICt9Cj4gPj4gKwo+ID4+ICsvKgo+ID4+ICsgKiBhZGRfdGNtX2JhbmtzKCkKPiA+PiArICogQHJw cm9jOiBzaW5nbGUgUjUgY29yZSdzIGNvcnJlc3BvbmRpbmcgcnByb2MgaW5zdGFuY2UKPiA+PiAr ICoKPiA+PiArICogR2l2ZW4gUjUgbm9kZSBpbiByZW1vdGVwcm9jIGluc3RhbmNlCj4gPj4gKyAq IGFsbG9jYXRlIHJlbW90ZXByb2MgY2FydmVvdXQgZm9yIFRDTSBtZW1vcnkKPiA+PiArICogbmVl ZGVkIGZvciBmaXJtd2FyZSB0byBiZSBsb2FkZWQKPiA+PiArICoKPiA+PiArICogcmV0dXJuIDAg b24gc3VjY2Vzcywgb3RoZXJ3aXNlIG5vbi16ZXJvIHZhbHVlIG9uIGZhaWx1cmUKPiA+PiArICov Cj4gPj4gK3N0YXRpYyBpbnQgYWRkX3RjbV9iYW5rcyhzdHJ1Y3QgcnByb2MgKnJwcm9jKQo+ID4+ ICt7Cj4gPj4gKyAgICBzdHJ1Y3QgZGV2aWNlICpkZXY7Cj4gPj4gKyAgICBzdHJ1Y3QgcGxhdGZv cm1fZGV2aWNlICpwYXJlbnRfcGRldjsKPiA+PiArICAgIHN0cnVjdCB6eW5xbXBfcjVfY2x1c3Rl ciAqY2x1c3RlcjsKPiA+PiArICAgIHN0cnVjdCB6eW5xbXBfcjVfY29yZSAqcjVfY29yZTsKPiA+ PiArCj4gPj4gKyAgICByNV9jb3JlID0gKHN0cnVjdCB6eW5xbXBfcjVfY29yZSAqKXJwcm9jLT5w cml2Owo+ID4+ICsgICAgaWYgKCFyNV9jb3JlKQo+ID4+ICsgICAgICAgICAgICByZXR1cm4gLUVJ TlZBTDsKPiA+PiArCj4gPj4gKyAgICBkZXYgPSByNV9jb3JlLT5kZXY7Cj4gPj4gKyAgICBpZiAo IWRldikgewo+ID4+ICsgICAgICAgICAgICBwcl9lcnIoInI1IGNvcmUgZGV2aWNlIHVuYXZhaWxh YmxlXG4iKTsKPiA+PiArICAgICAgICAgICAgcmV0dXJuIC1FTk9ERVY7Cj4gPj4gKyAgICB9Cj4g Pj4gKwo+ID4+ICsgICAgcGFyZW50X3BkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2LT5wYXJl bnQpOwo+ID4+ICsgICAgaWYgKCFwYXJlbnRfcGRldikgewo+ID4+ICsgICAgICAgICAgICBkZXZf ZXJyKGRldiwgInBhcmVudCBwbGF0Zm9ybSBkZXYgdW5hdmFpbGFibGVcbiIpOwo+ID4+ICsgICAg ICAgICAgICByZXR1cm4gLUVOT0RFVjsKPiA+PiArICAgIH0KPiA+PiArCj4gPj4gKyAgICBjbHVz dGVyID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGFyZW50X3BkZXYpOwo+ID4+ICsgICAgaWYgKCFj bHVzdGVyKSB7Cj4gPj4gKyAgICAgICAgICAgIGRldl9lcnIoJnBhcmVudF9wZGV2LT5kZXYsICJJ bnZhbGlkIGRyaXZlciBkYXRhXG4iKTsKPiA+PiArICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7 Cj4gPj4gKyAgICB9Cj4gPj4gKwo+ID4+ICsgICAgaWYgKGNsdXN0ZXItPm1vZGUgPT0gU1BMSVRf TU9ERSkKPiA+PiArICAgICAgICAgICAgcmV0dXJuIGFkZF90Y21fY2FydmVvdXRfc3BsaXRfbW9k ZShycHJvYyk7Cj4gPj4gKyAgICBlbHNlIGlmIChjbHVzdGVyLT5tb2RlID09IExPQ0tTVEVQX01P REUpCj4gPj4gKyAgICAgICAgICAgIHJldHVybiBhZGRfdGNtX2NhcnZlb3V0X2xvY2tzdGVwX21v ZGUocnByb2MpOwo+ID4+ICsKPiA+PiArICAgIGRldl9lcnIoY2x1c3Rlci0+ZGV2LCAiaW52YWxp ZCBjbHVzdGVyIG1vZGVcbiIpOwo+ID4+ICsgICAgcmV0dXJuIC1FSU5WQUw7Cj4gPj4gK30KPiA+ PiArCj4gPj4gKy8qCj4gPj4gKyAqIHp5bnFtcF9yNV9wYXJzZV9mdygpCj4gPj4gKyAqIEBycHJv Yzogc2luZ2xlIFI1IGNvcmUncyBjb3JyZXNwb25kaW5nIHJwcm9jIGluc3RhbmNlCj4gPj4gKyAq IEBmdzogcHRyIHRvIGZpcm13YXJlIHRvIGJlIGxvYWRlZCBvbnRvIHI1IGNvcmUKPiA+PiArICoK PiA+PiArICogV2hlbiBsb2FkaW5nIGZpcm13YXJlLCBlbnN1cmUgdGhlIG5lY2Vzc2FyeSBjYXJ2 ZW91dHMgYXJlIGluIHJlbW90ZXByb2MKPiA+PiArICoKPiA+PiArICogcmV0dXJuIDAgb24gc3Vj Y2Vzcywgb3RoZXJ3aXNlIG5vbi16ZXJvIHZhbHVlIG9uIGZhaWx1cmUKPiA+PiArICovCj4gPj4g K3N0YXRpYyBpbnQgenlucW1wX3I1X3BhcnNlX2Z3KHN0cnVjdCBycHJvYyAqcnByb2MsIGNvbnN0 IHN0cnVjdCBmaXJtd2FyZSAqZncpCj4gPj4gK3sKPiA+PiArICAgIGludCByZXQ7Cj4gPj4gKyAg ICBzdHJ1Y3QgenlucW1wX3I1X2NvcmUgKnI1X2NvcmU7Cj4gPj4gKyAgICBzdHJ1Y3QgZGV2aWNl ICpkZXY7Cj4gPj4gKwo+ID4+ICsgICAgcjVfY29yZSA9IHJwcm9jLT5wcml2Owo+ID4+ICsgICAg aWYgKCFyNV9jb3JlKSB7Cj4gPj4gKyAgICAgICAgICAgIGRldl9lcnIoJnJwcm9jLT5kZXYsICJy NSBjb3JlIG5vdCBhdmFpbGFibGVcbiIpOwo+ID4+ICsgICAgICAgICAgICByZXR1cm4gLUVJTlZB TDsKPiA+PiArICAgIH0KPiA+PiArCj4gPj4gKyAgICBkZXYgPSByNV9jb3JlLT5kZXY7Cj4gPj4g Kwo+ID4+ICsgICAgcmV0ID0gYWRkX3RjbV9iYW5rcyhycHJvYyk7Cj4gPj4gKyAgICBpZiAocmV0 KSB7Cj4gPj4gKyAgICAgICAgICAgIGRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGdldCBUQ00gYmFu a3MsIGVyciAlZFxuIiwgcmV0KTsKPiA+PiArICAgICAgICAgICAgcmV0dXJuIHJldDsKPiA+PiAr ICAgIH0KPiA+PiArCj4gPj4gKyAgICByZXQgPSBhZGRfbWVtX3JlZ2lvbnMocnByb2MpOwo+ID4+ ICsgICAgaWYgKHJldCkKPiA+PiArICAgICAgICAgICAgZGV2X3dhcm4oZGV2LCAiZmFpbGVkIHRv IGdldCByZXNlcnZlIG1lbSByZWdpb25zICVkXG4iLCByZXQpOwo+ID4+ICsKPiA+PiArICAgIHJl dCA9IHJwcm9jX2VsZl9sb2FkX3JzY190YWJsZShycHJvYywgZncpOwo+ID4+ICsgICAgaWYgKHJl dCA9PSAtRUlOVkFMKSB7Cj4gPj4gKyAgICAgICAgICAgIC8qCj4gPj4gKyAgICAgICAgICAgICAq IHJlc291cmNlIHRhYmxlIG9ubHkgcmVxdWlyZWQgZm9yIElQQy4KPiA+PiArICAgICAgICAgICAg ICogaWYgbm90IHByZXNlbnQsIHRoaXMgaXMgbm90IG5lY2Vzc2FyaWx5IGFuIGVycm9yOwo+ID4+ ICsgICAgICAgICAgICAgKiBmb3IgZXhhbXBsZSwgbG9hZGluZyByNSBoZWxsbyB3b3JsZCBhcHBs aWNhdGlvbgo+ID4+ICsgICAgICAgICAgICAgKiBzbyBzaW1wbHkgaW5mb3JtIHVzZXIgYW5kIGtl ZXAgZ29pbmcuCj4gPj4gKyAgICAgICAgICAgICAqLwo+ID4+ICsgICAgICAgICAgICBkZXZfaW5m bygmcnByb2MtPmRldiwgIm5vIHJlc291cmNlIHRhYmxlIGZvdW5kLlxuIik7Cj4gPj4gKyAgICAg ICAgICAgIHJldCA9IDA7Cj4gPj4gKyAgICB9Cj4gPj4gKyAgICByZXR1cm4gcmV0Owo+ID4+ICt9 Cj4gPj4gKwo+ID4+ICtzdGF0aWMgc3RydWN0IHJwcm9jX29wcyB6eW5xbXBfcjVfcnByb2Nfb3Bz ID0gewo+ID4+ICsgICAgLnN0YXJ0ICAgICAgICAgID0genlucW1wX3I1X3Jwcm9jX3N0YXJ0LAo+ ID4+ICsgICAgLnN0b3AgICAgICAgICAgID0genlucW1wX3I1X3Jwcm9jX3N0b3AsCj4gPj4gKyAg ICAubG9hZCAgICAgICAgICAgPSBycHJvY19lbGZfbG9hZF9zZWdtZW50cywKPiA+PiArICAgIC5w YXJzZV9mdyAgICAgICA9IHp5bnFtcF9yNV9wYXJzZV9mdywKPiA+PiArICAgIC5maW5kX2xvYWRl ZF9yc2NfdGFibGUgPSBycHJvY19lbGZfZmluZF9sb2FkZWRfcnNjX3RhYmxlLAo+ID4+ICsgICAg LnNhbml0eV9jaGVjayAgID0gcnByb2NfZWxmX3Nhbml0eV9jaGVjaywKPiA+PiArICAgIC5nZXRf Ym9vdF9hZGRyICA9IHJwcm9jX2VsZl9nZXRfYm9vdF9hZGRyLAo+ID4+ICt9Owo+ID4+ICsKPiA+ PiArc3RhdGljIHZvaWQgenlucW1wX3I1X3ByaW50X2R0X25vZGVfaW5mbyhzdHJ1Y3QgenlucW1w X3I1X2NsdXN0ZXIgKmNsdXN0ZXIpCj4gPj4gK3sKPiA+PiArICAgIGludCBpLCBqLCBrOwo+ID4+ ICsgICAgc3RydWN0IHp5bnFtcF9yNV9jb3JlICpyNV9jb3JlOwo+ID4+ICsKPiA+PiArICAgIGRl dl9kYmcoY2x1c3Rlci0+ZGV2LCAiUHJpbnRpbmcgZHQgbm9kZSBpbmZvXG4iKTsKPiA+PiArCj4g Pj4gKyAgICBwcl9kZWJ1ZygiY2x1c3RlciBtb2RlID0gJWRcbiIsIGNsdXN0ZXItPm1vZGUpOwo+ ID4+ICsgICAgcHJfZGVidWcoInI1ZiBjbHVzdGVyIGluICVzIG1vZGVcbiIsIChjbHVzdGVyLT5t b2RlID09IDApID8gIlNQTElUIiA6Cj4gPj4gKyAgICAgICAgICAgICBjbHVzdGVyLT5tb2RlID09 IDEgPyAiTE9DS1NURVAiIDogIlNJTkdMRV9DUFUiKTsKPiA+PiArICAgIHByX2RlYnVnKCJyNWYg bnVtIGNvcmVzID0gJWRcbiIsIGNsdXN0ZXItPmNvcmVfY291bnQpOwo+ID4+ICsKPiA+PiArICAg IGZvciAoaSA9IDA7IGkgPCBjbHVzdGVyLT5jb3JlX2NvdW50OyBpKyspIHsKPiA+PiArICAgICAg ICAgICAgcjVfY29yZSA9ICZjbHVzdGVyLT5yNV9jb3Jlc1tpXTsKPiA+PiArICAgICAgICAgICAg aWYgKCFyNV9jb3JlKSB7Cj4gPj4gKyAgICAgICAgICAgICAgICAgICAgcHJfZXJyKCJjYW4ndCBn ZXQgcjVfY29yZVxuIik7Cj4gPj4gKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7Cj4gPj4g KyAgICAgICAgICAgIH0KPiA+PiArCj4gPj4gKyAgICAgICAgICAgIHByX2RlYnVnKCJyNSBjb3Jl ICVkIG5vZGVzXG4iLCBpKTsKPiA+PiArICAgICAgICAgICAgcHJfZGVidWcoIlRDTSBiYW5rcyA9 ICVkXG4iLCByNV9jb3JlLT50Y21fYmFua19jb3VudCk7Cj4gPj4gKyAgICAgICAgICAgIGZvciAo ayA9IDA7IGsgPCByNV9jb3JlLT50Y21fYmFua19jb3VudDsgaysrKSB7Cj4gPj4gKyAgICAgICAg ICAgICAgICAgICAgcHJfZGVidWcoInRjbSAlZCBhZGRyPTB4JWxseCBzaXplPTB4JWx4LCBwbV9p ZD0lZCwgJXNcbiIsCj4gPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaywgcjVfY29y ZS0+dGNtX2JhbmtzW2tdLmFkZHIsCj4gPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg cjVfY29yZS0+dGNtX2JhbmtzW2tdLnNpemUsCj4gPj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgcjVfY29yZS0+dGNtX2JhbmtzW2tdLnBtX2RvbWFpbl9pZCwKPiA+PiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICByNV9jb3JlLT50Y21fYmFua3Nba10uYmFua19uYW1lKTsKPiA+ PiArICAgICAgICAgICAgfQo+ID4+ICsKPiA+PiArICAgICAgICAgICAgcHJfZGVidWcoInJlc2Vy dmUgbWVtIHJlZ2lvbnMgPSAlZFxuIiwgcjVfY29yZS0+cmVzX21lbV9jb3VudCk7Cj4gPj4gKwo+ ID4+ICsgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgcjVfY29yZS0+cmVzX21lbV9jb3VudDsg aisrKSB7Cj4gPj4gKyAgICAgICAgICAgICAgICAgICAgcHJfZGVidWcoIm1lbSAlZCBhZGRyPTB4 JWxseCwgc2l6ZT0weCVsbHgsIG5hbWU9JXNcbiIsCj4gPj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgaiwgcjVfY29yZS0+cmVzX21lbVtqXS5iYXNlLAo+ID4+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHI1X2NvcmUtPnJlc19tZW1bal0uc2l6ZSwKPiA+PiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICByNV9jb3JlLT5yZXNfbWVtW2pdLm5hbWUpOwo+ID4+ICsgICAg ICAgICAgICB9Cj4gPj4gKyAgICB9Cj4gPj4gK30KPiA+PiArCj4gPj4gKy8qKgo+ID4+ICsgKiB6 eW5xbXBfcjVfYWRkX3Jwcm9jX2NvcmUoKSAtIFByb2JlcyBaeW5xTVAgUjUgcHJvY2Vzc29yIGRl dmljZSBub2RlCj4gPj4gKyAqICAgICAgICAgICAgICAgICB0aGlzIGlzIGNhbGxlZCBmb3IgZWFj aCBpbmRpdmlkdWFsIFI1IGNvcmUgdG8KPiA+PiArICogICAgICAgICAgICAgICAgIHNldCB1cCBt YWlsYm94LCBYaWxpbnggcGxhdGZvcm0gbWFuYWdlciB1bmlxdWUgSUQsCj4gPj4gKyAqICAgICAg ICAgICAgICAgICBhZGQgdG8gcnByb2MgY29yZQo+ID4+ICsgKgo+ID4+ICsgKiBAcjVfY29yZTog enlucW1wX3I1X2NvcmUgcjUgY29yZSBvYmplY3QgdG8gaW5pdGlhbGl6ZQo+ID4+ICsgKgo+ID4+ ICsgKiBSZXR1cm46IDAgZm9yIHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVlIGZvciBmYWlsdXJlLgo+ ID4+ICsgKi8KPiA+PiArc3RhdGljIGludCB6eW5xbXBfcjVfYWRkX3Jwcm9jX2NvcmUoc3RydWN0 IHp5bnFtcF9yNV9jb3JlICpyNV9jb3JlKQo+ID4+ICt7Cj4gPj4gKyAgICBpbnQgcmV0Owo+ID4+ ICsgICAgc3RydWN0IHJwcm9jICpyNV9ycHJvYzsKPiA+PiArICAgIHN0cnVjdCBkZXZpY2UgKmRl djsKPiA+PiArCj4gPj4gKyAgICBkZXYgPSByNV9jb3JlLT5kZXY7Cj4gPj4gKwo+ID4+ICsgICAg LyogU2V0IHVwIERNQSBtYXNrICovCj4gPj4gKyAgICByZXQgPSBkbWFfc2V0X2NvaGVyZW50X21h c2soZGV2LCBETUFfQklUX01BU0soMzIpKTsKPiA+PiArICAgIGlmIChyZXQpCj4gPj4gKyAgICAg ICAgICAgIHJldHVybiByZXQ7Cj4gPj4gKwo+ID4+ICsgICAgLyogQWxsb2NhdGUgcmVtb3RlcHJv YyBpbnN0YW5jZSAqLwo+ID4+ICsgICAgcjVfcnByb2MgPSBkZXZtX3Jwcm9jX2FsbG9jKGRldiwg ZGV2X25hbWUoZGV2KSwgJnp5bnFtcF9yNV9ycHJvY19vcHMsCj4gPj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgTlVMTCwgc2l6ZW9mKHN0cnVjdCB6eW5xbXBfcjVfY29yZSkpOwo+ ID4+ICsgICAgaWYgKElTX0VSUl9PUl9OVUxMKHI1X3Jwcm9jKSkKPiA+PiArICAgICAgICAgICAg cmV0dXJuIC1FTk9NRU07Cj4gPj4gKwo+ID4+ICsgICAgcjVfcnByb2MtPmF1dG9fYm9vdCA9IGZh bHNlOwo+ID4+ICsgICAgcjVfcnByb2MtPnByaXYgPSByNV9jb3JlOwo+ID4+ICsKPiA+PiArICAg IC8qIEFkZCBSNSByZW1vdGVwcm9jICovCj4gPj4gKyAgICByZXQgPSBkZXZtX3Jwcm9jX2FkZChk ZXYsIHI1X3Jwcm9jKTsKPiA+PiArICAgIGlmIChyZXQpIHsKPiA+PiArICAgICAgICAgICAgcHJf ZXJyKCJmYWlsZWQgdG8gYWRkIHI1IHJlbW90ZXByb2NcbiIpOwo+ID4+ICsgICAgICAgICAgICBy ZXR1cm4gcmV0Owo+ID4+ICsgICAgfQo+ID4+ICsKPiA+PiArICAgIHJldHVybiAwOwo+ID4+ICt9 Cj4gPj4gKwo+ID4+ICtzdGF0aWMgaW50IHp5bnFtcF9yNV9nZXRfdGNtX25vZGUoc3RydWN0IHp5 bnFtcF9yNV9jbHVzdGVyICpjbHVzdGVyKQo+ID4+ICt7Cj4gPj4gKyAgICBpbnQgdGNtX2Jhbmtf Y291bnQsIHRjbV9ub2RlOwo+ID4+ICsgICAgaW50IGkgPSAwLCBqOwo+ID4+ICsgICAgc3RydWN0 IHp5bnFtcF9yNV9jb3JlICpyNV9jb3JlOwo+ID4+ICsgICAgY29uc3Qgc3RydWN0IG1lbV9iYW5r X2RhdGEgKnRjbSA9IHp5bnFtcF90Y21fYmFua3M7Cj4gPj4gKyAgICBzdHJ1Y3QgZGV2aWNlICpk ZXYgPSBjbHVzdGVyLT5kZXY7Cj4gPj4gKwo+ID4+ICsgICAgLyogVG9EbzogVXNlIHByZWRlZmlu ZWQgVENNIGFkZHJlc3Mgc3BhY2UgdmFsdWVzIGZyb20gZHJpdmVyIHVudGlsCj4gPj4gKyAgICAg KiBzeXN0ZW0tZHQgc3BlYyBpcyBub3QgZmluYWwgZm90IFRDTQo+ID4+ICsgICAgICovCj4gPj4g KyAgICB0Y21fYmFua19jb3VudCA9IEFSUkFZX1NJWkUoenlucW1wX3RjbV9iYW5rcyk7Cj4gPj4g Kwo+ID4+ICsgICAgLyogY291bnQgcGVyIGNvcmUgdGNtIGJhbmtzICovCj4gPj4gKyAgICB0Y21f YmFua19jb3VudCA9IHRjbV9iYW5rX2NvdW50IC8gY2x1c3Rlci0+Y29yZV9jb3VudDsKPiA+PiAr Cj4gPj4gKyAgICAvKiByNSBjb3JlIDAgd2lsbCB1c2UgYWxsIG9mIFRDTSBiYW5rcyBpbiBsb2Nr c3RlcCBtb2RlLgo+ID4+ICsgICAgICogSW4gc3BsaXQgbW9kZSwgcjUgY29yZTAgd2lsbCB1c2Ug MTI4ayBhbmQgcjUgY29yZTEgd2lsbCB1c2UgYW5vdGhlcgo+ID4+ICsgICAgICogMTI4ay4gQXNz aWduIFRDTSBiYW5rcyB0byBlYWNoIGNvcmUgYWNjb3JkaW5nbHkKPiA+PiArICAgICAqLwo+ID4+ ICsgICAgdGNtX25vZGUgPSAwOwo+ID4+ICsgICAgZm9yIChqID0gMDsgaiA8IGNsdXN0ZXItPmNv cmVfY291bnQ7IGorKykgewo+ID4+ICsgICAgICAgICAgICByNV9jb3JlID0gJmNsdXN0ZXItPnI1 X2NvcmVzW2pdOwo+ID4+ICsgICAgICAgICAgICByNV9jb3JlLT50Y21fYmFua3MgPSBkZXZtX2t6 YWxsb2MoZGV2LCBzaXplb2Yoc3RydWN0IG1lbV9iYW5rX2RhdGEpICoKPiA+PiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRjbV9iYW5rX2NvdW50LCBHRlBf S0VSTkVMKTsKPiA+PiArICAgICAgICAgICAgaWYgKElTX0VSUl9PUl9OVUxMKHI1X2NvcmUtPnRj bV9iYW5rcykpCj4gPj4gKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9NRU07Cj4gPj4g Kwo+ID4+ICsgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdGNtX2JhbmtfY291bnQ7IGkrKykg ewo+ID4+ICsgICAgICAgICAgICAgICAgICAgIC8qIFVzZSBwcmUtZGVmaW5lZCBUQ00gcmVnIHZh bHVlcy4KPiA+PiArICAgICAgICAgICAgICAgICAgICAgKiBFdmVudHVhbGx5IHRoaXMgc2hvdWxk IGJlIHJlcGxhY2VkIGJ5IHZhbHVlcwo+ID4+ICsgICAgICAgICAgICAgICAgICAgICAqIHBhcnNl ZCBmcm9tIGR0cy4KPiA+PiArICAgICAgICAgICAgICAgICAgICAgKi8KPiA+PiArICAgICAgICAg ICAgICAgICAgICByNV9jb3JlLT50Y21fYmFua3NbaV0uYWRkciA9IHRjbVt0Y21fbm9kZV0uYWRk cjsKPiA+PiArICAgICAgICAgICAgICAgICAgICByNV9jb3JlLT50Y21fYmFua3NbaV0uc2l6ZSA9 IHRjbVt0Y21fbm9kZV0uc2l6ZTsKPiA+PiArICAgICAgICAgICAgICAgICAgICByNV9jb3JlLT50 Y21fYmFua3NbaV0ucG1fZG9tYWluX2lkID0gdGNtW3RjbV9ub2RlXS5wbV9kb21haW5faWQ7Cj4g Pj4gKyAgICAgICAgICAgICAgICAgICAgcjVfY29yZS0+dGNtX2JhbmtzW2ldLmJhbmtfbmFtZSA9 IHRjbVt0Y21fbm9kZV0uYmFua19uYW1lOwo+ID4+ICsgICAgICAgICAgICAgICAgICAgIHRjbV9u b2RlKys7Cj4gPj4gKyAgICAgICAgICAgIH0KPiA+PiArCj4gPj4gKyAgICAgICAgICAgIHI1X2Nv cmUtPnRjbV9iYW5rX2NvdW50ID0gdGNtX2JhbmtfY291bnQ7Cj4gPj4gKyAgICB9Cj4gPj4gKwo+ ID4+ICsgICAgcmV0dXJuIDA7Cj4gPj4gK30KPiA+PiArCj4gPj4gK3N0YXRpYyBpbnQgenlucW1w X3I1X2dldF9tZW1fcmVnaW9uX25vZGUoc3RydWN0IHp5bnFtcF9yNV9jb3JlICpyNV9jb3JlKQo+ ID4+ICt7Cj4gPj4gKyAgICBpbnQgcmVzX21lbV9jb3VudCwgaTsKPiA+PiArICAgIHN0cnVjdCBk ZXZpY2UgKmRldjsKPiA+PiArICAgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsICpybWVtX25wOwo+ ID4+ICsgICAgc3RydWN0IHJlc2VydmVkX21lbSAqcm1lbTsKPiA+PiArCj4gPj4gKyAgICBkZXYg PSByNV9jb3JlLT5kZXY7Cj4gPj4gKwo+ID4+ICsgICAgbnAgPSByNV9jb3JlLT5ucDsKPiA+PiAr ICAgIGlmIChJU19FUlJfT1JfTlVMTChucCkpIHsKPiA+PiArICAgICAgICAgICAgcHJfZXJyKCJp bnZhbGlkIGRldmljZSBub2RlIG9mIHI1IGNvcmVcbiIpOwo+ID4+ICsgICAgICAgICAgICByZXR1 cm4gLUVJTlZBTDsKPiA+PiArICAgIH0KPiA+PiArCj4gPj4gKyAgICByZXNfbWVtX2NvdW50ID0g b2ZfcHJvcGVydHlfY291bnRfZWxlbXNfb2Zfc2l6ZShucCwgIm1lbW9yeS1yZWdpb24iLAo+ID4+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6 ZW9mKHBoYW5kbGUpKTsKPiA+PiArICAgIGlmIChyZXNfbWVtX2NvdW50IDw9IDApIHsKPiA+PiAr ICAgICAgICAgICAgZGV2X3dhcm4oZGV2LCAiZmFpbGVkIHRvIGdldCBtZW1vcnktcmVnaW9uIHBy b3BlcnR5ICVkXG4iLAo+ID4+ICsgICAgICAgICAgICAgICAgICAgICByZXNfbWVtX2NvdW50KTsK PiA+PiArICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7Cj4gPj4gKyAgICB9Cj4gPj4gKwo+ID4+ ICsgICAgcjVfY29yZS0+cmVzX21lbSA9IGRldm1fa3phbGxvYyhkZXYsCj4gPj4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc19tZW1fY291bnQgKiBzaXplb2Yoc3RydWN0 IHJlc2VydmVkX21lbSksCj4gPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IEdGUF9LRVJORUwpOwo+ID4+ICsgICAgaWYgKCFyNV9jb3JlLT5yZXNfbWVtKSB7Cj4gPj4gKyAg ICAgICAgICAgIGRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGFsbG9jYXRlIG1lbSByZWdpb24gbWVt b3J5XG4iKTsKPiA+PiArICAgICAgICAgICAgcmV0dXJuIC1FTk9NRU07Cj4gPj4gKyAgICB9Cj4g Pj4gKwo+ID4+ICsgICAgZm9yIChpID0gMDsgaSA8IHJlc19tZW1fY291bnQ7IGkrKykgewo+ID4+ ICsgICAgICAgICAgICBybWVtX25wID0gb2ZfcGFyc2VfcGhhbmRsZShucCwgIm1lbW9yeS1yZWdp b24iLCBpKTsKPiA+PiArICAgICAgICAgICAgaWYgKCFybWVtX25wKQo+ID4+ICsgICAgICAgICAg ICAgICAgICAgIHJldHVybiAtRUlOVkFMOwo+ID4+ICsKPiA+PiArICAgICAgICAgICAgcm1lbSA9 IG9mX3Jlc2VydmVkX21lbV9sb29rdXAocm1lbV9ucCk7Cj4gPj4gKyAgICAgICAgICAgIGlmICgh cm1lbSkgewo+ID4+ICsgICAgICAgICAgICAgICAgICAgIG9mX25vZGVfcHV0KHJtZW1fbnApOwo+ ID4+ICsgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOwo+ID4+ICsgICAgICAgICAg ICB9Cj4gPj4gKwo+ID4+ICsgICAgICAgICAgICBtZW1jcHkoJnI1X2NvcmUtPnJlc19tZW1baV0s IHJtZW0sCj4gPj4gKyAgICAgICAgICAgICAgICAgICBzaXplb2Yoc3RydWN0IHJlc2VydmVkX21l bSkpOwo+ID4+ICsgICAgICAgICAgICBvZl9ub2RlX3B1dChybWVtX25wKTsKPiA+PiArICAgIH0K PiA+PiArCj4gPj4gKyAgICByNV9jb3JlLT5yZXNfbWVtX2NvdW50ID0gcmVzX21lbV9jb3VudDsK PiA+PiArCj4gPj4gKyAgICByZXR1cm4gMDsKPiA+PiArfQo+ID4+ICsKPiA+PiArc3RhdGljIGlu dCB6eW5xbXBfcjVfY29yZV9pbml0KHN0cnVjdCB6eW5xbXBfcjVfY2x1c3RlciAqY2x1c3RlcikK PiA+PiArewo+ID4+ICsgICAgaW50IHJldCwgaTsKPiA+PiArICAgIHN0cnVjdCB6eW5xbXBfcjVf Y29yZSAqcjVfY29yZTsKPiA+PiArICAgIHN0cnVjdCBkZXZpY2UgKmRldiA9IGNsdXN0ZXItPmRl djsKPiA+PiArCj4gPj4gKyAgICByZXQgPSB6eW5xbXBfcjVfZ2V0X3RjbV9ub2RlKGNsdXN0ZXIp Owo+ID4+ICsgICAgaWYgKHJldCA8IDApIHsKPiA+PiArICAgICAgICAgICAgZGV2X2VycihkZXYs ICJjYW4ndCBnZXQgdGNtIG5vZGUsIGVyciAlZFxuIiwgcmV0KTsKPiA+PiArICAgICAgICAgICAg cmV0dXJuIHJldDsKPiA+PiArICAgIH0KPiA+PiArCj4gPj4gKyAgICBmb3IgKGkgPSAwOyBpIDwg Y2x1c3Rlci0+Y29yZV9jb3VudDsgaSsrKSB7Cj4gPj4gKyAgICAgICAgICAgIHI1X2NvcmUgPSAm Y2x1c3Rlci0+cjVfY29yZXNbaV07Cj4gPj4gKyAgICAgICAgICAgIGlmICghcjVfY29yZSkgewo+ ID4+ICsgICAgICAgICAgICAgICAgICAgIHByX2VycigiaW52YWxpZCByNSBjb3JlXG4iKTsKPiA+ PiArICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKPiA+PiArICAgICAgICAgICAg fQo+ID4+ICsKPiA+PiArICAgICAgICAgICAgcmV0ID0genlucW1wX3I1X2dldF9tZW1fcmVnaW9u X25vZGUocjVfY29yZSk7Cj4gPj4gKyAgICAgICAgICAgIGlmIChyZXQpCj4gPj4gKyAgICAgICAg ICAgICAgICAgICAgZGV2X3dhcm4oZGV2LCAibWVtb3J5LXJlZ2lvbiBwcm9wIGZhaWxlZCAlZFxu IiwgcmV0KTsKPiA+PiArCj4gPj4gKyAgICAgICAgICAgIHJldCA9IG9mX3Byb3BlcnR5X3JlYWRf dTMyX2luZGV4KHI1X2NvcmUtPm5wLCAicG93ZXItZG9tYWlucyIsCj4gPj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEsICZyNV9jb3JlLT5wbV9kb21haW5f aWQpOwo+ID4+ICsgICAgICAgICAgICBpZiAocmV0KSB7Cj4gPj4gKyAgICAgICAgICAgICAgICAg ICAgZGV2X2VycihkZXYsICJmYWlsZWQgdG8gZ2V0IHBvd2VyLWRvbWFpbnMgcHJvcGVydHlcbiIp Owo+ID4+ICsgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXQ7Cj4gPj4gKyAgICAgICAgICAg IH0KPiA+PiArCj4gPj4gKyAgICAgICAgICAgIHJldCA9IHp5bnFtcF9yNV9zZXRfbW9kZShyNV9j b3JlLCBjbHVzdGVyLT5tb2RlKTsKPiA+PiArICAgICAgICAgICAgaWYgKHJldCkKPiA+PiArICAg ICAgICAgICAgICAgICAgICByZXR1cm4gcmV0Owo+ID4+ICsKPiA+PiArICAgICAgICAgICAgcmV0 ID0genlucW1wX3I1X2FkZF9ycHJvY19jb3JlKHI1X2NvcmUpOwo+ID4+ICsgICAgICAgICAgICBp ZiAocmV0KSB7Cj4gPj4gKyAgICAgICAgICAgICAgICAgICAgZGV2X2VycihkZXYsICJmYWlsZWQg dG8gaW5pdCByNSBjb3JlICVkXG4iLCBpKTsKPiA+PiArICAgICAgICAgICAgICAgICAgICByZXR1 cm4gcmV0Owo+ID4+ICsgICAgICAgICAgICB9Cj4gPj4gKyAgICB9Cj4gPj4gKwo+ID4+ICsgICAg cmV0dXJuIDA7Cj4gPj4gK30KPiA+PiArCj4gPj4gK3N0YXRpYyBpbnQgenlucW1wX3I1X2NsdXN0 ZXJfaW5pdChzdHJ1Y3QgenlucW1wX3I1X2NsdXN0ZXIgKmNsdXN0ZXIpCj4gPj4gK3sKPiA+PiAr ICAgIHN0cnVjdCBkZXZpY2UgKmRldiA9IGNsdXN0ZXItPmRldjsKPiA+PiArICAgIHN0cnVjdCBk ZXZpY2Vfbm9kZSAqZGV2X25vZGUgPSBkZXZfb2Zfbm9kZShkZXYpOwo+ID4+ICsgICAgc3RydWN0 IGRldmljZV9ub2RlICpjaGlsZDsKPiA+PiArICAgIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmNo aWxkX3BkZXY7Cj4gPj4gKyAgICBpbnQgY29yZV9jb3VudCA9IDAsIHJldCwgaTsKPiA+PiArICAg IGVudW0genlucW1wX3I1X2NsdXN0ZXJfbW9kZSBjbHVzdGVyX21vZGUgPSBMT0NLU1RFUF9NT0RF Owo+ID4+ICsgICAgc3RydWN0IHp5bnFtcF9yNV9jb3JlICpyNV9jb3JlczsKPiA+PiArCj4gPj4g KyAgICByZXQgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMihkZXZfbm9kZSwgInhsbngsY2x1c3Rlci1t b2RlIiwgJmNsdXN0ZXJfbW9kZSk7Cj4gPj4gKwo+ID4+ICsgICAgLyogb24gc3VjY2VzcyByZXR1 cm5zIDAsIGlmIG5vdCBkZWZpbmVkIHRoZW4gcmV0dXJucyAtRUlOVkFMLAo+ID4+ICsgICAgICog SW4gdGhhdCBjYXNlLCBkZWZhdWx0IGlzIExPQ0tTVEVQIG1vZGUKPiA+PiArICAgICAqLwo+ID4+ ICsgICAgaWYgKHJldCAhPSAtRUlOVkFMICYmIHJldCAhPSAwKSB7Cj4gPj4gKyAgICAgICAgICAg IGRldl9lcnIoZGV2LCAiSW52YWxpZCB4bG54LGNsdXN0ZXItbW9kZSBwcm9wZXJ0eVxuIik7Cj4g Pj4gKyAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOwo+ID4+ICsgICAgfQo+ID4+ICsKPiA+PiAr ICAgIGlmIChjbHVzdGVyX21vZGUgPT0gU0lOR0xFX0NQVV9NT0RFKSB7Cj4gPj4gKyAgICAgICAg ICAgIGRldl9lcnIoZGV2LCAiZHJpdmVyIGRvZXMgbm90IHN1cHBvcnQgc2luZ2xlIGNwdSBtb2Rl XG4iKTsKPiA+PiArICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7Cj4gPj4gKyAgICB9IGVsc2Ug aWYgKChjbHVzdGVyX21vZGUgIT0gU1BMSVRfTU9ERSAmJgo+ID4+ICsgICAgICAgICAgICAgICBj bHVzdGVyX21vZGUgIT0gTE9DS1NURVBfTU9ERSkpIHsKPiA+PiArICAgICAgICAgICAgZGV2X2Vy cihkZXYsICJJbnZhbGlkIGNsdXN0ZXIgbW9kZVxuIik7Cj4gPj4gKyAgICAgICAgICAgIHJldHVy biAtRUlOVkFMOwo+ID4+ICsgICAgfQo+ID4+ICsKPiA+PiArICAgIGNvcmVfY291bnQgPSBvZl9n ZXRfYXZhaWxhYmxlX2NoaWxkX2NvdW50KGRldl9ub2RlKTsKPiA+PiArICAgIGlmIChjb3JlX2Nv dW50IDw9IDApIHsKPiA+PiArICAgICAgICAgICAgZGV2X2VycihkZXYsICJJbnZhbGlkIG51bWJl ciBvZiByNSBjb3JlcyAlZCIsIGNvcmVfY291bnQpOwo+ID4+ICsgICAgICAgICAgICByZXR1cm4g LUVJTlZBTDsKPiA+PiArICAgIH0gZWxzZSBpZiAoY2x1c3Rlcl9tb2RlID09IFNQTElUX01PREUg JiYgY29yZV9jb3VudCAhPSAyKSB7Cj4gPj4gKyAgICAgICAgICAgIGRldl9lcnIoZGV2LCAiSW52 YWxpZCBudW1iZXIgb2YgcjUgY29yZXMgZm9yIHNwbGl0IG1vZGVcbiIpOwo+ID4+ICsgICAgICAg ICAgICByZXR1cm4gLUVJTlZBTDsKPiA+PiArICAgIH0gZWxzZSBpZiAoY2x1c3Rlcl9tb2RlID09 IExPQ0tTVEVQX01PREUgJiYgY29yZV9jb3VudCA9PSAyKSB7Cj4gPj4gKyAgICAgICAgICAgIGRl dl93YXJuKGRldiwgIk9ubHkgcjUgY29yZTAgd2lsbCBiZSB1c2VkXG4iKTsKPiA+PiArICAgICAg ICAgICAgY29yZV9jb3VudCA9IDE7Cj4gPj4gKyAgICB9Cj4gPj4gKwo+ID4+ICsgICAgcjVfY29y ZXMgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2Yoc3RydWN0IHp5bnFtcF9yNV9jb3JlKSAqCj4g Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcmVfY291 bnQsIEdGUF9LRVJORUwpOwo+ID4+ICsgICAgaWYgKElTX0VSUl9PUl9OVUxMKHI1X2NvcmVzKSkg ewo+ID4+ICsgICAgICAgICAgICBkZXZfZXJyKGRldiwgImNhbid0IGFsbG9jYXRlIG1lbW9yeSBm b3IgY29yZXNcbiIpOwo+ID4+ICsgICAgICAgICAgICByZXR1cm4gLUVOT01FTTsKPiA+PiArICAg IH0KPiA+PiArCj4gPj4gKyAgICBpID0gMDsKPiA+PiArICAgIGZvcl9lYWNoX2F2YWlsYWJsZV9j aGlsZF9vZl9ub2RlKGRldl9ub2RlLCBjaGlsZCkgewo+ID4+ICsgICAgICAgICAgICBjaGlsZF9w ZGV2ID0gb2ZfZmluZF9kZXZpY2VfYnlfbm9kZShjaGlsZCk7Cj4gPj4gKyAgICAgICAgICAgIGlm ICghY2hpbGRfcGRldikKPiA+PiArICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVOT0RFVjsK PiA+PiArCj4gPj4gKyAgICAgICAgICAgIHI1X2NvcmVzW2ldLmRldiA9ICZjaGlsZF9wZGV2LT5k ZXY7Cj4gPj4gKyAgICAgICAgICAgIGlmICghcjVfY29yZXNbaV0uZGV2KSB7Cj4gPj4gKyAgICAg ICAgICAgICAgICAgICAgcHJfZXJyKCJjYW4ndCBnZXQgZGV2aWNlIGZvciByNSBjb3JlICVkXG4i LCBpKTsKPiA+PiArICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVOT0RFVjsKPiA+PiArICAg ICAgICAgICAgfQo+ID4+ICsKPiA+PiArICAgICAgICAgICAgcjVfY29yZXNbaV0ubnAgPSBkZXZf b2Zfbm9kZShyNV9jb3Jlc1tpXS5kZXYpOwo+ID4+ICsgICAgICAgICAgICBpZiAoIXI1X2NvcmVz W2ldLm5wKSB7Cj4gPj4gKyAgICAgICAgICAgICAgICAgICAgcHJfZXJyKCJjYW4ndCBnZXQgZGV2 aWNlIG5vZGUgZm9yIHI1IGNvcmUgJWRcbiIsIGkpOwo+ID4+ICsgICAgICAgICAgICAgICAgICAg IHJldHVybiAtRU5PREVWOwo+ID4+ICsgICAgICAgICAgICB9Cj4gPj4gKwo+ID4+ICsgICAgICAg ICAgICBpKys7Cj4gPj4gKyAgICAgICAgICAgIGlmIChpID09IGNvcmVfY291bnQpCj4gPj4gKyAg ICAgICAgICAgICAgICAgICAgYnJlYWs7Cj4gPj4gKyAgICB9Cj4gPj4gKwo+ID4+ICsgICAgY2x1 c3Rlci0+bW9kZSA9IGNsdXN0ZXJfbW9kZTsKPiA+PiArICAgIGNsdXN0ZXItPmNvcmVfY291bnQg PSBjb3JlX2NvdW50Owo+ID4+ICsgICAgY2x1c3Rlci0+cjVfY29yZXMgPSByNV9jb3JlczsKPiA+ PiArCj4gPj4gKyAgICByZXQgPSB6eW5xbXBfcjVfY29yZV9pbml0KGNsdXN0ZXIpOwo+ID4+ICsg ICAgaWYgKHJldCA8IDApIHsKPiA+PiArICAgICAgICAgICAgZGV2X2VycihkZXYsICJmYWlsZWQg dG8gaW5pdCByNSBjb3JlIGVyciAlZFxuIiwgcmV0KTsKPiA+PiArICAgICAgICAgICAgcmV0dXJu IHJldDsKPiA+PiArICAgIH0KPiA+PiArCj4gPj4gKyAgICB6eW5xbXBfcjVfcHJpbnRfZHRfbm9k ZV9pbmZvKGNsdXN0ZXIpOwo+ID4+ICsKPiA+PiArICAgIHJldHVybiAwOwo+ID4+ICt9Cj4gPj4g Kwo+ID4+ICtzdGF0aWMgdm9pZCB6eW5xbXBfcjVfY2x1c3Rlcl9leGl0KHZvaWQgKmRhdGEpCj4g Pj4gK3sKPiA+PiArICAgIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSAoc3RydWN0IHBs YXRmb3JtX2RldmljZSAqKWRhdGE7Cj4gPj4gKwo+ID4+ICsgICAgcGxhdGZvcm1fc2V0X2RydmRh dGEocGRldiwgTlVMTCk7Cj4gPj4gKwo+ID4+ICsgICAgcHJfaW5mbygiRXhpdCByNWYgc3Vic3lz dGVtIGRyaXZlclxuIik7Cj4gPj4gK30KPiA+PiArCj4gPj4gKy8qCj4gPj4gKyAqIHp5bnFtcF9y NV9yZW1vdGVwcm9jX3Byb2JlKCkKPiA+PiArICoKPiA+PiArICogQHBkZXY6IGRvbWFpbiBwbGF0 Zm9ybSBkZXZpY2UgZm9yIFI1IGNsdXN0ZXIKPiA+PiArICoKPiA+PiArICogY2FsbGVkIHdoZW4g ZHJpdmVyIGlzIHByb2JlZCwgZm9yIGVhY2ggUjUgY29yZSBzcGVjaWZpZWQgaW4gRFQsCj4gPj4g KyAqIHNldHVwIGFzIG5lZWRlZCB0byBkbyByZW1vdGVwcm9jLXJlbGF0ZWQgb3BlcmF0aW9ucwo+ ID4+ICsgKgo+ID4+ICsgKiBSZXR1cm46IDAgZm9yIHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVlIGZv ciBmYWlsdXJlLgo+ID4+ICsgKi8KPiA+PiArc3RhdGljIGludCB6eW5xbXBfcjVfcmVtb3RlcHJv Y19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQo+ID4+ICt7Cj4gPj4gKyAgICBp bnQgcmV0Owo+ID4+ICsgICAgc3RydWN0IHp5bnFtcF9yNV9jbHVzdGVyICpjbHVzdGVyOwo+ID4+ ICsgICAgc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsKPiA+PiArCj4gPj4gKyAgICBj bHVzdGVyID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpjbHVzdGVyKSwgR0ZQX0tFUk5FTCk7 Cj4gPj4gKyAgICBpZiAoSVNfRVJSX09SX05VTEwoY2x1c3RlcikpCj4gPj4gKyAgICAgICAgICAg IHJldHVybiAtRU5PTUVNOwo+ID4+ICsKPiA+PiArICAgIGNsdXN0ZXItPmRldiA9IGRldjsKPiA+ PiArCj4gPj4gKyAgICByZXQgPSBkZXZtX29mX3BsYXRmb3JtX3BvcHVsYXRlKGRldik7Cj4gPj4g KyAgICBpZiAocmV0KSB7Cj4gPj4gKyAgICAgICAgICAgIGRldl9lcnIoZGV2LCAiZmFpbGVkIHRv IHBvcHVsYXRlIHBsYXRmb3JtIGRldiAlZFxuIiwgcmV0KTsKPiA+PiArICAgICAgICAgICAgcmV0 dXJuIHJldDsKPiA+PiArICAgIH0KPiA+PiArCj4gPj4gKyAgICAvKiB3aXJlIGluIHNvIGVhY2gg Y29yZSBjYW4gYmUgY2xlYW5lZCB1cCBhdCBkcml2ZXIgcmVtb3ZlICovCj4gPj4gKyAgICBwbGF0 Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBjbHVzdGVyKTsKPiA+PiArCj4gPj4gKyAgICByZXQgPSBk ZXZtX2FkZF9hY3Rpb25fb3JfcmVzZXQoZGV2LCB6eW5xbXBfcjVfY2x1c3Rlcl9leGl0LCBwZGV2 KTsKPiA+PiArICAgIGlmIChyZXQpCj4gPj4gKyAgICAgICAgICAgIHJldHVybiByZXQ7Cj4gPj4g Kwo+ID4+ICsgICAgcmV0ID0genlucW1wX3I1X2NsdXN0ZXJfaW5pdChjbHVzdGVyKTsKPiA+PiAr ICAgIGlmIChyZXQpIHsKPiA+PiArICAgICAgICAgICAgZGV2X2VycihkZXYsICJJbnZhbGlkIHI1 ZiBzdWJzeXN0ZW0gZGV2aWNlIHRyZWVcbiIpOwo+ID4+ICsgICAgICAgICAgICByZXR1cm4gcmV0 Owo+ID4+ICsgICAgfQo+ID4+ICsKPiA+PiArICAgIGRldl9pbmZvKGRldiwgIlhpbGlueCByNWYg cmVtb3RlcHJvYyBkcml2ZXIgcHJvYmUgc3VjY2Vzc1xuIik7Cj4gPj4gKyAgICByZXR1cm4gMDsK PiA+PiArfQo+ID4+ICsKPiA+PiArLyogTWF0Y2ggdGFibGUgZm9yIE9GIHBsYXRmb3JtIGJpbmRp bmcgKi8KPiA+PiArc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgenlucW1wX3I1X3Jl bW90ZXByb2NfbWF0Y2hbXSA9IHsKPiA+PiArICAgIHsgLmNvbXBhdGlibGUgPSAieGxueCx6eW5x bXAtcjVmc3MiLCB9LAo+ID4+ICsgICAgeyAvKiBlbmQgb2YgbGlzdCAqLyB9LAo+ID4+ICt9Owo+ ID4+ICtNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCB6eW5xbXBfcjVfcmVtb3RlcHJvY19tYXRjaCk7 Cj4gPj4gKwo+ID4+ICtzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciB6eW5xbXBfcjVfcmVt b3RlcHJvY19kcml2ZXIgPSB7Cj4gPj4gKyAgICAucHJvYmUgPSB6eW5xbXBfcjVfcmVtb3RlcHJv Y19wcm9iZSwKPiA+PiArICAgIC5kcml2ZXIgPSB7Cj4gPj4gKyAgICAgICAgICAgIC5uYW1lID0g Inp5bnFtcF9yNV9yZW1vdGVwcm9jIiwKPiA+PiArICAgICAgICAgICAgLm9mX21hdGNoX3RhYmxl ID0genlucW1wX3I1X3JlbW90ZXByb2NfbWF0Y2gsCj4gPj4gKyAgICB9LAo+ID4+ICt9Owo+ID4+ ICttb2R1bGVfcGxhdGZvcm1fZHJpdmVyKHp5bnFtcF9yNV9yZW1vdGVwcm9jX2RyaXZlcik7Cj4g Pj4gKwo+ID4+ICtNT0RVTEVfREVTQ1JJUFRJT04oIlhpbGlueCBSNUYgcmVtb3RlIHByb2Nlc3Nv ciBkcml2ZXIiKTsKPiA+PiArTU9EVUxFX0FVVEhPUigiWGlsaW54IEluYy4iKTsKPiA+PiArTU9E VUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwo+ID4+IC0tCj4gPj4gMi4yNS4xCj4gPj4KCl9fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmxpbnV4LWFybS1rZXJuZWwg bWFpbGluZyBsaXN0CmxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwOi8v bGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LWFybS1rZXJuZWwK