From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-13.8 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 5D401C433DB for ; Wed, 13 Jan 2021 15:34:29 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id C385F2251F for ; Wed, 13 Jan 2021 15:34:28 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org C385F2251F Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=intel.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=intel-gfx-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 1B1726EAC4; Wed, 13 Jan 2021 15:34:28 +0000 (UTC) Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) by gabe.freedesktop.org (Postfix) with ESMTPS id 895CB6EAB9 for ; Wed, 13 Jan 2021 15:34:26 +0000 (UTC) IronPort-SDR: rBULexMCUqWh/bYEHGnD7sD+Mih+EXbqBLA+tF9ZGkI5qR1M4wjBjD+t7AoQrxwpZGubEtsEt/ 5YJs54Z4eHtw== X-IronPort-AV: E=McAfee;i="6000,8403,9862"; a="175640963" X-IronPort-AV: E=Sophos;i="5.79,344,1602572400"; d="scan'208";a="175640963" Received: from orsmga008.jf.intel.com ([10.7.209.65]) by fmsmga104.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 13 Jan 2021 07:34:24 -0800 IronPort-SDR: dFcXuoVxW9ruEK3J016KWwSFV60n9VnVMPfRhTAvkrcsKAVJqvy77dLD0eQFaS1BM61M0o9fKq hL3qiGCMeTnQ== X-IronPort-AV: E=Sophos;i="5.79,344,1602572400"; d="scan'208";a="381893993" Received: from iklein-mobl.ger.corp.intel.com (HELO localhost) ([10.249.40.83]) by orsmga008-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 13 Jan 2021 07:34:18 -0800 From: Jani Nikula To: intel-gfx@lists.freedesktop.org In-Reply-To: <14cc59d5734432ad976cd49ff8efce8fa413e5b2.1610127741.git.jani.nikula@intel.com> Organization: Intel Finland Oy - BIC 0357606-4 - Westendinkatu 7, 02160 Espoo References: <14cc59d5734432ad976cd49ff8efce8fa413e5b2.1610127741.git.jani.nikula@intel.com> Date: Wed, 13 Jan 2021 17:34:15 +0200 Message-ID: <87h7nksvew.fsf@intel.com> MIME-Version: 1.0 Subject: Re: [Intel-gfx] [PATCH v2 01/17] drm/i915/pps: abstract panel power sequencer from intel_dp.c X-BeenThere: intel-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Intel graphics driver community testing & development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" CkFuc2h1bWFuLCB0aGFua3MgYSBidW5jaCBmb3IgdGhlIHJldmlld3MsIG11Y2ggYXBwcmVjaWF0 ZWQhCgouLi5idXQgbWF5IEkgYXNrIGZvciByZXZpZXdzIG9uIHRoaXMgb25lIHRvbywgYXMgc3Rh cnRpbmcgdG8gcHVzaCB0aGUKcGF0Y2hlcyBoaW5nZXMgb24gdGhlIGZpcnN0IG9uZS4gSSdkIHJh dGhlciBzdGFydCBwdXNoaW5nIHRoZSByZWFkeSBvbmVzCnRoYW4gcmVwb3N0IHRoZSBlbnRpcmUg c2VyaWVzIGZvciB0aGUgcmVxdWlyZWQgY2hhbmdlcy4KClRoYW5rcywKSmFuaS4KCgpPbiBGcmks IDA4IEphbiAyMDIxLCBKYW5pIE5pa3VsYSA8amFuaS5uaWt1bGFAaW50ZWwuY29tPiB3cm90ZToK PiBJbiBhIGxvbmcgb3ZlcmR1ZSByZWZhY3RvcmluZywgc3BsaXQgb3V0IGFsbCBwYW5lbCBzZXF1 ZW5jZXIgY29kZSBmcm9tCj4gaW50ZWxfZHAuYyB0byBuZXcgaW50ZWxfcHBzLltjaF0uCj4KPiBU aGUgZmlyc3QgcGFydCBpcyBtb3N0bHkganVzdCBjb2RlIG1vdmVtZW50IGFzLWlzLCB3aXRob3V0 IGNsZWFudXBzIG9yCj4gZnVuY3Rpb25hbCBjaGFuZ2VzLgo+Cj4gV2UgbmVlZCB0byBhZGQgYSB2 bHZfZ2V0X2RwbGwoKSBoZWxwZXIgdG8gZ2V0IGF0IHRoZSB2bHYvY2h2IGRwbGwgZnJvbQo+IHBw cyBjb2RlLgo+Cj4gdjI6IFJlYmFzZS4KPgo+IFNpZ25lZC1vZmYtYnk6IEphbmkgTmlrdWxhIDxq YW5pLm5pa3VsYUBpbnRlbC5jb20+Cj4gLS0tCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2Vm aWxlICAgICAgICAgICAgICAgICB8ICAgIDEgKwo+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNw bGF5L2ludGVsX2RkaS5jICAgICAgfCAgICAxICsKPiAgLi4uL2RybS9pOTE1L2Rpc3BsYXkvaW50 ZWxfZGlzcGxheV9wb3dlci5jICAgIHwgICAgMiArLQo+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9k aXNwbGF5L2ludGVsX2RwLmMgICAgICAgfCAxNDM2ICstLS0tLS0tLS0tLS0tLS0tCj4gIGRyaXZl cnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZHAuaCAgICAgICB8ICAgIDUgKy0KPiAgZHJp dmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9wcHMuYyAgICAgIHwgMTMzNCArKysrKysr KysrKysrKysKPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9wcHMuaCAgICAg IHwgICA1MyArCj4gIDcgZmlsZXMgY2hhbmdlZCwgMTQ0MyBpbnNlcnRpb25zKCspLCAxMzg5IGRl bGV0aW9ucygtKQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlz cGxheS9pbnRlbF9wcHMuYwo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2k5 MTUvZGlzcGxheS9pbnRlbF9wcHMuaAo+Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUKPiBpbmRleCA0MDc0 ZDhjYjBkNmUuLjhhMDQ0MDNhMTFiYiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkx NS9NYWtlZmlsZQo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlCj4gQEAgLTI1 MSw2ICsyNTEsNyBAQCBpOTE1LXkgKz0gXAo+ICAJZGlzcGxheS9pbnRlbF9sc3Bjb24ubyBcCj4g IAlkaXNwbGF5L2ludGVsX2x2ZHMubyBcCj4gIAlkaXNwbGF5L2ludGVsX3BhbmVsLm8gXAo+ICsJ ZGlzcGxheS9pbnRlbF9wcHMubyBcCj4gIAlkaXNwbGF5L2ludGVsX3Nkdm8ubyBcCj4gIAlkaXNw bGF5L2ludGVsX3R2Lm8gXAo+ICAJZGlzcGxheS9pbnRlbF92ZHNjLm8gXAo+IGRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2RkaS5jIGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kZGkuYwo+IGluZGV4IDNkZjY5MTMzNjliYy4uZjA5YTU5 N2JmNzMwIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxf ZGRpLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2RkaS5jCj4g QEAgLTQ2LDYgKzQ2LDcgQEAKPiAgI2luY2x1ZGUgImludGVsX2hvdHBsdWcuaCIKPiAgI2luY2x1 ZGUgImludGVsX2xzcGNvbi5oIgo+ICAjaW5jbHVkZSAiaW50ZWxfcGFuZWwuaCIKPiArI2luY2x1 ZGUgImludGVsX3Bwcy5oIgo+ICAjaW5jbHVkZSAiaW50ZWxfcHNyLmgiCj4gICNpbmNsdWRlICJp bnRlbF9zcHJpdGUuaCIKPiAgI2luY2x1ZGUgImludGVsX3RjLmgiCj4gZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheV9wb3dlci5jIGIvZHJpdmVy cy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kaXNwbGF5X3Bvd2VyLmMKPiBpbmRleCBkNTIz NzRmMDEzMTYuLmExMWJkODIxM2RmNCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkx NS9kaXNwbGF5L2ludGVsX2Rpc3BsYXlfcG93ZXIuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheV9wb3dlci5jCj4gQEAgLTQsNyArNCw2IEBACj4gICAq Lwo+ICAKPiAgI2luY2x1ZGUgImRpc3BsYXkvaW50ZWxfY3J0LmgiCj4gLSNpbmNsdWRlICJkaXNw bGF5L2ludGVsX2RwLmgiCj4gIAo+ICAjaW5jbHVkZSAiaTkxNV9kcnYuaCIKPiAgI2luY2x1ZGUg Imk5MTVfaXJxLmgiCj4gQEAgLTE2LDYgKzE1LDcgQEAKPiAgI2luY2x1ZGUgImludGVsX2RwaW9f cGh5LmgiCj4gICNpbmNsdWRlICJpbnRlbF9ob3RwbHVnLmgiCj4gICNpbmNsdWRlICJpbnRlbF9w bS5oIgo+ICsjaW5jbHVkZSAiaW50ZWxfcHBzLmgiCj4gICNpbmNsdWRlICJpbnRlbF9zaWRlYmFu ZC5oIgo+ICAjaW5jbHVkZSAiaW50ZWxfdGMuaCIKPiAgI2luY2x1ZGUgImludGVsX3ZnYS5oIgo+ IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2RwLmMgYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2RwLmMKPiBpbmRleCA0ZjE5MGE4MmQ0 YWQuLjA3Mjc5YjEwODEyZSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNw bGF5L2ludGVsX2RwLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVs X2RwLmMKPiBAQCAtNTgsNiArNTgsNyBAQAo+ICAjaW5jbHVkZSAiaW50ZWxfbHNwY29uLmgiCj4g ICNpbmNsdWRlICJpbnRlbF9sdmRzLmgiCj4gICNpbmNsdWRlICJpbnRlbF9wYW5lbC5oIgo+ICsj aW5jbHVkZSAiaW50ZWxfcHBzLmgiCj4gICNpbmNsdWRlICJpbnRlbF9wc3IuaCIKPiAgI2luY2x1 ZGUgImludGVsX3NpZGViYW5kLmgiCj4gICNpbmNsdWRlICJpbnRlbF90Yy5oIgo+IEBAIC0xMjEs NiArMTIyLDExIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHBfbGlua19kcGxsIGNodl9kcGxsW10g PSB7Cj4gIAkJeyAucDEgPSA0LCAucDIgPSAxLCAubiA9IDEsIC5tMSA9IDIsIC5tMiA9IDB4NmMw MDAwMCB9IH0sCj4gIH07Cj4gIAo+ICtjb25zdCBzdHJ1Y3QgZHBsbCAqdmx2X2dldF9kcGxsKHN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1KQo+ICt7Cj4gKwlyZXR1cm4gSVNfQ0hFUlJZVklF VyhpOTE1KSA/ICZjaHZfZHBsbFswXS5kcGxsIDogJnZsdl9kcGxsWzBdLmRwbGw7Cj4gK30KPiAr Cj4gIC8qIENvbnN0YW50cyBmb3IgRFAgRFNDIGNvbmZpZ3VyYXRpb25zICovCj4gIHN0YXRpYyBj b25zdCB1OCB2YWxpZF9kc2NfYnBwW10gPSB7NiwgOCwgMTAsIDEyLCAxNX07Cj4gIAo+IEBAIC0x NDUsMTIgKzE1MSw2IEBAIGJvb2wgaW50ZWxfZHBfaXNfZWRwKHN0cnVjdCBpbnRlbF9kcCAqaW50 ZWxfZHApCj4gIAo+ICBzdGF0aWMgdm9pZCBpbnRlbF9kcF9saW5rX2Rvd24oc3RydWN0IGludGVs X2VuY29kZXIgKmVuY29kZXIsCj4gIAkJCSAgICAgICBjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19z dGF0ZSAqb2xkX2NydGNfc3RhdGUpOwo+IC1zdGF0aWMgYm9vbCBlZHBfcGFuZWxfdmRkX29uKHN0 cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApOwo+IC1zdGF0aWMgdm9pZCBlZHBfcGFuZWxfdmRkX29m ZihzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwLCBib29sIHN5bmMpOwo+IC1zdGF0aWMgdm9pZCB2 bHZfaW5pdF9wYW5lbF9wb3dlcl9zZXF1ZW5jZXIoc3RydWN0IGludGVsX2VuY29kZXIgKmVuY29k ZXIsCj4gLQkJCQkJICAgY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUp Owo+IC1zdGF0aWMgdm9pZCB2bHZfc3RlYWxfcG93ZXJfc2VxdWVuY2VyKHN0cnVjdCBkcm1faTkx NV9wcml2YXRlICpkZXZfcHJpdiwKPiAtCQkJCSAgICAgIGVudW0gcGlwZSBwaXBlKTsKPiAgc3Rh dGljIHZvaWQgaW50ZWxfZHBfdW5zZXRfZWRpZChzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKTsK PiAgCj4gIC8qIHVwZGF0ZSBzaW5rIHJhdGVzIGZyb20gZHBjZCAqLwo+IEBAIC04NzcsNDQ3ICs4 NzcsNiBAQCBzdGF0aWMgdm9pZCBpbnRlbF9kcF91bnBhY2tfYXV4KHUzMiBzcmMsIHU4ICpkc3Qs IGludCBkc3RfYnl0ZXMpCj4gIAkJZHN0W2ldID0gc3JjID4+ICgoMy1pKSAqIDgpOwo+ICB9Cj4g IAo+IC1zdGF0aWMgdm9pZAo+IC1pbnRlbF9kcF9pbml0X3BhbmVsX3Bvd2VyX3NlcXVlbmNlcihz dHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKTsKPiAtc3RhdGljIHZvaWQKPiAtaW50ZWxfZHBfaW5p dF9wYW5lbF9wb3dlcl9zZXF1ZW5jZXJfcmVnaXN0ZXJzKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxf ZHAsCj4gLQkJCQkJICAgICAgYm9vbCBmb3JjZV9kaXNhYmxlX3ZkZCk7Cj4gLXN0YXRpYyB2b2lk Cj4gLWludGVsX2RwX3Bwc19pbml0KHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApOwo+IC0KPiAt c3RhdGljIGludGVsX3dha2VyZWZfdAo+IC1wcHNfbG9jayhzdHJ1Y3QgaW50ZWxfZHAgKmludGVs X2RwKQo+IC17Cj4gLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkcF90b19p OTE1KGludGVsX2RwKTsKPiAtCWludGVsX3dha2VyZWZfdCB3YWtlcmVmOwo+IC0KPiAtCS8qCj4g LQkgKiBTZWUgaW50ZWxfcG93ZXJfc2VxdWVuY2VyX3Jlc2V0KCkgd2h5IHdlIG5lZWQKPiAtCSAq IGEgcG93ZXIgZG9tYWluIHJlZmVyZW5jZSBoZXJlLgo+IC0JICovCj4gLQl3YWtlcmVmID0gaW50 ZWxfZGlzcGxheV9wb3dlcl9nZXQoZGV2X3ByaXYsIFBPV0VSX0RPTUFJTl9ESVNQTEFZX0NPUkUp Owo+IC0JbXV0ZXhfbG9jaygmZGV2X3ByaXYtPnBwc19tdXRleCk7Cj4gLQo+IC0JcmV0dXJuIHdh a2VyZWY7Cj4gLX0KPiAtCj4gLXN0YXRpYyBpbnRlbF93YWtlcmVmX3QKPiAtcHBzX3VubG9jayhz dHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwLCBpbnRlbF93YWtlcmVmX3Qgd2FrZXJlZikKPiAtewo+ IC0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZHBfdG9faTkxNShpbnRlbF9k cCk7Cj4gLQo+IC0JbXV0ZXhfdW5sb2NrKCZkZXZfcHJpdi0+cHBzX211dGV4KTsKPiAtCWludGVs X2Rpc3BsYXlfcG93ZXJfcHV0KGRldl9wcml2LCBQT1dFUl9ET01BSU5fRElTUExBWV9DT1JFLCB3 YWtlcmVmKTsKPiAtCXJldHVybiAwOwo+IC19Cj4gLQo+IC0jZGVmaW5lIHdpdGhfcHBzX2xvY2so ZHAsIHdmKSBcCj4gLQlmb3IgKCh3ZikgPSBwcHNfbG9jayhkcCk7ICh3Zik7ICh3ZikgPSBwcHNf dW5sb2NrKChkcCksICh3ZikpKQo+IC0KPiAtc3RhdGljIHZvaWQKPiAtdmx2X3Bvd2VyX3NlcXVl bmNlcl9raWNrKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApCj4gLXsKPiAtCXN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRwX3RvX2k5MTUoaW50ZWxfZHApOwo+IC0Jc3RydWN0 IGludGVsX2RpZ2l0YWxfcG9ydCAqZGlnX3BvcnQgPSBkcF90b19kaWdfcG9ydChpbnRlbF9kcCk7 Cj4gLQllbnVtIHBpcGUgcGlwZSA9IGludGVsX2RwLT5wcHNfcGlwZTsKPiAtCWJvb2wgcGxsX2Vu YWJsZWQsIHJlbGVhc2VfY2xfb3ZlcnJpZGUgPSBmYWxzZTsKPiAtCWVudW0gZHBpb19waHkgcGh5 ID0gRFBJT19QSFkocGlwZSk7Cj4gLQllbnVtIGRwaW9fY2hhbm5lbCBjaCA9IHZsdl9waXBlX3Rv X2NoYW5uZWwocGlwZSk7Cj4gLQl1MzIgRFA7Cj4gLQo+IC0JaWYgKGRybV9XQVJOKCZkZXZfcHJp di0+ZHJtLAo+IC0JCSAgICAgaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgaW50ZWxfZHAtPm91dHB1 dF9yZWcpICYgRFBfUE9SVF9FTiwKPiAtCQkgICAgICJza2lwcGluZyBwaXBlICVjIHBvd2VyIHNl cXVlbmNlciBraWNrIGR1ZSB0byBbRU5DT0RFUjolZDolc10gYmVpbmcgYWN0aXZlXG4iLAo+IC0J CSAgICAgcGlwZV9uYW1lKHBpcGUpLCBkaWdfcG9ydC0+YmFzZS5iYXNlLmJhc2UuaWQsCj4gLQkJ ICAgICBkaWdfcG9ydC0+YmFzZS5iYXNlLm5hbWUpKQo+IC0JCXJldHVybjsKPiAtCj4gLQlkcm1f ZGJnX2ttcygmZGV2X3ByaXYtPmRybSwKPiAtCQkgICAgImtpY2tpbmcgcGlwZSAlYyBwb3dlciBz ZXF1ZW5jZXIgZm9yIFtFTkNPREVSOiVkOiVzXVxuIiwKPiAtCQkgICAgcGlwZV9uYW1lKHBpcGUp LCBkaWdfcG9ydC0+YmFzZS5iYXNlLmJhc2UuaWQsCj4gLQkJICAgIGRpZ19wb3J0LT5iYXNlLmJh c2UubmFtZSk7Cj4gLQo+IC0JLyogUHJlc2VydmUgdGhlIEJJT1MtY29tcHV0ZWQgZGV0ZWN0ZWQg Yml0LiBUaGlzIGlzCj4gLQkgKiBzdXBwb3NlZCB0byBiZSByZWFkLW9ubHkuCj4gLQkgKi8KPiAt CURQID0gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgaW50ZWxfZHAtPm91dHB1dF9yZWcpICYgRFBf REVURUNURUQ7Cj4gLQlEUCB8PSBEUF9WT0xUQUdFXzBfNCB8IERQX1BSRV9FTVBIQVNJU18wOwo+ IC0JRFAgfD0gRFBfUE9SVF9XSURUSCgxKTsKPiAtCURQIHw9IERQX0xJTktfVFJBSU5fUEFUXzE7 Cj4gLQo+IC0JaWYgKElTX0NIRVJSWVZJRVcoZGV2X3ByaXYpKQo+IC0JCURQIHw9IERQX1BJUEVf U0VMX0NIVihwaXBlKTsKPiAtCWVsc2UKPiAtCQlEUCB8PSBEUF9QSVBFX1NFTChwaXBlKTsKPiAt Cj4gLQlwbGxfZW5hYmxlZCA9IGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIERQTEwocGlwZSkpICYg RFBMTF9WQ09fRU5BQkxFOwo+IC0KPiAtCS8qCj4gLQkgKiBUaGUgRFBMTCBmb3IgdGhlIHBpcGUg bXVzdCBiZSBlbmFibGVkIGZvciB0aGlzIHRvIHdvcmsuCj4gLQkgKiBTbyBlbmFibGUgdGVtcG9y YXJpbHkgaXQgaWYgaXQncyBub3QgYWxyZWFkeSBlbmFibGVkLgo+IC0JICovCj4gLQlpZiAoIXBs bF9lbmFibGVkKSB7Cj4gLQkJcmVsZWFzZV9jbF9vdmVycmlkZSA9IElTX0NIRVJSWVZJRVcoZGV2 X3ByaXYpICYmCj4gLQkJCSFjaHZfcGh5X3Bvd2VyZ2F0ZV9jaChkZXZfcHJpdiwgcGh5LCBjaCwg dHJ1ZSk7Cj4gLQo+IC0JCWlmICh2bHZfZm9yY2VfcGxsX29uKGRldl9wcml2LCBwaXBlLCBJU19D SEVSUllWSUVXKGRldl9wcml2KSA/Cj4gLQkJCQkgICAgICZjaHZfZHBsbFswXS5kcGxsIDogJnZs dl9kcGxsWzBdLmRwbGwpKSB7Cj4gLQkJCWRybV9lcnIoJmRldl9wcml2LT5kcm0sCj4gLQkJCQki RmFpbGVkIHRvIGZvcmNlIG9uIHBsbCBmb3IgcGlwZSAlYyFcbiIsCj4gLQkJCQlwaXBlX25hbWUo cGlwZSkpOwo+IC0JCQlyZXR1cm47Cj4gLQkJfQo+IC0JfQo+IC0KPiAtCS8qCj4gLQkgKiBTaW1p bGFyIG1hZ2ljIGFzIGluIGludGVsX2RwX2VuYWJsZV9wb3J0KCkuCj4gLQkgKiBXZSBfbXVzdF8g ZG8gdGhpcyBwb3J0IGVuYWJsZSArIGRpc2FibGUgdHJpY2sKPiAtCSAqIHRvIG1ha2UgdGhpcyBw b3dlciBzZXF1ZW5jZXIgbG9jayBvbnRvIHRoZSBwb3J0Lgo+IC0JICogT3RoZXJ3aXNlIGV2ZW4g VkREIGZvcmNlIGJpdCB3b24ndCB3b3JrLgo+IC0JICovCj4gLQlpbnRlbF9kZV93cml0ZShkZXZf cHJpdiwgaW50ZWxfZHAtPm91dHB1dF9yZWcsIERQKTsKPiAtCWludGVsX2RlX3Bvc3RpbmdfcmVh ZChkZXZfcHJpdiwgaW50ZWxfZHAtPm91dHB1dF9yZWcpOwo+IC0KPiAtCWludGVsX2RlX3dyaXRl KGRldl9wcml2LCBpbnRlbF9kcC0+b3V0cHV0X3JlZywgRFAgfCBEUF9QT1JUX0VOKTsKPiAtCWlu dGVsX2RlX3Bvc3RpbmdfcmVhZChkZXZfcHJpdiwgaW50ZWxfZHAtPm91dHB1dF9yZWcpOwo+IC0K PiAtCWludGVsX2RlX3dyaXRlKGRldl9wcml2LCBpbnRlbF9kcC0+b3V0cHV0X3JlZywgRFAgJiB+ RFBfUE9SVF9FTik7Cj4gLQlpbnRlbF9kZV9wb3N0aW5nX3JlYWQoZGV2X3ByaXYsIGludGVsX2Rw LT5vdXRwdXRfcmVnKTsKPiAtCj4gLQlpZiAoIXBsbF9lbmFibGVkKSB7Cj4gLQkJdmx2X2ZvcmNl X3BsbF9vZmYoZGV2X3ByaXYsIHBpcGUpOwo+IC0KPiAtCQlpZiAocmVsZWFzZV9jbF9vdmVycmlk ZSkKPiAtCQkJY2h2X3BoeV9wb3dlcmdhdGVfY2goZGV2X3ByaXYsIHBoeSwgY2gsIGZhbHNlKTsK PiAtCX0KPiAtfQo+IC0KPiAtc3RhdGljIGVudW0gcGlwZSB2bHZfZmluZF9mcmVlX3BwcyhzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4gLXsKPiAtCXN0cnVjdCBpbnRlbF9lbmNv ZGVyICplbmNvZGVyOwo+IC0JdW5zaWduZWQgaW50IHBpcGVzID0gKDEgPDwgUElQRV9BKSB8ICgx IDw8IFBJUEVfQik7Cj4gLQo+IC0JLyoKPiAtCSAqIFdlIGRvbid0IGhhdmUgcG93ZXIgc2VxdWVu Y2VyIGN1cnJlbnRseS4KPiAtCSAqIFBpY2sgb25lIHRoYXQncyBub3QgdXNlZCBieSBvdGhlciBw b3J0cy4KPiAtCSAqLwo+IC0JZm9yX2VhY2hfaW50ZWxfZHAoJmRldl9wcml2LT5kcm0sIGVuY29k ZXIpIHsKPiAtCQlzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwID0gZW5jX3RvX2ludGVsX2RwKGVu Y29kZXIpOwo+IC0KPiAtCQlpZiAoZW5jb2Rlci0+dHlwZSA9PSBJTlRFTF9PVVRQVVRfRURQKSB7 Cj4gLQkJCWRybV9XQVJOX09OKCZkZXZfcHJpdi0+ZHJtLAo+IC0JCQkJICAgIGludGVsX2RwLT5h Y3RpdmVfcGlwZSAhPSBJTlZBTElEX1BJUEUgJiYKPiAtCQkJCSAgICBpbnRlbF9kcC0+YWN0aXZl X3BpcGUgIT0KPiAtCQkJCSAgICBpbnRlbF9kcC0+cHBzX3BpcGUpOwo+IC0KPiAtCQkJaWYgKGlu dGVsX2RwLT5wcHNfcGlwZSAhPSBJTlZBTElEX1BJUEUpCj4gLQkJCQlwaXBlcyAmPSB+KDEgPDwg aW50ZWxfZHAtPnBwc19waXBlKTsKPiAtCQl9IGVsc2Ugewo+IC0JCQlkcm1fV0FSTl9PTigmZGV2 X3ByaXYtPmRybSwKPiAtCQkJCSAgICBpbnRlbF9kcC0+cHBzX3BpcGUgIT0gSU5WQUxJRF9QSVBF KTsKPiAtCj4gLQkJCWlmIChpbnRlbF9kcC0+YWN0aXZlX3BpcGUgIT0gSU5WQUxJRF9QSVBFKQo+ IC0JCQkJcGlwZXMgJj0gfigxIDw8IGludGVsX2RwLT5hY3RpdmVfcGlwZSk7Cj4gLQkJfQo+IC0J fQo+IC0KPiAtCWlmIChwaXBlcyA9PSAwKQo+IC0JCXJldHVybiBJTlZBTElEX1BJUEU7Cj4gLQo+ IC0JcmV0dXJuIGZmcyhwaXBlcykgLSAxOwo+IC19Cj4gLQo+IC1zdGF0aWMgZW51bSBwaXBlCj4g LXZsdl9wb3dlcl9zZXF1ZW5jZXJfcGlwZShzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKQo+IC17 Cj4gLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkcF90b19pOTE1KGludGVs X2RwKTsKPiAtCXN0cnVjdCBpbnRlbF9kaWdpdGFsX3BvcnQgKmRpZ19wb3J0ID0gZHBfdG9fZGln X3BvcnQoaW50ZWxfZHApOwo+IC0JZW51bSBwaXBlIHBpcGU7Cj4gLQo+IC0JbG9ja2RlcF9hc3Nl cnRfaGVsZCgmZGV2X3ByaXYtPnBwc19tdXRleCk7Cj4gLQo+IC0JLyogV2Ugc2hvdWxkIG5ldmVy IGxhbmQgaGVyZSB3aXRoIHJlZ3VsYXIgRFAgcG9ydHMgKi8KPiAtCWRybV9XQVJOX09OKCZkZXZf cHJpdi0+ZHJtLCAhaW50ZWxfZHBfaXNfZWRwKGludGVsX2RwKSk7Cj4gLQo+IC0JZHJtX1dBUk5f T04oJmRldl9wcml2LT5kcm0sIGludGVsX2RwLT5hY3RpdmVfcGlwZSAhPSBJTlZBTElEX1BJUEUg JiYKPiAtCQkgICAgaW50ZWxfZHAtPmFjdGl2ZV9waXBlICE9IGludGVsX2RwLT5wcHNfcGlwZSk7 Cj4gLQo+IC0JaWYgKGludGVsX2RwLT5wcHNfcGlwZSAhPSBJTlZBTElEX1BJUEUpCj4gLQkJcmV0 dXJuIGludGVsX2RwLT5wcHNfcGlwZTsKPiAtCj4gLQlwaXBlID0gdmx2X2ZpbmRfZnJlZV9wcHMo ZGV2X3ByaXYpOwo+IC0KPiAtCS8qCj4gLQkgKiBEaWRuJ3QgZmluZCBvbmUuIFRoaXMgc2hvdWxk IG5vdCBoYXBwZW4gc2luY2UgdGhlcmUKPiAtCSAqIGFyZSB0d28gcG93ZXIgc2VxdWVuY2VycyBh bmQgdXAgdG8gdHdvIGVEUCBwb3J0cy4KPiAtCSAqLwo+IC0JaWYgKGRybV9XQVJOX09OKCZkZXZf cHJpdi0+ZHJtLCBwaXBlID09IElOVkFMSURfUElQRSkpCj4gLQkJcGlwZSA9IFBJUEVfQTsKPiAt Cj4gLQl2bHZfc3RlYWxfcG93ZXJfc2VxdWVuY2VyKGRldl9wcml2LCBwaXBlKTsKPiAtCWludGVs X2RwLT5wcHNfcGlwZSA9IHBpcGU7Cj4gLQo+IC0JZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0s Cj4gLQkJICAgICJwaWNrZWQgcGlwZSAlYyBwb3dlciBzZXF1ZW5jZXIgZm9yIFtFTkNPREVSOiVk OiVzXVxuIiwKPiAtCQkgICAgcGlwZV9uYW1lKGludGVsX2RwLT5wcHNfcGlwZSksCj4gLQkJICAg IGRpZ19wb3J0LT5iYXNlLmJhc2UuYmFzZS5pZCwKPiAtCQkgICAgZGlnX3BvcnQtPmJhc2UuYmFz ZS5uYW1lKTsKPiAtCj4gLQkvKiBpbml0IHBvd2VyIHNlcXVlbmNlciBvbiB0aGlzIHBpcGUgYW5k IHBvcnQgKi8KPiAtCWludGVsX2RwX2luaXRfcGFuZWxfcG93ZXJfc2VxdWVuY2VyKGludGVsX2Rw KTsKPiAtCWludGVsX2RwX2luaXRfcGFuZWxfcG93ZXJfc2VxdWVuY2VyX3JlZ2lzdGVycyhpbnRl bF9kcCwgdHJ1ZSk7Cj4gLQo+IC0JLyoKPiAtCSAqIEV2ZW4gdmRkIGZvcmNlIGRvZXNuJ3Qgd29y ayB1bnRpbCB3ZSd2ZSBtYWRlCj4gLQkgKiB0aGUgcG93ZXIgc2VxdWVuY2VyIGxvY2sgaW4gb24g dGhlIHBvcnQuCj4gLQkgKi8KPiAtCXZsdl9wb3dlcl9zZXF1ZW5jZXJfa2ljayhpbnRlbF9kcCk7 Cj4gLQo+IC0JcmV0dXJuIGludGVsX2RwLT5wcHNfcGlwZTsKPiAtfQo+IC0KPiAtc3RhdGljIGlu dAo+IC1ieHRfcG93ZXJfc2VxdWVuY2VyX2lkeChzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKQo+ IC17Cj4gLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkcF90b19pOTE1KGlu dGVsX2RwKTsKPiAtCWludCBiYWNrbGlnaHRfY29udHJvbGxlciA9IGRldl9wcml2LT52YnQuYmFj a2xpZ2h0LmNvbnRyb2xsZXI7Cj4gLQo+IC0JbG9ja2RlcF9hc3NlcnRfaGVsZCgmZGV2X3ByaXYt PnBwc19tdXRleCk7Cj4gLQo+IC0JLyogV2Ugc2hvdWxkIG5ldmVyIGxhbmQgaGVyZSB3aXRoIHJl Z3VsYXIgRFAgcG9ydHMgKi8KPiAtCWRybV9XQVJOX09OKCZkZXZfcHJpdi0+ZHJtLCAhaW50ZWxf ZHBfaXNfZWRwKGludGVsX2RwKSk7Cj4gLQo+IC0JaWYgKCFpbnRlbF9kcC0+cHBzX3Jlc2V0KQo+ IC0JCXJldHVybiBiYWNrbGlnaHRfY29udHJvbGxlcjsKPiAtCj4gLQlpbnRlbF9kcC0+cHBzX3Jl c2V0ID0gZmFsc2U7Cj4gLQo+IC0JLyoKPiAtCSAqIE9ubHkgdGhlIEhXIG5lZWRzIHRvIGJlIHJl cHJvZ3JhbW1lZCwgdGhlIFNXIHN0YXRlIGlzIGZpeGVkIGFuZAo+IC0JICogaGFzIGJlZW4gc2V0 dXAgZHVyaW5nIGNvbm5lY3RvciBpbml0Lgo+IC0JICovCj4gLQlpbnRlbF9kcF9pbml0X3BhbmVs X3Bvd2VyX3NlcXVlbmNlcl9yZWdpc3RlcnMoaW50ZWxfZHAsIGZhbHNlKTsKPiAtCj4gLQlyZXR1 cm4gYmFja2xpZ2h0X2NvbnRyb2xsZXI7Cj4gLX0KPiAtCj4gLXR5cGVkZWYgYm9vbCAoKnZsdl9w aXBlX2NoZWNrKShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4gLQkJCSAgICAg ICBlbnVtIHBpcGUgcGlwZSk7Cj4gLQo+IC1zdGF0aWMgYm9vbCB2bHZfcGlwZV9oYXNfcHBfb24o c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+IC0JCQkgICAgICAgZW51bSBwaXBl IHBpcGUpCj4gLXsKPiAtCXJldHVybiBpbnRlbF9kZV9yZWFkKGRldl9wcml2LCBQUF9TVEFUVVMo cGlwZSkpICYgUFBfT047Cj4gLX0KPiAtCj4gLXN0YXRpYyBib29sIHZsdl9waXBlX2hhc192ZGRf b24oc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+IC0JCQkJZW51bSBwaXBlIHBp cGUpCj4gLXsKPiAtCXJldHVybiBpbnRlbF9kZV9yZWFkKGRldl9wcml2LCBQUF9DT05UUk9MKHBp cGUpKSAmIEVEUF9GT1JDRV9WREQ7Cj4gLX0KPiAtCj4gLXN0YXRpYyBib29sIHZsdl9waXBlX2Fu eShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4gLQkJCSBlbnVtIHBpcGUgcGlw ZSkKPiAtewo+IC0JcmV0dXJuIHRydWU7Cj4gLX0KPiAtCj4gLXN0YXRpYyBlbnVtIHBpcGUKPiAt dmx2X2luaXRpYWxfcHBzX3BpcGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+ IC0JCSAgICAgZW51bSBwb3J0IHBvcnQsCj4gLQkJICAgICB2bHZfcGlwZV9jaGVjayBwaXBlX2No ZWNrKQo+IC17Cj4gLQllbnVtIHBpcGUgcGlwZTsKPiAtCj4gLQlmb3IgKHBpcGUgPSBQSVBFX0E7 IHBpcGUgPD0gUElQRV9COyBwaXBlKyspIHsKPiAtCQl1MzIgcG9ydF9zZWwgPSBpbnRlbF9kZV9y ZWFkKGRldl9wcml2LCBQUF9PTl9ERUxBWVMocGlwZSkpICYKPiAtCQkJUEFORUxfUE9SVF9TRUxF Q1RfTUFTSzsKPiAtCj4gLQkJaWYgKHBvcnRfc2VsICE9IFBBTkVMX1BPUlRfU0VMRUNUX1ZMVihw b3J0KSkKPiAtCQkJY29udGludWU7Cj4gLQo+IC0JCWlmICghcGlwZV9jaGVjayhkZXZfcHJpdiwg cGlwZSkpCj4gLQkJCWNvbnRpbnVlOwo+IC0KPiAtCQlyZXR1cm4gcGlwZTsKPiAtCX0KPiAtCj4g LQlyZXR1cm4gSU5WQUxJRF9QSVBFOwo+IC19Cj4gLQo+IC1zdGF0aWMgdm9pZAo+IC12bHZfaW5p dGlhbF9wb3dlcl9zZXF1ZW5jZXJfc2V0dXAoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCkKPiAt ewo+IC0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZHBfdG9faTkxNShpbnRl bF9kcCk7Cj4gLQlzdHJ1Y3QgaW50ZWxfZGlnaXRhbF9wb3J0ICpkaWdfcG9ydCA9IGRwX3RvX2Rp Z19wb3J0KGludGVsX2RwKTsKPiAtCWVudW0gcG9ydCBwb3J0ID0gZGlnX3BvcnQtPmJhc2UucG9y dDsKPiAtCj4gLQlsb2NrZGVwX2Fzc2VydF9oZWxkKCZkZXZfcHJpdi0+cHBzX211dGV4KTsKPiAt Cj4gLQkvKiB0cnkgdG8gZmluZCBhIHBpcGUgd2l0aCB0aGlzIHBvcnQgc2VsZWN0ZWQgKi8KPiAt CS8qIGZpcnN0IHBpY2sgb25lIHdoZXJlIHRoZSBwYW5lbCBpcyBvbiAqLwo+IC0JaW50ZWxfZHAt PnBwc19waXBlID0gdmx2X2luaXRpYWxfcHBzX3BpcGUoZGV2X3ByaXYsIHBvcnQsCj4gLQkJCQkJ CSAgdmx2X3BpcGVfaGFzX3BwX29uKTsKPiAtCS8qIGRpZG4ndCBmaW5kIG9uZT8gcGljayBvbmUg d2hlcmUgdmRkIGlzIG9uICovCj4gLQlpZiAoaW50ZWxfZHAtPnBwc19waXBlID09IElOVkFMSURf UElQRSkKPiAtCQlpbnRlbF9kcC0+cHBzX3BpcGUgPSB2bHZfaW5pdGlhbF9wcHNfcGlwZShkZXZf cHJpdiwgcG9ydCwKPiAtCQkJCQkJCSAgdmx2X3BpcGVfaGFzX3ZkZF9vbik7Cj4gLQkvKiBkaWRu J3QgZmluZCBvbmU/IHBpY2sgb25lIHdpdGgganVzdCB0aGUgY29ycmVjdCBwb3J0ICovCj4gLQlp ZiAoaW50ZWxfZHAtPnBwc19waXBlID09IElOVkFMSURfUElQRSkKPiAtCQlpbnRlbF9kcC0+cHBz X3BpcGUgPSB2bHZfaW5pdGlhbF9wcHNfcGlwZShkZXZfcHJpdiwgcG9ydCwKPiAtCQkJCQkJCSAg dmx2X3BpcGVfYW55KTsKPiAtCj4gLQkvKiBkaWRuJ3QgZmluZCBvbmU/IGp1c3QgbGV0IHZsdl9w b3dlcl9zZXF1ZW5jZXJfcGlwZSgpIHBpY2sgb25lIHdoZW4gbmVlZGVkICovCj4gLQlpZiAoaW50 ZWxfZHAtPnBwc19waXBlID09IElOVkFMSURfUElQRSkgewo+IC0JCWRybV9kYmdfa21zKCZkZXZf cHJpdi0+ZHJtLAo+IC0JCQkgICAgIm5vIGluaXRpYWwgcG93ZXIgc2VxdWVuY2VyIGZvciBbRU5D T0RFUjolZDolc11cbiIsCj4gLQkJCSAgICBkaWdfcG9ydC0+YmFzZS5iYXNlLmJhc2UuaWQsCj4g LQkJCSAgICBkaWdfcG9ydC0+YmFzZS5iYXNlLm5hbWUpOwo+IC0JCXJldHVybjsKPiAtCX0KPiAt Cj4gLQlkcm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwKPiAtCQkgICAgImluaXRpYWwgcG93ZXIg c2VxdWVuY2VyIGZvciBbRU5DT0RFUjolZDolc106IHBpcGUgJWNcbiIsCj4gLQkJICAgIGRpZ19w b3J0LT5iYXNlLmJhc2UuYmFzZS5pZCwKPiAtCQkgICAgZGlnX3BvcnQtPmJhc2UuYmFzZS5uYW1l LAo+IC0JCSAgICBwaXBlX25hbWUoaW50ZWxfZHAtPnBwc19waXBlKSk7Cj4gLQo+IC0JaW50ZWxf ZHBfaW5pdF9wYW5lbF9wb3dlcl9zZXF1ZW5jZXIoaW50ZWxfZHApOwo+IC0JaW50ZWxfZHBfaW5p dF9wYW5lbF9wb3dlcl9zZXF1ZW5jZXJfcmVnaXN0ZXJzKGludGVsX2RwLCBmYWxzZSk7Cj4gLX0K PiAtCj4gLXZvaWQgaW50ZWxfcG93ZXJfc2VxdWVuY2VyX3Jlc2V0KHN0cnVjdCBkcm1faTkxNV9w cml2YXRlICpkZXZfcHJpdikKPiAtewo+IC0Jc3RydWN0IGludGVsX2VuY29kZXIgKmVuY29kZXI7 Cj4gLQo+IC0JaWYgKGRybV9XQVJOX09OKCZkZXZfcHJpdi0+ZHJtLAo+IC0JCQkhKElTX1ZBTExF WVZJRVcoZGV2X3ByaXYpIHx8Cj4gLQkJCSAgSVNfQ0hFUlJZVklFVyhkZXZfcHJpdikgfHwKPiAt CQkJICBJU19HRU45X0xQKGRldl9wcml2KSkpKQo+IC0JCXJldHVybjsKPiAtCj4gLQkvKgo+IC0J ICogV2UgY2FuJ3QgZ3JhYiBwcHNfbXV0ZXggaGVyZSBkdWUgdG8gZGVhZGxvY2sgd2l0aCBwb3dl cl9kb21haW4KPiAtCSAqIG11dGV4IHdoZW4gcG93ZXJfZG9tYWluIGZ1bmN0aW9ucyBhcmUgY2Fs bGVkIHdoaWxlIGhvbGRpbmcgcHBzX211dGV4Lgo+IC0JICogVGhhdCBhbHNvIG1lYW5zIHRoYXQg aW4gb3JkZXIgdG8gdXNlIHBwc19waXBlIHRoZSBjb2RlIG5lZWRzIHRvCj4gLQkgKiBob2xkIGJv dGggYSBwb3dlciBkb21haW4gcmVmZXJlbmNlIGFuZCBwcHNfbXV0ZXgsIGFuZCB0aGUgcG93ZXIg ZG9tYWluCj4gLQkgKiByZWZlcmVuY2UgZ2V0L3B1dCBtdXN0IGJlIGRvbmUgd2hpbGUgX25vdF8g aG9sZGluZyBwcHNfbXV0ZXguCj4gLQkgKiBwcHNfe2xvY2ssdW5sb2NrfSgpIGRvIHRoZXNlIHN0 ZXBzIGluIHRoZSBjb3JyZWN0IG9yZGVyLCBzbyBvbmUKPiAtCSAqIHNob3VsZCB1c2UgdGhlbSBh bHdheXMuCj4gLQkgKi8KPiAtCj4gLQlmb3JfZWFjaF9pbnRlbF9kcCgmZGV2X3ByaXYtPmRybSwg ZW5jb2Rlcikgewo+IC0JCXN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAgPSBlbmNfdG9faW50ZWxf ZHAoZW5jb2Rlcik7Cj4gLQo+IC0JCWRybV9XQVJOX09OKCZkZXZfcHJpdi0+ZHJtLAo+IC0JCQkg ICAgaW50ZWxfZHAtPmFjdGl2ZV9waXBlICE9IElOVkFMSURfUElQRSk7Cj4gLQo+IC0JCWlmIChl bmNvZGVyLT50eXBlICE9IElOVEVMX09VVFBVVF9FRFApCj4gLQkJCWNvbnRpbnVlOwo+IC0KPiAt CQlpZiAoSVNfR0VOOV9MUChkZXZfcHJpdikpCj4gLQkJCWludGVsX2RwLT5wcHNfcmVzZXQgPSB0 cnVlOwo+IC0JCWVsc2UKPiAtCQkJaW50ZWxfZHAtPnBwc19waXBlID0gSU5WQUxJRF9QSVBFOwo+ IC0JfQo+IC19Cj4gLQo+IC1zdHJ1Y3QgcHBzX3JlZ2lzdGVycyB7Cj4gLQlpOTE1X3JlZ190IHBw X2N0cmw7Cj4gLQlpOTE1X3JlZ190IHBwX3N0YXQ7Cj4gLQlpOTE1X3JlZ190IHBwX29uOwo+IC0J aTkxNV9yZWdfdCBwcF9vZmY7Cj4gLQlpOTE1X3JlZ190IHBwX2RpdjsKPiAtfTsKPiAtCj4gLXN0 YXRpYyB2b2lkIGludGVsX3Bwc19nZXRfcmVnaXN0ZXJzKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxf ZHAsCj4gLQkJCQkgICAgc3RydWN0IHBwc19yZWdpc3RlcnMgKnJlZ3MpCj4gLXsKPiAtCXN0cnVj dCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRwX3RvX2k5MTUoaW50ZWxfZHApOwo+IC0J aW50IHBwc19pZHggPSAwOwo+IC0KPiAtCW1lbXNldChyZWdzLCAwLCBzaXplb2YoKnJlZ3MpKTsK PiAtCj4gLQlpZiAoSVNfR0VOOV9MUChkZXZfcHJpdikpCj4gLQkJcHBzX2lkeCA9IGJ4dF9wb3dl cl9zZXF1ZW5jZXJfaWR4KGludGVsX2RwKTsKPiAtCWVsc2UgaWYgKElTX1ZBTExFWVZJRVcoZGV2 X3ByaXYpIHx8IElTX0NIRVJSWVZJRVcoZGV2X3ByaXYpKQo+IC0JCXBwc19pZHggPSB2bHZfcG93 ZXJfc2VxdWVuY2VyX3BpcGUoaW50ZWxfZHApOwo+IC0KPiAtCXJlZ3MtPnBwX2N0cmwgPSBQUF9D T05UUk9MKHBwc19pZHgpOwo+IC0JcmVncy0+cHBfc3RhdCA9IFBQX1NUQVRVUyhwcHNfaWR4KTsK PiAtCXJlZ3MtPnBwX29uID0gUFBfT05fREVMQVlTKHBwc19pZHgpOwo+IC0JcmVncy0+cHBfb2Zm ID0gUFBfT0ZGX0RFTEFZUyhwcHNfaWR4KTsKPiAtCj4gLQkvKiBDeWNsZSBkZWxheSBtb3ZlZCBm cm9tIFBQX0RJVklTT1IgdG8gUFBfQ09OVFJPTCAqLwo+IC0JaWYgKElTX0dFTjlfTFAoZGV2X3By aXYpIHx8IElOVEVMX1BDSF9UWVBFKGRldl9wcml2KSA+PSBQQ0hfQ05QKQo+IC0JCXJlZ3MtPnBw X2RpdiA9IElOVkFMSURfTU1JT19SRUc7Cj4gLQllbHNlCj4gLQkJcmVncy0+cHBfZGl2ID0gUFBf RElWSVNPUihwcHNfaWR4KTsKPiAtfQo+IC0KPiAtc3RhdGljIGk5MTVfcmVnX3QKPiAtX3BwX2N0 cmxfcmVnKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApCj4gLXsKPiAtCXN0cnVjdCBwcHNfcmVn aXN0ZXJzIHJlZ3M7Cj4gLQo+IC0JaW50ZWxfcHBzX2dldF9yZWdpc3RlcnMoaW50ZWxfZHAsICZy ZWdzKTsKPiAtCj4gLQlyZXR1cm4gcmVncy5wcF9jdHJsOwo+IC19Cj4gLQo+IC1zdGF0aWMgaTkx NV9yZWdfdAo+IC1fcHBfc3RhdF9yZWcoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCkKPiAtewo+ IC0Jc3RydWN0IHBwc19yZWdpc3RlcnMgcmVnczsKPiAtCj4gLQlpbnRlbF9wcHNfZ2V0X3JlZ2lz dGVycyhpbnRlbF9kcCwgJnJlZ3MpOwo+IC0KPiAtCXJldHVybiByZWdzLnBwX3N0YXQ7Cj4gLX0K PiAtCj4gLXN0YXRpYyBib29sIGVkcF9oYXZlX3BhbmVsX3Bvd2VyKHN0cnVjdCBpbnRlbF9kcCAq aW50ZWxfZHApCj4gLXsKPiAtCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRw X3RvX2k5MTUoaW50ZWxfZHApOwo+IC0KPiAtCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmRldl9wcml2 LT5wcHNfbXV0ZXgpOwo+IC0KPiAtCWlmICgoSVNfVkFMTEVZVklFVyhkZXZfcHJpdikgfHwgSVNf Q0hFUlJZVklFVyhkZXZfcHJpdikpICYmCj4gLQkgICAgaW50ZWxfZHAtPnBwc19waXBlID09IElO VkFMSURfUElQRSkKPiAtCQlyZXR1cm4gZmFsc2U7Cj4gLQo+IC0JcmV0dXJuIChpbnRlbF9kZV9y ZWFkKGRldl9wcml2LCBfcHBfc3RhdF9yZWcoaW50ZWxfZHApKSAmIFBQX09OKSAhPSAwOwo+IC19 Cj4gLQo+IC1zdGF0aWMgYm9vbCBlZHBfaGF2ZV9wYW5lbF92ZGQoc3RydWN0IGludGVsX2RwICpp bnRlbF9kcCkKPiAtewo+IC0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZHBf dG9faTkxNShpbnRlbF9kcCk7Cj4gLQo+IC0JbG9ja2RlcF9hc3NlcnRfaGVsZCgmZGV2X3ByaXYt PnBwc19tdXRleCk7Cj4gLQo+IC0JaWYgKChJU19WQUxMRVlWSUVXKGRldl9wcml2KSB8fCBJU19D SEVSUllWSUVXKGRldl9wcml2KSkgJiYKPiAtCSAgICBpbnRlbF9kcC0+cHBzX3BpcGUgPT0gSU5W QUxJRF9QSVBFKQo+IC0JCXJldHVybiBmYWxzZTsKPiAtCj4gLQlyZXR1cm4gaW50ZWxfZGVfcmVh ZChkZXZfcHJpdiwgX3BwX2N0cmxfcmVnKGludGVsX2RwKSkgJiBFRFBfRk9SQ0VfVkREOwo+IC19 Cj4gLQo+IC1zdGF0aWMgdm9pZAo+IC1pbnRlbF9kcF9jaGVja19lZHAoc3RydWN0IGludGVsX2Rw ICppbnRlbF9kcCkKPiAtewo+IC0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0g ZHBfdG9faTkxNShpbnRlbF9kcCk7Cj4gLQo+IC0JaWYgKCFpbnRlbF9kcF9pc19lZHAoaW50ZWxf ZHApKQo+IC0JCXJldHVybjsKPiAtCj4gLQlpZiAoIWVkcF9oYXZlX3BhbmVsX3Bvd2VyKGludGVs X2RwKSAmJiAhZWRwX2hhdmVfcGFuZWxfdmRkKGludGVsX2RwKSkgewo+IC0JCWRybV9XQVJOKCZk ZXZfcHJpdi0+ZHJtLCAxLAo+IC0JCQkgImVEUCBwb3dlcmVkIG9mZiB3aGlsZSBhdHRlbXB0aW5n IGF1eCBjaGFubmVsIGNvbW11bmljYXRpb24uXG4iKTsKPiAtCQlkcm1fZGJnX2ttcygmZGV2X3By aXYtPmRybSwgIlN0YXR1cyAweCUwOHggQ29udHJvbCAweCUwOHhcbiIsCj4gLQkJCSAgICBpbnRl bF9kZV9yZWFkKGRldl9wcml2LCBfcHBfc3RhdF9yZWcoaW50ZWxfZHApKSwKPiAtCQkJICAgIGlu dGVsX2RlX3JlYWQoZGV2X3ByaXYsIF9wcF9jdHJsX3JlZyhpbnRlbF9kcCkpKTsKPiAtCX0KPiAt fQo+IC0KPiAgc3RhdGljIHUzMgo+ICBpbnRlbF9kcF9hdXhfd2FpdF9kb25lKHN0cnVjdCBpbnRl bF9kcCAqaW50ZWxfZHApCj4gIHsKPiBAQCAtMjkzMSw0OTEgKzI0OTAsNjYgQEAgc3RhdGljIHZv aWQgaW50ZWxfZHBfcHJlcGFyZShzdHJ1Y3QgaW50ZWxfZW5jb2RlciAqZW5jb2RlciwKPiAgCSAq IElCWCBQQ0ggYW5kIENQVSBhcmUgdGhlIHNhbWUgZm9yIGFsbW9zdCBldmVyeXRoaW5nLAo+ICAJ ICogZXhjZXB0IHRoYXQgdGhlIENQVSBEUCBQTEwgaXMgY29uZmlndXJlZCBpbiB0aGlzCj4gIAkg KiByZWdpc3Rlcgo+IC0JICoKPiAtCSAqIENQVCBQQ0ggaXMgcXVpdGUgZGlmZmVyZW50LCBoYXZp bmcgbWFueSBiaXRzIG1vdmVkCj4gLQkgKiB0byB0aGUgVFJBTlNfRFBfQ1RMIHJlZ2lzdGVyIGlu c3RlYWQuIFRoYXQKPiAtCSAqIGNvbmZpZ3VyYXRpb24gaGFwcGVucyAob2RkbHkpIGluIGlsa19w Y2hfZW5hYmxlCj4gLQkgKi8KPiAtCj4gLQkvKiBQcmVzZXJ2ZSB0aGUgQklPUy1jb21wdXRlZCBk ZXRlY3RlZCBiaXQuIFRoaXMgaXMKPiAtCSAqIHN1cHBvc2VkIHRvIGJlIHJlYWQtb25seS4KPiAt CSAqLwo+IC0JaW50ZWxfZHAtPkRQID0gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgaW50ZWxfZHAt Pm91dHB1dF9yZWcpICYgRFBfREVURUNURUQ7Cj4gLQo+IC0JLyogSGFuZGxlIERQIGJpdHMgaW4g Y29tbW9uIGJldHdlZW4gYWxsIHRocmVlIHJlZ2lzdGVyIGZvcm1hdHMgKi8KPiAtCWludGVsX2Rw LT5EUCB8PSBEUF9WT0xUQUdFXzBfNCB8IERQX1BSRV9FTVBIQVNJU18wOwo+IC0JaW50ZWxfZHAt PkRQIHw9IERQX1BPUlRfV0lEVEgocGlwZV9jb25maWctPmxhbmVfY291bnQpOwo+IC0KPiAtCS8q IFNwbGl0IG91dCB0aGUgSUJYL0NQVSB2cyBDUFQgc2V0dGluZ3MgKi8KPiAtCj4gLQlpZiAoSVNf SVZZQlJJREdFKGRldl9wcml2KSAmJiBwb3J0ID09IFBPUlRfQSkgewo+IC0JCWlmIChhZGp1c3Rl ZF9tb2RlLT5mbGFncyAmIERSTV9NT0RFX0ZMQUdfUEhTWU5DKQo+IC0JCQlpbnRlbF9kcC0+RFAg fD0gRFBfU1lOQ19IU19ISUdIOwo+IC0JCWlmIChhZGp1c3RlZF9tb2RlLT5mbGFncyAmIERSTV9N T0RFX0ZMQUdfUFZTWU5DKQo+IC0JCQlpbnRlbF9kcC0+RFAgfD0gRFBfU1lOQ19WU19ISUdIOwo+ IC0JCWludGVsX2RwLT5EUCB8PSBEUF9MSU5LX1RSQUlOX09GRl9DUFQ7Cj4gLQo+IC0JCWlmIChk cm1fZHBfZW5oYW5jZWRfZnJhbWVfY2FwKGludGVsX2RwLT5kcGNkKSkKPiAtCQkJaW50ZWxfZHAt PkRQIHw9IERQX0VOSEFOQ0VEX0ZSQU1JTkc7Cj4gLQo+IC0JCWludGVsX2RwLT5EUCB8PSBEUF9Q SVBFX1NFTF9JVkIoY3J0Yy0+cGlwZSk7Cj4gLQl9IGVsc2UgaWYgKEhBU19QQ0hfQ1BUKGRldl9w cml2KSAmJiBwb3J0ICE9IFBPUlRfQSkgewo+IC0JCXUzMiB0cmFuc19kcDsKPiAtCj4gLQkJaW50 ZWxfZHAtPkRQIHw9IERQX0xJTktfVFJBSU5fT0ZGX0NQVDsKPiAtCj4gLQkJdHJhbnNfZHAgPSBp bnRlbF9kZV9yZWFkKGRldl9wcml2LCBUUkFOU19EUF9DVEwoY3J0Yy0+cGlwZSkpOwo+IC0JCWlm IChkcm1fZHBfZW5oYW5jZWRfZnJhbWVfY2FwKGludGVsX2RwLT5kcGNkKSkKPiAtCQkJdHJhbnNf ZHAgfD0gVFJBTlNfRFBfRU5IX0ZSQU1JTkc7Cj4gLQkJZWxzZQo+IC0JCQl0cmFuc19kcCAmPSB+ VFJBTlNfRFBfRU5IX0ZSQU1JTkc7Cj4gLQkJaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIFRSQU5T X0RQX0NUTChjcnRjLT5waXBlKSwgdHJhbnNfZHApOwo+IC0JfSBlbHNlIHsKPiAtCQlpZiAoSVNf RzRYKGRldl9wcml2KSAmJiBwaXBlX2NvbmZpZy0+bGltaXRlZF9jb2xvcl9yYW5nZSkKPiAtCQkJ aW50ZWxfZHAtPkRQIHw9IERQX0NPTE9SX1JBTkdFXzE2XzIzNTsKPiAtCj4gLQkJaWYgKGFkanVz dGVkX21vZGUtPmZsYWdzICYgRFJNX01PREVfRkxBR19QSFNZTkMpCj4gLQkJCWludGVsX2RwLT5E UCB8PSBEUF9TWU5DX0hTX0hJR0g7Cj4gLQkJaWYgKGFkanVzdGVkX21vZGUtPmZsYWdzICYgRFJN X01PREVfRkxBR19QVlNZTkMpCj4gLQkJCWludGVsX2RwLT5EUCB8PSBEUF9TWU5DX1ZTX0hJR0g7 Cj4gLQkJaW50ZWxfZHAtPkRQIHw9IERQX0xJTktfVFJBSU5fT0ZGOwo+IC0KPiAtCQlpZiAoZHJt X2RwX2VuaGFuY2VkX2ZyYW1lX2NhcChpbnRlbF9kcC0+ZHBjZCkpCj4gLQkJCWludGVsX2RwLT5E UCB8PSBEUF9FTkhBTkNFRF9GUkFNSU5HOwo+IC0KPiAtCQlpZiAoSVNfQ0hFUlJZVklFVyhkZXZf cHJpdikpCj4gLQkJCWludGVsX2RwLT5EUCB8PSBEUF9QSVBFX1NFTF9DSFYoY3J0Yy0+cGlwZSk7 Cj4gLQkJZWxzZQo+IC0JCQlpbnRlbF9kcC0+RFAgfD0gRFBfUElQRV9TRUwoY3J0Yy0+cGlwZSk7 Cj4gLQl9Cj4gLX0KPiAtCj4gLSNkZWZpbmUgSURMRV9PTl9NQVNLCQkoUFBfT04gfCBQUF9TRVFV RU5DRV9NQVNLIHwgMCAgICAgICAgICAgICAgICAgICAgIHwgUFBfU0VRVUVOQ0VfU1RBVEVfTUFT SykKPiAtI2RlZmluZSBJRExFX09OX1ZBTFVFICAgCShQUF9PTiB8IFBQX1NFUVVFTkNFX05PTkUg fCAwICAgICAgICAgICAgICAgICAgICAgfCBQUF9TRVFVRU5DRV9TVEFURV9PTl9JRExFKQo+IC0K PiAtI2RlZmluZSBJRExFX09GRl9NQVNLCQkoUFBfT04gfCBQUF9TRVFVRU5DRV9NQVNLIHwgMCAg ICAgICAgICAgICAgICAgICAgIHwgMCkKPiAtI2RlZmluZSBJRExFX09GRl9WQUxVRQkJKDAgICAg IHwgUFBfU0VRVUVOQ0VfTk9ORSB8IDAgICAgICAgICAgICAgICAgICAgICB8IDApCj4gLQo+IC0j ZGVmaW5lIElETEVfQ1lDTEVfTUFTSwkJKFBQX09OIHwgUFBfU0VRVUVOQ0VfTUFTSyB8IFBQX0NZ Q0xFX0RFTEFZX0FDVElWRSB8IFBQX1NFUVVFTkNFX1NUQVRFX01BU0spCj4gLSNkZWZpbmUgSURM RV9DWUNMRV9WQUxVRQkoMCAgICAgfCBQUF9TRVFVRU5DRV9OT05FIHwgMCAgICAgICAgICAgICAg ICAgICAgIHwgUFBfU0VRVUVOQ0VfU1RBVEVfT0ZGX0lETEUpCj4gLQo+IC1zdGF0aWMgdm9pZCBp bnRlbF9wcHNfdmVyaWZ5X3N0YXRlKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApOwo+IC0KPiAt c3RhdGljIHZvaWQgd2FpdF9wYW5lbF9zdGF0dXMoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCwK PiAtCQkJCSAgICAgICB1MzIgbWFzaywKPiAtCQkJCSAgICAgICB1MzIgdmFsdWUpCj4gLXsKPiAt CXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRwX3RvX2k5MTUoaW50ZWxfZHAp Owo+IC0JaTkxNV9yZWdfdCBwcF9zdGF0X3JlZywgcHBfY3RybF9yZWc7Cj4gLQo+IC0JbG9ja2Rl cF9hc3NlcnRfaGVsZCgmZGV2X3ByaXYtPnBwc19tdXRleCk7Cj4gLQo+IC0JaW50ZWxfcHBzX3Zl cmlmeV9zdGF0ZShpbnRlbF9kcCk7Cj4gLQo+IC0JcHBfc3RhdF9yZWcgPSBfcHBfc3RhdF9yZWco aW50ZWxfZHApOwo+IC0JcHBfY3RybF9yZWcgPSBfcHBfY3RybF9yZWcoaW50ZWxfZHApOwo+IC0K PiAtCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJtLAo+IC0JCSAgICAibWFzayAlMDh4IHZhbHVl ICUwOHggc3RhdHVzICUwOHggY29udHJvbCAlMDh4XG4iLAo+IC0JCSAgICBtYXNrLCB2YWx1ZSwK PiAtCQkgICAgaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgcHBfc3RhdF9yZWcpLAo+IC0JCSAgICBp bnRlbF9kZV9yZWFkKGRldl9wcml2LCBwcF9jdHJsX3JlZykpOwo+IC0KPiAtCWlmIChpbnRlbF9k ZV93YWl0X2Zvcl9yZWdpc3RlcihkZXZfcHJpdiwgcHBfc3RhdF9yZWcsCj4gLQkJCQkgICAgICAg bWFzaywgdmFsdWUsIDUwMDApKQo+IC0JCWRybV9lcnIoJmRldl9wcml2LT5kcm0sCj4gLQkJCSJQ YW5lbCBzdGF0dXMgdGltZW91dDogc3RhdHVzICUwOHggY29udHJvbCAlMDh4XG4iLAo+IC0JCQlp bnRlbF9kZV9yZWFkKGRldl9wcml2LCBwcF9zdGF0X3JlZyksCj4gLQkJCWludGVsX2RlX3JlYWQo ZGV2X3ByaXYsIHBwX2N0cmxfcmVnKSk7Cj4gLQo+IC0JZHJtX2RiZ19rbXMoJmRldl9wcml2LT5k cm0sICJXYWl0IGNvbXBsZXRlXG4iKTsKPiAtfQo+IC0KPiAtc3RhdGljIHZvaWQgd2FpdF9wYW5l bF9vbihzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKQo+IC17Cj4gLQlzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqaTkxNSA9IGRwX3RvX2k5MTUoaW50ZWxfZHApOwo+IC0KPiAtCWRybV9kYmdfa21z KCZpOTE1LT5kcm0sICJXYWl0IGZvciBwYW5lbCBwb3dlciBvblxuIik7Cj4gLQl3YWl0X3BhbmVs X3N0YXR1cyhpbnRlbF9kcCwgSURMRV9PTl9NQVNLLCBJRExFX09OX1ZBTFVFKTsKPiAtfQo+IC0K PiAtc3RhdGljIHZvaWQgd2FpdF9wYW5lbF9vZmYoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCkK PiAtewo+IC0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSBkcF90b19pOTE1KGludGVs X2RwKTsKPiAtCj4gLQlkcm1fZGJnX2ttcygmaTkxNS0+ZHJtLCAiV2FpdCBmb3IgcGFuZWwgcG93 ZXIgb2ZmIHRpbWVcbiIpOwo+IC0Jd2FpdF9wYW5lbF9zdGF0dXMoaW50ZWxfZHAsIElETEVfT0ZG X01BU0ssIElETEVfT0ZGX1ZBTFVFKTsKPiAtfQo+IC0KPiAtc3RhdGljIHZvaWQgd2FpdF9wYW5l bF9wb3dlcl9jeWNsZShzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKQo+IC17Cj4gLQlzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IGRwX3RvX2k5MTUoaW50ZWxfZHApOwo+IC0Ja3RpbWVf dCBwYW5lbF9wb3dlcl9vbl90aW1lOwo+IC0JczY0IHBhbmVsX3Bvd2VyX29mZl9kdXJhdGlvbjsK PiAtCj4gLQlkcm1fZGJnX2ttcygmaTkxNS0+ZHJtLCAiV2FpdCBmb3IgcGFuZWwgcG93ZXIgY3lj bGVcbiIpOwo+IC0KPiAtCS8qIHRha2UgdGhlIGRpZmZlcmVuY2Ugb2YgY3VycnJlbnQgdGltZSBh bmQgcGFuZWwgcG93ZXIgb2ZmIHRpbWUKPiAtCSAqIGFuZCB0aGVuIG1ha2UgcGFuZWwgd2FpdCBm b3IgdDExX3QxMiBpZiBuZWVkZWQuICovCj4gLQlwYW5lbF9wb3dlcl9vbl90aW1lID0ga3RpbWVf Z2V0X2Jvb3R0aW1lKCk7Cj4gLQlwYW5lbF9wb3dlcl9vZmZfZHVyYXRpb24gPSBrdGltZV9tc19k ZWx0YShwYW5lbF9wb3dlcl9vbl90aW1lLCBpbnRlbF9kcC0+cGFuZWxfcG93ZXJfb2ZmX3RpbWUp Owo+IC0KPiAtCS8qIFdoZW4gd2UgZGlzYWJsZSB0aGUgVkREIG92ZXJyaWRlIGJpdCBsYXN0IHdl IGhhdmUgdG8gZG8gdGhlIG1hbnVhbAo+IC0JICogd2FpdC4gKi8KPiAtCWlmIChwYW5lbF9wb3dl cl9vZmZfZHVyYXRpb24gPCAoczY0KWludGVsX2RwLT5wYW5lbF9wb3dlcl9jeWNsZV9kZWxheSkK PiAtCQl3YWl0X3JlbWFpbmluZ19tc19mcm9tX2ppZmZpZXMoamlmZmllcywKPiAtCQkJCSAgICAg ICBpbnRlbF9kcC0+cGFuZWxfcG93ZXJfY3ljbGVfZGVsYXkgLSBwYW5lbF9wb3dlcl9vZmZfZHVy YXRpb24pOwo+IC0KPiAtCXdhaXRfcGFuZWxfc3RhdHVzKGludGVsX2RwLCBJRExFX0NZQ0xFX01B U0ssIElETEVfQ1lDTEVfVkFMVUUpOwo+IC19Cj4gLQo+IC1zdGF0aWMgdm9pZCB3YWl0X2JhY2ts aWdodF9vbihzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKQo+IC17Cj4gLQl3YWl0X3JlbWFpbmlu Z19tc19mcm9tX2ppZmZpZXMoaW50ZWxfZHAtPmxhc3RfcG93ZXJfb24sCj4gLQkJCQkgICAgICAg aW50ZWxfZHAtPmJhY2tsaWdodF9vbl9kZWxheSk7Cj4gLX0KPiAtCj4gLXN0YXRpYyB2b2lkIGVk cF93YWl0X2JhY2tsaWdodF9vZmYoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCkKPiAtewo+IC0J d2FpdF9yZW1haW5pbmdfbXNfZnJvbV9qaWZmaWVzKGludGVsX2RwLT5sYXN0X2JhY2tsaWdodF9v ZmYsCj4gLQkJCQkgICAgICAgaW50ZWxfZHAtPmJhY2tsaWdodF9vZmZfZGVsYXkpOwo+IC19Cj4g LQo+IC0vKiBSZWFkIHRoZSBjdXJyZW50IHBwX2NvbnRyb2wgdmFsdWUsIHVubG9ja2luZyB0aGUg cmVnaXN0ZXIgaWYgaXQKPiAtICogaXMgbG9ja2VkCj4gLSAqLwo+IC0KPiAtc3RhdGljICB1MzIg aWxrX2dldF9wcF9jb250cm9sKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApCj4gLXsKPiAtCXN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRwX3RvX2k5MTUoaW50ZWxfZHApOwo+ IC0JdTMyIGNvbnRyb2w7Cj4gLQo+IC0JbG9ja2RlcF9hc3NlcnRfaGVsZCgmZGV2X3ByaXYtPnBw c19tdXRleCk7Cj4gLQo+IC0JY29udHJvbCA9IGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIF9wcF9j dHJsX3JlZyhpbnRlbF9kcCkpOwo+IC0JaWYgKGRybV9XQVJOX09OKCZkZXZfcHJpdi0+ZHJtLCAh SEFTX0RESShkZXZfcHJpdikgJiYKPiAtCQkJKGNvbnRyb2wgJiBQQU5FTF9VTkxPQ0tfTUFTSykg IT0gUEFORUxfVU5MT0NLX1JFR1MpKSB7Cj4gLQkJY29udHJvbCAmPSB+UEFORUxfVU5MT0NLX01B U0s7Cj4gLQkJY29udHJvbCB8PSBQQU5FTF9VTkxPQ0tfUkVHUzsKPiAtCX0KPiAtCXJldHVybiBj b250cm9sOwo+IC19Cj4gLQo+IC0vKgo+IC0gKiBNdXN0IGJlIHBhaXJlZCB3aXRoIGVkcF9wYW5l bF92ZGRfb2ZmKCkuCj4gLSAqIE11c3QgaG9sZCBwcHNfbXV0ZXggYXJvdW5kIHRoZSB3aG9sZSBv bi9vZmYgc2VxdWVuY2UuCj4gLSAqIENhbiBiZSBuZXN0ZWQgd2l0aCBpbnRlbF9lZHBfcGFuZWxf dmRkX3tvbixvZmZ9KCkgY2FsbHMuCj4gLSAqLwo+IC1zdGF0aWMgYm9vbCBlZHBfcGFuZWxfdmRk X29uKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApCj4gLXsKPiAtCXN0cnVjdCBkcm1faTkxNV9w cml2YXRlICpkZXZfcHJpdiA9IGRwX3RvX2k5MTUoaW50ZWxfZHApOwo+IC0Jc3RydWN0IGludGVs X2RpZ2l0YWxfcG9ydCAqZGlnX3BvcnQgPSBkcF90b19kaWdfcG9ydChpbnRlbF9kcCk7Cj4gLQl1 MzIgcHA7Cj4gLQlpOTE1X3JlZ190IHBwX3N0YXRfcmVnLCBwcF9jdHJsX3JlZzsKPiAtCWJvb2wg bmVlZF90b19kaXNhYmxlID0gIWludGVsX2RwLT53YW50X3BhbmVsX3ZkZDsKPiAtCj4gLQlsb2Nr ZGVwX2Fzc2VydF9oZWxkKCZkZXZfcHJpdi0+cHBzX211dGV4KTsKPiAtCj4gLQlpZiAoIWludGVs X2RwX2lzX2VkcChpbnRlbF9kcCkpCj4gLQkJcmV0dXJuIGZhbHNlOwo+IC0KPiAtCWNhbmNlbF9k ZWxheWVkX3dvcmsoJmludGVsX2RwLT5wYW5lbF92ZGRfd29yayk7Cj4gLQlpbnRlbF9kcC0+d2Fu dF9wYW5lbF92ZGQgPSB0cnVlOwo+IC0KPiAtCWlmIChlZHBfaGF2ZV9wYW5lbF92ZGQoaW50ZWxf ZHApKQo+IC0JCXJldHVybiBuZWVkX3RvX2Rpc2FibGU7Cj4gLQo+IC0JZHJtX1dBUk5fT04oJmRl dl9wcml2LT5kcm0sIGludGVsX2RwLT52ZGRfd2FrZXJlZik7Cj4gLQlpbnRlbF9kcC0+dmRkX3dh a2VyZWYgPSBpbnRlbF9kaXNwbGF5X3Bvd2VyX2dldChkZXZfcHJpdiwKPiAtCQkJCQkJCWludGVs X2F1eF9wb3dlcl9kb21haW4oZGlnX3BvcnQpKTsKPiAtCj4gLQlkcm1fZGJnX2ttcygmZGV2X3By aXYtPmRybSwgIlR1cm5pbmcgW0VOQ09ERVI6JWQ6JXNdIFZERCBvblxuIiwKPiAtCQkgICAgZGln X3BvcnQtPmJhc2UuYmFzZS5iYXNlLmlkLAo+IC0JCSAgICBkaWdfcG9ydC0+YmFzZS5iYXNlLm5h bWUpOwo+IC0KPiAtCWlmICghZWRwX2hhdmVfcGFuZWxfcG93ZXIoaW50ZWxfZHApKQo+IC0JCXdh aXRfcGFuZWxfcG93ZXJfY3ljbGUoaW50ZWxfZHApOwo+IC0KPiAtCXBwID0gaWxrX2dldF9wcF9j b250cm9sKGludGVsX2RwKTsKPiAtCXBwIHw9IEVEUF9GT1JDRV9WREQ7Cj4gLQo+IC0JcHBfc3Rh dF9yZWcgPSBfcHBfc3RhdF9yZWcoaW50ZWxfZHApOwo+IC0JcHBfY3RybF9yZWcgPSBfcHBfY3Ry bF9yZWcoaW50ZWxfZHApOwo+IC0KPiAtCWludGVsX2RlX3dyaXRlKGRldl9wcml2LCBwcF9jdHJs X3JlZywgcHApOwo+IC0JaW50ZWxfZGVfcG9zdGluZ19yZWFkKGRldl9wcml2LCBwcF9jdHJsX3Jl Zyk7Cj4gLQlkcm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwgIlBQX1NUQVRVUzogMHglMDh4IFBQ X0NPTlRST0w6IDB4JTA4eFxuIiwKPiAtCQkgICAgaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgcHBf c3RhdF9yZWcpLAo+IC0JCSAgICBpbnRlbF9kZV9yZWFkKGRldl9wcml2LCBwcF9jdHJsX3JlZykp Owo+IC0JLyoKPiAtCSAqIElmIHRoZSBwYW5lbCB3YXNuJ3Qgb24sIGRlbGF5IGJlZm9yZSBhY2Nl c3NpbmcgYXV4IGNoYW5uZWwKPiAtCSAqLwo+IC0JaWYgKCFlZHBfaGF2ZV9wYW5lbF9wb3dlcihp bnRlbF9kcCkpIHsKPiAtCQlkcm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwKPiAtCQkJICAgICJb RU5DT0RFUjolZDolc10gcGFuZWwgcG93ZXIgd2Fzbid0IGVuYWJsZWRcbiIsCj4gLQkJCSAgICBk aWdfcG9ydC0+YmFzZS5iYXNlLmJhc2UuaWQsCj4gLQkJCSAgICBkaWdfcG9ydC0+YmFzZS5iYXNl Lm5hbWUpOwo+IC0JCW1zbGVlcChpbnRlbF9kcC0+cGFuZWxfcG93ZXJfdXBfZGVsYXkpOwo+IC0J fQo+IC0KPiAtCXJldHVybiBuZWVkX3RvX2Rpc2FibGU7Cj4gLX0KPiAtCj4gLS8qCj4gLSAqIE11 c3QgYmUgcGFpcmVkIHdpdGggaW50ZWxfZWRwX3BhbmVsX3ZkZF9vZmYoKSBvcgo+IC0gKiBpbnRl bF9lZHBfcGFuZWxfb2ZmKCkuCj4gLSAqIE5lc3RlZCBjYWxscyB0byB0aGVzZSBmdW5jdGlvbnMg YXJlIG5vdCBhbGxvd2VkIHNpbmNlCj4gLSAqIHdlIGRyb3AgdGhlIGxvY2suIENhbGxlciBtdXN0 IHVzZSBzb21lIGhpZ2hlciBsZXZlbAo+IC0gKiBsb2NraW5nIHRvIHByZXZlbnQgbmVzdGVkIGNh bGxzIGZyb20gb3RoZXIgdGhyZWFkcy4KPiAtICovCj4gLXZvaWQgaW50ZWxfZWRwX3BhbmVsX3Zk ZF9vbihzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKQo+IC17Cj4gLQlpbnRlbF93YWtlcmVmX3Qg d2FrZXJlZjsKPiAtCWJvb2wgdmRkOwo+IC0KPiAtCWlmICghaW50ZWxfZHBfaXNfZWRwKGludGVs X2RwKSkKPiAtCQlyZXR1cm47Cj4gLQo+IC0JdmRkID0gZmFsc2U7Cj4gLQl3aXRoX3Bwc19sb2Nr KGludGVsX2RwLCB3YWtlcmVmKQo+IC0JCXZkZCA9IGVkcF9wYW5lbF92ZGRfb24oaW50ZWxfZHAp Owo+IC0JSTkxNV9TVEFURV9XQVJOKCF2ZGQsICJbRU5DT0RFUjolZDolc10gVkREIGFscmVhZHkg cmVxdWVzdGVkIG9uXG4iLAo+IC0JCQlkcF90b19kaWdfcG9ydChpbnRlbF9kcCktPmJhc2UuYmFz ZS5iYXNlLmlkLAo+IC0JCQlkcF90b19kaWdfcG9ydChpbnRlbF9kcCktPmJhc2UuYmFzZS5uYW1l KTsKPiAtfQo+IC0KPiAtc3RhdGljIHZvaWQgZWRwX3BhbmVsX3ZkZF9vZmZfc3luYyhzdHJ1Y3Qg aW50ZWxfZHAgKmludGVsX2RwKQo+IC17Cj4gLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2 X3ByaXYgPSBkcF90b19pOTE1KGludGVsX2RwKTsKPiAtCXN0cnVjdCBpbnRlbF9kaWdpdGFsX3Bv cnQgKmRpZ19wb3J0ID0KPiAtCQlkcF90b19kaWdfcG9ydChpbnRlbF9kcCk7Cj4gLQl1MzIgcHA7 Cj4gLQlpOTE1X3JlZ190IHBwX3N0YXRfcmVnLCBwcF9jdHJsX3JlZzsKPiAtCj4gLQlsb2NrZGVw X2Fzc2VydF9oZWxkKCZkZXZfcHJpdi0+cHBzX211dGV4KTsKPiAtCj4gLQlkcm1fV0FSTl9PTigm ZGV2X3ByaXYtPmRybSwgaW50ZWxfZHAtPndhbnRfcGFuZWxfdmRkKTsKPiAtCj4gLQlpZiAoIWVk cF9oYXZlX3BhbmVsX3ZkZChpbnRlbF9kcCkpCj4gLQkJcmV0dXJuOwo+IC0KPiAtCWRybV9kYmdf a21zKCZkZXZfcHJpdi0+ZHJtLCAiVHVybmluZyBbRU5DT0RFUjolZDolc10gVkREIG9mZlxuIiwK PiAtCQkgICAgZGlnX3BvcnQtPmJhc2UuYmFzZS5iYXNlLmlkLAo+IC0JCSAgICBkaWdfcG9ydC0+ YmFzZS5iYXNlLm5hbWUpOwo+IC0KPiAtCXBwID0gaWxrX2dldF9wcF9jb250cm9sKGludGVsX2Rw KTsKPiAtCXBwICY9IH5FRFBfRk9SQ0VfVkREOwo+IC0KPiAtCXBwX2N0cmxfcmVnID0gX3BwX2N0 cmxfcmVnKGludGVsX2RwKTsKPiAtCXBwX3N0YXRfcmVnID0gX3BwX3N0YXRfcmVnKGludGVsX2Rw KTsKPiAtCj4gLQlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgcHBfY3RybF9yZWcsIHBwKTsKPiAt CWludGVsX2RlX3Bvc3RpbmdfcmVhZChkZXZfcHJpdiwgcHBfY3RybF9yZWcpOwo+IC0KPiAtCS8q IE1ha2Ugc3VyZSBzZXF1ZW5jZXIgaXMgaWRsZSBiZWZvcmUgYWxsb3dpbmcgc3Vic2VxdWVudCBh Y3Rpdml0eSAqLwo+IC0JZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sICJQUF9TVEFUVVM6IDB4 JTA4eCBQUF9DT05UUk9MOiAweCUwOHhcbiIsCj4gLQkJICAgIGludGVsX2RlX3JlYWQoZGV2X3By aXYsIHBwX3N0YXRfcmVnKSwKPiAtCQkgICAgaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgcHBfY3Ry bF9yZWcpKTsKPiAtCj4gLQlpZiAoKHBwICYgUEFORUxfUE9XRVJfT04pID09IDApCj4gLQkJaW50 ZWxfZHAtPnBhbmVsX3Bvd2VyX29mZl90aW1lID0ga3RpbWVfZ2V0X2Jvb3R0aW1lKCk7Cj4gLQo+ IC0JaW50ZWxfZGlzcGxheV9wb3dlcl9wdXQoZGV2X3ByaXYsCj4gLQkJCQlpbnRlbF9hdXhfcG93 ZXJfZG9tYWluKGRpZ19wb3J0KSwKPiAtCQkJCWZldGNoX2FuZF96ZXJvKCZpbnRlbF9kcC0+dmRk X3dha2VyZWYpKTsKPiAtfQo+IC0KPiAtc3RhdGljIHZvaWQgZWRwX3BhbmVsX3ZkZF93b3JrKHN0 cnVjdCB3b3JrX3N0cnVjdCAqX193b3JrKQo+IC17Cj4gLQlzdHJ1Y3QgaW50ZWxfZHAgKmludGVs X2RwID0KPiAtCQljb250YWluZXJfb2YodG9fZGVsYXllZF93b3JrKF9fd29yayksCj4gLQkJCSAg ICAgc3RydWN0IGludGVsX2RwLCBwYW5lbF92ZGRfd29yayk7Cj4gLQlpbnRlbF93YWtlcmVmX3Qg d2FrZXJlZjsKPiAtCj4gLQl3aXRoX3Bwc19sb2NrKGludGVsX2RwLCB3YWtlcmVmKSB7Cj4gLQkJ aWYgKCFpbnRlbF9kcC0+d2FudF9wYW5lbF92ZGQpCj4gLQkJCWVkcF9wYW5lbF92ZGRfb2ZmX3N5 bmMoaW50ZWxfZHApOwo+IC0JfQo+IC19Cj4gLQo+IC1zdGF0aWMgdm9pZCBlZHBfcGFuZWxfdmRk X3NjaGVkdWxlX29mZihzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKQo+IC17Cj4gLQl1bnNpZ25l ZCBsb25nIGRlbGF5Owo+IC0KPiAtCS8qCj4gLQkgKiBRdWV1ZSB0aGUgdGltZXIgdG8gZmlyZSBh IGxvbmcgdGltZSBmcm9tIG5vdyAocmVsYXRpdmUgdG8gdGhlIHBvd2VyCj4gLQkgKiBkb3duIGRl bGF5KSB0byBrZWVwIHRoZSBwYW5lbCBwb3dlciB1cCBhY3Jvc3MgYSBzZXF1ZW5jZSBvZgo+IC0J ICogb3BlcmF0aW9ucy4KPiAtCSAqLwo+IC0JZGVsYXkgPSBtc2Vjc190b19qaWZmaWVzKGludGVs X2RwLT5wYW5lbF9wb3dlcl9jeWNsZV9kZWxheSAqIDUpOwo+IC0Jc2NoZWR1bGVfZGVsYXllZF93 b3JrKCZpbnRlbF9kcC0+cGFuZWxfdmRkX3dvcmssIGRlbGF5KTsKPiAtfQo+IC0KPiAtLyoKPiAt ICogTXVzdCBiZSBwYWlyZWQgd2l0aCBlZHBfcGFuZWxfdmRkX29uKCkuCj4gLSAqIE11c3QgaG9s ZCBwcHNfbXV0ZXggYXJvdW5kIHRoZSB3aG9sZSBvbi9vZmYgc2VxdWVuY2UuCj4gLSAqIENhbiBi ZSBuZXN0ZWQgd2l0aCBpbnRlbF9lZHBfcGFuZWxfdmRkX3tvbixvZmZ9KCkgY2FsbHMuCj4gLSAq Lwo+IC1zdGF0aWMgdm9pZCBlZHBfcGFuZWxfdmRkX29mZihzdHJ1Y3QgaW50ZWxfZHAgKmludGVs X2RwLCBib29sIHN5bmMpCj4gLXsKPiAtCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJp diA9IGRwX3RvX2k5MTUoaW50ZWxfZHApOwo+IC0KPiAtCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmRl dl9wcml2LT5wcHNfbXV0ZXgpOwo+IC0KPiAtCWlmICghaW50ZWxfZHBfaXNfZWRwKGludGVsX2Rw KSkKPiAtCQlyZXR1cm47Cj4gLQo+IC0JSTkxNV9TVEFURV9XQVJOKCFpbnRlbF9kcC0+d2FudF9w YW5lbF92ZGQsICJbRU5DT0RFUjolZDolc10gVkREIG5vdCBmb3JjZWQgb24iLAo+IC0JCQlkcF90 b19kaWdfcG9ydChpbnRlbF9kcCktPmJhc2UuYmFzZS5iYXNlLmlkLAo+IC0JCQlkcF90b19kaWdf cG9ydChpbnRlbF9kcCktPmJhc2UuYmFzZS5uYW1lKTsKPiAtCj4gLQlpbnRlbF9kcC0+d2FudF9w YW5lbF92ZGQgPSBmYWxzZTsKPiAtCj4gLQlpZiAoc3luYykKPiAtCQllZHBfcGFuZWxfdmRkX29m Zl9zeW5jKGludGVsX2RwKTsKPiAtCWVsc2UKPiAtCQllZHBfcGFuZWxfdmRkX3NjaGVkdWxlX29m ZihpbnRlbF9kcCk7Cj4gLX0KPiAtCj4gLXN0YXRpYyB2b2lkIGVkcF9wYW5lbF9vbihzdHJ1Y3Qg aW50ZWxfZHAgKmludGVsX2RwKQo+IC17Cj4gLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2 X3ByaXYgPSBkcF90b19pOTE1KGludGVsX2RwKTsKPiAtCXUzMiBwcDsKPiAtCWk5MTVfcmVnX3Qg cHBfY3RybF9yZWc7Cj4gLQo+IC0JbG9ja2RlcF9hc3NlcnRfaGVsZCgmZGV2X3ByaXYtPnBwc19t dXRleCk7Cj4gLQo+IC0JaWYgKCFpbnRlbF9kcF9pc19lZHAoaW50ZWxfZHApKQo+IC0JCXJldHVy bjsKPiAtCj4gLQlkcm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwgIlR1cm4gW0VOQ09ERVI6JWQ6 JXNdIHBhbmVsIHBvd2VyIG9uXG4iLAo+IC0JCSAgICBkcF90b19kaWdfcG9ydChpbnRlbF9kcCkt PmJhc2UuYmFzZS5iYXNlLmlkLAo+IC0JCSAgICBkcF90b19kaWdfcG9ydChpbnRlbF9kcCktPmJh c2UuYmFzZS5uYW1lKTsKPiAtCj4gLQlpZiAoZHJtX1dBUk4oJmRldl9wcml2LT5kcm0sIGVkcF9o YXZlX3BhbmVsX3Bvd2VyKGludGVsX2RwKSwKPiAtCQkgICAgICJbRU5DT0RFUjolZDolc10gcGFu ZWwgcG93ZXIgYWxyZWFkeSBvblxuIiwKPiAtCQkgICAgIGRwX3RvX2RpZ19wb3J0KGludGVsX2Rw KS0+YmFzZS5iYXNlLmJhc2UuaWQsCj4gLQkJICAgICBkcF90b19kaWdfcG9ydChpbnRlbF9kcCkt PmJhc2UuYmFzZS5uYW1lKSkKPiAtCQlyZXR1cm47Cj4gLQo+IC0Jd2FpdF9wYW5lbF9wb3dlcl9j eWNsZShpbnRlbF9kcCk7Cj4gLQo+IC0JcHBfY3RybF9yZWcgPSBfcHBfY3RybF9yZWcoaW50ZWxf ZHApOwo+IC0JcHAgPSBpbGtfZ2V0X3BwX2NvbnRyb2woaW50ZWxfZHApOwo+IC0JaWYgKElTX0dF TihkZXZfcHJpdiwgNSkpIHsKPiAtCQkvKiBJTEsgd29ya2Fyb3VuZDogZGlzYWJsZSByZXNldCBh cm91bmQgcG93ZXIgc2VxdWVuY2UgKi8KPiAtCQlwcCAmPSB+UEFORUxfUE9XRVJfUkVTRVQ7Cj4g LQkJaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIHBwX2N0cmxfcmVnLCBwcCk7Cj4gLQkJaW50ZWxf ZGVfcG9zdGluZ19yZWFkKGRldl9wcml2LCBwcF9jdHJsX3JlZyk7Cj4gLQl9Cj4gLQo+IC0JcHAg fD0gUEFORUxfUE9XRVJfT047Cj4gLQlpZiAoIUlTX0dFTihkZXZfcHJpdiwgNSkpCj4gLQkJcHAg fD0gUEFORUxfUE9XRVJfUkVTRVQ7Cj4gLQo+IC0JaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIHBw X2N0cmxfcmVnLCBwcCk7Cj4gLQlpbnRlbF9kZV9wb3N0aW5nX3JlYWQoZGV2X3ByaXYsIHBwX2N0 cmxfcmVnKTsKPiAtCj4gLQl3YWl0X3BhbmVsX29uKGludGVsX2RwKTsKPiAtCWludGVsX2RwLT5s YXN0X3Bvd2VyX29uID0gamlmZmllczsKPiAtCj4gLQlpZiAoSVNfR0VOKGRldl9wcml2LCA1KSkg ewo+IC0JCXBwIHw9IFBBTkVMX1BPV0VSX1JFU0VUOyAvKiByZXN0b3JlIHBhbmVsIHJlc2V0IGJp dCAqLwo+IC0JCWludGVsX2RlX3dyaXRlKGRldl9wcml2LCBwcF9jdHJsX3JlZywgcHApOwo+IC0J CWludGVsX2RlX3Bvc3RpbmdfcmVhZChkZXZfcHJpdiwgcHBfY3RybF9yZWcpOwo+IC0JfQo+IC19 Cj4gLQo+IC12b2lkIGludGVsX2VkcF9wYW5lbF9vbihzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2Rw KQo+IC17Cj4gLQlpbnRlbF93YWtlcmVmX3Qgd2FrZXJlZjsKPiAtCj4gLQlpZiAoIWludGVsX2Rw X2lzX2VkcChpbnRlbF9kcCkpCj4gLQkJcmV0dXJuOwo+IC0KPiAtCXdpdGhfcHBzX2xvY2soaW50 ZWxfZHAsIHdha2VyZWYpCj4gLQkJZWRwX3BhbmVsX29uKGludGVsX2RwKTsKPiAtfQo+IC0KPiAt Cj4gLXN0YXRpYyB2b2lkIGVkcF9wYW5lbF9vZmYoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCkK PiAtewo+IC0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZHBfdG9faTkxNShp bnRlbF9kcCk7Cj4gLQlzdHJ1Y3QgaW50ZWxfZGlnaXRhbF9wb3J0ICpkaWdfcG9ydCA9IGRwX3Rv X2RpZ19wb3J0KGludGVsX2RwKTsKPiAtCXUzMiBwcDsKPiAtCWk5MTVfcmVnX3QgcHBfY3RybF9y ZWc7Cj4gLQo+IC0JbG9ja2RlcF9hc3NlcnRfaGVsZCgmZGV2X3ByaXYtPnBwc19tdXRleCk7Cj4g LQo+IC0JaWYgKCFpbnRlbF9kcF9pc19lZHAoaW50ZWxfZHApKQo+IC0JCXJldHVybjsKPiAtCj4g LQlkcm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwgIlR1cm4gW0VOQ09ERVI6JWQ6JXNdIHBhbmVs IHBvd2VyIG9mZlxuIiwKPiAtCQkgICAgZGlnX3BvcnQtPmJhc2UuYmFzZS5iYXNlLmlkLCBkaWdf cG9ydC0+YmFzZS5iYXNlLm5hbWUpOwo+IC0KPiAtCWRybV9XQVJOKCZkZXZfcHJpdi0+ZHJtLCAh aW50ZWxfZHAtPndhbnRfcGFuZWxfdmRkLAo+IC0JCSAiTmVlZCBbRU5DT0RFUjolZDolc10gVkRE IHRvIHR1cm4gb2ZmIHBhbmVsXG4iLAo+IC0JCSBkaWdfcG9ydC0+YmFzZS5iYXNlLmJhc2UuaWQs IGRpZ19wb3J0LT5iYXNlLmJhc2UubmFtZSk7Cj4gLQo+IC0JcHAgPSBpbGtfZ2V0X3BwX2NvbnRy b2woaW50ZWxfZHApOwo+IC0JLyogV2UgbmVlZCB0byBzd2l0Y2ggb2ZmIHBhbmVsIHBvd2VyIF9h bmRfIGZvcmNlIHZkZCwgZm9yIG90aGVyd2lzZSBzb21lCj4gLQkgKiBwYW5lbHMgZ2V0IHZlcnkg dW5oYXBweSBhbmQgY2Vhc2UgdG8gd29yay4gKi8KPiAtCXBwICY9IH4oUEFORUxfUE9XRVJfT04g fCBQQU5FTF9QT1dFUl9SRVNFVCB8IEVEUF9GT1JDRV9WREQgfAo+IC0JCUVEUF9CTENfRU5BQkxF KTsKPiAtCj4gLQlwcF9jdHJsX3JlZyA9IF9wcF9jdHJsX3JlZyhpbnRlbF9kcCk7Cj4gLQo+IC0J aW50ZWxfZHAtPndhbnRfcGFuZWxfdmRkID0gZmFsc2U7Cj4gKwkgKgo+ICsJICogQ1BUIFBDSCBp cyBxdWl0ZSBkaWZmZXJlbnQsIGhhdmluZyBtYW55IGJpdHMgbW92ZWQKPiArCSAqIHRvIHRoZSBU UkFOU19EUF9DVEwgcmVnaXN0ZXIgaW5zdGVhZC4gVGhhdAo+ICsJICogY29uZmlndXJhdGlvbiBo YXBwZW5zIChvZGRseSkgaW4gaWxrX3BjaF9lbmFibGUKPiArCSAqLwo+ICAKPiAtCWludGVsX2Rl X3dyaXRlKGRldl9wcml2LCBwcF9jdHJsX3JlZywgcHApOwo+IC0JaW50ZWxfZGVfcG9zdGluZ19y ZWFkKGRldl9wcml2LCBwcF9jdHJsX3JlZyk7Cj4gKwkvKiBQcmVzZXJ2ZSB0aGUgQklPUy1jb21w dXRlZCBkZXRlY3RlZCBiaXQuIFRoaXMgaXMKPiArCSAqIHN1cHBvc2VkIHRvIGJlIHJlYWQtb25s eS4KPiArCSAqLwo+ICsJaW50ZWxfZHAtPkRQID0gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgaW50 ZWxfZHAtPm91dHB1dF9yZWcpICYgRFBfREVURUNURUQ7Cj4gIAo+IC0Jd2FpdF9wYW5lbF9vZmYo aW50ZWxfZHApOwo+IC0JaW50ZWxfZHAtPnBhbmVsX3Bvd2VyX29mZl90aW1lID0ga3RpbWVfZ2V0 X2Jvb3R0aW1lKCk7Cj4gKwkvKiBIYW5kbGUgRFAgYml0cyBpbiBjb21tb24gYmV0d2VlbiBhbGwg dGhyZWUgcmVnaXN0ZXIgZm9ybWF0cyAqLwo+ICsJaW50ZWxfZHAtPkRQIHw9IERQX1ZPTFRBR0Vf MF80IHwgRFBfUFJFX0VNUEhBU0lTXzA7Cj4gKwlpbnRlbF9kcC0+RFAgfD0gRFBfUE9SVF9XSURU SChwaXBlX2NvbmZpZy0+bGFuZV9jb3VudCk7Cj4gIAo+IC0JLyogV2UgZ290IGEgcmVmZXJlbmNl IHdoZW4gd2UgZW5hYmxlZCB0aGUgVkRELiAqLwo+IC0JaW50ZWxfZGlzcGxheV9wb3dlcl9wdXQo ZGV2X3ByaXYsCj4gLQkJCQlpbnRlbF9hdXhfcG93ZXJfZG9tYWluKGRpZ19wb3J0KSwKPiAtCQkJ CWZldGNoX2FuZF96ZXJvKCZpbnRlbF9kcC0+dmRkX3dha2VyZWYpKTsKPiAtfQo+ICsJLyogU3Bs aXQgb3V0IHRoZSBJQlgvQ1BVIHZzIENQVCBzZXR0aW5ncyAqLwo+ICAKPiAtdm9pZCBpbnRlbF9l ZHBfcGFuZWxfb2ZmKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApCj4gLXsKPiAtCWludGVsX3dh a2VyZWZfdCB3YWtlcmVmOwo+ICsJaWYgKElTX0lWWUJSSURHRShkZXZfcHJpdikgJiYgcG9ydCA9 PSBQT1JUX0EpIHsKPiArCQlpZiAoYWRqdXN0ZWRfbW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFH X1BIU1lOQykKPiArCQkJaW50ZWxfZHAtPkRQIHw9IERQX1NZTkNfSFNfSElHSDsKPiArCQlpZiAo YWRqdXN0ZWRfbW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX1BWU1lOQykKPiArCQkJaW50ZWxf ZHAtPkRQIHw9IERQX1NZTkNfVlNfSElHSDsKPiArCQlpbnRlbF9kcC0+RFAgfD0gRFBfTElOS19U UkFJTl9PRkZfQ1BUOwo+ICAKPiAtCWlmICghaW50ZWxfZHBfaXNfZWRwKGludGVsX2RwKSkKPiAt CQlyZXR1cm47Cj4gKwkJaWYgKGRybV9kcF9lbmhhbmNlZF9mcmFtZV9jYXAoaW50ZWxfZHAtPmRw Y2QpKQo+ICsJCQlpbnRlbF9kcC0+RFAgfD0gRFBfRU5IQU5DRURfRlJBTUlORzsKPiAgCj4gLQl3 aXRoX3Bwc19sb2NrKGludGVsX2RwLCB3YWtlcmVmKQo+IC0JCWVkcF9wYW5lbF9vZmYoaW50ZWxf ZHApOwo+IC19Cj4gKwkJaW50ZWxfZHAtPkRQIHw9IERQX1BJUEVfU0VMX0lWQihjcnRjLT5waXBl KTsKPiArCX0gZWxzZSBpZiAoSEFTX1BDSF9DUFQoZGV2X3ByaXYpICYmIHBvcnQgIT0gUE9SVF9B KSB7Cj4gKwkJdTMyIHRyYW5zX2RwOwo+ICAKPiAtLyogRW5hYmxlIGJhY2tsaWdodCBpbiB0aGUg cGFuZWwgcG93ZXIgY29udHJvbC4gKi8KPiAtc3RhdGljIHZvaWQgX2ludGVsX2VkcF9iYWNrbGln aHRfb24oc3RydWN0IGludGVsX2RwICppbnRlbF9kcCkKPiAtewo+IC0Jc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2ID0gZHBfdG9faTkxNShpbnRlbF9kcCk7Cj4gLQlpbnRlbF93YWtl cmVmX3Qgd2FrZXJlZjsKPiArCQlpbnRlbF9kcC0+RFAgfD0gRFBfTElOS19UUkFJTl9PRkZfQ1BU Owo+ICAKPiAtCS8qCj4gLQkgKiBJZiB3ZSBlbmFibGUgdGhlIGJhY2tsaWdodCByaWdodCBhd2F5 IGZvbGxvd2luZyBhIHBhbmVsIHBvd2VyCj4gLQkgKiBvbiwgd2UgbWF5IHNlZSBzbGlnaHQgZmxp Y2tlciBhcyB0aGUgcGFuZWwgc3luY3Mgd2l0aCB0aGUgZURQCj4gLQkgKiBsaW5rLiAgU28gZGVs YXkgYSBiaXQgdG8gbWFrZSBzdXJlIHRoZSBpbWFnZSBpcyBzb2xpZCBiZWZvcmUKPiAtCSAqIGFs bG93aW5nIGl0IHRvIGFwcGVhci4KPiAtCSAqLwo+IC0Jd2FpdF9iYWNrbGlnaHRfb24oaW50ZWxf ZHApOwo+ICsJCXRyYW5zX2RwID0gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgVFJBTlNfRFBfQ1RM KGNydGMtPnBpcGUpKTsKPiArCQlpZiAoZHJtX2RwX2VuaGFuY2VkX2ZyYW1lX2NhcChpbnRlbF9k cC0+ZHBjZCkpCj4gKwkJCXRyYW5zX2RwIHw9IFRSQU5TX0RQX0VOSF9GUkFNSU5HOwo+ICsJCWVs c2UKPiArCQkJdHJhbnNfZHAgJj0gflRSQU5TX0RQX0VOSF9GUkFNSU5HOwo+ICsJCWludGVsX2Rl X3dyaXRlKGRldl9wcml2LCBUUkFOU19EUF9DVEwoY3J0Yy0+cGlwZSksIHRyYW5zX2RwKTsKPiAr CX0gZWxzZSB7Cj4gKwkJaWYgKElTX0c0WChkZXZfcHJpdikgJiYgcGlwZV9jb25maWctPmxpbWl0 ZWRfY29sb3JfcmFuZ2UpCj4gKwkJCWludGVsX2RwLT5EUCB8PSBEUF9DT0xPUl9SQU5HRV8xNl8y MzU7Cj4gIAo+IC0Jd2l0aF9wcHNfbG9jayhpbnRlbF9kcCwgd2FrZXJlZikgewo+IC0JCWk5MTVf cmVnX3QgcHBfY3RybF9yZWcgPSBfcHBfY3RybF9yZWcoaW50ZWxfZHApOwo+IC0JCXUzMiBwcDsK PiArCQlpZiAoYWRqdXN0ZWRfbW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX1BIU1lOQykKPiAr CQkJaW50ZWxfZHAtPkRQIHw9IERQX1NZTkNfSFNfSElHSDsKPiArCQlpZiAoYWRqdXN0ZWRfbW9k ZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX1BWU1lOQykKPiArCQkJaW50ZWxfZHAtPkRQIHw9IERQ X1NZTkNfVlNfSElHSDsKPiArCQlpbnRlbF9kcC0+RFAgfD0gRFBfTElOS19UUkFJTl9PRkY7Cj4g IAo+IC0JCXBwID0gaWxrX2dldF9wcF9jb250cm9sKGludGVsX2RwKTsKPiAtCQlwcCB8PSBFRFBf QkxDX0VOQUJMRTsKPiArCQlpZiAoZHJtX2RwX2VuaGFuY2VkX2ZyYW1lX2NhcChpbnRlbF9kcC0+ ZHBjZCkpCj4gKwkJCWludGVsX2RwLT5EUCB8PSBEUF9FTkhBTkNFRF9GUkFNSU5HOwo+ICAKPiAt CQlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgcHBfY3RybF9yZWcsIHBwKTsKPiAtCQlpbnRlbF9k ZV9wb3N0aW5nX3JlYWQoZGV2X3ByaXYsIHBwX2N0cmxfcmVnKTsKPiArCQlpZiAoSVNfQ0hFUlJZ VklFVyhkZXZfcHJpdikpCj4gKwkJCWludGVsX2RwLT5EUCB8PSBEUF9QSVBFX1NFTF9DSFYoY3J0 Yy0+cGlwZSk7Cj4gKwkJZWxzZQo+ICsJCQlpbnRlbF9kcC0+RFAgfD0gRFBfUElQRV9TRUwoY3J0 Yy0+cGlwZSk7Cj4gIAl9Cj4gIH0KPiAgCj4gKwo+ICAvKiBFbmFibGUgYmFja2xpZ2h0IFBXTSBh bmQgYmFja2xpZ2h0IFBQIGNvbnRyb2wuICovCj4gIHZvaWQgaW50ZWxfZWRwX2JhY2tsaWdodF9v bihjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKPiAgCQkJICAgIGNv bnN0IHN0cnVjdCBkcm1fY29ubmVjdG9yX3N0YXRlICpjb25uX3N0YXRlKQo+IEBAIC0zNDMyLDMw ICsyNTY2LDYgQEAgdm9pZCBpbnRlbF9lZHBfYmFja2xpZ2h0X29uKGNvbnN0IHN0cnVjdCBpbnRl bF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAo+ICAJX2ludGVsX2VkcF9iYWNrbGlnaHRfb24oaW50 ZWxfZHApOwo+ICB9Cj4gIAo+IC0vKiBEaXNhYmxlIGJhY2tsaWdodCBpbiB0aGUgcGFuZWwgcG93 ZXIgY29udHJvbC4gKi8KPiAtc3RhdGljIHZvaWQgX2ludGVsX2VkcF9iYWNrbGlnaHRfb2ZmKHN0 cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApCj4gLXsKPiAtCXN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICpkZXZfcHJpdiA9IGRwX3RvX2k5MTUoaW50ZWxfZHApOwo+IC0JaW50ZWxfd2FrZXJlZl90IHdh a2VyZWY7Cj4gLQo+IC0JaWYgKCFpbnRlbF9kcF9pc19lZHAoaW50ZWxfZHApKQo+IC0JCXJldHVy bjsKPiAtCj4gLQl3aXRoX3Bwc19sb2NrKGludGVsX2RwLCB3YWtlcmVmKSB7Cj4gLQkJaTkxNV9y ZWdfdCBwcF9jdHJsX3JlZyA9IF9wcF9jdHJsX3JlZyhpbnRlbF9kcCk7Cj4gLQkJdTMyIHBwOwo+ IC0KPiAtCQlwcCA9IGlsa19nZXRfcHBfY29udHJvbChpbnRlbF9kcCk7Cj4gLQkJcHAgJj0gfkVE UF9CTENfRU5BQkxFOwo+IC0KPiAtCQlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgcHBfY3RybF9y ZWcsIHBwKTsKPiAtCQlpbnRlbF9kZV9wb3N0aW5nX3JlYWQoZGV2X3ByaXYsIHBwX2N0cmxfcmVn KTsKPiAtCX0KPiAtCj4gLQlpbnRlbF9kcC0+bGFzdF9iYWNrbGlnaHRfb2ZmID0gamlmZmllczsK PiAtCWVkcF93YWl0X2JhY2tsaWdodF9vZmYoaW50ZWxfZHApOwo+IC19Cj4gLQo+ICAvKiBEaXNh YmxlIGJhY2tsaWdodCBQUCBjb250cm9sIGFuZCBiYWNrbGlnaHQgUFdNLiAqLwo+ICB2b2lkIGlu dGVsX2VkcF9iYWNrbGlnaHRfb2ZmKGNvbnN0IHN0cnVjdCBkcm1fY29ubmVjdG9yX3N0YXRlICpv bGRfY29ubl9zdGF0ZSkKPiAgewo+IEBAIC0zNDcxLDMzICsyNTgxLDYgQEAgdm9pZCBpbnRlbF9l ZHBfYmFja2xpZ2h0X29mZihjb25zdCBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9zdGF0ZSAqb2xkX2Nv bm5fc3RhdGUpCj4gIAlpbnRlbF9wYW5lbF9kaXNhYmxlX2JhY2tsaWdodChvbGRfY29ubl9zdGF0 ZSk7Cj4gIH0KPiAgCj4gLS8qCj4gLSAqIEhvb2sgZm9yIGNvbnRyb2xsaW5nIHRoZSBwYW5lbCBw b3dlciBjb250cm9sIGJhY2tsaWdodCB0aHJvdWdoIHRoZSBibF9wb3dlcgo+IC0gKiBzeXNmcyBh dHRyaWJ1dGUuIFRha2UgY2FyZSB0byBoYW5kbGUgbXVsdGlwbGUgY2FsbHMuCj4gLSAqLwo+IC1z dGF0aWMgdm9pZCBpbnRlbF9lZHBfYmFja2xpZ2h0X3Bvd2VyKHN0cnVjdCBpbnRlbF9jb25uZWN0 b3IgKmNvbm5lY3RvciwKPiAtCQkJCSAgICAgIGJvb2wgZW5hYmxlKQo+IC17Cj4gLQlzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IHRvX2k5MTUoY29ubmVjdG9yLT5iYXNlLmRldik7Cj4g LQlzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwID0gaW50ZWxfYXR0YWNoZWRfZHAoY29ubmVjdG9y KTsKPiAtCWludGVsX3dha2VyZWZfdCB3YWtlcmVmOwo+IC0JYm9vbCBpc19lbmFibGVkOwo+IC0K PiAtCWlzX2VuYWJsZWQgPSBmYWxzZTsKPiAtCXdpdGhfcHBzX2xvY2soaW50ZWxfZHAsIHdha2Vy ZWYpCj4gLQkJaXNfZW5hYmxlZCA9IGlsa19nZXRfcHBfY29udHJvbChpbnRlbF9kcCkgJiBFRFBf QkxDX0VOQUJMRTsKPiAtCWlmIChpc19lbmFibGVkID09IGVuYWJsZSkKPiAtCQlyZXR1cm47Cj4g LQo+IC0JZHJtX2RiZ19rbXMoJmk5MTUtPmRybSwgInBhbmVsIHBvd2VyIGNvbnRyb2wgYmFja2xp Z2h0ICVzXG4iLAo+IC0JCSAgICBlbmFibGUgPyAiZW5hYmxlIiA6ICJkaXNhYmxlIik7Cj4gLQo+ IC0JaWYgKGVuYWJsZSkKPiAtCQlfaW50ZWxfZWRwX2JhY2tsaWdodF9vbihpbnRlbF9kcCk7Cj4g LQllbHNlCj4gLQkJX2ludGVsX2VkcF9iYWNrbGlnaHRfb2ZmKGludGVsX2RwKTsKPiAtfQo+IC0K PiAgc3RhdGljIHZvaWQgYXNzZXJ0X2RwX3BvcnQoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCwg Ym9vbCBzdGF0ZSkKPiAgewo+ICAJc3RydWN0IGludGVsX2RpZ2l0YWxfcG9ydCAqZGlnX3BvcnQg PSBkcF90b19kaWdfcG9ydChpbnRlbF9kcCk7Cj4gQEAgLTQ0OTgsMTEyICszNTgxLDYgQEAgc3Rh dGljIHZvaWQgZzR4X3ByZV9lbmFibGVfZHAoc3RydWN0IGludGVsX2F0b21pY19zdGF0ZSAqc3Rh dGUsCj4gIAkJaWxrX2VkcF9wbGxfb24oaW50ZWxfZHAsIHBpcGVfY29uZmlnKTsKPiAgfQo+ICAK PiAtc3RhdGljIHZvaWQgdmx2X2RldGFjaF9wb3dlcl9zZXF1ZW5jZXIoc3RydWN0IGludGVsX2Rw ICppbnRlbF9kcCkKPiAtewo+IC0Jc3RydWN0IGludGVsX2RpZ2l0YWxfcG9ydCAqZGlnX3BvcnQg PSBkcF90b19kaWdfcG9ydChpbnRlbF9kcCk7Cj4gLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq ZGV2X3ByaXYgPSB0b19pOTE1KGRpZ19wb3J0LT5iYXNlLmJhc2UuZGV2KTsKPiAtCWVudW0gcGlw ZSBwaXBlID0gaW50ZWxfZHAtPnBwc19waXBlOwo+IC0JaTkxNV9yZWdfdCBwcF9vbl9yZWcgPSBQ UF9PTl9ERUxBWVMocGlwZSk7Cj4gLQo+IC0JZHJtX1dBUk5fT04oJmRldl9wcml2LT5kcm0sIGlu dGVsX2RwLT5hY3RpdmVfcGlwZSAhPSBJTlZBTElEX1BJUEUpOwo+IC0KPiAtCWlmIChkcm1fV0FS Tl9PTigmZGV2X3ByaXYtPmRybSwgcGlwZSAhPSBQSVBFX0EgJiYgcGlwZSAhPSBQSVBFX0IpKQo+ IC0JCXJldHVybjsKPiAtCj4gLQllZHBfcGFuZWxfdmRkX29mZl9zeW5jKGludGVsX2RwKTsKPiAt Cj4gLQkvKgo+IC0JICogVkxWIHNlZW1zIHRvIGdldCBjb25mdXNlZCB3aGVuIG11bHRpcGxlIHBv d2VyIHNlcXVlbmNlcnMKPiAtCSAqIGhhdmUgdGhlIHNhbWUgcG9ydCBzZWxlY3RlZCAoZXZlbiBp ZiBvbmx5IG9uZSBoYXMgcG93ZXIvdmRkCj4gLQkgKiBlbmFibGVkKS4gVGhlIGZhaWx1cmUgbWFu aWZlc3RzIGFzIHZsdl93YWl0X3BvcnRfcmVhZHkoKSBmYWlsaW5nCj4gLQkgKiBDSFYgb24gdGhl IG90aGVyIGhhbmQgZG9lc24ndCBzZWVtIHRvIG1pbmQgaGF2aW5nIHRoZSBzYW1lIHBvcnQKPiAt CSAqIHNlbGVjdGVkIGluIG11bHRpcGxlIHBvd2VyIHNlcXVlbmNlcnMsIGJ1dCBsZXQncyBjbGVh ciB0aGUKPiAtCSAqIHBvcnQgc2VsZWN0IGFsd2F5cyB3aGVuIGxvZ2ljYWxseSBkaXNjb25uZWN0 aW5nIGEgcG93ZXIgc2VxdWVuY2VyCj4gLQkgKiBmcm9tIGEgcG9ydC4KPiAtCSAqLwo+IC0JZHJt X2RiZ19rbXMoJmRldl9wcml2LT5kcm0sCj4gLQkJICAgICJkZXRhY2hpbmcgcGlwZSAlYyBwb3dl ciBzZXF1ZW5jZXIgZnJvbSBbRU5DT0RFUjolZDolc11cbiIsCj4gLQkJICAgIHBpcGVfbmFtZShw aXBlKSwgZGlnX3BvcnQtPmJhc2UuYmFzZS5iYXNlLmlkLAo+IC0JCSAgICBkaWdfcG9ydC0+YmFz ZS5iYXNlLm5hbWUpOwo+IC0JaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIHBwX29uX3JlZywgMCk7 Cj4gLQlpbnRlbF9kZV9wb3N0aW5nX3JlYWQoZGV2X3ByaXYsIHBwX29uX3JlZyk7Cj4gLQo+IC0J aW50ZWxfZHAtPnBwc19waXBlID0gSU5WQUxJRF9QSVBFOwo+IC19Cj4gLQo+IC1zdGF0aWMgdm9p ZCB2bHZfc3RlYWxfcG93ZXJfc2VxdWVuY2VyKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZf cHJpdiwKPiAtCQkJCSAgICAgIGVudW0gcGlwZSBwaXBlKQo+IC17Cj4gLQlzdHJ1Y3QgaW50ZWxf ZW5jb2RlciAqZW5jb2RlcjsKPiAtCj4gLQlsb2NrZGVwX2Fzc2VydF9oZWxkKCZkZXZfcHJpdi0+ cHBzX211dGV4KTsKPiAtCj4gLQlmb3JfZWFjaF9pbnRlbF9kcCgmZGV2X3ByaXYtPmRybSwgZW5j b2Rlcikgewo+IC0JCXN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAgPSBlbmNfdG9faW50ZWxfZHAo ZW5jb2Rlcik7Cj4gLQo+IC0JCWRybV9XQVJOKCZkZXZfcHJpdi0+ZHJtLCBpbnRlbF9kcC0+YWN0 aXZlX3BpcGUgPT0gcGlwZSwKPiAtCQkJICJzdGVhbGluZyBwaXBlICVjIHBvd2VyIHNlcXVlbmNl ciBmcm9tIGFjdGl2ZSBbRU5DT0RFUjolZDolc11cbiIsCj4gLQkJCSBwaXBlX25hbWUocGlwZSks IGVuY29kZXItPmJhc2UuYmFzZS5pZCwKPiAtCQkJIGVuY29kZXItPmJhc2UubmFtZSk7Cj4gLQo+ IC0JCWlmIChpbnRlbF9kcC0+cHBzX3BpcGUgIT0gcGlwZSkKPiAtCQkJY29udGludWU7Cj4gLQo+ IC0JCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJtLAo+IC0JCQkgICAgInN0ZWFsaW5nIHBpcGUg JWMgcG93ZXIgc2VxdWVuY2VyIGZyb20gW0VOQ09ERVI6JWQ6JXNdXG4iLAo+IC0JCQkgICAgcGlw ZV9uYW1lKHBpcGUpLCBlbmNvZGVyLT5iYXNlLmJhc2UuaWQsCj4gLQkJCSAgICBlbmNvZGVyLT5i YXNlLm5hbWUpOwo+IC0KPiAtCQkvKiBtYWtlIHN1cmUgdmRkIGlzIG9mZiBiZWZvcmUgd2Ugc3Rl YWwgaXQgKi8KPiAtCQl2bHZfZGV0YWNoX3Bvd2VyX3NlcXVlbmNlcihpbnRlbF9kcCk7Cj4gLQl9 Cj4gLX0KPiAtCj4gLXN0YXRpYyB2b2lkIHZsdl9pbml0X3BhbmVsX3Bvd2VyX3NlcXVlbmNlcihz dHJ1Y3QgaW50ZWxfZW5jb2RlciAqZW5jb2RlciwKPiAtCQkJCQkgICBjb25zdCBzdHJ1Y3QgaW50 ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSkKPiAtewo+IC0Jc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2ID0gdG9faTkxNShlbmNvZGVyLT5iYXNlLmRldik7Cj4gLQlzdHJ1Y3QgaW50 ZWxfZHAgKmludGVsX2RwID0gZW5jX3RvX2ludGVsX2RwKGVuY29kZXIpOwo+IC0Jc3RydWN0IGlu dGVsX2NydGMgKmNydGMgPSB0b19pbnRlbF9jcnRjKGNydGNfc3RhdGUtPnVhcGkuY3J0Yyk7Cj4g LQo+IC0JbG9ja2RlcF9hc3NlcnRfaGVsZCgmZGV2X3ByaXYtPnBwc19tdXRleCk7Cj4gLQo+IC0J ZHJtX1dBUk5fT04oJmRldl9wcml2LT5kcm0sIGludGVsX2RwLT5hY3RpdmVfcGlwZSAhPSBJTlZB TElEX1BJUEUpOwo+IC0KPiAtCWlmIChpbnRlbF9kcC0+cHBzX3BpcGUgIT0gSU5WQUxJRF9QSVBF ICYmCj4gLQkgICAgaW50ZWxfZHAtPnBwc19waXBlICE9IGNydGMtPnBpcGUpIHsKPiAtCQkvKgo+ IC0JCSAqIElmIGFub3RoZXIgcG93ZXIgc2VxdWVuY2VyIHdhcyBiZWluZyB1c2VkIG9uIHRoaXMK PiAtCQkgKiBwb3J0IHByZXZpb3VzbHkgbWFrZSBzdXJlIHRvIHR1cm4gb2ZmIHZkZCB0aGVyZSB3 aGlsZQo+IC0JCSAqIHdlIHN0aWxsIGhhdmUgY29udHJvbCBvZiBpdC4KPiAtCQkgKi8KPiAtCQl2 bHZfZGV0YWNoX3Bvd2VyX3NlcXVlbmNlcihpbnRlbF9kcCk7Cj4gLQl9Cj4gLQo+IC0JLyoKPiAt CSAqIFdlIG1heSBiZSBzdGVhbGluZyB0aGUgcG93ZXIKPiAtCSAqIHNlcXVlbmNlciBmcm9tIGFu b3RoZXIgcG9ydC4KPiAtCSAqLwo+IC0Jdmx2X3N0ZWFsX3Bvd2VyX3NlcXVlbmNlcihkZXZfcHJp diwgY3J0Yy0+cGlwZSk7Cj4gLQo+IC0JaW50ZWxfZHAtPmFjdGl2ZV9waXBlID0gY3J0Yy0+cGlw ZTsKPiAtCj4gLQlpZiAoIWludGVsX2RwX2lzX2VkcChpbnRlbF9kcCkpCj4gLQkJcmV0dXJuOwo+ IC0KPiAtCS8qIG5vdyBpdCdzIGFsbCBvdXJzICovCj4gLQlpbnRlbF9kcC0+cHBzX3BpcGUgPSBj cnRjLT5waXBlOwo+IC0KPiAtCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJtLAo+IC0JCSAgICAi aW5pdGlhbGl6aW5nIHBpcGUgJWMgcG93ZXIgc2VxdWVuY2VyIGZvciBbRU5DT0RFUjolZDolc11c biIsCj4gLQkJICAgIHBpcGVfbmFtZShpbnRlbF9kcC0+cHBzX3BpcGUpLCBlbmNvZGVyLT5iYXNl LmJhc2UuaWQsCj4gLQkJICAgIGVuY29kZXItPmJhc2UubmFtZSk7Cj4gLQo+IC0JLyogaW5pdCBw b3dlciBzZXF1ZW5jZXIgb24gdGhpcyBwaXBlIGFuZCBwb3J0ICovCj4gLQlpbnRlbF9kcF9pbml0 X3BhbmVsX3Bvd2VyX3NlcXVlbmNlcihpbnRlbF9kcCk7Cj4gLQlpbnRlbF9kcF9pbml0X3BhbmVs X3Bvd2VyX3NlcXVlbmNlcl9yZWdpc3RlcnMoaW50ZWxfZHAsIHRydWUpOwo+IC19Cj4gLQo+ICBz dGF0aWMgdm9pZCB2bHZfcHJlX2VuYWJsZV9kcChzdHJ1Y3QgaW50ZWxfYXRvbWljX3N0YXRlICpz dGF0ZSwKPiAgCQkJICAgICAgc3RydWN0IGludGVsX2VuY29kZXIgKmVuY29kZXIsCj4gIAkJCSAg ICAgIGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpwaXBlX2NvbmZpZywKPiBAQCAtNzMy NCwzMSArNjMwMSw2IEBAIHZvaWQgaW50ZWxfZHBfZW5jb2Rlcl9zaHV0ZG93bihzdHJ1Y3QgaW50 ZWxfZW5jb2RlciAqaW50ZWxfZW5jb2RlcikKPiAgCQl3YWl0X3BhbmVsX3Bvd2VyX2N5Y2xlKGlu dGVsX2RwKTsKPiAgfQo+ICAKPiAtc3RhdGljIHZvaWQgaW50ZWxfZWRwX3BhbmVsX3ZkZF9zYW5p dGl6ZShzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKQo+IC17Cj4gLQlzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqZGV2X3ByaXYgPSBkcF90b19pOTE1KGludGVsX2RwKTsKPiAtCXN0cnVjdCBpbnRl bF9kaWdpdGFsX3BvcnQgKmRpZ19wb3J0ID0gZHBfdG9fZGlnX3BvcnQoaW50ZWxfZHApOwo+IC0K PiAtCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmRldl9wcml2LT5wcHNfbXV0ZXgpOwo+IC0KPiAtCWlm ICghZWRwX2hhdmVfcGFuZWxfdmRkKGludGVsX2RwKSkKPiAtCQlyZXR1cm47Cj4gLQo+IC0JLyoK PiAtCSAqIFRoZSBWREQgYml0IG5lZWRzIGEgcG93ZXIgZG9tYWluIHJlZmVyZW5jZSwgc28gaWYg dGhlIGJpdCBpcwo+IC0JICogYWxyZWFkeSBlbmFibGVkIHdoZW4gd2UgYm9vdCBvciByZXN1bWUs IGdyYWIgdGhpcyByZWZlcmVuY2UgYW5kCj4gLQkgKiBzY2hlZHVsZSBhIHZkZCBvZmYsIHNvIHdl IGRvbid0IGhvbGQgb24gdG8gdGhlIHJlZmVyZW5jZQo+IC0JICogaW5kZWZpbml0ZWx5Lgo+IC0J ICovCj4gLQlkcm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwKPiAtCQkgICAgIlZERCBsZWZ0IG9u IGJ5IEJJT1MsIGFkanVzdGluZyBzdGF0ZSB0cmFja2luZ1xuIik7Cj4gLQlkcm1fV0FSTl9PTigm ZGV2X3ByaXYtPmRybSwgaW50ZWxfZHAtPnZkZF93YWtlcmVmKTsKPiAtCWludGVsX2RwLT52ZGRf d2FrZXJlZiA9IGludGVsX2Rpc3BsYXlfcG93ZXJfZ2V0KGRldl9wcml2LAo+IC0JCQkJCQkJaW50 ZWxfYXV4X3Bvd2VyX2RvbWFpbihkaWdfcG9ydCkpOwo+IC0KPiAtCWVkcF9wYW5lbF92ZGRfc2No ZWR1bGVfb2ZmKGludGVsX2RwKTsKPiAtfQo+IC0KPiAgc3RhdGljIGVudW0gcGlwZSB2bHZfYWN0 aXZlX3BpcGUoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCkKPiAgewo+ICAJc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZHBfdG9faTkxNShpbnRlbF9kcCk7Cj4gQEAgLTc1NTQs MTkgKzY1MDYsNiBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9lbmNvZGVyX2Z1bmNzIGludGVs X2RwX2VuY19mdW5jcyA9IHsKPiAgCS5kZXN0cm95ID0gaW50ZWxfZHBfZW5jb2Rlcl9kZXN0cm95 LAo+ICB9Owo+ICAKPiAtc3RhdGljIGJvb2wgaW50ZWxfZWRwX2hhdmVfcG93ZXIoc3RydWN0IGlu dGVsX2RwICppbnRlbF9kcCkKPiAtewo+IC0JaW50ZWxfd2FrZXJlZl90IHdha2VyZWY7Cj4gLQli b29sIGhhdmVfcG93ZXIgPSBmYWxzZTsKPiAtCj4gLQl3aXRoX3Bwc19sb2NrKGludGVsX2RwLCB3 YWtlcmVmKSB7Cj4gLQkJaGF2ZV9wb3dlciA9IGVkcF9oYXZlX3BhbmVsX3Bvd2VyKGludGVsX2Rw KSAmJgo+IC0JCQkJCQkgIGVkcF9oYXZlX3BhbmVsX3ZkZChpbnRlbF9kcCk7Cj4gLQl9Cj4gLQo+ IC0JcmV0dXJuIGhhdmVfcG93ZXI7Cj4gLX0KPiAtCj4gIGVudW0gaXJxcmV0dXJuCj4gIGludGVs X2RwX2hwZF9wdWxzZShzdHJ1Y3QgaW50ZWxfZGlnaXRhbF9wb3J0ICpkaWdfcG9ydCwgYm9vbCBs b25nX2hwZCkKPiAgewo+IEBAIC03NjcwLDI3NyArNjYwOSw2IEBAIGludGVsX2RwX2FkZF9wcm9w ZXJ0aWVzKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAsIHN0cnVjdCBkcm1fY29ubmVjdG9yICpj b25uZWN0Cj4gIAl9Cj4gIH0KPiAgCj4gLXN0YXRpYyB2b2lkIGludGVsX2RwX2luaXRfcGFuZWxf cG93ZXJfdGltZXN0YW1wcyhzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKQo+IC17Cj4gLQlpbnRl bF9kcC0+cGFuZWxfcG93ZXJfb2ZmX3RpbWUgPSBrdGltZV9nZXRfYm9vdHRpbWUoKTsKPiAtCWlu dGVsX2RwLT5sYXN0X3Bvd2VyX29uID0gamlmZmllczsKPiAtCWludGVsX2RwLT5sYXN0X2JhY2ts aWdodF9vZmYgPSBqaWZmaWVzOwo+IC19Cj4gLQo+IC1zdGF0aWMgdm9pZAo+IC1pbnRlbF9wcHNf cmVhZG91dF9od19zdGF0ZShzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwLCBzdHJ1Y3QgZWRwX3Bv d2VyX3NlcSAqc2VxKQo+IC17Cj4gLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYg PSBkcF90b19pOTE1KGludGVsX2RwKTsKPiAtCXUzMiBwcF9vbiwgcHBfb2ZmLCBwcF9jdGw7Cj4g LQlzdHJ1Y3QgcHBzX3JlZ2lzdGVycyByZWdzOwo+IC0KPiAtCWludGVsX3Bwc19nZXRfcmVnaXN0 ZXJzKGludGVsX2RwLCAmcmVncyk7Cj4gLQo+IC0JcHBfY3RsID0gaWxrX2dldF9wcF9jb250cm9s KGludGVsX2RwKTsKPiAtCj4gLQkvKiBFbnN1cmUgUFBTIGlzIHVubG9ja2VkICovCj4gLQlpZiAo IUhBU19EREkoZGV2X3ByaXYpKQo+IC0JCWludGVsX2RlX3dyaXRlKGRldl9wcml2LCByZWdzLnBw X2N0cmwsIHBwX2N0bCk7Cj4gLQo+IC0JcHBfb24gPSBpbnRlbF9kZV9yZWFkKGRldl9wcml2LCBy ZWdzLnBwX29uKTsKPiAtCXBwX29mZiA9IGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIHJlZ3MucHBf b2ZmKTsKPiAtCj4gLQkvKiBQdWxsIHRpbWluZyB2YWx1ZXMgb3V0IG9mIHJlZ2lzdGVycyAqLwo+ IC0Jc2VxLT50MV90MyA9IFJFR19GSUVMRF9HRVQoUEFORUxfUE9XRVJfVVBfREVMQVlfTUFTSywg cHBfb24pOwo+IC0Jc2VxLT50OCA9IFJFR19GSUVMRF9HRVQoUEFORUxfTElHSFRfT05fREVMQVlf TUFTSywgcHBfb24pOwo+IC0Jc2VxLT50OSA9IFJFR19GSUVMRF9HRVQoUEFORUxfTElHSFRfT0ZG X0RFTEFZX01BU0ssIHBwX29mZik7Cj4gLQlzZXEtPnQxMCA9IFJFR19GSUVMRF9HRVQoUEFORUxf UE9XRVJfRE9XTl9ERUxBWV9NQVNLLCBwcF9vZmYpOwo+IC0KPiAtCWlmIChpOTE1X21taW9fcmVn X3ZhbGlkKHJlZ3MucHBfZGl2KSkgewo+IC0JCXUzMiBwcF9kaXY7Cj4gLQo+IC0JCXBwX2RpdiA9 IGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIHJlZ3MucHBfZGl2KTsKPiAtCj4gLQkJc2VxLT50MTFf dDEyID0gUkVHX0ZJRUxEX0dFVChQQU5FTF9QT1dFUl9DWUNMRV9ERUxBWV9NQVNLLCBwcF9kaXYp ICogMTAwMDsKPiAtCX0gZWxzZSB7Cj4gLQkJc2VxLT50MTFfdDEyID0gUkVHX0ZJRUxEX0dFVChC WFRfUE9XRVJfQ1lDTEVfREVMQVlfTUFTSywgcHBfY3RsKSAqIDEwMDA7Cj4gLQl9Cj4gLX0KPiAt Cj4gLXN0YXRpYyB2b2lkCj4gLWludGVsX3Bwc19kdW1wX3N0YXRlKGNvbnN0IGNoYXIgKnN0YXRl X25hbWUsIGNvbnN0IHN0cnVjdCBlZHBfcG93ZXJfc2VxICpzZXEpCj4gLXsKPiAtCURSTV9ERUJV R19LTVMoIiVzIHQxX3QzICVkIHQ4ICVkIHQ5ICVkIHQxMCAlZCB0MTFfdDEyICVkXG4iLAo+IC0J CSAgICAgIHN0YXRlX25hbWUsCj4gLQkJICAgICAgc2VxLT50MV90Mywgc2VxLT50OCwgc2VxLT50 OSwgc2VxLT50MTAsIHNlcS0+dDExX3QxMik7Cj4gLX0KPiAtCj4gLXN0YXRpYyB2b2lkCj4gLWlu dGVsX3Bwc192ZXJpZnlfc3RhdGUoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCkKPiAtewo+IC0J c3RydWN0IGVkcF9wb3dlcl9zZXEgaHc7Cj4gLQlzdHJ1Y3QgZWRwX3Bvd2VyX3NlcSAqc3cgPSAm aW50ZWxfZHAtPnBwc19kZWxheXM7Cj4gLQo+IC0JaW50ZWxfcHBzX3JlYWRvdXRfaHdfc3RhdGUo aW50ZWxfZHAsICZodyk7Cj4gLQo+IC0JaWYgKGh3LnQxX3QzICE9IHN3LT50MV90MyB8fCBody50 OCAhPSBzdy0+dDggfHwgaHcudDkgIT0gc3ctPnQ5IHx8Cj4gLQkgICAgaHcudDEwICE9IHN3LT50 MTAgfHwgaHcudDExX3QxMiAhPSBzdy0+dDExX3QxMikgewo+IC0JCURSTV9FUlJPUigiUFBTIHN0 YXRlIG1pc21hdGNoXG4iKTsKPiAtCQlpbnRlbF9wcHNfZHVtcF9zdGF0ZSgic3ciLCBzdyk7Cj4g LQkJaW50ZWxfcHBzX2R1bXBfc3RhdGUoImh3IiwgJmh3KTsKPiAtCX0KPiAtfQo+IC0KPiAtc3Rh dGljIHZvaWQKPiAtaW50ZWxfZHBfaW5pdF9wYW5lbF9wb3dlcl9zZXF1ZW5jZXIoc3RydWN0IGlu dGVsX2RwICppbnRlbF9kcCkKPiAtewo+IC0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9w cml2ID0gZHBfdG9faTkxNShpbnRlbF9kcCk7Cj4gLQlzdHJ1Y3QgZWRwX3Bvd2VyX3NlcSBjdXIs IHZidCwgc3BlYywKPiAtCQkqZmluYWwgPSAmaW50ZWxfZHAtPnBwc19kZWxheXM7Cj4gLQo+IC0J bG9ja2RlcF9hc3NlcnRfaGVsZCgmZGV2X3ByaXYtPnBwc19tdXRleCk7Cj4gLQo+IC0JLyogYWxy ZWFkeSBpbml0aWFsaXplZD8gKi8KPiAtCWlmIChmaW5hbC0+dDExX3QxMiAhPSAwKQo+IC0JCXJl dHVybjsKPiAtCj4gLQlpbnRlbF9wcHNfcmVhZG91dF9od19zdGF0ZShpbnRlbF9kcCwgJmN1cik7 Cj4gLQo+IC0JaW50ZWxfcHBzX2R1bXBfc3RhdGUoImN1ciIsICZjdXIpOwo+IC0KPiAtCXZidCA9 IGRldl9wcml2LT52YnQuZWRwLnBwczsKPiAtCS8qIE9uIFRvc2hpYmEgU2F0ZWxsaXRlIFA1MC1D LTE4QyBzeXN0ZW0gdGhlIFZCVCBUMTIgZGVsYXkKPiAtCSAqIG9mIDUwMG1zIGFwcGVhcnMgdG8g YmUgdG9vIHNob3J0LiBPY2Fzc2lvbmFsbHkgdGhlIHBhbmVsCj4gLQkgKiBqdXN0IGZhaWxzIHRv IHBvd2VyIGJhY2sgb24uIEluY3JlYXNpbmcgdGhlIGRlbGF5IHRvIDgwMG1zCj4gLQkgKiBzZWVt cyBzdWZmaWNpZW50IHRvIGF2b2lkIHRoaXMgcHJvYmxlbS4KPiAtCSAqLwo+IC0JaWYgKGRldl9w cml2LT5xdWlya3MgJiBRVUlSS19JTkNSRUFTRV9UMTJfREVMQVkpIHsKPiAtCQl2YnQudDExX3Qx MiA9IG1heF90KHUxNiwgdmJ0LnQxMV90MTIsIDEzMDAgKiAxMCk7Cj4gLQkJZHJtX2RiZ19rbXMo JmRldl9wcml2LT5kcm0sCj4gLQkJCSAgICAiSW5jcmVhc2luZyBUMTIgcGFuZWwgZGVsYXkgYXMg cGVyIHRoZSBxdWlyayB0byAlZFxuIiwKPiAtCQkJICAgIHZidC50MTFfdDEyKTsKPiAtCX0KPiAt CS8qIFQxMV9UMTIgZGVsYXkgaXMgc3BlY2lhbCBhbmQgYWN0dWFsbHkgaW4gdW5pdHMgb2YgMTAw bXMsIGJ1dCB6ZXJvCj4gLQkgKiBiYXNlZCBpbiB0aGUgaHcgKHNvIHdlIG5lZWQgdG8gYWRkIDEw MCBtcykuIEJ1dCB0aGUgc3cgdmJ0Cj4gLQkgKiB0YWJsZSBtdWx0aXBsaWVzIGl0IHdpdGggMTAw MCB0byBtYWtlIGl0IGluIHVuaXRzIG9mIDEwMHVzZWMsCj4gLQkgKiB0b28uICovCj4gLQl2YnQu dDExX3QxMiArPSAxMDAgKiAxMDsKPiAtCj4gLQkvKiBVcHBlciBsaW1pdHMgZnJvbSBlRFAgMS4z IHNwZWMuIE5vdGUgdGhhdCB3ZSB1c2UgdGhlIGNsdW5reSB1bml0cyBvZgo+IC0JICogb3VyIGh3 IGhlcmUsIHdoaWNoIGFyZSBhbGwgaW4gMTAwdXNlYy4gKi8KPiAtCXNwZWMudDFfdDMgPSAyMTAg KiAxMDsKPiAtCXNwZWMudDggPSA1MCAqIDEwOyAvKiBubyBsaW1pdCBmb3IgdDgsIHVzZSB0NyBp bnN0ZWFkICovCj4gLQlzcGVjLnQ5ID0gNTAgKiAxMDsgLyogbm8gbGltaXQgZm9yIHQ5LCBtYWtl IGl0IHN5bW1ldHJpYyB3aXRoIHQ4ICovCj4gLQlzcGVjLnQxMCA9IDUwMCAqIDEwOwo+IC0JLyog VGhpcyBvbmUgaXMgc3BlY2lhbCBhbmQgYWN0dWFsbHkgaW4gdW5pdHMgb2YgMTAwbXMsIGJ1dCB6 ZXJvCj4gLQkgKiBiYXNlZCBpbiB0aGUgaHcgKHNvIHdlIG5lZWQgdG8gYWRkIDEwMCBtcykuIEJ1 dCB0aGUgc3cgdmJ0Cj4gLQkgKiB0YWJsZSBtdWx0aXBsaWVzIGl0IHdpdGggMTAwMCB0byBtYWtl IGl0IGluIHVuaXRzIG9mIDEwMHVzZWMsCj4gLQkgKiB0b28uICovCj4gLQlzcGVjLnQxMV90MTIg PSAoNTEwICsgMTAwKSAqIDEwOwo+IC0KPiAtCWludGVsX3Bwc19kdW1wX3N0YXRlKCJ2YnQiLCAm dmJ0KTsKPiAtCj4gLQkvKiBVc2UgdGhlIG1heCBvZiB0aGUgcmVnaXN0ZXIgc2V0dGluZ3MgYW5k IHZidC4gSWYgYm90aCBhcmUKPiAtCSAqIHVuc2V0LCBmYWxsIGJhY2sgdG8gdGhlIHNwZWMgbGlt aXRzLiAqLwo+IC0jZGVmaW5lIGFzc2lnbl9maW5hbChmaWVsZCkJZmluYWwtPmZpZWxkID0gKG1h eChjdXIuZmllbGQsIHZidC5maWVsZCkgPT0gMCA/IFwKPiAtCQkJCSAgICAgICBzcGVjLmZpZWxk IDogXAo+IC0JCQkJICAgICAgIG1heChjdXIuZmllbGQsIHZidC5maWVsZCkpCj4gLQlhc3NpZ25f ZmluYWwodDFfdDMpOwo+IC0JYXNzaWduX2ZpbmFsKHQ4KTsKPiAtCWFzc2lnbl9maW5hbCh0OSk7 Cj4gLQlhc3NpZ25fZmluYWwodDEwKTsKPiAtCWFzc2lnbl9maW5hbCh0MTFfdDEyKTsKPiAtI3Vu ZGVmIGFzc2lnbl9maW5hbAo+IC0KPiAtI2RlZmluZSBnZXRfZGVsYXkoZmllbGQpCShESVZfUk9V TkRfVVAoZmluYWwtPmZpZWxkLCAxMCkpCj4gLQlpbnRlbF9kcC0+cGFuZWxfcG93ZXJfdXBfZGVs YXkgPSBnZXRfZGVsYXkodDFfdDMpOwo+IC0JaW50ZWxfZHAtPmJhY2tsaWdodF9vbl9kZWxheSA9 IGdldF9kZWxheSh0OCk7Cj4gLQlpbnRlbF9kcC0+YmFja2xpZ2h0X29mZl9kZWxheSA9IGdldF9k ZWxheSh0OSk7Cj4gLQlpbnRlbF9kcC0+cGFuZWxfcG93ZXJfZG93bl9kZWxheSA9IGdldF9kZWxh eSh0MTApOwo+IC0JaW50ZWxfZHAtPnBhbmVsX3Bvd2VyX2N5Y2xlX2RlbGF5ID0gZ2V0X2RlbGF5 KHQxMV90MTIpOwo+IC0jdW5kZWYgZ2V0X2RlbGF5Cj4gLQo+IC0JZHJtX2RiZ19rbXMoJmRldl9w cml2LT5kcm0sCj4gLQkJICAgICJwYW5lbCBwb3dlciB1cCBkZWxheSAlZCwgcG93ZXIgZG93biBk ZWxheSAlZCwgcG93ZXIgY3ljbGUgZGVsYXkgJWRcbiIsCj4gLQkJICAgIGludGVsX2RwLT5wYW5l bF9wb3dlcl91cF9kZWxheSwKPiAtCQkgICAgaW50ZWxfZHAtPnBhbmVsX3Bvd2VyX2Rvd25fZGVs YXksCj4gLQkJICAgIGludGVsX2RwLT5wYW5lbF9wb3dlcl9jeWNsZV9kZWxheSk7Cj4gLQo+IC0J ZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sICJiYWNrbGlnaHQgb24gZGVsYXkgJWQsIG9mZiBk ZWxheSAlZFxuIiwKPiAtCQkgICAgaW50ZWxfZHAtPmJhY2tsaWdodF9vbl9kZWxheSwKPiAtCQkg ICAgaW50ZWxfZHAtPmJhY2tsaWdodF9vZmZfZGVsYXkpOwo+IC0KPiAtCS8qCj4gLQkgKiBXZSBv dmVycmlkZSB0aGUgSFcgYmFja2xpZ2h0IGRlbGF5cyB0byAxIGJlY2F1c2Ugd2UgZG8gbWFudWFs IHdhaXRzCj4gLQkgKiBvbiB0aGVtLiBGb3IgVDgsIGV2ZW4gQlNwZWMgcmVjb21tZW5kcyBkb2lu ZyBpdC4gRm9yIFQ5LCBpZiB3ZQo+IC0JICogZG9uJ3QgZG8gdGhpcywgd2UnbGwgZW5kIHVwIHdh aXRpbmcgZm9yIHRoZSBiYWNrbGlnaHQgb2ZmIGRlbGF5Cj4gLQkgKiB0d2ljZTogb25jZSB3aGVu IHdlIGRvIHRoZSBtYW51YWwgc2xlZXAsIGFuZCBvbmNlIHdoZW4gd2UgZGlzYWJsZQo+IC0JICog dGhlIHBhbmVsIGFuZCB3YWl0IGZvciB0aGUgUFBfU1RBVFVTIGJpdCB0byBiZWNvbWUgemVyby4K PiAtCSAqLwo+IC0JZmluYWwtPnQ4ID0gMTsKPiAtCWZpbmFsLT50OSA9IDE7Cj4gLQo+IC0JLyoK PiAtCSAqIEhXIGhhcyBvbmx5IGEgMTAwbXNlYyBncmFudWxhcml0eSBmb3IgdDExX3QxMiBzbyBy b3VuZCBpdCB1cAo+IC0JICogYWNjb3JkaW5nbHkuCj4gLQkgKi8KPiAtCWZpbmFsLT50MTFfdDEy ID0gcm91bmR1cChmaW5hbC0+dDExX3QxMiwgMTAwICogMTApOwo+IC19Cj4gLQo+IC1zdGF0aWMg dm9pZAo+IC1pbnRlbF9kcF9pbml0X3BhbmVsX3Bvd2VyX3NlcXVlbmNlcl9yZWdpc3RlcnMoc3Ry dWN0IGludGVsX2RwICppbnRlbF9kcCwKPiAtCQkJCQkgICAgICBib29sIGZvcmNlX2Rpc2FibGVf dmRkKQo+IC17Cj4gLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkcF90b19p OTE1KGludGVsX2RwKTsKPiAtCXUzMiBwcF9vbiwgcHBfb2ZmLCBwb3J0X3NlbCA9IDA7Cj4gLQlp bnQgZGl2ID0gUlVOVElNRV9JTkZPKGRldl9wcml2KS0+cmF3Y2xrX2ZyZXEgLyAxMDAwOwo+IC0J c3RydWN0IHBwc19yZWdpc3RlcnMgcmVnczsKPiAtCWVudW0gcG9ydCBwb3J0ID0gZHBfdG9fZGln X3BvcnQoaW50ZWxfZHApLT5iYXNlLnBvcnQ7Cj4gLQljb25zdCBzdHJ1Y3QgZWRwX3Bvd2VyX3Nl cSAqc2VxID0gJmludGVsX2RwLT5wcHNfZGVsYXlzOwo+IC0KPiAtCWxvY2tkZXBfYXNzZXJ0X2hl bGQoJmRldl9wcml2LT5wcHNfbXV0ZXgpOwo+IC0KPiAtCWludGVsX3Bwc19nZXRfcmVnaXN0ZXJz KGludGVsX2RwLCAmcmVncyk7Cj4gLQo+IC0JLyoKPiAtCSAqIE9uIHNvbWUgVkxWIG1hY2hpbmVz IHRoZSBCSU9TIGNhbiBsZWF2ZSB0aGUgVkRECj4gLQkgKiBlbmFibGVkIGV2ZW4gb24gcG93ZXIg c2VxdWVuY2VycyB3aGljaCBhcmVuJ3QKPiAtCSAqIGhvb2tlZCB1cCB0byBhbnkgcG9ydC4gVGhp cyB3b3VsZCBtZXNzIHVwIHRoZQo+IC0JICogcG93ZXIgZG9tYWluIHRyYWNraW5nIHRoZSBmaXJz dCB0aW1lIHdlIHBpY2sKPiAtCSAqIG9uZSBvZiB0aGVzZSBwb3dlciBzZXF1ZW5jZXJzIGZvciB1 c2Ugc2luY2UKPiAtCSAqIGVkcF9wYW5lbF92ZGRfb24oKSB3b3VsZCBub3RpY2UgdGhhdCB0aGUg VkREIHdhcwo+IC0JICogYWxyZWFkeSBvbiBhbmQgdGhlcmVmb3JlIHdvdWxkbid0IGdyYWIgdGhl IHBvd2VyCj4gLQkgKiBkb21haW4gcmVmZXJlbmNlLiBEaXNhYmxlIFZERCBmaXJzdCB0byBhdm9p ZCB0aGlzLgo+IC0JICogVGhpcyBhbHNvIGF2b2lkcyBzcHVyaW91c2x5IHR1cm5pbmcgdGhlIFZE RCBvbiBhcwo+IC0JICogc29vbiBhcyB0aGUgbmV3IHBvd2VyIHNlcXVlbmNlciBnZXRzIGluaXRp YWxpemVkLgo+IC0JICovCj4gLQlpZiAoZm9yY2VfZGlzYWJsZV92ZGQpIHsKPiAtCQl1MzIgcHAg PSBpbGtfZ2V0X3BwX2NvbnRyb2woaW50ZWxfZHApOwo+IC0KPiAtCQlkcm1fV0FSTigmZGV2X3By aXYtPmRybSwgcHAgJiBQQU5FTF9QT1dFUl9PTiwKPiAtCQkJICJQYW5lbCBwb3dlciBhbHJlYWR5 IG9uXG4iKTsKPiAtCj4gLQkJaWYgKHBwICYgRURQX0ZPUkNFX1ZERCkKPiAtCQkJZHJtX2RiZ19r bXMoJmRldl9wcml2LT5kcm0sCj4gLQkJCQkgICAgIlZERCBhbHJlYWR5IG9uLCBkaXNhYmxpbmcg Zmlyc3RcbiIpOwo+IC0KPiAtCQlwcCAmPSB+RURQX0ZPUkNFX1ZERDsKPiAtCj4gLQkJaW50ZWxf ZGVfd3JpdGUoZGV2X3ByaXYsIHJlZ3MucHBfY3RybCwgcHApOwo+IC0JfQo+IC0KPiAtCXBwX29u ID0gUkVHX0ZJRUxEX1BSRVAoUEFORUxfUE9XRVJfVVBfREVMQVlfTUFTSywgc2VxLT50MV90Mykg fAo+IC0JCVJFR19GSUVMRF9QUkVQKFBBTkVMX0xJR0hUX09OX0RFTEFZX01BU0ssIHNlcS0+dDgp Owo+IC0JcHBfb2ZmID0gUkVHX0ZJRUxEX1BSRVAoUEFORUxfTElHSFRfT0ZGX0RFTEFZX01BU0ss IHNlcS0+dDkpIHwKPiAtCQlSRUdfRklFTERfUFJFUChQQU5FTF9QT1dFUl9ET1dOX0RFTEFZX01B U0ssIHNlcS0+dDEwKTsKPiAtCj4gLQkvKiBIYXN3ZWxsIGRvZXNuJ3QgaGF2ZSBhbnkgcG9ydCBz ZWxlY3Rpb24gYml0cyBmb3IgdGhlIHBhbmVsCj4gLQkgKiBwb3dlciBzZXF1ZW5jZXIgYW55IG1v cmUuICovCj4gLQlpZiAoSVNfVkFMTEVZVklFVyhkZXZfcHJpdikgfHwgSVNfQ0hFUlJZVklFVyhk ZXZfcHJpdikpIHsKPiAtCQlwb3J0X3NlbCA9IFBBTkVMX1BPUlRfU0VMRUNUX1ZMVihwb3J0KTsK PiAtCX0gZWxzZSBpZiAoSEFTX1BDSF9JQlgoZGV2X3ByaXYpIHx8IEhBU19QQ0hfQ1BUKGRldl9w cml2KSkgewo+IC0JCXN3aXRjaCAocG9ydCkgewo+IC0JCWNhc2UgUE9SVF9BOgo+IC0JCQlwb3J0 X3NlbCA9IFBBTkVMX1BPUlRfU0VMRUNUX0RQQTsKPiAtCQkJYnJlYWs7Cj4gLQkJY2FzZSBQT1JU X0M6Cj4gLQkJCXBvcnRfc2VsID0gUEFORUxfUE9SVF9TRUxFQ1RfRFBDOwo+IC0JCQlicmVhazsK PiAtCQljYXNlIFBPUlRfRDoKPiAtCQkJcG9ydF9zZWwgPSBQQU5FTF9QT1JUX1NFTEVDVF9EUEQ7 Cj4gLQkJCWJyZWFrOwo+IC0JCWRlZmF1bHQ6Cj4gLQkJCU1JU1NJTkdfQ0FTRShwb3J0KTsKPiAt CQkJYnJlYWs7Cj4gLQkJfQo+IC0JfQo+IC0KPiAtCXBwX29uIHw9IHBvcnRfc2VsOwo+IC0KPiAt CWludGVsX2RlX3dyaXRlKGRldl9wcml2LCByZWdzLnBwX29uLCBwcF9vbik7Cj4gLQlpbnRlbF9k ZV93cml0ZShkZXZfcHJpdiwgcmVncy5wcF9vZmYsIHBwX29mZik7Cj4gLQo+IC0JLyoKPiAtCSAq IENvbXB1dGUgdGhlIGRpdmlzb3IgZm9yIHRoZSBwcCBjbG9jaywgc2ltcGx5IG1hdGNoIHRoZSBC c3BlYyBmb3JtdWxhLgo+IC0JICovCj4gLQlpZiAoaTkxNV9tbWlvX3JlZ192YWxpZChyZWdzLnBw X2RpdikpIHsKPiAtCQlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgcmVncy5wcF9kaXYsCj4gLQkJ CSAgICAgICBSRUdfRklFTERfUFJFUChQUF9SRUZFUkVOQ0VfRElWSURFUl9NQVNLLCAoMTAwICog ZGl2KSAvIDIgLSAxKSB8IFJFR19GSUVMRF9QUkVQKFBBTkVMX1BPV0VSX0NZQ0xFX0RFTEFZX01B U0ssIERJVl9ST1VORF9VUChzZXEtPnQxMV90MTIsIDEwMDApKSk7Cj4gLQl9IGVsc2Ugewo+IC0J CXUzMiBwcF9jdGw7Cj4gLQo+IC0JCXBwX2N0bCA9IGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIHJl Z3MucHBfY3RybCk7Cj4gLQkJcHBfY3RsICY9IH5CWFRfUE9XRVJfQ1lDTEVfREVMQVlfTUFTSzsK PiAtCQlwcF9jdGwgfD0gUkVHX0ZJRUxEX1BSRVAoQlhUX1BPV0VSX0NZQ0xFX0RFTEFZX01BU0ss IERJVl9ST1VORF9VUChzZXEtPnQxMV90MTIsIDEwMDApKTsKPiAtCQlpbnRlbF9kZV93cml0ZShk ZXZfcHJpdiwgcmVncy5wcF9jdHJsLCBwcF9jdGwpOwo+IC0JfQo+IC0KPiAtCWRybV9kYmdfa21z KCZkZXZfcHJpdi0+ZHJtLAo+IC0JCSAgICAicGFuZWwgcG93ZXIgc2VxdWVuY2VyIHJlZ2lzdGVy IHNldHRpbmdzOiBQUF9PTiAlI3gsIFBQX09GRiAlI3gsIFBQX0RJViAlI3hcbiIsCj4gLQkJICAg IGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIHJlZ3MucHBfb24pLAo+IC0JCSAgICBpbnRlbF9kZV9y ZWFkKGRldl9wcml2LCByZWdzLnBwX29mZiksCj4gLQkJICAgIGk5MTVfbW1pb19yZWdfdmFsaWQo cmVncy5wcF9kaXYpID8KPiAtCQkgICAgaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgcmVncy5wcF9k aXYpIDoKPiAtCQkgICAgKGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIHJlZ3MucHBfY3RybCkgJiBC WFRfUE9XRVJfQ1lDTEVfREVMQVlfTUFTSykpOwo+IC19Cj4gLQo+IC1zdGF0aWMgdm9pZCBpbnRl bF9kcF9wcHNfaW5pdChzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKQo+IC17Cj4gLQlzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkcF90b19pOTE1KGludGVsX2RwKTsKPiAtCj4g LQlpZiAoSVNfVkFMTEVZVklFVyhkZXZfcHJpdikgfHwgSVNfQ0hFUlJZVklFVyhkZXZfcHJpdikp IHsKPiAtCQl2bHZfaW5pdGlhbF9wb3dlcl9zZXF1ZW5jZXJfc2V0dXAoaW50ZWxfZHApOwo+IC0J fSBlbHNlIHsKPiAtCQlpbnRlbF9kcF9pbml0X3BhbmVsX3Bvd2VyX3NlcXVlbmNlcihpbnRlbF9k cCk7Cj4gLQkJaW50ZWxfZHBfaW5pdF9wYW5lbF9wb3dlcl9zZXF1ZW5jZXJfcmVnaXN0ZXJzKGlu dGVsX2RwLCBmYWxzZSk7Cj4gLQl9Cj4gLX0KPiAtCj4gIC8qKgo+ICAgKiBpbnRlbF9kcF9zZXRf ZHJyc19zdGF0ZSAtIHByb2dyYW0gcmVnaXN0ZXJzIGZvciBSUiBzd2l0Y2ggdG8gdGFrZSBlZmZl Y3QKPiAgICogQGRldl9wcml2OiBpOTE1IGRldmljZQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2RwLmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNw bGF5L2ludGVsX2RwLmgKPiBpbmRleCA0MjgwYTA5ZmQ4ZmQuLmQwN2JjZGVlOTYzOSAxMDA2NDQK PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2RwLmgKPiArKysgYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2RwLmgKPiBAQCAtNzAsMTUgKzcwLDEx IEBAIGVudW0gaXJxcmV0dXJuIGludGVsX2RwX2hwZF9wdWxzZShzdHJ1Y3QgaW50ZWxfZGlnaXRh bF9wb3J0ICpkaWdfcG9ydCwKPiAgdm9pZCBpbnRlbF9lZHBfYmFja2xpZ2h0X29uKGNvbnN0IHN0 cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAo+ICAJCQkgICAgY29uc3Qgc3RydWN0 IGRybV9jb25uZWN0b3Jfc3RhdGUgKmNvbm5fc3RhdGUpOwo+ICB2b2lkIGludGVsX2VkcF9iYWNr bGlnaHRfb2ZmKGNvbnN0IHN0cnVjdCBkcm1fY29ubmVjdG9yX3N0YXRlICpjb25uX3N0YXRlKTsK PiAtdm9pZCBpbnRlbF9lZHBfcGFuZWxfdmRkX29uKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAp Owo+IC12b2lkIGludGVsX2VkcF9wYW5lbF9vbihzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKTsK PiAtdm9pZCBpbnRlbF9lZHBfcGFuZWxfb2ZmKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApOwo+ ICB2b2lkIGludGVsX2RwX21zdF9zdXNwZW5kKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZf cHJpdik7Cj4gIHZvaWQgaW50ZWxfZHBfbXN0X3Jlc3VtZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqZGV2X3ByaXYpOwo+ICBpbnQgaW50ZWxfZHBfbWF4X2xpbmtfcmF0ZShzdHJ1Y3QgaW50ZWxf ZHAgKmludGVsX2RwKTsKPiAgaW50IGludGVsX2RwX21heF9sYW5lX2NvdW50KHN0cnVjdCBpbnRl bF9kcCAqaW50ZWxfZHApOwo+ICBpbnQgaW50ZWxfZHBfcmF0ZV9zZWxlY3Qoc3RydWN0IGludGVs X2RwICppbnRlbF9kcCwgaW50IHJhdGUpOwo+IC12b2lkIGludGVsX3Bvd2VyX3NlcXVlbmNlcl9y ZXNldChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwo+ICB1MzIgaW50ZWxfZHBf cGFja19hdXgoY29uc3QgdTggKnNyYywgaW50IHNyY19ieXRlcyk7Cj4gIAo+ICB2b2lkIGludGVs X2VkcF9kcnJzX2VuYWJsZShzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwLAo+IEBAIC0xNDQsNiAr MTQwLDcgQEAgYm9vbCBpbnRlbF9kcF9pbml0aWFsX2Zhc3RzZXRfY2hlY2soc3RydWN0IGludGVs X2VuY29kZXIgKmVuY29kZXIsCj4gIAkJCQkgICAgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNy dGNfc3RhdGUpOwo+ICB2b2lkIGludGVsX2RwX3N5bmNfc3RhdGUoc3RydWN0IGludGVsX2VuY29k ZXIgKmVuY29kZXIsCj4gIAkJCSBjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19z dGF0ZSk7Cj4gK2NvbnN0IHN0cnVjdCBkcGxsICp2bHZfZ2V0X2RwbGwoc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmk5MTUpOwo+ICAKPiAgdm9pZCBpbnRlbF9kcF9jaGVja19mcmxfdHJhaW5pbmco c3RydWN0IGludGVsX2RwICppbnRlbF9kcCk7Cj4gIHZvaWQgaW50ZWxfZHBfcGNvbl9kc2NfY29u ZmlndXJlKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAsCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfcHBzLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9k aXNwbGF5L2ludGVsX3Bwcy5jCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAw MDAwMDAuLjgzYmQ4M2IzZTNjNAo+IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJzL2dwdS9k cm0vaTkxNS9kaXNwbGF5L2ludGVsX3Bwcy5jCj4gQEAgLTAsMCArMSwxMzM0IEBACj4gKy8vIFNQ RFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQKPiArLyoKPiArICogQ29weXJpZ2h0IMKpIDIwMjAg SW50ZWwgQ29ycG9yYXRpb24KPiArICovCj4gKwo+ICsjaW5jbHVkZSAiaTkxNV9kcnYuaCIKPiAr I2luY2x1ZGUgImludGVsX2Rpc3BsYXlfdHlwZXMuaCIKPiArI2luY2x1ZGUgImludGVsX2RwLmgi Cj4gKyNpbmNsdWRlICJpbnRlbF9wcHMuaCIKPiArCj4gK3N0YXRpYyB2b2lkIHZsdl9zdGVhbF9w b3dlcl9zZXF1ZW5jZXIoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+ICsJCQkJ ICAgICAgZW51bSBwaXBlIHBpcGUpOwo+ICtzdGF0aWMgdm9pZAo+ICtpbnRlbF9kcF9pbml0X3Bh bmVsX3Bvd2VyX3NlcXVlbmNlcihzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKTsKPiArc3RhdGlj IHZvaWQKPiAraW50ZWxfZHBfaW5pdF9wYW5lbF9wb3dlcl9zZXF1ZW5jZXJfcmVnaXN0ZXJzKHN0 cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAsCj4gKwkJCQkJICAgICAgYm9vbCBmb3JjZV9kaXNhYmxl X3ZkZCk7Cj4gKwo+ICtpbnRlbF93YWtlcmVmX3QgcHBzX2xvY2soc3RydWN0IGludGVsX2RwICpp bnRlbF9kcCkKPiArewo+ICsJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZHBf dG9faTkxNShpbnRlbF9kcCk7Cj4gKwlpbnRlbF93YWtlcmVmX3Qgd2FrZXJlZjsKPiArCj4gKwkv Kgo+ICsJICogU2VlIGludGVsX3Bvd2VyX3NlcXVlbmNlcl9yZXNldCgpIHdoeSB3ZSBuZWVkCj4g KwkgKiBhIHBvd2VyIGRvbWFpbiByZWZlcmVuY2UgaGVyZS4KPiArCSAqLwo+ICsJd2FrZXJlZiA9 IGludGVsX2Rpc3BsYXlfcG93ZXJfZ2V0KGRldl9wcml2LCBQT1dFUl9ET01BSU5fRElTUExBWV9D T1JFKTsKPiArCW11dGV4X2xvY2soJmRldl9wcml2LT5wcHNfbXV0ZXgpOwo+ICsKPiArCXJldHVy biB3YWtlcmVmOwo+ICt9Cj4gKwo+ICtpbnRlbF93YWtlcmVmX3QgcHBzX3VubG9jayhzdHJ1Y3Qg aW50ZWxfZHAgKmludGVsX2RwLCBpbnRlbF93YWtlcmVmX3Qgd2FrZXJlZikKPiArewo+ICsJc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZHBfdG9faTkxNShpbnRlbF9kcCk7Cj4g Kwo+ICsJbXV0ZXhfdW5sb2NrKCZkZXZfcHJpdi0+cHBzX211dGV4KTsKPiArCWludGVsX2Rpc3Bs YXlfcG93ZXJfcHV0KGRldl9wcml2LCBQT1dFUl9ET01BSU5fRElTUExBWV9DT1JFLCB3YWtlcmVm KTsKPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQKPiArdmx2X3Bvd2Vy X3NlcXVlbmNlcl9raWNrKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApCj4gK3sKPiArCXN0cnVj dCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRwX3RvX2k5MTUoaW50ZWxfZHApOwo+ICsJ c3RydWN0IGludGVsX2RpZ2l0YWxfcG9ydCAqZGlnX3BvcnQgPSBkcF90b19kaWdfcG9ydChpbnRl bF9kcCk7Cj4gKwllbnVtIHBpcGUgcGlwZSA9IGludGVsX2RwLT5wcHNfcGlwZTsKPiArCWJvb2wg cGxsX2VuYWJsZWQsIHJlbGVhc2VfY2xfb3ZlcnJpZGUgPSBmYWxzZTsKPiArCWVudW0gZHBpb19w aHkgcGh5ID0gRFBJT19QSFkocGlwZSk7Cj4gKwllbnVtIGRwaW9fY2hhbm5lbCBjaCA9IHZsdl9w aXBlX3RvX2NoYW5uZWwocGlwZSk7Cj4gKwl1MzIgRFA7Cj4gKwo+ICsJaWYgKGRybV9XQVJOKCZk ZXZfcHJpdi0+ZHJtLAo+ICsJCSAgICAgaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgaW50ZWxfZHAt Pm91dHB1dF9yZWcpICYgRFBfUE9SVF9FTiwKPiArCQkgICAgICJza2lwcGluZyBwaXBlICVjIHBv d2VyIHNlcXVlbmNlciBraWNrIGR1ZSB0byBbRU5DT0RFUjolZDolc10gYmVpbmcgYWN0aXZlXG4i LAo+ICsJCSAgICAgcGlwZV9uYW1lKHBpcGUpLCBkaWdfcG9ydC0+YmFzZS5iYXNlLmJhc2UuaWQs Cj4gKwkJICAgICBkaWdfcG9ydC0+YmFzZS5iYXNlLm5hbWUpKQo+ICsJCXJldHVybjsKPiArCj4g Kwlkcm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwKPiArCQkgICAgImtpY2tpbmcgcGlwZSAlYyBw b3dlciBzZXF1ZW5jZXIgZm9yIFtFTkNPREVSOiVkOiVzXVxuIiwKPiArCQkgICAgcGlwZV9uYW1l KHBpcGUpLCBkaWdfcG9ydC0+YmFzZS5iYXNlLmJhc2UuaWQsCj4gKwkJICAgIGRpZ19wb3J0LT5i YXNlLmJhc2UubmFtZSk7Cj4gKwo+ICsJLyogUHJlc2VydmUgdGhlIEJJT1MtY29tcHV0ZWQgZGV0 ZWN0ZWQgYml0LiBUaGlzIGlzCj4gKwkgKiBzdXBwb3NlZCB0byBiZSByZWFkLW9ubHkuCj4gKwkg Ki8KPiArCURQID0gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgaW50ZWxfZHAtPm91dHB1dF9yZWcp ICYgRFBfREVURUNURUQ7Cj4gKwlEUCB8PSBEUF9WT0xUQUdFXzBfNCB8IERQX1BSRV9FTVBIQVNJ U18wOwo+ICsJRFAgfD0gRFBfUE9SVF9XSURUSCgxKTsKPiArCURQIHw9IERQX0xJTktfVFJBSU5f UEFUXzE7Cj4gKwo+ICsJaWYgKElTX0NIRVJSWVZJRVcoZGV2X3ByaXYpKQo+ICsJCURQIHw9IERQ X1BJUEVfU0VMX0NIVihwaXBlKTsKPiArCWVsc2UKPiArCQlEUCB8PSBEUF9QSVBFX1NFTChwaXBl KTsKPiArCj4gKwlwbGxfZW5hYmxlZCA9IGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIERQTEwocGlw ZSkpICYgRFBMTF9WQ09fRU5BQkxFOwo+ICsKPiArCS8qCj4gKwkgKiBUaGUgRFBMTCBmb3IgdGhl IHBpcGUgbXVzdCBiZSBlbmFibGVkIGZvciB0aGlzIHRvIHdvcmsuCj4gKwkgKiBTbyBlbmFibGUg dGVtcG9yYXJpbHkgaXQgaWYgaXQncyBub3QgYWxyZWFkeSBlbmFibGVkLgo+ICsJICovCj4gKwlp ZiAoIXBsbF9lbmFibGVkKSB7Cj4gKwkJcmVsZWFzZV9jbF9vdmVycmlkZSA9IElTX0NIRVJSWVZJ RVcoZGV2X3ByaXYpICYmCj4gKwkJCSFjaHZfcGh5X3Bvd2VyZ2F0ZV9jaChkZXZfcHJpdiwgcGh5 LCBjaCwgdHJ1ZSk7Cj4gKwo+ICsJCWlmICh2bHZfZm9yY2VfcGxsX29uKGRldl9wcml2LCBwaXBl LCB2bHZfZ2V0X2RwbGwoZGV2X3ByaXYpKSkgewo+ICsJCQlkcm1fZXJyKCZkZXZfcHJpdi0+ZHJt LAo+ICsJCQkJIkZhaWxlZCB0byBmb3JjZSBvbiBwbGwgZm9yIHBpcGUgJWMhXG4iLAo+ICsJCQkJ cGlwZV9uYW1lKHBpcGUpKTsKPiArCQkJcmV0dXJuOwo+ICsJCX0KPiArCX0KPiArCj4gKwkvKgo+ ICsJICogU2ltaWxhciBtYWdpYyBhcyBpbiBpbnRlbF9kcF9lbmFibGVfcG9ydCgpLgo+ICsJICog V2UgX211c3RfIGRvIHRoaXMgcG9ydCBlbmFibGUgKyBkaXNhYmxlIHRyaWNrCj4gKwkgKiB0byBt YWtlIHRoaXMgcG93ZXIgc2VxdWVuY2VyIGxvY2sgb250byB0aGUgcG9ydC4KPiArCSAqIE90aGVy d2lzZSBldmVuIFZERCBmb3JjZSBiaXQgd29uJ3Qgd29yay4KPiArCSAqLwo+ICsJaW50ZWxfZGVf d3JpdGUoZGV2X3ByaXYsIGludGVsX2RwLT5vdXRwdXRfcmVnLCBEUCk7Cj4gKwlpbnRlbF9kZV9w b3N0aW5nX3JlYWQoZGV2X3ByaXYsIGludGVsX2RwLT5vdXRwdXRfcmVnKTsKPiArCj4gKwlpbnRl bF9kZV93cml0ZShkZXZfcHJpdiwgaW50ZWxfZHAtPm91dHB1dF9yZWcsIERQIHwgRFBfUE9SVF9F Tik7Cj4gKwlpbnRlbF9kZV9wb3N0aW5nX3JlYWQoZGV2X3ByaXYsIGludGVsX2RwLT5vdXRwdXRf cmVnKTsKPiArCj4gKwlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgaW50ZWxfZHAtPm91dHB1dF9y ZWcsIERQICYgfkRQX1BPUlRfRU4pOwo+ICsJaW50ZWxfZGVfcG9zdGluZ19yZWFkKGRldl9wcml2 LCBpbnRlbF9kcC0+b3V0cHV0X3JlZyk7Cj4gKwo+ICsJaWYgKCFwbGxfZW5hYmxlZCkgewo+ICsJ CXZsdl9mb3JjZV9wbGxfb2ZmKGRldl9wcml2LCBwaXBlKTsKPiArCj4gKwkJaWYgKHJlbGVhc2Vf Y2xfb3ZlcnJpZGUpCj4gKwkJCWNodl9waHlfcG93ZXJnYXRlX2NoKGRldl9wcml2LCBwaHksIGNo LCBmYWxzZSk7Cj4gKwl9Cj4gK30KPiArCj4gK3N0YXRpYyBlbnVtIHBpcGUgdmx2X2ZpbmRfZnJl ZV9wcHMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+ICt7Cj4gKwlzdHJ1Y3Qg aW50ZWxfZW5jb2RlciAqZW5jb2RlcjsKPiArCXVuc2lnbmVkIGludCBwaXBlcyA9ICgxIDw8IFBJ UEVfQSkgfCAoMSA8PCBQSVBFX0IpOwo+ICsKPiArCS8qCj4gKwkgKiBXZSBkb24ndCBoYXZlIHBv d2VyIHNlcXVlbmNlciBjdXJyZW50bHkuCj4gKwkgKiBQaWNrIG9uZSB0aGF0J3Mgbm90IHVzZWQg Ynkgb3RoZXIgcG9ydHMuCj4gKwkgKi8KPiArCWZvcl9lYWNoX2ludGVsX2RwKCZkZXZfcHJpdi0+ ZHJtLCBlbmNvZGVyKSB7Cj4gKwkJc3RydWN0IGludGVsX2RwICppbnRlbF9kcCA9IGVuY190b19p bnRlbF9kcChlbmNvZGVyKTsKPiArCj4gKwkJaWYgKGVuY29kZXItPnR5cGUgPT0gSU5URUxfT1VU UFVUX0VEUCkgewo+ICsJCQlkcm1fV0FSTl9PTigmZGV2X3ByaXYtPmRybSwKPiArCQkJCSAgICBp bnRlbF9kcC0+YWN0aXZlX3BpcGUgIT0gSU5WQUxJRF9QSVBFICYmCj4gKwkJCQkgICAgaW50ZWxf ZHAtPmFjdGl2ZV9waXBlICE9Cj4gKwkJCQkgICAgaW50ZWxfZHAtPnBwc19waXBlKTsKPiArCj4g KwkJCWlmIChpbnRlbF9kcC0+cHBzX3BpcGUgIT0gSU5WQUxJRF9QSVBFKQo+ICsJCQkJcGlwZXMg Jj0gfigxIDw8IGludGVsX2RwLT5wcHNfcGlwZSk7Cj4gKwkJfSBlbHNlIHsKPiArCQkJZHJtX1dB Uk5fT04oJmRldl9wcml2LT5kcm0sCj4gKwkJCQkgICAgaW50ZWxfZHAtPnBwc19waXBlICE9IElO VkFMSURfUElQRSk7Cj4gKwo+ICsJCQlpZiAoaW50ZWxfZHAtPmFjdGl2ZV9waXBlICE9IElOVkFM SURfUElQRSkKPiArCQkJCXBpcGVzICY9IH4oMSA8PCBpbnRlbF9kcC0+YWN0aXZlX3BpcGUpOwo+ ICsJCX0KPiArCX0KPiArCj4gKwlpZiAocGlwZXMgPT0gMCkKPiArCQlyZXR1cm4gSU5WQUxJRF9Q SVBFOwo+ICsKPiArCXJldHVybiBmZnMocGlwZXMpIC0gMTsKPiArfQo+ICsKPiArc3RhdGljIGVu dW0gcGlwZQo+ICt2bHZfcG93ZXJfc2VxdWVuY2VyX3BpcGUoc3RydWN0IGludGVsX2RwICppbnRl bF9kcCkKPiArewo+ICsJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZHBfdG9f aTkxNShpbnRlbF9kcCk7Cj4gKwlzdHJ1Y3QgaW50ZWxfZGlnaXRhbF9wb3J0ICpkaWdfcG9ydCA9 IGRwX3RvX2RpZ19wb3J0KGludGVsX2RwKTsKPiArCWVudW0gcGlwZSBwaXBlOwo+ICsKPiArCWxv Y2tkZXBfYXNzZXJ0X2hlbGQoJmRldl9wcml2LT5wcHNfbXV0ZXgpOwo+ICsKPiArCS8qIFdlIHNo b3VsZCBuZXZlciBsYW5kIGhlcmUgd2l0aCByZWd1bGFyIERQIHBvcnRzICovCj4gKwlkcm1fV0FS Tl9PTigmZGV2X3ByaXYtPmRybSwgIWludGVsX2RwX2lzX2VkcChpbnRlbF9kcCkpOwo+ICsKPiAr CWRybV9XQVJOX09OKCZkZXZfcHJpdi0+ZHJtLCBpbnRlbF9kcC0+YWN0aXZlX3BpcGUgIT0gSU5W QUxJRF9QSVBFICYmCj4gKwkJICAgIGludGVsX2RwLT5hY3RpdmVfcGlwZSAhPSBpbnRlbF9kcC0+ cHBzX3BpcGUpOwo+ICsKPiArCWlmIChpbnRlbF9kcC0+cHBzX3BpcGUgIT0gSU5WQUxJRF9QSVBF KQo+ICsJCXJldHVybiBpbnRlbF9kcC0+cHBzX3BpcGU7Cj4gKwo+ICsJcGlwZSA9IHZsdl9maW5k X2ZyZWVfcHBzKGRldl9wcml2KTsKPiArCj4gKwkvKgo+ICsJICogRGlkbid0IGZpbmQgb25lLiBU aGlzIHNob3VsZCBub3QgaGFwcGVuIHNpbmNlIHRoZXJlCj4gKwkgKiBhcmUgdHdvIHBvd2VyIHNl cXVlbmNlcnMgYW5kIHVwIHRvIHR3byBlRFAgcG9ydHMuCj4gKwkgKi8KPiArCWlmIChkcm1fV0FS Tl9PTigmZGV2X3ByaXYtPmRybSwgcGlwZSA9PSBJTlZBTElEX1BJUEUpKQo+ICsJCXBpcGUgPSBQ SVBFX0E7Cj4gKwo+ICsJdmx2X3N0ZWFsX3Bvd2VyX3NlcXVlbmNlcihkZXZfcHJpdiwgcGlwZSk7 Cj4gKwlpbnRlbF9kcC0+cHBzX3BpcGUgPSBwaXBlOwo+ICsKPiArCWRybV9kYmdfa21zKCZkZXZf cHJpdi0+ZHJtLAo+ICsJCSAgICAicGlja2VkIHBpcGUgJWMgcG93ZXIgc2VxdWVuY2VyIGZvciBb RU5DT0RFUjolZDolc11cbiIsCj4gKwkJICAgIHBpcGVfbmFtZShpbnRlbF9kcC0+cHBzX3BpcGUp LAo+ICsJCSAgICBkaWdfcG9ydC0+YmFzZS5iYXNlLmJhc2UuaWQsCj4gKwkJICAgIGRpZ19wb3J0 LT5iYXNlLmJhc2UubmFtZSk7Cj4gKwo+ICsJLyogaW5pdCBwb3dlciBzZXF1ZW5jZXIgb24gdGhp cyBwaXBlIGFuZCBwb3J0ICovCj4gKwlpbnRlbF9kcF9pbml0X3BhbmVsX3Bvd2VyX3NlcXVlbmNl cihpbnRlbF9kcCk7Cj4gKwlpbnRlbF9kcF9pbml0X3BhbmVsX3Bvd2VyX3NlcXVlbmNlcl9yZWdp c3RlcnMoaW50ZWxfZHAsIHRydWUpOwo+ICsKPiArCS8qCj4gKwkgKiBFdmVuIHZkZCBmb3JjZSBk b2Vzbid0IHdvcmsgdW50aWwgd2UndmUgbWFkZQo+ICsJICogdGhlIHBvd2VyIHNlcXVlbmNlciBs b2NrIGluIG9uIHRoZSBwb3J0Lgo+ICsJICovCj4gKwl2bHZfcG93ZXJfc2VxdWVuY2VyX2tpY2so aW50ZWxfZHApOwo+ICsKPiArCXJldHVybiBpbnRlbF9kcC0+cHBzX3BpcGU7Cj4gK30KPiArCj4g K3N0YXRpYyBpbnQKPiArYnh0X3Bvd2VyX3NlcXVlbmNlcl9pZHgoc3RydWN0IGludGVsX2RwICpp bnRlbF9kcCkKPiArewo+ICsJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZHBf dG9faTkxNShpbnRlbF9kcCk7Cj4gKwlpbnQgYmFja2xpZ2h0X2NvbnRyb2xsZXIgPSBkZXZfcHJp di0+dmJ0LmJhY2tsaWdodC5jb250cm9sbGVyOwo+ICsKPiArCWxvY2tkZXBfYXNzZXJ0X2hlbGQo JmRldl9wcml2LT5wcHNfbXV0ZXgpOwo+ICsKPiArCS8qIFdlIHNob3VsZCBuZXZlciBsYW5kIGhl cmUgd2l0aCByZWd1bGFyIERQIHBvcnRzICovCj4gKwlkcm1fV0FSTl9PTigmZGV2X3ByaXYtPmRy bSwgIWludGVsX2RwX2lzX2VkcChpbnRlbF9kcCkpOwo+ICsKPiArCWlmICghaW50ZWxfZHAtPnBw c19yZXNldCkKPiArCQlyZXR1cm4gYmFja2xpZ2h0X2NvbnRyb2xsZXI7Cj4gKwo+ICsJaW50ZWxf ZHAtPnBwc19yZXNldCA9IGZhbHNlOwo+ICsKPiArCS8qCj4gKwkgKiBPbmx5IHRoZSBIVyBuZWVk cyB0byBiZSByZXByb2dyYW1tZWQsIHRoZSBTVyBzdGF0ZSBpcyBmaXhlZCBhbmQKPiArCSAqIGhh cyBiZWVuIHNldHVwIGR1cmluZyBjb25uZWN0b3IgaW5pdC4KPiArCSAqLwo+ICsJaW50ZWxfZHBf aW5pdF9wYW5lbF9wb3dlcl9zZXF1ZW5jZXJfcmVnaXN0ZXJzKGludGVsX2RwLCBmYWxzZSk7Cj4g Kwo+ICsJcmV0dXJuIGJhY2tsaWdodF9jb250cm9sbGVyOwo+ICt9Cj4gKwo+ICt0eXBlZGVmIGJv b2wgKCp2bHZfcGlwZV9jaGVjaykoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+ ICsJCQkgICAgICAgZW51bSBwaXBlIHBpcGUpOwo+ICsKPiArc3RhdGljIGJvb2wgdmx2X3BpcGVf aGFzX3BwX29uKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPiArCQkJICAgICAg IGVudW0gcGlwZSBwaXBlKQo+ICt7Cj4gKwlyZXR1cm4gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwg UFBfU1RBVFVTKHBpcGUpKSAmIFBQX09OOwo+ICt9Cj4gKwo+ICtzdGF0aWMgYm9vbCB2bHZfcGlw ZV9oYXNfdmRkX29uKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPiArCQkJCWVu dW0gcGlwZSBwaXBlKQo+ICt7Cj4gKwlyZXR1cm4gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgUFBf Q09OVFJPTChwaXBlKSkgJiBFRFBfRk9SQ0VfVkREOwo+ICt9Cj4gKwo+ICtzdGF0aWMgYm9vbCB2 bHZfcGlwZV9hbnkoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+ICsJCQkgZW51 bSBwaXBlIHBpcGUpCj4gK3sKPiArCXJldHVybiB0cnVlOwo+ICt9Cj4gKwo+ICtzdGF0aWMgZW51 bSBwaXBlCj4gK3Zsdl9pbml0aWFsX3Bwc19waXBlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpk ZXZfcHJpdiwKPiArCQkgICAgIGVudW0gcG9ydCBwb3J0LAo+ICsJCSAgICAgdmx2X3BpcGVfY2hl Y2sgcGlwZV9jaGVjaykKPiArewo+ICsJZW51bSBwaXBlIHBpcGU7Cj4gKwo+ICsJZm9yIChwaXBl ID0gUElQRV9BOyBwaXBlIDw9IFBJUEVfQjsgcGlwZSsrKSB7Cj4gKwkJdTMyIHBvcnRfc2VsID0g aW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgUFBfT05fREVMQVlTKHBpcGUpKSAmCj4gKwkJCVBBTkVM X1BPUlRfU0VMRUNUX01BU0s7Cj4gKwo+ICsJCWlmIChwb3J0X3NlbCAhPSBQQU5FTF9QT1JUX1NF TEVDVF9WTFYocG9ydCkpCj4gKwkJCWNvbnRpbnVlOwo+ICsKPiArCQlpZiAoIXBpcGVfY2hlY2so ZGV2X3ByaXYsIHBpcGUpKQo+ICsJCQljb250aW51ZTsKPiArCj4gKwkJcmV0dXJuIHBpcGU7Cj4g Kwl9Cj4gKwo+ICsJcmV0dXJuIElOVkFMSURfUElQRTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQK PiArdmx2X2luaXRpYWxfcG93ZXJfc2VxdWVuY2VyX3NldHVwKHN0cnVjdCBpbnRlbF9kcCAqaW50 ZWxfZHApCj4gK3sKPiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRwX3Rv X2k5MTUoaW50ZWxfZHApOwo+ICsJc3RydWN0IGludGVsX2RpZ2l0YWxfcG9ydCAqZGlnX3BvcnQg PSBkcF90b19kaWdfcG9ydChpbnRlbF9kcCk7Cj4gKwllbnVtIHBvcnQgcG9ydCA9IGRpZ19wb3J0 LT5iYXNlLnBvcnQ7Cj4gKwo+ICsJbG9ja2RlcF9hc3NlcnRfaGVsZCgmZGV2X3ByaXYtPnBwc19t dXRleCk7Cj4gKwo+ICsJLyogdHJ5IHRvIGZpbmQgYSBwaXBlIHdpdGggdGhpcyBwb3J0IHNlbGVj dGVkICovCj4gKwkvKiBmaXJzdCBwaWNrIG9uZSB3aGVyZSB0aGUgcGFuZWwgaXMgb24gKi8KPiAr CWludGVsX2RwLT5wcHNfcGlwZSA9IHZsdl9pbml0aWFsX3Bwc19waXBlKGRldl9wcml2LCBwb3J0 LAo+ICsJCQkJCQkgIHZsdl9waXBlX2hhc19wcF9vbik7Cj4gKwkvKiBkaWRuJ3QgZmluZCBvbmU/ IHBpY2sgb25lIHdoZXJlIHZkZCBpcyBvbiAqLwo+ICsJaWYgKGludGVsX2RwLT5wcHNfcGlwZSA9 PSBJTlZBTElEX1BJUEUpCj4gKwkJaW50ZWxfZHAtPnBwc19waXBlID0gdmx2X2luaXRpYWxfcHBz X3BpcGUoZGV2X3ByaXYsIHBvcnQsCj4gKwkJCQkJCQkgIHZsdl9waXBlX2hhc192ZGRfb24pOwo+ ICsJLyogZGlkbid0IGZpbmQgb25lPyBwaWNrIG9uZSB3aXRoIGp1c3QgdGhlIGNvcnJlY3QgcG9y dCAqLwo+ICsJaWYgKGludGVsX2RwLT5wcHNfcGlwZSA9PSBJTlZBTElEX1BJUEUpCj4gKwkJaW50 ZWxfZHAtPnBwc19waXBlID0gdmx2X2luaXRpYWxfcHBzX3BpcGUoZGV2X3ByaXYsIHBvcnQsCj4g KwkJCQkJCQkgIHZsdl9waXBlX2FueSk7Cj4gKwo+ICsJLyogZGlkbid0IGZpbmQgb25lPyBqdXN0 IGxldCB2bHZfcG93ZXJfc2VxdWVuY2VyX3BpcGUoKSBwaWNrIG9uZSB3aGVuIG5lZWRlZCAqLwo+ ICsJaWYgKGludGVsX2RwLT5wcHNfcGlwZSA9PSBJTlZBTElEX1BJUEUpIHsKPiArCQlkcm1fZGJn X2ttcygmZGV2X3ByaXYtPmRybSwKPiArCQkJICAgICJubyBpbml0aWFsIHBvd2VyIHNlcXVlbmNl ciBmb3IgW0VOQ09ERVI6JWQ6JXNdXG4iLAo+ICsJCQkgICAgZGlnX3BvcnQtPmJhc2UuYmFzZS5i YXNlLmlkLAo+ICsJCQkgICAgZGlnX3BvcnQtPmJhc2UuYmFzZS5uYW1lKTsKPiArCQlyZXR1cm47 Cj4gKwl9Cj4gKwo+ICsJZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sCj4gKwkJICAgICJpbml0 aWFsIHBvd2VyIHNlcXVlbmNlciBmb3IgW0VOQ09ERVI6JWQ6JXNdOiBwaXBlICVjXG4iLAo+ICsJ CSAgICBkaWdfcG9ydC0+YmFzZS5iYXNlLmJhc2UuaWQsCj4gKwkJICAgIGRpZ19wb3J0LT5iYXNl LmJhc2UubmFtZSwKPiArCQkgICAgcGlwZV9uYW1lKGludGVsX2RwLT5wcHNfcGlwZSkpOwo+ICsK PiArCWludGVsX2RwX2luaXRfcGFuZWxfcG93ZXJfc2VxdWVuY2VyKGludGVsX2RwKTsKPiArCWlu dGVsX2RwX2luaXRfcGFuZWxfcG93ZXJfc2VxdWVuY2VyX3JlZ2lzdGVycyhpbnRlbF9kcCwgZmFs c2UpOwo+ICt9Cj4gKwo+ICt2b2lkIGludGVsX3Bvd2VyX3NlcXVlbmNlcl9yZXNldChzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4gK3sKPiArCXN0cnVjdCBpbnRlbF9lbmNvZGVy ICplbmNvZGVyOwo+ICsKPiArCWlmIChkcm1fV0FSTl9PTigmZGV2X3ByaXYtPmRybSwKPiArCQkJ IShJU19WQUxMRVlWSUVXKGRldl9wcml2KSB8fAo+ICsJCQkgIElTX0NIRVJSWVZJRVcoZGV2X3By aXYpIHx8Cj4gKwkJCSAgSVNfR0VOOV9MUChkZXZfcHJpdikpKSkKPiArCQlyZXR1cm47Cj4gKwo+ ICsJLyoKPiArCSAqIFdlIGNhbid0IGdyYWIgcHBzX211dGV4IGhlcmUgZHVlIHRvIGRlYWRsb2Nr IHdpdGggcG93ZXJfZG9tYWluCj4gKwkgKiBtdXRleCB3aGVuIHBvd2VyX2RvbWFpbiBmdW5jdGlv bnMgYXJlIGNhbGxlZCB3aGlsZSBob2xkaW5nIHBwc19tdXRleC4KPiArCSAqIFRoYXQgYWxzbyBt ZWFucyB0aGF0IGluIG9yZGVyIHRvIHVzZSBwcHNfcGlwZSB0aGUgY29kZSBuZWVkcyB0bwo+ICsJ ICogaG9sZCBib3RoIGEgcG93ZXIgZG9tYWluIHJlZmVyZW5jZSBhbmQgcHBzX211dGV4LCBhbmQg dGhlIHBvd2VyIGRvbWFpbgo+ICsJICogcmVmZXJlbmNlIGdldC9wdXQgbXVzdCBiZSBkb25lIHdo aWxlIF9ub3RfIGhvbGRpbmcgcHBzX211dGV4Lgo+ICsJICogcHBzX3tsb2NrLHVubG9ja30oKSBk byB0aGVzZSBzdGVwcyBpbiB0aGUgY29ycmVjdCBvcmRlciwgc28gb25lCj4gKwkgKiBzaG91bGQg dXNlIHRoZW0gYWx3YXlzLgo+ICsJICovCj4gKwo+ICsJZm9yX2VhY2hfaW50ZWxfZHAoJmRldl9w cml2LT5kcm0sIGVuY29kZXIpIHsKPiArCQlzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwID0gZW5j X3RvX2ludGVsX2RwKGVuY29kZXIpOwo+ICsKPiArCQlkcm1fV0FSTl9PTigmZGV2X3ByaXYtPmRy bSwKPiArCQkJICAgIGludGVsX2RwLT5hY3RpdmVfcGlwZSAhPSBJTlZBTElEX1BJUEUpOwo+ICsK PiArCQlpZiAoZW5jb2Rlci0+dHlwZSAhPSBJTlRFTF9PVVRQVVRfRURQKQo+ICsJCQljb250aW51 ZTsKPiArCj4gKwkJaWYgKElTX0dFTjlfTFAoZGV2X3ByaXYpKQo+ICsJCQlpbnRlbF9kcC0+cHBz X3Jlc2V0ID0gdHJ1ZTsKPiArCQllbHNlCj4gKwkJCWludGVsX2RwLT5wcHNfcGlwZSA9IElOVkFM SURfUElQRTsKPiArCX0KPiArfQo+ICsKPiArc3RydWN0IHBwc19yZWdpc3RlcnMgewo+ICsJaTkx NV9yZWdfdCBwcF9jdHJsOwo+ICsJaTkxNV9yZWdfdCBwcF9zdGF0Owo+ICsJaTkxNV9yZWdfdCBw cF9vbjsKPiArCWk5MTVfcmVnX3QgcHBfb2ZmOwo+ICsJaTkxNV9yZWdfdCBwcF9kaXY7Cj4gK307 Cj4gKwo+ICtzdGF0aWMgdm9pZCBpbnRlbF9wcHNfZ2V0X3JlZ2lzdGVycyhzdHJ1Y3QgaW50ZWxf ZHAgKmludGVsX2RwLAo+ICsJCQkJICAgIHN0cnVjdCBwcHNfcmVnaXN0ZXJzICpyZWdzKQo+ICt7 Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkcF90b19pOTE1KGludGVs X2RwKTsKPiArCWludCBwcHNfaWR4ID0gMDsKPiArCj4gKwltZW1zZXQocmVncywgMCwgc2l6ZW9m KCpyZWdzKSk7Cj4gKwo+ICsJaWYgKElTX0dFTjlfTFAoZGV2X3ByaXYpKQo+ICsJCXBwc19pZHgg PSBieHRfcG93ZXJfc2VxdWVuY2VyX2lkeChpbnRlbF9kcCk7Cj4gKwllbHNlIGlmIChJU19WQUxM RVlWSUVXKGRldl9wcml2KSB8fCBJU19DSEVSUllWSUVXKGRldl9wcml2KSkKPiArCQlwcHNfaWR4 ID0gdmx2X3Bvd2VyX3NlcXVlbmNlcl9waXBlKGludGVsX2RwKTsKPiArCj4gKwlyZWdzLT5wcF9j dHJsID0gUFBfQ09OVFJPTChwcHNfaWR4KTsKPiArCXJlZ3MtPnBwX3N0YXQgPSBQUF9TVEFUVVMo cHBzX2lkeCk7Cj4gKwlyZWdzLT5wcF9vbiA9IFBQX09OX0RFTEFZUyhwcHNfaWR4KTsKPiArCXJl Z3MtPnBwX29mZiA9IFBQX09GRl9ERUxBWVMocHBzX2lkeCk7Cj4gKwo+ICsJLyogQ3ljbGUgZGVs YXkgbW92ZWQgZnJvbSBQUF9ESVZJU09SIHRvIFBQX0NPTlRST0wgKi8KPiArCWlmIChJU19HRU45 X0xQKGRldl9wcml2KSB8fCBJTlRFTF9QQ0hfVFlQRShkZXZfcHJpdikgPj0gUENIX0NOUCkKPiAr CQlyZWdzLT5wcF9kaXYgPSBJTlZBTElEX01NSU9fUkVHOwo+ICsJZWxzZQo+ICsJCXJlZ3MtPnBw X2RpdiA9IFBQX0RJVklTT1IocHBzX2lkeCk7Cj4gK30KPiArCj4gK3N0YXRpYyBpOTE1X3JlZ190 Cj4gK19wcF9jdHJsX3JlZyhzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKQo+ICt7Cj4gKwlzdHJ1 Y3QgcHBzX3JlZ2lzdGVycyByZWdzOwo+ICsKPiArCWludGVsX3Bwc19nZXRfcmVnaXN0ZXJzKGlu dGVsX2RwLCAmcmVncyk7Cj4gKwo+ICsJcmV0dXJuIHJlZ3MucHBfY3RybDsKPiArfQo+ICsKPiAr c3RhdGljIGk5MTVfcmVnX3QKPiArX3BwX3N0YXRfcmVnKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxf ZHApCj4gK3sKPiArCXN0cnVjdCBwcHNfcmVnaXN0ZXJzIHJlZ3M7Cj4gKwo+ICsJaW50ZWxfcHBz X2dldF9yZWdpc3RlcnMoaW50ZWxfZHAsICZyZWdzKTsKPiArCj4gKwlyZXR1cm4gcmVncy5wcF9z dGF0Owo+ICt9Cj4gKwo+ICtzdGF0aWMgYm9vbCBlZHBfaGF2ZV9wYW5lbF9wb3dlcihzdHJ1Y3Qg aW50ZWxfZHAgKmludGVsX2RwKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2 X3ByaXYgPSBkcF90b19pOTE1KGludGVsX2RwKTsKPiArCj4gKwlsb2NrZGVwX2Fzc2VydF9oZWxk KCZkZXZfcHJpdi0+cHBzX211dGV4KTsKPiArCj4gKwlpZiAoKElTX1ZBTExFWVZJRVcoZGV2X3By aXYpIHx8IElTX0NIRVJSWVZJRVcoZGV2X3ByaXYpKSAmJgo+ICsJICAgIGludGVsX2RwLT5wcHNf cGlwZSA9PSBJTlZBTElEX1BJUEUpCj4gKwkJcmV0dXJuIGZhbHNlOwo+ICsKPiArCXJldHVybiAo aW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgX3BwX3N0YXRfcmVnKGludGVsX2RwKSkgJiBQUF9PTikg IT0gMDsKPiArfQo+ICsKPiArc3RhdGljIGJvb2wgZWRwX2hhdmVfcGFuZWxfdmRkKHN0cnVjdCBp bnRlbF9kcCAqaW50ZWxfZHApCj4gK3sKPiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZf cHJpdiA9IGRwX3RvX2k5MTUoaW50ZWxfZHApOwo+ICsKPiArCWxvY2tkZXBfYXNzZXJ0X2hlbGQo JmRldl9wcml2LT5wcHNfbXV0ZXgpOwo+ICsKPiArCWlmICgoSVNfVkFMTEVZVklFVyhkZXZfcHJp dikgfHwgSVNfQ0hFUlJZVklFVyhkZXZfcHJpdikpICYmCj4gKwkgICAgaW50ZWxfZHAtPnBwc19w aXBlID09IElOVkFMSURfUElQRSkKPiArCQlyZXR1cm4gZmFsc2U7Cj4gKwo+ICsJcmV0dXJuIGlu dGVsX2RlX3JlYWQoZGV2X3ByaXYsIF9wcF9jdHJsX3JlZyhpbnRlbF9kcCkpICYgRURQX0ZPUkNF X1ZERDsKPiArfQo+ICsKPiArdm9pZCBpbnRlbF9kcF9jaGVja19lZHAoc3RydWN0IGludGVsX2Rw ICppbnRlbF9kcCkKPiArewo+ICsJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0g ZHBfdG9faTkxNShpbnRlbF9kcCk7Cj4gKwo+ICsJaWYgKCFpbnRlbF9kcF9pc19lZHAoaW50ZWxf ZHApKQo+ICsJCXJldHVybjsKPiArCj4gKwlpZiAoIWVkcF9oYXZlX3BhbmVsX3Bvd2VyKGludGVs X2RwKSAmJiAhZWRwX2hhdmVfcGFuZWxfdmRkKGludGVsX2RwKSkgewo+ICsJCWRybV9XQVJOKCZk ZXZfcHJpdi0+ZHJtLCAxLAo+ICsJCQkgImVEUCBwb3dlcmVkIG9mZiB3aGlsZSBhdHRlbXB0aW5n IGF1eCBjaGFubmVsIGNvbW11bmljYXRpb24uXG4iKTsKPiArCQlkcm1fZGJnX2ttcygmZGV2X3By aXYtPmRybSwgIlN0YXR1cyAweCUwOHggQ29udHJvbCAweCUwOHhcbiIsCj4gKwkJCSAgICBpbnRl bF9kZV9yZWFkKGRldl9wcml2LCBfcHBfc3RhdF9yZWcoaW50ZWxfZHApKSwKPiArCQkJICAgIGlu dGVsX2RlX3JlYWQoZGV2X3ByaXYsIF9wcF9jdHJsX3JlZyhpbnRlbF9kcCkpKTsKPiArCX0KPiAr fQo+ICsKPiArI2RlZmluZSBJRExFX09OX01BU0sJCShQUF9PTiB8IFBQX1NFUVVFTkNFX01BU0sg fCAwICAgICAgICAgICAgICAgICAgICAgfCBQUF9TRVFVRU5DRV9TVEFURV9NQVNLKQo+ICsjZGVm aW5lIElETEVfT05fVkFMVUUgICAJKFBQX09OIHwgUFBfU0VRVUVOQ0VfTk9ORSB8IDAgICAgICAg ICAgICAgICAgICAgICB8IFBQX1NFUVVFTkNFX1NUQVRFX09OX0lETEUpCj4gKwo+ICsjZGVmaW5l IElETEVfT0ZGX01BU0sJCShQUF9PTiB8IFBQX1NFUVVFTkNFX01BU0sgfCAwICAgICAgICAgICAg ICAgICAgICAgfCAwKQo+ICsjZGVmaW5lIElETEVfT0ZGX1ZBTFVFCQkoMCAgICAgfCBQUF9TRVFV RU5DRV9OT05FIHwgMCAgICAgICAgICAgICAgICAgICAgIHwgMCkKPiArCj4gKyNkZWZpbmUgSURM RV9DWUNMRV9NQVNLCQkoUFBfT04gfCBQUF9TRVFVRU5DRV9NQVNLIHwgUFBfQ1lDTEVfREVMQVlf QUNUSVZFIHwgUFBfU0VRVUVOQ0VfU1RBVEVfTUFTSykKPiArI2RlZmluZSBJRExFX0NZQ0xFX1ZB TFVFCSgwICAgICB8IFBQX1NFUVVFTkNFX05PTkUgfCAwICAgICAgICAgICAgICAgICAgICAgfCBQ UF9TRVFVRU5DRV9TVEFURV9PRkZfSURMRSkKPiArCj4gK3N0YXRpYyB2b2lkIGludGVsX3Bwc192 ZXJpZnlfc3RhdGUoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCk7Cj4gKwo+ICtzdGF0aWMgdm9p ZCB3YWl0X3BhbmVsX3N0YXR1cyhzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwLAo+ICsJCQkJICAg ICAgIHUzMiBtYXNrLAo+ICsJCQkJICAgICAgIHUzMiB2YWx1ZSkKPiArewo+ICsJc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZHBfdG9faTkxNShpbnRlbF9kcCk7Cj4gKwlpOTE1 X3JlZ190IHBwX3N0YXRfcmVnLCBwcF9jdHJsX3JlZzsKPiArCj4gKwlsb2NrZGVwX2Fzc2VydF9o ZWxkKCZkZXZfcHJpdi0+cHBzX211dGV4KTsKPiArCj4gKwlpbnRlbF9wcHNfdmVyaWZ5X3N0YXRl KGludGVsX2RwKTsKPiArCj4gKwlwcF9zdGF0X3JlZyA9IF9wcF9zdGF0X3JlZyhpbnRlbF9kcCk7 Cj4gKwlwcF9jdHJsX3JlZyA9IF9wcF9jdHJsX3JlZyhpbnRlbF9kcCk7Cj4gKwo+ICsJZHJtX2Ri Z19rbXMoJmRldl9wcml2LT5kcm0sCj4gKwkJICAgICJtYXNrICUwOHggdmFsdWUgJTA4eCBzdGF0 dXMgJTA4eCBjb250cm9sICUwOHhcbiIsCj4gKwkJICAgIG1hc2ssIHZhbHVlLAo+ICsJCSAgICBp bnRlbF9kZV9yZWFkKGRldl9wcml2LCBwcF9zdGF0X3JlZyksCj4gKwkJICAgIGludGVsX2RlX3Jl YWQoZGV2X3ByaXYsIHBwX2N0cmxfcmVnKSk7Cj4gKwo+ICsJaWYgKGludGVsX2RlX3dhaXRfZm9y X3JlZ2lzdGVyKGRldl9wcml2LCBwcF9zdGF0X3JlZywKPiArCQkJCSAgICAgICBtYXNrLCB2YWx1 ZSwgNTAwMCkpCj4gKwkJZHJtX2VycigmZGV2X3ByaXYtPmRybSwKPiArCQkJIlBhbmVsIHN0YXR1 cyB0aW1lb3V0OiBzdGF0dXMgJTA4eCBjb250cm9sICUwOHhcbiIsCj4gKwkJCWludGVsX2RlX3Jl YWQoZGV2X3ByaXYsIHBwX3N0YXRfcmVnKSwKPiArCQkJaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwg cHBfY3RybF9yZWcpKTsKPiArCj4gKwlkcm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwgIldhaXQg Y29tcGxldGVcbiIpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCB3YWl0X3BhbmVsX29uKHN0cnVj dCBpbnRlbF9kcCAqaW50ZWxfZHApCj4gK3sKPiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpp OTE1ID0gZHBfdG9faTkxNShpbnRlbF9kcCk7Cj4gKwo+ICsJZHJtX2RiZ19rbXMoJmk5MTUtPmRy bSwgIldhaXQgZm9yIHBhbmVsIHBvd2VyIG9uXG4iKTsKPiArCXdhaXRfcGFuZWxfc3RhdHVzKGlu dGVsX2RwLCBJRExFX09OX01BU0ssIElETEVfT05fVkFMVUUpOwo+ICt9Cj4gKwo+ICtzdGF0aWMg dm9pZCB3YWl0X3BhbmVsX29mZihzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKQo+ICt7Cj4gKwlz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IGRwX3RvX2k5MTUoaW50ZWxfZHApOwo+ICsK PiArCWRybV9kYmdfa21zKCZpOTE1LT5kcm0sICJXYWl0IGZvciBwYW5lbCBwb3dlciBvZmYgdGlt ZVxuIik7Cj4gKwl3YWl0X3BhbmVsX3N0YXR1cyhpbnRlbF9kcCwgSURMRV9PRkZfTUFTSywgSURM RV9PRkZfVkFMVUUpOwo+ICt9Cj4gKwo+ICt2b2lkIHdhaXRfcGFuZWxfcG93ZXJfY3ljbGUoc3Ry dWN0IGludGVsX2RwICppbnRlbF9kcCkKPiArewo+ICsJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg Kmk5MTUgPSBkcF90b19pOTE1KGludGVsX2RwKTsKPiArCWt0aW1lX3QgcGFuZWxfcG93ZXJfb25f dGltZTsKPiArCXM2NCBwYW5lbF9wb3dlcl9vZmZfZHVyYXRpb247Cj4gKwo+ICsJZHJtX2RiZ19r bXMoJmk5MTUtPmRybSwgIldhaXQgZm9yIHBhbmVsIHBvd2VyIGN5Y2xlXG4iKTsKPiArCj4gKwkv KiB0YWtlIHRoZSBkaWZmZXJlbmNlIG9mIGN1cnJyZW50IHRpbWUgYW5kIHBhbmVsIHBvd2VyIG9m ZiB0aW1lCj4gKwkgKiBhbmQgdGhlbiBtYWtlIHBhbmVsIHdhaXQgZm9yIHQxMV90MTIgaWYgbmVl ZGVkLiAqLwo+ICsJcGFuZWxfcG93ZXJfb25fdGltZSA9IGt0aW1lX2dldF9ib290dGltZSgpOwo+ ICsJcGFuZWxfcG93ZXJfb2ZmX2R1cmF0aW9uID0ga3RpbWVfbXNfZGVsdGEocGFuZWxfcG93ZXJf b25fdGltZSwgaW50ZWxfZHAtPnBhbmVsX3Bvd2VyX29mZl90aW1lKTsKPiArCj4gKwkvKiBXaGVu IHdlIGRpc2FibGUgdGhlIFZERCBvdmVycmlkZSBiaXQgbGFzdCB3ZSBoYXZlIHRvIGRvIHRoZSBt YW51YWwKPiArCSAqIHdhaXQuICovCj4gKwlpZiAocGFuZWxfcG93ZXJfb2ZmX2R1cmF0aW9uIDwg KHM2NClpbnRlbF9kcC0+cGFuZWxfcG93ZXJfY3ljbGVfZGVsYXkpCj4gKwkJd2FpdF9yZW1haW5p bmdfbXNfZnJvbV9qaWZmaWVzKGppZmZpZXMsCj4gKwkJCQkgICAgICAgaW50ZWxfZHAtPnBhbmVs X3Bvd2VyX2N5Y2xlX2RlbGF5IC0gcGFuZWxfcG93ZXJfb2ZmX2R1cmF0aW9uKTsKPiArCj4gKwl3 YWl0X3BhbmVsX3N0YXR1cyhpbnRlbF9kcCwgSURMRV9DWUNMRV9NQVNLLCBJRExFX0NZQ0xFX1ZB TFVFKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgd2FpdF9iYWNrbGlnaHRfb24oc3RydWN0IGlu dGVsX2RwICppbnRlbF9kcCkKPiArewo+ICsJd2FpdF9yZW1haW5pbmdfbXNfZnJvbV9qaWZmaWVz KGludGVsX2RwLT5sYXN0X3Bvd2VyX29uLAo+ICsJCQkJICAgICAgIGludGVsX2RwLT5iYWNrbGln aHRfb25fZGVsYXkpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBlZHBfd2FpdF9iYWNrbGlnaHRf b2ZmKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApCj4gK3sKPiArCXdhaXRfcmVtYWluaW5nX21z X2Zyb21famlmZmllcyhpbnRlbF9kcC0+bGFzdF9iYWNrbGlnaHRfb2ZmLAo+ICsJCQkJICAgICAg IGludGVsX2RwLT5iYWNrbGlnaHRfb2ZmX2RlbGF5KTsKPiArfQo+ICsKPiArLyogUmVhZCB0aGUg Y3VycmVudCBwcF9jb250cm9sIHZhbHVlLCB1bmxvY2tpbmcgdGhlIHJlZ2lzdGVyIGlmIGl0Cj4g KyAqIGlzIGxvY2tlZAo+ICsgKi8KPiArCj4gK3N0YXRpYyAgdTMyIGlsa19nZXRfcHBfY29udHJv bChzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqZGV2X3ByaXYgPSBkcF90b19pOTE1KGludGVsX2RwKTsKPiArCXUzMiBjb250cm9sOwo+ ICsKPiArCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmRldl9wcml2LT5wcHNfbXV0ZXgpOwo+ICsKPiAr CWNvbnRyb2wgPSBpbnRlbF9kZV9yZWFkKGRldl9wcml2LCBfcHBfY3RybF9yZWcoaW50ZWxfZHAp KTsKPiArCWlmIChkcm1fV0FSTl9PTigmZGV2X3ByaXYtPmRybSwgIUhBU19EREkoZGV2X3ByaXYp ICYmCj4gKwkJCShjb250cm9sICYgUEFORUxfVU5MT0NLX01BU0spICE9IFBBTkVMX1VOTE9DS19S RUdTKSkgewo+ICsJCWNvbnRyb2wgJj0gflBBTkVMX1VOTE9DS19NQVNLOwo+ICsJCWNvbnRyb2wg fD0gUEFORUxfVU5MT0NLX1JFR1M7Cj4gKwl9Cj4gKwlyZXR1cm4gY29udHJvbDsKPiArfQo+ICsK PiArLyoKPiArICogTXVzdCBiZSBwYWlyZWQgd2l0aCBlZHBfcGFuZWxfdmRkX29mZigpLgo+ICsg KiBNdXN0IGhvbGQgcHBzX211dGV4IGFyb3VuZCB0aGUgd2hvbGUgb24vb2ZmIHNlcXVlbmNlLgo+ ICsgKiBDYW4gYmUgbmVzdGVkIHdpdGggaW50ZWxfZWRwX3BhbmVsX3ZkZF97b24sb2ZmfSgpIGNh bGxzLgo+ICsgKi8KPiArYm9vbCBlZHBfcGFuZWxfdmRkX29uKHN0cnVjdCBpbnRlbF9kcCAqaW50 ZWxfZHApCj4gK3sKPiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRwX3Rv X2k5MTUoaW50ZWxfZHApOwo+ICsJc3RydWN0IGludGVsX2RpZ2l0YWxfcG9ydCAqZGlnX3BvcnQg PSBkcF90b19kaWdfcG9ydChpbnRlbF9kcCk7Cj4gKwl1MzIgcHA7Cj4gKwlpOTE1X3JlZ190IHBw X3N0YXRfcmVnLCBwcF9jdHJsX3JlZzsKPiArCWJvb2wgbmVlZF90b19kaXNhYmxlID0gIWludGVs X2RwLT53YW50X3BhbmVsX3ZkZDsKPiArCj4gKwlsb2NrZGVwX2Fzc2VydF9oZWxkKCZkZXZfcHJp di0+cHBzX211dGV4KTsKPiArCj4gKwlpZiAoIWludGVsX2RwX2lzX2VkcChpbnRlbF9kcCkpCj4g KwkJcmV0dXJuIGZhbHNlOwo+ICsKPiArCWNhbmNlbF9kZWxheWVkX3dvcmsoJmludGVsX2RwLT5w YW5lbF92ZGRfd29yayk7Cj4gKwlpbnRlbF9kcC0+d2FudF9wYW5lbF92ZGQgPSB0cnVlOwo+ICsK PiArCWlmIChlZHBfaGF2ZV9wYW5lbF92ZGQoaW50ZWxfZHApKQo+ICsJCXJldHVybiBuZWVkX3Rv X2Rpc2FibGU7Cj4gKwo+ICsJZHJtX1dBUk5fT04oJmRldl9wcml2LT5kcm0sIGludGVsX2RwLT52 ZGRfd2FrZXJlZik7Cj4gKwlpbnRlbF9kcC0+dmRkX3dha2VyZWYgPSBpbnRlbF9kaXNwbGF5X3Bv d2VyX2dldChkZXZfcHJpdiwKPiArCQkJCQkJCWludGVsX2F1eF9wb3dlcl9kb21haW4oZGlnX3Bv cnQpKTsKPiArCj4gKwlkcm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwgIlR1cm5pbmcgW0VOQ09E RVI6JWQ6JXNdIFZERCBvblxuIiwKPiArCQkgICAgZGlnX3BvcnQtPmJhc2UuYmFzZS5iYXNlLmlk LAo+ICsJCSAgICBkaWdfcG9ydC0+YmFzZS5iYXNlLm5hbWUpOwo+ICsKPiArCWlmICghZWRwX2hh dmVfcGFuZWxfcG93ZXIoaW50ZWxfZHApKQo+ICsJCXdhaXRfcGFuZWxfcG93ZXJfY3ljbGUoaW50 ZWxfZHApOwo+ICsKPiArCXBwID0gaWxrX2dldF9wcF9jb250cm9sKGludGVsX2RwKTsKPiArCXBw IHw9IEVEUF9GT1JDRV9WREQ7Cj4gKwo+ICsJcHBfc3RhdF9yZWcgPSBfcHBfc3RhdF9yZWcoaW50 ZWxfZHApOwo+ICsJcHBfY3RybF9yZWcgPSBfcHBfY3RybF9yZWcoaW50ZWxfZHApOwo+ICsKPiAr CWludGVsX2RlX3dyaXRlKGRldl9wcml2LCBwcF9jdHJsX3JlZywgcHApOwo+ICsJaW50ZWxfZGVf cG9zdGluZ19yZWFkKGRldl9wcml2LCBwcF9jdHJsX3JlZyk7Cj4gKwlkcm1fZGJnX2ttcygmZGV2 X3ByaXYtPmRybSwgIlBQX1NUQVRVUzogMHglMDh4IFBQX0NPTlRST0w6IDB4JTA4eFxuIiwKPiAr CQkgICAgaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgcHBfc3RhdF9yZWcpLAo+ICsJCSAgICBpbnRl bF9kZV9yZWFkKGRldl9wcml2LCBwcF9jdHJsX3JlZykpOwo+ICsJLyoKPiArCSAqIElmIHRoZSBw YW5lbCB3YXNuJ3Qgb24sIGRlbGF5IGJlZm9yZSBhY2Nlc3NpbmcgYXV4IGNoYW5uZWwKPiArCSAq Lwo+ICsJaWYgKCFlZHBfaGF2ZV9wYW5lbF9wb3dlcihpbnRlbF9kcCkpIHsKPiArCQlkcm1fZGJn X2ttcygmZGV2X3ByaXYtPmRybSwKPiArCQkJICAgICJbRU5DT0RFUjolZDolc10gcGFuZWwgcG93 ZXIgd2Fzbid0IGVuYWJsZWRcbiIsCj4gKwkJCSAgICBkaWdfcG9ydC0+YmFzZS5iYXNlLmJhc2Uu aWQsCj4gKwkJCSAgICBkaWdfcG9ydC0+YmFzZS5iYXNlLm5hbWUpOwo+ICsJCW1zbGVlcChpbnRl bF9kcC0+cGFuZWxfcG93ZXJfdXBfZGVsYXkpOwo+ICsJfQo+ICsKPiArCXJldHVybiBuZWVkX3Rv X2Rpc2FibGU7Cj4gK30KPiArCj4gKy8qCj4gKyAqIE11c3QgYmUgcGFpcmVkIHdpdGggaW50ZWxf ZWRwX3BhbmVsX3ZkZF9vZmYoKSBvcgo+ICsgKiBpbnRlbF9lZHBfcGFuZWxfb2ZmKCkuCj4gKyAq IE5lc3RlZCBjYWxscyB0byB0aGVzZSBmdW5jdGlvbnMgYXJlIG5vdCBhbGxvd2VkIHNpbmNlCj4g KyAqIHdlIGRyb3AgdGhlIGxvY2suIENhbGxlciBtdXN0IHVzZSBzb21lIGhpZ2hlciBsZXZlbAo+ ICsgKiBsb2NraW5nIHRvIHByZXZlbnQgbmVzdGVkIGNhbGxzIGZyb20gb3RoZXIgdGhyZWFkcy4K PiArICovCj4gK3ZvaWQgaW50ZWxfZWRwX3BhbmVsX3ZkZF9vbihzdHJ1Y3QgaW50ZWxfZHAgKmlu dGVsX2RwKQo+ICt7Cj4gKwlpbnRlbF93YWtlcmVmX3Qgd2FrZXJlZjsKPiArCWJvb2wgdmRkOwo+ ICsKPiArCWlmICghaW50ZWxfZHBfaXNfZWRwKGludGVsX2RwKSkKPiArCQlyZXR1cm47Cj4gKwo+ ICsJdmRkID0gZmFsc2U7Cj4gKwl3aXRoX3Bwc19sb2NrKGludGVsX2RwLCB3YWtlcmVmKQo+ICsJ CXZkZCA9IGVkcF9wYW5lbF92ZGRfb24oaW50ZWxfZHApOwo+ICsJSTkxNV9TVEFURV9XQVJOKCF2 ZGQsICJbRU5DT0RFUjolZDolc10gVkREIGFscmVhZHkgcmVxdWVzdGVkIG9uXG4iLAo+ICsJCQlk cF90b19kaWdfcG9ydChpbnRlbF9kcCktPmJhc2UuYmFzZS5iYXNlLmlkLAo+ICsJCQlkcF90b19k aWdfcG9ydChpbnRlbF9kcCktPmJhc2UuYmFzZS5uYW1lKTsKPiArfQo+ICsKPiArdm9pZCBlZHBf cGFuZWxfdmRkX29mZl9zeW5jKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApCj4gK3sKPiArCXN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRwX3RvX2k5MTUoaW50ZWxfZHApOwo+ ICsJc3RydWN0IGludGVsX2RpZ2l0YWxfcG9ydCAqZGlnX3BvcnQgPQo+ICsJCWRwX3RvX2RpZ19w b3J0KGludGVsX2RwKTsKPiArCXUzMiBwcDsKPiArCWk5MTVfcmVnX3QgcHBfc3RhdF9yZWcsIHBw X2N0cmxfcmVnOwo+ICsKPiArCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmRldl9wcml2LT5wcHNfbXV0 ZXgpOwo+ICsKPiArCWRybV9XQVJOX09OKCZkZXZfcHJpdi0+ZHJtLCBpbnRlbF9kcC0+d2FudF9w YW5lbF92ZGQpOwo+ICsKPiArCWlmICghZWRwX2hhdmVfcGFuZWxfdmRkKGludGVsX2RwKSkKPiAr CQlyZXR1cm47Cj4gKwo+ICsJZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sICJUdXJuaW5nIFtF TkNPREVSOiVkOiVzXSBWREQgb2ZmXG4iLAo+ICsJCSAgICBkaWdfcG9ydC0+YmFzZS5iYXNlLmJh c2UuaWQsCj4gKwkJICAgIGRpZ19wb3J0LT5iYXNlLmJhc2UubmFtZSk7Cj4gKwo+ICsJcHAgPSBp bGtfZ2V0X3BwX2NvbnRyb2woaW50ZWxfZHApOwo+ICsJcHAgJj0gfkVEUF9GT1JDRV9WREQ7Cj4g Kwo+ICsJcHBfY3RybF9yZWcgPSBfcHBfY3RybF9yZWcoaW50ZWxfZHApOwo+ICsJcHBfc3RhdF9y ZWcgPSBfcHBfc3RhdF9yZWcoaW50ZWxfZHApOwo+ICsKPiArCWludGVsX2RlX3dyaXRlKGRldl9w cml2LCBwcF9jdHJsX3JlZywgcHApOwo+ICsJaW50ZWxfZGVfcG9zdGluZ19yZWFkKGRldl9wcml2 LCBwcF9jdHJsX3JlZyk7Cj4gKwo+ICsJLyogTWFrZSBzdXJlIHNlcXVlbmNlciBpcyBpZGxlIGJl Zm9yZSBhbGxvd2luZyBzdWJzZXF1ZW50IGFjdGl2aXR5ICovCj4gKwlkcm1fZGJnX2ttcygmZGV2 X3ByaXYtPmRybSwgIlBQX1NUQVRVUzogMHglMDh4IFBQX0NPTlRST0w6IDB4JTA4eFxuIiwKPiAr CQkgICAgaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgcHBfc3RhdF9yZWcpLAo+ICsJCSAgICBpbnRl bF9kZV9yZWFkKGRldl9wcml2LCBwcF9jdHJsX3JlZykpOwo+ICsKPiArCWlmICgocHAgJiBQQU5F TF9QT1dFUl9PTikgPT0gMCkKPiArCQlpbnRlbF9kcC0+cGFuZWxfcG93ZXJfb2ZmX3RpbWUgPSBr dGltZV9nZXRfYm9vdHRpbWUoKTsKPiArCj4gKwlpbnRlbF9kaXNwbGF5X3Bvd2VyX3B1dChkZXZf cHJpdiwKPiArCQkJCWludGVsX2F1eF9wb3dlcl9kb21haW4oZGlnX3BvcnQpLAo+ICsJCQkJZmV0 Y2hfYW5kX3plcm8oJmludGVsX2RwLT52ZGRfd2FrZXJlZikpOwo+ICt9Cj4gKwo+ICt2b2lkIGVk cF9wYW5lbF92ZGRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKl9fd29yaykKPiArewo+ICsJc3Ry dWN0IGludGVsX2RwICppbnRlbF9kcCA9Cj4gKwkJY29udGFpbmVyX29mKHRvX2RlbGF5ZWRfd29y ayhfX3dvcmspLAo+ICsJCQkgICAgIHN0cnVjdCBpbnRlbF9kcCwgcGFuZWxfdmRkX3dvcmspOwo+ ICsJaW50ZWxfd2FrZXJlZl90IHdha2VyZWY7Cj4gKwo+ICsJd2l0aF9wcHNfbG9jayhpbnRlbF9k cCwgd2FrZXJlZikgewo+ICsJCWlmICghaW50ZWxfZHAtPndhbnRfcGFuZWxfdmRkKQo+ICsJCQll ZHBfcGFuZWxfdmRkX29mZl9zeW5jKGludGVsX2RwKTsKPiArCX0KPiArfQo+ICsKPiArc3RhdGlj IHZvaWQgZWRwX3BhbmVsX3ZkZF9zY2hlZHVsZV9vZmYoc3RydWN0IGludGVsX2RwICppbnRlbF9k cCkKPiArewo+ICsJdW5zaWduZWQgbG9uZyBkZWxheTsKPiArCj4gKwkvKgo+ICsJICogUXVldWUg dGhlIHRpbWVyIHRvIGZpcmUgYSBsb25nIHRpbWUgZnJvbSBub3cgKHJlbGF0aXZlIHRvIHRoZSBw b3dlcgo+ICsJICogZG93biBkZWxheSkgdG8ga2VlcCB0aGUgcGFuZWwgcG93ZXIgdXAgYWNyb3Nz IGEgc2VxdWVuY2Ugb2YKPiArCSAqIG9wZXJhdGlvbnMuCj4gKwkgKi8KPiArCWRlbGF5ID0gbXNl Y3NfdG9famlmZmllcyhpbnRlbF9kcC0+cGFuZWxfcG93ZXJfY3ljbGVfZGVsYXkgKiA1KTsKPiAr CXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmaW50ZWxfZHAtPnBhbmVsX3ZkZF93b3JrLCBkZWxheSk7 Cj4gK30KPiArCj4gKy8qCj4gKyAqIE11c3QgYmUgcGFpcmVkIHdpdGggZWRwX3BhbmVsX3ZkZF9v bigpLgo+ICsgKiBNdXN0IGhvbGQgcHBzX211dGV4IGFyb3VuZCB0aGUgd2hvbGUgb24vb2ZmIHNl cXVlbmNlLgo+ICsgKiBDYW4gYmUgbmVzdGVkIHdpdGggaW50ZWxfZWRwX3BhbmVsX3ZkZF97b24s b2ZmfSgpIGNhbGxzLgo+ICsgKi8KPiArdm9pZCBlZHBfcGFuZWxfdmRkX29mZihzdHJ1Y3QgaW50 ZWxfZHAgKmludGVsX2RwLCBib29sIHN5bmMpCj4gK3sKPiArCXN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdiA9IGRwX3RvX2k5MTUoaW50ZWxfZHApOwo+ICsKPiArCWxvY2tkZXBfYXNz ZXJ0X2hlbGQoJmRldl9wcml2LT5wcHNfbXV0ZXgpOwo+ICsKPiArCWlmICghaW50ZWxfZHBfaXNf ZWRwKGludGVsX2RwKSkKPiArCQlyZXR1cm47Cj4gKwo+ICsJSTkxNV9TVEFURV9XQVJOKCFpbnRl bF9kcC0+d2FudF9wYW5lbF92ZGQsICJbRU5DT0RFUjolZDolc10gVkREIG5vdCBmb3JjZWQgb24i LAo+ICsJCQlkcF90b19kaWdfcG9ydChpbnRlbF9kcCktPmJhc2UuYmFzZS5iYXNlLmlkLAo+ICsJ CQlkcF90b19kaWdfcG9ydChpbnRlbF9kcCktPmJhc2UuYmFzZS5uYW1lKTsKPiArCj4gKwlpbnRl bF9kcC0+d2FudF9wYW5lbF92ZGQgPSBmYWxzZTsKPiArCj4gKwlpZiAoc3luYykKPiArCQllZHBf cGFuZWxfdmRkX29mZl9zeW5jKGludGVsX2RwKTsKPiArCWVsc2UKPiArCQllZHBfcGFuZWxfdmRk X3NjaGVkdWxlX29mZihpbnRlbF9kcCk7Cj4gK30KPiArCj4gK3ZvaWQgZWRwX3BhbmVsX29uKHN0 cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApCj4gK3sKPiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICpkZXZfcHJpdiA9IGRwX3RvX2k5MTUoaW50ZWxfZHApOwo+ICsJdTMyIHBwOwo+ICsJaTkxNV9y ZWdfdCBwcF9jdHJsX3JlZzsKPiArCj4gKwlsb2NrZGVwX2Fzc2VydF9oZWxkKCZkZXZfcHJpdi0+ cHBzX211dGV4KTsKPiArCj4gKwlpZiAoIWludGVsX2RwX2lzX2VkcChpbnRlbF9kcCkpCj4gKwkJ cmV0dXJuOwo+ICsKPiArCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJtLCAiVHVybiBbRU5DT0RF UjolZDolc10gcGFuZWwgcG93ZXIgb25cbiIsCj4gKwkJICAgIGRwX3RvX2RpZ19wb3J0KGludGVs X2RwKS0+YmFzZS5iYXNlLmJhc2UuaWQsCj4gKwkJICAgIGRwX3RvX2RpZ19wb3J0KGludGVsX2Rw KS0+YmFzZS5iYXNlLm5hbWUpOwo+ICsKPiArCWlmIChkcm1fV0FSTigmZGV2X3ByaXYtPmRybSwg ZWRwX2hhdmVfcGFuZWxfcG93ZXIoaW50ZWxfZHApLAo+ICsJCSAgICAgIltFTkNPREVSOiVkOiVz XSBwYW5lbCBwb3dlciBhbHJlYWR5IG9uXG4iLAo+ICsJCSAgICAgZHBfdG9fZGlnX3BvcnQoaW50 ZWxfZHApLT5iYXNlLmJhc2UuYmFzZS5pZCwKPiArCQkgICAgIGRwX3RvX2RpZ19wb3J0KGludGVs X2RwKS0+YmFzZS5iYXNlLm5hbWUpKQo+ICsJCXJldHVybjsKPiArCj4gKwl3YWl0X3BhbmVsX3Bv d2VyX2N5Y2xlKGludGVsX2RwKTsKPiArCj4gKwlwcF9jdHJsX3JlZyA9IF9wcF9jdHJsX3JlZyhp bnRlbF9kcCk7Cj4gKwlwcCA9IGlsa19nZXRfcHBfY29udHJvbChpbnRlbF9kcCk7Cj4gKwlpZiAo SVNfR0VOKGRldl9wcml2LCA1KSkgewo+ICsJCS8qIElMSyB3b3JrYXJvdW5kOiBkaXNhYmxlIHJl c2V0IGFyb3VuZCBwb3dlciBzZXF1ZW5jZSAqLwo+ICsJCXBwICY9IH5QQU5FTF9QT1dFUl9SRVNF VDsKPiArCQlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgcHBfY3RybF9yZWcsIHBwKTsKPiArCQlp bnRlbF9kZV9wb3N0aW5nX3JlYWQoZGV2X3ByaXYsIHBwX2N0cmxfcmVnKTsKPiArCX0KPiArCj4g KwlwcCB8PSBQQU5FTF9QT1dFUl9PTjsKPiArCWlmICghSVNfR0VOKGRldl9wcml2LCA1KSkKPiAr CQlwcCB8PSBQQU5FTF9QT1dFUl9SRVNFVDsKPiArCj4gKwlpbnRlbF9kZV93cml0ZShkZXZfcHJp diwgcHBfY3RybF9yZWcsIHBwKTsKPiArCWludGVsX2RlX3Bvc3RpbmdfcmVhZChkZXZfcHJpdiwg cHBfY3RybF9yZWcpOwo+ICsKPiArCXdhaXRfcGFuZWxfb24oaW50ZWxfZHApOwo+ICsJaW50ZWxf ZHAtPmxhc3RfcG93ZXJfb24gPSBqaWZmaWVzOwo+ICsKPiArCWlmIChJU19HRU4oZGV2X3ByaXYs IDUpKSB7Cj4gKwkJcHAgfD0gUEFORUxfUE9XRVJfUkVTRVQ7IC8qIHJlc3RvcmUgcGFuZWwgcmVz ZXQgYml0ICovCj4gKwkJaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIHBwX2N0cmxfcmVnLCBwcCk7 Cj4gKwkJaW50ZWxfZGVfcG9zdGluZ19yZWFkKGRldl9wcml2LCBwcF9jdHJsX3JlZyk7Cj4gKwl9 Cj4gK30KPiArCj4gK3ZvaWQgaW50ZWxfZWRwX3BhbmVsX29uKHN0cnVjdCBpbnRlbF9kcCAqaW50 ZWxfZHApCj4gK3sKPiArCWludGVsX3dha2VyZWZfdCB3YWtlcmVmOwo+ICsKPiArCWlmICghaW50 ZWxfZHBfaXNfZWRwKGludGVsX2RwKSkKPiArCQlyZXR1cm47Cj4gKwo+ICsJd2l0aF9wcHNfbG9j ayhpbnRlbF9kcCwgd2FrZXJlZikKPiArCQllZHBfcGFuZWxfb24oaW50ZWxfZHApOwo+ICt9Cj4g Kwo+ICt2b2lkIGVkcF9wYW5lbF9vZmYoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCkKPiArewo+ ICsJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZHBfdG9faTkxNShpbnRlbF9k cCk7Cj4gKwlzdHJ1Y3QgaW50ZWxfZGlnaXRhbF9wb3J0ICpkaWdfcG9ydCA9IGRwX3RvX2RpZ19w b3J0KGludGVsX2RwKTsKPiArCXUzMiBwcDsKPiArCWk5MTVfcmVnX3QgcHBfY3RybF9yZWc7Cj4g Kwo+ICsJbG9ja2RlcF9hc3NlcnRfaGVsZCgmZGV2X3ByaXYtPnBwc19tdXRleCk7Cj4gKwo+ICsJ aWYgKCFpbnRlbF9kcF9pc19lZHAoaW50ZWxfZHApKQo+ICsJCXJldHVybjsKPiArCj4gKwlkcm1f ZGJnX2ttcygmZGV2X3ByaXYtPmRybSwgIlR1cm4gW0VOQ09ERVI6JWQ6JXNdIHBhbmVsIHBvd2Vy IG9mZlxuIiwKPiArCQkgICAgZGlnX3BvcnQtPmJhc2UuYmFzZS5iYXNlLmlkLCBkaWdfcG9ydC0+ YmFzZS5iYXNlLm5hbWUpOwo+ICsKPiArCWRybV9XQVJOKCZkZXZfcHJpdi0+ZHJtLCAhaW50ZWxf ZHAtPndhbnRfcGFuZWxfdmRkLAo+ICsJCSAiTmVlZCBbRU5DT0RFUjolZDolc10gVkREIHRvIHR1 cm4gb2ZmIHBhbmVsXG4iLAo+ICsJCSBkaWdfcG9ydC0+YmFzZS5iYXNlLmJhc2UuaWQsIGRpZ19w b3J0LT5iYXNlLmJhc2UubmFtZSk7Cj4gKwo+ICsJcHAgPSBpbGtfZ2V0X3BwX2NvbnRyb2woaW50 ZWxfZHApOwo+ICsJLyogV2UgbmVlZCB0byBzd2l0Y2ggb2ZmIHBhbmVsIHBvd2VyIF9hbmRfIGZv cmNlIHZkZCwgZm9yIG90aGVyd2lzZSBzb21lCj4gKwkgKiBwYW5lbHMgZ2V0IHZlcnkgdW5oYXBw eSBhbmQgY2Vhc2UgdG8gd29yay4gKi8KPiArCXBwICY9IH4oUEFORUxfUE9XRVJfT04gfCBQQU5F TF9QT1dFUl9SRVNFVCB8IEVEUF9GT1JDRV9WREQgfAo+ICsJCUVEUF9CTENfRU5BQkxFKTsKPiAr Cj4gKwlwcF9jdHJsX3JlZyA9IF9wcF9jdHJsX3JlZyhpbnRlbF9kcCk7Cj4gKwo+ICsJaW50ZWxf ZHAtPndhbnRfcGFuZWxfdmRkID0gZmFsc2U7Cj4gKwo+ICsJaW50ZWxfZGVfd3JpdGUoZGV2X3By aXYsIHBwX2N0cmxfcmVnLCBwcCk7Cj4gKwlpbnRlbF9kZV9wb3N0aW5nX3JlYWQoZGV2X3ByaXYs IHBwX2N0cmxfcmVnKTsKPiArCj4gKwl3YWl0X3BhbmVsX29mZihpbnRlbF9kcCk7Cj4gKwlpbnRl bF9kcC0+cGFuZWxfcG93ZXJfb2ZmX3RpbWUgPSBrdGltZV9nZXRfYm9vdHRpbWUoKTsKPiArCj4g KwkvKiBXZSBnb3QgYSByZWZlcmVuY2Ugd2hlbiB3ZSBlbmFibGVkIHRoZSBWREQuICovCj4gKwlp bnRlbF9kaXNwbGF5X3Bvd2VyX3B1dChkZXZfcHJpdiwKPiArCQkJCWludGVsX2F1eF9wb3dlcl9k b21haW4oZGlnX3BvcnQpLAo+ICsJCQkJZmV0Y2hfYW5kX3plcm8oJmludGVsX2RwLT52ZGRfd2Fr ZXJlZikpOwo+ICt9Cj4gKwo+ICt2b2lkIGludGVsX2VkcF9wYW5lbF9vZmYoc3RydWN0IGludGVs X2RwICppbnRlbF9kcCkKPiArewo+ICsJaW50ZWxfd2FrZXJlZl90IHdha2VyZWY7Cj4gKwo+ICsJ aWYgKCFpbnRlbF9kcF9pc19lZHAoaW50ZWxfZHApKQo+ICsJCXJldHVybjsKPiArCj4gKwl3aXRo X3Bwc19sb2NrKGludGVsX2RwLCB3YWtlcmVmKQo+ICsJCWVkcF9wYW5lbF9vZmYoaW50ZWxfZHAp Owo+ICt9Cj4gKwo+ICsvKiBFbmFibGUgYmFja2xpZ2h0IGluIHRoZSBwYW5lbCBwb3dlciBjb250 cm9sLiAqLwo+ICt2b2lkIF9pbnRlbF9lZHBfYmFja2xpZ2h0X29uKHN0cnVjdCBpbnRlbF9kcCAq aW50ZWxfZHApCj4gK3sKPiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRw X3RvX2k5MTUoaW50ZWxfZHApOwo+ICsJaW50ZWxfd2FrZXJlZl90IHdha2VyZWY7Cj4gKwo+ICsJ LyoKPiArCSAqIElmIHdlIGVuYWJsZSB0aGUgYmFja2xpZ2h0IHJpZ2h0IGF3YXkgZm9sbG93aW5n IGEgcGFuZWwgcG93ZXIKPiArCSAqIG9uLCB3ZSBtYXkgc2VlIHNsaWdodCBmbGlja2VyIGFzIHRo ZSBwYW5lbCBzeW5jcyB3aXRoIHRoZSBlRFAKPiArCSAqIGxpbmsuICBTbyBkZWxheSBhIGJpdCB0 byBtYWtlIHN1cmUgdGhlIGltYWdlIGlzIHNvbGlkIGJlZm9yZQo+ICsJICogYWxsb3dpbmcgaXQg dG8gYXBwZWFyLgo+ICsJICovCj4gKwl3YWl0X2JhY2tsaWdodF9vbihpbnRlbF9kcCk7Cj4gKwo+ ICsJd2l0aF9wcHNfbG9jayhpbnRlbF9kcCwgd2FrZXJlZikgewo+ICsJCWk5MTVfcmVnX3QgcHBf Y3RybF9yZWcgPSBfcHBfY3RybF9yZWcoaW50ZWxfZHApOwo+ICsJCXUzMiBwcDsKPiArCj4gKwkJ cHAgPSBpbGtfZ2V0X3BwX2NvbnRyb2woaW50ZWxfZHApOwo+ICsJCXBwIHw9IEVEUF9CTENfRU5B QkxFOwo+ICsKPiArCQlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgcHBfY3RybF9yZWcsIHBwKTsK PiArCQlpbnRlbF9kZV9wb3N0aW5nX3JlYWQoZGV2X3ByaXYsIHBwX2N0cmxfcmVnKTsKPiArCX0K PiArfQo+ICsKPiArLyogRGlzYWJsZSBiYWNrbGlnaHQgaW4gdGhlIHBhbmVsIHBvd2VyIGNvbnRy b2wuICovCj4gK3ZvaWQgX2ludGVsX2VkcF9iYWNrbGlnaHRfb2ZmKHN0cnVjdCBpbnRlbF9kcCAq aW50ZWxfZHApCj4gK3sKPiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRw X3RvX2k5MTUoaW50ZWxfZHApOwo+ICsJaW50ZWxfd2FrZXJlZl90IHdha2VyZWY7Cj4gKwo+ICsJ aWYgKCFpbnRlbF9kcF9pc19lZHAoaW50ZWxfZHApKQo+ICsJCXJldHVybjsKPiArCj4gKwl3aXRo X3Bwc19sb2NrKGludGVsX2RwLCB3YWtlcmVmKSB7Cj4gKwkJaTkxNV9yZWdfdCBwcF9jdHJsX3Jl ZyA9IF9wcF9jdHJsX3JlZyhpbnRlbF9kcCk7Cj4gKwkJdTMyIHBwOwo+ICsKPiArCQlwcCA9IGls a19nZXRfcHBfY29udHJvbChpbnRlbF9kcCk7Cj4gKwkJcHAgJj0gfkVEUF9CTENfRU5BQkxFOwo+ ICsKPiArCQlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgcHBfY3RybF9yZWcsIHBwKTsKPiArCQlp bnRlbF9kZV9wb3N0aW5nX3JlYWQoZGV2X3ByaXYsIHBwX2N0cmxfcmVnKTsKPiArCX0KPiArCj4g KwlpbnRlbF9kcC0+bGFzdF9iYWNrbGlnaHRfb2ZmID0gamlmZmllczsKPiArCWVkcF93YWl0X2Jh Y2tsaWdodF9vZmYoaW50ZWxfZHApOwo+ICt9Cj4gKwo+ICsvKgo+ICsgKiBIb29rIGZvciBjb250 cm9sbGluZyB0aGUgcGFuZWwgcG93ZXIgY29udHJvbCBiYWNrbGlnaHQgdGhyb3VnaCB0aGUgYmxf cG93ZXIKPiArICogc3lzZnMgYXR0cmlidXRlLiBUYWtlIGNhcmUgdG8gaGFuZGxlIG11bHRpcGxl IGNhbGxzLgo+ICsgKi8KPiArdm9pZCBpbnRlbF9lZHBfYmFja2xpZ2h0X3Bvd2VyKHN0cnVjdCBp bnRlbF9jb25uZWN0b3IgKmNvbm5lY3RvciwgYm9vbCBlbmFibGUpCj4gK3sKPiArCXN0cnVjdCBk cm1faTkxNV9wcml2YXRlICppOTE1ID0gdG9faTkxNShjb25uZWN0b3ItPmJhc2UuZGV2KTsKPiAr CXN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAgPSBpbnRlbF9hdHRhY2hlZF9kcChjb25uZWN0b3Ip Owo+ICsJaW50ZWxfd2FrZXJlZl90IHdha2VyZWY7Cj4gKwlib29sIGlzX2VuYWJsZWQ7Cj4gKwo+ ICsJaXNfZW5hYmxlZCA9IGZhbHNlOwo+ICsJd2l0aF9wcHNfbG9jayhpbnRlbF9kcCwgd2FrZXJl ZikKPiArCQlpc19lbmFibGVkID0gaWxrX2dldF9wcF9jb250cm9sKGludGVsX2RwKSAmIEVEUF9C TENfRU5BQkxFOwo+ICsJaWYgKGlzX2VuYWJsZWQgPT0gZW5hYmxlKQo+ICsJCXJldHVybjsKPiAr Cj4gKwlkcm1fZGJnX2ttcygmaTkxNS0+ZHJtLCAicGFuZWwgcG93ZXIgY29udHJvbCBiYWNrbGln aHQgJXNcbiIsCj4gKwkJICAgIGVuYWJsZSA/ICJlbmFibGUiIDogImRpc2FibGUiKTsKPiArCj4g KwlpZiAoZW5hYmxlKQo+ICsJCV9pbnRlbF9lZHBfYmFja2xpZ2h0X29uKGludGVsX2RwKTsKPiAr CWVsc2UKPiArCQlfaW50ZWxfZWRwX2JhY2tsaWdodF9vZmYoaW50ZWxfZHApOwo+ICt9Cj4gKwo+ ICtzdGF0aWMgdm9pZCB2bHZfZGV0YWNoX3Bvd2VyX3NlcXVlbmNlcihzdHJ1Y3QgaW50ZWxfZHAg KmludGVsX2RwKQo+ICt7Cj4gKwlzdHJ1Y3QgaW50ZWxfZGlnaXRhbF9wb3J0ICpkaWdfcG9ydCA9 IGRwX3RvX2RpZ19wb3J0KGludGVsX2RwKTsKPiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpk ZXZfcHJpdiA9IHRvX2k5MTUoZGlnX3BvcnQtPmJhc2UuYmFzZS5kZXYpOwo+ICsJZW51bSBwaXBl IHBpcGUgPSBpbnRlbF9kcC0+cHBzX3BpcGU7Cj4gKwlpOTE1X3JlZ190IHBwX29uX3JlZyA9IFBQ X09OX0RFTEFZUyhwaXBlKTsKPiArCj4gKwlkcm1fV0FSTl9PTigmZGV2X3ByaXYtPmRybSwgaW50 ZWxfZHAtPmFjdGl2ZV9waXBlICE9IElOVkFMSURfUElQRSk7Cj4gKwo+ICsJaWYgKGRybV9XQVJO X09OKCZkZXZfcHJpdi0+ZHJtLCBwaXBlICE9IFBJUEVfQSAmJiBwaXBlICE9IFBJUEVfQikpCj4g KwkJcmV0dXJuOwo+ICsKPiArCWVkcF9wYW5lbF92ZGRfb2ZmX3N5bmMoaW50ZWxfZHApOwo+ICsK PiArCS8qCj4gKwkgKiBWTFYgc2VlbXMgdG8gZ2V0IGNvbmZ1c2VkIHdoZW4gbXVsdGlwbGUgcG93 ZXIgc2VxdWVuY2Vycwo+ICsJICogaGF2ZSB0aGUgc2FtZSBwb3J0IHNlbGVjdGVkIChldmVuIGlm IG9ubHkgb25lIGhhcyBwb3dlci92ZGQKPiArCSAqIGVuYWJsZWQpLiBUaGUgZmFpbHVyZSBtYW5p ZmVzdHMgYXMgdmx2X3dhaXRfcG9ydF9yZWFkeSgpIGZhaWxpbmcKPiArCSAqIENIViBvbiB0aGUg b3RoZXIgaGFuZCBkb2Vzbid0IHNlZW0gdG8gbWluZCBoYXZpbmcgdGhlIHNhbWUgcG9ydAo+ICsJ ICogc2VsZWN0ZWQgaW4gbXVsdGlwbGUgcG93ZXIgc2VxdWVuY2VycywgYnV0IGxldCdzIGNsZWFy IHRoZQo+ICsJICogcG9ydCBzZWxlY3QgYWx3YXlzIHdoZW4gbG9naWNhbGx5IGRpc2Nvbm5lY3Rp bmcgYSBwb3dlciBzZXF1ZW5jZXIKPiArCSAqIGZyb20gYSBwb3J0Lgo+ICsJICovCj4gKwlkcm1f ZGJnX2ttcygmZGV2X3ByaXYtPmRybSwKPiArCQkgICAgImRldGFjaGluZyBwaXBlICVjIHBvd2Vy IHNlcXVlbmNlciBmcm9tIFtFTkNPREVSOiVkOiVzXVxuIiwKPiArCQkgICAgcGlwZV9uYW1lKHBp cGUpLCBkaWdfcG9ydC0+YmFzZS5iYXNlLmJhc2UuaWQsCj4gKwkJICAgIGRpZ19wb3J0LT5iYXNl LmJhc2UubmFtZSk7Cj4gKwlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgcHBfb25fcmVnLCAwKTsK PiArCWludGVsX2RlX3Bvc3RpbmdfcmVhZChkZXZfcHJpdiwgcHBfb25fcmVnKTsKPiArCj4gKwlp bnRlbF9kcC0+cHBzX3BpcGUgPSBJTlZBTElEX1BJUEU7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lk IHZsdl9zdGVhbF9wb3dlcl9zZXF1ZW5jZXIoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9w cml2LAo+ICsJCQkJICAgICAgZW51bSBwaXBlIHBpcGUpCj4gK3sKPiArCXN0cnVjdCBpbnRlbF9l bmNvZGVyICplbmNvZGVyOwo+ICsKPiArCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmRldl9wcml2LT5w cHNfbXV0ZXgpOwo+ICsKPiArCWZvcl9lYWNoX2ludGVsX2RwKCZkZXZfcHJpdi0+ZHJtLCBlbmNv ZGVyKSB7Cj4gKwkJc3RydWN0IGludGVsX2RwICppbnRlbF9kcCA9IGVuY190b19pbnRlbF9kcChl bmNvZGVyKTsKPiArCj4gKwkJZHJtX1dBUk4oJmRldl9wcml2LT5kcm0sIGludGVsX2RwLT5hY3Rp dmVfcGlwZSA9PSBwaXBlLAo+ICsJCQkgInN0ZWFsaW5nIHBpcGUgJWMgcG93ZXIgc2VxdWVuY2Vy IGZyb20gYWN0aXZlIFtFTkNPREVSOiVkOiVzXVxuIiwKPiArCQkJIHBpcGVfbmFtZShwaXBlKSwg ZW5jb2Rlci0+YmFzZS5iYXNlLmlkLAo+ICsJCQkgZW5jb2Rlci0+YmFzZS5uYW1lKTsKPiArCj4g KwkJaWYgKGludGVsX2RwLT5wcHNfcGlwZSAhPSBwaXBlKQo+ICsJCQljb250aW51ZTsKPiArCj4g KwkJZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sCj4gKwkJCSAgICAic3RlYWxpbmcgcGlwZSAl YyBwb3dlciBzZXF1ZW5jZXIgZnJvbSBbRU5DT0RFUjolZDolc11cbiIsCj4gKwkJCSAgICBwaXBl X25hbWUocGlwZSksIGVuY29kZXItPmJhc2UuYmFzZS5pZCwKPiArCQkJICAgIGVuY29kZXItPmJh c2UubmFtZSk7Cj4gKwo+ICsJCS8qIG1ha2Ugc3VyZSB2ZGQgaXMgb2ZmIGJlZm9yZSB3ZSBzdGVh bCBpdCAqLwo+ICsJCXZsdl9kZXRhY2hfcG93ZXJfc2VxdWVuY2VyKGludGVsX2RwKTsKPiArCX0K PiArfQo+ICsKPiArdm9pZCB2bHZfaW5pdF9wYW5lbF9wb3dlcl9zZXF1ZW5jZXIoc3RydWN0IGlu dGVsX2VuY29kZXIgKmVuY29kZXIsCj4gKwkJCQkgICAgY29uc3Qgc3RydWN0IGludGVsX2NydGNf c3RhdGUgKmNydGNfc3RhdGUpCj4gK3sKPiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZf cHJpdiA9IHRvX2k5MTUoZW5jb2Rlci0+YmFzZS5kZXYpOwo+ICsJc3RydWN0IGludGVsX2RwICpp bnRlbF9kcCA9IGVuY190b19pbnRlbF9kcChlbmNvZGVyKTsKPiArCXN0cnVjdCBpbnRlbF9jcnRj ICpjcnRjID0gdG9faW50ZWxfY3J0YyhjcnRjX3N0YXRlLT51YXBpLmNydGMpOwo+ICsKPiArCWxv Y2tkZXBfYXNzZXJ0X2hlbGQoJmRldl9wcml2LT5wcHNfbXV0ZXgpOwo+ICsKPiArCWRybV9XQVJO X09OKCZkZXZfcHJpdi0+ZHJtLCBpbnRlbF9kcC0+YWN0aXZlX3BpcGUgIT0gSU5WQUxJRF9QSVBF KTsKPiArCj4gKwlpZiAoaW50ZWxfZHAtPnBwc19waXBlICE9IElOVkFMSURfUElQRSAmJgo+ICsJ ICAgIGludGVsX2RwLT5wcHNfcGlwZSAhPSBjcnRjLT5waXBlKSB7Cj4gKwkJLyoKPiArCQkgKiBJ ZiBhbm90aGVyIHBvd2VyIHNlcXVlbmNlciB3YXMgYmVpbmcgdXNlZCBvbiB0aGlzCj4gKwkJICog cG9ydCBwcmV2aW91c2x5IG1ha2Ugc3VyZSB0byB0dXJuIG9mZiB2ZGQgdGhlcmUgd2hpbGUKPiAr CQkgKiB3ZSBzdGlsbCBoYXZlIGNvbnRyb2wgb2YgaXQuCj4gKwkJICovCj4gKwkJdmx2X2RldGFj aF9wb3dlcl9zZXF1ZW5jZXIoaW50ZWxfZHApOwo+ICsJfQo+ICsKPiArCS8qCj4gKwkgKiBXZSBt YXkgYmUgc3RlYWxpbmcgdGhlIHBvd2VyCj4gKwkgKiBzZXF1ZW5jZXIgZnJvbSBhbm90aGVyIHBv cnQuCj4gKwkgKi8KPiArCXZsdl9zdGVhbF9wb3dlcl9zZXF1ZW5jZXIoZGV2X3ByaXYsIGNydGMt PnBpcGUpOwo+ICsKPiArCWludGVsX2RwLT5hY3RpdmVfcGlwZSA9IGNydGMtPnBpcGU7Cj4gKwo+ ICsJaWYgKCFpbnRlbF9kcF9pc19lZHAoaW50ZWxfZHApKQo+ICsJCXJldHVybjsKPiArCj4gKwkv KiBub3cgaXQncyBhbGwgb3VycyAqLwo+ICsJaW50ZWxfZHAtPnBwc19waXBlID0gY3J0Yy0+cGlw ZTsKPiArCj4gKwlkcm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwKPiArCQkgICAgImluaXRpYWxp emluZyBwaXBlICVjIHBvd2VyIHNlcXVlbmNlciBmb3IgW0VOQ09ERVI6JWQ6JXNdXG4iLAo+ICsJ CSAgICBwaXBlX25hbWUoaW50ZWxfZHAtPnBwc19waXBlKSwgZW5jb2Rlci0+YmFzZS5iYXNlLmlk LAo+ICsJCSAgICBlbmNvZGVyLT5iYXNlLm5hbWUpOwo+ICsKPiArCS8qIGluaXQgcG93ZXIgc2Vx dWVuY2VyIG9uIHRoaXMgcGlwZSBhbmQgcG9ydCAqLwo+ICsJaW50ZWxfZHBfaW5pdF9wYW5lbF9w b3dlcl9zZXF1ZW5jZXIoaW50ZWxfZHApOwo+ICsJaW50ZWxfZHBfaW5pdF9wYW5lbF9wb3dlcl9z ZXF1ZW5jZXJfcmVnaXN0ZXJzKGludGVsX2RwLCB0cnVlKTsKPiArfQo+ICsKPiArdm9pZCBpbnRl bF9lZHBfcGFuZWxfdmRkX3Nhbml0aXplKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApCj4gK3sK PiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRwX3RvX2k5MTUoaW50ZWxf ZHApOwo+ICsJc3RydWN0IGludGVsX2RpZ2l0YWxfcG9ydCAqZGlnX3BvcnQgPSBkcF90b19kaWdf cG9ydChpbnRlbF9kcCk7Cj4gKwo+ICsJbG9ja2RlcF9hc3NlcnRfaGVsZCgmZGV2X3ByaXYtPnBw c19tdXRleCk7Cj4gKwo+ICsJaWYgKCFlZHBfaGF2ZV9wYW5lbF92ZGQoaW50ZWxfZHApKQo+ICsJ CXJldHVybjsKPiArCj4gKwkvKgo+ICsJICogVGhlIFZERCBiaXQgbmVlZHMgYSBwb3dlciBkb21h aW4gcmVmZXJlbmNlLCBzbyBpZiB0aGUgYml0IGlzCj4gKwkgKiBhbHJlYWR5IGVuYWJsZWQgd2hl biB3ZSBib290IG9yIHJlc3VtZSwgZ3JhYiB0aGlzIHJlZmVyZW5jZSBhbmQKPiArCSAqIHNjaGVk dWxlIGEgdmRkIG9mZiwgc28gd2UgZG9uJ3QgaG9sZCBvbiB0byB0aGUgcmVmZXJlbmNlCj4gKwkg KiBpbmRlZmluaXRlbHkuCj4gKwkgKi8KPiArCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJtLAo+ ICsJCSAgICAiVkREIGxlZnQgb24gYnkgQklPUywgYWRqdXN0aW5nIHN0YXRlIHRyYWNraW5nXG4i KTsKPiArCWRybV9XQVJOX09OKCZkZXZfcHJpdi0+ZHJtLCBpbnRlbF9kcC0+dmRkX3dha2VyZWYp Owo+ICsJaW50ZWxfZHAtPnZkZF93YWtlcmVmID0gaW50ZWxfZGlzcGxheV9wb3dlcl9nZXQoZGV2 X3ByaXYsCj4gKwkJCQkJCQlpbnRlbF9hdXhfcG93ZXJfZG9tYWluKGRpZ19wb3J0KSk7Cj4gKwo+ ICsJZWRwX3BhbmVsX3ZkZF9zY2hlZHVsZV9vZmYoaW50ZWxfZHApOwo+ICt9Cj4gKwo+ICtib29s IGludGVsX2VkcF9oYXZlX3Bvd2VyKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApCj4gK3sKPiAr CWludGVsX3dha2VyZWZfdCB3YWtlcmVmOwo+ICsJYm9vbCBoYXZlX3Bvd2VyID0gZmFsc2U7Cj4g Kwo+ICsJd2l0aF9wcHNfbG9jayhpbnRlbF9kcCwgd2FrZXJlZikgewo+ICsJCWhhdmVfcG93ZXIg PSBlZHBfaGF2ZV9wYW5lbF9wb3dlcihpbnRlbF9kcCkgJiYKPiArCQkJCQkJICBlZHBfaGF2ZV9w YW5lbF92ZGQoaW50ZWxfZHApOwo+ICsJfQo+ICsKPiArCXJldHVybiBoYXZlX3Bvd2VyOwo+ICt9 Cj4gKwo+ICt2b2lkIGludGVsX2RwX2luaXRfcGFuZWxfcG93ZXJfdGltZXN0YW1wcyhzdHJ1Y3Qg aW50ZWxfZHAgKmludGVsX2RwKQo+ICt7Cj4gKwlpbnRlbF9kcC0+cGFuZWxfcG93ZXJfb2ZmX3Rp bWUgPSBrdGltZV9nZXRfYm9vdHRpbWUoKTsKPiArCWludGVsX2RwLT5sYXN0X3Bvd2VyX29uID0g amlmZmllczsKPiArCWludGVsX2RwLT5sYXN0X2JhY2tsaWdodF9vZmYgPSBqaWZmaWVzOwo+ICt9 Cj4gKwo+ICtzdGF0aWMgdm9pZAo+ICtpbnRlbF9wcHNfcmVhZG91dF9od19zdGF0ZShzdHJ1Y3Qg aW50ZWxfZHAgKmludGVsX2RwLCBzdHJ1Y3QgZWRwX3Bvd2VyX3NlcSAqc2VxKQo+ICt7Cj4gKwlz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkcF90b19pOTE1KGludGVsX2RwKTsK PiArCXUzMiBwcF9vbiwgcHBfb2ZmLCBwcF9jdGw7Cj4gKwlzdHJ1Y3QgcHBzX3JlZ2lzdGVycyBy ZWdzOwo+ICsKPiArCWludGVsX3Bwc19nZXRfcmVnaXN0ZXJzKGludGVsX2RwLCAmcmVncyk7Cj4g Kwo+ICsJcHBfY3RsID0gaWxrX2dldF9wcF9jb250cm9sKGludGVsX2RwKTsKPiArCj4gKwkvKiBF bnN1cmUgUFBTIGlzIHVubG9ja2VkICovCj4gKwlpZiAoIUhBU19EREkoZGV2X3ByaXYpKQo+ICsJ CWludGVsX2RlX3dyaXRlKGRldl9wcml2LCByZWdzLnBwX2N0cmwsIHBwX2N0bCk7Cj4gKwo+ICsJ cHBfb24gPSBpbnRlbF9kZV9yZWFkKGRldl9wcml2LCByZWdzLnBwX29uKTsKPiArCXBwX29mZiA9 IGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIHJlZ3MucHBfb2ZmKTsKPiArCj4gKwkvKiBQdWxsIHRp bWluZyB2YWx1ZXMgb3V0IG9mIHJlZ2lzdGVycyAqLwo+ICsJc2VxLT50MV90MyA9IFJFR19GSUVM RF9HRVQoUEFORUxfUE9XRVJfVVBfREVMQVlfTUFTSywgcHBfb24pOwo+ICsJc2VxLT50OCA9IFJF R19GSUVMRF9HRVQoUEFORUxfTElHSFRfT05fREVMQVlfTUFTSywgcHBfb24pOwo+ICsJc2VxLT50 OSA9IFJFR19GSUVMRF9HRVQoUEFORUxfTElHSFRfT0ZGX0RFTEFZX01BU0ssIHBwX29mZik7Cj4g KwlzZXEtPnQxMCA9IFJFR19GSUVMRF9HRVQoUEFORUxfUE9XRVJfRE9XTl9ERUxBWV9NQVNLLCBw cF9vZmYpOwo+ICsKPiArCWlmIChpOTE1X21taW9fcmVnX3ZhbGlkKHJlZ3MucHBfZGl2KSkgewo+ ICsJCXUzMiBwcF9kaXY7Cj4gKwo+ICsJCXBwX2RpdiA9IGludGVsX2RlX3JlYWQoZGV2X3ByaXYs IHJlZ3MucHBfZGl2KTsKPiArCj4gKwkJc2VxLT50MTFfdDEyID0gUkVHX0ZJRUxEX0dFVChQQU5F TF9QT1dFUl9DWUNMRV9ERUxBWV9NQVNLLCBwcF9kaXYpICogMTAwMDsKPiArCX0gZWxzZSB7Cj4g KwkJc2VxLT50MTFfdDEyID0gUkVHX0ZJRUxEX0dFVChCWFRfUE9XRVJfQ1lDTEVfREVMQVlfTUFT SywgcHBfY3RsKSAqIDEwMDA7Cj4gKwl9Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkCj4gK2ludGVs X3Bwc19kdW1wX3N0YXRlKGNvbnN0IGNoYXIgKnN0YXRlX25hbWUsIGNvbnN0IHN0cnVjdCBlZHBf cG93ZXJfc2VxICpzZXEpCj4gK3sKPiArCURSTV9ERUJVR19LTVMoIiVzIHQxX3QzICVkIHQ4ICVk IHQ5ICVkIHQxMCAlZCB0MTFfdDEyICVkXG4iLAo+ICsJCSAgICAgIHN0YXRlX25hbWUsCj4gKwkJ ICAgICAgc2VxLT50MV90Mywgc2VxLT50OCwgc2VxLT50OSwgc2VxLT50MTAsIHNlcS0+dDExX3Qx Mik7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkCj4gK2ludGVsX3Bwc192ZXJpZnlfc3RhdGUoc3Ry dWN0IGludGVsX2RwICppbnRlbF9kcCkKPiArewo+ICsJc3RydWN0IGVkcF9wb3dlcl9zZXEgaHc7 Cj4gKwlzdHJ1Y3QgZWRwX3Bvd2VyX3NlcSAqc3cgPSAmaW50ZWxfZHAtPnBwc19kZWxheXM7Cj4g Kwo+ICsJaW50ZWxfcHBzX3JlYWRvdXRfaHdfc3RhdGUoaW50ZWxfZHAsICZodyk7Cj4gKwo+ICsJ aWYgKGh3LnQxX3QzICE9IHN3LT50MV90MyB8fCBody50OCAhPSBzdy0+dDggfHwgaHcudDkgIT0g c3ctPnQ5IHx8Cj4gKwkgICAgaHcudDEwICE9IHN3LT50MTAgfHwgaHcudDExX3QxMiAhPSBzdy0+ dDExX3QxMikgewo+ICsJCURSTV9FUlJPUigiUFBTIHN0YXRlIG1pc21hdGNoXG4iKTsKPiArCQlp bnRlbF9wcHNfZHVtcF9zdGF0ZSgic3ciLCBzdyk7Cj4gKwkJaW50ZWxfcHBzX2R1bXBfc3RhdGUo Imh3IiwgJmh3KTsKPiArCX0KPiArfQo+ICsKPiArc3RhdGljIHZvaWQKPiAraW50ZWxfZHBfaW5p dF9wYW5lbF9wb3dlcl9zZXF1ZW5jZXIoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCkKPiArewo+ ICsJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZHBfdG9faTkxNShpbnRlbF9k cCk7Cj4gKwlzdHJ1Y3QgZWRwX3Bvd2VyX3NlcSBjdXIsIHZidCwgc3BlYywKPiArCQkqZmluYWwg PSAmaW50ZWxfZHAtPnBwc19kZWxheXM7Cj4gKwo+ICsJbG9ja2RlcF9hc3NlcnRfaGVsZCgmZGV2 X3ByaXYtPnBwc19tdXRleCk7Cj4gKwo+ICsJLyogYWxyZWFkeSBpbml0aWFsaXplZD8gKi8KPiAr CWlmIChmaW5hbC0+dDExX3QxMiAhPSAwKQo+ICsJCXJldHVybjsKPiArCj4gKwlpbnRlbF9wcHNf cmVhZG91dF9od19zdGF0ZShpbnRlbF9kcCwgJmN1cik7Cj4gKwo+ICsJaW50ZWxfcHBzX2R1bXBf c3RhdGUoImN1ciIsICZjdXIpOwo+ICsKPiArCXZidCA9IGRldl9wcml2LT52YnQuZWRwLnBwczsK PiArCS8qIE9uIFRvc2hpYmEgU2F0ZWxsaXRlIFA1MC1DLTE4QyBzeXN0ZW0gdGhlIFZCVCBUMTIg ZGVsYXkKPiArCSAqIG9mIDUwMG1zIGFwcGVhcnMgdG8gYmUgdG9vIHNob3J0LiBPY2Fzc2lvbmFs bHkgdGhlIHBhbmVsCj4gKwkgKiBqdXN0IGZhaWxzIHRvIHBvd2VyIGJhY2sgb24uIEluY3JlYXNp bmcgdGhlIGRlbGF5IHRvIDgwMG1zCj4gKwkgKiBzZWVtcyBzdWZmaWNpZW50IHRvIGF2b2lkIHRo aXMgcHJvYmxlbS4KPiArCSAqLwo+ICsJaWYgKGRldl9wcml2LT5xdWlya3MgJiBRVUlSS19JTkNS RUFTRV9UMTJfREVMQVkpIHsKPiArCQl2YnQudDExX3QxMiA9IG1heF90KHUxNiwgdmJ0LnQxMV90 MTIsIDEzMDAgKiAxMCk7Cj4gKwkJZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sCj4gKwkJCSAg ICAiSW5jcmVhc2luZyBUMTIgcGFuZWwgZGVsYXkgYXMgcGVyIHRoZSBxdWlyayB0byAlZFxuIiwK PiArCQkJICAgIHZidC50MTFfdDEyKTsKPiArCX0KPiArCS8qIFQxMV9UMTIgZGVsYXkgaXMgc3Bl Y2lhbCBhbmQgYWN0dWFsbHkgaW4gdW5pdHMgb2YgMTAwbXMsIGJ1dCB6ZXJvCj4gKwkgKiBiYXNl ZCBpbiB0aGUgaHcgKHNvIHdlIG5lZWQgdG8gYWRkIDEwMCBtcykuIEJ1dCB0aGUgc3cgdmJ0Cj4g KwkgKiB0YWJsZSBtdWx0aXBsaWVzIGl0IHdpdGggMTAwMCB0byBtYWtlIGl0IGluIHVuaXRzIG9m IDEwMHVzZWMsCj4gKwkgKiB0b28uICovCj4gKwl2YnQudDExX3QxMiArPSAxMDAgKiAxMDsKPiAr Cj4gKwkvKiBVcHBlciBsaW1pdHMgZnJvbSBlRFAgMS4zIHNwZWMuIE5vdGUgdGhhdCB3ZSB1c2Ug dGhlIGNsdW5reSB1bml0cyBvZgo+ICsJICogb3VyIGh3IGhlcmUsIHdoaWNoIGFyZSBhbGwgaW4g MTAwdXNlYy4gKi8KPiArCXNwZWMudDFfdDMgPSAyMTAgKiAxMDsKPiArCXNwZWMudDggPSA1MCAq IDEwOyAvKiBubyBsaW1pdCBmb3IgdDgsIHVzZSB0NyBpbnN0ZWFkICovCj4gKwlzcGVjLnQ5ID0g NTAgKiAxMDsgLyogbm8gbGltaXQgZm9yIHQ5LCBtYWtlIGl0IHN5bW1ldHJpYyB3aXRoIHQ4ICov Cj4gKwlzcGVjLnQxMCA9IDUwMCAqIDEwOwo+ICsJLyogVGhpcyBvbmUgaXMgc3BlY2lhbCBhbmQg YWN0dWFsbHkgaW4gdW5pdHMgb2YgMTAwbXMsIGJ1dCB6ZXJvCj4gKwkgKiBiYXNlZCBpbiB0aGUg aHcgKHNvIHdlIG5lZWQgdG8gYWRkIDEwMCBtcykuIEJ1dCB0aGUgc3cgdmJ0Cj4gKwkgKiB0YWJs ZSBtdWx0aXBsaWVzIGl0IHdpdGggMTAwMCB0byBtYWtlIGl0IGluIHVuaXRzIG9mIDEwMHVzZWMs Cj4gKwkgKiB0b28uICovCj4gKwlzcGVjLnQxMV90MTIgPSAoNTEwICsgMTAwKSAqIDEwOwo+ICsK PiArCWludGVsX3Bwc19kdW1wX3N0YXRlKCJ2YnQiLCAmdmJ0KTsKPiArCj4gKwkvKiBVc2UgdGhl IG1heCBvZiB0aGUgcmVnaXN0ZXIgc2V0dGluZ3MgYW5kIHZidC4gSWYgYm90aCBhcmUKPiArCSAq IHVuc2V0LCBmYWxsIGJhY2sgdG8gdGhlIHNwZWMgbGltaXRzLiAqLwo+ICsjZGVmaW5lIGFzc2ln bl9maW5hbChmaWVsZCkJZmluYWwtPmZpZWxkID0gKG1heChjdXIuZmllbGQsIHZidC5maWVsZCkg PT0gMCA/IFwKPiArCQkJCSAgICAgICBzcGVjLmZpZWxkIDogXAo+ICsJCQkJICAgICAgIG1heChj dXIuZmllbGQsIHZidC5maWVsZCkpCj4gKwlhc3NpZ25fZmluYWwodDFfdDMpOwo+ICsJYXNzaWdu X2ZpbmFsKHQ4KTsKPiArCWFzc2lnbl9maW5hbCh0OSk7Cj4gKwlhc3NpZ25fZmluYWwodDEwKTsK PiArCWFzc2lnbl9maW5hbCh0MTFfdDEyKTsKPiArI3VuZGVmIGFzc2lnbl9maW5hbAo+ICsKPiAr I2RlZmluZSBnZXRfZGVsYXkoZmllbGQpCShESVZfUk9VTkRfVVAoZmluYWwtPmZpZWxkLCAxMCkp Cj4gKwlpbnRlbF9kcC0+cGFuZWxfcG93ZXJfdXBfZGVsYXkgPSBnZXRfZGVsYXkodDFfdDMpOwo+ ICsJaW50ZWxfZHAtPmJhY2tsaWdodF9vbl9kZWxheSA9IGdldF9kZWxheSh0OCk7Cj4gKwlpbnRl bF9kcC0+YmFja2xpZ2h0X29mZl9kZWxheSA9IGdldF9kZWxheSh0OSk7Cj4gKwlpbnRlbF9kcC0+ cGFuZWxfcG93ZXJfZG93bl9kZWxheSA9IGdldF9kZWxheSh0MTApOwo+ICsJaW50ZWxfZHAtPnBh bmVsX3Bvd2VyX2N5Y2xlX2RlbGF5ID0gZ2V0X2RlbGF5KHQxMV90MTIpOwo+ICsjdW5kZWYgZ2V0 X2RlbGF5Cj4gKwo+ICsJZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sCj4gKwkJICAgICJwYW5l bCBwb3dlciB1cCBkZWxheSAlZCwgcG93ZXIgZG93biBkZWxheSAlZCwgcG93ZXIgY3ljbGUgZGVs YXkgJWRcbiIsCj4gKwkJICAgIGludGVsX2RwLT5wYW5lbF9wb3dlcl91cF9kZWxheSwKPiArCQkg ICAgaW50ZWxfZHAtPnBhbmVsX3Bvd2VyX2Rvd25fZGVsYXksCj4gKwkJICAgIGludGVsX2RwLT5w YW5lbF9wb3dlcl9jeWNsZV9kZWxheSk7Cj4gKwo+ICsJZHJtX2RiZ19rbXMoJmRldl9wcml2LT5k cm0sICJiYWNrbGlnaHQgb24gZGVsYXkgJWQsIG9mZiBkZWxheSAlZFxuIiwKPiArCQkgICAgaW50 ZWxfZHAtPmJhY2tsaWdodF9vbl9kZWxheSwKPiArCQkgICAgaW50ZWxfZHAtPmJhY2tsaWdodF9v ZmZfZGVsYXkpOwo+ICsKPiArCS8qCj4gKwkgKiBXZSBvdmVycmlkZSB0aGUgSFcgYmFja2xpZ2h0 IGRlbGF5cyB0byAxIGJlY2F1c2Ugd2UgZG8gbWFudWFsIHdhaXRzCj4gKwkgKiBvbiB0aGVtLiBG b3IgVDgsIGV2ZW4gQlNwZWMgcmVjb21tZW5kcyBkb2luZyBpdC4gRm9yIFQ5LCBpZiB3ZQo+ICsJ ICogZG9uJ3QgZG8gdGhpcywgd2UnbGwgZW5kIHVwIHdhaXRpbmcgZm9yIHRoZSBiYWNrbGlnaHQg b2ZmIGRlbGF5Cj4gKwkgKiB0d2ljZTogb25jZSB3aGVuIHdlIGRvIHRoZSBtYW51YWwgc2xlZXAs IGFuZCBvbmNlIHdoZW4gd2UgZGlzYWJsZQo+ICsJICogdGhlIHBhbmVsIGFuZCB3YWl0IGZvciB0 aGUgUFBfU1RBVFVTIGJpdCB0byBiZWNvbWUgemVyby4KPiArCSAqLwo+ICsJZmluYWwtPnQ4ID0g MTsKPiArCWZpbmFsLT50OSA9IDE7Cj4gKwo+ICsJLyoKPiArCSAqIEhXIGhhcyBvbmx5IGEgMTAw bXNlYyBncmFudWxhcml0eSBmb3IgdDExX3QxMiBzbyByb3VuZCBpdCB1cAo+ICsJICogYWNjb3Jk aW5nbHkuCj4gKwkgKi8KPiArCWZpbmFsLT50MTFfdDEyID0gcm91bmR1cChmaW5hbC0+dDExX3Qx MiwgMTAwICogMTApOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZAo+ICtpbnRlbF9kcF9pbml0X3Bh bmVsX3Bvd2VyX3NlcXVlbmNlcl9yZWdpc3RlcnMoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCwK PiArCQkJCQkgICAgICBib29sIGZvcmNlX2Rpc2FibGVfdmRkKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkcF90b19pOTE1KGludGVsX2RwKTsKPiArCXUzMiBw cF9vbiwgcHBfb2ZmLCBwb3J0X3NlbCA9IDA7Cj4gKwlpbnQgZGl2ID0gUlVOVElNRV9JTkZPKGRl dl9wcml2KS0+cmF3Y2xrX2ZyZXEgLyAxMDAwOwo+ICsJc3RydWN0IHBwc19yZWdpc3RlcnMgcmVn czsKPiArCWVudW0gcG9ydCBwb3J0ID0gZHBfdG9fZGlnX3BvcnQoaW50ZWxfZHApLT5iYXNlLnBv cnQ7Cj4gKwljb25zdCBzdHJ1Y3QgZWRwX3Bvd2VyX3NlcSAqc2VxID0gJmludGVsX2RwLT5wcHNf ZGVsYXlzOwo+ICsKPiArCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmRldl9wcml2LT5wcHNfbXV0ZXgp Owo+ICsKPiArCWludGVsX3Bwc19nZXRfcmVnaXN0ZXJzKGludGVsX2RwLCAmcmVncyk7Cj4gKwo+ ICsJLyoKPiArCSAqIE9uIHNvbWUgVkxWIG1hY2hpbmVzIHRoZSBCSU9TIGNhbiBsZWF2ZSB0aGUg VkRECj4gKwkgKiBlbmFibGVkIGV2ZW4gb24gcG93ZXIgc2VxdWVuY2VycyB3aGljaCBhcmVuJ3QK PiArCSAqIGhvb2tlZCB1cCB0byBhbnkgcG9ydC4gVGhpcyB3b3VsZCBtZXNzIHVwIHRoZQo+ICsJ ICogcG93ZXIgZG9tYWluIHRyYWNraW5nIHRoZSBmaXJzdCB0aW1lIHdlIHBpY2sKPiArCSAqIG9u ZSBvZiB0aGVzZSBwb3dlciBzZXF1ZW5jZXJzIGZvciB1c2Ugc2luY2UKPiArCSAqIGVkcF9wYW5l bF92ZGRfb24oKSB3b3VsZCBub3RpY2UgdGhhdCB0aGUgVkREIHdhcwo+ICsJICogYWxyZWFkeSBv biBhbmQgdGhlcmVmb3JlIHdvdWxkbid0IGdyYWIgdGhlIHBvd2VyCj4gKwkgKiBkb21haW4gcmVm ZXJlbmNlLiBEaXNhYmxlIFZERCBmaXJzdCB0byBhdm9pZCB0aGlzLgo+ICsJICogVGhpcyBhbHNv IGF2b2lkcyBzcHVyaW91c2x5IHR1cm5pbmcgdGhlIFZERCBvbiBhcwo+ICsJICogc29vbiBhcyB0 aGUgbmV3IHBvd2VyIHNlcXVlbmNlciBnZXRzIGluaXRpYWxpemVkLgo+ICsJICovCj4gKwlpZiAo Zm9yY2VfZGlzYWJsZV92ZGQpIHsKPiArCQl1MzIgcHAgPSBpbGtfZ2V0X3BwX2NvbnRyb2woaW50 ZWxfZHApOwo+ICsKPiArCQlkcm1fV0FSTigmZGV2X3ByaXYtPmRybSwgcHAgJiBQQU5FTF9QT1dF Ul9PTiwKPiArCQkJICJQYW5lbCBwb3dlciBhbHJlYWR5IG9uXG4iKTsKPiArCj4gKwkJaWYgKHBw ICYgRURQX0ZPUkNFX1ZERCkKPiArCQkJZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sCj4gKwkJ CQkgICAgIlZERCBhbHJlYWR5IG9uLCBkaXNhYmxpbmcgZmlyc3RcbiIpOwo+ICsKPiArCQlwcCAm PSB+RURQX0ZPUkNFX1ZERDsKPiArCj4gKwkJaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIHJlZ3Mu cHBfY3RybCwgcHApOwo+ICsJfQo+ICsKPiArCXBwX29uID0gUkVHX0ZJRUxEX1BSRVAoUEFORUxf UE9XRVJfVVBfREVMQVlfTUFTSywgc2VxLT50MV90MykgfAo+ICsJCVJFR19GSUVMRF9QUkVQKFBB TkVMX0xJR0hUX09OX0RFTEFZX01BU0ssIHNlcS0+dDgpOwo+ICsJcHBfb2ZmID0gUkVHX0ZJRUxE X1BSRVAoUEFORUxfTElHSFRfT0ZGX0RFTEFZX01BU0ssIHNlcS0+dDkpIHwKPiArCQlSRUdfRklF TERfUFJFUChQQU5FTF9QT1dFUl9ET1dOX0RFTEFZX01BU0ssIHNlcS0+dDEwKTsKPiArCj4gKwkv KiBIYXN3ZWxsIGRvZXNuJ3QgaGF2ZSBhbnkgcG9ydCBzZWxlY3Rpb24gYml0cyBmb3IgdGhlIHBh bmVsCj4gKwkgKiBwb3dlciBzZXF1ZW5jZXIgYW55IG1vcmUuICovCj4gKwlpZiAoSVNfVkFMTEVZ VklFVyhkZXZfcHJpdikgfHwgSVNfQ0hFUlJZVklFVyhkZXZfcHJpdikpIHsKPiArCQlwb3J0X3Nl bCA9IFBBTkVMX1BPUlRfU0VMRUNUX1ZMVihwb3J0KTsKPiArCX0gZWxzZSBpZiAoSEFTX1BDSF9J QlgoZGV2X3ByaXYpIHx8IEhBU19QQ0hfQ1BUKGRldl9wcml2KSkgewo+ICsJCXN3aXRjaCAocG9y dCkgewo+ICsJCWNhc2UgUE9SVF9BOgo+ICsJCQlwb3J0X3NlbCA9IFBBTkVMX1BPUlRfU0VMRUNU X0RQQTsKPiArCQkJYnJlYWs7Cj4gKwkJY2FzZSBQT1JUX0M6Cj4gKwkJCXBvcnRfc2VsID0gUEFO RUxfUE9SVF9TRUxFQ1RfRFBDOwo+ICsJCQlicmVhazsKPiArCQljYXNlIFBPUlRfRDoKPiArCQkJ cG9ydF9zZWwgPSBQQU5FTF9QT1JUX1NFTEVDVF9EUEQ7Cj4gKwkJCWJyZWFrOwo+ICsJCWRlZmF1 bHQ6Cj4gKwkJCU1JU1NJTkdfQ0FTRShwb3J0KTsKPiArCQkJYnJlYWs7Cj4gKwkJfQo+ICsJfQo+ ICsKPiArCXBwX29uIHw9IHBvcnRfc2VsOwo+ICsKPiArCWludGVsX2RlX3dyaXRlKGRldl9wcml2 LCByZWdzLnBwX29uLCBwcF9vbik7Cj4gKwlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgcmVncy5w cF9vZmYsIHBwX29mZik7Cj4gKwo+ICsJLyoKPiArCSAqIENvbXB1dGUgdGhlIGRpdmlzb3IgZm9y IHRoZSBwcCBjbG9jaywgc2ltcGx5IG1hdGNoIHRoZSBCc3BlYyBmb3JtdWxhLgo+ICsJICovCj4g KwlpZiAoaTkxNV9tbWlvX3JlZ192YWxpZChyZWdzLnBwX2RpdikpIHsKPiArCQlpbnRlbF9kZV93 cml0ZShkZXZfcHJpdiwgcmVncy5wcF9kaXYsCj4gKwkJCSAgICAgICBSRUdfRklFTERfUFJFUChQ UF9SRUZFUkVOQ0VfRElWSURFUl9NQVNLLCAoMTAwICogZGl2KSAvIDIgLSAxKSB8IFJFR19GSUVM RF9QUkVQKFBBTkVMX1BPV0VSX0NZQ0xFX0RFTEFZX01BU0ssIERJVl9ST1VORF9VUChzZXEtPnQx MV90MTIsIDEwMDApKSk7Cj4gKwl9IGVsc2Ugewo+ICsJCXUzMiBwcF9jdGw7Cj4gKwo+ICsJCXBw X2N0bCA9IGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIHJlZ3MucHBfY3RybCk7Cj4gKwkJcHBfY3Rs ICY9IH5CWFRfUE9XRVJfQ1lDTEVfREVMQVlfTUFTSzsKPiArCQlwcF9jdGwgfD0gUkVHX0ZJRUxE X1BSRVAoQlhUX1BPV0VSX0NZQ0xFX0RFTEFZX01BU0ssIERJVl9ST1VORF9VUChzZXEtPnQxMV90 MTIsIDEwMDApKTsKPiArCQlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgcmVncy5wcF9jdHJsLCBw cF9jdGwpOwo+ICsJfQo+ICsKPiArCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJtLAo+ICsJCSAg ICAicGFuZWwgcG93ZXIgc2VxdWVuY2VyIHJlZ2lzdGVyIHNldHRpbmdzOiBQUF9PTiAlI3gsIFBQ X09GRiAlI3gsIFBQX0RJViAlI3hcbiIsCj4gKwkJICAgIGludGVsX2RlX3JlYWQoZGV2X3ByaXYs IHJlZ3MucHBfb24pLAo+ICsJCSAgICBpbnRlbF9kZV9yZWFkKGRldl9wcml2LCByZWdzLnBwX29m ZiksCj4gKwkJICAgIGk5MTVfbW1pb19yZWdfdmFsaWQocmVncy5wcF9kaXYpID8KPiArCQkgICAg aW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgcmVncy5wcF9kaXYpIDoKPiArCQkgICAgKGludGVsX2Rl X3JlYWQoZGV2X3ByaXYsIHJlZ3MucHBfY3RybCkgJiBCWFRfUE9XRVJfQ1lDTEVfREVMQVlfTUFT SykpOwo+ICt9Cj4gKwo+ICt2b2lkIGludGVsX2RwX3Bwc19pbml0KHN0cnVjdCBpbnRlbF9kcCAq aW50ZWxfZHApCj4gK3sKPiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRw X3RvX2k5MTUoaW50ZWxfZHApOwo+ICsKPiArCWlmIChJU19WQUxMRVlWSUVXKGRldl9wcml2KSB8 fCBJU19DSEVSUllWSUVXKGRldl9wcml2KSkgewo+ICsJCXZsdl9pbml0aWFsX3Bvd2VyX3NlcXVl bmNlcl9zZXR1cChpbnRlbF9kcCk7Cj4gKwl9IGVsc2Ugewo+ICsJCWludGVsX2RwX2luaXRfcGFu ZWxfcG93ZXJfc2VxdWVuY2VyKGludGVsX2RwKTsKPiArCQlpbnRlbF9kcF9pbml0X3BhbmVsX3Bv d2VyX3NlcXVlbmNlcl9yZWdpc3RlcnMoaW50ZWxfZHAsIGZhbHNlKTsKPiArCX0KPiArfQo+IGRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX3Bwcy5oIGIvZHJp dmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9wcHMuaAo+IG5ldyBmaWxlIG1vZGUgMTAw NjQ0Cj4gaW5kZXggMDAwMDAwMDAwMDAwLi43NmQ1Y2M1NjU1MDEKPiAtLS0gL2Rldi9udWxsCj4g KysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9wcHMuaAo+IEBAIC0wLDAg KzEsNTMgQEAKPiArLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVCAqLwo+ICsvKgo+ICsg KiBDb3B5cmlnaHQgwqkgMjAyMCBJbnRlbCBDb3Jwb3JhdGlvbgo+ICsgKi8KPiArCj4gKyNpZm5k ZWYgX19JTlRFTF9QUFNfSF9fCj4gKyNkZWZpbmUgX19JTlRFTF9QUFNfSF9fCj4gKwo+ICsjaW5j bHVkZSA8bGludXgvdHlwZXMuaD4KPiArCj4gKyNpbmNsdWRlICJpbnRlbF93YWtlcmVmLmgiCj4g Kwo+ICtzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZTsKPiArc3RydWN0IGludGVsX2Nvbm5lY3RvcjsK PiArc3RydWN0IGludGVsX2NydGNfc3RhdGU7Cj4gK3N0cnVjdCBpbnRlbF9kcDsKPiArc3RydWN0 IGludGVsX2VuY29kZXI7Cj4gKwo+ICtpbnRlbF93YWtlcmVmX3QgcHBzX2xvY2soc3RydWN0IGlu dGVsX2RwICppbnRlbF9kcCk7Cj4gK2ludGVsX3dha2VyZWZfdCBwcHNfdW5sb2NrKHN0cnVjdCBp bnRlbF9kcCAqaW50ZWxfZHAsIGludGVsX3dha2VyZWZfdCB3YWtlcmVmKTsKPiArCj4gKyNkZWZp bmUgd2l0aF9wcHNfbG9jayhkcCwgd2YpCQkJCQkJXAo+ICsJZm9yICgod2YpID0gcHBzX2xvY2so ZHApOyAod2YpOyAod2YpID0gcHBzX3VubG9jaygoZHApLCAod2YpKSkKPiArCj4gK3ZvaWQgaW50 ZWxfZHBfY2hlY2tfZWRwKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApOwo+ICt2b2lkIF9pbnRl bF9lZHBfYmFja2xpZ2h0X29uKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApOwo+ICt2b2lkIF9p bnRlbF9lZHBfYmFja2xpZ2h0X29mZihzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKTsKPiArdm9p ZCBpbnRlbF9lZHBfYmFja2xpZ2h0X3Bvd2VyKHN0cnVjdCBpbnRlbF9jb25uZWN0b3IgKmNvbm5l Y3RvciwgYm9vbCBlbmFibGUpOwo+ICsKPiArYm9vbCBlZHBfcGFuZWxfdmRkX29uKHN0cnVjdCBp bnRlbF9kcCAqaW50ZWxfZHApOwo+ICt2b2lkIGVkcF9wYW5lbF92ZGRfb2ZmKHN0cnVjdCBpbnRl bF9kcCAqaW50ZWxfZHAsIGJvb2wgc3luYyk7Cj4gK3ZvaWQgZWRwX3BhbmVsX3ZkZF9vZmZfc3lu YyhzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKTsKPiArdm9pZCBlZHBfcGFuZWxfb24oc3RydWN0 IGludGVsX2RwICppbnRlbF9kcCk7Cj4gK3ZvaWQgZWRwX3BhbmVsX29mZihzdHJ1Y3QgaW50ZWxf ZHAgKmludGVsX2RwKTsKPiArdm9pZCBlZHBfcGFuZWxfdmRkX3dvcmsoc3RydWN0IHdvcmtfc3Ry dWN0ICpfX3dvcmspOwo+ICsKPiArdm9pZCBpbnRlbF9lZHBfcGFuZWxfdmRkX29uKHN0cnVjdCBp bnRlbF9kcCAqaW50ZWxfZHApOwo+ICt2b2lkIGludGVsX2VkcF9wYW5lbF9vbihzdHJ1Y3QgaW50 ZWxfZHAgKmludGVsX2RwKTsKPiArdm9pZCBpbnRlbF9lZHBfcGFuZWxfb2ZmKHN0cnVjdCBpbnRl bF9kcCAqaW50ZWxfZHApOwo+ICtib29sIGludGVsX2VkcF9oYXZlX3Bvd2VyKHN0cnVjdCBpbnRl bF9kcCAqaW50ZWxfZHApOwo+ICsKPiArdm9pZCBpbnRlbF9lZHBfcGFuZWxfdmRkX3Nhbml0aXpl KHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApOwo+ICsKPiArdm9pZCB3YWl0X3BhbmVsX3Bvd2Vy X2N5Y2xlKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApOwo+ICsKPiArdm9pZCBpbnRlbF9kcF9w cHNfaW5pdChzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKTsKPiArdm9pZCBpbnRlbF9wb3dlcl9z ZXF1ZW5jZXJfcmVzZXQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUpOwo+ICt2b2lkIGlu dGVsX2RwX2luaXRfcGFuZWxfcG93ZXJfdGltZXN0YW1wcyhzdHJ1Y3QgaW50ZWxfZHAgKmludGVs X2RwKTsKPiArCj4gK3ZvaWQgdmx2X2luaXRfcGFuZWxfcG93ZXJfc2VxdWVuY2VyKHN0cnVjdCBp bnRlbF9lbmNvZGVyICplbmNvZGVyLAo+ICsJCQkJICAgIGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRj X3N0YXRlICpjcnRjX3N0YXRlKTsKPiArCj4gKyNlbmRpZiAvKiBfX0lOVEVMX1BQU19IX18gKi8K Ci0tIApKYW5pIE5pa3VsYSwgSW50ZWwgT3BlbiBTb3VyY2UgR3JhcGhpY3MgQ2VudGVyCl9fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWls aW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZy ZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=