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=-18.8 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,MENTIONS_GIT_HOSTING,SPF_HELO_NONE,SPF_PASS, URIBL_BLOCKED autolearn=unavailable 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 5E4EAC4361B for ; Mon, 14 Dec 2020 09:52:31 +0000 (UTC) Received: from merlin.infradead.org (merlin.infradead.org [205.233.59.134]) (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 C1180224B1 for ; Mon, 14 Dec 2020 09:52:30 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org C1180224B1 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=ffwll.ch Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=merlin.20170209; h=Sender:Content-Transfer-Encoding: Content-Type:Cc:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:In-Reply-To:MIME-Version:References: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=B395EHzY8/aMBQ44xH4itgk+Nxz9e9N5XGQk7NNlI5I=; b=1v3IjZmTZb2L5hIpTV64m078g RDDxs590n1tit+yy4ffa14L7JWRree7nCUdoX2EhiCrmgPR0mnZl90dUDd/SQNTU4zCZJI+7G5bRm ZJkEkWRehuw0RhUe52G3i8OI+n6IBKVjEgkU2BHMz6ujGmT846c/pyMq5p/zBIdxwaDs8vfoggVZO yCG85DtA2WFroBX1Y/pQrGoJS1lspvPrBVXnqT5GGkfwELDab7B4S9bt5JcyboKlxWlMIZPmFjUgA NFwW0bwkmLi4FLbG9gz55ZqcAr+A8MDNVu59PbXzOUBRTQ/JXoWxcKRS77BAjInUW+M4pqmGBWZva ksa6z/mnA==; Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1kokVJ-0001bp-40; Mon, 14 Dec 2020 09:50:53 +0000 Received: from mail-wr1-x444.google.com ([2a00:1450:4864:20::444]) by merlin.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1kokVD-0001ai-DS for linux-arm-kernel@lists.infradead.org; Mon, 14 Dec 2020 09:50:50 +0000 Received: by mail-wr1-x444.google.com with SMTP id r7so15783462wrc.5 for ; Mon, 14 Dec 2020 01:50:45 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ffwll.ch; s=google; h=date:from:to:cc:subject:message-id:mail-followup-to:references :mime-version:content-disposition:content-transfer-encoding :in-reply-to; bh=PQVo2uUnt14GYsDGuac3/GD5Rsfx2KJrIvk9lJrUPN4=; b=EYPBEwhTUQ+kSLMEnIGwOEwN6z3jrzBhsWSVi7XxKBVU4oHY17DlHDdoDcJZY2cX5I 2Z7WVqRpHkfjl6dp3EnrYSK4a5RHmQYmTgJ1PvUEssrAVHsw6PDjRtsiSm6lVSpimGd0 Vnjqjw6XVMItA1w7ULXRtZEsii4EMdAIHLnvY= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:from:to:cc:subject:message-id :mail-followup-to:references:mime-version:content-disposition :content-transfer-encoding:in-reply-to; bh=PQVo2uUnt14GYsDGuac3/GD5Rsfx2KJrIvk9lJrUPN4=; b=VtBHBJfpCI/G8PeAp3vysX4VQZb2pANjNDS1olXquojYXkLfXLgv8012dz2zZiMCAj Y48aXyVoXPpHB6PYmS43bZYci3fbffhOifzmmH9SxhR2scW+pLjf4nANdVvxRxh+ahYs 0FWq2WoQ63Tuc84XRdsrXB/vc7MF2cE3t7jYsSYEZzElosLHtMGYe/dWdGu7wJCVdMba a+Qv/+VSsyP07xvsLXpOLpsSb3ceOk+bWiy96XZl213OH0H9PZCtV0USk2aL3h+qYtOP dYxjbv8g4uqra18q1fAXMXQjXqO4sgVddCbDIhVytwkCMbAIEjY0OReuxM17hCE2kthD wgjQ== X-Gm-Message-State: AOAM530WibCH9Wnr0gLg0sCr2KrYv1S9oIOAGI8ksGT8xMpTeEpwCLHQ WtMmA4FdTiD3K+kwfTmwp9w/AA== X-Google-Smtp-Source: ABdhPJw/fSaA37gimpQkhTQ4cLTx8o+GbSpIvdWD24eF+o1OBIrS0gcIQG+pTKKA4mfkEWEAQBndkA== X-Received: by 2002:adf:c990:: with SMTP id f16mr27842286wrh.263.1607939444370; Mon, 14 Dec 2020 01:50:44 -0800 (PST) Received: from phenom.ffwll.local ([2a02:168:57f4:0:efd0:b9e5:5ae6:c2fa]) by smtp.gmail.com with ESMTPSA id e15sm26317451wrx.86.2020.12.14.01.50.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 14 Dec 2020 01:50:43 -0800 (PST) Date: Mon, 14 Dec 2020 10:50:41 +0100 From: Daniel Vetter To: Jiaying Liang Subject: Re: [PATCH 2/9] misc: Add Xilinx AI engine device driver Message-ID: <20201214095041.GW401619@phenom.ffwll.local> Mail-Followup-To: Jiaying Liang , Dave Airlie , Nicolas Dufresne , robh+dt@kernel.org, michal.simek@xilinx.com, arnd@arndb.de, gregkh@linuxfoundation.org, sumit.semwal@linaro.org, christian.koenig@amd.com, derek.kiernan@xilinx.com, dragan.cvetic@xilinx.com, rajan.vaja@xilinx.com, tejas.patel@xilinx.com, manish.narani@xilinx.com, ravi.patel@xilinx.com, devicetree@vger.kernel.org, Hyun Kwon , linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, linaro-mm-sig@lists.linaro.org, linux-arm-kernel@lists.infradead.org, linux-media@vger.kernel.org References: <1605686780-17886-1-git-send-email-wendy.liang@xilinx.com> <1605686780-17886-3-git-send-email-wendy.liang@xilinx.com> <5c310d188d2a75480452f5b5a9310e8e049f20f6.camel@ndufresne.ca> <20201209124712.GQ401619@phenom.ffwll.local> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: X-Operating-System: Linux phenom 5.7.0-1-amd64 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20201214_045047_683447_DEF0C4C7 X-CRM114-Status: GOOD ( 61.05 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: tejas.patel@xilinx.com, ravi.patel@xilinx.com, rajan.vaja@xilinx.com, arnd@arndb.de, christian.koenig@amd.com, gregkh@linuxfoundation.org, dragan.cvetic@xilinx.com, michal.simek@xilinx.com, dri-devel@lists.freedesktop.org, Nicolas Dufresne , linaro-mm-sig@lists.linaro.org, devicetree@vger.kernel.org, robh+dt@kernel.org, manish.narani@xilinx.com, linux-arm-kernel@lists.infradead.org, derek.kiernan@xilinx.com, Hyun Kwon , Dave Airlie , sumit.semwal@linaro.org, linux-kernel@vger.kernel.org, linux-media@vger.kernel.org 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 T24gRnJpLCBEZWMgMTEsIDIwMjAgYXQgMDY6Mjc6MDVQTSAtMDgwMCwgSmlheWluZyBMaWFuZyB3 cm90ZToKPiAKPiBPbiAxMi85LzIwIDQ6NDcgQU0sIERhbmllbCBWZXR0ZXIgd3JvdGU6Cj4gPiBP biBUdWUsIERlYyAwOCwgMjAyMCBhdCAxMTo1NDo1N0FNIC0wODAwLCBKaWF5aW5nIExpYW5nIHdy b3RlOgo+ID4gPiBPbiAxMi84LzIwIDk6MTIgQU0sIE5pY29sYXMgRHVmcmVzbmUgd3JvdGU6Cj4g PiA+ID4gTGUgbWVyY3JlZGkgMTggbm92ZW1icmUgMjAyMCDDoCAwMDowNiAtMDgwMCwgV2VuZHkg TGlhbmcgYSDDqWNyaXTCoDoKPiA+ID4gPiA+IENyZWF0ZSBBSSBlbmdpbmUgZGV2aWNlL3BhcnRp dGlvbiBoaWVyYXJjaGljYWwgc3RydWN0dXJlLgo+ID4gPiA+ID4gCj4gPiA+ID4gPiBFYWNoIEFJ IGVuZ2luZSBkZXZpY2UgY2FuIGhhdmUgbXVsdGlwbGUgbG9naWNhbCBwYXJ0aXRpb25zKGdyb3Vw cyBvZiBBSQo+ID4gPiA+ID4gZW5naW5lIHRpbGVzKS4gRWFjaCBwYXJ0aXRpb24gaXMgY29sdW1u IGJhc2VkIGFuZCBoYXMgaXRzIG93biBub2RlIElECj4gPiA+ID4gPiBpbiB0aGUgc3lzdGVtLiBB SSBlbmdpbmUgZGV2aWNlIGRyaXZlciBtYW5hZ2VzIGl0cyBwYXJ0aXRpb25zLgo+ID4gPiA+ID4g Cj4gPiA+ID4gPiBBcHBsaWNhdGlvbnMgY2FuIGFjY2VzcyBBSSBlbmdpbmUgcGFydGl0aW9uIHRo cm91Z2ggdGhlIEFJIGVuZ2luZQo+ID4gPiA+ID4gcGFydGl0aW9uIGRyaXZlciBpbnN0YW5jZS4g QUkgZW5naW5lIHJlZ2lzdGVycyB3cml0ZSBpcyBtb3ZlZCB0byBrZXJuZWwKPiA+ID4gPiA+IGFz IHRoZXJlIGFyZSByZWdpc3RlcnMgaW4gdGhlIEFJIGVuZ2luZSBhcnJheSBuZWVkcyBwcml2aWxl Z2UKPiA+ID4gPiA+IHBlcm1pc3Npb24uCj4gPiA+ID4gSGkgdGhlcmUsIGl0J3MgbmljZSB0byBz ZWUgYW4gZWZmb3J0IHRvIHVwc3RyZWFtIGFuIEFJIGRyaXZlci4gSSdtIGEgbGl0dGxlCj4gPiA+ ID4gd29ycmllZCB0aGlzIGRyaXZlciBpcyBub3Qgb2J2aW91cyB0byB1c2UgZnJvbSBpdCdzIHNv dXJjZSBjb2RlIGl0c2VsZi4gU28geW91Cj4gPiA+ID4gaGF2ZSByZWZlcmVuY2UgdG8gc29tZSBP cGVuIFNvdXJjZSBjb2RlIHRoYXQgZGVtb25zdHJhdGUgaXQncyB1c2FnZSA/Cj4gPiA+IFdlIGhh dmUgQUkgZW5naW5lIGxpYnJhcnkgd2hpY2ggcHJvdmlkZXMgYSBjcm9zcyBwbGF0Zm9ybXMgQVBJ cyBmb3Igb3RoZXIKPiA+ID4gCj4gPiA+IGxpYnJhcmllcy9hcHBsaWNhdGlvbiB0byB1c2UgdGhl IGhhcmR3YXJlLiBIZXJlIGlzIHRoZSBzb3VyY2UgY29kZToKPiA+ID4gCj4gPiA+IGh0dHBzOi8v Z2l0aHViLmNvbS9YaWxpbngvZW1iZWRkZWRzdy90cmVlL21hc3Rlci9YaWxpbnhQcm9jZXNzb3JJ UExpYi9kcml2ZXJzL2FpZW5naW5ldjIvc3JjCj4gPiA+IAo+ID4gPiBUaGUgY3Jvc3MgcGxhdGZv cm1zIEFJIGVuZ2luZSBsaWJyYXJ5IHJ1bnMgaW4gTEludXggdXNlcnNwYWNlIGl0IGRlZmluZXMg aG93Cj4gPiA+IHRvCj4gPiA+IAo+ID4gPiBjb25maWd1cmUsIGFuZCB0aGUga2VybmVsIGRyaXZl ciBjb250cm9scyBpZiB3aGF0IGNhbiBiZSBhY2Nlc3MgYW5kIG1hbmFnZQo+ID4gPiBlcnJvcnMg ZnJvbSBkZXZpY2UuCj4gPiBTbyBJIGtpbmRhIGlnbm9yZWQgdGhpcyBkcml2ZXIgc3VibWlzc2lv biBiZWNhdXNlIGluIHRoZSBwYXN0IGFsbCB0aGVzZSBBSQo+ID4gZHJpdmVycyBoYWQgYXQgYmVz dCBpbmNvbXBsZXRlIG9wZW4gc291cmNlICh1c3VhbGx5IHRoZSBjb21waWxlciBpcwo+ID4gY2xv c2VkLCBvZnRlbiBhbHNvIGxhcmdlIHBhcnRzIG9mIHRoZSBydW50aW1lKS4gSSB0aGluayB5b3Vy cyB3b3VsZCBiZSB0aGUKPiA+IGZpcnN0IHRoYXQgYnJlYWtzIHRoaXMgdHJlbmQsIGlzIHRoYXQg cmVhbGx5IHRoZSBjYXNlPyBJLmUuIEkgY291bGQgbWFrZQo+ID4gZnVsbCB1c2Ugb2YgdGhpcyBo dyB3aXRob3V0IGFueSBjbG9zZWQgc291cmNlIGJpdHMgdG8gcnVuIEROTiB3b3JrbG9hZHMKPiA+ IGFuZCB0aGluZ3MgbGlrZSB0aGF0Pwo+IEFJIGVuZ2luZSBjYW4gYmUgdXNlZCBmb3Igc2lnbmFs aW5nIHByb2Nlc3Npbmcgb3IgaGlnaCBwZXJmb3JtYW5jZSBjb21wdXRpbmcKPiAKPiB0aGUga2Vy bmVsIGRyaXZlciB3b3JrcyBvbiB0aGUgQUkgZW5naW5lIHNvZnR3YXJlIGxpYnJhcnkgd2hpY2gg SSBtZW50aW9uZWQKPiBhYm92ZSwKPiAKPiB3aGljaCB3aWxsIGJlIHVzZWQgYnkgWGlsaW54IHJ1 bnRpbWU6Cj4gaHR0cHM6Ly94aWxpbnguZ2l0aHViLmlvL1hSVC8yMDIwLjIvaHRtbC9pbmRleC5o dG1sCj4gCj4gWGlsaW54IHJ1bnRpbWUgaXMgYSBsYXllciBmb3IgYWNjZWxlcmF0aW9uIGxpYnJh cmllcyBvciBhcHBsaWNhdGlvbnMgdG8gdXNlCj4gWGlsaW54IGFjY2VsZXJhdG9ycy4KCkhtIG1h eWJlIEknbSBtaXhpbmcgdGhpbmdzIHVwLCBidXQgaXQgZmVlbHMgbGlrZSB0aGVyZSB3YXMgYSBk aXNjdXNzaW9uCmFib3V0IHRoZSB4aWxpbnggcnVudGltZSBpbiB0aGUgcGFzdCB3aXRoIGEgZHJt IGRyaXZlciBldmVuLiBUaGUgaGFuZ3VwCndhcyB0aGF0IHRoZSBydW50aW1lIGlzIGFsbCBvcGVu LCBidXQgdGhlIG9mZmxpbmUgY29tcGlsZXIgaXNuJ3QuIElzIHRoYXQKc3RpbGwgdGhlIGNhc2Us IG9yIGFtIEkgbWl4aW5nIHRoaW5ncyB1cCBoZXJlIGEgYml0PwoKPiBlLmcuIGl0IGhhcyBPcGVu Q0wgaW1wbGVtZW50YXRpb24KPiA+IElmIHRoYXQncyB0aGUgY2FzZSB0aGVuIEkgdGhpbmsgdGhl cmUncyBub3RoaW5nIHN0b3BwaW5nIHVzIGZyb20gZG9pbmcgdGhlCj4gPiByaWdodCB0aGluZyBh bmQgbWVyZ2luZyB0aGlzIGRyaXZlciBpbnRvIHRoZSByaWdodCBzdWJzeXN0ZW06IFRoZQo+ID4g c3Vic3lzdGVtIGZvciBhY2NlbGVyYXRvcnMgd2hpY2ggdGhlaXIgb3duIG1lbW9yeSBhbmQgd2hv IHdhbnQgZG1hLWJ1Zgo+ID4gaW50ZWdyYXRpb24gaXMgZHJpdmVycy9ncHUsIG5vdCBkcml2ZXJz L21pc2MuCj4gCj4gVGhlIEFJIGVuZ2luZSBrZXJuZWwgZHJpdmVyIGlzIHVzZWQgZm9yIGRldmlj ZSBydW50aW1lIGNvbmZpZ3VyYXRpb24gdXBkYXRlLAo+IAo+IGFuZCBydW50aW1lIG1vbml0b3Jp bmcsIHN1Y2ggYXMgYXN5bmMgZXJyb3JzIGRldGVjdGlvbi4gVGhlIGJ1ZmZlcgo+IG1hbmFnZW1l bnQKPiAKPiBpcyBvdXQgb2YgdGhlIEFJIGVuZ2luZSBkcml2ZXIsIGJ1dCBpdCBpcyBjb3ZlcmVk IGJ5IFhpbGlueCBydW50aW1lOgo+IAo+IGh0dHBzOi8vZ2l0aHViLmNvbS9YaWxpbngvWFJUL3Ry ZWUvbWFzdGVyL3NyYy9ydW50aW1lX3NyYy9jb3JlL2VkZ2UvZHJtL3pvY2wKPiAKPiBBSSBlbmdp bmUgZHJpdmVyIGltcG9ydHMgdGhlIERNQSBidWYuCj4gCj4gCj4gVGhlIEFJIGVuZ2luZSBkZXZp Y2UgaXMgcXVpdGUgZGlmZmVyZW50IHRvIHRoZSBHUFUgZGV2aWNlcy4gVGhlIEFJIGVuZ2luZQo+ IAo+IG9wZXJhdGlvbnMgYXJlIHN0aWxsIG5lZWRzIGRyaXZlciBzcGVjaWZpYyBpb2N0bHMuCj4g Cj4gV2UgaGF2ZSBtb3JlIHRoYW4gMTAwIGNvcmVzIHRpbGVzLCBlYWNoIHRpbGVzIGZ1bmN0aW9u cyBjYW4gYmUgZGVmaW5lZCBhdAo+IGNvbXBpbGF0aW9uCj4gCj4gdGltZSwgYXQgcnVudGltZSwg d2UgbG9hZCB0aGUgY29uZmlndXJhdGlvbiAoYXBwbGljYXRpb24gZGVmaW5lZCBJL08KPiBjb21t YW5kcykgdG8KPiAKPiBjb25maWd1cmUgZWFjaCB0aWxlcyByZWdpc3RlcnMgdG8gc2V0IHVwIHJv dXRpbmcsIHNldCB1cCBETUFzLCBjb25maWd1cmUKPiBsb2NhbCBtZW1vcmllcywKPiAKPiBhbmQg ZW5hYmxlIHRoZSB0aWxlcy4KClNldHRpbmcgdXAgRE1BIGRvZXMgc291bmQgbGlrZSAoYnVmZmVy KSBtZW1vcnkgbWFuYWdlbWVudCB0byBtZS4gTm90ZSB0aGF0CnRoZSBtZW1vcnkgbWFuYWdlbWVu dCB0aGF0IHRoZSBrZXJuZWwgZG9lcyBkb2VzIG5vdCBuZWNlc3NhcmlseSB0cmFuc2xhdGUKZGly ZWN0bHkgdG8gY2xpZW50IGFwaSBidWZmZXJzIGxpa2Ugb3BlbmNsIGhhcy4gQXQgbGVhc3QgZm9y IGdwdSBkcml2ZXJzCnlvdSBoYXZlIG1lbW9yeSBtYW5hZ2VtZW50IGluIGJvdGggdGhlIGtlcm5l bCBhbmQgdXNlcnNwYWNlLgoKPiBBcyB0aGUgQUkgZW5naW5lIGRldmljZSBoYXJkd2FyZSBpcyBk aWZmZXJlbnQgdG8gdGhlIEdQVXMsCj4gCj4gd2UgYXJlIG5vdCBhYmxlIHRvIG1ha2UgdXNlIG9m IGZ1bmN0aW9ucyBhYnN0cmFjdGVkIGZvciBHUFVzLCBhbmQgd2UgZG9uJ3QKPiBtYW5hZ2UgdGhl Cj4gCj4gYnVmZmVycyBpbiB0aGlzIGRyaXZlci4gSSBhbSBub3Qgc3VyZSBpZiBpdCBpcyBvayB0 byBhZGQgdGhlIGRyaXZlciB0bwo+IGRyaXZlcnMvZ3B1IGJ1dCBub3QKPiAKPiB1c2luZyBhYnN0 cmFjdGlvbnMgZnJvbSB0aGUgR1BVIGFic3RyYWN0aW9uLgo+IAo+IAo+IFRoZXJlIGlzIGFub3Ro ZXIgcmVwbHkgdG8gdGhlIHBhdGNoIHNlcmllcyB0byBhc2sgZm9yIGNsYXJpZmljYXRpb24gb24g dGhlCj4gb3ZlcnZpZXcgb2YgdGhlCj4gCj4gZHJpdmVyLCBhbmQgSSBoYWQgc29tZSBkaXNjdXNz aW9ucyB3aXRoIG90aGVyIHRlYW0gbWVtYmVycy4gSSB3aWxsIHJlcGx5IHRvCj4gdGhhdCBlbWFp bAo+IAo+IHRvIHByb3ZpZGUgbW9yZSBkZXRhaWxzIG9uIG92ZXJhbGwgaG93IHRoaXMgZHJpdmVy IGlzIHVzZWQuCgpZZWFoIEkgdGhpbmsgdGhhdCBzaG91bGQgaGVscCB3aXRoIHVuZGVyc3RhbmRp bmcgd2hhdCdzIHRoZSBiZXN0IG9wdGlvbgpoZXJlLgotRGFuaWVsCgo+IAo+IEFueSBzdWdnZXN0 aW9ucyBvbiBob3cgdG8gZml0IHRoZSBkcml2ZXIgaW4gdGhlIGRyaXZlcnMvZ3B1IG9yIG90aGVy IGRyaXZlcnMKPiBmcmFtZXdvcmsKPiAKPiB3aWxsIGJlIG11Y2ggYXBwcmVjaWF0ZWQuCj4gCj4g Cj4gVGhhbmtzLAo+IAo+IFdlbmR5Cj4gCj4gPiBBcG9sb2dpZXMgdGhhdCBJJ20ganVtcGluZyB3 aXRoIHRoZSByZWFsbHkgYmlnIGFyY2ggcmV2aWV3IHdoZW4gdjMgaXMKPiA+IGFscmVhZHkgb24g dGhlIGxpc3QuIEJ1dCBsYXN0IGZldyB0aW1lcyBtZXJnaW5nIEFJIGRyaXZlcnMgdG8gZHJpdmVy cy9taXNjCj4gPiB3YXMgcmVhbGx5IGp1c3QgYSB3YXkgdG8gYXZvaWQgdGhlIG1lcmdlIGNyaXRl cmlhIGZvciBkcml2ZXJzL2dwdQo+ID4gYWNjZWxlcmF0aW9uIGRyaXZlcnMuIEknZCBsb3ZlIHRv IGxhbmQgdGhlIGZpcnN0IHJlYWwgb3BlbiBBSSBkcml2ZXIgaW4KPiA+IHVwc3RyZWFtLCBwcm9w ZXJseS4KPiA+IAo+ID4gQ2hlZXJzLCBEYW5pZWwKPiA+IAo+ID4gCj4gPiAKPiA+ID4gQmVzdCBS ZWdhcmRzLAo+ID4gPiAKPiA+ID4gV2VuZHkKPiA+ID4gCj4gPiA+IAo+ID4gPiA+ID4gU2lnbmVk LW9mZi1ieTogV2VuZHkgTGlhbmc8d2VuZHkubGlhbmdAeGlsaW54LmNvbT4KPiA+ID4gPiA+IFNp Z25lZC1vZmYtYnk6IEh5dW4gS3dvbjxoeXVuLmt3b25AeGlsaW54LmNvbT4KPiA+ID4gPiA+IC0t LQo+ID4gPiA+ID4gICDCoE1BSU5UQUlORVJTwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHzCoMKgIDgg Kwo+ID4gPiA+ID4gICDCoGRyaXZlcnMvbWlzYy9LY29uZmlnwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHzCoCAxMiArCj4gPiA+ID4g PiAgIMKgZHJpdmVycy9taXNjL01ha2VmaWxlwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB8wqDCoCAxICsKPiA+ID4gPiA+ICAgwqBkcml2 ZXJzL21pc2MveGlsaW54LWFpLWVuZ2luZS9NYWtlZmlsZcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCB8wqAgMTEgKwo+ID4gPiA+ID4gICDCoGRyaXZlcnMvbWlzYy94aWxpbngtYWktZW5naW5lL2Fp LWVuZ2luZS1haWUuY8KgwqDCoMKgwqAgfCAxMTUgKysrKysKPiA+ID4gPiA+ICAgwqBkcml2ZXJz L21pc2MveGlsaW54LWFpLWVuZ2luZS9haS1lbmdpbmUtZGV2LmPCoMKgwqDCoMKgIHwgNDQ4ICsr KysrKysrKysrKysrKysrKwo+ID4gPiA+ID4gICDCoGRyaXZlcnMvbWlzYy94aWxpbngtYWktZW5n aW5lL2FpLWVuZ2luZS1pbnRlcm5hbC5oIHwgMjI2ICsrKysrKysrKysKPiA+ID4gPiA+ICAgwqBk cml2ZXJzL21pc2MveGlsaW54LWFpLWVuZ2luZS9haS1lbmdpbmUtcGFydC5jwqDCoMKgwqAgfCA0 OTgKPiA+ID4gPiA+ICsrKysrKysrKysrKysrKysrKysrKwo+ID4gPiA+ID4gICDCoGRyaXZlcnMv bWlzYy94aWxpbngtYWktZW5naW5lL2FpLWVuZ2luZS1yZXMuY8KgwqDCoMKgwqAgfCAxMTQgKysr KysKPiA+ID4gPiA+ICAgwqBpbmNsdWRlL3VhcGkvbGludXgveGxueC1haS1lbmdpbmUuaMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB8IDEwNyArKysrKwo+ID4gPiA+ID4gICDCoDEwIGZp bGVzIGNoYW5nZWQsIDE1NDAgaW5zZXJ0aW9ucygrKQo+ID4gPiA+ID4gICDCoGNyZWF0ZSBtb2Rl IDEwMDY0NCBkcml2ZXJzL21pc2MveGlsaW54LWFpLWVuZ2luZS9NYWtlZmlsZQo+ID4gPiA+ID4g ICDCoGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL21pc2MveGlsaW54LWFpLWVuZ2luZS9haS1l bmdpbmUtYWllLmMKPiA+ID4gPiA+ICAgwqBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9taXNj L3hpbGlueC1haS1lbmdpbmUvYWktZW5naW5lLWRldi5jCj4gPiA+ID4gPiAgIMKgY3JlYXRlIG1v ZGUgMTAwNjQ0IGRyaXZlcnMvbWlzYy94aWxpbngtYWktZW5naW5lL2FpLWVuZ2luZS1pbnRlcm5h bC5oCj4gPiA+ID4gPiAgIMKgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvbWlzYy94aWxpbngt YWktZW5naW5lL2FpLWVuZ2luZS1wYXJ0LmMKPiA+ID4gPiA+ICAgwqBjcmVhdGUgbW9kZSAxMDA2 NDQgZHJpdmVycy9taXNjL3hpbGlueC1haS1lbmdpbmUvYWktZW5naW5lLXJlcy5jCj4gPiA+ID4g PiAgIMKgY3JlYXRlIG1vZGUgMTAwNjQ0IGluY2x1ZGUvdWFwaS9saW51eC94bG54LWFpLWVuZ2lu ZS5oCj4gPiA+ID4gPiAKPiA+ID4gPiA+IGRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5U QUlORVJTCj4gPiA+ID4gPiBpbmRleCA1Y2M1OTVhLi40MGUzMzUxIDEwMDY0NAo+ID4gPiA+ID4g LS0tIGEvTUFJTlRBSU5FUlMKPiA+ID4gPiA+ICsrKyBiL01BSU5UQUlORVJTCj4gPiA+ID4gPiBA QCAtMTkyODMsNiArMTkyODMsMTQgQEAgVDrCoMKgwqDCoMKgZ2l0aHR0cHM6Ly9naXRodWIuY29t L1hpbGlueC9saW51eC14bG54LmdpdAo+ID4gPiA+ID4gICDCoEY6wqDCoMKgwqDCoERvY3VtZW50 YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9waHkveGxueCx6eW5xbXAtcHNndHIueWFtbAo+ID4g PiA+ID4gICDCoEY6wqDCoMKgwqDCoGRyaXZlcnMvcGh5L3hpbGlueC9waHktenlucW1wLmMKPiA+ ID4gPiA+ICtYSUxJTlggQUkgRU5HSU5FIERSSVZFUgo+ID4gPiA+ID4gK006wqDCoMKgwqDCoFdl bmR5IExpYW5nPHdlbmR5LmxpYW5nQHhpbGlueC5jb20+Cj4gPiA+ID4gPiArUzrCoMKgwqDCoMKg U3VwcG9ydGVkCj4gPiA+ID4gPiArRjrCoMKgwqDCoMKgRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVl L2JpbmRpbmdzL3NvYy94aWxpbngveGxueCxhaS1lbmdpbmUueWFtbAo+ID4gPiA+ID4gK0Y6wqDC oMKgwqDCoGRyaXZlcnMvbWlzYy94aWxpbngtYWktZW5naW5lLwo+ID4gPiA+ID4gK0Y6wqDCoMKg wqDCoGluY2x1ZGUvbGludXgveGxueC1haS1lbmdpbmUuaAo+ID4gPiA+ID4gK0Y6wqDCoMKgwqDC oGluY2x1ZGUvdWFwaS9saW51eC94bG54LWFpLWVuZ2luZS5oCj4gPiA+ID4gPiArCj4gPiA+ID4g PiAgIMKgWElMTFlCVVMgRFJJVkVSCj4gPiA+ID4gPiAgIMKgTTrCoMKgwqDCoMKgRWxpIEJpbGxh dWVyPGVsaS5iaWxsYXVlckBnbWFpbC5jb20+Cj4gPiA+ID4gPiAgIMKgTDpsaW51eC1rZXJuZWxA dmdlci5rZXJuZWwub3JnCj4gPiA+ID4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNjL0tjb25m aWcgYi9kcml2ZXJzL21pc2MvS2NvbmZpZwo+ID4gPiA+ID4gaW5kZXggZmFmYThiMC4uMGI4Y2U0 ZCAxMDA2NDQKPiA+ID4gPiA+IC0tLSBhL2RyaXZlcnMvbWlzYy9LY29uZmlnCj4gPiA+ID4gPiAr KysgYi9kcml2ZXJzL21pc2MvS2NvbmZpZwo+ID4gPiA+ID4gQEAgLTQ0NCw2ICs0NDQsMTggQEAg Y29uZmlnIFhJTElOWF9TREZFQwo+ID4gPiA+ID4gICDCoMKgwqDCoMKgwqDCoMKgwqAgSWYgdW5z dXJlLCBzYXkgTi4KPiA+ID4gPiA+ICtjb25maWcgWElMSU5YX0FJRQo+ID4gPiA+ID4gK8KgwqDC oMKgwqDCoMKgdHJpc3RhdGUgIlhpbGlueCBBSSBlbmdpbmUiCj4gPiA+ID4gPiArwqDCoMKgwqDC oMKgwqBkZXBlbmRzIG9uIEFSTTY0IHx8IENPTVBJTEVfVEVTVAo+ID4gPiA+ID4gK8KgwqDCoMKg wqDCoMKgaGVscAo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqAgVGhpcyBvcHRpb24gZW5hYmxl cyBzdXBwb3J0IGZvciB0aGUgWGlsaW54IEFJIGVuZ2luZSBkcml2ZXIuCj4gPiA+ID4gPiArwqDC oMKgwqDCoMKgwqDCoCBPbmUgWGlsaW54IEFJIGVuZ2luZSBkZXZpY2UgY2FuIGhhdmUgbXVsdGlw bGUgcGFydGl0aW9ucyAoZ3JvdXBzIG9mCj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoCBBSSBl bmdpbmUgdGlsZXMpLiBYaWxpbnggQUkgZW5naW5lIGRldmljZSBkcml2ZXIgaW5zdGFuY2UgbWFu YWdlcwo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqAgQUkgZW5naW5lIHBhcnRpdGlvbnMuIFVz ZXIgYXBwbGljYXRpb24gYWNjZXNzIGl0cyBwYXJ0aXRpb25zIHRocm91Z2gKPiA+ID4gPiA+ICvC oMKgwqDCoMKgwqDCoMKgIEFJIGVuZ2luZSBwYXJ0aXRpb24gaW5zdGFuY2UgZmlsZSBvcGVyYXRp b25zLgo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqAgSWYgdW5zdXJlLCBz YXkgTgo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gICDCoGNvbmZpZyBNSVNDX1JUU1gKPiA+ID4gPiA+ ICAgwqDCoMKgwqDCoMKgwqDCoHRyaXN0YXRlCj4gPiA+ID4gPiAgIMKgwqDCoMKgwqDCoMKgwqBk ZWZhdWx0IE1JU0NfUlRTWF9QQ0kgfHwgTUlTQ19SVFNYX1VTQgo+ID4gPiA+ID4gZGlmZiAtLWdp dCBhL2RyaXZlcnMvbWlzYy9NYWtlZmlsZSBiL2RyaXZlcnMvbWlzYy9NYWtlZmlsZQo+ID4gPiA+ ID4gaW5kZXggZDIzMjMxZS4uMjE3NmIxOCAxMDA2NDQKPiA+ID4gPiA+IC0tLSBhL2RyaXZlcnMv bWlzYy9NYWtlZmlsZQo+ID4gPiA+ID4gKysrIGIvZHJpdmVycy9taXNjL01ha2VmaWxlCj4gPiA+ ID4gPiBAQCAtNTcsMyArNTcsNCBAQCBvYmotJChDT05GSUdfSEFCQU5BX0FJKcKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCs9IGhhYmFuYWxhYnMvCj4gPiA+ID4gPiAgIMKgb2JqLSQoQ09O RklHX1VBQ0NFKcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCs9IHVhY2NlLwo+ID4gPiA+ID4gICDC oG9iai0kKENPTkZJR19YSUxJTlhfU0RGRUMpwqDCoMKgwqDCoCs9IHhpbGlueF9zZGZlYy5vCj4g PiA+ID4gPiAgIMKgb2JqLSQoQ09ORklHX0hJU0lfSElLRVlfVVNCKcKgwqDCoCs9IGhpc2lfaGlr ZXlfdXNiLm8KPiA+ID4gPiA+ICtvYmotJChDT05GSUdfWElMSU5YX0FJRSnCoMKgwqDCoMKgwqDC oCs9IHhpbGlueC1haS1lbmdpbmUvCj4gPiA+ID4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNj L3hpbGlueC1haS1lbmdpbmUvTWFrZWZpbGUgYi9kcml2ZXJzL21pc2MveGlsaW54LWFpLQo+ID4g PiA+ID4gZW5naW5lL01ha2VmaWxlCj4gPiA+ID4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+ID4g PiA+ID4gaW5kZXggMDAwMDAwMC4uNzgyN2EwYQo+ID4gPiA+ID4gLS0tIC9kZXYvbnVsbAo+ID4g PiA+ID4gKysrIGIvZHJpdmVycy9taXNjL3hpbGlueC1haS1lbmdpbmUvTWFrZWZpbGUKPiA+ID4g PiA+IEBAIC0wLDAgKzEsMTEgQEAKPiA+ID4gPiA+ICsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVy OiBHUEwtMi4wLW9ubHkKPiA+ID4gPiA+ICsjCj4gPiA+ID4gPiArIyBNYWtlZmlsZSBmb3IgWGls aW54IEFJIGVuZ2luZSBkZXZpY2UgZHJpdmVyCj4gPiA+ID4gPiArIwo+ID4gPiA+ID4gKwo+ID4g PiA+ID4gK29iai0kKENPTkZJR19YSUxJTlhfQUlFKcKgwqDCoMKgwqDCoMKgKz0geGlsaW54LWFp ZS5vCj4gPiA+ID4gPiArCj4gPiA+ID4gPiAreGlsaW54LWFpZS0kKENPTkZJR19YSUxJTlhfQUlF KSA6PSBhaS1lbmdpbmUtYWllLm8gXAo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBhaS1lbmdpbmUtZGV2 Lm8gXAo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBhaS1lbmdpbmUtcGFydC5vIFwKPiA+ID4gPiA+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgYWktZW5naW5lLXJlcy5vCj4gPiA+ID4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9t aXNjL3hpbGlueC1haS1lbmdpbmUvYWktZW5naW5lLWFpZS5jCj4gPiA+ID4gPiBiL2RyaXZlcnMv bWlzYy94aWxpbngtYWktZW5naW5lL2FpLWVuZ2luZS1haWUuYwo+ID4gPiA+ID4gbmV3IGZpbGUg bW9kZSAxMDA2NDQKPiA+ID4gPiA+IGluZGV4IDAwMDAwMDAuLjMxOTI2MGYKPiA+ID4gPiA+IC0t LSAvZGV2L251bGwKPiA+ID4gPiA+ICsrKyBiL2RyaXZlcnMvbWlzYy94aWxpbngtYWktZW5naW5l L2FpLWVuZ2luZS1haWUuYwo+ID4gPiA+ID4gQEAgLTAsMCArMSwxMTUgQEAKPiA+ID4gPiA+ICsv LyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAo+ID4gPiA+ID4gKy8qCj4gPiA+ID4g PiArICogWGlsaW54IEFJIEVuZ2luZSBkcml2ZXIgQUlFIGRldmljZSBzcGVjaWZpYyBpbXBsZW1l bnRhdGlvbgo+ID4gPiA+ID4gKyAqCj4gPiA+ID4gPiArICogQ29weXJpZ2h0IChDKSAyMDIwIFhp bGlueCwgSW5jLgo+ID4gPiA+ID4gKyAqLwo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gKyNpbmNsdWRl IDxsaW51eC9zbGFiLmg+Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiArI2luY2x1ZGUgImFpLWVuZ2lu ZS1pbnRlcm5hbC5oIgo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gKyNkZWZpbmUgQUlFX0FSUkFZX1NI SUZUwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAzMFUKPiA+ID4gPiA+ICsjZGVmaW5l IEFJRV9DT0xfU0hJRlTCoMKgwqDCoMKgwqDCoMKgwqDCoDIzVQo+ID4gPiA+ID4gKyNkZWZpbmUg QUlFX1JPV19TSElGVMKgwqDCoMKgwqDCoMKgwqDCoMKgMThVCj4gPiA+ID4gPiArCj4gPiA+ID4g PiArLyoKPiA+ID4gPiA+ICsgKiBSZWdpc3RlcnMgb2Zmc2V0cwo+ID4gPiA+ID4gKyAqLwo+ID4g PiA+ID4gKyNkZWZpbmUgQUlFX1NISU1OT0NfTDJJTlRSX01BU0tfUkVHT0ZGwqDCoMKgwqDCoMKg wqDCoMKgMHgwMDAxNTAwMFUKPiA+ID4gPiA+ICsjZGVmaW5lIEFJRV9TSElNTk9DX0wySU5UUl9J TlRSX1JFR09GRsKgwqDCoMKgwqDCoMKgwqDCoDB4MDAwMTUwMTBVCj4gPiA+ID4gPiArI2RlZmlu ZSBBSUVfU0hJTU5PQ19ETUFfQkQwX0FERFJMT1dfUkVHT0ZGwqDCoMKgwqDCoDB4MDAwMWQwMDBV Cj4gPiA+ID4gPiArI2RlZmluZSBBSUVfU0hJTU5PQ19ETUFfQkQxNV9QQUNLRVRfUkVHT0ZGwqDC oMKgwqDCoDB4MDAwMWQxM2NVCj4gPiA+ID4gPiArI2RlZmluZSBBSUVfU0hJTU5PQ19BWElNTV9S RUdPRkbCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAweDAwMDFlMDIwVQo+ID4gPiA+ID4g KyNkZWZpbmUgQUlFX1NISU1QTF9MMUlOVFJfTUFTS19BX1JFR09GRsKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgMHgwMDAzNTAwMFUKPiA+ID4gPiA+ICsjZGVmaW5lIEFJRV9TSElNUExf TDFJTlRSX0JMT0NLX05PUlRIX0JfUkVHT0ZGwqAweDAwMDM1MDUwVQo+ID4gPiA+ID4gKyNkZWZp bmUgQUlFX1NISU1QTF9DTEtDTlRSX1JFR09GRsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAw eDAwMDM2MDQwVQo+ID4gPiA+ID4gKyNkZWZpbmUgQUlFX1NISU1QTF9SRVNFVF9SRUdPRkbCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAweDAwMDM2MDRjVQo+ ID4gPiA+ID4gKyNkZWZpbmUgQUlFX1RJTEVfQ09SRV9DTEtDTlRSX1JFR09GRsKgwqDCoMKgwqDC oMKgwqDCoMKgwqAweDAwMDM2MDQwVQo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gK3N0YXRpYyBjb25z dCBzdHJ1Y3QgYWllX3RpbGVfcmVncyBhaWVfa2VybmVsX3JlZ3NbXSA9IHsKPiA+ID4gPiA+ICvC oMKgwqDCoMKgwqDCoC8qIFNISU0gQVhJIE1NIENvbmZpZyAqLwo+ID4gPiA+ID4gK8KgwqDCoMKg wqDCoMKgey5hdHRyaWJ1dGUgPSBBSUVfVElMRV9UWVBFX1NISU1OT0MgPDwgQUlFX1JFR1NfQVRU Ul9USUxFX1RZUEVfU0hJRlQsCj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqAgLnNvZmYgPSBBSUVf U0hJTU5PQ19BWElNTV9SRUdPRkYsCj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqAgLmVvZmYgPSBB SUVfU0hJTU5PQ19BWElNTV9SRUdPRkYsCj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqB9LAo+ID4g PiA+ID4gK8KgwqDCoMKgwqDCoMKgLyogU0hJTSBETUEgQUREUkVTUyByYW5nZSAqLwo+ID4gPiA+ ID4gK8KgwqDCoMKgwqDCoMKgey5hdHRyaWJ1dGUgPSBBSUVfVElMRV9UWVBFX1NISU1OT0MgPDwg QUlFX1JFR1NfQVRUUl9USUxFX1RZUEVfU0hJRlQsCj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqAg LnNvZmYgPSBBSUVfU0hJTU5PQ19ETUFfQkQwX0FERFJMT1dfUkVHT0ZGLAo+ID4gPiA+ID4gK8Kg wqDCoMKgwqDCoMKgIC5lb2ZmID0gQUlFX1NISU1OT0NfRE1BX0JEMTVfUEFDS0VUX1JFR09GRiwK PiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoH0sCj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqAvKiBT SElNIDJuZCBsZXZlbCBpbnRlcnJ1cHQgY29udHJvbGxlciAqLwo+ID4gPiA+ID4gK8KgwqDCoMKg wqDCoMKgey5hdHRyaWJ1dGUgPSBBSUVfVElMRV9UWVBFX1NISU1OT0MgPDwgQUlFX1JFR1NfQVRU Ul9USUxFX1RZUEVfU0hJRlQsCj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqAgLnNvZmYgPSBBSUVf U0hJTU5PQ19MMklOVFJfTUFTS19SRUdPRkYsCj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqAgLmVv ZmYgPSBBSUVfU0hJTU5PQ19MMklOVFJfSU5UUl9SRUdPRkYsCj4gPiA+ID4gPiArwqDCoMKgwqDC oMKgwqB9LAo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgLyogU0hJTSAxc3QgbGV2ZWwgaW50ZXJy dXB0IGNvbnRyb2xsZXIgKi8KPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoHsuYXR0cmlidXRlID0g KEFJRV9USUxFX1RZUEVfU0hJTVBMIHwgQUlFX1RJTEVfVFlQRV9TSElNTk9DKSA8PAo+ID4gPiA+ ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgQUlFX1JFR1NfQVRU Ul9USUxFX1RZUEVfU0hJRlQsCj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqAgLnNvZmYgPSBBSUVf U0hJTVBMX0wxSU5UUl9NQVNLX0FfUkVHT0ZGLAo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgIC5l b2ZmID0gQUlFX1NISU1QTF9MMUlOVFJfQkxPQ0tfTk9SVEhfQl9SRUdPRkYsCj4gPiA+ID4gPiAr wqDCoMKgwqDCoMKgwqB9LAo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgLyogU0hJTSByZXNldCBF bmFibGUgKi8KPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoHsuYXR0cmlidXRlID0gKEFJRV9USUxF X1RZUEVfU0hJTVBMIHwgQUlFX1RJTEVfVFlQRV9TSElNTk9DKSA8PAo+ID4gPiA+ID4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgQUlFX1JFR1NfQVRUUl9USUxFX1RZ UEVfU0hJRlQsCj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqAgLnNvZmYgPSBBSUVfU0hJTVBMX1JF U0VUX1JFR09GRiwKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoCAuZW9mZiA9IEFJRV9TSElNUExf UkVTRVRfUkVHT0ZGLAo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgfSwKPiA+ID4gPiA+ICvCoMKg wqDCoMKgwqDCoC8qIFNISU0gY2xvY2sgY29udHJvbCAqLwo+ID4gPiA+ID4gK8KgwqDCoMKgwqDC oMKgey5hdHRyaWJ1dGUgPSAoQUlFX1RJTEVfVFlQRV9TSElNUEwgfCBBSUVfVElMRV9UWVBFX1NI SU1OT0MpIDw8Cj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBBSUVfUkVHU19BVFRSX1RJTEVfVFlQRV9TSElGVCwKPiA+ID4gPiA+ICvCoMKgwqDCoMKg wqDCoCAuc29mZiA9IEFJRV9TSElNUExfQ0xLQ05UUl9SRUdPRkYsCj4gPiA+ID4gPiArwqDCoMKg wqDCoMKgwqAgLmVvZmYgPSBBSUVfU0hJTVBMX0NMS0NOVFJfUkVHT0ZGLAo+ID4gPiA+ID4gK8Kg wqDCoMKgwqDCoMKgfSwKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoC8qIFRpbGUgY2xvY2sgY29u dHJvbCAqLwo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgey5hdHRyaWJ1dGUgPSBBSUVfVElMRV9U WVBFX1RJTEUgPDwgQUlFX1JFR1NfQVRUUl9USUxFX1RZUEVfU0hJRlQsCj4gPiA+ID4gPiArwqDC oMKgwqDCoMKgwqAgLnNvZmYgPSBBSUVfVElMRV9DT1JFX0NMS0NOVFJfUkVHT0ZGLAo+ID4gPiA+ ID4gK8KgwqDCoMKgwqDCoMKgIC5lb2ZmID0gQUlFX1RJTEVfQ09SRV9DTEtDTlRSX1JFR09GRiwK PiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoH0sCj4gPiA+ID4gPiArfTsKPiA+ID4gPiA+ICsKPiA+ ID4gPiA+ICtzdGF0aWMgdTMyIGFpZV9nZXRfdGlsZV90eXBlKHN0cnVjdCBhaWVfbG9jYXRpb24g KmxvYykKPiA+ID4gPiA+ICt7Cj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqBpZiAobG9jLT5yb3cp Cj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIEFJRV9USUxF X1RZUEVfVElMRTsKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoC8qIFNISU0gcm93ICovCj4gPiA+ ID4gPiArwqDCoMKgwqDCoMKgwqBpZiAoKGxvYy0+Y29sICUgNCkgPCAyKQo+ID4gPiA+ID4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiBBSUVfVElMRV9UWVBFX1NISU1QTDsK PiA+ID4gPiA+ICsKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoHJldHVybiBBSUVfVElMRV9UWVBF X1NISU1OT0M7Cj4gPiA+ID4gPiArfQo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gK3N0YXRpYyBjb25z dCBzdHJ1Y3QgYWllX3RpbGVfb3BlcmF0aW9ucyBhaWVfb3BzID0gewo+ID4gPiA+ID4gK8KgwqDC oMKgwqDCoMKgLmdldF90aWxlX3R5cGUgPSBhaWVfZ2V0X3RpbGVfdHlwZSwKPiA+ID4gPiA+ICt9 Owo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gKy8qKgo+ID4gPiA+ID4gKyAqIGFpZV9kZXZpY2VfaW5p dCgpIC0gSW5pdGlhbGl6ZSBBSSBlbmdpbmUgZGV2aWNlIHN0cnVjdCBBSUUgc3BlY2lmaWMKPiA+ ID4gPiA+ICsgKsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHByb3BlcnRp ZXMKPiA+ID4gPiA+ICsgKiBAYWRldjogQUkgZW5naW5lIGRldmljZQo+ID4gPiA+ID4gKyAqIEBy ZXR1cm46IDAgZm9yIHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVlIGZvciBmYWlsdXJlLgo+ID4gPiA+ ID4gKyAqCj4gPiA+ID4gPiArICogVGhpcyBmdW5jdGlvbiBpbml0aWFsaXplIHRoZSBBSSBlbmdp bmUgZGV2aWNlIHN0cnVjdHVyZSBkZXZpY2UgdmVyc2lvbgo+ID4gPiA+ID4gKyAqIHNwZWNpZmlj IGVsZW1lbnRzIHN1Y2ggYXMgcmVnaXN0ZXIgYWRkcmVzc2luZyByZWxhdGVkIGFycmF5IHNoaWZ0 LAo+ID4gPiA+ID4gKyAqIGNvbHVtbiBzaGlmdCwgYW5kIHJvdyBzaGlmdDsgQUlFIHNwZWNpZmlj IGRldmljZSBvcGVyYXRpb25zLCBkZXZpY2UKPiA+ID4gPiA+ICsgKiBjb2x1bW5zIHJlc291cmNl Lgo+ID4gPiA+ID4gKyAqLwo+ID4gPiA+ID4gK2ludCBhaWVfZGV2aWNlX2luaXQoc3RydWN0IGFp ZV9kZXZpY2UgKmFkZXYpCj4gPiA+ID4gPiArewo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgaW50 IHJldDsKPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoGFkZXYtPmFycmF5X3No aWZ0ID0gQUlFX0FSUkFZX1NISUZUOwo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgYWRldi0+Y29s X3NoaWZ0ID0gQUlFX0NPTF9TSElGVDsKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoGFkZXYtPnJv d19zaGlmdCA9IEFJRV9ST1dfU0hJRlQ7Cj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqBhZGV2LT5v cHMgPSAmYWllX29wczsKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoGFkZXYtPm51bV9rZXJuZWxf cmVncyA9IEFSUkFZX1NJWkUoYWllX2tlcm5lbF9yZWdzKTsKPiA+ID4gPiA+ICvCoMKgwqDCoMKg wqDCoGFkZXYtPmtlcm5lbF9yZWdzID0gYWllX2tlcm5lbF9yZWdzOwo+ID4gPiA+ID4gKwo+ID4g PiA+ID4gK8KgwqDCoMKgwqDCoMKgLyogR2V0IHRoZSBjb2x1bW5zIHJlc291cmNlICovCj4gPiA+ ID4gPiArwqDCoMKgwqDCoMKgwqAvKiBHZXQgbnVtYmVyIG9mIGNvbHVtbnMgZnJvbSBBSSBlbmdp bmUgbWVtb3J5IHJlc291cmNlICovCj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqByZXQgPSBhaWVf cmVzb3VyY2VfaW5pdGlhbGl6ZSgmYWRldi0+Y29sc19yZXMsIDUwKTsKPiA+ID4gPiA+ICvCoMKg wqDCoMKgwqDCoGlmIChyZXQpCj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgZGV2X2VycigmYWRldi0+ZGV2LCAiZmFpbGVkIHRvIGluaXRpYWxpemUgY29sdW1ucwo+ID4g PiA+ID4gcmVzb3VyY2UuXG4iKTsKPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDC oHJldHVybiByZXQ7Cj4gPiA+ID4gPiArfQo+ID4gPiA+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMv bWlzYy94aWxpbngtYWktZW5naW5lL2FpLWVuZ2luZS1kZXYuYwo+ID4gPiA+ID4gYi9kcml2ZXJz L21pc2MveGlsaW54LWFpLWVuZ2luZS9haS1lbmdpbmUtZGV2LmMKPiA+ID4gPiA+IG5ldyBmaWxl IG1vZGUgMTAwNjQ0Cj4gPiA+ID4gPiBpbmRleCAwMDAwMDAwLi4yYWIyZGM4Cj4gPiA+ID4gPiAt LS0gL2Rldi9udWxsCj4gPiA+ID4gPiArKysgYi9kcml2ZXJzL21pc2MveGlsaW54LWFpLWVuZ2lu ZS9haS1lbmdpbmUtZGV2LmMKPiA+ID4gPiA+IEBAIC0wLDAgKzEsNDQ4IEBACj4gPiA+ID4gPiAr Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKPiA+ID4gPiA+ICsvKgo+ID4gPiA+ ID4gKyAqIFhpbGlueCBBSSBFbmdpbmUgZGV2aWNlIGRyaXZlcgo+ID4gPiA+ID4gKyAqCj4gPiA+ ID4gPiArICogQ29weXJpZ2h0IChDKSAyMDIwIFhpbGlueCwgSW5jLgo+ID4gPiA+ID4gKyAqLwo+ ID4gPiA+ID4gKwo+ID4gPiA+ID4gKyNpbmNsdWRlIDxsaW51eC9hbm9uX2lub2Rlcy5oPgo+ID4g PiA+ID4gKyNpbmNsdWRlIDxsaW51eC9jZGV2Lmg+Cj4gPiA+ID4gPiArI2luY2x1ZGUgPGxpbnV4 L2RlbGF5Lmg+Cj4gPiA+ID4gPiArI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgo+ID4gPiA+ID4g KyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgo+ID4gPiA+ID4gKyNpbmNsdWRlIDxsaW51 eC9maWxlLmg+Cj4gPiA+ID4gPiArI2luY2x1ZGUgPGxpbnV4L2ZzLmg+Cj4gPiA+ID4gPiArI2lu Y2x1ZGUgPGxpbnV4L2lkci5oPgo+ID4gPiA+ID4gKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+Cj4g PiA+ID4gPiArI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgo+ID4gPiA+ID4gKyNpbmNsdWRlIDxs aW51eC9tdXRleC5oPgo+ID4gPiA+ID4gKyNpbmNsdWRlIDxsaW51eC9vZi5oPgo+ID4gPiA+ID4g KyNpbmNsdWRlIDxsaW51eC9vZl9kZXZpY2UuaD4KPiA+ID4gPiA+ICsjaW5jbHVkZSA8bGludXgv cGxhdGZvcm1fZGV2aWNlLmg+Cj4gPiA+ID4gPiArI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KPiA+ ID4gPiA+ICsjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgo+ID4gPiA+ID4gKyNpbmNsdWRlIDx1 YXBpL2xpbnV4L3hsbngtYWktZW5naW5lLmg+Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiArI2luY2x1 ZGUgImFpLWVuZ2luZS1pbnRlcm5hbC5oIgo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gKyNkZWZpbmUg QUlFX0RFVl9NQVjCoMKgwqDCoChNSU5PUk1BU0sgKyAxKQo+ID4gPiA+ID4gKwo+ID4gPiA+ID4g K3N0YXRpYyBkZXZfdCBhaWVfbWFqb3I7Cj4gPiA+ID4gPiArc3RydWN0IGNsYXNzICphaWVfY2xh c3M7Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiArc3RhdGljIERFRklORV9JREEoYWllX2RldmljZV9p ZGEpOwo+ID4gPiA+ID4gK3N0YXRpYyBERUZJTkVfSURBKGFpZV9taW5vcl9pZGEpOwo+ID4gPiA+ ID4gKwo+ID4gPiA+ID4gKy8qKgo+ID4gPiA+ID4gKyAqIGFpZV9nZXRfcGFydGl0aW9uX2ZkKCkg LSBHZXQgQUkgZW5naW5lIHBhcnRpdGlvbiBmaWxlIGRlc2NyaXB0b3IKPiA+ID4gPiA+ICsgKiBA YXBhcnQ6IEFJIGVuZ2luZSBwYXJ0aXRpb24KPiA+ID4gPiA+ICsgKiBAcmV0dXJuOiBmaWxlIGRl c2NyaXB0b3IgZm9yIEFJIGVuZ2luZSBwYXJ0aXRpb24gZm9yIHN1Y2Nlc3MsIG9yIG5lZ2F0aXZl Cj4gPiA+ID4gPiArICrCoMKgwqDCoMKgwqDCoMKgIHZhbHVlIGZvciBmYWlsdXJlLgo+ID4gPiA+ ID4gKyAqCj4gPiA+ID4gPiArICogVGhpcyBmdW5jdGlvbiBnZXRzIGEgZmlsZSBkZXNjcmlwdG9y IGZvciB0aGUgQUkgZW5naW5lIHBhcnRpdGlvbi4KPiA+ID4gPiA+ICsgKi8KPiA+ID4gPiA+ICtz dGF0aWMgaW50IGFpZV9nZXRfcGFydGl0aW9uX2ZkKHN0cnVjdCBhaWVfcGFydGl0aW9uICphcGFy dCkKPiA+ID4gPiA+ICt7Cj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgZmlsZSAqZmls ZXA7Cj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqBpbnQgcmV0Owo+ID4gPiA+ID4gKwo+ID4gPiA+ ID4gK8KgwqDCoMKgwqDCoMKgLyoKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoCAqIFdlIGNhbid0 IHVzZSBhbm9uX2lub2RlX2dldGZkKCkgYmVjYXVzZSB3ZSBuZWVkIHRvIG1vZGlmeQo+ID4gPiA+ ID4gK8KgwqDCoMKgwqDCoMKgICogdGhlIGZfbW9kZSBmbGFncyBkaXJlY3RseSB0byBhbGxvdyBt b3JlIHRoYW4ganVzdCBpb2N0bHMKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoCAqLwo+ID4gPiA+ ID4gK8KgwqDCoMKgwqDCoMKgcmV0ID0gZ2V0X3VudXNlZF9mZF9mbGFncyhPX0NMT0VYRUMpOwo+ ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgaWYgKHJldCA8IDApCj4gPiA+ID4gPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIHJldDsKPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICvC oMKgwqDCoMKgwqDCoGZpbGVwID0gYW5vbl9pbm9kZV9nZXRmaWxlKGRldl9uYW1lKCZhcGFydC0+ ZGV2KSwgJmFpZV9wYXJ0X2ZvcHMsCj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGFwYXJ0LCBPX1JEV1Ip Owo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgaWYgKElTX0VSUihmaWxlcCkpIHsKPiA+ID4gPiA+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBwdXRfdW51c2VkX2ZkKHJldCk7Cj4gPiA+ ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0ID0gUFRSX0VSUihmaWxlcCk7 Cj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIHJldDsKPiA+ ID4gPiA+ICvCoMKgwqDCoMKgwqDCoH0KPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoGZpbGVwLT5m X21vZGUgfD0gKEZNT0RFX0xTRUVLIHwgRk1PREVfUFJFQUQgfCBGTU9ERV9QV1JJVEUpOwo+ID4g PiA+ID4gK8KgwqDCoMKgwqDCoMKgZmRfaW5zdGFsbChyZXQsIGZpbGVwKTsKPiA+ID4gPiA+ICsK PiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoHJldHVybiByZXQ7Cj4gPiA+ID4gPiArfQo+ID4gPiA+ ID4gKwo+ID4gPiA+ID4gKy8qKgo+ID4gPiA+ID4gKyAqIGFpZV9lbnF1aXJlX3BhcnRpdGlvbnMo KSAtIGdldCBBSSBlbmdpbmUgcGFydGl0aW9ucyBpbmZvcm1hdGlvbgo+ID4gPiA+ID4gKyAqIEBh ZGV2OiBBSSBlbmdpbmUgZGV2aWNlCj4gPiA+ID4gPiArICogQHF1ZXJ5OiBkYXRhIHN0cnVjdCB0 byBzdG9yZSB0aGUgcGFydGl0aW9uIGluZm9ybWF0aW9uCj4gPiA+ID4gPiArICogQHJldHVybjog MCBmb3Igc3VjY2VzcywgYW5kIG5lZ2F0aXZlIHZhbHVlIGZvciBmYWlsdXJlLgo+ID4gPiA+ID4g KyAqLwo+ID4gPiA+ID4gK3N0YXRpYyBpbnQgYWllX2VucXVpcmVfcGFydGl0aW9ucyhzdHJ1Y3Qg YWllX2RldmljZSAqYWRldiwKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0cnVjdCBhaWVfcGFydGl0aW9u X3F1ZXJ5ICpxdWVyeSkKPiA+ID4gPiA+ICt7Cj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqBzdHJ1 Y3QgYWllX3BhcnRpdGlvbiAqYXBhcnQ7Cj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqB1MzIgcGFy dGl0aW9uX2NudCwgaSA9IDA7Cj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqBpbnQgcmV0Owo+ID4g PiA+ID4gKwo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgaWYgKCFxdWVyeS0+cGFydGl0aW9ucykg ewo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC8qCj4gPiA+ID4gPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICogSWYgcGFydGl0aW9ucyBpbmZvcm1hdGlv biBidWZmZXIgaXMgTlVMTC4KPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgKiBJdCBpcyB0byBnZXQgdGhlIG51bWJlciBvZiBwYXJ0aXRpb25zLgo+ID4gPiA+ID4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqLwo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoHF1ZXJ5LT5wYXJ0aXRpb25fY250ID0gMDsKPiA+ID4gPiA+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBsaXN0X2Zvcl9lYWNoX2VudHJ5KGFwYXJ0LCAmYWRl di0+cGFydGl0aW9ucywgbm9kZSkKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgcXVlcnktPnBhcnRpdGlvbl9jbnQrKzsKPiA+ID4gPiA+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gMDsKPiA+ID4gPiA+ICvCoMKgwqDC oMKgwqDCoH0KPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoHBhcnRpdGlvbl9j bnQgPSBxdWVyeS0+cGFydGl0aW9uX2NudDsKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoGlmICgh cGFydGl0aW9uX2NudCkKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBy ZXR1cm4gMDsKPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoHJldCA9IG11dGV4 X2xvY2tfaW50ZXJydXB0aWJsZSgmYWRldi0+bWxvY2spOwo+ID4gPiA+ID4gK8KgwqDCoMKgwqDC oMKgaWYgKHJldCkKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1 cm4gcmV0Owo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgbGlzdF9mb3JfZWFj aF9lbnRyeShhcGFydCwgJmFkZXYtPnBhcnRpdGlvbnMsIG5vZGUpIHsKPiA+ID4gPiA+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgYWllX3JhbmdlX2FyZ3MgcGFydDsKPiA+ ID4gPiA+ICsKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAoaSA+ PSBwYXJ0aXRpb25fY250KQo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqBicmVhazsKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqBwYXJ0LnBhcnRpdGlvbl9pZCA9IGFwYXJ0LT5wYXJ0aXRpb25faWQ7Cj4gPiA+ID4g PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgLyoKPiA+ID4gPiA+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgKiBUQkQ6IGNoZWNrIHdpdGggUExNIHRoYXQgaWYgdGhlIHBh cnRpdGlvbiBpcyBwcm9ncmFtbWVkCj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgICogYW5kIGdldCB0aGUgVUlEIG9mIHRoZSBpbWFnZSB3aGljaCBpcyBsb2FkZWQgb24g dGhlIEFJCj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICogZW5naW5l IHBhcnRpdGlvbi4KPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKi8K PiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBwYXJ0LnVpZCA9IDA7Cj4g PiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcGFydC5yYW5nZS5zdGFydC5j b2wgPSBhcGFydC0+cmFuZ2Uuc3RhcnQuY29sOwo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoHBhcnQucmFuZ2Uuc3RhcnQucm93ID0gYXBhcnQtPnJhbmdlLnN0YXJ0LnJv dzsKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBwYXJ0LnJhbmdlLnNp emUuY29sID0gYXBhcnQtPnJhbmdlLnNpemUuY29sOwo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoHBhcnQucmFuZ2Uuc2l6ZS5yb3cgPSBhcGFydC0+cmFuZ2Uuc2l6ZS5y b3c7Cj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgLyogQ2hlY2sgaWYg cGFydGl0aW9uIGlzIGluIHVzZSAqLwo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoHBhcnQuc3RhdHVzID0gYXBhcnQtPnN0YXR1czsKPiA+ID4gPiA+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAoY29weV90b191c2VyKCh2b2lkIF9fdXNlciAqKSZxdWVy eS0+cGFydGl0aW9uc1tpXSwgJnBhcnQsCj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc2l6ZW9mKHBhcnQpKSkg ewo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqBtdXRleF91bmxvY2soJmFkZXYtPm1sb2NrKTsKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIC1FRkFVTFQ7Cj4gPiA+ID4gPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfQo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoGkrKzsKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoH0KPiA+ID4gPiA+ ICvCoMKgwqDCoMKgwqDCoG11dGV4X3VubG9jaygmYWRldi0+bWxvY2spOwo+ID4gPiA+ID4gK8Kg wqDCoMKgwqDCoMKgcXVlcnktPnBhcnRpdGlvbl9jbnQgPSBpOwo+ID4gPiA+ID4gKwo+ID4gPiA+ ID4gK8KgwqDCoMKgwqDCoMKgcmV0dXJuIDA7Cj4gPiA+ID4gPiArfQo+ID4gPiA+ID4gKwo+ID4g PiA+ID4gKy8qKgo+ID4gPiA+ID4gKyAqIGFpZV9nZXRfcGFydGl0aW9uX2Zyb21faWQoKSAtIGdl dCBBSSBlbmdpbmUgcGFydGl0aW9uIGZyb20gaWQKPiA+ID4gPiA+ICsgKiBAYWRldjogQUkgZW5n aW5lIGRldmljZQo+ID4gPiA+ID4gKyAqIEBwYXJ0aXRpb25faWQ6IHBhcnRpdGlvbiBpZCB0byBj aGVjawo+ID4gPiA+ID4gKyAqIEByZXR1cm46IHBhcnRpdGlvbiBwb2ludGVyIGlmIHBhcnRpdGlv biBleGlzdHMsIG90aGVyd2lzZSwgTlVMTC4KPiA+ID4gPiA+ICsgKgo+ID4gPiA+ID4gKyAqIFRo aXMgZnVuY3Rpb24gY2hlY2tzIGRlZmluZWQgcGFydGl0aW9ucyB3aXRoIHBhcnRpdGlvbiBpZC4K PiA+ID4gPiA+ICsgKiBUaGlzIGZ1bmN0aW9uIGV4cGVjdCB0aGUgY2FsbGVyIHRvIGxvY2sgbWxv Y2sgb2YgQGFkZXYuCj4gPiA+ID4gPiArICovCj4gPiA+ID4gPiArc3RydWN0IGFpZV9wYXJ0aXRp b24gKmFpZV9nZXRfcGFydGl0aW9uX2Zyb21faWQoc3RydWN0IGFpZV9kZXZpY2UgKmFkZXYsCj4g PiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHUzMiBwYXJ0aXRp b25faWQpCj4gPiA+ID4gPiArewo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGFpZV9w YXJ0aXRpb24gKmFwYXJ0Owo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgbGlz dF9mb3JfZWFjaF9lbnRyeShhcGFydCwgJmFkZXYtPnBhcnRpdGlvbnMsIG5vZGUpIHsKPiA+ID4g PiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAoYXBhcnQtPnBhcnRpdGlvbl9p ZCA9PSBwYXJ0aXRpb25faWQpCj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiBhcGFydDsKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDC oH0KPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoHJldHVybiBOVUxMOwo+ID4g PiA+ID4gK30KPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICsvKioKPiA+ID4gPiA+ICsgKiBhaWVfcmVx dWVzdF9wYXJ0aXRpb24oKSAtIHJlcXVlc3QgQUkgZW5naW5lIHBhcnRpdGlvbgo+ID4gPiA+ID4g KyAqIEBhZGV2OiBBSSBlbmdpbmUgZGV2aWNlCj4gPiA+ID4gPiArICogQHJlcTogcGFydGl0aW9u IHJlcXVlc3QsIGluY2x1ZGVzIHRoZSByZXF1ZXN0ZWQgQUkgZW5naW5lIGluZm9ybWF0aW9uCj4g PiA+ID4gPiArICrCoMKgwqDCoMKgIHN1Y2ggYXMgcGFydGl0aW9uIG5vZGUgSUQgYW5kIHRoZSBV SUQgb2YgdGhlIGltYWdlIHdoaWNoIGlzCj4gPiA+ID4gPiArICrCoMKgwqDCoMKgIGxvYWRlZCBv biB0aGUgcGFydGl0aW9uLgo+ID4gPiA+ID4gKyAqIEByZXR1cm46IHBhcnRpdGlvbiBwb2ludGVy IGlmIHBhcnRpdGlvbiBleGlzdHMsIG90aGVyd2lzZSwgTlVMTC4KPiA+ID4gPiA+ICsgKgo+ID4g PiA+ID4gKyAqIFRoaXMgZnVuY3Rpb24gZmluZHMgYSBkZWZpbmVkIHBhcnRpdGlvbiB3aGljaCBt YXRjaGVzIHRoZSBzcGVjaWZpZWQKPiA+ID4gPiA+ICsgKiBwYXJ0aXRpb24gaWQsIHJlcXVlc3Qg aXQgaWYgaXQgaGFzbid0IGJlZW4gcmVxdWVzdGVkLCBhbmQgcmV0dXJucyBpdC4KPiA+ID4gPiA+ ICsgKi8KPiA+ID4gPiA+ICtzdHJ1Y3QgYWllX3BhcnRpdGlvbiAqYWllX3JlcXVlc3RfcGFydGl0 aW9uKHN0cnVjdCBhaWVfZGV2aWNlICphZGV2LAo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBzdHJ1Y3QgYWllX3BhcnRpdGlvbl9yZXEgKnJlcSkKPiA+ID4gPiA+ICt7Cj4g PiA+ID4gPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgYWllX3BhcnRpdGlvbiAqYXBhcnQ7Cj4gPiA+ ID4gPiArwqDCoMKgwqDCoMKgwqBpbnQgcmV0Owo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gK8KgwqDC oMKgwqDCoMKgcmV0ID0gbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZhZGV2LT5tbG9jayk7Cj4g PiA+ID4gPiArwqDCoMKgwqDCoMKgwqBpZiAocmV0KQo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoHJldHVybiBFUlJfUFRSKHJldCk7Cj4gPiA+ID4gPiArCj4gPiA+ID4g PiArwqDCoMKgwqDCoMKgwqBhcGFydCA9IGFpZV9nZXRfcGFydGl0aW9uX2Zyb21faWQoYWRldiwg cmVxLT5wYXJ0aXRpb25faWQpOwo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgaWYgKCFhcGFydCkg ewo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRldl9lcnIoJmFkZXYt PmRldiwKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgInJlcXVlc3QgcGFydGl0aW9uICV1IGZhaWxlZCwgbm90IGV4aXN0LlxuIiwKPiA+ID4g PiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmVxLT5w YXJ0aXRpb25faWQpOwo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoG11 dGV4X3VubG9jaygmYWRldi0+bWxvY2spOwo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoHJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwo+ID4gPiA+ID4gK8KgwqDCoMKgwqDC oMKgfQo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgLyoKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDC oCAqIFRCRDogSXQgd2lsbCBjaGVjayBpbWFnZSBVSUQgdG9vIHRvIHNlZSBpZiB0aGUgdXNlciBt YXRjaGVzCj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqAgKiB3aGF0J3MgbG9hZGVkIGluIHRoZSBB SSBlbmdpbmUgcGFydGl0aW9uLiBBbmQgY2hlY2sgdGhlIG1ldGEKPiA+ID4gPiA+ICvCoMKgwqDC oMKgwqDCoCAqIGRhdGEgdG8gc2VlIHdoaWNoIHJlc291cmNlcyB1c2VkIGJ5IGFwcGxpY2F0aW9u Lgo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgICovCj4gPiA+ID4gPiArCj4gPiA+ID4gPiArwqDC oMKgwqDCoMKgwqByZXQgPSBtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmFwYXJ0LT5tbG9jayk7 Cj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqBpZiAocmV0KQo+ID4gPiA+ID4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiBFUlJfUFRSKHJldCk7Cj4gPiA+ID4gPiArCj4gPiA+ ID4gPiArwqDCoMKgwqDCoMKgwqBpZiAoYXBhcnQtPnN0YXR1cyAmIFhBSUVfUEFSVF9TVEFUVVNf SU5VU0UpIHsKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBtdXRleF91 bmxvY2soJmFwYXJ0LT5tbG9jayk7Cj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgZGV2X2VycigmYWRldi0+ZGV2LAo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAicmVxdWVzdCBwYXJ0aXRpb24gJXUgZmFpbGVkLCBw YXJ0aXRpb24gaW4gdXNlLlxuIiwKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgcmVxLT5wYXJ0aXRpb25faWQpOwo+ID4gPiA+ID4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGFwYXJ0ID0gRVJSX1BUUigtRUJVU1kpOwo+ID4gPiA+ ID4gK8KgwqDCoMKgwqDCoMKgfSBlbHNlIHsKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAvKgo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAq IFRCRDoKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKiAxLiBzZXR1 cCBOT0MgQVhJIE1NIGNvbmZpZyB0byBvbmx5IGdlbmVyYXRlIGVycm9yIGV2ZW50cwo+ID4gPiA+ ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqwqDCoMKgIGZvciBzbGF2ZSBlcnJv ciBhbmQgZGVjb2RlIGVycm9yLgo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCAqIDIuIHNjYW4gdG8gc2VlIHdoaWNoIHRpbGVzIGhhdmUgYmVlbiBjbG9jayBnYXRlZC4K PiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKgo+ID4gPiA+ID4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqIFRoaXMgbmVlZHMgdG8gYmUgZG9uZSBiZWZv cmUgdGhlIEFJIGVuZ2luZSBwYXJ0aXRpb24gaXMKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgKiBleHBvcnRlZCBmb3IgdXNlciB0byBhY2Nlc3MuCj4gPiA+ID4gPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICovCj4gPiA+ID4gPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgYXBhcnQtPnN0YXR1cyA9IFhBSUVfUEFSVF9TVEFUVVNfSU5VU0U7 Cj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgbXV0ZXhfdW5sb2NrKCZh cGFydC0+bWxvY2spOwo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgfQo+ID4gPiA+ID4gK8KgwqDC oMKgwqDCoMKgbXV0ZXhfdW5sb2NrKCZhZGV2LT5tbG9jayk7Cj4gPiA+ID4gPiArCj4gPiA+ID4g PiArwqDCoMKgwqDCoMKgwqByZXR1cm4gYXBhcnQ7Cj4gPiA+ID4gPiArfQo+ID4gPiA+ID4gKwo+ ID4gPiA+ID4gK3N0YXRpYyBsb25nIHhpbGlueF9haV9lbmdpbmVfaW9jdGwoc3RydWN0IGZpbGUg KmZpbHAsIHVuc2lnbmVkIGludCBjbWQsCj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHVuc2lnbmVkIGxv bmcgYXJnKQo+ID4gPiA+ID4gK3sKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBpbm9k ZSAqaW5vZGUgPSBmaWxlX2lub2RlKGZpbHApOwo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgc3Ry dWN0IGFpZV9kZXZpY2UgKmFkZXYgPSBjZGV2X3RvX2FpZWRldihpbm9kZS0+aV9jZGV2KTsKPiA+ ID4gPiA+ICvCoMKgwqDCoMKgwqDCoHZvaWQgX191c2VyICphcmdwID0gKHZvaWQgX191c2VyICop YXJnOwo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgaW50IHJldDsKPiA+ID4gPiA+ICsKPiA+ID4g PiA+ICvCoMKgwqDCoMKgwqDCoHN3aXRjaCAoY21kKSB7Cj4gPiA+ID4gPiArwqDCoMKgwqDCoMKg wqBjYXNlIEFJRV9FTlFVSVJFX1BBUlRfSU9DVEw6Cj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqB7 Cj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc3RydWN0IGFpZV9wYXJ0 aXRpb25fcXVlcnkgcXVlcnk7Cj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgc3RydWN0IGFpZV9wYXJ0aXRpb25fcXVlcnnCoCBfX3VzZXIgKnVxdWVyeV9wdHIgPSBhcmdw Owo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlm IChjb3B5X2Zyb21fdXNlcigmcXVlcnksIHVxdWVyeV9wdHIsIHNpemVvZihxdWVyeSkpKQo+ID4g PiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1 cm4gLUVGQVVMVDsKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXQg PSBhaWVfZW5xdWlyZV9wYXJ0aXRpb25zKGFkZXYsICZxdWVyeSk7Cj4gPiA+ID4gPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKHJldCA8IDApCj4gPiA+ID4gPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiByZXQ7Cj4gPiA+ID4g PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKGNvcHlfdG9fdXNlcigodm9pZCBf X3VzZXIgKikmdXF1ZXJ5X3B0ci0+cGFydGl0aW9uX2NudCwKPiA+ID4gPiA+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAmcXVl cnkucGFydGl0aW9uX2NudCwKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzaXplb2YocXVlcnkucGFydGl0aW9u X2NudCkpKQo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqByZXR1cm4gLUVGQVVMVDsKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqBicmVhazsKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoH0KPiA+ID4gPiA+ICvCoMKg wqDCoMKgwqDCoGNhc2UgQUlFX1JFUVVFU1RfUEFSVF9JT0NUTDoKPiA+ID4gPiA+ICvCoMKgwqDC oMKgwqDCoHsKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzdHJ1Y3Qg YWllX3BhcnRpdGlvbl9yZXEgcmVxOwo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoHN0cnVjdCBhaWVfcGFydGl0aW9uICphcGFydDsKPiA+ID4gPiA+ICsKPiA+ID4gPiA+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAoY29weV9mcm9tX3VzZXIoJnJlcSwg YXJncCwgc2l6ZW9mKHJlcSkpKQo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gLUVGQVVMVDsKPiA+ID4gPiA+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqBhcGFydCA9IGFpZV9yZXF1ZXN0X3BhcnRpdGlvbihhZGV2LCAm cmVxKTsKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAoSVNfRVJS KGFwYXJ0KSkKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgcmV0dXJuIFBUUl9FUlIoYXBhcnQpOwo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoHJldCA9IGFpZV9nZXRfcGFydGl0aW9uX2ZkKGFwYXJ0KTsKPiA+ID4g PiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAocmV0IDwgMCkgewo+ID4gPiA+ ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkZXZfZXJy KCZhcGFydC0+ZGV2LCAiZmFpbGVkIHRvIGdldCBmZC5cbiIpOwo+ID4gPiA+ID4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBicmVhazsKPiA+ID4gPiA+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9Cj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgYnJlYWs7Cj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqB9Cj4gPiA+ID4g PiArwqDCoMKgwqDCoMKgwqBkZWZhdWx0Ogo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoGRldl9lcnIoJmFkZXYtPmRldiwgIkludmFsaWQgaW9jdGwgY29tbWFuZCAldS5c biIsIGNtZCk7Cj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0ID0g LUVJTlZBTDsKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBicmVhazsK PiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoH0KPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICvCoMKgwqDC oMKgwqDCoHJldHVybiByZXQ7Cj4gPiA+ID4gPiArfQo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gK3N0 YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGFpZV9kZXZpY2VfZm9wcyA9IHsKPiA+ ID4gPiA+ICvCoMKgwqDCoMKgwqDCoC5vd25lcsKgwqDCoMKgwqDCoMKgwqDCoMKgPSBUSElTX01P RFVMRSwKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoC51bmxvY2tlZF9pb2N0bMKgPSB4aWxpbnhf YWlfZW5naW5lX2lvY3RsLAo+ID4gPiA+ID4gK307Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiArc3Rh dGljIHZvaWQgeGlsaW54X2FpX2VuZ2luZV9yZWxlYXNlX2RldmljZShzdHJ1Y3QgZGV2aWNlICpk ZXYpCj4gPiA+ID4gPiArewo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGFpZV9kZXZp Y2UgKmFkZXYgPSBkZXZfdG9fYWllZGV2KGRldik7Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiArwqDC oMKgwqDCoMKgwqBpZGFfc2ltcGxlX3JlbW92ZSgmYWllX2RldmljZV9pZGEsIGRldi0+aWQpOwo+ ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgaWRhX3NpbXBsZV9yZW1vdmUoJmFpZV9taW5vcl9pZGEs IE1JTk9SKGRldi0+ZGV2dCkpOwo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgY2Rldl9kZWwoJmFk ZXYtPmNkZXYpOwo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgYWllX3Jlc291cmNlX3VuaW5pdGlh bGl6ZSgmYWRldi0+Y29sc19yZXMpOwo+ID4gPiA+ID4gK30KPiA+ID4gPiA+ICsKPiA+ID4gPiA+ ICsvKioKPiA+ID4gPiA+ICsgKiBvZl94aWxpbnhfYWlfZW5naW5lX3BhcnRfcHJvYmUoKSAtIHBy b2JlcyBmb3IgQUkgZW5naW5lIHBhcnRpdGlvbiBub2Rlcwo+ID4gPiA+ID4gKyAqIEBhZGV2OiBB SSBlbmdpbmUgZGV2aWNlCj4gPiA+ID4gPiArICoKPiA+ID4gPiA+ICsgKiBUaGlzIGZ1bmN0aW9u IHdpbGwgcHJvYmUgZm9yIGNoaWxkcmVuIEFJIGVuZ2luZSBwYXJ0aXRpb24gbm9kZXMgYW5kIGNy ZWF0ZQo+ID4gPiA+ID4gKyAqIGFuIEFJIGVuZ2luZSBwYXJ0aXRpb24gaW5zdGFuY2UgZm9yIGVh Y2ggbm9kZS4KPiA+ID4gPiA+ICsgKi8KPiA+ID4gPiA+ICtzdGF0aWMgdm9pZCBvZl94aWxpbnhf YWlfZW5naW5lX3BhcnRfcHJvYmUoc3RydWN0IGFpZV9kZXZpY2UgKmFkZXYpCj4gPiA+ID4gPiAr ewo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGRldmljZV9ub2RlICpuYzsKPiA+ID4g PiA+ICsKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoGZvcl9lYWNoX2F2YWlsYWJsZV9jaGlsZF9v Zl9ub2RlKGFkZXYtPmRldi5vZl9ub2RlLCBuYykgewo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoHN0cnVjdCBhaWVfcGFydGl0aW9uICphcGFydDsKPiA+ID4gPiA+ICsK PiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAob2Zfbm9kZV90ZXN0 X2FuZF9zZXRfZmxhZyhuYywgT0ZfUE9QVUxBVEVEKSkKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgY29udGludWU7Cj4gPiA+ID4gPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgYXBhcnQgPSBvZl9haWVfcGFydF9wcm9iZShhZGV2 LCBuYyk7Cj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKElTX0VS UihhcGFydCkpIHsKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgZGV2X2VycigmYWRldi0+ZGV2LAo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIkZhaWxlZCB0 byBwcm9iZSBBSSBlbmdpbmUgcGFydCBmb3IgJXBPRlxuIiwKPiA+ID4gPiA+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoG5jKTsK PiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg b2Zfbm9kZV9jbGVhcl9mbGFnKG5jLCBPRl9QT1BVTEFURUQpOwo+ID4gPiA+ID4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoH0KPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoH0KPiA+ID4g PiA+ICt9Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiArc3RhdGljIGludCB4aWxpbnhfYWlfZW5naW5l X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCj4gPiA+ID4gPiArewo+ID4gPiA+ ID4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGFpZV9kZXZpY2UgKmFkZXY7Cj4gPiA+ID4gPiArwqDC oMKgwqDCoMKgwqBzdHJ1Y3QgZGV2aWNlICpkZXY7Cj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqBp bnQgcmV0Owo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgYWRldiA9IGRldm1f a3phbGxvYygmcGRldi0+ZGV2LCBzaXplb2YoKmFkZXYpLCBHRlBfS0VSTkVMKTsKPiA+ID4gPiA+ ICvCoMKgwqDCoMKgwqDCoGlmICghYWRldikKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqByZXR1cm4gLUVOT01FTTsKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoHBsYXRm b3JtX3NldF9kcnZkYXRhKHBkZXYsIGFkZXYpOwo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgSU5J VF9MSVNUX0hFQUQoJmFkZXYtPnBhcnRpdGlvbnMpOwo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKg bXV0ZXhfaW5pdCgmYWRldi0+bWxvY2spOwo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gK8KgwqDCoMKg wqDCoMKgYWRldi0+cmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0Vf TUVNLCAwKTsKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoGlmICghYWRldi0+cmVzKSB7Cj4gPiA+ ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZGV2X2VycigmcGRldi0+ZGV2LCAi Tm8gbWVtb3J5IHJlc291cmNlLlxuIik7Cj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgcmV0dXJuIC1FSU5WQUw7Cj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqB9Cj4gPiA+ ID4gPiArwqDCoMKgwqDCoMKgwqBhZGV2LT5iYXNlID0gZGV2bV9pb3JlbWFwX3Jlc291cmNlKCZw ZGV2LT5kZXYsIGFkZXYtPnJlcyk7Cj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqBpZiAoSVNfRVJS KGFkZXYtPmJhc2UpKSB7Cj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg ZGV2X2VycigmcGRldi0+ZGV2LCAibm8gaW8gbWVtb3J5IHJlc291cmNlLlxuIik7Cj4gPiA+ID4g PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIFBUUl9FUlIoYWRldi0+YmFz ZSk7Cj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqB9Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiArwqDC oMKgwqDCoMKgwqAvKiBJbml0aWFsaXplIEFJRSBkZXZpY2Ugc3BlY2lmaWMgaW5zdGFuY2UuICov Cj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqByZXQgPSBhaWVfZGV2aWNlX2luaXQoYWRldik7Cj4g PiA+ID4gPiArwqDCoMKgwqDCoMKgwqBpZiAocmV0IDwgMCkgewo+ID4gPiA+ID4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBpbml0 aWFsaXplIGRldmljZQo+ID4gPiA+ID4gaW5zdGFuY2UuXG4iKTsKPiA+ID4gPiA+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gcmV0Owo+ID4gPiA+ID4gK8KgwqDCoMKgwqDC oMKgfQo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgZGV2ID0gJmFkZXYtPmRl djsKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoGRldmljZV9pbml0aWFsaXplKGRldik7Cj4gPiA+ ID4gPiArwqDCoMKgwqDCoMKgwqBkZXYtPmNsYXNzID0gYWllX2NsYXNzOwo+ID4gPiA+ID4gK8Kg wqDCoMKgwqDCoMKgZGV2LT5wYXJlbnQgPSAmcGRldi0+ZGV2Owo+ID4gPiA+ID4gK8KgwqDCoMKg wqDCoMKgZGV2LT5vZl9ub2RlID0gcGRldi0+ZGV2Lm9mX25vZGU7Cj4gPiA+ID4gPiArCj4gPiA+ ID4gPiArwqDCoMKgwqDCoMKgwqByZXQgPSBpZGFfc2ltcGxlX2dldCgmYWllX21pbm9yX2lkYSwg MCwgQUlFX0RFVl9NQVgsIEdGUF9LRVJORUwpOwo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgaWYg KHJldCA8IDApCj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZ290byBm cmVlX2RldjsKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoGRldi0+ZGV2dCA9IE1LREVWKE1BSk9S KGFpZV9tYWpvciksIHJldCk7Cj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqByZXQgPSBpZGFfc2lt cGxlX2dldCgmYWllX2RldmljZV9pZGEsIDAsIDAsIEdGUF9LRVJORUwpOwo+ID4gPiA+ID4gK8Kg wqDCoMKgwqDCoMKgaWYgKHJldCA8IDApCj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgZ290byBmcmVlX21pbm9yX2lkYTsKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoGRl di0+aWQgPSByZXQ7Cj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqBkZXZfc2V0X25hbWUoJmFkZXYt PmRldiwgImFpZSVkIiwgZGV2LT5pZCk7Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiArwqDCoMKgwqDC oMKgwqBjZGV2X2luaXQoJmFkZXYtPmNkZXYsICZhaWVfZGV2aWNlX2ZvcHMpOwo+ID4gPiA+ID4g K8KgwqDCoMKgwqDCoMKgYWRldi0+Y2Rldi5vd25lciA9IFRISVNfTU9EVUxFOwo+ID4gPiA+ID4g K8KgwqDCoMKgwqDCoMKgcmV0ID0gY2Rldl9hZGQoJmFkZXYtPmNkZXYsIGRldi0+ZGV2dCwgMSk7 Cj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqBpZiAocmV0KQo+ID4gPiA+ID4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoGdvdG8gZnJlZV9pZGE7Cj4gPiA+ID4gPiArwqDCoMKgwqDCoMKg wqAvKiBXZSBjYW4gbm93IHJlbHkgb24gdGhlIHJlbGVhc2UgZnVuY3Rpb24gZm9yIGNsZWFudXAg Ki8KPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoGRldi0+cmVsZWFzZSA9IHhpbGlueF9haV9lbmdp bmVfcmVsZWFzZV9kZXZpY2U7Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqBy ZXQgPSBkZXZpY2VfYWRkKGRldik7Cj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqBpZiAocmV0KSB7 Cj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZGV2X2VycigmcGRldi0+ ZGV2LCAiZGV2aWNlX2FkZCBmYWlsZWQ6ICVkXG4iLCByZXQpOwo+ID4gPiA+ID4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoHB1dF9kZXZpY2UoZGV2KTsKPiA+ID4gPiA+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gcmV0Owo+ID4gPiA+ID4gK8KgwqDCoMKgwqDC oMKgfQo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgb2ZfeGlsaW54X2FpX2Vu Z2luZV9wYXJ0X3Byb2JlKGFkZXYpOwo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgZGV2X2luZm8o JnBkZXYtPmRldiwgIlhpbGlueCBBSSBFbmdpbmUgZGV2aWNlKGNvbHM9JXUpIHByb2JlZFxuIiwK PiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYWRldi0+Y29sc19yZXMu dG90YWwpOwo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgcmV0dXJuIDA7Cj4gPiA+ID4gPiArCj4g PiA+ID4gPiArZnJlZV9pZGE6Cj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqBpZGFfc2ltcGxlX3Jl bW92ZSgmYWllX2RldmljZV9pZGEsIGRldi0+aWQpOwo+ID4gPiA+ID4gK2ZyZWVfbWlub3JfaWRh Ogo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgaWRhX3NpbXBsZV9yZW1vdmUoJmFpZV9taW5vcl9p ZGEsIE1JTk9SKGRldi0+ZGV2dCkpOwo+ID4gPiA+ID4gK2ZyZWVfZGV2Ogo+ID4gPiA+ID4gK8Kg wqDCoMKgwqDCoMKgcHV0X2RldmljZShkZXYpOwo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gK8KgwqDC oMKgwqDCoMKgcmV0dXJuIHJldDsKPiA+ID4gPiA+ICt9Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiAr c3RhdGljIGludCB4aWxpbnhfYWlfZW5naW5lX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNl ICpwZGV2KQo+ID4gPiA+ID4gK3sKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBhaWVf ZGV2aWNlICphZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Cj4gPiA+ID4gPiArwqDC oMKgwqDCoMKgwqBzdHJ1Y3QgYWllX3BhcnRpdGlvbiAqYXBhcnQ7Cj4gPiA+ID4gPiArCj4gPiA+ ID4gPiArwqDCoMKgwqDCoMKgwqBsaXN0X2Zvcl9lYWNoX2VudHJ5KGFwYXJ0LCAmYWRldi0+cGFy dGl0aW9ucywgbm9kZSkKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBh aWVfcGFydF9yZW1vdmUoYXBhcnQpOwo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gK8KgwqDCoMKgwqDC oMKgZGV2aWNlX2RlbCgmYWRldi0+ZGV2KTsKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoHB1dF9k ZXZpY2UoJmFkZXYtPmRldik7Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqBy ZXR1cm4gMDsKPiA+ID4gPiA+ICt9Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiArc3RhdGljIGNvbnN0 IHN0cnVjdCBvZl9kZXZpY2VfaWQgeGlsaW54X2FpX2VuZ2luZV9vZl9tYXRjaFtdID0gewo+ID4g PiA+ID4gK8KgwqDCoMKgwqDCoMKgeyAuY29tcGF0aWJsZSA9ICJ4bG54LGFpLWVuZ2luZS12MS4w IiwgfSwKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoHsgLyogZW5kIG9mIHRhYmxlICovIH0sCj4g PiA+ID4gPiArfTsKPiA+ID4gPiA+ICtNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCB4aWxpbnhfYWlf ZW5naW5lX29mX21hdGNoKTsKPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICtzdGF0aWMgc3RydWN0IHBs YXRmb3JtX2RyaXZlciB4aWxpbnhfYWlfZW5naW5lX2RyaXZlciA9IHsKPiA+ID4gPiA+ICvCoMKg wqDCoMKgwqDCoC5wcm9iZcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoD0geGls aW54X2FpX2VuZ2luZV9wcm9iZSwKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoC5yZW1vdmXCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgPSB4aWxpbnhfYWlfZW5naW5lX3JlbW92ZSwK PiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoC5kcml2ZXLCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgPSB7Cj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgLm5h bWXCoMKgwqDCoMKgwqDCoMKgwqDCoMKgPSAieGlsaW54LWFpLWVuZ2luZSIsCj4gPiA+ID4gPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgLm9mX21hdGNoX3RhYmxlwqA9IHhpbGlueF9h aV9lbmdpbmVfb2ZfbWF0Y2gsCj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqB9LAo+ID4gPiA+ID4g K307Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiArc3RhdGljIGludCBfX2luaXQgeGlsaW54X2FpX2Vu Z2luZV9pbml0KHZvaWQpCj4gPiA+ID4gPiArewo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgaW50 IHJldDsKPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoHJldCA9IGFsbG9jX2No cmRldl9yZWdpb24oJmFpZV9tYWpvciwgMCwgQUlFX0RFVl9NQVgsICJhaWUiKTsKPiA+ID4gPiA+ ICvCoMKgwqDCoMKgwqDCoGlmIChyZXQgPCAwKSB7Cj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgcHJfZXJyKCJhaWU6IGZhaWxlZCB0byBhbGxvY2F0ZSBhaWUgcmVnaW9u XG4iKTsKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gcmV0 Owo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgfQo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gK8KgwqDC oMKgwqDCoMKgYWllX2NsYXNzID0gY2xhc3NfY3JlYXRlKFRISVNfTU9EVUxFLCAiYWllIik7Cj4g PiA+ID4gPiArwqDCoMKgwqDCoMKgwqBpZiAoSVNfRVJSKGFpZV9jbGFzcykpIHsKPiA+ID4gPiA+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBwcl9lcnIoImZhaWxlZCB0byBjcmVhdGUg YWllIGNsYXNzXG4iKTsKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB1 bnJlZ2lzdGVyX2NocmRldl9yZWdpb24oYWllX21ham9yLCBBSUVfREVWX01BWCk7Cj4gPiA+ID4g PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIFBUUl9FUlIoYWllX2NsYXNz KTsKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoH0KPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICvCoMKg wqDCoMKgwqDCoHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmeGlsaW54X2FpX2VuZ2luZV9kcml2 ZXIpOwo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgcmV0dXJuIDA7Cj4gPiA+ ID4gPiArfQo+ID4gPiA+ID4gK3Bvc3Rjb3JlX2luaXRjYWxsKHhpbGlueF9haV9lbmdpbmVfaW5p dCk7Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiArc3RhdGljIHZvaWQgX19leGl0IHhpbGlueF9haV9l bmdpbmVfZXhpdCh2b2lkKQo+ID4gPiA+ID4gK3sKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoHBs YXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZ4aWxpbnhfYWlfZW5naW5lX2RyaXZlcik7Cj4gPiA+ ID4gPiArwqDCoMKgwqDCoMKgwqBjbGFzc19kZXN0cm95KGFpZV9jbGFzcyk7Cj4gPiA+ID4gPiAr wqDCoMKgwqDCoMKgwqB1bnJlZ2lzdGVyX2NocmRldl9yZWdpb24oYWllX21ham9yLCBBSUVfREVW X01BWCk7Cj4gPiA+ID4gPiArfQo+ID4gPiA+ID4gK21vZHVsZV9leGl0KHhpbGlueF9haV9lbmdp bmVfZXhpdCk7Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiArTU9EVUxFX0FVVEhPUigiWGlsaW54LCBJ bmMuIik7Cj4gPiA+ID4gPiArTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwo+ID4gPiA+ID4gZGlm ZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy94aWxpbngtYWktZW5naW5lL2FpLWVuZ2luZS1pbnRlcm5h bC5oCj4gPiA+ID4gPiBiL2RyaXZlcnMvbWlzYy94aWxpbngtYWktZW5naW5lL2FpLWVuZ2luZS1p bnRlcm5hbC5oCj4gPiA+ID4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+ID4gPiA+ID4gaW5kZXgg MDAwMDAwMC4uNmE2OTk0Ngo+ID4gPiA+ID4gLS0tIC9kZXYvbnVsbAo+ID4gPiA+ID4gKysrIGIv ZHJpdmVycy9taXNjL3hpbGlueC1haS1lbmdpbmUvYWktZW5naW5lLWludGVybmFsLmgKPiA+ID4g PiA+IEBAIC0wLDAgKzEsMjI2IEBACj4gPiA+ID4gPiArLyogU1BEWC1MaWNlbnNlLUlkZW50aWZp ZXI6IEdQTC0yLjAtb25seSAqLwo+ID4gPiA+ID4gKy8qCj4gPiA+ID4gPiArICogWGlsaW54IEFJ IEVuZ2luZSBkcml2ZXIgaW50ZXJuYWwgaGVhZGVyCj4gPiA+ID4gPiArICoKPiA+ID4gPiA+ICsg KiBDb3B5cmlnaHQgKEMpIDIwMjAgWGlsaW54LCBJbmMuCj4gPiA+ID4gPiArICovCj4gPiA+ID4g PiArCj4gPiA+ID4gPiArI2lmbmRlZiBBSUVfSU5URVJOQUxfSAo+ID4gPiA+ID4gKyNkZWZpbmUg QUlFX0lOVEVSTkFMX0gKPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICsjaW5jbHVkZSA8bGludXgvYml0 ZmllbGQuaD4KPiA+ID4gPiA+ICsjaW5jbHVkZSA8bGludXgvYml0cy5oPgo+ID4gPiA+ID4gKyNp bmNsdWRlIDxsaW51eC9jZGV2Lmg+Cj4gPiA+ID4gPiArI2luY2x1ZGUgPGxpbnV4L2RldmljZS5o Pgo+ID4gPiA+ID4gKyNpbmNsdWRlIDxsaW51eC9pby5oPgo+ID4gPiA+ID4gKyNpbmNsdWRlIDxs aW51eC9saXN0Lmg+Cj4gPiA+ID4gPiArI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+Cj4gPiA+ID4g PiArI2luY2x1ZGUgPGxpbnV4L29mLmg+Cj4gPiA+ID4gPiArI2luY2x1ZGUgPGxpbnV4L29mX2Rl dmljZS5oPgo+ID4gPiA+ID4gKyNpbmNsdWRlIDx1YXBpL2xpbnV4L3hsbngtYWktZW5naW5lLmg+ Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiArLyoKPiA+ID4gPiA+ICsgKiBNYWNyb3MgZm9yIEFJIGVu Z2luZSB0aWxlIHR5cGUgYml0bWFza3MKPiA+ID4gPiA+ICsgKi8KPiA+ID4gPiA+ICsjZGVmaW5l IEFJRV9USUxFX1RZUEVfVElMRcKgwqDCoMKgwqBCSVQoMCkKPiA+ID4gPiA+ICsjZGVmaW5lIEFJ RV9USUxFX1RZUEVfU0hJTVBMwqDCoMKgQklUKDEpCj4gPiA+ID4gPiArLyogU0hJTSBOT0MgdGls ZSBpbmNsdWRlcyBTSElNIFBMIGFuZCBTSElNIE5PQyBtb2R1bGVzICovCj4gPiA+ID4gPiArI2Rl ZmluZSBBSUVfVElMRV9UWVBFX1NISU1OT0PCoMKgQklUKDIpCj4gPiA+ID4gPiArCj4gPiA+ID4g PiArLyoKPiA+ID4gPiA+ICsgKiBNYWNyb3MgZm9yIGF0dHJpYnV0ZSBwcm9wZXJ0eSBvZiBBSSBl bmdpbmUgcmVnaXN0ZXJzIGFjY2Vzc2VkIGJ5IGtlcm5lbAo+ID4gPiA+ID4gKyAqIDAgLSA3IGJp dHM6IHRpbGUgdHlwZSBiaXRzCj4gPiA+ID4gPiArICogOCAtIDE1IGJpdHM6IHBlcm1pc3Npb24g Yml0cy4gSWYgaXQgaXMgMSwgaXQgYWxsb3dzIHdyaXRlIGZyb20gdXNlcnNwYWNlCj4gPiA+ID4g PiArICovCj4gPiA+ID4gPiArI2RlZmluZSBBSUVfUkVHU19BVFRSX1RJTEVfVFlQRV9TSElGVMKg wqAwVQo+ID4gPiA+ID4gKyNkZWZpbmUgQUlFX1JFR1NfQVRUUl9QRVJNX1NISUZUwqDCoMKgwqDC oMKgwqA4VQo+ID4gPiA+ID4gKyNkZWZpbmUgQUlFX1JFR1NfQVRUUl9USUxFX1RZUEVfTUFTS8Kg wqDCoEdFTk1BU0soQUlFX1JFR1NfQVRUUl9QRVJNX1NISUZUIC0gMSwKPiA+ID4gPiA+IFwKPiA+ ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgQUlFX1JFR1NfQVRU Ul9USUxFX1RZUEVfU0hJRlQpCj4gPiA+ID4gPiArI2RlZmluZSBBSUVfUkVHU19BVFRSX1BFUk1f TUFTS8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgR0VOTUFTSygxNSwgXAo+ID4gPiA+ ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKg77+977+9wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgQUlFX1JFR1NfQVRU Ul9QRVJNX1NISUZUKQo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gKy8qKgo+ID4gPiA+ID4gKyAqIHN0 cnVjdCBhaWVfdGlsZV9yZWdzIC0gY29udGlndW91cyByYW5nZSBvZiBBSSBlbmdpbmUgcmVnaXN0 ZXIKPiA+ID4gPiA+ICsgKsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIHdpdGhpbiBhbiBBSSBlbmdpbmUgdGlsZQo+ID4gPiA+ID4gKyAqIEBzb2ZmOiBzdGFydCBv ZmZzZXQgb2YgdGhlIHJhbmdlCj4gPiA+ID4gPiArICogQGVvZmY6IGVuZCBvZmZzZXQgb2YgdGhl IHJhbmdlCj4gPiA+ID4gPiArICogQGF0dHJpYnV0ZTogcmVnaXN0ZXJzIGF0dHJpYnV0ZS4gSXQg dXNlcyBBSUVfUkVHU19BVFRSXyogbWFjcm9zIGRlZmluZWQKPiA+ID4gPiA+ICsgKsKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgYWJvdmUuCj4gPiA+ID4gPiArICovCj4gPiA+ID4gPiArc3RydWN0IGFp ZV90aWxlX3JlZ3Mgewo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgc2l6ZV90IHNvZmY7Cj4gPiA+ ID4gPiArwqDCoMKgwqDCoMKgwqBzaXplX3QgZW9mZjsKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDC oHUzMiBhdHRyaWJ1dGU7Cj4gPiA+ID4gPiArfTsKPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICtzdHJ1 Y3QgYWllX2RldmljZTsKPiA+ID4gPiA+ICtzdHJ1Y3QgYWllX3BhcnRpdGlvbjsKPiA+ID4gPiA+ ICsKPiA+ID4gPiA+ICsvKioKPiA+ID4gPiA+ICsgKiBzdHJ1Y3QgYWllX3RpbGVfb3BlcmF0aW9u cyAtIEFJIGVuZ2luZSBkZXZpY2Ugb3BlcmF0aW9ucwo+ID4gPiA+ID4gKyAqIEBnZXRfdGlsZV90 eXBlOiBnZXQgdHlwZSBvZiB0aWxlIGJhc2VkIG9uIHRpbGUgb3BlcmF0aW9uCj4gPiA+ID4gPiAr ICoKPiA+ID4gPiA+ICsgKiBEaWZmZXJlbnQgQUkgZW5naW5lIGRldmljZSB2ZXJzaW9uIGhhcyBp dHMgb3duIGRldmljZQo+ID4gPiA+ID4gKyAqIG9wZXJhdGlvbi4KPiA+ID4gPiA+ICsgKi8KPiA+ ID4gPiA+ICtzdHJ1Y3QgYWllX3RpbGVfb3BlcmF0aW9ucyB7Cj4gPiA+ID4gPiArwqDCoMKgwqDC oMKgwqB1MzIgKCpnZXRfdGlsZV90eXBlKShzdHJ1Y3QgYWllX2xvY2F0aW9uICpsb2MpOwo+ID4g PiA+ID4gK307Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiArLyoqCj4gPiA+ID4gPiArICogc3RydWN0 IGFpZV9yZXNvdXJjZSAtIEFJIGVuZ2luZSByZXNvdXJjZSBzdHJ1Y3R1cmUKPiA+ID4gPiA+ICsg KiBAYml0bWFwOiByZXNvdXJjZSBiaXRtYXAKPiA+ID4gPiA+ICsgKiBAdG90YWw6IHRvdGFsIG51 bWJlciBvZiByZXNvdXJjZQo+ID4gPiA+ID4gKyAqLwo+ID4gPiA+ID4gK3N0cnVjdCBhaWVfcmVz b3VyY2Ugewo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgdW5zaWduZWQgbG9uZyAqYml0bWFwOwo+ ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgdTMyIHRvdGFsOwo+ID4gPiA+ID4gK307Cj4gPiA+ID4g PiArCj4gPiA+ID4gPiArLyoqCj4gPiA+ID4gPiArICogc3RydWN0IGFpZV9kZXZpY2UgLSBBSSBl bmdpbmUgZGV2aWNlIHN0cnVjdHVyZQo+ID4gPiA+ID4gKyAqIEBwYXJ0aXRpb25zOiBsaXN0IG9m IHBhcnRpdGlvbnMgcmVxdWVzdGVkCj4gPiA+ID4gPiArICogQGNkZXY6IGNkZXYgZm9yIHRoZSBB SSBlbmdpbmUKPiA+ID4gPiA+ICsgKiBAZGV2OiBkZXZpY2UgZm9yIHRoZSBBSSBlbmdpbmUgZGV2 aWNlCj4gPiA+ID4gPiArICogQG1sb2NrOiBwcm90ZWN0aW9uIGZvciBBSSBlbmdpbmUgZGV2aWNl IG9wZXJhdGlvbnMKPiA+ID4gPiA+ICsgKiBAYmFzZTogQUkgZW5naW5lIGRldmljZSBiYXNlIHZp cnR1YWwgYWRkcmVzcwo+ID4gPiA+ID4gKyAqIEByZXM6IG1lbW9yeSByZXNvdXJjZSBvZiBBSSBl bmdpbmUgZGV2aWNlCj4gPiA+ID4gPiArICogQGtlcm5lbF9yZWdzOiBhcnJheSBvZiBrZXJuZWwg b25seSByZWdpc3RlcnMKPiA+ID4gPiA+ICsgKiBAb3BzOiB0aWxlIG9wZXJhdGlvbnMKPiA+ID4g PiA+ICsgKiBAc2l6ZTogc2l6ZSBvZiB0aGUgQUkgZW5naW5lIGFkZHJlc3Mgc3BhY2UKPiA+ID4g PiA+ICsgKiBAYXJyYXlfc2hpZnQ6IGFycmF5IGFkZHJlc3Mgc2hpZnQKPiA+ID4gPiA+ICsgKiBA Y29sX3NoaWZ0OiBjb2x1bW4gYWRkcmVzcyBzaGlmdAo+ID4gPiA+ID4gKyAqIEByb3dfc2hpZnQ6 IHJvdyBhZGRyZXNzIHNoaWZ0Cj4gPiA+ID4gPiArICogQGNvbHNfcmVzOiBBSSBlbmdpbmUgY29s dW1ucyByZXNvdXJjZXMgdG8gaW5kaWNhdGUKPiA+ID4gPiA+ICsgKsKgwqDCoMKgwqDCoMKgwqDC oMKgIHdoaWxlIGNvbHVtbnMgYXJlIG9jY3VwaWVkIGJ5IHBhcnRpdGlvbnMuCj4gPiA+ID4gPiAr ICogQG51bV9rZXJuZWxfcmVnczogbnVtYmVyIG9mIGtlcm5lbCBvbmx5IHJlZ2lzdGVycyByYW5n ZQo+ID4gPiA+ID4gKyAqIEB2ZXJzaW9uOiBBSSBlbmdpbmUgZGV2aWNlIHZlcnNpb24KPiA+ID4g PiA+ICsgKi8KPiA+ID4gPiA+ICtzdHJ1Y3QgYWllX2RldmljZSB7Cj4gPiA+ID4gPiArwqDCoMKg wqDCoMKgwqBzdHJ1Y3QgbGlzdF9oZWFkIHBhcnRpdGlvbnM7Cj4gPiA+ID4gPiArwqDCoMKgwqDC oMKgwqBzdHJ1Y3QgY2RldiBjZGV2Owo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGRl dmljZSBkZXY7Cj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgbXV0ZXggbWxvY2s7IC8q IHByb3RlY3Rpb24gZm9yIEFJIGVuZ2luZSBwYXJ0aXRpb25zICovCj4gPiA+ID4gPiArwqDCoMKg wqDCoMKgwqB2b2lkIF9faW9tZW0gKmJhc2U7Cj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqBzdHJ1 Y3QgcmVzb3VyY2UgKnJlczsKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoGNvbnN0IHN0cnVjdCBh aWVfdGlsZV9yZWdzICprZXJuZWxfcmVnczsKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoGNvbnN0 IHN0cnVjdCBhaWVfdGlsZV9vcGVyYXRpb25zICpvcHM7Cj4gPiA+ID4gPiArwqDCoMKgwqDCoMKg wqBzaXplX3Qgc2l6ZTsKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBhaWVfcmVzb3Vy Y2UgY29sc19yZXM7Cj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqB1MzIgYXJyYXlfc2hpZnQ7Cj4g PiA+ID4gPiArwqDCoMKgwqDCoMKgwqB1MzIgY29sX3NoaWZ0Owo+ID4gPiA+ID4gK8KgwqDCoMKg wqDCoMKgdTMyIHJvd19zaGlmdDsKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoHUzMiBudW1fa2Vy bmVsX3JlZ3M7Cj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqBpbnQgdmVyc2lvbjsKPiA+ID4gPiA+ ICt9Owo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gKy8qKgo+ID4gPiA+ID4gKyAqIHN0cnVjdCBhaWVf cGFydGl0aW9uIC0gQUkgZW5naW5lIHBhcnRpdGlvbiBzdHJ1Y3R1cmUKPiA+ID4gPiA+ICsgKiBA bm9kZTogbGlzdCBub2RlCj4gPiA+ID4gPiArICogQGFkZXY6IHBvaW50ZXIgdG8gQUkgZGV2aWNl IGluc3RhbmNlCj4gPiA+ID4gPiArICogQHJhbmdlOiByYW5nZSBvZiBwYXJ0aXRpb24KPiA+ID4g PiA+ICsgKiBAbWxvY2s6IHByb3RlY3Rpb24gZm9yIEFJIGVuZ2luZSBwYXJ0aXRpb24gb3BlcmF0 aW9ucwo+ID4gPiA+ID4gKyAqIEBkZXY6IGRldmljZSBmb3IgdGhlIEFJIGVuZ2luZSBwYXJ0aXRp b24KPiA+ID4gPiA+ICsgKiBAcGFydGl0aW9uX2lkOiBwYXJ0aXRpb24gaWQuIFBhcnRpdGlvbiBJ RCBpcyB0aGUgaWRlbnRpZmllcgo+ID4gPiA+ID4gKyAqwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBvZiB0aGUgQUkgZW5naW5lIHBhcnRpdGlvbiBpbiB0aGUgc3lzdGVtLgo+ID4gPiA+ID4g KyAqIEBzdGF0dXM6IGluZGljYXRlIGlmIHRoZSBwYXJ0aXRpb24gaXMgaW4gdXNlCj4gPiA+ID4g PiArICovCj4gPiA+ID4gPiArc3RydWN0IGFpZV9wYXJ0aXRpb24gewo+ID4gPiA+ID4gK8KgwqDC oMKgwqDCoMKgc3RydWN0IGxpc3RfaGVhZCBub2RlOwo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKg c3RydWN0IGFpZV9kZXZpY2UgKmFkZXY7Cj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3Qg YWllX3JhbmdlIHJhbmdlOwo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IG11dGV4IG1s b2NrOyAvKiBwcm90ZWN0aW9uIGZvciBBSSBlbmdpbmUgcGFydGl0aW9uIG9wZXJhdGlvbnMKPiA+ ID4gPiA+ICovCj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgZGV2aWNlIGRldjsKPiA+ ID4gPiA+ICvCoMKgwqDCoMKgwqDCoHUzMiBwYXJ0aXRpb25faWQ7Cj4gPiA+ID4gPiArwqDCoMKg wqDCoMKgwqB1MzIgc3RhdHVzOwo+ID4gPiA+ID4gK307Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiAr ZXh0ZXJuIHN0cnVjdCBjbGFzcyAqYWllX2NsYXNzOwo+ID4gPiA+ID4gK2V4dGVybiBjb25zdCBz dHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGFpZV9wYXJ0X2ZvcHM7Cj4gPiA+ID4gPiArCj4gPiA+ID4g PiArI2RlZmluZSBjZGV2X3RvX2FpZWRldihpX2NkZXYpIGNvbnRhaW5lcl9vZigoaV9jZGV2KSwg c3RydWN0IGFpZV9kZXZpY2UsCj4gPiA+ID4gPiBjZGV2KQo+ID4gPiA+ID4gKyNkZWZpbmUgZGV2 X3RvX2FpZWRldihfZGV2KSBjb250YWluZXJfb2YoKF9kZXYpLCBzdHJ1Y3QgYWllX2RldmljZSwg ZGV2KQo+ID4gPiA+ID4gKyNkZWZpbmUgZGV2X3RvX2FpZXBhcnQoX2RldikgY29udGFpbmVyX29m KChfZGV2KSwgc3RydWN0IGFpZV9wYXJ0aXRpb24sIGRldikKPiA+ID4gPiA+ICsKPiA+ID4gPiA+ ICsjZGVmaW5lIGFpZV9jb2xfbWFzayhhZGV2KSAoeyBcCj4gPiA+ID4gPiArwqDCoMKgwqDCoMKg wqBzdHJ1Y3QgYWllX2RldmljZSAqX2FkZXYgPSAoYWRldik7IFwKPiA+ID4gPiA+ICvCoMKgwqDC oMKgwqDCoEdFTk1BU0tfVUxMKF9hZGV2LT5hcnJheV9zaGlmdCAtIDEsIF9hZGV2LT5jb2xfc2hp ZnQpO8KgIFwKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoH0pCj4gPiA+ID4gPiArCj4gPiA+ID4g PiArI2RlZmluZSBhaWVfcm93X21hc2soYWRldikgKHsgXAo+ID4gPiA+ID4gK8KgwqDCoMKgwqDC oMKgc3RydWN0IGFpZV9kZXZpY2UgKl9hZGV2ID0gKGFkZXYpOyBcCj4gPiA+ID4gPiArwqDCoMKg wqDCoMKgwqBHRU5NQVNLX1VMTChfYWRldi0+Y29sX3NoaWZ0IC0gMSwgX2FkZXYtPnJvd19zaGlm dCk7wqAgXAo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgfSkKPiA+ID4gPiA+ICsKPiA+ID4gPiA+ ICsjZGVmaW5lIGFpZV90aWxlX3JlZ19tYXNrKGFkZXYpICh7IFwKPiA+ID4gPiA+ICvCoMKgwqDC oMKgwqDCoHN0cnVjdCBhaWVfZGV2aWNlICpfYWRldiA9IChhZGV2KTsgXAo+ID4gPiA+ID4gK8Kg wqDCoMKgwqDCoMKgR0VOTUFTS19VTEwoX2FkZXYtPnJvd19zaGlmdCAtIDEsIDApO8KgIFwKPiA+ ID4gPiA+ICvCoMKgwqDCoMKgwqDCoH0pCj4gPiA+ID4gPiArCj4gPiA+ID4gPiArLyoKPiA+ID4g PiA+ICsgKiBOZWVkIHRvIGRlZmluZSBmaWVsZCBnZXQsIGFzIEFJIGVuZ2luZSBzaGlmdCBtYXNr IGlzIG5vdCBjb25zdGFudC4KPiA+ID4gPiA+ICsgKiBDYW5ub3QgdXNlIEZJRUxEX0dFVCgpCj4g PiA+ID4gPiArICovCj4gPiA+ID4gPiArI2RlZmluZSBhaWVfdGlsZV9yZWdfZmllbGRfZ2V0KG1h c2ssIHNoaWZ0LCByZWdvZmYpICggXAo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgKChyZWdvZmYp ICYgKG1hc2spKSA+PiAoc2hpZnQpKQo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gKyNkZWZpbmUgYWll X2NhbF90aWxlX3JlZyhhZGV2LCByZWdvZmYpICggXAo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKg YWllX3RpbGVfcmVnX2ZpZWxkX2dldChhaWVfdGlsZV9yZWdfbWFzayhhZGV2KSwgMCwgcmVnb2Zm KSkKPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICsvKioKPiA+ID4gPiA+ICsgKiBhaWVfY2FsX3JlZ29m ZigpIC0gY2FsY3VsYXRlIHJlZ2lzdGVyIG9mZnNldCB0byB0aGUgd2hvbGUgQUkgZW5naW5lCj4g PiA+ID4gPiArICrCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZGV2aWNlIHN0 YXJ0IGFkZHJlc3MKPiA+ID4gPiA+ICsgKiBAYWRldjogQUkgZW5naW5lIGRldmljZQo+ID4gPiA+ ID4gKyAqIEBsb2M6IEFJIGVuZ2luZSB0aWxlIGxvY2F0aW9uCj4gPiA+ID4gPiArICogQHJlZ29m Zl9pbnRpbGU6IHJlZ2lzdGVyIG9mZnNldCB3aXRoaW4gYSB0aWxlCj4gPiA+ID4gPiArICogQHJl dHVybjogcmVnaXN0ZXIgb2Zmc2V0IHRvIHRoZSB3aG9sZSBBSSBlbmdpbmUgZGV2aWNlIHN0YXJ0 IGFkZHJlc3MKPiA+ID4gPiA+ICsgKi8KPiA+ID4gPiA+ICtzdGF0aWMgaW5saW5lIHUzMiBhaWVf Y2FsX3JlZ29mZihzdHJ1Y3QgYWllX2RldmljZSAqYWRldiwKPiA+ID4gPiA+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1 Y3QgYWllX2xvY2F0aW9uIGxvYywgdTMyIHJlZ29mZl9pbnRpbGUpCj4gPiA+ID4gPiArewo+ID4g PiA+ID4gK8KgwqDCoMKgwqDCoMKgcmV0dXJuIHJlZ29mZl9pbnRpbGUgKyAobG9jLmNvbCA8PCBh ZGV2LT5jb2xfc2hpZnQpICsKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAo bG9jLnJvdyA8PCBhZGV2LT5yb3dfc2hpZnQpOwo+ID4gPiA+ID4gK30KPiA+ID4gPiA+ICsKPiA+ ID4gPiA+ICsvKioKPiA+ID4gPiA+ICsgKiBhaWVfdmFsaWRhdGVfbG9jYXRpb24oKSAtIHZhbGlk YXRlIHRpbGUgbG9jYXRpb24gd2l0aGluIGFuIEFJIGVuZ2luZQo+ID4gPiA+ID4gKyAqwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcGFydGl0aW9uCj4g PiA+ID4gPiArICogQGFwYXJ0OiBBSSBlbmdpbmUgcGFydGl0aW9uCj4gPiA+ID4gPiArICogQGxv YzogQUkgZW5naW5lIHRpbGUgbG9jYXRpb24KPiA+ID4gPiA+ICsgKiBAcmV0dXJuOiByZXR1cm4g MCBpZiBpdCBpcyB2YWxpZCwgbmVnYXRpdmUgdmFsdWUgZm9yIGVycm9ycy4KPiA+ID4gPiA+ICsg Kgo+ID4gPiA+ID4gKyAqIFRoaXMgZnVuY3Rpb24gY2hlY2tzIGlmIHRoZSBBSSBlbmdpbmUgbG9j YXRpb24gaXMgd2l0aGluIHRoZSBBSSBlbmdpbmUKPiA+ID4gPiA+ICsgKiBwYXJ0aXRpb24uCj4g PiA+ID4gPiArICovCj4gPiA+ID4gPiArc3RhdGljIGlubGluZSBpbnQgYWllX3ZhbGlkYXRlX2xv Y2F0aW9uKHN0cnVjdCBhaWVfcGFydGl0aW9uICphcGFydCwKPiA+ID4gPiA+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqBzdHJ1Y3QgYWllX2xvY2F0aW9uIGxvYykKPiA+ID4gPiA+ICt7Cj4gPiA+ID4g PiArwqDCoMKgwqDCoMKgwqBpZiAobG9jLmNvbCA8IGFwYXJ0LT5yYW5nZS5zdGFydC5jb2wgfHwK PiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoCBsb2MuY29sID49IGFwYXJ0LT5yYW5nZS5z dGFydC5jb2wgKyBhcGFydC0+cmFuZ2Uuc2l6ZS5jb2wgfHwKPiA+ID4gPiA+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoCBsb2Mucm93IDwgYXBhcnQtPnJhbmdlLnN0YXJ0LnJvdyB8fAo+ID4gPiA+ID4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgIGxvYy5yb3cgPj0gYXBhcnQtPnJhbmdlLnN0YXJ0LnJvdyAr IGFwYXJ0LT5yYW5nZS5zaXplLnJvdykKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqByZXR1cm4gLUVJTlZBTDsKPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICvCoMKgwqDCoMKg wqDCoHJldHVybiAwOwo+ID4gPiA+ID4gK30KPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICtpbnQgYWll X3Jlc291cmNlX2luaXRpYWxpemUoc3RydWN0IGFpZV9yZXNvdXJjZSAqcmVzLCBpbnQgY291bnQp Owo+ID4gPiA+ID4gK3ZvaWQgYWllX3Jlc291cmNlX3VuaW5pdGlhbGl6ZShzdHJ1Y3QgYWllX3Jl c291cmNlICpyZXMpOwo+ID4gPiA+ID4gK2ludCBhaWVfcmVzb3VyY2VfY2hlY2tfcmVnaW9uKHN0 cnVjdCBhaWVfcmVzb3VyY2UgKnJlcywgdTMyIHN0YXJ0LAo+ID4gPiA+ID4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHUzMiBjb3VudCk7 Cj4gPiA+ID4gPiAraW50IGFpZV9yZXNvdXJjZV9nZXRfcmVnaW9uKHN0cnVjdCBhaWVfcmVzb3Vy Y2UgKnJlcywgdTMyIHN0YXJ0LAo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdTMyIGNvdW50KTsKPiA+ID4gPiA+ICt2b2lkIGFp ZV9yZXNvdXJjZV9wdXRfcmVnaW9uKHN0cnVjdCBhaWVfcmVzb3VyY2UgKnJlcywgaW50IHN0YXJ0 LCB1MzIgY291bnQpOwo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gK2NvbnN0IHN0cnVjdCBmaWxlX29w ZXJhdGlvbnMgKmFpZV9wYXJ0X2dldF9mb3BzKHZvaWQpOwo+ID4gPiA+ID4gK3U4IGFpZV9wYXJ0 X2luX3VzZShzdHJ1Y3QgYWllX3BhcnRpdGlvbiAqYXBhcnQpOwo+ID4gPiA+ID4gK3N0cnVjdCBh aWVfcGFydGl0aW9uICphaWVfZ2V0X3BhcnRpdGlvbl9mcm9tX2lkKHN0cnVjdCBhaWVfZGV2aWNl ICphZGV2LAo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB1 MzIgcGFydGl0aW9uX2lkKTsKPiA+ID4gPiA+ICtzdHJ1Y3QgYWllX3BhcnRpdGlvbiAqYWllX3Jl cXVlc3RfcGFydGl0aW9uKHN0cnVjdCBhaWVfZGV2aWNlICphZGV2LAo+ID4gPiA+ID4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgYWllX3BhcnRpdGlvbl9yZXEgKnJlcSk7Cj4g PiA+ID4gPiArc3RydWN0IGFpZV9wYXJ0aXRpb24gKm9mX2FpZV9wYXJ0X3Byb2JlKHN0cnVjdCBh aWVfZGV2aWNlICphZGV2LAo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHN0cnVjdCBk ZXZpY2Vfbm9kZSAqbmMpOwo+ID4gPiA+ID4gK3ZvaWQgYWllX3BhcnRfcmVtb3ZlKHN0cnVjdCBh aWVfcGFydGl0aW9uICphcGFydCk7Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiAraW50IGFpZV9kZXZp Y2VfaW5pdChzdHJ1Y3QgYWllX2RldmljZSAqYWRldik7Cj4gPiA+ID4gPiArI2VuZGlmIC8qIEFJ RV9JTlRFUk5BTF9IICovCj4gPiA+ID4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNjL3hpbGlu eC1haS1lbmdpbmUvYWktZW5naW5lLXBhcnQuYwo+ID4gPiA+ID4gYi9kcml2ZXJzL21pc2MveGls aW54LWFpLWVuZ2luZS9haS1lbmdpbmUtcGFydC5jCj4gPiA+ID4gPiBuZXcgZmlsZSBtb2RlIDEw MDY0NAo+ID4gPiA+ID4gaW5kZXggMDAwMDAwMC4uZmM4ZjlmNQo+ID4gPiA+ID4gLS0tIC9kZXYv bnVsbAo+ID4gPiA+ID4gKysrIGIvZHJpdmVycy9taXNjL3hpbGlueC1haS1lbmdpbmUvYWktZW5n aW5lLXBhcnQuYwo+ID4gPiA+ID4gQEAgLTAsMCArMSw0OTggQEAKPiA+ID4gPiA+ICsvLyBTUERY LUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAo+ID4gPiA+ID4gKy8qCj4gPiA+ID4gPiArICog WGlsaW54IEFJIEVuZ2luZSBwYXJ0aXRpb24gZHJpdmVyCj4gPiA+ID4gPiArICoKPiA+ID4gPiA+ ICsgKiBDb3B5cmlnaHQgKEMpIDIwMjAgWGlsaW54LCBJbmMuCj4gPiA+ID4gPiArICovCj4gPiA+ ID4gPiArCj4gPiA+ID4gPiArI2luY2x1ZGUgPGxpbnV4L2NkZXYuaD4KPiA+ID4gPiA+ICsjaW5j bHVkZSA8bGludXgvZGVsYXkuaD4KPiA+ID4gPiA+ICsjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+ Cj4gPiA+ID4gPiArI2luY2x1ZGUgPGxpbnV4L2ZzLmg+Cj4gPiA+ID4gPiArI2luY2x1ZGUgPGxp bnV4L2tlcm5lbC5oPgo+ID4gPiA+ID4gKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+Cj4gPiA+ID4g PiArI2luY2x1ZGUgPGxpbnV4L21tLmg+Cj4gPiA+ID4gPiArI2luY2x1ZGUgPGxpbnV4L21tYW4u aD4KPiA+ID4gPiA+ICsjaW5jbHVkZSA8bGludXgvbW11X2NvbnRleHQuaD4KPiA+ID4gPiA+ICsj aW5jbHVkZSA8bGludXgvbXV0ZXguaD4KPiA+ID4gPiA+ICsjaW5jbHVkZSA8bGludXgvb2YuaD4K PiA+ID4gPiA+ICsjaW5jbHVkZSA8bGludXgvb2ZfZGV2aWNlLmg+Cj4gPiA+ID4gPiArI2luY2x1 ZGUgPGxpbnV4L3NsYWIuaD4KPiA+ID4gPiA+ICsjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgo+ ID4gPiA+ID4gKyNpbmNsdWRlIDxsaW51eC91aW8uaD4KPiA+ID4gPiA+ICsjaW5jbHVkZSA8dWFw aS9saW51eC94bG54LWFpLWVuZ2luZS5oPgo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gKyNpbmNsdWRl ICJhaS1lbmdpbmUtaW50ZXJuYWwuaCIKPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICsvKioKPiA+ID4g PiA+ICsgKiBhaWVfY2FsX2xvYygpIC0gY2FsY3VsYXRlIHRpbGUgbG9jYXRpb24gZnJvbSByZWdp c3RlciBvZmZzZXQgdG8gdGhlIEFJCj4gPiA+ID4gPiArICrCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgZW5naW5lIGRldmljZQo+ID4gPiA+ID4gKyAqIEBhZGV2OiBBSSBlbmdpbmUgZGV2 aWNlCj4gPiA+ID4gPiArICogQGxvYzogbWVtb3J5IHBvaW50ZXIgdG8gcmVzdG9yZSByZXR1cm5p bmcgbG9jYXRpb24gaW5mb3JtYXRpb24KPiA+ID4gPiA+ICsgKiBAcmVnb2ZmOiB0aWxlIGludGVy bmFsIHJlZ2lzdGVyIG9mZnNldAo+ID4gPiA+ID4gKyAqCj4gPiA+ID4gPiArICogVGhpcyBmdW5j dGlvbiByZXR1cm5zIHRoZSB0aWxlIGxvY2F0aW9uLgo+ID4gPiA+ID4gKyAqLwo+ID4gPiA+ID4g K3N0YXRpYyB2b2lkIGFpZV9jYWxfbG9jKHN0cnVjdCBhaWVfZGV2aWNlICphZGV2LAo+ID4gPiA+ ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzdHJ1Y3Qg YWllX2xvY2F0aW9uICpsb2MsIHU2NCByZWdvZmYpCj4gPiA+ID4gPiArewo+ID4gPiA+ID4gK8Kg wqDCoMKgwqDCoMKgbG9jLT5jb2wgPSAodTMyKWFpZV90aWxlX3JlZ19maWVsZF9nZXQoYWllX2Nv bF9tYXNrKGFkZXYpLAo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBhZGV2LT5jb2xfc2hpZnQsIHJlZ29mZik7Cj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqBsb2Mt PnJvdyA9ICh1MzIpYWllX3RpbGVfcmVnX2ZpZWxkX2dldChhaWVfcm93X21hc2soYWRldiksCj4g PiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGFkZXYtPnJvd19zaGlm dCwgcmVnb2ZmKTsKPiA+ID4gPiA+ICt9Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiArLyoqCj4gPiA+ ID4gPiArICogYWllX3BhcnRfcmVnX3ZhbGlkYXRpb24oKSAtIHZhbGlkYXRlIEFJIGVuZ2luZSBw YXJ0aXRpb24gcmVnaXN0ZXIgYWNjZXNzCj4gPiA+ID4gPiArICogQGFwYXJ0OiBBSSBlbmdpbmUg cGFydGl0aW9uCj4gPiA+ID4gPiArICogQG9mZnNldDogQUkgZW5naW5lIHJlZ2lzdGVyIG9mZnNl dAo+ID4gPiA+ID4gKyAqIEBsZW46IGxlbiBvZiBkYXRhIHRvIHdyaXRlL3JlYWQKPiA+ID4gPiA+ ICsgKiBAaXNfd3JpdGU6IGlzIHRoZSBhY2Nlc3MgdG8gd3JpdGUgdG8gcmVnaXN0ZXIKPiA+ID4g PiA+ICsgKiBAcmV0dXJuOiAwIGZvciBzdWNjZXNzLCBvciBuZWdhdGl2ZSB2YWx1ZSBmb3IgZmFp bHVyZS4KPiA+ID4gPiA+ICsgKgo+ID4gPiA+ID4gKyAqIFRoaXMgZnVuY3Rpb24gdmFsaWRhdGUg aWYgdGhlIHJlZ2lzdGVyIHRvIGFjY2VzcyBpcyB3aXRoaW4gdGhlIEFJIGVuZ2luZQo+ID4gPiA+ ID4gKyAqIHBhcnRpdGlvbi4gSWYgaXQgaXMgd3JpdGUgYWNjZXNzLCBpZiB0aGUgcmVnaXN0ZXIg aXMgd3JpdGFibGUgYnkgdXNlci4KPiA+ID4gPiA+ICsgKi8KPiA+ID4gPiA+ICtzdGF0aWMgaW50 IGFpZV9wYXJ0X3JlZ192YWxpZGF0aW9uKHN0cnVjdCBhaWVfcGFydGl0aW9uICphcGFydCwgc2l6 ZV90Cj4gPiA+ID4gPiBvZmZzZXQsCj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHNpemVfdCBsZW4sIHU4 IGlzX3dyaXRlKQo+ID4gPiA+ID4gK3sKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBh aWVfZGV2aWNlICphZGV2Owo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgdTMyIHJlZ2VuZDMyLCB0 dHlwZTsKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoHU2NCByZWdvZmYsIHJlZ2VuZDY0Owo+ID4g PiA+ID4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGFpZV9sb2NhdGlvbiBsb2M7Cj4gPiA+ID4gPiAr wqDCoMKgwqDCoMKgwqB1bnNpZ25lZCBpbnQgaTsKPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICvCoMKg wqDCoMKgwqDCoGFkZXYgPSBhcGFydC0+YWRldjsKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoGlm IChvZmZzZXQgJSBzaXplb2YodTMyKSkgewo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoGRldl9lcnIoJmFwYXJ0LT5kZXYsCj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCJJbnZhbGlkIHJlZyBvZmYoMHglengpLCBu b3QgMzJiaXQgYWxpZ25lZC5cbiIsCj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoG9mZnNldCk7Cj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgcmV0dXJuIC1FSU5WQUw7Cj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqB9 Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqBpZiAobGVuICUgc2l6ZW9mKHUz MikpIHsKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkZXZfZXJyKCZh cGFydC0+ZGV2LCAiSW52YWxpZCByZWcgb3BlcmF0aW9uIGxlbiAlenUuXG4iLCBsZW4pOwo+ID4g PiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiAtRUlOVkFMOwo+ID4g PiA+ID4gK8KgwqDCoMKgwqDCoMKgfQo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gK8KgwqDCoMKgwqDC oMKgcmVnb2ZmID0gYWllX2NhbF90aWxlX3JlZyhhZGV2LCBvZmZzZXQpOwo+ID4gPiA+ID4gK8Kg wqDCoMKgwqDCoMKgcmVnZW5kNjQgPSByZWdvZmYgKyBsZW47Cj4gPiA+ID4gPiArwqDCoMKgwqDC oMKgwqBpZiAocmVnZW5kNjQgPj0gQklUX1VMTChhZGV2LT5yb3dfc2hpZnQpKSB7Cj4gPiA+ID4g PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZGV2X2VycigmYXBhcnQtPmRldiwKPiA+ ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIklu dmFsaWQgcmVnIG9wZXJhdGlvbiBsZW4gJXp1LlxuIiwgbGVuKTsKPiA+ID4gPiA+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gLUVJTlZBTDsKPiA+ID4gPiA+ICvCoMKgwqDC oMKgwqDCoH0KPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoGFpZV9jYWxfbG9j KGFkZXYsICZsb2MsIG9mZnNldCk7Cj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqBpZiAoYWllX3Zh bGlkYXRlX2xvY2F0aW9uKGFwYXJ0LCBsb2MpKSB7Cj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgZGV2X2VycigmYXBhcnQtPmRldiwKPiA+ID4gPiA+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIkludmFsaWQgKCVkLCVkKSBvdXQg b2YgcGFydCglZCwlZCksKCVkLCVkKVxuIiwKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgbG9jLmNvbCwgbG9jLnJvdywKPiA+ID4gPiA+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgYXBhcnQtPnJhbmdl LnN0YXJ0LmNvbCwgYXBhcnQtPnJhbmdlLnN0YXJ0LnJvdywKPiA+ID4gPiA+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgYXBhcnQtPnJhbmdlLnNpemUuY29s LCBhcGFydC0+cmFuZ2Uuc2l6ZS5yb3cpOwo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoHJldHVybiAtRUlOVkFMOwo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgfQo+ID4g PiA+ID4gKwo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgaWYgKCFpc193cml0ZSkKPiA+ID4gPiA+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gMDsKPiA+ID4gPiA+ICsKPiA+ ID4gPiA+ICvCoMKgwqDCoMKgwqDCoHJlZ2VuZDMyID0gbG93ZXJfMzJfYml0cyhyZWdlbmQ2NCk7 Cj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqB0dHlwZSA9IGFkZXYtPm9wcy0+Z2V0X3RpbGVfdHlw ZSgmbG9jKTsKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoGZvciAoaSA9IDA7IGkgPCBhZGV2LT5u dW1fa2VybmVsX3JlZ3M7IGkrKykgewo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoGNvbnN0IHN0cnVjdCBhaWVfdGlsZV9yZWdzICpyZWdzOwo+ID4gPiA+ID4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHUzMiBydHR5cGUsIHdyaXRhYmxlOwo+ID4gPiA+ID4g Kwo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJlZ3MgPSAmYWRldi0+ a2VybmVsX3JlZ3NbaV07Cj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg cnR0eXBlID0gKHJlZ3MtPmF0dHJpYnV0ZSAmIEFJRV9SRUdTX0FUVFJfVElMRV9UWVBFX01BU0sp ID4+Cj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBBSUVfUkVHU19BVFRSX1RJTEVfVFlQRV9TSElGVDsKPiA+ID4gPiA+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqB3cml0YWJsZSA9IChyZWdzLT5hdHRyaWJ1dGUgJiBBSUVfUkVH U19BVFRSX1BFUk1fTUFTSykgPj4KPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBBSUVfUkVHU19BVFRSX1BFUk1fU0hJRlQ7Cj4gPiA+ ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKCEodHR5cGUgJiBydHR5cGUp KQo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqBjb250aW51ZTsKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAo KHJlZ29mZiA+PSByZWdzLT5zb2ZmICYmIHJlZ29mZiA8PSByZWdzLT5lb2ZmKSB8fAo+ID4gPiA+ ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAocmVnZW5kMzIgPj0gcmVn cy0+c29mZiAmJiByZWdlbmQzMiA8PSByZWdzLT5lb2ZmKSkgewo+ID4gPiA+ID4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAoIXdyaXRhYmxlKSB7Cj4g PiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqBkZXZfZXJyKCZhcGFydC0+ZGV2LAo+ID4gPiA+ID4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCJyZWcgMHglengsMHglenggbm90IHdyaXRhYmxlLlxuIiwKPiA+ID4gPiA+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqBvZmZzZXQsIGxlbik7Cj4gPiA+ID4gPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4g LUVJTlZBTDsKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgfQo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoH0KPiA+ ID4gPiA+ICvCoMKgwqDCoMKgwqDCoH0KPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICvCoMKgwqDCoMKg wqDCoHJldHVybiAwOwo+ID4gPiA+ID4gK30KPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICsvKioKPiA+ ID4gPiA+ICsgKiBhaWVfcGFydF93cml0ZV9yZWdpc3RlcigpIC0gQUkgZW5naW5lIHBhcnRpdGlv biB3cml0ZSByZWdpc3Rlcgo+ID4gPiA+ID4gKyAqIEBhcGFydDogQUkgZW5naW5lIHBhcnRpdGlv bgo+ID4gPiA+ID4gKyAqIEBvZmZzZXQ6IEFJIGVuZ2luZSByZWdpc3RlciBvZmZzZXQKPiA+ID4g PiA+ICsgKiBAbGVuOiBsZW4gb2YgZGF0YSB0byB3cml0ZQo+ID4gPiA+ID4gKyAqIEBkYXRhOiBk YXRhIHRvIHdyaXRlCj4gPiA+ID4gPiArICogQG1hc2s6IG1hc2ssIGlmIGl0IGlzIG5vbiAwLCBp dCBpcyBtYXNrIHdyaXRlLgo+ID4gPiA+ID4gKyAqIEByZXR1cm46IG51bWJlciBvZiBieXRlcyB3 cml0ZSBmb3Igc3VjY2Vzcywgb3IgbmVnYXRpdmUgdmFsdWUgZm9yIGZhaWx1cmUuCj4gPiA+ID4g PiArICoKPiA+ID4gPiA+ICsgKiBUaGlzIGZ1bmN0aW9uIHdyaXRlcyBkYXRhIHRvIHRoZSBzcGVj aWZpZWQgcmVnaXN0ZXJzLgo+ID4gPiA+ID4gKyAqIElmIHRoZSBtYXNrIGlzIG5vbiAwLCBpdCBp cyBtYXNrIHdyaXRlLgo+ID4gPiA+ID4gKyAqLwo+ID4gPiA+ID4gK3N0YXRpYyBpbnQgYWllX3Bh cnRfd3JpdGVfcmVnaXN0ZXIoc3RydWN0IGFpZV9wYXJ0aXRpb24gKmFwYXJ0LCBzaXplX3QKPiA+ ID4gPiA+IG9mZnNldCwKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc2l6ZV90IGxlbiwgdm9pZCAqZGF0 YSwgdTMyIG1hc2spCj4gPiA+ID4gPiArewo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgaW50IHJl dDsKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoHZvaWQgX19pb21lbSAqdmE7Cj4gPiA+ID4gPiAr Cj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqBpZiAobWFzayAmJiBsZW4gPiBzaXplb2YodTMyKSkg ewo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC8qIEZvciBtYXNrIHdy aXRlLCBvbmx5IGFsbG93IDMyYml0LiAqLwo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoGRldl9lcnIoJmFwYXJ0LT5kZXYsCj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCJmYWlsZWQgbWFzayB3cml0ZSwgbGVuIGlz IG1vcmUgdGhhdCAzMmJpdC5cbiIpOwo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoHJldHVybiAtRUlOVkFMOwo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgfQo+ID4gPiA+ ID4gKwo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgLyogb2Zmc2V0IGlzIGV4cGVjdGVkIHRvIGJl IHJlbGF0aXZlIHRvIHRoZSBzdGFydCBvZiB0aGUgcGFydGl0aW9uICovCj4gPiA+ID4gPiArwqDC oMKgwqDCoMKgwqBvZmZzZXQgKz0gYWllX2NhbF9yZWdvZmYoYXBhcnQtPmFkZXYsIGFwYXJ0LT5y YW5nZS5zdGFydCwgMCk7Cj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqByZXQgPSBhaWVfcGFydF9y ZWdfdmFsaWRhdGlvbihhcGFydCwgb2Zmc2V0LCBsZW4sIDEpOwo+ID4gPiA+ID4gK8KgwqDCoMKg wqDCoMKgaWYgKHJldCA8IDApIHsKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqBkZXZfZXJyKCZhcGFydC0+ZGV2LCAiZmFpbGVkIHRvIHdyaXRlIHRvIDB4JXp4LDB4JXp4 LlxuIiwKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgb2Zmc2V0LCBsZW4pOwo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoHJldHVybiByZXQ7Cj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqB9Cj4gPiA+ID4gPiArCj4g PiA+ID4gPiArwqDCoMKgwqDCoMKgwqB2YSA9IGFwYXJ0LT5hZGV2LT5iYXNlICsgb2Zmc2V0Owo+ ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgaWYgKCFtYXNrKSB7Cj4gPiA+ID4gPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKGxlbiA9PSBzaXplb2YodTMyKSkKPiA+ID4gPiA+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaW93cml0ZTMyKCoo KHUzMiAqKWRhdGEpLMKgIHZhKTsKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqBlbHNlCj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoG1lbWNweV90b2lvKHZhLCBkYXRhLCBsZW4pOwo+ID4gPiA+ID4gK8KgwqDCoMKg wqDCoMKgfSBlbHNlIHsKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB1 MzIgdmFsID0gaW9yZWFkMzIodmEpOwo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoHZhbCAmPSB+bWFzazsKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqB2YWwgfD0gKigodTMyICopZGF0YSkgJiBtYXNrOwo+ID4gPiA+ID4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlvd3JpdGUzMih2YWwsIHZhKTsKPiA+ID4g PiA+ICvCoMKgwqDCoMKgwqDCoH0KPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDC oHJldHVybiAoaW50KWxlbjsKPiA+ID4gPiA+ICt9Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiArLyoq Cj4gPiA+ID4gPiArICogYWllX3BhcnRfYWNjZXNzX3JlZ3MoKSAtIEFJIGVuZ2luZSBwYXJ0aXRp b24gcmVnaXN0ZXJzIGFjY2Vzcwo+ID4gPiA+ID4gKyAqIEBhcGFydDogQUkgZW5naW5lIHBhcnRp dGlvbgo+ID4gPiA+ID4gKyAqIEBudW1fcmVxczogbnVtYmVyIG9mIGFjY2VzcyByZXF1ZXN0cwo+ ID4gPiA+ID4gKyAqIEByZXFzOiBhcnJheSBvZiByZWdpc3RlcnMgYWNjZXNzCj4gPiA+ID4gPiAr ICogQHJldHVybjogMCBmb3Igc3VjY2VzcywgYW5kIG5lZ2F0aXZlIHZhbHVlIGZvciBmYWlsdXJl Lgo+ID4gPiA+ID4gKyAqCj4gPiA+ID4gPiArICogVGhpcyBmdW5jdGlvbiBleGVjdXRlcyBBSSBl bmdpbmUgcGFydGl0aW9uIHJlZ2lzdGVyIGFjY2VzcyByZXF1ZXN0cy4KPiA+ID4gPiA+ICsgKi8K PiA+ID4gPiA+ICtzdGF0aWMgaW50IGFpZV9wYXJ0X2FjY2Vzc19yZWdzKHN0cnVjdCBhaWVfcGFy dGl0aW9uICphcGFydCwgdTMyIG51bV9yZXFzLAo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc3RydWN0IGFpZV9y ZWdfYXJncyAqcmVxcykKPiA+ID4gPiA+ICt7Cj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqB1MzIg aTsKPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoGZvciAoaSA9IDA7IGkgPCBu dW1fcmVxczsgaSsrKSB7Cj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg c3RydWN0IGFpZV9yZWdfYXJncyAqYXJncyA9ICZyZXFzW2ldOwo+ID4gPiA+ID4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoGludCByZXQ7Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKGFyZ3MtPm9wICE9IEFJRV9SRUdfV1JJVEUp IHsKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgZGV2X2VycigmYXBhcnQtPmRldiwKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCJJbnZhbGlkIHJlZ2lzdGVy IGNvbW1hbmQgdHlwZTogJXUuXG4iLAo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgYXJncy0+b3ApOwo+ID4gPiA+ ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4g LUVJTlZBTDsKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9Cj4gPiA+ ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0ID0gYWllX3BhcnRfd3JpdGVf cmVnaXN0ZXIoYXBhcnQsCj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCAoc2l6ZV90KWFyZ3MtPm9mZnNldCwKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIHNpemVvZihhcmdzLT52YWwpLAo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgJmFyZ3MtPnZhbCwgYXJncy0+bWFzayk7Cj4gPiA+ID4gPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKHJldCA8IDApIHsKPiA+ID4gPiA+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZGV2X2VycigmYXBhcnQtPmRl diwgInJlZyBvcCAldSBmYWlsZWQ6IDB4JWxseC5cbiIsCj4gPiA+ID4gPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBhcmdzLT5v cCwgYXJncy0+b2Zmc2V0KTsKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIHJldDsKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqB9Cj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqB9Cj4gPiA+ID4gPiArCj4g PiA+ID4gPiArwqDCoMKgwqDCoMKgwqByZXR1cm4gMDsKPiA+ID4gPiA+ICt9Cj4gPiA+ID4gPiAr Cj4gPiA+ID4gPiArc3RhdGljIGludCBhaWVfcGFydF9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5v ZGUsIHN0cnVjdCBmaWxlICpmaWxwKQo+ID4gPiA+ID4gK3sKPiA+ID4gPiA+ICvCoMKgwqDCoMKg wqDCoHN0cnVjdCBhaWVfcGFydGl0aW9uICphcGFydCA9IGZpbHAtPnByaXZhdGVfZGF0YTsKPiA+ ID4gPiA+ICvCoMKgwqDCoMKgwqDCoGludCByZXQ7Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiArwqDC oMKgwqDCoMKgwqAvKgo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgICogVE9ETzogSXQgd2lsbCBu ZWVkIHRvIHJlc2V0IHRoZSBTSElNIGNvbHVtbnMgYW5kIGdhdGUgdGhlCj4gPiA+ID4gPiArwqDC oMKgwqDCoMKgwqAgKiB0aWxlcyBvZiB0aGUgcGFydGl0aW9uLgo+ID4gPiA+ID4gK8KgwqDCoMKg wqDCoMKgICovCj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqByZXQgPSBtdXRleF9sb2NrX2ludGVy cnVwdGlibGUoJmFwYXJ0LT5tbG9jayk7Cj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqBpZiAocmV0 KQo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiByZXQ7Cj4g PiA+ID4gPiArCj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqBhcGFydC0+c3RhdHVzID0gMDsKPiA+ ID4gPiA+ICvCoMKgwqDCoMKgwqDCoG11dGV4X3VubG9jaygmYXBhcnQtPm1sb2NrKTsKPiA+ID4g PiA+ICsKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoHJldHVybiAwOwo+ID4gPiA+ID4gK30KPiA+ ID4gPiA+ICsKPiA+ID4gPiA+ICtzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3Ry dWN0IGFpZV9wYXJ0X3BoeXNpY2FsX3ZtX29wcyA9IHsKPiA+ID4gPiA+ICsjaWZkZWYgQ09ORklH X0hBVkVfSU9SRU1BUF9QUk9UCj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqAuYWNjZXNzID0gZ2Vu ZXJpY19hY2Nlc3NfcGh5cywKPiA+ID4gPiA+ICsjZW5kaWYKPiA+ID4gPiA+ICt9Owo+ID4gPiA+ ID4gKwo+ID4gPiA+ID4gK3N0YXRpYyBpbnQgYWllX3BhcnRfbW1hcChzdHJ1Y3QgZmlsZSAqZnAs IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQo+ID4gPiA+ID4gK3sKPiA+ID4gPiA+ICvCoMKg wqDCoMKgwqDCoHN0cnVjdCBhaWVfcGFydGl0aW9uICphcGFydCA9IGZwLT5wcml2YXRlX2RhdGE7 Cj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgYWllX2RldmljZSAqYWRldiA9IGFwYXJ0 LT5hZGV2Owo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgdW5zaWduZWQgbG9uZyBvZmZzZXQgPSB2 bWEtPnZtX3Bnb2ZmICogUEFHRV9TSVpFOwo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgcGh5c19h ZGRyX3QgYWRkcjsKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoHNpemVfdCBzaXplOwo+ID4gPiA+ ID4gKwo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgaWYgKHZtYS0+dm1fZW5kIDwgdm1hLT52bV9z dGFydCkKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gLUVJ TlZBTDsKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoC8qIE9ubHkgYWxsb3cgdXNlcnNwYWNlIGRp cmVjdGx5IHJlYWQgcmVnaXN0ZXJzICovCj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqBpZiAodm1h LT52bV9mbGFncyAmIFZNX1dSSVRFKSB7Cj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgZGV2X2VycigmYXBhcnQtPmRldiwgIiVzOiBkbyBub3Qgc3VwcG9ydCB3cml0YWJs ZSBtbWFwLlxuIiwKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgX19mdW5jX18pOwo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoHJldHVybiAtRUlOVkFMOwo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgfQo+ID4gPiA+ ID4gK8KgwqDCoMKgwqDCoMKgdm1hLT52bV9wcml2YXRlX2RhdGEgPSBhcGFydDsKPiA+ID4gPiA+ ICvCoMKgwqDCoMKgwqDCoHZtYS0+dm1fb3BzID0gJmFpZV9wYXJ0X3BoeXNpY2FsX3ZtX29wczsK PiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoHNpemUgPSBhcGFydC0+cmFuZ2Uuc2l6ZS5jb2wgPDwg YWRldi0+Y29sX3NoaWZ0Owo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgaWYgKCh2bWEtPnZtX2Vu ZCAtIHZtYS0+dm1fc3RhcnQpID4gKHNpemUgLSBvZmZzZXQpKSB7Cj4gPiA+ID4gPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZGV2X2VycigmYXBhcnQtPmRldiwKPiA+ID4gPiA+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIiVzOiBzaXplIGV4 Y2VlZC5cbiIsIF9fZnVuY19fKTsKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqByZXR1cm4gLUVJTlZBTDsKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoH0KPiA+ID4gPiA+ ICvCoMKgwqDCoMKgwqDCoHZtYS0+dm1fcGFnZV9wcm90ID0gcGdwcm90X25vbmNhY2hlZCh2bWEt PnZtX3BhZ2VfcHJvdCk7Cj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqAvKiBDYWxjdWxhdGUgdGhl IHBhcnRpdGlvbiBhZGRyZXNzICovCj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqBhZGRyID0gYWRl di0+cmVzLT5zdGFydDsKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoGFkZHIgKz0gYXBhcnQtPnJh bmdlLnN0YXJ0LmNvbCA8PCBhZGV2LT5jb2xfc2hpZnQ7Cj4gPiA+ID4gPiArwqDCoMKgwqDCoMKg wqBhZGRyICs9IGFwYXJ0LT5yYW5nZS5zdGFydC5yb3cgPDwgYWRldi0+cm93X3NoaWZ0Owo+ID4g PiA+ID4gK8KgwqDCoMKgwqDCoMKgYWRkciArPSBvZmZzZXQ7Cj4gPiA+ID4gPiArwqDCoMKgwqDC oMKgwqByZXR1cm4gcmVtYXBfcGZuX3JhbmdlKHZtYSwKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHZtYS0+dm1fc3Rh cnQsCj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBhZGRyID4+IFBBR0VfU0hJRlQsCj4gPiA+ID4gPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB2bWEtPnZt X2VuZCAtIHZtYS0+dm1fc3RhcnQsCj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB2bWEtPnZtX3BhZ2VfcHJvdCk7Cj4g PiA+ID4gPiArfQo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gK3N0YXRpYyBsb25nIGFpZV9wYXJ0X2lv Y3RsKHN0cnVjdCBmaWxlICpmcCwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZwo+ID4g PiA+ID4gYXJnKQo+ID4gPiA+ID4gK3sKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBh aWVfcGFydGl0aW9uICphcGFydCA9IGZwLT5wcml2YXRlX2RhdGE7Cj4gPiA+ID4gPiArwqDCoMKg wqDCoMKgwqB2b2lkIF9fdXNlciAqYXJncCA9ICh2b2lkIF9fdXNlciAqKWFyZzsKPiA+ID4gPiA+ ICvCoMKgwqDCoMKgwqDCoGxvbmcgcmV0Owo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gK8KgwqDCoMKg wqDCoMKgc3dpdGNoIChjbWQpIHsKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoGNhc2UgQUlFX1JF R19JT0NUTDoKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoHsKPiA+ID4gPiA+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgYWllX3JlZ19hcmdzIHJhY2Nlc3M7Cj4gPiA+ID4g PiArCj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKGNvcHlfZnJv bV91c2VyKCZyYWNjZXNzLCBhcmdwLCBzaXplb2YocmFjY2VzcykpKQo+ID4gPiA+ID4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gLUVGQVVMVDsK PiA+ID4gPiA+ICsKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXQg PSBtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmFwYXJ0LT5tbG9jayk7Cj4gPiA+ID4gPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKHJldCkKPiA+ID4gPiA+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIHJldDsKPiA+ID4gPiA+ ICsKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXQgPSBhaWVfcGFy dF9hY2Nlc3NfcmVncyhhcGFydCwgMSwgJnJhY2Nlc3MpOwo+ID4gPiA+ID4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoG11dGV4X3VubG9jaygmYXBhcnQtPm1sb2NrKTsKPiA+ID4gPiA+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBicmVhazsKPiA+ID4gPiA+ICvCoMKgwqDC oMKgwqDCoH0KPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoGRlZmF1bHQ6Cj4gPiA+ID4gPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZGV2X2VycigmYXBhcnQtPmRldiwgIkludmFsaWQg aW9jdGwgY29tbWFuZCAldS5cbiIsIGNtZCk7Cj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgcmV0ID0gLUVJTlZBTDsKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqBicmVhazsKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoH0KPiA+ID4gPiA+ICsK PiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoHJldHVybiByZXQ7Cj4gPiA+ID4gPiArfQo+ID4gPiA+ ID4gKwo+ID4gPiA+ID4gK2NvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYWllX3BhcnRfZm9w cyA9IHsKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoC5vd25lcsKgwqDCoMKgwqDCoMKgwqDCoMKg PSBUSElTX01PRFVMRSwKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoC5yZWxlYXNlwqDCoMKgwqDC oMKgwqDCoD0gYWllX3BhcnRfcmVsZWFzZSwKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoC5tbWFw wqDCoMKgwqDCoMKgwqDCoMKgwqDCoD0gYWllX3BhcnRfbW1hcCwKPiA+ID4gPiA+ICvCoMKgwqDC oMKgwqDCoC51bmxvY2tlZF9pb2N0bMKgPSBhaWVfcGFydF9pb2N0bCwKPiA+ID4gPiA+ICt9Owo+ ID4gPiA+ID4gKwo+ID4gPiA+ID4gKy8qKgo+ID4gPiA+ID4gKyAqIGFpZV9wYXJ0X3JlbGVhc2Vf ZGV2aWNlKCkgLSByZWxlYXNlIGFuIEFJIGVuZ2luZSBwYXJ0aXRpb24gaW5zdGFuY2UKPiA+ID4g PiA+ICsgKiBAZGV2OiBBSSBlbmdpbmUgcGFydGl0aW9uIGRldmljZQo+ID4gPiA+ID4gKyAqCj4g PiA+ID4gPiArICogSXQgd2lsbCBiZSBjYWxsZWQgYnkgZGV2aWNlIGRyaXZlciBjb3JlIHdoZW4g bm8gb25lIGhvbGRzIGEgdmFsaWQKPiA+ID4gPiA+ICsgKiBwb2ludGVyIHRvIEBkZXYgYW55bW9y ZS4KPiA+ID4gPiA+ICsgKi8KPiA+ID4gPiA+ICtzdGF0aWMgdm9pZCBhaWVfcGFydF9yZWxlYXNl X2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYpCj4gPiA+ID4gPiArewo+ID4gPiA+ID4gK8KgwqDC oMKgwqDCoMKgc3RydWN0IGFpZV9wYXJ0aXRpb24gKmFwYXJ0ID0gZGV2X3RvX2FpZXBhcnQoZGV2 KTsKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBhaWVfZGV2aWNlICphZGV2ID0gYXBh cnQtPmFkZXY7Cj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqBpbnQgcmV0Owo+ID4gPiA+ID4gKwo+ ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgcmV0ID0gbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZh ZGV2LT5tbG9jayk7Cj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqBpZiAocmV0KSB7Cj4gPiA+ID4g PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZGV2X3dhcm4oJmFwYXJ0LT5kZXYsCj4g PiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAi Z2V0dGluZyBhZGV2LT5tbG9jayBpcyBpbnRlcnJ1cHRlZCBieSBzaWduYWxcbiIpOwo+ID4gPiA+ ID4gK8KgwqDCoMKgwqDCoMKgfQo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKg YWllX3Jlc291cmNlX3B1dF9yZWdpb24oJmFkZXYtPmNvbHNfcmVzLCBhcGFydC0+cmFuZ2Uuc3Rh cnQuY29sLAo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgYXBhcnQtPnJhbmdlLnNpemUuY29sKTsKPiA+ID4gPiA+ ICvCoMKgwqDCoMKgwqDCoGxpc3RfZGVsKCZhcGFydC0+bm9kZSk7Cj4gPiA+ID4gPiArwqDCoMKg wqDCoMKgwqBtdXRleF91bmxvY2soJmFkZXYtPm1sb2NrKTsKPiA+ID4gPiA+ICvCoMKgwqDCoMKg wqDCoHB1dF9kZXZpY2UoYXBhcnQtPmRldi5wYXJlbnQpOwo+ID4gPiA+ID4gK30KPiA+ID4gPiA+ ICsKPiA+ID4gPiA+ICsvKioKPiA+ID4gPiA+ICsgKiBhaWVfY3JlYXRlX3BhcnRpdGlvbigpIC0g Y3JlYXRlIEFJIGVuZ2luZSBwYXJ0aXRpb24gaW5zdGFuY2UKPiA+ID4gPiA+ICsgKiBAYWRldjog QUkgZW5naW5lIGRldmljZQo+ID4gPiA+ID4gKyAqIEByYW5nZTogQUkgZW5naW5lIHBhcnRpdGlv biByYW5nZSB0byBjaGVjay4gQSByYW5nZSBkZXNjcmliZXMgYSBncm91cAo+ID4gPiA+ID4gKyAq wqDCoMKgwqDCoMKgwqAgb2YgQUkgZW5naW5lIHRpbGVzLgo+ID4gPiA+ID4gKyAqIEByZXR1cm46 IGNyZWF0ZWQgQUkgZW5naW5lIHBhcnRpdGlvbiBwb2ludGVyIGZvciBzdWNjZXNzLCBhbmQgUFRS X0VSUgo+ID4gPiA+ID4gKyAqwqDCoMKgwqDCoMKgwqDCoCBmb3IgZmFpbHVyZS4KPiA+ID4gPiA+ ICsgKgo+ID4gPiA+ID4gKyAqIFRoaXMgZnVuY3Rpb24gY3JlYXRlcyBhbiBBSSBlbmdpbmUgcGFy dGl0aW9uIGluc3RhbmNlLgo+ID4gPiA+ID4gKyAqIEl0IGNyZWF0ZXMgQUkgZW5naW5lIHBhcnRp dGlvbiwgdGhlIEFJIGVuZ2luZSBwYXJ0aXRpb24gZGV2aWNlIGFuZAo+ID4gPiA+ID4gKyAqIHRo ZSBBSSBlbmdpbmUgcGFydGl0aW9uIGNoYXJhY3RlciBkZXZpY2UuCj4gPiA+ID4gPiArICovCj4g PiA+ID4gPiArc3RhdGljIHN0cnVjdCBhaWVfcGFydGl0aW9uICphaWVfY3JlYXRlX3BhcnRpdGlv bihzdHJ1Y3QgYWllX2RldmljZSAqYWRldiwKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IGFpZV9yYW5nZSAqcmFuZ2UpCj4gPiA+ID4gPiAr ewo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGFpZV9wYXJ0aXRpb24gKmFwYXJ0Owo+ ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGRldmljZSAqZGV2Owo+ID4gPiA+ID4gK8Kg wqDCoMKgwqDCoMKgY2hhciBkZXZuYW1lWzMyXTsKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoGlu dCByZXQ7Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqByZXQgPSBtdXRleF9s b2NrX2ludGVycnVwdGlibGUoJmFkZXYtPm1sb2NrKTsKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDC oGlmIChyZXQpCj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJu IEVSUl9QVFIocmV0KTsKPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoHJldCA9 IGFpZV9yZXNvdXJjZV9jaGVja19yZWdpb24oJmFkZXYtPmNvbHNfcmVzLCByYW5nZS0+c3RhcnQu Y29sLAo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJhbmdlLT5zaXplLmNvbCk7Cj4g PiA+ID4gPiArwqDCoMKgwqDCoMKgwqBpZiAocmV0ICE9IHJhbmdlLT5zdGFydC5jb2wpIHsKPiA+ ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkZXZfZXJyKCZhZGV2LT5kZXYs ICJpbnZhbGlkIHBhcnRpdGlvbiAoJXUsJXUpKCV1LCV1KS5cbiIsCj4gPiA+ID4gPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJhbmdlLT5zdGFydC5jb2ws IHJhbmdlLT5zdGFydC5yb3csCj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoHJhbmdlLT5zaXplLmNvbCwgcmFuZ2UtPnNpemUucm93KTsKPiA+ ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBtdXRleF91bmxvY2soJmFkZXYt Pm1sb2NrKTsKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4g RVJSX1BUUigtRUlOVkFMKTsKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoH0KPiA+ID4gPiA+ICvC oMKgwqDCoMKgwqDCoHJldCA9IGFpZV9yZXNvdXJjZV9nZXRfcmVnaW9uKCZhZGV2LT5jb2xzX3Jl cywgcmFuZ2UtPnN0YXJ0LmNvbCwKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmFuZ2UtPnNp emUuY29sKTsKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoGlmIChyZXQgIT0gcmFuZ2UtPnN0YXJ0 LmNvbCkgewo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRldl9lcnIo JmFkZXYtPmRldiwgImZhaWxlZCB0byBnZXQgcGFydGl0aW9uCj4gPiA+ID4gPiAoJXUsJXUpKCV1 LCV1KS5cbiIsCj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoHJhbmdlLT5zdGFydC5jb2wsIHJhbmdlLT5zdGFydC5yb3csCj4gPiA+ID4gPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJhbmdlLT5zaXpl LmNvbCwgcmFuZ2UtPnNpemUucm93KTsKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqBtdXRleF91bmxvY2soJmFkZXYtPm1sb2NrKTsKPiA+ID4gPiA+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gRVJSX1BUUigtRUZBVUxUKTsKPiA+ID4gPiA+ICvC oMKgwqDCoMKgwqDCoH0KPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoG11dGV4X3VubG9jaygmYWRl di0+bWxvY2spOwo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgYXBhcnQgPSBk ZXZtX2t6YWxsb2MoJmFkZXYtPmRldiwgc2l6ZW9mKCphcGFydCksIEdGUF9LRVJORUwpOwo+ID4g PiA+ID4gK8KgwqDCoMKgwqDCoMKgaWYgKCFhcGFydCkKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKPiA+ID4gPiA+ICsKPiA+ ID4gPiA+ICvCoMKgwqDCoMKgwqDCoGFwYXJ0LT5hZGV2ID0gYWRldjsKPiA+ID4gPiA+ICvCoMKg wqDCoMKgwqDCoG1lbWNweSgmYXBhcnQtPnJhbmdlLCByYW5nZSwgc2l6ZW9mKCpyYW5nZSkpOwo+ ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgbXV0ZXhfaW5pdCgmYXBhcnQtPm1sb2NrKTsKPiA+ID4g PiA+ICsKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoC8qIENyZWF0ZSBBSSBlbmdpbmUgcGFydGl0 aW9uIGRldmljZSAqLwo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgZGV2ID0gJmFwYXJ0LT5kZXY7 Cj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqBkZXZpY2VfaW5pdGlhbGl6ZShkZXYpOwo+ID4gPiA+ ID4gK8KgwqDCoMKgwqDCoMKgZGV2LT5wYXJlbnQgPSAmYWRldi0+ZGV2Owo+ID4gPiA+ID4gK8Kg wqDCoMKgwqDCoMKgZGV2LT5jbGFzcyA9IGFpZV9jbGFzczsKPiA+ID4gPiA+ICvCoMKgwqDCoMKg wqDCoGRldl9zZXRfZHJ2ZGF0YShkZXYsIGFwYXJ0KTsKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDC oHNucHJpbnRmKGRldm5hbWUsIHNpemVvZihkZXZuYW1lKSAtIDEsICJhaWVwYXJ0XyVkXyVkIiwK PiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYXBhcnQtPnJhbmdlLnN0 YXJ0LmNvbCwgYXBhcnQtPnJhbmdlLnNpemUuY29sKTsKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDC oGRldl9zZXRfbmFtZShkZXYsIGRldm5hbWUpOwo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgLyog V2UgY2FuIG5vdyByZWx5IG9uIHRoZSByZWxlYXNlIGZ1bmN0aW9uIGZvciBjbGVhbnVwICovCj4g PiA+ID4gPiArwqDCoMKgwqDCoMKgwqBkZXYtPnJlbGVhc2UgPSBhaWVfcGFydF9yZWxlYXNlX2Rl dmljZTsKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoHJldCA9IGRldmljZV9hZGQoZGV2KTsKPiA+ ID4gPiA+ICvCoMKgwqDCoMKgwqDCoGlmIChyZXQpIHsKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqBkZXZfZXJyKGRldiwgImRldmljZV9hZGQgZmFpbGVkOiAlZFxuIiwg cmV0KTsKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBwdXRfZGV2aWNl KGRldik7Cj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIEVS Ul9QVFIocmV0KTsKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoH0KPiA+ID4gPiA+ICsKPiA+ID4g PiA+ICvCoMKgwqDCoMKgwqDCoHJldCA9IG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmYWRldi0+ bWxvY2spOwo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgaWYgKHJldCkgewo+ID4gPiA+ID4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHB1dF9kZXZpY2UoZGV2KTsKPiA+ID4gPiA+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gRVJSX1BUUihyZXQpOwo+ID4gPiA+ ID4gK8KgwqDCoMKgwqDCoMKgfQo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKg bGlzdF9hZGRfdGFpbCgmYXBhcnQtPm5vZGUsICZhZGV2LT5wYXJ0aXRpb25zKTsKPiA+ID4gPiA+ ICvCoMKgwqDCoMKgwqDCoG11dGV4X3VubG9jaygmYWRldi0+bWxvY2spOwo+ID4gPiA+ID4gK8Kg wqDCoMKgwqDCoMKgZ2V0X2RldmljZSgmYWRldi0+ZGV2KTsKPiA+ID4gPiA+ICvCoMKgwqDCoMKg wqDCoGRldl9kYmcoZGV2LCAiY3JlYXRlZCBBSUUgcGFydGl0aW9uIGRldmljZS5cbiIpOwo+ID4g PiA+ID4gKwo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgcmV0dXJuIGFwYXJ0Owo+ID4gPiA+ID4g K30KPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICtzdHJ1Y3QgYWllX3BhcnRpdGlvbiAqCj4gPiA+ID4g PiArb2ZfYWllX3BhcnRfcHJvYmUoc3RydWN0IGFpZV9kZXZpY2UgKmFkZXYsIHN0cnVjdCBkZXZp Y2Vfbm9kZSAqbmMpCj4gPiA+ID4gPiArewo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgc3RydWN0 IGFpZV9wYXJ0aXRpb24gKmFwYXJ0Owo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGFp ZV9yYW5nZSByYW5nZTsKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoHUzMiBwYXJ0aXRpb25faWQs IHJlZ3NbNF07Cj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqBpbnQgcmV0Owo+ID4gPiA+ID4gKwo+ ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgLyogU2VsZWN0IGRldmljZSBkcml2ZXIgKi8KPiA+ID4g PiA+ICvCoMKgwqDCoMKgwqDCoHJldCA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyX2FycmF5KG5jLCAi cmVnIiwgcmVncywgQVJSQVlfU0laRShyZWdzKSk7Cj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqBp ZiAocmV0IDwgMCkgewo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRl dl9lcnIoJmFkZXYtPmRldiwKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgInByb2JlICVwT0YgZmFpbGVkLCBubyB0aWxlcyByYW5nZSBpbmZv cm1hdGlvbi5cbiIsCj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoG5jKTsKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqByZXR1cm4gRVJSX1BUUihyZXQpOwo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgfQo+ID4gPiA+ ID4gK8KgwqDCoMKgwqDCoMKgcmFuZ2Uuc3RhcnQuY29sID0gcmVnc1swXTsKPiA+ID4gPiA+ICvC oMKgwqDCoMKgwqDCoHJhbmdlLnN0YXJ0LnJvdyA9IHJlZ3NbMV07Cj4gPiA+ID4gPiArwqDCoMKg wqDCoMKgwqByYW5nZS5zaXplLmNvbCA9IHJlZ3NbMl07Cj4gPiA+ID4gPiArwqDCoMKgwqDCoMKg wqByYW5nZS5zaXplLnJvdyA9IHJlZ3NbM107Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiArwqDCoMKg wqDCoMKgwqByZXQgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMl9pbmRleChuYywgInhsbngscGFydGl0 aW9uLWlkIiwgMCwKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgJnBhcnRpdGlvbl9p ZCk7Cj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqBpZiAocmV0IDwgMCkgewo+ID4gPiA+ID4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRldl9lcnIoJmFkZXYtPmRldiwKPiA+ID4gPiA+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgInByb2JlICVw T0YgZmFpbGVkLCBubyBwYXJ0aXRpb24gaWQuXG4iLCBuYyk7Cj4gPiA+ID4gPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIEVSUl9QVFIocmV0KTsKPiA+ID4gPiA+ICvCoMKg wqDCoMKgwqDCoH0KPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoHJldCA9IG11 dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmYWRldi0+bWxvY2spOwo+ID4gPiA+ID4gK8KgwqDCoMKg wqDCoMKgaWYgKHJldCkKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBy ZXR1cm4gRVJSX1BUUihyZXQpOwo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKg YXBhcnQgPSBhaWVfZ2V0X3BhcnRpdGlvbl9mcm9tX2lkKGFkZXYsIHBhcnRpdGlvbl9pZCk7Cj4g PiA+ID4gPiArwqDCoMKgwqDCoMKgwqBtdXRleF91bmxvY2soJmFkZXYtPm1sb2NrKTsKPiA+ID4g PiA+ICvCoMKgwqDCoMKgwqDCoGlmIChhcGFydCkgewo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoGRldl9lcnIoJmFkZXYtPmRldiwKPiA+ID4gPiA+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgInByb2JlIGZhaWxlZDogcGFydGl0 aW9uICV1IGV4aXN0cy5cbiIsCj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoHBhcnRpdGlvbl9pZCk7Cj4gPiA+ID4gPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIEVSUl9QVFIocmV0KTsKPiA+ID4gPiA+ICvCoMKgwqDC oMKgwqDCoH0KPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoGFwYXJ0ID0gYWll X2NyZWF0ZV9wYXJ0aXRpb24oYWRldiwgJnJhbmdlKTsKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDC oGlmIChJU19FUlIoYXBhcnQpKSB7Cj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgZGV2X2VycigmYWRldi0+ZGV2LAo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAiJXM6IGZhaWxlZCB0byBjcmVhdGUgcGFydCgldSwl dSksKCV1LCV1KS5cbiIsCj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoF9fZnVuY19fLCByYW5nZS5zdGFydC5jb2wsIHJhbmdlLnN0YXJ0LnJv dywKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgcmFuZ2Uuc2l6ZS5jb2wsIHJhbmdlLnNpemUucm93KTsKPiA+ID4gPiA+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gYXBhcnQ7Cj4gPiA+ID4gPiArwqDCoMKgwqDCoMKg wqB9Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqBvZl9ub2RlX2dldChuYyk7 Cj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqBhcGFydC0+ZGV2Lm9mX25vZGUgPSBuYzsKPiA+ID4g PiA+ICvCoMKgwqDCoMKgwqDCoGFwYXJ0LT5wYXJ0aXRpb25faWQgPSBwYXJ0aXRpb25faWQ7Cj4g PiA+ID4gPiArCj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqBkZXZfaW5mbygmYWRldi0+ZGV2LAo+ ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAiQUkgZW5naW5lIHBhcnQo JXUsJXUpLCgldSwldSksIGlkICV1IGlzIHByb2JlZAo+ID4gPiA+ID4gc3VjY2Vzc2Z1bGx5Llxu IiwKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmFuZ2Uuc3RhcnQu Y29sLCByYW5nZS5zdGFydC5yb3csCj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIHJhbmdlLnNpemUuY29sLCByYW5nZS5zaXplLnJvdywgYXBhcnQtPnBhcnRpdGlvbl9p ZCk7Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqByZXR1cm4gYXBhcnQ7Cj4g PiA+ID4gPiArfQo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gKy8qKgo+ID4gPiA+ID4gKyAqIGFpZV9k ZXN0cm95X3BhcnQoKSAtIGRlc3Ryb3kgQUkgZW5naW5lIHBhcnRpdGlvbgo+ID4gPiA+ID4gKyAq IEBhcGFydDogQUkgZW5naW5lIHBhcnRpdGlvbgo+ID4gPiA+ID4gKyAqCj4gPiA+ID4gPiArICog VGhpcyBmdW5jdGlvbiB3aWxsIHJlbW92ZSBBSSBlbmdpbmUgcGFydGl0aW9uLgo+ID4gPiA+ID4g KyAqLwo+ID4gPiA+ID4gK3ZvaWQgYWllX3BhcnRfcmVtb3ZlKHN0cnVjdCBhaWVfcGFydGl0aW9u ICphcGFydCkKPiA+ID4gPiA+ICt7Cj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqBkZXZpY2VfZGVs KCZhcGFydC0+ZGV2KTsKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoHB1dF9kZXZpY2UoJmFwYXJ0 LT5kZXYpOwo+ID4gPiA+ID4gK30KPiA+ID4gPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL21pc2Mv eGlsaW54LWFpLWVuZ2luZS9haS1lbmdpbmUtcmVzLmMKPiA+ID4gPiA+IGIvZHJpdmVycy9taXNj L3hpbGlueC1haS1lbmdpbmUvYWktZW5naW5lLXJlcy5jCj4gPiA+ID4gPiBuZXcgZmlsZSBtb2Rl IDEwMDY0NAo+ID4gPiA+ID4gaW5kZXggMDAwMDAwMC4uMzZmMDhiZgo+ID4gPiA+ID4gLS0tIC9k ZXYvbnVsbAo+ID4gPiA+ID4gKysrIGIvZHJpdmVycy9taXNjL3hpbGlueC1haS1lbmdpbmUvYWkt ZW5naW5lLXJlcy5jCj4gPiA+ID4gPiBAQCAtMCwwICsxLDExNCBAQAo+ID4gPiA+ID4gKy8vIFNQ RFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCj4gPiA+ID4gPiArLyoKPiA+ID4gPiA+ICsg KiBYaWxpbnggQUkgRW5naW5lIGRldmljZSBkcml2ZXIKPiA+ID4gPiA+ICsgKgo+ID4gPiA+ID4g KyAqIENvcHlyaWdodCAoQykgMjAyMCBYaWxpbngsIEluYy4KPiA+ID4gPiA+ICsgKi8KPiA+ID4g PiA+ICsKPiA+ID4gPiA+ICsjaW5jbHVkZSA8bGludXgvYml0bWFwLmg+Cj4gPiA+ID4gPiArCj4g PiA+ID4gPiArI2luY2x1ZGUgImFpLWVuZ2luZS1pbnRlcm5hbC5oIgo+ID4gPiA+ID4gKwo+ID4g PiA+ID4gKy8qKgo+ID4gPiA+ID4gKyAqIGFpZV9yZXNvdXJjZV9pbml0aWFsaXplKCkgLSBpbml0 aWFsaXplIEFJIGVuZ2luZSByZXNvdXJjZQo+ID4gPiA+ID4gKyAqIEByZXM6IHBvaW50ZXIgdG8g QUkgZW5naW5lIHJlc291cmNlCj4gPiA+ID4gPiArICogQGNvdW50OiB0b3RhbCBudW1iZXIgb2Yg ZWxlbWVudCBvZiB0aGlzIHJlc291cmNlCj4gPiA+ID4gPiArICogQHJldHVybjogMCBmb3Igc3Vj Y2VzcywgbmVnYXRpdmUgdmFsdWUgZm9yIGZhaWx1cmUuCj4gPiA+ID4gPiArICoKPiA+ID4gPiA+ ICsgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgaW5pdGlhbGl6ZSB0aGUgZGF0YSBzdHJ1Y3R1cmUgZm9y IHRoZQo+ID4gPiA+ID4gKyAqIHJlc291cmNlLgo+ID4gPiA+ID4gKyAqLwo+ID4gPiA+ID4gK2lu dCBhaWVfcmVzb3VyY2VfaW5pdGlhbGl6ZShzdHJ1Y3QgYWllX3Jlc291cmNlICpyZXMsIGludCBj b3VudCkKPiA+ID4gPiA+ICt7Cj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqBpZiAoIXJlcyB8fCAh Y291bnQpCj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIC1F SU5WQUw7Cj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqByZXMtPmJpdG1hcCA9IGJpdG1hcF96YWxs b2MoY291bnQsIEdGUF9LRVJORUwpOwo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgaWYgKCFyZXMt PmJpdG1hcCkKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4g LUVOT01FTTsKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoHJlcy0+dG90YWwgPSBjb3VudDsKPiA+ ID4gPiA+ICsKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoHJldHVybiAwOwo+ID4gPiA+ID4gK30K PiA+ID4gPiA+ICsKPiA+ID4gPiA+ICsvKioKPiA+ID4gPiA+ICsgKiBhaWVfcmVzb3VyY2VfdW5p bml0aWFsaXplKCkgLSB1bmluaXRpYWxpemUgQUkgZW5naW5lIHJlc291cmNlCj4gPiA+ID4gPiAr ICogQHJlczogcG9pbnRlciB0byBBSSBlbmdpbmUgcmVzb3VyY2UKPiA+ID4gPiA+ICsgKgo+ID4g PiA+ID4gKyAqIFRoaXMgZnVuY3Rpb24gd2lsbCByZWxlYXNlIHRoZSBBSSBlbmdpbmUgcmVzb3Vy Y2UgZGF0YSBtZW1iZXJzLgo+ID4gPiA+ID4gKyAqLwo+ID4gPiA+ID4gK3ZvaWQgYWllX3Jlc291 cmNlX3VuaW5pdGlhbGl6ZShzdHJ1Y3QgYWllX3Jlc291cmNlICpyZXMpCj4gPiA+ID4gPiArewo+ ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgcmVzLT50b3RhbCA9IDA7Cj4gPiA+ID4gPiArwqDCoMKg wqDCoMKgwqBpZiAocmVzLT5iaXRtYXApCj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgYml0bWFwX2ZyZWUocmVzLT5iaXRtYXApOwo+ID4gPiA+ID4gK30KPiA+ID4gPiA+ ICsKPiA+ID4gPiA+ICsvKioKPiA+ID4gPiA+ICsgKiBhaWVfcmVzb3VyY2VfY2hlY2soKSAtIGNo ZWNrIGF2YWlsYWJpbGl0eSBvZiByZXF1ZXN0ZWQgcmVzb3VyY2UKPiA+ID4gPiA+ICsgKiBAcmVz OiBwb2ludGVyIHRvIEFJIGVuZ2luZSByZXNvdXJjZSB0byBjaGVjawo+ID4gPiA+ID4gKyAqIEBz dGFydDogc3RhcnQgaW5kZXggb2YgdGhlIHJlcXVpcmVkIHJlc291cmNlLCBpdCB3aWxsIG9ubHkg YmUgdXNlZCBpZgo+ID4gPiA+ID4gKyAqwqDCoMKgwqDCoMKgwqAgQGNvbnRpbnVvdXMgaXMgMS4g SXQgd2lsbCBjaGVjayB0aGUgYXZhaWxhYmxlIHJlc291cmNlIHN0YXJ0aW5nCj4gPiA+ID4gPiBm cm9tCj4gPiA+ID4gPiArICrCoMKgwqDCoMKgwqDCoCBAc3RhcnQKPiA+ID4gPiA+ICsgKiBAY291 bnQ6IG51bWJlciBvZiByZXF1ZXN0ZWQgZWxlbWVudAo+ID4gPiA+ID4gKyAqIEByZXR1cm46IHN0 YXJ0IHJlc291cmNlIGlkIGlmIHRoZSByZXF1ZXN0ZWQgbnVtYmVyIG9mIHJlc291cmNlcyBhcmUK PiA+ID4gPiA+IGF2YWlsYWJsZQo+ID4gPiA+ID4gKyAqwqDCoMKgwqDCoMKgwqDCoCBJdCB3aWxs IHJldHVybiBuZWdhdGl2ZSB2YWx1ZSBvZiBlcnJvcnMuCj4gPiA+ID4gPiArICoKPiA+ID4gPiA+ ICsgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgY2hlY2sgdGhlIGF2YWlsYWJpbGl0eS4gSXQgd2lsbCBy ZXR1cm4gc3RhcnQgcmVzb3VyY2UKPiA+ID4gPiA+IGlkCj4gPiA+ID4gPiArICogaWYgdGhlIHJl cXVlc3RlZCBudW1iZXIgb2YgcmVzb3VyY2VzIGFyZSBhdmFpbGFibGUuCj4gPiA+ID4gPiArICov Cj4gPiA+ID4gPiAraW50IGFpZV9yZXNvdXJjZV9jaGVja19yZWdpb24oc3RydWN0IGFpZV9yZXNv dXJjZSAqcmVzLAo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIHUzMiBzdGFydCwgdTMyIGNvdW50KQo+ID4gPiA+ID4gK3sK PiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoHVuc2lnbmVkIGxvbmcgaWQ7Cj4gPiA+ID4gPiArCj4g PiA+ID4gPiArwqDCoMKgwqDCoMKgwqBpZiAoIXJlcyB8fCAhcmVzLT5iaXRtYXAgfHwgIWNvdW50 KQo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiAtRUlOVkFM Owo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgaWQgPSBiaXRtYXBfZmluZF9uZXh0X3plcm9fYXJl YShyZXMtPmJpdG1hcCwgcmVzLT50b3RhbCwgc3RhcnQsCj4gPiA+ID4gPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgY291bnQsIDApOwo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgaWYgKGlkID49IHJl cy0+dG90YWwpCj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJu IC1FUkFOR0U7Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqByZXR1cm4gKGlu dClpZDsKPiA+ID4gPiA+ICt9Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiArLyoqCj4gPiA+ID4gPiAr ICogYWllX3Jlc291cmNlX2dldF9yZWdpb24oKSAtIGdldCByZXF1ZXN0ZWQgQUkgZW5naW5lIHJl c291cmNlCj4gPiA+ID4gPiArICogQHJlczogcG9pbnRlciB0byBBSSBlbmdpbmUgcmVzb3VyY2Ug dG8gY2hlY2sKPiA+ID4gPiA+ICsgKiBAY291bnQ6IG51bWJlciBvZiByZXF1ZXN0ZWQgZWxlbWVu dAo+ID4gPiA+ID4gKyAqIEBzdGFydDogc3RhcnQgaW5kZXggb2YgdGhlIHJlcXVpcmVkIHJlc291 cmNlCj4gPiA+ID4gPiArICogQHJldHVybjogc3RhcnQgcmVzb3VyY2UgaWQgZm9yIHN1Y2Nlc3Ms IGFuZCBuZWdhdGl2ZSB2YWx1ZSBmb3IgZmFpbHVyZS4KPiA+ID4gPiA+ICsgKgo+ID4gPiA+ID4g KyAqIFRoaXMgZnVuY3Rpb24gY2hlY2sgaWYgdGhlIHJlcXVlc3RlZCBBSSBlbmdpbmUgcmVzb3Vy Y2UgaXMgYXZhaWxhYmxlLgo+ID4gPiA+ID4gKyAqIElmIGl0IGlzIGF2YWlsYWJsZSwgbWFyayBp dCB1c2VkIGFuZCByZXR1cm4gdGhlIHN0YXJ0IHJlc291cmNlIGlkLgo+ID4gPiA+ID4gKyAqLwo+ ID4gPiA+ID4gK2ludCBhaWVfcmVzb3VyY2VfZ2V0X3JlZ2lvbihzdHJ1Y3QgYWllX3Jlc291cmNl ICpyZXMsIHUzMiBzdGFydCwgdTMyIGNvdW50KQo+ID4gPiA+ID4gK3sKPiA+ID4gPiA+ICvCoMKg wqDCoMKgwqDCoHVuc2lnbmVkIGxvbmcgb2ZmOwo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gK8KgwqDC oMKgwqDCoMKgaWYgKCFyZXMgfHwgIXJlcy0+Yml0bWFwIHx8ICFjb3VudCkKPiA+ID4gPiA+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gLUVJTlZBTDsKPiA+ID4gPiA+ICvC oMKgwqDCoMKgwqDCoG9mZiA9IGJpdG1hcF9maW5kX25leHRfemVyb19hcmVhKHJlcy0+Yml0bWFw LCByZXMtPnRvdGFsLCBzdGFydCwKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgY291 bnQsIDApOwo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgaWYgKG9mZiA+PSByZXMtPnRvdGFsKSB7 Cj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcHJfZXJyKCJGYWlsZWQg dG8gZ2V0IGF2YWlsYWJsZSBBSSBlbmdpbmUgcmVzb3VyY2UuXG4iKTsKPiA+ID4gPiA+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gLUVSQU5HRTsKPiA+ID4gPiA+ICvCoMKg wqDCoMKgwqDCoH0KPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoGJpdG1hcF9zZXQocmVzLT5iaXRt YXAsIG9mZiwgY291bnQpOwo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgcmV0 dXJuIChpbnQpb2ZmOwo+ID4gPiA+ID4gK30KPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICsvKioKPiA+ ID4gPiA+ICsgKiBhaWVfcmVzb3VyY2VfcHV0X3JlZ2lvbigpIC0gcmVsZWFzZSByZXF1ZXN0ZWQg QUkgZW5naW5lIHJlc291cmNlCj4gPiA+ID4gPiArICogQHJlczogcG9pbnRlciB0byBBSSBlbmdp bmUgcmVzb3VyY2UgdG8gY2hlY2sKPiA+ID4gPiA+ICsgKiBAc3RhcnQ6IHN0YXJ0IGluZGV4IG9m IHRoZSByZXNvdXJjZSB0byByZWxlYXNlCj4gPiA+ID4gPiArICogQGNvdW50OiBudW1iZXIgb2Yg ZWxlbWVudHMgdG8gcmVsZWFzZQo+ID4gPiA+ID4gKyAqCj4gPiA+ID4gPiArICogVGhpcyBmdW5j dGlvbiByZWxlYXNlIHRoZSByZXF1ZXN0ZWQgQUkgZW5naW5lIHJlc291cmNlLgo+ID4gPiA+ID4g KyAqLwo+ID4gPiA+ID4gK3ZvaWQgYWllX3Jlc291cmNlX3B1dF9yZWdpb24oc3RydWN0IGFpZV9y ZXNvdXJjZSAqcmVzLCBpbnQgc3RhcnQsIHUzMiBjb3VudCkKPiA+ID4gPiA+ICt7Cj4gPiA+ID4g PiArwqDCoMKgwqDCoMKgwqBpZiAoIXJlcyB8fCAhY291bnQpCj4gPiA+ID4gPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuOwo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgYml0 bWFwX2NsZWFyKHJlcy0+Yml0bWFwLCBzdGFydCwgY291bnQpOwo+ID4gPiA+ID4gK30KPiA+ID4g PiA+IGRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgveGxueC1haS1lbmdpbmUuaCBiL2lu Y2x1ZGUvdWFwaS9saW51eC94bG54LWFpLQo+ID4gPiA+ID4gZW5naW5lLmgKPiA+ID4gPiA+IG5l dyBmaWxlIG1vZGUgMTAwNjQ0Cj4gPiA+ID4gPiBpbmRleCAwMDAwMDAwLi5hY2JjNzgxCj4gPiA+ ID4gPiAtLS0gL2Rldi9udWxsCj4gPiA+ID4gPiArKysgYi9pbmNsdWRlL3VhcGkvbGludXgveGxu eC1haS1lbmdpbmUuaAo+ID4gPiA+ID4gQEAgLTAsMCArMSwxMDcgQEAKPiA+ID4gPiA+ICsvKiBT UERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCBXSVRIIExpbnV4LXN5c2NhbGwtbm90ZSAq Lwo+ID4gPiA+ID4gKy8qCj4gPiA+ID4gPiArICogQ29weXJpZ2h0IChjKSAyMDIwLCBYaWxpbngg SW5jLgo+ID4gPiA+ID4gKyAqLwo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gKyNpZm5kZWYgX1VBUElf QUlfRU5HSU5FX0hfCj4gPiA+ID4gPiArI2RlZmluZSBfVUFQSV9BSV9FTkdJTkVfSF8KPiA+ID4g PiA+ICsKPiA+ID4gPiA+ICsjaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KPiA+ID4gPiA+ICsjaW5j bHVkZSA8bGludXgvdHlwZXMuaD4KPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICtlbnVtIGFpZV9yZWdf b3Agewo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgQUlFX1JFR19XUklURSwKPiA+ID4gPiA+ICt9 Owo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gKy8qIEFJIGVuZ2luZSBwYXJ0aXRpb24gaXMgaW4gdXNl ICovCj4gPiA+ID4gPiArI2RlZmluZSBYQUlFX1BBUlRfU1RBVFVTX0lOVVNFwqDCoMKgwqDCoMKg wqDCoMKgKDFVIDw8IDApCj4gPiA+ID4gPiArCj4gPiA+ID4gPiArLyoqCj4gPiA+ID4gPiArICog c3RydWN0IGFpZV9sb2NhdGlvbiAtIEFJRSBsb2NhdGlvbiBpbmZvcm1hdGlvbgo+ID4gPiA+ID4g KyAqIEBjb2w6IGNvbHVtbiBpZAo+ID4gPiA+ID4gKyAqIEByb3c6IHJvdyBpZAo+ID4gPiA+ID4g KyAqLwo+ID4gPiA+ID4gK3N0cnVjdCBhaWVfbG9jYXRpb24gewo+ID4gPiA+ID4gK8KgwqDCoMKg wqDCoMKgX191MzIgY29sOwo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgX191MzIgcm93Owo+ID4g PiA+ID4gK307Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiArLyoqCj4gPiA+ID4gPiArICogc3RydWN0 IGFpZV9yYW5nZSAtIEFJRSByYW5nZSBpbmZvcm1hdGlvbgo+ID4gPiA+ID4gKyAqIEBzdGFydDog c3RhcnQgdGlsZSBsb2NhdGlvbgo+ID4gPiA+ID4gKyAqIEBzaXplOiBzaXplIG9mIHRoZSByYW5n ZSwgbnVtYmVyIG9mIGNvbHVtbnMgYW5kIHJvd3MKPiA+ID4gPiA+ICsgKi8KPiA+ID4gPiA+ICtz dHJ1Y3QgYWllX3JhbmdlIHsKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBhaWVfbG9j YXRpb24gc3RhcnQ7Cj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgYWllX2xvY2F0aW9u IHNpemU7Cj4gPiA+ID4gPiArfTsKPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICsvKioKPiA+ID4gPiA+ ICsgKiBzdHJ1Y3QgYWllX3JlZ19hcmdzIC0gQUlFIGFjY2VzcyByZWdpc3RlciBhcmd1bWVudHMK PiA+ID4gPiA+ICsgKiBAb3A6IGlmIHRoaXMgcmVxdWVzdCBpcyB0byByZWFkLCB3cml0ZSBvciBw b2xsIHJlZ2lzdGVyCj4gPiA+ID4gPiArICogQG1hc2s6IG1hc2sgZm9yIG1hc2sgd3JpdGUsIDAg Zm9yIG5vdCBtYXNrIHdyaXRlCj4gPiA+ID4gPiArICogQG9mZnNldDogb2Zmc2V0IG9mIHJlZ2lz dGVyIHRvIHRoZSBzdGFydCBvZiBhbiBBSSBlbmdpbmUgcGFydGl0aW9uCj4gPiA+ID4gPiArICog QHZhbDogdmFsdWUgdG8gd3JpdGUgb3IgZ2V0Cj4gPiA+ID4gPiArICovCj4gPiA+ID4gPiArc3Ry dWN0IGFpZV9yZWdfYXJncyB7Cj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqBlbnVtIGFpZV9yZWdf b3Agb3A7Cj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqBfX3UzMiBtYXNrOwo+ID4gPiA+ID4gK8Kg wqDCoMKgwqDCoMKgX191NjQgb2Zmc2V0Owo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgX191MzIg dmFsOwo+ID4gPiA+ID4gK307Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiArLyoqCj4gPiA+ID4gPiAr ICogc3RydWN0IGFpZV9yYW5nZV9hcmdzIC0gQUlFIHJhbmdlIHJlcXVlc3QgYXJndW1lbnRzCj4g PiA+ID4gPiArICogQHBhcnRpdGlvbl9pZDogcGFydGl0aW9uIGlkLiBJdCBpcyB1c2VkIHRvIGlk ZW50aWZ5IHRoZQo+ID4gPiA+ID4gKyAqwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBBSSBl bmdpbmUgcGFydGl0aW9uIGluIHRoZSBzeXN0ZW0uCj4gPiA+ID4gPiArICogQHVpZDogaW1hZ2Ug aWRlbnRpZmllciBsb2FkZWQgb24gdGhlIEFJIGVuZ2luZSBwYXJ0aXRpb24KPiA+ID4gPiA+ICsg KiBAcmFuZ2U6IHJhbmdlIG9mIEFJRSB0aWxlcwo+ID4gPiA+ID4gKyAqIEBzdGF0dXM6IGluZGlj YXRlIGlmIHRoZSBBSSBlbmdpbmUgaXMgaW4gdXNlLgo+ID4gPiA+ID4gKyAqwqDCoMKgwqDCoMKg wqDCoCAwIG1lYW5zIG5vdCBpbiB1c2VkLCBvdGhlcndpc2UsIGluIHVzZS4KPiA+ID4gPiA+ICsg Ki8KPiA+ID4gPiA+ICtzdHJ1Y3QgYWllX3JhbmdlX2FyZ3Mgewo+ID4gPiA+ID4gK8KgwqDCoMKg wqDCoMKgX191MzIgcGFydGl0aW9uX2lkOwo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgX191MzIg dWlkOwo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGFpZV9yYW5nZSByYW5nZTsKPiA+ ID4gPiA+ICvCoMKgwqDCoMKgwqDCoF9fdTMyIHN0YXR1czsKPiA+ID4gPiA+ICt9Owo+ID4gPiA+ ID4gKwo+ID4gPiA+ID4gKy8qKgo+ID4gPiA+ID4gKyAqIHN0cnVjdCBhaWVfcGFydGl0aW9uX3F1 ZXJ5IC0gQUlFIHBhcnRpdGlvbiBxdWVyeSBhcmd1bWVudHMKPiA+ID4gPiA+ICsgKiBAcGFydGl0 aW9uX2NudDogbnVtYmVyIG9mIGRlZmluZWQgcGFydGl0aW9ucyBpbiB0aGUgc3lzdGVtCj4gPiA+ ID4gPiArICogQHBhcnRpdGlvbnM6IGJ1ZmZlciB0byBzdG9yZSBkZWZpbmVkIHBhcnRpdGlvbnMg aW5mb3JtYXRpb24uCj4gPiA+ID4gPiArICovCj4gPiA+ID4gPiArc3RydWN0IGFpZV9wYXJ0aXRp b25fcXVlcnkgewo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGFpZV9yYW5nZV9hcmdz ICpwYXJ0aXRpb25zOwo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgX191MzIgcGFydGl0aW9uX2Nu dDsKPiA+ID4gPiA+ICt9Owo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gKy8qKgo+ID4gPiA+ID4gKyAq IHN0cnVjdCBhaWVfcGFydGl0aW9uX3JlcSAtIEFJRSByZXF1ZXN0IHBhcnRpdGlvbiBhcmd1bWVu dHMKPiA+ID4gPiA+ICsgKiBAcGFydGl0aW9uX2lkOiBwYXJ0aXRpb24gbm9kZSBpZC4gSXQgaXMg dXNlZCB0byBpZGVudGlmeSB0aGUgQUkgZW5naW5lCj4gPiA+ID4gPiArICrCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIHBhcnRpdGlvbiBpbiB0aGUgc3lzdGVtLgo+ID4gPiA+ID4gKyAqIEB1 aWQ6IGltYWdlIGlkZW50aWZpZXIgbG9hZGVkIG9uIHRoZSBBSSBlbmdpbmUgcGFydGl0aW9uCj4g PiA+ID4gPiArICogQG1ldGFfZGF0YTogbWV0YSBkYXRhIHRvIGluZGljYXRlIHdoaWNoIHJlc291 cmNlcyB1c2VkIGJ5IGFwcGxpY2F0aW9uLgo+ID4gPiA+ID4gKyAqIEBmbGFnOiB1c2VkIGZvciBh cHBsaWNhdGlvbiB0byBpbmRpY2F0ZSBwYXJ0aWN1bGFyIGRyaXZlciByZXF1aXJlbWVudHMKPiA+ ID4gPiA+ICsgKsKgwqDCoMKgwqDCoCBhcHBsaWNhdGlvbiB3YW50cyB0byBoYXZlIGZvciB0aGUg cGFydGl0aW9uLiBlLmcuIGRvIG5vdCBjbGVhbgo+ID4gPiA+ID4gKyAqwqDCoMKgwqDCoMKgIHJl c291cmNlIHdoZW4gY2xvc2luZyB0aGUgcGFydGl0aW9uLgo+ID4gPiA+ID4gKyAqLwo+ID4gPiA+ ID4gK3N0cnVjdCBhaWVfcGFydGl0aW9uX3JlcSB7Cj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqBf X3UzMiBwYXJ0aXRpb25faWQ7Cj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqBfX3UzMiB1aWQ7Cj4g PiA+ID4gPiArwqDCoMKgwqDCoMKgwqBfX3U2NCBtZXRhX2RhdGE7Cj4gPiA+ID4gPiArwqDCoMKg wqDCoMKgwqBfX3UzMiBmbGFnOwo+ID4gPiA+ID4gK307Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiAr I2RlZmluZSBBSUVfSU9DVExfQkFTRSAnQScKPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICsvKiBBSSBl bmdpbmUgZGV2aWNlIElPQ1RMIG9wZXJhdGlvbnMgKi8KPiA+ID4gPiA+ICsjZGVmaW5lIEFJRV9F TlFVSVJFX1BBUlRfSU9DVEzCoMKgwqDCoMKgwqDCoMKgwqBfSU9XUihBSUVfSU9DVExfQkFTRSwg MHgxLCBcCj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3Qg YWllX3BhcnRpdGlvbl9xdWVyeSkKPiA+ID4gPiA+ICsjZGVmaW5lIEFJRV9SRVFVRVNUX1BBUlRf SU9DVEzCoMKgwqDCoMKgwqDCoMKgwqBfSU9SKEFJRV9JT0NUTF9CQVNFLCAweDIsIFwKPiA+ID4g PiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgYWllX3BhcnRpdGlvbl9y ZXEpCj4gPiA+ID4gPiArCj4gPiA+ID4gPiArLyogQUkgZW5naW5lIHBhcnRpdGlvbiBJT0NUTCBv cGVyYXRpb25zICovCj4gPiA+ID4gPiArI2RlZmluZSBBSUVfUkVHX0lPQ1RMwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgX0lPV1IoQUlFX0lPQ1RMX0JBU0UsIDB4OCwgXAo+ID4g PiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IGFpZV9yZWdfYXJn cykKPiA+ID4gPiA+ICsjZW5kaWYKPiA+ID4gX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX18KPiA+ID4gZHJpLWRldmVsIG1haWxpbmcgbGlzdAo+ID4gPiBkcmkt ZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCj4gPiA+IGh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0 b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVsCj4gX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX18KPiBkcmktZGV2ZWwgbWFpbGluZyBsaXN0Cj4gZHJp LWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwo+IGh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Au b3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVsCgotLSAKRGFuaWVsIFZldHRlcgpTb2Z0d2Fy ZSBFbmdpbmVlciwgSW50ZWwgQ29ycG9yYXRpb24KaHR0cDovL2Jsb2cuZmZ3bGwuY2gKCl9fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmxpbnV4LWFybS1rZXJu ZWwgbWFpbGluZyBsaXN0CmxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRw Oi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LWFybS1rZXJuZWwK