From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Wang, Zhi A" Subject: Re: [RFCv6 2/2] drm/i915: Introduce private PAT management Date: Thu, 31 Aug 2017 05:22:19 +0000 Message-ID: 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" 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 VGhhbmtzIGZvciB0aGUgdGVzdCEgU29ycnkgSSBkaWRuJ3QgaGF2ZSBhbiBDTkwgb24gbXkgaGFu ZC4NCg0KVGhpcyBpcyBvbmx5IFJGQyBub3cuIGFmdGVyIGNvbGxlY3RpbmcgYWxsIHRoZSBjb21t ZW50cywgSSB3aWxsIHN0YXJ0IGZ1bGwgdGVzdC4gOikNCg0KVGhhbmtzLA0KWmhpLg0KDQotLS0t LU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KRnJvbTogUm9kcmlnbyBWaXZpIFttYWlsdG86cm9kcmln by52aXZpQGdtYWlsLmNvbV0gDQpTZW50OiBUaHVyc2RheSwgQXVndXN0IDMxLCAyMDE3IDg6MTUg QU0NClRvOiBXYW5nLCBaaGkgQSA8emhpLmEud2FuZ0BpbnRlbC5jb20+DQpDYzogVml2aSwgUm9k cmlnbyA8cm9kcmlnby52aXZpQGludGVsLmNvbT47IGludGVsLWdmeEBsaXN0cy5mcmVlZGVza3Rv cC5vcmc7IFdpZGF3c2t5LCBCZW5qYW1pbiA8YmVuamFtaW4ud2lkYXdza3lAaW50ZWwuY29tPjsg aW50ZWwtZ3Z0LWRldkBsaXN0cy5mcmVlZGVza3RvcC5vcmcNClN1YmplY3Q6IFJlOiBbSW50ZWwt Z2Z4XSBbUkZDdjYgMi8yXSBkcm0vaTkxNTogSW50cm9kdWNlIHByaXZhdGUgUEFUIG1hbmFnZW1l bnQNCg0KT24gV2VkLCBBdWcgMzAsIDIwMTcgYXQgOTo0OSBQTSwgWmhpIFdhbmcgPHpoaS5hLndh bmdAaW50ZWwuY29tPiB3cm90ZToNCj4gSGkgVml2aToNCj4gICAgIFRoYW5rcyBmb3IgdGhlIHJl cGx5ISBUaGUgcmVnaXN0ZXIgYXJlIHdyaXR0ZW4gaW4gcHBhdC0+dXBkYXRlX2h3KCkgbm93Lg0K DQpvaCwgSSBzYXcgbm93Li4uDQpJIGhhZGRlbiBub3RpY2VkIHRoYXQgaW50ZXJhdGlvbi4NCg0K QnV0IHNvbWV0aGluZyBzZWVtcyByZWFsbHkgb2RkIHlldC4uLg0KTXkgQ05MIHdpdGggdGhlc2Ug MiBwYXRjaGVzIGFwcGxpZWQgaGFuZ3Mgb24gYW55IGV4ZWN1dGlvbi4uLg0KDQo+DQo+DQo+ICtz dGF0aWMgdm9pZCBjbmxfcHJpdmF0ZV9wYXRfdXBkYXRlX2h3KHN0cnVjdCBkcm1faTkxNV9wcml2 YXRlIA0KPiArKmRldl9wcml2KSB7DQo+ICsgICAgICAgc3RydWN0IGludGVsX3BwYXQgKnBwYXQg PSAmZGV2X3ByaXYtPnBwYXQ7DQo+ICsgICAgICAgaW50IGk7DQo+ICsNCj4gKyAgICAgICBmb3Jf ZWFjaF9zZXRfYml0KGksIHBwYXQtPmRpcnR5LCBwcGF0LT5tYXhfZW50cmllcykgew0KPiArICAg ICAgICAgICAgICAgSTkxNV9XUklURShHRU4xMF9QQVRfSU5ERVgoaSksIHBwYXQtPmVudHJpZXNb aV0udmFsdWUpOw0KPiArICAgICAgICAgICAgICAgY2xlYXJfYml0KGksIHBwYXQtPmRpcnR5KTsN Cj4gKyAgICAgICB9DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkIGJkd19wcml2YXRlX3BhdF91 cGRhdGVfaHcoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgDQo+ICsqZGV2X3ByaXYpIHsNCj4gKyAg ICAgICBzdHJ1Y3QgaW50ZWxfcHBhdCAqcHBhdCA9ICZkZXZfcHJpdi0+cHBhdDsNCj4gKyAgICAg ICB1NjQgcGF0ID0gMDsNCj4gKyAgICAgICBpbnQgaTsNCj4gKw0KPiArICAgICAgIGZvciAoaSA9 IDA7IGkgPCBwcGF0LT5tYXhfZW50cmllczsgaSsrKQ0KPiArICAgICAgICAgICAgICAgcGF0IHw9 IEdFTjhfUFBBVChpLCBwcGF0LT5lbnRyaWVzW2ldLnZhbHVlKTsNCj4gKw0KPiArICAgICAgIGJp dG1hcF9jbGVhcihwcGF0LT5kaXJ0eSwgMCwgcHBhdC0+bWF4X2VudHJpZXMpOw0KPiArDQo+ICsg ICAgICAgSTkxNV9XUklURShHRU44X1BSSVZBVEVfUEFUX0xPLCBsb3dlcl8zMl9iaXRzKHBhdCkp Ow0KPiArICAgICAgIEk5MTVfV1JJVEUoR0VOOF9QUklWQVRFX1BBVF9ISSwgdXBwZXJfMzJfYml0 cyhwYXQpKTsgfQ0KPg0KPiBPbiAwOC8zMS8xNyAwNjowMCwgVml2aSwgUm9kcmlnbyB3cm90ZToN Cj4+DQo+PiBPbiBXZWQsIDIwMTctMDgtMzAgYXQgMDI6MTQgKzA4MDAsIFpoaSBXYW5nIHdyb3Rl Og0KPj4+DQo+Pj4gVGhlIHByaXZhdGUgUEFUIG1hbmFnZW1lbnQgaXMgdG8gc3VwcG9ydCBQUEFU IGVudHJ5IG1hbmlwdWxhdGlvbi4gDQo+Pj4gVHdvIEFQSXMgYXJlIGludHJvZHVjZWQgZm9yIGR5 bmFtaWNhbGx5IG1hbmFnaW5nIFBQQVQgZW50cmllczogDQo+Pj4gaW50ZWxfcHBhdF9nZXQgYW5k IGludGVsX3BwYXRfcHV0Lg0KPj4+DQo+Pj4gaW50ZWxfcHBhdF9nZXQgd2lsbCBzZWFyY2ggZm9y IGFuIGV4aXN0aW5nIFBQQVQgZW50cnkgd2hpY2ggDQo+Pj4gcGVyZmVjdGx5IG1hdGNoZXMgdGhl IHJlcXVpcmVkIFBQQVQgdmFsdWUuIElmIG5vdCwgaXQgd2lsbCB0cnkgdG8gDQo+Pj4gYWxsb2Nh dGUgb3IgcmV0dXJuIGEgcGFydGlhbGx5IG1hdGNoZWQgUFBBVCBlbnRyeSBpZiB0aGVyZSBpcyBh bnkgDQo+Pj4gYXZhaWxhYmxlIFBQQVQgaW5kZXhlcyBvciBub3QuDQo+Pj4NCj4+PiBpbnRlbF9w cGF0X3B1dCB3aWxsIHB1dCBiYWNrIHRoZSBQUEFUIGVudHJ5IHdoaWNoIGNvbWVzIGZyb20gDQo+ Pj4gaW50ZWxfcHBhdF9nZXQuIElmIGl0J3MgZHluYW1pY2FsbHkgYWxsb2NhdGVkLCB0aGUgcmVm ZXJlbmNlIGNvdW50IA0KPj4+IHdpbGwgYmUgZGVjcmVhc2VkLiBJZiB0aGUgcmVmZXJlbmNlIGNv dW50IHR1cm5zIGludG8gemVybywgdGhlIFBQQVQgDQo+Pj4gaW5kZXggaXMgZnJlZWQgYWdhaW4u DQo+Pj4NCj4+PiBCZXNpZGVzLCBhbm90aGVyIHR3byBjYWxsYmFja3MgYXJlIGludHJvZHVjZWQg dG8gc3VwcG9ydCB0aGUgcHJpdmF0ZSANCj4+PiBQQVQgbWFuYWdlbWVudCBmcmFtZXdvcmsuIE9u ZSBpcyBwcGF0LT51cGRhdGVfaHcoKSwgd2hpY2ggd3JpdGVzIHRoZSANCj4+PiBQUEFUIGNvbmZp Z3VyYXRpb25zIGluIHBwYXQtPmVudHJpZXMgaW50byBIVy4gQW5vdGhlciBvbmUgaXMgDQo+Pj4g cHBhdC0+bWF0Y2gsIHdoaWNoIHdpbGwgcmV0dXJuIGEgc2NvcmUgdG8gc2hvdyBob3cgdHdvIFBQ QVQgdmFsdWVzIA0KPj4+IG1hdGNoIHdpdGggZWFjaCBvdGhlci4NCj4+Pg0KPj4+IHY2Og0KPj4+ DQo+Pj4gLSBBZGRyZXNzIGFsbCBjb21tZW50cyBmcm9tIENocmlzOg0KPj4+IGh0dHA6Ly93d3cu c3Bpbmljcy5uZXQvbGlzdHMvaW50ZWwtZ2Z4L21zZzEzNjg1MC5odG1sDQo+Pj4NCj4+PiAtIEFk ZHJlc3MgYWxsIGNvbW1lbnRzIGZyb20gSm9vbmFzOg0KPj4+IGh0dHA6Ly93d3cuc3Bpbmljcy5u ZXQvbGlzdHMvaW50ZWwtZ2Z4L21zZzEzNjg0NS5odG1sDQo+Pj4NCj4+PiB2NToNCj4+Pg0KPj4+ IC0gQWRkIGNoZWNrIGFuZCB3YXJubmluZ3MgZm9yIHRob3NlIHBsYXRmb3JtcyB3aGljaCBkb24n dCBoYXZlIFBQQVQuDQo+Pj4NCj4+PiB2MzoNCj4+Pg0KPj4+IC0gSW50cm9kdWNlIGRpcnR5IGJp dG1hcCBmb3IgUFBBVCByZWdpc3RlcnMuIChDaHJpcykNCj4+PiAtIENoYW5nZSB0aGUgbmFtZSBv ZiB0aGUgcG9pbnRlciAiZGV2X3ByaXYiIHRvICJpOTE1Ii4gKENocmlzKQ0KPj4+IC0gaW50ZWxf cHBhdF97Z2V0LCBwdXR9IHJldHVybnMvdGFrZXMgYSBjb25zdCBpbnRlbF9wcGF0X2VudHJ5ICou IA0KPj4+IChDaHJpcykNCj4+Pg0KPj4+IHYyOg0KPj4+DQo+Pj4gLSBBUEkgcmUtZGVzaWduLiAo Q2hyaXMpDQo+Pj4NCj4+PiBDYzogQmVuIFdpZGF3c2t5IDxiZW5qYW1pbi53aWRhd3NreUBpbnRl bC5jb20+DQo+Pj4gQ2M6IFJvZHJpZ28gVml2aSA8cm9kcmlnby52aXZpQGludGVsLmNvbT4NCj4+ PiBDYzogQ2hyaXMgV2lsc29uIDxjaHJpc0BjaHJpcy13aWxzb24uY28udWs+DQo+Pj4gQ2M6IEpv b25hcyBMYWh0aW5lbiA8am9vbmFzLmxhaHRpbmVuQGxpbnV4LmludGVsLmNvbT4NCj4+PiBTaWdu ZWQtb2ZmLWJ5OiBaaGkgV2FuZyA8emhpLmEud2FuZ0BpbnRlbC5jb20+DQo+Pj4gLS0tDQo+Pj4g ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oICAgICB8ICAgMiArDQo+Pj4gICBkcml2 ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9ndHQuYyB8IDI3Mw0KPj4+ICsrKysrKysrKysrKysr KysrKysrKysrKysrKysrLS0tLS0tLQ0KPj4+ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9n ZW1fZ3R0LmggfCAgMzYgKysrKysNCj4+PiAgIDMgZmlsZXMgY2hhbmdlZCwgMjYyIGluc2VydGlv bnMoKyksIDQ5IGRlbGV0aW9ucygtKQ0KPj4+DQo+Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2k5MTVfZHJ2LmggDQo+Pj4gYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Ry di5oIGluZGV4IDc1ODdlZjUuLjVmZmRlMTAgMTAwNjQ0DQo+Pj4gLS0tIGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaTkxNV9kcnYuaA0KPj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVf ZHJ2LmgNCj4+PiBAQCAtMjMxMiw2ICsyMzEyLDggQEAgc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg ew0KPj4+ICAgICAgICAgREVDTEFSRV9IQVNIVEFCTEUobW1fc3RydWN0cywgNyk7DQo+Pj4gICAg ICAgICBzdHJ1Y3QgbXV0ZXggbW1fbG9jazsNCj4+PiAgICsgICAgIHN0cnVjdCBpbnRlbF9wcGF0 IHBwYXQ7DQo+Pj4gKw0KPj4+ICAgICAgICAgLyogS2VybmVsIE1vZGVzZXR0aW5nICovDQo+Pj4g ICAgICAgICBzdHJ1Y3QgaW50ZWxfY3J0YyAqcGxhbmVfdG9fY3J0Y19tYXBwaW5nW0k5MTVfTUFY X1BJUEVTXTsNCj4+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1f Z3R0LmMNCj4+PiBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2d0dC5jDQo+Pj4gaW5k ZXggYjc0ZmE5ZC4uMzEwNjE0MiAxMDA2NDQNCj4+PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pOTE1X2dlbV9ndHQuYw0KPj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2Vt X2d0dC5jDQo+Pj4gQEAgLTI4MTYsNDEgKzI4MTYsMjAwIEBAIHN0YXRpYyBpbnQgZ2d0dF9wcm9i ZV9jb21tb24oc3RydWN0IA0KPj4+IGk5MTVfZ2d0dCAqZ2d0dCwgdTY0IHNpemUpDQo+Pj4gICAg ICAgICByZXR1cm4gMDsNCj4+PiAgIH0NCj4+PiAgIC1zdGF0aWMgdm9pZCBjbmxfc2V0dXBfcHJp dmF0ZV9wcGF0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlIA0KPj4+ICpkZXZfcHJpdikNCj4+PiAr c3RhdGljIHN0cnVjdCBpbnRlbF9wcGF0X2VudHJ5ICoNCj4+PiArX19hbGxvY19wcGF0X2VudHJ5 KHN0cnVjdCBpbnRlbF9wcGF0ICpwcGF0LCB1bnNpZ25lZCBpbnQgaW5kZXgsIHU4DQo+Pj4gdmFs dWUpDQo+Pj4gICB7DQo+Pj4gKyAgICAgICBzdHJ1Y3QgaW50ZWxfcHBhdF9lbnRyeSAqZW50cnkg PSAmcHBhdC0+ZW50cmllc1tpbmRleF07DQo+Pj4gKw0KPj4+ICsgICAgICAgR0VNX0JVR19PTihp bmRleCA+PSBwcGF0LT5tYXhfZW50cmllcyk7DQo+Pj4gKyAgICAgICBHRU1fQlVHX09OKHRlc3Rf Yml0KGluZGV4LCBwcGF0LT51c2VkKSk7DQo+Pj4gKw0KPj4+ICsgICAgICAgZW50cnktPnBwYXQg PSBwcGF0Ow0KPj4+ICsgICAgICAgZW50cnktPnZhbHVlID0gdmFsdWU7DQo+Pj4gKyAgICAgICBr cmVmX2luaXQoJmVudHJ5LT5yZWYpOw0KPj4+ICsgICAgICAgc2V0X2JpdChpbmRleCwgcHBhdC0+ dXNlZCk7DQo+Pj4gKyAgICAgICBzZXRfYml0KGluZGV4LCBwcGF0LT5kaXJ0eSk7DQo+Pj4gKw0K Pj4+ICsgICAgICAgcmV0dXJuIGVudHJ5Ow0KPj4+ICt9DQo+Pj4gKw0KPj4+ICtzdGF0aWMgdm9p ZCBfX2ZyZWVfcHBhdF9lbnRyeShzdHJ1Y3QgaW50ZWxfcHBhdF9lbnRyeSAqZW50cnkpIHsNCj4+ PiArICAgICAgIHN0cnVjdCBpbnRlbF9wcGF0ICpwcGF0ID0gZW50cnktPnBwYXQ7DQo+Pj4gKyAg ICAgICB1bnNpZ25lZCBpbnQgaW5kZXggPSBlbnRyeSAtIHBwYXQtPmVudHJpZXM7DQo+Pj4gKw0K Pj4+ICsgICAgICAgR0VNX0JVR19PTihpbmRleCA+PSBwcGF0LT5tYXhfZW50cmllcyk7DQo+Pj4g KyAgICAgICBHRU1fQlVHX09OKCF0ZXN0X2JpdChpbmRleCwgcHBhdC0+dXNlZCkpOw0KPj4+ICsN Cj4+PiArICAgICAgIGVudHJ5LT52YWx1ZSA9IHBwYXQtPmNsZWFyX3ZhbHVlOw0KPj4+ICsgICAg ICAgY2xlYXJfYml0KGluZGV4LCBwcGF0LT51c2VkKTsNCj4+PiArICAgICAgIHNldF9iaXQoaW5k ZXgsIHBwYXQtPmRpcnR5KTsgfQ0KPj4+ICsNCj4+PiArLyoqDQo+Pj4gKyAqIGludGVsX3BwYXRf Z2V0IC0gZ2V0IGEgdXNhYmxlIFBQQVQgZW50cnkNCj4+PiArICogQGk5MTU6IGk5MTUgZGV2aWNl IGluc3RhbmNlDQo+Pj4gKyAqIEB2YWx1ZTogdGhlIFBQQVQgdmFsdWUgcmVxdWlyZWQgYnkgdGhl IGNhbGxlcg0KPj4+ICsgKg0KPj4+ICsgKiBUaGUgZnVuY3Rpb24gdHJpZXMgdG8gc2VhcmNoIGlm IHRoZXJlIGlzIGFuIGV4aXN0aW5nIFBQQVQgZW50cnkgDQo+Pj4gK3doaWNoDQo+Pj4gKyAqIG1h dGNoZXMgd2l0aCB0aGUgcmVxdWlyZWQgdmFsdWUuIElmIHBlcmZlY3RseSBtYXRjaGVkLCB0aGUg DQo+Pj4gK2V4aXN0aW5nDQo+Pj4gUFBBVA0KPj4+ICsgKiBlbnRyeSB3aWxsIGJlIHVzZWQuIElm IG9ubHkgcGFydGlhbGx5IG1hdGNoZWQsIGl0IHdpbGwgdHJ5IHRvIA0KPj4+ICsgY2hlY2sNCj4+ PiBpZg0KPj4+ICsgKiB0aGVyZSBpcyBhbnkgYXZhaWxhYmxlIFBQQVQgaW5kZXguIElmIHllcywg aXQgd2lsbCBhbGxvY2F0ZSBhIA0KPj4+ICsgbmV3DQo+Pj4gUFBBVA0KPj4+ICsgKiBpbmRleCBm b3IgdGhlIHJlcXVpcmVkIGVudHJ5IGFuZCB1cGRhdGUgdGhlIEhXLiBJZiBub3QsIHRoZSANCj4+ PiArcGFydGlhbGx5DQo+Pj4gKyAqIG1hdGNoZWQgZW50cnkgd2lsbCBiZSB1c2VkLg0KPj4+ICsg Ki8NCj4+PiArY29uc3Qgc3RydWN0IGludGVsX3BwYXRfZW50cnkgKg0KPj4+ICtpbnRlbF9wcGF0 X2dldChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSwgdTggdmFsdWUpIHsNCj4+PiArICAg ICAgIHN0cnVjdCBpbnRlbF9wcGF0ICpwcGF0ID0gJmk5MTUtPnBwYXQ7DQo+Pj4gKyAgICAgICBz dHJ1Y3QgaW50ZWxfcHBhdF9lbnRyeSAqZW50cnk7DQo+Pj4gKyAgICAgICB1bnNpZ25lZCBpbnQg c2Nhbm5lZCwgYmVzdF9zY29yZTsNCj4+PiArICAgICAgIGludCBpOw0KPj4+ICsNCj4+PiArICAg ICAgIEdFTV9CVUdfT04oIXBwYXQtPm1heF9lbnRyaWVzKTsNCj4+PiArDQo+Pj4gKyAgICAgICBz Y2FubmVkID0gYmVzdF9zY29yZSA9IDA7DQo+Pj4gKw0KPj4+ICsgICAgICAgZm9yX2VhY2hfc2V0 X2JpdChpLCBwcGF0LT51c2VkLCBwcGF0LT5tYXhfZW50cmllcykgew0KPj4+ICsgICAgICAgICAg ICAgICB1bnNpZ25lZCBpbnQgc2NvcmU7DQo+Pj4gKw0KPj4+ICsgICAgICAgICAgICAgICBlbnRy eSA9ICZwcGF0LT5lbnRyaWVzW2ldOw0KPj4+ICsgICAgICAgICAgICAgICBzY29yZSA9IHBwYXQt Pm1hdGNoKGVudHJ5LT52YWx1ZSwgdmFsdWUpOw0KPj4+ICsgICAgICAgICAgICAgICBpZiAoc2Nv cmUgPiBiZXN0X3Njb3JlKSB7DQo+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNjb3Jl ID09IElOVEVMX1BQQVRfUEVSRkVDVF9NQVRDSCkgew0KPj4+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAga3JlZl9nZXQoJmVudHJ5LT5yZWYpOw0KPj4+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgcmV0dXJuIGVudHJ5Ow0KPj4+ICsgICAgICAgICAgICAgICAgICAgICAg IH0NCj4+PiArICAgICAgICAgICAgICAgICAgICAgICBiZXN0X3Njb3JlID0gc2NvcmU7DQo+Pj4g KyAgICAgICAgICAgICAgIH0NCj4+PiArICAgICAgICAgICAgICAgc2Nhbm5lZCsrOw0KPj4+ICsg ICAgICAgfQ0KPj4+ICsNCj4+PiArICAgICAgIGlmIChzY2FubmVkID09IHBwYXQtPm1heF9lbnRy aWVzKSB7DQo+Pj4gKyAgICAgICAgICAgICAgIGlmICghYmVzdF9zY29yZSkNCj4+PiArICAgICAg ICAgICAgICAgICAgICAgICByZXR1cm4gRVJSX1BUUigtRU5PU1BDKTsNCj4+PiArDQo+Pj4gKyAg ICAgICAgICAgICAgIGtyZWZfZ2V0KCZlbnRyeS0+cmVmKTsNCj4+PiArICAgICAgICAgICAgICAg cmV0dXJuIGVudHJ5Ow0KPj4+ICsgICAgICAgfQ0KPj4+ICsNCj4+PiArICAgICAgIGkgPSBmaW5k X2ZpcnN0X3plcm9fYml0KHBwYXQtPnVzZWQsIHBwYXQtPm1heF9lbnRyaWVzKTsNCj4+PiArICAg ICAgIGVudHJ5ID0gX19hbGxvY19wcGF0X2VudHJ5KHBwYXQsIGksIHZhbHVlKTsNCj4+PiArICAg ICAgIHBwYXQtPnVwZGF0ZV9odyhpOTE1KTsNCj4+PiArICAgICAgIHJldHVybiBlbnRyeTsNCj4+ PiArfQ0KPj4+ICsNCj4+PiArc3RhdGljIHZvaWQgcmVsZWFzZV9wcGF0KHN0cnVjdCBrcmVmICpr cmVmKSB7DQo+Pj4gKyAgICAgICBzdHJ1Y3QgaW50ZWxfcHBhdF9lbnRyeSAqZW50cnkgPQ0KPj4+ ICsgICAgICAgICAgICAgICBjb250YWluZXJfb2Yoa3JlZiwgc3RydWN0IGludGVsX3BwYXRfZW50 cnksIHJlZik7DQo+Pj4gKyAgICAgICBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IGVu dHJ5LT5wcGF0LT5pOTE1Ow0KPj4+ICsNCj4+PiArICAgICAgIF9fZnJlZV9wcGF0X2VudHJ5KGVu dHJ5KTsNCj4+PiArICAgICAgIGVudHJ5LT5wcGF0LT51cGRhdGVfaHcoaTkxNSk7IH0NCj4+PiAr DQo+Pj4gKy8qKg0KPj4+ICsgKiBpbnRlbF9wcGF0X3B1dCAtIHB1dCBiYWNrIHRoZSBQUEFUIGVu dHJ5IGdvdCBmcm9tIA0KPj4+ICtpbnRlbF9wcGF0X2dldCgpDQo+Pj4gKyAqIEBlbnRyeTogYW4g aW50ZWwgUFBBVCBlbnRyeQ0KPj4+ICsgKg0KPj4+ICsgKiBQdXQgYmFjayB0aGUgUFBBVCBlbnRy eSBnb3QgZnJvbSBpbnRlbF9wcGF0X2dldCgpLiBJZiB0aGUgUFBBVCANCj4+PiAraW5kZXgNCj4+ PiBvZiB0aGUNCj4+PiArICogZW50cnkgaXMgZHluYW1pY2FsbHkgYWxsb2NhdGVkLCBpdHMgcmVm ZXJlbmNlIGNvdW50IHdpbGwgYmUNCj4+PiBkZWNyZWFzZWQuIE9uY2UNCj4+PiArICogdGhlIHJl ZmVyZW5jZSBjb3VudCBiZWNvbWVzIGludG8gemVybywgdGhlIFBQQVQgaW5kZXggYmVjb21lcyAN Cj4+PiArIGZyZWUNCj4+PiBhZ2Fpbi4NCj4+PiArICovDQo+Pj4gK3ZvaWQgaW50ZWxfcHBhdF9w dXQoY29uc3Qgc3RydWN0IGludGVsX3BwYXRfZW50cnkgKmVudHJ5KSB7DQo+Pj4gKyAgICAgICBz dHJ1Y3QgaW50ZWxfcHBhdCAqcHBhdCA9IGVudHJ5LT5wcGF0Ow0KPj4+ICsgICAgICAgdW5zaWdu ZWQgaW50IGluZGV4ID0gZW50cnkgLSBwcGF0LT5lbnRyaWVzOw0KPj4+ICsNCj4+PiArICAgICAg IEdFTV9CVUdfT04oIXBwYXQtPm1heF9lbnRyaWVzKTsNCj4+PiArDQo+Pj4gKyAgICAgICBrcmVm X3B1dCgmcHBhdC0+ZW50cmllc1tpbmRleF0ucmVmLCByZWxlYXNlX3BwYXQpOyB9DQo+Pj4gKw0K Pj4+ICtzdGF0aWMgdm9pZCBjbmxfcHJpdmF0ZV9wYXRfdXBkYXRlX2h3KHN0cnVjdCBkcm1faTkx NV9wcml2YXRlIA0KPj4+ICsqZGV2X3ByaXYpIHsNCj4+PiArICAgICAgIHN0cnVjdCBpbnRlbF9w cGF0ICpwcGF0ID0gJmRldl9wcml2LT5wcGF0Ow0KPj4+ICsgICAgICAgaW50IGk7DQo+Pj4gKw0K Pj4+ICsgICAgICAgZm9yX2VhY2hfc2V0X2JpdChpLCBwcGF0LT5kaXJ0eSwgcHBhdC0+bWF4X2Vu dHJpZXMpIHsNCj4+PiArICAgICAgICAgICAgICAgSTkxNV9XUklURShHRU4xMF9QQVRfSU5ERVgo aSksIHBwYXQtPmVudHJpZXNbaV0udmFsdWUpOw0KPj4+ICsgICAgICAgICAgICAgICBjbGVhcl9i aXQoaSwgcHBhdC0+ZGlydHkpOw0KPj4+ICsgICAgICAgfQ0KPj4+ICt9DQo+Pj4gKw0KPj4+ICtz dGF0aWMgdm9pZCBiZHdfcHJpdmF0ZV9wYXRfdXBkYXRlX2h3KHN0cnVjdCBkcm1faTkxNV9wcml2 YXRlIA0KPj4+ICsqZGV2X3ByaXYpIHsNCj4+PiArICAgICAgIHN0cnVjdCBpbnRlbF9wcGF0ICpw cGF0ID0gJmRldl9wcml2LT5wcGF0Ow0KPj4+ICsgICAgICAgdTY0IHBhdCA9IDA7DQo+Pj4gKyAg ICAgICBpbnQgaTsNCj4+PiArDQo+Pj4gKyAgICAgICBmb3IgKGkgPSAwOyBpIDwgcHBhdC0+bWF4 X2VudHJpZXM7IGkrKykNCj4+PiArICAgICAgICAgICAgICAgcGF0IHw9IEdFTjhfUFBBVChpLCBw cGF0LT5lbnRyaWVzW2ldLnZhbHVlKTsNCj4+PiArDQo+Pj4gKyAgICAgICBiaXRtYXBfY2xlYXIo cHBhdC0+ZGlydHksIDAsIHBwYXQtPm1heF9lbnRyaWVzKTsNCj4+PiArDQo+Pj4gKyAgICAgICBJ OTE1X1dSSVRFKEdFTjhfUFJJVkFURV9QQVRfTE8sIGxvd2VyXzMyX2JpdHMocGF0KSk7DQo+Pj4g KyAgICAgICBJOTE1X1dSSVRFKEdFTjhfUFJJVkFURV9QQVRfSEksIHVwcGVyXzMyX2JpdHMocGF0 KSk7IH0NCj4+PiArDQo+Pj4gK3N0YXRpYyB1bnNpZ25lZCBpbnQgYmR3X3ByaXZhdGVfcGF0X21h dGNoKHU4IHNyYywgdTggZHN0KSB7DQo+Pj4gKyAgICAgICB1bnNpZ25lZCBpbnQgc2NvcmUgPSAw Ow0KPj4+ICsNCj4+PiArICAgICAgIC8qIENhY2hlIGF0dHJpYnV0ZSBoYXMgdG8gYmUgbWF0Y2hl ZC4gKi8NCj4+PiArICAgICAgIGlmIChHRU44X1BQQVRfR0VUX0NBKHNyYykgIT0gR0VOOF9QUEFU X0dFVF9DQShkc3QpKQ0KPj4+ICsgICAgICAgICAgICAgICByZXR1cm4gMDsNCj4+PiArDQo+Pj4g KyAgICAgICBpZiAoR0VOOF9QUEFUX0dFVF9UQyhzcmMpID09IEdFTjhfUFBBVF9HRVRfVEMoZHN0 KSkNCj4+PiArICAgICAgICAgICAgICAgc2NvcmUgKz0gMjsNCj4+PiArDQo+Pj4gKyAgICAgICBp ZihHRU44X1BQQVRfR0VUX0FHRShzcmMpID09IEdFTjhfUFBBVF9HRVRfQUdFKGRzdCkpDQo+Pj4g KyAgICAgICAgICAgICAgIHNjb3JlICs9IDE7DQo+Pj4gKw0KPj4+ICsgICAgICAgaWYgKHNjb3Jl ID09IDMpDQo+Pj4gKyAgICAgICAgICAgICAgIHJldHVybiBJTlRFTF9QUEFUX1BFUkZFQ1RfTUFU Q0g7DQo+Pj4gKw0KPj4+ICsgICAgICAgcmV0dXJuIHNjb3JlOw0KPj4+ICt9DQo+Pj4gKw0KPj4+ ICtzdGF0aWMgdW5zaWduZWQgaW50IGNodl9wcml2YXRlX3BhdF9tYXRjaCh1OCBzcmMsIHU4IGRz dCkgew0KPj4+ICsgICAgICAgcmV0dXJuIChDSFZfUFBBVF9HRVRfU05PT1Aoc3JjKSA9PSBDSFZf UFBBVF9HRVRfU05PT1AoZHN0KSkgPw0KPj4+ICsgICAgICAgICAgICAgICBJTlRFTF9QUEFUX1BF UkZFQ1RfTUFUQ0ggOiAwOyB9DQo+Pj4gKw0KPj4+ICtzdGF0aWMgdm9pZCBjbmxfc2V0dXBfcHJp dmF0ZV9wcGF0KHN0cnVjdCBpbnRlbF9wcGF0ICpwcGF0KSB7DQo+Pj4gKyAgICAgICBwcGF0LT5t YXhfZW50cmllcyA9IDg7DQo+Pj4gKyAgICAgICBwcGF0LT51cGRhdGVfaHcgPSBjbmxfcHJpdmF0 ZV9wYXRfdXBkYXRlX2h3Ow0KPj4+ICsgICAgICAgcHBhdC0+bWF0Y2ggPSBiZHdfcHJpdmF0ZV9w YXRfbWF0Y2g7DQo+Pj4gKyAgICAgICBwcGF0LT5jbGVhcl92YWx1ZSA9IEdFTjhfUFBBVF9MTENF TExDIHwgR0VOOF9QUEFUX0FHRSgzKTsNCj4+PiArDQo+Pj4gICAgICAgICAvKiBYWFg6IHNwZWMg aXMgdW5jbGVhciBpZiB0aGlzIGlzIHN0aWxsIG5lZWRlZCBmb3IgQ05MKyAqLw0KPj4+IC0gICAg ICAgaWYgKCFVU0VTX1BQR1RUKGRldl9wcml2KSkgew0KPj4+IC0gICAgICAgICAgICAgICBJOTE1 X1dSSVRFKEdFTjEwX1BBVF9JTkRFWCgwKSwgR0VOOF9QUEFUX1VDKTsNCj4+PiArICAgICAgIGlm ICghVVNFU19QUEdUVChwcGF0LT5pOTE1KSkgew0KPj4+ICsgICAgICAgICAgICAgICBfX2FsbG9j X3BwYXRfZW50cnkocHBhdCwgUFBBVF9DQUNIRURfUERFX0lOREVYLA0KPj4+IEdFTjhfUFBBVF9V Qyk7DQo+Pj4gICAgICAgICAgICAgICAgIHJldHVybjsNCj4+PiAgICAgICAgIH0NCj4+PiAgIC0g ICAgIEk5MTVfV1JJVEUoR0VOMTBfUEFUX0lOREVYKDApLCBHRU44X1BQQVRfV0IgfCBHRU44X1BQ QVRfTExDKTsNCj4+PiAtICAgICAgIEk5MTVfV1JJVEUoR0VOMTBfUEFUX0lOREVYKDEpLCBHRU44 X1BQQVRfV0MgfCBHRU44X1BQQVRfTExDRUxMQyk7DQo+Pj4gLSAgICAgICBJOTE1X1dSSVRFKEdF TjEwX1BBVF9JTkRFWCgyKSwgR0VOOF9QUEFUX1dUIHwgR0VOOF9QUEFUX0xMQ0VMTEMpOw0KPj4+ IC0gICAgICAgSTkxNV9XUklURShHRU4xMF9QQVRfSU5ERVgoMyksIEdFTjhfUFBBVF9VQyk7DQo+ Pj4gLSAgICAgICBJOTE1X1dSSVRFKEdFTjEwX1BBVF9JTkRFWCg0KSwgR0VOOF9QUEFUX0xMQ0VM TEMgfA0KPj4+IEdFTjhfUFBBVF9BR0UoMCkpOw0KPj4+IC0gICAgICAgSTkxNV9XUklURShHRU4x MF9QQVRfSU5ERVgoNSksIEdFTjhfUFBBVF9MTENFTExDIHwNCj4+PiBHRU44X1BQQVRfQUdFKDEp KTsNCj4+PiAtICAgICAgIEk5MTVfV1JJVEUoR0VOMTBfUEFUX0lOREVYKDYpLCBHRU44X1BQQVRf TExDRUxMQyB8DQo+Pj4gR0VOOF9QUEFUX0FHRSgyKSk7DQo+Pj4gLSAgICAgICBJOTE1X1dSSVRF KEdFTjEwX1BBVF9JTkRFWCg3KSwgR0VOOF9QUEFUX0xMQ0VMTEMgfA0KPj4+IEdFTjhfUFBBVF9B R0UoMykpOw0KPj4NCj4+DQo+PiBHZW44IGFsbG9jYXRpb24gc3R5bGUgZG9lc24ndCB3b3JrIG9u IENOTC4NCj4+IEkgZG9uJ3Qgc2VlIHdoZXJlIGFsbCB0aGVzZSByZWdpc3RlcnMgd291bGQgYmUg Z2V0dGluZyBwcm9wZXJseSB3cml0dGVuLg0KPj4NCj4+PiArICAgICAgIC8qIFNlZSBnZW44X3B0 ZV9lbmNvZGUoKSBmb3IgdGhlIG1hcHBpbmcgZnJvbSBjYWNoZS1sZXZlbCB0byANCj4+PiArIFBQ QVQNCj4+PiAqLw0KPj4+ICsgICAgICAgX19hbGxvY19wcGF0X2VudHJ5KHBwYXQsIFBQQVRfQ0FD SEVEX1BERV9JTkRFWCwgR0VOOF9QUEFUX1dCIA0KPj4+ICsgfA0KPj4+IEdFTjhfUFBBVF9MTEMp Ow0KPj4+ICsgICAgICAgX19hbGxvY19wcGF0X2VudHJ5KHBwYXQsIFBQQVRfRElTUExBWV9FTExD X0lOREVYLCANCj4+PiArIEdFTjhfUFBBVF9XVCB8DQo+Pj4gR0VOOF9QUEFUX0xMQ0VMTEMpOw0K Pj4+ICsgICAgICAgX19hbGxvY19wcGF0X2VudHJ5KHBwYXQsIFBQQVRfVU5DQUNIRURfSU5ERVgs IEdFTjhfUFBBVF9VQyk7DQo+Pj4gKyAgICAgICBfX2FsbG9jX3BwYXRfZW50cnkocHBhdCwgUFBB VF9DQUNIRURfSU5ERVgsIA0KPj4+ICsgR0VOOF9QUEFUX0xMQ0VMTEMgfA0KPj4+IEdFTjhfUFBB VF9BR0UoMCkpOw0KPj4+ICAgfQ0KPj4+ICAgICAvKiBUaGUgR0dUVCBhbmQgUFBHVFQgbmVlZCBh IHByaXZhdGUgUFBBVCBzZXR1cCBpbiBvcmRlciB0byANCj4+PiBoYW5kbGUgY2FjaGVhYmlsaXR5 DQo+Pj4gICAgKiBiaXRzLiBXaGVuIHVzaW5nIGFkdmFuY2VkIGNvbnRleHRzIGVhY2ggY29udGV4 dCBzdG9yZXMgaXRzIG93biANCj4+PiBQQVQsIGJ1dA0KPj4+ICAgICogd3JpdGluZyB0aGlzIGRh dGEgc2hvdWxkbid0IGJlIGhhcm1mdWwgZXZlbiBpbiB0aG9zZSBjYXNlcy4gKi8gDQo+Pj4gLXN0 YXRpYyB2b2lkIGJkd19zZXR1cF9wcml2YXRlX3BwYXQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg DQo+Pj4gKmRldl9wcml2KQ0KPj4+ICtzdGF0aWMgdm9pZCBiZHdfc2V0dXBfcHJpdmF0ZV9wcGF0 KHN0cnVjdCBpbnRlbF9wcGF0ICpwcGF0KQ0KPj4+ICAgew0KPj4+IC0gICAgICAgdTY0IHBhdDsN Cj4+PiArICAgICAgIHBwYXQtPm1heF9lbnRyaWVzID0gODsNCj4+PiArICAgICAgIHBwYXQtPnVw ZGF0ZV9odyA9IGJkd19wcml2YXRlX3BhdF91cGRhdGVfaHc7DQo+Pj4gKyAgICAgICBwcGF0LT5t YXRjaCA9IGJkd19wcml2YXRlX3BhdF9tYXRjaDsNCj4+PiArICAgICAgIHBwYXQtPmNsZWFyX3Zh bHVlID0gR0VOOF9QUEFUX1dCIHwgR0VOOF9QUEFUX0xMQ0VMTEMgfA0KPj4+IEdFTjhfUFBBVF9B R0UoMyk7DQo+Pj4gICAtICAgICBwYXQgPSBHRU44X1BQQVQoMCwgR0VOOF9QUEFUX1dCIHwgR0VO OF9QUEFUX0xMQykgICAgIHwgLyogZm9yDQo+Pj4gbm9ybWFsIG9iamVjdHMsIG5vIGVMTEMgKi8N Cj4+PiAtICAgICAgICAgICAgIEdFTjhfUFBBVCgxLCBHRU44X1BQQVRfV0MgfCBHRU44X1BQQVRf TExDRUxMQykgfCAvKiBmb3INCj4+PiBzb21ldGhpbmcgcG9pbnRpbmcgdG8gcHRlcz8gKi8NCj4+ PiAtICAgICAgICAgICAgIEdFTjhfUFBBVCgyLCBHRU44X1BQQVRfV1QgfCBHRU44X1BQQVRfTExD RUxMQykgfCAvKiBmb3INCj4+PiBzY2Fub3V0IHdpdGggZUxMQyAqLw0KPj4+IC0gICAgICAgICAg ICAgR0VOOF9QUEFUKDMsIEdFTjhfUFBBVF9VQykgICAgICAgICAgICAgICAgICAgICB8IC8qDQo+ Pj4gVW5jYWNoZWQgb2JqZWN0cywgbW9zdGx5IGZvciBzY2Fub3V0ICovDQo+Pj4gLSAgICAgICAg ICAgICBHRU44X1BQQVQoNCwgR0VOOF9QUEFUX1dCIHwgR0VOOF9QUEFUX0xMQ0VMTEMgfA0KPj4+ IEdFTjhfUFBBVF9BR0UoMCkpIHwNCj4+PiAtICAgICAgICAgICAgIEdFTjhfUFBBVCg1LCBHRU44 X1BQQVRfV0IgfCBHRU44X1BQQVRfTExDRUxMQyB8DQo+Pj4gR0VOOF9QUEFUX0FHRSgxKSkgfA0K Pj4+IC0gICAgICAgICAgICAgR0VOOF9QUEFUKDYsIEdFTjhfUFBBVF9XQiB8IEdFTjhfUFBBVF9M TENFTExDIHwNCj4+PiBHRU44X1BQQVRfQUdFKDIpKSB8DQo+Pj4gLSAgICAgICAgICAgICBHRU44 X1BQQVQoNywgR0VOOF9QUEFUX1dCIHwgR0VOOF9QUEFUX0xMQ0VMTEMgfA0KPj4+IEdFTjhfUFBB VF9BR0UoMykpOw0KPj4+IC0NCj4+PiAtICAgICAgIGlmICghVVNFU19QUEdUVChkZXZfcHJpdikp DQo+Pj4gKyAgICAgICBpZiAoIVVTRVNfUFBHVFQocHBhdC0+aTkxNSkpIHsNCj4+PiAgICAgICAg ICAgICAgICAgLyogU3BlYzogIkZvciBHR1RULCB0aGVyZSBpcyBOTyBwYXRfc2VsWzI6MF0gZnJv bSANCj4+PiB0aGUgZW50cnksDQo+Pj4gICAgICAgICAgICAgICAgICAqIHNvIFJUTCB3aWxsIGFs d2F5cyB1c2UgdGhlIHZhbHVlIGNvcnJlc3BvbmRpbmcgdG8NCj4+PiAgICAgICAgICAgICAgICAg ICogcGF0X3NlbCA9IDAwMCIuDQo+Pj4gQEAgLTI4NjQsMTcgKzMwMjMsMjYgQEAgc3RhdGljIHZv aWQgYmR3X3NldHVwX3ByaXZhdGVfcHBhdChzdHJ1Y3QgDQo+Pj4gZHJtX2k5MTVfcHJpdmF0ZSAq ZGV2X3ByaXYpDQo+Pj4gICAgICAgICAgICAgICAgICAqIFNvIHdlIGNhbiBzdGlsbCBob2xkIG9u dG8gYWxsIG91ciBhc3N1bXB0aW9ucyB3cnQgY3B1DQo+Pj4gICAgICAgICAgICAgICAgICAqIGNs Zmx1c2hpbmcgb24gTExDIG1hY2hpbmVzLg0KPj4+ICAgICAgICAgICAgICAgICAgKi8NCj4+PiAt ICAgICAgICAgICAgICAgcGF0ID0gR0VOOF9QUEFUKDAsIEdFTjhfUFBBVF9VQyk7DQo+Pj4gKyAg ICAgICAgICAgICAgIF9fYWxsb2NfcHBhdF9lbnRyeShwcGF0LCBQUEFUX0NBQ0hFRF9QREVfSU5E RVgsDQo+Pj4gR0VOOF9QUEFUX1VDKTsNCj4+PiArICAgICAgICAgICAgICAgcmV0dXJuOw0KPj4+ ICsgICAgICAgfQ0KPj4+ICAgLSAgICAgLyogWFhYOiBzcGVjIGRlZmluZXMgdGhpcyBhcyAyIGRp c3RpbmN0IHJlZ2lzdGVycy4gSXQncyB1bmNsZWFyDQo+Pj4gaWYgYSA2NGINCj4+PiAtICAgICAg ICAqIHdyaXRlIHdvdWxkIHdvcmsuICovDQo+Pj4gLSAgICAgICBJOTE1X1dSSVRFKEdFTjhfUFJJ VkFURV9QQVRfTE8sIHBhdCk7DQo+Pj4gLSAgICAgICBJOTE1X1dSSVRFKEdFTjhfUFJJVkFURV9Q QVRfSEksIHBhdCA+PiAzMik7DQo+Pj4gKyAgICAgICAvKiBTZWUgZ2VuOF9wdGVfZW5jb2RlKCkg Zm9yIHRoZSBtYXBwaW5nIGZyb20gY2FjaGUtbGV2ZWwgdG8gDQo+Pj4gKyBQUEFUDQo+Pj4gKi8N Cj4+PiArICAgICAgIC8qIGZvciBub3JtYWwgb2JqZWN0cywgbm8gZUxMQyAqLw0KPj4+ICsgICAg ICAgX19hbGxvY19wcGF0X2VudHJ5KHBwYXQsIFBQQVRfQ0FDSEVEX1BERV9JTkRFWCwgR0VOOF9Q UEFUX1dCIA0KPj4+ICsgfA0KPj4+IEdFTjhfUFBBVF9MTEMpOw0KPj4+ICsgICAgICAgLyogZm9y IHNjYW5vdXQgd2l0aCBlTExDICovDQo+Pj4gKyAgICAgICBfX2FsbG9jX3BwYXRfZW50cnkocHBh dCwgUFBBVF9ESVNQTEFZX0VMTENfSU5ERVgsIA0KPj4+ICsgR0VOOF9QUEFUX1dUIHwNCj4+PiBH RU44X1BQQVRfTExDRUxMQyk7DQo+Pj4gKyAgICAgICAvKiBVbmNhY2hlZCBvYmplY3RzLCBtb3N0 bHkgZm9yIHNjYW5vdXQgKi8NCj4+PiArICAgICAgIF9fYWxsb2NfcHBhdF9lbnRyeShwcGF0LCBQ UEFUX1VOQ0FDSEVEX0lOREVYLCBHRU44X1BQQVRfVUMpOw0KPj4+ICsgICAgICAgX19hbGxvY19w cGF0X2VudHJ5KHBwYXQsIFBQQVRfQ0FDSEVEX0lOREVYLCBHRU44X1BQQVRfV0IgfA0KPj4+IEdF TjhfUFBBVF9MTENFTExDIHwgR0VOOF9QUEFUX0FHRSgwKSk7DQo+Pj4gICB9DQo+Pj4gICAtc3Rh dGljIHZvaWQgY2h2X3NldHVwX3ByaXZhdGVfcHBhdChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAN Cj4+PiAqZGV2X3ByaXYpDQo+Pj4gK3N0YXRpYyB2b2lkIGNodl9zZXR1cF9wcml2YXRlX3BwYXQo c3RydWN0IGludGVsX3BwYXQgKnBwYXQpDQo+Pj4gICB7DQo+Pj4gLSAgICAgICB1NjQgcGF0Ow0K Pj4+ICsgICAgICAgcHBhdC0+bWF4X2VudHJpZXMgPSA4Ow0KPj4+ICsgICAgICAgcHBhdC0+dXBk YXRlX2h3ID0gYmR3X3ByaXZhdGVfcGF0X3VwZGF0ZV9odzsNCj4+PiArICAgICAgIHBwYXQtPm1h dGNoID0gY2h2X3ByaXZhdGVfcGF0X21hdGNoOw0KPj4+ICsgICAgICAgcHBhdC0+Y2xlYXJfdmFs dWUgPSBDSFZfUFBBVF9TTk9PUDsNCj4+PiAgICAgICAgIC8qDQo+Pj4gICAgICAgICAgKiBNYXAg V0Igb24gQkRXIHRvIHNub29wZWQgb24gQ0hWLg0KPj4+IEBAIC0yODk0LDE3ICszMDYyLDEyIEBA IHN0YXRpYyB2b2lkIGNodl9zZXR1cF9wcml2YXRlX3BwYXQoc3RydWN0IA0KPj4+IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2KQ0KPj4+ICAgICAgICAgICogV2hpY2ggbWVhbnMgd2UgbXVzdCBz ZXQgdGhlIHNub29wIGJpdCBpbiBQQVQgZW50cnkgMA0KPj4+ICAgICAgICAgICogaW4gb3JkZXIg dG8ga2VlcCB0aGUgZ2xvYmFsIHN0YXR1cyBwYWdlIHdvcmtpbmcuDQo+Pj4gICAgICAgICAgKi8N Cj4+PiAtICAgICAgIHBhdCA9IEdFTjhfUFBBVCgwLCBDSFZfUFBBVF9TTk9PUCkgfA0KPj4+IC0g ICAgICAgICAgICAgR0VOOF9QUEFUKDEsIDApIHwNCj4+PiAtICAgICAgICAgICAgIEdFTjhfUFBB VCgyLCAwKSB8DQo+Pj4gLSAgICAgICAgICAgICBHRU44X1BQQVQoMywgMCkgfA0KPj4+IC0gICAg ICAgICAgICAgR0VOOF9QUEFUKDQsIENIVl9QUEFUX1NOT09QKSB8DQo+Pj4gLSAgICAgICAgICAg ICBHRU44X1BQQVQoNSwgQ0hWX1BQQVRfU05PT1ApIHwNCj4+PiAtICAgICAgICAgICAgIEdFTjhf UFBBVCg2LCBDSFZfUFBBVF9TTk9PUCkgfA0KPj4+IC0gICAgICAgICAgICAgR0VOOF9QUEFUKDcs IENIVl9QUEFUX1NOT09QKTsNCj4+PiAgIC0gICAgIEk5MTVfV1JJVEUoR0VOOF9QUklWQVRFX1BB VF9MTywgcGF0KTsNCj4+PiAtICAgICAgIEk5MTVfV1JJVEUoR0VOOF9QUklWQVRFX1BBVF9ISSwg cGF0ID4+IDMyKTsNCj4+PiArICAgICAgIC8qIFNlZSBnZW44X3B0ZV9lbmNvZGUoKSBmb3IgdGhl IG1hcHBpbmcgZnJvbSBjYWNoZS1sZXZlbCB0byANCj4+PiArIFBQQVQNCj4+PiAqLw0KPj4+ICsg ICAgICAgX19hbGxvY19wcGF0X2VudHJ5KHBwYXQsIFBQQVRfQ0FDSEVEX1BERV9JTkRFWCwgQ0hW X1BQQVRfU05PT1ApOw0KPj4+ICsgICAgICAgX19hbGxvY19wcGF0X2VudHJ5KHBwYXQsIFBQQVRf RElTUExBWV9FTExDX0lOREVYLCAwKTsNCj4+PiArICAgICAgIF9fYWxsb2NfcHBhdF9lbnRyeShw cGF0LCBQUEFUX1VOQ0FDSEVEX0lOREVYLCAwKTsNCj4+PiArICAgICAgIF9fYWxsb2NfcHBhdF9l bnRyeShwcGF0LCBQUEFUX0NBQ0hFRF9JTkRFWCwgQ0hWX1BQQVRfU05PT1ApOw0KPj4+ICAgfQ0K Pj4+ICAgICBzdGF0aWMgdm9pZCBnZW42X2dtY2hfcmVtb3ZlKHN0cnVjdCBpOTE1X2FkZHJlc3Nf c3BhY2UgKnZtKSBAQCANCj4+PiAtMjkxNywxMiArMzA4MCwyNyBAQCBzdGF0aWMgdm9pZCBnZW42 X2dtY2hfcmVtb3ZlKHN0cnVjdCANCj4+PiBpOTE1X2FkZHJlc3Nfc3BhY2UgKnZtKQ0KPj4+ICAg ICBzdGF0aWMgdm9pZCBzZXR1cF9wcml2YXRlX3BhdChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq ZGV2X3ByaXYpDQo+Pj4gICB7DQo+Pj4gKyAgICAgICBzdHJ1Y3QgaW50ZWxfcHBhdCAqcHBhdCA9 ICZkZXZfcHJpdi0+cHBhdDsNCj4+PiArICAgICAgIGludCBpOw0KPj4+ICsNCj4+PiArICAgICAg IHBwYXQtPmk5MTUgPSBkZXZfcHJpdjsNCj4+PiArDQo+Pj4gICAgICAgICBpZiAoSU5URUxfR0VO KGRldl9wcml2KSA+PSAxMCkNCj4+PiAtICAgICAgICAgICAgICAgY25sX3NldHVwX3ByaXZhdGVf cHBhdChkZXZfcHJpdik7DQo+Pj4gKyAgICAgICAgICAgICAgIGNubF9zZXR1cF9wcml2YXRlX3Bw YXQocHBhdCk7DQo+Pj4gICAgICAgICBlbHNlIGlmIChJU19DSEVSUllWSUVXKGRldl9wcml2KSB8 fCBJU19HRU45X0xQKGRldl9wcml2KSkNCj4+PiAtICAgICAgICAgICAgICAgY2h2X3NldHVwX3By aXZhdGVfcHBhdChkZXZfcHJpdik7DQo+Pj4gKyAgICAgICAgICAgICAgIGNodl9zZXR1cF9wcml2 YXRlX3BwYXQocHBhdCk7DQo+Pj4gICAgICAgICBlbHNlDQo+Pj4gLSAgICAgICAgICAgICAgIGJk d19zZXR1cF9wcml2YXRlX3BwYXQoZGV2X3ByaXYpOw0KPj4+ICsgICAgICAgICAgICAgICBiZHdf c2V0dXBfcHJpdmF0ZV9wcGF0KHBwYXQpOw0KPj4+ICsNCj4+PiArICAgICAgIEdFTV9CVUdfT04o cHBhdC0+bWF4X2VudHJpZXMgPiBJTlRFTF9NQVhfUFBBVF9FTlRSSUVTKTsNCj4+PiArDQo+Pj4g KyAgICAgICBmb3JfZWFjaF9jbGVhcl9iaXQoaSwgcHBhdC0+dXNlZCwgcHBhdC0+bWF4X2VudHJp ZXMpIHsNCj4+PiArICAgICAgICAgICAgICAgcHBhdC0+ZW50cmllc1tpXS52YWx1ZSA9IHBwYXQt PmNsZWFyX3ZhbHVlOw0KPj4+ICsgICAgICAgICAgICAgICBwcGF0LT5lbnRyaWVzW2ldLnBwYXQg PSBwcGF0Ow0KPj4+ICsgICAgICAgICAgICAgICBzZXRfYml0KGksIHBwYXQtPmRpcnR5KTsNCj4+ PiArICAgICAgIH0NCj4+PiArDQo+Pj4gKyAgICAgICBwcGF0LT51cGRhdGVfaHcoZGV2X3ByaXYp Ow0KPj4+ICAgfQ0KPj4+ICAgICBzdGF0aWMgaW50IGdlbjhfZ21jaF9wcm9iZShzdHJ1Y3QgaTkx NV9nZ3R0ICpnZ3R0KSBAQCAtMzIzNiwxMyANCj4+PiArMzQxNCwxMCBAQCB2b2lkIGk5MTVfZ2Vt X3Jlc3RvcmVfZ3R0X21hcHBpbmdzKHN0cnVjdA0KPj4+IGRybV9pOTE1X3ByaXZhdGUgKmRldl9w cml2KQ0KPj4+ICAgICAgICAgZ2d0dC0+YmFzZS5jbG9zZWQgPSBmYWxzZTsNCj4+PiAgICAgICAg IGlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDgpIHsNCj4+PiAtICAgICAgICAgICAgICAgaWYg KElOVEVMX0dFTihkZXZfcHJpdikgPj0gMTApDQo+Pj4gLSAgICAgICAgICAgICAgICAgICAgICAg Y25sX3NldHVwX3ByaXZhdGVfcHBhdChkZXZfcHJpdik7DQo+Pj4gLSAgICAgICAgICAgICAgIGVs c2UgaWYgKElTX0NIRVJSWVZJRVcoZGV2X3ByaXYpIHx8IElTX0dFTjlfTFAoZGV2X3ByaXYpKQ0K Pj4+IC0gICAgICAgICAgICAgICAgICAgICAgIGNodl9zZXR1cF9wcml2YXRlX3BwYXQoZGV2X3By aXYpOw0KPj4+IC0gICAgICAgICAgICAgICBlbHNlDQo+Pj4gLSAgICAgICAgICAgICAgICAgICAg ICAgYmR3X3NldHVwX3ByaXZhdGVfcHBhdChkZXZfcHJpdik7DQo+Pj4gKyAgICAgICAgICAgICAg IHN0cnVjdCBpbnRlbF9wcGF0ICpwcGF0ID0gJmRldl9wcml2LT5wcGF0Ow0KPj4+ICAgKyAgICAg ICAgICAgICBiaXRtYXBfc2V0KHBwYXQtPmRpcnR5LCAwLCBwcGF0LT5tYXhfZW50cmllcyk7DQo+ Pj4gKyAgICAgICAgICAgICAgIGRldl9wcml2LT5wcGF0LnVwZGF0ZV9odyhkZXZfcHJpdik7DQo+ Pj4gICAgICAgICAgICAgICAgIHJldHVybjsNCj4+PiAgICAgICAgIH0NCj4+PiAgIGRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9ndHQuaA0KPj4+IGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvaTkxNV9nZW1fZ3R0LmgNCj4+PiBpbmRleCBiNGUzYWE3Li5lMTBjYTg5IDEw MDY0NA0KPj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2d0dC5oDQo+Pj4g KysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZ3R0LmgNCj4+PiBAQCAtMTQzLDYg KzE0MywxMSBAQCB0eXBlZGVmIHU2NCBnZW44X3BwZ3R0X3BtbDRlX3Q7DQo+Pj4gICAjZGVmaW5l IEdFTjhfUFBBVF9FTExDX09WRVJSSURFICAgICAgICAgICAgICAgKDA8PDIpDQo+Pj4gICAjZGVm aW5lIEdFTjhfUFBBVChpLCB4KSAgICAgICAgICAgICAgICAgICAgICAgKCh1NjQpKHgpIDw8ICgo aSkgKiA4KSkNCj4+PiAgICsjZGVmaW5lIEdFTjhfUFBBVF9HRVRfQ0EoeCkgKCh4KSAmIDMpDQo+ Pj4gKyNkZWZpbmUgR0VOOF9QUEFUX0dFVF9UQyh4KSAoKHgpICYgKDMgPDwgMikpICNkZWZpbmUg DQo+Pj4gK0dFTjhfUFBBVF9HRVRfQUdFKHgpICgoeCkgJiAoMyA8PCA0KSkgI2RlZmluZSBDSFZf UFBBVF9HRVRfU05PT1AoeCkgDQo+Pj4gKygoeCkgJiAoMSA8PCA2KSkNCj4+PiArDQo+Pj4gICBz dHJ1Y3Qgc2dfdGFibGU7DQo+Pj4gICAgIHN0cnVjdCBpbnRlbF9yb3RhdGlvbl9pbmZvIHsNCj4+ PiBAQCAtNTM2LDYgKzU0MSwzNyBAQCBpOTE1X3ZtX3RvX2dndHQoc3RydWN0IGk5MTVfYWRkcmVz c19zcGFjZSAqdm0pDQo+Pj4gICAgICAgICByZXR1cm4gY29udGFpbmVyX29mKHZtLCBzdHJ1Y3Qg aTkxNV9nZ3R0LCBiYXNlKTsNCj4+PiAgIH0NCj4+PiAgICsjZGVmaW5lIElOVEVMX01BWF9QUEFU X0VOVFJJRVMgOA0KPj4+ICsjZGVmaW5lIElOVEVMX1BQQVRfUEVSRkVDVF9NQVRDSCAofjBVKQ0K Pj4+ICsNCj4+PiArc3RydWN0IGludGVsX3BwYXQ7DQo+Pj4gKw0KPj4+ICtzdHJ1Y3QgaW50ZWxf cHBhdF9lbnRyeSB7DQo+Pj4gKyAgICAgICBzdHJ1Y3QgaW50ZWxfcHBhdCAqcHBhdDsNCj4+PiAr ICAgICAgIHN0cnVjdCBrcmVmIHJlZjsNCj4+PiArICAgICAgIHU4IHZhbHVlOw0KPj4+ICt9Ow0K Pj4+ICsNCj4+PiArc3RydWN0IGludGVsX3BwYXQgew0KPj4+ICsgICAgICAgc3RydWN0IGludGVs X3BwYXRfZW50cnkgZW50cmllc1tJTlRFTF9NQVhfUFBBVF9FTlRSSUVTXTsNCj4+PiArICAgICAg IERFQ0xBUkVfQklUTUFQKHVzZWQsIElOVEVMX01BWF9QUEFUX0VOVFJJRVMpOw0KPj4+ICsgICAg ICAgREVDTEFSRV9CSVRNQVAoZGlydHksIElOVEVMX01BWF9QUEFUX0VOVFJJRVMpOw0KPj4+ICsg ICAgICAgdW5zaWduZWQgaW50IG1heF9lbnRyaWVzOw0KPj4+ICsgICAgICAgdTggY2xlYXJfdmFs dWU7DQo+Pj4gKyAgICAgICAvKg0KPj4+ICsgICAgICAgICogUmV0dXJuIGEgc2NvcmUgdG8gc2hv dyBob3cgdHdvIFBQQVQgdmFsdWVzIG1hdGNoLA0KPj4+ICsgICAgICAgICogYSBJTlRFTF9QUEFU X1BFUkZFQ1RfTUFUQ0ggaW5kaWNhdGVzIGEgcGVyZmVjdCBtYXRjaA0KPj4+ICsgICAgICAgICov DQo+Pj4gKyAgICAgICB1bnNpZ25lZCBpbnQgKCptYXRjaCkodTggc3JjLCB1OCBkc3QpOw0KPj4+ ICsgICAgICAgdm9pZCAoKnVwZGF0ZV9odykoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUp Ow0KPj4+ICsNCj4+PiArICAgICAgIHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1OyB9Ow0K Pj4+ICsNCj4+PiArY29uc3Qgc3RydWN0IGludGVsX3BwYXRfZW50cnkgKg0KPj4+ICtpbnRlbF9w cGF0X2dldChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSwgdTggdmFsdWUpOyB2b2lkIA0K Pj4+ICtpbnRlbF9wcGF0X3B1dChjb25zdCBzdHJ1Y3QgaW50ZWxfcHBhdF9lbnRyeSAqZW50cnkp Ow0KPj4+ICsNCj4+PiAgIGludCBpOTE1X2dlbV9pbml0X2FsaWFzaW5nX3BwZ3R0KHN0cnVjdCBk cm1faTkxNV9wcml2YXRlICppOTE1KTsNCj4+PiAgIHZvaWQgaTkxNV9nZW1fZmluaV9hbGlhc2lu Z19wcGd0dChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSk7DQo+Pj4NCj4+DQo+Pg0KPiBf X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXw0KPiBJbnRlbC1n ZnggbWFpbGluZyBsaXN0DQo+IEludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcNCj4gaHR0 cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngNCg0K DQoNCi0tDQpSb2RyaWdvIFZpdmkNCkJsb2c6IGh0dHA6Ly9ibG9nLnZpdmkuZW5nLmJyDQpfX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFp bGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5m cmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK