From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ville =?iso-8859-1?Q?Syrj=E4l=E4?= Subject: Re: [PATCH 12/15] drm/i915: Two stage watermarks for g4x Date: Mon, 24 Apr 2017 16:16:50 +0300 Message-ID: <20170424131650.GW30290@intel.com> References: <20170421181432.15216-1-ville.syrjala@linux.intel.com> <20170421181432.15216-13-ville.syrjala@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by gabe.freedesktop.org (Postfix) with ESMTPS id D3C9D6E09F for ; Mon, 24 Apr 2017 13:16:54 +0000 (UTC) Content-Disposition: inline In-Reply-To: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Maarten Lankhorst Cc: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gTW9uLCBBcHIgMjQsIDIwMTcgYXQgMDk6MzQ6NDJBTSArMDIwMCwgTWFhcnRlbiBMYW5raG9y c3Qgd3JvdGU6Cj4gT24gMjEtMDQtMTcgMjA6MTQsIHZpbGxlLnN5cmphbGFAbGludXguaW50ZWwu Y29tIHdyb3RlOgo+ID4gRnJvbTogVmlsbGUgU3lyasOkbMOkIDx2aWxsZS5zeXJqYWxhQGxpbnV4 LmludGVsLmNvbT4KPiA+Cj4gPiBJbXBsZW1lbnQgcHJvcGVyIHR3byBzdGFnZSB3YXRlcm1hcmsg cHJvZ3JhbW1pbmcgZm9yIGc0eC4gQXMgd2l0aAo+ID4gb3RoZXIgcHJlLVNLTCBwbGF0Zm9ybXMs IHRoZSB3YXRlcm1hcmsgcmVnaXN0ZXJzIGFyZW4ndCBkb3VibGUKPiA+IGJ1ZmZlcmVkIG9uIGc0 eC4gSGVuY2Ugd2UgbXVzdCBzZXF1ZW5jZSB0aGUgd2F0ZXJtYXJrIHVwZGF0ZQo+ID4gY2FyZWZ1 bGx5IGFyb3VuZCBwbGFuZSB1cGRhdGVzLgo+ID4KPiA+IFRoZSBjb2RlIGlzIHF1aXRlIGhlYXZp bHkgbW9kZWxsZWQgb24gdGhlIFZMVi9DSFYgY29kZSwgd2l0aCBzb21lCj4gPiBmYWlybHkgc2ln bmlmaWNhbnQgZGlmZmVyZW5jZXMgZHVlIHRvIHRoZSBkaWZmZXJlbnQgaGFyZHdhcmUKPiA+IGFy Y2hpdGVjdHVyZToKPiA+ICogZzR4IGRvZXNuJ3QgdXNlIGludmVydGVkIHdhdGVybWFyayB2YWx1 ZXMKPiA+ICogQ3hTUiBhY3R1YWxseSBhZmZlY3RzIHRoZSB3YXRlcm1hcmtzIHNpbmNlIGl0IGNv bnRyb2xzIG1lbW9yeSBzZWxmCj4gPiAgIHJlZnJlc2ggaW4gYWRkaXRpb24gdG8gdGhlIG1heCBG SUZPIG1vZGUKPiA+ICogQSBmdXJ0aGVyIEhQTEwgU1IgbW9kZSBpcyBwb3NzaWJsZSB3aXRoIGhp Z2hlciBtZW1vcnkgd2FrZXVwCj4gPiAgIGxhdGVuY3kKPiA+ICogZzR4IGhhcyBGQkMyIGFuZCBz byBpdCBhbHNvIGhhcyBGQkMgd2F0ZXJtYXJrcwo+ID4gKiBtYXggRklGTyBtb2RlIGZvciBwcmlt YXJ5IHBsYW5lIG9ubHkgKGN1cnNvciBpcyBhbGxvd2VkLCBzcHJpdGUgaXMgbm90KQo+ID4gKiBn NHggaGFzIG5vIG1hbnVhbCBGSUZPIHJlcGFydGl0aW9uaW5nCj4gPiAqIHNvbWUgVExCIG1pc3Mg cmVsYXRlZCB3b3JrYXJvdW5kcyBhcmUgbmVlZGVkIGZvciB0aGUgd2F0ZXJtYXJrcwo+ID4KPiA+ IEFjdHVhbGx5IHRoZSBoYXJkd2FyZSBpcyBxdWl0ZSBzaW1pbGFyIHRvIElMSysgaW4gbWFueSB3 YXlzLiBUaGUKPiA+IG1vc3QgdmlzaWJsZSBkaWZmZXJlbmNlcyBhcmUgaW4gdGhlIGFjdHVhbCB3 YXRlcm1ha3IgcmVnaXN0ZXIKPiA+IGxheW91dC4gSUxLIHJldmFtcGVkIHRoYXQgcGFydCBxdWl0 ZSBoZWF2aWx5IHdoZXJlYXMgZzR4IGlzIHN0aWxsCj4gPiB1c2luZyB0aGUgbGF5b3V0IGluaGVy aXRlZCBmcm9tIGVhcmxpZXIgcGxhdGZvcm1zLgo+ID4KPiA+IE5vdGUgdGhhdCB3ZSBkaWRuJ3Qg cHJldmlvdXNseSBlbmFibGUgdGhlIEhQTEwgU1Igb24gZzR4LiBTbyBpbiBvcmRlcgo+ID4gdG8g bm90IGludHJvZHVjZSB0b28gbWFueSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gdGhpcyBwYXRjaCBJ J3ZlIG5vdAo+ID4gYWN0dWFsbHkgZW5hYmxlZCBpdCBoZXJlIGVpdGhlciwgZXZlbiB0aG91Z2gg dGhlIGNvZGUgaXMgbm93IGZ1bGx5Cj4gPiByZWFkeSBmb3IgaXQuIFdlJ2xsIGVuYWJsZSBpdCBz ZXBhcmF0ZWx5IGxhdGVyIG9uLgo+ID4KPiA+IFNpZ25lZC1vZmYtYnk6IFZpbGxlIFN5cmrDpGzD pCA8dmlsbGUuc3lyamFsYUBsaW51eC5pbnRlbC5jb20+Cj4gPiAtLS0KPiA+ICBkcml2ZXJzL2dw dS9kcm0vaTkxNS9pOTE1X2RlYnVnZnMuYyAgfCAgMTIgKy0KPiA+ICBkcml2ZXJzL2dwdS9kcm0v aTkxNS9pOTE1X2Rydi5oICAgICAgfCAgMTIgKwo+ID4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2lu dGVsX2Rpc3BsYXkuYyB8ICAyNSArLQo+ID4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Ry di5oICAgICB8ICAyOCArKwo+ID4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3BtLmMgICAg ICB8IDk0MiArKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLQo+ID4gIDUgZmlsZXMg Y2hhbmdlZCwgNzkyIGluc2VydGlvbnMoKyksIDIyNyBkZWxldGlvbnMoLSkKPiA+Cj4gPiBkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kZWJ1Z2ZzLmMgYi9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pOTE1X2RlYnVnZnMuYwo+ID4gaW5kZXggODcwYzQ3MDE3N2I1Li42OTU1MGQz MTA5OWUgMTAwNjQ0Cj4gPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RlYnVnZnMu Ywo+ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kZWJ1Z2ZzLmMKPiA+IEBAIC0z ODk4LDYgKzM4OTgsOCBAQCBzdGF0aWMgdm9pZCB3bV9sYXRlbmN5X3Nob3coc3RydWN0IHNlcV9m aWxlICptLCBjb25zdCB1aW50MTZfdCB3bVs4XSkKPiA+ICAJCW51bV9sZXZlbHMgPSAzOwo+ID4g IAllbHNlIGlmIChJU19WQUxMRVlWSUVXKGRldl9wcml2KSkKPiA+ICAJCW51bV9sZXZlbHMgPSAx Owo+ID4gKwllbHNlIGlmIChJU19HNFgoZGV2X3ByaXYpKQo+ID4gKwkJbnVtX2xldmVscyA9IDM7 Cj4gPiAgCWVsc2UKPiA+ICAJCW51bV9sZXZlbHMgPSBpbGtfd21fbWF4X2xldmVsKGRldl9wcml2 KSArIDE7Cj4gPiAgCj4gPiBAQCAtMzkxMCw4ICszOTEyLDEwIEBAIHN0YXRpYyB2b2lkIHdtX2xh dGVuY3lfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIGNvbnN0IHVpbnQxNl90IHdtWzhdKQo+ID4g IAkJICogLSBXTTErIGxhdGVuY3kgdmFsdWVzIGluIDAuNXVzIHVuaXRzCj4gPiAgCQkgKiAtIGxh dGVuY2llcyBhcmUgaW4gdXMgb24gZ2VuOS92bHYvY2h2Cj4gPiAgCQkgKi8KPiA+IC0JCWlmIChJ TlRFTF9HRU4oZGV2X3ByaXYpID49IDkgfHwgSVNfVkFMTEVZVklFVyhkZXZfcHJpdikgfHwKPiA+ IC0JCSAgICBJU19DSEVSUllWSUVXKGRldl9wcml2KSkKPiA+ICsJCWlmIChJTlRFTF9HRU4oZGV2 X3ByaXYpID49IDkgfHwKPiA+ICsJCSAgICBJU19WQUxMRVlWSUVXKGRldl9wcml2KSB8fAo+ID4g KwkJICAgIElTX0NIRVJSWVZJRVcoZGV2X3ByaXYpIHx8Cj4gPiArCQkgICAgSVNfRzRYKGRldl9w cml2KSkKPiA+ICAJCQlsYXRlbmN5ICo9IDEwOwo+ID4gIAkJZWxzZSBpZiAobGV2ZWwgPiAwKQo+ ID4gIAkJCWxhdGVuY3kgKj0gNTsKPiA+IEBAIC0zOTcyLDcgKzM5NzYsNyBAQCBzdGF0aWMgaW50 IHByaV93bV9sYXRlbmN5X29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZp bGUpCj4gPiAgewo+ID4gIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBpbm9k ZS0+aV9wcml2YXRlOwo+ID4gIAo+ID4gLQlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA8IDUpCj4g PiArCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpIDwgNSAmJiAhSVNfRzRYKGRldl9wcml2KSkKPiA+ ICAJCXJldHVybiAtRU5PREVWOwo+ID4gIAo+ID4gIAlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwg cHJpX3dtX2xhdGVuY3lfc2hvdywgZGV2X3ByaXYpOwo+ID4gQEAgLTQwMTQsNiArNDAxOCw4IEBA IHN0YXRpYyBzc2l6ZV90IHdtX2xhdGVuY3lfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0 IGNoYXIgX191c2VyICp1YnVmLAo+ID4gIAkJbnVtX2xldmVscyA9IDM7Cj4gPiAgCWVsc2UgaWYg KElTX1ZBTExFWVZJRVcoZGV2X3ByaXYpKQo+ID4gIAkJbnVtX2xldmVscyA9IDE7Cj4gPiArCWVs c2UgaWYgKElTX0c0WChkZXZfcHJpdikpCj4gPiArCQludW1fbGV2ZWxzID0gMzsKPiA+ICAJZWxz ZQo+ID4gIAkJbnVtX2xldmVscyA9IGlsa193bV9tYXhfbGV2ZWwoZGV2X3ByaXYpICsgMTsKPiA+ ICAKPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oIGIvZHJp dmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAo+ID4gaW5kZXggMGEzOTNmZGM1M2QxLi42ZGY4 YmZmN2Y1YTcgMTAwNjQ0Cj4gPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5o Cj4gPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCj4gPiBAQCAtMTc2Miwx MSArMTc2MiwxMyBAQCBzdHJ1Y3QgaWxrX3dtX3ZhbHVlcyB7Cj4gPiAgCj4gPiAgc3RydWN0IGc0 eF9waXBlX3dtIHsKPiA+ICAJdWludDE2X3QgcGxhbmVbSTkxNV9NQVhfUExBTkVTXTsKPiA+ICsJ dWludDE2X3QgZmJjOwo+ID4gIH07Cj4gPiAgCj4gPiAgc3RydWN0IGc0eF9zcl93bSB7Cj4gPiAg CXVpbnQxNl90IHBsYW5lOwo+ID4gIAl1aW50MTZfdCBjdXJzb3I7Cj4gPiArCXVpbnQxNl90IGZi YzsKPiA+ICB9Owo+ID4gIAo+ID4gIHN0cnVjdCB2bHZfd21fZGRsX3ZhbHVlcyB7Cj4gPiBAQCAt MTc4MSw2ICsxNzgzLDE1IEBAIHN0cnVjdCB2bHZfd21fdmFsdWVzIHsKPiA+ICAJYm9vbCBjeHNy Owo+ID4gIH07Cj4gPiAgCj4gPiArc3RydWN0IGc0eF93bV92YWx1ZXMgewo+ID4gKwlzdHJ1Y3Qg ZzR4X3BpcGVfd20gcGlwZVsyXTsKPiA+ICsJc3RydWN0IGc0eF9zcl93bSBzcjsKPiA+ICsJc3Ry dWN0IGc0eF9zcl93bSBocGxsOwo+ID4gKwlib29sIGN4c3I7Cj4gPiArCWJvb2wgaHBsbF9lbjsK PiA+ICsJYm9vbCBmYmNfZW47Cj4gPiArfTsKPiA+ICsKPiA+ICBzdHJ1Y3Qgc2tsX2RkYl9lbnRy eSB7Cj4gPiAgCXVpbnQxNl90IHN0YXJ0LCBlbmQ7CS8qIGluIG51bWJlciBvZiBibG9ja3MsICdl bmQnIGlzIGV4Y2x1c2l2ZSAqLwo+ID4gIH07Cj4gPiBAQCAtMjQxMCw2ICsyNDIxLDcgQEAgc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgewo+ID4gIAkJCXN0cnVjdCBpbGtfd21fdmFsdWVzIGh3Owo+ ID4gIAkJCXN0cnVjdCBza2xfd21fdmFsdWVzIHNrbF9odzsKPiA+ICAJCQlzdHJ1Y3Qgdmx2X3dt X3ZhbHVlcyB2bHY7Cj4gPiArCQkJc3RydWN0IGc0eF93bV92YWx1ZXMgZzR4Owo+ID4gIAkJfTsK PiA+ICAKPiA+ICAJCXVpbnQ4X3QgbWF4X2xldmVsOwo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVs X2Rpc3BsYXkuYwo+ID4gaW5kZXggODViOWUyZjUyMWEwLi4wZjQyMjYzYzNmNzYgMTAwNjQ0Cj4g PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMKPiA+ICsrKyBiL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYwo+ID4gQEAgLTU3MTksNiArNTcxOSw4 IEBAIHN0YXRpYyB2b2lkIGk5eHhfc2V0X3BsbF9kaXZpZGVycyhzdHJ1Y3QgaW50ZWxfY3J0YyAq Y3J0YykKPiA+ICBzdGF0aWMgdm9pZCBpOXh4X2NydGNfZW5hYmxlKHN0cnVjdCBpbnRlbF9jcnRj X3N0YXRlICpwaXBlX2NvbmZpZywKPiA+ICAJCQkgICAgIHN0cnVjdCBkcm1fYXRvbWljX3N0YXRl ICpvbGRfc3RhdGUpCj4gPiAgewo+ID4gKwlzdHJ1Y3QgaW50ZWxfYXRvbWljX3N0YXRlICpvbGRf aW50ZWxfc3RhdGUgPQo+ID4gKwkJdG9faW50ZWxfYXRvbWljX3N0YXRlKG9sZF9zdGF0ZSk7Cj4g PiAgCXN0cnVjdCBkcm1fY3J0YyAqY3J0YyA9IHBpcGVfY29uZmlnLT5iYXNlLmNydGM7Cj4gPiAg CXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjLT5kZXY7Cj4gPiAgCXN0cnVjdCBkcm1faTkx NV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoZGV2KTsKPiA+IEBAIC01NzUxLDcgKzU3NTMs MTEgQEAgc3RhdGljIHZvaWQgaTl4eF9jcnRjX2VuYWJsZShzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0 ZSAqcGlwZV9jb25maWcsCj4gPiAgCj4gPiAgCWludGVsX2NvbG9yX2xvYWRfbHV0cygmcGlwZV9j b25maWctPmJhc2UpOwo+ID4gIAo+ID4gLQlpbnRlbF91cGRhdGVfd2F0ZXJtYXJrcyhpbnRlbF9j cnRjKTsKPiA+ICsJaWYgKGRldl9wcml2LT5kaXNwbGF5LmluaXRpYWxfd2F0ZXJtYXJrcyAhPSBO VUxMKQo+ID4gKwkJZGV2X3ByaXYtPmRpc3BsYXkuaW5pdGlhbF93YXRlcm1hcmtzKG9sZF9pbnRl bF9zdGF0ZSwKPiA+ICsJCQkJCQkgICAgIGludGVsX2NydGMtPmNvbmZpZyk7Cj4gPiArCWVsc2UK PiA+ICsJCWludGVsX3VwZGF0ZV93YXRlcm1hcmtzKGludGVsX2NydGMpOwo+ID4gIAlpbnRlbF9l bmFibGVfcGlwZShpbnRlbF9jcnRjKTsKPiA+ICAKPiA+ICAJYXNzZXJ0X3ZibGFua19kaXNhYmxl ZChjcnRjKTsKPiA+IEBAIC0xMDg1MiwyMSArMTA4NTgsMjEgQEAgaW50IGludGVsX3BsYW5lX2F0 b21pY19jYWxjX2NoYW5nZXMoc3RydWN0IGRybV9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAo+ID4g IAkJCSB0dXJuX29mZiwgdHVybl9vbiwgbW9kZV9jaGFuZ2VkKTsKPiA+ICAKPiA+ICAJaWYgKHR1 cm5fb24pIHsKPiA+IC0JCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpIDwgNSkKPiA+ICsJCWlmIChJ TlRFTF9HRU4oZGV2X3ByaXYpIDwgNSAmJiAhSVNfRzRYKGRldl9wcml2KSkKPiA+ICAJCQlwaXBl X2NvbmZpZy0+dXBkYXRlX3dtX3ByZSA9IHRydWU7Cj4gPiAgCj4gPiAgCQkvKiBtdXN0IGRpc2Fi bGUgY3hzciBhcm91bmQgcGxhbmUgZW5hYmxlL2Rpc2FibGUgKi8KPiA+ICAJCWlmIChwbGFuZS0+ aWQgIT0gUExBTkVfQ1VSU09SKQo+ID4gIAkJCXBpcGVfY29uZmlnLT5kaXNhYmxlX2N4c3IgPSB0 cnVlOwo+ID4gIAl9IGVsc2UgaWYgKHR1cm5fb2ZmKSB7Cj4gPiAtCQlpZiAoSU5URUxfR0VOKGRl dl9wcml2KSA8IDUpCj4gPiArCQlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA8IDUgJiYgIUlTX0c0 WChkZXZfcHJpdikpCj4gPiAgCQkJcGlwZV9jb25maWctPnVwZGF0ZV93bV9wb3N0ID0gdHJ1ZTsK PiA+ICAKPiA+ICAJCS8qIG11c3QgZGlzYWJsZSBjeHNyIGFyb3VuZCBwbGFuZSBlbmFibGUvZGlz YWJsZSAqLwo+ID4gIAkJaWYgKHBsYW5lLT5pZCAhPSBQTEFORV9DVVJTT1IpCj4gPiAgCQkJcGlw ZV9jb25maWctPmRpc2FibGVfY3hzciA9IHRydWU7Cj4gPiAgCX0gZWxzZSBpZiAoaW50ZWxfd21f bmVlZF91cGRhdGUoJnBsYW5lLT5iYXNlLCBwbGFuZV9zdGF0ZSkpIHsKPiA+IC0JCWlmIChJTlRF TF9HRU4oZGV2X3ByaXYpIDwgNSkgewo+ID4gKwkJaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPCA1 ICYmICFJU19HNFgoZGV2X3ByaXYpKSB7Cj4gPiAgCQkJLyogRklYTUUgYm9sbG9ja3MgKi8KPiA+ ICAJCQlwaXBlX2NvbmZpZy0+dXBkYXRlX3dtX3ByZSA9IHRydWU7Cj4gPiAgCQkJcGlwZV9jb25m aWctPnVwZGF0ZV93bV9wb3N0ID0gdHJ1ZTsKPiA+IEBAIC0xMTI5MCw3ICsxMTI5Niw4IEBAIGNs ZWFyX2ludGVsX2NydGNfc3RhdGUoc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUp Cj4gPiAgCXNoYXJlZF9kcGxsID0gY3J0Y19zdGF0ZS0+c2hhcmVkX2RwbGw7Cj4gPiAgCWRwbGxf aHdfc3RhdGUgPSBjcnRjX3N0YXRlLT5kcGxsX2h3X3N0YXRlOwo+ID4gIAlmb3JjZV90aHJ1ID0g Y3J0Y19zdGF0ZS0+cGNoX3BmaXQuZm9yY2VfdGhydTsKPiA+IC0JaWYgKElTX1ZBTExFWVZJRVco ZGV2X3ByaXYpIHx8IElTX0NIRVJSWVZJRVcoZGV2X3ByaXYpKQo+ID4gKwlpZiAoSVNfRzRYKGRl dl9wcml2KSB8fAo+ID4gKwkgICAgSVNfVkFMTEVZVklFVyhkZXZfcHJpdikgfHwgSVNfQ0hFUlJZ VklFVyhkZXZfcHJpdikpCj4gPiAgCQl3bV9zdGF0ZSA9IGNydGNfc3RhdGUtPndtOwo+ID4gIAo+ ID4gIAkvKiBLZWVwIGJhc2UgZHJtX2NydGNfc3RhdGUgaW50YWN0LCBvbmx5IGNsZWFyIG91ciBl eHRlbmRlZCBzdHJ1Y3QgKi8KPiA+IEBAIC0xMTMwMiw3ICsxMTMwOSw4IEBAIGNsZWFyX2ludGVs X2NydGNfc3RhdGUoc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUpCj4gPiAgCWNy dGNfc3RhdGUtPnNoYXJlZF9kcGxsID0gc2hhcmVkX2RwbGw7Cj4gPiAgCWNydGNfc3RhdGUtPmRw bGxfaHdfc3RhdGUgPSBkcGxsX2h3X3N0YXRlOwo+ID4gIAljcnRjX3N0YXRlLT5wY2hfcGZpdC5m b3JjZV90aHJ1ID0gZm9yY2VfdGhydTsKPiA+IC0JaWYgKElTX1ZBTExFWVZJRVcoZGV2X3ByaXYp IHx8IElTX0NIRVJSWVZJRVcoZGV2X3ByaXYpKQo+ID4gKwlpZiAoSVNfRzRYKGRldl9wcml2KSB8 fAo+ID4gKwkgICAgSVNfVkFMTEVZVklFVyhkZXZfcHJpdikgfHwgSVNfQ0hFUlJZVklFVyhkZXZf cHJpdikpCj4gPiAgCQljcnRjX3N0YXRlLT53bSA9IHdtX3N0YXRlOwo+ID4gIH0KPiA+ICAKPiA+ IEBAIC0xNTUyNyw3ICsxNTUzNSwxMCBAQCBpbnRlbF9tb2Rlc2V0X3NldHVwX2h3X3N0YXRlKHN0 cnVjdCBkcm1fZGV2aWNlICpkZXYpCj4gPiAgCQlwbGwtPm9uID0gZmFsc2U7Cj4gPiAgCX0KPiA+ ICAKPiA+IC0JaWYgKElTX1ZBTExFWVZJRVcoZGV2X3ByaXYpIHx8IElTX0NIRVJSWVZJRVcoZGV2 X3ByaXYpKSB7Cj4gPiArCWlmIChJU19HNFgoZGV2X3ByaXYpKSB7Cj4gPiArCQlnNHhfd21fZ2V0 X2h3X3N0YXRlKGRldik7Cj4gPiArCQlnNHhfd21fc2FuaXRpemUoZGV2X3ByaXYpOwo+ID4gKwl9 IGVsc2UgaWYgKElTX1ZBTExFWVZJRVcoZGV2X3ByaXYpIHx8IElTX0NIRVJSWVZJRVcoZGV2X3By aXYpKSB7Cj4gPiAgCQl2bHZfd21fZ2V0X2h3X3N0YXRlKGRldik7Cj4gPiAgCQl2bHZfd21fc2Fu aXRpemUoZGV2X3ByaXYpOwo+ID4gIAl9IGVsc2UgaWYgKElTX0dFTjkoZGV2X3ByaXYpKSB7Cj4g PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmggYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYuaAo+ID4gaW5kZXggZDFjZGQxMDk5OGZhLi5mNTMwZGY3 MWE0ODAgMTAwNjQ0Cj4gPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYuaAo+ ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmgKPiA+IEBAIC01MjIsNiAr NTIyLDIyIEBAIHN0cnVjdCB2bHZfZmlmb19zdGF0ZSB7Cj4gPiAgCXUxNiBwbGFuZVtJOTE1X01B WF9QTEFORVNdOwo+ID4gIH07Cj4gPiAgCj4gPiArZW51bSBnNHhfd21fbGV2ZWwgewo+ID4gKwlH NFhfV01fTEVWRUxfTk9STUFMLAo+ID4gKwlHNFhfV01fTEVWRUxfU1IsCj4gPiArCUc0WF9XTV9M RVZFTF9IUExMLAo+ID4gKwlOVU1fRzRYX1dNX0xFVkVMUywKPiA+ICt9Owo+ID4gKwo+ID4gK3N0 cnVjdCBnNHhfd21fc3RhdGUgewo+ID4gKwlzdHJ1Y3QgZzR4X3BpcGVfd20gd207Cj4gPiArCXN0 cnVjdCBnNHhfc3Jfd20gc3I7Cj4gPiArCXN0cnVjdCBnNHhfc3Jfd20gaHBsbDsKPiA+ICsJYm9v bCBjeHNyOwo+ID4gKwlib29sIGhwbGxfZW47Cj4gPiArCWJvb2wgZmJjX2VuOwo+ID4gK307Cj4g PiArCj4gPiAgc3RydWN0IGludGVsX2NydGNfd21fc3RhdGUgewo+ID4gIAl1bmlvbiB7Cj4gPiAg CQlzdHJ1Y3Qgewo+ID4gQEAgLTU1Nyw2ICs1NzMsMTUgQEAgc3RydWN0IGludGVsX2NydGNfd21f c3RhdGUgewo+ID4gIAkJCS8qIGRpc3BsYXkgRklGTyBzcGxpdCAqLwo+ID4gIAkJCXN0cnVjdCB2 bHZfZmlmb19zdGF0ZSBmaWZvX3N0YXRlOwo+ID4gIAkJfSB2bHY7Cj4gPiArCj4gPiArCQlzdHJ1 Y3Qgewo+ID4gKwkJCS8qICJyYXciIHdhdGVybWFya3MgKi8KPiA+ICsJCQlzdHJ1Y3QgZzR4X3Bp cGVfd20gcmF3W05VTV9HNFhfV01fTEVWRUxTXTsKPiA+ICsJCQkvKiBpbnRlcm1lZGlhdGUgd2F0 ZXJtYXJrcyAqLwo+ID4gKwkJCXN0cnVjdCBnNHhfd21fc3RhdGUgaW50ZXJtZWRpYXRlOwo+ID4g KwkJCS8qIG9wdGltYWwgd2F0ZXJtYXJrcyAqLwo+ID4gKwkJCXN0cnVjdCBnNHhfd21fc3RhdGUg b3B0aW1hbDsKPiA+ICsJCX0gZzR4Owo+ID4gIAl9Owo+ID4gIAo+ID4gIAkvKgo+ID4gQEAgLTc5 NCw2ICs4MTksNyBAQCBzdHJ1Y3QgaW50ZWxfY3J0YyB7Cj4gPiAgCQl1bmlvbiB7Cj4gPiAgCQkJ c3RydWN0IGludGVsX3BpcGVfd20gaWxrOwo+ID4gIAkJCXN0cnVjdCB2bHZfd21fc3RhdGUgdmx2 Owo+ID4gKwkJCXN0cnVjdCBnNHhfd21fc3RhdGUgZzR4Owo+ID4gIAkJfSBhY3RpdmU7Cj4gPiAg CX0gd207Cj4gPiAgCj4gPiBAQCAtMTg0MSw2ICsxODY3LDcgQEAgdm9pZCBnZW42X3Jwc19ib29z dChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4gPiAgCQkgICAgc3RydWN0IGlu dGVsX3Jwc19jbGllbnQgKnJwcywKPiA+ICAJCSAgICB1bnNpZ25lZCBsb25nIHN1Ym1pdHRlZCk7 Cj4gPiAgdm9pZCBpbnRlbF9xdWV1ZV9ycHNfYm9vc3RfZm9yX3JlcXVlc3Qoc3RydWN0IGRybV9p OTE1X2dlbV9yZXF1ZXN0ICpyZXEpOwo+ID4gK3ZvaWQgZzR4X3dtX2dldF9od19zdGF0ZShzdHJ1 Y3QgZHJtX2RldmljZSAqZGV2KTsKPiA+ICB2b2lkIHZsdl93bV9nZXRfaHdfc3RhdGUoc3RydWN0 IGRybV9kZXZpY2UgKmRldik7Cj4gPiAgdm9pZCBpbGtfd21fZ2V0X2h3X3N0YXRlKHN0cnVjdCBk cm1fZGV2aWNlICpkZXYpOwo+ID4gIHZvaWQgc2tsX3dtX2dldF9od19zdGF0ZShzdHJ1Y3QgZHJt X2RldmljZSAqZGV2KTsKPiA+IEBAIC0xODQ4LDYgKzE4NzUsNyBAQCB2b2lkIHNrbF9kZGJfZ2V0 X2h3X3N0YXRlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPiA+ICAJCQkgIHN0 cnVjdCBza2xfZGRiX2FsbG9jYXRpb24gKmRkYiAvKiBvdXQgKi8pOwo+ID4gIHZvaWQgc2tsX3Bp cGVfd21fZ2V0X2h3X3N0YXRlKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKPiA+ICAJCQkgICAgICBz dHJ1Y3Qgc2tsX3BpcGVfd20gKm91dCk7Cj4gPiArdm9pZCBnNHhfd21fc2FuaXRpemUoc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KTsKPiA+ICB2b2lkIHZsdl93bV9zYW5pdGl6ZShz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwo+ID4gIGJvb2wgaW50ZWxfY2FuX2Vu YWJsZV9zYWd2KHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSk7Cj4gPiAgaW50IGludGVs X2VuYWJsZV9zYWd2KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7Cj4gPiBkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcG0uYyBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2ludGVsX3BtLmMKPiA+IGluZGV4IDYxYjY3OTk0YzRhOC4uOWIwYTZhNDU3MmNlIDEw MDY0NAo+ID4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcG0uYwo+ID4gKysrIGIv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcG0uYwo+ID4gQEAgLTQyOSw3ICs0MjksMTAgQEAg Ym9vbCBpbnRlbF9zZXRfbWVtb3J5X2N4c3Ioc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9w cml2LCBib29sIGVuYWJsZSkKPiA+ICAKPiA+ICAJbXV0ZXhfbG9jaygmZGV2X3ByaXYtPndtLndt X211dGV4KTsKPiA+ICAJcmV0ID0gX2ludGVsX3NldF9tZW1vcnlfY3hzcihkZXZfcHJpdiwgZW5h YmxlKTsKPiA+IC0JZGV2X3ByaXYtPndtLnZsdi5jeHNyID0gZW5hYmxlOwo+ID4gKwlpZiAoSVNf VkFMTEVZVklFVyhkZXZfcHJpdikgfHwgSVNfQ0hFUlJZVklFVyhkZXZfcHJpdikpCj4gPiArCQlk ZXZfcHJpdi0+d20udmx2LmN4c3IgPSBlbmFibGU7Cj4gPiArCWVsc2UgaWYgKElTX0c0WChkZXZf cHJpdikpCj4gPiArCQlkZXZfcHJpdi0+d20uZzR4LmN4c3IgPSBlbmFibGU7Cj4gPiAgCW11dGV4 X3VubG9jaygmZGV2X3ByaXYtPndtLndtX211dGV4KTsKPiA+ICAKPiA+ICAJcmV0dXJuIHJldDsK PiA+IEBAIC01NjgsMjAgKzU3MSw2IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaW50ZWxfd2F0ZXJt YXJrX3BhcmFtcyBwaW5ldmlld19jdXJzb3JfaHBsbG9mZl93bSA9IHsKPiA+ICAJLmd1YXJkX3Np emUgPSBQSU5FVklFV19DVVJTT1JfR1VBUkRfV00sCj4gPiAgCS5jYWNoZWxpbmVfc2l6ZSA9IFBJ TkVWSUVXX0ZJRk9fTElORV9TSVpFLAo+ID4gIH07Cj4gPiAtc3RhdGljIGNvbnN0IHN0cnVjdCBp bnRlbF93YXRlcm1hcmtfcGFyYW1zIGc0eF93bV9pbmZvID0gewo+ID4gLQkuZmlmb19zaXplID0g RzRYX0ZJRk9fU0laRSwKPiA+IC0JLm1heF93bSA9IEc0WF9NQVhfV00sCj4gPiAtCS5kZWZhdWx0 X3dtID0gRzRYX01BWF9XTSwKPiA+IC0JLmd1YXJkX3NpemUgPSAyLAo+ID4gLQkuY2FjaGVsaW5l X3NpemUgPSBHNFhfRklGT19MSU5FX1NJWkUsCj4gPiAtfTsKPiA+IC1zdGF0aWMgY29uc3Qgc3Ry dWN0IGludGVsX3dhdGVybWFya19wYXJhbXMgZzR4X2N1cnNvcl93bV9pbmZvID0gewo+ID4gLQku Zmlmb19zaXplID0gSTk2NV9DVVJTT1JfRklGTywKPiA+IC0JLm1heF93bSA9IEk5NjVfQ1VSU09S X01BWF9XTSwKPiA+IC0JLmRlZmF1bHRfd20gPSBJOTY1X0NVUlNPUl9ERlRfV00sCj4gPiAtCS5n dWFyZF9zaXplID0gMiwKPiA+IC0JLmNhY2hlbGluZV9zaXplID0gRzRYX0ZJRk9fTElORV9TSVpF LAo+ID4gLX07Cj4gPiAgc3RhdGljIGNvbnN0IHN0cnVjdCBpbnRlbF93YXRlcm1hcmtfcGFyYW1z IGk5NjVfY3Vyc29yX3dtX2luZm8gPSB7Cj4gPiAgCS5maWZvX3NpemUgPSBJOTY1X0NVUlNPUl9G SUZPLAo+ID4gIAkubWF4X3dtID0gSTk2NV9DVVJTT1JfTUFYX1dNLAo+ID4gQEAgLTc4MCw2ICs3 NjksMTYgQEAgc3RhdGljIHVuc2lnbmVkIGludCBpbnRlbF9jYWxjdWxhdGVfd20oaW50IHBpeGVs X3JhdGUsCj4gPiAgCXJldHVybiB3bV9zaXplOwo+ID4gIH0KPiA+ICAKPiA+ICtzdGF0aWMgYm9v bCBpc19kaXNhYmxpbmcoaW50IG9sZCwgaW50IG5ldywgaW50IHRocmVzaG9sZCkKPiA+ICt7Cj4g PiArCXJldHVybiBvbGQgPj0gdGhyZXNob2xkICYmIG5ldyA8IHRocmVzaG9sZDsKPiA+ICt9Cj4g PiArCj4gPiArc3RhdGljIGJvb2wgaXNfZW5hYmxpbmcoaW50IG9sZCwgaW50IG5ldywgaW50IHRo cmVzaG9sZCkKPiA+ICt7Cj4gPiArCXJldHVybiBvbGQgPCB0aHJlc2hvbGQgJiYgbmV3ID49IHRo cmVzaG9sZDsKPiA+ICt9Cj4gPiArCj4gPiAgc3RhdGljIGludCBpbnRlbF93bV9udW1fbGV2ZWxz KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiA+ICB7Cj4gPiAgCXJldHVybiBk ZXZfcHJpdi0+d20ubWF4X2xldmVsICsgMTsKPiA+IEBAIC05MTEsMTM4ICs5MTAsMjggQEAgc3Rh dGljIGludCBnNHhfdGxiX21pc3Nfd2EoaW50IGZpZm9fc2l6ZSwgaW50IHdpZHRoLCBpbnQgY3Bw KQo+ID4gIAlyZXR1cm4gbWF4KDAsIHRsYl9taXNzKTsKPiA+ICB9Cj4gPiAgCj4gPiAtc3RhdGlj IGJvb2wgZzR4X2NvbXB1dGVfd20wKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwK PiA+IC0JCQkgICAgaW50IHBsYW5lLAo+ID4gLQkJCSAgICBjb25zdCBzdHJ1Y3QgaW50ZWxfd2F0 ZXJtYXJrX3BhcmFtcyAqZGlzcGxheSwKPiA+IC0JCQkgICAgaW50IGRpc3BsYXlfbGF0ZW5jeV9u cywKPiA+IC0JCQkgICAgY29uc3Qgc3RydWN0IGludGVsX3dhdGVybWFya19wYXJhbXMgKmN1cnNv ciwKPiA+IC0JCQkgICAgaW50IGN1cnNvcl9sYXRlbmN5X25zLAo+ID4gLQkJCSAgICBpbnQgKnBs YW5lX3dtLAo+ID4gLQkJCSAgICBpbnQgKmN1cnNvcl93bSkKPiA+ICtzdGF0aWMgdm9pZCBnNHhf d3JpdGVfd21fdmFsdWVzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPiA+ICsJ CQkJY29uc3Qgc3RydWN0IGc0eF93bV92YWx1ZXMgKndtKQo+ID4gIHsKPiA+IC0Jc3RydWN0IGlu dGVsX2NydGMgKmNydGM7Cj4gPiAtCWNvbnN0IHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICphZGp1 c3RlZF9tb2RlOwo+ID4gLQljb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYjsKPiA+IC0J aW50IGh0b3RhbCwgcGxhbmVfd2lkdGgsIGN1cnNvcl93aWR0aCwgY2xvY2ssIGNwcDsKPiA+IC0J aW50IGVudHJpZXM7Cj4gPiAtCj4gPiAtCWNydGMgPSBpbnRlbF9nZXRfY3J0Y19mb3JfcGxhbmUo ZGV2X3ByaXYsIHBsYW5lKTsKPiA+IC0JaWYgKCFpbnRlbF9jcnRjX2FjdGl2ZShjcnRjKSkgewo+ ID4gLQkJKmN1cnNvcl93bSA9IGN1cnNvci0+Z3VhcmRfc2l6ZTsKPiA+IC0JCSpwbGFuZV93bSA9 IGRpc3BsYXktPmd1YXJkX3NpemU7Cj4gPiAtCQlyZXR1cm4gZmFsc2U7Cj4gPiAtCX0KPiA+IC0K PiA+IC0JYWRqdXN0ZWRfbW9kZSA9ICZjcnRjLT5jb25maWctPmJhc2UuYWRqdXN0ZWRfbW9kZTsK PiA+IC0JZmIgPSBjcnRjLT5iYXNlLnByaW1hcnktPnN0YXRlLT5mYjsKPiA+IC0JY2xvY2sgPSBh ZGp1c3RlZF9tb2RlLT5jcnRjX2Nsb2NrOwo+ID4gLQlodG90YWwgPSBhZGp1c3RlZF9tb2RlLT5j cnRjX2h0b3RhbDsKPiA+IC0JcGxhbmVfd2lkdGggPSBjcnRjLT5jb25maWctPnBpcGVfc3JjX3c7 Cj4gPiAtCWN1cnNvcl93aWR0aCA9IGNydGMtPmJhc2UuY3Vyc29yLT5zdGF0ZS0+Y3J0Y193Owo+ ID4gLQljcHAgPSBmYi0+Zm9ybWF0LT5jcHBbMF07Cj4gPiAtCj4gPiAtCS8qIFVzZSB0aGUgc21h bGwgYnVmZmVyIG1ldGhvZCB0byBjYWxjdWxhdGUgcGxhbmUgd2F0ZXJtYXJrICovCj4gPiAtCWVu dHJpZXMgPSBpbnRlbF93bV9tZXRob2QxKGNsb2NrLCBjcHAsIGRpc3BsYXlfbGF0ZW5jeV9ucyAv IDEwMCk7Cj4gPiAtCWVudHJpZXMgKz0gZzR4X3RsYl9taXNzX3dhKGRpc3BsYXktPmZpZm9fc2l6 ZSwgcGxhbmVfd2lkdGgsIGNwcCk7Cj4gPiAtCWVudHJpZXMgPSBESVZfUk9VTkRfVVAoZW50cmll cywgZGlzcGxheS0+Y2FjaGVsaW5lX3NpemUpOwo+ID4gLQkqcGxhbmVfd20gPSBlbnRyaWVzICsg ZGlzcGxheS0+Z3VhcmRfc2l6ZTsKPiA+IC0JaWYgKCpwbGFuZV93bSA+IChpbnQpZGlzcGxheS0+ bWF4X3dtKQo+ID4gLQkJKnBsYW5lX3dtID0gZGlzcGxheS0+bWF4X3dtOwo+ID4gLQo+ID4gLQkv KiBVc2UgdGhlIGxhcmdlIGJ1ZmZlciBtZXRob2QgdG8gY2FsY3VsYXRlIGN1cnNvciB3YXRlcm1h cmsgKi8KPiA+IC0JZW50cmllcyA9IGludGVsX3dtX21ldGhvZDIoY2xvY2ssIGh0b3RhbCwgY3Vy c29yX3dpZHRoLCA0LAo+ID4gLQkJCQkgICBjdXJzb3JfbGF0ZW5jeV9ucyAvIDEwMCk7Cj4gPiAt CWVudHJpZXMgKz0gZzR4X3RsYl9taXNzX3dhKGN1cnNvci0+Zmlmb19zaXplLCBjdXJzb3Jfd2lk dGgsIDQpOwo+ID4gLQllbnRyaWVzID0gRElWX1JPVU5EX1VQKGVudHJpZXMsIGN1cnNvci0+Y2Fj aGVsaW5lX3NpemUpOwo+ID4gLQkqY3Vyc29yX3dtID0gZW50cmllcyArIGN1cnNvci0+Z3VhcmRf c2l6ZTsKPiA+IC0JaWYgKCpjdXJzb3Jfd20gPiAoaW50KWN1cnNvci0+bWF4X3dtKQo+ID4gLQkJ KmN1cnNvcl93bSA9IChpbnQpY3Vyc29yLT5tYXhfd207Cj4gPiAtCj4gPiAtCXJldHVybiB0cnVl Owo+ID4gLX0KPiA+IC0KPiA+IC0vKgo+ID4gLSAqIENoZWNrIHRoZSB3bSByZXN1bHQuCj4gPiAt ICoKPiA+IC0gKiBJZiBhbnkgY2FsY3VsYXRlZCB3YXRlcm1hcmsgdmFsdWVzIGlzIGxhcmdlciB0 aGFuIHRoZSBtYXhpbXVtIHZhbHVlIHRoYXQKPiA+IC0gKiBjYW4gYmUgcHJvZ3JhbW1lZCBpbnRv IHRoZSBhc3NvY2lhdGVkIHdhdGVybWFyayByZWdpc3RlciwgdGhhdCB3YXRlcm1hcmsKPiA+IC0g KiBtdXN0IGJlIGRpc2FibGVkLgo+ID4gLSAqLwo+ID4gLXN0YXRpYyBib29sIGc0eF9jaGVja19z cndtKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPiA+IC0JCQkgICBpbnQgZGlz cGxheV93bSwgaW50IGN1cnNvcl93bSwKPiA+IC0JCQkgICBjb25zdCBzdHJ1Y3QgaW50ZWxfd2F0 ZXJtYXJrX3BhcmFtcyAqZGlzcGxheSwKPiA+IC0JCQkgICBjb25zdCBzdHJ1Y3QgaW50ZWxfd2F0 ZXJtYXJrX3BhcmFtcyAqY3Vyc29yKQo+ID4gLXsKPiA+IC0JRFJNX0RFQlVHX0tNUygiU1Igd2F0 ZXJtYXJrOiBkaXNwbGF5IHBsYW5lICVkLCBjdXJzb3IgJWRcbiIsCj4gPiAtCQkgICAgICBkaXNw bGF5X3dtLCBjdXJzb3Jfd20pOwo+ID4gLQo+ID4gLQlpZiAoZGlzcGxheV93bSA+IGRpc3BsYXkt Pm1heF93bSkgewo+ID4gLQkJRFJNX0RFQlVHX0tNUygiZGlzcGxheSB3YXRlcm1hcmsgaXMgdG9v IGxhcmdlKCVkLyV1KSwgZGlzYWJsaW5nXG4iLAo+ID4gLQkJCSAgICAgIGRpc3BsYXlfd20sIGRp c3BsYXktPm1heF93bSk7Cj4gPiAtCQlyZXR1cm4gZmFsc2U7Cj4gPiAtCX0KPiA+IC0KPiA+IC0J aWYgKGN1cnNvcl93bSA+IGN1cnNvci0+bWF4X3dtKSB7Cj4gPiAtCQlEUk1fREVCVUdfS01TKCJj dXJzb3Igd2F0ZXJtYXJrIGlzIHRvbyBsYXJnZSglZC8ldSksIGRpc2FibGluZ1xuIiwKPiA+IC0J CQkgICAgICBjdXJzb3Jfd20sIGN1cnNvci0+bWF4X3dtKTsKPiA+IC0JCXJldHVybiBmYWxzZTsK PiA+IC0JfQo+ID4gLQo+ID4gLQlpZiAoIShkaXNwbGF5X3dtIHx8IGN1cnNvcl93bSkpIHsKPiA+ IC0JCURSTV9ERUJVR19LTVMoIlNSIGxhdGVuY3kgaXMgMCwgZGlzYWJsaW5nXG4iKTsKPiA+IC0J CXJldHVybiBmYWxzZTsKPiA+IC0JfQo+ID4gLQo+ID4gLQlyZXR1cm4gdHJ1ZTsKPiA+IC19Cj4g PiAtCj4gPiAtc3RhdGljIGJvb2wgZzR4X2NvbXB1dGVfc3J3bShzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqZGV2X3ByaXYsCj4gPiAtCQkJICAgICBpbnQgcGxhbmUsCj4gPiAtCQkJICAgICBpbnQg bGF0ZW5jeV9ucywKPiA+IC0JCQkgICAgIGNvbnN0IHN0cnVjdCBpbnRlbF93YXRlcm1hcmtfcGFy YW1zICpkaXNwbGF5LAo+ID4gLQkJCSAgICAgY29uc3Qgc3RydWN0IGludGVsX3dhdGVybWFya19w YXJhbXMgKmN1cnNvciwKPiA+IC0JCQkgICAgIGludCAqZGlzcGxheV93bSwgaW50ICpjdXJzb3Jf d20pCj4gPiAtewo+ID4gLQlzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YzsKPiA+IC0JY29uc3Qgc3Ry dWN0IGRybV9kaXNwbGF5X21vZGUgKmFkanVzdGVkX21vZGU7Cj4gPiAtCWNvbnN0IHN0cnVjdCBk cm1fZnJhbWVidWZmZXIgKmZiOwo+ID4gLQlpbnQgcGxhbmVfd2lkdGgsIGN1cnNvcl93aWR0aCwg aHRvdGFsLCBjcHAsIGNsb2NrOwo+ID4gLQlpbnQgc21hbGwsIGxhcmdlOwo+ID4gLQlpbnQgZW50 cmllczsKPiA+IC0KPiA+IC0JaWYgKCFsYXRlbmN5X25zKSB7Cj4gPiAtCQkqZGlzcGxheV93bSA9 ICpjdXJzb3Jfd20gPSAwOwo+ID4gLQkJcmV0dXJuIGZhbHNlOwo+ID4gLQl9Cj4gPiAtCj4gPiAt CWNydGMgPSBpbnRlbF9nZXRfY3J0Y19mb3JfcGxhbmUoZGV2X3ByaXYsIHBsYW5lKTsKPiA+IC0J YWRqdXN0ZWRfbW9kZSA9ICZjcnRjLT5jb25maWctPmJhc2UuYWRqdXN0ZWRfbW9kZTsKPiA+IC0J ZmIgPSBjcnRjLT5iYXNlLnByaW1hcnktPnN0YXRlLT5mYjsKPiA+IC0JY2xvY2sgPSBhZGp1c3Rl ZF9tb2RlLT5jcnRjX2Nsb2NrOwo+ID4gLQlodG90YWwgPSBhZGp1c3RlZF9tb2RlLT5jcnRjX2h0 b3RhbDsKPiA+IC0JcGxhbmVfd2lkdGggPSBjcnRjLT5jb25maWctPnBpcGVfc3JjX3c7Cj4gPiAt CWN1cnNvcl93aWR0aCA9IGNydGMtPmJhc2UuY3Vyc29yLT5zdGF0ZS0+Y3J0Y193Owo+ID4gLQlj cHAgPSBmYi0+Zm9ybWF0LT5jcHBbMF07Cj4gPiAtCj4gPiAtCS8qIFVzZSB0aGUgbWluaW11bSBv ZiB0aGUgc21hbGwgYW5kIGxhcmdlIGJ1ZmZlciBtZXRob2QgZm9yIHByaW1hcnkgKi8KPiA+IC0J c21hbGwgPSBpbnRlbF93bV9tZXRob2QxKGNsb2NrLCBjcHAsIGxhdGVuY3lfbnMgLyAxMDApOwo+ ID4gLQlsYXJnZSA9IGludGVsX3dtX21ldGhvZDIoY2xvY2ssIGh0b3RhbCwgcGxhbmVfd2lkdGgs IGNwcCwKPiA+IC0JCQkJIGxhdGVuY3lfbnMgLyAxMDApOwo+ID4gLQllbnRyaWVzID0gbWluKHNt YWxsLCBsYXJnZSk7Cj4gPiAtCWVudHJpZXMgKz0gZzR4X3RsYl9taXNzX3dhKGRpc3BsYXktPmZp Zm9fc2l6ZSwgcGxhbmVfd2lkdGgsIGNwcCk7Cj4gPiAtCWVudHJpZXMgPSBESVZfUk9VTkRfVVAo ZW50cmllcywgZGlzcGxheS0+Y2FjaGVsaW5lX3NpemUpOwo+ID4gLQkqZGlzcGxheV93bSA9IGVu dHJpZXMgKyBkaXNwbGF5LT5ndWFyZF9zaXplOwo+ID4gLQo+ID4gLQkvKiBjYWxjdWxhdGUgdGhl IHNlbGYtcmVmcmVzaCB3YXRlcm1hcmsgZm9yIGRpc3BsYXkgY3Vyc29yICovCj4gPiAtCWVudHJp ZXMgPSBpbnRlbF93bV9tZXRob2QyKGNsb2NrLCBodG90YWwsIGN1cnNvcl93aWR0aCwgNCwKPiA+ IC0JCQkJICAgbGF0ZW5jeV9ucyAvIDEwMCk7Cj4gPiAtCWVudHJpZXMgKz0gZzR4X3RsYl9taXNz X3dhKGN1cnNvci0+Zmlmb19zaXplLCBjdXJzb3Jfd2lkdGgsIDQpOwo+ID4gLQllbnRyaWVzID0g RElWX1JPVU5EX1VQKGVudHJpZXMsIGN1cnNvci0+Y2FjaGVsaW5lX3NpemUpOwo+ID4gLQkqY3Vy c29yX3dtID0gZW50cmllcyArIGN1cnNvci0+Z3VhcmRfc2l6ZTsKPiA+IC0KPiA+IC0JcmV0dXJu IGc0eF9jaGVja19zcndtKGRldl9wcml2LAo+ID4gLQkJCSAgICAgICpkaXNwbGF5X3dtLCAqY3Vy c29yX3dtLAo+ID4gLQkJCSAgICAgIGRpc3BsYXksIGN1cnNvcik7Cj4gPiArCUk5MTVfV1JJVEUo RFNQRlcxLAo+ID4gKwkJICAgRldfV00od20tPnNyLnBsYW5lLCBTUikgfAo+ID4gKwkJICAgRldf V00od20tPnBpcGVbUElQRV9CXS5wbGFuZVtQTEFORV9DVVJTT1JdLCBDVVJTT1JCKSB8Cj4gPiAr CQkgICBGV19XTSh3bS0+cGlwZVtQSVBFX0JdLnBsYW5lW1BMQU5FX1BSSU1BUlldLCBQTEFORUIp IHwKPiA+ICsJCSAgIEZXX1dNKHdtLT5waXBlW1BJUEVfQV0ucGxhbmVbUExBTkVfUFJJTUFSWV0s IFBMQU5FQSkpOwo+ID4gKwlJOTE1X1dSSVRFKERTUEZXMiwKPiA+ICsJCSAgICh3bS0+ZmJjX2Vu ID8gRFNQRldfRkJDX1NSX0VOIDogMCkgfAo+ID4gKwkJICAgRldfV00od20tPnNyLmZiYywgRkJD X1NSKSB8Cj4gPiArCQkgICBGV19XTSh3bS0+aHBsbC5mYmMsIEZCQ19IUExMX1NSKSB8Cj4gPiAr CQkgICBGV19XTSh3bS0+cGlwZVtQSVBFX0JdLnBsYW5lW1BMQU5FX1NQUklURTBdLCBTUFJJVEVC KSB8Cj4gPiArCQkgICBGV19XTSh3bS0+cGlwZVtQSVBFX0FdLnBsYW5lW1BMQU5FX0NVUlNPUl0s IENVUlNPUkEpIHwKPiA+ICsJCSAgIEZXX1dNKHdtLT5waXBlW1BJUEVfQV0ucGxhbmVbUExBTkVf U1BSSVRFMF0sIFNQUklURUEpKTsKPiA+ICsJSTkxNV9XUklURShEU1BGVzMsCj4gPiArCQkgICAo d20tPmhwbGxfZW4gPyBEU1BGV19IUExMX1NSX0VOIDogMCkgfAo+ID4gKwkJICAgRldfV00od20t PnNyLmN1cnNvciwgQ1VSU09SX1NSKSB8Cj4gPiArCQkgICBGV19XTSh3bS0+aHBsbC5jdXJzb3Is IEhQTExfQ1VSU09SKSB8Cj4gPiArCQkgICBGV19XTSh3bS0+aHBsbC5wbGFuZSwgSFBMTF9TUikp Owo+ID4gKwo+ID4gKwlQT1NUSU5HX1JFQUQoRFNQRlcxKTsKPiA+ICB9Cj4gPiAgCj4gPiAgI2Rl ZmluZSBGV19XTV9WTFYodmFsdWUsIHBsYW5lKSBcCj4gPiBAQCAtMTEyNiw2ICsxMDE1LDUyMyBA QCBzdGF0aWMgdm9pZCB2bHZfd3JpdGVfd21fdmFsdWVzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICpkZXZfcHJpdiwKPiA+ICAKPiA+ICAjdW5kZWYgRldfV01fVkxWCj4gPiAgCj4gPiArc3RhdGlj IHZvaWQgZzR4X3NldHVwX3dtX2xhdGVuY3koc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9w cml2KQo+ID4gK3sKPiA+ICsJLyogYWxsIGxhdGVuY2llcyBpbiB1c2VjICovCj4gPiArCWRldl9w cml2LT53bS5wcmlfbGF0ZW5jeVtHNFhfV01fTEVWRUxfTk9STUFMXSA9IDU7Cj4gPiArCWRldl9w cml2LT53bS5wcmlfbGF0ZW5jeVtHNFhfV01fTEVWRUxfU1JdID0gMTI7Cj4gPiArCj4gPiArCWRl dl9wcml2LT53bS5tYXhfbGV2ZWwgPSBHNFhfV01fTEVWRUxfU1I7Cj4gPiArfQo+ID4gKwo+ID4g K3N0YXRpYyBpbnQgZzR4X3BsYW5lX2ZpZm9fc2l6ZShlbnVtIHBsYW5lX2lkIHBsYW5lX2lkLCBp bnQgbGV2ZWwpCj4gPiArewo+ID4gKwkvKgo+ID4gKwkgKiBEU1BDTlRSWzEzXSBzdXBwb3NlZGx5 IGNvbnRyb2xzIHdoZXRoZXIgdGhlCj4gPiArCSAqIHByaW1hcnkgcGxhbmUgY2FuIHVzZSB0aGUg RklGTyBzcGFjZSBvdGhlcndpc2UKPiA+ICsJICogcmVzZXJ2ZWQgZm9yIHRoZSBzcHJpdGUgcGxh bmUuIEl0J3Mgbm90IDEwMCUgY2xlYXIKPiA+ICsJICogd2hhdCB0aGUgYWN0dWFsIEZJRk8gc2l6 ZSBpcywgYnV0IGl0IGxvb2tzIGxpa2Ugd2UKPiA+ICsJICogY2FuIGhhcHBpbHkgc2V0IGJvdGgg cHJpbWFyeSBhbmQgc3ByaXRlIHdhdGVybWFya3MKPiA+ICsJICogdXAgdG8gMTI3IGNhY2hlbGlu ZXMuIFNvIHRoYXQgd291bGQgc2VlbSB0byBtZWFuCj4gPiArCSAqIHRoYXQgZWl0aGVyIERTUENO VFJbMTNdIGRvZXNuJ3QgZG8gYW55dGhpbmcsIG9yIHRoYXQKPiA+ICsJICogdGhlIHRvdGFsIEZJ Rk8gaXMgPj0gMjU2IGNhY2hlbGluZXMgaW4gc2l6ZS4gRWl0aGVyCj4gPiArCSAqIHdheSwgd2Ug ZG9uJ3Qgc2VlbSB0byBoYXZlIHRvIHdvcnJ5IGFib3V0IHRoaXMKPiA+ICsJICogcmVwYXJ0aXRp b25pbmcgYXMgdGhlIG1heGltdW0gd2F0ZXJtYXJrIHZhbHVlIHRoZQo+ID4gKwkgKiByZWdpc3Rl ciBjYW4gaG9sZCBmb3IgZWFjaCBwbGFuZSBpcyBsb3dlciB0aGFuIHRoZQo+ID4gKwkgKiBtaW5p bXVtIEZJRk8gc2l6ZS4KPiA+ICsJICovCj4gPiArCXN3aXRjaCAocGxhbmVfaWQpIHsKPiA+ICsJ Y2FzZSBQTEFORV9DVVJTT1I6Cj4gPiArCQlyZXR1cm4gNjM7Cj4gPiArCWNhc2UgUExBTkVfUFJJ TUFSWToKPiA+ICsJCXJldHVybiBsZXZlbCA9PSBHNFhfV01fTEVWRUxfTk9STUFMID8gMTI3IDog NTExOwo+ID4gKwljYXNlIFBMQU5FX1NQUklURTA6Cj4gPiArCQlyZXR1cm4gbGV2ZWwgPT0gRzRY X1dNX0xFVkVMX05PUk1BTCA/IDEyNyA6IDA7Cj4gPiArCWRlZmF1bHQ6Cj4gPiArCQlNSVNTSU5H X0NBU0UocGxhbmVfaWQpOwo+ID4gKwkJcmV0dXJuIDA7Cj4gPiArCX0KPiA+ICt9Cj4gPiArCj4g PiArc3RhdGljIGludCBnNHhfZmJjX2ZpZm9fc2l6ZShpbnQgbGV2ZWwpCj4gPiArewo+ID4gKwlz d2l0Y2ggKGxldmVsKSB7Cj4gPiArCWNhc2UgRzRYX1dNX0xFVkVMX1NSOgo+ID4gKwkJcmV0dXJu IDc7Cj4gPiArCWNhc2UgRzRYX1dNX0xFVkVMX0hQTEw6Cj4gPiArCQlyZXR1cm4gMTU7Cj4gPiAr CWRlZmF1bHQ6Cj4gPiArCQlNSVNTSU5HX0NBU0UobGV2ZWwpOwo+ID4gKwkJcmV0dXJuIDA7Cj4g PiArCX0KPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIHVpbnQxNl90IGc0eF9jb21wdXRlX3dtKGNv bnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAo+ID4gKwkJCSAgICAgICBj b25zdCBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlLAo+ID4gKwkJCSAgICAg ICBpbnQgbGV2ZWwpCj4gPiArewo+ID4gKwlzdHJ1Y3QgaW50ZWxfcGxhbmUgKnBsYW5lID0gdG9f aW50ZWxfcGxhbmUocGxhbmVfc3RhdGUtPmJhc2UucGxhbmUpOwo+ID4gKwlzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KHBsYW5lLT5iYXNlLmRldik7Cj4gPiArCWNv bnN0IHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICphZGp1c3RlZF9tb2RlID0KPiA+ICsJCSZjcnRj X3N0YXRlLT5iYXNlLmFkanVzdGVkX21vZGU7Cj4gPiArCWludCBjbG9jaywgaHRvdGFsLCBjcHAs IHdpZHRoLCB3bTsKPiA+ICsJaW50IGxhdGVuY3kgPSBkZXZfcHJpdi0+d20ucHJpX2xhdGVuY3lb bGV2ZWxdICogMTA7Cj4gPiArCj4gPiArCWlmIChsYXRlbmN5ID09IDApCj4gPiArCQlyZXR1cm4g VVNIUlRfTUFYOwo+ID4gKwo+ID4gKwlpZiAoIWludGVsX3dtX3BsYW5lX3Zpc2libGUoY3J0Y19z dGF0ZSwgcGxhbmVfc3RhdGUpKQo+ID4gKwkJcmV0dXJuIDA7Cj4gPiArCj4gPiArCS8qCj4gPiAr CSAqIE5vdCAxMDAlIHN1cmUgd2hpY2ggd2F5IEVMSyBzaG91bGQgZ28gaGVyZSBhcyB0aGUKPiA+ ICsJICogc3BlYyBvbmx5IHNheXMgQ0wvQ1RHIHNob3VsZCBhc3N1bWUgMzJicHAgYW5kIEJXCj4g PiArCSAqIGRvZXNuJ3QgbmVlZCB0by4gQnV0IGFzIHRoZXNlIHRoaW5ncyBmb2xsb3dlZCB0aGUK PiA+ICsJICogbW9iaWxlIHZzLiBkZXNrdG9wIGxpbmVzIG9uIGdlbjMgYXMgd2VsbCwgbGV0J3MK PiA+ICsJICogYXNzdW1lIEVMSyBkb2Vzbid0IG5lZWQgdGhpcy4KPiA+ICsJICoKPiA+ICsJICog VGhlIHNwZWMgYWxzbyBmYWlscyB0byBsaXN0IHN1Y2ggYSByZXN0cmljdGlvbiBmb3IKPiA+ICsJ ICogdGhlIEhQTEwgd2F0ZXJtYXJrLCB3aGljaCBzZWVtcyBhIGxpdHRsZSBzdHJhbmdlLgo+ID4g KwkgKiBMZXQncyB1c2UgMzJicHAgZm9yIHRoZSBIUExMIHdhdGVybWFyayBhcyB3ZWxsLgo+ID4g KwkgKi8KPiA+ICsJaWYgKElTX0dNNDUoZGV2X3ByaXYpICYmIHBsYW5lLT5pZCA9PSBQTEFORV9Q UklNQVJZICYmCj4gPiArCSAgICBsZXZlbCAhPSBHNFhfV01fTEVWRUxfTk9STUFMKQo+ID4gKwkJ Y3BwID0gNDsKPiA+ICsJZWxzZQo+ID4gKwkJY3BwID0gcGxhbmVfc3RhdGUtPmJhc2UuZmItPmZv cm1hdC0+Y3BwWzBdOwo+ID4gKwo+ID4gKwljbG9jayA9IGFkanVzdGVkX21vZGUtPmNydGNfY2xv Y2s7Cj4gPiArCWh0b3RhbCA9IGFkanVzdGVkX21vZGUtPmNydGNfaHRvdGFsOwo+ID4gKwo+ID4g KwlpZiAocGxhbmUtPmlkID09IFBMQU5FX0NVUlNPUikKPiA+ICsJCXdpZHRoID0gcGxhbmVfc3Rh dGUtPmJhc2UuY3J0Y193Owo+ID4gKwllbHNlCj4gPiArCQl3aWR0aCA9IGRybV9yZWN0X3dpZHRo KCZwbGFuZV9zdGF0ZS0+YmFzZS5kc3QpOwo+ID4gKwo+ID4gKwlpZiAocGxhbmUtPmlkID09IFBM QU5FX0NVUlNPUikgewo+ID4gKwkJd20gPSBpbnRlbF93bV9tZXRob2QyKGNsb2NrLCBodG90YWws IHdpZHRoLCBjcHAsIGxhdGVuY3kpOwo+ID4gKwl9IGVsc2UgaWYgKHBsYW5lLT5pZCA9PSBQTEFO RV9QUklNQVJZICYmCj4gPiArCQkgICBsZXZlbCA9PSBHNFhfV01fTEVWRUxfTk9STUFMKSB7Cj4g PiArCQl3bSA9IGludGVsX3dtX21ldGhvZDEoY2xvY2ssIGNwcCwgbGF0ZW5jeSk7Cj4gPiArCX0g ZWxzZSB7Cj4gPiArCQlpbnQgc21hbGwsIGxhcmdlOwo+ID4gKwo+ID4gKwkJc21hbGwgPSBpbnRl bF93bV9tZXRob2QxKGNsb2NrLCBjcHAsIGxhdGVuY3kpOwo+ID4gKwkJbGFyZ2UgPSBpbnRlbF93 bV9tZXRob2QyKGNsb2NrLCBodG90YWwsIHdpZHRoLCBjcHAsIGxhdGVuY3kpOwo+ID4gKwo+ID4g KwkJd20gPSBtaW4oc21hbGwsIGxhcmdlKTsKPiA+ICsJfQo+ID4gKwo+ID4gKwl3bSArPSBnNHhf dGxiX21pc3Nfd2EoZzR4X3BsYW5lX2ZpZm9fc2l6ZShwbGFuZS0+aWQsIGxldmVsKSwKPiA+ICsJ CQkgICAgICB3aWR0aCwgY3BwKTsKPiA+ICsKPiA+ICsJd20gPSBESVZfUk9VTkRfVVAod20sIDY0 KSArIDI7Cj4gPiArCj4gPiArCXJldHVybiBtaW5fdChpbnQsIHdtLCBVU0hSVF9NQVgpOwo+ID4g K30KPiA+ICsKPiA+ICtzdGF0aWMgYm9vbCBnNHhfcmF3X3BsYW5lX3dtX3NldChzdHJ1Y3QgaW50 ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKPiA+ICsJCQkJIGludCBsZXZlbCwgZW51bSBwbGFu ZV9pZCBwbGFuZV9pZCwgdTE2IHZhbHVlKQo+ID4gK3sKPiA+ICsJc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShjcnRjX3N0YXRlLT5iYXNlLmNydGMtPmRldik7Cj4g PiArCWJvb2wgZGlydHkgPSBmYWxzZTsKPiA+ICsKPiA+ICsJZm9yICg7IGxldmVsIDwgaW50ZWxf d21fbnVtX2xldmVscyhkZXZfcHJpdik7IGxldmVsKyspIHsKPiA+ICsJCXN0cnVjdCBnNHhfcGlw ZV93bSAqcmF3ID0gJmNydGNfc3RhdGUtPndtLmc0eC5yYXdbbGV2ZWxdOwo+ID4gKwo+ID4gKwkJ ZGlydHkgfD0gcmF3LT5wbGFuZVtwbGFuZV9pZF0gIT0gdmFsdWU7Cj4gPiArCQlyYXctPnBsYW5l W3BsYW5lX2lkXSA9IHZhbHVlOwo+ID4gKwl9Cj4gPiArCj4gPiArCXJldHVybiBkaXJ0eTsKPiA+ ICt9Cj4gPiArCj4gPiArc3RhdGljIGJvb2wgZzR4X3Jhd19mYmNfd21fc2V0KHN0cnVjdCBpbnRl bF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAo+ID4gKwkJCSAgICAgICBpbnQgbGV2ZWwsIHUxNiB2 YWx1ZSkKPiA+ICt7Cj4gPiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRv X2k5MTUoY3J0Y19zdGF0ZS0+YmFzZS5jcnRjLT5kZXYpOwo+ID4gKwlib29sIGRpcnR5ID0gZmFs c2U7Cj4gPiArCj4gPiArCS8qIE5PUk1BTCBsZXZlbCBkb2Vzbid0IGhhdmUgYW4gRkJDIHdhdGVy bWFyayAqLwo+ID4gKwlsZXZlbCA9IG1heChsZXZlbCwgRzRYX1dNX0xFVkVMX1NSKTsKPiA+ICsK PiA+ICsJZm9yICg7IGxldmVsIDwgaW50ZWxfd21fbnVtX2xldmVscyhkZXZfcHJpdik7IGxldmVs KyspIHsKPiA+ICsJCXN0cnVjdCBnNHhfcGlwZV93bSAqcmF3ID0gJmNydGNfc3RhdGUtPndtLmc0 eC5yYXdbbGV2ZWxdOwo+ID4gKwo+ID4gKwkJZGlydHkgfD0gcmF3LT5mYmMgIT0gdmFsdWU7Cj4g PiArCQlyYXctPmZiYyA9IHZhbHVlOwo+ID4gKwl9Cj4gPiArCj4gPiArCXJldHVybiBkaXJ0eTsK PiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIHVpbnQzMl90IGlsa19jb21wdXRlX2ZiY193bShjb25z dCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3N0YXRlLAo+ID4gKwkJCQkgICBjb25zdCBzdHJ1 Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBzdGF0ZSwKPiA+ICsJCQkJICAgdWludDMyX3QgcHJpX3Zh bCk7Cj4gPiArCj4gPiArc3RhdGljIGJvb2wgZzR4X3Jhd19wbGFuZV93bV9jb21wdXRlKHN0cnVj dCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAo+ID4gKwkJCQkgICAgIGNvbnN0IHN0cnVj dCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpCj4gPiArewo+ID4gKwlzdHJ1Y3QgaW50 ZWxfcGxhbmUgKnBsYW5lID0gdG9faW50ZWxfcGxhbmUocGxhbmVfc3RhdGUtPmJhc2UucGxhbmUp Owo+ID4gKwlpbnQgbnVtX2xldmVscyA9IGludGVsX3dtX251bV9sZXZlbHModG9faTkxNShwbGFu ZS0+YmFzZS5kZXYpKTsKPiA+ICsJZW51bSBwbGFuZV9pZCBwbGFuZV9pZCA9IHBsYW5lLT5pZDsK PiA+ICsJYm9vbCBkaXJ0eSA9IGZhbHNlOwo+ID4gKwlpbnQgbGV2ZWw7Cj4gPiArCj4gPiArCWlm ICghaW50ZWxfd21fcGxhbmVfdmlzaWJsZShjcnRjX3N0YXRlLCBwbGFuZV9zdGF0ZSkpIHsKPiA+ ICsJCWRpcnR5IHw9IGc0eF9yYXdfcGxhbmVfd21fc2V0KGNydGNfc3RhdGUsIDAsIHBsYW5lX2lk LCAwKTsKPiA+ICsJCWlmIChwbGFuZV9pZCA9PSBQTEFORV9QUklNQVJZKQo+ID4gKwkJCWRpcnR5 IHw9IGc0eF9yYXdfZmJjX3dtX3NldChjcnRjX3N0YXRlLCAwLCAwKTsKPiA+ICsJCWdvdG8gb3V0 Owo+ID4gKwl9Cj4gPiArCj4gPiArCWZvciAobGV2ZWwgPSAwOyBsZXZlbCA8IG51bV9sZXZlbHM7 IGxldmVsKyspIHsKPiA+ICsJCXN0cnVjdCBnNHhfcGlwZV93bSAqcmF3ID0gJmNydGNfc3RhdGUt PndtLmc0eC5yYXdbbGV2ZWxdOwo+ID4gKwkJaW50IHdtLCBtYXhfd207Cj4gPiArCj4gPiArCQl3 bSA9IGc0eF9jb21wdXRlX3dtKGNydGNfc3RhdGUsIHBsYW5lX3N0YXRlLCBsZXZlbCk7Cj4gPiAr CQltYXhfd20gPSBnNHhfcGxhbmVfZmlmb19zaXplKHBsYW5lX2lkLCBsZXZlbCk7Cj4gPiArCj4g PiArCQlpZiAod20gPiBtYXhfd20pCj4gPiArCQkJYnJlYWs7Cj4gPiArCj4gPiArCQlkaXJ0eSB8 PSByYXctPnBsYW5lW3BsYW5lX2lkXSAhPSB3bTsKPiA+ICsJCXJhdy0+cGxhbmVbcGxhbmVfaWRd ID0gd207Cj4gPiArCj4gPiArCQlpZiAocGxhbmVfaWQgIT0gUExBTkVfUFJJTUFSWSB8fAo+ID4g KwkJICAgIGxldmVsID09IEc0WF9XTV9MRVZFTF9OT1JNQUwpCj4gPiArCQkJY29udGludWU7Cj4g PiArCj4gPiArCQl3bSA9IGlsa19jb21wdXRlX2ZiY193bShjcnRjX3N0YXRlLCBwbGFuZV9zdGF0 ZSwKPiA+ICsJCQkJCXJhdy0+cGxhbmVbcGxhbmVfaWRdKTsKPiA+ICsJCW1heF93bSA9IGc0eF9m YmNfZmlmb19zaXplKGxldmVsKTsKPiA+ICsKPiA+ICsJCS8qCj4gPiArCQkgKiBGQkMgd20gaXMg bm90IG1hbmRhdG9yeSBhcyB3ZQo+ID4gKwkJICogY2FuIGFsd2F5cyBqdXN0IGRpc2FibGUgaXRz IHVzZS4KPiA+ICsJCSAqLwo+ID4gKwkJaWYgKHdtID4gbWF4X3dtKQo+ID4gKwkJCXdtID0gVVNI UlRfTUFYOwo+ID4gKwo+ID4gKwkJZGlydHkgfD0gcmF3LT5mYmMgIT0gd207Cj4gPiArCQlyYXct PmZiYyA9IHdtOwo+ID4gKwl9Cj4gPiArCj4gPiArCS8qIG1hcmsgd2F0ZXJtYXJrcyBhcyBpbnZh bGlkICovCj4gPiArCWRpcnR5IHw9IGc0eF9yYXdfcGxhbmVfd21fc2V0KGNydGNfc3RhdGUsIGxl dmVsLCBwbGFuZV9pZCwgVVNIUlRfTUFYKTsKPiA+ICsKPiA+ICsJaWYgKHBsYW5lX2lkID09IFBM QU5FX1BSSU1BUlkpCj4gPiArCQlkaXJ0eSB8PSBnNHhfcmF3X2ZiY193bV9zZXQoY3J0Y19zdGF0 ZSwgbGV2ZWwsIFVTSFJUX01BWCk7Cj4gPiArCj4gPiArIG91dDoKPiA+ICsJaWYgKGRpcnR5KSB7 Cj4gPiArCQlEUk1fREVCVUdfS01TKCIlcyB3YXRlcm1hcmtzOiBub3JtYWw9JWQsIFNSPSVkLCBI UExMPSVkXG4iLAo+ID4gKwkJCSAgICAgIHBsYW5lLT5iYXNlLm5hbWUsCj4gPiArCQkJICAgICAg Y3J0Y19zdGF0ZS0+d20uZzR4LnJhd1tHNFhfV01fTEVWRUxfTk9STUFMXS5wbGFuZVtwbGFuZV9p ZF0sCj4gPiArCQkJICAgICAgY3J0Y19zdGF0ZS0+d20uZzR4LnJhd1tHNFhfV01fTEVWRUxfU1Jd LnBsYW5lW3BsYW5lX2lkXSwKPiA+ICsJCQkgICAgICBjcnRjX3N0YXRlLT53bS5nNHgucmF3W0c0 WF9XTV9MRVZFTF9IUExMXS5wbGFuZVtwbGFuZV9pZF0pOwo+ID4gKwo+ID4gKwkJaWYgKHBsYW5l X2lkID09IFBMQU5FX1BSSU1BUlkpCj4gPiArCQkJRFJNX0RFQlVHX0tNUygiRkJDIHdhdGVybWFy a3M6IFNSPSVkLCBIUExMPSVkXG4iLAo+ID4gKwkJCQkgICAgICBjcnRjX3N0YXRlLT53bS5nNHgu cmF3W0c0WF9XTV9MRVZFTF9TUl0uZmJjLAo+ID4gKwkJCQkgICAgICBjcnRjX3N0YXRlLT53bS5n NHgucmF3W0c0WF9XTV9MRVZFTF9IUExMXS5mYmMpOwo+ID4gKwl9Cj4gPiArCj4gPiArCXJldHVy biBkaXJ0eTsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIGJvb2wgZzR4X3Jhd19wbGFuZV93bV9p c192YWxpZChjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKPiA+ICsJ CQkJICAgICAgZW51bSBwbGFuZV9pZCBwbGFuZV9pZCwgaW50IGxldmVsKQo+ID4gK3sKPiA+ICsJ Y29uc3Qgc3RydWN0IGc0eF9waXBlX3dtICpyYXcgPSAmY3J0Y19zdGF0ZS0+d20uZzR4LnJhd1ts ZXZlbF07Cj4gPiArCj4gPiArCXJldHVybiByYXctPnBsYW5lW3BsYW5lX2lkXSA8PSBnNHhfcGxh bmVfZmlmb19zaXplKHBsYW5lX2lkLCBsZXZlbCk7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBi b29sIGc0eF9yYXdfY3J0Y193bV9pc192YWxpZChjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0 ZSAqY3J0Y19zdGF0ZSwKPiA+ICsJCQkJICAgICBpbnQgbGV2ZWwpCj4gPiArewo+ID4gKwlzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGNydGNfc3RhdGUtPmJhc2Uu Y3J0Yy0+ZGV2KTsKPiA+ICsKPiA+ICsJaWYgKGxldmVsID4gZGV2X3ByaXYtPndtLm1heF9sZXZl bCkKPiA+ICsJCXJldHVybiBmYWxzZTsKPiA+ICsKPiA+ICsJcmV0dXJuIGc0eF9yYXdfcGxhbmVf d21faXNfdmFsaWQoY3J0Y19zdGF0ZSwgUExBTkVfUFJJTUFSWSwgbGV2ZWwpICYmCj4gPiArCQln NHhfcmF3X3BsYW5lX3dtX2lzX3ZhbGlkKGNydGNfc3RhdGUsIFBMQU5FX1NQUklURTAsIGxldmVs KSAmJgo+ID4gKwkJZzR4X3Jhd19wbGFuZV93bV9pc192YWxpZChjcnRjX3N0YXRlLCBQTEFORV9D VVJTT1IsIGxldmVsKTsKPiA+ICt9Cj4gPiArCj4gPiArLyogbWFyayBhbGwgbGV2ZWxzIHN0YXJ0 aW5nIGZyb20gJ2xldmVsJyBhcyBpbnZhbGlkICovCj4gPiArc3RhdGljIHZvaWQgZzR4X2ludmFs aWRhdGVfd21zKHN0cnVjdCBpbnRlbF9jcnRjICpjcnRjLAo+ID4gKwkJCSAgICAgICBzdHJ1Y3Qg ZzR4X3dtX3N0YXRlICp3bV9zdGF0ZSwgaW50IGxldmVsKQo+ID4gK3sKPiA+ICsJaWYgKGxldmVs IDw9IEc0WF9XTV9MRVZFTF9OT1JNQUwpIHsKPiA+ICsJCWVudW0gcGxhbmVfaWQgcGxhbmVfaWQ7 Cj4gPiArCj4gPiArCQlmb3JfZWFjaF9wbGFuZV9pZF9vbl9jcnRjKGNydGMsIHBsYW5lX2lkKQo+ ID4gKwkJCXdtX3N0YXRlLT53bS5wbGFuZVtwbGFuZV9pZF0gPSBVU0hSVF9NQVg7Cj4gPiArCX0K PiA+ICsKPiA+ICsJaWYgKGxldmVsIDw9IEc0WF9XTV9MRVZFTF9TUikgewo+ID4gKwkJd21fc3Rh dGUtPmN4c3IgPSBmYWxzZTsKPiA+ICsJCXdtX3N0YXRlLT5zci5jdXJzb3IgPSBVU0hSVF9NQVg7 Cj4gPiArCQl3bV9zdGF0ZS0+c3IucGxhbmUgPSBVU0hSVF9NQVg7Cj4gPiArCQl3bV9zdGF0ZS0+ c3IuZmJjID0gVVNIUlRfTUFYOwo+ID4gKwl9Cj4gPiArCj4gPiArCWlmIChsZXZlbCA8PSBHNFhf V01fTEVWRUxfSFBMTCkgewo+ID4gKwkJd21fc3RhdGUtPmhwbGxfZW4gPSBmYWxzZTsKPiA+ICsJ CXdtX3N0YXRlLT5ocGxsLmN1cnNvciA9IFVTSFJUX01BWDsKPiA+ICsJCXdtX3N0YXRlLT5ocGxs LnBsYW5lID0gVVNIUlRfTUFYOwo+ID4gKwkJd21fc3RhdGUtPmhwbGwuZmJjID0gVVNIUlRfTUFY Owo+ID4gKwl9Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBpbnQgZzR4X2NvbXB1dGVfcGlwZV93 bShzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSkKPiA+ICt7Cj4gPiArCXN0cnVj dCBpbnRlbF9jcnRjICpjcnRjID0gdG9faW50ZWxfY3J0YyhjcnRjX3N0YXRlLT5iYXNlLmNydGMp Owo+ID4gKwlzdHJ1Y3QgaW50ZWxfYXRvbWljX3N0YXRlICpzdGF0ZSA9Cj4gPiArCQl0b19pbnRl bF9hdG9taWNfc3RhdGUoY3J0Y19zdGF0ZS0+YmFzZS5zdGF0ZSk7Cj4gPiArCXN0cnVjdCBnNHhf d21fc3RhdGUgKndtX3N0YXRlID0gJmNydGNfc3RhdGUtPndtLmc0eC5vcHRpbWFsOwo+ID4gKwlp bnQgbnVtX2FjdGl2ZV9wbGFuZXMgPSBod2VpZ2h0MzIoY3J0Y19zdGF0ZS0+YWN0aXZlX3BsYW5l cyAmCj4gPiArCQkJCQkgIH5CSVQoUExBTkVfQ1VSU09SKSk7Cj4gPiArCWNvbnN0IHN0cnVjdCBn NHhfcGlwZV93bSAqcmF3Owo+ID4gKwlzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0 YXRlOwo+ID4gKwlzdHJ1Y3QgaW50ZWxfcGxhbmUgKnBsYW5lOwo+ID4gKwllbnVtIHBsYW5lX2lk IHBsYW5lX2lkOwo+ID4gKwlpbnQgaSwgbGV2ZWw7Cj4gPiArCXVuc2lnbmVkIGludCBkaXJ0eSA9 IDA7Cj4gPiArCj4gPiArCWZvcl9lYWNoX2ludGVsX3BsYW5lX2luX3N0YXRlKHN0YXRlLCBwbGFu ZSwgcGxhbmVfc3RhdGUsIGkpIHsKPiA+ICsJCWNvbnN0IHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0 ZSAqb2xkX3BsYW5lX3N0YXRlID0KPiA+ICsJCQl0b19pbnRlbF9wbGFuZV9zdGF0ZShwbGFuZS0+ YmFzZS5zdGF0ZSk7Cj4gPiArCj4gPiArCQlpZiAocGxhbmVfc3RhdGUtPmJhc2UuY3J0YyAhPSAm Y3J0Yy0+YmFzZSAmJgo+ID4gKwkJICAgIG9sZF9wbGFuZV9zdGF0ZS0+YmFzZS5jcnRjICE9ICZj cnRjLT5iYXNlKQo+ID4gKwkJCWNvbnRpbnVlOwo+ID4gKwo+ID4gKwkJaWYgKGc0eF9yYXdfcGxh bmVfd21fY29tcHV0ZShjcnRjX3N0YXRlLCBwbGFuZV9zdGF0ZSkpCj4gPiArCQkJZGlydHkgfD0g QklUKHBsYW5lLT5pZCk7Cj4gPiArCX0KPiA+ICsKPiA+ICsJaWYgKCFkaXJ0eSkKPiA+ICsJCXJl dHVybiAwOwo+ID4gKwo+ID4gKwlsZXZlbCA9IEc0WF9XTV9MRVZFTF9OT1JNQUw7Cj4gPiArCWlm ICghZzR4X3Jhd19jcnRjX3dtX2lzX3ZhbGlkKGNydGNfc3RhdGUsIGxldmVsKSkKPiA+ICsJCWdv dG8gb3V0Owo+ID4gKwo+ID4gKwlyYXcgPSAmY3J0Y19zdGF0ZS0+d20uZzR4LnJhd1tsZXZlbF07 Cj4gPiArCWZvcl9lYWNoX3BsYW5lX2lkX29uX2NydGMoY3J0YywgcGxhbmVfaWQpCj4gPiArCQl3 bV9zdGF0ZS0+d20ucGxhbmVbcGxhbmVfaWRdID0gcmF3LT5wbGFuZVtwbGFuZV9pZF07Cj4gPiAr Cj4gPiArCWxldmVsID0gRzRYX1dNX0xFVkVMX1NSOwo+ID4gKwo+ID4gKwlpZiAoIWc0eF9yYXdf Y3J0Y193bV9pc192YWxpZChjcnRjX3N0YXRlLCBsZXZlbCkpCj4gPiArCQlnb3RvIG91dDsKPiA+ ICsKPiA+ICsJcmF3ID0gJmNydGNfc3RhdGUtPndtLmc0eC5yYXdbbGV2ZWxdOwo+ID4gKwl3bV9z dGF0ZS0+c3IucGxhbmUgPSByYXctPnBsYW5lW1BMQU5FX1BSSU1BUlldOwo+ID4gKwl3bV9zdGF0 ZS0+c3IuY3Vyc29yID0gcmF3LT5wbGFuZVtQTEFORV9DVVJTT1JdOwo+ID4gKwl3bV9zdGF0ZS0+ c3IuZmJjID0gcmF3LT5mYmM7Cj4gPiArCj4gPiArCXdtX3N0YXRlLT5jeHNyID0gbnVtX2FjdGl2 ZV9wbGFuZXMgPT0gQklUKFBMQU5FX1BSSU1BUlkpOwo+ID4gKwo+ID4gKwlsZXZlbCA9IEc0WF9X TV9MRVZFTF9IUExMOwo+ID4gKwo+ID4gKwlpZiAoIWc0eF9yYXdfY3J0Y193bV9pc192YWxpZChj cnRjX3N0YXRlLCBsZXZlbCkpCj4gPiArCQlnb3RvIG91dDsKPiA+ICsKPiA+ICsJcmF3ID0gJmNy dGNfc3RhdGUtPndtLmc0eC5yYXdbbGV2ZWxdOwo+ID4gKwl3bV9zdGF0ZS0+aHBsbC5wbGFuZSA9 IHJhdy0+cGxhbmVbUExBTkVfUFJJTUFSWV07Cj4gPiArCXdtX3N0YXRlLT5ocGxsLmN1cnNvciA9 IHJhdy0+cGxhbmVbUExBTkVfQ1VSU09SXTsKPiA+ICsJd21fc3RhdGUtPmhwbGwuZmJjID0gcmF3 LT5mYmM7Cj4gPiArCj4gPiArCXdtX3N0YXRlLT5ocGxsX2VuID0gd21fc3RhdGUtPmN4c3I7Cj4g PiArCj4gPiArCWxldmVsKys7Cj4gPiArCj4gPiArIG91dDoKPiA+ICsJaWYgKGxldmVsID09IEc0 WF9XTV9MRVZFTF9OT1JNQUwpCj4gPiArCQlyZXR1cm4gLUVJTlZBTDsKPiA+ICsKPiA+ICsJLyog aW52YWxpZGF0ZSB0aGUgaGlnaGVyIGxldmVscyAqLwo+ID4gKwlnNHhfaW52YWxpZGF0ZV93bXMo Y3J0Yywgd21fc3RhdGUsIGxldmVsKTsKPiA+ICsKPiA+ICsJLyoKPiA+ICsJICogRGV0ZXJtaW5l IGlmIHRoZSBGQkMgd2F0ZXJtYXJrKHMpIGNhbiBiZSB1c2VkLiBJRgo+ID4gKwkgKiB0aGlzIGlz bid0IHRoZSBjYXNlIHdlIHByZWZlciB0byBkaXNhYmxlIHRoZSBGQkMKPiA+ICsJICggd2F0ZXJt YXJrKHMpIHJhdGhlciB0aGFuIGRpc2FibGUgdGhlIFNSL0hQTEwKPiA+ICsJICogbGV2ZWwocykg ZW50aXJlbHkuCj4gPiArCSAqLwo+ID4gKwl3bV9zdGF0ZS0+ZmJjX2VuID0gbGV2ZWwgPiBHNFhf V01fTEVWRUxfTk9STUFMOwo+ID4gKwo+ID4gKwlpZiAobGV2ZWwgPj0gRzRYX1dNX0xFVkVMX1NS ICYmCj4gPiArCSAgICB3bV9zdGF0ZS0+c3IuZmJjID4gZzR4X2ZiY19maWZvX3NpemUoRzRYX1dN X0xFVkVMX1NSKSkKPiA+ICsJCXdtX3N0YXRlLT5mYmNfZW4gPSBmYWxzZTsKPiA+ICsJZWxzZSBp ZiAobGV2ZWwgPj0gRzRYX1dNX0xFVkVMX0hQTEwgJiYKPiA+ICsJCSB3bV9zdGF0ZS0+aHBsbC5m YmMgPiBnNHhfZmJjX2ZpZm9fc2l6ZShHNFhfV01fTEVWRUxfSFBMTCkpCj4gPiArCQl3bV9zdGF0 ZS0+ZmJjX2VuID0gZmFsc2U7Cj4gPiArCj4gPiArCXJldHVybiAwOwo+ID4gK30KPiA+ICsKPiA+ ICtzdGF0aWMgaW50IGc0eF9jb21wdXRlX2ludGVybWVkaWF0ZV93bShzdHJ1Y3QgZHJtX2Rldmlj ZSAqZGV2LAo+ID4gKwkJCQkgICAgICAgc3RydWN0IGludGVsX2NydGMgKmNydGMsCj4gPiArCQkJ CSAgICAgICBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSkKPiA+ICt7Cj4gPiAr CXN0cnVjdCBnNHhfd21fc3RhdGUgKmludGVybWVkaWF0ZSA9ICZjcnRjX3N0YXRlLT53bS5nNHgu aW50ZXJtZWRpYXRlOwo+ID4gKwljb25zdCBzdHJ1Y3QgZzR4X3dtX3N0YXRlICpvcHRpbWFsID0g JmNydGNfc3RhdGUtPndtLmc0eC5vcHRpbWFsOwo+ID4gKwljb25zdCBzdHJ1Y3QgZzR4X3dtX3N0 YXRlICphY3RpdmUgPSAmY3J0Yy0+d20uYWN0aXZlLmc0eDsKPiA+ICsJZW51bSBwbGFuZV9pZCBw bGFuZV9pZDsKPiAKPiBJIHdvdWxkIGFkZCBhIHByb3Zpc2lvbiBmb3IgbW9kZXNldCwgbm8gbmVl ZCB0byBjYWxjdWxhdGUgaW50ZXJtZWRpYXRlIHdhdGVybWFya3Mgd2l0aCB0aGUgcGlwZSBlbmFi bGVkLCBzb21ldGhpbmcgbGlrZSB0aGlzPwo+IAo+IAlpZiAoIW5ld3N0YXRlLT5iYXNlLmFjdGl2 ZSB8fCBkcm1fYXRvbWljX2NydGNfbmVlZHNfbW9kZXNldCgmbmV3c3RhdGUtPmJhc2UpKSB7Cj4g CQkqaW50ZXJtZWRpYXRlID0gKm9wdGltYWw7Cj4gCQlyZXR1cm4gMDsKPiAJfQoKSG1tLiBZZWFo LCBJIHN1cHBvc2Ugd2Ugc2hvdWxkIGJlIGRvaW5nIHNvbWV0aGlnIGxpa2UgdGhhdC4gVGhvdWdo IEknZApzdGlsbCBtdWNoIG1vcmUgcHJlZmVyIGlmIHdlIGhhZCB0aGUgY3J0YyBkaXNhYmxlIGFz IGEgdG90YWxseSBzZXBhcmF0ZQphdG9taWMgY29tbWl0LgoKPiAKPiBUaGUgYWN0aXZlIHdhdGVy bWFya3MgYXJlIHdyb25nbHkgYXNzaWduZWQgaGVyZSwgaWYgdGhlcmUncyBhIHBlbmRpbmcgdXBk YXRlIGl0IGNvdWxkIHBvaW50IHRvIG9sZCBvbGQgb3B0aW1hbCBzdGF0ZSwgb3Igb2xkIGludGVy bWVkaWF0ZSBzdGF0ZSwgaXQgc2hvdWxkIGJlIHNvbWV0aGluZyBsaWtlIHRoaXM6Cj4gb2xkX2Ny dGNfc3RhdGUgPSBkcm1fYXRvbWljX2dldF9vbGRfY3J0Y19zdGF0ZShjcnRjX3N0YXRlLT5iYXNl LnN0YXRlLCAmY3J0Yy0+YmFzZSk7Cj4gYWN0aXZlID0gJnRvX2ludGVsX2NydGNfc3RhdGUob2xk X2NydGNfc3RhdGUpLT53bS5nNHgub3B0aW1hbAoKV2VsbCwgaXQgc2hvdWxkIHJlYWxseSBiZSBj b25zaWRlcmluZyBib3RoIGFjdGl2ZStuZXdfb3B0aW1hbCBhbmQKb2xkX29wdGltYWwrbmV3X29w dGltYWwuIFRoYXQncyBhc3N1bWluZyB3ZSBldmVudHVhbGx5IHdhbnQgdG8gYWxsb3cKdGhlIGZw cz52cmVmcmVzaCB0aGluZy4gVGhhdCdzIHdoYXQgSSBoYWQgaW4gbXkgb3JpZ2luYWwgSUxLIGNv ZGUgQlRXLApqdXN0IG5vIG9uZSBib3RoZXJlZCB0byBicmluZyBpdCBvdmVyIHdoZW4gdGhlIGN1 cnJlbnQgY29kZSB3YXMgbWVyZ2VkLgoKQnV0IHllYWgsIHdpdGggdGhlIHdheSB0aGluZ3MgYXJl IGN1cnJlbnRseSBJIHN1cHBvc2Ugd2Ugc2hvdWxkIGJlCm9ubHkgY29uc2lkZXJpbmcgdGhlIG9s ZF9vcHRpbWFsK25ld19vcHRpbWFsIGNhc2UuCgo+IAo+IEkga25vdywgdmx2IGRvZXMgdGhpcyB3 cm9uZyB0b28sIHNob3VsZCBiZSBmaXhlZCBhcyB3ZWxsLi4KPiBXaXRoIHRoYXQgZml4ZWQgYWxs IHBhdGNoZXMgbG9vayBnb29kIHRvIG1lLCBzbyBmZWVsIGZyZWUgdG8gcHV0IHRoaXMgb24gdGhl bToKPiAKPiBSZXZpZXdlZC1ieTogTWFhcnRlbiBMYW5raG9yc3QgPG1hYXJ0ZW4ubGFua2hvcnN0 QGxpbnV4LmludGVsLmNvbT4KPiAKPiA+ICsJaW50ZXJtZWRpYXRlLT5jeHNyID0gb3B0aW1hbC0+ Y3hzciAmJiBhY3RpdmUtPmN4c3IgJiYKPiA+ICsJCSFjcnRjX3N0YXRlLT5kaXNhYmxlX2N4c3I7 Cj4gPiArCWludGVybWVkaWF0ZS0+aHBsbF9lbiA9IG9wdGltYWwtPmhwbGxfZW4gJiYgYWN0aXZl LT5ocGxsX2VuICYmCj4gPiArCQkhY3J0Y19zdGF0ZS0+ZGlzYWJsZV9jeHNyOwo+ID4gKwlpbnRl cm1lZGlhdGUtPmZiY19lbiA9IG9wdGltYWwtPmZiY19lbiAmJiBhY3RpdmUtPmZiY19lbjsKPiA+ ICsKPiA+ICsJZm9yX2VhY2hfcGxhbmVfaWRfb25fY3J0YyhjcnRjLCBwbGFuZV9pZCkgewo+ID4g KwkJaW50ZXJtZWRpYXRlLT53bS5wbGFuZVtwbGFuZV9pZF0gPQo+ID4gKwkJCW1heChvcHRpbWFs LT53bS5wbGFuZVtwbGFuZV9pZF0sCj4gPiArCQkJICAgIGFjdGl2ZS0+d20ucGxhbmVbcGxhbmVf aWRdKTsKPiA+ICsKPiA+ICsJCVdBUk5fT04oaW50ZXJtZWRpYXRlLT53bS5wbGFuZVtwbGFuZV9p ZF0gPgo+ID4gKwkJCWc0eF9wbGFuZV9maWZvX3NpemUocGxhbmVfaWQsIEc0WF9XTV9MRVZFTF9O T1JNQUwpKTsKPiA+ICsJfQo+ID4gKwo+ID4gKwlpbnRlcm1lZGlhdGUtPnNyLnBsYW5lID0gbWF4 KG9wdGltYWwtPnNyLnBsYW5lLAo+ID4gKwkJCQkgICAgIGFjdGl2ZS0+c3IucGxhbmUpOwo+ID4g KwlpbnRlcm1lZGlhdGUtPnNyLmN1cnNvciA9IG1heChvcHRpbWFsLT5zci5jdXJzb3IsCj4gPiAr CQkJCSAgICAgIGFjdGl2ZS0+c3IuY3Vyc29yKTsKPiA+ICsJaW50ZXJtZWRpYXRlLT5zci5mYmMg PSBtYXgob3B0aW1hbC0+c3IuZmJjLAo+ID4gKwkJCQkgICBhY3RpdmUtPnNyLmZiYyk7Cj4gPiAr Cj4gPiArCWludGVybWVkaWF0ZS0+aHBsbC5wbGFuZSA9IG1heChvcHRpbWFsLT5ocGxsLnBsYW5l LAo+ID4gKwkJCQkgICAgICAgYWN0aXZlLT5ocGxsLnBsYW5lKTsKPiA+ICsJaW50ZXJtZWRpYXRl LT5ocGxsLmN1cnNvciA9IG1heChvcHRpbWFsLT5ocGxsLmN1cnNvciwKPiA+ICsJCQkJCWFjdGl2 ZS0+aHBsbC5jdXJzb3IpOwo+ID4gKwlpbnRlcm1lZGlhdGUtPmhwbGwuZmJjID0gbWF4KG9wdGlt YWwtPmhwbGwuZmJjLAo+ID4gKwkJCQkgICAgIGFjdGl2ZS0+aHBsbC5mYmMpOwo+ID4gKwo+ID4g KwlXQVJOX09OKChpbnRlcm1lZGlhdGUtPnNyLnBsYW5lID4KPiA+ICsJCSBnNHhfcGxhbmVfZmlm b19zaXplKFBMQU5FX1BSSU1BUlksIEc0WF9XTV9MRVZFTF9TUikgfHwKPiA+ICsJCSBpbnRlcm1l ZGlhdGUtPnNyLmN1cnNvciA+Cj4gPiArCQkgZzR4X3BsYW5lX2ZpZm9fc2l6ZShQTEFORV9DVVJT T1IsIEc0WF9XTV9MRVZFTF9TUikpICYmCj4gPiArCQlpbnRlcm1lZGlhdGUtPmN4c3IpOwo+ID4g KwlXQVJOX09OKChpbnRlcm1lZGlhdGUtPnNyLnBsYW5lID4KPiA+ICsJCSBnNHhfcGxhbmVfZmlm b19zaXplKFBMQU5FX1BSSU1BUlksIEc0WF9XTV9MRVZFTF9IUExMKSB8fAo+ID4gKwkJIGludGVy bWVkaWF0ZS0+c3IuY3Vyc29yID4KPiA+ICsJCSBnNHhfcGxhbmVfZmlmb19zaXplKFBMQU5FX0NV UlNPUiwgRzRYX1dNX0xFVkVMX0hQTEwpKSAmJgo+ID4gKwkJaW50ZXJtZWRpYXRlLT5ocGxsX2Vu KTsKPiA+ICsKPiA+ICsJV0FSTl9PTihpbnRlcm1lZGlhdGUtPnNyLmZiYyA+IGc0eF9mYmNfZmlm b19zaXplKDEpICYmCj4gPiArCQlpbnRlcm1lZGlhdGUtPmZiY19lbiAmJiBpbnRlcm1lZGlhdGUt PmN4c3IpOwo+ID4gKwlXQVJOX09OKGludGVybWVkaWF0ZS0+aHBsbC5mYmMgPiBnNHhfZmJjX2Zp Zm9fc2l6ZSgyKSAmJgo+ID4gKwkJaW50ZXJtZWRpYXRlLT5mYmNfZW4gJiYgaW50ZXJtZWRpYXRl LT5ocGxsX2VuKTsKPiA+ICsKPiA+ICsJLyoKPiA+ICsJICogSWYgb3VyIGludGVybWVkaWF0ZSBX TSBhcmUgaWRlbnRpY2FsIHRvIHRoZSBmaW5hbCBXTSwgdGhlbiB3ZSBjYW4KPiA+ICsJICogb21p dCB0aGUgcG9zdC12YmxhbmsgcHJvZ3JhbW1pbmc7IG9ubHkgdXBkYXRlIGlmIGl0J3MgZGlmZmVy ZW50Lgo+ID4gKwkgKi8KPiA+ICsJaWYgKG1lbWNtcChpbnRlcm1lZGlhdGUsIG9wdGltYWwsIHNp emVvZigqaW50ZXJtZWRpYXRlKSkgIT0gMCkKPiA+ICsJCWNydGNfc3RhdGUtPndtLm5lZWRfcG9z dHZibF91cGRhdGUgPSB0cnVlOwo+ID4gKwo+ID4gKwlyZXR1cm4gMDsKPiA+ICt9Cj4gPiArCj4g PiArc3RhdGljIHZvaWQgZzR4X21lcmdlX3dtKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZf cHJpdiwKPiA+ICsJCQkgc3RydWN0IGc0eF93bV92YWx1ZXMgKndtKQo+ID4gK3sKPiA+ICsJc3Ry dWN0IGludGVsX2NydGMgKmNydGM7Cj4gPiArCWludCBudW1fYWN0aXZlX2NydGNzID0gMDsKPiA+ ICsKPiA+ICsJd20tPmN4c3IgPSB0cnVlOwo+ID4gKwl3bS0+aHBsbF9lbiA9IHRydWU7Cj4gPiAr CXdtLT5mYmNfZW4gPSB0cnVlOwo+ID4gKwo+ID4gKwlmb3JfZWFjaF9pbnRlbF9jcnRjKCZkZXZf cHJpdi0+ZHJtLCBjcnRjKSB7Cj4gPiArCQljb25zdCBzdHJ1Y3QgZzR4X3dtX3N0YXRlICp3bV9z dGF0ZSA9ICZjcnRjLT53bS5hY3RpdmUuZzR4Owo+ID4gKwo+ID4gKwkJaWYgKCFjcnRjLT5hY3Rp dmUpCj4gPiArCQkJY29udGludWU7Cj4gPiArCj4gPiArCQlpZiAoIXdtX3N0YXRlLT5jeHNyKQo+ ID4gKwkJCXdtLT5jeHNyID0gZmFsc2U7Cj4gPiArCQlpZiAoIXdtX3N0YXRlLT5ocGxsX2VuKQo+ ID4gKwkJCXdtLT5ocGxsX2VuID0gZmFsc2U7Cj4gPiArCQlpZiAoIXdtX3N0YXRlLT5mYmNfZW4p Cj4gPiArCQkJd20tPmZiY19lbiA9IGZhbHNlOwo+ID4gKwo+ID4gKwkJbnVtX2FjdGl2ZV9jcnRj cysrOwo+ID4gKwl9Cj4gPiArCj4gPiArCWlmIChudW1fYWN0aXZlX2NydGNzICE9IDEpIHsKPiA+ ICsJCXdtLT5jeHNyID0gZmFsc2U7Cj4gPiArCQl3bS0+aHBsbF9lbiA9IGZhbHNlOwo+ID4gKwkJ d20tPmZiY19lbiA9IGZhbHNlOwo+ID4gKwl9Cj4gPiArCj4gPiArCWZvcl9lYWNoX2ludGVsX2Ny dGMoJmRldl9wcml2LT5kcm0sIGNydGMpIHsKPiA+ICsJCWNvbnN0IHN0cnVjdCBnNHhfd21fc3Rh dGUgKndtX3N0YXRlID0gJmNydGMtPndtLmFjdGl2ZS5nNHg7Cj4gPiArCQllbnVtIHBpcGUgcGlw ZSA9IGNydGMtPnBpcGU7Cj4gPiArCj4gPiArCQl3bS0+cGlwZVtwaXBlXSA9IHdtX3N0YXRlLT53 bTsKPiA+ICsJCWlmIChjcnRjLT5hY3RpdmUgJiYgd20tPmN4c3IpCj4gPiArCQkJd20tPnNyID0g d21fc3RhdGUtPnNyOwo+ID4gKwkJaWYgKGNydGMtPmFjdGl2ZSAmJiB3bS0+aHBsbF9lbikKPiA+ ICsJCQl3bS0+aHBsbCA9IHdtX3N0YXRlLT5ocGxsOwo+ID4gKwl9Cj4gPiArfQo+ID4gKwo+ID4g K3N0YXRpYyB2b2lkIGc0eF9wcm9ncmFtX3dhdGVybWFya3Moc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2KQo+ID4gK3sKPiA+ICsJc3RydWN0IGc0eF93bV92YWx1ZXMgKm9sZF93bSA9 ICZkZXZfcHJpdi0+d20uZzR4Owo+ID4gKwlzdHJ1Y3QgZzR4X3dtX3ZhbHVlcyBuZXdfd20gPSB7 fTsKPiA+ICsKPiA+ICsJZzR4X21lcmdlX3dtKGRldl9wcml2LCAmbmV3X3dtKTsKPiA+ICsKPiA+ ICsJaWYgKG1lbWNtcChvbGRfd20sICZuZXdfd20sIHNpemVvZihuZXdfd20pKSA9PSAwKQo+ID4g KwkJcmV0dXJuOwo+ID4gKwo+ID4gKwlpZiAoaXNfZGlzYWJsaW5nKG9sZF93bS0+Y3hzciwgbmV3 X3dtLmN4c3IsIHRydWUpKQo+ID4gKwkJX2ludGVsX3NldF9tZW1vcnlfY3hzcihkZXZfcHJpdiwg ZmFsc2UpOwo+ID4gKwo+ID4gKwlnNHhfd3JpdGVfd21fdmFsdWVzKGRldl9wcml2LCAmbmV3X3dt KTsKPiA+ICsKPiA+ICsJaWYgKGlzX2VuYWJsaW5nKG9sZF93bS0+Y3hzciwgbmV3X3dtLmN4c3Is IHRydWUpKQo+ID4gKwkJX2ludGVsX3NldF9tZW1vcnlfY3hzcihkZXZfcHJpdiwgdHJ1ZSk7Cj4g PiArCj4gPiArCSpvbGRfd20gPSBuZXdfd207Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyB2b2lk IGc0eF9pbml0aWFsX3dhdGVybWFya3Moc3RydWN0IGludGVsX2F0b21pY19zdGF0ZSAqc3RhdGUs Cj4gPiArCQkJCSAgIHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlKQo+ID4gK3sK PiA+ICsJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShjcnRjX3N0 YXRlLT5iYXNlLmNydGMtPmRldik7Cj4gPiArCXN0cnVjdCBpbnRlbF9jcnRjICpjcnRjID0gdG9f aW50ZWxfY3J0YyhjcnRjX3N0YXRlLT5iYXNlLmNydGMpOwo+ID4gKwo+ID4gKwltdXRleF9sb2Nr KCZkZXZfcHJpdi0+d20ud21fbXV0ZXgpOwo+ID4gKwljcnRjLT53bS5hY3RpdmUuZzR4ID0gY3J0 Y19zdGF0ZS0+d20uZzR4LmludGVybWVkaWF0ZTsKPiA+ICsJZzR4X3Byb2dyYW1fd2F0ZXJtYXJr cyhkZXZfcHJpdik7Cj4gPiArCW11dGV4X3VubG9jaygmZGV2X3ByaXYtPndtLndtX211dGV4KTsK PiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIHZvaWQgZzR4X29wdGltaXplX3dhdGVybWFya3Moc3Ry dWN0IGludGVsX2F0b21pY19zdGF0ZSAqc3RhdGUsCj4gPiArCQkJCSAgICBzdHJ1Y3QgaW50ZWxf Y3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSkKPiA+ICt7Cj4gPiArCXN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoY3J0Y19zdGF0ZS0+YmFzZS5jcnRjLT5kZXYpOwo+ID4g KwlzdHJ1Y3QgaW50ZWxfY3J0YyAqaW50ZWxfY3J0YyA9IHRvX2ludGVsX2NydGMoY3J0Y19zdGF0 ZS0+YmFzZS5jcnRjKTsKPiA+ICsKPiA+ICsJaWYgKCFjcnRjX3N0YXRlLT53bS5uZWVkX3Bvc3R2 YmxfdXBkYXRlKQo+ID4gKwkJcmV0dXJuOwo+ID4gKwo+ID4gKwltdXRleF9sb2NrKCZkZXZfcHJp di0+d20ud21fbXV0ZXgpOwo+ID4gKwlpbnRlbF9jcnRjLT53bS5hY3RpdmUuZzR4ID0gY3J0Y19z dGF0ZS0+d20uZzR4Lm9wdGltYWw7Cj4gPiArCWc0eF9wcm9ncmFtX3dhdGVybWFya3MoZGV2X3By aXYpOwo+ID4gKwltdXRleF91bmxvY2soJmRldl9wcml2LT53bS53bV9tdXRleCk7Cj4gPiArfQo+ ID4gKwo+ID4gIC8qIGxhdGVuY3kgbXVzdCBiZSBpbiAwLjF1cyB1bml0cy4gKi8KPiA+ICBzdGF0 aWMgdW5zaWduZWQgaW50IHZsdl93bV9tZXRob2QyKHVuc2lnbmVkIGludCBwaXhlbF9yYXRlLAo+ ID4gIAkJCQkgICB1bnNpZ25lZCBpbnQgaHRvdGFsLAo+ID4gQEAgLTE2NzMsMTYgKzIwNzksNiBA QCBzdGF0aWMgdm9pZCB2bHZfbWVyZ2Vfd20oc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9w cml2LAo+ID4gIAl9Cj4gPiAgfQo+ID4gIAo+ID4gLXN0YXRpYyBib29sIGlzX2Rpc2FibGluZyhp bnQgb2xkLCBpbnQgbmV3LCBpbnQgdGhyZXNob2xkKQo+ID4gLXsKPiA+IC0JcmV0dXJuIG9sZCA+ PSB0aHJlc2hvbGQgJiYgbmV3IDwgdGhyZXNob2xkOwo+ID4gLX0KPiA+IC0KPiA+IC1zdGF0aWMg Ym9vbCBpc19lbmFibGluZyhpbnQgb2xkLCBpbnQgbmV3LCBpbnQgdGhyZXNob2xkKQo+ID4gLXsK PiA+IC0JcmV0dXJuIG9sZCA8IHRocmVzaG9sZCAmJiBuZXcgPj0gdGhyZXNob2xkOwo+ID4gLX0K PiA+IC0KPiA+ICBzdGF0aWMgdm9pZCB2bHZfcHJvZ3JhbV93YXRlcm1hcmtzKHN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiA+ICB7Cj4gPiAgCXN0cnVjdCB2bHZfd21fdmFsdWVz ICpvbGRfd20gPSAmZGV2X3ByaXYtPndtLnZsdjsKPiA+IEBAIC0xNzQzLDY1ICsyMTM5LDYgQEAg c3RhdGljIHZvaWQgdmx2X29wdGltaXplX3dhdGVybWFya3Moc3RydWN0IGludGVsX2F0b21pY19z dGF0ZSAqc3RhdGUsCj4gPiAgCW11dGV4X3VubG9jaygmZGV2X3ByaXYtPndtLndtX211dGV4KTsK PiA+ICB9Cj4gPiAgCj4gPiAtI2RlZmluZSBzaW5nbGVfcGxhbmVfZW5hYmxlZChtYXNrKSBpc19w b3dlcl9vZl8yKG1hc2spCj4gPiAtCj4gPiAtc3RhdGljIHZvaWQgZzR4X3VwZGF0ZV93bShzdHJ1 Y3QgaW50ZWxfY3J0YyAqY3J0YykKPiA+IC17Cj4gPiAtCXN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICpkZXZfcHJpdiA9IHRvX2k5MTUoY3J0Yy0+YmFzZS5kZXYpOwo+ID4gLQlzdGF0aWMgY29uc3Qg aW50IHNyX2xhdGVuY3lfbnMgPSAxMjAwMDsKPiA+IC0JaW50IHBsYW5lYV93bSwgcGxhbmViX3dt LCBjdXJzb3JhX3dtLCBjdXJzb3JiX3dtOwo+ID4gLQlpbnQgcGxhbmVfc3IsIGN1cnNvcl9zcjsK PiA+IC0JdW5zaWduZWQgaW50IGVuYWJsZWQgPSAwOwo+ID4gLQlib29sIGN4c3JfZW5hYmxlZDsK PiA+IC0KPiA+IC0JaWYgKGc0eF9jb21wdXRlX3dtMChkZXZfcHJpdiwgUElQRV9BLAo+ID4gLQkJ CSAgICAmZzR4X3dtX2luZm8sIHBlc3NpbWFsX2xhdGVuY3lfbnMsCj4gPiAtCQkJICAgICZnNHhf Y3Vyc29yX3dtX2luZm8sIHBlc3NpbWFsX2xhdGVuY3lfbnMsCj4gPiAtCQkJICAgICZwbGFuZWFf d20sICZjdXJzb3JhX3dtKSkKPiA+IC0JCWVuYWJsZWQgfD0gMSA8PCBQSVBFX0E7Cj4gPiAtCj4g PiAtCWlmIChnNHhfY29tcHV0ZV93bTAoZGV2X3ByaXYsIFBJUEVfQiwKPiA+IC0JCQkgICAgJmc0 eF93bV9pbmZvLCBwZXNzaW1hbF9sYXRlbmN5X25zLAo+ID4gLQkJCSAgICAmZzR4X2N1cnNvcl93 bV9pbmZvLCBwZXNzaW1hbF9sYXRlbmN5X25zLAo+ID4gLQkJCSAgICAmcGxhbmViX3dtLCAmY3Vy c29yYl93bSkpCj4gPiAtCQllbmFibGVkIHw9IDEgPDwgUElQRV9COwo+ID4gLQo+ID4gLQlpZiAo c2luZ2xlX3BsYW5lX2VuYWJsZWQoZW5hYmxlZCkgJiYKPiA+IC0JICAgIGc0eF9jb21wdXRlX3Ny d20oZGV2X3ByaXYsIGZmcyhlbmFibGVkKSAtIDEsCj4gPiAtCQkJICAgICBzcl9sYXRlbmN5X25z LAo+ID4gLQkJCSAgICAgJmc0eF93bV9pbmZvLAo+ID4gLQkJCSAgICAgJmc0eF9jdXJzb3Jfd21f aW5mbywKPiA+IC0JCQkgICAgICZwbGFuZV9zciwgJmN1cnNvcl9zcikpIHsKPiA+IC0JCWN4c3Jf ZW5hYmxlZCA9IHRydWU7Cj4gPiAtCX0gZWxzZSB7Cj4gPiAtCQljeHNyX2VuYWJsZWQgPSBmYWxz ZTsKPiA+IC0JCWludGVsX3NldF9tZW1vcnlfY3hzcihkZXZfcHJpdiwgZmFsc2UpOwo+ID4gLQkJ cGxhbmVfc3IgPSBjdXJzb3Jfc3IgPSAwOwo+ID4gLQl9Cj4gPiAtCj4gPiAtCURSTV9ERUJVR19L TVMoIlNldHRpbmcgRklGTyB3YXRlcm1hcmtzIC0gQTogcGxhbmU9JWQsIGN1cnNvcj0lZCwgIgo+ ID4gLQkJICAgICAgIkI6IHBsYW5lPSVkLCBjdXJzb3I9JWQsIFNSOiBwbGFuZT0lZCwgY3Vyc29y PSVkXG4iLAo+ID4gLQkJICAgICAgcGxhbmVhX3dtLCBjdXJzb3JhX3dtLAo+ID4gLQkJICAgICAg cGxhbmViX3dtLCBjdXJzb3JiX3dtLAo+ID4gLQkJICAgICAgcGxhbmVfc3IsIGN1cnNvcl9zcik7 Cj4gPiAtCj4gPiAtCUk5MTVfV1JJVEUoRFNQRlcxLAo+ID4gLQkJICAgRldfV00ocGxhbmVfc3Is IFNSKSB8Cj4gPiAtCQkgICBGV19XTShjdXJzb3JiX3dtLCBDVVJTT1JCKSB8Cj4gPiAtCQkgICBG V19XTShwbGFuZWJfd20sIFBMQU5FQikgfAo+ID4gLQkJICAgRldfV00ocGxhbmVhX3dtLCBQTEFO RUEpKTsKPiA+IC0JSTkxNV9XUklURShEU1BGVzIsCj4gPiAtCQkgICAoSTkxNV9SRUFEKERTUEZX MikgJiB+RFNQRldfQ1VSU09SQV9NQVNLKSB8Cj4gPiAtCQkgICBGV19XTShjdXJzb3JhX3dtLCBD VVJTT1JBKSk7Cj4gPiAtCS8qIEhQTEwgb2ZmIGluIFNSIGhhcyBzb21lIGlzc3VlcyBvbiBHNHgu Li4gZGlzYWJsZSBpdCAqLwo+ID4gLQlJOTE1X1dSSVRFKERTUEZXMywKPiA+IC0JCSAgIChJOTE1 X1JFQUQoRFNQRlczKSAmIH4oRFNQRldfSFBMTF9TUl9FTiB8IERTUEZXX0NVUlNPUl9TUl9NQVNL KSkgfAo+ID4gLQkJICAgRldfV00oY3Vyc29yX3NyLCBDVVJTT1JfU1IpKTsKPiA+IC0KPiA+IC0J aWYgKGN4c3JfZW5hYmxlZCkKPiA+IC0JCWludGVsX3NldF9tZW1vcnlfY3hzcihkZXZfcHJpdiwg dHJ1ZSk7Cj4gPiAtfQo+ID4gLQo+ID4gIHN0YXRpYyB2b2lkIGk5NjVfdXBkYXRlX3dtKHN0cnVj dCBpbnRlbF9jcnRjICp1bnVzZWRfY3J0YykKPiA+ICB7Cj4gPiAgCXN0cnVjdCBkcm1faTkxNV9w cml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUodW51c2VkX2NydGMtPmJhc2UuZGV2KTsKPiA+IEBA IC00Nzc4LDYgKzUxMTUsMzIgQEAgc3RhdGljIHZvaWQgaWxrX3BpcGVfd21fZ2V0X2h3X3N0YXRl KHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKPiA+ICAjZGVmaW5lIF9GV19XTV9WTFYodmFsdWUsIHBs YW5lKSBcCj4gPiAgCSgoKHZhbHVlKSAmIERTUEZXXyAjIyBwbGFuZSAjIyBfTUFTS19WTFYpID4+ IERTUEZXXyAjIyBwbGFuZSAjIyBfU0hJRlQpCj4gPiAgCj4gPiArc3RhdGljIHZvaWQgZzR4X3Jl YWRfd21fdmFsdWVzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPiA+ICsJCQkg ICAgICAgc3RydWN0IGc0eF93bV92YWx1ZXMgKndtKQo+ID4gK3sKPiA+ICsJdWludDMyX3QgdG1w Owo+ID4gKwo+ID4gKwl0bXAgPSBJOTE1X1JFQUQoRFNQRlcxKTsKPiA+ICsJd20tPnNyLnBsYW5l ID0gX0ZXX1dNKHRtcCwgU1IpOwo+ID4gKwl3bS0+cGlwZVtQSVBFX0JdLnBsYW5lW1BMQU5FX0NV UlNPUl0gPSBfRldfV00odG1wLCBDVVJTT1JCKTsKPiA+ICsJd20tPnBpcGVbUElQRV9CXS5wbGFu ZVtQTEFORV9QUklNQVJZXSA9IF9GV19XTSh0bXAsIFBMQU5FQik7Cj4gPiArCXdtLT5waXBlW1BJ UEVfQV0ucGxhbmVbUExBTkVfUFJJTUFSWV0gPSBfRldfV00odG1wLCBQTEFORUEpOwo+ID4gKwo+ ID4gKwl0bXAgPSBJOTE1X1JFQUQoRFNQRlcyKTsKPiA+ICsJd20tPmZiY19lbiA9IHRtcCAmIERT UEZXX0ZCQ19TUl9FTjsKPiA+ICsJd20tPnNyLmZiYyA9IF9GV19XTSh0bXAsIEZCQ19TUik7Cj4g PiArCXdtLT5ocGxsLmZiYyA9IF9GV19XTSh0bXAsIEZCQ19IUExMX1NSKTsKPiA+ICsJd20tPnBp cGVbUElQRV9CXS5wbGFuZVtQTEFORV9TUFJJVEUwXSA9IF9GV19XTSh0bXAsIFNQUklURUIpOwo+ ID4gKwl3bS0+cGlwZVtQSVBFX0FdLnBsYW5lW1BMQU5FX0NVUlNPUl0gPSBfRldfV00odG1wLCBD VVJTT1JBKTsKPiA+ICsJd20tPnBpcGVbUElQRV9BXS5wbGFuZVtQTEFORV9TUFJJVEUwXSA9IF9G V19XTSh0bXAsIFNQUklURUEpOwo+ID4gKwo+ID4gKwl0bXAgPSBJOTE1X1JFQUQoRFNQRlczKTsK PiA+ICsJd20tPmhwbGxfZW4gPSB0bXAgJiBEU1BGV19IUExMX1NSX0VOOwo+ID4gKwl3bS0+c3Iu Y3Vyc29yID0gX0ZXX1dNKHRtcCwgQ1VSU09SX1NSKTsKPiA+ICsJd20tPmhwbGwuY3Vyc29yID0g X0ZXX1dNKHRtcCwgSFBMTF9DVVJTT1IpOwo+ID4gKwl3bS0+aHBsbC5wbGFuZSA9IF9GV19XTSh0 bXAsIEhQTExfU1IpOwo+ID4gK30KPiA+ICsKPiA+ICBzdGF0aWMgdm9pZCB2bHZfcmVhZF93bV92 YWx1ZXMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+ID4gIAkJCSAgICAgICBz dHJ1Y3Qgdmx2X3dtX3ZhbHVlcyAqd20pCj4gPiAgewo+ID4gQEAgLTQ4NTQsNiArNTIxNywxNDcg QEAgc3RhdGljIHZvaWQgdmx2X3JlYWRfd21fdmFsdWVzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICpkZXZfcHJpdiwKPiA+ICAjdW5kZWYgX0ZXX1dNCj4gPiAgI3VuZGVmIF9GV19XTV9WTFYKPiA+ ICAKPiA+ICt2b2lkIGc0eF93bV9nZXRfaHdfc3RhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRldikK PiA+ICt7Cj4gPiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUo ZGV2KTsKPiA+ICsJc3RydWN0IGc0eF93bV92YWx1ZXMgKndtID0gJmRldl9wcml2LT53bS5nNHg7 Cj4gPiArCXN0cnVjdCBpbnRlbF9jcnRjICpjcnRjOwo+ID4gKwo+ID4gKwlnNHhfcmVhZF93bV92 YWx1ZXMoZGV2X3ByaXYsIHdtKTsKPiA+ICsKPiA+ICsJd20tPmN4c3IgPSBJOTE1X1JFQUQoRldf QkxDX1NFTEYpICYgRldfQkxDX1NFTEZfRU47Cj4gPiArCj4gPiArCWZvcl9lYWNoX2ludGVsX2Ny dGMoZGV2LCBjcnRjKSB7Cj4gPiArCQlzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0 ZSA9Cj4gPiArCQkJdG9faW50ZWxfY3J0Y19zdGF0ZShjcnRjLT5iYXNlLnN0YXRlKTsKPiA+ICsJ CXN0cnVjdCBnNHhfd21fc3RhdGUgKmFjdGl2ZSA9ICZjcnRjLT53bS5hY3RpdmUuZzR4Owo+ID4g KwkJc3RydWN0IGc0eF9waXBlX3dtICpyYXc7Cj4gPiArCQllbnVtIHBpcGUgcGlwZSA9IGNydGMt PnBpcGU7Cj4gPiArCQllbnVtIHBsYW5lX2lkIHBsYW5lX2lkOwo+ID4gKwkJaW50IGxldmVsLCBt YXhfbGV2ZWw7Cj4gPiArCj4gPiArCQlhY3RpdmUtPmN4c3IgPSB3bS0+Y3hzcjsKPiA+ICsJCWFj dGl2ZS0+aHBsbF9lbiA9IHdtLT5ocGxsX2VuOwo+ID4gKwkJYWN0aXZlLT5mYmNfZW4gPSB3bS0+ ZmJjX2VuOwo+ID4gKwo+ID4gKwkJYWN0aXZlLT5zciA9IHdtLT5zcjsKPiA+ICsJCWFjdGl2ZS0+ aHBsbCA9IHdtLT5ocGxsOwo+ID4gKwo+ID4gKwkJZm9yX2VhY2hfcGxhbmVfaWRfb25fY3J0Yyhj cnRjLCBwbGFuZV9pZCkgewo+ID4gKwkJCWFjdGl2ZS0+d20ucGxhbmVbcGxhbmVfaWRdID0KPiA+ ICsJCQkJd20tPnBpcGVbcGlwZV0ucGxhbmVbcGxhbmVfaWRdOwo+ID4gKwkJfQo+ID4gKwo+ID4g KwkJaWYgKHdtLT5jeHNyICYmIHdtLT5ocGxsX2VuKQo+ID4gKwkJCW1heF9sZXZlbCA9IEc0WF9X TV9MRVZFTF9IUExMOwo+ID4gKwkJZWxzZSBpZiAod20tPmN4c3IpCj4gPiArCQkJbWF4X2xldmVs ID0gRzRYX1dNX0xFVkVMX1NSOwo+ID4gKwkJZWxzZQo+ID4gKwkJCW1heF9sZXZlbCA9IEc0WF9X TV9MRVZFTF9OT1JNQUw7Cj4gPiArCj4gPiArCQlsZXZlbCA9IEc0WF9XTV9MRVZFTF9OT1JNQUw7 Cj4gPiArCQlyYXcgPSAmY3J0Y19zdGF0ZS0+d20uZzR4LnJhd1tsZXZlbF07Cj4gPiArCQlmb3Jf ZWFjaF9wbGFuZV9pZF9vbl9jcnRjKGNydGMsIHBsYW5lX2lkKQo+ID4gKwkJCXJhdy0+cGxhbmVb cGxhbmVfaWRdID0gYWN0aXZlLT53bS5wbGFuZVtwbGFuZV9pZF07Cj4gPiArCj4gPiArCQlpZiAo KytsZXZlbCA+IG1heF9sZXZlbCkKPiA+ICsJCQlnb3RvIG91dDsKPiA+ICsKPiA+ICsJCXJhdyA9 ICZjcnRjX3N0YXRlLT53bS5nNHgucmF3W2xldmVsXTsKPiA+ICsJCXJhdy0+cGxhbmVbUExBTkVf UFJJTUFSWV0gPSBhY3RpdmUtPnNyLnBsYW5lOwo+ID4gKwkJcmF3LT5wbGFuZVtQTEFORV9DVVJT T1JdID0gYWN0aXZlLT5zci5jdXJzb3I7Cj4gPiArCQlyYXctPnBsYW5lW1BMQU5FX1NQUklURTBd ID0gMDsKPiA+ICsJCXJhdy0+ZmJjID0gYWN0aXZlLT5zci5mYmM7Cj4gPiArCj4gPiArCQlpZiAo KytsZXZlbCA+IG1heF9sZXZlbCkKPiA+ICsJCQlnb3RvIG91dDsKPiA+ICsKPiA+ICsJCXJhdyA9 ICZjcnRjX3N0YXRlLT53bS5nNHgucmF3W2xldmVsXTsKPiA+ICsJCXJhdy0+cGxhbmVbUExBTkVf UFJJTUFSWV0gPSBhY3RpdmUtPmhwbGwucGxhbmU7Cj4gPiArCQlyYXctPnBsYW5lW1BMQU5FX0NV UlNPUl0gPSBhY3RpdmUtPmhwbGwuY3Vyc29yOwo+ID4gKwkJcmF3LT5wbGFuZVtQTEFORV9TUFJJ VEUwXSA9IDA7Cj4gPiArCQlyYXctPmZiYyA9IGFjdGl2ZS0+aHBsbC5mYmM7Cj4gPiArCj4gPiAr CW91dDoKPiA+ICsJCWZvcl9lYWNoX3BsYW5lX2lkX29uX2NydGMoY3J0YywgcGxhbmVfaWQpCj4g PiArCQkJZzR4X3Jhd19wbGFuZV93bV9zZXQoY3J0Y19zdGF0ZSwgbGV2ZWwsCj4gPiArCQkJCQkg ICAgIHBsYW5lX2lkLCBVU0hSVF9NQVgpOwo+ID4gKwkJZzR4X3Jhd19mYmNfd21fc2V0KGNydGNf c3RhdGUsIGxldmVsLCBVU0hSVF9NQVgpOwo+ID4gKwo+ID4gKwkJY3J0Y19zdGF0ZS0+d20uZzR4 Lm9wdGltYWwgPSAqYWN0aXZlOwo+ID4gKwkJY3J0Y19zdGF0ZS0+d20uZzR4LmludGVybWVkaWF0 ZSA9ICphY3RpdmU7Cj4gPiArCj4gPiArCQlEUk1fREVCVUdfS01TKCJJbml0aWFsIHdhdGVybWFy a3M6IHBpcGUgJWMsIHBsYW5lPSVkLCBjdXJzb3I9JWQsIHNwcml0ZT0lZFxuIiwKPiA+ICsJCQkg ICAgICBwaXBlX25hbWUocGlwZSksCj4gPiArCQkJICAgICAgd20tPnBpcGVbcGlwZV0ucGxhbmVb UExBTkVfUFJJTUFSWV0sCj4gPiArCQkJICAgICAgd20tPnBpcGVbcGlwZV0ucGxhbmVbUExBTkVf Q1VSU09SXSwKPiA+ICsJCQkgICAgICB3bS0+cGlwZVtwaXBlXS5wbGFuZVtQTEFORV9TUFJJVEUw XSk7Cj4gPiArCX0KPiA+ICsKPiA+ICsJRFJNX0RFQlVHX0tNUygiSW5pdGlhbCBTUiB3YXRlcm1h cmtzOiBwbGFuZT0lZCwgY3Vyc29yPSVkIGZiYz0lZFxuIiwKPiA+ICsJCSAgICAgIHdtLT5zci5w bGFuZSwgd20tPnNyLmN1cnNvciwgd20tPnNyLmZiYyk7Cj4gPiArCURSTV9ERUJVR19LTVMoIklu aXRpYWwgSFBMTCB3YXRlcm1hcmtzOiBwbGFuZT0lZCwgU1IgY3Vyc29yPSVkIGZiYz0lZFxuIiwK PiA+ICsJCSAgICAgIHdtLT5ocGxsLnBsYW5lLCB3bS0+aHBsbC5jdXJzb3IsIHdtLT5ocGxsLmZi Yyk7Cj4gPiArCURSTV9ERUJVR19LTVMoIkluaXRpYWwgU1I9JXMgSFBMTD0lcyBGQkM9JXNcbiIs Cj4gPiArCQkgICAgICB5ZXNubyh3bS0+Y3hzciksIHllc25vKHdtLT5ocGxsX2VuKSwgeWVzbm8o d20tPmZiY19lbikpOwo+ID4gK30KPiA+ICsKPiA+ICt2b2lkIGc0eF93bV9zYW5pdGl6ZShzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4gPiArewo+ID4gKwlzdHJ1Y3QgaW50ZWxf cGxhbmUgKnBsYW5lOwo+ID4gKwlzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YzsKPiA+ICsKPiA+ICsJ bXV0ZXhfbG9jaygmZGV2X3ByaXYtPndtLndtX211dGV4KTsKPiA+ICsKPiA+ICsJZm9yX2VhY2hf aW50ZWxfcGxhbmUoJmRldl9wcml2LT5kcm0sIHBsYW5lKSB7Cj4gPiArCQlzdHJ1Y3QgaW50ZWxf Y3J0YyAqY3J0YyA9Cj4gPiArCQkJaW50ZWxfZ2V0X2NydGNfZm9yX3BpcGUoZGV2X3ByaXYsIHBs YW5lLT5waXBlKTsKPiA+ICsJCXN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlID0K PiA+ICsJCQl0b19pbnRlbF9jcnRjX3N0YXRlKGNydGMtPmJhc2Uuc3RhdGUpOwo+ID4gKwkJc3Ry dWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSA9Cj4gPiArCQkJdG9faW50ZWxfcGxh bmVfc3RhdGUocGxhbmUtPmJhc2Uuc3RhdGUpOwo+ID4gKwkJc3RydWN0IGc0eF93bV9zdGF0ZSAq d21fc3RhdGUgPSAmY3J0Y19zdGF0ZS0+d20uZzR4Lm9wdGltYWw7Cj4gPiArCQllbnVtIHBsYW5l X2lkIHBsYW5lX2lkID0gcGxhbmUtPmlkOwo+ID4gKwkJaW50IGxldmVsOwo+ID4gKwo+ID4gKwkJ aWYgKHBsYW5lX3N0YXRlLT5iYXNlLnZpc2libGUpCj4gPiArCQkJY29udGludWU7Cj4gPiArCj4g PiArCQlmb3IgKGxldmVsID0gMDsgbGV2ZWwgPCAzOyBsZXZlbCsrKSB7Cj4gPiArCQkJc3RydWN0 IGc0eF9waXBlX3dtICpyYXcgPQo+ID4gKwkJCQkmY3J0Y19zdGF0ZS0+d20uZzR4LnJhd1tsZXZl bF07Cj4gPiArCj4gPiArCQkJcmF3LT5wbGFuZVtwbGFuZV9pZF0gPSAwOwo+ID4gKwkJCXdtX3N0 YXRlLT53bS5wbGFuZVtwbGFuZV9pZF0gPSAwOwo+ID4gKwkJfQo+ID4gKwo+ID4gKwkJaWYgKHBs YW5lX2lkID09IFBMQU5FX1BSSU1BUlkpIHsKPiA+ICsJCQlmb3IgKGxldmVsID0gMDsgbGV2ZWwg PCAzOyBsZXZlbCsrKSB7Cj4gPiArCQkJCXN0cnVjdCBnNHhfcGlwZV93bSAqcmF3ID0KPiA+ICsJ CQkJCSZjcnRjX3N0YXRlLT53bS5nNHgucmF3W2xldmVsXTsKPiA+ICsJCQkJcmF3LT5mYmMgPSAw Owo+ID4gKwkJCX0KPiA+ICsKPiA+ICsJCQl3bV9zdGF0ZS0+c3IuZmJjID0gMDsKPiA+ICsJCQl3 bV9zdGF0ZS0+aHBsbC5mYmMgPSAwOwo+ID4gKwkJCXdtX3N0YXRlLT5mYmNfZW4gPSBmYWxzZTsK PiA+ICsJCX0KPiA+ICsJfQo+ID4gKwo+ID4gKwlmb3JfZWFjaF9pbnRlbF9jcnRjKCZkZXZfcHJp di0+ZHJtLCBjcnRjKSB7Cj4gPiArCQlzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0 ZSA9Cj4gPiArCQkJdG9faW50ZWxfY3J0Y19zdGF0ZShjcnRjLT5iYXNlLnN0YXRlKTsKPiA+ICsK PiA+ICsJCWNydGNfc3RhdGUtPndtLmc0eC5pbnRlcm1lZGlhdGUgPQo+ID4gKwkJCWNydGNfc3Rh dGUtPndtLmc0eC5vcHRpbWFsOwo+ID4gKwkJY3J0Yy0+d20uYWN0aXZlLmc0eCA9IGNydGNfc3Rh dGUtPndtLmc0eC5vcHRpbWFsOwo+ID4gKwl9Cj4gPiArCj4gPiArCWc0eF9wcm9ncmFtX3dhdGVy bWFya3MoZGV2X3ByaXYpOwo+ID4gKwo+ID4gKwltdXRleF91bmxvY2soJmRldl9wcml2LT53bS53 bV9tdXRleCk7Cj4gPiArfQo+ID4gKwo+ID4gIHZvaWQgdmx2X3dtX2dldF9od19zdGF0ZShzdHJ1 Y3QgZHJtX2RldmljZSAqZGV2KQo+ID4gIHsKPiA+ICAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg KmRldl9wcml2ID0gdG9faTkxNShkZXYpOwo+ID4gQEAgLTgxNjAsNiArODY2NCwxMiBAQCB2b2lk IGludGVsX2luaXRfcG0oc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+ID4gIAkJ ZGV2X3ByaXYtPmRpc3BsYXkuaW5pdGlhbF93YXRlcm1hcmtzID0gdmx2X2luaXRpYWxfd2F0ZXJt YXJrczsKPiA+ICAJCWRldl9wcml2LT5kaXNwbGF5Lm9wdGltaXplX3dhdGVybWFya3MgPSB2bHZf b3B0aW1pemVfd2F0ZXJtYXJrczsKPiA+ICAJCWRldl9wcml2LT5kaXNwbGF5LmF0b21pY191cGRh dGVfd2F0ZXJtYXJrcyA9IHZsdl9hdG9taWNfdXBkYXRlX2ZpZm87Cj4gPiArCX0gZWxzZSBpZiAo SVNfRzRYKGRldl9wcml2KSkgewo+ID4gKwkJZzR4X3NldHVwX3dtX2xhdGVuY3koZGV2X3ByaXYp Owo+ID4gKwkJZGV2X3ByaXYtPmRpc3BsYXkuY29tcHV0ZV9waXBlX3dtID0gZzR4X2NvbXB1dGVf cGlwZV93bTsKPiA+ICsJCWRldl9wcml2LT5kaXNwbGF5LmNvbXB1dGVfaW50ZXJtZWRpYXRlX3dt ID0gZzR4X2NvbXB1dGVfaW50ZXJtZWRpYXRlX3dtOwo+ID4gKwkJZGV2X3ByaXYtPmRpc3BsYXku aW5pdGlhbF93YXRlcm1hcmtzID0gZzR4X2luaXRpYWxfd2F0ZXJtYXJrczsKPiA+ICsJCWRldl9w cml2LT5kaXNwbGF5Lm9wdGltaXplX3dhdGVybWFya3MgPSBnNHhfb3B0aW1pemVfd2F0ZXJtYXJr czsKPiA+ICAJfSBlbHNlIGlmIChJU19QSU5FVklFVyhkZXZfcHJpdikpIHsKPiA+ICAJCWlmICgh aW50ZWxfZ2V0X2N4c3JfbGF0ZW5jeShJU19QSU5FVklFV19HKGRldl9wcml2KSwKPiA+ICAJCQkJ CSAgICBkZXZfcHJpdi0+aXNfZGRyMywKPiA+IEBAIC04MTc1LDggKzg2ODUsNiBAQCB2b2lkIGlu dGVsX2luaXRfcG0oc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+ID4gIAkJCWRl dl9wcml2LT5kaXNwbGF5LnVwZGF0ZV93bSA9IE5VTEw7Cj4gPiAgCQl9IGVsc2UKPiA+ICAJCQlk ZXZfcHJpdi0+ZGlzcGxheS51cGRhdGVfd20gPSBwaW5ldmlld191cGRhdGVfd207Cj4gPiAtCX0g ZWxzZSBpZiAoSVNfRzRYKGRldl9wcml2KSkgewo+ID4gLQkJZGV2X3ByaXYtPmRpc3BsYXkudXBk YXRlX3dtID0gZzR4X3VwZGF0ZV93bTsKPiA+ICAJfSBlbHNlIGlmIChJU19HRU40KGRldl9wcml2 KSkgewo+ID4gIAkJZGV2X3ByaXYtPmRpc3BsYXkudXBkYXRlX3dtID0gaTk2NV91cGRhdGVfd207 Cj4gPiAgCX0gZWxzZSBpZiAoSVNfR0VOMyhkZXZfcHJpdikpIHsKPiAKCi0tIApWaWxsZSBTeXJq w6Rsw6QKSW50ZWwgT1RDCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9w Lm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVs LWdmeAo=