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 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 7521AC433F5 for ; Tue, 12 Oct 2021 10:54:26 +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 03C8961050 for ; Tue, 12 Oct 2021 10:54:25 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.1 mail.kernel.org 03C8961050 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=quicinc.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=nongnu.org Received: from localhost ([::1]:43888 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1maFQP-00005u-49 for qemu-devel@archiver.kernel.org; Tue, 12 Oct 2021 06:54:25 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:50626) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1maElm-0001Kk-F3 for qemu-devel@nongnu.org; Tue, 12 Oct 2021 06:12:27 -0400 Received: from alexa-out-sd-02.qualcomm.com ([199.106.114.39]:64100) by eggs.gnu.org with esmtps (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1maElj-0007Fq-JY for qemu-devel@nongnu.org; Tue, 12 Oct 2021 06:12:26 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=quicinc.com; i=@quicinc.com; q=dns/txt; s=qcdkim; t=1634033543; x=1665569543; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=a/pTfUt6IF7hCIGqXND48yK2gQsfcVd4YCxIFghkjxk=; b=AGQrV8u6RjCRGdJA2ilu4poHLMuFwRIg0zIvOI66C+Ubfl0M1v7VSYqR NIm8nCKniacf+4Mfv1FrumhrbnvHWmMS9lgPO3i0sNc9RNdXGFkfOyaMY JoI81qFDK6wrN4Wf0QFFxQvMODJeXWf1SmWsckE/LTXmVB1A6YX53ihKv s=; Received: from unknown (HELO ironmsg03-sd.qualcomm.com) ([10.53.140.143]) by alexa-out-sd-02.qualcomm.com with ESMTP; 12 Oct 2021 03:11:24 -0700 X-QCInternal: smtphost Received: from vu-tsimpson-aus.qualcomm.com (HELO vu-tsimpson1-aus.qualcomm.com) ([10.222.150.1]) by ironmsg03-sd.qualcomm.com with ESMTP; 12 Oct 2021 03:11:24 -0700 Received: by vu-tsimpson1-aus.qualcomm.com (Postfix, from userid 47164) id 774D61777; Tue, 12 Oct 2021 05:11:22 -0500 (CDT) From: Taylor Simpson To: qemu-devel@nongnu.org Subject: [PATCH v4 25/30] Hexagon HVX (target/hexagon) instruction decoding Date: Tue, 12 Oct 2021 05:11:03 -0500 Message-Id: <1634033468-23566-26-git-send-email-tsimpson@quicinc.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1634033468-23566-1-git-send-email-tsimpson@quicinc.com> References: <1634033468-23566-1-git-send-email-tsimpson@quicinc.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Received-SPF: pass client-ip=199.106.114.39; envelope-from=tsimpson@qualcomm.com; helo=alexa-out-sd-02.qualcomm.com X-Spam_score_int: -40 X-Spam_score: -4.1 X-Spam_bar: ---- X-Spam_report: (-4.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, HEADER_FROM_DIFFERENT_DOMAINS=0.249, RCVD_IN_DNSWL_MED=-2.3, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action 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: ale@rev.ng, bcain@quicinc.com, tsimpson@quicinc.com, richard.henderson@linaro.org, f4bug@amsat.org Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: "Qemu-devel" QWRkIG5ldyBmaWxlIHRvIHRhcmdldC9oZXhhZ29uL21lc29uLmJ1aWxkCgpBY2tlZC1ieTogUmlj aGFyZCBIZW5kZXJzb24gPHJpY2hhcmQuaGVuZGVyc29uQGxpbmFyby5vcmc+ClNpZ25lZC1vZmYt Ynk6IFRheWxvciBTaW1wc29uIDx0c2ltcHNvbkBxdWljaW5jLmNvbT4KLS0tCiB0YXJnZXQvaGV4 YWdvbi9tbXZlYy9kZWNvZGVfZXh0X21tdmVjLmggfCAgMjQgKysrKwogdGFyZ2V0L2hleGFnb24v ZGVjb2RlLmMgICAgICAgICAgICAgICAgIHwgIDI0ICsrKy0KIHRhcmdldC9oZXhhZ29uL21tdmVj L2RlY29kZV9leHRfbW12ZWMuYyB8IDIzNiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KwogdGFyZ2V0L2hleGFnb24vbWVzb24uYnVpbGQgICAgICAgICAgICAgIHwgICAxICsKIDQgZmls ZXMgY2hhbmdlZCwgMjgzIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9k ZSAxMDA2NDQgdGFyZ2V0L2hleGFnb24vbW12ZWMvZGVjb2RlX2V4dF9tbXZlYy5oCiBjcmVhdGUg bW9kZSAxMDA2NDQgdGFyZ2V0L2hleGFnb24vbW12ZWMvZGVjb2RlX2V4dF9tbXZlYy5jCgpkaWZm IC0tZ2l0IGEvdGFyZ2V0L2hleGFnb24vbW12ZWMvZGVjb2RlX2V4dF9tbXZlYy5oIGIvdGFyZ2V0 L2hleGFnb24vbW12ZWMvZGVjb2RlX2V4dF9tbXZlYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAuLjM2NjRiNjgKLS0tIC9kZXYvbnVsbAorKysgYi90YXJnZXQvaGV4YWdvbi9t bXZlYy9kZWNvZGVfZXh0X21tdmVjLmgKQEAgLTAsMCArMSwyNCBAQAorLyoKKyAqICBDb3B5cmln aHQoYykgMjAxOS0yMDIxIFF1YWxjb21tIElubm92YXRpb24gQ2VudGVyLCBJbmMuIEFsbCBSaWdo dHMgUmVzZXJ2ZWQuCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1z IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0 aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNl bnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog IFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg dXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp bXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh IGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0 aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4K KyAqLworCisjaWZuZGVmIEhFWEFHT05fREVDT0RFX0VYVF9NTVZFQ19ICisjZGVmaW5lIEhFWEFH T05fREVDT0RFX0VYVF9NTVZFQ19ICisKK3ZvaWQgbW12ZWNfZXh0X2RlY29kZV9jaGVja3MoUGFj a2V0ICpwa3QsIGJvb2wgZGlzYXNfb25seSk7CitTbG90TWFzayBtbXZlY19leHRfZGVjb2RlX2Zp bmRfaWNsYXNzX3Nsb3RzKGludCBvcGNvZGUpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL3Rhcmdl dC9oZXhhZ29uL2RlY29kZS5jIGIvdGFyZ2V0L2hleGFnb24vZGVjb2RlLmMKaW5kZXggZDQyNDI0 NS4uNjUzYmZkNyAxMDA2NDQKLS0tIGEvdGFyZ2V0L2hleGFnb24vZGVjb2RlLmMKKysrIGIvdGFy Z2V0L2hleGFnb24vZGVjb2RlLmMKQEAgLTIyLDYgKzIyLDcgQEAKICNpbmNsdWRlICJkZWNvZGUu aCIKICNpbmNsdWRlICJpbnNuLmgiCiAjaW5jbHVkZSAicHJpbnRpbnNuLmgiCisjaW5jbHVkZSAi bW12ZWMvZGVjb2RlX2V4dF9tbXZlYy5oIgogCiAjZGVmaW5lIGZaWFROKE4sIE0sIFZBTCkgKChW QUwpICYgKCgxTEwgPDwgKE4pKSAtIDEpKQogCkBAIC01NjYsOCArNTY3LDEyIEBAIHN0YXRpYyB2 b2lkIGRlY29kZV9yZW1vdmVfZXh0ZW5kZXJzKFBhY2tldCAqcGFja2V0KQogCiBzdGF0aWMgU2xv dE1hc2sgZ2V0X3ZhbGlkX3Nsb3RzKGNvbnN0IFBhY2tldCAqcGt0LCB1bnNpZ25lZCBpbnQgc2xv dCkKIHsKLSAgICByZXR1cm4gZmluZF9pY2xhc3Nfc2xvdHMocGt0LT5pbnNuW3Nsb3RdLm9wY29k ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGt0LT5pbnNuW3Nsb3RdLmljbGFzcyk7 CisgICAgaWYgKEdFVF9BVFRSSUIocGt0LT5pbnNuW3Nsb3RdLm9wY29kZSwgQV9FWFRFTlNJT04p KSB7CisgICAgICAgIHJldHVybiBtbXZlY19leHRfZGVjb2RlX2ZpbmRfaWNsYXNzX3Nsb3RzKHBr dC0+aW5zbltzbG90XS5vcGNvZGUpOworICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVybiBmaW5k X2ljbGFzc19zbG90cyhwa3QtPmluc25bc2xvdF0ub3Bjb2RlLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgcGt0LT5pbnNuW3Nsb3RdLmljbGFzcyk7CisgICAgfQogfQogCiAjZGVm aW5lIERFQ09ERV9ORVdfVEFCTEUoVEFHLCBTSVpFLCBXSEFUTk9UKSAgICAgLyogTk9USElORyAq LwpAQCAtNzI4LDYgKzczMywxMSBAQCBkZWNvZGVfaW5zbnNfdGFibGV3YWxrKEluc24gKmluc24s IGNvbnN0IERlY3RyZWVUYWJsZSAqdGFibGUsCiAgICAgICAgIH0KICAgICAgICAgZGVjb2RlX29w KGluc24sIG9wYywgZW5jb2RpbmcpOwogICAgICAgICByZXR1cm4gMTsKKyAgICB9IGVsc2UgaWYg KHRhYmxlLT50YWJsZVtpXS50eXBlID09IERFQ1RSRUVfRVhUU1BBQ0UpIHsKKyAgICAgICAgLyoK KyAgICAgICAgICogRm9yIG5vdywgSFZYIHdpbGwgYmUgdGhlIG9ubHkgY29wcm9jCisgICAgICAg ICAqLworICAgICAgICByZXR1cm4gZGVjb2RlX2luc25zX3RhYmxld2FsayhpbnNuLCBleHRfdHJl ZXNbRVhUX0lEWF9tbXZlY10sIGVuY29kaW5nKTsKICAgICB9IGVsc2UgewogICAgICAgICByZXR1 cm4gMDsKICAgICB9CkBAIC04NzQsNiArODg0LDcgQEAgaW50IGRlY29kZV9wYWNrZXQoaW50IG1h eF93b3JkcywgY29uc3QgdWludDMyX3QgKndvcmRzLCBQYWNrZXQgKnBrdCwKICAgICBpbnQgd29y ZHNfcmVhZCA9IDA7CiAgICAgYm9vbCBlbmRfb2ZfcGFja2V0ID0gZmFsc2U7CiAgICAgaW50IG5l d19pbnNucyA9IDA7CisgICAgaW50IGk7CiAgICAgdWludDMyX3QgZW5jb2RpbmczMjsKIAogICAg IC8qIEluaXRpYWxpemUgKi8KQEAgLTkwMSw2ICs5MTIsMTEgQEAgaW50IGRlY29kZV9wYWNrZXQo aW50IG1heF93b3JkcywgY29uc3QgdWludDMyX3QgKndvcmRzLCBQYWNrZXQgKnBrdCwKICAgICAg ICAgcmV0dXJuIDA7CiAgICAgfQogICAgIHBrdC0+ZW5jb2RfcGt0X3NpemVfaW5fYnl0ZXMgPSB3 b3Jkc19yZWFkICogNDsKKyAgICBwa3QtPnBrdF9oYXNfaHZ4ID0gZmFsc2U7CisgICAgZm9yIChp ID0gMDsgaSA8IG51bV9pbnNuczsgaSsrKSB7CisgICAgICAgIHBrdC0+cGt0X2hhc19odnggfD0K KyAgICAgICAgICAgIEdFVF9BVFRSSUIocGt0LT5pbnNuW2ldLm9wY29kZSwgQV9DVkkpOworICAg IH0KIAogICAgIC8qCiAgICAgICogQ2hlY2sgZm9yIDplbmRsb29wIGluIHRoZSBwYXJzZSBiaXRz CkBAIC05MzEsNiArOTQ3LDEwIEBAIGludCBkZWNvZGVfcGFja2V0KGludCBtYXhfd29yZHMsIGNv bnN0IHVpbnQzMl90ICp3b3JkcywgUGFja2V0ICpwa3QsCiAgICAgZGVjb2RlX3NldF9zbG90X251 bWJlcihwa3QpOwogICAgIGRlY29kZV9maWxsX25ld3ZhbHVlX3JlZ25vKHBrdCk7CiAKKyAgICBp ZiAocGt0LT5wa3RfaGFzX2h2eCkgeworICAgICAgICBtbXZlY19leHRfZGVjb2RlX2NoZWNrcyhw a3QsIGRpc2FzX29ubHkpOworICAgIH0KKwogICAgIGlmICghZGlzYXNfb25seSkgewogICAgICAg ICBkZWNvZGVfc2h1ZmZsZV9mb3JfZXhlY3V0aW9uKHBrdCk7CiAgICAgICAgIGRlY29kZV9zcGxp dF9jbXBqdW1wKHBrdCk7CmRpZmYgLS1naXQgYS90YXJnZXQvaGV4YWdvbi9tbXZlYy9kZWNvZGVf ZXh0X21tdmVjLmMgYi90YXJnZXQvaGV4YWdvbi9tbXZlYy9kZWNvZGVfZXh0X21tdmVjLmMKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDYxYTY1YQotLS0gL2Rldi9udWxsCisr KyBiL3RhcmdldC9oZXhhZ29uL21tdmVjL2RlY29kZV9leHRfbW12ZWMuYwpAQCAtMCwwICsxLDIz NiBAQAorLyoKKyAqICBDb3B5cmlnaHQoYykgMjAxOS0yMDIxIFF1YWxjb21tIElubm92YXRpb24g Q2VudGVyLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogIFRoaXMgcHJvZ3JhbSBp cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Cisg KiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBh cyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIg dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxh dGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklM SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdO VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBz aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIDxodHRwOi8vd3d3 LmdudS5vcmcvbGljZW5zZXMvPi4KKyAqLworCisjaW5jbHVkZSAicWVtdS9vc2RlcC5oIgorI2lu Y2x1ZGUgImRlY29kZS5oIgorI2luY2x1ZGUgIm9wY29kZXMuaCIKKyNpbmNsdWRlICJpbnNuLmgi CisjaW5jbHVkZSAiaWNsYXNzLmgiCisjaW5jbHVkZSAibW12ZWMvbW12ZWMuaCIKKyNpbmNsdWRl ICJtbXZlYy9kZWNvZGVfZXh0X21tdmVjLmgiCisKK3N0YXRpYyB2b2lkCitjaGVja19uZXdfdmFs dWUoUGFja2V0ICpwa3QpCit7CisgICAgLyogLm5ldyB2YWx1ZSBmb3IgYSBNTVZlY3RvciBzdG9y ZSAqLworICAgIGludCBpLCBqOworICAgIGNvbnN0IGNoYXIgKnJlZ2luZm87CisgICAgY29uc3Qg Y2hhciAqZGVzdGxldHRlcnM7CisgICAgY29uc3QgY2hhciAqZHN0c3RyID0gTlVMTDsKKyAgICB1 aW50MTZfdCBkZWZfb3Bjb2RlOworICAgIGNoYXIgbGV0dGVyOworICAgIGludCBkZWZfcmVnbnVt OworCisgICAgZm9yIChpID0gMTsgaSA8IHBrdC0+bnVtX2luc25zOyBpKyspIHsKKyAgICAgICAg dWludDE2X3QgdXNlX29wY29kZSA9IHBrdC0+aW5zbltpXS5vcGNvZGU7CisgICAgICAgIGlmIChH RVRfQVRUUklCKHVzZV9vcGNvZGUsIEFfRE9UTkVXVkFMVUUpICYmCisgICAgICAgICAgICBHRVRf QVRUUklCKHVzZV9vcGNvZGUsIEFfQ1ZJKSAmJgorICAgICAgICAgICAgR0VUX0FUVFJJQih1c2Vf b3Bjb2RlLCBBX1NUT1JFKSkgeworICAgICAgICAgICAgaW50IHVzZV9yZWdpZHggPSBzdHJjaHIo b3Bjb2RlX3JlZ2luZm9bdXNlX29wY29kZV0sICdzJykgLQorICAgICAgICAgICAgICAgIG9wY29k ZV9yZWdpbmZvW3VzZV9vcGNvZGVdOworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAqIFdo YXQncyBlbmNvZGVkIGF0IHRoZSBOLWZpZWxkIGlzIHRoZSBvZmZzZXQgdG8gd2hvJ3MgcHJvZHVj aW5nCisgICAgICAgICAgICAgKiB0aGUgdmFsdWUuCisgICAgICAgICAgICAgKiBTaGlmdCBvZmYg dGhlIExTQiB3aGljaCBpbmRpY2F0ZXMgb2RkL2V2ZW4gcmVnaXN0ZXIuCisgICAgICAgICAgICAg Ki8KKyAgICAgICAgICAgIGludCBkZWZfb2ZmID0gKChwa3QtPmluc25baV0ucmVnbm9bdXNlX3Jl Z2lkeF0pID4+IDEpOworICAgICAgICAgICAgaW50IGRlZl9vcmVnID0gcGt0LT5pbnNuW2ldLnJl Z25vW3VzZV9yZWdpZHhdICYgMTsKKyAgICAgICAgICAgIGludCBkZWZfaWR4ID0gLTE7CisgICAg ICAgICAgICBmb3IgKGogPSBpIC0gMTsgKGogPj0gMCkgJiYgKGRlZl9vZmYgPj0gMCk7IGotLSkg eworICAgICAgICAgICAgICAgIGlmICghR0VUX0FUVFJJQihwa3QtPmluc25bal0ub3Bjb2RlLCBB X0NWSSkpIHsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAg fQorICAgICAgICAgICAgICAgIGRlZl9vZmYtLTsKKyAgICAgICAgICAgICAgICBpZiAoZGVmX29m ZiA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgIGRlZl9pZHggPSBqOworICAgICAgICAgICAg ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg ICAgICAvKgorICAgICAgICAgICAgICogQ2hlY2sgZm9yIGEgYmFkbHkgZW5jb2RlZCBOLWZpZWxk IHdoaWNoIHBvaW50cyB0byBhbiBpbnN0cnVjdGlvbgorICAgICAgICAgICAgICogb3V0LW9mLXJh bmdlCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIGdfYXNzZXJ0KCEoKGRlZl9vZmYgIT0g MCkgfHwgKGRlZl9pZHggPCAwKSB8fAorICAgICAgICAgICAgICAgICAgICAgICAoZGVmX2lkeCA+ IChwa3QtPm51bV9pbnNucyAtIDEpKSkpOworCisgICAgICAgICAgICAvKiBkZWZfaWR4IGlzIHRo ZSBpbmRleCBvZiB0aGUgcHJvZHVjZXIgKi8KKyAgICAgICAgICAgIGRlZl9vcGNvZGUgPSBwa3Qt Pmluc25bZGVmX2lkeF0ub3Bjb2RlOworICAgICAgICAgICAgcmVnaW5mbyA9IG9wY29kZV9yZWdp bmZvW2RlZl9vcGNvZGVdOworICAgICAgICAgICAgZGVzdGxldHRlcnMgPSAiZGV4eSI7CisgICAg ICAgICAgICBmb3IgKGogPSAwOyAobGV0dGVyID0gZGVzdGxldHRlcnNbal0pICE9IDA7IGorKykg eworICAgICAgICAgICAgICAgIGRzdHN0ciA9IHN0cmNocihyZWdpbmZvLCBsZXR0ZXIpOworICAg ICAgICAgICAgICAgIGlmIChkc3RzdHIgIT0gTlVMTCkgeworICAgICAgICAgICAgICAgICAgICBi cmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAo KGRzdHN0ciA9PSBOVUxMKSAgJiYgR0VUX0FUVFJJQihkZWZfb3Bjb2RlLCBBX0NWSV9HQVRIRVIp KSB7CisgICAgICAgICAgICAgICAgZGVmX3JlZ251bSA9IDA7CisgICAgICAgICAgICAgICAgcGt0 LT5pbnNuW2ldLnJlZ25vW3VzZV9yZWdpZHhdID0gZGVmX29yZWc7CisgICAgICAgICAgICAgICAg cGt0LT5pbnNuW2ldLm5ld192YWx1ZV9wcm9kdWNlcl9zbG90ID0gcGt0LT5pbnNuW2RlZl9pZHhd LnNsb3Q7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGlmIChkc3RzdHIg PT0gTlVMTCkgeworICAgICAgICAgICAgICAgICAgICAvKiBzdGlsbCBub3QgdGhlcmUsIHdlIGhh dmUgYSBiYWQgcGFja2V0ICovCisgICAgICAgICAgICAgICAgICAgIGdfYXNzZXJ0X25vdF9yZWFj aGVkKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGRlZl9yZWdudW0gPSBw a3QtPmluc25bZGVmX2lkeF0ucmVnbm9bZHN0c3RyIC0gcmVnaW5mb107CisgICAgICAgICAgICAg ICAgLyogTm93IHBhdGNoIHVwIHRoZSBjb25zdW1lciB3aXRoIHRoZSByZWdpc3RlciBudW1iZXIg Ki8KKyAgICAgICAgICAgICAgICBwa3QtPmluc25baV0ucmVnbm9bdXNlX3JlZ2lkeF0gPSBkZWZf cmVnbnVtIF4gZGVmX29yZWc7CisgICAgICAgICAgICAgICAgLyogc3BlY2lhbCBjYXNlIGZvciAo VngsVnkpICovCisgICAgICAgICAgICAgICAgZHN0c3RyID0gc3RyY2hyKHJlZ2luZm8sICd5Jyk7 CisgICAgICAgICAgICAgICAgaWYgKGRlZl9vcmVnICYmIHN0cmNocihyZWdpbmZvLCAneCcpICYm IGRzdHN0cikgeworICAgICAgICAgICAgICAgICAgICBkZWZfcmVnbnVtID0gcGt0LT5pbnNuW2Rl Zl9pZHhdLnJlZ25vW2RzdHN0ciAtIHJlZ2luZm9dOworICAgICAgICAgICAgICAgICAgICBwa3Qt Pmluc25baV0ucmVnbm9bdXNlX3JlZ2lkeF0gPSBkZWZfcmVnbnVtOworICAgICAgICAgICAgICAg IH0KKyAgICAgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAgICAqIFdlIG5lZWQgdG8gcmVt ZW1iZXIgd2hvIHByb2R1Y2VzIHRoaXMgdmFsdWUgdG8gbGF0ZXIKKyAgICAgICAgICAgICAgICAg KiBjaGVjayBpZiBpdCB3YXMgZHluYW1pY2FsbHkgY2FuY2VsbGVkCisgICAgICAgICAgICAgICAg ICovCisgICAgICAgICAgICAgICAgcGt0LT5pbnNuW2ldLm5ld192YWx1ZV9wcm9kdWNlcl9zbG90 ID0gcGt0LT5pbnNuW2RlZl9pZHhdLnNsb3Q7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg ICB9Cit9CisKKy8qCisgKiBXZSBkb24ndCB3YW50IHRvIHJlb3JkZXIgc2xvdDEvc2xvdDAgd2l0 aCByZXNwZWN0IHRvIGVhY2ggb3RoZXIuCisgKiBTbyBpbiBvdXIgc2h1ZmZsaW5nLCB3ZSBkb24n dCB3YW50IHRvIG1vdmUgdGhlIC5jdXIgLyAudG1wIHZtZW0gZWFybGllcgorICogSW5zdGVhZCwg d2Ugc2hvdWxkIG1vdmUgdGhlIHByb2R1Y2luZyBpbnN0cnVjdGlvbiBsYXRlcgorICogQnV0IHRo ZSBwcm9kdWNpbmcgaW5zdHJ1Y3Rpb24gbWlnaHQgZmVlZCBhIC5uZXcgc3RvcmUhCisgKiBTbyB3 ZSBtYXkgbmVlZCB0byBtb3ZlIHRoYXQgZXZlbiBsYXRlci4KKyAqLworCitzdGF0aWMgdm9pZAor ZGVjb2RlX21tdmVjX21vdmVfY3ZpX3RvX2VuZChQYWNrZXQgKnBrdCwgaW50IG1heCkKK3sKKyAg ICBpbnQgaTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgbWF4OyBpKyspIHsKKyAgICAgICAgaWYgKEdF VF9BVFRSSUIocGt0LT5pbnNuW2ldLm9wY29kZSwgQV9DVkkpKSB7CisgICAgICAgICAgICBpbnQg bGFzdF9pbnN0ID0gcGt0LT5udW1faW5zbnMgLSAxOworICAgICAgICAgICAgdWludDE2X3QgbGFz dF9vcGNvZGUgPSBwa3QtPmluc25bbGFzdF9pbnN0XS5vcGNvZGU7CisKKyAgICAgICAgICAgIC8q CisgICAgICAgICAgICAgKiBJZiB0aGUgbGFzdCBpbnN0cnVjdGlvbiBpcyBhbiBlbmRsb29wLCBt b3ZlIHRvIHRoZSBvbmUgYmVmb3JlIGl0CisgICAgICAgICAgICAgKiBLZWVwIGVuZGxvb3AgYXMg dGhlIGxhc3QgdGhpbmcgYWx3YXlzCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIGlmICgo bGFzdF9vcGNvZGUgPT0gSjJfZW5kbG9vcDApIHx8CisgICAgICAgICAgICAgICAgKGxhc3Rfb3Bj b2RlID09IEoyX2VuZGxvb3AxKSB8fAorICAgICAgICAgICAgICAgIChsYXN0X29wY29kZSA9PSBK Ml9lbmRsb29wMDEpKSB7CisgICAgICAgICAgICAgICAgbGFzdF9pbnN0LS07CisgICAgICAgICAg ICB9CisKKyAgICAgICAgICAgIGRlY29kZV9zZW5kX2luc25fdG8ocGt0LCBpLCBsYXN0X2luc3Qp OworICAgICAgICAgICAgbWF4LS07CisgICAgICAgICAgICBpLS07ICAgIC8qIFJldHJ5IHRoaXMg aW5kZXggbm93IHRoYXQgcGFja2V0IGhhcyByb3RhdGVkICovCisgICAgICAgIH0KKyAgICB9Cit9 CisKK3N0YXRpYyB2b2lkCitkZWNvZGVfc2h1ZmZsZV9mb3JfZXhlY3V0aW9uX3ZvcHMoUGFja2V0 ICpwa3QpCit7CisgICAgLyoKKyAgICAgKiBTb3J0IGZvciAubmV3CisgICAgICovCisgICAgaW50 IGk7CisgICAgZm9yIChpID0gMDsgaSA8IHBrdC0+bnVtX2luc25zOyBpKyspIHsKKyAgICAgICAg dWludDE2X3Qgb3Bjb2RlID0gcGt0LT5pbnNuW2ldLm9wY29kZTsKKyAgICAgICAgaWYgKEdFVF9B VFRSSUIob3Bjb2RlLCBBX0xPQUQpICYmCisgICAgICAgICAgICAoR0VUX0FUVFJJQihvcGNvZGUs IEFfQ1ZJX05FVykgfHwKKyAgICAgICAgICAgICBHRVRfQVRUUklCKG9wY29kZSwgQV9DVklfVE1Q KSkpIHsKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgKiBGaW5kIHByaW9yIGNvbnN1bWlu ZyB2ZWN0b3IgaW5zdHJ1Y3Rpb25zCisgICAgICAgICAgICAgKiBNb3ZlIHRvIGVuZCBvZiBwYWNr ZXQKKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgZGVjb2RlX21tdmVjX21vdmVfY3ZpX3Rv X2VuZChwa3QsIGkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAg ICAvKiBNb3ZlIEhWWCBuZXcgdmFsdWUgc3RvcmVzIHRvIHRoZSBlbmQgb2YgdGhlIHBhY2tldCAq LworICAgIGZvciAoaSA9IDA7IGkgPCBwa3QtPm51bV9pbnNucyAtIDE7IGkrKykgeworICAgICAg ICB1aW50MTZfdCBvcGNvZGUgPSBwa3QtPmluc25baV0ub3Bjb2RlOworICAgICAgICBpZiAoR0VU X0FUVFJJQihvcGNvZGUsIEFfU1RPUkUpICYmCisgICAgICAgICAgICBHRVRfQVRUUklCKG9wY29k ZSwgQV9DVklfTkVXKSAmJgorICAgICAgICAgICAgIUdFVF9BVFRSSUIob3Bjb2RlLCBBX0NWSV9T Q0FUVEVSX1JFTEVBU0UpKSB7CisgICAgICAgICAgICBpbnQgbGFzdF9pbnN0ID0gcGt0LT5udW1f aW5zbnMgLSAxOworICAgICAgICAgICAgdWludDE2X3QgbGFzdF9vcGNvZGUgPSBwa3QtPmluc25b bGFzdF9pbnN0XS5vcGNvZGU7CisKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgKiBJZiB0 aGUgbGFzdCBpbnN0cnVjdGlvbiBpcyBhbiBlbmRsb29wLCBtb3ZlIHRvIHRoZSBvbmUgYmVmb3Jl IGl0CisgICAgICAgICAgICAgKiBLZWVwIGVuZGxvb3AgYXMgdGhlIGxhc3QgdGhpbmcgYWx3YXlz CisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIGlmICgobGFzdF9vcGNvZGUgPT0gSjJfZW5k bG9vcDApIHx8CisgICAgICAgICAgICAgICAgKGxhc3Rfb3Bjb2RlID09IEoyX2VuZGxvb3AxKSB8 fAorICAgICAgICAgICAgICAgIChsYXN0X29wY29kZSA9PSBKMl9lbmRsb29wMDEpKSB7CisgICAg ICAgICAgICAgICAgbGFzdF9pbnN0LS07CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGRl Y29kZV9zZW5kX2luc25fdG8ocGt0LCBpLCBsYXN0X2luc3QpOworICAgICAgICAgICAgYnJlYWs7 CisgICAgICAgIH0KKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkCitjaGVja19mb3Jfdmhpc3QoUGFj a2V0ICpwa3QpCit7CisgICAgcGt0LT52aGlzdF9pbnNuID0gTlVMTDsKKyAgICBmb3IgKGludCBp ID0gMDsgaSA8IHBrdC0+bnVtX2luc25zOyBpKyspIHsKKyAgICAgICAgSW5zbiAqaW5zbiA9ICZw a3QtPmluc25baV07CisgICAgICAgIGludCBvcGNvZGUgPSBpbnNuLT5vcGNvZGU7CisgICAgICAg IGlmIChHRVRfQVRUUklCKG9wY29kZSwgQV9DVkkpICYmIEdFVF9BVFRSSUIob3Bjb2RlLCBBX0NW SV80U0xPVCkpIHsKKyAgICAgICAgICAgICAgICBwa3QtPnZoaXN0X2luc24gPSBpbnNuOworICAg ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KK30KKworLyoKKyAqIFB1Ymxp YyBGdW5jdGlvbnMKKyAqLworCitTbG90TWFzayBtbXZlY19leHRfZGVjb2RlX2ZpbmRfaWNsYXNz X3Nsb3RzKGludCBvcGNvZGUpCit7CisgICAgaWYgKEdFVF9BVFRSSUIob3Bjb2RlLCBBX0NWSV9W TSkpIHsKKyAgICAgICAgLyogSFZYIG1lbW9yeSBpbnN0cnVjdGlvbiAqLworICAgICAgICBpZiAo R0VUX0FUVFJJQihvcGNvZGUsIEFfUkVTVFJJQ1RfU0xPVDBPTkxZKSkgeworICAgICAgICAgICAg cmV0dXJuIFNMT1RTXzA7CisgICAgICAgIH0gZWxzZSBpZiAoR0VUX0FUVFJJQihvcGNvZGUsIEFf UkVTVFJJQ1RfU0xPVDFPTkxZKSkgeworICAgICAgICAgICAgcmV0dXJuIFNMT1RTXzE7CisgICAg ICAgIH0KKyAgICAgICAgcmV0dXJuIFNMT1RTXzAxOworICAgIH0gZWxzZSBpZiAoR0VUX0FUVFJJ QihvcGNvZGUsIEFfUkVTVFJJQ1RfU0xPVDJPTkxZKSkgeworICAgICAgICByZXR1cm4gU0xPVFNf MjsKKyAgICB9IGVsc2UgaWYgKEdFVF9BVFRSSUIob3Bjb2RlLCBBX0NWSV9WWCkpIHsKKyAgICAg ICAgLyogSFZYIG11bHRpcGx5IGluc3RydWN0aW9uICovCisgICAgICAgIHJldHVybiBTTE9UU18y MzsKKyAgICB9IGVsc2UgaWYgKEdFVF9BVFRSSUIob3Bjb2RlLCBBX0NWSV9WU19WWCkpIHsKKyAg ICAgICAgLyogSFZYIHBlcm11dGUvc2hpZnQgaW5zdHJ1Y3Rpb24gKi8KKyAgICAgICAgcmV0dXJu IFNMT1RTXzIzOworICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVybiBTTE9UU18wMTIzOworICAg IH0KK30KKwordm9pZCBtbXZlY19leHRfZGVjb2RlX2NoZWNrcyhQYWNrZXQgKnBrdCwgYm9vbCBk aXNhc19vbmx5KQoreworICAgIGNoZWNrX25ld192YWx1ZShwa3QpOworICAgIGlmICghZGlzYXNf b25seSkgeworICAgICAgICBkZWNvZGVfc2h1ZmZsZV9mb3JfZXhlY3V0aW9uX3ZvcHMocGt0KTsK KyAgICB9CisgICAgY2hlY2tfZm9yX3ZoaXN0KHBrdCk7Cit9CmRpZmYgLS1naXQgYS90YXJnZXQv aGV4YWdvbi9tZXNvbi5idWlsZCBiL3RhcmdldC9oZXhhZ29uL21lc29uLmJ1aWxkCmluZGV4IGEz NWViMjguLmI2MTI0MzEgMTAwNjQ0Ci0tLSBhL3RhcmdldC9oZXhhZ29uL21lc29uLmJ1aWxkCisr KyBiL3RhcmdldC9oZXhhZ29uL21lc29uLmJ1aWxkCkBAIC0xNzUsNiArMTc1LDcgQEAgaGV4YWdv bl9zcy5hZGQoZmlsZXMoCiAgICAgJ3ByaW50aW5zbi5jJywKICAgICAnYXJjaC5jJywKICAgICAn Zm1hX2VtdS5jJywKKyAgICAnbW12ZWMvZGVjb2RlX2V4dF9tbXZlYy5jJywKICAgICAnbW12ZWMv c3lzdGVtX2V4dF9tbXZlYy5jJywKICkpCiAKLS0gCjIuNy40Cgo=