From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 97DB67E for ; Sat, 26 Aug 2023 10:51:19 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 092A9C433C7; Sat, 26 Aug 2023 10:51:19 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1693047079; bh=P71fNEsmNmi49zzw500omXgcWHcNUIdoP9+jGwHPSqA=; h=Date:From:To:Cc:Subject:In-Reply-To:References:From; b=HDmV/4maL6U2JYHEsHR3WIRw62Y6M4IxKBBmC2HnG/Det88Do+zccdytuXHqk7Hvc YMa8BBrjunxEi8Rtky45H13sN1lIjp8wO4X4uNWgLqo2v5VSlm0E73IToQjSG6/Sy/ 9SVpks5gr9gy64+HQ5Lad2H+Rb6ORwNWHJto3/nnYTEQtnQhpeZY43FBfhPSOW4Xu5 7QcNifJBG/nJze2BEzaTMvn3i9ToDwHZFpKs/xJi3wSGXyDo8n7du6+p92on0Ql5/P +bsadfPVzhmSQ7KQKr+r5TKeFq5fArXzC8s+X80r96RfBOoObF5pQ9fmxsgxJmnFrZ do3IFJX3BAy/g== Received: from sofa.misterjones.org ([185.219.108.64] helo=goblin-girl.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 1qZqsu-008Gvp-Ej; Sat, 26 Aug 2023 11:51:16 +0100 Date: Sat, 26 Aug 2023 11:51:16 +0100 Message-ID: <86a5uef55n.wl-maz@kernel.org> From: Marc Zyngier To: Jing Zhang Cc: KVM , KVMARM , ARMLinux , Oliver Upton , Will Deacon , Paolo Bonzini , James Morse , Alexandru Elisei , Suzuki K Poulose , Fuad Tabba , Reiji Watanabe , Raghavendra Rao Ananta , Suraj Jitindar Singh , Cornelia Huck , Shaoqin Huang Subject: Re: [PATCH v9 05/11] KVM: arm64: Enable writable for ID_AA64DFR0_EL1 and ID_DFR0_EL1 In-Reply-To: References: <20230821212243.491660-1-jingzhangos@google.com> <20230821212243.491660-6-jingzhangos@google.com> <878ra3pndw.wl-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 (aarch64-unknown-linux-gnu) MULE/6.0 (HANACHIRUSATO) Precedence: bulk X-Mailing-List: kvmarm@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 (generated by SEMI-EPG 1.14.7 - "Harue") Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable X-SA-Exim-Connect-IP: 185.219.108.64 X-SA-Exim-Rcpt-To: jingzhangos@google.com, kvm@vger.kernel.org, kvmarm@lists.linux.dev, linux-arm-kernel@lists.infradead.org, oliver.upton@linux.dev, will@kernel.org, pbonzini@redhat.com, james.morse@arm.com, alexandru.elisei@arm.com, suzuki.poulose@arm.com, tabba@google.com, reijiw@google.com, rananta@google.com, surajjs@amazon.com, cohuck@redhat.com, shahuang@redhat.com X-SA-Exim-Mail-From: maz@kernel.org X-SA-Exim-Scanned: No (on disco-boy.misterjones.org); SAEximRunCond expanded to false On Tue, 22 Aug 2023 19:35:12 +0100, Jing Zhang wrote: >=20 > Hi Marc, >=20 > On Tue, Aug 22, 2023 at 12:06=E2=80=AFAM Marc Zyngier wr= ote: > > > > On Mon, 21 Aug 2023 22:22:37 +0100, > > Jing Zhang wrote: > > > > > > All valid fields in ID_AA64DFR0_EL1 and ID_DFR0_EL1 are writable > > > from userspace with this change. > > > RES0 fields and those fields hidden by KVM are not writable. > > > > > > Signed-off-by: Jing Zhang > > > --- > > > arch/arm64/kvm/sys_regs.c | 6 ++++-- > > > 1 file changed, 4 insertions(+), 2 deletions(-) > > > > > > diff --git a/arch/arm64/kvm/sys_regs.c b/arch/arm64/kvm/sys_regs.c > > > index afade7186675..20fc38bad4e8 100644 > > > --- a/arch/arm64/kvm/sys_regs.c > > > +++ b/arch/arm64/kvm/sys_regs.c > > > @@ -1931,6 +1931,8 @@ static bool access_spsr(struct kvm_vcpu *vcpu, > > > return true; > > > } > > > > > > +#define ID_AA64DFR0_EL1_RES0_MASK (GENMASK(59, 56) | GENMASK(27, 24)= | GENMASK(19, 16)) > > > + > > > /* > > > * Architected system registers. > > > * Important: Must be sorted ascending by Op0, Op1, CRn, CRm, Op2 > > > @@ -2006,7 +2008,7 @@ static const struct sys_reg_desc sys_reg_descs[= ] =3D { > > > .set_user =3D set_id_dfr0_el1, > > > .visibility =3D aa32_id_visibility, > > > .reset =3D read_sanitised_id_dfr0_el1, > > > - .val =3D ID_DFR0_EL1_PerfMon_MASK, }, > > > + .val =3D GENMASK(31, 0), }, > > > > Can you *please* look at the register and realise that we *don't* > > support writing to the whole of the low 32 bits? What does it mean to > > allow selecting the M-profile debug? Or the memory-mapped trace? > > > > You are advertising a lot of crap to userspace, and that's definitely > > not on. > > > > > ID_HIDDEN(ID_AFR0_EL1), > > > AA32_ID_SANITISED(ID_MMFR0_EL1), > > > AA32_ID_SANITISED(ID_MMFR1_EL1), > > > @@ -2055,7 +2057,7 @@ static const struct sys_reg_desc sys_reg_descs[= ] =3D { > > > .get_user =3D get_id_reg, > > > .set_user =3D set_id_aa64dfr0_el1, > > > .reset =3D read_sanitised_id_aa64dfr0_el1, > > > - .val =3D ID_AA64DFR0_EL1_PMUVer_MASK, }, > > > + .val =3D ~(ID_AA64DFR0_EL1_PMSVer_MASK | ID_AA64DFR0_EL1_RES0= _MASK), }, > > > > And it is the same thing here. Where is the handling code to deal with > > variable breakpoint numbers? Oh wait, there is none. Really, the only > > thing we support writing to are the PMU and Debug versions. And > > nothing else. > > > > What does it mean for userspace? Either the write will be denied > > despite being advertised a writable field (remember the first patch of > > the series???), or we'll blindly accept the write and further ignore > > the requested values. Do you really think any of this is acceptable? > > > > This is the *9th* version of this series, and we're still battling > > over some extremely basic userspace issues... I don't think we can > > merge this series as is stands. >=20 > I removed sanity checks across multiple fields after the discussion > here: https://lore.kernel.org/all/ZKRC80hb4hXwW8WK@thinky-boi/ > I might have misunderstood the discussion. I thought we'd let VMM do > more complete sanity checks. The problem is that you don't even have a statement about how this is supposed to be handled. What are the rules? How can the VMM author *know*? That's my real issue with this series: at no point do we state when an ID register can be written, what are the rules that must be followed, where is the split in responsibility between KVM and the VMM, and what is the expected behaviour when the VMM exposes something that is completely outlandish to the guest (such as the M-profile debug). Do you see the issue? We can always fix the code. But once we've exposed that to userspace, there is no going back. And I really want everybody's buy-in on that front, including the VMM people. Thanks, M. --=20 Without deviation from the norm, progress is not possible. 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 AA1A8C83F11 for ; Sat, 26 Aug 2023 10:51:50 +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=1MNI35tcUFVLE6nCa9+mWpgb1F+rDXMgVXIZoROjR8s=; b=bTuLGdM8z4gaYG 8NiloDzrILP+EZcyh188ECBkadU1H84yhapK+OExYfiSJ5sCBydxLSzvgNjlDDgc+xBvnGToL/J/k gdJqqkbCGeX7SB9VCdKNc0qeCrJnlqk3cxJCW9Zbp+8VRHSGUnQ2Jr8wf/LGptOJeRD/uE7VASXNR yMsLc8yJJxHAYMQc5yGaHepHLMTR9VVQY2RjVdtpYiF93WmSsjw8CCWDK7CQbruv6yLiKUW2qnXhY 3Gv27T3gPZs0s8zxpBe6vMlR0CUD4RZQSysqHFpAmvbLlWJBhK5bQV7h2zIfY4c5j/C2iyLeuDWak 8CL97oxRnhGnu4QiFTsw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1qZqt1-006oe7-0V; Sat, 26 Aug 2023 10:51:23 +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 1qZqsy-006odD-1A for linux-arm-kernel@lists.infradead.org; Sat, 26 Aug 2023 10:51:22 +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 9E95B60F15; Sat, 26 Aug 2023 10:51:19 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 092A9C433C7; Sat, 26 Aug 2023 10:51:19 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1693047079; bh=P71fNEsmNmi49zzw500omXgcWHcNUIdoP9+jGwHPSqA=; h=Date:From:To:Cc:Subject:In-Reply-To:References:From; b=HDmV/4maL6U2JYHEsHR3WIRw62Y6M4IxKBBmC2HnG/Det88Do+zccdytuXHqk7Hvc YMa8BBrjunxEi8Rtky45H13sN1lIjp8wO4X4uNWgLqo2v5VSlm0E73IToQjSG6/Sy/ 9SVpks5gr9gy64+HQ5Lad2H+Rb6ORwNWHJto3/nnYTEQtnQhpeZY43FBfhPSOW4Xu5 7QcNifJBG/nJze2BEzaTMvn3i9ToDwHZFpKs/xJi3wSGXyDo8n7du6+p92on0Ql5/P +bsadfPVzhmSQ7KQKr+r5TKeFq5fArXzC8s+X80r96RfBOoObF5pQ9fmxsgxJmnFrZ do3IFJX3BAy/g== Received: from sofa.misterjones.org ([185.219.108.64] helo=goblin-girl.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 1qZqsu-008Gvp-Ej; Sat, 26 Aug 2023 11:51:16 +0100 Date: Sat, 26 Aug 2023 11:51:16 +0100 Message-ID: <86a5uef55n.wl-maz@kernel.org> From: Marc Zyngier To: Jing Zhang Cc: KVM , KVMARM , ARMLinux , Oliver Upton , Will Deacon , Paolo Bonzini , James Morse , Alexandru Elisei , Suzuki K Poulose , Fuad Tabba , Reiji Watanabe , Raghavendra Rao Ananta , Suraj Jitindar Singh , Cornelia Huck , Shaoqin Huang Subject: Re: [PATCH v9 05/11] KVM: arm64: Enable writable for ID_AA64DFR0_EL1 and ID_DFR0_EL1 In-Reply-To: References: <20230821212243.491660-1-jingzhangos@google.com> <20230821212243.491660-6-jingzhangos@google.com> <878ra3pndw.wl-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 (aarch64-unknown-linux-gnu) MULE/6.0 (HANACHIRUSATO) MIME-Version: 1.0 (generated by SEMI-EPG 1.14.7 - "Harue") X-SA-Exim-Connect-IP: 185.219.108.64 X-SA-Exim-Rcpt-To: jingzhangos@google.com, kvm@vger.kernel.org, kvmarm@lists.linux.dev, linux-arm-kernel@lists.infradead.org, oliver.upton@linux.dev, will@kernel.org, pbonzini@redhat.com, james.morse@arm.com, alexandru.elisei@arm.com, suzuki.poulose@arm.com, tabba@google.com, reijiw@google.com, rananta@google.com, surajjs@amazon.com, cohuck@redhat.com, shahuang@redhat.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-20230826_035120_512457_1419CFE8 X-CRM114-Status: GOOD ( 41.85 ) 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 T24gVHVlLCAyMiBBdWcgMjAyMyAxOTozNToxMiArMDEwMCwKSmluZyBaaGFuZyA8amluZ3poYW5n b3NAZ29vZ2xlLmNvbT4gd3JvdGU6Cj4gCj4gSGkgTWFyYywKPiAKPiBPbiBUdWUsIEF1ZyAyMiwg MjAyMyBhdCAxMjowNuKAr0FNIE1hcmMgWnluZ2llciA8bWF6QGtlcm5lbC5vcmc+IHdyb3RlOgo+ ID4KPiA+IE9uIE1vbiwgMjEgQXVnIDIwMjMgMjI6MjI6MzcgKzAxMDAsCj4gPiBKaW5nIFpoYW5n IDxqaW5nemhhbmdvc0Bnb29nbGUuY29tPiB3cm90ZToKPiA+ID4KPiA+ID4gQWxsIHZhbGlkIGZp ZWxkcyBpbiBJRF9BQTY0REZSMF9FTDEgYW5kIElEX0RGUjBfRUwxIGFyZSB3cml0YWJsZQo+ID4g PiBmcm9tIHVzZXJzcGFjZSB3aXRoIHRoaXMgY2hhbmdlLgo+ID4gPiBSRVMwIGZpZWxkcyBhbmQg dGhvc2UgZmllbGRzIGhpZGRlbiBieSBLVk0gYXJlIG5vdCB3cml0YWJsZS4KPiA+ID4KPiA+ID4g U2lnbmVkLW9mZi1ieTogSmluZyBaaGFuZyA8amluZ3poYW5nb3NAZ29vZ2xlLmNvbT4KPiA+ID4g LS0tCj4gPiA+ICBhcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jIHwgNiArKysrLS0KPiA+ID4gIDEg ZmlsZSBjaGFuZ2VkLCA0IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCj4gPiA+Cj4gPiA+ IGRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jIGIvYXJjaC9hcm02NC9rdm0v c3lzX3JlZ3MuYwo+ID4gPiBpbmRleCBhZmFkZTcxODY2NzUuLjIwZmMzOGJhZDRlOCAxMDA2NDQK PiA+ID4gLS0tIGEvYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYwo+ID4gPiArKysgYi9hcmNoL2Fy bTY0L2t2bS9zeXNfcmVncy5jCj4gPiA+IEBAIC0xOTMxLDYgKzE5MzEsOCBAQCBzdGF0aWMgYm9v bCBhY2Nlc3Nfc3BzcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCj4gPiA+ICAgICAgIHJldHVybiB0 cnVlOwo+ID4gPiAgfQo+ID4gPgo+ID4gPiArI2RlZmluZSBJRF9BQTY0REZSMF9FTDFfUkVTMF9N QVNLIChHRU5NQVNLKDU5LCA1NikgfCBHRU5NQVNLKDI3LCAyNCkgfCBHRU5NQVNLKDE5LCAxNikp Cj4gPiA+ICsKPiA+ID4gIC8qCj4gPiA+ICAgKiBBcmNoaXRlY3RlZCBzeXN0ZW0gcmVnaXN0ZXJz Lgo+ID4gPiAgICogSW1wb3J0YW50OiBNdXN0IGJlIHNvcnRlZCBhc2NlbmRpbmcgYnkgT3AwLCBP cDEsIENSbiwgQ1JtLCBPcDIKPiA+ID4gQEAgLTIwMDYsNyArMjAwOCw3IEBAIHN0YXRpYyBjb25z dCBzdHJ1Y3Qgc3lzX3JlZ19kZXNjIHN5c19yZWdfZGVzY3NbXSA9IHsKPiA+ID4gICAgICAgICAu c2V0X3VzZXIgPSBzZXRfaWRfZGZyMF9lbDEsCj4gPiA+ICAgICAgICAgLnZpc2liaWxpdHkgPSBh YTMyX2lkX3Zpc2liaWxpdHksCj4gPiA+ICAgICAgICAgLnJlc2V0ID0gcmVhZF9zYW5pdGlzZWRf aWRfZGZyMF9lbDEsCj4gPiA+IC0gICAgICAgLnZhbCA9IElEX0RGUjBfRUwxX1BlcmZNb25fTUFT SywgfSwKPiA+ID4gKyAgICAgICAudmFsID0gR0VOTUFTSygzMSwgMCksIH0sCj4gPgo+ID4gQ2Fu IHlvdSAqcGxlYXNlKiBsb29rIGF0IHRoZSByZWdpc3RlciBhbmQgcmVhbGlzZSB0aGF0IHdlICpk b24ndCoKPiA+IHN1cHBvcnQgd3JpdGluZyB0byB0aGUgd2hvbGUgb2YgdGhlIGxvdyAzMiBiaXRz PyBXaGF0IGRvZXMgaXQgbWVhbiB0bwo+ID4gYWxsb3cgc2VsZWN0aW5nIHRoZSBNLXByb2ZpbGUg ZGVidWc/IE9yIHRoZSBtZW1vcnktbWFwcGVkIHRyYWNlPwo+ID4KPiA+IFlvdSBhcmUgYWR2ZXJ0 aXNpbmcgYSBsb3Qgb2YgY3JhcCB0byB1c2Vyc3BhY2UsIGFuZCB0aGF0J3MgZGVmaW5pdGVseQo+ ID4gbm90IG9uLgo+ID4KPiA+ID4gICAgICAgSURfSElEREVOKElEX0FGUjBfRUwxKSwKPiA+ID4g ICAgICAgQUEzMl9JRF9TQU5JVElTRUQoSURfTU1GUjBfRUwxKSwKPiA+ID4gICAgICAgQUEzMl9J RF9TQU5JVElTRUQoSURfTU1GUjFfRUwxKSwKPiA+ID4gQEAgLTIwNTUsNyArMjA1Nyw3IEBAIHN0 YXRpYyBjb25zdCBzdHJ1Y3Qgc3lzX3JlZ19kZXNjIHN5c19yZWdfZGVzY3NbXSA9IHsKPiA+ID4g ICAgICAgICAuZ2V0X3VzZXIgPSBnZXRfaWRfcmVnLAo+ID4gPiAgICAgICAgIC5zZXRfdXNlciA9 IHNldF9pZF9hYTY0ZGZyMF9lbDEsCj4gPiA+ICAgICAgICAgLnJlc2V0ID0gcmVhZF9zYW5pdGlz ZWRfaWRfYWE2NGRmcjBfZWwxLAo+ID4gPiAtICAgICAgIC52YWwgPSBJRF9BQTY0REZSMF9FTDFf UE1VVmVyX01BU0ssIH0sCj4gPiA+ICsgICAgICAgLnZhbCA9IH4oSURfQUE2NERGUjBfRUwxX1BN U1Zlcl9NQVNLIHwgSURfQUE2NERGUjBfRUwxX1JFUzBfTUFTSyksIH0sCj4gPgo+ID4gQW5kIGl0 IGlzIHRoZSBzYW1lIHRoaW5nIGhlcmUuIFdoZXJlIGlzIHRoZSBoYW5kbGluZyBjb2RlIHRvIGRl YWwgd2l0aAo+ID4gdmFyaWFibGUgYnJlYWtwb2ludCBudW1iZXJzPyBPaCB3YWl0LCB0aGVyZSBp cyBub25lLiBSZWFsbHksIHRoZSBvbmx5Cj4gPiB0aGluZyB3ZSBzdXBwb3J0IHdyaXRpbmcgdG8g YXJlIHRoZSBQTVUgYW5kIERlYnVnIHZlcnNpb25zLiBBbmQKPiA+IG5vdGhpbmcgZWxzZS4KPiA+ Cj4gPiBXaGF0IGRvZXMgaXQgbWVhbiBmb3IgdXNlcnNwYWNlPyBFaXRoZXIgdGhlIHdyaXRlIHdp bGwgYmUgZGVuaWVkCj4gPiBkZXNwaXRlIGJlaW5nIGFkdmVydGlzZWQgYSB3cml0YWJsZSBmaWVs ZCAocmVtZW1iZXIgdGhlIGZpcnN0IHBhdGNoIG9mCj4gPiB0aGUgc2VyaWVzPz8/KSwgb3Igd2Un bGwgYmxpbmRseSBhY2NlcHQgdGhlIHdyaXRlIGFuZCBmdXJ0aGVyIGlnbm9yZQo+ID4gdGhlIHJl cXVlc3RlZCB2YWx1ZXMuIERvIHlvdSByZWFsbHkgdGhpbmsgYW55IG9mIHRoaXMgaXMgYWNjZXB0 YWJsZT8KPiA+Cj4gPiBUaGlzIGlzIHRoZSAqOXRoKiB2ZXJzaW9uIG9mIHRoaXMgc2VyaWVzLCBh bmQgd2UncmUgc3RpbGwgYmF0dGxpbmcKPiA+IG92ZXIgc29tZSBleHRyZW1lbHkgYmFzaWMgdXNl cnNwYWNlIGlzc3Vlcy4uLiBJIGRvbid0IHRoaW5rIHdlIGNhbgo+ID4gbWVyZ2UgdGhpcyBzZXJp ZXMgYXMgaXMgc3RhbmRzLgo+IAo+IEkgcmVtb3ZlZCBzYW5pdHkgY2hlY2tzIGFjcm9zcyBtdWx0 aXBsZSBmaWVsZHMgYWZ0ZXIgdGhlIGRpc2N1c3Npb24KPiBoZXJlOiBodHRwczovL2xvcmUua2Vy bmVsLm9yZy9hbGwvWktSQzgwaGI0aFh3VzhXS0B0aGlua3ktYm9pLwo+IEkgbWlnaHQgaGF2ZSBt aXN1bmRlcnN0b29kIHRoZSBkaXNjdXNzaW9uLiBJIHRob3VnaHQgd2UnZCBsZXQgVk1NIGRvCj4g bW9yZSBjb21wbGV0ZSBzYW5pdHkgY2hlY2tzLgoKVGhlIHByb2JsZW0gaXMgdGhhdCB5b3UgZG9u J3QgZXZlbiBoYXZlIGEgc3RhdGVtZW50IGFib3V0IGhvdyB0aGlzIGlzCnN1cHBvc2VkIHRvIGJl IGhhbmRsZWQuIFdoYXQgYXJlIHRoZSBydWxlcz8gSG93IGNhbiB0aGUgVk1NIGF1dGhvcgoqa25v dyo/CgpUaGF0J3MgbXkgcmVhbCBpc3N1ZSB3aXRoIHRoaXMgc2VyaWVzOiBhdCBubyBwb2ludCBk byB3ZSBzdGF0ZSB3aGVuIGFuCklEIHJlZ2lzdGVyIGNhbiBiZSB3cml0dGVuLCB3aGF0IGFyZSB0 aGUgcnVsZXMgdGhhdCBtdXN0IGJlIGZvbGxvd2VkLAp3aGVyZSBpcyB0aGUgc3BsaXQgaW4gcmVz cG9uc2liaWxpdHkgYmV0d2VlbiBLVk0gYW5kIHRoZSBWTU0sIGFuZCB3aGF0CmlzIHRoZSBleHBl Y3RlZCBiZWhhdmlvdXIgd2hlbiB0aGUgVk1NIGV4cG9zZXMgc29tZXRoaW5nIHRoYXQgaXMKY29t cGxldGVseSBvdXRsYW5kaXNoIHRvIHRoZSBndWVzdCAoc3VjaCBhcyB0aGUgTS1wcm9maWxlIGRl YnVnKS4KCkRvIHlvdSBzZWUgdGhlIGlzc3VlPyBXZSBjYW4gYWx3YXlzIGZpeCB0aGUgY29kZS4g QnV0IG9uY2Ugd2UndmUKZXhwb3NlZCB0aGF0IHRvIHVzZXJzcGFjZSwgdGhlcmUgaXMgbm8gZ29p bmcgYmFjay4gQW5kIEkgcmVhbGx5IHdhbnQKZXZlcnlib2R5J3MgYnV5LWluIG9uIHRoYXQgZnJv bnQsIGluY2x1ZGluZyB0aGUgVk1NIHBlb3BsZS4KClRoYW5rcywKCglNLgoKLS0gCldpdGhvdXQg ZGV2aWF0aW9uIGZyb20gdGhlIG5vcm0sIHByb2dyZXNzIGlzIG5vdCBwb3NzaWJsZS4KCl9fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmxpbnV4LWFybS1rZXJu ZWwgbWFpbGluZyBsaXN0CmxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRw Oi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LWFybS1rZXJuZWwK