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=-9.7 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,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 EA889C43603 for ; Wed, 11 Dec 2019 21:12:53 +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 3572B20637 for ; Wed, 11 Dec 2019 21:12:53 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 3572B20637 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 A66B16EBE4; Wed, 11 Dec 2019 21:12:49 +0000 (UTC) Received: from mga18.intel.com (mga18.intel.com [134.134.136.126]) by gabe.freedesktop.org (Postfix) with ESMTPS id DBC816EBE0 for ; Wed, 11 Dec 2019 21:12:45 +0000 (UTC) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga006.jf.intel.com ([10.7.209.51]) by orsmga106.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 11 Dec 2019 13:12:45 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.69,303,1571727600"; d="scan'208";a="215904970" Received: from dceraolo-linux.fm.intel.com ([10.1.27.145]) by orsmga006.jf.intel.com with ESMTP; 11 Dec 2019 13:12:45 -0800 From: Daniele Ceraolo Spurio To: intel-gfx@lists.freedesktop.org Date: Wed, 11 Dec 2019 13:12:42 -0800 Message-Id: <20191211211244.7831-4-daniele.ceraolospurio@intel.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20191211211244.7831-1-daniele.ceraolospurio@intel.com> References: <20191211211244.7831-1-daniele.ceraolospurio@intel.com> MIME-Version: 1.0 Subject: [Intel-gfx] [RFC 3/5] drm/i915: split out virtual engine code X-BeenThere: intel-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Intel graphics driver community testing & development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" SGF2aW5nIHRoZSB2aXJ0dWFsIGVuZ2luZSBoYW5kbGluZyBpbiBpdHMgb3duIGZpbGUgd2lsbCBt YWtlIGl0IGVhc2llcgpjYWxsIGl0IGZyb20gb3IgbW9kaWZ5IGZvciB0aGUgR3VDIGltcGxlbWVu dGF0aW9uIHdpdGhvdXQgbGVha2luZyB0aGUKY2hhbmdlcyBpbiB0aGUgY29udGV4dCBtYW5hZ2Vt ZW50IG9yIGV4ZWNsaXN0cyBzdWJtaXNzaW9uIHBhdGhzLgoKU2lnbmVkLW9mZi1ieTogRGFuaWVs ZSBDZXJhb2xvIFNwdXJpbyA8ZGFuaWVsZS5jZXJhb2xvc3B1cmlvQGludGVsLmNvbT4KQ2M6IENo cmlzIFdpbHNvbiA8Y2hyaXNAY2hyaXMtd2lsc29uLmNvLnVrPgpDYzogVHZydGtvIFVyc3VsaW4g PHR2cnRrby51cnN1bGluQGxpbnV4LmludGVsLmNvbT4KQ2M6IE1hdHRoZXcgQnJvc3QgPG1hdHRo ZXcuYnJvc3RAaW50ZWwuY29tPgotLS0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlICAg ICAgICAgICAgICAgICB8ICAgMSArCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1f Y29udGV4dC5jICAgfCAgIDUgKy0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2VuZ2lu ZV9wb29sLmMgICB8ICAgMSArCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9scmMuYyAg ICAgICAgICAgfCA0MDMgKystLS0tLS0tLS0tLS0tLS0tCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9n dC9pbnRlbF9scmMuaCAgICAgICAgICAgfCAgMjkgKy0KIC4uLi9ncHUvZHJtL2k5MTUvZ3QvaW50 ZWxfdmlydHVhbF9lbmdpbmUuYyAgICB8IDM1OSArKysrKysrKysrKysrKysrCiAuLi4vZ3B1L2Ry bS9pOTE1L2d0L2ludGVsX3ZpcnR1YWxfZW5naW5lLmggICAgfCAgNDggKysrCiBkcml2ZXJzL2dw dS9kcm0vaTkxNS9ndC9zZWxmdGVzdF9scmMuYyAgICAgICAgfCAgMTMgKy0KIDggZmlsZXMgY2hh bmdlZCwgNDU3IGluc2VydGlvbnMoKyksIDQwMiBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEw MDY0NCBkcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF92aXJ0dWFsX2VuZ2luZS5jCiBjcmVh dGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfdmlydHVhbF9lbmdp bmUuaAoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlIGIvZHJpdmVy cy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUKaW5kZXggZTBmZDEwYzBjZmI4Li43OWY1ZWY1YWNkNGMg MTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlCisrKyBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L01ha2VmaWxlCkBAIC05OCw2ICs5OCw3IEBAIGd0LXkgKz0gXAogCWd0L2lu dGVsX3Jwcy5vIFwKIAlndC9pbnRlbF9zc2V1Lm8gXAogCWd0L2ludGVsX3RpbWVsaW5lLm8gXAor CWd0L2ludGVsX3ZpcnR1YWxfZW5naW5lLm8gXAogCWd0L2ludGVsX3dvcmthcm91bmRzLm8KICMg YXV0b2dlbmVyYXRlZCBudWxsIHJlbmRlciBzdGF0ZQogZ3QteSArPSBcCmRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fY29udGV4dC5jIGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX2NvbnRleHQuYwppbmRleCA0NmI0ZDFkNjQzZjguLjY0NjEz NzAyMjNiOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX2Nv bnRleHQuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fY29udGV4dC5j CkBAIC03NCw2ICs3NCw3IEBACiAjaW5jbHVkZSAiZ3QvaW50ZWxfZW5naW5lX3VzZXIuaCIKICNp bmNsdWRlICJndC9pbnRlbF9scmNfcmVnLmgiCiAjaW5jbHVkZSAiZ3QvaW50ZWxfcmluZy5oIgor I2luY2x1ZGUgImd0L2ludGVsX3ZpcnR1YWxfZW5naW5lLmgiCiAKICNpbmNsdWRlICJpOTE1X2dl bV9jb250ZXh0LmgiCiAjaW5jbHVkZSAiaTkxNV9nbG9iYWxzLmgiCkBAIC0xNTM2LDcgKzE1Mzcs NyBAQCBzZXRfZW5naW5lc19fbG9hZF9iYWxhbmNlKHN0cnVjdCBpOTE1X3VzZXJfZXh0ZW5zaW9u IF9fdXNlciAqYmFzZSwgdm9pZCAqZGF0YSkKIAkJfQogCX0KIAotCWNlID0gaW50ZWxfZXhlY2xp c3RzX2NyZWF0ZV92aXJ0dWFsKHNldC0+Y3R4LCBzaWJsaW5ncywgbik7CisJY2UgPSBpbnRlbF92 aXJ0dWFsX2VuZ2luZV9jcmVhdGUoc2V0LT5jdHgsIHNpYmxpbmdzLCBuKTsKIAlpZiAoSVNfRVJS KGNlKSkgewogCQllcnIgPSBQVFJfRVJSKGNlKTsKIAkJZ290byBvdXRfc2libGluZ3M7CkBAIC0x OTk5LDcgKzIwMDAsNyBAQCBzdGF0aWMgaW50IGNsb25lX2VuZ2luZXMoc3RydWN0IGk5MTVfZ2Vt X2NvbnRleHQgKmRzdCwKIAkJICovCiAJCWlmIChpbnRlbF9lbmdpbmVfaXNfdmlydHVhbChlbmdp bmUpKQogCQkJY2xvbmUtPmVuZ2luZXNbbl0gPQotCQkJCWludGVsX2V4ZWNsaXN0c19jbG9uZV92 aXJ0dWFsKGRzdCwgZW5naW5lKTsKKwkJCQlpbnRlbF92aXJ0dWFsX2VuZ2luZV9jbG9uZShkc3Qs IGVuZ2luZSk7CiAJCWVsc2UKIAkJCWNsb25lLT5lbmdpbmVzW25dID0gaW50ZWxfY29udGV4dF9j cmVhdGUoZHN0LCBlbmdpbmUpOwogCQlpZiAoSVNfRVJSX09SX05VTEwoY2xvbmUtPmVuZ2luZXNb bl0pKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9lbmdpbmVf cG9vbC5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfZW5naW5lX3Bvb2wuYwppbmRl eCAzOTcxODY4MTgzMDUuLjMzYWIwZTViZmE0MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJt L2k5MTUvZ3QvaW50ZWxfZW5naW5lX3Bvb2wuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9n dC9pbnRlbF9lbmdpbmVfcG9vbC5jCkBAIC05LDYgKzksNyBAQAogI2luY2x1ZGUgImk5MTVfZHJ2 LmgiCiAjaW5jbHVkZSAiaW50ZWxfZW5naW5lX3BtLmgiCiAjaW5jbHVkZSAiaW50ZWxfZW5naW5l X3Bvb2wuaCIKKyNpbmNsdWRlICJpbnRlbF92aXJ0dWFsX2VuZ2luZS5oIgogCiBzdGF0aWMgc3Ry dWN0IGludGVsX2VuZ2luZV9jcyAqdG9fZW5naW5lKHN0cnVjdCBpbnRlbF9lbmdpbmVfcG9vbCAq cG9vbCkKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2xyYy5j IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfbHJjLmMKaW5kZXggZTZkZWEyZDNhNWMw Li4zYWZhZTlhNDQ5MTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVs X2xyYy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2xyYy5jCkBAIC0xNDcs NyArMTQ3LDcgQEAKICNpbmNsdWRlICJpbnRlbF9tb2NzLmgiCiAjaW5jbHVkZSAiaW50ZWxfcmVz ZXQuaCIKICNpbmNsdWRlICJpbnRlbF9yaW5nLmgiCi0jaW5jbHVkZSAiaW50ZWxfdmlydHVhbF9l bmdpbmVfdHlwZXMuaCIKKyNpbmNsdWRlICJpbnRlbF92aXJ0dWFsX2VuZ2luZS5oIgogI2luY2x1 ZGUgImludGVsX3dvcmthcm91bmRzLmgiCiAKICNkZWZpbmUgUklOR19FWEVDTElTVF9RRlVMTAkJ KDEgPDwgMHgyKQpAQCAtMTgxLDE2ICsxODEsNiBAQAogI2RlZmluZSBXQV9UQUlMX0RXT1JEUyAy CiAjZGVmaW5lIFdBX1RBSUxfQllURVMgKHNpemVvZih1MzIpICogV0FfVEFJTF9EV09SRFMpCiAK LXN0YXRpYyBzdHJ1Y3QgaW50ZWxfdmlydHVhbF9lbmdpbmUgKgotdG9fdmlydHVhbF9lbmdpbmUo c3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQotewotCUdFTV9CVUdfT04oIWludGVsX2Vu Z2luZV9pc192aXJ0dWFsKGVuZ2luZSkpOwotCXJldHVybiBjb250YWluZXJfb2YoZW5naW5lLCBz dHJ1Y3QgaW50ZWxfdmlydHVhbF9lbmdpbmUsIGJhc2UpOwotfQotCi1zdGF0aWMgaW50IGxyX2Nv bnRleHRfYWxsb2Moc3RydWN0IGludGVsX2NvbnRleHQgKmNlLAotCQkJICAgIHN0cnVjdCBpbnRl bF9lbmdpbmVfY3MgKmVuZ2luZSk7Ci0KIHN0YXRpYyB2b2lkIGxyX2NvbnRleHRfaW5pdF9yZWdf c3RhdGUodTMyICpyZWdfc3RhdGUsCiAJCQkJICAgICAgY29uc3Qgc3RydWN0IGludGVsX2NvbnRl eHQgKmNlLAogCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwK QEAgLTgwNSw2ICs3OTUsMTIgQEAgc3RhdGljIGNvbnN0IHU4ICpyZWdfb2Zmc2V0cyhjb25zdCBz dHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCiAJfQogfQogCit1MzIgKmludGVsX2xyX2Nv bnRleHRfc2V0X3JlZ2lzdGVyX29mZnNldHModTMyICpyZWdzLAorCQkJCQkgICBjb25zdCBzdHJ1 Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCit7CisJcmV0dXJuIHNldF9vZmZzZXRzKHJlZ3Ms IHJlZ19vZmZzZXRzKGVuZ2luZSksIGVuZ2luZSk7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgaTkxNV9y ZXF1ZXN0ICoKIF9fdW53aW5kX2luY29tcGxldGVfcmVxdWVzdHMoc3RydWN0IGludGVsX2VuZ2lu ZV9jcyAqZW5naW5lKQogewpAQCAtMTQwMywxMiArMTM5OSw2IEBAIHN0YXRpYyBib29sIGNhbl9t ZXJnZV9ycShjb25zdCBzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpwcmV2LAogCXJldHVybiB0cnVlOwog fQogCi1zdGF0aWMgdm9pZCB2aXJ0dWFsX3VwZGF0ZV9yZWdpc3Rlcl9vZmZzZXRzKHUzMiAqcmVn cywKLQkJCQkJICAgIHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKLXsKLQlzZXRfb2Zm c2V0cyhyZWdzLCByZWdfb2Zmc2V0cyhlbmdpbmUpLCBlbmdpbmUpOwotfQotCiBzdGF0aWMgYm9v bCB2aXJ0dWFsX21hdGNoZXMoY29uc3Qgc3RydWN0IGludGVsX3ZpcnR1YWxfZW5naW5lICp2ZSwK IAkJCSAgICBjb25zdCBzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSwKIAkJCSAgICBjb25zdCBzdHJ1 Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCkBAIC0xODAyLDggKzE3OTIsOCBAQCBzdGF0aWMg dm9pZCBleGVjbGlzdHNfZGVxdWV1ZShzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCiAJ CQkJR0VNX0JVR19PTihSRUFEX09OQ0UodmUtPmNvbnRleHQuaW5mbGlnaHQpKTsKIAogCQkJCWlm ICghaW50ZWxfZW5naW5lX2hhc19yZWxhdGl2ZV9tbWlvKGVuZ2luZSkpCi0JCQkJCXZpcnR1YWxf dXBkYXRlX3JlZ2lzdGVyX29mZnNldHMocmVncywKLQkJCQkJCQkJCWVuZ2luZSk7CisJCQkJCWlu dGVsX2xyX2NvbnRleHRfc2V0X3JlZ2lzdGVyX29mZnNldHMocmVncywKKwkJCQkJCQkJCSAgICAg IGVuZ2luZSk7CiAKIAkJCQlpZiAoIWxpc3RfZW1wdHkoJnZlLT5jb250ZXh0LnNpZ25hbHMpKQog CQkJCQl2aXJ0dWFsX3hmZXJfYnJlYWRjcnVtYnModmUsIGVuZ2luZSk7CkBAIC0yMzM5LDEyICsy MzI5LDYgQEAgc3RhdGljIHZvaWQgZXhlY2xpc3RzX3N1Ym1pdF9yZXF1ZXN0KHN0cnVjdCBpOTE1 X3JlcXVlc3QgKnJlcXVlc3QpCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZW5naW5lLT5hY3Rp dmUubG9jaywgZmxhZ3MpOwogfQogCi1zdGF0aWMgdm9pZCBscl9jb250ZXh0X2Zpbmkoc3RydWN0 IGludGVsX2NvbnRleHQgKmNlKQotewotCWludGVsX3JpbmdfcHV0KGNlLT5yaW5nKTsKLQlpOTE1 X3ZtYV9wdXQoY2UtPnN0YXRlKTsKLX0KLQogc3RhdGljIHZvaWQgZXhlY2xpc3RzX2NvbnRleHRf ZGVzdHJveShzdHJ1Y3Qga3JlZiAqa3JlZikKIHsKIAlzdHJ1Y3QgaW50ZWxfY29udGV4dCAqY2Ug PSBjb250YWluZXJfb2Yoa3JlZiwgdHlwZW9mKCpjZSksIHJlZik7CkBAIC0yMzUzLDcgKzIzMzcs NyBAQCBzdGF0aWMgdm9pZCBleGVjbGlzdHNfY29udGV4dF9kZXN0cm95KHN0cnVjdCBrcmVmICpr cmVmKQogCUdFTV9CVUdfT04oaW50ZWxfY29udGV4dF9pc19waW5uZWQoY2UpKTsKIAogCWlmIChj ZS0+c3RhdGUpCi0JCWxyX2NvbnRleHRfZmluaShjZSk7CisJCWludGVsX2xyX2NvbnRleHRfZmlu aShjZSk7CiAKIAlpbnRlbF9jb250ZXh0X2ZpbmkoY2UpOwogCWludGVsX2NvbnRleHRfZnJlZShj ZSk7CkBAIC0yMzg0LDcgKzIzNjgsNyBAQCBjaGVja19yZWR6b25lKGNvbnN0IHZvaWQgKnZhZGRy LCBjb25zdCBzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCiAJCQkgICAgIGVuZ2luZS0+ bmFtZSk7CiB9CiAKLXN0YXRpYyB2b2lkIGludGVsX2xyX2NvbnRleHRfdW5waW4oc3RydWN0IGlu dGVsX2NvbnRleHQgKmNlKQordm9pZCBpbnRlbF9scl9jb250ZXh0X3VucGluKHN0cnVjdCBpbnRl bF9jb250ZXh0ICpjZSkKIHsKIAljaGVja19yZWR6b25lKCh2b2lkICopY2UtPmxyY19yZWdfc3Rh dGUgLSBMUkNfU1RBVEVfUE4gKiBQQUdFX1NJWkUsCiAJCSAgICAgIGNlLT5lbmdpbmUpOwpAQCAt MjQxNiw4ICsyNDAwLDkgQEAgbHJfY29udGV4dF91cGRhdGVfcmVnX3N0YXRlKGNvbnN0IHN0cnVj dCBpbnRlbF9jb250ZXh0ICpjZSwKIAl9CiB9CiAKLXN0YXRpYyBpbnQKLWxyX2NvbnRleHRfcGlu KHN0cnVjdCBpbnRlbF9jb250ZXh0ICpjZSwgc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5l KQoraW50CitpbnRlbF9scl9jb250ZXh0X3BpbihzdHJ1Y3QgaW50ZWxfY29udGV4dCAqY2UsCisJ CSAgICAgc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQogewogCXZvaWQgKnZhZGRyOwog CWludCByZXQ7CkBAIC0yNDUxLDEyICsyNDM2LDEyIEBAIGxyX2NvbnRleHRfcGluKHN0cnVjdCBp bnRlbF9jb250ZXh0ICpjZSwgc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQogCiBzdGF0 aWMgaW50IGV4ZWNsaXN0c19jb250ZXh0X3BpbihzdHJ1Y3QgaW50ZWxfY29udGV4dCAqY2UpCiB7 Ci0JcmV0dXJuIGxyX2NvbnRleHRfcGluKGNlLCBjZS0+ZW5naW5lKTsKKwlyZXR1cm4gaW50ZWxf bHJfY29udGV4dF9waW4oY2UsIGNlLT5lbmdpbmUpOwogfQogCiBzdGF0aWMgaW50IGV4ZWNsaXN0 c19jb250ZXh0X2FsbG9jKHN0cnVjdCBpbnRlbF9jb250ZXh0ICpjZSkKIHsKLQlyZXR1cm4gbHJf Y29udGV4dF9hbGxvYyhjZSwgY2UtPmVuZ2luZSk7CisJcmV0dXJuIGludGVsX2xyX2NvbnRleHRf YWxsb2MoY2UsIGNlLT5lbmdpbmUpOwogfQogCiBzdGF0aWMgdm9pZCBleGVjbGlzdHNfY29udGV4 dF9yZXNldChzdHJ1Y3QgaW50ZWxfY29udGV4dCAqY2UpCkBAIC00MDMwLDcgKzQwMTUsNyBAQCBz dGF0aWMgdm9pZCBscl9jb250ZXh0X2luaXRfcmVnX3N0YXRlKHUzMiAqcmVncywKIAkgKgogCSAq IE11c3Qga2VlcCBjb25zaXN0ZW50IHdpdGggdmlydHVhbF91cGRhdGVfcmVnaXN0ZXJfb2Zmc2V0 cygpLgogCSAqLwotCXUzMiAqYmJlID0gc2V0X29mZnNldHMocmVncywgcmVnX29mZnNldHMoZW5n aW5lKSwgZW5naW5lKTsKKwl1MzIgKmJiZSA9IGludGVsX2xyX2NvbnRleHRfc2V0X3JlZ2lzdGVy X29mZnNldHMocmVncywgZW5naW5lKTsKIAogCWlmIChjbG9zZSkgeyAvKiBDbG9zZSB0aGUgYmF0 Y2g7IHVzZWQgbWFpbmx5IGJ5IGxpdmVfbHJjX2xheW91dCgpICovCiAJCSpiYmUgPSBNSV9CQVRD SF9CVUZGRVJfRU5EOwpAQCAtNDA5OCw4ICs0MDgzLDggQEAgcG9wdWxhdGVfbHJfY29udGV4dChz dHJ1Y3QgaW50ZWxfY29udGV4dCAqY2UsCiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBs cl9jb250ZXh0X2FsbG9jKHN0cnVjdCBpbnRlbF9jb250ZXh0ICpjZSwKLQkJCSAgICBzdHJ1Y3Qg aW50ZWxfZW5naW5lX2NzICplbmdpbmUpCitpbnQgaW50ZWxfbHJfY29udGV4dF9hbGxvYyhzdHJ1 Y3QgaW50ZWxfY29udGV4dCAqY2UsCisJCQkgICBzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdp bmUpCiB7CiAJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKmN0eF9vYmo7CiAJc3RydWN0IGlu dGVsX3JpbmcgKnJpbmc7CkBAIC00MTU5LDEyMyArNDE0NCwxMiBAQCBzdGF0aWMgaW50IGxyX2Nv bnRleHRfYWxsb2Moc3RydWN0IGludGVsX2NvbnRleHQgKmNlLAogCXJldHVybiByZXQ7CiB9CiAK LXN0YXRpYyBzdHJ1Y3QgbGlzdF9oZWFkICp2aXJ0dWFsX3F1ZXVlKHN0cnVjdCBpbnRlbF92aXJ0 dWFsX2VuZ2luZSAqdmUpCit2b2lkIGludGVsX2xyX2NvbnRleHRfZmluaShzdHJ1Y3QgaW50ZWxf Y29udGV4dCAqY2UpCiB7Ci0JcmV0dXJuICZ2ZS0+YmFzZS5leGVjbGlzdHMuZGVmYXVsdF9wcmlv bGlzdC5yZXF1ZXN0c1swXTsKLX0KLQotc3RhdGljIHZvaWQgdmlydHVhbF9jb250ZXh0X2Rlc3Ry b3koc3RydWN0IGtyZWYgKmtyZWYpCi17Ci0Jc3RydWN0IGludGVsX3ZpcnR1YWxfZW5naW5lICp2 ZSA9Ci0JCWNvbnRhaW5lcl9vZihrcmVmLCB0eXBlb2YoKnZlKSwgY29udGV4dC5yZWYpOwotCXVu c2lnbmVkIGludCBuOwotCi0JR0VNX0JVR19PTighbGlzdF9lbXB0eSh2aXJ0dWFsX3F1ZXVlKHZl KSkpOwotCUdFTV9CVUdfT04odmUtPnJlcXVlc3QpOwotCUdFTV9CVUdfT04odmUtPmNvbnRleHQu aW5mbGlnaHQpOwotCi0JZm9yIChuID0gMDsgbiA8IHZlLT5udW1fc2libGluZ3M7IG4rKykgewot CQlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpzaWJsaW5nID0gdmUtPnNpYmxpbmdzW25dOwotCQlz dHJ1Y3QgcmJfbm9kZSAqbm9kZSA9ICZ2ZS0+bm9kZXNbc2libGluZy0+aWRdLnJiOwotCQl1bnNp Z25lZCBsb25nIGZsYWdzOwotCi0JCWlmIChSQl9FTVBUWV9OT0RFKG5vZGUpKQotCQkJY29udGlu dWU7Ci0KLQkJc3Bpbl9sb2NrX2lycXNhdmUoJnNpYmxpbmctPmFjdGl2ZS5sb2NrLCBmbGFncyk7 Ci0KLQkJLyogRGV0YWNobWVudCBpcyBsYXppbHkgcGVyZm9ybWVkIGluIHRoZSBleGVjbGlzdHMg dGFza2xldCAqLwotCQlpZiAoIVJCX0VNUFRZX05PREUobm9kZSkpCi0JCQlyYl9lcmFzZV9jYWNo ZWQobm9kZSwgJnNpYmxpbmctPmV4ZWNsaXN0cy52aXJ0dWFsKTsKLQotCQlzcGluX3VubG9ja19p cnFyZXN0b3JlKCZzaWJsaW5nLT5hY3RpdmUubG9jaywgZmxhZ3MpOwotCX0KLQlHRU1fQlVHX09O KF9fdGFza2xldF9pc19zY2hlZHVsZWQoJnZlLT5iYXNlLmV4ZWNsaXN0cy50YXNrbGV0KSk7Ci0K LQlpZiAodmUtPmNvbnRleHQuc3RhdGUpCi0JCWxyX2NvbnRleHRfZmluaSgmdmUtPmNvbnRleHQp OwotCWludGVsX2NvbnRleHRfZmluaSgmdmUtPmNvbnRleHQpOwotCi0Ja2ZyZWUodmUtPmJvbmRz KTsKLQlrZnJlZSh2ZSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHZpcnR1YWxfZW5naW5lX2luaXRpYWxf aGludChzdHJ1Y3QgaW50ZWxfdmlydHVhbF9lbmdpbmUgKnZlKQotewotCWludCBzd3A7Ci0KLQkv KgotCSAqIFBpY2sgYSByYW5kb20gc2libGluZyBvbiBzdGFydGluZyB0byBoZWxwIHNwcmVhZCB0 aGUgbG9hZCBhcm91bmQuCi0JICoKLQkgKiBOZXcgY29udGV4dHMgYXJlIHR5cGljYWxseSBjcmVh dGVkIHdpdGggZXhhY3RseSB0aGUgc2FtZSBvcmRlcgotCSAqIG9mIHNpYmxpbmdzLCBhbmQgb2Z0 ZW4gc3RhcnRlZCBpbiBiYXRjaGVzLiBEdWUgdG8gdGhlIHdheSB3ZSBpdGVyYXRlCi0JICogdGhl IGFycmF5IG9mIHNpYmxpbmcgd2hlbiBzdWJtaXR0aW5nIHJlcXVlc3RzLCBzaWJsaW5nWzBdIGlz Ci0JICogcHJpb3JpdGlzZWQgZm9yIGRlcXVldWluZy4gSWYgd2UgbWFrZSBzdXJlIHRoYXQgc2li bGluZ1swXSBpcyBmYWlybHkKLQkgKiByYW5kb21pc2VkIGFjcm9zcyB0aGUgc3lzdGVtLCB3ZSBh bHNvIGhlbHAgc3ByZWFkIHRoZSBsb2FkIGJ5IHRoZQotCSAqIGZpcnN0IGVuZ2luZSB3ZSBpbnNw ZWN0IGJlaW5nIGRpZmZlcmVudCBlYWNoIHRpbWUuCi0JICoKLQkgKiBOQiBUaGlzIGRvZXMgbm90 IGZvcmNlIHVzIHRvIGV4ZWN1dGUgb24gdGhpcyBlbmdpbmUsIGl0IHdpbGwganVzdAotCSAqIHR5 cGljYWxseSBiZSB0aGUgZmlyc3Qgd2UgaW5zcGVjdCBmb3Igc3VibWlzc2lvbi4KLQkgKi8KLQlz d3AgPSBwcmFuZG9tX3UzMl9tYXgodmUtPm51bV9zaWJsaW5ncyk7Ci0JaWYgKCFzd3ApCi0JCXJl dHVybjsKLQotCXN3YXAodmUtPnNpYmxpbmdzW3N3cF0sIHZlLT5zaWJsaW5nc1swXSk7Ci0JaWYg KCFpbnRlbF9lbmdpbmVfaGFzX3JlbGF0aXZlX21taW8odmUtPnNpYmxpbmdzWzBdKSkKLQkJdmly dHVhbF91cGRhdGVfcmVnaXN0ZXJfb2Zmc2V0cyh2ZS0+Y29udGV4dC5scmNfcmVnX3N0YXRlLAot CQkJCQkJdmUtPnNpYmxpbmdzWzBdKTsKLX0KLQotc3RhdGljIGludCB2aXJ0dWFsX2NvbnRleHRf cGluKHN0cnVjdCBpbnRlbF9jb250ZXh0ICpjZSkKLXsKLQlzdHJ1Y3QgaW50ZWxfdmlydHVhbF9l bmdpbmUgKnZlID0KLQkJY29udGFpbmVyX29mKGNlLCB0eXBlb2YoKnZlKSwgY29udGV4dCk7Ci0J aW50IGVycjsKLQotCS8qIE5vdGU6IHdlIG11c3QgdXNlIGEgcmVhbCBlbmdpbmUgY2xhc3MgZm9y IHNldHRpbmcgdXAgcmVnIHN0YXRlICovCi0JZXJyID0gbHJfY29udGV4dF9waW4oY2UsIHZlLT5z aWJsaW5nc1swXSk7Ci0JaWYgKGVycikKLQkJcmV0dXJuIGVycjsKLQotCXZpcnR1YWxfZW5naW5l X2luaXRpYWxfaGludCh2ZSk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIHZpcnR1YWxf Y29udGV4dF9lbnRlcihzdHJ1Y3QgaW50ZWxfY29udGV4dCAqY2UpCi17Ci0Jc3RydWN0IGludGVs X3ZpcnR1YWxfZW5naW5lICp2ZSA9Ci0JCWNvbnRhaW5lcl9vZihjZSwgdHlwZW9mKCp2ZSksIGNv bnRleHQpOwotCXVuc2lnbmVkIGludCBuOwotCi0JZm9yIChuID0gMDsgbiA8IHZlLT5udW1fc2li bGluZ3M7IG4rKykKLQkJaW50ZWxfZW5naW5lX3BtX2dldCh2ZS0+c2libGluZ3Nbbl0pOwotCi0J aW50ZWxfdGltZWxpbmVfZW50ZXIoY2UtPnRpbWVsaW5lKTsKLX0KLQotc3RhdGljIHZvaWQgdmly dHVhbF9jb250ZXh0X2V4aXQoc3RydWN0IGludGVsX2NvbnRleHQgKmNlKQotewotCXN0cnVjdCBp bnRlbF92aXJ0dWFsX2VuZ2luZSAqdmUgPQotCQljb250YWluZXJfb2YoY2UsIHR5cGVvZigqdmUp LCBjb250ZXh0KTsKLQl1bnNpZ25lZCBpbnQgbjsKLQotCWludGVsX3RpbWVsaW5lX2V4aXQoY2Ut PnRpbWVsaW5lKTsKLQotCWZvciAobiA9IDA7IG4gPCB2ZS0+bnVtX3NpYmxpbmdzOyBuKyspCi0J CWludGVsX2VuZ2luZV9wbV9wdXQodmUtPnNpYmxpbmdzW25dKTsKKwlpbnRlbF9yaW5nX3B1dChj ZS0+cmluZyk7CisJaTkxNV92bWFfcHV0KGNlLT5zdGF0ZSk7CiB9CiAKLXN0YXRpYyBjb25zdCBz dHJ1Y3QgaW50ZWxfY29udGV4dF9vcHMgdmlydHVhbF9jb250ZXh0X29wcyA9IHsKLQkucGluID0g dmlydHVhbF9jb250ZXh0X3BpbiwKLQkudW5waW4gPSBpbnRlbF9scl9jb250ZXh0X3VucGluLAot Ci0JLmVudGVyID0gdmlydHVhbF9jb250ZXh0X2VudGVyLAotCS5leGl0ID0gdmlydHVhbF9jb250 ZXh0X2V4aXQsCi0KLQkuZGVzdHJveSA9IHZpcnR1YWxfY29udGV4dF9kZXN0cm95LAotfTsKLQog c3RhdGljIGludGVsX2VuZ2luZV9tYXNrX3QKIHZpcnR1YWxfc3VibWlzc2lvbl9tYXNrKHN0cnVj dCBpbnRlbF92aXJ0dWFsX2VuZ2luZSAqdmUpCiB7CkBAIC00NDE0LDggKzQyODgsOCBAQCBzdGF0 aWMgdm9pZCB2aXJ0dWFsX3N1Ym1pdF9yZXF1ZXN0KHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxKQog CQl2ZS0+YmFzZS5leGVjbGlzdHMucXVldWVfcHJpb3JpdHlfaGludCA9IHJxX3ByaW8ocnEpOwog CQl2ZS0+cmVxdWVzdCA9IGk5MTVfcmVxdWVzdF9nZXQocnEpOwogCi0JCUdFTV9CVUdfT04oIWxp c3RfZW1wdHkodmlydHVhbF9xdWV1ZSh2ZSkpKTsKLQkJbGlzdF9tb3ZlX3RhaWwoJnJxLT5zY2hl ZC5saW5rLCB2aXJ0dWFsX3F1ZXVlKHZlKSk7CisJCUdFTV9CVUdfT04oIWxpc3RfZW1wdHkoaW50 ZWxfdmlydHVhbF9lbmdpbmVfcXVldWUodmUpKSk7CisJCWxpc3RfbW92ZV90YWlsKCZycS0+c2No ZWQubGluaywgaW50ZWxfdmlydHVhbF9lbmdpbmVfcXVldWUodmUpKTsKIAogCQl0YXNrbGV0X3Nj aGVkdWxlKCZ2ZS0+YmFzZS5leGVjbGlzdHMudGFza2xldCk7CiAJfQpAQCAtNDQyMywyMCArNDI5 Nyw2IEBAIHN0YXRpYyB2b2lkIHZpcnR1YWxfc3VibWl0X3JlcXVlc3Qoc3RydWN0IGk5MTVfcmVx dWVzdCAqcnEpCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdmUtPmJhc2UuYWN0aXZlLmxvY2ss IGZsYWdzKTsKIH0KIAotc3RhdGljIHN0cnVjdCB2ZV9ib25kICoKLXZpcnR1YWxfZmluZF9ib25k KHN0cnVjdCBpbnRlbF92aXJ0dWFsX2VuZ2luZSAqdmUsCi0JCSAgY29uc3Qgc3RydWN0IGludGVs X2VuZ2luZV9jcyAqbWFzdGVyKQotewotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IHZlLT5u dW1fYm9uZHM7IGkrKykgewotCQlpZiAodmUtPmJvbmRzW2ldLm1hc3RlciA9PSBtYXN0ZXIpCi0J CQlyZXR1cm4gJnZlLT5ib25kc1tpXTsKLQl9Ci0KLQlyZXR1cm4gTlVMTDsKLX0KLQogc3RhdGlj IHZvaWQKIHZpcnR1YWxfYm9uZF9leGVjdXRlKHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxLCBzdHJ1 Y3QgZG1hX2ZlbmNlICpzaWduYWwpCiB7CkBAIC00NDQ2LDcgKzQzMDYsNyBAQCB2aXJ0dWFsX2Jv bmRfZXhlY3V0ZShzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSwgc3RydWN0IGRtYV9mZW5jZSAqc2ln bmFsKQogCiAJYWxsb3dlZCA9IH50b19yZXF1ZXN0KHNpZ25hbCktPmVuZ2luZS0+bWFzazsKIAot CWJvbmQgPSB2aXJ0dWFsX2ZpbmRfYm9uZCh2ZSwgdG9fcmVxdWVzdChzaWduYWwpLT5lbmdpbmUp OworCWJvbmQgPSBpbnRlbF92aXJ0dWFsX2VuZ2luZV9maW5kX2JvbmQodmUsIHRvX3JlcXVlc3Qo c2lnbmFsKS0+ZW5naW5lKTsKIAlpZiAoYm9uZCkKIAkJYWxsb3dlZCAmPSBib25kLT5zaWJsaW5n X21hc2s7CiAKQEAgLTQ0NTksMjI1ICs0MzE5LDE0IEBAIHZpcnR1YWxfYm9uZF9leGVjdXRlKHN0 cnVjdCBpOTE1X3JlcXVlc3QgKnJxLCBzdHJ1Y3QgZG1hX2ZlbmNlICpzaWduYWwpCiAJdG9fcmVx dWVzdChzaWduYWwpLT5leGVjdXRpb25fbWFzayAmPSB+YWxsb3dlZDsKIH0KIAotc3RydWN0IGlu dGVsX2NvbnRleHQgKgotaW50ZWxfZXhlY2xpc3RzX2NyZWF0ZV92aXJ0dWFsKHN0cnVjdCBpOTE1 X2dlbV9jb250ZXh0ICpjdHgsCi0JCQkgICAgICAgc3RydWN0IGludGVsX2VuZ2luZV9jcyAqKnNp YmxpbmdzLAotCQkJICAgICAgIHVuc2lnbmVkIGludCBjb3VudCkKK3ZvaWQgaW50ZWxfZXhlY2xp c3RzX3ZpcnR1YWxfc3VibWlzc2lvbl9pbml0KHN0cnVjdCBpbnRlbF92aXJ0dWFsX2VuZ2luZSAq dmUpCiB7Ci0Jc3RydWN0IGludGVsX3ZpcnR1YWxfZW5naW5lICp2ZTsKLQl1bnNpZ25lZCBpbnQg bjsKLQlpbnQgZXJyOwotCi0JaWYgKGNvdW50ID09IDApCi0JCXJldHVybiBFUlJfUFRSKC1FSU5W QUwpOwotCi0JaWYgKGNvdW50ID09IDEpCi0JCXJldHVybiBpbnRlbF9jb250ZXh0X2NyZWF0ZShj dHgsIHNpYmxpbmdzWzBdKTsKLQotCXZlID0ga3phbGxvYyhzdHJ1Y3Rfc2l6ZSh2ZSwgc2libGlu Z3MsIGNvdW50KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCF2ZSkKLQkJcmV0dXJuIEVSUl9QVFIoLUVO T01FTSk7Ci0KLQl2ZS0+YmFzZS5pOTE1ID0gY3R4LT5pOTE1OwotCXZlLT5iYXNlLmd0ID0gc2li bGluZ3NbMF0tPmd0OwotCXZlLT5iYXNlLnVuY29yZSA9IHNpYmxpbmdzWzBdLT51bmNvcmU7Ci0J dmUtPmJhc2UuaWQgPSAtMTsKLQl2ZS0+YmFzZS5jbGFzcyA9IE9USEVSX0NMQVNTOwotCXZlLT5i YXNlLnVhYmlfY2xhc3MgPSBJOTE1X0VOR0lORV9DTEFTU19JTlZBTElEOwotCXZlLT5iYXNlLmlu c3RhbmNlID0gSTkxNV9FTkdJTkVfQ0xBU1NfSU5WQUxJRF9WSVJUVUFMOwotCi0JLyoKLQkgKiBU aGUgZGVjaXNpb24gb24gd2hldGhlciB0byBzdWJtaXQgYSByZXF1ZXN0IHVzaW5nIHNlbWFwaG9y ZXMKLQkgKiBkZXBlbmRzIG9uIHRoZSBzYXR1cmF0ZWQgc3RhdGUgb2YgdGhlIGVuZ2luZS4gV2Ug b25seSBjb21wdXRlCi0JICogdGhpcyBkdXJpbmcgSFcgc3VibWlzc2lvbiBvZiB0aGUgcmVxdWVz dCwgYW5kIHdlIG5lZWQgZm9yIHRoaXMKLQkgKiBzdGF0ZSB0byBiZSBnbG9iYWxseSBhcHBsaWVk IHRvIGFsbCByZXF1ZXN0cyBiZWluZyBzdWJtaXR0ZWQKLQkgKiB0byB0aGlzIGVuZ2luZS4gVmly dHVhbCBlbmdpbmVzIGVuY29tcGFzcyBtb3JlIHRoYW4gb25lIHBoeXNpY2FsCi0JICogZW5naW5l IGFuZCBzbyB3ZSBjYW5ub3QgYWNjdXJhdGVseSB0ZWxsIGluIGFkdmFuY2UgaWYgb25lIG9mIHRo b3NlCi0JICogZW5naW5lcyBpcyBhbHJlYWR5IHNhdHVyYXRlZCBhbmQgc28gY2Fubm90IGFmZm9y ZCB0byB1c2UgYSBzZW1hcGhvcmUKLQkgKiBhbmQgYmUgcGVzc2ltaXplZCBpbiBwcmlvcml0eSBm b3IgZG9pbmcgc28gLS0gaWYgd2UgYXJlIHRoZSBvbmx5Ci0JICogY29udGV4dCB1c2luZyBzZW1h cGhvcmVzIGFmdGVyIGFsbCBvdGhlciBjbGllbnRzIGhhdmUgc3RvcHBlZCwgd2UKLQkgKiB3aWxs IGJlIHN0YXJ2ZWQgb24gdGhlIHNhdHVyYXRlZCBzeXN0ZW0uIFN1Y2ggYSBnbG9iYWwgc3dpdGNo IGZvcgotCSAqIHNlbWFwaG9yZXMgaXMgbGVzcyB0aGFuIGlkZWFsLCBidXQgYWxhcyBpcyB0aGUg Y3VycmVudCBjb21wcm9taXNlLgotCSAqLwotCXZlLT5iYXNlLnNhdHVyYXRlZCA9IEFMTF9FTkdJ TkVTOwotCi0Jc25wcmludGYodmUtPmJhc2UubmFtZSwgc2l6ZW9mKHZlLT5iYXNlLm5hbWUpLCAi dmlydHVhbCIpOwotCi0JaW50ZWxfZW5naW5lX2luaXRfYWN0aXZlKCZ2ZS0+YmFzZSwgRU5HSU5F X1ZJUlRVQUwpOwotCWludGVsX2VuZ2luZV9pbml0X2JyZWFkY3J1bWJzKCZ2ZS0+YmFzZSk7Ci0K LQlpbnRlbF9lbmdpbmVfaW5pdF9leGVjbGlzdHMoJnZlLT5iYXNlKTsKLQotCXZlLT5iYXNlLmNv cHMgPSAmdmlydHVhbF9jb250ZXh0X29wczsKIAl2ZS0+YmFzZS5yZXF1ZXN0X2FsbG9jID0gZXhl Y2xpc3RzX3JlcXVlc3RfYWxsb2M7Ci0KLQl2ZS0+YmFzZS5zY2hlZHVsZSA9IGk5MTVfc2NoZWR1 bGU7CiAJdmUtPmJhc2Uuc3VibWl0X3JlcXVlc3QgPSB2aXJ0dWFsX3N1Ym1pdF9yZXF1ZXN0Owog CXZlLT5iYXNlLmJvbmRfZXhlY3V0ZSA9IHZpcnR1YWxfYm9uZF9leGVjdXRlOwotCi0JSU5JVF9M SVNUX0hFQUQodmlydHVhbF9xdWV1ZSh2ZSkpOwotCXZlLT5iYXNlLmV4ZWNsaXN0cy5xdWV1ZV9w cmlvcml0eV9oaW50ID0gSU5UX01JTjsKIAl0YXNrbGV0X2luaXQoJnZlLT5iYXNlLmV4ZWNsaXN0 cy50YXNrbGV0LAogCQkgICAgIHZpcnR1YWxfc3VibWlzc2lvbl90YXNrbGV0LAogCQkgICAgICh1 bnNpZ25lZCBsb25nKXZlKTsKLQotCWludGVsX2NvbnRleHRfaW5pdCgmdmUtPmNvbnRleHQsIGN0 eCwgJnZlLT5iYXNlKTsKLQotCWZvciAobiA9IDA7IG4gPCBjb3VudDsgbisrKSB7Ci0JCXN0cnVj dCBpbnRlbF9lbmdpbmVfY3MgKnNpYmxpbmcgPSBzaWJsaW5nc1tuXTsKLQotCQlHRU1fQlVHX09O KCFpc19wb3dlcl9vZl8yKHNpYmxpbmctPm1hc2spKTsKLQkJaWYgKHNpYmxpbmctPm1hc2sgJiB2 ZS0+YmFzZS5tYXNrKSB7Ci0JCQlEUk1fREVCVUcoImR1cGxpY2F0ZSAlcyBlbnRyeSBpbiBsb2Fk IGJhbGFuY2VyXG4iLAotCQkJCSAgc2libGluZy0+bmFtZSk7Ci0JCQllcnIgPSAtRUlOVkFMOwot CQkJZ290byBlcnJfcHV0OwotCQl9Ci0KLQkJLyoKLQkJICogVGhlIHZpcnR1YWwgZW5naW5lIGlt cGxlbWVudGF0aW9uIGlzIHRpZ2h0bHkgY291cGxlZCB0bwotCQkgKiB0aGUgZXhlY2xpc3RzIGJh Y2tlbmQgLS0gd2UgcHVzaCBvdXQgcmVxdWVzdCBkaXJlY3RseQotCQkgKiBpbnRvIGEgdHJlZSBp bnNpZGUgZWFjaCBwaHlzaWNhbCBlbmdpbmUuIFdlIGNvdWxkIHN1cHBvcnQKLQkJICogbGF5ZXJp bmcgaWYgd2UgaGFuZGxlIGNsb25pbmcgb2YgdGhlIHJlcXVlc3RzIGFuZAotCQkgKiBzdWJtaXR0 aW5nIGEgY29weSBpbnRvIGVhY2ggYmFja2VuZC4KLQkJICovCi0JCWlmIChzaWJsaW5nLT5leGVj bGlzdHMudGFza2xldC5mdW5jICE9Ci0JCSAgICBleGVjbGlzdHNfc3VibWlzc2lvbl90YXNrbGV0 KSB7Ci0JCQllcnIgPSAtRU5PREVWOwotCQkJZ290byBlcnJfcHV0OwotCQl9Ci0KLQkJR0VNX0JV R19PTihSQl9FTVBUWV9OT0RFKCZ2ZS0+bm9kZXNbc2libGluZy0+aWRdLnJiKSk7Ci0JCVJCX0NM RUFSX05PREUoJnZlLT5ub2Rlc1tzaWJsaW5nLT5pZF0ucmIpOwotCi0JCXZlLT5zaWJsaW5nc1t2 ZS0+bnVtX3NpYmxpbmdzKytdID0gc2libGluZzsKLQkJdmUtPmJhc2UubWFzayB8PSBzaWJsaW5n LT5tYXNrOwotCi0JCS8qCi0JCSAqIEFsbCBwaHlzaWNhbCBlbmdpbmVzIG11c3QgYmUgY29tcGF0 aWJsZSBmb3IgdGhlaXIgZW1pc3Npb24KLQkJICogZnVuY3Rpb25zIChhcyB3ZSBidWlsZCB0aGUg aW5zdHJ1Y3Rpb25zIGR1cmluZyByZXF1ZXN0Ci0JCSAqIGNvbnN0cnVjdGlvbiBhbmQgZG8gbm90 IGFsdGVyIHRoZW0gYmVmb3JlIHN1Ym1pc3Npb24KLQkJICogb24gdGhlIHBoeXNpY2FsIGVuZ2lu ZSkuIFdlIHVzZSB0aGUgZW5naW5lIGNsYXNzIGFzIGEgZ3VpZGUKLQkJICogaGVyZSwgYWx0aG91 Z2ggdGhhdCBjb3VsZCBiZSByZWZpbmVkLgotCQkgKi8KLQkJaWYgKHZlLT5iYXNlLmNsYXNzICE9 IE9USEVSX0NMQVNTKSB7Ci0JCQlpZiAodmUtPmJhc2UuY2xhc3MgIT0gc2libGluZy0+Y2xhc3Mp IHsKLQkJCQlEUk1fREVCVUcoImludmFsaWQgbWl4aW5nIG9mIGVuZ2luZSBjbGFzcywgc2libGlu ZyAlZCwgYWxyZWFkeSAlZFxuIiwKLQkJCQkJICBzaWJsaW5nLT5jbGFzcywgdmUtPmJhc2UuY2xh c3MpOwotCQkJCWVyciA9IC1FSU5WQUw7Ci0JCQkJZ290byBlcnJfcHV0OwotCQkJfQotCQkJY29u dGludWU7Ci0JCX0KLQotCQl2ZS0+YmFzZS5jbGFzcyA9IHNpYmxpbmctPmNsYXNzOwotCQl2ZS0+ YmFzZS51YWJpX2NsYXNzID0gc2libGluZy0+dWFiaV9jbGFzczsKLQkJc25wcmludGYodmUtPmJh c2UubmFtZSwgc2l6ZW9mKHZlLT5iYXNlLm5hbWUpLAotCQkJICJ2JWR4JWQiLCB2ZS0+YmFzZS5j bGFzcywgY291bnQpOwotCQl2ZS0+YmFzZS5jb250ZXh0X3NpemUgPSBzaWJsaW5nLT5jb250ZXh0 X3NpemU7Ci0KLQkJdmUtPmJhc2UuZW1pdF9iYl9zdGFydCA9IHNpYmxpbmctPmVtaXRfYmJfc3Rh cnQ7Ci0JCXZlLT5iYXNlLmVtaXRfZmx1c2ggPSBzaWJsaW5nLT5lbWl0X2ZsdXNoOwotCQl2ZS0+ YmFzZS5lbWl0X2luaXRfYnJlYWRjcnVtYiA9IHNpYmxpbmctPmVtaXRfaW5pdF9icmVhZGNydW1i OwotCQl2ZS0+YmFzZS5lbWl0X2ZpbmlfYnJlYWRjcnVtYiA9IHNpYmxpbmctPmVtaXRfZmluaV9i cmVhZGNydW1iOwotCQl2ZS0+YmFzZS5lbWl0X2ZpbmlfYnJlYWRjcnVtYl9kdyA9Ci0JCQlzaWJs aW5nLT5lbWl0X2ZpbmlfYnJlYWRjcnVtYl9kdzsKLQotCQl2ZS0+YmFzZS5mbGFncyA9IHNpYmxp bmctPmZsYWdzOwotCX0KLQotCXZlLT5iYXNlLmZsYWdzIHw9IEk5MTVfRU5HSU5FX0lTX1ZJUlRV QUw7Ci0KLQllcnIgPSBscl9jb250ZXh0X2FsbG9jKCZ2ZS0+Y29udGV4dCwgc2libGluZ3NbMF0p OwotCWlmIChlcnIpCi0JCWdvdG8gZXJyX3B1dDsKLQotCV9fc2V0X2JpdChDT05URVhUX0FMTE9D X0JJVCwgJnZlLT5jb250ZXh0LmZsYWdzKTsKLQotCXJldHVybiAmdmUtPmNvbnRleHQ7Ci0KLWVy cl9wdXQ6Ci0JaW50ZWxfY29udGV4dF9wdXQoJnZlLT5jb250ZXh0KTsKLQlyZXR1cm4gRVJSX1BU UihlcnIpOwotfQotCi1zdHJ1Y3QgaW50ZWxfY29udGV4dCAqCi1pbnRlbF9leGVjbGlzdHNfY2xv bmVfdmlydHVhbChzdHJ1Y3QgaTkxNV9nZW1fY29udGV4dCAqY3R4LAotCQkJICAgICAgc3RydWN0 IGludGVsX2VuZ2luZV9jcyAqc3JjKQotewotCXN0cnVjdCBpbnRlbF92aXJ0dWFsX2VuZ2luZSAq c2UgPSB0b192aXJ0dWFsX2VuZ2luZShzcmMpOwotCXN0cnVjdCBpbnRlbF9jb250ZXh0ICpkc3Q7 Ci0KLQlkc3QgPSBpbnRlbF9leGVjbGlzdHNfY3JlYXRlX3ZpcnR1YWwoY3R4LAotCQkJCQkgICAg IHNlLT5zaWJsaW5ncywKLQkJCQkJICAgICBzZS0+bnVtX3NpYmxpbmdzKTsKLQlpZiAoSVNfRVJS KGRzdCkpCi0JCXJldHVybiBkc3Q7Ci0KLQlpZiAoc2UtPm51bV9ib25kcykgewotCQlzdHJ1Y3Qg aW50ZWxfdmlydHVhbF9lbmdpbmUgKmRlID0KLQkJCXRvX3ZpcnR1YWxfZW5naW5lKGRzdC0+ZW5n aW5lKTsKLQotCQlkZS0+Ym9uZHMgPSBrbWVtZHVwKHNlLT5ib25kcywKLQkJCQkgICAgc2l6ZW9m KCpzZS0+Ym9uZHMpICogc2UtPm51bV9ib25kcywKLQkJCQkgICAgR0ZQX0tFUk5FTCk7Ci0JCWlm ICghZGUtPmJvbmRzKSB7Ci0JCQlpbnRlbF9jb250ZXh0X3B1dChkc3QpOwotCQkJcmV0dXJuIEVS Ul9QVFIoLUVOT01FTSk7Ci0JCX0KLQotCQlkZS0+bnVtX2JvbmRzID0gc2UtPm51bV9ib25kczsK LQl9Ci0KLQlyZXR1cm4gZHN0OwotfQotCi1pbnQgaW50ZWxfdmlydHVhbF9lbmdpbmVfYXR0YWNo X2JvbmQoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLAotCQkJCSAgICAgY29uc3Qgc3Ry dWN0IGludGVsX2VuZ2luZV9jcyAqbWFzdGVyLAotCQkJCSAgICAgY29uc3Qgc3RydWN0IGludGVs X2VuZ2luZV9jcyAqc2libGluZykKLXsKLQlzdHJ1Y3QgaW50ZWxfdmlydHVhbF9lbmdpbmUgKnZl ID0gdG9fdmlydHVhbF9lbmdpbmUoZW5naW5lKTsKLQlzdHJ1Y3QgdmVfYm9uZCAqYm9uZDsKLQlp bnQgbjsKLQotCS8qIFNhbml0eSBjaGVjayB0aGUgc2libGluZyBpcyBwYXJ0IG9mIHRoZSB2aXJ0 dWFsIGVuZ2luZSAqLwotCWZvciAobiA9IDA7IG4gPCB2ZS0+bnVtX3NpYmxpbmdzOyBuKyspCi0J CWlmIChzaWJsaW5nID09IHZlLT5zaWJsaW5nc1tuXSkKLQkJCWJyZWFrOwotCWlmIChuID09IHZl LT5udW1fc2libGluZ3MpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JYm9uZCA9IHZpcnR1YWxfZmlu ZF9ib25kKHZlLCBtYXN0ZXIpOwotCWlmIChib25kKSB7Ci0JCWJvbmQtPnNpYmxpbmdfbWFzayB8 PSBzaWJsaW5nLT5tYXNrOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlib25kID0ga3JlYWxsb2ModmUt PmJvbmRzLAotCQkJc2l6ZW9mKCpib25kKSAqICh2ZS0+bnVtX2JvbmRzICsgMSksCi0JCQlHRlBf S0VSTkVMKTsKLQlpZiAoIWJvbmQpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JYm9uZFt2ZS0+bnVt X2JvbmRzXS5tYXN0ZXIgPSBtYXN0ZXI7Ci0JYm9uZFt2ZS0+bnVtX2JvbmRzXS5zaWJsaW5nX21h c2sgPSBzaWJsaW5nLT5tYXNrOwotCi0JdmUtPmJvbmRzID0gYm9uZDsKLQl2ZS0+bnVtX2JvbmRz Kys7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RydWN0IGludGVsX2VuZ2luZV9jcyAqCi1pbnRlbF92 aXJ0dWFsX2VuZ2luZV9nZXRfc2libGluZyhzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUs Ci0JCQkJIHVuc2lnbmVkIGludCBzaWJsaW5nKQotewotCXN0cnVjdCBpbnRlbF92aXJ0dWFsX2Vu Z2luZSAqdmUgPSB0b192aXJ0dWFsX2VuZ2luZShlbmdpbmUpOwotCi0JaWYgKHNpYmxpbmcgPj0g dmUtPm51bV9zaWJsaW5ncykKLQkJcmV0dXJuIE5VTEw7Ci0KLQlyZXR1cm4gdmUtPnNpYmxpbmdz W3NpYmxpbmddOwogfQogCiB2b2lkIGludGVsX2V4ZWNsaXN0c19zaG93X3JlcXVlc3RzKHN0cnVj dCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2d0L2ludGVsX2xyYy5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfbHJjLmgK aW5kZXggMDQ1MTFkOGViZGMxLi45M2YzMGIyZGViN2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2d0L2ludGVsX2xyYy5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2lu dGVsX2xyYy5oCkBAIC0zMyw2ICszMyw3IEBAIHN0cnVjdCBpOTE1X2dlbV9jb250ZXh0Owogc3Ry dWN0IGk5MTVfcmVxdWVzdDsKIHN0cnVjdCBpbnRlbF9jb250ZXh0Owogc3RydWN0IGludGVsX2Vu Z2luZV9jczsKK3N0cnVjdCBpbnRlbF92aXJ0dWFsX2VuZ2luZTsKIAogLyogRXhlY2xpc3RzIHJl Z3MgKi8KICNkZWZpbmUgUklOR19FTFNQKGJhc2UpCQkJCV9NTUlPKChiYXNlKSArIDB4MjMwKQpA QCAtOTgsMTEgKzk5LDIyIEBAIGludCBpbnRlbF9leGVjbGlzdHNfc3VibWlzc2lvbl9pbml0KHN0 cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSk7CiAKIHZvaWQgaW50ZWxfZXhlY2xpc3RzX3Nl dF9kZWZhdWx0X3N1Ym1pc3Npb24oc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKTsKIAor aW50IGludGVsX2xyX2NvbnRleHRfYWxsb2Moc3RydWN0IGludGVsX2NvbnRleHQgKmNlLAorCQkJ ICAgc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKTsKK3ZvaWQgaW50ZWxfbHJfY29udGV4 dF9maW5pKHN0cnVjdCBpbnRlbF9jb250ZXh0ICpjZSk7CisKK3UzMiAqaW50ZWxfbHJfY29udGV4 dF9zZXRfcmVnaXN0ZXJfb2Zmc2V0cyh1MzIgKnJlZ3MsCisJCQkJCSAgIGNvbnN0IHN0cnVjdCBp bnRlbF9lbmdpbmVfY3MgKmVuZ2luZSk7CisKIHZvaWQgaW50ZWxfbHJfY29udGV4dF9yZXNldChz dHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUsCiAJCQkgICAgc3RydWN0IGludGVsX2NvbnRl eHQgKmNlLAogCQkJICAgIHUzMiBoZWFkLAogCQkJICAgIGJvb2wgc2NydWIpOwogCitpbnQgaW50 ZWxfbHJfY29udGV4dF9waW4oc3RydWN0IGludGVsX2NvbnRleHQgKmNlLAorCQkJIHN0cnVjdCBp bnRlbF9lbmdpbmVfY3MgKmVuZ2luZSk7Cit2b2lkIGludGVsX2xyX2NvbnRleHRfdW5waW4oc3Ry dWN0IGludGVsX2NvbnRleHQgKmNlKTsKKwogdm9pZCBpbnRlbF9leGVjbGlzdHNfc2hvd19yZXF1 ZXN0cyhzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUsCiAJCQkJICAgc3RydWN0IGRybV9w cmludGVyICptLAogCQkJCSAgIHZvaWQgKCpzaG93X3JlcXVlc3QpKHN0cnVjdCBkcm1fcHJpbnRl ciAqbSwKQEAgLTExMCwyMiArMTIyLDcgQEAgdm9pZCBpbnRlbF9leGVjbGlzdHNfc2hvd19yZXF1 ZXN0cyhzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUsCiAJCQkJCQkJY29uc3QgY2hhciAq cHJlZml4KSwKIAkJCQkgICB1bnNpZ25lZCBpbnQgbWF4KTsKIAotc3RydWN0IGludGVsX2NvbnRl eHQgKgotaW50ZWxfZXhlY2xpc3RzX2NyZWF0ZV92aXJ0dWFsKHN0cnVjdCBpOTE1X2dlbV9jb250 ZXh0ICpjdHgsCi0JCQkgICAgICAgc3RydWN0IGludGVsX2VuZ2luZV9jcyAqKnNpYmxpbmdzLAot CQkJICAgICAgIHVuc2lnbmVkIGludCBjb3VudCk7Ci0KLXN0cnVjdCBpbnRlbF9jb250ZXh0ICoK LWludGVsX2V4ZWNsaXN0c19jbG9uZV92aXJ0dWFsKHN0cnVjdCBpOTE1X2dlbV9jb250ZXh0ICpj dHgsCi0JCQkgICAgICBzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpzcmMpOwotCi1pbnQgaW50ZWxf dmlydHVhbF9lbmdpbmVfYXR0YWNoX2JvbmQoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5l LAotCQkJCSAgICAgY29uc3Qgc3RydWN0IGludGVsX2VuZ2luZV9jcyAqbWFzdGVyLAotCQkJCSAg ICAgY29uc3Qgc3RydWN0IGludGVsX2VuZ2luZV9jcyAqc2libGluZyk7Ci0KLXN0cnVjdCBpbnRl bF9lbmdpbmVfY3MgKgotaW50ZWxfdmlydHVhbF9lbmdpbmVfZ2V0X3NpYmxpbmcoc3RydWN0IGlu dGVsX2VuZ2luZV9jcyAqZW5naW5lLAotCQkJCSB1bnNpZ25lZCBpbnQgc2libGluZyk7Cit2b2lk IGludGVsX2V4ZWNsaXN0c192aXJ0dWFsX3N1Ym1pc3Npb25faW5pdChzdHJ1Y3QgaW50ZWxfdmly dHVhbF9lbmdpbmUgKnZlKTsKIAogYm9vbAogaW50ZWxfZW5naW5lX2luX2V4ZWNsaXN0c19zdWJt aXNzaW9uX21vZGUoY29uc3Qgc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKTsKZGlmZiAt LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX3ZpcnR1YWxfZW5naW5lLmMgYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF92aXJ0dWFsX2VuZ2luZS5jCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uNmVjMzc1MjEzMmJjCi0tLSAvZGV2L251bGwK KysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfdmlydHVhbF9lbmdpbmUuYwpAQCAt MCwwICsxLDM1OSBAQAorLyoKKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQKKyAqCisg KiBDb3B5cmlnaHQgwqkgMjAxOSBJbnRlbCBDb3Jwb3JhdGlvbgorICovCisKKyNpbmNsdWRlIDxk cm0vZHJtX3ByaW50Lmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorCisjaW5jbHVkZSAiZ2Vt L2k5MTVfZ2VtX2NvbnRleHQuaCIKKworI2luY2x1ZGUgImk5MTVfZ2VtLmgiCisjaW5jbHVkZSAi aW50ZWxfY29udGV4dC5oIgorI2luY2x1ZGUgImludGVsX2VuZ2luZS5oIgorI2luY2x1ZGUgImlu dGVsX2VuZ2luZV9wbS5oIgorI2luY2x1ZGUgImludGVsX2xyYy5oIgorI2luY2x1ZGUgImludGVs X3RpbWVsaW5lLmgiCisjaW5jbHVkZSAiaW50ZWxfdmlydHVhbF9lbmdpbmUuaCIKKworc3RhdGlj IHZvaWQgdmlydHVhbF9jb250ZXh0X2Rlc3Ryb3koc3RydWN0IGtyZWYgKmtyZWYpCit7CisJc3Ry dWN0IGludGVsX3ZpcnR1YWxfZW5naW5lICp2ZSA9CisJCWNvbnRhaW5lcl9vZihrcmVmLCB0eXBl b2YoKnZlKSwgY29udGV4dC5yZWYpOworCXVuc2lnbmVkIGludCBuOworCisJR0VNX0JVR19PTigh bGlzdF9lbXB0eShpbnRlbF92aXJ0dWFsX2VuZ2luZV9xdWV1ZSh2ZSkpKTsKKwlHRU1fQlVHX09O KHZlLT5yZXF1ZXN0KTsKKwlHRU1fQlVHX09OKHZlLT5jb250ZXh0LmluZmxpZ2h0KTsKKworCWZv ciAobiA9IDA7IG4gPCB2ZS0+bnVtX3NpYmxpbmdzOyBuKyspIHsKKwkJc3RydWN0IGludGVsX2Vu Z2luZV9jcyAqc2libGluZyA9IHZlLT5zaWJsaW5nc1tuXTsKKwkJc3RydWN0IHJiX25vZGUgKm5v ZGUgPSAmdmUtPm5vZGVzW3NpYmxpbmctPmlkXS5yYjsKKwkJdW5zaWduZWQgbG9uZyBmbGFnczsK KworCQlpZiAoUkJfRU1QVFlfTk9ERShub2RlKSkKKwkJCWNvbnRpbnVlOworCisJCXNwaW5fbG9j a19pcnFzYXZlKCZzaWJsaW5nLT5hY3RpdmUubG9jaywgZmxhZ3MpOworCisJCS8qIERldGFjaG1l bnQgaXMgbGF6aWx5IHBlcmZvcm1lZCBpbiB0aGUgZXhlY2xpc3RzIHRhc2tsZXQgKi8KKwkJaWYg KCFSQl9FTVBUWV9OT0RFKG5vZGUpKQorCQkJcmJfZXJhc2VfY2FjaGVkKG5vZGUsICZzaWJsaW5n LT5leGVjbGlzdHMudmlydHVhbCk7CisKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2libGlu Zy0+YWN0aXZlLmxvY2ssIGZsYWdzKTsKKwl9CisJR0VNX0JVR19PTihfX3Rhc2tsZXRfaXNfc2No ZWR1bGVkKCZ2ZS0+YmFzZS5leGVjbGlzdHMudGFza2xldCkpOworCisJaWYgKHZlLT5jb250ZXh0 LnN0YXRlKQorCQlpbnRlbF9scl9jb250ZXh0X2ZpbmkoJnZlLT5jb250ZXh0KTsKKwlpbnRlbF9j b250ZXh0X2ZpbmkoJnZlLT5jb250ZXh0KTsKKworCWtmcmVlKHZlLT5ib25kcyk7CisJa2ZyZWUo dmUpOworfQorCitzdGF0aWMgdm9pZCB2aXJ0dWFsX2VuZ2luZV9pbml0aWFsX2hpbnQoc3RydWN0 IGludGVsX3ZpcnR1YWxfZW5naW5lICp2ZSkKK3sKKwlpbnQgc3dwOworCisJLyoKKwkgKiBQaWNr IGEgcmFuZG9tIHNpYmxpbmcgb24gc3RhcnRpbmcgdG8gaGVscCBzcHJlYWQgdGhlIGxvYWQgYXJv dW5kLgorCSAqCisJICogTmV3IGNvbnRleHRzIGFyZSB0eXBpY2FsbHkgY3JlYXRlZCB3aXRoIGV4 YWN0bHkgdGhlIHNhbWUgb3JkZXIKKwkgKiBvZiBzaWJsaW5ncywgYW5kIG9mdGVuIHN0YXJ0ZWQg aW4gYmF0Y2hlcy4gRHVlIHRvIHRoZSB3YXkgd2UgaXRlcmF0ZQorCSAqIHRoZSBhcnJheSBvZiBz aWJsaW5nIHdoZW4gc3VibWl0dGluZyByZXF1ZXN0cywgc2libGluZ1swXSBpcworCSAqIHByaW9y aXRpc2VkIGZvciBkZXF1ZXVpbmcuIElmIHdlIG1ha2Ugc3VyZSB0aGF0IHNpYmxpbmdbMF0gaXMg ZmFpcmx5CisJICogcmFuZG9taXNlZCBhY3Jvc3MgdGhlIHN5c3RlbSwgd2UgYWxzbyBoZWxwIHNw cmVhZCB0aGUgbG9hZCBieSB0aGUKKwkgKiBmaXJzdCBlbmdpbmUgd2UgaW5zcGVjdCBiZWluZyBk aWZmZXJlbnQgZWFjaCB0aW1lLgorCSAqCisJICogTkIgVGhpcyBkb2VzIG5vdCBmb3JjZSB1cyB0 byBleGVjdXRlIG9uIHRoaXMgZW5naW5lLCBpdCB3aWxsIGp1c3QKKwkgKiB0eXBpY2FsbHkgYmUg dGhlIGZpcnN0IHdlIGluc3BlY3QgZm9yIHN1Ym1pc3Npb24uCisJICovCisJc3dwID0gcHJhbmRv bV91MzJfbWF4KHZlLT5udW1fc2libGluZ3MpOworCWlmICghc3dwKQorCQlyZXR1cm47CisKKwlz d2FwKHZlLT5zaWJsaW5nc1tzd3BdLCB2ZS0+c2libGluZ3NbMF0pOworCWlmICghaW50ZWxfZW5n aW5lX2hhc19yZWxhdGl2ZV9tbWlvKHZlLT5zaWJsaW5nc1swXSkpCisJCWludGVsX2xyX2NvbnRl eHRfc2V0X3JlZ2lzdGVyX29mZnNldHModmUtPmNvbnRleHQubHJjX3JlZ19zdGF0ZSwKKwkJCQkJ CSAgICAgIHZlLT5zaWJsaW5nc1swXSk7Cit9CisKK3N0YXRpYyBpbnQgdmlydHVhbF9jb250ZXh0 X3BpbihzdHJ1Y3QgaW50ZWxfY29udGV4dCAqY2UpCit7CisJc3RydWN0IGludGVsX3ZpcnR1YWxf ZW5naW5lICp2ZSA9CisJCWNvbnRhaW5lcl9vZihjZSwgdHlwZW9mKCp2ZSksIGNvbnRleHQpOwor CWludCBlcnI7CisKKwkvKiBOb3RlOiB3ZSBtdXN0IHVzZSBhIHJlYWwgZW5naW5lIGNsYXNzIGZv ciBzZXR0aW5nIHVwIHJlZyBzdGF0ZSAqLworCWVyciA9IGludGVsX2xyX2NvbnRleHRfcGluKGNl LCB2ZS0+c2libGluZ3NbMF0pOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwl2aXJ0dWFs X2VuZ2luZV9pbml0aWFsX2hpbnQodmUpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB2 aXJ0dWFsX2NvbnRleHRfZW50ZXIoc3RydWN0IGludGVsX2NvbnRleHQgKmNlKQoreworCXN0cnVj dCBpbnRlbF92aXJ0dWFsX2VuZ2luZSAqdmUgPQorCQljb250YWluZXJfb2YoY2UsIHR5cGVvZigq dmUpLCBjb250ZXh0KTsKKwl1bnNpZ25lZCBpbnQgbjsKKworCWZvciAobiA9IDA7IG4gPCB2ZS0+ bnVtX3NpYmxpbmdzOyBuKyspCisJCWludGVsX2VuZ2luZV9wbV9nZXQodmUtPnNpYmxpbmdzW25d KTsKKworCWludGVsX3RpbWVsaW5lX2VudGVyKGNlLT50aW1lbGluZSk7Cit9CisKK3N0YXRpYyB2 b2lkIHZpcnR1YWxfY29udGV4dF9leGl0KHN0cnVjdCBpbnRlbF9jb250ZXh0ICpjZSkKK3sKKwlz dHJ1Y3QgaW50ZWxfdmlydHVhbF9lbmdpbmUgKnZlID0KKwkJY29udGFpbmVyX29mKGNlLCB0eXBl b2YoKnZlKSwgY29udGV4dCk7CisJdW5zaWduZWQgaW50IG47CisKKwlpbnRlbF90aW1lbGluZV9l eGl0KGNlLT50aW1lbGluZSk7CisKKwlmb3IgKG4gPSAwOyBuIDwgdmUtPm51bV9zaWJsaW5nczsg bisrKQorCQlpbnRlbF9lbmdpbmVfcG1fcHV0KHZlLT5zaWJsaW5nc1tuXSk7Cit9CisKK3N0YXRp YyBjb25zdCBzdHJ1Y3QgaW50ZWxfY29udGV4dF9vcHMgdmlydHVhbF9jb250ZXh0X29wcyA9IHsK KwkucGluID0gdmlydHVhbF9jb250ZXh0X3BpbiwKKwkudW5waW4gPSBpbnRlbF9scl9jb250ZXh0 X3VucGluLAorCisJLmVudGVyID0gdmlydHVhbF9jb250ZXh0X2VudGVyLAorCS5leGl0ID0gdmly dHVhbF9jb250ZXh0X2V4aXQsCisKKwkuZGVzdHJveSA9IHZpcnR1YWxfY29udGV4dF9kZXN0cm95 LAorfTsKKworc3RydWN0IGludGVsX2NvbnRleHQgKgoraW50ZWxfdmlydHVhbF9lbmdpbmVfY3Jl YXRlKHN0cnVjdCBpOTE1X2dlbV9jb250ZXh0ICpjdHgsCisJCQkgICAgc3RydWN0IGludGVsX2Vu Z2luZV9jcyAqKnNpYmxpbmdzLAorCQkJICAgIHVuc2lnbmVkIGludCBjb3VudCkKK3sKKwlzdHJ1 Y3QgaW50ZWxfdmlydHVhbF9lbmdpbmUgKnZlOworCXVuc2lnbmVkIGludCBuOworCWludCBlcnI7 CisKKwlpZiAoY291bnQgPT0gMCkKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CisKKwlpZiAo Y291bnQgPT0gMSkKKwkJcmV0dXJuIGludGVsX2NvbnRleHRfY3JlYXRlKGN0eCwgc2libGluZ3Nb MF0pOworCisJdmUgPSBremFsbG9jKHN0cnVjdF9zaXplKHZlLCBzaWJsaW5ncywgY291bnQpLCBH RlBfS0VSTkVMKTsKKwlpZiAoIXZlKQorCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKworCXZl LT5iYXNlLmk5MTUgPSBjdHgtPmk5MTU7CisJdmUtPmJhc2UuZ3QgPSBzaWJsaW5nc1swXS0+Z3Q7 CisJdmUtPmJhc2UudW5jb3JlID0gc2libGluZ3NbMF0tPnVuY29yZTsKKwl2ZS0+YmFzZS5pZCA9 IC0xOworCXZlLT5iYXNlLmNsYXNzID0gT1RIRVJfQ0xBU1M7CisJdmUtPmJhc2UudWFiaV9jbGFz cyA9IEk5MTVfRU5HSU5FX0NMQVNTX0lOVkFMSUQ7CisJdmUtPmJhc2UuaW5zdGFuY2UgPSBJOTE1 X0VOR0lORV9DTEFTU19JTlZBTElEX1ZJUlRVQUw7CisKKwkvKgorCSAqIFRoZSBkZWNpc2lvbiBv biB3aGV0aGVyIHRvIHN1Ym1pdCBhIHJlcXVlc3QgdXNpbmcgc2VtYXBob3JlcworCSAqIGRlcGVu ZHMgb24gdGhlIHNhdHVyYXRlZCBzdGF0ZSBvZiB0aGUgZW5naW5lLiBXZSBvbmx5IGNvbXB1dGUK KwkgKiB0aGlzIGR1cmluZyBIVyBzdWJtaXNzaW9uIG9mIHRoZSByZXF1ZXN0LCBhbmQgd2UgbmVl ZCBmb3IgdGhpcworCSAqIHN0YXRlIHRvIGJlIGdsb2JhbGx5IGFwcGxpZWQgdG8gYWxsIHJlcXVl c3RzIGJlaW5nIHN1Ym1pdHRlZAorCSAqIHRvIHRoaXMgZW5naW5lLiBWaXJ0dWFsIGVuZ2luZXMg ZW5jb21wYXNzIG1vcmUgdGhhbiBvbmUgcGh5c2ljYWwKKwkgKiBlbmdpbmUgYW5kIHNvIHdlIGNh bm5vdCBhY2N1cmF0ZWx5IHRlbGwgaW4gYWR2YW5jZSBpZiBvbmUgb2YgdGhvc2UKKwkgKiBlbmdp bmVzIGlzIGFscmVhZHkgc2F0dXJhdGVkIGFuZCBzbyBjYW5ub3QgYWZmb3JkIHRvIHVzZSBhIHNl bWFwaG9yZQorCSAqIGFuZCBiZSBwZXNzaW1pemVkIGluIHByaW9yaXR5IGZvciBkb2luZyBzbyAt LSBpZiB3ZSBhcmUgdGhlIG9ubHkKKwkgKiBjb250ZXh0IHVzaW5nIHNlbWFwaG9yZXMgYWZ0ZXIg YWxsIG90aGVyIGNsaWVudHMgaGF2ZSBzdG9wcGVkLCB3ZQorCSAqIHdpbGwgYmUgc3RhcnZlZCBv biB0aGUgc2F0dXJhdGVkIHN5c3RlbS4gU3VjaCBhIGdsb2JhbCBzd2l0Y2ggZm9yCisJICogc2Vt YXBob3JlcyBpcyBsZXNzIHRoYW4gaWRlYWwsIGJ1dCBhbGFzIGlzIHRoZSBjdXJyZW50IGNvbXBy b21pc2UuCisJICovCisJdmUtPmJhc2Uuc2F0dXJhdGVkID0gQUxMX0VOR0lORVM7CisKKwlzbnBy aW50Zih2ZS0+YmFzZS5uYW1lLCBzaXplb2YodmUtPmJhc2UubmFtZSksICJ2aXJ0dWFsIik7CisK KwlpbnRlbF9lbmdpbmVfaW5pdF9hY3RpdmUoJnZlLT5iYXNlLCBFTkdJTkVfVklSVFVBTCk7CisJ aW50ZWxfZW5naW5lX2luaXRfYnJlYWRjcnVtYnMoJnZlLT5iYXNlKTsKKworCWludGVsX2VuZ2lu ZV9pbml0X2V4ZWNsaXN0cygmdmUtPmJhc2UpOworCisJdmUtPmJhc2UuY29wcyA9ICZ2aXJ0dWFs X2NvbnRleHRfb3BzOworCisJaW50ZWxfZXhlY2xpc3RzX3ZpcnR1YWxfc3VibWlzc2lvbl9pbml0 KHZlKTsKKworCXZlLT5iYXNlLnNjaGVkdWxlID0gaTkxNV9zY2hlZHVsZTsKKworCUlOSVRfTElT VF9IRUFEKGludGVsX3ZpcnR1YWxfZW5naW5lX3F1ZXVlKHZlKSk7CisJdmUtPmJhc2UuZXhlY2xp c3RzLnF1ZXVlX3ByaW9yaXR5X2hpbnQgPSBJTlRfTUlOOworCisJaW50ZWxfY29udGV4dF9pbml0 KCZ2ZS0+Y29udGV4dCwgY3R4LCAmdmUtPmJhc2UpOworCisJZm9yIChuID0gMDsgbiA8IGNvdW50 OyBuKyspIHsKKwkJc3RydWN0IGludGVsX2VuZ2luZV9jcyAqc2libGluZyA9IHNpYmxpbmdzW25d OworCisJCUdFTV9CVUdfT04oIWlzX3Bvd2VyX29mXzIoc2libGluZy0+bWFzaykpOworCQlpZiAo c2libGluZy0+bWFzayAmIHZlLT5iYXNlLm1hc2spIHsKKwkJCURSTV9ERUJVRygiZHVwbGljYXRl ICVzIGVudHJ5IGluIGxvYWQgYmFsYW5jZXJcbiIsCisJCQkJICBzaWJsaW5nLT5uYW1lKTsKKwkJ CWVyciA9IC1FSU5WQUw7CisJCQlnb3RvIGVycl9wdXQ7CisJCX0KKworCQkvKgorCQkgKiBUaGUg dmlydHVhbCBlbmdpbmUgaW1wbGVtZW50YXRpb24gaXMgdGlnaHRseSBjb3VwbGVkIHRvCisJCSAq IHRoZSBleGVjbGlzdHMgYmFja2VuZCAtLSB3ZSBwdXNoIG91dCByZXF1ZXN0IGRpcmVjdGx5CisJ CSAqIGludG8gYSB0cmVlIGluc2lkZSBlYWNoIHBoeXNpY2FsIGVuZ2luZS4gV2UgY291bGQgc3Vw cG9ydAorCQkgKiBsYXllcmluZyBpZiB3ZSBoYW5kbGUgY2xvbmluZyBvZiB0aGUgcmVxdWVzdHMg YW5kCisJCSAqIHN1Ym1pdHRpbmcgYSBjb3B5IGludG8gZWFjaCBiYWNrZW5kLgorCQkgKi8KKwkJ aWYgKCFpbnRlbF9lbmdpbmVfaW5fZXhlY2xpc3RzX3N1Ym1pc3Npb25fbW9kZShzaWJsaW5nKSkg eworCQkJZXJyID0gLUVOT0RFVjsKKwkJCWdvdG8gZXJyX3B1dDsKKwkJfQorCisJCUdFTV9CVUdf T04oUkJfRU1QVFlfTk9ERSgmdmUtPm5vZGVzW3NpYmxpbmctPmlkXS5yYikpOworCQlSQl9DTEVB Ul9OT0RFKCZ2ZS0+bm9kZXNbc2libGluZy0+aWRdLnJiKTsKKworCQl2ZS0+c2libGluZ3NbdmUt Pm51bV9zaWJsaW5ncysrXSA9IHNpYmxpbmc7CisJCXZlLT5iYXNlLm1hc2sgfD0gc2libGluZy0+ bWFzazsKKworCQkvKgorCQkgKiBBbGwgcGh5c2ljYWwgZW5naW5lcyBtdXN0IGJlIGNvbXBhdGli bGUgZm9yIHRoZWlyIGVtaXNzaW9uCisJCSAqIGZ1bmN0aW9ucyAoYXMgd2UgYnVpbGQgdGhlIGlu c3RydWN0aW9ucyBkdXJpbmcgcmVxdWVzdAorCQkgKiBjb25zdHJ1Y3Rpb24gYW5kIGRvIG5vdCBh bHRlciB0aGVtIGJlZm9yZSBzdWJtaXNzaW9uCisJCSAqIG9uIHRoZSBwaHlzaWNhbCBlbmdpbmUp LiBXZSB1c2UgdGhlIGVuZ2luZSBjbGFzcyBhcyBhIGd1aWRlCisJCSAqIGhlcmUsIGFsdGhvdWdo IHRoYXQgY291bGQgYmUgcmVmaW5lZC4KKwkJICovCisJCWlmICh2ZS0+YmFzZS5jbGFzcyAhPSBP VEhFUl9DTEFTUykgeworCQkJaWYgKHZlLT5iYXNlLmNsYXNzICE9IHNpYmxpbmctPmNsYXNzKSB7 CisJCQkJRFJNX0RFQlVHKCJpbnZhbGlkIG1peGluZyBvZiBlbmdpbmUgY2xhc3MsIHNpYmxpbmcg JWQsIGFscmVhZHkgJWRcbiIsCisJCQkJCSAgc2libGluZy0+Y2xhc3MsIHZlLT5iYXNlLmNsYXNz KTsKKwkJCQllcnIgPSAtRUlOVkFMOworCQkJCWdvdG8gZXJyX3B1dDsKKwkJCX0KKwkJCWNvbnRp bnVlOworCQl9CisKKwkJdmUtPmJhc2UuY2xhc3MgPSBzaWJsaW5nLT5jbGFzczsKKwkJdmUtPmJh c2UudWFiaV9jbGFzcyA9IHNpYmxpbmctPnVhYmlfY2xhc3M7CisJCXNucHJpbnRmKHZlLT5iYXNl Lm5hbWUsIHNpemVvZih2ZS0+YmFzZS5uYW1lKSwKKwkJCSAidiVkeCVkIiwgdmUtPmJhc2UuY2xh c3MsIGNvdW50KTsKKwkJdmUtPmJhc2UuY29udGV4dF9zaXplID0gc2libGluZy0+Y29udGV4dF9z aXplOworCisJCXZlLT5iYXNlLmVtaXRfYmJfc3RhcnQgPSBzaWJsaW5nLT5lbWl0X2JiX3N0YXJ0 OworCQl2ZS0+YmFzZS5lbWl0X2ZsdXNoID0gc2libGluZy0+ZW1pdF9mbHVzaDsKKwkJdmUtPmJh c2UuZW1pdF9pbml0X2JyZWFkY3J1bWIgPSBzaWJsaW5nLT5lbWl0X2luaXRfYnJlYWRjcnVtYjsK KwkJdmUtPmJhc2UuZW1pdF9maW5pX2JyZWFkY3J1bWIgPSBzaWJsaW5nLT5lbWl0X2ZpbmlfYnJl YWRjcnVtYjsKKwkJdmUtPmJhc2UuZW1pdF9maW5pX2JyZWFkY3J1bWJfZHcgPQorCQkJc2libGlu Zy0+ZW1pdF9maW5pX2JyZWFkY3J1bWJfZHc7CisKKwkJdmUtPmJhc2UuZmxhZ3MgPSBzaWJsaW5n LT5mbGFnczsKKwl9CisKKwl2ZS0+YmFzZS5mbGFncyB8PSBJOTE1X0VOR0lORV9JU19WSVJUVUFM OworCisJZXJyID0gaW50ZWxfbHJfY29udGV4dF9hbGxvYygmdmUtPmNvbnRleHQsIHNpYmxpbmdz WzBdKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9wdXQ7CisKKwlfX3NldF9iaXQoQ09OVEVYVF9B TExPQ19CSVQsICZ2ZS0+Y29udGV4dC5mbGFncyk7CisKKwlyZXR1cm4gJnZlLT5jb250ZXh0Owor CitlcnJfcHV0OgorCWludGVsX2NvbnRleHRfcHV0KCZ2ZS0+Y29udGV4dCk7CisJcmV0dXJuIEVS Ul9QVFIoZXJyKTsKK30KKworc3RydWN0IGludGVsX2NvbnRleHQgKgoraW50ZWxfdmlydHVhbF9l bmdpbmVfY2xvbmUoc3RydWN0IGk5MTVfZ2VtX2NvbnRleHQgKmN0eCwKKwkJCSAgIHN0cnVjdCBp bnRlbF9lbmdpbmVfY3MgKnNyYykKK3sKKwlzdHJ1Y3QgaW50ZWxfdmlydHVhbF9lbmdpbmUgKnNl ID0gdG9fdmlydHVhbF9lbmdpbmUoc3JjKTsKKwlzdHJ1Y3QgaW50ZWxfY29udGV4dCAqZHN0Owor CisJZHN0ID0gaW50ZWxfdmlydHVhbF9lbmdpbmVfY3JlYXRlKGN0eCwgc2UtPnNpYmxpbmdzLCBz ZS0+bnVtX3NpYmxpbmdzKTsKKwlpZiAoSVNfRVJSKGRzdCkpCisJCXJldHVybiBkc3Q7CisKKwlp ZiAoc2UtPm51bV9ib25kcykgeworCQlzdHJ1Y3QgaW50ZWxfdmlydHVhbF9lbmdpbmUgKmRlID0K KwkJCXRvX3ZpcnR1YWxfZW5naW5lKGRzdC0+ZW5naW5lKTsKKworCQlkZS0+Ym9uZHMgPSBrbWVt ZHVwKHNlLT5ib25kcywKKwkJCQkgICAgc2l6ZW9mKCpzZS0+Ym9uZHMpICogc2UtPm51bV9ib25k cywKKwkJCQkgICAgR0ZQX0tFUk5FTCk7CisJCWlmICghZGUtPmJvbmRzKSB7CisJCQlpbnRlbF9j b250ZXh0X3B1dChkc3QpOworCQkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisJCX0KKworCQlk ZS0+bnVtX2JvbmRzID0gc2UtPm51bV9ib25kczsKKwl9CisKKwlyZXR1cm4gZHN0OworfQorCitz dHJ1Y3QgdmVfYm9uZCAqCitpbnRlbF92aXJ0dWFsX2VuZ2luZV9maW5kX2JvbmQoc3RydWN0IGlu dGVsX3ZpcnR1YWxfZW5naW5lICp2ZSwKKwkJCSAgICAgICBjb25zdCBzdHJ1Y3QgaW50ZWxfZW5n aW5lX2NzICptYXN0ZXIpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgdmUtPm51bV9i b25kczsgaSsrKSB7CisJCWlmICh2ZS0+Ym9uZHNbaV0ubWFzdGVyID09IG1hc3RlcikKKwkJCXJl dHVybiAmdmUtPmJvbmRzW2ldOworCX0KKworCXJldHVybiBOVUxMOworfQorCitpbnQgaW50ZWxf dmlydHVhbF9lbmdpbmVfYXR0YWNoX2JvbmQoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5l LAorCQkJCSAgICAgY29uc3Qgc3RydWN0IGludGVsX2VuZ2luZV9jcyAqbWFzdGVyLAorCQkJCSAg ICAgY29uc3Qgc3RydWN0IGludGVsX2VuZ2luZV9jcyAqc2libGluZykKK3sKKwlzdHJ1Y3QgaW50 ZWxfdmlydHVhbF9lbmdpbmUgKnZlID0gdG9fdmlydHVhbF9lbmdpbmUoZW5naW5lKTsKKwlzdHJ1 Y3QgdmVfYm9uZCAqYm9uZDsKKwlpbnQgbjsKKworCS8qIFNhbml0eSBjaGVjayB0aGUgc2libGlu ZyBpcyBwYXJ0IG9mIHRoZSB2aXJ0dWFsIGVuZ2luZSAqLworCWZvciAobiA9IDA7IG4gPCB2ZS0+ bnVtX3NpYmxpbmdzOyBuKyspCisJCWlmIChzaWJsaW5nID09IHZlLT5zaWJsaW5nc1tuXSkKKwkJ CWJyZWFrOworCWlmIChuID09IHZlLT5udW1fc2libGluZ3MpCisJCXJldHVybiAtRUlOVkFMOwor CisJYm9uZCA9IGludGVsX3ZpcnR1YWxfZW5naW5lX2ZpbmRfYm9uZCh2ZSwgbWFzdGVyKTsKKwlp ZiAoYm9uZCkgeworCQlib25kLT5zaWJsaW5nX21hc2sgfD0gc2libGluZy0+bWFzazsKKwkJcmV0 dXJuIDA7CisJfQorCisJYm9uZCA9IGtyZWFsbG9jKHZlLT5ib25kcywKKwkJCXNpemVvZigqYm9u ZCkgKiAodmUtPm51bV9ib25kcyArIDEpLAorCQkJR0ZQX0tFUk5FTCk7CisJaWYgKCFib25kKQor CQlyZXR1cm4gLUVOT01FTTsKKworCWJvbmRbdmUtPm51bV9ib25kc10ubWFzdGVyID0gbWFzdGVy OworCWJvbmRbdmUtPm51bV9ib25kc10uc2libGluZ19tYXNrID0gc2libGluZy0+bWFzazsKKwor CXZlLT5ib25kcyA9IGJvbmQ7CisJdmUtPm51bV9ib25kcysrOworCisJcmV0dXJuIDA7Cit9CisK K3N0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKgoraW50ZWxfdmlydHVhbF9lbmdpbmVfZ2V0X3NpYmxp bmcoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLAorCQkJCSB1bnNpZ25lZCBpbnQgc2li bGluZykKK3sKKwlzdHJ1Y3QgaW50ZWxfdmlydHVhbF9lbmdpbmUgKnZlID0gdG9fdmlydHVhbF9l bmdpbmUoZW5naW5lKTsKKworCWlmIChzaWJsaW5nID49IHZlLT5udW1fc2libGluZ3MpCisJCXJl dHVybiBOVUxMOworCisJcmV0dXJuIHZlLT5zaWJsaW5nc1tzaWJsaW5nXTsKK30KKwpkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfdmlydHVhbF9lbmdpbmUuaCBiL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX3ZpcnR1YWxfZW5naW5lLmgKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5hY2RhODlhYjNmOTkKLS0tIC9kZXYvbnVsbAor KysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF92aXJ0dWFsX2VuZ2luZS5oCkBAIC0w LDAgKzEsNDggQEAKKy8qCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUCisgKgorICog Q29weXJpZ2h0IMKpIDIwMTkgSW50ZWwgQ29ycG9yYXRpb24KKyAqLworCisjaWZuZGVmIF9fSU5U RUxfVklSVFVBTF9FTkdJTkVfXworI2RlZmluZSBfX0lOVEVMX1ZJUlRVQUxfRU5HSU5FX18KKwor I2luY2x1ZGUgImk5MTVfZ2VtLmgiCisjaW5jbHVkZSAiaW50ZWxfdmlydHVhbF9lbmdpbmVfdHlw ZXMuaCIKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgaW50ZWxfdmlydHVhbF9lbmdpbmUgKgordG9f dmlydHVhbF9lbmdpbmUoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQoreworCUdFTV9C VUdfT04oIWludGVsX2VuZ2luZV9pc192aXJ0dWFsKGVuZ2luZSkpOworCXJldHVybiBjb250YWlu ZXJfb2YoZW5naW5lLCBzdHJ1Y3QgaW50ZWxfdmlydHVhbF9lbmdpbmUsIGJhc2UpOworfQorCitz dGF0aWMgaW5saW5lIHN0cnVjdCBsaXN0X2hlYWQgKgoraW50ZWxfdmlydHVhbF9lbmdpbmVfcXVl dWUoc3RydWN0IGludGVsX3ZpcnR1YWxfZW5naW5lICp2ZSkKK3sKKwlyZXR1cm4gJnZlLT5iYXNl LmV4ZWNsaXN0cy5kZWZhdWx0X3ByaW9saXN0LnJlcXVlc3RzWzBdOworfQorCitzdHJ1Y3QgaW50 ZWxfY29udGV4dCAqCitpbnRlbF92aXJ0dWFsX2VuZ2luZV9jcmVhdGUoc3RydWN0IGk5MTVfZ2Vt X2NvbnRleHQgKmN0eCwKKwkJCSAgICBzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICoqc2libGluZ3Ms CisJCQkJICAgIHVuc2lnbmVkIGludCBjb3VudCk7CisKK3N0cnVjdCBpbnRlbF9jb250ZXh0ICoK K2ludGVsX3ZpcnR1YWxfZW5naW5lX2Nsb25lKHN0cnVjdCBpOTE1X2dlbV9jb250ZXh0ICpjdHgs CisJCQkgICBzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpzcmMpOworCisKK3N0cnVjdCB2ZV9ib25k ICoKK2ludGVsX3ZpcnR1YWxfZW5naW5lX2ZpbmRfYm9uZChzdHJ1Y3QgaW50ZWxfdmlydHVhbF9l bmdpbmUgKnZlLAorCQkJICAgICAgIGNvbnN0IHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKm1hc3Rl cik7CisKK2ludCBpbnRlbF92aXJ0dWFsX2VuZ2luZV9hdHRhY2hfYm9uZChzdHJ1Y3QgaW50ZWxf ZW5naW5lX2NzICplbmdpbmUsCisJCQkJICAgICBjb25zdCBzdHJ1Y3QgaW50ZWxfZW5naW5lX2Nz ICptYXN0ZXIsCisJCQkJICAgICBjb25zdCBzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpzaWJsaW5n KTsKKworc3RydWN0IGludGVsX2VuZ2luZV9jcyAqCitpbnRlbF92aXJ0dWFsX2VuZ2luZV9nZXRf c2libGluZyhzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUsCisJCQkJIHVuc2lnbmVkIGlu dCBzaWJsaW5nKTsKKworI2VuZGlmIC8qIF9fSU5URUxfVklSVFVBTF9FTkdJTkVfXyAqLwpkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Qvc2VsZnRlc3RfbHJjLmMgYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9ndC9zZWxmdGVzdF9scmMuYwppbmRleCBiNDUzNzQ5N2MzYmUuLjU3MGM3 ODkxYzYyZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Qvc2VsZnRlc3RfbHJj LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Qvc2VsZnRlc3RfbHJjLmMKQEAgLTI2MzUs OCArMjYzNSw3IEBAIHN0YXRpYyBpbnQgbm9wX3ZpcnR1YWxfZW5naW5lKHN0cnVjdCBpbnRlbF9n dCAqZ3QsCiAJCQlnb3RvIG91dDsKIAkJfQogCi0JCXZlW25dID0gaW50ZWxfZXhlY2xpc3RzX2Ny ZWF0ZV92aXJ0dWFsKGN0eFtuXSwKLQkJCQkJCSAgICAgICBzaWJsaW5ncywgbnNpYmxpbmcpOwor CQl2ZVtuXSA9IGludGVsX3ZpcnR1YWxfZW5naW5lX2NyZWF0ZShjdHhbbl0sIHNpYmxpbmdzLCBu c2libGluZyk7CiAJCWlmIChJU19FUlIodmVbbl0pKSB7CiAJCQlrZXJuZWxfY29udGV4dF9jbG9z ZShjdHhbbl0pOwogCQkJZXJyID0gUFRSX0VSUih2ZVtuXSk7CkBAIC0yODE2LDcgKzI4MTUsNyBA QCBzdGF0aWMgaW50IG1hc2tfdmlydHVhbF9lbmdpbmUoc3RydWN0IGludGVsX2d0ICpndCwKIAlp ZiAoIWN0eCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQl2ZSA9IGludGVsX2V4ZWNsaXN0c19jcmVh dGVfdmlydHVhbChjdHgsIHNpYmxpbmdzLCBuc2libGluZyk7CisJdmUgPSBpbnRlbF92aXJ0dWFs X2VuZ2luZV9jcmVhdGUoY3R4LCBzaWJsaW5ncywgbnNpYmxpbmcpOwogCWlmIChJU19FUlIodmUp KSB7CiAJCWVyciA9IFBUUl9FUlIodmUpOwogCQlnb3RvIG91dF9jbG9zZTsKQEAgLTI5NDIsNyAr Mjk0MSw3IEBAIHN0YXRpYyBpbnQgcHJlc2VydmVkX3ZpcnR1YWxfZW5naW5lKHN0cnVjdCBpbnRl bF9ndCAqZ3QsCiAJCWdvdG8gb3V0X2Nsb3NlOwogCX0KIAotCXZlID0gaW50ZWxfZXhlY2xpc3Rz X2NyZWF0ZV92aXJ0dWFsKGN0eCwgc2libGluZ3MsIG5zaWJsaW5nKTsKKwl2ZSA9IGludGVsX3Zp cnR1YWxfZW5naW5lX2NyZWF0ZShjdHgsIHNpYmxpbmdzLCBuc2libGluZyk7CiAJaWYgKElTX0VS Uih2ZSkpIHsKIAkJZXJyID0gUFRSX0VSUih2ZSk7CiAJCWdvdG8gb3V0X3NjcmF0Y2g7CkBAIC0z MTcyLDkgKzMxNzEsOSBAQCBzdGF0aWMgaW50IGJvbmRfdmlydHVhbF9lbmdpbmUoc3RydWN0IGlu dGVsX2d0ICpndCwKIAkJZm9yIChuID0gMDsgbiA8IG5zaWJsaW5nOyBuKyspIHsKIAkJCXN0cnVj dCBpbnRlbF9jb250ZXh0ICp2ZTsKIAotCQkJdmUgPSBpbnRlbF9leGVjbGlzdHNfY3JlYXRlX3Zp cnR1YWwoY3R4LAotCQkJCQkJCSAgICBzaWJsaW5ncywKLQkJCQkJCQkgICAgbnNpYmxpbmcpOwor CQkJdmUgPSBpbnRlbF92aXJ0dWFsX2VuZ2luZV9jcmVhdGUoY3R4LAorCQkJCQkJCSBzaWJsaW5n cywKKwkJCQkJCQkgbnNpYmxpbmcpOwogCQkJaWYgKElTX0VSUih2ZSkpIHsKIAkJCQllcnIgPSBQ VFJfRVJSKHZlKTsKIAkJCQlvbnN0YWNrX2ZlbmNlX2ZpbmkoJmZlbmNlKTsKLS0gCjIuMjMuMAoK X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4 IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlz dHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==