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.6 required=3.0 tests=DKIM_INVALID,DKIM_SIGNED, 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 DCEC0C352A4 for ; Tue, 11 Feb 2020 00:55:04 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (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 9AD052072C for ; Tue, 11 Feb 2020 00:55:04 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=quicinc.com header.i=@quicinc.com header.b="Gsp1ofLJ" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 9AD052072C Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=quicinc.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Received: from localhost ([::1]:41734 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1j1JpO-0007B3-Mo for qemu-devel@archiver.kernel.org; Mon, 10 Feb 2020 19:55:02 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:59847) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1j1Jbu-0000yf-UE for qemu-devel@nongnu.org; Mon, 10 Feb 2020 19:41:12 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1j1Jbr-000500-5n for qemu-devel@nongnu.org; Mon, 10 Feb 2020 19:41:06 -0500 Received: from alexa-out-sd-02.qualcomm.com ([199.106.114.39]:59208) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1j1Jbq-0004uP-Oh for qemu-devel@nongnu.org; Mon, 10 Feb 2020 19:41:03 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=quicinc.com; i=@quicinc.com; q=dns/txt; s=qcdkim; t=1581381662; x=1612917662; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=+2eSOLkXxiaKYxSAUfJ7Trhq3ZkpiHa9WIfcb1oMvb0=; b=Gsp1ofLJ2Cci+VG2KSim74SlSQBtL7j97QLi28BR5roOxRew4JqKRFvo 3RXY80/pmRwwiBPWjozPEdHuaqC2mHsXQoQO0MGCkvlsFwL+Ne+CaFfSw YdM1xosjhhMyFqwgVavJVDU4AwCGy3SGP8nvgWP7N5SF4SKeuA4xOMjiv E=; Received: from unknown (HELO ironmsg03-sd.qualcomm.com) ([10.53.140.143]) by alexa-out-sd-02.qualcomm.com with ESMTP; 10 Feb 2020 16:40:58 -0800 Received: from vu-tsimpson-aus.qualcomm.com (HELO vu-tsimpson1-aus.qualcomm.com) ([10.222.150.1]) by ironmsg03-sd.qualcomm.com with ESMTP; 10 Feb 2020 16:40:58 -0800 Received: by vu-tsimpson1-aus.qualcomm.com (Postfix, from userid 47164) id 8300C1B76; Mon, 10 Feb 2020 18:40:57 -0600 (CST) From: Taylor Simpson To: qemu-devel@nongnu.org Subject: [RFC PATCH 06/66] Hexagon CPU Scalar Core Helpers Date: Mon, 10 Feb 2020 18:39:44 -0600 Message-Id: <1581381644-13678-7-git-send-email-tsimpson@quicinc.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1581381644-13678-1-git-send-email-tsimpson@quicinc.com> References: <1581381644-13678-1-git-send-email-tsimpson@quicinc.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 X-detected-operating-system: by eggs.gnu.org: FreeBSD 9.x [fuzzy] X-Received-From: 199.106.114.39 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: riku.voipio@iki.fi, richard.henderson@linaro.org, laurent@vivier.eu, Taylor Simpson , philmd@redhat.com, aleksandar.m.mail@gmail.com Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: "Qemu-devel" VGhlIG1ham9yaXR5IG9mIGhlbHBlcnMgYXJlIGdlbmVyYXRlZC4gIERlZmluZSB0aGUgaGVscGVy IGZ1bmN0aW9ucyBuZWVkZWQKdGhlbiBpbmNsdWRlIHRoZSBnZW5lcmF0ZWQgZmlsZQoKU2lnbmVk LW9mZi1ieTogVGF5bG9yIFNpbXBzb24gPHRzaW1wc29uQHF1aWNpbmMuY29tPgotLS0KIHRhcmdl dC9oZXhhZ29uL2hlbHBlci5oICAgIHwgIDM3ICsrKysKIHRhcmdldC9oZXhhZ29uL29wX2hlbHBl ci5jIHwgNDMyICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwog MiBmaWxlcyBjaGFuZ2VkLCA0NjkgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHRh cmdldC9oZXhhZ29uL2hlbHBlci5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgdGFyZ2V0L2hleGFnb24v b3BfaGVscGVyLmMKCmRpZmYgLS1naXQgYS90YXJnZXQvaGV4YWdvbi9oZWxwZXIuaCBiL3Rhcmdl dC9oZXhhZ29uL2hlbHBlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVk YzBmNzEKLS0tIC9kZXYvbnVsbAorKysgYi90YXJnZXQvaGV4YWdvbi9oZWxwZXIuaApAQCAtMCww ICsxLDM3IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxOSBRdWFsY29tbSBJbm5vdmF0aW9u IENlbnRlciwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqICBUaGlzIHByb2dyYW0g aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQor ICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug YXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBs YXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhl IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFO VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJ TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBH TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ug c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSA8aHR0cDovL3d3 dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKi8KKworI2luY2x1ZGUgImhlbHBlcl9vdmVycmlkZXMu aCIKKworREVGX0hFTFBFUl8yKHJhaXNlX2V4Y2VwdGlvbiwgbm9yZXR1cm4sIGVudiwgaTMyKQor REVGX0hFTFBFUl8xKGRlYnVnX3N0YXJ0X3BhY2tldCwgdm9pZCwgZW52KQorREVGX0hFTFBFUl8y KG5ld192YWx1ZSwgczMyLCBlbnYsIGludCkKK0RFRl9IRUxQRVJfMyhkZWJ1Z19jaGVja19zdG9y ZV93aWR0aCwgdm9pZCwgZW52LCBpbnQsIGludCkKK0RFRl9IRUxQRVJfMyhkZWJ1Z19jb21taXRf ZW5kLCB2b2lkLCBlbnYsIGludCwgaW50KQorREVGX0hFTFBFUl8zKHNmcmVjaXBhX3ZhbCwgczMy LCBlbnYsIHMzMiwgczMyKQorREVGX0hFTFBFUl8zKHNmcmVjaXBhX3ByZWQsIHMzMiwgZW52LCBz MzIsIHMzMikKK0RFRl9IRUxQRVJfMihzZmludnNxcnRhX3ZhbCwgczMyLCBlbnYsIHMzMikKK0RF Rl9IRUxQRVJfMihzZmludnNxcnRhX3ByZWQsIHMzMiwgZW52LCBzMzIpCitERUZfSEVMUEVSXzQo dmFjc2hfdmFsLCBzNjQsIGVudiwgczY0LCBzNjQsIHM2NCkKK0RFRl9IRUxQRVJfNCh2YWNzaF9w cmVkLCBzMzIsIGVudiwgczY0LCBzNjQsIHM2NCkKKworI2RlZmluZSBERUZfUUVNVShUQUcsIFNI T1JUQ09ERSwgSEVMUEVSLCBHRU5GTiwgSEVMUEZOKSBIRUxQRVIKKyNpbmNsdWRlICJxZW11X2Rl Zl9nZW5lcmF0ZWQuaCIKKyN1bmRlZiBERUZfUUVNVQorCitERUZfSEVMUEVSXzIoZGVidWdfdmFs dWUsIHZvaWQsIGVudiwgczMyKQorREVGX0hFTFBFUl8yKGRlYnVnX3ZhbHVlX2k2NCwgdm9pZCwg ZW52LCBzNjQpCmRpZmYgLS1naXQgYS90YXJnZXQvaGV4YWdvbi9vcF9oZWxwZXIuYyBiL3Rhcmdl dC9oZXhhZ29uL29wX2hlbHBlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu LjY2Y2NkMjAKLS0tIC9kZXYvbnVsbAorKysgYi90YXJnZXQvaGV4YWdvbi9vcF9oZWxwZXIuYwpA QCAtMCwwICsxLDQzMiBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTkgUXVhbGNvbW0gSW5u b3ZhdGlvbiBDZW50ZXIsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiAgVGhpcyBw cm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBt b2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247 IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9u KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVk IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5Z IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJD SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl CisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisg KiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgPGh0 dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICovCisKKyNpbmNsdWRlIDxzdGRib29sLmg+ CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRkZWYuaD4KKyNpbmNsdWRlIDxtYXRo Lmg+CisjaW5jbHVkZSAicWVtdS9vc2RlcC5oIgorI2luY2x1ZGUgInFlbXUuaCIKKyNpbmNsdWRl ICJleGVjL2hlbHBlci1wcm90by5oIgorI2luY2x1ZGUgInRjZy90Y2ctb3AuaCIKKyNpbmNsdWRl ICJjcHUuaCIKKyNpbmNsdWRlICJpbnRlcm5hbC5oIgorI2luY2x1ZGUgIm1hY3Jvcy5oIgorI2lu Y2x1ZGUgImFyY2guaCIKKyNpbmNsdWRlICJmbWFfZW11LmgiCisjaW5jbHVkZSAiY29udl9lbXUu aCIKKworI2lmIENPVU5UX0hFWF9IRUxQRVJTCisjaW5jbHVkZSAib3Bjb2Rlcy5oIgorCit0eXBl ZGVmIHN0cnVjdCB7CisgICAgaW50IGNvdW50OworICAgIGNvbnN0IGNoYXIgKnRhZzsKK30gaGVs cGVyX2NvdW50X3Q7CisKK2hlbHBlcl9jb3VudF90IGhlbHBlcl9jb3VudHNbXSA9IHsKKyNkZWZp bmUgT1BDT0RFKFRBRykgICAgeyAwLCAjVEFHIH0sCisjaW5jbHVkZSAib3Bjb2Rlc19kZWZfZ2Vu ZXJhdGVkLmgiCisjdW5kZWYgT1BDT0RFCisgICAgeyAwLCBOVUxMIH0KK307CisKKyNkZWZpbmUg Q09VTlRfSEVMUEVSKFRBRykgXAorICAgIGRvIHsgXAorICAgICAgICBoZWxwZXJfY291bnRzWyhU QUcpXS5jb3VudCsrOyBcCisgICAgfSB3aGlsZSAoMCkKKwordm9pZCBwcmludF9oZWxwZXJfY291 bnRzKHZvaWQpCit7CisgICAgaGVscGVyX2NvdW50X3QgKnA7CisKKyAgICBwcmludGYoIkhFTFBF UiBDT1VOVFNcbiIpOworICAgIGZvciAocCA9IGhlbHBlcl9jb3VudHM7IHAtPnRhZzsgcCsrKSB7 CisgICAgICAgIGlmIChwLT5jb3VudCkgeworICAgICAgICAgICAgcHJpbnRmKCJcdCVkXHRcdCVz XG4iLCBwLT5jb3VudCwgcC0+dGFnKTsKKyAgICAgICAgfQorICAgIH0KK30KKyNlbHNlCisjZGVm aW5lIENPVU5UX0hFTFBFUihUQUcpICAgICAgICAgICAgICAvKiBOb3RoaW5nICovCisjZW5kaWYK KworLyogRXhjZXB0aW9ucyBwcm9jZXNzaW5nIGhlbHBlcnMgKi8KK3N0YXRpYyB2b2lkIFFFTVVf Tk9SRVRVUk4gZG9fcmFpc2VfZXhjZXB0aW9uX2VycihDUFVIZXhhZ29uU3RhdGUgKmVudiwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBl eGNlcHRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgdWludHB0cl90IHBjKQoreworICAgIENQVVN0YXRlICpjcyA9IENQVShoZXhhZ29uX2Vudl9n ZXRfY3B1KGVudikpOworICAgIHFlbXVfbG9nX21hc2soQ1BVX0xPR19JTlQsICIlczogJWRcbiIs IF9fZnVuY19fLCBleGNlcHRpb24pOworICAgIGNzLT5leGNlcHRpb25faW5kZXggPSBleGNlcHRp b247CisgICAgY3B1X2xvb3BfZXhpdF9yZXN0b3JlKGNzLCBwYyk7Cit9CisKK3ZvaWQgSEVMUEVS KHJhaXNlX2V4Y2VwdGlvbikoQ1BVSGV4YWdvblN0YXRlICplbnYsIHVpbnQzMl90IGV4Y2VwdGlv bikKK3sKKyAgICBkb19yYWlzZV9leGNlcHRpb25fZXJyKGVudiwgZXhjZXB0aW9uLCAwKTsKK30K Kworc3RhdGljIGlubGluZSB2b2lkIGxvZ19yZWdfd3JpdGUoQ1BVSGV4YWdvblN0YXRlICplbnYs IGludCBybnVtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0X3Vsb25n IHZhbCwgdWludDMyX3Qgc2xvdCkKK3sKKyAgICBIRVhfREVCVUdfTE9HKCJsb2dfcmVnX3dyaXRl WyVkXSA9ICIgVEFSR0VUX0ZNVF9sZCAiICgweCIgVEFSR0VUX0ZNVF9seCAiKSIsCisgICAgICAg ICAgICAgICAgICBybnVtLCB2YWwsIHZhbCk7CisgICAgaWYgKGVudi0+c2xvdF9jYW5jZWxsZWQg JiAoMSA8PCBzbG90KSkgeworICAgICAgICBIRVhfREVCVUdfTE9HKCIgQ0FOQ0VMTEVEIik7Cisg ICAgfQorICAgIGlmICh2YWwgPT0gZW52LT5ncHJbcm51bV0pIHsKKyAgICAgICAgSEVYX0RFQlVH X0xPRygiIE5PIENIQU5HRSIpOworICAgIH0KKyAgICBIRVhfREVCVUdfTE9HKCJcbiIpOworICAg IGlmICghKGVudi0+c2xvdF9jYW5jZWxsZWQgJiAoMSA8PCBzbG90KSkpIHsKKyAgICAgICAgZW52 LT5uZXdfdmFsdWVbcm51bV0gPSB2YWw7CisgICAgfQorfQorCitzdGF0aWMgX19hdHRyaWJ1dGVf XygodW51c2VkKSkKK2lubGluZSB2b2lkIGxvZ19yZWdfd3JpdGVfcGFpcihDUFVIZXhhZ29uU3Rh dGUgKmVudiwgaW50IHJudW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGludDY0X3QgdmFsLCB1aW50MzJfdCBzbG90KQoreworICAgIEhFWF9ERUJVR19MT0coImxvZ19y ZWdfd3JpdGVfcGFpclslZDolZF0gPSAlbGRcbiIsIHJudW0gKyAxLCBybnVtLCB2YWwpOworICAg IGxvZ19yZWdfd3JpdGUoZW52LCBybnVtLCB2YWwgJiAweEZGRkZGRkZGLCBzbG90KTsKKyAgICBs b2dfcmVnX3dyaXRlKGVudiwgcm51bSArIDEsICh2YWwgPj4gMzIpICYgMHhGRkZGRkZGRiwgc2xv dCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBsb2dfcHJlZF93cml0ZShDUFVIZXhhZ29uU3Rh dGUgKmVudiwgaW50IHBudW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFy Z2V0X3Vsb25nIHZhbCkKK3sKKyAgICBIRVhfREVCVUdfTE9HKCJsb2dfcHJlZF93cml0ZVslZF0g PSAiIFRBUkdFVF9GTVRfbGQKKyAgICAgICAgICAgICAgICAgICIgKDB4IiBUQVJHRVRfRk1UX2x4 ICIpXG4iLAorICAgICAgICAgICAgICAgICAgcG51bSwgdmFsLCB2YWwpOworCisgICAgLyogTXVs dGlwbGUgd3JpdGVzIHRvIHRoZSBzYW1lIHByZWcgYXJlIGFuZCdlZCB0b2dldGhlciAqLworICAg IGlmIChlbnYtPnByZWRfd3JpdHRlbltwbnVtXSkgeworICAgICAgICBlbnYtPm5ld19wcmVkX3Zh bHVlW3BudW1dICY9IHZhbCAmIDB4ZmY7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW52LT5uZXdf cHJlZF92YWx1ZVtwbnVtXSA9IHZhbCAmIDB4ZmY7CisgICAgICAgIGVudi0+cHJlZF93cml0dGVu W3BudW1dID0gMTsKKyAgICB9Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBsb2dfc3RvcmUzMihD UFVIZXhhZ29uU3RhdGUgKmVudiwgdGFyZ2V0X3Vsb25nIGFkZHIsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgdGFyZ2V0X3Vsb25nIHZhbCwgaW50IHdpZHRoLCBpbnQgc2xvdCkKK3sK KyAgICBIRVhfREVCVUdfTE9HKCJsb2dfc3RvcmUlZCgweCIgVEFSR0VUX0ZNVF9seCAiLCAiIFRB UkdFVF9GTVRfbGQKKyAgICAgICAgICAgICAgICAgICIgWzB4IiBUQVJHRVRfRk1UX2x4ICJdKVxu IiwKKyAgICAgICAgICAgICAgICAgIHdpZHRoLCBhZGRyLCB2YWwsIHZhbCk7CisgICAgZW52LT5t ZW1fbG9nX3N0b3Jlc1tzbG90XS52YSA9IGFkZHI7CisgICAgZW52LT5tZW1fbG9nX3N0b3Jlc1tz bG90XS53aWR0aCA9IHdpZHRoOworICAgIGVudi0+bWVtX2xvZ19zdG9yZXNbc2xvdF0uZGF0YTMy ID0gdmFsOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbG9nX3N0b3JlNjQoQ1BVSGV4YWdvblN0 YXRlICplbnYsIHRhcmdldF91bG9uZyBhZGRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGludDY0X3QgdmFsLCBpbnQgd2lkdGgsIGludCBzbG90KQoreworICAgIEhFWF9ERUJVR19M T0coImxvZ19zdG9yZSVkKDB4IiBUQVJHRVRfRk1UX2x4ICIsICVsZCBbMHglbHhdKVxuIiwKKyAg ICAgICAgICAgICAgICAgICB3aWR0aCwgYWRkciwgdmFsLCB2YWwpOworICAgIGVudi0+bWVtX2xv Z19zdG9yZXNbc2xvdF0udmEgPSBhZGRyOworICAgIGVudi0+bWVtX2xvZ19zdG9yZXNbc2xvdF0u d2lkdGggPSB3aWR0aDsKKyAgICBlbnYtPm1lbV9sb2dfc3RvcmVzW3Nsb3RdLmRhdGE2NCA9IHZh bDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHdyaXRlX25ld19wYyhDUFVIZXhhZ29uU3RhdGUg KmVudiwgdGFyZ2V0X3Vsb25nIGFkZHIpCit7CisgICAgSEVYX0RFQlVHX0xPRygid3JpdGVfbmV3 X3BjKDB4IiBUQVJHRVRfRk1UX2x4ICIpXG4iLCBhZGRyKTsKKworICAgIC8qCisgICAgICogSWYg bW9yZSB0aGFuIG9uZSBicmFuY2ggaXQgdGFrZW4gaW4gYSBwYWNrZXQsIG9ubHkgdGhlIGZpcnN0 IG9uZQorICAgICAqIGlzIGFjdHVhbGx5IGRvbmUuCisgICAgICovCisgICAgaWYgKGVudi0+YnJh bmNoX3Rha2VuKSB7CisgICAgICAgIEhFWF9ERUJVR19MT0coIklORk86IG11bHRpcGxlIGJyYW5j aGVzIHRha2VuIGluIHNhbWUgcGFja2V0LCAiCisgICAgICAgICAgICAgICAgICAgICAgImlnbm9y aW5nIHRoZSBzZWNvbmQgb25lXG4iKTsKKyAgICB9IGVsc2UgeworICAgICAgICBmQ0hFQ0tfUENB TElHTihhZGRyKTsKKyAgICAgICAgZW52LT5icmFuY2hfdGFrZW4gPSAxOworICAgICAgICBlbnYt Pm5leHRfUEMgPSBhZGRyOworICAgIH0KK30KKworLyogSGFuZHkgcGxhY2UgdG8gc2V0IGEgYnJl YWtwb2ludCAqLwordm9pZCBIRUxQRVIoZGVidWdfc3RhcnRfcGFja2V0KShDUFVIZXhhZ29uU3Rh dGUgKmVudikKK3sKKyAgICBIRVhfREVCVUdfTE9HKCJTdGFydCBwYWNrZXQ6IHBjID0gMHgiIFRB UkdFVF9GTVRfbHggIlxuIiwKKyAgICAgICAgICAgICAgICAgIGVudi0+Z3ByW0hFWF9SRUdfUENd KTsKKworICAgIGludCBpOworICAgIGZvciAoaSA9IDA7IGkgPCBUT1RBTF9QRVJfVEhSRUFEX1JF R1M7IGkrKykgeworICAgICAgICBlbnYtPnJlZ193cml0dGVuW2ldID0gMDsKKyAgICB9Cit9CisK Ky8qCisgKiBUaGlzIGhlbHBlciBpcyBuZWVkZWQgd2hlbiB0aGUgcm51bSBoYXMgYWxyZWFkeSBi ZWVuIHR1cm5lZCBpbnRvIGEgVENHdiwKKyAqIHNvIHdlIGNhbid0IGp1c3QgZG8gdGNnX2dlbl9t b3ZfdGwocmVzdWx0LCBoZXhfbmV3X3ZhbHVlW3JudW1dKTsKKyAqLworaW50MzJfdCBIRUxQRVIo bmV3X3ZhbHVlKShDUFVIZXhhZ29uU3RhdGUgKmVudiwgaW50IHJudW0pCit7CisgICAgcmV0dXJu IGVudi0+bmV3X3ZhbHVlW3JudW1dOworfQorCitzdGF0aWMgaW5saW5lIGludDMyX3QgbmV3X3By ZWRfdmFsdWUoQ1BVSGV4YWdvblN0YXRlICplbnYsIGludCBwbnVtKQoreworICAgIHJldHVybiBl bnYtPm5ld19wcmVkX3ZhbHVlW3BudW1dOworfQorCisvKiBDaGVja3MgZm9yIGJvb2trZWVwaW5n IGVycm9ycyBiZXR3ZWVuIGRpc2Fzc2VtYmx5IGNvbnRleHQgYW5kIHJ1bnRpbWUgKi8KK3ZvaWQg SEVMUEVSKGRlYnVnX2NoZWNrX3N0b3JlX3dpZHRoKShDUFVIZXhhZ29uU3RhdGUgKmVudiwgaW50 IHNsb3QsIGludCBjaGVjaykKK3sKKyAgICBpZiAoZW52LT5tZW1fbG9nX3N0b3Jlc1tzbG90XS53 aWR0aCAhPSBjaGVjaykgeworICAgICAgICBIRVhfREVCVUdfTE9HKCJFUlJPUjogJWQgIT0gJWRc biIsCisgICAgICAgICAgICAgICAgICAgICAgZW52LT5tZW1fbG9nX3N0b3Jlc1tzbG90XS53aWR0 aCwgY2hlY2spOworICAgICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCgpOworICAgIH0KK30KKwor c3RhdGljIHZvaWQgcHJpbnRfc3RvcmUoQ1BVSGV4YWdvblN0YXRlICplbnYsIGludCBzbG90KQor eworICAgIGlmICghKGVudi0+c2xvdF9jYW5jZWxsZWQgJiAoMSA8PCBzbG90KSkpIHsKKyAgICAg ICAgc2l6ZTF1X3Qgd2lkdGggPSBlbnYtPm1lbV9sb2dfc3RvcmVzW3Nsb3RdLndpZHRoOworICAg ICAgICBpZiAod2lkdGggPT0gMSkgeworICAgICAgICAgICAgc2l6ZTR1X3QgZGF0YSA9IGVudi0+ bWVtX2xvZ19zdG9yZXNbc2xvdF0uZGF0YTMyICYgMHhmZjsKKyAgICAgICAgICAgIEhFWF9ERUJV R19MT0coIlx0bWVtYlsweCIgVEFSR0VUX0ZNVF9seCAiXSA9ICVkICgweCUwMngpXG4iLAorICAg ICAgICAgICAgICAgICAgICAgICAgICBlbnYtPm1lbV9sb2dfc3RvcmVzW3Nsb3RdLnZhLCBkYXRh LCBkYXRhKTsKKyAgICAgICAgfSBlbHNlIGlmICh3aWR0aCA9PSAyKSB7CisgICAgICAgICAgICBz aXplNHVfdCBkYXRhID0gZW52LT5tZW1fbG9nX3N0b3Jlc1tzbG90XS5kYXRhMzIgJiAweGZmZmY7 CisgICAgICAgICAgICBIRVhfREVCVUdfTE9HKCJcdG1lbWhbMHgiIFRBUkdFVF9GTVRfbHggIl0g PSAlZCAoMHglMDR4KVxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZW52LT5tZW1fbG9n X3N0b3Jlc1tzbG90XS52YSwgZGF0YSwgZGF0YSk7CisgICAgICAgIH0gZWxzZSBpZiAod2lkdGgg PT0gNCkgeworICAgICAgICAgICAgc2l6ZTR1X3QgZGF0YSA9IGVudi0+bWVtX2xvZ19zdG9yZXNb c2xvdF0uZGF0YTMyOworICAgICAgICAgICAgSEVYX0RFQlVHX0xPRygiXHRtZW13WzB4IiBUQVJH RVRfRk1UX2x4ICJdID0gJWQgKDB4JTA4eClcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAg IGVudi0+bWVtX2xvZ19zdG9yZXNbc2xvdF0udmEsIGRhdGEsIGRhdGEpOworICAgICAgICB9IGVs c2UgaWYgKHdpZHRoID09IDgpIHsKKyAgICAgICAgICAgIEhFWF9ERUJVR19MT0coIlx0bWVtZFsw eCIgVEFSR0VUX0ZNVF9seCAiXSA9ICVsdSAoMHglMDE2bHgpXG4iLAorICAgICAgICAgICAgICAg ICAgICAgICAgICBlbnYtPm1lbV9sb2dfc3RvcmVzW3Nsb3RdLnZhLAorICAgICAgICAgICAgICAg ICAgICAgICAgICBlbnYtPm1lbV9sb2dfc3RvcmVzW3Nsb3RdLmRhdGE2NCwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgZW52LT5tZW1fbG9nX3N0b3Jlc1tzbG90XS5kYXRhNjQpOworICAgICAg ICB9IGVsc2UgeworICAgICAgICAgICAgSEVYX0RFQlVHX0xPRygiXHRCYWQgc3RvcmUgd2lkdGgg JWRcbiIsIHdpZHRoKTsKKyAgICAgICAgICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVkKCk7CisgICAg ICAgIH0KKyAgICB9Cit9CisKKy8qIFRoaXMgZnVuY3Rpb24gaXMgYSBoYW5keSBwbGFjZSB0byBz ZXQgYSBicmVha3BvaW50ICovCit2b2lkIEhFTFBFUihkZWJ1Z19jb21taXRfZW5kKShDUFVIZXhh Z29uU3RhdGUgKmVudiwgaW50IGhhc19zdDAsIGludCBoYXNfc3QxKQoreworICAgIGJvb2wgcmVn X3ByaW50ZWQgPSBmYWxzZTsKKyAgICBib29sIHByZWRfcHJpbnRlZCA9IGZhbHNlOworICAgIGlu dCBpOworCisgICAgSEVYX0RFQlVHX0xPRygiUGFja2V0IGNvbW1pdHRlZDogcGMgPSAweCIgVEFS R0VUX0ZNVF9seCAiXG4iLAorICAgICAgICAgICAgICAgICAgZW52LT50aGlzX1BDKTsKKworICAg IGZvciAoaSA9IDA7IGkgPCBUT1RBTF9QRVJfVEhSRUFEX1JFR1M7IGkrKykgeworICAgICAgICBp ZiAoZW52LT5yZWdfd3JpdHRlbltpXSkgeworICAgICAgICAgICAgaWYgKCFyZWdfcHJpbnRlZCkg eworICAgICAgICAgICAgICAgIEhFWF9ERUJVR19MT0coIlJlZ3Mgd3JpdHRlblxuIik7CisgICAg ICAgICAgICAgICAgcmVnX3ByaW50ZWQgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICAg ICAgSEVYX0RFQlVHX0xPRygiXHRyJWQgPSAiIFRBUkdFVF9GTVRfbGQgIiAoMHgiIFRBUkdFVF9G TVRfbHggIiApXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICBpLCBlbnYtPm5ld192YWx1 ZVtpXSwgZW52LT5uZXdfdmFsdWVbaV0pOworICAgICAgICB9CisgICAgfQorCisgICAgZm9yIChp ID0gMDsgaSA8IE5VTV9QUkVHUzsgaSsrKSB7CisgICAgICAgIGlmIChlbnYtPnByZWRfd3JpdHRl bltpXSkgeworICAgICAgICAgICAgaWYgKCFwcmVkX3ByaW50ZWQpIHsKKyAgICAgICAgICAgICAg ICBIRVhfREVCVUdfTE9HKCJQcmVkaWNhdGVzIHdyaXR0ZW5cbiIpOworICAgICAgICAgICAgICAg IHByZWRfcHJpbnRlZCA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBIRVhfREVC VUdfTE9HKCJcdHAlZCA9IDB4IiBUQVJHRVRfRk1UX2x4ICJcbiIsCisgICAgICAgICAgICAgICAg ICAgICAgICAgIGksIGVudi0+bmV3X3ByZWRfdmFsdWVbaV0pOworICAgICAgICB9CisgICAgfQor CisgICAgaWYgKGhhc19zdDAgfHwgaGFzX3N0MSkgeworICAgICAgICBIRVhfREVCVUdfTE9HKCJT dG9yZXNcbiIpOworICAgICAgICBpZiAoaGFzX3N0MCkgeworICAgICAgICAgICAgcHJpbnRfc3Rv cmUoZW52LCAwKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoaGFzX3N0MSkgeworICAgICAgICAg ICAgcHJpbnRfc3RvcmUoZW52LCAxKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIEhFWF9ERUJV R19MT0coIk5leHQgUEMgPSAweCV4XG4iLCBlbnYtPm5leHRfUEMpOworICAgIEhFWF9ERUJVR19M T0coIkV4ZWMgY291bnRlcnM6IHBrdCA9ICIgVEFSR0VUX0ZNVF9seAorICAgICAgICAgICAgICAg ICAgIiwgaW5zbiA9ICIgVEFSR0VUX0ZNVF9seAorICAgICAgICAgICAgICAgICAgIiwgaHZ4ID0g IiBUQVJHRVRfRk1UX2x4ICJcbiIsCisgICAgICAgICAgICAgICAgICBlbnYtPmdwcltIRVhfUkVH X1FFTVVfUEtUX0NOVF0sCisgICAgICAgICAgICAgICAgICBlbnYtPmdwcltIRVhfUkVHX1FFTVVf SU5TTl9DTlRdLAorICAgICAgICAgICAgICAgICAgZW52LT5ncHJbSEVYX1JFR19RRU1VX0hWWF9D TlRdKTsKKworfQorCisvKgorICogc2ZyZWNpcGEsIHNmaW52c3FydGEsIHZhY3NoIGhhdmUgdHdv IHJlc3VsdHMKKyAqICAgICByMCxwMD1zZnJlY2lwYShyMSxyMikKKyAqICAgICByMCxwMD1zZmlu dnNxcnRhKHIxKQorICogICAgIHIxOjAscDA9dmFjc2gocjM6MixyNTo0KQorICogU2luY2UgaGVs cGVycyBjYW4gb25seSByZXR1cm4gYSBzaW5nbGUgdmFsdWUsIHdlIGhhdmUgdHdvIGhlbHBlcnMK KyAqIGZvciBlYWNoIG9mIHRoZXNlLiBUaGV5IGVhY2ggY29udGFpbiBiYXNpY2FsbHkgdGhlIHNh bWUgY29kZSAoY29weS9wYXN0ZWQKKyAqIGZyb20gdGhlIGFyY2ggbGlicmFyeSksIGJ1dCBvbmUg cmV0dXJucyB0aGUgcmVnaXN0ZXIgYW5kIHRoZSBvdGhlcgorICogcmV0dXJucyB0aGUgcHJlZGlj YXRlLgorICovCitpbnQzMl90IEhFTFBFUihzZnJlY2lwYV92YWwpKENQVUhleGFnb25TdGF0ZSAq ZW52LCBpbnQzMl90IFJzViwgaW50MzJfdCBSdFYpCit7CisgICAgLyogaW50MzJfdCBQZVY7IE5v dCBuZWVkZWQgdG8gY29tcHV0ZSB2YWx1ZSAqLworICAgIGludDMyX3QgUmRWOworICAgIGZISURF KGludCBpZHg7KQorICAgIGZISURFKGludCBhZGp1c3Q7KQorICAgIGZISURFKGludCBtYW50OykK KyAgICBmSElERShpbnQgZXhwOykKKyAgICBpZiAoZlNGX1JFQ0lQX0NPTU1PTihSc1YsIFJ0Viwg UmRWLCBhZGp1c3QpKSB7CisgICAgICAgIC8qIFBlViA9IGFkanVzdDsgTm90IG5lZWRlZCB0byBj b21wdXRlIHZhbHVlICovCisgICAgICAgIGlkeCA9IChSdFYgPj4gMTYpICYgMHg3ZjsKKyAgICAg ICAgbWFudCA9IChmU0ZfUkVDSVBfTE9PS1VQKGlkeCkgPDwgMTUpIHwgMTsKKyAgICAgICAgZXhw ID0gZlNGX0JJQVMoKSAtIChmU0ZfR0VURVhQKFJ0VikgLSBmU0ZfQklBUygpKSAtIDE7CisgICAg ICAgIFJkViA9IGZNQUtFU0YoZkdFVEJJVCgzMSwgUnRWKSwgZXhwLCBtYW50KTsKKyAgICB9Cisg ICAgcmV0dXJuIFJkVjsKK30KKworaW50MzJfdCBIRUxQRVIoc2ZyZWNpcGFfcHJlZCkoQ1BVSGV4 YWdvblN0YXRlICplbnYsIGludDMyX3QgUnNWLCBpbnQzMl90IFJ0VikKK3sKKyAgICBpbnQzMl90 IFBlViA9IDA7CisgICAgaW50MzJfdCBSZFY7CisgICAgZkhJREUoaW50IGlkeDspCisgICAgZkhJ REUoaW50IGFkanVzdDspCisgICAgZkhJREUoaW50IG1hbnQ7KQorICAgIGZISURFKGludCBleHA7 KQorICAgIGlmIChmU0ZfUkVDSVBfQ09NTU9OKFJzViwgUnRWLCBSZFYsIGFkanVzdCkpIHsKKyAg ICAgICAgUGVWID0gYWRqdXN0OworICAgICAgICBpZHggPSAoUnRWID4+IDE2KSAmIDB4N2Y7Cisg ICAgICAgIG1hbnQgPSAoZlNGX1JFQ0lQX0xPT0tVUChpZHgpIDw8IDE1KSB8IDE7CisgICAgICAg IGV4cCA9IGZTRl9CSUFTKCkgLSAoZlNGX0dFVEVYUChSdFYpIC0gZlNGX0JJQVMoKSkgLSAxOwor ICAgICAgICBSZFYgPSBmTUFLRVNGKGZHRVRCSVQoMzEsIFJ0ViksIGV4cCwgbWFudCk7CisgICAg fQorICAgIHJldHVybiBQZVY7Cit9CisKK2ludDMyX3QgSEVMUEVSKHNmaW52c3FydGFfdmFsKShD UFVIZXhhZ29uU3RhdGUgKmVudiwgaW50MzJfdCBSc1YpCit7CisgICAgLyogaW50MzJfdCBQZVY7 IE5vdCBuZWVkZWQgZm9yIHZhbCB2ZXJzaW9uICovCisgICAgaW50MzJfdCBSZFY7CisgICAgZkhJ REUoaW50IGlkeDspCisgICAgZkhJREUoaW50IGFkanVzdDspCisgICAgZkhJREUoaW50IG1hbnQ7 KQorICAgIGZISURFKGludCBleHA7KQorICAgIGlmIChmU0ZfSU5WU1FSVF9DT01NT04oUnNWLCBS ZFYsIGFkanVzdCkpIHsKKyAgICAgICAgLyogUGVWID0gYWRqdXN0OyBOb3QgbmVlZGVkIGZvciB2 YWwgdmVyc2lvbiAqLworICAgICAgICBpZHggPSAoUnNWID4+IDE3KSAmIDB4N2Y7CisgICAgICAg IG1hbnQgPSAoZlNGX0lOVlNRUlRfTE9PS1VQKGlkeCkgPDwgMTUpOworICAgICAgICBleHAgPSBm U0ZfQklBUygpIC0gKChmU0ZfR0VURVhQKFJzVikgLSBmU0ZfQklBUygpKSA+PiAxKSAtIDE7Cisg ICAgICAgIFJkViA9IGZNQUtFU0YoZkdFVEJJVCgzMSwgUnNWKSwgZXhwLCBtYW50KTsKKyAgICB9 CisgICAgcmV0dXJuIFJkVjsKK30KKworaW50MzJfdCBIRUxQRVIoc2ZpbnZzcXJ0YV9wcmVkKShD UFVIZXhhZ29uU3RhdGUgKmVudiwgaW50MzJfdCBSc1YpCit7CisgICAgaW50MzJfdCBQZVYgPSAw OworICAgIGludDMyX3QgUmRWOworICAgIGZISURFKGludCBpZHg7KQorICAgIGZISURFKGludCBh ZGp1c3Q7KQorICAgIGZISURFKGludCBtYW50OykKKyAgICBmSElERShpbnQgZXhwOykKKyAgICBp ZiAoZlNGX0lOVlNRUlRfQ09NTU9OKFJzViwgUmRWLCBhZGp1c3QpKSB7CisgICAgICAgIFBlViA9 IGFkanVzdDsKKyAgICAgICAgaWR4ID0gKFJzViA+PiAxNykgJiAweDdmOworICAgICAgICBtYW50 ID0gKGZTRl9JTlZTUVJUX0xPT0tVUChpZHgpIDw8IDE1KTsKKyAgICAgICAgZXhwID0gZlNGX0JJ QVMoKSAtICgoZlNGX0dFVEVYUChSc1YpIC0gZlNGX0JJQVMoKSkgPj4gMSkgLSAxOworICAgICAg ICBSZFYgPSBmTUFLRVNGKGZHRVRCSVQoMzEsIFJzViksIGV4cCwgbWFudCk7CisgICAgfQorICAg IHJldHVybiBQZVY7Cit9CisKK2ludDY0X3QgSEVMUEVSKHZhY3NoX3ZhbCkoQ1BVSGV4YWdvblN0 YXRlICplbnYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQ2NF90IFJ4eFYsIGludDY0 X3QgUnNzViwgaW50NjRfdCBSdHRWKQoreworICAgIGludDMyX3QgUGVWID0gMDsKKyAgICBmSElE RShpbnQgaTspCisgICAgZkhJREUoaW50IHh2OykKKyAgICBmSElERShpbnQgc3Y7KQorICAgIGZI SURFKGludCB0djspCisgICAgZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgeworICAgICAgICB4diA9 IChpbnQpZkdFVEhBTEYoaSwgUnh4Vik7CisgICAgICAgIHN2ID0gKGludClmR0VUSEFMRihpLCBS c3NWKTsKKyAgICAgICAgdHYgPSAoaW50KWZHRVRIQUxGKGksIFJ0dFYpOworICAgICAgICB4diA9 IHh2ICsgdHY7CisgICAgICAgIHN2ID0gc3YgLSB0djsKKyAgICAgICAgZlNFVEJJVChpICogMiwg UGVWLCAoeHYgPiBzdikpOworICAgICAgICBmU0VUQklUKGkgKiAyICsgMSwgUGVWLCAoeHYgPiBz dikpOworICAgICAgICBmU0VUSEFMRihpLCBSeHhWLCBmU0FUSChmTUFYKHh2LCBzdikpKTsKKyAg ICB9CisgICAgcmV0dXJuIFJ4eFY7Cit9CisKK2ludDMyX3QgSEVMUEVSKHZhY3NoX3ByZWQpKENQ VUhleGFnb25TdGF0ZSAqZW52LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50NjRfdCBS eHhWLCBpbnQ2NF90IFJzc1YsIGludDY0X3QgUnR0VikKK3sKKyAgICBpbnQzMl90IFBlViA9IDA7 CisgICAgZkhJREUoaW50IGk7KQorICAgIGZISURFKGludCB4djspCisgICAgZkhJREUoaW50IHN2 OykKKyAgICBmSElERShpbnQgdHY7KQorICAgIGZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKKyAg ICAgICAgeHYgPSAoaW50KWZHRVRIQUxGKGksIFJ4eFYpOworICAgICAgICBzdiA9IChpbnQpZkdF VEhBTEYoaSwgUnNzVik7CisgICAgICAgIHR2ID0gKGludClmR0VUSEFMRihpLCBSdHRWKTsKKyAg ICAgICAgeHYgPSB4diArIHR2OworICAgICAgICBzdiA9IHN2IC0gdHY7CisgICAgICAgIGZTRVRC SVQoaSAqIDIsIFBlViwgKHh2ID4gc3YpKTsKKyAgICAgICAgZlNFVEJJVChpICogMiArIDEsIFBl ViwgKHh2ID4gc3YpKTsKKyAgICAgICAgZlNFVEhBTEYoaSwgUnh4ViwgZlNBVEgoZk1BWCh4diwg c3YpKSk7CisgICAgfQorICAgIHJldHVybiBQZVY7Cit9CisKKy8qIEhlbHBmdWwgZm9yIHByaW50 aW5nIGludGVybWVkaWF0ZSB2YWx1ZXMgd2l0aGluIGluc3RydWN0aW9ucyAqLwordm9pZCBIRUxQ RVIoZGVidWdfdmFsdWUpKENQVUhleGFnb25TdGF0ZSAqZW52LCBpbnQzMl90IHZhbHVlKQorewor ICAgIEhFWF9ERUJVR19MT0coInZhbHVlID0gMHgleFxuIiwgdmFsdWUpOworfQorCit2b2lkIEhF TFBFUihkZWJ1Z192YWx1ZV9pNjQpKENQVUhleGFnb25TdGF0ZSAqZW52LCBpbnQ2NF90IHZhbHVl KQoreworICAgIEhFWF9ERUJVR19MT0coInZhbHVlID0gMHglbHhcbiIsIHZhbHVlKTsKK30KKwor c3RhdGljIHZvaWQgY2FuY2VsX3Nsb3QoQ1BVSGV4YWdvblN0YXRlICplbnYsIHVpbnQzMl90IHNs b3QpCit7CisgICAgSEVYX0RFQlVHX0xPRygiU2xvdCAlZCBjYW5jZWxsZWRcbiIsIHNsb3QpOwor ICAgIGVudi0+c2xvdF9jYW5jZWxsZWQgfD0gKDEgPDwgc2xvdCk7Cit9CisKKy8qIFRoZXNlIG1h Y3JvcyBjYW4gYmUgcmVmZXJlbmNlZCBpbiB0aGUgZ2VuZXJhdGVkIGhlbHBlciBmdW5jdGlvbnMg Ki8KKyNkZWZpbmUgd2FybiguLi4pIC8qIE5vdGhpbmcgKi8KKyNkZWZpbmUgZmF0YWwoLi4uKSBn X2Fzc2VydF9ub3RfcmVhY2hlZCgpOworCisjZGVmaW5lIEJPR1VTX0hFTFBFUih0YWcpIFwKKyAg ICBwcmludGYoIkVSUk9SOiBib2d1cyBoZWxwZXI6ICIgI3RhZyAiXG4iKQorCisjZGVmaW5lIERF Rl9RRU1VKFRBRywgU0hPUlRDT0RFLCBIRUxQRVIsIEdFTkZOLCBIRUxQRk4pIEhFTFBGTgorI2lu Y2x1ZGUgInFlbXVfZGVmX2dlbmVyYXRlZC5oIgorI3VuZGVmIERFRl9RRU1VCisKLS0gCjIuNy40 Cgo=