From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Huang, Kai" Subject: Re: [RFC PATCH 00/15] RFC: SGX virtualization design and draft patches Date: Mon, 17 Jul 2017 18:08:45 +1200 Message-ID: <8b4da043-e27e-773a-52f7-625fa2aa0b13@linux.intel.com> References: Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: Content-Language: en-US List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: Andrew Cooper , Kai Huang , xen-devel@lists.xen.org Cc: kevin.tian@intel.com, sstabellini@kernel.org, wei.liu2@citrix.com, George.Dunlap@eu.citrix.com, ian.jackson@eu.citrix.com, tim@xen.org, jbeulich@suse.com List-Id: xen-devel@lists.xenproject.org SGkgQW5kcmV3LAoKVGhhbmsgeW91IHZlcnkgbXVjaCBmb3IgY29tbWVudHMuIFNvcnJ5IGZvciBs YXRlIHJlcGx5LCBhbmQgcGxlYXNlIHNlZSAKbXkgcmVwbHkgYmVsb3cuCgpPbiA3LzEyLzIwMTcg MjoxMyBBTSwgQW5kcmV3IENvb3BlciB3cm90ZToKPiBPbiAwOS8wNy8xNyAwOTowMywgS2FpIEh1 YW5nIHdyb3RlOgo+PiBIaSBhbGwsCj4+Cj4+IFRoaXMgc2VyaWVzIGlzIFJGQyBYZW4gU0dYIHZp cnR1YWxpemF0aW9uIHN1cHBvcnQgZGVzaWduIGFuZCBSRkMgZHJhZnQgCj4+IHBhdGNoZXMuCj4g Cj4gVGhhbmt5b3UgdmVyeSBtdWNoIGZvciB0aGlzIGRlc2lnbiBkb2MuCj4gCj4+IDIuIFNHWCBW aXJ0dWFsaXphdGlvbiBEZXNpZ24KPj4KPj4gMi4xIEhpZ2ggTGV2ZWwgVG9vbHN0YWNrIENoYW5n ZXM6Cj4+Cj4+IDIuMS4xIE5ldyAnZXBjJyBwYXJhbWV0ZXIKPj4KPj4gRVBDIGlzIGxpbWl0ZWQg cmVzb3VyY2UuIEluIG9yZGVyIHRvIHVzZSBFUEMgZWZmaWNpZW50bHkgYW1vbmcgYWxsIAo+PiBk b21haW5zLAo+PiB3aGVuIGNyZWF0aW5nIGd1ZXN0LCBhZG1pbmlzdHJhdG9yIHNob3VsZCBiZSBh YmxlIHRvIHNwZWNpZnkgZG9tYWluJ3MgCj4+IHZpcnR1YWwKPj4gRVBDIHNpemUuIEFuZCBhZG1p bgo+PiBhbGFvIHNob3VsZCBiZSBhYmxlIHRvIGdldCBhbGwgZG9tYWluJ3MgdmlydHVhbCBFUEMg c2l6ZS4KPj4KPj4gRm9yIHRoaXMgcHVycG9zZSwgYSBuZXcgJ2VwYyA9IDxzaXplPicgcGFyYW1l dGVyIGlzIGFkZGVkIHRvIFhMIAo+PiBjb25maWd1cmF0aW9uCj4+IGZpbGUuIFRoaXMgcGFyYW1l dGVyIHNwZWNpZmllcyBndWVzdCdzIHZpcnR1YWwgRVBDIHNpemUuIFRoZSBFUEMgYmFzZSAKPj4g YWRkcmVzcwo+PiB3aWxsIGJlIGNhbGN1bGF0ZWQgYnkgdG9vbHN0YWNrIGludGVybmFsbHksIGFj Y29yZGluZyB0byBndWVzdCdzIAo+PiBtZW1vcnkgc2l6ZSwKPj4gTU1JTyBzaXplLCBldGMuICdl cGMnIGlzIE1CIGluIHVuaXQgYW5kIGFueSAxTUIgYWxpZ25lZCB2YWx1ZSB3aWxsIGJlIAo+PiBh Y2NlcHRlZC4KPiAKPiBIb3cgd2lsbCB0aGlzIGludGVyYWN0IHdpdGggbXVsdGktcGFja2FnZSBz ZXJ2ZXJzPyAgRXZlbiB0aG91Z2ggaXRzIGZpbmUgCj4gdG8gaW1wbGVtZW50IHRoZSBzaW5nbGUt cGFja2FnZSBzdXBwb3J0IGZpcnN0LCB0aGUgZGVzaWduIHNob3VsZCBiZSAKPiBleHRlbnNpYmxl IHRvIHRoZSBtdWx0aS1wYWNrYWdlIGNhc2UuCj4gCj4gRmlyc3Qgb2YgYWxsLCB3aGF0IGFyZSB0 aGUgaW1wbGljYXRpb25zIG9mIG11bHRpLXBhY2thZ2UgU0dYPwo+IAo+IChTb21ld2hlcmUpIHlv dSBtZW50aW9uIGNoYW5nZXMgdG8gc2NoZWR1bGluZy4gIEkgcHJlc3VtZSB0aGlzIGlzIAo+IGJl Y2F1c2UgYSBndWVzdCB3aXRoIEVQQyBtYXBwaW5ncyBpbiBFUFQgbXVzdCBiZSBzY2hlZHVsZWQg b24gdGhlIHNhbWUgCj4gcGFja2FnZSwgb3IgRU5DTFVbRUVOVEVSXSB3aWxsIGZhaWwuICBJIHBy ZXN1bWUgYWxzbyB0aGF0IGVhY2ggcGFja2FnZSAKPiB3aWxsIGhhdmUgc2VwYXJhdGUsIHVucmVs YXRlZCBwcml2YXRlIGtleXM/CgpUaGUgRU5DTFVbRUVOVEVdIHdpbGwgY29udGludWUgdG8gd29y ayBvbiBtdWx0aS1wYWNrYWdlIHNlcnZlci4gQWN0dWFsbHkgCkkgd2FzIHRvbGQgYWxsIElTQSBl eGlzdGluZyBiZWhhdmlvciBkb2N1bWVudGVkIGluIFNETSB3b24ndCBjaGFuZ2UgZm9yIApzZXJ2 ZXIsIGFzIG90aGVyd2lzZSB0aGlzIHdvdWxkIGJlIGEgYmFkIGRlc2lnbiA6KQoKVW5mb3J0dW5h dGVseSBJIHdhcyB0b2xkIEkgY2Fubm90IHRhbGsgYWJvdXQgTVAgc2VydmVyIFNHWCBhIGxvdCBu b3cuIApCYXNpY2FsbHkgSSBjYW4gb25seSB0YWxrIGFib3V0IHN0YWZmIGFscmVhZHkgZG9jdW1l bnRlZCBpbiBTRE0gKHNvcnJ5IAo6KCApLiBCdXQgSSBndWVzcyBtdWx0aXBsZSBFUEMgaW4gQ1BV SUQgaXMgZGVzaWduZWQgdG8gY292ZXIgTVAgc2VydmVyLCAKYXQgbGVhc2UgbWFpbmx5ICh3ZSBj YW4gZG8gcmVhc29uYWJsZSBndWVzcykuCgpJbiB0ZXJtcyBvZiB0aGUgZGVzaWduLCBJIHRoaW5r IHdlIGNhbiBmb2xsb3cgWEwgY29uZmlnIGZpbGUgcGFyYW1ldGVycyAKZm9yIG1lbW9yeS4gJ2Vw YycgcGFyYW1ldGVyIHdpbGwgYWx3YXlzIHNwZWNpZnkgdG90b2wgRVBDIHNpemUgdGhhdCB0aGUg CmRvbWFpbiBoYXMuIEFuZCB3ZSBjYW4gdXNlIGV4aXN0aW5nIE5VTUEgcmVsYXRlZCBwYXJhbWV0 ZXJzLCBzdWNoIGFzIApzZXR0aW5nIGNwdXM9Jy4uLicgdG8gcGh5c2ljYWxseSBwaW4gdmNwdSB0 byBzcGVjaWZpYyBwQ1BVcywgc28gdGhhdCBFUEMgCndpbGwgYmUgbW9zdGx5IGFsbG9jYXRlZCBm cm9tIHJlbGF0ZWQgbm9kZS4gSWYgdGhhdCBub2RlIHJ1bnMgb3V0IG9mIApFUEMsIHdlIGNhbiBk ZWNpZGUgd2hldGhlciB0byBhbGxvY2F0ZSBFUEMgZnJvbSBvdGhlciBub2RlLCBvciBmYWlsIHRv IApjcmVhdGUgZG9tYWluLiBJIGtub3cgTGludXggc3VwcG9ydHMgTlVNQSBwb2xpY3kgd2hpY2gg Y2FuIHNwZWNpZnkgCndoZXRoZXIgdG8gYWxsb3cgYWxsb2NhdGluZyBtZW1vcnkgZnJvbSBvdGhl ciBub2RlcywgZG9lcyBYZW4gaGFzIHN1Y2ggCnBvbGljeT8gU29ycnkgSSBoYXZlbid0IGNoZWNr ZWQgdGhpcy4gSWYgWGVuIGhhcyBzdWNoIHBvbGljeSwgd2UgbmVlZCB0byAKY2hvb3NlIHdoZXRo ZXIgdG8gdXNlIG1lbW9yeSBwb2xpY3ksIG9yIGludHJvZHVjZSBuZXcgcG9saWN5IGZvciBFUEMu CgpJZiB3ZSBhcmUgZ29pbmcgdG8gc3VwcG9ydCB2TlVBTSBFUEMgaW4gdGhlIGZ1dHVyZS4gV2Ug Y2FuIGFsc28gdXNlIApzaW1pbGFyIHdheSB0byBjb25maWcgdk5VTUEgRVBDIGluIFhMIGNvbmZp Zy4KClNvcnJ5IEkgbWVudGlvbmVkIHNjaGVkdWxpbmcuIEkgc2hvdWxkIHNheSAqcG90ZW50aWFs bHkqIDopLiBNeSB0aGlua2luZyAKd2FzIGFzIFNHWCBpcyBwZXItdGhyZWFkLCB0aGVuIFNHWCBp bmZvIHJlcG9ydGVkIGJ5IGRpZmZlcmVudCBDUFUgCnBhY2thZ2UgbWF5IGJlIGRpZmZlcmVudCAo ZXgsIHdoZXRoZXIgU0dYMiBpcyBzdXBwb3J0ZWQpLCB0aGVuIHdlIG1heSAKbmVlZCBzY2hlZHVs ZXIgdG8gYmUgYXdhcmUgb2YgU0dYLiBCdXQgSSB0aGluayB3ZSBkb24ndCBoYXZlIHRvIGNvbnNp ZGVyIAp0aGlzIG5vdy4KCldoYXQncyB5b3VyIGNvbW1lbnRzPwoKPiAKPiBJIHByZXN1bWUgdGhl cmUgaXMgbm8gc2Vuc2libGUgd2F5IChldmVuIG9uIG5hdGl2ZSkgZm9yIGEgc2luZ2xlIGxvZ2lj YWwgCj4gcHJvY2VzcyB0byB1c2UgbXVsdGlwbGUgZGlmZmVyZW50IGVuY2xhdmVzPyAgQnkgZXh0 ZW5zaW9uLCBkb2VzIGl0IG1ha2UgCj4gc2Vuc2UgdG8gdHJ5IGFuZCBvZmZlciBwYXJ0cyBvZiBt dWx0aXBsZSBlbmNsYXZlcyB0byBhIHNpbmdsZSBWTT8KClRoZSBuYXRpdmUgbWFjaGluZSBhbGxv d3MgcnVubmluZyBtdWx0aXBsZSBlbmNsYXZlcywgZXZlbiBzaWduZWQgYnkgCm11bHRpcGxlIGF1 dGhvcnMuIFNHWCBvbmx5IGhhcyBsaW1pdCB0aGF0IGJlZm9yZSBsYXVuY2hpbmcgYW55IG90aGVy IAplbmNsYXZlLCBMYXVuY2ggRW5jbGF2ZSAoTEUpIG11c3QgYmUgbGF1bmNoZWQuIExFIGlzIHRo ZSBvbmx5IGVuY2xhdmUgCnRoYXQgZG9lc24ndCByZXF1aXJlIEVJTklUVE9LRU4gaW4gRUlOSVQu IEZvciBMRSwgaXRzIHNpZ25lciAKKFNIQTI1NihzaWdzdHJ1Y3QtPm1vZHVsdXMpKSBtdXN0IGJl IGVxdWFsIHRvIHRoZSB2YWx1ZSBpbiAKSUEzMl9TR1hMRVBVQktFWUhBU0huIE1TUnMuIExFIHdp bGwgZ2VuZXJhdGVzIEVJTklUVE9LRU4gZm9yIG90aGVyIAplbmNsYXZlcyAoRUlOSVQgZm9yIG90 aGVyIGVuY2xhdmVzIHJlcXVpcmVzIEVJTklUVE9LRU4pLiBGb3Igb3RoZXIgCmVuY2xhdmVzLCB0 aGVyZSdzIG5vIHN1Y2ggbGltaXRhdGlvbiB0aGF0IGVuY2xhdmUncyBzaWduZXIgbXVzdCBtYXRj aCAKSUEzMl9TR1hMRVBVQktFWUhBU0huIHNvIHRoZSBzaWduZXIgY2FuIGJlIGFueWJvZHkuIEJ1 dCBmb3Igb3RoZXIgCmVuY2xhdmVzLCBiZWZvcmUgcnVubmluZyBFSU5JVCwgdGhlIExFJ3Mgc2ln bmVyICh3aGljaCBpcyBlcXVhbCB0byAKSUEzMl9TR1hMRVBVQktFWUhBU0huIGFzIGV4cGxhaW5l ZCBhYm92ZSkgbmVlZHMgdG8gYmUgdXBkYXRlZCB0byAKSUEzMl9TR1hMRVBVQktFWUhBU0huIChN U1JzIGNhbiBiZSBjaGFuZ2VkLCBmb3IgZXhhbXBsZSwgd2hlbiB0aGVyZSdzIAptdWx0aXBsZSBM RXMgcnVubmluZyBpbiBPUykuIFRoaXMgaXMgYmVjYXVzZSBFSU5JVCBuZWVkcyB0byBwZXJmb3Jt IApFSU5JVFRPS0VOIGludGVncml0eSBjaGVjayAoRUlOSVRUT0tFTiBjb250YWlucyBNQUMgaW5m byB0aGF0IGNhbGN1bGF0ZWQgCmJ5IExFLCBhbmQgRUlOSVQgbmVlZHMgTEUncyBJQTMyX1NHWExF UFVCS0VZSEFTSG4gdG8gZGVyaXZlIHRoZSBrZXkgdG8gCnZlcmlmeSBNQUMpLgoKU0dYIGluIFZN IGRvZXNuJ3QgY2hhbmdlIHRob3NlIGJlaGF2aW9ycywgc28gaW4gVk0sIHRoZSBlbmNsYXZlcyBj YW4gCmFsc28gYmUgc2lnbmVkIGJ5IGFueW9uZSwgYnV0IFhlbiBuZWVkcyB0byBlbXVsYXRlIElB MzJfU0dYTEVQVUJLRVlIQVNIbiAKc28gdGhhdCB3aGVuIG9uZSBWTSBpcyBydW5uaW5nLCB0aGUg Y29ycmVjdCBJQTMyX1NHWExFUFVCS0VZSEFTSG4gYXJlIAphbHJlYWR5IGluIHBoeXNpY2FsIE1T UnMuCgo+IAo+PiAyLjEuMyBOb3RpZnkgZG9tYWluJ3MgdmlydHVhbCBFUEMgYmFzZSBhbmQgc2l6 ZSB0byBYZW4KPj4KPj4gWGVuIG5lZWRzIHRvIGtub3cgZ3Vlc3QncyBFUEMgYmFzZSBhbmQgc2l6 ZSBpbiBvcmRlciB0byBwb3B1bGF0ZSBFUEMgCj4+IHBhZ2VzIGZvcgo+PiBpdC4gVG9vbHN0YWNr IG5vdGlmaWVzIEVQQyBiYXNlIGFuZCBzaXplIHRvIFhlbiB2aWEgWEVOX0RPTUNUTF9zZXRfY3B1 aWQuCj4gCj4gSSBhbSBjdXJyZW50bHkgaW4gdGhlIHByb2Nlc3Mgb2YgcmV3b3JraW5nIHRoZSBY ZW4vVG9vbHN0YWNrIGludGVyZmFjZSAKPiB3aGVuIGl0IGNvbWVzIHRvIENQVUlEIGhhbmRsaW5n LiAgVGhlIGxhdGVzdCBkZXNpZ24gaXMgYXZhaWxhYmxlIGhlcmU6IAo+IGh0dHBzOi8vbGlzdHMu eGVucHJvamVjdC5vcmcvYXJjaGl2ZXMvaHRtbC94ZW4tZGV2ZWwvMjAxNy0wNy9tc2cwMDM3OC5o dG1sIAo+IGJ1dCB0aGUgZW5kIHJlc3VsdCB3aWxsIGJlIHRoZSB0b29sc3RhY2sgZXhwcmVzc2lu ZyBpdHMgQ1BVSUQgcG9saWN5IGluIAo+IHRlcm1zIG9mIHRoZSBhcmNoaXRlY3R1cmFsIGxheW91 dC4KPiAKPiBUaGVyZWZvcmUsIEkgd291bGQgZXhwZWN0IHRoYXQsIGhvd2V2ZXIgdGhlIHNldHRp bmcgaXMgcmVwcmVzZW50ZWQgaW4gCj4gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSwgeGwvbGlieGwg d291bGQgY29uZmlndXJlIGl0IHdpdGggdGhlIGh5cGVydmlzb3IgCj4gYnkgc2V0dGluZyBDUFVJ RC4weDEyWzJdIHdpdGggdGhlIGFwcHJvcHJpYXRlIGJhc2UgYW5kIHNpemUuCgpJIGFncmVlLiBJ IHNhdyB5b3UgYXJlIHBsYW5uaW5nIHRvIGludHJvZHVjZSBuZXcgClhFTl9ET01DVExfZ2V0e3Nl dH1fY3B1aWRfcG9saWN5LCB3aGljaCB3aWxsIGFsbG93IHRvb2xzdGFjayB0byAKcXVlcnkvc2V0 IGNwdWlkIHBvbGljeSBpbiBzaW5nbGUgaHlwZXJjYWxsIChpZiBJIHVuZGVyc3RhbmQgY29ycmVj dGx5KSwgCnNvIEkgdGhpbmsgd2Ugc2hvdWxkIGRlZmluaXRlbHkgdXNlIHRoZSBuZXcgaHlwZXJj YWxscy4KCkkgYWxzbyBzYXcgeW91IGFyZSBwbGFubmluZyB0byBpbnRyb2R1Y2UgbmV3IGh5cGVy Y2FsbCB0byBxdWVyeSAKcmF3L2hvc3QvcHZfbWF4L2h2bV9tYXggY3B1aWQgcG9saWN5IChub3Qg anVzdCBmZWF0dXJlc2V0KSwgc28gSSB0aGluayAKJ3hsIHNneGluZm8nIChvciB4bCBpbmZvIC1z Z3gpIGNhbiBjZXJ0YWlubHkgdXNlIHRoYXQgdG8gZ2V0IHBoeXNpY2FsIApTR1ggaW5mbyAoRVBD IGluZm8pLiBBbmQgJ3hsIHNneGxpc3QnIChvciB4bCBsaXN0IC1zZ3gpIGNhbiB1c2UgClhFTl9E T01DVExfZ2V0e3NldH1fY3B1aWRfcG9saWN5IHRvIGRpc3BsYXkgZG9tYWluJ3MgU0dYIGluZm8g KEVQQyBpbmZvKS4KCkJ0dywgZG8geW91IHRoaW5rIHdlIG5lZWQgJ3hsIHNneGluZm8nIGFuZCAn eGwgc2d4bGlzdCc/IElmIHdlIGRvLCB3aGljaCAKaXMgYmV0dGVyPyBOZXcgJ3hsIHNneGluZm8n IGFuZCAneGwgc2d4bGlzdCcsIG9yIGV4dGVuZGluZyBleGlzdGluZyAneGwgCmluZm8nIGFuZCAn eGwgbGlzdCcgdG8gc3VwcG9ydCBTR1gsIHN1Y2ggYXMgJ3hsIGluZm8gLXNneCcgYW5kICd4bCBs aXN0IAotc2d4JyBhYm92ZT8KCgo+IAo+PiAyLjEuNCBMYXVuY2ggQ29udHJvbCBTdXBwb3J0ICg/ KQo+Pgo+PiBYZW4gTGF1bmNoIENvbnRyb2wgU3VwcG9ydCBpcyBhYm91dCB0byBzdXBwb3J0IHJ1 bm5pbmcgbXVsdGlwbGUgCj4+IGRvbWFpbnMgd2l0aAo+PiBlYWNoIHJ1bm5pbmcgaXRzIG93biBM RSBzaWduZWQgYnkgZGlmZmVyZW50IG93bmVycyAoaWYgSFcgYWxsb3dzLCAKPj4gZXhwbGFpbmVk Cj4+IGJlbG93KS4gQXMgZXhwbGFpbmVkIGluIDEuNCBTR1ggTGF1bmNoIENvbnRyb2wsIEVJTklU IGZvciBMRSAoTGF1bmNoIAo+PiBFbmNsYXZlKQo+PiBvbmx5IHN1Y2NlZWRzIHdoZW4gU0hBMjU2 KFNJR1NUUlVDVC5tb2R1bHVzKSBtYXRjaGVzIAo+PiBJQTMyX1NHWExFUFVCS0VZSEFTSG4sCj4+ IGFuZCBFSU5JVCBmb3Igb3RoZXIgZW5jbGF2ZXMgd2lsbCBkZXJpdmUgRUlOSVRUT0tFTiBrZXkg YWNjb3JkaW5nIHRvCj4+IElBMzJfU0dYTEVQVUJLRVlIQVNIbi4gVGhlcmVmb3JlLCB0byBzdXBw b3J0IHRoaXMsIGd1ZXN0J3MgdmlydHVhbAo+PiBJQTMyX1NHWExFUFVCS0VZSEFTSG4gbXVzdCBi ZSB1cGRhdGVkIHRvIHBoeWlzY2FsIE1TUnMgYmVmb3JlIEVJTklUIAo+PiAod2hpY2gKPj4gYWxz byBtZWFucyB0aGUgcGh5c2ljYWwgSUEzMl9TR1hMRVBVQktFWUhBU0huIG5lZWQgdG8gYmUgKnVu bG9ja2VkKiBpbiAKPj4gQklPUwo+PiBiZWZvcmUgYm9vdGluZyB0byBPUykuCj4+Cj4+IEZvciBw aHlzaWNhbCBtYWNoaW5lLCBpdCBpcyBCSU9TJ3Mgd3JpdGVyJ3MgZGVjaXNpb24gdGhhdCB3aGV0 aGVyIEJJT1MgCj4+IHdvdWxkCj4+IHByb3ZpZGUgaW50ZXJmYWNlIGZvciB1c2VyIHRvIHNwZWNp ZnkgY3VzdG9tZXJpemVkIAo+PiBJQTMyX1NHWExFUFVCS0VZSEFTSG4gKGl0Cj4+IGlzIGRlZmF1 bHQgdG8gZGlnZXN0IG9mIEludGVsJ3Mgc2lnbmluZyBrZXkgYWZ0ZXIgcmVzZXQpLiBJbiByZWFs aXR5LCAKPj4gT1MncyBTR1gKPj4gZHJpdmVyIG1heSByZXF1aXJlIEJJT1MgdG8gbWFrZSBNU1Jz ICp1bmxvY2tlZCogYW5kIGFjdGl2ZWx5IHdyaXRlIHRoZSAKPj4gaGFzaAo+PiB2YWx1ZSB0byBN U1JzIGluIG9yZGVyIHRvIHJ1biBFSU5JVCBzdWNjZXNzZnVsbHksIGFzIGluIHRoaXMgY2FzZSwg dGhlIAo+PiBkcml2ZXIKPj4gd2lsbCBub3QgZGVwZW5kIG9uIEJJT1MncyBjYXBhYmlsaXR5ICh3 aGV0aGVyIGl0IGFsbG93cyB1c2VyIHRvIAo+PiBjdXN0b21lcml6ZQo+PiBJQTMyX1NHWExFUFVC S0VZSEFTSG4gdmFsdWUpLgo+Pgo+PiBUaGUgcHJvYmxlbSBpcyBmb3IgWGVuLCBkbyB3ZSBuZWVk IGEgbmV3IHBhcmFtZXRlciwgc3VjaCBhcyAKPj4gJ2xlaGFzaD08U0hBMjU2PicKPj4gdG8gc3Bl Y2lmeSB0aGUgZGVmYXVsdCB2YWx1ZSBvZiBndXNldCdzIHZpcnR1YWwgSUEzMl9TR1hMRVBVQktF WUhBU0huPyAKPj4gQW5kIGRvCj4+IHdlIG5lZWQgYSBuZXcgcGFyYW1ldGVyLCBzdWNoIGFzICds ZXdyJyB0byBzcGVjaWZ5IHdoZXRoZXIgZ3Vlc3QncyAKPj4gdmlydHVhbCBNU1JzCj4+IGFyZSBs b2NrZWQgb3Igbm90IGJlZm9yZSBoYW5kbGluZyB0byBndWVzdCdzIE9TPwo+Pgo+PiBJIHRlbmRz IHRvIG5vdCBpbnRyb2R1Y2UgJ2xlaGFzaCcsIGFzIGl0IHNlZW1zIFNHWCBkcml2ZXIgd291bGQg Cj4+IGFjdGl2ZWx5IHVwZGF0ZQo+PiB0aGUgTVNScy4gQW5kIG5ldyBwYXJhbWV0ZXIgd291bGQg YWRkIGFkZGl0aW9uYWwgY2hhbmdlcyBmb3IgdXBwZXIgbGF5ZXIKPj4gc29mdHdhcmUgKHN1Y2gg YXMgb3BlbnN0YWNrKS4gQW5kICdsZXdyJyBpcyBub3QgbmVlZGVkIGVpdGhlciBhcyBYZW4gCj4+ IGNhbiBhbHdheXMKPj4gKnVubG9jayogdGhlIE1TUnMgdG8gZ3Vlc3QuCj4+Cj4+IFBsZWFzZSBn aXZlIGNvbW1lbnRzPwo+Pgo+PiBDdXJyZW50bHkgaW4gbXkgUkZDIHBhdGNoZXMgYWJvdmUgdHdv IHBhcmFtZXRlcnMgYXJlIG5vdCBpbXBsZW1lbnRlZC4KPj4gWGVuIGh5cGVydmlzb3Igd2lsbCBh bHdheXMgKnVubG9jayogdGhlIE1TUnMuIFdoZXRoZXIgdGhlcmUgaXMgJ2xlaGFzaCcKPj4gcGFy YW1ldGVyIG9yIG5vdCBkb2Vzbid0IGltcGFjdCBYZW4gaHlwZXJ2aXNvcidzIGVtdWxhdGlvbiBv Zgo+PiBJQTMyX1NHWExFUFVCS0VZSEFTSG4uIFNlZSBiZWxvdyBYZW4gaHlwZXJ2aXNvciBjaGFu Z2VzIGZvciBkZXRhaWxzLgo+IAo+IFJlYWRpbmcgYXJvdW5kLCBhbSBJIGNvcnJlY3Qgd2l0aCB0 aGUgZm9sbG93aW5nPwo+IAo+IDEpIFNvbWUgcHJvY2Vzc29ycyBoYXZlIG5vIGxhdW5jaCBjb250 cm9sLiAgVGhlcmUgaXMgbm8gcmVzdHJpY3Rpb24gb24gCj4gd2hpY2ggZW5jbGF2ZXMgY2FuIGJv b3QuCgpZZXMgdGhhdCBzb21lIHByb2Nlc3NvcnMgaGF2ZSBubyBsYXVuY2ggY29udHJvbC4gSG93 ZXZlciBpdCBkb2Vzbid0IG1lYW4gCnRoZXJlJ3Mgbm8gcmVzdHJpY3Rpb24gb24gd2hpY2ggZW5j bGF2ZXMgY2FuIGJvb3QuIENvbnRyYXJ5LCBvbiB0aG9zZSAKbWFjaGluZXMgb25seSBJbnRlbCdz IExhdW5jaCBFbmNsYXZlIChMRSkgY2FuIHJ1biwgYXMgb24gdGhvc2UgbWFjaGluZSwgCklBMzJf U0dYTEVQVUJLRVlIQVNIbiBlaXRoZXIgZG9lc24ndCBleGlzdCwgb3IgZXF1YWwgdG8gZGlnZXN0 IG9mIApJbnRlbCdzIHNpZ25pbmcgUlNBIHB1YmtleS4gSG93ZXZlciBhbHRob3VnaCBvbmx5IElu dGVsJ3MgTEUgY2FuIGJlIHJ1biwgCndlIGNhbiBzdGlsbCBydW4gb3RoZXIgZW5jbGF2ZXMgZnJv bSBvdGhlciBzaWduZXJzLiBQbGVhc2Ugc2VlIG15IHJlcGx5IAphYm92ZS4KCj4gCj4gMikgU29t ZSBTa3lsYWtlIGNsaWVudCBwcm9jZXNzb3JzIGNsYWltIHRvIGhhdmUgbGF1bmNoIGNvbnRyb2ws IGJ1dCB0aGUgCj4gTVNScyBhcmUgdW5hdmFpbGFibGUgKGlzIHRoaXMgYW4gZXJyYXR1bT8pLiAg VGhlc2UgYXJlIGxpbWl0ZWQgdG8gCj4gYm9vdGluZyBlbmNsYXZlcyBtYXRjaGluZyB0aGUgSW50 ZWwgcHVibGljIGtleS4KClNvcnJ5IEkgZG9uJ3Qga25vdyB3aGV0aGVyIHRoaXMgaXMgYW4gZXJy YXR1bS4gSSB3aWxsIGdldCBiYWNrIHRvIHlvdSAKYWZ0ZXIgY29uZmlybWluZyBpbnRlcm5hbGx5 LgoKCj4gCj4gMykgTGF1bmNoIGNvbnRyb2wgbWF5IGJlIGxvY2tlZCBieSB0aGUgQklPUy4gIFRo ZXJlIG1heSBiZSBhIGN1c3RvbSAKPiBoYXNoLCBvciBpdCBtaWdodCBiZSB0aGUgSW50ZWwgZGVm YXVsdC4gIFhlbiBjYW4ndCBhZGp1c3QgaXQgYXQgYWxsLCBidXQgCj4gY2FuIHN1cHBvcnQgcnVu bmluZyBhbnkgbnVtYmVyIG9mIFZNcyB3aXRoIG1hdGNoaW5nIGVuY2xhdmVzLgoKWWVzIExhdW5j aCBjb250cm9sIG1heSBiZSBsb2NrZWQgYnkgQklPUywgYWx0aG91Z2ggdGhpcyBkZXBlbmRzIG9u IAp3aGV0aGVyIEJJT1MgcHJvdmlkZXMgaW50ZXJmYWNlIGZvciB1c2VyIHRvIGNvbmZpZ3VyZS4g SSB3YXMgdG9sZCB0aGF0IAp0eXBpY2FsbHkgQklPUyB3aWxsIHVubG9jayBMYXVuY2ggQ29udHJv bCwgYXMgU0dYIGRyaXZlciBpcyBleHBlY3RpbmcgCnN1Y2ggYmVoYXZpb3IuIEJ1dCBJIGFtIG5v dCBzdXJlIHdlIGNhbiBhbHdheXMgYXNzdW1lIHRoaXMuCgpXaGV0aGVyIHRoZXJlIHdpbGwgYmUg Y3VzdG9tIGhhc2ggYWxzbyBkZXBlbmRzIG9uIEJJT1MuIEJJT1MgbWF5IG9yIG1heSAKbm90IHBy b3ZpZGUgaW50ZXJmYWNlIGZvciB1c2VyIHRvIGNvbmZpZ3VyZSBjdXN0b20gaGFzaC4gU28gb24g cGh5c2ljYWwgCm1hY2hpbmUsIEkgdGhpbmsgd2UgbmVlZCB0byBjb25zaWRlciBhbGwgdGhlIGNh c2VzLiBPbiBtYWNoaW5lIHRoYXQgd2l0aCAKTGF1bmNoIGNvbnRyb2wgKnVubG9ja2VkKiwgWGVu IGlzIGFibGUgdG8gZHluYW1pY2FsbHkgY2hhbmdlIApJQTMyX1NHWExFS0VZSEFTSG4gc28gdGhh dCBYZW4gaXMgYWJsZSB0byBydW4gbXVsdGlwbGUgVk0gd2l0aCBlYWNoIApydW5uaW5nIExFIGZy b20gZGlmZmVyZW50IHNpZ25lci4gSG93ZXZlciBpZiBsYXVuY2ggY29udHJvbCBpcyAqbG9ja2Vk KiAKaW4gQklPUywgdGhlbiBYZW4gaXMgc3RpbGwgYWJsZSB0byBydW4gbXVsdGlwbGUgVk0sIGJ1 dCBhbGwgVk0gY2FuIG9ubHkgCnJ1biBMRSBmcm9tIHRoZSBzaWduZXIgdGhhdCBtYXRjaGVzIHRo ZSBJQTMyX1NHWExFUFVCS0VZSEFTSG4gKHdoaWNoIGluIAptb3N0IGNhc2Ugc2hvdWxkIGJlIElu dGVsIGRlZmF1bHQsIGJ1dCBjYW4gYmUgY3VzdG9tIGhhc2ggaWYgQklPUyBhbGxvd3MgCnVzZXIg dG8gY29uZmlndXJlKS4KClNvcnJ5IEkgYW0gbm90IHF1aXRlIHN1cmUgdGhlIHR5cGljYWwgaW1w bGVtZW50YXRpb24gb2YgQklPUy4gSSB0aGluayBJIApjYW4gcmVhY2ggb3V0IGludGVybmFsbHkg YW5kIGdldCBiYWNrIHRvIHlvdSBpZiBJIGhhdmUgc29tZXRoaW5nLgoKPiAKPiA0KSBMYXVuY2gg Y29udHJvbCBtYXkgYmUgdW5sb2NrZWQgYnkgdGhlIEJJT1MuICBJbiB0aGlzIGNhc2UsIFhlbiBj YW4gCj4gY29udGV4dCBzd2l0Y2ggYSBoYXNoIHBlciBkb21haW4sIGFuZCBydW4gYWxsIGVuY2xh dmVzLgoKWWVzLiBXaXRoIGVuY2xhdmUgPT0gTEUgSSB0aGluayB5b3UgbWVhbnQuCgo+IAo+IFRo ZSBldmVudHVhbCBwbGFucyBmb3IgQ1BVSUQgYW5kIE1TUiBsZXZlbGxpbmcgc2hvdWxkIGFsbG93 IGFsbCBvZiB0aGVzZSAKPiB0byBiZSBleHByZXNzZWQgaW4gc2Vuc2libGUgd2F5cywgYW5kIEkg ZG9uJ3QgZm9yc2VlIGFueSBpc3N1ZXMgd2l0aCAKPiBzdXBwb3J0aW5nIGFsbCBvZiB0aGVzZSBz Y2VuYXJpb3MuCgpTbyBkbyB5b3UgdGhpbmsgd2Ugc2hvdWxkIGhhdmUgJ2xlaGFzaCcgYW5kICds ZXdyJyBwYXJhbWV0ZXJzIGluIFhMIApjb25maWcgZmlsZT8gVGhlIGZvcm1lciBwcm92aWRlcyBj dXN0b20gaGFzaCwgYW5kIHRoZSBsYXR0ZXIgcHJvdmlkZXMgCndoZXRoZXIgdW5sb2NrIGd1ZXN0 J3MgTGF1bmNoIGNvbnRyb2wuCgpNeSB0aGlua2luZyBpcyBTR1ggZHJpdmVyIG5lZWRzIHRvICph Y3RpdmVseSogd3JpdGUgTEUncyBwdWJrZXkgaGFzaCB0byAKSUEzMl9TR1hMRVBVQktFWUhBU0hu IGluICp1bmxvY2tlZCogbW9kZSwgc28gJ2xlaGFzaCcgYWxvbmUgaXMgbm90IApuZWVkZWQuICds ZWhhc2gnIG9ubHkgaGFzIG1lYW5pbmcgd2hlbiAnbGV3cicgaXMgbmVlZGVkIHRvIHByb3ZpZGUg YSAKZGVmYXVsdCBoYXNoIHZhbHVlIGluIGxvY2tlZCBtb2RlLCBhcyBpZiB3ZSBhbHdheXMgdXNl ICp1bmxvY2tlZCogbW9kZSAKZm9yIGd1ZXN0LCAnbGVoYXNoJyBpcyBub3QgbmVjZXNzYXJ5LgoK PiAKPiAKPiAKPj4gMi4yIEhpZ2ggTGV2ZWwgWGVuIEh5cGVydmlzb3IgQ2hhbmdlczoKPj4KPj4g Mi4yLjEgRVBDIE1hbmFnZW1lbnQgKD8pCj4+Cj4+IFhlbiBoeXBlcnZpc29yIG5lZWRzIHRvIGRl dGVjdCBTR1gsIGRpc2NvdmVyIEVQQywgYW5kIG1hbmFnZSBFUEMgYmVmb3JlCj4+IHN1cHBvcnRp bmcgU0dYIHRvIGd1ZXN0LiBFUEMgaXMgZGV0ZWN0ZWQgdmlhIFNHWCBDUFVJRCAweDEyLjB4Mi4g SXQncyAKPj4gcG9zc2libGUKPj4gdGhhdCB0aGVyZSBhcmUgbXVsdGlwbGUgRVBDIHNlY3Rpb25z IChlbnVtZXJhdGVkIHZpYSBzdWItbGVhdmVzIDB4MyAKPj4gYW5kIHNvIG9uLAo+PiB1bnRpbCBp bnZhaWQgRVBDIGlzIHJlcG9ydGVkKSwgYnV0IHRoaXMgaXMgb25seSB0cnVlIG9uIAo+PiBtdWx0 aXBsZS1zb2NrZXQgc2VydmVyCj4+IG1hY2hpbmVzLiBGb3Igc2VydmVyIG1hY2hpbmVzIHRoZXJl IGFyZSBhZGRpdGlvbmFsIHRoaW5ncyBhbHNvIG5lZWRzIAo+PiB0byBiZSBkb25lLAo+PiBzdWNo IGFzIE5VTUEgRVBDLCBzY2hlZHVsaW5nLCBldGMuIFdlIHdpbGwgc3VwcG9ydCBzZXJ2ZXIgbWFj aGluZSBpbiAKPj4gdGhlIGZ1dHVyZQo+PiBidXQgY3VycmVudGx5IHdlIG9ubHkgc3VwcG9ydCBv bmUgRVBDLgo+Pgo+PiBFUEMgaXMgcmVwb3J0ZWQgYXMgcmVzZXJ2ZWQgbWVtb3J5IChzbyBpdCBp cyBub3QgcmVwb3J0ZWQgYXMgbm9ybWFsIAo+PiBtZW1vcnkpLgo+PiBFUEMgbXVzdCBiZSBtYW5h Z2VkIGluIDRLIHBhZ2VzLiBDUFUgaGFyZHdhcmUgdXNlcyBFUENNIHRvIHRyYWNrIAo+PiBzdGF0 dXMgb2YgZWFjaAo+PiBFUEMgcGFnZXMuIFhlbiBuZWVkcyB0byBtYW5hZ2UgRVBDIGFuZCBwcm92 aWRlIGZ1bmN0aW9ucyB0bywgaWUsIGFsbG9jIAo+PiBhbmQgZnJlZQo+PiBFUEMgcGFnZXMgZm9y IGd1ZXN0Lgo+Pgo+PiBUaGVyZSBhcmUgdHdvIHdheXMgdG8gbWFuYWdlIEVQQzogTWFuYWdlIEVQ QyBzZXBhcmF0ZWx5OyBvciBJbnRlZ3JhdGUgCj4+IGl0IHRvCj4+IGV4aXN0aW5nIG1lbW9yeSBt YW5hZ2VtZW50IGZyYW1ld29yay4KPj4KPj4gSXQgaXMgZWFzeSB0byBtYW5hZ2UgRVBDIHNlcGFy YXRlbHksIGFzIGN1cnJlbnRseSBFUEMgaXMgcHJldHR5IHNtYWxsIAo+PiAofjEwME1CKSwKPj4g YW5kIHdlIGNhbiBldmVuIHB1dCB0aGVtIGluIGEgc2luZ2xlIGxpc3QuIEhvd2V2ZXIgaXQgaXMg bm90IGZsZXhpYmxlLCAKPj4gZm9yCj4+IGV4YW1wbGUsIHlvdSB3aWxsIGhhdmUgdG8gd3JpdGUg bmV3IGFsZ29yaXRobXMgd2hlbiBFUEMgYmVjb21lcyAKPj4gbGFyZ2VyLCBleCwgR0IuCj4+IEFu ZCB5b3UgaGF2ZSB0byB3cml0ZSBuZXcgY29kZSB0byBzdXBwb3J0IE5VTUEgRVBDIChhbHRob3Vn aCB0aGlzIHdpbGwgCj4+IG5vdCBjb21lCj4+IGluIHNob3J0IHRpbWUpLgo+Pgo+PiBJbnRlZ3Jh dGluZyBFUEMgdG8gZXhpc3RpbmcgbWVtb3J5IG1hbmFnZW1lbnQgZnJhbWV3b3JrIHNlZW1zIG1v cmUgCj4+IHJlYXNvbmFibGUsCj4+IGFzIGluIHRoaXMgd2F5IHdlIGNhbiByZXN1bWUgbWVtb3J5 IG1hbmFnZW1lbnQgZGF0YSAKPj4gc3RydWN0dXJlcy9hbGdvcml0aG1zLCBhbmQKPj4gaXQgd2ls bCBiZSBtb3JlIGZsZXhpYmxlIHRvIHN1cHBvcnQgbGFyZ2VyIEVQQyBhbmQgcG90ZW50aWFsbHkg TlVNQSAKPj4gRVBDLiBCdXQKPj4gbW9kaWZ5aW5nIE1NIGZyYW1ld29yayBoYXMgYSBoaWdoZXIg cmlzayB0byBicmVhayBleGlzdGluZyBtZW1vcnkgCj4+IG1hbmFnZW1lbnQKPj4gY29kZSAocG90 ZW50aWFsbHkgbW9yZSBidWdzKS4KPj4KPj4gSW4gbXkgUkZDIHBhdGNoZXMgY3VycmVudGx5IHdl IGNob29zZSB0byBtYW5hZ2UgRVBDIHNlcGFyYXRlbHkuIEEgbmV3Cj4+IHN0cnVjdHVyZSBlcGNf cGFnZSBpcyBhZGRlZCB0byByZXByZXNlbnQgYSBzaW5nbGUgNEsgRVBDIHBhZ2UuIEEgd2hvbGUg Cj4+IGFycmF5Cj4+IG9mIHN0cnVjdCBlcGNfcGFnZSB3aWxsIGJlIGFsbG9jYXRlZCBkdXJpbmcg RVBDIGluaXRpYWxpemF0aW9uLCBzbyAKPj4gdGhhdCBnaXZlbgo+PiB0aGUgb3RoZXIsIG9uZSBv ZiBQRk4gb2YgRVBDIHBhZ2UgYW5kICdzdHJ1Y3QgZXBjX3BhZ2UnIGNhbiBiZSBnb3QgYnkgCj4+ IGFkZGluZwo+PiBvZmZzZXQuCj4+Cj4+IEJ1dCBtYXliZSBpbnRlZ3JhdGluZyBFUEMgdG8gTU0g ZnJhbWV3b3JrIGlzIG1vcmUgcmVhc29uYWJsZS4gQ29tbWVudHM/Cj4+Cj4+IDIuMi4yIEVQQyBW aXJ0dWFsaXphdGlvbiAoPykKPiAKPiBJdCBsb29rcyBsaWtlIG1hbmFnaW5nIHRoZSBFUEMgaXMg dmVyeSBzaW1pbGFyIHRvIG1hbmFnaW5nIHRoZSBOVkRJTU0gCj4gcmFuZ2VzLiAgV2UgaGF2ZSBh IChzZXQgb2YpIHBoeXNpY2FsIGFkZHJlc3MgcmFuZ2VzIHdoaWNoIG5lZWQgNGsgCj4gb3duZXJz aGlwIGdyYW51bGFyaXR5IHRvIGRpZmZlcmVudCBkb21haW5zLgo+IAo+IEkgdGhpbmsgaW50ZWdy YXRpbmcgdGhpcyBpbnRvIHN0cnVjdCBwYWdlX3N0cnVjdCBpcyB0aGUgYmV0dGVyIHdheSB0byBn by4KCldpbGwgZG8uIFNvIEkgYXNzdW1lIHdlIHdpbGwgaW50cm9kdWNlIG5ldyBNRU1GX2VwYywg YW5kIHVzZSBleGlzdGluZyAKYWxsb2NfZG9taGVhcC94ZW5oZWFwX3BhZ2VzIHRvIGFsbG9jYXRl IEVQQz8gTUVNRl9lcGMgY2FuIGFsc28gYmUgdXNlZCAKaWYgd2UgbmVlZCB0byBzdXBwb3J0IGJh bGxvb25pbmcgaW4gdGhlIGZ1dHVyZSAodXNpbmcgZXhpc3RpbmcgClhFTk1FTV97ZGVjcmVhc2Uv aW5jcmVhc2V9X3Jlc2VydmF0aW9uLgoKPiAKPj4KPj4gVGhpcyBwYXJ0IGlzIGhvdyB0byBwb3B1 bGF0ZSBFUEMgZm9yIGd1ZXN0cy4gV2UgaGF2ZSAzIGNob2ljZXM6Cj4+ICAgICAgLSBTdGF0aWMg UGFydGl0aW9uaW5nCj4+ICAgICAgLSBPdmVyc3Vic2NyaXB0aW9uCj4+ICAgICAgLSBCYWxsb29u aW5nCj4+Cj4+IFN0YXRpYyBQYXJ0aXRpb25pbmcgbWVhbnMgYWxsIEVQQyBwYWdlcyB3aWxsIGJl IGFsbG9jYXRlZCBhbmQgbWFwcGVkIAo+PiB0byBndWVzdAo+PiB3aGVuIGl0IGlzIGNyZWF0ZWQs IGFuZCB0aGVyZSdzIG5vIHJ1bnRpbWUgY2hhbmdlIG9mIHBhZ2UgdGFibGUgCj4+IG1hcHBpbmdz IGZvciBFUEMKPj4gcGFnZXMuIE92ZXJzdWJzY3JpcHRpb24gbWVhbnMgWGVuIGh5cGVydmlzb3Ig c3VwcG9ydHMgRVBDIHBhZ2UgCj4+IHN3YXBwaW5nIGJldHdlZW4KPj4gZG9tYWlucywgbWVhbmlu ZyBYZW4gaXMgYWJsZSB0byBldmljdCBFUEMgcGFnZSBmcm9tIGFub3RoZXIgZG9tYWluIGFuZCAK Pj4gYXNzaWduIGl0Cj4+IHRvIHRoZSBkb21haW4gdGhhdCBuZWVkcyB0aGUgRVBDLiBXaXRoIG92 ZXJzdWJzY3JpcHRpb24sIEVQQyBjYW4gYmUgCj4+IGFzc2lnbmVkIHRvCj4+IGRvbWFpbiBvbiBk ZW1hbmQsIHdoZW4gRVBUIHZpb2xhdGlvbiBoYXBwZW5zLiBCYWxsb29uaW5nIGlzIHNpbWlsYXIg dG8gCj4+IG1lbW9yeQo+PiBiYWxsb29uaW5nLiBJdCBpcyBiYXNpY2FsbHkgIlN0YXRpYyBQYXJ0 aXRpb25pbmciICsgIkJhbGxvb24gZHJpdmVyIiAKPj4gaW4gZ3Vlc3QuCj4+Cj4+IFN0YXRpYyBQ YXJ0aXRpb25pbmcgaXMgdGhlIGVhc2llc3Qgd2F5IGluIHRlcm1zIG9mIGltcGxlbWVudGF0aW9u LCBhbmQgCj4+IHRoZXJlCj4+IHdpbGwgYmUgbm8gaHlwZXJ2aXNvciBvdmVyaGVhZCAoZXhjZXB0 IEVQVCBvdmVyaGVhZCBvZiBjb3Vyc2UpLCAKPj4gYmVjYXVzZSBpbgo+PiAiU3RhdGljIHBhcnRp dGlvbmluZyIsIHRoZXJlIGlzIG5vIEVQVCB2aW9sYXRpb24gZm9yIEVQQywgYW5kIFhlbiAKPj4g ZG9lc24ndCBuZWVkCj4+IHRvIHR1cm4gb24gRU5DTFMgVk1FWElUIGZvciBndWVzdCBhcyBFTkNM UyBydW5zIHBlcmZlY3RseSBpbiBub24tcm9vdCAKPj4gbW9kZS4KPj4KPj4gQmFsbG9vbmluZyBp cyAiU3RhdGljIFBhcnRpdGlvbmluZyIgKyAiQmFsbG9vbiBkcml2ZXIiIGluIGd1ZXN0LiBMaWtl IAo+PiAiU3RhdGljCj4+IFBhcmF0aXRpb25pbmciLCBiYWxsb29uaW5nIGRvZXNuJ3QgbmVlZCB0 byB0dXJuIG9uIEVOQ0xTIFZNRVhJVCwgYW5kIAo+PiBkb2Vzbid0Cj4+IGhhdmUgRVBUIHZpb2xh dGlvbiBmb3IgRVBDIGVpdGhlci4gVG8gc3VwcG9ydCBiYWxsb29uaW5nLCB3ZSBuZWVkIAo+PiBi YWxsb29uaW5nCj4+IGRyaXZlciBpbiBndWVzdCB0byBpc3N1ZSBoeXBlcmNhbGwgdG8gZ2l2ZSB1 cCBvciByZWNsYWltIEVQQyBwYWdlcy4gSW4gCj4+IHRlcm1zIG9mCj4+IGh5cGVyY2FsbCwgd2Ug aGF2ZSB0d28gY2hvaWNlczogMSkgQWRkIG5ldyBoeXBlcmNhbGwgZm9yIEVQQyAKPj4gYmFsbG9v bmluZzsgMikKPj4gVXNpbmcgZXhpc3RpbmcgWEVOTUVNX3tpbmNyZWFzZS9kZWNyZWFzZX1fcmVz ZXJ2YXRpb24gd2l0aCBuZXcgbWVtb3J5IAo+PiBmbGFnLCBpZSwKPj4gWEVOTUVNRl9lcGMuIEkn bGwgZGlzY3VzcyBtb3JlIHJlZ2FyZGluZyB0byBhZGRpbmcgZGVkaWNhdGVkIGh5cGVyY2FsbCAK Pj4gb3Igbm90Cj4+IGxhdGVyLgo+Pgo+PiBPdmVyc3Vic2NyaXB0aW9uIGxvb2tzIG5pY2UgYnV0 IGl0IHJlcXVpcmVzIG1vcmUgY29tcGxpY2F0ZWQgCj4+IGltcGxlbWV0YXRpb24uCj4+IEZpcnN0 bHksIGFzIGV4cGxhaW5lZCBpbiAxLjMuMyBFUEMgRXZpY3Rpb24gJiBSZWxvYWQsIHdlIG5lZWQg dG8gCj4+IGZvbGxvdyBzcGVjaWZpYwo+PiBzdGVwcyB0byBldmljdCBFUEMgcGFnZXMsIGFuZCBp biBvcmRlciB0byBkbyB0aGF0LCBiYXNpY2FsbHkgWGVuIG5lZWRzIAo+PiB0byB0cmFwCj4+IEVO Q0xTIGZyb20gZ3Vlc3QgYW5kIGtlZXAgdHJhY2sgb2YgRVBDIHBhZ2Ugc3RhdHVzIGFuZCBlbmNs YXZlIGluZm8gCj4+IGZyb20gYWxsCj4+IGd1ZXN0LiBUaGlzIGlzIGJlY2F1c2U6Cj4+ICAgICAg LSBUbyBldmljdCByZWd1bGFyIEVQQyBwYWdlLCBYZW4gbmVlZHMgdG8ga25vdyBTRUNTIGxvY2F0 aW9uCj4+ICAgICAgLSBYZW4gbmVlZHMgdG8ga25vdyBFUEMgcGFnZSB0eXBlOiBldmljdGluZyBy ZWd1bGFyIEVQQyBhbmQgCj4+IGV2aWN0aW5nIFNFQ1MsCj4+ICAgICAgICBWQSBwYWdlIGhhdmUg ZGlmZmVyZW50IHN0ZXBzLgo+PiAgICAgIC0gWGVuIG5lZWRzIHRvIGtub3cgRVBDIHBhZ2Ugc3Rh dHVzOiB3aGV0aGVyIHRoZSBwYWdlIGlzIGJsb2NrZWQgCj4+IG9yIG5vdC4KPj4KPj4gVGhvc2Ug aW5mbyBjYW4gb25seSBiZSBnb3QgYnkgdHJhcHBpbmcgRU5DTFMgZnJvbSBndWVzdCwgYW5kIHBh cnNpbmcgaXRzCj4+IHBhcmFtZXRlcnMgKHRvIGlkZW50aWZ5IFNFQ1MgcGFnZSwgZXRjKS4gUGFy c2luZyBFTkNMUyBwYXJhbWV0ZXJzIAo+PiBtZWFucyB3ZSBuZWVkCj4+IHRvIGtub3cgd2hpY2gg RU5DTFMgbGVhZiBpcyBiZWluZyB0cmFwcGVkLCBhbmQgd2UgbmVlZCB0byB0cmFuc2xhdGUgCj4+ IGd1ZXN0J3MKPj4gdmlydHVhbCBhZGRyZXNzIHRvIGdldCBwaHlzaWNhbCBhZGRyZXNzIGluIG9y ZGVyIHRvIGxvY2F0ZSBFUEMgcGFnZS4gCj4+IEFuZCBvbmNlCj4+IEVOQ0xTIGlzIHRyYXBwZWQs IHdlIGhhdmUgdG8gZW11bGF0ZSBFTkNMUyBpbiBYZW4sIHdoaWNoIG1lYW5zIHdlIG5lZWQgdG8K Pj4gcmVjb25zdHJ1Y3QgRU5DTFMgcGFyYW1ldGVycyBieSByZW1hcHBpbmcgYWxsIGd1ZXN0J3Mg dmlydHVhbCBhZGRyZXNzIAo+PiB0byBYZW4ncwo+PiB2aXJ0dWFsIGFkZHJlc3MgKGd2YS0+Z3Bh LT5wYS0+eGVuX3ZhKSwgYXMgRU5DTFMgYWx3YXlzIHVzZSAqZWZmZWN0aXZlIAo+PiBhZGRyZXNz Kgo+PiB3aGljaCBpcyBhYmxlIHRvIGJlIHRyYXNsYXRlZCBieSBwcm9jZXNzb3Igd2hlbiBydW5u aW5nIEVOQ0xTLgo+Pgo+PiAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCj4+ICAgICAgICAgICAgICAgICAgfCAgIEVOQ0xT ICAgfAo+PiAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCj4+ICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAvfFwKPj4g ICAgICBFTkNMUyBWTUVYSVR8ICAgICAgICAgICB8IFZNRU5UUlkKPj4gICAgICAgICAgICAgICAg ICB8ICAgICAgICAgICB8Cj4+ICAgICAgICAgICAgICAgICBcfC8gICAgICAgICAgfAo+Pgo+PiAg ICAgICAgIDEpIHBhcnNlIEVOQ0xTIHBhcmFtZXRlcnMKPj4gICAgICAgICAyKSByZWNvbnN0cnVj dChyZW1hcCkgZ3Vlc3QncyBFTkNMUyBwYXJhbWV0ZXJzCj4+ICAgICAgICAgMykgcnVuIEVOQ0xT IG9uIGJlaGFsZiBvZiBndWVzdCAoYW5kIHNraXAgRU5DTFMpCj4+ICAgICAgICAgNCkgb24gc3Vj Y2VzcywgdXBkYXRlIEVQQy9lbmNsYXZlIGluZm8sIG9yIGluamVjdCBlcnJvcgo+Pgo+PiBBbmQg WGVuIG5lZWRzIHRvIG1haW50YWluIGVhY2ggRVBDIHBhZ2UncyBzdGF0dXMgKHR5cGUsIGJsb2Nr ZWQgb3IgCj4+IG5vdCwgaW4KPj4gZW5jbGF2ZSBvciBub3QsIGV0YykuIFhlbiBhbHNvIG5lZWRz IHRvIG1haW50YWluIGFsbCBFbmNsYXZlJ3MgaW5mbyAKPj4gZnJvbSBhbGwKPj4gZ3Vlc3RzLCBp biBvcmRlciB0byBmaW5kIHRoZSBjb3JyZWN0IFNFQ1MgZm9yIHJlZ3VsYXIgRVBDIHBhZ2UsIGFu ZCAKPj4gZW5jbGF2ZSdzCj4+IGxpbmVhciBhZGRyZXNzIGFzIHdlbGwuCj4+Cj4+IFNvIGluIGdl bmVyYWwsICJTdGF0aWMgUGFydGl0aW9uaW5nIiBoYXMgc2ltcGxlc3QgaW1wbGVtZW50YXRpb24s IGJ1dCAKPj4gb2J2aW91c2x5Cj4+IG5vdCB0aGUgYmVzdCB3YXkgdG8gdXNlIEVQQyBlZmZpY2ll bnRseTsgIkJhbGxvb25pbmciIGhhcyBhbGwgcHJvcyBvZiAKPj4gU3RhdGljCj4+IFBhcnRpdGlv bmluZyBidXQgcmVxdWllcyBndWVzdCBiYWxsb29uIGRyaXZlcjsgIk92ZXJzdWJzY3JpcHRpb24i IGlzIAo+PiBiZXN0IGluCj4+IHRlcm1zIG9mIGZsZXhpYmlsaXR5IGJ1dCByZXF1aXJlcyBjb21w bGljYXRlZCBoeXBlcnZpc29yIGltcGxlbWV0YXRpb24uCj4+Cj4+IFdlIGhhdmUgaW1wbGVtZW50 ZWQgIlN0YXRpYyBQYXJ0aXRpb25pbmciIGluIFJGQyBwYXRjaGVzLCBidXQgbmVlZHMgeW91cgo+ PiBmZWVkYmFjayBvbiB3aGV0aGVyIGl0IGlzIGVub3VnaC4gSWYgbm90LCB3aGljaCBvbmUgc2hv dWxkIHdlIGRvIGF0IAo+PiBuZXh0IHN0YWdlCj4+IC0tIEJhbGxvb25pbmcgb3IgT3ZlcnN1YnNj cmlwdGlvbi4gSU1PIEJhbGxvb25pbmcgbWF5IGJlIGdvb2QgZW5vdWdoLCAKPj4gZ2l2ZW4gZmFj dAo+PiB0aGF0IGN1cnJlbnRseSBtZW1vcnkgaXMgYWxzbyAiU3RhdGljIFBhcnRpdGlvbmluZyIg KyAiQmFsbG9vbmluZyIuCj4+Cj4+IENvbW1lbnRzPwo+IAo+IERlZmluaXRlbHkgZ28gZm9yIHN0 YXRpYyBwYXJ0aXRpb25pbmcgdG8gYmVnaW4gd2l0aC4gIFRoaXMgaXMgZmFyIAo+IHNpbXBsZXIg dG8gaW1wbGVtZW50Lgo+IAo+IEkgY2FuJ3Qgc2VlIGEgcHJlc3NpbmcgdXNlY2FzZSBmb3Igb3Zl cnN1YnNjcmlwdGlvbiBvciBiYWxsb29uaW5nLiBBbnkgCj4gZGF0YWNlbnRlciB3b3JrIHdpbGwg YmUgdXNpbmcgZXhjbHVzaXZlbHkgc3RhdGljLCBhbmQgSSBleHBlY3Qgc3RhdGljIAo+IHdpbGwg ZmluZSBmb3IgYWxsIChvciBhdCBsZWFzdCwgbW9zdCkgY2xpZW50IHVzZWNhc2VzLgoKVGhhbmtz LiBTbyBmb3IgdGhlIGZpcnN0IHN0YWdlIEkgd2lsbCBmb2N1cyBvbiBzdGF0aWMgcGFydGl0aW9u aW5nLgoKPiAKPj4KPj4gMi4yLjMgUG9wdWxhdGUgRVBDIGZvciBHdWVzdAo+Pgo+PiBUb29sc3Rh Y2sgbm90aWZpZXMgWGVuIGFib3V0IGRvbWFpbidzIEVQQyBiYXNlIGFuZCBzaXplIGJ5IAo+PiBY RU5fRE9NQ1RMX3NldF9jcHVpZCwKPj4gc28gY3VycmVudGx5IFhlbiBwb3B1bGF0ZXMgYWxsIEVQ QyBwYWdlcyBmb3IgZ3Vlc3QgaW4gCj4+IFhFTl9ET01DVExfc2V0X2NwdWlkLAo+PiBwYXJ0aWN1 bGFybHksIGluIGhhbmRsaW5nIFhFTl9ET01DVExfc2V0X2NwdWlkIGZvciBDUFVJRC4weDEyLjB4 Mi4gCj4+IE9uY2UgWGVuCj4+IGNoZWNrcyB0aGUgdmFsdWVzIHBhc3NlZCBmcm9tIHRvb2xzdGFj ayBpcyB2YWxpZCwgWGVuIHdpbGwgYWxsb2NhdGUgCj4+IGFsbCBFUEMKPj4gcGFnZXMgYW5kIHNl dHVwIEVQVCBtYXBwaW5ncyBmb3IgZ3Vlc3QuCj4+Cj4+IDIuMi40IE5ldyBEZWRpY2F0ZWQgSHlw ZXJjYWxsICg/KQo+IAo+IEFsbCB0aGlzIGluZm9ybWF0aW9uIHNob3VsZCAoZXZlbnR1YWxseSkg YmUgYXZhaWxhYmxlIHZpYSB0aGUgCj4gYXBwcm9wcmlhdGUgU1lTQ1RMX2dldF97Y3B1aWQsbXNy fV9wb2xpY3kgaHlwZXJjYWxscy4gIEkgZG9uJ3Qgc2VlIGFueSAKPiBuZWVkIGZvciBkZWRpY2F0 ZWQgaHlwZXJjYWxscy4KClllcyBJIGFncmVlLiAgT3JpZ2luYWxseSBJIGhhZCBjb25jZXJuIHRo YXQgd2l0aG91dCBkZWRpY2F0ZWQgaHlwZXJjYWxsLCAKaXQgaXMgaGFyZCB0byBpbXBsZW1lbnQg J3hsIHNneGluZm8nIGFuZCAneGwgc2d4bGlzdCcsIGJ1dCBhY2NvcmRpbmcgdG8gCnlvdXIgbmV3 IENQVUlEIGVuaGFuY2VtZW50IHBsYW4sIHRoZSB0d28gY2FuIGJlIGRvbmUgdmlhIHRoZSBuZXcg Cmh5cGVyY2FsbHMgdG8gcXVlcnkgWGVuJ3MgYW5kIGRvbWFpbidzIGNwdWlkIHBvbGljeS4gU2Vl IG15IHJlcGx5IGFib3ZlIApyZWdhcmRpbmcgdG8gIk5vdGlmeSBYZW4gYWJvdXQgZ3Vlc3QncyBF UEMgaW5mbyIuCgo+IAo+PiAyLjIuOSBHdWVzdCBTdXNwZW5kICYgUmVzdW1lCj4+Cj4+IE9uIGhh cmR3YXJlLCBFUEMgaXMgZGVzdHJveWVkIHdoZW4gcG93ZXIgZ29lcyB0byBTMy1TNS4gU28gWGVu IHdpbGwgCj4+IGRlc3Ryb3kKPj4gZ3Vlc3QncyBFUEMgd2hlbiBndWVzdCdzIHBvd2VyIGdvZXMg aW50byBTMy1TNS4gQ3VycmVudGx5IFhlbiBpcyAKPj4gbm90aWZpZWQgYnkKPj4gUWVtdSBpbiB0 ZXJtcyBvZiBTIFN0YXRlIGNoYW5nZSB2aWEgSFZNX1BBUkFNX0FDUElfU19TVEFURSwgd2hlcmUg WGVuIAo+PiB3aWxsCj4+IGRlc3Ryb3kgRVBDIGlmIFMgU3RhdGUgaXMgUzMtUzUuCj4+Cj4+IFNw ZWNpZmljYWxseSwgWGVuIHdpbGwgcnVuIEVSRU1PVkUgZm9yIGd1ZXN0J3MgZWFjaCBFUEMgcGFn ZSwgYXMgZ3Vlc3QgCj4+IG1heQo+PiBub3QgaGFuZGxlIEVQQyBzdXNwZW5kICYgcmVzdW1lIGNv cnJlY3RseSwgaW4gd2hpY2ggY2FzZSBwaHlzaWNhbGx5IAo+PiBndWVzdCdzIEVQQwo+PiBwYWdl cyBtYXkgc3RpbGwgYmUgdmFsaWQsIHNvIFhlbiBuZWVkcyB0byBydW4gRVJFTU9WRSB0byBtYWtl IHN1cmUgYWxsIAo+PiBFUEMKPj4gcGFnZXMgYXJlIGJlY29taW5nIGludmFsaWQuIE90aGVyd2lz ZSBmdXJ0aGVyIG9wZXJhdGlvbiBpbiBndWVzdCBvbiAKPj4gRVBDIG1heQo+PiBmYXVsdCBhcyBp dCBhc3N1bWVzIGFsbCBFUEMgcGFnZXMgYXJlIGludmFsaWQgYWZ0ZXIgZ3Vlc3QgaXMgcmVzdW1l ZC4KPj4KPj4gRm9yIFNFQ1MgcGFnZSwgRVJFTU9WRSBtYXkgZmF1bHQgd2l0aCBTR1hfQ0hJTERf UFJFU0VOVCwgaW4gd2hpY2ggY2FzZSAKPj4gWGVuIHdpbGwKPj4ga2VlcCB0aGlzIFNFQ1MgcGFn ZSBpbnRvIGEgbGlzdCwgYW5kIGNhbGwgRVJFTU9WRSBmb3IgdGhlbSBhZ2FpbiBhZnRlciAKPj4g YWxsIEVQQwo+PiBwYWdlcyBoYXZlIGJlZW4gY2FsbGVkIHdpdGggRVJFTU9WRS4gVGhpcyB0aW1l IHRoZSBFUkVNT1ZFIG9uIFNFQ1MgCj4+IHdpbGwgc3VjY2VlZAo+PiBhcyBhbGwgY2hpbGRyZW4g KHJlZ3VsYXIgRVBDIHBhZ2VzKSBoYXZlIGFscmVhZHkgYmVlbiByZW1vdmVkLgo+Pgo+PiAyLjIu MTAgRGVzdHJveWluZyBEb21haW4KPj4KPj4gTm9ybWFsbHkgWGVuIGp1c3QgZnJlZXMgYWxsIEVQ QyBwYWdlcyBmb3IgZG9tYWluIHdoZW4gaXQgaXMgZGVzdHJveWVkLiAKPj4gQnV0IFhlbgo+PiB3 aWxsIGFsc28gZG8gRVJFTU9WRSBvbiBhbGwgZ3Vlc3QncyBFUEMgcGFnZXMgKGRlc2NyaWJlZCBp biBhYm92ZSAKPj4gMi4yLjcpIGJlZm9yZQo+PiBmcmVlIHRoZW0sIGFzIGd1ZXN0IG1heSBzaHV0 ZG93biB1bmV4cGVjdGVkIChleCwgdXNlciBraWxscyBndWVzdCksIAo+PiBhbmQgaW4gdGhpcwo+ PiBjYXNlLCBndWVzdCdzIEVQQyBtYXkgc3RpbGwgYmUgdmFsaWQuCj4+Cj4+IDIuMyBBZGRpdGlv bmFsIFBvaW50OiBMaXZlIE1pZ3JhdGlvbiwgU25hcHNob3QgU3VwcG9ydCAoPykKPiAKPiBIb3cg YmlnIGlzIHRoZSBFUEM/ICBJZiB3ZSBhcmUgdGFsa2luZyBNQiByYXRoZXIgdGhhbiBHQiwgbW92 ZW1lbnQgb2YgCj4gdGhlIEVQQyBjb3VsZCBiZSBhZnRlciB0aGUgcGF1c2UsIHdoaWNoIHdvdWxk IGFkZCBzb21lIGxhdGVuY3kgdG8gbGl2ZSAKPiBtaWdyYXRpb24gYnV0IHNob3VsZCB3b3JrLiAg SSBleHBlY3QgdGhhdCBwZW9wbGUgd291bGQgcHJlZmVyIHRvIGhhdmUgCj4gdGhlIGZsZXhpYmls aXR5IG9mIG1pZ3JhdGlvbiBldmVuIGF0IHRoZSBjb3N0IG9mIGV4dHJhIGxhdGVuY3kuCj4gCgpU aGUgRVBDIGlzIHR5cGljYWxseSB+MTAwTUIgYXQgbWF4aW11bSAoYXMgSSBvYnNlcnZlZCkuIFRo ZSBFUEMgaXMgCnR5cGljYWxseSByZXNlcnZlZCB3aXRoIEVQQ00gKEVQQyBtYXAsIHdoaWNoIGlz IGludmlzaWJsZSB0byBTVykgCnRvZ2V0aGVyIGJ5IEJJT1MgYXMgcHJvY2Vzc29yIHJlc2VydmVk IG1lbW9yeSAoUlBNKS4gT24gcmVhbCBtYWNoaW5lLCAKZm9yIGJvdGggb3VyIGludGVybmFsIGRl dmVsb3AgbWFjaGluZXMsIGFuZCBzb21lIG1hY2hpbmVzIHRoYXQgZnJvbSAKRGVsbCwgSFAsIExl bm92byAodGhhdCB5b3UgY2FuIGJ1eSBmcm9tIG1hcmtldCBub3cpLCBCSU9TIGFsd2F5cyAKcHJv dmlkZXMgMyBjaG9pY2VzIGluIHRlcm1zIFJQTTogMzJNLCA2NE0sIGFuZCAxMjhNLiBBbmQgd2l0 aCAxMjhNIFJQTSwgCkVQQyBpcyBzbGlnaHRseSBsZXNzIHRoYW4gMTAwTS4KClRoZSBwcm9ibGVt IGlzIEVQQyBjYW5ub3QgYmUgbW92ZWQuIEkgdGhpbmsgeW91IHdlcmUgc2F5aW5nIG1vdmluZyBF UEMgCmJ5IGV2aWN0aW5nIEVQQyBvdXQgYXQgbGFzdCBzdGFnZSBhbmQgY29weSBldmljdGVkIGNv bnRlbnQgdG8gcmVtb3RlLCAKYW5kIHRoZW4gcmVsb2FkLiBIb3dldmVyIEkgZG9uJ3QgdGhpbmsg dGhpcyB3aWxsIHdvcmssIGFzIEVQQyBldmljdGlvbiAKaXRzZWxmIG5lZWRzIHRvIHVzZSBhIFZB IHNsb3QgKHdoaWNoIGl0c2xlZiBpcyBFUEMpLCBzbyB5b3UgY2FuIGltYWdlIAp0aGF0IHRoZSBW QSBzbG90cyBjYW5ub3QgYmUgbW92ZWQgdG8gcmVtb3RlLiBFdmVuIGlmIHRoZXkgY2FuLCB0aGV5 IApjYW5ub3QgYmUgdXNlZCB0byByZWxvYWQgRVBDIGluIHJlbW90ZSwgYXMgaW5mbyBpbiBWQSBz bG90IGlzIGJvdW5kIHRvIApwbGF0Zm9ybSBhbmQgY2Fubm90IGJlIHVzZWQgb24gcmVtb3RlLgoK VG8gc3VwcG9ydCBsaXZlIG1pZ3JhdGlvbiwgd2UgY2FuIG9ubHkgY2hvb3NlIHRvIGlnbm9yZSBF UEMgZHVyaW5nIGxpdmUgCm1pZ3JhdGlvbiBhbmQgbGV0IGd1ZXN0IFNHWCBkcml2ZXIvdXNlciBT VyBzdGFjayB0byBoYW5kbGUgcmVzdG9yaW5nIAplbmNsYXZlICh3aGljaCBpcyBhY3R1YWxseSBh IGxvdCBzaW1wbGVyIGluIGh5cGVydmlzb3IvdG9vbHN0YWNrJ3MgCmltcGxlbWVudGF0aW9uKSAu IEd1ZXN0IFNHWCBkcml2ZXIgbmVlZHMgdG8gaGFuZGxlIGxvc2UgRVBDIGFueXdheSwgYXMgCkVQ QyBpcyBkZXN0cm95ZWQgaW4gUzMtUzUuIFRoZSBvbmx5IGRpZmZlcmVuY2UgaXMgdG8gc3VwcG9y dCBsaXZlIAptaWdyYXRpb24sIGd1ZXN0IFNHWCBkcml2ZXIgbmVlZHMgdG8gc3VwcG9ydCAqc3Vk ZGVuKiBsb3NlIG9mIEVQQywgd2hpY2ggCmlzIG5vdCBIVyBiZWhhdmlvciwgYW5kIEkgd2FzIHRv bGQgdGhhdCBjdXJyZW50bHkgYm90aCBXaW5kb3dzICYgTGludXggClNHWCBkcml2ZXIgYWxyZWFk eSBzdXBwb3J0ICpzdWRkZW4qIGxvc2Ugb2YgRVBDLCB3aGljaCBsZWF2ZXMgdXMgYSAKcXVlc3Rp b24gd2hldGhlciB3ZSBuZWVkIHRvIHN1cHBvcnQgU0dYIGxpdmUgbWlncmF0aW9uIChhbmQgc25h cHNob3QpLgoKPiB+QW5kcmV3Cj4gCj4gX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX18KPiBYZW4tZGV2ZWwgbWFpbGluZyBsaXN0Cj4gWGVuLWRldmVsQGxpc3Rz Lnhlbi5vcmcKPiBodHRwczovL2xpc3RzLnhlbi5vcmcveGVuLWRldmVsCgpfX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpYZW4tZGV2ZWwgbWFpbGluZyBsaXN0 Clhlbi1kZXZlbEBsaXN0cy54ZW4ub3JnCmh0dHBzOi8vbGlzdHMueGVuLm9yZy94ZW4tZGV2ZWwK