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: Thu, 31 Aug 2017 05:47:09 +0000 Message-ID: <1504158428.8120.56.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> <1504130400.8120.36.camel@rdvivi-vienna> <9c5674b2-bc85-4765-5d5d-37c0a44f4cff@intel.com> <18bff524-0c68-4bc7-7cbc-f5d0a1192304@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <18bff524-0c68-4bc7-7cbc-f5d0a1192304@intel.com> Content-Language: en-US Content-ID: 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" , "intel-gvt-dev@lists.freedesktop.org" , "Widawsky, Benjamin" List-Id: intel-gfx@lists.freedesktop.org T24gVGh1LCAyMDE3LTA4LTMxIGF0IDEzOjI0ICswODAwLCBaaGkgV2FuZyB3cm90ZToNCj4gQWxz byBJIHNob3VsZCBzZW5kIGEgcmVnaXN0ZXIgZGlmZiBhdCB0aGF0IHRpbWUgKFJGQyAtPiBQQVRD SCkuIFN1cHBvc2UgDQo+IHRoZXNlIHR3byBwYXRjaGVzIHNob3VsZCBrZWVwIHRoZSB1c2VkIFBQ QVQgcmVnaXN0ZXJzIHVuY2hhbmdlZCBsaWtlIGJlZm9yZS4NCg0KSSBrbmV3IHlvdSB3ZXJlIGdv aW5nIHRvIGFzayB0aGlzIGFuZCBsb2dzIDopDQpJIHdpbGwgY2hlY2sgdG9tb3Jyb3cgY2FyZWZ1 bGx5IHNpbmNlIHJpZ2h0IG5vdyBJIGRvbid0IGhhdmUgYWNjZXNzIHRvDQp0aGUgbWFjaGluZS4N Cg0KU29ycnkgYWJvdXQgdGhhdC4NCg0KPiANCj4gT24gMDgvMzEvMTcgMTM6MjIsIFdhbmcsIFpo aSBBIHdyb3RlOg0KPiA+IFRoYW5rcyBmb3IgdGhlIHRlc3QhIFNvcnJ5IEkgZGlkbid0IGhhdmUg YW4gQ05MIG9uIG15IGhhbmQuDQo+ID4NCj4gPiBUaGlzIGlzIG9ubHkgUkZDIG5vdy4gYWZ0ZXIg Y29sbGVjdGluZyBhbGwgdGhlIGNvbW1lbnRzLCBJIHdpbGwgc3RhcnQgZnVsbCB0ZXN0LiA6KQ0K PiA+DQo+ID4gVGhhbmtzLA0KPiA+IFpoaS4NCj4gPg0KPiA+IC0tLS0tT3JpZ2luYWwgTWVzc2Fn ZS0tLS0tDQo+ID4gRnJvbTogUm9kcmlnbyBWaXZpIFttYWlsdG86cm9kcmlnby52aXZpQGdtYWls LmNvbV0NCj4gPiBTZW50OiBUaHVyc2RheSwgQXVndXN0IDMxLCAyMDE3IDg6MTUgQU0NCj4gPiBU bzogV2FuZywgWmhpIEEgPHpoaS5hLndhbmdAaW50ZWwuY29tPg0KPiA+IENjOiBWaXZpLCBSb2Ry aWdvIDxyb2RyaWdvLnZpdmlAaW50ZWwuY29tPjsgaW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9w Lm9yZzsgV2lkYXdza3ksIEJlbmphbWluIDxiZW5qYW1pbi53aWRhd3NreUBpbnRlbC5jb20+OyBp bnRlbC1ndnQtZGV2QGxpc3RzLmZyZWVkZXNrdG9wLm9yZw0KPiA+IFN1YmplY3Q6IFJlOiBbSW50 ZWwtZ2Z4XSBbUkZDdjYgMi8yXSBkcm0vaTkxNTogSW50cm9kdWNlIHByaXZhdGUgUEFUIG1hbmFn ZW1lbnQNCj4gPg0KPiA+IE9uIFdlZCwgQXVnIDMwLCAyMDE3IGF0IDk6NDkgUE0sIFpoaSBXYW5n IDx6aGkuYS53YW5nQGludGVsLmNvbT4gd3JvdGU6DQo+ID4+IEhpIFZpdmk6DQo+ID4+ICAgICAg VGhhbmtzIGZvciB0aGUgcmVwbHkhIFRoZSByZWdpc3RlciBhcmUgd3JpdHRlbiBpbiBwcGF0LT51 cGRhdGVfaHcoKSBub3cuDQo+ID4gb2gsIEkgc2F3IG5vdy4uLg0KPiA+IEkgaGFkZGVuIG5vdGlj ZWQgdGhhdCBpbnRlcmF0aW9uLg0KPiA+DQo+ID4gQnV0IHNvbWV0aGluZyBzZWVtcyByZWFsbHkg b2RkIHlldC4uLg0KPiA+IE15IENOTCB3aXRoIHRoZXNlIDIgcGF0Y2hlcyBhcHBsaWVkIGhhbmdz IG9uIGFueSBleGVjdXRpb24uLi4NCj4gPg0KPiA+Pg0KPiA+PiArc3RhdGljIHZvaWQgY25sX3By aXZhdGVfcGF0X3VwZGF0ZV9odyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZQ0KPiA+PiArKmRldl9w cml2KSB7DQo+ID4+ICsgICAgICAgc3RydWN0IGludGVsX3BwYXQgKnBwYXQgPSAmZGV2X3ByaXYt PnBwYXQ7DQo+ID4+ICsgICAgICAgaW50IGk7DQo+ID4+ICsNCj4gPj4gKyAgICAgICBmb3JfZWFj aF9zZXRfYml0KGksIHBwYXQtPmRpcnR5LCBwcGF0LT5tYXhfZW50cmllcykgew0KPiA+PiArICAg ICAgICAgICAgICAgSTkxNV9XUklURShHRU4xMF9QQVRfSU5ERVgoaSksIHBwYXQtPmVudHJpZXNb aV0udmFsdWUpOw0KPiA+PiArICAgICAgICAgICAgICAgY2xlYXJfYml0KGksIHBwYXQtPmRpcnR5 KTsNCj4gPj4gKyAgICAgICB9DQo+ID4+ICt9DQo+ID4+ICsNCj4gPj4gK3N0YXRpYyB2b2lkIGJk d19wcml2YXRlX3BhdF91cGRhdGVfaHcoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUNCj4gPj4gKypk ZXZfcHJpdikgew0KPiA+PiArICAgICAgIHN0cnVjdCBpbnRlbF9wcGF0ICpwcGF0ID0gJmRldl9w cml2LT5wcGF0Ow0KPiA+PiArICAgICAgIHU2NCBwYXQgPSAwOw0KPiA+PiArICAgICAgIGludCBp Ow0KPiA+PiArDQo+ID4+ICsgICAgICAgZm9yIChpID0gMDsgaSA8IHBwYXQtPm1heF9lbnRyaWVz OyBpKyspDQo+ID4+ICsgICAgICAgICAgICAgICBwYXQgfD0gR0VOOF9QUEFUKGksIHBwYXQtPmVu dHJpZXNbaV0udmFsdWUpOw0KPiA+PiArDQo+ID4+ICsgICAgICAgYml0bWFwX2NsZWFyKHBwYXQt PmRpcnR5LCAwLCBwcGF0LT5tYXhfZW50cmllcyk7DQo+ID4+ICsNCj4gPj4gKyAgICAgICBJOTE1 X1dSSVRFKEdFTjhfUFJJVkFURV9QQVRfTE8sIGxvd2VyXzMyX2JpdHMocGF0KSk7DQo+ID4+ICsg ICAgICAgSTkxNV9XUklURShHRU44X1BSSVZBVEVfUEFUX0hJLCB1cHBlcl8zMl9iaXRzKHBhdCkp OyB9DQo+ID4+DQo+ID4+IE9uIDA4LzMxLzE3IDA2OjAwLCBWaXZpLCBSb2RyaWdvIHdyb3RlOg0K PiA+Pj4gT24gV2VkLCAyMDE3LTA4LTMwIGF0IDAyOjE0ICswODAwLCBaaGkgV2FuZyB3cm90ZToN Cj4gPj4+PiBUaGUgcHJpdmF0ZSBQQVQgbWFuYWdlbWVudCBpcyB0byBzdXBwb3J0IFBQQVQgZW50 cnkgbWFuaXB1bGF0aW9uLg0KPiA+Pj4+IFR3byBBUElzIGFyZSBpbnRyb2R1Y2VkIGZvciBkeW5h bWljYWxseSBtYW5hZ2luZyBQUEFUIGVudHJpZXM6DQo+ID4+Pj4gaW50ZWxfcHBhdF9nZXQgYW5k IGludGVsX3BwYXRfcHV0Lg0KPiA+Pj4+DQo+ID4+Pj4gaW50ZWxfcHBhdF9nZXQgd2lsbCBzZWFy Y2ggZm9yIGFuIGV4aXN0aW5nIFBQQVQgZW50cnkgd2hpY2gNCj4gPj4+PiBwZXJmZWN0bHkgbWF0 Y2hlcyB0aGUgcmVxdWlyZWQgUFBBVCB2YWx1ZS4gSWYgbm90LCBpdCB3aWxsIHRyeSB0bw0KPiA+ Pj4+IGFsbG9jYXRlIG9yIHJldHVybiBhIHBhcnRpYWxseSBtYXRjaGVkIFBQQVQgZW50cnkgaWYg dGhlcmUgaXMgYW55DQo+ID4+Pj4gYXZhaWxhYmxlIFBQQVQgaW5kZXhlcyBvciBub3QuDQo+ID4+ Pj4NCj4gPj4+PiBpbnRlbF9wcGF0X3B1dCB3aWxsIHB1dCBiYWNrIHRoZSBQUEFUIGVudHJ5IHdo aWNoIGNvbWVzIGZyb20NCj4gPj4+PiBpbnRlbF9wcGF0X2dldC4gSWYgaXQncyBkeW5hbWljYWxs eSBhbGxvY2F0ZWQsIHRoZSByZWZlcmVuY2UgY291bnQNCj4gPj4+PiB3aWxsIGJlIGRlY3JlYXNl ZC4gSWYgdGhlIHJlZmVyZW5jZSBjb3VudCB0dXJucyBpbnRvIHplcm8sIHRoZSBQUEFUDQo+ID4+ Pj4gaW5kZXggaXMgZnJlZWQgYWdhaW4uDQo+ID4+Pj4NCj4gPj4+PiBCZXNpZGVzLCBhbm90aGVy IHR3byBjYWxsYmFja3MgYXJlIGludHJvZHVjZWQgdG8gc3VwcG9ydCB0aGUgcHJpdmF0ZQ0KPiA+ Pj4+IFBBVCBtYW5hZ2VtZW50IGZyYW1ld29yay4gT25lIGlzIHBwYXQtPnVwZGF0ZV9odygpLCB3 aGljaCB3cml0ZXMgdGhlDQo+ID4+Pj4gUFBBVCBjb25maWd1cmF0aW9ucyBpbiBwcGF0LT5lbnRy aWVzIGludG8gSFcuIEFub3RoZXIgb25lIGlzDQo+ID4+Pj4gcHBhdC0+bWF0Y2gsIHdoaWNoIHdp bGwgcmV0dXJuIGEgc2NvcmUgdG8gc2hvdyBob3cgdHdvIFBQQVQgdmFsdWVzDQo+ID4+Pj4gbWF0 Y2ggd2l0aCBlYWNoIG90aGVyLg0KPiA+Pj4+DQo+ID4+Pj4gdjY6DQo+ID4+Pj4NCj4gPj4+PiAt IEFkZHJlc3MgYWxsIGNvbW1lbnRzIGZyb20gQ2hyaXM6DQo+ID4+Pj4gaHR0cDovL3d3dy5zcGlu aWNzLm5ldC9saXN0cy9pbnRlbC1nZngvbXNnMTM2ODUwLmh0bWwNCj4gPj4+Pg0KPiA+Pj4+IC0g QWRkcmVzcyBhbGwgY29tbWVudHMgZnJvbSBKb29uYXM6DQo+ID4+Pj4gaHR0cDovL3d3dy5zcGlu aWNzLm5ldC9saXN0cy9pbnRlbC1nZngvbXNnMTM2ODQ1Lmh0bWwNCj4gPj4+Pg0KPiA+Pj4+IHY1 Og0KPiA+Pj4+DQo+ID4+Pj4gLSBBZGQgY2hlY2sgYW5kIHdhcm5uaW5ncyBmb3IgdGhvc2UgcGxh dGZvcm1zIHdoaWNoIGRvbid0IGhhdmUgUFBBVC4NCj4gPj4+Pg0KPiA+Pj4+IHYzOg0KPiA+Pj4+ DQo+ID4+Pj4gLSBJbnRyb2R1Y2UgZGlydHkgYml0bWFwIGZvciBQUEFUIHJlZ2lzdGVycy4gKENo cmlzKQ0KPiA+Pj4+IC0gQ2hhbmdlIHRoZSBuYW1lIG9mIHRoZSBwb2ludGVyICJkZXZfcHJpdiIg dG8gImk5MTUiLiAoQ2hyaXMpDQo+ID4+Pj4gLSBpbnRlbF9wcGF0X3tnZXQsIHB1dH0gcmV0dXJu cy90YWtlcyBhIGNvbnN0IGludGVsX3BwYXRfZW50cnkgKi4NCj4gPj4+PiAoQ2hyaXMpDQo+ID4+ Pj4NCj4gPj4+PiB2MjoNCj4gPj4+Pg0KPiA+Pj4+IC0gQVBJIHJlLWRlc2lnbi4gKENocmlzKQ0K PiA+Pj4+DQo+ID4+Pj4gQ2M6IEJlbiBXaWRhd3NreSA8YmVuamFtaW4ud2lkYXdza3lAaW50ZWwu Y29tPg0KPiA+Pj4+IENjOiBSb2RyaWdvIFZpdmkgPHJvZHJpZ28udml2aUBpbnRlbC5jb20+DQo+ ID4+Pj4gQ2M6IENocmlzIFdpbHNvbiA8Y2hyaXNAY2hyaXMtd2lsc29uLmNvLnVrPg0KPiA+Pj4+ IENjOiBKb29uYXMgTGFodGluZW4gPGpvb25hcy5sYWh0aW5lbkBsaW51eC5pbnRlbC5jb20+DQo+ ID4+Pj4gU2lnbmVkLW9mZi1ieTogWmhpIFdhbmcgPHpoaS5hLndhbmdAaW50ZWwuY29tPg0KPiA+ Pj4+IC0tLQ0KPiA+Pj4+ICAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmggICAgIHwg ICAyICsNCj4gPj4+PiAgICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9ndHQuYyB8IDI3 Mw0KPiA+Pj4+ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLQ0KPiA+Pj4+ICAg IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2d0dC5oIHwgIDM2ICsrKysrDQo+ID4+Pj4g ICAgMyBmaWxlcyBjaGFuZ2VkLCAyNjIgaW5zZXJ0aW9ucygrKSwgNDkgZGVsZXRpb25zKC0pDQo+ ID4+Pj4NCj4gPj4+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYu aA0KPiA+Pj4+IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaCBpbmRleCA3NTg3ZWY1 Li41ZmZkZTEwIDEwMDY0NA0KPiA+Pj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVf ZHJ2LmgNCj4gPj4+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oDQo+ID4+ Pj4gQEAgLTIzMTIsNiArMjMxMiw4IEBAIHN0cnVjdCBkcm1faTkxNV9wcml2YXRlIHsNCj4gPj4+ PiAgICAgICAgICBERUNMQVJFX0hBU0hUQUJMRShtbV9zdHJ1Y3RzLCA3KTsNCj4gPj4+PiAgICAg ICAgICBzdHJ1Y3QgbXV0ZXggbW1fbG9jazsNCj4gPj4+PiAgICArICAgICBzdHJ1Y3QgaW50ZWxf cHBhdCBwcGF0Ow0KPiA+Pj4+ICsNCj4gPj4+PiAgICAgICAgICAvKiBLZXJuZWwgTW9kZXNldHRp bmcgKi8NCj4gPj4+PiAgICAgICAgICBzdHJ1Y3QgaW50ZWxfY3J0YyAqcGxhbmVfdG9fY3J0Y19t YXBwaW5nW0k5MTVfTUFYX1BJUEVTXTsNCj4gPj4+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaTkxNV9nZW1fZ3R0LmMNCj4gPj4+PiBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5 MTVfZ2VtX2d0dC5jDQo+ID4+Pj4gaW5kZXggYjc0ZmE5ZC4uMzEwNjE0MiAxMDA2NDQNCj4gPj4+ PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9ndHQuYw0KPiA+Pj4+ICsrKyBi L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2d0dC5jDQo+ID4+Pj4gQEAgLTI4MTYsNDEg KzI4MTYsMjAwIEBAIHN0YXRpYyBpbnQgZ2d0dF9wcm9iZV9jb21tb24oc3RydWN0DQo+ID4+Pj4g aTkxNV9nZ3R0ICpnZ3R0LCB1NjQgc2l6ZSkNCj4gPj4+PiAgICAgICAgICByZXR1cm4gMDsNCj4g Pj4+PiAgICB9DQo+ID4+Pj4gICAgLXN0YXRpYyB2b2lkIGNubF9zZXR1cF9wcml2YXRlX3BwYXQo c3RydWN0IGRybV9pOTE1X3ByaXZhdGUNCj4gPj4+PiAqZGV2X3ByaXYpDQo+ID4+Pj4gK3N0YXRp YyBzdHJ1Y3QgaW50ZWxfcHBhdF9lbnRyeSAqDQo+ID4+Pj4gK19fYWxsb2NfcHBhdF9lbnRyeShz dHJ1Y3QgaW50ZWxfcHBhdCAqcHBhdCwgdW5zaWduZWQgaW50IGluZGV4LCB1OA0KPiA+Pj4+IHZh bHVlKQ0KPiA+Pj4+ICAgIHsNCj4gPj4+PiArICAgICAgIHN0cnVjdCBpbnRlbF9wcGF0X2VudHJ5 ICplbnRyeSA9ICZwcGF0LT5lbnRyaWVzW2luZGV4XTsNCj4gPj4+PiArDQo+ID4+Pj4gKyAgICAg ICBHRU1fQlVHX09OKGluZGV4ID49IHBwYXQtPm1heF9lbnRyaWVzKTsNCj4gPj4+PiArICAgICAg IEdFTV9CVUdfT04odGVzdF9iaXQoaW5kZXgsIHBwYXQtPnVzZWQpKTsNCj4gPj4+PiArDQo+ID4+ Pj4gKyAgICAgICBlbnRyeS0+cHBhdCA9IHBwYXQ7DQo+ID4+Pj4gKyAgICAgICBlbnRyeS0+dmFs dWUgPSB2YWx1ZTsNCj4gPj4+PiArICAgICAgIGtyZWZfaW5pdCgmZW50cnktPnJlZik7DQo+ID4+ Pj4gKyAgICAgICBzZXRfYml0KGluZGV4LCBwcGF0LT51c2VkKTsNCj4gPj4+PiArICAgICAgIHNl dF9iaXQoaW5kZXgsIHBwYXQtPmRpcnR5KTsNCj4gPj4+PiArDQo+ID4+Pj4gKyAgICAgICByZXR1 cm4gZW50cnk7DQo+ID4+Pj4gK30NCj4gPj4+PiArDQo+ID4+Pj4gK3N0YXRpYyB2b2lkIF9fZnJl ZV9wcGF0X2VudHJ5KHN0cnVjdCBpbnRlbF9wcGF0X2VudHJ5ICplbnRyeSkgew0KPiA+Pj4+ICsg ICAgICAgc3RydWN0IGludGVsX3BwYXQgKnBwYXQgPSBlbnRyeS0+cHBhdDsNCj4gPj4+PiArICAg ICAgIHVuc2lnbmVkIGludCBpbmRleCA9IGVudHJ5IC0gcHBhdC0+ZW50cmllczsNCj4gPj4+PiAr DQo+ID4+Pj4gKyAgICAgICBHRU1fQlVHX09OKGluZGV4ID49IHBwYXQtPm1heF9lbnRyaWVzKTsN Cj4gPj4+PiArICAgICAgIEdFTV9CVUdfT04oIXRlc3RfYml0KGluZGV4LCBwcGF0LT51c2VkKSk7 DQo+ID4+Pj4gKw0KPiA+Pj4+ICsgICAgICAgZW50cnktPnZhbHVlID0gcHBhdC0+Y2xlYXJfdmFs dWU7DQo+ID4+Pj4gKyAgICAgICBjbGVhcl9iaXQoaW5kZXgsIHBwYXQtPnVzZWQpOw0KPiA+Pj4+ ICsgICAgICAgc2V0X2JpdChpbmRleCwgcHBhdC0+ZGlydHkpOyB9DQo+ID4+Pj4gKw0KPiA+Pj4+ ICsvKioNCj4gPj4+PiArICogaW50ZWxfcHBhdF9nZXQgLSBnZXQgYSB1c2FibGUgUFBBVCBlbnRy eQ0KPiA+Pj4+ICsgKiBAaTkxNTogaTkxNSBkZXZpY2UgaW5zdGFuY2UNCj4gPj4+PiArICogQHZh bHVlOiB0aGUgUFBBVCB2YWx1ZSByZXF1aXJlZCBieSB0aGUgY2FsbGVyDQo+ID4+Pj4gKyAqDQo+ ID4+Pj4gKyAqIFRoZSBmdW5jdGlvbiB0cmllcyB0byBzZWFyY2ggaWYgdGhlcmUgaXMgYW4gZXhp c3RpbmcgUFBBVCBlbnRyeQ0KPiA+Pj4+ICt3aGljaA0KPiA+Pj4+ICsgKiBtYXRjaGVzIHdpdGgg dGhlIHJlcXVpcmVkIHZhbHVlLiBJZiBwZXJmZWN0bHkgbWF0Y2hlZCwgdGhlDQo+ID4+Pj4gK2V4 aXN0aW5nDQo+ID4+Pj4gUFBBVA0KPiA+Pj4+ICsgKiBlbnRyeSB3aWxsIGJlIHVzZWQuIElmIG9u bHkgcGFydGlhbGx5IG1hdGNoZWQsIGl0IHdpbGwgdHJ5IHRvDQo+ID4+Pj4gKyBjaGVjaw0KPiA+ Pj4+IGlmDQo+ID4+Pj4gKyAqIHRoZXJlIGlzIGFueSBhdmFpbGFibGUgUFBBVCBpbmRleC4gSWYg eWVzLCBpdCB3aWxsIGFsbG9jYXRlIGENCj4gPj4+PiArIG5ldw0KPiA+Pj4+IFBQQVQNCj4gPj4+ PiArICogaW5kZXggZm9yIHRoZSByZXF1aXJlZCBlbnRyeSBhbmQgdXBkYXRlIHRoZSBIVy4gSWYg bm90LCB0aGUNCj4gPj4+PiArcGFydGlhbGx5DQo+ID4+Pj4gKyAqIG1hdGNoZWQgZW50cnkgd2ls bCBiZSB1c2VkLg0KPiA+Pj4+ICsgKi8NCj4gPj4+PiArY29uc3Qgc3RydWN0IGludGVsX3BwYXRf ZW50cnkgKg0KPiA+Pj4+ICtpbnRlbF9wcGF0X2dldChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq aTkxNSwgdTggdmFsdWUpIHsNCj4gPj4+PiArICAgICAgIHN0cnVjdCBpbnRlbF9wcGF0ICpwcGF0 ID0gJmk5MTUtPnBwYXQ7DQo+ID4+Pj4gKyAgICAgICBzdHJ1Y3QgaW50ZWxfcHBhdF9lbnRyeSAq ZW50cnk7DQo+ID4+Pj4gKyAgICAgICB1bnNpZ25lZCBpbnQgc2Nhbm5lZCwgYmVzdF9zY29yZTsN Cj4gPj4+PiArICAgICAgIGludCBpOw0KPiA+Pj4+ICsNCj4gPj4+PiArICAgICAgIEdFTV9CVUdf T04oIXBwYXQtPm1heF9lbnRyaWVzKTsNCj4gPj4+PiArDQo+ID4+Pj4gKyAgICAgICBzY2FubmVk ID0gYmVzdF9zY29yZSA9IDA7DQo+ID4+Pj4gKw0KPiA+Pj4+ICsgICAgICAgZm9yX2VhY2hfc2V0 X2JpdChpLCBwcGF0LT51c2VkLCBwcGF0LT5tYXhfZW50cmllcykgew0KPiA+Pj4+ICsgICAgICAg ICAgICAgICB1bnNpZ25lZCBpbnQgc2NvcmU7DQo+ID4+Pj4gKw0KPiA+Pj4+ICsgICAgICAgICAg ICAgICBlbnRyeSA9ICZwcGF0LT5lbnRyaWVzW2ldOw0KPiA+Pj4+ICsgICAgICAgICAgICAgICBz Y29yZSA9IHBwYXQtPm1hdGNoKGVudHJ5LT52YWx1ZSwgdmFsdWUpOw0KPiA+Pj4+ICsgICAgICAg ICAgICAgICBpZiAoc2NvcmUgPiBiZXN0X3Njb3JlKSB7DQo+ID4+Pj4gKyAgICAgICAgICAgICAg ICAgICAgICAgaWYgKHNjb3JlID09IElOVEVMX1BQQVRfUEVSRkVDVF9NQVRDSCkgew0KPiA+Pj4+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga3JlZl9nZXQoJmVudHJ5LT5yZWYpOw0K PiA+Pj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVudHJ5Ow0KPiA+ Pj4+ICsgICAgICAgICAgICAgICAgICAgICAgIH0NCj4gPj4+PiArICAgICAgICAgICAgICAgICAg ICAgICBiZXN0X3Njb3JlID0gc2NvcmU7DQo+ID4+Pj4gKyAgICAgICAgICAgICAgIH0NCj4gPj4+ PiArICAgICAgICAgICAgICAgc2Nhbm5lZCsrOw0KPiA+Pj4+ICsgICAgICAgfQ0KPiA+Pj4+ICsN Cj4gPj4+PiArICAgICAgIGlmIChzY2FubmVkID09IHBwYXQtPm1heF9lbnRyaWVzKSB7DQo+ID4+ Pj4gKyAgICAgICAgICAgICAgIGlmICghYmVzdF9zY29yZSkNCj4gPj4+PiArICAgICAgICAgICAg ICAgICAgICAgICByZXR1cm4gRVJSX1BUUigtRU5PU1BDKTsNCj4gPj4+PiArDQo+ID4+Pj4gKyAg ICAgICAgICAgICAgIGtyZWZfZ2V0KCZlbnRyeS0+cmVmKTsNCj4gPj4+PiArICAgICAgICAgICAg ICAgcmV0dXJuIGVudHJ5Ow0KPiA+Pj4+ICsgICAgICAgfQ0KPiA+Pj4+ICsNCj4gPj4+PiArICAg ICAgIGkgPSBmaW5kX2ZpcnN0X3plcm9fYml0KHBwYXQtPnVzZWQsIHBwYXQtPm1heF9lbnRyaWVz KTsNCj4gPj4+PiArICAgICAgIGVudHJ5ID0gX19hbGxvY19wcGF0X2VudHJ5KHBwYXQsIGksIHZh bHVlKTsNCj4gPj4+PiArICAgICAgIHBwYXQtPnVwZGF0ZV9odyhpOTE1KTsNCj4gPj4+PiArICAg ICAgIHJldHVybiBlbnRyeTsNCj4gPj4+PiArfQ0KPiA+Pj4+ICsNCj4gPj4+PiArc3RhdGljIHZv aWQgcmVsZWFzZV9wcGF0KHN0cnVjdCBrcmVmICprcmVmKSB7DQo+ID4+Pj4gKyAgICAgICBzdHJ1 Y3QgaW50ZWxfcHBhdF9lbnRyeSAqZW50cnkgPQ0KPiA+Pj4+ICsgICAgICAgICAgICAgICBjb250 YWluZXJfb2Yoa3JlZiwgc3RydWN0IGludGVsX3BwYXRfZW50cnksIHJlZik7DQo+ID4+Pj4gKyAg ICAgICBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IGVudHJ5LT5wcGF0LT5pOTE1Ow0K PiA+Pj4+ICsNCj4gPj4+PiArICAgICAgIF9fZnJlZV9wcGF0X2VudHJ5KGVudHJ5KTsNCj4gPj4+ PiArICAgICAgIGVudHJ5LT5wcGF0LT51cGRhdGVfaHcoaTkxNSk7IH0NCj4gPj4+PiArDQo+ID4+ Pj4gKy8qKg0KPiA+Pj4+ICsgKiBpbnRlbF9wcGF0X3B1dCAtIHB1dCBiYWNrIHRoZSBQUEFUIGVu dHJ5IGdvdCBmcm9tDQo+ID4+Pj4gK2ludGVsX3BwYXRfZ2V0KCkNCj4gPj4+PiArICogQGVudHJ5 OiBhbiBpbnRlbCBQUEFUIGVudHJ5DQo+ID4+Pj4gKyAqDQo+ID4+Pj4gKyAqIFB1dCBiYWNrIHRo ZSBQUEFUIGVudHJ5IGdvdCBmcm9tIGludGVsX3BwYXRfZ2V0KCkuIElmIHRoZSBQUEFUDQo+ID4+ Pj4gK2luZGV4DQo+ID4+Pj4gb2YgdGhlDQo+ID4+Pj4gKyAqIGVudHJ5IGlzIGR5bmFtaWNhbGx5 IGFsbG9jYXRlZCwgaXRzIHJlZmVyZW5jZSBjb3VudCB3aWxsIGJlDQo+ID4+Pj4gZGVjcmVhc2Vk LiBPbmNlDQo+ID4+Pj4gKyAqIHRoZSByZWZlcmVuY2UgY291bnQgYmVjb21lcyBpbnRvIHplcm8s IHRoZSBQUEFUIGluZGV4IGJlY29tZXMNCj4gPj4+PiArIGZyZWUNCj4gPj4+PiBhZ2Fpbi4NCj4g Pj4+PiArICovDQo+ID4+Pj4gK3ZvaWQgaW50ZWxfcHBhdF9wdXQoY29uc3Qgc3RydWN0IGludGVs X3BwYXRfZW50cnkgKmVudHJ5KSB7DQo+ID4+Pj4gKyAgICAgICBzdHJ1Y3QgaW50ZWxfcHBhdCAq cHBhdCA9IGVudHJ5LT5wcGF0Ow0KPiA+Pj4+ICsgICAgICAgdW5zaWduZWQgaW50IGluZGV4ID0g ZW50cnkgLSBwcGF0LT5lbnRyaWVzOw0KPiA+Pj4+ICsNCj4gPj4+PiArICAgICAgIEdFTV9CVUdf T04oIXBwYXQtPm1heF9lbnRyaWVzKTsNCj4gPj4+PiArDQo+ID4+Pj4gKyAgICAgICBrcmVmX3B1 dCgmcHBhdC0+ZW50cmllc1tpbmRleF0ucmVmLCByZWxlYXNlX3BwYXQpOyB9DQo+ID4+Pj4gKw0K PiA+Pj4+ICtzdGF0aWMgdm9pZCBjbmxfcHJpdmF0ZV9wYXRfdXBkYXRlX2h3KHN0cnVjdCBkcm1f aTkxNV9wcml2YXRlDQo+ID4+Pj4gKypkZXZfcHJpdikgew0KPiA+Pj4+ICsgICAgICAgc3RydWN0 IGludGVsX3BwYXQgKnBwYXQgPSAmZGV2X3ByaXYtPnBwYXQ7DQo+ID4+Pj4gKyAgICAgICBpbnQg aTsNCj4gPj4+PiArDQo+ID4+Pj4gKyAgICAgICBmb3JfZWFjaF9zZXRfYml0KGksIHBwYXQtPmRp cnR5LCBwcGF0LT5tYXhfZW50cmllcykgew0KPiA+Pj4+ICsgICAgICAgICAgICAgICBJOTE1X1dS SVRFKEdFTjEwX1BBVF9JTkRFWChpKSwgcHBhdC0+ZW50cmllc1tpXS52YWx1ZSk7DQo+ID4+Pj4g KyAgICAgICAgICAgICAgIGNsZWFyX2JpdChpLCBwcGF0LT5kaXJ0eSk7DQo+ID4+Pj4gKyAgICAg ICB9DQo+ID4+Pj4gK30NCj4gPj4+PiArDQo+ID4+Pj4gK3N0YXRpYyB2b2lkIGJkd19wcml2YXRl X3BhdF91cGRhdGVfaHcoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUNCj4gPj4+PiArKmRldl9wcml2 KSB7DQo+ID4+Pj4gKyAgICAgICBzdHJ1Y3QgaW50ZWxfcHBhdCAqcHBhdCA9ICZkZXZfcHJpdi0+ cHBhdDsNCj4gPj4+PiArICAgICAgIHU2NCBwYXQgPSAwOw0KPiA+Pj4+ICsgICAgICAgaW50IGk7 DQo+ID4+Pj4gKw0KPiA+Pj4+ICsgICAgICAgZm9yIChpID0gMDsgaSA8IHBwYXQtPm1heF9lbnRy aWVzOyBpKyspDQo+ID4+Pj4gKyAgICAgICAgICAgICAgIHBhdCB8PSBHRU44X1BQQVQoaSwgcHBh dC0+ZW50cmllc1tpXS52YWx1ZSk7DQo+ID4+Pj4gKw0KPiA+Pj4+ICsgICAgICAgYml0bWFwX2Ns ZWFyKHBwYXQtPmRpcnR5LCAwLCBwcGF0LT5tYXhfZW50cmllcyk7DQo+ID4+Pj4gKw0KPiA+Pj4+ ICsgICAgICAgSTkxNV9XUklURShHRU44X1BSSVZBVEVfUEFUX0xPLCBsb3dlcl8zMl9iaXRzKHBh dCkpOw0KPiA+Pj4+ICsgICAgICAgSTkxNV9XUklURShHRU44X1BSSVZBVEVfUEFUX0hJLCB1cHBl cl8zMl9iaXRzKHBhdCkpOyB9DQo+ID4+Pj4gKw0KPiA+Pj4+ICtzdGF0aWMgdW5zaWduZWQgaW50 IGJkd19wcml2YXRlX3BhdF9tYXRjaCh1OCBzcmMsIHU4IGRzdCkgew0KPiA+Pj4+ICsgICAgICAg dW5zaWduZWQgaW50IHNjb3JlID0gMDsNCj4gPj4+PiArDQo+ID4+Pj4gKyAgICAgICAvKiBDYWNo ZSBhdHRyaWJ1dGUgaGFzIHRvIGJlIG1hdGNoZWQuICovDQo+ID4+Pj4gKyAgICAgICBpZiAoR0VO OF9QUEFUX0dFVF9DQShzcmMpICE9IEdFTjhfUFBBVF9HRVRfQ0EoZHN0KSkNCj4gPj4+PiArICAg ICAgICAgICAgICAgcmV0dXJuIDA7DQo+ID4+Pj4gKw0KPiA+Pj4+ICsgICAgICAgaWYgKEdFTjhf UFBBVF9HRVRfVEMoc3JjKSA9PSBHRU44X1BQQVRfR0VUX1RDKGRzdCkpDQo+ID4+Pj4gKyAgICAg ICAgICAgICAgIHNjb3JlICs9IDI7DQo+ID4+Pj4gKw0KPiA+Pj4+ICsgICAgICAgaWYoR0VOOF9Q UEFUX0dFVF9BR0Uoc3JjKSA9PSBHRU44X1BQQVRfR0VUX0FHRShkc3QpKQ0KPiA+Pj4+ICsgICAg ICAgICAgICAgICBzY29yZSArPSAxOw0KPiA+Pj4+ICsNCj4gPj4+PiArICAgICAgIGlmIChzY29y ZSA9PSAzKQ0KPiA+Pj4+ICsgICAgICAgICAgICAgICByZXR1cm4gSU5URUxfUFBBVF9QRVJGRUNU X01BVENIOw0KPiA+Pj4+ICsNCj4gPj4+PiArICAgICAgIHJldHVybiBzY29yZTsNCj4gPj4+PiAr fQ0KPiA+Pj4+ICsNCj4gPj4+PiArc3RhdGljIHVuc2lnbmVkIGludCBjaHZfcHJpdmF0ZV9wYXRf bWF0Y2godTggc3JjLCB1OCBkc3QpIHsNCj4gPj4+PiArICAgICAgIHJldHVybiAoQ0hWX1BQQVRf R0VUX1NOT09QKHNyYykgPT0gQ0hWX1BQQVRfR0VUX1NOT09QKGRzdCkpID8NCj4gPj4+PiArICAg ICAgICAgICAgICAgSU5URUxfUFBBVF9QRVJGRUNUX01BVENIIDogMDsgfQ0KPiA+Pj4+ICsNCj4g Pj4+PiArc3RhdGljIHZvaWQgY25sX3NldHVwX3ByaXZhdGVfcHBhdChzdHJ1Y3QgaW50ZWxfcHBh dCAqcHBhdCkgew0KPiA+Pj4+ICsgICAgICAgcHBhdC0+bWF4X2VudHJpZXMgPSA4Ow0KPiA+Pj4+ ICsgICAgICAgcHBhdC0+dXBkYXRlX2h3ID0gY25sX3ByaXZhdGVfcGF0X3VwZGF0ZV9odzsNCj4g Pj4+PiArICAgICAgIHBwYXQtPm1hdGNoID0gYmR3X3ByaXZhdGVfcGF0X21hdGNoOw0KPiA+Pj4+ ICsgICAgICAgcHBhdC0+Y2xlYXJfdmFsdWUgPSBHRU44X1BQQVRfTExDRUxMQyB8IEdFTjhfUFBB VF9BR0UoMyk7DQo+ID4+Pj4gKw0KPiA+Pj4+ICAgICAgICAgIC8qIFhYWDogc3BlYyBpcyB1bmNs ZWFyIGlmIHRoaXMgaXMgc3RpbGwgbmVlZGVkIGZvciBDTkwrICovDQo+ID4+Pj4gLSAgICAgICBp ZiAoIVVTRVNfUFBHVFQoZGV2X3ByaXYpKSB7DQo+ID4+Pj4gLSAgICAgICAgICAgICAgIEk5MTVf V1JJVEUoR0VOMTBfUEFUX0lOREVYKDApLCBHRU44X1BQQVRfVUMpOw0KPiA+Pj4+ICsgICAgICAg aWYgKCFVU0VTX1BQR1RUKHBwYXQtPmk5MTUpKSB7DQo+ID4+Pj4gKyAgICAgICAgICAgICAgIF9f YWxsb2NfcHBhdF9lbnRyeShwcGF0LCBQUEFUX0NBQ0hFRF9QREVfSU5ERVgsDQo+ID4+Pj4gR0VO OF9QUEFUX1VDKTsNCj4gPj4+PiAgICAgICAgICAgICAgICAgIHJldHVybjsNCj4gPj4+PiAgICAg ICAgICB9DQo+ID4+Pj4gICAgLSAgICAgSTkxNV9XUklURShHRU4xMF9QQVRfSU5ERVgoMCksIEdF TjhfUFBBVF9XQiB8IEdFTjhfUFBBVF9MTEMpOw0KPiA+Pj4+IC0gICAgICAgSTkxNV9XUklURShH RU4xMF9QQVRfSU5ERVgoMSksIEdFTjhfUFBBVF9XQyB8IEdFTjhfUFBBVF9MTENFTExDKTsNCj4g Pj4+PiAtICAgICAgIEk5MTVfV1JJVEUoR0VOMTBfUEFUX0lOREVYKDIpLCBHRU44X1BQQVRfV1Qg fCBHRU44X1BQQVRfTExDRUxMQyk7DQo+ID4+Pj4gLSAgICAgICBJOTE1X1dSSVRFKEdFTjEwX1BB VF9JTkRFWCgzKSwgR0VOOF9QUEFUX1VDKTsNCj4gPj4+PiAtICAgICAgIEk5MTVfV1JJVEUoR0VO MTBfUEFUX0lOREVYKDQpLCBHRU44X1BQQVRfTExDRUxMQyB8DQo+ID4+Pj4gR0VOOF9QUEFUX0FH RSgwKSk7DQo+ID4+Pj4gLSAgICAgICBJOTE1X1dSSVRFKEdFTjEwX1BBVF9JTkRFWCg1KSwgR0VO OF9QUEFUX0xMQ0VMTEMgfA0KPiA+Pj4+IEdFTjhfUFBBVF9BR0UoMSkpOw0KPiA+Pj4+IC0gICAg ICAgSTkxNV9XUklURShHRU4xMF9QQVRfSU5ERVgoNiksIEdFTjhfUFBBVF9MTENFTExDIHwNCj4g Pj4+PiBHRU44X1BQQVRfQUdFKDIpKTsNCj4gPj4+PiAtICAgICAgIEk5MTVfV1JJVEUoR0VOMTBf UEFUX0lOREVYKDcpLCBHRU44X1BQQVRfTExDRUxMQyB8DQo+ID4+Pj4gR0VOOF9QUEFUX0FHRSgz KSk7DQo+ID4+Pg0KPiA+Pj4gR2VuOCBhbGxvY2F0aW9uIHN0eWxlIGRvZXNuJ3Qgd29yayBvbiBD TkwuDQo+ID4+PiBJIGRvbid0IHNlZSB3aGVyZSBhbGwgdGhlc2UgcmVnaXN0ZXJzIHdvdWxkIGJl IGdldHRpbmcgcHJvcGVybHkgd3JpdHRlbi4NCj4gPj4+DQo+ID4+Pj4gKyAgICAgICAvKiBTZWUg Z2VuOF9wdGVfZW5jb2RlKCkgZm9yIHRoZSBtYXBwaW5nIGZyb20gY2FjaGUtbGV2ZWwgdG8NCj4g Pj4+PiArIFBQQVQNCj4gPj4+PiAqLw0KPiA+Pj4+ICsgICAgICAgX19hbGxvY19wcGF0X2VudHJ5 KHBwYXQsIFBQQVRfQ0FDSEVEX1BERV9JTkRFWCwgR0VOOF9QUEFUX1dCDQo+ID4+Pj4gKyB8DQo+ ID4+Pj4gR0VOOF9QUEFUX0xMQyk7DQo+ID4+Pj4gKyAgICAgICBfX2FsbG9jX3BwYXRfZW50cnko cHBhdCwgUFBBVF9ESVNQTEFZX0VMTENfSU5ERVgsDQo+ID4+Pj4gKyBHRU44X1BQQVRfV1QgfA0K PiA+Pj4+IEdFTjhfUFBBVF9MTENFTExDKTsNCj4gPj4+PiArICAgICAgIF9fYWxsb2NfcHBhdF9l bnRyeShwcGF0LCBQUEFUX1VOQ0FDSEVEX0lOREVYLCBHRU44X1BQQVRfVUMpOw0KPiA+Pj4+ICsg ICAgICAgX19hbGxvY19wcGF0X2VudHJ5KHBwYXQsIFBQQVRfQ0FDSEVEX0lOREVYLA0KPiA+Pj4+ ICsgR0VOOF9QUEFUX0xMQ0VMTEMgfA0KPiA+Pj4+IEdFTjhfUFBBVF9BR0UoMCkpOw0KPiA+Pj4+ ICAgIH0NCj4gPj4+PiAgICAgIC8qIFRoZSBHR1RUIGFuZCBQUEdUVCBuZWVkIGEgcHJpdmF0ZSBQ UEFUIHNldHVwIGluIG9yZGVyIHRvDQo+ID4+Pj4gaGFuZGxlIGNhY2hlYWJpbGl0eQ0KPiA+Pj4+ ICAgICAqIGJpdHMuIFdoZW4gdXNpbmcgYWR2YW5jZWQgY29udGV4dHMgZWFjaCBjb250ZXh0IHN0 b3JlcyBpdHMgb3duDQo+ID4+Pj4gUEFULCBidXQNCj4gPj4+PiAgICAgKiB3cml0aW5nIHRoaXMg ZGF0YSBzaG91bGRuJ3QgYmUgaGFybWZ1bCBldmVuIGluIHRob3NlIGNhc2VzLiAqLw0KPiA+Pj4+ IC1zdGF0aWMgdm9pZCBiZHdfc2V0dXBfcHJpdmF0ZV9wcGF0KHN0cnVjdCBkcm1faTkxNV9wcml2 YXRlDQo+ID4+Pj4gKmRldl9wcml2KQ0KPiA+Pj4+ICtzdGF0aWMgdm9pZCBiZHdfc2V0dXBfcHJp dmF0ZV9wcGF0KHN0cnVjdCBpbnRlbF9wcGF0ICpwcGF0KQ0KPiA+Pj4+ICAgIHsNCj4gPj4+PiAt ICAgICAgIHU2NCBwYXQ7DQo+ID4+Pj4gKyAgICAgICBwcGF0LT5tYXhfZW50cmllcyA9IDg7DQo+ ID4+Pj4gKyAgICAgICBwcGF0LT51cGRhdGVfaHcgPSBiZHdfcHJpdmF0ZV9wYXRfdXBkYXRlX2h3 Ow0KPiA+Pj4+ICsgICAgICAgcHBhdC0+bWF0Y2ggPSBiZHdfcHJpdmF0ZV9wYXRfbWF0Y2g7DQo+ ID4+Pj4gKyAgICAgICBwcGF0LT5jbGVhcl92YWx1ZSA9IEdFTjhfUFBBVF9XQiB8IEdFTjhfUFBB VF9MTENFTExDIHwNCj4gPj4+PiBHRU44X1BQQVRfQUdFKDMpOw0KPiA+Pj4+ICAgIC0gICAgIHBh dCA9IEdFTjhfUFBBVCgwLCBHRU44X1BQQVRfV0IgfCBHRU44X1BQQVRfTExDKSAgICAgfCAvKiBm b3INCj4gPj4+PiBub3JtYWwgb2JqZWN0cywgbm8gZUxMQyAqLw0KPiA+Pj4+IC0gICAgICAgICAg ICAgR0VOOF9QUEFUKDEsIEdFTjhfUFBBVF9XQyB8IEdFTjhfUFBBVF9MTENFTExDKSB8IC8qIGZv cg0KPiA+Pj4+IHNvbWV0aGluZyBwb2ludGluZyB0byBwdGVzPyAqLw0KPiA+Pj4+IC0gICAgICAg ICAgICAgR0VOOF9QUEFUKDIsIEdFTjhfUFBBVF9XVCB8IEdFTjhfUFBBVF9MTENFTExDKSB8IC8q IGZvcg0KPiA+Pj4+IHNjYW5vdXQgd2l0aCBlTExDICovDQo+ID4+Pj4gLSAgICAgICAgICAgICBH RU44X1BQQVQoMywgR0VOOF9QUEFUX1VDKSAgICAgICAgICAgICAgICAgICAgIHwgLyoNCj4gPj4+ PiBVbmNhY2hlZCBvYmplY3RzLCBtb3N0bHkgZm9yIHNjYW5vdXQgKi8NCj4gPj4+PiAtICAgICAg ICAgICAgIEdFTjhfUFBBVCg0LCBHRU44X1BQQVRfV0IgfCBHRU44X1BQQVRfTExDRUxMQyB8DQo+ ID4+Pj4gR0VOOF9QUEFUX0FHRSgwKSkgfA0KPiA+Pj4+IC0gICAgICAgICAgICAgR0VOOF9QUEFU KDUsIEdFTjhfUFBBVF9XQiB8IEdFTjhfUFBBVF9MTENFTExDIHwNCj4gPj4+PiBHRU44X1BQQVRf QUdFKDEpKSB8DQo+ID4+Pj4gLSAgICAgICAgICAgICBHRU44X1BQQVQoNiwgR0VOOF9QUEFUX1dC IHwgR0VOOF9QUEFUX0xMQ0VMTEMgfA0KPiA+Pj4+IEdFTjhfUFBBVF9BR0UoMikpIHwNCj4gPj4+ PiAtICAgICAgICAgICAgIEdFTjhfUFBBVCg3LCBHRU44X1BQQVRfV0IgfCBHRU44X1BQQVRfTExD RUxMQyB8DQo+ID4+Pj4gR0VOOF9QUEFUX0FHRSgzKSk7DQo+ID4+Pj4gLQ0KPiA+Pj4+IC0gICAg ICAgaWYgKCFVU0VTX1BQR1RUKGRldl9wcml2KSkNCj4gPj4+PiArICAgICAgIGlmICghVVNFU19Q UEdUVChwcGF0LT5pOTE1KSkgew0KPiA+Pj4+ICAgICAgICAgICAgICAgICAgLyogU3BlYzogIkZv ciBHR1RULCB0aGVyZSBpcyBOTyBwYXRfc2VsWzI6MF0gZnJvbQ0KPiA+Pj4+IHRoZSBlbnRyeSwN Cj4gPj4+PiAgICAgICAgICAgICAgICAgICAqIHNvIFJUTCB3aWxsIGFsd2F5cyB1c2UgdGhlIHZh bHVlIGNvcnJlc3BvbmRpbmcgdG8NCj4gPj4+PiAgICAgICAgICAgICAgICAgICAqIHBhdF9zZWwg PSAwMDAiLg0KPiA+Pj4+IEBAIC0yODY0LDE3ICszMDIzLDI2IEBAIHN0YXRpYyB2b2lkIGJkd19z ZXR1cF9wcml2YXRlX3BwYXQoc3RydWN0DQo+ID4+Pj4gZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3By aXYpDQo+ID4+Pj4gICAgICAgICAgICAgICAgICAgKiBTbyB3ZSBjYW4gc3RpbGwgaG9sZCBvbnRv IGFsbCBvdXIgYXNzdW1wdGlvbnMgd3J0IGNwdQ0KPiA+Pj4+ICAgICAgICAgICAgICAgICAgICog Y2xmbHVzaGluZyBvbiBMTEMgbWFjaGluZXMuDQo+ID4+Pj4gICAgICAgICAgICAgICAgICAgKi8N Cj4gPj4+PiAtICAgICAgICAgICAgICAgcGF0ID0gR0VOOF9QUEFUKDAsIEdFTjhfUFBBVF9VQyk7 DQo+ID4+Pj4gKyAgICAgICAgICAgICAgIF9fYWxsb2NfcHBhdF9lbnRyeShwcGF0LCBQUEFUX0NB Q0hFRF9QREVfSU5ERVgsDQo+ID4+Pj4gR0VOOF9QUEFUX1VDKTsNCj4gPj4+PiArICAgICAgICAg ICAgICAgcmV0dXJuOw0KPiA+Pj4+ICsgICAgICAgfQ0KPiA+Pj4+ICAgIC0gICAgIC8qIFhYWDog c3BlYyBkZWZpbmVzIHRoaXMgYXMgMiBkaXN0aW5jdCByZWdpc3RlcnMuIEl0J3MgdW5jbGVhcg0K PiA+Pj4+IGlmIGEgNjRiDQo+ID4+Pj4gLSAgICAgICAgKiB3cml0ZSB3b3VsZCB3b3JrLiAqLw0K PiA+Pj4+IC0gICAgICAgSTkxNV9XUklURShHRU44X1BSSVZBVEVfUEFUX0xPLCBwYXQpOw0KPiA+ Pj4+IC0gICAgICAgSTkxNV9XUklURShHRU44X1BSSVZBVEVfUEFUX0hJLCBwYXQgPj4gMzIpOw0K PiA+Pj4+ICsgICAgICAgLyogU2VlIGdlbjhfcHRlX2VuY29kZSgpIGZvciB0aGUgbWFwcGluZyBm cm9tIGNhY2hlLWxldmVsIHRvDQo+ID4+Pj4gKyBQUEFUDQo+ID4+Pj4gKi8NCj4gPj4+PiArICAg ICAgIC8qIGZvciBub3JtYWwgb2JqZWN0cywgbm8gZUxMQyAqLw0KPiA+Pj4+ICsgICAgICAgX19h bGxvY19wcGF0X2VudHJ5KHBwYXQsIFBQQVRfQ0FDSEVEX1BERV9JTkRFWCwgR0VOOF9QUEFUX1dC DQo+ID4+Pj4gKyB8DQo+ID4+Pj4gR0VOOF9QUEFUX0xMQyk7DQo+ID4+Pj4gKyAgICAgICAvKiBm b3Igc2Nhbm91dCB3aXRoIGVMTEMgKi8NCj4gPj4+PiArICAgICAgIF9fYWxsb2NfcHBhdF9lbnRy eShwcGF0LCBQUEFUX0RJU1BMQVlfRUxMQ19JTkRFWCwNCj4gPj4+PiArIEdFTjhfUFBBVF9XVCB8 DQo+ID4+Pj4gR0VOOF9QUEFUX0xMQ0VMTEMpOw0KPiA+Pj4+ICsgICAgICAgLyogVW5jYWNoZWQg b2JqZWN0cywgbW9zdGx5IGZvciBzY2Fub3V0ICovDQo+ID4+Pj4gKyAgICAgICBfX2FsbG9jX3Bw YXRfZW50cnkocHBhdCwgUFBBVF9VTkNBQ0hFRF9JTkRFWCwgR0VOOF9QUEFUX1VDKTsNCj4gPj4+ PiArICAgICAgIF9fYWxsb2NfcHBhdF9lbnRyeShwcGF0LCBQUEFUX0NBQ0hFRF9JTkRFWCwgR0VO OF9QUEFUX1dCIHwNCj4gPj4+PiBHRU44X1BQQVRfTExDRUxMQyB8IEdFTjhfUFBBVF9BR0UoMCkp Ow0KPiA+Pj4+ICAgIH0NCj4gPj4+PiAgICAtc3RhdGljIHZvaWQgY2h2X3NldHVwX3ByaXZhdGVf cHBhdChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZQ0KPiA+Pj4+ICpkZXZfcHJpdikNCj4gPj4+PiAr c3RhdGljIHZvaWQgY2h2X3NldHVwX3ByaXZhdGVfcHBhdChzdHJ1Y3QgaW50ZWxfcHBhdCAqcHBh dCkNCj4gPj4+PiAgICB7DQo+ID4+Pj4gLSAgICAgICB1NjQgcGF0Ow0KPiA+Pj4+ICsgICAgICAg cHBhdC0+bWF4X2VudHJpZXMgPSA4Ow0KPiA+Pj4+ICsgICAgICAgcHBhdC0+dXBkYXRlX2h3ID0g YmR3X3ByaXZhdGVfcGF0X3VwZGF0ZV9odzsNCj4gPj4+PiArICAgICAgIHBwYXQtPm1hdGNoID0g Y2h2X3ByaXZhdGVfcGF0X21hdGNoOw0KPiA+Pj4+ICsgICAgICAgcHBhdC0+Y2xlYXJfdmFsdWUg PSBDSFZfUFBBVF9TTk9PUDsNCj4gPj4+PiAgICAgICAgICAvKg0KPiA+Pj4+ICAgICAgICAgICAq IE1hcCBXQiBvbiBCRFcgdG8gc25vb3BlZCBvbiBDSFYuDQo+ID4+Pj4gQEAgLTI4OTQsMTcgKzMw NjIsMTIgQEAgc3RhdGljIHZvaWQgY2h2X3NldHVwX3ByaXZhdGVfcHBhdChzdHJ1Y3QNCj4gPj4+ PiBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikNCj4gPj4+PiAgICAgICAgICAgKiBXaGljaCBt ZWFucyB3ZSBtdXN0IHNldCB0aGUgc25vb3AgYml0IGluIFBBVCBlbnRyeSAwDQo+ID4+Pj4gICAg ICAgICAgICogaW4gb3JkZXIgdG8ga2VlcCB0aGUgZ2xvYmFsIHN0YXR1cyBwYWdlIHdvcmtpbmcu DQo+ID4+Pj4gICAgICAgICAgICovDQo+ID4+Pj4gLSAgICAgICBwYXQgPSBHRU44X1BQQVQoMCwg Q0hWX1BQQVRfU05PT1ApIHwNCj4gPj4+PiAtICAgICAgICAgICAgIEdFTjhfUFBBVCgxLCAwKSB8 DQo+ID4+Pj4gLSAgICAgICAgICAgICBHRU44X1BQQVQoMiwgMCkgfA0KPiA+Pj4+IC0gICAgICAg ICAgICAgR0VOOF9QUEFUKDMsIDApIHwNCj4gPj4+PiAtICAgICAgICAgICAgIEdFTjhfUFBBVCg0 LCBDSFZfUFBBVF9TTk9PUCkgfA0KPiA+Pj4+IC0gICAgICAgICAgICAgR0VOOF9QUEFUKDUsIENI Vl9QUEFUX1NOT09QKSB8DQo+ID4+Pj4gLSAgICAgICAgICAgICBHRU44X1BQQVQoNiwgQ0hWX1BQ QVRfU05PT1ApIHwNCj4gPj4+PiAtICAgICAgICAgICAgIEdFTjhfUFBBVCg3LCBDSFZfUFBBVF9T Tk9PUCk7DQo+ID4+Pj4gICAgLSAgICAgSTkxNV9XUklURShHRU44X1BSSVZBVEVfUEFUX0xPLCBw YXQpOw0KPiA+Pj4+IC0gICAgICAgSTkxNV9XUklURShHRU44X1BSSVZBVEVfUEFUX0hJLCBwYXQg Pj4gMzIpOw0KPiA+Pj4+ICsgICAgICAgLyogU2VlIGdlbjhfcHRlX2VuY29kZSgpIGZvciB0aGUg bWFwcGluZyBmcm9tIGNhY2hlLWxldmVsIHRvDQo+ID4+Pj4gKyBQUEFUDQo+ID4+Pj4gKi8NCj4g Pj4+PiArICAgICAgIF9fYWxsb2NfcHBhdF9lbnRyeShwcGF0LCBQUEFUX0NBQ0hFRF9QREVfSU5E RVgsIENIVl9QUEFUX1NOT09QKTsNCj4gPj4+PiArICAgICAgIF9fYWxsb2NfcHBhdF9lbnRyeShw cGF0LCBQUEFUX0RJU1BMQVlfRUxMQ19JTkRFWCwgMCk7DQo+ID4+Pj4gKyAgICAgICBfX2FsbG9j X3BwYXRfZW50cnkocHBhdCwgUFBBVF9VTkNBQ0hFRF9JTkRFWCwgMCk7DQo+ID4+Pj4gKyAgICAg ICBfX2FsbG9jX3BwYXRfZW50cnkocHBhdCwgUFBBVF9DQUNIRURfSU5ERVgsIENIVl9QUEFUX1NO T09QKTsNCj4gPj4+PiAgICB9DQo+ID4+Pj4gICAgICBzdGF0aWMgdm9pZCBnZW42X2dtY2hfcmVt b3ZlKHN0cnVjdCBpOTE1X2FkZHJlc3Nfc3BhY2UgKnZtKSBAQA0KPiA+Pj4+IC0yOTE3LDEyICsz MDgwLDI3IEBAIHN0YXRpYyB2b2lkIGdlbjZfZ21jaF9yZW1vdmUoc3RydWN0DQo+ID4+Pj4gaTkx NV9hZGRyZXNzX3NwYWNlICp2bSkNCj4gPj4+PiAgICAgIHN0YXRpYyB2b2lkIHNldHVwX3ByaXZh dGVfcGF0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikNCj4gPj4+PiAgICB7DQo+ ID4+Pj4gKyAgICAgICBzdHJ1Y3QgaW50ZWxfcHBhdCAqcHBhdCA9ICZkZXZfcHJpdi0+cHBhdDsN Cj4gPj4+PiArICAgICAgIGludCBpOw0KPiA+Pj4+ICsNCj4gPj4+PiArICAgICAgIHBwYXQtPmk5 MTUgPSBkZXZfcHJpdjsNCj4gPj4+PiArDQo+ID4+Pj4gICAgICAgICAgaWYgKElOVEVMX0dFTihk ZXZfcHJpdikgPj0gMTApDQo+ID4+Pj4gLSAgICAgICAgICAgICAgIGNubF9zZXR1cF9wcml2YXRl X3BwYXQoZGV2X3ByaXYpOw0KPiA+Pj4+ICsgICAgICAgICAgICAgICBjbmxfc2V0dXBfcHJpdmF0 ZV9wcGF0KHBwYXQpOw0KPiA+Pj4+ICAgICAgICAgIGVsc2UgaWYgKElTX0NIRVJSWVZJRVcoZGV2 X3ByaXYpIHx8IElTX0dFTjlfTFAoZGV2X3ByaXYpKQ0KPiA+Pj4+IC0gICAgICAgICAgICAgICBj aHZfc2V0dXBfcHJpdmF0ZV9wcGF0KGRldl9wcml2KTsNCj4gPj4+PiArICAgICAgICAgICAgICAg Y2h2X3NldHVwX3ByaXZhdGVfcHBhdChwcGF0KTsNCj4gPj4+PiAgICAgICAgICBlbHNlDQo+ID4+ Pj4gLSAgICAgICAgICAgICAgIGJkd19zZXR1cF9wcml2YXRlX3BwYXQoZGV2X3ByaXYpOw0KPiA+ Pj4+ICsgICAgICAgICAgICAgICBiZHdfc2V0dXBfcHJpdmF0ZV9wcGF0KHBwYXQpOw0KPiA+Pj4+ ICsNCj4gPj4+PiArICAgICAgIEdFTV9CVUdfT04ocHBhdC0+bWF4X2VudHJpZXMgPiBJTlRFTF9N QVhfUFBBVF9FTlRSSUVTKTsNCj4gPj4+PiArDQo+ID4+Pj4gKyAgICAgICBmb3JfZWFjaF9jbGVh cl9iaXQoaSwgcHBhdC0+dXNlZCwgcHBhdC0+bWF4X2VudHJpZXMpIHsNCj4gPj4+PiArICAgICAg ICAgICAgICAgcHBhdC0+ZW50cmllc1tpXS52YWx1ZSA9IHBwYXQtPmNsZWFyX3ZhbHVlOw0KPiA+ Pj4+ICsgICAgICAgICAgICAgICBwcGF0LT5lbnRyaWVzW2ldLnBwYXQgPSBwcGF0Ow0KPiA+Pj4+ ICsgICAgICAgICAgICAgICBzZXRfYml0KGksIHBwYXQtPmRpcnR5KTsNCj4gPj4+PiArICAgICAg IH0NCj4gPj4+PiArDQo+ID4+Pj4gKyAgICAgICBwcGF0LT51cGRhdGVfaHcoZGV2X3ByaXYpOw0K PiA+Pj4+ICAgIH0NCj4gPj4+PiAgICAgIHN0YXRpYyBpbnQgZ2VuOF9nbWNoX3Byb2JlKHN0cnVj dCBpOTE1X2dndHQgKmdndHQpIEBAIC0zMjM2LDEzDQo+ID4+Pj4gKzM0MTQsMTAgQEAgdm9pZCBp OTE1X2dlbV9yZXN0b3JlX2d0dF9tYXBwaW5ncyhzdHJ1Y3QNCj4gPj4+PiBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdikNCj4gPj4+PiAgICAgICAgICBnZ3R0LT5iYXNlLmNsb3NlZCA9IGZhbHNl Ow0KPiA+Pj4+ICAgICAgICAgIGlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDgpIHsNCj4gPj4+ PiAtICAgICAgICAgICAgICAgaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gMTApDQo+ID4+Pj4g LSAgICAgICAgICAgICAgICAgICAgICAgY25sX3NldHVwX3ByaXZhdGVfcHBhdChkZXZfcHJpdik7 DQo+ID4+Pj4gLSAgICAgICAgICAgICAgIGVsc2UgaWYgKElTX0NIRVJSWVZJRVcoZGV2X3ByaXYp IHx8IElTX0dFTjlfTFAoZGV2X3ByaXYpKQ0KPiA+Pj4+IC0gICAgICAgICAgICAgICAgICAgICAg IGNodl9zZXR1cF9wcml2YXRlX3BwYXQoZGV2X3ByaXYpOw0KPiA+Pj4+IC0gICAgICAgICAgICAg ICBlbHNlDQo+ID4+Pj4gLSAgICAgICAgICAgICAgICAgICAgICAgYmR3X3NldHVwX3ByaXZhdGVf cHBhdChkZXZfcHJpdik7DQo+ID4+Pj4gKyAgICAgICAgICAgICAgIHN0cnVjdCBpbnRlbF9wcGF0 ICpwcGF0ID0gJmRldl9wcml2LT5wcGF0Ow0KPiA+Pj4+ICAgICsgICAgICAgICAgICAgYml0bWFw X3NldChwcGF0LT5kaXJ0eSwgMCwgcHBhdC0+bWF4X2VudHJpZXMpOw0KPiA+Pj4+ICsgICAgICAg ICAgICAgICBkZXZfcHJpdi0+cHBhdC51cGRhdGVfaHcoZGV2X3ByaXYpOw0KPiA+Pj4+ICAgICAg ICAgICAgICAgICAgcmV0dXJuOw0KPiA+Pj4+ICAgICAgICAgIH0NCj4gPj4+PiAgICBkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZ3R0LmgNCj4gPj4+PiBiL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2d0dC5oDQo+ID4+Pj4gaW5kZXggYjRlM2FhNy4uZTEw Y2E4OSAxMDA2NDQNCj4gPj4+PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9n dHQuaA0KPiA+Pj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2d0dC5oDQo+ ID4+Pj4gQEAgLTE0Myw2ICsxNDMsMTEgQEAgdHlwZWRlZiB1NjQgZ2VuOF9wcGd0dF9wbWw0ZV90 Ow0KPiA+Pj4+ICAgICNkZWZpbmUgR0VOOF9QUEFUX0VMTENfT1ZFUlJJREUgICAgICAgICAgICAg ICAoMDw8MikNCj4gPj4+PiAgICAjZGVmaW5lIEdFTjhfUFBBVChpLCB4KSAgICAgICAgICAgICAg ICAgICAgICAgKCh1NjQpKHgpIDw8ICgoaSkgKiA4KSkNCj4gPj4+PiAgICArI2RlZmluZSBHRU44 X1BQQVRfR0VUX0NBKHgpICgoeCkgJiAzKQ0KPiA+Pj4+ICsjZGVmaW5lIEdFTjhfUFBBVF9HRVRf VEMoeCkgKCh4KSAmICgzIDw8IDIpKSAjZGVmaW5lDQo+ID4+Pj4gK0dFTjhfUFBBVF9HRVRfQUdF KHgpICgoeCkgJiAoMyA8PCA0KSkgI2RlZmluZSBDSFZfUFBBVF9HRVRfU05PT1AoeCkNCj4gPj4+ PiArKCh4KSAmICgxIDw8IDYpKQ0KPiA+Pj4+ICsNCj4gPj4+PiAgICBzdHJ1Y3Qgc2dfdGFibGU7 DQo+ID4+Pj4gICAgICBzdHJ1Y3QgaW50ZWxfcm90YXRpb25faW5mbyB7DQo+ID4+Pj4gQEAgLTUz Niw2ICs1NDEsMzcgQEAgaTkxNV92bV90b19nZ3R0KHN0cnVjdCBpOTE1X2FkZHJlc3Nfc3BhY2Ug KnZtKQ0KPiA+Pj4+ICAgICAgICAgIHJldHVybiBjb250YWluZXJfb2Yodm0sIHN0cnVjdCBpOTE1 X2dndHQsIGJhc2UpOw0KPiA+Pj4+ICAgIH0NCj4gPj4+PiAgICArI2RlZmluZSBJTlRFTF9NQVhf UFBBVF9FTlRSSUVTIDgNCj4gPj4+PiArI2RlZmluZSBJTlRFTF9QUEFUX1BFUkZFQ1RfTUFUQ0gg KH4wVSkNCj4gPj4+PiArDQo+ID4+Pj4gK3N0cnVjdCBpbnRlbF9wcGF0Ow0KPiA+Pj4+ICsNCj4g Pj4+PiArc3RydWN0IGludGVsX3BwYXRfZW50cnkgew0KPiA+Pj4+ICsgICAgICAgc3RydWN0IGlu dGVsX3BwYXQgKnBwYXQ7DQo+ID4+Pj4gKyAgICAgICBzdHJ1Y3Qga3JlZiByZWY7DQo+ID4+Pj4g KyAgICAgICB1OCB2YWx1ZTsNCj4gPj4+PiArfTsNCj4gPj4+PiArDQo+ID4+Pj4gK3N0cnVjdCBp bnRlbF9wcGF0IHsNCj4gPj4+PiArICAgICAgIHN0cnVjdCBpbnRlbF9wcGF0X2VudHJ5IGVudHJp ZXNbSU5URUxfTUFYX1BQQVRfRU5UUklFU107DQo+ID4+Pj4gKyAgICAgICBERUNMQVJFX0JJVE1B UCh1c2VkLCBJTlRFTF9NQVhfUFBBVF9FTlRSSUVTKTsNCj4gPj4+PiArICAgICAgIERFQ0xBUkVf QklUTUFQKGRpcnR5LCBJTlRFTF9NQVhfUFBBVF9FTlRSSUVTKTsNCj4gPj4+PiArICAgICAgIHVu c2lnbmVkIGludCBtYXhfZW50cmllczsNCj4gPj4+PiArICAgICAgIHU4IGNsZWFyX3ZhbHVlOw0K PiA+Pj4+ICsgICAgICAgLyoNCj4gPj4+PiArICAgICAgICAqIFJldHVybiBhIHNjb3JlIHRvIHNo b3cgaG93IHR3byBQUEFUIHZhbHVlcyBtYXRjaCwNCj4gPj4+PiArICAgICAgICAqIGEgSU5URUxf UFBBVF9QRVJGRUNUX01BVENIIGluZGljYXRlcyBhIHBlcmZlY3QgbWF0Y2gNCj4gPj4+PiArICAg ICAgICAqLw0KPiA+Pj4+ICsgICAgICAgdW5zaWduZWQgaW50ICgqbWF0Y2gpKHU4IHNyYywgdTgg ZHN0KTsNCj4gPj4+PiArICAgICAgIHZvaWQgKCp1cGRhdGVfaHcpKHN0cnVjdCBkcm1faTkxNV9w cml2YXRlICppOTE1KTsNCj4gPj4+PiArDQo+ID4+Pj4gKyAgICAgICBzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqaTkxNTsgfTsNCj4gPj4+PiArDQo+ID4+Pj4gK2NvbnN0IHN0cnVjdCBpbnRlbF9w cGF0X2VudHJ5ICoNCj4gPj4+PiAraW50ZWxfcHBhdF9nZXQoc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmk5MTUsIHU4IHZhbHVlKTsgdm9pZA0KPiA+Pj4+ICtpbnRlbF9wcGF0X3B1dChjb25zdCBz dHJ1Y3QgaW50ZWxfcHBhdF9lbnRyeSAqZW50cnkpOw0KPiA+Pj4+ICsNCj4gPj4+PiAgICBpbnQg aTkxNV9nZW1faW5pdF9hbGlhc2luZ19wcGd0dChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkx NSk7DQo+ID4+Pj4gICAgdm9pZCBpOTE1X2dlbV9maW5pX2FsaWFzaW5nX3BwZ3R0KHN0cnVjdCBk cm1faTkxNV9wcml2YXRlICppOTE1KTsNCj4gPj4+Pg0KPiA+Pj4NCj4gPj4gX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18NCj4gPj4gSW50ZWwtZ2Z4IG1haWxp bmcgbGlzdA0KPiA+PiBJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnDQo+ID4+IGh0dHBz Oi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4DQo+ID4N Cj4gPg0KPiA+IC0tDQo+ID4gUm9kcmlnbyBWaXZpDQo+ID4gQmxvZzogaHR0cDovL2Jsb2cudml2 aS5lbmcuYnINCj4gDQoNCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9w Lm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVs LWdmeAo=