From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andrew Cooper Subject: Re: PVH CPU hotplug design document Date: Thu, 12 Jan 2017 19:00:57 +0000 Message-ID: References: <20170112121235.m7rfxicwpibfpejb@dhcp-3-221.uk.xensource.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta5.messagelabs.com ([195.245.231.135]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1cRkcQ-0001Qx-TA for xen-devel@lists.xenproject.org; Thu, 12 Jan 2017 19:01:03 +0000 In-Reply-To: <20170112121235.m7rfxicwpibfpejb@dhcp-3-221.uk.xensource.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: =?UTF-8?Q?Roger_Pau_Monn=c3=a9?= , xen-devel@lists.xenproject.org Cc: Stefano Stabellini , Graeme Gregory , Al Stone , Anshul Makkar , Julien Grall , Jan Beulich , Boris Ostrovsky List-Id: xen-devel@lists.xenproject.org T24gMTIvMDEvMTcgMTI6MTMsIFJvZ2VyIFBhdSBNb25uw6kgd3JvdGU6Cj4gSGVsbG8sCj4KPiBC ZWxvdyBpcyBhIGRyYWZ0IG9mIGEgZGVzaWduIGRvY3VtZW50IGZvciBQVkh2MiBDUFUgaG90cGx1 Zy4gSXQgc2hvdWxkIGNvdmVyCj4gYm90aCB2Q1BVIGFuZCBwQ1BVIGhvdHBsdWcuIEl0J3MgbWFp bmx5IGNlbnRlcmVkIGFyb3VuZCB0aGUgaGFyZHdhcmUgZG9tYWluLAo+IHNpbmNlIGZvciB1bnBy aXZpbGVnZWQgUFZIIGd1ZXN0cyB0aGUgdkNQVSBob3RwbHVnIG1lY2hhbmlzbSBpcyBhbHJlYWR5 Cj4gZGVzY3JpYmVkIGluIEJvcmlzIHNlcmllcyBbMF0sIGFuZCBpdCdzIHNoYXJlZCB3aXRoIEhW TS4KPgo+IFRoZSBhaW0gaGVyZSBpcyB0byBmaW5kIGEgd2F5IHRvIHVzZSBBQ1BJIHZDUFUgaG90 cGx1ZyBmb3IgdGhlIGhhcmR3YXJlIGRvbWFpbiwKPiB3aGlsZSBzdGlsbCBiZWluZyBhYmxlIHRv IHByb3Blcmx5IGRldGVjdCBhbmQgbm90aWZ5IFhlbiBvZiBwQ1BVIGhvdHBsdWcuCj4KPiBUaGFu a3MsIFJvZ2VyLgo+Cj4gWzBdIGh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvYXJjaGl2ZXMv aHRtbC94ZW4tZGV2ZWwvMjAxNy0wMS9tc2cwMDA2MC5odG1sCj4KPiAtLS04PC0tLQo+ICUgQ1BV IGhvdHBsdWcgc3VwcG9ydCBmb3IgUFZICj4gJSBSb2dlciBQYXUgTW9ubsOpIDxyb2dlci5wYXVA Y2l0cml4LmNvbT4KPiAlIERyYWZ0IEIKPgo+ICMgUmV2aXNpb24gSGlzdG9yeQo+Cj4gfCBWZXJz aW9uIHwgRGF0ZSAgICAgICAgfCBDaGFuZ2VzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHwKPiB8LS0tLS0tLS0tfC0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAo+IHwgRHJhZnQgQSB8IDUgSmFu IDIwMTcgIHwgSW5pdGlhbCBkcmFmdC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB8Cj4gfC0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwKPiB8IERyYWZ0IEIgfCAxMiBKYW4gMjAxNyB8IFJl bW92ZWQgdGhlIFhYWCBjb21tZW50cyBhbmQgY2xhcmlmeSBzb21lICAgICAgICAgfAo+IHwgICAg ICAgICB8ICAgICAgICAgICAgIHwgc2VjdGlvbnMuICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB8Cj4gfCAgICAgICAgIHwgICAgICAgICAgICAgfCAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKPiB8ICAgICAgICAgfCAgICAg ICAgICAgICB8IEFkZGVkIGEgc2FtcGxlIG9mIHRoZSBTU0RUIEFTTCBjb2RlIHRoYXQgd291bGQg YmUgfAo+IHwgICAgICAgICB8ICAgICAgICAgICAgIHwgYXBwZW5kZWQgdG8gdGhlIGhhcmR3YXJl IGRvbWFpbi4gICAgICAgICAgICAgICAgICB8Cj4KPiAjIFByZWZhY2UKPgo+IFRoaXMgZG9jdW1l bnQgYWltcyB0byBkZXNjcmliZSB0aGUgaW50ZXJmYWNlIHRvIHVzZSBpbiBvcmRlciB0byBpbXBs ZW1lbnQgQ1BVCj4gaG90cGx1ZyBmb3IgUFZIIGd1ZXN0cywgdGhpcyBhcHBsaWVzIHRvIGhvdHBs dWcgb2YgYm90aCBwaHlzaWNhbCBhbmQgdmlydHVhbAo+IENQVXMuCj4KPiAjIEludHJvZHVjdGlv bgo+Cj4gT25lIG9mIHRoZSBkZXNpZ24gZ29hbHMgb2YgUFZIIGlzIHRvIGJlIGFibGUgdG8gcmVt b3ZlIGFzIG11Y2ggWGVuIFBWIHNwZWNpZmljCj4gY29kZSBhcyBwb3NzaWJsZSwgdGh1cyBsaW1p dGluZyB0aGUgbnVtYmVyIG9mIFhlbiBQViBpbnRlcmZhY2VzIHVzZWQgYnkgZ3Vlc3RzLAo+IGFu ZCB0ZW5kaW5nIHRvIHVzZSBuYXRpdmUgaW50ZXJmYWNlcyAoYXMgdXNlZCBieSBiYXJlIG1ldGFs KSBhcyBtdWNoIGFzCj4gcG9zc2libGUuIFRoaXMgaXMgaW4gbGluZSB3aXRoIHRoZSBlZmZvcnRz IGFsc28gZG9uZSBieSBYZW4gb24gQVJNIGFuZCBoZWxwcwo+IHJlZHVjZSB0aGUgYnVyZGVuIG9m IG1haW50YWluaW5nIGh1Z2UgYW1vdW50cyBvZiBYZW4gUFYgY29kZSBpbnNpZGUgb2YgZ3Vlc3Rz Cj4ga2VybmVscy4KPgo+IFRoaXMgaG93ZXZlciBwcmVzZW50cyBzb21lIGNoYWxsZW5nZXMgZHVl IHRvIHRoZSBtb2RlbCB1c2VkIGJ5IHRoZSBYZW4KPiBIeXBlcnZpc29yLCB3aGVyZSBzb21lIGRl dmljZXMgYXJlIGhhbmRsZWQgYnkgWGVuIHdoaWxlIG90aGVycyBhcmUgbGVmdCBmb3IgdGhlCj4g aGFyZHdhcmUgZG9tYWluIHRvIG1hbmFnZS4gVGhlIGZhY3QgdGhhdCBYZW4gbGFja3MgYW5kIEFN TCBwYXJzZXIgYWxzbyBtYWtlcyBpdAo+IGhhcmRlciwgc2luY2UgaXQgY2Fubm90IGdldCB0aGUg ZnVsbCBoYXJkd2FyZSBkZXNjcmlwdGlvbiBmcm9tIGR5bmFtaWMgQUNQSQo+IHRhYmxlcyAoRFNE VCwgU1NEVCkgd2l0aG91dCB0aGUgaGFyZHdhcmUgZG9tYWluIGNvbGxhYm9yYXRpb24uCj4KPiBP bmUgb2Ygc3VjaCBpc3N1ZXMgaXMgQ1BVIGVudW1lcmF0aW9uIGFuZCBob3RwbHVnLCBmb3IgYm90 aCB0aGUgaGFyZHdhcmUgYW5kCj4gdW5wcml2aWxlZ2VkIGRvbWFpbnMuIFRoZSBhaW0gaXMgdG8g YmUgYWJsZSB0byB1c2UgdGhlIHNhbWUgZW51bWVyYXRpb24gYW5kCj4gaG90cGx1ZyBpbnRlcmZh Y2UgZm9yIGFsbCBQVkggZ3Vlc3RzLCByZWdhcmRsZXNzIG9mIHRoZWlyIHByaXZpbGVnZS4KPgo+ IFRoaXMgZG9jdW1lbnQgYWltcyB0byBkZXNjcmliZSB0aGUgaW50ZXJmYWNlIHVzZWQgaW4gb3Jk ZXIgdG8gZnVsZmlsbCB0aGUKPiBmb2xsb3dpbmcgYWN0aW9uczoKPgo+ICAqIFZpcnR1YWwgQ1BV ICh2Q1BVKSBlbnVtZXJhdGlvbiBhdCBib290IHRpbWUuCj4gICogSG90cGx1ZyBvZiB2Q1BVcy4K PiAgKiBIb3RwbHVnIG9mIHBoeXNpY2FsIENQVXMgKHBDUFVzKSB0byBYZW4uCj4KPiAjIFByaW9y IHdvcmsKPgo+ICMjIFBWIENQVSBob3RwbHVnCj4KPiBDUFUgaG90cGx1ZyBmb3IgWGVuIFBWIGd1 ZXN0cyBpcyBpbXBsZW1lbnRlZCB1c2luZyB4ZW5zdG9yZSBhbmQgaHlwZXJjYWxscy4gVGhlCj4g Z3Vlc3QgaGFzIHRvIHNldHVwIGEgd2F0Y2ggZXZlbnQgb24gdGhlICJjcHUvIiB4ZW5zdG9yZSBu b2RlLCBhbmQgcmVhY3QgdG8KPiBjaGFuZ2VzIGluIHRoaXMgZGlyZWN0b3J5LiBDUFVzIGFyZSBh ZGRlZCBjcmVhdGluZyBhIG5ldyBub2RlIGFuZCBzZXR0aW5nIGl0J3MKPiAiYXZhaWxhYmlsaXR5 IiB0byBvbmxpbmU6Cj4KPiAgICAgY3B1L1gvYXZhaWxhYmlsaXR5ID0gIm9ubGluZSIKPgo+IFdo ZXJlIFggaXMgdGhlIHZDUFUgSUQuIFRoaXMgaXMgYW4gb3V0LW9mLWJhbmQgbWV0aG9kLCB0aGF0 IHJlbGllcyBvbiBYZW4KPiBzcGVjaWZpYyBpbnRlcmZhY2VzIGluIG9yZGVyIHRvIHBlcmZvcm0g Q1BVIGhvdHBsdWcuCgpJdCBpcyBhbHNvIHdvcnRoIHBvaW50aW5nIHRoZSBzaG9ydGNvbWluZ3Mg b2YgdGhpcyBtb2RlbCwgaS5lLiB0aGF0CnRoZXJlIGlzIG5vIG1lY2hhbmlzbSB0byBwcmV2ZW50 IGEgZ3Vlc3Qgb25saW5pbmcgbW9yZSBwcm9jZXNzb3JzIGlmIGl0Cmlnbm9yZXMgdGhlIHhlbnN0 b3JlIHZhbHVlcy4KCj4KPiAjIyBRRU1VIENQVSBob3RwbHVnIHVzaW5nIEFDUEkKPgo+IFRoZSBB Q1BJIHRhYmxlcyBwcm92aWRlZCB0byBIVk0gZ3Vlc3RzIGNvbnRhaW4gcHJvY2Vzc29yIG9iamVj dHMsIGFzIGNyZWF0ZWQgYnkKPiBsaWJhY3BpLiBUaGUgbnVtYmVyIG9mIHByb2Nlc3NvciBvYmpl Y3RzIGluIHRoZSBBQ1BJIG5hbWVzcGFjZSBtYXRjaGVzIHRoZQo+IG1heGltdW0gbnVtYmVyIG9m IHByb2Nlc3NvcnMgc3VwcG9ydGVkIGJ5IEhWTSBndWVzdHMgKHVwIHRvIDEyOCBhdCB0aGUgdGlt ZSBvZgo+IHdyaXRpbmcpLiBQcm9jZXNzb3JzIGN1cnJlbnRseSBkaXNhYmxlZCBhcmUgbWFya2Vk IGFzIHNvIGluIHRoZSBNQURUIGFuZCBpbgo+IHRoZWlyIFxfTUFUIGFuZCBcX1NUQSBtZXRob2Rz Lgo+Cj4gQSBQUlNUIG9wZXJhdGlvbiByZWdpb24gaW4gSS9PIHNwYWNlIGlzIGFsc28gZGVmaW5l ZCwgd2l0aCBhIHNpemUgb2YgMTI4Yml0cywKPiB0aGF0J3MgdXNlZCBhcyBhIGJpdG1hcCBvZiBl bmFibGVkIHZDUFVzIG9uIHRoZSBzeXN0ZW0uIEEgUFJTQyBtZXRob2QgaXMKPiBwcm92aWRlZCBp biBvcmRlciB0byBjaGVjayBmb3IgdXBkYXRlcyB0byB0aGUgUFJTVCByZWdpb24gYW5kIHRyaWdn ZXIKPiBub3RpZmljYXRpb25zIG9uIHRoZSBhZmZlY3RlZCBwcm9jZXNzb3Igb2JqZWN0cy4gVGhl IGV4ZWN1dGlvbiBvZiB0aGUgUFJTQwo+IG1ldGhvZCBpcyBkb25lIGJ5IGEgR1BFIGV2ZW50LiBU aGVuIE9TUE0gY2hlY2tzIHRoZSB2YWx1ZSByZXR1cm5lZCBieSBcX1NUQSBmb3IKPiB0aGUgQUNQ SVxfU1RBXF9ERVZJQ0VcX1BSRVNFTlQgZmxhZyBpbiBvcmRlciB0byBjaGVjayBpZiB0aGUgdkNQ VSBoYXMgYmVlbgo+IGVuYWJsZWQuCgpJdCBpcyB3b3J0aCBkZXNjcmliaW5nIHRoZSB0b29sc3Rh Y2sgc2lkZSBvZiBob3RwbHVnPyBJdCBpcyBlcXVhbGx5CnJlbGV2YW50IElNTy4KCj4KPiAjIyBO YXRpdmUgQ1BVIGhvdHBsdWcKPgo+IE9TUE0gd2FpdHMgZm9yIGEgbm90aWZpY2F0aW9uIGZyb20g QUNQSSBvbiB0aGUgcHJvY2Vzc29yIG9iamVjdCBhbmQgd2hlbiBhbgo+IGV2ZW50IGlzIHJlY2Vp dmVkIHRoZSByZXR1cm4gdmFsdWUgZnJvbSBfU1RBIGlzIGNoZWNrZWQgaW4gb3JkZXIgdG8gc2Vl IGlmCj4gQUNQSVxfU1RBXF9ERVZJQ0VcX1BSRVNFTlQgaGFzIGJlZW4gZW5hYmxlZC4gVGhpcyBu b3RpZmljYXRpb24gaXMgdHJpZ2dlcmVkCj4gZnJvbSB0aGUgbWV0aG9kIG9mIGEgR1BFIGJsb2Nr Lgo+Cj4gIyBQVkggQ1BVIGhvdHBsdWcKPgo+IFRoZSBhaW0gYXMgc3RhdGVkIGluIHRoZSBpbnRy b2R1Y3Rpb24gaXMgdG8gdXNlIGEgbWV0aG9kIGFzIHNpbWlsYXIgYXMgcG9zc2libGUKPiB0byBi YXJlIG1ldGFsIENQVSBob3RwbHVnIGZvciBQVkgsIHRoaXMgaXMgZmVhc2libGUgZm9yIHVucHJp dmlsZWdlZCBkb21haW5zLAo+IHNpbmNlIHRoZSBBQ1BJIHRhYmxlcyBjYW4gYmUgY3JlYXRlZCBi eSB0aGUgdG9vbHN0YWNrIGFuZCBwcm92aWRlZCB0byB0aGUKPiBndWVzdC4gVGhlbiBhIG1pbmlt YWwgSS9PIG9yIG1lbW9yeSBoYW5kbGVyIHdpbGwgYmUgYWRkZWQgdG8gWGVuIGluIG9yZGVyIHRv Cj4gcmVwb3J0IHRoZSBiaXRtYXAgb2YgZW5hYmxlZCB2Q1BVcy4gVGhlcmUncyBhbHJlYWR5IGEg W3Nlcmllc11bMF0gcG9zdGVkIHRvCj4geGVuLWRldmVsIHRoYXQgaW1wbGVtZW50IHRoaXMgZnVu Y3Rpb25hbGl0eSBmb3IgdW5wcml2aWxlZ2VkIFBWSCBndWVzdHMuCj4KPiBUaGlzIGhvd2V2ZXIg aXMgcHJvdmVuIHRvIGJlIHF1aXRlIGRpZmZpY3VsdCB0byBpbXBsZW1lbnQgZm9yIHRoZSBoYXJk d2FyZQo+IGRvbWFpbiwgc2luY2UgaXQgaGFzIHRvIG1hbmFnZSBib3RoIHBDUFVzIGFuZCB2Q1BV cy4gVGhlIGhhcmR3YXJlIGRvbWFpbiBzaG91bGQKPiBiZSBhYmxlIHRvIG5vdGlmeSBYZW4gb2Yg dGhlIGFkZGl0aW9uIG9mIG5ldyBwQ1BVcywgc28gdGhhdCB0aGV5IGNhbiBiZSB1c2VkIGJ5Cj4g dGhlIEh5cGVydmlzb3IsIGFuZCBhbHNvIGJlIGFibGUgdG8gaG90cGx1ZyBuZXcgdkNQVXMgZm9y IGl0J3Mgb3duIHVzYWdlLiBTaW5jZQo+IFhlbiBjYW5ub3QgYWNjZXNzIHRoZSBkeW5hbWljIChB TUwpIEFDUEkgdGFibGVzLCBiZWNhdXNlIGl0IGxhY2tzIGFuIEFNTAo+IHBhcnNlciwgaXQgaXMg dGhlIGR1dHkgb2YgdGhlIGhhcmR3YXJlIGRvbWFpbiB0byBwYXJzZSB0aG9zZSB0YWJsZXMgYW5k IG5vdGlmeQo+IFhlbiBvZiByZWxldmFudCBldmVudHMuCj4KPiBUaGVyZSBhcmUgc2V2ZXJhbCBy ZWxhdGVkIGlzc3VlcyBoZXJlIHRoYXQgcHJldmVudCBhIHN0cmFpZ2h0Zm9yd2FyZCBzb2x1dGlv bgo+IHRvIHRoaXMgaXNzdWU6Cj4KPiAgKiBYZW4gY2Fubm90IHBhcnNlIEFNTCB0YWJsZXMsIGFu ZCB0aHVzIGNhbm5vdCBnZXQgbm90aWZpY2F0aW9ucyBmcm9tIEFDUEkKPiAgICBldmVudHMuIEFu ZCBldmVuIGluIHRoZSBjYXNlIHRoYXQgWGVuIGNvdWxkIHBhcnNlIHRob3NlIHRhYmxlcywgdGhl cmUgY2FuCj4gICAgb25seSBiZSBvbmUgT1NQTSByZWdpc3RlcmVkIHdpdGggQUNQSQoKVGhlcmUg Y2FuIGluZGVlZCBvbmx5IGJlIG9uZSBPU1BNLCB3aGljaCBpcyB0aGUgZW50aXR5IHRoYXQgZXhl Y3V0ZXMgQU1MCm1ldGhvZHMgYW5kIHJlY2VpdmVzIGV4dGVybmFsIGludGVycnVwdHMgZnJvbSBB Q1BJLXJlbGF0ZWQgdGhpbmdzLgoKSG93ZXZlciwgZG9tMCBiZWluZyBPU1BNIGRvZXMgbm90IHBy b2hpYml0IFhlbiBmcm9tIHJlYWRpbmcgYW5kIHBhcnNpbmcKdGhlIEFNTCAoc2hvdWxkIHdlIGNo b29zZSB0byBpbmNsdWRlIHRoYXQgZnVuY3Rpb25hbGl0eSBpbiB0aGUKaHlwZXJ2aXNvcikuICBY ZW4gaXMgZmluZSB0byBkbyBhbnl0aGluZyBpdCB3YW50cyBpbiB0ZXJtcyBvZiByZWFkaW5nCmFu ZCBpbnRlcnByZXRpbmcgdGhlIHRhYmxlcywgc28gbG9uZyBhcyBpdCBkb2Vzbid0IHN0YXJ0IGV4 ZWN1dGluZyBBTUwKYnl0ZWNvZGUuCgoKPiAgKiBYZW4gY2FuIHByb3ZpZGUgYSB2YWxpZCBNQURU IHRhYmxlIHRvIHRoZSBoYXJkd2FyZSBkb21haW4gdGhhdCBkZXNjcmliZXMgdGhlCj4gICAgZW52 aXJvbm1lbnQgaW4gd2hpY2ggdGhlIGhhcmR3YXJlIGRvbWFpbiBpcyBydW5uaW5nLCBidXQgaXQg Y2Fubm90IHByZXZlbnQKPiAgICB0aGUgaGFyZHdhcmUgZG9tYWluIGZyb20gc2VlaW5nIHRoZSBy ZWFsIHByb2Nlc3NvciBkZXZpY2VzIGluIHRoZSBBQ1BJCj4gICAgbmFtZXNwYWNlLCBuZWl0aGVy IFhlbiBjYW4gcHJvdmlkZSB0aGUgaGFyZHdhcmUgZG9tYWluIHdpdGggcHJvY2Vzc29yCgoiLCBu b3IgY2FuIFhlbiBwcm92aWRlIHRoZS4uLiIKCj4gICAgZGV2aWNlcyB0aGF0IG1hdGNoIHRoZSB2 Q1BVcyBhdCB0aGUgbW9tZW50Lgo+Cj4gWzBdOiBodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3Jn L2FyY2hpdmVzL2h0bWwveGVuLWRldmVsLzIwMTctMDEvbXNnMDAwNjAuaHRtbAo+Cj4gIyMgUHJv cG9zZWQgc29sdXRpb24gdXNpbmcgdGhlIFNUQU8KPgo+IFRoZSBnZW5lcmFsIGlkZWEgb2YgdGhp cyBtZXRob2QgaXMgdG8gdXNlIHRoZSBTVEFPIGluIG9yZGVyIHRvIGhpZGUgdGhlIHBDUFVzCj4g ZnJvbSB0aGUgaGFyZHdhcmUgZG9tYWluLCBhbmQgcHJvdmlkZSBwcm9jZXNzb3Igb2JqZWN0cyBm b3IgdkNQVXMgaW4gYW4gZXh0cmEKPiBTU0RUIHRhYmxlLgo+Cj4gVGhpcyBtZXRob2QgcmVxdWly ZXMgb25lIGNoYW5nZSB0byB0aGUgU1RBTywgaW4gb3JkZXIgdG8gYmUgYWJsZSB0byBub3RpZnkg dGhlCj4gaGFyZHdhcmUgZG9tYWluIG9mIHdoaWNoIHByb2Nlc3NvcnMgZm91bmQgaW4gQUNQSSB0 YWJsZXMgYXJlIHBDUFVzLiBUaGUKPiBkZXNjcmlwdGlvbiBvZiB0aGUgbmV3IFNUQU8gZmllbGQg aXMgYXMgZm9sbG93czoKPgo+ICB8ICAgRmllbGQgICAgICAgICAgICB8IEJ5dGUgTGVuZ3RoIHwg Qnl0ZSBPZmZzZXQgfCAgICAgRGVzY3JpcHRpb24gICAgICAgICAgfAo+ICB8LS0tLS0tLS0tLS0t LS0tLS0tLS18Oi0tLS0tLS0tLS0tOnw6LS0tLS0tLS0tLS06fC0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tfAo+ICB8IFByb2Nlc3NvciBMaXN0IFtuXSB8ICAgICAgLSAgICAgIHwgICAgICAtICAg ICAgfCBBIGxpc3Qgb2YgQUNQSSBudW1iZXJzLCAgfAo+ICB8ICAgICAgICAgICAgICAgICAgICB8 ICAgICAgICAgICAgIHwgICAgICAgICAgICAgfCB3aGVyZSBlYWNoIG51bWJlciBpcyB0aGUgfAo+ ICB8ICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgIHwgICAgICAgICAgICAgfCBQcm9j ZXNzb3IgVUlEIG9mIGEgICAgICAgfAo+ICB8ICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAg ICAgIHwgICAgICAgICAgICAgfCBwaHlzaWNhbCBDUFUsIGFuZCBzaG91bGQgfAo+ICB8ICAgICAg ICAgICAgICAgICAgICB8ICAgICAgICAgICAgIHwgICAgICAgICAgICAgfCBiZSB0cmVhdGVkIHNw ZWNpYWxseSBieSAgfAo+ICB8ICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgIHwgICAg ICAgICAgICAgfCB0aGUgT1NQTSAgICAgICAgICAgICAgICAgfAo+Cj4gVGhlIGxpc3Qgb2YgVUlE cyBpbiB0aGlzIG5ldyBmaWVsZCB3b3VsZCBiZSBtYXRjaGVkIGFnYWluc3QgdGhlIEFDUEkgUHJv Y2Vzc29yCj4gVUlEIGZpZWxkIGZvdW5kIGluIGxvY2FsL3gyIEFQSUMgTUFEVCBzdHJ1Y3RzIGFu ZCBQcm9jZXNzb3Igb2JqZWN0cyBpbiB0aGUgQUNQSQo+IG5hbWVzcGFjZSwgYW5kIHRoZSBPU1BN IHNob3VsZCBlaXRoZXIgaWdub3JlIHRob3NlIG9iamVjdHMsIG9yIGluIGNhc2UgaXQKPiBpbXBs ZW1lbnRzIHBDUFUgaG90cGx1ZywgaXQgc2hvdWxkIG5vdGlmeSBYZW4gb2YgY2hhbmdlcyB0byB0 aGVzZSBvYmplY3RzLgo+Cj4gVGhlIGNvbnRlbnRzIG9mIHRoZSBNQURUIHByb3ZpZGVkIHRvIHRo ZSBoYXJkd2FyZSBkb21haW4gYXJlIGFsc28gZ29pbmcgdG8gYmUKPiBkaWZmZXJlbnQgZnJvbSB0 aGUgY29udGVudHMgb2YgdGhlIE1BRFQgYXMgZm91bmQgaW4gbmF0aXZlIEFDUEkuIFRoZSBsb2Nh bC94Mgo+IEFQSUMgZW50cmllcyBmb3IgYWxsIHRoZSBwQ1BVcyBhcmUgZ29pbmcgdG8gYmUgbWFy a2VkIGFzIGRpc2FibGVkLgo+Cj4gRXh0cmEgZW50cmllcyBhcmUgZ29pbmcgdG8gYmUgYWRkZWQg Zm9yIGVhY2ggdkNQVSBhdmFpbGFibGUgdG8gdGhlIGhhcmR3YXJlCj4gZG9tYWluLCB1cCB0byB0 aGUgbWF4aW11bSBudW1iZXIgb2Ygc3VwcG9ydGVkIHZDUFVzLiBOb3RlIHRoYXQgc3VwcG9ydGVk IHZDUFVzCj4gbWlnaHQgYmUgZGlmZmVyZW50IHRoYW4gZW5hYmxlZCB2Q1BVcywgc28gaXQncyBw b3NzaWJsZSB0aGF0IHNvbWUgb2YgdGhlc2UKPiBlbnRyaWVzIGFyZSBhbHNvIGdvaW5nIHRvIGJl IG1hcmtlZCBhcyBkaXNhYmxlZC4gVGhlIGVudHJpZXMgZm9yIHZDUFVzIG9uIHRoZQo+IE1BRFQg YXJlIGdvaW5nIHRvIHVzZSBhIHByb2Nlc3NvciBsb2NhbCB4MiBBUElDIHN0cnVjdHVyZSwgYW5k IHRoZSBBQ1BJCj4gcHJvY2Vzc29yIElEIG9mIHRoZSBmaXJzdCB2Q1BVIGlzIGdvaW5nIHRvIGJl IFVJTlQzMl9NQVggLSBIVk1fTUFYX1ZDUFVTLCBpbgo+IG9yZGVyIHRvIGF2b2lkIGNsYXNoZXMg d2l0aCBJRHMgb2YgcENQVXMuCgpUaGlzIGlzIHNsaWdodGx5IHByb2JsZW1hdGljLiAgVGhlcmUg aXMgbm8gcmVzdHJpY3Rpb24gKHNvIGZhciBhcyBJIGFtCmF3YXJlKSBvbiB3aGljaCBBQ1BJIElE cyB0aGUgZmlybXdhcmUgcGlja3MgZm9yIGl0cyBvYmplY3RzLiAgVGhleSBuZWVkCm5vdCBiZSBj b25zZWN1dGl2ZSwgbG9naWNhbCwgb3Igc3RhcnQgZnJvbSAwLgoKSWYgU1RBTyBpcyBiZWluZyBl eHRlbmRlZCB0byBsaXN0IHRoZSBJRHMgb2YgdGhlIHBoeXNpY2FsIHByb2Nlc3NvcgpvYmplY3Rz LCB3ZSBzaG91bGQgZ28gb25lIHN0ZXAgZnVydGhlciBhbmQgZXhwbGljaXRseSBsaXN0IHRoZSBJ RHMgb2YKdGhlIHZpcnR1YWwgcHJvY2Vzc29yIG9iamVjdHMuICBUaGlzIGxlYXZlcyB1cyBmbGV4 aWJpbGl0eSBpZiB3ZSBoYXZlIHRvCmF2b2lkIGF3a3dhcmQgZmlybXdhcmUgSUQgbGF5b3V0cy4K Ckl0IGlzIGFsc28gd29yayBzdGF0aW5nIHRoYXQgdGhpcyBwdXRzIGFuIHVwcGVyIGxpbWl0IG9u IG5yX3BjcHVzICsKbnJfZG9tMF92Y3B1cyAoYnV0IDQgYmlsbGlvbiBwcm9jZXNzb3JzIHJlYWxs eSBvdWdodCB0byBiZSBlbm91Z2ggZm9yCmFueW9uZS4uLikKCj4gSW4gb3JkZXIgdG8gYmUgYWJs ZSB0byBwZXJmb3JtIHZDUFUgaG90cGx1ZywgdGhlIHZDUFVzIG11c3QgaGF2ZSBhbiBBQ1BJCj4g cHJvY2Vzc29yIG9iamVjdCBpbiB0aGUgQUNQSSBuYW1lc3BhY2UsIHNvIHRoYXQgdGhlIE9TUE0g Y2FuIHJlcXVlc3QKPiBub3RpZmljYXRpb25zIGFuZCBnZXQgdGhlIHZhbHVlIG9mIHRoZSBcX1NU QSBhbmQgXF9NQVQgbWV0aG9kcy4gVGhpcyBjYW4gYmUKPiBwcm9ibGVtYXRpYyBiZWNhdXNlIFhl biBkb2Vzbid0IGtub3cgdGhlIEFDUEkgbmFtZSBvZiB0aGUgb3RoZXIgcHJvY2Vzc29yCj4gb2Jq ZWN0cywgc28gYmxpbmRseSBhZGRpbmcgbmV3IG9uZXMgY2FuIGNyZWF0ZSBuYW1lc3BhY2UgY2xh c2hlcy4KPgo+IFRoaXMgY2FuIGJlIHNvbHZlZCBieSB1c2luZyBhIGRpZmZlcmVudCBBQ1BJIG5h bWUgaW4gb3JkZXIgdG8gZGVzY3JpYmUgdkNQVXMgaW4KPiB0aGUgQUNQSSBuYW1lc3BhY2UuIE1v c3QgaGFyZHdhcmUgdmVuZG9ycyB0ZW5kIHRvIHVzZSBDUFUgb3IgUFIgcHJlZml4ZXMgZm9yCj4g dGhlIHByb2Nlc3NvciBvYmplY3RzLCBzbyB1c2luZyBhICdWUCcgKGllOiBWaXJ0dWFsIFByb2Nl c3NvcikgcHJlZml4IHNob3VsZAo+IHByZXZlbnQgY2xhc2hlcy4KCk9uZSBzeXN0ZW0gSSBoYXZl IHRvIGhhbmQgKHdpdGggbW9yZSB0aGFuIDI1NSBwY3B1cykgdXNlcyBDeHh4CgpUbyBhdm9pZCBu YW1lc3BhY2UgY29sbGlzaW9ucywgSSBjYW4ndCBzZWUgYW55IG9wdGlvbiBidXQgdG8gcGFyc2Ug dGhlCkRTRFQvU1NEVHMgdG8gYXQgbGVhc3QgY29uZmlybSB0aGF0IFZQeHggaXMgYXZhaWxhYmxl IHRvIHVzZS4KCj4KPiBBIFhlbiBHUEUgZGV2aWNlIGJsb2NrIHdpbGwgYmUgdXNlZCBpbiBvcmRl ciB0byBkZWxpdmVyIGV2ZW50cyByZWxhdGVkIHRvIHRoZQo+IHZDUFVzIGF2YWlsYWJsZSB0byB0 aGUgZ3Vlc3QsIHNpbmNlIFhlbiBkb2Vzbid0IGtub3cgaWYgdGhlcmUgYXJlIGFueSBiaXRzCj4g YXZhaWxhYmxlIGluIHRoZSBuYXRpdmUgR1BFcy4gQSBTQ0kgaW50ZXJydXB0IHdpbGwgYmUgaW5q ZWN0ZWQgaW50byB0aGUgZ3Vlc3QKPiBpbiBvcmRlciB0byB0cmlnZ2VyIHRoZSBldmVudC4KPgo+ IFRoZSBmb2xsb3dpbmcgc25pcHBldCBpcyBhIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBBU0wgU1NE VCBjb2RlIHRoYXQgaXMgcHJvcG9zZWQKPiBmb3IgdGhlIGhhcmR3YXJlIGRvbWFpbjoKPgo+ICAg ICBEZWZpbml0aW9uQmxvY2sgKCJTU0RULmFtbCIsICJTU0RUIiwgNSwgIlhlbiIsICJIVk0iLCAw KQo+ICAgICB7Cj4gICAgICAgICBTY29wZSAoXF9TQikKPiAgICAgICAgIHsKPiAgICAgICAgICAg IE9wZXJhdGlvblJlZ2lvbihYRU4sIFN5c3RlbU1lbW9yeSwgMHhERUFEQkVFRiwgNDApCj4gICAg ICAgICAgICBGaWVsZChYRU4sIEJ5dGVBY2MsIE5vTG9jaywgUHJlc2VydmUpIHsKPiAgICAgICAg ICAgICAgICBOQ1BVLCAxNiwgLyogTnVtYmVyIG9mIHZDUFVzICovCj4gICAgICAgICAgICAgICAg TVNVQSwgMzIsIC8qIE1BRFQgY2hlY2tzdW0gYWRkcmVzcyAqLwo+ICAgICAgICAgICAgICAgIE1B UEEsIDMyLCAvKiBNQURUIExBUElDMCBhZGRyZXNzICovCj4gICAgICAgICAgICB9Cj4gICAgICAg ICB9Cj4gICAgICAgICBTY29wZSAoIFxfU0IgKSB7Cj4gICAgICAgICAgICAgT3BlcmF0aW9uUmVn aW9uICggTVNVTSwgU3lzdGVtTWVtb3J5LCBcX1NCLk1TVUEsIDEgKQo+ICAgICAgICAgICAgIEZp ZWxkICggTVNVTSwgQnl0ZUFjYywgTm9Mb2NrLCBQcmVzZXJ2ZSApIHsKPiAgICAgICAgICAgICAg ICAgTVNVLCA4Cj4gICAgICAgICAgICAgfQo+ICAgICAgICAgICAgIE1ldGhvZCAoIFBNQVQsIDIg KSB7Cj4gICAgICAgICAgICAgICAgIElmICggTExlc3MoQXJnMCwgTkNQVSkgKSB7Cj4gICAgICAg ICAgICAgICAgICAgICBSZXR1cm4gKCBUb0J1ZmZlcihBcmcxKSApCj4gICAgICAgICAgICAgICAg IH0KPiAgICAgICAgICAgICAgICAgUmV0dXJuICggQnVmZmVyKCkgezAsIDgsIDB4ZmYsIDB4ZmYs IDAsIDAsIDAsIDB9ICkKPiAgICAgICAgICAgICB9Cj4gICAgICAgICAgICAgUHJvY2Vzc29yICgg VlAwMCwgMCwgMHgwMDAwYjAxMCwgMHgwNiApIHsKPiAgICAgICAgICAgICAgICAgTmFtZSAoIF9I SUQsICJBQ1BJMDAwNyIgKQo+ICAgICAgICAgICAgICAgICBOYW1lICggX1VJRCwgNDI5NDk2NzE2 NyApCj4gICAgICAgICAgICAgICAgIE9wZXJhdGlvblJlZ2lvbiAoIE1BVFIsIFN5c3RlbU1lbW9y eSwgQWRkKFxfU0IuTUFQQSwgMCksIDggKQo+ICAgICAgICAgICAgICAgICBGaWVsZCAoIE1BVFIs IEJ5dGVBY2MsIE5vTG9jaywgUHJlc2VydmUgKSB7Cj4gICAgICAgICAgICAgICAgICAgICBNQVQs IDY0Cj4gICAgICAgICAgICAgICAgIH0KPiAgICAgICAgICAgICAgICAgRmllbGQgKCBNQVRSLCBC eXRlQWNjLCBOb0xvY2ssIFByZXNlcnZlICkgewo+ICAgICAgICAgICAgICAgICAgICAgT2Zmc2V0 KDQpLAo+ICAgICAgICAgICAgICAgICAgICAgRkxHLCAxCj4gICAgICAgICAgICAgICAgIH0KPiAg ICAgICAgICAgICAgICAgTWV0aG9kICggX01BVCwgMCApIHsKPiAgICAgICAgICAgICAgICAgICAg IFJldHVybiAoIFRvQnVmZmVyKE1BVCkgKQo+ICAgICAgICAgICAgICAgICB9Cj4gICAgICAgICAg ICAgICAgIE1ldGhvZCAoIF9TVEEgKSB7Cj4gICAgICAgICAgICAgICAgICAgICBJZiAoIEZMRyAp IHsKPiAgICAgICAgICAgICAgICAgICAgICAgICBSZXR1cm4gKCAweEYgKQo+ICAgICAgICAgICAg ICAgICAgICAgfQo+ICAgICAgICAgICAgICAgICAgICAgUmV0dXJuICggMHgwICkKPiAgICAgICAg ICAgICAgICAgfQo+ICAgICAgICAgICAgICAgICBNZXRob2QgKCBfRUowLCAxLCBOb3RTZXJpYWxp emVkICkgewo+ICAgICAgICAgICAgICAgICAgICAgU2xlZXAgKCAweEM4ICkKPiAgICAgICAgICAg ICAgICAgfQo+ICAgICAgICAgICAgIH0KPiAgICAgICAgICAgICBQcm9jZXNzb3IgKCBWUDAxLCAx LCAweDAwMDBiMDEwLCAweDA2ICkgewo+ICAgICAgICAgICAgICAgICBOYW1lICggX0hJRCwgIkFD UEkwMDA3IiApCj4gICAgICAgICAgICAgICAgIE5hbWUgKCBfVUlELCA0Mjk0OTY3MTY4ICkKPiAg ICAgICAgICAgICAgICAgT3BlcmF0aW9uUmVnaW9uICggTUFUUiwgU3lzdGVtTWVtb3J5LCBBZGQo XF9TQi5NQVBBLCA4KSwgOCApCj4gICAgICAgICAgICAgICAgIEZpZWxkICggTUFUUiwgQnl0ZUFj YywgTm9Mb2NrLCBQcmVzZXJ2ZSApIHsKPiAgICAgICAgICAgICAgICAgICAgIE1BVCwgNjQKPiAg ICAgICAgICAgICAgICAgfQo+ICAgICAgICAgICAgICAgICBGaWVsZCAoIE1BVFIsIEJ5dGVBY2Ms IE5vTG9jaywgUHJlc2VydmUgKSB7Cj4gICAgICAgICAgICAgICAgICAgICBPZmZzZXQoNCksCj4g ICAgICAgICAgICAgICAgICAgICBGTEcsIDEKPiAgICAgICAgICAgICAgICAgfQo+ICAgICAgICAg ICAgICAgICBNZXRob2QgKCBfTUFULCAwICkgewo+ICAgICAgICAgICAgICAgICAgICAgUmV0dXJu ICggUE1BVCAoMSwgTUFUKSApCj4gICAgICAgICAgICAgICAgIH0KPiAgICAgICAgICAgICAgICAg TWV0aG9kICggX1NUQSApIHsKPiAgICAgICAgICAgICAgICAgICAgIElmICggTExlc3MoMSwgXF9T Qi5OQ1BVKSApIHsKPiAgICAgICAgICAgICAgICAgICAgICAgICBJZiAoIEZMRyApIHsKPiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgUmV0dXJuICggMHhGICkKPiAgICAgICAgICAgICAgICAg ICAgICAgICB9Cj4gICAgICAgICAgICAgICAgICAgICB9Cj4gICAgICAgICAgICAgICAgICAgICBS ZXR1cm4gKCAweDAgKQo+ICAgICAgICAgICAgICAgICB9Cj4gICAgICAgICAgICAgICAgIE1ldGhv ZCAoIF9FSjAsIDEsIE5vdFNlcmlhbGl6ZWQgKSB7Cj4gICAgICAgICAgICAgICAgICAgICBTbGVl cCAoIDB4QzggKQo+ICAgICAgICAgICAgICAgICB9Cj4gICAgICAgICAgICAgfQo+ICAgICAgICAg ICAgIE9wZXJhdGlvblJlZ2lvbiAoIFBSU1QsIFN5c3RlbUlPLCAweGFmMDAsIDEgKQoKVGhpcyBh bHNvIGhhcyBhIGNoYW5jZSBvZiBjb2xsaXNpb24sIGJvdGggd2l0aCB0aGUgc3lzdGVtIEFDUEkK Y29udHJvbGxlciwgYW5kIGFsc28gd2l0aCBQQ0llIGRldmljZXMgYWR2ZXJ0aXNpbmcgSU8tQkFS cy4gIChBbGwKZ3JhcGhpY3MgY2FyZHMgZXZlciBoYXZlIElPLUJBUnMsIGJlY2F1c2Ugd2luZG93 cyByZWZ1c2VzIHRvIGJpbmQgYQpncmFwaGljcyBkcml2ZXIgdG8gYSBQQ0kgZ3JhcGhpY3MgZGV2 aWNlIGlmIHRoZSBQQ0kgZGV2aWNlIGRvZXNuJ3QgaGF2ZQphdCBsZWFzdCBvbmUgSU8tQkFSLiAg QmVjYXVzZSBQQ0llIHJlcXVpcmVzIDRrIGFsaWdubWVudCBvbiB0aGUgdXBzdHJlYW0KYnJpZGdl IElPLXdpbmRvd3MsIHRoZXJlIGlzIGEgc3VycHJpc2luZ2x5IGxvdyBsaW1pdCBvbiB0aGUgbnVt YmVyIG9mCmdyYXBoaWNzIGNhcmRzIHlvdSBjYW4gcHV0IGluIGEgc2VydmVyIGFuZCBoYXZlIGZ1 bmN0aW9uaW5nIHRvIHdpbmRvd3MKc2F0aXNmYWN0aW9uLikKCkFzIHdpdGggdGhlIG90aGVyIHJp c2tzIG9mIGNvbGxpc2lvbnMsIFhlbiBpcyBnb2luZyB0byBoYXZlIHRvIHNlYXJjaAp0aGUgc3lz dGVtIHRvIGZpbmQgYSBmcmVlIGFyZWEgdG8gdXNlLgoKPiAgICAgICAgICAgICBGaWVsZCAoIFBS U1QsIEJ5dGVBY2MsIE5vTG9jaywgUHJlc2VydmUgKSB7Cj4gICAgICAgICAgICAgICAgIFBSUywg Mgo+ICAgICAgICAgICAgIH0KPiAgICAgICAgICAgICBNZXRob2QgKCBQUlNDLCAwICkgewo+ICAg ICAgICAgICAgICAgICBTdG9yZSAoIFRvQnVmZmVyKFBSUyksIExvY2FsMCApCj4gICAgICAgICAg ICAgICAgIFN0b3JlICggRGVyZWZPZihJbmRleChMb2NhbDAsIDApKSwgTG9jYWwxICkKPiAgICAg ICAgICAgICAgICAgQW5kICggTG9jYWwxLCAxLCBMb2NhbDIgKQo+ICAgICAgICAgICAgICAgICBJ ZiAoIExOb3RFcXVhbChMb2NhbDIsIFxfU0IuVlAwMC5GTEcpICkgewo+ICAgICAgICAgICAgICAg ICAgICAgU3RvcmUgKCBMb2NhbDIsIFxfU0IuVlAwMC5GTEcgKQo+ICAgICAgICAgICAgICAgICAg ICAgSWYgKCBMRXF1YWwoTG9jYWwyLCAxKSApIHsKPiAgICAgICAgICAgICAgICAgICAgICAgICBO b3RpZnkgKCBWUDAwLCAxICkKPiAgICAgICAgICAgICAgICAgICAgICAgICBTdWJ0cmFjdCAoIFxf U0IuTVNVLCAxLCBcX1NCLk1TVSApCj4gICAgICAgICAgICAgICAgICAgICB9Cj4gICAgICAgICAg ICAgICAgICAgICBFbHNlIHsKPiAgICAgICAgICAgICAgICAgICAgICAgICBOb3RpZnkgKCBWUDAw LCAzICkKPiAgICAgICAgICAgICAgICAgICAgICAgICBBZGQgKCBcX1NCLk1TVSwgMSwgXF9TQi5N U1UgKQo+ICAgICAgICAgICAgICAgICAgICAgfQo+ICAgICAgICAgICAgICAgICB9Cj4gICAgICAg ICAgICAgICAgIFNoaWZ0UmlnaHQgKCBMb2NhbDEsIDEsIExvY2FsMSApCj4gICAgICAgICAgICAg ICAgIEFuZCAoIExvY2FsMSwgMSwgTG9jYWwyICkKPiAgICAgICAgICAgICAgICAgSWYgKCBMTm90 RXF1YWwoTG9jYWwyLCBcX1NCLlZQMDEuRkxHKSApIHsKPiAgICAgICAgICAgICAgICAgICAgIFN0 b3JlICggTG9jYWwyLCBcX1NCLlZQMDEuRkxHICkKPiAgICAgICAgICAgICAgICAgICAgIElmICgg TEVxdWFsKExvY2FsMiwgMSkgKSB7Cj4gICAgICAgICAgICAgICAgICAgICAgICAgTm90aWZ5ICgg VlAwMSwgMSApCj4gICAgICAgICAgICAgICAgICAgICAgICAgU3VidHJhY3QgKCBcX1NCLk1TVSwg MSwgXF9TQi5NU1UgKQo+ICAgICAgICAgICAgICAgICAgICAgfQo+ICAgICAgICAgICAgICAgICAg ICAgRWxzZSB7Cj4gICAgICAgICAgICAgICAgICAgICAgICAgTm90aWZ5ICggVlAwMSwgMyApCj4g ICAgICAgICAgICAgICAgICAgICAgICAgQWRkICggXF9TQi5NU1UsIDEsIFxfU0IuTVNVICkKPiAg ICAgICAgICAgICAgICAgICAgIH0KPiAgICAgICAgICAgICAgICAgfQo+ICAgICAgICAgICAgICAg ICBSZXR1cm4gKCBPbmUgKQo+ICAgICAgICAgICAgIH0KPiAgICAgICAgIH0KPiAgICAgICAgIERl dmljZSAoIFxfU0IuR1BFWCApIHsKPiAgICAgICAgICAgICBOYW1lICggX0hJRCwgIkFDUEkwMDA2 IiApCj4gICAgICAgICAgICAgTmFtZSAoIF9VSUQsICJYRU5HUEUiICkKPiAgICAgICAgICAgICBO YW1lICggX0NSUywgUmVzb3VyY2VUZW1wbGF0ZSgpIHsKPiAgICAgICAgICAgICAgICAgSU8gKERl Y29kZTE2LCAweGFmZTAgLCAweGFmZTAsIDB4MDAsIDB4NCkKPiAgICAgICAgICAgICB9ICkKPiAg ICAgICAgICAgICBNZXRob2QgKCBfRTAyICkgewo+ICAgICAgICAgICAgICAgICBcX1NCLlBSU0Mg KCkKPiAgICAgICAgICAgICB9Cj4gICAgICAgICB9Cj4gICAgIH0KPgo+IFNpbmNlIHRoZSBwb3Np dGlvbiBvZiB0aGUgWEVOIGRhdGEgbWVtb3J5IGFyZWEgaXMgbm90IGtub3csIHRoZSBoeXBlcnZp c29yIHdpbGwKPiBoYXZlIHRvIHJlcGxhY2UgdGhlIGFkZHJlc3MgMHhkZWFkYmVlZiB3aXRoIHRo ZSBhY3R1YWwgbWVtb3J5IGFkZHJlc3Mgd2hlcmUKPiB0aGlzIHN0cnVjdHVyZSBoYXMgYmVlbiBj b3BpZWQuIFRoaXMgd2lsbCBpbnZvbHZlIGEgbWVtb3J5IHNlYXJjaCBvZiB0aGUgQU1MCj4gY29k ZSByZXN1bHRpbmcgZnJvbSB0aGUgY29tcGlsYXRpb24gb2YgdGhlIGFib3ZlIEFTTCBzbmlwcGV0 LgoKVGhpcyBpcyBhbHNvIHNsaWdodGx5IHJpc2t5LiAgSWYgd2UgbmVlZCB0byBkbyB0aGlzLCBj YW4gd2UgZ2V0IGEKcmVsb2NhdGlvbiBsaXN0IGZyb20gdGhlIGNvbXBpbGVkIHRhYmxlIGZyb20g aWFzbD8KCn5BbmRyZXcKCj4KPiBJbiBvcmRlciB0byBpbXBsZW1lbnQgdGhpcywgdGhlIGh5cGVy dmlzb3IgYnVpbGQgaXMgZ29pbmcgdG8gdXNlIHBhcnQgb2YKPiBsaWJhY3BpIGFuZCB0aGUgaWFz bCBjb21waWxlci4KPgoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fClhlbi1kZXZlbCBtYWlsaW5nIGxpc3QKWGVuLWRldmVsQGxpc3RzLnhlbi5vcmcKaHR0 cHM6Ly9saXN0cy54ZW4ub3JnL3hlbi1kZXZlbAo=