From mboxrd@z Thu Jan 1 00:00:00 1970 From: Paul Durrant Subject: Re: [PATCH v3 0/1] netif: staging grants for I/O requests Date: Mon, 18 Sep 2017 09:45:06 +0000 Message-ID: <2ffc26fd74da440a86877c1871b2ce4a@AMSPEX02CL03.citrite.net> References: <20170913181034.28527-1-joao.m.martins@oracle.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20170913181034.28527-1-joao.m.martins@oracle.com> Content-Language: en-US List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: 'Joao Martins' , Xen-devel Cc: Wei Liu List-Id: xen-devel@lists.xenproject.org PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQo+IEZyb206IEpvYW8gTWFydGlucyBbbWFpbHRv OmpvYW8ubS5tYXJ0aW5zQG9yYWNsZS5jb21dCj4gU2VudDogMTMgU2VwdGVtYmVyIDIwMTcgMTk6 MTEKPiBUbzogWGVuLWRldmVsIDx4ZW4tZGV2ZWxAbGlzdHMueGVuLm9yZz4KPiBDYzogV2VpIExp dSA8d2VpLmxpdTJAY2l0cml4LmNvbT47IFBhdWwgRHVycmFudCA8UGF1bC5EdXJyYW50QGNpdHJp eC5jb20+Owo+IEtvbnJhZCBSemVzenV0ZWsgV2lsayA8a29ucmFkLndpbGtAb3JhY2xlLmNvbT47 IEpvYW8gTWFydGlucwo+IDxqb2FvLm0ubWFydGluc0BvcmFjbGUuY29tPgo+IFN1YmplY3Q6IFtQ QVRDSCB2MyAwLzFdIG5ldGlmOiBzdGFnaW5nIGdyYW50cyBmb3IgSS9PIHJlcXVlc3RzCj4gCj4g SGV5LAo+IAo+IFRoaXMgaXMgdjMgdGFraW5nIGludG8gY29uc2lkZXJhdGlvbiBhbGwgY29tbWVu dHMgcmVjZWl2ZWQgZnJvbSB2MiAoY2hhbmdlbG9nCj4gaW4gdGhlIGZpcnN0IHBhdGNoKS4gVGhl IHNwZWNpZmljYXRpb24gaXMgcmlnaHQgYWZ0ZXIgdGhlIGRpZmZzdGF0Lgo+IAo+IFJlZmVyZW5j ZSBpbXBsZW1lbnRhdGlvbiBhbHNvIGhlcmUgKG9uIHRvcCBvZiBuZXQtbmV4dCk6Cj4gCj4gaHR0 cHM6Ly9naXRodWIuY29tL2pwZW1hcnRpbnMvbGludXguZ2l0IHhlbi1uZXQtc3RnLWdudHMtdjMK PiAKPiBBbHRob3VnaCBJIGFtIHNhdGlzZmllZCB3aXRoIGhvdyB0aGluZ3MgYXJlIGJlaW5nIGRv bmUgYWJvdmUsIEkgd2FudGVkCj4gdG8gcmVxdWVzdCBzb21lIGFkdmlzZS9pbnB1dCBvbiB3aGV0 aGVyIHRoZXJlIGNvdWxkIGJlIGEgc2ltcGxlciB3YXkgb2YKPiBhY2hpZXZpbmcgdGhlIHNhbWUu IFNwZWNpZmljYWxseSBiZWNhdXNlIHRoZXNlIGNvbnRyb2wgbWVzc2FnZXMKPiBhZGRzIHVwIHNp Z25pZmljYW50IGNvZGUgb24gdGhlIGZyb250ZW5kIHRvIHByZWdyYW50LCBhbmQgaW4gb3RoZXIg Y2FzZXMgdGhlCj4gY29udHJvbCBtZXNzYWdlIG1pZ2h0IGJlIGxpbWl0YXRpdmUgaWYgZnJvbnRl bmQgdHJpZXMgdG8ga2VlcCBhIGRpbmFtaWNhbGx5Cj4gY2hhbmdlZCBidWZmZXIgcG9vbCBpbiBk aWZmZXJlbnQgcXVldWVzLiAqTWF5YmUqIGl0IGNvdWxkIGJlIHNpbXBsZXIgdG8KPiBhZGp1c3QK PiB0aGUgVFgvUlggcmluZyBBQkkgaW4gYSBjb21wYXRpYmxlIG1hdHRlciAoRGlzY2xhaW1lcjog SSBoYXZlbid0IGltcGxlbWVudGVkCj4gdGhpcyBqdXN0IHlldCk6CgpCdXQgdGhlIHdob2xlIHBv aW50IG9mIHByZS1ncmFudGluZyBpcyB0byBzZXBhcmF0ZSB0aGUgZ3JhbnQvdW5ncmFudCBvcGVy YXRpb25zIGZyb20gdGhlIHJ4L3R4IG9wZXJhdGlvbnMsIHJpZ2h0PyBTbywgd2h5IHdvdWxkIHRo ZSBleHRyYSBjb250cm9sIG1lc3NhZ2VzIHJlYWxseSBiZSBhbiBvdmVyaGVhZD8KCiAgUGF1bAoK PiAKPiAgMSkgQWRkIGEgZmxhZyBgTkVUVFhGX3BlcnNpc3RgIHRvIGBuZXRpZl90eF9yZXF1ZXN0 YAo+IAo+ICAyKSBSZXBsYWNlIFJYIGBuZXRpZl9yeF9yZXF1ZXN0YCBwYWRkaW5nIHdpdGggYGZs YWdzYCBhbmQgYWRkYQo+ICBgTkVUUlhGX3BlcnNpc3RgIHdpdGggdGhlIHNhbWUgcHVycG9zZSBh cyAxKS4KPiAKPiAgMykgVGhpcyByZW1haW5zIGJhY2t3YXJkcyBjb21wYXRpYmxlIGFzIGJhY2tl bmRzIG5vdCBzdXBwb3J0aW5nIHRoaXMKPiB3b3VsZG4ndAo+ICBhY3Qgb24gdGhpcyBuZXcgZmxh ZywgYW5kIGdpdmVuIHdlIHJlcGxhY2UgcGFkZGluZyB3aXRoIGZsYWdzIG1lYW5zCj4gdW5zdXBw b3J0ZWQKPiAgYmFja2VuZHMgd29uJ3Qgc2ltcGx5IGJlIGF3YXJlIG9mIFJYICpyZXF1ZXN0KiBg ZmxhZ3NgLiBUaGlzIGlzIHVuZGVyIHRoZQo+ICBhc3N1bXB0aW9uIHRoYXQgdGhlcmUncyBubyBy ZXF1aXJlbWVudCB0aGF0IHBhZGRpbmcgbXVzdCBiZSB6ZXJvCj4gdGhyb3VnaG91dAo+ICB0aGUg bmV0aWYuaCBzcGVjaWZpY2F0aW9uLgo+IAo+ICA0KSBLZWVwaW5nIGBHRVRfR1JFRl9NQVBQSU5H X1NJWkVgIGN0cmwgbXNnIGZvciBmcm9udGVuZCB0byBkbyBiZXR0ZXIKPiAgZGVjaXNpb25zPwo+ IAo+ICA1KSBTZW1hbnRpY3MgYXJlIHNpbXBsZTogc2xvdHMgd2l0aCBmbGFncyBtYXJrZWQgYXMg TkVUe1JYLFRYfUZfcGVyc2lzdAo+ICByZXByZXNlbnQgYSBwZXJtYW5lbnQgbWFwcGVkIHJlZiBh bmQgdGhlcmVmb3JlIG1hcHBlZCBpZiBub24tZXhpc3RlbnQuCj4gICpmdXR1cmUqIG9taXNzaW9u cyBvZiB0aGUgZmxhZyBzaWduYWxzIHRoZSBtYXBwaW5nIHNob3VsZCBiZSByZW1vdmVkLgo+IAo+ IFRoaXMgd291bGQgYWxsb3cgZ3Vlc3RzIHdoaWNoIHJldXNlIGJ1ZmZlcnMgKGFwcGFyZW50bHkg V2luZG93cyA6KSkgdG8gc2NhbGUKPiBiZXR0ZXIgYXMgdW5tYXBzIHdvdWxkIGJlIGRvbmUgb24g dGhlIGluZGl2aWR1YWwgcXVldWUgY29udGV4dCAgcGx1cwo+IGFsbG93aW5nCj4gZnJvbnRlbmQg dG8gcmVtYWluIGEgbW9yZSBzaW1wbGUgaW4gdGhlIG1hbmFnZW1lbnQgb2YgInBlcm1hbmVudCIK PiBidWZmZXJzLiBUaGUKPiBkcmF3YmFjayBzZWVtcyB0byBiZSB0aGUgYWRkZWQgY29tcGxleGl0 eSAoYW5kIHNvbWV3aGF0IHJhY3kgYmVoYXZpb3VyKQo+IG9uIHRoZQo+IGRhdGFwYXRoLCB0byBt YXAgb3IgdW5tYXAgYWNjb3JkaW5nbHkuIEJlY2F1c2Ugbm93IHdlIHdvdWxkIGhhdmUgdG8KPiBk aWZmZXJlbnRpYXRlIGJldHdlZW4gbG9uZyB2cyBzaG9ydCBsaXZlZCBtYXAvdW5tYXAgb3BzIGlu IGFkZGl0aW9uIHRvCj4gbG9va2luZwo+IHVwIG9uIG91ciBtYXBwaW5ncyB0YWJsZS4gVGhvdWdo dHMsIG9yIHBlcmhhcHMgcGVvcGxlIG1heSBwcmVmZXIgdGhlIG9uZQo+IGFscmVhZHkgZGVzY3Jp YmVkIGluIHRoZSBzZXJpZXM/Cj4gCj4gQ2hlZXJzLAo+IAo+IEpvYW8gTWFydGlucyAoMSk6Cj4g ICBwdWJsaWMvaW8vbmV0aWYuaDogYWRkIGdyZWYgbWFwcGluZyBjb250cm9sIG1lc3NhZ2VzCj4g Cj4gIHhlbi9pbmNsdWRlL3B1YmxpYy9pby9uZXRpZi5oIHwgMTE1Cj4gKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrCj4gIDEgZmlsZSBjaGFuZ2VkLCAxMTUgaW5zZXJ0 aW9ucygrKQo+IC0tLQo+ICUgU3RhZ2luZyBncmFudHMgZm9yIG5ldHdvcmsgSS9PIHJlcXVlc3Rz Cj4gJSBKb2FvIE1hcnRpbnMgPDxqb2FvLm0ubWFydGluc0BvcmFjbGUuY29tPj4KPiAlIFJldmlz aW9uIDMKPiAKPiBcY2xlYXJwYWdlCj4gCj4gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KPiBBcmNoaXRlY3R1cmUocyk6 IEFueQo+IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCj4gCj4gIyBCYWNrZ3JvdW5kIGFuZCBNb3RpdmF0aW9uCj4gCj4g QXQgdGhlIFhlbiBoYWNrYXRvbiAnMTYgbmV0d29ya2luZyBzZXNzaW9uLCB3ZSBzcG9rZSBhYm91 dCBoYXZpbmcgYQo+IHBlcm1hbmVudGx5Cj4gbWFwcGVkIHJlZ2lvbiB0byBkZXNjcmliZSBoZWFk ZXIvbGluZWFyIHJlZ2lvbiBvZiBwYWNrZXQgYnVmZmVycy4gVGhpcwo+IGRvY3VtZW50Cj4gb3V0 bGluZXMgdGhlIHByb3Bvc2FsIGNvdmVyaW5nIG1vdGl2YXRpb24gb2YgdGhpcyBhbmQgYXBwbGlj YWJpbGl0eSBmb3Igb3RoZXIKPiB1c2UtY2FzZXMgYWxvbmdzaWRlIHRoZSBuZWNlc3NhcnkgY2hh bmdlcy4gVGhpcyBwcm9wb3NhbCBpcyBhbiBSRkMgYW5kIGFsc28KPiBpbmNsdWRlcyBhbHRlcm5h dGl2ZSBzb2x1dGlvbnMuCj4gCj4gVGhlIG1vdGl2YXRpb24gb2YgdGhpcyB3b3JrIGlzIHRvIGVs aW1pbmF0ZSBncmFudCBvcHMgZm9yIHBhY2tldCBJL08gaW50ZW5zaXZlCj4gd29ya2xvYWRzIHN1 Y2ggYXMgdGhvc2Ugb2JzZXJ2ZWQgd2l0aCBzbWFsbGVyIHJlcXVlc3RzIHNpemUgKGkuZS4gPD0g MjU2Cj4gYnl0ZXMKPiBvciA8PSBNVFUpLiBDdXJyZW50bHkgb24gWGVuLCBvbmx5IGJ1bGsgdHJh bnNmZXIgKGUuZy4gMzJLLi42NEsgcGFja2V0cykgYXJlCj4gdGhlCj4gb25seSBvbmVzIHBlcmZv cm1pbmcgcmVhbGx5IGdvb2QgKHVwIHRvIDgwIEdiaXQvcyBpbiBmZXcgQ1BVcyksIHVzdWFsbHkK PiBiYWNraW5nIGVuZC1ob3N0cyBhbmQgc2VydmVyIGFwcGxpYW5jZXMuIEFueXRoaW5nIHRoYXQg aW52b2x2ZXMgaGlnaGVyCj4gcGFja2V0Cj4gcmF0ZXMgKDw9IDE1MDAgTVRVKSBvciB3aXRob3V0 IHNnLCBwZXJmb3JtcyBiYWRseSBhbG1vc3QgbGlrZSBhIDEgR2JpdC9zCj4gdGhyb3VnaHB1dC4K PiAKPiAjIFByb3Bvc2FsCj4gCj4gVGhlIHByb3Bvc2FsIGlzIHRvIGxldmVyYWdlIHRoZSBhbHJl YWR5IGltcGxpY2l0IGNvcHkgZnJvbSBhbmQgdG8gcGFja2V0IGxpbmVhcgo+IGRhdGEgb24gbmV0 ZnJvbnQgYW5kIG5ldGJhY2ssIHRvIGJlIGRvbmUgaW5zdGVhZCBmcm9tIGEgcGVybWFuZW50bHkK PiBtYXBwZWQKPiByZWdpb24uIEluIHNvbWUgKHBoeXNpY2FsKSBOSUNzIHRoaXMgaXMga25vd24g YXMgaGVhZGVyL2RhdGEgc3BsaXQuCj4gCj4gU3BlY2lmaWNhbGx5IHNvbWUgd29ya2xvYWRzIChl LmcuIE5GVikgaXQgd291bGQgcHJvdmlkZSBhIGJpZyBpbmNyZWFzZSBpbgo+IHRocm91Z2hwdXQg d2hlbiB3ZSBzd2l0Y2ggdG8gKHplcm8pY29weWluZyBpbiB0aGUgYmFja2VuZC9mcm9udGVuZCwK PiBpbnN0ZWFkIG9mCj4gdGhlIGdyYW50IGh5cGVyY2FsbHMuIFRodXMgdGhpcyBleHRlbnNpb24g YWltcyBhdCBmdXR1cmVwcm9vZmluZyB0aGUgbmV0aWYKPiBwcm90b2NvbCBieSBhZGRpbmcgdGhl IHBvc3NpYmlsaXR5IG9mIGd1ZXN0cyBzZXR0aW5nIHVwIGEgbGlzdCBvZiBncmFudHMgdGhhdAo+ IGFyZSBzZXQgdXAgYXQgZGV2aWNlIGNyZWF0aW9uIGFuZCByZXZva2VkIGF0IGRldmljZSBmcmVl aW5nIC0gd2l0aG91dCB0YWtpbmcKPiB0b28gbXVjaCBncmFudCBlbnRyaWVzIGluIGFjY291bnQg Zm9yIHRoZSBnZW5lcmFsIGNhc2UgKGkuZS4gdG8gY292ZXIgb25seSB0aGUKPiBoZWFkZXIgcmVn aW9uIDw9IDI1NiBieXRlcywgMTYgZ3JhbnRzIHBlciByaW5nKSB3aGlsZSBjb25maWd1cmFibGUg Ynkga2VybmVsCj4gd2hlbiBvbmUgd2FudHMgdG8gcmVzb3J0IHRvIGEgY29weS1iYXNlZCBhcyBv cHBvc2VkIHRvIGdyYW50IGNvcHkvbWFwLgo+IAo+IFxjbGVhcnBhZ2UKPiAKPiAjIEdlbmVyYWwg T3BlcmF0aW9uCj4gCj4gSGVyZSB3ZSBkZXNjcmliZSBob3cgbmV0YmFjayBhbmQgbmV0ZnJvbnQg Z2VuZXJhbCBvcGVyYXRlLCBhbmQgd2hlcmUgdGhlCj4gcHJvcG9zZWQKPiBzb2x1dGlvbiB3aWxs IGZpdC4gVGhlIHNlY3VyaXR5IG1lY2hhbmlzbSBjdXJyZW50bHkgaW52b2x2ZXMgZ3JhbnRzIHJl ZmVyZW5jZXMKPiB3aGljaCBpbiBlc3NlbmNlIGFyZSByb3VuZC1yb2JpbiByZWN5Y2xlZCAndGlj a2V0cycgc3RhbXBlZCB3aXRoIHRoZSBHUEZOcywKPiBwZXJtaXNzaW9uIGF0dHJpYnV0ZXMsIGFu ZCB0aGUgYXV0aG9yaXplZCBkb21haW46Cj4gCj4gKFRoaXMgaXMgYW4gaW4tbWVtb3J5IHZpZXcg b2Ygc3RydWN0IGdyYW50X2VudHJ5X3YxKToKPiAKPiAgICAgIDAgICAgIDEgICAgIDIgICAgIDMg ICAgIDQgICAgIDUgICAgIDYgICAgIDcgb2N0ZXQKPiAgICAgKy0tLS0tLS0tLS0tLSstLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCj4gICAgIHwgZmxhZ3MgICAgICB8IGRvbWFp biBpZCB8IGZyYW1lICAgICAgICAgICAgICAgICAgfAo+ICAgICArLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKPiAKPiBXaGVyZSB0aGVyZSBhcmUgTiBn cmFudCBlbnRyaWVzIGluIGEgZ3JhbnQgdGFibGUsIGZvciBleGFtcGxlOgo+IAo+ICAgICBAMDoK PiAgICAgKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0r Cj4gICAgIHwgcncgICAgICAgICB8IDAgICAgICAgICB8IDB4QUJDREVGICAgICAgICAgICAgICAg fAo+ICAgICArLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LSsKPiAgICAgfCBydyAgICAgICAgIHwgMCAgICAgICAgIHwgMHhGQTEyNCAgICAgICAgICAgICAg ICB8Cj4gICAgICstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tKwo+ICAgICB8IHJvICAgICAgICAgfCAxICAgICAgICAgfCAweEJFRUYgICAgICAgICAgICAg ICAgIHwKPiAgICAgKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0rCj4gCj4gICAgICAgLi4uLi4KPiAgICAgQE46Cj4gICAgICstLS0tLS0tLS0tLS0rLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwo+ICAgICB8IHJ3ICAgICAgICAgfCAw ICAgICAgICAgfCAweDk5MjNBICAgICAgICAgICAgICAgIHwKPiAgICAgKy0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCj4gCj4gRWFjaCBlbnRyeSBjb25z dW1lcyA4IGJ5dGVzLCB0aGVyZWZvcmUgNTEyIGVudHJpZXMgY2FuIGZpdCBvbiBvbmUgcGFnZS4K PiBUaGUgYGdudHRhYl9tYXhfZnJhbWVzYCB3aGljaCBpcyBhIGRlZmF1bHQgb2YgMzIgcGFnZXMu IEhlbmNlIDE2LDM4NAo+IGdyYW50cy4gVGhlIFBhcmFWaXJ0dWFsaXplZCAoUFYpIGRyaXZlcnMg d2lsbCB1c2UgdGhlIGdyYW50IHJlZmVyZW5jZSAoaW5kZXgKPiBpbiB0aGUgZ3JhbnQgdGFibGUg LSAwIC4uIE4pIGluIHRoZWlyIGNvbW1hbmQgcmluZy4KPiAKPiBcY2xlYXJwYWdlCj4gCj4gIyMg R3Vlc3QgVHJhbnNtaXQKPiAKPiBUaGUgdmlldyBvZiB0aGUgc2hhcmVkIHRyYW5zbWl0IHJpbmcg aXMgdGhlIGZvbGxvd2luZzoKPiAKPiAgICAgIDAgICAgIDEgICAgIDIgICAgIDMgICAgIDQgICAg IDUgICAgIDYgICAgIDcgb2N0ZXQKPiAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0rCj4gICAgIHwgcmVxX3Byb2QgICAgICAgICAgICAgICB8IHJl cV9ldmVudCAgICAgICAgICAgICAgfAo+ICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKPiAgICAgfCByc3BfcHJvZCAgICAgICAgICAgICAgIHwg cnNwX2V2ZW50ICAgICAgICAgICAgICB8Cj4gICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0r LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwo+ICAgICB8IHB2dCAgICAgICAgICAgICAgICAgICAg fCBwYWRbNDRdICAgICAgICAgICAgICAgIHwKPiAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LSsgICAgICAgICAgICAgICAgICAgICAgICB8Cj4gICAgIHwgLi4uLiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbNjRieXRlc10KPiAgICAgKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLVwKPiAgICAgfCBncmVmICAg ICAgICAgICAgICAgICAgIHwgb2Zmc2V0ICAgIHwgZmxhZ3MgICAgICB8IHwKPiAgICAgKy0tLS0t LS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rICstJ3N0cnVjdAo+ ICAgICB8IGlkICAgICAgICAgfCBzaXplICAgICAgfCBpZCAgICAgICAgfCBzdGF0dXMgICAgIHwg fCBuZXRpZl90eF9zcmluZ19lbnRyeScKPiAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS8KPiAgICAgfC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wv XC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wvXC98IC4uIE4KPiAgICAgKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCj4gCj4gRWFjaCBlbnRyeSBjb25zdW1l cyAxNiBvY3RldHMgdGhlcmVmb3JlIDI1NiBlbnRyaWVzIGNhbiBmaXQgb24gb25lCj4gcGFnZS5g c3RydWN0Cj4gbmV0aWZfdHhfc3JpbmdfZW50cnlgIGluY2x1ZGVzIGJvdGggYHN0cnVjdCBuZXRp Zl90eF9yZXF1ZXN0YCAoZmlyc3QgMTIgb2N0ZXRzKQo+IGFuZCBgc3RydWN0IG5ldGlmX3R4X3Jl c3BvbnNlYCAobGFzdCA0IG9jdGV0cykuICBBZGRpdGlvbmFsbHkgYSBgc3RydWN0Cj4gbmV0aWZf ZXh0cmFfaW5mb2AgbWF5IG92ZXJsYXkgdGhlIHJlcXVlc3QgaW4gd2hpY2ggY2FzZSB0aGUgZm9y bWF0IGlzOgo+IAo+ICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLSstXAo+ICAgICB8IHR5cGUgfGZsYWdzfCB0eXBlIHNwZWNpZmljIGRhdGEgKGdz bywgaGFzaCwgZXRjKXwgfAo+ICAgICArLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLSsgKy0nc3RydWN0Cj4gICAgIHwgcGFkZGluZyBmb3IgdHggICAgICAg ICB8IHVudXNlZCAgICAgICAgICAgICAgICAgfCB8IG5ldGlmX2V4dHJhX2luZm8nCj4gICAgICst LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0vCj4gCj4g SW4gZXNzZW5jZSB0aGUgdHJhbnNtaXNzaW9uIG9mIGEgcGFja2V0IGluIGEgZnJvbSBmcm9udGVu ZCB0byB0aGUgYmFja2VuZAo+IG5ldHdvcmsgc3RhY2sgZ29lcyBhcyBmb2xsb3dpbmc6Cj4gCj4g KipGcm9udGVuZCoqCj4gCj4gMSkgQ2FsY3VsYXRlIGhvdyBtYW55IHNsb3RzIGFyZSBuZWVkZWQg Zm9yIHRyYW5zbWl0dGluZyB0aGUgcGFja2V0Lgo+ICAgIEZhaWwgaWYgdGhlcmUgYXJlIGFyZW4n dCBlbm91Z2ggc2xvdHMuCj4gCj4gWyBDYWxjdWxhdGlvbiBuZWVkcyB0byBlc3RpbWF0ZSBzbG90 cyB0YWtpbmcgaW50byBhY2NvdW50IDRrIHBhZ2UgYm91bmRhcnkgXQo+IAo+IDIpIE1ha2UgZmly c3QgcmVxdWVzdCBmb3IgdGhlIHBhY2tldC4KPiAgICBUaGUgZmlyc3QgcmVxdWVzdCBjb250YWlu cyB0aGUgd2hvbGUgcGFja2V0IHNpemUsIGNoZWNrc3VtIGluZm8sCj4gICAgZmxhZyB3aGV0aGVy IGl0IGNvbnRhaW5zIGV4dHJhIG1ldGFkYXRhLCBhbmQgaWYgZm9sbG93aW5nIHNsb3RzIGNvbnRh aW4KPiAgICBtb3JlIGRhdGEuCj4gCj4gMykgUHV0IGdyYW50IGluIHRoZSBgZ3JlZmAgZmllbGQg b2YgdGhlIHR4IHNsb3QuCj4gCj4gNCkgU2V0IGV4dHJhIGluZm8gaWYgcGFja2V0IHJlcXVpcmVz IHNwZWNpYWwgbWV0YWRhdGEgKGUuZy4gR1NPIHNpemUpCj4gCj4gNSkgSWYgdGhlcmUncyBzdGls bCBkYXRhIHRvIGJlIGdyYW50ZWQgc2V0IGZsYWcgYE5FVFRYRl9tb3JlX2RhdGFgIGluCj4gcmVx dWVzdCBgZmxhZ3NgLgo+IAo+IDYpIEdyYW50IHJlbWFpbmluZyBwYWNrZXQgcGFnZXMgb25lIHBl ciBzbG90LiAoZ3JhbnQgYm91bmRhcnkgaXMgNGspCj4gCj4gNykgRmlsbCByZXN1bHRhbnQgZ3Jl ZnMgaW4gdGhlIHNsb3RzIHNldHRpbmcgYE5FVFRYRl9tb3JlX2RhdGFgIGZvciB0aGUgTi0xLgo+ IAo+IDgpIEZpbGwgdGhlIHRvdGFsIHBhY2tldCBzaXplIGluIHRoZSBmaXJzdCByZXF1ZXN0Lgo+ IAo+IDkpIFNldCBjaGVja3N1bSBpbmZvIG9mIHRoZSBwYWNrZXQgKGlmIHRoZSBjaGtzdW0gb2Zm bG9hZCBpZiBzdXBwb3J0ZWQpCj4gCj4gMTApIFVwZGF0ZSB0aGUgcmVxdWVzdCBwcm9kdWNlciBp bmRleCAoYHJlcV9wcm9kYCkKPiAKPiAxMSkgQ2hlY2sgd2hldGhlciBiYWNrZW5kIG5lZWRzIGEg bm90aWZpY2F0aW9uCj4gCj4gMTEuMSkgUGVyZm9ybSBoeXBlcmNhbGwgYEVWVENITk9QX3NlbmRg IHdoaWNoIG1pZ2h0IG1lYW4gYSBfX1ZNRVhJVF9fCj4gICAgICAgZGVwZW5kaW5nIG9uIHRoZSBn dWVzdCB0eXBlLgo+IAo+ICoqQmFja2VuZCoqCj4gCj4gMTIpIEJhY2tlbmQgZ2V0cyBhbiBpbnRl cnJ1cHQgYW5kIHJ1bnMgaXRzIGludGVycnVwdCBzZXJ2aWNlIHJvdXRpbmUuCj4gCj4gMTMpIEJh Y2tlbmQgY2hlY2tzIGlmIHRoZXJlIGFyZSB1bmNvbnN1bWVkIHJlcXVlc3RzCj4gCj4gMTQpIEJh Y2tlbmQgY29uc3VtZSBhIHJlcXVlc3QgZnJvbSB0aGUgcmluZwo+IAo+IDE1KSBQcm9jZXNzIGV4 dHJhIGluZm8gKGUuZy4gaWYgR1NPIGluZm8gd2FzIHNldCkKPiAKPiAxNikgQ291bnRzIGFsbCBy ZXF1ZXN0cyBmb3IgdGhpcyBwYWNrZXQgdG8gYmUgcHJvY2Vzc2VkICh3aGlsZQo+IGBORVRUWEZf bW9yZV9kYXRhYCBpcyBzZXQpIGFuZCBwZXJmb3JtcyBhIGZldyB2YWxpZGF0aW9uIHRlc3RzOgo+ IAo+IDE2LjEpIEZhaWwgdHJhbnNtaXNzaW9uIGlmIHRvdGFsIHBhY2tldCBzaXplIGlzIHNtYWxs ZXIgdGhhbiBFdGhlcm5ldAo+IG1pbmltdW0gYWxsb3dlZDsKPiAKPiAgIEZhaWxpbmcgdHJhbnNt aXNzaW9uIG1lYW5zIGZpbGxpbmcgYGlkYCBvZiB0aGUgcmVxdWVzdCBhbmQKPiAgIGBzdGF0dXNg IG9mIGBORVRJRl9SU1BfRVJSYCBvZiBgc3RydWN0IG5ldGlmX3R4X3Jlc3BvbnNlYDsKPiAgIHVw ZGF0ZSByc3BfcHJvZCBhbmQgZmluYWxseSBub3RpZnkgZnJvbnRlbmQgKHRocm91Z2ggYEVWVENI Tk9QX3NlbmRgKS4KPiAKPiAxNi4yKSBGYWlsIHRyYW5zbWlzc2lvbiBpZiBvbmUgb2YgdGhlIHNs b3RzIChzaXplICsgb2Zmc2V0KSBjcm9zc2VzIHRoZSBwYWdlCj4gYm91bmRhcnkKPiAKPiAxNi4z KSBGYWlsIHRyYW5zbWlzc2lvbiBpZiBudW1iZXIgb2Ygc2xvdHMgYXJlIGJpZ2dlciB0aGFuIHNw ZWMgZGVmaW5lZAo+ICgxOCBzbG90cyBtYXggaW4gbmV0aWYuaCkKPiAKPiAxNykgQWxsb2NhdGUg cGFja2V0IG1ldGFkYXRhCj4gCj4gWyAqTGludXggc3BlY2lmaWMqOiBUaGlzIHN0cnVjdHVyZSBl bWNvbXBhc3NlcyBhIGxpbmVhciBkYXRhIHJlZ2lvbiB3aGljaAo+IGdlbmVyYWxseSBhY2NvbW9k YXRlcyB0aGUgcHJvdG9jb2wgaGVhZGVyIGFuZCBzdWNoLiBOZXRiYWNrIGFsbG9jYXRlcyB1cAo+ IHRvIDEyOAo+IGJ5dGVzIGZvciB0aGF0LiBdCj4gCj4gMTgpICpMaW51eCBzcGVjaWZpYyo6IFNl dHVwIHVwIGEgYEdOVFRBQk9QX2NvcHlgIHRvIGNvcHkgdXAgdG8gMTI4IGJ5dGVzIHRvCj4gdGhp cyBzbWFsbAo+IHJlZ2lvbiAobGluZWFyIHBhcnQgb2YgdGhlIHNrYikgKm9ubHkqIGZyb20gdGhl IGZpcnN0IHNsb3QuCj4gCj4gMTkpIFNldHVwIEdOVFRBQk9QIG9wZXJhdGlvbnMgdG8gY29weS9t YXAgdGhlIHBhY2tldAo+IAo+IDIwKSBQZXJmb3JtIHRoZSBgR05UVEFCT1BfY29weWAgKGdyYW50 IGNvcHkpIGFuZC9vcgo+IGBHTlRUQUJPUF9tYXBfZ3JhbnRfcmVmYAo+ICAgICBoeXBlcmNhbGxz Lgo+IAo+IFsgKkxpbnV4LXNwZWNpZmljKjogZG9lcyBhIGNvcHkgZm9yIHRoZSBsaW5lYXIgcmVn aW9uICg8PTEyOCBieXRlcykgYW5kIG1hcHMKPiB0aGUKPiAgICAgICAgICByZW1haW5pbmcgc2xv dHMgYXMgZnJhZ3MgZm9yIHRoZSByZXN0IG9mIHRoZSBkYXRhIF0KPiAKPiAyMSkgQ2hlY2sgaWYg dGhlIGdyYW50IG9wZXJhdGlvbnMgd2VyZSBzdWNjZXNzZnVsIGFuZCBmYWlsIHRyYW5zbWlzc2lv biBpZgo+IGFueSBvZiB0aGUgcmVzdWx0YW50IG9wZXJhdGlvbiBgc3RhdHVzYCB3ZXJlIGRpZmZl cmVudCB0aGFuIGBHTlRTVF9va2F5YC4KPiAKPiAyMS4xKSBJZiBpdCdzIGEgZ3JhbnQgY29weWlu ZyBiYWNrZW5kLCB0aGVyZWZvcmUgcHJvZHVjZSByZXNwb25zZXMgZm9yIGFsbCB0aGUKPiB0aGUg Y29waWVkIGdyYW50cyBsaWtlIGluIDE2LjEpLiBPbmx5IGRpZmZlcmVuY2UgaXMgdGhhdCBzdGF0 dXMgaXMKPiBgTkVUSUZfUlNQX09LQVlgLgo+IAo+IDIxLjIpIFVwZGF0ZSB0aGUgcmVzcG9uc2Ug cHJvZHVjZXIgaW5kZXggKGByc3BfcHJvZGApCj4gCj4gMjIpIFNldCB1cCBnc28gaW5mbyByZXF1 ZXN0ZWQgYnkgZnJvbnRlbmQgW29wdGlvbmFsXQo+IAo+IDIzKSBTZXQgZnJvbnRlbmQgcHJvdmlk ZWQgY2hlY2tzdW0gaW5mbwo+IAo+IDI0KSAqTGludXgtc3BlY2lmaWMqOiBSZWdpc3RlciBkZXN0 cnVjdG9yIGNhbGxiYWNrIHdoZW4gcGFja2V0IHBhZ2VzIGFyZQo+IGZyZWVkLgo+IAo+IDI1KSBD YWxsIGludG8gdG8gdGhlIG5ldHdvcmsgc3RhY2suCj4gCj4gMjYpIFVwZGF0ZSBgcmVxX2V2ZW50 YCB0byBgcmVxdWVzdCBjb25zdW1lciBpbmRleCArIDFgIHRvIHJlY2VpdmUgYQo+IG5vdGlmaWNh dGlvbgo+ICAgICBvbiB0aGUgZmlyc3QgcHJvZHVjZWQgcmVxdWVzdCBmcm9tIGZyb250ZW5kLgo+ ICAgICBbb3B0aW9uYWwsIGlmIGJhY2tlbmQgaXMgcG9sbGluZyB0aGUgcmluZyBhbmQgbmV2ZXIg c2xlZXBzXQo+IAo+IDI3KSAqTGludXgtc3BlY2lmaWMqOiBQYWNrZXQgZGVzdHJ1Y3RvciBjYWxs YmFjayBpcyBjYWxsZWQuCj4gCj4gMjcuMSkgU2V0IHVwIGBHTlRUQUJPUF91bm1hcF9ncmFudF9y ZWZgIG9wcyBmb3IgdGhlIGRlc2lnbmF0ZWQgcGFja2V0Cj4gcGFnZXMuCj4gCj4gMjcuMikgT25j ZSBkb25lLCBwZXJmb3JtIGBHTlRUQUJPUF91bm1hcF9ncmFudF9yZWZgIGh5cGVyY2FsbC4KPiBV bmRlcmx5aW5nCj4gdGhpcyBoeXBlcmNhbGwgYSBUTEIgZmx1c2ggb2YgYWxsIGJhY2tlbmQgdkNQ VVMgaXMgZG9uZS4KPiAKPiAyNy4zKSBQcm9kdWNlIFR4IHJlc3BvbnNlIGxpa2Ugc3RlcCAyMS4x KSBhbmQgMjEuMikKPiAKPiBbKkxpbnV4LXNwZWNpZmljKjogSXQgY29udGFpbnMgYSB0aHJlYWQg dGhhdCBpcyB3b2tlbiBmb3IgdGhpcyBwdXJwb3NlLiBBbmQKPiBpdCBiYXRjaCB0aGVzZSB1bm1h cCBvcGVyYXRpb25zLiBUaGUgY2FsbGJhY2sganVzdCBxdWV1ZXMgYW5vdGhlciB1bm1hcC5dCj4g Cj4gMjcuNCkgQ2hlY2sgd2hldGhlciBmcm9udGVuZCByZXF1ZXN0ZWQgYSBub3RpZmljYXRpb24K PiAKPiAyNy40LjEpIElmIHNvLCBQZXJmb3JtIGh5cGVyY2FsbCBgRVZUQ0hOT1Bfc2VuZGAgd2hp Y2ggbWlnaHQgbWVhbiBhCj4gX19WTUVYSVRfXwo+ICAgICAgIGRlcGVuZGluZyBvbiB0aGUgZ3Vl c3QgdHlwZS4KPiAKPiAqKkZyb250ZW5kKioKPiAKPiAyOCkgVHJhbnNtaXQgaW50ZXJydXB0IGlz IHJhaXNlZCB3aGljaCBzaWduYWxzIHRoZSBwYWNrZXQgdHJhbnNtaXNzaW9uCj4gY29tcGxldGlv bi4KPiAKPiAyOSkgVHJhbnNtaXQgY29tcGxldGlvbiByb3V0aW5lIGNoZWNrcyBmb3IgdW5jb25z dW1lZCByZXNwb25zZXMKPiAKPiAzMCkgUHJvY2Vzc2VzIHRoZSByZXNwb25zZXMgYW5kIHJldm9r ZXMgdGhlIGdyYW50cyBwcm92aWRlZC4KPiAKPiAzMSkgVXBkYXRlcyBgcnNwX2NvbnNgIChyZXF1 ZXN0IGNvbnN1bWVyIGluZGV4KQo+IAo+IFRoaXMgcHJvcG9zYWwgYWltcyBhdCByZW1vdmluZyBz dGVwcyAxOSkgMjApIDIxKSBieSB1c2luZyBncmVmcyBwcmV2aW91c2x5Cj4gbWFwcGVkIGF0IGd1 ZXN0IHJlcXVlc3QuIEd1ZXN0IGRlY2lkZXMgaG93IHRvIGRpc3RyaWJ1dGUgb3IgdXNlIHRoZXNl Cj4gcHJlbWFwcGVkCj4gZ3JlZnMgd2l0aCBlaXRoZXIgbGluZWFyIG9yIGZ1bGwgcGFja2V0LiBU aGlzIGFsbG93cyB1cyB0byByZXBsYWNlIHN0ZXAgMjcpCj4gKHRoZSB1bm1hcCkgcHJldmVudGlu ZyB0aGUgVExCIGZsdXNoLgo+IAo+IE5vdGUgdGhhdCBhIGdyYW50IGNvcHkgZG9lcyB0aGUgZm9s bG93aW5nIChpbiBwc2V1ZG8gY29kZSk6Cj4gCj4gCXJjdV9sb2NrKHNyY19kb21haW4pOwo+IAly Y3VfbG9jayhkc3RfZG9tYWluKTsKPiAKPiAJZm9yIChvcCA9IGdudGNvcHlbMF07IG9wIDwgbnJf b3BzOyBvcCsrKSB7Cj4gCQlzcmNfZnJhbWUgPSBfX2FjcXVpcmVfZ3JhbnRfZm9yX2NvcHkoc3Jj X2RvbWFpbiwKPiA8b3Auc3JjLmdyZWY+KTsKPiAJCV4gaGVyZSBpbXBsaWVzIGEgaG9sZGluZyBh IHBvdGVudGlhbCBjb250ZW5kZWQgcGVyIENQVSBsb2NrCj4gb24gdGhlCj4gCSAgICAgICAgICBy ZW1vdGUgZ3JhbnQgdGFibGUuCj4gCQlzcmNfdmFkZHIgPSBtYXBfZG9tYWluX3BhZ2Uoc3JjX2Zy YW1lKTsKPiAKPiAJCWRzdF9mcmFtZSA9IF9fZ2V0X3BhZ2VkX2ZyYW1lKGRzdF9kb21haW4sCj4g PG9wLmRzdC5tZm4+KQo+IAkJZHN0X3ZhZGRyID0gbWFwX2RvbWFpbl9wYWdlKGRzdF9mcmFtZSk7 Cj4gCj4gCQltZW1jcHkoZHN0X3ZhZGRyICsgPG9wLmRzdC5vZmZzZXQ+LAo+IAkJCXNyY19mcmFt ZSArIDxvcC5zcmMub2Zmc2V0PiwKPiAJCQk8b3Auc2l6ZT4pOwo+IAo+IAkJdW5tYXBfZG9tYWlu X3BhZ2Uoc3JjX2ZyYW1lKTsKPiAJCXVubWFwX2RvbWFpbl9wYWdlKGRzdF9mcmFtZSk7Cj4gCj4g CXJjdV91bmxvY2soc3JjX2RvbWFpbik7Cj4gCXJjdV91bmxvY2soZHN0X2RvbWFpbik7Cj4gCj4g TGludXggbmV0YmFjayBpbXBsZW1lbnRhdGlvbiBjb3BpZXMgdGhlIGZpcnN0IDEyOCBieXRlcyBp bnRvIGl0cyBuZXR3b3JrCj4gYnVmZmVyCj4gbGluZWFyIHJlZ2lvbi4gSGVuY2Ugb24gdGhlIGNh c2Ugb2YgdGhlIGZpcnN0IHJlZ2lvbiBpdCBpcyByZXBsYWNlZCBieSBhIG1lbWNweQo+IG9uIGJh Y2tlbmQsIGFzIG9wcG9zZWQgdG8gYSBncmFudCBjb3B5Lgo+IAo+IFxjbGVhcnBhZ2UKPiAKPiAj IyBHdWVzdCBSZWNlaXZlCj4gCj4gVGhlIHZpZXcgb2YgdGhlIHNoYXJlZCByZWNlaXZlIHJpbmcg aXMgdGhlIGZvbGxvd2luZzoKPiAKPiAgICAgIDAgICAgIDEgICAgIDIgICAgIDMgICAgIDQgICAg IDUgICAgIDYgICAgIDcgb2N0ZXQKPiAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0rCj4gICAgIHwgcmVxX3Byb2QgICAgICAgICAgICAgICB8IHJl cV9ldmVudCAgICAgICAgICAgICAgfAo+ICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKPiAgICAgfCByc3BfcHJvZCAgICAgICAgICAgICAgIHwg cnNwX2V2ZW50ICAgICAgICAgICAgICB8Cj4gICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0r LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwo+ICAgICB8IHB2dCAgICAgICAgICAgICAgICAgICAg fCBwYWRbNDRdICAgICAgICAgICAgICAgIHwKPiAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LSsgICAgICAgICAgICAgICAgICAgICAgICB8Cj4gICAgIHwgLi4uLiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbNjRieXRlc10KPiAgICAgKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCj4gICAgIHwgaWQgICAgICAg ICB8IHBhZCAgICAgICB8IGdyZWYgICAgICAgICAgICAgICAgICAgfCAtPidzdHJ1Y3QgbmV0aWZf cnhfcmVxdWVzdCcKPiAgICAgKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0rCj4gICAgIHwgaWQgICAgICAgICB8IG9mZnNldCAgICB8IGZsYWdzICAgICB8 IHN0YXR1cyAgICAgfCAtPidzdHJ1Y3QgbmV0aWZfcnhfcmVzcG9uc2UnCj4gICAgICstLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwo+ICAgICB8L1wvXC9c L1wvXC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wvXC9cL3wgLi4gTgo+ICAgICAr LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKPiAKPiAK PiBFYWNoIGVudHJ5IGluIHRoZSByaW5nIG9jY3VwaWVzIDE2IG9jdGV0cyB3aGljaCBtZWFucyBh IHBhZ2UgZml0cyAyNTYgZW50cmllcy4KPiBBZGRpdGlvbmFsbHkgYSBgc3RydWN0IG5ldGlmX2V4 dHJhX2luZm9gIG1heSBvdmVybGF5IHRoZSByeCByZXF1ZXN0IGluIHdoaWNoCj4gY2FzZSB0aGUg Zm9ybWF0IGlzOgo+IAo+ICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLSsKPiAgICAgfCB0eXBlIHxmbGFnc3wgdHlwZSBzcGVjaWZpYyBkYXRhIChn c28sIGhhc2gsIGV0Yyl8IC0+J3N0cnVjdCBuZXRpZl9leHRyYV9pbmZvJwo+ICAgICArLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKPiAKPiBOb3RpY2Ug dGhlIGxhY2sgb2YgcGFkZGluZywgYW5kIHRoYXQgaXMgYmVjYXVzZSBpdCdzIG5vdCB1c2VkIG9u IFJ4LCBhcyBSeAo+IHJlcXVlc3QgYm91bmRhcnkgaXMgOCBvY3RldHMuCj4gCj4gSW4gZXNzZW5j ZSB0aGUgc3RlcHMgZm9yIHJlY2VpdmluZyBvZiBhIHBhY2tldCBpbiBhIExpbnV4IGZyb250ZW5k IGlzIGFzCj4gIGZyb20gYmFja2VuZCB0byBmcm9udGVuZCBuZXR3b3JrIHN0YWNrOgo+IAo+ICoq QmFja2VuZCoqCj4gCj4gMSkgQmFja2VuZCB0cmFuc21pdCBmdW5jdGlvbiBzdGFydHMKPiAKPiBb KkxpbnV4LXNwZWNpZmljKjogSXQgbWVhbnMgd2UgdGFrZSBhIHBhY2tldCBhbmQgYWRkIHRvIGFu IGludGVybmFsIHF1ZXVlCj4gIChwcm90ZWN0ZWQgYnkgYSBsb2NrKSB3aGVyZWFzIGEgc2VwYXJh dGUgdGhyZWFkIHRha2VzIGl0IGZyb20gdGhhdCBxdWV1ZQo+IGFuZAo+ICBwcm9jZXNzIHRoZSBh Y3R1YWwgbGlrZSB0aGUgc3RlcHMgYmVsb3cuIFRoaXMgdGhyZWFkIGhhcyB0aGUgcHVycG9zZSBv Zgo+ICBhZ2dyZWdhdGluZyBhcyBtdWNoIGNvcGllcyBhcyBwb3NzaWJsZS5dCj4gCj4gMikgQ2hl Y2tzIGlmIHRoZXJlIGFyZSBlbm91Z2ggcnggcmluZyBzbG90cyB0aGF0IGNhbiBhY2NvbW9kYXRl IHRoZSBwYWNrZXQuCj4gCj4gMykgR2V0cyBhIHJlcXVlc3QgZnJvbSB0aGUgcmluZyBmb3IgdGhl IGZpcnN0IGRhdGEgc2xvdCBhbmQgZmV0Y2hlcyB0aGUgYGdyZWZgCj4gICAgZnJvbSBpdC4KPiAK PiA0KSBDcmVhdGUgZ3JhbnQgY29weSBvcCBmcm9tIHBhY2tldCBwYWdlIHRvIGBncmVmYC4KPiAK PiBbIEl0J3MgdXAgdG8gdGhlIGJhY2tlbmQgdG8gY2hvb3NlIGhvdyBpdCBmaWxscyB0aGlzIGRh dGEuIEUuZy4gYmFja2VuZCBtYXkKPiAgIGNob29zZSB0byBtZXJnZSBhcyBtdWNoIGFzIGRhdGEg ZnJvbSBkaWZmZXJlbnQgcGFnZXMgaW50byB0aGlzIHNpbmdsZSBncmVmLAo+ICAgc2ltaWxhciB0 byBtZXJnZWFibGUgcnggYnVmZmVycyBpbiB2aG9zdC4gXQo+IAo+IDUpIFNldHMgdXAgZmxhZ3Mv Y2hlY2tzdW0gaW5mbyBvbiBmaXJzdCByZXF1ZXN0Lgo+IAo+IDYpIEdldHMgYSByZXNwb25zZSBm cm9tIHRoZSByaW5nIGZvciB0aGlzIGRhdGEgc2xvdC4KPiAKPiA3KSBQcmVmaWxsIGV4cGVjdGVk IHJlc3BvbnNlIHJpbmcgd2l0aCB0aGUgcmVxdWVzdCBgaWRgIGFuZCBzbG90IHNpemUuCj4gCj4g OCkgVXBkYXRlIHRoZSByZXF1ZXN0IGNvbnN1bWVyIGluZGV4IChgcmVxX2NvbnNgKQo+IAo+IDkp IEdldHMgYSByZXF1ZXN0IGZyb20gdGhlIHJpbmcgZm9yIHRoZSBmaXJzdCBleHRyYSBpbmZvIFtv cHRpb25hbF0KPiAKPiAxMCkgU2V0cyB1cCBleHRyYSBpbmZvIChlLmcuIEdTTyBkZXNjcmlwdG9y KSBbb3B0aW9uYWxdIHJlcGVhdCBzdGVwIDgpLgo+IAo+IDExKSBSZXBlYXQgc3RlcHMgMyB0aHJv dWdoIDggZm9yIGFsbCBwYWNrZXQgcGFnZXMgYW5kIHNldAo+IGBORVRSWEZfbW9yZV9kYXRhYAo+ ICAgIGluIHRoZSBOLTEgc2xvdC4KPiAKPiAxMikgUGVyZm9ybSB0aGUgYEdOVFRBQk9QX2NvcHlg IGh5cGVyY2FsbC4KPiAKPiAxMykgQ2hlY2sgaWYgdGhlIGdyYW50IG9wZXJhdGlvbnMgc3RhdHVz IHdhcyBpbmNvcnJlY3QgYW5kIGlmIHNvIHNldCBgc3RhdHVzYAo+ICAgICBvZiB0aGUgYHN0cnVj dCBuZXRpZl9yeF9yZXNwb25zZWAgZmllbGQgdG8gTkVUSUZfUlNQX0VSUi4KPiAKPiAxNCkgVXBk YXRlIHRoZSByZXNwb25zZSBwcm9kdWNlciBpbmRleCAoYHJzcF9wcm9kYCkKPiAKPiAqKkZyb250 ZW5kKioKPiAKPiAxNSkgRnJvbnRlbmQgZ2V0cyBhbiBpbnRlcnJ1cHQgYW5kIHJ1bnMgaXRzIGlu dGVycnVwdCBzZXJ2aWNlIHJvdXRpbmUKPiAKPiAxNikgQ2hlY2tzIGlmIHRoZXJlJ3MgdW5jb25z dW1lZCByZXNwb25zZXMKPiAKPiAxNykgQ29uc3VtZXMgYSByZXNwb25zZSBmcm9tIHRoZSByaW5n IChmaXJzdCByZXNwb25zZSBmb3IgYSBwYWNrZXQpCj4gCj4gMTgpIFJldm9rZSB0aGUgYGdyZWZg IGluIHRoZSByZXNwb25zZQo+IAo+IDE5KSBDb25zdW1lcyBleHRyYSBpbmZvIHJlc3BvbnNlIFtv cHRpb25hbF0KPiAKPiAyMCkgV2hpbGUgTi0xIHJlcXVlc3RzIGhhcyBgTkVUUlhGX21vcmVfZGF0 YWAsIHRoZW4gZmV0Y2ggZWFjaCBvZgo+IHJlc3BvbnNlcwo+ICAgICBhbmQgcmV2b2tlIHRoZSBk ZXNpZ25hdGVkIGBncmVmYC4KPiAKPiAyMSkgVXBkYXRlIHRoZSByZXNwb25zZSBjb25zdW1lciBp bmRleCAoYHJzcF9jb25zYCkKPiAKPiAyMikgKkxpbnV4LXNwZWNpZmljKjogQ29weSAoZnJvbSBm aXJzdCBzbG90IGdyZWYpIHVwIHRvIDI1NiBieXRlcyB0byB0aGUgbGluZWFyCj4gICAgIHJlZ2lv biBvZiB0aGUgcGFja2V0IG1ldGFkYXRhIHN0cnVjdHVyZSAoc2tiKS4gVGhlIHJlc3Qgb2YgdGhl IHBhZ2VzCj4gICAgIHByb2Nlc3NlZCBpbiB0aGUgcmVzcG9uc2VzIGFyZSB0aGVuIGFkZGVkIGFz IGZyYWdzLgo+IAo+IDIzKSBTZXQgY2hlY2tzdW0gaW5mbyBiYXNlZCBvbiBmaXJzdCByZXNwb25z ZSBmbGFncy4KPiAKPiAyNCkgQ2FsbCBwYWNrZXQgaW50byB0aGUgbmV0d29yayBzdGFjay4KPiAK PiAyNSkgQWxsb2NhdGUgbmV3IHBhZ2VzIGFuZCBhbnkgbmVjZXNzYXJ5IHBhY2tldCBtZXRhZGF0 YSBzdHJ1dHVyZXMgdG8gbmV3Cj4gICAgIHJlcXVlc3RzLiBUaGVzZSByZXF1ZXN0cyB3aWxsIHRo ZW4gYmUgdXNlZCBpbiBzdGVwIDEpIGFuZCBzbyBmb3J0aC4KPiAKPiAyNikgVXBkYXRlIHRoZSBy ZXF1ZXN0IHByb2R1Y2VyIGluZGV4IChgcmVxX3Byb2RgKQo+IAo+IDI3KSBDaGVjayB3aGV0aGVy IGJhY2tlbmQgbmVlZHMgbm90aWZpY2F0aW9uOgo+IAo+IDI3LjEpIElmIHNvLCBQZXJmb3JtIGh5 cGVyY2FsbCBgRVZUQ0hOT1Bfc2VuZGAgd2hpY2ggbWlnaHQgbWVhbiBhCj4gX19WTUVYSVRfXwo+ ICAgICAgIGRlcGVuZGluZyBvbiB0aGUgZ3Vlc3QgdHlwZS4KPiAKPiAyOCkgVXBkYXRlIGByc3Bf ZXZlbnRgIHRvIGByZXNwb25zZSBjb25zdW1lciBpbmRleCArIDFgIHN1Y2ggdGhhdCBmcm9udGVu ZAo+ICAgICByZWNlaXZlIGEgbm90aWZpY2F0aW9uIG9uIHRoZSBmaXJzdCBuZXdseSBwcm9kdWNl ZCByZXNwb25zZS4KPiAgICAgW29wdGlvbmFsLCBpZiBmcm9udGVuZCBpcyBwb2xsaW5nIHRoZSBy aW5nIGFuZCBuZXZlciBzbGVlcHNdCj4gCj4gVGhpcyBwcm9wb3NhbCBhaW1zIGF0IHJlcGxhY2lu ZyBzdGVwIDQpLCAxMikgYW5kICAyMikgd2l0aCBtZW1jcHkgaWYgdGhlCj4gZ3JlZnMgb24gdGhl IFJ4IHJpbmcgd2VyZSByZXF1ZXN0ZWQgdG8gYmUgbWFwcGVkIGJ5IHRoZSBndWVzdC4gRnJvbnRl bmQKPiBtYXkgdXNlCj4gc3RyYXRlZ2llcyB0byBhbGxvdyBmYXN0IHJlY3ljbGluZyBvZiBncmFu dHMgZm9yIHJlcGxpbmlzaGluZyB0aGUgcmluZywKPiBoZW5jZSBsZXR0aW5nIERvbWFpbi0wIHJl cGxhY2UgdGhlIGdyYW50IGNvcGllcyB3aXRoICBtZW1jcHkgaW5zdGVhZCwKPiB3aGljaCBpcwo+ IGZhc3Rlci4KPiAKPiBEZXBlbmRpbmcgb24gdGhlIGltcGxlbWVudGF0aW9uLCBpdCB3b3VsZCBt ZWFuIHRoYXQgd2Ugbm8gbG9uZ2VyCj4gd291bGQgbmVlZCB0byBhZ2dyZWdhdGUgYXMgbXVjaCBh cyBncmFudCBvcHMgYXMgcG9zc2libGUgKHN0ZXAgMSkgYW5kIGNvdWxkCj4gdHJhbnNtaXQgdGhl IHBhY2tldCBvbiB0aGUgdHJhbnNtaXQgZnVuY3Rpb24gKGUuZy4gTGludXggYGBgbmRvX3N0YXJ0 X3htaXRgYGApCj4gYXMgcHJldmlvdXNseSBwcm9wb3NlZAo+IGhlcmVcW1swXShodHRwOi8vbGlz dHMueGVucHJvamVjdC5vcmcvYXJjaGl2ZXMvaHRtbC94ZW4tZGV2ZWwvMjAxNS0KPiAwNS9tc2cw MTUwNC5odG1sKVxdLgo+IFRoaXMgd291bGQgaGVhdmlseSBpbXByb3ZlIGVmZmljaWVuY3kgc3Bl Y2lmaWFsbHkgZm9yIHNtYWxsZXIgcGFja2V0cy4gV2hpY2ggaW4KPiByZXR1cm4gd291bGQgZGVj cmVhc2UgUlRULCBoYXZpbmcgZGF0YSBiZWluZyBhY2tub2xlZGdlZCBtdWNoIHF1aWNrZXIuCj4g Cj4gXGNsZWFycGFnZQo+IAo+ICMgUHJvcG9zZWQgRXh0ZW5zaW9uCj4gCj4gVGhlIGlkZWEgaXMg dG8gYWxsb3cgZ3Vlc3QgbW9yZSBjb250cm9sbGFiaWxpdHkgb24gaG93IGl0cyBncmFudHMgYXJl IG1hcHBlZAo+IG9yCj4gbm90LiBDdXJyZW50bHkgdGhlcmUncyBubyBjb250cm9sIG92ZXIgaXQg Zm9yIGZyb250ZW5kcyBvciBiYWNrZW5kcywgYW5kIGxhdHRlcgo+IGNhbm5vdCBtYWtlIGFzc3Vt cHRpb25zIG9uIHRoZSBtYXBwaW5nIHRyYW5zbWl0IG9yIHJlY2VpdmUgZ3JhbnRzLCBoZW5jZQo+ IHdlCj4gbmVlZCBmcm9udGVuZCB0byB0YWtlIGluaXRpYXRpdmUgaW50byBtYW5hZ2luZyBpdHMg b3duIG1hcHBpbmcgb2YgZ3JhbnRzLgo+IEd1ZXN0cyBtYXkgdGhlbiBvcHBvcnR1bmlzdGljYWxs eSByZWN5Y2xlIHRoZXNlIGdyYW50cyAoZS5nLiBMaW51eCkgYW5kIGF2b2lkCj4gcmVzb3J0aW5n IHRvIGNvcGllcyB3aGljaCBjb21lIHdoZW4gdXNpbmcgYSBmaXhlZCBhbW91bnQgb2YgYnVmZmVy cy4gT3RoZXIKPiBmcmFtZXdvcmtzIChlLmcuICBYRFAsIG5ldG1hcCwgRFBESykgdXNlIGEgZml4 ZWQgc2V0IG9mIGJ1ZmZlcnMgd2hpY2ggYWxzbwo+IG1ha2VzIHRoZSBjYXNlIGZvciB0aGlzIGV4 dGVuc2lvbi4KPiAKPiAjIyBUZXJtaW5vbG9neQo+IAo+IGBzdGFnaW5nIGdyYW50c2AgaXMgYSB0 ZXJtIHVzZWQgaW4gdGhpcyBkb2N1bWVudCB0byByZWZlciB0byB0aGUgd2hvbGUgY29uY2VwdAo+ IG9mIGhhdmluZyBhIHNldCBvZiBncmFudHMgcGVybWFuZW50bHkgbWFwcGVkIHdpdGggYmFja2Vu ZCwgY29udGFpbmluZyBkYXRhCj4gc3RhZ2luZyB1bnRpbCBjb21wbGV0aW9uLiBUaGVyZWZvcmUg dGhlIHRlcm0gc2hvdWxkIG5vdCBiZSBjb25mdXNlZCB3aXRoIGEKPiBuZXcKPiBraW5kIG9mIGdy YW50cyBvbiB0aGUgaHlwZXJ2aXNvci4KPiAKPiAjIyBDb250cm9sIFJpbmcgTWVzc2FnZXMKPiAK PiAjIyMgYFhFTl9ORVRJRl9DVFJMX1RZUEVfR0VUX0dSRUZfTUFQUElOR19TSVpFYAo+IAo+IFRo aXMgbWVzc2FnZSBpcyBzZW50IGJ5IHRoZSBmcm9udGVuZCB0byBmZXRjaCB0aGUgbnVtYmVyIG9m IGdyZWZzIHRoYXQgY2FuCj4gYmUga2VwdCBtYXBwZWQgaW4gdGhlIGJhY2tlbmQuIEl0IG9ubHkg cmVjZWl2ZXMgdGhlIHF1ZXVlIGFzIGFyZ3VtZW50LCBhbmQKPiBkYXRhIHJlcHJlc2VudGluZyBh bW91bnQgb2YgZnJlZSBlbnRyaWVzIGluIHRoZSBtYXBwaW5nIHRhYmxlLgo+IAo+ICMjIyBgWEVO X05FVElGX0NUUkxfVFlQRV9BRERfR1JFRl9NQVBQSU5HYAo+IAo+IFRoaXMgaXMgc2VudCBieSB0 aGUgZnJvbnRlbmQgdG8gbWFwIGEgbGlzdCBvZiBncmFudCByZWZlcmVuY2VzIGluIHRoZSBiYWNr ZW5kLgo+IEl0IHJlY2VpdmVzIHRoZSBxdWV1ZSBpbmRleCwgdGhlIGdyYW50IGNvbnRhaW5pbmcg dGhlIGxpc3QgKG9mZnNldCBpcwo+IGltcGxpY2l0bHkgemVybykgYW5kIGhvdyBtYW55IGVudHJp ZXMgaW4gdGhlIGxpc3QuIEVhY2ggZW50cnkgaW4gdGhpcyBsaXN0Cj4gaGFzIHRoZSBmb2xsb3dp bmcgZm9ybWF0Ogo+IAo+IAkgICAgMCAgICAgMSAgICAgMiAgICAgMyAgICAgNCAgICAgNSAgICAg NiAgICAgNyAgb2N0ZXQKPiAJICstLS0tLSstLS0tLSstLS0tLSstLS0tLSstLS0tLSstLS0tLSst LS0tLSstLS0tLSsKPiAJIHwgZ3JhbnQgcmVmICAgICAgICAgICAgIHwgIGZsYWdzICAgIHwgIHN0 YXR1cyAgIHwKPiAJICstLS0tLSstLS0tLSstLS0tLSstLS0tLSstLS0tLSstLS0tLSstLS0tLSst LS0tLSsKPiAKPiAJIGdyYW50IHJlZjogZ3JhbnQgcmVmZXJlbmNlCj4gCSBmbGFnczogZmxhZ3Mg ZGVzY3JpYmluZyB0aGUgY29udHJvbCBvcGVyYXRpb24KPiAJIHN0YXR1czogWEVOX05FVElGX0NU UkxfU1RBVFVTXyoKPiAKPiBUaGUgbGlzdCBjYW4gaGF2ZSBhIG1heGltdW0gb2YgNTEyIGVudHJp ZXMgdG8gYmUgbWFwcGVkIGF0IG9uY2UuCj4gCj4gIyMjIGBYRU5fTkVUSUZfQ1RSTF9UWVBFX0RF TF9HUkVGX01BUFBJTkdgCj4gCj4gVGhpcyBpcyBzZW50IGJ5IHRoZSBmcm9udGVuZCBmb3IgYmFj a2VuZCB0byB1bm1hcCBhIGxpc3Qgb2YgZ3JhbnQKPiByZWZlcmVuY2VzLiBUaGUgYXJndW1lbnRz IGFyZSB0aGUgc2FtZSBhcwo+IGBYRU5fTkVUSUZfQ1RSTF9UWVBFX0FERF9HUkVGX01BUFBJTkdg LAo+IGluY2x1ZGluZyB0aGUgZm9ybWF0IG9mIHRoZSBsaXN0LiBIb3dldmVyIGVudHJpZXMgdG8g YmUgc3BlY2lmaWVkIG9uIHRoZSBsaXN0Cj4gY2FuIG9ubHkgcmVmZXIgdG8gdGhlIG9uZXMgcHJl dmlvdXNseSBhZGRlZCB3aXRoCj4gYFhFTl9ORVRJRl9DVFJMX1RZUEVfQUREX0dSRUZfTUFQUElO R2AgYW5kIGFkZGl0aW9uYWxseSB0aGVzZSBjYW4KPiBub3QgYmUKPiBpbmZsaWdodCBncmFudCBy ZWZlcmVuY2VzIGluIHJpbmcgYXQgdGhlIHRpbWUgdGhlIHVzZXIgaGFzIHJlcXVlc3RlZCB0byB1 bm1hcAo+IHRoZW0uCj4gCj4gIyMgRGF0YXBhdGggQ2hhbmdlcwo+IAo+IENvbnRyb2wgcmluZyBp cyBvbmx5IGF2YWlsYWJsZSBhZnRlciBiYWNrZW5kIHN0YXRlIGlzIGBYZW5idXNDb25uZWN0ZWRg Cj4gdGhlcmVmb3JlIG9ubHkgb24gdGhpcyBzdGF0ZSBjaGFuZ2UgY2FuIHRoZSBmcm9udGVuZCBx dWVyeSB0aGUgdG90YWwgYW1vdW50Cj4gb2YKPiBtYXBzIGl0IGNhbiBrZWVwLiBJdCB0aGVuIGdy YW50cyBOIGVudHJpZXMgcGVyIHF1ZXVlIG9uIGJvdGggVFggYW5kIFJYIHJpbmcKPiB3aGljaCB3 aWxsIGNyZWF0ZSB0aGUgdW5kZXJ5aW5nIGJhY2tlbmQgZ3JlZiAtPiBwYWdlIGFzc29jaWF0aW9u IChlLmcuICBzdG9yZWQKPiBpbiBoYXNoIHRhYmxlKS4gRnJvbnRlbmQgbWF5IHdpc2ggdG8gcmVj eWNsZSB0aGVzZSBwcmVncmFudGVkIGJ1ZmZlcnMgb3IKPiBjaG9vc2UKPiBhIGNvcHkgYXBwcm9h Y2ggdG8gcmVwbGFjZSBncmFudGluZy4KPiAKPiBPbiBzdGVwcyAxOSkgb2YgR3Vlc3QgVHJhbnNt aXQgYW5kIDMpIG9mIEd1ZXN0IFJlY2VpdmUsIGRhdGEgZ3JlZiBpcyBmaXJzdAo+IGxvb2tlZCB1 cCBpbiB0aGlzIHRhYmxlIGFuZCB1c2VzIHRoZSB1bmRlcmx5aW5nIHBhZ2UgaWYgaXQgYWxyZWFk eSBleGlzdHMgYQo+IG1hcHBpbmcuIE9uIHRoZSBzdWNjZXNzZnVsbCBjYXNlcywgc3RlcHMgMjAp IDIxKSBhbmQgMjcpIG9mIEd1ZXN0IFRyYW5zbWl0Cj4gYXJlCj4gc2tpcHBlZCwgd2l0aCAxOSkg YmVpbmcgcmVwbGFjZWQgd2l0aCBhIG1lbWNweSBvZiB1cCB0byAxMjggYnl0ZXMuIE9uIEd1ZXN0 Cj4gUmVjZWl2ZSwgNCkgMTIpIGFuZCAyMikgYXJlIHJlcGxhY2VkIHdpdGggbWVtY3B5IGluc3Rl YWQgb2YgYSBncmFudCBjb3B5Lgo+IAo+IEZhaWxpbmcgdG8gb2J0YWluIHRoZSB0b3RhbCBudW1i ZXIgb2YgbWFwcGluZ3MKPiAoYFhFTl9ORVRJRl9DVFJMX1RZUEVfR0VUX0dSRUZfTUFQUElOR19T SVpFYCkgbWVhbnMgdGhlIGd1ZXN0IGZhbGxzCj4gYmFjayB0byB0aGUKPiBub3JtYWwgdXNhZ2Ug d2l0aG91dCBwcmUgZ3JhbnRpbmcgYnVmZmVycy4KPiAKPiBcY2xlYXJwYWdlCj4gCj4gIyBXaXJl IFBlcmZvcm1hbmNlCj4gCj4gVGhpcyBzZWN0aW9uIGlzIGEgZ2xvc3NhcnkgbWVhbnQgdG8ga2Vl cCBpbiBtaW5kIG51bWJlcnMgb24gdGhlIHdpcmUuCj4gCj4gVGhlIG1pbmltdW0gc2l6ZSB0aGF0 IGNhbiBmaXQgaW4gYSBzaW5nbGUgcGFja2V0IHdpdGggc2l6ZSBOIGlzIGNhbGN1bGF0ZWQgYXM6 Cj4gCj4gICBQYWNrZXQgPSBFdGhlcm5ldCBIZWFkZXIgKDE0KSArIFByb3RvY29sIERhdGEgVW5p dCAoNDYgLSAxNTAwKSA9IDYwIGJ5dGVzCj4gCj4gSW4gdGhlIHdpcmUgaXQncyBhIGJpdCBtb3Jl Ogo+IAo+ICAgUHJlYW1ibGUgKDcpICsgU3RhcnQgRnJhbWUgRGVsaW1pdGVyICgxKSArIFBhY2tl dCArIENSQyAoNCkgKyBJbnRlcmZyYW1lIGdhcAo+ICgxMikgPSA4NCBieXRlcwo+IAo+IEZvciBn aXZlbiBMaW5rLXNwZWVkIGluIEJpdHMvc2VjIGFuZCBQYWNrZXQgc2l6ZSwgcmVhbCBwYWNrZXQg cmF0ZSBpcwo+IAljYWxjdWxhdGVkIGFzOgo+IAo+ICAgUmF0ZSA9IExpbmstc3BlZWQgLyAoKFBy ZWFtYmxlICsgUGFja2V0ICsgQ1JDICsgSW50ZXJmcmFtZSBnYXApICogOCkKPiAKPiBOdW1iZXJz IHRvIGtlZXAgaW4gbWluZCAocGFja2V0IHNpemUgZXhjbHVkZXMgUEhZIGxheWVyLCB0aG91Z2gg cGFja2V0Cj4gcmF0ZXMKPiBkaXNjbG9zZWQgYnkgdmVuZG9ycyB0YWtlIHRob3NlIGludG8gYWNj b3VudCwgc2luY2UgaXQncyB3aGF0IGdvZXMgb24gdGhlCj4gd2lyZSk6Cj4gCj4gfCBQYWNrZXQg KyBDUkMgKGJ5dGVzKSAgIHwgMTAgR2JpdC9zICB8ICA0MCBHYml0L3MgfCAgMTAwIEdiaXQvcyAg fAo+IHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18Oi0tLS0tLS0tLS06fDotLS0tLS0tLS0tOnw6 LS0tLS0tLS0tLS0tOnwKPiB8IDY0ICAgICAgICAgICAgICAgICAgICAgfCAxNC44OCAgTXBwc3wg IDU5LjUyIE1wcHN8ICAxNDguODAgTXBwcyB8Cj4gfCAxMjggICAgICAgICAgICAgICAgICAgIHwg IDguNDQgIE1wcHN8ICAzMy43OCBNcHBzfCAgIDg0LjQ2IE1wcHMgfAo+IHwgMjU2ICAgICAgICAg ICAgICAgICAgICB8ICA0LjUyICBNcHBzfCAgMTguMTEgTXBwc3wgICA0NS4yOSBNcHBzIHwKPiB8 IDE1MDAgICAgICAgICAgICAgICAgICAgfCAgIDgyMiAgS3Bwc3wgICAzLjI4IE1wcHN8ICAgIDgu MjIgTXBwcyB8Cj4gfCA2NTUzNSAgICAgICAgICAgICAgICAgIHwgICB+MTkgIEtwcHN8ICA3Ni4y NyBLcHBzfCAgMTkwLjY4IEtwcHMgfAo+IAo+IENhcHRpb246ICBNcHBzIChNaWxsaW9uIHBhY2tl dHMgcGVyIHNlY29uZCkgOyBLcHBzIChLaWxvIHBhY2tldHMgcGVyIHNlY29uZCkKPiAKPiBcY2xl YXJwYWdlCj4gCj4gIyBQZXJmb3JtYW5jZQo+IAo+IE51bWJlcnMgYmV0d2VlbiBhIExpbnV4IHY0 LjExIGd1ZXN0IGFuZCBhbm90aGVyIGhvc3QgY29ubmVjdGVkIGJ5IGEgMTAwCj4gR2JpdC9zCj4g TklDIG9uIGEgRTUtMjYzMCB2NCAyLjIgR0h6IGhvc3QgdG8gZ2l2ZSBhbiBpZGVhIG9uIHRoZSBw ZXJmb3JtYW5jZSBiZW5lZml0cwo+IG9mCj4gdGhpcyBleHRlbnNpb24uIFBsZWFzZSByZWZlciB0 byB0aGlzIHByZXNlbnRhdGlvbls3XSBmb3IgYSBiZXR0ZXIgb3ZlcnZpZXcgb2YKPiB0aGUgcmVz dWx0cy4KPiAKPiAoIE51bWJlcnMgaW5jbHVkZSBwcm90b2NvbCBvdmVyaGVhZCApCj4gCj4gKipi dWxrIHRyYW5zZmVyIChHdWVzdCBUWC9SWCkqKgo+IAo+ICBRdWV1ZXMgIEJlZm9yZSAoR2JpdC9z KSBBZnRlciAoR2JpdC9zKQo+ICAtLS0tLS0gIC0tLS0tLS0tLS0tLS0gICAtLS0tLS0tLS0tLS0K PiAgMXF1ZXVlICAxNzI0NC82MDAwICAgICAgMzgxODkvMjgxMDgKPiAgMnF1ZXVlICAyNDAyMy85 NDE2ICAgICAgNTQ3ODMvNDA2MjQKPiAgM3F1ZXVlICAyOTE0OC8xNzE5NiAgICAgODU3NzcvNTQx MTgKPiAgNHF1ZXVlICAzOTc4Mi8xODUwMiAgICAgOTk1MzAvNDY4NTkKPiAKPiAoIEd1ZXN0IC0+ IERvbTAgKQo+IAo+ICoqUGFja2V0IEkvTyAoR3Vlc3QgVFgvUlgpIGluIFVEUCA2NGIqKgo+IAo+ ICBRdWV1ZXMgIEJlZm9yZSAoTXBwcykgIEFmdGVyIChNcHBzKQo+ICAtLS0tLS0gIC0tLS0tLS0t LS0tLS0gIC0tLS0tLS0tLS0tLQo+ICAxcXVldWUgIDAuNjg0LzAuNDM5ICAgIDIuNDkvMi45Ngo+ ICAycXVldWUgIDAuOTUzLzAuNzU1ICAgIDQuNzQvNS4wNwo+ICA0cXVldWUgIDEuODkwLzEuMzkw ICAgIDguODAvOS45Mgo+IAo+IFxjbGVhcnBhZ2UKPiAKPiAjIFJlZmVyZW5jZXMKPiAKPiBbMF0g aHR0cDovL2xpc3RzLnhlbnByb2plY3Qub3JnL2FyY2hpdmVzL2h0bWwveGVuLWRldmVsLzIwMTUt Cj4gMDUvbXNnMDE1MDQuaHRtbAo+IAo+IFsxXQo+IGh0dHBzOi8vZ2l0aHViLmNvbS9mcmVlYnNk L2ZyZWVic2QvYmxvYi9tYXN0ZXIvc3lzL2Rldi9uZXRtYXAvbmV0bWFwCj4gX21lbTIuYyNMMzYy Cj4gCj4gWzJdIGh0dHBzOi8vd3d3LmZyZWVic2Qub3JnL2NnaS9tYW4uY2dpP3F1ZXJ5PXZhbGUm c2VrdGlvbj00Jm49MQo+IAo+IFszXSBodHRwczovL2dpdGh1Yi5jb20vaW92aXNvci9icGYtCj4g ZG9jcy9ibG9iL21hc3Rlci9FeHByZXNzX0RhdGFfUGF0aC5wZGYKPiAKPiBbNF0gaHR0cDovL3By b3RvdHlwZS0KPiBrZXJuZWwucmVhZHRoZWRvY3MuaW8vZW4vbGF0ZXN0L25ldHdvcmtpbmcvWERQ L2Rlc2lnbi9yZXF1aXJlbWVudHMuaHRtCj4gbCN3cml0ZS1hY2Nlc3MtdG8tcGFja2V0LWRhdGEK PiAKPiBbNV0gaHR0cDovL2x4ci5mcmVlLQo+IGVsZWN0cm9ucy5jb20vc291cmNlL2RyaXZlcnMv bmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX21haW4uYyNMMjA3Cj4gMwo+IAo+IFs2XSBo dHRwOi8vbHhyLmZyZWUtCj4gZWxlY3Ryb25zLmNvbS9zb3VyY2UvZHJpdmVycy9uZXQvZXRoZXJu ZXQvbWVsbGFub3gvbWx4NC9lbl9yeC5jI0w1Mgo+IAo+IFs3XQo+IGh0dHBzOi8vc2NoZC53cy9o b3N0ZWRfZmlsZXMveGVuZGV2ZWxvcGVyYW5kZGVzaWduc3VtbWl0MjAxNy9lNi9Ub0dyCj4gYW50 T3JOb3RUb0dyYW50LVhERFMyMDE3X3YzLnBkZgo+IAo+ICMgSGlzdG9yeQo+IAo+IEEgdGFibGUg b2YgY2hhbmdlcyB0byB0aGUgZG9jdW1lbnQsIGluIGNocm9ub2xvZ2ljYWwgb3JkZXIuCj4gCj4g LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCj4gRGF0ZSAgICAgICBSZXZpc2lvbiBWZXJzaW9uICBOb3Rlcwo+IC0t LS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQo+IDIwMTYtMTItMTQgMSAgICAgICAgWGVuIDQuOSAgSW5pdGlhbCB2ZXJz aW9uIGZvciBSRkMKPiAKPiAyMDE3LTA5LTAxIDIgICAgICAgIFhlbiA0LjEwIFJld29yayB0byB1 c2UgY29udHJvbCByaW5nCj4gCj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcmltIGRv d24gdGhlIHNwZWNpZmljYXRpb24KPiAKPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFk ZGVkIHNvbWUgcGVyZm9ybWFuY2UgbnVtYmVycyBmcm9tIHRoZQo+ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgcHJlc2VudGF0aW9uCj4gCj4gMjAxNy0wOS0xMyAzICAgICAgICBYZW4gNC4x MCBBZGRyZXNzZWQgY2hhbmdlcyBmcm9tIFBhdWwgRHVycmFudAo+IAo+IC0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fClhlbi1k ZXZlbCBtYWlsaW5nIGxpc3QKWGVuLWRldmVsQGxpc3RzLnhlbi5vcmcKaHR0cHM6Ly9saXN0cy54 ZW4ub3JnL3hlbi1kZXZlbAo=