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 12:49:03 +0800 Message-ID: <9c5674b2-bc85-4765-5d5d-37c0a44f4cff@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> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1504130400.8120.36.camel@rdvivi-vienna> 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: "Vivi, Rodrigo" Cc: "intel-gfx@lists.freedesktop.org" , "Widawsky, Benjamin" , "intel-gvt-dev@lists.freedesktop.org" List-Id: intel-gfx@lists.freedesktop.org SGkgVml2aToKICAgICBUaGFua3MgZm9yIHRoZSByZXBseSEgVGhlIHJlZ2lzdGVyIGFyZSB3cml0 dGVuIGluIHBwYXQtPnVwZGF0ZV9odygpIApub3cuCgorc3RhdGljIHZvaWQgY25sX3ByaXZhdGVf cGF0X3VwZGF0ZV9odyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCit7CisJc3Ry dWN0IGludGVsX3BwYXQgKnBwYXQgPSAmZGV2X3ByaXYtPnBwYXQ7CisJaW50IGk7CisKKwlmb3Jf ZWFjaF9zZXRfYml0KGksIHBwYXQtPmRpcnR5LCBwcGF0LT5tYXhfZW50cmllcykgeworCQlJOTE1 X1dSSVRFKEdFTjEwX1BBVF9JTkRFWChpKSwgcHBhdC0+ZW50cmllc1tpXS52YWx1ZSk7CisJCWNs ZWFyX2JpdChpLCBwcGF0LT5kaXJ0eSk7CisJfQorfQorCitzdGF0aWMgdm9pZCBiZHdfcHJpdmF0 ZV9wYXRfdXBkYXRlX2h3KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKK3sKKwlz dHJ1Y3QgaW50ZWxfcHBhdCAqcHBhdCA9ICZkZXZfcHJpdi0+cHBhdDsKKwl1NjQgcGF0ID0gMDsK KwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBwcGF0LT5tYXhfZW50cmllczsgaSsrKQorCQlw YXQgfD0gR0VOOF9QUEFUKGksIHBwYXQtPmVudHJpZXNbaV0udmFsdWUpOworCisJYml0bWFwX2Ns ZWFyKHBwYXQtPmRpcnR5LCAwLCBwcGF0LT5tYXhfZW50cmllcyk7CisKKwlJOTE1X1dSSVRFKEdF TjhfUFJJVkFURV9QQVRfTE8sIGxvd2VyXzMyX2JpdHMocGF0KSk7CisJSTkxNV9XUklURShHRU44 X1BSSVZBVEVfUEFUX0hJLCB1cHBlcl8zMl9iaXRzKHBhdCkpOworfQoKT24gMDgvMzEvMTcgMDY6 MDAsIFZpdmksIFJvZHJpZ28gd3JvdGU6Cj4gT24gV2VkLCAyMDE3LTA4LTMwIGF0IDAyOjE0ICsw ODAwLCBaaGkgV2FuZyB3cm90ZToKPj4gVGhlIHByaXZhdGUgUEFUIG1hbmFnZW1lbnQgaXMgdG8g c3VwcG9ydCBQUEFUIGVudHJ5IG1hbmlwdWxhdGlvbi4gVHdvCj4+IEFQSXMgYXJlIGludHJvZHVj ZWQgZm9yIGR5bmFtaWNhbGx5IG1hbmFnaW5nIFBQQVQgZW50cmllczogaW50ZWxfcHBhdF9nZXQK Pj4gYW5kIGludGVsX3BwYXRfcHV0Lgo+Pgo+PiBpbnRlbF9wcGF0X2dldCB3aWxsIHNlYXJjaCBm b3IgYW4gZXhpc3RpbmcgUFBBVCBlbnRyeSB3aGljaCBwZXJmZWN0bHkKPj4gbWF0Y2hlcyB0aGUg cmVxdWlyZWQgUFBBVCB2YWx1ZS4gSWYgbm90LCBpdCB3aWxsIHRyeSB0byBhbGxvY2F0ZSBvcgo+ PiByZXR1cm4gYSBwYXJ0aWFsbHkgbWF0Y2hlZCBQUEFUIGVudHJ5IGlmIHRoZXJlIGlzIGFueSBh dmFpbGFibGUgUFBBVAo+PiBpbmRleGVzIG9yIG5vdC4KPj4KPj4gaW50ZWxfcHBhdF9wdXQgd2ls bCBwdXQgYmFjayB0aGUgUFBBVCBlbnRyeSB3aGljaCBjb21lcyBmcm9tCj4+IGludGVsX3BwYXRf Z2V0LiBJZiBpdCdzIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCwgdGhlIHJlZmVyZW5jZSBjb3VudCB3 aWxsCj4+IGJlIGRlY3JlYXNlZC4gSWYgdGhlIHJlZmVyZW5jZSBjb3VudCB0dXJucyBpbnRvIHpl cm8sIHRoZSBQUEFUIGluZGV4IGlzCj4+IGZyZWVkIGFnYWluLgo+Pgo+PiBCZXNpZGVzLCBhbm90 aGVyIHR3byBjYWxsYmFja3MgYXJlIGludHJvZHVjZWQgdG8gc3VwcG9ydCB0aGUgcHJpdmF0ZSBQ QVQKPj4gbWFuYWdlbWVudCBmcmFtZXdvcmsuIE9uZSBpcyBwcGF0LT51cGRhdGVfaHcoKSwgd2hp Y2ggd3JpdGVzIHRoZSBQUEFUCj4+IGNvbmZpZ3VyYXRpb25zIGluIHBwYXQtPmVudHJpZXMgaW50 byBIVy4gQW5vdGhlciBvbmUgaXMgcHBhdC0+bWF0Y2gsIHdoaWNoCj4+IHdpbGwgcmV0dXJuIGEg c2NvcmUgdG8gc2hvdyBob3cgdHdvIFBQQVQgdmFsdWVzIG1hdGNoIHdpdGggZWFjaCBvdGhlci4K Pj4KPj4gdjY6Cj4+Cj4+IC0gQWRkcmVzcyBhbGwgY29tbWVudHMgZnJvbSBDaHJpczoKPj4gaHR0 cDovL3d3dy5zcGluaWNzLm5ldC9saXN0cy9pbnRlbC1nZngvbXNnMTM2ODUwLmh0bWwKPj4KPj4g LSBBZGRyZXNzIGFsbCBjb21tZW50cyBmcm9tIEpvb25hczoKPj4gaHR0cDovL3d3dy5zcGluaWNz Lm5ldC9saXN0cy9pbnRlbC1nZngvbXNnMTM2ODQ1Lmh0bWwKPj4KPj4gdjU6Cj4+Cj4+IC0gQWRk IGNoZWNrIGFuZCB3YXJubmluZ3MgZm9yIHRob3NlIHBsYXRmb3JtcyB3aGljaCBkb24ndCBoYXZl IFBQQVQuCj4+Cj4+IHYzOgo+Pgo+PiAtIEludHJvZHVjZSBkaXJ0eSBiaXRtYXAgZm9yIFBQQVQg cmVnaXN0ZXJzLiAoQ2hyaXMpCj4+IC0gQ2hhbmdlIHRoZSBuYW1lIG9mIHRoZSBwb2ludGVyICJk ZXZfcHJpdiIgdG8gImk5MTUiLiAoQ2hyaXMpCj4+IC0gaW50ZWxfcHBhdF97Z2V0LCBwdXR9IHJl dHVybnMvdGFrZXMgYSBjb25zdCBpbnRlbF9wcGF0X2VudHJ5ICouIChDaHJpcykKPj4KPj4gdjI6 Cj4+Cj4+IC0gQVBJIHJlLWRlc2lnbi4gKENocmlzKQo+Pgo+PiBDYzogQmVuIFdpZGF3c2t5IDxi ZW5qYW1pbi53aWRhd3NreUBpbnRlbC5jb20+Cj4+IENjOiBSb2RyaWdvIFZpdmkgPHJvZHJpZ28u dml2aUBpbnRlbC5jb20+Cj4+IENjOiBDaHJpcyBXaWxzb24gPGNocmlzQGNocmlzLXdpbHNvbi5j by51az4KPj4gQ2M6IEpvb25hcyBMYWh0aW5lbiA8am9vbmFzLmxhaHRpbmVuQGxpbnV4LmludGVs LmNvbT4KPj4gU2lnbmVkLW9mZi1ieTogWmhpIFdhbmcgPHpoaS5hLndhbmdAaW50ZWwuY29tPgo+ PiAtLS0KPj4gICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oICAgICB8ICAgMiArCj4+ ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZ3R0LmMgfCAyNzMgKysrKysrKysrKysr KysrKysrKysrKysrKysrKystLS0tLS0tCj4+ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9n ZW1fZ3R0LmggfCAgMzYgKysrKysKPj4gICAzIGZpbGVzIGNoYW5nZWQsIDI2MiBpbnNlcnRpb25z KCspLCA0OSBkZWxldGlvbnMoLSkKPj4KPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2k5MTVfZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCj4+IGluZGV4 IDc1ODdlZjUuLjVmZmRlMTAgMTAwNjQ0Cj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5 MTVfZHJ2LmgKPj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAo+PiBAQCAt MjMxMiw2ICsyMzEyLDggQEAgc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgewo+PiAgIAlERUNMQVJF X0hBU0hUQUJMRShtbV9zdHJ1Y3RzLCA3KTsKPj4gICAJc3RydWN0IG11dGV4IG1tX2xvY2s7Cj4+ ICAgCj4+ICsJc3RydWN0IGludGVsX3BwYXQgcHBhdDsKPj4gKwo+PiAgIAkvKiBLZXJuZWwgTW9k ZXNldHRpbmcgKi8KPj4gICAKPj4gICAJc3RydWN0IGludGVsX2NydGMgKnBsYW5lX3RvX2NydGNf bWFwcGluZ1tJOTE1X01BWF9QSVBFU107Cj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pOTE1X2dlbV9ndHQuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2d0dC5j Cj4+IGluZGV4IGI3NGZhOWQuLjMxMDYxNDIgMTAwNjQ0Cj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2k5MTVfZ2VtX2d0dC5jCj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVf Z2VtX2d0dC5jCj4+IEBAIC0yODE2LDQxICsyODE2LDIwMCBAQCBzdGF0aWMgaW50IGdndHRfcHJv YmVfY29tbW9uKHN0cnVjdCBpOTE1X2dndHQgKmdndHQsIHU2NCBzaXplKQo+PiAgIAlyZXR1cm4g MDsKPj4gICB9Cj4+ICAgCj4+IC1zdGF0aWMgdm9pZCBjbmxfc2V0dXBfcHJpdmF0ZV9wcGF0KHN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPj4gK3N0YXRpYyBzdHJ1Y3QgaW50ZWxf cHBhdF9lbnRyeSAqCj4+ICtfX2FsbG9jX3BwYXRfZW50cnkoc3RydWN0IGludGVsX3BwYXQgKnBw YXQsIHVuc2lnbmVkIGludCBpbmRleCwgdTggdmFsdWUpCj4+ICAgewo+PiArCXN0cnVjdCBpbnRl bF9wcGF0X2VudHJ5ICplbnRyeSA9ICZwcGF0LT5lbnRyaWVzW2luZGV4XTsKPj4gKwo+PiArCUdF TV9CVUdfT04oaW5kZXggPj0gcHBhdC0+bWF4X2VudHJpZXMpOwo+PiArCUdFTV9CVUdfT04odGVz dF9iaXQoaW5kZXgsIHBwYXQtPnVzZWQpKTsKPj4gKwo+PiArCWVudHJ5LT5wcGF0ID0gcHBhdDsK Pj4gKwllbnRyeS0+dmFsdWUgPSB2YWx1ZTsKPj4gKwlrcmVmX2luaXQoJmVudHJ5LT5yZWYpOwo+ PiArCXNldF9iaXQoaW5kZXgsIHBwYXQtPnVzZWQpOwo+PiArCXNldF9iaXQoaW5kZXgsIHBwYXQt PmRpcnR5KTsKPj4gKwo+PiArCXJldHVybiBlbnRyeTsKPj4gK30KPj4gKwo+PiArc3RhdGljIHZv aWQgX19mcmVlX3BwYXRfZW50cnkoc3RydWN0IGludGVsX3BwYXRfZW50cnkgKmVudHJ5KQo+PiAr ewo+PiArCXN0cnVjdCBpbnRlbF9wcGF0ICpwcGF0ID0gZW50cnktPnBwYXQ7Cj4+ICsJdW5zaWdu ZWQgaW50IGluZGV4ID0gZW50cnkgLSBwcGF0LT5lbnRyaWVzOwo+PiArCj4+ICsJR0VNX0JVR19P TihpbmRleCA+PSBwcGF0LT5tYXhfZW50cmllcyk7Cj4+ICsJR0VNX0JVR19PTighdGVzdF9iaXQo aW5kZXgsIHBwYXQtPnVzZWQpKTsKPj4gKwo+PiArCWVudHJ5LT52YWx1ZSA9IHBwYXQtPmNsZWFy X3ZhbHVlOwo+PiArCWNsZWFyX2JpdChpbmRleCwgcHBhdC0+dXNlZCk7Cj4+ICsJc2V0X2JpdChp bmRleCwgcHBhdC0+ZGlydHkpOwo+PiArfQo+PiArCj4+ICsvKioKPj4gKyAqIGludGVsX3BwYXRf Z2V0IC0gZ2V0IGEgdXNhYmxlIFBQQVQgZW50cnkKPj4gKyAqIEBpOTE1OiBpOTE1IGRldmljZSBp bnN0YW5jZQo+PiArICogQHZhbHVlOiB0aGUgUFBBVCB2YWx1ZSByZXF1aXJlZCBieSB0aGUgY2Fs bGVyCj4+ICsgKgo+PiArICogVGhlIGZ1bmN0aW9uIHRyaWVzIHRvIHNlYXJjaCBpZiB0aGVyZSBp cyBhbiBleGlzdGluZyBQUEFUIGVudHJ5IHdoaWNoCj4+ICsgKiBtYXRjaGVzIHdpdGggdGhlIHJl cXVpcmVkIHZhbHVlLiBJZiBwZXJmZWN0bHkgbWF0Y2hlZCwgdGhlIGV4aXN0aW5nIFBQQVQKPj4g KyAqIGVudHJ5IHdpbGwgYmUgdXNlZC4gSWYgb25seSBwYXJ0aWFsbHkgbWF0Y2hlZCwgaXQgd2ls bCB0cnkgdG8gY2hlY2sgaWYKPj4gKyAqIHRoZXJlIGlzIGFueSBhdmFpbGFibGUgUFBBVCBpbmRl eC4gSWYgeWVzLCBpdCB3aWxsIGFsbG9jYXRlIGEgbmV3IFBQQVQKPj4gKyAqIGluZGV4IGZvciB0 aGUgcmVxdWlyZWQgZW50cnkgYW5kIHVwZGF0ZSB0aGUgSFcuIElmIG5vdCwgdGhlIHBhcnRpYWxs eQo+PiArICogbWF0Y2hlZCBlbnRyeSB3aWxsIGJlIHVzZWQuCj4+ICsgKi8KPj4gK2NvbnN0IHN0 cnVjdCBpbnRlbF9wcGF0X2VudHJ5ICoKPj4gK2ludGVsX3BwYXRfZ2V0KHN0cnVjdCBkcm1faTkx NV9wcml2YXRlICppOTE1LCB1OCB2YWx1ZSkKPj4gK3sKPj4gKwlzdHJ1Y3QgaW50ZWxfcHBhdCAq cHBhdCA9ICZpOTE1LT5wcGF0Owo+PiArCXN0cnVjdCBpbnRlbF9wcGF0X2VudHJ5ICplbnRyeTsK Pj4gKwl1bnNpZ25lZCBpbnQgc2Nhbm5lZCwgYmVzdF9zY29yZTsKPj4gKwlpbnQgaTsKPj4gKwo+ PiArCUdFTV9CVUdfT04oIXBwYXQtPm1heF9lbnRyaWVzKTsKPj4gKwo+PiArCXNjYW5uZWQgPSBi ZXN0X3Njb3JlID0gMDsKPj4gKwo+PiArCWZvcl9lYWNoX3NldF9iaXQoaSwgcHBhdC0+dXNlZCwg cHBhdC0+bWF4X2VudHJpZXMpIHsKPj4gKwkJdW5zaWduZWQgaW50IHNjb3JlOwo+PiArCj4+ICsJ CWVudHJ5ID0gJnBwYXQtPmVudHJpZXNbaV07Cj4+ICsJCXNjb3JlID0gcHBhdC0+bWF0Y2goZW50 cnktPnZhbHVlLCB2YWx1ZSk7Cj4+ICsJCWlmIChzY29yZSA+IGJlc3Rfc2NvcmUpIHsKPj4gKwkJ CWlmIChzY29yZSA9PSBJTlRFTF9QUEFUX1BFUkZFQ1RfTUFUQ0gpIHsKPj4gKwkJCQlrcmVmX2dl dCgmZW50cnktPnJlZik7Cj4+ICsJCQkJcmV0dXJuIGVudHJ5Owo+PiArCQkJfQo+PiArCQkJYmVz dF9zY29yZSA9IHNjb3JlOwo+PiArCQl9Cj4+ICsJCXNjYW5uZWQrKzsKPj4gKwl9Cj4+ICsKPj4g KwlpZiAoc2Nhbm5lZCA9PSBwcGF0LT5tYXhfZW50cmllcykgewo+PiArCQlpZiAoIWJlc3Rfc2Nv cmUpCj4+ICsJCQlyZXR1cm4gRVJSX1BUUigtRU5PU1BDKTsKPj4gKwo+PiArCQlrcmVmX2dldCgm ZW50cnktPnJlZik7Cj4+ICsJCXJldHVybiBlbnRyeTsKPj4gKwl9Cj4+ICsKPj4gKwlpID0gZmlu ZF9maXJzdF96ZXJvX2JpdChwcGF0LT51c2VkLCBwcGF0LT5tYXhfZW50cmllcyk7Cj4+ICsJZW50 cnkgPSBfX2FsbG9jX3BwYXRfZW50cnkocHBhdCwgaSwgdmFsdWUpOwo+PiArCXBwYXQtPnVwZGF0 ZV9odyhpOTE1KTsKPj4gKwlyZXR1cm4gZW50cnk7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyB2b2lk IHJlbGVhc2VfcHBhdChzdHJ1Y3Qga3JlZiAqa3JlZikKPj4gK3sKPj4gKwlzdHJ1Y3QgaW50ZWxf cHBhdF9lbnRyeSAqZW50cnkgPQo+PiArCQljb250YWluZXJfb2Yoa3JlZiwgc3RydWN0IGludGVs X3BwYXRfZW50cnksIHJlZik7Cj4+ICsJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSBl bnRyeS0+cHBhdC0+aTkxNTsKPj4gKwo+PiArCV9fZnJlZV9wcGF0X2VudHJ5KGVudHJ5KTsKPj4g KwllbnRyeS0+cHBhdC0+dXBkYXRlX2h3KGk5MTUpOwo+PiArfQo+PiArCj4+ICsvKioKPj4gKyAq IGludGVsX3BwYXRfcHV0IC0gcHV0IGJhY2sgdGhlIFBQQVQgZW50cnkgZ290IGZyb20gaW50ZWxf cHBhdF9nZXQoKQo+PiArICogQGVudHJ5OiBhbiBpbnRlbCBQUEFUIGVudHJ5Cj4+ICsgKgo+PiAr ICogUHV0IGJhY2sgdGhlIFBQQVQgZW50cnkgZ290IGZyb20gaW50ZWxfcHBhdF9nZXQoKS4gSWYg dGhlIFBQQVQgaW5kZXggb2YgdGhlCj4+ICsgKiBlbnRyeSBpcyBkeW5hbWljYWxseSBhbGxvY2F0 ZWQsIGl0cyByZWZlcmVuY2UgY291bnQgd2lsbCBiZSBkZWNyZWFzZWQuIE9uY2UKPj4gKyAqIHRo ZSByZWZlcmVuY2UgY291bnQgYmVjb21lcyBpbnRvIHplcm8sIHRoZSBQUEFUIGluZGV4IGJlY29t ZXMgZnJlZSBhZ2Fpbi4KPj4gKyAqLwo+PiArdm9pZCBpbnRlbF9wcGF0X3B1dChjb25zdCBzdHJ1 Y3QgaW50ZWxfcHBhdF9lbnRyeSAqZW50cnkpCj4+ICt7Cj4+ICsJc3RydWN0IGludGVsX3BwYXQg KnBwYXQgPSBlbnRyeS0+cHBhdDsKPj4gKwl1bnNpZ25lZCBpbnQgaW5kZXggPSBlbnRyeSAtIHBw YXQtPmVudHJpZXM7Cj4+ICsKPj4gKwlHRU1fQlVHX09OKCFwcGF0LT5tYXhfZW50cmllcyk7Cj4+ ICsKPj4gKwlrcmVmX3B1dCgmcHBhdC0+ZW50cmllc1tpbmRleF0ucmVmLCByZWxlYXNlX3BwYXQp Owo+PiArfQo+PiArCj4+ICtzdGF0aWMgdm9pZCBjbmxfcHJpdmF0ZV9wYXRfdXBkYXRlX2h3KHN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPj4gK3sKPj4gKwlzdHJ1Y3QgaW50ZWxf cHBhdCAqcHBhdCA9ICZkZXZfcHJpdi0+cHBhdDsKPj4gKwlpbnQgaTsKPj4gKwo+PiArCWZvcl9l YWNoX3NldF9iaXQoaSwgcHBhdC0+ZGlydHksIHBwYXQtPm1heF9lbnRyaWVzKSB7Cj4+ICsJCUk5 MTVfV1JJVEUoR0VOMTBfUEFUX0lOREVYKGkpLCBwcGF0LT5lbnRyaWVzW2ldLnZhbHVlKTsKPj4g KwkJY2xlYXJfYml0KGksIHBwYXQtPmRpcnR5KTsKPj4gKwl9Cj4+ICt9Cj4+ICsKPj4gK3N0YXRp YyB2b2lkIGJkd19wcml2YXRlX3BhdF91cGRhdGVfaHcoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg KmRldl9wcml2KQo+PiArewo+PiArCXN0cnVjdCBpbnRlbF9wcGF0ICpwcGF0ID0gJmRldl9wcml2 LT5wcGF0Owo+PiArCXU2NCBwYXQgPSAwOwo+PiArCWludCBpOwo+PiArCj4+ICsJZm9yIChpID0g MDsgaSA8IHBwYXQtPm1heF9lbnRyaWVzOyBpKyspCj4+ICsJCXBhdCB8PSBHRU44X1BQQVQoaSwg cHBhdC0+ZW50cmllc1tpXS52YWx1ZSk7Cj4+ICsKPj4gKwliaXRtYXBfY2xlYXIocHBhdC0+ZGly dHksIDAsIHBwYXQtPm1heF9lbnRyaWVzKTsKPj4gKwo+PiArCUk5MTVfV1JJVEUoR0VOOF9QUklW QVRFX1BBVF9MTywgbG93ZXJfMzJfYml0cyhwYXQpKTsKPj4gKwlJOTE1X1dSSVRFKEdFTjhfUFJJ VkFURV9QQVRfSEksIHVwcGVyXzMyX2JpdHMocGF0KSk7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyB1 bnNpZ25lZCBpbnQgYmR3X3ByaXZhdGVfcGF0X21hdGNoKHU4IHNyYywgdTggZHN0KQo+PiArewo+ PiArCXVuc2lnbmVkIGludCBzY29yZSA9IDA7Cj4+ICsKPj4gKwkvKiBDYWNoZSBhdHRyaWJ1dGUg aGFzIHRvIGJlIG1hdGNoZWQuICovCj4+ICsJaWYgKEdFTjhfUFBBVF9HRVRfQ0Eoc3JjKSAhPSBH RU44X1BQQVRfR0VUX0NBKGRzdCkpCj4+ICsJCXJldHVybiAwOwo+PiArCj4+ICsJaWYgKEdFTjhf UFBBVF9HRVRfVEMoc3JjKSA9PSBHRU44X1BQQVRfR0VUX1RDKGRzdCkpCj4+ICsJCXNjb3JlICs9 IDI7Cj4+ICsKPj4gKwlpZihHRU44X1BQQVRfR0VUX0FHRShzcmMpID09IEdFTjhfUFBBVF9HRVRf QUdFKGRzdCkpCj4+ICsJCXNjb3JlICs9IDE7Cj4+ICsKPj4gKwlpZiAoc2NvcmUgPT0gMykKPj4g KwkJcmV0dXJuIElOVEVMX1BQQVRfUEVSRkVDVF9NQVRDSDsKPj4gKwo+PiArCXJldHVybiBzY29y ZTsKPj4gK30KPj4gKwo+PiArc3RhdGljIHVuc2lnbmVkIGludCBjaHZfcHJpdmF0ZV9wYXRfbWF0 Y2godTggc3JjLCB1OCBkc3QpCj4+ICt7Cj4+ICsJcmV0dXJuIChDSFZfUFBBVF9HRVRfU05PT1Ao c3JjKSA9PSBDSFZfUFBBVF9HRVRfU05PT1AoZHN0KSkgPwo+PiArCQlJTlRFTF9QUEFUX1BFUkZF Q1RfTUFUQ0ggOiAwOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgdm9pZCBjbmxfc2V0dXBfcHJpdmF0 ZV9wcGF0KHN0cnVjdCBpbnRlbF9wcGF0ICpwcGF0KQo+PiArewo+PiArCXBwYXQtPm1heF9lbnRy aWVzID0gODsKPj4gKwlwcGF0LT51cGRhdGVfaHcgPSBjbmxfcHJpdmF0ZV9wYXRfdXBkYXRlX2h3 Owo+PiArCXBwYXQtPm1hdGNoID0gYmR3X3ByaXZhdGVfcGF0X21hdGNoOwo+PiArCXBwYXQtPmNs ZWFyX3ZhbHVlID0gR0VOOF9QUEFUX0xMQ0VMTEMgfCBHRU44X1BQQVRfQUdFKDMpOwo+PiArCj4+ ICAgCS8qIFhYWDogc3BlYyBpcyB1bmNsZWFyIGlmIHRoaXMgaXMgc3RpbGwgbmVlZGVkIGZvciBD TkwrICovCj4+IC0JaWYgKCFVU0VTX1BQR1RUKGRldl9wcml2KSkgewo+PiAtCQlJOTE1X1dSSVRF KEdFTjEwX1BBVF9JTkRFWCgwKSwgR0VOOF9QUEFUX1VDKTsKPj4gKwlpZiAoIVVTRVNfUFBHVFQo cHBhdC0+aTkxNSkpIHsKPj4gKwkJX19hbGxvY19wcGF0X2VudHJ5KHBwYXQsIFBQQVRfQ0FDSEVE X1BERV9JTkRFWCwgR0VOOF9QUEFUX1VDKTsKPj4gICAJCXJldHVybjsKPj4gICAJfQo+PiAgIAo+ PiAtCUk5MTVfV1JJVEUoR0VOMTBfUEFUX0lOREVYKDApLCBHRU44X1BQQVRfV0IgfCBHRU44X1BQ QVRfTExDKTsKPj4gLQlJOTE1X1dSSVRFKEdFTjEwX1BBVF9JTkRFWCgxKSwgR0VOOF9QUEFUX1dD IHwgR0VOOF9QUEFUX0xMQ0VMTEMpOwo+PiAtCUk5MTVfV1JJVEUoR0VOMTBfUEFUX0lOREVYKDIp LCBHRU44X1BQQVRfV1QgfCBHRU44X1BQQVRfTExDRUxMQyk7Cj4+IC0JSTkxNV9XUklURShHRU4x MF9QQVRfSU5ERVgoMyksIEdFTjhfUFBBVF9VQyk7Cj4+IC0JSTkxNV9XUklURShHRU4xMF9QQVRf SU5ERVgoNCksIEdFTjhfUFBBVF9MTENFTExDIHwgR0VOOF9QUEFUX0FHRSgwKSk7Cj4+IC0JSTkx NV9XUklURShHRU4xMF9QQVRfSU5ERVgoNSksIEdFTjhfUFBBVF9MTENFTExDIHwgR0VOOF9QUEFU X0FHRSgxKSk7Cj4+IC0JSTkxNV9XUklURShHRU4xMF9QQVRfSU5ERVgoNiksIEdFTjhfUFBBVF9M TENFTExDIHwgR0VOOF9QUEFUX0FHRSgyKSk7Cj4+IC0JSTkxNV9XUklURShHRU4xMF9QQVRfSU5E RVgoNyksIEdFTjhfUFBBVF9MTENFTExDIHwgR0VOOF9QUEFUX0FHRSgzKSk7Cj4gCj4gR2VuOCBh bGxvY2F0aW9uIHN0eWxlIGRvZXNuJ3Qgd29yayBvbiBDTkwuCj4gSSBkb24ndCBzZWUgd2hlcmUg YWxsIHRoZXNlIHJlZ2lzdGVycyB3b3VsZCBiZSBnZXR0aW5nIHByb3Blcmx5IHdyaXR0ZW4uCj4g Cj4+ICsJLyogU2VlIGdlbjhfcHRlX2VuY29kZSgpIGZvciB0aGUgbWFwcGluZyBmcm9tIGNhY2hl LWxldmVsIHRvIFBQQVQgKi8KPj4gKwlfX2FsbG9jX3BwYXRfZW50cnkocHBhdCwgUFBBVF9DQUNI RURfUERFX0lOREVYLCBHRU44X1BQQVRfV0IgfCBHRU44X1BQQVRfTExDKTsKPj4gKwlfX2FsbG9j X3BwYXRfZW50cnkocHBhdCwgUFBBVF9ESVNQTEFZX0VMTENfSU5ERVgsIEdFTjhfUFBBVF9XVCB8 IEdFTjhfUFBBVF9MTENFTExDKTsKPj4gKwlfX2FsbG9jX3BwYXRfZW50cnkocHBhdCwgUFBBVF9V TkNBQ0hFRF9JTkRFWCwgR0VOOF9QUEFUX1VDKTsKPj4gKwlfX2FsbG9jX3BwYXRfZW50cnkocHBh dCwgUFBBVF9DQUNIRURfSU5ERVgsIEdFTjhfUFBBVF9MTENFTExDIHwgR0VOOF9QUEFUX0FHRSgw KSk7Cj4+ICAgfQo+PiAgIAo+PiAgIC8qIFRoZSBHR1RUIGFuZCBQUEdUVCBuZWVkIGEgcHJpdmF0 ZSBQUEFUIHNldHVwIGluIG9yZGVyIHRvIGhhbmRsZSBjYWNoZWFiaWxpdHkKPj4gICAgKiBiaXRz LiBXaGVuIHVzaW5nIGFkdmFuY2VkIGNvbnRleHRzIGVhY2ggY29udGV4dCBzdG9yZXMgaXRzIG93 biBQQVQsIGJ1dAo+PiAgICAqIHdyaXRpbmcgdGhpcyBkYXRhIHNob3VsZG4ndCBiZSBoYXJtZnVs IGV2ZW4gaW4gdGhvc2UgY2FzZXMuICovCj4+IC1zdGF0aWMgdm9pZCBiZHdfc2V0dXBfcHJpdmF0 ZV9wcGF0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPj4gK3N0YXRpYyB2b2lk IGJkd19zZXR1cF9wcml2YXRlX3BwYXQoc3RydWN0IGludGVsX3BwYXQgKnBwYXQpCj4+ICAgewo+ PiAtCXU2NCBwYXQ7Cj4+ICsJcHBhdC0+bWF4X2VudHJpZXMgPSA4Owo+PiArCXBwYXQtPnVwZGF0 ZV9odyA9IGJkd19wcml2YXRlX3BhdF91cGRhdGVfaHc7Cj4+ICsJcHBhdC0+bWF0Y2ggPSBiZHdf cHJpdmF0ZV9wYXRfbWF0Y2g7Cj4+ICsJcHBhdC0+Y2xlYXJfdmFsdWUgPSBHRU44X1BQQVRfV0Ig fCBHRU44X1BQQVRfTExDRUxMQyB8IEdFTjhfUFBBVF9BR0UoMyk7Cj4+ICAgCj4+IC0JcGF0ID0g R0VOOF9QUEFUKDAsIEdFTjhfUFBBVF9XQiB8IEdFTjhfUFBBVF9MTEMpICAgICB8IC8qIGZvciBu b3JtYWwgb2JqZWN0cywgbm8gZUxMQyAqLwo+PiAtCSAgICAgIEdFTjhfUFBBVCgxLCBHRU44X1BQ QVRfV0MgfCBHRU44X1BQQVRfTExDRUxMQykgfCAvKiBmb3Igc29tZXRoaW5nIHBvaW50aW5nIHRv IHB0ZXM/ICovCj4+IC0JICAgICAgR0VOOF9QUEFUKDIsIEdFTjhfUFBBVF9XVCB8IEdFTjhfUFBB VF9MTENFTExDKSB8IC8qIGZvciBzY2Fub3V0IHdpdGggZUxMQyAqLwo+PiAtCSAgICAgIEdFTjhf UFBBVCgzLCBHRU44X1BQQVRfVUMpICAgICAgICAgICAgICAgICAgICAgfCAvKiBVbmNhY2hlZCBv YmplY3RzLCBtb3N0bHkgZm9yIHNjYW5vdXQgKi8KPj4gLQkgICAgICBHRU44X1BQQVQoNCwgR0VO OF9QUEFUX1dCIHwgR0VOOF9QUEFUX0xMQ0VMTEMgfCBHRU44X1BQQVRfQUdFKDApKSB8Cj4+IC0J ICAgICAgR0VOOF9QUEFUKDUsIEdFTjhfUFBBVF9XQiB8IEdFTjhfUFBBVF9MTENFTExDIHwgR0VO OF9QUEFUX0FHRSgxKSkgfAo+PiAtCSAgICAgIEdFTjhfUFBBVCg2LCBHRU44X1BQQVRfV0IgfCBH RU44X1BQQVRfTExDRUxMQyB8IEdFTjhfUFBBVF9BR0UoMikpIHwKPj4gLQkgICAgICBHRU44X1BQ QVQoNywgR0VOOF9QUEFUX1dCIHwgR0VOOF9QUEFUX0xMQ0VMTEMgfCBHRU44X1BQQVRfQUdFKDMp KTsKPj4gLQo+PiAtCWlmICghVVNFU19QUEdUVChkZXZfcHJpdikpCj4+ICsJaWYgKCFVU0VTX1BQ R1RUKHBwYXQtPmk5MTUpKSB7Cj4+ICAgCQkvKiBTcGVjOiAiRm9yIEdHVFQsIHRoZXJlIGlzIE5P IHBhdF9zZWxbMjowXSBmcm9tIHRoZSBlbnRyeSwKPj4gICAJCSAqIHNvIFJUTCB3aWxsIGFsd2F5 cyB1c2UgdGhlIHZhbHVlIGNvcnJlc3BvbmRpbmcgdG8KPj4gICAJCSAqIHBhdF9zZWwgPSAwMDAi Lgo+PiBAQCAtMjg2NCwxNyArMzAyMywyNiBAQCBzdGF0aWMgdm9pZCBiZHdfc2V0dXBfcHJpdmF0 ZV9wcGF0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPj4gICAJCSAqIFNvIHdl IGNhbiBzdGlsbCBob2xkIG9udG8gYWxsIG91ciBhc3N1bXB0aW9ucyB3cnQgY3B1Cj4+ICAgCQkg KiBjbGZsdXNoaW5nIG9uIExMQyBtYWNoaW5lcy4KPj4gICAJCSAqLwo+PiAtCQlwYXQgPSBHRU44 X1BQQVQoMCwgR0VOOF9QUEFUX1VDKTsKPj4gKwkJX19hbGxvY19wcGF0X2VudHJ5KHBwYXQsIFBQ QVRfQ0FDSEVEX1BERV9JTkRFWCwgR0VOOF9QUEFUX1VDKTsKPj4gKwkJcmV0dXJuOwo+PiArCX0K Pj4gICAKPj4gLQkvKiBYWFg6IHNwZWMgZGVmaW5lcyB0aGlzIGFzIDIgZGlzdGluY3QgcmVnaXN0 ZXJzLiBJdCdzIHVuY2xlYXIgaWYgYSA2NGIKPj4gLQkgKiB3cml0ZSB3b3VsZCB3b3JrLiAqLwo+ PiAtCUk5MTVfV1JJVEUoR0VOOF9QUklWQVRFX1BBVF9MTywgcGF0KTsKPj4gLQlJOTE1X1dSSVRF KEdFTjhfUFJJVkFURV9QQVRfSEksIHBhdCA+PiAzMik7Cj4+ICsJLyogU2VlIGdlbjhfcHRlX2Vu Y29kZSgpIGZvciB0aGUgbWFwcGluZyBmcm9tIGNhY2hlLWxldmVsIHRvIFBQQVQgKi8KPj4gKwkv KiBmb3Igbm9ybWFsIG9iamVjdHMsIG5vIGVMTEMgKi8KPj4gKwlfX2FsbG9jX3BwYXRfZW50cnko cHBhdCwgUFBBVF9DQUNIRURfUERFX0lOREVYLCBHRU44X1BQQVRfV0IgfCBHRU44X1BQQVRfTExD KTsKPj4gKwkvKiBmb3Igc2Nhbm91dCB3aXRoIGVMTEMgKi8KPj4gKwlfX2FsbG9jX3BwYXRfZW50 cnkocHBhdCwgUFBBVF9ESVNQTEFZX0VMTENfSU5ERVgsIEdFTjhfUFBBVF9XVCB8IEdFTjhfUFBB VF9MTENFTExDKTsKPj4gKwkvKiBVbmNhY2hlZCBvYmplY3RzLCBtb3N0bHkgZm9yIHNjYW5vdXQg Ki8KPj4gKwlfX2FsbG9jX3BwYXRfZW50cnkocHBhdCwgUFBBVF9VTkNBQ0hFRF9JTkRFWCwgR0VO OF9QUEFUX1VDKTsKPj4gKwlfX2FsbG9jX3BwYXRfZW50cnkocHBhdCwgUFBBVF9DQUNIRURfSU5E RVgsIEdFTjhfUFBBVF9XQiB8IEdFTjhfUFBBVF9MTENFTExDIHwgR0VOOF9QUEFUX0FHRSgwKSk7 Cj4+ICAgfQo+PiAgIAo+PiAtc3RhdGljIHZvaWQgY2h2X3NldHVwX3ByaXZhdGVfcHBhdChzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4+ICtzdGF0aWMgdm9pZCBjaHZfc2V0dXBf cHJpdmF0ZV9wcGF0KHN0cnVjdCBpbnRlbF9wcGF0ICpwcGF0KQo+PiAgIHsKPj4gLQl1NjQgcGF0 Owo+PiArCXBwYXQtPm1heF9lbnRyaWVzID0gODsKPj4gKwlwcGF0LT51cGRhdGVfaHcgPSBiZHdf cHJpdmF0ZV9wYXRfdXBkYXRlX2h3Owo+PiArCXBwYXQtPm1hdGNoID0gY2h2X3ByaXZhdGVfcGF0 X21hdGNoOwo+PiArCXBwYXQtPmNsZWFyX3ZhbHVlID0gQ0hWX1BQQVRfU05PT1A7Cj4+ICAgCj4+ ICAgCS8qCj4+ICAgCSAqIE1hcCBXQiBvbiBCRFcgdG8gc25vb3BlZCBvbiBDSFYuCj4+IEBAIC0y ODk0LDE3ICszMDYyLDEyIEBAIHN0YXRpYyB2b2lkIGNodl9zZXR1cF9wcml2YXRlX3BwYXQoc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+PiAgIAkgKiBXaGljaCBtZWFucyB3ZSBt dXN0IHNldCB0aGUgc25vb3AgYml0IGluIFBBVCBlbnRyeSAwCj4+ICAgCSAqIGluIG9yZGVyIHRv IGtlZXAgdGhlIGdsb2JhbCBzdGF0dXMgcGFnZSB3b3JraW5nLgo+PiAgIAkgKi8KPj4gLQlwYXQg PSBHRU44X1BQQVQoMCwgQ0hWX1BQQVRfU05PT1ApIHwKPj4gLQkgICAgICBHRU44X1BQQVQoMSwg MCkgfAo+PiAtCSAgICAgIEdFTjhfUFBBVCgyLCAwKSB8Cj4+IC0JICAgICAgR0VOOF9QUEFUKDMs IDApIHwKPj4gLQkgICAgICBHRU44X1BQQVQoNCwgQ0hWX1BQQVRfU05PT1ApIHwKPj4gLQkgICAg ICBHRU44X1BQQVQoNSwgQ0hWX1BQQVRfU05PT1ApIHwKPj4gLQkgICAgICBHRU44X1BQQVQoNiwg Q0hWX1BQQVRfU05PT1ApIHwKPj4gLQkgICAgICBHRU44X1BQQVQoNywgQ0hWX1BQQVRfU05PT1Ap Owo+PiAgIAo+PiAtCUk5MTVfV1JJVEUoR0VOOF9QUklWQVRFX1BBVF9MTywgcGF0KTsKPj4gLQlJ OTE1X1dSSVRFKEdFTjhfUFJJVkFURV9QQVRfSEksIHBhdCA+PiAzMik7Cj4+ICsJLyogU2VlIGdl bjhfcHRlX2VuY29kZSgpIGZvciB0aGUgbWFwcGluZyBmcm9tIGNhY2hlLWxldmVsIHRvIFBQQVQg Ki8KPj4gKwlfX2FsbG9jX3BwYXRfZW50cnkocHBhdCwgUFBBVF9DQUNIRURfUERFX0lOREVYLCBD SFZfUFBBVF9TTk9PUCk7Cj4+ICsJX19hbGxvY19wcGF0X2VudHJ5KHBwYXQsIFBQQVRfRElTUExB WV9FTExDX0lOREVYLCAwKTsKPj4gKwlfX2FsbG9jX3BwYXRfZW50cnkocHBhdCwgUFBBVF9VTkNB Q0hFRF9JTkRFWCwgMCk7Cj4+ICsJX19hbGxvY19wcGF0X2VudHJ5KHBwYXQsIFBQQVRfQ0FDSEVE X0lOREVYLCBDSFZfUFBBVF9TTk9PUCk7Cj4+ICAgfQo+PiAgIAo+PiAgIHN0YXRpYyB2b2lkIGdl bjZfZ21jaF9yZW1vdmUoc3RydWN0IGk5MTVfYWRkcmVzc19zcGFjZSAqdm0pCj4+IEBAIC0yOTE3 LDEyICszMDgwLDI3IEBAIHN0YXRpYyB2b2lkIGdlbjZfZ21jaF9yZW1vdmUoc3RydWN0IGk5MTVf YWRkcmVzc19zcGFjZSAqdm0pCj4+ICAgCj4+ICAgc3RhdGljIHZvaWQgc2V0dXBfcHJpdmF0ZV9w YXQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+PiAgIHsKPj4gKwlzdHJ1Y3Qg aW50ZWxfcHBhdCAqcHBhdCA9ICZkZXZfcHJpdi0+cHBhdDsKPj4gKwlpbnQgaTsKPj4gKwo+PiAr CXBwYXQtPmk5MTUgPSBkZXZfcHJpdjsKPj4gKwo+PiAgIAlpZiAoSU5URUxfR0VOKGRldl9wcml2 KSA+PSAxMCkKPj4gLQkJY25sX3NldHVwX3ByaXZhdGVfcHBhdChkZXZfcHJpdik7Cj4+ICsJCWNu bF9zZXR1cF9wcml2YXRlX3BwYXQocHBhdCk7Cj4+ICAgCWVsc2UgaWYgKElTX0NIRVJSWVZJRVco ZGV2X3ByaXYpIHx8IElTX0dFTjlfTFAoZGV2X3ByaXYpKQo+PiAtCQljaHZfc2V0dXBfcHJpdmF0 ZV9wcGF0KGRldl9wcml2KTsKPj4gKwkJY2h2X3NldHVwX3ByaXZhdGVfcHBhdChwcGF0KTsKPj4g ICAJZWxzZQo+PiAtCQliZHdfc2V0dXBfcHJpdmF0ZV9wcGF0KGRldl9wcml2KTsKPj4gKwkJYmR3 X3NldHVwX3ByaXZhdGVfcHBhdChwcGF0KTsKPj4gKwo+PiArCUdFTV9CVUdfT04ocHBhdC0+bWF4 X2VudHJpZXMgPiBJTlRFTF9NQVhfUFBBVF9FTlRSSUVTKTsKPj4gKwo+PiArCWZvcl9lYWNoX2Ns ZWFyX2JpdChpLCBwcGF0LT51c2VkLCBwcGF0LT5tYXhfZW50cmllcykgewo+PiArCQlwcGF0LT5l bnRyaWVzW2ldLnZhbHVlID0gcHBhdC0+Y2xlYXJfdmFsdWU7Cj4+ICsJCXBwYXQtPmVudHJpZXNb aV0ucHBhdCA9IHBwYXQ7Cj4+ICsJCXNldF9iaXQoaSwgcHBhdC0+ZGlydHkpOwo+PiArCX0KPj4g Kwo+PiArCXBwYXQtPnVwZGF0ZV9odyhkZXZfcHJpdik7Cj4+ICAgfQo+PiAgIAo+PiAgIHN0YXRp YyBpbnQgZ2VuOF9nbWNoX3Byb2JlKHN0cnVjdCBpOTE1X2dndHQgKmdndHQpCj4+IEBAIC0zMjM2 LDEzICszNDE0LDEwIEBAIHZvaWQgaTkxNV9nZW1fcmVzdG9yZV9ndHRfbWFwcGluZ3Moc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+PiAgIAlnZ3R0LT5iYXNlLmNsb3NlZCA9IGZh bHNlOwo+PiAgIAo+PiAgIAlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSA4KSB7Cj4+IC0JCWlm IChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDEwKQo+PiAtCQkJY25sX3NldHVwX3ByaXZhdGVfcHBh dChkZXZfcHJpdik7Cj4+IC0JCWVsc2UgaWYgKElTX0NIRVJSWVZJRVcoZGV2X3ByaXYpIHx8IElT X0dFTjlfTFAoZGV2X3ByaXYpKQo+PiAtCQkJY2h2X3NldHVwX3ByaXZhdGVfcHBhdChkZXZfcHJp dik7Cj4+IC0JCWVsc2UKPj4gLQkJCWJkd19zZXR1cF9wcml2YXRlX3BwYXQoZGV2X3ByaXYpOwo+ PiArCQlzdHJ1Y3QgaW50ZWxfcHBhdCAqcHBhdCA9ICZkZXZfcHJpdi0+cHBhdDsKPj4gICAKPj4g KwkJYml0bWFwX3NldChwcGF0LT5kaXJ0eSwgMCwgcHBhdC0+bWF4X2VudHJpZXMpOwo+PiArCQlk ZXZfcHJpdi0+cHBhdC51cGRhdGVfaHcoZGV2X3ByaXYpOwo+PiAgIAkJcmV0dXJuOwo+PiAgIAl9 Cj4+ICAgCj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9ndHQu aCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2d0dC5oCj4+IGluZGV4IGI0ZTNhYTcu LmUxMGNhODkgMTAwNjQ0Cj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2d0 dC5oCj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2d0dC5oCj4+IEBAIC0x NDMsNiArMTQzLDExIEBAIHR5cGVkZWYgdTY0IGdlbjhfcHBndHRfcG1sNGVfdDsKPj4gICAjZGVm aW5lIEdFTjhfUFBBVF9FTExDX09WRVJSSURFCQkoMDw8MikKPj4gICAjZGVmaW5lIEdFTjhfUFBB VChpLCB4KQkJCSgodTY0KSh4KSA8PCAoKGkpICogOCkpCj4+ICAgCj4+ICsjZGVmaW5lIEdFTjhf UFBBVF9HRVRfQ0EoeCkgKCh4KSAmIDMpCj4+ICsjZGVmaW5lIEdFTjhfUFBBVF9HRVRfVEMoeCkg KCh4KSAmICgzIDw8IDIpKQo+PiArI2RlZmluZSBHRU44X1BQQVRfR0VUX0FHRSh4KSAoKHgpICYg KDMgPDwgNCkpCj4+ICsjZGVmaW5lIENIVl9QUEFUX0dFVF9TTk9PUCh4KSAoKHgpICYgKDEgPDwg NikpCj4+ICsKPj4gICBzdHJ1Y3Qgc2dfdGFibGU7Cj4+ICAgCj4+ICAgc3RydWN0IGludGVsX3Jv dGF0aW9uX2luZm8gewo+PiBAQCAtNTM2LDYgKzU0MSwzNyBAQCBpOTE1X3ZtX3RvX2dndHQoc3Ry dWN0IGk5MTVfYWRkcmVzc19zcGFjZSAqdm0pCj4+ICAgCXJldHVybiBjb250YWluZXJfb2Yodm0s IHN0cnVjdCBpOTE1X2dndHQsIGJhc2UpOwo+PiAgIH0KPj4gICAKPj4gKyNkZWZpbmUgSU5URUxf TUFYX1BQQVRfRU5UUklFUyA4Cj4+ICsjZGVmaW5lIElOVEVMX1BQQVRfUEVSRkVDVF9NQVRDSCAo fjBVKQo+PiArCj4+ICtzdHJ1Y3QgaW50ZWxfcHBhdDsKPj4gKwo+PiArc3RydWN0IGludGVsX3Bw YXRfZW50cnkgewo+PiArCXN0cnVjdCBpbnRlbF9wcGF0ICpwcGF0Owo+PiArCXN0cnVjdCBrcmVm IHJlZjsKPj4gKwl1OCB2YWx1ZTsKPj4gK307Cj4+ICsKPj4gK3N0cnVjdCBpbnRlbF9wcGF0IHsK Pj4gKwlzdHJ1Y3QgaW50ZWxfcHBhdF9lbnRyeSBlbnRyaWVzW0lOVEVMX01BWF9QUEFUX0VOVFJJ RVNdOwo+PiArCURFQ0xBUkVfQklUTUFQKHVzZWQsIElOVEVMX01BWF9QUEFUX0VOVFJJRVMpOwo+ PiArCURFQ0xBUkVfQklUTUFQKGRpcnR5LCBJTlRFTF9NQVhfUFBBVF9FTlRSSUVTKTsKPj4gKwl1 bnNpZ25lZCBpbnQgbWF4X2VudHJpZXM7Cj4+ICsJdTggY2xlYXJfdmFsdWU7Cj4+ICsJLyoKPj4g KwkgKiBSZXR1cm4gYSBzY29yZSB0byBzaG93IGhvdyB0d28gUFBBVCB2YWx1ZXMgbWF0Y2gsCj4+ ICsJICogYSBJTlRFTF9QUEFUX1BFUkZFQ1RfTUFUQ0ggaW5kaWNhdGVzIGEgcGVyZmVjdCBtYXRj aAo+PiArCSAqLwo+PiArCXVuc2lnbmVkIGludCAoKm1hdGNoKSh1OCBzcmMsIHU4IGRzdCk7Cj4+ ICsJdm9pZCAoKnVwZGF0ZV9odykoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUpOwo+PiAr Cj4+ICsJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTU7Cj4+ICt9Owo+PiArCj4+ICtjb25z dCBzdHJ1Y3QgaW50ZWxfcHBhdF9lbnRyeSAqCj4+ICtpbnRlbF9wcGF0X2dldChzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqaTkxNSwgdTggdmFsdWUpOwo+PiArdm9pZCBpbnRlbF9wcGF0X3B1dChj b25zdCBzdHJ1Y3QgaW50ZWxfcHBhdF9lbnRyeSAqZW50cnkpOwo+PiArCj4+ICAgaW50IGk5MTVf Z2VtX2luaXRfYWxpYXNpbmdfcHBndHQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUpOwo+ PiAgIHZvaWQgaTkxNV9nZW1fZmluaV9hbGlhc2luZ19wcGd0dChzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqaTkxNSk7Cj4+ICAgCj4gCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVk ZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZv L2ludGVsLWdmeAo=