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=-0.6 required=3.0 tests=DKIM_INVALID,DKIM_SIGNED, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS, TVD_PH_BODY_ACCOUNTS_PRE 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 7FFE1C11D0B for ; Thu, 20 Feb 2020 15:45:37 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 4B64924672 for ; Thu, 20 Feb 2020 15:45:37 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=citrix.com header.i=@citrix.com header.b="Qmuf/Xrp" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728541AbgBTPpg (ORCPT ); Thu, 20 Feb 2020 10:45:36 -0500 Received: from esa3.hc3370-68.iphmx.com ([216.71.145.155]:15412 "EHLO esa3.hc3370-68.iphmx.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728497AbgBTPpg (ORCPT ); Thu, 20 Feb 2020 10:45:36 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=citrix.com; s=securemail; t=1582213536; h=date:from:to:cc:subject:message-id:references: mime-version:content-transfer-encoding:in-reply-to; bh=Hf2jfb9piSiHju6Ntp+FvddJlG4b1AFVZOCjx1jkZss=; b=Qmuf/Xrp4UXYymWQ2h/clPw8NoSfx150gmhKIT068jN/FTbRrbRPLx0x L8KpeFGsfNw8Jx4ghpbSvslWa+CFrIWXHaXD92PdzvnZmK9mZMFOwJqCb xDuyvDx3j0PklYQ/gx9Txo9Won0gY+TvnVZ1HGS0fLNiMIeBlc1/iJa8+ M=; Authentication-Results: esa3.hc3370-68.iphmx.com; dkim=none (message not signed) header.i=none; spf=None smtp.pra=roger.pau@citrix.com; spf=Pass smtp.mailfrom=roger.pau@citrix.com; spf=None smtp.helo=postmaster@mail.citrix.com Received-SPF: None (esa3.hc3370-68.iphmx.com: no sender authenticity information available from domain of roger.pau@citrix.com) identity=pra; client-ip=162.221.158.21; receiver=esa3.hc3370-68.iphmx.com; envelope-from="roger.pau@citrix.com"; x-sender="roger.pau@citrix.com"; x-conformance=sidf_compatible Received-SPF: Pass (esa3.hc3370-68.iphmx.com: domain of roger.pau@citrix.com designates 162.221.158.21 as permitted sender) identity=mailfrom; client-ip=162.221.158.21; receiver=esa3.hc3370-68.iphmx.com; envelope-from="roger.pau@citrix.com"; x-sender="roger.pau@citrix.com"; x-conformance=sidf_compatible; x-record-type="v=spf1"; x-record-text="v=spf1 ip4:209.167.231.154 ip4:178.63.86.133 ip4:195.66.111.40/30 ip4:85.115.9.32/28 ip4:199.102.83.4 ip4:192.28.146.160 ip4:192.28.146.107 ip4:216.52.6.88 ip4:216.52.6.188 ip4:162.221.158.21 ip4:162.221.156.83 ip4:168.245.78.127 ~all" Received-SPF: None (esa3.hc3370-68.iphmx.com: no sender authenticity information available from domain of postmaster@mail.citrix.com) identity=helo; client-ip=162.221.158.21; receiver=esa3.hc3370-68.iphmx.com; envelope-from="roger.pau@citrix.com"; x-sender="postmaster@mail.citrix.com"; x-conformance=sidf_compatible IronPort-SDR: ZHDdixRenlbATRuHBknsZwWZz7xs0v0NuFZmuADao7Vcj1Y3cpXV28Hpg3tWGHyzoPqbmMUbpn 3RODTM7jZRSgjsyQkTF3P48v+0IReUEWZ/qXIH4g3s1pEH2JtscssVMtFiFSbpoQgfNeWqCMkb 0q7nIJ3+Peu47qKTW6NylrFNYzp5kHsYcD7w38iuUDqhFLh6hPmlWZvuKSAUdEpuUKProKqZLy qQu+6xMWY0Wg+XDKCXpD16MdjYaSofKLq9wdY7VLTpLCCcAeTgGxcwP8wx9THTPwEkScIK6usq D9s= X-SBRS: 2.7 X-MesageID: 12745476 X-Ironport-Server: esa3.hc3370-68.iphmx.com X-Remote-IP: 162.221.158.21 X-Policy: $RELAYED X-IronPort-AV: E=Sophos;i="5.70,464,1574139600"; d="scan'208";a="12745476" Date: Thu, 20 Feb 2020 16:45:07 +0100 From: Roger Pau =?utf-8?B?TW9ubsOp?= To: "Durrant, Paul" CC: "Agarwal, Anchal" , "Valentin, Eduardo" , "len.brown@intel.com" , "peterz@infradead.org" , "benh@kernel.crashing.org" , "x86@kernel.org" , "linux-mm@kvack.org" , "pavel@ucw.cz" , "hpa@zytor.com" , "tglx@linutronix.de" , "sstabellini@kernel.org" , "fllinden@amaozn.com" , "Kamata, Munehisa" , "mingo@redhat.com" , "xen-devel@lists.xenproject.org" , "Singh, Balbir" , "axboe@kernel.dk" , "konrad.wilk@oracle.com" , "bp@alien8.de" , "boris.ostrovsky@oracle.com" , "jgross@suse.com" , "netdev@vger.kernel.org" , "linux-pm@vger.kernel.org" , "rjw@rjwysocki.net" , "linux-kernel@vger.kernel.org" , "vkuznets@redhat.com" , "davem@davemloft.net" , "Woodhouse, David" Subject: Re: [Xen-devel] [RFC PATCH v3 06/12] xen-blkfront: add callbacks for PM suspend and hibernation Message-ID: <20200220154507.GO4679@Air-de-Roger> References: <890c404c585d7790514527f0c021056a7be6e748.1581721799.git.anchalag@amazon.com> <20200217100509.GE4679@Air-de-Roger> <20200217230553.GA8100@dev-dsk-anchalag-2a-9c2d1d96.us-west-2.amazon.com> <20200218091611.GN4679@Air-de-Roger> <20200219180424.GA17584@dev-dsk-anchalag-2a-9c2d1d96.us-west-2.amazon.com> <20200220083904.GI4679@Air-de-Roger> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: X-ClientProxiedBy: AMSPEX02CAS01.citrite.net (10.69.22.112) To AMSPEX02CL01.citrite.net (10.69.22.125) Sender: linux-pm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-pm@vger.kernel.org On Thu, Feb 20, 2020 at 08:54:36AM +0000, Durrant, Paul wrote: > > -----Original Message----- > > From: Xen-devel On Behalf Of > > Roger Pau Monné > > Sent: 20 February 2020 08:39 > > To: Agarwal, Anchal > > Cc: Valentin, Eduardo ; len.brown@intel.com; > > peterz@infradead.org; benh@kernel.crashing.org; x86@kernel.org; linux- > > mm@kvack.org; pavel@ucw.cz; hpa@zytor.com; tglx@linutronix.de; > > sstabellini@kernel.org; fllinden@amaozn.com; Kamata, Munehisa > > ; mingo@redhat.com; xen-devel@lists.xenproject.org; > > Singh, Balbir ; axboe@kernel.dk; > > konrad.wilk@oracle.com; bp@alien8.de; boris.ostrovsky@oracle.com; > > jgross@suse.com; netdev@vger.kernel.org; linux-pm@vger.kernel.org; > > rjw@rjwysocki.net; linux-kernel@vger.kernel.org; vkuznets@redhat.com; > > davem@davemloft.net; Woodhouse, David > > Subject: Re: [Xen-devel] [RFC PATCH v3 06/12] xen-blkfront: add callbacks > > for PM suspend and hibernation > > > > Thanks for this work, please see below. > > > > On Wed, Feb 19, 2020 at 06:04:24PM +0000, Anchal Agarwal wrote: > > > On Tue, Feb 18, 2020 at 10:16:11AM +0100, Roger Pau Monné wrote: > > > > On Mon, Feb 17, 2020 at 11:05:53PM +0000, Anchal Agarwal wrote: > > > > > On Mon, Feb 17, 2020 at 11:05:09AM +0100, Roger Pau Monné wrote: > > > > > > On Fri, Feb 14, 2020 at 11:25:34PM +0000, Anchal Agarwal wrote: > > > > > Quiescing the queue seemed a better option here as we want to make > > sure ongoing > > > > > requests dispatches are totally drained. > > > > > I should accept that some of these notion is borrowed from how nvme > > freeze/unfreeze > > > > > is done although its not apple to apple comparison. > > > > > > > > That's fine, but I would still like to requests that you use the same > > > > logic (as much as possible) for both the Xen and the PM initiated > > > > suspension. > > > > > > > > So you either apply this freeze/unfreeze to the Xen suspension (and > > > > drop the re-issuing of requests on resume) or adapt the same approach > > > > as the Xen initiated suspension. Keeping two completely different > > > > approaches to suspension / resume on blkfront is not suitable long > > > > term. > > > > > > > I agree with you on overhaul of xen suspend/resume wrt blkfront is a > > good > > > idea however, IMO that is a work for future and this patch series should > > > not be blocked for it. What do you think? > > > > It's not so much that I think an overhaul of suspend/resume in > > blkfront is needed, it's just that I don't want to have two completely > > different suspend/resume paths inside blkfront. > > > > So from my PoV I think the right solution is to either use the same > > code (as much as possible) as it's currently used by Xen initiated > > suspend/resume, or to also switch Xen initiated suspension to use the > > newly introduced code. > > > > Having two different approaches to suspend/resume in the same driver > > is a recipe for disaster IMO: it adds complexity by forcing developers > > to take into account two different suspend/resume approaches when > > there's no need for it. > > I disagree. S3 or S4 suspend/resume (or perhaps we should call them power state transitions to avoid confusion) are quite different from Xen suspend/resume. > Power state transitions ought to be, and indeed are, visible to the software running inside the guest. Applications, as well as drivers, can receive notification and take whatever action they deem appropriate. > Xen suspend/resume OTOH is used when a guest is migrated and the code should go to all lengths possible to make any software running inside the guest (other than Xen specific enlightened code, such as PV drivers) completely unaware that anything has actually happened. So from what you say above PM state transitions are notified to all drivers, and Xen suspend/resume is only notified to PV drivers, and here we are speaking about blkfront which is a PV driver, and should get notified in both cases. So I'm unsure why the same (or at least very similar) approach can't be used in both cases. The suspend/resume approach proposed by this patch is completely different than the one used by a xenbus initiated suspend/resume, and I don't see a technical reason that warrants this difference. I'm not saying that the approach used here is wrong, it's just that I don't see the point in having two different ways to do suspend/resume in the same driver, unless there's a technical reason for it, which I don't think has been provided. I would be fine with switching xenbus initiated suspend/resume to also use the approach proposed here: freeze the queues and drain the shared rings before suspending. > So, whilst it may be possible to use common routines to, for example, re-establish PV frontend/backend communication, PV frontend code should be acutely aware of the circumstances they are operating in. I can cite example code in the Windows PV driver, which have supported guest S3/S4 power state transitions since day 1. Hm, please bear with me, as I'm not sure I fully understand. Why isn't the current suspend/resume logic suitable for PM transitions? As said above, I'm happy to switch xenbus initiated suspend/resume to use the logic in this patch, but unless there's a technical reason for it I don't see why blkfront should have two completely different approaches to suspend/resume depending on whether it's a PM or a xenbus state change. Thanks, Roger. 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=-0.6 required=3.0 tests=DKIM_INVALID,DKIM_SIGNED, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS, TVD_PH_BODY_ACCOUNTS_PRE 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 6BE5FC11D05 for ; Thu, 20 Feb 2020 15:46:04 +0000 (UTC) Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) (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 38A6C207FD for ; Thu, 20 Feb 2020 15:46:04 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=citrix.com header.i=@citrix.com header.b="Qmuf/Xrp" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 38A6C207FD Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=citrix.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=xen-devel-bounces@lists.xenproject.org Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1j4o1D-00032t-U4; Thu, 20 Feb 2020 15:45:39 +0000 Received: from all-amaz-eas1.inumbo.com ([34.197.232.57] helo=us1-amaz-eas2.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1j4o1C-00032o-5k for xen-devel@lists.xenproject.org; Thu, 20 Feb 2020 15:45:38 +0000 X-Inumbo-ID: 08bf2cce-53f8-11ea-855d-12813bfff9fa Received: from esa3.hc3370-68.iphmx.com (unknown [216.71.145.155]) by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS id 08bf2cce-53f8-11ea-855d-12813bfff9fa; Thu, 20 Feb 2020 15:45:36 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=citrix.com; s=securemail; t=1582213536; h=date:from:to:cc:subject:message-id:references: mime-version:content-transfer-encoding:in-reply-to; bh=Hf2jfb9piSiHju6Ntp+FvddJlG4b1AFVZOCjx1jkZss=; b=Qmuf/Xrp4UXYymWQ2h/clPw8NoSfx150gmhKIT068jN/FTbRrbRPLx0x L8KpeFGsfNw8Jx4ghpbSvslWa+CFrIWXHaXD92PdzvnZmK9mZMFOwJqCb xDuyvDx3j0PklYQ/gx9Txo9Won0gY+TvnVZ1HGS0fLNiMIeBlc1/iJa8+ M=; Authentication-Results: esa3.hc3370-68.iphmx.com; dkim=none (message not signed) header.i=none; spf=None smtp.pra=roger.pau@citrix.com; spf=Pass smtp.mailfrom=roger.pau@citrix.com; spf=None smtp.helo=postmaster@mail.citrix.com Received-SPF: None (esa3.hc3370-68.iphmx.com: no sender authenticity information available from domain of roger.pau@citrix.com) identity=pra; client-ip=162.221.158.21; receiver=esa3.hc3370-68.iphmx.com; envelope-from="roger.pau@citrix.com"; x-sender="roger.pau@citrix.com"; x-conformance=sidf_compatible Received-SPF: Pass (esa3.hc3370-68.iphmx.com: domain of roger.pau@citrix.com designates 162.221.158.21 as permitted sender) identity=mailfrom; client-ip=162.221.158.21; receiver=esa3.hc3370-68.iphmx.com; envelope-from="roger.pau@citrix.com"; x-sender="roger.pau@citrix.com"; x-conformance=sidf_compatible; x-record-type="v=spf1"; x-record-text="v=spf1 ip4:209.167.231.154 ip4:178.63.86.133 ip4:195.66.111.40/30 ip4:85.115.9.32/28 ip4:199.102.83.4 ip4:192.28.146.160 ip4:192.28.146.107 ip4:216.52.6.88 ip4:216.52.6.188 ip4:162.221.158.21 ip4:162.221.156.83 ip4:168.245.78.127 ~all" Received-SPF: None (esa3.hc3370-68.iphmx.com: no sender authenticity information available from domain of postmaster@mail.citrix.com) identity=helo; client-ip=162.221.158.21; receiver=esa3.hc3370-68.iphmx.com; envelope-from="roger.pau@citrix.com"; x-sender="postmaster@mail.citrix.com"; x-conformance=sidf_compatible IronPort-SDR: ZHDdixRenlbATRuHBknsZwWZz7xs0v0NuFZmuADao7Vcj1Y3cpXV28Hpg3tWGHyzoPqbmMUbpn 3RODTM7jZRSgjsyQkTF3P48v+0IReUEWZ/qXIH4g3s1pEH2JtscssVMtFiFSbpoQgfNeWqCMkb 0q7nIJ3+Peu47qKTW6NylrFNYzp5kHsYcD7w38iuUDqhFLh6hPmlWZvuKSAUdEpuUKProKqZLy qQu+6xMWY0Wg+XDKCXpD16MdjYaSofKLq9wdY7VLTpLCCcAeTgGxcwP8wx9THTPwEkScIK6usq D9s= X-SBRS: 2.7 X-MesageID: 12745476 X-Ironport-Server: esa3.hc3370-68.iphmx.com X-Remote-IP: 162.221.158.21 X-Policy: $RELAYED X-IronPort-AV: E=Sophos;i="5.70,464,1574139600"; d="scan'208";a="12745476" Date: Thu, 20 Feb 2020 16:45:07 +0100 From: Roger Pau =?utf-8?B?TW9ubsOp?= To: "Durrant, Paul" Message-ID: <20200220154507.GO4679@Air-de-Roger> References: <890c404c585d7790514527f0c021056a7be6e748.1581721799.git.anchalag@amazon.com> <20200217100509.GE4679@Air-de-Roger> <20200217230553.GA8100@dev-dsk-anchalag-2a-9c2d1d96.us-west-2.amazon.com> <20200218091611.GN4679@Air-de-Roger> <20200219180424.GA17584@dev-dsk-anchalag-2a-9c2d1d96.us-west-2.amazon.com> <20200220083904.GI4679@Air-de-Roger> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: X-ClientProxiedBy: AMSPEX02CAS01.citrite.net (10.69.22.112) To AMSPEX02CL01.citrite.net (10.69.22.125) Subject: Re: [Xen-devel] [RFC PATCH v3 06/12] xen-blkfront: add callbacks for PM suspend and hibernation X-BeenThere: xen-devel@lists.xenproject.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Cc: "Valentin, Eduardo" , "peterz@infradead.org" , "benh@kernel.crashing.org" , "linux-kernel@vger.kernel.org" , "linux-mm@kvack.org" , "pavel@ucw.cz" , "hpa@zytor.com" , "tglx@linutronix.de" , "sstabellini@kernel.org" , "fllinden@amaozn.com" , "x86@kernel.org" , "mingo@redhat.com" , "xen-devel@lists.xenproject.org" , "Singh, Balbir" , "len.brown@intel.com" , "jgross@suse.com" , "konrad.wilk@oracle.com" , "Agarwal, Anchal" , "bp@alien8.de" , "boris.ostrovsky@oracle.com" , "axboe@kernel.dk" , "netdev@vger.kernel.org" , "linux-pm@vger.kernel.org" , "rjw@rjwysocki.net" , "Kamata, Munehisa" , "vkuznets@redhat.com" , "davem@davemloft.net" , "Woodhouse, David" Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" T24gVGh1LCBGZWIgMjAsIDIwMjAgYXQgMDg6NTQ6MzZBTSArMDAwMCwgRHVycmFudCwgUGF1bCB3 cm90ZToKPiA+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tCj4gPiBGcm9tOiBYZW4tZGV2ZWwg PHhlbi1kZXZlbC1ib3VuY2VzQGxpc3RzLnhlbnByb2plY3Qub3JnPiBPbiBCZWhhbGYgT2YKPiA+ IFJvZ2VyIFBhdSBNb25uw6kKPiA+IFNlbnQ6IDIwIEZlYnJ1YXJ5IDIwMjAgMDg6MzkKPiA+IFRv OiBBZ2Fyd2FsLCBBbmNoYWwgPGFuY2hhbGFnQGFtYXpvbi5jb20+Cj4gPiBDYzogVmFsZW50aW4s IEVkdWFyZG8gPGVkdXZhbEBhbWF6b24uY29tPjsgbGVuLmJyb3duQGludGVsLmNvbTsKPiA+IHBl dGVyekBpbmZyYWRlYWQub3JnOyBiZW5oQGtlcm5lbC5jcmFzaGluZy5vcmc7IHg4NkBrZXJuZWwu b3JnOyBsaW51eC0KPiA+IG1tQGt2YWNrLm9yZzsgcGF2ZWxAdWN3LmN6OyBocGFAenl0b3IuY29t OyB0Z2x4QGxpbnV0cm9uaXguZGU7Cj4gPiBzc3RhYmVsbGluaUBrZXJuZWwub3JnOyBmbGxpbmRl bkBhbWFvem4uY29tOyBLYW1hdGEsIE11bmVoaXNhCj4gPiA8a2FtYXRhbUBhbWF6b24uY29tPjsg bWluZ29AcmVkaGF0LmNvbTsgeGVuLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnOwo+ID4gU2lu Z2gsIEJhbGJpciA8c2JsYmlyQGFtYXpvbi5jb20+OyBheGJvZUBrZXJuZWwuZGs7Cj4gPiBrb25y YWQud2lsa0BvcmFjbGUuY29tOyBicEBhbGllbjguZGU7IGJvcmlzLm9zdHJvdnNreUBvcmFjbGUu Y29tOwo+ID4gamdyb3NzQHN1c2UuY29tOyBuZXRkZXZAdmdlci5rZXJuZWwub3JnOyBsaW51eC1w bUB2Z2VyLmtlcm5lbC5vcmc7Cj4gPiByandAcmp3eXNvY2tpLm5ldDsgbGludXgta2VybmVsQHZn ZXIua2VybmVsLm9yZzsgdmt1em5ldHNAcmVkaGF0LmNvbTsKPiA+IGRhdmVtQGRhdmVtbG9mdC5u ZXQ7IFdvb2Rob3VzZSwgRGF2aWQgPGR3bXdAYW1hem9uLmNvLnVrPgo+ID4gU3ViamVjdDogUmU6 IFtYZW4tZGV2ZWxdIFtSRkMgUEFUQ0ggdjMgMDYvMTJdIHhlbi1ibGtmcm9udDogYWRkIGNhbGxi YWNrcwo+ID4gZm9yIFBNIHN1c3BlbmQgYW5kIGhpYmVybmF0aW9uCj4gPiAKPiA+IFRoYW5rcyBm b3IgdGhpcyB3b3JrLCBwbGVhc2Ugc2VlIGJlbG93Lgo+ID4gCj4gPiBPbiBXZWQsIEZlYiAxOSwg MjAyMCBhdCAwNjowNDoyNFBNICswMDAwLCBBbmNoYWwgQWdhcndhbCB3cm90ZToKPiA+ID4gT24g VHVlLCBGZWIgMTgsIDIwMjAgYXQgMTA6MTY6MTFBTSArMDEwMCwgUm9nZXIgUGF1IE1vbm7DqSB3 cm90ZToKPiA+ID4gPiBPbiBNb24sIEZlYiAxNywgMjAyMCBhdCAxMTowNTo1M1BNICswMDAwLCBB bmNoYWwgQWdhcndhbCB3cm90ZToKPiA+ID4gPiA+IE9uIE1vbiwgRmViIDE3LCAyMDIwIGF0IDEx OjA1OjA5QU0gKzAxMDAsIFJvZ2VyIFBhdSBNb25uw6kgd3JvdGU6Cj4gPiA+ID4gPiA+IE9uIEZy aSwgRmViIDE0LCAyMDIwIGF0IDExOjI1OjM0UE0gKzAwMDAsIEFuY2hhbCBBZ2Fyd2FsIHdyb3Rl Ogo+ID4gPiA+ID4gUXVpZXNjaW5nIHRoZSBxdWV1ZSBzZWVtZWQgYSBiZXR0ZXIgb3B0aW9uIGhl cmUgYXMgd2Ugd2FudCB0byBtYWtlCj4gPiBzdXJlIG9uZ29pbmcKPiA+ID4gPiA+IHJlcXVlc3Rz IGRpc3BhdGNoZXMgYXJlIHRvdGFsbHkgZHJhaW5lZC4KPiA+ID4gPiA+IEkgc2hvdWxkIGFjY2Vw dCB0aGF0IHNvbWUgb2YgdGhlc2Ugbm90aW9uIGlzIGJvcnJvd2VkIGZyb20gaG93IG52bWUKPiA+ IGZyZWV6ZS91bmZyZWV6ZQo+ID4gPiA+ID4gaXMgZG9uZSBhbHRob3VnaCBpdHMgbm90IGFwcGxl IHRvIGFwcGxlIGNvbXBhcmlzb24uCj4gPiA+ID4KPiA+ID4gPiBUaGF0J3MgZmluZSwgYnV0IEkg d291bGQgc3RpbGwgbGlrZSB0byByZXF1ZXN0cyB0aGF0IHlvdSB1c2UgdGhlIHNhbWUKPiA+ID4g PiBsb2dpYyAoYXMgbXVjaCBhcyBwb3NzaWJsZSkgZm9yIGJvdGggdGhlIFhlbiBhbmQgdGhlIFBN IGluaXRpYXRlZAo+ID4gPiA+IHN1c3BlbnNpb24uCj4gPiA+ID4KPiA+ID4gPiBTbyB5b3UgZWl0 aGVyIGFwcGx5IHRoaXMgZnJlZXplL3VuZnJlZXplIHRvIHRoZSBYZW4gc3VzcGVuc2lvbiAoYW5k Cj4gPiA+ID4gZHJvcCB0aGUgcmUtaXNzdWluZyBvZiByZXF1ZXN0cyBvbiByZXN1bWUpIG9yIGFk YXB0IHRoZSBzYW1lIGFwcHJvYWNoCj4gPiA+ID4gYXMgdGhlIFhlbiBpbml0aWF0ZWQgc3VzcGVu c2lvbi4gS2VlcGluZyB0d28gY29tcGxldGVseSBkaWZmZXJlbnQKPiA+ID4gPiBhcHByb2FjaGVz IHRvIHN1c3BlbnNpb24gLyByZXN1bWUgb24gYmxrZnJvbnQgaXMgbm90IHN1aXRhYmxlIGxvbmcK PiA+ID4gPiB0ZXJtLgo+ID4gPiA+Cj4gPiA+IEkgYWdyZWUgd2l0aCB5b3Ugb24gb3ZlcmhhdWwg b2YgeGVuIHN1c3BlbmQvcmVzdW1lIHdydCBibGtmcm9udCBpcyBhCj4gPiBnb29kCj4gPiA+IGlk ZWEgaG93ZXZlciwgSU1PIHRoYXQgaXMgYSB3b3JrIGZvciBmdXR1cmUgYW5kIHRoaXMgcGF0Y2gg c2VyaWVzIHNob3VsZAo+ID4gPiBub3QgYmUgYmxvY2tlZCBmb3IgaXQuIFdoYXQgZG8geW91IHRo aW5rPwo+ID4gCj4gPiBJdCdzIG5vdCBzbyBtdWNoIHRoYXQgSSB0aGluayBhbiBvdmVyaGF1bCBv ZiBzdXNwZW5kL3Jlc3VtZSBpbgo+ID4gYmxrZnJvbnQgaXMgbmVlZGVkLCBpdCdzIGp1c3QgdGhh dCBJIGRvbid0IHdhbnQgdG8gaGF2ZSB0d28gY29tcGxldGVseQo+ID4gZGlmZmVyZW50IHN1c3Bl bmQvcmVzdW1lIHBhdGhzIGluc2lkZSBibGtmcm9udC4KPiA+IAo+ID4gU28gZnJvbSBteSBQb1Yg SSB0aGluayB0aGUgcmlnaHQgc29sdXRpb24gaXMgdG8gZWl0aGVyIHVzZSB0aGUgc2FtZQo+ID4g Y29kZSAoYXMgbXVjaCBhcyBwb3NzaWJsZSkgYXMgaXQncyBjdXJyZW50bHkgdXNlZCBieSBYZW4g aW5pdGlhdGVkCj4gPiBzdXNwZW5kL3Jlc3VtZSwgb3IgdG8gYWxzbyBzd2l0Y2ggWGVuIGluaXRp YXRlZCBzdXNwZW5zaW9uIHRvIHVzZSB0aGUKPiA+IG5ld2x5IGludHJvZHVjZWQgY29kZS4KPiA+ IAo+ID4gSGF2aW5nIHR3byBkaWZmZXJlbnQgYXBwcm9hY2hlcyB0byBzdXNwZW5kL3Jlc3VtZSBp biB0aGUgc2FtZSBkcml2ZXIKPiA+IGlzIGEgcmVjaXBlIGZvciBkaXNhc3RlciBJTU86IGl0IGFk ZHMgY29tcGxleGl0eSBieSBmb3JjaW5nIGRldmVsb3BlcnMKPiA+IHRvIHRha2UgaW50byBhY2Nv dW50IHR3byBkaWZmZXJlbnQgc3VzcGVuZC9yZXN1bWUgYXBwcm9hY2hlcyB3aGVuCj4gPiB0aGVy ZSdzIG5vIG5lZWQgZm9yIGl0Lgo+IAo+IEkgZGlzYWdyZWUuIFMzIG9yIFM0IHN1c3BlbmQvcmVz dW1lIChvciBwZXJoYXBzIHdlIHNob3VsZCBjYWxsIHRoZW0gcG93ZXIgc3RhdGUgdHJhbnNpdGlv bnMgdG8gYXZvaWQgY29uZnVzaW9uKSBhcmUgcXVpdGUgZGlmZmVyZW50IGZyb20gWGVuIHN1c3Bl bmQvcmVzdW1lLgo+IFBvd2VyIHN0YXRlIHRyYW5zaXRpb25zIG91Z2h0IHRvIGJlLCBhbmQgaW5k ZWVkIGFyZSwgdmlzaWJsZSB0byB0aGUgc29mdHdhcmUgcnVubmluZyBpbnNpZGUgdGhlIGd1ZXN0 LiBBcHBsaWNhdGlvbnMsIGFzIHdlbGwgYXMgZHJpdmVycywgY2FuIHJlY2VpdmUgbm90aWZpY2F0 aW9uIGFuZCB0YWtlIHdoYXRldmVyIGFjdGlvbiB0aGV5IGRlZW0gYXBwcm9wcmlhdGUuCj4gWGVu IHN1c3BlbmQvcmVzdW1lIE9UT0ggaXMgdXNlZCB3aGVuIGEgZ3Vlc3QgaXMgbWlncmF0ZWQgYW5k IHRoZSBjb2RlIHNob3VsZCBnbyB0byBhbGwgbGVuZ3RocyBwb3NzaWJsZSB0byBtYWtlIGFueSBz b2Z0d2FyZSBydW5uaW5nIGluc2lkZSB0aGUgZ3Vlc3QgKG90aGVyIHRoYW4gWGVuIHNwZWNpZmlj IGVubGlnaHRlbmVkIGNvZGUsIHN1Y2ggYXMgUFYgZHJpdmVycykgY29tcGxldGVseSB1bmF3YXJl IHRoYXQgYW55dGhpbmcgaGFzIGFjdHVhbGx5IGhhcHBlbmVkLgoKU28gZnJvbSB3aGF0IHlvdSBz YXkgYWJvdmUgUE0gc3RhdGUgdHJhbnNpdGlvbnMgYXJlIG5vdGlmaWVkIHRvIGFsbApkcml2ZXJz LCBhbmQgWGVuIHN1c3BlbmQvcmVzdW1lIGlzIG9ubHkgbm90aWZpZWQgdG8gUFYgZHJpdmVycywg YW5kCmhlcmUgd2UgYXJlIHNwZWFraW5nIGFib3V0IGJsa2Zyb250IHdoaWNoIGlzIGEgUFYgZHJp dmVyLCBhbmQgc2hvdWxkCmdldCBub3RpZmllZCBpbiBib3RoIGNhc2VzLiBTbyBJJ20gdW5zdXJl IHdoeSB0aGUgc2FtZSAob3IgYXQgbGVhc3QKdmVyeSBzaW1pbGFyKSBhcHByb2FjaCBjYW4ndCBi ZSB1c2VkIGluIGJvdGggY2FzZXMuCgpUaGUgc3VzcGVuZC9yZXN1bWUgYXBwcm9hY2ggcHJvcG9z ZWQgYnkgdGhpcyBwYXRjaCBpcyBjb21wbGV0ZWx5CmRpZmZlcmVudCB0aGFuIHRoZSBvbmUgdXNl ZCBieSBhIHhlbmJ1cyBpbml0aWF0ZWQgc3VzcGVuZC9yZXN1bWUsIGFuZApJIGRvbid0IHNlZSBh IHRlY2huaWNhbCByZWFzb24gdGhhdCB3YXJyYW50cyB0aGlzIGRpZmZlcmVuY2UuCgpJJ20gbm90 IHNheWluZyB0aGF0IHRoZSBhcHByb2FjaCB1c2VkIGhlcmUgaXMgd3JvbmcsIGl0J3MganVzdCB0 aGF0IEkKZG9uJ3Qgc2VlIHRoZSBwb2ludCBpbiBoYXZpbmcgdHdvIGRpZmZlcmVudCB3YXlzIHRv IGRvIHN1c3BlbmQvcmVzdW1lCmluIHRoZSBzYW1lIGRyaXZlciwgdW5sZXNzIHRoZXJlJ3MgYSB0 ZWNobmljYWwgcmVhc29uIGZvciBpdCwgd2hpY2ggSQpkb24ndCB0aGluayBoYXMgYmVlbiBwcm92 aWRlZC4KCkkgd291bGQgYmUgZmluZSB3aXRoIHN3aXRjaGluZyB4ZW5idXMgaW5pdGlhdGVkIHN1 c3BlbmQvcmVzdW1lIHRvIGFsc28KdXNlIHRoZSBhcHByb2FjaCBwcm9wb3NlZCBoZXJlOiBmcmVl emUgdGhlIHF1ZXVlcyBhbmQgZHJhaW4gdGhlIHNoYXJlZApyaW5ncyBiZWZvcmUgc3VzcGVuZGlu Zy4KCj4gU28sIHdoaWxzdCBpdCBtYXkgYmUgcG9zc2libGUgdG8gdXNlIGNvbW1vbiByb3V0aW5l cyB0bywgZm9yIGV4YW1wbGUsIHJlLWVzdGFibGlzaCBQViBmcm9udGVuZC9iYWNrZW5kIGNvbW11 bmljYXRpb24sIFBWIGZyb250ZW5kIGNvZGUgc2hvdWxkIGJlIGFjdXRlbHkgYXdhcmUgb2YgdGhl IGNpcmN1bXN0YW5jZXMgdGhleSBhcmUgb3BlcmF0aW5nIGluLiBJIGNhbiBjaXRlIGV4YW1wbGUg Y29kZSBpbiB0aGUgV2luZG93cyBQViBkcml2ZXIsIHdoaWNoIGhhdmUgc3VwcG9ydGVkIGd1ZXN0 IFMzL1M0IHBvd2VyIHN0YXRlIHRyYW5zaXRpb25zIHNpbmNlIGRheSAxLgoKSG0sIHBsZWFzZSBi ZWFyIHdpdGggbWUsIGFzIEknbSBub3Qgc3VyZSBJIGZ1bGx5IHVuZGVyc3RhbmQuIFdoeSBpc24n dAp0aGUgY3VycmVudCBzdXNwZW5kL3Jlc3VtZSBsb2dpYyBzdWl0YWJsZSBmb3IgUE0gdHJhbnNp dGlvbnM/CgpBcyBzYWlkIGFib3ZlLCBJJ20gaGFwcHkgdG8gc3dpdGNoIHhlbmJ1cyBpbml0aWF0 ZWQgc3VzcGVuZC9yZXN1bWUgdG8KdXNlIHRoZSBsb2dpYyBpbiB0aGlzIHBhdGNoLCBidXQgdW5s ZXNzIHRoZXJlJ3MgYSB0ZWNobmljYWwgcmVhc29uIGZvcgppdCBJIGRvbid0IHNlZSB3aHkgYmxr ZnJvbnQgc2hvdWxkIGhhdmUgdHdvIGNvbXBsZXRlbHkgZGlmZmVyZW50CmFwcHJvYWNoZXMgdG8g c3VzcGVuZC9yZXN1bWUgZGVwZW5kaW5nIG9uIHdoZXRoZXIgaXQncyBhIFBNIG9yIGEKeGVuYnVz IHN0YXRlIGNoYW5nZS4KClRoYW5rcywgUm9nZXIuCgpfX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fXwpYZW4tZGV2ZWwgbWFpbGluZyBsaXN0Clhlbi1kZXZlbEBs aXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4v bGlzdGluZm8veGVuLWRldmVs