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=-16.7 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,USER_AGENT_GIT 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 0BF21C433DB for ; Tue, 22 Dec 2020 14:51:46 +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 BF10B221FC for ; Tue, 22 Dec 2020 14:51:45 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org BF10B221FC 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 6670B6E400; Tue, 22 Dec 2020 14:51:45 +0000 (UTC) Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by gabe.freedesktop.org (Postfix) with ESMTPS id 5EA146E886 for ; Tue, 22 Dec 2020 14:51:43 +0000 (UTC) IronPort-SDR: Tgw6XCwrDiCUfzIO5avll8zdww5CTQeQoFRkzSE7f+SZE9hBu/4XsQqQgYhA63u0LOy7e0nU4K hU+1B3hdOgnA== X-IronPort-AV: E=McAfee;i="6000,8403,9842"; a="162931302" X-IronPort-AV: E=Sophos;i="5.78,439,1599548400"; d="scan'208";a="162931302" Received: from fmsmga008.fm.intel.com ([10.253.24.58]) by orsmga101.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 22 Dec 2020 06:51:42 -0800 IronPort-SDR: 6jrl050LgkcwCyhIs0URUVmIjHbViFOcNiFcaJSEVsqDMPIIZC831/eqp1/GdxTjK2PwBAiNhb 0GcbyDo3jHTQ== X-IronPort-AV: E=Sophos;i="5.78,439,1599548400"; d="scan'208";a="344236622" Received: from sauterhx-mobl1.ger.corp.intel.com (HELO localhost) ([10.252.59.229]) by fmsmga008-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 22 Dec 2020 06:50:06 -0800 From: Jani Nikula To: intel-gfx@lists.freedesktop.org Date: Tue, 22 Dec 2020 16:49:41 +0200 Message-Id: X-Mailer: git-send-email 2.20.1 In-Reply-To: References: MIME-Version: 1.0 Subject: [Intel-gfx] [PATCH 01/13] 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: , Cc: jani.nikula@intel.com Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" SW4gYSBsb25nIG92ZXJkdWUgcmVmYWN0b3JpbmcsIHNwbGl0IG91dCBhbGwgcGFuZWwgc2VxdWVu Y2VyIGNvZGUgZnJvbQppbnRlbF9kcC5jIHRvIG5ldyBpbnRlbF9wcHMuW2NoXS4KClRoZSBmaXJz dCBwYXJ0IGlzIG1vc3RseSBqdXN0IGNvZGUgbW92ZW1lbnQgYXMtaXMsIHdpdGhvdXQgY2xlYW51 cHMuCgpXZSBuZWVkIHRvIGFkZCBhIHZsdl9nZXRfZHBsbCgpIGhlbHBlciB0byBnZXQgYXQgdGhl IHZsdi9jaHYgZHBsbCBmcm9tCnBwcyBjb2RlLgoKU2lnbmVkLW9mZi1ieTogSmFuaSBOaWt1bGEg PGphbmkubmlrdWxhQGludGVsLmNvbT4KLS0tCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmls ZSAgICAgICAgICAgICAgICAgfCAgICAxICsKIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkv aW50ZWxfZGRpLmMgICAgICB8ICAgIDEgKwogLi4uL2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlz cGxheV9wb3dlci5jICAgIHwgICAgMiArLQogZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9p bnRlbF9kcC5jICAgICAgIHwgMTQ0MiArLS0tLS0tLS0tLS0tLS0tLQogZHJpdmVycy9ncHUvZHJt L2k5MTUvZGlzcGxheS9pbnRlbF9kcC5oICAgICAgIHwgICAgNSArLQogZHJpdmVycy9ncHUvZHJt L2k5MTUvZGlzcGxheS9pbnRlbF9wcHMuYyAgICAgIHwgMTMzNyArKysrKysrKysrKysrKysKIGRy aXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfcHBzLmggICAgICB8ICAgNTMgKwogNyBm aWxlcyBjaGFuZ2VkLCAxNDQ3IGluc2VydGlvbnMoKyksIDEzOTQgZGVsZXRpb25zKC0pCiBjcmVh dGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9wcHMuYwog Y3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfcHBz LmgKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZSBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L01ha2VmaWxlCmluZGV4IDNhNDM5YjFkMDQ5Ni4uMWUyNjkwMmE4NmU1IDEw MDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2dw dS9kcm0vaTkxNS9NYWtlZmlsZQpAQCAtMjUwLDYgKzI1MCw3IEBAIGk5MTUteSArPSBcCiAJZGlz cGxheS9pbnRlbF9sc3Bjb24ubyBcCiAJZGlzcGxheS9pbnRlbF9sdmRzLm8gXAogCWRpc3BsYXkv aW50ZWxfcGFuZWwubyBcCisJZGlzcGxheS9pbnRlbF9wcHMubyBcCiAJZGlzcGxheS9pbnRlbF9z ZHZvLm8gXAogCWRpc3BsYXkvaW50ZWxfdHYubyBcCiAJZGlzcGxheS9pbnRlbF92ZHNjLm8gXApk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kZGkuYyBiL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGRpLmMKaW5kZXggNjg2MzIzNmRmMWQw Li45ZGRiZThiODczMGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkv aW50ZWxfZGRpLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kZGku YwpAQCAtNDYsNiArNDYsNyBAQAogI2luY2x1ZGUgImludGVsX2hvdHBsdWcuaCIKICNpbmNsdWRl ICJpbnRlbF9sc3Bjb24uaCIKICNpbmNsdWRlICJpbnRlbF9wYW5lbC5oIgorI2luY2x1ZGUgImlu dGVsX3Bwcy5oIgogI2luY2x1ZGUgImludGVsX3Bzci5oIgogI2luY2x1ZGUgImludGVsX3Nwcml0 ZS5oIgogI2luY2x1ZGUgImludGVsX3RjLmgiCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v aTkxNS9kaXNwbGF5L2ludGVsX2Rpc3BsYXlfcG93ZXIuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2Rpc3BsYXkvaW50ZWxfZGlzcGxheV9wb3dlci5jCmluZGV4IGQ1MjM3NGYwMTMxNi4uYTExYmQ4 MjEzZGY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rp c3BsYXlfcG93ZXIuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rp c3BsYXlfcG93ZXIuYwpAQCAtNCw3ICs0LDYgQEAKICAqLwogCiAjaW5jbHVkZSAiZGlzcGxheS9p bnRlbF9jcnQuaCIKLSNpbmNsdWRlICJkaXNwbGF5L2ludGVsX2RwLmgiCiAKICNpbmNsdWRlICJp OTE1X2Rydi5oIgogI2luY2x1ZGUgImk5MTVfaXJxLmgiCkBAIC0xNiw2ICsxNSw3IEBACiAjaW5j bHVkZSAiaW50ZWxfZHBpb19waHkuaCIKICNpbmNsdWRlICJpbnRlbF9ob3RwbHVnLmgiCiAjaW5j bHVkZSAiaW50ZWxfcG0uaCIKKyNpbmNsdWRlICJpbnRlbF9wcHMuaCIKICNpbmNsdWRlICJpbnRl bF9zaWRlYmFuZC5oIgogI2luY2x1ZGUgImludGVsX3RjLmgiCiAjaW5jbHVkZSAiaW50ZWxfdmdh LmgiCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2RwLmMg Yi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2RwLmMKaW5kZXggYjJiYzBjOGMz OWM3Li5kNDc2MGM0Nzg2NTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3Bs YXkvaW50ZWxfZHAuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rw LmMKQEAgLTU4LDYgKzU4LDcgQEAKICNpbmNsdWRlICJpbnRlbF9sc3Bjb24uaCIKICNpbmNsdWRl ICJpbnRlbF9sdmRzLmgiCiAjaW5jbHVkZSAiaW50ZWxfcGFuZWwuaCIKKyNpbmNsdWRlICJpbnRl bF9wcHMuaCIKICNpbmNsdWRlICJpbnRlbF9wc3IuaCIKICNpbmNsdWRlICJpbnRlbF9zaWRlYmFu ZC5oIgogI2luY2x1ZGUgImludGVsX3RjLmgiCkBAIC0xMjEsNiArMTIyLDExIEBAIHN0YXRpYyBj b25zdCBzdHJ1Y3QgZHBfbGlua19kcGxsIGNodl9kcGxsW10gPSB7CiAJCXsgLnAxID0gNCwgLnAy ID0gMSwgLm4gPSAxLCAubTEgPSAyLCAubTIgPSAweDZjMDAwMDAgfSB9LAogfTsKIAorY29uc3Qg c3RydWN0IGRwbGwgKnZsdl9nZXRfZHBsbChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSkK K3sKKwlyZXR1cm4gSVNfQ0hFUlJZVklFVyhpOTE1KSA/ICZjaHZfZHBsbFswXS5kcGxsIDogJnZs dl9kcGxsWzBdLmRwbGw7Cit9CisKIC8qIENvbnN0YW50cyBmb3IgRFAgRFNDIGNvbmZpZ3VyYXRp b25zICovCiBzdGF0aWMgY29uc3QgdTggdmFsaWRfZHNjX2JwcFtdID0gezYsIDgsIDEwLCAxMiwg MTV9OwogCkBAIC0xNDUsMTIgKzE1MSw2IEBAIGJvb2wgaW50ZWxfZHBfaXNfZWRwKHN0cnVjdCBp bnRlbF9kcCAqaW50ZWxfZHApCiAKIHN0YXRpYyB2b2lkIGludGVsX2RwX2xpbmtfZG93bihzdHJ1 Y3QgaW50ZWxfZW5jb2RlciAqZW5jb2RlciwKIAkJCSAgICAgICBjb25zdCBzdHJ1Y3QgaW50ZWxf Y3J0Y19zdGF0ZSAqb2xkX2NydGNfc3RhdGUpOwotc3RhdGljIGJvb2wgZWRwX3BhbmVsX3ZkZF9v bihzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKTsKLXN0YXRpYyB2b2lkIGVkcF9wYW5lbF92ZGRf b2ZmKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAsIGJvb2wgc3luYyk7Ci1zdGF0aWMgdm9pZCB2 bHZfaW5pdF9wYW5lbF9wb3dlcl9zZXF1ZW5jZXIoc3RydWN0IGludGVsX2VuY29kZXIgKmVuY29k ZXIsCi0JCQkJCSAgIGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlKTsK LXN0YXRpYyB2b2lkIHZsdl9zdGVhbF9wb3dlcl9zZXF1ZW5jZXIoc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2LAotCQkJCSAgICAgIGVudW0gcGlwZSBwaXBlKTsKIHN0YXRpYyB2b2lk IGludGVsX2RwX3Vuc2V0X2VkaWQoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCk7CiAKIC8qIHVw ZGF0ZSBzaW5rIHJhdGVzIGZyb20gZHBjZCAqLwpAQCAtODU0LDQ1MSArODU0LDYgQEAgc3RhdGlj IHZvaWQgaW50ZWxfZHBfdW5wYWNrX2F1eCh1MzIgc3JjLCB1OCAqZHN0LCBpbnQgZHN0X2J5dGVz KQogCQlkc3RbaV0gPSBzcmMgPj4gKCgzLWkpICogOCk7CiB9CiAKLXN0YXRpYyB2b2lkCi1pbnRl bF9kcF9pbml0X3BhbmVsX3Bvd2VyX3NlcXVlbmNlcihzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2Rw KTsKLXN0YXRpYyB2b2lkCi1pbnRlbF9kcF9pbml0X3BhbmVsX3Bvd2VyX3NlcXVlbmNlcl9yZWdp c3RlcnMoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCwKLQkJCQkJICAgICAgYm9vbCBmb3JjZV9k aXNhYmxlX3ZkZCk7Ci1zdGF0aWMgdm9pZAotaW50ZWxfZHBfcHBzX2luaXQoc3RydWN0IGludGVs X2RwICppbnRlbF9kcCk7Ci0KLXN0YXRpYyBpbnRlbF93YWtlcmVmX3QKLXBwc19sb2NrKHN0cnVj dCBpbnRlbF9kcCAqaW50ZWxfZHApCi17Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9w cml2ID0gZHBfdG9faTkxNShpbnRlbF9kcCk7Ci0JaW50ZWxfd2FrZXJlZl90IHdha2VyZWY7Ci0K LQkvKgotCSAqIFNlZSBpbnRlbF9wb3dlcl9zZXF1ZW5jZXJfcmVzZXQoKSB3aHkgd2UgbmVlZAot CSAqIGEgcG93ZXIgZG9tYWluIHJlZmVyZW5jZSBoZXJlLgotCSAqLwotCXdha2VyZWYgPSBpbnRl bF9kaXNwbGF5X3Bvd2VyX2dldChkZXZfcHJpdiwKLQkJCQkJICBpbnRlbF9hdXhfcG93ZXJfZG9t YWluKGRwX3RvX2RpZ19wb3J0KGludGVsX2RwKSkpOwotCi0JbXV0ZXhfbG9jaygmZGV2X3ByaXYt PnBwc19tdXRleCk7Ci0KLQlyZXR1cm4gd2FrZXJlZjsKLX0KLQotc3RhdGljIGludGVsX3dha2Vy ZWZfdAotcHBzX3VubG9jayhzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwLCBpbnRlbF93YWtlcmVm X3Qgd2FrZXJlZikKLXsKLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkcF90 b19pOTE1KGludGVsX2RwKTsKLQotCW11dGV4X3VubG9jaygmZGV2X3ByaXYtPnBwc19tdXRleCk7 Ci0JaW50ZWxfZGlzcGxheV9wb3dlcl9wdXQoZGV2X3ByaXYsCi0JCQkJaW50ZWxfYXV4X3Bvd2Vy X2RvbWFpbihkcF90b19kaWdfcG9ydChpbnRlbF9kcCkpLAotCQkJCXdha2VyZWYpOwotCXJldHVy biAwOwotfQotCi0jZGVmaW5lIHdpdGhfcHBzX2xvY2soZHAsIHdmKSBcCi0JZm9yICgod2YpID0g cHBzX2xvY2soZHApOyAod2YpOyAod2YpID0gcHBzX3VubG9jaygoZHApLCAod2YpKSkKLQotc3Rh dGljIHZvaWQKLXZsdl9wb3dlcl9zZXF1ZW5jZXJfa2ljayhzdHJ1Y3QgaW50ZWxfZHAgKmludGVs X2RwKQotewotCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRwX3RvX2k5MTUo aW50ZWxfZHApOwotCXN0cnVjdCBpbnRlbF9kaWdpdGFsX3BvcnQgKmRpZ19wb3J0ID0gZHBfdG9f ZGlnX3BvcnQoaW50ZWxfZHApOwotCWVudW0gcGlwZSBwaXBlID0gaW50ZWxfZHAtPnBwc19waXBl OwotCWJvb2wgcGxsX2VuYWJsZWQsIHJlbGVhc2VfY2xfb3ZlcnJpZGUgPSBmYWxzZTsKLQllbnVt IGRwaW9fcGh5IHBoeSA9IERQSU9fUEhZKHBpcGUpOwotCWVudW0gZHBpb19jaGFubmVsIGNoID0g dmx2X3BpcGVfdG9fY2hhbm5lbChwaXBlKTsKLQl1MzIgRFA7Ci0KLQlpZiAoZHJtX1dBUk4oJmRl dl9wcml2LT5kcm0sCi0JCSAgICAgaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgaW50ZWxfZHAtPm91 dHB1dF9yZWcpICYgRFBfUE9SVF9FTiwKLQkJICAgICAic2tpcHBpbmcgcGlwZSAlYyBwb3dlciBz ZXF1ZW5jZXIga2ljayBkdWUgdG8gW0VOQ09ERVI6JWQ6JXNdIGJlaW5nIGFjdGl2ZVxuIiwKLQkJ ICAgICBwaXBlX25hbWUocGlwZSksIGRpZ19wb3J0LT5iYXNlLmJhc2UuYmFzZS5pZCwKLQkJICAg ICBkaWdfcG9ydC0+YmFzZS5iYXNlLm5hbWUpKQotCQlyZXR1cm47Ci0KLQlkcm1fZGJnX2ttcygm ZGV2X3ByaXYtPmRybSwKLQkJICAgICJraWNraW5nIHBpcGUgJWMgcG93ZXIgc2VxdWVuY2VyIGZv ciBbRU5DT0RFUjolZDolc11cbiIsCi0JCSAgICBwaXBlX25hbWUocGlwZSksIGRpZ19wb3J0LT5i YXNlLmJhc2UuYmFzZS5pZCwKLQkJICAgIGRpZ19wb3J0LT5iYXNlLmJhc2UubmFtZSk7Ci0KLQkv KiBQcmVzZXJ2ZSB0aGUgQklPUy1jb21wdXRlZCBkZXRlY3RlZCBiaXQuIFRoaXMgaXMKLQkgKiBz dXBwb3NlZCB0byBiZSByZWFkLW9ubHkuCi0JICovCi0JRFAgPSBpbnRlbF9kZV9yZWFkKGRldl9w cml2LCBpbnRlbF9kcC0+b3V0cHV0X3JlZykgJiBEUF9ERVRFQ1RFRDsKLQlEUCB8PSBEUF9WT0xU QUdFXzBfNCB8IERQX1BSRV9FTVBIQVNJU18wOwotCURQIHw9IERQX1BPUlRfV0lEVEgoMSk7Ci0J RFAgfD0gRFBfTElOS19UUkFJTl9QQVRfMTsKLQotCWlmIChJU19DSEVSUllWSUVXKGRldl9wcml2 KSkKLQkJRFAgfD0gRFBfUElQRV9TRUxfQ0hWKHBpcGUpOwotCWVsc2UKLQkJRFAgfD0gRFBfUElQ RV9TRUwocGlwZSk7Ci0KLQlwbGxfZW5hYmxlZCA9IGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIERQ TEwocGlwZSkpICYgRFBMTF9WQ09fRU5BQkxFOwotCi0JLyoKLQkgKiBUaGUgRFBMTCBmb3IgdGhl IHBpcGUgbXVzdCBiZSBlbmFibGVkIGZvciB0aGlzIHRvIHdvcmsuCi0JICogU28gZW5hYmxlIHRl bXBvcmFyaWx5IGl0IGlmIGl0J3Mgbm90IGFscmVhZHkgZW5hYmxlZC4KLQkgKi8KLQlpZiAoIXBs bF9lbmFibGVkKSB7Ci0JCXJlbGVhc2VfY2xfb3ZlcnJpZGUgPSBJU19DSEVSUllWSUVXKGRldl9w cml2KSAmJgotCQkJIWNodl9waHlfcG93ZXJnYXRlX2NoKGRldl9wcml2LCBwaHksIGNoLCB0cnVl KTsKLQotCQlpZiAodmx2X2ZvcmNlX3BsbF9vbihkZXZfcHJpdiwgcGlwZSwgSVNfQ0hFUlJZVklF VyhkZXZfcHJpdikgPwotCQkJCSAgICAgJmNodl9kcGxsWzBdLmRwbGwgOiAmdmx2X2RwbGxbMF0u ZHBsbCkpIHsKLQkJCWRybV9lcnIoJmRldl9wcml2LT5kcm0sCi0JCQkJIkZhaWxlZCB0byBmb3Jj ZSBvbiBwbGwgZm9yIHBpcGUgJWMhXG4iLAotCQkJCXBpcGVfbmFtZShwaXBlKSk7Ci0JCQlyZXR1 cm47Ci0JCX0KLQl9Ci0KLQkvKgotCSAqIFNpbWlsYXIgbWFnaWMgYXMgaW4gaW50ZWxfZHBfZW5h YmxlX3BvcnQoKS4KLQkgKiBXZSBfbXVzdF8gZG8gdGhpcyBwb3J0IGVuYWJsZSArIGRpc2FibGUg dHJpY2sKLQkgKiB0byBtYWtlIHRoaXMgcG93ZXIgc2VxdWVuY2VyIGxvY2sgb250byB0aGUgcG9y dC4KLQkgKiBPdGhlcndpc2UgZXZlbiBWREQgZm9yY2UgYml0IHdvbid0IHdvcmsuCi0JICovCi0J aW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIGludGVsX2RwLT5vdXRwdXRfcmVnLCBEUCk7Ci0JaW50 ZWxfZGVfcG9zdGluZ19yZWFkKGRldl9wcml2LCBpbnRlbF9kcC0+b3V0cHV0X3JlZyk7Ci0KLQlp bnRlbF9kZV93cml0ZShkZXZfcHJpdiwgaW50ZWxfZHAtPm91dHB1dF9yZWcsIERQIHwgRFBfUE9S VF9FTik7Ci0JaW50ZWxfZGVfcG9zdGluZ19yZWFkKGRldl9wcml2LCBpbnRlbF9kcC0+b3V0cHV0 X3JlZyk7Ci0KLQlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgaW50ZWxfZHAtPm91dHB1dF9yZWcs IERQICYgfkRQX1BPUlRfRU4pOwotCWludGVsX2RlX3Bvc3RpbmdfcmVhZChkZXZfcHJpdiwgaW50 ZWxfZHAtPm91dHB1dF9yZWcpOwotCi0JaWYgKCFwbGxfZW5hYmxlZCkgewotCQl2bHZfZm9yY2Vf cGxsX29mZihkZXZfcHJpdiwgcGlwZSk7Ci0KLQkJaWYgKHJlbGVhc2VfY2xfb3ZlcnJpZGUpCi0J CQljaHZfcGh5X3Bvd2VyZ2F0ZV9jaChkZXZfcHJpdiwgcGh5LCBjaCwgZmFsc2UpOwotCX0KLX0K LQotc3RhdGljIGVudW0gcGlwZSB2bHZfZmluZF9mcmVlX3BwcyhzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqZGV2X3ByaXYpCi17Ci0Jc3RydWN0IGludGVsX2VuY29kZXIgKmVuY29kZXI7Ci0JdW5z aWduZWQgaW50IHBpcGVzID0gKDEgPDwgUElQRV9BKSB8ICgxIDw8IFBJUEVfQik7Ci0KLQkvKgot CSAqIFdlIGRvbid0IGhhdmUgcG93ZXIgc2VxdWVuY2VyIGN1cnJlbnRseS4KLQkgKiBQaWNrIG9u ZSB0aGF0J3Mgbm90IHVzZWQgYnkgb3RoZXIgcG9ydHMuCi0JICovCi0JZm9yX2VhY2hfaW50ZWxf ZHAoJmRldl9wcml2LT5kcm0sIGVuY29kZXIpIHsKLQkJc3RydWN0IGludGVsX2RwICppbnRlbF9k cCA9IGVuY190b19pbnRlbF9kcChlbmNvZGVyKTsKLQotCQlpZiAoZW5jb2Rlci0+dHlwZSA9PSBJ TlRFTF9PVVRQVVRfRURQKSB7Ci0JCQlkcm1fV0FSTl9PTigmZGV2X3ByaXYtPmRybSwKLQkJCQkg ICAgaW50ZWxfZHAtPmFjdGl2ZV9waXBlICE9IElOVkFMSURfUElQRSAmJgotCQkJCSAgICBpbnRl bF9kcC0+YWN0aXZlX3BpcGUgIT0KLQkJCQkgICAgaW50ZWxfZHAtPnBwc19waXBlKTsKLQotCQkJ aWYgKGludGVsX2RwLT5wcHNfcGlwZSAhPSBJTlZBTElEX1BJUEUpCi0JCQkJcGlwZXMgJj0gfigx IDw8IGludGVsX2RwLT5wcHNfcGlwZSk7Ci0JCX0gZWxzZSB7Ci0JCQlkcm1fV0FSTl9PTigmZGV2 X3ByaXYtPmRybSwKLQkJCQkgICAgaW50ZWxfZHAtPnBwc19waXBlICE9IElOVkFMSURfUElQRSk7 Ci0KLQkJCWlmIChpbnRlbF9kcC0+YWN0aXZlX3BpcGUgIT0gSU5WQUxJRF9QSVBFKQotCQkJCXBp cGVzICY9IH4oMSA8PCBpbnRlbF9kcC0+YWN0aXZlX3BpcGUpOwotCQl9Ci0JfQotCi0JaWYgKHBp cGVzID09IDApCi0JCXJldHVybiBJTlZBTElEX1BJUEU7Ci0KLQlyZXR1cm4gZmZzKHBpcGVzKSAt IDE7Ci19Ci0KLXN0YXRpYyBlbnVtIHBpcGUKLXZsdl9wb3dlcl9zZXF1ZW5jZXJfcGlwZShzdHJ1 Y3QgaW50ZWxfZHAgKmludGVsX2RwKQotewotCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZf cHJpdiA9IGRwX3RvX2k5MTUoaW50ZWxfZHApOwotCXN0cnVjdCBpbnRlbF9kaWdpdGFsX3BvcnQg KmRpZ19wb3J0ID0gZHBfdG9fZGlnX3BvcnQoaW50ZWxfZHApOwotCWVudW0gcGlwZSBwaXBlOwot Ci0JbG9ja2RlcF9hc3NlcnRfaGVsZCgmZGV2X3ByaXYtPnBwc19tdXRleCk7Ci0KLQkvKiBXZSBz aG91bGQgbmV2ZXIgbGFuZCBoZXJlIHdpdGggcmVndWxhciBEUCBwb3J0cyAqLwotCWRybV9XQVJO X09OKCZkZXZfcHJpdi0+ZHJtLCAhaW50ZWxfZHBfaXNfZWRwKGludGVsX2RwKSk7Ci0KLQlkcm1f V0FSTl9PTigmZGV2X3ByaXYtPmRybSwgaW50ZWxfZHAtPmFjdGl2ZV9waXBlICE9IElOVkFMSURf UElQRSAmJgotCQkgICAgaW50ZWxfZHAtPmFjdGl2ZV9waXBlICE9IGludGVsX2RwLT5wcHNfcGlw ZSk7Ci0KLQlpZiAoaW50ZWxfZHAtPnBwc19waXBlICE9IElOVkFMSURfUElQRSkKLQkJcmV0dXJu IGludGVsX2RwLT5wcHNfcGlwZTsKLQotCXBpcGUgPSB2bHZfZmluZF9mcmVlX3BwcyhkZXZfcHJp dik7Ci0KLQkvKgotCSAqIERpZG4ndCBmaW5kIG9uZS4gVGhpcyBzaG91bGQgbm90IGhhcHBlbiBz aW5jZSB0aGVyZQotCSAqIGFyZSB0d28gcG93ZXIgc2VxdWVuY2VycyBhbmQgdXAgdG8gdHdvIGVE UCBwb3J0cy4KLQkgKi8KLQlpZiAoZHJtX1dBUk5fT04oJmRldl9wcml2LT5kcm0sIHBpcGUgPT0g SU5WQUxJRF9QSVBFKSkKLQkJcGlwZSA9IFBJUEVfQTsKLQotCXZsdl9zdGVhbF9wb3dlcl9zZXF1 ZW5jZXIoZGV2X3ByaXYsIHBpcGUpOwotCWludGVsX2RwLT5wcHNfcGlwZSA9IHBpcGU7Ci0KLQlk cm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwKLQkJICAgICJwaWNrZWQgcGlwZSAlYyBwb3dlciBz ZXF1ZW5jZXIgZm9yIFtFTkNPREVSOiVkOiVzXVxuIiwKLQkJICAgIHBpcGVfbmFtZShpbnRlbF9k cC0+cHBzX3BpcGUpLAotCQkgICAgZGlnX3BvcnQtPmJhc2UuYmFzZS5iYXNlLmlkLAotCQkgICAg ZGlnX3BvcnQtPmJhc2UuYmFzZS5uYW1lKTsKLQotCS8qIGluaXQgcG93ZXIgc2VxdWVuY2VyIG9u IHRoaXMgcGlwZSBhbmQgcG9ydCAqLwotCWludGVsX2RwX2luaXRfcGFuZWxfcG93ZXJfc2VxdWVu Y2VyKGludGVsX2RwKTsKLQlpbnRlbF9kcF9pbml0X3BhbmVsX3Bvd2VyX3NlcXVlbmNlcl9yZWdp c3RlcnMoaW50ZWxfZHAsIHRydWUpOwotCi0JLyoKLQkgKiBFdmVuIHZkZCBmb3JjZSBkb2Vzbid0 IHdvcmsgdW50aWwgd2UndmUgbWFkZQotCSAqIHRoZSBwb3dlciBzZXF1ZW5jZXIgbG9jayBpbiBv biB0aGUgcG9ydC4KLQkgKi8KLQl2bHZfcG93ZXJfc2VxdWVuY2VyX2tpY2soaW50ZWxfZHApOwot Ci0JcmV0dXJuIGludGVsX2RwLT5wcHNfcGlwZTsKLX0KLQotc3RhdGljIGludAotYnh0X3Bvd2Vy X3NlcXVlbmNlcl9pZHgoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCkKLXsKLQlzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkcF90b19pOTE1KGludGVsX2RwKTsKLQlpbnQgYmFj a2xpZ2h0X2NvbnRyb2xsZXIgPSBkZXZfcHJpdi0+dmJ0LmJhY2tsaWdodC5jb250cm9sbGVyOwot Ci0JbG9ja2RlcF9hc3NlcnRfaGVsZCgmZGV2X3ByaXYtPnBwc19tdXRleCk7Ci0KLQkvKiBXZSBz aG91bGQgbmV2ZXIgbGFuZCBoZXJlIHdpdGggcmVndWxhciBEUCBwb3J0cyAqLwotCWRybV9XQVJO X09OKCZkZXZfcHJpdi0+ZHJtLCAhaW50ZWxfZHBfaXNfZWRwKGludGVsX2RwKSk7Ci0KLQlpZiAo IWludGVsX2RwLT5wcHNfcmVzZXQpCi0JCXJldHVybiBiYWNrbGlnaHRfY29udHJvbGxlcjsKLQot CWludGVsX2RwLT5wcHNfcmVzZXQgPSBmYWxzZTsKLQotCS8qCi0JICogT25seSB0aGUgSFcgbmVl ZHMgdG8gYmUgcmVwcm9ncmFtbWVkLCB0aGUgU1cgc3RhdGUgaXMgZml4ZWQgYW5kCi0JICogaGFz IGJlZW4gc2V0dXAgZHVyaW5nIGNvbm5lY3RvciBpbml0LgotCSAqLwotCWludGVsX2RwX2luaXRf cGFuZWxfcG93ZXJfc2VxdWVuY2VyX3JlZ2lzdGVycyhpbnRlbF9kcCwgZmFsc2UpOwotCi0JcmV0 dXJuIGJhY2tsaWdodF9jb250cm9sbGVyOwotfQotCi10eXBlZGVmIGJvb2wgKCp2bHZfcGlwZV9j aGVjaykoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAotCQkJICAgICAgIGVudW0g cGlwZSBwaXBlKTsKLQotc3RhdGljIGJvb2wgdmx2X3BpcGVfaGFzX3BwX29uKHN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdiwKLQkJCSAgICAgICBlbnVtIHBpcGUgcGlwZSkKLXsKLQly ZXR1cm4gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgUFBfU1RBVFVTKHBpcGUpKSAmIFBQX09OOwot fQotCi1zdGF0aWMgYm9vbCB2bHZfcGlwZV9oYXNfdmRkX29uKHN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdiwKLQkJCQllbnVtIHBpcGUgcGlwZSkKLXsKLQlyZXR1cm4gaW50ZWxfZGVf cmVhZChkZXZfcHJpdiwgUFBfQ09OVFJPTChwaXBlKSkgJiBFRFBfRk9SQ0VfVkREOwotfQotCi1z dGF0aWMgYm9vbCB2bHZfcGlwZV9hbnkoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2 LAotCQkJIGVudW0gcGlwZSBwaXBlKQotewotCXJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgZW51 bSBwaXBlCi12bHZfaW5pdGlhbF9wcHNfcGlwZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2 X3ByaXYsCi0JCSAgICAgZW51bSBwb3J0IHBvcnQsCi0JCSAgICAgdmx2X3BpcGVfY2hlY2sgcGlw ZV9jaGVjaykKLXsKLQllbnVtIHBpcGUgcGlwZTsKLQotCWZvciAocGlwZSA9IFBJUEVfQTsgcGlw ZSA8PSBQSVBFX0I7IHBpcGUrKykgewotCQl1MzIgcG9ydF9zZWwgPSBpbnRlbF9kZV9yZWFkKGRl dl9wcml2LCBQUF9PTl9ERUxBWVMocGlwZSkpICYKLQkJCVBBTkVMX1BPUlRfU0VMRUNUX01BU0s7 Ci0KLQkJaWYgKHBvcnRfc2VsICE9IFBBTkVMX1BPUlRfU0VMRUNUX1ZMVihwb3J0KSkKLQkJCWNv bnRpbnVlOwotCi0JCWlmICghcGlwZV9jaGVjayhkZXZfcHJpdiwgcGlwZSkpCi0JCQljb250aW51 ZTsKLQotCQlyZXR1cm4gcGlwZTsKLQl9Ci0KLQlyZXR1cm4gSU5WQUxJRF9QSVBFOwotfQotCi1z dGF0aWMgdm9pZAotdmx2X2luaXRpYWxfcG93ZXJfc2VxdWVuY2VyX3NldHVwKHN0cnVjdCBpbnRl bF9kcCAqaW50ZWxfZHApCi17Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0g ZHBfdG9faTkxNShpbnRlbF9kcCk7Ci0Jc3RydWN0IGludGVsX2RpZ2l0YWxfcG9ydCAqZGlnX3Bv cnQgPSBkcF90b19kaWdfcG9ydChpbnRlbF9kcCk7Ci0JZW51bSBwb3J0IHBvcnQgPSBkaWdfcG9y dC0+YmFzZS5wb3J0OwotCi0JbG9ja2RlcF9hc3NlcnRfaGVsZCgmZGV2X3ByaXYtPnBwc19tdXRl eCk7Ci0KLQkvKiB0cnkgdG8gZmluZCBhIHBpcGUgd2l0aCB0aGlzIHBvcnQgc2VsZWN0ZWQgKi8K LQkvKiBmaXJzdCBwaWNrIG9uZSB3aGVyZSB0aGUgcGFuZWwgaXMgb24gKi8KLQlpbnRlbF9kcC0+ cHBzX3BpcGUgPSB2bHZfaW5pdGlhbF9wcHNfcGlwZShkZXZfcHJpdiwgcG9ydCwKLQkJCQkJCSAg dmx2X3BpcGVfaGFzX3BwX29uKTsKLQkvKiBkaWRuJ3QgZmluZCBvbmU/IHBpY2sgb25lIHdoZXJl IHZkZCBpcyBvbiAqLwotCWlmIChpbnRlbF9kcC0+cHBzX3BpcGUgPT0gSU5WQUxJRF9QSVBFKQot CQlpbnRlbF9kcC0+cHBzX3BpcGUgPSB2bHZfaW5pdGlhbF9wcHNfcGlwZShkZXZfcHJpdiwgcG9y dCwKLQkJCQkJCQkgIHZsdl9waXBlX2hhc192ZGRfb24pOwotCS8qIGRpZG4ndCBmaW5kIG9uZT8g cGljayBvbmUgd2l0aCBqdXN0IHRoZSBjb3JyZWN0IHBvcnQgKi8KLQlpZiAoaW50ZWxfZHAtPnBw c19waXBlID09IElOVkFMSURfUElQRSkKLQkJaW50ZWxfZHAtPnBwc19waXBlID0gdmx2X2luaXRp YWxfcHBzX3BpcGUoZGV2X3ByaXYsIHBvcnQsCi0JCQkJCQkJICB2bHZfcGlwZV9hbnkpOwotCi0J LyogZGlkbid0IGZpbmQgb25lPyBqdXN0IGxldCB2bHZfcG93ZXJfc2VxdWVuY2VyX3BpcGUoKSBw aWNrIG9uZSB3aGVuIG5lZWRlZCAqLwotCWlmIChpbnRlbF9kcC0+cHBzX3BpcGUgPT0gSU5WQUxJ RF9QSVBFKSB7Ci0JCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJtLAotCQkJICAgICJubyBpbml0 aWFsIHBvd2VyIHNlcXVlbmNlciBmb3IgW0VOQ09ERVI6JWQ6JXNdXG4iLAotCQkJICAgIGRpZ19w b3J0LT5iYXNlLmJhc2UuYmFzZS5pZCwKLQkJCSAgICBkaWdfcG9ydC0+YmFzZS5iYXNlLm5hbWUp OwotCQlyZXR1cm47Ci0JfQotCi0JZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sCi0JCSAgICAi aW5pdGlhbCBwb3dlciBzZXF1ZW5jZXIgZm9yIFtFTkNPREVSOiVkOiVzXTogcGlwZSAlY1xuIiwK LQkJICAgIGRpZ19wb3J0LT5iYXNlLmJhc2UuYmFzZS5pZCwKLQkJICAgIGRpZ19wb3J0LT5iYXNl LmJhc2UubmFtZSwKLQkJICAgIHBpcGVfbmFtZShpbnRlbF9kcC0+cHBzX3BpcGUpKTsKLQotCWlu dGVsX2RwX2luaXRfcGFuZWxfcG93ZXJfc2VxdWVuY2VyKGludGVsX2RwKTsKLQlpbnRlbF9kcF9p bml0X3BhbmVsX3Bvd2VyX3NlcXVlbmNlcl9yZWdpc3RlcnMoaW50ZWxfZHAsIGZhbHNlKTsKLX0K LQotdm9pZCBpbnRlbF9wb3dlcl9zZXF1ZW5jZXJfcmVzZXQoc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2KQotewotCXN0cnVjdCBpbnRlbF9lbmNvZGVyICplbmNvZGVyOwotCi0JaWYg KGRybV9XQVJOX09OKCZkZXZfcHJpdi0+ZHJtLAotCQkJIShJU19WQUxMRVlWSUVXKGRldl9wcml2 KSB8fAotCQkJICBJU19DSEVSUllWSUVXKGRldl9wcml2KSB8fAotCQkJICBJU19HRU45X0xQKGRl dl9wcml2KSkpKQotCQlyZXR1cm47Ci0KLQkvKgotCSAqIFdlIGNhbid0IGdyYWIgcHBzX211dGV4 IGhlcmUgZHVlIHRvIGRlYWRsb2NrIHdpdGggcG93ZXJfZG9tYWluCi0JICogbXV0ZXggd2hlbiBw b3dlcl9kb21haW4gZnVuY3Rpb25zIGFyZSBjYWxsZWQgd2hpbGUgaG9sZGluZyBwcHNfbXV0ZXgu Ci0JICogVGhhdCBhbHNvIG1lYW5zIHRoYXQgaW4gb3JkZXIgdG8gdXNlIHBwc19waXBlIHRoZSBj b2RlIG5lZWRzIHRvCi0JICogaG9sZCBib3RoIGEgcG93ZXIgZG9tYWluIHJlZmVyZW5jZSBhbmQg cHBzX211dGV4LCBhbmQgdGhlIHBvd2VyIGRvbWFpbgotCSAqIHJlZmVyZW5jZSBnZXQvcHV0IG11 c3QgYmUgZG9uZSB3aGlsZSBfbm90XyBob2xkaW5nIHBwc19tdXRleC4KLQkgKiBwcHNfe2xvY2ss dW5sb2NrfSgpIGRvIHRoZXNlIHN0ZXBzIGluIHRoZSBjb3JyZWN0IG9yZGVyLCBzbyBvbmUKLQkg KiBzaG91bGQgdXNlIHRoZW0gYWx3YXlzLgotCSAqLwotCi0JZm9yX2VhY2hfaW50ZWxfZHAoJmRl dl9wcml2LT5kcm0sIGVuY29kZXIpIHsKLQkJc3RydWN0IGludGVsX2RwICppbnRlbF9kcCA9IGVu Y190b19pbnRlbF9kcChlbmNvZGVyKTsKLQotCQlkcm1fV0FSTl9PTigmZGV2X3ByaXYtPmRybSwK LQkJCSAgICBpbnRlbF9kcC0+YWN0aXZlX3BpcGUgIT0gSU5WQUxJRF9QSVBFKTsKLQotCQlpZiAo ZW5jb2Rlci0+dHlwZSAhPSBJTlRFTF9PVVRQVVRfRURQKQotCQkJY29udGludWU7Ci0KLQkJaWYg KElTX0dFTjlfTFAoZGV2X3ByaXYpKQotCQkJaW50ZWxfZHAtPnBwc19yZXNldCA9IHRydWU7Ci0J CWVsc2UKLQkJCWludGVsX2RwLT5wcHNfcGlwZSA9IElOVkFMSURfUElQRTsKLQl9Ci19Ci0KLXN0 cnVjdCBwcHNfcmVnaXN0ZXJzIHsKLQlpOTE1X3JlZ190IHBwX2N0cmw7Ci0JaTkxNV9yZWdfdCBw cF9zdGF0OwotCWk5MTVfcmVnX3QgcHBfb247Ci0JaTkxNV9yZWdfdCBwcF9vZmY7Ci0JaTkxNV9y ZWdfdCBwcF9kaXY7Ci19OwotCi1zdGF0aWMgdm9pZCBpbnRlbF9wcHNfZ2V0X3JlZ2lzdGVycyhz dHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwLAotCQkJCSAgICBzdHJ1Y3QgcHBzX3JlZ2lzdGVycyAq cmVncykKLXsKLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkcF90b19pOTE1 KGludGVsX2RwKTsKLQlpbnQgcHBzX2lkeCA9IDA7Ci0KLQltZW1zZXQocmVncywgMCwgc2l6ZW9m KCpyZWdzKSk7Ci0KLQlpZiAoSVNfR0VOOV9MUChkZXZfcHJpdikpCi0JCXBwc19pZHggPSBieHRf cG93ZXJfc2VxdWVuY2VyX2lkeChpbnRlbF9kcCk7Ci0JZWxzZSBpZiAoSVNfVkFMTEVZVklFVyhk ZXZfcHJpdikgfHwgSVNfQ0hFUlJZVklFVyhkZXZfcHJpdikpCi0JCXBwc19pZHggPSB2bHZfcG93 ZXJfc2VxdWVuY2VyX3BpcGUoaW50ZWxfZHApOwotCi0JcmVncy0+cHBfY3RybCA9IFBQX0NPTlRS T0wocHBzX2lkeCk7Ci0JcmVncy0+cHBfc3RhdCA9IFBQX1NUQVRVUyhwcHNfaWR4KTsKLQlyZWdz LT5wcF9vbiA9IFBQX09OX0RFTEFZUyhwcHNfaWR4KTsKLQlyZWdzLT5wcF9vZmYgPSBQUF9PRkZf REVMQVlTKHBwc19pZHgpOwotCi0JLyogQ3ljbGUgZGVsYXkgbW92ZWQgZnJvbSBQUF9ESVZJU09S IHRvIFBQX0NPTlRST0wgKi8KLQlpZiAoSVNfR0VOOV9MUChkZXZfcHJpdikgfHwgSU5URUxfUENI X1RZUEUoZGV2X3ByaXYpID49IFBDSF9DTlApCi0JCXJlZ3MtPnBwX2RpdiA9IElOVkFMSURfTU1J T19SRUc7Ci0JZWxzZQotCQlyZWdzLT5wcF9kaXYgPSBQUF9ESVZJU09SKHBwc19pZHgpOwotfQot Ci1zdGF0aWMgaTkxNV9yZWdfdAotX3BwX2N0cmxfcmVnKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxf ZHApCi17Ci0Jc3RydWN0IHBwc19yZWdpc3RlcnMgcmVnczsKLQotCWludGVsX3Bwc19nZXRfcmVn aXN0ZXJzKGludGVsX2RwLCAmcmVncyk7Ci0KLQlyZXR1cm4gcmVncy5wcF9jdHJsOwotfQotCi1z dGF0aWMgaTkxNV9yZWdfdAotX3BwX3N0YXRfcmVnKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAp Ci17Ci0Jc3RydWN0IHBwc19yZWdpc3RlcnMgcmVnczsKLQotCWludGVsX3Bwc19nZXRfcmVnaXN0 ZXJzKGludGVsX2RwLCAmcmVncyk7Ci0KLQlyZXR1cm4gcmVncy5wcF9zdGF0OwotfQotCi1zdGF0 aWMgYm9vbCBlZHBfaGF2ZV9wYW5lbF9wb3dlcihzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKQot ewotCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRwX3RvX2k5MTUoaW50ZWxf ZHApOwotCi0JbG9ja2RlcF9hc3NlcnRfaGVsZCgmZGV2X3ByaXYtPnBwc19tdXRleCk7Ci0KLQlp ZiAoKElTX1ZBTExFWVZJRVcoZGV2X3ByaXYpIHx8IElTX0NIRVJSWVZJRVcoZGV2X3ByaXYpKSAm JgotCSAgICBpbnRlbF9kcC0+cHBzX3BpcGUgPT0gSU5WQUxJRF9QSVBFKQotCQlyZXR1cm4gZmFs c2U7Ci0KLQlyZXR1cm4gKGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIF9wcF9zdGF0X3JlZyhpbnRl bF9kcCkpICYgUFBfT04pICE9IDA7Ci19Ci0KLXN0YXRpYyBib29sIGVkcF9oYXZlX3BhbmVsX3Zk ZChzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKQotewotCXN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICpkZXZfcHJpdiA9IGRwX3RvX2k5MTUoaW50ZWxfZHApOwotCi0JbG9ja2RlcF9hc3NlcnRfaGVs ZCgmZGV2X3ByaXYtPnBwc19tdXRleCk7Ci0KLQlpZiAoKElTX1ZBTExFWVZJRVcoZGV2X3ByaXYp IHx8IElTX0NIRVJSWVZJRVcoZGV2X3ByaXYpKSAmJgotCSAgICBpbnRlbF9kcC0+cHBzX3BpcGUg PT0gSU5WQUxJRF9QSVBFKQotCQlyZXR1cm4gZmFsc2U7Ci0KLQlyZXR1cm4gaW50ZWxfZGVfcmVh ZChkZXZfcHJpdiwgX3BwX2N0cmxfcmVnKGludGVsX2RwKSkgJiBFRFBfRk9SQ0VfVkREOwotfQot Ci1zdGF0aWMgdm9pZAotaW50ZWxfZHBfY2hlY2tfZWRwKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxf ZHApCi17Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZHBfdG9faTkxNShp bnRlbF9kcCk7Ci0KLQlpZiAoIWludGVsX2RwX2lzX2VkcChpbnRlbF9kcCkpCi0JCXJldHVybjsK LQotCWlmICghZWRwX2hhdmVfcGFuZWxfcG93ZXIoaW50ZWxfZHApICYmICFlZHBfaGF2ZV9wYW5l bF92ZGQoaW50ZWxfZHApKSB7Ci0JCWRybV9XQVJOKCZkZXZfcHJpdi0+ZHJtLCAxLAotCQkJICJl RFAgcG93ZXJlZCBvZmYgd2hpbGUgYXR0ZW1wdGluZyBhdXggY2hhbm5lbCBjb21tdW5pY2F0aW9u LlxuIik7Ci0JCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJtLCAiU3RhdHVzIDB4JTA4eCBDb250 cm9sIDB4JTA4eFxuIiwKLQkJCSAgICBpbnRlbF9kZV9yZWFkKGRldl9wcml2LCBfcHBfc3RhdF9y ZWcoaW50ZWxfZHApKSwKLQkJCSAgICBpbnRlbF9kZV9yZWFkKGRldl9wcml2LCBfcHBfY3RybF9y ZWcoaW50ZWxfZHApKSk7Ci0JfQotfQotCiBzdGF0aWMgdTMyCiBpbnRlbF9kcF9hdXhfd2FpdF9k b25lKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApCiB7CkBAIC0yOTA3LDQ5MiArMjQ2Miw2NyBA QCBzdGF0aWMgdm9pZCBpbnRlbF9kcF9wcmVwYXJlKHN0cnVjdCBpbnRlbF9lbmNvZGVyICplbmNv ZGVyLAogCSAqCiAJICogSUJYIFBDSCBhbmQgQ1BVIGFyZSB0aGUgc2FtZSBmb3IgYWxtb3N0IGV2 ZXJ5dGhpbmcsCiAJICogZXhjZXB0IHRoYXQgdGhlIENQVSBEUCBQTEwgaXMgY29uZmlndXJlZCBp biB0aGlzCi0JICogcmVnaXN0ZXIKLQkgKgotCSAqIENQVCBQQ0ggaXMgcXVpdGUgZGlmZmVyZW50 LCBoYXZpbmcgbWFueSBiaXRzIG1vdmVkCi0JICogdG8gdGhlIFRSQU5TX0RQX0NUTCByZWdpc3Rl ciBpbnN0ZWFkLiBUaGF0Ci0JICogY29uZmlndXJhdGlvbiBoYXBwZW5zIChvZGRseSkgaW4gaWxr X3BjaF9lbmFibGUKLQkgKi8KLQotCS8qIFByZXNlcnZlIHRoZSBCSU9TLWNvbXB1dGVkIGRldGVj dGVkIGJpdC4gVGhpcyBpcwotCSAqIHN1cHBvc2VkIHRvIGJlIHJlYWQtb25seS4KLQkgKi8KLQlp bnRlbF9kcC0+RFAgPSBpbnRlbF9kZV9yZWFkKGRldl9wcml2LCBpbnRlbF9kcC0+b3V0cHV0X3Jl ZykgJiBEUF9ERVRFQ1RFRDsKLQotCS8qIEhhbmRsZSBEUCBiaXRzIGluIGNvbW1vbiBiZXR3ZWVu IGFsbCB0aHJlZSByZWdpc3RlciBmb3JtYXRzICovCi0JaW50ZWxfZHAtPkRQIHw9IERQX1ZPTFRB R0VfMF80IHwgRFBfUFJFX0VNUEhBU0lTXzA7Ci0JaW50ZWxfZHAtPkRQIHw9IERQX1BPUlRfV0lE VEgocGlwZV9jb25maWctPmxhbmVfY291bnQpOwotCi0JLyogU3BsaXQgb3V0IHRoZSBJQlgvQ1BV IHZzIENQVCBzZXR0aW5ncyAqLwotCi0JaWYgKElTX0lWWUJSSURHRShkZXZfcHJpdikgJiYgcG9y dCA9PSBQT1JUX0EpIHsKLQkJaWYgKGFkanVzdGVkX21vZGUtPmZsYWdzICYgRFJNX01PREVfRkxB R19QSFNZTkMpCi0JCQlpbnRlbF9kcC0+RFAgfD0gRFBfU1lOQ19IU19ISUdIOwotCQlpZiAoYWRq dXN0ZWRfbW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX1BWU1lOQykKLQkJCWludGVsX2RwLT5E UCB8PSBEUF9TWU5DX1ZTX0hJR0g7Ci0JCWludGVsX2RwLT5EUCB8PSBEUF9MSU5LX1RSQUlOX09G Rl9DUFQ7Ci0KLQkJaWYgKGRybV9kcF9lbmhhbmNlZF9mcmFtZV9jYXAoaW50ZWxfZHAtPmRwY2Qp KQotCQkJaW50ZWxfZHAtPkRQIHw9IERQX0VOSEFOQ0VEX0ZSQU1JTkc7Ci0KLQkJaW50ZWxfZHAt PkRQIHw9IERQX1BJUEVfU0VMX0lWQihjcnRjLT5waXBlKTsKLQl9IGVsc2UgaWYgKEhBU19QQ0hf Q1BUKGRldl9wcml2KSAmJiBwb3J0ICE9IFBPUlRfQSkgewotCQl1MzIgdHJhbnNfZHA7Ci0KLQkJ aW50ZWxfZHAtPkRQIHw9IERQX0xJTktfVFJBSU5fT0ZGX0NQVDsKLQotCQl0cmFuc19kcCA9IGlu dGVsX2RlX3JlYWQoZGV2X3ByaXYsIFRSQU5TX0RQX0NUTChjcnRjLT5waXBlKSk7Ci0JCWlmIChk cm1fZHBfZW5oYW5jZWRfZnJhbWVfY2FwKGludGVsX2RwLT5kcGNkKSkKLQkJCXRyYW5zX2RwIHw9 IFRSQU5TX0RQX0VOSF9GUkFNSU5HOwotCQllbHNlCi0JCQl0cmFuc19kcCAmPSB+VFJBTlNfRFBf RU5IX0ZSQU1JTkc7Ci0JCWludGVsX2RlX3dyaXRlKGRldl9wcml2LCBUUkFOU19EUF9DVEwoY3J0 Yy0+cGlwZSksIHRyYW5zX2RwKTsKLQl9IGVsc2UgewotCQlpZiAoSVNfRzRYKGRldl9wcml2KSAm JiBwaXBlX2NvbmZpZy0+bGltaXRlZF9jb2xvcl9yYW5nZSkKLQkJCWludGVsX2RwLT5EUCB8PSBE UF9DT0xPUl9SQU5HRV8xNl8yMzU7Ci0KLQkJaWYgKGFkanVzdGVkX21vZGUtPmZsYWdzICYgRFJN X01PREVfRkxBR19QSFNZTkMpCi0JCQlpbnRlbF9kcC0+RFAgfD0gRFBfU1lOQ19IU19ISUdIOwot CQlpZiAoYWRqdXN0ZWRfbW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX1BWU1lOQykKLQkJCWlu dGVsX2RwLT5EUCB8PSBEUF9TWU5DX1ZTX0hJR0g7Ci0JCWludGVsX2RwLT5EUCB8PSBEUF9MSU5L X1RSQUlOX09GRjsKLQotCQlpZiAoZHJtX2RwX2VuaGFuY2VkX2ZyYW1lX2NhcChpbnRlbF9kcC0+ ZHBjZCkpCi0JCQlpbnRlbF9kcC0+RFAgfD0gRFBfRU5IQU5DRURfRlJBTUlORzsKLQotCQlpZiAo SVNfQ0hFUlJZVklFVyhkZXZfcHJpdikpCi0JCQlpbnRlbF9kcC0+RFAgfD0gRFBfUElQRV9TRUxf Q0hWKGNydGMtPnBpcGUpOwotCQllbHNlCi0JCQlpbnRlbF9kcC0+RFAgfD0gRFBfUElQRV9TRUwo Y3J0Yy0+cGlwZSk7Ci0JfQotfQotCi0jZGVmaW5lIElETEVfT05fTUFTSwkJKFBQX09OIHwgUFBf U0VRVUVOQ0VfTUFTSyB8IDAgICAgICAgICAgICAgICAgICAgICB8IFBQX1NFUVVFTkNFX1NUQVRF X01BU0spCi0jZGVmaW5lIElETEVfT05fVkFMVUUgICAJKFBQX09OIHwgUFBfU0VRVUVOQ0VfTk9O RSB8IDAgICAgICAgICAgICAgICAgICAgICB8IFBQX1NFUVVFTkNFX1NUQVRFX09OX0lETEUpCi0K LSNkZWZpbmUgSURMRV9PRkZfTUFTSwkJKFBQX09OIHwgUFBfU0VRVUVOQ0VfTUFTSyB8IDAgICAg ICAgICAgICAgICAgICAgICB8IDApCi0jZGVmaW5lIElETEVfT0ZGX1ZBTFVFCQkoMCAgICAgfCBQ UF9TRVFVRU5DRV9OT05FIHwgMCAgICAgICAgICAgICAgICAgICAgIHwgMCkKLQotI2RlZmluZSBJ RExFX0NZQ0xFX01BU0sJCShQUF9PTiB8IFBQX1NFUVVFTkNFX01BU0sgfCBQUF9DWUNMRV9ERUxB WV9BQ1RJVkUgfCBQUF9TRVFVRU5DRV9TVEFURV9NQVNLKQotI2RlZmluZSBJRExFX0NZQ0xFX1ZB TFVFCSgwICAgICB8IFBQX1NFUVVFTkNFX05PTkUgfCAwICAgICAgICAgICAgICAgICAgICAgfCBQ UF9TRVFVRU5DRV9TVEFURV9PRkZfSURMRSkKLQotc3RhdGljIHZvaWQgaW50ZWxfcHBzX3Zlcmlm eV9zdGF0ZShzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKTsKLQotc3RhdGljIHZvaWQgd2FpdF9w YW5lbF9zdGF0dXMoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCwKLQkJCQkgICAgICAgdTMyIG1h c2ssCi0JCQkJICAgICAgIHUzMiB2YWx1ZSkKLXsKLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq ZGV2X3ByaXYgPSBkcF90b19pOTE1KGludGVsX2RwKTsKLQlpOTE1X3JlZ190IHBwX3N0YXRfcmVn LCBwcF9jdHJsX3JlZzsKLQotCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmRldl9wcml2LT5wcHNfbXV0 ZXgpOwotCi0JaW50ZWxfcHBzX3ZlcmlmeV9zdGF0ZShpbnRlbF9kcCk7Ci0KLQlwcF9zdGF0X3Jl ZyA9IF9wcF9zdGF0X3JlZyhpbnRlbF9kcCk7Ci0JcHBfY3RybF9yZWcgPSBfcHBfY3RybF9yZWco aW50ZWxfZHApOwotCi0JZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sCi0JCSAgICAibWFzayAl MDh4IHZhbHVlICUwOHggc3RhdHVzICUwOHggY29udHJvbCAlMDh4XG4iLAotCQkgICAgbWFzaywg dmFsdWUsCi0JCSAgICBpbnRlbF9kZV9yZWFkKGRldl9wcml2LCBwcF9zdGF0X3JlZyksCi0JCSAg ICBpbnRlbF9kZV9yZWFkKGRldl9wcml2LCBwcF9jdHJsX3JlZykpOwotCi0JaWYgKGludGVsX2Rl X3dhaXRfZm9yX3JlZ2lzdGVyKGRldl9wcml2LCBwcF9zdGF0X3JlZywKLQkJCQkgICAgICAgbWFz aywgdmFsdWUsIDUwMDApKQotCQlkcm1fZXJyKCZkZXZfcHJpdi0+ZHJtLAotCQkJIlBhbmVsIHN0 YXR1cyB0aW1lb3V0OiBzdGF0dXMgJTA4eCBjb250cm9sICUwOHhcbiIsCi0JCQlpbnRlbF9kZV9y ZWFkKGRldl9wcml2LCBwcF9zdGF0X3JlZyksCi0JCQlpbnRlbF9kZV9yZWFkKGRldl9wcml2LCBw cF9jdHJsX3JlZykpOwotCi0JZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sICJXYWl0IGNvbXBs ZXRlXG4iKTsKLX0KLQotc3RhdGljIHZvaWQgd2FpdF9wYW5lbF9vbihzdHJ1Y3QgaW50ZWxfZHAg KmludGVsX2RwKQotewotCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0gZHBfdG9faTkx NShpbnRlbF9kcCk7Ci0KLQlkcm1fZGJnX2ttcygmaTkxNS0+ZHJtLCAiV2FpdCBmb3IgcGFuZWwg cG93ZXIgb25cbiIpOwotCXdhaXRfcGFuZWxfc3RhdHVzKGludGVsX2RwLCBJRExFX09OX01BU0ss IElETEVfT05fVkFMVUUpOwotfQotCi1zdGF0aWMgdm9pZCB3YWl0X3BhbmVsX29mZihzdHJ1Y3Qg aW50ZWxfZHAgKmludGVsX2RwKQotewotCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0g ZHBfdG9faTkxNShpbnRlbF9kcCk7Ci0KLQlkcm1fZGJnX2ttcygmaTkxNS0+ZHJtLCAiV2FpdCBm b3IgcGFuZWwgcG93ZXIgb2ZmIHRpbWVcbiIpOwotCXdhaXRfcGFuZWxfc3RhdHVzKGludGVsX2Rw LCBJRExFX09GRl9NQVNLLCBJRExFX09GRl9WQUxVRSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHdhaXRf cGFuZWxfcG93ZXJfY3ljbGUoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCkKLXsKLQlzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IGRwX3RvX2k5MTUoaW50ZWxfZHApOwotCWt0aW1lX3Qg cGFuZWxfcG93ZXJfb25fdGltZTsKLQlzNjQgcGFuZWxfcG93ZXJfb2ZmX2R1cmF0aW9uOwotCi0J ZHJtX2RiZ19rbXMoJmk5MTUtPmRybSwgIldhaXQgZm9yIHBhbmVsIHBvd2VyIGN5Y2xlXG4iKTsK LQotCS8qIHRha2UgdGhlIGRpZmZlcmVuY2Ugb2YgY3VycnJlbnQgdGltZSBhbmQgcGFuZWwgcG93 ZXIgb2ZmIHRpbWUKLQkgKiBhbmQgdGhlbiBtYWtlIHBhbmVsIHdhaXQgZm9yIHQxMV90MTIgaWYg bmVlZGVkLiAqLwotCXBhbmVsX3Bvd2VyX29uX3RpbWUgPSBrdGltZV9nZXRfYm9vdHRpbWUoKTsK LQlwYW5lbF9wb3dlcl9vZmZfZHVyYXRpb24gPSBrdGltZV9tc19kZWx0YShwYW5lbF9wb3dlcl9v bl90aW1lLCBpbnRlbF9kcC0+cGFuZWxfcG93ZXJfb2ZmX3RpbWUpOwotCi0JLyogV2hlbiB3ZSBk aXNhYmxlIHRoZSBWREQgb3ZlcnJpZGUgYml0IGxhc3Qgd2UgaGF2ZSB0byBkbyB0aGUgbWFudWFs Ci0JICogd2FpdC4gKi8KLQlpZiAocGFuZWxfcG93ZXJfb2ZmX2R1cmF0aW9uIDwgKHM2NClpbnRl bF9kcC0+cGFuZWxfcG93ZXJfY3ljbGVfZGVsYXkpCi0JCXdhaXRfcmVtYWluaW5nX21zX2Zyb21f amlmZmllcyhqaWZmaWVzLAotCQkJCSAgICAgICBpbnRlbF9kcC0+cGFuZWxfcG93ZXJfY3ljbGVf ZGVsYXkgLSBwYW5lbF9wb3dlcl9vZmZfZHVyYXRpb24pOwotCi0Jd2FpdF9wYW5lbF9zdGF0dXMo aW50ZWxfZHAsIElETEVfQ1lDTEVfTUFTSywgSURMRV9DWUNMRV9WQUxVRSk7Ci19Ci0KLXN0YXRp YyB2b2lkIHdhaXRfYmFja2xpZ2h0X29uKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApCi17Ci0J d2FpdF9yZW1haW5pbmdfbXNfZnJvbV9qaWZmaWVzKGludGVsX2RwLT5sYXN0X3Bvd2VyX29uLAot CQkJCSAgICAgICBpbnRlbF9kcC0+YmFja2xpZ2h0X29uX2RlbGF5KTsKLX0KLQotc3RhdGljIHZv aWQgZWRwX3dhaXRfYmFja2xpZ2h0X29mZihzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKQotewot CXdhaXRfcmVtYWluaW5nX21zX2Zyb21famlmZmllcyhpbnRlbF9kcC0+bGFzdF9iYWNrbGlnaHRf b2ZmLAotCQkJCSAgICAgICBpbnRlbF9kcC0+YmFja2xpZ2h0X29mZl9kZWxheSk7Ci19Ci0KLS8q IFJlYWQgdGhlIGN1cnJlbnQgcHBfY29udHJvbCB2YWx1ZSwgdW5sb2NraW5nIHRoZSByZWdpc3Rl ciBpZiBpdAotICogaXMgbG9ja2VkCi0gKi8KLQotc3RhdGljICB1MzIgaWxrX2dldF9wcF9jb250 cm9sKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApCi17Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2ID0gZHBfdG9faTkxNShpbnRlbF9kcCk7Ci0JdTMyIGNvbnRyb2w7Ci0KLQls b2NrZGVwX2Fzc2VydF9oZWxkKCZkZXZfcHJpdi0+cHBzX211dGV4KTsKLQotCWNvbnRyb2wgPSBp bnRlbF9kZV9yZWFkKGRldl9wcml2LCBfcHBfY3RybF9yZWcoaW50ZWxfZHApKTsKLQlpZiAoZHJt X1dBUk5fT04oJmRldl9wcml2LT5kcm0sICFIQVNfRERJKGRldl9wcml2KSAmJgotCQkJKGNvbnRy b2wgJiBQQU5FTF9VTkxPQ0tfTUFTSykgIT0gUEFORUxfVU5MT0NLX1JFR1MpKSB7Ci0JCWNvbnRy b2wgJj0gflBBTkVMX1VOTE9DS19NQVNLOwotCQljb250cm9sIHw9IFBBTkVMX1VOTE9DS19SRUdT OwotCX0KLQlyZXR1cm4gY29udHJvbDsKLX0KLQotLyoKLSAqIE11c3QgYmUgcGFpcmVkIHdpdGgg ZWRwX3BhbmVsX3ZkZF9vZmYoKS4KLSAqIE11c3QgaG9sZCBwcHNfbXV0ZXggYXJvdW5kIHRoZSB3 aG9sZSBvbi9vZmYgc2VxdWVuY2UuCi0gKiBDYW4gYmUgbmVzdGVkIHdpdGggaW50ZWxfZWRwX3Bh bmVsX3ZkZF97b24sb2ZmfSgpIGNhbGxzLgotICovCi1zdGF0aWMgYm9vbCBlZHBfcGFuZWxfdmRk X29uKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApCi17Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2ID0gZHBfdG9faTkxNShpbnRlbF9kcCk7Ci0Jc3RydWN0IGludGVsX2RpZ2l0 YWxfcG9ydCAqZGlnX3BvcnQgPSBkcF90b19kaWdfcG9ydChpbnRlbF9kcCk7Ci0JdTMyIHBwOwot CWk5MTVfcmVnX3QgcHBfc3RhdF9yZWcsIHBwX2N0cmxfcmVnOwotCWJvb2wgbmVlZF90b19kaXNh YmxlID0gIWludGVsX2RwLT53YW50X3BhbmVsX3ZkZDsKLQotCWxvY2tkZXBfYXNzZXJ0X2hlbGQo JmRldl9wcml2LT5wcHNfbXV0ZXgpOwotCi0JaWYgKCFpbnRlbF9kcF9pc19lZHAoaW50ZWxfZHAp KQotCQlyZXR1cm4gZmFsc2U7Ci0KLQljYW5jZWxfZGVsYXllZF93b3JrKCZpbnRlbF9kcC0+cGFu ZWxfdmRkX3dvcmspOwotCWludGVsX2RwLT53YW50X3BhbmVsX3ZkZCA9IHRydWU7Ci0KLQlpZiAo ZWRwX2hhdmVfcGFuZWxfdmRkKGludGVsX2RwKSkKLQkJcmV0dXJuIG5lZWRfdG9fZGlzYWJsZTsK LQotCWRybV9XQVJOX09OKCZkZXZfcHJpdi0+ZHJtLCBpbnRlbF9kcC0+dmRkX3dha2VyZWYpOwot CWludGVsX2RwLT52ZGRfd2FrZXJlZiA9IGludGVsX2Rpc3BsYXlfcG93ZXJfZ2V0KGRldl9wcml2 LAotCQkJCQkJCWludGVsX2F1eF9wb3dlcl9kb21haW4oZGlnX3BvcnQpKTsKLQotCWRybV9kYmdf a21zKCZkZXZfcHJpdi0+ZHJtLCAiVHVybmluZyBbRU5DT0RFUjolZDolc10gVkREIG9uXG4iLAot CQkgICAgZGlnX3BvcnQtPmJhc2UuYmFzZS5iYXNlLmlkLAotCQkgICAgZGlnX3BvcnQtPmJhc2Uu YmFzZS5uYW1lKTsKLQotCWlmICghZWRwX2hhdmVfcGFuZWxfcG93ZXIoaW50ZWxfZHApKQotCQl3 YWl0X3BhbmVsX3Bvd2VyX2N5Y2xlKGludGVsX2RwKTsKLQotCXBwID0gaWxrX2dldF9wcF9jb250 cm9sKGludGVsX2RwKTsKLQlwcCB8PSBFRFBfRk9SQ0VfVkREOwotCi0JcHBfc3RhdF9yZWcgPSBf cHBfc3RhdF9yZWcoaW50ZWxfZHApOwotCXBwX2N0cmxfcmVnID0gX3BwX2N0cmxfcmVnKGludGVs X2RwKTsKLQotCWludGVsX2RlX3dyaXRlKGRldl9wcml2LCBwcF9jdHJsX3JlZywgcHApOwotCWlu dGVsX2RlX3Bvc3RpbmdfcmVhZChkZXZfcHJpdiwgcHBfY3RybF9yZWcpOwotCWRybV9kYmdfa21z KCZkZXZfcHJpdi0+ZHJtLCAiUFBfU1RBVFVTOiAweCUwOHggUFBfQ09OVFJPTDogMHglMDh4XG4i LAotCQkgICAgaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgcHBfc3RhdF9yZWcpLAotCQkgICAgaW50 ZWxfZGVfcmVhZChkZXZfcHJpdiwgcHBfY3RybF9yZWcpKTsKLQkvKgotCSAqIElmIHRoZSBwYW5l bCB3YXNuJ3Qgb24sIGRlbGF5IGJlZm9yZSBhY2Nlc3NpbmcgYXV4IGNoYW5uZWwKLQkgKi8KLQlp ZiAoIWVkcF9oYXZlX3BhbmVsX3Bvd2VyKGludGVsX2RwKSkgewotCQlkcm1fZGJnX2ttcygmZGV2 X3ByaXYtPmRybSwKLQkJCSAgICAiW0VOQ09ERVI6JWQ6JXNdIHBhbmVsIHBvd2VyIHdhc24ndCBl bmFibGVkXG4iLAotCQkJICAgIGRpZ19wb3J0LT5iYXNlLmJhc2UuYmFzZS5pZCwKLQkJCSAgICBk aWdfcG9ydC0+YmFzZS5iYXNlLm5hbWUpOwotCQltc2xlZXAoaW50ZWxfZHAtPnBhbmVsX3Bvd2Vy X3VwX2RlbGF5KTsKLQl9Ci0KLQlyZXR1cm4gbmVlZF90b19kaXNhYmxlOwotfQotCi0vKgotICog TXVzdCBiZSBwYWlyZWQgd2l0aCBpbnRlbF9lZHBfcGFuZWxfdmRkX29mZigpIG9yCi0gKiBpbnRl bF9lZHBfcGFuZWxfb2ZmKCkuCi0gKiBOZXN0ZWQgY2FsbHMgdG8gdGhlc2UgZnVuY3Rpb25zIGFy ZSBub3QgYWxsb3dlZCBzaW5jZQotICogd2UgZHJvcCB0aGUgbG9jay4gQ2FsbGVyIG11c3QgdXNl IHNvbWUgaGlnaGVyIGxldmVsCi0gKiBsb2NraW5nIHRvIHByZXZlbnQgbmVzdGVkIGNhbGxzIGZy b20gb3RoZXIgdGhyZWFkcy4KLSAqLwotdm9pZCBpbnRlbF9lZHBfcGFuZWxfdmRkX29uKHN0cnVj dCBpbnRlbF9kcCAqaW50ZWxfZHApCi17Ci0JaW50ZWxfd2FrZXJlZl90IHdha2VyZWY7Ci0JYm9v bCB2ZGQ7Ci0KLQlpZiAoIWludGVsX2RwX2lzX2VkcChpbnRlbF9kcCkpCi0JCXJldHVybjsKLQot CXZkZCA9IGZhbHNlOwotCXdpdGhfcHBzX2xvY2soaW50ZWxfZHAsIHdha2VyZWYpCi0JCXZkZCA9 IGVkcF9wYW5lbF92ZGRfb24oaW50ZWxfZHApOwotCUk5MTVfU1RBVEVfV0FSTighdmRkLCAiW0VO Q09ERVI6JWQ6JXNdIFZERCBhbHJlYWR5IHJlcXVlc3RlZCBvblxuIiwKLQkJCWRwX3RvX2RpZ19w b3J0KGludGVsX2RwKS0+YmFzZS5iYXNlLmJhc2UuaWQsCi0JCQlkcF90b19kaWdfcG9ydChpbnRl bF9kcCktPmJhc2UuYmFzZS5uYW1lKTsKLX0KLQotc3RhdGljIHZvaWQgZWRwX3BhbmVsX3ZkZF9v ZmZfc3luYyhzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKQotewotCXN0cnVjdCBkcm1faTkxNV9w cml2YXRlICpkZXZfcHJpdiA9IGRwX3RvX2k5MTUoaW50ZWxfZHApOwotCXN0cnVjdCBpbnRlbF9k aWdpdGFsX3BvcnQgKmRpZ19wb3J0ID0KLQkJZHBfdG9fZGlnX3BvcnQoaW50ZWxfZHApOwotCXUz MiBwcDsKLQlpOTE1X3JlZ190IHBwX3N0YXRfcmVnLCBwcF9jdHJsX3JlZzsKLQotCWxvY2tkZXBf YXNzZXJ0X2hlbGQoJmRldl9wcml2LT5wcHNfbXV0ZXgpOwotCi0JZHJtX1dBUk5fT04oJmRldl9w cml2LT5kcm0sIGludGVsX2RwLT53YW50X3BhbmVsX3ZkZCk7Ci0KLQlpZiAoIWVkcF9oYXZlX3Bh bmVsX3ZkZChpbnRlbF9kcCkpCi0JCXJldHVybjsKLQotCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ ZHJtLCAiVHVybmluZyBbRU5DT0RFUjolZDolc10gVkREIG9mZlxuIiwKLQkJICAgIGRpZ19wb3J0 LT5iYXNlLmJhc2UuYmFzZS5pZCwKLQkJICAgIGRpZ19wb3J0LT5iYXNlLmJhc2UubmFtZSk7Ci0K LQlwcCA9IGlsa19nZXRfcHBfY29udHJvbChpbnRlbF9kcCk7Ci0JcHAgJj0gfkVEUF9GT1JDRV9W REQ7Ci0KLQlwcF9jdHJsX3JlZyA9IF9wcF9jdHJsX3JlZyhpbnRlbF9kcCk7Ci0JcHBfc3RhdF9y ZWcgPSBfcHBfc3RhdF9yZWcoaW50ZWxfZHApOwotCi0JaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYs IHBwX2N0cmxfcmVnLCBwcCk7Ci0JaW50ZWxfZGVfcG9zdGluZ19yZWFkKGRldl9wcml2LCBwcF9j dHJsX3JlZyk7Ci0KLQkvKiBNYWtlIHN1cmUgc2VxdWVuY2VyIGlzIGlkbGUgYmVmb3JlIGFsbG93 aW5nIHN1YnNlcXVlbnQgYWN0aXZpdHkgKi8KLQlkcm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwg IlBQX1NUQVRVUzogMHglMDh4IFBQX0NPTlRST0w6IDB4JTA4eFxuIiwKLQkJICAgIGludGVsX2Rl X3JlYWQoZGV2X3ByaXYsIHBwX3N0YXRfcmVnKSwKLQkJICAgIGludGVsX2RlX3JlYWQoZGV2X3By aXYsIHBwX2N0cmxfcmVnKSk7Ci0KLQlpZiAoKHBwICYgUEFORUxfUE9XRVJfT04pID09IDApCi0J CWludGVsX2RwLT5wYW5lbF9wb3dlcl9vZmZfdGltZSA9IGt0aW1lX2dldF9ib290dGltZSgpOwot Ci0JaW50ZWxfZGlzcGxheV9wb3dlcl9wdXQoZGV2X3ByaXYsCi0JCQkJaW50ZWxfYXV4X3Bvd2Vy X2RvbWFpbihkaWdfcG9ydCksCi0JCQkJZmV0Y2hfYW5kX3plcm8oJmludGVsX2RwLT52ZGRfd2Fr ZXJlZikpOwotfQotCi1zdGF0aWMgdm9pZCBlZHBfcGFuZWxfdmRkX3dvcmsoc3RydWN0IHdvcmtf c3RydWN0ICpfX3dvcmspCi17Ci0Jc3RydWN0IGludGVsX2RwICppbnRlbF9kcCA9Ci0JCWNvbnRh aW5lcl9vZih0b19kZWxheWVkX3dvcmsoX193b3JrKSwKLQkJCSAgICAgc3RydWN0IGludGVsX2Rw LCBwYW5lbF92ZGRfd29yayk7Ci0JaW50ZWxfd2FrZXJlZl90IHdha2VyZWY7Ci0KLQl3aXRoX3Bw c19sb2NrKGludGVsX2RwLCB3YWtlcmVmKSB7Ci0JCWlmICghaW50ZWxfZHAtPndhbnRfcGFuZWxf dmRkKQotCQkJZWRwX3BhbmVsX3ZkZF9vZmZfc3luYyhpbnRlbF9kcCk7Ci0JfQotfQotCi1zdGF0 aWMgdm9pZCBlZHBfcGFuZWxfdmRkX3NjaGVkdWxlX29mZihzdHJ1Y3QgaW50ZWxfZHAgKmludGVs X2RwKQotewotCXVuc2lnbmVkIGxvbmcgZGVsYXk7Ci0KLQkvKgotCSAqIFF1ZXVlIHRoZSB0aW1l ciB0byBmaXJlIGEgbG9uZyB0aW1lIGZyb20gbm93IChyZWxhdGl2ZSB0byB0aGUgcG93ZXIKLQkg KiBkb3duIGRlbGF5KSB0byBrZWVwIHRoZSBwYW5lbCBwb3dlciB1cCBhY3Jvc3MgYSBzZXF1ZW5j ZSBvZgotCSAqIG9wZXJhdGlvbnMuCi0JICovCi0JZGVsYXkgPSBtc2Vjc190b19qaWZmaWVzKGlu dGVsX2RwLT5wYW5lbF9wb3dlcl9jeWNsZV9kZWxheSAqIDUpOwotCXNjaGVkdWxlX2RlbGF5ZWRf d29yaygmaW50ZWxfZHAtPnBhbmVsX3ZkZF93b3JrLCBkZWxheSk7Ci19Ci0KLS8qCi0gKiBNdXN0 IGJlIHBhaXJlZCB3aXRoIGVkcF9wYW5lbF92ZGRfb24oKS4KLSAqIE11c3QgaG9sZCBwcHNfbXV0 ZXggYXJvdW5kIHRoZSB3aG9sZSBvbi9vZmYgc2VxdWVuY2UuCi0gKiBDYW4gYmUgbmVzdGVkIHdp dGggaW50ZWxfZWRwX3BhbmVsX3ZkZF97b24sb2ZmfSgpIGNhbGxzLgotICovCi1zdGF0aWMgdm9p ZCBlZHBfcGFuZWxfdmRkX29mZihzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwLCBib29sIHN5bmMp Ci17Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZHBfdG9faTkxNShpbnRl bF9kcCk7Ci0KLQlsb2NrZGVwX2Fzc2VydF9oZWxkKCZkZXZfcHJpdi0+cHBzX211dGV4KTsKLQot CWlmICghaW50ZWxfZHBfaXNfZWRwKGludGVsX2RwKSkKLQkJcmV0dXJuOwotCi0JSTkxNV9TVEFU RV9XQVJOKCFpbnRlbF9kcC0+d2FudF9wYW5lbF92ZGQsICJbRU5DT0RFUjolZDolc10gVkREIG5v dCBmb3JjZWQgb24iLAotCQkJZHBfdG9fZGlnX3BvcnQoaW50ZWxfZHApLT5iYXNlLmJhc2UuYmFz ZS5pZCwKLQkJCWRwX3RvX2RpZ19wb3J0KGludGVsX2RwKS0+YmFzZS5iYXNlLm5hbWUpOwotCi0J aW50ZWxfZHAtPndhbnRfcGFuZWxfdmRkID0gZmFsc2U7Ci0KLQlpZiAoc3luYykKLQkJZWRwX3Bh bmVsX3ZkZF9vZmZfc3luYyhpbnRlbF9kcCk7Ci0JZWxzZQotCQllZHBfcGFuZWxfdmRkX3NjaGVk dWxlX29mZihpbnRlbF9kcCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGVkcF9wYW5lbF9vbihzdHJ1Y3Qg aW50ZWxfZHAgKmludGVsX2RwKQotewotCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJp diA9IGRwX3RvX2k5MTUoaW50ZWxfZHApOwotCXUzMiBwcDsKLQlpOTE1X3JlZ190IHBwX2N0cmxf cmVnOwotCi0JbG9ja2RlcF9hc3NlcnRfaGVsZCgmZGV2X3ByaXYtPnBwc19tdXRleCk7Ci0KLQlp ZiAoIWludGVsX2RwX2lzX2VkcChpbnRlbF9kcCkpCi0JCXJldHVybjsKLQotCWRybV9kYmdfa21z KCZkZXZfcHJpdi0+ZHJtLCAiVHVybiBbRU5DT0RFUjolZDolc10gcGFuZWwgcG93ZXIgb25cbiIs Ci0JCSAgICBkcF90b19kaWdfcG9ydChpbnRlbF9kcCktPmJhc2UuYmFzZS5iYXNlLmlkLAotCQkg ICAgZHBfdG9fZGlnX3BvcnQoaW50ZWxfZHApLT5iYXNlLmJhc2UubmFtZSk7Ci0KLQlpZiAoZHJt X1dBUk4oJmRldl9wcml2LT5kcm0sIGVkcF9oYXZlX3BhbmVsX3Bvd2VyKGludGVsX2RwKSwKLQkJ ICAgICAiW0VOQ09ERVI6JWQ6JXNdIHBhbmVsIHBvd2VyIGFscmVhZHkgb25cbiIsCi0JCSAgICAg ZHBfdG9fZGlnX3BvcnQoaW50ZWxfZHApLT5iYXNlLmJhc2UuYmFzZS5pZCwKLQkJICAgICBkcF90 b19kaWdfcG9ydChpbnRlbF9kcCktPmJhc2UuYmFzZS5uYW1lKSkKLQkJcmV0dXJuOwotCi0Jd2Fp dF9wYW5lbF9wb3dlcl9jeWNsZShpbnRlbF9kcCk7Ci0KLQlwcF9jdHJsX3JlZyA9IF9wcF9jdHJs X3JlZyhpbnRlbF9kcCk7Ci0JcHAgPSBpbGtfZ2V0X3BwX2NvbnRyb2woaW50ZWxfZHApOwotCWlm IChJU19HRU4oZGV2X3ByaXYsIDUpKSB7Ci0JCS8qIElMSyB3b3JrYXJvdW5kOiBkaXNhYmxlIHJl c2V0IGFyb3VuZCBwb3dlciBzZXF1ZW5jZSAqLwotCQlwcCAmPSB+UEFORUxfUE9XRVJfUkVTRVQ7 Ci0JCWludGVsX2RlX3dyaXRlKGRldl9wcml2LCBwcF9jdHJsX3JlZywgcHApOwotCQlpbnRlbF9k ZV9wb3N0aW5nX3JlYWQoZGV2X3ByaXYsIHBwX2N0cmxfcmVnKTsKLQl9Ci0KLQlwcCB8PSBQQU5F TF9QT1dFUl9PTjsKLQlpZiAoIUlTX0dFTihkZXZfcHJpdiwgNSkpCi0JCXBwIHw9IFBBTkVMX1BP V0VSX1JFU0VUOwotCi0JaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIHBwX2N0cmxfcmVnLCBwcCk7 Ci0JaW50ZWxfZGVfcG9zdGluZ19yZWFkKGRldl9wcml2LCBwcF9jdHJsX3JlZyk7Ci0KLQl3YWl0 X3BhbmVsX29uKGludGVsX2RwKTsKLQlpbnRlbF9kcC0+bGFzdF9wb3dlcl9vbiA9IGppZmZpZXM7 Ci0KLQlpZiAoSVNfR0VOKGRldl9wcml2LCA1KSkgewotCQlwcCB8PSBQQU5FTF9QT1dFUl9SRVNF VDsgLyogcmVzdG9yZSBwYW5lbCByZXNldCBiaXQgKi8KLQkJaW50ZWxfZGVfd3JpdGUoZGV2X3By aXYsIHBwX2N0cmxfcmVnLCBwcCk7Ci0JCWludGVsX2RlX3Bvc3RpbmdfcmVhZChkZXZfcHJpdiwg cHBfY3RybF9yZWcpOwotCX0KLX0KLQotdm9pZCBpbnRlbF9lZHBfcGFuZWxfb24oc3RydWN0IGlu dGVsX2RwICppbnRlbF9kcCkKLXsKLQlpbnRlbF93YWtlcmVmX3Qgd2FrZXJlZjsKLQotCWlmICgh aW50ZWxfZHBfaXNfZWRwKGludGVsX2RwKSkKLQkJcmV0dXJuOwotCi0Jd2l0aF9wcHNfbG9jayhp bnRlbF9kcCwgd2FrZXJlZikKLQkJZWRwX3BhbmVsX29uKGludGVsX2RwKTsKLX0KLQotCi1zdGF0 aWMgdm9pZCBlZHBfcGFuZWxfb2ZmKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApCi17Ci0Jc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZHBfdG9faTkxNShpbnRlbF9kcCk7Ci0J c3RydWN0IGludGVsX2RpZ2l0YWxfcG9ydCAqZGlnX3BvcnQgPSBkcF90b19kaWdfcG9ydChpbnRl bF9kcCk7Ci0JdTMyIHBwOwotCWk5MTVfcmVnX3QgcHBfY3RybF9yZWc7Ci0KLQlsb2NrZGVwX2Fz c2VydF9oZWxkKCZkZXZfcHJpdi0+cHBzX211dGV4KTsKLQotCWlmICghaW50ZWxfZHBfaXNfZWRw KGludGVsX2RwKSkKLQkJcmV0dXJuOwotCi0JZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sICJU dXJuIFtFTkNPREVSOiVkOiVzXSBwYW5lbCBwb3dlciBvZmZcbiIsCi0JCSAgICBkaWdfcG9ydC0+ YmFzZS5iYXNlLmJhc2UuaWQsIGRpZ19wb3J0LT5iYXNlLmJhc2UubmFtZSk7Ci0KLQlkcm1fV0FS TigmZGV2X3ByaXYtPmRybSwgIWludGVsX2RwLT53YW50X3BhbmVsX3ZkZCwKLQkJICJOZWVkIFtF TkNPREVSOiVkOiVzXSBWREQgdG8gdHVybiBvZmYgcGFuZWxcbiIsCi0JCSBkaWdfcG9ydC0+YmFz ZS5iYXNlLmJhc2UuaWQsIGRpZ19wb3J0LT5iYXNlLmJhc2UubmFtZSk7Ci0KLQlwcCA9IGlsa19n ZXRfcHBfY29udHJvbChpbnRlbF9kcCk7Ci0JLyogV2UgbmVlZCB0byBzd2l0Y2ggb2ZmIHBhbmVs IHBvd2VyIF9hbmRfIGZvcmNlIHZkZCwgZm9yIG90aGVyd2lzZSBzb21lCi0JICogcGFuZWxzIGdl dCB2ZXJ5IHVuaGFwcHkgYW5kIGNlYXNlIHRvIHdvcmsuICovCi0JcHAgJj0gfihQQU5FTF9QT1dF Ul9PTiB8IFBBTkVMX1BPV0VSX1JFU0VUIHwgRURQX0ZPUkNFX1ZERCB8Ci0JCUVEUF9CTENfRU5B QkxFKTsKLQotCXBwX2N0cmxfcmVnID0gX3BwX2N0cmxfcmVnKGludGVsX2RwKTsKLQotCWludGVs X2RwLT53YW50X3BhbmVsX3ZkZCA9IGZhbHNlOworCSAqIHJlZ2lzdGVyCisJICoKKwkgKiBDUFQg UENIIGlzIHF1aXRlIGRpZmZlcmVudCwgaGF2aW5nIG1hbnkgYml0cyBtb3ZlZAorCSAqIHRvIHRo ZSBUUkFOU19EUF9DVEwgcmVnaXN0ZXIgaW5zdGVhZC4gVGhhdAorCSAqIGNvbmZpZ3VyYXRpb24g aGFwcGVucyAob2RkbHkpIGluIGlsa19wY2hfZW5hYmxlCisJICovCiAKLQlpbnRlbF9kZV93cml0 ZShkZXZfcHJpdiwgcHBfY3RybF9yZWcsIHBwKTsKLQlpbnRlbF9kZV9wb3N0aW5nX3JlYWQoZGV2 X3ByaXYsIHBwX2N0cmxfcmVnKTsKKwkvKiBQcmVzZXJ2ZSB0aGUgQklPUy1jb21wdXRlZCBkZXRl Y3RlZCBiaXQuIFRoaXMgaXMKKwkgKiBzdXBwb3NlZCB0byBiZSByZWFkLW9ubHkuCisJICovCisJ aW50ZWxfZHAtPkRQID0gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgaW50ZWxfZHAtPm91dHB1dF9y ZWcpICYgRFBfREVURUNURUQ7CiAKLQl3YWl0X3BhbmVsX29mZihpbnRlbF9kcCk7Ci0JaW50ZWxf ZHAtPnBhbmVsX3Bvd2VyX29mZl90aW1lID0ga3RpbWVfZ2V0X2Jvb3R0aW1lKCk7CisJLyogSGFu ZGxlIERQIGJpdHMgaW4gY29tbW9uIGJldHdlZW4gYWxsIHRocmVlIHJlZ2lzdGVyIGZvcm1hdHMg Ki8KKwlpbnRlbF9kcC0+RFAgfD0gRFBfVk9MVEFHRV8wXzQgfCBEUF9QUkVfRU1QSEFTSVNfMDsK KwlpbnRlbF9kcC0+RFAgfD0gRFBfUE9SVF9XSURUSChwaXBlX2NvbmZpZy0+bGFuZV9jb3VudCk7 CiAKLQkvKiBXZSBnb3QgYSByZWZlcmVuY2Ugd2hlbiB3ZSBlbmFibGVkIHRoZSBWREQuICovCi0J aW50ZWxfZGlzcGxheV9wb3dlcl9wdXQoZGV2X3ByaXYsCi0JCQkJaW50ZWxfYXV4X3Bvd2VyX2Rv bWFpbihkaWdfcG9ydCksCi0JCQkJZmV0Y2hfYW5kX3plcm8oJmludGVsX2RwLT52ZGRfd2FrZXJl ZikpOwotfQorCS8qIFNwbGl0IG91dCB0aGUgSUJYL0NQVSB2cyBDUFQgc2V0dGluZ3MgKi8KIAot dm9pZCBpbnRlbF9lZHBfcGFuZWxfb2ZmKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApCi17Ci0J aW50ZWxfd2FrZXJlZl90IHdha2VyZWY7CisJaWYgKElTX0lWWUJSSURHRShkZXZfcHJpdikgJiYg cG9ydCA9PSBQT1JUX0EpIHsKKwkJaWYgKGFkanVzdGVkX21vZGUtPmZsYWdzICYgRFJNX01PREVf RkxBR19QSFNZTkMpCisJCQlpbnRlbF9kcC0+RFAgfD0gRFBfU1lOQ19IU19ISUdIOworCQlpZiAo YWRqdXN0ZWRfbW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX1BWU1lOQykKKwkJCWludGVsX2Rw LT5EUCB8PSBEUF9TWU5DX1ZTX0hJR0g7CisJCWludGVsX2RwLT5EUCB8PSBEUF9MSU5LX1RSQUlO X09GRl9DUFQ7CiAKLQlpZiAoIWludGVsX2RwX2lzX2VkcChpbnRlbF9kcCkpCi0JCXJldHVybjsK KwkJaWYgKGRybV9kcF9lbmhhbmNlZF9mcmFtZV9jYXAoaW50ZWxfZHAtPmRwY2QpKQorCQkJaW50 ZWxfZHAtPkRQIHw9IERQX0VOSEFOQ0VEX0ZSQU1JTkc7CiAKLQl3aXRoX3Bwc19sb2NrKGludGVs X2RwLCB3YWtlcmVmKQotCQllZHBfcGFuZWxfb2ZmKGludGVsX2RwKTsKLX0KKwkJaW50ZWxfZHAt PkRQIHw9IERQX1BJUEVfU0VMX0lWQihjcnRjLT5waXBlKTsKKwl9IGVsc2UgaWYgKEhBU19QQ0hf Q1BUKGRldl9wcml2KSAmJiBwb3J0ICE9IFBPUlRfQSkgeworCQl1MzIgdHJhbnNfZHA7CiAKLS8q IEVuYWJsZSBiYWNrbGlnaHQgaW4gdGhlIHBhbmVsIHBvd2VyIGNvbnRyb2wuICovCi1zdGF0aWMg dm9pZCBfaW50ZWxfZWRwX2JhY2tsaWdodF9vbihzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKQot ewotCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRwX3RvX2k5MTUoaW50ZWxf ZHApOwotCWludGVsX3dha2VyZWZfdCB3YWtlcmVmOworCQlpbnRlbF9kcC0+RFAgfD0gRFBfTElO S19UUkFJTl9PRkZfQ1BUOwogCi0JLyoKLQkgKiBJZiB3ZSBlbmFibGUgdGhlIGJhY2tsaWdodCBy aWdodCBhd2F5IGZvbGxvd2luZyBhIHBhbmVsIHBvd2VyCi0JICogb24sIHdlIG1heSBzZWUgc2xp Z2h0IGZsaWNrZXIgYXMgdGhlIHBhbmVsIHN5bmNzIHdpdGggdGhlIGVEUAotCSAqIGxpbmsuICBT byBkZWxheSBhIGJpdCB0byBtYWtlIHN1cmUgdGhlIGltYWdlIGlzIHNvbGlkIGJlZm9yZQotCSAq IGFsbG93aW5nIGl0IHRvIGFwcGVhci4KLQkgKi8KLQl3YWl0X2JhY2tsaWdodF9vbihpbnRlbF9k cCk7CisJCXRyYW5zX2RwID0gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgVFJBTlNfRFBfQ1RMKGNy dGMtPnBpcGUpKTsKKwkJaWYgKGRybV9kcF9lbmhhbmNlZF9mcmFtZV9jYXAoaW50ZWxfZHAtPmRw Y2QpKQorCQkJdHJhbnNfZHAgfD0gVFJBTlNfRFBfRU5IX0ZSQU1JTkc7CisJCWVsc2UKKwkJCXRy YW5zX2RwICY9IH5UUkFOU19EUF9FTkhfRlJBTUlORzsKKwkJaW50ZWxfZGVfd3JpdGUoZGV2X3By aXYsIFRSQU5TX0RQX0NUTChjcnRjLT5waXBlKSwgdHJhbnNfZHApOworCX0gZWxzZSB7CisJCWlm IChJU19HNFgoZGV2X3ByaXYpICYmIHBpcGVfY29uZmlnLT5saW1pdGVkX2NvbG9yX3JhbmdlKQor CQkJaW50ZWxfZHAtPkRQIHw9IERQX0NPTE9SX1JBTkdFXzE2XzIzNTsKIAotCXdpdGhfcHBzX2xv Y2soaW50ZWxfZHAsIHdha2VyZWYpIHsKLQkJaTkxNV9yZWdfdCBwcF9jdHJsX3JlZyA9IF9wcF9j dHJsX3JlZyhpbnRlbF9kcCk7Ci0JCXUzMiBwcDsKKwkJaWYgKGFkanVzdGVkX21vZGUtPmZsYWdz ICYgRFJNX01PREVfRkxBR19QSFNZTkMpCisJCQlpbnRlbF9kcC0+RFAgfD0gRFBfU1lOQ19IU19I SUdIOworCQlpZiAoYWRqdXN0ZWRfbW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX1BWU1lOQykK KwkJCWludGVsX2RwLT5EUCB8PSBEUF9TWU5DX1ZTX0hJR0g7CisJCWludGVsX2RwLT5EUCB8PSBE UF9MSU5LX1RSQUlOX09GRjsKIAotCQlwcCA9IGlsa19nZXRfcHBfY29udHJvbChpbnRlbF9kcCk7 Ci0JCXBwIHw9IEVEUF9CTENfRU5BQkxFOworCQlpZiAoZHJtX2RwX2VuaGFuY2VkX2ZyYW1lX2Nh cChpbnRlbF9kcC0+ZHBjZCkpCisJCQlpbnRlbF9kcC0+RFAgfD0gRFBfRU5IQU5DRURfRlJBTUlO RzsKIAotCQlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgcHBfY3RybF9yZWcsIHBwKTsKLQkJaW50 ZWxfZGVfcG9zdGluZ19yZWFkKGRldl9wcml2LCBwcF9jdHJsX3JlZyk7CisJCWlmIChJU19DSEVS UllWSUVXKGRldl9wcml2KSkKKwkJCWludGVsX2RwLT5EUCB8PSBEUF9QSVBFX1NFTF9DSFYoY3J0 Yy0+cGlwZSk7CisJCWVsc2UKKwkJCWludGVsX2RwLT5EUCB8PSBEUF9QSVBFX1NFTChjcnRjLT5w aXBlKTsKIAl9CiB9CiAKKwogLyogRW5hYmxlIGJhY2tsaWdodCBQV00gYW5kIGJhY2tsaWdodCBQ UCBjb250cm9sLiAqLwogdm9pZCBpbnRlbF9lZHBfYmFja2xpZ2h0X29uKGNvbnN0IHN0cnVjdCBp bnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAogCQkJICAgIGNvbnN0IHN0cnVjdCBkcm1fY29u bmVjdG9yX3N0YXRlICpjb25uX3N0YXRlKQpAQCAtMzQwOSwzMCArMjUzOSw2IEBAIHZvaWQgaW50 ZWxfZWRwX2JhY2tsaWdodF9vbihjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19z dGF0ZSwKIAlfaW50ZWxfZWRwX2JhY2tsaWdodF9vbihpbnRlbF9kcCk7CiB9CiAKLS8qIERpc2Fi bGUgYmFja2xpZ2h0IGluIHRoZSBwYW5lbCBwb3dlciBjb250cm9sLiAqLwotc3RhdGljIHZvaWQg X2ludGVsX2VkcF9iYWNrbGlnaHRfb2ZmKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApCi17Ci0J c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZHBfdG9faTkxNShpbnRlbF9kcCk7 Ci0JaW50ZWxfd2FrZXJlZl90IHdha2VyZWY7Ci0KLQlpZiAoIWludGVsX2RwX2lzX2VkcChpbnRl bF9kcCkpCi0JCXJldHVybjsKLQotCXdpdGhfcHBzX2xvY2soaW50ZWxfZHAsIHdha2VyZWYpIHsK LQkJaTkxNV9yZWdfdCBwcF9jdHJsX3JlZyA9IF9wcF9jdHJsX3JlZyhpbnRlbF9kcCk7Ci0JCXUz MiBwcDsKLQotCQlwcCA9IGlsa19nZXRfcHBfY29udHJvbChpbnRlbF9kcCk7Ci0JCXBwICY9IH5F RFBfQkxDX0VOQUJMRTsKLQotCQlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgcHBfY3RybF9yZWcs IHBwKTsKLQkJaW50ZWxfZGVfcG9zdGluZ19yZWFkKGRldl9wcml2LCBwcF9jdHJsX3JlZyk7Ci0J fQotCi0JaW50ZWxfZHAtPmxhc3RfYmFja2xpZ2h0X29mZiA9IGppZmZpZXM7Ci0JZWRwX3dhaXRf YmFja2xpZ2h0X29mZihpbnRlbF9kcCk7Ci19Ci0KIC8qIERpc2FibGUgYmFja2xpZ2h0IFBQIGNv bnRyb2wgYW5kIGJhY2tsaWdodCBQV00uICovCiB2b2lkIGludGVsX2VkcF9iYWNrbGlnaHRfb2Zm KGNvbnN0IHN0cnVjdCBkcm1fY29ubmVjdG9yX3N0YXRlICpvbGRfY29ubl9zdGF0ZSkKIHsKQEAg LTM0NDgsMzMgKzI1NTQsNiBAQCB2b2lkIGludGVsX2VkcF9iYWNrbGlnaHRfb2ZmKGNvbnN0IHN0 cnVjdCBkcm1fY29ubmVjdG9yX3N0YXRlICpvbGRfY29ubl9zdGF0ZSkKIAlpbnRlbF9wYW5lbF9k aXNhYmxlX2JhY2tsaWdodChvbGRfY29ubl9zdGF0ZSk7CiB9CiAKLS8qCi0gKiBIb29rIGZvciBj b250cm9sbGluZyB0aGUgcGFuZWwgcG93ZXIgY29udHJvbCBiYWNrbGlnaHQgdGhyb3VnaCB0aGUg YmxfcG93ZXIKLSAqIHN5c2ZzIGF0dHJpYnV0ZS4gVGFrZSBjYXJlIHRvIGhhbmRsZSBtdWx0aXBs ZSBjYWxscy4KLSAqLwotc3RhdGljIHZvaWQgaW50ZWxfZWRwX2JhY2tsaWdodF9wb3dlcihzdHJ1 Y3QgaW50ZWxfY29ubmVjdG9yICpjb25uZWN0b3IsCi0JCQkJICAgICAgYm9vbCBlbmFibGUpCi17 Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSB0b19pOTE1KGNvbm5lY3Rvci0+YmFz ZS5kZXYpOwotCXN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAgPSBpbnRlbF9hdHRhY2hlZF9kcChj b25uZWN0b3IpOwotCWludGVsX3dha2VyZWZfdCB3YWtlcmVmOwotCWJvb2wgaXNfZW5hYmxlZDsK LQotCWlzX2VuYWJsZWQgPSBmYWxzZTsKLQl3aXRoX3Bwc19sb2NrKGludGVsX2RwLCB3YWtlcmVm KQotCQlpc19lbmFibGVkID0gaWxrX2dldF9wcF9jb250cm9sKGludGVsX2RwKSAmIEVEUF9CTENf RU5BQkxFOwotCWlmIChpc19lbmFibGVkID09IGVuYWJsZSkKLQkJcmV0dXJuOwotCi0JZHJtX2Ri Z19rbXMoJmk5MTUtPmRybSwgInBhbmVsIHBvd2VyIGNvbnRyb2wgYmFja2xpZ2h0ICVzXG4iLAot CQkgICAgZW5hYmxlID8gImVuYWJsZSIgOiAiZGlzYWJsZSIpOwotCi0JaWYgKGVuYWJsZSkKLQkJ X2ludGVsX2VkcF9iYWNrbGlnaHRfb24oaW50ZWxfZHApOwotCWVsc2UKLQkJX2ludGVsX2VkcF9i YWNrbGlnaHRfb2ZmKGludGVsX2RwKTsKLX0KLQogc3RhdGljIHZvaWQgYXNzZXJ0X2RwX3BvcnQo c3RydWN0IGludGVsX2RwICppbnRlbF9kcCwgYm9vbCBzdGF0ZSkKIHsKIAlzdHJ1Y3QgaW50ZWxf ZGlnaXRhbF9wb3J0ICpkaWdfcG9ydCA9IGRwX3RvX2RpZ19wb3J0KGludGVsX2RwKTsKQEAgLTQx MzksMTEyICszMjE4LDYgQEAgc3RhdGljIHZvaWQgZzR4X3ByZV9lbmFibGVfZHAoc3RydWN0IGlu dGVsX2F0b21pY19zdGF0ZSAqc3RhdGUsCiAJCWlsa19lZHBfcGxsX29uKGludGVsX2RwLCBwaXBl X2NvbmZpZyk7CiB9CiAKLXN0YXRpYyB2b2lkIHZsdl9kZXRhY2hfcG93ZXJfc2VxdWVuY2VyKHN0 cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApCi17Ci0Jc3RydWN0IGludGVsX2RpZ2l0YWxfcG9ydCAq ZGlnX3BvcnQgPSBkcF90b19kaWdfcG9ydChpbnRlbF9kcCk7Ci0Jc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShkaWdfcG9ydC0+YmFzZS5iYXNlLmRldik7Ci0JZW51 bSBwaXBlIHBpcGUgPSBpbnRlbF9kcC0+cHBzX3BpcGU7Ci0JaTkxNV9yZWdfdCBwcF9vbl9yZWcg PSBQUF9PTl9ERUxBWVMocGlwZSk7Ci0KLQlkcm1fV0FSTl9PTigmZGV2X3ByaXYtPmRybSwgaW50 ZWxfZHAtPmFjdGl2ZV9waXBlICE9IElOVkFMSURfUElQRSk7Ci0KLQlpZiAoZHJtX1dBUk5fT04o JmRldl9wcml2LT5kcm0sIHBpcGUgIT0gUElQRV9BICYmIHBpcGUgIT0gUElQRV9CKSkKLQkJcmV0 dXJuOwotCi0JZWRwX3BhbmVsX3ZkZF9vZmZfc3luYyhpbnRlbF9kcCk7Ci0KLQkvKgotCSAqIFZM ViBzZWVtcyB0byBnZXQgY29uZnVzZWQgd2hlbiBtdWx0aXBsZSBwb3dlciBzZXF1ZW5jZXJzCi0J ICogaGF2ZSB0aGUgc2FtZSBwb3J0IHNlbGVjdGVkIChldmVuIGlmIG9ubHkgb25lIGhhcyBwb3dl ci92ZGQKLQkgKiBlbmFibGVkKS4gVGhlIGZhaWx1cmUgbWFuaWZlc3RzIGFzIHZsdl93YWl0X3Bv cnRfcmVhZHkoKSBmYWlsaW5nCi0JICogQ0hWIG9uIHRoZSBvdGhlciBoYW5kIGRvZXNuJ3Qgc2Vl bSB0byBtaW5kIGhhdmluZyB0aGUgc2FtZSBwb3J0Ci0JICogc2VsZWN0ZWQgaW4gbXVsdGlwbGUg cG93ZXIgc2VxdWVuY2VycywgYnV0IGxldCdzIGNsZWFyIHRoZQotCSAqIHBvcnQgc2VsZWN0IGFs d2F5cyB3aGVuIGxvZ2ljYWxseSBkaXNjb25uZWN0aW5nIGEgcG93ZXIgc2VxdWVuY2VyCi0JICog ZnJvbSBhIHBvcnQuCi0JICovCi0JZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sCi0JCSAgICAi ZGV0YWNoaW5nIHBpcGUgJWMgcG93ZXIgc2VxdWVuY2VyIGZyb20gW0VOQ09ERVI6JWQ6JXNdXG4i LAotCQkgICAgcGlwZV9uYW1lKHBpcGUpLCBkaWdfcG9ydC0+YmFzZS5iYXNlLmJhc2UuaWQsCi0J CSAgICBkaWdfcG9ydC0+YmFzZS5iYXNlLm5hbWUpOwotCWludGVsX2RlX3dyaXRlKGRldl9wcml2 LCBwcF9vbl9yZWcsIDApOwotCWludGVsX2RlX3Bvc3RpbmdfcmVhZChkZXZfcHJpdiwgcHBfb25f cmVnKTsKLQotCWludGVsX2RwLT5wcHNfcGlwZSA9IElOVkFMSURfUElQRTsKLX0KLQotc3RhdGlj IHZvaWQgdmx2X3N0ZWFsX3Bvd2VyX3NlcXVlbmNlcihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq ZGV2X3ByaXYsCi0JCQkJICAgICAgZW51bSBwaXBlIHBpcGUpCi17Ci0Jc3RydWN0IGludGVsX2Vu Y29kZXIgKmVuY29kZXI7Ci0KLQlsb2NrZGVwX2Fzc2VydF9oZWxkKCZkZXZfcHJpdi0+cHBzX211 dGV4KTsKLQotCWZvcl9lYWNoX2ludGVsX2RwKCZkZXZfcHJpdi0+ZHJtLCBlbmNvZGVyKSB7Ci0J CXN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAgPSBlbmNfdG9faW50ZWxfZHAoZW5jb2Rlcik7Ci0K LQkJZHJtX1dBUk4oJmRldl9wcml2LT5kcm0sIGludGVsX2RwLT5hY3RpdmVfcGlwZSA9PSBwaXBl LAotCQkJICJzdGVhbGluZyBwaXBlICVjIHBvd2VyIHNlcXVlbmNlciBmcm9tIGFjdGl2ZSBbRU5D T0RFUjolZDolc11cbiIsCi0JCQkgcGlwZV9uYW1lKHBpcGUpLCBlbmNvZGVyLT5iYXNlLmJhc2Uu aWQsCi0JCQkgZW5jb2Rlci0+YmFzZS5uYW1lKTsKLQotCQlpZiAoaW50ZWxfZHAtPnBwc19waXBl ICE9IHBpcGUpCi0JCQljb250aW51ZTsKLQotCQlkcm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwK LQkJCSAgICAic3RlYWxpbmcgcGlwZSAlYyBwb3dlciBzZXF1ZW5jZXIgZnJvbSBbRU5DT0RFUjol ZDolc11cbiIsCi0JCQkgICAgcGlwZV9uYW1lKHBpcGUpLCBlbmNvZGVyLT5iYXNlLmJhc2UuaWQs Ci0JCQkgICAgZW5jb2Rlci0+YmFzZS5uYW1lKTsKLQotCQkvKiBtYWtlIHN1cmUgdmRkIGlzIG9m ZiBiZWZvcmUgd2Ugc3RlYWwgaXQgKi8KLQkJdmx2X2RldGFjaF9wb3dlcl9zZXF1ZW5jZXIoaW50 ZWxfZHApOwotCX0KLX0KLQotc3RhdGljIHZvaWQgdmx2X2luaXRfcGFuZWxfcG93ZXJfc2VxdWVu Y2VyKHN0cnVjdCBpbnRlbF9lbmNvZGVyICplbmNvZGVyLAotCQkJCQkgICBjb25zdCBzdHJ1Y3Qg aW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSkKLXsKLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGVuY29kZXItPmJhc2UuZGV2KTsKLQlzdHJ1Y3QgaW50ZWxf ZHAgKmludGVsX2RwID0gZW5jX3RvX2ludGVsX2RwKGVuY29kZXIpOwotCXN0cnVjdCBpbnRlbF9j cnRjICpjcnRjID0gdG9faW50ZWxfY3J0YyhjcnRjX3N0YXRlLT51YXBpLmNydGMpOwotCi0JbG9j a2RlcF9hc3NlcnRfaGVsZCgmZGV2X3ByaXYtPnBwc19tdXRleCk7Ci0KLQlkcm1fV0FSTl9PTigm ZGV2X3ByaXYtPmRybSwgaW50ZWxfZHAtPmFjdGl2ZV9waXBlICE9IElOVkFMSURfUElQRSk7Ci0K LQlpZiAoaW50ZWxfZHAtPnBwc19waXBlICE9IElOVkFMSURfUElQRSAmJgotCSAgICBpbnRlbF9k cC0+cHBzX3BpcGUgIT0gY3J0Yy0+cGlwZSkgewotCQkvKgotCQkgKiBJZiBhbm90aGVyIHBvd2Vy IHNlcXVlbmNlciB3YXMgYmVpbmcgdXNlZCBvbiB0aGlzCi0JCSAqIHBvcnQgcHJldmlvdXNseSBt YWtlIHN1cmUgdG8gdHVybiBvZmYgdmRkIHRoZXJlIHdoaWxlCi0JCSAqIHdlIHN0aWxsIGhhdmUg Y29udHJvbCBvZiBpdC4KLQkJICovCi0JCXZsdl9kZXRhY2hfcG93ZXJfc2VxdWVuY2VyKGludGVs X2RwKTsKLQl9Ci0KLQkvKgotCSAqIFdlIG1heSBiZSBzdGVhbGluZyB0aGUgcG93ZXIKLQkgKiBz ZXF1ZW5jZXIgZnJvbSBhbm90aGVyIHBvcnQuCi0JICovCi0Jdmx2X3N0ZWFsX3Bvd2VyX3NlcXVl bmNlcihkZXZfcHJpdiwgY3J0Yy0+cGlwZSk7Ci0KLQlpbnRlbF9kcC0+YWN0aXZlX3BpcGUgPSBj cnRjLT5waXBlOwotCi0JaWYgKCFpbnRlbF9kcF9pc19lZHAoaW50ZWxfZHApKQotCQlyZXR1cm47 Ci0KLQkvKiBub3cgaXQncyBhbGwgb3VycyAqLwotCWludGVsX2RwLT5wcHNfcGlwZSA9IGNydGMt PnBpcGU7Ci0KLQlkcm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwKLQkJICAgICJpbml0aWFsaXpp bmcgcGlwZSAlYyBwb3dlciBzZXF1ZW5jZXIgZm9yIFtFTkNPREVSOiVkOiVzXVxuIiwKLQkJICAg IHBpcGVfbmFtZShpbnRlbF9kcC0+cHBzX3BpcGUpLCBlbmNvZGVyLT5iYXNlLmJhc2UuaWQsCi0J CSAgICBlbmNvZGVyLT5iYXNlLm5hbWUpOwotCi0JLyogaW5pdCBwb3dlciBzZXF1ZW5jZXIgb24g dGhpcyBwaXBlIGFuZCBwb3J0ICovCi0JaW50ZWxfZHBfaW5pdF9wYW5lbF9wb3dlcl9zZXF1ZW5j ZXIoaW50ZWxfZHApOwotCWludGVsX2RwX2luaXRfcGFuZWxfcG93ZXJfc2VxdWVuY2VyX3JlZ2lz dGVycyhpbnRlbF9kcCwgdHJ1ZSk7Ci19Ci0KIHN0YXRpYyB2b2lkIHZsdl9wcmVfZW5hYmxlX2Rw KHN0cnVjdCBpbnRlbF9hdG9taWNfc3RhdGUgKnN0YXRlLAogCQkJICAgICAgc3RydWN0IGludGVs X2VuY29kZXIgKmVuY29kZXIsCiAJCQkgICAgICBjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0 ZSAqcGlwZV9jb25maWcsCkBAIC02ODg4LDMxICs1ODYxLDYgQEAgdm9pZCBpbnRlbF9kcF9lbmNv ZGVyX3NodXRkb3duKHN0cnVjdCBpbnRlbF9lbmNvZGVyICppbnRlbF9lbmNvZGVyKQogCQl3YWl0 X3BhbmVsX3Bvd2VyX2N5Y2xlKGludGVsX2RwKTsKIH0KIAotc3RhdGljIHZvaWQgaW50ZWxfZWRw X3BhbmVsX3ZkZF9zYW5pdGl6ZShzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKQotewotCXN0cnVj dCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRwX3RvX2k5MTUoaW50ZWxfZHApOwotCXN0 cnVjdCBpbnRlbF9kaWdpdGFsX3BvcnQgKmRpZ19wb3J0ID0gZHBfdG9fZGlnX3BvcnQoaW50ZWxf ZHApOwotCi0JbG9ja2RlcF9hc3NlcnRfaGVsZCgmZGV2X3ByaXYtPnBwc19tdXRleCk7Ci0KLQlp ZiAoIWVkcF9oYXZlX3BhbmVsX3ZkZChpbnRlbF9kcCkpCi0JCXJldHVybjsKLQotCS8qCi0JICog VGhlIFZERCBiaXQgbmVlZHMgYSBwb3dlciBkb21haW4gcmVmZXJlbmNlLCBzbyBpZiB0aGUgYml0 IGlzCi0JICogYWxyZWFkeSBlbmFibGVkIHdoZW4gd2UgYm9vdCBvciByZXN1bWUsIGdyYWIgdGhp cyByZWZlcmVuY2UgYW5kCi0JICogc2NoZWR1bGUgYSB2ZGQgb2ZmLCBzbyB3ZSBkb24ndCBob2xk IG9uIHRvIHRoZSByZWZlcmVuY2UKLQkgKiBpbmRlZmluaXRlbHkuCi0JICovCi0JZHJtX2RiZ19r bXMoJmRldl9wcml2LT5kcm0sCi0JCSAgICAiVkREIGxlZnQgb24gYnkgQklPUywgYWRqdXN0aW5n IHN0YXRlIHRyYWNraW5nXG4iKTsKLQlkcm1fV0FSTl9PTigmZGV2X3ByaXYtPmRybSwgaW50ZWxf ZHAtPnZkZF93YWtlcmVmKTsKLQlpbnRlbF9kcC0+dmRkX3dha2VyZWYgPSBpbnRlbF9kaXNwbGF5 X3Bvd2VyX2dldChkZXZfcHJpdiwKLQkJCQkJCQlpbnRlbF9hdXhfcG93ZXJfZG9tYWluKGRpZ19w b3J0KSk7Ci0KLQllZHBfcGFuZWxfdmRkX3NjaGVkdWxlX29mZihpbnRlbF9kcCk7Ci19Ci0KIHN0 YXRpYyBlbnVtIHBpcGUgdmx2X2FjdGl2ZV9waXBlKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAp CiB7CiAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZHBfdG9faTkxNShpbnRl bF9kcCk7CkBAIC03MTE4LDE5ICs2MDY2LDYgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fZW5j b2Rlcl9mdW5jcyBpbnRlbF9kcF9lbmNfZnVuY3MgPSB7CiAJLmRlc3Ryb3kgPSBpbnRlbF9kcF9l bmNvZGVyX2Rlc3Ryb3ksCiB9OwogCi1zdGF0aWMgYm9vbCBpbnRlbF9lZHBfaGF2ZV9wb3dlcihz dHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKQotewotCWludGVsX3dha2VyZWZfdCB3YWtlcmVmOwot CWJvb2wgaGF2ZV9wb3dlciA9IGZhbHNlOwotCi0Jd2l0aF9wcHNfbG9jayhpbnRlbF9kcCwgd2Fr ZXJlZikgewotCQloYXZlX3Bvd2VyID0gZWRwX2hhdmVfcGFuZWxfcG93ZXIoaW50ZWxfZHApICYm Ci0JCQkJCQkgIGVkcF9oYXZlX3BhbmVsX3ZkZChpbnRlbF9kcCk7Ci0JfQotCi0JcmV0dXJuIGhh dmVfcG93ZXI7Ci19Ci0KIGVudW0gaXJxcmV0dXJuCiBpbnRlbF9kcF9ocGRfcHVsc2Uoc3RydWN0 IGludGVsX2RpZ2l0YWxfcG9ydCAqZGlnX3BvcnQsIGJvb2wgbG9uZ19ocGQpCiB7CkBAIC03MjM0 LDI3NyArNjE2OSw2IEBAIGludGVsX2RwX2FkZF9wcm9wZXJ0aWVzKHN0cnVjdCBpbnRlbF9kcCAq aW50ZWxfZHAsIHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0CiAJfQogfQogCi1zdGF0aWMg dm9pZCBpbnRlbF9kcF9pbml0X3BhbmVsX3Bvd2VyX3RpbWVzdGFtcHMoc3RydWN0IGludGVsX2Rw ICppbnRlbF9kcCkKLXsKLQlpbnRlbF9kcC0+cGFuZWxfcG93ZXJfb2ZmX3RpbWUgPSBrdGltZV9n ZXRfYm9vdHRpbWUoKTsKLQlpbnRlbF9kcC0+bGFzdF9wb3dlcl9vbiA9IGppZmZpZXM7Ci0JaW50 ZWxfZHAtPmxhc3RfYmFja2xpZ2h0X29mZiA9IGppZmZpZXM7Ci19Ci0KLXN0YXRpYyB2b2lkCi1p bnRlbF9wcHNfcmVhZG91dF9od19zdGF0ZShzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwLCBzdHJ1 Y3QgZWRwX3Bvd2VyX3NlcSAqc2VxKQotewotCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZf cHJpdiA9IGRwX3RvX2k5MTUoaW50ZWxfZHApOwotCXUzMiBwcF9vbiwgcHBfb2ZmLCBwcF9jdGw7 Ci0Jc3RydWN0IHBwc19yZWdpc3RlcnMgcmVnczsKLQotCWludGVsX3Bwc19nZXRfcmVnaXN0ZXJz KGludGVsX2RwLCAmcmVncyk7Ci0KLQlwcF9jdGwgPSBpbGtfZ2V0X3BwX2NvbnRyb2woaW50ZWxf ZHApOwotCi0JLyogRW5zdXJlIFBQUyBpcyB1bmxvY2tlZCAqLwotCWlmICghSEFTX0RESShkZXZf cHJpdikpCi0JCWludGVsX2RlX3dyaXRlKGRldl9wcml2LCByZWdzLnBwX2N0cmwsIHBwX2N0bCk7 Ci0KLQlwcF9vbiA9IGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIHJlZ3MucHBfb24pOwotCXBwX29m ZiA9IGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIHJlZ3MucHBfb2ZmKTsKLQotCS8qIFB1bGwgdGlt aW5nIHZhbHVlcyBvdXQgb2YgcmVnaXN0ZXJzICovCi0Jc2VxLT50MV90MyA9IFJFR19GSUVMRF9H RVQoUEFORUxfUE9XRVJfVVBfREVMQVlfTUFTSywgcHBfb24pOwotCXNlcS0+dDggPSBSRUdfRklF TERfR0VUKFBBTkVMX0xJR0hUX09OX0RFTEFZX01BU0ssIHBwX29uKTsKLQlzZXEtPnQ5ID0gUkVH X0ZJRUxEX0dFVChQQU5FTF9MSUdIVF9PRkZfREVMQVlfTUFTSywgcHBfb2ZmKTsKLQlzZXEtPnQx MCA9IFJFR19GSUVMRF9HRVQoUEFORUxfUE9XRVJfRE9XTl9ERUxBWV9NQVNLLCBwcF9vZmYpOwot Ci0JaWYgKGk5MTVfbW1pb19yZWdfdmFsaWQocmVncy5wcF9kaXYpKSB7Ci0JCXUzMiBwcF9kaXY7 Ci0KLQkJcHBfZGl2ID0gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgcmVncy5wcF9kaXYpOwotCi0J CXNlcS0+dDExX3QxMiA9IFJFR19GSUVMRF9HRVQoUEFORUxfUE9XRVJfQ1lDTEVfREVMQVlfTUFT SywgcHBfZGl2KSAqIDEwMDA7Ci0JfSBlbHNlIHsKLQkJc2VxLT50MTFfdDEyID0gUkVHX0ZJRUxE X0dFVChCWFRfUE9XRVJfQ1lDTEVfREVMQVlfTUFTSywgcHBfY3RsKSAqIDEwMDA7Ci0JfQotfQot Ci1zdGF0aWMgdm9pZAotaW50ZWxfcHBzX2R1bXBfc3RhdGUoY29uc3QgY2hhciAqc3RhdGVfbmFt ZSwgY29uc3Qgc3RydWN0IGVkcF9wb3dlcl9zZXEgKnNlcSkKLXsKLQlEUk1fREVCVUdfS01TKCIl cyB0MV90MyAlZCB0OCAlZCB0OSAlZCB0MTAgJWQgdDExX3QxMiAlZFxuIiwKLQkJICAgICAgc3Rh dGVfbmFtZSwKLQkJICAgICAgc2VxLT50MV90Mywgc2VxLT50OCwgc2VxLT50OSwgc2VxLT50MTAs IHNlcS0+dDExX3QxMik7Ci19Ci0KLXN0YXRpYyB2b2lkCi1pbnRlbF9wcHNfdmVyaWZ5X3N0YXRl KHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApCi17Ci0Jc3RydWN0IGVkcF9wb3dlcl9zZXEgaHc7 Ci0Jc3RydWN0IGVkcF9wb3dlcl9zZXEgKnN3ID0gJmludGVsX2RwLT5wcHNfZGVsYXlzOwotCi0J aW50ZWxfcHBzX3JlYWRvdXRfaHdfc3RhdGUoaW50ZWxfZHAsICZodyk7Ci0KLQlpZiAoaHcudDFf dDMgIT0gc3ctPnQxX3QzIHx8IGh3LnQ4ICE9IHN3LT50OCB8fCBody50OSAhPSBzdy0+dDkgfHwK LQkgICAgaHcudDEwICE9IHN3LT50MTAgfHwgaHcudDExX3QxMiAhPSBzdy0+dDExX3QxMikgewot CQlEUk1fRVJST1IoIlBQUyBzdGF0ZSBtaXNtYXRjaFxuIik7Ci0JCWludGVsX3Bwc19kdW1wX3N0 YXRlKCJzdyIsIHN3KTsKLQkJaW50ZWxfcHBzX2R1bXBfc3RhdGUoImh3IiwgJmh3KTsKLQl9Ci19 Ci0KLXN0YXRpYyB2b2lkCi1pbnRlbF9kcF9pbml0X3BhbmVsX3Bvd2VyX3NlcXVlbmNlcihzdHJ1 Y3QgaW50ZWxfZHAgKmludGVsX2RwKQotewotCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZf cHJpdiA9IGRwX3RvX2k5MTUoaW50ZWxfZHApOwotCXN0cnVjdCBlZHBfcG93ZXJfc2VxIGN1ciwg dmJ0LCBzcGVjLAotCQkqZmluYWwgPSAmaW50ZWxfZHAtPnBwc19kZWxheXM7Ci0KLQlsb2NrZGVw X2Fzc2VydF9oZWxkKCZkZXZfcHJpdi0+cHBzX211dGV4KTsKLQotCS8qIGFscmVhZHkgaW5pdGlh bGl6ZWQ/ICovCi0JaWYgKGZpbmFsLT50MTFfdDEyICE9IDApCi0JCXJldHVybjsKLQotCWludGVs X3Bwc19yZWFkb3V0X2h3X3N0YXRlKGludGVsX2RwLCAmY3VyKTsKLQotCWludGVsX3Bwc19kdW1w X3N0YXRlKCJjdXIiLCAmY3VyKTsKLQotCXZidCA9IGRldl9wcml2LT52YnQuZWRwLnBwczsKLQkv KiBPbiBUb3NoaWJhIFNhdGVsbGl0ZSBQNTAtQy0xOEMgc3lzdGVtIHRoZSBWQlQgVDEyIGRlbGF5 Ci0JICogb2YgNTAwbXMgYXBwZWFycyB0byBiZSB0b28gc2hvcnQuIE9jYXNzaW9uYWxseSB0aGUg cGFuZWwKLQkgKiBqdXN0IGZhaWxzIHRvIHBvd2VyIGJhY2sgb24uIEluY3JlYXNpbmcgdGhlIGRl bGF5IHRvIDgwMG1zCi0JICogc2VlbXMgc3VmZmljaWVudCB0byBhdm9pZCB0aGlzIHByb2JsZW0u Ci0JICovCi0JaWYgKGRldl9wcml2LT5xdWlya3MgJiBRVUlSS19JTkNSRUFTRV9UMTJfREVMQVkp IHsKLQkJdmJ0LnQxMV90MTIgPSBtYXhfdCh1MTYsIHZidC50MTFfdDEyLCAxMzAwICogMTApOwot CQlkcm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwKLQkJCSAgICAiSW5jcmVhc2luZyBUMTIgcGFu ZWwgZGVsYXkgYXMgcGVyIHRoZSBxdWlyayB0byAlZFxuIiwKLQkJCSAgICB2YnQudDExX3QxMik7 Ci0JfQotCS8qIFQxMV9UMTIgZGVsYXkgaXMgc3BlY2lhbCBhbmQgYWN0dWFsbHkgaW4gdW5pdHMg b2YgMTAwbXMsIGJ1dCB6ZXJvCi0JICogYmFzZWQgaW4gdGhlIGh3IChzbyB3ZSBuZWVkIHRvIGFk ZCAxMDAgbXMpLiBCdXQgdGhlIHN3IHZidAotCSAqIHRhYmxlIG11bHRpcGxpZXMgaXQgd2l0aCAx MDAwIHRvIG1ha2UgaXQgaW4gdW5pdHMgb2YgMTAwdXNlYywKLQkgKiB0b28uICovCi0JdmJ0LnQx MV90MTIgKz0gMTAwICogMTA7Ci0KLQkvKiBVcHBlciBsaW1pdHMgZnJvbSBlRFAgMS4zIHNwZWMu IE5vdGUgdGhhdCB3ZSB1c2UgdGhlIGNsdW5reSB1bml0cyBvZgotCSAqIG91ciBodyBoZXJlLCB3 aGljaCBhcmUgYWxsIGluIDEwMHVzZWMuICovCi0Jc3BlYy50MV90MyA9IDIxMCAqIDEwOwotCXNw ZWMudDggPSA1MCAqIDEwOyAvKiBubyBsaW1pdCBmb3IgdDgsIHVzZSB0NyBpbnN0ZWFkICovCi0J c3BlYy50OSA9IDUwICogMTA7IC8qIG5vIGxpbWl0IGZvciB0OSwgbWFrZSBpdCBzeW1tZXRyaWMg d2l0aCB0OCAqLwotCXNwZWMudDEwID0gNTAwICogMTA7Ci0JLyogVGhpcyBvbmUgaXMgc3BlY2lh bCBhbmQgYWN0dWFsbHkgaW4gdW5pdHMgb2YgMTAwbXMsIGJ1dCB6ZXJvCi0JICogYmFzZWQgaW4g dGhlIGh3IChzbyB3ZSBuZWVkIHRvIGFkZCAxMDAgbXMpLiBCdXQgdGhlIHN3IHZidAotCSAqIHRh YmxlIG11bHRpcGxpZXMgaXQgd2l0aCAxMDAwIHRvIG1ha2UgaXQgaW4gdW5pdHMgb2YgMTAwdXNl YywKLQkgKiB0b28uICovCi0Jc3BlYy50MTFfdDEyID0gKDUxMCArIDEwMCkgKiAxMDsKLQotCWlu dGVsX3Bwc19kdW1wX3N0YXRlKCJ2YnQiLCAmdmJ0KTsKLQotCS8qIFVzZSB0aGUgbWF4IG9mIHRo ZSByZWdpc3RlciBzZXR0aW5ncyBhbmQgdmJ0LiBJZiBib3RoIGFyZQotCSAqIHVuc2V0LCBmYWxs IGJhY2sgdG8gdGhlIHNwZWMgbGltaXRzLiAqLwotI2RlZmluZSBhc3NpZ25fZmluYWwoZmllbGQp CWZpbmFsLT5maWVsZCA9IChtYXgoY3VyLmZpZWxkLCB2YnQuZmllbGQpID09IDAgPyBcCi0JCQkJ ICAgICAgIHNwZWMuZmllbGQgOiBcCi0JCQkJICAgICAgIG1heChjdXIuZmllbGQsIHZidC5maWVs ZCkpCi0JYXNzaWduX2ZpbmFsKHQxX3QzKTsKLQlhc3NpZ25fZmluYWwodDgpOwotCWFzc2lnbl9m aW5hbCh0OSk7Ci0JYXNzaWduX2ZpbmFsKHQxMCk7Ci0JYXNzaWduX2ZpbmFsKHQxMV90MTIpOwot I3VuZGVmIGFzc2lnbl9maW5hbAotCi0jZGVmaW5lIGdldF9kZWxheShmaWVsZCkJKERJVl9ST1VO RF9VUChmaW5hbC0+ZmllbGQsIDEwKSkKLQlpbnRlbF9kcC0+cGFuZWxfcG93ZXJfdXBfZGVsYXkg PSBnZXRfZGVsYXkodDFfdDMpOwotCWludGVsX2RwLT5iYWNrbGlnaHRfb25fZGVsYXkgPSBnZXRf ZGVsYXkodDgpOwotCWludGVsX2RwLT5iYWNrbGlnaHRfb2ZmX2RlbGF5ID0gZ2V0X2RlbGF5KHQ5 KTsKLQlpbnRlbF9kcC0+cGFuZWxfcG93ZXJfZG93bl9kZWxheSA9IGdldF9kZWxheSh0MTApOwot CWludGVsX2RwLT5wYW5lbF9wb3dlcl9jeWNsZV9kZWxheSA9IGdldF9kZWxheSh0MTFfdDEyKTsK LSN1bmRlZiBnZXRfZGVsYXkKLQotCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJtLAotCQkgICAg InBhbmVsIHBvd2VyIHVwIGRlbGF5ICVkLCBwb3dlciBkb3duIGRlbGF5ICVkLCBwb3dlciBjeWNs ZSBkZWxheSAlZFxuIiwKLQkJICAgIGludGVsX2RwLT5wYW5lbF9wb3dlcl91cF9kZWxheSwKLQkJ ICAgIGludGVsX2RwLT5wYW5lbF9wb3dlcl9kb3duX2RlbGF5LAotCQkgICAgaW50ZWxfZHAtPnBh bmVsX3Bvd2VyX2N5Y2xlX2RlbGF5KTsKLQotCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJtLCAi YmFja2xpZ2h0IG9uIGRlbGF5ICVkLCBvZmYgZGVsYXkgJWRcbiIsCi0JCSAgICBpbnRlbF9kcC0+ YmFja2xpZ2h0X29uX2RlbGF5LAotCQkgICAgaW50ZWxfZHAtPmJhY2tsaWdodF9vZmZfZGVsYXkp OwotCi0JLyoKLQkgKiBXZSBvdmVycmlkZSB0aGUgSFcgYmFja2xpZ2h0IGRlbGF5cyB0byAxIGJl Y2F1c2Ugd2UgZG8gbWFudWFsIHdhaXRzCi0JICogb24gdGhlbS4gRm9yIFQ4LCBldmVuIEJTcGVj IHJlY29tbWVuZHMgZG9pbmcgaXQuIEZvciBUOSwgaWYgd2UKLQkgKiBkb24ndCBkbyB0aGlzLCB3 ZSdsbCBlbmQgdXAgd2FpdGluZyBmb3IgdGhlIGJhY2tsaWdodCBvZmYgZGVsYXkKLQkgKiB0d2lj ZTogb25jZSB3aGVuIHdlIGRvIHRoZSBtYW51YWwgc2xlZXAsIGFuZCBvbmNlIHdoZW4gd2UgZGlz YWJsZQotCSAqIHRoZSBwYW5lbCBhbmQgd2FpdCBmb3IgdGhlIFBQX1NUQVRVUyBiaXQgdG8gYmVj b21lIHplcm8uCi0JICovCi0JZmluYWwtPnQ4ID0gMTsKLQlmaW5hbC0+dDkgPSAxOwotCi0JLyoK LQkgKiBIVyBoYXMgb25seSBhIDEwMG1zZWMgZ3JhbnVsYXJpdHkgZm9yIHQxMV90MTIgc28gcm91 bmQgaXQgdXAKLQkgKiBhY2NvcmRpbmdseS4KLQkgKi8KLQlmaW5hbC0+dDExX3QxMiA9IHJvdW5k dXAoZmluYWwtPnQxMV90MTIsIDEwMCAqIDEwKTsKLX0KLQotc3RhdGljIHZvaWQKLWludGVsX2Rw X2luaXRfcGFuZWxfcG93ZXJfc2VxdWVuY2VyX3JlZ2lzdGVycyhzdHJ1Y3QgaW50ZWxfZHAgKmlu dGVsX2RwLAotCQkJCQkgICAgICBib29sIGZvcmNlX2Rpc2FibGVfdmRkKQotewotCXN0cnVjdCBk cm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRwX3RvX2k5MTUoaW50ZWxfZHApOwotCXUzMiBw cF9vbiwgcHBfb2ZmLCBwb3J0X3NlbCA9IDA7Ci0JaW50IGRpdiA9IFJVTlRJTUVfSU5GTyhkZXZf cHJpdiktPnJhd2Nsa19mcmVxIC8gMTAwMDsKLQlzdHJ1Y3QgcHBzX3JlZ2lzdGVycyByZWdzOwot CWVudW0gcG9ydCBwb3J0ID0gZHBfdG9fZGlnX3BvcnQoaW50ZWxfZHApLT5iYXNlLnBvcnQ7Ci0J Y29uc3Qgc3RydWN0IGVkcF9wb3dlcl9zZXEgKnNlcSA9ICZpbnRlbF9kcC0+cHBzX2RlbGF5czsK LQotCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmRldl9wcml2LT5wcHNfbXV0ZXgpOwotCi0JaW50ZWxf cHBzX2dldF9yZWdpc3RlcnMoaW50ZWxfZHAsICZyZWdzKTsKLQotCS8qCi0JICogT24gc29tZSBW TFYgbWFjaGluZXMgdGhlIEJJT1MgY2FuIGxlYXZlIHRoZSBWREQKLQkgKiBlbmFibGVkIGV2ZW4g b24gcG93ZXIgc2VxdWVuY2VycyB3aGljaCBhcmVuJ3QKLQkgKiBob29rZWQgdXAgdG8gYW55IHBv cnQuIFRoaXMgd291bGQgbWVzcyB1cCB0aGUKLQkgKiBwb3dlciBkb21haW4gdHJhY2tpbmcgdGhl IGZpcnN0IHRpbWUgd2UgcGljawotCSAqIG9uZSBvZiB0aGVzZSBwb3dlciBzZXF1ZW5jZXJzIGZv ciB1c2Ugc2luY2UKLQkgKiBlZHBfcGFuZWxfdmRkX29uKCkgd291bGQgbm90aWNlIHRoYXQgdGhl IFZERCB3YXMKLQkgKiBhbHJlYWR5IG9uIGFuZCB0aGVyZWZvcmUgd291bGRuJ3QgZ3JhYiB0aGUg cG93ZXIKLQkgKiBkb21haW4gcmVmZXJlbmNlLiBEaXNhYmxlIFZERCBmaXJzdCB0byBhdm9pZCB0 aGlzLgotCSAqIFRoaXMgYWxzbyBhdm9pZHMgc3B1cmlvdXNseSB0dXJuaW5nIHRoZSBWREQgb24g YXMKLQkgKiBzb29uIGFzIHRoZSBuZXcgcG93ZXIgc2VxdWVuY2VyIGdldHMgaW5pdGlhbGl6ZWQu Ci0JICovCi0JaWYgKGZvcmNlX2Rpc2FibGVfdmRkKSB7Ci0JCXUzMiBwcCA9IGlsa19nZXRfcHBf Y29udHJvbChpbnRlbF9kcCk7Ci0KLQkJZHJtX1dBUk4oJmRldl9wcml2LT5kcm0sIHBwICYgUEFO RUxfUE9XRVJfT04sCi0JCQkgIlBhbmVsIHBvd2VyIGFscmVhZHkgb25cbiIpOwotCi0JCWlmIChw cCAmIEVEUF9GT1JDRV9WREQpCi0JCQlkcm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwKLQkJCQkg ICAgIlZERCBhbHJlYWR5IG9uLCBkaXNhYmxpbmcgZmlyc3RcbiIpOwotCi0JCXBwICY9IH5FRFBf Rk9SQ0VfVkREOwotCi0JCWludGVsX2RlX3dyaXRlKGRldl9wcml2LCByZWdzLnBwX2N0cmwsIHBw KTsKLQl9Ci0KLQlwcF9vbiA9IFJFR19GSUVMRF9QUkVQKFBBTkVMX1BPV0VSX1VQX0RFTEFZX01B U0ssIHNlcS0+dDFfdDMpIHwKLQkJUkVHX0ZJRUxEX1BSRVAoUEFORUxfTElHSFRfT05fREVMQVlf TUFTSywgc2VxLT50OCk7Ci0JcHBfb2ZmID0gUkVHX0ZJRUxEX1BSRVAoUEFORUxfTElHSFRfT0ZG X0RFTEFZX01BU0ssIHNlcS0+dDkpIHwKLQkJUkVHX0ZJRUxEX1BSRVAoUEFORUxfUE9XRVJfRE9X Tl9ERUxBWV9NQVNLLCBzZXEtPnQxMCk7Ci0KLQkvKiBIYXN3ZWxsIGRvZXNuJ3QgaGF2ZSBhbnkg cG9ydCBzZWxlY3Rpb24gYml0cyBmb3IgdGhlIHBhbmVsCi0JICogcG93ZXIgc2VxdWVuY2VyIGFu eSBtb3JlLiAqLwotCWlmIChJU19WQUxMRVlWSUVXKGRldl9wcml2KSB8fCBJU19DSEVSUllWSUVX KGRldl9wcml2KSkgewotCQlwb3J0X3NlbCA9IFBBTkVMX1BPUlRfU0VMRUNUX1ZMVihwb3J0KTsK LQl9IGVsc2UgaWYgKEhBU19QQ0hfSUJYKGRldl9wcml2KSB8fCBIQVNfUENIX0NQVChkZXZfcHJp dikpIHsKLQkJc3dpdGNoIChwb3J0KSB7Ci0JCWNhc2UgUE9SVF9BOgotCQkJcG9ydF9zZWwgPSBQ QU5FTF9QT1JUX1NFTEVDVF9EUEE7Ci0JCQlicmVhazsKLQkJY2FzZSBQT1JUX0M6Ci0JCQlwb3J0 X3NlbCA9IFBBTkVMX1BPUlRfU0VMRUNUX0RQQzsKLQkJCWJyZWFrOwotCQljYXNlIFBPUlRfRDoK LQkJCXBvcnRfc2VsID0gUEFORUxfUE9SVF9TRUxFQ1RfRFBEOwotCQkJYnJlYWs7Ci0JCWRlZmF1 bHQ6Ci0JCQlNSVNTSU5HX0NBU0UocG9ydCk7Ci0JCQlicmVhazsKLQkJfQotCX0KLQotCXBwX29u IHw9IHBvcnRfc2VsOwotCi0JaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIHJlZ3MucHBfb24sIHBw X29uKTsKLQlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgcmVncy5wcF9vZmYsIHBwX29mZik7Ci0K LQkvKgotCSAqIENvbXB1dGUgdGhlIGRpdmlzb3IgZm9yIHRoZSBwcCBjbG9jaywgc2ltcGx5IG1h dGNoIHRoZSBCc3BlYyBmb3JtdWxhLgotCSAqLwotCWlmIChpOTE1X21taW9fcmVnX3ZhbGlkKHJl Z3MucHBfZGl2KSkgewotCQlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgcmVncy5wcF9kaXYsCi0J CQkgICAgICAgUkVHX0ZJRUxEX1BSRVAoUFBfUkVGRVJFTkNFX0RJVklERVJfTUFTSywgKDEwMCAq IGRpdikgLyAyIC0gMSkgfCBSRUdfRklFTERfUFJFUChQQU5FTF9QT1dFUl9DWUNMRV9ERUxBWV9N QVNLLCBESVZfUk9VTkRfVVAoc2VxLT50MTFfdDEyLCAxMDAwKSkpOwotCX0gZWxzZSB7Ci0JCXUz MiBwcF9jdGw7Ci0KLQkJcHBfY3RsID0gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgcmVncy5wcF9j dHJsKTsKLQkJcHBfY3RsICY9IH5CWFRfUE9XRVJfQ1lDTEVfREVMQVlfTUFTSzsKLQkJcHBfY3Rs IHw9IFJFR19GSUVMRF9QUkVQKEJYVF9QT1dFUl9DWUNMRV9ERUxBWV9NQVNLLCBESVZfUk9VTkRf VVAoc2VxLT50MTFfdDEyLCAxMDAwKSk7Ci0JCWludGVsX2RlX3dyaXRlKGRldl9wcml2LCByZWdz LnBwX2N0cmwsIHBwX2N0bCk7Ci0JfQotCi0JZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sCi0J CSAgICAicGFuZWwgcG93ZXIgc2VxdWVuY2VyIHJlZ2lzdGVyIHNldHRpbmdzOiBQUF9PTiAlI3gs IFBQX09GRiAlI3gsIFBQX0RJViAlI3hcbiIsCi0JCSAgICBpbnRlbF9kZV9yZWFkKGRldl9wcml2 LCByZWdzLnBwX29uKSwKLQkJICAgIGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIHJlZ3MucHBfb2Zm KSwKLQkJICAgIGk5MTVfbW1pb19yZWdfdmFsaWQocmVncy5wcF9kaXYpID8KLQkJICAgIGludGVs X2RlX3JlYWQoZGV2X3ByaXYsIHJlZ3MucHBfZGl2KSA6Ci0JCSAgICAoaW50ZWxfZGVfcmVhZChk ZXZfcHJpdiwgcmVncy5wcF9jdHJsKSAmIEJYVF9QT1dFUl9DWUNMRV9ERUxBWV9NQVNLKSk7Ci19 Ci0KLXN0YXRpYyB2b2lkIGludGVsX2RwX3Bwc19pbml0KHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxf ZHApCi17Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZHBfdG9faTkxNShp bnRlbF9kcCk7Ci0KLQlpZiAoSVNfVkFMTEVZVklFVyhkZXZfcHJpdikgfHwgSVNfQ0hFUlJZVklF VyhkZXZfcHJpdikpIHsKLQkJdmx2X2luaXRpYWxfcG93ZXJfc2VxdWVuY2VyX3NldHVwKGludGVs X2RwKTsKLQl9IGVsc2UgewotCQlpbnRlbF9kcF9pbml0X3BhbmVsX3Bvd2VyX3NlcXVlbmNlcihp bnRlbF9kcCk7Ci0JCWludGVsX2RwX2luaXRfcGFuZWxfcG93ZXJfc2VxdWVuY2VyX3JlZ2lzdGVy cyhpbnRlbF9kcCwgZmFsc2UpOwotCX0KLX0KLQogLyoqCiAgKiBpbnRlbF9kcF9zZXRfZHJyc19z dGF0ZSAtIHByb2dyYW0gcmVnaXN0ZXJzIGZvciBSUiBzd2l0Y2ggdG8gdGFrZSBlZmZlY3QKICAq IEBkZXZfcHJpdjogaTkxNSBkZXZpY2UKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2Rpc3BsYXkvaW50ZWxfZHAuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxf ZHAuaAppbmRleCBiODcxYTA5YjY5MDEuLjg3YWNlNWQ3ZjQ0NyAxMDA2NDQKLS0tIGEvZHJpdmVy cy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kcC5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2Rpc3BsYXkvaW50ZWxfZHAuaApAQCAtNjksMTUgKzY5LDExIEBAIGVudW0gaXJxcmV0dXJu IGludGVsX2RwX2hwZF9wdWxzZShzdHJ1Y3QgaW50ZWxfZGlnaXRhbF9wb3J0ICpkaWdfcG9ydCwK IHZvaWQgaW50ZWxfZWRwX2JhY2tsaWdodF9vbihjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0 ZSAqY3J0Y19zdGF0ZSwKIAkJCSAgICBjb25zdCBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9zdGF0ZSAq Y29ubl9zdGF0ZSk7CiB2b2lkIGludGVsX2VkcF9iYWNrbGlnaHRfb2ZmKGNvbnN0IHN0cnVjdCBk cm1fY29ubmVjdG9yX3N0YXRlICpjb25uX3N0YXRlKTsKLXZvaWQgaW50ZWxfZWRwX3BhbmVsX3Zk ZF9vbihzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKTsKLXZvaWQgaW50ZWxfZWRwX3BhbmVsX29u KHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApOwotdm9pZCBpbnRlbF9lZHBfcGFuZWxfb2ZmKHN0 cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApOwogdm9pZCBpbnRlbF9kcF9tc3Rfc3VzcGVuZChzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwogdm9pZCBpbnRlbF9kcF9tc3RfcmVzdW1l KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7CiBpbnQgaW50ZWxfZHBfbWF4X2xp bmtfcmF0ZShzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKTsKIGludCBpbnRlbF9kcF9tYXhfbGFu ZV9jb3VudChzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKTsKIGludCBpbnRlbF9kcF9yYXRlX3Nl bGVjdChzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwLCBpbnQgcmF0ZSk7Ci12b2lkIGludGVsX3Bv d2VyX3NlcXVlbmNlcl9yZXNldChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwog dTMyIGludGVsX2RwX3BhY2tfYXV4KGNvbnN0IHU4ICpzcmMsIGludCBzcmNfYnl0ZXMpOwogCiB2 b2lkIGludGVsX2VkcF9kcnJzX2VuYWJsZShzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwLApAQCAt MTQzLDUgKzEzOSw2IEBAIGJvb2wgaW50ZWxfZHBfaW5pdGlhbF9mYXN0c2V0X2NoZWNrKHN0cnVj dCBpbnRlbF9lbmNvZGVyICplbmNvZGVyLAogCQkJCSAgICBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0 ZSAqY3J0Y19zdGF0ZSk7CiB2b2lkIGludGVsX2RwX3N5bmNfc3RhdGUoc3RydWN0IGludGVsX2Vu Y29kZXIgKmVuY29kZXIsCiAJCQkgY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNf c3RhdGUpOworY29uc3Qgc3RydWN0IGRwbGwgKnZsdl9nZXRfZHBsbChzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqaTkxNSk7CiAKICNlbmRpZiAvKiBfX0lOVEVMX0RQX0hfXyAqLwpkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9wcHMuYyBiL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfcHBzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMDAwMDAwLi5jZmUzNDcwNzYwMzEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dw dS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX3Bwcy5jCkBAIC0wLDAgKzEsMTMzNyBAQAorLy8gU1BE WC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVAorLyoKKyAqIENvcHlyaWdodCDCqSAyMDIwIEludGVs IENvcnBvcmF0aW9uCisgKi8KKworI2luY2x1ZGUgImk5MTVfZHJ2LmgiCisjaW5jbHVkZSAiaW50 ZWxfZGlzcGxheV90eXBlcy5oIgorI2luY2x1ZGUgImludGVsX2RwLmgiCisjaW5jbHVkZSAiaW50 ZWxfcHBzLmgiCisKK3N0YXRpYyB2b2lkIHZsdl9zdGVhbF9wb3dlcl9zZXF1ZW5jZXIoc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAorCQkJCSAgICAgIGVudW0gcGlwZSBwaXBlKTsK K3N0YXRpYyB2b2lkCitpbnRlbF9kcF9pbml0X3BhbmVsX3Bvd2VyX3NlcXVlbmNlcihzdHJ1Y3Qg aW50ZWxfZHAgKmludGVsX2RwKTsKK3N0YXRpYyB2b2lkCitpbnRlbF9kcF9pbml0X3BhbmVsX3Bv d2VyX3NlcXVlbmNlcl9yZWdpc3RlcnMoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCwKKwkJCQkJ ICAgICAgYm9vbCBmb3JjZV9kaXNhYmxlX3ZkZCk7CisKK2ludGVsX3dha2VyZWZfdCBwcHNfbG9j ayhzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICpkZXZfcHJpdiA9IGRwX3RvX2k5MTUoaW50ZWxfZHApOworCWludGVsX3dha2VyZWZfdCB3YWtl cmVmOworCisJLyoKKwkgKiBTZWUgaW50ZWxfcG93ZXJfc2VxdWVuY2VyX3Jlc2V0KCkgd2h5IHdl IG5lZWQKKwkgKiBhIHBvd2VyIGRvbWFpbiByZWZlcmVuY2UgaGVyZS4KKwkgKi8KKwl3YWtlcmVm ID0gaW50ZWxfZGlzcGxheV9wb3dlcl9nZXQoZGV2X3ByaXYsCisJCQkJCSAgaW50ZWxfYXV4X3Bv d2VyX2RvbWFpbihkcF90b19kaWdfcG9ydChpbnRlbF9kcCkpKTsKKworCW11dGV4X2xvY2soJmRl dl9wcml2LT5wcHNfbXV0ZXgpOworCisJcmV0dXJuIHdha2VyZWY7Cit9CisKK2ludGVsX3dha2Vy ZWZfdCBwcHNfdW5sb2NrKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAsIGludGVsX3dha2VyZWZf dCB3YWtlcmVmKQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRwX3Rv X2k5MTUoaW50ZWxfZHApOworCisJbXV0ZXhfdW5sb2NrKCZkZXZfcHJpdi0+cHBzX211dGV4KTsK KwlpbnRlbF9kaXNwbGF5X3Bvd2VyX3B1dChkZXZfcHJpdiwKKwkJCQlpbnRlbF9hdXhfcG93ZXJf ZG9tYWluKGRwX3RvX2RpZ19wb3J0KGludGVsX2RwKSksCisJCQkJd2FrZXJlZik7CisJcmV0dXJu IDA7Cit9CisKK3N0YXRpYyB2b2lkCit2bHZfcG93ZXJfc2VxdWVuY2VyX2tpY2soc3RydWN0IGlu dGVsX2RwICppbnRlbF9kcCkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYg PSBkcF90b19pOTE1KGludGVsX2RwKTsKKwlzdHJ1Y3QgaW50ZWxfZGlnaXRhbF9wb3J0ICpkaWdf cG9ydCA9IGRwX3RvX2RpZ19wb3J0KGludGVsX2RwKTsKKwllbnVtIHBpcGUgcGlwZSA9IGludGVs X2RwLT5wcHNfcGlwZTsKKwlib29sIHBsbF9lbmFibGVkLCByZWxlYXNlX2NsX292ZXJyaWRlID0g ZmFsc2U7CisJZW51bSBkcGlvX3BoeSBwaHkgPSBEUElPX1BIWShwaXBlKTsKKwllbnVtIGRwaW9f Y2hhbm5lbCBjaCA9IHZsdl9waXBlX3RvX2NoYW5uZWwocGlwZSk7CisJdTMyIERQOworCisJaWYg KGRybV9XQVJOKCZkZXZfcHJpdi0+ZHJtLAorCQkgICAgIGludGVsX2RlX3JlYWQoZGV2X3ByaXYs IGludGVsX2RwLT5vdXRwdXRfcmVnKSAmIERQX1BPUlRfRU4sCisJCSAgICAgInNraXBwaW5nIHBp cGUgJWMgcG93ZXIgc2VxdWVuY2VyIGtpY2sgZHVlIHRvIFtFTkNPREVSOiVkOiVzXSBiZWluZyBh Y3RpdmVcbiIsCisJCSAgICAgcGlwZV9uYW1lKHBpcGUpLCBkaWdfcG9ydC0+YmFzZS5iYXNlLmJh c2UuaWQsCisJCSAgICAgZGlnX3BvcnQtPmJhc2UuYmFzZS5uYW1lKSkKKwkJcmV0dXJuOworCisJ ZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sCisJCSAgICAia2lja2luZyBwaXBlICVjIHBvd2Vy IHNlcXVlbmNlciBmb3IgW0VOQ09ERVI6JWQ6JXNdXG4iLAorCQkgICAgcGlwZV9uYW1lKHBpcGUp LCBkaWdfcG9ydC0+YmFzZS5iYXNlLmJhc2UuaWQsCisJCSAgICBkaWdfcG9ydC0+YmFzZS5iYXNl Lm5hbWUpOworCisJLyogUHJlc2VydmUgdGhlIEJJT1MtY29tcHV0ZWQgZGV0ZWN0ZWQgYml0LiBU aGlzIGlzCisJICogc3VwcG9zZWQgdG8gYmUgcmVhZC1vbmx5LgorCSAqLworCURQID0gaW50ZWxf ZGVfcmVhZChkZXZfcHJpdiwgaW50ZWxfZHAtPm91dHB1dF9yZWcpICYgRFBfREVURUNURUQ7CisJ RFAgfD0gRFBfVk9MVEFHRV8wXzQgfCBEUF9QUkVfRU1QSEFTSVNfMDsKKwlEUCB8PSBEUF9QT1JU X1dJRFRIKDEpOworCURQIHw9IERQX0xJTktfVFJBSU5fUEFUXzE7CisKKwlpZiAoSVNfQ0hFUlJZ VklFVyhkZXZfcHJpdikpCisJCURQIHw9IERQX1BJUEVfU0VMX0NIVihwaXBlKTsKKwllbHNlCisJ CURQIHw9IERQX1BJUEVfU0VMKHBpcGUpOworCisJcGxsX2VuYWJsZWQgPSBpbnRlbF9kZV9yZWFk KGRldl9wcml2LCBEUExMKHBpcGUpKSAmIERQTExfVkNPX0VOQUJMRTsKKworCS8qCisJICogVGhl IERQTEwgZm9yIHRoZSBwaXBlIG11c3QgYmUgZW5hYmxlZCBmb3IgdGhpcyB0byB3b3JrLgorCSAq IFNvIGVuYWJsZSB0ZW1wb3JhcmlseSBpdCBpZiBpdCdzIG5vdCBhbHJlYWR5IGVuYWJsZWQuCisJ ICovCisJaWYgKCFwbGxfZW5hYmxlZCkgeworCQlyZWxlYXNlX2NsX292ZXJyaWRlID0gSVNfQ0hF UlJZVklFVyhkZXZfcHJpdikgJiYKKwkJCSFjaHZfcGh5X3Bvd2VyZ2F0ZV9jaChkZXZfcHJpdiwg cGh5LCBjaCwgdHJ1ZSk7CisKKwkJaWYgKHZsdl9mb3JjZV9wbGxfb24oZGV2X3ByaXYsIHBpcGUs IHZsdl9nZXRfZHBsbChkZXZfcHJpdikpKSB7CisJCQlkcm1fZXJyKCZkZXZfcHJpdi0+ZHJtLAor CQkJCSJGYWlsZWQgdG8gZm9yY2Ugb24gcGxsIGZvciBwaXBlICVjIVxuIiwKKwkJCQlwaXBlX25h bWUocGlwZSkpOworCQkJcmV0dXJuOworCQl9CisJfQorCisJLyoKKwkgKiBTaW1pbGFyIG1hZ2lj IGFzIGluIGludGVsX2RwX2VuYWJsZV9wb3J0KCkuCisJICogV2UgX211c3RfIGRvIHRoaXMgcG9y dCBlbmFibGUgKyBkaXNhYmxlIHRyaWNrCisJICogdG8gbWFrZSB0aGlzIHBvd2VyIHNlcXVlbmNl ciBsb2NrIG9udG8gdGhlIHBvcnQuCisJICogT3RoZXJ3aXNlIGV2ZW4gVkREIGZvcmNlIGJpdCB3 b24ndCB3b3JrLgorCSAqLworCWludGVsX2RlX3dyaXRlKGRldl9wcml2LCBpbnRlbF9kcC0+b3V0 cHV0X3JlZywgRFApOworCWludGVsX2RlX3Bvc3RpbmdfcmVhZChkZXZfcHJpdiwgaW50ZWxfZHAt Pm91dHB1dF9yZWcpOworCisJaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIGludGVsX2RwLT5vdXRw dXRfcmVnLCBEUCB8IERQX1BPUlRfRU4pOworCWludGVsX2RlX3Bvc3RpbmdfcmVhZChkZXZfcHJp diwgaW50ZWxfZHAtPm91dHB1dF9yZWcpOworCisJaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIGlu dGVsX2RwLT5vdXRwdXRfcmVnLCBEUCAmIH5EUF9QT1JUX0VOKTsKKwlpbnRlbF9kZV9wb3N0aW5n X3JlYWQoZGV2X3ByaXYsIGludGVsX2RwLT5vdXRwdXRfcmVnKTsKKworCWlmICghcGxsX2VuYWJs ZWQpIHsKKwkJdmx2X2ZvcmNlX3BsbF9vZmYoZGV2X3ByaXYsIHBpcGUpOworCisJCWlmIChyZWxl YXNlX2NsX292ZXJyaWRlKQorCQkJY2h2X3BoeV9wb3dlcmdhdGVfY2goZGV2X3ByaXYsIHBoeSwg Y2gsIGZhbHNlKTsKKwl9Cit9CisKK3N0YXRpYyBlbnVtIHBpcGUgdmx2X2ZpbmRfZnJlZV9wcHMo c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQoreworCXN0cnVjdCBpbnRlbF9lbmNv ZGVyICplbmNvZGVyOworCXVuc2lnbmVkIGludCBwaXBlcyA9ICgxIDw8IFBJUEVfQSkgfCAoMSA8 PCBQSVBFX0IpOworCisJLyoKKwkgKiBXZSBkb24ndCBoYXZlIHBvd2VyIHNlcXVlbmNlciBjdXJy ZW50bHkuCisJICogUGljayBvbmUgdGhhdCdzIG5vdCB1c2VkIGJ5IG90aGVyIHBvcnRzLgorCSAq LworCWZvcl9lYWNoX2ludGVsX2RwKCZkZXZfcHJpdi0+ZHJtLCBlbmNvZGVyKSB7CisJCXN0cnVj dCBpbnRlbF9kcCAqaW50ZWxfZHAgPSBlbmNfdG9faW50ZWxfZHAoZW5jb2Rlcik7CisKKwkJaWYg KGVuY29kZXItPnR5cGUgPT0gSU5URUxfT1VUUFVUX0VEUCkgeworCQkJZHJtX1dBUk5fT04oJmRl dl9wcml2LT5kcm0sCisJCQkJICAgIGludGVsX2RwLT5hY3RpdmVfcGlwZSAhPSBJTlZBTElEX1BJ UEUgJiYKKwkJCQkgICAgaW50ZWxfZHAtPmFjdGl2ZV9waXBlICE9CisJCQkJICAgIGludGVsX2Rw LT5wcHNfcGlwZSk7CisKKwkJCWlmIChpbnRlbF9kcC0+cHBzX3BpcGUgIT0gSU5WQUxJRF9QSVBF KQorCQkJCXBpcGVzICY9IH4oMSA8PCBpbnRlbF9kcC0+cHBzX3BpcGUpOworCQl9IGVsc2Ugewor CQkJZHJtX1dBUk5fT04oJmRldl9wcml2LT5kcm0sCisJCQkJICAgIGludGVsX2RwLT5wcHNfcGlw ZSAhPSBJTlZBTElEX1BJUEUpOworCisJCQlpZiAoaW50ZWxfZHAtPmFjdGl2ZV9waXBlICE9IElO VkFMSURfUElQRSkKKwkJCQlwaXBlcyAmPSB+KDEgPDwgaW50ZWxfZHAtPmFjdGl2ZV9waXBlKTsK KwkJfQorCX0KKworCWlmIChwaXBlcyA9PSAwKQorCQlyZXR1cm4gSU5WQUxJRF9QSVBFOworCisJ cmV0dXJuIGZmcyhwaXBlcykgLSAxOworfQorCitzdGF0aWMgZW51bSBwaXBlCit2bHZfcG93ZXJf c2VxdWVuY2VyX3BpcGUoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCkKK3sKKwlzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkcF90b19pOTE1KGludGVsX2RwKTsKKwlzdHJ1Y3Qg aW50ZWxfZGlnaXRhbF9wb3J0ICpkaWdfcG9ydCA9IGRwX3RvX2RpZ19wb3J0KGludGVsX2RwKTsK KwllbnVtIHBpcGUgcGlwZTsKKworCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmRldl9wcml2LT5wcHNf bXV0ZXgpOworCisJLyogV2Ugc2hvdWxkIG5ldmVyIGxhbmQgaGVyZSB3aXRoIHJlZ3VsYXIgRFAg cG9ydHMgKi8KKwlkcm1fV0FSTl9PTigmZGV2X3ByaXYtPmRybSwgIWludGVsX2RwX2lzX2VkcChp bnRlbF9kcCkpOworCisJZHJtX1dBUk5fT04oJmRldl9wcml2LT5kcm0sIGludGVsX2RwLT5hY3Rp dmVfcGlwZSAhPSBJTlZBTElEX1BJUEUgJiYKKwkJICAgIGludGVsX2RwLT5hY3RpdmVfcGlwZSAh PSBpbnRlbF9kcC0+cHBzX3BpcGUpOworCisJaWYgKGludGVsX2RwLT5wcHNfcGlwZSAhPSBJTlZB TElEX1BJUEUpCisJCXJldHVybiBpbnRlbF9kcC0+cHBzX3BpcGU7CisKKwlwaXBlID0gdmx2X2Zp bmRfZnJlZV9wcHMoZGV2X3ByaXYpOworCisJLyoKKwkgKiBEaWRuJ3QgZmluZCBvbmUuIFRoaXMg c2hvdWxkIG5vdCBoYXBwZW4gc2luY2UgdGhlcmUKKwkgKiBhcmUgdHdvIHBvd2VyIHNlcXVlbmNl cnMgYW5kIHVwIHRvIHR3byBlRFAgcG9ydHMuCisJICovCisJaWYgKGRybV9XQVJOX09OKCZkZXZf cHJpdi0+ZHJtLCBwaXBlID09IElOVkFMSURfUElQRSkpCisJCXBpcGUgPSBQSVBFX0E7CisKKwl2 bHZfc3RlYWxfcG93ZXJfc2VxdWVuY2VyKGRldl9wcml2LCBwaXBlKTsKKwlpbnRlbF9kcC0+cHBz X3BpcGUgPSBwaXBlOworCisJZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sCisJCSAgICAicGlj a2VkIHBpcGUgJWMgcG93ZXIgc2VxdWVuY2VyIGZvciBbRU5DT0RFUjolZDolc11cbiIsCisJCSAg ICBwaXBlX25hbWUoaW50ZWxfZHAtPnBwc19waXBlKSwKKwkJICAgIGRpZ19wb3J0LT5iYXNlLmJh c2UuYmFzZS5pZCwKKwkJICAgIGRpZ19wb3J0LT5iYXNlLmJhc2UubmFtZSk7CisKKwkvKiBpbml0 IHBvd2VyIHNlcXVlbmNlciBvbiB0aGlzIHBpcGUgYW5kIHBvcnQgKi8KKwlpbnRlbF9kcF9pbml0 X3BhbmVsX3Bvd2VyX3NlcXVlbmNlcihpbnRlbF9kcCk7CisJaW50ZWxfZHBfaW5pdF9wYW5lbF9w b3dlcl9zZXF1ZW5jZXJfcmVnaXN0ZXJzKGludGVsX2RwLCB0cnVlKTsKKworCS8qCisJICogRXZl biB2ZGQgZm9yY2UgZG9lc24ndCB3b3JrIHVudGlsIHdlJ3ZlIG1hZGUKKwkgKiB0aGUgcG93ZXIg c2VxdWVuY2VyIGxvY2sgaW4gb24gdGhlIHBvcnQuCisJICovCisJdmx2X3Bvd2VyX3NlcXVlbmNl cl9raWNrKGludGVsX2RwKTsKKworCXJldHVybiBpbnRlbF9kcC0+cHBzX3BpcGU7Cit9CisKK3N0 YXRpYyBpbnQKK2J4dF9wb3dlcl9zZXF1ZW5jZXJfaWR4KHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxf ZHApCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZHBfdG9faTkxNShp bnRlbF9kcCk7CisJaW50IGJhY2tsaWdodF9jb250cm9sbGVyID0gZGV2X3ByaXYtPnZidC5iYWNr bGlnaHQuY29udHJvbGxlcjsKKworCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmRldl9wcml2LT5wcHNf bXV0ZXgpOworCisJLyogV2Ugc2hvdWxkIG5ldmVyIGxhbmQgaGVyZSB3aXRoIHJlZ3VsYXIgRFAg cG9ydHMgKi8KKwlkcm1fV0FSTl9PTigmZGV2X3ByaXYtPmRybSwgIWludGVsX2RwX2lzX2VkcChp bnRlbF9kcCkpOworCisJaWYgKCFpbnRlbF9kcC0+cHBzX3Jlc2V0KQorCQlyZXR1cm4gYmFja2xp Z2h0X2NvbnRyb2xsZXI7CisKKwlpbnRlbF9kcC0+cHBzX3Jlc2V0ID0gZmFsc2U7CisKKwkvKgor CSAqIE9ubHkgdGhlIEhXIG5lZWRzIHRvIGJlIHJlcHJvZ3JhbW1lZCwgdGhlIFNXIHN0YXRlIGlz IGZpeGVkIGFuZAorCSAqIGhhcyBiZWVuIHNldHVwIGR1cmluZyBjb25uZWN0b3IgaW5pdC4KKwkg Ki8KKwlpbnRlbF9kcF9pbml0X3BhbmVsX3Bvd2VyX3NlcXVlbmNlcl9yZWdpc3RlcnMoaW50ZWxf ZHAsIGZhbHNlKTsKKworCXJldHVybiBiYWNrbGlnaHRfY29udHJvbGxlcjsKK30KKwordHlwZWRl ZiBib29sICgqdmx2X3BpcGVfY2hlY2spKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJp diwKKwkJCSAgICAgICBlbnVtIHBpcGUgcGlwZSk7CisKK3N0YXRpYyBib29sIHZsdl9waXBlX2hh c19wcF9vbihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCisJCQkgICAgICAgZW51 bSBwaXBlIHBpcGUpCit7CisJcmV0dXJuIGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIFBQX1NUQVRV UyhwaXBlKSkgJiBQUF9PTjsKK30KKworc3RhdGljIGJvb2wgdmx2X3BpcGVfaGFzX3ZkZF9vbihz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCisJCQkJZW51bSBwaXBlIHBpcGUpCit7 CisJcmV0dXJuIGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIFBQX0NPTlRST0wocGlwZSkpICYgRURQ X0ZPUkNFX1ZERDsKK30KKworc3RhdGljIGJvb2wgdmx2X3BpcGVfYW55KHN0cnVjdCBkcm1faTkx NV9wcml2YXRlICpkZXZfcHJpdiwKKwkJCSBlbnVtIHBpcGUgcGlwZSkKK3sKKwlyZXR1cm4gdHJ1 ZTsKK30KKworc3RhdGljIGVudW0gcGlwZQordmx2X2luaXRpYWxfcHBzX3BpcGUoc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAorCQkgICAgIGVudW0gcG9ydCBwb3J0LAorCQkgICAg IHZsdl9waXBlX2NoZWNrIHBpcGVfY2hlY2spCit7CisJZW51bSBwaXBlIHBpcGU7CisKKwlmb3Ig KHBpcGUgPSBQSVBFX0E7IHBpcGUgPD0gUElQRV9COyBwaXBlKyspIHsKKwkJdTMyIHBvcnRfc2Vs ID0gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgUFBfT05fREVMQVlTKHBpcGUpKSAmCisJCQlQQU5F TF9QT1JUX1NFTEVDVF9NQVNLOworCisJCWlmIChwb3J0X3NlbCAhPSBQQU5FTF9QT1JUX1NFTEVD VF9WTFYocG9ydCkpCisJCQljb250aW51ZTsKKworCQlpZiAoIXBpcGVfY2hlY2soZGV2X3ByaXYs IHBpcGUpKQorCQkJY29udGludWU7CisKKwkJcmV0dXJuIHBpcGU7CisJfQorCisJcmV0dXJuIElO VkFMSURfUElQRTsKK30KKworc3RhdGljIHZvaWQKK3Zsdl9pbml0aWFsX3Bvd2VyX3NlcXVlbmNl cl9zZXR1cChzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKQoreworCXN0cnVjdCBkcm1faTkxNV9w cml2YXRlICpkZXZfcHJpdiA9IGRwX3RvX2k5MTUoaW50ZWxfZHApOworCXN0cnVjdCBpbnRlbF9k aWdpdGFsX3BvcnQgKmRpZ19wb3J0ID0gZHBfdG9fZGlnX3BvcnQoaW50ZWxfZHApOworCWVudW0g cG9ydCBwb3J0ID0gZGlnX3BvcnQtPmJhc2UucG9ydDsKKworCWxvY2tkZXBfYXNzZXJ0X2hlbGQo JmRldl9wcml2LT5wcHNfbXV0ZXgpOworCisJLyogdHJ5IHRvIGZpbmQgYSBwaXBlIHdpdGggdGhp cyBwb3J0IHNlbGVjdGVkICovCisJLyogZmlyc3QgcGljayBvbmUgd2hlcmUgdGhlIHBhbmVsIGlz IG9uICovCisJaW50ZWxfZHAtPnBwc19waXBlID0gdmx2X2luaXRpYWxfcHBzX3BpcGUoZGV2X3By aXYsIHBvcnQsCisJCQkJCQkgIHZsdl9waXBlX2hhc19wcF9vbik7CisJLyogZGlkbid0IGZpbmQg b25lPyBwaWNrIG9uZSB3aGVyZSB2ZGQgaXMgb24gKi8KKwlpZiAoaW50ZWxfZHAtPnBwc19waXBl ID09IElOVkFMSURfUElQRSkKKwkJaW50ZWxfZHAtPnBwc19waXBlID0gdmx2X2luaXRpYWxfcHBz X3BpcGUoZGV2X3ByaXYsIHBvcnQsCisJCQkJCQkJICB2bHZfcGlwZV9oYXNfdmRkX29uKTsKKwkv KiBkaWRuJ3QgZmluZCBvbmU/IHBpY2sgb25lIHdpdGgganVzdCB0aGUgY29ycmVjdCBwb3J0ICov CisJaWYgKGludGVsX2RwLT5wcHNfcGlwZSA9PSBJTlZBTElEX1BJUEUpCisJCWludGVsX2RwLT5w cHNfcGlwZSA9IHZsdl9pbml0aWFsX3Bwc19waXBlKGRldl9wcml2LCBwb3J0LAorCQkJCQkJCSAg dmx2X3BpcGVfYW55KTsKKworCS8qIGRpZG4ndCBmaW5kIG9uZT8ganVzdCBsZXQgdmx2X3Bvd2Vy X3NlcXVlbmNlcl9waXBlKCkgcGljayBvbmUgd2hlbiBuZWVkZWQgKi8KKwlpZiAoaW50ZWxfZHAt PnBwc19waXBlID09IElOVkFMSURfUElQRSkgeworCQlkcm1fZGJnX2ttcygmZGV2X3ByaXYtPmRy bSwKKwkJCSAgICAibm8gaW5pdGlhbCBwb3dlciBzZXF1ZW5jZXIgZm9yIFtFTkNPREVSOiVkOiVz XVxuIiwKKwkJCSAgICBkaWdfcG9ydC0+YmFzZS5iYXNlLmJhc2UuaWQsCisJCQkgICAgZGlnX3Bv cnQtPmJhc2UuYmFzZS5uYW1lKTsKKwkJcmV0dXJuOworCX0KKworCWRybV9kYmdfa21zKCZkZXZf cHJpdi0+ZHJtLAorCQkgICAgImluaXRpYWwgcG93ZXIgc2VxdWVuY2VyIGZvciBbRU5DT0RFUjol ZDolc106IHBpcGUgJWNcbiIsCisJCSAgICBkaWdfcG9ydC0+YmFzZS5iYXNlLmJhc2UuaWQsCisJ CSAgICBkaWdfcG9ydC0+YmFzZS5iYXNlLm5hbWUsCisJCSAgICBwaXBlX25hbWUoaW50ZWxfZHAt PnBwc19waXBlKSk7CisKKwlpbnRlbF9kcF9pbml0X3BhbmVsX3Bvd2VyX3NlcXVlbmNlcihpbnRl bF9kcCk7CisJaW50ZWxfZHBfaW5pdF9wYW5lbF9wb3dlcl9zZXF1ZW5jZXJfcmVnaXN0ZXJzKGlu dGVsX2RwLCBmYWxzZSk7Cit9CisKK3ZvaWQgaW50ZWxfcG93ZXJfc2VxdWVuY2VyX3Jlc2V0KHN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKK3sKKwlzdHJ1Y3QgaW50ZWxfZW5jb2Rl ciAqZW5jb2RlcjsKKworCWlmIChkcm1fV0FSTl9PTigmZGV2X3ByaXYtPmRybSwKKwkJCSEoSVNf VkFMTEVZVklFVyhkZXZfcHJpdikgfHwKKwkJCSAgSVNfQ0hFUlJZVklFVyhkZXZfcHJpdikgfHwK KwkJCSAgSVNfR0VOOV9MUChkZXZfcHJpdikpKSkKKwkJcmV0dXJuOworCisJLyoKKwkgKiBXZSBj YW4ndCBncmFiIHBwc19tdXRleCBoZXJlIGR1ZSB0byBkZWFkbG9jayB3aXRoIHBvd2VyX2RvbWFp bgorCSAqIG11dGV4IHdoZW4gcG93ZXJfZG9tYWluIGZ1bmN0aW9ucyBhcmUgY2FsbGVkIHdoaWxl IGhvbGRpbmcgcHBzX211dGV4LgorCSAqIFRoYXQgYWxzbyBtZWFucyB0aGF0IGluIG9yZGVyIHRv IHVzZSBwcHNfcGlwZSB0aGUgY29kZSBuZWVkcyB0bworCSAqIGhvbGQgYm90aCBhIHBvd2VyIGRv bWFpbiByZWZlcmVuY2UgYW5kIHBwc19tdXRleCwgYW5kIHRoZSBwb3dlciBkb21haW4KKwkgKiBy ZWZlcmVuY2UgZ2V0L3B1dCBtdXN0IGJlIGRvbmUgd2hpbGUgX25vdF8gaG9sZGluZyBwcHNfbXV0 ZXguCisJICogcHBzX3tsb2NrLHVubG9ja30oKSBkbyB0aGVzZSBzdGVwcyBpbiB0aGUgY29ycmVj dCBvcmRlciwgc28gb25lCisJICogc2hvdWxkIHVzZSB0aGVtIGFsd2F5cy4KKwkgKi8KKworCWZv cl9lYWNoX2ludGVsX2RwKCZkZXZfcHJpdi0+ZHJtLCBlbmNvZGVyKSB7CisJCXN0cnVjdCBpbnRl bF9kcCAqaW50ZWxfZHAgPSBlbmNfdG9faW50ZWxfZHAoZW5jb2Rlcik7CisKKwkJZHJtX1dBUk5f T04oJmRldl9wcml2LT5kcm0sCisJCQkgICAgaW50ZWxfZHAtPmFjdGl2ZV9waXBlICE9IElOVkFM SURfUElQRSk7CisKKwkJaWYgKGVuY29kZXItPnR5cGUgIT0gSU5URUxfT1VUUFVUX0VEUCkKKwkJ CWNvbnRpbnVlOworCisJCWlmIChJU19HRU45X0xQKGRldl9wcml2KSkKKwkJCWludGVsX2RwLT5w cHNfcmVzZXQgPSB0cnVlOworCQllbHNlCisJCQlpbnRlbF9kcC0+cHBzX3BpcGUgPSBJTlZBTElE X1BJUEU7CisJfQorfQorCitzdHJ1Y3QgcHBzX3JlZ2lzdGVycyB7CisJaTkxNV9yZWdfdCBwcF9j dHJsOworCWk5MTVfcmVnX3QgcHBfc3RhdDsKKwlpOTE1X3JlZ190IHBwX29uOworCWk5MTVfcmVn X3QgcHBfb2ZmOworCWk5MTVfcmVnX3QgcHBfZGl2OworfTsKKworc3RhdGljIHZvaWQgaW50ZWxf cHBzX2dldF9yZWdpc3RlcnMoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCwKKwkJCQkgICAgc3Ry dWN0IHBwc19yZWdpc3RlcnMgKnJlZ3MpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRl dl9wcml2ID0gZHBfdG9faTkxNShpbnRlbF9kcCk7CisJaW50IHBwc19pZHggPSAwOworCisJbWVt c2V0KHJlZ3MsIDAsIHNpemVvZigqcmVncykpOworCisJaWYgKElTX0dFTjlfTFAoZGV2X3ByaXYp KQorCQlwcHNfaWR4ID0gYnh0X3Bvd2VyX3NlcXVlbmNlcl9pZHgoaW50ZWxfZHApOworCWVsc2Ug aWYgKElTX1ZBTExFWVZJRVcoZGV2X3ByaXYpIHx8IElTX0NIRVJSWVZJRVcoZGV2X3ByaXYpKQor CQlwcHNfaWR4ID0gdmx2X3Bvd2VyX3NlcXVlbmNlcl9waXBlKGludGVsX2RwKTsKKworCXJlZ3Mt PnBwX2N0cmwgPSBQUF9DT05UUk9MKHBwc19pZHgpOworCXJlZ3MtPnBwX3N0YXQgPSBQUF9TVEFU VVMocHBzX2lkeCk7CisJcmVncy0+cHBfb24gPSBQUF9PTl9ERUxBWVMocHBzX2lkeCk7CisJcmVn cy0+cHBfb2ZmID0gUFBfT0ZGX0RFTEFZUyhwcHNfaWR4KTsKKworCS8qIEN5Y2xlIGRlbGF5IG1v dmVkIGZyb20gUFBfRElWSVNPUiB0byBQUF9DT05UUk9MICovCisJaWYgKElTX0dFTjlfTFAoZGV2 X3ByaXYpIHx8IElOVEVMX1BDSF9UWVBFKGRldl9wcml2KSA+PSBQQ0hfQ05QKQorCQlyZWdzLT5w cF9kaXYgPSBJTlZBTElEX01NSU9fUkVHOworCWVsc2UKKwkJcmVncy0+cHBfZGl2ID0gUFBfRElW SVNPUihwcHNfaWR4KTsKK30KKworc3RhdGljIGk5MTVfcmVnX3QKK19wcF9jdHJsX3JlZyhzdHJ1 Y3QgaW50ZWxfZHAgKmludGVsX2RwKQoreworCXN0cnVjdCBwcHNfcmVnaXN0ZXJzIHJlZ3M7CisK KwlpbnRlbF9wcHNfZ2V0X3JlZ2lzdGVycyhpbnRlbF9kcCwgJnJlZ3MpOworCisJcmV0dXJuIHJl Z3MucHBfY3RybDsKK30KKworc3RhdGljIGk5MTVfcmVnX3QKK19wcF9zdGF0X3JlZyhzdHJ1Y3Qg aW50ZWxfZHAgKmludGVsX2RwKQoreworCXN0cnVjdCBwcHNfcmVnaXN0ZXJzIHJlZ3M7CisKKwlp bnRlbF9wcHNfZ2V0X3JlZ2lzdGVycyhpbnRlbF9kcCwgJnJlZ3MpOworCisJcmV0dXJuIHJlZ3Mu cHBfc3RhdDsKK30KKworc3RhdGljIGJvb2wgZWRwX2hhdmVfcGFuZWxfcG93ZXIoc3RydWN0IGlu dGVsX2RwICppbnRlbF9kcCkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYg PSBkcF90b19pOTE1KGludGVsX2RwKTsKKworCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmRldl9wcml2 LT5wcHNfbXV0ZXgpOworCisJaWYgKChJU19WQUxMRVlWSUVXKGRldl9wcml2KSB8fCBJU19DSEVS UllWSUVXKGRldl9wcml2KSkgJiYKKwkgICAgaW50ZWxfZHAtPnBwc19waXBlID09IElOVkFMSURf UElQRSkKKwkJcmV0dXJuIGZhbHNlOworCisJcmV0dXJuIChpbnRlbF9kZV9yZWFkKGRldl9wcml2 LCBfcHBfc3RhdF9yZWcoaW50ZWxfZHApKSAmIFBQX09OKSAhPSAwOworfQorCitzdGF0aWMgYm9v bCBlZHBfaGF2ZV9wYW5lbF92ZGQoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCkKK3sKKwlzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkcF90b19pOTE1KGludGVsX2RwKTsKKwor CWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmRldl9wcml2LT5wcHNfbXV0ZXgpOworCisJaWYgKChJU19W QUxMRVlWSUVXKGRldl9wcml2KSB8fCBJU19DSEVSUllWSUVXKGRldl9wcml2KSkgJiYKKwkgICAg aW50ZWxfZHAtPnBwc19waXBlID09IElOVkFMSURfUElQRSkKKwkJcmV0dXJuIGZhbHNlOworCisJ cmV0dXJuIGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIF9wcF9jdHJsX3JlZyhpbnRlbF9kcCkpICYg RURQX0ZPUkNFX1ZERDsKK30KKwordm9pZCBpbnRlbF9kcF9jaGVja19lZHAoc3RydWN0IGludGVs X2RwICppbnRlbF9kcCkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBk cF90b19pOTE1KGludGVsX2RwKTsKKworCWlmICghaW50ZWxfZHBfaXNfZWRwKGludGVsX2RwKSkK KwkJcmV0dXJuOworCisJaWYgKCFlZHBfaGF2ZV9wYW5lbF9wb3dlcihpbnRlbF9kcCkgJiYgIWVk cF9oYXZlX3BhbmVsX3ZkZChpbnRlbF9kcCkpIHsKKwkJZHJtX1dBUk4oJmRldl9wcml2LT5kcm0s IDEsCisJCQkgImVEUCBwb3dlcmVkIG9mZiB3aGlsZSBhdHRlbXB0aW5nIGF1eCBjaGFubmVsIGNv bW11bmljYXRpb24uXG4iKTsKKwkJZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sICJTdGF0dXMg MHglMDh4IENvbnRyb2wgMHglMDh4XG4iLAorCQkJICAgIGludGVsX2RlX3JlYWQoZGV2X3ByaXYs IF9wcF9zdGF0X3JlZyhpbnRlbF9kcCkpLAorCQkJICAgIGludGVsX2RlX3JlYWQoZGV2X3ByaXYs IF9wcF9jdHJsX3JlZyhpbnRlbF9kcCkpKTsKKwl9Cit9CisKKyNkZWZpbmUgSURMRV9PTl9NQVNL CQkoUFBfT04gfCBQUF9TRVFVRU5DRV9NQVNLIHwgMCAgICAgICAgICAgICAgICAgICAgIHwgUFBf U0VRVUVOQ0VfU1RBVEVfTUFTSykKKyNkZWZpbmUgSURMRV9PTl9WQUxVRSAgIAkoUFBfT04gfCBQ UF9TRVFVRU5DRV9OT05FIHwgMCAgICAgICAgICAgICAgICAgICAgIHwgUFBfU0VRVUVOQ0VfU1RB VEVfT05fSURMRSkKKworI2RlZmluZSBJRExFX09GRl9NQVNLCQkoUFBfT04gfCBQUF9TRVFVRU5D RV9NQVNLIHwgMCAgICAgICAgICAgICAgICAgICAgIHwgMCkKKyNkZWZpbmUgSURMRV9PRkZfVkFM VUUJCSgwICAgICB8IFBQX1NFUVVFTkNFX05PTkUgfCAwICAgICAgICAgICAgICAgICAgICAgfCAw KQorCisjZGVmaW5lIElETEVfQ1lDTEVfTUFTSwkJKFBQX09OIHwgUFBfU0VRVUVOQ0VfTUFTSyB8 IFBQX0NZQ0xFX0RFTEFZX0FDVElWRSB8IFBQX1NFUVVFTkNFX1NUQVRFX01BU0spCisjZGVmaW5l IElETEVfQ1lDTEVfVkFMVUUJKDAgICAgIHwgUFBfU0VRVUVOQ0VfTk9ORSB8IDAgICAgICAgICAg ICAgICAgICAgICB8IFBQX1NFUVVFTkNFX1NUQVRFX09GRl9JRExFKQorCitzdGF0aWMgdm9pZCBp bnRlbF9wcHNfdmVyaWZ5X3N0YXRlKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApOworCitzdGF0 aWMgdm9pZCB3YWl0X3BhbmVsX3N0YXR1cyhzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwLAorCQkJ CSAgICAgICB1MzIgbWFzaywKKwkJCQkgICAgICAgdTMyIHZhbHVlKQoreworCXN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRwX3RvX2k5MTUoaW50ZWxfZHApOworCWk5MTVfcmVn X3QgcHBfc3RhdF9yZWcsIHBwX2N0cmxfcmVnOworCisJbG9ja2RlcF9hc3NlcnRfaGVsZCgmZGV2 X3ByaXYtPnBwc19tdXRleCk7CisKKwlpbnRlbF9wcHNfdmVyaWZ5X3N0YXRlKGludGVsX2RwKTsK KworCXBwX3N0YXRfcmVnID0gX3BwX3N0YXRfcmVnKGludGVsX2RwKTsKKwlwcF9jdHJsX3JlZyA9 IF9wcF9jdHJsX3JlZyhpbnRlbF9kcCk7CisKKwlkcm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwK KwkJICAgICJtYXNrICUwOHggdmFsdWUgJTA4eCBzdGF0dXMgJTA4eCBjb250cm9sICUwOHhcbiIs CisJCSAgICBtYXNrLCB2YWx1ZSwKKwkJICAgIGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIHBwX3N0 YXRfcmVnKSwKKwkJICAgIGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIHBwX2N0cmxfcmVnKSk7CisK KwlpZiAoaW50ZWxfZGVfd2FpdF9mb3JfcmVnaXN0ZXIoZGV2X3ByaXYsIHBwX3N0YXRfcmVnLAor CQkJCSAgICAgICBtYXNrLCB2YWx1ZSwgNTAwMCkpCisJCWRybV9lcnIoJmRldl9wcml2LT5kcm0s CisJCQkiUGFuZWwgc3RhdHVzIHRpbWVvdXQ6IHN0YXR1cyAlMDh4IGNvbnRyb2wgJTA4eFxuIiwK KwkJCWludGVsX2RlX3JlYWQoZGV2X3ByaXYsIHBwX3N0YXRfcmVnKSwKKwkJCWludGVsX2RlX3Jl YWQoZGV2X3ByaXYsIHBwX2N0cmxfcmVnKSk7CisKKwlkcm1fZGJnX2ttcygmZGV2X3ByaXYtPmRy bSwgIldhaXQgY29tcGxldGVcbiIpOworfQorCitzdGF0aWMgdm9pZCB3YWl0X3BhbmVsX29uKHN0 cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5 MTUgPSBkcF90b19pOTE1KGludGVsX2RwKTsKKworCWRybV9kYmdfa21zKCZpOTE1LT5kcm0sICJX YWl0IGZvciBwYW5lbCBwb3dlciBvblxuIik7CisJd2FpdF9wYW5lbF9zdGF0dXMoaW50ZWxfZHAs IElETEVfT05fTUFTSywgSURMRV9PTl9WQUxVRSk7Cit9CisKK3N0YXRpYyB2b2lkIHdhaXRfcGFu ZWxfb2ZmKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApCit7CisJc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmk5MTUgPSBkcF90b19pOTE1KGludGVsX2RwKTsKKworCWRybV9kYmdfa21zKCZpOTE1 LT5kcm0sICJXYWl0IGZvciBwYW5lbCBwb3dlciBvZmYgdGltZVxuIik7CisJd2FpdF9wYW5lbF9z dGF0dXMoaW50ZWxfZHAsIElETEVfT0ZGX01BU0ssIElETEVfT0ZGX1ZBTFVFKTsKK30KKwordm9p ZCB3YWl0X3BhbmVsX3Bvd2VyX2N5Y2xlKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApCit7CisJ c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSBkcF90b19pOTE1KGludGVsX2RwKTsKKwlr dGltZV90IHBhbmVsX3Bvd2VyX29uX3RpbWU7CisJczY0IHBhbmVsX3Bvd2VyX29mZl9kdXJhdGlv bjsKKworCWRybV9kYmdfa21zKCZpOTE1LT5kcm0sICJXYWl0IGZvciBwYW5lbCBwb3dlciBjeWNs ZVxuIik7CisKKwkvKiB0YWtlIHRoZSBkaWZmZXJlbmNlIG9mIGN1cnJyZW50IHRpbWUgYW5kIHBh bmVsIHBvd2VyIG9mZiB0aW1lCisJICogYW5kIHRoZW4gbWFrZSBwYW5lbCB3YWl0IGZvciB0MTFf dDEyIGlmIG5lZWRlZC4gKi8KKwlwYW5lbF9wb3dlcl9vbl90aW1lID0ga3RpbWVfZ2V0X2Jvb3R0 aW1lKCk7CisJcGFuZWxfcG93ZXJfb2ZmX2R1cmF0aW9uID0ga3RpbWVfbXNfZGVsdGEocGFuZWxf cG93ZXJfb25fdGltZSwgaW50ZWxfZHAtPnBhbmVsX3Bvd2VyX29mZl90aW1lKTsKKworCS8qIFdo ZW4gd2UgZGlzYWJsZSB0aGUgVkREIG92ZXJyaWRlIGJpdCBsYXN0IHdlIGhhdmUgdG8gZG8gdGhl IG1hbnVhbAorCSAqIHdhaXQuICovCisJaWYgKHBhbmVsX3Bvd2VyX29mZl9kdXJhdGlvbiA8IChz NjQpaW50ZWxfZHAtPnBhbmVsX3Bvd2VyX2N5Y2xlX2RlbGF5KQorCQl3YWl0X3JlbWFpbmluZ19t c19mcm9tX2ppZmZpZXMoamlmZmllcywKKwkJCQkgICAgICAgaW50ZWxfZHAtPnBhbmVsX3Bvd2Vy X2N5Y2xlX2RlbGF5IC0gcGFuZWxfcG93ZXJfb2ZmX2R1cmF0aW9uKTsKKworCXdhaXRfcGFuZWxf c3RhdHVzKGludGVsX2RwLCBJRExFX0NZQ0xFX01BU0ssIElETEVfQ1lDTEVfVkFMVUUpOworfQor CitzdGF0aWMgdm9pZCB3YWl0X2JhY2tsaWdodF9vbihzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2Rw KQoreworCXdhaXRfcmVtYWluaW5nX21zX2Zyb21famlmZmllcyhpbnRlbF9kcC0+bGFzdF9wb3dl cl9vbiwKKwkJCQkgICAgICAgaW50ZWxfZHAtPmJhY2tsaWdodF9vbl9kZWxheSk7Cit9CisKK3N0 YXRpYyB2b2lkIGVkcF93YWl0X2JhY2tsaWdodF9vZmYoc3RydWN0IGludGVsX2RwICppbnRlbF9k cCkKK3sKKwl3YWl0X3JlbWFpbmluZ19tc19mcm9tX2ppZmZpZXMoaW50ZWxfZHAtPmxhc3RfYmFj a2xpZ2h0X29mZiwKKwkJCQkgICAgICAgaW50ZWxfZHAtPmJhY2tsaWdodF9vZmZfZGVsYXkpOwor fQorCisvKiBSZWFkIHRoZSBjdXJyZW50IHBwX2NvbnRyb2wgdmFsdWUsIHVubG9ja2luZyB0aGUg cmVnaXN0ZXIgaWYgaXQKKyAqIGlzIGxvY2tlZAorICovCisKK3N0YXRpYyAgdTMyIGlsa19nZXRf cHBfY29udHJvbChzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKQoreworCXN0cnVjdCBkcm1faTkx NV9wcml2YXRlICpkZXZfcHJpdiA9IGRwX3RvX2k5MTUoaW50ZWxfZHApOworCXUzMiBjb250cm9s OworCisJbG9ja2RlcF9hc3NlcnRfaGVsZCgmZGV2X3ByaXYtPnBwc19tdXRleCk7CisKKwljb250 cm9sID0gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgX3BwX2N0cmxfcmVnKGludGVsX2RwKSk7CisJ aWYgKGRybV9XQVJOX09OKCZkZXZfcHJpdi0+ZHJtLCAhSEFTX0RESShkZXZfcHJpdikgJiYKKwkJ CShjb250cm9sICYgUEFORUxfVU5MT0NLX01BU0spICE9IFBBTkVMX1VOTE9DS19SRUdTKSkgewor CQljb250cm9sICY9IH5QQU5FTF9VTkxPQ0tfTUFTSzsKKwkJY29udHJvbCB8PSBQQU5FTF9VTkxP Q0tfUkVHUzsKKwl9CisJcmV0dXJuIGNvbnRyb2w7Cit9CisKKy8qCisgKiBNdXN0IGJlIHBhaXJl ZCB3aXRoIGVkcF9wYW5lbF92ZGRfb2ZmKCkuCisgKiBNdXN0IGhvbGQgcHBzX211dGV4IGFyb3Vu ZCB0aGUgd2hvbGUgb24vb2ZmIHNlcXVlbmNlLgorICogQ2FuIGJlIG5lc3RlZCB3aXRoIGludGVs X2VkcF9wYW5lbF92ZGRfe29uLG9mZn0oKSBjYWxscy4KKyAqLworYm9vbCBlZHBfcGFuZWxfdmRk X29uKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2ID0gZHBfdG9faTkxNShpbnRlbF9kcCk7CisJc3RydWN0IGludGVsX2RpZ2l0 YWxfcG9ydCAqZGlnX3BvcnQgPSBkcF90b19kaWdfcG9ydChpbnRlbF9kcCk7CisJdTMyIHBwOwor CWk5MTVfcmVnX3QgcHBfc3RhdF9yZWcsIHBwX2N0cmxfcmVnOworCWJvb2wgbmVlZF90b19kaXNh YmxlID0gIWludGVsX2RwLT53YW50X3BhbmVsX3ZkZDsKKworCWxvY2tkZXBfYXNzZXJ0X2hlbGQo JmRldl9wcml2LT5wcHNfbXV0ZXgpOworCisJaWYgKCFpbnRlbF9kcF9pc19lZHAoaW50ZWxfZHAp KQorCQlyZXR1cm4gZmFsc2U7CisKKwljYW5jZWxfZGVsYXllZF93b3JrKCZpbnRlbF9kcC0+cGFu ZWxfdmRkX3dvcmspOworCWludGVsX2RwLT53YW50X3BhbmVsX3ZkZCA9IHRydWU7CisKKwlpZiAo ZWRwX2hhdmVfcGFuZWxfdmRkKGludGVsX2RwKSkKKwkJcmV0dXJuIG5lZWRfdG9fZGlzYWJsZTsK KworCWRybV9XQVJOX09OKCZkZXZfcHJpdi0+ZHJtLCBpbnRlbF9kcC0+dmRkX3dha2VyZWYpOwor CWludGVsX2RwLT52ZGRfd2FrZXJlZiA9IGludGVsX2Rpc3BsYXlfcG93ZXJfZ2V0KGRldl9wcml2 LAorCQkJCQkJCWludGVsX2F1eF9wb3dlcl9kb21haW4oZGlnX3BvcnQpKTsKKworCWRybV9kYmdf a21zKCZkZXZfcHJpdi0+ZHJtLCAiVHVybmluZyBbRU5DT0RFUjolZDolc10gVkREIG9uXG4iLAor CQkgICAgZGlnX3BvcnQtPmJhc2UuYmFzZS5iYXNlLmlkLAorCQkgICAgZGlnX3BvcnQtPmJhc2Uu YmFzZS5uYW1lKTsKKworCWlmICghZWRwX2hhdmVfcGFuZWxfcG93ZXIoaW50ZWxfZHApKQorCQl3 YWl0X3BhbmVsX3Bvd2VyX2N5Y2xlKGludGVsX2RwKTsKKworCXBwID0gaWxrX2dldF9wcF9jb250 cm9sKGludGVsX2RwKTsKKwlwcCB8PSBFRFBfRk9SQ0VfVkREOworCisJcHBfc3RhdF9yZWcgPSBf cHBfc3RhdF9yZWcoaW50ZWxfZHApOworCXBwX2N0cmxfcmVnID0gX3BwX2N0cmxfcmVnKGludGVs X2RwKTsKKworCWludGVsX2RlX3dyaXRlKGRldl9wcml2LCBwcF9jdHJsX3JlZywgcHApOworCWlu dGVsX2RlX3Bvc3RpbmdfcmVhZChkZXZfcHJpdiwgcHBfY3RybF9yZWcpOworCWRybV9kYmdfa21z KCZkZXZfcHJpdi0+ZHJtLCAiUFBfU1RBVFVTOiAweCUwOHggUFBfQ09OVFJPTDogMHglMDh4XG4i LAorCQkgICAgaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgcHBfc3RhdF9yZWcpLAorCQkgICAgaW50 ZWxfZGVfcmVhZChkZXZfcHJpdiwgcHBfY3RybF9yZWcpKTsKKwkvKgorCSAqIElmIHRoZSBwYW5l bCB3YXNuJ3Qgb24sIGRlbGF5IGJlZm9yZSBhY2Nlc3NpbmcgYXV4IGNoYW5uZWwKKwkgKi8KKwlp ZiAoIWVkcF9oYXZlX3BhbmVsX3Bvd2VyKGludGVsX2RwKSkgeworCQlkcm1fZGJnX2ttcygmZGV2 X3ByaXYtPmRybSwKKwkJCSAgICAiW0VOQ09ERVI6JWQ6JXNdIHBhbmVsIHBvd2VyIHdhc24ndCBl bmFibGVkXG4iLAorCQkJICAgIGRpZ19wb3J0LT5iYXNlLmJhc2UuYmFzZS5pZCwKKwkJCSAgICBk aWdfcG9ydC0+YmFzZS5iYXNlLm5hbWUpOworCQltc2xlZXAoaW50ZWxfZHAtPnBhbmVsX3Bvd2Vy X3VwX2RlbGF5KTsKKwl9CisKKwlyZXR1cm4gbmVlZF90b19kaXNhYmxlOworfQorCisvKgorICog TXVzdCBiZSBwYWlyZWQgd2l0aCBpbnRlbF9lZHBfcGFuZWxfdmRkX29mZigpIG9yCisgKiBpbnRl bF9lZHBfcGFuZWxfb2ZmKCkuCisgKiBOZXN0ZWQgY2FsbHMgdG8gdGhlc2UgZnVuY3Rpb25zIGFy ZSBub3QgYWxsb3dlZCBzaW5jZQorICogd2UgZHJvcCB0aGUgbG9jay4gQ2FsbGVyIG11c3QgdXNl IHNvbWUgaGlnaGVyIGxldmVsCisgKiBsb2NraW5nIHRvIHByZXZlbnQgbmVzdGVkIGNhbGxzIGZy b20gb3RoZXIgdGhyZWFkcy4KKyAqLwordm9pZCBpbnRlbF9lZHBfcGFuZWxfdmRkX29uKHN0cnVj dCBpbnRlbF9kcCAqaW50ZWxfZHApCit7CisJaW50ZWxfd2FrZXJlZl90IHdha2VyZWY7CisJYm9v bCB2ZGQ7CisKKwlpZiAoIWludGVsX2RwX2lzX2VkcChpbnRlbF9kcCkpCisJCXJldHVybjsKKwor CXZkZCA9IGZhbHNlOworCXdpdGhfcHBzX2xvY2soaW50ZWxfZHAsIHdha2VyZWYpCisJCXZkZCA9 IGVkcF9wYW5lbF92ZGRfb24oaW50ZWxfZHApOworCUk5MTVfU1RBVEVfV0FSTighdmRkLCAiW0VO Q09ERVI6JWQ6JXNdIFZERCBhbHJlYWR5IHJlcXVlc3RlZCBvblxuIiwKKwkJCWRwX3RvX2RpZ19w b3J0KGludGVsX2RwKS0+YmFzZS5iYXNlLmJhc2UuaWQsCisJCQlkcF90b19kaWdfcG9ydChpbnRl bF9kcCktPmJhc2UuYmFzZS5uYW1lKTsKK30KKwordm9pZCBlZHBfcGFuZWxfdmRkX29mZl9zeW5j KHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg KmRldl9wcml2ID0gZHBfdG9faTkxNShpbnRlbF9kcCk7CisJc3RydWN0IGludGVsX2RpZ2l0YWxf cG9ydCAqZGlnX3BvcnQgPQorCQlkcF90b19kaWdfcG9ydChpbnRlbF9kcCk7CisJdTMyIHBwOwor CWk5MTVfcmVnX3QgcHBfc3RhdF9yZWcsIHBwX2N0cmxfcmVnOworCisJbG9ja2RlcF9hc3NlcnRf aGVsZCgmZGV2X3ByaXYtPnBwc19tdXRleCk7CisKKwlkcm1fV0FSTl9PTigmZGV2X3ByaXYtPmRy bSwgaW50ZWxfZHAtPndhbnRfcGFuZWxfdmRkKTsKKworCWlmICghZWRwX2hhdmVfcGFuZWxfdmRk KGludGVsX2RwKSkKKwkJcmV0dXJuOworCisJZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sICJU dXJuaW5nIFtFTkNPREVSOiVkOiVzXSBWREQgb2ZmXG4iLAorCQkgICAgZGlnX3BvcnQtPmJhc2Uu YmFzZS5iYXNlLmlkLAorCQkgICAgZGlnX3BvcnQtPmJhc2UuYmFzZS5uYW1lKTsKKworCXBwID0g aWxrX2dldF9wcF9jb250cm9sKGludGVsX2RwKTsKKwlwcCAmPSB+RURQX0ZPUkNFX1ZERDsKKwor CXBwX2N0cmxfcmVnID0gX3BwX2N0cmxfcmVnKGludGVsX2RwKTsKKwlwcF9zdGF0X3JlZyA9IF9w cF9zdGF0X3JlZyhpbnRlbF9kcCk7CisKKwlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgcHBfY3Ry bF9yZWcsIHBwKTsKKwlpbnRlbF9kZV9wb3N0aW5nX3JlYWQoZGV2X3ByaXYsIHBwX2N0cmxfcmVn KTsKKworCS8qIE1ha2Ugc3VyZSBzZXF1ZW5jZXIgaXMgaWRsZSBiZWZvcmUgYWxsb3dpbmcgc3Vi c2VxdWVudCBhY3Rpdml0eSAqLworCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJtLCAiUFBfU1RB VFVTOiAweCUwOHggUFBfQ09OVFJPTDogMHglMDh4XG4iLAorCQkgICAgaW50ZWxfZGVfcmVhZChk ZXZfcHJpdiwgcHBfc3RhdF9yZWcpLAorCQkgICAgaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgcHBf Y3RybF9yZWcpKTsKKworCWlmICgocHAgJiBQQU5FTF9QT1dFUl9PTikgPT0gMCkKKwkJaW50ZWxf ZHAtPnBhbmVsX3Bvd2VyX29mZl90aW1lID0ga3RpbWVfZ2V0X2Jvb3R0aW1lKCk7CisKKwlpbnRl bF9kaXNwbGF5X3Bvd2VyX3B1dChkZXZfcHJpdiwKKwkJCQlpbnRlbF9hdXhfcG93ZXJfZG9tYWlu KGRpZ19wb3J0KSwKKwkJCQlmZXRjaF9hbmRfemVybygmaW50ZWxfZHAtPnZkZF93YWtlcmVmKSk7 Cit9CisKK3ZvaWQgZWRwX3BhbmVsX3ZkZF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqX193b3Jr KQoreworCXN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAgPQorCQljb250YWluZXJfb2YodG9fZGVs YXllZF93b3JrKF9fd29yayksCisJCQkgICAgIHN0cnVjdCBpbnRlbF9kcCwgcGFuZWxfdmRkX3dv cmspOworCWludGVsX3dha2VyZWZfdCB3YWtlcmVmOworCisJd2l0aF9wcHNfbG9jayhpbnRlbF9k cCwgd2FrZXJlZikgeworCQlpZiAoIWludGVsX2RwLT53YW50X3BhbmVsX3ZkZCkKKwkJCWVkcF9w YW5lbF92ZGRfb2ZmX3N5bmMoaW50ZWxfZHApOworCX0KK30KKworc3RhdGljIHZvaWQgZWRwX3Bh bmVsX3ZkZF9zY2hlZHVsZV9vZmYoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCkKK3sKKwl1bnNp Z25lZCBsb25nIGRlbGF5OworCisJLyoKKwkgKiBRdWV1ZSB0aGUgdGltZXIgdG8gZmlyZSBhIGxv bmcgdGltZSBmcm9tIG5vdyAocmVsYXRpdmUgdG8gdGhlIHBvd2VyCisJICogZG93biBkZWxheSkg dG8ga2VlcCB0aGUgcGFuZWwgcG93ZXIgdXAgYWNyb3NzIGEgc2VxdWVuY2Ugb2YKKwkgKiBvcGVy YXRpb25zLgorCSAqLworCWRlbGF5ID0gbXNlY3NfdG9famlmZmllcyhpbnRlbF9kcC0+cGFuZWxf cG93ZXJfY3ljbGVfZGVsYXkgKiA1KTsKKwlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmludGVsX2Rw LT5wYW5lbF92ZGRfd29yaywgZGVsYXkpOworfQorCisvKgorICogTXVzdCBiZSBwYWlyZWQgd2l0 aCBlZHBfcGFuZWxfdmRkX29uKCkuCisgKiBNdXN0IGhvbGQgcHBzX211dGV4IGFyb3VuZCB0aGUg d2hvbGUgb24vb2ZmIHNlcXVlbmNlLgorICogQ2FuIGJlIG5lc3RlZCB3aXRoIGludGVsX2VkcF9w YW5lbF92ZGRfe29uLG9mZn0oKSBjYWxscy4KKyAqLwordm9pZCBlZHBfcGFuZWxfdmRkX29mZihz dHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwLCBib29sIHN5bmMpCit7CisJc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2ID0gZHBfdG9faTkxNShpbnRlbF9kcCk7CisKKwlsb2NrZGVwX2Fz c2VydF9oZWxkKCZkZXZfcHJpdi0+cHBzX211dGV4KTsKKworCWlmICghaW50ZWxfZHBfaXNfZWRw KGludGVsX2RwKSkKKwkJcmV0dXJuOworCisJSTkxNV9TVEFURV9XQVJOKCFpbnRlbF9kcC0+d2Fu dF9wYW5lbF92ZGQsICJbRU5DT0RFUjolZDolc10gVkREIG5vdCBmb3JjZWQgb24iLAorCQkJZHBf dG9fZGlnX3BvcnQoaW50ZWxfZHApLT5iYXNlLmJhc2UuYmFzZS5pZCwKKwkJCWRwX3RvX2RpZ19w b3J0KGludGVsX2RwKS0+YmFzZS5iYXNlLm5hbWUpOworCisJaW50ZWxfZHAtPndhbnRfcGFuZWxf dmRkID0gZmFsc2U7CisKKwlpZiAoc3luYykKKwkJZWRwX3BhbmVsX3ZkZF9vZmZfc3luYyhpbnRl bF9kcCk7CisJZWxzZQorCQllZHBfcGFuZWxfdmRkX3NjaGVkdWxlX29mZihpbnRlbF9kcCk7Cit9 CisKK3ZvaWQgZWRwX3BhbmVsX29uKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApCit7CisJc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZHBfdG9faTkxNShpbnRlbF9kcCk7CisJ dTMyIHBwOworCWk5MTVfcmVnX3QgcHBfY3RybF9yZWc7CisKKwlsb2NrZGVwX2Fzc2VydF9oZWxk KCZkZXZfcHJpdi0+cHBzX211dGV4KTsKKworCWlmICghaW50ZWxfZHBfaXNfZWRwKGludGVsX2Rw KSkKKwkJcmV0dXJuOworCisJZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sICJUdXJuIFtFTkNP REVSOiVkOiVzXSBwYW5lbCBwb3dlciBvblxuIiwKKwkJICAgIGRwX3RvX2RpZ19wb3J0KGludGVs X2RwKS0+YmFzZS5iYXNlLmJhc2UuaWQsCisJCSAgICBkcF90b19kaWdfcG9ydChpbnRlbF9kcCkt PmJhc2UuYmFzZS5uYW1lKTsKKworCWlmIChkcm1fV0FSTigmZGV2X3ByaXYtPmRybSwgZWRwX2hh dmVfcGFuZWxfcG93ZXIoaW50ZWxfZHApLAorCQkgICAgICJbRU5DT0RFUjolZDolc10gcGFuZWwg cG93ZXIgYWxyZWFkeSBvblxuIiwKKwkJICAgICBkcF90b19kaWdfcG9ydChpbnRlbF9kcCktPmJh c2UuYmFzZS5iYXNlLmlkLAorCQkgICAgIGRwX3RvX2RpZ19wb3J0KGludGVsX2RwKS0+YmFzZS5i YXNlLm5hbWUpKQorCQlyZXR1cm47CisKKwl3YWl0X3BhbmVsX3Bvd2VyX2N5Y2xlKGludGVsX2Rw KTsKKworCXBwX2N0cmxfcmVnID0gX3BwX2N0cmxfcmVnKGludGVsX2RwKTsKKwlwcCA9IGlsa19n ZXRfcHBfY29udHJvbChpbnRlbF9kcCk7CisJaWYgKElTX0dFTihkZXZfcHJpdiwgNSkpIHsKKwkJ LyogSUxLIHdvcmthcm91bmQ6IGRpc2FibGUgcmVzZXQgYXJvdW5kIHBvd2VyIHNlcXVlbmNlICov CisJCXBwICY9IH5QQU5FTF9QT1dFUl9SRVNFVDsKKwkJaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYs IHBwX2N0cmxfcmVnLCBwcCk7CisJCWludGVsX2RlX3Bvc3RpbmdfcmVhZChkZXZfcHJpdiwgcHBf Y3RybF9yZWcpOworCX0KKworCXBwIHw9IFBBTkVMX1BPV0VSX09OOworCWlmICghSVNfR0VOKGRl dl9wcml2LCA1KSkKKwkJcHAgfD0gUEFORUxfUE9XRVJfUkVTRVQ7CisKKwlpbnRlbF9kZV93cml0 ZShkZXZfcHJpdiwgcHBfY3RybF9yZWcsIHBwKTsKKwlpbnRlbF9kZV9wb3N0aW5nX3JlYWQoZGV2 X3ByaXYsIHBwX2N0cmxfcmVnKTsKKworCXdhaXRfcGFuZWxfb24oaW50ZWxfZHApOworCWludGVs X2RwLT5sYXN0X3Bvd2VyX29uID0gamlmZmllczsKKworCWlmIChJU19HRU4oZGV2X3ByaXYsIDUp KSB7CisJCXBwIHw9IFBBTkVMX1BPV0VSX1JFU0VUOyAvKiByZXN0b3JlIHBhbmVsIHJlc2V0IGJp dCAqLworCQlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgcHBfY3RybF9yZWcsIHBwKTsKKwkJaW50 ZWxfZGVfcG9zdGluZ19yZWFkKGRldl9wcml2LCBwcF9jdHJsX3JlZyk7CisJfQorfQorCit2b2lk IGludGVsX2VkcF9wYW5lbF9vbihzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKQoreworCWludGVs X3dha2VyZWZfdCB3YWtlcmVmOworCisJaWYgKCFpbnRlbF9kcF9pc19lZHAoaW50ZWxfZHApKQor CQlyZXR1cm47CisKKwl3aXRoX3Bwc19sb2NrKGludGVsX2RwLCB3YWtlcmVmKQorCQllZHBfcGFu ZWxfb24oaW50ZWxfZHApOworfQorCit2b2lkIGVkcF9wYW5lbF9vZmYoc3RydWN0IGludGVsX2Rw ICppbnRlbF9kcCkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkcF90 b19pOTE1KGludGVsX2RwKTsKKwlzdHJ1Y3QgaW50ZWxfZGlnaXRhbF9wb3J0ICpkaWdfcG9ydCA9 IGRwX3RvX2RpZ19wb3J0KGludGVsX2RwKTsKKwl1MzIgcHA7CisJaTkxNV9yZWdfdCBwcF9jdHJs X3JlZzsKKworCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmRldl9wcml2LT5wcHNfbXV0ZXgpOworCisJ aWYgKCFpbnRlbF9kcF9pc19lZHAoaW50ZWxfZHApKQorCQlyZXR1cm47CisKKwlkcm1fZGJnX2tt cygmZGV2X3ByaXYtPmRybSwgIlR1cm4gW0VOQ09ERVI6JWQ6JXNdIHBhbmVsIHBvd2VyIG9mZlxu IiwKKwkJICAgIGRpZ19wb3J0LT5iYXNlLmJhc2UuYmFzZS5pZCwgZGlnX3BvcnQtPmJhc2UuYmFz ZS5uYW1lKTsKKworCWRybV9XQVJOKCZkZXZfcHJpdi0+ZHJtLCAhaW50ZWxfZHAtPndhbnRfcGFu ZWxfdmRkLAorCQkgIk5lZWQgW0VOQ09ERVI6JWQ6JXNdIFZERCB0byB0dXJuIG9mZiBwYW5lbFxu IiwKKwkJIGRpZ19wb3J0LT5iYXNlLmJhc2UuYmFzZS5pZCwgZGlnX3BvcnQtPmJhc2UuYmFzZS5u YW1lKTsKKworCXBwID0gaWxrX2dldF9wcF9jb250cm9sKGludGVsX2RwKTsKKwkvKiBXZSBuZWVk IHRvIHN3aXRjaCBvZmYgcGFuZWwgcG93ZXIgX2FuZF8gZm9yY2UgdmRkLCBmb3Igb3RoZXJ3aXNl IHNvbWUKKwkgKiBwYW5lbHMgZ2V0IHZlcnkgdW5oYXBweSBhbmQgY2Vhc2UgdG8gd29yay4gKi8K KwlwcCAmPSB+KFBBTkVMX1BPV0VSX09OIHwgUEFORUxfUE9XRVJfUkVTRVQgfCBFRFBfRk9SQ0Vf VkREIHwKKwkJRURQX0JMQ19FTkFCTEUpOworCisJcHBfY3RybF9yZWcgPSBfcHBfY3RybF9yZWco aW50ZWxfZHApOworCisJaW50ZWxfZHAtPndhbnRfcGFuZWxfdmRkID0gZmFsc2U7CisKKwlpbnRl bF9kZV93cml0ZShkZXZfcHJpdiwgcHBfY3RybF9yZWcsIHBwKTsKKwlpbnRlbF9kZV9wb3N0aW5n X3JlYWQoZGV2X3ByaXYsIHBwX2N0cmxfcmVnKTsKKworCXdhaXRfcGFuZWxfb2ZmKGludGVsX2Rw KTsKKwlpbnRlbF9kcC0+cGFuZWxfcG93ZXJfb2ZmX3RpbWUgPSBrdGltZV9nZXRfYm9vdHRpbWUo KTsKKworCS8qIFdlIGdvdCBhIHJlZmVyZW5jZSB3aGVuIHdlIGVuYWJsZWQgdGhlIFZERC4gKi8K KwlpbnRlbF9kaXNwbGF5X3Bvd2VyX3B1dChkZXZfcHJpdiwKKwkJCQlpbnRlbF9hdXhfcG93ZXJf ZG9tYWluKGRpZ19wb3J0KSwKKwkJCQlmZXRjaF9hbmRfemVybygmaW50ZWxfZHAtPnZkZF93YWtl cmVmKSk7Cit9CisKK3ZvaWQgaW50ZWxfZWRwX3BhbmVsX29mZihzdHJ1Y3QgaW50ZWxfZHAgKmlu dGVsX2RwKQoreworCWludGVsX3dha2VyZWZfdCB3YWtlcmVmOworCisJaWYgKCFpbnRlbF9kcF9p c19lZHAoaW50ZWxfZHApKQorCQlyZXR1cm47CisKKwl3aXRoX3Bwc19sb2NrKGludGVsX2RwLCB3 YWtlcmVmKQorCQllZHBfcGFuZWxfb2ZmKGludGVsX2RwKTsKK30KKworLyogRW5hYmxlIGJhY2ts aWdodCBpbiB0aGUgcGFuZWwgcG93ZXIgY29udHJvbC4gKi8KK3ZvaWQgX2ludGVsX2VkcF9iYWNr bGlnaHRfb24oc3RydWN0IGludGVsX2RwICppbnRlbF9kcCkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqZGV2X3ByaXYgPSBkcF90b19pOTE1KGludGVsX2RwKTsKKwlpbnRlbF93YWtlcmVm X3Qgd2FrZXJlZjsKKworCS8qCisJICogSWYgd2UgZW5hYmxlIHRoZSBiYWNrbGlnaHQgcmlnaHQg YXdheSBmb2xsb3dpbmcgYSBwYW5lbCBwb3dlcgorCSAqIG9uLCB3ZSBtYXkgc2VlIHNsaWdodCBm bGlja2VyIGFzIHRoZSBwYW5lbCBzeW5jcyB3aXRoIHRoZSBlRFAKKwkgKiBsaW5rLiAgU28gZGVs YXkgYSBiaXQgdG8gbWFrZSBzdXJlIHRoZSBpbWFnZSBpcyBzb2xpZCBiZWZvcmUKKwkgKiBhbGxv d2luZyBpdCB0byBhcHBlYXIuCisJICovCisJd2FpdF9iYWNrbGlnaHRfb24oaW50ZWxfZHApOwor CisJd2l0aF9wcHNfbG9jayhpbnRlbF9kcCwgd2FrZXJlZikgeworCQlpOTE1X3JlZ190IHBwX2N0 cmxfcmVnID0gX3BwX2N0cmxfcmVnKGludGVsX2RwKTsKKwkJdTMyIHBwOworCisJCXBwID0gaWxr X2dldF9wcF9jb250cm9sKGludGVsX2RwKTsKKwkJcHAgfD0gRURQX0JMQ19FTkFCTEU7CisKKwkJ aW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIHBwX2N0cmxfcmVnLCBwcCk7CisJCWludGVsX2RlX3Bv c3RpbmdfcmVhZChkZXZfcHJpdiwgcHBfY3RybF9yZWcpOworCX0KK30KKworLyogRGlzYWJsZSBi YWNrbGlnaHQgaW4gdGhlIHBhbmVsIHBvd2VyIGNvbnRyb2wuICovCit2b2lkIF9pbnRlbF9lZHBf YmFja2xpZ2h0X29mZihzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKQoreworCXN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRwX3RvX2k5MTUoaW50ZWxfZHApOworCWludGVsX3dh a2VyZWZfdCB3YWtlcmVmOworCisJaWYgKCFpbnRlbF9kcF9pc19lZHAoaW50ZWxfZHApKQorCQly ZXR1cm47CisKKwl3aXRoX3Bwc19sb2NrKGludGVsX2RwLCB3YWtlcmVmKSB7CisJCWk5MTVfcmVn X3QgcHBfY3RybF9yZWcgPSBfcHBfY3RybF9yZWcoaW50ZWxfZHApOworCQl1MzIgcHA7CisKKwkJ cHAgPSBpbGtfZ2V0X3BwX2NvbnRyb2woaW50ZWxfZHApOworCQlwcCAmPSB+RURQX0JMQ19FTkFC TEU7CisKKwkJaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIHBwX2N0cmxfcmVnLCBwcCk7CisJCWlu dGVsX2RlX3Bvc3RpbmdfcmVhZChkZXZfcHJpdiwgcHBfY3RybF9yZWcpOworCX0KKworCWludGVs X2RwLT5sYXN0X2JhY2tsaWdodF9vZmYgPSBqaWZmaWVzOworCWVkcF93YWl0X2JhY2tsaWdodF9v ZmYoaW50ZWxfZHApOworfQorCisvKgorICogSG9vayBmb3IgY29udHJvbGxpbmcgdGhlIHBhbmVs IHBvd2VyIGNvbnRyb2wgYmFja2xpZ2h0IHRocm91Z2ggdGhlIGJsX3Bvd2VyCisgKiBzeXNmcyBh dHRyaWJ1dGUuIFRha2UgY2FyZSB0byBoYW5kbGUgbXVsdGlwbGUgY2FsbHMuCisgKi8KK3ZvaWQg aW50ZWxfZWRwX2JhY2tsaWdodF9wb3dlcihzdHJ1Y3QgaW50ZWxfY29ubmVjdG9yICpjb25uZWN0 b3IsIGJvb2wgZW5hYmxlKQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0gdG9f aTkxNShjb25uZWN0b3ItPmJhc2UuZGV2KTsKKwlzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwID0g aW50ZWxfYXR0YWNoZWRfZHAoY29ubmVjdG9yKTsKKwlpbnRlbF93YWtlcmVmX3Qgd2FrZXJlZjsK Kwlib29sIGlzX2VuYWJsZWQ7CisKKwlpc19lbmFibGVkID0gZmFsc2U7CisJd2l0aF9wcHNfbG9j ayhpbnRlbF9kcCwgd2FrZXJlZikKKwkJaXNfZW5hYmxlZCA9IGlsa19nZXRfcHBfY29udHJvbChp bnRlbF9kcCkgJiBFRFBfQkxDX0VOQUJMRTsKKwlpZiAoaXNfZW5hYmxlZCA9PSBlbmFibGUpCisJ CXJldHVybjsKKworCWRybV9kYmdfa21zKCZpOTE1LT5kcm0sICJwYW5lbCBwb3dlciBjb250cm9s IGJhY2tsaWdodCAlc1xuIiwKKwkJICAgIGVuYWJsZSA/ICJlbmFibGUiIDogImRpc2FibGUiKTsK KworCWlmIChlbmFibGUpCisJCV9pbnRlbF9lZHBfYmFja2xpZ2h0X29uKGludGVsX2RwKTsKKwll bHNlCisJCV9pbnRlbF9lZHBfYmFja2xpZ2h0X29mZihpbnRlbF9kcCk7Cit9CisKK3N0YXRpYyB2 b2lkIHZsdl9kZXRhY2hfcG93ZXJfc2VxdWVuY2VyKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAp Cit7CisJc3RydWN0IGludGVsX2RpZ2l0YWxfcG9ydCAqZGlnX3BvcnQgPSBkcF90b19kaWdfcG9y dChpbnRlbF9kcCk7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkx NShkaWdfcG9ydC0+YmFzZS5iYXNlLmRldik7CisJZW51bSBwaXBlIHBpcGUgPSBpbnRlbF9kcC0+ cHBzX3BpcGU7CisJaTkxNV9yZWdfdCBwcF9vbl9yZWcgPSBQUF9PTl9ERUxBWVMocGlwZSk7CisK Kwlkcm1fV0FSTl9PTigmZGV2X3ByaXYtPmRybSwgaW50ZWxfZHAtPmFjdGl2ZV9waXBlICE9IElO VkFMSURfUElQRSk7CisKKwlpZiAoZHJtX1dBUk5fT04oJmRldl9wcml2LT5kcm0sIHBpcGUgIT0g UElQRV9BICYmIHBpcGUgIT0gUElQRV9CKSkKKwkJcmV0dXJuOworCisJZWRwX3BhbmVsX3ZkZF9v ZmZfc3luYyhpbnRlbF9kcCk7CisKKwkvKgorCSAqIFZMViBzZWVtcyB0byBnZXQgY29uZnVzZWQg d2hlbiBtdWx0aXBsZSBwb3dlciBzZXF1ZW5jZXJzCisJICogaGF2ZSB0aGUgc2FtZSBwb3J0IHNl bGVjdGVkIChldmVuIGlmIG9ubHkgb25lIGhhcyBwb3dlci92ZGQKKwkgKiBlbmFibGVkKS4gVGhl IGZhaWx1cmUgbWFuaWZlc3RzIGFzIHZsdl93YWl0X3BvcnRfcmVhZHkoKSBmYWlsaW5nCisJICog Q0hWIG9uIHRoZSBvdGhlciBoYW5kIGRvZXNuJ3Qgc2VlbSB0byBtaW5kIGhhdmluZyB0aGUgc2Ft ZSBwb3J0CisJICogc2VsZWN0ZWQgaW4gbXVsdGlwbGUgcG93ZXIgc2VxdWVuY2VycywgYnV0IGxl dCdzIGNsZWFyIHRoZQorCSAqIHBvcnQgc2VsZWN0IGFsd2F5cyB3aGVuIGxvZ2ljYWxseSBkaXNj b25uZWN0aW5nIGEgcG93ZXIgc2VxdWVuY2VyCisJICogZnJvbSBhIHBvcnQuCisJICovCisJZHJt X2RiZ19rbXMoJmRldl9wcml2LT5kcm0sCisJCSAgICAiZGV0YWNoaW5nIHBpcGUgJWMgcG93ZXIg c2VxdWVuY2VyIGZyb20gW0VOQ09ERVI6JWQ6JXNdXG4iLAorCQkgICAgcGlwZV9uYW1lKHBpcGUp LCBkaWdfcG9ydC0+YmFzZS5iYXNlLmJhc2UuaWQsCisJCSAgICBkaWdfcG9ydC0+YmFzZS5iYXNl Lm5hbWUpOworCWludGVsX2RlX3dyaXRlKGRldl9wcml2LCBwcF9vbl9yZWcsIDApOworCWludGVs X2RlX3Bvc3RpbmdfcmVhZChkZXZfcHJpdiwgcHBfb25fcmVnKTsKKworCWludGVsX2RwLT5wcHNf cGlwZSA9IElOVkFMSURfUElQRTsKK30KKworc3RhdGljIHZvaWQgdmx2X3N0ZWFsX3Bvd2VyX3Nl cXVlbmNlcihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCisJCQkJICAgICAgZW51 bSBwaXBlIHBpcGUpCit7CisJc3RydWN0IGludGVsX2VuY29kZXIgKmVuY29kZXI7CisKKwlsb2Nr ZGVwX2Fzc2VydF9oZWxkKCZkZXZfcHJpdi0+cHBzX211dGV4KTsKKworCWZvcl9lYWNoX2ludGVs X2RwKCZkZXZfcHJpdi0+ZHJtLCBlbmNvZGVyKSB7CisJCXN0cnVjdCBpbnRlbF9kcCAqaW50ZWxf ZHAgPSBlbmNfdG9faW50ZWxfZHAoZW5jb2Rlcik7CisKKwkJZHJtX1dBUk4oJmRldl9wcml2LT5k cm0sIGludGVsX2RwLT5hY3RpdmVfcGlwZSA9PSBwaXBlLAorCQkJICJzdGVhbGluZyBwaXBlICVj IHBvd2VyIHNlcXVlbmNlciBmcm9tIGFjdGl2ZSBbRU5DT0RFUjolZDolc11cbiIsCisJCQkgcGlw ZV9uYW1lKHBpcGUpLCBlbmNvZGVyLT5iYXNlLmJhc2UuaWQsCisJCQkgZW5jb2Rlci0+YmFzZS5u YW1lKTsKKworCQlpZiAoaW50ZWxfZHAtPnBwc19waXBlICE9IHBpcGUpCisJCQljb250aW51ZTsK KworCQlkcm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwKKwkJCSAgICAic3RlYWxpbmcgcGlwZSAl YyBwb3dlciBzZXF1ZW5jZXIgZnJvbSBbRU5DT0RFUjolZDolc11cbiIsCisJCQkgICAgcGlwZV9u YW1lKHBpcGUpLCBlbmNvZGVyLT5iYXNlLmJhc2UuaWQsCisJCQkgICAgZW5jb2Rlci0+YmFzZS5u YW1lKTsKKworCQkvKiBtYWtlIHN1cmUgdmRkIGlzIG9mZiBiZWZvcmUgd2Ugc3RlYWwgaXQgKi8K KwkJdmx2X2RldGFjaF9wb3dlcl9zZXF1ZW5jZXIoaW50ZWxfZHApOworCX0KK30KKwordm9pZCB2 bHZfaW5pdF9wYW5lbF9wb3dlcl9zZXF1ZW5jZXIoc3RydWN0IGludGVsX2VuY29kZXIgKmVuY29k ZXIsCisJCQkJICAgIGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlKQor eworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoZW5jb2Rlci0+ YmFzZS5kZXYpOworCXN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAgPSBlbmNfdG9faW50ZWxfZHAo ZW5jb2Rlcik7CisJc3RydWN0IGludGVsX2NydGMgKmNydGMgPSB0b19pbnRlbF9jcnRjKGNydGNf c3RhdGUtPnVhcGkuY3J0Yyk7CisKKwlsb2NrZGVwX2Fzc2VydF9oZWxkKCZkZXZfcHJpdi0+cHBz X211dGV4KTsKKworCWRybV9XQVJOX09OKCZkZXZfcHJpdi0+ZHJtLCBpbnRlbF9kcC0+YWN0aXZl X3BpcGUgIT0gSU5WQUxJRF9QSVBFKTsKKworCWlmIChpbnRlbF9kcC0+cHBzX3BpcGUgIT0gSU5W QUxJRF9QSVBFICYmCisJICAgIGludGVsX2RwLT5wcHNfcGlwZSAhPSBjcnRjLT5waXBlKSB7CisJ CS8qCisJCSAqIElmIGFub3RoZXIgcG93ZXIgc2VxdWVuY2VyIHdhcyBiZWluZyB1c2VkIG9uIHRo aXMKKwkJICogcG9ydCBwcmV2aW91c2x5IG1ha2Ugc3VyZSB0byB0dXJuIG9mZiB2ZGQgdGhlcmUg d2hpbGUKKwkJICogd2Ugc3RpbGwgaGF2ZSBjb250cm9sIG9mIGl0LgorCQkgKi8KKwkJdmx2X2Rl dGFjaF9wb3dlcl9zZXF1ZW5jZXIoaW50ZWxfZHApOworCX0KKworCS8qCisJICogV2UgbWF5IGJl IHN0ZWFsaW5nIHRoZSBwb3dlcgorCSAqIHNlcXVlbmNlciBmcm9tIGFub3RoZXIgcG9ydC4KKwkg Ki8KKwl2bHZfc3RlYWxfcG93ZXJfc2VxdWVuY2VyKGRldl9wcml2LCBjcnRjLT5waXBlKTsKKwor CWludGVsX2RwLT5hY3RpdmVfcGlwZSA9IGNydGMtPnBpcGU7CisKKwlpZiAoIWludGVsX2RwX2lz X2VkcChpbnRlbF9kcCkpCisJCXJldHVybjsKKworCS8qIG5vdyBpdCdzIGFsbCBvdXJzICovCisJ aW50ZWxfZHAtPnBwc19waXBlID0gY3J0Yy0+cGlwZTsKKworCWRybV9kYmdfa21zKCZkZXZfcHJp di0+ZHJtLAorCQkgICAgImluaXRpYWxpemluZyBwaXBlICVjIHBvd2VyIHNlcXVlbmNlciBmb3Ig W0VOQ09ERVI6JWQ6JXNdXG4iLAorCQkgICAgcGlwZV9uYW1lKGludGVsX2RwLT5wcHNfcGlwZSks IGVuY29kZXItPmJhc2UuYmFzZS5pZCwKKwkJICAgIGVuY29kZXItPmJhc2UubmFtZSk7CisKKwkv KiBpbml0IHBvd2VyIHNlcXVlbmNlciBvbiB0aGlzIHBpcGUgYW5kIHBvcnQgKi8KKwlpbnRlbF9k cF9pbml0X3BhbmVsX3Bvd2VyX3NlcXVlbmNlcihpbnRlbF9kcCk7CisJaW50ZWxfZHBfaW5pdF9w YW5lbF9wb3dlcl9zZXF1ZW5jZXJfcmVnaXN0ZXJzKGludGVsX2RwLCB0cnVlKTsKK30KKwordm9p ZCBpbnRlbF9lZHBfcGFuZWxfdmRkX3Nhbml0aXplKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAp Cit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZHBfdG9faTkxNShpbnRl bF9kcCk7CisJc3RydWN0IGludGVsX2RpZ2l0YWxfcG9ydCAqZGlnX3BvcnQgPSBkcF90b19kaWdf cG9ydChpbnRlbF9kcCk7CisKKwlsb2NrZGVwX2Fzc2VydF9oZWxkKCZkZXZfcHJpdi0+cHBzX211 dGV4KTsKKworCWlmICghZWRwX2hhdmVfcGFuZWxfdmRkKGludGVsX2RwKSkKKwkJcmV0dXJuOwor CisJLyoKKwkgKiBUaGUgVkREIGJpdCBuZWVkcyBhIHBvd2VyIGRvbWFpbiByZWZlcmVuY2UsIHNv IGlmIHRoZSBiaXQgaXMKKwkgKiBhbHJlYWR5IGVuYWJsZWQgd2hlbiB3ZSBib290IG9yIHJlc3Vt ZSwgZ3JhYiB0aGlzIHJlZmVyZW5jZSBhbmQKKwkgKiBzY2hlZHVsZSBhIHZkZCBvZmYsIHNvIHdl IGRvbid0IGhvbGQgb24gdG8gdGhlIHJlZmVyZW5jZQorCSAqIGluZGVmaW5pdGVseS4KKwkgKi8K Kwlkcm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwKKwkJICAgICJWREQgbGVmdCBvbiBieSBCSU9T LCBhZGp1c3Rpbmcgc3RhdGUgdHJhY2tpbmdcbiIpOworCWRybV9XQVJOX09OKCZkZXZfcHJpdi0+ ZHJtLCBpbnRlbF9kcC0+dmRkX3dha2VyZWYpOworCWludGVsX2RwLT52ZGRfd2FrZXJlZiA9IGlu dGVsX2Rpc3BsYXlfcG93ZXJfZ2V0KGRldl9wcml2LAorCQkJCQkJCWludGVsX2F1eF9wb3dlcl9k b21haW4oZGlnX3BvcnQpKTsKKworCWVkcF9wYW5lbF92ZGRfc2NoZWR1bGVfb2ZmKGludGVsX2Rw KTsKK30KKworYm9vbCBpbnRlbF9lZHBfaGF2ZV9wb3dlcihzdHJ1Y3QgaW50ZWxfZHAgKmludGVs X2RwKQoreworCWludGVsX3dha2VyZWZfdCB3YWtlcmVmOworCWJvb2wgaGF2ZV9wb3dlciA9IGZh bHNlOworCisJd2l0aF9wcHNfbG9jayhpbnRlbF9kcCwgd2FrZXJlZikgeworCQloYXZlX3Bvd2Vy ID0gZWRwX2hhdmVfcGFuZWxfcG93ZXIoaW50ZWxfZHApICYmCisJCQkJCQkgIGVkcF9oYXZlX3Bh bmVsX3ZkZChpbnRlbF9kcCk7CisJfQorCisJcmV0dXJuIGhhdmVfcG93ZXI7Cit9CisKK3ZvaWQg aW50ZWxfZHBfaW5pdF9wYW5lbF9wb3dlcl90aW1lc3RhbXBzKHN0cnVjdCBpbnRlbF9kcCAqaW50 ZWxfZHApCit7CisJaW50ZWxfZHAtPnBhbmVsX3Bvd2VyX29mZl90aW1lID0ga3RpbWVfZ2V0X2Jv b3R0aW1lKCk7CisJaW50ZWxfZHAtPmxhc3RfcG93ZXJfb24gPSBqaWZmaWVzOworCWludGVsX2Rw LT5sYXN0X2JhY2tsaWdodF9vZmYgPSBqaWZmaWVzOworfQorCitzdGF0aWMgdm9pZAoraW50ZWxf cHBzX3JlYWRvdXRfaHdfc3RhdGUoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCwgc3RydWN0IGVk cF9wb3dlcl9zZXEgKnNlcSkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYg PSBkcF90b19pOTE1KGludGVsX2RwKTsKKwl1MzIgcHBfb24sIHBwX29mZiwgcHBfY3RsOworCXN0 cnVjdCBwcHNfcmVnaXN0ZXJzIHJlZ3M7CisKKwlpbnRlbF9wcHNfZ2V0X3JlZ2lzdGVycyhpbnRl bF9kcCwgJnJlZ3MpOworCisJcHBfY3RsID0gaWxrX2dldF9wcF9jb250cm9sKGludGVsX2RwKTsK KworCS8qIEVuc3VyZSBQUFMgaXMgdW5sb2NrZWQgKi8KKwlpZiAoIUhBU19EREkoZGV2X3ByaXYp KQorCQlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgcmVncy5wcF9jdHJsLCBwcF9jdGwpOworCisJ cHBfb24gPSBpbnRlbF9kZV9yZWFkKGRldl9wcml2LCByZWdzLnBwX29uKTsKKwlwcF9vZmYgPSBp bnRlbF9kZV9yZWFkKGRldl9wcml2LCByZWdzLnBwX29mZik7CisKKwkvKiBQdWxsIHRpbWluZyB2 YWx1ZXMgb3V0IG9mIHJlZ2lzdGVycyAqLworCXNlcS0+dDFfdDMgPSBSRUdfRklFTERfR0VUKFBB TkVMX1BPV0VSX1VQX0RFTEFZX01BU0ssIHBwX29uKTsKKwlzZXEtPnQ4ID0gUkVHX0ZJRUxEX0dF VChQQU5FTF9MSUdIVF9PTl9ERUxBWV9NQVNLLCBwcF9vbik7CisJc2VxLT50OSA9IFJFR19GSUVM RF9HRVQoUEFORUxfTElHSFRfT0ZGX0RFTEFZX01BU0ssIHBwX29mZik7CisJc2VxLT50MTAgPSBS RUdfRklFTERfR0VUKFBBTkVMX1BPV0VSX0RPV05fREVMQVlfTUFTSywgcHBfb2ZmKTsKKworCWlm IChpOTE1X21taW9fcmVnX3ZhbGlkKHJlZ3MucHBfZGl2KSkgeworCQl1MzIgcHBfZGl2OworCisJ CXBwX2RpdiA9IGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIHJlZ3MucHBfZGl2KTsKKworCQlzZXEt PnQxMV90MTIgPSBSRUdfRklFTERfR0VUKFBBTkVMX1BPV0VSX0NZQ0xFX0RFTEFZX01BU0ssIHBw X2RpdikgKiAxMDAwOworCX0gZWxzZSB7CisJCXNlcS0+dDExX3QxMiA9IFJFR19GSUVMRF9HRVQo QlhUX1BPV0VSX0NZQ0xFX0RFTEFZX01BU0ssIHBwX2N0bCkgKiAxMDAwOworCX0KK30KKworc3Rh dGljIHZvaWQKK2ludGVsX3Bwc19kdW1wX3N0YXRlKGNvbnN0IGNoYXIgKnN0YXRlX25hbWUsIGNv bnN0IHN0cnVjdCBlZHBfcG93ZXJfc2VxICpzZXEpCit7CisJRFJNX0RFQlVHX0tNUygiJXMgdDFf dDMgJWQgdDggJWQgdDkgJWQgdDEwICVkIHQxMV90MTIgJWRcbiIsCisJCSAgICAgIHN0YXRlX25h bWUsCisJCSAgICAgIHNlcS0+dDFfdDMsIHNlcS0+dDgsIHNlcS0+dDksIHNlcS0+dDEwLCBzZXEt PnQxMV90MTIpOworfQorCitzdGF0aWMgdm9pZAoraW50ZWxfcHBzX3ZlcmlmeV9zdGF0ZShzdHJ1 Y3QgaW50ZWxfZHAgKmludGVsX2RwKQoreworCXN0cnVjdCBlZHBfcG93ZXJfc2VxIGh3OworCXN0 cnVjdCBlZHBfcG93ZXJfc2VxICpzdyA9ICZpbnRlbF9kcC0+cHBzX2RlbGF5czsKKworCWludGVs X3Bwc19yZWFkb3V0X2h3X3N0YXRlKGludGVsX2RwLCAmaHcpOworCisJaWYgKGh3LnQxX3QzICE9 IHN3LT50MV90MyB8fCBody50OCAhPSBzdy0+dDggfHwgaHcudDkgIT0gc3ctPnQ5IHx8CisJICAg IGh3LnQxMCAhPSBzdy0+dDEwIHx8IGh3LnQxMV90MTIgIT0gc3ctPnQxMV90MTIpIHsKKwkJRFJN X0VSUk9SKCJQUFMgc3RhdGUgbWlzbWF0Y2hcbiIpOworCQlpbnRlbF9wcHNfZHVtcF9zdGF0ZSgi c3ciLCBzdyk7CisJCWludGVsX3Bwc19kdW1wX3N0YXRlKCJodyIsICZodyk7CisJfQorfQorCitz dGF0aWMgdm9pZAoraW50ZWxfZHBfaW5pdF9wYW5lbF9wb3dlcl9zZXF1ZW5jZXIoc3RydWN0IGlu dGVsX2RwICppbnRlbF9kcCkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYg PSBkcF90b19pOTE1KGludGVsX2RwKTsKKwlzdHJ1Y3QgZWRwX3Bvd2VyX3NlcSBjdXIsIHZidCwg c3BlYywKKwkJKmZpbmFsID0gJmludGVsX2RwLT5wcHNfZGVsYXlzOworCisJbG9ja2RlcF9hc3Nl cnRfaGVsZCgmZGV2X3ByaXYtPnBwc19tdXRleCk7CisKKwkvKiBhbHJlYWR5IGluaXRpYWxpemVk PyAqLworCWlmIChmaW5hbC0+dDExX3QxMiAhPSAwKQorCQlyZXR1cm47CisKKwlpbnRlbF9wcHNf cmVhZG91dF9od19zdGF0ZShpbnRlbF9kcCwgJmN1cik7CisKKwlpbnRlbF9wcHNfZHVtcF9zdGF0 ZSgiY3VyIiwgJmN1cik7CisKKwl2YnQgPSBkZXZfcHJpdi0+dmJ0LmVkcC5wcHM7CisJLyogT24g VG9zaGliYSBTYXRlbGxpdGUgUDUwLUMtMThDIHN5c3RlbSB0aGUgVkJUIFQxMiBkZWxheQorCSAq IG9mIDUwMG1zIGFwcGVhcnMgdG8gYmUgdG9vIHNob3J0LiBPY2Fzc2lvbmFsbHkgdGhlIHBhbmVs CisJICoganVzdCBmYWlscyB0byBwb3dlciBiYWNrIG9uLiBJbmNyZWFzaW5nIHRoZSBkZWxheSB0 byA4MDBtcworCSAqIHNlZW1zIHN1ZmZpY2llbnQgdG8gYXZvaWQgdGhpcyBwcm9ibGVtLgorCSAq LworCWlmIChkZXZfcHJpdi0+cXVpcmtzICYgUVVJUktfSU5DUkVBU0VfVDEyX0RFTEFZKSB7CisJ CXZidC50MTFfdDEyID0gbWF4X3QodTE2LCB2YnQudDExX3QxMiwgMTMwMCAqIDEwKTsKKwkJZHJt X2RiZ19rbXMoJmRldl9wcml2LT5kcm0sCisJCQkgICAgIkluY3JlYXNpbmcgVDEyIHBhbmVsIGRl bGF5IGFzIHBlciB0aGUgcXVpcmsgdG8gJWRcbiIsCisJCQkgICAgdmJ0LnQxMV90MTIpOworCX0K KwkvKiBUMTFfVDEyIGRlbGF5IGlzIHNwZWNpYWwgYW5kIGFjdHVhbGx5IGluIHVuaXRzIG9mIDEw MG1zLCBidXQgemVybworCSAqIGJhc2VkIGluIHRoZSBodyAoc28gd2UgbmVlZCB0byBhZGQgMTAw IG1zKS4gQnV0IHRoZSBzdyB2YnQKKwkgKiB0YWJsZSBtdWx0aXBsaWVzIGl0IHdpdGggMTAwMCB0 byBtYWtlIGl0IGluIHVuaXRzIG9mIDEwMHVzZWMsCisJICogdG9vLiAqLworCXZidC50MTFfdDEy ICs9IDEwMCAqIDEwOworCisJLyogVXBwZXIgbGltaXRzIGZyb20gZURQIDEuMyBzcGVjLiBOb3Rl IHRoYXQgd2UgdXNlIHRoZSBjbHVua3kgdW5pdHMgb2YKKwkgKiBvdXIgaHcgaGVyZSwgd2hpY2gg YXJlIGFsbCBpbiAxMDB1c2VjLiAqLworCXNwZWMudDFfdDMgPSAyMTAgKiAxMDsKKwlzcGVjLnQ4 ID0gNTAgKiAxMDsgLyogbm8gbGltaXQgZm9yIHQ4LCB1c2UgdDcgaW5zdGVhZCAqLworCXNwZWMu dDkgPSA1MCAqIDEwOyAvKiBubyBsaW1pdCBmb3IgdDksIG1ha2UgaXQgc3ltbWV0cmljIHdpdGgg dDggKi8KKwlzcGVjLnQxMCA9IDUwMCAqIDEwOworCS8qIFRoaXMgb25lIGlzIHNwZWNpYWwgYW5k IGFjdHVhbGx5IGluIHVuaXRzIG9mIDEwMG1zLCBidXQgemVybworCSAqIGJhc2VkIGluIHRoZSBo dyAoc28gd2UgbmVlZCB0byBhZGQgMTAwIG1zKS4gQnV0IHRoZSBzdyB2YnQKKwkgKiB0YWJsZSBt dWx0aXBsaWVzIGl0IHdpdGggMTAwMCB0byBtYWtlIGl0IGluIHVuaXRzIG9mIDEwMHVzZWMsCisJ ICogdG9vLiAqLworCXNwZWMudDExX3QxMiA9ICg1MTAgKyAxMDApICogMTA7CisKKwlpbnRlbF9w cHNfZHVtcF9zdGF0ZSgidmJ0IiwgJnZidCk7CisKKwkvKiBVc2UgdGhlIG1heCBvZiB0aGUgcmVn aXN0ZXIgc2V0dGluZ3MgYW5kIHZidC4gSWYgYm90aCBhcmUKKwkgKiB1bnNldCwgZmFsbCBiYWNr IHRvIHRoZSBzcGVjIGxpbWl0cy4gKi8KKyNkZWZpbmUgYXNzaWduX2ZpbmFsKGZpZWxkKQlmaW5h bC0+ZmllbGQgPSAobWF4KGN1ci5maWVsZCwgdmJ0LmZpZWxkKSA9PSAwID8gXAorCQkJCSAgICAg ICBzcGVjLmZpZWxkIDogXAorCQkJCSAgICAgICBtYXgoY3VyLmZpZWxkLCB2YnQuZmllbGQpKQor CWFzc2lnbl9maW5hbCh0MV90Myk7CisJYXNzaWduX2ZpbmFsKHQ4KTsKKwlhc3NpZ25fZmluYWwo dDkpOworCWFzc2lnbl9maW5hbCh0MTApOworCWFzc2lnbl9maW5hbCh0MTFfdDEyKTsKKyN1bmRl ZiBhc3NpZ25fZmluYWwKKworI2RlZmluZSBnZXRfZGVsYXkoZmllbGQpCShESVZfUk9VTkRfVVAo ZmluYWwtPmZpZWxkLCAxMCkpCisJaW50ZWxfZHAtPnBhbmVsX3Bvd2VyX3VwX2RlbGF5ID0gZ2V0 X2RlbGF5KHQxX3QzKTsKKwlpbnRlbF9kcC0+YmFja2xpZ2h0X29uX2RlbGF5ID0gZ2V0X2RlbGF5 KHQ4KTsKKwlpbnRlbF9kcC0+YmFja2xpZ2h0X29mZl9kZWxheSA9IGdldF9kZWxheSh0OSk7CisJ aW50ZWxfZHAtPnBhbmVsX3Bvd2VyX2Rvd25fZGVsYXkgPSBnZXRfZGVsYXkodDEwKTsKKwlpbnRl bF9kcC0+cGFuZWxfcG93ZXJfY3ljbGVfZGVsYXkgPSBnZXRfZGVsYXkodDExX3QxMik7CisjdW5k ZWYgZ2V0X2RlbGF5CisKKwlkcm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwKKwkJICAgICJwYW5l bCBwb3dlciB1cCBkZWxheSAlZCwgcG93ZXIgZG93biBkZWxheSAlZCwgcG93ZXIgY3ljbGUgZGVs YXkgJWRcbiIsCisJCSAgICBpbnRlbF9kcC0+cGFuZWxfcG93ZXJfdXBfZGVsYXksCisJCSAgICBp bnRlbF9kcC0+cGFuZWxfcG93ZXJfZG93bl9kZWxheSwKKwkJICAgIGludGVsX2RwLT5wYW5lbF9w b3dlcl9jeWNsZV9kZWxheSk7CisKKwlkcm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwgImJhY2ts aWdodCBvbiBkZWxheSAlZCwgb2ZmIGRlbGF5ICVkXG4iLAorCQkgICAgaW50ZWxfZHAtPmJhY2ts aWdodF9vbl9kZWxheSwKKwkJICAgIGludGVsX2RwLT5iYWNrbGlnaHRfb2ZmX2RlbGF5KTsKKwor CS8qCisJICogV2Ugb3ZlcnJpZGUgdGhlIEhXIGJhY2tsaWdodCBkZWxheXMgdG8gMSBiZWNhdXNl IHdlIGRvIG1hbnVhbCB3YWl0cworCSAqIG9uIHRoZW0uIEZvciBUOCwgZXZlbiBCU3BlYyByZWNv bW1lbmRzIGRvaW5nIGl0LiBGb3IgVDksIGlmIHdlCisJICogZG9uJ3QgZG8gdGhpcywgd2UnbGwg ZW5kIHVwIHdhaXRpbmcgZm9yIHRoZSBiYWNrbGlnaHQgb2ZmIGRlbGF5CisJICogdHdpY2U6IG9u Y2Ugd2hlbiB3ZSBkbyB0aGUgbWFudWFsIHNsZWVwLCBhbmQgb25jZSB3aGVuIHdlIGRpc2FibGUK KwkgKiB0aGUgcGFuZWwgYW5kIHdhaXQgZm9yIHRoZSBQUF9TVEFUVVMgYml0IHRvIGJlY29tZSB6 ZXJvLgorCSAqLworCWZpbmFsLT50OCA9IDE7CisJZmluYWwtPnQ5ID0gMTsKKworCS8qCisJICog SFcgaGFzIG9ubHkgYSAxMDBtc2VjIGdyYW51bGFyaXR5IGZvciB0MTFfdDEyIHNvIHJvdW5kIGl0 IHVwCisJICogYWNjb3JkaW5nbHkuCisJICovCisJZmluYWwtPnQxMV90MTIgPSByb3VuZHVwKGZp bmFsLT50MTFfdDEyLCAxMDAgKiAxMCk7Cit9CisKK3N0YXRpYyB2b2lkCitpbnRlbF9kcF9pbml0 X3BhbmVsX3Bvd2VyX3NlcXVlbmNlcl9yZWdpc3RlcnMoc3RydWN0IGludGVsX2RwICppbnRlbF9k cCwKKwkJCQkJICAgICAgYm9vbCBmb3JjZV9kaXNhYmxlX3ZkZCkKK3sKKwlzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkcF90b19pOTE1KGludGVsX2RwKTsKKwl1MzIgcHBfb24s IHBwX29mZiwgcG9ydF9zZWwgPSAwOworCWludCBkaXYgPSBSVU5USU1FX0lORk8oZGV2X3ByaXYp LT5yYXdjbGtfZnJlcSAvIDEwMDA7CisJc3RydWN0IHBwc19yZWdpc3RlcnMgcmVnczsKKwllbnVt IHBvcnQgcG9ydCA9IGRwX3RvX2RpZ19wb3J0KGludGVsX2RwKS0+YmFzZS5wb3J0OworCWNvbnN0 IHN0cnVjdCBlZHBfcG93ZXJfc2VxICpzZXEgPSAmaW50ZWxfZHAtPnBwc19kZWxheXM7CisKKwls b2NrZGVwX2Fzc2VydF9oZWxkKCZkZXZfcHJpdi0+cHBzX211dGV4KTsKKworCWludGVsX3Bwc19n ZXRfcmVnaXN0ZXJzKGludGVsX2RwLCAmcmVncyk7CisKKwkvKgorCSAqIE9uIHNvbWUgVkxWIG1h Y2hpbmVzIHRoZSBCSU9TIGNhbiBsZWF2ZSB0aGUgVkRECisJICogZW5hYmxlZCBldmVuIG9uIHBv d2VyIHNlcXVlbmNlcnMgd2hpY2ggYXJlbid0CisJICogaG9va2VkIHVwIHRvIGFueSBwb3J0LiBU aGlzIHdvdWxkIG1lc3MgdXAgdGhlCisJICogcG93ZXIgZG9tYWluIHRyYWNraW5nIHRoZSBmaXJz dCB0aW1lIHdlIHBpY2sKKwkgKiBvbmUgb2YgdGhlc2UgcG93ZXIgc2VxdWVuY2VycyBmb3IgdXNl IHNpbmNlCisJICogZWRwX3BhbmVsX3ZkZF9vbigpIHdvdWxkIG5vdGljZSB0aGF0IHRoZSBWREQg d2FzCisJICogYWxyZWFkeSBvbiBhbmQgdGhlcmVmb3JlIHdvdWxkbid0IGdyYWIgdGhlIHBvd2Vy CisJICogZG9tYWluIHJlZmVyZW5jZS4gRGlzYWJsZSBWREQgZmlyc3QgdG8gYXZvaWQgdGhpcy4K KwkgKiBUaGlzIGFsc28gYXZvaWRzIHNwdXJpb3VzbHkgdHVybmluZyB0aGUgVkREIG9uIGFzCisJ ICogc29vbiBhcyB0aGUgbmV3IHBvd2VyIHNlcXVlbmNlciBnZXRzIGluaXRpYWxpemVkLgorCSAq LworCWlmIChmb3JjZV9kaXNhYmxlX3ZkZCkgeworCQl1MzIgcHAgPSBpbGtfZ2V0X3BwX2NvbnRy b2woaW50ZWxfZHApOworCisJCWRybV9XQVJOKCZkZXZfcHJpdi0+ZHJtLCBwcCAmIFBBTkVMX1BP V0VSX09OLAorCQkJICJQYW5lbCBwb3dlciBhbHJlYWR5IG9uXG4iKTsKKworCQlpZiAocHAgJiBF RFBfRk9SQ0VfVkREKQorCQkJZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sCisJCQkJICAgICJW REQgYWxyZWFkeSBvbiwgZGlzYWJsaW5nIGZpcnN0XG4iKTsKKworCQlwcCAmPSB+RURQX0ZPUkNF X1ZERDsKKworCQlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgcmVncy5wcF9jdHJsLCBwcCk7CisJ fQorCisJcHBfb24gPSBSRUdfRklFTERfUFJFUChQQU5FTF9QT1dFUl9VUF9ERUxBWV9NQVNLLCBz ZXEtPnQxX3QzKSB8CisJCVJFR19GSUVMRF9QUkVQKFBBTkVMX0xJR0hUX09OX0RFTEFZX01BU0ss IHNlcS0+dDgpOworCXBwX29mZiA9IFJFR19GSUVMRF9QUkVQKFBBTkVMX0xJR0hUX09GRl9ERUxB WV9NQVNLLCBzZXEtPnQ5KSB8CisJCVJFR19GSUVMRF9QUkVQKFBBTkVMX1BPV0VSX0RPV05fREVM QVlfTUFTSywgc2VxLT50MTApOworCisJLyogSGFzd2VsbCBkb2Vzbid0IGhhdmUgYW55IHBvcnQg c2VsZWN0aW9uIGJpdHMgZm9yIHRoZSBwYW5lbAorCSAqIHBvd2VyIHNlcXVlbmNlciBhbnkgbW9y ZS4gKi8KKwlpZiAoSVNfVkFMTEVZVklFVyhkZXZfcHJpdikgfHwgSVNfQ0hFUlJZVklFVyhkZXZf cHJpdikpIHsKKwkJcG9ydF9zZWwgPSBQQU5FTF9QT1JUX1NFTEVDVF9WTFYocG9ydCk7CisJfSBl bHNlIGlmIChIQVNfUENIX0lCWChkZXZfcHJpdikgfHwgSEFTX1BDSF9DUFQoZGV2X3ByaXYpKSB7 CisJCXN3aXRjaCAocG9ydCkgeworCQljYXNlIFBPUlRfQToKKwkJCXBvcnRfc2VsID0gUEFORUxf UE9SVF9TRUxFQ1RfRFBBOworCQkJYnJlYWs7CisJCWNhc2UgUE9SVF9DOgorCQkJcG9ydF9zZWwg PSBQQU5FTF9QT1JUX1NFTEVDVF9EUEM7CisJCQlicmVhazsKKwkJY2FzZSBQT1JUX0Q6CisJCQlw b3J0X3NlbCA9IFBBTkVMX1BPUlRfU0VMRUNUX0RQRDsKKwkJCWJyZWFrOworCQlkZWZhdWx0Ogor CQkJTUlTU0lOR19DQVNFKHBvcnQpOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlwcF9vbiB8PSBw b3J0X3NlbDsKKworCWludGVsX2RlX3dyaXRlKGRldl9wcml2LCByZWdzLnBwX29uLCBwcF9vbik7 CisJaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIHJlZ3MucHBfb2ZmLCBwcF9vZmYpOworCisJLyoK KwkgKiBDb21wdXRlIHRoZSBkaXZpc29yIGZvciB0aGUgcHAgY2xvY2ssIHNpbXBseSBtYXRjaCB0 aGUgQnNwZWMgZm9ybXVsYS4KKwkgKi8KKwlpZiAoaTkxNV9tbWlvX3JlZ192YWxpZChyZWdzLnBw X2RpdikpIHsKKwkJaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIHJlZ3MucHBfZGl2LAorCQkJICAg ICAgIFJFR19GSUVMRF9QUkVQKFBQX1JFRkVSRU5DRV9ESVZJREVSX01BU0ssICgxMDAgKiBkaXYp IC8gMiAtIDEpIHwgUkVHX0ZJRUxEX1BSRVAoUEFORUxfUE9XRVJfQ1lDTEVfREVMQVlfTUFTSywg RElWX1JPVU5EX1VQKHNlcS0+dDExX3QxMiwgMTAwMCkpKTsKKwl9IGVsc2UgeworCQl1MzIgcHBf Y3RsOworCisJCXBwX2N0bCA9IGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIHJlZ3MucHBfY3RybCk7 CisJCXBwX2N0bCAmPSB+QlhUX1BPV0VSX0NZQ0xFX0RFTEFZX01BU0s7CisJCXBwX2N0bCB8PSBS RUdfRklFTERfUFJFUChCWFRfUE9XRVJfQ1lDTEVfREVMQVlfTUFTSywgRElWX1JPVU5EX1VQKHNl cS0+dDExX3QxMiwgMTAwMCkpOworCQlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgcmVncy5wcF9j dHJsLCBwcF9jdGwpOworCX0KKworCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJtLAorCQkgICAg InBhbmVsIHBvd2VyIHNlcXVlbmNlciByZWdpc3RlciBzZXR0aW5nczogUFBfT04gJSN4LCBQUF9P RkYgJSN4LCBQUF9ESVYgJSN4XG4iLAorCQkgICAgaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgcmVn cy5wcF9vbiksCisJCSAgICBpbnRlbF9kZV9yZWFkKGRldl9wcml2LCByZWdzLnBwX29mZiksCisJ CSAgICBpOTE1X21taW9fcmVnX3ZhbGlkKHJlZ3MucHBfZGl2KSA/CisJCSAgICBpbnRlbF9kZV9y ZWFkKGRldl9wcml2LCByZWdzLnBwX2RpdikgOgorCQkgICAgKGludGVsX2RlX3JlYWQoZGV2X3By aXYsIHJlZ3MucHBfY3RybCkgJiBCWFRfUE9XRVJfQ1lDTEVfREVMQVlfTUFTSykpOworfQorCit2 b2lkIGludGVsX2RwX3Bwc19pbml0KHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApCit7CisJc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZHBfdG9faTkxNShpbnRlbF9kcCk7CisK KwlpZiAoSVNfVkFMTEVZVklFVyhkZXZfcHJpdikgfHwgSVNfQ0hFUlJZVklFVyhkZXZfcHJpdikp IHsKKwkJdmx2X2luaXRpYWxfcG93ZXJfc2VxdWVuY2VyX3NldHVwKGludGVsX2RwKTsKKwl9IGVs c2UgeworCQlpbnRlbF9kcF9pbml0X3BhbmVsX3Bvd2VyX3NlcXVlbmNlcihpbnRlbF9kcCk7CisJ CWludGVsX2RwX2luaXRfcGFuZWxfcG93ZXJfc2VxdWVuY2VyX3JlZ2lzdGVycyhpbnRlbF9kcCwg ZmFsc2UpOworCX0KK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkv aW50ZWxfcHBzLmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX3Bwcy5oCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uNzZkNWNjNTY1NTAxCi0tLSAv ZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9wcHMuaApA QCAtMCwwICsxLDUzIEBACisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUICovCisvKgor ICogQ29weXJpZ2h0IMKpIDIwMjAgSW50ZWwgQ29ycG9yYXRpb24KKyAqLworCisjaWZuZGVmIF9f SU5URUxfUFBTX0hfXworI2RlZmluZSBfX0lOVEVMX1BQU19IX18KKworI2luY2x1ZGUgPGxpbnV4 L3R5cGVzLmg+CisKKyNpbmNsdWRlICJpbnRlbF93YWtlcmVmLmgiCisKK3N0cnVjdCBkcm1faTkx NV9wcml2YXRlOworc3RydWN0IGludGVsX2Nvbm5lY3RvcjsKK3N0cnVjdCBpbnRlbF9jcnRjX3N0 YXRlOworc3RydWN0IGludGVsX2RwOworc3RydWN0IGludGVsX2VuY29kZXI7CisKK2ludGVsX3dh a2VyZWZfdCBwcHNfbG9jayhzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKTsKK2ludGVsX3dha2Vy ZWZfdCBwcHNfdW5sb2NrKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAsIGludGVsX3dha2VyZWZf dCB3YWtlcmVmKTsKKworI2RlZmluZSB3aXRoX3Bwc19sb2NrKGRwLCB3ZikJCQkJCQlcCisJZm9y ICgod2YpID0gcHBzX2xvY2soZHApOyAod2YpOyAod2YpID0gcHBzX3VubG9jaygoZHApLCAod2Yp KSkKKwordm9pZCBpbnRlbF9kcF9jaGVja19lZHAoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCk7 Cit2b2lkIF9pbnRlbF9lZHBfYmFja2xpZ2h0X29uKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAp Owordm9pZCBfaW50ZWxfZWRwX2JhY2tsaWdodF9vZmYoc3RydWN0IGludGVsX2RwICppbnRlbF9k cCk7Cit2b2lkIGludGVsX2VkcF9iYWNrbGlnaHRfcG93ZXIoc3RydWN0IGludGVsX2Nvbm5lY3Rv ciAqY29ubmVjdG9yLCBib29sIGVuYWJsZSk7CisKK2Jvb2wgZWRwX3BhbmVsX3ZkZF9vbihzdHJ1 Y3QgaW50ZWxfZHAgKmludGVsX2RwKTsKK3ZvaWQgZWRwX3BhbmVsX3ZkZF9vZmYoc3RydWN0IGlu dGVsX2RwICppbnRlbF9kcCwgYm9vbCBzeW5jKTsKK3ZvaWQgZWRwX3BhbmVsX3ZkZF9vZmZfc3lu YyhzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKTsKK3ZvaWQgZWRwX3BhbmVsX29uKHN0cnVjdCBp bnRlbF9kcCAqaW50ZWxfZHApOwordm9pZCBlZHBfcGFuZWxfb2ZmKHN0cnVjdCBpbnRlbF9kcCAq aW50ZWxfZHApOwordm9pZCBlZHBfcGFuZWxfdmRkX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICpf X3dvcmspOworCit2b2lkIGludGVsX2VkcF9wYW5lbF92ZGRfb24oc3RydWN0IGludGVsX2RwICpp bnRlbF9kcCk7Cit2b2lkIGludGVsX2VkcF9wYW5lbF9vbihzdHJ1Y3QgaW50ZWxfZHAgKmludGVs X2RwKTsKK3ZvaWQgaW50ZWxfZWRwX3BhbmVsX29mZihzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2Rw KTsKK2Jvb2wgaW50ZWxfZWRwX2hhdmVfcG93ZXIoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCk7 CisKK3ZvaWQgaW50ZWxfZWRwX3BhbmVsX3ZkZF9zYW5pdGl6ZShzdHJ1Y3QgaW50ZWxfZHAgKmlu dGVsX2RwKTsKKwordm9pZCB3YWl0X3BhbmVsX3Bvd2VyX2N5Y2xlKHN0cnVjdCBpbnRlbF9kcCAq aW50ZWxfZHApOworCit2b2lkIGludGVsX2RwX3Bwc19pbml0KHN0cnVjdCBpbnRlbF9kcCAqaW50 ZWxfZHApOwordm9pZCBpbnRlbF9wb3dlcl9zZXF1ZW5jZXJfcmVzZXQoc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmk5MTUpOwordm9pZCBpbnRlbF9kcF9pbml0X3BhbmVsX3Bvd2VyX3RpbWVzdGFt cHMoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCk7CisKK3ZvaWQgdmx2X2luaXRfcGFuZWxfcG93 ZXJfc2VxdWVuY2VyKHN0cnVjdCBpbnRlbF9lbmNvZGVyICplbmNvZGVyLAorCQkJCSAgICBjb25z dCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSk7CisKKyNlbmRpZiAvKiBfX0lO VEVMX1BQU19IX18gKi8KLS0gCjIuMjAuMQoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMu ZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlz dGluZm8vaW50ZWwtZ2Z4Cg==