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=-5.5 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_SANE_1 autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id DC420C00307 for ; Mon, 9 Sep 2019 07:24:58 +0000 (UTC) Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id A9F6921D82 for ; Mon, 9 Sep 2019 07:24:58 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="YEzB0vJP"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=ti.com header.i=@ti.com header.b="hpisv+kQ" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org A9F6921D82 Authentication-Results: mail.kernel.org; dmarc=fail (p=quarantine dis=none) header.from=ti.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+infradead-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=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:Cc:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:In-Reply-To:MIME-Version:Date: Message-ID:From:References:To:Subject:Reply-To:Content-ID:Content-Description :Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=0qyAmH7AdXz1UmfgE9Krxr+Zf58JhD1lnnJjMMwcufk=; b=YEzB0vJPjEA2Kf WmyfZ1qIZMRGLUy0Ex3H4WxmKq0ZlA7rDer8T+0LgSdvazGm/Z2OsP9jkkB3GKXtXfJaeY5cm6xOP tBacqayWXytcSWzIcY0vlAUL+mvYK9OdWVWCX8i8J2XnhxK0DHjctOPa1mDoUWuodVpqGWJg+SCDQ 3YySfy5WvS9IMy6a+RDrStBTf5RIa7i3tQwAqm+CbPfywhdiols9CBzEV240fppnHWQmeO0ojORgW gTVH7n5thbECOeCAItS44yYuFR/qS9MsYydd3kZvMx1EY5LV+/INibcrBZNCk5G4dp2M9jtZsbAFl hWVgS2d/1ZiKXb+tHcrQ==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92 #3 (Red Hat Linux)) id 1i7E2g-0003Ck-GU; Mon, 09 Sep 2019 07:24:54 +0000 Received: from lelv0142.ext.ti.com ([198.47.23.249]) by bombadil.infradead.org with esmtps (Exim 4.92 #3 (Red Hat Linux)) id 1i7E2Z-0003A6-4C for linux-arm-kernel@lists.infradead.org; Mon, 09 Sep 2019 07:24:52 +0000 Received: from fllv0034.itg.ti.com ([10.64.40.246]) by lelv0142.ext.ti.com (8.15.2/8.15.2) with ESMTP id x897OamF060889; Mon, 9 Sep 2019 02:24:36 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ti.com; s=ti-com-17Q1; t=1568013876; bh=RmknIbSez8tyFGrrpHMO5hvafpnu6i7ysM01J3M5dlk=; h=Subject:To:CC:References:From:Date:In-Reply-To; b=hpisv+kQcCFD3xznokTWUpBxmlrVfN3iz0naDK68UViWmZjah1+slKQAiPwmiyhcA WEg3D/SnRZd/QzMIaA0CON0wlSGdKrV+g5U6lxkKEbsQcOYvf8HK5VWsjEUCmBiMTF aJoXSeCMII1tW86Sdyn8DWj/YTj1HTxiSLm2U8IE= Received: from DFLE103.ent.ti.com (dfle103.ent.ti.com [10.64.6.24]) by fllv0034.itg.ti.com (8.15.2/8.15.2) with ESMTPS id x897Oa0b046576 (version=TLSv1.2 cipher=AES256-GCM-SHA384 bits=256 verify=FAIL); Mon, 9 Sep 2019 02:24:36 -0500 Received: from DFLE111.ent.ti.com (10.64.6.32) by DFLE103.ent.ti.com (10.64.6.24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1713.5; Mon, 9 Sep 2019 02:24:33 -0500 Received: from lelv0327.itg.ti.com (10.180.67.183) by DFLE111.ent.ti.com (10.64.6.32) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1713.5 via Frontend Transport; Mon, 9 Sep 2019 02:24:34 -0500 Received: from [172.24.145.136] (ileax41-snat.itg.ti.com [10.172.224.153]) by lelv0327.itg.ti.com (8.15.2/8.15.2) with ESMTP id x897OTpI080528; Mon, 9 Sep 2019 02:24:30 -0500 Subject: Re: [PATCH v2 02/14] soc: ti: k3: add navss ringacc driver To: Tero Kristo , Peter Ujfalusi , , , , References: <20190730093450.12664-1-peter.ujfalusi@ti.com> <20190730093450.12664-3-peter.ujfalusi@ti.com> <13e5c02f-7060-3a30-56cb-a9caca9fc85b@ti.com> From: Vignesh Raghavendra Message-ID: Date: Mon, 9 Sep 2019 12:55:03 +0530 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.8.0 MIME-Version: 1.0 In-Reply-To: <13e5c02f-7060-3a30-56cb-a9caca9fc85b@ti.com> Content-Language: en-US X-EXCLAIMER-MD-CONFIG: e1e8a2fd-e40a-4ac6-ac9b-f7e9cc9ee180 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20190909_002447_347884_B4375E85 X-CRM114-Status: GOOD ( 21.31 ) 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, grygorii.strashko@ti.com, lokeshvutla@ti.com, j-keerthy@ti.com, linux-kernel@vger.kernel.org, tony@atomide.com, dmaengine@vger.kernel.org, dan.j.williams@intel.com, linux-arm-kernel@lists.infradead.org Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org SGksCgpPbiAwOS8wOS8xOSAxMTozOSBBTSwgVGVybyBLcmlzdG8gd3JvdGU6ClsuLi5dCj4+IGRp ZmYgLS1naXQgYS9kcml2ZXJzL3NvYy90aS9rMy1yaW5nYWNjLmMgYi9kcml2ZXJzL3NvYy90aS9r My1yaW5nYWNjLmMKPj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPj4gaW5kZXggMDAwMDAwMDAwMDAw Li40MDFkZmM5NjMzMTkKPj4gLS0tIC9kZXYvbnVsbAo+PiArKysgYi9kcml2ZXJzL3NvYy90aS9r My1yaW5nYWNjLmMKPj4gQEAgLTAsMCArMSwxMTkxIEBACj4+ICsvLyBTUERYLUxpY2Vuc2UtSWRl bnRpZmllcjogR1BMLTIuMAo+PiArLyoKPj4gKyAqIFRJIEszIE5BVlNTIFJpbmcgQWNjZWxlcmF0 b3Igc3Vic3lzdGVtIGRyaXZlcgo+PiArICoKPj4gKyAqIENvcHlyaWdodCAoQykgMjAxOSBUZXhh cyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQgLSBodHRwOi8vd3d3LnRpLmNvbQo+PiArICovCj4+ ICsKPj4gKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgo+PiArI2luY2x1ZGUgPGxpbnV4 L2lvLmg+Cj4+ICsjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Cj4+ICsjaW5jbHVkZSA8bGludXgv b2YuaD4KPj4gKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KPj4gKyNpbmNsdWRl IDxsaW51eC9wbV9ydW50aW1lLmg+Cj4+ICsjaW5jbHVkZSA8bGludXgvc29jL3RpL2szLXJpbmdh Y2MuaD4KPj4gKyNpbmNsdWRlIDxsaW51eC9zb2MvdGkvdGlfc2NpX3Byb3RvY29sLmg+Cj4+ICsj aW5jbHVkZSA8bGludXgvc29jL3RpL3RpX3NjaV9pbnRhX21zaS5oPgo+PiArI2luY2x1ZGUgPGxp bnV4L29mX2lycS5oPgo+PiArI2luY2x1ZGUgPGxpbnV4L2lycWRvbWFpbi5oPgo+PiArCj4+ICtz dGF0aWMgTElTVF9IRUFEKGszX3JpbmdhY2NfbGlzdCk7Cj4+ICtzdGF0aWMgREVGSU5FX01VVEVY KGszX3JpbmdhY2NfbGlzdF9sb2NrKTsKPj4gKwo+PiArI2lmZGVmIENPTkZJR19USV9LM19SSU5H QUNDX0RFQlVHCj4+ICsjZGVmaW5lwqDCoMKgIGszX25hdl9kYmcoZGV2LCBhcmcuLi4pIGRldl9l cnIoZGV2LCBhcmcpCj4gCj4gZGV2X2VyciBzZWVtcyBleGFnZ2VyYXRpb24gZm9yIGRlYnVnIHB1 cnBvc2VzLCBtYXliZSBqdXN0IGRldl9pbmZvLgoKSWYgeW91IG1ha2UgdGhpcyBkZXZfZGJnKCks IGl0IHNob3VsZCBiZSBwb3NzaWJsZSB0byBqdXN0IGVuYWJsZQpDT05GSUdfRFlOQU1JQ19ERUJV R1sxXSBhbmQgY29udHJvbCB3aGV0aGVyIG9yIG5vdCBkZWJ1ZyBwcmludHMgYXJlCmVuYWJsZWQg Zm9yIHRoaXMgbW9kdWxlLiBIYXZlIHlvdSBleHBsb3JlZCB0aGF0IG9wdGlvbj8gSWYgdGhhdCB3 b3JrcyB3ZQptYXkgbm90IG5lZWQgQ09ORklHX1RJX0szX1JJTkdBQ0NfREVCVUcgYXQgYWxsLgoK WzFdIERvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvZHluYW1pYy1kZWJ1Zy1ob3d0by5yc3QKClJl Z2FyZHMKVmlnbmVzaAoKPiAKPj4gK3N0YXRpY8KgwqDCoCB2b2lkIGRiZ193cml0ZWwodTMyIHYs IHZvaWQgX19pb21lbSAqcmVnKQo+PiArewo+PiArwqDCoMKgIHByX2VycigiV1JJVEVMKDMyKTog diglMDhYKS0tPnJlZyglcClcbiIsIHYsIHJlZyk7Cj4gCj4gQWdhaW4sIG1heWJlIGp1c3QgcHJf aW5mby4KPiAKPj4gK8KgwqDCoCB3cml0ZWwodiwgcmVnKTsKPj4gK30KPj4gKwo+PiArc3RhdGlj wqDCoMKgIHUzMiBkYmdfcmVhZGwodm9pZCBfX2lvbWVtICpyZWcpCj4+ICt7Cj4+ICvCoMKgwqAg dTMyIHY7Cj4+ICsKPj4gK8KgwqDCoCB2ID0gcmVhZGwocmVnKTsKPj4gK8KgwqDCoCBwcl9lcnIo IlJFQURMKDMyKTogdiglMDhYKTwtLXJlZyglcClcbiIsIHYsIHJlZyk7Cj4+ICvCoMKgwqAgcmV0 dXJuIHY7Cj4+ICt9Cj4+ICsjZWxzZQo+PiArI2RlZmluZcKgwqDCoCBrM19uYXZfZGJnKGRldiwg YXJnLi4uKSBkZXZfZGJnKGRldiwgYXJnKQo+PiArI2RlZmluZSBkYmdfd3JpdGVsKHYsIHJlZykg d3JpdGVsKHYsIHJlZykKPiAKPiBEbyB5b3UgbmVlZCB0byB1c2UgaGFyZCB3cml0ZWwsIHdyaXRl bF9yZWxheGVkIGlzIG5vdCBlbm91Z2g/Cj4gCj4+ICsKPj4gKyNkZWZpbmUgZGJnX3JlYWRsKHJl ZykgcmVhZGwocmVnKQo+IAo+IFNhbWUgYXMgYWJvdmUgYnV0IGZvciByZWFkPwo+IAo+PiArI2Vu ZGlmCj4+ICsKPj4gKyNkZWZpbmUgSzNfUklOR0FDQ19DRkdfUklOR19TSVpFX0VMQ05UX01BU0vC oMKgwqDCoMKgwqDCoCBHRU5NQVNLKDE5LCAwKQo+PiArCj4+ICsvKioKPj4gKyAqIHN0cnVjdCBr M19yaW5nX3J0X3JlZ3MgLcKgIFRoZSBSQSBDb250cm9sL1N0YXR1cyBSZWdpc3RlcnMgcmVnaW9u Cj4+ICsgKi8KPj4gK3N0cnVjdCBrM19yaW5nX3J0X3JlZ3Mgewo+PiArwqDCoMKgIHUzMsKgwqDC oCByZXN2XzE2WzRdOwo+PiArwqDCoMKgIHUzMsKgwqDCoCBkYjvCoMKgwqDCoMKgwqDCoCAvKiBS VCBSaW5nIE4gRG9vcmJlbGwgUmVnaXN0ZXIgKi8KPj4gK8KgwqDCoCB1MzLCoMKgwqAgcmVzdl80 WzFdOwo+PiArwqDCoMKgIHUzMsKgwqDCoCBvY2M7wqDCoMKgwqDCoMKgwqAgLyogUlQgUmluZyBO IE9jY3VwYW5jeSBSZWdpc3RlciAqLwo+PiArwqDCoMKgIHUzMsKgwqDCoCBpbmR4O8KgwqDCoMKg wqDCoMKgIC8qIFJUIFJpbmcgTiBDdXJyZW50IEluZGV4IFJlZ2lzdGVyICovCj4+ICvCoMKgwqAg dTMywqDCoMKgIGh3b2NjO8KgwqDCoMKgwqDCoMKgIC8qIFJUIFJpbmcgTiBIYXJkd2FyZSBPY2N1 cGFuY3kgUmVnaXN0ZXIgKi8KPj4gK8KgwqDCoCB1MzLCoMKgwqAgaHdpbmR4O8KgwqDCoMKgwqDC oMKgIC8qIFJUIFJpbmcgTiBDdXJyZW50IEluZGV4IFJlZ2lzdGVyICovCj4+ICt9Owo+PiArCj4+ ICsjZGVmaW5lIEszX1JJTkdBQ0NfUlRfUkVHU19TVEVQwqDCoMKgIDB4MTAwMAo+PiArCj4+ICsv KioKPj4gKyAqIHN0cnVjdCBrM19yaW5nX2ZpZm9fcmVncyAtwqAgVGhlIFJpbmcgQWNjZWxlcmF0 b3IgUXVldWVzIFJlZ2lzdGVycwo+PiByZWdpb24KPj4gKyAqLwo+PiArc3RydWN0IGszX3Jpbmdf Zmlmb19yZWdzIHsKPj4gK8KgwqDCoCB1MzLCoMKgwqAgaGVhZF9kYXRhWzEyOF07wqDCoMKgwqDC oMKgwqAgLyogUmluZyBIZWFkIEVudHJ5IERhdGEgUmVnaXN0ZXJzICovCj4+ICvCoMKgwqAgdTMy wqDCoMKgIHRhaWxfZGF0YVsxMjhdO8KgwqDCoMKgwqDCoMKgIC8qIFJpbmcgVGFpbCBFbnRyeSBE YXRhIFJlZ2lzdGVycyAqLwo+PiArwqDCoMKgIHUzMsKgwqDCoCBwZWVrX2hlYWRfZGF0YVsxMjhd O8KgwqDCoCAvKiBSaW5nIFBlZWsgSGVhZCBFbnRyeSBEYXRhIFJlZ3MgKi8KPj4gK8KgwqDCoCB1 MzLCoMKgwqAgcGVla190YWlsX2RhdGFbMTI4XTvCoMKgwqAgLyogUmluZyBQZWVrIFRhaWwgRW50 cnkgRGF0YSBSZWdzICovCj4+ICt9Owo+PiArCj4+ICsvKioKPj4gKyAqIHN0cnVjdCBrM19yaW5n YWNjX3Byb3h5X2djZmdfcmVncyAtIFJBIFByb3h5IEdsb2JhbCBDb25maWcgTU1JTwo+PiBSZWdp b24KPj4gKyAqLwo+PiArc3RydWN0IGszX3JpbmdhY2NfcHJveHlfZ2NmZ19yZWdzIHsKPj4gK8Kg wqDCoCB1MzLCoMKgwqAgcmV2aXNpb247wqDCoMKgIC8qIFJldmlzaW9uIFJlZ2lzdGVyICovCj4+ ICvCoMKgwqAgdTMywqDCoMKgIGNvbmZpZzvCoMKgwqDCoMKgwqDCoCAvKiBDb25maWcgUmVnaXN0 ZXIgKi8KPj4gK307Cj4+ICsKPj4gKyNkZWZpbmUgSzNfUklOR0FDQ19QUk9YWV9DRkdfVEhSRUFE U19NQVNLwqDCoMKgwqDCoMKgwqAgR0VOTUFTSygxNSwgMCkKPj4gKwo+PiArLyoqCj4+ICsgKiBz dHJ1Y3QgazNfcmluZ2FjY19wcm94eV90YXJnZXRfcmVncyAtwqAgUHJveHkgRGF0YXBhdGggTU1J TyBSZWdpb24KPj4gKyAqLwo+PiArc3RydWN0IGszX3JpbmdhY2NfcHJveHlfdGFyZ2V0X3JlZ3Mg ewo+PiArwqDCoMKgIHUzMsKgwqDCoCBjb250cm9sO8KgwqDCoCAvKiBQcm94eSBDb250cm9sIFJl Z2lzdGVyICovCj4+ICvCoMKgwqAgdTMywqDCoMKgIHN0YXR1czvCoMKgwqDCoMKgwqDCoCAvKiBQ cm94eSBTdGF0dXMgUmVnaXN0ZXIgKi8KPj4gK8KgwqDCoCB1OMKgwqDCoCByZXN2XzUxMls1MDRd Owo+PiArwqDCoMKgIHUzMsKgwqDCoCBkYXRhWzEyOF07wqDCoMKgIC8qIFByb3h5IERhdGEgUmVn aXN0ZXIgKi8KPj4gK307Cj4+ICsKPj4gKyNkZWZpbmUgSzNfUklOR0FDQ19QUk9YWV9UQVJHRVRf U1RFUMKgwqDCoCAweDEwMDAKPj4gKyNkZWZpbmUgSzNfUklOR0FDQ19QUk9YWV9OT1RfVVNFRMKg wqDCoCAoLTEpCj4+ICsKPj4gK2VudW0gazNfcmluZ2FjY19wcm94eV9hY2Nlc3NfbW9kZSB7Cj4+ ICvCoMKgwqAgUFJPWFlfQUNDRVNTX01PREVfSEVBRCA9IDAsCj4+ICvCoMKgwqAgUFJPWFlfQUND RVNTX01PREVfVEFJTCA9IDEsCj4+ICvCoMKgwqAgUFJPWFlfQUNDRVNTX01PREVfUEVFS19IRUFE ID0gMiwKPj4gK8KgwqDCoCBQUk9YWV9BQ0NFU1NfTU9ERV9QRUVLX1RBSUwgPSAzLAo+PiArfTsK Pj4gKwo+PiArI2RlZmluZSBLM19SSU5HQUNDX0ZJRk9fV0lORE9XX1NJWkVfQllURVPCoCAoNTEy VSkKPj4gKyNkZWZpbmUgSzNfUklOR0FDQ19GSUZPX1JFR1NfU1RFUMKgwqDCoCAweDEwMDAKPj4g KyNkZWZpbmUgSzNfUklOR0FDQ19NQVhfREJfUklOR19DTlTCoMKgwqAgKDEyN1UpCj4+ICsKPj4g Ky8qKgo+PiArICogc3RydWN0IGszX3Jpbmdfb3BzIC3CoCBSaW5nIG9wZXJhdGlvbnMKPj4gKyAq Lwo+PiArc3RydWN0IGszX3Jpbmdfb3BzIHsKPj4gK8KgwqDCoCBpbnQgKCpwdXNoX3RhaWwpKHN0 cnVjdCBrM19yaW5nICpyaW5nLCB2b2lkICplbG0pOwo+PiArwqDCoMKgIGludCAoKnB1c2hfaGVh ZCkoc3RydWN0IGszX3JpbmcgKnJpbmcsIHZvaWQgKmVsbSk7Cj4+ICvCoMKgwqAgaW50ICgqcG9w X3RhaWwpKHN0cnVjdCBrM19yaW5nICpyaW5nLCB2b2lkICplbG0pOwo+PiArwqDCoMKgIGludCAo KnBvcF9oZWFkKShzdHJ1Y3QgazNfcmluZyAqcmluZywgdm9pZCAqZWxtKTsKPj4gK307Cj4+ICsK Pj4gKy8qKgo+PiArICogc3RydWN0IGszX3JpbmcgLSBSQSBSaW5nIGRlc2NyaXB0b3IKPj4gKyAq Cj4+ICsgKiBAcnQgLSBSaW5nIGNvbnRyb2wvc3RhdHVzIHJlZ2lzdGVycwo+PiArICogQGZpZm9z IC0gUmluZyBxdWV1ZXMgcmVnaXN0ZXJzCj4+ICsgKiBAcHJveHkgLSBSaW5nIFByb3h5IERhdGFw YXRoIHJlZ2lzdGVycwo+PiArICogQHJpbmdfbWVtX2RtYSAtIFJpbmcgYnVmZmVyIGRtYSBhZGRy ZXNzCj4+ICsgKiBAcmluZ19tZW1fdmlydCAtIFJpbmcgYnVmZmVyIHZpcnQgYWRkcmVzcwo+PiAr ICogQG9wcyAtIFJpbmcgb3BlcmF0aW9ucwo+PiArICogQHNpemUgLSBSaW5nIHNpemUgaW4gZWxl bWVudHMKPj4gKyAqIEBlbG1fc2l6ZSAtIFNpemUgb2YgdGhlIHJpbmcgZWxlbWVudAo+PiArICog QG1vZGUgLSBSaW5nIG1vZGUKPj4gKyAqIEBmbGFncyAtIGZsYWdzCj4+ICsgKiBAZnJlZSAtIE51 bWJlciBvZiBmcmVlIGVsZW1lbnRzCj4+ICsgKiBAb2NjIC0gUmluZyBvY2N1cGFuY3kKPj4gKyAq IEB3aW5kZXggLSBXcml0ZSBpbmRleCAob25seSBmb3IgQEszX1JJTkdBQ0NfUklOR19NT0RFX1JJ TkcpCj4+ICsgKiBAcmluZGV4IC0gUmVhZCBpbmRleCAob25seSBmb3IgQEszX1JJTkdBQ0NfUklO R19NT0RFX1JJTkcpCj4+ICsgKiBAcmluZ19pZCAtIFJpbmcgSWQKPj4gKyAqIEBwYXJlbnQgLSBQ b2ludGVyIG9uIHN0cnVjdCBAazNfcmluZ2FjYwo+PiArICogQHVzZV9jb3VudCAtIFVzZSBjb3Vu dCBmb3Igc2hhcmVkIHJpbmdzCj4+ICsgKiBAcHJveHlfaWQgLSBSQSBSaW5nIFByb3h5IElkIChv bmx5IGlmIEBLM19SSU5HQUNDX1JJTkdfVVNFX1BST1hZKQo+PiArICovCj4+ICtzdHJ1Y3QgazNf cmluZyB7Cj4+ICvCoMKgwqAgc3RydWN0IGszX3JpbmdfcnRfcmVncyBfX2lvbWVtICpydDsKPj4g K8KgwqDCoCBzdHJ1Y3QgazNfcmluZ19maWZvX3JlZ3MgX19pb21lbSAqZmlmb3M7Cj4+ICvCoMKg wqAgc3RydWN0IGszX3JpbmdhY2NfcHJveHlfdGFyZ2V0X3JlZ3PCoCBfX2lvbWVtICpwcm94eTsK Pj4gK8KgwqDCoCBkbWFfYWRkcl90wqDCoMKgIHJpbmdfbWVtX2RtYTsKPj4gK8KgwqDCoCB2b2lk wqDCoMKgwqDCoMKgwqAgKnJpbmdfbWVtX3ZpcnQ7Cj4+ICvCoMKgwqAgc3RydWN0IGszX3Jpbmdf b3BzICpvcHM7Cj4+ICvCoMKgwqAgdTMywqDCoMKgwqDCoMKgwqAgc2l6ZTsKPj4gK8KgwqDCoCBl bnVtIGszX3Jpbmdfc2l6ZSBlbG1fc2l6ZTsKPj4gK8KgwqDCoCBlbnVtIGszX3JpbmdfbW9kZSBt b2RlOwo+PiArwqDCoMKgIHUzMsKgwqDCoMKgwqDCoMKgIGZsYWdzOwo+PiArI2RlZmluZSBLM19S SU5HX0ZMQUdfQlVTWcKgwqDCoCBCSVQoMSkKPj4gKyNkZWZpbmUgSzNfUklOR19GTEFHX1NIQVJF RMKgwqDCoCBCSVQoMikKPj4gK8KgwqDCoCB1MzLCoMKgwqDCoMKgwqDCoCBmcmVlOwo+PiArwqDC oMKgIHUzMsKgwqDCoMKgwqDCoMKgIG9jYzsKPj4gK8KgwqDCoCB1MzLCoMKgwqDCoMKgwqDCoCB3 aW5kZXg7Cj4+ICvCoMKgwqAgdTMywqDCoMKgwqDCoMKgwqAgcmluZGV4Owo+PiArwqDCoMKgIHUz MsKgwqDCoMKgwqDCoMKgIHJpbmdfaWQ7Cj4+ICvCoMKgwqAgc3RydWN0IGszX3JpbmdhY2PCoMKg wqAgKnBhcmVudDsKPj4gK8KgwqDCoCB1MzLCoMKgwqDCoMKgwqDCoCB1c2VfY291bnQ7Cj4+ICvC oMKgwqAgaW50wqDCoMKgwqDCoMKgwqAgcHJveHlfaWQ7Cj4+ICt9Owo+PiArCj4+ICsvKioKPj4g KyAqIHN0cnVjdCBrM19yaW5nYWNjIC0gUmluZ3MgYWNjZWxlcmF0b3IgZGVzY3JpcHRvcgo+PiAr ICoKPj4gKyAqIEBkZXYgLSBwb2ludGVyIG9uIFJBIGRldmljZQo+PiArICogQHByb3h5X2djZmcg LSBSQSBwcm94eSBnbG9iYWwgY29uZmlnIHJlZ2lzdGVycwo+PiArICogQHByb3h5X3RhcmdldF9i YXNlIC0gUkEgcHJveHkgZGF0YXBhdGggcmVnaW9uCj4+ICsgKiBAbnVtX3JpbmdzIC0gbnVtYmVy IG9mIHJpbmcgaW4gUkEKPj4gKyAqIEBybV9ncF9yYW5nZSAtIGdlbmVyYWwgcHVycG9zZSByaW5n cyByYW5nZSBmcm9tIHRpc2NpCj4+ICsgKiBAZG1hX3JpbmdfcmVzZXRfcXVpcmsgLSBETUEgcmVz ZXQgdy9hIGVuYWJsZQo+PiArICogQG51bV9wcm94aWVzIC0gbnVtYmVyIG9mIFJBIHByb3hpZXMK Pj4gKyAqIEByaW5ncyAtIGFycmF5IG9mIHJpbmdzIGRlc2NyaXB0b3JzIChzdHJ1Y3QgQGszX3Jp bmcpCj4+ICsgKiBAbGlzdCAtIGxpc3Qgb2YgUkFzIGluIHRoZSBzeXN0ZW0KPj4gKyAqIEB0aXNj aSAtIHBvaW50ZXIgdGktc2NpIGhhbmRsZQo+PiArICogQHRpc2NpX3Jpbmdfb3BzIC0gdGktc2Np IHJpbmdzIG9wcwo+PiArICogQHRpc2NpX2Rldl9pZCAtIHRpLXNjaSBkZXZpY2UgaWQKPj4gKyAq Lwo+PiArc3RydWN0IGszX3JpbmdhY2Mgewo+PiArwqDCoMKgIHN0cnVjdCBkZXZpY2UgKmRldjsK Pj4gK8KgwqDCoCBzdHJ1Y3QgazNfcmluZ2FjY19wcm94eV9nY2ZnX3JlZ3MgX19pb21lbSAqcHJv eHlfZ2NmZzsKPj4gK8KgwqDCoCB2b2lkIF9faW9tZW0gKnByb3h5X3RhcmdldF9iYXNlOwo+PiAr wqDCoMKgIHUzMiBudW1fcmluZ3M7IC8qIG51bWJlciBvZiByaW5ncyBpbiBSaW5nYWNjIG1vZHVs ZSAqLwo+PiArwqDCoMKgIHVuc2lnbmVkIGxvbmcgKnJpbmdzX2ludXNlOwo+PiArwqDCoMKgIHN0 cnVjdCB0aV9zY2lfcmVzb3VyY2UgKnJtX2dwX3JhbmdlOwo+PiArCj4+ICvCoMKgwqAgYm9vbCBk bWFfcmluZ19yZXNldF9xdWlyazsKPj4gK8KgwqDCoCB1MzIgbnVtX3Byb3hpZXM7Cj4+ICvCoMKg wqAgdW5zaWduZWQgbG9uZyAqcHJveHlfaW51c2U7Cj4gCj4gcHJveHlfaW51c2UgaXMgbm90IGRv Y3VtZW50ZWQgYWJvdmUuCj4gCj4+ICsKPj4gK8KgwqDCoCBzdHJ1Y3QgazNfcmluZyAqcmluZ3M7 Cj4+ICvCoMKgwqAgc3RydWN0IGxpc3RfaGVhZCBsaXN0Owo+PiArwqDCoMKgIHN0cnVjdCBtdXRl eCByZXFfbG9jazsgLyogcHJvdGVjdCByaW5ncyBhbGxvY2F0aW9uICovCj4+ICsKPj4gK8KgwqDC oCBjb25zdCBzdHJ1Y3QgdGlfc2NpX2hhbmRsZSAqdGlzY2k7Cj4+ICvCoMKgwqAgY29uc3Qgc3Ry dWN0IHRpX3NjaV9ybV9yaW5nYWNjX29wcyAqdGlzY2lfcmluZ19vcHM7Cj4+ICvCoMKgwqAgdTMy wqAgdGlzY2lfZGV2X2lkOwo+PiArfTsKPj4gKwo+PiArc3RhdGljIGxvbmcgazNfcmluZ2FjY19y aW5nX2dldF9maWZvX3BvcyhzdHJ1Y3QgazNfcmluZyAqcmluZykKPj4gK3sKPj4gK8KgwqDCoCBy ZXR1cm4gSzNfUklOR0FDQ19GSUZPX1dJTkRPV19TSVpFX0JZVEVTIC0KPj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgICg0IDw8IHJpbmctPmVsbV9zaXplKTsKPj4gK30KPj4gKwo+PiArc3RhdGljIHZv aWQgKmszX3JpbmdhY2NfZ2V0X2VsbV9hZGRyKHN0cnVjdCBrM19yaW5nICpyaW5nLCB1MzIgaWR4 KQo+PiArewo+PiArwqDCoMKgIHJldHVybiAoaWR4ICogKDQgPDwgcmluZy0+ZWxtX3NpemUpICsg cmluZy0+cmluZ19tZW1fdmlydCk7Cj4gCj4gVGhlIGFyaXRobWV0aWMgaGVyZSBzZWVtcyBiYWNr d2FyZHMgY29tcGFyZWQgdG8gbW9zdCBvdGhlciBjb2RlIEkndmUKPiBzZWVuLiBJdCB3b3VsZCBi ZSBtb3JlIHJlYWRhYmxlIGlmIHlvdSBoYXZlIGl0IGxpa2U6Cj4gCj4gcmluZy0+cmluZ19tZW1f dmlydCArIGlkeCAqICg0IDw8IHJpbmctPmVsbV9zaXplKTsKPiAKPj4gK30KPj4gKwo+PiArc3Rh dGljIGludCBrM19yaW5nYWNjX3JpbmdfcHVzaF9tZW0oc3RydWN0IGszX3JpbmcgKnJpbmcsIHZv aWQgKmVsZW0pOwo+PiArc3RhdGljIGludCBrM19yaW5nYWNjX3JpbmdfcG9wX21lbShzdHJ1Y3Qg azNfcmluZyAqcmluZywgdm9pZCAqZWxlbSk7Cj4+ICsKPj4gK3N0YXRpYyBzdHJ1Y3QgazNfcmlu Z19vcHMgazNfcmluZ19tb2RlX3Jpbmdfb3BzID0gewo+PiArwqDCoMKgwqDCoMKgwqAgLnB1c2hf dGFpbCA9IGszX3JpbmdhY2NfcmluZ19wdXNoX21lbSwKPj4gK8KgwqDCoMKgwqDCoMKgIC5wb3Bf aGVhZCA9IGszX3JpbmdhY2NfcmluZ19wb3BfbWVtLAo+PiArfTsKPj4gKwo+PiArc3RhdGljIGlu dCBrM19yaW5nYWNjX3JpbmdfcHVzaF9pbyhzdHJ1Y3QgazNfcmluZyAqcmluZywgdm9pZCAqZWxl bSk7Cj4+ICtzdGF0aWMgaW50IGszX3JpbmdhY2NfcmluZ19wb3BfaW8oc3RydWN0IGszX3Jpbmcg KnJpbmcsIHZvaWQgKmVsZW0pOwo+PiArc3RhdGljIGludCBrM19yaW5nYWNjX3JpbmdfcHVzaF9o ZWFkX2lvKHN0cnVjdCBrM19yaW5nICpyaW5nLCB2b2lkCj4+ICplbGVtKTsKPj4gK3N0YXRpYyBp bnQgazNfcmluZ2FjY19yaW5nX3BvcF90YWlsX2lvKHN0cnVjdCBrM19yaW5nICpyaW5nLCB2b2lk Cj4+ICplbGVtKTsKPj4gKwo+PiArc3RhdGljIHN0cnVjdCBrM19yaW5nX29wcyBrM19yaW5nX21v ZGVfbXNnX29wcyA9IHsKPj4gK8KgwqDCoMKgwqDCoMKgIC5wdXNoX3RhaWwgPSBrM19yaW5nYWNj X3JpbmdfcHVzaF9pbywKPj4gK8KgwqDCoMKgwqDCoMKgIC5wdXNoX2hlYWQgPSBrM19yaW5nYWNj X3JpbmdfcHVzaF9oZWFkX2lvLAo+PiArwqDCoMKgwqDCoMKgwqAgLnBvcF90YWlsID0gazNfcmlu Z2FjY19yaW5nX3BvcF90YWlsX2lvLAo+PiArwqDCoMKgwqDCoMKgwqAgLnBvcF9oZWFkID0gazNf cmluZ2FjY19yaW5nX3BvcF9pbywKPj4gK307Cj4+ICsKPj4gK3N0YXRpYyBpbnQgazNfcmluZ2Fj Y19yaW5nX3B1c2hfaGVhZF9wcm94eShzdHJ1Y3QgazNfcmluZyAqcmluZywgdm9pZAo+PiAqZWxl bSk7Cj4+ICtzdGF0aWMgaW50IGszX3JpbmdhY2NfcmluZ19wdXNoX3RhaWxfcHJveHkoc3RydWN0 IGszX3JpbmcgKnJpbmcsIHZvaWQKPj4gKmVsZW0pOwo+PiArc3RhdGljIGludCBrM19yaW5nYWNj X3JpbmdfcG9wX2hlYWRfcHJveHkoc3RydWN0IGszX3JpbmcgKnJpbmcsIHZvaWQKPj4gKmVsZW0p Owo+PiArc3RhdGljIGludCBrM19yaW5nYWNjX3JpbmdfcG9wX3RhaWxfcHJveHkoc3RydWN0IGsz X3JpbmcgKnJpbmcsIHZvaWQKPj4gKmVsZW0pOwo+PiArCj4+ICtzdGF0aWMgc3RydWN0IGszX3Jp bmdfb3BzIGszX3JpbmdfbW9kZV9wcm94eV9vcHMgPSB7Cj4+ICvCoMKgwqDCoMKgwqDCoCAucHVz aF90YWlsID0gazNfcmluZ2FjY19yaW5nX3B1c2hfdGFpbF9wcm94eSwKPj4gK8KgwqDCoMKgwqDC oMKgIC5wdXNoX2hlYWQgPSBrM19yaW5nYWNjX3JpbmdfcHVzaF9oZWFkX3Byb3h5LAo+PiArwqDC oMKgwqDCoMKgwqAgLnBvcF90YWlsID0gazNfcmluZ2FjY19yaW5nX3BvcF90YWlsX3Byb3h5LAo+ PiArwqDCoMKgwqDCoMKgwqAgLnBvcF9oZWFkID0gazNfcmluZ2FjY19yaW5nX3BvcF9oZWFkX3By b3h5LAo+PiArfTsKPj4gKwo+PiArI2lmZGVmIENPTkZJR19USV9LM19SSU5HQUNDX0RFQlVHCj4+ ICt2b2lkIGszX3JpbmdhY2NfcmluZ19kdW1wKHN0cnVjdCBrM19yaW5nICpyaW5nKQo+PiArewo+ PiArwqDCoMKgIHN0cnVjdCBkZXZpY2UgKmRldiA9IHJpbmctPnBhcmVudC0+ZGV2Owo+PiArCj4+ ICvCoMKgwqAgazNfbmF2X2RiZyhkZXYsICJkdW1wIHJpbmc6ICVkXG4iLCByaW5nLT5yaW5nX2lk KTsKPj4gK8KgwqDCoCBrM19uYXZfZGJnKGRldiwgImR1bXAgbWVtIHZpcnQgJXAsIGRtYSAlcGFk XG4iLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmluZy0+cmluZ19tZW1fdmlydCwgJnJpbmct PnJpbmdfbWVtX2RtYSk7Cj4+ICvCoMKgwqAgazNfbmF2X2RiZyhkZXYsICJkdW1wIGVsbXNpemUg JWQsIHNpemUgJWQsIG1vZGUgJWQsIHByb3h5X2lkICVkXG4iLAo+PiArwqDCoMKgwqDCoMKgwqDC oMKgwqAgcmluZy0+ZWxtX3NpemUsIHJpbmctPnNpemUsIHJpbmctPm1vZGUsIHJpbmctPnByb3h5 X2lkKTsKPj4gKwo+PiArwqDCoMKgIGszX25hdl9kYmcoZGV2LCAiZHVtcCByaW5nX3J0X3JlZ3M6 IGRiJTA4eFxuIiwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgIHJlYWRsKCZyaW5nLT5ydC0+ZGIp KTsKPiAKPiBXaHkgbm90IHVzZSByZWFkbF9yZWxheGVkIGluIHRoaXMgZnVuYz8KPiAKPj4gK8Kg wqDCoCBrM19uYXZfZGJnKGRldiwgImR1bXAgb2NjJTA4eFxuIiwKPj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgIHJlYWRsKCZyaW5nLT5ydC0+b2NjKSk7Cj4+ICvCoMKgwqAgazNfbmF2X2RiZyhkZXYs ICJkdW1wIGluZHglMDh4XG4iLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmVhZGwoJnJpbmct PnJ0LT5pbmR4KSk7Cj4+ICvCoMKgwqAgazNfbmF2X2RiZyhkZXYsICJkdW1wIGh3b2NjJTA4eFxu IiwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgIHJlYWRsKCZyaW5nLT5ydC0+aHdvY2MpKTsKPj4g K8KgwqDCoCBrM19uYXZfZGJnKGRldiwgImR1bXAgaHdpbmR4JTA4eFxuIiwKPj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgIHJlYWRsKCZyaW5nLT5ydC0+aHdpbmR4KSk7Cj4+ICsKPj4gK8KgwqDCoCBp ZiAocmluZy0+cmluZ19tZW1fdmlydCkKPj4gK8KgwqDCoMKgwqDCoMKgIHByaW50X2hleF9kdW1w KEtFUk5fRVJSLCAiZHVtcCByaW5nX21lbV92aXJ0ICIsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgRFVNUF9QUkVGSVhfTk9ORSwgMTYsIDEsCj4+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmluZy0+cmluZ19tZW1fdmlydCwgMTYgKiA4LCBm YWxzZSk7Cj4+ICt9Cj4+ICtFWFBPUlRfU1lNQk9MX0dQTChrM19yaW5nYWNjX3JpbmdfZHVtcCk7 Cj4gCj4gRG8geW91IHJlYWxseSBuZWVkIHRvIGV4cG9ydCBhIGRlYnVnIGZ1bmN0aW9uPwo+IAo+ PiArI2VuZGlmCj4+ICsKPj4gK3N0cnVjdCBrM19yaW5nICprM19yaW5nYWNjX3JlcXVlc3Rfcmlu ZyhzdHJ1Y3QgazNfcmluZ2FjYyAqcmluZ2FjYywKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIGludCBpZCwgdTMyIGZsYWdzKQo+PiArewo+PiArwqDCoMKgIGludCBw cm94eV9pZCA9IEszX1JJTkdBQ0NfUFJPWFlfTk9UX1VTRUQ7Cj4+ICsKPj4gK8KgwqDCoCBtdXRl eF9sb2NrKCZyaW5nYWNjLT5yZXFfbG9jayk7Cj4+ICsKPj4gK8KgwqDCoCBpZiAoaWQgPT0gSzNf UklOR0FDQ19SSU5HX0lEX0FOWSkgewo+PiArwqDCoMKgwqDCoMKgwqAgLyogUmVxdWVzdCBmb3Ig YW55IGdlbmVyYWwgcHVycG9zZSByaW5nICovCj4+ICvCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgdGlf c2NpX3Jlc291cmNlX2Rlc2MgKmdwX3JpbmdzID0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgJnJpbmdhY2MtPnJtX2dwX3JhbmdlLT5kZXNjWzBdOwo+ PiArwqDCoMKgwqDCoMKgwqAgdW5zaWduZWQgbG9uZyBzaXplOwo+PiArCj4+ICvCoMKgwqDCoMKg wqDCoCBzaXplID0gZ3BfcmluZ3MtPnN0YXJ0ICsgZ3BfcmluZ3MtPm51bTsKPj4gK8KgwqDCoMKg wqDCoMKgIGlkID0gZmluZF9uZXh0X3plcm9fYml0KHJpbmdhY2MtPnJpbmdzX2ludXNlLCBzaXpl LAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZ3BfcmluZ3MtPnN0 YXJ0KTsKPj4gK8KgwqDCoMKgwqDCoMKgIGlmIChpZCA9PSBzaXplKQo+PiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBnb3RvIGVycm9yOwo+PiArwqDCoMKgIH0gZWxzZSBpZiAoaWQgPCAwKSB7Cj4+ ICvCoMKgwqDCoMKgwqDCoCBnb3RvIGVycm9yOwo+PiArwqDCoMKgIH0KPj4gKwo+PiArwqDCoMKg IGlmICh0ZXN0X2JpdChpZCwgcmluZ2FjYy0+cmluZ3NfaW51c2UpICYmCj4+ICvCoMKgwqDCoMKg wqDCoCAhKHJpbmdhY2MtPnJpbmdzW2lkXS5mbGFncyAmIEszX1JJTkdfRkxBR19TSEFSRUQpKQo+ PiArwqDCoMKgwqDCoMKgwqAgZ290byBlcnJvcjsKPj4gK8KgwqDCoCBlbHNlIGlmIChyaW5nYWNj LT5yaW5nc1tpZF0uZmxhZ3MgJiBLM19SSU5HX0ZMQUdfU0hBUkVEKQo+PiArwqDCoMKgwqDCoMKg wqAgZ290byBvdXQ7Cj4+ICsKPj4gK8KgwqDCoCBpZiAoZmxhZ3MgJiBLM19SSU5HQUNDX1JJTkdf VVNFX1BST1hZKSB7Cj4+ICvCoMKgwqDCoMKgwqDCoCBwcm94eV9pZCA9IGZpbmRfbmV4dF96ZXJv X2JpdChyaW5nYWNjLT5wcm94eV9pbnVzZSwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJpbmdhY2MtPm51bV9wcm94aWVzLCAwKTsKPj4gK8Kg wqDCoMKgwqDCoMKgIGlmIChwcm94eV9pZCA9PSByaW5nYWNjLT5udW1fcHJveGllcykKPj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqAgZ290byBlcnJvcjsKPj4gK8KgwqDCoCB9Cj4+ICsKPj4gK8Kg wqDCoCBpZiAoIXRyeV9tb2R1bGVfZ2V0KHJpbmdhY2MtPmRldi0+ZHJpdmVyLT5vd25lcikpCj4+ ICvCoMKgwqDCoMKgwqDCoCBnb3RvIGVycm9yOwo+PiArCj4+ICvCoMKgwqAgaWYgKHByb3h5X2lk ICE9IEszX1JJTkdBQ0NfUFJPWFlfTk9UX1VTRUQpIHsKPj4gK8KgwqDCoMKgwqDCoMKgIHNldF9i aXQocHJveHlfaWQsIHJpbmdhY2MtPnByb3h5X2ludXNlKTsKPj4gK8KgwqDCoMKgwqDCoMKgIHJp bmdhY2MtPnJpbmdzW2lkXS5wcm94eV9pZCA9IHByb3h5X2lkOwo+PiArwqDCoMKgwqDCoMKgwqAg azNfbmF2X2RiZyhyaW5nYWNjLT5kZXYsICJHaXZpbmcgcmluZyMlZCBwcm94eSMlZFxuIiwKPj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWQsIHByb3h5X2lkKTsKPj4gK8KgwqDCoCB9 IGVsc2Ugewo+PiArwqDCoMKgwqDCoMKgwqAgazNfbmF2X2RiZyhyaW5nYWNjLT5kZXYsICJHaXZp bmcgcmluZyMlZFxuIiwgaWQpOwo+PiArwqDCoMKgIH0KPj4gKwo+PiArwqDCoMKgIHNldF9iaXQo aWQsIHJpbmdhY2MtPnJpbmdzX2ludXNlKTsKPj4gK291dDoKPj4gK8KgwqDCoCByaW5nYWNjLT5y aW5nc1tpZF0udXNlX2NvdW50Kys7Cj4+ICvCoMKgwqAgbXV0ZXhfdW5sb2NrKCZyaW5nYWNjLT5y ZXFfbG9jayk7Cj4+ICvCoMKgwqAgcmV0dXJuICZyaW5nYWNjLT5yaW5nc1tpZF07Cj4+ICsKPj4g K2Vycm9yOgo+PiArwqDCoMKgIG11dGV4X3VubG9jaygmcmluZ2FjYy0+cmVxX2xvY2spOwo+PiAr wqDCoMKgIHJldHVybiBOVUxMOwo+PiArfQo+PiArRVhQT1JUX1NZTUJPTF9HUEwoazNfcmluZ2Fj Y19yZXF1ZXN0X3JpbmcpOwo+PiArCj4+ICtzdGF0aWMgdm9pZCBrM19yaW5nYWNjX3JpbmdfcmVz ZXRfc2NpKHN0cnVjdCBrM19yaW5nICpyaW5nKQo+PiArewo+PiArwqDCoMKgIHN0cnVjdCBrM19y aW5nYWNjICpyaW5nYWNjID0gcmluZy0+cGFyZW50Owo+PiArwqDCoMKgIGludCByZXQ7Cj4+ICsK Pj4gK8KgwqDCoCByZXQgPSByaW5nYWNjLT50aXNjaV9yaW5nX29wcy0+Y29uZmlnKAo+PiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCByaW5nYWNjLT50aXNjaSwKPj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqAgVElfU0NJX01TR19WQUxVRV9STV9SSU5HX0NPVU5UX1ZBTElELAo+PiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCByaW5nYWNjLT50aXNjaV9kZXZfaWQsCj4+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIHJpbmctPnJpbmdfaWQsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIDAsCj4+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIDAsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJpbmct PnNpemUsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIDAsCj4+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIDAsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIDApOwo+PiArwqDCoMKgIGlmIChy ZXQpCj4+ICvCoMKgwqDCoMKgwqDCoCBkZXZfZXJyKHJpbmdhY2MtPmRldiwgIlRJU0NJIHJlc2V0 IHJpbmcgZmFpbCAoJWQpIHJpbmdfaWR4Cj4+ICVkXG4iLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCByZXQsIHJpbmctPnJpbmdfaWQpOwo+IAo+IFJldHVybiB2YWx1ZSBvZiBzY2kgb3BzIGlz IG1hc2tlZCwgd2h5IG5vdCByZXR1cm4gaXQgYW5kIGxldCB0aGUgY2FsbGVyCj4gaGFuZGxlIGl0 IHByb3Blcmx5Pwo+IAo+IFNhbWUgY29tbWVudCBmb3IgYW55dGhpbmcgc2ltaWxhciB0aGF0IGZv bGxvd3MuCj4gCj4+ICt9Cj4+ICsKPj4gK3ZvaWQgazNfcmluZ2FjY19yaW5nX3Jlc2V0KHN0cnVj dCBrM19yaW5nICpyaW5nKQo+PiArewo+PiArwqDCoMKgIGlmICghcmluZyB8fCAhKHJpbmctPmZs YWdzICYgSzNfUklOR19GTEFHX0JVU1kpKQo+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuOwo+PiAr Cj4+ICvCoMKgwqAgcmluZy0+b2NjID0gMDsKPj4gK8KgwqDCoCByaW5nLT5mcmVlID0gMDsKPj4g K8KgwqDCoCByaW5nLT5yaW5kZXggPSAwOwo+PiArwqDCoMKgIHJpbmctPndpbmRleCA9IDA7Cj4+ ICsKPj4gK8KgwqDCoCBrM19yaW5nYWNjX3JpbmdfcmVzZXRfc2NpKHJpbmcpOwo+PiArfQo+PiAr RVhQT1JUX1NZTUJPTF9HUEwoazNfcmluZ2FjY19yaW5nX3Jlc2V0KTsKPj4gKwo+PiArc3RhdGlj IHZvaWQgazNfcmluZ2FjY19yaW5nX3JlY29uZmlnX3Ftb2RlX3NjaShzdHJ1Y3QgazNfcmluZyAq cmluZywKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgZW51bSBrM19yaW5nX21vZGUgbW9kZSkKPj4gK3sKPj4gK8KgwqDCoCBzdHJ1Y3QgazNf cmluZ2FjYyAqcmluZ2FjYyA9IHJpbmctPnBhcmVudDsKPj4gK8KgwqDCoCBpbnQgcmV0Owo+PiAr Cj4+ICvCoMKgwqAgcmV0ID0gcmluZ2FjYy0+dGlzY2lfcmluZ19vcHMtPmNvbmZpZygKPj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqAgcmluZ2FjYy0+dGlzY2ksCj4+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIFRJX1NDSV9NU0dfVkFMVUVfUk1fUklOR19NT0RFX1ZBTElELAo+PiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCByaW5nYWNjLT50aXNjaV9kZXZfaWQsCj4+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIHJpbmctPnJpbmdfaWQsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIDAsCj4+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIDAsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIDAsCj4+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIG1vZGUsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IDAsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIDApOwo+PiArwqDCoMKgIGlmIChyZXQpCj4+ ICvCoMKgwqDCoMKgwqDCoCBkZXZfZXJyKHJpbmdhY2MtPmRldiwgIlRJU0NJIHJlY29uZiBxbW9k ZSBmYWlsICglZCkgcmluZ19pZHgKPj4gJWRcbiIsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IHJldCwgcmluZy0+cmluZ19pZCk7Cj4+ICt9Cj4+ICsKPj4gK3ZvaWQgazNfcmluZ2FjY19yaW5n X3Jlc2V0X2RtYShzdHJ1Y3QgazNfcmluZyAqcmluZywgdTMyIG9jYykKPj4gK3sKPj4gK8KgwqDC oCBpZiAoIXJpbmcgfHwgIShyaW5nLT5mbGFncyAmIEszX1JJTkdfRkxBR19CVVNZKSkKPj4gK8Kg wqDCoMKgwqDCoMKgIHJldHVybjsKPj4gKwo+PiArwqDCoMKgIGlmICghcmluZy0+cGFyZW50LT5k bWFfcmluZ19yZXNldF9xdWlyaykKPj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybjsKPj4gKwo+PiAr wqDCoMKgIGlmICghb2NjKQo+PiArwqDCoMKgwqDCoMKgwqAgb2NjID0gZGJnX3JlYWRsKCZyaW5n LT5ydC0+b2NjKTsKPj4gKwo+PiArwqDCoMKgIGlmIChvY2MpIHsKPj4gK8KgwqDCoMKgwqDCoMKg IHUzMiBkYl9yaW5nX2NudCwgZGJfcmluZ19jbnRfY3VyOwo+PiArCj4+ICvCoMKgwqDCoMKgwqDC oCBrM19uYXZfZGJnKHJpbmctPnBhcmVudC0+ZGV2LCAiJXMgJXUgb2NjOiAldVxuIiwgX19mdW5j X18sCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJpbmctPnJpbmdfaWQsIG9jYyk7 Cj4+ICvCoMKgwqDCoMKgwqDCoCAvKiAyLiBSZXNldCB0aGUgcmluZyAqLwo+IAo+IDI/IFdoZXJl IGlzIDE/Cj4gCj4+ICvCoMKgwqDCoMKgwqDCoCBrM19yaW5nYWNjX3JpbmdfcmVzZXRfc2NpKHJp bmcpOwo+PiArCj4+ICvCoMKgwqDCoMKgwqDCoCAvKgo+PiArwqDCoMKgwqDCoMKgwqDCoCAqIDMu IFNldHVwIHRoZSByaW5nIGluIHJpbmcvZG9vcmJlbGwgbW9kZQo+PiArwqDCoMKgwqDCoMKgwqDC oCAqIChpZiBub3QgYWxyZWFkeSBpbiB0aGlzIG1vZGUpCj4+ICvCoMKgwqDCoMKgwqDCoMKgICov Cj4+ICvCoMKgwqDCoMKgwqDCoCBpZiAocmluZy0+bW9kZSAhPSBLM19SSU5HQUNDX1JJTkdfTU9E RV9SSU5HKQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBrM19yaW5nYWNjX3JpbmdfcmVjb25m aWdfcW1vZGVfc2NpKAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg cmluZywgSzNfUklOR0FDQ19SSU5HX01PREVfUklORyk7Cj4+ICvCoMKgwqDCoMKgwqDCoCAvKgo+ PiArwqDCoMKgwqDCoMKgwqDCoCAqIDQuIFJpbmcgdGhlIGRvb3JiZWxsIDIqKjIyIOKAkyByaW5n T2NjIHRpbWVzLgo+PiArwqDCoMKgwqDCoMKgwqDCoCAqIFRoaXMgd2lsbCB3cmFwIHRoZSBpbnRl cm5hbCBVRE1BUCByaW5nIHN0YXRlIG9jY3VwYW5jeQo+PiArwqDCoMKgwqDCoMKgwqDCoCAqIGNv dW50ZXIgKHdoaWNoIGlzIDIxLWJpdHMgd2lkZSkgdG8gMC4KPj4gK8KgwqDCoMKgwqDCoMKgwqAg Ki8KPj4gK8KgwqDCoMKgwqDCoMKgIGRiX3JpbmdfY250ID0gKDFVIDw8IDIyKSAtIG9jYzsKPj4g Kwo+PiArwqDCoMKgwqDCoMKgwqAgd2hpbGUgKGRiX3JpbmdfY250ICE9IDApIHsKPj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqAgLyoKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqIFJpbmcg dGhlIGRvb3JiZWxsIHdpdGggdGhlIG1heGltdW0gY291bnQgZWFjaAo+PiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgICogaXRlcmF0aW9uIGlmIHBvc3NpYmxlIHRvIG1pbmltaXplIHRoZSB0b3Rh bAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICogb2Ygd3JpdGVzCj4+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgKi8KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgKGRiX3Jpbmdf Y250ID4gSzNfUklOR0FDQ19NQVhfREJfUklOR19DTlQpCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgZGJfcmluZ19jbnRfY3VyID0gSzNfUklOR0FDQ19NQVhfREJfUklOR19DTlQ7 Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGVsc2UKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBkYl9yaW5nX2NudF9jdXIgPSBkYl9yaW5nX2NudDsKPj4gKwo+PiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCB3cml0ZWwoZGJfcmluZ19jbnRfY3VyLCAmcmluZy0+cnQtPmRiKTsK Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZGJfcmluZ19jbnQgLT0gZGJfcmluZ19jbnRfY3Vy Owo+PiArwqDCoMKgwqDCoMKgwqAgfQo+PiArCj4+ICvCoMKgwqDCoMKgwqDCoCAvKiA1LiBSZXN0 b3JlIHRoZSBvcmlnaW5hbCByaW5nIG1vZGUgKGlmIG5vdCByaW5nIG1vZGUpICovCj4+ICvCoMKg wqDCoMKgwqDCoCBpZiAocmluZy0+bW9kZSAhPSBLM19SSU5HQUNDX1JJTkdfTU9ERV9SSU5HKQo+ PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBrM19yaW5nYWNjX3JpbmdfcmVjb25maWdfcW1vZGVf c2NpKHJpbmcsIHJpbmctPm1vZGUpOwo+PiArwqDCoMKgIH0KPj4gKwo+PiArwqDCoMKgIC8qIDIu IFJlc2V0IHRoZSByaW5nICovCj4gCj4gQWdhaW4gMj8KPiAKPj4gK8KgwqDCoCBrM19yaW5nYWNj X3JpbmdfcmVzZXQocmluZyk7Cj4+ICt9Cj4+ICtFWFBPUlRfU1lNQk9MX0dQTChrM19yaW5nYWNj X3JpbmdfcmVzZXRfZG1hKTsKPj4gKwo+PiArc3RhdGljIHZvaWQgazNfcmluZ2FjY19yaW5nX2Zy ZWVfc2NpKHN0cnVjdCBrM19yaW5nICpyaW5nKQo+PiArewo+PiArwqDCoMKgIHN0cnVjdCBrM19y aW5nYWNjICpyaW5nYWNjID0gcmluZy0+cGFyZW50Owo+PiArwqDCoMKgIGludCByZXQ7Cj4+ICsK Pj4gK8KgwqDCoCByZXQgPSByaW5nYWNjLT50aXNjaV9yaW5nX29wcy0+Y29uZmlnKAo+PiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCByaW5nYWNjLT50aXNjaSwKPj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqAgVElfU0NJX01TR19WQUxVRV9STV9BTExfTk9fT1JERVIsCj4+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIHJpbmdhY2MtPnRpc2NpX2Rldl9pZCwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqAgcmluZy0+cmluZ19pZCwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgMCwKPj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqAgMCwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgMCwKPj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqAgMCwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgMCwKPj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgMCk7Cj4+ICvCoMKgwqAgaWYgKHJldCkKPj4gK8KgwqDC oMKgwqDCoMKgIGRldl9lcnIocmluZ2FjYy0+ZGV2LCAiVElTQ0kgcmluZyBmcmVlIGZhaWwgKCVk KSByaW5nX2lkeCAlZFxuIiwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0LCByaW5nLT5y aW5nX2lkKTsKPj4gK30KPj4gKwo+PiAraW50IGszX3JpbmdhY2NfcmluZ19mcmVlKHN0cnVjdCBr M19yaW5nICpyaW5nKQo+PiArewo+PiArwqDCoMKgIHN0cnVjdCBrM19yaW5nYWNjICpyaW5nYWNj Owo+PiArCj4+ICvCoMKgwqAgaWYgKCFyaW5nKQo+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIC1F SU5WQUw7Cj4+ICsKPj4gK8KgwqDCoCByaW5nYWNjID0gcmluZy0+cGFyZW50Owo+PiArCj4+ICvC oMKgwqAgazNfbmF2X2RiZyhyaW5nLT5wYXJlbnQtPmRldiwgImZsYWdzOiAweCUwOHhcbiIsIHJp bmctPmZsYWdzKTsKPj4gKwo+PiArwqDCoMKgIGlmICghdGVzdF9iaXQocmluZy0+cmluZ19pZCwg cmluZ2FjYy0+cmluZ3NfaW51c2UpKQo+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIC1FSU5WQUw7 Cj4+ICsKPj4gK8KgwqDCoCBtdXRleF9sb2NrKCZyaW5nYWNjLT5yZXFfbG9jayk7Cj4+ICsKPj4g K8KgwqDCoCBpZiAoLS1yaW5nLT51c2VfY291bnQpCj4+ICvCoMKgwqDCoMKgwqDCoCBnb3RvIG91 dDsKPj4gKwo+PiArwqDCoMKgIGlmICghKHJpbmctPmZsYWdzICYgSzNfUklOR19GTEFHX0JVU1kp KQo+PiArwqDCoMKgwqDCoMKgwqAgZ290byBub19pbml0Owo+PiArCj4+ICvCoMKgwqAgazNfcmlu Z2FjY19yaW5nX2ZyZWVfc2NpKHJpbmcpOwo+PiArCj4+ICvCoMKgwqAgZG1hX2ZyZWVfY29oZXJl bnQocmluZ2FjYy0+ZGV2LAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmluZy0+c2l6 ZSAqICg0IDw8IHJpbmctPmVsbV9zaXplKSwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IHJpbmctPnJpbmdfbWVtX3ZpcnQsIHJpbmctPnJpbmdfbWVtX2RtYSk7Cj4+ICvCoMKgwqAgcmlu Zy0+ZmxhZ3MgPSAwOwo+PiArwqDCoMKgIHJpbmctPm9wcyA9IE5VTEw7Cj4+ICvCoMKgwqAgaWYg KHJpbmctPnByb3h5X2lkICE9IEszX1JJTkdBQ0NfUFJPWFlfTk9UX1VTRUQpIHsKPj4gK8KgwqDC oMKgwqDCoMKgIGNsZWFyX2JpdChyaW5nLT5wcm94eV9pZCwgcmluZ2FjYy0+cHJveHlfaW51c2Up Owo+PiArwqDCoMKgwqDCoMKgwqAgcmluZy0+cHJveHkgPSBOVUxMOwo+PiArwqDCoMKgwqDCoMKg wqAgcmluZy0+cHJveHlfaWQgPSBLM19SSU5HQUNDX1BST1hZX05PVF9VU0VEOwo+PiArwqDCoMKg IH0KPj4gKwo+PiArbm9faW5pdDoKPj4gK8KgwqDCoCBjbGVhcl9iaXQocmluZy0+cmluZ19pZCwg cmluZ2FjYy0+cmluZ3NfaW51c2UpOwo+PiArCj4+ICvCoMKgwqAgbW9kdWxlX3B1dChyaW5nYWNj LT5kZXYtPmRyaXZlci0+b3duZXIpOwo+PiArCj4+ICtvdXQ6Cj4+ICvCoMKgwqAgbXV0ZXhfdW5s b2NrKCZyaW5nYWNjLT5yZXFfbG9jayk7Cj4+ICvCoMKgwqAgcmV0dXJuIDA7Cj4+ICt9Cj4+ICtF WFBPUlRfU1lNQk9MX0dQTChrM19yaW5nYWNjX3JpbmdfZnJlZSk7Cj4+ICsKPj4gK3UzMiBrM19y aW5nYWNjX2dldF9yaW5nX2lkKHN0cnVjdCBrM19yaW5nICpyaW5nKQo+PiArewo+PiArwqDCoMKg IGlmICghcmluZykKPj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiAtRUlOVkFMOwo+PiArCj4+ICvC oMKgwqAgcmV0dXJuIHJpbmctPnJpbmdfaWQ7Cj4+ICt9Cj4+ICtFWFBPUlRfU1lNQk9MX0dQTChr M19yaW5nYWNjX2dldF9yaW5nX2lkKTsKPj4gKwo+PiArdTMyIGszX3JpbmdhY2NfZ2V0X3Rpc2Np X2Rldl9pZChzdHJ1Y3QgazNfcmluZyAqcmluZykKPj4gK3sKPj4gK8KgwqDCoCBpZiAoIXJpbmcp Cj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gLUVJTlZBTDsKPj4gKwo+IAo+IFdoYXQgaWYgcGFy ZW50IGlzIE5VTEw/IENhbiBpdCBldmVyIGJlIGhlcmU/Cj4gCj4+ICvCoMKgwqAgcmV0dXJuIHJp bmctPnBhcmVudC0+dGlzY2lfZGV2X2lkOwo+PiArfQo+PiArRVhQT1JUX1NZTUJPTF9HUEwoazNf cmluZ2FjY19nZXRfdGlzY2lfZGV2X2lkKTsKPj4gKwo+PiAraW50IGszX3JpbmdhY2NfZ2V0X3Jp bmdfaXJxX251bShzdHJ1Y3QgazNfcmluZyAqcmluZykKPj4gK3sKPj4gK8KgwqDCoCBpbnQgaXJx X251bTsKPj4gKwo+PiArwqDCoMKgIGlmICghcmluZykKPj4gK8KgwqDCoMKgwqDCoMKgIHJldHVy biAtRUlOVkFMOwo+PiArCj4+ICvCoMKgwqAgaXJxX251bSA9IHRpX3NjaV9pbnRhX21zaV9nZXRf dmlycShyaW5nLT5wYXJlbnQtPmRldiwKPj4gcmluZy0+cmluZ19pZCk7Cj4+ICvCoMKgwqAgaWYg KGlycV9udW0gPD0gMCkKPj4gK8KgwqDCoMKgwqDCoMKgIGlycV9udW0gPSAtRUlOVkFMOwo+PiAr wqDCoMKgIHJldHVybiBpcnFfbnVtOwo+PiArfQo+PiArRVhQT1JUX1NZTUJPTF9HUEwoazNfcmlu Z2FjY19nZXRfcmluZ19pcnFfbnVtKTsKPj4gKwo+PiArc3RhdGljIGludCBrM19yaW5nYWNjX3Jp bmdfY2ZnX3NjaShzdHJ1Y3QgazNfcmluZyAqcmluZykKPj4gK3sKPj4gK8KgwqDCoCBzdHJ1Y3Qg azNfcmluZ2FjYyAqcmluZ2FjYyA9IHJpbmctPnBhcmVudDsKPj4gK8KgwqDCoCB1MzIgcmluZ19p ZHg7Cj4+ICvCoMKgwqAgaW50IHJldDsKPj4gKwo+PiArwqDCoMKgIGlmICghcmluZ2FjYy0+dGlz Y2kpCj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gLUVJTlZBTDsKPj4gKwo+PiArwqDCoMKgIHJp bmdfaWR4ID0gcmluZy0+cmluZ19pZDsKPj4gK8KgwqDCoCByZXQgPSByaW5nYWNjLT50aXNjaV9y aW5nX29wcy0+Y29uZmlnKAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByaW5nYWNjLT50aXNj aSwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgVElfU0NJX01TR19WQUxVRV9STV9BTExfTk9f T1JERVIsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJpbmdhY2MtPnRpc2NpX2Rldl9pZCwK Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmluZ19pZHgsCj4+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIGxvd2VyXzMyX2JpdHMocmluZy0+cmluZ19tZW1fZG1hKSwKPj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqAgdXBwZXJfMzJfYml0cyhyaW5nLT5yaW5nX21lbV9kbWEpLAo+PiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCByaW5nLT5zaXplLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBy aW5nLT5tb2RlLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByaW5nLT5lbG1fc2l6ZSwKPj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgMCk7Cj4+ICvCoMKgwqAgaWYgKHJldCkKPj4gK8KgwqDC oMKgwqDCoMKgIGRldl9lcnIocmluZ2FjYy0+ZGV2LCAiVElTQ0kgY29uZmlnIHJpbmcgZmFpbCAo JWQpIHJpbmdfaWR4Cj4+ICVkXG4iLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXQsIHJp bmdfaWR4KTsKPj4gKwo+PiArwqDCoMKgIHJldHVybiByZXQ7Cj4+ICt9Cj4+ICsKPj4gK2ludCBr M19yaW5nYWNjX3JpbmdfY2ZnKHN0cnVjdCBrM19yaW5nICpyaW5nLCBzdHJ1Y3QgazNfcmluZ19j ZmcgKmNmZykKPj4gK3sKPj4gK8KgwqDCoCBzdHJ1Y3QgazNfcmluZ2FjYyAqcmluZ2FjYyA9IHJp bmctPnBhcmVudDsKPj4gK8KgwqDCoCBpbnQgcmV0ID0gMDsKPj4gKwo+PiArwqDCoMKgIGlmICgh cmluZyB8fCAhY2ZnKQo+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIC1FSU5WQUw7Cj4+ICvCoMKg wqAgaWYgKGNmZy0+ZWxtX3NpemUgPiBLM19SSU5HQUNDX1JJTkdfRUxTSVpFXzI1NiB8fAo+PiAr wqDCoMKgwqDCoMKgwqAgY2ZnLT5tb2RlID4gSzNfUklOR0FDQ19SSU5HX01PREVfUU0gfHwKPj4g K8KgwqDCoMKgwqDCoMKgIGNmZy0+c2l6ZSAmIH5LM19SSU5HQUNDX0NGR19SSU5HX1NJWkVfRUxD TlRfTUFTSyB8fAo+PiArwqDCoMKgwqDCoMKgwqAgIXRlc3RfYml0KHJpbmctPnJpbmdfaWQsIHJp bmdhY2MtPnJpbmdzX2ludXNlKSkKPj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiAtRUlOVkFMOwo+ PiArCj4+ICvCoMKgwqAgaWYgKHJpbmctPnVzZV9jb3VudCAhPSAxKQo+IAo+IEhtbSwgaXNuJ3Qg dGhpcyBhIGZhaWx1cmUgYWN0dWFsbHk/Cj4gCj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gMDsK Pj4gKwo+PiArwqDCoMKgIHJpbmctPnNpemUgPSBjZmctPnNpemU7Cj4+ICvCoMKgwqAgcmluZy0+ ZWxtX3NpemUgPSBjZmctPmVsbV9zaXplOwo+PiArwqDCoMKgIHJpbmctPm1vZGUgPSBjZmctPm1v ZGU7Cj4+ICvCoMKgwqAgcmluZy0+b2NjID0gMDsKPj4gK8KgwqDCoCByaW5nLT5mcmVlID0gMDsK Pj4gK8KgwqDCoCByaW5nLT5yaW5kZXggPSAwOwo+PiArwqDCoMKgIHJpbmctPndpbmRleCA9IDA7 Cj4+ICsKPj4gK8KgwqDCoCBpZiAocmluZy0+cHJveHlfaWQgIT0gSzNfUklOR0FDQ19QUk9YWV9O T1RfVVNFRCkKPj4gK8KgwqDCoMKgwqDCoMKgIHJpbmctPnByb3h5ID0gcmluZ2FjYy0+cHJveHlf dGFyZ2V0X2Jhc2UgKwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByaW5n LT5wcm94eV9pZCAqIEszX1JJTkdBQ0NfUFJPWFlfVEFSR0VUX1NURVA7Cj4+ICsKPj4gK8KgwqDC oCBzd2l0Y2ggKHJpbmctPm1vZGUpIHsKPj4gK8KgwqDCoCBjYXNlIEszX1JJTkdBQ0NfUklOR19N T0RFX1JJTkc6Cj4+ICvCoMKgwqDCoMKgwqDCoCByaW5nLT5vcHMgPSAmazNfcmluZ19tb2RlX3Jp bmdfb3BzOwo+PiArwqDCoMKgwqDCoMKgwqAgYnJlYWs7Cj4+ICvCoMKgwqAgY2FzZSBLM19SSU5H QUNDX1JJTkdfTU9ERV9RTToKPj4gK8KgwqDCoMKgwqDCoMKgIC8qCj4+ICvCoMKgwqDCoMKgwqDC oMKgICogSW4gUXVldWUgbW9kZSBlbG1fc2l6ZSBjYW4gYmUgOCBvbmx5IGFuZCBlYWNoIG9wZXJh dGlvbgo+PiArwqDCoMKgwqDCoMKgwqDCoCAqIHVzZXMgMiBlbGVtZW50IHNsb3RzCj4+ICvCoMKg wqDCoMKgwqDCoMKgICovCj4+ICvCoMKgwqDCoMKgwqDCoCBpZiAoY2ZnLT5lbG1fc2l6ZSAhPSBL M19SSU5HQUNDX1JJTkdfRUxTSVpFXzggfHwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgY2Zn LT5zaXplICUgMikKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZ290byBlcnJfZnJlZV9wcm94 eTsKPj4gK8KgwqDCoMKgwqDCoMKgIC8qIGVsc2UsIGZhbGwgdGhyb3VnaCAqLwo+PiArwqDCoMKg IGNhc2UgSzNfUklOR0FDQ19SSU5HX01PREVfTUVTU0FHRToKPj4gK8KgwqDCoMKgwqDCoMKgIGlm IChyaW5nLT5wcm94eSkKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmluZy0+b3BzID0gJmsz X3JpbmdfbW9kZV9wcm94eV9vcHM7Cj4+ICvCoMKgwqDCoMKgwqDCoCBlbHNlCj4+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIHJpbmctPm9wcyA9ICZrM19yaW5nX21vZGVfbXNnX29wczsKPj4gK8Kg wqDCoMKgwqDCoMKgIGJyZWFrOwo+PiArwqDCoMKgIGRlZmF1bHQ6Cj4+ICvCoMKgwqDCoMKgwqDC oCByaW5nLT5vcHMgPSBOVUxMOwo+PiArwqDCoMKgwqDCoMKgwqAgcmV0ID0gLUVJTlZBTDsKPj4g K8KgwqDCoMKgwqDCoMKgIGdvdG8gZXJyX2ZyZWVfcHJveHk7Cj4+ICvCoMKgwqAgfTsKPj4gKwo+ PiArwqDCoMKgIHJpbmctPnJpbmdfbWVtX3ZpcnQgPQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBkbWFfYWxsb2NfY29oZXJlbnQocmluZ2FjYy0+ZGV2LAo+PiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmluZy0+c2l6ZSAqICg0IDw8IHJpbmctPmVsbV9z aXplKSwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICZy aW5nLT5yaW5nX21lbV9kbWEsIEdGUF9LRVJORUwpOwo+PiArwqDCoMKgIGlmICghcmluZy0+cmlu Z19tZW1fdmlydCkgewo+PiArwqDCoMKgwqDCoMKgwqAgZGV2X2VycihyaW5nYWNjLT5kZXYsICJG YWlsZWQgdG8gYWxsb2MgcmluZyBtZW1cbiIpOwo+PiArwqDCoMKgwqDCoMKgwqAgcmV0ID0gLUVO T01FTTsKPj4gK8KgwqDCoMKgwqDCoMKgIGdvdG8gZXJyX2ZyZWVfb3BzOwo+PiArwqDCoMKgIH0K Pj4gKwo+PiArwqDCoMKgIHJldCA9IGszX3JpbmdhY2NfcmluZ19jZmdfc2NpKHJpbmcpOwo+PiAr Cj4+ICvCoMKgwqAgaWYgKHJldCkKPj4gK8KgwqDCoMKgwqDCoMKgIGdvdG8gZXJyX2ZyZWVfbWVt Owo+PiArCj4+ICvCoMKgwqAgcmluZy0+ZmxhZ3MgfD0gSzNfUklOR19GTEFHX0JVU1k7Cj4+ICvC oMKgwqAgcmluZy0+ZmxhZ3MgfD0gKGNmZy0+ZmxhZ3MgJiBLM19SSU5HQUNDX1JJTkdfU0hBUkVE KSA/Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEszX1JJTkdfRkxBR19TSEFSRUQgOiAwOwo+ PiArCj4+ICvCoMKgwqAgazNfcmluZ2FjY19yaW5nX2R1bXAocmluZyk7Cj4+ICsKPj4gK8KgwqDC oCByZXR1cm4gMDsKPj4gKwo+PiArZXJyX2ZyZWVfbWVtOgo+PiArwqDCoMKgIGRtYV9mcmVlX2Nv aGVyZW50KHJpbmdhY2MtPmRldiwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJpbmct PnNpemUgKiAoNCA8PCByaW5nLT5lbG1fc2l6ZSksCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCByaW5nLT5yaW5nX21lbV92aXJ0LAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg cmluZy0+cmluZ19tZW1fZG1hKTsKPj4gK2Vycl9mcmVlX29wczoKPj4gK8KgwqDCoCByaW5nLT5v cHMgPSBOVUxMOwo+PiArZXJyX2ZyZWVfcHJveHk6Cj4+ICvCoMKgwqAgcmluZy0+cHJveHkgPSBO VUxMOwo+PiArwqDCoMKgIHJldHVybiByZXQ7Cj4+ICt9Cj4+ICtFWFBPUlRfU1lNQk9MX0dQTChr M19yaW5nYWNjX3JpbmdfY2ZnKTsKPj4gKwo+PiArdTMyIGszX3JpbmdhY2NfcmluZ19nZXRfc2l6 ZShzdHJ1Y3QgazNfcmluZyAqcmluZykKPj4gK3sKPj4gK8KgwqDCoCBpZiAoIXJpbmcgfHwgIShy aW5nLT5mbGFncyAmIEszX1JJTkdfRkxBR19CVVNZKSkKPj4gK8KgwqDCoMKgwqDCoMKgIHJldHVy biAtRUlOVkFMOwo+PiArCj4+ICvCoMKgwqAgcmV0dXJuIHJpbmctPnNpemU7Cj4+ICt9Cj4+ICtF WFBPUlRfU1lNQk9MX0dQTChrM19yaW5nYWNjX3JpbmdfZ2V0X3NpemUpOwo+PiArCj4+ICt1MzIg azNfcmluZ2FjY19yaW5nX2dldF9mcmVlKHN0cnVjdCBrM19yaW5nICpyaW5nKQo+PiArewo+PiAr wqDCoMKgIGlmICghcmluZyB8fCAhKHJpbmctPmZsYWdzICYgSzNfUklOR19GTEFHX0JVU1kpKQo+ PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIC1FSU5WQUw7Cj4+ICsKPj4gK8KgwqDCoCBpZiAoIXJp bmctPmZyZWUpCj4+ICvCoMKgwqDCoMKgwqDCoCByaW5nLT5mcmVlID0gcmluZy0+c2l6ZSAtIGRi Z19yZWFkbCgmcmluZy0+cnQtPm9jYyk7Cj4+ICsKPj4gK8KgwqDCoCByZXR1cm4gcmluZy0+ZnJl ZTsKPj4gK30KPj4gK0VYUE9SVF9TWU1CT0xfR1BMKGszX3JpbmdhY2NfcmluZ19nZXRfZnJlZSk7 Cj4+ICsKPj4gK3UzMiBrM19yaW5nYWNjX3JpbmdfZ2V0X29jYyhzdHJ1Y3QgazNfcmluZyAqcmlu ZykKPj4gK3sKPj4gK8KgwqDCoCBpZiAoIXJpbmcgfHwgIShyaW5nLT5mbGFncyAmIEszX1JJTkdf RkxBR19CVVNZKSkKPj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiAtRUlOVkFMOwo+PiArCj4+ICvC oMKgwqAgcmV0dXJuIGRiZ19yZWFkbCgmcmluZy0+cnQtPm9jYyk7Cj4+ICt9Cj4+ICtFWFBPUlRf U1lNQk9MX0dQTChrM19yaW5nYWNjX3JpbmdfZ2V0X29jYyk7Cj4+ICsKPj4gK3UzMiBrM19yaW5n YWNjX3JpbmdfaXNfZnVsbChzdHJ1Y3QgazNfcmluZyAqcmluZykKPj4gK3sKPj4gK8KgwqDCoCBy ZXR1cm4gIWszX3JpbmdhY2NfcmluZ19nZXRfZnJlZShyaW5nKTsKPj4gK30KPj4gK0VYUE9SVF9T WU1CT0xfR1BMKGszX3JpbmdhY2NfcmluZ19pc19mdWxsKTsKPj4gKwo+PiArZW51bSBrM19yaW5n YWNjX2FjY2Vzc19tb2RlIHsKPj4gK8KgwqDCoCBLM19SSU5HQUNDX0FDQ0VTU19NT0RFX1BVU0hf SEVBRCwKPj4gK8KgwqDCoCBLM19SSU5HQUNDX0FDQ0VTU19NT0RFX1BPUF9IRUFELAo+PiArwqDC oMKgIEszX1JJTkdBQ0NfQUNDRVNTX01PREVfUFVTSF9UQUlMLAo+PiArwqDCoMKgIEszX1JJTkdB Q0NfQUNDRVNTX01PREVfUE9QX1RBSUwsCj4+ICvCoMKgwqAgSzNfUklOR0FDQ19BQ0NFU1NfTU9E RV9QRUVLX0hFQUQsCj4+ICvCoMKgwqAgSzNfUklOR0FDQ19BQ0NFU1NfTU9ERV9QRUVLX1RBSUws Cj4+ICt9Owo+PiArCj4+ICtzdGF0aWMgaW50IGszX3JpbmdhY2NfcmluZ19jZmdfcHJveHkoc3Ry dWN0IGszX3JpbmcgKnJpbmcsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIGVudW0gazNfcmluZ2FjY19wcm94eV9hY2Nlc3NfbW9kZSBtb2RlKQo+PiArewo+PiAr wqDCoMKgIHUzMiB2YWw7Cj4+ICsKPj4gK8KgwqDCoCB2YWwgPSByaW5nLT5yaW5nX2lkOwo+PiAr wqDCoMKgIHZhbCB8PSBtb2RlIDw8IDE2Owo+PiArwqDCoMKgIHZhbCB8PSByaW5nLT5lbG1fc2l6 ZSA8PCAyNDsKPiAKPiBXb3VsZCBiZSBuaWNlIHRvIGhhdmUgdGhlc2UgbWFnaWMgc2hpZnRzIGFz IGRlZmluZXMuCj4gCj4+ICvCoMKgwqAgZGJnX3dyaXRlbCh2YWwsICZyaW5nLT5wcm94eS0+Y29u dHJvbCk7Cj4+ICvCoMKgwqAgcmV0dXJuIDA7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbnQgazNf cmluZ2FjY19yaW5nX2FjY2Vzc19wcm94eShzdHJ1Y3QgazNfcmluZyAqcmluZywgdm9pZAo+PiAq ZWxlbSwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGVudW0gazNf cmluZ2FjY19hY2Nlc3NfbW9kZSBhY2Nlc3NfbW9kZSkKPj4gK3sKPj4gK8KgwqDCoCB2b2lkIF9f aW9tZW0gKnB0cjsKPj4gKwo+PiArwqDCoMKgIHB0ciA9ICh2b2lkIF9faW9tZW0gKikmcmluZy0+ cHJveHktPmRhdGE7Cj4+ICsKPj4gK8KgwqDCoCBzd2l0Y2ggKGFjY2Vzc19tb2RlKSB7Cj4+ICvC oMKgwqAgY2FzZSBLM19SSU5HQUNDX0FDQ0VTU19NT0RFX1BVU0hfSEVBRDoKPj4gK8KgwqDCoCBj YXNlIEszX1JJTkdBQ0NfQUNDRVNTX01PREVfUE9QX0hFQUQ6Cj4+ICvCoMKgwqDCoMKgwqDCoCBr M19yaW5nYWNjX3JpbmdfY2ZnX3Byb3h5KHJpbmcsIFBST1hZX0FDQ0VTU19NT0RFX0hFQUQpOwo+ PiArwqDCoMKgwqDCoMKgwqAgYnJlYWs7Cj4+ICvCoMKgwqAgY2FzZSBLM19SSU5HQUNDX0FDQ0VT U19NT0RFX1BVU0hfVEFJTDoKPj4gK8KgwqDCoCBjYXNlIEszX1JJTkdBQ0NfQUNDRVNTX01PREVf UE9QX1RBSUw6Cj4+ICvCoMKgwqDCoMKgwqDCoCBrM19yaW5nYWNjX3JpbmdfY2ZnX3Byb3h5KHJp bmcsIFBST1hZX0FDQ0VTU19NT0RFX1RBSUwpOwo+PiArwqDCoMKgwqDCoMKgwqAgYnJlYWs7Cj4+ ICvCoMKgwqAgZGVmYXVsdDoKPj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiAtRUlOVkFMOwo+PiAr wqDCoMKgIH0KPj4gKwo+PiArwqDCoMKgIHB0ciArPSBrM19yaW5nYWNjX3JpbmdfZ2V0X2ZpZm9f cG9zKHJpbmcpOwo+PiArCj4+ICvCoMKgwqAgc3dpdGNoIChhY2Nlc3NfbW9kZSkgewo+PiArwqDC oMKgIGNhc2UgSzNfUklOR0FDQ19BQ0NFU1NfTU9ERV9QT1BfSEVBRDoKPj4gK8KgwqDCoCBjYXNl IEszX1JJTkdBQ0NfQUNDRVNTX01PREVfUE9QX1RBSUw6Cj4+ICvCoMKgwqDCoMKgwqDCoCBrM19u YXZfZGJnKHJpbmctPnBhcmVudC0+ZGV2LCAicHJveHk6bWVtY3B5X2Zyb21pbyh4KTogLS0+Cj4+ IHB0ciglcCksIG1vZGU6JWRcbiIsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHB0 ciwgYWNjZXNzX21vZGUpOwo+PiArwqDCoMKgwqDCoMKgwqAgbWVtY3B5X2Zyb21pbyhlbGVtLCBw dHIsICg0IDw8IHJpbmctPmVsbV9zaXplKSk7Cj4+ICvCoMKgwqDCoMKgwqDCoCByaW5nLT5vY2Mt LTsKPj4gK8KgwqDCoMKgwqDCoMKgIGJyZWFrOwo+PiArwqDCoMKgIGNhc2UgSzNfUklOR0FDQ19B Q0NFU1NfTU9ERV9QVVNIX1RBSUw6Cj4+ICvCoMKgwqAgY2FzZSBLM19SSU5HQUNDX0FDQ0VTU19N T0RFX1BVU0hfSEVBRDoKPj4gK8KgwqDCoMKgwqDCoMKgIGszX25hdl9kYmcocmluZy0+cGFyZW50 LT5kZXYsICJwcm94eTptZW1jcHlfdG9pbyh4KTogLS0+Cj4+IHB0ciglcCksIG1vZGU6JWRcbiIs Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHB0ciwgYWNjZXNzX21vZGUpOwo+PiAr wqDCoMKgwqDCoMKgwqAgbWVtY3B5X3RvaW8ocHRyLCBlbGVtLCAoNCA8PCByaW5nLT5lbG1fc2l6 ZSkpOwo+PiArwqDCoMKgwqDCoMKgwqAgcmluZy0+ZnJlZS0tOwo+PiArwqDCoMKgwqDCoMKgwqAg YnJlYWs7Cj4+ICvCoMKgwqAgZGVmYXVsdDoKPj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiAtRUlO VkFMOwo+PiArwqDCoMKgIH0KPj4gKwo+PiArwqDCoMKgIGszX25hdl9kYmcocmluZy0+cGFyZW50 LT5kZXYsICJwcm94eTogZnJlZSVkIG9jYyVkXG4iLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqAg cmluZy0+ZnJlZSwgcmluZy0+b2NjKTsKPj4gK8KgwqDCoCByZXR1cm4gMDsKPj4gK30KPj4gKwo+ PiArc3RhdGljIGludCBrM19yaW5nYWNjX3JpbmdfcHVzaF9oZWFkX3Byb3h5KHN0cnVjdCBrM19y aW5nICpyaW5nLCB2b2lkCj4+ICplbGVtKQo+PiArewo+PiArwqDCoMKgIHJldHVybiBrM19yaW5n YWNjX3JpbmdfYWNjZXNzX3Byb3h5KHJpbmcsIGVsZW0sCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEszX1JJTkdBQ0NfQUNDRVNTX01PREVfUFVTSF9I RUFEKTsKPj4gK30KPj4gKwo+PiArc3RhdGljIGludCBrM19yaW5nYWNjX3JpbmdfcHVzaF90YWls X3Byb3h5KHN0cnVjdCBrM19yaW5nICpyaW5nLCB2b2lkCj4+ICplbGVtKQo+PiArewo+PiArwqDC oMKgIHJldHVybiBrM19yaW5nYWNjX3JpbmdfYWNjZXNzX3Byb3h5KHJpbmcsIGVsZW0sCj4+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEszX1JJTkdBQ0Nf QUNDRVNTX01PREVfUFVTSF9UQUlMKTsKPj4gK30KPj4gKwo+PiArc3RhdGljIGludCBrM19yaW5n YWNjX3JpbmdfcG9wX2hlYWRfcHJveHkoc3RydWN0IGszX3JpbmcgKnJpbmcsIHZvaWQKPj4gKmVs ZW0pCj4+ICt7Cj4+ICvCoMKgwqAgcmV0dXJuIGszX3JpbmdhY2NfcmluZ19hY2Nlc3NfcHJveHko cmluZywgZWxlbSwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgSzNfUklOR0FDQ19BQ0NFU1NfTU9ERV9QT1BfSEVBRCk7Cj4+ICt9Cj4+ICsKPj4gK3N0 YXRpYyBpbnQgazNfcmluZ2FjY19yaW5nX3BvcF90YWlsX3Byb3h5KHN0cnVjdCBrM19yaW5nICpy aW5nLCB2b2lkCj4+ICplbGVtKQo+PiArewo+PiArwqDCoMKgIHJldHVybiBrM19yaW5nYWNjX3Jp bmdfYWNjZXNzX3Byb3h5KHJpbmcsIGVsZW0sCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIEszX1JJTkdBQ0NfQUNDRVNTX01PREVfUE9QX0hFQUQpOwo+ PiArfQo+PiArCj4+ICtzdGF0aWMgaW50IGszX3JpbmdhY2NfcmluZ19hY2Nlc3NfaW8oc3RydWN0 IGszX3JpbmcgKnJpbmcsIHZvaWQgKmVsZW0sCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIGVudW0gazNfcmluZ2FjY19hY2Nlc3NfbW9kZSBhY2Nlc3NfbW9kZSkK Pj4gK3sKPj4gK8KgwqDCoCB2b2lkIF9faW9tZW0gKnB0cjsKPj4gKwo+PiArwqDCoMKgIHN3aXRj aCAoYWNjZXNzX21vZGUpIHsKPj4gK8KgwqDCoCBjYXNlIEszX1JJTkdBQ0NfQUNDRVNTX01PREVf UFVTSF9IRUFEOgo+PiArwqDCoMKgIGNhc2UgSzNfUklOR0FDQ19BQ0NFU1NfTU9ERV9QT1BfSEVB RDoKPj4gK8KgwqDCoMKgwqDCoMKgIHB0ciA9ICh2b2lkIF9faW9tZW0gKikmcmluZy0+Zmlmb3Mt PmhlYWRfZGF0YTsKPj4gK8KgwqDCoMKgwqDCoMKgIGJyZWFrOwo+PiArwqDCoMKgIGNhc2UgSzNf UklOR0FDQ19BQ0NFU1NfTU9ERV9QVVNIX1RBSUw6Cj4+ICvCoMKgwqAgY2FzZSBLM19SSU5HQUND X0FDQ0VTU19NT0RFX1BPUF9UQUlMOgo+PiArwqDCoMKgwqDCoMKgwqAgcHRyID0gKHZvaWQgX19p b21lbSAqKSZyaW5nLT5maWZvcy0+dGFpbF9kYXRhOwo+PiArwqDCoMKgwqDCoMKgwqAgYnJlYWs7 Cj4+ICvCoMKgwqAgZGVmYXVsdDoKPj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiAtRUlOVkFMOwo+ PiArwqDCoMKgIH0KPj4gKwo+PiArwqDCoMKgIHB0ciArPSBrM19yaW5nYWNjX3JpbmdfZ2V0X2Zp Zm9fcG9zKHJpbmcpOwo+PiArCj4+ICvCoMKgwqAgc3dpdGNoIChhY2Nlc3NfbW9kZSkgewo+PiAr wqDCoMKgIGNhc2UgSzNfUklOR0FDQ19BQ0NFU1NfTU9ERV9QT1BfSEVBRDoKPj4gK8KgwqDCoCBj YXNlIEszX1JJTkdBQ0NfQUNDRVNTX01PREVfUE9QX1RBSUw6Cj4+ICvCoMKgwqDCoMKgwqDCoCBr M19uYXZfZGJnKHJpbmctPnBhcmVudC0+ZGV2LCAibWVtY3B5X2Zyb21pbyh4KTogLS0+IHB0cigl cCksCj4+IG1vZGU6JWRcbiIsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHB0ciwg YWNjZXNzX21vZGUpOwo+PiArwqDCoMKgwqDCoMKgwqAgbWVtY3B5X2Zyb21pbyhlbGVtLCBwdHIs ICg0IDw8IHJpbmctPmVsbV9zaXplKSk7Cj4+ICvCoMKgwqDCoMKgwqDCoCByaW5nLT5vY2MtLTsK Pj4gK8KgwqDCoMKgwqDCoMKgIGJyZWFrOwo+PiArwqDCoMKgIGNhc2UgSzNfUklOR0FDQ19BQ0NF U1NfTU9ERV9QVVNIX1RBSUw6Cj4+ICvCoMKgwqAgY2FzZSBLM19SSU5HQUNDX0FDQ0VTU19NT0RF X1BVU0hfSEVBRDoKPj4gK8KgwqDCoMKgwqDCoMKgIGszX25hdl9kYmcocmluZy0+cGFyZW50LT5k ZXYsICJtZW1jcHlfdG9pbyh4KTogLS0+IHB0ciglcCksCj4+IG1vZGU6JWRcbiIsCj4+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHB0ciwgYWNjZXNzX21vZGUpOwo+PiArwqDCoMKgwqDC oMKgwqAgbWVtY3B5X3RvaW8ocHRyLCBlbGVtLCAoNCA8PCByaW5nLT5lbG1fc2l6ZSkpOwo+PiAr wqDCoMKgwqDCoMKgwqAgcmluZy0+ZnJlZS0tOwo+PiArwqDCoMKgwqDCoMKgwqAgYnJlYWs7Cj4+ ICvCoMKgwqAgZGVmYXVsdDoKPj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiAtRUlOVkFMOwo+PiAr wqDCoMKgIH0KPj4gKwo+PiArwqDCoMKgIGszX25hdl9kYmcocmluZy0+cGFyZW50LT5kZXYsICJm cmVlJWQgaW5kZXglZCBvY2MlZCBpbmRleCVkXG4iLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqAg cmluZy0+ZnJlZSwgcmluZy0+d2luZGV4LCByaW5nLT5vY2MsIHJpbmctPnJpbmRleCk7Cj4+ICvC oMKgwqAgcmV0dXJuIDA7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbnQgazNfcmluZ2FjY19yaW5n X3B1c2hfaGVhZF9pbyhzdHJ1Y3QgazNfcmluZyAqcmluZywgdm9pZAo+PiAqZWxlbSkKPj4gK3sK Pj4gK8KgwqDCoCByZXR1cm4gazNfcmluZ2FjY19yaW5nX2FjY2Vzc19pbyhyaW5nLCBlbGVtLAo+ PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBLM19SSU5HQUNDX0FD Q0VTU19NT0RFX1BVU0hfSEVBRCk7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbnQgazNfcmluZ2Fj Y19yaW5nX3B1c2hfaW8oc3RydWN0IGszX3JpbmcgKnJpbmcsIHZvaWQgKmVsZW0pCj4+ICt7Cj4+ ICvCoMKgwqAgcmV0dXJuIGszX3JpbmdhY2NfcmluZ19hY2Nlc3NfaW8ocmluZywgZWxlbSwKPj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgSzNfUklOR0FDQ19BQ0NF U1NfTU9ERV9QVVNIX1RBSUwpOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW50IGszX3JpbmdhY2Nf cmluZ19wb3BfaW8oc3RydWN0IGszX3JpbmcgKnJpbmcsIHZvaWQgKmVsZW0pCj4+ICt7Cj4+ICvC oMKgwqAgcmV0dXJuIGszX3JpbmdhY2NfcmluZ19hY2Nlc3NfaW8ocmluZywgZWxlbSwKPj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgSzNfUklOR0FDQ19BQ0NFU1Nf TU9ERV9QT1BfSEVBRCk7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbnQgazNfcmluZ2FjY19yaW5n X3BvcF90YWlsX2lvKHN0cnVjdCBrM19yaW5nICpyaW5nLCB2b2lkICplbGVtKQo+PiArewo+PiAr wqDCoMKgIHJldHVybiBrM19yaW5nYWNjX3JpbmdfYWNjZXNzX2lvKHJpbmcsIGVsZW0sCj4+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEszX1JJTkdBQ0NfQUNDRVNT X01PREVfUE9QX0hFQUQpOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW50IGszX3JpbmdhY2Nfcmlu Z19wdXNoX21lbShzdHJ1Y3QgazNfcmluZyAqcmluZywgdm9pZCAqZWxlbSkKPj4gK3sKPj4gK8Kg wqDCoCB2b2lkICplbGVtX3B0cjsKPj4gKwo+PiArwqDCoMKgIGVsZW1fcHRyID0gazNfcmluZ2Fj Y19nZXRfZWxtX2FkZHIocmluZywgcmluZy0+d2luZGV4KTsKPj4gKwo+PiArwqDCoMKgIG1lbWNw eShlbGVtX3B0ciwgZWxlbSwgKDQgPDwgcmluZy0+ZWxtX3NpemUpKTsKPj4gKwo+PiArwqDCoMKg IHJpbmctPndpbmRleCA9IChyaW5nLT53aW5kZXggKyAxKSAlIHJpbmctPnNpemU7Cj4+ICvCoMKg wqAgcmluZy0+ZnJlZS0tOwo+PiArwqDCoMKgIGRiZ193cml0ZWwoMSwgJnJpbmctPnJ0LT5kYik7 Cj4+ICsKPj4gK8KgwqDCoCBrM19uYXZfZGJnKHJpbmctPnBhcmVudC0+ZGV2LCAicmluZ19wdXNo X21lbTogZnJlZSVkIGluZGV4JWRcbiIsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoCByaW5nLT5m cmVlLCByaW5nLT53aW5kZXgpOwo+PiArCj4+ICvCoMKgwqAgcmV0dXJuIDA7Cj4+ICt9Cj4+ICsK Pj4gK3N0YXRpYyBpbnQgazNfcmluZ2FjY19yaW5nX3BvcF9tZW0oc3RydWN0IGszX3JpbmcgKnJp bmcsIHZvaWQgKmVsZW0pCj4+ICt7Cj4+ICvCoMKgwqAgdm9pZCAqZWxlbV9wdHI7Cj4+ICsKPj4g K8KgwqDCoCBlbGVtX3B0ciA9IGszX3JpbmdhY2NfZ2V0X2VsbV9hZGRyKHJpbmcsIHJpbmctPnJp bmRleCk7Cj4+ICsKPj4gK8KgwqDCoCBtZW1jcHkoZWxlbSwgZWxlbV9wdHIsICg0IDw8IHJpbmct PmVsbV9zaXplKSk7Cj4+ICsKPj4gK8KgwqDCoCByaW5nLT5yaW5kZXggPSAocmluZy0+cmluZGV4 ICsgMSkgJSByaW5nLT5zaXplOwo+PiArwqDCoMKgIHJpbmctPm9jYy0tOwo+PiArwqDCoMKgIGRi Z193cml0ZWwoLTEsICZyaW5nLT5ydC0+ZGIpOwo+PiArCj4+ICvCoMKgwqAgazNfbmF2X2RiZyhy aW5nLT5wYXJlbnQtPmRldiwgInJpbmdfcG9wX21lbTogb2NjJWQgaW5kZXglZAo+PiBwb3NfcHRy JXBcbiIsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoCByaW5nLT5vY2MsIHJpbmctPnJpbmRleCwg ZWxlbV9wdHIpOwo+PiArwqDCoMKgIHJldHVybiAwOwo+PiArfQo+PiArCj4+ICtpbnQgazNfcmlu Z2FjY19yaW5nX3B1c2goc3RydWN0IGszX3JpbmcgKnJpbmcsIHZvaWQgKmVsZW0pCj4+ICt7Cj4+ ICvCoMKgwqAgaW50IHJldCA9IC1FT1BOT1RTVVBQOwo+PiArCj4+ICvCoMKgwqAgaWYgKCFyaW5n IHx8ICEocmluZy0+ZmxhZ3MgJiBLM19SSU5HX0ZMQUdfQlVTWSkpCj4+ICvCoMKgwqDCoMKgwqDC oCByZXR1cm4gLUVJTlZBTDsKPj4gKwo+PiArwqDCoMKgIGszX25hdl9kYmcocmluZy0+cGFyZW50 LT5kZXYsICJyaW5nX3B1c2g6IGZyZWUlZCBpbmRleCVkXG4iLAo+PiArwqDCoMKgwqDCoMKgwqDC oMKgwqAgcmluZy0+ZnJlZSwgcmluZy0+d2luZGV4KTsKPj4gKwo+PiArwqDCoMKgIGlmIChrM19y aW5nYWNjX3JpbmdfaXNfZnVsbChyaW5nKSkKPj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiAtRU5P TUVNOwo+PiArCj4+ICvCoMKgwqAgaWYgKHJpbmctPm9wcyAmJiByaW5nLT5vcHMtPnB1c2hfdGFp bCkKPj4gK8KgwqDCoMKgwqDCoMKgIHJldCA9IHJpbmctPm9wcy0+cHVzaF90YWlsKHJpbmcsIGVs ZW0pOwo+PiArCj4+ICvCoMKgwqAgcmV0dXJuIHJldDsKPj4gK30KPj4gK0VYUE9SVF9TWU1CT0xf R1BMKGszX3JpbmdhY2NfcmluZ19wdXNoKTsKPj4gKwo+PiAraW50IGszX3JpbmdhY2NfcmluZ19w dXNoX2hlYWQoc3RydWN0IGszX3JpbmcgKnJpbmcsIHZvaWQgKmVsZW0pCj4+ICt7Cj4+ICvCoMKg wqAgaW50IHJldCA9IC1FT1BOT1RTVVBQOwo+PiArCj4+ICvCoMKgwqAgaWYgKCFyaW5nIHx8ICEo cmluZy0+ZmxhZ3MgJiBLM19SSU5HX0ZMQUdfQlVTWSkpCj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1 cm4gLUVJTlZBTDsKPj4gKwo+PiArwqDCoMKgIGszX25hdl9kYmcocmluZy0+cGFyZW50LT5kZXYs ICJyaW5nX3B1c2hfaGVhZDogZnJlZSVkIGluZGV4JWRcbiIsCj4+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoCByaW5nLT5mcmVlLCByaW5nLT53aW5kZXgpOwo+PiArCj4+ICvCoMKgwqAgaWYgKGszX3Jp bmdhY2NfcmluZ19pc19mdWxsKHJpbmcpKQo+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIC1FTk9N RU07Cj4+ICsKPj4gK8KgwqDCoCBpZiAocmluZy0+b3BzICYmIHJpbmctPm9wcy0+cHVzaF9oZWFk KQo+PiArwqDCoMKgwqDCoMKgwqAgcmV0ID0gcmluZy0+b3BzLT5wdXNoX2hlYWQocmluZywgZWxl bSk7Cj4+ICsKPj4gK8KgwqDCoCByZXR1cm4gcmV0Owo+PiArfQo+PiArRVhQT1JUX1NZTUJPTF9H UEwoazNfcmluZ2FjY19yaW5nX3B1c2hfaGVhZCk7Cj4+ICsKPj4gK2ludCBrM19yaW5nYWNjX3Jp bmdfcG9wKHN0cnVjdCBrM19yaW5nICpyaW5nLCB2b2lkICplbGVtKQo+PiArewo+PiArwqDCoMKg IGludCByZXQgPSAtRU9QTk9UU1VQUDsKPj4gKwo+PiArwqDCoMKgIGlmICghcmluZyB8fCAhKHJp bmctPmZsYWdzICYgSzNfUklOR19GTEFHX0JVU1kpKQo+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJu IC1FSU5WQUw7Cj4+ICsKPj4gK8KgwqDCoCBpZiAoIXJpbmctPm9jYykKPj4gK8KgwqDCoMKgwqDC oMKgIHJpbmctPm9jYyA9IGszX3JpbmdhY2NfcmluZ19nZXRfb2NjKHJpbmcpOwo+PiArCj4+ICvC oMKgwqAgazNfbmF2X2RiZyhyaW5nLT5wYXJlbnQtPmRldiwgInJpbmdfcG9wOiBvY2MlZCBpbmRl eCVkXG4iLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmluZy0+b2NjLCByaW5nLT5yaW5kZXgp Owo+PiArCj4+ICvCoMKgwqAgaWYgKCFyaW5nLT5vY2MpCj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1 cm4gLUVOT0RBVEE7Cj4+ICsKPj4gK8KgwqDCoCBpZiAocmluZy0+b3BzICYmIHJpbmctPm9wcy0+ cG9wX2hlYWQpCj4+ICvCoMKgwqDCoMKgwqDCoCByZXQgPSByaW5nLT5vcHMtPnBvcF9oZWFkKHJp bmcsIGVsZW0pOwo+PiArCj4+ICvCoMKgwqAgcmV0dXJuIHJldDsKPj4gK30KPj4gK0VYUE9SVF9T WU1CT0xfR1BMKGszX3JpbmdhY2NfcmluZ19wb3ApOwo+PiArCj4+ICtpbnQgazNfcmluZ2FjY19y aW5nX3BvcF90YWlsKHN0cnVjdCBrM19yaW5nICpyaW5nLCB2b2lkICplbGVtKQo+PiArewo+PiAr wqDCoMKgIGludCByZXQgPSAtRU9QTk9UU1VQUDsKPj4gKwo+PiArwqDCoMKgIGlmICghcmluZyB8 fCAhKHJpbmctPmZsYWdzICYgSzNfUklOR19GTEFHX0JVU1kpKQo+PiArwqDCoMKgwqDCoMKgwqAg cmV0dXJuIC1FSU5WQUw7Cj4+ICsKPj4gK8KgwqDCoCBpZiAoIXJpbmctPm9jYykKPj4gK8KgwqDC oMKgwqDCoMKgIHJpbmctPm9jYyA9IGszX3JpbmdhY2NfcmluZ19nZXRfb2NjKHJpbmcpOwo+PiAr Cj4+ICvCoMKgwqAgazNfbmF2X2RiZyhyaW5nLT5wYXJlbnQtPmRldiwgInJpbmdfcG9wX3RhaWw6 IG9jYyVkIGluZGV4JWRcbiIsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoCByaW5nLT5vY2MsIHJp bmctPnJpbmRleCk7Cj4+ICsKPj4gK8KgwqDCoCBpZiAoIXJpbmctPm9jYykKPj4gK8KgwqDCoMKg wqDCoMKgIHJldHVybiAtRU5PREFUQTsKPj4gKwo+PiArwqDCoMKgIGlmIChyaW5nLT5vcHMgJiYg cmluZy0+b3BzLT5wb3BfdGFpbCkKPj4gK8KgwqDCoMKgwqDCoMKgIHJldCA9IHJpbmctPm9wcy0+ cG9wX3RhaWwocmluZywgZWxlbSk7Cj4+ICsKPj4gK8KgwqDCoCByZXR1cm4gcmV0Owo+PiArfQo+ PiArRVhQT1JUX1NZTUJPTF9HUEwoazNfcmluZ2FjY19yaW5nX3BvcF90YWlsKTsKPj4gKwo+PiAr c3RydWN0IGszX3JpbmdhY2MgKm9mX2szX3JpbmdhY2NfZ2V0X2J5X3BoYW5kbGUoc3RydWN0IGRl dmljZV9ub2RlICpucCwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgY29uc3QgY2hhciAqcHJvcGVydHkpCj4+ICt7Cj4+ICvCoMKgwqAgc3RydWN0IGRl dmljZV9ub2RlICpyaW5nYWNjX25wOwo+PiArwqDCoMKgIHN0cnVjdCBrM19yaW5nYWNjICpyaW5n YWNjID0gRVJSX1BUUigtRVBST0JFX0RFRkVSKTsKPj4gK8KgwqDCoCBzdHJ1Y3QgazNfcmluZ2Fj YyAqZW50cnk7Cj4+ICsKPj4gK8KgwqDCoCByaW5nYWNjX25wID0gb2ZfcGFyc2VfcGhhbmRsZShu cCwgcHJvcGVydHksIDApOwo+PiArwqDCoMKgIGlmICghcmluZ2FjY19ucCkKPj4gK8KgwqDCoMKg wqDCoMKgIHJldHVybiBFUlJfUFRSKC1FTk9ERVYpOwo+PiArCj4+ICvCoMKgwqAgbXV0ZXhfbG9j aygmazNfcmluZ2FjY19saXN0X2xvY2spOwo+PiArwqDCoMKgIGxpc3RfZm9yX2VhY2hfZW50cnko ZW50cnksICZrM19yaW5nYWNjX2xpc3QsIGxpc3QpCj4+ICvCoMKgwqDCoMKgwqDCoCBpZiAoZW50 cnktPmRldi0+b2Zfbm9kZSA9PSByaW5nYWNjX25wKSB7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIHJpbmdhY2MgPSBlbnRyeTsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYnJlYWs7Cj4+ ICvCoMKgwqDCoMKgwqDCoCB9Cj4+ICvCoMKgwqAgbXV0ZXhfdW5sb2NrKCZrM19yaW5nYWNjX2xp c3RfbG9jayk7Cj4+ICvCoMKgwqAgb2Zfbm9kZV9wdXQocmluZ2FjY19ucCk7Cj4+ICsKPj4gK8Kg wqDCoCByZXR1cm4gcmluZ2FjYzsKPj4gK30KPj4gK0VYUE9SVF9TWU1CT0xfR1BMKG9mX2szX3Jp bmdhY2NfZ2V0X2J5X3BoYW5kbGUpOwo+PiArCj4+ICtzdGF0aWMgaW50IGszX3JpbmdhY2NfcHJv YmVfZHQoc3RydWN0IGszX3JpbmdhY2MgKnJpbmdhY2MpCj4+ICt7Cj4+ICvCoMKgwqAgc3RydWN0 IGRldmljZV9ub2RlICpub2RlID0gcmluZ2FjYy0+ZGV2LT5vZl9ub2RlOwo+PiArwqDCoMKgIHN0 cnVjdCBkZXZpY2UgKmRldiA9IHJpbmdhY2MtPmRldjsKPj4gK8KgwqDCoCBzdHJ1Y3QgcGxhdGZv cm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7Cj4+ICvCoMKgwqAgaW50 IHJldDsKPj4gKwo+PiArwqDCoMKgIGlmICghbm9kZSkgewo+PiArwqDCoMKgwqDCoMKgwqAgZGV2 X2VycihkZXYsICJkZXZpY2UgdHJlZSBpbmZvIHVuYXZhaWxhYmxlXG4iKTsKPj4gK8KgwqDCoMKg wqDCoMKgIHJldHVybiAtRU5PREVWOwo+PiArwqDCoMKgIH0KPj4gKwo+PiArwqDCoMKgIHJldCA9 IG9mX3Byb3BlcnR5X3JlYWRfdTMyKG5vZGUsICJ0aSxudW0tcmluZ3MiLAo+PiAmcmluZ2FjYy0+ bnVtX3JpbmdzKTsKPj4gK8KgwqDCoCBpZiAocmV0KSB7Cj4+ICvCoMKgwqDCoMKgwqDCoCBkZXZf ZXJyKGRldiwgInRpLG51bS1yaW5ncyByZWFkIGZhaWx1cmUgJWRcbiIsIHJldCk7Cj4+ICvCoMKg wqDCoMKgwqDCoCByZXR1cm4gcmV0Owo+PiArwqDCoMKgIH0KPj4gKwo+PiArwqDCoMKgIHJpbmdh Y2MtPmRtYV9yaW5nX3Jlc2V0X3F1aXJrID0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgb2Zf cHJvcGVydHlfcmVhZF9ib29sKG5vZGUsICJ0aSxkbWEtcmluZy1yZXNldC1xdWlyayIpOwo+PiAr Cj4+ICvCoMKgwqAgcmluZ2FjYy0+dGlzY2kgPSB0aV9zY2lfZ2V0X2J5X3BoYW5kbGUobm9kZSwg InRpLHNjaSIpOwo+PiArwqDCoMKgIGlmIChJU19FUlIocmluZ2FjYy0+dGlzY2kpKSB7Cj4+ICvC oMKgwqDCoMKgwqDCoCByZXQgPSBQVFJfRVJSKHJpbmdhY2MtPnRpc2NpKTsKPj4gK8KgwqDCoMKg wqDCoMKgIGlmIChyZXQgIT0gLUVQUk9CRV9ERUZFUikKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqAgZGV2X2VycihkZXYsICJ0aSxzY2kgcmVhZCBmYWlsICVkXG4iLCByZXQpOwo+PiArwqDCoMKg wqDCoMKgwqAgcmluZ2FjYy0+dGlzY2kgPSBOVUxMOwo+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJu IHJldDsKPj4gK8KgwqDCoCB9Cj4+ICsKPj4gK8KgwqDCoCByZXQgPSBvZl9wcm9wZXJ0eV9yZWFk X3UzMihub2RlLCAidGksc2NpLWRldi1pZCIsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgJnJpbmdhY2MtPnRpc2NpX2Rldl9pZCk7Cj4+ICvCoMKgwqAgaWYgKHJldCkg ewo+PiArwqDCoMKgwqDCoMKgwqAgZGV2X2VycihkZXYsICJ0aSxzY2ktZGV2LWlkIHJlYWQgZmFp bCAlZFxuIiwgcmV0KTsKPj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiByZXQ7Cj4+ICvCoMKgwqAg fQo+PiArCj4+ICvCoMKgwqAgcGRldi0+aWQgPSByaW5nYWNjLT50aXNjaV9kZXZfaWQ7Cj4+ICsK Pj4gK8KgwqDCoCByaW5nYWNjLT5ybV9ncF9yYW5nZSA9Cj4+IGRldm1fdGlfc2NpX2dldF9vZl9y ZXNvdXJjZShyaW5nYWNjLT50aXNjaSwgZGV2LAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByaW5nYWNjLT50aXNjaV9kZXZfaWQsCj4+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICJ0aSxzY2ktcm0tcmFuZ2Ut Z3AtcmluZ3MiKTsKPj4gK8KgwqDCoCBpZiAoSVNfRVJSKHJpbmdhY2MtPnJtX2dwX3JhbmdlKSkg ewo+PiArwqDCoMKgwqDCoMKgwqAgZGV2X2VycihkZXYsICJGYWlsZWQgdG8gYWxsb2NhdGUgTVNJ IGludGVycnVwdHNcbiIpOwo+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIFBUUl9FUlIocmluZ2Fj Yy0+cm1fZ3BfcmFuZ2UpOwo+PiArwqDCoMKgIH0KPj4gKwo+PiArwqDCoMKgIHJldHVybiB0aV9z Y2lfaW50YV9tc2lfZG9tYWluX2FsbG9jX2lycXMocmluZ2FjYy0+ZGV2LAo+PiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJpbmdhY2MtPnJtX2dwX3Jh bmdlKTsKPj4gK30KPj4gKwo+PiArc3RhdGljIGludCBrM19yaW5nYWNjX3Byb2JlKHN0cnVjdCBw bGF0Zm9ybV9kZXZpY2UgKnBkZXYpCj4+ICt7Cj4+ICvCoMKgwqAgc3RydWN0IGszX3JpbmdhY2Mg KnJpbmdhY2M7Cj4+ICvCoMKgwqAgdm9pZCBfX2lvbWVtICpiYXNlX2ZpZm8sICpiYXNlX3J0Owo+ PiArwqDCoMKgIHN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7Cj4+ICvCoMKgwqAgc3Ry dWN0IHJlc291cmNlICpyZXM7Cj4+ICvCoMKgwqAgaW50IHJldCwgaTsKPj4gKwo+PiArwqDCoMKg IHJpbmdhY2MgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKnJpbmdhY2MpLCBHRlBfS0VSTkVM KTsKPj4gK8KgwqDCoCBpZiAoIXJpbmdhY2MpCj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gLUVO T01FTTsKPj4gKwo+PiArwqDCoMKgIHJpbmdhY2MtPmRldiA9IGRldjsKPj4gK8KgwqDCoCBtdXRl eF9pbml0KCZyaW5nYWNjLT5yZXFfbG9jayk7Cj4+ICsKPj4gK8KgwqDCoCBkZXYtPm1zaV9kb21h aW4gPSBvZl9tc2lfZ2V0X2RvbWFpbihkZXYsIGRldi0+b2Zfbm9kZSwKPj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgRE9NQUlOX0JVU19USV9TQ0lfSU5U QV9NU0kpOwo+PiArwqDCoMKgIGlmICghZGV2LT5tc2lfZG9tYWluKSB7Cj4+ICvCoMKgwqDCoMKg wqDCoCBkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBnZXQgTVNJIGRvbWFpblxuIik7Cj4+ICvCoMKg wqDCoMKgwqDCoCByZXR1cm4gLUVQUk9CRV9ERUZFUjsKPj4gK8KgwqDCoCB9Cj4+ICsKPj4gK8Kg wqDCoCByZXQgPSBrM19yaW5nYWNjX3Byb2JlX2R0KHJpbmdhY2MpOwo+PiArwqDCoMKgIGlmIChy ZXQpCj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gcmV0Owo+PiArCj4+ICvCoMKgwqAgcmVzID0g cGxhdGZvcm1fZ2V0X3Jlc291cmNlX2J5bmFtZShwZGV2LCBJT1JFU09VUkNFX01FTSwgInJ0Iik7 Cj4+ICvCoMKgwqAgYmFzZV9ydCA9IGRldm1faW9yZW1hcF9yZXNvdXJjZShkZXYsIHJlcyk7Cj4+ ICvCoMKgwqAgaWYgKElTX0VSUihiYXNlX3J0KSkKPj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiBQ VFJfRVJSKGJhc2VfcnQpOwo+PiArCj4+ICvCoMKgwqAgcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291 cmNlX2J5bmFtZShwZGV2LCBJT1JFU09VUkNFX01FTSwgImZpZm9zIik7Cj4+ICvCoMKgwqAgYmFz ZV9maWZvID0gZGV2bV9pb3JlbWFwX3Jlc291cmNlKGRldiwgcmVzKTsKPj4gK8KgwqDCoCBpZiAo SVNfRVJSKGJhc2VfZmlmbykpCj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gUFRSX0VSUihiYXNl X2ZpZm8pOwo+PiArCj4+ICvCoMKgwqAgcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlX2J5bmFt ZShwZGV2LCBJT1JFU09VUkNFX01FTSwKPj4gInByb3h5X2djZmciKTsKPj4gK8KgwqDCoCByaW5n YWNjLT5wcm94eV9nY2ZnID0gZGV2bV9pb3JlbWFwX3Jlc291cmNlKGRldiwgcmVzKTsKPj4gK8Kg wqDCoCBpZiAoSVNfRVJSKHJpbmdhY2MtPnByb3h5X2djZmcpKQo+PiArwqDCoMKgwqDCoMKgwqAg cmV0dXJuIFBUUl9FUlIocmluZ2FjYy0+cHJveHlfZ2NmZyk7Cj4+ICsKPj4gK8KgwqDCoCByZXMg PSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2VfYnluYW1lKHBkZXYsIElPUkVTT1VSQ0VfTUVNLAo+PiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgInByb3h5X3Rhcmdl dCIpOwo+PiArwqDCoMKgIHJpbmdhY2MtPnByb3h5X3RhcmdldF9iYXNlID0gZGV2bV9pb3JlbWFw X3Jlc291cmNlKGRldiwgcmVzKTsKPj4gK8KgwqDCoCBpZiAoSVNfRVJSKHJpbmdhY2MtPnByb3h5 X3RhcmdldF9iYXNlKSkKPj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiBQVFJfRVJSKHJpbmdhY2Mt PnByb3h5X3RhcmdldF9iYXNlKTsKPj4gKwo+PiArwqDCoMKgIHJpbmdhY2MtPm51bV9wcm94aWVz ID0gZGJnX3JlYWRsKCZyaW5nYWNjLT5wcm94eV9nY2ZnLT5jb25maWcpICYKPj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgSzNfUklOR0FDQ19QUk9YWV9DRkdfVEhS RUFEU19NQVNLOwo+PiArCj4+ICvCoMKgwqAgcmluZ2FjYy0+cmluZ3MgPSBkZXZtX2t6YWxsb2Mo ZGV2LAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHNpemVv ZigqcmluZ2FjYy0+cmluZ3MpICoKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCByaW5nYWNjLT5udW1fcmluZ3MsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgR0ZQX0tFUk5FTCk7Cj4+ICvCoMKgwqAgcmluZ2FjYy0+cmlu Z3NfaW51c2UgPSBkZXZtX2tjYWxsb2MoZGV2LAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBCSVRTX1RPX0xPTkdTKHJpbmdhY2MtPm51bV9yaW5ncyks Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHNpemVv Zih1bnNpZ25lZCBsb25nKSwgR0ZQX0tFUk5FTCk7Cj4+ICvCoMKgwqAgcmluZ2FjYy0+cHJveHlf aW51c2UgPSBkZXZtX2tjYWxsb2MoZGV2LAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBCSVRTX1RPX0xPTkdTKHJpbmdhY2MtPm51bV9wcm94aWVzKSwK Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc2l6ZW9m KHVuc2lnbmVkIGxvbmcpLCBHRlBfS0VSTkVMKTsKPj4gKwo+PiArwqDCoMKgIGlmICghcmluZ2Fj Yy0+cmluZ3MgfHwgIXJpbmdhY2MtPnJpbmdzX2ludXNlIHx8Cj4+ICFyaW5nYWNjLT5wcm94eV9p bnVzZSkKPj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiAtRU5PTUVNOwo+PiArCj4+ICvCoMKgwqAg Zm9yIChpID0gMDsgaSA8IHJpbmdhY2MtPm51bV9yaW5nczsgaSsrKSB7Cj4+ICvCoMKgwqDCoMKg wqDCoCByaW5nYWNjLT5yaW5nc1tpXS5ydCA9IGJhc2VfcnQgKwo+PiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgSzNfUklOR0FDQ19SVF9SRUdTX1NURVAgKiBp Owo+PiArwqDCoMKgwqDCoMKgwqAgcmluZ2FjYy0+cmluZ3NbaV0uZmlmb3MgPSBiYXNlX2ZpZm8g Kwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEszX1JJTkdB Q0NfRklGT19SRUdTX1NURVAgKiBpOwo+PiArwqDCoMKgwqDCoMKgwqAgcmluZ2FjYy0+cmluZ3Nb aV0ucGFyZW50ID0gcmluZ2FjYzsKPj4gK8KgwqDCoMKgwqDCoMKgIHJpbmdhY2MtPnJpbmdzW2ld LnJpbmdfaWQgPSBpOwo+PiArwqDCoMKgwqDCoMKgwqAgcmluZ2FjYy0+cmluZ3NbaV0ucHJveHlf aWQgPSBLM19SSU5HQUNDX1BST1hZX05PVF9VU0VEOwo+PiArwqDCoMKgIH0KPj4gK8KgwqDCoCBk ZXZfc2V0X2RydmRhdGEoZGV2LCByaW5nYWNjKTsKPj4gKwo+PiArwqDCoMKgIHJpbmdhY2MtPnRp c2NpX3Jpbmdfb3BzID0gJnJpbmdhY2MtPnRpc2NpLT5vcHMucm1fcmluZ19vcHM7Cj4+ICsKPj4g K8KgwqDCoCBwbV9ydW50aW1lX2VuYWJsZShkZXYpOwo+PiArwqDCoMKgIHJldCA9IHBtX3J1bnRp bWVfZ2V0X3N5bmMoZGV2KTsKPj4gK8KgwqDCoCBpZiAocmV0IDwgMCkgewo+PiArwqDCoMKgwqDC oMKgwqAgcG1fcnVudGltZV9wdXRfbm9pZGxlKGRldik7Cj4+ICvCoMKgwqDCoMKgwqDCoCBkZXZf ZXJyKGRldiwgIkZhaWxlZCB0byBlbmFibGUgcG0gJWRcbiIsIHJldCk7Cj4+ICvCoMKgwqDCoMKg wqDCoCBnb3RvIGVycjsKPj4gK8KgwqDCoCB9Cj4+ICsKPj4gK8KgwqDCoCBtdXRleF9sb2NrKCZr M19yaW5nYWNjX2xpc3RfbG9jayk7Cj4+ICvCoMKgwqAgbGlzdF9hZGRfdGFpbCgmcmluZ2FjYy0+ bGlzdCwgJmszX3JpbmdhY2NfbGlzdCk7Cj4+ICvCoMKgwqAgbXV0ZXhfdW5sb2NrKCZrM19yaW5n YWNjX2xpc3RfbG9jayk7Cj4+ICsKPj4gK8KgwqDCoCBkZXZfaW5mbyhkZXYsICJSaW5nIEFjY2Vs ZXJhdG9yIHByb2JlZCByaW5nczoldSwgZ3AtcmluZ3NbJXUsJXVdCj4+IHNjaS1kZXYtaWQ6JXVc biIsCj4+ICvCoMKgwqDCoMKgwqDCoMKgIHJpbmdhY2MtPm51bV9yaW5ncywKPj4gK8KgwqDCoMKg wqDCoMKgwqAgcmluZ2FjYy0+cm1fZ3BfcmFuZ2UtPmRlc2NbMF0uc3RhcnQsCj4+ICvCoMKgwqDC oMKgwqDCoMKgIHJpbmdhY2MtPnJtX2dwX3JhbmdlLT5kZXNjWzBdLm51bSwKPj4gK8KgwqDCoMKg wqDCoMKgwqAgcmluZ2FjYy0+dGlzY2lfZGV2X2lkKTsKPj4gK8KgwqDCoCBkZXZfaW5mbyhkZXYs ICJkbWEtcmluZy1yZXNldC1xdWlyazogJXNcbiIsCj4+ICvCoMKgwqDCoMKgwqDCoMKgIHJpbmdh Y2MtPmRtYV9yaW5nX3Jlc2V0X3F1aXJrID8gImVuYWJsZWQiIDogImRpc2FibGVkIik7Cj4+ICvC oMKgwqAgZGV2X2luZm8oZGV2LCAiUkEgUHJveHkgcmV2LiAlMDh4LCBudW1fcHJveGllczoldVxu IiwKPj4gK8KgwqDCoMKgwqDCoMKgwqAgZGJnX3JlYWRsKCZyaW5nYWNjLT5wcm94eV9nY2ZnLT5y ZXZpc2lvbiksCj4+ICvCoMKgwqDCoMKgwqDCoMKgIHJpbmdhY2MtPm51bV9wcm94aWVzKTsKPj4g K8KgwqDCoCByZXR1cm4gMDsKPj4gKwo+PiArZXJyOgo+PiArwqDCoMKgIHBtX3J1bnRpbWVfZGlz YWJsZShkZXYpOwo+PiArwqDCoMKgIHJldHVybiByZXQ7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBp bnQgazNfcmluZ2FjY19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKPj4gK3sK Pj4gK8KgwqDCoCBzdHJ1Y3QgazNfcmluZ2FjYyAqcmluZ2FjYyA9IGRldl9nZXRfZHJ2ZGF0YSgm cGRldi0+ZGV2KTsKPj4gKwo+PiArwqDCoMKgIHBtX3J1bnRpbWVfcHV0X3N5bmMoJnBkZXYtPmRl dik7Cj4+ICvCoMKgwqAgcG1fcnVudGltZV9kaXNhYmxlKCZwZGV2LT5kZXYpOwo+PiArCj4+ICvC oMKgwqAgbXV0ZXhfbG9jaygmazNfcmluZ2FjY19saXN0X2xvY2spOwo+PiArwqDCoMKgIGxpc3Rf ZGVsKCZyaW5nYWNjLT5saXN0KTsKPj4gK8KgwqDCoCBtdXRleF91bmxvY2soJmszX3JpbmdhY2Nf bGlzdF9sb2NrKTsKPj4gK8KgwqDCoCByZXR1cm4gMDsKPj4gK30KPj4gKwo+PiArLyogTWF0Y2gg dGFibGUgZm9yIG9mX3BsYXRmb3JtIGJpbmRpbmcgKi8KPj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3Qg b2ZfZGV2aWNlX2lkIGszX3JpbmdhY2Nfb2ZfbWF0Y2hbXSA9IHsKPj4gK8KgwqDCoCB7IC5jb21w YXRpYmxlID0gInRpLGFtNjU0LW5hdnNzLXJpbmdhY2MiLCB9LAo+PiArwqDCoMKgIHt9LAo+PiAr fTsKPj4gK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIGszX3JpbmdhY2Nfb2ZfbWF0Y2gpOwo+PiAr Cj4+ICtzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBrM19yaW5nYWNjX2RyaXZlciA9IHsK Pj4gK8KgwqDCoCAucHJvYmXCoMKgwqDCoMKgwqDCoCA9IGszX3JpbmdhY2NfcHJvYmUsCj4+ICvC oMKgwqAgLnJlbW92ZcKgwqDCoMKgwqDCoMKgID0gazNfcmluZ2FjY19yZW1vdmUsCj4+ICvCoMKg wqAgLmRyaXZlcsKgwqDCoMKgwqDCoMKgID0gewo+PiArwqDCoMKgwqDCoMKgwqAgLm5hbWXCoMKg wqAgPSAiazMtcmluZ2FjYyIsCj4+ICvCoMKgwqDCoMKgwqDCoCAub2ZfbWF0Y2hfdGFibGUgPSBr M19yaW5nYWNjX29mX21hdGNoLAo+PiArwqDCoMKgIH0sCj4+ICt9Owo+PiArbW9kdWxlX3BsYXRm b3JtX2RyaXZlcihrM19yaW5nYWNjX2RyaXZlcik7Cj4+ICsKPj4gK01PRFVMRV9MSUNFTlNFKCJH UEwgdjIiKTsKPj4gK01PRFVMRV9ERVNDUklQVElPTigiVEkgUmluZ2FjYyBkcml2ZXIgZm9yIEsz IFNPQ3MiKTsKPj4gK01PRFVMRV9BVVRIT1IoIkdyeWdvcmlpIFN0cmFzaGtvIDxncnlnb3JpaS5z dHJhc2hrb0B0aS5jb20+Iik7Cj4+IGRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NvYy90aS9r My1yaW5nYWNjLmgKPj4gYi9pbmNsdWRlL2xpbnV4L3NvYy90aS9rMy1yaW5nYWNjLmgKPj4gbmV3 IGZpbGUgbW9kZSAxMDA2NDQKPj4gaW5kZXggMDAwMDAwMDAwMDAwLi5kZWJmZmJhNDhhYzkKPj4g LS0tIC9kZXYvbnVsbAo+PiArKysgYi9pbmNsdWRlL2xpbnV4L3NvYy90aS9rMy1yaW5nYWNjLmgK Pj4gQEAgLTAsMCArMSwyNjIgQEAKPj4gKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwt Mi4wICovCj4+ICsvKgo+PiArICogSzMgUmluZyBBY2NlbGVyYXRvciAoUkEpIHN1YnN5c3RlbSBp bnRlcmZhY2UKPj4gKyAqCj4+ICsgKiBDb3B5cmlnaHQgKEMpIDIwMTkgVGV4YXMgSW5zdHJ1bWVu dHMgSW5jb3Jwb3JhdGVkIC0gaHR0cDovL3d3dy50aS5jb20KPj4gKyAqLwo+PiArCj4+ICsjaWZu ZGVmIF9fU09DX1RJX0szX1JJTkdBQ0NfQVBJX0hfCj4+ICsjZGVmaW5lIF9fU09DX1RJX0szX1JJ TkdBQ0NfQVBJX0hfCj4+ICsKPj4gKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgo+PiArCj4+ICtz dHJ1Y3QgZGV2aWNlX25vZGU7Cj4+ICsKPj4gKy8qKgo+PiArICogZW51bSBrM19yaW5nX21vZGUg LSAmc3RydWN0IGszX3JpbmdfY2ZnIG1vZGUKPj4gKyAqCj4+ICsgKiBSQSByaW5nIG9wZXJhdGlv bmFsIG1vZGVzCj4+ICsgKgo+PiArICogQEszX1JJTkdBQ0NfUklOR19NT0RFX1JJTkc6IEV4cG9z ZWQgUmluZyBtb2RlIGZvciBTVyBkaXJlY3QgYWNjZXNzCj4+ICsgKiBASzNfUklOR0FDQ19SSU5H X01PREVfTUVTU0FHRTogTWVzc2FnaW5nIG1vZGUuIE1lc3NhZ2luZyBtb2RlCj4+IHJlcXVpcmVz Cj4+ICsgKsKgwqDCoCB0aGF0IGFsbCBhY2Nlc3NlcyB0byB0aGUgcXVldWUgbXVzdCBnbyB0aHJv dWdoIHRoaXMgSVAgc28gdGhhdCBhbGwKPj4gKyAqwqDCoMKgIGFjY2Vzc2VzIHRvIHRoZSBtZW1v cnkgYXJlIGNvbnRyb2xsZWQgYW5kIG9yZGVyZWQuIFRoaXMgSVAgdGhlbgo+PiArICrCoMKgwqAg Y29udHJvbHMgdGhlIGVudGlyZSBzdGF0ZSBvZiB0aGUgcXVldWUsIGFuZCBTVyBoYXMgbm8gZGly ZWN0bHkKPj4gY29udHJvbCwKPj4gKyAqwqDCoMKgIHN1Y2ggYXMgdGhyb3VnaCBkb29yYmVsbHMg YW5kIGNhbm5vdCBhY2Nlc3MgdGhlIHN0b3JhZ2UgbWVtb3J5Cj4+IGRpcmVjdGx5Lgo+PiArICrC oMKgwqAgVGhpcyBpcyBwYXJ0aWN1bGFybHkgdXNlZnVsIHdoZW4gbW9yZSB0aGFuIG9uZSBTVyBv ciBIVyBlbnRpdHkKPj4gY2FuIGJlCj4+ICsgKsKgwqDCoCB0aGUgcHJvZHVjZXIgYW5kL29yIGNv bnN1bWVyIGF0IHRoZSBzYW1lIHRpbWUKPj4gKyAqIEBLM19SSU5HQUNDX1JJTkdfTU9ERV9DUkVE RU5USUFMUzogQ3JlZGVudGlhbHMgbW9kZSBpcyBtZXNzYWdlCj4+IG1vZGUgcGx1cwo+PiArICrC oMKgwqAgc3RvcmVzIGNyZWRlbnRpYWxzIHdpdGggZWFjaCBtZXNzYWdlLCByZXF1aXJpbmcgdGhl IGVsZW1lbnQKPj4gc2l6ZSB0byBiZQo+PiArICrCoMKgwqAgZG91YmxlZCB0byBmaXQgdGhlIGNy ZWRlbnRpYWxzLiBBbnkgZXhwb3NlZCBtZW1vcnkgc2hvdWxkIGJlCj4+IHByb3RlY3RlZAo+PiAr ICrCoMKgwqAgYnkgYSBmaXJld2FsbCBmcm9tIHVud2FudGVkIGFjY2Vzcwo+PiArICogQEszX1JJ TkdBQ0NfUklOR19NT0RFX1FNOsKgIFF1ZXVlIG1hbmFnZXIgbW9kZS4gVGhpcyB0YWtlcyB0aGUK Pj4gY3JlZGVudGlhbHMKPj4gKyAqwqDCoMKgIG1vZGUgYW5kIGFkZHMgcGFja2V0IGxlbmd0aCBw ZXIgZWxlbWVudCwgYWxvbmcgd2l0aCBhZGRpdGlvbmFsCj4+IHJlYWQgb25seQo+PiArICrCoMKg wqAgZmllbGRzIGZvciBlbGVtZW50IGNvdW50IGFuZCBhY2N1bXVsYXRlZCBxdWV1ZSBsZW5ndGgu IFRoZSBRTQo+PiBtb2RlIG9ubHkKPj4gKyAqwqDCoMKgIG9wZXJhdGVzIHdpdGggYW4gOCBieXRl IGVsZW1lbnQgc2l6ZSAoYW55IG90aGVyIGVsZW1lbnQgc2l6ZSBpcwo+PiArICrCoMKgwqAgaWxs ZWdhbCksIGFuZCBsaWtlIGluIGNyZWRlbnRpYWxzIG1vZGUgZWFjaCBvcGVyYXRpb24gdXNlcyAy Cj4+IGVsZW1lbnQKPj4gKyAqwqDCoMKgIHNsb3RzIHRvIHN0b3JlIHRoZSBjcmVkZW50aWFscyBh bmQgbGVuZ3RoIGZpZWxkcwo+PiArICovCj4+ICtlbnVtIGszX3JpbmdfbW9kZSB7Cj4+ICvCoMKg wqAgSzNfUklOR0FDQ19SSU5HX01PREVfUklORyA9IDAsCj4+ICvCoMKgwqAgSzNfUklOR0FDQ19S SU5HX01PREVfTUVTU0FHRSwKPj4gK8KgwqDCoCBLM19SSU5HQUNDX1JJTkdfTU9ERV9DUkVERU5U SUFMUywKPj4gK8KgwqDCoCBLM19SSU5HQUNDX1JJTkdfTU9ERV9RTSwKPj4gK8KgwqDCoCBLM19S SU5HQUNDX1JJTkdfTU9ERV9JTlZBTElECj4+ICt9Owo+PiArCj4+ICsvKioKPj4gKyAqIGVudW0g azNfcmluZ19zaXplIC0gJnN0cnVjdCBrM19yaW5nX2NmZyBlbG1fc2l6ZQo+PiArICoKPj4gKyAq IFJBIHJpbmcgZWxlbWVudCdzIHNpemVzIGluIGJ5dGVzLgo+PiArICovCj4+ICtlbnVtIGszX3Jp bmdfc2l6ZSB7Cj4+ICvCoMKgwqAgSzNfUklOR0FDQ19SSU5HX0VMU0laRV80ID0gMCwKPj4gK8Kg wqDCoCBLM19SSU5HQUNDX1JJTkdfRUxTSVpFXzgsCj4+ICvCoMKgwqAgSzNfUklOR0FDQ19SSU5H X0VMU0laRV8xNiwKPj4gK8KgwqDCoCBLM19SSU5HQUNDX1JJTkdfRUxTSVpFXzMyLAo+PiArwqDC oMKgIEszX1JJTkdBQ0NfUklOR19FTFNJWkVfNjQsCj4+ICvCoMKgwqAgSzNfUklOR0FDQ19SSU5H X0VMU0laRV8xMjgsCj4+ICvCoMKgwqAgSzNfUklOR0FDQ19SSU5HX0VMU0laRV8yNTYsCj4+ICvC oMKgwqAgSzNfUklOR0FDQ19SSU5HX0VMU0laRV9JTlZBTElECj4+ICt9Owo+PiArCj4+ICtzdHJ1 Y3QgazNfcmluZ2FjYzsKPj4gK3N0cnVjdCBrM19yaW5nOwo+PiArCj4+ICsvKioKPj4gKyAqIGVu dW0gazNfcmluZ19jZmcgLSBSQSByaW5nIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlCj4+ICsgKgo+ PiArICogQHNpemU6IFJpbmcgc2l6ZSwgbnVtYmVyIG9mIGVsZW1lbnRzCj4+ICsgKiBAZWxtX3Np emU6IFJpbmcgZWxlbWVudCBzaXplCj4+ICsgKiBAbW9kZTogUmluZyBvcGVyYXRpb25hbCBtb2Rl Cj4+ICsgKiBAZmxhZ3M6IFJpbmcgY29uZmlndXJhdGlvbiBmbGFncy4gUG9zc2libGUgdmFsdWVz Ogo+PiArICrCoMKgwqDCoCBASzNfUklOR0FDQ19SSU5HX1NIQVJFRDogd2hlbiBzZXQgYWxsb3dz IHRvIHJlcXVlc3QgdGhlIHNhbWUgcmluZwo+PiArICrCoMKgwqDCoCBmZXcgdGltZXMuIEl0J3Mg dXNhYmxlIHdoZW4gdGhlIHNhbWUgcmluZyBpcyB1c2VkIGFzIEZyZWUgSG9zdAo+PiBQRCByaW5n Cj4+ICsgKsKgwqDCoMKgIGZvciBkaWZmZXJlbnQgZmxvd3MsIGZvciBleGFtcGxlLgo+PiArICrC oMKgwqDCoCBOb3RlOiBMb2NraW5nIHNob3VsZCBiZSBkb25lIGJ5IGNvbnN1bWVyIGlmIHJlcXVp cmVkCj4+ICsgKi8KPj4gK3N0cnVjdCBrM19yaW5nX2NmZyB7Cj4+ICvCoMKgwqAgdTMyIHNpemU7 Cj4+ICvCoMKgwqAgZW51bSBrM19yaW5nX3NpemUgZWxtX3NpemU7Cj4+ICvCoMKgwqAgZW51bSBr M19yaW5nX21vZGUgbW9kZTsKPj4gKyNkZWZpbmUgSzNfUklOR0FDQ19SSU5HX1NIQVJFRCBCSVQo MSkKPj4gK8KgwqDCoCB1MzIgZmxhZ3M7Cj4+ICt9Owo+PiArCj4+ICsjZGVmaW5lIEszX1JJTkdB Q0NfUklOR19JRF9BTlkgKC0xKQo+PiArCj4+ICsvKioKPj4gKyAqIG9mX2szX3JpbmdhY2NfZ2V0 X2J5X3BoYW5kbGUgLSBmaW5kIGEgUkEgYnkgcGhhbmRsZSBwcm9wZXJ0eQo+PiArICogQG5wOiBk ZXZpY2Ugbm9kZQo+PiArICogQHByb3BuYW1lOiBwcm9wZXJ0eSBuYW1lIGNvbnRhaW5pbmcgcGhh bmRsZSBvbiBSQSBub2RlCj4+ICsgKgo+PiArICogUmV0dXJucyBwb2ludGVyIG9uIHRoZSBSQSAt IHN0cnVjdCBrM19yaW5nYWNjCj4+ICsgKiBvciAtRU5PREVWIGlmIG5vdCBmb3VuZCwKPj4gKyAq IG9yIC1FUFJPQkVfREVGRVIgaWYgbm90IHlldCByZWdpc3RlcmVkCj4+ICsgKi8KPj4gK3N0cnVj dCBrM19yaW5nYWNjICpvZl9rM19yaW5nYWNjX2dldF9ieV9waGFuZGxlKHN0cnVjdCBkZXZpY2Vf bm9kZSAqbnAsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIGNvbnN0IGNoYXIgKnByb3BlcnR5KTsKPj4gKwo+PiArI2RlZmluZSBLM19SSU5HQUNDX1JJ TkdfVVNFX1BST1hZIEJJVCgxKQo+PiArCj4+ICsvKioKPj4gKyAqIGszX3JpbmdhY2NfcmVxdWVz dF9yaW5nIC0gcmVxdWVzdCByaW5nIGZyb20gcmluZ2FjYwo+PiArICogQHJpbmdhY2M6IHBvaW50 ZXIgb24gcmluZ2FjYwo+PiArICogQGlkOiByaW5nIGlkIG9yIEszX1JJTkdBQ0NfUklOR19JRF9B TlkgZm9yIGFueSBnZW5lcmFsIHB1cnBvc2UgcmluZwo+PiArICogQGZsYWdzOgo+PiArICrCoMKg wqAgQEszX1JJTkdBQ0NfUklOR19VU0VfUFJPWFk6IGlmIHNldCAtIHByb3h5IHdpbGwgYmUgYWxs b2NhdGVkIGFuZAo+PiArICrCoMKgwqDCoMKgwqDCoCB1c2VkIHRvIGFjY2VzcyByaW5nIG1lbW9y eS4gU29wcG9ydGVkIG9ubHkgZm9yIHJpbmdzIGluCj4+ICsgKsKgwqDCoMKgwqDCoMKgIE1lc3Nh Z2UvQ3JlZGVudGlhbHMvUXVldWUgbW9kZS4KPj4gKyAqCj4+ICsgKiBSZXR1cm5zIHBvaW50ZXIg b24gdGhlIFJpbmcgLSBzdHJ1Y3QgazNfcmluZwo+PiArICogb3IgTlVMTCBpbiBjYXNlIG9mIGZh aWx1cmUuCj4+ICsgKi8KPj4gK3N0cnVjdCBrM19yaW5nICprM19yaW5nYWNjX3JlcXVlc3Rfcmlu ZyhzdHJ1Y3QgazNfcmluZ2FjYyAqcmluZ2FjYywKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIGludCBpZCwgdTMyIGZsYWdzKTsKPj4gKwo+PiArLyoqCj4+ICsgKiBr M19yaW5nYWNjX3JpbmdfcmVzZXQgLSByaW5nIHJlc2V0Cj4+ICsgKiBAcmluZzogcG9pbnRlciBv biBSaW5nCj4+ICsgKgo+PiArICogUmVzZXRzIHJpbmcgaW50ZXJuYWwgc3RhdGUgKChodylvY2Ms IChodylpZHgpLgo+PiArICogVE9ET19HUzogPyBSaW5nIGNhbiBiZSByZXVzZWQgd2l0aG91dCBy ZWNvbmZpZ3VyYXRpb24KPj4gKyAqLwo+PiArdm9pZCBrM19yaW5nYWNjX3JpbmdfcmVzZXQoc3Ry dWN0IGszX3JpbmcgKnJpbmcpOwo+PiArLyoqCj4+ICsgKiBrM19yaW5nYWNjX3JpbmdfcmVzZXQg LSByaW5nIHJlc2V0IGZvciBETUEgcmluZ3MKPj4gKyAqIEByaW5nOiBwb2ludGVyIG9uIFJpbmcK Pj4gKyAqCj4+ICsgKiBSZXNldHMgcmluZyBpbnRlcm5hbCBzdGF0ZSAoKGh3KW9jYywgKGh3KWlk eCkuIFNob3VsZCBiZSB1c2VkIGZvcgo+PiByaW5ncwo+PiArICogd2hpY2ggYXJlIHJlYWQgYnkg SzMgVURNQSwgbGlrZSBUWCBvciBGcmVlIEhvc3QgUEQgcmluZ3MuCj4+ICsgKi8KPj4gK3ZvaWQg azNfcmluZ2FjY19yaW5nX3Jlc2V0X2RtYShzdHJ1Y3QgazNfcmluZyAqcmluZywgdTMyIG9jYyk7 Cj4+ICsKPj4gKy8qKgo+PiArICogazNfcmluZ2FjY19yaW5nX2ZyZWUgLSByaW5nIGZyZWUKPj4g KyAqIEByaW5nOiBwb2ludGVyIG9uIFJpbmcKPj4gKyAqCj4+ICsgKiBSZXNldHMgcmluZyBhbmQg ZnJlZSBhbGwgYWxvY2F0ZWQgcmVzb3VyY2VzLgo+PiArICovCj4+ICtpbnQgazNfcmluZ2FjY19y aW5nX2ZyZWUoc3RydWN0IGszX3JpbmcgKnJpbmcpOwo+PiArCj4+ICsvKioKPj4gKyAqIGszX3Jp bmdhY2NfZ2V0X3JpbmdfaWQgLSBHZXQgdGhlIFJpbmcgSUQKPj4gKyAqIEByaW5nOiBwb2ludGVy IG9uIHJpbmcKPj4gKyAqCj4+ICsgKiBSZXR1cm5zIHRoZSBSaW5nIElECj4+ICsgKi8KPj4gK3Uz MiBrM19yaW5nYWNjX2dldF9yaW5nX2lkKHN0cnVjdCBrM19yaW5nICpyaW5nKTsKPj4gKwo+PiAr LyoqCj4+ICsgKiBrM19yaW5nYWNjX2dldF9yaW5nX2lycV9udW0gLSBHZXQgdGhlIGlycSBudW1i ZXIgZm9yIHRoZSByaW5nCj4+ICsgKiBAcmluZzogcG9pbnRlciBvbiByaW5nCj4+ICsgKgo+PiAr ICogUmV0dXJucyB0aGUgaW50ZXJydXB0IG51bWJlciB3aGljaCBjYW4gYmUgdXNlZCB0byByZXF1 ZXN0IHRoZQo+PiBpbnRlcnJ1cHQKPj4gKyAqLwo+PiAraW50IGszX3JpbmdhY2NfZ2V0X3Jpbmdf aXJxX251bShzdHJ1Y3QgazNfcmluZyAqcmluZyk7Cj4+ICsKPj4gKy8qKgo+PiArICogazNfcmlu Z2FjY19yaW5nX2NmZyAtIHJpbmcgY29uZmlndXJlCj4+ICsgKiBAcmluZzogcG9pbnRlciBvbiBy aW5nCj4+ICsgKiBAY2ZnOiBSaW5nIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyAoc2VlICZzdHJ1 Y3QgazNfcmluZ19jZmcpCj4+ICsgKgo+PiArICogQ29uZmlndXJlcyByaW5nLCBpbmNsdWRpbmcg cmluZyBtZW1vcnkgYWxsb2NhdGlvbi4KPj4gKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBlcnJu byBvdGhlcndpc2UuCj4+ICsgKi8KPj4gK2ludCBrM19yaW5nYWNjX3JpbmdfY2ZnKHN0cnVjdCBr M19yaW5nICpyaW5nLCBzdHJ1Y3QgazNfcmluZ19jZmcgKmNmZyk7Cj4+ICsKPj4gKy8qKgo+PiAr ICogazNfcmluZ2FjY19yaW5nX2dldF9zaXplIC0gZ2V0IHJpbmcgc2l6ZQo+PiArICogQHJpbmc6 IHBvaW50ZXIgb24gcmluZwo+PiArICoKPj4gKyAqIFJldHVybnMgcmluZyBzaXplIGluIG51bWJl ciBvZiBlbGVtZW50cy4KPj4gKyAqLwo+PiArdTMyIGszX3JpbmdhY2NfcmluZ19nZXRfc2l6ZShz dHJ1Y3QgazNfcmluZyAqcmluZyk7Cj4+ICsKPj4gKy8qKgo+PiArICogazNfcmluZ2FjY19yaW5n X2dldF9mcmVlIC0gZ2V0IGZyZWUgZWxlbWVudHMKPj4gKyAqIEByaW5nOiBwb2ludGVyIG9uIHJp bmcKPj4gKyAqCj4+ICsgKiBSZXR1cm5zIG51bWJlciBvZiBmcmVlIGVsZW1lbnRzIGluIHRoZSBy aW5nLgo+PiArICovCj4+ICt1MzIgazNfcmluZ2FjY19yaW5nX2dldF9mcmVlKHN0cnVjdCBrM19y aW5nICpyaW5nKTsKPj4gKwo+PiArLyoqCj4+ICsgKiBrM19yaW5nYWNjX3JpbmdfZ2V0X29jYyAt IGdldCByaW5nIG9jY3VwYW5jeQo+PiArICogQHJpbmc6IHBvaW50ZXIgb24gcmluZwo+PiArICoK Pj4gKyAqIFJldHVybnMgdG90YWwgbnVtYmVyIG9mIHZhbGlkIGVudHJpZXMgb24gdGhlIHJpbmcK Pj4gKyAqLwo+PiArdTMyIGszX3JpbmdhY2NfcmluZ19nZXRfb2NjKHN0cnVjdCBrM19yaW5nICpy aW5nKTsKPj4gKwo+PiArLyoqCj4+ICsgKiBrM19yaW5nYWNjX3JpbmdfaXNfZnVsbCAtIGNoZWNr cyBpZiByaW5nIGlzIGZ1bGwKPj4gKyAqIEByaW5nOiBwb2ludGVyIG9uIHJpbmcKPj4gKyAqCj4+ ICsgKiBSZXR1cm5zIHRydWUgaWYgdGhlIHJpbmcgaXMgZnVsbAo+PiArICovCj4+ICt1MzIgazNf cmluZ2FjY19yaW5nX2lzX2Z1bGwoc3RydWN0IGszX3JpbmcgKnJpbmcpOwo+PiArCj4+ICsvKioK Pj4gKyAqIGszX3JpbmdhY2NfcmluZ19wdXNoIC0gcHVzaCBlbGVtZW50IHRvIHRoZSByaW5nIHRh aWwKPj4gKyAqIEByaW5nOiBwb2ludGVyIG9uIHJpbmcKPj4gKyAqIEBlbGVtOiBwb2ludGVyIG9u IHJpbmcgZWxlbWVudCBidWZmZXIKPj4gKyAqCj4+ICsgKiBQdXNoIG9uZSByaW5nIGVsZW1lbnQg dG8gdGhlIHJpbmcgdGFpbC4gU2l6ZSBvZiB0aGUgcmluZyBlbGVtZW50IGlzCj4+ICsgKiBkZXRl cm1pbmVkIGJ5IHJpbmcgY29uZmlndXJhdGlvbiAmc3RydWN0IGszX3JpbmdfY2ZnIGVsbV9zaXpl Lgo+PiArICoKPj4gKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBlcnJubyBvdGhlcndpc2UuCj4+ ICsgKi8KPj4gK2ludCBrM19yaW5nYWNjX3JpbmdfcHVzaChzdHJ1Y3QgazNfcmluZyAqcmluZywg dm9pZCAqZWxlbSk7Cj4+ICsKPj4gKy8qKgo+PiArICogazNfcmluZ2FjY19yaW5nX3BvcCAtIHBv cCBlbGVtZW50IGZyb20gdGhlIHJpbmcgaGVhZAo+PiArICogQHJpbmc6IHBvaW50ZXIgb24gcmlu Zwo+PiArICogQGVsZW06IHBvaW50ZXIgb24gcmluZyBlbGVtZW50IGJ1ZmZlcgo+PiArICoKPj4g KyAqIFB1c2ggb25lIHJpbmcgZWxlbWVudCBmcm9tIHRoZSByaW5nIGhlYWQuIFNpemUgb2YgdGhl IHJpbmcgZWxlbWVudCBpcwo+PiArICogZGV0ZXJtaW5lZCBieSByaW5nIGNvbmZpZ3VyYXRpb24g JnN0cnVjdCBrM19yaW5nX2NmZyBlbG1fc2l6ZS4uCj4+ICsgKgo+PiArICogUmV0dXJucyAwIG9u IHN1Y2Nlc3MsIGVycm5vIG90aGVyd2lzZS4KPj4gKyAqLwo+PiAraW50IGszX3JpbmdhY2Nfcmlu Z19wb3Aoc3RydWN0IGszX3JpbmcgKnJpbmcsIHZvaWQgKmVsZW0pOwo+PiArCj4+ICsvKioKPj4g KyAqIGszX3JpbmdhY2NfcmluZ19wdXNoX2hlYWQgLSBwdXNoIGVsZW1lbnQgdG8gdGhlIHJpbmcg aGVhZAo+PiArICogQHJpbmc6IHBvaW50ZXIgb24gcmluZwo+PiArICogQGVsZW06IHBvaW50ZXIg b24gcmluZyBlbGVtZW50IGJ1ZmZlcgo+PiArICoKPj4gKyAqIFB1c2ggb25lIHJpbmcgZWxlbWVu dCB0byB0aGUgcmluZyBoZWFkLiBTaXplIG9mIHRoZSByaW5nIGVsZW1lbnQgaXMKPj4gKyAqIGRl dGVybWluZWQgYnkgcmluZyBjb25maWd1cmF0aW9uICZzdHJ1Y3QgazNfcmluZ19jZmcgZWxtX3Np emUuCj4+ICsgKgo+PiArICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIGVycm5vIG90aGVyd2lzZS4K Pj4gKyAqIE5vdCBTdXBwb3J0ZWQgYnkgcmluZyBtb2RlczogSzNfUklOR0FDQ19SSU5HX01PREVf UklORwo+PiArICovCj4+ICtpbnQgazNfcmluZ2FjY19yaW5nX3B1c2hfaGVhZChzdHJ1Y3QgazNf cmluZyAqcmluZywgdm9pZCAqZWxlbSk7Cj4+ICsKPj4gKy8qKgo+PiArICogazNfcmluZ2FjY19y aW5nX3BvcF90YWlsIC0gcG9wIGVsZW1lbnQgZnJvbSB0aGUgcmluZyB0YWlsCj4+ICsgKiBAcmlu ZzogcG9pbnRlciBvbiByaW5nCj4+ICsgKiBAZWxlbTogcG9pbnRlciBvbiByaW5nIGVsZW1lbnQg YnVmZmVyCj4+ICsgKgo+PiArICogUHVzaCBvbmUgcmluZyBlbGVtZW50IGZyb20gdGhlIHJpbmcg dGFpbC4gU2l6ZSBvZiB0aGUgcmluZyBlbGVtZW50IGlzCj4+ICsgKiBkZXRlcm1pbmVkIGJ5IHJp bmcgY29uZmlndXJhdGlvbiAmc3RydWN0IGszX3JpbmdfY2ZnIGVsbV9zaXplLgo+PiArICoKPj4g KyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBlcnJubyBvdGhlcndpc2UuCj4+ICsgKiBOb3QgU3Vw cG9ydGVkIGJ5IHJpbmcgbW9kZXM6IEszX1JJTkdBQ0NfUklOR19NT0RFX1JJTkcKPj4gKyAqLwo+ PiAraW50IGszX3JpbmdhY2NfcmluZ19wb3BfdGFpbChzdHJ1Y3QgazNfcmluZyAqcmluZywgdm9p ZCAqZWxlbSk7Cj4+ICsKPj4gK3UzMiBrM19yaW5nYWNjX2dldF90aXNjaV9kZXZfaWQoc3RydWN0 IGszX3JpbmcgKnJpbmcpOwo+PiArCj4+ICsvKioKPj4gKyAqIERlYnVnZ2luZyBkZWZpbml0aW9u cwo+PiArICogVE9ETzogbWlnaHQgYmUgcmVtb3ZlZAo+PiArICovCj4+ICsjaWZkZWYgQ09ORklH X1RJX0szX1JJTkdBQ0NfREVCVUcKPj4gK3ZvaWQgazNfcmluZ2FjY19yaW5nX2R1bXAoc3RydWN0 IGszX3JpbmcgKnJpbmcpOwo+PiArI2Vsc2UKPj4gK3N0YXRpYyBpbmxpbmUgdm9pZCBrM19yaW5n YWNjX3JpbmdfZHVtcChzdHJ1Y3QgazNfcmluZyAqcmluZykge307Cj4+ICsjZW5kaWYKPj4gKwo+ PiArI2VuZGlmIC8qIF9fU09DX1RJX0szX1JJTkdBQ0NfQVBJX0hfICovCj4+Cj4gCj4gLS0gCj4g VGV4YXMgSW5zdHJ1bWVudHMgRmlubGFuZCBPeSwgUG9ya2thbGFua2F0dSAyMiwgMDAxODAgSGVs c2lua2kuCj4gWS10dW5udXMvQnVzaW5lc3MgSUQ6IDA2MTU1MjEtNC4gS290aXBhaWtrYS9Eb21p Y2lsZTogSGVsc2lua2kKPiAKPiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fXwo+IGxpbnV4LWFybS1rZXJuZWwgbWFpbGluZyBsaXN0Cj4gbGludXgtYXJtLWtl cm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnCj4gaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFp bG1hbi9saXN0aW5mby9saW51eC1hcm0ta2VybmVsCgotLSAKUmVnYXJkcwpWaWduZXNoCgpfX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpsaW51eC1hcm0ta2Vy bmVsIG1haWxpbmcgbGlzdApsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0 cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1hcm0ta2VybmVs Cg==