From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 99E9FC001B0 for ; Tue, 15 Aug 2023 10:39:28 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Subject:Cc:To:From:Message-ID:Date:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=sPdfx+ndKyMUPvf2M8/H2FJ5tQ9RQECToOx6GNhivn8=; b=2dg1x8MzxB5J9u w6icfp73YwaaU3oxeWkVArQPPgrWY0sgQI9dMCH7gW8czMb1sYKYFQIP1LanYWokQL8o7i8V2bHpJ HnzW3GIsqz15qzX7aKBKokkOU1Dhx8GitpMzULfiKoor48VAmPnN58Rns07GFryR5tBje0zqaok8J UzvnMiZNaUAEaDxrWz17Pu67frNKe4q4vlxU2zq3lg6AC4qO0NXoTvY7FLXJvJ4AeyoBHXUHR+eeA zFT5EjgLwlPkTc/UxKUqYYT1o/v3DXqDhJTTD2ySrIzLwr4oWotmFxbyUmSnMaVgym5wqjr/44K9F KBHXUJLNp7POTL4iJ0vg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1qVrRs-001IpN-1N; Tue, 15 Aug 2023 10:38:52 +0000 Received: from dfw.source.kernel.org ([139.178.84.217]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1qVrRo-001Iot-3C for linux-arm-kernel@lists.infradead.org; Tue, 15 Aug 2023 10:38:51 +0000 Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by dfw.source.kernel.org (Postfix) with ESMTPS id 677E765179; Tue, 15 Aug 2023 10:38:47 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 3D232C433C8; Tue, 15 Aug 2023 10:38:46 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1692095926; bh=Ab3lW2QmaXFPBydbQW8n1G4967qqEI7MymXqkcI2A3I=; h=Date:From:To:Cc:Subject:In-Reply-To:References:From; b=CJRzG6elQOY8I5TzQPwEe7jYleC99OJi4KsGLUwesh8WVMmPaYP8WnZMcEJH654+W eGDdOPWjVLdQT9m0XAhQrkzwTFrjVPCkiatZrdC1wztqBjTJo4n2nstvDetgYMvuMp jMIA640DDzGCnDevqbaJS9JdDZUyPvc6hu869NOQB4HtrFtjLhXvvLuhZsJ3a4uO+9 hM1jp8v683RNvnLowSnPdcj/CuElsQ1fuHVh/Nrt0FfyzfjXzUj1HQj/fX1I8HAL6A ac+7/JcA2sm5vs0Hp5BiGZ2PQNv1LTUZa8DQFOVXSyPGb7Ub6bruZCCpOTeElrtnab 37OLpgOFBfaWQ== Received: from host213-123-75-60.in-addr.btopenworld.com ([213.123.75.60] helo=wait-a-minute.misterjones.org) by disco-boy.misterjones.org with esmtpsa (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.95) (envelope-from ) id 1qVrRj-004yaI-Kn; Tue, 15 Aug 2023 11:38:43 +0100 Date: Tue, 15 Aug 2023 11:38:53 +0100 Message-ID: <87jztwpp36.wl-maz@kernel.org> From: Marc Zyngier To: Jing Zhang Cc: kvmarm@lists.linux.dev, kvm@vger.kernel.org, linux-arm-kernel@lists.infradead.org, Catalin Marinas , Eric Auger , Mark Brown , Mark Rutland , Will Deacon , Alexandru Elisei , Andre Przywara , Chase Conklin , Ganapatrao Kulkarni , Darren Hart , Miguel Luis , James Morse , Suzuki K Poulose , Oliver Upton , Zenghui Yu Subject: Re: [PATCH v3 14/27] KVM: arm64: nv: Add trap forwarding infrastructure In-Reply-To: References: <20230808114711.2013842-1-maz@kernel.org> <20230808114711.2013842-15-maz@kernel.org> User-Agent: Wanderlust/2.15.9 (Almost Unreal) SEMI-EPG/1.14.7 (Harue) FLIM-LB/1.14.9 (=?UTF-8?B?R29qxY0=?=) APEL-LB/10.8 EasyPG/1.0.0 Emacs/28.2 (x86_64-pc-linux-gnu) MULE/6.0 (HANACHIRUSATO) MIME-Version: 1.0 (generated by SEMI-EPG 1.14.7 - "Harue") X-SA-Exim-Connect-IP: 213.123.75.60 X-SA-Exim-Rcpt-To: jingzhangos@google.com, kvmarm@lists.linux.dev, kvm@vger.kernel.org, linux-arm-kernel@lists.infradead.org, catalin.marinas@arm.com, eric.auger@redhat.com, broonie@kernel.org, mark.rutland@arm.com, will@kernel.org, alexandru.elisei@arm.com, andre.przywara@arm.com, chase.conklin@arm.com, gankulkarni@os.amperecomputing.com, darren@os.amperecomputing.com, miguel.luis@oracle.com, james.morse@arm.com, suzuki.poulose@arm.com, oliver.upton@linux.dev, yuzenghui@huawei.com X-SA-Exim-Mail-From: maz@kernel.org X-SA-Exim-Scanned: No (on disco-boy.misterjones.org); SAEximRunCond expanded to false X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20230815_033849_129023_3A8CCE3F X-CRM114-Status: GOOD ( 58.60 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org T24gU3VuLCAxMyBBdWcgMjAyMyAwMzoyNDoxOSArMDEwMCwKSmluZyBaaGFuZyA8amluZ3poYW5n b3NAZ29vZ2xlLmNvbT4gd3JvdGU6Cj4gCj4gSGkgTWFyYywKPiAKPiBPbiBUdWUsIEF1ZyA4LCAy MDIzIGF0IDQ6NDjigK9BTSBNYXJjIFp5bmdpZXIgPG1hekBrZXJuZWwub3JnPiB3cm90ZToKPiA+ Cj4gPiBBIHNpZ25pZmljYW50IHBhcnQgb2Ygd2hhdCBhIE5WIGh5cGVydmlzb3IgbmVlZHMgdG8g ZG8gaXMgdG8gZGVjaWRlCj4gPiB3aGV0aGVyIGEgdHJhcCBmcm9tIGEgTDIrIGd1ZXN0IGhhcyB0 byBiZSBmb3J3YXJkZWQgdG8gYSBMMSBndWVzdAo+ID4gb3IgaGFuZGxlZCBsb2NhbGx5LiBUaGlz IGlzIGRvbmUgYnkgY2hlY2tpbmcgZm9yIHRoZSB0cmFwIGJpdHMgdGhhdAo+ID4gdGhlIGd1ZXN0 IGh5cGVydmlzb3IgaGFzIHNldCBhbmQgYWN0aW5nIGFjY29yZGluZ2x5LCBhcyBkZXNjcmliZWQg YnkKPiA+IHRoZSBhcmNoaXRlY3R1cmUuCj4gPgo+ID4gQSBwcmV2aW91cyBhcHByb2FjaCB3YXMg dG8gc3ByaW5rbGUgYSBidW5jaCBvZiBjaGVja3MgaW4gYWxsIHRoZQo+ID4gc3lzdGVtIHJlZ2lz dGVyIGFjY2Vzc29ycywgYnV0IHRoaXMgaXMgcHJldHR5IGVycm9yIHByb25lIGFuZCBkb2Vzbid0 Cj4gPiBoZWxwIGdldHRpbmcgYW4gb3ZlcnZpZXcgb2Ygd2hhdCBpcyBoYXBwZW5pbmcuCj4gPgo+ ID4gSW5zdGVhZCwgaW1wbGVtZW50IGEgc2V0IG9mIGdsb2JhbCB0YWJsZXMgdGhhdCBkZXNjcmli ZSBhIHRyYXAgYml0LAo+ID4gY29tYmluYXRpb25zIG9mIHRyYXAgYml0cywgYmVoYXZpb3VycyBv biB0cmFwLCBhbmQgd2hhdCBiaXRzIG11c3QKPiA+IGJlIGV2YWx1YXRlZCBvbiBhIHN5c3RlbSBy ZWdpc3RlciB0cmFwLgo+ID4KPiA+IEFsdGhvdWdoIHRoaXMgaXMgcGFpbmZ1bCB0byBkZXNjcmli ZSwgdGhpcyBhbGxvd3MgdG8gc3BlY2lmeSBlYWNoCj4gPiBhbmQgZXZlcnkgY29udHJvbCBiaXQg aW4gYSBzdGF0aWMgbWFubmVyLiBUbyBtYWtlIGl0IGVmZmljaWVudCwKPiA+IHRoZSB0YWJsZSBp cyBpbnNlcnRlZCBpbiBhbiB4YXJyYXkgdGhhdCBpcyBnbG9iYWwgdG8gdGhlIHN5c3RlbSwKPiA+ IGFuZCBjaGVja2VkIGVhY2ggdGltZSB3ZSB0cmFwIGEgc3lzdGVtIHJlZ2lzdGVyIHdoaWxlIHJ1 bm5pbmcKPiA+IGEgTDIgZ3Vlc3QuCj4gPgo+ID4gQWRkIHRoZSBiYXNpYyBpbmZyYXN0cnVjdHVy ZSBmb3Igbm93LCB3aGlsZSBhZGRpdGlvbmFsIHBhdGNoZXMgd2lsbAo+ID4gaW1wbGVtZW50IGNv bmZpZ3VyYXRpb24gcmVnaXN0ZXJzLgo+ID4KPiA+IFNpZ25lZC1vZmYtYnk6IE1hcmMgWnluZ2ll ciA8bWF6QGtlcm5lbC5vcmc+Cj4gPiAtLS0KPiA+ICBhcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2 bV9ob3N0LmggICB8ICAgMSArCj4gPiAgYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fbmVzdGVk LmggfCAgIDIgKwo+ID4gIGFyY2gvYXJtNjQva3ZtL2VtdWxhdGUtbmVzdGVkLmMgICAgIHwgMjYy ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysKPiA+ICBhcmNoL2FybTY0L2t2bS9zeXNfcmVn cy5jICAgICAgICAgICB8ICAgNiArCj4gPiAgYXJjaC9hcm02NC9rdm0vdHJhY2VfYXJtLmggICAg ICAgICAgfCAgMjYgKysrCj4gPiAgNSBmaWxlcyBjaGFuZ2VkLCAyOTcgaW5zZXJ0aW9ucygrKQo+ ID4KPiA+IGRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmggYi9h cmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKPiA+IGluZGV4IDcyMTY4MGRhMTAxMS4u Y2IxYzVjNTRjZWRkIDEwMDY0NAo+ID4gLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1f aG9zdC5oCj4gPiArKysgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKPiA+IEBA IC05ODgsNiArOTg4LDcgQEAgaW50IGt2bV9oYW5kbGVfY3AxMF9pZChzdHJ1Y3Qga3ZtX3ZjcHUg KnZjcHUpOwo+ID4gIHZvaWQga3ZtX3Jlc2V0X3N5c19yZWdzKHN0cnVjdCBrdm1fdmNwdSAqdmNw dSk7Cj4gPgo+ID4gIGludCBfX2luaXQga3ZtX3N5c19yZWdfdGFibGVfaW5pdCh2b2lkKTsKPiA+ ICtpbnQgX19pbml0IHBvcHVsYXRlX252X3RyYXBfY29uZmlnKHZvaWQpOwo+ID4KPiA+ICBib29s IGxvY2tfYWxsX3ZjcHVzKHN0cnVjdCBrdm0gKmt2bSk7Cj4gPiAgdm9pZCB1bmxvY2tfYWxsX3Zj cHVzKHN0cnVjdCBrdm0gKmt2bSk7Cj4gPiBkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRl L2FzbS9rdm1fbmVzdGVkLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9uZXN0ZWQuaAo+ ID4gaW5kZXggOGZiNjdmMDMyZmQxLi5mYTIzY2M5YzJhZGMgMTAwNjQ0Cj4gPiAtLS0gYS9hcmNo L2FybTY0L2luY2x1ZGUvYXNtL2t2bV9uZXN0ZWQuaAo+ID4gKysrIGIvYXJjaC9hcm02NC9pbmNs dWRlL2FzbS9rdm1fbmVzdGVkLmgKPiA+IEBAIC0xMSw2ICsxMSw4IEBAIHN0YXRpYyBpbmxpbmUg Ym9vbCB2Y3B1X2hhc19udihjb25zdCBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCj4gPiAgICAgICAg ICAgICAgICAgdGVzdF9iaXQoS1ZNX0FSTV9WQ1BVX0hBU19FTDIsIHZjcHUtPmFyY2guZmVhdHVy ZXMpKTsKPiA+ICB9Cj4gPgo+ID4gK2V4dGVybiBib29sIF9fY2hlY2tfbnZfc3JfZm9yd2FyZChz dHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwo+ID4gKwo+ID4gIHN0cnVjdCBzeXNfcmVnX3BhcmFtczsK PiA+ICBzdHJ1Y3Qgc3lzX3JlZ19kZXNjOwo+ID4KPiA+IGRpZmYgLS1naXQgYS9hcmNoL2FybTY0 L2t2bS9lbXVsYXRlLW5lc3RlZC5jIGIvYXJjaC9hcm02NC9rdm0vZW11bGF0ZS1uZXN0ZWQuYwo+ ID4gaW5kZXggYjk2NjYyMDI5ZmIxLi4xYjExNDg3NzBkNDUgMTAwNjQ0Cj4gPiAtLS0gYS9hcmNo L2FybTY0L2t2bS9lbXVsYXRlLW5lc3RlZC5jCj4gPiArKysgYi9hcmNoL2FybTY0L2t2bS9lbXVs YXRlLW5lc3RlZC5jCj4gPiBAQCAtMTQsNiArMTQsMjY4IEBACj4gPgo+ID4gICNpbmNsdWRlICJ0 cmFjZS5oIgo+ID4KPiA+ICtlbnVtIHRyYXBfYmVoYXZpb3VyIHsKPiA+ICsgICAgICAgQkVIQVZF X0hBTkRMRV9MT0NBTExZICAgPSAwLAo+ID4gKyAgICAgICBCRUhBVkVfRk9SV0FSRF9SRUFEICAg ICA9IEJJVCgwKSwKPiA+ICsgICAgICAgQkVIQVZFX0ZPUldBUkRfV1JJVEUgICAgPSBCSVQoMSks Cj4gPiArICAgICAgIEJFSEFWRV9GT1JXQVJEX0FOWSAgICAgID0gQkVIQVZFX0ZPUldBUkRfUkVB RCB8IEJFSEFWRV9GT1JXQVJEX1dSSVRFLAo+ID4gK307Cj4gPiArCj4gPiArc3RydWN0IHRyYXBf Yml0cyB7Cj4gPiArICAgICAgIGNvbnN0IGVudW0gdmNwdV9zeXNyZWcgICAgICAgICAgaW5kZXg7 Cj4gPiArICAgICAgIGNvbnN0IGVudW0gdHJhcF9iZWhhdmlvdXIgICAgICAgYmVoYXZpb3VyOwo+ ID4gKyAgICAgICBjb25zdCB1NjQgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOwo+ID4gKyAg ICAgICBjb25zdCB1NjQgICAgICAgICAgICAgICAgICAgICAgIG1hc2s7Cj4gPiArfTsKPiA+ICsK PiA+ICtlbnVtIHRyYXBfZ3JvdXAgewo+ID4gKyAgICAgICAvKiBJbmRpY2F0ZXMgbm8gY29hcnNl IHRyYXAgY29udHJvbCAqLwo+ID4gKyAgICAgICBfX1JFU0VSVkVEX18sCj4gPiArCj4gPiArICAg ICAgIC8qCj4gPiArICAgICAgICAqIFRoZSBmaXJzdCBiYXRjaCBvZiBJRHMgZGVub3RlIGNvYXJz ZSB0cmFwcGluZyB0aGF0IGFyZSB1c2VkCj4gPiArICAgICAgICAqIG9uIHRoZWlyIG93biBpbnN0 ZWFkIG9mIGJlaW5nIHBhcnQgb2YgYSBjb21iaW5hdGlvbiBvZgo+ID4gKyAgICAgICAgKiB0cmFw IGNvbnRyb2xzLgo+ID4gKyAgICAgICAgKi8KPiA+ICsKPiA+ICsgICAgICAgLyoKPiA+ICsgICAg ICAgICogQW55dGhpbmcgYWZ0ZXIgdGhpcyBwb2ludCBpcyBhIGNvbWJpbmF0aW9uIG9mIHRyYXAg Y29udHJvbHMsCj4gPiArICAgICAgICAqIHdoaWNoIGFsbCBtdXN0IGJlIGV2YWx1YXRlZCB0byBk ZWNpZGUgd2hhdCB0byBkby4KPiA+ICsgICAgICAgICovCj4gPiArICAgICAgIF9fTVVMVElQTEVf Q09OVFJPTF9CSVRTX18sCj4gPiArCj4gPiArICAgICAgIC8qCj4gPiArICAgICAgICAqIEFueXRo aW5nIGFmdGVyIHRoaXMgcG9pbnQgcmVxdWlyZXMgYSBjYWxsYmFjayBldmFsdWF0aW5nIGEKPiA+ ICsgICAgICAgICogY29tcGxleCB0cmFwIGNvbmRpdGlvbi4gSG9wZWZ1bGx5IHdlJ2xsIG5ldmVy IG5lZWQgdGhpcy4uLgo+ID4gKyAgICAgICAgKi8KPiA+ICsgICAgICAgX19DT01QTEVYX0NPTkRJ VElPTlNfXywKPiA+ICsKPiA+ICsgICAgICAgLyogTXVzdCBiZSBsYXN0ICovCj4gPiArICAgICAg IF9fTlJfVFJBUF9HUk9VUF9JRFNfXwo+ID4gK307Cj4gPiArCj4gPiArc3RhdGljIGNvbnN0IHN0 cnVjdCB0cmFwX2JpdHMgY29hcnNlX3RyYXBfYml0c1tdID0gewo+ID4gK307Cj4gPiArCj4gPiAr I2RlZmluZSBNQ0IoaWQsIC4uLikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK PiA+ICsgICAgICAgW2lkIC0gX19NVUxUSVBMRV9DT05UUk9MX0JJVFNfX10gICAgICAgID0gICAg ICAgXAo+ID4gKyAgICAgICAgICAgICAgIChjb25zdCBlbnVtIHRyYXBfZ3JvdXAgW10peyAgICAg ICAgICAgICBcCj4gPiArICAgICAgICAgICAgICAgICAgICAgICBfX1ZBX0FSR1NfXywgX19SRVNF UlZFRF9fICAgICAgIFwKPiA+ICsgICAgICAgICAgICAgICB9Cj4gPiArCj4gPiArc3RhdGljIGNv bnN0IGVudW0gdHJhcF9ncm91cCAqY29hcnNlX2NvbnRyb2xfY29tYm9bXSA9IHsKPiA+ICt9Owo+ ID4gKwo+ID4gK3R5cGVkZWYgZW51bSB0cmFwX2JlaGF2aW91ciAoKmNvbXBsZXhfY29uZGl0aW9u X2NoZWNrKShzdHJ1Y3Qga3ZtX3ZjcHUgKik7Cj4gPiArCj4gPiArI2RlZmluZSBDQ0MoaWQsIGZu KSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCj4gPiArICAgICAgIFtpZCAtIF9fQ09NUExF WF9DT05ESVRJT05TX19dID0gZm4KPiA+ICsKPiA+ICtzdGF0aWMgY29uc3QgY29tcGxleF9jb25k aXRpb25fY2hlY2sgY2NjW10gPSB7Cj4gPiArfTsKPiA+ICsKPiA+ICsvKgo+ID4gKyAqIEJpdCBh c3NpZ25tZW50IGZvciB0aGUgdHJhcCBjb250cm9scy4gV2UgdXNlIGEgNjRiaXQgd29yZCB3aXRo IHRoZQo+ID4gKyAqIGZvbGxvd2luZyBsYXlvdXQgZm9yIGVhY2ggdHJhcHBlZCBzeXNyZWc6Cj4g PiArICoKPiA+ICsgKiBbOTowXSAgICAgICBlbnVtIHRyYXBfZ3JvdXAgKDEwIGJpdHMpCj4gPiAr ICogWzEzOjEwXSAgICAgZW51bSBmZ3RfZ3JvdXBfaWQgKDQgYml0cykKPiA+ICsgKiBbMTk6MTRd ICAgICBiaXQgbnVtYmVyIGluIHRoZSBGR1QgcmVnaXN0ZXIgKDYgYml0cykKPiA+ICsgKiBbMjBd ICAgICAgICAgICAgICAgIHRyYXAgcG9sYXJpdHkgKDEgYml0KQo+ID4gKyAqIFs2MjoyMV0gICAg IFVudXNlZCAoNDIgYml0cykKPiA+ICsgKiBbNjNdICAgICAgICAgICAgICAgIFJFUzAgLSBNdXN0 IGJlIHplcm8sIGFzIGxvc3Qgb24gaW5zZXJ0aW9uIGluIHRoZSB4YXJyYXkKPiA+ICsgKi8KPiA+ ICsjZGVmaW5lIFRDX0NHVF9CSVRTICAgIDEwCj4gPiArI2RlZmluZSBUQ19GR1RfQklUUyAgICA0 Cj4gPiArCj4gPiArdW5pb24gdHJhcF9jb25maWcgewo+ID4gKyAgICAgICB1NjQgICAgIHZhbDsK PiA+ICsgICAgICAgc3RydWN0IHsKPiA+ICsgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICAg Y2d0OlRDX0NHVF9CSVRTOyAvKiBDb2Fyc2UgdHJhcCBpZCAqLwo+ID4gKyAgICAgICAgICAgICAg IHVuc2lnbmVkIGxvbmcgICBmZ3Q6VENfRkdUX0JJVFM7IC8qIEZpbmcgR3JhaW5lZCBUcmFwIGlk ICovCj4gCj4gV291bGQgaXQgYmUgYmV0dGVyIHRvIGxlYXZlIHRoZSBkZWZpbml0aW9uIG9mIEZH VCBmaWVsZCB0byBwYXRjaCAxOS8yNwo+IHdoaWNoIGFkZHMgdGhlIGluZnJhc3RydWN0dXJlIGZv ciBGR1QgZm9yd2FyZGluZz8KCkl0IGRvZXNuJ3QgbWF0dGVyIG11Y2gsIGJ1dCBJIGNhbiBtb3Zl IGl0LgoKPiAKPiA+ICsgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICAgYml0OjY7ICAgICAg ICAgICAvKiBCaXQgbnVtYmVyICovCj4gPiArICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAg IHBvbDoxOyAgICAgICAgICAgLyogUG9sYXJpdHkgKi8KPiA+ICsgICAgICAgICAgICAgICB1bnNp Z25lZCBsb25nICAgdW5rOjQyOyAgICAgICAgICAvKiBVbmtub3duICovCj4gPiArICAgICAgICAg ICAgICAgdW5zaWduZWQgbG9uZyAgIG1iejoxOyAgICAgICAgICAgLyogTXVzdCBCZSBaZXJvICov Cj4gPiArICAgICAgIH07Cj4gPiArfTsKPiA+ICsKPiA+ICtzdHJ1Y3QgZW5jb2RpbmdfdG9fdHJh cF9jb25maWcgewo+ID4gKyAgICAgICBjb25zdCB1MzIgICAgICAgICAgICAgICAgICAgICAgIGVu Y29kaW5nOwo+ID4gKyAgICAgICBjb25zdCB1MzIgICAgICAgICAgICAgICAgICAgICAgIGVuZDsK PiA+ICsgICAgICAgY29uc3QgdW5pb24gdHJhcF9jb25maWcgICAgICAgICB0YzsKPiA+ICt9Owo+ ID4gKwo+ID4gKyNkZWZpbmUgU1JfUkFOR0VfVFJBUChzcl9zdGFydCwgc3JfZW5kLCB0cmFwX2lk KSAgICAgICAgICAgICAgICAgICAgICAgXAo+ID4gKyAgICAgICB7ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAo+ID4gKyAgICAg ICAgICAgICAgIC5lbmNvZGluZyAgICAgICA9IHNyX3N0YXJ0LCAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAo+ID4gKyAgICAgICAgICAgICAgIC5lbmQgICAgICAgICAgICA9IHNyX2VuZCwg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAo+ID4gKyAgICAgICAgICAgICAgIC50YyAg ICAgICAgICAgICA9IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAo+ID4g KyAgICAgICAgICAgICAgICAgICAgICAgLmNndCAgICAgICAgICAgID0gdHJhcF9pZCwgICAgICAg ICAgICAgICAgICAgICAgXAo+ID4gKyAgICAgICAgICAgICAgIH0sICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAo+ID4gKyAgICAgICB9Cj4gPiAr Cj4gPiArI2RlZmluZSBTUl9UUkFQKHNyLCB0cmFwX2lkKSAgICAgICAgICAgU1JfUkFOR0VfVFJB UChzciwgc3IsIHRyYXBfaWQpCj4gPiArCj4gPiArLyoKPiA+ICsgKiBNYXAgZW5jb2RpbmcgdG8g dHJhcCBiaXRzIGZvciBleGNlcHRpb24gcmVwb3J0ZWQgd2l0aCBFQz0weDE4Lgo+ID4gKyAqIFRo ZXNlIG11c3Qgb25seSBiZSBldmFsdWF0ZWQgd2hlbiBydW5uaW5nIGEgbmVzdGVkIGh5cGVydmlz b3IsIGJ1dAo+ID4gKyAqIHRoYXQgdGhlIGN1cnJlbnQgY29udGV4dCBpcyBub3QgYSBoeXBlcnZp c29yIGNvbnRleHQuIFdoZW4gdGhlCj4gPiArICogdHJhcHBlZCBhY2Nlc3MgbWF0Y2hlcyBvbmUg b2YgdGhlIHRyYXAgY29udHJvbHMsIHRoZSBleGNlcHRpb24gaXMKPiA+ICsgKiByZS1pbmplY3Rl ZCBpbiB0aGUgbmVzdGVkIGh5cGVydmlzb3IuCj4gPiArICovCj4gPiArc3RhdGljIGNvbnN0IHN0 cnVjdCBlbmNvZGluZ190b190cmFwX2NvbmZpZyBlbmNvZGluZ190b19jZ3RbXSBfX2luaXRjb25z dCA9IHsKPiA+ICt9Owo+ID4gKwo+ID4gK3N0YXRpYyBERUZJTkVfWEFSUkFZKHNyX2ZvcndhcmRf eGEpOwo+ID4gKwo+ID4gK3N0YXRpYyB1bmlvbiB0cmFwX2NvbmZpZyBnZXRfdHJhcF9jb25maWco dTMyIHN5c3JlZykKPiA+ICt7Cj4gPiArICAgICAgIHJldHVybiAodW5pb24gdHJhcF9jb25maWcp IHsKPiA+ICsgICAgICAgICAgICAgICAudmFsID0geGFfdG9fdmFsdWUoeGFfbG9hZCgmc3JfZm9y d2FyZF94YSwgc3lzcmVnKSksCj4gPiArICAgICAgIH07Cj4gPiArfQo+ID4gKwo+ID4gK2ludCBf X2luaXQgcG9wdWxhdGVfbnZfdHJhcF9jb25maWcodm9pZCkKPiA+ICt7Cj4gPiArICAgICAgIGlu dCByZXQgPSAwOwo+ID4gKwo+ID4gKyAgICAgICBCVUlMRF9CVUdfT04oc2l6ZW9mKHVuaW9uIHRy YXBfY29uZmlnKSAhPSBzaXplb2Yodm9pZCAqKSk7Cj4gPiArICAgICAgIEJVSUxEX0JVR19PTihf X05SX1RSQVBfR1JPVVBfSURTX18gPiBCSVQoVENfQ0dUX0JJVFMpKTsKPiA+ICsKPiA+ICsgICAg ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGVuY29kaW5nX3RvX2NndCk7IGkrKykg ewo+ID4gKyAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBlbmNvZGluZ190b190cmFwX2NvbmZp ZyAqY2d0ID0gJmVuY29kaW5nX3RvX2NndFtpXTsKPiA+ICsgICAgICAgICAgICAgICB2b2lkICpw cmV2Owo+ID4gKwo+ID4gKyAgICAgICAgICAgICAgIHByZXYgPSB4YV9zdG9yZV9yYW5nZSgmc3Jf Zm9yd2FyZF94YSwgY2d0LT5lbmNvZGluZywgY2d0LT5lbmQsCj4gPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHhhX21rX3ZhbHVlKGNndC0+dGMudmFsKSwgR0ZQX0tFUk5F TCk7Cj4gPiArCj4gPiArICAgICAgICAgICAgICAgaWYgKHByZXYpIHsKPiA+ICsgICAgICAgICAg ICAgICAgICAgICAgIGt2bV9lcnIoIkR1cGxpY2F0ZSBDR1QgZm9yICglZCwgJWQsICVkLCAlZCwg JWQpXG4iLAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXNfcmVnX09wMChj Z3QtPmVuY29kaW5nKSwKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzX3Jl Z19PcDEoY2d0LT5lbmNvZGluZyksCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHN5c19yZWdfQ1JuKGNndC0+ZW5jb2RpbmcpLAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBzeXNfcmVnX0NSbShjZ3QtPmVuY29kaW5nKSwKPiA+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgc3lzX3JlZ19PcDIoY2d0LT5lbmNvZGluZykpOwo+ID4gKyAgICAgICAg ICAgICAgICAgICAgICAgcmV0ID0gLUVJTlZBTDsKPiA+ICsgICAgICAgICAgICAgICB9Cj4gCj4g VGhlIHhhX3N0b3JlX3JhbmdlIHdvdWxkIG9ubHkgcmV0dXJuIG5vbi1OVUxMIHdoZW4gdGhlIGVu dHJ5IGNhbm5vdCBiZQo+IHN0b3JlZCAoWEFfRVJST1IoLUVJTlZBTCkpIG9yIG1lbW9yeSBhbGxv Y2F0aW9uIGZhaWxlZAo+IChYQV9FUlJPUigtRU5PTUVNKSkuCj4gQW5vdGhlciB3YXkgbWF5IGJl IG5lZWRlZCB0byBkZXRlY3QgZHVwbGljYXRlIENHVC4KCkh1aCwgd2VsbCBzcG90dGVkLiBJJ3Zl IGFkZGVkIGNvZGUgdG8gZmFsbGJhY2sgdG8geGFfc3RvcmUoKSB3aGVuIG5vdApkZWFsaW5nIHdp dGggYW4gYWN0dWFsIHJhbmdlLCBhbmQgbm93IGhhdmUgc29tZSBjb2RlIHRvIGRlYWwgd2l0aCB0 aGUKZXJyb3IgcGF0aC4gVW5mb3J0dW5hdGVseSwgSSBjYW4ndCBzZWUgYW4gZWFzeSB3YXkgdG8g ZGVhbCB3aXRoCm92ZXJsYXBwaW5nIHJhbmdlcyBvbiBpbnNlcnRpb24sIGFuZCB3ZSdsbCBoYXZl IHRvIGRlYWwgd2l0aCB0aGUKcG9zc2liaWxpdHkgdGhhdCBzb21lb25lIGhhcyBtZXNzZWQgdXAu Cgo+IAo+ID4gKyAgICAgICB9Cj4gPiArCj4gPiArICAgICAgIGt2bV9pbmZvKCJudjogJWxkIGNv YXJzZSBncmFpbmVkIHRyYXAgaGFuZGxlcnNcbiIsCj4gPiArICAgICAgICAgICAgICAgIEFSUkFZ X1NJWkUoZW5jb2RpbmdfdG9fY2d0KSk7Cj4gPiArCj4gPiArICAgICAgIGZvciAoaW50IGlkID0g X19NVUxUSVBMRV9DT05UUk9MX0JJVFNfXzsKPiA+ICsgICAgICAgICAgICBpZCA8IChfX0NPTVBM RVhfQ09ORElUSU9OU19fIC0gMSk7Cj4gPiArICAgICAgICAgICAgaWQrKykgewo+ID4gKyAgICAg ICAgICAgICAgIGNvbnN0IGVudW0gdHJhcF9ncm91cCAqY2dpZHM7Cj4gPiArCj4gPiArICAgICAg ICAgICAgICAgY2dpZHMgPSBjb2Fyc2VfY29udHJvbF9jb21ib1tpZCAtIF9fTVVMVElQTEVfQ09O VFJPTF9CSVRTX19dOwo+ID4gKwo+ID4gKyAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBj Z2lkc1tpXSAhPSBfX1JFU0VSVkVEX187IGkrKykgewo+ID4gKyAgICAgICAgICAgICAgICAgICAg ICAgaWYgKGNnaWRzW2ldID49IF9fTVVMVElQTEVfQ09OVFJPTF9CSVRTX18pIHsKPiA+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAga3ZtX2VycigiUmVjdXJzaXZlIE1DQiAlZC8lZFxu IiwgaWQsIGNnaWRzW2ldKTsKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0 ID0gLUVJTlZBTDsKPiAKPiBJIGFtIGNvbmZ1c2VkIGFib3V0IHRoZSBhYm92ZSBjaGVjayBmb3Ig cmVjdXJzaXZlIE1DQi4gSW4gcGF0Y2ggMTcvMjksCj4gYSByZWN1cnNpdmUgTUNEIGlzIGFkZGVk IGFuZCBsb29rcyBsaWtlIHJlY3Vyc2l2ZSBNQ0IgaXMgYWxsb3dlZCBhcwo+IHNob3duIGluIF9f ZG9fY29tcHV0ZV90cmFwX2JlaGF2aW91cigpLgoKWWVhaCwgeW91J3JlIGFic29sdXRlbHkgcmln aHQuIFRoZSByZWFzb24gaXQgZG9lc24ndCBmaXJlIGlzIGJlY2F1c2UKdGhlIG91dGVyIGl0ZXJh dG9yIGlzIGJyb2tlbiwgYXMgcG9pbnRlZCBvdXQgYnkgTWlndWVsICh0aGUgbGFzdCBNQ0IKaXMg bmV2ZXIgY2hlY2tlZCkuIE5vdCB0aGF0IHJlY3Vyc2l2ZSBNQ0JzIGFyZSBldmlsIG9uIHRoZWly IG93biwgYnV0CnBlb3BsZSBhcmUgbGVnaXRpbWF0ZWx5IHNjYXJlZCBhYm91dCB0aGVtLiBIb3dl dmVyLCBJIHdhbnQgdGhlIGNoZWNrCnRvIGJlIGRvbmUgYXQgYm9vdCB0aW1lLCBhbmQgbm90IGF0 IGhhbmRsaW5nIHRpbWUuCgpJJ3ZlIG5vdyBmaXhlZCB0aGUgaXRlcmF0b3IsIGFuZCBzcGxpdCBD R1RfTURDUl9URENDX1RERV9UREEgaW50byAzCmRpZmZlcmVudCBiaXRzLCBnZXR0aW5nIHJpZCBv ZiB0aGUgc29sZSByZWN1cnNpdmUgTUNCLgoKPiAKPiA+ICsgICAgICAgICAgICAgICAgICAgICAg IH0KPiA+ICsgICAgICAgICAgICAgICB9Cj4gPiArICAgICAgIH0KPiA+ICsKPiA+ICsgICAgICAg aWYgKHJldCkKPiA+ICsgICAgICAgICAgICAgICB4YV9kZXN0cm95KCZzcl9mb3J3YXJkX3hhKTsK PiA+ICsKPiA+ICsgICAgICAgcmV0dXJuIHJldDsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIGVu dW0gdHJhcF9iZWhhdmlvdXIgZ2V0X2JlaGF2aW91cihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCj4g PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCB0 cmFwX2JpdHMgKnRiKQo+ID4gK3sKPiA+ICsgICAgICAgZW51bSB0cmFwX2JlaGF2aW91ciBiID0g QkVIQVZFX0hBTkRMRV9MT0NBTExZOwo+ID4gKyAgICAgICB1NjQgdmFsOwo+ID4gKwo+ID4gKyAg ICAgICB2YWwgPSBfX3ZjcHVfc3lzX3JlZyh2Y3B1LCB0Yi0+aW5kZXgpOwo+ID4gKyAgICAgICBp ZiAoKHZhbCAmIHRiLT5tYXNrKSA9PSB0Yi0+dmFsdWUpCj4gPiArICAgICAgICAgICAgICAgYiB8 PSB0Yi0+YmVoYXZpb3VyOwo+ID4gKwo+ID4gKyAgICAgICByZXR1cm4gYjsKPiA+ICt9Cj4gPiAr Cj4gPiArc3RhdGljIGVudW0gdHJhcF9iZWhhdmlvdXIgX19kb19jb21wdXRlX3RyYXBfYmVoYXZp b3VyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlbnVtIHRyYXBfZ3JvdXAgaWQsCj4g PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ZW51bSB0cmFwX2JlaGF2aW91ciBiKQo+ID4gK3sKPiA+ICsgICAgICAgc3dpdGNoIChpZCkgewo+ ID4gKyAgICAgICAgICAgICAgIGNvbnN0IGVudW0gdHJhcF9ncm91cCAqY2dpZHM7Cj4gPiArCj4g PiArICAgICAgIGNhc2UgX19SRVNFUlZFRF9fIC4uLiBfX01VTFRJUExFX0NPTlRST0xfQklUU19f IC0gMToKPiA+ICsgICAgICAgICAgICAgICBpZiAobGlrZWx5KGlkICE9IF9fUkVTRVJWRURfXykp Cj4gPiArICAgICAgICAgICAgICAgICAgICAgICBiIHw9IGdldF9iZWhhdmlvdXIodmNwdSwgJmNv YXJzZV90cmFwX2JpdHNbaWRdKTsKPiA+ICsgICAgICAgICAgICAgICBicmVhazsKPiA+ICsgICAg ICAgY2FzZSBfX01VTFRJUExFX0NPTlRST0xfQklUU19fIC4uLiBfX0NPTVBMRVhfQ09ORElUSU9O U19fIC0gMToKPiA+ICsgICAgICAgICAgICAgICAvKiBZZXMsIHRoaXMgaXMgcmVjdXJzaXZlLiBE b24ndCBkbyBhbnl0aGluZyBzdHVwaWQuICovCj4gPiArICAgICAgICAgICAgICAgY2dpZHMgPSBj b2Fyc2VfY29udHJvbF9jb21ib1tpZCAtIF9fTVVMVElQTEVfQ09OVFJPTF9CSVRTX19dOwo+ID4g KyAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBjZ2lkc1tpXSAhPSBfX1JFU0VSVkVEX187 IGkrKykKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIGIgfD0gX19kb19jb21wdXRlX3RyYXBf YmVoYXZpb3VyKHZjcHUsIGNnaWRzW2ldLCBiKTsKPiA+ICsgICAgICAgICAgICAgICBicmVhazsK PiA+ICsgICAgICAgZGVmYXVsdDoKPiA+ICsgICAgICAgICAgICAgICBpZiAoQVJSQVlfU0laRShj Y2MpKQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgYiB8PSBjY2NbaWQgLSAgX19DT01QTEVY X0NPTkRJVElPTlNfX10odmNwdSk7Cj4gPiArICAgICAgICAgICAgICAgYnJlYWs7Cj4gPiArICAg ICAgIH0KPiA+ICsKPiA+ICsgICAgICAgcmV0dXJuIGI7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRp YyBlbnVtIHRyYXBfYmVoYXZpb3VyIGNvbXB1dGVfdHJhcF9iZWhhdmlvdXIoc3RydWN0IGt2bV92 Y3B1ICp2Y3B1LAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBjb25zdCB1bmlvbiB0cmFwX2NvbmZpZyB0YykKPiA+ICt7Cj4gPiArICAgICAgIGVu dW0gdHJhcF9iZWhhdmlvdXIgYiA9IEJFSEFWRV9IQU5ETEVfTE9DQUxMWTsKPiA+ICsKPiA+ICsg ICAgICAgcmV0dXJuIF9fZG9fY29tcHV0ZV90cmFwX2JlaGF2aW91cih2Y3B1LCB0Yy5jZ3QsIGIp Owo+ID4gK30KPiA+ICsKPiA+ICtib29sIF9fY2hlY2tfbnZfc3JfZm9yd2FyZChzdHJ1Y3Qga3Zt X3ZjcHUgKnZjcHUpCj4gPiArewo+ID4gKyAgICAgICB1bmlvbiB0cmFwX2NvbmZpZyB0YzsKPiA+ ICsgICAgICAgZW51bSB0cmFwX2JlaGF2aW91ciBiOwo+ID4gKyAgICAgICBib29sIGlzX3JlYWQ7 Cj4gPiArICAgICAgIHUzMiBzeXNyZWc7Cj4gPiArICAgICAgIHU2NCBlc3I7Cj4gPiArCj4gPiAr ICAgICAgIGlmICghdmNwdV9oYXNfbnYodmNwdSkgfHwgaXNfaHlwX2N0eHQodmNwdSkpCj4gPiAr ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwo+ID4gKwo+ID4gKyAgICAgICBlc3IgPSBrdm1f dmNwdV9nZXRfZXNyKHZjcHUpOwo+ID4gKyAgICAgICBzeXNyZWcgPSBlc3Jfc3lzNjRfdG9fc3lz cmVnKGVzcik7Cj4gPiArICAgICAgIGlzX3JlYWQgPSAoZXNyICYgRVNSX0VMeF9TWVM2NF9JU1Nf RElSX01BU0spID09IEVTUl9FTHhfU1lTNjRfSVNTX0RJUl9SRUFEOwo+ID4gKwo+ID4gKyAgICAg ICB0YyA9IGdldF90cmFwX2NvbmZpZyhzeXNyZWcpOwo+ID4gKwo+ID4gKyAgICAgICAvKgo+ID4g KyAgICAgICAgKiBBIHZhbHVlIG9mIDAgZm9yIHRoZSB3aG9sZSBlbnRyeSBtZWFucyB0aGF0IHdl IGtub3cgbm90aGluZwo+ID4gKyAgICAgICAgKiBmb3IgdGhpcyBzeXNyZWcsIGFuZCB0aGF0IGl0 IGNhbm5vdCBiZSBmb3J3YXJlZGVkLiBJbiB0aGlzCj4gPiArICAgICAgICAqIHNpdHVhdGlvbiwg bGV0J3MgY3V0IGl0IHNob3J0Lgo+ID4gKyAgICAgICAgKgo+ID4gKyAgICAgICAgKiBOb3RlIHRo YXQgdWx0aW1hdGVseSwgd2UgY291bGQgYWxzbyBtYWtlIHVzZSBvZiB0aGUgeGFycmF5Cj4gPiAr ICAgICAgICAqIHRvIHN0b3JlIHRoZSBpbmRleCBvZiB0aGUgc3lzcmVnIGluIHRoZSBsb2NhbCBk ZXNjcmlwdG9yCj4gPiArICAgICAgICAqIGFycmF5LCBhdm9pZGluZyBhbm90aGVyIHNlYXJjaC4u LiBIaW50LCBoaW50Li4uCj4gPiArICAgICAgICAqLwo+ID4gKyAgICAgICBpZiAoIXRjLnZhbCkK PiA+ICsgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cj4gPiArCj4gPiArICAgICAgIGIgPSBj b21wdXRlX3RyYXBfYmVoYXZpb3VyKHZjcHUsIHRjKTsKPiA+ICsKPiA+ICsgICAgICAgaWYgKCgo YiAmIEJFSEFWRV9GT1JXQVJEX1JFQUQpICYmIGlzX3JlYWQpIHx8Cj4gPiArICAgICAgICAgICAo KGIgJiBCRUhBVkVfRk9SV0FSRF9XUklURSkgJiYgIWlzX3JlYWQpKQo+ID4gKyAgICAgICAgICAg ICAgIGdvdG8gaW5qZWN0Owo+ID4gKwo+ID4gKyAgICAgICByZXR1cm4gZmFsc2U7Cj4gPiArCj4g PiAraW5qZWN0Ogo+ID4gKyAgICAgICB0cmFjZV9rdm1fZm9yd2FyZF9zeXNyZWdfdHJhcCh2Y3B1 LCBzeXNyZWcsIGlzX3JlYWQpOwo+ID4gKwo+ID4gKyAgICAgICBrdm1faW5qZWN0X25lc3RlZF9z eW5jKHZjcHUsIGt2bV92Y3B1X2dldF9lc3IodmNwdSkpOwo+ID4gKyAgICAgICByZXR1cm4gdHJ1 ZTsKPiA+ICt9Cj4gPiArCj4gPiAgc3RhdGljIHU2NCBrdm1fY2hlY2tfaWxsZWdhbF9leGNlcHRp b25fcmV0dXJuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHNwc3IpCj4gPiAgewo+ID4gICAg ICAgICB1NjQgbW9kZSA9IHNwc3IgJiBQU1JfTU9ERV9NQVNLOwo+ID4gZGlmZiAtLWdpdCBhL2Fy Y2gvYXJtNjQva3ZtL3N5c19yZWdzLmMgYi9hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jCj4gPiBp bmRleCBmNWJhYWE1MDg5MjYuLmRmZDcyYjNhNjI1ZiAxMDA2NDQKPiA+IC0tLSBhL2FyY2gvYXJt NjQva3ZtL3N5c19yZWdzLmMKPiA+ICsrKyBiL2FyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmMKPiA+ IEBAIC0zMTc3LDYgKzMxNzcsOSBAQCBpbnQga3ZtX2hhbmRsZV9zeXNfcmVnKHN0cnVjdCBrdm1f dmNwdSAqdmNwdSkKPiA+Cj4gPiAgICAgICAgIHRyYWNlX2t2bV9oYW5kbGVfc3lzX3JlZyhlc3Ip Owo+ID4KPiA+ICsgICAgICAgaWYgKF9fY2hlY2tfbnZfc3JfZm9yd2FyZCh2Y3B1KSkKPiA+ICsg ICAgICAgICAgICAgICByZXR1cm4gMTsKPiA+ICsKPiA+ICAgICAgICAgcGFyYW1zID0gZXNyX3N5 czY0X3RvX3BhcmFtcyhlc3IpOwo+ID4gICAgICAgICBwYXJhbXMucmVndmFsID0gdmNwdV9nZXRf cmVnKHZjcHUsIFJ0KTsKPiA+Cj4gPiBAQCAtMzU5NCw1ICszNTk3LDggQEAgaW50IF9faW5pdCBr dm1fc3lzX3JlZ190YWJsZV9pbml0KHZvaWQpCj4gPiAgICAgICAgIGlmICghZmlyc3RfaWRyZWcp Cj4gPiAgICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7Cj4gPgo+ID4gKyAgICAgICBpZiAo a3ZtX2dldF9tb2RlKCkgPT0gS1ZNX01PREVfTlYpCj4gPiArICAgICAgICAgICAgICAgcG9wdWxh dGVfbnZfdHJhcF9jb25maWcoKTsKPiAKPiBEbyB3ZSBuZWVkIHRvIGNoZWNrIHRoZSByZXR1cm4g dmFsdWUgb2YgcG9wdWxhdGVfbnZfdHJhcF9jb25maWcoKSBhbmQKPiBmYWlsIHRoZSBpbml0aWFs aXphdGlvbiBpZiB0aGUgcmV0dXJuIHZhbHVlIGlzIG5vbi16ZXJvPwoKSW5kZWVkLCBJIGZvcmdv dCBhYm91dCBpdC4gTm93IGZpeGVkLgoKVGhhbmtzLAoKCU0uCgotLSAKV2l0aG91dCBkZXZpYXRp b24gZnJvbSB0aGUgbm9ybSwgcHJvZ3Jlc3MgaXMgbm90IHBvc3NpYmxlLgoKX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KbGludXgtYXJtLWtlcm5lbCBtYWls aW5nIGxpc3QKbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0 cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtYXJtLWtlcm5lbAo=