From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Thulasimani, Sivakumar" Subject: Re: [PATCH v5 01/12] drm/i915: Rewrite fb rotation GTT handling Date: Thu, 5 May 2016 13:42:33 +0530 Message-ID: <572B0071.7060405@intel.com> References: <1462290001-9246-1-git-send-email-ville.syrjala@linux.intel.com> <1462290001-9246-2-git-send-email-ville.syrjala@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) by gabe.freedesktop.org (Postfix) with ESMTP id 2282C6E43F for ; Thu, 5 May 2016 08:12:36 +0000 (UTC) In-Reply-To: <1462290001-9246-2-git-send-email-ville.syrjala@linux.intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: ville.syrjala@linux.intel.com, intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org CgpPbiA1LzMvMjAxNiA5OjA5IFBNLCB2aWxsZS5zeXJqYWxhQGxpbnV4LmludGVsLmNvbSB3cm90 ZToKPiBGcm9tOiBWaWxsZSBTeXJqw6Rsw6QgPHZpbGxlLnN5cmphbGFAbGludXguaW50ZWwuY29t Pgo+Cj4gUmVkbyB0aGUgZmIgcm90YXRpb24gaGFuZGxpbmcgaW4gb3JkZXIgdG86Cj4gLSBlbGlt aW5hdGUgdGhlIE5WMTIgc3BlY2lhbCBjYXNpbmcKPiAtIGhhbmRsZSBmYi0+b2Zmc2V0c1tdIHBy b3Blcmx5Cj4gLSBtYWtlIHRoZSByb3RhdGlvbiBoYW5kbGluZyByZWFzaWVyIGZvciB0aGUgcGxh bmUgY29kZQp0eXBvICJlYXNpZXIiIDopIG90aGVyd2lzZSBmaW5lLiB0aGFua3MgZm9yIHVwbG9h ZGluZyB0aGUgcGF0Y2hlcyBhZ2Fpbi4KCnJlZ2FyZHMsClNpdmFrdW1hcgo+IFRvIGFjaGlldmUg dGhlc2UgZ29hbHMgd2UgcmVkdWNlIGludGVsX3JvdGF0aW9uX2luZm8gdG8gb25seSBjb250YWlu Cj4gKGZvciBlYWNoIHBsYW5lKSB0aGUgcm90YXRlZCB2aWV3IHdpZHRoLGhlaWdodCxzdHJpZGUg aW4gdGlsZSB1bml0cywKPiBhbmQgdGhlIHBhZ2Ugb2Zmc2V0IGludG8gdGhlIG9iamVjdCB3aGVy ZSB0aGUgcGxhbmUgc3RhcnRzLiBFYWNoIHBsYW5lCj4gaXMgaGFuZGxlZCBleGFjdGx5IHRoZSBz YW1lIHdheSwgbm8gc3BlY2lhbCBjYXNpbmcgZm9yIE5WMTIgb3Igb3RoZXIKPiBmb3JtYXRzLiBX ZSB0aGVuIHN0b3JlIHRoZSBjb21wdXRlZCByb3RhdGlvbl9pbmZvIHVuZGVyCj4gaW50ZWxfZnJh bWVidWZmZXIgc28gdGhhdCB3ZSBkb24ndCBoYXZlIHRvIHJlY29tcHV0ZSBpdCBhZ2Fpbi4KPgo+ IFRvIGhhbmRsZSBmYi0+b2Zmc2V0c1tdIHdlIHRyZWF0IHRoZW0gYXMgYSBsaW5lYXIgb2Zmc2V0 cyBhbmQgY29udmVydAo+IHRoZW0gdG8geC95IG9mZnNldHMgZnJvbSB0aGUgc3RhcnQgb2YgdGhl IHJlbGV2YW50IEdUVCBtYXBwaW5nIChlaXRoZXIKPiBub3JtYWwgb3Igcm90YXRlZCkuIFdlIHN0 b3JlIHRoZSB4L3kgb2Zmc2V0cyB1bmRlciBpbnRlbF9mcmFtZWJ1ZmZlciwKPiBhbmQgZm9yIHNv bWUgZXh0cmEgY29udmVuaWVuY2Ugd2UgYWxzbyBzdG9yZSB0aGUgcm90YXRlZCBwaXRjaCAoaWUu Cj4gdGlsZSBhbGlnbmVkIHBsYW5lIGhlaWdodCkuIFNvIGZvciBlYWNoIHBsYW5lIHdlIGhhdmUg dGhlIG5vcm1hbAo+IHgveSBvZmZzZXRzLCByb3RhdGVkIHgveSBvZmZzZXRzLCBhbmQgdGhlIHJv dGF0ZWQgcGl0Y2guIFRoZSBub3JtYWwKPiBwaXRjaCBpcyBhdmFpbGFibGUgYWxyZWFkeSBpbiBm Yi0+cGl0Y2hlc1tdLgo+Cj4gV2hpbGUgd2UncmUgZ2F0aGVyaW5nIHVwIGFsbCB0aGF0IGV4dHJh IGluZm9ybWF0aW9uLCB3ZSBjYW4gYWxzbyBlYXNpbHkKPiBjb21wdXRlIHRoZSBzdG9yYWdlIHJl cXVpcmVtZW50cyBmb3IgdGhlIGZyYW1lYnVmZmVyLCBzbyB0aGF0IHdlIGNhbgo+IGNoZWNrIHRo YXQgdGhlIG9iamVjdCBpcyBiaWcgZW5vdWdoIHRvIGhvbGQgaXQuCj4KPiBXaGVuIGl0IGNvbWVz IHRpbWUgdG8gZGVhbCB3aXRoIHRoZSBwbGFuZSBzb3VyY2UgY29vcmRpbmF0ZXMsIHdlIGZpcnN0 Cj4gcm90YXRlIHRoZSBjbGlwcGVkIHNyYyBjb29yZGluYXRlcyB0byBtYXRjaCB0aGUgcmVsZXZh bnQgR1RUIHZpZXcKPiBvcmllbnRhdGlvbiwgdGhlbiBhZGQgdG8gdGhlbSB0aGUgZmIgeC95IG9m ZnNldHMuIE5leHQgd2UgY29tcHV0ZQo+IHRoZSBhbGlnbmVkIHN1cmZhY2UgcGFnZSBvZmZzZXQs IGFuZCBhcyBhIHJlc3VsdCB3ZSdyZSBsZWZ0IHdpdGggc29tZQo+IHJlc2lkdWFsIHgveSBvZmZz ZXRzLiBGaW5hbGx5LCBpZiByZXF1aXJlZCBieSB0aGUgaGFyZHdhcmUsIHdlIGNvbnZlcnQKPiB0 aGUgcmVtYWluaW5nIHgveSBvZmZzZXRzIGludG8gYSBsaW5lYXIgb2Zmc2V0Lgo+Cj4gRm9yIGdl bjIvMyB3ZSBzaW1wbHkgc2tpcCBjb21wdXRpbmcgdGhlIGZpbmFsIHBhZ2Ugb2Zmc2V0LCBhbmQg anVzdAo+IGNvbnZlcnQgdGhlIHNyYytmYiB4L3kgb2Zmc2V0cyBkaXJlY3RseSBpbnRvIGEgbGlu ZWFyIG9mZnNldCBzaW5jZQo+IHRoYXQncyB3aGF0IHRoZSBoYXJkd2FyZSB3YW50cy4KPgo+IEFm dGVyIHRoaXMgYWxsIHBsYXRmb3JtcywgaW5jbHVpbmcgU0tMKywgY29tcHV0ZSB0aGVzZSB0aGlu Z3MgaW4gZXhhY3RseQo+IHRoZSBzYW1lIHdheSAoZXhjbHVkaW5nIGFsaWduZW1udCBkaWZmZXJl bmNlcykuCj4KPiB2MjogVXNlIEJJVChEUk1fUk9UQVRFXzI3MCkgaW5zdGVhZCBvZiBST1RBVEVf MjcwIHdoZW4gcm90YXRpbmcKPiAgICAgIHBsYW5lIHNyYyBjb29yZGluYXRlcwo+ICAgICAgRHJv cCBzb21lIHNwdXJpb3VzIGNoYW5nZXMgdGhhdCBnb3QgbGVmdCBiZWhpbmQgZHVyaW5nCj4gICAg ICBkZXZlbG9wbWVudAo+IHYzOiBTcGxpdCBvdXQgbW9yZSBjaGFuZ2VzIHRvIHByZXAgcGF0Y2hl cyAoRGFuaWVsKQo+ICAgICAgcy9pbnRlbF9mYi0+cGxhbmVbXS5mb28uYmFyL2ludGVsX2ZiLT5m b29bXS5iYXIvIGZvciBicmV2aXR5Cj4gICAgICBSZW5hbWUgaW50ZWxfc3VyZl9ndHRfb2Zmc2V0 IHRvIGludGVsX2ZiX2d0dF9vZmZzZXQKPiAgICAgIEtpbGwgdGhlIHBvaW50bGVzcyAncGxhbmUn IHBhcmFtZXRlciBmcm9tIGludGVsX2ZiX2d0dF9vZmZzZXQoKQo+IHY0OiBGaXggYWxpZ25tZW50 IHZzLiBhbGlnbm1lbnQtMSB3aGVuIGNhbGxpbmcKPiAgICAgIF9pbnRlbF9jb21wdXRlX3RpbGVf b2Zmc2V0KCkgZnJvbSBpbnRlbF9maWxsX2ZiX2luZm8oKQo+ICAgICAgUGFzcyB0aGUgcGl0Y2gg aW4gdGlsZXMgaW4KPiAgICAgIHN0YWQgb2YgcGl4ZWxzIHRvIGludGVsX2FkanVzdF90aWxlX29m ZnNldCgpIGZyb20gaW50ZWxfZmlsbF9mYl9pbmZvKCkKPiAgICAgIFBhc3MgdGhlIGZ1bGwgd2lk dGgvaGVpZ2h0IG9mIHRoZSByb3RhdGVkIGFyZWEgdG8KPiAgICAgIGRybV9yZWN0X3JvdGF0ZSgp IGZvciBjbGFyaXR5Cj4gICAgICBVc2UgdTMyIGZvciBtb3JlIG9mZnNldHMKPiB2NTogUHJlc2Vy dmUgdGhlIHVwcGVyXzMyX2JpdHMoKS9sb3dlcl8zMl9iaXRzKCkgaGFuZGxpbmcgZm9yIHRoZQo+ ICAgICAgZmIgZ2d0dCBvZmZzZXQgKFNpdmFrdW1hcikKPgo+IENjOiBTaXZha3VtYXIgVGh1bGFz aW1hbmkgPHNpdmFrdW1hci50aHVsYXNpbWFuaUBpbnRlbC5jb20+Cj4gU2lnbmVkLW9mZi1ieTog VmlsbGUgU3lyasOkbMOkIDx2aWxsZS5zeXJqYWxhQGxpbnV4LmludGVsLmNvbT4KPiAtLS0KPiAg IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2d0dC5jICB8ICA1MSArKy0tLQo+ICAgZHJp dmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZ3R0LmggIHwgICA1ICstCj4gICBkcml2ZXJzL2dw dS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMgfCAzNjggKysrKysrKysrKysrKysrKysrKysrKysr LS0tLS0tLS0tLS0KPiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rydi5oICAgICB8ICAx OSArLQo+ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfc3ByaXRlLmMgIHwgIDk3ICsrKyst LS0tLQo+ICAgNSBmaWxlcyBjaGFuZ2VkLCAzMzEgaW5zZXJ0aW9ucygrKSwgMjA5IGRlbGV0aW9u cygtKQo+Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2d0dC5j IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZ3R0LmMKPiBpbmRleCAzNjRjZjgyMzYw MjEuLjcyMTBjZmZjYmFlYiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1 X2dlbV9ndHQuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2d0dC5jCj4g QEAgLTMzODEsMTYgKzMzODEsMTQgQEAgcm90YXRlX3BhZ2VzKGNvbnN0IGRtYV9hZGRyX3QgKmlu LCB1bnNpZ25lZCBpbnQgb2Zmc2V0LAo+ICAgfQo+ICAgCj4gICBzdGF0aWMgc3RydWN0IHNnX3Rh YmxlICoKPiAtaW50ZWxfcm90YXRlX2ZiX29ial9wYWdlcyhzdHJ1Y3QgaW50ZWxfcm90YXRpb25f aW5mbyAqcm90X2luZm8sCj4gK2ludGVsX3JvdGF0ZV9mYl9vYmpfcGFnZXMoY29uc3Qgc3RydWN0 IGludGVsX3JvdGF0aW9uX2luZm8gKnJvdF9pbmZvLAo+ICAgCQkJICBzdHJ1Y3QgZHJtX2k5MTVf Z2VtX29iamVjdCAqb2JqKQo+ICAgewo+IC0JdW5zaWduZWQgaW50IHNpemVfcGFnZXMgPSByb3Rf aW5mby0+cGxhbmVbMF0ud2lkdGggKiByb3RfaW5mby0+cGxhbmVbMF0uaGVpZ2h0Owo+IC0JdW5z aWduZWQgaW50IHNpemVfcGFnZXNfdXY7Cj4gKwl1bnNpZ25lZCBpbnQgc2l6ZSA9IGludGVsX3Jv dGF0aW9uX2luZm9fc2l6ZShyb3RfaW5mbyk7Cj4gICAJc3RydWN0IHNnX3BhZ2VfaXRlciBzZ19p dGVyOwo+ICAgCXVuc2lnbmVkIGxvbmcgaTsKPiAgIAlkbWFfYWRkcl90ICpwYWdlX2FkZHJfbGlz dDsKPiAgIAlzdHJ1Y3Qgc2dfdGFibGUgKnN0Owo+IC0JdW5zaWduZWQgaW50IHV2X3N0YXJ0X3Bh Z2U7Cj4gICAJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZzsKPiAgIAlpbnQgcmV0ID0gLUVOT01FTTsK PiAgIAo+IEBAIC0zNDAxLDE4ICszMzk5LDEyIEBAIGludGVsX3JvdGF0ZV9mYl9vYmpfcGFnZXMo c3RydWN0IGludGVsX3JvdGF0aW9uX2luZm8gKnJvdF9pbmZvLAo+ICAgCWlmICghcGFnZV9hZGRy X2xpc3QpCj4gICAJCXJldHVybiBFUlJfUFRSKHJldCk7Cj4gICAKPiAtCS8qIEFjY291bnQgZm9y IFVWIHBsYW5lIHdpdGggTlYxMi4gKi8KPiAtCWlmIChyb3RfaW5mby0+cGl4ZWxfZm9ybWF0ID09 IERSTV9GT1JNQVRfTlYxMikKPiAtCQlzaXplX3BhZ2VzX3V2ID0gcm90X2luZm8tPnBsYW5lWzFd LndpZHRoICogcm90X2luZm8tPnBsYW5lWzFdLmhlaWdodDsKPiAtCWVsc2UKPiAtCQlzaXplX3Bh Z2VzX3V2ID0gMDsKPiAtCj4gICAJLyogQWxsb2NhdGUgdGFyZ2V0IFNHIGxpc3QuICovCj4gICAJ c3QgPSBrbWFsbG9jKHNpemVvZigqc3QpLCBHRlBfS0VSTkVMKTsKPiAgIAlpZiAoIXN0KQo+ICAg CQlnb3RvIGVycl9zdF9hbGxvYzsKPiAgIAo+IC0JcmV0ID0gc2dfYWxsb2NfdGFibGUoc3QsIHNp emVfcGFnZXMgKyBzaXplX3BhZ2VzX3V2LCBHRlBfS0VSTkVMKTsKPiArCXJldCA9IHNnX2FsbG9j X3RhYmxlKHN0LCBzaXplLCBHRlBfS0VSTkVMKTsKPiAgIAlpZiAocmV0KQo+ICAgCQlnb3RvIGVy cl9zZ19hbGxvYzsKPiAgIAo+IEBAIC0zNDI2LDMyICszNDE4LDE0IEBAIGludGVsX3JvdGF0ZV9m Yl9vYmpfcGFnZXMoc3RydWN0IGludGVsX3JvdGF0aW9uX2luZm8gKnJvdF9pbmZvLAo+ICAgCXN0 LT5uZW50cyA9IDA7Cj4gICAJc2cgPSBzdC0+c2dsOwo+ICAgCj4gLQkvKiBSb3RhdGUgdGhlIHBh Z2VzLiAqLwo+IC0Jc2cgPSByb3RhdGVfcGFnZXMocGFnZV9hZGRyX2xpc3QsIDAsCj4gLQkJCSAg cm90X2luZm8tPnBsYW5lWzBdLndpZHRoLCByb3RfaW5mby0+cGxhbmVbMF0uaGVpZ2h0LAo+IC0J CQkgIHJvdF9pbmZvLT5wbGFuZVswXS53aWR0aCwKPiAtCQkJICBzdCwgc2cpOwo+IC0KPiAtCS8q IEFwcGVuZCB0aGUgVVYgcGxhbmUgaWYgTlYxMi4gKi8KPiAtCWlmIChyb3RfaW5mby0+cGl4ZWxf Zm9ybWF0ID09IERSTV9GT1JNQVRfTlYxMikgewo+IC0JCXV2X3N0YXJ0X3BhZ2UgPSBzaXplX3Bh Z2VzOwo+IC0KPiAtCQkvKiBDaGVjayBmb3IgdGlsZS1yb3cgdW4tYWxpZ25tZW50LiAqLwo+IC0J CWlmIChvZmZzZXRfaW5fcGFnZShyb3RfaW5mby0+dXZfb2Zmc2V0KSkKPiAtCQkJdXZfc3RhcnRf cGFnZS0tOwo+IC0KPiAtCQlyb3RfaW5mby0+dXZfc3RhcnRfcGFnZSA9IHV2X3N0YXJ0X3BhZ2U7 Cj4gLQo+IC0JCXNnID0gcm90YXRlX3BhZ2VzKHBhZ2VfYWRkcl9saXN0LCByb3RfaW5mby0+dXZf c3RhcnRfcGFnZSwKPiAtCQkJCSAgcm90X2luZm8tPnBsYW5lWzFdLndpZHRoLCByb3RfaW5mby0+ cGxhbmVbMV0uaGVpZ2h0LAo+IC0JCQkJICByb3RfaW5mby0+cGxhbmVbMV0ud2lkdGgsCj4gLQkJ CQkgIHN0LCBzZyk7Cj4gKwlmb3IgKGkgPSAwIDsgaSA8IEFSUkFZX1NJWkUocm90X2luZm8tPnBs YW5lKTsgaSsrKSB7Cj4gKwkJc2cgPSByb3RhdGVfcGFnZXMocGFnZV9hZGRyX2xpc3QsIHJvdF9p bmZvLT5wbGFuZVtpXS5vZmZzZXQsCj4gKwkJCQkgIHJvdF9pbmZvLT5wbGFuZVtpXS53aWR0aCwg cm90X2luZm8tPnBsYW5lW2ldLmhlaWdodCwKPiArCQkJCSAgcm90X2luZm8tPnBsYW5lW2ldLnN0 cmlkZSwgc3QsIHNnKTsKPiAgIAl9Cj4gICAKPiAtCURSTV9ERUJVR19LTVMoIkNyZWF0ZWQgcm90 YXRlZCBwYWdlIG1hcHBpbmcgZm9yIG9iamVjdCBzaXplICV6dSAoJXV4JXUgdGlsZXMsICV1IHBh Z2VzICgldSBwbGFuZSAwKSkuXG4iLAo+IC0JCSAgICAgIG9iai0+YmFzZS5zaXplLCByb3RfaW5m by0+cGxhbmVbMF0ud2lkdGgsCj4gLQkJICAgICAgcm90X2luZm8tPnBsYW5lWzBdLmhlaWdodCwg c2l6ZV9wYWdlcyArIHNpemVfcGFnZXNfdXYsCj4gLQkJICAgICAgc2l6ZV9wYWdlcyk7Cj4gKwlE Uk1fREVCVUdfS01TKCJDcmVhdGVkIHJvdGF0ZWQgcGFnZSBtYXBwaW5nIGZvciBvYmplY3Qgc2l6 ZSAlenUgKCV1eCV1IHRpbGVzLCAldSBwYWdlcylcbiIsCj4gKwkJICAgICAgb2JqLT5iYXNlLnNp emUsIHJvdF9pbmZvLT5wbGFuZVswXS53aWR0aCwgcm90X2luZm8tPnBsYW5lWzBdLmhlaWdodCwg c2l6ZSk7Cj4gICAKPiAgIAlkcm1fZnJlZV9sYXJnZShwYWdlX2FkZHJfbGlzdCk7Cj4gICAKPiBA QCAtMzQ2MiwxMCArMzQzNiw5IEBAIGVycl9zZ19hbGxvYzoKPiAgIGVycl9zdF9hbGxvYzoKPiAg IAlkcm1fZnJlZV9sYXJnZShwYWdlX2FkZHJfbGlzdCk7Cj4gICAKPiAtCURSTV9ERUJVR19LTVMo IkZhaWxlZCB0byBjcmVhdGUgcm90YXRlZCBtYXBwaW5nIGZvciBvYmplY3Qgc2l6ZSAlenUhICgl ZCkgKCV1eCV1IHRpbGVzLCAldSBwYWdlcyAoJXUgcGxhbmUgMCkpXG4iLAo+IC0JCSAgICAgIG9i ai0+YmFzZS5zaXplLCByZXQsIHJvdF9pbmZvLT5wbGFuZVswXS53aWR0aCwKPiAtCQkgICAgICBy b3RfaW5mby0+cGxhbmVbMF0uaGVpZ2h0LCBzaXplX3BhZ2VzICsgc2l6ZV9wYWdlc191diwKPiAt CQkgICAgICBzaXplX3BhZ2VzKTsKPiArCURSTV9ERUJVR19LTVMoIkZhaWxlZCB0byBjcmVhdGUg cm90YXRlZCBtYXBwaW5nIGZvciBvYmplY3Qgc2l6ZSAlenUhICgldXgldSB0aWxlcywgJXUgcGFn ZXMpXG4iLAo+ICsJCSAgICAgIG9iai0+YmFzZS5zaXplLCByb3RfaW5mby0+cGxhbmVbMF0ud2lk dGgsIHJvdF9pbmZvLT5wbGFuZVswXS5oZWlnaHQsIHNpemUpOwo+ICsKPiAgIAlyZXR1cm4gRVJS X1BUUihyZXQpOwo+ICAgfQo+ICAgCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2k5MTVfZ2VtX2d0dC5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZ3R0LmgKPiBp bmRleCAxMTQ4NTAzNjhiY2EuLjM0YmIwMzc2NWU5MiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pOTE1X2dlbV9ndHQuaAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5 MTVfZ2VtX2d0dC5oCj4gQEAgLTEzNywxMiArMTM3LDkgQEAgZW51bSBpOTE1X2dndHRfdmlld190 eXBlIHsKPiAgIH07Cj4gICAKPiAgIHN0cnVjdCBpbnRlbF9yb3RhdGlvbl9pbmZvIHsKPiAtCXVu c2lnbmVkIGludCB1dl9vZmZzZXQ7Cj4gLQl1aW50MzJfdCBwaXhlbF9mb3JtYXQ7Cj4gLQl1bnNp Z25lZCBpbnQgdXZfc3RhcnRfcGFnZTsKPiAgIAlzdHJ1Y3Qgewo+ICAgCQkvKiB0aWxlcyAqLwo+ IC0JCXVuc2lnbmVkIGludCB3aWR0aCwgaGVpZ2h0Owo+ICsJCXVuc2lnbmVkIGludCB3aWR0aCwg aGVpZ2h0LCBzdHJpZGUsIG9mZnNldDsKPiAgIAl9IHBsYW5lWzJdOwo+ICAgfTsKPiAgIAo+IGRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMgYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMKPiBpbmRleCA4MjYyYjIzMWQ3ODMuLjNjOTVh MzY2MzI2OSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5 LmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMKPiBAQCAtMjE3 OCwzMyArMjE3OCw2IEBAIGludGVsX2ZpbGxfZmJfZ2d0dF92aWV3KHN0cnVjdCBpOTE1X2dndHRf dmlldyAqdmlldywKPiAgIAl9Cj4gICB9Cj4gICAKPiAtc3RhdGljIHZvaWQKPiAtaW50ZWxfZmls bF9mYl9pbmZvKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPiAtCQkgICBzdHJ1 Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYikKPiAtewo+IC0Jc3RydWN0IGludGVsX3JvdGF0aW9uX2lu Zm8gKmluZm8gPSAmdG9faW50ZWxfZnJhbWVidWZmZXIoZmIpLT5yb3RfaW5mbzsKPiAtCXVuc2ln bmVkIGludCB0aWxlX3NpemUsIHRpbGVfd2lkdGgsIHRpbGVfaGVpZ2h0LCBjcHA7Cj4gLQo+IC0J dGlsZV9zaXplID0gaW50ZWxfdGlsZV9zaXplKGRldl9wcml2KTsKPiAtCj4gLQljcHAgPSBkcm1f Zm9ybWF0X3BsYW5lX2NwcChmYi0+cGl4ZWxfZm9ybWF0LCAwKTsKPiAtCWludGVsX3RpbGVfZGlt cyhkZXZfcHJpdiwgJnRpbGVfd2lkdGgsICZ0aWxlX2hlaWdodCwKPiAtCQkJZmItPm1vZGlmaWVy WzBdLCBjcHApOwo+IC0KPiAtCWluZm8tPnBsYW5lWzBdLndpZHRoID0gRElWX1JPVU5EX1VQKGZi LT5waXRjaGVzWzBdLCB0aWxlX3dpZHRoICogY3BwKTsKPiAtCWluZm8tPnBsYW5lWzBdLmhlaWdo dCA9IERJVl9ST1VORF9VUChmYi0+aGVpZ2h0LCB0aWxlX2hlaWdodCk7Cj4gLQo+IC0JaWYgKGlu Zm8tPnBpeGVsX2Zvcm1hdCA9PSBEUk1fRk9STUFUX05WMTIpIHsKPiAtCQljcHAgPSBkcm1fZm9y bWF0X3BsYW5lX2NwcChmYi0+cGl4ZWxfZm9ybWF0LCAxKTsKPiAtCQlpbnRlbF90aWxlX2RpbXMo ZGV2X3ByaXYsICZ0aWxlX3dpZHRoLCAmdGlsZV9oZWlnaHQsCj4gLQkJCQlmYi0+bW9kaWZpZXJb MV0sIGNwcCk7Cj4gLQo+IC0JCWluZm8tPnV2X29mZnNldCA9IGZiLT5vZmZzZXRzWzFdOwo+IC0J CWluZm8tPnBsYW5lWzFdLndpZHRoID0gRElWX1JPVU5EX1VQKGZiLT5waXRjaGVzWzFdLCB0aWxl X3dpZHRoICogY3BwKTsKPiAtCQlpbmZvLT5wbGFuZVsxXS5oZWlnaHQgPSBESVZfUk9VTkRfVVAo ZmItPmhlaWdodCAvIDIsIHRpbGVfaGVpZ2h0KTsKPiAtCX0KPiAtfQo+IC0KPiAgIHN0YXRpYyB1 bnNpZ25lZCBpbnQgaW50ZWxfbGluZWFyX2FsaWdubWVudChjb25zdCBzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqZGV2X3ByaXYpCj4gICB7Cj4gICAJaWYgKElOVEVMX0lORk8oZGV2X3ByaXYpLT5n ZW4gPj0gOSkKPiBAQCAtMjMyNiw2ICsyMjk5LDQyIEBAIHZvaWQgaW50ZWxfdW5waW5fZmJfb2Jq KHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLCB1bnNpZ25lZCBpbnQgcm90YXRpb24pCj4gICB9 Cj4gICAKPiAgIC8qCj4gKyAqIENvbnZlcnQgdGhlIHgveSBvZmZzZXRzIGludG8gYSBsaW5lYXIg b2Zmc2V0Lgo+ICsgKiBPbmx5IHZhbGlkIHdpdGggMC8xODAgZGVncmVlIHJvdGF0aW9uLCB3aGlj aCBpcyBmaW5lIHNpbmNlIGxpbmVhcgo+ICsgKiBvZmZzZXQgaXMgb25seSB1c2VkIHdpdGggbGlu ZWFyIGJ1ZmZlcnMgb24gcHJlLWhzdyBhbmQgdGlsZWQgYnVmZmVycwo+ICsgKiB3aXRoIGdlbjIv MywgYW5kIDkwLzI3MCBkZWdyZWUgcm90YXRpb25zIGlzbid0IHN1cHBvcnRlZCBvbiBhbnkgb2Yg dGhlbS4KPiArICovCj4gK3UzMiBpbnRlbF9mYl94eV90b19saW5lYXIoaW50IHgsIGludCB5LAo+ ICsJCQkgIGNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLCBpbnQgcGxhbmUpCj4gK3sK PiArCXVuc2lnbmVkIGludCBjcHAgPSBkcm1fZm9ybWF0X3BsYW5lX2NwcChmYi0+cGl4ZWxfZm9y bWF0LCBwbGFuZSk7Cj4gKwl1bnNpZ25lZCBpbnQgcGl0Y2ggPSBmYi0+cGl0Y2hlc1twbGFuZV07 Cj4gKwo+ICsJcmV0dXJuIHkgKiBwaXRjaCArIHggKiBjcHA7Cj4gK30KPiArCj4gKy8qCj4gKyAq IEFkZCB0aGUgeC95IG9mZnNldHMgZGVyaXZlZCBmcm9tIGZiLT5vZmZzZXRzW10gdG8gdGhlIHVz ZXIKPiArICogc3BlY2lmaWVkIHBsYW5lIHNyYyB4L3kgb2Zmc2V0cy4gVGhlIHJlc3VsdGluZyB4 L3kgb2Zmc2V0cwo+ICsgKiBzcGVjaWZ5IHRoZSBzdGFydCBvZiBzY2Fub3V0IGZyb20gdGhlIGJl Z2lubmluZyBvZiB0aGUgZ3R0IG1hcHBpbmcuCj4gKyAqLwo+ICt2b2lkIGludGVsX2FkZF9mYl9v ZmZzZXRzKGludCAqeCwgaW50ICp5LAo+ICsJCQkgIGNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZm ZXIgKmZiLCBpbnQgcGxhbmUsCj4gKwkJCSAgdW5zaWduZWQgaW50IHJvdGF0aW9uKQo+ICsKPiAr ewo+ICsJY29uc3Qgc3RydWN0IGludGVsX2ZyYW1lYnVmZmVyICppbnRlbF9mYiA9IHRvX2ludGVs X2ZyYW1lYnVmZmVyKGZiKTsKPiArCj4gKwlpZiAoaW50ZWxfcm90YXRpb25fOTBfb3JfMjcwKHJv dGF0aW9uKSkgewo+ICsJCSp4ICs9IGludGVsX2ZiLT5yb3RhdGVkW3BsYW5lXS54Owo+ICsJCSp5 ICs9IGludGVsX2ZiLT5yb3RhdGVkW3BsYW5lXS55Owo+ICsJfSBlbHNlIHsKPiArCQkqeCArPSBp bnRlbF9mYi0+bm9ybWFsW3BsYW5lXS54Owo+ICsJCSp5ICs9IGludGVsX2ZiLT5ub3JtYWxbcGxh bmVdLnk7Cj4gKwl9Cj4gK30KPiArCj4gKy8qCj4gICAgKiBBZGp1c3QgdGhlIHRpbGUgb2Zmc2V0 IGJ5IG1vdmluZyB0aGUgZGlmZmVyZW5jZSBpbnRvCj4gICAgKiB0aGUgeC95IG9mZnNldHMuCj4g ICAgKgo+IEBAIC0yMzYxLDE4ICsyMzcwLDI0IEBAIHN0YXRpYyB1MzIgaW50ZWxfYWRqdXN0X3Rp bGVfb2Zmc2V0KGludCAqeCwgaW50ICp5LAo+ICAgICogSW4gdGhlIDkwLzI3MCByb3RhdGVkIGNh c2UsIHggYW5kIHkgYXJlIGFzc3VtZWQKPiAgICAqIHRvIGJlIGFscmVhZHkgcm90YXRlZCB0byBt YXRjaCB0aGUgcm90YXRlZCBHVFQgdmlldywgYW5kCj4gICAgKiBwaXRjaCBpcyB0aGUgdGlsZV9o ZWlnaHQgYWxpZ25lZCBmcmFtZWJ1ZmZlciBoZWlnaHQuCj4gKyAqCj4gKyAqIFRoaXMgZnVuY3Rp b24gaXMgdXNlZCB3aGVuIGNvbXB1dGluZyB0aGUgZGVyaXZlZCBpbmZvcm1hdGlvbgo+ICsgKiB1 bmRlciBpbnRlbF9mcmFtZWJ1ZmZlciwgc28gdXNpbmcgYW55IG9mIHRoYXQgaW5mb3JtYXRpb24K PiArICogaGVyZSBpcyBub3QgYWxsb3dlZC4gQW55dGhpbmcgdW5kZXIgZHJtX2ZyYW1lYnVmZmVy IGNhbiBiZQo+ICsgKiB1c2VkLiBUaGlzIGlzIHdoeSB0aGUgdXNlciBoYXMgdG8gcGFzcyBpbiB0 aGUgcGl0Y2ggc2luY2UgaXQKPiArICogaXMgc3BlY2lmaWVkIGluIHRoZSByb3RhdGVkIG9yaWVu dGF0aW9uLgo+ICAgICovCj4gLXUzMiBpbnRlbF9jb21wdXRlX3RpbGVfb2Zmc2V0KGludCAqeCwg aW50ICp5LAo+IC0JCQkgICAgICBjb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwgaW50 IHBsYW5lLAo+IC0JCQkgICAgICB1bnNpZ25lZCBpbnQgcGl0Y2gsCj4gLQkJCSAgICAgIHVuc2ln bmVkIGludCByb3RhdGlvbikKPiArc3RhdGljIHUzMiBfaW50ZWxfY29tcHV0ZV90aWxlX29mZnNl dChjb25zdCBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4gKwkJCQkgICAgICBp bnQgKngsIGludCAqeSwKPiArCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIg KmZiLCBpbnQgcGxhbmUsCj4gKwkJCQkgICAgICB1bnNpZ25lZCBpbnQgcGl0Y2gsCj4gKwkJCQkg ICAgICB1bnNpZ25lZCBpbnQgcm90YXRpb24sCj4gKwkJCQkgICAgICB1MzIgYWxpZ25tZW50KQo+ ICAgewo+IC0JY29uc3Qgc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkx NShmYi0+ZGV2KTsKPiAgIAl1aW50NjRfdCBmYl9tb2RpZmllciA9IGZiLT5tb2RpZmllcltwbGFu ZV07Cj4gICAJdW5zaWduZWQgaW50IGNwcCA9IGRybV9mb3JtYXRfcGxhbmVfY3BwKGZiLT5waXhl bF9mb3JtYXQsIHBsYW5lKTsKPiAtCXUzMiBvZmZzZXQsIG9mZnNldF9hbGlnbmVkLCBhbGlnbm1l bnQ7Cj4gKwl1MzIgb2Zmc2V0LCBvZmZzZXRfYWxpZ25lZDsKPiAgIAo+IC0JYWxpZ25tZW50ID0g aW50ZWxfc3VyZl9hbGlnbm1lbnQoZGV2X3ByaXYsIGZiX21vZGlmaWVyKTsKPiAgIAlpZiAoYWxp Z25tZW50KQo+ICAgCQlhbGlnbm1lbnQtLTsKPiAgIAo+IEBAIC0yNDE0LDYgKzI0MjksMTQxIEBA IHUzMiBpbnRlbF9jb21wdXRlX3RpbGVfb2Zmc2V0KGludCAqeCwgaW50ICp5LAo+ICAgCXJldHVy biBvZmZzZXRfYWxpZ25lZDsKPiAgIH0KPiAgIAo+ICt1MzIgaW50ZWxfY29tcHV0ZV90aWxlX29m ZnNldChpbnQgKngsIGludCAqeSwKPiArCQkJICAgICAgY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1 ZmZlciAqZmIsIGludCBwbGFuZSwKPiArCQkJICAgICAgdW5zaWduZWQgaW50IHBpdGNoLAo+ICsJ CQkgICAgICB1bnNpZ25lZCBpbnQgcm90YXRpb24pCj4gK3sKPiArCWNvbnN0IHN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoZmItPmRldik7Cj4gKwl1MzIgYWxpZ25t ZW50ID0gaW50ZWxfc3VyZl9hbGlnbm1lbnQoZGV2X3ByaXYsIGZiLT5tb2RpZmllcltwbGFuZV0p Owo+ICsKPiArCXJldHVybiBfaW50ZWxfY29tcHV0ZV90aWxlX29mZnNldChkZXZfcHJpdiwgeCwg eSwgZmIsIHBsYW5lLCBwaXRjaCwKPiArCQkJCQkgIHJvdGF0aW9uLCBhbGlnbm1lbnQpOwo+ICt9 Cj4gKwo+ICsvKiBDb252ZXJ0IHRoZSBmYi0+b2Zmc2V0W10gbGluZWFyIG9mZnNldCBpbnRvIHgv eSBvZmZzZXRzICovCj4gK3N0YXRpYyB2b2lkIGludGVsX2ZiX29mZnNldF90b194eShpbnQgKngs IGludCAqeSwKPiArCQkJCSAgY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsIGludCBw bGFuZSkKPiArewo+ICsJdW5zaWduZWQgaW50IGNwcCA9IGRybV9mb3JtYXRfcGxhbmVfY3BwKGZi LT5waXhlbF9mb3JtYXQsIHBsYW5lKTsKPiArCXVuc2lnbmVkIGludCBwaXRjaCA9IGZiLT5waXRj aGVzW3BsYW5lXTsKPiArCXUzMiBsaW5lYXJfb2Zmc2V0ID0gZmItPm9mZnNldHNbcGxhbmVdOwo+ ICsKPiArCSp5ID0gbGluZWFyX29mZnNldCAvIHBpdGNoOwo+ICsJKnggPSBsaW5lYXJfb2Zmc2V0 ICUgcGl0Y2ggLyBjcHA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQKPiAraW50ZWxfZmlsbF9mYl9p bmZvKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPiArCQkgICBzdHJ1Y3QgZHJt X2ZyYW1lYnVmZmVyICpmYikKPiArewo+ICsJc3RydWN0IGludGVsX2ZyYW1lYnVmZmVyICppbnRl bF9mYiA9IHRvX2ludGVsX2ZyYW1lYnVmZmVyKGZiKTsKPiArCXN0cnVjdCBpbnRlbF9yb3RhdGlv bl9pbmZvICpyb3RfaW5mbyA9ICZpbnRlbF9mYi0+cm90X2luZm87Cj4gKwl1MzIgZ3R0X29mZnNl dF9yb3RhdGVkID0gMDsKPiArCXVuc2lnbmVkIGludCBtYXhfc2l6ZSA9IDA7Cj4gKwl1aW50MzJf dCBmb3JtYXQgPSBmYi0+cGl4ZWxfZm9ybWF0Owo+ICsJaW50IGksIG51bV9wbGFuZXMgPSBkcm1f Zm9ybWF0X251bV9wbGFuZXMoZm9ybWF0KTsKPiArCXVuc2lnbmVkIGludCB0aWxlX3NpemUgPSBp bnRlbF90aWxlX3NpemUoZGV2X3ByaXYpOwo+ICsKPiArCWZvciAoaSA9IDA7IGkgPCBudW1fcGxh bmVzOyBpKyspIHsKPiArCQl1bnNpZ25lZCBpbnQgd2lkdGgsIGhlaWdodDsKPiArCQl1bnNpZ25l ZCBpbnQgY3BwLCBzaXplOwo+ICsJCXUzMiBvZmZzZXQ7Cj4gKwkJaW50IHgsIHk7Cj4gKwo+ICsJ CWNwcCA9IGRybV9mb3JtYXRfcGxhbmVfY3BwKGZvcm1hdCwgaSk7Cj4gKwkJd2lkdGggPSBkcm1f Zm9ybWF0X3BsYW5lX3dpZHRoKGZiLT53aWR0aCwgZm9ybWF0LCBpKTsKPiArCQloZWlnaHQgPSBk cm1fZm9ybWF0X3BsYW5lX2hlaWdodChmYi0+aGVpZ2h0LCBmb3JtYXQsIGkpOwo+ICsKPiArCQlp bnRlbF9mYl9vZmZzZXRfdG9feHkoJngsICZ5LCBmYiwgaSk7Cj4gKwo+ICsJCS8qCj4gKwkJICog Rmlyc3QgcGl4ZWwgb2YgdGhlIGZyYW1lYnVmZmVyIGZyb20KPiArCQkgKiB0aGUgc3RhcnQgb2Yg dGhlIG5vcm1hbCBndHQgbWFwcGluZy4KPiArCQkgKi8KPiArCQlpbnRlbF9mYi0+bm9ybWFsW2ld LnggPSB4Owo+ICsJCWludGVsX2ZiLT5ub3JtYWxbaV0ueSA9IHk7Cj4gKwo+ICsJCW9mZnNldCA9 IF9pbnRlbF9jb21wdXRlX3RpbGVfb2Zmc2V0KGRldl9wcml2LCAmeCwgJnksCj4gKwkJCQkJCSAg ICBmYiwgMCwgZmItPnBpdGNoZXNbaV0sCj4gKwkJCQkJCSAgICBCSVQoRFJNX1JPVEFURV8wKSwg dGlsZV9zaXplKTsKPiArCQlvZmZzZXQgLz0gdGlsZV9zaXplOwo+ICsKPiArCQlpZiAoZmItPm1v ZGlmaWVyW2ldICE9IERSTV9GT1JNQVRfTU9EX05PTkUpIHsKPiArCQkJdW5zaWduZWQgaW50IHRp bGVfd2lkdGgsIHRpbGVfaGVpZ2h0Owo+ICsJCQl1bnNpZ25lZCBpbnQgcGl0Y2hfdGlsZXM7Cj4g KwkJCXN0cnVjdCBkcm1fcmVjdCByOwo+ICsKPiArCQkJaW50ZWxfdGlsZV9kaW1zKGRldl9wcml2 LCAmdGlsZV93aWR0aCwgJnRpbGVfaGVpZ2h0LAo+ICsJCQkJCWZiLT5tb2RpZmllcltpXSwgY3Bw KTsKPiArCj4gKwkJCXJvdF9pbmZvLT5wbGFuZVtpXS5vZmZzZXQgPSBvZmZzZXQ7Cj4gKwkJCXJv dF9pbmZvLT5wbGFuZVtpXS5zdHJpZGUgPSBESVZfUk9VTkRfVVAoZmItPnBpdGNoZXNbaV0sIHRp bGVfd2lkdGggKiBjcHApOwo+ICsJCQlyb3RfaW5mby0+cGxhbmVbaV0ud2lkdGggPSBESVZfUk9V TkRfVVAoeCArIHdpZHRoLCB0aWxlX3dpZHRoKTsKPiArCQkJcm90X2luZm8tPnBsYW5lW2ldLmhl aWdodCA9IERJVl9ST1VORF9VUCh5ICsgaGVpZ2h0LCB0aWxlX2hlaWdodCk7Cj4gKwo+ICsJCQlp bnRlbF9mYi0+cm90YXRlZFtpXS5waXRjaCA9Cj4gKwkJCQlyb3RfaW5mby0+cGxhbmVbaV0uaGVp Z2h0ICogdGlsZV9oZWlnaHQ7Cj4gKwo+ICsJCQkvKiBob3cgbWFueSB0aWxlcyBkb2VzIHRoaXMg cGxhbmUgbmVlZCAqLwo+ICsJCQlzaXplID0gcm90X2luZm8tPnBsYW5lW2ldLnN0cmlkZSAqIHJv dF9pbmZvLT5wbGFuZVtpXS5oZWlnaHQ7Cj4gKwkJCS8qCj4gKwkJCSAqIElmIHRoZSBwbGFuZSBp c24ndCBob3Jpem9udGFsbHkgdGlsZSBhbGlnbmVkLAo+ICsJCQkgKiB3ZSBuZWVkIG9uZSBtb3Jl IHRpbGUuCj4gKwkJCSAqLwo+ICsJCQlpZiAoeCAhPSAwKQo+ICsJCQkJc2l6ZSsrOwo+ICsKPiAr CQkJLyogcm90YXRlIHRoZSB4L3kgb2Zmc2V0cyB0byBtYXRjaCB0aGUgR1RUIHZpZXcgKi8KPiAr CQkJci54MSA9IHg7Cj4gKwkJCXIueTEgPSB5Owo+ICsJCQlyLngyID0geCArIHdpZHRoOwo+ICsJ CQlyLnkyID0geSArIGhlaWdodDsKPiArCQkJZHJtX3JlY3Rfcm90YXRlKCZyLAo+ICsJCQkJCXJv dF9pbmZvLT5wbGFuZVtpXS53aWR0aCAqIHRpbGVfd2lkdGgsCj4gKwkJCQkJcm90X2luZm8tPnBs YW5lW2ldLmhlaWdodCAqIHRpbGVfaGVpZ2h0LAo+ICsJCQkJCUJJVChEUk1fUk9UQVRFXzI3MCkp Owo+ICsJCQl4ID0gci54MTsKPiArCQkJeSA9IHIueTE7Cj4gKwo+ICsJCQkvKiByb3RhdGUgdGhl IHRpbGUgZGltZW5zaW9ucyB0byBtYXRjaCB0aGUgR1RUIHZpZXcgKi8KPiArCQkJcGl0Y2hfdGls ZXMgPSBpbnRlbF9mYi0+cm90YXRlZFtpXS5waXRjaCAvIHRpbGVfaGVpZ2h0Owo+ICsJCQlzd2Fw KHRpbGVfd2lkdGgsIHRpbGVfaGVpZ2h0KTsKPiArCj4gKwkJCS8qCj4gKwkJCSAqIFdlIG9ubHkg a2VlcCB0aGUgeC95IG9mZnNldHMsIHNvIHB1c2ggYWxsIG9mIHRoZQo+ICsJCQkgKiBndHQgb2Zm c2V0IGludG8gdGhlIHgveSBvZmZzZXRzLgo+ICsJCQkgKi8KPiArCQkJaW50ZWxfYWRqdXN0X3Rp bGVfb2Zmc2V0KCZ4LCAmeSwgdGlsZV9zaXplLAo+ICsJCQkJCQkgdGlsZV93aWR0aCwgdGlsZV9o ZWlnaHQsIHBpdGNoX3RpbGVzLAo+ICsJCQkJCQkgZ3R0X29mZnNldF9yb3RhdGVkICogdGlsZV9z aXplLCAwKTsKPiArCj4gKwkJCWd0dF9vZmZzZXRfcm90YXRlZCArPSByb3RfaW5mby0+cGxhbmVb aV0ud2lkdGggKiByb3RfaW5mby0+cGxhbmVbaV0uaGVpZ2h0Owo+ICsKPiArCQkJLyoKPiArCQkJ ICogRmlyc3QgcGl4ZWwgb2YgdGhlIGZyYW1lYnVmZmVyIGZyb20KPiArCQkJICogdGhlIHN0YXJ0 IG9mIHRoZSByb3RhdGVkIGd0dCBtYXBwaW5nLgo+ICsJCQkgKi8KPiArCQkJaW50ZWxfZmItPnJv dGF0ZWRbaV0ueCA9IHg7Cj4gKwkJCWludGVsX2ZiLT5yb3RhdGVkW2ldLnkgPSB5Owo+ICsJCX0g ZWxzZSB7Cj4gKwkJCXNpemUgPSBESVZfUk9VTkRfVVAoKHkgKyBoZWlnaHQpICogZmItPnBpdGNo ZXNbaV0gKwo+ICsJCQkJCSAgICB4ICogY3BwLCB0aWxlX3NpemUpOwo+ICsJCX0KPiArCj4gKwkJ LyogaG93IG1hbnkgdGlsZXMgaW4gdG90YWwgbmVlZGVkIGluIHRoZSBibyAqLwo+ICsJCW1heF9z aXplID0gbWF4KG1heF9zaXplLCBvZmZzZXQgKyBzaXplKTsKPiArCX0KPiArCj4gKwlpZiAobWF4 X3NpemUgKiB0aWxlX3NpemUgPiB0b19pbnRlbF9mcmFtZWJ1ZmZlcihmYiktPm9iai0+YmFzZS5z aXplKSB7Cj4gKwkJRFJNX0RFQlVHKCJmYiB0b28gYmlnIGZvciBibyAobmVlZCAldSBieXRlcywg aGF2ZSAlenUgYnl0ZXMpXG4iLAo+ICsJCQkgIG1heF9zaXplICogdGlsZV9zaXplLCB0b19pbnRl bF9mcmFtZWJ1ZmZlcihmYiktPm9iai0+YmFzZS5zaXplKTsKPiArCQlyZXR1cm4gLUVJTlZBTDsK PiArCX0KPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiAgIHN0YXRpYyBpbnQgaTl4eF9mb3Jt YXRfdG9fZm91cmNjKGludCBmb3JtYXQpCj4gICB7Cj4gICAJc3dpdGNoIChmb3JtYXQpIHsKPiBA QCAtMjY0OSw3ICsyNzk5LDYgQEAgc3RhdGljIHZvaWQgaTl4eF91cGRhdGVfcHJpbWFyeV9wbGFu ZShzdHJ1Y3QgZHJtX3BsYW5lICpwcmltYXJ5LAo+ICAgCXUzMiBkc3BjbnRyOwo+ICAgCWk5MTVf cmVnX3QgcmVnID0gRFNQQ05UUihwbGFuZSk7Cj4gICAJdW5zaWduZWQgaW50IHJvdGF0aW9uID0g cGxhbmVfc3RhdGUtPmJhc2Uucm90YXRpb247Cj4gLQlpbnQgY3BwID0gZHJtX2Zvcm1hdF9wbGFu ZV9jcHAoZmItPnBpeGVsX2Zvcm1hdCwgMCk7Cj4gICAJaW50IHggPSBwbGFuZV9zdGF0ZS0+c3Jj LngxID4+IDE2Owo+ICAgCWludCB5ID0gcGxhbmVfc3RhdGUtPnNyYy55MSA+PiAxNjsKPiAgIAo+ IEBAIC0yNzA5LDMwICsyODU4LDI1IEBAIHN0YXRpYyB2b2lkIGk5eHhfdXBkYXRlX3ByaW1hcnlf cGxhbmUoc3RydWN0IGRybV9wbGFuZSAqcHJpbWFyeSwKPiAgIAlpZiAoSVNfRzRYKGRldikpCj4g ICAJCWRzcGNudHIgfD0gRElTUFBMQU5FX1RSSUNLTEVfRkVFRF9ESVNBQkxFOwo+ICAgCj4gLQls aW5lYXJfb2Zmc2V0ID0geSAqIGZiLT5waXRjaGVzWzBdICsgeCAqIGNwcDsKPiArCWludGVsX2Fk ZF9mYl9vZmZzZXRzKCZ4LCAmeSwgZmIsIDAsIHJvdGF0aW9uKTsKPiAgIAo+IC0JaWYgKElOVEVM X0lORk8oZGV2KS0+Z2VuID49IDQpIHsKPiArCWlmIChJTlRFTF9JTkZPKGRldiktPmdlbiA+PSA0 KQo+ICAgCQlpbnRlbF9jcnRjLT5kc3BhZGRyX29mZnNldCA9Cj4gICAJCQlpbnRlbF9jb21wdXRl X3RpbGVfb2Zmc2V0KCZ4LCAmeSwgZmIsIDAsCj4gICAJCQkJCQkgIGZiLT5waXRjaGVzWzBdLCBy b3RhdGlvbik7Cj4gLQkJbGluZWFyX29mZnNldCAtPSBpbnRlbF9jcnRjLT5kc3BhZGRyX29mZnNl dDsKPiAtCX0gZWxzZSB7Cj4gLQkJaW50ZWxfY3J0Yy0+ZHNwYWRkcl9vZmZzZXQgPSBsaW5lYXJf b2Zmc2V0Owo+IC0JfQo+ICAgCj4gICAJaWYgKHJvdGF0aW9uID09IEJJVChEUk1fUk9UQVRFXzE4 MCkpIHsKPiAgIAkJZHNwY250ciB8PSBESVNQUExBTkVfUk9UQVRFXzE4MDsKPiAgIAo+ICAgCQl4 ICs9IChjcnRjX3N0YXRlLT5waXBlX3NyY193IC0gMSk7Cj4gICAJCXkgKz0gKGNydGNfc3RhdGUt PnBpcGVfc3JjX2ggLSAxKTsKPiAtCj4gLQkJLyogRmluZGluZyB0aGUgbGFzdCBwaXhlbCBvZiB0 aGUgbGFzdCBsaW5lIG9mIHRoZSBkaXNwbGF5Cj4gLQkJZGF0YSBhbmQgYWRkaW5nIHRvIGxpbmVh cl9vZmZzZXQqLwo+IC0JCWxpbmVhcl9vZmZzZXQgKz0KPiAtCQkJKGNydGNfc3RhdGUtPnBpcGVf c3JjX2ggLSAxKSAqIGZiLT5waXRjaGVzWzBdICsKPiAtCQkJKGNydGNfc3RhdGUtPnBpcGVfc3Jj X3cgLSAxKSAqIGNwcDsKPiAgIAl9Cj4gICAKPiArCWxpbmVhcl9vZmZzZXQgPSBpbnRlbF9mYl94 eV90b19saW5lYXIoeCwgeSwgZmIsIDApOwo+ICsKPiArCWlmIChJTlRFTF9JTkZPKGRldiktPmdl biA8IDQpCj4gKwkJaW50ZWxfY3J0Yy0+ZHNwYWRkcl9vZmZzZXQgPSBsaW5lYXJfb2Zmc2V0Owo+ ICsKPiAgIAlpbnRlbF9jcnRjLT5hZGp1c3RlZF94ID0geDsKPiAgIAlpbnRlbF9jcnRjLT5hZGp1 c3RlZF95ID0geTsKPiAgIAo+IEBAIC0yNzQxLDcgKzI4ODUsOCBAQCBzdGF0aWMgdm9pZCBpOXh4 X3VwZGF0ZV9wcmltYXJ5X3BsYW5lKHN0cnVjdCBkcm1fcGxhbmUgKnByaW1hcnksCj4gICAJSTkx NV9XUklURShEU1BTVFJJREUocGxhbmUpLCBmYi0+cGl0Y2hlc1swXSk7Cj4gICAJaWYgKElOVEVM X0lORk8oZGV2KS0+Z2VuID49IDQpIHsKPiAgIAkJSTkxNV9XUklURShEU1BTVVJGKHBsYW5lKSwK PiAtCQkJICAgaTkxNV9nZW1fb2JqX2dndHRfb2Zmc2V0KG9iaikgKyBpbnRlbF9jcnRjLT5kc3Bh ZGRyX29mZnNldCk7Cj4gKwkJCSAgIGludGVsX2ZiX2d0dF9vZmZzZXQoZmIsIHJvdGF0aW9uKSAr Cj4gKwkJCSAgIGludGVsX2NydGMtPmRzcGFkZHJfb2Zmc2V0KTsKPiAgIAkJSTkxNV9XUklURShE U1BUSUxFT0ZGKHBsYW5lKSwgKHkgPDwgMTYpIHwgeCk7Cj4gICAJCUk5MTVfV1JJVEUoRFNQTElO T0ZGKHBsYW5lKSwgbGluZWFyX29mZnNldCk7Cj4gICAJfSBlbHNlCj4gQEAgLTI3NzksNyArMjky NCw2IEBAIHN0YXRpYyB2b2lkIGlyb25sYWtlX3VwZGF0ZV9wcmltYXJ5X3BsYW5lKHN0cnVjdCBk cm1fcGxhbmUgKnByaW1hcnksCj4gICAJdTMyIGRzcGNudHI7Cj4gICAJaTkxNV9yZWdfdCByZWcg PSBEU1BDTlRSKHBsYW5lKTsKPiAgIAl1bnNpZ25lZCBpbnQgcm90YXRpb24gPSBwbGFuZV9zdGF0 ZS0+YmFzZS5yb3RhdGlvbjsKPiAtCWludCBjcHAgPSBkcm1fZm9ybWF0X3BsYW5lX2NwcChmYi0+ cGl4ZWxfZm9ybWF0LCAwKTsKPiAgIAlpbnQgeCA9IHBsYW5lX3N0YXRlLT5zcmMueDEgPj4gMTY7 Cj4gICAJaW50IHkgPSBwbGFuZV9zdGF0ZS0+c3JjLnkxID4+IDE2Owo+ICAgCj4gQEAgLTI4MTgs MjYgKzI5NjIsMjMgQEAgc3RhdGljIHZvaWQgaXJvbmxha2VfdXBkYXRlX3ByaW1hcnlfcGxhbmUo c3RydWN0IGRybV9wbGFuZSAqcHJpbWFyeSwKPiAgIAlpZiAoIUlTX0hBU1dFTEwoZGV2KSAmJiAh SVNfQlJPQURXRUxMKGRldikpCj4gICAJCWRzcGNudHIgfD0gRElTUFBMQU5FX1RSSUNLTEVfRkVF RF9ESVNBQkxFOwo+ICAgCj4gLQlsaW5lYXJfb2Zmc2V0ID0geSAqIGZiLT5waXRjaGVzWzBdICsg eCAqIGNwcDsKPiArCWludGVsX2FkZF9mYl9vZmZzZXRzKCZ4LCAmeSwgZmIsIDAsIHJvdGF0aW9u KTsKPiArCj4gICAJaW50ZWxfY3J0Yy0+ZHNwYWRkcl9vZmZzZXQgPQo+ICAgCQlpbnRlbF9jb21w dXRlX3RpbGVfb2Zmc2V0KCZ4LCAmeSwgZmIsIDAsCj4gICAJCQkJCSAgZmItPnBpdGNoZXNbMF0s IHJvdGF0aW9uKTsKPiAtCWxpbmVhcl9vZmZzZXQgLT0gaW50ZWxfY3J0Yy0+ZHNwYWRkcl9vZmZz ZXQ7Cj4gKwo+ICAgCWlmIChyb3RhdGlvbiA9PSBCSVQoRFJNX1JPVEFURV8xODApKSB7Cj4gICAJ CWRzcGNudHIgfD0gRElTUFBMQU5FX1JPVEFURV8xODA7Cj4gICAKPiAgIAkJaWYgKCFJU19IQVNX RUxMKGRldikgJiYgIUlTX0JST0FEV0VMTChkZXYpKSB7Cj4gICAJCQl4ICs9IChjcnRjX3N0YXRl LT5waXBlX3NyY193IC0gMSk7Cj4gICAJCQl5ICs9IChjcnRjX3N0YXRlLT5waXBlX3NyY19oIC0g MSk7Cj4gLQo+IC0JCQkvKiBGaW5kaW5nIHRoZSBsYXN0IHBpeGVsIG9mIHRoZSBsYXN0IGxpbmUg b2YgdGhlIGRpc3BsYXkKPiAtCQkJZGF0YSBhbmQgYWRkaW5nIHRvIGxpbmVhcl9vZmZzZXQqLwo+ IC0JCQlsaW5lYXJfb2Zmc2V0ICs9Cj4gLQkJCQkoY3J0Y19zdGF0ZS0+cGlwZV9zcmNfaCAtIDEp ICogZmItPnBpdGNoZXNbMF0gKwo+IC0JCQkJKGNydGNfc3RhdGUtPnBpcGVfc3JjX3cgLSAxKSAq IGNwcDsKPiAgIAkJfQo+ICAgCX0KPiAgIAo+ICsJbGluZWFyX29mZnNldCA9IGludGVsX2ZiX3h5 X3RvX2xpbmVhcih4LCB5LCBmYiwgMCk7Cj4gKwo+ICAgCWludGVsX2NydGMtPmFkanVzdGVkX3gg PSB4Owo+ICAgCWludGVsX2NydGMtPmFkanVzdGVkX3kgPSB5Owo+ICAgCj4gQEAgLTI4NDUsNyAr Mjk4Niw4IEBAIHN0YXRpYyB2b2lkIGlyb25sYWtlX3VwZGF0ZV9wcmltYXJ5X3BsYW5lKHN0cnVj dCBkcm1fcGxhbmUgKnByaW1hcnksCj4gICAKPiAgIAlJOTE1X1dSSVRFKERTUFNUUklERShwbGFu ZSksIGZiLT5waXRjaGVzWzBdKTsKPiAgIAlJOTE1X1dSSVRFKERTUFNVUkYocGxhbmUpLAo+IC0J CSAgIGk5MTVfZ2VtX29ial9nZ3R0X29mZnNldChvYmopICsgaW50ZWxfY3J0Yy0+ZHNwYWRkcl9v ZmZzZXQpOwo+ICsJCSAgIGludGVsX2ZiX2d0dF9vZmZzZXQoZmIsIHJvdGF0aW9uKSArCj4gKwkJ ICAgaW50ZWxfY3J0Yy0+ZHNwYWRkcl9vZmZzZXQpOwo+ICAgCWlmIChJU19IQVNXRUxMKGRldikg fHwgSVNfQlJPQURXRUxMKGRldikpIHsKPiAgIAkJSTkxNV9XUklURShEU1BPRkZTRVQocGxhbmUp LCAoeSA8PCAxNikgfCB4KTsKPiAgIAl9IGVsc2Ugewo+IEBAIC0yODY3LDI4ICszMDA5LDE2IEBA IHUzMiBpbnRlbF9mYl9zdHJpZGVfYWxpZ25tZW50KGNvbnN0IHN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdiwKPiAgIAl9Cj4gICB9Cj4gICAKPiAtdTMyIGludGVsX3BsYW5lX29ial9v ZmZzZXQoc3RydWN0IGludGVsX3BsYW5lICppbnRlbF9wbGFuZSwKPiAtCQkJICAgc3RydWN0IGRy bV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKPiAtCQkJICAgdW5zaWduZWQgaW50IHBsYW5lKQo+ICt1 MzIgaW50ZWxfZmJfZ3R0X29mZnNldChzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwKPiArCQkJ dW5zaWduZWQgaW50IHJvdGF0aW9uKQo+ICAgewo+ICsJc3RydWN0IGRybV9pOTE1X2dlbV9vYmpl Y3QgKm9iaiA9IGludGVsX2ZiX29iaihmYik7Cj4gICAJc3RydWN0IGk5MTVfZ2d0dF92aWV3IHZp ZXc7Cj4gLQlzdHJ1Y3QgaTkxNV92bWEgKnZtYTsKPiAgIAl1NjQgb2Zmc2V0Owo+ICAgCj4gLQlp bnRlbF9maWxsX2ZiX2dndHRfdmlldygmdmlldywgaW50ZWxfcGxhbmUtPmJhc2Uuc3RhdGUtPmZi LAo+IC0JCQkJaW50ZWxfcGxhbmUtPmJhc2Uuc3RhdGUtPnJvdGF0aW9uKTsKPiAtCj4gLQl2bWEg PSBpOTE1X2dlbV9vYmpfdG9fZ2d0dF92aWV3KG9iaiwgJnZpZXcpOwo+IC0JaWYgKFdBUk4oIXZt YSwgImdndHQgdm1hIGZvciBkaXNwbGF5IG9iamVjdCBub3QgZm91bmQhICh2aWV3PSV1KVxuIiwK PiAtCQl2aWV3LnR5cGUpKQo+IC0JCXJldHVybiAtMTsKPiAtCj4gLQlvZmZzZXQgPSB2bWEtPm5v ZGUuc3RhcnQ7Cj4gKwlpbnRlbF9maWxsX2ZiX2dndHRfdmlldygmdmlldywgZmIsIHJvdGF0aW9u KTsKPiAgIAo+IC0JaWYgKHBsYW5lID09IDEpIHsKPiAtCQlvZmZzZXQgKz0gdm1hLT5nZ3R0X3Zp ZXcucGFyYW1zLnJvdGF0ZWQudXZfc3RhcnRfcGFnZSAqCj4gLQkJCSAgUEFHRV9TSVpFOwo+IC0J fQo+ICsJb2Zmc2V0ID0gaTkxNV9nZW1fb2JqX2dndHRfb2Zmc2V0X3ZpZXcob2JqLCAmdmlldyk7 Cj4gICAKPiAgIAlXQVJOX09OKHVwcGVyXzMyX2JpdHMob2Zmc2V0KSk7Cj4gICAKPiBAQCAtMzAx MSwxMiArMzE0MSw5IEBAIHN0YXRpYyB2b2lkIHNreWxha2VfdXBkYXRlX3ByaW1hcnlfcGxhbmUo c3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCj4gICAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRl dl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKPiAgIAlzdHJ1Y3QgaW50ZWxfY3J0YyAqaW50ZWxf Y3J0YyA9IHRvX2ludGVsX2NydGMoY3J0Y19zdGF0ZS0+YmFzZS5jcnRjKTsKPiAgIAlzdHJ1Y3Qg ZHJtX2ZyYW1lYnVmZmVyICpmYiA9IHBsYW5lX3N0YXRlLT5iYXNlLmZiOwo+IC0Jc3RydWN0IGRy bV9pOTE1X2dlbV9vYmplY3QgKm9iaiA9IGludGVsX2ZiX29iaihmYik7Cj4gICAJaW50IHBpcGUg PSBpbnRlbF9jcnRjLT5waXBlOwo+ICAgCXUzMiBwbGFuZV9jdGwsIHN0cmlkZV9kaXYsIHN0cmlk ZTsKPiAtCXUzMiB0aWxlX2hlaWdodCwgcGxhbmVfb2Zmc2V0LCBwbGFuZV9zaXplOwo+ICAgCXVu c2lnbmVkIGludCByb3RhdGlvbiA9IHBsYW5lX3N0YXRlLT5iYXNlLnJvdGF0aW9uOwo+IC0JaW50 IHhfb2Zmc2V0LCB5X29mZnNldDsKPiAgIAl1MzIgc3VyZl9hZGRyOwo+ICAgCWludCBzY2FsZXJf aWQgPSBwbGFuZV9zdGF0ZS0+c2NhbGVyX2lkOwo+ICAgCWludCBzcmNfeCA9IHBsYW5lX3N0YXRl LT5zcmMueDEgPj4gMTY7Cj4gQEAgLTMwMzcsMzYgKzMxNjQsNDkgQEAgc3RhdGljIHZvaWQgc2t5 bGFrZV91cGRhdGVfcHJpbWFyeV9wbGFuZShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKPiAgIAlw bGFuZV9jdGwgfD0gUExBTkVfQ1RMX1BMQU5FX0dBTU1BX0RJU0FCTEU7Cj4gICAJcGxhbmVfY3Rs IHw9IHNrbF9wbGFuZV9jdGxfcm90YXRpb24ocm90YXRpb24pOwo+ICAgCj4gLQlzdHJpZGVfZGl2 ID0gaW50ZWxfZmJfc3RyaWRlX2FsaWdubWVudChkZXZfcHJpdiwgZmItPm1vZGlmaWVyWzBdLAo+ IC0JCQkJCSAgICAgICBmYi0+cGl4ZWxfZm9ybWF0KTsKPiAtCXN1cmZfYWRkciA9IGludGVsX3Bs YW5lX29ial9vZmZzZXQodG9faW50ZWxfcGxhbmUocGxhbmUpLCBvYmosIDApOwo+IC0KPiAtCVdB Uk5fT04oZHJtX3JlY3Rfd2lkdGgoJnBsYW5lX3N0YXRlLT5zcmMpID09IDApOwo+IC0KPiAgIAlp ZiAoaW50ZWxfcm90YXRpb25fOTBfb3JfMjcwKHJvdGF0aW9uKSkgewo+ICsJCXN0cnVjdCBkcm1f cmVjdCByID0gewo+ICsJCQkueDEgPSBzcmNfeCwKPiArCQkJLngyID0gc3JjX3ggKyBzcmNfdywK PiArCQkJLnkxID0gc3JjX3ksCj4gKwkJCS55MiA9IHNyY195ICsgc3JjX2gsCj4gKwkJfTsKPiAg IAkJaW50IGNwcCA9IGRybV9mb3JtYXRfcGxhbmVfY3BwKGZiLT5waXhlbF9mb3JtYXQsIDApOwo+ ICsJCXN0cnVjdCBpbnRlbF9mcmFtZWJ1ZmZlciAqaW50ZWxfZmIgPSB0b19pbnRlbF9mcmFtZWJ1 ZmZlcihmYik7Cj4gKwo+ICsJCS8qIFJvdGF0ZSBzcmMgY29vcmRpbmF0ZXMgdG8gbWF0Y2ggcm90 YXRlZCBHVFQgdmlldyAqLwo+ICsJCWRybV9yZWN0X3JvdGF0ZSgmciwgZmItPndpZHRoLCBmYi0+ aGVpZ2h0LCBCSVQoRFJNX1JPVEFURV8yNzApKTsKPiAgIAo+IC0JCS8qIHN0cmlkZSA9IFN1cmZh Y2UgaGVpZ2h0IGluIHRpbGVzICovCj4gLQkJdGlsZV9oZWlnaHQgPSBpbnRlbF90aWxlX2hlaWdo dChkZXZfcHJpdiwgZmItPm1vZGlmaWVyWzBdLCBjcHApOwo+IC0JCXN0cmlkZSA9IERJVl9ST1VO RF9VUChmYi0+aGVpZ2h0LCB0aWxlX2hlaWdodCk7Cj4gLQkJeF9vZmZzZXQgPSBzdHJpZGUgKiB0 aWxlX2hlaWdodCAtIHNyY195IC0gc3JjX2g7Cj4gLQkJeV9vZmZzZXQgPSBzcmNfeDsKPiAtCQlw bGFuZV9zaXplID0gKHNyY193IC0gMSkgPDwgMTYgfCAoc3JjX2ggLSAxKTsKPiArCQlzcmNfeCA9 IHIueDE7Cj4gKwkJc3JjX3kgPSByLnkxOwo+ICsJCXNyY193ID0gZHJtX3JlY3Rfd2lkdGgoJnIp Owo+ICsJCXNyY19oID0gZHJtX3JlY3RfaGVpZ2h0KCZyKTsKPiArCj4gKwkJc3RyaWRlX2RpdiA9 IGludGVsX3RpbGVfaGVpZ2h0KGRldl9wcml2LCBmYi0+bW9kaWZpZXJbMF0sIGNwcCk7Cj4gKwkJ c3RyaWRlID0gaW50ZWxfZmItPnJvdGF0ZWRbMF0ucGl0Y2g7Cj4gICAJfSBlbHNlIHsKPiAtCQlz dHJpZGUgPSBmYi0+cGl0Y2hlc1swXSAvIHN0cmlkZV9kaXY7Cj4gLQkJeF9vZmZzZXQgPSBzcmNf eDsKPiAtCQl5X29mZnNldCA9IHNyY195Owo+IC0JCXBsYW5lX3NpemUgPSAoc3JjX2ggLSAxKSA8 PCAxNiB8IChzcmNfdyAtIDEpOwo+ICsJCXN0cmlkZV9kaXYgPSBpbnRlbF9mYl9zdHJpZGVfYWxp Z25tZW50KGRldl9wcml2LCBmYi0+bW9kaWZpZXJbMF0sCj4gKwkJCQkJCSAgICAgICBmYi0+cGl4 ZWxfZm9ybWF0KTsKPiArCQlzdHJpZGUgPSBmYi0+cGl0Y2hlc1swXTsKPiAgIAl9Cj4gLQlwbGFu ZV9vZmZzZXQgPSB5X29mZnNldCA8PCAxNiB8IHhfb2Zmc2V0Owo+ICAgCj4gLQlpbnRlbF9jcnRj LT5hZGp1c3RlZF94ID0geF9vZmZzZXQ7Cj4gLQlpbnRlbF9jcnRjLT5hZGp1c3RlZF95ID0geV9v ZmZzZXQ7Cj4gKwlpbnRlbF9hZGRfZmJfb2Zmc2V0cygmc3JjX3gsICZzcmNfeSwgZmIsIDAsIHJv dGF0aW9uKTsKPiArCXN1cmZfYWRkciA9IGludGVsX2NvbXB1dGVfdGlsZV9vZmZzZXQoJnNyY194 LCAmc3JjX3ksIGZiLCAwLAo+ICsJCQkJCSAgICAgIHN0cmlkZSwgcm90YXRpb24pOwo+ICsKPiAr CS8qIFNpemVzIGFyZSAwIGJhc2VkICovCj4gKwlzcmNfdy0tOwo+ICsJc3JjX2gtLTsKPiArCWRz dF93LS07Cj4gKwlkc3RfaC0tOwo+ICsKPiArCWludGVsX2NydGMtPmFkanVzdGVkX3ggPSBzcmNf eDsKPiArCWludGVsX2NydGMtPmFkanVzdGVkX3kgPSBzcmNfeTsKPiAgIAo+ICAgCUk5MTVfV1JJ VEUoUExBTkVfQ1RMKHBpcGUsIDApLCBwbGFuZV9jdGwpOwo+IC0JSTkxNV9XUklURShQTEFORV9P RkZTRVQocGlwZSwgMCksIHBsYW5lX29mZnNldCk7Cj4gLQlJOTE1X1dSSVRFKFBMQU5FX1NJWkUo cGlwZSwgMCksIHBsYW5lX3NpemUpOwo+IC0JSTkxNV9XUklURShQTEFORV9TVFJJREUocGlwZSwg MCksIHN0cmlkZSk7Cj4gKwlJOTE1X1dSSVRFKFBMQU5FX09GRlNFVChwaXBlLCAwKSwgKHNyY195 IDw8IDE2KSB8IHNyY194KTsKPiArCUk5MTVfV1JJVEUoUExBTkVfU1RSSURFKHBpcGUsIDApLCBz dHJpZGUgLyBzdHJpZGVfZGl2KTsKPiArCUk5MTVfV1JJVEUoUExBTkVfU0laRShwaXBlLCAwKSwg KHNyY19oIDw8IDE2KSB8IHNyY193KTsKPiAgIAo+ICAgCWlmIChzY2FsZXJfaWQgPj0gMCkgewo+ ICAgCQl1aW50MzJfdCBwc19jdHJsID0gMDsKPiBAQCAtMzA4Myw3ICszMjIzLDggQEAgc3RhdGlj IHZvaWQgc2t5bGFrZV91cGRhdGVfcHJpbWFyeV9wbGFuZShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFu ZSwKPiAgIAkJSTkxNV9XUklURShQTEFORV9QT1MocGlwZSwgMCksIChkc3RfeSA8PCAxNikgfCBk c3RfeCk7Cj4gICAJfQo+ICAgCj4gLQlJOTE1X1dSSVRFKFBMQU5FX1NVUkYocGlwZSwgMCksIHN1 cmZfYWRkcik7Cj4gKwlJOTE1X1dSSVRFKFBMQU5FX1NVUkYocGlwZSwgMCksCj4gKwkJICAgaW50 ZWxfZmJfZ3R0X29mZnNldChmYiwgcm90YXRpb24pICsgc3VyZl9hZGRyKTsKPiAgIAo+ICAgCVBP U1RJTkdfUkVBRChQTEFORV9TVVJGKHBpcGUsIDApKTsKPiAgIH0KPiBAQCAtMTEyODUsNyArMTE0 MjYsNyBAQCBzdGF0aWMgdm9pZCBza2xfZG9fbW1pb19mbGlwKHN0cnVjdCBpbnRlbF9jcnRjICpp bnRlbF9jcnRjLAo+ICAgCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ ZGV2X3ByaXZhdGU7Cj4gICAJc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIgPSBpbnRlbF9jcnRj LT5iYXNlLnByaW1hcnktPmZiOwo+ICAgCWNvbnN0IGVudW0gcGlwZSBwaXBlID0gaW50ZWxfY3J0 Yy0+cGlwZTsKPiAtCXUzMiBjdGwsIHN0cmlkZSwgdGlsZV9oZWlnaHQ7Cj4gKwl1MzIgY3RsLCBz dHJpZGU7Cj4gICAKPiAgIAljdGwgPSBJOTE1X1JFQUQoUExBTkVfQ1RMKHBpcGUsIDApKTsKPiAg IAljdGwgJj0gflBMQU5FX0NUTF9USUxFRF9NQVNLOwo+IEBAIC0xMTMxMCw5ICsxMTQ1MSwxMSBA QCBzdGF0aWMgdm9pZCBza2xfZG9fbW1pb19mbGlwKHN0cnVjdCBpbnRlbF9jcnRjICppbnRlbF9j cnRjLAo+ICAgCSAqIGxpbmVhciBidWZmZXJzIG9yIGluIG51bWJlciBvZiB0aWxlcyBmb3IgdGls ZWQgYnVmZmVycy4KPiAgIAkgKi8KPiAgIAlpZiAoaW50ZWxfcm90YXRpb25fOTBfb3JfMjcwKHJv dGF0aW9uKSkgewo+IC0JCS8qIHN0cmlkZSA9IFN1cmZhY2UgaGVpZ2h0IGluIHRpbGVzICovCj4g LQkJdGlsZV9oZWlnaHQgPSBpbnRlbF90aWxlX2hlaWdodChkZXZfcHJpdiwgZmItPm1vZGlmaWVy WzBdLCAwKTsKPiAtCQlzdHJpZGUgPSBESVZfUk9VTkRfVVAoZmItPmhlaWdodCwgdGlsZV9oZWln aHQpOwo+ICsJCWludCBjcHAgPSBkcm1fZm9ybWF0X3BsYW5lX2NwcChmYi0+cGl4ZWxfZm9ybWF0 LCAwKTsKPiArCQlzdHJ1Y3QgaW50ZWxfZnJhbWVidWZmZXIgKmludGVsX2ZiID0gdG9faW50ZWxf ZnJhbWVidWZmZXIoZmIpOwo+ICsKPiArCQlzdHJpZGUgPSBpbnRlbF9mYi0+cm90YXRlZFswXS5w aXRjaCAvCj4gKwkJCWludGVsX3RpbGVfaGVpZ2h0KGRldl9wcml2LCBmYi0+bW9kaWZpZXJbMF0s IGNwcCk7Cj4gICAJfSBlbHNlIHsKPiAgIAkJc3RyaWRlID0gZmItPnBpdGNoZXNbMF0gLwo+ICAg CQkJaW50ZWxfZmJfc3RyaWRlX2FsaWdubWVudChkZXZfcHJpdiwgZmItPm1vZGlmaWVyWzBdLAo+ IEBAIC0xMTY0Miw4ICsxMTc4NSw3IEBAIHN0YXRpYyBpbnQgaW50ZWxfY3J0Y19wYWdlX2ZsaXAo c3RydWN0IGRybV9jcnRjICpjcnRjLAo+ICAgCWlmIChyZXQpCj4gICAJCWdvdG8gY2xlYW51cF9w ZW5kaW5nOwo+ICAgCj4gLQl3b3JrLT5ndHRfb2Zmc2V0ID0gaW50ZWxfcGxhbmVfb2JqX29mZnNl dCh0b19pbnRlbF9wbGFuZShwcmltYXJ5KSwKPiAtCQkJCQkJICBvYmosIDApOwo+ICsJd29yay0+ Z3R0X29mZnNldCA9IGludGVsX2ZiX2d0dF9vZmZzZXQoZmIsIHByaW1hcnktPnN0YXRlLT5yb3Rh dGlvbik7Cj4gICAJd29yay0+Z3R0X29mZnNldCArPSBpbnRlbF9jcnRjLT5kc3BhZGRyX29mZnNl dDsKPiAgIAo+ICAgCWlmIChtbWlvX2ZsaXApIHsKPiBAQCAtMTQ3MTYsNyArMTQ4NTgsNiBAQCBz dGF0aWMgaW50IGludGVsX2ZyYW1lYnVmZmVyX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwK PiAgIAkJCQkgIHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopCj4gICB7Cj4gICAJc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShkZXYpOwo+IC0JdW5zaWdu ZWQgaW50IGFsaWduZWRfaGVpZ2h0Owo+ICAgCWludCByZXQ7Cj4gICAJdTMyIHBpdGNoX2xpbWl0 LCBzdHJpZGVfYWxpZ25tZW50Owo+ICAgCj4gQEAgLTE0ODQxLDE3ICsxNDk4MiwxMiBAQCBzdGF0 aWMgaW50IGludGVsX2ZyYW1lYnVmZmVyX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKPiAg IAlpZiAobW9kZV9jbWQtPm9mZnNldHNbMF0gIT0gMCkKPiAgIAkJcmV0dXJuIC1FSU5WQUw7Cj4g ICAKPiAtCWFsaWduZWRfaGVpZ2h0ID0gaW50ZWxfZmJfYWxpZ25faGVpZ2h0KGRldiwgbW9kZV9j bWQtPmhlaWdodCwKPiAtCQkJCQkgICAgICAgbW9kZV9jbWQtPnBpeGVsX2Zvcm1hdCwKPiAtCQkJ CQkgICAgICAgbW9kZV9jbWQtPm1vZGlmaWVyWzBdKTsKPiAtCS8qIEZJWE1FIGRybSBoZWxwZXIg Zm9yIHNpemUgY2hlY2tzIChlc3BlY2lhbGx5IHBsYW5hciBmb3JtYXRzKT8gKi8KPiAtCWlmIChv YmotPmJhc2Uuc2l6ZSA8IGFsaWduZWRfaGVpZ2h0ICogbW9kZV9jbWQtPnBpdGNoZXNbMF0pCj4g LQkJcmV0dXJuIC1FSU5WQUw7Cj4gLQo+ICAgCWRybV9oZWxwZXJfbW9kZV9maWxsX2ZiX3N0cnVj dCgmaW50ZWxfZmItPmJhc2UsIG1vZGVfY21kKTsKPiAgIAlpbnRlbF9mYi0+b2JqID0gb2JqOwo+ ICAgCj4gLQlpbnRlbF9maWxsX2ZiX2luZm8oZGV2X3ByaXYsICZpbnRlbF9mYi0+YmFzZSk7Cj4g KwlyZXQgPSBpbnRlbF9maWxsX2ZiX2luZm8oZGV2X3ByaXYsICZpbnRlbF9mYi0+YmFzZSk7Cj4g KwlpZiAocmV0KQo+ICsJCXJldHVybiByZXQ7Cj4gICAKPiAgIAlyZXQgPSBkcm1fZnJhbWVidWZm ZXJfaW5pdChkZXYsICZpbnRlbF9mYi0+YmFzZSwgJmludGVsX2ZiX2Z1bmNzKTsKPiAgIAlpZiAo cmV0KSB7Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rydi5oIGIv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmgKPiBpbmRleCAyMWRlZTNmODllODQuLjJm MTE3OGRiZDMyOCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYu aAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rydi5oCj4gQEAgLTE1Myw2ICsx NTMsMTYgQEAgc3RydWN0IGludGVsX2ZyYW1lYnVmZmVyIHsKPiAgIAlzdHJ1Y3QgZHJtX2ZyYW1l YnVmZmVyIGJhc2U7Cj4gICAJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iajsKPiAgIAlz dHJ1Y3QgaW50ZWxfcm90YXRpb25faW5mbyByb3RfaW5mbzsKPiArCj4gKwkvKiBmb3IgZWFjaCBw bGFuZSBpbiB0aGUgbm9ybWFsIEdUVCB2aWV3ICovCj4gKwlzdHJ1Y3Qgewo+ICsJCXVuc2lnbmVk IGludCB4LCB5Owo+ICsJfSBub3JtYWxbMl07Cj4gKwkvKiBmb3IgZWFjaCBwbGFuZSBpbiB0aGUg cm90YXRlZCBHVFQgdmlldyAqLwo+ICsJc3RydWN0IHsKPiArCQl1bnNpZ25lZCBpbnQgeCwgeTsK PiArCQl1bnNpZ25lZCBpbnQgcGl0Y2g7IC8qIHBpeGVscyAqLwo+ICsJfSByb3RhdGVkWzJdOwo+ ICAgfTsKPiAgIAo+ICAgc3RydWN0IGludGVsX2ZiZGV2IHsKPiBAQCAtMTExNSw2ICsxMTI1LDEx IEBAIGludCB2bHZfZ2V0X2Nja19jbG9jayhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3By aXYsCj4gICAJCSAgICAgIGNvbnN0IGNoYXIgKm5hbWUsIHUzMiByZWcsIGludCByZWZfZnJlcSk7 Cj4gICBleHRlcm4gY29uc3Qgc3RydWN0IGRybV9wbGFuZV9mdW5jcyBpbnRlbF9wbGFuZV9mdW5j czsKPiAgIHZvaWQgaW50ZWxfaW5pdF9kaXNwbGF5X2hvb2tzKHN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdik7Cj4gK3Vuc2lnbmVkIGludCBpbnRlbF9mYl94eV90b19saW5lYXIoaW50 IHgsIGludCB5LAo+ICsJCQkJICAgY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsIGlu dCBwbGFuZSk7Cj4gK3ZvaWQgaW50ZWxfYWRkX2ZiX29mZnNldHMoaW50ICp4LCBpbnQgKnksCj4g KwkJCSAgY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsIGludCBwbGFuZSwKPiArCQkJ ICB1bnNpZ25lZCBpbnQgcm90YXRpb24pOwo+ICAgdW5zaWduZWQgaW50IGludGVsX3JvdGF0aW9u X2luZm9fc2l6ZShjb25zdCBzdHJ1Y3QgaW50ZWxfcm90YXRpb25faW5mbyAqcm90X2luZm8pOwo+ ICAgYm9vbCBpbnRlbF9oYXNfcGVuZGluZ19mYl91bnBpbihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2 KTsKPiAgIHZvaWQgaW50ZWxfbWFya19idXN5KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwo+IEBA IC0xMjY4LDkgKzEyODMsNyBAQCB2b2lkIGludGVsX21vZGVfZnJvbV9waXBlX2NvbmZpZyhzdHJ1 Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSwKPiAgIGludCBza2xfdXBkYXRlX3NjYWxlcl9jcnRj KHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlKTsKPiAgIGludCBza2xfbWF4X3Nj YWxlKHN0cnVjdCBpbnRlbF9jcnRjICpjcnRjLCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0 Y19zdGF0ZSk7Cj4gICAKPiAtdTMyIGludGVsX3BsYW5lX29ial9vZmZzZXQoc3RydWN0IGludGVs X3BsYW5lICppbnRlbF9wbGFuZSwKPiAtCQkJICAgc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3Qg Km9iaiwKPiAtCQkJICAgdW5zaWduZWQgaW50IHBsYW5lKTsKPiArdTMyIGludGVsX2ZiX2d0dF9v ZmZzZXQoc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsIHVuc2lnbmVkIGludCByb3RhdGlvbik7 Cj4gICAKPiAgIHUzMiBza2xfcGxhbmVfY3RsX2Zvcm1hdCh1aW50MzJfdCBwaXhlbF9mb3JtYXQp Owo+ICAgdTMyIHNrbF9wbGFuZV9jdGxfdGlsaW5nKHVpbnQ2NF90IGZiX21vZGlmaWVyKTsKPiBk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfc3ByaXRlLmMgYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pbnRlbF9zcHJpdGUuYwo+IGluZGV4IDBmM2UyMzAzZTBlOS4uODA2YjBk NTBmYjUwIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3Nwcml0ZS5j Cj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfc3ByaXRlLmMKPiBAQCAtMTg2LDE1 ICsxODYsMTMgQEAgc2tsX3VwZGF0ZV9wbGFuZShzdHJ1Y3QgZHJtX3BsYW5lICpkcm1fcGxhbmUs Cj4gICAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0 ZTsKPiAgIAlzdHJ1Y3QgaW50ZWxfcGxhbmUgKmludGVsX3BsYW5lID0gdG9faW50ZWxfcGxhbmUo ZHJtX3BsYW5lKTsKPiAgIAlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiA9IHBsYW5lX3N0YXRl LT5iYXNlLmZiOwo+IC0Jc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiA9IGludGVsX2Zi X29iaihmYik7Cj4gKwlzdHJ1Y3QgaW50ZWxfZnJhbWVidWZmZXIgKmludGVsX2ZiID0gdG9faW50 ZWxfZnJhbWVidWZmZXIoZmIpOwo+ICAgCWNvbnN0IGludCBwaXBlID0gaW50ZWxfcGxhbmUtPnBp cGU7Cj4gICAJY29uc3QgaW50IHBsYW5lID0gaW50ZWxfcGxhbmUtPnBsYW5lICsgMTsKPiAgIAl1 MzIgcGxhbmVfY3RsLCBzdHJpZGVfZGl2LCBzdHJpZGU7Cj4gICAJY29uc3Qgc3RydWN0IGRybV9p bnRlbF9zcHJpdGVfY29sb3JrZXkgKmtleSA9ICZwbGFuZV9zdGF0ZS0+Y2tleTsKPiAgIAl1MzIg c3VyZl9hZGRyOwo+IC0JdTMyIHRpbGVfaGVpZ2h0LCBwbGFuZV9vZmZzZXQsIHBsYW5lX3NpemU7 Cj4gICAJdW5zaWduZWQgaW50IHJvdGF0aW9uID0gcGxhbmVfc3RhdGUtPmJhc2Uucm90YXRpb247 Cj4gLQlpbnQgeF9vZmZzZXQsIHlfb2Zmc2V0Owo+ICAgCWludCBjcnRjX3ggPSBwbGFuZV9zdGF0 ZS0+ZHN0LngxOwo+ICAgCWludCBjcnRjX3kgPSBwbGFuZV9zdGF0ZS0+ZHN0LnkxOwo+ICAgCXVp bnQzMl90IGNydGNfdyA9IGRybV9yZWN0X3dpZHRoKCZwbGFuZV9zdGF0ZS0+ZHN0KTsKPiBAQCAt MjE1LDE1ICsyMTMsNiBAQCBza2xfdXBkYXRlX3BsYW5lKHN0cnVjdCBkcm1fcGxhbmUgKmRybV9w bGFuZSwKPiAgIAo+ICAgCXBsYW5lX2N0bCB8PSBza2xfcGxhbmVfY3RsX3JvdGF0aW9uKHJvdGF0 aW9uKTsKPiAgIAo+IC0Jc3RyaWRlX2RpdiA9IGludGVsX2ZiX3N0cmlkZV9hbGlnbm1lbnQoZGV2 X3ByaXYsIGZiLT5tb2RpZmllclswXSwKPiAtCQkJCQkgICAgICAgZmItPnBpeGVsX2Zvcm1hdCk7 Cj4gLQo+IC0JLyogU2l6ZXMgYXJlIDAgYmFzZWQgKi8KPiAtCXNyY193LS07Cj4gLQlzcmNfaC0t Owo+IC0JY3J0Y193LS07Cj4gLQljcnRjX2gtLTsKPiAtCj4gICAJaWYgKGtleS0+ZmxhZ3MpIHsK PiAgIAkJSTkxNV9XUklURShQTEFORV9LRVlWQUwocGlwZSwgcGxhbmUpLCBrZXktPm1pbl92YWx1 ZSk7Cj4gICAJCUk5MTVfV1JJVEUoUExBTkVfS0VZTUFYKHBpcGUsIHBsYW5lKSwga2V5LT5tYXhf dmFsdWUpOwo+IEBAIC0yMzUsMjggKzIyNCw0NCBAQCBza2xfdXBkYXRlX3BsYW5lKHN0cnVjdCBk cm1fcGxhbmUgKmRybV9wbGFuZSwKPiAgIAllbHNlIGlmIChrZXktPmZsYWdzICYgSTkxNV9TRVRf Q09MT1JLRVlfU09VUkNFKQo+ICAgCQlwbGFuZV9jdGwgfD0gUExBTkVfQ1RMX0tFWV9FTkFCTEVf U09VUkNFOwo+ICAgCj4gLQlzdXJmX2FkZHIgPSBpbnRlbF9wbGFuZV9vYmpfb2Zmc2V0KGludGVs X3BsYW5lLCBvYmosIDApOwo+IC0KPiAgIAlpZiAoaW50ZWxfcm90YXRpb25fOTBfb3JfMjcwKHJv dGF0aW9uKSkgewo+IC0JCWludCBjcHAgPSBkcm1fZm9ybWF0X3BsYW5lX2NwcChmYi0+cGl4ZWxf Zm9ybWF0LCAwKTsKPiAtCj4gLQkJLyogc3RyaWRlOiBTdXJmYWNlIGhlaWdodCBpbiB0aWxlcyAq Lwo+IC0JCXRpbGVfaGVpZ2h0ID0gaW50ZWxfdGlsZV9oZWlnaHQoZGV2X3ByaXYsIGZiLT5tb2Rp ZmllclswXSwgY3BwKTsKPiAtCQlzdHJpZGUgPSBESVZfUk9VTkRfVVAoZmItPmhlaWdodCwgdGls ZV9oZWlnaHQpOwo+IC0JCXBsYW5lX3NpemUgPSAoc3JjX3cgPDwgMTYpIHwgc3JjX2g7Cj4gLQkJ eF9vZmZzZXQgPSBzdHJpZGUgKiB0aWxlX2hlaWdodCAtIHkgLSAoc3JjX2ggKyAxKTsKPiAtCQl5 X29mZnNldCA9IHg7Cj4gKwkJc3RydWN0IGRybV9yZWN0IHIgPSB7Cj4gKwkJCS54MSA9IHgsCj4g KwkJCS54MiA9IHggKyBzcmNfdywKPiArCQkJLnkxID0geSwKPiArCQkJLnkyID0geSArIHNyY19o LAo+ICsJCX07Cj4gKwkJdW5zaWduZWQgaW50IGNwcCA9IGRybV9mb3JtYXRfcGxhbmVfY3BwKGZi LT5waXhlbF9mb3JtYXQsIDApOwo+ICsKPiArCQkvKiBSb3RhdGUgc3JjIGNvb3JkaW5hdGVzIHRv IG1hdGNoIHJvdGF0ZWQgR1RUIHZpZXcgKi8KPiArCQlkcm1fcmVjdF9yb3RhdGUoJnIsIGZiLT53 aWR0aCwgZmItPmhlaWdodCwgQklUKERSTV9ST1RBVEVfMjcwKSk7Cj4gKwo+ICsJCXggPSByLngx Owo+ICsJCXkgPSByLnkxOwo+ICsJCXNyY193ID0gZHJtX3JlY3Rfd2lkdGgoJnIpOwo+ICsJCXNy Y19oID0gZHJtX3JlY3RfaGVpZ2h0KCZyKTsKPiArCj4gKwkJc3RyaWRlX2RpdiA9IGludGVsX3Rp bGVfaGVpZ2h0KGRldl9wcml2LCBmYi0+bW9kaWZpZXJbMF0sIGNwcCk7Cj4gKwkJc3RyaWRlID0g aW50ZWxfZmItPnJvdGF0ZWRbMF0ucGl0Y2g7Cj4gICAJfSBlbHNlIHsKPiAtCQlzdHJpZGUgPSBm Yi0+cGl0Y2hlc1swXSAvIHN0cmlkZV9kaXY7Cj4gLQkJcGxhbmVfc2l6ZSA9IChzcmNfaCA8PCAx NikgfCBzcmNfdzsKPiAtCQl4X29mZnNldCA9IHg7Cj4gLQkJeV9vZmZzZXQgPSB5Owo+ICsJCXN0 cmlkZV9kaXYgPSBpbnRlbF9mYl9zdHJpZGVfYWxpZ25tZW50KGRldl9wcml2LCBmYi0+bW9kaWZp ZXJbMF0sCj4gKwkJCQkJCSAgICAgICBmYi0+cGl4ZWxfZm9ybWF0KTsKPiArCQlzdHJpZGUgPSBm Yi0+cGl0Y2hlc1swXTsKPiAgIAl9Cj4gLQlwbGFuZV9vZmZzZXQgPSB5X29mZnNldCA8PCAxNiB8 IHhfb2Zmc2V0Owo+ICAgCj4gLQlJOTE1X1dSSVRFKFBMQU5FX09GRlNFVChwaXBlLCBwbGFuZSks IHBsYW5lX29mZnNldCk7Cj4gLQlJOTE1X1dSSVRFKFBMQU5FX1NUUklERShwaXBlLCBwbGFuZSks IHN0cmlkZSk7Cj4gLQlJOTE1X1dSSVRFKFBMQU5FX1NJWkUocGlwZSwgcGxhbmUpLCBwbGFuZV9z aXplKTsKPiArCWludGVsX2FkZF9mYl9vZmZzZXRzKCZ4LCAmeSwgZmIsIDAsIHJvdGF0aW9uKTsK PiArCXN1cmZfYWRkciA9IGludGVsX2NvbXB1dGVfdGlsZV9vZmZzZXQoJngsICZ5LCBmYiwgMCwK PiArCQkJCQkgICAgICBzdHJpZGUsIHJvdGF0aW9uKTsKPiArCj4gKwkvKiBTaXplcyBhcmUgMCBi YXNlZCAqLwo+ICsJc3JjX3ctLTsKPiArCXNyY19oLS07Cj4gKwljcnRjX3ctLTsKPiArCWNydGNf aC0tOwo+ICsKPiArCUk5MTVfV1JJVEUoUExBTkVfT0ZGU0VUKHBpcGUsIHBsYW5lKSwgKHkgPDwg MTYpIHwgeCk7Cj4gKwlJOTE1X1dSSVRFKFBMQU5FX1NUUklERShwaXBlLCBwbGFuZSksIHN0cmlk ZSAvIHN0cmlkZV9kaXYpOwo+ICsJSTkxNV9XUklURShQTEFORV9TSVpFKHBpcGUsIHBsYW5lKSwg KHNyY19oIDw8IDE2KSB8IHNyY193KTsKPiAgIAo+ICAgCS8qIHByb2dyYW0gcGxhbmUgc2NhbGVy ICovCj4gICAJaWYgKHBsYW5lX3N0YXRlLT5zY2FsZXJfaWQgPj0gMCkgewo+IEBAIC0yNzgsNyAr MjgzLDggQEAgc2tsX3VwZGF0ZV9wbGFuZShzdHJ1Y3QgZHJtX3BsYW5lICpkcm1fcGxhbmUsCj4g ICAJfQo+ICAgCj4gICAJSTkxNV9XUklURShQTEFORV9DVEwocGlwZSwgcGxhbmUpLCBwbGFuZV9j dGwpOwo+IC0JSTkxNV9XUklURShQTEFORV9TVVJGKHBpcGUsIHBsYW5lKSwgc3VyZl9hZGRyKTsK PiArCUk5MTVfV1JJVEUoUExBTkVfU1VSRihwaXBlLCBwbGFuZSksCj4gKwkJICAgaW50ZWxfZmJf Z3R0X29mZnNldChmYiwgcm90YXRpb24pICsgc3VyZl9hZGRyKTsKPiAgIAlQT1NUSU5HX1JFQUQo UExBTkVfU1VSRihwaXBlLCBwbGFuZSkpOwo+ICAgfQo+ICAgCj4gQEAgLTM1MSw3ICszNTcsNiBA QCB2bHZfdXBkYXRlX3BsYW5lKHN0cnVjdCBkcm1fcGxhbmUgKmRwbGFuZSwKPiAgIAl1MzIgc3By Y3RsOwo+ICAgCXUzMiBzcHJzdXJmX29mZnNldCwgbGluZWFyX29mZnNldDsKPiAgIAl1bnNpZ25l ZCBpbnQgcm90YXRpb24gPSBkcGxhbmUtPnN0YXRlLT5yb3RhdGlvbjsKPiAtCWludCBjcHAgPSBk cm1fZm9ybWF0X3BsYW5lX2NwcChmYi0+cGl4ZWxfZm9ybWF0LCAwKTsKPiAgIAljb25zdCBzdHJ1 Y3QgZHJtX2ludGVsX3Nwcml0ZV9jb2xvcmtleSAqa2V5ID0gJnBsYW5lX3N0YXRlLT5ja2V5Owo+ ICAgCWludCBjcnRjX3ggPSBwbGFuZV9zdGF0ZS0+ZHN0LngxOwo+ICAgCWludCBjcnRjX3kgPSBw bGFuZV9zdGF0ZS0+ZHN0LnkxOwo+IEBAIC00MjIsMTkgKzQyNywxOSBAQCB2bHZfdXBkYXRlX3Bs YW5lKHN0cnVjdCBkcm1fcGxhbmUgKmRwbGFuZSwKPiAgIAljcnRjX3ctLTsKPiAgIAljcnRjX2gt LTsKPiAgIAo+IC0JbGluZWFyX29mZnNldCA9IHkgKiBmYi0+cGl0Y2hlc1swXSArIHggKiBjcHA7 Cj4gKwlpbnRlbF9hZGRfZmJfb2Zmc2V0cygmeCwgJnksIGZiLCAwLCByb3RhdGlvbik7Cj4gICAJ c3Byc3VyZl9vZmZzZXQgPSBpbnRlbF9jb21wdXRlX3RpbGVfb2Zmc2V0KCZ4LCAmeSwgZmIsIDAs Cj4gICAJCQkJCQkgICBmYi0+cGl0Y2hlc1swXSwgcm90YXRpb24pOwo+IC0JbGluZWFyX29mZnNl dCAtPSBzcHJzdXJmX29mZnNldDsKPiAgIAo+ICAgCWlmIChyb3RhdGlvbiA9PSBCSVQoRFJNX1JP VEFURV8xODApKSB7Cj4gICAJCXNwcmN0bCB8PSBTUF9ST1RBVEVfMTgwOwo+ICAgCj4gICAJCXgg Kz0gc3JjX3c7Cj4gICAJCXkgKz0gc3JjX2g7Cj4gLQkJbGluZWFyX29mZnNldCArPSBzcmNfaCAq IGZiLT5waXRjaGVzWzBdICsgc3JjX3cgKiBjcHA7Cj4gICAJfQo+ICAgCj4gKwlsaW5lYXJfb2Zm c2V0ID0gaW50ZWxfZmJfeHlfdG9fbGluZWFyKHgsIHksIGZiLCAwKTsKPiArCj4gICAJaWYgKGtl eS0+ZmxhZ3MpIHsKPiAgIAkJSTkxNV9XUklURShTUEtFWU1JTlZBTChwaXBlLCBwbGFuZSksIGtl eS0+bWluX3ZhbHVlKTsKPiAgIAkJSTkxNV9XUklURShTUEtFWU1BWFZBTChwaXBlLCBwbGFuZSks IGtleS0+bWF4X3ZhbHVlKTsKPiBAQCAtNDU5LDggKzQ2NCw4IEBAIHZsdl91cGRhdGVfcGxhbmUo c3RydWN0IGRybV9wbGFuZSAqZHBsYW5lLAo+ICAgCj4gICAJSTkxNV9XUklURShTUFNJWkUocGlw ZSwgcGxhbmUpLCAoY3J0Y19oIDw8IDE2KSB8IGNydGNfdyk7Cj4gICAJSTkxNV9XUklURShTUENO VFIocGlwZSwgcGxhbmUpLCBzcHJjdGwpOwo+IC0JSTkxNV9XUklURShTUFNVUkYocGlwZSwgcGxh bmUpLCBpOTE1X2dlbV9vYmpfZ2d0dF9vZmZzZXQob2JqKSArCj4gLQkJICAgc3Byc3VyZl9vZmZz ZXQpOwo+ICsJSTkxNV9XUklURShTUFNVUkYocGlwZSwgcGxhbmUpLAo+ICsJCSAgIGludGVsX2Zi X2d0dF9vZmZzZXQoZmIsIHJvdGF0aW9uKSArIHNwcnN1cmZfb2Zmc2V0KTsKPiAgIAlQT1NUSU5H X1JFQUQoU1BTVVJGKHBpcGUsIHBsYW5lKSk7Cj4gICB9Cj4gICAKPiBAQCAtNDkzLDcgKzQ5OCw2 IEBAIGl2Yl91cGRhdGVfcGxhbmUoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCj4gICAJdTMyIHNw cmN0bCwgc3Byc2NhbGUgPSAwOwo+ICAgCXUzMiBzcHJzdXJmX29mZnNldCwgbGluZWFyX29mZnNl dDsKPiAgIAl1bnNpZ25lZCBpbnQgcm90YXRpb24gPSBwbGFuZV9zdGF0ZS0+YmFzZS5yb3RhdGlv bjsKPiAtCWludCBjcHAgPSBkcm1fZm9ybWF0X3BsYW5lX2NwcChmYi0+cGl4ZWxfZm9ybWF0LCAw KTsKPiAgIAljb25zdCBzdHJ1Y3QgZHJtX2ludGVsX3Nwcml0ZV9jb2xvcmtleSAqa2V5ID0gJnBs YW5lX3N0YXRlLT5ja2V5Owo+ICAgCWludCBjcnRjX3ggPSBwbGFuZV9zdGF0ZS0+ZHN0LngxOwo+ ICAgCWludCBjcnRjX3kgPSBwbGFuZV9zdGF0ZS0+ZHN0LnkxOwo+IEBAIC01NTUsMTAgKzU1OSw5 IEBAIGl2Yl91cGRhdGVfcGxhbmUoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCj4gICAJaWYgKGNy dGNfdyAhPSBzcmNfdyB8fCBjcnRjX2ggIT0gc3JjX2gpCj4gICAJCXNwcnNjYWxlID0gU1BSSVRF X1NDQUxFX0VOQUJMRSB8IChzcmNfdyA8PCAxNikgfCBzcmNfaDsKPiAgIAo+IC0JbGluZWFyX29m ZnNldCA9IHkgKiBmYi0+cGl0Y2hlc1swXSArIHggKiBjcHA7Cj4gKwlpbnRlbF9hZGRfZmJfb2Zm c2V0cygmeCwgJnksIGZiLCAwLCByb3RhdGlvbik7Cj4gICAJc3Byc3VyZl9vZmZzZXQgPSBpbnRl bF9jb21wdXRlX3RpbGVfb2Zmc2V0KCZ4LCAmeSwgZmIsIDAsCj4gICAJCQkJCQkgICBmYi0+cGl0 Y2hlc1swXSwgcm90YXRpb24pOwo+IC0JbGluZWFyX29mZnNldCAtPSBzcHJzdXJmX29mZnNldDsK PiAgIAo+ICAgCWlmIChyb3RhdGlvbiA9PSBCSVQoRFJNX1JPVEFURV8xODApKSB7Cj4gICAJCXNw cmN0bCB8PSBTUFJJVEVfUk9UQVRFXzE4MDsKPiBAQCAtNTY3LDEwICs1NzAsMTEgQEAgaXZiX3Vw ZGF0ZV9wbGFuZShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKPiAgIAkJaWYgKCFJU19IQVNXRUxM KGRldikgJiYgIUlTX0JST0FEV0VMTChkZXYpKSB7Cj4gICAJCQl4ICs9IHNyY193Owo+ICAgCQkJ eSArPSBzcmNfaDsKPiAtCQkJbGluZWFyX29mZnNldCArPSBzcmNfaCAqIGZiLT5waXRjaGVzWzBd ICsgc3JjX3cgKiBjcHA7Cj4gICAJCX0KPiAgIAl9Cj4gICAKPiArCWxpbmVhcl9vZmZzZXQgPSBp bnRlbF9mYl94eV90b19saW5lYXIoeCwgeSwgZmIsIDApOwo+ICsKPiAgIAlpZiAoa2V5LT5mbGFn cykgewo+ICAgCQlJOTE1X1dSSVRFKFNQUktFWVZBTChwaXBlKSwga2V5LT5taW5fdmFsdWUpOwo+ ICAgCQlJOTE1X1dSSVRFKFNQUktFWU1BWChwaXBlKSwga2V5LT5tYXhfdmFsdWUpOwo+IEBAIC01 OTksNyArNjAzLDcgQEAgaXZiX3VwZGF0ZV9wbGFuZShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwK PiAgIAkJSTkxNV9XUklURShTUFJTQ0FMRShwaXBlKSwgc3Byc2NhbGUpOwo+ICAgCUk5MTVfV1JJ VEUoU1BSQ1RMKHBpcGUpLCBzcHJjdGwpOwo+ICAgCUk5MTVfV1JJVEUoU1BSU1VSRihwaXBlKSwK PiAtCQkgICBpOTE1X2dlbV9vYmpfZ2d0dF9vZmZzZXQob2JqKSArIHNwcnN1cmZfb2Zmc2V0KTsK PiArCQkgICBpbnRlbF9mYl9ndHRfb2Zmc2V0KGZiLCByb3RhdGlvbikgKyBzcHJzdXJmX29mZnNl dCk7Cj4gICAJUE9TVElOR19SRUFEKFNQUlNVUkYocGlwZSkpOwo+ICAgfQo+ICAgCj4gQEAgLTYz NCw3ICs2MzgsNiBAQCBpbGtfdXBkYXRlX3BsYW5lKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAo+ ICAgCXUzMiBkdnNjbnRyLCBkdnNzY2FsZTsKPiAgIAl1MzIgZHZzc3VyZl9vZmZzZXQsIGxpbmVh cl9vZmZzZXQ7Cj4gICAJdW5zaWduZWQgaW50IHJvdGF0aW9uID0gcGxhbmVfc3RhdGUtPmJhc2Uu cm90YXRpb247Cj4gLQlpbnQgY3BwID0gZHJtX2Zvcm1hdF9wbGFuZV9jcHAoZmItPnBpeGVsX2Zv cm1hdCwgMCk7Cj4gICAJY29uc3Qgc3RydWN0IGRybV9pbnRlbF9zcHJpdGVfY29sb3JrZXkgKmtl eSA9ICZwbGFuZV9zdGF0ZS0+Y2tleTsKPiAgIAlpbnQgY3J0Y194ID0gcGxhbmVfc3RhdGUtPmRz dC54MTsKPiAgIAlpbnQgY3J0Y195ID0gcGxhbmVfc3RhdGUtPmRzdC55MTsKPiBAQCAtNjkyLDE5 ICs2OTUsMTkgQEAgaWxrX3VwZGF0ZV9wbGFuZShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKPiAg IAlpZiAoY3J0Y193ICE9IHNyY193IHx8IGNydGNfaCAhPSBzcmNfaCkKPiAgIAkJZHZzc2NhbGUg PSBEVlNfU0NBTEVfRU5BQkxFIHwgKHNyY193IDw8IDE2KSB8IHNyY19oOwo+ICAgCj4gLQlsaW5l YXJfb2Zmc2V0ID0geSAqIGZiLT5waXRjaGVzWzBdICsgeCAqIGNwcDsKPiArCWludGVsX2FkZF9m Yl9vZmZzZXRzKCZ4LCAmeSwgZmIsIDAsIHJvdGF0aW9uKTsKPiAgIAlkdnNzdXJmX29mZnNldCA9 IGludGVsX2NvbXB1dGVfdGlsZV9vZmZzZXQoJngsICZ5LCBmYiwgMCwKPiAgIAkJCQkJCSAgIGZi LT5waXRjaGVzWzBdLCByb3RhdGlvbik7Cj4gLQlsaW5lYXJfb2Zmc2V0IC09IGR2c3N1cmZfb2Zm c2V0Owo+ICAgCj4gICAJaWYgKHJvdGF0aW9uID09IEJJVChEUk1fUk9UQVRFXzE4MCkpIHsKPiAg IAkJZHZzY250ciB8PSBEVlNfUk9UQVRFXzE4MDsKPiAgIAo+ICAgCQl4ICs9IHNyY193Owo+ICAg CQl5ICs9IHNyY19oOwo+IC0JCWxpbmVhcl9vZmZzZXQgKz0gc3JjX2ggKiBmYi0+cGl0Y2hlc1sw XSArIHNyY193ICogY3BwOwo+ICAgCX0KPiAgIAo+ICsJbGluZWFyX29mZnNldCA9IGludGVsX2Zi X3h5X3RvX2xpbmVhcih4LCB5LCBmYiwgMCk7Cj4gKwo+ICAgCWlmIChrZXktPmZsYWdzKSB7Cj4g ICAJCUk5MTVfV1JJVEUoRFZTS0VZVkFMKHBpcGUpLCBrZXktPm1pbl92YWx1ZSk7Cj4gICAJCUk5 MTVfV1JJVEUoRFZTS0VZTUFYKHBpcGUpLCBrZXktPm1heF92YWx1ZSk7Cj4gQEAgLTcyOCw3ICs3 MzEsNyBAQCBpbGtfdXBkYXRlX3BsYW5lKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAo+ICAgCUk5 MTVfV1JJVEUoRFZTU0NBTEUocGlwZSksIGR2c3NjYWxlKTsKPiAgIAlJOTE1X1dSSVRFKERWU0NO VFIocGlwZSksIGR2c2NudHIpOwo+ICAgCUk5MTVfV1JJVEUoRFZTU1VSRihwaXBlKSwKPiAtCQkg ICBpOTE1X2dlbV9vYmpfZ2d0dF9vZmZzZXQob2JqKSArIGR2c3N1cmZfb2Zmc2V0KTsKPiArCQkg ICBpbnRlbF9mYl9ndHRfb2Zmc2V0KGZiLCByb3RhdGlvbikgKyBkdnNzdXJmX29mZnNldCk7Cj4g ICAJUE9TVElOR19SRUFEKERWU1NVUkYocGlwZSkpOwo+ICAgfQo+ICAgCgpfX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0 CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3Rv cC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK