From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andrew Cooper Subject: Re: Xen virtual IOMMU high level design doc V2 Date: Thu, 20 Oct 2016 21:36:24 +0100 Message-ID: <561ba095-e75e-4847-def6-90933ca5ba20@citrix.com> References: <5746B3FA.6020401@intel.com> <5746DF93.8090803@citrix.com> <57480327.60609@intel.com> <78d122f0-c773-7fa3-1258-c551937c508e@intel.com> <575081E8.6070609@citrix.com> <57518B78.6060604@citrix.com> <647d0b74-cecc-db33-1033-f7201c8a0af5@intel.com> <13fa96c1-4e66-e8a0-3b66-1c93ad2b6543@intel.com> <577BD8D002000078000FB3F7@prv-mh.provo.novell.com> <3f375a3e-0bbb-ca70-9ea2-e8a970a5dc72@intel.com> <4a8616a2-a576-aadc-993f-3d349f91f310@citrix.com> <884d6ac3-5f8a-a01a-f87d-26037b1069e3@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <884d6ac3-5f8a-a01a-f87d-26037b1069e3@intel.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: Lan Tianyu , Jan Beulich , Kevin Tian , "yang.zhang.wz@gmail.com" , Jun Nakajima , Stefano Stabellini Cc: "anthony.perard@citrix.com" , xuquan8@huawei.com, "xen-devel@lists.xensource.com" , "ian.jackson@eu.citrix.com" , Roger Pau Monne List-Id: xen-devel@lists.xenproject.org Cj4KPj4KPj4+IDI1NSB2Y3B1cyBzdXBwb3J0IHJlcXVpcmVzIFgyQVBJQyBhbmQgTGludXggZGlz YWJsZXMgWDJBUElDIG1vZGUgaWYKPj4+IHRoZXJlIGlzIG5vIGludGVycnVwdCByZW1hcHBpbmcg ZnVuY3Rpb24gd2hpY2ggaXMgcHJlc2VudCBieSB2SU9NTVUuCj4+PiBJbnRlcnJ1cHQgcmVtYXBw aW5nIGZ1bmN0aW9uIGhlbHBzIHRvIGRlbGl2ZXIgaW50ZXJydXB0IHRvICN2Y3B1ID4yNTUuCj4+ Cj4+IFRoaXMgaXMgb25seSBhIHJlcXVpcmVtZW50IGZvciB4YXBpYyBpbnRlcnJ1cHQgc291cmNl cy4gIHgyYXBpYwo+PiBpbnRlcnJ1cHQgc291cmNlcyBhbHJlYWR5IGRlbGl2ZXIgY29ycmVjdGx5 Lgo+Cj4gVGhlIGtleSBpcyB0aGUgQVBJQyBJRC4gVGhlcmUgaXMgbm8gbW9kaWZpY2F0aW9uIHRv IGV4aXN0aW5nIFBDSSBNU0kgYW5kCj4gSU9BUElDIHdpdGggdGhlIGludHJvZHVjdGlvbiBvZiB4 MmFwaWMuIFBDSSBNU0kvSU9BUElDIGNhbiBvbmx5IHNlbmQKPiBpbnRlcnJ1cHQgbWVzc2FnZSBj b250YWluaW5nIDhiaXQgQVBJQyBJRCwgd2hpY2ggY2Fubm90IGFkZHJlc3MgPjI1NQo+IGNwdXMu IEludGVycnVwdCByZW1hcHBpbmcgc3VwcG9ydHMgMzJiaXQgQVBJQyBJRCBzbyBpdCdzIG5lY2Vz c2FyeSB0bwo+IGVuYWJsZSA+MjU1IGNwdXMgd2l0aCB4MmFwaWMgbW9kZS4KPgo+IElmIExBUElD IGlzIGluIHgyYXBpYyB3aGlsZSBpbnRlcnJ1cHQgcmVtYXBwaW5nIGlzIGRpc2FibGVkLCBJT0FQ SUMKPiBjYW5ub3QgZGVsaXZlciBpbnRlcnJ1cHRzIHRvIGFsbCBjcHVzIGluIHRoZSBzeXN0ZW0g aWYgI2NwdSA+IDI1NS4KCkFmdGVyIHNwZW5kaW5nIGEgbG9uZyB0aW1lIHJlYWRpbmcgdXAgb24g dGhpcywgbXkgZmlyc3Qgb2JzZXJ2YXRpb24gaXMKdGhhdCBpdCBpcyB2ZXJ5IGRpZmZpY3VsdCB0 byBmaW5kIGNvbnNpc3RlbnQgaW5mb3JtYXRpb24gY29uY2VybmluZyB0aGUKZXhwZWN0ZWQgY29u dGVudCBvZiBNU0kgYWRkcmVzcy9kYXRhIGZpZWxkcyBmb3IgeDg2IGhhcmR3YXJlLiAgSGF2aW5n CnNhaWQgdGhhdCwgdGhpcyBoYXMgYmVlbiB2ZXJ5IGVkdWNhdGlvbmFsLgoKSXQgaXMgbm93IGNs ZWFyIHRoYXQgYW55IE1TSSBtZXNzYWdlIGNhbiBlaXRoZXIgc3BlY2lmeSBhbiA4IGJpdCBBUElD IElECmRpcmVjdGx5LCBvciByZXF1ZXN0IGZvciB0aGUgbWVzc2FnZSB0byBiZSByZW1hcHBlZC4g IEFwb2xvZ2llcyBmb3IgbXkKZWFybGllciBjb25mdXNpb24uCgo+Cj4+PiArLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwo+Pj4gfFFlbXUg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tKyAgIHwKPj4+ IHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICBWaXJ0dWFsICAgIHwg ICB8Cj4+PiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIFBDSSBkZXZp Y2UgICB8ICAgfAo+Pj4gfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAg ICAgICAgICAgICAgfCAgIHwKPj4+IHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICArLS0tLS0tLS0tLS0tLS0tLSsgICB8Cj4+PiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB8RE1BICAgICAgICAgfAo+Pj4gfCAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgViAgICAgICAgICAgIHwKPj4+IHwgICstLS0tLS0tLS0t LS0tLS0tLS0tLSsgICBSZXF1ZXN0ICArLS0tLS0tLS0tLS0tLS0tLSsgICB8Cj4+PiB8ICB8ICAg ICAgICAgICAgICAgICAgICArPC0tLS0tLS0tLS0tKyAgICAgICAgICAgICAgICB8ICAgfAo+Pj4g fCAgfCAgRHVtbXkgeGVuIHZJT01NVSAgfCBUYXJnZXQgR1BBIHwgIE1lbW9yeSByZWdpb24gfCAg IHwKPj4+IHwgIHwgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLT4rICAgICAgICAgICAg ICAgIHwgICB8Cj4+PiB8ICArLS0tLS0tLS0tKy0tLS0tLS0tLS0rICAgICAgICAgICAgKy0tLS0t LS0rLS0tLS0tLS0rICAgfAo+Pj4gfCAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgfCAgICAgICAgICAgIHwKPj4+IHwgICAgICAgICAgICB8SHlwZXJjYWxsICAgICAg ICAgICAgICAgICAgICAgIHwgICAgICAgICAgICB8Cj4+PiArLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKwo+Pj4gfEh5cGVydmlzb3IgIHwg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgIHwKPj4+IHwgICAgICAg ICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICB8Cj4+PiB8 ICAgICAgICAgICAgdiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAg fAo+Pj4gfCAgICAgKy0tLS0tLSstLS0tLS0rICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAg ICAgICAgIHwKPj4+IHwgICAgIHwgICB2SU9NTVUgICAgfCAgICAgICAgICAgICAgICAgICAgICAg IHwgICAgICAgICAgICB8Cj4+PiB8ICAgICArLS0tLS0tKy0tLS0tLSsgICAgICAgICAgICAgICAg ICAgICAgICB8ICAgICAgICAgICAgfAo+Pj4gfCAgICAgICAgICAgIHwgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgfCAgICAgICAgICAgIHwKPj4+IHwgICAgICAgICAgICB2ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICB8Cj4+PiB8ICAgICArLS0tLS0tKy0t LS0tLSsgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgfAo+Pj4gfCAgICAgfCBJ T01NVSBkcml2ZXJ8ICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgIHwKPj4+IHwg ICAgICstLS0tLS0rLS0tLS0tKyAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICB8 Cj4+PiB8ICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAg ICAgICAgfAo+Pj4gKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLSsKPj4+IHxIVyAgICAgICAgICB2ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFYgICAgICAgICAgICB8Cj4+PiB8ICAgICArLS0tLS0tKy0tLS0tLSsgICAgICAgICAg ICAgICAgICstLS0tLS0tLS0tLS0tKyAgICAgfAo+Pj4gfCAgICAgfCAgIElPTU1VICAgICArLS0t LS0tLS0tLS0tLS0tLT4rICBNZW1vcnkgICAgIHwgICAgIHwKPj4+IHwgICAgICstLS0tLS0rLS0t LS0tKyAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0rICAgICB8Cj4+PiB8ICAgICAgICAg ICAgXiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAo+Pj4gfCAg ICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwK Pj4+IHwgICAgICstLS0tLS0rLS0tLS0tKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB8Cj4+PiB8ICAgICB8IFBDSSBEZXZpY2UgIHwgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgfAo+Pj4gfCAgICAgKy0tLS0tLS0tLS0tLS0rICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHwKPj4+ICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCj4+Pgo+Pj4gMi4yIEludGVycnVwdCByZW1hcHBp bmcgb3ZlcnZpZXcuCj4+PiBJbnRlcnJ1cHRzIGZyb20gdmlydHVhbCBkZXZpY2VzIGFuZCBwaHlz aWNhbCBkZXZpY2VzIHdpbGwgYmUgZGVsaXZlcmVkCj4+PiB0byB2TEFQSUMgZnJvbSB2SU9BUElD IGFuZCB2TVNJLiB2SU9NTVUgd2lsbCByZW1hcCBpbnRlcnJ1cHQgZHVyaW5nCj4+PiB0aGlzCj4+ PiBwcm9jZWR1cmUuCj4+Pgo+Pj4gKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLSsKPj4+IHxRZW11ICAgICAgICAgICAgICAgICAgICAgICB8Vk0gICAg ICAgICAgICAgICAgICAgICB8Cj4+PiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCArLS0t LS0tLS0tLS0tLS0tLSsgICAgfAo+Pj4gfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgfCAg RGV2aWNlIGRyaXZlciB8ICAgIHwKPj4+IHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICst LS0tLS0tLSstLS0tLS0tKyAgICB8Cj4+PiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg ICAgICAgICBeICAgICAgICAgICAgfAo+Pj4gfCAgICAgICArLS0tLS0tLS0tLS0tLS0tLSsgIHwg Ky0tLS0tLS0tKy0tLS0tLS0rICAgIHwKPj4+IHwgICAgICAgfCBWaXJ0dWFsIGRldmljZSB8ICB8 IHwgIElSUSBzdWJzeXN0ZW0gfCAgICB8Cj4+PiB8ICAgICAgICstLS0tLS0tKy0tLS0tLS0tKyAg fCArLS0tLS0tLS0rLS0tLS0tLSsgICAgfAo+Pj4gfCAgICAgICAgICAgICAgIHwgICAgICAgICAg IHwgICAgICAgICAgXiAgICAgICAgICAgIHwKPj4+IHwgICAgICAgICAgICAgICB8ICAgICAgICAg ICB8ICAgICAgICAgIHwgICAgICAgICAgICB8Cj4+PiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwo+Pj4gfGh5cGVydmlvc3IgICAgIHwgICAgICAg ICAgICAgICAgICAgICAgfCBWSVJRICAgICAgIHwKPj4+IHwgICAgICAgICAgICAgICB8ICAgICAg ICAgICAgKy0tLS0tLS0tLSstLS0tLS0tLSsgICB8Cj4+PiB8ICAgICAgICAgICAgICAgfCAgICAg ICAgICAgIHwgICAgICB2TEFQSUMgICAgICB8ICAgfAo+Pj4gfCAgICAgICAgICAgICAgIHwgICAg ICAgICAgICArLS0tLS0tLS0tKy0tLS0tLS0tKyAgIHwKPj4+IHwgICAgICAgICAgICAgICB8ICAg ICAgICAgICAgICAgICAgICAgIF4gICAgICAgICAgICB8Cj4+PiB8ICAgICAgICAgICAgICAgfCAg ICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgfAo+Pj4gfCAgICAgICAgICAgICAgIHwg ICAgICAgICAgICArLS0tLS0tLS0tKy0tLS0tLS0tKyAgIHwKPj4+IHwgICAgICAgICAgICAgICB8 ICAgICAgICAgICAgfCAgICAgIHZJT01NVSAgICAgIHwgICB8Cj4+PiB8ICAgICAgICAgICAgICAg fCAgICAgICAgICAgICstLS0tLS0tLS0rLS0tLS0tLS0rICAgfAo+Pj4gfCAgICAgICAgICAgICAg IHwgICAgICAgICAgICAgICAgICAgICAgXiAgICAgICAgICAgIHwKPj4+IHwgICAgICAgICAgICAg ICB8ICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICB8Cj4+PiB8ICAgICAgICAgICAg ICAgfCAgICAgICAgICAgICstLS0tLS0tLS0rLS0tLS0tLS0rICAgfAo+Pj4gfCAgICAgICAgICAg ICAgIHwgICAgICAgICAgICB8ICAgdklPQVBJQy92TVNJICAgfCAgIHwKPj4+IHwgICAgICAgICAg ICAgICB8ICAgICAgICAgICAgKy0tLS0rLS0tLSstLS0tLS0tLSsgICB8Cj4+PiB8ICAgICAgICAg ICAgICAgfCAgICAgICAgICAgICAgICAgXiAgICBeICAgICAgICAgICAgfAo+Pj4gfCAgICAgICAg ICAgICAgICstLS0tLS0tLS0tLS0tLS0tLSsgICAgfCAgICAgICAgICAgIHwKPj4+IHwgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICB8Cj4+PiArLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwo+Pj4gSFcgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfElSUQo+Pj4gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tKwo+Pj4gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHwgICBQQ0kgRGV2aWNlICAgICAgfAo+Pj4gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tKwo+Pj4KPj4+Cj4+Pgo+Pj4KPj4+ IDMgWGVuIGh5cGVydmlzb3IKPj4+ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cj4+Pgo+Pj4KPj4+IDMuMSBO ZXcgaHlwZXJjYWxsIFhFTl9TWVNDVExfdmlvbW11X29wCj4+PiBUaGlzIGh5cGVyY2FsbCBzaG91 bGQgYWxzbyBzdXBwb3J0IHB2IElPTU1VIHdoaWNoIGlzIHN0aWxsIHVuZGVyIFJGQwo+Pj4gcmV2 aWV3LiBIZXJlIG9ubHkgY292ZXJzIG5vbi1wdiBwYXJ0Lgo+Pj4KPj4+IDEpIERlZmluaXRpb24g b2YgInN0cnVjdCB4ZW5fc3lzY3RsX3Zpb21tdV9vcCIgYXMgbmV3IGh5cGVyY2FsbAo+Pj4gcGFy YW1ldGVyLgo+Pgo+PiBXaHkgZGlkIHlvdSBjaG9vc2Ugc3lzY3RsPyAgQXMgdGhlc2UgYXJlIHBl ci1kb21haW4sIGRvbWN0bCB3b3VsZCBiZSBhCj4+IG1vcmUgbG9naWNhbCBjaG9pY2UuICBIb3dl dmVyLCBuZWl0aGVyIG9mIHRoZXNlIHNob3VsZCBiZSB1c2FibGUgYnkKPj4gUWVtdSwgYW5kIHdl IGFyZSB0cnlpbmcgdG8gc3BsaXQgb3V0ICJub3JtYWwgcWVtdSBvcGVyYXRpb25zIiBpbnRvIGRt b3BzCj4+IHdoaWNoIGNhbiBiZSBzYWZlbHkgZGVwcml2aWxlZ2VkLgo+Pgo+Cj4gRG8geW91IGtu b3cgd2hhdCdzIHRoZSBzdGF0dXMgb2YgZG1vcCBub3c/IEkganVzdCBmb3VuZCBzb21lIGRpc2N1 c3Npb25zCj4gYWJvdXQgZGVzaWduIGluIHRoZSBtYWlsbGlzdC4gV2UgbWF5IHVzZSBkb21jdGwg Zmlyc3QgYW5kIG1vdmUgdG8gZG1vcAo+IHdoZW4gaXQncyByZWFkeT8KCkkgYmVsaWV2ZSBQYXVs IGlzIGxvb2tpbmcgaW50byByZXNwaW4gdGhlIHNlcmllcyBlYXJseSBpbiB0aGUgNC45IGRldgpj eWNsZS4gIEkgZXhwZWN0IGl0IHdvbid0IHRha2UgbG9uZyB1bnRpbCB0aGV5IGFyZSBzdWJtaXR0 ZWQuCgo+Cj4+Cj4+PiAgICAgICAgICAgICAgICAgICAgIHU2NCBpb3ZhOwo+Pj4gICAgICAgICAg ICAgICAgIC8qIE91dCBwYXJhbWV0ZXJzLiAqLwo+Pj4gICAgICAgICAgICAgICAgICAgICB1NjQg dHJhbnNsYXRlZF9hZGRyOwo+Pj4gICAgICAgICAgICAgICAgICAgICB1NjQgYWRkcl9tYXNrOyAv KiBUcmFuc2xhdGlvbiBwYWdlIHNpemUgKi8KPj4+ICAgICAgICAgICAgICAgICAgICAgSU9NTVVB Y2Nlc3NGbGFncyBwZXJtaXNzb247Cj4+Cj4+IEhvdyBpcyB0aGlzIHRyYW5zbGF0aW9uIGludGVu ZGVkIHRvIGJlIHVzZWQ/ICBIb3cgZG8geW91IHBsYW4gdG8gYXZvaWQKPj4gcmFjZSBjb25kaXRp b25zIHdoZXJlIHFlbXUgcmVxdWVzdHMgYSB0cmFuc2xhdGlvbiwgcmVjZWl2ZXMgb25lLCB0aGUK Pj4gZ3Vlc3QgaW52YWxpZGF0ZWQgdGhlIG1hcHBpbmcsIGFuZCB0aGVuIHFlbXUgdHJpZXMgdG8g dXNlIGl0cyB0cmFuc2xhdGVkCj4+IGFkZHJlc3M/Cj4+Cj4+IFRoZXJlIGFyZSBvbmx5IHR3byB3 YXlzIEkgY2FuIHNlZSBvZiBkb2luZyB0aGlzIHJhY2UtZnJlZS4gIE9uZSBpcyB0bwo+PiBpbXBs ZW1lbnQgYSAibWVtY3B5IHdpdGggdHJhbnNsYXRpb24iIGh5cGVyY2FsbCwgYW5kIHRoZSBvdGhl ciBpcyB0bwo+PiByZXF1aXJlIHRoZSB1c2Ugb2YgQVRTIGluIHRoZSB2SU9NTVUsIHdoZXJlIHRo ZSBndWVzdCBPUyBpcyByZXF1aXJlZCB0bwo+PiB3YWl0IGZvciBhIHBvc2l0aXZlIHJlc3BvbnNl IGZyb20gdGhlIHZJT01NVSBiZWZvcmUgaXQgY2FuIHNhZmVseSByZXVzZQo+PiB0aGUgbWFwcGlu Zy4KPj4KPj4gVGhlIGZvcm1lciBiZWhhdmVzIGxpa2UgcmVhbCBoYXJkd2FyZSBpbiB0aGF0IGFu IGludGVybWVkaWF0ZSBlbnRpdHkKPj4gcGVyZm9ybXMgdGhlIHRyYW5zbGF0aW9uIHdpdGhvdXQg aW50ZXJhY3Rpbmcgd2l0aCB0aGUgRE1BIHNvdXJjZS4gIFRoZQo+PiBsYXR0ZXIgZXhwbGljaXRs eSBleHBvc2luZyB0aGUgZmFjdCB0aGF0IGNhY2hpbmcgaXMgZ29pbmcgb24gYXQgdGhlCj4+IGVu ZHBvaW50IHRvIHRoZSBPUy4KPgo+IFRoZSBmb3JtZXIgb25lIHNlZW1zIHRvIG1vdmUgRE1BIG9w ZXJhdGlvbiBpbnRvIGh5cGVydmlzb3IgYnV0IFFlbXUKPiB2SU9NTVUgZnJhbWV3b3JrIGp1c3Qg cGFzc2VzIElPVkEgdG8gZHVtbXkgeGVuLXZJT01NVSB3aXRob3V0IGlucHV0Cj4gZGF0YSBhbmQg YWNjZXNzIGxlbmd0aC4gSSB3aWxsIGRpZyBtb3JlIHRvIGZpZ3VyZSBvdXQgc29sdXRpb24uCgpZ ZXMgLSB0aGF0IGRvZXMgaW4gcHJpbmNpcGxlIGFjdHVhbGx5IG1vdmUgdGhlIERNQSBvdXQgb2Yg UWVtdS4KCj4KPj4KPj4+Cj4+Pgo+Pj4gRGVmaW5pdGlvbiBvZiBWSU9NTVUgc3Vib3BzOgo+Pj4g I2RlZmluZSBYRU5fU1lTQ1RMX3Zpb21tdV9xdWVyeV9jYXBhYmlsaXR5ICAgICAgICAwCj4+PiAj ZGVmaW5lIFhFTl9TWVNDVExfdmlvbW11X2NyZWF0ZSAgICAgICAgICAgIDEKPj4+ICNkZWZpbmUg WEVOX1NZU0NUTF92aW9tbXVfZGVzdHJveSAgICAgICAgICAgIDIKPj4+ICNkZWZpbmUgWEVOX1NZ U0NUTF92aW9tbXVfZG1hX3RyYW5zbGF0aW9uX2Zvcl92cGRldiAgICAgMwo+Pj4KPj4+IERlZmlu aXRpb24gb2YgVklPTU1VIGNhcGFiaWxpdGllcwo+Pj4gI2RlZmluZSBYRU5fVklPTU1VX0NBUEFC SUxJVFlfbDFfdHJhbnNsYXRpb24gICAgKDEgPDwgMCkKPj4+ICNkZWZpbmUgWEVOX1ZJT01NVV9D QVBBQklMSVRZX2wyX3RyYW5zbGF0aW9uICAgICgxIDw8IDEpCj4+PiAjZGVmaW5lIFhFTl9WSU9N TVVfQ0FQQUJJTElUWV9pbnRlcnJ1cHRfcmVtYXBwaW5nICAgICgxIDw8IDIpCj4+Cj4+IEhvdyBh cmUgdklPTU1VcyBnb2luZyB0byBiZSBtb2RlbGxlZCB0byBndWVzdHM/ICBPbiByZWFsIGhhcmR3 YXJlLCB0aGV5Cj4+IGFsbCBzZWVtIHRvIGVuZCBhc3NvY2lhdGVkIHdpdGggYSBQQ0kgZGV2aWNl IG9mIHNvbWUgc29ydCwgZXZlbiBpZiBpdCBpcwo+PiBqdXN0IHRoZSBMUEMgYnJpZGdlLgo+Cj4K PiBUaGlzIGRlc2lnbiBqdXN0IGNvbnNpZGVycyBvbmUgdklPTU1VIGhhcyBhbGwgUENJIGRldmlj ZSB1bmRlciBpdHMKPiBzcGVjaWZpZWQgUENJIFNlZ21lbnQuICJJTkNMVURFX1BDSV9BTEwiIGJp dCBvZiBEUkhEIHN0cnVjdCBpcyBzZXQgZm9yCj4gdklPTU1VLgoKRXZlbiBpZiB0aGUgZmlyc3Qg aW1wbGVtZW50YXRpb24gb25seSBzdXBwb3J0cyBhIHNpbmdsZSB2SU9NTVUsIHBsZWFzZQpkZXNp Z24gdGhlIGludGVyZmFjZSB0byBjb3BlIHdpdGggbXVsdGlwbGUuICBJdCB3aWxsIHNhdmUgc29t ZW9uZSBoYXZpbmcKdG8gZ28gYW5kIGJyZWFrIHRoZSBBUEkvQUJJIGluIHRoZSBmdXR1cmUgd2hl biBzdXBwb3J0IGZvciBtdWx0aXBsZQp2SU9NTVVzIGlzIG5lZWRlZC4KCj4KPj4gICAgIAo+PiBI b3cgZG8gd2UgZGVhbCB3aXRoIG11bHRpcGxlIHZJT01NVXMgaW4gYSBzaW5nbGUgZ3Vlc3Q/Cj4K PiBGb3IgbXVsdGktdklPTU1VLCB3ZSBuZWVkIHRvIGFkZCBuZXcgZmllbGQgaW4gdGhlIHN0cnVj dCBpb21tdV9vcCB0bwo+IGRlc2lnbmF0ZSBkZXZpY2Ugc2NvcGUgb2YgdklPTU1VcyBpZiB0aGV5 IGFyZSB1bmRlciBzYW1lIFBDSQo+IHNlZ21lbnQuIFRoaXMgYWxzbyBuZWVkcyB0byBjaGFuZ2Ug RE1BUiB0YWJsZS4KPgo+Pgo+Pj4KPj4+Cj4+PiAyKSBEZXNpZ24gZm9yIHN1Ym9wcwo+Pj4gLSBY RU5fU1lTQ1RMX3Zpb21tdV9xdWVyeV9jYXBhYmlsaXR5Cj4+PiAgICAgICAgR2V0IHZJT01NVSBj YXBhYmlsaXRpZXMobDEvbDIgdHJhbnNsYXRpb24gYW5kIGludGVycnVwdAo+Pj4gcmVtYXBwaW5n KS4KPj4+Cj4+PiAtIFhFTl9TWVNDVExfdmlvbW11X2NyZWF0ZQo+Pj4gICAgICAgQ3JlYXRlIHZJ T01NVSBpbiBYZW4gaHlwZXJ2aXNvciB3aXRoIGRvbV9pZCwgY2FwYWJpbGl0aWVzIGFuZCByZWcK Pj4+IGJhc2UgYWRkcmVzcy4KPj4+Cj4+PiAtIFhFTl9TWVNDVExfdmlvbW11X2Rlc3Ryb3kKPj4+ ICAgICAgIERlc3RvcnkgdklPTU1VIGluIFhlbiBoeXBlcnZpc29yIHdpdGggZG9tX2lkIGFzIHBh cmFtZXRlcnMuCj4+Pgo+Pj4gLSBYRU5fU1lTQ1RMX3Zpb21tdV9kbWFfdHJhbnNsYXRpb25fZm9y X3ZwZGV2Cj4+PiAgICAgICBUcmFuc2xhdGUgSU9WQSB0byBHUEEgZm9yIHNwZWNpZmllZCB2aXJ0 dWFsIFBDSSBkZXZpY2Ugd2l0aAo+Pj4gZG9tIGlkLAo+Pj4gUENJIGRldmljZSdzIGJkZiBhbmQg SU9WQSBhbmQgeGVuIGh5cGVydmlzb3IgcmV0dXJucyB0cmFuc2xhdGVkIEdQQSwKPj4+IGFkZHJl c3MgbWFzayBhbmQgYWNjZXNzIHBlcm1pc3Npb24uCj4+Pgo+Pj4KPj4+IDMuMiBsMiB0cmFuc2xh dGlvbgo+Pj4gMSkgRm9yIHZpcnR1YWwgUENJIGRldmljZQo+Pj4gWGVuIGR1bW15IHhlbi12SU9N TVUgaW4gUWVtdSB0cmFuc2xhdGVzIElPVkEgdG8gdGFyZ2V0IEdQQSB2aWEgbmV3Cj4+PiBoeXBl cmNhbGwgd2hlbiBETUEgb3BlcmF0aW9uIGhhcHBlbnMuCj4+Pgo+Pj4gMikgRm9yIHBoeXNpY2Fs IFBDSSBkZXZpY2UKPj4+IERNQSBvcGVyYXRpb25zIGdvIHRob3VnaCBwaHlzaWNhbCBJT01NVSBk aXJlY3RseSBhbmQgSU8gcGFnZSB0YWJsZSBmb3IKPj4+IElPVkEtPkhQQSBzaG91bGQgYmUgbG9h ZGVkIGludG8gcGh5c2ljYWwgSU9NTVUuIFdoZW4gZ3Vlc3QgdXBkYXRlcwo+Pj4gbDIgUGFnZS10 YWJsZSBwb2ludGVyIGZpZWxkLCBpdCBwcm92aWRlcyBJTyBwYWdlIHRhYmxlIGZvcgo+Pj4gSU9W QS0+R1BBLiB2SU9NTVUgbmVlZHMgdG8gc2hhZG93IGwyIHRyYW5zbGF0aW9uIHRhYmxlLCB0cmFu c2xhdGUKPj4+IEdQQS0+SFBBIGFuZCB1cGRhdGUgc2hhZG93IHBhZ2UgdGFibGUoSU9WQS0+SFBB KSBwb2ludGVyIHRvIGwyCj4+PiBQYWdlLXRhYmxlIHBvaW50ZXIgdG8gY29udGV4dCBlbnRyeSBv ZiBwaHlzaWNhbCBJT01NVS4KPj4KPj4gSG93IGFyZSB5b3UgcHJvcG9zaW5nIHRvIGRvIHRoaXMg c2hhZG93aW5nPyAgRG8gd2UgbmVlZCB0byB0cmFwIGFuZAo+PiBlbXVsYXRlIGFsbCB3cml0ZXMg dG8gdGhlIHZJT01NVSBwYWdldGFibGVzLCBvciBpcyB0aGVyZSBhIGJldHRlciB3YXkgdG8KPj4g a25vdyB3aGVuIHRoZSBtYXBwaW5ncyBuZWVkIGludmFsaWRhdGluZz8KPgo+IE5vLCB3ZSBkb24n dCBuZWVkIHRvIHRyYXAgYWxsIHdyaXRlIHRvIElPIHBhZ2UgdGFibGUuCj4gRnJvbSBWVEQgc3Bl YyA2LjEsICJSZXBvcnRpbmcgdGhlIENhY2hpbmcgTW9kZSBhcyBTZXQgZm9yIHRoZQo+IHZpcnR1 YWwgaGFyZHdhcmUgcmVxdWlyZXMgdGhlIGd1ZXN0IHNvZnR3YXJlIHRvIGV4cGxpY2l0bHkgaXNz dWUKPiBpbnZhbGlkYXRpb24gb3BlcmF0aW9ucyBvbiB0aGUgdmlydHVhbCBoYXJkd2FyZSBmb3Ig YW55L2FsbCB1cGRhdGVzIHRvCj4gdGhlIGd1ZXN0IHJlbWFwcGluZyBzdHJ1Y3R1cmVzLlRoZSB2 aXJ0dWFsaXppbmcgc29mdHdhcmUgbWF5IHRyYXAgdGhlc2UKPiBndWVzdCBpbnZhbGlkYXRpb24g b3BlcmF0aW9ucyB0byBrZWVwIHRoZSBzaGFkb3cgdHJhbnNsYXRpb24gc3RydWN0dXJlcwo+IGNv bnNpc3RlbnQgdG8gZ3Vlc3QgdHJhbnNsYXRpb24gc3RydWN0dXJlIG1vZGlmaWNhdGlvbnMsIHdp dGhvdXQKPiByZXNvcnRpbmcgdG8gb3RoZXIgbGVzcyBlZmZpY2llbnQgdGVjaG5pcXVlcy4iCj4g U28gYW55IHVwZGF0ZXMgb2YgSU8gcGFnZSB0YWJsZSB3aWxsIGZvbGxvdyBpbnZhbGlkYXRpb24g b3BlcmF0aW9uIGFuZAo+IHdlIHVzZSB0aGVtIHRvIGRvIHNoYWRvd2luZy4KCk9rLiAgVGhhdCBp cyBoZWxwZnVsLgoKU28sIHRoZSBndWVzdCBtYWtlcyBzb21lIHVwZGF0ZXMsIGFuZCByZXF1ZXN0 cyBhbiBpbnZhbGlkYXRpb24uICBUaGlzCnRyYXBzIGludG8gWGVuLCBhbmQgd2UgcHJlc3VtYWJs eSByZS1zaGFkb3cgYWxsIHN0YXRlIGZyb20gZnJlc2g/ICBXZQpjYW4gdGhlbiBwcmVzdW1hYmx5 IHNlbmQgYSBzeW5jaHJvbm91cyBpbnZhbGlkYXRpb24gcmVxdWVzdCB0byBRZW11IGF0CnRoaXMg cG9pbnQ/CgpIb3cgbG9uZyBpcyB0aGlzIGxpa2VseSB0byB0YWtlPyAgUmVzaGFkb3dpbmcgYWxs IERNQSBhbmQgSW50ZXJydXB0CnJlbWFwcGluZyB0YWJsZXMgc291bmRzIHZlcnkgZXhwZW5zaXZl LgoKPgo+Pgo+Pj4KPj4+IE5vdyBhbGwgUENJIGRldmljZXMgaW4gc2FtZSBodm0gZG9tYWluIHNo YXJlIG9uZSBJTyBwYWdlIHRhYmxlCj4+PiAoR1BBLT5IUEEpIGluIHBoeXNpY2FsIElPTU1VIGRy aXZlciBvZiBYZW4uIFRvIHN1cHBvcnQgbDIKPj4+IHRyYW5zbGF0aW9uIG9mIHZJT01NVSwgSU9N TVUgZHJpdmVyIG5lZWQgdG8gc3VwcG9ydCBtdWx0aXBsZSBhZGRyZXNzCj4+PiBzcGFjZXMgcGVy IGRldmljZSBlbnRyeS4gVXNpbmcgZXhpc3RpbmcgSU8gcGFnZSB0YWJsZShHUEEtPkhQQSkKPj4+ IGRlZmF1bHRseSBhbmQgc3dpdGNoIHRvIHNoYWRvdyBJTyBwYWdlIHRhYmxlKElPVkEtPkhQQSkg d2hlbiBsMgo+Pj4gdHJhbnNsYXRpb24gZnVuY3Rpb24gaXMgZW5hYmxlZC4gVGhlc2UgY2hhbmdl IHdpbGwgbm90IGFmZmVjdCBjdXJyZW50Cj4+PiBQMk0gbG9naWMuCj4+Pgo+Pj4gMy4zIEludGVy cnVwdCByZW1hcHBpbmcKPj4+IEludGVycnVwdHMgZnJvbSB2aXJ0dWFsIGRldmljZXMgYW5kIHBo eXNpY2FsIGRldmljZXMgd2lsbCBiZSBkZWxpdmVyZWQKPj4+IHRvIHZsYXBpYyBmcm9tIHZJT0FQ SUMgYW5kIHZNU0kuIEl0IG5lZWRzIHRvIGFkZCBpbnRlcnJ1cHQgcmVtYXBwaW5nCj4+PiBob29r cyBpbiB0aGUgdm1zaV9kZWxpdmVyKCkgYW5kIGlvYXBpY19kZWxpdmVyKCkgdG8gZmluZCB0YXJn ZXQgdmxhcGljCj4+PiBhY2NvcmRpbmcgaW50ZXJydXB0IHJlbWFwcGluZyB0YWJsZS4KPj4+Cj4+ Pgo+Pj4gMy40IGwxIHRyYW5zbGF0aW9uCj4+PiBXaGVuIG5lc3RlZCB0cmFuc2xhdGlvbiBpcyBl bmFibGVkLCBhbnkgYWRkcmVzcyBnZW5lcmF0ZWQgYnkgbDEKPj4+IHRyYW5zbGF0aW9uIGlzIHVz ZWQgYXMgdGhlIGlucHV0IGFkZHJlc3MgZm9yIG5lc3Rpbmcgd2l0aCBsMgo+Pj4gdHJhbnNsYXRp b24uIFBoeXNpY2FsIElPTU1VIG5lZWRzIHRvIGVuYWJsZSBib3RoIGwxIGFuZCBsMiB0cmFuc2xh dGlvbgo+Pj4gaW4gbmVzdGVkIHRyYW5zbGF0aW9uIG1vZGUoR1ZBLT5HUEEtPkhQQSkgZm9yIHBh c3N0aHJvdWdoCj4+PiBkZXZpY2UuCj4+Cj4+IEFsbCB0aGVzZSBsMSBhbmQgbDIgdHJhbnNsYXRp b25zIGFyZSBnZXR0aW5nIGNvbmZ1c2luZy4gIENvdWxkIHdlCj4+IHBlcmhhcHMgY2FsbCB0aGVt IGd1ZXN0IHRyYW5zbGF0aW9uIGFuZCBob3N0IHRyYW5zbGF0aW9uLCBvciBpcyB0aGF0Cj4+IGxp a2VseSB0byBjYXVzZSBvdGhlciBwcm9ibGVtcz8KPgo+IERlZmluaXRpb25zIG9mIGwxIGFuZCBs MiB0cmFuc2xhdGlvbiBmcm9tIFZURCBzcGVjLgo+IGZpcnN0LWxldmVsIHRyYW5zbGF0aW9uIHRv IHJlbWFwIGEgdmlydHVhbCBhZGRyZXNzIHRvIGludGVybWVkaWF0ZQo+IChndWVzdCkgcGh5c2lj YWwgYWRkcmVzcy4KPiBzZWNvbmQtbGV2ZWwgdHJhbnNsYXRpb25zIHRvIHJlbWFwIGEgaW50ZXJt ZWRpYXRlIHBoeXNpY2FsIGFkZHJlc3MgdG8KPiBtYWNoaW5lIChob3N0KSBwaHlzaWNhbCBhZGRy ZXNzLgo+IGd1ZXN0IGFuZCBob3N0IHRyYW5zbGF0aW9uIG1heWJlIG5vdCBzdWl0YWJsZSBmb3Ig dGhlbT8KClRydWUsIGJ1dCB3aGF0IGlzIGFsc28gY29uZnVzaW5nIGlzIHRoYXQgd2hhdCB3YXMg cHJldmlvdXNseSB0aGUgb25seQpsZXZlbCBvZiB0cmFuc2xhdGlvbiBpcyBub3cgbDIuCgpTbyBs b25nIGFzIGl0IGlzIGNsZWFybHkgc3RhdGVkIHNvbWV3aGVyZSBpbiB0aGUgY29kZSBhbmQvb3Ig ZmVhdHVyZSBkb2MKd2hpY2ggYWRkcmVzcyBzcGFjZXMgZWFjaCBsZXZlbCB0cmFuc2xhdGVzIGJl dHdlZW4gKGkuZS4gbDEgdHJhbnNsYXRlcwpsaW5lYXIgYWRkcmVzc2VzIGludG8gZ2ZucywgYW5k IGwyIHRyYW5zbGF0ZXMgZ2ZucyBpbnRvIG1mbnMpLCBpdCB3aWxsCnByb2JhYmx5IGJlIG9rLgoK Q2FuIEkgcmVjb21tZW5kIHRoYXQgeW91IG1ha2UgdXNlIG9mIHRoZSBUWVBFX1NBRkUoKSBpbmZy YXN0cnVjdHVyZSB0bwptYWtlIGNvbmNyZXRlLCBkaXNwZXJhdGUgdHlwZXMgZm9yIGFueSBuZXcg dHJhbnNsYXRpb24gZnVuY3Rpb25zLCB0bwptYWtlIGl0IGhhcmRlciB0byBhY2NpZGVudGFsbHkg Z2V0IHdyb25nLgoKPgo+Pgo+Pj4KPj4+IFZULWQgY29udGV4dCBlbnRyeSBwb2ludHMgdG8gZ3Vl c3QgbDEgdHJhbnNsYXRpb24gdGFibGUgd2hpY2gKPj4+IHdpbGwgYmUgbmVzdC10cmFuc2xhdGVk IGJ5IGwyIHRyYW5zbGF0aW9uIHRhYmxlIGFuZCBzbyBpdAo+Pj4gY2FuIGJlIGRpcmVjdGx5IGxp bmtlZCB0byBjb250ZXh0IGVudHJ5IG9mIHBoeXNpY2FsIElPTU1VLgo+Pj4KPj4+IFRvIGVuYWJs ZSBsMSB0cmFuc2xhdGlvbiBpbiBWTQo+Pj4gMSkgWGVuIElPTU1VIGRyaXZlciBlbmFibGVzIG5l c3RlZCB0cmFuc2xhdGlvbiBtb2RlCj4+PiAyKSBVcGRhdGUgR1BBIHJvb3Qgb2YgZ3Vlc3QgbDEg dHJhbnNsYXRpb24gdGFibGUgdG8gY29udGV4dCBlbnRyeQo+Pj4gb2YgcGh5c2ljYWwgSU9NTVUu Cj4+Pgo+Pj4gQWxsIGhhbmRsZXMgYXJlIGluIGh5cGVydmlzb3IgYW5kIG5vIGludGVyYWN0aW9u IHdpdGggUWVtdS4KPj4+Cj4+Pgo+Pj4gMy41IEltcGxlbWVudGF0aW9uIGNvbnNpZGVyYXRpb24K Pj4+IFZULWQgc3BlYyBkb2Vzbid0IGRlZmluZSBhIGNhcGFiaWxpdHkgYml0IGZvciB0aGUgbDIg dHJhbnNsYXRpb24uCj4+PiBBcmNoaXRlY3R1cmFsbHkgdGhlcmUgaXMgbm8gd2F5IHRvIHRlbGwg Z3Vlc3QgdGhhdCBsMiB0cmFuc2xhdGlvbgo+Pj4gY2FwYWJpbGl0eSBpcyBub3QgYXZhaWxhYmxl LiBMaW51eCBJbnRlbCBJT01NVSBkcml2ZXIgdGhpbmtzIGwyCj4+PiB0cmFuc2xhdGlvbiBpcyBh bHdheXMgYXZhaWxhYmxlIHdoZW4gVlREIGV4aXRzIGFuZCBmYWlsIHRvIGJlIGxvYWRlZAo+Pj4g d2l0aG91dCBsMiB0cmFuc2xhdGlvbiBzdXBwb3J0IGV2ZW4gaWYgaW50ZXJydXB0IHJlbWFwcGlu ZyBhbmQgbDEKPj4+IHRyYW5zbGF0aW9uIGFyZSBhdmFpbGFibGUuIFNvIGl0IG5lZWRzIHRvIGVu YWJsZSBsMiB0cmFuc2xhdGlvbiBmaXJzdAo+Pj4gYmVmb3JlIG90aGVyIGZ1bmN0aW9ucy4KPj4K Pj4gV2hhdCB0aGVuIGlzIHRoZSBwdXJwb3NlIG9mIHRoZSBuZXN0ZWQgdHJhbnNsYXRpb24gc3Vw cG9ydCBiaXQgaW4gdGhlCj4+IGV4dGVuZGVkIGNhcGFiaWxpdHkgcmVnaXN0ZXI/Cj4KPiBJdCdz IHRvIHRyYW5zbGF0ZSBvdXRwdXQgR1BBIGZyb20gZmlyc3QgbGV2ZWwgdHJhbnNsYXRpb24oSU9W QS0+R1BBKQo+IHRvIEhQQS4KPgo+IERldGFpbCBwbGVhc2Ugc2VlIFZURCBzcGVjIC0gMy44IE5l c3RlZCBUcmFuc2xhdGlvbgo+ICJXaGVuIE5lc3RpbmcgRW5hYmxlIChORVNURSkgZmllbGQgaXMg MSBpbiBleHRlbmRlZC1jb250ZXh0LWVudHJpZXMsCj4gcmVxdWVzdHMtd2l0aC1QQVNJRCB0cmFu c2xhdGVkIHRocm91Z2ggZmlyc3QtbGV2ZWwgdHJhbnNsYXRpb24gYXJlIGFsc28KPiBzdWJqZWN0 ZWQgdG8gbmVzdGVkIHNlY29uZC1sZXZlbCB0cmFuc2xhdGlvbi4gU3VjaCBleHRlbmRlZGNvbnRl eHQtCj4gZW50cmllcyBjb250YWluIGJvdGggdGhlIHBvaW50ZXIgdG8gdGhlIFBBU0lELXRhYmxl ICh3aGljaCBjb250YWlucyB0aGUKPiBwb2ludGVyIHRvIHRoZSBmaXJzdGxldmVsIHRyYW5zbGF0 aW9uIHN0cnVjdHVyZXMpLCBhbmQgdGhlIHBvaW50ZXIgdG8KPiB0aGUgc2Vjb25kLWxldmVsIHRy YW5zbGF0aW9uIHN0cnVjdHVyZXMuIgoKSSBkaWRuJ3QgcGhyYXNlIG15IHF1ZXN0aW9uIHZlcnkg d2VsbC4gIEkgdW5kZXJzdGFuZCB3aGF0IHRoZSBuZXN0ZWQKdHJhbnNsYXRpb24gYml0IG1lYW5z LCBidXQgSSBkb24ndCB1bmRlcnN0YW5kIHdoeSB3ZSBoYXZlIGEgcHJvYmxlbQpzaWduYWxsaW5n IHRoZSBwcmVzZW5jZSBvciBsYWNrIG9mIG5lc3RlZCB0cmFuc2xhdGlvbnMgdG8gdGhlIGd1ZXN0 LgoKSW4gb3RoZXIgd29yZHMsIHdoeSBjYW4ndCB3ZSBoaWRlIGwyIHRyYW5zbGF0aW9uIGZyb20g dGhlIGd1ZXN0IGJ5CnNpbXBseSBjbGVhcmluZyB0aGUgbmVzdGVkIHRyYW5zbGF0aW9uIGNhcGFi aWxpdHk/Cgo+Cj4KPj4+IDQuNCBSZXBvcnQgdklPTU1VIHRvIGh2bWxvYWRlcgo+Pj4gSHZtbG9h ZGVyIGlzIGluIGNoYXJnZSBvZiBidWlsZGluZyBBQ1BJIHRhYmxlcyBmb3IgR3Vlc3QgT1MgYW5k IE9TCj4+PiBwcm9iZXMgSU9NTVUgdmlhIEFDUEkgRE1BUiB0YWJsZS4gU28gaHZtbG9kZXIgbmVl ZHMgdG8ga25vdyB3aGV0aGVyCj4+PiB2SU9NTVUgaXMgZW5hYmxlZCBvciBub3QgYW5kIGl0cyBj YXBhYmlsaXR5IHRvIHByZXBhcmUgQUNQSSBETUFSIHRhYmxlCj4+PiBmb3IgR3Vlc3QgT1MuCj4+ Pgo+Pj4gVGhlcmUgYXJlIHRocmVlIHdheXMgdG8gZG8gdGhhdC4KPj4+IDEpIEV4dGVuZCBzdHJ1 Y3QgaHZtX2luZm9fdGFibGUgYW5kIGFkZCB2YXJpYWJsZXMgaW4gdGhlIHN0cnVjdAo+Pj4gaHZt X2luZm9fdGFibGUgdG8gcGFzcyB2SU9NTVUgaW5mb3JtYXRpb24gdG8gaHZtbG9hZGVyLiBCdXQg dGhpcwo+Pj4gcmVxdWlyZXMgdG8gYWRkIG5ldyB4YyBpbnRlcmZhY2UgdG8gdXNlIHN0cnVjdCBo dm1faW5mb190YWJsZSBpbiB0aGUKPj4+IFFlbXUuCj4+Pgo+Pj4gMikgUGFzcyB2SU9NTVUgaW5m b3JtYXRpb24gdG8gaHZtbG9hZGVyIHZpYSBYZW5zdG9yZQo+Pj4KPj4+IDMpIEJ1aWxkIEFDUEkg RE1BUiB0YWJsZSBpbiBRZW11IGFuZCBwYXNzIGl0IHRvIGh2bWxvYWRlciB2aWEgWGVuc3RvcmUu Cj4+PiBUaGlzIHNvbHV0aW9uIGlzIGFscmVhZHkgcHJlc2VudCBpbiB0aGUgdk5WRElNTSBkZXNp Z24oNC4zLjEKPj4+IEJ1aWxkaW5nIEd1ZXN0IEFDUEkgVGFibGVzCj4+PiBodHRwOi8vd3d3Lmdv c3NhbWVyLXRocmVhZHMuY29tL2xpc3RzL3hlbi9kZXZlbC80Mzk3NjYpLgo+Pj4KPj4+IFRoZSB0 aGlyZCBvcHRpb24gc2VlbXMgbW9yZSBjbGVhciBhbmQgaHZtbG9hZGVyIGRvZXNuJ3QgbmVlZCB0 byBkZWFsCj4+PiB3aXRoIHZJT01NVSBzdHVmZnMgYW5kIGp1c3QgcGFzcyB0aHJvdWdoIERNQVIg dGFibGUgdG8gR3Vlc3QgT1MuIEFsbAo+Pj4gdklPTU1VIHNwZWNpZmljIHN0dWZmcyB3aWxsIGJl IHByb2Nlc3NlZCBpbiB0aGUgZHVtbXkgeGVuLXZJT01NVQo+Pj4gZHJpdmVyLgo+Pgo+PiBQYXJ0 IG9mIEFDUEkgdGFibGUgYnVpbGRpbmcgaGFzIG5vdyBtb3ZlZCBpbnRvIHRoZSB0b29sc3RhY2su ICBVbmxlc3MKPj4gdGhlIHRhYmxlIG5lZWRzIGNyZWF0aW5nIGR5bmFtaWNhbGx5ICh3aGljaCBk b2Vzbid0IGFwcGVhciB0byBiZSB0aGUKPj4gY2FzZSksIGl0IGNhbiBiZSBkb25lIHdpdGhvdXQg YW55IGZ1cnRoZXIgY29tbXVuaWNhdGlvbi4KPj4KPgo+IFRoZSBETUFSIHRhYmxlIG5lZWRzIHRv IGJlIGNyZWF0ZWQgYWNjb3JkaW5nIGlucHV0IHBhcmFtZXRlcnMuCj4gLkUsRyBXaGVuIGludGVy cnVwdCByZW1hcHBpbmcgaXMgZW5hYmxlZCwgSU5UUl9SRU1BUCBiaXQgaW4gdGhlIGRtYXIKPiBz dHJ1Y3R1cmUgbmVlZHMgdG8gYmUgc2V0LiBTbyB3ZSBuZWVkIHRvIGNyZWF0ZSB0YWJsZSBkeW5h bWljYWxseSBkdXJpbmcKPiBjcmVhdGluZyBWTS4KClRoaXMgaXMgZmluZS4gIFRoZSB0b29sc3Rh Y2sga25vd3MgdGhlIGNvbmZpZ3VyYXRpb24gb2YgdGhlIFZNLCBhcyB3ZWxsCmFzIHRoZSBjYXBh YmlsaXRpZXMgb2YgWGVuLCBhbmQgc2hvdWxkIGJlIGFibGUgdG8gY29uc3RydWN0IGEgc3VpdGFi bGUKRE1BUiB0YWJsZSBhdCB0aGUgc2FtZSB0aW1lIGFzIGFsbCB0aGUgb3RoZXIgQUNQSSB0YWJs ZXMuCgp+QW5kcmV3CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fXwpYZW4tZGV2ZWwgbWFpbGluZyBsaXN0Clhlbi1kZXZlbEBsaXN0cy54ZW4ub3JnCmh0dHBz Oi8vbGlzdHMueGVuLm9yZy94ZW4tZGV2ZWwK