From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Zanoni, Paulo R" Subject: Re: [PATCH] drm/i915/skl: Eliminate usage of pipe_wm_parameters from SKL-style WM (v4) Date: Mon, 19 Oct 2015 17:17:12 +0000 Message-ID: <1445275031.2848.3.camel@intel.com> References: <1444948971-2623-1-git-send-email-matthew.d.roper@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by gabe.freedesktop.org (Postfix) with ESMTP id 7EAB86E023 for ; Mon, 19 Oct 2015 10:17:14 -0700 (PDT) In-Reply-To: <1444948971-2623-1-git-send-email-matthew.d.roper@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: "Roper, Matthew D" , "intel-gfx@lists.freedesktop.org" List-Id: intel-gfx@lists.freedesktop.org RW0gUXVpLCAyMDE1LTEwLTE1IMOgcyAxNTo0MiAtMDcwMCwgTWF0dCBSb3BlciBlc2NyZXZldToN Cj4gSnVzdCBwdWxsIHRoZSBpbmZvIG91dCBvZiB0aGUgc3RhdGUgc3RydWN0dXJlcyByYXRoZXIg dGhhbiBzdGFnaW5nDQo+IGl0IGluIGFuIGFkZGl0aW9uYWwgc2V0IG9mIHN0cnVjdHVyZXMuwqDC oFRvIG1ha2UgdGhpcyBtb3JlDQo+IHN0cmFpZ2h0Zm9yd2FyZCwgd2UgY2hhbmdlIHRoZSBzaWdu YXR1cmUgb2Ygc2V2ZXJhbCBpbnRlcm5hbCBXTQ0KPiBmdW5jdGlvbnMgdG8gdGFrZSB0aGUgY3J0 YyBzdGF0ZSBhcyBhIHBhcmFtZXRlci4NCj4gDQo+IHYyOg0KPiDCoC0gRG9uJ3QgZm9yZ2V0IHRv IHNraXAgY3Vyc29yIHBsYW5lcyBvbiBhIGxvb3AgaW4gdGhlIEREQiBhbGxvY2F0aW9uDQo+IMKg wqDCoGZ1bmN0aW9uIHRvIG1hdGNoIG9yaWdpbmFsIGJlaGF2aW9yLsKgwqAoQW5kZXIpDQo+IMKg LSBDaGFuZ2UgYSB1c2Ugb2YgaW50ZWxfY3J0Yy0+YWN0aXZlIHRvIGNzdGF0ZS0+YWN0aXZlLsKg wqBUaGV5IHNob3VsZA0KPiDCoMKgwqBiZSBpZGVudGljYWwsIGJ1dCBpdCdzIGJldHRlciB0byBi ZSBjb25zaXN0ZW50LsKgwqAoQW5kZXIpDQo+IMKgLSBSZXdvcmsgbW9yZSBmdW5jdGlvbiBzaWdu YXR1cmVzIHRvIHBhc3Mgc3RhdGVzIHJhdGhlciB0aGFuIGNydGMNCj4gZm9yDQo+IMKgwqDCoGNv bnNpc3RlbmN5LiAoQW5kZXIpDQo+IA0KPiB2MzoNCj4gwqAgLSBBZGQgbWlzc2luZyAiKyAxIiB0 byBza2xfd21fcGxhbmVfaWQoKSdzICdvdmVybGF5JyBjYXNlLg0KPiAoTWFhcnRlbikNCj4gwqAg LSBQYWNrZWQgZm9ybWF0cyBzaG91bGQgcGFzcyAnMCcgdG8gZHJtX2Zvcm1hdF9wbGFuZV9jcHAo KSwgbm90IDEuDQo+IMKgwqDCoMKgKE1hYXJ0ZW4pDQo+IMKgIC0gRHJvcCB1bndhbnRlZCBXQVJO X09OKCkgZm9yIGRpc2FibGVkIHBsYW5lcyB3aGVuIGNhbGN1bGF0aW5nIGRhdGENCj4gwqDCoMKg wqByYXRlIGZvciBTS0wuwqDCoChNYWFydGVuKQ0KPiANCj4gdjQ6DQo+IMKgLSBEb24ndCBpbmNs dWRlIGN1cnNvciBwbGFuZSBpbiB0b3RhbCByZWxhdGl2ZSBkYXRhIHJhdGUNCj4gY2FsY3VsYXRp b247DQo+IMKgwqDCoHdlJ3ZlIGFscmVhZHkgaGFuZGxlZCB0aGUgY3Vyc29yIGFsbG9jYXRpb24g ZWFybGllci4NCj4gwqAtIEZpeCAnYnl0ZXNfcGVyX3BpeGVsJyBjYWxjdWxhdGlvbiBicmFpbmRh bWFnZS7CoMKgU29tZWhvdyBJDQo+IGhhcmRjb2RlZA0KPiDCoMKgwqB0aGUgTlYxMiBmb3JtYXQg YXMgYSBwYXJhbWV0ZXIgcmF0aGVyIHRoYW4gdGhlIGFjdHVhbA0KPiDCoMKgwqBmYi0+cGl4ZWxf Zm9ybWF0LCBhbmQgZXZlbiB0aGVuIHN0aWxsIG1hbmFnZWQgdG8gZ2V0IHRoZSBmb3JtYXQNCj4g cGxhbmUNCj4gwqDCoMKgd3JvbmcuwqDCoChWaWxsZSkNCj4gwqAtIFVzZSBwbGFuZS0+c3RhdGUt PmZiIHJhdGhlciB0aGFuIHBsYW5lLT5mYiBpbg0KPiDCoMKgwqBza2xfYWxsb2NhdGVfcGlwZV9k ZGIoKTsgdGhlIHBsYW5lLT5mYiBwb2ludGVyIGlzbid0IHVwZGF0ZWQgdW50aWwNCj4gwqDCoMKg YWZ0ZXIgd2UndmUgZG9uZSBvdXIgd2F0ZXJtYXJrIHJlY2FsY3VsYXRpb24sIHNvIGl0IGhhcyBz dGFsZQ0KPiDCoMKgwqB2YWx1ZXMuwqDCoChCb2IgUGFhdXdlKQ0KPiANCj4gU2lnbmVkLW9mZi1i eTogTWF0dCBSb3BlciA8bWF0dGhldy5kLnJvcGVyQGludGVsLmNvbT4NCj4gUmV2aWV3ZWQtYnko djMpOiBNYWFydGVuIExhbmtob3JzdCA8bWFhcnRlbi5sYW5raG9yc3RAbGludXguaW50ZWwuY29t DQo+ID4NCj4gQ2M6IFBhYXV3ZSwgQm9iIEogPGJvYi5qLnBhYXV3ZUBpbnRlbC5jb20+DQo+IENj OiBWaWxsZSBTeXJqw6Rsw6QgPHZpbGxlLnN5cmphbGFAbGludXguaW50ZWwuY29tPg0KPiBDYzog UGF1bG8gWmFub25pIDxwYXVsby5yLnphbm9uaUBpbnRlbC5jb20+DQo+IFJlZmVyZW5jZXM6IGh0 dHA6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvYXJjaGl2ZXMvaW50ZWwtZ2Z4LzIwMTUtU2VwdA0K PiBlbWJlci8wNzcwNjAuaHRtbA0KPiBSZWZlcmVuY2VzOiBodHRwOi8vbGlzdHMuZnJlZWRlc2t0 b3Aub3JnL2FyY2hpdmVzL2ludGVsLWdmeC8yMDE1LU9jdG8NCj4gYmVyLzA3NzcyMS5odG1sDQo+ IC0tLQ0KPiBQYXVsbywgd291bGQgeW91IG1pbmQgdHJ5aW5nIHRoaXMgcGF0Y2ggb3V0IHdoZW4g eW91IGhhdmUgc29tZSBmcmVlDQo+IHRpbWUgYW5kDQo+IHNlZSB3aGV0aGVyIHlvdSBzdGlsbCBl eHBlcmllbmNlIHdhdGVybWFyayBwcm9ibGVtcz/CoMKgVGhpcyBpcyB0aGUNCj4gcGF0Y2ggdGhh dA0KPiB5b3UgYmlzZWN0ZWQgeW91ciBwcm9ibGVtcyB0byBhbmQgdGhlcmUgd2VyZSBhdCBsZWFz dCB0aHJlZSBidWdzIGluDQo+IHRoZSB2ZXJzaW9uDQo+IG9mIHRoaXMgcGF0Y2ggdGhhdCB3YXMg bWVyZ2VkIGJlZm9yZTsgSSdtIGhvcGluZyB0aGF0IHdpdGggdGhlc2UNCj4gdGhyZWUgYnVnZml4 ZXMNCj4geW91ciBwcm9ibGVtcyB3aWxsIGJlIGdvbmUuDQoNCkp1c3QgdGVzdGVkIHRoaXMgcGF0 Y2ggb24gdG9wIG9mIHRvZGF5J3MgLW5pZ2h0bHkgYW5kIEZCQyBzdGlsbCB3b3Jrcw0KYWZ0ZXIg aXQuDQoNClNtb2tlLXRlc3RlZC1ieTogUGF1bG8gWmFub25pIDxwYXVsby5yLnphbm9uaUBpbnRl bC5jb20+IChTS0wpDQoNClRoYW5rcywNClBhdWxvDQoNCj4gDQo+IMKgZHJpdmVycy9ncHUvZHJt L2k5MTUvaW50ZWxfcG0uYyB8IDMyNyArKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0NCj4g LS0tLS0tLS0tLQ0KPiDCoDEgZmlsZSBjaGFuZ2VkLCAxNTIgaW5zZXJ0aW9ucygrKSwgMTc1IGRl bGV0aW9ucygtKQ0KPiANCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVs X3BtLmMNCj4gYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9wbS5jDQo+IGluZGV4IDlkZGEz ZWEuLmRmMjJiOWMgMTAwNjQ0DQo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3Bt LmMNCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcG0uYw0KPiBAQCAtMTcwOCwx MyArMTcwOCw2IEBAIHN0YXRpYyB1aW50MzJfdCBpbGtfd21fZmJjKHVpbnQzMl90IHByaV92YWws DQo+IHVpbnQzMl90IGhvcml6X3BpeGVscywNCj4gwqAJcmV0dXJuIERJVl9ST1VORF9VUChwcmlf dmFsICogNjQsIGhvcml6X3BpeGVscyAqDQo+IGJ5dGVzX3Blcl9waXhlbCkgKyAyOw0KPiDCoH0N Cj4gwqANCj4gLXN0cnVjdCBza2xfcGlwZV93bV9wYXJhbWV0ZXJzIHsNCj4gLQlib29sIGFjdGl2 ZTsNCj4gLQl1aW50MzJfdCBwaXBlX2h0b3RhbDsNCj4gLQl1aW50MzJfdCBwaXhlbF9yYXRlOyAv KiBpbiBLSHogKi8NCj4gLQlzdHJ1Y3QgaW50ZWxfcGxhbmVfd21fcGFyYW1ldGVycyBwbGFuZVtJ OTE1X01BWF9QTEFORVNdOw0KPiAtfTsNCj4gLQ0KPiDCoHN0cnVjdCBpbGtfd21fbWF4aW11bXMg ew0KPiDCoAl1aW50MTZfdCBwcmk7DQo+IMKgCXVpbnQxNl90IHNwcjsNCj4gQEAgLTI3NTUsMTgg KzI3NDgsNDAgQEAgc3RhdGljIGJvb2wgaWxrX2Rpc2FibGVfbHBfd20oc3RydWN0DQo+IGRybV9k ZXZpY2UgKmRldikNCj4gwqAjZGVmaW5lIFNLTF9EREJfU0laRQkJODk2CS8qIGluIGJsb2NrcyAq Lw0KPiDCoCNkZWZpbmUgQlhUX0REQl9TSVpFCQk1MTINCj4gwqANCj4gKy8qDQo+ICsgKiBSZXR1 cm4gdGhlIGluZGV4IG9mIGEgcGxhbmUgaW4gdGhlIFNLTCBEREIgYW5kIHdtIHJlc3VsdA0KPiBh cnJheXMuwqDCoFByaW1hcnkNCj4gKyAqIHBsYW5lIGlzIGFsd2F5cyBpbiBzbG90IDAsIGN1cnNv ciBpcyBhbHdheXMgaW4gc2xvdA0KPiBJOTE1X01BWF9QTEFORVMtMSwgYW5kDQo+ICsgKiBvdGhl ciB1bml2ZXJzYWwgcGxhbmVzIGFyZSBpbiBpbmRpY2VzIDEuLm4uwqDCoE5vdGUgdGhhdCB0aGlz IG1heQ0KPiBsZWF2ZSB1bnVzZWQNCj4gKyAqIGluZGljZXMgYmV0d2VlbiB0aGUgdG9wICJzcHJp dGUiIHBsYW5lIGFuZCB0aGUgY3Vyc29yLg0KPiArICovDQo+ICtzdGF0aWMgaW50DQo+ICtza2xf d21fcGxhbmVfaWQoY29uc3Qgc3RydWN0IGludGVsX3BsYW5lICpwbGFuZSkNCj4gK3sNCj4gKwlz d2l0Y2ggKHBsYW5lLT5iYXNlLnR5cGUpIHsNCj4gKwljYXNlIERSTV9QTEFORV9UWVBFX1BSSU1B Ulk6DQo+ICsJCXJldHVybiAwOw0KPiArCWNhc2UgRFJNX1BMQU5FX1RZUEVfQ1VSU09SOg0KPiAr CQlyZXR1cm4gUExBTkVfQ1VSU09SOw0KPiArCWNhc2UgRFJNX1BMQU5FX1RZUEVfT1ZFUkxBWToN Cj4gKwkJcmV0dXJuIHBsYW5lLT5wbGFuZSArIDE7DQo+ICsJZGVmYXVsdDoNCj4gKwkJTUlTU0lO R19DQVNFKHBsYW5lLT5iYXNlLnR5cGUpOw0KPiArCQlyZXR1cm4gcGxhbmUtPnBsYW5lOw0KPiAr CX0NCj4gK30NCj4gKw0KPiDCoHN0YXRpYyB2b2lkDQo+IMKgc2tsX2RkYl9nZXRfcGlwZV9hbGxv Y2F0aW9uX2xpbWl0cyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LA0KPiAtCQkJCcKgwqDCoHN0cnVj dCBkcm1fY3J0YyAqZm9yX2NydGMsDQo+ICsJCQkJwqDCoMKgY29uc3Qgc3RydWN0IGludGVsX2Ny dGNfc3RhdGUNCj4gKmNzdGF0ZSwNCj4gwqAJCQkJwqDCoMKgY29uc3Qgc3RydWN0IGludGVsX3dt X2NvbmZpZw0KPiAqY29uZmlnLA0KPiAtCQkJCcKgwqDCoGNvbnN0IHN0cnVjdA0KPiBza2xfcGlw ZV93bV9wYXJhbWV0ZXJzICpwYXJhbXMsDQo+IMKgCQkJCcKgwqDCoHN0cnVjdCBza2xfZGRiX2Vu dHJ5ICphbGxvYyAvKg0KPiBvdXQgKi8pDQo+IMKgew0KPiArCXN0cnVjdCBkcm1fY3J0YyAqZm9y X2NydGMgPSBjc3RhdGUtPmJhc2UuY3J0YzsNCj4gwqAJc3RydWN0IGRybV9jcnRjICpjcnRjOw0K PiDCoAl1bnNpZ25lZCBpbnQgcGlwZV9zaXplLCBkZGJfc2l6ZTsNCj4gwqAJaW50IG50aF9hY3Rp dmVfcGlwZTsNCj4gwqANCj4gLQlpZiAoIXBhcmFtcy0+YWN0aXZlKSB7DQo+ICsJaWYgKCFjc3Rh dGUtPmJhc2UuYWN0aXZlKSB7DQo+IMKgCQlhbGxvYy0+c3RhcnQgPSAwOw0KPiDCoAkJYWxsb2Mt PmVuZCA9IDA7DQo+IMKgCQlyZXR1cm47DQo+IEBAIC0yODMyLDE5ICsyODQ3LDI5IEBAIHZvaWQg c2tsX2RkYl9nZXRfaHdfc3RhdGUoc3RydWN0DQo+IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2 LA0KPiDCoH0NCj4gwqANCj4gwqBzdGF0aWMgdW5zaWduZWQgaW50DQo+IC1za2xfcGxhbmVfcmVs YXRpdmVfZGF0YV9yYXRlKGNvbnN0IHN0cnVjdCBpbnRlbF9wbGFuZV93bV9wYXJhbWV0ZXJzDQo+ ICpwLCBpbnQgeSkNCj4gK3NrbF9wbGFuZV9yZWxhdGl2ZV9kYXRhX3JhdGUoY29uc3Qgc3RydWN0 IGludGVsX2NydGNfc3RhdGUgKmNzdGF0ZSwNCj4gKwkJCcKgwqDCoMKgwqBjb25zdCBzdHJ1Y3Qg ZHJtX3BsYW5lX3N0YXRlICpwc3RhdGUsDQo+ICsJCQnCoMKgwqDCoMKgaW50IHkpDQo+IMKgew0K PiArCXN0cnVjdCBpbnRlbF9jcnRjICppbnRlbF9jcnRjID0gdG9faW50ZWxfY3J0Yyhjc3RhdGUt DQo+ID5iYXNlLmNydGMpOw0KPiArCXN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiID0gcHN0YXRl LT5mYjsNCj4gwqANCj4gwqAJLyogZm9yIHBsYW5hciBmb3JtYXQgKi8NCj4gLQlpZiAocC0+eV9i eXRlc19wZXJfcGl4ZWwpIHsNCj4gKwlpZiAoZmItPnBpeGVsX2Zvcm1hdCA9PSBEUk1fRk9STUFU X05WMTIpIHsNCj4gwqAJCWlmICh5KcKgwqAvKiB5LXBsYW5lIGRhdGEgcmF0ZSAqLw0KPiAtCQkJ cmV0dXJuIHAtPmhvcml6X3BpeGVscyAqIHAtPnZlcnRfcGl4ZWxzICogcC0NCj4gPnlfYnl0ZXNf cGVyX3BpeGVsOw0KPiArCQkJcmV0dXJuIGludGVsX2NydGMtPmNvbmZpZy0+cGlwZV9zcmNfdyAq DQo+ICsJCQkJaW50ZWxfY3J0Yy0+Y29uZmlnLT5waXBlX3NyY19oICoNCj4gKwkJCQlkcm1fZm9y bWF0X3BsYW5lX2NwcChmYi0NCj4gPnBpeGVsX2Zvcm1hdCwgMCk7DQo+IMKgCQllbHNlwqDCoMKg wqAvKiB1di1wbGFuZSBkYXRhIHJhdGUgKi8NCj4gLQkJCXJldHVybiAocC0+aG9yaXpfcGl4ZWxz LzIpICogKHAtDQo+ID52ZXJ0X3BpeGVscy8yKSAqIHAtPmJ5dGVzX3Blcl9waXhlbDsNCj4gKwkJ CXJldHVybiAoaW50ZWxfY3J0Yy0+Y29uZmlnLT5waXBlX3NyY193LzIpICoNCj4gKwkJCQkoaW50 ZWxfY3J0Yy0+Y29uZmlnLT5waXBlX3NyY19oLzIpICoNCj4gKwkJCQlkcm1fZm9ybWF0X3BsYW5l X2NwcChmYi0NCj4gPnBpeGVsX2Zvcm1hdCwgMSk7DQo+IMKgCX0NCj4gwqANCj4gwqAJLyogZm9y IHBhY2tlZCBmb3JtYXRzICovDQo+IC0JcmV0dXJuIHAtPmhvcml6X3BpeGVscyAqIHAtPnZlcnRf cGl4ZWxzICogcC0NCj4gPmJ5dGVzX3Blcl9waXhlbDsNCj4gKwlyZXR1cm4gaW50ZWxfY3J0Yy0+ Y29uZmlnLT5waXBlX3NyY193ICoNCj4gKwkJaW50ZWxfY3J0Yy0+Y29uZmlnLT5waXBlX3NyY19o ICoNCj4gKwkJZHJtX2Zvcm1hdF9wbGFuZV9jcHAoZmItPnBpeGVsX2Zvcm1hdCwgMCk7DQo+IMKg fQ0KPiDCoA0KPiDCoC8qDQo+IEBAIC0yODUzLDQ2ICsyODc4LDU0IEBAIHNrbF9wbGFuZV9yZWxh dGl2ZV9kYXRhX3JhdGUoY29uc3Qgc3RydWN0DQo+IGludGVsX3BsYW5lX3dtX3BhcmFtZXRlcnMg KnAsIGludCB5KQ0KPiDCoCAqwqDCoMKgMyAqIDQwOTYgKiA4MTkywqDCoCogNCA8IDJeMzINCj4g wqAgKi8NCj4gwqBzdGF0aWMgdW5zaWduZWQgaW50DQo+IC1za2xfZ2V0X3RvdGFsX3JlbGF0aXZl X2RhdGFfcmF0ZShzdHJ1Y3QgaW50ZWxfY3J0YyAqaW50ZWxfY3J0YywNCj4gLQkJCQnCoGNvbnN0 IHN0cnVjdCBza2xfcGlwZV93bV9wYXJhbWV0ZXJzDQo+ICpwYXJhbXMpDQo+ICtza2xfZ2V0X3Rv dGFsX3JlbGF0aXZlX2RhdGFfcmF0ZShjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZQ0KPiAq Y3N0YXRlKQ0KPiDCoHsNCj4gKwlzdHJ1Y3QgaW50ZWxfY3J0YyAqaW50ZWxfY3J0YyA9IHRvX2lu dGVsX2NydGMoY3N0YXRlLQ0KPiA+YmFzZS5jcnRjKTsNCj4gKwlzdHJ1Y3QgZHJtX2RldmljZSAq ZGV2ID0gaW50ZWxfY3J0Yy0+YmFzZS5kZXY7DQo+ICsJY29uc3Qgc3RydWN0IGludGVsX3BsYW5l ICppbnRlbF9wbGFuZTsNCj4gwqAJdW5zaWduZWQgaW50IHRvdGFsX2RhdGFfcmF0ZSA9IDA7DQo+ IC0JaW50IHBsYW5lOw0KPiDCoA0KPiAtCWZvciAocGxhbmUgPSAwOyBwbGFuZSA8IGludGVsX251 bV9wbGFuZXMoaW50ZWxfY3J0Yyk7DQo+IHBsYW5lKyspIHsNCj4gLQkJY29uc3Qgc3RydWN0IGlu dGVsX3BsYW5lX3dtX3BhcmFtZXRlcnMgKnA7DQo+ICsJZm9yX2VhY2hfaW50ZWxfcGxhbmVfb25f Y3J0YyhkZXYsIGludGVsX2NydGMsIGludGVsX3BsYW5lKSB7DQo+ICsJCWNvbnN0IHN0cnVjdCBk cm1fcGxhbmVfc3RhdGUgKnBzdGF0ZSA9IGludGVsX3BsYW5lLQ0KPiA+YmFzZS5zdGF0ZTsNCj4g wqANCj4gLQkJcCA9ICZwYXJhbXMtPnBsYW5lW3BsYW5lXTsNCj4gLQkJaWYgKCFwLT5lbmFibGVk KQ0KPiArCQlpZiAocHN0YXRlLT5mYiA9PSBOVUxMKQ0KPiDCoAkJCWNvbnRpbnVlOw0KPiDCoA0K PiAtCQl0b3RhbF9kYXRhX3JhdGUgKz0gc2tsX3BsYW5lX3JlbGF0aXZlX2RhdGFfcmF0ZShwLA0K PiAwKTsgLyogcGFja2VkL3V2ICovDQo+IC0JCWlmIChwLT55X2J5dGVzX3Blcl9waXhlbCkgew0K PiAtCQkJdG90YWxfZGF0YV9yYXRlICs9DQo+IHNrbF9wbGFuZV9yZWxhdGl2ZV9kYXRhX3JhdGUo cCwgMSk7IC8qIHktcGxhbmUgKi8NCj4gLQkJfQ0KPiArCQlpZiAoaW50ZWxfcGxhbmUtPmJhc2Uu dHlwZSA9PSBEUk1fUExBTkVfVFlQRV9DVVJTT1IpDQo+ICsJCQljb250aW51ZTsNCj4gKw0KPiAr CQkvKiBwYWNrZWQvdXYgKi8NCj4gKwkJdG90YWxfZGF0YV9yYXRlICs9DQo+IHNrbF9wbGFuZV9y ZWxhdGl2ZV9kYXRhX3JhdGUoY3N0YXRlLA0KPiArCQkJCQkJCQlwc3RhDQo+IHRlLA0KPiArCQkJ CQkJCQkwKTsNCj4gKw0KPiArCQlpZiAocHN0YXRlLT5mYi0+cGl4ZWxfZm9ybWF0ID09IERSTV9G T1JNQVRfTlYxMikNCj4gKwkJCS8qIHktcGxhbmUgKi8NCj4gKwkJCXRvdGFsX2RhdGFfcmF0ZSAr PQ0KPiBza2xfcGxhbmVfcmVsYXRpdmVfZGF0YV9yYXRlKGNzdGF0ZSwNCj4gKwkJCQkJCQkJCQ0K PiBwc3RhdGUsDQo+ICsJCQkJCQkJCQkNCj4gMSk7DQo+IMKgCX0NCj4gwqANCj4gwqAJcmV0dXJu IHRvdGFsX2RhdGFfcmF0ZTsNCj4gwqB9DQo+IMKgDQo+IMKgc3RhdGljIHZvaWQNCj4gLXNrbF9h bGxvY2F0ZV9waXBlX2RkYihzdHJ1Y3QgZHJtX2NydGMgKmNydGMsDQo+ICtza2xfYWxsb2NhdGVf cGlwZV9kZGIoc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNzdGF0ZSwNCj4gwqAJCcKgwqDCoMKg wqDCoGNvbnN0IHN0cnVjdCBpbnRlbF93bV9jb25maWcgKmNvbmZpZywNCj4gLQkJwqDCoMKgwqDC oMKgY29uc3Qgc3RydWN0IHNrbF9waXBlX3dtX3BhcmFtZXRlcnMgKnBhcmFtcywNCj4gwqAJCcKg wqDCoMKgwqDCoHN0cnVjdCBza2xfZGRiX2FsbG9jYXRpb24gKmRkYiAvKiBvdXQgKi8pDQo+IMKg ew0KPiArCXN0cnVjdCBkcm1fY3J0YyAqY3J0YyA9IGNzdGF0ZS0+YmFzZS5jcnRjOw0KPiDCoAlz dHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY3J0Yy0+ZGV2Ow0KPiAtCXN0cnVjdCBkcm1faTkxNV9w cml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7DQo+IMKgCXN0cnVjdCBpbnRlbF9j cnRjICppbnRlbF9jcnRjID0gdG9faW50ZWxfY3J0YyhjcnRjKTsNCj4gKwlzdHJ1Y3QgaW50ZWxf cGxhbmUgKmludGVsX3BsYW5lOw0KPiDCoAllbnVtIHBpcGUgcGlwZSA9IGludGVsX2NydGMtPnBp cGU7DQo+IMKgCXN0cnVjdCBza2xfZGRiX2VudHJ5ICphbGxvYyA9ICZkZGItPnBpcGVbcGlwZV07 DQo+IMKgCXVpbnQxNl90IGFsbG9jX3NpemUsIHN0YXJ0LCBjdXJzb3JfYmxvY2tzOw0KPiDCoAl1 aW50MTZfdCBtaW5pbXVtW0k5MTVfTUFYX1BMQU5FU107DQo+IMKgCXVpbnQxNl90IHlfbWluaW11 bVtJOTE1X01BWF9QTEFORVNdOw0KPiDCoAl1bnNpZ25lZCBpbnQgdG90YWxfZGF0YV9yYXRlOw0K PiAtCWludCBwbGFuZTsNCj4gwqANCj4gLQlza2xfZGRiX2dldF9waXBlX2FsbG9jYXRpb25fbGlt aXRzKGRldiwgY3J0YywgY29uZmlnLA0KPiBwYXJhbXMsIGFsbG9jKTsNCj4gKwlza2xfZGRiX2dl dF9waXBlX2FsbG9jYXRpb25fbGltaXRzKGRldiwgY3N0YXRlLCBjb25maWcsDQo+IGFsbG9jKTsN Cj4gwqAJYWxsb2Nfc2l6ZSA9IHNrbF9kZGJfZW50cnlfc2l6ZShhbGxvYyk7DQo+IMKgCWlmIChh bGxvY19zaXplID09IDApIHsNCj4gwqAJCW1lbXNldChkZGItPnBsYW5lW3BpcGVdLCAwLCBzaXpl b2YoZGRiLQ0KPiA+cGxhbmVbcGlwZV0pKTsNCj4gQEAgLTI5MDksMTcgKzI5NDIsMjAgQEAgc2ts X2FsbG9jYXRlX3BpcGVfZGRiKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywNCj4gwqAJYWxsb2MtPmVu ZCAtPSBjdXJzb3JfYmxvY2tzOw0KPiDCoA0KPiDCoAkvKiAxLiBBbGxvY2F0ZSB0aGUgbWluaW51 bSByZXF1aXJlZCBibG9ja3MgZm9yIGVhY2ggYWN0aXZlDQo+IHBsYW5lICovDQo+IC0JZm9yX2Vh Y2hfcGxhbmUoZGV2X3ByaXYsIHBpcGUsIHBsYW5lKSB7DQo+IC0JCWNvbnN0IHN0cnVjdCBpbnRl bF9wbGFuZV93bV9wYXJhbWV0ZXJzICpwOw0KPiArCWZvcl9lYWNoX2ludGVsX3BsYW5lX29uX2Ny dGMoZGV2LCBpbnRlbF9jcnRjLCBpbnRlbF9wbGFuZSkgew0KPiArCQlzdHJ1Y3QgZHJtX3BsYW5l ICpwbGFuZSA9ICZpbnRlbF9wbGFuZS0+YmFzZTsNCj4gKwkJc3RydWN0IGRybV9mcmFtZWJ1ZmZl ciAqZmIgPSBwbGFuZS0+c3RhdGUtPmZiOw0KPiArCQlpbnQgaWQgPSBza2xfd21fcGxhbmVfaWQo aW50ZWxfcGxhbmUpOw0KPiDCoA0KPiAtCQlwID0gJnBhcmFtcy0+cGxhbmVbcGxhbmVdOw0KPiAt CQlpZiAoIXAtPmVuYWJsZWQpDQo+ICsJCWlmIChmYiA9PSBOVUxMKQ0KPiArCQkJY29udGludWU7 DQo+ICsJCWlmIChwbGFuZS0+dHlwZSA9PSBEUk1fUExBTkVfVFlQRV9DVVJTT1IpDQo+IMKgCQkJ Y29udGludWU7DQo+IMKgDQo+IC0JCW1pbmltdW1bcGxhbmVdID0gODsNCj4gLQkJYWxsb2Nfc2l6 ZSAtPSBtaW5pbXVtW3BsYW5lXTsNCj4gLQkJeV9taW5pbXVtW3BsYW5lXSA9IHAtPnlfYnl0ZXNf cGVyX3BpeGVsID8gOCA6IDA7DQo+IC0JCWFsbG9jX3NpemUgLT0geV9taW5pbXVtW3BsYW5lXTsN Cj4gKwkJbWluaW11bVtpZF0gPSA4Ow0KPiArCQlhbGxvY19zaXplIC09IG1pbmltdW1baWRdOw0K PiArCQl5X21pbmltdW1baWRdID0gKGZiLT5waXhlbF9mb3JtYXQgPT0NCj4gRFJNX0ZPUk1BVF9O VjEyKSA/IDggOiAwOw0KPiArCQlhbGxvY19zaXplIC09IHlfbWluaW11bVtpZF07DQo+IMKgCX0N Cj4gwqANCj4gwqAJLyoNCj4gQEAgLTI5MjgsNDUgKzI5NjQsNTAgQEAgc2tsX2FsbG9jYXRlX3Bp cGVfZGRiKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywNCj4gwqAJwqAqDQo+IMKgCcKgKiBGSVhNRTog d2UgbWF5IG5vdCBhbGxvY2F0ZSBldmVyeSBzaW5nbGUgYmxvY2sgaGVyZS4NCj4gwqAJwqAqLw0K PiAtCXRvdGFsX2RhdGFfcmF0ZSA9DQo+IHNrbF9nZXRfdG90YWxfcmVsYXRpdmVfZGF0YV9yYXRl KGludGVsX2NydGMsIHBhcmFtcyk7DQo+ICsJdG90YWxfZGF0YV9yYXRlID0gc2tsX2dldF90b3Rh bF9yZWxhdGl2ZV9kYXRhX3JhdGUoY3N0YXRlKTsNCj4gwqANCj4gwqAJc3RhcnQgPSBhbGxvYy0+ c3RhcnQ7DQo+IC0JZm9yIChwbGFuZSA9IDA7IHBsYW5lIDwgaW50ZWxfbnVtX3BsYW5lcyhpbnRl bF9jcnRjKTsNCj4gcGxhbmUrKykgew0KPiAtCQljb25zdCBzdHJ1Y3QgaW50ZWxfcGxhbmVfd21f cGFyYW1ldGVycyAqcDsNCj4gKwlmb3JfZWFjaF9pbnRlbF9wbGFuZV9vbl9jcnRjKGRldiwgaW50 ZWxfY3J0YywgaW50ZWxfcGxhbmUpIHsNCj4gKwkJc3RydWN0IGRybV9wbGFuZSAqcGxhbmUgPSAm aW50ZWxfcGxhbmUtPmJhc2U7DQo+ICsJCXN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKnBzdGF0ZSA9 IGludGVsX3BsYW5lLQ0KPiA+YmFzZS5zdGF0ZTsNCj4gwqAJCXVuc2lnbmVkIGludCBkYXRhX3Jh dGUsIHlfZGF0YV9yYXRlOw0KPiDCoAkJdWludDE2X3QgcGxhbmVfYmxvY2tzLCB5X3BsYW5lX2Js b2NrcyA9IDA7DQo+ICsJCWludCBpZCA9IHNrbF93bV9wbGFuZV9pZChpbnRlbF9wbGFuZSk7DQo+ IMKgDQo+IC0JCXAgPSAmcGFyYW1zLT5wbGFuZVtwbGFuZV07DQo+IC0JCWlmICghcC0+ZW5hYmxl ZCkNCj4gKwkJaWYgKHBzdGF0ZS0+ZmIgPT0gTlVMTCkNCj4gKwkJCWNvbnRpbnVlOw0KPiArCQlp ZiAocGxhbmUtPnR5cGUgPT0gRFJNX1BMQU5FX1RZUEVfQ1VSU09SKQ0KPiDCoAkJCWNvbnRpbnVl Ow0KPiDCoA0KPiAtCQlkYXRhX3JhdGUgPSBza2xfcGxhbmVfcmVsYXRpdmVfZGF0YV9yYXRlKHAs IDApOw0KPiArCQlkYXRhX3JhdGUgPSBza2xfcGxhbmVfcmVsYXRpdmVfZGF0YV9yYXRlKGNzdGF0 ZSwNCj4gcHN0YXRlLCAwKTsNCj4gwqANCj4gwqAJCS8qDQo+IMKgCQnCoCogYWxsb2NhdGlvbiBm b3IgKHBhY2tlZCBmb3JtYXRzKSBvciAodXYtcGxhbmUgcGFydA0KPiBvZiBwbGFuYXIgZm9ybWF0 KToNCj4gwqAJCcKgKiBwcm9tb3RlIHRoZSBleHByZXNzaW9uIHRvIDY0IGJpdHMgdG8gYXZvaWQN Cj4gb3ZlcmZsb3dpbmcsIHRoZQ0KPiDCoAkJwqAqIHJlc3VsdCBpcyA8IGF2YWlsYWJsZSBhcyBk YXRhX3JhdGUgLw0KPiB0b3RhbF9kYXRhX3JhdGUgPCAxDQo+IMKgCQnCoCovDQo+IC0JCXBsYW5l X2Jsb2NrcyA9IG1pbmltdW1bcGxhbmVdOw0KPiArCQlwbGFuZV9ibG9ja3MgPSBtaW5pbXVtW2lk XTsNCj4gwqAJCXBsYW5lX2Jsb2NrcyArPSBkaXZfdTY0KCh1aW50NjRfdClhbGxvY19zaXplICoN Cj4gZGF0YV9yYXRlLA0KPiDCoAkJCQkJdG90YWxfZGF0YV9yYXRlKTsNCj4gwqANCj4gLQkJZGRi LT5wbGFuZVtwaXBlXVtwbGFuZV0uc3RhcnQgPSBzdGFydDsNCj4gLQkJZGRiLT5wbGFuZVtwaXBl XVtwbGFuZV0uZW5kID0gc3RhcnQgKyBwbGFuZV9ibG9ja3M7DQo+ICsJCWRkYi0+cGxhbmVbcGlw ZV1baWRdLnN0YXJ0ID0gc3RhcnQ7DQo+ICsJCWRkYi0+cGxhbmVbcGlwZV1baWRdLmVuZCA9IHN0 YXJ0ICsgcGxhbmVfYmxvY2tzOw0KPiDCoA0KPiDCoAkJc3RhcnQgKz0gcGxhbmVfYmxvY2tzOw0K PiDCoA0KPiDCoAkJLyoNCj4gwqAJCcKgKiBhbGxvY2F0aW9uIGZvciB5X3BsYW5lIHBhcnQgb2Yg cGxhbmFyIGZvcm1hdDoNCj4gwqAJCcKgKi8NCj4gLQkJaWYgKHAtPnlfYnl0ZXNfcGVyX3BpeGVs KSB7DQo+IC0JCQl5X2RhdGFfcmF0ZSA9DQo+IHNrbF9wbGFuZV9yZWxhdGl2ZV9kYXRhX3JhdGUo cCwgMSk7DQo+IC0JCQl5X3BsYW5lX2Jsb2NrcyA9IHlfbWluaW11bVtwbGFuZV07DQo+ICsJCWlm IChwc3RhdGUtPmZiLT5waXhlbF9mb3JtYXQgPT0gRFJNX0ZPUk1BVF9OVjEyKSB7DQo+ICsJCQl5 X2RhdGFfcmF0ZSA9DQo+IHNrbF9wbGFuZV9yZWxhdGl2ZV9kYXRhX3JhdGUoY3N0YXRlLA0KPiAr CQkJCQkJCQnCoMKgwqBwDQo+IHN0YXRlLA0KPiArCQkJCQkJCQnCoMKgwqAxDQo+ICk7DQo+ICsJ CQl5X3BsYW5lX2Jsb2NrcyA9IHlfbWluaW11bVtpZF07DQo+IMKgCQkJeV9wbGFuZV9ibG9ja3Mg Kz0NCj4gZGl2X3U2NCgodWludDY0X3QpYWxsb2Nfc2l6ZSAqIHlfZGF0YV9yYXRlLA0KPiDCoAkJ CQkJCXRvdGFsX2RhdGFfcmF0ZSk7DQo+IMKgDQo+IC0JCQlkZGItPnlfcGxhbmVbcGlwZV1bcGxh bmVdLnN0YXJ0ID0gc3RhcnQ7DQo+IC0JCQlkZGItPnlfcGxhbmVbcGlwZV1bcGxhbmVdLmVuZCA9 IHN0YXJ0ICsNCj4geV9wbGFuZV9ibG9ja3M7DQo+ICsJCQlkZGItPnlfcGxhbmVbcGlwZV1baWRd LnN0YXJ0ID0gc3RhcnQ7DQo+ICsJCQlkZGItPnlfcGxhbmVbcGlwZV1baWRdLmVuZCA9IHN0YXJ0 ICsNCj4geV9wbGFuZV9ibG9ja3M7DQo+IMKgDQo+IMKgCQkJc3RhcnQgKz0geV9wbGFuZV9ibG9j a3M7DQo+IMKgCQl9DQo+IEBAIC0zMDY3LDczICszMTA4LDE2IEBAIHN0YXRpYyB2b2lkDQo+IHNr bF9jb21wdXRlX3dtX2dsb2JhbF9wYXJhbWV0ZXJzKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsDQo+ IMKgCX0NCj4gwqB9DQo+IMKgDQo+IC1zdGF0aWMgdm9pZCBza2xfY29tcHV0ZV93bV9waXBlX3Bh cmFtZXRlcnMoc3RydWN0IGRybV9jcnRjICpjcnRjLA0KPiAtCQkJCQnCoMKgwqBzdHJ1Y3QNCj4g c2tsX3BpcGVfd21fcGFyYW1ldGVycyAqcCkNCj4gLXsNCj4gLQlzdHJ1Y3QgZHJtX2RldmljZSAq ZGV2ID0gY3J0Yy0+ZGV2Ow0KPiAtCXN0cnVjdCBpbnRlbF9jcnRjICppbnRlbF9jcnRjID0gdG9f aW50ZWxfY3J0YyhjcnRjKTsNCj4gLQllbnVtIHBpcGUgcGlwZSA9IGludGVsX2NydGMtPnBpcGU7 DQo+IC0Jc3RydWN0IGRybV9wbGFuZSAqcGxhbmU7DQo+IC0Jc3RydWN0IGRybV9mcmFtZWJ1ZmZl ciAqZmI7DQo+IC0JaW50IGkgPSAxOyAvKiBJbmRleCBmb3Igc3ByaXRlIHBsYW5lcyBzdGFydCAq Lw0KPiAtDQo+IC0JcC0+YWN0aXZlID0gaW50ZWxfY3J0Yy0+YWN0aXZlOw0KPiAtCWlmIChwLT5h Y3RpdmUpIHsNCj4gLQkJcC0+cGlwZV9odG90YWwgPSBpbnRlbF9jcnRjLT5jb25maWctDQo+ID5i YXNlLmFkanVzdGVkX21vZGUuY3J0Y19odG90YWw7DQo+IC0JCXAtPnBpeGVsX3JhdGUgPSBza2xf cGlwZV9waXhlbF9yYXRlKGludGVsX2NydGMtDQo+ID5jb25maWcpOw0KPiAtDQo+IC0JCWZiID0g Y3J0Yy0+cHJpbWFyeS0+c3RhdGUtPmZiOw0KPiAtCQkvKiBGb3IgcGxhbmFyOiBCcHAgaXMgZm9y IHV2IHBsYW5lLCB5X0JwcCBpcyBmb3IgeQ0KPiBwbGFuZSAqLw0KPiAtCQlpZiAoZmIpIHsNCj4g LQkJCXAtPnBsYW5lWzBdLmVuYWJsZWQgPSB0cnVlOw0KPiAtCQkJcC0+cGxhbmVbMF0uYnl0ZXNf cGVyX3BpeGVsID0gZmItDQo+ID5waXhlbF9mb3JtYXQgPT0gRFJNX0ZPUk1BVF9OVjEyID8NCj4g LQkJCQlkcm1fZm9ybWF0X3BsYW5lX2NwcChmYi0NCj4gPnBpeGVsX2Zvcm1hdCwgMSkgOg0KPiAt CQkJCWRybV9mb3JtYXRfcGxhbmVfY3BwKGZiLQ0KPiA+cGl4ZWxfZm9ybWF0LCAwKTsNCj4gLQkJ CXAtPnBsYW5lWzBdLnlfYnl0ZXNfcGVyX3BpeGVsID0gZmItDQo+ID5waXhlbF9mb3JtYXQgPT0g RFJNX0ZPUk1BVF9OVjEyID8NCj4gLQkJCQlkcm1fZm9ybWF0X3BsYW5lX2NwcChmYi0NCj4gPnBp eGVsX2Zvcm1hdCwgMCkgOiAwOw0KPiAtCQkJcC0+cGxhbmVbMF0udGlsaW5nID0gZmItPm1vZGlm aWVyWzBdOw0KPiAtCQl9IGVsc2Ugew0KPiAtCQkJcC0+cGxhbmVbMF0uZW5hYmxlZCA9IGZhbHNl Ow0KPiAtCQkJcC0+cGxhbmVbMF0uYnl0ZXNfcGVyX3BpeGVsID0gMDsNCj4gLQkJCXAtPnBsYW5l WzBdLnlfYnl0ZXNfcGVyX3BpeGVsID0gMDsNCj4gLQkJCXAtPnBsYW5lWzBdLnRpbGluZyA9IERS TV9GT1JNQVRfTU9EX05PTkU7DQo+IC0JCX0NCj4gLQkJcC0+cGxhbmVbMF0uaG9yaXpfcGl4ZWxz ID0gaW50ZWxfY3J0Yy0+Y29uZmlnLQ0KPiA+cGlwZV9zcmNfdzsNCj4gLQkJcC0+cGxhbmVbMF0u dmVydF9waXhlbHMgPSBpbnRlbF9jcnRjLT5jb25maWctDQo+ID5waXBlX3NyY19oOw0KPiAtCQlw LT5wbGFuZVswXS5yb3RhdGlvbiA9IGNydGMtPnByaW1hcnktPnN0YXRlLQ0KPiA+cm90YXRpb247 DQo+IC0NCj4gLQkJZmIgPSBjcnRjLT5jdXJzb3ItPnN0YXRlLT5mYjsNCj4gLQkJcC0+cGxhbmVb UExBTkVfQ1VSU09SXS55X2J5dGVzX3Blcl9waXhlbCA9IDA7DQo+IC0JCWlmIChmYikgew0KPiAt CQkJcC0+cGxhbmVbUExBTkVfQ1VSU09SXS5lbmFibGVkID0gdHJ1ZTsNCj4gLQkJCXAtPnBsYW5l W1BMQU5FX0NVUlNPUl0uYnl0ZXNfcGVyX3BpeGVsID0gZmItDQo+ID5iaXRzX3Blcl9waXhlbCAv IDg7DQo+IC0JCQlwLT5wbGFuZVtQTEFORV9DVVJTT1JdLmhvcml6X3BpeGVscyA9IGNydGMtDQo+ ID5jdXJzb3ItPnN0YXRlLT5jcnRjX3c7DQo+IC0JCQlwLT5wbGFuZVtQTEFORV9DVVJTT1JdLnZl cnRfcGl4ZWxzID0gY3J0Yy0NCj4gPmN1cnNvci0+c3RhdGUtPmNydGNfaDsNCj4gLQkJfSBlbHNl IHsNCj4gLQkJCXAtPnBsYW5lW1BMQU5FX0NVUlNPUl0uZW5hYmxlZCA9IGZhbHNlOw0KPiAtCQkJ cC0+cGxhbmVbUExBTkVfQ1VSU09SXS5ieXRlc19wZXJfcGl4ZWwgPSAwOw0KPiAtCQkJcC0+cGxh bmVbUExBTkVfQ1VSU09SXS5ob3Jpel9waXhlbHMgPSA2NDsNCj4gLQkJCXAtPnBsYW5lW1BMQU5F X0NVUlNPUl0udmVydF9waXhlbHMgPSA2NDsNCj4gLQkJfQ0KPiAtCX0NCj4gLQ0KPiAtCWxpc3Rf Zm9yX2VhY2hfZW50cnkocGxhbmUsICZkZXYtPm1vZGVfY29uZmlnLnBsYW5lX2xpc3QsDQo+IGhl YWQpIHsNCj4gLQkJc3RydWN0IGludGVsX3BsYW5lICppbnRlbF9wbGFuZSA9DQo+IHRvX2ludGVs X3BsYW5lKHBsYW5lKTsNCj4gLQ0KPiAtCQlpZiAoaW50ZWxfcGxhbmUtPnBpcGUgPT0gcGlwZSAm Jg0KPiAtCQkJcGxhbmUtPnR5cGUgPT0gRFJNX1BMQU5FX1RZUEVfT1ZFUkxBWSkNCj4gLQkJCXAt PnBsYW5lW2krK10gPSBpbnRlbF9wbGFuZS0+d207DQo+IC0JfQ0KPiAtfQ0KPiAtDQo+IMKgc3Rh dGljIGJvb2wgc2tsX2NvbXB1dGVfcGxhbmVfd20oY29uc3Qgc3RydWN0IGRybV9pOTE1X3ByaXZh dGUNCj4gKmRldl9wcml2LA0KPiAtCQkJCcKgc3RydWN0IHNrbF9waXBlX3dtX3BhcmFtZXRlcnMg KnAsDQo+IC0JCQkJwqBzdHJ1Y3QgaW50ZWxfcGxhbmVfd21fcGFyYW1ldGVycw0KPiAqcF9wYXJh bXMsDQo+ICsJCQkJwqBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3N0YXRlLA0KPiArCQkJCcKg c3RydWN0IGludGVsX3BsYW5lICppbnRlbF9wbGFuZSwNCj4gwqAJCQkJwqB1aW50MTZfdCBkZGJf YWxsb2NhdGlvbiwNCj4gwqAJCQkJwqBpbnQgbGV2ZWwsDQo+IMKgCQkJCcKgdWludDE2X3QgKm91 dF9ibG9ja3MsIC8qIG91dCAqLw0KPiDCoAkJCQnCoHVpbnQ4X3QgKm91dF9saW5lcyAvKiBvdXQg Ki8pDQo+IMKgew0KPiArCXN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lID0gJmludGVsX3BsYW5lLT5i YXNlOw0KPiArCXN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiID0gcGxhbmUtPnN0YXRlLT5mYjsN Cj4gwqAJdWludDMyX3QgbGF0ZW5jeSA9IGRldl9wcml2LT53bS5za2xfbGF0ZW5jeVtsZXZlbF07 DQo+IMKgCXVpbnQzMl90IG1ldGhvZDEsIG1ldGhvZDI7DQo+IMKgCXVpbnQzMl90IHBsYW5lX2J5 dGVzX3Blcl9saW5lLCBwbGFuZV9ibG9ja3NfcGVyX2xpbmU7DQo+IEBAIC0zMTQxLDMxICszMTI1 LDMzIEBAIHN0YXRpYyBib29sIHNrbF9jb21wdXRlX3BsYW5lX3dtKGNvbnN0IHN0cnVjdA0KPiBk cm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwNCj4gwqAJdWludDMyX3Qgc2VsZWN0ZWRfcmVzdWx0 Ow0KPiDCoAl1aW50OF90IGJ5dGVzX3Blcl9waXhlbDsNCj4gwqANCj4gLQlpZiAobGF0ZW5jeSA9 PSAwIHx8ICFwLT5hY3RpdmUgfHwgIXBfcGFyYW1zLT5lbmFibGVkKQ0KPiArCWlmIChsYXRlbmN5 ID09IDAgfHwgIWNzdGF0ZS0+YmFzZS5hY3RpdmUgfHwgIWZiKQ0KPiDCoAkJcmV0dXJuIGZhbHNl Ow0KPiDCoA0KPiAtCWJ5dGVzX3Blcl9waXhlbCA9IHBfcGFyYW1zLT55X2J5dGVzX3Blcl9waXhl bCA/DQo+IC0JCXBfcGFyYW1zLT55X2J5dGVzX3Blcl9waXhlbCA6DQo+IC0JCXBfcGFyYW1zLT5i eXRlc19wZXJfcGl4ZWw7DQo+IC0JbWV0aG9kMSA9IHNrbF93bV9tZXRob2QxKHAtPnBpeGVsX3Jh dGUsDQo+ICsJYnl0ZXNfcGVyX3BpeGVsID0gZHJtX2Zvcm1hdF9wbGFuZV9jcHAoZmItPnBpeGVs X2Zvcm1hdCwgMCk7DQo+ICsJbWV0aG9kMSA9IHNrbF93bV9tZXRob2QxKHNrbF9waXBlX3BpeGVs X3JhdGUoY3N0YXRlKSwNCj4gwqAJCQkJwqBieXRlc19wZXJfcGl4ZWwsDQo+IMKgCQkJCcKgbGF0 ZW5jeSk7DQo+IC0JbWV0aG9kMiA9IHNrbF93bV9tZXRob2QyKHAtPnBpeGVsX3JhdGUsDQo+IC0J CQkJwqBwLT5waXBlX2h0b3RhbCwNCj4gLQkJCQnCoHBfcGFyYW1zLT5ob3Jpel9waXhlbHMsDQo+ ICsJbWV0aG9kMiA9IHNrbF93bV9tZXRob2QyKHNrbF9waXBlX3BpeGVsX3JhdGUoY3N0YXRlKSwN Cj4gKwkJCQnCoGNzdGF0ZS0NCj4gPmJhc2UuYWRqdXN0ZWRfbW9kZS5jcnRjX2h0b3RhbCwNCj4g KwkJCQnCoGNzdGF0ZS0+cGlwZV9zcmNfdywNCj4gwqAJCQkJwqBieXRlc19wZXJfcGl4ZWwsDQo+ IC0JCQkJwqBwX3BhcmFtcy0+dGlsaW5nLA0KPiArCQkJCcKgZmItPm1vZGlmaWVyWzBdLA0KPiDC oAkJCQnCoGxhdGVuY3kpOw0KPiDCoA0KPiAtCXBsYW5lX2J5dGVzX3Blcl9saW5lID0gcF9wYXJh bXMtPmhvcml6X3BpeGVscyAqDQo+IGJ5dGVzX3Blcl9waXhlbDsNCj4gKwlwbGFuZV9ieXRlc19w ZXJfbGluZSA9IGNzdGF0ZS0+cGlwZV9zcmNfdyAqIGJ5dGVzX3Blcl9waXhlbDsNCj4gwqAJcGxh bmVfYmxvY2tzX3Blcl9saW5lID0gRElWX1JPVU5EX1VQKHBsYW5lX2J5dGVzX3Blcl9saW5lLA0K PiA1MTIpOw0KPiDCoA0KPiAtCWlmIChwX3BhcmFtcy0+dGlsaW5nID09IEk5MTVfRk9STUFUX01P RF9ZX1RJTEVEIHx8DQo+IC0JwqDCoMKgwqBwX3BhcmFtcy0+dGlsaW5nID09IEk5MTVfRk9STUFU X01PRF9ZZl9USUxFRCkgew0KPiArCWlmIChmYi0+bW9kaWZpZXJbMF0gPT0gSTkxNV9GT1JNQVRf TU9EX1lfVElMRUQgfHwNCj4gKwnCoMKgwqDCoGZiLT5tb2RpZmllclswXSA9PSBJOTE1X0ZPUk1B VF9NT0RfWWZfVElMRUQpIHsNCj4gwqAJCXVpbnQzMl90IG1pbl9zY2FubGluZXMgPSA0Ow0KPiDC oAkJdWludDMyX3QgeV90aWxlX21pbmltdW07DQo+IC0JCWlmIChpbnRlbF9yb3RhdGlvbl85MF9v cl8yNzAocF9wYXJhbXMtPnJvdGF0aW9uKSkgew0KPiAtCQkJc3dpdGNoIChwX3BhcmFtcy0+Ynl0 ZXNfcGVyX3BpeGVsKSB7DQo+ICsJCWlmIChpbnRlbF9yb3RhdGlvbl85MF9vcl8yNzAocGxhbmUt PnN0YXRlLQ0KPiA+cm90YXRpb24pKSB7DQo+ICsJCQlpbnQgYnBwID0gKGZiLT5waXhlbF9mb3Jt YXQgPT0NCj4gRFJNX0ZPUk1BVF9OVjEyKSA/DQo+ICsJCQkJZHJtX2Zvcm1hdF9wbGFuZV9jcHAo ZmItDQo+ID5waXhlbF9mb3JtYXQsIDEpIDoNCj4gKwkJCQlkcm1fZm9ybWF0X3BsYW5lX2NwcChm Yi0NCj4gPnBpeGVsX2Zvcm1hdCwgMCk7DQo+ICsNCj4gKwkJCXN3aXRjaCAoYnBwKSB7DQo+IMKg CQkJY2FzZSAxOg0KPiDCoAkJCQltaW5fc2NhbmxpbmVzID0gMTY7DQo+IMKgCQkJCWJyZWFrOw0K PiBAQCAtMzE4OSw4ICszMTc1LDggQEAgc3RhdGljIGJvb2wgc2tsX2NvbXB1dGVfcGxhbmVfd20o Y29uc3Qgc3RydWN0DQo+IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LA0KPiDCoAlyZXNfbGlu ZXMgPSBESVZfUk9VTkRfVVAoc2VsZWN0ZWRfcmVzdWx0LA0KPiBwbGFuZV9ibG9ja3NfcGVyX2xp bmUpOw0KPiDCoA0KPiDCoAlpZiAobGV2ZWwgPj0gMSAmJiBsZXZlbCA8PSA3KSB7DQo+IC0JCWlm IChwX3BhcmFtcy0+dGlsaW5nID09IEk5MTVfRk9STUFUX01PRF9ZX1RJTEVEIHx8DQo+IC0JCcKg wqDCoMKgcF9wYXJhbXMtPnRpbGluZyA9PSBJOTE1X0ZPUk1BVF9NT0RfWWZfVElMRUQpDQo+ICsJ CWlmIChmYi0+bW9kaWZpZXJbMF0gPT0gSTkxNV9GT1JNQVRfTU9EX1lfVElMRUQgfHwNCj4gKwkJ wqDCoMKgwqBmYi0+bW9kaWZpZXJbMF0gPT0gSTkxNV9GT1JNQVRfTU9EX1lmX1RJTEVEKQ0KPiDC oAkJCXJlc19saW5lcyArPSA0Ow0KPiDCoAkJZWxzZQ0KPiDCoAkJCXJlc19ibG9ja3MrKzsNCj4g QEAgLTMyMDcsODQgKzMxOTMsODAgQEAgc3RhdGljIGJvb2wgc2tsX2NvbXB1dGVfcGxhbmVfd20o Y29uc3Qgc3RydWN0DQo+IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LA0KPiDCoA0KPiDCoHN0 YXRpYyB2b2lkIHNrbF9jb21wdXRlX3dtX2xldmVsKGNvbnN0IHN0cnVjdCBkcm1faTkxNV9wcml2 YXRlDQo+ICpkZXZfcHJpdiwNCj4gwqAJCQkJwqBzdHJ1Y3Qgc2tsX2RkYl9hbGxvY2F0aW9uICpk ZGIsDQo+IC0JCQkJwqBzdHJ1Y3Qgc2tsX3BpcGVfd21fcGFyYW1ldGVycyAqcCwNCj4gLQkJCQnC oGVudW0gcGlwZSBwaXBlLA0KPiArCQkJCcKgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNzdGF0 ZSwNCj4gwqAJCQkJwqBpbnQgbGV2ZWwsDQo+IC0JCQkJwqBpbnQgbnVtX3BsYW5lcywNCj4gwqAJ CQkJwqBzdHJ1Y3Qgc2tsX3dtX2xldmVsICpyZXN1bHQpDQo+IMKgew0KPiArCXN0cnVjdCBkcm1f ZGV2aWNlICpkZXYgPSBkZXZfcHJpdi0+ZGV2Ow0KPiArCXN0cnVjdCBpbnRlbF9jcnRjICppbnRl bF9jcnRjID0gdG9faW50ZWxfY3J0Yyhjc3RhdGUtDQo+ID5iYXNlLmNydGMpOw0KPiArCXN0cnVj dCBpbnRlbF9wbGFuZSAqaW50ZWxfcGxhbmU7DQo+IMKgCXVpbnQxNl90IGRkYl9ibG9ja3M7DQo+ IC0JaW50IGk7DQo+ICsJZW51bSBwaXBlIHBpcGUgPSBpbnRlbF9jcnRjLT5waXBlOw0KPiArDQo+ ICsJZm9yX2VhY2hfaW50ZWxfcGxhbmVfb25fY3J0YyhkZXYsIGludGVsX2NydGMsIGludGVsX3Bs YW5lKSB7DQo+ICsJCWludCBpID0gc2tsX3dtX3BsYW5lX2lkKGludGVsX3BsYW5lKTsNCj4gwqAN Cj4gLQlmb3IgKGkgPSAwOyBpIDwgbnVtX3BsYW5lczsgaSsrKSB7DQo+IMKgCQlkZGJfYmxvY2tz ID0gc2tsX2RkYl9lbnRyeV9zaXplKCZkZGItDQo+ID5wbGFuZVtwaXBlXVtpXSk7DQo+IMKgDQo+ IMKgCQlyZXN1bHQtPnBsYW5lX2VuW2ldID0gc2tsX2NvbXB1dGVfcGxhbmVfd20oZGV2X3ByaXYs DQo+IC0JCQkJCQlwLCAmcC0+cGxhbmVbaV0sDQo+ICsJCQkJCQljc3RhdGUsDQo+ICsJCQkJCQlp bnRlbF9wbGFuZSwNCj4gwqAJCQkJCQlkZGJfYmxvY2tzLA0KPiDCoAkJCQkJCWxldmVsLA0KPiDC oAkJCQkJCSZyZXN1bHQtDQo+ID5wbGFuZV9yZXNfYltpXSwNCj4gwqAJCQkJCQkmcmVzdWx0LQ0K PiA+cGxhbmVfcmVzX2xbaV0pOw0KPiDCoAl9DQo+IC0NCj4gLQlkZGJfYmxvY2tzID0gc2tsX2Rk Yl9lbnRyeV9zaXplKCZkZGItDQo+ID5wbGFuZVtwaXBlXVtQTEFORV9DVVJTT1JdKTsNCj4gLQly ZXN1bHQtPnBsYW5lX2VuW1BMQU5FX0NVUlNPUl0gPQ0KPiBza2xfY29tcHV0ZV9wbGFuZV93bShk ZXZfcHJpdiwgcCwNCj4gLQkJCQkJCcKgJnAtDQo+ID5wbGFuZVtQTEFORV9DVVJTT1JdLA0KPiAt CQkJCQkJwqBkZGJfYmxvY2tzLCBsZXZlbCwNCj4gLQkJCQkJCcKgJnJlc3VsdC0NCj4gPnBsYW5l X3Jlc19iW1BMQU5FX0NVUlNPUl0sDQo+IC0JCQkJCQnCoCZyZXN1bHQtDQo+ID5wbGFuZV9yZXNf bFtQTEFORV9DVVJTT1JdKTsNCj4gwqB9DQo+IMKgDQo+IMKgc3RhdGljIHVpbnQzMl90DQo+IC1z a2xfY29tcHV0ZV9saW5ldGltZV93bShzdHJ1Y3QgZHJtX2NydGMgKmNydGMsIHN0cnVjdA0KPiBz a2xfcGlwZV93bV9wYXJhbWV0ZXJzICpwKQ0KPiArc2tsX2NvbXB1dGVfbGluZXRpbWVfd20oc3Ry dWN0IGludGVsX2NydGNfc3RhdGUgKmNzdGF0ZSkNCj4gwqB7DQo+IC0JaWYgKCF0b19pbnRlbF9j cnRjKGNydGMpLT5hY3RpdmUpDQo+ICsJaWYgKCFjc3RhdGUtPmJhc2UuYWN0aXZlKQ0KPiDCoAkJ cmV0dXJuIDA7DQo+IMKgDQo+IC0JaWYgKFdBUk5fT04ocC0+cGl4ZWxfcmF0ZSA9PSAwKSkNCj4g KwlpZiAoV0FSTl9PTihza2xfcGlwZV9waXhlbF9yYXRlKGNzdGF0ZSkgPT0gMCkpDQo+IMKgCQly ZXR1cm4gMDsNCj4gwqANCj4gLQlyZXR1cm4gRElWX1JPVU5EX1VQKDggKiBwLT5waXBlX2h0b3Rh bCAqIDEwMDAsIHAtDQo+ID5waXhlbF9yYXRlKTsNCj4gKwlyZXR1cm4gRElWX1JPVU5EX1VQKDgg KiBjc3RhdGUtDQo+ID5iYXNlLmFkanVzdGVkX21vZGUuY3J0Y19odG90YWwgKiAxMDAwLA0KPiAr CQkJwqDCoMKgwqBza2xfcGlwZV9waXhlbF9yYXRlKGNzdGF0ZSkpOw0KPiDCoH0NCj4gwqANCj4g LXN0YXRpYyB2b2lkIHNrbF9jb21wdXRlX3RyYW5zaXRpb25fd20oc3RydWN0IGRybV9jcnRjICpj cnRjLA0KPiAtCQkJCcKgwqDCoMKgwqDCoHN0cnVjdCBza2xfcGlwZV93bV9wYXJhbWV0ZXJzDQo+ ICpwYXJhbXMsDQo+ICtzdGF0aWMgdm9pZCBza2xfY29tcHV0ZV90cmFuc2l0aW9uX3dtKHN0cnVj dCBpbnRlbF9jcnRjX3N0YXRlDQo+ICpjc3RhdGUsDQo+IMKgCQkJCcKgwqDCoMKgwqDCoHN0cnVj dCBza2xfd21fbGV2ZWwgKnRyYW5zX3dtDQo+IC8qIG91dCAqLykNCj4gwqB7DQo+ICsJc3RydWN0 IGRybV9jcnRjICpjcnRjID0gY3N0YXRlLT5iYXNlLmNydGM7DQo+IMKgCXN0cnVjdCBpbnRlbF9j cnRjICppbnRlbF9jcnRjID0gdG9faW50ZWxfY3J0YyhjcnRjKTsNCj4gLQlpbnQgaTsNCj4gKwlz dHJ1Y3QgaW50ZWxfcGxhbmUgKmludGVsX3BsYW5lOw0KPiDCoA0KPiAtCWlmICghcGFyYW1zLT5h Y3RpdmUpDQo+ICsJaWYgKCFjc3RhdGUtPmJhc2UuYWN0aXZlKQ0KPiDCoAkJcmV0dXJuOw0KPiDC oA0KPiDCoAkvKiBVbnRpbCB3ZSBrbm93IG1vcmUsIGp1c3QgZGlzYWJsZSB0cmFuc2l0aW9uIFdN cyAqLw0KPiAtCWZvciAoaSA9IDA7IGkgPCBpbnRlbF9udW1fcGxhbmVzKGludGVsX2NydGMpOyBp KyspDQo+ICsJZm9yX2VhY2hfaW50ZWxfcGxhbmVfb25fY3J0YyhjcnRjLT5kZXYsIGludGVsX2Ny dGMsDQo+IGludGVsX3BsYW5lKSB7DQo+ICsJCWludCBpID0gc2tsX3dtX3BsYW5lX2lkKGludGVs X3BsYW5lKTsNCj4gKw0KPiDCoAkJdHJhbnNfd20tPnBsYW5lX2VuW2ldID0gZmFsc2U7DQo+IC0J dHJhbnNfd20tPnBsYW5lX2VuW1BMQU5FX0NVUlNPUl0gPSBmYWxzZTsNCj4gKwl9DQo+IMKgfQ0K PiDCoA0KPiAtc3RhdGljIHZvaWQgc2tsX2NvbXB1dGVfcGlwZV93bShzdHJ1Y3QgZHJtX2NydGMg KmNydGMsDQo+ICtzdGF0aWMgdm9pZCBza2xfY29tcHV0ZV9waXBlX3dtKHN0cnVjdCBpbnRlbF9j cnRjX3N0YXRlICpjc3RhdGUsDQo+IMKgCQkJCXN0cnVjdCBza2xfZGRiX2FsbG9jYXRpb24gKmRk YiwNCj4gLQkJCQlzdHJ1Y3Qgc2tsX3BpcGVfd21fcGFyYW1ldGVycw0KPiAqcGFyYW1zLA0KPiDC oAkJCQlzdHJ1Y3Qgc2tsX3BpcGVfd20gKnBpcGVfd20pDQo+IMKgew0KPiAtCXN0cnVjdCBkcm1f ZGV2aWNlICpkZXYgPSBjcnRjLT5kZXY7DQo+ICsJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNz dGF0ZS0+YmFzZS5jcnRjLT5kZXY7DQo+IMKgCWNvbnN0IHN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7DQo+IC0Jc3RydWN0IGludGVsX2NydGMgKmlu dGVsX2NydGMgPSB0b19pbnRlbF9jcnRjKGNydGMpOw0KPiDCoAlpbnQgbGV2ZWwsIG1heF9sZXZl bCA9IGlsa193bV9tYXhfbGV2ZWwoZGV2KTsNCj4gwqANCj4gwqAJZm9yIChsZXZlbCA9IDA7IGxl dmVsIDw9IG1heF9sZXZlbDsgbGV2ZWwrKykgew0KPiAtCQlza2xfY29tcHV0ZV93bV9sZXZlbChk ZXZfcHJpdiwgZGRiLCBwYXJhbXMsDQo+IGludGVsX2NydGMtPnBpcGUsDQo+IC0JCQkJwqDCoMKg wqDCoGxldmVsLA0KPiBpbnRlbF9udW1fcGxhbmVzKGludGVsX2NydGMpLA0KPiAtCQkJCcKgwqDC oMKgwqAmcGlwZV93bS0+d21bbGV2ZWxdKTsNCj4gKwkJc2tsX2NvbXB1dGVfd21fbGV2ZWwoZGV2 X3ByaXYsIGRkYiwgY3N0YXRlLA0KPiArCQkJCcKgwqDCoMKgwqBsZXZlbCwgJnBpcGVfd20tPndt W2xldmVsXSk7DQo+IMKgCX0NCj4gLQlwaXBlX3dtLT5saW5ldGltZSA9IHNrbF9jb21wdXRlX2xp bmV0aW1lX3dtKGNydGMsIHBhcmFtcyk7DQo+ICsJcGlwZV93bS0+bGluZXRpbWUgPSBza2xfY29t cHV0ZV9saW5ldGltZV93bShjc3RhdGUpOw0KPiDCoA0KPiAtCXNrbF9jb21wdXRlX3RyYW5zaXRp b25fd20oY3J0YywgcGFyYW1zLCAmcGlwZV93bS0+dHJhbnNfd20pOw0KPiArCXNrbF9jb21wdXRl X3RyYW5zaXRpb25fd20oY3N0YXRlLCAmcGlwZV93bS0+dHJhbnNfd20pOw0KPiDCoH0NCj4gwqAN Cj4gwqBzdGF0aWMgdm9pZCBza2xfY29tcHV0ZV93bV9yZXN1bHRzKHN0cnVjdCBkcm1fZGV2aWNl ICpkZXYsDQo+IC0JCQkJwqDCoMKgc3RydWN0IHNrbF9waXBlX3dtX3BhcmFtZXRlcnMgKnAsDQo+ IMKgCQkJCcKgwqDCoHN0cnVjdCBza2xfcGlwZV93bSAqcF93bSwNCj4gwqAJCQkJwqDCoMKgc3Ry dWN0IHNrbF93bV92YWx1ZXMgKnIsDQo+IMKgCQkJCcKgwqDCoHN0cnVjdCBpbnRlbF9jcnRjICpp bnRlbF9jcnRjKQ0KPiBAQCAtMzUyOCwxNiArMzUxMCwxNSBAQCBzdGF0aWMgdm9pZCBza2xfZmx1 c2hfd21fdmFsdWVzKHN0cnVjdA0KPiBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwNCj4gwqB9 DQo+IMKgDQo+IMKgc3RhdGljIGJvb2wgc2tsX3VwZGF0ZV9waXBlX3dtKHN0cnVjdCBkcm1fY3J0 YyAqY3J0YywNCj4gLQkJCcKgwqDCoMKgwqDCoMKgc3RydWN0IHNrbF9waXBlX3dtX3BhcmFtZXRl cnMNCj4gKnBhcmFtcywNCj4gwqAJCQnCoMKgwqDCoMKgwqDCoHN0cnVjdCBpbnRlbF93bV9jb25m aWcgKmNvbmZpZywNCj4gwqAJCQnCoMKgwqDCoMKgwqDCoHN0cnVjdCBza2xfZGRiX2FsbG9jYXRp b24gKmRkYiwgLyoNCj4gb3V0ICovDQo+IMKgCQkJwqDCoMKgwqDCoMKgwqBzdHJ1Y3Qgc2tsX3Bp cGVfd20gKnBpcGVfd20gLyogb3V0DQo+ICovKQ0KPiDCoHsNCj4gwqAJc3RydWN0IGludGVsX2Ny dGMgKmludGVsX2NydGMgPSB0b19pbnRlbF9jcnRjKGNydGMpOw0KPiArCXN0cnVjdCBpbnRlbF9j cnRjX3N0YXRlICpjc3RhdGUgPSB0b19pbnRlbF9jcnRjX3N0YXRlKGNydGMtDQo+ID5zdGF0ZSk7 DQo+IMKgDQo+IC0Jc2tsX2NvbXB1dGVfd21fcGlwZV9wYXJhbWV0ZXJzKGNydGMsIHBhcmFtcyk7 DQo+IC0Jc2tsX2FsbG9jYXRlX3BpcGVfZGRiKGNydGMsIGNvbmZpZywgcGFyYW1zLCBkZGIpOw0K PiAtCXNrbF9jb21wdXRlX3BpcGVfd20oY3J0YywgZGRiLCBwYXJhbXMsIHBpcGVfd20pOw0KPiAr CXNrbF9hbGxvY2F0ZV9waXBlX2RkYihjc3RhdGUsIGNvbmZpZywgZGRiKTsNCj4gKwlza2xfY29t cHV0ZV9waXBlX3dtKGNzdGF0ZSwgZGRiLCBwaXBlX3dtKTsNCj4gwqANCj4gwqAJaWYgKCFtZW1j bXAoJmludGVsX2NydGMtPndtLnNrbF9hY3RpdmUsIHBpcGVfd20sDQo+IHNpemVvZigqcGlwZV93 bSkpKQ0KPiDCoAkJcmV0dXJuIGZhbHNlOw0KPiBAQCAtMzU3MCw3ICszNTUxLDYgQEAgc3RhdGlj IHZvaWQgc2tsX3VwZGF0ZV9vdGhlcl9waXBlX3dtKHN0cnVjdA0KPiBkcm1fZGV2aWNlICpkZXYs DQo+IMKgCcKgKi8NCj4gwqAJbGlzdF9mb3JfZWFjaF9lbnRyeShpbnRlbF9jcnRjLCAmZGV2LT5t b2RlX2NvbmZpZy5jcnRjX2xpc3QsDQo+IMKgCQkJCWJhc2UuaGVhZCkgew0KPiAtCQlzdHJ1Y3Qg c2tsX3BpcGVfd21fcGFyYW1ldGVycyBwYXJhbXMgPSB7fTsNCj4gwqAJCXN0cnVjdCBza2xfcGlw ZV93bSBwaXBlX3dtID0ge307DQo+IMKgCQlib29sIHdtX2NoYW5nZWQ7DQo+IMKgDQo+IEBAIC0z NTgwLDggKzM1NjAsNyBAQCBzdGF0aWMgdm9pZCBza2xfdXBkYXRlX290aGVyX3BpcGVfd20oc3Ry dWN0DQo+IGRybV9kZXZpY2UgKmRldiwNCj4gwqAJCWlmICghaW50ZWxfY3J0Yy0+YWN0aXZlKQ0K PiDCoAkJCWNvbnRpbnVlOw0KPiDCoA0KPiAtCQl3bV9jaGFuZ2VkID0gc2tsX3VwZGF0ZV9waXBl X3dtKCZpbnRlbF9jcnRjLT5iYXNlLA0KPiAtCQkJCQkJJnBhcmFtcywgY29uZmlnLA0KPiArCQl3 bV9jaGFuZ2VkID0gc2tsX3VwZGF0ZV9waXBlX3dtKCZpbnRlbF9jcnRjLT5iYXNlLA0KPiBjb25m aWcsDQo+IMKgCQkJCQkJJnItPmRkYiwgJnBpcGVfd20pOw0KPiDCoA0KPiDCoAkJLyoNCj4gQEAg LTM1OTEsNyArMzU3MCw3IEBAIHN0YXRpYyB2b2lkIHNrbF91cGRhdGVfb3RoZXJfcGlwZV93bShz dHJ1Y3QNCj4gZHJtX2RldmljZSAqZGV2LA0KPiDCoAkJwqAqLw0KPiDCoAkJV0FSTl9PTighd21f Y2hhbmdlZCk7DQo+IMKgDQo+IC0JCXNrbF9jb21wdXRlX3dtX3Jlc3VsdHMoZGV2LCAmcGFyYW1z LCAmcGlwZV93bSwgciwNCj4gaW50ZWxfY3J0Yyk7DQo+ICsJCXNrbF9jb21wdXRlX3dtX3Jlc3Vs dHMoZGV2LCAmcGlwZV93bSwgciwNCj4gaW50ZWxfY3J0Yyk7DQo+IMKgCQlyLT5kaXJ0eVtpbnRl bF9jcnRjLT5waXBlXSA9IHRydWU7DQo+IMKgCX0NCj4gwqB9DQo+IEBAIC0zNjIxLDcgKzM2MDAs NiBAQCBzdGF0aWMgdm9pZCBza2xfdXBkYXRlX3dtKHN0cnVjdCBkcm1fY3J0Yw0KPiAqY3J0YykN Cj4gwqAJc3RydWN0IGludGVsX2NydGMgKmludGVsX2NydGMgPSB0b19pbnRlbF9jcnRjKGNydGMp Ow0KPiDCoAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY3J0Yy0+ZGV2Ow0KPiDCoAlzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOw0KPiAtCXN0cnVj dCBza2xfcGlwZV93bV9wYXJhbWV0ZXJzIHBhcmFtcyA9IHt9Ow0KPiDCoAlzdHJ1Y3Qgc2tsX3dt X3ZhbHVlcyAqcmVzdWx0cyA9ICZkZXZfcHJpdi0+d20uc2tsX3Jlc3VsdHM7DQo+IMKgCXN0cnVj dCBza2xfcGlwZV93bSBwaXBlX3dtID0ge307DQo+IMKgCXN0cnVjdCBpbnRlbF93bV9jb25maWcg Y29uZmlnID0ge307DQo+IEBAIC0zNjM0LDExICszNjEyLDEwIEBAIHN0YXRpYyB2b2lkIHNrbF91 cGRhdGVfd20oc3RydWN0IGRybV9jcnRjDQo+ICpjcnRjKQ0KPiDCoA0KPiDCoAlza2xfY29tcHV0 ZV93bV9nbG9iYWxfcGFyYW1ldGVycyhkZXYsICZjb25maWcpOw0KPiDCoA0KPiAtCWlmICghc2ts X3VwZGF0ZV9waXBlX3dtKGNydGMsICZwYXJhbXMsICZjb25maWcsDQo+IC0JCQkJJnJlc3VsdHMt PmRkYiwgJnBpcGVfd20pKQ0KPiArCWlmICghc2tsX3VwZGF0ZV9waXBlX3dtKGNydGMsICZjb25m aWcsICZyZXN1bHRzLT5kZGIsDQo+ICZwaXBlX3dtKSkNCj4gwqAJCXJldHVybjsNCj4gwqANCj4g LQlza2xfY29tcHV0ZV93bV9yZXN1bHRzKGRldiwgJnBhcmFtcywgJnBpcGVfd20sIHJlc3VsdHMs DQo+IGludGVsX2NydGMpOw0KPiArCXNrbF9jb21wdXRlX3dtX3Jlc3VsdHMoZGV2LCAmcGlwZV93 bSwgcmVzdWx0cywgaW50ZWxfY3J0Yyk7DQo+IMKgCXJlc3VsdHMtPmRpcnR5W2ludGVsX2NydGMt PnBpcGVdID0gdHJ1ZTsNCj4gwqANCj4gwqAJc2tsX3VwZGF0ZV9vdGhlcl9waXBlX3dtKGRldiwg Y3J0YywgJmNvbmZpZywgcmVzdWx0cyk7Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZy ZWVkZXNrdG9wLm9yZwpodHRwOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGlu Zm8vaW50ZWwtZ2Z4Cg==