From mboxrd@z Thu Jan 1 00:00:00 1970 From: Zhi Wang Subject: Re: [RFCv6 2/2] drm/i915: Introduce private PAT management Date: Thu, 31 Aug 2017 13:24:49 +0800 Message-ID: <18bff524-0c68-4bc7-7cbc-f5d0a1192304@intel.com> References: <1504030448-31973-1-git-send-email-zhi.a.wang@intel.com> <1504030448-31973-2-git-send-email-zhi.a.wang@intel.com> <1504130400.8120.36.camel@rdvivi-vienna> <9c5674b2-bc85-4765-5d5d-37c0a44f4cff@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: Content-Language: en-US List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Rodrigo Vivi Cc: "intel-gfx@lists.freedesktop.org" , "Widawsky, Benjamin" , "intel-gvt-dev@lists.freedesktop.org" , "Vivi, Rodrigo" List-Id: intel-gfx@lists.freedesktop.org QWxzbyBJIHNob3VsZCBzZW5kIGEgcmVnaXN0ZXIgZGlmZiBhdCB0aGF0IHRpbWUgKFJGQyAtPiBQ QVRDSCkuIFN1cHBvc2UgCnRoZXNlIHR3byBwYXRjaGVzIHNob3VsZCBrZWVwIHRoZSB1c2VkIFBQ QVQgcmVnaXN0ZXJzIHVuY2hhbmdlZCBsaWtlIGJlZm9yZS4KCgpPbiAwOC8zMS8xNyAxMzoyMiwg V2FuZywgWmhpIEEgd3JvdGU6Cj4gVGhhbmtzIGZvciB0aGUgdGVzdCEgU29ycnkgSSBkaWRuJ3Qg aGF2ZSBhbiBDTkwgb24gbXkgaGFuZC4KPgo+IFRoaXMgaXMgb25seSBSRkMgbm93LiBhZnRlciBj b2xsZWN0aW5nIGFsbCB0aGUgY29tbWVudHMsIEkgd2lsbCBzdGFydCBmdWxsIHRlc3QuIDopCj4K PiBUaGFua3MsCj4gWmhpLgo+Cj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0KPiBGcm9tOiBS b2RyaWdvIFZpdmkgW21haWx0bzpyb2RyaWdvLnZpdmlAZ21haWwuY29tXQo+IFNlbnQ6IFRodXJz ZGF5LCBBdWd1c3QgMzEsIDIwMTcgODoxNSBBTQo+IFRvOiBXYW5nLCBaaGkgQSA8emhpLmEud2Fu Z0BpbnRlbC5jb20+Cj4gQ2M6IFZpdmksIFJvZHJpZ28gPHJvZHJpZ28udml2aUBpbnRlbC5jb20+ OyBpbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnOyBXaWRhd3NreSwgQmVuamFtaW4gPGJl bmphbWluLndpZGF3c2t5QGludGVsLmNvbT47IGludGVsLWd2dC1kZXZAbGlzdHMuZnJlZWRlc2t0 b3Aub3JnCj4gU3ViamVjdDogUmU6IFtJbnRlbC1nZnhdIFtSRkN2NiAyLzJdIGRybS9pOTE1OiBJ bnRyb2R1Y2UgcHJpdmF0ZSBQQVQgbWFuYWdlbWVudAo+Cj4gT24gV2VkLCBBdWcgMzAsIDIwMTcg YXQgOTo0OSBQTSwgWmhpIFdhbmcgPHpoaS5hLndhbmdAaW50ZWwuY29tPiB3cm90ZToKPj4gSGkg Vml2aToKPj4gICAgICBUaGFua3MgZm9yIHRoZSByZXBseSEgVGhlIHJlZ2lzdGVyIGFyZSB3cml0 dGVuIGluIHBwYXQtPnVwZGF0ZV9odygpIG5vdy4KPiBvaCwgSSBzYXcgbm93Li4uCj4gSSBoYWRk ZW4gbm90aWNlZCB0aGF0IGludGVyYXRpb24uCj4KPiBCdXQgc29tZXRoaW5nIHNlZW1zIHJlYWxs eSBvZGQgeWV0Li4uCj4gTXkgQ05MIHdpdGggdGhlc2UgMiBwYXRjaGVzIGFwcGxpZWQgaGFuZ3Mg b24gYW55IGV4ZWN1dGlvbi4uLgo+Cj4+Cj4+ICtzdGF0aWMgdm9pZCBjbmxfcHJpdmF0ZV9wYXRf dXBkYXRlX2h3KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlCj4+ICsqZGV2X3ByaXYpIHsKPj4gKyAg ICAgICBzdHJ1Y3QgaW50ZWxfcHBhdCAqcHBhdCA9ICZkZXZfcHJpdi0+cHBhdDsKPj4gKyAgICAg ICBpbnQgaTsKPj4gKwo+PiArICAgICAgIGZvcl9lYWNoX3NldF9iaXQoaSwgcHBhdC0+ZGlydHks IHBwYXQtPm1heF9lbnRyaWVzKSB7Cj4+ICsgICAgICAgICAgICAgICBJOTE1X1dSSVRFKEdFTjEw X1BBVF9JTkRFWChpKSwgcHBhdC0+ZW50cmllc1tpXS52YWx1ZSk7Cj4+ICsgICAgICAgICAgICAg ICBjbGVhcl9iaXQoaSwgcHBhdC0+ZGlydHkpOwo+PiArICAgICAgIH0KPj4gK30KPj4gKwo+PiAr c3RhdGljIHZvaWQgYmR3X3ByaXZhdGVfcGF0X3VwZGF0ZV9odyhzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZQo+PiArKmRldl9wcml2KSB7Cj4+ICsgICAgICAgc3RydWN0IGludGVsX3BwYXQgKnBwYXQg PSAmZGV2X3ByaXYtPnBwYXQ7Cj4+ICsgICAgICAgdTY0IHBhdCA9IDA7Cj4+ICsgICAgICAgaW50 IGk7Cj4+ICsKPj4gKyAgICAgICBmb3IgKGkgPSAwOyBpIDwgcHBhdC0+bWF4X2VudHJpZXM7IGkr KykKPj4gKyAgICAgICAgICAgICAgIHBhdCB8PSBHRU44X1BQQVQoaSwgcHBhdC0+ZW50cmllc1tp XS52YWx1ZSk7Cj4+ICsKPj4gKyAgICAgICBiaXRtYXBfY2xlYXIocHBhdC0+ZGlydHksIDAsIHBw YXQtPm1heF9lbnRyaWVzKTsKPj4gKwo+PiArICAgICAgIEk5MTVfV1JJVEUoR0VOOF9QUklWQVRF X1BBVF9MTywgbG93ZXJfMzJfYml0cyhwYXQpKTsKPj4gKyAgICAgICBJOTE1X1dSSVRFKEdFTjhf UFJJVkFURV9QQVRfSEksIHVwcGVyXzMyX2JpdHMocGF0KSk7IH0KPj4KPj4gT24gMDgvMzEvMTcg MDY6MDAsIFZpdmksIFJvZHJpZ28gd3JvdGU6Cj4+PiBPbiBXZWQsIDIwMTctMDgtMzAgYXQgMDI6 MTQgKzA4MDAsIFpoaSBXYW5nIHdyb3RlOgo+Pj4+IFRoZSBwcml2YXRlIFBBVCBtYW5hZ2VtZW50 IGlzIHRvIHN1cHBvcnQgUFBBVCBlbnRyeSBtYW5pcHVsYXRpb24uCj4+Pj4gVHdvIEFQSXMgYXJl IGludHJvZHVjZWQgZm9yIGR5bmFtaWNhbGx5IG1hbmFnaW5nIFBQQVQgZW50cmllczoKPj4+PiBp bnRlbF9wcGF0X2dldCBhbmQgaW50ZWxfcHBhdF9wdXQuCj4+Pj4KPj4+PiBpbnRlbF9wcGF0X2dl dCB3aWxsIHNlYXJjaCBmb3IgYW4gZXhpc3RpbmcgUFBBVCBlbnRyeSB3aGljaAo+Pj4+IHBlcmZl Y3RseSBtYXRjaGVzIHRoZSByZXF1aXJlZCBQUEFUIHZhbHVlLiBJZiBub3QsIGl0IHdpbGwgdHJ5 IHRvCj4+Pj4gYWxsb2NhdGUgb3IgcmV0dXJuIGEgcGFydGlhbGx5IG1hdGNoZWQgUFBBVCBlbnRy eSBpZiB0aGVyZSBpcyBhbnkKPj4+PiBhdmFpbGFibGUgUFBBVCBpbmRleGVzIG9yIG5vdC4KPj4+ Pgo+Pj4+IGludGVsX3BwYXRfcHV0IHdpbGwgcHV0IGJhY2sgdGhlIFBQQVQgZW50cnkgd2hpY2gg Y29tZXMgZnJvbQo+Pj4+IGludGVsX3BwYXRfZ2V0LiBJZiBpdCdzIGR5bmFtaWNhbGx5IGFsbG9j YXRlZCwgdGhlIHJlZmVyZW5jZSBjb3VudAo+Pj4+IHdpbGwgYmUgZGVjcmVhc2VkLiBJZiB0aGUg cmVmZXJlbmNlIGNvdW50IHR1cm5zIGludG8gemVybywgdGhlIFBQQVQKPj4+PiBpbmRleCBpcyBm cmVlZCBhZ2Fpbi4KPj4+Pgo+Pj4+IEJlc2lkZXMsIGFub3RoZXIgdHdvIGNhbGxiYWNrcyBhcmUg aW50cm9kdWNlZCB0byBzdXBwb3J0IHRoZSBwcml2YXRlCj4+Pj4gUEFUIG1hbmFnZW1lbnQgZnJh bWV3b3JrLiBPbmUgaXMgcHBhdC0+dXBkYXRlX2h3KCksIHdoaWNoIHdyaXRlcyB0aGUKPj4+PiBQ UEFUIGNvbmZpZ3VyYXRpb25zIGluIHBwYXQtPmVudHJpZXMgaW50byBIVy4gQW5vdGhlciBvbmUg aXMKPj4+PiBwcGF0LT5tYXRjaCwgd2hpY2ggd2lsbCByZXR1cm4gYSBzY29yZSB0byBzaG93IGhv dyB0d28gUFBBVCB2YWx1ZXMKPj4+PiBtYXRjaCB3aXRoIGVhY2ggb3RoZXIuCj4+Pj4KPj4+PiB2 NjoKPj4+Pgo+Pj4+IC0gQWRkcmVzcyBhbGwgY29tbWVudHMgZnJvbSBDaHJpczoKPj4+PiBodHRw Oi8vd3d3LnNwaW5pY3MubmV0L2xpc3RzL2ludGVsLWdmeC9tc2cxMzY4NTAuaHRtbAo+Pj4+Cj4+ Pj4gLSBBZGRyZXNzIGFsbCBjb21tZW50cyBmcm9tIEpvb25hczoKPj4+PiBodHRwOi8vd3d3LnNw aW5pY3MubmV0L2xpc3RzL2ludGVsLWdmeC9tc2cxMzY4NDUuaHRtbAo+Pj4+Cj4+Pj4gdjU6Cj4+ Pj4KPj4+PiAtIEFkZCBjaGVjayBhbmQgd2Fybm5pbmdzIGZvciB0aG9zZSBwbGF0Zm9ybXMgd2hp Y2ggZG9uJ3QgaGF2ZSBQUEFULgo+Pj4+Cj4+Pj4gdjM6Cj4+Pj4KPj4+PiAtIEludHJvZHVjZSBk aXJ0eSBiaXRtYXAgZm9yIFBQQVQgcmVnaXN0ZXJzLiAoQ2hyaXMpCj4+Pj4gLSBDaGFuZ2UgdGhl IG5hbWUgb2YgdGhlIHBvaW50ZXIgImRldl9wcml2IiB0byAiaTkxNSIuIChDaHJpcykKPj4+PiAt IGludGVsX3BwYXRfe2dldCwgcHV0fSByZXR1cm5zL3Rha2VzIGEgY29uc3QgaW50ZWxfcHBhdF9l bnRyeSAqLgo+Pj4+IChDaHJpcykKPj4+Pgo+Pj4+IHYyOgo+Pj4+Cj4+Pj4gLSBBUEkgcmUtZGVz aWduLiAoQ2hyaXMpCj4+Pj4KPj4+PiBDYzogQmVuIFdpZGF3c2t5IDxiZW5qYW1pbi53aWRhd3Nr eUBpbnRlbC5jb20+Cj4+Pj4gQ2M6IFJvZHJpZ28gVml2aSA8cm9kcmlnby52aXZpQGludGVsLmNv bT4KPj4+PiBDYzogQ2hyaXMgV2lsc29uIDxjaHJpc0BjaHJpcy13aWxzb24uY28udWs+Cj4+Pj4g Q2M6IEpvb25hcyBMYWh0aW5lbiA8am9vbmFzLmxhaHRpbmVuQGxpbnV4LmludGVsLmNvbT4KPj4+ PiBTaWduZWQtb2ZmLWJ5OiBaaGkgV2FuZyA8emhpLmEud2FuZ0BpbnRlbC5jb20+Cj4+Pj4gLS0t Cj4+Pj4gICAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaCAgICAgfCAgIDIgKwo+Pj4+ ICAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2d0dC5jIHwgMjczCj4+Pj4gKysrKysr KysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tCj4+Pj4gICAgZHJpdmVycy9ncHUvZHJtL2k5 MTUvaTkxNV9nZW1fZ3R0LmggfCAgMzYgKysrKysKPj4+PiAgICAzIGZpbGVzIGNoYW5nZWQsIDI2 MiBpbnNlcnRpb25zKCspLCA0OSBkZWxldGlvbnMoLSkKPj4+Pgo+Pj4+IGRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCj4+Pj4gYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pOTE1X2Rydi5oIGluZGV4IDc1ODdlZjUuLjVmZmRlMTAgMTAwNjQ0Cj4+Pj4gLS0tIGEvZHJp dmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAo+Pj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2k5MTVfZHJ2LmgKPj4+PiBAQCAtMjMxMiw2ICsyMzEyLDggQEAgc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgewo+Pj4+ICAgICAgICAgIERFQ0xBUkVfSEFTSFRBQkxFKG1tX3N0cnVjdHMsIDcp Owo+Pj4+ICAgICAgICAgIHN0cnVjdCBtdXRleCBtbV9sb2NrOwo+Pj4+ICAgICsgICAgIHN0cnVj dCBpbnRlbF9wcGF0IHBwYXQ7Cj4+Pj4gKwo+Pj4+ICAgICAgICAgIC8qIEtlcm5lbCBNb2Rlc2V0 dGluZyAqLwo+Pj4+ICAgICAgICAgIHN0cnVjdCBpbnRlbF9jcnRjICpwbGFuZV90b19jcnRjX21h cHBpbmdbSTkxNV9NQVhfUElQRVNdOwo+Pj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pOTE1X2dlbV9ndHQuYwo+Pj4+IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1f Z3R0LmMKPj4+PiBpbmRleCBiNzRmYTlkLi4zMTA2MTQyIDEwMDY0NAo+Pj4+IC0tLSBhL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2d0dC5jCj4+Pj4gKysrIGIvZHJpdmVycy9ncHUvZHJt L2k5MTUvaTkxNV9nZW1fZ3R0LmMKPj4+PiBAQCAtMjgxNiw0MSArMjgxNiwyMDAgQEAgc3RhdGlj IGludCBnZ3R0X3Byb2JlX2NvbW1vbihzdHJ1Y3QKPj4+PiBpOTE1X2dndHQgKmdndHQsIHU2NCBz aXplKQo+Pj4+ICAgICAgICAgIHJldHVybiAwOwo+Pj4+ICAgIH0KPj4+PiAgICAtc3RhdGljIHZv aWQgY25sX3NldHVwX3ByaXZhdGVfcHBhdChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZQo+Pj4+ICpk ZXZfcHJpdikKPj4+PiArc3RhdGljIHN0cnVjdCBpbnRlbF9wcGF0X2VudHJ5ICoKPj4+PiArX19h bGxvY19wcGF0X2VudHJ5KHN0cnVjdCBpbnRlbF9wcGF0ICpwcGF0LCB1bnNpZ25lZCBpbnQgaW5k ZXgsIHU4Cj4+Pj4gdmFsdWUpCj4+Pj4gICAgewo+Pj4+ICsgICAgICAgc3RydWN0IGludGVsX3Bw YXRfZW50cnkgKmVudHJ5ID0gJnBwYXQtPmVudHJpZXNbaW5kZXhdOwo+Pj4+ICsKPj4+PiArICAg ICAgIEdFTV9CVUdfT04oaW5kZXggPj0gcHBhdC0+bWF4X2VudHJpZXMpOwo+Pj4+ICsgICAgICAg R0VNX0JVR19PTih0ZXN0X2JpdChpbmRleCwgcHBhdC0+dXNlZCkpOwo+Pj4+ICsKPj4+PiArICAg ICAgIGVudHJ5LT5wcGF0ID0gcHBhdDsKPj4+PiArICAgICAgIGVudHJ5LT52YWx1ZSA9IHZhbHVl Owo+Pj4+ICsgICAgICAga3JlZl9pbml0KCZlbnRyeS0+cmVmKTsKPj4+PiArICAgICAgIHNldF9i aXQoaW5kZXgsIHBwYXQtPnVzZWQpOwo+Pj4+ICsgICAgICAgc2V0X2JpdChpbmRleCwgcHBhdC0+ ZGlydHkpOwo+Pj4+ICsKPj4+PiArICAgICAgIHJldHVybiBlbnRyeTsKPj4+PiArfQo+Pj4+ICsK Pj4+PiArc3RhdGljIHZvaWQgX19mcmVlX3BwYXRfZW50cnkoc3RydWN0IGludGVsX3BwYXRfZW50 cnkgKmVudHJ5KSB7Cj4+Pj4gKyAgICAgICBzdHJ1Y3QgaW50ZWxfcHBhdCAqcHBhdCA9IGVudHJ5 LT5wcGF0Owo+Pj4+ICsgICAgICAgdW5zaWduZWQgaW50IGluZGV4ID0gZW50cnkgLSBwcGF0LT5l bnRyaWVzOwo+Pj4+ICsKPj4+PiArICAgICAgIEdFTV9CVUdfT04oaW5kZXggPj0gcHBhdC0+bWF4 X2VudHJpZXMpOwo+Pj4+ICsgICAgICAgR0VNX0JVR19PTighdGVzdF9iaXQoaW5kZXgsIHBwYXQt PnVzZWQpKTsKPj4+PiArCj4+Pj4gKyAgICAgICBlbnRyeS0+dmFsdWUgPSBwcGF0LT5jbGVhcl92 YWx1ZTsKPj4+PiArICAgICAgIGNsZWFyX2JpdChpbmRleCwgcHBhdC0+dXNlZCk7Cj4+Pj4gKyAg ICAgICBzZXRfYml0KGluZGV4LCBwcGF0LT5kaXJ0eSk7IH0KPj4+PiArCj4+Pj4gKy8qKgo+Pj4+ ICsgKiBpbnRlbF9wcGF0X2dldCAtIGdldCBhIHVzYWJsZSBQUEFUIGVudHJ5Cj4+Pj4gKyAqIEBp OTE1OiBpOTE1IGRldmljZSBpbnN0YW5jZQo+Pj4+ICsgKiBAdmFsdWU6IHRoZSBQUEFUIHZhbHVl IHJlcXVpcmVkIGJ5IHRoZSBjYWxsZXIKPj4+PiArICoKPj4+PiArICogVGhlIGZ1bmN0aW9uIHRy aWVzIHRvIHNlYXJjaCBpZiB0aGVyZSBpcyBhbiBleGlzdGluZyBQUEFUIGVudHJ5Cj4+Pj4gK3do aWNoCj4+Pj4gKyAqIG1hdGNoZXMgd2l0aCB0aGUgcmVxdWlyZWQgdmFsdWUuIElmIHBlcmZlY3Rs eSBtYXRjaGVkLCB0aGUKPj4+PiArZXhpc3RpbmcKPj4+PiBQUEFUCj4+Pj4gKyAqIGVudHJ5IHdp bGwgYmUgdXNlZC4gSWYgb25seSBwYXJ0aWFsbHkgbWF0Y2hlZCwgaXQgd2lsbCB0cnkgdG8KPj4+ PiArIGNoZWNrCj4+Pj4gaWYKPj4+PiArICogdGhlcmUgaXMgYW55IGF2YWlsYWJsZSBQUEFUIGlu ZGV4LiBJZiB5ZXMsIGl0IHdpbGwgYWxsb2NhdGUgYQo+Pj4+ICsgbmV3Cj4+Pj4gUFBBVAo+Pj4+ ICsgKiBpbmRleCBmb3IgdGhlIHJlcXVpcmVkIGVudHJ5IGFuZCB1cGRhdGUgdGhlIEhXLiBJZiBu b3QsIHRoZQo+Pj4+ICtwYXJ0aWFsbHkKPj4+PiArICogbWF0Y2hlZCBlbnRyeSB3aWxsIGJlIHVz ZWQuCj4+Pj4gKyAqLwo+Pj4+ICtjb25zdCBzdHJ1Y3QgaW50ZWxfcHBhdF9lbnRyeSAqCj4+Pj4g K2ludGVsX3BwYXRfZ2V0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1LCB1OCB2YWx1ZSkg ewo+Pj4+ICsgICAgICAgc3RydWN0IGludGVsX3BwYXQgKnBwYXQgPSAmaTkxNS0+cHBhdDsKPj4+ PiArICAgICAgIHN0cnVjdCBpbnRlbF9wcGF0X2VudHJ5ICplbnRyeTsKPj4+PiArICAgICAgIHVu c2lnbmVkIGludCBzY2FubmVkLCBiZXN0X3Njb3JlOwo+Pj4+ICsgICAgICAgaW50IGk7Cj4+Pj4g Kwo+Pj4+ICsgICAgICAgR0VNX0JVR19PTighcHBhdC0+bWF4X2VudHJpZXMpOwo+Pj4+ICsKPj4+ PiArICAgICAgIHNjYW5uZWQgPSBiZXN0X3Njb3JlID0gMDsKPj4+PiArCj4+Pj4gKyAgICAgICBm b3JfZWFjaF9zZXRfYml0KGksIHBwYXQtPnVzZWQsIHBwYXQtPm1heF9lbnRyaWVzKSB7Cj4+Pj4g KyAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzY29yZTsKPj4+PiArCj4+Pj4gKyAgICAgICAg ICAgICAgIGVudHJ5ID0gJnBwYXQtPmVudHJpZXNbaV07Cj4+Pj4gKyAgICAgICAgICAgICAgIHNj b3JlID0gcHBhdC0+bWF0Y2goZW50cnktPnZhbHVlLCB2YWx1ZSk7Cj4+Pj4gKyAgICAgICAgICAg ICAgIGlmIChzY29yZSA+IGJlc3Rfc2NvcmUpIHsKPj4+PiArICAgICAgICAgICAgICAgICAgICAg ICBpZiAoc2NvcmUgPT0gSU5URUxfUFBBVF9QRVJGRUNUX01BVENIKSB7Cj4+Pj4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBrcmVmX2dldCgmZW50cnktPnJlZik7Cj4+Pj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZW50cnk7Cj4+Pj4gKyAgICAgICAgICAg ICAgICAgICAgICAgfQo+Pj4+ICsgICAgICAgICAgICAgICAgICAgICAgIGJlc3Rfc2NvcmUgPSBz Y29yZTsKPj4+PiArICAgICAgICAgICAgICAgfQo+Pj4+ICsgICAgICAgICAgICAgICBzY2FubmVk Kys7Cj4+Pj4gKyAgICAgICB9Cj4+Pj4gKwo+Pj4+ICsgICAgICAgaWYgKHNjYW5uZWQgPT0gcHBh dC0+bWF4X2VudHJpZXMpIHsKPj4+PiArICAgICAgICAgICAgICAgaWYgKCFiZXN0X3Njb3JlKQo+ Pj4+ICsgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBFUlJfUFRSKC1FTk9TUEMpOwo+Pj4+ ICsKPj4+PiArICAgICAgICAgICAgICAga3JlZl9nZXQoJmVudHJ5LT5yZWYpOwo+Pj4+ICsgICAg ICAgICAgICAgICByZXR1cm4gZW50cnk7Cj4+Pj4gKyAgICAgICB9Cj4+Pj4gKwo+Pj4+ICsgICAg ICAgaSA9IGZpbmRfZmlyc3RfemVyb19iaXQocHBhdC0+dXNlZCwgcHBhdC0+bWF4X2VudHJpZXMp Owo+Pj4+ICsgICAgICAgZW50cnkgPSBfX2FsbG9jX3BwYXRfZW50cnkocHBhdCwgaSwgdmFsdWUp Owo+Pj4+ICsgICAgICAgcHBhdC0+dXBkYXRlX2h3KGk5MTUpOwo+Pj4+ICsgICAgICAgcmV0dXJu IGVudHJ5Owo+Pj4+ICt9Cj4+Pj4gKwo+Pj4+ICtzdGF0aWMgdm9pZCByZWxlYXNlX3BwYXQoc3Ry dWN0IGtyZWYgKmtyZWYpIHsKPj4+PiArICAgICAgIHN0cnVjdCBpbnRlbF9wcGF0X2VudHJ5ICpl bnRyeSA9Cj4+Pj4gKyAgICAgICAgICAgICAgIGNvbnRhaW5lcl9vZihrcmVmLCBzdHJ1Y3QgaW50 ZWxfcHBhdF9lbnRyeSwgcmVmKTsKPj4+PiArICAgICAgIHN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICppOTE1ID0gZW50cnktPnBwYXQtPmk5MTU7Cj4+Pj4gKwo+Pj4+ICsgICAgICAgX19mcmVlX3Bw YXRfZW50cnkoZW50cnkpOwo+Pj4+ICsgICAgICAgZW50cnktPnBwYXQtPnVwZGF0ZV9odyhpOTE1 KTsgfQo+Pj4+ICsKPj4+PiArLyoqCj4+Pj4gKyAqIGludGVsX3BwYXRfcHV0IC0gcHV0IGJhY2sg dGhlIFBQQVQgZW50cnkgZ290IGZyb20KPj4+PiAraW50ZWxfcHBhdF9nZXQoKQo+Pj4+ICsgKiBA ZW50cnk6IGFuIGludGVsIFBQQVQgZW50cnkKPj4+PiArICoKPj4+PiArICogUHV0IGJhY2sgdGhl IFBQQVQgZW50cnkgZ290IGZyb20gaW50ZWxfcHBhdF9nZXQoKS4gSWYgdGhlIFBQQVQKPj4+PiAr aW5kZXgKPj4+PiBvZiB0aGUKPj4+PiArICogZW50cnkgaXMgZHluYW1pY2FsbHkgYWxsb2NhdGVk LCBpdHMgcmVmZXJlbmNlIGNvdW50IHdpbGwgYmUKPj4+PiBkZWNyZWFzZWQuIE9uY2UKPj4+PiAr ICogdGhlIHJlZmVyZW5jZSBjb3VudCBiZWNvbWVzIGludG8gemVybywgdGhlIFBQQVQgaW5kZXgg YmVjb21lcwo+Pj4+ICsgZnJlZQo+Pj4+IGFnYWluLgo+Pj4+ICsgKi8KPj4+PiArdm9pZCBpbnRl bF9wcGF0X3B1dChjb25zdCBzdHJ1Y3QgaW50ZWxfcHBhdF9lbnRyeSAqZW50cnkpIHsKPj4+PiAr ICAgICAgIHN0cnVjdCBpbnRlbF9wcGF0ICpwcGF0ID0gZW50cnktPnBwYXQ7Cj4+Pj4gKyAgICAg ICB1bnNpZ25lZCBpbnQgaW5kZXggPSBlbnRyeSAtIHBwYXQtPmVudHJpZXM7Cj4+Pj4gKwo+Pj4+ ICsgICAgICAgR0VNX0JVR19PTighcHBhdC0+bWF4X2VudHJpZXMpOwo+Pj4+ICsKPj4+PiArICAg ICAgIGtyZWZfcHV0KCZwcGF0LT5lbnRyaWVzW2luZGV4XS5yZWYsIHJlbGVhc2VfcHBhdCk7IH0K Pj4+PiArCj4+Pj4gK3N0YXRpYyB2b2lkIGNubF9wcml2YXRlX3BhdF91cGRhdGVfaHcoc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUKPj4+PiArKmRldl9wcml2KSB7Cj4+Pj4gKyAgICAgICBzdHJ1Y3Qg aW50ZWxfcHBhdCAqcHBhdCA9ICZkZXZfcHJpdi0+cHBhdDsKPj4+PiArICAgICAgIGludCBpOwo+ Pj4+ICsKPj4+PiArICAgICAgIGZvcl9lYWNoX3NldF9iaXQoaSwgcHBhdC0+ZGlydHksIHBwYXQt Pm1heF9lbnRyaWVzKSB7Cj4+Pj4gKyAgICAgICAgICAgICAgIEk5MTVfV1JJVEUoR0VOMTBfUEFU X0lOREVYKGkpLCBwcGF0LT5lbnRyaWVzW2ldLnZhbHVlKTsKPj4+PiArICAgICAgICAgICAgICAg Y2xlYXJfYml0KGksIHBwYXQtPmRpcnR5KTsKPj4+PiArICAgICAgIH0KPj4+PiArfQo+Pj4+ICsK Pj4+PiArc3RhdGljIHZvaWQgYmR3X3ByaXZhdGVfcGF0X3VwZGF0ZV9odyhzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZQo+Pj4+ICsqZGV2X3ByaXYpIHsKPj4+PiArICAgICAgIHN0cnVjdCBpbnRlbF9w cGF0ICpwcGF0ID0gJmRldl9wcml2LT5wcGF0Owo+Pj4+ICsgICAgICAgdTY0IHBhdCA9IDA7Cj4+ Pj4gKyAgICAgICBpbnQgaTsKPj4+PiArCj4+Pj4gKyAgICAgICBmb3IgKGkgPSAwOyBpIDwgcHBh dC0+bWF4X2VudHJpZXM7IGkrKykKPj4+PiArICAgICAgICAgICAgICAgcGF0IHw9IEdFTjhfUFBB VChpLCBwcGF0LT5lbnRyaWVzW2ldLnZhbHVlKTsKPj4+PiArCj4+Pj4gKyAgICAgICBiaXRtYXBf Y2xlYXIocHBhdC0+ZGlydHksIDAsIHBwYXQtPm1heF9lbnRyaWVzKTsKPj4+PiArCj4+Pj4gKyAg ICAgICBJOTE1X1dSSVRFKEdFTjhfUFJJVkFURV9QQVRfTE8sIGxvd2VyXzMyX2JpdHMocGF0KSk7 Cj4+Pj4gKyAgICAgICBJOTE1X1dSSVRFKEdFTjhfUFJJVkFURV9QQVRfSEksIHVwcGVyXzMyX2Jp dHMocGF0KSk7IH0KPj4+PiArCj4+Pj4gK3N0YXRpYyB1bnNpZ25lZCBpbnQgYmR3X3ByaXZhdGVf cGF0X21hdGNoKHU4IHNyYywgdTggZHN0KSB7Cj4+Pj4gKyAgICAgICB1bnNpZ25lZCBpbnQgc2Nv cmUgPSAwOwo+Pj4+ICsKPj4+PiArICAgICAgIC8qIENhY2hlIGF0dHJpYnV0ZSBoYXMgdG8gYmUg bWF0Y2hlZC4gKi8KPj4+PiArICAgICAgIGlmIChHRU44X1BQQVRfR0VUX0NBKHNyYykgIT0gR0VO OF9QUEFUX0dFVF9DQShkc3QpKQo+Pj4+ICsgICAgICAgICAgICAgICByZXR1cm4gMDsKPj4+PiAr Cj4+Pj4gKyAgICAgICBpZiAoR0VOOF9QUEFUX0dFVF9UQyhzcmMpID09IEdFTjhfUFBBVF9HRVRf VEMoZHN0KSkKPj4+PiArICAgICAgICAgICAgICAgc2NvcmUgKz0gMjsKPj4+PiArCj4+Pj4gKyAg ICAgICBpZihHRU44X1BQQVRfR0VUX0FHRShzcmMpID09IEdFTjhfUFBBVF9HRVRfQUdFKGRzdCkp Cj4+Pj4gKyAgICAgICAgICAgICAgIHNjb3JlICs9IDE7Cj4+Pj4gKwo+Pj4+ICsgICAgICAgaWYg KHNjb3JlID09IDMpCj4+Pj4gKyAgICAgICAgICAgICAgIHJldHVybiBJTlRFTF9QUEFUX1BFUkZF Q1RfTUFUQ0g7Cj4+Pj4gKwo+Pj4+ICsgICAgICAgcmV0dXJuIHNjb3JlOwo+Pj4+ICt9Cj4+Pj4g Kwo+Pj4+ICtzdGF0aWMgdW5zaWduZWQgaW50IGNodl9wcml2YXRlX3BhdF9tYXRjaCh1OCBzcmMs IHU4IGRzdCkgewo+Pj4+ICsgICAgICAgcmV0dXJuIChDSFZfUFBBVF9HRVRfU05PT1Aoc3JjKSA9 PSBDSFZfUFBBVF9HRVRfU05PT1AoZHN0KSkgPwo+Pj4+ICsgICAgICAgICAgICAgICBJTlRFTF9Q UEFUX1BFUkZFQ1RfTUFUQ0ggOiAwOyB9Cj4+Pj4gKwo+Pj4+ICtzdGF0aWMgdm9pZCBjbmxfc2V0 dXBfcHJpdmF0ZV9wcGF0KHN0cnVjdCBpbnRlbF9wcGF0ICpwcGF0KSB7Cj4+Pj4gKyAgICAgICBw cGF0LT5tYXhfZW50cmllcyA9IDg7Cj4+Pj4gKyAgICAgICBwcGF0LT51cGRhdGVfaHcgPSBjbmxf cHJpdmF0ZV9wYXRfdXBkYXRlX2h3Owo+Pj4+ICsgICAgICAgcHBhdC0+bWF0Y2ggPSBiZHdfcHJp dmF0ZV9wYXRfbWF0Y2g7Cj4+Pj4gKyAgICAgICBwcGF0LT5jbGVhcl92YWx1ZSA9IEdFTjhfUFBB VF9MTENFTExDIHwgR0VOOF9QUEFUX0FHRSgzKTsKPj4+PiArCj4+Pj4gICAgICAgICAgLyogWFhY OiBzcGVjIGlzIHVuY2xlYXIgaWYgdGhpcyBpcyBzdGlsbCBuZWVkZWQgZm9yIENOTCsgKi8KPj4+ PiAtICAgICAgIGlmICghVVNFU19QUEdUVChkZXZfcHJpdikpIHsKPj4+PiAtICAgICAgICAgICAg ICAgSTkxNV9XUklURShHRU4xMF9QQVRfSU5ERVgoMCksIEdFTjhfUFBBVF9VQyk7Cj4+Pj4gKyAg ICAgICBpZiAoIVVTRVNfUFBHVFQocHBhdC0+aTkxNSkpIHsKPj4+PiArICAgICAgICAgICAgICAg X19hbGxvY19wcGF0X2VudHJ5KHBwYXQsIFBQQVRfQ0FDSEVEX1BERV9JTkRFWCwKPj4+PiBHRU44 X1BQQVRfVUMpOwo+Pj4+ICAgICAgICAgICAgICAgICAgcmV0dXJuOwo+Pj4+ICAgICAgICAgIH0K Pj4+PiAgICAtICAgICBJOTE1X1dSSVRFKEdFTjEwX1BBVF9JTkRFWCgwKSwgR0VOOF9QUEFUX1dC IHwgR0VOOF9QUEFUX0xMQyk7Cj4+Pj4gLSAgICAgICBJOTE1X1dSSVRFKEdFTjEwX1BBVF9JTkRF WCgxKSwgR0VOOF9QUEFUX1dDIHwgR0VOOF9QUEFUX0xMQ0VMTEMpOwo+Pj4+IC0gICAgICAgSTkx NV9XUklURShHRU4xMF9QQVRfSU5ERVgoMiksIEdFTjhfUFBBVF9XVCB8IEdFTjhfUFBBVF9MTENF TExDKTsKPj4+PiAtICAgICAgIEk5MTVfV1JJVEUoR0VOMTBfUEFUX0lOREVYKDMpLCBHRU44X1BQ QVRfVUMpOwo+Pj4+IC0gICAgICAgSTkxNV9XUklURShHRU4xMF9QQVRfSU5ERVgoNCksIEdFTjhf UFBBVF9MTENFTExDIHwKPj4+PiBHRU44X1BQQVRfQUdFKDApKTsKPj4+PiAtICAgICAgIEk5MTVf V1JJVEUoR0VOMTBfUEFUX0lOREVYKDUpLCBHRU44X1BQQVRfTExDRUxMQyB8Cj4+Pj4gR0VOOF9Q UEFUX0FHRSgxKSk7Cj4+Pj4gLSAgICAgICBJOTE1X1dSSVRFKEdFTjEwX1BBVF9JTkRFWCg2KSwg R0VOOF9QUEFUX0xMQ0VMTEMgfAo+Pj4+IEdFTjhfUFBBVF9BR0UoMikpOwo+Pj4+IC0gICAgICAg STkxNV9XUklURShHRU4xMF9QQVRfSU5ERVgoNyksIEdFTjhfUFBBVF9MTENFTExDIHwKPj4+PiBH RU44X1BQQVRfQUdFKDMpKTsKPj4+Cj4+PiBHZW44IGFsbG9jYXRpb24gc3R5bGUgZG9lc24ndCB3 b3JrIG9uIENOTC4KPj4+IEkgZG9uJ3Qgc2VlIHdoZXJlIGFsbCB0aGVzZSByZWdpc3RlcnMgd291 bGQgYmUgZ2V0dGluZyBwcm9wZXJseSB3cml0dGVuLgo+Pj4KPj4+PiArICAgICAgIC8qIFNlZSBn ZW44X3B0ZV9lbmNvZGUoKSBmb3IgdGhlIG1hcHBpbmcgZnJvbSBjYWNoZS1sZXZlbCB0bwo+Pj4+ ICsgUFBBVAo+Pj4+ICovCj4+Pj4gKyAgICAgICBfX2FsbG9jX3BwYXRfZW50cnkocHBhdCwgUFBB VF9DQUNIRURfUERFX0lOREVYLCBHRU44X1BQQVRfV0IKPj4+PiArIHwKPj4+PiBHRU44X1BQQVRf TExDKTsKPj4+PiArICAgICAgIF9fYWxsb2NfcHBhdF9lbnRyeShwcGF0LCBQUEFUX0RJU1BMQVlf RUxMQ19JTkRFWCwKPj4+PiArIEdFTjhfUFBBVF9XVCB8Cj4+Pj4gR0VOOF9QUEFUX0xMQ0VMTEMp Owo+Pj4+ICsgICAgICAgX19hbGxvY19wcGF0X2VudHJ5KHBwYXQsIFBQQVRfVU5DQUNIRURfSU5E RVgsIEdFTjhfUFBBVF9VQyk7Cj4+Pj4gKyAgICAgICBfX2FsbG9jX3BwYXRfZW50cnkocHBhdCwg UFBBVF9DQUNIRURfSU5ERVgsCj4+Pj4gKyBHRU44X1BQQVRfTExDRUxMQyB8Cj4+Pj4gR0VOOF9Q UEFUX0FHRSgwKSk7Cj4+Pj4gICAgfQo+Pj4+ICAgICAgLyogVGhlIEdHVFQgYW5kIFBQR1RUIG5l ZWQgYSBwcml2YXRlIFBQQVQgc2V0dXAgaW4gb3JkZXIgdG8KPj4+PiBoYW5kbGUgY2FjaGVhYmls aXR5Cj4+Pj4gICAgICogYml0cy4gV2hlbiB1c2luZyBhZHZhbmNlZCBjb250ZXh0cyBlYWNoIGNv bnRleHQgc3RvcmVzIGl0cyBvd24KPj4+PiBQQVQsIGJ1dAo+Pj4+ICAgICAqIHdyaXRpbmcgdGhp cyBkYXRhIHNob3VsZG4ndCBiZSBoYXJtZnVsIGV2ZW4gaW4gdGhvc2UgY2FzZXMuICovCj4+Pj4g LXN0YXRpYyB2b2lkIGJkd19zZXR1cF9wcml2YXRlX3BwYXQoc3RydWN0IGRybV9pOTE1X3ByaXZh dGUKPj4+PiAqZGV2X3ByaXYpCj4+Pj4gK3N0YXRpYyB2b2lkIGJkd19zZXR1cF9wcml2YXRlX3Bw YXQoc3RydWN0IGludGVsX3BwYXQgKnBwYXQpCj4+Pj4gICAgewo+Pj4+IC0gICAgICAgdTY0IHBh dDsKPj4+PiArICAgICAgIHBwYXQtPm1heF9lbnRyaWVzID0gODsKPj4+PiArICAgICAgIHBwYXQt PnVwZGF0ZV9odyA9IGJkd19wcml2YXRlX3BhdF91cGRhdGVfaHc7Cj4+Pj4gKyAgICAgICBwcGF0 LT5tYXRjaCA9IGJkd19wcml2YXRlX3BhdF9tYXRjaDsKPj4+PiArICAgICAgIHBwYXQtPmNsZWFy X3ZhbHVlID0gR0VOOF9QUEFUX1dCIHwgR0VOOF9QUEFUX0xMQ0VMTEMgfAo+Pj4+IEdFTjhfUFBB VF9BR0UoMyk7Cj4+Pj4gICAgLSAgICAgcGF0ID0gR0VOOF9QUEFUKDAsIEdFTjhfUFBBVF9XQiB8 IEdFTjhfUFBBVF9MTEMpICAgICB8IC8qIGZvcgo+Pj4+IG5vcm1hbCBvYmplY3RzLCBubyBlTExD ICovCj4+Pj4gLSAgICAgICAgICAgICBHRU44X1BQQVQoMSwgR0VOOF9QUEFUX1dDIHwgR0VOOF9Q UEFUX0xMQ0VMTEMpIHwgLyogZm9yCj4+Pj4gc29tZXRoaW5nIHBvaW50aW5nIHRvIHB0ZXM/ICov Cj4+Pj4gLSAgICAgICAgICAgICBHRU44X1BQQVQoMiwgR0VOOF9QUEFUX1dUIHwgR0VOOF9QUEFU X0xMQ0VMTEMpIHwgLyogZm9yCj4+Pj4gc2Nhbm91dCB3aXRoIGVMTEMgKi8KPj4+PiAtICAgICAg ICAgICAgIEdFTjhfUFBBVCgzLCBHRU44X1BQQVRfVUMpICAgICAgICAgICAgICAgICAgICAgfCAv Kgo+Pj4+IFVuY2FjaGVkIG9iamVjdHMsIG1vc3RseSBmb3Igc2Nhbm91dCAqLwo+Pj4+IC0gICAg ICAgICAgICAgR0VOOF9QUEFUKDQsIEdFTjhfUFBBVF9XQiB8IEdFTjhfUFBBVF9MTENFTExDIHwK Pj4+PiBHRU44X1BQQVRfQUdFKDApKSB8Cj4+Pj4gLSAgICAgICAgICAgICBHRU44X1BQQVQoNSwg R0VOOF9QUEFUX1dCIHwgR0VOOF9QUEFUX0xMQ0VMTEMgfAo+Pj4+IEdFTjhfUFBBVF9BR0UoMSkp IHwKPj4+PiAtICAgICAgICAgICAgIEdFTjhfUFBBVCg2LCBHRU44X1BQQVRfV0IgfCBHRU44X1BQ QVRfTExDRUxMQyB8Cj4+Pj4gR0VOOF9QUEFUX0FHRSgyKSkgfAo+Pj4+IC0gICAgICAgICAgICAg R0VOOF9QUEFUKDcsIEdFTjhfUFBBVF9XQiB8IEdFTjhfUFBBVF9MTENFTExDIHwKPj4+PiBHRU44 X1BQQVRfQUdFKDMpKTsKPj4+PiAtCj4+Pj4gLSAgICAgICBpZiAoIVVTRVNfUFBHVFQoZGV2X3By aXYpKQo+Pj4+ICsgICAgICAgaWYgKCFVU0VTX1BQR1RUKHBwYXQtPmk5MTUpKSB7Cj4+Pj4gICAg ICAgICAgICAgICAgICAvKiBTcGVjOiAiRm9yIEdHVFQsIHRoZXJlIGlzIE5PIHBhdF9zZWxbMjow XSBmcm9tCj4+Pj4gdGhlIGVudHJ5LAo+Pj4+ICAgICAgICAgICAgICAgICAgICogc28gUlRMIHdp bGwgYWx3YXlzIHVzZSB0aGUgdmFsdWUgY29ycmVzcG9uZGluZyB0bwo+Pj4+ICAgICAgICAgICAg ICAgICAgICogcGF0X3NlbCA9IDAwMCIuCj4+Pj4gQEAgLTI4NjQsMTcgKzMwMjMsMjYgQEAgc3Rh dGljIHZvaWQgYmR3X3NldHVwX3ByaXZhdGVfcHBhdChzdHJ1Y3QKPj4+PiBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdikKPj4+PiAgICAgICAgICAgICAgICAgICAqIFNvIHdlIGNhbiBzdGlsbCBo b2xkIG9udG8gYWxsIG91ciBhc3N1bXB0aW9ucyB3cnQgY3B1Cj4+Pj4gICAgICAgICAgICAgICAg ICAgKiBjbGZsdXNoaW5nIG9uIExMQyBtYWNoaW5lcy4KPj4+PiAgICAgICAgICAgICAgICAgICAq Lwo+Pj4+IC0gICAgICAgICAgICAgICBwYXQgPSBHRU44X1BQQVQoMCwgR0VOOF9QUEFUX1VDKTsK Pj4+PiArICAgICAgICAgICAgICAgX19hbGxvY19wcGF0X2VudHJ5KHBwYXQsIFBQQVRfQ0FDSEVE X1BERV9JTkRFWCwKPj4+PiBHRU44X1BQQVRfVUMpOwo+Pj4+ICsgICAgICAgICAgICAgICByZXR1 cm47Cj4+Pj4gKyAgICAgICB9Cj4+Pj4gICAgLSAgICAgLyogWFhYOiBzcGVjIGRlZmluZXMgdGhp cyBhcyAyIGRpc3RpbmN0IHJlZ2lzdGVycy4gSXQncyB1bmNsZWFyCj4+Pj4gaWYgYSA2NGIKPj4+ PiAtICAgICAgICAqIHdyaXRlIHdvdWxkIHdvcmsuICovCj4+Pj4gLSAgICAgICBJOTE1X1dSSVRF KEdFTjhfUFJJVkFURV9QQVRfTE8sIHBhdCk7Cj4+Pj4gLSAgICAgICBJOTE1X1dSSVRFKEdFTjhf UFJJVkFURV9QQVRfSEksIHBhdCA+PiAzMik7Cj4+Pj4gKyAgICAgICAvKiBTZWUgZ2VuOF9wdGVf ZW5jb2RlKCkgZm9yIHRoZSBtYXBwaW5nIGZyb20gY2FjaGUtbGV2ZWwgdG8KPj4+PiArIFBQQVQK Pj4+PiAqLwo+Pj4+ICsgICAgICAgLyogZm9yIG5vcm1hbCBvYmplY3RzLCBubyBlTExDICovCj4+ Pj4gKyAgICAgICBfX2FsbG9jX3BwYXRfZW50cnkocHBhdCwgUFBBVF9DQUNIRURfUERFX0lOREVY LCBHRU44X1BQQVRfV0IKPj4+PiArIHwKPj4+PiBHRU44X1BQQVRfTExDKTsKPj4+PiArICAgICAg IC8qIGZvciBzY2Fub3V0IHdpdGggZUxMQyAqLwo+Pj4+ICsgICAgICAgX19hbGxvY19wcGF0X2Vu dHJ5KHBwYXQsIFBQQVRfRElTUExBWV9FTExDX0lOREVYLAo+Pj4+ICsgR0VOOF9QUEFUX1dUIHwK Pj4+PiBHRU44X1BQQVRfTExDRUxMQyk7Cj4+Pj4gKyAgICAgICAvKiBVbmNhY2hlZCBvYmplY3Rz LCBtb3N0bHkgZm9yIHNjYW5vdXQgKi8KPj4+PiArICAgICAgIF9fYWxsb2NfcHBhdF9lbnRyeShw cGF0LCBQUEFUX1VOQ0FDSEVEX0lOREVYLCBHRU44X1BQQVRfVUMpOwo+Pj4+ICsgICAgICAgX19h bGxvY19wcGF0X2VudHJ5KHBwYXQsIFBQQVRfQ0FDSEVEX0lOREVYLCBHRU44X1BQQVRfV0IgfAo+ Pj4+IEdFTjhfUFBBVF9MTENFTExDIHwgR0VOOF9QUEFUX0FHRSgwKSk7Cj4+Pj4gICAgfQo+Pj4+ ICAgIC1zdGF0aWMgdm9pZCBjaHZfc2V0dXBfcHJpdmF0ZV9wcGF0KHN0cnVjdCBkcm1faTkxNV9w cml2YXRlCj4+Pj4gKmRldl9wcml2KQo+Pj4+ICtzdGF0aWMgdm9pZCBjaHZfc2V0dXBfcHJpdmF0 ZV9wcGF0KHN0cnVjdCBpbnRlbF9wcGF0ICpwcGF0KQo+Pj4+ICAgIHsKPj4+PiAtICAgICAgIHU2 NCBwYXQ7Cj4+Pj4gKyAgICAgICBwcGF0LT5tYXhfZW50cmllcyA9IDg7Cj4+Pj4gKyAgICAgICBw cGF0LT51cGRhdGVfaHcgPSBiZHdfcHJpdmF0ZV9wYXRfdXBkYXRlX2h3Owo+Pj4+ICsgICAgICAg cHBhdC0+bWF0Y2ggPSBjaHZfcHJpdmF0ZV9wYXRfbWF0Y2g7Cj4+Pj4gKyAgICAgICBwcGF0LT5j bGVhcl92YWx1ZSA9IENIVl9QUEFUX1NOT09QOwo+Pj4+ICAgICAgICAgIC8qCj4+Pj4gICAgICAg ICAgICogTWFwIFdCIG9uIEJEVyB0byBzbm9vcGVkIG9uIENIVi4KPj4+PiBAQCAtMjg5NCwxNyAr MzA2MiwxMiBAQCBzdGF0aWMgdm9pZCBjaHZfc2V0dXBfcHJpdmF0ZV9wcGF0KHN0cnVjdAo+Pj4+ IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+Pj4+ICAgICAgICAgICAqIFdoaWNoIG1lYW5z IHdlIG11c3Qgc2V0IHRoZSBzbm9vcCBiaXQgaW4gUEFUIGVudHJ5IDAKPj4+PiAgICAgICAgICAg KiBpbiBvcmRlciB0byBrZWVwIHRoZSBnbG9iYWwgc3RhdHVzIHBhZ2Ugd29ya2luZy4KPj4+PiAg ICAgICAgICAgKi8KPj4+PiAtICAgICAgIHBhdCA9IEdFTjhfUFBBVCgwLCBDSFZfUFBBVF9TTk9P UCkgfAo+Pj4+IC0gICAgICAgICAgICAgR0VOOF9QUEFUKDEsIDApIHwKPj4+PiAtICAgICAgICAg ICAgIEdFTjhfUFBBVCgyLCAwKSB8Cj4+Pj4gLSAgICAgICAgICAgICBHRU44X1BQQVQoMywgMCkg fAo+Pj4+IC0gICAgICAgICAgICAgR0VOOF9QUEFUKDQsIENIVl9QUEFUX1NOT09QKSB8Cj4+Pj4g LSAgICAgICAgICAgICBHRU44X1BQQVQoNSwgQ0hWX1BQQVRfU05PT1ApIHwKPj4+PiAtICAgICAg ICAgICAgIEdFTjhfUFBBVCg2LCBDSFZfUFBBVF9TTk9PUCkgfAo+Pj4+IC0gICAgICAgICAgICAg R0VOOF9QUEFUKDcsIENIVl9QUEFUX1NOT09QKTsKPj4+PiAgICAtICAgICBJOTE1X1dSSVRFKEdF TjhfUFJJVkFURV9QQVRfTE8sIHBhdCk7Cj4+Pj4gLSAgICAgICBJOTE1X1dSSVRFKEdFTjhfUFJJ VkFURV9QQVRfSEksIHBhdCA+PiAzMik7Cj4+Pj4gKyAgICAgICAvKiBTZWUgZ2VuOF9wdGVfZW5j b2RlKCkgZm9yIHRoZSBtYXBwaW5nIGZyb20gY2FjaGUtbGV2ZWwgdG8KPj4+PiArIFBQQVQKPj4+ PiAqLwo+Pj4+ICsgICAgICAgX19hbGxvY19wcGF0X2VudHJ5KHBwYXQsIFBQQVRfQ0FDSEVEX1BE RV9JTkRFWCwgQ0hWX1BQQVRfU05PT1ApOwo+Pj4+ICsgICAgICAgX19hbGxvY19wcGF0X2VudHJ5 KHBwYXQsIFBQQVRfRElTUExBWV9FTExDX0lOREVYLCAwKTsKPj4+PiArICAgICAgIF9fYWxsb2Nf cHBhdF9lbnRyeShwcGF0LCBQUEFUX1VOQ0FDSEVEX0lOREVYLCAwKTsKPj4+PiArICAgICAgIF9f YWxsb2NfcHBhdF9lbnRyeShwcGF0LCBQUEFUX0NBQ0hFRF9JTkRFWCwgQ0hWX1BQQVRfU05PT1Ap Owo+Pj4+ICAgIH0KPj4+PiAgICAgIHN0YXRpYyB2b2lkIGdlbjZfZ21jaF9yZW1vdmUoc3RydWN0 IGk5MTVfYWRkcmVzc19zcGFjZSAqdm0pIEBACj4+Pj4gLTI5MTcsMTIgKzMwODAsMjcgQEAgc3Rh dGljIHZvaWQgZ2VuNl9nbWNoX3JlbW92ZShzdHJ1Y3QKPj4+PiBpOTE1X2FkZHJlc3Nfc3BhY2Ug KnZtKQo+Pj4+ICAgICAgc3RhdGljIHZvaWQgc2V0dXBfcHJpdmF0ZV9wYXQoc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmRldl9wcml2KQo+Pj4+ICAgIHsKPj4+PiArICAgICAgIHN0cnVjdCBpbnRl bF9wcGF0ICpwcGF0ID0gJmRldl9wcml2LT5wcGF0Owo+Pj4+ICsgICAgICAgaW50IGk7Cj4+Pj4g Kwo+Pj4+ICsgICAgICAgcHBhdC0+aTkxNSA9IGRldl9wcml2Owo+Pj4+ICsKPj4+PiAgICAgICAg ICBpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSAxMCkKPj4+PiAtICAgICAgICAgICAgICAgY25s X3NldHVwX3ByaXZhdGVfcHBhdChkZXZfcHJpdik7Cj4+Pj4gKyAgICAgICAgICAgICAgIGNubF9z ZXR1cF9wcml2YXRlX3BwYXQocHBhdCk7Cj4+Pj4gICAgICAgICAgZWxzZSBpZiAoSVNfQ0hFUlJZ VklFVyhkZXZfcHJpdikgfHwgSVNfR0VOOV9MUChkZXZfcHJpdikpCj4+Pj4gLSAgICAgICAgICAg ICAgIGNodl9zZXR1cF9wcml2YXRlX3BwYXQoZGV2X3ByaXYpOwo+Pj4+ICsgICAgICAgICAgICAg ICBjaHZfc2V0dXBfcHJpdmF0ZV9wcGF0KHBwYXQpOwo+Pj4+ICAgICAgICAgIGVsc2UKPj4+PiAt ICAgICAgICAgICAgICAgYmR3X3NldHVwX3ByaXZhdGVfcHBhdChkZXZfcHJpdik7Cj4+Pj4gKyAg ICAgICAgICAgICAgIGJkd19zZXR1cF9wcml2YXRlX3BwYXQocHBhdCk7Cj4+Pj4gKwo+Pj4+ICsg ICAgICAgR0VNX0JVR19PTihwcGF0LT5tYXhfZW50cmllcyA+IElOVEVMX01BWF9QUEFUX0VOVFJJ RVMpOwo+Pj4+ICsKPj4+PiArICAgICAgIGZvcl9lYWNoX2NsZWFyX2JpdChpLCBwcGF0LT51c2Vk LCBwcGF0LT5tYXhfZW50cmllcykgewo+Pj4+ICsgICAgICAgICAgICAgICBwcGF0LT5lbnRyaWVz W2ldLnZhbHVlID0gcHBhdC0+Y2xlYXJfdmFsdWU7Cj4+Pj4gKyAgICAgICAgICAgICAgIHBwYXQt PmVudHJpZXNbaV0ucHBhdCA9IHBwYXQ7Cj4+Pj4gKyAgICAgICAgICAgICAgIHNldF9iaXQoaSwg cHBhdC0+ZGlydHkpOwo+Pj4+ICsgICAgICAgfQo+Pj4+ICsKPj4+PiArICAgICAgIHBwYXQtPnVw ZGF0ZV9odyhkZXZfcHJpdik7Cj4+Pj4gICAgfQo+Pj4+ICAgICAgc3RhdGljIGludCBnZW44X2dt Y2hfcHJvYmUoc3RydWN0IGk5MTVfZ2d0dCAqZ2d0dCkgQEAgLTMyMzYsMTMKPj4+PiArMzQxNCwx MCBAQCB2b2lkIGk5MTVfZ2VtX3Jlc3RvcmVfZ3R0X21hcHBpbmdzKHN0cnVjdAo+Pj4+IGRybV9p OTE1X3ByaXZhdGUgKmRldl9wcml2KQo+Pj4+ICAgICAgICAgIGdndHQtPmJhc2UuY2xvc2VkID0g ZmFsc2U7Cj4+Pj4gICAgICAgICAgaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gOCkgewo+Pj4+ IC0gICAgICAgICAgICAgICBpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSAxMCkKPj4+PiAtICAg ICAgICAgICAgICAgICAgICAgICBjbmxfc2V0dXBfcHJpdmF0ZV9wcGF0KGRldl9wcml2KTsKPj4+ PiAtICAgICAgICAgICAgICAgZWxzZSBpZiAoSVNfQ0hFUlJZVklFVyhkZXZfcHJpdikgfHwgSVNf R0VOOV9MUChkZXZfcHJpdikpCj4+Pj4gLSAgICAgICAgICAgICAgICAgICAgICAgY2h2X3NldHVw X3ByaXZhdGVfcHBhdChkZXZfcHJpdik7Cj4+Pj4gLSAgICAgICAgICAgICAgIGVsc2UKPj4+PiAt ICAgICAgICAgICAgICAgICAgICAgICBiZHdfc2V0dXBfcHJpdmF0ZV9wcGF0KGRldl9wcml2KTsK Pj4+PiArICAgICAgICAgICAgICAgc3RydWN0IGludGVsX3BwYXQgKnBwYXQgPSAmZGV2X3ByaXYt PnBwYXQ7Cj4+Pj4gICAgKyAgICAgICAgICAgICBiaXRtYXBfc2V0KHBwYXQtPmRpcnR5LCAwLCBw cGF0LT5tYXhfZW50cmllcyk7Cj4+Pj4gKyAgICAgICAgICAgICAgIGRldl9wcml2LT5wcGF0LnVw ZGF0ZV9odyhkZXZfcHJpdik7Cj4+Pj4gICAgICAgICAgICAgICAgICByZXR1cm47Cj4+Pj4gICAg ICAgICAgfQo+Pj4+ICAgIGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dl bV9ndHQuaAo+Pj4+IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZ3R0LmgKPj4+PiBp bmRleCBiNGUzYWE3Li5lMTBjYTg5IDEwMDY0NAo+Pj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2k5MTVfZ2VtX2d0dC5oCj4+Pj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9n ZW1fZ3R0LmgKPj4+PiBAQCAtMTQzLDYgKzE0MywxMSBAQCB0eXBlZGVmIHU2NCBnZW44X3BwZ3R0 X3BtbDRlX3Q7Cj4+Pj4gICAgI2RlZmluZSBHRU44X1BQQVRfRUxMQ19PVkVSUklERSAgICAgICAg ICAgICAgICgwPDwyKQo+Pj4+ICAgICNkZWZpbmUgR0VOOF9QUEFUKGksIHgpICAgICAgICAgICAg ICAgICAgICAgICAoKHU2NCkoeCkgPDwgKChpKSAqIDgpKQo+Pj4+ICAgICsjZGVmaW5lIEdFTjhf UFBBVF9HRVRfQ0EoeCkgKCh4KSAmIDMpCj4+Pj4gKyNkZWZpbmUgR0VOOF9QUEFUX0dFVF9UQyh4 KSAoKHgpICYgKDMgPDwgMikpICNkZWZpbmUKPj4+PiArR0VOOF9QUEFUX0dFVF9BR0UoeCkgKCh4 KSAmICgzIDw8IDQpKSAjZGVmaW5lIENIVl9QUEFUX0dFVF9TTk9PUCh4KQo+Pj4+ICsoKHgpICYg KDEgPDwgNikpCj4+Pj4gKwo+Pj4+ICAgIHN0cnVjdCBzZ190YWJsZTsKPj4+PiAgICAgIHN0cnVj dCBpbnRlbF9yb3RhdGlvbl9pbmZvIHsKPj4+PiBAQCAtNTM2LDYgKzU0MSwzNyBAQCBpOTE1X3Zt X3RvX2dndHQoc3RydWN0IGk5MTVfYWRkcmVzc19zcGFjZSAqdm0pCj4+Pj4gICAgICAgICAgcmV0 dXJuIGNvbnRhaW5lcl9vZih2bSwgc3RydWN0IGk5MTVfZ2d0dCwgYmFzZSk7Cj4+Pj4gICAgfQo+ Pj4+ICAgICsjZGVmaW5lIElOVEVMX01BWF9QUEFUX0VOVFJJRVMgOAo+Pj4+ICsjZGVmaW5lIElO VEVMX1BQQVRfUEVSRkVDVF9NQVRDSCAofjBVKQo+Pj4+ICsKPj4+PiArc3RydWN0IGludGVsX3Bw YXQ7Cj4+Pj4gKwo+Pj4+ICtzdHJ1Y3QgaW50ZWxfcHBhdF9lbnRyeSB7Cj4+Pj4gKyAgICAgICBz dHJ1Y3QgaW50ZWxfcHBhdCAqcHBhdDsKPj4+PiArICAgICAgIHN0cnVjdCBrcmVmIHJlZjsKPj4+ PiArICAgICAgIHU4IHZhbHVlOwo+Pj4+ICt9Owo+Pj4+ICsKPj4+PiArc3RydWN0IGludGVsX3Bw YXQgewo+Pj4+ICsgICAgICAgc3RydWN0IGludGVsX3BwYXRfZW50cnkgZW50cmllc1tJTlRFTF9N QVhfUFBBVF9FTlRSSUVTXTsKPj4+PiArICAgICAgIERFQ0xBUkVfQklUTUFQKHVzZWQsIElOVEVM X01BWF9QUEFUX0VOVFJJRVMpOwo+Pj4+ICsgICAgICAgREVDTEFSRV9CSVRNQVAoZGlydHksIElO VEVMX01BWF9QUEFUX0VOVFJJRVMpOwo+Pj4+ICsgICAgICAgdW5zaWduZWQgaW50IG1heF9lbnRy aWVzOwo+Pj4+ICsgICAgICAgdTggY2xlYXJfdmFsdWU7Cj4+Pj4gKyAgICAgICAvKgo+Pj4+ICsg ICAgICAgICogUmV0dXJuIGEgc2NvcmUgdG8gc2hvdyBob3cgdHdvIFBQQVQgdmFsdWVzIG1hdGNo LAo+Pj4+ICsgICAgICAgICogYSBJTlRFTF9QUEFUX1BFUkZFQ1RfTUFUQ0ggaW5kaWNhdGVzIGEg cGVyZmVjdCBtYXRjaAo+Pj4+ICsgICAgICAgICovCj4+Pj4gKyAgICAgICB1bnNpZ25lZCBpbnQg KCptYXRjaCkodTggc3JjLCB1OCBkc3QpOwo+Pj4+ICsgICAgICAgdm9pZCAoKnVwZGF0ZV9odyko c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUpOwo+Pj4+ICsKPj4+PiArICAgICAgIHN0cnVj dCBkcm1faTkxNV9wcml2YXRlICppOTE1OyB9Owo+Pj4+ICsKPj4+PiArY29uc3Qgc3RydWN0IGlu dGVsX3BwYXRfZW50cnkgKgo+Pj4+ICtpbnRlbF9wcGF0X2dldChzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqaTkxNSwgdTggdmFsdWUpOyB2b2lkCj4+Pj4gK2ludGVsX3BwYXRfcHV0KGNvbnN0IHN0 cnVjdCBpbnRlbF9wcGF0X2VudHJ5ICplbnRyeSk7Cj4+Pj4gKwo+Pj4+ICAgIGludCBpOTE1X2dl bV9pbml0X2FsaWFzaW5nX3BwZ3R0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1KTsKPj4+ PiAgICB2b2lkIGk5MTVfZ2VtX2ZpbmlfYWxpYXNpbmdfcHBndHQoc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmk5MTUpOwo+Pj4+Cj4+Pgo+PiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fXwo+PiBJbnRlbC1nZnggbWFpbGluZyBsaXN0Cj4+IEludGVsLWdmeEBs aXN0cy5mcmVlZGVza3RvcC5vcmcKPj4gaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFp bG1hbi9saXN0aW5mby9pbnRlbC1nZngKPgo+Cj4gLS0KPiBSb2RyaWdvIFZpdmkKPiBCbG9nOiBo dHRwOi8vYmxvZy52aXZpLmVuZy5icgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJl ZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGlu Zm8vaW50ZWwtZ2Z4Cg==