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=-2.6 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS, USER_AGENT_SANE_1 autolearn=no 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 DE589C433E0 for ; Wed, 10 Jun 2020 07:57:21 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id ACB112072F for ; Wed, 10 Jun 2020 07:57:21 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1591775841; bh=i0GKyEEgP/d/WJmGZui0xw8vOIPmyZHfPnzNhX2dXNM=; h=Date:From:To:Cc:Subject:References:In-Reply-To:List-ID:From; b=AezP9vqcYVqjYYJMQirZQW7smmbXMq4aw6xQkZG68nAyfNvY5t8mjLpOE+viH5ipr vZ5COg8ybkyuR47ZQEoUaZps44JL1UR6ShaVOqp79i2Xww4oHVvGeRBX/LCTdsim3Z K3ViFj/gyAlhrxIECeKAQIKuT/decXzcRZnYiL74= Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726689AbgFJH5U (ORCPT ); Wed, 10 Jun 2020 03:57:20 -0400 Received: from mail.kernel.org ([198.145.29.99]:36948 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726512AbgFJH5S (ORCPT ); Wed, 10 Jun 2020 03:57:18 -0400 Received: from willie-the-truck (236.31.169.217.in-addr.arpa [217.169.31.236]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 8AE8A206C3; Wed, 10 Jun 2020 07:57:15 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1591775836; bh=i0GKyEEgP/d/WJmGZui0xw8vOIPmyZHfPnzNhX2dXNM=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=oxMoP3RQ2ZxDZxQTVNc7pdMDGnBLbnF57UtXv+oyWa4vg9Hb5X4nGwZgiUStJ6RMQ Sm9U7RUCEGHGt2X1UAxqeI3BNMCWnXNcVHvwLeZzs2JIdF+8XyUHUBX3O0Q8dM7HZb vpCZBYiRTIqYWBlpmD2TuPFmrBAnDOXYjA7iEn7w= Date: Wed, 10 Jun 2020 08:57:12 +0100 From: Will Deacon To: Sudeep Holla Cc: devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Marc Zyngier , tabba@google.com, qwandor@google.com, ardb@kernel.org Subject: Re: [RFC PATCH 0/3] firmware: Add support for PSA FF-A interface Message-ID: <20200610075711.GC15939@willie-the-truck> References: <20200601094512.50509-1-sudeep.holla@arm.com> <20200604133746.GA2951@willie-the-truck> <20200609174123.GA5732@bogus> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <20200609174123.GA5732@bogus> User-Agent: Mutt/1.10.1 (2018-07-13) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi Sudeep, On Tue, Jun 09, 2020 at 06:41:23PM +0100, Sudeep Holla wrote: > On Thu, Jun 04, 2020 at 02:37:46PM +0100, Will Deacon wrote: > > On Mon, Jun 01, 2020 at 10:45:09AM +0100, Sudeep Holla wrote: > > > Sorry for posting in the middle of merge window and I must have done > > > this last week itself. This is not the driver I had thought about posting > > > last week. After I started cleaning up and looking at Will's KVM prototype[1] > > > for PSA FF-A (previously known as SPCI), > > > > Yes, I need to do the Big Rename at some point. Joy. > > > > 😁 Renamed version here: https://android-kvm.googlesource.com/linux/+/refs/heads/willdeacon/psa-ffa although I haven't psyched myself up to write yaml yet. > > Setting the static RX/TX buffer allocation aside, why is a DT node needed > > at all for the case where Linux is running purely as an FF-A client? I > > thought everything should be discoverable via FFA_VERSION, FFA_FEATURES, > > FFA_PARTITION_INFO_GET and FFA_ID_GET? That should mean we can get away > > without a binding at all for the client case. > > > > Agreed, I added for RxTx buffers and initially to build the parent/child > hierarchy for all users of the driver. Initially I was assuming only > in-kernel users and now I agree we should avoid any in kernel users if > possible. > > One thing to note FFA_PARTITION_INFO_GET relies on Rx buffers to send the > information to the caller. So we need to have established buffers before > that and one of the reason you don't find that in this RFC. I dropped that > too which I wanted initially. Ok, sounds like we should at least get to a position where we can enumerate things, though. > > > Sorry for long email and too many questions, but I thought it is easier > > > this way to begin with than throwing huge code implementing loads of APIs > > > with no users(expect example partition) especially that I am posting this > > > during merge window. > > > > No problem. Maybe it would help if I described roughly what we were thinking > > of doing for KVM (this is open for discussion, of course): > > > > 1. Describe KVM-managed partitions in the DT, along the lines of [1] > > 2. Expose each partition as a file to userspace. E.g.: > > > > /dev/spci/: > > > > self > > e3a48fa5-dc54-4a8b-898b-bdc4dfeeb7b8 > > 49f65057-d002-4ae2-b4ee-d31c7940a13d > > > > Here, self would be a symlink to the host uuid. The host uuid file > > would implement FFA_MEM operations using an ioctl(), so you could, > > for example, share a user buffer with multiple partitions by issuing > > a MEM_SHARE ioctl() on self, passing the fds for the borrower partitions > > as arguments. Messaging would be implemented as ioctl()s on the > > partition uuid files themselves. > > > > OK, IIUC that covers mostly KVM implementation. We still need a way to > share the RxTx buffer info to the partitions and DT/ACPI(?) is one > possible way. Based on you comment about not needing DT node, do you have > any other way to communicate the buffer info to the partitions ? This is only a concern if KVM chooses to provide the Rx/Tx buffer pair though, right? If we punt that down the road for the moment, then we can just rely on FFA_RXTX_MAP for now. > > For communicating with partitions that are not managed by KVM (e.g. trusted > > applications), it's not clear to me how much of that will be handled in > > kernel or user. I think it would still be worth exposing the partitions as > > files, but perhaps having them root only or just returning -EPERM for the > > ioctl() if a kernel driver has claimed the partition as its own? Ideally, > > FF-A would allow us to transition some of the Trusted OS interfacing code > > out to userspace, but I don't know how realistic that is. > > > > Ah good, so we can still manage in-kernel users this way but we need to > provide interface to such a driver which I agree that we need to avoid > if possible. > > > Anyway, to enable this, I think we need a clear separation in the kernel > > between the FF-A code and the users: > Agreed. > > > KVM will want to expose things as above, but if drivers need to use this > > stuff as well then they can plug in as additional users and we don't have to > > worry about tripping over the RX/TX buffers etc. > > > > I am confused a bit. When you refer drivers above, are you referring to > drivers in host kernel(hypervisor) or in the partitions. I fail to > imagine need for the former. I'm referring to in-kernel users in the host kernel. For KVM-managed guests, we may not need these, although signalling things like system shutdown might be better off done without relying on userspace. But my point is really that separating the buffer management from the users means we can serialise consumers, whether they are in-kernel or out in userspace. > > What do you think, and do you reckon you can spin a cut-down driver that > > implements the common part of the logic (since I know you've written much > > of this code already)? > > > > I am not sure if I am aligned with your thoughts on the buffer sharing > yet. Ok, please let me know if you have any more questions. Will 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=-2.5 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,USER_AGENT_SANE_1 autolearn=no 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 98CEAC433E1 for ; Wed, 10 Jun 2020 07:57:24 +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 6840A206C3 for ; Wed, 10 Jun 2020 07:57:24 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="I7PEA7LZ"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=kernel.org header.i=@kernel.org header.b="oxMoP3RQ" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 6840A206C3 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=kernel.org 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:References: Message-ID:Subject:To:From:Date:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=prsAh1ZnpFJReiYGPNYC18HzDktOoRv8mt+7jiq6Xas=; b=I7PEA7LZVJDZQ0 sRNxneH9hWckSaAK6Smg0AINtr0cX8tCmN20wyWJNKWcLW2k9MTNiNPd6HS84wO/Be+SOHJ/7LIdv GV5AFS5t1Io4zW30dZKIUviYSrgm8rJW4rNsalRzeZp8HyHxJ/NorRErazYi8v0UgzeAuiYaPsyUo m/ip/z5P6mUfhfenaOMpc+hfOTSs1kYm9NgWGkMx4JQsfKLX7/x27ls9CeQkEdLr7vJlH52p+086M xZhHcAYQbRi4kce4xSEIwUSH7GOH67AiYLNfkN0ThvOBQo48y/jdmsjuuTMrXucFWQIVe1RL3LCm0 5vpBMPIZVp6r6rP1oNDg==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1jivbw-0002vn-4N; Wed, 10 Jun 2020 07:57:24 +0000 Received: from mail.kernel.org ([198.145.29.99]) by bombadil.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1jivbp-0002um-BH for linux-arm-kernel@lists.infradead.org; Wed, 10 Jun 2020 07:57:22 +0000 Received: from willie-the-truck (236.31.169.217.in-addr.arpa [217.169.31.236]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 8AE8A206C3; Wed, 10 Jun 2020 07:57:15 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1591775836; bh=i0GKyEEgP/d/WJmGZui0xw8vOIPmyZHfPnzNhX2dXNM=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=oxMoP3RQ2ZxDZxQTVNc7pdMDGnBLbnF57UtXv+oyWa4vg9Hb5X4nGwZgiUStJ6RMQ Sm9U7RUCEGHGt2X1UAxqeI3BNMCWnXNcVHvwLeZzs2JIdF+8XyUHUBX3O0Q8dM7HZb vpCZBYiRTIqYWBlpmD2TuPFmrBAnDOXYjA7iEn7w= Date: Wed, 10 Jun 2020 08:57:12 +0100 From: Will Deacon To: Sudeep Holla Subject: Re: [RFC PATCH 0/3] firmware: Add support for PSA FF-A interface Message-ID: <20200610075711.GC15939@willie-the-truck> References: <20200601094512.50509-1-sudeep.holla@arm.com> <20200604133746.GA2951@willie-the-truck> <20200609174123.GA5732@bogus> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20200609174123.GA5732@bogus> User-Agent: Mutt/1.10.1 (2018-07-13) X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20200610_005721_268734_26B7E424 X-CRM114-Status: GOOD ( 32.68 ) 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, qwandor@google.com, Marc Zyngier , linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, ardb@kernel.org, tabba@google.com 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 SGkgU3VkZWVwLAoKT24gVHVlLCBKdW4gMDksIDIwMjAgYXQgMDY6NDE6MjNQTSArMDEwMCwgU3Vk ZWVwIEhvbGxhIHdyb3RlOgo+IE9uIFRodSwgSnVuIDA0LCAyMDIwIGF0IDAyOjM3OjQ2UE0gKzAx MDAsIFdpbGwgRGVhY29uIHdyb3RlOgo+ID4gT24gTW9uLCBKdW4gMDEsIDIwMjAgYXQgMTA6NDU6 MDlBTSArMDEwMCwgU3VkZWVwIEhvbGxhIHdyb3RlOgo+ID4gPiBTb3JyeSBmb3IgcG9zdGluZyBp biB0aGUgbWlkZGxlIG9mIG1lcmdlIHdpbmRvdyBhbmQgSSBtdXN0IGhhdmUgZG9uZQo+ID4gPiB0 aGlzIGxhc3Qgd2VlayBpdHNlbGYuIFRoaXMgaXMgbm90IHRoZSBkcml2ZXIgSSBoYWQgdGhvdWdo dCBhYm91dCBwb3N0aW5nCj4gPiA+IGxhc3Qgd2Vlay4gQWZ0ZXIgSSBzdGFydGVkIGNsZWFuaW5n IHVwIGFuZCBsb29raW5nIGF0IFdpbGwncyBLVk0gcHJvdG90eXBlWzFdCj4gPiA+IGZvciBQU0Eg RkYtQSAocHJldmlvdXNseSBrbm93biBhcyBTUENJKSwKPiA+Cj4gPiBZZXMsIEkgbmVlZCB0byBk byB0aGUgQmlnIFJlbmFtZSBhdCBzb21lIHBvaW50LiBKb3kuCj4gPgo+IAo+IPCfmIEgCgpSZW5h bWVkIHZlcnNpb24gaGVyZToKCmh0dHBzOi8vYW5kcm9pZC1rdm0uZ29vZ2xlc291cmNlLmNvbS9s aW51eC8rL3JlZnMvaGVhZHMvd2lsbGRlYWNvbi9wc2EtZmZhCgphbHRob3VnaCBJIGhhdmVuJ3Qg cHN5Y2hlZCBteXNlbGYgdXAgdG8gd3JpdGUgeWFtbCB5ZXQuCgo+ID4gU2V0dGluZyB0aGUgc3Rh dGljIFJYL1RYIGJ1ZmZlciBhbGxvY2F0aW9uIGFzaWRlLCB3aHkgaXMgYSBEVCBub2RlIG5lZWRl ZAo+ID4gYXQgYWxsIGZvciB0aGUgY2FzZSB3aGVyZSBMaW51eCBpcyBydW5uaW5nIHB1cmVseSBh cyBhbiBGRi1BIGNsaWVudD8gSQo+ID4gdGhvdWdodCBldmVyeXRoaW5nIHNob3VsZCBiZSBkaXNj b3ZlcmFibGUgdmlhIEZGQV9WRVJTSU9OLCBGRkFfRkVBVFVSRVMsCj4gPiBGRkFfUEFSVElUSU9O X0lORk9fR0VUIGFuZCBGRkFfSURfR0VUPyBUaGF0IHNob3VsZCBtZWFuIHdlIGNhbiBnZXQgYXdh eQo+ID4gd2l0aG91dCBhIGJpbmRpbmcgYXQgYWxsIGZvciB0aGUgY2xpZW50IGNhc2UuCj4gPgo+ IAo+IEFncmVlZCwgSSBhZGRlZCBmb3IgUnhUeCBidWZmZXJzIGFuZCBpbml0aWFsbHkgdG8gYnVp bGQgdGhlIHBhcmVudC9jaGlsZAo+IGhpZXJhcmNoeSBmb3IgYWxsIHVzZXJzIG9mIHRoZSBkcml2 ZXIuIEluaXRpYWxseSBJIHdhcyBhc3N1bWluZyBvbmx5Cj4gaW4ta2VybmVsIHVzZXJzIGFuZCBu b3cgSSBhZ3JlZSB3ZSBzaG91bGQgYXZvaWQgYW55IGluIGtlcm5lbCB1c2VycyBpZgo+IHBvc3Np YmxlLgo+IAo+IE9uZSB0aGluZyB0byBub3RlIEZGQV9QQVJUSVRJT05fSU5GT19HRVQgcmVsaWVz IG9uIFJ4IGJ1ZmZlcnMgdG8gc2VuZCB0aGUKPiBpbmZvcm1hdGlvbiB0byB0aGUgY2FsbGVyLiBT byB3ZSBuZWVkIHRvIGhhdmUgZXN0YWJsaXNoZWQgYnVmZmVycyBiZWZvcmUKPiB0aGF0IGFuZCBv bmUgb2YgdGhlIHJlYXNvbiB5b3UgZG9uJ3QgZmluZCB0aGF0IGluIHRoaXMgUkZDLiBJIGRyb3Bw ZWQgdGhhdAo+IHRvbyB3aGljaCBJIHdhbnRlZCBpbml0aWFsbHkuCgpPaywgc291bmRzIGxpa2Ug d2Ugc2hvdWxkIGF0IGxlYXN0IGdldCB0byBhIHBvc2l0aW9uIHdoZXJlIHdlIGNhbiBlbnVtZXJh dGUKdGhpbmdzLCB0aG91Z2guCgo+ID4gPiBTb3JyeSBmb3IgbG9uZyBlbWFpbCBhbmQgdG9vIG1h bnkgcXVlc3Rpb25zLCBidXQgSSB0aG91Z2h0IGl0IGlzIGVhc2llcgo+ID4gPiB0aGlzIHdheSB0 byBiZWdpbiB3aXRoIHRoYW4gdGhyb3dpbmcgaHVnZSBjb2RlIGltcGxlbWVudGluZyBsb2FkcyBv ZiBBUElzCj4gPiA+IHdpdGggbm8gdXNlcnMoZXhwZWN0IGV4YW1wbGUgcGFydGl0aW9uKSBlc3Bl Y2lhbGx5IHRoYXQgSSBhbSBwb3N0aW5nIHRoaXMKPiA+ID4gZHVyaW5nIG1lcmdlIHdpbmRvdy4K PiA+Cj4gPiBObyBwcm9ibGVtLiBNYXliZSBpdCB3b3VsZCBoZWxwIGlmIEkgZGVzY3JpYmVkIHJv dWdobHkgd2hhdCB3ZSB3ZXJlIHRoaW5raW5nCj4gPiBvZiBkb2luZyBmb3IgS1ZNICh0aGlzIGlz IG9wZW4gZm9yIGRpc2N1c3Npb24sIG9mIGNvdXJzZSk6Cj4gPgo+ID4gIDEuIERlc2NyaWJlIEtW TS1tYW5hZ2VkIHBhcnRpdGlvbnMgaW4gdGhlIERULCBhbG9uZyB0aGUgbGluZXMgb2YgWzFdCj4g PiAgMi4gRXhwb3NlIGVhY2ggcGFydGl0aW9uIGFzIGEgZmlsZSB0byB1c2Vyc3BhY2UuIEUuZy46 Cj4gPgo+ID4gICAgIC9kZXYvc3BjaS86Cj4gPgo+ID4gCXNlbGYKPiA+IAllM2E0OGZhNS1kYzU0 LTRhOGItODk4Yi1iZGM0ZGZlZWI3YjgKPiA+IAk0OWY2NTA1Ny1kMDAyLTRhZTItYjRlZS1kMzFj Nzk0MGExM2QKPiA+Cj4gPiAgICAgSGVyZSwgc2VsZiB3b3VsZCBiZSBhIHN5bWxpbmsgdG8gdGhl IGhvc3QgdXVpZC4gVGhlIGhvc3QgdXVpZCBmaWxlCj4gPiAgICAgd291bGQgaW1wbGVtZW50IEZG QV9NRU0gb3BlcmF0aW9ucyB1c2luZyBhbiBpb2N0bCgpLCBzbyB5b3UgY291bGQsCj4gPiAgICAg Zm9yIGV4YW1wbGUsIHNoYXJlIGEgdXNlciBidWZmZXIgd2l0aCBtdWx0aXBsZSBwYXJ0aXRpb25z IGJ5IGlzc3VpbmcKPiA+ICAgICBhIE1FTV9TSEFSRSBpb2N0bCgpIG9uIHNlbGYsIHBhc3Npbmcg dGhlIGZkcyBmb3IgdGhlIGJvcnJvd2VyIHBhcnRpdGlvbnMKPiA+ICAgICBhcyBhcmd1bWVudHMu IE1lc3NhZ2luZyB3b3VsZCBiZSBpbXBsZW1lbnRlZCBhcyBpb2N0bCgpcyBvbiB0aGUKPiA+ICAg ICBwYXJ0aXRpb24gdXVpZCBmaWxlcyB0aGVtc2VsdmVzLgo+ID4KPiAKPiBPSywgSUlVQyB0aGF0 IGNvdmVycyBtb3N0bHkgS1ZNIGltcGxlbWVudGF0aW9uLiBXZSBzdGlsbCBuZWVkIGEgd2F5IHRv Cj4gc2hhcmUgdGhlIFJ4VHggYnVmZmVyIGluZm8gdG8gdGhlIHBhcnRpdGlvbnMgYW5kIERUL0FD UEkoPykgaXMgb25lCj4gcG9zc2libGUgd2F5LiBCYXNlZCBvbiB5b3UgY29tbWVudCBhYm91dCBu b3QgbmVlZGluZyBEVCBub2RlLCBkbyB5b3UgaGF2ZQo+IGFueSBvdGhlciB3YXkgdG8gY29tbXVu aWNhdGUgdGhlIGJ1ZmZlciBpbmZvIHRvIHRoZSBwYXJ0aXRpb25zID8KClRoaXMgaXMgb25seSBh IGNvbmNlcm4gaWYgS1ZNIGNob29zZXMgdG8gcHJvdmlkZSB0aGUgUngvVHggYnVmZmVyIHBhaXIK dGhvdWdoLCByaWdodD8gSWYgd2UgcHVudCB0aGF0IGRvd24gdGhlIHJvYWQgZm9yIHRoZSBtb21l bnQsIHRoZW4gd2UgY2FuCmp1c3QgcmVseSBvbiBGRkFfUlhUWF9NQVAgZm9yIG5vdy4KCj4gPiBG b3IgY29tbXVuaWNhdGluZyB3aXRoIHBhcnRpdGlvbnMgdGhhdCBhcmUgbm90IG1hbmFnZWQgYnkg S1ZNIChlLmcuIHRydXN0ZWQKPiA+IGFwcGxpY2F0aW9ucyksIGl0J3Mgbm90IGNsZWFyIHRvIG1l IGhvdyBtdWNoIG9mIHRoYXQgd2lsbCBiZSBoYW5kbGVkIGluCj4gPiBrZXJuZWwgb3IgdXNlci4g SSB0aGluayBpdCB3b3VsZCBzdGlsbCBiZSB3b3J0aCBleHBvc2luZyB0aGUgcGFydGl0aW9ucyBh cwo+ID4gZmlsZXMsIGJ1dCBwZXJoYXBzIGhhdmluZyB0aGVtIHJvb3Qgb25seSBvciBqdXN0IHJl dHVybmluZyAtRVBFUk0gZm9yIHRoZQo+ID4gaW9jdGwoKSBpZiBhIGtlcm5lbCBkcml2ZXIgaGFz IGNsYWltZWQgdGhlIHBhcnRpdGlvbiBhcyBpdHMgb3duPyBJZGVhbGx5LAo+ID4gRkYtQSB3b3Vs ZCBhbGxvdyB1cyB0byB0cmFuc2l0aW9uIHNvbWUgb2YgdGhlIFRydXN0ZWQgT1MgaW50ZXJmYWNp bmcgY29kZQo+ID4gb3V0IHRvIHVzZXJzcGFjZSwgYnV0IEkgZG9uJ3Qga25vdyBob3cgcmVhbGlz dGljIHRoYXQgaXMuCj4gPgo+IAo+IEFoIGdvb2QsIHNvIHdlIGNhbiBzdGlsbCBtYW5hZ2UgaW4t a2VybmVsIHVzZXJzIHRoaXMgd2F5IGJ1dCB3ZSBuZWVkIHRvCj4gcHJvdmlkZSBpbnRlcmZhY2Ug dG8gc3VjaCBhIGRyaXZlciB3aGljaCBJIGFncmVlIHRoYXQgd2UgbmVlZCB0byBhdm9pZAo+IGlm IHBvc3NpYmxlLgo+IAo+ID4gQW55d2F5LCB0byBlbmFibGUgdGhpcywgSSB0aGluayB3ZSBuZWVk IGEgY2xlYXIgc2VwYXJhdGlvbiBpbiB0aGUga2VybmVsCj4gPiBiZXR3ZWVuIHRoZSBGRi1BIGNv ZGUgYW5kIHRoZSB1c2VyczoKPiBBZ3JlZWQuCj4gCj4gPiBLVk0gd2lsbCB3YW50IHRvIGV4cG9z ZSB0aGluZ3MgYXMgYWJvdmUsIGJ1dCBpZiBkcml2ZXJzIG5lZWQgdG8gdXNlIHRoaXMKPiA+IHN0 dWZmIGFzIHdlbGwgdGhlbiB0aGV5IGNhbiBwbHVnIGluIGFzIGFkZGl0aW9uYWwgdXNlcnMgYW5k IHdlIGRvbid0IGhhdmUgdG8KPiA+IHdvcnJ5IGFib3V0IHRyaXBwaW5nIG92ZXIgdGhlIFJYL1RY IGJ1ZmZlcnMgZXRjLgo+ID4KPiAKPiBJIGFtIGNvbmZ1c2VkIGEgYml0LiBXaGVuIHlvdSByZWZl ciBkcml2ZXJzIGFib3ZlLCBhcmUgeW91IHJlZmVycmluZyB0bwo+IGRyaXZlcnMgaW4gaG9zdCBr ZXJuZWwoaHlwZXJ2aXNvcikgb3IgaW4gdGhlIHBhcnRpdGlvbnMuIEkgZmFpbCB0bwo+IGltYWdp bmUgbmVlZCBmb3IgdGhlIGZvcm1lci4KCkknbSByZWZlcnJpbmcgdG8gaW4ta2VybmVsIHVzZXJz IGluIHRoZSBob3N0IGtlcm5lbC4gRm9yIEtWTS1tYW5hZ2VkIGd1ZXN0cywKd2UgbWF5IG5vdCBu ZWVkIHRoZXNlLCBhbHRob3VnaCBzaWduYWxsaW5nIHRoaW5ncyBsaWtlIHN5c3RlbSBzaHV0ZG93 biBtaWdodApiZSBiZXR0ZXIgb2ZmIGRvbmUgd2l0aG91dCByZWx5aW5nIG9uIHVzZXJzcGFjZS4g QnV0IG15IHBvaW50IGlzIHJlYWxseSB0aGF0CnNlcGFyYXRpbmcgdGhlIGJ1ZmZlciBtYW5hZ2Vt ZW50IGZyb20gdGhlIHVzZXJzIG1lYW5zIHdlIGNhbiBzZXJpYWxpc2UKY29uc3VtZXJzLCB3aGV0 aGVyIHRoZXkgYXJlIGluLWtlcm5lbCBvciBvdXQgaW4gdXNlcnNwYWNlLgoKPiA+IFdoYXQgZG8g eW91IHRoaW5rLCBhbmQgZG8geW91IHJlY2tvbiB5b3UgY2FuIHNwaW4gYSBjdXQtZG93biBkcml2 ZXIgdGhhdAo+ID4gaW1wbGVtZW50cyB0aGUgY29tbW9uIHBhcnQgb2YgdGhlIGxvZ2ljIChzaW5j ZSBJIGtub3cgeW91J3ZlIHdyaXR0ZW4gbXVjaAo+ID4gb2YgdGhpcyBjb2RlIGFscmVhZHkpPwo+ ID4KPiAKPiBJIGFtIG5vdCBzdXJlIGlmIEkgYW0gYWxpZ25lZCB3aXRoIHlvdXIgdGhvdWdodHMg b24gdGhlIGJ1ZmZlciBzaGFyaW5nCj4geWV0LgoKT2ssIHBsZWFzZSBsZXQgbWUga25vdyBpZiB5 b3UgaGF2ZSBhbnkgbW9yZSBxdWVzdGlvbnMuCgpXaWxsCgpfX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fXwpsaW51eC1hcm0ta2VybmVsIG1haWxpbmcgbGlzdAps aW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVh ZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1hcm0ta2VybmVsCg==