From mboxrd@z Thu Jan 1 00:00:00 1970 From: zhoucm1 Subject: Re: [RFC] Mechanism for high priority scheduling in amdgpu Date: Mon, 19 Dec 2016 11:26:26 +0800 Message-ID: <58575362.2030100@amd.com> References: <544E607D03B20249AA404517E498FC4699EBD3@exchange01.valvesoftware.com> <544E607D03B20249AA404517E498FC4699EC41@exchange01.valvesoftware.com> <544E607D03B20249AA404517E498FC4699EC70@exchange01.valvesoftware.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: List-Id: Discussion list for AMD gfx List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: amd-gfx-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "amd-gfx" To: "Pierre-Loup A. Griffais" , "Sagalovitch, Serguei" , Andres Rodriguez , "amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org" , "Mao, David" , "Zhang, Hawking" , "Huan, Alvin" QnkgdGhlIHdheSwgYXJlIHlvdSB1c2luZyBhbGwtb3BlbiBkcml2ZXIgb3IgYW1kZ3B1LXBybyBk cml2ZXI/CgorRGF2aWQgTWFvLCB3aG8gaXMgd29ya2luZyBvbiBvdXIgVnVsa2FuIGRyaXZlci4K ClJlZ2FyZHMsCkRhdmlkIFpob3UKCk9uIDIwMTblubQxMuaciDE45pelIDA2OjA1LCBQaWVycmUt TG91cCBBLiBHcmlmZmFpcyB3cm90ZToKPiBIaSBTZXJndWVpLAo+Cj4gSSdtIGFsc28gd29ya2lu ZyBvbiB0aGUgYnJpbmdpbmcgdXAgb3VyIFZSIHJ1bnRpbWUgb24gdG9wIG9mIGFtZ3B1OyAKPiBz ZWUgcmVwbGllcyBpbmxpbmUuCj4KPiBPbiAxMi8xNi8yMDE2IDA5OjA1IFBNLCBTYWdhbG92aXRj aCwgU2VyZ3VlaSB3cm90ZToKPj4gQW5kcmVzLAo+Pgo+Pj4gIEZvciBjdXJyZW50IFZSIHdvcmts b2FkcyB3ZSBoYXZlIDMgc2VwYXJhdGUgcHJvY2Vzc2VzIHJ1bm5pbmcgCj4+PiBhY3R1YWxseToK Pj4gU28gd2UgY291bGQgaGF2ZSBwb3RlbnRpYWwgbWVtb3J5IG92ZXJjb21taXQgY2FzZSBvciBk byB5b3UgZG8gCj4+IHBhcnRpdGlvbmluZwo+PiBvbiB5b3VyIG93bj8gIEkgd291bGQgdGhpbmsg dGhhdCB0aGVyZSBpcyBuZWVkIHRvIGF2b2lkIG92ZXJjb21pdCBpbiAKPj4gVlIgY2FzZSB0bwo+ PiBwcmV2ZW50IGFueSBCTyBtaWdyYXRpb24uCj4KPiBZb3UncmUgZW50aXJlbHkgY29ycmVjdDsg Y3VycmVudGx5IHRoZSBWUiBydW50aW1lIGlzIHNldHRpbmcgdXAgCj4gcHJpb3JpdGl6ZWQgQ1BV IHNjaGVkdWxpbmcgZm9yIGl0cyBWUiBjb21wb3NpdG9yLCB3ZSdyZSB3b3JraW5nIG9uIAo+IHBy aW9yaXRpemVkIEdQVSBzY2hlZHVsaW5nIGFuZCBwcmUtZW1wdGlvbiAoZWcuIHRoaXMgdGhyZWFk KSwgYW5kIGluIAo+IHRoZSBmdXR1cmUgaXQgd2lsbCBtYWtlIHNlbnNlIHRvIGRvIHdvcmsgaW4g b3JkZXIgdG8gbWFrZSBzdXJlIHRoYXQgCj4gaXRzIG1lbW9yeSBhbGxvY2F0aW9ucyBkbyBub3Qg Z2V0IGV2aWN0ZWQsIHRvIHByZXZlbnQgYW55IHVud2VsY29tZSAKPiBhZGRpdGlvbmFsIGxhdGVu Y3kgaW4gdGhlIGV2ZW50IG9mIG5lZWRpbmcgdG8gcGVyZm9ybSBqdXN0LWluLXRpbWUgCj4gcmVw cm9qZWN0aW9uLgo+Cj4+IEJUVzogRG8geW91IG1lYW4gX19yZWFsX18gcHJvY2Vzc2VzIG9yIHRo cmVhZHM/Cj4+IEJhc2VkIG9uIG15IHVuZGVyc3RhbmRpbmcgc2hhcmluZyBCT3MgYmV0d2VlbiBk aWZmZXJlbnQgcHJvY2Vzc2VzCj4+IGNvdWxkIGludHJvZHVjZSBhZGRpdGlvbmFsIHN5bmNocm9u aXphdGlvbiBjb25zdHJhaW5zLiAgYnR3OiBJIGFtIG5vdCAKPj4gc3VyZQo+PiBpZiB3ZSBhcmUg YWJsZSB0byBzaGFyZSBWdWxrYW4gc3luYy4gb2JqZWN0IGNyb3NzLXByb2Nlc3MgYm91bmRhcnku Cj4KPiBUaGV5IGFyZSBkaWZmZXJlbnQgcHJvY2Vzc2VzOyBpdCBpcyBpbXBvcnRhbnQgZm9yIHRo ZSBjb21wb3NpdG9yIHRoYXQgCj4gaXMgcmVzcG9uc2libGUgZm9yIHF1YWxpdHktb2Ytc2Vydmlj ZSBmZWF0dXJlcyBzdWNoIGFzIGNvbnNpc3RlbnRseSAKPiBwcmVzZW50aW5nIGRpc3RvcnRlZCBm cmFtZXMgd2l0aCB0aGUgcmlnaHQgbGF0ZW5jeSwgcmVwcm9qZWN0aW9uLCBldGMsIAo+IHRvIGJl IHNlcGFyYXRlIGZyb20gdGhlIG1haW4gYXBwbGljYXRpb24uCj4KPiBDdXJyZW50bHkgd2UgYXJl IHVzaW5nIHVucmVsZWFzZWQgY3Jvc3MtcHJvY2VzcyBtZW1vcnkgYW5kIHNlbWFwaG9yZSAKPiBl eHRlbnNpb25zIHRvIGZldGNoIHVwZGF0ZWQgZXllIGltYWdlcyBmcm9tIHRoZSBjbGllbnQgYXBw bGljYXRpb24sIAo+IGJ1dCB0aGUganVzdC1pbi10aW1lIHJlcHJvamVjdGlvbiBkaXNjdXNzZWQg aGVyZSBkb2VzIG5vdCBhY3R1YWxseSAKPiBoYXZlIGFueSBkaXJlY3QgaW50ZXJhY3Rpb25zIHdp dGggY3Jvc3MtcHJvY2VzcyByZXNvdXJjZSBzaGFyaW5nLCAKPiBzaW5jZSBpdCdzIGFjaGlldmVk IGJ5IHVzaW5nIHdoYXRldmVyIGlzIHRoZSBsYXRlc3QsIG1vc3QgdXAtdG8tZGF0ZSAKPiBleWUg aW1hZ2VzIHRoYXQgaGF2ZSBhbHJlYWR5IGJlZW4gc2VudCBieSB0aGUgY2xpZW50IGFwcGxpY2F0 aW9uLCAKPiB3aGljaCBhcmUgYWxyZWFkeSBhdmFpbGFibGUgdG8gdXNlIHdpdGhvdXQgYWRkaXRp b25hbCBzeW5jaHJvbml6YXRpb24uCj4KPj4KPj4+ICAgIDMpIFN5c3RlbSBjb21wb3NpdG9yICh3 ZSBhcmUgbG9va2luZyBhdCBhcHByb2FjaGVzIHRvIHJlbW92ZSB0aGlzIAo+Pj4gb3ZlcmhlYWQp Cj4+IFllcywgIElNSE8gdGhlIGJlc3QgaXMgdG8gcnVuIGluICAiZnVsbCBzY3JlZW4gbW9kZSIu Cj4KPiBZZXMsIHdlIGFyZSB3b3JraW5nIG9uIG1lY2hhbmlzbXMgdG8gcHJlc2VudCBkaXJlY3Rs eSB0byB0aGUgaGVhZHNldCAKPiBkaXNwbGF5IHdpdGhvdXQgYW55IGludGVybWVkaWFyaWVzIGFz IGEgc2VwYXJhdGUgZWZmb3J0Lgo+Cj4+Cj4+PiAgVGhlIGxhdGVuY3kgaXMgb3VyIG1haW4gY29u Y2VybiwKPj4gSSB3b3VsZCBhc3N1bWUgdGhhdCB0aGlzIGlzIHRoZSBrbm93biBwcm9ibGVtIChh dCBsZWFzdCBmb3IgY29tcHV0ZSAKPj4gdXNhZ2UpLgo+PiBJdCBsb29rcyBsaWtlIHRoYXQgYW1k Z3B1IC8ga2VybmVsIHN1Ym1pc3Npb24gaXMgcmF0aGVyIENQVSBpbnRlbnNpdmUgCj4+IChhdCBs ZWFzdAo+PiBpbiB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uKS4KPgo+IEFzIGxvbmcgYXMgaXQn cyBhIGNvbnNpc3RlbnQgY29zdCwgaXQgc2hvdWxkbid0IGFuIGlzc3VlLiBIb3dldmVyLCBpZiAK PiB0aGVyZSdzIGhpZ2ggZGVncmVlcyBvZiB2YXJpYW5jZSB0aGVuIHRoYXQgd291bGQgYmUgdHJv dWJsZXNvbWUgYW5kIHdlIAo+IHdvdWxkIG5lZWQgdG8gYWNjb3VudCBmb3IgdGhlIHdvcnN0IGNh c2UuCj4KPiBIb3BlZnVsbHkgdGhlIHJlcXVpcmVtZW50cyBhbmQgYXBwcm9hY2ggd2UgZGVzY3Jp YmVkIG1ha2Ugc2Vuc2UsIHdlJ3JlIAo+IGxvb2tpbmcgZm9yd2FyZCB0byB5b3VyIGZlZWRiYWNr IGFuZCBzdWdnZXN0aW9ucy4KPgo+IFRoYW5rcyEKPiAgLSBQaWVycmUtTG91cAo+Cj4+Cj4+IFNp bmNlcmVseSB5b3VycywKPj4gU2VyZ3VlaSBTYWdhbG92aXRjaAo+Pgo+Pgo+PiBGcm9tOiBBbmRy ZXMgUm9kcmlndWV6IDxhbmRyZXNyQHZhbHZlc29mdHdhcmUuY29tPgo+PiBTZW50OiBEZWNlbWJl ciAxNiwgMjAxNiAxMDowMCBQTQo+PiBUbzogU2FnYWxvdml0Y2gsIFNlcmd1ZWk7IGFtZC1nZnhA bGlzdHMuZnJlZWRlc2t0b3Aub3JnCj4+IFN1YmplY3Q6IFJFOiBbUkZDXSBNZWNoYW5pc20gZm9y IGhpZ2ggcHJpb3JpdHkgc2NoZWR1bGluZyBpbiBhbWRncHUKPj4KPj4gSGV5IFNlcmd1ZWksCj4+ Cj4+PiBbU2VyZ3VlaV0gTm8uIEkgbWVhbiBwaXBlIDotKSAgYXMgTUVDIGRlZmluZSBpdC4gIEFz IGZhciBhcyBJIAo+Pj4gdW5kZXJzdGFuZCAoYnkgc2ltcGxpZnlpbmcpCj4+PiBzb21lIHNjaGVk dWxpbmcgaXMgcGVyIHBpcGUuICBJIGtub3cgYWJvdXQgdGhlIGN1cnJlbnQgYWxsb2NhdGlvbiAK Pj4+IHNjaGVtZSBidXQgSSBkbyBub3QgdGhpbmsKPj4+IHRoYXQgaXQgaXMgIGlkZWFsLiAgSSB3 b3VsZCBhc3N1bWUgdGhhdCB3ZSBuZWVkICB0byBzd2l0Y2ggdG8gCj4+PiBkeW5hbWljYWwgcGFy dGl0aW9uCj4+PiBvZiByZXNvdXJjZXMgIGJhc2VkIG9uIHRoZSB3b3JrbG9hZCBvdGhlcndpc2Ug d2Ugd2lsbCBoYXZlIHJlc291cmNlIAo+Pj4gY29uZmxpY3QKPj4+IGJldHdlZW4gVnVsa2FuIGNv bXB1dGUgYW5kICBPcGVuQ0wuCj4+Cj4+IEkgYWdyZWUgdGhlIHBhcnRpdGlvbmluZyBpc24ndCBp ZGVhbC4gSSdtIGhvcGluZyB3ZSBjYW4gc3RhcnQgd2l0aCBhIAo+PiBzb2x1dGlvbiB0aGF0IGFz c3VtZXMgdGhhdAo+PiBvbmx5IHBpcGUwIGhhcyBhbnkgd29yayBhbmQgdGhlIG90aGVyIHBpcGVz IGFyZSBpZGxlIChubyBIU0EvUk9DbSAKPj4gcnVubmluZyBvbiB0aGUgc3lzdGVtKS4KPj4KPj4g VGhpcyBzaG91bGQgYmUgbW9yZSBvciBsZXNzIHRoZSB1c2UgY2FzZSB3ZSBleHBlY3QgZnJvbSBW UiB1c2Vycy4KPj4KPj4gSSBhZ3JlZSB0aGUgc3BsaXQgaXMgY3VycmVudGx5IG5vdCBpZGVhbCwg YnV0IEknZCBsaWtlIHRvIGNvbnNpZGVyIAo+PiB0aGF0IGEgc2VwYXJhdGUgdGFzaywgYmVjYXVz ZQo+PiBtYWtpbmcgaXQgZHluYW1pYyBpcyBub3Qgc3RyYWlnaHQgZm9yd2FyZCA6UAo+Pgo+Pj4g W1Nlcmd1ZWldIFZ1bGthbiB3b3JrcyB2aWEgYW1kZ3B1IChrZXJuZWwgc3VibWlzc2lvbnMpIHNv IGFtZGtmZCAKPj4+IHdpbGwgYmUgbm90Cj4+PiBpbnZvbHZlZC4gIEkgd291bGQgYXNzdW1lIHRo YXQgaW4gdGhlIGNhc2Ugb2YgVlIgd2Ugd2lsbCBoYXZlIG9uZSBtYWluCj4+PiBhcHBsaWNhdGlv biAoImNvbnNvbGUiIG1vZGUoPykpIHNvIHdlIGNvdWxkIHRlbXBvcmFsbHkgImlnbm9yZSIKPj4+ IE9wZW5DTC9ST0NtIG5lZWRzIHdoZW4gVlIgaXMgcnVubmluZy4KPj4KPj4gQ29ycmVjdCwgdGhp cyBpcyB3aHkgd2Ugd2FudCB0byBlbmFibGUgdGhlIGhpZ2ggcHJpb3JpdHkgY29tcHV0ZSAKPj4g cXVldWUgdGhyb3VnaAo+PiBsaWJkcm0tYW1kZ3B1LCBzbyB0aGF0IHdlIGNhbiBleHBvc2UgaXQg dGhyb3VnaCBWdWxrYW4gbGF0ZXIuCj4+Cj4+IEZvciBjdXJyZW50IFZSIHdvcmtsb2FkcyB3ZSBo YXZlIDMgc2VwYXJhdGUgcHJvY2Vzc2VzIHJ1bm5pbmcgYWN0dWFsbHk6Cj4+ICAgICAxKSBHYW1l IHByb2Nlc3MKPj4gICAgIDIpIFZSIENvbXBvc2l0b3IgKHRoaXMgaXMgdGhlIHByb2Nlc3MgdGhh dCB3aWxsIHJlcXVpcmUgaGlnaCAKPj4gcHJpb3JpdHkgcXVldWUpCj4+ICAgICAzKSBTeXN0ZW0g Y29tcG9zaXRvciAod2UgYXJlIGxvb2tpbmcgYXQgYXBwcm9hY2hlcyB0byByZW1vdmUgdGhpcyAK Pj4gb3ZlcmhlYWQpCj4+Cj4+IEZvciBub3cgSSB0aGluayBpdCBpcyBva2F5IHRvIGFzc3VtZSBu byBPcGVuQ0wvUk9DbSBydW5uaW5nIAo+PiBzaW11bHRhbmVvdXNseSwgYnV0Cj4+IEkgd291bGQg YWxzbyBsaWtlIHRvIGJlIGFibGUgdG8gYWRkcmVzcyB0aGlzIGNhc2UgaW4gdGhlIGZ1dHVyZSAK Pj4gKGNyb3NzLXBpcGUgcHJpb3JpdGllcykuCj4+Cj4+PiBbU2VyZ3VlaV0gIFRoZSBwcm9ibGVt IHdpdGggcHJlLWVtcHRpb24gb2YgZ3JhcGhpY3MgdGFzazogIChhKSBpdCAKPj4+IG1heSB0YWtl IHRpbWUgc28KPj4+IGxhdGVuY3kgbWF5IHN1ZmZlcgo+Pgo+PiBUaGUgbGF0ZW5jeSBpcyBvdXIg bWFpbiBjb25jZXJuLCB3ZSB3YW50IHNvbWV0aGluZyB0aGF0IGlzIAo+PiBwcmVkaWN0YWJsZS4g QSBnb29kCj4+IGlsbHVzdHJhdGlvbiBvZiB3aGF0IHRoZSByZXByb2plY3Rpb24gc2NoZWR1bGlu ZyBsb29rcyBsaWtlIGNhbiBiZSAKPj4gZm91bmQgaGVyZToKPj4gaHR0cHM6Ly9jb21tdW5pdHku YW1kLmNvbS9zZXJ2bGV0L0ppdmVTZXJ2bGV0L3Nob3dJbWFnZS8zOC0xMzEwLTEwNDc1NC9wYXN0 ZWRJbWFnZV8zLnBuZyAKPj4KPj4KPj4+IChiKSB0byBwcmVlbXB0IHdlIG5lZWQgdG8gaGF2ZSBk aWZmZXJlbnQgImNvbnRleHQiIC0gd2Ugd2FudAo+Pj4gdG8gZ3VhcmFudGVlIHRoYXQgc3VibWlz c2lvbnMgZnJvbSB0aGUgc2FtZSBjb250ZXh0IHdpbGwgYmUgZXhlY3V0ZWQgCj4+PiBpbiBvcmRl ci4KPj4KPj4gVGhpcyBpcyBva2F5LCBhcyB0aGUgcmVwcm9qZWN0aW9uIHdvcmsgZG9lc24ndCBo YXZlIGRlcGVuZGVuY2llcyBvbiAKPj4gdGhlIGdhbWUgY29udGV4dCwgYW5kIGl0Cj4+IGV2ZW4g aGFwcGVucyBpbiBhIHNlcGFyYXRlIHByb2Nlc3MuCj4+Cj4+PiBCVFc6IChhKSBEbyB5b3Ugd2Fu dCAgInByZWVtcHQiIGFuZCBsYXRlciByZXN1bWUgb3IgZG8geW91IHdhbnQgCj4+PiAicHJlZW1w dCIgYW5kCj4+PiAiY2FuY2VsL2Fib3J0Igo+Pgo+PiBQcmVlbXB0IHRoZSBnYW1lIHdpdGggdGhl IGNvbXBvc2l0b3IgdGFzayBhbmQgdGhlbiByZXN1bWUgaXQuCj4+Cj4+PiAoYikgVnVsa2FuIGlz IGdlbmVyaWMgQVBJIGFuZCBjb3VsZCBiZSB1c2VkIGZvciBncmFwaGljcyBhcyB3ZWxsIGFzCj4+ PiBmb3IgcGxhaW4gY29tcHV0ZSB0YXNrcyAoVktfUVVFVUVfQ09NUFVURV9CSVQpLgo+Pgo+PiBZ ZWFoLCB0aGUgcGxhbiBpcyB0byB1c2UgdnVsa2FuIGNvbXB1dGUuIEJ1dCBpZiB5b3UgZmlndXJl IG91dCBhIHdheSAKPj4gZm9yIHVzIHRvIGdldAo+PiBhIGd1YXJhbnRlZWQgZXhlY3V0aW9uIHRp bWUgdXNpbmcgdnVsa2FuIGdyYXBoaWNzLCB0aGVuIEknbGwgdGFrZSB5b3UgCj4+IG91dCBmb3Ig YSBiZWVyIDopCj4+Cj4+IFJlZ2FyZHMsCj4+IEFuZHJlcwo+PiBfX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fCj4+IEZyb206IFNhZ2Fsb3ZpdGNoLCBTZXJndWVpIFtTZXJn dWVpLlNhZ2Fsb3ZpdGNoQGFtZC5jb21dCj4+IFNlbnQ6IEZyaWRheSwgRGVjZW1iZXIgMTYsIDIw MTYgOToxMyBQTQo+PiBUbzogQW5kcmVzIFJvZHJpZ3VlejsgYW1kLWdmeEBsaXN0cy5mcmVlZGVz a3RvcC5vcmcKPj4gU3ViamVjdDogUmU6IFtSRkNdIE1lY2hhbmlzbSBmb3IgaGlnaCBwcmlvcml0 eSBzY2hlZHVsaW5nIGluIGFtZGdwdQo+Pgo+PiBIaSBBbmRyZXMsCj4+Cj4+IFBsZWFzZSBzZWUg aW5saW5lIChhcyBbU2VyZ3VlaV0pCj4+Cj4+IFNpbmNlcmVseSB5b3VycywKPj4gU2VyZ3VlaSBT YWdhbG92aXRjaAo+Pgo+Pgo+PiBGcm9tOiBBbmRyZXMgUm9kcmlndWV6IDxhbmRyZXNyQHZhbHZl c29mdHdhcmUuY29tPgo+PiBTZW50OiBEZWNlbWJlciAxNiwgMjAxNiA4OjI5IFBNCj4+IFRvOiBT YWdhbG92aXRjaCwgU2VyZ3VlaTsgYW1kLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKPj4gU3Vi amVjdDogUkU6IFtSRkNdIE1lY2hhbmlzbSBmb3IgaGlnaCBwcmlvcml0eSBzY2hlZHVsaW5nIGlu IGFtZGdwdQo+Pgo+PiBIaSBTZXJndWVpLAo+Pgo+PiBUaGFua3MgZm9yIHRoZSBmZWVkYmFjay4g QW5zd2VycyBpbmxpbmUgYXMgW0FSXS4KPj4KPj4gUmVnYXJkcywKPj4gQW5kcmVzCj4+Cj4+IF9f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KPj4gRnJvbTogU2FnYWxvdml0 Y2gsIFNlcmd1ZWkgW1Nlcmd1ZWkuU2FnYWxvdml0Y2hAYW1kLmNvbV0KPj4gU2VudDogRnJpZGF5 LCBEZWNlbWJlciAxNiwgMjAxNiA4OjE1IFBNCj4+IFRvOiBBbmRyZXMgUm9kcmlndWV6OyBhbWQt Z2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwo+PiBTdWJqZWN0OiBSZTogW1JGQ10gTWVjaGFuaXNt IGZvciBoaWdoIHByaW9yaXR5IHNjaGVkdWxpbmcgaW4gYW1kZ3B1Cj4+Cj4+IEFuZHJlcywKPj4K Pj4KPj4gUXVpY2sgY29tbWVudHM6Cj4+Cj4+IDEpIFRvIG1pbmltaXplICJidWJibGVzIiwgZXRj LiB3ZSBuZWVkIHRvICJmb3JjZSIgQ1UgYXNzaWdubWVudHMvYmluZGluZwo+PiB0byBoaWdoLXBy aW9yaXR5IHF1ZXVlICB3aGVuIGl0IHdpbGwgYmUgaW4gdXNlIGFuZCAiZnJlZSIgdGhlbSBsYXRl cgo+PiAod2UgIGRvIG5vdCB3YW50IGZvcmV2ZXIgdGFrZSBDVXMgZnJvbSBlLmcuIGdyYXBoaWMg dGFzayB0byBkZWdyYWRlIAo+PiBncmFwaGljcwo+PiBwZXJmb3JtYW5jZSkuCj4+Cj4+IE90aGVy d2lzZSB3ZSBjb3VsZCBoYXZlIHNjZW5hcmlvIHdoZW4gbG9uZyBncmFwaGljcyB0YXNrIChvciAK Pj4gbG93LXByaW9yaXR5Cj4+IGNvbXB1dGUpIHdpbGwgdG9vayBhbGwgKGV4dHJhKSBDVXMgYW5k IGhpZ2gtLXByaW9yaXR5IHdpbGwgd2FpdCBmb3IgCj4+IG5lZWRlZCByZXNvdXJjZXMuCj4+IEl0 IHdpbGwgbm90IGJlIHZpc2libGUgb24gIk5PUCAiIGJ1dCBvbmx5IHdoZW4geW91IHN1Ym1pdCAi cmVhbCIgCj4+IGNvbXB1dGUgdGFzawo+PiBzbyBJIHdvdWxkIHJlY29tbWVuZCAgbm90IHRvIHVz ZSAiTk9QIiBwYWNrZXRzIGF0IGFsbCBmb3IgdGVzdGluZy4KPj4KPj4gSXQgKENVIGFzc2lnbm1l bnQpIGNvdWxkIGJlIHJlbGF0aXZlbHkgZWFzeSBkb25lIHdoZW4gZXZlcnl0aGluZyBpcyAKPj4g Z29pbmcgdmlhIGtlcm5lbAo+PiAoZS5nLiBhcyBwYXJ0IG9mIGZyYW1lIHN1Ym1pc3Npb24pIGJ1 dCBJIG11c3QgYWRtaXQgdGhhdCBJIGFtIG5vdCBzdXJlCj4+IGFib3V0IHRoZSBiZXN0IHdheSBm b3IgdXNlciBsZXZlbCBzdWJtaXNzaW9ucyAoYW1ka2ZkKS4KPj4KPj4gW0FSXSBJIHdhc24ndCBh d2FyZSBvZiB0aGlzIHBhcnQgb2YgdGhlIHByb2dyYW1taW5nIHNlcXVlbmNlLiBUaGFua3MgCj4+ IGZvciB0aGUgaGVhZHMgdXAhCj4+IElzIHRoaXMgc2ltaWxhciB0byB0aGUgQ1UgbWFza2luZyBw cm9ncmFtbWluZz8KPj4gW1Nlcmd1ZWldIFllcy4gVG8gc2ltcGxpZnk6IHRoZSBwcm9ibGVtIGlz IHRoYXQgInNjaGVkdWxlciIgd2hlbiAKPj4gZGVjaWRpbmcgd2hpY2gKPj4gcXVldWUgdG8gIHJ1 biB3aWxsIGNoZWNrIGlmIHRoZXJlIGlzIGVub3VnaCByZXNvdXJjZXMgYW5kIGlmIG5vdCB0aGVu IAo+PiBpdCB3aWxsIGJlZ2luCj4+IHRvIGNoZWNrIG90aGVyIHF1ZXVlcyB3aXRoIGxvd2VyIHBy aW9yaXR5Lgo+Pgo+PiAyKSBJIHdvdWxkIHJlY29tbWVuZCB0byBkZWRpY2F0ZSB0aGUgd2hvbGUg cGlwZSB0byBoaWdoLXByaW9yaXR5IAo+PiBxdWV1ZSBhbmQgaGF2ZQo+PiBub3RoaW5nIHRoZWly IGV4Y2VwdCBpdC4KPj4KPj4gW0FSXSBJJ20gZ3Vlc3NpbmcgaW4gdGhpcyBjb250ZXh0IHlvdSBt ZWFuIHBpcGUgPSBxdWV1ZT8gKGFzIG9wcG9zZWQgCj4+IHRvIHRoZSBNRUMgZGVmaW5pdGlvbgo+ PiBvZiBwaXBlLCB3aGljaCBpcyBhIGdyb3VwaW5nIG9mIHF1ZXVlcykuIEkgc2F5IHRoaXMgYmVj YXVzZSBhbWRncHUgCj4+IG9ubHkgaGFzIGFjY2VzcyB0byAxIHBpcGUsCj4+IGFuZCB0aGUgcmVz dCBhcmUgc3RhdGljYWxseSBwYXJ0aXRpb25lZCBmb3IgYW1ka2ZkIHVzYWdlLgo+Pgo+PiBbU2Vy Z3VlaV0gTm8uIEkgbWVhbiBwaXBlIDotKSAgYXMgTUVDIGRlZmluZSBpdC4gIEFzIGZhciBhcyBJ IAo+PiB1bmRlcnN0YW5kIChieSBzaW1wbGlmeWluZykKPj4gc29tZSBzY2hlZHVsaW5nIGlzIHBl ciBwaXBlLiAgSSBrbm93IGFib3V0IHRoZSBjdXJyZW50IGFsbG9jYXRpb24gCj4+IHNjaGVtZSBi dXQgSSBkbyBub3QgdGhpbmsKPj4gdGhhdCBpdCBpcyAgaWRlYWwuICBJIHdvdWxkIGFzc3VtZSB0 aGF0IHdlIG5lZWQgIHRvIHN3aXRjaCB0byAKPj4gZHluYW1pY2FsIHBhcnRpdGlvbgo+PiBvZiBy ZXNvdXJjZXMgIGJhc2VkIG9uIHRoZSB3b3JrbG9hZCBvdGhlcndpc2Ugd2Ugd2lsbCBoYXZlIHJl c291cmNlIAo+PiBjb25mbGljdAo+PiBiZXR3ZWVuIFZ1bGthbiBjb21wdXRlIGFuZCAgT3BlbkNM Lgo+Pgo+Pgo+PiBCVFc6IFdoaWNoIHVzZXIgbGV2ZWwgQVBJIGRvIHlvdSB3YW50IHRvIHVzZSBm b3IgY29tcHV0ZTogVnVsa2FuIG9yIAo+PiBPcGVuQ0w/Cj4+Cj4+IFtBUl0gVnVsa2FuCj4+Cj4+ IFtTZXJndWVpXSBWdWxrYW4gd29ya3MgdmlhIGFtZGdwdSAoa2VybmVsIHN1Ym1pc3Npb25zKSBz byBhbWRrZmQgd2lsbCAKPj4gYmUgbm90Cj4+IGludm9sdmVkLiAgSSB3b3VsZCBhc3N1bWUgdGhh dCBpbiB0aGUgY2FzZSBvZiBWUiB3ZSB3aWxsIGhhdmUgb25lIG1haW4KPj4gYXBwbGljYXRpb24g KCJjb25zb2xlIiBtb2RlKD8pKSBzbyB3ZSBjb3VsZCB0ZW1wb3JhbGx5ICJpZ25vcmUiCj4+IE9w ZW5DTC9ST0NtIG5lZWRzIHdoZW4gVlIgaXMgcnVubmluZy4KPj4KPj4+ICB3ZSB3aWxsIG5vdCBi ZSBhYmxlIHRvIHByb3ZpZGUgYSBzb2x1dGlvbiBjb21wYXRpYmxlIHdpdGggR0ZYIAo+Pj4gd29y bG9hZHMuCj4+IEkgYXNzdW1lIHRoYXQgeW91IGFyZSB0YWxraW5nIGFib3V0IGdyYXBoaWNzPyBB bSBJIHJpZ2h0Pwo+Pgo+PiBbQVJdIFllYWgsIG15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCBwcmUt ZW1wdGluZyB0aGUgY3VycmVudGx5IHJ1bm5pbmcgCj4+IGdyYXBoaWNzIGpvYiBhbmQgc2NoZWR1 bGluZyBpbgo+PiBzb21ldGhpbmcgZWxzZSB1c2luZyBtaWQtYnVmZmVyIHByZS1lbXB0aW9uIGhh cyBzb21lIGNhc2VzIHdoZXJlIGl0IAo+PiBkb2Vzbid0IHdvcmsgd2VsbC4gQnV0IGlmIHdpdGgK Pj4gcG9sYXJpczEwIGl0IHN0YXJ0cyB3b3JraW5nIHdlbGwsIGl0IG1pZ2h0IGJlIGEgYmV0dGVy IHNvbHV0aW9uIGZvciAKPj4gdXMgKGJlY2F1c2UgdGhlIHdob2xlIHJlcHJvamVjdGlvbgo+PiB3 b3JrIHVzZXMgdGhlIHZ1bGthbiBncmFwaGljcyBzdGFjayBhdCB0aGUgbW9tZW50LCBhbmQgcG9y dGluZyBpdCB0byAKPj4gY29tcHV0ZSBpcyBub3QgdHJpdmlhbCkuCj4+Cj4+IFtTZXJndWVpXSAg VGhlIHByb2JsZW0gd2l0aCBwcmUtZW1wdGlvbiBvZiBncmFwaGljcyB0YXNrOiAgKGEpIGl0IG1h eSAKPj4gdGFrZSB0aW1lIHNvCj4+IGxhdGVuY3kgbWF5IHN1ZmZlciAoYikgdG8gcHJlZW1wdCB3 ZSBuZWVkIHRvIGhhdmUgZGlmZmVyZW50ICJjb250ZXh0IiAKPj4gLSB3ZSB3YW50Cj4+IHRvIGd1 YXJhbnRlZSB0aGF0IHN1Ym1pc3Npb25zIGZyb20gdGhlIHNhbWUgY29udGV4dCB3aWxsIGJlIGV4 ZWN1dGVkIAo+PiBpbiBvcmRlci4KPj4gQlRXOiAoYSkgRG8geW91IHdhbnQgICJwcmVlbXB0IiBh bmQgbGF0ZXIgcmVzdW1lIG9yIGRvIHlvdSB3YW50IAo+PiAicHJlZW1wdCIgYW5kCj4+ICJjYW5j ZWwvYWJvcnQiPyAgKGIpIFZ1bGthbiBpcyBnZW5lcmljIEFQSSBhbmQgY291bGQgYmUgdXNlZAo+ PiBmb3IgZ3JhcGhpY3MgYXMgd2VsbCBhcyBmb3IgcGxhaW4gY29tcHV0ZSB0YXNrcyAoVktfUVVF VUVfQ09NUFVURV9CSVQpLgo+Pgo+Pgo+PiBTaW5jZXJlbHkgeW91cnMsCj4+IFNlcmd1ZWkgU2Fn YWxvdml0Y2gKPj4KPj4KPj4KPj4gRnJvbTogYW1kLWdmeCA8YW1kLWdmeC1ib3VuY2VzQGxpc3Rz LmZyZWVkZXNrdG9wLm9yZz4gb24gYmVoYWxmIG9mIAo+PiBBbmRyZXMgUm9kcmlndWV6IDxhbmRy ZXNyQHZhbHZlc29mdHdhcmUuY29tPgo+PiBTZW50OiBEZWNlbWJlciAxNiwgMjAxNiA2OjE1IFBN Cj4+IFRvOiBhbWQtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwo+PiBTdWJqZWN0OiBbUkZDXSBN ZWNoYW5pc20gZm9yIGhpZ2ggcHJpb3JpdHkgc2NoZWR1bGluZyBpbiBhbWRncHUKPj4KPj4gSGkg RXZlcnlvbmUsCj4+Cj4+IFRoaXMgUkZDIGlzIGFsc28gYXZhaWxhYmxlIGFzIGEgZ2lzdCBoZXJl Ogo+PiBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9sb3N0Z29hdC83MDAwNDMyY2Q2ODY0MjY1ZGJj MmMzYWI5MzIwNDI0OQo+Pgo+Pgo+Pgo+PiBbUkZDXSBNZWNoYW5pc20gZm9yIGhpZ2ggcHJpb3Jp dHkgc2NoZWR1bGluZyBpbiBhbWRncHUKPj4gZ2lzdC5naXRodWIuY29tCj4+IFtSRkNdIE1lY2hh bmlzbSBmb3IgaGlnaCBwcmlvcml0eSBzY2hlZHVsaW5nIGluIGFtZGdwdQo+Pgo+Pgo+Pgo+PiBb UkZDXSBNZWNoYW5pc20gZm9yIGhpZ2ggcHJpb3JpdHkgc2NoZWR1bGluZyBpbiBhbWRncHUKPj4g Z2lzdC5naXRodWIuY29tCj4+IFtSRkNdIE1lY2hhbmlzbSBmb3IgaGlnaCBwcmlvcml0eSBzY2hl ZHVsaW5nIGluIGFtZGdwdQo+Pgo+Pgo+Pgo+Pgo+PiBbUkZDXSBNZWNoYW5pc20gZm9yIGhpZ2gg cHJpb3JpdHkgc2NoZWR1bGluZyBpbiBhbWRncHUKPj4gZ2lzdC5naXRodWIuY29tCj4+IFtSRkNd IE1lY2hhbmlzbSBmb3IgaGlnaCBwcmlvcml0eSBzY2hlZHVsaW5nIGluIGFtZGdwdQo+Pgo+Pgo+ PiBXZSBhcmUgaW50ZXJlc3RlZCBpbiBmZWVkYmFjayBmb3IgYSBtZWNoYW5pc20gdG8gZWZmZWN0 aXZlbHkgc2NoZWR1bGUgCj4+IGhpZ2gKPj4gcHJpb3JpdHkgVlIgcmVwcm9qZWN0aW9uIHRhc2tz IChhbHNvIHJlZmVycmVkIHRvIGFzIHRpbWUtd2FycGluZykgZm9yIAo+PiBQb2xhcmlzMTAKPj4g cnVubmluZyBvbiB0aGUgYW1kZ3B1IGtlcm5lbCBkcml2ZXIuCj4+Cj4+IEJyaWVmIGNvbnRleHQ6 Cj4+IC0tLS0tLS0tLS0tLS0tCj4+Cj4+IFRoZSBtYWluIG9iamVjdGl2ZSBvZiByZXByb2plY3Rp b24gaXMgdG8gYXZvaWQgbW90aW9uIHNpY2tuZXNzIGZvciBWUiAKPj4gdXNlcnMgaW4KPj4gc2Nl bmFyaW9zIHdoZXJlIHRoZSBnYW1lIG9yIGFwcGxpY2F0aW9uIHdvdWxkIGZhaWwgdG8gZmluaXNo IAo+PiByZW5kZXJpbmcgYSBuZXcKPj4gZnJhbWUgaW4gdGltZSBmb3IgdGhlIG5leHQgVkJMQU5L LiBXaGVuIHRoaXMgaGFwcGVucywgdGhlIHVzZXIncyBoZWFkIAo+PiBtb3ZlbWVudHMKPj4gYXJl IG5vdCByZWZsZWN0ZWQgb24gdGhlIEhlYWQgTW91bnRlZCBEaXNwbGF5IChITUQpIGZvciB0aGUg ZHVyYXRpb24gCj4+IG9mIGFuCj4+IGV4dHJhIGZyYW1lLiBUaGlzIGV4dGVuZGVkIG1pc21hdGNo IGJldHdlZW4gdGhlIGlubmVyIGVhciBhbmQgdGhlIAo+PiBleWVzIG1heQo+PiBjYXVzZSB0aGUg dXNlciB0byBleHBlcmllbmNlIG1vdGlvbiBzaWNrbmVzcy4KPj4KPj4gVGhlIFZSIGNvbXBvc2l0 b3IgZGVhbHMgd2l0aCB0aGlzIHByb2JsZW0gYnkgZmFicmljYXRpbmcgYSBuZXcgZnJhbWUgCj4+ IHVzaW5nIHRoZQo+PiB1c2VyJ3MgdXBkYXRlZCBoZWFkIHBvc2l0aW9uIGluIGNvbWJpbmF0aW9u IHdpdGggdGhlIHByZXZpb3VzIGZyYW1lcy4gCj4+IFRoaXMKPj4gYXZvaWRzIGEgcHJvbG9uZ2Vk IG1pc21hdGNoIGJldHdlZW4gdGhlIEhNRCBvdXRwdXQgYW5kIHRoZSBpbm5lciBlYXIuCj4+Cj4+ IEJlY2F1c2Ugb2YgdGhlIGFkdmVyc2UgZWZmZWN0cyBvbiB0aGUgdXNlciwgd2UgcmVxdWlyZSBo aWdoIAo+PiBjb25maWRlbmNlIHRoYXQgdGhlCj4+IHJlcHJvamVjdGlvbiB0YXNrIHdpbGwgY29t cGxldGUgYmVmb3JlIHRoZSBWQkxBTksgaW50ZXJ2YWwuIEV2ZW4gaWYgCj4+IHRoZSBHRlggcGlw ZQo+PiBpcyBjdXJyZW50bHkgZnVsbCBvZiB3b3JrIGZyb20gdGhlIGdhbWUvYXBwbGljYXRpb24g KHdoaWNoIGlzIG1vc3QgCj4+IGxpa2VseSB0aGUgY2FzZSkuCj4+Cj4+IEZvciBtb3JlIGRldGFp bHMgYW5kIGlsbHVzdHJhdGlvbnMsIHBsZWFzZSByZWZlciB0byB0aGUgZm9sbG93aW5nIAo+PiBk b2N1bWVudDoKPj4gaHR0cHM6Ly9jb21tdW5pdHkuYW1kLmNvbS9jb21tdW5pdHkvZ2FtaW5nL2Js b2cvMjAxNi8wMy8yOC9hc3luY2hyb25vdXMtc2hhZGVycy1ldm9sdmVkIAo+Pgo+Pgo+Pgo+PiBH YW1pbmc6IEFzeW5jaHJvbm91cyBTaGFkZXJzIEV2b2x2ZWQgfCBDb21tdW5pdHkKPj4gY29tbXVu aXR5LmFtZC5jb20KPj4gT25lIG9mIHRoZSBtb3N0IGV4Y2l0aW5nIG5ldyBkZXZlbG9wbWVudHMg aW4gR1BVIHRlY2hub2xvZ3kgb3ZlciB0aGUgCj4+IHBhc3QgeWVhciBoYXMgYmVlbiB0aGUgYWRv cHRpb24gb2YgYXN5bmNocm9ub3VzIHNoYWRlcnMsIHdoaWNoIGNhbiAKPj4gbWFrZSBtb3JlIGVm ZmljaWVudCB1c2Ugb2YgLi4uCj4+Cj4+Cj4+Cj4+IEdhbWluZzogQXN5bmNocm9ub3VzIFNoYWRl cnMgRXZvbHZlZCB8IENvbW11bml0eQo+PiBjb21tdW5pdHkuYW1kLmNvbQo+PiBPbmUgb2YgdGhl IG1vc3QgZXhjaXRpbmcgbmV3IGRldmVsb3BtZW50cyBpbiBHUFUgdGVjaG5vbG9neSBvdmVyIHRo ZSAKPj4gcGFzdCB5ZWFyIGhhcyBiZWVuIHRoZSBhZG9wdGlvbiBvZiBhc3luY2hyb25vdXMgc2hh ZGVycywgd2hpY2ggY2FuIAo+PiBtYWtlIG1vcmUgZWZmaWNpZW50IHVzZSBvZiAuLi4KPj4KPj4K Pj4KPj4gR2FtaW5nOiBBc3luY2hyb25vdXMgU2hhZGVycyBFdm9sdmVkIHwgQ29tbXVuaXR5Cj4+ IGNvbW11bml0eS5hbWQuY29tCj4+IE9uZSBvZiB0aGUgbW9zdCBleGNpdGluZyBuZXcgZGV2ZWxv cG1lbnRzIGluIEdQVSB0ZWNobm9sb2d5IG92ZXIgdGhlIAo+PiBwYXN0IHllYXIgaGFzIGJlZW4g dGhlIGFkb3B0aW9uIG9mIGFzeW5jaHJvbm91cyBzaGFkZXJzLCB3aGljaCBjYW4gCj4+IG1ha2Ug bW9yZSBlZmZpY2llbnQgdXNlIG9mIC4uLgo+Pgo+Pgo+PiBSZXF1aXJlbWVudHM6Cj4+IC0tLS0t LS0tLS0tLS0KPj4KPj4gVGhlIG1lY2hhbmlzbSBtdXN0IGV4cG9zZSB0aGUgZm9sbG93aW5nIGZ1 bmN0aW9uYWlsaXR5Ogo+Pgo+PiAgICAgKiBKb2Igcm91bmQgdHJpcCB0aW1lIG11c3QgYmUgcHJl ZGljdGFibGUsIGZyb20gc3VibWlzc2lvbiB0byAKPj4gZmVuY2Ugc2lnbmFsCj4+Cj4+ICAgICAq IFRoZSBtZWNoYW5pc20gbXVzdCBzdXBwb3J0IGNvbXB1dGUgd29ya2xvYWRzLgo+Pgo+PiBHb2Fs czoKPj4gLS0tLS0tCj4+Cj4+ICAgICAqIFRoZSBtZWNoYW5pc20gc2hvdWxkIHByb3ZpZGUgbG93 IHN1Ym1pc3Npb24gbGF0ZW5jaWVzCj4+Cj4+IFRlc3Q6IHN1Ym1pdHRpbmcgYSBOT1AgcGFja2V0 IHRocm91Z2ggdGhlIG1lY2hhbmlzbSBvbiBidXN5IGhhcmR3YXJlIAo+PiBzaG91bGQKPj4gYmUg ZXF1aXZhbGVudCB0byBzdWJtaXR0aW5nIGEgTk9QIG9uIGlkbGUgaGFyZHdhcmUuCj4+Cj4+IE5p Y2UgdG8gaGF2ZToKPj4gLS0tLS0tLS0tLS0tLQo+Pgo+PiAgICAgKiBUaGUgbWVjaGFuaXNtIHNo b3VsZCBhbHNvIHN1cHBvcnQgR0ZYIHdvcmtsb2Fkcy4KPj4KPj4gTXkgdW5kZXJzdGFuZGluZyBp cyB0aGF0IHdpdGggdGhlIGN1cnJlbnQgaGFyZHdhcmUgY2FwYWJpbGl0aWVzIGluIAo+PiBQb2xh cmlzMTAgd2UKPj4gd2lsbCBub3QgYmUgYWJsZSB0byBwcm92aWRlIGEgc29sdXRpb24gY29tcGF0 aWJsZSB3aXRoIEdGWCB3b3Jsb2Fkcy4KPj4KPj4gQnV0IEkgd291bGQgbG92ZSB0byBoZWFyIG90 aGVyd2lzZS4gU28gaWYgYW55b25lIGhhcyBhbiBpZGVhLCAKPj4gYXBwcm9hY2ggb3IKPj4gc3Vn Z2VzdGlvbiB0aGF0IHdpbGwgYWxzbyBiZSBjb21wYXRpYmxlIHdpdGggdGhlIEdGWCByaW5nLCBw bGVhc2UgbGV0IAo+PiB1cyBrbm93Cj4+IGFib3V0IGl0Lgo+Pgo+PiAgICAgKiBUaGUgYWJvdmUg Z3VhcmFudGVlcyBzaG91bGQgYWxzbyBiZSByZXNwZWN0ZWQgYnkgYW1ka2ZkIHdvcmtsb2Fkcwo+ Pgo+PiBXb3VsZCBiZSBnb29kIHRvIGhhdmUgZm9yIGNvbnNpc3RlbmN5LCBidXQgbm90IHN0cmlj dGx5IG5lY2Vzc2FyeSBhcyAKPj4gdXNlcnMgcnVubmluZwo+PiBnYW1lcyBhcmUgbm90IHRyYWRp dGlvbmFsbHkgcnVubmluZyBIUEMgd29ya2xvYWRzIGluIHRoZSBiYWNrZ3JvdW5kLgo+Pgo+PiBQ cm9wb3NlZCBhcHByb2FjaDoKPj4gLS0tLS0tLS0tLS0tLS0tLS0tCj4+Cj4+IFNpbWlsYXIgdG8g dGhlIHdpbmRvd3MgZHJpdmVyLCB3ZSBjb3VsZCBleHBvc2UgYSBoaWdoIHByaW9yaXR5IAo+PiBj b21wdXRlIHF1ZXVlIHRvCj4+IHVzZXJzcGFjZS4KPj4KPj4gU3VibWlzc2lvbnMgdG8gdGhpcyBj b21wdXRlIHF1ZXVlIHdpbGwgYmUgc2NoZWR1bGVkIHdpdGggaGlnaCAKPj4gcHJpb3JpdHksIGFu ZCBtYXkKPj4gYWNxdWlyZSBoYXJkd2FyZSByZXNvdXJjZXMgcHJldmlvdXNseSBpbiB1c2UgYnkg b3RoZXIgcXVldWVzLgo+Pgo+PiBUaGlzIGNhbiBiZSBhY2hpZXZlZCBieSB0YWtpbmcgYWR2YW50 YWdlIG9mIHRoZSAncHJpb3JpdHknIGZpZWxkIGluIAo+PiB0aGUgSFFEcwo+PiBhbmQgY291bGQg YmUgcHJvZ3JhbW1lZCBieSBhbWRncHUgb3IgdGhlIGFtZGdwdSBzY2hlZHVsZXIuIFRoZSByZWxl dmFudAo+PiByZWdpc3RlciBmaWVsZHMgYXJlOgo+PiAgICAgICAgICogbW1DUF9IUURfUElQRV9Q UklPUklUWQo+PiAgICAgICAgICogbW1DUF9IUURfUVVFVUVfUFJJT1JJVFkKPj4KPj4gSW1wbGVt ZW50YXRpb24gYXBwcm9hY2ggMSAtIHN0YXRpYyBwYXJ0aXRpb25pbmc6Cj4+IC0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQo+Pgo+PiBUaGUgYW1kZ3B1IGRy aXZlciBjdXJyZW50bHkgY29udHJvbHMgOCBjb21wdXRlIHF1ZXVlcyBmcm9tIHBpcGUwLiBXZSBj YW4KPj4gc3RhdGljYWxseSBwYXJ0aXRpb24gdGhlc2UgYXMgZm9sbG93czoKPj4gICAgICAgICAq IDd4IHJlZ3VsYXIKPj4gICAgICAgICAqIDF4IGhpZ2ggcHJpb3JpdHkKPj4KPj4gVGhlIHJlbGV2 YW50IHByaW9yaXRpZXMgY2FuIGJlIHNldCBzbyB0aGF0IHN1Ym1pc3Npb25zIHRvIHRoZSBoaWdo IAo+PiBwcmlvcml0eQo+PiByaW5nIHdpbGwgc3RhcnZlIHRoZSBvdGhlciBjb21wdXRlIHJpbmdz IGFuZCB0aGUgR0ZYIHJpbmcuCj4+Cj4+IFRoZSBhbWRncHUgc2NoZWR1bGVyIHdpbGwgb25seSBw bGFjZSBqb2JzIGludG8gdGhlIGhpZ2ggcHJpb3JpdHkgCj4+IHJpbmdzIGlmIHRoZQo+PiBjb250 ZXh0IGlzIG1hcmtlZCBhcyBoaWdoIHByaW9yaXR5LiBBbmQgYSBjb3JyZXNwb25kaW5nIHByaW9y aXR5IAo+PiBzaG91bGQgYmUKPj4gYWRkZWQgdG8ga2VlcCB0cmFjayBvZiB0aGlzIGluZm9ybWF0 aW9uOgo+PiAgICAgICogQU1EX1NDSEVEX1BSSU9SSVRZX0tFUk5FTAo+PiAgICAgICogLT4gQU1E X1NDSEVEX1BSSU9SSVRZX0hJR0gKPj4gICAgICAqIEFNRF9TQ0hFRF9QUklPUklUWV9OT1JNQUwK Pj4KPj4gVGhlIHVzZXIgd2lsbCByZXF1ZXN0IGEgaGlnaCBwcmlvcml0eSBjb250ZXh0IGJ5IHNl dHRpbmcgYW4gCj4+IGFwcHJvcHJpYXRlIGZsYWcKPj4gaW4gZHJtX2FtZGdwdV9jdHhfaW4gKEFN REdQVV9DVFhfSElHSF9QUklPUklUWSBvciBzaW1pbGFyKToKPj4gaHR0cHM6Ly9naXRodWIuY29t L3RvcnZhbGRzL2xpbnV4L2Jsb2IvbWFzdGVyL2luY2x1ZGUvdWFwaS9kcm0vYW1kZ3B1X2RybS5o I0wxNjMgCj4+Cj4+Cj4+IFRoZSBzZXR0aW5nIGlzIGluIGEgcGVyIGNvbnRleHQgbGV2ZWwgc28g dGhhdCB3ZSBjYW46Cj4+ICAgICAqIE1haW50YWluIGEgY29uc2lzdGVudCBGSUZPIG9yZGVyaW5n IG9mIGFsbCBzdWJtaXNzaW9ucyB0byBhIAo+PiBjb250ZXh0Cj4+ICAgICAqIENyZWF0ZSBoaWdo IHByaW9yaXR5IGFuZCBub24taGlnaCBwcmlvcml0eSBjb250ZXh0cyBpbiB0aGUgc2FtZSAKPj4g cHJvY2Vzcwo+Pgo+PiBJbXBsZW1lbnRhdGlvbiBhcHByb2FjaCAyIC0gZHluYW1pYyBwcmlvcml0 eSBwcm9ncmFtbWluZzoKPj4gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCj4+Cj4+IFNpbWlsYXIgdG8gdGhlIGFib3ZlLCBidXQgaW5zdGVh ZCBvZiBwcm9ncmFtbWluZyB0aGUgcHJpb3JpdGllcyBhbmQKPj4gYW1kZ3B1X2luaXQoKSB0aW1l LCB0aGUgU1cgc2NoZWR1bGVyIHdpbGwgcmVwcm9ncmFtIHRoZSBxdWV1ZSBwcmlvcml0aWVzCj4+ IGR5bmFtaWNhbGx5IHdoZW4gc2NoZWR1bGluZyBhIHRhc2suCj4+Cj4+IFRoaXMgd291bGQgaW52 b2x2ZSBoYXZpbmcgYSBoYXJkd2FyZSBzcGVjaWZpYyBjYWxsYmFjayBmcm9tIHRoZSAKPj4gc2No ZWR1bGVyIHRvCj4+IHNldCB0aGUgYXBwcm9wcmlhdGUgcXVldWUgcHJpb3JpdHk6IHNldF9wcmlv cml0eShpbnQgcmluZywgaW50IGluZGV4LCAKPj4gaW50IHByaW9yaXR5KQo+Pgo+PiBEdXJpbmcg dGhpcyBjYWxsYmFjayB3ZSB3b3VsZCBoYXZlIHRvIGdyYWIgdGhlIFNSQk0gbXV0ZXggdG8gcGVy Zm9ybSAKPj4gdGhlIGFwcHJvcHJpYXRlCj4+IEhXIHByb2dyYW1taW5nLCBhbmQgSSdtIG5vdCBy ZWFsbHkgc3VyZSBpZiB0aGF0IGlzIHNvbWV0aGluZyB3ZSAKPj4gc2hvdWxkIGJlIGRvaW5nIGZy b20KPj4gdGhlIHNjaGVkdWxlci4KPj4KPj4gT24gdGhlIHBvc2l0aXZlIHNpZGUsIHRoaXMgYXBw cm9hY2ggd291bGQgYWxsb3cgdXMgdG8gcHJvZ3JhbSBhIHJhbmdlIG9mCj4+IHByaW9yaXRpZXMg Zm9yIGpvYnMgaW5zdGVhZCBvZiBhIHNpbmdsZSAiaGlnaCBwcmlvcml0eSIgdmFsdWUiLCAKPj4g YWNoaWV2aW5nCj4+IHNvbWV0aGluZyBzaW1pbGFyIHRvIHRoZSBuaWNlbmVzcyBBUEkgYXZhaWxh YmxlIGZvciBDUFUgc2NoZWR1bGluZy4KPj4KPj4gSSdtIG5vdCBzdXJlIGlmIHRoaXMgZmxleGli aWxpdHkgaXMgc29tZXRoaW5nIHRoYXQgd2Ugd291bGQgbmVlZCBmb3IgCj4+IG91ciB1c2UKPj4g Y2FzZSwgYnV0IGl0IG1pZ2h0IGJlIHVzZWZ1bCBpbiBvdGhlciBzY2VuYXJpb3MgKG11bHRpcGxl IHVzZXJzIAo+PiBzaGFyaW5nIGNvbXB1dGUKPj4gdGltZSBvbiBhIHNlcnZlcikuCj4+Cj4+IFRo aXMgYXBwcm9hY2ggd291bGQgcmVxdWlyZSBhIG5ldyBpbnQgZmllbGQgaW4gZHJtX2FtZGdwdV9j dHhfaW4sIG9yIAo+PiByZXB1cnBvc2luZwo+PiBvZiB0aGUgZmxhZ3MgZmllbGQuCj4+Cj4+IEtu b3duIGN1cnJlbnQgb2JzdGFjbGVzOgo+PiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KPj4KPj4g VGhlIFNRIGlzIGN1cnJlbnRseSBwcm9ncmFtbWVkIHRvIGRpc3JlZ2FyZCB0aGUgSFFEIHByaW9y aXRpZXMsIGFuZCAKPj4gaW5zdGVhZCBpdCBwaWNrcwo+PiBqb2JzIGF0IHJhbmRvbS4gU2V0dGlu Z3MgZnJvbSB0aGUgc2hhZGVyIGl0c2VsZiBhcmUgYWxzbyBkaXNyZWdhcmRlZCAKPj4gYXMgdGhp cyBpcwo+PiBjb25zaWRlcmVkIGEgcHJpdmlsZWdlZCBmaWVsZC4KPj4KPj4gRWZmZWN0aXZlbHkg d2UgY2FuIGdldCBvdXIgY29tcHV0ZSB3YXZlZnJvbnQgbGF1bmNoZWQgQVNBUCwgYnV0IHdlIAo+ PiBtaWdodCBub3QgZ2V0IHRoZQo+PiB0aW1lIHdlIG5lZWQgb24gdGhlIFNRLgo+Pgo+PiBUaGUg Y3VycmVudCBwcm9ncmFtbWluZyB3b3VsZCBoYXZlIHRvIGJlIGNoYW5nZWQgdG8gYWxsb3cgcHJp b3JpdHkgCj4+IHByb3BhZ2F0aW9uCj4+IGZyb20gdGhlIEhRRCBpbnRvIHRoZSBTUS4KPj4KPj4g R2VuZXJpYyBhcHByb2FjaCBmb3IgYWxsIEhXIElQczoKPj4gLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KPj4KPj4gRm9yIGNvbnNpc3RlbmN5IHB1cnBvc2VzLCB0aGUgaGlnaCBwcmlv cml0eSBjb250ZXh0IGNhbiBiZSBlbmFibGVkIAo+PiBmb3IgYWxsIEhXIElQcwo+PiB3aXRoIHN1 cHBvcnQgb2YgdGhlIFNXIHNjaGVkdWxlci4gVGhpcyB3aWxsIGZ1bmN0aW9uIHNpbWlsYXJseSB0 byB0aGUgCj4+IGN1cnJlbnQKPj4gQU1EX1NDSEVEX1BSSU9SSVRZX0tFUk5FTCBwcmlvcml0eSwg d2hlcmUgdGhlIGpvYiBjYW4ganVtcCBhaGVhZCBvZiAKPj4gYW55dGhpbmcgbm90Cj4+IGNvbW1p dGVkIHRvIHRoZSBIVyBxdWV1ZS4KPj4KPj4gVGhlIGJlbmVmaXRzIG9mIHJlcXVlc3RpbmcgYSBo aWdoIHByaW9yaXR5IGNvbnRleHQgZm9yIGEgbm9uLWNvbXB1dGUgCj4+IHF1ZXVlIHdpbGwKPj4g YmUgbGVzc2VyIChlLmcuIHVwIHRvIDEwcyBvZiB3YWl0IHRpbWUgaWYgYSBHRlggY29tbWFuZCBp cyBzdHVjayBpbiAKPj4gZnJvbnQgb2YKPj4geW91KSwgYnV0IGhhdmluZyB0aGUgQVBJIGluIHBs YWNlIHdpbGwgYWxsb3cgdXMgdG8gZWFzaWx5IGltcHJvdmUgdGhlIAo+PiBpbXBsZW1lbnRhdGlv bgo+PiBpbiB0aGUgZnV0dXJlIGFzIG5ldyBmZWF0dXJlcyBiZWNvbWUgYXZhaWxhYmxlIGluIG5l dyBoYXJkd2FyZS4KPj4KPj4gRnV0dXJlIHN0ZXBzOgo+PiAtLS0tLS0tLS0tLS0tCj4+Cj4+IE9u Y2Ugd2UgaGF2ZSBhbiBhcHByb2FjaCBzZXR0bGVkLCBJIGNhbiB0YWtlIGNhcmUgb2YgdGhlIGlt cGxlbWVudGF0aW9uLgo+Pgo+PiBBbHNvLCBvbmNlIHRoZSBpbnRlcmZhY2UgaXMgbW9zdGx5IGRl Y2lkZWQsIHdlIGNhbiBzdGFydCB0aGlua2luZyBhYm91dAo+PiBleHBvc2luZyB0aGUgaGlnaCBw cmlvcml0eSBxdWV1ZSB0aHJvdWdoIHJhZHYuCj4+Cj4+IFJlcXVlc3QgZm9yIGZlZWRiYWNrOgo+ PiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0KPj4KPj4gV2UgYXJlbid0IG1hcnJpZWQgdG8gYW55IG9m IHRoZSBhcHByb2FjaGVzIG91dGxpbmVkIGFib3ZlLiBPdXIgZ29hbCAKPj4gaXMgdG8KPj4gb2J0 YWluIGEgbWVjaGFuaXNtIHRoYXQgd2lsbCBhbGxvdyB1cyB0byBjb21wbGV0ZSB0aGUgcmVwcm9q ZWN0aW9uIAo+PiBqb2Igd2l0aGluIGEKPj4gcHJlZGljdGFibGUgYW1vdW50IG9mIHRpbWUuIFNv IGlmIGFueW9uZSBhbnlvbmUgaGFzIGFueSBzdWdnZXN0aW9ucyBmb3IKPj4gaW1wcm92ZW1lbnRz IG9yIGFsdGVybmF0aXZlIHN0cmF0ZWdpZXMgd2UgYXJlIG1vcmUgdGhhbiBoYXBweSB0byBoZWFy IAo+PiB0aGVtLgo+Pgo+PiBJZiBhbnkgb2YgdGhlIHRlY2huaWNhbCBpbmZvcm1hdGlvbiBhYm92 ZSBpcyBhbHNvIGluY29ycmVjdCwgZmVlbCAKPj4gZnJlZSB0byBwb2ludAo+PiBvdXQgbXkgbWlz dW5kZXJzdGFuZGluZ3MuCj4+Cj4+IExvb2tpbmcgZm9yd2FyZCB0byBoZWFyaW5nIGZyb20geW91 Lgo+Pgo+PiBSZWdhcmRzLAo+PiBBbmRyZXMKPj4KPj4gX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX18KPj4gYW1kLWdmeCBtYWlsaW5nIGxpc3QKPj4gYW1kLWdm eEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKPj4gaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcv bWFpbG1hbi9saXN0aW5mby9hbWQtZ2Z4Cj4+Cj4+Cj4+IGFtZC1nZnggSW5mbyBQYWdlIC0gbGlz dHMuZnJlZWRlc2t0b3Aub3JnCj4+IGxpc3RzLmZyZWVkZXNrdG9wLm9yZwo+PiBUbyBzZWUgdGhl IGNvbGxlY3Rpb24gb2YgcHJpb3IgcG9zdGluZ3MgdG8gdGhlIGxpc3QsIHZpc2l0IHRoZSAKPj4g YW1kLWdmeCBBcmNoaXZlcy4gVXNpbmcgYW1kLWdmeDogVG8gcG9zdCBhIG1lc3NhZ2UgdG8gYWxs IHRoZSBsaXN0IAo+PiBtZW1iZXJzLCBzZW5kIGVtYWlsIC4uLgo+Pgo+Pgo+Pgo+PiBhbWQtZ2Z4 IEluZm8gUGFnZSAtIGxpc3RzLmZyZWVkZXNrdG9wLm9yZwo+PiBsaXN0cy5mcmVlZGVza3RvcC5v cmcKPj4gVG8gc2VlIHRoZSBjb2xsZWN0aW9uIG9mIHByaW9yIHBvc3RpbmdzIHRvIHRoZSBsaXN0 LCB2aXNpdCB0aGUgCj4+IGFtZC1nZnggQXJjaGl2ZXMuIFVzaW5nIGFtZC1nZng6IFRvIHBvc3Qg YSBtZXNzYWdlIHRvIGFsbCB0aGUgbGlzdCAKPj4gbWVtYmVycywgc2VuZCBlbWFpbCAuLi4KPj4K Pj4KPj4KPj4KPj4KPj4KPj4KPj4KPj4KPj4KPj4KPj4gX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX18KPj4gYW1kLWdmeCBtYWlsaW5nIGxpc3QKPj4gYW1kLWdm eEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKPj4gaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcv bWFpbG1hbi9saXN0aW5mby9hbWQtZ2Z4Cj4+Cj4KPiBfX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fXwo+IGFtZC1nZnggbWFpbGluZyBsaXN0Cj4gYW1kLWdmeEBs aXN0cy5mcmVlZGVza3RvcC5vcmcKPiBodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWls bWFuL2xpc3RpbmZvL2FtZC1nZngKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fCmFtZC1nZnggbWFpbGluZyBsaXN0CmFtZC1nZnhAbGlzdHMuZnJlZWRlc2t0 b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vYW1k LWdmeAo=