From mboxrd@z Thu Jan 1 00:00:00 1970 From: =?UTF-8?B?Um9nZXIgUGF1IE1vbm7DqQ==?= Subject: Re: RFC v1: Xen block protocol overhaul - problem statement (with pictures!) Date: Sat, 19 Jan 2013 13:44:53 +0100 Message-ID: <50FA9545.9090406@citrix.com> References: <20121218143109.GA24471@phenom.dumpdata.com> <50F9718A.4040202@citrix.com> <20130118182028.GB11351@phenom.dumpdata.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20130118182028.GB11351@phenom.dumpdata.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: Konrad Rzeszutek Wilk Cc: "axboe@kernel.dk" , "xen-devel@lists.xensource.com" , Felipe Franciosi , "martin.petersen@oracle.com" , "matthew@wil.cx" List-Id: xen-devel@lists.xenproject.org T24gMTgvMDEvMTMgMTk6MjAsIEtvbnJhZCBSemVzenV0ZWsgV2lsayB3cm90ZToKPiBPbiBGcmks IEphbiAxOCwgMjAxMyBhdCAwNTowMDoxMFBNICswMTAwLCBSb2dlciBQYXUgTW9ubsOpIHdyb3Rl Ogo+PiBPbiAxOC8xMi8xMiAxNTozMSwgS29ucmFkIFJ6ZXN6dXRlayBXaWxrIHdyb3RlOgo+Pj4g SGV5LAo+Pj4KPj4+IEkgYW0gaW5jbHVkaW5nIHNvbWUgZm9sa3MgdGhhdCBhcmUgbm90IGFsd2F5 cyBvbiBYZW4tZGV2ZWwgdG8gc2VlIGlmIHRoZXkgaGF2ZQo+Pj4gc29tZSBleHRyYSBpZGVhcyBv ciBjYW4gY29ycmVjdCBteSBtaXN1bmRlcnN0YW5kaW5ncy4KPj4+Cj4+PiBUaGlzIGlzIHZlcnkg bXVjaCBSRkMgLSBzbyB0aGVyZSBpcyBib3VuZCB0byBiZSBzb21lIGJ1Z3MuCj4+PiBUaGUgb3Jp Z2luYWwgaXMgaGVyZQo+Pj4gaHR0cHM6Ly9kb2NzLmdvb2dsZS5jb20vZG9jdW1lbnQvZC8xVmg1 VDhaM1R4M3NVRWhWQjBEbk5ES0JOaXFCX1pBOFo1WVZxQXNDSWp1SS9lZGl0Cj4+PiBpbiBjYXNl IG9uZSB3aXNoZXMgdG8gbW9kaWZ5L3Byb3ZpZGUgY29tbWVudCBvbiB0aGF0IG9uZS4KPj4KPj4g SGVsbG8gS29ucmFkLAo+Pgo+PiBUaGFua3MgZm9yIHRoZSBwcm9ibGVtIGRlc2NyaXB0aW9uIGFu ZCBwb3NzaWJsZSBzb2x1dGlvbnMsIEknbQo+PiBnb2luZyB0byB0YWtlIG9uIHRoaXMgKHByb3Zp ZGVkIHRoYXQgeW91IGFyZSBPSyB3aXRoIGl0KS4KPiAKPiBUaGUgd2hvbGUgdGhpbmchPyBZb3Ug YXJlIHF1aXRlIGFtYml0aW91cyBoZXJlIQoKSSB3aWxsIHRyeSB0byBmaXggYXMgbXVjaCBhcyBw b3NzaWJsZSwgb25lIHRoaW5nIGF0IGEgdGltZSwgZG9uJ3QgZXhwZWN0CmEgc2VyaWVzIGZyb20g b25lIGRheSB0byBhbm90aGVyIGZpeGluZyBhbGwgdGhlIGlzc3VlcyA6KQoKPj4KPj4+Cj4+PiBU aGVyZSBhcmUgb3V0c3RhbmRpbmcgaXNzdWVzIHdlIGhhdmUgbm93IHdpdGggdGhlIGJsb2NrIHBy b3RvY29sOgo+Pj4gTm90ZTogSSBhbSBhc3N1bWluZyA2NC1iaXQgZ3Vlc3QvaG9zdCAtIGFzIHRo ZSBzaXpl4oCZcyBvZiB0aGUgc3RydWN0dXJlcwo+Pj4gY2hhbmdlIG9uIDMyLWJpdC4gSSBhbSBh bHNvIGF0dGFjaGluZyB0aGUgaGVhZGVyIGZvciB0aGUgYmxraWYgcmluZwo+Pj4gYXMgb2YgdG9k YXkuCj4+Pgo+Pj4gQSkgU2VnbWVudCBzaXplIGlzIGxpbWl0ZWQgdG8gMTEgcGFnZXMuIEl0IG1l YW5zIHdlIGNhbiBhdCBtb3N0IHNxdWVlemUKPj4+IGluIDQ0a0IgcGVyIHJlcXVlc3QuIFRoZSBy aW5nIGNhbiBob2xkIDMyIChuZXh0IHBvd2VyIG9mIHR3byBiZWxvdyAzNikKPj4+IHJlcXVlc3Rz LCBtZWFuaW5nIHdlIGNhbiBkbyAxLjRNIG9mIG91dHN0YW5kaW5nIHJlcXVlc3RzLgo+Pgo+PiBJ J3ZlIGJlZW4gbG9va2luZyBhdCB0aGUgZGlmZmVyZW50IG9wdGlvbnMgaGVyZSBhbmQgSSB0aGlu ayB0aGUgbW9zdAo+PiBzdWl0YWJsZSBvbmUgd291bGQgYmUgdXNpbmcgYSBtZWNoYW5pc20gc2lt aWxhciB0byBWaXJ0SU8gImluZGlyZWN0Cj4+IGRlc2NyaXB0b3JzIiwgaXQgaXMgdGhlIG9uZSB0 aGF0IGFsbG93cyBmb3IgbW9yZSBpbi1mbGlnaHQgcmVxdWVzdHMKPj4gd2hpbGUgYmVpbmcgcXVp dGUgc2ltcGxlIHRvIGltcGxlbWVudC4KPiAKPiA8bm9kcz4gSSB0aGluayB5b3UgYXJlIHJpZ2h0 IC0gcGx1cyBpdCBsb29rcyB0byBiZSBzaW1pbGFyIHRvIGhvdyB0aGUgbW9yZQo+IG1vZGVybiBo YXJkd2FyZSBkb2VzIHJlcXVlc3RzIChoZXJlIEkgYW0gdGhpbmtpbmcgb2YgTlZNZSBhbmQgaXRz IGNvbW1hbmQKPiBkZXNjcmlwdG9yIC0gd2hlcmUgaXQgY2FuIHBvaW50IHRvIGEgcGFnZSBmdWxs IG9mIERNQSBhZGRyZXNzZXMgKyBMQkFzIGFuZCBzYXkKPiAiR28gUkVBRCIpLgo+IAo+Pgo+Pj4g QikuIFByb2R1Y2VyIGFuZCBjb25zdW1lciBpbmRleCBpcyBvbiB0aGUgc2FtZSBjYWNoZSBsaW5l LiBJbiBwcmVzZW50IGhhcmR3YXJlCj4+PiB0aGF0IG1lYW5zIHRoZSByZWFkZXIgYW5kIHdyaXRl ciB3aWxsIGNvbXBldGUgZm9yIHRoZSBzYW1lIGNhY2hlbGluZSBjYXVzaW5nIGEKPj4+IHBpbmct cG9uZyBiZXR3ZWVuIHNvY2tldHMuCj4+Pgo+Pj4gQykuIFRoZSByZXF1ZXN0cyBhbmQgcmVzcG9u c2VzIGFyZSBvbiB0aGUgc2FtZSByaW5nLiBUaGlzIGFnYWluIGNhdXNlcyB0aGUKPj4+IHBpbmct cG9uZyBiZXR3ZWVuIHNvY2tldHMgYXMgdGhlIG93bmVyc2hpcCBvZiB0aGUgY2FjaGUgbGluZSB3 aWxsIHNoaWZ0IGJldHdlZW4KPj4+IHNvY2tldHMuCj4+Pgo+Pj4gRCkuIENhY2hlIGFsaWdubWVu dC4gQ3VycmVudGx5IHRoZSBwcm90b2NvbCBpcyAxNi1iaXQgYWxpZ25lZC4gVGhpcyBpcyBhd2t3 YXJkCj4+PiBhcyB0aGUgcmVxdWVzdCBhbmQgcmVzcG9uc2VzIHNvbWV0aW1lcyBmaXQgd2l0aGlu IGEgY2FjaGVsaW5lIG9yIHNvbWV0aW1lcwo+Pj4gc3RyYWRkbGUgdGhlbS4KPj4+Cj4+PiBFKS4g SW50ZXJydXB0IG1pdGlnYXRpb24uIFdlIGFyZSBjdXJyZW50bHkgZG9pbmcgYSBraWNrIHdoZW5l dmVyIHdlIGFyZQo+Pj4gZG9uZSDigJxwcm9jZXNzaW5n4oCdIHRoZSByaW5nLiBUaGVyZSBhcmUg YmV0dGVyIHdheXMgdG8gZG8gdGhpcyAtIGFuZAo+Pj4gd2UgY291bGQgdXNlIGV4aXN0aW5nIG5l dHdvcmsgaW50ZXJydXB0IG1pdGlnYXRpb24gdGVjaG5pcXVlcyB0byBtYWtlIHRoZQo+Pj4gY29k ZSBwb2xsIHdoZW4gdGhlcmUgaXMgYSBsb3Qgb2YgZGF0YS4KPj4+Cj4+PiBGKS4gTGF0ZW5jeS4g VGhlIHByb2Nlc3Npbmcgb2YgdGhlIHJlcXVlc3QgbGltaXRzIHVzIHRvIG9ubHkgZG8gNDRrQiAt IHdoaWNoIG1lYW5zCj4+PiB0aGF0IGEgMU1CIGNodW5rIG9mIGRhdGEgLSB3aGljaCBvbiBjb250 ZW1wb3JhcnkgZGV2aWNlcyB3b3VsZCBvbmx5IHVzZSBJL08gcmVxdWVzdAo+Pj4gLSB3b3VsZCBi ZSBzcGxpdCB1cCBpbiBtdWx0aXBsZSDigJhyZXF1ZXN0c+KAmSBpbmFkdmVydGVudGx5IGRlbGF5 aW5nIHRoZSBwcm9jZXNzaW5nIG9mCj4+PiBzYWlkIGJsb2NrLgo+Pj4KPj4+IEcpIEZ1dHVyZSBl eHRlbnNpb25zLiBESUYvRElYIGZvciBpbnRlZ3JpdHkuIFRoZXJlIG1pZ2h0Cj4+PiBiZSBvdGhl ciBpbiB0aGUgZnV0dXJlIGFuZCBpdCB3b3VsZCBiZSBnb29kIHRvIGxlYXZlIHNwYWNlIGZvciBl eHRyYQo+Pj4gZmxhZ3MgVEJELgo+Pj4KPj4+IEgpLiBTZXBhcmF0ZSB0aGUgcmVzcG9uc2UgYW5k IHJlcXVlc3QgcmluZ3MuIFRoZSBjdXJyZW50Cj4+PiBpbXBsZW1lbnRhdGlvbiBoYXMgb25lIHRo cmVhZCBmb3Igb25lIGJsb2NrIHJpbmcuIFRoZXJlIGlzIG5vIHJlYXNvbiB3aHkKPj4+IHRoZXJl IGNvdWxkIG5vdCBiZSB0d28gdGhyZWFkcyAtIG9uZSBmb3IgcmVzcG9uc2VzIGFuZCBvbmUgZm9y IHJlcXVlc3RzIC0KPj4+IGFuZCBlc3BlY2lhbGx5IGlmIHRoZXkgYXJlIHNjaGVkdWxlZCBvbiBk aWZmZXJlbnQgQ1BVcy4gRnVydGhlcm1vcmUgdGhpcwo+Pj4gY291bGQgYWxzbyBiZSBzcGxpdCBp biBtdWx0aS1xdWV1ZXMgLSBzbyB0d28gcXVldWVzIChyZXNwb25zZSBhbmQgcmVxdWVzdCkKPj4+ IG9uIGVhY2ggdkNQVS4KPj4+Cj4+PiBJKS4gV2Ugd2FzdGUgYSBsb3Qgb2Ygc3BhY2Ugb24gdGhl IHJpbmcgLSBhcyB3ZSB1c2UgdGhlCj4+PiByaW5nIGZvciBib3RoIHJlcXVlc3RzIGFuZCByZXNw b25zZXMuIFRoZSByZXNwb25zZSBzdHJ1Y3R1cmUgbmVlZHMgdG8KPj4+IG9jY3VweSB0aGUgc2Ft ZSBhbW91bnQgb2Ygc3BhY2UgYXMgdGhlIHJlcXVlc3Qgc3RydWN0dXJlICgxMTIgYnl0ZXMpLiBJ Zgo+Pj4gdGhlIHJlcXVlc3Qgc3RydWN0dXJlIGlzIGV4cGFuZGVkIHRvIGJlIGFibGUgdG8gZml0 IG1vcmUgc2VnbWVudHMgKHNheQo+Pj4gdGhlIOKAmHN0cnVjdCBibGtpZl9zcmluZ19lbnRyeSBp cyBleHBhbmRlZCB0byB+MTUwMCBieXRlcykgdGhhdCBzdGlsbAo+Pj4gcmVxdWlyZXMgdXMgdG8g aGF2ZSBhIG1hdGNoaW5nIHNpemUgcmVzcG9uc2Ugc3RydWN0dXJlLiBXZSBkbyBub3QgbmVlZAo+ Pj4gdG8gdXNlIHRoYXQgbXVjaCBzcGFjZSBmb3Igb25lIHJlc3BvbnNlLiBIYXZpbmcgYSBzZXBh cmF0ZSByZXNwb25zZSByaW5nCj4+PiB3b3VsZCBzaW1wbGlmeSB0aGUgc3RydWN0dXJlcy4KPj4+ Cj4+PiBKKS4gMzIgYml0IHZzIDY0IGJpdC4gUmlnaHQgbm93IHRoZSBzaXplCj4+PiBvZiB0aGUg cmVxdWVzdCBzdHJ1Y3R1cmUgaXMgMTEyIGJ5dGVzIHVuZGVyIDY0LWJpdCBndWVzdCBhbmQgMTAy IGJ5dGVzCj4+PiB1bmRlciAzMi1iaXQgZ3Vlc3QuIEl0IGlzIGNvbmZ1c2luZyBhbmQgZnVydGhl cm1vcmUgcmVxdWlyZXMgdGhlIGhvc3QKPj4+IHRvIGRvIGV4dHJhIGFjY291bnRpbmcgYW5kIHBy b2Nlc3NpbmcuCj4+Pgo+Pj4gVGhlIGNydWRlIGRyYXdpbmcgZGlzcGxheXMgbWVtb3J5IHRoYXQg dGhlIHJpbmcgb2NjdXBpZXMgaW4gb2Zmc2V0IG9mCj4+PiA2NCBieXRlcyAoY2FjaGUgbGluZSku IE9mIGNvdXJzZSBmdXR1cmUgQ1BVcyBjb3VsZCBoYXZlIGRpZmZlcmVudCBjYWNoZQo+Pj4gbGlu ZXMgKHNheSAzMiBieXRlcz8pLSB3aGljaCB3b3VsZCBza2V3IHRoaXMgZHJhd2luZy4gQSAzMi1i aXQgcmluZyBpcwo+Pj4gYSBiaXQgZGlmZmVyZW50IGFzIHRoZSDigJhzdHJ1Y3QgYmxraWZfc3Jp bmdfZW50cnnigJkgaXMgb2YgMTAyIGJ5dGVzLgo+Pj4KPj4+Cj4+PiBUaGUgQSkgaGFzIHR3byBz b2x1dGlvbnMgdG8gdGhpcyAobG9vayBhdAo+Pj4gaHR0cDovL2NvbW1lbnRzLmdtYW5lLm9yZy9n bWFuZS5jb21wLmVtdWxhdG9ycy54ZW4uZGV2ZWwvMTQwNDA2IGZvcgo+Pj4gZGV0YWlscykuIE9u ZSBwcm9wb3NlZCBieSBKdXN0aW4gZnJvbSBTcGVjdHJhbG9naWMgaGFzIHRvIG5lZ290aWF0ZQo+ Pj4gdGhlIHNlZ21lbnQgc2l6ZS4gVGhpcyBtZWFucyB0aGF0IHRoZSDigJhzdHJ1Y3QgYmxraWZf c3JpbmdfZW50cnnigJkKPj4+IGlzIG5vdyBhIHZhcmlhYmxlIHNpemUuIEl0IGNhbiBleHBhbmQg ZnJvbSAxMTIgYnl0ZXMgKGNvdmVyIDExIHBhZ2VzIG9mCj4+PiBkYXRhIC0gNDRrQikgdG8gMTU4 MCBieXRlcyAoMjU2IHBhZ2VzIG9mIGRhdGEgLSBzbyAxTUIpLiBJdCBpcyBhIHNpbXBsZQo+Pj4g ZXh0ZW5zaW9uIGJ5IGp1c3QgbWFraW5nIHRoZSBhcnJheSBpbiB0aGUgcmVxdWVzdCBleHBhbmQg ZnJvbSAxMSB0byBhCj4+PiB2YXJpYWJsZSBzaXplIG5lZ290aWF0ZWQuCj4+Pgo+Pj4KPj4+IFRo ZSBtYXRoIGlzIGFzIGZvbGxvdy4KPj4+Cj4+Pgo+Pj4gICAgICAgICBzdHJ1Y3QgYmxraWZfcmVx dWVzdF9zZWdtZW50IHsKPj4+ICAgICAgICAgICAgICAgICB1aW50MzIgZ3JhbnQ7ICAgICAgICAg ICAgICAgICAgICAgICAgIC8vIDQgYnl0ZXMgdWludDhfdAo+Pj4gICAgICAgICAgICAgICAgIGZp cnN0X3NlY3QsIGxhc3Rfc2VjdDsvLyAxLCAxID0gNiBieXRlcwo+Pj4gICAgICAgICB9Cj4+PiAo NiBieXRlcyBmb3IgZWFjaCBzZWdtZW50KSAtIHRoZSBhYm92ZSBzdHJ1Y3R1cmUgaXMgaW4gYW4g YXJyYXkgb2Ygc2l6ZQo+Pj4gMTEgaW4gdGhlIHJlcXVlc3QuIFRoZSDigJhzdHJ1Y3QgYmxraWZf c3JpbmdfZW50cnnigJkgaXMgMTEyIGJ5dGVzLiBUaGUKPj4+IGNoYW5nZSBpcyB0byBleHBhbmQg dGhlIGFycmF5IC0gaW4gdGhpcyBleGFtcGxlIHdlIHdvdWxkIHRhY2sgb24gMjQ1IGV4dHJhCj4+ PiDigJhzdHJ1Y3QgYmxraWZfcmVxdWVzdF9zZWdtZW504oCZIC0gMjQ1KjYgKyAxMTIgPSAxNTgy LiBJZiB3ZSB3ZXJlIHRvCj4+PiB1c2UgMzYgcmVxdWVzdHMgKHNvIDE1ODIqMzYgKyA2NCkgd2Ug d291bGQgdXNlIDU3MDE2IGJ5dGVzICgxNCBwYWdlcykuCj4+Pgo+Pj4KPj4+IFRoZSBvdGhlciBz b2x1dGlvbiAoZnJvbSBJbnRlbCAtIFJvbmdodWkpIHdhcyB0byBjcmVhdGUgb25lIGV4dHJhCj4+ PiByaW5nIHRoYXQgb25seSBoYXMgdGhlIOKAmHN0cnVjdCBibGtpZl9yZXF1ZXN0X3NlZ21lbnTi gJkgaW4gdGhlbS4gVGhlCj4+PiDigJhzdHJ1Y3QgYmxraWZfcmVxdWVzdOKAmSB3b3VsZCBiZSBj aGFuZ2VkIHRvIGhhdmUgYW4gaW5kZXggaW4gc2FpZAo+Pj4g4oCYc2VnbWVudCByaW5n4oCZLiBU aGVyZSBpcyBvbmx5IG9uZSBzZWdtZW50IHJpbmcuIFRoaXMgbWVhbnMgdGhhdCB0aGUKPj4+IHNp emUgb2YgdGhlIGluaXRpYWwgcmluZyBpcyBzdGlsbCB0aGUgc2FtZS4gVGhlIHJlcXVlc3RzIHdv dWxkIHBvaW50Cj4+PiB0byB0aGUgc2VnbWVudCBhbmQgZW51bWVyYXRlIG91dCBob3cgbWFueSBv ZiB0aGUgaW5kZXhlcyBpdCB3YW50cyB0bwo+Pj4gdXNlLiBUaGUgbGltaXQgaXMgb2YgY291cnNl IHRoZSBzaXplIG9mIHRoZSBzZWdtZW50LiBJZiBvbmUgYXNzdW1lcyBhCj4+PiBvbmUtcGFnZSBz ZWdtZW50IHRoaXMgbWVhbnMgd2UgY2FuIGluIG9uZSByZXF1ZXN0IGNvdmVyIH40TUIuIFRoZSBt YXRoCj4+PiBpcyBhcyBmb2xsb3c6Cj4+Pgo+Pj4KPj4+IEZpcnN0IHJlcXVlc3QgdXNlcyB0aGUg aGFsZiBvZiB0aGUgc2VnbWVudCByaW5nIC0gc28gaW5kZXggMCB1cAo+Pj4gdG8gMzQxIChvdXQg b2YgNjgyKS4gRWFjaCBlbnRyeSBpbiB0aGUgc2VnbWVudCByaW5nIGlzIGEg4oCYc3RydWN0Cj4+ PiBibGtpZl9yZXF1ZXN0X3NlZ21lbnTigJkgc28gaXQgb2NjdXBpZXMgNiBieXRlcy4gVGhlIG90 aGVyIHJlcXVlc3RzIG9uCj4+PiB0aGUgcmluZyAoc28gdGhlcmUgYXJlIDM1IGxlZnQpIGNhbiB1 c2UgZWl0aGVyIHRoZSByZW1haW5pbmcgMzQxIGluZGV4ZXMKPj4+IG9mIHRoZSBzZ2VtZW50IHJp bmcgb3IgdXNlIHRoZSBvbGQgc3R5bGUgcmVxdWVzdC4gVGhlIG9sZCBzdHlsZSByZXF1ZXN0Cj4+ PiBjYW4gYWRkcmVzcyB1c2UgdXAgdG8gNDRrQi4gRm9yIGV4YW1wbGU6Cj4+Pgo+Pj4KPj4+ICBz cmluZ1swXS0+W3VzZXMgMC0+MzQxIGluZGV4ZXMgaW4gdGhlIHNlZ21lbnQgcmluZ10gPSAzNDIq NDA5NiA9IDE0MDA4MzIKPj4+ICBzcmluZ1sxXS0+W3VzZSBzdGhlIG9sZCBzdHlsZSByZXF1ZXN0 XSA9IDExKjQwOTYgPSA0NTA1Ngo+Pj4gIHNyaW5nWzJdLT5bdXNlcyAzNDItPjY4MiBpbmRleGVz IGluIHRoZSBzZWdtZW50IHJpbmddID0gMTM5MjY0MAo+Pj4gIHNyaW5nWzMuLjMyXSAtPiBbdXNl cyB0aGUgb2xkIHN0eWxlIHJlcXVlc3RdID0gMjkqNDA5NioxMSA9IDEzMDY2MjQKPj4+Cj4+Pgo+ Pj4gVG90YWw6IDQxNDUxNTIgYnl0ZXMgTmF0dXJhbGx5IHRoaXMgY291bGQgYmUgZXh0ZW5kZWQg dG8gaGF2ZSBhIGJpZ2dlcgo+Pj4gc2VnbWVudCByaW5nIHRvIGNvdmVyIG1vcmUuCj4+Pgo+Pj4K Pj4+Cj4+Pgo+Pj4KPj4+IFRoZSBwcm9ibGVtIHdpdGggdGhpcyBleHRlbnNpb24gaXMgdGhhdCB3 ZSB1c2UgNiBieXRlcyBhbmQgZW5kIHVwCj4+PiBzdHJhZGRsaW5nIGEgY2FjaGUgbGluZS4gVXNp bmcgOCBieXRlcyB3aWxsIGZpeCB0aGUgY2FjaGUgc3RyYWRkbGluZy4gVGhpcwo+Pj4gd291bGQg bWVhbiBmaXR0aW5nIG9ubHkgNTEyIHNlZ21lbnRzIHBlciBwYWdlLgo+Pj4KPj4+Cj4+PiBUaGVy ZSBpcyB5ZXQgYW5vdGhlciBtZWNoYW5pc20gdGhhdCBjb3VsZCBiZSBlbXBsb3llZCAgLSBhbmQg aXQgYm9ycm93cwo+Pj4gZnJvbSBWaXJ0SU8gcHJvdG9jb2wuIEFuZCB0aGF0IGlzIHRoZSDigJhp bmRpcmVjdCBkZXNjcmlwdG9yc+KAmS4gVGhpcwo+Pj4gdmVyeSBzaW1pbGFyIHRvIHdoYXQgSW50 ZWwgc3VnZ2VzdHMsIGJ1dCB3aXRoIGEgdHdpc3QuCj4+Pgo+Pj4KPj4+IFdlIGNvdWxkIHByb3Zp ZGUgYSBuZXcgQkxLSUZfT1AgKHNheSBCTEtJRl9PUF9JTkRJUkVDVCksIGFuZCB0aGUg4oCYc3Ry dWN0Cj4+PiBibGtpZl9zcmluZ+KAmSAoZWFjaCBlbnRyeSBjYW4gYmUgdXAgdG8gMTEyIGJ5dGVz IGlmIG5lZWRlZCAtIHNvIHRoZQo+Pj4gb2xkIHN0eWxlIHJlcXVlc3Qgd291bGQgZml0KS4gSXQg d291bGQgbG9vayBsaWtlOgo+Pj4KPj4+Cj4+PiAvKiBzbyA2NCBieXRlcyB1bmRlciA2NC1iaXQu IElmIG5lY2Vzc2FyeSwgdGhlIGFycmF5IChzZWcpIGNhbiBiZQo+Pj4gZXhwYW5kZWQgdG8gZml0 IDExIHNlZ21lbnRzIGFzIHRoZSBvbGQgc3R5bGUgcmVxdWVzdCBkaWQgKi8gc3RydWN0Cj4+PiBi bGtpZl9yZXF1ZXN0X2luZGlyZWN0IHsKPj4+ICAgICAgICAgdWludDhfdCAgICAgICAgb3A7ICAg ICAgICAgICAvKiBCTEtJRl9PUF8qICh1c3VhbGx5IFJFQUQgb3IgV1JJVEUgICAgKi8KPj4+IC8v IDEgYmxraWZfdmRldl90ICAgaGFuZGxlOyAgICAgICAvKiBvbmx5IGZvciByZWFkL3dyaXRlIHJl cXVlc3RzICAgICAgICAgKi8gLy8gMgo+Pj4gI2lmZGVmIENPTkZJR19YODZfNjQKPj4+ICAgICAg ICAgdWludDMyX3QgICAgICAgX3BhZDE7ICAgICAgICAgICAgIC8qIG9mZnNldG9mKGJsa2lmX3Jl cXVlc3QsdS5ydy5pZCkgPT0gOCAqLyAvLyAyCj4+PiAjZW5kaWYKPj4+ICAgICAgICAgdWludDY0 X3QgICAgICAgaWQ7ICAgICAgICAgICAvKiBwcml2YXRlIGd1ZXN0IHZhbHVlLCBlY2hvZWQgaW4g cmVzcCAgKi8KPj4+ICAgICAgICAgZ3JhbnRfcmVmX3QgICAgZ3JlZjsgICAgICAgIC8qIHJlZmVy ZW5jZSB0byBpbmRpcmVjdCBidWZmZXIgZnJhbWUgIGlmIHVzZWQqLwo+Pj4gICAgICAgICAgICAg c3RydWN0IGJsa2lmX3JlcXVlc3Rfc2VnbWVudF9hbGlnbmVkIHNlZ1s0XTsgLy8gZWFjaCBpcyA4 IGJ5dGVzCj4+Pgo+Pj4gfSBfX2F0dHJpYnV0ZV9fKChfX3BhY2tlZF9fKSk7Cj4+Pgo+Pj4KPj4+ IHN0cnVjdCBibGtpZl9yZXF1ZXN0IHsKPj4+ICAgICAgICAgdWludDhfdCAgICAgICAgb3BlcmF0 aW9uOyAgICAvKiBCTEtJRl9PUF8/Pz8gICovCj4+PiAgICAgICAgIHVuaW9uIHsKPj4+ICAgICAg ICAgICAgICAgICBzdHJ1Y3QgYmxraWZfcmVxdWVzdF9ydyBydzsKPj4+ICAgICAgICAgICAgICAg ICBzdHJ1Y3QgYmxraWZfcmVxdWVzdF9pbmRpcmVjdAo+Pj4gICAgICAgICAgICAgICAgIGluZGly ZWN0OyDigKYgb3RoZXIgLi4KPj4+ICAgICAgICAgfSB1Owo+Pj4gfSBfX2F0dHJpYnV0ZV9fKChf X3BhY2tlZF9fKSk7Cj4+Pgo+Pgo+PiBEbyB5b3UgdGhpbmsgaXQgd2lsbCBiZSBzdWl0YWJsZSB0 byBjaGFuZ2UgdGhlIHNpemUgb2YgYmxraWZfcmVxdWVzdCwgSQo+PiB3YXMgdGhpbmtpbmcgdGhh dCBpZiB3ZSBpbnRyb2R1Y2UgaW5kaXJlY3QgcmVxdWVzdCB3ZSBjb3VsZCByZWR1Y2UgdGhlCj4+ IG1heGltdW0gbnVtYmVyIG9mIHNlZ21lbnRzIHBlciByZXF1ZXN0IHRvIDIsIHNvIGJsa2lmX3Jl cXVlc3QgaXMKPj4gcmVkdWNlZCB0byAzMmJ5dGVzIGFuZCB3ZSBjYW4gZml0IDEyNiByZXF1ZXN0 cyAoNjQgZHVlIHRvIHJvdW5kaW5nKQo+PiBpbiBhIHNpbmdsZSByaW5nLgo+IAo+IEFsdGVyaW5n IGl0IHRvIGJlIDMyLWJ5dGVzIG1lYW5zIHdlIGFyZSBzdGlsbCBjcm9zc2luZyB0d28gY2FjaGVs aW5lcy4KCkFyZSB5b3Ugc3VyZT8gdXNpbmcgMzJieXRlcyBvbiBhIDY0Ynl0ZXMgY2FjaGUgbGlu ZSBtZWFucyB3ZSBoYXZlIHR3bwpyZXF1ZXN0cyBpbiB0aGUgc2FtZSBjYWNoZSBsaW5lLCBidXQg aXQncyBpbXBvc3NpYmxlIHRoYXQgYSByZXF1ZXN0IHVzZXMKdHdvIGRpZmZlcmVudCBjYWNoZSBs aW5lcyAod2hpY2ggSSBndWVzcyBpdCdzIHRoZSBtYWluIHByb2JsZW0pOgoKICAgICAgICAgICAg ICAgIDY0Ynl0ZXMKICAgIDwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0+CiAgICArLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwogICAgfCByaW5nIGhlYWRlciArIHBhZCAgICAg ICAgICAgIHwKICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiAgICAgICAzMmJ5 dGVzCiAgICA8LS0tLS0tLS0tLS0tLS0tPgogICAgKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0tLSsKICAgIHwgcmVxWzBdICAgICAgICB8IHJlcVsxXSAgICAgICB8CiAgICArLS0tLS0tLS0t LS0tLS0tfC0tLS0tLS0tLS0tLS0tKwogICAgfCByZXFbMl0gICAgICAgIHwgcmVxWzNdICAgICAg IHwKICAgICstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0rCgo+IAo+IFRoaXMgaXMgd2hl cmUgSSB0aG91Z2h0IG9mIHB1dHRpbmcgJ3N0cnVjdCBibGtpZl9yZXF1ZXN0X3J3JyBvbiBhIGRp ZXQKPiBhbmQganVzdCBtYWtpbmcgaXQgaGF2ZSA0IG9mIHRoZSBncmFudHMgLSBpbiBjYXNlIHRo ZSByZXF1ZXN0IGlzCj4ganVzdCAxNksuIEFuZCB0aGVuIHRoZSBzaXplIG9mIHRoZSBzdHJ1Y3R1 cmUgKGlmIEkgZ290IG15IG1hdGggcmlnaHQpCj4gd291bGQgYmUgNjQtYnl0ZXMuCgpVc2luZyA2 NGJ5dGVzIHN0aWxsIGxlYXZlcyB1cyB3aXRoIG9ubHkgMzIgcmVxdWVzdHMgb24gdGhlIHJpbmcg KHVubGVzcwp3ZSBjaGFuZ2UgdGhlIHJpbmcgcHJvdG9jb2wgdG8gc3VwcG9ydCBhIHJpbmcgc2l6 ZSBkaWZmZXJlbnQgdGhhbiBhCnBvd2VyIG9mIHR3bykuCgo+IE5hdHVyYWxseSB0aGlzIG1lYW5z IHdlIG5lZWQgdG8gbmVnb3RpYXRlIGEgJ2ZlYXR1cmUtcmVxdWVzdC1zaXplJwo+IHdoZXJlIHYx IHNheXMgdGhhdCB0aGUgcmVxdWVzdCBpcyBvZiA2NC1ieXRlcyBsZW5ndGguIHYyIG1pZ2h0Cj4g YmUgMTI4Ynl0ZXMgb3Igd2hhdGV2ZXIgZWxzZSB3ZSB3b3VsZCBuZWVkIHRvIGZpdCB3aXRoaW4g YSBjYWNoZWxpbmUKPiBpbiBmdXR1cmUgQ1BVcy4gV2UgY291bGQgcGFkIHRoZSAnc3RydWN0IHJl cXVlc3RfdjEnIHdpdGggNjQtYnl0ZXMKPiBpbiBjYXNlIHRoZSBjYWNoZWxpbmUgaXMgMTI4Ynl0 ZXMgYW5kIG91ciByZXF1ZXN0IGlzIDY0LWJ5dGVzLgoKSSB3b3VsZCBoYXZlIHRvIGJlbmNobWFy ayBpZiBoYXZpbmcgdHdvIHJlcXVlc3RzIG9uIHRoZSBzYW1lIGNhY2hlIGxpbmUKb3Igb25seSBh IHNpbmdsZSBvbmUgaGFzIGFueSBraW5kIG9mIGltcGFjdCBvbiBwZXJmb3JtYW5jZSwgYXMgSQp1 bmRlcnN0YW5kIGl0IHRoZSBvbmx5IHByb2JsZW0gb2YgdGhpcyBhcHByb2FjaCBtaWdodCBoYXBw ZW4gd2hlbgpibGtiYWNrIGlzIHdyaXRpbmcgYSByZXBseSBhbmQgYmxrZnJvbnQgaXMgYWxzbyB3 cml0aW5nIGEgcmVxdWVzdCBpbiB0aGUKc2FtZSBjYWNoZSBsaW5lICh3aGljaCB3aWxsIGJlIHNv bHZlZCBieSB1c2luZyB0d28gZGlmZmVyZW50IHJpbmdzLCBvbmUKZm9yIHJlcGxpZXMgYW5kIG9u ZSBmb3IgcmVxdWVzdCkuCgpTbyBJIHRoaW5rIGEgY29tcHJvbWlzZSBzb2x1dGlvbiBpcyB0byB1 c2UgMzJieXRlcyByZXF1ZXN0cywgdGhhdCB3b3VsZAphbHdheXMgYmUgY2FjaGUgYWxpZ25lZCBh bmQgdG8gc29sdmUgdGhlIHBpbmctcG9uZyBwcm9ibGVtIGJldHdlZW4KYmxrZnJvbnQvYmxrYmFj ayB3cml0aW5nIG9uIHRoZSBzYW1lIGNhY2hlIGxpbmUgdHdvIHJpbmdzIHNob3VsZCBiZSB1c2Vk LgoKPiAKPj4KPj4gRXZlcnl0aGluZyB0aGF0IG5lZWRzIG1vcmUgdGhhbiB0d28gc2VnbWVudHMg d2lsbCBzd2l0Y2ggdG8gdXNpbmcgdGhlCj4+IG5ldyBpbmRpcmVjdCBvcGVyYXRpb24uIEFsc28s IHRvIG1ha2UgdXNlIG9mIHRoZSBleHRyYSBzcGFjZSBpbgo+PiBibGtpZl9yZXF1ZXN0X2luZGly ZWN0IEkgd291bGQgcmVtb3ZlIHRoZSBleHRyYSBzZWdtZW50cyBhbmQgaW5zdGVhZAo+PiBwYXNz IG1vcmUgZ3JhbnQgcmVmZXJlbmNlcyB0byBmcmFtZXMgY29udGFpbmluZwo+PiBibGtpZl9yZXF1 ZXN0X2luZGlyZWN0X2VudHJ5IGVudHJpZXMuCj4gCj4gUmlnaHQuIFRoZSBjb21wbGljYXRpb25z IGFyaXNlIHdoZW4gd2UgbmVlZCB0byBzdXBwb3J0IHRoaXMgbmV3IGZvcm1hdAo+IGFuZCB0aGUg b2xkIGZvcm1hdCBhbmQgaGF2ZSB0byBzd2l0Y2ggb3ZlciB3aGVuIHdlIG1pZ3JhdGUgdG8gb2xk Cj4gYmFja2VuZHMuCj4gCj4+Cj4+ICNkZWZpbmUgQkxLSUZfTUFYX1NFR01FTlRTX1BFUl9SRVFV RVNUIDIKPj4gI2RlZmluZSBCTEtJRl9NQVhfSU5ESVJFQ1RfR1JFRlNfUEVSX1JFUVVFU1QgNAo+ Pgo+PiBzdHJ1Y3QgYmxraWZfcmVxdWVzdF9zZWdtZW50IHsKPj4gICAgIGdyYW50X3JlZl90IGdy ZWY7ICAgICAgICAvKiByZWZlcmVuY2UgdG8gSS9PIGJ1ZmZlciBmcmFtZSAgICAgICAgKi8KPj4g ICAgIC8qIEBmaXJzdF9zZWN0OiBmaXJzdCBzZWN0b3IgaW4gZnJhbWUgdG8gdHJhbnNmZXIgKGlu Y2x1c2l2ZSkuICAgKi8KPj4gICAgIC8qIEBsYXN0X3NlY3Q6IGxhc3Qgc2VjdG9yIGluIGZyYW1l IHRvIHRyYW5zZmVyIChpbmNsdXNpdmUpLiAgICAgKi8KPj4gICAgIHVpbnQ4X3QgICAgIGZpcnN0 X3NlY3QsIGxhc3Rfc2VjdDsKPj4gfSBfX2F0dHJpYnV0ZV9fKChfX3BhY2tlZF9fKSk7Cj4+Cj4+ IHN0cnVjdCBibGtpZl9yZXF1ZXN0X2luZGlyZWN0X2VudHJ5IHsKPj4gICAgIGJsa2lmX3NlY3Rv cl90ICBzZWN0b3JfbnVtYmVyOwo+PiAgICAgc3RydWN0ICAgICAgICAgIGJsa2lmX3JlcXVlc3Rf c2VnbWVudCBzZWc7Cj4+ICAgICB1aW50OF90ICAgICAgICAgX3BhZFsyXTsKPj4gfSBfX2F0dHJp YnV0ZV9fKChfX3BhY2tlZF9fKSk7Cj4+Cj4+IHN0cnVjdCBibGtpZl9yZXF1ZXN0X3J3IHsKPj4g ICAgIHVpbnQ4X3QgICAgICAgIG5yX3NlZ21lbnRzOyAgLyogbnVtYmVyIG9mIHNlZ21lbnRzICAg ICAgICAgICAgICAgICAgICovCj4+ICAgICBibGtpZl92ZGV2X3QgICBoYW5kbGU7ICAgICAgIC8q IG9ubHkgZm9yIHJlYWQvd3JpdGUgcmVxdWVzdHMgICAgICAgICAqLwo+PiAgICAgdWludDY0X3Qg ICAgICAgaWQ7ICAgICAgICAgICAvKiBwcml2YXRlIGd1ZXN0IHZhbHVlLCBlY2hvZWQgaW4gcmVz cCAgKi8KPj4gICAgIGJsa2lmX3NlY3Rvcl90IHNlY3Rvcl9udW1iZXI7Lyogc3RhcnQgc2VjdG9y IGlkeCBvbiBkaXNrIChyL3cgb25seSkgICovCj4+ICAgICBzdHJ1Y3QgYmxraWZfcmVxdWVzdF9z ZWdtZW50IHNlZ1tCTEtJRl9NQVhfU0VHTUVOVFNfUEVSX1JFUVVFU1RdOwo+PiB9IF9fYXR0cmli dXRlX18oKF9fcGFja2VkX18pKTsKPj4KPj4gc3RydWN0IGJsa2lmX3JlcXVlc3RfaW5kaXJlY3Qg ewo+PiAgICAgdWludDhfdCAgICAgICAgb3A7ICAgICAgICAgICAvKiBCTEtJRl9PUF8qICh1c3Vh bGx5IFJFQUQgb3IgV1JJVEUgICAgKi8KPj4gICAgIHVpbnQxNl90ICAgICAgIG5yX2luZGlyZWN0 OyAgLyogbnVtYmVyIG9mIGluZGlyZWN0IGVudHJpZXMgaW4gZ3JlZiBmcmFtZXMgKi8KPj4gICAg IGJsa2lmX3ZkZXZfdCAgIGhhbmRsZTsgICAgICAgLyogb25seSBmb3IgcmVhZC93cml0ZSByZXF1 ZXN0cyAgICAgICAgICovCj4+ICAgICB1aW50NjRfdCAgICAgICBpZDsgICAgICAgICAgIC8qIHBy aXZhdGUgZ3Vlc3QgdmFsdWUsIGVjaG9lZCBpbiByZXNwICAqLwo+PiAgICAgLyogcmVmZXJlbmNl IHRvIGluZGlyZWN0IGJ1ZmZlciBmcmFtZSAqLwo+PiAgICAgZ3JhbnRfcmVmX3QgICAgZ3JlZltC TEtJRl9NQVhfSU5ESVJFQ1RfR1JFRlNfUEVSX1JFUVVFU1RdOwo+PiB9IF9fYXR0cmlidXRlX18o KF9fcGFja2VkX18pKTsKPj4KPj4gc3RydWN0IGJsa2lmX3JlcXVlc3RfZGlzY2FyZCB7Cj4+ICAg ICB1aW50OF90ICAgICAgICBmbGFnOyAgICAgICAgIC8qIEJMS0lGX0RJU0NBUkRfU0VDVVJFIG9y IHplcm8uICAgICAgICAqLwo+PiAjZGVmaW5lIEJMS0lGX0RJU0NBUkRfU0VDVVJFICgxPDwwKSAg LyogaWdub3JlZCBpZiBkaXNjYXJkLXNlY3VyZT0wICAgICAgICAgICovCj4+ICAgICB1aW50NjRf dCAgICAgICBpZDsgICAgICAgICAgIC8qIHByaXZhdGUgZ3Vlc3QgdmFsdWUsIGVjaG9lZCBpbiBy ZXNwICAqLwo+PiAgICAgYmxraWZfc2VjdG9yX3Qgc2VjdG9yX251bWJlcjsKPj4gICAgIHVpbnQ2 NF90ICAgICAgIG5yX3NlY3RvcnM7Cj4+IH0gX19hdHRyaWJ1dGVfXygoX19wYWNrZWRfXykpOwo+ Pgo+PiBzdHJ1Y3QgYmxraWZfcmVxdWVzdCB7Cj4+ICAgICB1aW50OF90ICAgICAgICBvcGVyYXRp b247ICAgIC8qIEJMS0lGX09QXz8/PyAgICAgICAgICAgICAgICAgICAgICAgICAqLwo+PiAgICAg dW5pb24gewo+PiAgICAgICAgIHN0cnVjdCBibGtpZl9yZXF1ZXN0X3J3IHJ3Owo+PiAgICAgICAg IHN0cnVjdCBibGtpZl9yZXF1ZXN0X2luZGlyZWN0IGluZGlyZWN0Owo+PiAgICAgICAgIHN0cnVj dCBibGtpZl9yZXF1ZXN0X2Rpc2NhcmQgZGlzY2FyZDsKPj4gICAgIH0gdTsKPj4gfSBfX2F0dHJp YnV0ZV9fKChfX3BhY2tlZF9fKSk7Cj4+Cj4+IEkndmUgcmVtb3ZlZCBhbGwgdGhlIGV4dHJhIHBh ZGRpbmdzLCBiZWNhdXNlIHRoaXMgcHJvdG9jb2wgaXMgbm8gbG9uZ2VyCj4+IGNvbXBhdGlibGUg d2l0aCB0aGUgcHJldmlvdXMgb25lICh3ZSBtb2RpZnkKPj4gQkxLSUZfTUFYX1NFR01FTlRTX1BF Ul9SRVFVRVNUKSwgYW5kIHBhY2tlZCB0aGUgc3RydWN0dXJlcy4gSSdtCj4+IHdvbmRlcmluZyBp ZiB1c2luZyBfX2F0dHJpYnV0ZV9fIGluIGEgcHVibGljIGhlYWRlciBpcyBhbGxvd2VkLCBzaW5j ZQo+PiB0aGlzIGlzIGEgR05VIGV4dGVuc2lvbiAoQUZBSUsgc3VwcG9ydGVkIGJ5IGdjYyBhbmQg Y2xhbmcgYXQgbGVhc3QpLgo+IAo+IEkgZG9uJ3Qga25vdy4gQnV0IEkgdGhpbmsgd2UgY2FuIGJ5 cGFzcyB0aGUgbmVlZCBmb3IgaXQgaWYgd2UgY2FsY3VsYXRlCj4gdGhlIHNpemUgb2YgZWFjaCBl bnRyeSByaWdodCBhbmQgaW5zZXJ0IHBhZGRpbmcgd2hlbmV2ZXIgbmVjY2Vzc2FyeS4KClllcywg SSB3b3VsZCBsaWtlIHRvIGF2b2lkIGhhdmluZyBkaWZmZXJlbnQgc2l6ZXMgZGVwZW5kaW5nIG9u IHRoZQphcmNoaXRlY3R1cmUuCgo+IAo+Pgo+PiBUaGUgbWFpbiBtb3RpdmF0aW9uIGJlaGluZCB0 aGUgbW9kaWZpY2F0aW9uIG9mIHRoZSBzaXplIG9mIHRoZQo+PiByZXF1ZXN0IGlzIGJlY2F1c2Ug SSd2ZSByZWFsaXplZCB0aGF0IGluIHlvdXIgcHJvcG9zYWwsIHlvdSB3aGVyZQo+PiBhZGRpbmcg NCBleHRyYSBzZWdtZW50cyB0byB0aGUgaW5kaXJlY3QgcmVxdWVzdCwgYW5kIEkgd2FzIHdvbmRl cmluZwo+PiBpZiBJIGNvdWxkIHBhY2sgbW9yZSBncmFudCBmcmFtZXMgY29udGFpbmluZyBpbmRp cmVjdCBlbnRyaWVzIGluIGEKPj4gc2luZ2xlIHJlcXVlc3QuIEJ5IHVzaW5nIHRoZSBvbGQgc2l6 ZSBvZiBibGtmX3JlcXVlc3Qgd2Ugd2lsbCBiZSBhYmxlIHRvCj4+IHNlbmQgdXAgdG8gOSBncmFu dCBmcmFtZXMgZmlsbGVkIHdpdGggaW5kaXJlY3QgZW50cmllcywgd2hpY2ggZ2l2ZXMgdXMKPj4g NDA5NiAqIDI1NiAqIDkgPSA5TUIgb2Ygb3V0c3RhbmRpbmcgSU8gaW4gZWFjaCByZXF1ZXN0LiBJ IHRoaW5rIHRoYXQKPj4gdGhpcyBpcyB0b28gaGlnaCwgYW5kIHdpbGwgaW50cm9kdWNlIGEgbG90 IG9mIGxhdGVuY3kgdG8gdGhlIHByb3RvY29sLgo+PiBUaGF0J3MgdGhlIG1haW4gcmVhc29uIEkn dmUgZGVjaWRlZCB0byByZWR1Y2UgdGhlIHNpemUgb2YgYmxraWZfcmVxdWVzdAo+PiBpbiBvcmRl ciB0byBiZSBhYmxlIHRvIGZpdCBtb3JlIG9mIHRoZW0gaW4gYSByaW5nLCBpbnN0ZWFkIG9mIG1h a2luZwo+PiBlYWNoIG9mIHRoZSByZXF1ZXN0cyBiaWdnZXIuCj4gCj4gT0suIFRoYXQgaXMgT0sg YXMgbG9uZyBhcyB3ZSBtYWtlIHN1cmUgdG8gX25vdF8gaGF2ZSB0d28gcmVxdWVzdHMKPiBzdHJh ZGRsaW5nIHRoZSBjYWNoZS1saW5lLiBPciBtYXliZSB0aGF0IGlzIG5vdCBhIHByb2JsZW0uCj4g Cj4gQnV0IHRoZSBvdGhlciBuaWNlIGJlbmVmaXQgb2YgeW91ciBpZGVhIC0gd2hlcmUgaXQgaXMg b25seSAzMi1ieXRlcwo+IC0gaXMgdGhhdCB3ZSBoYXZlIG5vdyBleHRyYSAzMi1ieXRlcyB3aGVy ZSB3ZSBjYW4gaW5zZXJ0IHN1Y2gKPiB0aGluZ3MgYXMgRElGL0RJWCBvciAib3RoZXIiIG5ldyBm ZWF0dXJlcy4gQW5kIHRoYXQgd2F5IGhhdmUgdGhlCj4gcmVxdWVzdCBiZSBvZiBzaXplIDY0IGJ5 dGVzLgoKU28geW91IHByZWZlciB0byBrZWVwIHRoZSByaW5nIHNpemUgdG8gMzIsIGluc3RlYWQg b2YgaW5jcmVhc2luZyBpdCB0bwo2NCwgYW5kIHVzZSB0aGUgcmVtYWluaW5nIDMyYnl0ZXMgaW4g dGhlIHJlcXVlc3QgdG8gc3RvcmUgcmVxdWVzdApyZWxhdGVkIGRhdGE/Cgo+IAo+Pgo+PiBVc2lu ZyB0aGlzIGltcGxlbWVudGF0aW9uIGVhY2ggcmVxdWVzdCBoYXMgYSBzaXplIG9mIDMyYnl0ZXMg KHRvCj4+IHByZXZlbnQgY2FjaGUgc3RyYWRkbGUpLCBzbyB3ZSBjb3VsZCBmaXQgMTI2IHJlcXVl c3RzIGluIGEgcmluZywgYnV0Cj4+IGR1ZSB0byB0aGUgcm91bmRpbmcsIHdlIGVuZCB1cCB3aXRo IDY0LiBBbHNvIGVhY2ggcmVxdWVzdCBjYW4gY29udGFpbgo+PiA0IGdyYW50IHBhZ2VzLCBlYWNo IG9uZSBmaWxsZWQgd2l0aCAyNTYgYmxraWZfcmVxdWVzdF9pbmRpcmVjdF9lbnRyeS4KPj4gVGhl IG1hdGggZm9yIHRoZSBtYXhpbXVtIGRhdGEgaW4gYSByZXF1ZXN0IGlzOiA0MDk2ICogMjU2ICog NCA9IDRNQiwKPj4gYW5kIGluIHRoZSB3aG9sZSByaW5nIDQgKiA2NCA9IDI1Nk1CIHdvcnRoIG9m IG91dHN0YW5kaW5nIElPLgo+Pgo+IAo+IFdoaWNoIGhhcyBhIG5pY2UgcG93ZXIgb2YgdHdvIHJp bmcgdG8gaXQuIChBaCB0aGUgcHVucyEpCj4gCj4gSSBsaWtlIHRoZSBpZGVhIG9mIHB1dHRpbmcg dGhlIHJlcXVlc3Qgb24gYSBkaWV0IC0gYnV0IHRvbyBtdWNoCj4gY291bGQgY2F1c2UgdXMgdG8g bWlzcyB0aGUgb3Bwb3J0dW5pdHkgdG8gaW5zZXJ0IG90aGVyIGZsYWdzIG9uIGl0Lgo+IElmIEkg cmVjYWxsIGNvcnJlY3RseSwgdGhlIERJRi9ESVggb25seSBuZWVkIDggYnl0ZXMgb2YgZGF0YS4K PiBJZiB3ZSBtYWtlIHRoZSBhc3N1bXB0aW9uIHRoYXQ6Cj4gICAgICAgICBJL08gcmVxdWVzdCA9 IG9uZSByaW5nIGVudHJ5CgpTbyB3ZSBvbmx5IG5lZWQgdG8gcmVzZXJ2ZSA4Ynl0ZXMgZm9yIGVh Y2ggRElGL0lEWCwgZXZlbiBpZiB0aGUgcmVxdWVzdApjb250YWlucyBhIHZhcmlhYmxlIG51bWJl ciBvZiBkYXRhPyAoSSBtZWFuLCBibG9jayByZXF1ZXN0cyBjYW4gYXQgYQptaW5pbXVtIGNvbnRh aW4gNDA5NmJ5dGVzLCBvciBtdWNoIG1vcmUpCgo+IGFuZCB0aGUgICJvbmUgcmluZyBlbnRyeSIg Y2FuIHVzZSB0aGUgdGhlICc0JyBncmFudHMgaWYgd2UganVzdCBoYXZlIGEKPiAxNktCIEkvTyBy ZXF1ZXN0LCBidXQgaWYgaXQgaXMgbW9yZSB0aGFuIHRoYXQgLSB3ZSB1c2UgdGhlIGluZGlyZWN0 IHBhZ2UKCldlbGwsIG9uIG15IHB1cnBvc2UgSSd2ZSBsaW1pdGVkIHRoZSBudW1iZXIgb2Ygc2Vn bWVudHMgb2YgYSAicnciCnJlcXVlc3RzIHRvIDIsIHNvIGl0J3Mgb25seSA4SywgYW55dGhpbmcg YmlnZ2VyIGhhcyB0byB1c2UgaW5kaXJlY3QKZGVzY3JpcHRvcnMsIHdoaWNoIGNhbiBmaXQgNE0g b2YgZGF0YSAoYmVjYXVzZSBJJ20gcGFzc2luZyA0IGdyYW50CmZyYW1lcyBmdWxsIG9mICJibGtp Zl9yZXF1ZXN0X2luZGlyZWN0X2VudHJ5IiBlbnRyaWVzKS4KCj4gYW5kIGNhbiBzdHVmZiAxTUIg b2YgZGF0YSBpbiB0aGVyZS4KPiBUaGUgZXh0cmEgMzItYnl0ZXMgb2Ygc3BhY2UgZm9yIHN1Y2gg dGhpbmdzIGFzICdESUYvRElYJy4gVGhpcyBhbHNvCj4gbWVhbnMgd2UgY291bGQgdW5pZnkgdGhl ICdzdHJ1Y3QgcmVxdWVzdCcgd2l0aCB0aGUgJ2Rpc2NhcmQnIG9wZXJhdGlvbgo+IGFuZCBpdCBj b3VsZCB1dGlsaXplIHRoZSAzMi1ieXRlcyBvZiBleHRyYSB1bnVzZWQgcGF5bG9hZCBkYXRhLgo+ IAo+Pj4KPj4+Cj4+PiBUaGUg4oCYb3BlcmF0aW9u4oCZIHdvdWxkIGJlIEJMS0lGX09QX0lORElS RUNULiBUaGUgcmVhZC93cml0ZS9kaXNjYXJkLAo+Pj4gZXRjIG9wZXJhdGlvbiB3b3VsZCBub3cg YmUgaW4gaW5kaXJlY3Qub3AuIFRoZSBpbmRpcmVjdC5ncmVmIHBvaW50cyB0bwo+Pj4gYSBwYWdl IHRoYXQgaXMgZmlsbGVkIHdpdGg6Cj4+Pgo+Pj4KPj4+IHN0cnVjdCBibGtpZl9yZXF1ZXN0X2lu ZGlyZWN0X2VudHJ5IHsKPj4+ICAgICAgICAgYmxraWZfc2VjdG9yX3Qgc2VjdG9yX251bWJlcjsK Pj4+ICAgICAgICAgc3RydWN0IGJsa2lmX3JlcXVlc3Rfc2VnbWVudCBzZWc7Cj4+PiB9IF9fYXR0 cmlidXRlX18oKF9fcGFja2VkX18pKTsKPj4+IC8vMTYgYnl0ZXMsIHNvIHdlIGNhbiBmaXQgaW4g YSBwYWdlIDI1NiBvZiB0aGVzZSBzdHJ1Y3R1cmVzLgo+Pj4KPj4+Cj4+PiBUaGlzIG1lYW5zIHRo YXQgd2l0aCB0aGUgZXhpc3RpbmcgMzYgc2xvdHMgaW4gdGhlIHJpbmcgKHNpbmdsZSBwYWdlKQo+ Pj4gd2UgY2FuIGNvdmVyOiAzMiBzbG90cyAqIGVhY2ggYmxraWZfcmVxdWVzdF9pbmRpcmVjdCBj b3ZlcnM6IDI1NiAqIDQwOTYKPj4+IH49IDMyTS4gSWYgd2UgZG9u4oCZdCB3YW50IHRvIHVzZSBp bmRpcmVjdCBkZXNjcmlwdG9yIHdlIGNhbiBzdGlsbCB1c2UKPj4+IHVwIHRvIDQgcGFnZXMgb2Yg dGhlIHJlcXVlc3QgKGFzIGl0IGhhcyBlbm91Z2ggc3BhY2UgdG8gY29udGFpbiBmb3VyCj4+PiBz ZWdtZW50cyBhbmQgdGhlIHN0cnVjdHVyZSB3aWxsIHN0aWxsIGJlIGNhY2hlLWFsaWduZWQpLgo+ Pj4KPj4+Cj4+Pgo+Pj4KPj4+IEIpLiBCb3RoIHRoZSBwcm9kdWNlciAocmVxXyogYW5kIHJzcF8q KSB2YWx1ZXMgYXJlIGluIHRoZSBzYW1lCj4+PiBjYWNoZS1saW5lLiBUaGlzIG1lYW5zIHRoYXQg d2UgZW5kIHVwIHdpdGggdGhlIHNhbWUgY2FjaGVsaW5lIGJlaW5nCj4+PiBtb2RpZmllZCBieSB0 d28gZGlmZmVyZW50IGd1ZXN0cy4gRGVwZW5kaW5nIG9uIHRoZSBhcmNoaXRlY3R1cmUgYW5kCj4+ PiBwbGFjZW1lbnQgb2YgdGhlIGd1ZXN0IHRoaXMgY291bGQgYmUgYmFkIC0gYXMgZWFjaCBsb2dp Y2FsIENQVSB3b3VsZAo+Pj4gdHJ5IHRvIHdyaXRlIGFuZCByZWFkIGZyb20gdGhlIHNhbWUgY2Fj aGUtbGluZS4gQSBtZWNoYW5pc20gd2hlcmUKPj4+IHRoZSByZXFfKiBhbmQgcnNwXyB2YWx1ZXMg YXJlIHNlcGFyYXRlZCBhbmQgb24gYSBkaWZmZXJlbnQgY2FjaGUgbGluZQo+Pj4gY291bGQgYmUg dXNlZC4gVGhlIHZhbHVlIG9mIHRoZSBjb3JyZWN0IGNhY2hlLWxpbmUgYW5kIGFsaWdubWVudCBj b3VsZAo+Pj4gYmUgbmVnb3RpYXRlZCB2aWEgWGVuQnVzIC0gaW4gY2FzZSBmdXR1cmUgdGVjaG5v bG9naWVzIHN0YXJ0IHVzaW5nIDEyOAo+Pj4gYnl0ZXMgZm9yIGNhY2hlIG9yIHN1Y2guIE9yIHRo ZSB0aGUgcHJvZHVjZXIgYW5kIGNvbnN1bWVyIGluZGV4ZXMgYXJlIGluCj4+PiBzZXBhcmF0ZSBy aW5ncy4gTWVhbmluZyB3ZSBoYXZlIGEg4oCYcmVxdWVzdCByaW5n4oCZIGFuZCBhIOKAmHJlc3Bv bnNlCj4+PiByaW5n4oCZIC0gYW5kIG9ubHkgdGhlIOKAmHJlcV9wcm9k4oCZLCDigJhyZXFfZXZl bnTigJkgYXJlIG1vZGlmaWVkIGluCj4+PiB0aGUg4oCYcmVxdWVzdCByaW5n4oCZLiBUaGUgb3Bw b3NpdGUgKHJlc3BfKikgYXJlIG9ubHkgbW9kaWZpZWQgaW4gdGhlCj4+PiDigJhyZXNwb25zZSBy aW5n4oCZLgo+Pgo+PiBVc2luZyBkaWZmZXJlbnQgcmluZ3MgZm9yIHJlcXVlc3RzIGFuZCByZXNw b25zZXMgc291bmRzIGxpa2UgYSBnb29kIGlkZWEsCj4+IHRoaXMgd2lsbCByZWR1Y2UgdGhlIG51 bWJlciBvZiB2YXJpYWJsZXMgb24gdGhlIHJpbmcsIGxlYXZpbmcgb25seQo+PiAicHJvZHVjZWQi IGFuZCAiZXZlbnQiICh3ZSBubyBsb25nZXIgbmVlZCByc3BfIGFuZCByZXFfKS4KPiAKPiA8bm9k cz4KPj4KPj4gU2luY2Ugd2Ugd2lsbCBubyBsb25nZXIgaGF2ZSB0d28gZGlmZmVyZW50IGRvbWFp bnMgd3JpdGluZyB0byB0aGUgc2FtZQo+PiBjYWNoZSBsaW5lIEkgZ3Vlc3MgdGhpcyB3aWxsIGdl dCByaWQgb2YgdGhlIGNhY2hlIHBpbmctcG9uZyBwcm9ibGVtLgo+IAo+IDxub2RzPiBUaGF0IGlz IG15IHRoaW5raW5nLgo+Pgo+PiBBbHNvIHdoaWxlIHRoZXJlIHdlIGNvdWxkIHRyeSB0byB1c2Ug YWxsIHRoZSBwYWdlLCBpbnN0ZWFkIG9mIHJvdW5kaW5nCj4+IGRvd24gdG8gdGhlIGNsb3NlciBw b3dlciBvZiB0d28sIHRoaXMgd2lsbCBhbGxvdyB1cyB0byBnbyBmcm9tIDY0Cj4+IHJlcXVlc3Rz IHRvIDEyNiAoaWYgdXNpbmcgdGhlIGluZGlyZWN0IGRlc2NyaXB0b3JzIHByb3Bvc2FsIGV4cGxh aW5lZAo+PiBhYm92ZSkuCj4gCj4gUmlnaHQuCj4gTGV0cyBjYWxsIHRoaXMgJ2ZlYXR1cmUtc2Vw ZXJhdGUtcmVxLWFuZC1yc3AnID8KClllcywgYW5kIGJsa2Zyb250IHdpbGwgYWxzbyBuZWVkIHRv IHBhc3MgdHdvIGRpZmZlcmVudCBncmFudCBmcmFtZXMgYXQKaW5pdCwgYmVjYXVzZSB3ZSBuZWVk IHRvIG1hcCB0d28gcmluZ3MuCgo+IAo+Pgo+Pj4gQykuIFNpbWlsYXIgdG8gQikgcHJvYmxlbSBi dXQgd2l0aCBhIGJpZ2dlciBwYXlsb2FkLiBFYWNoCj4+PiDigJhibGtpZl9zcmluZ19lbnRyeeKA mSBvY2N1cGllcyAxMTIgYnl0ZXMgd2hpY2ggZG9lcyBub3QgbGVuZCBpdHNlbGYKPj4+IHRvIGEg bmljZSBjYWNoZSBsaW5lIHNpemUuIElmIHRoZSBpbmRpcmVjdCBkZXNjcmlwdG9ycyBhcmUgdG8g YmUgdXNlZAo+Pj4gZm9yIGV2ZXJ5dGhpbmcgd2UgY291bGQg4oCYc2xpbS1kb3du4oCZIHRoZSBi bGtpZl9yZXF1ZXN0L3Jlc3BvbnNlIHRvCj4+PiBiZSB1cC10byA2NCBieXRlcy4gVGhpcyBtZWFu cyBtb2RpZnlpbmcgQkxLSUZfTUFYX1NFR01FTlRTX1BFUl9SRVFVRVNUCj4+PiB0byA1IGFzIHRo YXQgd291bGQgc2xpbSB0aGUgbGFyZ2VzdCBvZiB0aGUgc3RydWN0dXJlcyB0byA2NC1ieXRlcy4K Pj4+IE5hdHVyYWxseSB0aGlzIG1lYW5zIG5lZ290aWF0aW5nIGEgbmV3IHNpemUgb2YgdGhlIHN0 cnVjdHVyZSB2aWEgWGVuQnVzLgo+IAo+IEhlcmUgSSBhbSB1c2luZyA1LCBhbmQgSSB0aGluayB5 b3Ugd2VyZSB1c2luZyA0IC0gYW5kIHlvdSBtZW50aW9uZWQgeW91Cj4gZ290IGl0IGRvd24gdG8g MzItYnl0ZXMuIEkgc2hvdWxkIGRvdWJsZS1jaGVjayB0aGUgJ3NpemVvZicgdGhlbiB0bwo+IHNl ZSB3aGF0IGl0IHdvdWxkIGJlIGxpa2UuCgpObywgSSB3YXMgbGltaXRpbmcgaXQgdG8gMiBzZWdt ZW50cyBpbiB0aGUgInJ3IiByZXF1ZXN0LCB0aGUgNCBjb21lcwpiZWNhdXNlIEknbSBwYXNzaW5n IDQgZ3JhbnQgZnJhbWVzIGluIHRoZSAiYmxraWZfcmVxdWVzdF9pbmRpcmVjdCIsCmluc3RlYWQg b2YganVzdCBvbmUgKHNlZSBhYm92ZSwgImdyZWYiIGlzIG5vdyBhbiBhcnJheSBpbiBteSBwcm9w b3NhbCkuCgo+IAo+Pj4KPj4+Cj4+PiBEKS4gVGhlIGZpcnN0IHBpY3R1cmUgc2hvd3MgdGhlIHBy b2JsZW0uIFdlIG5vdyBhbGlnbmluZyBldmVyeXRoaW5nCj4+PiBvbiB0aGUgd3JvbmcgY2FjaGVs aW5lcy4gV29yc3QgaW4g4oWTIG9mIHRoZSBjYXNlcyB3ZSBzdHJhZGRsZQo+Pj4gdGhyZWUgY2Fj aGUtbGluZXMuIFdlIGNvdWxkIG5lZ290aWF0ZSBhIHByb3BlciBhbGlnbm1lbnQgZm9yIGVhY2gK Pj4+IHJlcXVlc3QvcmVzcG9uc2Ugc3RydWN0dXJlLgo+Pj4KPj4+Cj4+PiBFKS4gVGhlIG5ldHdv cmsgc3RhY2sgaGFzIHNob3dlZCB0aGF0IGdvaW5nIGluIGEgcG9sbGluZyBtb2RlIGRvZXMgaW1w cm92ZQo+Pj4gcGVyZm9ybWFuY2UuIFRoZSBjdXJyZW50IG1lY2hhbmlzbSBvZiBraWNraW5nIHRo ZSBndWVzdCBhbmQgb3IgYmxvY2sKPj4+IGJhY2tlbmQgaXMgbm90IGFsd2F5cyBjbGVhci4gIFtU T0RPOiBLb25yYWQgdG8gZXhwbGFpbiBpdCBpbiBkZXRhaWxzXQo+IAo+IE9oLCBJIG5ldmVyIGRp ZCBleHBsYWluIHRoaXMgLSBidXQgSSB0aGluayB0aGUgcGF0Y2hlcyB0aGF0IERhbmllbCBjYW1l Cj4gdXAgd2l0aCBhY3R1YWxseSBmaXggYSBwYXJ0IG9mIGl0LiBUaGV5IG1ha2UgdGhlIGtpY2st dGhlLW90aGVyIGd1ZXN0Cj4gb25seSBoYXBwZW4gd2hlbiB0aGUgYmFja2VuZCBoYXMgcHJvY2Vz c2VkIGFsbCBvZiB0aGUgcmVxdWVzdHMgYW5kCj4gY2Fubm90IGZpbmQgYW55dGhpbmcgZWxzZSB0 byBkby4gUHJldmlvdXNseSBpdCB3YXMgbW9yZSBvZiAnZG9uZSBvbmUKPiByZXF1ZXN0LCBsZXRz IGtpY2sgdGhlIGJhY2tlbmQuJy4KClllcywgdGhhdCdzIHdoYXQgSSdtIHNlZWluZyBpbiB0aGUg Y3VycmVudCBjb2RlLgoKPiBCdXQgZ29pbmcgZm9yd2FyZCwgdGhpcyAna2ljay10aGUtb3RoZXIt Z3Vlc3QnIGNvdWxkIGJlIGZ1cnRoZXIgbW9kdWxhdGVkLgo+IElmIHdlIGhhdmUgYSBmdWxsIHJp bmcgYW5kIHRoZSBmcm9udGVuZCBrZWVwcyBvbiBhZGRpbmcgZW50cmllcyB3ZSAoYmFja2VuZCkK PiBzaG91bGQgbmV2ZXIgZ2V0IGFuIGludGVycnVwdC4gQXMgb2YgbWF0dGVyIG9mIGZhY3QgdGhl IGZyb250ZW5kIHNob3VsZCBiZSBqdXN0Cj4gcG9sbGluZyBhbGwgdGhlIHRpbWUgYW5kIHByb2Nl c3MgdGhlbSBhcyBmYXN0IGFzIHBvc3NpYmxlLgoKWWVzLCB3ZSBjb3VsZCBzd2l0Y2ggdG8gcG9s bGluZyBpbiBib3RoIGVuZHMgYW5kIG9ubHkgImtpY2siIHdoZW4gdGhlCnJpbmcgaXMgZnVsbCAo d2hpY2ggc2hvdWxkIG5vdCBoYXBwZW4gdXN1YWxseSksIHRoaXMgd2lsbCBwcm9iYWJseQpyZWR1 Y2UgQ1BVIHV0aWxpemF0aW9uLCBidXQgSSBkb3VidCBpdCdzIGdvaW5nIHRvIGluY3JlYXNlIHRo ZSB0aHJvdWdocHV0LgoKPiBPciB3ZSBjb3VsZCBhZGQgdHdlYWtzIGluIHRoZSBiYWNrZW5kIHRv IGFkb3B0IGFuICdhZGFwdGl2ZSBpbnRlcnJ1cHQKPiBjb2VsZXNjaW5nJyBtZWNoYW5pc20uIFRo aXMgd2F5IHdlIG9ubHkga2ljayB0aGUgZnJvbnRlbmQgaWYgYSBjZXJ0YWluCj4gdGhyZXNob2xk IG9mIEkvT3MgaGF2ZSBiZWVuIHByb2Nlc3NlZCBvciBpZiB3ZSBhcmUgc2xvd2luZyBkb3duIG9u IHRoZQo+IHRocmVzaG9sZC4gQWdhaW4sIHRoZSBpZGVhIGlzIHRoYXQgLSBpZiB3ZSBoYXZlIHRo ZSByaW5ncyBmdWxsIHdlIHNob3VsZAo+IG5vdCBzZW5kICdraWNrcycgYXQgYWxsIGFuZCBqdXN0 IGtlZXAgb24gcHJvY2Vzc2luZy4KPiAKPiBOb3RlOiBJICpiZWxpZXZlKiB0aGF0IHRoZSBiYWNr ZW5kIGRvZXMgdGhpcyAtIGtlZXBzIG9uIHByb2Nlc3NpbmcgYW5kCj4gd29uJ3Qga2ljayBpZiB0 aGUgcmluZyBpcyBmdWxsLiBCdXQgSSBhbSBub3QgMTAwJSBzdXJlIG9uIHRoZSBmcm9udGVuZCBz aWRlLgoKQ2hhbmdpbmcgdGhpcyBpcyBub3QgcmVhbGx5IGRpZmZpY3VsdCAoaW4gbXkgb3Bpbmlv biwgYnV0IEkndmUgbWlnaHQgYmUKd3JvbmcpLCBzbyBJIHRoaW5rIHdlIGNvdWxkIHRyeSBzZXZl cmFsIGFwcHJvYWNoZXMgYW5kIHNlZSB3aGljaCBvbmUKZ2l2ZXMgYmV0dGVyIHBlcmZvcm1hbmNl IChvciByZWR1Y2VzIENQVSB1dGlsaXphdGlvbikuCgpBbnl3YXksIEkgd291bGQgZm9jdXMgbm93 IG9uIHRoZSBpbmRpcmVjdCBkZXNjcmlwdG9ycyBhbmQgc2VwYXJhdGUgdGhlCnJpbmdzLCBhbmQg bGVhdmUgdGhpcyB3b3JrIGZvciBhZnRlcndhcmRzIChiZWNhdXNlIHdoYXQgd2UgY291bGQKcHJv YmFibHkgc2VlIG5vdyBtaWdodCBub3QgYmUgdHJ1ZSBvbmNlIHRoZSBvdGhlciBpbXByb3ZlbWVu dHMgYXJlIGRvbmUpLgoKPj4+Cj4+Pgo+Pj4gRikuIFRoZSBjdXJyZW50IGJsb2NrIHByb3RvY29s IGZvciBiaWcgSS9PcyB0aGF0IHRoZSBiYWNrZW5kIGRldmljZXMgY2FuCj4+PiBoYW5kbGUgZW5k cyB1cCBkb2luZyBleHRyYSB3b3JrIGJ5IHNwbGl0dGluZyB0aGUgSS9PIGluIHNtYWxsZXIgY2h1 bmtzLAo+Pj4gYW5kIHRoZW4gcmVhc3NlbWJsaW5nIHRoZW0uIFdpdGggdGhlIHNvbHV0aW9ucyBv dXRsaW5lZCBpbiBBKSB0aGlzIGNhbgo+Pj4gYmUgZml4ZWQuIFRoaXMgaXMgZWFzaWx5IHNlZW4g d2l0aCAxTUIgSS9Pcy4gU2luY2UgZWFjaCByZXF1ZXN0IGNhbgo+Pj4gb25seSBoYW5kbGUgNDRr QiB0aGF0IG1lYW5zIHdlIGhhdmUgdG8gc3BsaXQgYSAxTUIgSS9PIGluIDI0IHJlcXVlc3RzCj4+ PiAoMjMgKiA0MDk2ICogMTEgPSAxMDgxMzQ0KS4gVGhlbiB0aGUgYmFja2VuZCBlbmRzIHVwIHNl bmRpbmcgdGhlbSBpbgo+Pj4gc2VjdG9yLXNpemVzLSB3aGljaCB3aXRoIGNvbnRlbXBvcmFyeSBk ZXZpY2VzIChzdWNoIGFzIFNTRCkgZW5kcyB1cCB3aXRoCj4+PiBtb3JlIHByb2Nlc3NpbmcuIFRo ZSBTU0RzIGFyZSBjb21mb3J0YWJsZSBoYW5kbGluZyAxMjhrQiBvciBoaWdoZXIgSS9Pcwo+Pj4g aW4gb25lIGdvLgo+Pj4KPj4+Cj4+PiBHKS4gRElGL0RJWC4gVGhpcyBhIHByb3RvY29sIHRvIGNh cnJ5IGV4dHJhIOKAmGNoZWNrc3Vt4oCZIGluZm9ybWF0aW9uCj4+PiBmb3IgZWFjaCBJL08uIFRo ZSBJL08gY2FuIGJlIGEgc2VjdG9yIHNpemUsIHBhZ2Utc2l6ZSBvciBhbiBJL08gc2l6ZQo+Pj4g KG1vc3QgcG9wdWxhciBhcmUgMU1CKS4gVGhlIERJRi9ESVggbmVlZHMgOCBieXRlcyBvZiBpbmZv cm1hdGlvbiBmb3IKPj4+IGVhY2ggSS9PLiBJdCB3b3VsZCBiZSB3b3J0aCBjb25zaWRlcmluZyBw dXR0aW5nL3Jlc2VydmluZyB0aGF0IGFtb3VudCBvZgo+Pj4gc3BhY2UgaW4gZWFjaCByZXF1ZXN0 L3Jlc3BvbnNlLiBBbHNvIHB1dHRpbmcgaW4gZXh0cmEgZmxhZ3MgZm9yIGZ1dHVyZQo+Pj4gZXh0 ZW5zaW9ucyB3b3VsZCBiZSB3b3J0aCBpdCAtIGhvd2V2ZXIgdGhlIGF1dGhvciBpcyBub3QgYXdh cmUgb2YgYW55Cj4+PiByaWdodCBub3cuCj4+Pgo+Pj4KPj4+IEgpLiBTZXBhcmF0ZSByZXNwb25z ZS9yZXF1ZXN0LiBQb3RlbnRpYWxseSBldmVuIG11bHRpLXF1ZXVlIHBlci1WQ1BVCj4+PiBxdWV1 ZXMuIEFzIHYyLjYuMzcgZGVtb25zdHJhdGVkLCB0aGUgaWRlYSBvZiBXUklURV9CQVJSSUVSIHdh cwo+Pj4gZmxhd2VkLiBUaGVyZSBpcyBubyBzaW1pbGFyIGNvbmNlcHQgaW4gdGhlIHN0b3JhZ2Ug d29ybGQgd2VyZSB0aGUKPj4+IG9wZXJhdGluZyBzeXN0ZW0gY2FuIHB1dCBhIGZvb2QgZG93biBh bmQgc2F5OiDigJxldmVyeXRoaW5nIGJlZm9yZSB0aGlzCj4+PiBoYXMgdG8gYmUgb24gdGhlIGRp c2su4oCdIFRoZXJlIGFyZSBsaWd0aGVyIHZlcnNpb25zIG9mIHRoaXMgLSBjYWxsZWQKPj4+IOKA mEZVQeKAmSBhbmQg4oCYRkxVU0jigJkuIERlcGVuZGluZyBvbiB0aGUgaW50ZXJuYWwgaW1wbGVt ZW50YXRpb24KPj4+IG9mIHRoZSBzdG9yYWdlIHRoZXkgYXJlIGVpdGhlciBpZ25vcmVkIG9yIGRv IHRoZSByaWdodCB0aGluZy4gVGhlCj4+PiBmaWxlc3lzdGVtcyBkZXRlcm1pbmUgdGhlIHZpYWJp bGl0eSBvZiB0aGVzZSBmbGFncyBhbmQgY2hhbmdlIHdyaXRpbmcKPj4+IHRhY3RpY3MgZGVwZW5k aW5nIG9uIHRoaXMuIEZyb20gYSBwcm90b2NvbCBsZXZlbCwgdGhpcyBtZWFucyB0aGF0IHRoZQo+ Pj4gV1JJVEUvUkVBRC9TWU5DIHJlcXVlc3RzIGNhbiBiZSBpbnRlcm1peGVkIC0gdGhlIHN0b3Jh Z2UgYnkgaXRzZWxmCj4+PiBkZXRlcm1pbmVzIHRoZSBvcmRlciBvZiB0aGUgb3BlcmF0aW9uLiBU aGUgZmlsZXN5c3RlbSBpcyB0aGUgb25lIHRoYXQKPj4+IGRldGVybWluZXMgd2hldGhlciB0aGUg V1JJVEUgc2hvdWxkIGJlIHdpdGggYSBGTFVTSCB0byBwcmVzZXJ2ZSBzb21lIGZvcm0KPj4+IG9m IGF0b21pY2l0eS4gVGhpcyBtZWFucyB3ZSBkbyBub3QgaGF2ZSB0byBwcmVzZXJ2ZSBhbiBvcmRl ciBvZiBvcGVyYXRpb25zCj4+PiAtIHNvIHdlIGNhbiBoYXZlIG11bHRpcGxlIHF1ZXVlcyBmb3Ig cmVxdWVzdCBhbmQgcmVzcG9uc2VzLiBUaGlzIGhhcwo+Pj4gc2hvdyBpbiB0aGUgbmV0d29yayB3 b3JsZCB0byBpbXByb3ZlIHBlcmZvcm1hbmNlIGNvbnNpZGVyYWJseS4KPj4+Cj4+Pgo+Pj4gSSku IFdhc3RhZ2Ugb2YgcmVzcG9uc2UvcmVxdWVzdCBvbiB0aGUgc2FtZSByaW5nLiBDdXJyZW50bHkg ZWFjaCByZXNwb25zZQo+Pj4gTVVTVCBvY2N1cHkgdGhlIHNhbWUgYW1vdW50IG9mIHNwYWNlIHRo YXQgdGhlIHJlcXVlc3Qgb2NjdXBpZXMgLSBhcyB0aGUKPj4+IHJpbmcgY2FuIGhhdmUgYm90aCBy ZXNwb25zZXMgYW5kIHJlcXVlc3RzLiBTZXBhcmF0aW5nIHRoZSByZXF1ZXN0IGFuZAo+Pj4gcmVz cG9uc2UgcmluZyB3b3VsZCByZW1vdmUgdGhlIHdhc3RhZ2UuCj4+Pgo+Pj4KPj4+IEopLiAzMi1i aXQgdnMgNjQtYml0IChvciAxMDIgYnl0ZXMgdnMgMTEyIGJ5dGVzKS4gVGhlIHNpemUgb2YgdGhl IHJpbmcKPj4+IGVudHJpZXMgaXMgZGlmZmVyZW50IGlmIHRoZSBndWVzdCBpcyBpbiAzMi1iaXQg b3IgNjQtYml0IG1vZGUuIENsZWFuaW5nCj4+PiB0aGlzIHVwIHRvIGJlIHRoZSBzYW1lIHNpemUg d291bGQgc2F2ZSBjb25zaWRlcmFibGUgYWNjb3VudGluZyB0aGF0IHRoZQo+Pj4gaG9zdCBoYXMg dG8gZG8gKGV4dHJhIG1lbWNweSBmb3IgZWFjaCByZXNwb25zZS9yZXF1ZXN0KS4KPj4KPj4gU28g Zm9ydGggSSB0aGluayBtb3N0IG9mIHRoZSBwcm9ibGVtcyBjb3VsZCBiZSBzb2x2ZWQgYnkgdXNp bmcgaW5kaXJlY3QKPj4gZGVzY3JpcHRvcnMsIGFsaWduaW5nIHJlcXVlc3RzIHRvIGEgY2FjaGUg c2Vuc2libGUgdmFsdWUgKHRvIHByZXZlbnQKPj4gc3RyYWRkbGluZykgYW5kIHVzaW5nIHNlcGFy YXRlIHJpbmdzIGZvciByZXF1ZXN0cyBhbmQgcmVzcG9uc2VzLiBUaGlzCj4+IHdvdWxkIGJlIG15 IHBsYW4gZm9yIHNvbHZpbmcgdGhpcyBpc3N1ZXM6Cj4gCj4gVGhhdCB3b3VsZCB0YWtlIGNhcmUg b2YgdGhlIGJ1bGsgb2YgdGhlIGJpZyBpc3N1ZXMuCj4gCj4+Cj4+IDEuIEltcGxlbWVudCBMUlUg bWVjaGFuaXNtIGluIGJsa2JhY2sgZm9yIHRoZSBwZXJzaXN0ZW50IGdyYW50cyBsaXN0LiBJZgo+ PiB3ZSBhcmUgZ29pbmcgdG8gaW5jcmVtZW50IHRoZSBudW1iZXIgb2YgaW4tZmxpZ2h0IElPIHdl IG5lZWQgdG8gYmUgYWJsZSB0bwo+PiBrZWVwIHRoZSBsaXN0IG9mIHBlcnNpc3RlbnRseSBtYXBw ZWQgZ3JhbnRzIHRvIHNvbWV0aGluZyBzZW5zaWJsZSwgYW5kCj4+IHdlIGFyZSBubyBsb25nZXIg YWJsZSB0byBwZXJzaXN0ZW50bHkgbWFwIGFsbCB0aGUgZ3JhbnRzIHRoYXQgY291bGQgYmUKPj4g dXNlZC4gSW4gbXkgcHJvcG9zYWwgdGhhdCB3b3VsZCBiZSA2NCAqIDQgZm9yIGVhY2ggZ3JhbnQg ZnJhbWUgdGhhdAo+IAo+IENhbiB5b3UgZXhwbGFpbiB0aGUgZm91bmRhdGlvbnMgYmVoaW5kIHRo ZSAnNjQnIGFuZCAnNCc/IEkgdGhpbmsgSSBrbm93Cj4gdGhlIDQgKEJMS0lGXy4uU0VHTUVOVFMp IGJ1dCBJIGFtIG5vdCBzdXJlIGFib3V0ICc2NCcuCgpUaGUgNCBjb21lcyBiZWNhdXNlIGluIG15 IHByb3Bvc2FsIEknbSBwYXNzaW5nIDQgaW5kaXJlY3QgZ3JhbnQgZnJhbWVzCmZpbGxlZCB3aXRo IGJsa2lmX3JlcXVlc3Rfc2VnbWVudCAoc28gZ3JlZiBpbiBibGtpZl9yZXF1ZXN0X2luZGlyZWN0 IGlzCm5vdyBhbiBhcnJheSkuCgpUaGUgNjQgY29tZXMgYmVjYXVzZSBJJ3ZlIHJlZHVjZWQgdGhl IHNpemUgb2YgYmxraWZfcmVxdWVzdCB0byAzMmJ5dGVzLApzbyBub3cgd2UgY2FuIGZpdCA2NCBi bGtpZl9yZXF1ZXN0cyBpbiBhIHJpbmcuCgpQdXR0aW5nIGl0IGFsbCB0b2dldGhlcjoKCjQgKGlu ZGlyZWN0IGdyYW50IGZyYW1lcykgKiAyNTYgKGVudHJpZXMgaW4gZWFjaCBpbmRpcmVjdCBncmFu dCBmcmFtZSkgKgo0MDk2IChQQUdFX1NJWkUpID0gNE0gSU8gaW4gYSBzaW5nbGUgcmVxdWVzdAoK NjQgKDMyYnl0ZXMgZW50cmllcyBpbiBhIHJpbmcpICogNE0gKG1heCBJTyBpbiBlYWNoIGVudHJ5 KSA9IDI1Nk0gd29ydGgKb2YgSU8gaW4gYSA0MDk2Ynl0ZXMgcmluZy4KCj4+IGNvbnRhaW5zIGlu ZGlyZWN0IGVudHJpZXMsIHBsdXMgNjQgKiA0ICogMjU2LCBmb3IgYWxsIHRoZSBwb3NzaWJsZQo+ PiBlbnRyaWVzIGluIHRoZSBpbmRpcmVjdCBmcmFtZSA2NCAqIDQgKyA2NCAqIDQgKiAyNTYgPSA2 NTc5Mi4KPiAKPiBUaGF0IHdvdWxkIGNvdmVyIH4yNTZNQiBvZiBkYXRhIHBlciBndWVzdC4gV293 Lgo+Pgo+PiAyLiBJbXBsZW1lbnQgaW5kaXJlY3QgZGVzY3JpcHRvcnMuCj4+Cj4+IDMuIEltcGxl bWVudCBuZXcgcmluZyBwcm90b2NvbCwgdXNpbmcgdHdvIHNlcGFyYXRlIHJpbmdzIGZvciByZXF1 ZXN0cwo+PiBhbmQgcmVwbGllcy4KPiAKPiBEb24ndCB3YW50IHRvIG5lZ290aWF0ZSBlYWNoIG9m IHRoZXNlIHByb3Bvc2FsIGFzIGEgc2VwZXJhdGUgZmVhdHVyZT8gU286Cj4gICAgICAgICBzZXBl cmF0ZS1yZXEtYW5kLXJzcAo+ICAgICAgICAgc2xpbS12ZXJzaW9uLW9mLXJlcQo+ICAgICAgICAg aW5kaXJldC1kZXNjcmlwdG9yCj4gICAgICAgICBtdWx0aS1wYWdlLXJpbmcKPiAgICAgICAgIGFs aWdtZW50LTY0LW9yLW90aGVyLXZhbHVlCgpZZXMsIGJ1dCBJIHdpbGwgdHJ5IHRvIGNvdXBsZSB0 aGVtIGluIGEgd2F5IHRoYXQgbWFrZXMgc2Vuc2UsIGZvcgpleGFtcGxlIHJlZHVjaW5nIHRoZSBz aXplIG9mIGJsa2lmX3JlcXVlc3Qgd2l0aG91dCB1c2luZyBpbmRpcmVjdApkZXNjcmlwdG9ycyBk b2Vzbid0IG1ha2UgbXVjaCBzZW5zZSwgc28gSSB3b3VsZCBjb3VwbGUKaW5kaXJlY3QtZGVzY3Jp cHRvciB3aXRoIHNsaW0tdmVyc2lvbi1vZi1yZXEsIHRoaXMgd2lsbCBsZWF2ZSB1cyB3aXRoCnRo ZSBmb2xsb3dpbmcgbmV3IGV4dGVuc2lvbnM6CgppbmRpcmVjdC1kZXNjcmlwdG9ycyAod2hpY2gg aW5jbHVkZXMgYSBzbGltIHZlcnNpb24gb2YgYmxraWZfcmVxdWVzdCkKc2VwYXJhdGUtcmVxLWFu ZC1yc3AKClRoaXMgd2lsbCBiZSB0aGUgdHdvIGZpcnN0IGV4dGVuc2lvbnMgd2Ugc2hvdWxkIHRy eSB0byBpbXBsZW1lbnQgZnJvbSBteQpQT1YsIGJlY2F1c2UgSSB0aGluayB0aGV5IGFyZSBnb2lu ZyB0byBkZWxpdmVyIHF1aXRlIGEgcGVyZm9ybWFuY2UgYm9vc3QuCgoKX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KWGVuLWRldmVsIG1haWxpbmcgbGlzdApY ZW4tZGV2ZWxAbGlzdHMueGVuLm9yZwpodHRwOi8vbGlzdHMueGVuLm9yZy94ZW4tZGV2ZWwK