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=-11.5 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH, MAILING_LIST_MULTI,NICE_REPLY_A,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS, UNPARSEABLE_RELAY,USER_AGENT_SANE_1 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 C563AC433E4 for ; Fri, 17 Jul 2020 07:48:51 +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 6C9C82071A for ; Fri, 17 Jul 2020 07:48:51 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="JwqDq0E8" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 6C9C82071A Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=collabora.com 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-Type: Content-Transfer-Encoding:Cc:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:In-Reply-To:MIME-Version:Date:Message-ID:References: To:From:Subject:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=wXdZPF+edlgBZfPyY25mJnHlAkdasPUuEYuj83gm7DU=; b=JwqDq0E8vOKzgMFO/P4doP+fo pe9wy0oYpzUaWJnYsnf605juW+DLwaG/siK9Lq8kbh+b5zSPTPxiUDmZzypXSotEVDI9/jZKDZn1h navB8ACoN8503tdTzFJxFivyrgD/bDhBNj8kFc9eLmw/YLQsQczjy4Sam/7k9zczSajItQuv6P91L svDY3Ha8W5rsTi0qp9nTV2bSwgKYtEgtZ6bqIX4nfZEI2WqeC+mjvjUWdzCFrHEYfox2ZvglNwElE KFZyGGmVTANaebAxz/eXzYyA+dgP2lEqMoUUkpbWqJbglclV9ETJ8CA8qUnp5AnrB4u8bqgPxXQz2 YVqPfr6Vg==; Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1jwL4k-0007eX-9m; Fri, 17 Jul 2020 07:46:34 +0000 Received: from bhuna.collabora.co.uk ([2a00:1098:0:82:1000:25:2eeb:e3e3]) by merlin.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1jwL4f-0007dN-LD; Fri, 17 Jul 2020 07:46:32 +0000 Received: from [127.0.0.1] (localhost [127.0.0.1]) (Authenticated sender: dafna) with ESMTPSA id 404252A05BB Subject: Re: [PATCH v8 05/14] media: rkisp1: add Rockchip ISP1 subdev driver From: Dafna Hirschfeld To: Laurent Pinchart , Helen Koike References: <20190730184256.30338-1-helen.koike@collabora.com> <20190730184256.30338-6-helen.koike@collabora.com> <20190816001323.GF5011@pendragon.ideasonboard.com> <30b6367d-9088-d755-d041-904ff2a48130@collabora.com> Message-ID: <477cb6ec-1d78-b30c-f84d-388c1bde2567@collabora.com> Date: Fri, 17 Jul 2020 09:46:24 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.10.0 MIME-Version: 1.0 In-Reply-To: <30b6367d-9088-d755-d041-904ff2a48130@collabora.com> Content-Language: en-US X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20200717_034630_115334_5191FBE6 X-CRM114-Status: GOOD ( 28.23 ) 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: devicetree@vger.kernel.org, eddie.cai.linux@gmail.com, kernel@collabora.com, heiko@sntech.de, jacob2.chen@rock-chips.com, jeffy.chen@rock-chips.com, zyc@rock-chips.com, linux-kernel@vger.kernel.org, tfiga@chromium.org, linux-rockchip@lists.infradead.org, Allon Huang , Jacob Chen , hans.verkuil@cisco.com, sakari.ailus@linux.intel.com, zhengsq@rock-chips.com, mchehab@kernel.org, ezequiel@collabora.com, linux-arm-kernel@lists.infradead.org, linux-media@vger.kernel.org Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org SGksCgoKT24gMTEuMDcuMjAgMTM6MDQsIERhZm5hIEhpcnNjaGZlbGQgd3JvdGU6Cj4gSGkgTGF1 cmVudCwKPiAKPiBPbiAxNi4wOC4xOSAwMjoxMywgTGF1cmVudCBQaW5jaGFydCB3cm90ZToKPj4g SGVsbG8gSGVsZW4sCj4+Cj4+IFRoYW5rIHlvdSBmb3IgdGhlIHBhdGNoLgo+Pgo+PiBPbiBUdWUs IEp1bCAzMCwgMjAxOSBhdCAwMzo0Mjo0N1BNIC0wMzAwLCBIZWxlbiBLb2lrZSB3cm90ZToKPj4+ IEZyb206IEphY29iIENoZW4gPGphY29iMi5jaGVuQHJvY2stY2hpcHMuY29tPgo+Pj4KPj4+IEFk ZCB0aGUgc3ViZGV2IGRyaXZlciBmb3Igcm9ja2NoaXAgaXNwMS4KPj4+Cj4+PiBTaWduZWQtb2Zm LWJ5OiBKYWNvYiBDaGVuIDxqYWNvYjIuY2hlbkByb2NrLWNoaXBzLmNvbT4KPj4+IFNpZ25lZC1v ZmYtYnk6IFNodW5xaWFuIFpoZW5nIDx6aGVuZ3NxQHJvY2stY2hpcHMuY29tPgo+Pj4gU2lnbmVk LW9mZi1ieTogWWljaG9uZyBaaG9uZyA8enljQHJvY2stY2hpcHMuY29tPgo+Pj4gU2lnbmVkLW9m Zi1ieTogSmFjb2IgQ2hlbiA8Y2NAcm9jay1jaGlwcy5jb20+Cj4+PiBTaWduZWQtb2ZmLWJ5OiBF ZGRpZSBDYWkgPGVkZGllLmNhaS5saW51eEBnbWFpbC5jb20+Cj4+PiBTaWduZWQtb2ZmLWJ5OiBK ZWZmeSBDaGVuIDxqZWZmeS5jaGVuQHJvY2stY2hpcHMuY29tPgo+Pj4gU2lnbmVkLW9mZi1ieTog QWxsb24gSHVhbmcgPGFsbG9uLmh1YW5nQHJvY2stY2hpcHMuY29tPgo+Pj4gU2lnbmVkLW9mZi1i eTogVG9tYXN6IEZpZ2EgPHRmaWdhQGNocm9taXVtLm9yZz4KPj4+IFtmaXhlZCB1bmtub3duIGVu dGl0eSB0eXBlIC8gc3dpdGNoZWQgdG8gUElYRUxfUkFURV0KPj4+IFNpZ25lZC1vZmYtYnk6IEV6 ZXF1aWVsIEdhcmNpYSA8ZXplcXVpZWxAY29sbGFib3JhLmNvbT4KPj4+IFt1cGRhdGUgZm9yIHVw c3RyZWFtXQo+Pj4gU2lnbmVkLW9mZi1ieTogSGVsZW4gS29pa2UgPGhlbGVuLmtvaWtlQGNvbGxh Ym9yYS5jb20+Cj4+Pgo+Pj4gLS0tCj4+Pgo+Pj4gQ2hhbmdlcyBpbiB2ODogTm9uZQo+Pj4gQ2hh bmdlcyBpbiB2NzoKPj4+IC0gZml4ZWQgd2FybmluZyBiZWNhdXNlIG9mIHVua25vd24gZW50aXR5 IHR5cGUKPj4+IC0gZml4ZWQgdjRsMi1jb21wbGlhbmNlIGVycm9ycyByZWdhcmRpbmcgcmtpc3Ax IGZvcm1hdHMsIHRyeSBmb3JtYXRzCj4+PiBhbmQgZGVmYXVsdCB2YWx1ZXMKPj4+IC0gZml4IHR5 cG8gcmlrc3AxL3JraXNwMQo+Pj4gLSByZWRlc2lnbjogcmVtb3ZlIG1pcGkvY3NpIHN1YmRldmlj ZSwgc2Vuc29ycyBjb25uZWN0IGRpcmVjdGx5IHRvIHRoZQo+Pj4gaXNwIHN1YmRldmljZSBpbiB0 aGUgbWVkaWEgdG9wb2xvZ3kgbm93LiBBcyBhIGNvbnNlcXVlbmNlLCByZW1vdmUgdGhlCj4+PiBo YWNrIGluIG1pcGlkcGh5X2dfbWJ1c19jb25maWcoKSB3aGVyZSBpbmZvcm1hdGlvbiBmcm9tIHRo ZSBzZW5zb3Igd2FzCj4+PiBiZWluZyBwcm9wYWdhdGVkIHRocm91Z2ggdGhlIHRvcG9sb2d5Lgo+ Pj4gLSBGcm9tIHRoZSBvbGQgZHBoeToKPj4+IMKgwqDCoMKgwqDCoMKgwqAgKiBjYWNoZSBnZXRf cmVtb3RlX3NlbnNvcigpIGluIHNfc3RyZWFtCj4+PiDCoMKgwqDCoMKgwqDCoMKgICogdXNlIFY0 TDJfQ0lEX1BJWEVMX1JBVEUgaW5zdGVhZCBvZiBWNEwyX0NJRF9MSU5LX0ZSRVEKPj4+IC0gUmVw bGFjZSBzdHJlYW0gc3RhdGUgd2l0aCBhIGJvb2xlYW4KPj4+IC0gY29kZSBzdHlsaW5nIGFuZCBj aGVja3BhdGNoIGZpeGVzCj4+PiAtIGZpeCBzdG9wX3N0cmVhbSAocmV0dXJuIGFmdGVyIGNhbGxp bmcgc3RvcCwgZG8gbm90IHJlZW5hYmxlIHRoZSBzdHJlYW0pCj4+PiAtIGZpeCBya2lzcDFfaXNw X3NkX2dldF9zZWxlY3Rpb24gd2hlbiBWNEwyX1NVQkRFVl9GT1JNQVRfVFJZIGlzIHNldAo+Pj4g LSBmaXggZ2V0IGZvcm1hdCBpbiBvdXRwdXQgKGlzcF9zZC0+b3V0X2ZtdC5tYnVzX2NvZGUgd2Fz IGJlaW5nIGlnbm9yZWQpCj4+PiAtIHMvaW50cHV0L2lucHV0Cj4+PiAtIHJlbW92ZSAjZGVmaW5l IHNkX3RvX2lzcF9zZChfc2QpLCBhZGQgYSBzdGF0aWMgaW5saW5lIGFzIGl0IHdpbGwgYmUKPj4+ IHJldXNlZCBieSB0aGUgY2FwdHVyZQo+Pj4KPj4+IMKgIGRyaXZlcnMvbWVkaWEvcGxhdGZvcm0v cm9ja2NoaXAvaXNwMS9ya2lzcDEuYyB8IDEyODYgKysrKysrKysrKysrKysrKysKPj4+IMKgIGRy aXZlcnMvbWVkaWEvcGxhdGZvcm0vcm9ja2NoaXAvaXNwMS9ya2lzcDEuaCB8wqAgMTExICsrCj4+ PiDCoCAyIGZpbGVzIGNoYW5nZWQsIDEzOTcgaW5zZXJ0aW9ucygrKQo+Pj4gwqAgY3JlYXRlIG1v ZGUgMTAwNjQ0IGRyaXZlcnMvbWVkaWEvcGxhdGZvcm0vcm9ja2NoaXAvaXNwMS9ya2lzcDEuYwo+ Pj4gwqAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvbWVkaWEvcGxhdGZvcm0vcm9ja2NoaXAv aXNwMS9ya2lzcDEuaAo+Pj4KPj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3BsYXRmb3Jt L3JvY2tjaGlwL2lzcDEvcmtpc3AxLmMgYi9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL3JvY2tjaGlw L2lzcDEvcmtpc3AxLmMKPj4+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4+PiBpbmRleCAwMDAwMDAw MDAwMDAuLjZkMGMwZmZiNWUwMwo+Pj4gLS0tIC9kZXYvbnVsbAo+Pj4gKysrIGIvZHJpdmVycy9t ZWRpYS9wbGF0Zm9ybS9yb2NrY2hpcC9pc3AxL3JraXNwMS5jCj4+PiBAQCAtMCwwICsxLDEyODYg QEAKPj4+ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogKEdQTC0yLjArIE9SIE1JVCkKPj4+ ICsvKgo+Pj4gKyAqIFJvY2tjaGlwIGlzcDEgZHJpdmVyCj4+Cj4+IFNob3VsZG4ndCBlYWNoIGZp bGUgZGVzY3JpYmUgd2hhdCBpdCBjb250YWlucyA/IE1heWJlCj4+Cj4+IMKgICogUm9ja2NoaXAg SVNQMSBEcml2ZXIgLSBJU1AgQ29yZQo+Pgo+PiBmb3IgdGhpcyBvbmUgPyBTYW1lIGZvciBvdGhl ciAuYyBvciAuaCBmaWxlcy4KPj4KPj4+ICsgKgo+Pj4gKyAqIENvcHlyaWdodCAoQykgMjAxNyBS b2NrY2hpcCBFbGVjdHJvbmljcyBDby4sIEx0ZC4KPj4+ICsgKi8KPj4+ICsKPj4+ICsjaW5jbHVk ZSA8bGludXgvaW9wb2xsLmg+Cj4+PiArI2luY2x1ZGUgPGxpbnV4L3BoeS9waHkuaD4KPj4+ICsj aW5jbHVkZSA8bGludXgvcGh5L3BoeS1taXBpLWRwaHkuaD4KPj4+ICsjaW5jbHVkZSA8bGludXgv cG1fcnVudGltZS5oPgo+Pj4gKyNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KPj4+ICsjaW5j bHVkZSA8bGludXgvdm1hbGxvYy5oPgo+Pj4gKyNpbmNsdWRlIDxtZWRpYS92NGwyLWV2ZW50Lmg+ Cj4+PiArCj4+PiArI2luY2x1ZGUgImNvbW1vbi5oIgo+Pj4gKyNpbmNsdWRlICJyZWdzLmgiCj4+ Cj4+IGNvbW1vbi5oIGFuZCByZWdzLmggYXJlbid0IGF2YWlsYWJsZSB5ZXQuIFRoaXMgd29uJ3Qg YnJlYWsgYmlzZWN0aW9uIGFzCj4+IHRoaXMgZmlsZSBpc24ndCByZWZlcmVuY2VkIGZyb20gdGhl IG1ha2VmaWxlIHlldCwgYnV0IGl0IG1ha2VzIGl0IGEgYml0Cj4+IGFubm95aW5nIHdoZW4gcmV2 aWV3aW5nIHBhdGNoZXMgaW4gb3JkZXIgOi1TCj4+Cj4+PiArCj4+PiArI2RlZmluZSBDSUZfSVNQ X0lOUFVUX1dfTUFYwqDCoMKgwqDCoMKgwqAgNDAzMgo+Pj4gKyNkZWZpbmUgQ0lGX0lTUF9JTlBV VF9IX01BWMKgwqDCoMKgwqDCoMKgIDMwMjQKPj4+ICsjZGVmaW5lIENJRl9JU1BfSU5QVVRfV19N SU7CoMKgwqDCoMKgwqDCoCAzMgo+Pj4gKyNkZWZpbmUgQ0lGX0lTUF9JTlBVVF9IX01JTsKgwqDC oMKgwqDCoMKgIDMyCj4+PiArI2RlZmluZSBDSUZfSVNQX09VVFBVVF9XX01BWMKgwqDCoMKgwqDC oMKgIENJRl9JU1BfSU5QVVRfV19NQVgKPj4+ICsjZGVmaW5lIENJRl9JU1BfT1VUUFVUX0hfTUFY wqDCoMKgwqDCoMKgwqAgQ0lGX0lTUF9JTlBVVF9IX01BWAo+Pj4gKyNkZWZpbmUgQ0lGX0lTUF9P VVRQVVRfV19NSU7CoMKgwqDCoMKgwqDCoCBDSUZfSVNQX0lOUFVUX1dfTUlOCj4+PiArI2RlZmlu ZSBDSUZfSVNQX09VVFBVVF9IX01JTsKgwqDCoMKgwqDCoMKgIENJRl9JU1BfSU5QVVRfSF9NSU4K Pj4+ICsKPj4+ICsvKgo+Pj4gKyAqIE5PVEU6IE1JUEkgY29udHJvbGxlciBhbmQgaW5wdXQgTVVY IGFyZSBhbHNvIGNvbmZpZ3VyZWQgaW4gdGhpcyBmaWxlLAo+Pj4gKyAqIGJlY2F1c2UgSVNQIFN1 YmRldiBpcyBub3Qgb25seSBkZXNjcmliZSBJU1Agc3VibW9kdWxlKGlucHV0IHNpemUsZm9ybWF0 LAo+Pj4gKyAqIG91dHB1dCBzaXplLCBmb3JtYXQpLCBidXQgYWxzbyBhIHZpcnR1YWwgcm91dGUg ZGV2aWNlLgo+Pj4gKyAqLwo+Pj4gKwo+Pj4gKy8qCj4+PiArICogVGhlcmUgYXJlIG1hbnkgdmFy aWFibGVzIG5hbWVkIHdpdGggZm9ybWF0L2ZyYW1lIGluIGJlbG93IGNvZGUsCj4+PiArICogcGxl YXNlIHNlZSBoZXJlIGZvciB0aGVpciBtZWFuaW5nLgo+Pj4gKyAqCj4+PiArICogQ3JvcHBpbmcg cmVnaW9ucyBvZiBJU1AKPj4+ICsgKgo+Pj4gKyAqICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCj4+PiArICogfCBTZW5zb3IgaW1hZ2XC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB8Cj4+PiArICogfCArLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK8KgwqAgfAo+Pj4gKyAqIHwgfCBJ U1BfQUNRIChmb3IgYmxhY2sgbGV2ZWwpwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIHzCoMKgIHwKPj4+ICsgKiB8IHwgaW5fZnJtwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgfMKgwqAgfAo+Pj4gKyAqIHwgfCArLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rwqDCoMKgIHzCoMKgIHwKPj4+ICsgKiB8IHwgfMKgwqDC oCBJU1BfT1VUwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCB8wqDCoMKgIHzCoMKgIHwKPj4+ICsgKiB8IHwgfMKgwqDCoCBpbl9j cm9wwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCB8wqDCoMKgIHzCoMKgIHwKPj4KPj4gaW5fY3JvcCBhdCB0aGUgSVNQIG91dHB1 dCA/IFRoYXQgc2VlbXMgYSBiaXQgd2VpcmQuIEknbSBndWVzc2luZyB0aGF0Cj4+IHRoaXMgaXMg cmVhbGx5IHRoZSBJU1Agb3V0cHV0LCB3aGlsZSBJU1BfSVMgaXMgcmVsYXRlZCB0byB0aGUgcmVz aXplciA/Cj4+Cj4+PiArICogfCB8IHzCoMKgwqAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLSvCoMKgwqDCoCB8wqDCoMKgIHzCoMKgIHwKPj4+ICsgKiB8IHwgfMKgwqDCoCB8wqDC oCBJU1BfSVPCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHzC oMKgwqDCoCB8wqDCoMKgIHzCoMKgIHwKPj4+ICsgKiB8IHwgfMKgwqDCoCB8wqDCoCBya2lzcDFf aXNwX3N1YmRldjogb3V0X2Nyb3DCoMKgIHzCoMKgwqDCoCB8wqDCoMKgIHzCoMKgIHwKPj4+ICsg KiB8IHwgfMKgwqDCoCArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK8KgwqDCoMKg IHzCoMKgwqAgfMKgwqAgfAo+Pj4gKyAqIHwgfCArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0rwqDCoMKgIHzCoMKgIHwKPj4+ICsgKiB8ICstLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rwqDCoCB8Cj4+PiArICogKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsK Pj4+ICsgKi8KPj4+ICsKPj4+ICtzdGF0aWMgaW5saW5lIHN0cnVjdCBya2lzcDFfZGV2aWNlICpz ZF90b19pc3BfZGV2KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QpCj4+PiArewo+Pj4gK8KgwqDCoCBy ZXR1cm4gY29udGFpbmVyX29mKHNkLT52NGwyX2Rldiwgc3RydWN0IHJraXNwMV9kZXZpY2UsIHY0 bDJfZGV2KTsKPj4+ICt9Cj4+PiArCj4+PiArLyogR2V0IHNlbnNvciBieSBlbmFibGVkIG1lZGlh IGxpbmsgKi8KPj4+ICtzdGF0aWMgc3RydWN0IHY0bDJfc3ViZGV2ICpnZXRfcmVtb3RlX3NlbnNv cihzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkKQo+Pj4gK3sKPj4+ICvCoMKgwqAgc3RydWN0IG1lZGlh X3BhZCAqbG9jYWwsICpyZW1vdGU7Cj4+PiArwqDCoMKgIHN0cnVjdCBtZWRpYV9lbnRpdHkgKnNl bnNvcl9tZTsKPj4+ICsKPj4+ICvCoMKgwqAgbG9jYWwgPSAmc2QtPmVudGl0eS5wYWRzW1JLSVNQ MV9JU1BfUEFEX1NJTktdOwo+Pj4gK8KgwqDCoCByZW1vdGUgPSBtZWRpYV9lbnRpdHlfcmVtb3Rl X3BhZChsb2NhbCk7Cj4+PiArwqDCoMKgIGlmICghcmVtb3RlKSB7Cj4+PiArwqDCoMKgwqDCoMKg wqAgdjRsMl93YXJuKHNkLCAiTm8gbGluayBiZXR3ZWVuIGlzcCBhbmQgc2Vuc29yXG4iKTsKPj4+ ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gTlVMTDsKPj4+ICvCoMKgwqAgfQo+Pj4gKwo+Pj4gK8Kg wqDCoCBzZW5zb3JfbWUgPSBtZWRpYV9lbnRpdHlfcmVtb3RlX3BhZChsb2NhbCktPmVudGl0eTsK Pj4+ICvCoMKgwqAgcmV0dXJuIG1lZGlhX2VudGl0eV90b192NGwyX3N1YmRldihzZW5zb3JfbWUp Owo+Pj4gK30KPj4+ICsKPj4+ICtzdGF0aWMgc3RydWN0IHJraXNwMV9zZW5zb3IgKnNkX3RvX3Nl bnNvcihzdHJ1Y3Qgcmtpc3AxX2RldmljZSAqZGV2LAo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IHY0bDJfc3ViZGV2ICpzZCkK Pj4+ICt7Cj4+PiArwqDCoMKgIHN0cnVjdCBya2lzcDFfc2Vuc29yICpzZW5zb3I7Cj4+PiArCj4+ PiArwqDCoMKgIGxpc3RfZm9yX2VhY2hfZW50cnkoc2Vuc29yLCAmZGV2LT5zZW5zb3JzLCBsaXN0 KQo+Pj4gK8KgwqDCoMKgwqDCoMKgIGlmIChzZW5zb3ItPnNkID09IHNkKQo+Pj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqAgcmV0dXJuIHNlbnNvcjsKPj4+ICsKPj4+ICvCoMKgwqAgcmV0dXJuIE5V TEw7Cj4+PiArfQo+Pj4gKwo+Pj4gKy8qKioqKioqKioqKioqKioqwqAgcmVnaXN0ZXIgb3BlcmF0 aW9ucyAqKioqKioqKioqKioqKioqLwo+Pj4gKwo+Pj4gKy8qCj4+PiArICogSW1hZ2UgU3RhYmls aXphdGlvbi4KPj4+ICsgKiBUaGlzIHNob3VsZCBvbmx5IGJlIGNhbGxlZCB3aGVuIGNvbmZpZ3Vy aW5nIENJRgo+Pj4gKyAqIG9yIGF0IHRoZSBmcmFtZSBlbmQgaW50ZXJydXB0Cj4+PiArICovCj4+ PiArc3RhdGljIHZvaWQgcmtpc3AxX2NvbmZpZ19pc20oc3RydWN0IHJraXNwMV9kZXZpY2UgKmRl dikKPj4+ICt7Cj4+PiArwqDCoMKgIHZvaWQgX19pb21lbSAqYmFzZSA9IGRldi0+YmFzZV9hZGRy Owo+Pj4gK8KgwqDCoCBzdHJ1Y3QgdjRsMl9yZWN0ICpvdXRfY3JvcCA9ICZkZXYtPmlzcF9zZGV2 Lm91dF9jcm9wOwo+Pj4gK8KgwqDCoCB1MzIgdmFsOwo+Pj4gKwo+Pj4gK8KgwqDCoCB3cml0ZWwo MCwgYmFzZSArIENJRl9JU1BfSVNfUkVDRU5URVIpOwo+Pgo+PiBIb3cgYWJvdXQgcmVhZC93cml0 ZSB3cmFwcGVycyB0aGF0IHRha2UgYSBya2lzcDFfZGV2aWNlIHBvaW50ZXIsIGEKPj4gcmVnaXN0 ZXIgb2Zmc2V0IGFuZCBhIHZhbHVlIChmb3IgdGhlIHdyaXRlIHdyYXBwZXIpIGFuZCBjb21wdXRl Cj4+IGRldi0+YmFzZV9hZGRyICsgb2Zmc2V0IGludGVybmFsbHkgPyBUaGF0IHdvdWxkIG1ha2Ug dGhlIGNvZGUgZWFzaWVyIHRvCj4+IHJlYWQuCj4+Cj4+PiArwqDCoMKgIHdyaXRlbCgwLCBiYXNl ICsgQ0lGX0lTUF9JU19NQVhfRFgpOwo+Pj4gK8KgwqDCoCB3cml0ZWwoMCwgYmFzZSArIENJRl9J U1BfSVNfTUFYX0RZKTsKPj4+ICvCoMKgwqAgd3JpdGVsKDAsIGJhc2UgKyBDSUZfSVNQX0lTX0RJ U1BMQUNFKTsKPj4+ICvCoMKgwqAgd3JpdGVsKG91dF9jcm9wLT5sZWZ0LCBiYXNlICsgQ0lGX0lT UF9JU19IX09GRlMpOwo+Pj4gK8KgwqDCoCB3cml0ZWwob3V0X2Nyb3AtPnRvcCwgYmFzZSArIENJ Rl9JU1BfSVNfVl9PRkZTKTsKPj4+ICvCoMKgwqAgd3JpdGVsKG91dF9jcm9wLT53aWR0aCwgYmFz ZSArIENJRl9JU1BfSVNfSF9TSVpFKTsKPj4+ICvCoMKgwqAgd3JpdGVsKG91dF9jcm9wLT5oZWln aHQsIGJhc2UgKyBDSUZfSVNQX0lTX1ZfU0laRSk7Cj4+PiArCj4+PiArwqDCoMKgIC8qIElTKElt YWdlIFN0YWJpbGl6YXRpb24pIGlzIGFsd2F5cyBvbiwgd29ya2luZyBhcyBvdXRwdXQgY3JvcCAq Lwo+Pj4gK8KgwqDCoCB3cml0ZWwoMSwgYmFzZSArIENJRl9JU1BfSVNfQ1RSTCk7Cj4+PiArwqDC oMKgIHZhbCA9IHJlYWRsKGJhc2UgKyBDSUZfSVNQX0NUUkwpOwo+Pj4gK8KgwqDCoCB2YWwgfD0g Q0lGX0lTUF9DVFJMX0lTUF9DRkdfVVBEOwo+Pj4gK8KgwqDCoCB3cml0ZWwodmFsLCBiYXNlICsg Q0lGX0lTUF9DVFJMKTsKPj4+ICt9Cj4+PiArCj4+PiArLyoKPj4+ICsgKiBjb25maWd1cmUgaXNw IGJsb2NrcyB3aXRoIGlucHV0IGZvcm1hdCwgc2l6ZS4uLi4uLgo+Pj4gKyAqLwo+Pj4gK3N0YXRp YyBpbnQgcmtpc3AxX2NvbmZpZ19pc3Aoc3RydWN0IHJraXNwMV9kZXZpY2UgKmRldikKPj4+ICt7 Cj4+PiArwqDCoMKgIHUzMiBpc3BfY3RybCA9IDAsIGlycV9tYXNrID0gMCwgYWNxX211bHQgPSAw LCBzaWduYWwgPSAwOwo+Pj4gK8KgwqDCoCBzdHJ1Y3QgdjRsMl9yZWN0ICpvdXRfY3JvcCwgKmlu X2Nyb3A7Cj4+PiArwqDCoMKgIHZvaWQgX19pb21lbSAqYmFzZSA9IGRldi0+YmFzZV9hZGRyOwo+ Pj4gK8KgwqDCoCBzdHJ1Y3QgdjRsMl9tYnVzX2ZyYW1lZm10ICppbl9mcm07Cj4+PiArwqDCoMKg IHN0cnVjdCBpc3BzZF9vdXRfZm10ICpvdXRfZm10Owo+Pj4gK8KgwqDCoCBzdHJ1Y3Qgcmtpc3Ax X3NlbnNvciAqc2Vuc29yOwo+Pj4gK8KgwqDCoCBzdHJ1Y3QgaXNwc2RfaW5fZm10ICppbl9mbXQ7 Cj4+PiArCj4+PiArwqDCoMKgIHNlbnNvciA9IGRldi0+YWN0aXZlX3NlbnNvcjsKPj4+ICvCoMKg wqAgaW5fZnJtID0gJmRldi0+aXNwX3NkZXYuaW5fZnJtOwo+Pj4gK8KgwqDCoCBpbl9mbXQgPSAm ZGV2LT5pc3Bfc2Rldi5pbl9mbXQ7Cj4+PiArwqDCoMKgIG91dF9mbXQgPSAmZGV2LT5pc3Bfc2Rl di5vdXRfZm10Owo+Pj4gK8KgwqDCoCBvdXRfY3JvcCA9ICZkZXYtPmlzcF9zZGV2Lm91dF9jcm9w Owo+Pj4gK8KgwqDCoCBpbl9jcm9wID0gJmRldi0+aXNwX3NkZXYuaW5fY3JvcDsKPj4+ICsKPj4+ ICvCoMKgwqAgaWYgKGluX2ZtdC0+Zm10X3R5cGUgPT0gRk1UX0JBWUVSKSB7Cj4+PiArwqDCoMKg wqDCoMKgwqAgYWNxX211bHQgPSAxOwo+Pj4gK8KgwqDCoMKgwqDCoMKgIGlmIChvdXRfZm10LT5m bXRfdHlwZSA9PSBGTVRfQkFZRVIpIHsKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlmIChz ZW5zb3ItPm1idXMudHlwZSA9PSBWNEwyX01CVVNfQlQ2NTYpCj4+PiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIGlzcF9jdHJsID0KPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBDSUZfSVNQX0NUUkxfSVNQX01PREVfUkFXX1BJQ1RfSVRVNjU2Owo+Pj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZWxzZQo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBpc3BfY3RybCA9Cj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgQ0lGX0lTUF9DVFJMX0lTUF9NT0RFX1JBV19QSUNUOwo+Pj4gK8KgwqDCoMKgwqDCoMKg IH0gZWxzZSB7Cj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB3cml0ZWwoQ0lGX0lTUF9ERU1P U0FJQ19USCgweGMpLAo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBi YXNlICsgQ0lGX0lTUF9ERU1PU0FJQyk7Cj4+PiArCj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBpZiAoc2Vuc29yLT5tYnVzLnR5cGUgPT0gVjRMMl9NQlVTX0JUNjU2KQo+Pj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpc3BfY3RybCA9IENJRl9JU1BfQ1RSTF9JU1BfTU9ERV9C QVlFUl9JVFU2NTY7Cj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBlbHNlCj4+PiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlzcF9jdHJsID0gQ0lGX0lTUF9DVFJMX0lTUF9NT0RF X0JBWUVSX0lUVTYwMTsKPj4+ICvCoMKgwqDCoMKgwqDCoCB9Cj4+PiArwqDCoMKgIH0gZWxzZSBp ZiAoaW5fZm10LT5mbXRfdHlwZSA9PSBGTVRfWVVWKSB7Cj4+PiArwqDCoMKgwqDCoMKgwqAgYWNx X211bHQgPSAyOwo+Pj4gK8KgwqDCoMKgwqDCoMKgIGlmIChzZW5zb3ItPm1idXMudHlwZSA9PSBW NEwyX01CVVNfQ1NJMl9EUEhZKSB7Cj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpc3BfY3Ry bCA9IENJRl9JU1BfQ1RSTF9JU1BfTU9ERV9JVFU2MDE7Cj4+PiArwqDCoMKgwqDCoMKgwqAgfSBl bHNlIHsKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlmIChzZW5zb3ItPm1idXMudHlwZSA9 PSBWNEwyX01CVVNfQlQ2NTYpCj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlz cF9jdHJsID0gQ0lGX0lTUF9DVFJMX0lTUF9NT0RFX0lUVTY1NjsKPj4+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIGVsc2UKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaXNwX2N0 cmwgPSBDSUZfSVNQX0NUUkxfSVNQX01PREVfSVRVNjAxOwo+Pj4gKwo+Pj4gK8KgwqDCoMKgwqDC oMKgIH0KPj4+ICsKPj4+ICvCoMKgwqDCoMKgwqDCoCBpcnFfbWFzayB8PSBDSUZfSVNQX0RBVEFf TE9TUzsKPj4+ICvCoMKgwqAgfQo+Pj4gKwo+Pj4gK8KgwqDCoCAvKiBTZXQgdXAgaW5wdXQgYWNx dWlzaXRpb24gcHJvcGVydGllcyAqLwo+Pj4gK8KgwqDCoCBpZiAoc2Vuc29yLT5tYnVzLnR5cGUg PT0gVjRMMl9NQlVTX0JUNjU2IHx8Cj4+PiArwqDCoMKgwqDCoMKgwqAgc2Vuc29yLT5tYnVzLnR5 cGUgPT0gVjRMMl9NQlVTX1BBUkFMTEVMKSB7Cj4+PiArwqDCoMKgwqDCoMKgwqAgaWYgKHNlbnNv ci0+bWJ1cy5mbGFncyAmIFY0TDJfTUJVU19QQ0xLX1NBTVBMRV9SSVNJTkcpCj4+PiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBzaWduYWwgPSBDSUZfSVNQX0FDUV9QUk9QX1BPU19FREdFOwo+Pj4g K8KgwqDCoCB9Cj4+PiArCj4+PiArwqDCoMKgIGlmIChzZW5zb3ItPm1idXMudHlwZSA9PSBWNEwy X01CVVNfUEFSQUxMRUwpIHsKPj4+ICvCoMKgwqDCoMKgwqDCoCBpZiAoc2Vuc29yLT5tYnVzLmZs YWdzICYgVjRMMl9NQlVTX1ZTWU5DX0FDVElWRV9MT1cpCj4+PiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBzaWduYWwgfD0gQ0lGX0lTUF9BQ1FfUFJPUF9WU1lOQ19MT1c7Cj4+PiArCj4+PiArwqDC oMKgwqDCoMKgwqAgaWYgKHNlbnNvci0+bWJ1cy5mbGFncyAmIFY0TDJfTUJVU19IU1lOQ19BQ1RJ VkVfTE9XKQo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc2lnbmFsIHw9IENJRl9JU1BfQUNR X1BST1BfSFNZTkNfTE9XOwo+Pj4gK8KgwqDCoCB9Cj4+PiArCj4+PiArwqDCoMKgIHdyaXRlbChp c3BfY3RybCwgYmFzZSArIENJRl9JU1BfQ1RSTCk7Cj4+PiArwqDCoMKgIHdyaXRlbChzaWduYWwg fCBpbl9mbXQtPnl1dl9zZXEgfAo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgIENJRl9JU1BfQUNR X1BST1BfQkFZRVJfUEFUKGluX2ZtdC0+YmF5ZXJfcGF0KSB8Cj4+PiArwqDCoMKgwqDCoMKgwqDC oMKgwqAgQ0lGX0lTUF9BQ1FfUFJPUF9GSUVMRF9TRUxfQUxMLCBiYXNlICsgQ0lGX0lTUF9BQ1Ff UFJPUCk7Cj4+PiArwqDCoMKgIHdyaXRlbCgwLCBiYXNlICsgQ0lGX0lTUF9BQ1FfTlJfRlJBTUVT KTsKPj4+ICsKPj4+ICvCoMKgwqAgLyogQWNxdWlzaXRpb24gU2l6ZSAqLwo+Pj4gK8KgwqDCoCB3 cml0ZWwoMCwgYmFzZSArIENJRl9JU1BfQUNRX0hfT0ZGUyk7Cj4+PiArwqDCoMKgIHdyaXRlbCgw LCBiYXNlICsgQ0lGX0lTUF9BQ1FfVl9PRkZTKTsKPj4+ICvCoMKgwqAgd3JpdGVsKGFjcV9tdWx0 ICogaW5fZnJtLT53aWR0aCwgYmFzZSArIENJRl9JU1BfQUNRX0hfU0laRSk7Cj4+PiArwqDCoMKg IHdyaXRlbChpbl9mcm0tPmhlaWdodCwgYmFzZSArIENJRl9JU1BfQUNRX1ZfU0laRSk7Cj4+PiAr Cj4+PiArwqDCoMKgIC8qIElTUCBPdXQgQXJlYSAqLwo+Pj4gK8KgwqDCoCB3cml0ZWwoaW5fY3Jv cC0+bGVmdCwgYmFzZSArIENJRl9JU1BfT1VUX0hfT0ZGUyk7Cj4+PiArwqDCoMKgIHdyaXRlbChp bl9jcm9wLT50b3AsIGJhc2UgKyBDSUZfSVNQX09VVF9WX09GRlMpOwo+Pj4gK8KgwqDCoCB3cml0 ZWwoaW5fY3JvcC0+d2lkdGgsIGJhc2UgKyBDSUZfSVNQX09VVF9IX1NJWkUpOwo+Pj4gK8KgwqDC oCB3cml0ZWwoaW5fY3JvcC0+aGVpZ2h0LCBiYXNlICsgQ0lGX0lTUF9PVVRfVl9TSVpFKTsKPj4+ ICsKPj4+ICvCoMKgwqAgLyogaW50ZXJydXB0IG1hc2sgKi8KPj4+ICvCoMKgwqAgaXJxX21hc2sg fD0gQ0lGX0lTUF9GUkFNRSB8IENJRl9JU1BfVl9TVEFSVCB8IENJRl9JU1BfUElDX1NJWkVfRVJS T1IgfAo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgQ0lGX0lTUF9GUkFNRV9JTjsKPj4+ICvC oMKgwqAgd3JpdGVsKGlycV9tYXNrLCBiYXNlICsgQ0lGX0lTUF9JTVNDKTsKPj4+ICsKPj4+ICvC oMKgwqAgaWYgKG91dF9mbXQtPmZtdF90eXBlID09IEZNVF9CQVlFUikKPj4+ICvCoMKgwqDCoMKg wqDCoCBya2lzcDFfcGFyYW1zX2Rpc2FibGVfaXNwKCZkZXYtPnBhcmFtc192ZGV2KTsKPj4+ICvC oMKgwqAgZWxzZQo+Pj4gK8KgwqDCoMKgwqDCoMKgIHJraXNwMV9wYXJhbXNfY29uZmlndXJlX2lz cCgmZGV2LT5wYXJhbXNfdmRldiwgaW5fZm10LAo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZGV2LT5pc3Bfc2Rldi5xdWFudGl6YXRpb24pOwo+Pj4g Kwo+Pj4gK8KgwqDCoCByZXR1cm4gMDsKPj4+ICt9Cj4+PiArCj4+PiArc3RhdGljIGludCBya2lz cDFfY29uZmlnX2R2cChzdHJ1Y3Qgcmtpc3AxX2RldmljZSAqZGV2KQo+Pj4gK3sKPj4+ICvCoMKg wqAgc3RydWN0IGlzcHNkX2luX2ZtdCAqaW5fZm10ID0gJmRldi0+aXNwX3NkZXYuaW5fZm10Owo+ Pj4gK8KgwqDCoCB2b2lkIF9faW9tZW0gKmJhc2UgPSBkZXYtPmJhc2VfYWRkcjsKPj4+ICvCoMKg wqAgdTMyIHZhbCwgaW5wdXRfc2VsOwo+Pj4gKwo+Pj4gK8KgwqDCoCBzd2l0Y2ggKGluX2ZtdC0+ YnVzX3dpZHRoKSB7Cj4+PiArwqDCoMKgIGNhc2UgODoKPj4+ICvCoMKgwqDCoMKgwqDCoCBpbnB1 dF9zZWwgPSBDSUZfSVNQX0FDUV9QUk9QX0lOX1NFTF84Ql9aRVJPOwo+Pj4gK8KgwqDCoMKgwqDC oMKgIGJyZWFrOwo+Pj4gK8KgwqDCoCBjYXNlIDEwOgo+Pj4gK8KgwqDCoMKgwqDCoMKgIGlucHV0 X3NlbCA9IENJRl9JU1BfQUNRX1BST1BfSU5fU0VMXzEwQl9aRVJPOwo+Pj4gK8KgwqDCoMKgwqDC oMKgIGJyZWFrOwo+Pj4gK8KgwqDCoCBjYXNlIDEyOgo+Pj4gK8KgwqDCoMKgwqDCoMKgIGlucHV0 X3NlbCA9IENJRl9JU1BfQUNRX1BST1BfSU5fU0VMXzEyQjsKPj4+ICvCoMKgwqDCoMKgwqDCoCBi cmVhazsKPj4+ICvCoMKgwqAgZGVmYXVsdDoKPj4+ICvCoMKgwqDCoMKgwqDCoCB2NGwyX2Vycigm ZGV2LT52NGwyX2RldiwgIkludmFsaWQgYnVzIHdpZHRoXG4iKTsKPj4+ICvCoMKgwqDCoMKgwqDC oCByZXR1cm4gLUVJTlZBTDsKPj4+ICvCoMKgwqAgfQo+Pj4gKwo+Pj4gK8KgwqDCoCB2YWwgPSBy ZWFkbChiYXNlICsgQ0lGX0lTUF9BQ1FfUFJPUCk7Cj4+PiArwqDCoMKgIHdyaXRlbCh2YWwgfCBp bnB1dF9zZWwsIGJhc2UgKyBDSUZfSVNQX0FDUV9QUk9QKTsKPj4+ICsKPj4+ICvCoMKgwqAgcmV0 dXJuIDA7Cj4+PiArfQo+Pj4gKwo+Pj4gK3N0YXRpYyBpbnQgcmtpc3AxX2NvbmZpZ19taXBpKHN0 cnVjdCBya2lzcDFfZGV2aWNlICpkZXYpCj4+PiArewo+Pj4gK8KgwqDCoCBzdHJ1Y3QgaXNwc2Rf aW5fZm10ICppbl9mbXQgPSAmZGV2LT5pc3Bfc2Rldi5pbl9mbXQ7Cj4+PiArwqDCoMKgIHN0cnVj dCBya2lzcDFfc2Vuc29yICpzZW5zb3IgPSBkZXYtPmFjdGl2ZV9zZW5zb3I7Cj4+PiArwqDCoMKg IHZvaWQgX19pb21lbSAqYmFzZSA9IGRldi0+YmFzZV9hZGRyOwo+Pj4gK8KgwqDCoCB1bnNpZ25l ZCBpbnQgbGFuZXM7Cj4+PiArwqDCoMKgIHUzMiBtaXBpX2N0cmw7Cj4+PiArCj4+PiArwqDCoMKg IC8qCj4+PiArwqDCoMKgwqAgKiBzZW5zb3ItPm1idXMgaXMgc2V0IGluIGlzcCBvciBkLXBoeSBu b3RpZmllcl9ib3VuZCBmdW5jdGlvbgo+Pj4gK8KgwqDCoMKgICovCj4+PiArwqDCoMKgIHN3aXRj aCAoc2Vuc29yLT5tYnVzLmZsYWdzICYgVjRMMl9NQlVTX0NTSTJfTEFORVMpIHsKPj4+ICvCoMKg wqAgY2FzZSBWNEwyX01CVVNfQ1NJMl80X0xBTkU6Cj4+PiArwqDCoMKgwqDCoMKgwqAgbGFuZXMg PSA0Owo+Pj4gK8KgwqDCoMKgwqDCoMKgIGJyZWFrOwo+Pj4gK8KgwqDCoCBjYXNlIFY0TDJfTUJV U19DU0kyXzNfTEFORToKPj4+ICvCoMKgwqDCoMKgwqDCoCBsYW5lcyA9IDM7Cj4+PiArwqDCoMKg wqDCoMKgwqAgYnJlYWs7Cj4+PiArwqDCoMKgIGNhc2UgVjRMMl9NQlVTX0NTSTJfMl9MQU5FOgo+ Pj4gK8KgwqDCoMKgwqDCoMKgIGxhbmVzID0gMjsKPj4+ICvCoMKgwqDCoMKgwqDCoCBicmVhazsK Pj4+ICvCoMKgwqAgY2FzZSBWNEwyX01CVVNfQ1NJMl8xX0xBTkU6Cj4+PiArwqDCoMKgwqDCoMKg wqAgbGFuZXMgPSAxOwo+Pj4gK8KgwqDCoMKgwqDCoMKgIGJyZWFrOwo+Pj4gK8KgwqDCoCBkZWZh dWx0Ogo+Pj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiAtRUlOVkFMOwo+Pj4gK8KgwqDCoCB9Cj4+ PiArCj4+PiArwqDCoMKgIG1pcGlfY3RybCA9IENJRl9NSVBJX0NUUkxfTlVNX0xBTkVTKGxhbmVz IC0gMSkgfAo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgQ0lGX01JUElfQ1RSTF9TSFVURE9X TkxBTkVTKDB4ZikgfAo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgQ0lGX01JUElfQ1RSTF9F UlJfU09UX1NZTkNfSFNfU0tJUCB8Cj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBDSUZfTUlQ SV9DVFJMX0NMT0NLTEFORV9FTkE7Cj4+PiArCj4+PiArwqDCoMKgIHdyaXRlbChtaXBpX2N0cmws IGJhc2UgKyBDSUZfTUlQSV9DVFJMKTsKPj4+ICsKPj4+ICvCoMKgwqAgLyogQ29uZmlndXJlIERh dGEgVHlwZSBhbmQgVmlydHVhbCBDaGFubmVsICovCj4+PiArwqDCoMKgIHdyaXRlbChDSUZfTUlQ SV9EQVRBX1NFTF9EVChpbl9mbXQtPm1pcGlfZHQpIHwgQ0lGX01JUElfREFUQV9TRUxfVkMoMCks Cj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqAgYmFzZSArIENJRl9NSVBJX0lNR19EQVRBX1NFTCk7 Cj4+PiArCj4+PiArwqDCoMKgIC8qIENsZWFyIE1JUEkgaW50ZXJydXB0cyAqLwo+Pj4gK8KgwqDC oCB3cml0ZWwofjAsIGJhc2UgKyBDSUZfTUlQSV9JQ1IpOwo+Pj4gK8KgwqDCoCAvKgo+Pj4gK8Kg wqDCoMKgICogRGlzYWJsZSBDSUZfTUlQSV9FUlJfRFBIWSBpbnRlcnJ1cHQgaGVyZSB0ZW1wb3Jh cnkgZm9yCj4+PiArwqDCoMKgwqAgKiBpc3AgYnVzIG1heSBiZSBkZWFkIHdoZW4gc3dpdGNoIGlz cC4KPj4+ICvCoMKgwqDCoCAqLwo+Pj4gK8KgwqDCoCB3cml0ZWwoQ0lGX01JUElfRlJBTUVfRU5E IHwgQ0lGX01JUElfRVJSX0NTSSB8IENJRl9NSVBJX0VSUl9EUEhZIHwKPj4+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoCBDSUZfTUlQSV9TWU5DX0ZJRk9fT1ZGTFcoMHgwMykgfCBDSUZfTUlQSV9BRERf REFUQV9PVkZMVywKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoCBiYXNlICsgQ0lGX01JUElfSU1T Qyk7Cj4+PiArCj4+PiArwqDCoMKgIHY0bDJfZGJnKDEsIHJraXNwMV9kZWJ1ZywgJmRldi0+djRs Ml9kZXYsICJcbsKgIE1JUElfQ1RSTCAweCUwOHhcbiIKPj4+ICvCoMKgwqDCoMKgwqDCoMKgICLC oCBNSVBJX0lNR19EQVRBX1NFTCAweCUwOHhcbiIKPj4+ICvCoMKgwqDCoMKgwqDCoMKgICLCoCBN SVBJX1NUQVRVUyAweCUwOHhcbiIKPj4+ICvCoMKgwqDCoMKgwqDCoMKgICLCoCBNSVBJX0lNU0Mg MHglMDh4XG4iLAo+Pj4gK8KgwqDCoMKgwqDCoMKgwqAgcmVhZGwoYmFzZSArIENJRl9NSVBJX0NU UkwpLAo+Pj4gK8KgwqDCoMKgwqDCoMKgwqAgcmVhZGwoYmFzZSArIENJRl9NSVBJX0lNR19EQVRB X1NFTCksCj4+PiArwqDCoMKgwqDCoMKgwqDCoCByZWFkbChiYXNlICsgQ0lGX01JUElfU1RBVFVT KSwKPj4+ICvCoMKgwqDCoMKgwqDCoMKgIHJlYWRsKGJhc2UgKyBDSUZfTUlQSV9JTVNDKSk7Cj4+ PiArCj4+PiArwqDCoMKgIHJldHVybiAwOwo+Pj4gK30KPj4+ICsKPj4+ICsvKiBDb25maWd1cmUg TVVYICovCj4+PiArc3RhdGljIGludCBya2lzcDFfY29uZmlnX3BhdGgoc3RydWN0IHJraXNwMV9k ZXZpY2UgKmRldikKPj4+ICt7Cj4+PiArwqDCoMKgIHN0cnVjdCBya2lzcDFfc2Vuc29yICpzZW5z b3IgPSBkZXYtPmFjdGl2ZV9zZW5zb3I7Cj4+PiArwqDCoMKgIHUzMiBkcGNsID0gcmVhZGwoZGV2 LT5iYXNlX2FkZHIgKyBDSUZfVklfRFBDTCk7Cj4+PiArwqDCoMKgIGludCByZXQgPSAwOwo+Pj4g Kwo+Pj4gK8KgwqDCoCBpZiAoc2Vuc29yLT5tYnVzLnR5cGUgPT0gVjRMMl9NQlVTX0JUNjU2IHx8 Cj4+PiArwqDCoMKgwqDCoMKgwqAgc2Vuc29yLT5tYnVzLnR5cGUgPT0gVjRMMl9NQlVTX1BBUkFM TEVMKSB7Cj4+PiArwqDCoMKgwqDCoMKgwqAgcmV0ID0gcmtpc3AxX2NvbmZpZ19kdnAoZGV2KTsK Pj4+ICvCoMKgwqDCoMKgwqDCoCBkcGNsIHw9IENJRl9WSV9EUENMX0lGX1NFTF9QQVJBTExFTDsK Pj4+ICvCoMKgwqAgfSBlbHNlIGlmIChzZW5zb3ItPm1idXMudHlwZSA9PSBWNEwyX01CVVNfQ1NJ Ml9EUEhZKSB7Cj4+PiArwqDCoMKgwqDCoMKgwqAgcmV0ID0gcmtpc3AxX2NvbmZpZ19taXBpKGRl dik7Cj4+PiArwqDCoMKgwqDCoMKgwqAgZHBjbCB8PSBDSUZfVklfRFBDTF9JRl9TRUxfTUlQSTsK Pj4+ICvCoMKgwqAgfQo+Pj4gKwo+Pj4gK8KgwqDCoCB3cml0ZWwoZHBjbCwgZGV2LT5iYXNlX2Fk ZHIgKyBDSUZfVklfRFBDTCk7Cj4+PiArCj4+PiArwqDCoMKgIHJldHVybiByZXQ7Cj4+PiArfQo+ Pj4gKwo+Pj4gKy8qIEhhcmV3YXJlIGNvbmZpZ3VyZSBFbnRyeSAqLwo+Pgo+PiBzL0hhcmV3YXJl L0hhcmR3YXJlLwo+Pgo+Pj4gK3N0YXRpYyBpbnQgcmtpc3AxX2NvbmZpZ19jaWYoc3RydWN0IHJr aXNwMV9kZXZpY2UgKmRldikKPj4+ICt7Cj4+PiArwqDCoMKgIHUzMiBjaWZfaWQ7Cj4+PiArwqDC oMKgIGludCByZXQ7Cj4+PiArCj4+PiArwqDCoMKgIHY0bDJfZGJnKDEsIHJraXNwMV9kZWJ1Zywg JmRldi0+djRsMl9kZXYsCj4+PiArwqDCoMKgwqDCoMKgwqDCoCAiU1Agc3RyZWFtaW5nID0gJWQs IE1QIHN0cmVhbWluZyA9ICVkXG4iLAo+Pj4gK8KgwqDCoMKgwqDCoMKgwqAgZGV2LT5zdHJlYW1b UktJU1AxX1NUUkVBTV9TUF0uc3RyZWFtaW5nLAo+Pj4gK8KgwqDCoMKgwqDCoMKgwqAgZGV2LT5z dHJlYW1bUktJU1AxX1NUUkVBTV9NUF0uc3RyZWFtaW5nKTsKPj4+ICsKPj4+ICvCoMKgwqAgY2lm X2lkID0gcmVhZGwoZGV2LT5iYXNlX2FkZHIgKyBDSUZfVklfSUQpOwo+Pj4gK8KgwqDCoCB2NGwy X2RiZygxLCBya2lzcDFfZGVidWcsICZkZXYtPnY0bDJfZGV2LCAiQ0lGX0lEIDB4JTA4eFxuIiwg Y2lmX2lkKTsKPj4+ICsKPj4+ICvCoMKgwqAgcmV0ID0gcmtpc3AxX2NvbmZpZ19pc3AoZGV2KTsK Pj4+ICvCoMKgwqAgaWYgKHJldCA8IDApCj4+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIHJldDsK Pj4+ICvCoMKgwqAgcmV0ID0gcmtpc3AxX2NvbmZpZ19wYXRoKGRldik7Cj4+PiArwqDCoMKgIGlm IChyZXQgPCAwKQo+Pj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiByZXQ7Cj4+PiArwqDCoMKgIHJr aXNwMV9jb25maWdfaXNtKGRldik7Cj4+PiArCj4+PiArwqDCoMKgIHJldHVybiAwOwo+Pj4gK30K Pj4+ICsKPj4+ICsvKiBNZXNzIHJlZ2lzdGVyIG9wZXJhdGlvbnMgdG8gc3RvcCBpc3AgKi8KPj4K Pj4gSXMgaXQgc3VjaCBhIG1lc3MgPyA6LSkKPj4KPj4gSSB3b3VsZCBjYXBpdGFsaXNlIElTUCBp biBhbGwgY29tbWVudHMuCj4+Cj4+PiArc3RhdGljIGludCBya2lzcDFfaXNwX3N0b3Aoc3RydWN0 IHJraXNwMV9kZXZpY2UgKmRldikKPj4+ICt7Cj4+PiArwqDCoMKgIHZvaWQgX19pb21lbSAqYmFz ZSA9IGRldi0+YmFzZV9hZGRyOwo+Pj4gK8KgwqDCoCB1MzIgdmFsOwo+Pj4gKwo+Pj4gK8KgwqDC oCB2NGwyX2RiZygxLCBya2lzcDFfZGVidWcsICZkZXYtPnY0bDJfZGV2LAo+Pj4gK8KgwqDCoMKg wqDCoMKgwqAgIlNQIHN0cmVhbWluZyA9ICVkLCBNUCBzdHJlYW1pbmcgPSAlZFxuIiwKPj4+ICvC oMKgwqDCoMKgwqDCoMKgIGRldi0+c3RyZWFtW1JLSVNQMV9TVFJFQU1fU1BdLnN0cmVhbWluZywK Pj4+ICvCoMKgwqDCoMKgwqDCoMKgIGRldi0+c3RyZWFtW1JLSVNQMV9TVFJFQU1fTVBdLnN0cmVh bWluZyk7Cj4+PiArCj4+PiArwqDCoMKgIC8qCj4+PiArwqDCoMKgwqAgKiBJU1AobWkpIHN0b3Ag aW4gbWkgZnJhbWUgZW5kIC0+IFN0b3AgSVNQKG1pcGkpIC0+Cj4+PiArwqDCoMKgwqAgKiBTdG9w IElTUChpc3ApIC0+d2FpdCBmb3IgSVNQIGlzcCBvZmYKPj4+ICvCoMKgwqDCoCAqLwo+Pj4gK8Kg wqDCoCAvKiBzdG9wIGFuZCBjbGVhciBNSSwgTUlQSSwgYW5kIElTUCBpbnRlcnJ1cHRzICovCj4+ PiArwqDCoMKgIHdyaXRlbCgwLCBiYXNlICsgQ0lGX01JUElfSU1TQyk7Cj4+PiArwqDCoMKgIHdy aXRlbCh+MCwgYmFzZSArIENJRl9NSVBJX0lDUik7Cj4+PiArCj4+PiArwqDCoMKgIHdyaXRlbCgw LCBiYXNlICsgQ0lGX0lTUF9JTVNDKTsKPj4+ICvCoMKgwqAgd3JpdGVsKH4wLCBiYXNlICsgQ0lG X0lTUF9JQ1IpOwo+Pj4gKwo+Pj4gK8KgwqDCoCB3cml0ZWwoMCwgYmFzZSArIENJRl9NSV9JTVND KTsKPj4+ICvCoMKgwqAgd3JpdGVsKH4wLCBiYXNlICsgQ0lGX01JX0lDUik7Cj4+PiArwqDCoMKg IHZhbCA9IHJlYWRsKGJhc2UgKyBDSUZfTUlQSV9DVFJMKTsKPj4+ICvCoMKgwqAgd3JpdGVsKHZh bCAmICh+Q0lGX01JUElfQ1RSTF9PVVRQVVRfRU5BKSwgYmFzZSArIENJRl9NSVBJX0NUUkwpOwo+ Pj4gK8KgwqDCoCAvKiBzdG9wIElTUCAqLwo+Pj4gK8KgwqDCoCB2YWwgPSByZWFkbChiYXNlICsg Q0lGX0lTUF9DVFJMKTsKPj4+ICvCoMKgwqAgdmFsICY9IH4oQ0lGX0lTUF9DVFJMX0lTUF9JTkZP Uk1fRU5BQkxFIHwgQ0lGX0lTUF9DVFJMX0lTUF9FTkFCTEUpOwo+Pj4gK8KgwqDCoCB3cml0ZWwo dmFsLCBiYXNlICsgQ0lGX0lTUF9DVFJMKTsKPj4+ICsKPj4+ICvCoMKgwqAgdmFsID0gcmVhZGwo YmFzZSArIENJRl9JU1BfQ1RSTCk7Cj4+PiArwqDCoMKgIHdyaXRlbCh2YWwgfCBDSUZfSVNQX0NU UkxfSVNQX0NGR19VUEQsIGJhc2UgKyBDSUZfSVNQX0NUUkwpOwo+Pj4gKwo+Pj4gK8KgwqDCoCBy ZWFkeF9wb2xsX3RpbWVvdXQocmVhZGwsIGJhc2UgKyBDSUZfSVNQX1JJUywKPj4+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIHZhbCwgdmFsICYgQ0lGX0lTUF9PRkYsIDIwLCAxMDApOwo+ Pj4gK8KgwqDCoCB2NGwyX2RiZygxLCBya2lzcDFfZGVidWcsICZkZXYtPnY0bDJfZGV2LAo+Pj4g K8KgwqDCoMKgwqDCoMKgICJzdHJlYW1pbmcoTVA6JWQsIFNQOiVkKSwgTUlfQ1RSTDoleCwgSVNQ X0NUUkw6JXgsIE1JUElfQ1RSTDoleFxuIiwKPj4+ICvCoMKgwqDCoMKgwqDCoMKgIGRldi0+c3Ry ZWFtW1JLSVNQMV9TVFJFQU1fU1BdLnN0cmVhbWluZywKPj4+ICvCoMKgwqDCoMKgwqDCoMKgIGRl di0+c3RyZWFtW1JLSVNQMV9TVFJFQU1fTVBdLnN0cmVhbWluZywKPj4+ICvCoMKgwqDCoMKgwqDC oMKgIHJlYWRsKGJhc2UgKyBDSUZfTUlfQ1RSTCksCj4+PiArwqDCoMKgwqDCoMKgwqDCoCByZWFk bChiYXNlICsgQ0lGX0lTUF9DVFJMKSwKPj4+ICvCoMKgwqDCoMKgwqDCoMKgIHJlYWRsKGJhc2Ug KyBDSUZfTUlQSV9DVFJMKSk7Cj4+PiArCj4+PiArwqDCoMKgIHdyaXRlbChDSUZfSVJDTF9NSVBJ X1NXX1JTVCB8IENJRl9JUkNMX0lTUF9TV19SU1QsIGJhc2UgKyBDSUZfSVJDTCk7Cj4+PiArwqDC oMKgIHdyaXRlbCgweDAsIGJhc2UgKyBDSUZfSVJDTCk7Cj4+PiArCj4+PiArwqDCoMKgIHJldHVy biAwOwo+Pj4gK30KPj4+ICsKPj4+ICsvKiBNZXNzIHJlZ2lzdGVyIG9wZXJhdGlvbnMgdG8gc3Rh cnQgaXNwICovCj4+PiArc3RhdGljIGludCBya2lzcDFfaXNwX3N0YXJ0KHN0cnVjdCBya2lzcDFf ZGV2aWNlICpkZXYpCj4+PiArewo+Pj4gK8KgwqDCoCBzdHJ1Y3Qgcmtpc3AxX3NlbnNvciAqc2Vu c29yID0gZGV2LT5hY3RpdmVfc2Vuc29yOwo+Pj4gK8KgwqDCoCB2b2lkIF9faW9tZW0gKmJhc2Ug PSBkZXYtPmJhc2VfYWRkcjsKPj4+ICvCoMKgwqAgdTMyIHZhbDsKPj4+ICsKPj4+ICvCoMKgwqAg djRsMl9kYmcoMSwgcmtpc3AxX2RlYnVnLCAmZGV2LT52NGwyX2RldiwKPj4+ICvCoMKgwqDCoMKg wqDCoMKgICJTUCBzdHJlYW1pbmcgPSAlZCwgTVAgc3RyZWFtaW5nID0gJWRcbiIsCj4+PiArwqDC oMKgwqDCoMKgwqDCoCBkZXYtPnN0cmVhbVtSS0lTUDFfU1RSRUFNX1NQXS5zdHJlYW1pbmcsCj4+ PiArwqDCoMKgwqDCoMKgwqDCoCBkZXYtPnN0cmVhbVtSS0lTUDFfU1RSRUFNX01QXS5zdHJlYW1p bmcpOwo+Pj4gKwo+Pj4gK8KgwqDCoCAvKiBBY3RpdmF0ZSBNSVBJICovCj4+PiArwqDCoMKgIGlm IChzZW5zb3ItPm1idXMudHlwZSA9PSBWNEwyX01CVVNfQ1NJMl9EUEhZKSB7Cj4+PiArwqDCoMKg wqDCoMKgwqAgdmFsID0gcmVhZGwoYmFzZSArIENJRl9NSVBJX0NUUkwpOwo+Pj4gK8KgwqDCoMKg wqDCoMKgIHdyaXRlbCh2YWwgfCBDSUZfTUlQSV9DVFJMX09VVFBVVF9FTkEsIGJhc2UgKyBDSUZf TUlQSV9DVFJMKTsKPj4+ICvCoMKgwqAgfQo+Pj4gK8KgwqDCoCAvKiBBY3RpdmF0ZSBJU1AgKi8K Pj4+ICvCoMKgwqAgdmFsID0gcmVhZGwoYmFzZSArIENJRl9JU1BfQ1RSTCk7Cj4+PiArwqDCoMKg IHZhbCB8PSBDSUZfSVNQX0NUUkxfSVNQX0NGR19VUEQgfCBDSUZfSVNQX0NUUkxfSVNQX0VOQUJM RSB8Cj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqAgQ0lGX0lTUF9DVFJMX0lTUF9JTkZPUk1fRU5B QkxFOwo+Pj4gK8KgwqDCoCB3cml0ZWwodmFsLCBiYXNlICsgQ0lGX0lTUF9DVFJMKTsKPj4+ICsK Pj4+ICvCoMKgwqAgLyogWFhYOiBJcyB0aGUgMTAwMHVzIHRvbyBsb25nPwo+Pj4gK8KgwqDCoMKg ICogQ0lGIHNwZWMgc2F5cyB0byB3YWl0IGZvciBzdWZmaWNpZW50IHRpbWUgYWZ0ZXIgZW5hYmxp bmcKPj4+ICvCoMKgwqDCoCAqIHRoZSBNSVBJIGludGVyZmFjZSBhbmQgYmVmb3JlIHN0YXJ0aW5n IHRoZSBzZW5zb3Igb3V0cHV0Lgo+Pj4gK8KgwqDCoMKgICovCj4+PiArwqDCoMKgIHVzbGVlcF9y YW5nZSgxMDAwLCAxMjAwKTsKPj4+ICsKPj4+ICvCoMKgwqAgdjRsMl9kYmcoMSwgcmtpc3AxX2Rl YnVnLCAmZGV2LT52NGwyX2RldiwKPj4+ICvCoMKgwqDCoMKgwqDCoMKgICJTUCBzdHJlYW1pbmcg PSAlZCwgTVAgc3RyZWFtaW5nID0gJWQgTUlfQ1RSTCAweCUwOHhcbiIKPj4+ICvCoMKgwqDCoMKg wqDCoMKgICLCoCBJU1BfQ1RSTCAweCUwOHggTUlQSV9DVFJMIDB4JTA4eFxuIiwKPj4+ICvCoMKg wqDCoMKgwqDCoMKgIGRldi0+c3RyZWFtW1JLSVNQMV9TVFJFQU1fU1BdLnN0cmVhbWluZywKPj4+ ICvCoMKgwqDCoMKgwqDCoMKgIGRldi0+c3RyZWFtW1JLSVNQMV9TVFJFQU1fTVBdLnN0cmVhbWlu ZywKPj4+ICvCoMKgwqDCoMKgwqDCoMKgIHJlYWRsKGJhc2UgKyBDSUZfTUlfQ1RSTCksCj4+PiAr wqDCoMKgwqDCoMKgwqDCoCByZWFkbChiYXNlICsgQ0lGX0lTUF9DVFJMKSwKPj4+ICvCoMKgwqDC oMKgwqDCoMKgIHJlYWRsKGJhc2UgKyBDSUZfTUlQSV9DVFJMKSk7Cj4+PiArCj4+PiArwqDCoMKg IHJldHVybiAwOwo+Pj4gK30KPj4+ICsKPj4+ICtzdGF0aWMgdm9pZCBya2lzcDFfY29uZmlnX2Ns ayhzdHJ1Y3Qgcmtpc3AxX2RldmljZSAqZGV2KQo+Pj4gK3sKPj4+ICvCoMKgwqAgdTMyIHZhbCA9 IENJRl9JQ0NMX0lTUF9DTEsgfCBDSUZfSUNDTF9DUF9DTEsgfCBDSUZfSUNDTF9NUlNaX0NMSyB8 Cj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgIENJRl9JQ0NMX1NSU1pfQ0xLIHwgQ0lGX0lDQ0xfSlBF R19DTEsgfCBDSUZfSUNDTF9NSV9DTEsgfAo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoCBDSUZfSUND TF9JRV9DTEsgfCBDSUZfSUNDTF9NSVBJX0NMSyB8IENJRl9JQ0NMX0RDUk9QX0NMSzsKPj4+ICsK Pj4+ICvCoMKgwqAgd3JpdGVsKHZhbCwgZGV2LT5iYXNlX2FkZHIgKyBDSUZfSUNDTCk7Cj4+PiAr fQo+Pj4gKwo+Pj4gKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKiBpc3Agc3ViLWRldnMg KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KPj4+ICsKPj4+ICtzdGF0aWMgY29uc3Qg c3RydWN0IGlzcHNkX2luX2ZtdCBya2lzcDFfaXNwX2lucHV0X2Zvcm1hdHNbXSA9IHsKPj4+ICvC oMKgwqAgewo+Pj4gK8KgwqDCoMKgwqDCoMKgIC5tYnVzX2NvZGXCoMKgwqAgPSBNRURJQV9CVVNf Rk1UX1NCR0dSMTBfMVgxMCwKPj4+ICvCoMKgwqDCoMKgwqDCoCAuZm10X3R5cGXCoMKgwqAgPSBG TVRfQkFZRVIsCj4+PiArwqDCoMKgwqDCoMKgwqAgLm1pcGlfZHTCoMKgwqAgPSBDSUZfQ1NJMl9E VF9SQVcxMCwKPj4+ICvCoMKgwqDCoMKgwqDCoCAuYmF5ZXJfcGF0wqDCoMKgID0gUkFXX0JHR1Is Cj4+PiArwqDCoMKgwqDCoMKgwqAgLmJ1c193aWR0aMKgwqDCoCA9IDEwLAo+Pj4gK8KgwqDCoCB9 LCB7Cj4+PiArwqDCoMKgwqDCoMKgwqAgLm1idXNfY29kZcKgwqDCoCA9IE1FRElBX0JVU19GTVRf U1JHR0IxMF8xWDEwLAo+Pj4gK8KgwqDCoMKgwqDCoMKgIC5mbXRfdHlwZcKgwqDCoCA9IEZNVF9C QVlFUiwKPj4+ICvCoMKgwqDCoMKgwqDCoCAubWlwaV9kdMKgwqDCoCA9IENJRl9DU0kyX0RUX1JB VzEwLAo+Pj4gK8KgwqDCoMKgwqDCoMKgIC5iYXllcl9wYXTCoMKgwqAgPSBSQVdfUkdHQiwKPj4+ ICvCoMKgwqDCoMKgwqDCoCAuYnVzX3dpZHRowqDCoMKgID0gMTAsCj4+PiArwqDCoMKgIH0sIHsK Pj4+ICvCoMKgwqDCoMKgwqDCoCAubWJ1c19jb2RlwqDCoMKgID0gTUVESUFfQlVTX0ZNVF9TR0JS RzEwXzFYMTAsCj4+PiArwqDCoMKgwqDCoMKgwqAgLmZtdF90eXBlwqDCoMKgID0gRk1UX0JBWUVS LAo+Pj4gK8KgwqDCoMKgwqDCoMKgIC5taXBpX2R0wqDCoMKgID0gQ0lGX0NTSTJfRFRfUkFXMTAs Cj4+PiArwqDCoMKgwqDCoMKgwqAgLmJheWVyX3BhdMKgwqDCoCA9IFJBV19HQlJHLAo+Pj4gK8Kg wqDCoMKgwqDCoMKgIC5idXNfd2lkdGjCoMKgwqAgPSAxMCwKPj4+ICvCoMKgwqAgfSwgewo+Pj4g K8KgwqDCoMKgwqDCoMKgIC5tYnVzX2NvZGXCoMKgwqAgPSBNRURJQV9CVVNfRk1UX1NHUkJHMTBf MVgxMCwKPj4+ICvCoMKgwqDCoMKgwqDCoCAuZm10X3R5cGXCoMKgwqAgPSBGTVRfQkFZRVIsCj4+ PiArwqDCoMKgwqDCoMKgwqAgLm1pcGlfZHTCoMKgwqAgPSBDSUZfQ1NJMl9EVF9SQVcxMCwKPj4+ ICvCoMKgwqDCoMKgwqDCoCAuYmF5ZXJfcGF0wqDCoMKgID0gUkFXX0dSQkcsCj4+PiArwqDCoMKg wqDCoMKgwqAgLmJ1c193aWR0aMKgwqDCoCA9IDEwLAo+Pj4gK8KgwqDCoCB9LCB7Cj4+PiArwqDC oMKgwqDCoMKgwqAgLm1idXNfY29kZcKgwqDCoCA9IE1FRElBX0JVU19GTVRfU1JHR0IxMl8xWDEy LAo+Pj4gK8KgwqDCoMKgwqDCoMKgIC5mbXRfdHlwZcKgwqDCoCA9IEZNVF9CQVlFUiwKPj4+ICvC oMKgwqDCoMKgwqDCoCAubWlwaV9kdMKgwqDCoCA9IENJRl9DU0kyX0RUX1JBVzEyLAo+Pj4gK8Kg wqDCoMKgwqDCoMKgIC5iYXllcl9wYXTCoMKgwqAgPSBSQVdfUkdHQiwKPj4+ICvCoMKgwqDCoMKg wqDCoCAuYnVzX3dpZHRowqDCoMKgID0gMTIsCj4+PiArwqDCoMKgIH0sIHsKPj4+ICvCoMKgwqDC oMKgwqDCoCAubWJ1c19jb2RlwqDCoMKgID0gTUVESUFfQlVTX0ZNVF9TQkdHUjEyXzFYMTIsCj4+ Cj4+IElzIHRoZXJlIGEgcmVhc29uIHdoeSB0aGUgMTAtYml0IEJheWVyIGZvcm1hdCBzdGFydCB3 aXRoIEJHR1Igd2hpbGUgdGhlCj4+IDEyLWJpdCBmb3JtYXRzIHN0YXJ0IHdpdGggUkdHQiA/IE5v dCBhIGJpZyBkZWFsLCBqdXN0IE9DRCBraWNraW5nIGluIDotKQo+Pgo+Pj4gK8KgwqDCoMKgwqDC oMKgIC5mbXRfdHlwZcKgwqDCoCA9IEZNVF9CQVlFUiwKPj4+ICvCoMKgwqDCoMKgwqDCoCAubWlw aV9kdMKgwqDCoCA9IENJRl9DU0kyX0RUX1JBVzEyLAo+Pj4gK8KgwqDCoMKgwqDCoMKgIC5iYXll cl9wYXTCoMKgwqAgPSBSQVdfQkdHUiwKPj4+ICvCoMKgwqDCoMKgwqDCoCAuYnVzX3dpZHRowqDC oMKgID0gMTIsCj4+PiArwqDCoMKgIH0sIHsKPj4+ICvCoMKgwqDCoMKgwqDCoCAubWJ1c19jb2Rl wqDCoMKgID0gTUVESUFfQlVTX0ZNVF9TR0JSRzEyXzFYMTIsCj4+PiArwqDCoMKgwqDCoMKgwqAg LmZtdF90eXBlwqDCoMKgID0gRk1UX0JBWUVSLAo+Pj4gK8KgwqDCoMKgwqDCoMKgIC5taXBpX2R0 wqDCoMKgID0gQ0lGX0NTSTJfRFRfUkFXMTIsCj4+PiArwqDCoMKgwqDCoMKgwqAgLmJheWVyX3Bh dMKgwqDCoCA9IFJBV19HQlJHLAo+Pj4gK8KgwqDCoMKgwqDCoMKgIC5idXNfd2lkdGjCoMKgwqAg PSAxMiwKPj4+ICvCoMKgwqAgfSwgewo+Pj4gK8KgwqDCoMKgwqDCoMKgIC5tYnVzX2NvZGXCoMKg wqAgPSBNRURJQV9CVVNfRk1UX1NHUkJHMTJfMVgxMiwKPj4+ICvCoMKgwqDCoMKgwqDCoCAuZm10 X3R5cGXCoMKgwqAgPSBGTVRfQkFZRVIsCj4+PiArwqDCoMKgwqDCoMKgwqAgLm1pcGlfZHTCoMKg wqAgPSBDSUZfQ1NJMl9EVF9SQVcxMiwKPj4+ICvCoMKgwqDCoMKgwqDCoCAuYmF5ZXJfcGF0wqDC oMKgID0gUkFXX0dSQkcsCj4+PiArwqDCoMKgwqDCoMKgwqAgLmJ1c193aWR0aMKgwqDCoCA9IDEy LAo+Pj4gK8KgwqDCoCB9LCB7Cj4+PiArwqDCoMKgwqDCoMKgwqAgLm1idXNfY29kZcKgwqDCoCA9 IE1FRElBX0JVU19GTVRfU1JHR0I4XzFYOCwKPj4+ICvCoMKgwqDCoMKgwqDCoCAuZm10X3R5cGXC oMKgwqAgPSBGTVRfQkFZRVIsCj4+PiArwqDCoMKgwqDCoMKgwqAgLm1pcGlfZHTCoMKgwqAgPSBD SUZfQ1NJMl9EVF9SQVc4LAo+Pj4gK8KgwqDCoMKgwqDCoMKgIC5iYXllcl9wYXTCoMKgwqAgPSBS QVdfUkdHQiwKPj4+ICvCoMKgwqDCoMKgwqDCoCAuYnVzX3dpZHRowqDCoMKgID0gOCwKPj4+ICvC oMKgwqAgfSwgewo+Pj4gK8KgwqDCoMKgwqDCoMKgIC5tYnVzX2NvZGXCoMKgwqAgPSBNRURJQV9C VVNfRk1UX1NCR0dSOF8xWDgsCj4+PiArwqDCoMKgwqDCoMKgwqAgLmZtdF90eXBlwqDCoMKgID0g Rk1UX0JBWUVSLAo+Pj4gK8KgwqDCoMKgwqDCoMKgIC5taXBpX2R0wqDCoMKgID0gQ0lGX0NTSTJf RFRfUkFXOCwKPj4+ICvCoMKgwqDCoMKgwqDCoCAuYmF5ZXJfcGF0wqDCoMKgID0gUkFXX0JHR1Is Cj4+PiArwqDCoMKgwqDCoMKgwqAgLmJ1c193aWR0aMKgwqDCoCA9IDgsCj4+PiArwqDCoMKgIH0s IHsKPj4+ICvCoMKgwqDCoMKgwqDCoCAubWJ1c19jb2RlwqDCoMKgID0gTUVESUFfQlVTX0ZNVF9T R0JSRzhfMVg4LAo+Pj4gK8KgwqDCoMKgwqDCoMKgIC5mbXRfdHlwZcKgwqDCoCA9IEZNVF9CQVlF UiwKPj4+ICvCoMKgwqDCoMKgwqDCoCAubWlwaV9kdMKgwqDCoCA9IENJRl9DU0kyX0RUX1JBVzgs Cj4+PiArwqDCoMKgwqDCoMKgwqAgLmJheWVyX3BhdMKgwqDCoCA9IFJBV19HQlJHLAo+Pj4gK8Kg wqDCoMKgwqDCoMKgIC5idXNfd2lkdGjCoMKgwqAgPSA4LAo+Pj4gK8KgwqDCoCB9LCB7Cj4+PiAr wqDCoMKgwqDCoMKgwqAgLm1idXNfY29kZcKgwqDCoCA9IE1FRElBX0JVU19GTVRfU0dSQkc4XzFY OCwKPj4+ICvCoMKgwqDCoMKgwqDCoCAuZm10X3R5cGXCoMKgwqAgPSBGTVRfQkFZRVIsCj4+PiAr wqDCoMKgwqDCoMKgwqAgLm1pcGlfZHTCoMKgwqAgPSBDSUZfQ1NJMl9EVF9SQVc4LAo+Pj4gK8Kg wqDCoMKgwqDCoMKgIC5iYXllcl9wYXTCoMKgwqAgPSBSQVdfR1JCRywKPj4+ICvCoMKgwqDCoMKg wqDCoCAuYnVzX3dpZHRowqDCoMKgID0gOCwKPj4+ICvCoMKgwqAgfSwgewo+Pj4gK8KgwqDCoMKg wqDCoMKgIC5tYnVzX2NvZGXCoMKgwqAgPSBNRURJQV9CVVNfRk1UX1lVWVY4XzFYMTYsCj4+PiAr wqDCoMKgwqDCoMKgwqAgLmZtdF90eXBlwqDCoMKgID0gRk1UX1lVViwKPj4+ICvCoMKgwqDCoMKg wqDCoCAubWlwaV9kdMKgwqDCoCA9IENJRl9DU0kyX0RUX1lVVjQyMl84YiwKPj4+ICvCoMKgwqDC oMKgwqDCoCAueXV2X3NlccKgwqDCoCA9IENJRl9JU1BfQUNRX1BST1BfWUNCWUNSLAo+Pj4gK8Kg wqDCoMKgwqDCoMKgIC5idXNfd2lkdGjCoMKgwqAgPSAxNiwKPj4+ICvCoMKgwqAgfSwgewo+Pj4g K8KgwqDCoMKgwqDCoMKgIC5tYnVzX2NvZGXCoMKgwqAgPSBNRURJQV9CVVNfRk1UX1lWWVU4XzFY MTYsCj4+PiArwqDCoMKgwqDCoMKgwqAgLmZtdF90eXBlwqDCoMKgID0gRk1UX1lVViwKPj4+ICvC oMKgwqDCoMKgwqDCoCAubWlwaV9kdMKgwqDCoCA9IENJRl9DU0kyX0RUX1lVVjQyMl84YiwKPj4+ ICvCoMKgwqDCoMKgwqDCoCAueXV2X3NlccKgwqDCoCA9IENJRl9JU1BfQUNRX1BST1BfWUNSWUNC LAo+Pj4gK8KgwqDCoMKgwqDCoMKgIC5idXNfd2lkdGjCoMKgwqAgPSAxNiwKPj4+ICvCoMKgwqAg fSwgewo+Pj4gK8KgwqDCoMKgwqDCoMKgIC5tYnVzX2NvZGXCoMKgwqAgPSBNRURJQV9CVVNfRk1U X1VZVlk4XzFYMTYsCj4+PiArwqDCoMKgwqDCoMKgwqAgLmZtdF90eXBlwqDCoMKgID0gRk1UX1lV ViwKPj4+ICvCoMKgwqDCoMKgwqDCoCAubWlwaV9kdMKgwqDCoCA9IENJRl9DU0kyX0RUX1lVVjQy Ml84YiwKPj4+ICvCoMKgwqDCoMKgwqDCoCAueXV2X3NlccKgwqDCoCA9IENJRl9JU1BfQUNRX1BS T1BfQ0JZQ1JZLAo+Pj4gK8KgwqDCoMKgwqDCoMKgIC5idXNfd2lkdGjCoMKgwqAgPSAxNiwKPj4+ ICvCoMKgwqAgfSwgewo+Pj4gK8KgwqDCoMKgwqDCoMKgIC5tYnVzX2NvZGXCoMKgwqAgPSBNRURJ QV9CVVNfRk1UX1ZZVVk4XzFYMTYsCj4+PiArwqDCoMKgwqDCoMKgwqAgLmZtdF90eXBlwqDCoMKg ID0gRk1UX1lVViwKPj4+ICvCoMKgwqDCoMKgwqDCoCAubWlwaV9kdMKgwqDCoCA9IENJRl9DU0ky X0RUX1lVVjQyMl84YiwKPj4+ICvCoMKgwqDCoMKgwqDCoCAueXV2X3NlccKgwqDCoCA9IENJRl9J U1BfQUNRX1BST1BfQ1JZQ0JZLAo+Pj4gK8KgwqDCoMKgwqDCoMKgIC5idXNfd2lkdGjCoMKgwqAg PSAxNiwKPj4+ICvCoMKgwqAgfSwKPj4+ICt9Owo+Pj4gKwo+Pj4gK3N0YXRpYyBjb25zdCBzdHJ1 Y3QgaXNwc2Rfb3V0X2ZtdCBya2lzcDFfaXNwX291dHB1dF9mb3JtYXRzW10gPSB7Cj4+PiArwqDC oMKgIHsKPj4+ICvCoMKgwqDCoMKgwqDCoCAubWJ1c19jb2RlwqDCoMKgID0gTUVESUFfQlVTX0ZN VF9ZVVlWOF8yWDgsCj4+PiArwqDCoMKgwqDCoMKgwqAgLmZtdF90eXBlwqDCoMKgID0gRk1UX1lV ViwKPj4+ICvCoMKgwqAgfSwgewo+Pgo+PiBUaGlzIGlzIHRoZSBvbmx5IGVudHJ5IG5vdCBwcmVz ZW50IGluIHRoZSBwcmV2aW91cyB0YWJsZSwgc28gSSdtCj4+IHdvbmRlcmluZyBpZiBpdCB3b3Vs ZCBtYWtlIHNlbnNlIHRvIG1lcmdlIHRoZSB0d28gdGFibGVzIGFuZCByZW5hbWUKPj4gaXNwc2Rf aW5fZm10IHRvIHJraXNwMV9mb3JtYXRfaW5mby4gWW91IHdvdWxkIG5lZWQgdG8gYWRkIGEgZmll bGQgdGhhdAo+PiB0ZWxscywgZm9yIGVhY2ggZm9ybWF0LCBpZiBpdCdzIHZhbGlkIGFzIGFuIGlu cHV0IGZvcm1hdCwgYW5kIG91dHB1dAo+PiBmb3JtYXQsIG9yIGJvdGguIEhtbW1tIGFuZCBhbHNv IG1ha2UgdGhlIGVudW0gbG9naWMgYSBiaXQgbW9yZSBjb21wbGV4Lgo+PiBNYXliZSBpdCdzIG5v dCB3b3J0aCBpdCBhZnRlciBhbGwsIGJ1dCBpdCBib3RoZXJzIG1lIGEgYml0IHRvIGhhdmUgdHdv Cj4+IHRhYmxlcyA6LSkgSSdsbCBsZXQgeW91IGRlY2lkZSB3aGF0J3MgYmVzdC4KPj4KPj4+ICvC oMKgwqDCoMKgwqDCoCAubWJ1c19jb2RlwqDCoMKgID0gTUVESUFfQlVTX0ZNVF9TUkdHQjEyXzFY MTIsCj4+PiArwqDCoMKgwqDCoMKgwqAgLmZtdF90eXBlwqDCoMKgID0gRk1UX0JBWUVSLAo+Pj4g K8KgwqDCoCB9LCB7Cj4+PiArwqDCoMKgwqDCoMKgwqAgLm1idXNfY29kZcKgwqDCoCA9IE1FRElB X0JVU19GTVRfU0JHR1IxMl8xWDEyLAo+Pj4gK8KgwqDCoMKgwqDCoMKgIC5mbXRfdHlwZcKgwqDC oCA9IEZNVF9CQVlFUiwKPj4+ICvCoMKgwqAgfSwgewo+Pj4gK8KgwqDCoMKgwqDCoMKgIC5tYnVz X2NvZGXCoMKgwqAgPSBNRURJQV9CVVNfRk1UX1NHQlJHMTJfMVgxMiwKPj4+ICvCoMKgwqDCoMKg wqDCoCAuZm10X3R5cGXCoMKgwqAgPSBGTVRfQkFZRVIsCj4+PiArwqDCoMKgIH0sIHsKPj4+ICvC oMKgwqDCoMKgwqDCoCAubWJ1c19jb2RlwqDCoMKgID0gTUVESUFfQlVTX0ZNVF9TR1JCRzEyXzFY MTIsCj4+PiArwqDCoMKgwqDCoMKgwqAgLmZtdF90eXBlwqDCoMKgID0gRk1UX0JBWUVSLAo+Pj4g K8KgwqDCoCB9LCB7Cj4+PiArwqDCoMKgwqDCoMKgwqAgLm1idXNfY29kZcKgwqDCoCA9IE1FRElB X0JVU19GTVRfU1JHR0IxMF8xWDEwLAo+Pj4gK8KgwqDCoMKgwqDCoMKgIC5mbXRfdHlwZcKgwqDC oCA9IEZNVF9CQVlFUiwKPj4+ICvCoMKgwqAgfSwgewo+Pj4gK8KgwqDCoMKgwqDCoMKgIC5tYnVz X2NvZGXCoMKgwqAgPSBNRURJQV9CVVNfRk1UX1NCR0dSMTBfMVgxMCwKPj4+ICvCoMKgwqDCoMKg wqDCoCAuZm10X3R5cGXCoMKgwqAgPSBGTVRfQkFZRVIsCj4+PiArwqDCoMKgIH0sIHsKPj4+ICvC oMKgwqDCoMKgwqDCoCAubWJ1c19jb2RlwqDCoMKgID0gTUVESUFfQlVTX0ZNVF9TR0JSRzEwXzFY MTAsCj4+PiArwqDCoMKgwqDCoMKgwqAgLmZtdF90eXBlwqDCoMKgID0gRk1UX0JBWUVSLAo+Pj4g K8KgwqDCoCB9LCB7Cj4+PiArwqDCoMKgwqDCoMKgwqAgLm1idXNfY29kZcKgwqDCoCA9IE1FRElB X0JVU19GTVRfU0dSQkcxMF8xWDEwLAo+Pj4gK8KgwqDCoMKgwqDCoMKgIC5mbXRfdHlwZcKgwqDC oCA9IEZNVF9CQVlFUiwKPj4+ICvCoMKgwqAgfSwgewo+Pj4gK8KgwqDCoMKgwqDCoMKgIC5tYnVz X2NvZGXCoMKgwqAgPSBNRURJQV9CVVNfRk1UX1NSR0dCOF8xWDgsCj4+PiArwqDCoMKgwqDCoMKg wqAgLmZtdF90eXBlwqDCoMKgID0gRk1UX0JBWUVSLAo+Pj4gK8KgwqDCoCB9LCB7Cj4+PiArwqDC oMKgwqDCoMKgwqAgLm1idXNfY29kZcKgwqDCoCA9IE1FRElBX0JVU19GTVRfU0JHR1I4XzFYOCwK Pj4+ICvCoMKgwqDCoMKgwqDCoCAuZm10X3R5cGXCoMKgwqAgPSBGTVRfQkFZRVIsCj4+PiArwqDC oMKgIH0sIHsKPj4+ICvCoMKgwqDCoMKgwqDCoCAubWJ1c19jb2RlwqDCoMKgID0gTUVESUFfQlVT X0ZNVF9TR0JSRzhfMVg4LAo+Pj4gK8KgwqDCoMKgwqDCoMKgIC5mbXRfdHlwZcKgwqDCoCA9IEZN VF9CQVlFUiwKPj4+ICvCoMKgwqAgfSwgewo+Pj4gK8KgwqDCoMKgwqDCoMKgIC5tYnVzX2NvZGXC oMKgwqAgPSBNRURJQV9CVVNfRk1UX1NHUkJHOF8xWDgsCj4+PiArwqDCoMKgwqDCoMKgwqAgLmZt dF90eXBlwqDCoMKgID0gRk1UX0JBWUVSLAo+Pj4gK8KgwqDCoCB9LAo+Pj4gK307Cj4+PiArCj4+ PiArc3RhdGljIGNvbnN0IHN0cnVjdCBpc3BzZF9pbl9mbXQgKmZpbmRfaW5fZm10KHUzMiBtYnVz X2NvZGUpCj4+PiArewo+Pj4gK8KgwqDCoCB1bnNpZ25lZCBpbnQgaSwgYXJyYXlfc2l6ZSA9IEFS UkFZX1NJWkUocmtpc3AxX2lzcF9pbnB1dF9mb3JtYXRzKTsKPj4+ICvCoMKgwqAgY29uc3Qgc3Ry dWN0IGlzcHNkX2luX2ZtdCAqZm10Owo+Pgo+PiBZb3UgY2FuIG1vdmUgdGhpcyB2YXJpYWJsZSBp bnNpZGUgdGhlIGxvb3AuCj4+Cj4+PiArCj4+PiArwqDCoMKgIGZvciAoaSA9IDA7IGkgPCBhcnJh eV9zaXplOyBpKyspIHsKPj4KPj4gSSB3b3VsZCByZW1vdmUgdGhlIGFycmF5X3NpemUgbG9jYWwg dmFyaWFibGUsIGl0IGRvZXNuJ3QgaW1wcm92ZQo+PiByZWFkYWJpbGl0eS4gU2FtZSBmb3IgdGhl IG5leHQgZnVuY3Rpb24uCj4+Cj4+PiArwqDCoMKgwqDCoMKgwqAgZm10ID0gJnJraXNwMV9pc3Bf aW5wdXRfZm9ybWF0c1tpXTsKPj4+ICvCoMKgwqDCoMKgwqDCoCBpZiAoZm10LT5tYnVzX2NvZGUg PT0gbWJ1c19jb2RlKQo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIGZtdDsKPj4+ ICvCoMKgwqAgfQo+Pj4gKwo+Pj4gK8KgwqDCoCByZXR1cm4gTlVMTDsKPj4+ICt9Cj4+PiArCj4+ PiArc3RhdGljIGNvbnN0IHN0cnVjdCBpc3BzZF9vdXRfZm10ICpmaW5kX291dF9mbXQodTMyIG1i dXNfY29kZSkKPj4+ICt7Cj4+PiArwqDCoMKgIHVuc2lnbmVkIGludCBpLCBhcnJheV9zaXplID0g QVJSQVlfU0laRShya2lzcDFfaXNwX291dHB1dF9mb3JtYXRzKTsKPj4+ICvCoMKgwqAgY29uc3Qg c3RydWN0IGlzcHNkX291dF9mbXQgKmZtdDsKPj4+ICsKPj4+ICvCoMKgwqAgZm9yIChpID0gMDsg aSA8IGFycmF5X3NpemU7IGkrKykgewo+Pj4gK8KgwqDCoMKgwqDCoMKgIGZtdCA9ICZya2lzcDFf aXNwX291dHB1dF9mb3JtYXRzW2ldOwo+Pj4gK8KgwqDCoMKgwqDCoMKgIGlmIChmbXQtPm1idXNf Y29kZSA9PSBtYnVzX2NvZGUpCj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gZm10 Owo+Pj4gK8KgwqDCoCB9Cj4+PiArCj4+PiArwqDCoMKgIHJldHVybiBOVUxMOwo+Pj4gK30KPj4+ ICsKPj4+ICtzdGF0aWMgaW50IHJraXNwMV9pc3Bfc2RfZW51bV9tYnVzX2NvZGUoc3RydWN0IHY0 bDJfc3ViZGV2ICpzZCwKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBzdHJ1Y3QgdjRsMl9zdWJkZXZfcGFkX2NvbmZpZyAqY2ZnLAo+Pj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0cnVjdCB2NGwyX3N1YmRldl9tYnVzX2NvZGVfZW51 bSAqY29kZSkKPj4+ICt7Cj4+PiArwqDCoMKgIHVuc2lnbmVkIGludCBpID0gY29kZS0+aW5kZXg7 Cj4+PiArCj4+PiArwqDCoMKgIGlmICgoY29kZS0+cGFkICE9IFJLSVNQMV9JU1BfUEFEX1NJTksp ICYmCj4+PiArwqDCoMKgwqDCoMKgwqAgKGNvZGUtPnBhZCAhPSBSS0lTUDFfSVNQX1BBRF9TT1VS Q0VfUEFUSCkpIHsKPj4+ICvCoMKgwqDCoMKgwqDCoCBpZiAoaSA+IDApCj4+PiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCByZXR1cm4gLUVJTlZBTDsKPj4+ICvCoMKgwqDCoMKgwqDCoCBjb2RlLT5j b2RlID0gTUVESUFfQlVTX0ZNVF9GSVhFRDsKPj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gMDsK Pj4+ICvCoMKgwqAgfQo+Pj4gKwo+Pj4gK8KgwqDCoCBpZiAoY29kZS0+cGFkID09IFJLSVNQMV9J U1BfUEFEX1NJTkspIHsKPj4+ICvCoMKgwqDCoMKgwqDCoCBpZiAoaSA+PSBBUlJBWV9TSVpFKHJr aXNwMV9pc3BfaW5wdXRfZm9ybWF0cykpCj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1 cm4gLUVJTlZBTDsKPj4+ICvCoMKgwqDCoMKgwqDCoCBjb2RlLT5jb2RlID0gcmtpc3AxX2lzcF9p bnB1dF9mb3JtYXRzW2ldLm1idXNfY29kZTsKPj4+ICvCoMKgwqAgfSBlbHNlIHsKPj4+ICvCoMKg wqDCoMKgwqDCoCBpZiAoaSA+PSBBUlJBWV9TSVpFKHJraXNwMV9pc3Bfb3V0cHV0X2Zvcm1hdHMp KQo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIC1FSU5WQUw7Cj4+PiArwqDCoMKg wqDCoMKgwqAgY29kZS0+Y29kZSA9IHJraXNwMV9pc3Bfb3V0cHV0X2Zvcm1hdHNbaV0ubWJ1c19j b2RlOwo+Pj4gK8KgwqDCoCB9Cj4+Cj4+IE9uIHRoZSBvdGhlciBoYW5kLCBtZXJnaW5nIHRoZSB0 d28gdGFibGVzIGFib3ZlIGludG8gb25lLCB5b3UgY291bGQKPj4gbWVyZ2UgdGhlIHR3byBicmFu Y2hlcyBoZXJlIGFuZCBvbmx5IGNvbnNpZGVyIGZvcm1hdHMgaW5kaWNhdGVkIGFzIHZhbGlkCj4+ IGZvciB0byB0aGUgcGFkIHlvdSB3YW50LiBNYXliZSB0aGUgY29kZSB3b3VsZCBiZSBjbGVhbmVy IGluIHRoZSBlbmQuCj4+Cj4+PiArCj4+PiArwqDCoMKgIHJldHVybiAwOwo+Pj4gK30KPj4+ICsK Pj4+ICtzdGF0aWMgaW50IHJraXNwMV9pc3Bfc2RfaW5pdF9jb25maWcoc3RydWN0IHY0bDJfc3Vi ZGV2ICpzZCwKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0 cnVjdCB2NGwyX3N1YmRldl9wYWRfY29uZmlnICpjZmcpCj4+PiArewo+Pj4gK8KgwqDCoCBzdHJ1 Y3QgdjRsMl9yZWN0ICptZl9pbl9jcm9wLCAqbWZfb3V0X2Nyb3A7Cj4+PiArwqDCoMKgIHN0cnVj dCB2NGwyX21idXNfZnJhbWVmbXQgKm1mX2luLCAqbWZfb3V0Owo+Pj4gKwo+Pj4gK8KgwqDCoCBt Zl9pbiA9IHY0bDJfc3ViZGV2X2dldF90cnlfZm9ybWF0KHNkLCBjZmcsIFJLSVNQMV9JU1BfUEFE X1NJTkspOwo+Pj4gK8KgwqDCoCBtZl9pbi0+d2lkdGggPSBSS0lTUDFfREVGQVVMVF9XSURUSDsK Pj4+ICvCoMKgwqAgbWZfaW4tPmhlaWdodCA9IFJLSVNQMV9ERUZBVUxUX0hFSUdIVDsKPj4+ICvC oMKgwqAgbWZfaW4tPmZpZWxkID0gVjRMMl9GSUVMRF9OT05FOwo+Pj4gK8KgwqDCoCBtZl9pbi0+ Y29kZSA9IHJraXNwMV9pc3BfaW5wdXRfZm9ybWF0c1swXS5tYnVzX2NvZGU7Cj4+PiArCj4+PiAr wqDCoMKgIG1mX2luX2Nyb3AgPSB2NGwyX3N1YmRldl9nZXRfdHJ5X2Nyb3Aoc2QsIGNmZywgUktJ U1AxX0lTUF9QQURfU0lOSyk7Cj4+PiArwqDCoMKgIG1mX2luX2Nyb3AtPndpZHRoID0gUktJU1Ax X0RFRkFVTFRfV0lEVEg7Cj4+PiArwqDCoMKgIG1mX2luX2Nyb3AtPmhlaWdodCA9IFJLSVNQMV9E RUZBVUxUX0hFSUdIVDsKPj4+ICvCoMKgwqAgbWZfaW5fY3JvcC0+bGVmdCA9IDA7Cj4+PiArwqDC oMKgIG1mX2luX2Nyb3AtPnRvcCA9IDA7Cj4+PiArCj4+PiArwqDCoMKgIG1mX291dCA9IHY0bDJf c3ViZGV2X2dldF90cnlfZm9ybWF0KHNkLCBjZmcsCj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBSS0lTUDFfSVNQX1BBRF9TT1VSQ0VfUEFUSCk7Cj4+ PiArwqDCoMKgICptZl9vdXQgPSAqbWZfaW47Cj4+PiArwqDCoMKgIG1mX291dC0+Y29kZSA9IHJr aXNwMV9pc3Bfb3V0cHV0X2Zvcm1hdHNbMF0ubWJ1c19jb2RlOwo+Pj4gK8KgwqDCoCBtZl9vdXQt PnF1YW50aXphdGlvbiA9IFY0TDJfUVVBTlRJWkFUSU9OX0ZVTExfUkFOR0U7Cj4+PiArCj4+PiAr wqDCoMKgIG1mX291dF9jcm9wID0gdjRsMl9zdWJkZXZfZ2V0X3RyeV9jcm9wKHNkLCBjZmcsCj4+ PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBS S0lTUDFfSVNQX1BBRF9TT1VSQ0VfUEFUSCk7Cj4+PiArwqDCoMKgICptZl9vdXRfY3JvcCA9ICpt Zl9pbl9jcm9wOwo+Pj4gKwo+Pj4gK8KgwqDCoCByZXR1cm4gMDsKPj4+ICt9Cj4+PiArCj4+PiAr c3RhdGljIGludCBya2lzcDFfaXNwX3NkX2dldF9mbXQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwK Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgdjRsMl9zdWJkZXZf cGFkX2NvbmZpZyAqY2ZnLAo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0 cnVjdCB2NGwyX3N1YmRldl9mb3JtYXQgKmZtdCkKPj4+ICt7Cj4+PiArwqDCoMKgIHN0cnVjdCBy a2lzcDFfaXNwX3N1YmRldiAqaXNwX3NkID0gc2RfdG9faXNwX3NkKHNkKTsKPj4+ICvCoMKgwqAg c3RydWN0IHY0bDJfbWJ1c19mcmFtZWZtdCAqbWYgPSAmZm10LT5mb3JtYXQ7Cj4+PiArCj4+PiAr wqDCoMKgIGlmICgoZm10LT5wYWQgIT0gUktJU1AxX0lTUF9QQURfU0lOSykgJiYKPj4+ICvCoMKg wqDCoMKgwqDCoCAoZm10LT5wYWQgIT0gUktJU1AxX0lTUF9QQURfU09VUkNFX1BBVEgpKSB7Cj4+ PiArwqDCoMKgwqDCoMKgwqAgZm10LT5mb3JtYXQuY29kZSA9IE1FRElBX0JVU19GTVRfRklYRUQ7 Cj4+PiArwqDCoMKgwqDCoMKgwqAgLyoKPj4+ICvCoMKgwqDCoMKgwqDCoMKgICogTk9URTogc2V0 dGluZyBhIGZvcm1hdCBoZXJlIGRvZXNuJ3QgbWFrZSBtdWNoIHNlbnNlCj4+PiArwqDCoMKgwqDC oMKgwqDCoCAqIGJ1dCB2NGwyLWNvbXBsaWFuY2UgY29tcGxhaW5zCj4+PiArwqDCoMKgwqDCoMKg wqDCoCAqLwo+Pgo+PiBGb3IgdGhlIHBhcmFtcyBwYWQgSSBhZ3JlZWQgaXQgbWFrZXMgbm8gc2Vu c2UsIGFuZCBJIHRoaW5rCj4+IHY0bDItY29tcGxpYW5jZSBpcyBhdCBmYXVsdCwgc28gSSdkIHNl dCB3aWR0aCBhbmQgaGVpZ2h0IHRvIDAuIEZvciB0aGUKPj4gc3RhdHMgcGFkIHdlICpjb3VsZCog dXNlIHRoZSBzaXplIG9mIHRoZSBpbWFnZSBmcm9tIHdoaWNoIHN0YXRzIGFyZQo+PiBjb21wdXRl ZCwgYnV0IGJlY2F1c2UgdjRsMl9tZXRhX2Zvcm1hdCBoYXMgbm8gd2lkdGgvaGVpZ2h0LCBJIHRo aW5rIDAKPj4gd291bGQgYWxzbyBiZSBhcHByb3ByaWF0ZS4KPj4KPj4+ICvCoMKgwqDCoMKgwqDC oCBmbXQtPmZvcm1hdC53aWR0aCA9IFJLSVNQMV9ERUZBVUxUX1dJRFRIOwo+Pj4gK8KgwqDCoMKg wqDCoMKgIGZtdC0+Zm9ybWF0LmhlaWdodCA9IFJLSVNQMV9ERUZBVUxUX0hFSUdIVDsKPj4+ICvC oMKgwqDCoMKgwqDCoCBmbXQtPmZvcm1hdC5maWVsZCA9IFY0TDJfRklFTERfTk9ORTsKPj4+ICvC oMKgwqDCoMKgwqDCoCByZXR1cm4gMDsKPj4+ICvCoMKgwqAgfQo+Pj4gKwo+Pj4gK8KgwqDCoCBp ZiAoZm10LT53aGljaCA9PSBWNEwyX1NVQkRFVl9GT1JNQVRfVFJZKSB7Cj4+PiArwqDCoMKgwqDC oMKgwqAgbWYgPSB2NGwyX3N1YmRldl9nZXRfdHJ5X2Zvcm1hdChzZCwgY2ZnLCBmbXQtPnBhZCk7 Cj4+PiArwqDCoMKgwqDCoMKgwqAgZm10LT5mb3JtYXQgPSAqbWY7Cj4+PiArwqDCoMKgwqDCoMKg wqAgcmV0dXJuIDA7Cj4+PiArwqDCoMKgIH0KPj4+ICsKPj4+ICvCoMKgwqAgaWYgKGZtdC0+cGFk ID09IFJLSVNQMV9JU1BfUEFEX1NJTkspIHsKPj4+ICvCoMKgwqDCoMKgwqDCoCAqbWYgPSBpc3Bf c2QtPmluX2ZybTsKPj4+ICvCoMKgwqAgfSBlbHNlIGlmIChmbXQtPnBhZCA9PSBSS0lTUDFfSVNQ X1BBRF9TT1VSQ0VfUEFUSCkgewo+Pj4gK8KgwqDCoMKgwqDCoMKgIC8qIGZvcm1hdCBvZiBzb3Vy Y2UgcGFkICovCj4+PiArwqDCoMKgwqDCoMKgwqAgKm1mID0gaXNwX3NkLT5pbl9mcm07Cj4+PiAr wqDCoMKgwqDCoMKgwqAgbWYtPmNvZGUgPSBpc3Bfc2QtPm91dF9mbXQubWJ1c19jb2RlOwo+Pj4g K8KgwqDCoMKgwqDCoMKgIC8qIHdpbmRvdyBzaXplIG9mIHNvdXJjZSBwYWQgKi8KPj4+ICvCoMKg wqDCoMKgwqDCoCBtZi0+d2lkdGggPSBpc3Bfc2QtPm91dF9jcm9wLndpZHRoOwo+Pj4gK8KgwqDC oMKgwqDCoMKgIG1mLT5oZWlnaHQgPSBpc3Bfc2QtPm91dF9jcm9wLmhlaWdodDsKPj4+ICvCoMKg wqDCoMKgwqDCoCBtZi0+cXVhbnRpemF0aW9uID0gaXNwX3NkLT5xdWFudGl6YXRpb247Cj4+PiAr wqDCoMKgIH0KPj4+ICvCoMKgwqAgbWYtPmZpZWxkID0gVjRMMl9GSUVMRF9OT05FOwo+Pgo+PiBU aGlzIGNhbiBiZSBzaW1wbGlmaWVkLCBwbGVhc2UgcmVhZCB0aHJvdWdoLCBvciBqdW1wIHRvIHRo ZSByZXZpZXcgb2YKPj4gcmtpc3AxX2lzcF9zdWJkZXYgYXQgdGhlIGVuZC4KPj4KPj4+ICsKPj4+ ICvCoMKgwqAgcmV0dXJuIDA7Cj4+PiArfQo+Pj4gKwo+Pj4gK3N0YXRpYyB2b2lkIHJraXNwMV9p c3Bfc2RfdHJ5X2ZtdChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLAo+Pj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgdW5zaWduZWQgaW50IHBhZCwKPj4+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0cnVjdCB2NGwyX21idXNfZnJhbWVmbXQgKmZtdCkKPj4+ ICt7Cj4+PiArwqDCoMKgIHN0cnVjdCBya2lzcDFfZGV2aWNlICppc3BfZGV2ID0gc2RfdG9faXNw X2RldihzZCk7Cj4+PiArwqDCoMKgIHN0cnVjdCBya2lzcDFfaXNwX3N1YmRldiAqaXNwX3NkID0g JmlzcF9kZXYtPmlzcF9zZGV2Owo+Pj4gK8KgwqDCoCBjb25zdCBzdHJ1Y3QgaXNwc2Rfb3V0X2Zt dCAqb3V0X2ZtdDsKPj4+ICvCoMKgwqAgY29uc3Qgc3RydWN0IGlzcHNkX2luX2ZtdCAqaW5fZm10 Owo+Pj4gKwo+Pj4gK8KgwqDCoCBzd2l0Y2ggKHBhZCkgewo+Pj4gK8KgwqDCoCBjYXNlIFJLSVNQ MV9JU1BfUEFEX1NJTks6Cj4+PiArwqDCoMKgwqDCoMKgwqAgaW5fZm10ID0gZmluZF9pbl9mbXQo Zm10LT5jb2RlKTsKPj4+ICvCoMKgwqDCoMKgwqDCoCBpZiAoaW5fZm10KQo+Pj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqAgZm10LT5jb2RlID0gaW5fZm10LT5tYnVzX2NvZGU7Cj4+PiArwqDCoMKg wqDCoMKgwqAgZWxzZQo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZm10LT5jb2RlID0gTUVE SUFfQlVTX0ZNVF9TUkdHQjEwXzFYMTA7Cj4+Cj4+IFlvdSB3cml0ZSBNRURJQV9CVVNfRk1UX1NS R0dCMTBfMVgxMCBleHBsaWNpdGx5IGhlcmUsIHdoaWxlIHlvdSB1c2UKPj4gcmtpc3AxX2lzcF9v dXRwdXRfZm9ybWF0c1swXS5tYnVzX2NvZGUgYmVsb3cgKGFuZCBpbiBvdGhlciBwbGFjZXMpLiBJ Cj4+IHdvdWxkIHN0YW5kYXJkaXNlIG9uIG9uZSBvZiB0aGUgdHdvIChleHBsaWNpdCBmb3JtYXRz IG9yIGFycmF5WzBdKSwgd2l0aAo+PiBhIHByZWZlcmVuY2UgZm9yIHRoZSBmaXJzdCBhcyB0aGF0 IHdvdWxkIGFsbG93IG1lcmdpbmcgdGhlIGlucHV0IGFuZAo+PiBvdXRwdXQgYXJyYXlzIG1vcmUg ZWFzaWx5LiBJIHdvdWxkIHRoZW4gY3JlYXRlIHR3byAjZGVmaW5lLAo+PiBSS0lTUDFfREVGX0lO UFVUX0ZPUk1BVCBhbmQgUktJU1AyX0RFRl9PVVRQVVRfRk9STUFUIChvciBzaW1pbGFyKS4KPj4g U2ltaWxhciBtYWNyb3MgZm9yIHRoZSBkZWZhdWx0IHdpZHRoIGFuZCBoZWlnaHQgY291bGQgYWxz byBiZSB1c2VmdWwsIHRvCj4+IG1ha2UgaXQgZWFzaWVyIHRvIGNoYW5nZSB0aGVtLgo+Pgo+Pj4g K8KgwqDCoMKgwqDCoMKgIGZtdC0+d2lkdGjCoCA9IGNsYW1wX3QodTMyLCBmbXQtPndpZHRoLCBD SUZfSVNQX0lOUFVUX1dfTUlOLAo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBDSUZfSVNQX0lOUFVUX1dfTUFYKTsKPj4+ICvCoMKgwqDCoMKgwqDCoCBmbXQt PmhlaWdodCA9IGNsYW1wX3QodTMyLCBmbXQtPmhlaWdodCwgQ0lGX0lTUF9JTlBVVF9IX01JTiwK Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgQ0lGX0lTUF9J TlBVVF9IX01BWCk7Cj4+PiArwqDCoMKgwqDCoMKgwqAgYnJlYWs7Cj4+PiArwqDCoMKgIGNhc2Ug UktJU1AxX0lTUF9QQURfU09VUkNFX1BBVEg6Cj4+PiArwqDCoMKgwqDCoMKgwqAgb3V0X2ZtdCA9 IGZpbmRfb3V0X2ZtdChmbXQtPmNvZGUpOwo+Pj4gK8KgwqDCoMKgwqDCoMKgIGlmIChvdXRfZm10 KQo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZm10LT5jb2RlID0gb3V0X2ZtdC0+bWJ1c19j b2RlOwo+Pj4gK8KgwqDCoMKgwqDCoMKgIGVsc2UKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IGZtdC0+Y29kZSA9IHJraXNwMV9pc3Bfb3V0cHV0X2Zvcm1hdHNbMF0ubWJ1c19jb2RlOwo+Pj4g K8KgwqDCoMKgwqDCoMKgIC8qIHdpbmRvdyBzaXplIGlzIHNldCBpbiBzX3NlbGVjdGlvbiAqLwo+ Pj4gK8KgwqDCoMKgwqDCoMKgIGZtdC0+d2lkdGjCoCA9IGlzcF9zZC0+b3V0X2Nyb3Aud2lkdGg7 Cj4+PiArwqDCoMKgwqDCoMKgwqAgZm10LT5oZWlnaHQgPSBpc3Bfc2QtPm91dF9jcm9wLmhlaWdo dDsKPj4KPj4gVGhpcyBmdW5jdGlvbiBvcGVyYXRlcyBvbiB0aGUgVFJZIGNvbmZpZ3VyYXRpb24g dG9vLCBpbiB3aGljaCBjYXNlIHlvdQo+PiBzaG91bGQgdXNlIHRoZSBUUlkgY3JvcCByZWN0YW5n bGUgaGVyZSwgbm90IHRoZSBBQ1RJVkUgb25lLiBJZiB5b3UndmUKPj4gYWxyZWFkeSBqdW1wZWQg dG8gdGhlIHJldmlldyBvZiBya2lzcDFfaXNwX3N1YmRldiB5b3Uga25vdyBteSBwcm9wb3NhbAo+ PiB0byBzaW1wbGlmeSB0aGlzLiBPdGhlcndpc2Ugbm93IG1heSBiZSBhIGdvb2QgdGltZSB0byBk byBzbyA6LSkKPj4KPj4+ICvCoMKgwqDCoMKgwqDCoCAvKiBmdWxsIHJhbmdlIGJ5IGRlZmF1bHQg Ki8KPj4+ICvCoMKgwqDCoMKgwqDCoCBpZiAoIWZtdC0+cXVhbnRpemF0aW9uKQo+Pj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqAgZm10LT5xdWFudGl6YXRpb24gPSBWNEwyX1FVQU5USVpBVElPTl9G VUxMX1JBTkdFOwo+Pj4gK8KgwqDCoMKgwqDCoMKgIGJyZWFrOwo+Pj4gK8KgwqDCoCB9Cj4+PiAr Cj4+PiArwqDCoMKgIGZtdC0+ZmllbGQgPSBWNEwyX0ZJRUxEX05PTkU7Cj4+PiArfQo+Pj4gKwo+ Pj4gK3N0YXRpYyBpbnQgcmtpc3AxX2lzcF9zZF9zZXRfZm10KHN0cnVjdCB2NGwyX3N1YmRldiAq c2QsCj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IHY0bDJfc3Vi ZGV2X3BhZF9jb25maWcgKmNmZywKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBzdHJ1Y3QgdjRsMl9zdWJkZXZfZm9ybWF0ICpmbXQpCj4+PiArewo+Pj4gK8KgwqDCoCBzdHJ1 Y3Qgcmtpc3AxX2RldmljZSAqaXNwX2RldiA9IHNkX3RvX2lzcF9kZXYoc2QpOwo+Pj4gK8KgwqDC oCBzdHJ1Y3Qgcmtpc3AxX2lzcF9zdWJkZXYgKmlzcF9zZCA9ICZpc3BfZGV2LT5pc3Bfc2RldjsK Pj4+ICvCoMKgwqAgc3RydWN0IHY0bDJfbWJ1c19mcmFtZWZtdCAqbWYgPSAmZm10LT5mb3JtYXQ7 Cj4+PiArCj4+PiArwqDCoMKgIGlmICgoZm10LT5wYWQgIT0gUktJU1AxX0lTUF9QQURfU0lOSykg JiYKPj4+ICvCoMKgwqDCoMKgwqDCoCAoZm10LT5wYWQgIT0gUktJU1AxX0lTUF9QQURfU09VUkNF X1BBVEgpKQo+Pj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiBya2lzcDFfaXNwX3NkX2dldF9mbXQo c2QsIGNmZywgZm10KTsKPj4+ICsKPj4+ICvCoMKgwqAgcmtpc3AxX2lzcF9zZF90cnlfZm10KHNk LCBmbXQtPnBhZCwgbWYpOwo+Pj4gKwo+Pj4gK8KgwqDCoCBpZiAoZm10LT53aGljaCA9PSBWNEwy X1NVQkRFVl9GT1JNQVRfVFJZKSB7Cj4+PiArwqDCoMKgwqDCoMKgwqAgc3RydWN0IHY0bDJfbWJ1 c19mcmFtZWZtdCAqdHJ5X21mOwo+Pj4gKwo+Pj4gK8KgwqDCoMKgwqDCoMKgIHRyeV9tZiA9IHY0 bDJfc3ViZGV2X2dldF90cnlfZm9ybWF0KHNkLCBjZmcsIGZtdC0+cGFkKTsKPj4+ICvCoMKgwqDC oMKgwqDCoCAqdHJ5X21mID0gKm1mOwo+Pj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiAwOwo+Pgo+ PiBXaGVuIHNldHRpbmcgdGhlIGZvcm1hdCBvbiB0aGUgc2luayBwYWQgdGhlIGNyb3AgcmVjdGFu Z2xlcyBuZWVkIHRvIGJlCj4+IHJlc2V0IChoZXJlLCBhbmQgZm9yIHRoZSBBQ1RJVkUgZm9ybWF0 IGJlbG93IHRvbykuCj4+Cj4+PiArwqDCoMKgIH0KPj4+ICsKPj4+ICvCoMKgwqAgaWYgKGZtdC0+ cGFkID09IFJLSVNQMV9JU1BfUEFEX1NJTkspIHsKPj4+ICvCoMKgwqDCoMKgwqDCoCBjb25zdCBz dHJ1Y3QgaXNwc2RfaW5fZm10ICppbl9mbXQ7Cj4+PiArCj4+PiArwqDCoMKgwqDCoMKgwqAgaW5f Zm10ID0gZmluZF9pbl9mbXQobWYtPmNvZGUpOwo+Pj4gK8KgwqDCoMKgwqDCoMKgIGlzcF9zZC0+ aW5fZm10ID0gKmluX2ZtdDsKPj4+ICvCoMKgwqDCoMKgwqDCoCBpc3Bfc2QtPmluX2ZybSA9ICpt ZjsKPj4+ICvCoMKgwqAgfSBlbHNlIGlmIChmbXQtPnBhZCA9PSBSS0lTUDFfSVNQX1BBRF9TT1VS Q0VfUEFUSCkgewo+Pj4gK8KgwqDCoMKgwqDCoMKgIGNvbnN0IHN0cnVjdCBpc3BzZF9vdXRfZm10 ICpvdXRfZm10Owo+Pj4gKwo+Pj4gK8KgwqDCoMKgwqDCoMKgIC8qIElnbm9yZSB3aWR0aC9oZWln aHQgKi8KPj4+ICvCoMKgwqDCoMKgwqDCoCBvdXRfZm10ID0gZmluZF9vdXRfZm10KG1mLT5jb2Rl KTsKPj4+ICvCoMKgwqDCoMKgwqDCoCBpc3Bfc2QtPm91dF9mbXQgPSAqb3V0X2ZtdDsKPj4KPj4g SSB3b3VsZCByZXR1cm4gdGhlIGluX2ZtdCBhbmQgb3V0X2ZtdCBmcm9tIHJraXNwMV9pc3Bfc2Rf dHJ5X2ZtdCgpIGFzIGl0Cj4+IGFscmVhZHkgbG9va3MgdGhlbSB1cC4gSWYgeW91IG1lcmdlIHRo ZSBpbnB1dCBhbmQgb3V0cHV0IHRhYmxlcywgeW91J2xsCj4+IGhhdmUgYSBzaW5nbGUgZm9ybWF0 IGluZm8gc3RydWN0dXJlIHR5cGUsIGFuZCBya2lzcDFfaXNwX3NkX3RyeV9mbXQoKQo+PiBjb3Vs ZCByZXR1cm4gdGhlIGVudHJ5IGZvciB0aGUgcGFkIGl0IG9wZXJhdGVzIG9uLgo+Pgo+Pj4gK8Kg wqDCoMKgwqDCoMKgIC8qCj4+PiArwqDCoMKgwqDCoMKgwqDCoCAqIEl0IGlzIHF1YW50aXphdGlv biBmb3Igb3V0cHV0LAo+Pj4gK8KgwqDCoMKgwqDCoMKgwqAgKiBpc3AgdXNlIGJ0NjAxIGxpbWl0 LXJhbmdlIGluIGludGVybmFsCj4+PiArwqDCoMKgwqDCoMKgwqDCoCAqLwo+Pj4gK8KgwqDCoMKg wqDCoMKgIGlzcF9zZC0+cXVhbnRpemF0aW9uID0gbWYtPnF1YW50aXphdGlvbjsKPj4+ICvCoMKg wqAgfQo+Pj4gKwo+Pj4gK8KgwqDCoCByZXR1cm4gMDsKPj4+ICt9Cj4+PiArCj4+PiArc3RhdGlj IHZvaWQgcmtpc3AxX2lzcF9zZF90cnlfY3JvcChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLAo+Pj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IHY0bDJfc3ViZGV2X3Bh ZF9jb25maWcgKmNmZywKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0 cnVjdCB2NGwyX3N1YmRldl9zZWxlY3Rpb24gKnNlbCkKPj4+ICt7Cj4+PiArwqDCoMKgIHN0cnVj dCBya2lzcDFfaXNwX3N1YmRldiAqaXNwX3NkID0gc2RfdG9faXNwX3NkKHNkKTsKPj4+ICvCoMKg wqAgc3RydWN0IHY0bDJfbWJ1c19mcmFtZWZtdCBpbl9mcm0gPSBpc3Bfc2QtPmluX2ZybTsKPj4+ ICvCoMKgwqAgc3RydWN0IHY0bDJfcmVjdCBpbl9jcm9wID0gaXNwX3NkLT5pbl9jcm9wOwo+Pj4g K8KgwqDCoCBzdHJ1Y3QgdjRsMl9yZWN0ICppbnB1dCA9ICZzZWwtPnI7Cj4+PiArCj4+PiArwqDC oMKgIGlmIChzZWwtPndoaWNoID09IFY0TDJfU1VCREVWX0ZPUk1BVF9UUlkpIHsKPj4+ICvCoMKg wqDCoMKgwqDCoCBpbl9mcm0gPSAqdjRsMl9zdWJkZXZfZ2V0X3RyeV9mb3JtYXQoc2QsIGNmZywK Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBSS0lTUDFfSVNQX1BBRF9TSU5LKTsKPj4+ICvCoMKgwqDCoMKgwqDCoCBpbl9jcm9wID0g KnY0bDJfc3ViZGV2X2dldF90cnlfY3JvcChzZCwgY2ZnLAo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBSS0lTUDFfSVNQX1BBRF9TSU5L KTsKPj4+ICvCoMKgwqAgfQo+Pj4gKwo+Pj4gK8KgwqDCoCBpbnB1dC0+bGVmdCA9IEFMSUdOKGlu cHV0LT5sZWZ0LCAyKTsKPj4+ICvCoMKgwqAgaW5wdXQtPndpZHRoID0gQUxJR04oaW5wdXQtPndp ZHRoLCAyKTsKPj4+ICsKPj4+ICvCoMKgwqAgaWYgKHNlbC0+cGFkID09IFJLSVNQMV9JU1BfUEFE X1NJTkspIHsKPj4+ICvCoMKgwqDCoMKgwqDCoCBpbnB1dC0+bGVmdCA9IGNsYW1wX3QodTMyLCBp bnB1dC0+bGVmdCwgMCwgaW5fZnJtLndpZHRoKTsKPj4+ICvCoMKgwqDCoMKgwqDCoCBpbnB1dC0+ dG9wID0gY2xhbXBfdCh1MzIsIGlucHV0LT50b3AsIDAsIGluX2ZybS5oZWlnaHQpOwo+Pj4gK8Kg wqDCoMKgwqDCoMKgIGlucHV0LT53aWR0aCA9IGNsYW1wX3QodTMyLCBpbnB1dC0+d2lkdGgsIENJ Rl9JU1BfSU5QVVRfV19NSU4sCj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgaW5fZnJtLndpZHRoIC0gaW5wdXQtPmxlZnQpOwo+Pj4gK8KgwqDCoMKgwqDC oMKgIGlucHV0LT5oZWlnaHQgPSBjbGFtcF90KHUzMiwgaW5wdXQtPmhlaWdodCwKPj4+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBDSUZfSVNQX0lOUFVUX0hfTUlOLAo+ Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGluX2ZybS5oZWlnaHQg LSBpbnB1dC0+dG9wKTsKPj4+ICvCoMKgwqAgfSBlbHNlIGlmIChzZWwtPnBhZCA9PSBSS0lTUDFf SVNQX1BBRF9TT1VSQ0VfUEFUSCkgewo+Pj4gK8KgwqDCoMKgwqDCoMKgIGlucHV0LT5sZWZ0ID0g Y2xhbXBfdCh1MzIsIGlucHV0LT5sZWZ0LCAwLCBpbl9jcm9wLndpZHRoKTsKPj4+ICvCoMKgwqDC oMKgwqDCoCBpbnB1dC0+dG9wID0gY2xhbXBfdCh1MzIsIGlucHV0LT50b3AsIDAsIGluX2Nyb3Au aGVpZ2h0KTsKPj4+ICvCoMKgwqDCoMKgwqDCoCBpbnB1dC0+d2lkdGggPSBjbGFtcF90KHUzMiwg aW5wdXQtPndpZHRoLCBDSUZfSVNQX09VVFBVVF9XX01JTiwKPj4+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpbl9jcm9wLndpZHRoIC0gaW5wdXQtPmxlZnQp Owo+Pj4gK8KgwqDCoMKgwqDCoMKgIGlucHV0LT5oZWlnaHQgPSBjbGFtcF90KHUzMiwgaW5wdXQt PmhlaWdodCwKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBDSUZf SVNQX09VVFBVVF9IX01JTiwKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBpbl9jcm9wLmhlaWdodCAtIGlucHV0LT50b3ApOwo+Pj4gK8KgwqDCoCB9Cj4+PiArfQo+ Pj4gKwo+Pj4gK3N0YXRpYyBpbnQgcmtpc3AxX2lzcF9zZF9nZXRfc2VsZWN0aW9uKHN0cnVjdCB2 NGwyX3N1YmRldiAqc2QsCj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgc3RydWN0IHY0bDJfc3ViZGV2X3BhZF9jb25maWcgKmNmZywKPj4+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgdjRsMl9zdWJkZXZf c2VsZWN0aW9uICpzZWwpCj4+PiArewo+Pj4gK8KgwqDCoCBzdHJ1Y3Qgcmtpc3AxX2lzcF9zdWJk ZXYgKmlzcF9zZCA9IHNkX3RvX2lzcF9zZChzZCk7Cj4+PiArwqDCoMKgIHN0cnVjdCB2NGwyX21i dXNfZnJhbWVmbXQgKmZybTsKPj4+ICvCoMKgwqAgc3RydWN0IHY0bDJfcmVjdCAqcmVjdDsKPj4+ ICsKPj4+ICvCoMKgwqAgaWYgKHNlbC0+cGFkICE9IFJLSVNQMV9JU1BfUEFEX1NPVVJDRV9QQVRI ICYmCj4+PiArwqDCoMKgwqDCoMKgwqAgc2VsLT5wYWQgIT0gUktJU1AxX0lTUF9QQURfU0lOSykK Pj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gLUVJTlZBTDsKPj4+ICsKPj4+ICvCoMKgwqAgc3dp dGNoIChzZWwtPnRhcmdldCkgewo+Pj4gK8KgwqDCoCBjYXNlIFY0TDJfU0VMX1RHVF9DUk9QX0JP VU5EUzoKPj4+ICvCoMKgwqDCoMKgwqDCoCBpZiAoc2VsLT5wYWQgPT0gUktJU1AxX0lTUF9QQURf U0lOSykgewo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgKHNlbC0+d2hpY2ggPT0gVjRM Ml9TVUJERVZfRk9STUFUX1RSWSkKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg ZnJtID0gdjRsMl9zdWJkZXZfZ2V0X3RyeV9mb3JtYXQoc2QsIGNmZywKPj4+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHNl bC0+cGFkKTsKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGVsc2UKPj4+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgZnJtID0gJmlzcF9zZC0+aW5fZnJtOwo+Pj4gKwo+Pj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqAgc2VsLT5yLmhlaWdodCA9IGZybS0+aGVpZ2h0Owo+Pj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqAgc2VsLT5yLndpZHRoID0gZnJtLT53aWR0aDsKPj4+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIHNlbC0+ci5sZWZ0ID0gMDsKPj4+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIHNlbC0+ci50b3AgPSAwOwo+Pj4gK8KgwqDCoMKgwqDCoMKgIH0gZWxzZSB7Cj4+PiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAoc2VsLT53aGljaCA9PSBWNEwyX1NVQkRFVl9GT1JN QVRfVFJZKQo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZWN0ID0gdjRsMl9z dWJkZXZfZ2V0X3RyeV9jcm9wKHNkLCBjZmcsCj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIFJLSVNQMV9JU1BfUEFEX1NJTkspOwo+Pj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZWxzZQo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCByZWN0ID0gJmlzcF9zZC0+aW5fY3JvcDsKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIHNlbC0+ciA9ICpyZWN0Owo+Pj4gK8KgwqDCoMKgwqDCoMKgIH0KPj4+ICvCoMKgwqDCoMKg wqDCoCBicmVhazsKPj4+ICvCoMKgwqAgY2FzZSBWNEwyX1NFTF9UR1RfQ1JPUDoKPj4+ICvCoMKg wqDCoMKgwqDCoCBpZiAoc2VsLT53aGljaCA9PSBWNEwyX1NVQkRFVl9GT1JNQVRfVFJZKQo+Pj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmVjdCA9IHY0bDJfc3ViZGV2X2dldF90cnlfY3JvcChz ZCwgY2ZnLCBzZWwtPnBhZCk7Cj4+PiArwqDCoMKgwqDCoMKgwqAgZWxzZSBpZiAoc2VsLT5wYWQg PT0gUktJU1AxX0lTUF9QQURfU0lOSykKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJlY3Qg PSAmaXNwX3NkLT5pbl9jcm9wOwo+Pj4gK8KgwqDCoMKgwqDCoMKgIGVsc2UKPj4+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIHJlY3QgPSAmaXNwX3NkLT5vdXRfY3JvcDsKPj4+ICvCoMKgwqDCoMKg wqDCoCBzZWwtPnIgPSAqcmVjdDsKPj4+ICvCoMKgwqDCoMKgwqDCoCBicmVhazsKPj4+ICvCoMKg wqAgZGVmYXVsdDoKPj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gLUVJTlZBTDsKPj4+ICvCoMKg wqAgfQo+Pj4gKwo+Pj4gK8KgwqDCoCByZXR1cm4gMDsKPj4+ICt9Cj4+PiArCj4+PiArc3RhdGlj IGludCBya2lzcDFfaXNwX3NkX3NldF9zZWxlY3Rpb24oc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwK Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3Qg djRsMl9zdWJkZXZfcGFkX2NvbmZpZyAqY2ZnLAo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0cnVjdCB2NGwyX3N1YmRldl9zZWxlY3Rpb24gKnNlbCkK Pj4+ICt7Cj4+PiArwqDCoMKgIHN0cnVjdCBya2lzcDFfaXNwX3N1YmRldiAqaXNwX3NkID0gc2Rf dG9faXNwX3NkKHNkKTsKPj4+ICvCoMKgwqAgc3RydWN0IHJraXNwMV9kZXZpY2UgKmRldiA9IHNk X3RvX2lzcF9kZXYoc2QpOwo+Pj4gKwo+Pj4gK8KgwqDCoCBpZiAoc2VsLT5wYWQgIT0gUktJU1Ax X0lTUF9QQURfU09VUkNFX1BBVEggJiYKPj4+ICvCoMKgwqDCoMKgwqDCoCBzZWwtPnBhZCAhPSBS S0lTUDFfSVNQX1BBRF9TSU5LKQo+Pj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiAtRUlOVkFMOwo+ Pj4gK8KgwqDCoCBpZiAoc2VsLT50YXJnZXQgIT0gVjRMMl9TRUxfVEdUX0NST1ApCj4+PiArwqDC oMKgwqDCoMKgwqAgcmV0dXJuIC1FSU5WQUw7Cj4+PiArCj4+PiArwqDCoMKgIHY0bDJfZGJnKDEs IHJraXNwMV9kZWJ1ZywgJmRldi0+djRsMl9kZXYsCj4+PiArwqDCoMKgwqDCoMKgwqDCoCAiJXM6 IHBhZDogJWQgc2VsKCVkLCVkKS8lZHglZFxuIiwgX19mdW5jX18sIHNlbC0+cGFkLAo+Pj4gK8Kg wqDCoMKgwqDCoMKgwqAgc2VsLT5yLmxlZnQsIHNlbC0+ci50b3AsIHNlbC0+ci53aWR0aCwgc2Vs LT5yLmhlaWdodCk7Cj4+PiArwqDCoMKgIHJraXNwMV9pc3Bfc2RfdHJ5X2Nyb3Aoc2QsIGNmZywg c2VsKTsKPj4+ICsKPj4+ICvCoMKgwqAgaWYgKHNlbC0+d2hpY2ggPT0gVjRMMl9TVUJERVZfRk9S TUFUX1RSWSkgewo+Pj4gK8KgwqDCoMKgwqDCoMKgIHN0cnVjdCB2NGwyX3JlY3QgKnRyeV9zZWwg PQo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdjRsMl9zdWJkZXZfZ2V0X3RyeV9jcm9wKHNk LCBjZmcsIHNlbC0+cGFkKTsKPj4+ICsKPj4+ICvCoMKgwqDCoMKgwqDCoCAqdHJ5X3NlbCA9IHNl bC0+cjsKPj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gMDsKPj4KPj4gV2hlbiBzZXR0aW5nIHRo ZSBjcm9wIHJlY3RhbmdsZSBvbiB0aGUgc2luayBwYWQgdGhlIHJlY3RhbmdsZSBvbiB0aGUKPj4g c291cmNlIHBhZCBzaG91bGQgYmUgcmVzZXQgKGFuZCBiZWxvdyBmb3IgdGhlIEFDVElWRSBmb3Jt YXQgdG9vKS4KPj4KPj4gVGhlIHJlc2l6ZXIgbG9naWMsIHRocm91Z2ggc2VsZWN0aW9uIHJlY3Rh bmdsZXMsIHNlZW1zIHRvIGJlIG1pc3NpbmcuIEkKPj4gYXNzdW1lIGl0J3MgY29uZmlndXJlZCB0 aHJvdWdoIHRoZSB2aWRlbyBub2RlcywgYnV0IHRoYXQncyBub3QgY29ycmVjdAo+PiBJJ20gYWZy YWlkLCBzY2FsaW5nIHNob3VsZCBiZSBjb25maWd1cmVkIG9uIHN1YmRldnMsIHNlZSBbMV0uIEkn bSBhZnJhaWQKPj4gdGhpcyBtZWFucyB0aGF0IHdlJ2xsIG5lZWQgc2VwYXJhdGUgc3ViZGV2cyBm b3IgdGhlIHJlc2l6ZXJzIDotUwo+Pgo+PiBbMV0gaHR0cHM6Ly9saW51eHR2Lm9yZy9kb3dubG9h ZHMvdjRsLWR2Yi1hcGlzL3VhcGkvdjRsL2Rldi1zdWJkZXYuaHRtbCNvcmRlci1vZi1jb25maWd1 cmF0aW9uLWFuZC1mb3JtYXQtcHJvcGFnYXRpb24KPj4KPj4+ICvCoMKgwqAgfQo+Pj4gKwo+Pj4g K8KgwqDCoCBpZiAoc2VsLT5wYWQgPT0gUktJU1AxX0lTUF9QQURfU0lOSykKPj4+ICvCoMKgwqDC oMKgwqDCoCBpc3Bfc2QtPmluX2Nyb3AgPSBzZWwtPnI7Cj4+PiArwqDCoMKgIGVsc2UKPj4+ICvC oMKgwqDCoMKgwqDCoCBpc3Bfc2QtPm91dF9jcm9wID0gc2VsLT5yOwo+Pj4gKwo+Pj4gK8KgwqDC oCByZXR1cm4gMDsKPj4+ICt9Cj4+PiArCj4+Cj4+IEknbGwgc2tpcCB0aGUgcGFydCByZWxhdGVk IHRvIHBvd2VyIG9uL29mZiBiZWxvdyBhcyBTYWthcmkgcmVxdWVzdGVkIGl0Cj4+IHRvIGJlIGhh bmRsZWQgdGhyb3VnaCBydW50aW1lIFBNLgo+Pgo+Pj4gK3N0YXRpYyBpbnQgbWlwaV9jc2kyX3Nf c3RyZWFtX3N0YXJ0KHN0cnVjdCBya2lzcDFfaXNwX3N1YmRldiAqaXNwX3NkLAo+Pj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0cnVjdCBya2lzcDFfc2Vuc29yICpz ZW5zb3IpCj4+PiArewo+Pj4gK8KgwqDCoCB1bmlvbiBwaHlfY29uZmlndXJlX29wdHMgb3B0cyA9 IHsgMCB9Owo+Pj4gK8KgwqDCoCBzdHJ1Y3QgcGh5X2NvbmZpZ3VyZV9vcHRzX21pcGlfZHBoeSAq Y2ZnID0gJm9wdHMubWlwaV9kcGh5Owo+Pj4gK8KgwqDCoCBzdHJ1Y3QgdjRsMl9jdHJsICpwaXhl bF9yYXRlOwo+Pj4gK8KgwqDCoCBzNjQgcGl4ZWxfY2xvY2s7Cj4+PiArCj4+PiArwqDCoMKgIHBp eGVsX3JhdGUgPSB2NGwyX2N0cmxfZmluZChzZW5zb3ItPnNkLT5jdHJsX2hhbmRsZXIsCj4+PiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgVjRMMl9DSURfUElYRUxfUkFU RSk7Cj4+PiArwqDCoMKgIGlmICghcGl4ZWxfcmF0ZSkgewo+Pj4gK8KgwqDCoMKgwqDCoMKgIHY0 bDJfd2FybihzZW5zb3ItPnNkLCAiTm8gcGl4ZWwgcmF0ZSBjb250cm9sIGluIHN1YmRldlxuIik7 Cj4+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIC1FUElQRTsKPj4+ICvCoMKgwqAgfQo+Pgo+PiBX b3VsZCBpdCBtYWtlIHNlbnNlIHRvIHJldHJpZXZlIChhbmQgY2FjaGUpIHRoZSBjb250cm9sIHBv aW50ZXIgKG5vdCBpdHMKPj4gdmFsdWUgb2YgY291cnNlKSBhdCBwcm9iZSB0aW1lIGFscmVhZHkg Pwo+Pgo+Pj4gKwo+Pj4gK8KgwqDCoCBwaXhlbF9jbG9jayA9IHY0bDJfY3RybF9nX2N0cmxfaW50 NjQocGl4ZWxfcmF0ZSk7Cj4+PiArwqDCoMKgIGlmICghcGl4ZWxfY2xvY2spIHsKPj4+ICvCoMKg wqDCoMKgwqDCoCB2NGwyX2VycihzZW5zb3ItPnNkLCAiSW52YWxpZCBwaXhlbCByYXRlIHZhbHVl XG4iKTsKPj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gLUVJTlZBTDsKPj4+ICvCoMKgwqAgfQo+ Pj4gKwo+Pj4gK8KgwqDCoCBwaHlfbWlwaV9kcGh5X2dldF9kZWZhdWx0X2NvbmZpZyhwaXhlbF9j bG9jaywgaXNwX3NkLT5pbl9mbXQuYnVzX3dpZHRoLAo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgc2Vuc29yLT5sYW5lcywgY2ZnKTsKPj4+ICvCoMKgwqAgcGh5 X3NldF9tb2RlKHNlbnNvci0+ZHBoeSwgUEhZX01PREVfTUlQSV9EUEhZKTsKPj4+ICvCoMKgwqAg cGh5X2NvbmZpZ3VyZShzZW5zb3ItPmRwaHksICZvcHRzKTsKPj4+ICvCoMKgwqAgcGh5X3Bvd2Vy X29uKHNlbnNvci0+ZHBoeSk7Cj4+PiArCj4+PiArwqDCoMKgIHJldHVybiAwOwo+Pj4gK30KPj4+ ICsKPj4+ICtzdGF0aWMgdm9pZCBtaXBpX2NzaTJfc19zdHJlYW1fc3RvcChzdHJ1Y3Qgcmtpc3Ax X3NlbnNvciAqc2Vuc29yKQo+Pj4gK3sKPj4+ICvCoMKgwqAgcGh5X3Bvd2VyX29mZihzZW5zb3It PmRwaHkpOwo+Pj4gK30KPj4+ICsKPj4+ICtzdGF0aWMgaW50IHJraXNwMV9pc3Bfc2Rfc19zdHJl YW0oc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgaW50IG9uKQo+Pj4gK3sKPj4+ICvCoMKgwqAgc3Ry dWN0IHJraXNwMV9kZXZpY2UgKmlzcF9kZXYgPSBzZF90b19pc3BfZGV2KHNkKTsKPj4+ICvCoMKg wqAgc3RydWN0IHY0bDJfc3ViZGV2ICpzZW5zb3Jfc2Q7Cj4+PiArwqDCoMKgIGludCByZXQgPSAw Owo+Pj4gKwo+Pj4gK8KgwqDCoCBpZiAoIW9uKSB7Cj4+PiArwqDCoMKgwqDCoMKgwqAgcmV0ID0g cmtpc3AxX2lzcF9zdG9wKGlzcF9kZXYpOwo+Pj4gK8KgwqDCoMKgwqDCoMKgIGlmIChyZXQgPCAw KQo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIHJldDsKPj4+ICvCoMKgwqDCoMKg wqDCoCBtaXBpX2NzaTJfc19zdHJlYW1fc3RvcChpc3BfZGV2LT5hY3RpdmVfc2Vuc29yKTsKPj4+ ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gMDsKPj4+ICvCoMKgwqAgfQo+Pj4gKwo+Pj4gK8KgwqDC oCBzZW5zb3Jfc2QgPSBnZXRfcmVtb3RlX3NlbnNvcihzZCk7Cj4+PiArwqDCoMKgIGlmICghc2Vu c29yX3NkKQo+Pj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiAtRU5PREVWOwo+Pj4gKwo+Pj4gK8Kg wqDCoCBpc3BfZGV2LT5hY3RpdmVfc2Vuc29yID0gc2RfdG9fc2Vuc29yKGlzcF9kZXYsIHNlbnNv cl9zZCk7Cj4+PiArwqDCoMKgIGlmICghaXNwX2Rldi0+YWN0aXZlX3NlbnNvcikKPj4+ICvCoMKg wqDCoMKgwqDCoCByZXR1cm4gLUVOT0RFVjsKPj4+ICsKPj4+ICvCoMKgwqAgYXRvbWljX3NldCgm aXNwX2Rldi0+aXNwX3NkZXYuZnJtX3N5bmNfc2VxLCAwKTsKPj4+ICvCoMKgwqAgcmV0ID0gcmtp c3AxX2NvbmZpZ19jaWYoaXNwX2Rldik7Cj4+PiArwqDCoMKgIGlmIChyZXQgPCAwKQo+Pj4gK8Kg wqDCoMKgwqDCoMKgIHJldHVybiByZXQ7Cj4+PiArCj4+PiArwqDCoMKgIC8qIFRPRE86IHN1cHBv cnQgb3RoZXIgaW50ZXJmYWNlcyAqLwo+Pj4gK8KgwqDCoCBpZiAoaXNwX2Rldi0+YWN0aXZlX3Nl bnNvci0+bWJ1cy50eXBlICE9IFY0TDJfTUJVU19DU0kyX0RQSFkpCj4+PiArwqDCoMKgwqDCoMKg wqAgcmV0dXJuIC1FSU5WQUw7Cj4+PiArCj4+PiArwqDCoMKgIHJldCA9IG1pcGlfY3NpMl9zX3N0 cmVhbV9zdGFydCgmaXNwX2Rldi0+aXNwX3NkZXYsCj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaXNwX2Rldi0+YWN0aXZlX3NlbnNvcik7Cj4+PiArwqDC oMKgIGlmIChyZXQgPCAwKQo+Pj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiByZXQ7Cj4+PiArCj4+ PiArwqDCoMKgIHJldCA9IHJraXNwMV9pc3Bfc3RhcnQoaXNwX2Rldik7Cj4+PiArwqDCoMKgIGlm IChyZXQpCj4+PiArwqDCoMKgwqDCoMKgwqAgbWlwaV9jc2kyX3Nfc3RyZWFtX3N0b3AoaXNwX2Rl di0+YWN0aXZlX3NlbnNvcik7Cj4+PiArCj4+PiArwqDCoMKgIHJldHVybiByZXQ7Cj4+PiArfQo+ Pj4gKwo+Pj4gK3N0YXRpYyBpbnQgcmtpc3AxX2lzcF9zZF9zX3Bvd2VyKHN0cnVjdCB2NGwyX3N1 YmRldiAqc2QsIGludCBvbikKPj4+ICt7Cj4+PiArwqDCoMKgIHN0cnVjdCBya2lzcDFfZGV2aWNl ICppc3BfZGV2ID0gc2RfdG9faXNwX2RldihzZCk7Cj4+PiArwqDCoMKgIGludCByZXQ7Cj4+PiAr Cj4+PiArwqDCoMKgIHY0bDJfZGJnKDEsIHJraXNwMV9kZWJ1ZywgJmlzcF9kZXYtPnY0bDJfZGV2 LCAic19wb3dlcjogJWRcbiIsIG9uKTsKPj4+ICsKPj4+ICvCoMKgwqAgaWYgKG9uKSB7Cj4+PiAr wqDCoMKgwqDCoMKgwqAgcmV0ID0gcG1fcnVudGltZV9nZXRfc3luYyhpc3BfZGV2LT5kZXYpOwo+ Pj4gK8KgwqDCoMKgwqDCoMKgIGlmIChyZXQgPCAwKQo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqAgcmV0dXJuIHJldDsKPj4+ICsKPj4+ICvCoMKgwqDCoMKgwqDCoCBya2lzcDFfY29uZmlnX2Ns ayhpc3BfZGV2KTsKPj4+ICvCoMKgwqAgfSBlbHNlIHsKPj4+ICvCoMKgwqDCoMKgwqDCoCByZXQg PSBwbV9ydW50aW1lX3B1dChpc3BfZGV2LT5kZXYpOwo+Pj4gK8KgwqDCoMKgwqDCoMKgIGlmIChy ZXQgPCAwKQo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIHJldDsKPj4+ICvCoMKg wqAgfQo+Pj4gKwo+Pj4gK8KgwqDCoCByZXR1cm4gMDsKPj4+ICt9Cj4+PiArCj4+PiArc3RhdGlj IGludCBya2lzcDFfc3ViZGV2X2xpbmtfdmFsaWRhdGUoc3RydWN0IG1lZGlhX2xpbmsgKmxpbmsp Cj4+PiArewo+Pj4gK8KgwqDCoCBpZiAobGluay0+c291cmNlLT5pbmRleCA9PSBSS0lTUDFfSVNQ X1BBRF9TSU5LX1BBUkFNUykKPj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gMDsKPj4+ICsKPj4+ ICvCoMKgwqAgcmV0dXJuIHY0bDJfc3ViZGV2X2xpbmtfdmFsaWRhdGUobGluayk7Cj4+PiArfQo+ Pj4gKwo+Pj4gK3N0YXRpYyBpbnQgcmtpc3AxX3N1YmRldl9mbXRfbGlua192YWxpZGF0ZShzdHJ1 Y3QgdjRsMl9zdWJkZXYgKnNkLAo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIHN0cnVjdCBtZWRpYV9saW5rICpsaW5rLAo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIHN0cnVjdCB2NGwyX3N1YmRldl9mb3JtYXQgKnNvdXJjZV9mbXQs Cj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IHY0bDJf c3ViZGV2X2Zvcm1hdCAqc2lua19mbXQpCj4+PiArewo+Pj4gK8KgwqDCoCBpZiAoc291cmNlX2Zt dC0+Zm9ybWF0LmNvZGUgIT0gc2lua19mbXQtPmZvcm1hdC5jb2RlKQo+Pj4gK8KgwqDCoMKgwqDC oMKgIHJldHVybiAtRUlOVkFMOwo+Pj4gKwo+Pj4gK8KgwqDCoCAvKiBDcm9wIGlzIGF2YWlsYWJs ZSAqLwo+Pj4gK8KgwqDCoCBpZiAoc291cmNlX2ZtdC0+Zm9ybWF0LndpZHRoIDwgc2lua19mbXQt PmZvcm1hdC53aWR0aCB8fAo+Pj4gK8KgwqDCoMKgwqDCoMKgIHNvdXJjZV9mbXQtPmZvcm1hdC5o ZWlnaHQgPCBzaW5rX2ZtdC0+Zm9ybWF0LmhlaWdodCkKPj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1 cm4gLUVJTlZBTDsKPj4KPj4gQ3JvcCBzaG91bGQgYmUgaGFuZGxlZCBvbiBwYWRzLCBub3Qgb24g bGlua3MuIFRoZSBzaXplIGF0IHRoZSBlbmRzIG9mCj4+IHRoZSBsaW5rIHNob3VsZCBtYXRjaC4g VGhpcyB3aWxsIGxpa2VseSByZXF1aXJlIGEgYml0IG9mIGEgcmVkZXNpZ24gb2YKPj4gdGhlIGZv cm1hdCBhbmQgc2VsZWN0aW9uIHJlY3RhbmdsZXMgaGFuZGxpbmcsIGJ1dCBJIHRoaW5rIGl0J3Mg YWxzbyBhbgo+PiBvcHBvcnR1bml0eSB0byBzaW1wbGlmeSB0aGUgY29kZS4KPj4KPj4+ICsKPj4+ ICvCoMKgwqAgcmV0dXJuIDA7Cj4+PiArfQo+Pj4gKwo+Pj4gK3N0YXRpYyB2b2lkIHJraXNwMV9p c3BfcXVldWVfZXZlbnRfc29mKHN0cnVjdCBya2lzcDFfaXNwX3N1YmRldiAqaXNwKQo+Pj4gK3sK Pj4+ICvCoMKgwqAgc3RydWN0IHY0bDJfZXZlbnQgZXZlbnQgPSB7Cj4+PiArwqDCoMKgwqDCoMKg wqAgLnR5cGUgPSBWNEwyX0VWRU5UX0ZSQU1FX1NZTkMsCj4+PiArwqDCoMKgwqDCoMKgwqAgLnUu ZnJhbWVfc3luYy5mcmFtZV9zZXF1ZW5jZSA9Cj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBh dG9taWNfaW5jX3JldHVybigmaXNwLT5mcm1fc3luY19zZXEpIC0gMSwKPj4KPj4gSSB3b3VsZCBt b3ZlIHRoZSBpbmNyZW1lbnQgdG8gdGhlIGNhbGxlciwgaGlkaW5nIGl0IGluIHRoaXMgZnVuY3Rp b24gaXMKPj4gZXJyb3ItcHJvbmUgKGFuZCBpZiB5b3UgbG9vayBhdCB0aGUgY2FsbGVyIEknbSBw b2ludGluZyBvdXQgb25lIHBvc3NpYmxlCj4+IGVycm9yIDotKSkuCj4+Cj4+IEluIGdlbmVyYWwg dXNhZ2Ugb2YgZnJtX3N5bmNfc2VxIHRocm91Z2ggdGhlIGRyaXZlciBzZWVtcyB0byBiZSB2ZXJ5 Cj4+IHJhY2UtcHJvbmUuIEl0J3MgcmVhZCBpbiB2YXJpb3VzIElSUSBoYW5kbGluZyBmdW5jdGlv bnMsIGFsbCBjb21pbmcgZnJvbQo+PiB0aGUgc2FtZSBJUlEsIHNvIHRoYXQgcGFydCBpcyBmaW5l IChhbmQgd291bGRuJ3QgcmVxdWlyZSBhbiBhdG9taWMKPj4gdmFyaWFibGUpLCBidXQgd2hlbiBy ZWFkIGZyb20gdGhlIGJ1ZmZlciBxdWV1ZSBoYW5kbGVycyBJIHJlYWxseSBnZXQgYQo+PiByZWQg bGlnaHQgZmxhc2hpbmcgaW4gbXkgaGVhZC4gSSdsbCB0cnkgdG8gaW52ZXN0aWdhdGUgbW9yZSB3 aGVuCj4+IHJldmlld2luZyB0aGUgbmV4dCBwYXRjaGVzLgo+IAo+IEkgc2VlIHRoYXQgdGhlIG9u bHkgcGxhY2Ugd2VyZSAnZnJhbWVfc2VxdWVuY2UnIGlzIHJlYWQgb3V0c2lkZSBvZiB0aGUgaXJx Cj4gaGFuZGxlcnMgaXMgaW4gdGhlIGNhcHR1cmUgaW4gJ3JraXNwMV92YjJfYnVmX3F1ZXVlJzoK PiAKPiAgwqDCoMKgwqAvKgo+ICDCoMKgwqDCoMKgwqDCoMKgICogSWYgdGhlcmUncyBubyBuZXh0 IGJ1ZmZlciBhc3NpZ25lZCwgcXVldWUgdGhpcyBidWZmZXIgZGlyZWN0bHkKPiAgwqDCoMKgwqDC oMKgwqDCoCAqIGFzIHRoZSBuZXh0IGJ1ZmZlciwgYW5kIHVwZGF0ZSB0aGUgbWVtb3J5IGludGVy ZmFjZS4KPiAgwqDCoMKgwqDCoMKgwqDCoCAqLwo+ICDCoMKgwqDCoMKgwqDCoCBpZiAoY2FwLT5p c19zdHJlYW1pbmcgJiYgIWNhcC0+YnVmLm5leHQgJiYKPiAgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBhdG9taWNfcmVhZCgmY2FwLT5ya2lzcDEtPmlzcC5mcmFtZV9zZXF1ZW5jZSkgPT0gLTEpIHsK PiAgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNhcC0+YnVmLm5leHQgPSBpc3BidWY7 Cj4gIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBya2lzcDFfc2V0X25leHRfYnVmKGNh cCk7Cj4gIMKgwqDCoMKgwqDCoMKgIH0gZWxzZSB7Cj4gIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBsaXN0X2FkZF90YWlsKCZpc3BidWYtPnF1ZXVlLCAmY2FwLT5idWYucXVldWUpOwo+ ICDCoMKgwqDCoMKgwqDCoCB9Cj4gVGhpcyAiaWYiIGNvbmRpdGlvbiBzZWVtcyB2ZXJ5IHNwZWNp ZmljLCBhIGNhc2Ugd2hlcmUgd2UgYWxyZWFkeSBzdHJlYW0gYnV0IHYtc3RhcnQgd2FzIG5vdCB5 ZXQgcmVjZWl2ZWQuCj4gSSB0aGluayBpdCBpcyBwb3NzaWJsZSB0byByZW1vdmUgdGhlIHRlc3Qg J2F0b21pY19yZWFkKCZjYXAtPnJraXNwMS0+aXNwLmZyYW1lX3NlcXVlbmNlKSA9PSAtMScKPiBm cm9tIHRoZSBhYm92ZSBjb25kaXRpb24gc28gdGhhdCB0aGUgbmV4dCBidWZmZXIgaXMgdXBkYXRl ZCBpbiBjYXNlIGl0IGlzIG51bGwgbm90IGp1c3QgYmVmb3JlIHRoZSBmaXJzdAo+IHYtc3RhcnQg c2lnbmFsLgo+IAo+IAo+IAo+IAo+IAo+Pgo+Pj4gK8KgwqDCoCB9Owo+Pj4gK8KgwqDCoCB2NGwy X2V2ZW50X3F1ZXVlKGlzcC0+c2QuZGV2bm9kZSwgJmV2ZW50KTsKPj4+ICt9Cj4+PiArCj4+PiAr c3RhdGljIGludCBya2lzcDFfaXNwX3NkX3N1YnNfZXZ0KHN0cnVjdCB2NGwyX3N1YmRldiAqc2Qs IHN0cnVjdCB2NGwyX2ZoICpmaCwKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIHN0cnVjdCB2NGwyX2V2ZW50X3N1YnNjcmlwdGlvbiAqc3ViKQo+Pj4gK3sKPj4+ICvCoMKg wqAgaWYgKHN1Yi0+dHlwZSAhPSBWNEwyX0VWRU5UX0ZSQU1FX1NZTkMpCj4+PiArwqDCoMKgwqDC oMKgwqAgcmV0dXJuIC1FSU5WQUw7Cj4+PiArCj4+PiArwqDCoMKgIC8qIExpbmUgbnVtYmVyLiBG b3Igbm93IG9ubHkgemVybyBhY2NlcHRlZC4gKi8KPj4KPj4gSXMgdGhlIGlkIGEgbGluZSBudW1i ZXIgZm9yIFY0TDJfRVZFTlRfRlJBTUVfU1lOQyA/IEl0J3Mgbm90IG1lbnRpb25lZAo+PiBmb3Ig VjRMMl9FVkVOVF9GUkFNRV9TWU5DIGluIHRoZSBWNEwyIHNwZWMsIHNvIEkgdGhpbmsgdGhpcyBj aGVjayBpcwo+PiBjb3JyZWN0LCBidXQgdGhlIGNvbW1lbnQgZG9lc24ndCBzZWVtIHRvIGJlLgo+ Pgo+Pj4gK8KgwqDCoCBpZiAoc3ViLT5pZCAhPSAwKQo+Pj4gK8KgwqDCoMKgwqDCoMKgIHJldHVy biAtRUlOVkFMOwo+Pj4gKwo+Pj4gK8KgwqDCoCByZXR1cm4gdjRsMl9ldmVudF9zdWJzY3JpYmUo ZmgsIHN1YiwgMCwgTlVMTCk7Cj4+PiArfQo+Pj4gKwo+Pj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3Qg djRsMl9zdWJkZXZfcGFkX29wcyBya2lzcDFfaXNwX3NkX3BhZF9vcHMgPSB7Cj4+PiArwqDCoMKg IC5lbnVtX21idXNfY29kZSA9IHJraXNwMV9pc3Bfc2RfZW51bV9tYnVzX2NvZGUsCj4+PiArwqDC oMKgIC5nZXRfc2VsZWN0aW9uID0gcmtpc3AxX2lzcF9zZF9nZXRfc2VsZWN0aW9uLAo+Pj4gK8Kg wqDCoCAuc2V0X3NlbGVjdGlvbiA9IHJraXNwMV9pc3Bfc2Rfc2V0X3NlbGVjdGlvbiwKPj4+ICvC oMKgwqAgLmluaXRfY2ZnID0gcmtpc3AxX2lzcF9zZF9pbml0X2NvbmZpZywKPj4+ICvCoMKgwqAg LmdldF9mbXQgPSBya2lzcDFfaXNwX3NkX2dldF9mbXQsCj4+PiArwqDCoMKgIC5zZXRfZm10ID0g cmtpc3AxX2lzcF9zZF9zZXRfZm10LAo+Pj4gK8KgwqDCoCAubGlua192YWxpZGF0ZSA9IHJraXNw MV9zdWJkZXZfZm10X2xpbmtfdmFsaWRhdGUsCj4+PiArfTsKPj4+ICsKPj4+ICtzdGF0aWMgY29u c3Qgc3RydWN0IG1lZGlhX2VudGl0eV9vcGVyYXRpb25zIHJraXNwMV9pc3Bfc2RfbWVkaWFfb3Bz ID0gewo+Pj4gK8KgwqDCoCAubGlua192YWxpZGF0ZSA9IHJraXNwMV9zdWJkZXZfbGlua192YWxp ZGF0ZSwKPj4+ICt9Owo+Pj4gKwo+Pj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZf dmlkZW9fb3BzIHJraXNwMV9pc3Bfc2RfdmlkZW9fb3BzID0gewo+Pj4gK8KgwqDCoCAuc19zdHJl YW0gPSBya2lzcDFfaXNwX3NkX3Nfc3RyZWFtLAo+Pj4gK307Cj4+PiArCj4+PiArc3RhdGljIGNv bnN0IHN0cnVjdCB2NGwyX3N1YmRldl9jb3JlX29wcyBya2lzcDFfaXNwX2NvcmVfb3BzID0gewo+ Pj4gK8KgwqDCoCAuc3Vic2NyaWJlX2V2ZW50ID0gcmtpc3AxX2lzcF9zZF9zdWJzX2V2dCwKPj4+ ICvCoMKgwqAgLnVuc3Vic2NyaWJlX2V2ZW50ID0gdjRsMl9ldmVudF9zdWJkZXZfdW5zdWJzY3Jp YmUsCj4+PiArwqDCoMKgIC5zX3Bvd2VyID0gcmtpc3AxX2lzcF9zZF9zX3Bvd2VyLAo+Pj4gK307 Cj4+PiArCj4+PiArc3RhdGljIHN0cnVjdCB2NGwyX3N1YmRldl9vcHMgcmtpc3AxX2lzcF9zZF9v cHMgPSB7Cj4+Cj4+IHN0YXRpYyBjb25zdAo+Pgo+Pj4gK8KgwqDCoCAuY29yZSA9ICZya2lzcDFf aXNwX2NvcmVfb3BzLAo+Pj4gK8KgwqDCoCAudmlkZW8gPSAmcmtpc3AxX2lzcF9zZF92aWRlb19v cHMsCj4+PiArwqDCoMKgIC5wYWQgPSAmcmtpc3AxX2lzcF9zZF9wYWRfb3BzLAo+Pj4gK307Cj4+ PiArCj4+PiArc3RhdGljIHZvaWQgcmtpc3AxX2lzcF9zZF9pbml0X2RlZmF1bHRfZm10KHN0cnVj dCBya2lzcDFfaXNwX3N1YmRldiAqaXNwX3NkKQo+Pj4gK3sKPj4+ICvCoMKgwqAgc3RydWN0IHY0 bDJfbWJ1c19mcmFtZWZtdCAqaW5fZnJtID0gJmlzcF9zZC0+aW5fZnJtOwo+Pj4gK8KgwqDCoCBz dHJ1Y3QgdjRsMl9yZWN0ICppbl9jcm9wID0gJmlzcF9zZC0+aW5fY3JvcDsKPj4+ICvCoMKgwqAg c3RydWN0IHY0bDJfcmVjdCAqb3V0X2Nyb3AgPSAmaXNwX3NkLT5vdXRfY3JvcDsKPj4+ICvCoMKg wqAgc3RydWN0IGlzcHNkX2luX2ZtdCAqaW5fZm10ID0gJmlzcF9zZC0+aW5fZm10Owo+Pj4gK8Kg wqDCoCBzdHJ1Y3QgaXNwc2Rfb3V0X2ZtdCAqb3V0X2ZtdCA9ICZpc3Bfc2QtPm91dF9mbXQ7Cj4+ PiArCj4+PiArwqDCoMKgICppbl9mbXQgPSBya2lzcDFfaXNwX2lucHV0X2Zvcm1hdHNbMF07Cj4+ PiArwqDCoMKgIGluX2ZybS0+d2lkdGggPSBSS0lTUDFfREVGQVVMVF9XSURUSDsKPj4+ICvCoMKg wqAgaW5fZnJtLT5oZWlnaHQgPSBSS0lTUDFfREVGQVVMVF9IRUlHSFQ7Cj4+PiArwqDCoMKgIGlu X2ZybS0+Y29kZSA9IGluX2ZtdC0+bWJ1c19jb2RlOwo+Pj4gKwo+Pj4gK8KgwqDCoCBpbl9jcm9w LT53aWR0aCA9IGluX2ZybS0+d2lkdGg7Cj4+PiArwqDCoMKgIGluX2Nyb3AtPmhlaWdodCA9IGlu X2ZybS0+aGVpZ2h0Owo+Pj4gK8KgwqDCoCBpbl9jcm9wLT5sZWZ0ID0gMDsKPj4+ICvCoMKgwqAg aW5fY3JvcC0+dG9wID0gMDsKPj4+ICsKPj4+ICvCoMKgwqAgLyogcHJvcGFnYXRlIHRvIHNvdXJj ZSAqLwo+Pj4gK8KgwqDCoCAqb3V0X2Nyb3AgPSAqaW5fY3JvcDsKPj4+ICvCoMKgwqAgKm91dF9m bXQgPSBya2lzcDFfaXNwX291dHB1dF9mb3JtYXRzWzBdOwo+Pj4gK8KgwqDCoCBpc3Bfc2QtPnF1 YW50aXphdGlvbiA9IFY0TDJfUVVBTlRJWkFUSU9OX0ZVTExfUkFOR0U7Cj4+Cj4+IEkgd29uZGVy LCBjb3VsZCB0aGlzIGJlIGltcGxlbWVudGVkIGJ5IHNoYXJpbmcgY29kZSB3aXRoIC5pbml0X2Nm ZygpIGlmCj4+IHlvdSBzdG9yZSB0aGUgYWN0aXZlIGNvbmZpZ3VyYXRpb24gaW4gdjRsMl9zdWJk ZXZfcGFkX2NvbmZpZyBpbnN0YW5jZXMKPj4gKHBsZWFzZSBzZWUgdGhlIGNvbW1lbnRzIGFib3V0 IHRoZSBya2lzcDFfaXNwX3N1YmRldiBzdHJ1Y3R1cmUgYmVsb3cpID8KPj4KPj4+ICt9Cj4+PiAr Cj4+PiAraW50IHJraXNwMV9yZWdpc3Rlcl9pc3Bfc3ViZGV2KHN0cnVjdCBya2lzcDFfZGV2aWNl ICppc3BfZGV2LAo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1 Y3QgdjRsMl9kZXZpY2UgKnY0bDJfZGV2KQo+Pj4gK3sKPj4+ICvCoMKgwqAgc3RydWN0IHJraXNw MV9pc3Bfc3ViZGV2ICppc3Bfc2RldiA9ICZpc3BfZGV2LT5pc3Bfc2RldjsKPj4+ICvCoMKgwqAg c3RydWN0IHY0bDJfc3ViZGV2ICpzZCA9ICZpc3Bfc2Rldi0+c2Q7Cj4+PiArwqDCoMKgIGludCBy ZXQ7Cj4+PiArCj4+PiArwqDCoMKgIHY0bDJfc3ViZGV2X2luaXQoc2QsICZya2lzcDFfaXNwX3Nk X29wcyk7Cj4+PiArwqDCoMKgIHNkLT5mbGFncyB8PSBWNEwyX1NVQkRFVl9GTF9IQVNfREVWTk9E RSB8IFY0TDJfU1VCREVWX0ZMX0hBU19FVkVOVFM7Cj4+PiArwqDCoMKgIHNkLT5lbnRpdHkub3Bz ID0gJnJraXNwMV9pc3Bfc2RfbWVkaWFfb3BzOwo+Pj4gK8KgwqDCoCBzbnByaW50ZihzZC0+bmFt ZSwgc2l6ZW9mKHNkLT5uYW1lKSwgInJraXNwMS1pc3Atc3ViZGV2Iik7Cj4+PiArCj4+PiArwqDC oMKgIGlzcF9zZGV2LT5wYWRzW1JLSVNQMV9JU1BfUEFEX1NJTktdLmZsYWdzID0KPj4+ICvCoMKg wqDCoMKgwqDCoCBNRURJQV9QQURfRkxfU0lOSyB8IE1FRElBX1BBRF9GTF9NVVNUX0NPTk5FQ1Q7 Cj4+PiArwqDCoMKgIGlzcF9zZGV2LT5wYWRzW1JLSVNQMV9JU1BfUEFEX1NJTktfUEFSQU1TXS5m bGFncyA9IE1FRElBX1BBRF9GTF9TSU5LOwo+Pj4gK8KgwqDCoCBpc3Bfc2Rldi0+cGFkc1tSS0lT UDFfSVNQX1BBRF9TT1VSQ0VfUEFUSF0uZmxhZ3MgPSBNRURJQV9QQURfRkxfU09VUkNFOwo+Pj4g K8KgwqDCoCBpc3Bfc2Rldi0+cGFkc1tSS0lTUDFfSVNQX1BBRF9TT1VSQ0VfU1RBVFNdLmZsYWdz ID0gTUVESUFfUEFEX0ZMX1NPVVJDRTsKPj4+ICvCoMKgwqAgc2QtPmVudGl0eS5mdW5jdGlvbiA9 IE1FRElBX0VOVF9GX1BST0NfVklERU9fUElYRUxfRk9STUFUVEVSOwo+Pj4gK8KgwqDCoCByZXQg PSBtZWRpYV9lbnRpdHlfcGFkc19pbml0KCZzZC0+ZW50aXR5LCBSS0lTUDFfSVNQX1BBRF9NQVgs Cj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpc3Bfc2Rldi0+ cGFkcyk7Cj4+PiArwqDCoMKgIGlmIChyZXQgPCAwKQo+Pj4gK8KgwqDCoMKgwqDCoMKgIHJldHVy biByZXQ7Cj4+PiArCj4+PiArwqDCoMKgIHNkLT5vd25lciA9IFRISVNfTU9EVUxFOwo+Pj4gK8Kg wqDCoCB2NGwyX3NldF9zdWJkZXZkYXRhKHNkLCBpc3BfZGV2KTsKPj4+ICsKPj4+ICvCoMKgwqAg c2QtPmdycF9pZCA9IEdSUF9JRF9JU1A7Cj4+Cj4+IEkgdGhpbmsgeW91IGNhbiBkcm9wIHRoaXMs IGFzIHdlbGwgYXMgYWxsIHRoZSBHUlBfSURfKiBtYWNyb3MsIHRoZXkncmUKPj4gbm90IHVzZWQu Cj4+Cj4+PiArwqDCoMKgIHJldCA9IHY0bDJfZGV2aWNlX3JlZ2lzdGVyX3N1YmRldih2NGwyX2Rl diwgc2QpOwo+Pj4gK8KgwqDCoCBpZiAocmV0IDwgMCkgewo+Pj4gK8KgwqDCoMKgwqDCoMKgIHY0 bDJfZXJyKHNkLCAiRmFpbGVkIHRvIHJlZ2lzdGVyIGlzcCBzdWJkZXZcbiIpOwo+Pj4gK8KgwqDC oMKgwqDCoMKgIGdvdG8gZXJyX2NsZWFudXBfbWVkaWFfZW50aXR5Owo+Pj4gK8KgwqDCoCB9Cj4+ PiArCj4+PiArwqDCoMKgIHJraXNwMV9pc3Bfc2RfaW5pdF9kZWZhdWx0X2ZtdChpc3Bfc2Rldik7 Cj4+PiArCj4+PiArwqDCoMKgIHJldHVybiAwOwo+Pj4gK2Vycl9jbGVhbnVwX21lZGlhX2VudGl0 eToKPj4+ICvCoMKgwqAgbWVkaWFfZW50aXR5X2NsZWFudXAoJnNkLT5lbnRpdHkpOwo+Pj4gK8Kg wqDCoCByZXR1cm4gcmV0Owo+Pj4gK30KPj4+ICsKPj4+ICt2b2lkIHJraXNwMV91bnJlZ2lzdGVy X2lzcF9zdWJkZXYoc3RydWN0IHJraXNwMV9kZXZpY2UgKmlzcF9kZXYpCj4+PiArewo+Pj4gK8Kg wqDCoCBzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkID0gJmlzcF9kZXYtPmlzcF9zZGV2LnNkOwo+Pj4g Kwo+Pj4gK8KgwqDCoCB2NGwyX2RldmljZV91bnJlZ2lzdGVyX3N1YmRldihzZCk7Cj4+PiArwqDC oMKgIG1lZGlhX2VudGl0eV9jbGVhbnVwKCZzZC0+ZW50aXR5KTsKPj4+ICt9Cj4+PiArCj4+PiAr LyoqKioqKioqKioqKioqKirCoCBJbnRlcnJ1cHRlciBIYW5kbGVyICoqKioqKioqKioqKioqKiov Cj4+Cj4+IHMvSGFuZGxlci9IYW5kbGVycy8KPj4KPj4+ICsKPj4+ICt2b2lkIHJraXNwMV9taXBp X2lzcih1bnNpZ25lZCBpbnQgbWlzLCBzdHJ1Y3Qgcmtpc3AxX2RldmljZSAqZGV2KQo+Pgo+PiBJ IHdvdWxkIG1ha2UgdGhlIG1pcyBmaWVsZCBhbiB1MzIgYXMgaXQgY29udGFpbnMgcmVnaXN0ZXIg dmFsdWVzLiBTaG91bGQKPj4gaXQgYWxzbyBiZSByZW5hbWVkIHRvIHN0YXR1cyA/IFNhbWUgZm9y IHJraXNwMV9pc3BfaXNyKCkgYmVsb3cuCj4+Cj4+PiArewo+Pj4gK8KgwqDCoCBzdHJ1Y3QgdjRs Ml9kZXZpY2UgKnY0bDJfZGV2ID0gJmRldi0+djRsMl9kZXY7Cj4+PiArwqDCoMKgIHZvaWQgX19p b21lbSAqYmFzZSA9IGRldi0+YmFzZV9hZGRyOwo+Pj4gK8KgwqDCoCB1MzIgdmFsOwo+Pj4gKwo+ Pgo+PiBIb3cgYWJvdXQgbW92aW5nIHRoZSBDSUZfTUlQSV9NSVMgcmVhZCBoZXJlIGFuZCByZW1v dmluZyB0aGUgbWlzCj4+IGFyZ3VtZW50IHRvIHRoZSBmdW5jdGlvbiA/IEl0IHdvdWxkIGJlIG1v cmUgbG9naWNhbCB0byBncm91cCBhbGwKPj4gcmVnaXN0ZXIgYWNjZXNzIHJlbGF0ZWQgdG8gaW50 ZXJydXB0cyBpbiBhIHNpbmdsZSBwbGFjZS4gU2FtZSBmb3IgdGhlCj4+IG90aGVyIGludGVycnVw dCBoYW5kbGVyIGZ1bmN0aW9ucy4KPj4KPj4+ICvCoMKgwqAgd3JpdGVsKH4wLCBiYXNlICsgQ0lG X01JUElfSUNSKTsKPj4+ICsKPj4+ICvCoMKgwqAgLyoKPj4+ICvCoMKgwqDCoCAqIERpc2FibGUg RFBIWSBlcnJjdHJsIGludGVycnVwdCwgYmVjYXVzZSB0aGlzIGRwaHkKPj4+ICvCoMKgwqDCoCAq IGVyY3RybCBzaWduYWwgaXMgYXNzZXJ0ZWQgdW50aWwgdGhlIG5leHQgY2hhbmdlcwo+Pj4gK8Kg wqDCoMKgICogb2YgbGluZSBzdGF0ZS4gVGhpcyB0aW1lIGlzIG1heSBiZSB0b28gbG9uZyBhbmQg Y3B1Cj4+PiArwqDCoMKgwqAgKiBpcyBob2xkIGluIHRoaXMgaW50ZXJydXB0Lgo+Pj4gK8KgwqDC oMKgICovCj4+PiArwqDCoMKgIGlmIChtaXMgJiBDSUZfTUlQSV9FUlJfQ1RSTCgweDBmKSkgewo+ Pj4gK8KgwqDCoMKgwqDCoMKgIHZhbCA9IHJlYWRsKGJhc2UgKyBDSUZfTUlQSV9JTVNDKTsKPj4+ ICvCoMKgwqDCoMKgwqDCoCB3cml0ZWwodmFsICYgfkNJRl9NSVBJX0VSUl9DVFJMKDB4MGYpLCBi YXNlICsgQ0lGX01JUElfSU1TQyk7Cj4+PiArwqDCoMKgwqDCoMKgwqAgZGV2LT5pc3Bfc2Rldi5k cGh5X2VycmN0cmxfZGlzYWJsZWQgPSB0cnVlOwo+Pj4gK8KgwqDCoCB9Cj4+PiArCj4+PiArwqDC oMKgIC8qCj4+PiArwqDCoMKgwqAgKiBFbmFibGUgRFBIWSBlcnJjdHJsIGludGVycnVwdCBhZ2Fp biwgaWYgbWlwaSBoYXZlIHJlY2VpdmUKPj4+ICvCoMKgwqDCoCAqIHRoZSB3aG9sZSBmcmFtZSB3 aXRob3V0IGFueSBlcnJvci4KPj4+ICvCoMKgwqDCoCAqLwo+Pj4gK8KgwqDCoCBpZiAobWlzID09 IENJRl9NSVBJX0ZSQU1FX0VORCkgewo+Pj4gK8KgwqDCoMKgwqDCoMKgIC8qCj4+PiArwqDCoMKg wqDCoMKgwqDCoCAqIEVuYWJsZSBEUEhZIGVycmN0cmwgaW50ZXJydXB0IGFnYWluLCBpZiBtaXBp IGhhdmUgcmVjZWl2ZQo+Pj4gK8KgwqDCoMKgwqDCoMKgwqAgKiB0aGUgd2hvbGUgZnJhbWUgd2l0 aG91dCBhbnkgZXJyb3IuCj4+PiArwqDCoMKgwqDCoMKgwqDCoCAqLwo+Pj4gK8KgwqDCoMKgwqDC oMKgIGlmIChkZXYtPmlzcF9zZGV2LmRwaHlfZXJyY3RybF9kaXNhYmxlZCkgewo+Pj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqAgdmFsID0gcmVhZGwoYmFzZSArIENJRl9NSVBJX0lNU0MpOwo+Pj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdmFsIHw9IENJRl9NSVBJX0VSUl9DVFJMKDB4MGYpOwo+ Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgd3JpdGVsKHZhbCwgYmFzZSArIENJRl9NSVBJX0lN U0MpOwo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZGV2LT5pc3Bfc2Rldi5kcGh5X2VycmN0 cmxfZGlzYWJsZWQgPSBmYWxzZTsKPj4+ICvCoMKgwqDCoMKgwqDCoCB9Cj4+PiArwqDCoMKgIH0g ZWxzZSB7Cj4+PiArwqDCoMKgwqDCoMKgwqAgdjRsMl93YXJuKHY0bDJfZGV2LCAiTUlQSSBtaXMg ZXJyb3I6IDB4JTA4eFxuIiwgbWlzKTsKPj4+ICvCoMKgwqAgfQo+Pj4gK30KPj4+ICsKPj4+ICt2 b2lkIHJraXNwMV9pc3BfaXNyKHVuc2lnbmVkIGludCBpc3BfbWlzLCBzdHJ1Y3Qgcmtpc3AxX2Rl dmljZSAqZGV2KQo+Pj4gK3sKPj4+ICvCoMKgwqAgdm9pZCBfX2lvbWVtICpiYXNlID0gZGV2LT5i YXNlX2FkZHI7Cj4+PiArwqDCoMKgIHVuc2lnbmVkIGludCBpc3BfbWlzX3RtcCA9IDA7Cj4+Cj4+ IF90bXAgYXJlIG5ldmVyIGdvb2QgbmFtZXMgOi1TCj4+Cj4+PiArwqDCoMKgIHVuc2lnbmVkIGlu dCBpc3BfZXJyID0gMDsKPj4KPj4gTmVpdGhlciBvZiB0aGVzZSB2YXJpYWJsZSBuZWVkIHRvIGJl IGluaXRpYWxpc2VkIHRvIDAuCj4+Cj4+PiArCj4+PiArwqDCoMKgIC8qIHN0YXJ0IGVkZ2Ugb2Yg dl9zeW5jICovCj4+PiArwqDCoMKgIGlmIChpc3BfbWlzICYgQ0lGX0lTUF9WX1NUQVJUKSB7Cj4+ PiArwqDCoMKgwqDCoMKgwqAgcmtpc3AxX2lzcF9xdWV1ZV9ldmVudF9zb2YoJmRldi0+aXNwX3Nk ZXYpOwo+Pgo+PiBUaGlzIHdpbGwgaW5jcmVtZW50IHRoZSBmcmFtZSBzZXF1ZW5jZSBudW1iZXIu IFdoYXQgaWYgdGhlIGludGVycnVwdCBpcwo+PiBzbGlnaHRseSBkZWxheWVkIGFuZCB0aGUgbmV4 dCBmcmFtZSBzdGFydHMgYmVmb3JlIHdlIGdldCBhIGNoYW5nZSB0bwo+PiBjb3B5IHRoZSBzZXF1 ZW5jZSBudW1iZXIgdG8gdGhlIGJ1ZmZlcnMgKGJlZm9yZSB0aGV5IHdpbGwgY29tcGxldGUKPj4g YmVsb3cpID8KPiAKPiBEbyB5b3UgbWVhbiB0aGF0IHdlIGdldCB0d28gc2VxdWVudGFsIHYtc3Rh cnQgc2lnbmFscyBhbmQgdGhlbiB0aGUgbmV4dAo+IGZyYW1lLWVuZCBzaWduYWwgaW4gTUlfTUlT IGJlbG9uZ3MgdG8gdGhlIGZpcnN0IHYtc3RhcnQgc2lnbmFsIG9mIHRoZSB0d28/Cj4gSG93IGNh biB0aGlzIGJlIHNvbHZlZD8gSSB3b25kZXIgaWYgYW55IHYtc3RhcnQgc2lnbmFsIGhhcyBhIGxh dGVyIHNpZ25hbAo+IHRoYXQgY29ycmVzcG9uZCB0byB0aGUgc2FtZSBmcmFtZSBzbyB0aGF0IHdl IGNhbiBmb2xsb3cgaXQ/Cj4gCj4gTWF5YmUgd2Ugc2hvdWxkIGhhdmUgb25lIGNvdW50ZXIgdGhh dCBpcyBpbmNyZW1lbnRlZCBvbiB2LXN0YXJ0IHNpZ25hbCwKPiBhbmQgYW5vdGhlciBjb3VudGVy IHRoYXQgaXMgaW5jcmVtZW50ZWQgdXBwb24gc29tZSBvdGhlciBzaWduYWw/Cj4gCj4+Cj4+PiAr Cj4+PiArwqDCoMKgwqDCoMKgwqAgd3JpdGVsKENJRl9JU1BfVl9TVEFSVCwgYmFzZSArIENJRl9J U1BfSUNSKTsKPj4KPj4gRG8geW91IG5lZWQgdG8gY2xlYXIgYWxsIGludGVycnVwdCBiaXRzIGlu ZGl2aWR1YWxseSwgY2FuJ3QgeW91IHdyaXRlCj4+IGlzcF9taXMgdG8gQ0lGX0lTUF9JQ1IgYXQg dGhlIGJlZ2lubmluZyBvZiB0aGUgZnVuY3Rpb24gdG8gY2xlYXIgdGhlbQo+PiBhbGwgaW4gb25l IGdvID8KPj4KPj4+ICvCoMKgwqDCoMKgwqDCoCBpc3BfbWlzX3RtcCA9IHJlYWRsKGJhc2UgKyBD SUZfSVNQX01JUyk7Cj4+PiArwqDCoMKgwqDCoMKgwqAgaWYgKGlzcF9taXNfdG1wICYgQ0lGX0lT UF9WX1NUQVJUKQo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdjRsMl9lcnIoJmRldi0+djRs Ml9kZXYsICJpc3AgaWNyIHZfc3RhdHIgZXJyOiAweCV4XG4iLAo+Pj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIGlzcF9taXNfdG1wKTsKPj4KPj4gVGhpcyByZXF1aXJlIHNvbWUg ZXhwbGFuYXRpb24uIEl0IGxvb2tzIGxpa2UgYSBuYWl2ZSB3YXkgdG8gcHJvdGVjdAo+PiBhZ2Fp bnN0IHNvbWV0aGluZywgYnV0IEkgdGhpbmsgaXQgY291bGQgdHJpZ2dlciB1bmRlciBub3JtYWwK Pj4gY2lyY3Vtc3RhbmNlcyBpZiBJUlEgaGFuZGxpbmcgaXMgZGVsYXllZCwgYW5kIHdvdWxkbid0 IGRvIG11Y2ggYW55d2F5Lgo+PiBTYW1lIGZvciB0aGUgc2ltaWxhciBjb25zdHJ1Y3RzIGJlbG93 Lgo+Pgo+Pj4gK8KgwqDCoCB9Cj4+PiArCj4+PiArwqDCoMKgIGlmICgoaXNwX21pcyAmIENJRl9J U1BfUElDX1NJWkVfRVJST1IpKSB7Cj4+PiArwqDCoMKgwqDCoMKgwqAgLyogQ2xlYXIgcGljX3Np emVfZXJyb3IgKi8KPj4+ICvCoMKgwqDCoMKgwqDCoCB3cml0ZWwoQ0lGX0lTUF9QSUNfU0laRV9F UlJPUiwgYmFzZSArIENJRl9JU1BfSUNSKTsKPj4+ICvCoMKgwqDCoMKgwqDCoCBpc3BfZXJyID0g cmVhZGwoYmFzZSArIENJRl9JU1BfRVJSKTsKPj4+ICvCoMKgwqDCoMKgwqDCoCB2NGwyX2Vycigm ZGV2LT52NGwyX2RldiwKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgIkNJRl9JU1BfUElD X1NJWkVfRVJST1IgKDB4JTA4eCkiLCBpc3BfZXJyKTsKPj4KPj4gV2hhdCBkb2VzIHRoaXMgbWVh biA/Cj4+Cj4+PiArwqDCoMKgwqDCoMKgwqAgd3JpdGVsKGlzcF9lcnIsIGJhc2UgKyBDSUZfSVNQ X0VSUl9DTFIpOwo+Pj4gK8KgwqDCoCB9IGVsc2UgaWYgKChpc3BfbWlzICYgQ0lGX0lTUF9EQVRB X0xPU1MpKSB7Cj4+Cj4+IEFyZSBDSUZfSVNQX1BJQ19TSVpFX0VSUk9SIGFuZCBDSUZfSVNQX0RB VEFfTE9TUyBtdXR1YWxseSBleGNsdXNpdmUgPwo+Pgo+Pj4gK8KgwqDCoMKgwqDCoMKgIC8qIENs ZWFyIGRhdGFfbG9zcyAqLwo+Pj4gK8KgwqDCoMKgwqDCoMKgIHdyaXRlbChDSUZfSVNQX0RBVEFf TE9TUywgYmFzZSArIENJRl9JU1BfSUNSKTsKPj4+ICvCoMKgwqDCoMKgwqDCoCB2NGwyX2Vycigm ZGV2LT52NGwyX2RldiwgIkNJRl9JU1BfREFUQV9MT1NTXG4iKTsKPj4+ICvCoMKgwqDCoMKgwqDC oCB3cml0ZWwoQ0lGX0lTUF9EQVRBX0xPU1MsIGJhc2UgKyBDSUZfSVNQX0lDUik7Cj4+PiArwqDC oMKgIH0KPj4+ICsKPj4+ICvCoMKgwqAgLyogc2FtcGxlZCBpbnB1dCBmcmFtZSBpcyBjb21wbGV0 ZSAqLwo+Pj4gK8KgwqDCoCBpZiAoaXNwX21pcyAmIENJRl9JU1BfRlJBTUVfSU4pIHsKPj4+ICvC oMKgwqDCoMKgwqDCoCB3cml0ZWwoQ0lGX0lTUF9GUkFNRV9JTiwgYmFzZSArIENJRl9JU1BfSUNS KTsKPj4+ICvCoMKgwqDCoMKgwqDCoCBpc3BfbWlzX3RtcCA9IHJlYWRsKGJhc2UgKyBDSUZfSVNQ X01JUyk7Cj4+PiArwqDCoMKgwqDCoMKgwqAgaWYgKGlzcF9taXNfdG1wICYgQ0lGX0lTUF9GUkFN RV9JTikKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHY0bDJfZXJyKCZkZXYtPnY0bDJfZGV2 LCAiaXNwIGljciBmcmFtZV9pbiBlcnI6IDB4JXhcbiIsCj4+PiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgaXNwX21pc190bXApOwo+Pj4gK8KgwqDCoCB9Cj4+PiArCj4+PiArwqDC oMKgIC8qIGZyYW1lIHdhcyBjb21wbGV0ZWx5IHB1dCBvdXQgKi8KPj4KPj4gInB1dCBvdXQiID8g Oi0pIFdoYXQncyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIElTUF9GUkFNRV9JTiBhbmQgSVNQX0ZS QU1FCj4+ID8gVGhlIHR3byBjb21tZW50cyBjb3VsZCBkbyB3aXRoIGEgYml0IG9mIGJydXNoIHVw LCBhbmQgSSB0aGluayB0aGUKPj4gSVNQX0ZSQU1FX0lOIGludGVycnVwdCBjb3VsZCBiZSBkaXNh YmxlZCBhcyBpdCBkb2Vzbid0IHBlcmZvcm0gYW55Cj4+IGFjdGlvbi4KPiAKPiBUaG9zZSB0d28g b25lbGluZSBjb21tZW50cyBhcmUganVzdCBjb3B5LXBhc3RlIGZyb20gdGhlIGRhdGFzaGVldC4K PiAKPiAiIgo+IDUgTUlTX0ZSQU1FX0lOIHNhbXBsZWQgaW5wdXQgZnJhbWUgaXMgY29tcGxldGUK PiAxIE1JU19GUkFNRSBmcmFtZSB3YXMgY29tcGxldGVseSBwdXQgb3V0Cj4gIiIKPiAKPiBVbmZy b3R1bmF0ZWx5LCB0aGUgZGF0YXNoZWV0IGRvZXMgbm90IGFkZCBhbnkgZnVydGhlciBleHBsYW5h dGlvbiBhYm91dCB0aG9zZSBzaWduYWxzLgo+IAo+IAo+Pgo+Pj4gK8KgwqDCoCBpZiAoaXNwX21p cyAmIENJRl9JU1BfRlJBTUUpIHsKPj4+ICvCoMKgwqDCoMKgwqDCoCB1MzIgaXNwX3JpcyA9IDA7 Cj4+Cj4+IE5vIG5lZWQgdG8gaW5pdGlhbGlzZSB0aGlzIHRvIDAuCj4+Cj4+PiArwqDCoMKgwqDC oMKgwqAgLyogQ2xlYXIgRnJhbWUgSW4gKElTUCkgKi8KPj4+ICvCoMKgwqDCoMKgwqDCoCB3cml0 ZWwoQ0lGX0lTUF9GUkFNRSwgYmFzZSArIENJRl9JU1BfSUNSKTsKPj4+ICvCoMKgwqDCoMKgwqDC oCBpc3BfbWlzX3RtcCA9IHJlYWRsKGJhc2UgKyBDSUZfSVNQX01JUyk7Cj4+PiArwqDCoMKgwqDC oMKgwqAgaWYgKGlzcF9taXNfdG1wICYgQ0lGX0lTUF9GUkFNRSkKPj4+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIHY0bDJfZXJyKCZkZXYtPnY0bDJfZGV2LAo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgICJpc3AgaWNyIGZyYW1lIGVuZCBlcnI6IDB4JXhcbiIsIGlzcF9taXNf dG1wKTsKPj4+ICsKPj4+ICvCoMKgwqDCoMKgwqDCoCBpc3BfcmlzID0gcmVhZGwoYmFzZSArIENJ Rl9JU1BfUklTKTsKPj4+ICvCoMKgwqDCoMKgwqDCoCBpZiAoaXNwX3JpcyAmIChDSUZfSVNQX0FX Ql9ET05FIHwgQ0lGX0lTUF9BRk1fRklOIHwKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgQ0lGX0lTUF9FWFBfRU5EIHwgQ0lGX0lTUF9ISVNUX01FQVNVUkVfUkRZKSkK Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJraXNwMV9zdGF0c19pc3IoJmRldi0+c3RhdHNf dmRldiwgaXNwX3Jpcyk7Cj4+Cj4+IElzIHRoZXJlIGEgZ3VhcmFudGVlIHRoYXQgdGhlIHN0YXRp c3RpY3Mgd2lsbCBiZSBmdWxseSB3cml0dGVuIG91dAo+PiBiZWZvcmUgdGhlIHZpZGVvIGZyYW1l IGl0c2VsZiA/IEFuZCBkb2Vzbid0IHRoaXMgdGVzdCBpZiBhbnkgb2YgdGhlCj4+IHN0YXRpc3Rp Y3MgaXMgY29tcGxldGUsIG5vdCBhbGwgb2YgdGhlbSA/IEkgdGhpbmsgdGhlIGxvZ2ljIGlzIHdy b25nLCBpdAo+IAo+IFRoZSBkYXRhc2hlZXQgZG9lcyBub3QgYWRkIGFueSBleHBsYW5hdGlvbiBv ZiB3aGF0IGlzIGV4cGVjdGVkIHRvIGNvbWUgZmlyc3QuCj4gU2hvdWxkIHdlIHdhaXQgdW50aWwg YWxsIHN0YXRpc3RpY3MgbWVhc3VyZW1lbnRzIGFyZSBkb25lPyBJbiB0aGUgc3RydWN0Cj4gc2Vu dCB0byB1c2Vyc3BhY2UgdGhlcmUgaXMgYSBiaXRtYWtzIGZvciB3aGljaCBvZiB0aGUgc3RhdGlz dGljcyBhcmUgcmVhZC4KPiBJIHRoaW5rIHRoYXQgaWYgb25seSBwYXJ0IG9mIHRoZSBzdGF0aXN0 aWNzIGFyZSByZWFkeSwgd2UgY2FuIGFscmVhZHkgc2VuZCB0aGUgb25jZQo+IHRoYXQgYXJlIHJl YWR5IHRvIHVzZXJzcGFjZS4KPiAKPj4gc2VlbXMgaXQgc2hvdWxkIGJlIG1vdmVkIG91dCBvZiB0 aGUgQ0lGX0lTUF9GUkFNRSB0ZXN0LCB0byBhIHRlc3Qgb2YgaXRzCj4+IG93bi4gSXQncyBoYXJk IHRvIHRlbGwgZm9yIHN1cmUgd2l0aG91dCBleHRyYSBpbmZvcm1hdGlvbiB0aG91Z2ggKGZvcgo+ PiBpbnN0YW5jZSB3aHkgYXJlIHRoZSBzdGF0cy1yZWxhdGVkIGJpdHMgcmVhZCBmcm9tIENJRl9J U1BfUklTLCB3aGVuCj4+IHRoZXkgc2VlbSB0byBiZSBkb2N1bWVudGVkIGFzIHZhbGlkIGluIENJ Rl9JU1BfSVNSKSwgYnV0IHRoaXMgc2hvdWxkIGJlCj4+IHZhbGlkYXRlZCwgYW5kIG1vc3QgcHJv YmFibHkgZml4ZWQuIENhcmUgc2hvdWxkIGJlIHRha2VuIHRvIGtlZXAKPj4gc3luY2hyb25pc2F0 aW9uIG9mIHNlcXVlbmNlIG51bWJlciBiZXR3ZWVuIHRoZSBkaWZmZXJlbnQgcXVldWVzLgo+IAo+ IEkgc2VlIHRoYXQgdGhlIGNhcHR1cmUgYnVmZmVycyBhcmUgZG9uZSBiZWZvcmUgaW5jcmVtZW50 aW5nIHRoZSBmcmFtZV9zZXF1ZW5jZSB3aXRoCj4gdGhlIGZvbGxvd2luZyBleHBsYW5hdGlvbjoK PiAKPiAgwqDCoMKgwqAvKgo+ICDCoMKgwqDCoMKgwqDCoMKgICogQ2FsbCBya2lzcDFfY2FwdHVy ZV9pc3IoKSBmaXJzdCB0byBoYW5kbGUgdGhlIGZyYW1lIHRoYXQKPiAgwqDCoMKgwqDCoMKgwqDC oCAqIHBvdGVudGlhbGx5IGNvbXBsZXRlZCB1c2luZyB0aGUgY3VycmVudCBmcmFtZV9zZXF1ZW5j ZSBudW1iZXIgYmVmb3JlCj4gIMKgwqDCoMKgwqDCoMKgwqAgKiBpdCBpcyBwb3RlbnRpYWxseSBp bmNyZW1lbnRlZCBieSBya2lzcDFfaXNwX2lzcigpIGluIHRoZSB2ZXJ0aWNhbAo+ICDCoMKgwqDC oMKgwqDCoMKgICogc3luYy4KPiAgwqDCoMKgwqDCoMKgwqDCoCAqLwo+IAo+IEkgdGhpbmsgcmVh ZGluZyB0aGUgc3RhdHMvcGFyYW1zIHNob3VsZCBhbHNvIGJlIGRvbmUgYmVmb3JlIGNhbGxpbmcg cmtpc3AxX2NhcHR1cmVfaXNyCj4gZm9yIHRoZSBzYW1lIHJlYXNvbi4gKHNvIHRvIG1hdGNoIHRo ZSBjb3JyZWN0IGZyYW1lX3NlcXVlbmNlKQo+IAo+IFRoYW5rcywKPiBEYWZuYQoKCkkgYW0gbm90 IHN1cmUgd2hhdCBzaG91bGQgYmUgdGhlIG1lYW5pbmcgb2YgdGhlIHNlcXVlbmNlIGZpZWxkIGZv ciBwYXJhbWV0ZXJzIGJ1ZmZlcnMuCkN1cnJlbnRseSB0aGUgcmtpc3AxLXBhcmFtcyBlbnRpdHkg cmV0dXJucyB0aGUgZmlyc3QgYnVmZmVyIHF1ZXVlZCByaWdodCBhd2F5IHdpdGggdGhlIGZyYW1l X3NlcXVlbmNlIHRoYXQgaXQgcmVhZHMuCklmIHN0cmVhbWluZyBkaWQgbm90IHlldCBzdGFydGVk IHRoZW4gdGhlIGZpcnN0IGJ1ZmZlciBpcyB1c2VkIGFzIHRoZSBpbml0aWFsIGNvbmZpZ3VyYXRp b24gdGhhdCBvdmVycmlkZXMgdGhlIGRyaXZlcidzIGRlZmF1bHQuCkluIHRoYXQgY2FzZSB0aGUg Zmlyc3QgcGFyYW1zIGJ1ZmZlciBpcyBub3QgYXNzb2NpYXRlZCB3aXRoIGFueSBjYXB0dXJlZCBm cmFtZSBhbmQgaGFzIGEgc2VxdWVuY2UgdmFsdWUgJy0xJwpJcyB0aGlzIGEgdmFsaWQgYmVoYXZp b3I/CgpUaGFua3MsCkRhZm5hCgo+IAo+IAo+Pgo+Pj4gK8KgwqDCoCB9Cj4+PiArCj4+PiArwqDC oMKgIC8qCj4+PiArwqDCoMKgwqAgKiBUaGVuIHVwZGF0ZSBjaGFuZ2VkIGNvbmZpZ3MuIFNvbWUg b2YgdGhlbSBpbnZvbHZlCj4+PiArwqDCoMKgwqAgKiBsb3Qgb2YgcmVnaXN0ZXIgd3JpdGVzLiBE byB0aG9zZSBvbmx5IG9uZSBwZXIgZnJhbWUuCj4+PiArwqDCoMKgwqAgKiBEbyB0aGUgdXBkYXRl cyBpbiB0aGUgb3JkZXIgb2YgdGhlIHByb2Nlc3NpbmcgZmxvdy4KPj4+ICvCoMKgwqDCoCAqLwo+ Pj4gK8KgwqDCoCBya2lzcDFfcGFyYW1zX2lzcigmZGV2LT5wYXJhbXNfdmRldiwgaXNwX21pcyk7 Cj4+Cj4+IFlvdSBzaG91bGQgcGFzcyBkZXYgdG8gdGhpcyBmdW5jdGlvbiwgYW5kIHVzZSBpdCBp bnRlcm5hbGx5IGZvciB0aGUgSS9PCj4+IGFjY2Vzc29ycyBpbnN0ZWFkIG9mIGdvaW5nIHRocm91 Z2ggdGhlIHZkZXYuCj4+Cj4+PiArfQo+Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcGxh dGZvcm0vcm9ja2NoaXAvaXNwMS9ya2lzcDEuaCBiL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vcm9j a2NoaXAvaXNwMS9ya2lzcDEuaAo+Pj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPj4+IGluZGV4IDAw MDAwMDAwMDAwMC4uYjAzNjZlMzU0ZWMyCj4+PiAtLS0gL2Rldi9udWxsCj4+PiArKysgYi9kcml2 ZXJzL21lZGlhL3BsYXRmb3JtL3JvY2tjaGlwL2lzcDEvcmtpc3AxLmgKPj4+IEBAIC0wLDAgKzEs MTExIEBACj4+PiArLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IChHUEwtMi4wKyBPUiBNSVQp ICovCj4+PiArLyoKPj4+ICsgKiBSb2NrY2hpcCBpc3AxIGRyaXZlcgo+Pj4gKyAqCj4+PiArICog Q29weXJpZ2h0IChDKSAyMDE3IFJvY2tjaGlwIEVsZWN0cm9uaWNzIENvLiwgTHRkLgo+Pj4gKyAq Lwo+Pj4gKwo+Pj4gKyNpZm5kZWYgX1JLSVNQMV9ICj4+PiArI2RlZmluZSBfUktJU1AxX0gKPj4+ ICsKPj4+ICsjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Cj4+PiArI2luY2x1ZGUg PG1lZGlhL3Y0bDItZndub2RlLmg+Cj4+Cj4+IEkgZG9uJ3QgdGhpbmsgeW91IG5lZWQgdGhlc2Ug aGVhZGVycy4gWW91IGhvd2V2ZXIgbmVlZAo+Pgo+PiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1jdHJs cy5oPgo+PiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1zdWJkZXYuaD4KPj4KPj4gdG8gbWFrZSB0aGlz IGhlYWRlciBzZWxmLWNvbnRhaW5lZC4gT3RoZXIgaGVhZGVycyBjb3VsZCBiZSBhZGRlZCB0b28K Pj4gKHZpZGVvZGV2Mi5oLCB2NGwyLW1lZGlhYnVzLmggYW5kIG1lZGlhLWVudGl0eS5oKSwgdGhl eSdyZSBpbmNsdWRlZAo+PiB0aHJvdWdoIHRoZSBhYm92ZSB0d28gaGVhZGVycyBhdCB0aGUgbW9t ZW50Lgo+Pgo+Pj4gKwo+Pj4gKyNpbmNsdWRlICJjb21tb24uaCIKPj4+ICsKPj4+ICtzdHJ1Y3Qg cmtpc3AxX3N0cmVhbTsKPj4+ICsKPj4+ICsvKgo+Pj4gKyAqIHN0cnVjdCBpc3BzZF9pbl9mbXQg LSBJU1AgaW50cHV0LXBhZCBmb3JtYXQKPj4+ICsgKgo+Pj4gKyAqIFRyYW5zbGF0ZSBtYnVzX2Nv ZGUgdG8gaGFyZHdhcmUgZm9ybWF0IHZhbHVlcwo+Pj4gKyAqCj4+PiArICogQGJ1c193aWR0aDog dXNlZCBmb3IgcGFyYWxsZWwKPj4+ICsgKi8KPj4+ICtzdHJ1Y3QgaXNwc2RfaW5fZm10IHsKPj4+ ICvCoMKgwqAgdTMyIG1idXNfY29kZTsKPj4+ICvCoMKgwqAgdTggZm10X3R5cGU7Cj4+PiArwqDC oMKgIHUzMiBtaXBpX2R0Owo+Pj4gK8KgwqDCoCB1MzIgeXV2X3NlcTsKPj4+ICvCoMKgwqAgZW51 bSBya2lzcDFfZm10X3Jhd19wYXRfdHlwZSBiYXllcl9wYXQ7Cj4+PiArwqDCoMKgIHU4IGJ1c193 aWR0aDsKPj4+ICt9Owo+Pgo+PiBTb21lIG9mIHRoZSBzdHJ1Y3R1cmVzIGFyZSBwcmVmaXhlZCB3 aXRoIGlzcHNkXywgc29tZSB3aXRoIHJraXNwMV8uIEkKPj4gdGhpbmsgd2Ugc2hvdWxkIHN0YW5k YXJkaXNlIG9uIGEgc2luZ2xlIHByZWZpeC4KPj4KPj4+ICsKPj4+ICtzdHJ1Y3QgaXNwc2Rfb3V0 X2ZtdCB7Cj4+PiArwqDCoMKgIHUzMiBtYnVzX2NvZGU7Cj4+PiArwqDCoMKgIHU4IGZtdF90eXBl Owo+Pj4gK307Cj4+PiArCj4+PiArc3RydWN0IHJraXNwMV9pZV9jb25maWcgewo+Pj4gK8KgwqDC oCB1bnNpZ25lZCBpbnQgZWZmZWN0Owo+Pj4gK307Cj4+Cj4+IFRoaXMgc3RydWN0dXJlIGlzbid0 IHVzZWQuCj4+Cj4+PiArCj4+PiArZW51bSBya2lzcDFfaXNwX3BhZCB7Cj4+PiArwqDCoMKgIFJL SVNQMV9JU1BfUEFEX1NJTkssCj4+Cj4+IFNob3VsZCB0aGlzIGJlIG5hbWVkIFNJTktfVklERU8g dG8gbWF0Y2ggU0lOS19QQVJBTVMgPwo+Pgo+Pj4gK8KgwqDCoCBSS0lTUDFfSVNQX1BBRF9TSU5L X1BBUkFNUywKPj4+ICvCoMKgwqAgUktJU1AxX0lTUF9QQURfU09VUkNFX1BBVEgsCj4+Cj4+IEFu ZCBTT1VSQ0VfVklERU8gPwo+Pgo+Pj4gK8KgwqDCoCBSS0lTUDFfSVNQX1BBRF9TT1VSQ0VfU1RB VFMsCj4+PiArwqDCoMKgIFJLSVNQMV9JU1BfUEFEX01BWAo+Pj4gK307Cj4+PiArCj4+PiArLyoK Pj4+ICsgKiBzdHJ1Y3Qgcmtpc3AxX2lzcF9zdWJkZXYgLSBJU1Agc3ViLWRldmljZQo+Pj4gKyAq Cj4+PiArICogU2VlIENyb3BwaW5nIHJlZ2lvbnMgb2YgSVNQIGluIHJraXNwMS5jIGZvciBkZXRh aWxzCj4+Cj4+IENvdWxkIHlvdSBwbGVhc2UgZG9jdW1lbnQgYWxsIGZpZWxkcyBmcm9tIHRoZSBz dHJ1Y3R1cmUgPwo+Pgo+Pj4gKyAqIEBpbl9mcm06IGlucHV0IHNpemUsIGRvbid0IGhhdmUgdG8g YmUgZXF1YWwgdG8gc2Vuc29yIHNpemUKPj4+ICsgKiBAaW5fZm10OiBpbnB1dCBmb3JtYXQKPj4+ ICsgKiBAaW5fY3JvcDogY3JvcCBmb3Igc2luayBwYWQKPj4+ICsgKiBAb3V0X2ZtdDogb3V0cHV0 IGZvcm1hdAo+Pj4gKyAqIEBvdXRfY3JvcDogb3V0cHV0IHNpemUKPj4+ICsgKgo+Pj4gKyAqIEBk cGh5X2VycmN0cmxfZGlzYWJsZWQ6IGlmIGRwaHkgZXJyY3RybCBpcyBkaXNhYmxlZChhdm9pZCBl bmRsZXNzIGludGVycnVwdCkKPj4KPj4gcy9kaXNhYmxlZC9kaXNhYmxlZCAvCj4+Cj4+PiArICog QGZybV9zeW5jX3NlcTogZnJhbWUgc2VxdWVuY2UsIHRvIHN5bmMgZnJhbWVfaWQgYmV0d2VlbiB2 aWRlbyBkZXZpY2VzLgo+Pj4gKyAqIEBxdWFudGl6YXRpb246IG91dHB1dCBxdWFudGl6YXRpb24K Pj4+ICsgKi8KPj4+ICtzdHJ1Y3Qgcmtpc3AxX2lzcF9zdWJkZXYgewo+Pj4gK8KgwqDCoCBzdHJ1 Y3QgdjRsMl9zdWJkZXYgc2Q7Cj4+PiArwqDCoMKgIHN0cnVjdCBtZWRpYV9wYWQgcGFkc1tSS0lT UDFfSVNQX1BBRF9NQVhdOwo+Pj4gK8KgwqDCoCBzdHJ1Y3QgdjRsMl9jdHJsX2hhbmRsZXIgY3Ry bF9oYW5kbGVyOwo+Pj4gK8KgwqDCoCBzdHJ1Y3QgdjRsMl9tYnVzX2ZyYW1lZm10IGluX2ZybTsK Pj4+ICvCoMKgwqAgc3RydWN0IGlzcHNkX2luX2ZtdCBpbl9mbXQ7Cj4+Cj4+IEkgdGhpbmsgdGhp cyAoYW5kIG91dF9mbXQpIGNvdWxkIGJlIHN0b3JlZCBhcyBwb2ludGVycy4KPj4KPj4+ICvCoMKg wqAgc3RydWN0IHY0bDJfcmVjdCBpbl9jcm9wOwo+Pj4gK8KgwqDCoCBzdHJ1Y3QgaXNwc2Rfb3V0 X2ZtdCBvdXRfZm10Owo+Pj4gK8KgwqDCoCBzdHJ1Y3QgdjRsMl9yZWN0IG91dF9jcm9wOwo+Pgo+ PiBJIHRoaW5rIHRoaXMgY291bGQgYmUgZ3JlYXRseSBzaW1wbGlmaWVkIGlmIHlvdSBzdG9yZWQg YWxsIHRoZSBkYXRhIGFzCj4+IHY0bDJfc3ViZGV2X3BhZF9jb25maWcgaW5zdGFuY2VzIGZvciBi b3RoIHRoZSBzaW5rIGFuZCBzb3VyY2UgdmlkZW8gcGFkcwo+PiBpbnN0ZWFkIG9mIHVzaW5nIGFk LWhvYyBzdHJ1Y3R1cmVzLiBJbiBwYXJ0aWN1bGFyIHlvdXIgZ2V0IGFuZCBzZXQKPj4gZm9ybWF0 IGhhbmRsZXJzIHdvdWxkIGJlY29tZSBtdWNoIHNpbXBsZXIuIEkgcmVjb21tZW5kIGxvb2tpbmcg YXQgdGhlCj4+IG10OXAwMzEgc2Vuc29yIGRyaXZlciBmb3IgYW4gZXhhbXBsZS4gSW4gYSBudXRz aGVsbCwgdGhlIGdldCBoYW5kbGVyCj4+IHdvdWxkIHJldHJpZXZlIHRoZSBmb3JtYXQgZnJvbSB0 aGUgdjRsMl9zdWJkZXZfcGFkX2NvbmZpZyBpbnN0YW5jZQo+PiBlaXRoZXIgZnJvbSBya2lzcDFf aXNwX3N1YmRldiAoZm9yIFY0TDJfU1VCREVWX0ZPUk1BVF9BQ1RJVkUpIG9yIGZyb20KPj4gdGhl IHBhc3NlZCBjZmcgYXJndW1lbnQgKGZvciBWNEwyX1NVQkRFVl9GT1JNQVRfVFJZKS4gVGhlIHNl dCBoYW5kbGVyCj4+IHdvdWxkIG9wZXJhdGUgc2ltaWxhcmx5LCB3aXRoIGp1c3QgYSB0ZXN0IG9u ZSBBQ1RJVkUvVFJZIGF0IHRoZQo+PiBiZWdpbm5pbmcsIGZvbGxvd2VkIGJ5IGNvbW1vbiBjb2Rl IHRoYXQgb25seSBvcGVyYXRlcyBvbiB0aGUgY2ZnLCBhbmQKPj4gZmluYWxseSBzdG9yaW5nIHRo ZSBmb3JtYXQgaW4gcmtpc3AxX2lzcF9zdWJkZXYgZm9yCj4+IFY0TDJfU1VCREVWX0ZPUk1BVF9B Q1RJVkUuCj4+Cj4+PiArwqDCoMKgIGJvb2wgZHBoeV9lcnJjdHJsX2Rpc2FibGVkOwo+Pj4gK8Kg wqDCoCBhdG9taWNfdCBmcm1fc3luY19zZXE7Cj4+PiArwqDCoMKgIGVudW0gdjRsMl9xdWFudGl6 YXRpb24gcXVhbnRpemF0aW9uOwo+Pgo+PiBUaGUgcXVhbnRpemF0aW9uIHdvdWxkIHRoZW4gYmUg c3RvcmVkIGluIHRoZSB2NGwyX3N1YmRldl9wYWRfY29uZmlnIHRvby4KPj4KPj4+ICt9Owo+Pj4g Kwo+Pj4gK2ludCBya2lzcDFfcmVnaXN0ZXJfaXNwX3N1YmRldihzdHJ1Y3Qgcmtpc3AxX2Rldmlj ZSAqaXNwX2RldiwKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3Ry dWN0IHY0bDJfZGV2aWNlICp2NGwyX2Rldik7Cj4+PiArCj4+PiArdm9pZCBya2lzcDFfdW5yZWdp c3Rlcl9pc3Bfc3ViZGV2KHN0cnVjdCBya2lzcDFfZGV2aWNlICppc3BfZGV2KTsKPj4+ICsKPj4+ ICt2b2lkIHJraXNwMV9taXBpX2lzcih1bnNpZ25lZCBpbnQgbWlwaV9taXMsIHN0cnVjdCBya2lz cDFfZGV2aWNlICpkZXYpOwo+Pj4gKwo+Pj4gK3ZvaWQgcmtpc3AxX2lzcF9pc3IodW5zaWduZWQg aW50IGlzcF9taXMsIHN0cnVjdCBya2lzcDFfZGV2aWNlICpkZXYpOwo+Pj4gKwo+Pj4gK3N0YXRp YyBpbmxpbmUKPj4+ICtzdHJ1Y3QgaXNwc2Rfb3V0X2ZtdCAqcmtpc3AxX2dldF9pc3BzZF9vdXRf Zm10KHN0cnVjdCBya2lzcDFfaXNwX3N1YmRldiAqaXNwX3NkZXYpCj4+PiArewo+Pj4gK8KgwqDC oCByZXR1cm4gJmlzcF9zZGV2LT5vdXRfZm10Owo+Pj4gK30KPj4+ICsKPj4+ICtzdGF0aWMgaW5s aW5lCj4+PiArc3RydWN0IGlzcHNkX2luX2ZtdCAqcmtpc3AxX2dldF9pc3BzZF9pbl9mbXQoc3Ry dWN0IHJraXNwMV9pc3Bfc3ViZGV2ICppc3Bfc2RldikKPj4+ICt7Cj4+PiArwqDCoMKgIHJldHVy biAmaXNwX3NkZXYtPmluX2ZtdDsKPj4+ICt9Cj4+PiArCj4+PiArc3RhdGljIGlubGluZQo+Pj4g K3N0cnVjdCB2NGwyX3JlY3QgKnJraXNwMV9nZXRfaXNwX3NkX3dpbihzdHJ1Y3Qgcmtpc3AxX2lz cF9zdWJkZXYgKmlzcF9zZGV2KQo+Pj4gK3sKPj4+ICvCoMKgwqAgcmV0dXJuICZpc3Bfc2Rldi0+ b3V0X2Nyb3A7Cj4+PiArfQo+Pgo+PiBJIGFncmVlIHdpdGggU2FrYXJpIHRoYXQgYWNjZXNzaW5n IGZpZWxkcyBkaXJlY3RseSB3b3VsZCBiZSBtb3JlCj4+IHJlYWRhYmxlLgo+Pgo+Pj4gKwo+Pj4g K3N0YXRpYyBpbmxpbmUgc3RydWN0IHJraXNwMV9pc3Bfc3ViZGV2ICpzZF90b19pc3Bfc2Qoc3Ry dWN0IHY0bDJfc3ViZGV2ICpzZCkKPj4+ICt7Cj4+PiArwqDCoMKgIHJldHVybiBjb250YWluZXJf b2Yoc2QsIHN0cnVjdCBya2lzcDFfaXNwX3N1YmRldiwgc2QpOwo+Pj4gK30KPj4+ICsKPj4+ICsj ZW5kaWYgLyogX1JLSVNQMV9IICovCj4+CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fXwpsaW51eC1hcm0ta2VybmVsIG1haWxpbmcgbGlzdApsaW51eC1hcm0t a2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFp bG1hbi9saXN0aW5mby9saW51eC1hcm0ta2VybmVsCg==