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.8 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,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 9753FC47082 for ; Tue, 8 Jun 2021 11:03:42 +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 67D1E6105A for ; Tue, 8 Jun 2021 11:03:40 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 67D1E6105A 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 6DC036E131; Tue, 8 Jun 2021 11:03:34 +0000 (UTC) Received: from mga07.intel.com (mga07.intel.com [134.134.136.100]) by gabe.freedesktop.org (Postfix) with ESMTPS id 918A76E111; Tue, 8 Jun 2021 11:03:32 +0000 (UTC) IronPort-SDR: qXDxu/cQ/R1Ftm0LQlhtK2486/UyVNS0Z1tpHEBG+o8igsXCq1TiPaaFJ6iRKzyIK0H+nQaQZ2 4hVTVB6TkWMQ== X-IronPort-AV: E=McAfee;i="6200,9189,10008"; a="268674745" X-IronPort-AV: E=Sophos;i="5.83,257,1616482800"; d="scan'208";a="268674745" Received: from fmsmga001.fm.intel.com ([10.253.24.23]) by orsmga105.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 08 Jun 2021 04:03:24 -0700 IronPort-SDR: duh9XsWcBXoRENg+z4WYzKh0vP00WZJKzXAgBIXcjrvBBAFr9W8rU1MC9yb3PV+1gU6EHhifav fNch3fJ8dxiA== X-IronPort-AV: E=Sophos;i="5.83,257,1616482800"; d="scan'208";a="552237164" Received: from mrahim1x-mobl.gar.corp.intel.com (HELO mwauld-desk1.intel.com) ([10.215.170.251]) by fmsmga001-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 08 Jun 2021 04:03:20 -0700 From: Matthew Auld To: intel-gfx@lists.freedesktop.org Date: Tue, 8 Jun 2021 12:02:48 +0100 Message-Id: <20210608110254.169357-2-matthew.auld@intel.com> X-Mailer: git-send-email 2.26.3 In-Reply-To: <20210608110254.169357-1-matthew.auld@intel.com> References: <20210608110254.169357-1-matthew.auld@intel.com> MIME-Version: 1.0 Subject: [Intel-gfx] [PATCH v3 1/7] drm/i915/ttm: add ttm_buddy_man 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: =?UTF-8?q?Thomas=20Hellstr=C3=B6m?= , dri-devel@lists.freedesktop.org Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" QWRkIGJhY2sgb3VyIHN0YW5kYWxvbmUgaTkxNV9idWRkeSBhbGxvY2F0b3IgYW5kIGludGVncmF0 ZSBpdCBpbnRvIGEKdHRtX3Jlc291cmNlX21hbmFnZXIuIFRoaXMgd2lsbCBwbHVnIGludG8gb3Vy IHR0bSBiYWNrZW5kIGZvciBtYW5hZ2luZwpkZXZpY2UgbG9jYWwtbWVtb3J5IGluIHRoZSBuZXh0 IGNvdXBsZSBvZiBwYXRjaGVzLgoKdjIoVGhvbWFzKToKICAgIC0gUmV0dXJuIC1FTk9TUEMgZnJv bSB0aGUgYnVkZHk7IHR0bSBleHBlY3RzIHRoaXMgaW4gb3JkZXIgdG8KICAgICAgdHJpZ2dlciBl dmljdGlvbgogICAgLSBEcm9wIHRoZSB1bm5lY2Vzc2FyeSBpbmxpbmUKICAgIC0gYm8tPnBhZ2Vf YWxpZ25tZW50IGlzIGluIHBhZ2UgdW5pdHMKClNpZ25lZC1vZmYtYnk6IE1hdHRoZXcgQXVsZCA8 bWF0dGhldy5hdWxkQGludGVsLmNvbT4KQ2M6IFRob21hcyBIZWxsc3Ryw7ZtIDx0aG9tYXMuaGVs bHN0cm9tQGxpbnV4LmludGVsLmNvbT4KQWNrZWQtYnk6IFRob21hcyBIZWxsc3Ryw7ZtIDx0aG9t YXMuaGVsbHN0cm9tQGxpbnV4LmludGVsLmNvbT4KLS0tCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9N YWtlZmlsZSAgICAgICAgICAgICAgICAgfCAgIDIgKwogZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkx NV9idWRkeS5jICAgICAgICAgICAgIHwgNDEyICsrKysrKysrKwogZHJpdmVycy9ncHUvZHJtL2k5 MTUvaTkxNV9idWRkeS5oICAgICAgICAgICAgIHwgMTMzICsrKwogZHJpdmVycy9ncHUvZHJtL2k5 MTUvaTkxNV90dG1fYnVkZHlfbWFuYWdlci5jIHwgMjQ4ICsrKysrKwogZHJpdmVycy9ncHUvZHJt L2k5MTUvaTkxNV90dG1fYnVkZHlfbWFuYWdlci5oIHwgIDU2ICsrCiBkcml2ZXJzL2dwdS9kcm0v aTkxNS9zZWxmdGVzdHMvaTkxNV9idWRkeS5jICAgfCA3ODkgKysrKysrKysrKysrKysrKysrCiA2 IGZpbGVzIGNoYW5nZWQsIDE2NDAgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRy aXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfYnVkZHkuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZl cnMvZ3B1L2RybS9pOTE1L2k5MTVfYnVkZHkuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMv Z3B1L2RybS9pOTE1L2k5MTVfdHRtX2J1ZGR5X21hbmFnZXIuYwogY3JlYXRlIG1vZGUgMTAwNjQ0 IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfdHRtX2J1ZGR5X21hbmFnZXIuaAogY3JlYXRlIG1v ZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pOTE1X2J1ZGR5LmMKCmRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L01ha2VmaWxlCmluZGV4IGY1N2RmYzc0ZDZjZS4uNmM4NGU5NmFiMjZhIDEwMDY0NAot LS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2dwdS9kcm0v aTkxNS9NYWtlZmlsZQpAQCAtMTYyLDYgKzE2Miw3IEBAIGdlbS15ICs9IFwKIGk5MTUteSArPSBc CiAJICAkKGdlbS15KSBcCiAJICBpOTE1X2FjdGl2ZS5vIFwKKwkgIGk5MTVfYnVkZHkubyBcCiAJ ICBpOTE1X2NtZF9wYXJzZXIubyBcCiAJICBpOTE1X2dlbV9ldmljdC5vIFwKIAkgIGk5MTVfZ2Vt X2d0dC5vIFwKQEAgLTE3MSw2ICsxNzIsNyBAQCBpOTE1LXkgKz0gXAogCSAgaTkxNV9yZXF1ZXN0 Lm8gXAogCSAgaTkxNV9zY2hlZHVsZXIubyBcCiAJICBpOTE1X3RyYWNlX3BvaW50cy5vIFwKKwkg IGk5MTVfdHRtX2J1ZGR5X21hbmFnZXIubyBcCiAJICBpOTE1X3ZtYS5vIFwKIAkgIGludGVsX3dv cGNtLm8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9idWRkeS5jIGIv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9idWRkeS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAwMDAwMC4uMjlkZDdkMDMxMGMxCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaTkxNV9idWRkeS5jCkBAIC0wLDAgKzEsNDEyIEBACisvLyBTUERYLUxp Y2Vuc2UtSWRlbnRpZmllcjogTUlUCisvKgorICogQ29weXJpZ2h0IMKpIDIwMjEgSW50ZWwgQ29y cG9yYXRpb24KKyAqLworCisjaW5jbHVkZSA8bGludXgva21lbWxlYWsuaD4KKworI2luY2x1ZGUg Imk5MTVfYnVkZHkuaCIKKworI2luY2x1ZGUgImk5MTVfZ2VtLmgiCisjaW5jbHVkZSAiaTkxNV91 dGlscy5oIgorCitzdGF0aWMgc3RydWN0IGk5MTVfYnVkZHlfYmxvY2sgKmk5MTVfYmxvY2tfYWxs b2Moc3RydWN0IGk5MTVfYnVkZHlfbW0gKm1tLAorCQkJCQkJIHN0cnVjdCBpOTE1X2J1ZGR5X2Js b2NrICpwYXJlbnQsCisJCQkJCQkgdW5zaWduZWQgaW50IG9yZGVyLAorCQkJCQkJIHU2NCBvZmZz ZXQpCit7CisJc3RydWN0IGk5MTVfYnVkZHlfYmxvY2sgKmJsb2NrOworCisJR0VNX0JVR19PTihv cmRlciA+IEk5MTVfQlVERFlfTUFYX09SREVSKTsKKworCWJsb2NrID0ga21lbV9jYWNoZV96YWxs b2MobW0tPnNsYWJfYmxvY2tzLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJsb2NrKQorCQlyZXR1cm4g TlVMTDsKKworCWJsb2NrLT5oZWFkZXIgPSBvZmZzZXQ7CisJYmxvY2stPmhlYWRlciB8PSBvcmRl cjsKKwlibG9jay0+cGFyZW50ID0gcGFyZW50OworCisJR0VNX0JVR19PTihibG9jay0+aGVhZGVy ICYgSTkxNV9CVUREWV9IRUFERVJfVU5VU0VEKTsKKwlyZXR1cm4gYmxvY2s7Cit9CisKK3N0YXRp YyB2b2lkIGk5MTVfYmxvY2tfZnJlZShzdHJ1Y3QgaTkxNV9idWRkeV9tbSAqbW0sCisJCQkgICAg c3RydWN0IGk5MTVfYnVkZHlfYmxvY2sgKmJsb2NrKQoreworCWttZW1fY2FjaGVfZnJlZShtbS0+ c2xhYl9ibG9ja3MsIGJsb2NrKTsKK30KKworc3RhdGljIHZvaWQgbWFya19hbGxvY2F0ZWQoc3Ry dWN0IGk5MTVfYnVkZHlfYmxvY2sgKmJsb2NrKQoreworCWJsb2NrLT5oZWFkZXIgJj0gfkk5MTVf QlVERFlfSEVBREVSX1NUQVRFOworCWJsb2NrLT5oZWFkZXIgfD0gSTkxNV9CVUREWV9BTExPQ0FU RUQ7CisKKwlsaXN0X2RlbCgmYmxvY2stPmxpbmspOworfQorCitzdGF0aWMgdm9pZCBtYXJrX2Zy ZWUoc3RydWN0IGk5MTVfYnVkZHlfbW0gKm1tLAorCQkgICAgICBzdHJ1Y3QgaTkxNV9idWRkeV9i bG9jayAqYmxvY2spCit7CisJYmxvY2stPmhlYWRlciAmPSB+STkxNV9CVUREWV9IRUFERVJfU1RB VEU7CisJYmxvY2stPmhlYWRlciB8PSBJOTE1X0JVRERZX0ZSRUU7CisKKwlsaXN0X2FkZCgmYmxv Y2stPmxpbmssCisJCSAmbW0tPmZyZWVfbGlzdFtpOTE1X2J1ZGR5X2Jsb2NrX29yZGVyKGJsb2Nr KV0pOworfQorCitzdGF0aWMgdm9pZCBtYXJrX3NwbGl0KHN0cnVjdCBpOTE1X2J1ZGR5X2Jsb2Nr ICpibG9jaykKK3sKKwlibG9jay0+aGVhZGVyICY9IH5JOTE1X0JVRERZX0hFQURFUl9TVEFURTsK KwlibG9jay0+aGVhZGVyIHw9IEk5MTVfQlVERFlfU1BMSVQ7CisKKwlsaXN0X2RlbCgmYmxvY2st PmxpbmspOworfQorCitpbnQgaTkxNV9idWRkeV9pbml0KHN0cnVjdCBpOTE1X2J1ZGR5X21tICpt bSwgdTY0IHNpemUsIHU2NCBjaHVua19zaXplKQoreworCXVuc2lnbmVkIGludCBpOworCXU2NCBv ZmZzZXQ7CisKKwlpZiAoc2l6ZSA8IGNodW5rX3NpemUpCisJCXJldHVybiAtRUlOVkFMOworCisJ aWYgKGNodW5rX3NpemUgPCBQQUdFX1NJWkUpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKCFp c19wb3dlcl9vZl8yKGNodW5rX3NpemUpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXNpemUgPSBy b3VuZF9kb3duKHNpemUsIGNodW5rX3NpemUpOworCisJbW0tPnNpemUgPSBzaXplOworCW1tLT5j aHVua19zaXplID0gY2h1bmtfc2l6ZTsKKwltbS0+bWF4X29yZGVyID0gaWxvZzIoc2l6ZSkgLSBp bG9nMihjaHVua19zaXplKTsKKworCUdFTV9CVUdfT04obW0tPm1heF9vcmRlciA+IEk5MTVfQlVE RFlfTUFYX09SREVSKTsKKworCW1tLT5zbGFiX2Jsb2NrcyA9IEtNRU1fQ0FDSEUoaTkxNV9idWRk eV9ibG9jaywgU0xBQl9IV0NBQ0hFX0FMSUdOKTsKKwlpZiAoIW1tLT5zbGFiX2Jsb2NrcykKKwkJ cmV0dXJuIC1FTk9NRU07CisKKwltbS0+ZnJlZV9saXN0ID0ga21hbGxvY19hcnJheShtbS0+bWF4 X29yZGVyICsgMSwKKwkJCQkgICAgICBzaXplb2Yoc3RydWN0IGxpc3RfaGVhZCksCisJCQkJICAg ICAgR0ZQX0tFUk5FTCk7CisJaWYgKCFtbS0+ZnJlZV9saXN0KQorCQlnb3RvIG91dF9kZXN0cm95 X3NsYWI7CisKKwlmb3IgKGkgPSAwOyBpIDw9IG1tLT5tYXhfb3JkZXI7ICsraSkKKwkJSU5JVF9M SVNUX0hFQUQoJm1tLT5mcmVlX2xpc3RbaV0pOworCisJbW0tPm5fcm9vdHMgPSBod2VpZ2h0NjQo c2l6ZSk7CisKKwltbS0+cm9vdHMgPSBrbWFsbG9jX2FycmF5KG1tLT5uX3Jvb3RzLAorCQkJCSAg c2l6ZW9mKHN0cnVjdCBpOTE1X2J1ZGR5X2Jsb2NrICopLAorCQkJCSAgR0ZQX0tFUk5FTCk7CisJ aWYgKCFtbS0+cm9vdHMpCisJCWdvdG8gb3V0X2ZyZWVfbGlzdDsKKworCW9mZnNldCA9IDA7CisJ aSA9IDA7CisKKwkvKgorCSAqIFNwbGl0IGludG8gcG93ZXItb2YtdHdvIGJsb2NrcywgaW4gY2Fz ZSB3ZSBhcmUgZ2l2ZW4gYSBzaXplIHRoYXQgaXMKKwkgKiBub3QgaXRzZWxmIGEgcG93ZXItb2Yt dHdvLgorCSAqLworCWRvIHsKKwkJc3RydWN0IGk5MTVfYnVkZHlfYmxvY2sgKnJvb3Q7CisJCXVu c2lnbmVkIGludCBvcmRlcjsKKwkJdTY0IHJvb3Rfc2l6ZTsKKworCQlyb290X3NpemUgPSByb3Vu ZGRvd25fcG93X29mX3R3byhzaXplKTsKKwkJb3JkZXIgPSBpbG9nMihyb290X3NpemUpIC0gaWxv ZzIoY2h1bmtfc2l6ZSk7CisKKwkJcm9vdCA9IGk5MTVfYmxvY2tfYWxsb2MobW0sIE5VTEwsIG9y ZGVyLCBvZmZzZXQpOworCQlpZiAoIXJvb3QpCisJCQlnb3RvIG91dF9mcmVlX3Jvb3RzOworCisJ CW1hcmtfZnJlZShtbSwgcm9vdCk7CisKKwkJR0VNX0JVR19PTihpID4gbW0tPm1heF9vcmRlcik7 CisJCUdFTV9CVUdfT04oaTkxNV9idWRkeV9ibG9ja19zaXplKG1tLCByb290KSA8IGNodW5rX3Np emUpOworCisJCW1tLT5yb290c1tpXSA9IHJvb3Q7CisKKwkJb2Zmc2V0ICs9IHJvb3Rfc2l6ZTsK KwkJc2l6ZSAtPSByb290X3NpemU7CisJCWkrKzsKKwl9IHdoaWxlIChzaXplKTsKKworCXJldHVy biAwOworCitvdXRfZnJlZV9yb290czoKKwl3aGlsZSAoaS0tKQorCQlpOTE1X2Jsb2NrX2ZyZWUo bW0sIG1tLT5yb290c1tpXSk7CisJa2ZyZWUobW0tPnJvb3RzKTsKK291dF9mcmVlX2xpc3Q6CisJ a2ZyZWUobW0tPmZyZWVfbGlzdCk7CitvdXRfZGVzdHJveV9zbGFiOgorCWttZW1fY2FjaGVfZGVz dHJveShtbS0+c2xhYl9ibG9ja3MpOworCXJldHVybiAtRU5PTUVNOworfQorCit2b2lkIGk5MTVf YnVkZHlfZmluaShzdHJ1Y3QgaTkxNV9idWRkeV9tbSAqbW0pCit7CisJaW50IGk7CisKKwlmb3Ig KGkgPSAwOyBpIDwgbW0tPm5fcm9vdHM7ICsraSkgeworCQlHRU1fV0FSTl9PTighaTkxNV9idWRk eV9ibG9ja19pc19mcmVlKG1tLT5yb290c1tpXSkpOworCQlpOTE1X2Jsb2NrX2ZyZWUobW0sIG1t LT5yb290c1tpXSk7CisJfQorCisJa2ZyZWUobW0tPnJvb3RzKTsKKwlrZnJlZShtbS0+ZnJlZV9s aXN0KTsKKwlrbWVtX2NhY2hlX2Rlc3Ryb3kobW0tPnNsYWJfYmxvY2tzKTsKK30KKworc3RhdGlj IGludCBzcGxpdF9ibG9jayhzdHJ1Y3QgaTkxNV9idWRkeV9tbSAqbW0sCisJCSAgICAgICBzdHJ1 Y3QgaTkxNV9idWRkeV9ibG9jayAqYmxvY2spCit7CisJdW5zaWduZWQgaW50IGJsb2NrX29yZGVy ID0gaTkxNV9idWRkeV9ibG9ja19vcmRlcihibG9jaykgLSAxOworCXU2NCBvZmZzZXQgPSBpOTE1 X2J1ZGR5X2Jsb2NrX29mZnNldChibG9jayk7CisKKwlHRU1fQlVHX09OKCFpOTE1X2J1ZGR5X2Js b2NrX2lzX2ZyZWUoYmxvY2spKTsKKwlHRU1fQlVHX09OKCFpOTE1X2J1ZGR5X2Jsb2NrX29yZGVy KGJsb2NrKSk7CisKKwlibG9jay0+bGVmdCA9IGk5MTVfYmxvY2tfYWxsb2MobW0sIGJsb2NrLCBi bG9ja19vcmRlciwgb2Zmc2V0KTsKKwlpZiAoIWJsb2NrLT5sZWZ0KQorCQlyZXR1cm4gLUVOT01F TTsKKworCWJsb2NrLT5yaWdodCA9IGk5MTVfYmxvY2tfYWxsb2MobW0sIGJsb2NrLCBibG9ja19v cmRlciwKKwkJCQkJb2Zmc2V0ICsgKG1tLT5jaHVua19zaXplIDw8IGJsb2NrX29yZGVyKSk7CisJ aWYgKCFibG9jay0+cmlnaHQpIHsKKwkJaTkxNV9ibG9ja19mcmVlKG1tLCBibG9jay0+bGVmdCk7 CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCW1hcmtfZnJlZShtbSwgYmxvY2stPmxlZnQpOwor CW1hcmtfZnJlZShtbSwgYmxvY2stPnJpZ2h0KTsKKworCW1hcmtfc3BsaXQoYmxvY2spOworCisJ cmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaTkxNV9idWRkeV9ibG9jayAqCitnZXRfYnVk ZHkoc3RydWN0IGk5MTVfYnVkZHlfYmxvY2sgKmJsb2NrKQoreworCXN0cnVjdCBpOTE1X2J1ZGR5 X2Jsb2NrICpwYXJlbnQ7CisKKwlwYXJlbnQgPSBibG9jay0+cGFyZW50OworCWlmICghcGFyZW50 KQorCQlyZXR1cm4gTlVMTDsKKworCWlmIChwYXJlbnQtPmxlZnQgPT0gYmxvY2spCisJCXJldHVy biBwYXJlbnQtPnJpZ2h0OworCisJcmV0dXJuIHBhcmVudC0+bGVmdDsKK30KKworc3RhdGljIHZv aWQgX19pOTE1X2J1ZGR5X2ZyZWUoc3RydWN0IGk5MTVfYnVkZHlfbW0gKm1tLAorCQkJICAgICAg c3RydWN0IGk5MTVfYnVkZHlfYmxvY2sgKmJsb2NrKQoreworCXN0cnVjdCBpOTE1X2J1ZGR5X2Js b2NrICpwYXJlbnQ7CisKKwl3aGlsZSAoKHBhcmVudCA9IGJsb2NrLT5wYXJlbnQpKSB7CisJCXN0 cnVjdCBpOTE1X2J1ZGR5X2Jsb2NrICpidWRkeTsKKworCQlidWRkeSA9IGdldF9idWRkeShibG9j ayk7CisKKwkJaWYgKCFpOTE1X2J1ZGR5X2Jsb2NrX2lzX2ZyZWUoYnVkZHkpKQorCQkJYnJlYWs7 CisKKwkJbGlzdF9kZWwoJmJ1ZGR5LT5saW5rKTsKKworCQlpOTE1X2Jsb2NrX2ZyZWUobW0sIGJs b2NrKTsKKwkJaTkxNV9ibG9ja19mcmVlKG1tLCBidWRkeSk7CisKKwkJYmxvY2sgPSBwYXJlbnQ7 CisJfQorCisJbWFya19mcmVlKG1tLCBibG9jayk7Cit9CisKK3ZvaWQgaTkxNV9idWRkeV9mcmVl KHN0cnVjdCBpOTE1X2J1ZGR5X21tICptbSwKKwkJICAgICBzdHJ1Y3QgaTkxNV9idWRkeV9ibG9j ayAqYmxvY2spCit7CisJR0VNX0JVR19PTighaTkxNV9idWRkeV9ibG9ja19pc19hbGxvY2F0ZWQo YmxvY2spKTsKKwlfX2k5MTVfYnVkZHlfZnJlZShtbSwgYmxvY2spOworfQorCit2b2lkIGk5MTVf YnVkZHlfZnJlZV9saXN0KHN0cnVjdCBpOTE1X2J1ZGR5X21tICptbSwgc3RydWN0IGxpc3RfaGVh ZCAqb2JqZWN0cykKK3sKKwlzdHJ1Y3QgaTkxNV9idWRkeV9ibG9jayAqYmxvY2ssICpvbjsKKwor CWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShibG9jaywgb24sIG9iamVjdHMsIGxpbmspIHsKKwkJ aTkxNV9idWRkeV9mcmVlKG1tLCBibG9jayk7CisJCWNvbmRfcmVzY2hlZCgpOworCX0KKwlJTklU X0xJU1RfSEVBRChvYmplY3RzKTsKK30KKworLyoKKyAqIEFsbG9jYXRlIHBvd2VyLW9mLXR3byBi bG9jay4gVGhlIG9yZGVyIHZhbHVlIGhlcmUgdHJhbnNsYXRlcyB0bzoKKyAqCisgKiAgIDAgPSAy XjAgKiBtbS0+Y2h1bmtfc2l6ZQorICogICAxID0gMl4xICogbW0tPmNodW5rX3NpemUKKyAqICAg MiA9IDJeMiAqIG1tLT5jaHVua19zaXplCisgKiAgIC4uLgorICovCitzdHJ1Y3QgaTkxNV9idWRk eV9ibG9jayAqCitpOTE1X2J1ZGR5X2FsbG9jKHN0cnVjdCBpOTE1X2J1ZGR5X21tICptbSwgdW5z aWduZWQgaW50IG9yZGVyKQoreworCXN0cnVjdCBpOTE1X2J1ZGR5X2Jsb2NrICpibG9jayA9IE5V TEw7CisJdW5zaWduZWQgaW50IGk7CisJaW50IGVycjsKKworCWZvciAoaSA9IG9yZGVyOyBpIDw9 IG1tLT5tYXhfb3JkZXI7ICsraSkgeworCQlibG9jayA9IGxpc3RfZmlyc3RfZW50cnlfb3JfbnVs bCgmbW0tPmZyZWVfbGlzdFtpXSwKKwkJCQkJCSBzdHJ1Y3QgaTkxNV9idWRkeV9ibG9jaywKKwkJ CQkJCSBsaW5rKTsKKwkJaWYgKGJsb2NrKQorCQkJYnJlYWs7CisJfQorCisJaWYgKCFibG9jaykK KwkJcmV0dXJuIEVSUl9QVFIoLUVOT1NQQyk7CisKKwlHRU1fQlVHX09OKCFpOTE1X2J1ZGR5X2Js b2NrX2lzX2ZyZWUoYmxvY2spKTsKKworCXdoaWxlIChpICE9IG9yZGVyKSB7CisJCWVyciA9IHNw bGl0X2Jsb2NrKG1tLCBibG9jayk7CisJCWlmICh1bmxpa2VseShlcnIpKQorCQkJZ290byBvdXRf ZnJlZTsKKworCQkvKiBHbyBsb3cgKi8KKwkJYmxvY2sgPSBibG9jay0+bGVmdDsKKwkJaS0tOwor CX0KKworCW1hcmtfYWxsb2NhdGVkKGJsb2NrKTsKKwlrbWVtbGVha191cGRhdGVfdHJhY2UoYmxv Y2spOworCXJldHVybiBibG9jazsKKworb3V0X2ZyZWU6CisJaWYgKGkgIT0gb3JkZXIpCisJCV9f aTkxNV9idWRkeV9mcmVlKG1tLCBibG9jayk7CisJcmV0dXJuIEVSUl9QVFIoZXJyKTsKK30KKwor c3RhdGljIGlubGluZSBib29sIG92ZXJsYXBzKHU2NCBzMSwgdTY0IGUxLCB1NjQgczIsIHU2NCBl MikKK3sKKwlyZXR1cm4gczEgPD0gZTIgJiYgZTEgPj0gczI7Cit9CisKK3N0YXRpYyBpbmxpbmUg Ym9vbCBjb250YWlucyh1NjQgczEsIHU2NCBlMSwgdTY0IHMyLCB1NjQgZTIpCit7CisJcmV0dXJu IHMxIDw9IHMyICYmIGUxID49IGUyOworfQorCisvKgorICogQWxsb2NhdGUgcmFuZ2UuIE5vdGUg dGhhdCBpdCdzIHNhZmUgdG8gY2hhaW4gdG9nZXRoZXIgbXVsdGlwbGUgYWxsb2NfcmFuZ2VzCisg KiB3aXRoIHRoZSBzYW1lIGJsb2NrcyBsaXN0LgorICoKKyAqIEludGVuZGVkIGZvciBwcmUtYWxs b2NhdGluZyBwb3J0aW9ucyBvZiB0aGUgYWRkcmVzcyBzcGFjZSwgZm9yIGV4YW1wbGUgdG8KKyAq IHJlc2VydmUgYSBibG9jayBmb3IgdGhlIGluaXRpYWwgZnJhbWVidWZmZXIgb3Igc2ltaWxhciwg aGVuY2UgdGhlIGV4cGVjdGF0aW9uCisgKiBoZXJlIGlzIHRoYXQgaTkxNV9idWRkeV9hbGxvYygp IGlzIHN0aWxsIHRoZSBtYWluIHZlaGljbGUgZm9yCisgKiBhbGxvY2F0aW9ucywgc28gaWYgdGhh dCdzIG5vdCB0aGUgY2FzZSB0aGVuIHRoZSBkcm1fbW0gcmFuZ2UgYWxsb2NhdG9yIGlzCisgKiBw cm9iYWJseSBhIG11Y2ggYmV0dGVyIGZpdCwgYW5kIHNvIHlvdSBzaG91bGQgcHJvYmFibHkgZ28g dXNlIHRoYXQgaW5zdGVhZC4KKyAqLworaW50IGk5MTVfYnVkZHlfYWxsb2NfcmFuZ2Uoc3RydWN0 IGk5MTVfYnVkZHlfbW0gKm1tLAorCQkJICAgc3RydWN0IGxpc3RfaGVhZCAqYmxvY2tzLAorCQkJ ICAgdTY0IHN0YXJ0LCB1NjQgc2l6ZSkKK3sKKwlzdHJ1Y3QgaTkxNV9idWRkeV9ibG9jayAqYmxv Y2s7CisJc3RydWN0IGk5MTVfYnVkZHlfYmxvY2sgKmJ1ZGR5OworCUxJU1RfSEVBRChhbGxvY2F0 ZWQpOworCUxJU1RfSEVBRChkZnMpOworCXU2NCBlbmQ7CisJaW50IGVycjsKKwlpbnQgaTsKKwor CWlmIChzaXplIDwgbW0tPmNodW5rX3NpemUpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKCFJ U19BTElHTkVEKHNpemUgfCBzdGFydCwgbW0tPmNodW5rX3NpemUpKQorCQlyZXR1cm4gLUVJTlZB TDsKKworCWlmIChyYW5nZV9vdmVyZmxvd3Moc3RhcnQsIHNpemUsIG1tLT5zaXplKSkKKwkJcmV0 dXJuIC1FSU5WQUw7CisKKwlmb3IgKGkgPSAwOyBpIDwgbW0tPm5fcm9vdHM7ICsraSkKKwkJbGlz dF9hZGRfdGFpbCgmbW0tPnJvb3RzW2ldLT50bXBfbGluaywgJmRmcyk7CisKKwllbmQgPSBzdGFy dCArIHNpemUgLSAxOworCisJZG8geworCQl1NjQgYmxvY2tfc3RhcnQ7CisJCXU2NCBibG9ja19l bmQ7CisKKwkJYmxvY2sgPSBsaXN0X2ZpcnN0X2VudHJ5X29yX251bGwoJmRmcywKKwkJCQkJCSBz dHJ1Y3QgaTkxNV9idWRkeV9ibG9jaywKKwkJCQkJCSB0bXBfbGluayk7CisJCWlmICghYmxvY2sp CisJCQlicmVhazsKKworCQlsaXN0X2RlbCgmYmxvY2stPnRtcF9saW5rKTsKKworCQlibG9ja19z dGFydCA9IGk5MTVfYnVkZHlfYmxvY2tfb2Zmc2V0KGJsb2NrKTsKKwkJYmxvY2tfZW5kID0gYmxv Y2tfc3RhcnQgKyBpOTE1X2J1ZGR5X2Jsb2NrX3NpemUobW0sIGJsb2NrKSAtIDE7CisKKwkJaWYg KCFvdmVybGFwcyhzdGFydCwgZW5kLCBibG9ja19zdGFydCwgYmxvY2tfZW5kKSkKKwkJCWNvbnRp bnVlOworCisJCWlmIChpOTE1X2J1ZGR5X2Jsb2NrX2lzX2FsbG9jYXRlZChibG9jaykpIHsKKwkJ CWVyciA9IC1FTk9TUEM7CisJCQlnb3RvIGVycl9mcmVlOworCQl9CisKKwkJaWYgKGNvbnRhaW5z KHN0YXJ0LCBlbmQsIGJsb2NrX3N0YXJ0LCBibG9ja19lbmQpKSB7CisJCQlpZiAoIWk5MTVfYnVk ZHlfYmxvY2tfaXNfZnJlZShibG9jaykpIHsKKwkJCQllcnIgPSAtRU5PU1BDOworCQkJCWdvdG8g ZXJyX2ZyZWU7CisJCQl9CisKKwkJCW1hcmtfYWxsb2NhdGVkKGJsb2NrKTsKKwkJCWxpc3RfYWRk X3RhaWwoJmJsb2NrLT5saW5rLCAmYWxsb2NhdGVkKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJ aWYgKCFpOTE1X2J1ZGR5X2Jsb2NrX2lzX3NwbGl0KGJsb2NrKSkgeworCQkJZXJyID0gc3BsaXRf YmxvY2sobW0sIGJsb2NrKTsKKwkJCWlmICh1bmxpa2VseShlcnIpKQorCQkJCWdvdG8gZXJyX3Vu ZG87CisJCX0KKworCQlsaXN0X2FkZCgmYmxvY2stPnJpZ2h0LT50bXBfbGluaywgJmRmcyk7CisJ CWxpc3RfYWRkKCZibG9jay0+bGVmdC0+dG1wX2xpbmssICZkZnMpOworCX0gd2hpbGUgKDEpOwor CisJbGlzdF9zcGxpY2VfdGFpbCgmYWxsb2NhdGVkLCBibG9ja3MpOworCXJldHVybiAwOworCitl cnJfdW5kbzoKKwkvKgorCSAqIFdlIHJlYWxseSBkb24ndCB3YW50IHRvIGxlYXZlIGFyb3VuZCBh IGJ1bmNoIG9mIHNwbGl0IGJsb2Nrcywgc2luY2UKKwkgKiBiaWdnZXIgaXMgYmV0dGVyLCBzbyBt YWtlIHN1cmUgd2UgbWVyZ2UgZXZlcnl0aGluZyBiYWNrIGJlZm9yZSB3ZQorCSAqIGZyZWUgdGhl IGFsbG9jYXRlZCBibG9ja3MuCisJICovCisJYnVkZHkgPSBnZXRfYnVkZHkoYmxvY2spOworCWlm IChidWRkeSAmJgorCSAgICAoaTkxNV9idWRkeV9ibG9ja19pc19mcmVlKGJsb2NrKSAmJgorCSAg ICAgaTkxNV9idWRkeV9ibG9ja19pc19mcmVlKGJ1ZGR5KSkpCisJCV9faTkxNV9idWRkeV9mcmVl KG1tLCBibG9jayk7CisKK2Vycl9mcmVlOgorCWk5MTVfYnVkZHlfZnJlZV9saXN0KG1tLCAmYWxs b2NhdGVkKTsKKwlyZXR1cm4gZXJyOworfQorCisjaWYgSVNfRU5BQkxFRChDT05GSUdfRFJNX0k5 MTVfU0VMRlRFU1QpCisjaW5jbHVkZSAic2VsZnRlc3RzL2k5MTVfYnVkZHkuYyIKKyNlbmRpZgpk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9idWRkeS5oIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvaTkxNV9idWRkeS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAwMDAwMC4uMzdmOGM0MjA3MWQxCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJt L2k5MTUvaTkxNV9idWRkeS5oCkBAIC0wLDAgKzEsMTMzIEBACisvKiBTUERYLUxpY2Vuc2UtSWRl bnRpZmllcjogTUlUICovCisvKgorICogQ29weXJpZ2h0IMKpIDIwMjEgSW50ZWwgQ29ycG9yYXRp b24KKyAqLworCisjaWZuZGVmIF9fSTkxNV9CVUREWV9IX18KKyNkZWZpbmUgX19JOTE1X0JVRERZ X0hfXworCisjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5o PgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKworc3RydWN0IGk5MTVfYnVkZHlfYmxvY2sgewor I2RlZmluZSBJOTE1X0JVRERZX0hFQURFUl9PRkZTRVQgR0VOTUFTS19VTEwoNjMsIDEyKQorI2Rl ZmluZSBJOTE1X0JVRERZX0hFQURFUl9TVEFURSAgR0VOTUFTS19VTEwoMTEsIDEwKQorI2RlZmlu ZSAgIEk5MTVfQlVERFlfQUxMT0NBVEVECSAgICgxIDw8IDEwKQorI2RlZmluZSAgIEk5MTVfQlVE RFlfRlJFRQkgICAoMiA8PCAxMCkKKyNkZWZpbmUgICBJOTE1X0JVRERZX1NQTElUCSAgICgzIDw8 IDEwKQorLyogRnJlZSB0byBiZSB1c2VkLCBpZiBuZWVkZWQgaW4gdGhlIGZ1dHVyZSAqLworI2Rl ZmluZSBJOTE1X0JVRERZX0hFQURFUl9VTlVTRUQgR0VOTUFTS19VTEwoOSwgNikKKyNkZWZpbmUg STkxNV9CVUREWV9IRUFERVJfT1JERVIgIEdFTk1BU0tfVUxMKDUsIDApCisJdTY0IGhlYWRlcjsK KworCXN0cnVjdCBpOTE1X2J1ZGR5X2Jsb2NrICpsZWZ0OworCXN0cnVjdCBpOTE1X2J1ZGR5X2Js b2NrICpyaWdodDsKKwlzdHJ1Y3QgaTkxNV9idWRkeV9ibG9jayAqcGFyZW50OworCisJdm9pZCAq cHJpdmF0ZTsgLyogb3duZWQgYnkgY3JlYXRvciAqLworCisJLyoKKwkgKiBXaGlsZSB0aGUgYmxv Y2sgaXMgYWxsb2NhdGVkIGJ5IHRoZSB1c2VyIHRocm91Z2ggaTkxNV9idWRkeV9hbGxvYyosCisJ ICogdGhlIHVzZXIgaGFzIG93bmVyc2hpcCBvZiB0aGUgbGluaywgZm9yIGV4YW1wbGUgdG8gbWFp bnRhaW4gd2l0aGluCisJICogYSBsaXN0LCBpZiBzbyBkZXNpcmVkLiBBcyBzb29uIGFzIHRoZSBi bG9jayBpcyBmcmVlZCB3aXRoCisJICogaTkxNV9idWRkeV9mcmVlKiBvd25lcnNoaXAgaXMgZ2l2 ZW4gYmFjayB0byB0aGUgbW0uCisJICovCisJc3RydWN0IGxpc3RfaGVhZCBsaW5rOworCXN0cnVj dCBsaXN0X2hlYWQgdG1wX2xpbms7Cit9OworCisvKiBPcmRlci16ZXJvIG11c3QgYmUgYXQgbGVh c3QgUEFHRV9TSVpFICovCisjZGVmaW5lIEk5MTVfQlVERFlfTUFYX09SREVSICg2MyAtIFBBR0Vf U0hJRlQpCisKKy8qCisgKiBCaW5hcnkgQnVkZHkgU3lzdGVtLgorICoKKyAqIExvY2tpbmcgc2hv dWxkIGJlIGhhbmRsZWQgYnkgdGhlIHVzZXIsIGEgc2ltcGxlIG11dGV4IGFyb3VuZAorICogaTkx NV9idWRkeV9hbGxvYyogYW5kIGk5MTVfYnVkZHlfZnJlZSogc2hvdWxkIHN1ZmZpY2UuCisgKi8K K3N0cnVjdCBpOTE1X2J1ZGR5X21tIHsKKwlzdHJ1Y3Qga21lbV9jYWNoZSAqc2xhYl9ibG9ja3M7 CisJLyogTWFpbnRhaW4gYSBmcmVlIGxpc3QgZm9yIGVhY2ggb3JkZXIuICovCisJc3RydWN0IGxp c3RfaGVhZCAqZnJlZV9saXN0OworCisJLyoKKwkgKiBNYWludGFpbiBleHBsaWNpdCBiaW5hcnkg dHJlZShzKSB0byB0cmFjayB0aGUgYWxsb2NhdGlvbiBvZiB0aGUKKwkgKiBhZGRyZXNzIHNwYWNl LiBUaGlzIGdpdmVzIHVzIGEgc2ltcGxlIHdheSBvZiBmaW5kaW5nIGEgYnVkZHkgYmxvY2sKKwkg KiBhbmQgcGVyZm9ybWluZyB0aGUgcG90ZW50aWFsbHkgcmVjdXJzaXZlIG1lcmdlIHN0ZXAgd2hl biBmcmVlaW5nIGEKKwkgKiBibG9jay4gIE5vZGVzIGFyZSBlaXRoZXIgYWxsb2NhdGVkIG9yIGZy ZWUsIGluIHdoaWNoIGNhc2UgdGhleSB3aWxsCisJICogYWxzbyBleGlzdCBvbiB0aGUgcmVzcGVj dGl2ZSBmcmVlIGxpc3QuCisJICovCisJc3RydWN0IGk5MTVfYnVkZHlfYmxvY2sgKipyb290czsK KworCS8qCisJICogQW55dGhpbmcgZnJvbSBoZXJlIGlzIHB1YmxpYywgYW5kIHJlbWFpbnMgc3Rh dGljIGZvciB0aGUgbGlmZXRpbWUgb2YKKwkgKiB0aGUgbW0uIEV2ZXJ5dGhpbmcgYWJvdmUgaXMg Y29uc2lkZXJlZCBkby1ub3QtdG91Y2guCisJICovCisJdW5zaWduZWQgaW50IG5fcm9vdHM7CisJ dW5zaWduZWQgaW50IG1heF9vcmRlcjsKKworCS8qIE11c3QgYmUgYXQgbGVhc3QgUEFHRV9TSVpF ICovCisJdTY0IGNodW5rX3NpemU7CisJdTY0IHNpemU7Cit9OworCitzdGF0aWMgaW5saW5lIHU2 NAoraTkxNV9idWRkeV9ibG9ja19vZmZzZXQoc3RydWN0IGk5MTVfYnVkZHlfYmxvY2sgKmJsb2Nr KQoreworCXJldHVybiBibG9jay0+aGVhZGVyICYgSTkxNV9CVUREWV9IRUFERVJfT0ZGU0VUOwor fQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludAoraTkxNV9idWRkeV9ibG9ja19vcmRlcihz dHJ1Y3QgaTkxNV9idWRkeV9ibG9jayAqYmxvY2spCit7CisJcmV0dXJuIGJsb2NrLT5oZWFkZXIg JiBJOTE1X0JVRERZX0hFQURFUl9PUkRFUjsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBp bnQKK2k5MTVfYnVkZHlfYmxvY2tfc3RhdGUoc3RydWN0IGk5MTVfYnVkZHlfYmxvY2sgKmJsb2Nr KQoreworCXJldHVybiBibG9jay0+aGVhZGVyICYgSTkxNV9CVUREWV9IRUFERVJfU1RBVEU7Cit9 CisKK3N0YXRpYyBpbmxpbmUgYm9vbAoraTkxNV9idWRkeV9ibG9ja19pc19hbGxvY2F0ZWQoc3Ry dWN0IGk5MTVfYnVkZHlfYmxvY2sgKmJsb2NrKQoreworCXJldHVybiBpOTE1X2J1ZGR5X2Jsb2Nr X3N0YXRlKGJsb2NrKSA9PSBJOTE1X0JVRERZX0FMTE9DQVRFRDsKK30KKworc3RhdGljIGlubGlu ZSBib29sCitpOTE1X2J1ZGR5X2Jsb2NrX2lzX2ZyZWUoc3RydWN0IGk5MTVfYnVkZHlfYmxvY2sg KmJsb2NrKQoreworCXJldHVybiBpOTE1X2J1ZGR5X2Jsb2NrX3N0YXRlKGJsb2NrKSA9PSBJOTE1 X0JVRERZX0ZSRUU7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbAoraTkxNV9idWRkeV9ibG9ja19p c19zcGxpdChzdHJ1Y3QgaTkxNV9idWRkeV9ibG9jayAqYmxvY2spCit7CisJcmV0dXJuIGk5MTVf YnVkZHlfYmxvY2tfc3RhdGUoYmxvY2spID09IEk5MTVfQlVERFlfU1BMSVQ7Cit9CisKK3N0YXRp YyBpbmxpbmUgdTY0CitpOTE1X2J1ZGR5X2Jsb2NrX3NpemUoc3RydWN0IGk5MTVfYnVkZHlfbW0g Km1tLAorCQkgICAgICBzdHJ1Y3QgaTkxNV9idWRkeV9ibG9jayAqYmxvY2spCit7CisJcmV0dXJu IG1tLT5jaHVua19zaXplIDw8IGk5MTVfYnVkZHlfYmxvY2tfb3JkZXIoYmxvY2spOworfQorCitp bnQgaTkxNV9idWRkeV9pbml0KHN0cnVjdCBpOTE1X2J1ZGR5X21tICptbSwgdTY0IHNpemUsIHU2 NCBjaHVua19zaXplKTsKKwordm9pZCBpOTE1X2J1ZGR5X2Zpbmkoc3RydWN0IGk5MTVfYnVkZHlf bW0gKm1tKTsKKworc3RydWN0IGk5MTVfYnVkZHlfYmxvY2sgKgoraTkxNV9idWRkeV9hbGxvYyhz dHJ1Y3QgaTkxNV9idWRkeV9tbSAqbW0sIHVuc2lnbmVkIGludCBvcmRlcik7CisKK2ludCBpOTE1 X2J1ZGR5X2FsbG9jX3JhbmdlKHN0cnVjdCBpOTE1X2J1ZGR5X21tICptbSwKKwkJCSAgIHN0cnVj dCBsaXN0X2hlYWQgKmJsb2NrcywKKwkJCSAgIHU2NCBzdGFydCwgdTY0IHNpemUpOworCit2b2lk IGk5MTVfYnVkZHlfZnJlZShzdHJ1Y3QgaTkxNV9idWRkeV9tbSAqbW0sIHN0cnVjdCBpOTE1X2J1 ZGR5X2Jsb2NrICpibG9jayk7CisKK3ZvaWQgaTkxNV9idWRkeV9mcmVlX2xpc3Qoc3RydWN0IGk5 MTVfYnVkZHlfbW0gKm1tLCBzdHJ1Y3QgbGlzdF9oZWFkICpvYmplY3RzKTsKKworI2VuZGlmCmRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3R0bV9idWRkeV9tYW5hZ2VyLmMg Yi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3R0bV9idWRkeV9tYW5hZ2VyLmMKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5mYzdhZDVjMDM1YjgKLS0tIC9kZXYvbnVs bAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3R0bV9idWRkeV9tYW5hZ2VyLmMKQEAg LTAsMCArMSwyNDggQEAKKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQKKy8qCisgKiBD b3B5cmlnaHQgwqkgMjAyMSBJbnRlbCBDb3Jwb3JhdGlvbgorICovCisKKyNpbmNsdWRlIDxsaW51 eC9zbGFiLmg+CisKKyNpbmNsdWRlIDxkcm0vdHRtL3R0bV9ib19kcml2ZXIuaD4KKyNpbmNsdWRl IDxkcm0vdHRtL3R0bV9wbGFjZW1lbnQuaD4KKworI2luY2x1ZGUgImk5MTVfdHRtX2J1ZGR5X21h bmFnZXIuaCIKKworI2luY2x1ZGUgImk5MTVfYnVkZHkuaCIKKyNpbmNsdWRlICJpOTE1X2dlbS5o IgorCitzdHJ1Y3QgaTkxNV90dG1fYnVkZHlfbWFuYWdlciB7CisJc3RydWN0IHR0bV9yZXNvdXJj ZV9tYW5hZ2VyIG1hbmFnZXI7CisJc3RydWN0IGk5MTVfYnVkZHlfbW0gbW07CisJc3RydWN0IGxp c3RfaGVhZCByZXNlcnZlZDsKKwlzdHJ1Y3QgbXV0ZXggbG9jazsKK307CisKK3N0YXRpYyBzdHJ1 Y3QgaTkxNV90dG1fYnVkZHlfbWFuYWdlciAqCit0b19idWRkeV9tYW5hZ2VyKHN0cnVjdCB0dG1f cmVzb3VyY2VfbWFuYWdlciAqbWFuKQoreworCXJldHVybiBjb250YWluZXJfb2YobWFuLCBzdHJ1 Y3QgaTkxNV90dG1fYnVkZHlfbWFuYWdlciwgbWFuYWdlcik7Cit9CisKK3N0YXRpYyBpbnQgaTkx NV90dG1fYnVkZHlfbWFuX2FsbG9jKHN0cnVjdCB0dG1fcmVzb3VyY2VfbWFuYWdlciAqbWFuLAor CQkJCSAgICBzdHJ1Y3QgdHRtX2J1ZmZlcl9vYmplY3QgKmJvLAorCQkJCSAgICBjb25zdCBzdHJ1 Y3QgdHRtX3BsYWNlICpwbGFjZSwKKwkJCQkgICAgc3RydWN0IHR0bV9yZXNvdXJjZSAqKnJlcykK K3sKKwlzdHJ1Y3QgaTkxNV90dG1fYnVkZHlfbWFuYWdlciAqYm1hbiA9IHRvX2J1ZGR5X21hbmFn ZXIobWFuKTsKKwlzdHJ1Y3QgaTkxNV90dG1fYnVkZHlfcmVzb3VyY2UgKmJtYW5fcmVzOworCXN0 cnVjdCBpOTE1X2J1ZGR5X21tICptbSA9ICZibWFuLT5tbTsKKwl1bnNpZ25lZCBsb25nIG5fcGFn ZXM7CisJdW5zaWduZWQgaW50IG1pbl9vcmRlcjsKKwl1NjQgbWluX3BhZ2Vfc2l6ZTsKKwl1NjQg c2l6ZTsKKwlpbnQgZXJyOworCisJR0VNX0JVR19PTihwbGFjZS0+ZnBmbiB8fCBwbGFjZS0+bHBm bik7CisKKwlibWFuX3JlcyA9IGt6YWxsb2Moc2l6ZW9mKCpibWFuX3JlcyksIEdGUF9LRVJORUwp OworCWlmICghYm1hbl9yZXMpCisJCXJldHVybiAtRU5PTUVNOworCisJdHRtX3Jlc291cmNlX2lu aXQoYm8sIHBsYWNlLCAmYm1hbl9yZXMtPmJhc2UpOworCUlOSVRfTElTVF9IRUFEKCZibWFuX3Jl cy0+YmxvY2tzKTsKKwlibWFuX3Jlcy0+bW0gPSBtbTsKKworCUdFTV9CVUdfT04oIWJtYW5fcmVz LT5iYXNlLm51bV9wYWdlcyk7CisJc2l6ZSA9IGJtYW5fcmVzLT5iYXNlLm51bV9wYWdlcyA8PCBQ QUdFX1NISUZUOworCisJbWluX3BhZ2Vfc2l6ZSA9IGJvLT5wYWdlX2FsaWdubWVudCA8PCBQQUdF X1NISUZUOworCUdFTV9CVUdfT04obWluX3BhZ2Vfc2l6ZSA8IG1tLT5jaHVua19zaXplKTsKKwlt aW5fb3JkZXIgPSBpbG9nMihtaW5fcGFnZV9zaXplKSAtIGlsb2cyKG1tLT5jaHVua19zaXplKTsK KwlpZiAocGxhY2UtPmZsYWdzICYgVFRNX1BMX0ZMQUdfQ09OVElHVU9VUykgeworCQlzaXplID0g cm91bmR1cF9wb3dfb2ZfdHdvKHNpemUpOworCQltaW5fb3JkZXIgPSBpbG9nMihzaXplKSAtIGls b2cyKG1tLT5jaHVua19zaXplKTsKKwl9CisKKwlpZiAoc2l6ZSA+IG1tLT5zaXplKSB7CisJCWVy ciA9IC1FMkJJRzsKKwkJZ290byBlcnJfZnJlZV9yZXM7CisJfQorCisJbl9wYWdlcyA9IHNpemUg Pj4gaWxvZzIobW0tPmNodW5rX3NpemUpOworCisJZG8geworCQlzdHJ1Y3QgaTkxNV9idWRkeV9i bG9jayAqYmxvY2s7CisJCXVuc2lnbmVkIGludCBvcmRlcjsKKworCQlvcmRlciA9IGZscyhuX3Bh Z2VzKSAtIDE7CisJCUdFTV9CVUdfT04ob3JkZXIgPiBtbS0+bWF4X29yZGVyKTsKKwkJR0VNX0JV R19PTihvcmRlciA8IG1pbl9vcmRlcik7CisKKwkJZG8geworCQkJbXV0ZXhfbG9jaygmYm1hbi0+ bG9jayk7CisJCQlibG9jayA9IGk5MTVfYnVkZHlfYWxsb2MobW0sIG9yZGVyKTsKKwkJCW11dGV4 X3VubG9jaygmYm1hbi0+bG9jayk7CisJCQlpZiAoIUlTX0VSUihibG9jaykpCisJCQkJYnJlYWs7 CisKKwkJCWlmIChvcmRlci0tID09IG1pbl9vcmRlcikgeworCQkJCWVyciA9IC1FTk9TUEM7CisJ CQkJZ290byBlcnJfZnJlZV9ibG9ja3M7CisJCQl9CisJCX0gd2hpbGUgKDEpOworCisJCW5fcGFn ZXMgLT0gQklUKG9yZGVyKTsKKworCQlsaXN0X2FkZF90YWlsKCZibG9jay0+bGluaywgJmJtYW5f cmVzLT5ibG9ja3MpOworCisJCWlmICghbl9wYWdlcykKKwkJCWJyZWFrOworCX0gd2hpbGUgKDEp OworCisJKnJlcyA9ICZibWFuX3Jlcy0+YmFzZTsKKwlyZXR1cm4gMDsKKworZXJyX2ZyZWVfYmxv Y2tzOgorCW11dGV4X2xvY2soJmJtYW4tPmxvY2spOworCWk5MTVfYnVkZHlfZnJlZV9saXN0KG1t LCAmYm1hbl9yZXMtPmJsb2Nrcyk7CisJbXV0ZXhfdW5sb2NrKCZibWFuLT5sb2NrKTsKK2Vycl9m cmVlX3JlczoKKwlrZnJlZShibWFuX3Jlcyk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZv aWQgaTkxNV90dG1fYnVkZHlfbWFuX2ZyZWUoc3RydWN0IHR0bV9yZXNvdXJjZV9tYW5hZ2VyICpt YW4sCisJCQkJICAgIHN0cnVjdCB0dG1fcmVzb3VyY2UgKnJlcykKK3sKKwlzdHJ1Y3QgaTkxNV90 dG1fYnVkZHlfcmVzb3VyY2UgKmJtYW5fcmVzID0gdG9fdHRtX2J1ZGR5X3Jlc291cmNlKHJlcyk7 CisJc3RydWN0IGk5MTVfdHRtX2J1ZGR5X21hbmFnZXIgKmJtYW4gPSB0b19idWRkeV9tYW5hZ2Vy KG1hbik7CisKKwltdXRleF9sb2NrKCZibWFuLT5sb2NrKTsKKwlpOTE1X2J1ZGR5X2ZyZWVfbGlz dCgmYm1hbi0+bW0sICZibWFuX3Jlcy0+YmxvY2tzKTsKKwltdXRleF91bmxvY2soJmJtYW4tPmxv Y2spOworCisJa2ZyZWUoYm1hbl9yZXMpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHR0bV9y ZXNvdXJjZV9tYW5hZ2VyX2Z1bmMgaTkxNV90dG1fYnVkZHlfbWFuYWdlcl9mdW5jID0geworCS5h bGxvYyA9IGk5MTVfdHRtX2J1ZGR5X21hbl9hbGxvYywKKwkuZnJlZSA9IGk5MTVfdHRtX2J1ZGR5 X21hbl9mcmVlLAorfTsKKworCisvKioKKyAqIGk5MTVfdHRtX2J1ZGR5X21hbl9pbml0IC0gU2V0 dXAgYnVkZHkgYWxsb2NhdG9yIGJhc2VkIHR0bSBtYW5hZ2VyCisgKiBAYmRldjogVGhlIHR0bSBk ZXZpY2UKKyAqIEB0eXBlOiBNZW1vcnkgdHlwZSB3ZSB3YW50IHRvIG1hbmFnZQorICogQHVzZV90 dDogU2V0IHVzZV90dCBmb3IgdGhlIG1hbmFnZXIKKyAqIEBzaXplOiBUaGUgc2l6ZSBpbiBieXRl cyB0byBtYW5hZ2UKKyAqIEBjaHVua19zaXplOiBUaGUgbWluaW11bSBwYWdlIHNpemUgaW4gYnl0 ZXMgZm9yIG91ciBhbGxvY2F0aW9ucyBpLmUKKyAqIG9yZGVyLXplcm8KKyAqCisgKiBOb3RlIHRo YXQgdGhlIHN0YXJ0aW5nIGFkZHJlc3MgaXMgYXNzdW1lZCB0byBiZSB6ZXJvIGhlcmUsIHNpbmNl IHRoaXMKKyAqIHNpbXBsaWZpZXMga2VlcGluZyB0aGUgcHJvcGVydHkgd2hlcmUgYWxsb2NhdGVk IGJsb2NrcyBoYXZpbmcgbmF0dXJhbAorICogcG93ZXItb2YtdHdvIGFsaWdubWVudC4gU28gbG9u ZyBhcyB0aGUgcmVhbCBzdGFydGluZyBhZGRyZXNzIGlzIHNvbWUgbGFyZ2UKKyAqIHBvd2VyLW9m LXR3bywgb3IgbmF0dXJhbGx5IHN0YXJ0IGZyb20gemVybywgdGhlbiB0aGlzIHNob3VsZCBiZSBm aW5lLiAgQWxzbworICogdGhlICZpOTE1X3R0bV9idWRkeV9tYW5fcmVzZXJ2ZSBpbnRlcmZhY2Ug Y2FuIGJlIHVzZWQgdG8gcHJlc2VydmUgYWxpZ25tZW50CisgKiBpZiBzYXkgdGhlcmUgaXMgc29t ZSB1bnVzYWJsZSByYW5nZSBmcm9tIHRoZSBzdGFydCBvZiB0aGUgcmVnaW9uLiBXZSBjYW4KKyAq IHJldmlzaXQgdGhpcyBpbiB0aGUgZnV0dXJlIGFuZCBtYWtlIHRoZSBpbnRlcmZhY2UgYWNjZXB0 IGFuIGFjdHVhbCBzdGFydGluZworICogb2Zmc2V0IGFuZCBsZXQgaXQgdGFrZSBjYXJlIG9mIHRo ZSByZXN0LgorICoKKyAqIE5vdGUgdGhhdCBpZiB0aGUgQHNpemUgaXMgbm90IGFsaWduZWQgdG8g dGhlIEBjaHVua19zaXplIHRoZW4gd2UgcGVyZm9ybSB0aGUKKyAqIHJlcXVpcmVkIHJvdW5kaW5n IHRvIGdldCB0aGUgdXNhYmxlIHNpemUuIFRoZSBmaW5hbCBzaXplIGluIHBhZ2VzIGNhbiBiZQor ICogdGFrZW4gZnJvbSAmdHRtX3Jlc291cmNlX21hbmFnZXIuc2l6ZS4KKyAqCisgKiBSZXR1cm46 IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLgorICovCitpbnQg aTkxNV90dG1fYnVkZHlfbWFuX2luaXQoc3RydWN0IHR0bV9kZXZpY2UgKmJkZXYsCisJCQkgICAg dW5zaWduZWQgaW50IHR5cGUsIGJvb2wgdXNlX3R0LAorCQkJICAgIHU2NCBzaXplLCB1NjQgY2h1 bmtfc2l6ZSkKK3sKKwlzdHJ1Y3QgdHRtX3Jlc291cmNlX21hbmFnZXIgKm1hbjsKKwlzdHJ1Y3Qg aTkxNV90dG1fYnVkZHlfbWFuYWdlciAqYm1hbjsKKwlpbnQgZXJyOworCisJYm1hbiA9IGt6YWxs b2Moc2l6ZW9mKCpibWFuKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFibWFuKQorCQlyZXR1cm4gLUVO T01FTTsKKworCWVyciA9IGk5MTVfYnVkZHlfaW5pdCgmYm1hbi0+bW0sIHNpemUsIGNodW5rX3Np emUpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX2ZyZWVfYm1hbjsKKworCW11dGV4X2luaXQoJmJt YW4tPmxvY2spOworCUlOSVRfTElTVF9IRUFEKCZibWFuLT5yZXNlcnZlZCk7CisKKwltYW4gPSAm Ym1hbi0+bWFuYWdlcjsKKwltYW4tPnVzZV90dCA9IHVzZV90dDsKKwltYW4tPmZ1bmMgPSAmaTkx NV90dG1fYnVkZHlfbWFuYWdlcl9mdW5jOworCXR0bV9yZXNvdXJjZV9tYW5hZ2VyX2luaXQobWFu LCBibWFuLT5tbS5zaXplID4+IFBBR0VfU0hJRlQpOworCisJdHRtX3Jlc291cmNlX21hbmFnZXJf c2V0X3VzZWQobWFuLCB0cnVlKTsKKwl0dG1fc2V0X2RyaXZlcl9tYW5hZ2VyKGJkZXYsIHR5cGUs IG1hbik7CisKKwlyZXR1cm4gMDsKKworZXJyX2ZyZWVfYm1hbjoKKwlrZnJlZShibWFuKTsKKwly ZXR1cm4gZXJyOworfQorCisvKioKKyAqIGk5MTVfdHRtX2J1ZGR5X21hbl9maW5pIC0gRGVzdHJv eSB0aGUgYnVkZHkgYWxsb2NhdG9yIHR0bSBtYW5hZ2VyCisgKiBAYmRldjogVGhlIHR0bSBkZXZp Y2UKKyAqIEB0eXBlOiBNZW1vcnkgdHlwZSB3ZSB3YW50IHRvIG1hbmFnZQorICoKKyAqIE5vdGUg dGhhdCBpZiB3ZSByZXNlcnZlZCBhbnl0aGluZyB3aXRoICZpOTE1X3R0bV9idWRkeV9tYW5fcmVz ZXJ2ZSwgdGhpcyB3aWxsCisgKiBhbHNvIGJlIGZyZWVkIGZvciB1cyBoZXJlLgorICoKKyAqIFJl dHVybjogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuCisgKi8K K2ludCBpOTE1X3R0bV9idWRkeV9tYW5fZmluaShzdHJ1Y3QgdHRtX2RldmljZSAqYmRldiwgdW5z aWduZWQgaW50IHR5cGUpCit7CisJc3RydWN0IHR0bV9yZXNvdXJjZV9tYW5hZ2VyICptYW4gPSB0 dG1fbWFuYWdlcl90eXBlKGJkZXYsIHR5cGUpOworCXN0cnVjdCBpOTE1X3R0bV9idWRkeV9tYW5h Z2VyICpibWFuID0gdG9fYnVkZHlfbWFuYWdlcihtYW4pOworCXN0cnVjdCBpOTE1X2J1ZGR5X21t ICptbSA9ICZibWFuLT5tbTsKKwlpbnQgcmV0OworCisJdHRtX3Jlc291cmNlX21hbmFnZXJfc2V0 X3VzZWQobWFuLCBmYWxzZSk7CisKKwlyZXQgPSB0dG1fcmVzb3VyY2VfbWFuYWdlcl9ldmljdF9h bGwoYmRldiwgbWFuKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJdHRtX3NldF9kcml2 ZXJfbWFuYWdlcihiZGV2LCB0eXBlLCBOVUxMKTsKKworCW11dGV4X2xvY2soJmJtYW4tPmxvY2sp OworCWk5MTVfYnVkZHlfZnJlZV9saXN0KG1tLCAmYm1hbi0+cmVzZXJ2ZWQpOworCWk5MTVfYnVk ZHlfZmluaShtbSk7CisJbXV0ZXhfdW5sb2NrKCZibWFuLT5sb2NrKTsKKworCXR0bV9yZXNvdXJj ZV9tYW5hZ2VyX2NsZWFudXAobWFuKTsKKwlrZnJlZShibWFuKTsKKworCXJldHVybiAwOworfQor CisvKioKKyAqIGk5MTVfdHRtX2J1ZGR5X21hbl9yZXNlcnZlIC0gUmVzZXJ2ZSBhZGRyZXNzIHJh bmdlCisgKiBAbWFuOiBUaGUgYnVkZHkgYWxsb2NhdG9yIHR0bSBtYW5hZ2VyCisgKiBAc3RhcnQ6 IFRoZSBvZmZzZXQgaW4gYnl0ZXMsIHdoZXJlIHRoZSByZWdpb24gc3RhcnQgaXMgYXNzdW1lZCB0 byBiZSB6ZXJvCisgKiBAc2l6ZTogVGhlIHNpemUgaW4gYnl0ZXMKKyAqCisgKiBOb3RlIHRoYXQg dGhlIHN0YXJ0aW5nIGFkZHJlc3MgZm9yIHRoZSByZWdpb24gaXMgYWx3YXlzIGFzc3VtZWQgdG8g YmUgemVyby4KKyAqCisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJyb3IgY29k ZSBvbiBmYWlsdXJlLgorICovCitpbnQgaTkxNV90dG1fYnVkZHlfbWFuX3Jlc2VydmUoc3RydWN0 IHR0bV9yZXNvdXJjZV9tYW5hZ2VyICptYW4sCisJCQkgICAgICAgdTY0IHN0YXJ0LCB1NjQgc2l6 ZSkKK3sKKwlzdHJ1Y3QgaTkxNV90dG1fYnVkZHlfbWFuYWdlciAqYm1hbiA9IHRvX2J1ZGR5X21h bmFnZXIobWFuKTsKKwlzdHJ1Y3QgaTkxNV9idWRkeV9tbSAqbW0gPSAmYm1hbi0+bW07CisJaW50 IHJldDsKKworCW11dGV4X2xvY2soJmJtYW4tPmxvY2spOworCXJldCA9IGk5MTVfYnVkZHlfYWxs b2NfcmFuZ2UobW0sICZibWFuLT5yZXNlcnZlZCwgc3RhcnQsIHNpemUpOworCW11dGV4X3VubG9j aygmYm1hbi0+bG9jayk7CisKKwlyZXR1cm4gcmV0OworfQorCmRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pOTE1X3R0bV9idWRkeV9tYW5hZ2VyLmggYi9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pOTE1X3R0bV9idWRkeV9tYW5hZ2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMDAwMDAwLi4xZDU4ZTkwNTQ4YzkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pOTE1X3R0bV9idWRkeV9tYW5hZ2VyLmgKQEAgLTAsMCArMSw1NiBAQAorLyog U1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVCAqLworLyoKKyAqIENvcHlyaWdodCDCqSAyMDIx IEludGVsIENvcnBvcmF0aW9uCisgKi8KKworI2lmbmRlZiBfX0k5MTVfVFRNX0JVRERZX01BTkFH RVJfSF9fCisjZGVmaW5lIF9fSTkxNV9UVE1fQlVERFlfTUFOQUdFUl9IX18KKworI2luY2x1ZGUg PGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisjaW5jbHVkZSA8ZHJt L3R0bS90dG1fcmVzb3VyY2UuaD4KKworc3RydWN0IHR0bV9kZXZpY2U7CitzdHJ1Y3QgdHRtX3Jl c291cmNlX21hbmFnZXI7CitzdHJ1Y3QgaTkxNV9idWRkeV9tbTsKKworLyoqCisgKiBzdHJ1Y3Qg aTkxNV90dG1fYnVkZHlfcmVzb3VyY2UKKyAqCisgKiBAYmFzZTogc3RydWN0IHR0bV9yZXNvdXJj ZSBiYXNlIGNsYXNzIHdlIGV4dGVuZAorICogQGJsb2NrczogdGhlIGxpc3Qgb2Ygc3RydWN0IGk5 MTVfYnVkZHlfYmxvY2sgZm9yIHRoaXMgcmVzb3VyY2UvYWxsb2NhdGlvbgorICogQG1tOiB0aGUg c3RydWN0IGk5MTVfYnVkZHlfbW0gZm9yIHRoaXMgcmVzb3VyY2UKKyAqCisgKiBFeHRlbmRzIHRo ZSBzdHJ1Y3QgdHRtX3Jlc291cmNlIHRvIG1hbmFnZSBhbiBhZGRyZXNzIHNwYWNlIGFsbG9jYXRp b24gd2l0aAorICogb25lIG9yIG1vcmUgc3RydWN0IGk5MTVfYnVkZHlfYmxvY2suCisgKi8KK3N0 cnVjdCBpOTE1X3R0bV9idWRkeV9yZXNvdXJjZSB7CisJc3RydWN0IHR0bV9yZXNvdXJjZSBiYXNl OworCXN0cnVjdCBsaXN0X2hlYWQgYmxvY2tzOworCXN0cnVjdCBpOTE1X2J1ZGR5X21tICptbTsK K307CisKKy8qKgorICogdG9fdHRtX2J1ZGR5X3Jlc291cmNlCisgKgorICogQHJlczogdGhlIHJl c291cmNlIHRvIHVwY2FzdAorICoKKyAqIFVwY2FzdCB0aGUgdHRtX3Jlc291cmNlIG9iamVjdCBp bnRvIGEgaTkxNV90dG1fYnVkZHlfcmVzb3VyY2UuCisgKi8KK3N0YXRpYyBpbmxpbmUgc3RydWN0 IGk5MTVfdHRtX2J1ZGR5X3Jlc291cmNlICoKK3RvX3R0bV9idWRkeV9yZXNvdXJjZShzdHJ1Y3Qg dHRtX3Jlc291cmNlICpyZXMpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihyZXMsIHN0cnVjdCBp OTE1X3R0bV9idWRkeV9yZXNvdXJjZSwgYmFzZSk7Cit9CisKK2ludCBpOTE1X3R0bV9idWRkeV9t YW5faW5pdChzdHJ1Y3QgdHRtX2RldmljZSAqYmRldiwKKwkJCSAgICB1bnNpZ25lZCB0eXBlLCBi b29sIHVzZV90dCwKKwkJCSAgICB1NjQgc2l6ZSwgdTY0IGNodW5rX3NpemUpOworaW50IGk5MTVf dHRtX2J1ZGR5X21hbl9maW5pKHN0cnVjdCB0dG1fZGV2aWNlICpiZGV2LAorCQkJICAgIHVuc2ln bmVkIGludCB0eXBlKTsKKworaW50IGk5MTVfdHRtX2J1ZGR5X21hbl9yZXNlcnZlKHN0cnVjdCB0 dG1fcmVzb3VyY2VfbWFuYWdlciAqbWFuLAorCQkJICAgICAgIHU2NCBzdGFydCwgdTY0IHNpemUp OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9p OTE1X2J1ZGR5LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaTkxNV9idWRkeS5j Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uZjBmNWM0ZGY4ZGJjCi0t LSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2k5MTVfYnVk ZHkuYwpAQCAtMCwwICsxLDc4OSBAQAorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVAor LyoKKyAqIENvcHlyaWdodCDCqSAyMDE5IEludGVsIENvcnBvcmF0aW9uCisgKi8KKworI2luY2x1 ZGUgPGxpbnV4L3ByaW1lX251bWJlcnMuaD4KKworI2luY2x1ZGUgIi4uL2k5MTVfc2VsZnRlc3Qu aCIKKyNpbmNsdWRlICJpOTE1X3JhbmRvbS5oIgorCitzdGF0aWMgdm9pZCBfX2lndF9kdW1wX2Js b2NrKHN0cnVjdCBpOTE1X2J1ZGR5X21tICptbSwKKwkJCSAgICAgc3RydWN0IGk5MTVfYnVkZHlf YmxvY2sgKmJsb2NrLAorCQkJICAgICBib29sIGJ1ZGR5KQoreworCXByX2VycigiYmxvY2sgaW5m bzogaGVhZGVyPSVsbHgsIHN0YXRlPSV1LCBvcmRlcj0lZCwgb2Zmc2V0PSVsbHggc2l6ZT0lbGx4 IHJvb3Q9JXMgYnVkZHk9JXNcbiIsCisJICAgICAgIGJsb2NrLT5oZWFkZXIsCisJICAgICAgIGk5 MTVfYnVkZHlfYmxvY2tfc3RhdGUoYmxvY2spLAorCSAgICAgICBpOTE1X2J1ZGR5X2Jsb2NrX29y ZGVyKGJsb2NrKSwKKwkgICAgICAgaTkxNV9idWRkeV9ibG9ja19vZmZzZXQoYmxvY2spLAorCSAg ICAgICBpOTE1X2J1ZGR5X2Jsb2NrX3NpemUobW0sIGJsb2NrKSwKKwkgICAgICAgeWVzbm8oIWJs b2NrLT5wYXJlbnQpLAorCSAgICAgICB5ZXNubyhidWRkeSkpOworfQorCitzdGF0aWMgdm9pZCBp Z3RfZHVtcF9ibG9jayhzdHJ1Y3QgaTkxNV9idWRkeV9tbSAqbW0sCisJCQkgICBzdHJ1Y3QgaTkx NV9idWRkeV9ibG9jayAqYmxvY2spCit7CisJc3RydWN0IGk5MTVfYnVkZHlfYmxvY2sgKmJ1ZGR5 OworCisJX19pZ3RfZHVtcF9ibG9jayhtbSwgYmxvY2ssIGZhbHNlKTsKKworCWJ1ZGR5ID0gZ2V0 X2J1ZGR5KGJsb2NrKTsKKwlpZiAoYnVkZHkpCisJCV9faWd0X2R1bXBfYmxvY2sobW0sIGJ1ZGR5 LCB0cnVlKTsKK30KKworc3RhdGljIGludCBpZ3RfY2hlY2tfYmxvY2soc3RydWN0IGk5MTVfYnVk ZHlfbW0gKm1tLAorCQkJICAgc3RydWN0IGk5MTVfYnVkZHlfYmxvY2sgKmJsb2NrKQoreworCXN0 cnVjdCBpOTE1X2J1ZGR5X2Jsb2NrICpidWRkeTsKKwl1bnNpZ25lZCBpbnQgYmxvY2tfc3RhdGU7 CisJdTY0IGJsb2NrX3NpemU7CisJdTY0IG9mZnNldDsKKwlpbnQgZXJyID0gMDsKKworCWJsb2Nr X3N0YXRlID0gaTkxNV9idWRkeV9ibG9ja19zdGF0ZShibG9jayk7CisKKwlpZiAoYmxvY2tfc3Rh dGUgIT0gSTkxNV9CVUREWV9BTExPQ0FURUQgJiYKKwkgICAgYmxvY2tfc3RhdGUgIT0gSTkxNV9C VUREWV9GUkVFICYmCisJICAgIGJsb2NrX3N0YXRlICE9IEk5MTVfQlVERFlfU1BMSVQpIHsKKwkJ cHJfZXJyKCJibG9jayBzdGF0ZSBtaXNtYXRjaFxuIik7CisJCWVyciA9IC1FSU5WQUw7CisJfQor CisJYmxvY2tfc2l6ZSA9IGk5MTVfYnVkZHlfYmxvY2tfc2l6ZShtbSwgYmxvY2spOworCW9mZnNl dCA9IGk5MTVfYnVkZHlfYmxvY2tfb2Zmc2V0KGJsb2NrKTsKKworCWlmIChibG9ja19zaXplIDwg bW0tPmNodW5rX3NpemUpIHsKKwkJcHJfZXJyKCJibG9jayBzaXplIHNtYWxsZXIgdGhhbiBtaW4g c2l6ZVxuIik7CisJCWVyciA9IC1FSU5WQUw7CisJfQorCisJaWYgKCFpc19wb3dlcl9vZl8yKGJs b2NrX3NpemUpKSB7CisJCXByX2VycigiYmxvY2sgc2l6ZSBub3QgcG93ZXIgb2YgdHdvXG4iKTsK KwkJZXJyID0gLUVJTlZBTDsKKwl9CisKKwlpZiAoIUlTX0FMSUdORUQoYmxvY2tfc2l6ZSwgbW0t PmNodW5rX3NpemUpKSB7CisJCXByX2VycigiYmxvY2sgc2l6ZSBub3QgYWxpZ25lZCB0byBtaW4g c2l6ZVxuIik7CisJCWVyciA9IC1FSU5WQUw7CisJfQorCisJaWYgKCFJU19BTElHTkVEKG9mZnNl dCwgbW0tPmNodW5rX3NpemUpKSB7CisJCXByX2VycigiYmxvY2sgb2Zmc2V0IG5vdCBhbGlnbmVk IHRvIG1pbiBzaXplXG4iKTsKKwkJZXJyID0gLUVJTlZBTDsKKwl9CisKKwlpZiAoIUlTX0FMSUdO RUQob2Zmc2V0LCBibG9ja19zaXplKSkgeworCQlwcl9lcnIoImJsb2NrIG9mZnNldCBub3QgYWxp Z25lZCB0byBibG9jayBzaXplXG4iKTsKKwkJZXJyID0gLUVJTlZBTDsKKwl9CisKKwlidWRkeSA9 IGdldF9idWRkeShibG9jayk7CisKKwlpZiAoIWJ1ZGR5ICYmIGJsb2NrLT5wYXJlbnQpIHsKKwkJ cHJfZXJyKCJidWRkeSBoYXMgZ29uZSBmaXNoaW5nXG4iKTsKKwkJZXJyID0gLUVJTlZBTDsKKwl9 CisKKwlpZiAoYnVkZHkpIHsKKwkJaWYgKGk5MTVfYnVkZHlfYmxvY2tfb2Zmc2V0KGJ1ZGR5KSAh PSAob2Zmc2V0IF4gYmxvY2tfc2l6ZSkpIHsKKwkJCXByX2VycigiYnVkZHkgaGFzIHdyb25nIG9m ZnNldFxuIik7CisJCQllcnIgPSAtRUlOVkFMOworCQl9CisKKwkJaWYgKGk5MTVfYnVkZHlfYmxv Y2tfc2l6ZShtbSwgYnVkZHkpICE9IGJsb2NrX3NpemUpIHsKKwkJCXByX2VycigiYnVkZHkgc2l6 ZSBtaXNtYXRjaFxuIik7CisJCQllcnIgPSAtRUlOVkFMOworCQl9CisKKwkJaWYgKGk5MTVfYnVk ZHlfYmxvY2tfc3RhdGUoYnVkZHkpID09IGJsb2NrX3N0YXRlICYmCisJCSAgICBibG9ja19zdGF0 ZSA9PSBJOTE1X0JVRERZX0ZSRUUpIHsKKwkJCXByX2VycigiYmxvY2sgYW5kIGl0cyBidWRkeSBh cmUgZnJlZVxuIik7CisJCQllcnIgPSAtRUlOVkFMOworCQl9CisJfQorCisJcmV0dXJuIGVycjsK K30KKworc3RhdGljIGludCBpZ3RfY2hlY2tfYmxvY2tzKHN0cnVjdCBpOTE1X2J1ZGR5X21tICpt bSwKKwkJCSAgICBzdHJ1Y3QgbGlzdF9oZWFkICpibG9ja3MsCisJCQkgICAgdTY0IGV4cGVjdGVk X3NpemUsCisJCQkgICAgYm9vbCBpc19jb250aWd1b3VzKQoreworCXN0cnVjdCBpOTE1X2J1ZGR5 X2Jsb2NrICpibG9jazsKKwlzdHJ1Y3QgaTkxNV9idWRkeV9ibG9jayAqcHJldjsKKwl1NjQgdG90 YWw7CisJaW50IGVyciA9IDA7CisKKwlibG9jayA9IE5VTEw7CisJcHJldiA9IE5VTEw7CisJdG90 YWwgPSAwOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShibG9jaywgYmxvY2tzLCBsaW5rKSB7CisJ CWVyciA9IGlndF9jaGVja19ibG9jayhtbSwgYmxvY2spOworCisJCWlmICghaTkxNV9idWRkeV9i bG9ja19pc19hbGxvY2F0ZWQoYmxvY2spKSB7CisJCQlwcl9lcnIoImJsb2NrIG5vdCBhbGxvY2F0 ZWRcbiIpLAorCQkJZXJyID0gLUVJTlZBTDsKKwkJfQorCisJCWlmIChpc19jb250aWd1b3VzICYm IHByZXYpIHsKKwkJCXU2NCBwcmV2X2Jsb2NrX3NpemU7CisJCQl1NjQgcHJldl9vZmZzZXQ7CisJ CQl1NjQgb2Zmc2V0OworCisJCQlwcmV2X29mZnNldCA9IGk5MTVfYnVkZHlfYmxvY2tfb2Zmc2V0 KHByZXYpOworCQkJcHJldl9ibG9ja19zaXplID0gaTkxNV9idWRkeV9ibG9ja19zaXplKG1tLCBw cmV2KTsKKwkJCW9mZnNldCA9IGk5MTVfYnVkZHlfYmxvY2tfb2Zmc2V0KGJsb2NrKTsKKworCQkJ aWYgKG9mZnNldCAhPSAocHJldl9vZmZzZXQgKyBwcmV2X2Jsb2NrX3NpemUpKSB7CisJCQkJcHJf ZXJyKCJibG9jayBvZmZzZXQgbWlzbWF0Y2hcbiIpOworCQkJCWVyciA9IC1FSU5WQUw7CisJCQl9 CisJCX0KKworCQlpZiAoZXJyKQorCQkJYnJlYWs7CisKKwkJdG90YWwgKz0gaTkxNV9idWRkeV9i bG9ja19zaXplKG1tLCBibG9jayk7CisJCXByZXYgPSBibG9jazsKKwl9CisKKwlpZiAoIWVycikg eworCQlpZiAodG90YWwgIT0gZXhwZWN0ZWRfc2l6ZSkgeworCQkJcHJfZXJyKCJzaXplIG1pc21h dGNoLCBleHBlY3RlZD0lbGx4LCBmb3VuZD0lbGx4XG4iLAorCQkJICAgICAgIGV4cGVjdGVkX3Np emUsIHRvdGFsKTsKKwkJCWVyciA9IC1FSU5WQUw7CisJCX0KKwkJcmV0dXJuIGVycjsKKwl9CisK KwlpZiAocHJldikgeworCQlwcl9lcnIoInByZXYgYmxvY2ssIGR1bXA6XG4iKTsKKwkJaWd0X2R1 bXBfYmxvY2sobW0sIHByZXYpOworCX0KKworCWlmIChibG9jaykgeworCQlwcl9lcnIoImJhZCBi bG9jaywgZHVtcDpcbiIpOworCQlpZ3RfZHVtcF9ibG9jayhtbSwgYmxvY2spOworCX0KKworCXJl dHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgaWd0X2NoZWNrX21tKHN0cnVjdCBpOTE1X2J1ZGR5 X21tICptbSkKK3sKKwlzdHJ1Y3QgaTkxNV9idWRkeV9ibG9jayAqcm9vdDsKKwlzdHJ1Y3QgaTkx NV9idWRkeV9ibG9jayAqcHJldjsKKwl1bnNpZ25lZCBpbnQgaTsKKwl1NjQgdG90YWw7CisJaW50 IGVyciA9IDA7CisKKwlpZiAoIW1tLT5uX3Jvb3RzKSB7CisJCXByX2Vycigibl9yb290cyBpcyB6 ZXJvXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKG1tLT5uX3Jvb3RzICE9IGh3 ZWlnaHQ2NChtbS0+c2l6ZSkpIHsKKwkJcHJfZXJyKCJuX3Jvb3RzIG1pc21hdGNoLCBuX3Jvb3Rz PSV1LCBleHBlY3RlZD0lbHVcbiIsCisJCSAgICAgICBtbS0+bl9yb290cywgaHdlaWdodDY0KG1t LT5zaXplKSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJvb3QgPSBOVUxMOworCXByZXYg PSBOVUxMOworCXRvdGFsID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCBtbS0+bl9yb290czsgKytp KSB7CisJCXN0cnVjdCBpOTE1X2J1ZGR5X2Jsb2NrICpibG9jazsKKwkJdW5zaWduZWQgaW50IG9y ZGVyOworCisJCXJvb3QgPSBtbS0+cm9vdHNbaV07CisJCWlmICghcm9vdCkgeworCQkJcHJfZXJy KCJyb290KCV1KSBpcyBOVUxMXG4iLCBpKTsKKwkJCWVyciA9IC1FSU5WQUw7CisJCQlicmVhazsK KwkJfQorCisJCWVyciA9IGlndF9jaGVja19ibG9jayhtbSwgcm9vdCk7CisKKwkJaWYgKCFpOTE1 X2J1ZGR5X2Jsb2NrX2lzX2ZyZWUocm9vdCkpIHsKKwkJCXByX2Vycigicm9vdCBub3QgZnJlZVxu Iik7CisJCQllcnIgPSAtRUlOVkFMOworCQl9CisKKwkJb3JkZXIgPSBpOTE1X2J1ZGR5X2Jsb2Nr X29yZGVyKHJvb3QpOworCisJCWlmICghaSkgeworCQkJaWYgKG9yZGVyICE9IG1tLT5tYXhfb3Jk ZXIpIHsKKwkJCQlwcl9lcnIoIm1heCBvcmRlciByb290IG1pc3NpbmdcbiIpOworCQkJCWVyciA9 IC1FSU5WQUw7CisJCQl9CisJCX0KKworCQlpZiAocHJldikgeworCQkJdTY0IHByZXZfYmxvY2tf c2l6ZTsKKwkJCXU2NCBwcmV2X29mZnNldDsKKwkJCXU2NCBvZmZzZXQ7CisKKwkJCXByZXZfb2Zm c2V0ID0gaTkxNV9idWRkeV9ibG9ja19vZmZzZXQocHJldik7CisJCQlwcmV2X2Jsb2NrX3NpemUg PSBpOTE1X2J1ZGR5X2Jsb2NrX3NpemUobW0sIHByZXYpOworCQkJb2Zmc2V0ID0gaTkxNV9idWRk eV9ibG9ja19vZmZzZXQocm9vdCk7CisKKwkJCWlmIChvZmZzZXQgIT0gKHByZXZfb2Zmc2V0ICsg cHJldl9ibG9ja19zaXplKSkgeworCQkJCXByX2Vycigicm9vdCBvZmZzZXQgbWlzbWF0Y2hcbiIp OworCQkJCWVyciA9IC1FSU5WQUw7CisJCQl9CisJCX0KKworCQlibG9jayA9IGxpc3RfZmlyc3Rf ZW50cnlfb3JfbnVsbCgmbW0tPmZyZWVfbGlzdFtvcmRlcl0sCisJCQkJCQkgc3RydWN0IGk5MTVf YnVkZHlfYmxvY2ssCisJCQkJCQkgbGluayk7CisJCWlmIChibG9jayAhPSByb290KSB7CisJCQlw cl9lcnIoInJvb3QgbWlzbWF0Y2ggYXQgb3JkZXI9JXVcbiIsIG9yZGVyKTsKKwkJCWVyciA9IC1F SU5WQUw7CisJCX0KKworCQlpZiAoZXJyKQorCQkJYnJlYWs7CisKKwkJcHJldiA9IHJvb3Q7CisJ CXRvdGFsICs9IGk5MTVfYnVkZHlfYmxvY2tfc2l6ZShtbSwgcm9vdCk7CisJfQorCisJaWYgKCFl cnIpIHsKKwkJaWYgKHRvdGFsICE9IG1tLT5zaXplKSB7CisJCQlwcl9lcnIoImV4cGVjdGVkIG1t IHNpemU9JWxseCwgZm91bmQ9JWxseFxuIiwgbW0tPnNpemUsCisJCQkgICAgICAgdG90YWwpOwor CQkJZXJyID0gLUVJTlZBTDsKKwkJfQorCQlyZXR1cm4gZXJyOworCX0KKworCWlmIChwcmV2KSB7 CisJCXByX2VycigicHJldiByb290KCV1KSwgZHVtcDpcbiIsIGkgLSAxKTsKKwkJaWd0X2R1bXBf YmxvY2sobW0sIHByZXYpOworCX0KKworCWlmIChyb290KSB7CisJCXByX2VycigiYmFkIHJvb3Qo JXUpLCBkdW1wOlxuIiwgaSk7CisJCWlndF9kdW1wX2Jsb2NrKG1tLCByb290KTsKKwl9CisKKwly ZXR1cm4gZXJyOworfQorCitzdGF0aWMgdm9pZCBpZ3RfbW1fY29uZmlnKHU2NCAqc2l6ZSwgdTY0 ICpjaHVua19zaXplKQoreworCUk5MTVfUk5EX1NUQVRFKHBybmcpOworCXUzMiBzLCBtczsKKwor CS8qIE5vdGhpbmcgZmFuY3ksIGp1c3QgdHJ5IHRvIGdldCBhbiBpbnRlcmVzdGluZyBiaXQgcGF0 dGVybiAqLworCisJcHJhbmRvbV9zZWVkX3N0YXRlKCZwcm5nLCBpOTE1X3NlbGZ0ZXN0LnJhbmRv bV9zZWVkKTsKKworCS8qIExldCBzaXplIGJlIGEgcmFuZG9tIG51bWJlciBvZiBwYWdlcyB1cCB0 byA4IEdCICgyTSBwYWdlcykgKi8KKwlzID0gMSArIGk5MTVfcHJhbmRvbV91MzJfbWF4X3N0YXRl KChCSVQoMzMgLSAxMikpIC0gMSwgJnBybmcpOworCS8qIExldCB0aGUgY2h1bmsgc2l6ZSBiZSBh IHJhbmRvbSBwb3dlciBvZiAyIGxlc3MgdGhhbiBzaXplICovCisJbXMgPSBCSVQoaTkxNV9wcmFu ZG9tX3UzMl9tYXhfc3RhdGUoaWxvZzIocyksICZwcm5nKSk7CisJLyogUm91bmQgc2l6ZSBkb3du IHRvIHRoZSBjaHVuayBzaXplICovCisJcyAmPSAtbXM7CisKKwkvKiBDb252ZXJ0IGZyb20gcGFn ZXMgdG8gYnl0ZXMgKi8KKwkqY2h1bmtfc2l6ZSA9ICh1NjQpbXMgPDwgMTI7CisJKnNpemUgPSAo dTY0KXMgPDwgMTI7Cit9CisKK3N0YXRpYyBpbnQgaWd0X2J1ZGR5X2FsbG9jX3Ntb2tlKHZvaWQg KmFyZykKK3sKKwlzdHJ1Y3QgaTkxNV9idWRkeV9tbSBtbTsKKwlJR1RfVElNRU9VVChlbmRfdGlt ZSk7CisJSTkxNV9STkRfU1RBVEUocHJuZyk7CisJdTY0IGNodW5rX3NpemU7CisJdTY0IG1tX3Np emU7CisJaW50ICpvcmRlcjsKKwlpbnQgZXJyLCBpOworCisJaWd0X21tX2NvbmZpZygmbW1fc2l6 ZSwgJmNodW5rX3NpemUpOworCisJcHJfaW5mbygiYnVkZHlfaW5pdCB3aXRoIHNpemU9JWxseCwg Y2h1bmtfc2l6ZT0lbGx4XG4iLCBtbV9zaXplLCBjaHVua19zaXplKTsKKworCWVyciA9IGk5MTVf YnVkZHlfaW5pdCgmbW0sIG1tX3NpemUsIGNodW5rX3NpemUpOworCWlmIChlcnIpIHsKKwkJcHJf ZXJyKCJidWRkeV9pbml0IGZhaWxlZCglZClcbiIsIGVycik7CisJCXJldHVybiBlcnI7CisJfQor CisJb3JkZXIgPSBpOTE1X3JhbmRvbV9vcmRlcihtbS5tYXhfb3JkZXIgKyAxLCAmcHJuZyk7CisJ aWYgKCFvcmRlcikKKwkJZ290byBvdXRfZmluaTsKKworCWZvciAoaSA9IDA7IGkgPD0gbW0ubWF4 X29yZGVyOyArK2kpIHsKKwkJc3RydWN0IGk5MTVfYnVkZHlfYmxvY2sgKmJsb2NrOworCQlpbnQg bWF4X29yZGVyID0gb3JkZXJbaV07CisJCWJvb2wgdGltZW91dCA9IGZhbHNlOworCQlMSVNUX0hF QUQoYmxvY2tzKTsKKwkJaW50IG9yZGVyOworCQl1NjQgdG90YWw7CisKKwkJZXJyID0gaWd0X2No ZWNrX21tKCZtbSk7CisJCWlmIChlcnIpIHsKKwkJCXByX2VycigicHJlLW1tIGNoZWNrIGZhaWxl ZCwgYWJvcnRcbiIpOworCQkJYnJlYWs7CisJCX0KKworCQlwcl9pbmZvKCJmaWxsaW5nIGZyb20g bWF4X29yZGVyPSV1XG4iLCBtYXhfb3JkZXIpOworCisJCW9yZGVyID0gbWF4X29yZGVyOworCQl0 b3RhbCA9IDA7CisKKwkJZG8geworcmV0cnk6CisJCQlibG9jayA9IGk5MTVfYnVkZHlfYWxsb2Mo Jm1tLCBvcmRlcik7CisJCQlpZiAoSVNfRVJSKGJsb2NrKSkgeworCQkJCWVyciA9IFBUUl9FUlIo YmxvY2spOworCQkJCWlmIChlcnIgPT0gLUVOT01FTSkgeworCQkJCQlwcl9pbmZvKCJidWRkeV9h bGxvYyBoaXQgLUVOT01FTSB3aXRoIG9yZGVyPSVkXG4iLAorCQkJCQkJb3JkZXIpOworCQkJCX0g ZWxzZSB7CisJCQkJCWlmIChvcmRlci0tKSB7CisJCQkJCQllcnIgPSAwOworCQkJCQkJZ290byBy ZXRyeTsKKwkJCQkJfQorCisJCQkJCXByX2VycigiYnVkZHlfYWxsb2Mgd2l0aCBvcmRlcj0lZCBm YWlsZWQoJWQpXG4iLAorCQkJCQkgICAgICAgb3JkZXIsIGVycik7CisJCQkJfQorCisJCQkJYnJl YWs7CisJCQl9CisKKwkJCWxpc3RfYWRkX3RhaWwoJmJsb2NrLT5saW5rLCAmYmxvY2tzKTsKKwor CQkJaWYgKGk5MTVfYnVkZHlfYmxvY2tfb3JkZXIoYmxvY2spICE9IG9yZGVyKSB7CisJCQkJcHJf ZXJyKCJidWRkeV9hbGxvYyBvcmRlciBtaXNtYXRjaFxuIik7CisJCQkJZXJyID0gLUVJTlZBTDsK KwkJCQlicmVhazsKKwkJCX0KKworCQkJdG90YWwgKz0gaTkxNV9idWRkeV9ibG9ja19zaXplKCZt bSwgYmxvY2spOworCisJCQlpZiAoX19pZ3RfdGltZW91dChlbmRfdGltZSwgTlVMTCkpIHsKKwkJ CQl0aW1lb3V0ID0gdHJ1ZTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfSB3aGlsZSAodG90YWwgPCBt bS5zaXplKTsKKworCQlpZiAoIWVycikKKwkJCWVyciA9IGlndF9jaGVja19ibG9ja3MoJm1tLCAm YmxvY2tzLCB0b3RhbCwgZmFsc2UpOworCisJCWk5MTVfYnVkZHlfZnJlZV9saXN0KCZtbSwgJmJs b2Nrcyk7CisKKwkJaWYgKCFlcnIpIHsKKwkJCWVyciA9IGlndF9jaGVja19tbSgmbW0pOworCQkJ aWYgKGVycikKKwkJCQlwcl9lcnIoInBvc3QtbW0gY2hlY2sgZmFpbGVkXG4iKTsKKwkJfQorCisJ CWlmIChlcnIgfHwgdGltZW91dCkKKwkJCWJyZWFrOworCisJCWNvbmRfcmVzY2hlZCgpOworCX0K KworCWlmIChlcnIgPT0gLUVOT01FTSkKKwkJZXJyID0gMDsKKworCWtmcmVlKG9yZGVyKTsKK291 dF9maW5pOgorCWk5MTVfYnVkZHlfZmluaSgmbW0pOworCisJcmV0dXJuIGVycjsKK30KKworc3Rh dGljIGludCBpZ3RfYnVkZHlfYWxsb2NfcGVzc2ltaXN0aWModm9pZCAqYXJnKQoreworCWNvbnN0 IHVuc2lnbmVkIGludCBtYXhfb3JkZXIgPSAxNjsKKwlzdHJ1Y3QgaTkxNV9idWRkeV9ibG9jayAq YmxvY2ssICpibjsKKwlzdHJ1Y3QgaTkxNV9idWRkeV9tbSBtbTsKKwl1bnNpZ25lZCBpbnQgb3Jk ZXI7CisJTElTVF9IRUFEKGJsb2Nrcyk7CisJaW50IGVycjsKKworCS8qCisJICogQ3JlYXRlIGEg cG90LXNpemVkIG1tLCB0aGVuIGFsbG9jYXRlIG9uZSBvZiBlYWNoIHBvc3NpYmxlCisJICogb3Jk ZXIgd2l0aGluLiBUaGlzIHNob3VsZCBsZWF2ZSB0aGUgbW0gd2l0aCBleGFjdGx5IG9uZQorCSAq IHBhZ2UgbGVmdC4KKwkgKi8KKworCWVyciA9IGk5MTVfYnVkZHlfaW5pdCgmbW0sIFBBR0VfU0la RSA8PCBtYXhfb3JkZXIsIFBBR0VfU0laRSk7CisJaWYgKGVycikgeworCQlwcl9lcnIoImJ1ZGR5 X2luaXQgZmFpbGVkKCVkKVxuIiwgZXJyKTsKKwkJcmV0dXJuIGVycjsKKwl9CisJR0VNX0JVR19P TihtbS5tYXhfb3JkZXIgIT0gbWF4X29yZGVyKTsKKworCWZvciAob3JkZXIgPSAwOyBvcmRlciA8 IG1heF9vcmRlcjsgb3JkZXIrKykgeworCQlibG9jayA9IGk5MTVfYnVkZHlfYWxsb2MoJm1tLCBv cmRlcik7CisJCWlmIChJU19FUlIoYmxvY2spKSB7CisJCQlwcl9pbmZvKCJidWRkeV9hbGxvYyBo aXQgLUVOT01FTSB3aXRoIG9yZGVyPSVkXG4iLAorCQkJCW9yZGVyKTsKKwkJCWVyciA9IFBUUl9F UlIoYmxvY2spOworCQkJZ290byBlcnI7CisJCX0KKworCQlsaXN0X2FkZF90YWlsKCZibG9jay0+ bGluaywgJmJsb2Nrcyk7CisJfQorCisJLyogQW5kIG5vdyB0aGUgbGFzdCByZW1haW5pbmcgYmxv Y2sgYXZhaWxhYmxlICovCisJYmxvY2sgPSBpOTE1X2J1ZGR5X2FsbG9jKCZtbSwgMCk7CisJaWYg KElTX0VSUihibG9jaykpIHsKKwkJcHJfaW5mbygiYnVkZHlfYWxsb2MgaGl0IC1FTk9NRU0gb24g ZmluYWwgYWxsb2NcbiIpOworCQllcnIgPSBQVFJfRVJSKGJsb2NrKTsKKwkJZ290byBlcnI7CisJ fQorCWxpc3RfYWRkX3RhaWwoJmJsb2NrLT5saW5rLCAmYmxvY2tzKTsKKworCS8qIFNob3VsZCBi ZSBjb21wbGV0ZWx5IGZ1bGwhICovCisJZm9yIChvcmRlciA9IG1heF9vcmRlcjsgb3JkZXItLTsg KSB7CisJCWJsb2NrID0gaTkxNV9idWRkeV9hbGxvYygmbW0sIG9yZGVyKTsKKwkJaWYgKCFJU19F UlIoYmxvY2spKSB7CisJCQlwcl9pbmZvKCJidWRkeV9hbGxvYyB1bmV4cGVjdGVkbHkgc3VjY2Vl ZGVkIGF0IG9yZGVyICVkLCBpdCBzaG91bGQgYmUgZnVsbCEiLAorCQkJCW9yZGVyKTsKKwkJCWxp c3RfYWRkX3RhaWwoJmJsb2NrLT5saW5rLCAmYmxvY2tzKTsKKwkJCWVyciA9IC1FSU5WQUw7CisJ CQlnb3RvIGVycjsKKwkJfQorCX0KKworCWJsb2NrID0gbGlzdF9sYXN0X2VudHJ5KCZibG9ja3Ms IHR5cGVvZigqYmxvY2spLCBsaW5rKTsKKwlsaXN0X2RlbCgmYmxvY2stPmxpbmspOworCWk5MTVf YnVkZHlfZnJlZSgmbW0sIGJsb2NrKTsKKworCS8qIEFzIHdlIGZyZWUgaW4gaW5jcmVhc2luZyBz aXplLCB3ZSBtYWtlIGF2YWlsYWJsZSBsYXJnZXIgYmxvY2tzICovCisJb3JkZXIgPSAxOworCWxp c3RfZm9yX2VhY2hfZW50cnlfc2FmZShibG9jaywgYm4sICZibG9ja3MsIGxpbmspIHsKKwkJbGlz dF9kZWwoJmJsb2NrLT5saW5rKTsKKwkJaTkxNV9idWRkeV9mcmVlKCZtbSwgYmxvY2spOworCisJ CWJsb2NrID0gaTkxNV9idWRkeV9hbGxvYygmbW0sIG9yZGVyKTsKKwkJaWYgKElTX0VSUihibG9j aykpIHsKKwkJCXByX2luZm8oImJ1ZGR5X2FsbG9jIChyZWFsbG9jKSBoaXQgLUVOT01FTSB3aXRo IG9yZGVyPSVkXG4iLAorCQkJCW9yZGVyKTsKKwkJCWVyciA9IFBUUl9FUlIoYmxvY2spOworCQkJ Z290byBlcnI7CisJCX0KKwkJaTkxNV9idWRkeV9mcmVlKCZtbSwgYmxvY2spOworCQlvcmRlcisr OworCX0KKworCS8qIFRvIGNvbmZpcm0sIG5vdyB0aGUgd2hvbGUgbW0gc2hvdWxkIGJlIGF2YWls YWJsZSAqLworCWJsb2NrID0gaTkxNV9idWRkeV9hbGxvYygmbW0sIG1heF9vcmRlcik7CisJaWYg KElTX0VSUihibG9jaykpIHsKKwkJcHJfaW5mbygiYnVkZHlfYWxsb2MgKHJlYWxsb2MpIGhpdCAt RU5PTUVNIHdpdGggb3JkZXI9JWRcbiIsCisJCQltYXhfb3JkZXIpOworCQllcnIgPSBQVFJfRVJS KGJsb2NrKTsKKwkJZ290byBlcnI7CisJfQorCWk5MTVfYnVkZHlfZnJlZSgmbW0sIGJsb2NrKTsK KworZXJyOgorCWk5MTVfYnVkZHlfZnJlZV9saXN0KCZtbSwgJmJsb2Nrcyk7CisJaTkxNV9idWRk eV9maW5pKCZtbSk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBpZ3RfYnVkZHlfYWxs b2Nfb3B0aW1pc3RpYyh2b2lkICphcmcpCit7CisJY29uc3QgaW50IG1heF9vcmRlciA9IDE2Owor CXN0cnVjdCBpOTE1X2J1ZGR5X2Jsb2NrICpibG9jazsKKwlzdHJ1Y3QgaTkxNV9idWRkeV9tbSBt bTsKKwlMSVNUX0hFQUQoYmxvY2tzKTsKKwlpbnQgb3JkZXI7CisJaW50IGVycjsKKworCS8qCisJ ICogQ3JlYXRlIGEgbW0gd2l0aCBvbmUgYmxvY2sgb2YgZWFjaCBvcmRlciBhdmFpbGFibGUsIGFu ZAorCSAqIHRyeSB0byBhbGxvY2F0ZSB0aGVtIGFsbC4KKwkgKi8KKworCWVyciA9IGk5MTVfYnVk ZHlfaW5pdCgmbW0sCisJCQkgICAgICBQQUdFX1NJWkUgKiAoKDEgPDwgKG1heF9vcmRlciArIDEp KSAtIDEpLAorCQkJICAgICAgUEFHRV9TSVpFKTsKKwlpZiAoZXJyKSB7CisJCXByX2VycigiYnVk ZHlfaW5pdCBmYWlsZWQoJWQpXG4iLCBlcnIpOworCQlyZXR1cm4gZXJyOworCX0KKwlHRU1fQlVH X09OKG1tLm1heF9vcmRlciAhPSBtYXhfb3JkZXIpOworCisJZm9yIChvcmRlciA9IDA7IG9yZGVy IDw9IG1heF9vcmRlcjsgb3JkZXIrKykgeworCQlibG9jayA9IGk5MTVfYnVkZHlfYWxsb2MoJm1t LCBvcmRlcik7CisJCWlmIChJU19FUlIoYmxvY2spKSB7CisJCQlwcl9pbmZvKCJidWRkeV9hbGxv YyBoaXQgLUVOT01FTSB3aXRoIG9yZGVyPSVkXG4iLAorCQkJCW9yZGVyKTsKKwkJCWVyciA9IFBU Ul9FUlIoYmxvY2spOworCQkJZ290byBlcnI7CisJCX0KKworCQlsaXN0X2FkZF90YWlsKCZibG9j ay0+bGluaywgJmJsb2Nrcyk7CisJfQorCisJLyogU2hvdWxkIGJlIGNvbXBsZXRlbHkgZnVsbCEg Ki8KKwlibG9jayA9IGk5MTVfYnVkZHlfYWxsb2MoJm1tLCAwKTsKKwlpZiAoIUlTX0VSUihibG9j aykpIHsKKwkJcHJfaW5mbygiYnVkZHlfYWxsb2MgdW5leHBlY3RlZGx5IHN1Y2NlZWRlZCwgaXQg c2hvdWxkIGJlIGZ1bGwhIik7CisJCWxpc3RfYWRkX3RhaWwoJmJsb2NrLT5saW5rLCAmYmxvY2tz KTsKKwkJZXJyID0gLUVJTlZBTDsKKwkJZ290byBlcnI7CisJfQorCitlcnI6CisJaTkxNV9idWRk eV9mcmVlX2xpc3QoJm1tLCAmYmxvY2tzKTsKKwlpOTE1X2J1ZGR5X2ZpbmkoJm1tKTsKKwlyZXR1 cm4gZXJyOworfQorCitzdGF0aWMgaW50IGlndF9idWRkeV9hbGxvY19wYXRob2xvZ2ljYWwodm9p ZCAqYXJnKQoreworCWNvbnN0IGludCBtYXhfb3JkZXIgPSAxNjsKKwlzdHJ1Y3QgaTkxNV9idWRk eV9ibG9jayAqYmxvY2s7CisJc3RydWN0IGk5MTVfYnVkZHlfbW0gbW07CisJTElTVF9IRUFEKGJs b2Nrcyk7CisJTElTVF9IRUFEKGhvbGVzKTsKKwlpbnQgb3JkZXIsIHRvcDsKKwlpbnQgZXJyOwor CisJLyoKKwkgKiBDcmVhdGUgYSBwb3Qtc2l6ZWQgbW0sIHRoZW4gYWxsb2NhdGUgb25lIG9mIGVh Y2ggcG9zc2libGUKKwkgKiBvcmRlciB3aXRoaW4uIFRoaXMgc2hvdWxkIGxlYXZlIHRoZSBtbSB3 aXRoIGV4YWN0bHkgb25lCisJICogcGFnZSBsZWZ0LiBGcmVlIHRoZSBsYXJnZXN0IGJsb2NrLCB0 aGVuIHdoaXR0bGUgZG93biBhZ2Fpbi4KKwkgKiBFdmVudHVhbGx5IHdlIHdpbGwgaGF2ZSBhIGZ1 bGx5IDUwJSBmcmFnbWVudGVkIG1tLgorCSAqLworCisJZXJyID0gaTkxNV9idWRkeV9pbml0KCZt bSwgUEFHRV9TSVpFIDw8IG1heF9vcmRlciwgUEFHRV9TSVpFKTsKKwlpZiAoZXJyKSB7CisJCXBy X2VycigiYnVkZHlfaW5pdCBmYWlsZWQoJWQpXG4iLCBlcnIpOworCQlyZXR1cm4gZXJyOworCX0K KwlHRU1fQlVHX09OKG1tLm1heF9vcmRlciAhPSBtYXhfb3JkZXIpOworCisJZm9yICh0b3AgPSBt YXhfb3JkZXI7IHRvcDsgdG9wLS0pIHsKKwkJLyogTWFrZSByb29tIGJ5IGZyZWVpbmcgdGhlIGxh cmdlc3QgYWxsb2NhdGVkIGJsb2NrICovCisJCWJsb2NrID0gbGlzdF9maXJzdF9lbnRyeV9vcl9u dWxsKCZibG9ja3MsIHR5cGVvZigqYmxvY2spLCBsaW5rKTsKKwkJaWYgKGJsb2NrKSB7CisJCQls aXN0X2RlbCgmYmxvY2stPmxpbmspOworCQkJaTkxNV9idWRkeV9mcmVlKCZtbSwgYmxvY2spOwor CQl9CisKKwkJZm9yIChvcmRlciA9IHRvcDsgb3JkZXItLTsgKSB7CisJCQlibG9jayA9IGk5MTVf YnVkZHlfYWxsb2MoJm1tLCBvcmRlcik7CisJCQlpZiAoSVNfRVJSKGJsb2NrKSkgeworCQkJCXBy X2luZm8oImJ1ZGR5X2FsbG9jIGhpdCAtRU5PTUVNIHdpdGggb3JkZXI9JWQsIHRvcD0lZFxuIiwK KwkJCQkJb3JkZXIsIHRvcCk7CisJCQkJZXJyID0gUFRSX0VSUihibG9jayk7CisJCQkJZ290byBl cnI7CisJCQl9CisJCQlsaXN0X2FkZF90YWlsKCZibG9jay0+bGluaywgJmJsb2Nrcyk7CisJCX0K KworCQkvKiBUaGVyZSBzaG91bGQgYmUgb25lIGZpbmFsIHBhZ2UgZm9yIHRoaXMgc3ViLWFsbG9j YXRpb24gKi8KKwkJYmxvY2sgPSBpOTE1X2J1ZGR5X2FsbG9jKCZtbSwgMCk7CisJCWlmIChJU19F UlIoYmxvY2spKSB7CisJCQlwcl9pbmZvKCJidWRkeV9hbGxvYyBoaXQgLUVOT01FTSBmb3IgaG9s ZVxuIik7CisJCQllcnIgPSBQVFJfRVJSKGJsb2NrKTsKKwkJCWdvdG8gZXJyOworCQl9CisJCWxp c3RfYWRkX3RhaWwoJmJsb2NrLT5saW5rLCAmaG9sZXMpOworCisJCWJsb2NrID0gaTkxNV9idWRk eV9hbGxvYygmbW0sIHRvcCk7CisJCWlmICghSVNfRVJSKGJsb2NrKSkgeworCQkJcHJfaW5mbygi YnVkZHlfYWxsb2MgdW5leHBlY3RlZGx5IHN1Y2NlZWRlZCBhdCB0b3Atb3JkZXIgJWQvJWQsIGl0 IHNob3VsZCBiZSBmdWxsISIsCisJCQkJdG9wLCBtYXhfb3JkZXIpOworCQkJbGlzdF9hZGRfdGFp bCgmYmxvY2stPmxpbmssICZibG9ja3MpOworCQkJZXJyID0gLUVJTlZBTDsKKwkJCWdvdG8gZXJy OworCQl9CisJfQorCisJaTkxNV9idWRkeV9mcmVlX2xpc3QoJm1tLCAmaG9sZXMpOworCisJLyog Tm90aGluZyBsYXJnZXIgdGhhbiBibG9ja3Mgb2YgY2h1bmtfc2l6ZSBub3cgYXZhaWxhYmxlICov CisJZm9yIChvcmRlciA9IDE7IG9yZGVyIDw9IG1heF9vcmRlcjsgb3JkZXIrKykgeworCQlibG9j ayA9IGk5MTVfYnVkZHlfYWxsb2MoJm1tLCBvcmRlcik7CisJCWlmICghSVNfRVJSKGJsb2NrKSkg eworCQkJcHJfaW5mbygiYnVkZHlfYWxsb2MgdW5leHBlY3RlZGx5IHN1Y2NlZWRlZCBhdCBvcmRl ciAlZCwgaXQgc2hvdWxkIGJlIGZ1bGwhIiwKKwkJCQlvcmRlcik7CisJCQlsaXN0X2FkZF90YWls KCZibG9jay0+bGluaywgJmJsb2Nrcyk7CisJCQllcnIgPSAtRUlOVkFMOworCQkJZ290byBlcnI7 CisJCX0KKwl9CisKK2VycjoKKwlsaXN0X3NwbGljZV90YWlsKCZob2xlcywgJmJsb2Nrcyk7CisJ aTkxNV9idWRkeV9mcmVlX2xpc3QoJm1tLCAmYmxvY2tzKTsKKwlpOTE1X2J1ZGR5X2ZpbmkoJm1t KTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IGlndF9idWRkeV9hbGxvY19yYW5nZSh2 b2lkICphcmcpCit7CisJc3RydWN0IGk5MTVfYnVkZHlfbW0gbW07CisJdW5zaWduZWQgbG9uZyBw YWdlX251bTsKKwlMSVNUX0hFQUQoYmxvY2tzKTsKKwl1NjQgY2h1bmtfc2l6ZTsKKwl1NjQgb2Zm c2V0OworCXU2NCBzaXplOworCXU2NCByZW07CisJaW50IGVycjsKKworCWlndF9tbV9jb25maWco JnNpemUsICZjaHVua19zaXplKTsKKworCXByX2luZm8oImJ1ZGR5X2luaXQgd2l0aCBzaXplPSVs bHgsIGNodW5rX3NpemU9JWxseFxuIiwgc2l6ZSwgY2h1bmtfc2l6ZSk7CisKKwllcnIgPSBpOTE1 X2J1ZGR5X2luaXQoJm1tLCBzaXplLCBjaHVua19zaXplKTsKKwlpZiAoZXJyKSB7CisJCXByX2Vy cigiYnVkZHlfaW5pdCBmYWlsZWQoJWQpXG4iLCBlcnIpOworCQlyZXR1cm4gZXJyOworCX0KKwor CWVyciA9IGlndF9jaGVja19tbSgmbW0pOworCWlmIChlcnIpIHsKKwkJcHJfZXJyKCJwcmUtbW0g Y2hlY2sgZmFpbGVkLCBhYm9ydCwgYWJvcnQsIGFib3J0IVxuIik7CisJCWdvdG8gZXJyX2Zpbmk7 CisJfQorCisJcmVtID0gbW0uc2l6ZTsKKwlvZmZzZXQgPSAwOworCisJZm9yX2VhY2hfcHJpbWVf bnVtYmVyX2Zyb20ocGFnZV9udW0sIDEsIFVMT05HX01BWCAtIDEpIHsKKwkJc3RydWN0IGk5MTVf YnVkZHlfYmxvY2sgKmJsb2NrOworCQlMSVNUX0hFQUQodG1wKTsKKworCQlzaXplID0gbWluKHBh Z2VfbnVtICogbW0uY2h1bmtfc2l6ZSwgcmVtKTsKKworCQllcnIgPSBpOTE1X2J1ZGR5X2FsbG9j X3JhbmdlKCZtbSwgJnRtcCwgb2Zmc2V0LCBzaXplKTsKKwkJaWYgKGVycikgeworCQkJaWYgKGVy ciA9PSAtRU5PTUVNKSB7CisJCQkJcHJfaW5mbygiYWxsb2NfcmFuZ2UgaGl0IC1FTk9NRU0gd2l0 aCBzaXplPSVsbHhcbiIsCisJCQkJCXNpemUpOworCQkJfSBlbHNlIHsKKwkJCQlwcl9lcnIoImFs bG9jX3JhbmdlIHdpdGggb2Zmc2V0PSVsbHgsIHNpemU9JWxseCBmYWlsZWQoJWQpXG4iLAorCQkJ CSAgICAgICBvZmZzZXQsIHNpemUsIGVycik7CisJCQl9CisKKwkJCWJyZWFrOworCQl9CisKKwkJ YmxvY2sgPSBsaXN0X2ZpcnN0X2VudHJ5X29yX251bGwoJnRtcCwKKwkJCQkJCSBzdHJ1Y3QgaTkx NV9idWRkeV9ibG9jaywKKwkJCQkJCSBsaW5rKTsKKwkJaWYgKCFibG9jaykgeworCQkJcHJfZXJy KCJhbGxvY19yYW5nZSBoYXMgbm8gYmxvY2tzXG4iKTsKKwkJCWVyciA9IC1FSU5WQUw7CisJCQli cmVhazsKKwkJfQorCisJCWlmIChpOTE1X2J1ZGR5X2Jsb2NrX29mZnNldChibG9jaykgIT0gb2Zm c2V0KSB7CisJCQlwcl9lcnIoImFsbG9jX3JhbmdlIHN0YXJ0IG9mZnNldCBtaXNtYXRjaCwgZm91 bmQ9JWxseCwgZXhwZWN0ZWQ9JWxseFxuIiwKKwkJCSAgICAgICBpOTE1X2J1ZGR5X2Jsb2NrX29m ZnNldChibG9jayksIG9mZnNldCk7CisJCQllcnIgPSAtRUlOVkFMOworCQl9CisKKwkJaWYgKCFl cnIpCisJCQllcnIgPSBpZ3RfY2hlY2tfYmxvY2tzKCZtbSwgJnRtcCwgc2l6ZSwgdHJ1ZSk7CisK KwkJbGlzdF9zcGxpY2VfdGFpbCgmdG1wLCAmYmxvY2tzKTsKKworCQlpZiAoZXJyKQorCQkJYnJl YWs7CisKKwkJb2Zmc2V0ICs9IHNpemU7CisKKwkJcmVtIC09IHNpemU7CisJCWlmICghcmVtKQor CQkJYnJlYWs7CisKKwkJY29uZF9yZXNjaGVkKCk7CisJfQorCisJaWYgKGVyciA9PSAtRU5PTUVN KQorCQllcnIgPSAwOworCisJaTkxNV9idWRkeV9mcmVlX2xpc3QoJm1tLCAmYmxvY2tzKTsKKwor CWlmICghZXJyKSB7CisJCWVyciA9IGlndF9jaGVja19tbSgmbW0pOworCQlpZiAoZXJyKQorCQkJ cHJfZXJyKCJwb3N0LW1tIGNoZWNrIGZhaWxlZFxuIik7CisJfQorCitlcnJfZmluaToKKwlpOTE1 X2J1ZGR5X2ZpbmkoJm1tKTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgaWd0X2J1 ZGR5X2FsbG9jX2xpbWl0KHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3QgaTkxNV9idWRkeV9ibG9jayAq YmxvY2s7CisJc3RydWN0IGk5MTVfYnVkZHlfbW0gbW07CisJY29uc3QgdTY0IHNpemUgPSBVNjRf TUFYOworCWludCBlcnI7CisKKwllcnIgPSBpOTE1X2J1ZGR5X2luaXQoJm1tLCBzaXplLCBQQUdF X1NJWkUpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwlpZiAobW0ubWF4X29yZGVyICE9 IEk5MTVfQlVERFlfTUFYX09SREVSKSB7CisJCXByX2VycigibW0ubWF4X29yZGVyKCVkKSAhPSAl ZFxuIiwKKwkJICAgICAgIG1tLm1heF9vcmRlciwgSTkxNV9CVUREWV9NQVhfT1JERVIpOworCQll cnIgPSAtRUlOVkFMOworCQlnb3RvIG91dF9maW5pOworCX0KKworCWJsb2NrID0gaTkxNV9idWRk eV9hbGxvYygmbW0sIG1tLm1heF9vcmRlcik7CisJaWYgKElTX0VSUihibG9jaykpIHsKKwkJZXJy ID0gUFRSX0VSUihibG9jayk7CisJCWdvdG8gb3V0X2Zpbmk7CisJfQorCisJaWYgKGk5MTVfYnVk ZHlfYmxvY2tfb3JkZXIoYmxvY2spICE9IG1tLm1heF9vcmRlcikgeworCQlwcl9lcnIoImJsb2Nr IG9yZGVyKCVkKSAhPSAlZFxuIiwKKwkJICAgICAgIGk5MTVfYnVkZHlfYmxvY2tfb3JkZXIoYmxv Y2spLCBtbS5tYXhfb3JkZXIpOworCQllcnIgPSAtRUlOVkFMOworCQlnb3RvIG91dF9mcmVlOwor CX0KKworCWlmIChpOTE1X2J1ZGR5X2Jsb2NrX3NpemUoJm1tLCBibG9jaykgIT0KKwkgICAgQklU X1VMTChtbS5tYXhfb3JkZXIpICogUEFHRV9TSVpFKSB7CisJCXByX2VycigiYmxvY2sgc2l6ZSgl bGx1KSAhPSAlbGx1XG4iLAorCQkgICAgICAgaTkxNV9idWRkeV9ibG9ja19zaXplKCZtbSwgYmxv Y2spLAorCQkgICAgICAgQklUX1VMTChtbS5tYXhfb3JkZXIpICogUEFHRV9TSVpFKTsKKwkJZXJy ID0gLUVJTlZBTDsKKwkJZ290byBvdXRfZnJlZTsKKwl9CisKK291dF9mcmVlOgorCWk5MTVfYnVk ZHlfZnJlZSgmbW0sIGJsb2NrKTsKK291dF9maW5pOgorCWk5MTVfYnVkZHlfZmluaSgmbW0pOwor CXJldHVybiBlcnI7Cit9CisKK2ludCBpOTE1X2J1ZGR5X21vY2tfc2VsZnRlc3RzKHZvaWQpCit7 CisJc3RhdGljIGNvbnN0IHN0cnVjdCBpOTE1X3N1YnRlc3QgdGVzdHNbXSA9IHsKKwkJU1VCVEVT VChpZ3RfYnVkZHlfYWxsb2NfcGVzc2ltaXN0aWMpLAorCQlTVUJURVNUKGlndF9idWRkeV9hbGxv Y19vcHRpbWlzdGljKSwKKwkJU1VCVEVTVChpZ3RfYnVkZHlfYWxsb2NfcGF0aG9sb2dpY2FsKSwK KwkJU1VCVEVTVChpZ3RfYnVkZHlfYWxsb2Nfc21va2UpLAorCQlTVUJURVNUKGlndF9idWRkeV9h bGxvY19yYW5nZSksCisJCVNVQlRFU1QoaWd0X2J1ZGR5X2FsbG9jX2xpbWl0KSwKKwl9OworCisJ cmV0dXJuIGk5MTVfc3VidGVzdHModGVzdHMsIE5VTEwpOworfQotLSAKMi4yNi4zCgpfX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGlu ZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVl ZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK