From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Vivi, Rodrigo" Subject: Re: [RFCv6 2/2] drm/i915: Introduce private PAT management Date: Wed, 30 Aug 2017 22:00:01 +0000 Message-ID: <1504130400.8120.36.camel@rdvivi-vienna> References: <1504030448-31973-1-git-send-email-zhi.a.wang@intel.com> <1504030448-31973-2-git-send-email-zhi.a.wang@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1504030448-31973-2-git-send-email-zhi.a.wang@intel.com> Content-Language: en-US Content-ID: <25D4DD987A5FBC4781D7B0B194A4F4BF@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: "Wang, Zhi A" Cc: "intel-gfx@lists.freedesktop.org" , "Widawsky, Benjamin" , "intel-gvt-dev@lists.freedesktop.org" List-Id: intel-gfx@lists.freedesktop.org T24gV2VkLCAyMDE3LTA4LTMwIGF0IDAyOjE0ICswODAwLCBaaGkgV2FuZyB3cm90ZToNCj4gVGhl IHByaXZhdGUgUEFUIG1hbmFnZW1lbnQgaXMgdG8gc3VwcG9ydCBQUEFUIGVudHJ5IG1hbmlwdWxh dGlvbi4gVHdvDQo+IEFQSXMgYXJlIGludHJvZHVjZWQgZm9yIGR5bmFtaWNhbGx5IG1hbmFnaW5n IFBQQVQgZW50cmllczogaW50ZWxfcHBhdF9nZXQNCj4gYW5kIGludGVsX3BwYXRfcHV0Lg0KPiAN Cj4gaW50ZWxfcHBhdF9nZXQgd2lsbCBzZWFyY2ggZm9yIGFuIGV4aXN0aW5nIFBQQVQgZW50cnkg d2hpY2ggcGVyZmVjdGx5DQo+IG1hdGNoZXMgdGhlIHJlcXVpcmVkIFBQQVQgdmFsdWUuIElmIG5v dCwgaXQgd2lsbCB0cnkgdG8gYWxsb2NhdGUgb3INCj4gcmV0dXJuIGEgcGFydGlhbGx5IG1hdGNo ZWQgUFBBVCBlbnRyeSBpZiB0aGVyZSBpcyBhbnkgYXZhaWxhYmxlIFBQQVQNCj4gaW5kZXhlcyBv ciBub3QuDQo+IA0KPiBpbnRlbF9wcGF0X3B1dCB3aWxsIHB1dCBiYWNrIHRoZSBQUEFUIGVudHJ5 IHdoaWNoIGNvbWVzIGZyb20NCj4gaW50ZWxfcHBhdF9nZXQuIElmIGl0J3MgZHluYW1pY2FsbHkg YWxsb2NhdGVkLCB0aGUgcmVmZXJlbmNlIGNvdW50IHdpbGwNCj4gYmUgZGVjcmVhc2VkLiBJZiB0 aGUgcmVmZXJlbmNlIGNvdW50IHR1cm5zIGludG8gemVybywgdGhlIFBQQVQgaW5kZXggaXMNCj4g ZnJlZWQgYWdhaW4uDQo+IA0KPiBCZXNpZGVzLCBhbm90aGVyIHR3byBjYWxsYmFja3MgYXJlIGlu dHJvZHVjZWQgdG8gc3VwcG9ydCB0aGUgcHJpdmF0ZSBQQVQNCj4gbWFuYWdlbWVudCBmcmFtZXdv cmsuIE9uZSBpcyBwcGF0LT51cGRhdGVfaHcoKSwgd2hpY2ggd3JpdGVzIHRoZSBQUEFUDQo+IGNv bmZpZ3VyYXRpb25zIGluIHBwYXQtPmVudHJpZXMgaW50byBIVy4gQW5vdGhlciBvbmUgaXMgcHBh dC0+bWF0Y2gsIHdoaWNoDQo+IHdpbGwgcmV0dXJuIGEgc2NvcmUgdG8gc2hvdyBob3cgdHdvIFBQ QVQgdmFsdWVzIG1hdGNoIHdpdGggZWFjaCBvdGhlci4NCj4gDQo+IHY2Og0KPiANCj4gLSBBZGRy ZXNzIGFsbCBjb21tZW50cyBmcm9tIENocmlzOg0KPiBodHRwOi8vd3d3LnNwaW5pY3MubmV0L2xp c3RzL2ludGVsLWdmeC9tc2cxMzY4NTAuaHRtbA0KPiANCj4gLSBBZGRyZXNzIGFsbCBjb21tZW50 cyBmcm9tIEpvb25hczoNCj4gaHR0cDovL3d3dy5zcGluaWNzLm5ldC9saXN0cy9pbnRlbC1nZngv bXNnMTM2ODQ1Lmh0bWwNCj4gDQo+IHY1Og0KPiANCj4gLSBBZGQgY2hlY2sgYW5kIHdhcm5uaW5n cyBmb3IgdGhvc2UgcGxhdGZvcm1zIHdoaWNoIGRvbid0IGhhdmUgUFBBVC4NCj4gDQo+IHYzOg0K PiANCj4gLSBJbnRyb2R1Y2UgZGlydHkgYml0bWFwIGZvciBQUEFUIHJlZ2lzdGVycy4gKENocmlz KQ0KPiAtIENoYW5nZSB0aGUgbmFtZSBvZiB0aGUgcG9pbnRlciAiZGV2X3ByaXYiIHRvICJpOTE1 Ii4gKENocmlzKQ0KPiAtIGludGVsX3BwYXRfe2dldCwgcHV0fSByZXR1cm5zL3Rha2VzIGEgY29u c3QgaW50ZWxfcHBhdF9lbnRyeSAqLiAoQ2hyaXMpDQo+IA0KPiB2MjoNCj4gDQo+IC0gQVBJIHJl LWRlc2lnbi4gKENocmlzKQ0KPiANCj4gQ2M6IEJlbiBXaWRhd3NreSA8YmVuamFtaW4ud2lkYXdz a3lAaW50ZWwuY29tPg0KPiBDYzogUm9kcmlnbyBWaXZpIDxyb2RyaWdvLnZpdmlAaW50ZWwuY29t Pg0KPiBDYzogQ2hyaXMgV2lsc29uIDxjaHJpc0BjaHJpcy13aWxzb24uY28udWs+DQo+IENjOiBK b29uYXMgTGFodGluZW4gPGpvb25hcy5sYWh0aW5lbkBsaW51eC5pbnRlbC5jb20+DQo+IFNpZ25l ZC1vZmYtYnk6IFpoaSBXYW5nIDx6aGkuYS53YW5nQGludGVsLmNvbT4NCj4gLS0tDQo+ICBkcml2 ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oICAgICB8ICAgMiArDQo+ICBkcml2ZXJzL2dwdS9k cm0vaTkxNS9pOTE1X2dlbV9ndHQuYyB8IDI3MyArKysrKysrKysrKysrKysrKysrKysrKysrKysr Ky0tLS0tLS0NCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2d0dC5oIHwgIDM2ICsr KysrDQo+ICAzIGZpbGVzIGNoYW5nZWQsIDI2MiBpbnNlcnRpb25zKCspLCA0OSBkZWxldGlvbnMo LSkNCj4gDQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oIGIv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaA0KPiBpbmRleCA3NTg3ZWY1Li41ZmZkZTEw IDEwMDY0NA0KPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oDQo+ICsrKyBi L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgNCj4gQEAgLTIzMTIsNiArMjMxMiw4IEBA IHN0cnVjdCBkcm1faTkxNV9wcml2YXRlIHsNCj4gIAlERUNMQVJFX0hBU0hUQUJMRShtbV9zdHJ1 Y3RzLCA3KTsNCj4gIAlzdHJ1Y3QgbXV0ZXggbW1fbG9jazsNCj4gIA0KPiArCXN0cnVjdCBpbnRl bF9wcGF0IHBwYXQ7DQo+ICsNCj4gIAkvKiBLZXJuZWwgTW9kZXNldHRpbmcgKi8NCj4gIA0KPiAg CXN0cnVjdCBpbnRlbF9jcnRjICpwbGFuZV90b19jcnRjX21hcHBpbmdbSTkxNV9NQVhfUElQRVNd Ow0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZ3R0LmMgYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9ndHQuYw0KPiBpbmRleCBiNzRmYTlkLi4zMTA2 MTQyIDEwMDY0NA0KPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9ndHQuYw0K PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9ndHQuYw0KPiBAQCAtMjgxNiw0 MSArMjgxNiwyMDAgQEAgc3RhdGljIGludCBnZ3R0X3Byb2JlX2NvbW1vbihzdHJ1Y3QgaTkxNV9n Z3R0ICpnZ3R0LCB1NjQgc2l6ZSkNCj4gIAlyZXR1cm4gMDsNCj4gIH0NCj4gIA0KPiAtc3RhdGlj IHZvaWQgY25sX3NldHVwX3ByaXZhdGVfcHBhdChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2 X3ByaXYpDQo+ICtzdGF0aWMgc3RydWN0IGludGVsX3BwYXRfZW50cnkgKg0KPiArX19hbGxvY19w cGF0X2VudHJ5KHN0cnVjdCBpbnRlbF9wcGF0ICpwcGF0LCB1bnNpZ25lZCBpbnQgaW5kZXgsIHU4 IHZhbHVlKQ0KPiAgew0KPiArCXN0cnVjdCBpbnRlbF9wcGF0X2VudHJ5ICplbnRyeSA9ICZwcGF0 LT5lbnRyaWVzW2luZGV4XTsNCj4gKw0KPiArCUdFTV9CVUdfT04oaW5kZXggPj0gcHBhdC0+bWF4 X2VudHJpZXMpOw0KPiArCUdFTV9CVUdfT04odGVzdF9iaXQoaW5kZXgsIHBwYXQtPnVzZWQpKTsN Cj4gKw0KPiArCWVudHJ5LT5wcGF0ID0gcHBhdDsNCj4gKwllbnRyeS0+dmFsdWUgPSB2YWx1ZTsN Cj4gKwlrcmVmX2luaXQoJmVudHJ5LT5yZWYpOw0KPiArCXNldF9iaXQoaW5kZXgsIHBwYXQtPnVz ZWQpOw0KPiArCXNldF9iaXQoaW5kZXgsIHBwYXQtPmRpcnR5KTsNCj4gKw0KPiArCXJldHVybiBl bnRyeTsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQgX19mcmVlX3BwYXRfZW50cnkoc3RydWN0 IGludGVsX3BwYXRfZW50cnkgKmVudHJ5KQ0KPiArew0KPiArCXN0cnVjdCBpbnRlbF9wcGF0ICpw cGF0ID0gZW50cnktPnBwYXQ7DQo+ICsJdW5zaWduZWQgaW50IGluZGV4ID0gZW50cnkgLSBwcGF0 LT5lbnRyaWVzOw0KPiArDQo+ICsJR0VNX0JVR19PTihpbmRleCA+PSBwcGF0LT5tYXhfZW50cmll cyk7DQo+ICsJR0VNX0JVR19PTighdGVzdF9iaXQoaW5kZXgsIHBwYXQtPnVzZWQpKTsNCj4gKw0K PiArCWVudHJ5LT52YWx1ZSA9IHBwYXQtPmNsZWFyX3ZhbHVlOw0KPiArCWNsZWFyX2JpdChpbmRl eCwgcHBhdC0+dXNlZCk7DQo+ICsJc2V0X2JpdChpbmRleCwgcHBhdC0+ZGlydHkpOw0KPiArfQ0K PiArDQo+ICsvKioNCj4gKyAqIGludGVsX3BwYXRfZ2V0IC0gZ2V0IGEgdXNhYmxlIFBQQVQgZW50 cnkNCj4gKyAqIEBpOTE1OiBpOTE1IGRldmljZSBpbnN0YW5jZQ0KPiArICogQHZhbHVlOiB0aGUg UFBBVCB2YWx1ZSByZXF1aXJlZCBieSB0aGUgY2FsbGVyDQo+ICsgKg0KPiArICogVGhlIGZ1bmN0 aW9uIHRyaWVzIHRvIHNlYXJjaCBpZiB0aGVyZSBpcyBhbiBleGlzdGluZyBQUEFUIGVudHJ5IHdo aWNoDQo+ICsgKiBtYXRjaGVzIHdpdGggdGhlIHJlcXVpcmVkIHZhbHVlLiBJZiBwZXJmZWN0bHkg bWF0Y2hlZCwgdGhlIGV4aXN0aW5nIFBQQVQNCj4gKyAqIGVudHJ5IHdpbGwgYmUgdXNlZC4gSWYg b25seSBwYXJ0aWFsbHkgbWF0Y2hlZCwgaXQgd2lsbCB0cnkgdG8gY2hlY2sgaWYNCj4gKyAqIHRo ZXJlIGlzIGFueSBhdmFpbGFibGUgUFBBVCBpbmRleC4gSWYgeWVzLCBpdCB3aWxsIGFsbG9jYXRl IGEgbmV3IFBQQVQNCj4gKyAqIGluZGV4IGZvciB0aGUgcmVxdWlyZWQgZW50cnkgYW5kIHVwZGF0 ZSB0aGUgSFcuIElmIG5vdCwgdGhlIHBhcnRpYWxseQ0KPiArICogbWF0Y2hlZCBlbnRyeSB3aWxs IGJlIHVzZWQuDQo+ICsgKi8NCj4gK2NvbnN0IHN0cnVjdCBpbnRlbF9wcGF0X2VudHJ5ICoNCj4g K2ludGVsX3BwYXRfZ2V0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1LCB1OCB2YWx1ZSkN Cj4gK3sNCj4gKwlzdHJ1Y3QgaW50ZWxfcHBhdCAqcHBhdCA9ICZpOTE1LT5wcGF0Ow0KPiArCXN0 cnVjdCBpbnRlbF9wcGF0X2VudHJ5ICplbnRyeTsNCj4gKwl1bnNpZ25lZCBpbnQgc2Nhbm5lZCwg YmVzdF9zY29yZTsNCj4gKwlpbnQgaTsNCj4gKw0KPiArCUdFTV9CVUdfT04oIXBwYXQtPm1heF9l bnRyaWVzKTsNCj4gKw0KPiArCXNjYW5uZWQgPSBiZXN0X3Njb3JlID0gMDsNCj4gKw0KPiArCWZv cl9lYWNoX3NldF9iaXQoaSwgcHBhdC0+dXNlZCwgcHBhdC0+bWF4X2VudHJpZXMpIHsNCj4gKwkJ dW5zaWduZWQgaW50IHNjb3JlOw0KPiArDQo+ICsJCWVudHJ5ID0gJnBwYXQtPmVudHJpZXNbaV07 DQo+ICsJCXNjb3JlID0gcHBhdC0+bWF0Y2goZW50cnktPnZhbHVlLCB2YWx1ZSk7DQo+ICsJCWlm IChzY29yZSA+IGJlc3Rfc2NvcmUpIHsNCj4gKwkJCWlmIChzY29yZSA9PSBJTlRFTF9QUEFUX1BF UkZFQ1RfTUFUQ0gpIHsNCj4gKwkJCQlrcmVmX2dldCgmZW50cnktPnJlZik7DQo+ICsJCQkJcmV0 dXJuIGVudHJ5Ow0KPiArCQkJfQ0KPiArCQkJYmVzdF9zY29yZSA9IHNjb3JlOw0KPiArCQl9DQo+ ICsJCXNjYW5uZWQrKzsNCj4gKwl9DQo+ICsNCj4gKwlpZiAoc2Nhbm5lZCA9PSBwcGF0LT5tYXhf ZW50cmllcykgew0KPiArCQlpZiAoIWJlc3Rfc2NvcmUpDQo+ICsJCQlyZXR1cm4gRVJSX1BUUigt RU5PU1BDKTsNCj4gKw0KPiArCQlrcmVmX2dldCgmZW50cnktPnJlZik7DQo+ICsJCXJldHVybiBl bnRyeTsNCj4gKwl9DQo+ICsNCj4gKwlpID0gZmluZF9maXJzdF96ZXJvX2JpdChwcGF0LT51c2Vk LCBwcGF0LT5tYXhfZW50cmllcyk7DQo+ICsJZW50cnkgPSBfX2FsbG9jX3BwYXRfZW50cnkocHBh dCwgaSwgdmFsdWUpOw0KPiArCXBwYXQtPnVwZGF0ZV9odyhpOTE1KTsNCj4gKwlyZXR1cm4gZW50 cnk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkIHJlbGVhc2VfcHBhdChzdHJ1Y3Qga3JlZiAq a3JlZikNCj4gK3sNCj4gKwlzdHJ1Y3QgaW50ZWxfcHBhdF9lbnRyeSAqZW50cnkgPQ0KPiArCQlj b250YWluZXJfb2Yoa3JlZiwgc3RydWN0IGludGVsX3BwYXRfZW50cnksIHJlZik7DQo+ICsJc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSBlbnRyeS0+cHBhdC0+aTkxNTsNCj4gKw0KPiAr CV9fZnJlZV9wcGF0X2VudHJ5KGVudHJ5KTsNCj4gKwllbnRyeS0+cHBhdC0+dXBkYXRlX2h3KGk5 MTUpOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAqIGludGVsX3BwYXRfcHV0IC0gcHV0IGJhY2sg dGhlIFBQQVQgZW50cnkgZ290IGZyb20gaW50ZWxfcHBhdF9nZXQoKQ0KPiArICogQGVudHJ5OiBh biBpbnRlbCBQUEFUIGVudHJ5DQo+ICsgKg0KPiArICogUHV0IGJhY2sgdGhlIFBQQVQgZW50cnkg Z290IGZyb20gaW50ZWxfcHBhdF9nZXQoKS4gSWYgdGhlIFBQQVQgaW5kZXggb2YgdGhlDQo+ICsg KiBlbnRyeSBpcyBkeW5hbWljYWxseSBhbGxvY2F0ZWQsIGl0cyByZWZlcmVuY2UgY291bnQgd2ls bCBiZSBkZWNyZWFzZWQuIE9uY2UNCj4gKyAqIHRoZSByZWZlcmVuY2UgY291bnQgYmVjb21lcyBp bnRvIHplcm8sIHRoZSBQUEFUIGluZGV4IGJlY29tZXMgZnJlZSBhZ2Fpbi4NCj4gKyAqLw0KPiAr dm9pZCBpbnRlbF9wcGF0X3B1dChjb25zdCBzdHJ1Y3QgaW50ZWxfcHBhdF9lbnRyeSAqZW50cnkp DQo+ICt7DQo+ICsJc3RydWN0IGludGVsX3BwYXQgKnBwYXQgPSBlbnRyeS0+cHBhdDsNCj4gKwl1 bnNpZ25lZCBpbnQgaW5kZXggPSBlbnRyeSAtIHBwYXQtPmVudHJpZXM7DQo+ICsNCj4gKwlHRU1f QlVHX09OKCFwcGF0LT5tYXhfZW50cmllcyk7DQo+ICsNCj4gKwlrcmVmX3B1dCgmcHBhdC0+ZW50 cmllc1tpbmRleF0ucmVmLCByZWxlYXNlX3BwYXQpOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9p ZCBjbmxfcHJpdmF0ZV9wYXRfdXBkYXRlX2h3KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZf cHJpdikNCj4gK3sNCj4gKwlzdHJ1Y3QgaW50ZWxfcHBhdCAqcHBhdCA9ICZkZXZfcHJpdi0+cHBh dDsNCj4gKwlpbnQgaTsNCj4gKw0KPiArCWZvcl9lYWNoX3NldF9iaXQoaSwgcHBhdC0+ZGlydHks IHBwYXQtPm1heF9lbnRyaWVzKSB7DQo+ICsJCUk5MTVfV1JJVEUoR0VOMTBfUEFUX0lOREVYKGkp LCBwcGF0LT5lbnRyaWVzW2ldLnZhbHVlKTsNCj4gKwkJY2xlYXJfYml0KGksIHBwYXQtPmRpcnR5 KTsNCj4gKwl9DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkIGJkd19wcml2YXRlX3BhdF91cGRh dGVfaHcoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQ0KPiArew0KPiArCXN0cnVj dCBpbnRlbF9wcGF0ICpwcGF0ID0gJmRldl9wcml2LT5wcGF0Ow0KPiArCXU2NCBwYXQgPSAwOw0K PiArCWludCBpOw0KPiArDQo+ICsJZm9yIChpID0gMDsgaSA8IHBwYXQtPm1heF9lbnRyaWVzOyBp KyspDQo+ICsJCXBhdCB8PSBHRU44X1BQQVQoaSwgcHBhdC0+ZW50cmllc1tpXS52YWx1ZSk7DQo+ ICsNCj4gKwliaXRtYXBfY2xlYXIocHBhdC0+ZGlydHksIDAsIHBwYXQtPm1heF9lbnRyaWVzKTsN Cj4gKw0KPiArCUk5MTVfV1JJVEUoR0VOOF9QUklWQVRFX1BBVF9MTywgbG93ZXJfMzJfYml0cyhw YXQpKTsNCj4gKwlJOTE1X1dSSVRFKEdFTjhfUFJJVkFURV9QQVRfSEksIHVwcGVyXzMyX2JpdHMo cGF0KSk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB1bnNpZ25lZCBpbnQgYmR3X3ByaXZhdGVfcGF0 X21hdGNoKHU4IHNyYywgdTggZHN0KQ0KPiArew0KPiArCXVuc2lnbmVkIGludCBzY29yZSA9IDA7 DQo+ICsNCj4gKwkvKiBDYWNoZSBhdHRyaWJ1dGUgaGFzIHRvIGJlIG1hdGNoZWQuICovDQo+ICsJ aWYgKEdFTjhfUFBBVF9HRVRfQ0Eoc3JjKSAhPSBHRU44X1BQQVRfR0VUX0NBKGRzdCkpDQo+ICsJ CXJldHVybiAwOw0KPiArDQo+ICsJaWYgKEdFTjhfUFBBVF9HRVRfVEMoc3JjKSA9PSBHRU44X1BQ QVRfR0VUX1RDKGRzdCkpDQo+ICsJCXNjb3JlICs9IDI7DQo+ICsNCj4gKwlpZihHRU44X1BQQVRf R0VUX0FHRShzcmMpID09IEdFTjhfUFBBVF9HRVRfQUdFKGRzdCkpDQo+ICsJCXNjb3JlICs9IDE7 DQo+ICsNCj4gKwlpZiAoc2NvcmUgPT0gMykNCj4gKwkJcmV0dXJuIElOVEVMX1BQQVRfUEVSRkVD VF9NQVRDSDsNCj4gKw0KPiArCXJldHVybiBzY29yZTsNCj4gK30NCj4gKw0KPiArc3RhdGljIHVu c2lnbmVkIGludCBjaHZfcHJpdmF0ZV9wYXRfbWF0Y2godTggc3JjLCB1OCBkc3QpDQo+ICt7DQo+ ICsJcmV0dXJuIChDSFZfUFBBVF9HRVRfU05PT1Aoc3JjKSA9PSBDSFZfUFBBVF9HRVRfU05PT1Ao ZHN0KSkgPw0KPiArCQlJTlRFTF9QUEFUX1BFUkZFQ1RfTUFUQ0ggOiAwOw0KPiArfQ0KPiArDQo+ ICtzdGF0aWMgdm9pZCBjbmxfc2V0dXBfcHJpdmF0ZV9wcGF0KHN0cnVjdCBpbnRlbF9wcGF0ICpw cGF0KQ0KPiArew0KPiArCXBwYXQtPm1heF9lbnRyaWVzID0gODsNCj4gKwlwcGF0LT51cGRhdGVf aHcgPSBjbmxfcHJpdmF0ZV9wYXRfdXBkYXRlX2h3Ow0KPiArCXBwYXQtPm1hdGNoID0gYmR3X3By aXZhdGVfcGF0X21hdGNoOw0KPiArCXBwYXQtPmNsZWFyX3ZhbHVlID0gR0VOOF9QUEFUX0xMQ0VM TEMgfCBHRU44X1BQQVRfQUdFKDMpOw0KPiArDQo+ICAJLyogWFhYOiBzcGVjIGlzIHVuY2xlYXIg aWYgdGhpcyBpcyBzdGlsbCBuZWVkZWQgZm9yIENOTCsgKi8NCj4gLQlpZiAoIVVTRVNfUFBHVFQo ZGV2X3ByaXYpKSB7DQo+IC0JCUk5MTVfV1JJVEUoR0VOMTBfUEFUX0lOREVYKDApLCBHRU44X1BQ QVRfVUMpOw0KPiArCWlmICghVVNFU19QUEdUVChwcGF0LT5pOTE1KSkgew0KPiArCQlfX2FsbG9j X3BwYXRfZW50cnkocHBhdCwgUFBBVF9DQUNIRURfUERFX0lOREVYLCBHRU44X1BQQVRfVUMpOw0K PiAgCQlyZXR1cm47DQo+ICAJfQ0KPiAgDQo+IC0JSTkxNV9XUklURShHRU4xMF9QQVRfSU5ERVgo MCksIEdFTjhfUFBBVF9XQiB8IEdFTjhfUFBBVF9MTEMpOw0KPiAtCUk5MTVfV1JJVEUoR0VOMTBf UEFUX0lOREVYKDEpLCBHRU44X1BQQVRfV0MgfCBHRU44X1BQQVRfTExDRUxMQyk7DQo+IC0JSTkx NV9XUklURShHRU4xMF9QQVRfSU5ERVgoMiksIEdFTjhfUFBBVF9XVCB8IEdFTjhfUFBBVF9MTENF TExDKTsNCj4gLQlJOTE1X1dSSVRFKEdFTjEwX1BBVF9JTkRFWCgzKSwgR0VOOF9QUEFUX1VDKTsN Cj4gLQlJOTE1X1dSSVRFKEdFTjEwX1BBVF9JTkRFWCg0KSwgR0VOOF9QUEFUX0xMQ0VMTEMgfCBH RU44X1BQQVRfQUdFKDApKTsNCj4gLQlJOTE1X1dSSVRFKEdFTjEwX1BBVF9JTkRFWCg1KSwgR0VO OF9QUEFUX0xMQ0VMTEMgfCBHRU44X1BQQVRfQUdFKDEpKTsNCj4gLQlJOTE1X1dSSVRFKEdFTjEw X1BBVF9JTkRFWCg2KSwgR0VOOF9QUEFUX0xMQ0VMTEMgfCBHRU44X1BQQVRfQUdFKDIpKTsNCj4g LQlJOTE1X1dSSVRFKEdFTjEwX1BBVF9JTkRFWCg3KSwgR0VOOF9QUEFUX0xMQ0VMTEMgfCBHRU44 X1BQQVRfQUdFKDMpKTsNCg0KR2VuOCBhbGxvY2F0aW9uIHN0eWxlIGRvZXNuJ3Qgd29yayBvbiBD TkwuDQpJIGRvbid0IHNlZSB3aGVyZSBhbGwgdGhlc2UgcmVnaXN0ZXJzIHdvdWxkIGJlIGdldHRp bmcgcHJvcGVybHkgd3JpdHRlbi4NCg0KPiArCS8qIFNlZSBnZW44X3B0ZV9lbmNvZGUoKSBmb3Ig dGhlIG1hcHBpbmcgZnJvbSBjYWNoZS1sZXZlbCB0byBQUEFUICovDQo+ICsJX19hbGxvY19wcGF0 X2VudHJ5KHBwYXQsIFBQQVRfQ0FDSEVEX1BERV9JTkRFWCwgR0VOOF9QUEFUX1dCIHwgR0VOOF9Q UEFUX0xMQyk7DQo+ICsJX19hbGxvY19wcGF0X2VudHJ5KHBwYXQsIFBQQVRfRElTUExBWV9FTExD X0lOREVYLCBHRU44X1BQQVRfV1QgfCBHRU44X1BQQVRfTExDRUxMQyk7DQo+ICsJX19hbGxvY19w cGF0X2VudHJ5KHBwYXQsIFBQQVRfVU5DQUNIRURfSU5ERVgsIEdFTjhfUFBBVF9VQyk7DQo+ICsJ X19hbGxvY19wcGF0X2VudHJ5KHBwYXQsIFBQQVRfQ0FDSEVEX0lOREVYLCBHRU44X1BQQVRfTExD RUxMQyB8IEdFTjhfUFBBVF9BR0UoMCkpOw0KPiAgfQ0KPiAgDQo+ICAvKiBUaGUgR0dUVCBhbmQg UFBHVFQgbmVlZCBhIHByaXZhdGUgUFBBVCBzZXR1cCBpbiBvcmRlciB0byBoYW5kbGUgY2FjaGVh YmlsaXR5DQo+ICAgKiBiaXRzLiBXaGVuIHVzaW5nIGFkdmFuY2VkIGNvbnRleHRzIGVhY2ggY29u dGV4dCBzdG9yZXMgaXRzIG93biBQQVQsIGJ1dA0KPiAgICogd3JpdGluZyB0aGlzIGRhdGEgc2hv dWxkbid0IGJlIGhhcm1mdWwgZXZlbiBpbiB0aG9zZSBjYXNlcy4gKi8NCj4gLXN0YXRpYyB2b2lk IGJkd19zZXR1cF9wcml2YXRlX3BwYXQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2 KQ0KPiArc3RhdGljIHZvaWQgYmR3X3NldHVwX3ByaXZhdGVfcHBhdChzdHJ1Y3QgaW50ZWxfcHBh dCAqcHBhdCkNCj4gIHsNCj4gLQl1NjQgcGF0Ow0KPiArCXBwYXQtPm1heF9lbnRyaWVzID0gODsN Cj4gKwlwcGF0LT51cGRhdGVfaHcgPSBiZHdfcHJpdmF0ZV9wYXRfdXBkYXRlX2h3Ow0KPiArCXBw YXQtPm1hdGNoID0gYmR3X3ByaXZhdGVfcGF0X21hdGNoOw0KPiArCXBwYXQtPmNsZWFyX3ZhbHVl ID0gR0VOOF9QUEFUX1dCIHwgR0VOOF9QUEFUX0xMQ0VMTEMgfCBHRU44X1BQQVRfQUdFKDMpOw0K PiAgDQo+IC0JcGF0ID0gR0VOOF9QUEFUKDAsIEdFTjhfUFBBVF9XQiB8IEdFTjhfUFBBVF9MTEMp ICAgICB8IC8qIGZvciBub3JtYWwgb2JqZWN0cywgbm8gZUxMQyAqLw0KPiAtCSAgICAgIEdFTjhf UFBBVCgxLCBHRU44X1BQQVRfV0MgfCBHRU44X1BQQVRfTExDRUxMQykgfCAvKiBmb3Igc29tZXRo aW5nIHBvaW50aW5nIHRvIHB0ZXM/ICovDQo+IC0JICAgICAgR0VOOF9QUEFUKDIsIEdFTjhfUFBB VF9XVCB8IEdFTjhfUFBBVF9MTENFTExDKSB8IC8qIGZvciBzY2Fub3V0IHdpdGggZUxMQyAqLw0K PiAtCSAgICAgIEdFTjhfUFBBVCgzLCBHRU44X1BQQVRfVUMpICAgICAgICAgICAgICAgICAgICAg fCAvKiBVbmNhY2hlZCBvYmplY3RzLCBtb3N0bHkgZm9yIHNjYW5vdXQgKi8NCj4gLQkgICAgICBH RU44X1BQQVQoNCwgR0VOOF9QUEFUX1dCIHwgR0VOOF9QUEFUX0xMQ0VMTEMgfCBHRU44X1BQQVRf QUdFKDApKSB8DQo+IC0JICAgICAgR0VOOF9QUEFUKDUsIEdFTjhfUFBBVF9XQiB8IEdFTjhfUFBB VF9MTENFTExDIHwgR0VOOF9QUEFUX0FHRSgxKSkgfA0KPiAtCSAgICAgIEdFTjhfUFBBVCg2LCBH RU44X1BQQVRfV0IgfCBHRU44X1BQQVRfTExDRUxMQyB8IEdFTjhfUFBBVF9BR0UoMikpIHwNCj4g LQkgICAgICBHRU44X1BQQVQoNywgR0VOOF9QUEFUX1dCIHwgR0VOOF9QUEFUX0xMQ0VMTEMgfCBH RU44X1BQQVRfQUdFKDMpKTsNCj4gLQ0KPiAtCWlmICghVVNFU19QUEdUVChkZXZfcHJpdikpDQo+ ICsJaWYgKCFVU0VTX1BQR1RUKHBwYXQtPmk5MTUpKSB7DQo+ICAJCS8qIFNwZWM6ICJGb3IgR0dU VCwgdGhlcmUgaXMgTk8gcGF0X3NlbFsyOjBdIGZyb20gdGhlIGVudHJ5LA0KPiAgCQkgKiBzbyBS VEwgd2lsbCBhbHdheXMgdXNlIHRoZSB2YWx1ZSBjb3JyZXNwb25kaW5nIHRvDQo+ICAJCSAqIHBh dF9zZWwgPSAwMDAiLg0KPiBAQCAtMjg2NCwxNyArMzAyMywyNiBAQCBzdGF0aWMgdm9pZCBiZHdf c2V0dXBfcHJpdmF0ZV9wcGF0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikNCj4g IAkJICogU28gd2UgY2FuIHN0aWxsIGhvbGQgb250byBhbGwgb3VyIGFzc3VtcHRpb25zIHdydCBj cHUNCj4gIAkJICogY2xmbHVzaGluZyBvbiBMTEMgbWFjaGluZXMuDQo+ICAJCSAqLw0KPiAtCQlw YXQgPSBHRU44X1BQQVQoMCwgR0VOOF9QUEFUX1VDKTsNCj4gKwkJX19hbGxvY19wcGF0X2VudHJ5 KHBwYXQsIFBQQVRfQ0FDSEVEX1BERV9JTkRFWCwgR0VOOF9QUEFUX1VDKTsNCj4gKwkJcmV0dXJu Ow0KPiArCX0NCj4gIA0KPiAtCS8qIFhYWDogc3BlYyBkZWZpbmVzIHRoaXMgYXMgMiBkaXN0aW5j dCByZWdpc3RlcnMuIEl0J3MgdW5jbGVhciBpZiBhIDY0Yg0KPiAtCSAqIHdyaXRlIHdvdWxkIHdv cmsuICovDQo+IC0JSTkxNV9XUklURShHRU44X1BSSVZBVEVfUEFUX0xPLCBwYXQpOw0KPiAtCUk5 MTVfV1JJVEUoR0VOOF9QUklWQVRFX1BBVF9ISSwgcGF0ID4+IDMyKTsNCj4gKwkvKiBTZWUgZ2Vu OF9wdGVfZW5jb2RlKCkgZm9yIHRoZSBtYXBwaW5nIGZyb20gY2FjaGUtbGV2ZWwgdG8gUFBBVCAq Lw0KPiArCS8qIGZvciBub3JtYWwgb2JqZWN0cywgbm8gZUxMQyAqLw0KPiArCV9fYWxsb2NfcHBh dF9lbnRyeShwcGF0LCBQUEFUX0NBQ0hFRF9QREVfSU5ERVgsIEdFTjhfUFBBVF9XQiB8IEdFTjhf UFBBVF9MTEMpOw0KPiArCS8qIGZvciBzY2Fub3V0IHdpdGggZUxMQyAqLw0KPiArCV9fYWxsb2Nf cHBhdF9lbnRyeShwcGF0LCBQUEFUX0RJU1BMQVlfRUxMQ19JTkRFWCwgR0VOOF9QUEFUX1dUIHwg R0VOOF9QUEFUX0xMQ0VMTEMpOw0KPiArCS8qIFVuY2FjaGVkIG9iamVjdHMsIG1vc3RseSBmb3Ig c2Nhbm91dCAqLw0KPiArCV9fYWxsb2NfcHBhdF9lbnRyeShwcGF0LCBQUEFUX1VOQ0FDSEVEX0lO REVYLCBHRU44X1BQQVRfVUMpOw0KPiArCV9fYWxsb2NfcHBhdF9lbnRyeShwcGF0LCBQUEFUX0NB Q0hFRF9JTkRFWCwgR0VOOF9QUEFUX1dCIHwgR0VOOF9QUEFUX0xMQ0VMTEMgfCBHRU44X1BQQVRf QUdFKDApKTsNCj4gIH0NCj4gIA0KPiAtc3RhdGljIHZvaWQgY2h2X3NldHVwX3ByaXZhdGVfcHBh dChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpDQo+ICtzdGF0aWMgdm9pZCBjaHZf c2V0dXBfcHJpdmF0ZV9wcGF0KHN0cnVjdCBpbnRlbF9wcGF0ICpwcGF0KQ0KPiAgew0KPiAtCXU2 NCBwYXQ7DQo+ICsJcHBhdC0+bWF4X2VudHJpZXMgPSA4Ow0KPiArCXBwYXQtPnVwZGF0ZV9odyA9 IGJkd19wcml2YXRlX3BhdF91cGRhdGVfaHc7DQo+ICsJcHBhdC0+bWF0Y2ggPSBjaHZfcHJpdmF0 ZV9wYXRfbWF0Y2g7DQo+ICsJcHBhdC0+Y2xlYXJfdmFsdWUgPSBDSFZfUFBBVF9TTk9PUDsNCj4g IA0KPiAgCS8qDQo+ICAJICogTWFwIFdCIG9uIEJEVyB0byBzbm9vcGVkIG9uIENIVi4NCj4gQEAg LTI4OTQsMTcgKzMwNjIsMTIgQEAgc3RhdGljIHZvaWQgY2h2X3NldHVwX3ByaXZhdGVfcHBhdChz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpDQo+ICAJICogV2hpY2ggbWVhbnMgd2Ug bXVzdCBzZXQgdGhlIHNub29wIGJpdCBpbiBQQVQgZW50cnkgMA0KPiAgCSAqIGluIG9yZGVyIHRv IGtlZXAgdGhlIGdsb2JhbCBzdGF0dXMgcGFnZSB3b3JraW5nLg0KPiAgCSAqLw0KPiAtCXBhdCA9 IEdFTjhfUFBBVCgwLCBDSFZfUFBBVF9TTk9PUCkgfA0KPiAtCSAgICAgIEdFTjhfUFBBVCgxLCAw KSB8DQo+IC0JICAgICAgR0VOOF9QUEFUKDIsIDApIHwNCj4gLQkgICAgICBHRU44X1BQQVQoMywg MCkgfA0KPiAtCSAgICAgIEdFTjhfUFBBVCg0LCBDSFZfUFBBVF9TTk9PUCkgfA0KPiAtCSAgICAg IEdFTjhfUFBBVCg1LCBDSFZfUFBBVF9TTk9PUCkgfA0KPiAtCSAgICAgIEdFTjhfUFBBVCg2LCBD SFZfUFBBVF9TTk9PUCkgfA0KPiAtCSAgICAgIEdFTjhfUFBBVCg3LCBDSFZfUFBBVF9TTk9PUCk7 DQo+ICANCj4gLQlJOTE1X1dSSVRFKEdFTjhfUFJJVkFURV9QQVRfTE8sIHBhdCk7DQo+IC0JSTkx NV9XUklURShHRU44X1BSSVZBVEVfUEFUX0hJLCBwYXQgPj4gMzIpOw0KPiArCS8qIFNlZSBnZW44 X3B0ZV9lbmNvZGUoKSBmb3IgdGhlIG1hcHBpbmcgZnJvbSBjYWNoZS1sZXZlbCB0byBQUEFUICov DQo+ICsJX19hbGxvY19wcGF0X2VudHJ5KHBwYXQsIFBQQVRfQ0FDSEVEX1BERV9JTkRFWCwgQ0hW X1BQQVRfU05PT1ApOw0KPiArCV9fYWxsb2NfcHBhdF9lbnRyeShwcGF0LCBQUEFUX0RJU1BMQVlf RUxMQ19JTkRFWCwgMCk7DQo+ICsJX19hbGxvY19wcGF0X2VudHJ5KHBwYXQsIFBQQVRfVU5DQUNI RURfSU5ERVgsIDApOw0KPiArCV9fYWxsb2NfcHBhdF9lbnRyeShwcGF0LCBQUEFUX0NBQ0hFRF9J TkRFWCwgQ0hWX1BQQVRfU05PT1ApOw0KPiAgfQ0KPiAgDQo+ICBzdGF0aWMgdm9pZCBnZW42X2dt Y2hfcmVtb3ZlKHN0cnVjdCBpOTE1X2FkZHJlc3Nfc3BhY2UgKnZtKQ0KPiBAQCAtMjkxNywxMiAr MzA4MCwyNyBAQCBzdGF0aWMgdm9pZCBnZW42X2dtY2hfcmVtb3ZlKHN0cnVjdCBpOTE1X2FkZHJl c3Nfc3BhY2UgKnZtKQ0KPiAgDQo+ICBzdGF0aWMgdm9pZCBzZXR1cF9wcml2YXRlX3BhdChzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpDQo+ICB7DQo+ICsJc3RydWN0IGludGVsX3Bw YXQgKnBwYXQgPSAmZGV2X3ByaXYtPnBwYXQ7DQo+ICsJaW50IGk7DQo+ICsNCj4gKwlwcGF0LT5p OTE1ID0gZGV2X3ByaXY7DQo+ICsNCj4gIAlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSAxMCkN Cj4gLQkJY25sX3NldHVwX3ByaXZhdGVfcHBhdChkZXZfcHJpdik7DQo+ICsJCWNubF9zZXR1cF9w cml2YXRlX3BwYXQocHBhdCk7DQo+ICAJZWxzZSBpZiAoSVNfQ0hFUlJZVklFVyhkZXZfcHJpdikg fHwgSVNfR0VOOV9MUChkZXZfcHJpdikpDQo+IC0JCWNodl9zZXR1cF9wcml2YXRlX3BwYXQoZGV2 X3ByaXYpOw0KPiArCQljaHZfc2V0dXBfcHJpdmF0ZV9wcGF0KHBwYXQpOw0KPiAgCWVsc2UNCj4g LQkJYmR3X3NldHVwX3ByaXZhdGVfcHBhdChkZXZfcHJpdik7DQo+ICsJCWJkd19zZXR1cF9wcml2 YXRlX3BwYXQocHBhdCk7DQo+ICsNCj4gKwlHRU1fQlVHX09OKHBwYXQtPm1heF9lbnRyaWVzID4g SU5URUxfTUFYX1BQQVRfRU5UUklFUyk7DQo+ICsNCj4gKwlmb3JfZWFjaF9jbGVhcl9iaXQoaSwg cHBhdC0+dXNlZCwgcHBhdC0+bWF4X2VudHJpZXMpIHsNCj4gKwkJcHBhdC0+ZW50cmllc1tpXS52 YWx1ZSA9IHBwYXQtPmNsZWFyX3ZhbHVlOw0KPiArCQlwcGF0LT5lbnRyaWVzW2ldLnBwYXQgPSBw cGF0Ow0KPiArCQlzZXRfYml0KGksIHBwYXQtPmRpcnR5KTsNCj4gKwl9DQo+ICsNCj4gKwlwcGF0 LT51cGRhdGVfaHcoZGV2X3ByaXYpOw0KPiAgfQ0KPiAgDQo+ICBzdGF0aWMgaW50IGdlbjhfZ21j aF9wcm9iZShzdHJ1Y3QgaTkxNV9nZ3R0ICpnZ3R0KQ0KPiBAQCAtMzIzNiwxMyArMzQxNCwxMCBA QCB2b2lkIGk5MTVfZ2VtX3Jlc3RvcmVfZ3R0X21hcHBpbmdzKHN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdikNCj4gIAlnZ3R0LT5iYXNlLmNsb3NlZCA9IGZhbHNlOw0KPiAgDQo+ICAJ aWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gOCkgew0KPiAtCQlpZiAoSU5URUxfR0VOKGRldl9w cml2KSA+PSAxMCkNCj4gLQkJCWNubF9zZXR1cF9wcml2YXRlX3BwYXQoZGV2X3ByaXYpOw0KPiAt CQllbHNlIGlmIChJU19DSEVSUllWSUVXKGRldl9wcml2KSB8fCBJU19HRU45X0xQKGRldl9wcml2 KSkNCj4gLQkJCWNodl9zZXR1cF9wcml2YXRlX3BwYXQoZGV2X3ByaXYpOw0KPiAtCQllbHNlDQo+ IC0JCQliZHdfc2V0dXBfcHJpdmF0ZV9wcGF0KGRldl9wcml2KTsNCj4gKwkJc3RydWN0IGludGVs X3BwYXQgKnBwYXQgPSAmZGV2X3ByaXYtPnBwYXQ7DQo+ICANCj4gKwkJYml0bWFwX3NldChwcGF0 LT5kaXJ0eSwgMCwgcHBhdC0+bWF4X2VudHJpZXMpOw0KPiArCQlkZXZfcHJpdi0+cHBhdC51cGRh dGVfaHcoZGV2X3ByaXYpOw0KPiAgCQlyZXR1cm47DQo+ICAJfQ0KPiAgDQo+IGRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9ndHQuaCBiL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2k5MTVfZ2VtX2d0dC5oDQo+IGluZGV4IGI0ZTNhYTcuLmUxMGNhODkgMTAwNjQ0DQo+IC0t LSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2d0dC5oDQo+ICsrKyBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2k5MTVfZ2VtX2d0dC5oDQo+IEBAIC0xNDMsNiArMTQzLDExIEBAIHR5cGVk ZWYgdTY0IGdlbjhfcHBndHRfcG1sNGVfdDsNCj4gICNkZWZpbmUgR0VOOF9QUEFUX0VMTENfT1ZF UlJJREUJCSgwPDwyKQ0KPiAgI2RlZmluZSBHRU44X1BQQVQoaSwgeCkJCQkoKHU2NCkoeCkgPDwg KChpKSAqIDgpKQ0KPiAgDQo+ICsjZGVmaW5lIEdFTjhfUFBBVF9HRVRfQ0EoeCkgKCh4KSAmIDMp DQo+ICsjZGVmaW5lIEdFTjhfUFBBVF9HRVRfVEMoeCkgKCh4KSAmICgzIDw8IDIpKQ0KPiArI2Rl ZmluZSBHRU44X1BQQVRfR0VUX0FHRSh4KSAoKHgpICYgKDMgPDwgNCkpDQo+ICsjZGVmaW5lIENI Vl9QUEFUX0dFVF9TTk9PUCh4KSAoKHgpICYgKDEgPDwgNikpDQo+ICsNCj4gIHN0cnVjdCBzZ190 YWJsZTsNCj4gIA0KPiAgc3RydWN0IGludGVsX3JvdGF0aW9uX2luZm8gew0KPiBAQCAtNTM2LDYg KzU0MSwzNyBAQCBpOTE1X3ZtX3RvX2dndHQoc3RydWN0IGk5MTVfYWRkcmVzc19zcGFjZSAqdm0p DQo+ICAJcmV0dXJuIGNvbnRhaW5lcl9vZih2bSwgc3RydWN0IGk5MTVfZ2d0dCwgYmFzZSk7DQo+ ICB9DQo+ICANCj4gKyNkZWZpbmUgSU5URUxfTUFYX1BQQVRfRU5UUklFUyA4DQo+ICsjZGVmaW5l IElOVEVMX1BQQVRfUEVSRkVDVF9NQVRDSCAofjBVKQ0KPiArDQo+ICtzdHJ1Y3QgaW50ZWxfcHBh dDsNCj4gKw0KPiArc3RydWN0IGludGVsX3BwYXRfZW50cnkgew0KPiArCXN0cnVjdCBpbnRlbF9w cGF0ICpwcGF0Ow0KPiArCXN0cnVjdCBrcmVmIHJlZjsNCj4gKwl1OCB2YWx1ZTsNCj4gK307DQo+ ICsNCj4gK3N0cnVjdCBpbnRlbF9wcGF0IHsNCj4gKwlzdHJ1Y3QgaW50ZWxfcHBhdF9lbnRyeSBl bnRyaWVzW0lOVEVMX01BWF9QUEFUX0VOVFJJRVNdOw0KPiArCURFQ0xBUkVfQklUTUFQKHVzZWQs IElOVEVMX01BWF9QUEFUX0VOVFJJRVMpOw0KPiArCURFQ0xBUkVfQklUTUFQKGRpcnR5LCBJTlRF TF9NQVhfUFBBVF9FTlRSSUVTKTsNCj4gKwl1bnNpZ25lZCBpbnQgbWF4X2VudHJpZXM7DQo+ICsJ dTggY2xlYXJfdmFsdWU7DQo+ICsJLyoNCj4gKwkgKiBSZXR1cm4gYSBzY29yZSB0byBzaG93IGhv dyB0d28gUFBBVCB2YWx1ZXMgbWF0Y2gsDQo+ICsJICogYSBJTlRFTF9QUEFUX1BFUkZFQ1RfTUFU Q0ggaW5kaWNhdGVzIGEgcGVyZmVjdCBtYXRjaA0KPiArCSAqLw0KPiArCXVuc2lnbmVkIGludCAo Km1hdGNoKSh1OCBzcmMsIHU4IGRzdCk7DQo+ICsJdm9pZCAoKnVwZGF0ZV9odykoc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmk5MTUpOw0KPiArDQo+ICsJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg Kmk5MTU7DQo+ICt9Ow0KPiArDQo+ICtjb25zdCBzdHJ1Y3QgaW50ZWxfcHBhdF9lbnRyeSAqDQo+ ICtpbnRlbF9wcGF0X2dldChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSwgdTggdmFsdWUp Ow0KPiArdm9pZCBpbnRlbF9wcGF0X3B1dChjb25zdCBzdHJ1Y3QgaW50ZWxfcHBhdF9lbnRyeSAq ZW50cnkpOw0KPiArDQo+ICBpbnQgaTkxNV9nZW1faW5pdF9hbGlhc2luZ19wcGd0dChzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSk7DQo+ICB2b2lkIGk5MTVfZ2VtX2ZpbmlfYWxpYXNpbmdf cHBndHQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUpOw0KPiAgDQoNCl9fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxp c3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNr dG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=